@ditojs/admin 1.11.0 → 1.13.0
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/dito-admin.es.js +85 -89
- package/dist/dito-admin.umd.js +3 -3
- package/package.json +12 -7
- package/src/DitoAdmin.js +22 -21
- package/src/mixins/DitoMixin.js +8 -14
- package/src/types/TypeColor.vue +2 -0
- package/src/types/TypeMultiselect.vue +2 -2
- package/src/types/TypeSlider.vue +1 -0
- package/types/index.d.ts +1212 -0
package/dist/dito-admin.es.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
var Fs = Object.defineProperty;
|
|
2
2
|
var Rs = (t, e, s) => e in t ? Fs(t, e, { enumerable: !0, configurable: !0, writable: !0, value: s }) : t[e] = s;
|
|
3
3
|
var lt = (t, e, s) => (Rs(t, typeof e != "symbol" ? e + "" : e, s), s);
|
|
4
|
-
import
|
|
4
|
+
import M from "vue";
|
|
5
5
|
import Ts from "vue-js-modal";
|
|
6
6
|
import Qe from "vue-router";
|
|
7
7
|
import Is from "vue-notification";
|
|
8
|
-
import { normalizeDataPath as A, getValueAtDataPath as W, isInteger as J, parseDataPath as
|
|
8
|
+
import { normalizeDataPath as A, getValueAtDataPath as W, isInteger as J, parseDataPath as q, isFunction as v, isArray as x, isPlainObject as Mt, isBoolean as Ms, isNumber as Y, isString as E, isDate as Ct, isObject as C, isRegExp as wt, asArray as L, pickBy as Ge, labelize as I, equals as Pt, format as qs, hyphenate as Q, isCreditCard as As, isEmail as Ns, isHostname as Us, isDomain as zs, isUrl as Hs, isPromise as xt, isModule as Ks, clone as at, camelize as Xe, getCommonPrefix as Ws, stripTags as Js, capitalize as z, deindent as Qs, merge as ft, escapeHtml as Ye, debounceAsync as Gs, debounce as Xs, underscore as Ys, defaultFormats as Zs, isAbsoluteUrl as Ze } from "@ditojs/utils";
|
|
9
9
|
import { nanoid as tn } from "nanoid";
|
|
10
10
|
import { addEvents as ts, TransitionHeight as en, Pagination as sn, Trigger as nn, DatePicker as an, TimePicker as rn, DateTimePicker as on, Icon as ln, InputField as Dt, SwitchButton as un } from "@ditojs/ui";
|
|
11
11
|
import St from "vuedraggable";
|
|
@@ -19,7 +19,7 @@ import kn from "vue-multiselect";
|
|
|
19
19
|
import Ln from "vue-upload-component";
|
|
20
20
|
import Bn from "filesize-parser";
|
|
21
21
|
import { filesize as Fn } from "filesize";
|
|
22
|
-
const
|
|
22
|
+
const qt = {
|
|
23
23
|
title: "",
|
|
24
24
|
routeComponents: [],
|
|
25
25
|
user: null,
|
|
@@ -31,11 +31,11 @@ function k(t, e) {
|
|
|
31
31
|
return t ? `${t}/${e}` : e;
|
|
32
32
|
}
|
|
33
33
|
function Rn(t) {
|
|
34
|
-
const e =
|
|
34
|
+
const e = q(t);
|
|
35
35
|
return e == null || e.pop(), e;
|
|
36
36
|
}
|
|
37
37
|
function Ot(t, e = !1) {
|
|
38
|
-
return e ? Rn(t) :
|
|
38
|
+
return e ? Rn(t) : q(t);
|
|
39
39
|
}
|
|
40
40
|
function Tn(t, e = !1) {
|
|
41
41
|
return A(Ot(t, e));
|
|
@@ -64,10 +64,10 @@ function Et(t, e, s = !1) {
|
|
|
64
64
|
return n ? W(t, n) : null;
|
|
65
65
|
}
|
|
66
66
|
function ss(t) {
|
|
67
|
-
const e =
|
|
67
|
+
const e = q(t);
|
|
68
68
|
return e[e.length - 1];
|
|
69
69
|
}
|
|
70
|
-
function
|
|
70
|
+
function Mn(t) {
|
|
71
71
|
const e = ss(t);
|
|
72
72
|
return e == null || J(+e) ? null : e;
|
|
73
73
|
}
|
|
@@ -75,9 +75,9 @@ function ct(t) {
|
|
|
75
75
|
const e = ss(t), s = e == null ? null : +e;
|
|
76
76
|
return J(s) ? s : null;
|
|
77
77
|
}
|
|
78
|
-
let
|
|
78
|
+
let qn = 0;
|
|
79
79
|
function An(t, e = "id") {
|
|
80
|
-
t[e] = `@${++
|
|
80
|
+
t[e] = `@${++qn}`;
|
|
81
81
|
}
|
|
82
82
|
function Z(t) {
|
|
83
83
|
return /^@/.test(t);
|
|
@@ -113,7 +113,7 @@ class D {
|
|
|
113
113
|
return $(this, "dataPath", "");
|
|
114
114
|
}
|
|
115
115
|
get name() {
|
|
116
|
-
return $(this, "name", () =>
|
|
116
|
+
return $(this, "name", () => Mn(this.dataPath));
|
|
117
117
|
}
|
|
118
118
|
get index() {
|
|
119
119
|
return $(this, "index", () => ct(this.dataPath));
|
|
@@ -236,7 +236,7 @@ const zn = {
|
|
|
236
236
|
if (x(t))
|
|
237
237
|
for (const s of t)
|
|
238
238
|
this.on(s, e);
|
|
239
|
-
else if (
|
|
239
|
+
else if (Mt(t))
|
|
240
240
|
for (const s in t)
|
|
241
241
|
this.on(s, t[s]);
|
|
242
242
|
else {
|
|
@@ -259,7 +259,7 @@ const zn = {
|
|
|
259
259
|
else if (x(t))
|
|
260
260
|
for (const n of t)
|
|
261
261
|
this.off(n, e);
|
|
262
|
-
else if (
|
|
262
|
+
else if (Mt(t))
|
|
263
263
|
for (const n in t)
|
|
264
264
|
this.off(n, t[n]);
|
|
265
265
|
else {
|
|
@@ -324,7 +324,7 @@ const zn = {
|
|
|
324
324
|
}
|
|
325
325
|
}
|
|
326
326
|
}, dt = {
|
|
327
|
-
Boolean:
|
|
327
|
+
Boolean: Ms,
|
|
328
328
|
Number: Y,
|
|
329
329
|
String: E,
|
|
330
330
|
Date: Ct,
|
|
@@ -393,7 +393,7 @@ const pt = {
|
|
|
393
393
|
},
|
|
394
394
|
data() {
|
|
395
395
|
return {
|
|
396
|
-
appState:
|
|
396
|
+
appState: qt,
|
|
397
397
|
overrides: null
|
|
398
398
|
};
|
|
399
399
|
},
|
|
@@ -403,7 +403,7 @@ const pt = {
|
|
|
403
403
|
return (t = this.meta) == null ? void 0 : t.schema;
|
|
404
404
|
},
|
|
405
405
|
user() {
|
|
406
|
-
return
|
|
406
|
+
return qt.user;
|
|
407
407
|
},
|
|
408
408
|
verbs() {
|
|
409
409
|
return this.$verbs();
|
|
@@ -562,14 +562,11 @@ const pt = {
|
|
|
562
562
|
},
|
|
563
563
|
getResourceUrl(t) {
|
|
564
564
|
const e = this.getResourcePath(t);
|
|
565
|
-
|
|
566
|
-
return null;
|
|
567
|
-
const s = this.api.getApiUrl(e), { query: n } = t, a = n && new URLSearchParams(n).toString();
|
|
568
|
-
return a ? `${s}?${a}` : s;
|
|
565
|
+
return e ? this.api.getApiUrl({ url: e, query: t.query }) : null;
|
|
569
566
|
},
|
|
570
567
|
async sendRequest({ method: t, url: e, resource: s, query: n, data: a, internal: i }) {
|
|
571
568
|
e || (e = this.getResourcePath(s)), t || (t = s == null ? void 0 : s.method);
|
|
572
|
-
const r = !i && this.api.
|
|
569
|
+
const r = !i && this.api.isApiUrl(e);
|
|
573
570
|
r && await this.rootComponent.ensureUser();
|
|
574
571
|
const o = await this.api.request({ method: t, url: e, data: a, query: n });
|
|
575
572
|
return r && t === "patch" && Pt(s, Vt(this.user.id, this.api.users)) && await this.rootComponent.fetchUser(), o;
|
|
@@ -578,7 +575,7 @@ const pt = {
|
|
|
578
575
|
const s = t && {
|
|
579
576
|
global: this.appState,
|
|
580
577
|
local: this.dataComponent
|
|
581
|
-
}[t], n = s == null ? void 0 : s.loadCache, a = n && `${e.method || "get"} ${e.url} ${JSON.stringify(e.params || "")} ${JSON.stringify(e.data || "")}`;
|
|
578
|
+
}[t], n = s == null ? void 0 : s.loadCache, a = n && `${e.method || "get"} ${e.url} ${JSON.stringify(e.query || e.params || "")} ${JSON.stringify(e.data || "")}`;
|
|
582
579
|
if (n && a in n)
|
|
583
580
|
return n[a];
|
|
584
581
|
const i = this.sendRequest(e).then((r) => r.data).catch((r) => {
|
|
@@ -593,7 +590,7 @@ const pt = {
|
|
|
593
590
|
defaults: s = this.api.formats,
|
|
594
591
|
...n
|
|
595
592
|
} = {}) {
|
|
596
|
-
return
|
|
593
|
+
return qs(t, {
|
|
597
594
|
locale: e,
|
|
598
595
|
defaults: s,
|
|
599
596
|
...n
|
|
@@ -609,11 +606,12 @@ const pt = {
|
|
|
609
606
|
});
|
|
610
607
|
},
|
|
611
608
|
download(t = {}) {
|
|
609
|
+
var n;
|
|
612
610
|
E(t) && (t = { url: t });
|
|
613
|
-
const
|
|
614
|
-
|
|
615
|
-
const { body:
|
|
616
|
-
|
|
611
|
+
const e = document.createElement("a");
|
|
612
|
+
e.href = this.api.getApiUrl(t), e.download = (n = t.filename) != null ? n : null;
|
|
613
|
+
const { body: s } = document;
|
|
614
|
+
s.appendChild(e), e.click(), s.removeChild(e);
|
|
617
615
|
},
|
|
618
616
|
notify(t) {
|
|
619
617
|
this.rootComponent.notify(t);
|
|
@@ -804,7 +802,7 @@ const ea = {
|
|
|
804
802
|
}
|
|
805
803
|
};
|
|
806
804
|
function d(t, { type: e, default: s, get: n, set: a, callback: i = !0 } = {}) {
|
|
807
|
-
E(t) && t.includes(".") && (t =
|
|
805
|
+
E(t) && t.includes(".") && (t = q(t));
|
|
808
806
|
const r = A(t);
|
|
809
807
|
return {
|
|
810
808
|
get() {
|
|
@@ -840,7 +838,7 @@ class ga {
|
|
|
840
838
|
}
|
|
841
839
|
set(e, s, n) {
|
|
842
840
|
var i;
|
|
843
|
-
e =
|
|
841
|
+
e = q(e);
|
|
844
842
|
let a = this.graph;
|
|
845
843
|
for (const r of e) {
|
|
846
844
|
const o = J(+r) ? "*" : r;
|
|
@@ -1121,9 +1119,9 @@ function gs(t, e, s, n, {
|
|
|
1121
1119
|
dataPath: n,
|
|
1122
1120
|
rootData: i
|
|
1123
1121
|
}));
|
|
1124
|
-
o !== void 0 &&
|
|
1122
|
+
o !== void 0 && M.set(e, s, o);
|
|
1125
1123
|
}
|
|
1126
|
-
return !(s in e) && !fs(t) &&
|
|
1124
|
+
return !(s in e) && !fs(t) && M.set(e, s, ms(t)), e[s];
|
|
1127
1125
|
}
|
|
1128
1126
|
function vs(t, e, s) {
|
|
1129
1127
|
if (s.schemaOnly) {
|
|
@@ -1503,7 +1501,7 @@ const et = {
|
|
|
1503
1501
|
});
|
|
1504
1502
|
}
|
|
1505
1503
|
}
|
|
1506
|
-
}, st = {}, _ =
|
|
1504
|
+
}, st = {}, _ = M.extend({
|
|
1507
1505
|
components: st,
|
|
1508
1506
|
mixins: [pt],
|
|
1509
1507
|
methods: {
|
|
@@ -1531,7 +1529,7 @@ _.component = function(t, e) {
|
|
|
1531
1529
|
const s = this.extend(e);
|
|
1532
1530
|
return st[t] = s, s;
|
|
1533
1531
|
} else
|
|
1534
|
-
return st[t] ||
|
|
1532
|
+
return st[t] || M.component(t);
|
|
1535
1533
|
};
|
|
1536
1534
|
class Ea {
|
|
1537
1535
|
hasRole(...e) {
|
|
@@ -2046,19 +2044,19 @@ var Ia = /* @__PURE__ */ h(
|
|
|
2046
2044
|
Fa,
|
|
2047
2045
|
Ra,
|
|
2048
2046
|
!1,
|
|
2049
|
-
|
|
2047
|
+
Ma,
|
|
2050
2048
|
null,
|
|
2051
2049
|
null,
|
|
2052
2050
|
null
|
|
2053
2051
|
);
|
|
2054
|
-
function
|
|
2052
|
+
function Ma(t) {
|
|
2055
2053
|
for (let e in Ht)
|
|
2056
2054
|
this[e] = Ht[e];
|
|
2057
2055
|
}
|
|
2058
2056
|
const $t = /* @__PURE__ */ function() {
|
|
2059
2057
|
return Ia.exports;
|
|
2060
2058
|
}();
|
|
2061
|
-
var
|
|
2059
|
+
var qa = function() {
|
|
2062
2060
|
var t = this, e = t.$createElement, s = t._self._c || e;
|
|
2063
2061
|
return s("nav", {
|
|
2064
2062
|
staticClass: "dito-menu dito-scroll-parent"
|
|
@@ -2077,7 +2075,7 @@ var Ma = function() {
|
|
|
2077
2075
|
const Na = _.component("dito-menu", {}), Kt = {};
|
|
2078
2076
|
var Ua = /* @__PURE__ */ h(
|
|
2079
2077
|
Na,
|
|
2080
|
-
|
|
2078
|
+
qa,
|
|
2081
2079
|
Aa,
|
|
2082
2080
|
!1,
|
|
2083
2081
|
za,
|
|
@@ -3014,7 +3012,7 @@ const ji = _.component("dito-schema", {
|
|
|
3014
3012
|
let s = !0;
|
|
3015
3013
|
const n = [];
|
|
3016
3014
|
for (const [i, r] of Object.entries(t)) {
|
|
3017
|
-
const o = this.hasOwnData ? k(this.dataPath, i) : i, l =
|
|
3015
|
+
const o = this.hasOwnData ? k(this.dataPath, i) : i, l = q(o);
|
|
3018
3016
|
let u = !1;
|
|
3019
3017
|
const c = this.getComponentsByDataPath(l);
|
|
3020
3018
|
for (const f of c)
|
|
@@ -3232,10 +3230,10 @@ function Ii(t) {
|
|
|
3232
3230
|
for (let e in se)
|
|
3233
3231
|
this[e] = se[e];
|
|
3234
3232
|
}
|
|
3235
|
-
const
|
|
3233
|
+
const Mi = /* @__PURE__ */ function() {
|
|
3236
3234
|
return Ti.exports;
|
|
3237
3235
|
}();
|
|
3238
|
-
var
|
|
3236
|
+
var qi = function() {
|
|
3239
3237
|
var t = this, e = t.$createElement, s = t._self._c || e;
|
|
3240
3238
|
return t.isPopulated && t.componentSchemas.length > 0 ? s("div", {
|
|
3241
3239
|
directives: [{
|
|
@@ -3337,7 +3335,7 @@ const Ni = _.component("dito-pane", {
|
|
|
3337
3335
|
}), ne = {};
|
|
3338
3336
|
var Ui = /* @__PURE__ */ h(
|
|
3339
3337
|
Ni,
|
|
3340
|
-
|
|
3338
|
+
qi,
|
|
3341
3339
|
Ai,
|
|
3342
3340
|
!1,
|
|
3343
3341
|
zi,
|
|
@@ -4127,16 +4125,16 @@ var Ir = /* @__PURE__ */ h(
|
|
|
4127
4125
|
Fr,
|
|
4128
4126
|
Rr,
|
|
4129
4127
|
!1,
|
|
4130
|
-
|
|
4128
|
+
Mr,
|
|
4131
4129
|
null,
|
|
4132
4130
|
null,
|
|
4133
4131
|
null
|
|
4134
4132
|
);
|
|
4135
|
-
function
|
|
4133
|
+
function Mr(t) {
|
|
4136
4134
|
for (let e in de)
|
|
4137
4135
|
this[e] = de[e];
|
|
4138
4136
|
}
|
|
4139
|
-
const
|
|
4137
|
+
const qr = /* @__PURE__ */ function() {
|
|
4140
4138
|
return Ir.exports;
|
|
4141
4139
|
}(), js = {
|
|
4142
4140
|
data() {
|
|
@@ -4534,7 +4532,7 @@ const Ur = _.component("dito-form", {
|
|
|
4534
4532
|
sourceData() {
|
|
4535
4533
|
let { data: t } = this.parentRouteComponent;
|
|
4536
4534
|
if (t) {
|
|
4537
|
-
const e =
|
|
4535
|
+
const e = q(
|
|
4538
4536
|
this.getDataPathFrom(this.parentRouteComponent)
|
|
4539
4537
|
), s = this.routeRecord.path.split("/"), n = s.slice(s.length - e.length);
|
|
4540
4538
|
this.sourceKey = null;
|
|
@@ -5327,16 +5325,16 @@ var Io = /* @__PURE__ */ h(
|
|
|
5327
5325
|
Ro,
|
|
5328
5326
|
To,
|
|
5329
5327
|
!1,
|
|
5330
|
-
|
|
5328
|
+
Mo,
|
|
5331
5329
|
null,
|
|
5332
5330
|
null,
|
|
5333
5331
|
null
|
|
5334
5332
|
);
|
|
5335
|
-
function
|
|
5333
|
+
function Mo(t) {
|
|
5336
5334
|
for (let e in ye)
|
|
5337
5335
|
this[e] = ye[e];
|
|
5338
5336
|
}
|
|
5339
|
-
const
|
|
5337
|
+
const qo = /* @__PURE__ */ function() {
|
|
5340
5338
|
return Io.exports;
|
|
5341
5339
|
}(), Ao = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
5342
5340
|
__proto__: null,
|
|
@@ -5348,7 +5346,7 @@ const Mo = /* @__PURE__ */ function() {
|
|
|
5348
5346
|
DitoElement: $i,
|
|
5349
5347
|
DitoLabel: Si,
|
|
5350
5348
|
DitoSchema: Li,
|
|
5351
|
-
DitoSchemaInlined:
|
|
5349
|
+
DitoSchemaInlined: Mi,
|
|
5352
5350
|
DitoPane: Hi,
|
|
5353
5351
|
DitoContainer: Yi,
|
|
5354
5352
|
DitoTabs: ar,
|
|
@@ -5357,7 +5355,7 @@ const Mo = /* @__PURE__ */ function() {
|
|
|
5357
5355
|
DitoButtons: Cr,
|
|
5358
5356
|
DitoEditButtons: Or,
|
|
5359
5357
|
DitoCreateButton: Br,
|
|
5360
|
-
DitoClipboard:
|
|
5358
|
+
DitoClipboard: qr,
|
|
5361
5359
|
DitoView: Os,
|
|
5362
5360
|
DitoForm: ks,
|
|
5363
5361
|
DitoFormNested: Xr,
|
|
@@ -5367,7 +5365,7 @@ const Mo = /* @__PURE__ */ function() {
|
|
|
5367
5365
|
DitoTreeItem: Co,
|
|
5368
5366
|
DitoTableHead: Oo,
|
|
5369
5367
|
DitoTableCell: Bo,
|
|
5370
|
-
DitoVNode:
|
|
5368
|
+
DitoVNode: qo
|
|
5371
5369
|
}, Symbol.toStringTag, { value: "Module" })), y = _.extend({
|
|
5372
5370
|
mixins: [et],
|
|
5373
5371
|
nativeField: !1,
|
|
@@ -6451,7 +6449,7 @@ const Fl = /* @__PURE__ */ function() {
|
|
|
6451
6449
|
async navigateToComponent(t, e) {
|
|
6452
6450
|
var s, n;
|
|
6453
6451
|
if (this.collapsible) {
|
|
6454
|
-
const a = t.startsWith(this.dataPath) ? this.isListSource ? (s =
|
|
6452
|
+
const a = t.startsWith(this.dataPath) ? this.isListSource ? (s = q(t.slice(this.dataPath.length + 1))[0]) != null ? s : null : 0 : null;
|
|
6455
6453
|
if (a !== null && Y(+a)) {
|
|
6456
6454
|
const i = this.getSchemaComponent(+a);
|
|
6457
6455
|
if (i) {
|
|
@@ -6472,7 +6470,7 @@ const Fl = /* @__PURE__ */ function() {
|
|
|
6472
6470
|
var l;
|
|
6473
6471
|
const { routeComponents: r } = this.appState, o = r[r.length - 1];
|
|
6474
6472
|
s((l = e == null ? void 0 : e([o])) != null ? l : !0);
|
|
6475
|
-
}, i =
|
|
6473
|
+
}, i = q(t);
|
|
6476
6474
|
for (; i.length > 0; ) {
|
|
6477
6475
|
const r = this.routeComponent.getChildPath(
|
|
6478
6476
|
this.api.normalizePath(A(i))
|
|
@@ -6601,7 +6599,7 @@ function Rl(t, e, s) {
|
|
|
6601
6599
|
target: e,
|
|
6602
6600
|
disabled: !1,
|
|
6603
6601
|
data() {
|
|
6604
|
-
return
|
|
6602
|
+
return Ml(
|
|
6605
6603
|
n,
|
|
6606
6604
|
s.query
|
|
6607
6605
|
);
|
|
@@ -6689,7 +6687,7 @@ function Il(t, e) {
|
|
|
6689
6687
|
}
|
|
6690
6688
|
return s.length ? s : void 0;
|
|
6691
6689
|
}
|
|
6692
|
-
function
|
|
6690
|
+
function Ml(t, e) {
|
|
6693
6691
|
const s = {};
|
|
6694
6692
|
if (e)
|
|
6695
6693
|
for (const a of L(e.filter)) {
|
|
@@ -6714,7 +6712,7 @@ function ql(t, e) {
|
|
|
6714
6712
|
}
|
|
6715
6713
|
return n;
|
|
6716
6714
|
}
|
|
6717
|
-
var
|
|
6715
|
+
var ql = function() {
|
|
6718
6716
|
var t = this, e = t.$createElement, s = t._self._c || e;
|
|
6719
6717
|
return t.isReady ? s("div", {
|
|
6720
6718
|
staticClass: "dito-list",
|
|
@@ -6954,7 +6952,7 @@ const Nl = y.register("list", {
|
|
|
6954
6952
|
}), Ee = {};
|
|
6955
6953
|
var Ul = /* @__PURE__ */ h(
|
|
6956
6954
|
Nl,
|
|
6957
|
-
|
|
6955
|
+
ql,
|
|
6958
6956
|
Al,
|
|
6959
6957
|
!1,
|
|
6960
6958
|
zl,
|
|
@@ -7465,7 +7463,7 @@ const lu = y.register("multiselect", {
|
|
|
7465
7463
|
}),
|
|
7466
7464
|
placeholder() {
|
|
7467
7465
|
const { placeholder: t, searchable: e, taggable: s } = this.schema;
|
|
7468
|
-
return t || (e && s ?
|
|
7466
|
+
return t || (e && s ? `Search or add a ${this.label}` : e ? `Select or search ${this.label}` : void 0);
|
|
7469
7467
|
}
|
|
7470
7468
|
},
|
|
7471
7469
|
mounted() {
|
|
@@ -7835,22 +7833,22 @@ const Iu = y.register("radio", {
|
|
|
7835
7833
|
mixins: [rt],
|
|
7836
7834
|
nativeField: !0
|
|
7837
7835
|
}), Te = {};
|
|
7838
|
-
var
|
|
7836
|
+
var Mu = /* @__PURE__ */ h(
|
|
7839
7837
|
Iu,
|
|
7840
7838
|
Ru,
|
|
7841
7839
|
Tu,
|
|
7842
7840
|
!1,
|
|
7843
|
-
|
|
7841
|
+
qu,
|
|
7844
7842
|
null,
|
|
7845
7843
|
null,
|
|
7846
7844
|
null
|
|
7847
7845
|
);
|
|
7848
|
-
function
|
|
7846
|
+
function qu(t) {
|
|
7849
7847
|
for (let e in Te)
|
|
7850
7848
|
this[e] = Te[e];
|
|
7851
7849
|
}
|
|
7852
7850
|
const Au = /* @__PURE__ */ function() {
|
|
7853
|
-
return
|
|
7851
|
+
return Mu.exports;
|
|
7854
7852
|
}();
|
|
7855
7853
|
var Nu = function() {
|
|
7856
7854
|
var t = this, e = t.$createElement, s = t._self._c || e;
|
|
@@ -7977,7 +7975,7 @@ const Gu = y.register("select", {
|
|
|
7977
7975
|
populate: !0
|
|
7978
7976
|
};
|
|
7979
7977
|
}
|
|
7980
|
-
}),
|
|
7978
|
+
}), Me = {};
|
|
7981
7979
|
var Xu = /* @__PURE__ */ h(
|
|
7982
7980
|
Gu,
|
|
7983
7981
|
Ju,
|
|
@@ -7989,8 +7987,8 @@ var Xu = /* @__PURE__ */ h(
|
|
|
7989
7987
|
null
|
|
7990
7988
|
);
|
|
7991
7989
|
function Yu(t) {
|
|
7992
|
-
for (let e in
|
|
7993
|
-
this[e] =
|
|
7990
|
+
for (let e in Me)
|
|
7991
|
+
this[e] = Me[e];
|
|
7994
7992
|
}
|
|
7995
7993
|
const Zu = /* @__PURE__ */ function() {
|
|
7996
7994
|
return Xu.exports;
|
|
@@ -8050,7 +8048,7 @@ const sc = y.register("slider", {
|
|
|
8050
8048
|
default: !0
|
|
8051
8049
|
})
|
|
8052
8050
|
}
|
|
8053
|
-
}),
|
|
8051
|
+
}), qe = {};
|
|
8054
8052
|
var nc = /* @__PURE__ */ h(
|
|
8055
8053
|
sc,
|
|
8056
8054
|
tc,
|
|
@@ -8062,8 +8060,8 @@ var nc = /* @__PURE__ */ h(
|
|
|
8062
8060
|
null
|
|
8063
8061
|
);
|
|
8064
8062
|
function ac(t) {
|
|
8065
|
-
for (let e in
|
|
8066
|
-
this[e] =
|
|
8063
|
+
for (let e in qe)
|
|
8064
|
+
this[e] = qe[e];
|
|
8067
8065
|
}
|
|
8068
8066
|
const ic = /* @__PURE__ */ function() {
|
|
8069
8067
|
return nc.exports;
|
|
@@ -8688,7 +8686,7 @@ const Rc = /* @__PURE__ */ function() {
|
|
|
8688
8686
|
function Ic(t) {
|
|
8689
8687
|
Je.has(t) || (Je.add(t), console.warn(t));
|
|
8690
8688
|
}
|
|
8691
|
-
const
|
|
8689
|
+
const Mc = [
|
|
8692
8690
|
"create",
|
|
8693
8691
|
"created",
|
|
8694
8692
|
"save",
|
|
@@ -8706,10 +8704,10 @@ const qc = [
|
|
|
8706
8704
|
"drag",
|
|
8707
8705
|
"dragged"
|
|
8708
8706
|
].reduce((t, e) => (t[e] = e, t), {});
|
|
8709
|
-
|
|
8710
|
-
|
|
8711
|
-
|
|
8712
|
-
|
|
8707
|
+
M.config.productionTip = !1;
|
|
8708
|
+
M.use(Qe);
|
|
8709
|
+
M.use(Ts, { dynamic: !0 });
|
|
8710
|
+
M.use(Is);
|
|
8713
8711
|
class ud {
|
|
8714
8712
|
constructor(e, {
|
|
8715
8713
|
dito: s = {},
|
|
@@ -8717,7 +8715,7 @@ class ud {
|
|
|
8717
8715
|
views: a = {},
|
|
8718
8716
|
...i
|
|
8719
8717
|
} = {}) {
|
|
8720
|
-
this.el = e, this.api = n = ft({ base: "/" }, s.api, n), this.options = i, n.locale || (n.locale = "en-US"), n.formats = ft({}, Zs, n.formats), n.request || (n.request = (o) => Ac(n, o)), n.getApiUrl || (n.getApiUrl = (o) => Nc(n, o)), n.
|
|
8718
|
+
this.el = e, this.api = n = ft({ base: "/" }, s.api, n), this.options = i, n.locale || (n.locale = "en-US"), n.formats = ft({}, Zs, n.formats), n.request || (n.request = (o) => Ac(n, o)), n.getApiUrl || (n.getApiUrl = (o) => Nc(n, o)), n.isApiUrl || (n.isApiUrl = (o) => Uc(n, o)), n.normalizePath || (n.normalizePath = n.normalizePaths ? Q : (o) => o), n.denormalizePath || (n.denormalizePath = n.normalizePaths ? Xe : (o) => o);
|
|
8721
8719
|
const r = n.users = F(n.users, {
|
|
8722
8720
|
type: "collection"
|
|
8723
8721
|
}) || {};
|
|
@@ -8752,7 +8750,7 @@ class ud {
|
|
|
8752
8750
|
}, n.headers = {
|
|
8753
8751
|
"Content-Type": "application/json",
|
|
8754
8752
|
...n.headers
|
|
8755
|
-
}, E(e) && (e = document.querySelector(e)), this.root = new
|
|
8753
|
+
}, E(e) && (e = document.querySelector(e)), this.root = new M({
|
|
8756
8754
|
el: e,
|
|
8757
8755
|
router: new Qe({
|
|
8758
8756
|
mode: "history",
|
|
@@ -8763,7 +8761,7 @@ class ud {
|
|
|
8763
8761
|
components: { DitoRoot: $t },
|
|
8764
8762
|
provide: {
|
|
8765
8763
|
api: n,
|
|
8766
|
-
$verbs: () =>
|
|
8764
|
+
$verbs: () => Mc,
|
|
8767
8765
|
$views: () => {
|
|
8768
8766
|
},
|
|
8769
8767
|
$isPopulated: () => !0,
|
|
@@ -8796,7 +8794,7 @@ class ud {
|
|
|
8796
8794
|
return y.register(e, s);
|
|
8797
8795
|
}
|
|
8798
8796
|
}
|
|
8799
|
-
class
|
|
8797
|
+
class qc extends Error {
|
|
8800
8798
|
constructor(e) {
|
|
8801
8799
|
super(`Request failed with status code: ${e.status} (${e.statusText})`), this.response = e;
|
|
8802
8800
|
}
|
|
@@ -8809,27 +8807,25 @@ async function Ac(t, {
|
|
|
8809
8807
|
headers: i = null,
|
|
8810
8808
|
data: r = null
|
|
8811
8809
|
}) {
|
|
8812
|
-
var c;
|
|
8810
|
+
var u, c;
|
|
8813
8811
|
n && Ic("request.params is deprecated. Use action.method and action.path instead.");
|
|
8814
|
-
const o = t.
|
|
8815
|
-
o && !Ze(e) && (e = t.getApiUrl(e));
|
|
8816
|
-
const l = a && new URLSearchParams(a).toString();
|
|
8817
|
-
l && (e = `${e}?${l}`);
|
|
8818
|
-
const u = await fetch(e, {
|
|
8812
|
+
const o = t.isApiUrl(e), l = await fetch(t.getApiUrl({ url: e, query: a }), {
|
|
8819
8813
|
method: s.toUpperCase(),
|
|
8820
8814
|
...r && { body: JSON.stringify(r) },
|
|
8821
8815
|
headers: {
|
|
8822
8816
|
...o && t.headers,
|
|
8823
8817
|
...i
|
|
8824
8818
|
},
|
|
8825
|
-
credentials: o && ((
|
|
8819
|
+
credentials: o && ((u = t.cors) == null ? void 0 : u.credentials) ? "include" : "same-origin"
|
|
8826
8820
|
});
|
|
8827
|
-
if (
|
|
8828
|
-
throw new
|
|
8829
|
-
return
|
|
8821
|
+
if ((c = l.headers.get("Content-Type")) != null && c.includes("application/json") && (l.data = await l.json()), !l.ok)
|
|
8822
|
+
throw new qc(l);
|
|
8823
|
+
return l;
|
|
8830
8824
|
}
|
|
8831
|
-
function Nc(t, e) {
|
|
8832
|
-
|
|
8825
|
+
function Nc(t, { url: e, query: s }) {
|
|
8826
|
+
Ze(e) || (e = `${t.url.replace(/\/+$/, "")}/${e.replace(/^\/+/, "")}`);
|
|
8827
|
+
const n = s && new URLSearchParams(s).toString();
|
|
8828
|
+
return n ? `${e}?${n}` : e;
|
|
8833
8829
|
}
|
|
8834
8830
|
function Uc(t, e) {
|
|
8835
8831
|
return !Ze(e) || e.startsWith(t.url);
|
|
@@ -8837,4 +8833,4 @@ function Uc(t, e) {
|
|
|
8837
8833
|
export {
|
|
8838
8834
|
ud as default
|
|
8839
8835
|
};
|
|
8840
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi5lcy5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcFN0YXRlLmpzIiwiLi4vc3JjL3V0aWxzL2RhdGEuanMiLCIuLi9zcmMvRGl0b0NvbnRleHQuanMiLCIuLi9zcmMvbWl4aW5zL0VtaXR0ZXJNaXhpbi5qcyIsIi4uL3NyYy91dGlscy90eXBlLmpzIiwiLi4vc3JjL3V0aWxzL3Jlc291cmNlLmpzIiwiLi4vc3JjL21peGlucy9EaXRvTWl4aW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2NyZWRpdGNhcmQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2RlY2ltYWxzLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19lbWFpbC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9faG9zdG5hbWUuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2RvbWFpbi5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9faW50ZWdlci5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fbWF4LmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19taW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3Bhc3N3b3JkLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19yYW5nZS5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fcmVxdWlyZWQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3VybC5qcyIsIi4uL3NyYy9taXhpbnMvVmFsaWRhdGlvbk1peGluLmpzIiwiLi4vc3JjL3V0aWxzL2FjY2Vzc29yLmpzIiwiLi4vc3JjL3V0aWxzL3VpZC5qcyIsIi4uL3NyYy91dGlscy9TY2hlbWFHcmFwaC5qcyIsIi4uL3NyYy91dGlscy9zY2hlbWEuanMiLCIuLi9zcmMvbWl4aW5zL1R5cGVNaXhpbi5qcyIsIi4uL3NyYy9EaXRvQ29tcG9uZW50LmpzIiwiLi4vc3JjL0RpdG9Vc2VyLmpzIiwiLi4vc3JjL21peGlucy9TY2hlbWFQYXJlbnRNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL1JvdXRlTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVmlldy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WaWV3LnZ1ZSIsIi4uL3NyYy9taXhpbnMvRG9tTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUm9vdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Sb290LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9NZW51LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b01lbnUudnVlIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1zcGlubmVyL3NyYy9QdWxzZUxvYWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtc3Bpbm5lci9zcmMvUHVsc2VMb2FkZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0hlYWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9IZWFkZXIudnVlIiwiLi4vc3JjL21peGlucy9QdWxsZG93bk1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0FjY291bnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQWNjb3VudC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRGlhbG9nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0RpYWxvZy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FbGVtZW50LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9MYWJlbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9MYWJlbC52dWUiLCIuLi9zcmMvbWl4aW5zL0l0ZW1NaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWEudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWFJbmxpbmVkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NjaGVtYUlubGluZWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZS52dWUiLCIuLi9zcmMvdXRpbHMvbWF0aC5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Db250YWluZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ29udGFpbmVyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVsLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lbHMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZWxzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9CdXR0b25zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0J1dHRvbnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VkaXRCdXR0b25zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VkaXRCdXR0b25zLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9DcmVhdGVCdXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ3JlYXRlQnV0dG9uLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9DbGlwYm9hcmQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ2xpcGJvYXJkLnZ1ZSIsIi4uL3NyYy9taXhpbnMvTG9hZGluZ01peGluLmpzIiwiLi4vc3JjL21peGlucy9SZXNvdXJjZU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRm9ybS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRm9ybU5lc3RlZC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRXJyb3JzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Vycm9ycy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NvcGVzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Njb3Blcy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFnaW5hdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYWdpbmF0aW9uLnZ1ZSIsIi4uL3NyYy9taXhpbnMvT3JkZXJlZE1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RyZWVJdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RyZWVJdGVtLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJsZUhlYWQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVIZWFkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJsZUNlbGwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVDZWxsLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WTm9kZS52dWUiLCIuLi9zcmMvVHlwZUNvbXBvbmVudC5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVCdXR0b24udnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDaGVja2JveC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ2hlY2tib3gudnVlIiwiLi4vc3JjL21peGlucy9EYXRhTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL09wdGlvbnNNaXhpbi5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ2hlY2tib3hlcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ2hlY2tib3hlcy52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZUNvZGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNvZGUudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDb2xvci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ29sb3IudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDb21wb25lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNvbXBvbmVudC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZUNvbXB1dGVkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVDb21wdXRlZC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZURhdGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZURhdGUudnVlIiwiLi4vc3JjL21peGlucy9Tb3VyY2VNaXhpbi5qcyIsIi4uL3NyYy91dGlscy9maWx0ZXIuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUxpc3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUxpc3QudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVMYWJlbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlTGFiZWwudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVNYXJrdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZU1hcmt1cC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZU11bHRpc2VsZWN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVNdWx0aXNlbGVjdC52dWUiLCIuLi9zcmMvbWl4aW5zL051bWJlck1peGluLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVOdW1iZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZU51bWJlci52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZU9iamVjdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlT2JqZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlUGFuZWwudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVQcm9ncmVzcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlUHJvZ3Jlc3MudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVSYWRpby52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlUmFkaW8udnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVTZWN0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVTZWN0aW9uLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlU2VsZWN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVTZWxlY3QudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVTbGlkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVNsaWRlci52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVN3aXRjaC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlU3dpdGNoLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlVGV4dC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlVGV4dC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVRleHRhcmVhLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVUZXh0YXJlYS52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVRyZWVMaXN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVUcmVlTGlzdC52dWUiLCIuLi9zcmMvdXRpbHMvdW5pdHMuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVVwbG9hZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlVXBsb2FkLnZ1ZSIsIi4uL3NyYy91dGlscy9kZXByZWNhdGUuanMiLCIuLi9zcmMvdmVyYnMuanMiLCIuLi9zcmMvRGl0b0FkbWluLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IHtcbiAgdGl0bGU6ICcnLFxuICByb3V0ZUNvbXBvbmVudHM6IFtdLFxuICB1c2VyOiBudWxsLFxuICBsb2FkQ2FjaGU6IHt9LCAvLyBTZWUgVHlwZU1peGluLmxvYWQoKVxuICBhY3RpdmVMYWJlbDogbnVsbCxcbiAgY2xpcGJvYXJkRGF0YTogbnVsbFxufVxuIiwiaW1wb3J0IHtcbiAgaXNJbnRlZ2VyLCBwYXJzZURhdGFQYXRoLCBnZXRWYWx1ZUF0RGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgdG9rZW4pIHtcbiAgcmV0dXJuIGRhdGFQYXRoXG4gICAgPyBgJHtkYXRhUGF0aH0vJHt0b2tlbn1gXG4gICAgOiB0b2tlblxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkge1xuICBjb25zdCBwYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgcGF0aD8ucG9wKClcbiAgcmV0dXJuIHBhdGhcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZVBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbmVzdGVkID8gcGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkgOiBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIGlmIChwYXRoKSB7XG4gICAgLy8gUmVtb3ZlIHRoZSBwYXJlbnQgdG9rZW4uIElmIGl0J3MgYSBudW1iZXIsIHRoZW4gd2UncmUgZGVhbGluZyB3aXRoIGFuXG4gICAgLy8gYXJyYXkgYW5kIG5lZWQgdG8gcmVtb3ZlIG1vcmUgdG9rZW5zIHVudGlsIHdlIG1lZXQgdGhlIGFjdHVhbCBwYXJlbnQ6XG4gICAgbGV0IHRva2VuXG4gICAgZG8ge1xuICAgICAgdG9rZW4gPSBwYXRoLnBvcCgpXG4gICAgfSB3aGlsZSAodG9rZW4gIT0gbnVsbCAmJiBpc0ludGVnZXIoK3Rva2VuKSlcbiAgICAvLyBJZiB0aGUgcmVtb3ZlZCB0b2tlbiBpcyB2YWxpZCwgd2UgY2FuIGdldCB0aGUgcGFyZW50IGRhdGE6XG4gICAgaWYgKHRva2VuICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBwYXRoXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW0ocm9vdEl0ZW0sIGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgcmV0dXJuIHBhdGggPyBnZXRWYWx1ZUF0RGF0YVBhdGgocm9vdEl0ZW0sIHBhdGgpIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50SXRlbShyb290SXRlbSwgZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICByZXR1cm4gcGF0aCA/IGdldFZhbHVlQXREYXRhUGF0aChyb290SXRlbSwgcGF0aCkgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aCkge1xuICBjb25zdCBwYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgcmV0dXJuIHBhdGhbcGF0aC5sZW5ndGggLSAxXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoTmFtZShkYXRhUGF0aCkge1xuICBjb25zdCB0b2tlbiA9IGdldExhc3REYXRhUGF0aFRva2VuKGRhdGFQYXRoKVxuICByZXR1cm4gdG9rZW4gPT0gbnVsbCB8fCBpc0ludGVnZXIoK3Rva2VuKSA/IG51bGwgOiB0b2tlblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoSW5kZXgoZGF0YVBhdGgpIHtcbiAgY29uc3QgdG9rZW4gPSBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aClcbiAgY29uc3QgaW5kZXggPSB0b2tlbiA9PSBudWxsID8gbnVsbCA6ICt0b2tlblxuICByZXR1cm4gaXNJbnRlZ2VyKGluZGV4KSA/IGluZGV4IDogbnVsbFxufVxuXG5sZXQgdGVtcG9yYXJ5SWQgPSAwXG5leHBvcnQgZnVuY3Rpb24gc2V0VGVtcG9yYXJ5SWQoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIC8vIFRlbXBvcmFyeSBpZHMgYXJlIG1hcmtlZCB3aXRoIGEgJ0AnIGF0IHRoZSBiZWdpbm5pbmcuXG4gIGRhdGFbaWRLZXldID0gYEAkeysrdGVtcG9yYXJ5SWR9YFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZW1wb3JhcnlJZChpZCkge1xuICByZXR1cm4gL15ALy50ZXN0KGlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzVGVtcG9yYXJ5SWQoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIHJldHVybiBpc1RlbXBvcmFyeUlkKGRhdGE/LltpZEtleV0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JlZmVyZW5jZShkYXRhLCBpZEtleSA9ICdpZCcpIHtcbiAgLy8gUmV0dXJucyB0cnVlIGlmIHZhbHVlIGlzIGFuIG9iamVjdCB0aGF0IGhvbGRzIG5vdGhpbmcgbW9yZSB0aGFuIGFuIGlkLlxuICByZXR1cm4gZGF0YT8uW2lkS2V5XSAhPSBudWxsICYmIE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA9PT0gMVxufVxuIiwiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQge1xuICBnZXRJdGVtRGF0YVBhdGgsIGdldFBhcmVudEl0ZW1EYXRhUGF0aCwgZ2V0UGFyZW50SXRlbSwgZ2V0SXRlbSxcbiAgZ2V0TGFzdERhdGFQYXRoTmFtZSwgZ2V0TGFzdERhdGFQYXRoSW5kZXhcbn0gZnJvbSAnLi91dGlscy9kYXRhLmpzJ1xuXG4vLyBgRGl0b0NvbnRleHRgIGluc3RhbmNlcyBhcmUgYSB0aGluIHdyYXBwZXIgYXJvdW5kIHJhdyBgY29udGV4dGAgb2JqZWN0cyxcbi8vIHdoaWNoIHRoZW1zZWx2ZXMgYWN0dWFsbHkgaW5oZXJpdCBmcm9tIHRoZSBsaW5rZWQgYGNvbXBvbmVudGAgaW5zdGFuY2UsIHNvXG4vLyB0aGF0IHRoZXkgb25seSBuZWVkIHRvIHByb3ZpZGUgdGhlIHZhbHVlcyB0aGF0IHNob3VsZCBiZSBkaWZmZXJlbnQgdGhhblxuLy8gaW4gdGhlIHVuZGVybHlpbmcgY29tcG9uZW50LiBJbiBvcmRlciB0byBub3QgZXhwb3NlIGFsbCBmaWVsZHMgZnJvbSB0aGVcbi8vIGNvbXBvbmVudCwgdGhlIHdyYXBwZXIgaXMgaW50cm9kdWNlZDpcbi8vIFVzZSBXZWFrTWFwIGZvciB0aGUgcmF3IGBjb250ZXh0YCBvYmplY3RzLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHBvbGx1dGUgdGhlXG4vLyBhY3R1YWwgYERpdG9Db250ZXh0YCBpbnN0YW5jZSB3aXRoIGl0LlxuY29uc3QgY29udGV4dHMgPSBuZXcgV2Vha01hcCgpXG5cbmZ1bmN0aW9uIGdldChjb250ZXh0LCBrZXksIGRlZmF1bHRWYWx1ZSkge1xuICBjb25zdCBvYmplY3QgPSBjb250ZXh0cy5nZXQoY29udGV4dClcbiAgY29uc3QgdmFsdWUgPSBvYmplY3Rba2V5XVxuICAvLyBJZiBgb2JqZWN0YCBleHBsaWNpdGx5IHNldHMgdGhlIGtleSB0byBgdW5kZWZpbmVkYCwgcmV0dXJuIGl0LlxuICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCB8fCBvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KVxuICAgID8gdmFsdWVcbiAgICA6IGlzRnVuY3Rpb24oZGVmYXVsdFZhbHVlKVxuICAgICAgPyBkZWZhdWx0VmFsdWUoKVxuICAgICAgOiBkZWZhdWx0VmFsdWVcbn1cblxuZnVuY3Rpb24gc2V0KGNvbnRleHQsIGtleSwgdmFsdWUpIHtcbiAgY29udGV4dHMuZ2V0KGNvbnRleHQpW2tleV0gPSB2YWx1ZVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbXBvbmVudCwgY29udGV4dCkge1xuICAgIC8vIFVzZSB0aGUgcHJvdmlkZWQgcGFyYW1zIG9iamVjdCAvIGZ1bmN0aW9uLCBvciBjcmVhdGUgYSBuZXcgb25lOlxuICAgIGNvbnRleHQgPSBjb250ZXh0XG4gICAgICA/IChpc0Z1bmN0aW9uKGNvbnRleHQpID8gY29udGV4dCgpIDogeyAuLi5jb250ZXh0IH0pXG4gICAgICA6IHt9XG4gICAgLy8gSWYgbm90IGV4cGxpY2l0bHkgc2V0ICh0byBmYWxzZSksIGRlZmF1bHQgdG8gdHJ1ZSBzbyB3ZSBkb24ndCBmYWxsIGJhY2tcbiAgICAvLyB0byBgY29tcG9uZW50YCBmb3IgaXRzIHZhbHVlLlxuICAgIGNvbnRleHQubmVzdGVkID8/PSB0cnVlXG4gICAgY29udGV4dC5jb21wb25lbnQgPSBjb21wb25lbnRcbiAgICAvLyBIYXZlIGBvYmplY3RgIGluaGVyaXQgZnJvbSB0aGUgYGNvbXBvbmVudGAgaW5zdGFuY2UsIHNvIGl0IGNhbiBvdmVycmlkZVxuICAgIC8vIGl0cyB2YWx1ZXMgYW5kIHN0aWxsIHJldHJpZXZlIGZyb20gaXQsIGFuZCBhc3NvY2lhdGUgaXQgd2l0aCBgdGhpc2BcbiAgICAvLyB0aHJvdWdoIGBjb250ZXh0c2AgbWFwOlxuICAgIGNvbnN0IG9iamVjdCA9IE9iamVjdC5zZXRQcm90b3R5cGVPZihjb250ZXh0LCBjb21wb25lbnQpXG4gICAgY29udGV4dHMuc2V0KHRoaXMsIG9iamVjdClcbiAgfVxuXG4gIHN0YXRpYyBnZXQoY29tcG9uZW50LCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQgaW5zdGFuY2VvZiBEaXRvQ29udGV4dFxuICAgICAgPyBjb250ZXh0XG4gICAgICA6IG5ldyBEaXRvQ29udGV4dChjb21wb25lbnQsIGNvbnRleHQpXG4gIH1cblxuICAvLyBgbmVzdGVkYCBpcyBgdHJ1ZWAgd2hlbiB0aGUgZGF0YS1wYXRoIHBvaW50cyBhIHZhbHVlIGluc2lkZSBhbiBpdGVtLCBhbmRcbiAgLy8gYGZhbHNlYCB3aGVuIGl0IHBvaW50cyB0byB0aGUgaXRlbSBpdHNlbGYuXG4gIGdldCBuZXN0ZWQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnbmVzdGVkJywgdHJ1ZSlcbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2YWx1ZScsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCBkYXRhUGF0aCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdkYXRhUGF0aCcsICcnKVxuICB9XG5cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnbmFtZScsICgpID0+IGdldExhc3REYXRhUGF0aE5hbWUodGhpcy5kYXRhUGF0aCkpXG4gIH1cblxuICBnZXQgaW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnaW5kZXgnLCAoKSA9PiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLmRhdGFQYXRoKSlcbiAgfVxuXG4gIGdldCBpdGVtRGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldEl0ZW1EYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgfVxuXG4gIGdldCBwYXJlbnRJdGVtRGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldFBhcmVudEl0ZW1EYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgfVxuXG4gIGdldCBpdGVtSW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMuaXRlbURhdGFQYXRoKVxuICB9XG5cbiAgZ2V0IHBhcmVudEl0ZW1JbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5wYXJlbnRJdGVtRGF0YVBhdGgpXG4gIH1cblxuICBnZXQgaXRlbSgpIHtcbiAgICAvLyBOT1RFOiBXaGlsZSBpbnRlcm5hbGx5LCB3ZSBzcGVhayBvZiBgZGF0YWAsIGluIHRoZSBBUEkgc3VyZmFjZSB0aGVcbiAgICAvLyB0ZXJtIGBpdGVtYCBpcyB1c2VkIGZvciB0aGUgZGF0YSB0aGF0IHJlbGF0ZXMgdG8gZWRpdGluZyBvYmplY3RzOlxuICAgIC8vIElmIGBkYXRhYCBpc24ndCBwcm92aWRlZCwgd2UgY2FuIGRldGVybWluZSBpdCBmcm9tIHJvb3REYXRhICYgZGF0YVBhdGg6XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGF0YScsICgpID0+XG4gICAgICBnZXRJdGVtKHRoaXMucm9vdEl0ZW0sIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICAgIClcbiAgfVxuXG4gIC8vIE5PVEU6IGBwYXJlbnRJdGVtYCBpc24ndCB0aGUgY2xvc2VzdCBkYXRhIHBhcmVudCB0byBgaXRlbWAsIGl0J3MgdGhlXG4gIC8vIGNsb3Nlc3QgcGFyZW50IHRoYXQgaXNuJ3QgYW4gYXJyYXksIGUuZy4gZm9yIHJlbGF0aW9ucyBvciBuZXN0ZWQgSlNPTlxuICAvLyBkYXRhLiAgVGhpcyBpcyB3aHkgdGhlIHRlcm0gYGl0ZW1gIHdhcyBjaG9zZW4gb3ZlciBgZGF0YWAsIGUuZy4gVlMgdGhlXG4gIC8vIHVzZSBvZiBgcGFyZW50RGF0YWAgaW4gc2VydmVyLXNpZGVkIHZhbGlkYXRpb24sIHdoaWNoIGlzIHRoZSBjbG9zZXN0XG4gIC8vIHBhcmVudC4gSWYgbmVlZGVkLCB3ZSBjb3VsZCBleHBvc2UgdGhpcyBkYXRhIGhlcmUgdG9vLCBhcyB3ZSBjYW4gZG8gYWxsXG4gIC8vIHNvcnRzIG9mIGRhdGEgcHJvY2Vzc2luZyB3aXRoIGByb290RGF0YWAgYW5kIGBkYXRhUGF0aGAuXG4gIGdldCBwYXJlbnRJdGVtKCkge1xuICAgIGNvbnN0IHBhcmVudEl0ZW0gPVxuICAgICAgZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZCkgfHwgbnVsbFxuICAgIHJldHVybiBwYXJlbnRJdGVtICE9PSB0aGlzLml0ZW0gPyBwYXJlbnRJdGVtIDogbnVsbFxuICB9XG5cbiAgZ2V0IHJvb3RJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Jvb3REYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCBwcm9jZXNzZWRJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Byb2Nlc3NlZERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGNsaXBib2FyZEl0ZW0oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnY2xpcGJvYXJkRGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgdXNlcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd1c2VyJywgbnVsbClcbiAgfVxuXG4gIGdldCBhcGkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnYXBpJywgbnVsbClcbiAgfVxuXG4gIGdldCB2aWV3cygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2aWV3cycsIG51bGwpXG4gIH1cblxuICBnZXQgaXRlbUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2l0ZW1MYWJlbCcsIG51bGwpXG4gIH1cblxuICBnZXQgZm9ybUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1MYWJlbCcsIG51bGwpXG4gIH1cblxuICAvLyBUT0RPOiBSZW1vdmUgZXhwb3N1cmUgc2luY2UgdGhlIGFzc29jaWF0ZWQgY29tcG9uZW50IGRvZXNuJ3QgYWx3YXlzIGV4aXN0LFxuICAvLyBlLmcuIG5lc3RlZCBmb3JtcyBpbiBgcHJvY2Vzc0RhdGEoKWAuIEluc3RlYWQsIGJpbmQgY29tcG9uZW50IHRvIGB0aGlzYFxuICAvLyBvbmx5IHdoZXJlIGF2YWlsYWJsZS5cbiAgZ2V0IGNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdjb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgLy8gVE9ETzogQWRkIGBjb21wb25lbnRTY2hlbWFgIGdldHRlciBmb3IgdGhlIHNjaGVtYSBvZiB0aGUgY3VycmVudCBjb21wb25lbnQsXG4gIC8vIGV2ZW4gd2hlbiB0aGUgY29tcG9uZW50IGlzbid0IGFjdHVhbGx5IGluc3RhbnRpYXRlZC4gQ29uc2lkZXIgYWRkaW5nXG4gIC8vIGBzb3VyY2VTY2hlbWFgIGFzIHdlbGw/XG5cbiAgLy8gVE9ETzogRml4IHVuY2xlYXIgbmFtaW5nOiBXaGljaCBzY2hlbWEgaXMgdGhpcywgdGhhdCBvZiB0aGUgY29tcG9uZW50IG9yIG9mXG4gIC8vIGl0cyBwYXJlbnQ/IElzbid0IGV4cG9zaW5nIGBmb3JtQ29tcG9uZW50YCBhbmQgYHZpZXdDb21wb25lbnRgIGVub3VnaCwgb25jZVxuICAvLyB3ZSBvZmZlciBhY2Nlc3MgdG8gdGhlaXIgY29tcG9uZW50cyB0aGVyZSB0aHJvdWdoIGBnZXRDb21wb25lbnQoKWAgJiBjby4gb25cbiAgLy8gYERpdG9NaXhpbmAgcGVyaGFwcz8gIEFsc28sIHRoZXJlIGNvdWxkIGJlIGEgYHRhYkNvbXBvbmVudGAgZ2V0dGVyIGZvclxuICAvLyBzY2hlbWFzIGluIHRhYnM/XG4gIGdldCBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnc2NoZW1hQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBmb3JtQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1Db21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHZpZXdDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmlld0NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgZGlhbG9nQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2RpYWxvZ0NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncGFuZWxDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHJlc291cmNlQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Jlc291cmNlQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnc291cmNlQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIC8vIFdoZW4gdXNlZCBpbiBPcHRpb25zTWl4aW4gZm9yIGBzY2hlbWEub3B0aW9ucy52YWx1ZSgpYCxcbiAgLy8gYHNjaGVtYS5vcHRpb25zLmxhYmVsKClgIGFuZCAgYHNjaGVtYS5zZWFyY2guZmlsdGVyKClgIGNhbGxiYWNrczpcbiAgZ2V0IG9wdGlvbigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcHRpb24nLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcHRpb25zJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgLy8gVE9ETzogUmVuYW1lIHRoaXMgdG8gYHNlYXJjaFRlcm1gIG9yIGBzZWFyY2hRdWVyeWAsIHRvIHBlcmhhcHMgZnJlZSBgcXVlcnlgXG4gIC8vIGZvciB0aGUgYWN0dWFsIGByZXNvdXJjZUNvbXBvbmVudC5xdWVyeWAgb2JqZWN0P1xuICBnZXQgcXVlcnkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncXVlcnknLCB1bmRlZmluZWQpXG4gIH1cblxuICAvLyBUaGUgZXJyb3IgZmllbGQgaXMgb25seSBwb3B1bGF0ZWQgaW4gdGhlIGNvbnRleHQgb2YgYnV0dG9ucyB0aGF0IHNlbmRcbiAgLy8gcmVxdWVzdHMsIHNlZSBgUmVzb3VyY2VNaXhpbi5lbWl0QnV0dG9uRXZlbnQoKWA6XG4gIGdldCBlcnJvcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdlcnJvcicsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCB3YXNOb3RpZmllZCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIGZhbHNlKVxuICB9XG5cbiAgLy8gSGVscGVyIE1ldGhvZHNcblxuICBnZXQgcmVxdWVzdCgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB0aGlzLmNvbXBvbmVudC5yZXF1ZXN0KG9wdGlvbnMpXG4gIH1cblxuICBnZXQgZm9ybWF0KCkge1xuICAgIHJldHVybiAodmFsdWUsIG9wdGlvbnMpID0+IHRoaXMuY29tcG9uZW50LmZvcm1hdCh2YWx1ZSwgb3B0aW9ucylcbiAgfVxuXG4gIGdldCBuYXZpZ2F0ZSgpIHtcbiAgICByZXR1cm4gbG9jYXRpb24gPT4gdGhpcy5jb21wb25lbnQubmF2aWdhdGUobG9jYXRpb24pXG4gIH1cblxuICBnZXQgZG93bmxvYWQoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4gdGhpcy5jb21wb25lbnQuZG93bmxvYWQob3B0aW9ucylcbiAgfVxuXG4gIGdldCBnZXRSZXNvdXJjZVVybCgpIHtcbiAgICByZXR1cm4gcmVzb3VyY2UgPT4gdGhpcy5jb21wb25lbnQuZ2V0UmVzb3VyY2VVcmwocmVzb3VyY2UpXG4gIH1cblxuICBnZXQgbm90aWZ5KCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHtcbiAgICAgIHRoaXMuY29tcG9uZW50Lm5vdGlmeShvcHRpb25zKVxuICAgICAgc2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIHRydWUpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBpc1BsYWluT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJGV2ZW50czogbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gQXN5bmMgdmVyc2lvbnMgb2YgVnVlJ3MgJG9uKCkgYW5kICRvZmYoKSBtZXRob2RzIHRoYXQga2VlcCB0cmFjayBvZiB0aGVcbiAgICAvLyBldmVudHMgYWRkZWQgLyByZW1vdmVkLCBhbmQgcHJvdmlkZSBhIGhhc0xpc3RlbmVycygpIG1ldGhvZCB0aGF0IGNoZWNrc1xuICAgIC8vIGlmIHRoZSBjb21wb25lbnQgaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudC5cblxuICAgIC8vIEFsc28gYWRkcyBwcm9wZXIgaGFuZGxpbmcgb2YgYXN5bmMgZXZlbnRzLCBpbmNsdWRpbmcgYSBhc3luYyBlbWl0KCkgdGhhdFxuICAgIC8vIGRlYWxzIHdpdGggcHJvcGVyIGV2ZW50IHF1ZXVlaW5nLlxuICAgIG9uKGV2ZW50LCBjYWxsYmFjaykge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGV2LCBjYWxsYmFjaylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBldmVudCkge1xuICAgICAgICAgIHRoaXMub24oa2V5LCBldmVudFtrZXldKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBldmVudHMgPSB0aGlzLiRldmVudHMgfHwgKHRoaXMuJGV2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCkpXG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzIH0gPSBldmVudHNbZXZlbnRdIHx8IChldmVudHNbZXZlbnRdID0ge1xuICAgICAgICAgIGNhbGxiYWNrczogW10sXG4gICAgICAgICAgcXVldWU6IFtdXG4gICAgICAgIH0pXG4gICAgICAgIGNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgb25jZShldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IG9uID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgdGhpcy5vZmYoZXZlbnQsIG9uKVxuICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncylcbiAgICAgIH1cbiAgICAgIG9uLmNhbGxiYWNrID0gY2FsbGJhY2sgLy8gTmVlZGVkIGZvciBgb2ZmKClgLCBzZWUgYmVsb3cuXG4gICAgICByZXR1cm4gdGhpcy5vbihldmVudCwgb24pXG4gICAgfSxcblxuICAgIG9mZihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAvLyBSZW1vdmUgYWxsIGV2ZW50c1xuICAgICAgICBkZWxldGUgdGhpcy4kZXZlbnRzXG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihrZXksIGV2ZW50W2tleV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBzcGVjaWZpYyBldmVudFxuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMuJGV2ZW50cz8uW2V2ZW50XVxuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgYWxsIGhhbmRsZXJzIGZvciB0aGlzIGV2ZW50XG4gICAgICAgICAgICBkZWxldGUgdGhpcy4kZXZlbnRzW2V2ZW50XVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgYSBzcGVjaWZpYyBoYW5kbGVyOiBmaW5kIHRoZSBpbmRleCBpbiBjYWxsYmFja3NcbiAgICAgICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzIH0gPSBlbnRyeVxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjYWxsYmFja3MuZmluZEluZGV4KFxuICAgICAgICAgICAgICAvLyBNYXRjaCBgY2IuY2FsbGJhY2tgIGFsc28sIGFzIHVzZWQgYnkgYG9uY2UoKWAsIHNlZSAgYWJvdmU6XG4gICAgICAgICAgICAgIGNiID0+IGNiID09PSBjYWxsYmFjayB8fCBjYi5jYWxsYmFjayA9PT0gY2FsbGJhY2tcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2tzLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIGVtaXQoZXZlbnQsIC4uLmFyZ3MpIHtcbiAgICAgIC8vIE9ubHkgcXVldWUgZXZlbnQgaWYgdGhlcmUgYWN0dWFsbHkgYXJlIGxpc3RlbmVycyBmb3IgaXQuXG4gICAgICBjb25zdCBlbnRyeSA9IHRoaXMuJGV2ZW50cz8uW2V2ZW50XVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGNvbnN0IHsgcXVldWUsIGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIGNvbnN0IG5leHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAvLyBFbWl0IHRoZSBuZXh0IGV2ZW50IGluIHRoZSBxdWV1ZSB3aXRoIGl0cyBwYXJhbXMuXG4gICAgICAgICAgICAvLyBOb3RlIHRoYXQgaXQgb25seSBnZXRzIHJlbW92ZWQgb25jZSBgbmV4dCgpYCBpcyBjYWxsZWQuXG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHF1ZXVlLnNoaWZ0KClcbiAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICBsZXQgcmVzdWx0XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNhbGxiYWNrLmFwcGx5KHRoaXMsIGVudHJ5LmFyZ3MpXG4gICAgICAgICAgICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBFcnJvciBkdXJpbmcgZXZlbnQgaGFuZGxlciBmb3IgJyR7ZXZlbnR9JzpgLCBlcnJvclxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBxdWV1ZSBmb3IgdGhlIGV2ZW50XG4gICAgICAgICAgICAgIC8vIHRoYXQgd2FzIGp1c3QgY29tcGxldGVkIGJ5IHRoZSB3cmFwcGVyIHRoYXQgY2FsbGVkIGBuZXh0KClgXG4gICAgICAgICAgICAgIGVudHJ5LnJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgICBuZXh0KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcXVldWUucHVzaCh7IGFyZ3MsIHJlc29sdmUgfSlcbiAgICAgICAgICAvLyBGb3IgbmV3IHF1ZXVlcyAoPSBvbmx5IG9uZSBlbnRyeSkgZW1pdCB0aGUgZmlyc3QgZXZlbnQgaW1tZWRpYXRlbHksXG4gICAgICAgICAgLy8gdG8gZ2V0IHRoZSBxdWV1ZSBydW5uaW5nLlxuICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQ2hlY2tzIGlmIHRoZSBjb21wb25lbnQgaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudCB0eXBlOlxuICAgIGhhc0xpc3RlbmVycyhldmVudCkge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKGV2KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudC5sZW5ndGggPiAwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gISF0aGlzLiRldmVudHM/LltldmVudF1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVsZWdhdGUoZXZlbnQsIHRhcmdldCkge1xuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICBpZiAoaXNBcnJheShldmVudCkpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLmRlbGVnYXRlKGV2LCB0YXJnZXQpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub24oZXZlbnQsICguLi5hcmdzKSA9PiB0YXJnZXQuZW1pdChldmVudCwgLi4uYXJncykpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQge1xuICBpc0FycmF5LCBpc09iamVjdCwgaXNTdHJpbmcsIGlzQm9vbGVhbiwgaXNOdW1iZXIsIGlzRnVuY3Rpb24sIGlzRGF0ZSxcbiAgaXNSZWdFeHAsIGFzQXJyYXlcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuY29uc3QgdHlwZUNoZWNrZXJzID0ge1xuICBCb29sZWFuOiBpc0Jvb2xlYW4sXG4gIE51bWJlcjogaXNOdW1iZXIsXG4gIFN0cmluZzogaXNTdHJpbmcsXG4gIERhdGU6IGlzRGF0ZSxcbiAgQXJyYXk6IGlzQXJyYXksXG4gIE9iamVjdDogaXNPYmplY3QsXG4gIFJlZ0V4cDogaXNSZWdFeHAsXG4gIEZ1bmN0aW9uOiBpc0Z1bmN0aW9uXG59XG5cbi8vIERlY2xhcmUgdGhlc2Ugc2VwYXJhdGVseSBmcm9tIHRoZSBgdHlwZUNvbnZlcnRlcnNgIG9iamVjdCwgdG8gcHJldmVudFxuLy8gQmFiZWwgaXNzdWVzIHdpdGggYE9iamVjdGAgb3ZlcnJpZGluZyB0aGUgZ2xvYmFsIGBPYmplY3RgOlxuY29uc3QgdG9Cb29sZWFuID0gdmFsdWUgPT4gISF2YWx1ZVxuY29uc3QgdG9OdW1iZXIgPSB2YWx1ZSA9PiArdmFsdWVcbmNvbnN0IHRvU3RyaW5nID0gdmFsdWUgPT4gU3RyaW5nKHZhbHVlKVxuXG5jb25zdCB0b0RhdGUgPSB2YWx1ZSA9PiBpc0RhdGUodmFsdWUpXG4gID8gdmFsdWVcbiAgOiBuZXcgRGF0ZSh2YWx1ZSlcblxuY29uc3QgdG9BcnJheSA9IHZhbHVlID0+IGlzQXJyYXkodmFsdWUpXG4gID8gdmFsdWVcbiAgOiBpc1N0cmluZyh2YWx1ZSlcbiAgICA/IHZhbHVlLnNwbGl0KCcsJylcbiAgICA6IGFzQXJyYXkodmFsdWUpXG5cbmNvbnN0IHRvT2JqZWN0ID0gdmFsdWUgPT4gaXNPYmplY3QodmFsdWUpXG4gID8gdmFsdWVcbiAgLy8gSWYgYSBPYmplY3QgaXMgZXhwZWN0ZWQgYnV0IGEgQm9vbGVhbiBwcm92aWRlLCBjb252ZXJ0IHRvIGFuIGVtcHR5XG4gIC8vIG9iamVjdC4gVXNlZCBieSBgY3JlYXRhYmxlYCAmIGNvLCB0aGF0IGNhbiBiZSBib3RoLlxuICA6IHZhbHVlID09PSB0cnVlXG4gICAgPyB7fVxuICAgIDogbnVsbFxuXG5jb25zdCB0b1JlZ0V4cCA9IHZhbHVlID0+IGlzUmVnRXhwKHZhbHVlKVxuICA/IHZhbHVlXG4gIDogbmV3IFJlZ0V4cCh2YWx1ZSlcblxuY29uc3QgdHlwZUNvbnZlcnRlcnMgPSB7XG4gIEJvb2xlYW46IHRvQm9vbGVhbixcbiAgTnVtYmVyOiB0b051bWJlcixcbiAgU3RyaW5nOiB0b1N0cmluZyxcbiAgRGF0ZTogdG9EYXRlLFxuICBBcnJheTogdG9BcnJheSxcbiAgT2JqZWN0OiB0b09iamVjdCxcbiAgUmVnRXhwOiB0b1JlZ0V4cFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSB7XG4gIC8vIFNlZSBpZiBhbnkgb2YgdGhlIGV4cGVjdCB0eXBlcyBtYXRjaCwgcmV0dXJuIGltbWVkaWF0ZWx5IGlmIHRoZXkgZG86XG4gIGlmICh0eXBlcyAmJiB2YWx1ZSAhPSBudWxsKSB7XG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICBpZiAodHlwZUNoZWNrZXJzW3R5cGUubmFtZV0/Lih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VHlwZSh0eXBlLCB2YWx1ZSkge1xuICBjb25zdCBjb252ZXJ0ZXIgPSB0eXBlICYmIHR5cGVDb252ZXJ0ZXJzW3R5cGUubmFtZSB8fCB0eXBlXVxuICByZXR1cm4gY29udmVydGVyID8gY29udmVydGVyKHZhbHVlKSA6IHZhbHVlXG59XG4iLCJpbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIHBpY2tCeSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNSZXNvdXJjZShzY2hlbWEpIHtcbiAgcmV0dXJuICEhZ2V0UmVzb3VyY2Uoc2NoZW1hLnJlc291cmNlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzb3VyY2UocmVzb3VyY2UsIGRlZmF1bHRzID0ge30pIHtcbiAgY29uc3QgeyBwYXJlbnQsIC4uLmRlZnMgfSA9IGRlZmF1bHRzXG4gIHJlc291cmNlID0gaXNPYmplY3QocmVzb3VyY2UpID8geyAuLi5kZWZzLCAuLi5yZXNvdXJjZSB9XG4gICAgOiBpc1N0cmluZyhyZXNvdXJjZSkgPyB7IC4uLmRlZnMsIHBhdGg6IHJlc291cmNlIH1cbiAgICA6IG51bGxcbiAgLy8gT25seSBzZXQgcGFyZW50IGlmIHBhdGggZG9lc24ndCBzdGFydCB3aXRoICcvJywgc28gcmVsYXRpdmUgVVJMcyBhcmVcbiAgLy8gZGVhbHQgd2l0aCBjb3JyZWN0bHkuXG4gIGlmIChcbiAgICByZXNvdXJjZSAmJlxuICAgIHBhcmVudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgcmVzb3VyY2UucGFyZW50ID09PSB1bmRlZmluZWQgJiZcbiAgICAhcmVzb3VyY2UucGF0aD8uc3RhcnRzV2l0aCgnLycpXG4gICkge1xuICAgIHJlc291cmNlLnBhcmVudCA9IHBhcmVudFxuICAgIGlmICghcmVzb3VyY2UucGF0aCkge1xuICAgICAgcmVzb3VyY2UucGF0aCA9ICcuJ1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzb3VyY2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1lbWJlclJlc291cmNlKGlkLCByZXNvdXJjZSkge1xuICByZXR1cm4gaWQgIT0gbnVsbCAmJiByZXNvdXJjZT8udHlwZSA9PT0gJ2NvbGxlY3Rpb24nXG4gICAgPyB7XG4gICAgICB0eXBlOiAnbWVtYmVyJyxcbiAgICAgIC4uLnBpY2tCeShcbiAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgICh2YWx1ZSwga2V5KSA9PiBbJ21ldGhvZCcsICdwYXRoJywgJ3BhcmVudCddLmluY2x1ZGVzKGtleSlcbiAgICAgICksXG4gICAgICBpZDogYCR7aWR9YFxuICAgIH1cbiAgICA6IG51bGxcbn1cbiIsImltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc0FycmF5LCBpc1N0cmluZywgaXNGdW5jdGlvbiwgYXNBcnJheSwgZXF1YWxzLFxuICBnZXRWYWx1ZUF0RGF0YVBhdGgsIGxhYmVsaXplLCBoeXBoZW5hdGUsIGZvcm1hdFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IGFwcFN0YXRlIGZyb20gJy4uL2FwcFN0YXRlLmpzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBFbWl0dGVyTWl4aW4gZnJvbSAnLi9FbWl0dGVyTWl4aW4uanMnXG5pbXBvcnQgeyBpc01hdGNoaW5nVHlwZSwgY29udmVydFR5cGUgfSBmcm9tICcuLi91dGlscy90eXBlLmpzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UsIGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0VtaXR0ZXJNaXhpbl0sXG5cbiAgaW5qZWN0OiBbXG4gICAgJ2FwaScsXG4gICAgJyR2ZXJicycsXG4gICAgJyR2aWV3cycsXG4gICAgJyRpc1BvcHVsYXRlZCcsXG4gICAgJyRzY2hlbWFDb21wb25lbnQnLFxuICAgICckcm91dGVDb21wb25lbnQnLFxuICAgICckZGF0YUNvbXBvbmVudCcsXG4gICAgJyRzb3VyY2VDb21wb25lbnQnLFxuICAgICckcmVzb3VyY2VDb21wb25lbnQnLFxuICAgICckZGlhbG9nQ29tcG9uZW50JyxcbiAgICAnJHBhbmVsQ29tcG9uZW50JyxcbiAgICAnJHRhYkNvbXBvbmVudCdcbiAgXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB0aGlzLnByb3ZpZGVzRGF0YVxuICAgICAgPyB7ICRkYXRhQ29tcG9uZW50OiAoKSA9PiB0aGlzIH1cbiAgICAgIDoge31cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBhcHBTdGF0ZSxcbiAgICAgIG92ZXJyaWRlczogbnVsbCAvLyBTZWUgYWNjZXNzb3IuanNcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzb3VyY2VTY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhPy5zY2hlbWFcbiAgICB9LFxuXG4gICAgdXNlcigpIHtcbiAgICAgIHJldHVybiBhcHBTdGF0ZS51c2VyXG4gICAgfSxcblxuICAgIC8vICR2ZXJicywgJHZlcmJzIGFuZCAkaXNQb3B1bGF0ZWQgYXJlIGRlZmluZWQgYXMgZnVuY3Rpb25zLCB0byBwcmVzZXJ2ZVxuICAgIC8vIHJlYWN0aXZlbmVzcyBhY3Jvc3MgcHJvdmlkZS9pbmplY3QuXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL2lzc3Vlcy83MDE3I2lzc3VlY29tbWVudC00ODA5MDY2OTFcbiAgICB2ZXJicygpIHtcbiAgICAgIHJldHVybiB0aGlzLiR2ZXJicygpXG4gICAgfSxcblxuICAgIHZpZXdzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHZpZXdzKClcbiAgICB9LFxuXG4gICAgaXNQb3B1bGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kaXNQb3B1bGF0ZWQoKVxuICAgIH0sXG5cbiAgICBsb2NhbGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcGkubG9jYWxlXG4gICAgfSxcblxuICAgIGNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgbmVzdGVkOiBmYWxzZSB9KVxuICAgIH0sXG5cbiAgICByb290Q29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvb3QuJGNoaWxkcmVuWzBdXG4gICAgfSxcblxuICAgIHNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIFVzZSBjb21wdXRlZCBwcm9wZXJ0aWVzIGFzIGxpbmtzIHRvIGluamVjdHMsIHNvIERpdG9TY2hlbWEgY2FuXG4gICAgICAvLyBvdmVycmlkZSB0aGUgcHJvcGVydHkgYW5kIHJldHVybiBgdGhpc2AgaW5zdGVhZCBvZiB0aGUgcGFyZW50LlxuICAgICAgcmV0dXJuIHRoaXMuJHNjaGVtYUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgLy8gVXNlIGNvbXB1dGVkIHByb3BlcnRpZXMgYXMgbGlua3MgdG8gaW5qZWN0cywgc28gUm91dGVNaXhpbiBjYW5cbiAgICAgIC8vIG92ZXJyaWRlIHRoZSBwcm9wZXJ0eSBhbmQgcmV0dXJuIGB0aGlzYCBpbnN0ZWFkIG9mIHRoZSBwYXJlbnQuXG4gICAgICByZXR1cm4gdGhpcy4kcm91dGVDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBmb3JtQ29tcG9uZW50KCkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5yb3V0ZUNvbXBvbmVudFxuICAgICAgcmV0dXJuIGNvbXBvbmVudD8uaXNGb3JtID8gY29tcG9uZW50IDogbnVsbFxuICAgIH0sXG5cbiAgICB2aWV3Q29tcG9uZW50KCkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5yb3V0ZUNvbXBvbmVudFxuICAgICAgcmV0dXJuIGNvbXBvbmVudD8uaXNWaWV3ID8gY29tcG9uZW50IDogbnVsbFxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBmaXJzdCByb3V0ZSBjb21wb25lbnQgaW4gdGhlIGNoYWluIG9mIHBhcmVudHMsIGluY2x1ZGluZ1xuICAgIC8vIHRoaXMgY3VycmVudCBjb21wb25lbnQsIHRoYXQgaXMgbGlua2VkIHRvIGEgcmVzb3VyY2UgKGFuZCB0aHVzIGxvYWRzIGl0c1xuICAgIC8vIG93biBkYXRhIGFuZCBkb2Vzbid0IGhvbGQgbmVzdGVkIGRhdGEpLlxuICAgIGRhdGFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm92aWRlc0RhdGEgPyB0aGlzIDogdGhpcy4kZGF0YUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzb3VyY2VDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZXNvdXJjZUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRkaWFsb2dDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBwYW5lbENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYW5lbENvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiR0YWJDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBwYXJlbnRTY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnQ/LiRwYXJlbnQuc2NoZW1hQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhcmVudFJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucm91dGVDb21wb25lbnQ/LiRwYXJlbnQucm91dGVDb21wb25lbnRcbiAgICB9LFxuXG4gICAgcGFyZW50Rm9ybUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1Db21wb25lbnQ/LiRwYXJlbnQuZm9ybUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBkYXRhIG9mIHRoZSBmaXJzdCByb3V0ZSBjb21wb25lbnQgaW4gdGhlIGNoYWluIG9mIHBhcmVudHNcbiAgICAvLyB0aGF0IGxvYWRzIGl0cyBvd24gZGF0YSBmcm9tIGFuIGFzc29jaWF0ZWQgQVBJIHJlc291cmNlLlxuICAgIHJvb3REYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YUNvbXBvbmVudD8uZGF0YVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVDcmVhdGUoKSB7XG4gICAgdGhpcy4kdWlkID0gKyt1aWRcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gVGhlIHN0YXRlIG9mIGNvbXBvbmVudHMgaXMgb25seSBhdmFpbGFibGUgZHVyaW5nIHRoZSBsaWZlLWN5Y2xlIG9mIGFcbiAgICAvLyBjb21wb25lbnQuIFNvbWUgaW5mb3JtYXRpb24gd2UgbmVlZCBhdmFpbGFibGUgbG9uZ2VyIHRoYW4gdGhhdCwgZS5nLlxuICAgIC8vIGBxdWVyeWAgJiBgdG90YWxgIG9uIFR5cGVMaXN0LCBzbyB0aGF0IHdoZW4gdGhlIHVzZXIgbmF2aWdhdGVzIGJhY2sgZnJvbVxuICAgIC8vIGVkaXRpbmcgYW4gaXRlbSBpbiB0aGUgbGlzdCwgdGhlIHN0YXRlIG9mIHRoZSBsaXN0IGlzIHN0aWxsIHRoZSBzYW1lLlxuICAgIC8vIFdlIGNhbid0IHN0b3JlIHRoaXMgaW4gYGRhdGFgLCBhcyB0aGlzIGlzIGFscmVhZHkgdGhlIHB1cmUgZGF0YSBmcm9tIHRoZVxuICAgIC8vIEFQSSBzZXJ2ZXIuIFRoYXQncyB3aGF0IHRoZSBgc3RvcmVgIGlzIGZvcjogTWVtb3J5IHRoYXQncyBhdmFpbGFibGUgYXNcbiAgICAvLyBsb25nIGFzIHRoZSBjdXJyZW50IGVkaXRpbmcgcGF0aCBpcyBzdGlsbCB2YWxpZC4gRm9yIHR5cGUgY29tcG9uZW50cyxcbiAgICAvLyB0aGlzIG1lbW9yeSBpcyBwcm92aWRlZCBieSB0aGUgcGFyZW50LCBzZWUgUm91dGVNaXhpbiBhbmQgRGl0b1BhbmUuXG4gICAgZ2V0U3RvcmUoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5zdG9yZVtrZXldXG4gICAgfSxcblxuICAgIHNldFN0b3JlKGtleSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzZXQodGhpcy5zdG9yZSwga2V5LCB2YWx1ZSlcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRTdG9yZShrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFN0b3JlKGtleSkgfHwgdGhpcy5zZXRTdG9yZShrZXksIHt9KVxuICAgIH0sXG5cbiAgICBnZXRTY2hlbWFWYWx1ZShcbiAgICAgIGtleU9yRGF0YVBhdGgsXG4gICAgICB7IHR5cGUsIGRlZmF1bHQ6IGRlZiwgc2NoZW1hID0gdGhpcy5zY2hlbWEsIGNhbGxiYWNrID0gdHJ1ZSB9ID0ge31cbiAgICApIHtcbiAgICAgIGNvbnN0IHR5cGVzID0gdHlwZSAmJiBhc0FycmF5KHR5cGUpXG4gICAgICAvLyBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgZGF0YS1wYXRocyBpbiBga2V5T3JEYXRhUGF0aGAgY2FuIG9ubHkgYmVcbiAgICAgIC8vIHByb3ZpZGVkIGluIGluIGFycmF5IGZvcm1hdCBoZXJlOlxuICAgICAgbGV0IHZhbHVlID0gc2NoZW1hXG4gICAgICAgID8gaXNBcnJheShrZXlPckRhdGFQYXRoKVxuICAgICAgICAgID8gZ2V0VmFsdWVBdERhdGFQYXRoKHNjaGVtYSwga2V5T3JEYXRhUGF0aCwgKCkgPT4gdW5kZWZpbmVkKVxuICAgICAgICAgIDogc2NoZW1hW2tleU9yRGF0YVBhdGhdXG4gICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChjYWxsYmFjayAmJiBpc0Z1bmN0aW9uKGRlZikgJiYgIWlzTWF0Y2hpbmdUeXBlKHR5cGVzLCBkZWYpKSB7XG4gICAgICAgICAgLy8gU3VwcG9ydCBgZGVmYXVsdCgpYCBmdW5jdGlvbnMgZm9yIGFueSB0eXBlIGV4Y2VwdCBgRnVuY3Rpb25gOlxuICAgICAgICAgIGRlZiA9IGRlZi5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmXG4gICAgICB9XG5cbiAgICAgIGlmIChpc01hdGNoaW5nVHlwZSh0eXBlcywgdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgfVxuICAgICAgLy8gQW55IHNjaGVtYSB2YWx1ZSBoYW5kbGVkIHRocm91Z2ggYGdldFNjaGVtYVZhbHVlKClgIGNhbiBwcm92aWRlXG4gICAgICAvLyBhIGZ1bmN0aW9uIHRoYXQncyByZXNvbHZlZCB3aGVuIHRoZSB2YWx1ZSBpcyBldmFsdWF0ZWQ6XG4gICAgICBpZiAoY2FsbGJhY2sgJiYgaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgIH1cbiAgICAgIC8vIE5vdyBmaW5hbGx5IHNlZSBpZiB3ZSBjYW4gY29udmVydCB0byB0aGUgZXhwZWN0IHR5cGVzLlxuICAgICAgaWYgKHR5cGVzICYmIHZhbHVlICE9IG51bGwgJiYgIWlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkpIHtcbiAgICAgICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICAgICAgY29uc3QgY29udmVydGVkID0gY29udmVydFR5cGUodHlwZSwgdmFsdWUpXG4gICAgICAgICAgaWYgKGNvbnZlcnRlZCAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH0sXG5cbiAgICBnZXRMYWJlbChzY2hlbWEsIG5hbWUpIHtcbiAgICAgIHJldHVybiBzY2hlbWFcbiAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdsYWJlbCcsIHsgdHlwZTogU3RyaW5nLCBzY2hlbWEgfSkgfHxcbiAgICAgICAgICBsYWJlbGl6ZShuYW1lIHx8IHNjaGVtYS5uYW1lKVxuICAgICAgICA6IGxhYmVsaXplKG5hbWUpIHx8ICcnXG4gICAgfSxcblxuICAgIGxhYmVsaXplLFxuXG4gICAgZ2V0QnV0dG9uQXR0cmlidXRlcyhuYW1lLCBidXR0b24pIHtcbiAgICAgIGNvbnN0IHZlcmIgPSB0aGlzLnZlcmJzW25hbWVdIHx8IG5hbWVcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNsYXNzOiBgZGl0by1idXR0b24tJHt2ZXJifWAsXG4gICAgICAgIHRpdGxlOiBidXR0b24/LnRleHQgfHwgbGFiZWxpemUodmVyYilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0RHJhZ09wdGlvbnMoZHJhZ2dhYmxlLCBmYWxsYmFjayA9IGZhbHNlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbmltYXRpb246IDE1MCxcbiAgICAgICAgZGlzYWJsZWQ6ICFkcmFnZ2FibGUsXG4gICAgICAgIGhhbmRsZTogJy5kaXRvLWJ1dHRvbi1kcmFnJyxcbiAgICAgICAgZHJhZ0NsYXNzOiAnZGl0by1kcmFnLWFjdGl2ZScsXG4gICAgICAgIGNob3NlbkNsYXNzOiAnZGl0by1kcmFnLWNob3NlbicsXG4gICAgICAgIGdob3N0Q2xhc3M6ICdkaXRvLWRyYWctZ2hvc3QnLFxuICAgICAgICBmYWxsYmFja0NsYXNzOiAnZGl0by1kcmFnLWZhbGxiYWNrJyxcbiAgICAgICAgZm9yY2VGYWxsYmFjazogZmFsbGJhY2tcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0UXVlcnlMaW5rKHF1ZXJ5KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBxdWVyeSxcbiAgICAgICAgLy8gUHJlc2VydmUgaGFzaCBmb3IgdGFiczpcbiAgICAgICAgaGFzaDogdGhpcy4kcm91dGUuaGFzaFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzaG91bGRSZW5kZXIoc2NoZW1hID0gbnVsbCkge1xuICAgICAgcmV0dXJuICEhc2NoZW1hICYmIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2lmJywge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICBzY2hlbWFcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNob3dEaWFsb2coe1xuICAgICAgY29tcG9uZW50cyxcbiAgICAgIGJ1dHRvbnMsXG4gICAgICBkYXRhLFxuICAgICAgc2V0dGluZ3MgPSB7XG4gICAgICAgIHdpZHRoOiA0ODAsXG4gICAgICAgIGhlaWdodDogJ2F1dG8nLFxuICAgICAgICBjbGlja1RvQ2xvc2U6IGZhbHNlXG4gICAgICB9XG4gICAgfSkge1xuICAgICAgLy8gU2hvd3MgYSBkaXRvLWRpYWxvZyBjb21wb25lbnQgdGhyb3VnaCB2dWUtanMtbW9kYWwsIGFuZCB3cmFwcyBpdCBpbiBhXG4gICAgICAvLyBwcm9taXNlIHNvIHRoYXQgdGhlIGJ1dHRvbnMgaW4gdGhlIGRpYWxvZyBjYW4gdXNlIGBkaWFsb2cucmVzb2x2ZSgpYFxuICAgICAgLy8gYW5kIGBkaWFsb2cucmVqZWN0KClgIHRvIGNsb3NlIHRoZSBtb2RhbCBkaWFsb2cgYW5kIHJlc29sdmUgLyByZWplY3RcbiAgICAgIC8vIHRoZSBwcm9taXNlIGF0IG9uY2UuXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0aGlzLiRtb2RhbC5zaG93KERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWRpYWxvZycpLCB7XG4gICAgICAgICAgY29tcG9uZW50cyxcbiAgICAgICAgICBidXR0b25zLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgcHJvbWlzZTogeyByZXNvbHZlLCByZWplY3QgfVxuICAgICAgICB9LCBzZXR0aW5ncylcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdldFJlc291cmNlUGF0aChyZXNvdXJjZSkge1xuICAgICAgcmVzb3VyY2UgPSBnZXRSZXNvdXJjZShyZXNvdXJjZSlcbiAgICAgIC8vIFJlc291cmNlcyB3aXRob3V0IGEgcGFyZW50IGluaGVyaXQgdGhlIG9uZSBmcm9tIGBkYXRhQ29tcG9uZW50YFxuICAgICAgLy8gYXV0b21hdGljYWxseS5cbiAgICAgIGlmIChyZXNvdXJjZS5wYXJlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXNvdXJjZS5wYXJlbnQgPSB0aGlzLmRhdGFDb21wb25lbnQ/LnJlc291cmNlXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5hcGkucmVzb3VyY2VzLmFueShnZXRSZXNvdXJjZShyZXNvdXJjZSkpXG4gICAgfSxcblxuICAgIGdldFJlc291cmNlVXJsKHJlc291cmNlKSB7XG4gICAgICBjb25zdCBwYXRoID0gdGhpcy5nZXRSZXNvdXJjZVBhdGgocmVzb3VyY2UpXG4gICAgICBpZiAoIXBhdGgpIHJldHVybiBudWxsXG4gICAgICBjb25zdCB1cmwgPSB0aGlzLmFwaS5nZXRBcGlVcmwocGF0aClcbiAgICAgIC8vIFN1cHBvcnQgb3B0aW9uYWwgcXVlcnkgcGFyYW1ldGVycywgdG8gYmUgYXJlIGFkZGVkIHRvIHRoZSBVUkwuXG4gICAgICBjb25zdCB7IHF1ZXJ5IH0gPSByZXNvdXJjZVxuICAgICAgY29uc3Qgc2VhcmNoID0gcXVlcnkgJiYgbmV3IFVSTFNlYXJjaFBhcmFtcyhxdWVyeSkudG9TdHJpbmcoKVxuICAgICAgcmV0dXJuIHNlYXJjaCA/IGAke3VybH0/JHtzZWFyY2h9YCA6IHVybFxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kUmVxdWVzdCh7IG1ldGhvZCwgdXJsLCByZXNvdXJjZSwgcXVlcnksIGRhdGEsIGludGVybmFsIH0pIHtcbiAgICAgIHVybCB8fD0gdGhpcy5nZXRSZXNvdXJjZVBhdGgocmVzb3VyY2UpXG4gICAgICBtZXRob2QgfHw9IHJlc291cmNlPy5tZXRob2RcbiAgICAgIGNvbnN0IGNoZWNrVXNlciA9ICFpbnRlcm5hbCAmJiB0aGlzLmFwaS5pc0FwaVJlcXVlc3QodXJsKVxuICAgICAgaWYgKGNoZWNrVXNlcikge1xuICAgICAgICBhd2FpdCB0aGlzLnJvb3RDb21wb25lbnQuZW5zdXJlVXNlcigpXG4gICAgICB9XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuYXBpLnJlcXVlc3QoeyBtZXRob2QsIHVybCwgZGF0YSwgcXVlcnkgfSlcbiAgICAgIC8vIERldGVjdCBjaGFuZ2Ugb2YgdGhlIG93biB1c2VyLCBhbmQgZmV0Y2ggaXQgYWdhaW4gaWYgaXQgd2FzIGNoYW5nZWQuXG4gICAgICBpZiAoXG4gICAgICAgIGNoZWNrVXNlciAmJlxuICAgICAgICBtZXRob2QgPT09ICdwYXRjaCcgJiZcbiAgICAgICAgZXF1YWxzKHJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSh0aGlzLnVzZXIuaWQsIHRoaXMuYXBpLnVzZXJzKSlcbiAgICAgICkge1xuICAgICAgICBhd2FpdCB0aGlzLnJvb3RDb21wb25lbnQuZmV0Y2hVc2VyKClcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNwb25zZVxuICAgIH0sXG5cbiAgICByZXF1ZXN0KHsgY2FjaGUsIC4uLm9wdGlvbnMgfSkge1xuICAgICAgLy8gQWxsb3cgY2FjaGluZyBvZiBsb2FkZWQgZGF0YSBvbiB0d28gbGV2ZWxzOlxuICAgICAgLy8gLSAnZ2xvYmFsJzogY2FjaGUgZ2xvYmFsbHksIGZvciB0aGUgZW50aXJlIGFkbWluIHNlc3Npb25cbiAgICAgIC8vIC0gJ2xvY2FsJzogY2FjaGUgbG9jYWxseSB3aXRoaW4gdGhlIGNsb3Nlc3Qgcm91dGUgY29tcG9uZW50IHRoYXQgaXNcbiAgICAgIC8vICAgIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlIGFuZCBsb2FkcyBpdHMgb3duIGRhdGEuXG4gICAgICBjb25zdCBjYWNoZVBhcmVudCA9IGNhY2hlICYmIHtcbiAgICAgICAgZ2xvYmFsOiB0aGlzLmFwcFN0YXRlLFxuICAgICAgICBsb2NhbDogdGhpcy5kYXRhQ29tcG9uZW50XG4gICAgICB9W2NhY2hlXVxuICAgICAgY29uc3QgbG9hZENhY2hlID0gY2FjaGVQYXJlbnQ/LmxvYWRDYWNoZVxuICAgICAgLy8gQnVpbGQgYSBjYWNoZSBrZXkgZnJvbSB0aGUgY29uZmlnOlxuICAgICAgY29uc3QgY2FjaGVLZXkgPSBsb2FkQ2FjaGUgJiYgYCR7XG4gICAgICAgIG9wdGlvbnMubWV0aG9kIHx8ICdnZXQnfSAke1xuICAgICAgICBvcHRpb25zLnVybH0gJHtcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5wYXJhbXMgfHwgJycpfSAke1xuICAgICAgICBKU09OLnN0cmluZ2lmeShvcHRpb25zLmRhdGEgfHwgJycpXG4gICAgICB9YFxuICAgICAgaWYgKGxvYWRDYWNoZSAmJiAoY2FjaGVLZXkgaW4gbG9hZENhY2hlKSkge1xuICAgICAgICByZXR1cm4gbG9hZENhY2hlW2NhY2hlS2V5XVxuICAgICAgfVxuICAgICAgLy8gTk9URTogTm8gYXdhaXQgaGVyZSwgcmVzIGlzIGEgcHJvbWlzZSB0aGF0IHdlIGNhbiBlYXNpbHkgY2FjaGUuXG4gICAgICAvLyBUaGF0J3MgZmluZSBiZWNhdXNlIHByb21pc2VzIGNhbiBiZSByZXNvbHZlZCBvdmVyIGFuZCBvdmVyIGFnYWluLlxuICAgICAgY29uc3QgcmVzID0gdGhpcy5zZW5kUmVxdWVzdChvcHRpb25zKVxuICAgICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5kYXRhKVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIC8vIENvbnZlcnQgYXhpb3MgZXJyb3JzIHRvIG5vcm1hbCBlcnJvcnNcbiAgICAgICAgICBjb25zdCBkYXRhID0gZXJyb3IucmVzcG9uc2U/LmRhdGFcbiAgICAgICAgICB0aHJvdyBkYXRhXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKGRhdGEubWVzc2FnZSksIGRhdGEpXG4gICAgICAgICAgICA6IGVycm9yXG4gICAgICAgIH0pXG4gICAgICBpZiAobG9hZENhY2hlKSB7XG4gICAgICAgIGxvYWRDYWNoZVtjYWNoZUtleV0gPSByZXNcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9LFxuXG4gICAgZm9ybWF0KHZhbHVlLCB7XG4gICAgICBsb2NhbGUgPSB0aGlzLmFwaS5sb2NhbGUsXG4gICAgICBkZWZhdWx0cyA9IHRoaXMuYXBpLmZvcm1hdHMsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gZm9ybWF0KHZhbHVlLCB7XG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgZGVmYXVsdHMsXG4gICAgICAgIC4uLm9wdGlvbnNcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIG5hdmlnYXRlKGxvY2F0aW9uKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKFxuICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgICgpID0+IHJlc29sdmUodHJ1ZSksXG4gICAgICAgICAgKCkgPT4gcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZG93bmxvYWQob3B0aW9ucyA9IHt9KSB7XG4gICAgICBpZiAoaXNTdHJpbmcob3B0aW9ucykpIHtcbiAgICAgICAgb3B0aW9ucyA9IHsgdXJsOiBvcHRpb25zIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgdXJsLCBmaWxlbmFtZSB9ID0gb3B0aW9uc1xuICAgICAgLy8gU2VlOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDk5MTcwNjYvMTE2MzcwOFxuICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgYS5ocmVmID0gdXJsXG4gICAgICBpZiAoZmlsZW5hbWUpIHtcbiAgICAgICAgYS5kb3dubG9hZCA9IGZpbGVuYW1lXG4gICAgICB9XG4gICAgICBjb25zdCB7IGJvZHkgfSA9IGRvY3VtZW50XG4gICAgICBib2R5LmFwcGVuZENoaWxkKGEpXG4gICAgICBhLmNsaWNrKClcbiAgICAgIGJvZHkucmVtb3ZlQ2hpbGQoYSlcbiAgICB9LFxuXG4gICAgbm90aWZ5KG9wdGlvbnMpIHtcbiAgICAgIHRoaXMucm9vdENvbXBvbmVudC5ub3RpZnkob3B0aW9ucylcbiAgICB9LFxuXG4gICAgY2xvc2VOb3RpZmljYXRpb25zKCkge1xuICAgICAgdGhpcy5yb290Q29tcG9uZW50LmNsb3NlTm90aWZpY2F0aW9ucygpXG4gICAgfSxcblxuICAgIHNldHVwU2NoZW1hRmllbGRzKCkge1xuICAgICAgdGhpcy5zZXR1cE1ldGhvZHMoKVxuICAgICAgdGhpcy5zZXR1cENvbXB1dGVkKClcbiAgICAgIHRoaXMuc2V0dXBFdmVudHMoKVxuICAgIH0sXG5cbiAgICBzZXR1cE1ldGhvZHMoKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5tZXRob2RzIHx8IHt9KSkge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgICB0aGlzW2tleV0gPSB2YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgbWV0aG9kIGRlZmluaXRpb246ICR7a2V5fTogJHt2YWx1ZX1gKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldHVwQ29tcHV0ZWQoKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5jb21wdXRlZCB8fCB7fSkpIHtcbiAgICAgICAgY29uc3QgYWNjZXNzb3IgPSBpc0Z1bmN0aW9uKHZhbHVlKVxuICAgICAgICAgID8geyBnZXQ6IHZhbHVlIH1cbiAgICAgICAgICA6IGlzT2JqZWN0KHZhbHVlKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmdldClcbiAgICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICBpZiAoYWNjZXNzb3IpIHtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywga2V5LCBhY2Nlc3NvcilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgY29tcHV0ZWQgcHJvcGVydHkgZGVmaW5pdGlvbjogJHtrZXl9OiAke3ZhbHVlfWBcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0dXBFdmVudHMoKSB7XG4gICAgICBjb25zdCB7IHdhdGNoLCBldmVudHMgfSA9IHRoaXMuc2NoZW1hXG4gICAgICBpZiAod2F0Y2gpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlcnMgPSBpc0Z1bmN0aW9uKHdhdGNoKSA/IHdhdGNoLmNhbGwodGhpcykgOiB3YXRjaFxuICAgICAgICBpZiAoaXNPYmplY3QoaGFuZGxlcnMpKSB7XG4gICAgICAgICAgLy8gSW5zdGFsbCB0aGUgd2F0Y2ggaGFuZGxlcnMgaW4gdGhlIG5leHQgdGljaywgc28gYWxsIGNvbXBvbmVudHMgYXJlXG4gICAgICAgICAgLy8gaW5pdGlhbGl6ZWQgYW5kIHdlIGNhbiBjaGVjayBhZ2FpbnN0IHRoZWlyIG5hbWVzLlxuICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgY2FsbGJhY2tdIG9mIE9iamVjdC5lbnRyaWVzKGhhbmRsZXJzKSkge1xuICAgICAgICAgICAgICAvLyBFeHBhbmQgcHJvcGVydHkgbmFtZXMgdG8gJ2RhdGEucHJvcGVydHknOlxuICAgICAgICAgICAgICBjb25zdCBleHByID0gdGhpcy5zY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50QnlOYW1lKGtleSlcbiAgICAgICAgICAgICAgICA/IGBkYXRhLiR7a2V5fWBcbiAgICAgICAgICAgICAgICA6IGtleVxuICAgICAgICAgICAgICB0aGlzLiR3YXRjaChleHByLCBjYWxsYmFjaylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFkZEV2ZW50ID0gKGtleSwgZXZlbnQsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgICAgIHRoaXMub24oaHlwaGVuYXRlKGV2ZW50KSwgY2FsbGJhY2spXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBldmVudCBkZWZpbml0aW9uOiAke2tleX06ICR7Y2FsbGJhY2t9YClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnRzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGV2ZW50cykpIHtcbiAgICAgICAgICBhZGRFdmVudChrZXksIGtleSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIEFsc28gc2NhbiBzY2hlbWEgZm9yIGBvbltBLVpdYC1zdHlsZSBjYWxsYmFja3MgYW5kIGFkZCB0aGVtXG4gICAgICAvLyBUT0RPOiBEZXBlcmVjYXRlIG9uZSBmb3JtYXQgb3IgdGhlIG90aGVyLCBpbiBmYXZvdXIgb2Ygb25seSBvbmUgd2F5IG9mXG4gICAgICAvLyBkb2luZyB0aGluZ3MuIERlY2lkZSB3aGljaCBvbmUgdG8gcmVtb3ZlLlxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEpKSB7XG4gICAgICAgIGlmICgvXm9uW0EtWl0vLnRlc3Qoa2V5KSkge1xuICAgICAgICAgIGFkZEV2ZW50KGtleSwga2V5LnNsaWNlKDIpLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBlbWl0RXZlbnQoZXZlbnQsIHtcbiAgICAgIGNvbnRleHQgPSBudWxsLFxuICAgICAgcGFyZW50ID0gbnVsbFxuICAgIH0gPSB7fSkge1xuICAgICAgY29uc3QgaGFzTGlzdGVuZXJzID0gdGhpcy5oYXNMaXN0ZW5lcnMoZXZlbnQpXG4gICAgICBjb25zdCBwYXJlbnRIYXNMaXN0ZW5lcnMgPSBwYXJlbnQ/Lmhhc0xpc3RlbmVycyhldmVudClcbiAgICAgIGlmIChoYXNMaXN0ZW5lcnMgfHwgcGFyZW50SGFzTGlzdGVuZXJzKSB7XG4gICAgICAgIC8vIFRoZSBlZmZlY3RzIG9mIHNvbWUgZXZlbnRzIG5lZWQgc29tZSB0aW1lIHRvIHByb3BhZ2F0ZSB0aHJvdWdoIFZ1ZS5cbiAgICAgICAgLy8gVXNlICRuZXh0VGljaygpIHRvIG1ha2Ugc3VyZSBvdXIgaGFuZGxlcnMgc2VlIHRoZXNlIGNoYW5nZXMuXG4gICAgICAgIC8vIEZvciBleGFtcGxlLCBgcHJvY2Vzc2VkSXRlbWAgaXMgb25seSBjb3JyZWN0IGFmdGVyIGNvbXBvbmVudHMgdGhhdFxuICAgICAgICAvLyBhcmUgbmV3bHkgcmVuZGVyZWQgZHVlIHRvIGRhdGEgY2hhbmdlcyBoYXZlIHJlZ2lzdGVyZWQgdGhlbXNlbHZlcy5cbiAgICAgICAgaWYgKFsnbG9hZCcsICdjaGFuZ2UnXS5pbmNsdWRlcyhldmVudCkpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLiRuZXh0VGljaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBnZXRDb250ZXh0ID0gKCkgPT4gKGNvbnRleHQgPSBEaXRvQ29udGV4dC5nZXQodGhpcywgY29udGV4dCkpXG4gICAgICAgIGNvbnN0IHJlcyA9IGhhc0xpc3RlbmVyc1xuICAgICAgICAgID8gYXdhaXQgdGhpcy5lbWl0KGV2ZW50LCBnZXRDb250ZXh0KCkpXG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgLy8gRG9uJ3QgYnViYmxlIHRvIHBhcmVudCBpZiBoYW5kbGVkIGV2ZW50IHJldHVybmVkIGBmYWxzZWBcbiAgICAgICAgaWYgKHBhcmVudEhhc0xpc3RlbmVycyAmJiByZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgcGFyZW50LmVtaXQoZXZlbnQsIGdldENvbnRleHQoKSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGVtaXRTY2hlbWFFdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnQuZW1pdEV2ZW50KGV2ZW50LCBwYXJhbXMpXG4gICAgfVxuICB9XG59XG5cbmxldCB1aWQgPSAwXG4iLCJpbXBvcnQgeyBpc0NyZWRpdENhcmQgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgY3JlZGl0Y2FyZCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzQ3JlZGl0Q2FyZCh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBpbnZhbGlkJ1xufVxuIiwiZXhwb3J0IGNvbnN0IGRlY2ltYWxzID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBkZWNpbWFscykgPT4ge1xuICAgIGNvbnN0IG1hdGNoID0gZGVjaW1hbHMgPT09ICcqJyA/ICcrJyA6IGB7MSwke2RlY2ltYWxzfX1gXG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF5bLStdP1xcXFxkKihcXFxcLlxcXFxkJHttYXRjaH0pPyRgKS50ZXN0KHZhbHVlKVxuICB9LFxuXG4gIG1lc3NhZ2U6ICh2YWx1ZSwgZGVjaW1hbHMpID0+IChcbiAgICBgbXVzdCBiZSBudW1lcmljIGFuZCBtYXkgY29udGFpbiAke1xuICAgICAgIWRlY2ltYWxzIHx8IGRlY2ltYWxzID09PSAnKicgPyAnJyA6IGRlY2ltYWxzXG4gICAgfSBkZWNpbWFsIHBvaW50c2BcbiAgKVxufVxuIiwiaW1wb3J0IHsgaXNFbWFpbCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBlbWFpbCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzRW1haWwodmFsdWUpLFxuICBtZXNzYWdlOiAnbXVzdCBiZSBhIHZhbGlkIGVtYWlsJ1xufVxuIiwiaW1wb3J0IHsgaXNIb3N0bmFtZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBob3N0bmFtZSA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzSG9zdG5hbWUodmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgaG9zdCBuYW1lJ1xufVxuIiwiaW1wb3J0IHsgaXNEb21haW4gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgZG9tYWluID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNEb21haW4odmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgZG9tYWluJ1xufVxuIiwiaW1wb3J0IHsgaXNJbnRlZ2VyIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGludGVnZXIgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0ludGVnZXIodmFsdWUpLFxuICBtZXNzYWdlOiAnbXVzdCBiZSB3aG9sZSBudW1iZXInXG59XG4iLCJleHBvcnQgY29uc3QgbWF4ID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBtYXgpID0+IHZhbHVlIDw9IG1heCxcbiAgbWVzc2FnZSh2YWx1ZSwgbWF4KSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlICR7bWF4fSBvciBsZXNzYFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgbWluID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBtaW4pID0+IHZhbHVlID49IG1pbixcbiAgbWVzc2FnZSh2YWx1ZSwgbWluKSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlICR7bWlufSBvciBtb3JlYFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgcGFzc3dvcmQgPSB7XG4gIC8vIEFsbG93IGFueSB2YWx1ZS4gRm9yIG5vdyB0aGlzIGlzIG9ubHkgdXNlZCBhcyBhIG1hcmtlciwgdG8gYWxsb3cgdGhlXG4gIC8vIHJlcXVpcmVkIHZhbGlkYXRpb24gdG8gaGFuZGxlIHVuY2hhbmdlZCBwYXNzd29yZHMgc2VwYXJhdGVseS5cbiAgdmFsaWRhdGU6ICgpID0+IHRydWVcbn1cbiIsImV4cG9ydCBjb25zdCByYW5nZSA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgW21pbiwgbWF4XSkgPT4gdmFsdWUgPj0gbWluICYmIHZhbHVlIDw9IG1heCxcbiAgbWVzc2FnZSh2YWx1ZSwgW21pbiwgbWF4XSkge1xuICAgIHJldHVybiBgbXVzdCBiZSBiZXR3ZWVuICR7bWlufSBhbmQgJHttYXh9YFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgcmVxdWlyZWQgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIHNldHRpbmdzLCB7IHBhc3N3b3JkIH0pID0+IChcbiAgICAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycpIHx8XG4gICAgLy8gUGFzc3dvcmQgZmllbGRzIHVzZSBgdW5kZWZpbmVkYCBhcyBvcHBvc2VkIHRvIGBudWxsYCB3aGVuIHRoZXkncmUgc2V0XG4gICAgLy8gYnV0IHVuY2hhbmdlZCwgYWxsb3cgdGhpcyB0byBwYXNzIHRocm91Z2g6XG4gICAgKHBhc3N3b3JkICYmIHZhbHVlID09PSB1bmRlZmluZWQpXG4gICksXG4gIG1lc3NhZ2U6ICdpcyByZXF1aXJlZCcsXG4gIG51bGxpc2g6IHRydWVcbn1cbiIsImltcG9ydCB7IGlzVXJsIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IHVybCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzVXJsKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIHZhbGlkIFVSTCdcbn1cbiIsImltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0ICogYXMgdmFsaWRhdGlvbnMgZnJvbSAnLi4vdmFsaWRhdGlvbnMvaW5kZXguanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVG91Y2hlZDogZmFsc2UsXG4gICAgICBpc0RpcnR5OiBmYWxzZSxcbiAgICAgIGlzVmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgZXJyb3JzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZXZlbnRzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9jdXM6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzVG91Y2hlZCA9IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgYmx1cjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGUoKVxuICAgICAgICB9LFxuICAgICAgICBjaGFuZ2U6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLm1hcmtEaXJ0eSgpXG4gICAgICAgIH0sXG4gICAgICAgIGlucHV0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5tYXJrRGlydHkoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICB0aGlzLmlzVG91Y2hlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzRGlydHkgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZVxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIHZhbGlkYXRlKG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXNcbiAgICAgIC8vIGNvbnNvbGUubG9nKCd2YWxpZGF0ZScsIHRoaXMuZGF0YVBhdGgsIHZhbHVlLCB0aGlzLnZhbGlkYXRpb25zKVxuICAgICAgZm9yIChjb25zdCBbcnVsZSwgc2V0dGluZ10gb2YgT2JqZWN0LmVudHJpZXModGhpcy52YWxpZGF0aW9ucykpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdG9yID0gdmFsaWRhdGlvbnNbcnVsZV1cbiAgICAgICAgaWYgKHZhbGlkYXRvciAmJiAodmFsaWRhdG9yLm51bGxpc2ggfHwgdmFsdWUgIT0gbnVsbCkpIHtcbiAgICAgICAgICBjb25zdCB7IHZhbGlkYXRlLCBtZXNzYWdlIH0gPSB2YWxpZGF0b3JcbiAgICAgICAgICBpZiAoIXZhbGlkYXRlKHZhbHVlLCBzZXR0aW5nLCB0aGlzLnZhbGlkYXRpb25zKSkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNGdW5jdGlvbihtZXNzYWdlKVxuICAgICAgICAgICAgICAgID8gbWVzc2FnZSh2YWx1ZSwgc2V0dGluZywgdGhpcylcbiAgICAgICAgICAgICAgICA6IG1lc3NhZ2VcbiAgICAgICAgICAgICAgdGhpcy5hZGRFcnJvcihlcnJvciwgdHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IHRydWVcbiAgICAgICAgdGhpcy5pc1ZhbGlkID0gaXNWYWxpZFxuICAgICAgfVxuICAgICAgcmV0dXJuIGlzVmFsaWRcbiAgICB9LFxuXG4gICAgdmVyaWZ5KCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGUoZmFsc2UpXG4gICAgfSxcblxuICAgIG1hcmtEaXJ0eSgpIHtcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IHRydWVcbiAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkID0gZmFsc2VcbiAgICAgIC8vIENsZWFyIGN1cnJlbnRseSBkaXNwbGF5ZWQgZXJyb3JzIG9uIG5ldyBpbnB1dC5cbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICBhZGRFcnJvcihlcnJvciwgYWRkTGFiZWwgPSBmYWxzZSkge1xuICAgICAgdGhpcy5lcnJvcnMgfHw9IFtdXG4gICAgICBpZiAoYWRkTGFiZWwpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmxhYmVsIHx8IHRoaXMucGxhY2Vob2xkZXIgfHwgdGhpcy5uYW1lXG4gICAgICAgIGVycm9yID0gYFRoZSAke2xhYmVsfSBmaWVsZCAke2Vycm9yfS5gXG4gICAgICB9XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yKVxuICAgICAgdGhpcy4kZW1pdCgnZXJyb3JzJywgdGhpcy5lcnJvcnMpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIC8vIENvbnZlcnQgZnJvbSBBSlYgZXJyb3JzIG9iamVjdHMgdG8gYW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHRoaXMuZXJyb3JzID0gW11cbiAgICAgIGZvciAoY29uc3QgeyBtZXNzYWdlIH0gb2YgZXJyb3JzKSB7XG4gICAgICAgIHRoaXMuYWRkRXJyb3IobWVzc2FnZSwgdHJ1ZSlcbiAgICAgIH1cbiAgICAgIGlmIChmb2N1cykge1xuICAgICAgICB0aGlzLmZvY3VzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSxcblxuICAgIGdldEVycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLmVycm9ycyA/IFsuLi50aGlzLmVycm9yc10gOiBudWxsXG4gICAgfSxcblxuICAgIGNsZWFyRXJyb3JzKCkge1xuICAgICAgdGhpcy5lcnJvcnMgPSBudWxsXG4gICAgICB0aGlzLiRlbWl0KCdlcnJvcnMnLCB0aGlzLmVycm9ycylcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGlzRnVuY3Rpb24sIGlzU3RyaW5nLCBwYXJzZURhdGFQYXRoLCBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NoZW1hQWNjZXNzb3IoXG4gIGtleU9yRGF0YVBhdGgsXG4gIHsgdHlwZSwgZGVmYXVsdDogZGVmLCBnZXQsIHNldCwgY2FsbGJhY2sgPSB0cnVlIH0gPSB7fVxuKSB7XG4gIC8vIGBrZXlPckRhdGFQYXRoYCBjYW4gYmUgYSBzaW1wbGUgcHJvcGVydHkga2V5LFxuICAvLyBvciBhIGRhdGEtcGF0aCBpbnRvIHN1Yi1wcm9wZXJ0aWVzLCBib3RoIGluIGFycmF5IG9yIHN0cmluZyBmb3JtYXQuXG4gIGlmIChpc1N0cmluZyhrZXlPckRhdGFQYXRoKSAmJiBrZXlPckRhdGFQYXRoLmluY2x1ZGVzKCcuJykpIHtcbiAgICBrZXlPckRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChrZXlPckRhdGFQYXRoKVxuICB9XG4gIC8vIFVzZSB0aGUgbm9ybWFsaXplZCBkYXRhIHBhdGggZm9yIHRoZSBoYW5kbGluZyBvdmVycmlkZXNcbiAgY29uc3QgbmFtZSA9IG5vcm1hbGl6ZURhdGFQYXRoKGtleU9yRGF0YVBhdGgpXG4gIHJldHVybiB7XG4gICAgZ2V0KCkge1xuICAgICAgLy8gT25seSBkZXRlcm1pbmUgc2NoZW1hIHZhbHVlIGlmIHdlIGhhdmUgbm8gZ2V0dGVyLCBvciB0aGUgZ2V0dGVyXG4gICAgICAvLyB3YW50cyB0byByZWNlaXZlIHRoZSB2YWx1ZSBhbmQgcHJvY2VzcyBpdCBmdXJ0aGVyOlxuICAgICAgY29uc3QgdmFsdWUgPSAhZ2V0IHx8IGdldC5sZW5ndGggPiAwXG4gICAgICAgIC8vIE5PVEU6IEJlY2F1c2UgYHNjaGVtYWAgb2JqZWN0cyBhcmUgcmV0cmlldmVkIGZyb20gYG1ldGFgIG9iamVjdCwgdGhleVxuICAgICAgICAvLyBkb24ndCBzZWVtIHRvIGJlIHJlYWN0aXZlLiBUbyBhbGxvdyBjaGFuZ2VkIGluIGBzY2hlbWFgIHZhbHVlcyxcbiAgICAgICAgLy8gYHNldCgpYCBzdG9yZXMgY2hhbmdlZCB2YWx1ZXMgaW4gdGhlIHNlcGFyYXRlIGBvdmVycmlkZXNgIG9iamVjdC5cbiAgICAgICAgPyB0aGlzLm92ZXJyaWRlcyAmJiBuYW1lIGluIHRoaXMub3ZlcnJpZGVzXG4gICAgICAgICAgPyB0aGlzLm92ZXJyaWRlc1tuYW1lXVxuICAgICAgICAgIDogdGhpcy5nZXRTY2hlbWFWYWx1ZShrZXlPckRhdGFQYXRoLCB7IHR5cGUsIGRlZmF1bHQ6IGRlZiwgY2FsbGJhY2sgfSlcbiAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIHJldHVybiBnZXQgPyBnZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIGlmIChzZXQpIHtcbiAgICAgICAgc2V0LmNhbGwodGhpcywgdmFsdWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm92ZXJyaWRlcyB8fD0ge31cbiAgICAgICAgdGhpcy4kc2V0KHRoaXMub3ZlcnJpZGVzLCBuYW1lLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0b3JlQWNjZXNzb3IobmFtZSwgeyBkZWZhdWx0OiBkZWYsIGdldCwgc2V0IH0gPSB7fSkge1xuICByZXR1cm4ge1xuICAgIGdldCgpIHtcbiAgICAgIGxldCB2YWx1ZSA9IHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zOlxuICAgICAgICB2YWx1ZSA9IGlzRnVuY3Rpb24oZGVmKSA/IGRlZi5jYWxsKHRoaXMsIHRoaXMuY29udGV4dCkgOiBkZWZcbiAgICAgICAgLy8gVHJpZ2dlciBzZXR0ZXIgYnkgc2V0dGluZyB2YWx1ZSBhbmQgYWNjZXNzb3IgdG8gZGVmYXVsdDpcbiAgICAgICAgdGhpc1tuYW1lXSA9IHZhbHVlXG4gICAgICAgIC8vIE5vdyBhY2Nlc3Mgc3RvcmUgYWdhaW4sIGZvciByZWFjdGl2aXR5IHRyYWNraW5nXG4gICAgICAgIHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIH1cbiAgICAgIC8vIEFsbG93IHRoZSBwcm92aWRlZCBnZXR0ZXIgdG8gZnVydGhlciBjaGFuZ2Ugb3IgcHJvY2VzcyB0aGUgdmFsdWVcbiAgICAgIC8vIHJldHJpZXZlZCBmcm9tIHRoZSBzdG9yZTpcbiAgICAgIHJldHVybiBnZXQgPyBnZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIC8vIEFsbG93IHRoZSBwcm92aWRlZCBzZXR0ZXIgdG8gcmV0dXJuIGEgbmV3IHZhbHVlIHRvIHNldCwgb3IgZG8gdGhlXG4gICAgICAvLyBzZXR0aW5nIGl0c2VsZiwgYW5kIHRoZW4gcmV0dXJuIGB1bmRlZmluZWRgOlxuICAgICAgaWYgKCFzZXQgfHwgKHZhbHVlID0gc2V0LmNhbGwodGhpcywgdmFsdWUpKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuc2V0U3RvcmUobmFtZSwgdmFsdWUpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJjb25zdCB1aWRNYXAgPSBuZXcgV2Vha01hcCgpXG5cbi8vIEdlbmVyYXRlZCBhbmQgcmVtZW1iZXJzIHVuaXF1ZSBpZHMgcGVyIHBhc3NlZCBvYmplY3QgdXNpbmcgYSB3ZWFrIG1hcC5cbmxldCB1aWQgPSAwXG5leHBvcnQgZnVuY3Rpb24gZ2V0VWlkKG9iamVjdCwgaXRlbUlkKSB7XG4gIGxldCBpZCA9IHVpZE1hcC5nZXQob2JqZWN0KVxuICBpZiAoIWlkKSB7XG4gICAgaWQgPSBpdGVtSWQgfHwgYEAkeysrdWlkfWBcbiAgICB1aWRNYXAuc2V0KG9iamVjdCwgaWQpXG4gIH1cbiAgcmV0dXJuIGlkXG59XG4iLCJpbXBvcnQgeyBpc1RlbXBvcmFyeUlkIH0gZnJvbSAnLi9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgaXNJbnRlZ2VyLCBhc0FycmF5LCBwYXJzZURhdGFQYXRoLCBnZXRWYWx1ZUF0RGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IG5hbm9pZCB9IGZyb20gJ25hbm9pZCdcblxuLy8gU2NoZW1hR3JhcGggaXMgYSBjbGFzcyB0byBjb2xsZWN0IHNjaGVtYSBncmFwaCBtZXRhIGluZm9ybWF0aW9uIGluIG9yZGVyIHRvXG4vLyBwcm9jZXNzIHNvdXJjZXMgYW5kIHJlbGF0aW9ucyBmb3IgdGhlIGdpdmVuIHRhcmdldHMgJ3NlcnZlcicgYW5kICdjbGlwYm9hcmQnLFxuLy8gYWNjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHRhYmxlOlxuLy9cbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG4vLyB8IGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZXJ2ZXIgICAgfCBjbGlwYm9hcmQgfFxuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IGZhbHNlICAgICAgICAgICB8IGtlZXAgaWQgICB8IGtlZXAgaWQgICB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiB0cnVlICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZWYsICNyZWYgfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogdHJ1ZSwgdGVtcG9yYXJ5IHwgcmVmLCAjcmVmIHwgcmVmLCAjcmVmIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IGZhbHNlICAgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlbW92ZSBpZCB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiBmYWxzZSwgdGVtcG9yYXJ5ICAgfCByZWYsICNpZCAgfCByZW1vdmUgaWQgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogdHJ1ZSAgICAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVmLCAjaWQgIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IHRydWUsIHRlbXBvcmFyeSAgICB8IHJlZiwgI2lkICB8IHJlZiwgI2lkICB8XG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuXG5leHBvcnQgY2xhc3MgU2NoZW1hR3JhcGgge1xuICBncmFwaCA9IHt9XG4gIHJlZmVyZW5jZXMgPSB7fVxuXG4gIHNldChkYXRhUGF0aCwgc2V0dGluZ3MsIGRlZmF1bHRzKSB7XG4gICAgZGF0YVBhdGggPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxuICAgIGxldCBzdWJHcmFwaCA9IHRoaXMuZ3JhcGhcbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgZGF0YVBhdGgpIHtcbiAgICAgIGNvbnN0IGtleSA9IGlzSW50ZWdlcigrcGFydCkgPyAnKicgOiBwYXJ0XG4gICAgICBzdWJHcmFwaCA9IChzdWJHcmFwaFtrZXldID8/PSB7fSlcbiAgICB9XG4gICAgc3ViR3JhcGguJHNldHRpbmdzID0ge1xuICAgICAgLi4uZGVmYXVsdHMsIC8vIFNlZSBgYWRkU291cmNlKGRhdGFQYXRoKWBcbiAgICAgIC4uLnN1YkdyYXBoLiRzZXR0aW5ncyxcbiAgICAgIC4uLnNldHRpbmdzXG4gICAgfVxuICB9XG5cbiAgYWRkU291cmNlKGRhdGFQYXRoLCBzY2hlbWEpIHtcbiAgICAvLyBPbmx5IHNldCBgcmVsYXRlZDogZmFsc2VgIHRocm91Z2ggdGhlIGRlZmF1bHRzLCBhcyBgc2V0U291cmNlUmVsYXRlZCgpYFxuICAgIC8vIG1heSBiZSBjYWxsZWQgYmVmb3JlIGBhZGRTb3VyY2UoKWAsIGRlcGVuZGluZyBvbiB0aGUgZ3JhcGggc3RydWN0dXJlLlxuICAgIHRoaXMuc2V0KGRhdGFQYXRoLCB7IHR5cGU6ICdzb3VyY2UnLCBzY2hlbWEgfSwgeyByZWxhdGVkOiBmYWxzZSB9KVxuICB9XG5cbiAgc2V0U291cmNlUmVsYXRlZChkYXRhUGF0aCkge1xuICAgIHRoaXMuc2V0KGRhdGFQYXRoLCB7XG4gICAgICByZWxhdGVkOiB0cnVlLFxuICAgICAgcmVmZXJlbmNlOiB0aGlzLmdldFJlZmVyZW5jZVByZWZpeChkYXRhUGF0aClcbiAgICB9KVxuICB9XG5cbiAgYWRkUmVsYXRpb24oZGF0YVBhdGgsIHJlbGF0ZWREYXRhUGF0aCwgc2NoZW1hKSB7XG4gICAgdGhpcy5zZXQoZGF0YVBhdGgsIHtcbiAgICAgIHR5cGU6ICdyZWxhdGlvbicsXG4gICAgICBzY2hlbWEsXG4gICAgICBpbnRlcm5hbDogISFyZWxhdGVkRGF0YVBhdGgsXG4gICAgICByZWZlcmVuY2U6IHRoaXMuZ2V0UmVmZXJlbmNlUHJlZml4KHJlbGF0ZWREYXRhUGF0aClcbiAgICB9KVxuICB9XG5cbiAgZ2V0UmVmZXJlbmNlUHJlZml4KGRhdGFQYXRoKSB7XG4gICAgcmV0dXJuIGRhdGFQYXRoXG4gICAgICA/ICh0aGlzLnJlZmVyZW5jZXNbZGF0YVBhdGhdID8/PSBuYW5vaWQoNikpXG4gICAgICA6IG51bGxcbiAgfVxuXG4gIGZsYXR0ZW4oKSB7XG4gICAgY29uc3QgZmxhdHRlbiA9IGdyYXBoID0+IHtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBbXVxuICAgICAgZm9yIChjb25zdCBba2V5LCB7ICRzZXR0aW5ncywgLi4uc3ViR3JhcGggfV0gb2YgT2JqZWN0LmVudHJpZXMoZ3JhcGgpKSB7XG4gICAgICAgIGlmICgkc2V0dGluZ3MpIHtcbiAgICAgICAgICBlbnRyaWVzLnB1c2goW2tleSwgJHNldHRpbmdzXSlcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IFtzdWJLZXksIHNldHRpbmdzXSBvZiBmbGF0dGVuKHN1YkdyYXBoKSkge1xuICAgICAgICAgIGVudHJpZXMucHVzaChbYCR7a2V5fS8ke3N1YktleX1gLCBzZXR0aW5nc10pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBlbnRyaWVzXG4gICAgfVxuXG4gICAgcmV0dXJuIGZsYXR0ZW4odGhpcy5ncmFwaClcbiAgfVxuXG4gIHByb2Nlc3Moc291cmNlU2NoZW1hLCBkYXRhLCB7IHRhcmdldCB9KSB7XG4gICAgY29uc3QgY2xpcGJvYXJkID0gdGFyZ2V0ID09PSAnY2xpcGJvYXJkJ1xuICAgIGlmIChjbGlwYm9hcmQpIHtcbiAgICAgIGRlbGV0ZSBkYXRhW3NvdXJjZVNjaGVtYS5pZEtleSB8fCAnaWQnXVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtkYXRhUGF0aCwgc2V0dGluZ3NdIG9mIHRoaXMuZmxhdHRlbigpKSB7XG4gICAgICBjb25zdCB7IHR5cGUsIHNjaGVtYSwgaW50ZXJuYWwsIHJlbGF0ZWQsIHJlZmVyZW5jZSB9ID0gc2V0dGluZ3NcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHR5cGUgPT09ICdzb3VyY2UnXG4gICAgICBjb25zdCByZWxhdGlvbiA9IHR5cGUgPT09ICdyZWxhdGlvbidcbiAgICAgIGlmIChzb3VyY2UgfHwgcmVsYXRpb24gJiYgaW50ZXJuYWwpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gZ2V0VmFsdWVBdERhdGFQYXRoKGRhdGEsIGRhdGFQYXRoLCAoKSA9PiBudWxsKVxuICAgICAgICBjb25zdCByZW1vdmVJZCA9IGNsaXBib2FyZCAmJiBzb3VyY2UgJiYgIXJlbGF0ZWRcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlSWQgPSBjbGlwYm9hcmQgJiYgKFxuICAgICAgICAgIHJlbGF0aW9uICYmIGludGVybmFsIHx8XG4gICAgICAgICAgc291cmNlICYmIHJlbGF0ZWRcbiAgICAgICAgKVxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGFzQXJyYXkodmFsdWVzKS5mbGF0KCkpIHtcbiAgICAgICAgICBjb25zdCBpZEtleSA9IChcbiAgICAgICAgICAgIHNvdXJjZSAmJiBzY2hlbWEuaWRLZXkgfHxcbiAgICAgICAgICAgIHJlbGF0aW9uICYmIHNjaGVtYS5yZWxhdGVCeSB8fFxuICAgICAgICAgICAgJ2lkJ1xuICAgICAgICAgIClcbiAgICAgICAgICBsZXQgaWQgPSB2YWx1ZT8uW2lkS2V5XVxuICAgICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAocmVtb3ZlSWQpIHtcbiAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2lkS2V5XVxuICAgICAgICAgICAgfSBpZiAocmVmZXJlbmNlSWQgfHwgaXNUZW1wb3JhcnlJZChpZCkpIHtcbiAgICAgICAgICAgICAgaWYgKGlzVGVtcG9yYXJ5SWQoaWQpKSB7XG4gICAgICAgICAgICAgICAgaWQgPSBpZC5zbGljZSgxKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHJlZktleSA9IGNsaXBib2FyZFxuICAgICAgICAgICAgICAgIC8vIENsaXBib2FyZCBqdXN0IG5lZWRzIHRlbXBvcmFyeSBpZHMgdW5kZXIgdGhlIGFjdHVhbCBgaWRLZXlgLlxuICAgICAgICAgICAgICAgID8gaWRLZXlcbiAgICAgICAgICAgICAgICAvLyBTZXJ2ZXIgd2FudHMgT2JqZWN0aW9uLXN0eWxlICcjaWQnIC8gJyNyZWYnIHBhaXJzLlxuICAgICAgICAgICAgICAgIDogc291cmNlID8gJyNpZCcgOiAnI3JlZidcbiAgICAgICAgICAgICAgY29uc3QgcmV2VmFsdWUgPSBjbGlwYm9hcmRcbiAgICAgICAgICAgICAgICA/IGBAJHtpZH1gXG4gICAgICAgICAgICAgICAgLy8gS2VlcCB0aGUgaWRzIHVuaXF1ZSBpbiByZWZlcmVuY2UgZ3JvdXBzLCBzaW5jZSB0aGV5IHJlZmVyZW5jZVxuICAgICAgICAgICAgICAgIC8vIGFjY3Jvc3MgdGhlIGZ1bGwgZ3JhcGguXG4gICAgICAgICAgICAgICAgOiByZWZlcmVuY2VcbiAgICAgICAgICAgICAgICAgID8gYCR7cmVmZXJlbmNlfS0ke2lkfWBcbiAgICAgICAgICAgICAgICAgIDogaWQgLy8gQSB0ZW1wb3JhcnkgaWQgd2l0aG91dCBhIHJlbGF0ZWQsIGp1c3QgcHJlc2VydmUgaXQuXG4gICAgICAgICAgICAgIHZhbHVlW3JlZktleV0gPSByZXZWYWx1ZVxuICAgICAgICAgICAgICBpZiAocmVmS2V5ICE9PSBpZEtleSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtpZEtleV1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YVxuICB9XG59XG4iLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7IGdldFVpZCB9IGZyb20gJy4vdWlkLmpzJ1xuaW1wb3J0IHsgU2NoZW1hR3JhcGggfSBmcm9tICcuL1NjaGVtYUdyYXBoLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGgsIGlzVGVtcG9yYXJ5SWQgfSBmcm9tICcuL2RhdGEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCwgaXNTdHJpbmcsIGlzQXJyYXksIGlzRnVuY3Rpb24sIGlzUHJvbWlzZSwgY2xvbmUsIGNhbWVsaXplLCBpc01vZHVsZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5jb25zdCB0eXBlQ29tcG9uZW50cyA9IHt9XG5jb25zdCB1bmtub3duVHlwZVJlcG9ydGVkID0ge31cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyVHlwZUNvbXBvbmVudCh0eXBlLCBjb21wb25lbnQpIHtcbiAgdHlwZUNvbXBvbmVudHNbdHlwZV0gPSBjb21wb25lbnRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVDb21wb25lbnQodHlwZSwgYWxsb3dOdWxsID0gZmFsc2UpIHtcbiAgY29uc3QgY29tcG9uZW50ID0gdHlwZUNvbXBvbmVudHNbdHlwZV0gfHwgbnVsbFxuICBpZiAoIWNvbXBvbmVudCAmJiAhYWxsb3dOdWxsICYmICF1bmtub3duVHlwZVJlcG9ydGVkW3R5cGVdKSB7XG4gICAgLy8gUmVwb3J0IGVhY2ggbWlzc2luZyB0eXBlIG9ubHkgb25jZSwgdG8gYXZvaWQgZmxvb2RpbmcgdGhlIGNvbnNvbGU6XG4gICAgdW5rbm93blR5cGVSZXBvcnRlZFt0eXBlXSA9IHRydWVcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gRGl0byBjb21wb25lbnQgdHlwZTogJyR7dHlwZX0nYClcbiAgfVxuICByZXR1cm4gY29tcG9uZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JFYWNoU2NoZW1hKHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgY29uc3Qgc2NoZW1hcyA9IFtcbiAgICAuLi5PYmplY3QudmFsdWVzKHNjaGVtYT8udGFicyB8fCB7fSksXG4gICAgc2NoZW1hXG4gIF1cbiAgZm9yIChjb25zdCBzY2hlbWEgb2Ygc2NoZW1hcykge1xuICAgIGlmIChzY2hlbWEpIHtcbiAgICAgIGNvbnN0IHJlcyA9IGNhbGxiYWNrKHNjaGVtYSlcbiAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JFYWNoU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZvckVhY2hTY2hlbWEoc2NoZW1hLCBzY2hlbWEgPT4ge1xuICAgIGZvciAoY29uc3QgW25hbWUsIGNvbXBvbmVudF0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hLmNvbXBvbmVudHMgfHwge30pKSB7XG4gICAgICBjb25zdCByZXMgPSBjYWxsYmFjayhjb21wb25lbnQsIG5hbWUpXG4gICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgfVxuICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gZm9yRWFjaFNjaGVtYUNvbXBvbmVudChcbiAgICBzY2hlbWEsXG4gICAgKGNvbXBvbmVudCwgbmFtZSkgPT4gY2FsbGJhY2soY29tcG9uZW50LCBuYW1lKSA/IGNvbXBvbmVudCA6IHVuZGVmaW5lZFxuICApIHx8IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWVTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gZm9yRWFjaFNjaGVtYUNvbXBvbmVudChcbiAgICBzY2hlbWEsXG4gICAgKGNvbXBvbmVudCwgbmFtZSkgPT4gY2FsbGJhY2soY29tcG9uZW50LCBuYW1lKSA/IHRydWUgOiB1bmRlZmluZWRcbiAgKSA9PT0gdHJ1ZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZlcnlTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gZm9yRWFjaFNjaGVtYUNvbXBvbmVudChcbiAgICBzY2hlbWEsXG4gICAgKGNvbXBvbmVudCwgbmFtZSkgPT4gIWNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSkgPyBmYWxzZSA6IHVuZGVmaW5lZFxuICApICE9PSBmYWxzZVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYShzY2hlbWEsIHVud3JhcE1vZHVsZSA9IGZhbHNlKSB7XG4gIGlmIChpc0Z1bmN0aW9uKHNjaGVtYSkpIHtcbiAgICBzY2hlbWEgPSBzY2hlbWEoKVxuICB9XG4gIGlmIChpc1Byb21pc2Uoc2NoZW1hKSkge1xuICAgIHNjaGVtYSA9IGF3YWl0IHNjaGVtYVxuICB9XG4gIGlmIChpc01vZHVsZShzY2hlbWEpKSB7XG4gICAgLy8gQ29weSB0byBjb252ZXJ0IGZyb20gbW9kdWxlIHRvIG9iamVjdDpcbiAgICBzY2hlbWEgPSB7IC4uLnNjaGVtYSB9XG4gICAgLy8gVW53cmFwIGRlZmF1bHQgb3IgbmFtZWQgc2NoZW1hXG4gICAgaWYgKCFzY2hlbWEubmFtZSAmJiAodW53cmFwTW9kdWxlIHx8IHNjaGVtYS5kZWZhdWx0KSkge1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHNjaGVtYSlcbiAgICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb25zdCBuYW1lID0ga2V5c1swXVxuICAgICAgICBzY2hlbWEgPSBzY2hlbWFbbmFtZV1cbiAgICAgICAgaWYgKG5hbWUgIT09ICdkZWZhdWx0Jykge1xuICAgICAgICAgIHNjaGVtYS5uYW1lID0gbmFtZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBzY2hlbWFcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWFzKFxuICB1bnJlc29sdmVkU2NoZW1hcyxcbiAgcmVzb2x2ZUl0ZW0gPSByZXNvbHZlU2NoZW1hXG4pIHtcbiAgbGV0IHNjaGVtYXMgPSBpc0Z1bmN0aW9uKHVucmVzb2x2ZWRTY2hlbWFzKVxuICAgID8gdW5yZXNvbHZlZFNjaGVtYXMoKVxuICAgIDogdW5yZXNvbHZlZFNjaGVtYXNcbiAgc2NoZW1hcyA9IGF3YWl0IHJlc29sdmVTY2hlbWEoc2NoZW1hcywgZmFsc2UpXG4gIGlmIChpc0FycmF5KHNjaGVtYXMpKSB7XG4gICAgLy8gVHJhbnNsYXRlIGFuIGFycmF5IG9mIGR5bmFtaWMgaW1wb3J0LCBlYWNoIGltcG9ydGluZyBvbmUgbmFtZWQgc2NoZW1hXG4gICAgLy8gbW9kdWxlIHRvIGFuIG9iamVjdCB3aXRoIG5hbWVkIGVudHJpZXMuXG4gICAgc2NoZW1hcyA9IE9iamVjdC5mcm9tRW50cmllcyhhd2FpdCBQcm9taXNlLmFsbChzY2hlbWFzLm1hcChcbiAgICAgIGFzeW5jIGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICByZXR1cm4gW3NjaGVtYS5uYW1lLCBzY2hlbWFdXG4gICAgICB9XG4gICAgKSkpXG4gIH0gZWxzZSBpZiAoaXNPYmplY3Qoc2NoZW1hcykpIHtcbiAgICBzY2hlbWFzID0gT2JqZWN0LmZyb21FbnRyaWVzKGF3YWl0IFByb21pc2UuYWxsKE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpLm1hcChcbiAgICAgIGFzeW5jIChba2V5LCBpdGVtXSkgPT4ge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICByZXR1cm4gW2tleSwgc2NoZW1hXVxuICAgICAgfVxuICAgICkpKVxuICB9XG4gIHJldHVybiBzY2hlbWFzXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlUGFuZWxzKHNjaGVtYSkge1xuICBjb25zdCB7IHBhbmVscyB9ID0gc2NoZW1hXG4gIGlmIChzY2hlbWEucGFuZWxzKSB7XG4gICAgc2NoZW1hLnBhbmVscyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKHBhbmVscylcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1ZpZXcoY29tcG9uZW50LCBhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzKSB7XG4gIGNvbnN0IGNoaWxkcmVuID0gW11cbiAgcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lKVxuICBhd2FpdCByZXNvbHZlUGFuZWxzKHNjaGVtYSlcbiAgaWYgKGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpKSB7XG4gICAgYXdhaXQgcHJvY2Vzc0NvbXBvbmVudChhcGksIHNjaGVtYSwgbmFtZSwgY2hpbGRyZW4sIDApXG4gIH0gZWxzZSB7XG4gICAgLy8gQSBtdWx0aS1jb21wb25lbnQgdmlldywgc3RhcnQgYXQgbGV2ZWwgMVxuICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgc2NoZW1hLCBjaGlsZHJlbiwgMSlcbiAgfVxuICByb3V0ZXMucHVzaCh7XG4gICAgcGF0aDogYC8ke3NjaGVtYS5wYXRofWAsXG4gICAgY2hpbGRyZW4sXG4gICAgY29tcG9uZW50LFxuICAgIG1ldGE6IHtcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYVxuICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NDb21wb25lbnQoYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwpIHtcbiAgc2NoZW1hLmxldmVsID0gbGV2ZWxcbiAgLy8gRGVsZWdhdGUgc2NoZW1hIHByb2Nlc3NpbmcgdG8gdGhlIGFjdHVhbCB0eXBlIGNvbXBvbmVudHMuXG4gIHJldHVybiBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5wcm9jZXNzU2NoZW1hPy4oXG4gICAgYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWxcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lKSB7XG4gIC8vIFVzZWQgZm9yIHZpZXcgYW5kIHNvdXJjZSBzY2hlbWFzLCBzZWUgU291cmNlTWl4aW5cbiAgc2NoZW1hLm5hbWUgPSBuYW1lXG4gIHNjaGVtYS5wYXRoID0gc2NoZW1hLnBhdGggfHwgYXBpLm5vcm1hbGl6ZVBhdGgobmFtZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgc2NoZW1hLCByb3V0ZXMsIGxldmVsKSB7XG4gIGNvbnN0IHByb21pc2VzID0gW11cbiAgZm9yRWFjaFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIChjb21wb25lbnQsIG5hbWUpID0+IHtcbiAgICBwcm9taXNlcy5wdXNoKHByb2Nlc3NDb21wb25lbnQoYXBpLCBjb21wb25lbnQsIG5hbWUsIHJvdXRlcywgbGV2ZWwpKVxuICB9KVxuICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcylcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NGb3JtcyhhcGksIHNjaGVtYSwgbGV2ZWwpIHtcbiAgLy8gRmlyc3QgcmVzb2x2ZSB0aGUgZm9ybXMgYW5kIHN0b3JlIHRoZSByZXN1bHRzIGJhY2sgb24gdGhlIHNjaGVtYS5cbiAgbGV0IHsgZm9ybSwgZm9ybXMsIGNvbXBvbmVudHMgfSA9IHNjaGVtYVxuICBpZiAoZm9ybXMpIHtcbiAgICBmb3JtcyA9IHNjaGVtYS5mb3JtcyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKGZvcm1zLCByZXNvbHZlRm9ybSlcbiAgfSBlbHNlIGlmIChmb3JtKSB7XG4gICAgZm9ybSA9IHNjaGVtYS5mb3JtID0gYXdhaXQgcmVzb2x2ZUZvcm0oZm9ybSlcbiAgfSBlbHNlIGlmIChjb21wb25lbnRzKSB7XG4gICAgLy8gTk9URTogUHJvY2Vzc2luZyBmb3JtcyBpbiBjb21wdXRlZCBjb21wb25lbnRzIGlzIG5vdCBzdXBwb3J0ZWQsIHNpbmNlIGl0XG4gICAgLy8gb25seSBjYW4gYmUgY29tcHV0ZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhY3R1YWwgZGF0YS5cbiAgICBpZiAoaXNPYmplY3QoY29tcG9uZW50cykpIHtcbiAgICAgIGZvcm0gPSB7IGNvbXBvbmVudHMgfVxuICAgIH1cbiAgfVxuICBmb3JtcyB8fD0geyBkZWZhdWx0OiBmb3JtIH0gLy8gT25seSB1c2VkIGZvciBwcm9jZXNzIGxvb3AgYmVsb3cuXG4gIGNvbnN0IGNoaWxkcmVuID0gW11cbiAgZm9yIChjb25zdCBmb3JtIG9mIE9iamVjdC52YWx1ZXMoZm9ybXMpKSB7XG4gICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBmb3JtLCBjaGlsZHJlbiwgbGV2ZWwgKyAxKVxuICB9XG4gIHJldHVybiBjaGlsZHJlblxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUZvcm0oZm9ybSkge1xuICBmb3JtID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShmb3JtLCB0cnVlKVxuICBpZiAoZm9ybSkge1xuICAgIGF3YWl0IHJlc29sdmVQYW5lbHMoZm9ybSlcbiAgfVxuICByZXR1cm4gZm9ybVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTaW5nbGVDb21wb25lbnRWaWV3KHNjaGVtYSkge1xuICAvLyBJZiB0aGUgc2NoZW1hIGhhcyBhIHR5cGUsIGl0IGlzIGEgc2luZ2xlLWNvbXBvbmVudCB2aWV3LlxuICByZXR1cm4gISFzY2hlbWEudHlwZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzRm9ybVNjaGVtYShzY2hlbWEpIHtcbiAgLy8gU3VwcG9ydCBib3RoIHNpbmdsZSBmb3JtIGFuZCBtdWx0aXBsZSBmb3JtcyBub3RhdGlvbiwgYXMgd2VsbCBhcyBpbmxpbmVkXG4gIC8vIGNvbXBvbmVudHMuXG4gIHJldHVybiBpc09iamVjdChzY2hlbWEpICYmICEhKFxuICAgIHNjaGVtYS5mb3JtIHx8XG4gICAgc2NoZW1hLmZvcm1zIHx8XG4gICAgc2NoZW1hLmNvbXBvbmVudHNcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzTXVsdGlwbGVGb3JtU2NoZW1hcyhzY2hlbWEpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHNjaGVtYT8uZm9ybXMgfHwge30pLmxlbmd0aCA+IDFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgdmlldyB9ID0gc2NoZW1hXG4gIGNvbnN0IHZpZXdTY2hlbWEgPSB2aWV3ICYmIGNvbnRleHQudmlld3Nbdmlld11cbiAgcmV0dXJuIHZpZXdTY2hlbWFcbiAgICA/IGhhc0Zvcm1TY2hlbWEodmlld1NjaGVtYSlcbiAgICAgID8gdmlld1NjaGVtYVxuICAgICAgLy8gTk9URTogVmlld3MgY2FuIGhhdmUgdGFicywgaW4gd2hpY2ggY2FzZSB0aGUgdmlldyBjb21wb25lbnQgaXMgbmVzdGVkXG4gICAgICAvLyBpbiBvbmUgb2YgdGhlIHRhYnMsIGdvIGZpbmQgaXQuXG4gICAgICA6IGZvckVhY2hTY2hlbWEodmlld1NjaGVtYSwgc2NoZW1hID0+IHtcbiAgICAgICAgY29uc3Qgdmlld0NvbXBvbmVudCA9IHNjaGVtYS5jb21wb25lbnRzPy5bdmlld11cbiAgICAgICAgaWYgKGhhc0Zvcm1TY2hlbWEodmlld0NvbXBvbmVudCkpIHtcbiAgICAgICAgICByZXR1cm4gdmlld0NvbXBvbmVudFxuICAgICAgICB9XG4gICAgICB9KVxuICAgIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld0VkaXRQYXRoKHNjaGVtYSwgY29udGV4dCkge1xuICBjb25zdCB2aWV3ID0gZ2V0Vmlld1NjaGVtYShzY2hlbWEsIGNvbnRleHQpXG4gIHJldHVybiB2aWV3XG4gICAgPyB2aWV3LmxldmVsID09PSAwXG4gICAgICA/IGAvJHt2aWV3LnBhdGh9YCAvLyBBIHNpbmdsZS1jb21wb25lbnQgdmlld1xuICAgICAgOiBgLyR7dmlldy5wYXRofS8ke3ZpZXcucGF0aH1gIC8vIEEgbXVsdGktY29tcG9uZW50IHZpZXdcbiAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1TY2hlbWFzKHNjaGVtYSwgY29udGV4dCwgbW9kaWZ5Rm9ybSkge1xuICBjb25zdCB2aWV3ID0gZ2V0Vmlld1NjaGVtYShzY2hlbWEsIGNvbnRleHQpXG4gIGlmICh2aWV3KSB7XG4gICAgc2NoZW1hID0gdmlld1xuICB9IGVsc2UgaWYgKHNjaGVtYS52aWV3KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHZpZXc6ICcke3NjaGVtYS52aWV3fSdgKVxuICB9XG5cbiAgbGV0IHsgZm9ybSwgZm9ybXMsIGNvbXBvbmVudHMsIGNvbXBhY3QgfSA9IHNjaGVtYVxuICBpZiAoIWZvcm0gJiYgIWZvcm1zKSB7XG4gICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgIC8vIENvbnZlcnQgaW5saW5lZCBjb21wb25lbnRzIHRvIGZvcm1zLCBzdXBwb3J0aW5nIGBjb21wYWN0YCBzZXR0aW5nLlxuICAgICAgZm9ybSA9IHsgY29tcG9uZW50cywgY29tcGFjdCB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGBmb3Jtc2AsIGBmb3JtYCBvciBgY29tcG9uZW50c2AsIHJldHVybiBhbmQgZW1wdHkgYGZvcm1zYCBvYmplY3QuXG4gICAgICByZXR1cm4ge31cbiAgICB9XG4gIH1cbiAgZm9ybXMgfHw9IHsgZGVmYXVsdDogZm9ybSB9XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoZm9ybXMpLm1hcCgoW3R5cGUsIGZvcm1dKSA9PiB7XG4gICAgICAvLyBTdXBwb3J0IGBzY2hlbWEuY29tcG9uZW50c2AgY2FsbGJhY2tzIHRvIGNyZWF0ZSBjb21wb25lbnRzIG9uIHRoZSBmbHkuXG4gICAgICBpZiAoaXNGdW5jdGlvbihmb3JtLmNvbXBvbmVudHMpKSB7XG4gICAgICAgIGZvcm0gPSB7XG4gICAgICAgICAgLi4uZm9ybSxcbiAgICAgICAgICBjb21wb25lbnRzOiBmb3JtLmNvbXBvbmVudHMoY29udGV4dClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFt0eXBlLCBtb2RpZnlGb3JtPy4oZm9ybSkgPz8gZm9ybV1cbiAgICB9KVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3Jtcyhmb3JtcywgaXRlbSkge1xuICByZXR1cm4gZm9ybXNbaXRlbT8udHlwZV0gfHwgZm9ybXMuZGVmYXVsdCB8fCBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpIHtcbiAgcmV0dXJuIGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGdldEZvcm1TY2hlbWFzKHNjaGVtYSwgY29udGV4dCksIGl0ZW0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNMYWJlbChzY2hlbWEpIHtcbiAgcmV0dXJuIHNjaGVtYS5sYWJlbCAhPT0gZmFsc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tcGFjdChzY2hlbWEpIHtcbiAgcmV0dXJuICEhc2NoZW1hLmNvbXBhY3Rcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW5saW5lZChzY2hlbWEpIHtcbiAgcmV0dXJuICEhKHNjaGVtYS5pbmxpbmVkIHx8IHNjaGVtYS5jb21wb25lbnRzKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOZXN0ZWQoc2NoZW1hKSB7XG4gIHJldHVybiAhIShcbiAgICBzY2hlbWEubmVzdGVkIHx8XG4gICAgZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZGVmYXVsdE5lc3RlZCA9PT0gdHJ1ZVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRPbWl0UGFkZGluZyhzY2hlbWEpIHtcbiAgcmV0dXJuICEhZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8ub21pdFBhZGRpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRWYWx1ZShzY2hlbWEpIHtcbiAgLy8gU3VwcG9ydCBkZWZhdWx0IHZhbHVlcyBib3RoIG9uIHNjaGVtYSBhbmQgb24gY29tcG9uZW50IGxldmVsLlxuICAvLyBOT1RFOiBBdCB0aGUgdGltZSBvZiBjcmVhdGlvbiwgY29tcG9uZW50cyBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCwgKGUuZy4gaWZcbiAgLy8gZW50cmllcyBhcmUgY3JlYXRlZCB0aHJvdWdoIG5lc3RlZCBmb3JtcywgdGhlIHBhcmVudCBmb3JtIGlzbid0IG1vdW50ZWQpIHNvXG4gIC8vIHdlIGNhbid0IHVzZSBgZGF0YVBhdGhgIHRvIGdldCB0byBjb21wb25lbnRzLCBhbmQgdGhlIGBkZWZhdWx0VmFsdWVgIGZyb21cbiAgLy8gdGhlcmUuIFRoYXQncyB3aHkgYGRlZmF1bHRWYWx1ZWAgaXMgZGVmaW5lZCBzdGF0aWNhbGx5IGluIHRoZSBjb21wb25lbnRzOlxuICBjb25zdCBkZWZhdWx0VmFsdWUgPSBzY2hlbWEuZGVmYXVsdFxuICBjb25zdCB2YWx1ZSA9IGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgPyBkZWZhdWx0VmFsdWVcbiAgICA6IGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmRlZmF1bHRWYWx1ZVxuICByZXR1cm4gaXNGdW5jdGlvbih2YWx1ZSlcbiAgICA/IHZhbHVlKHNjaGVtYSlcbiAgICA6IGNsb25lKHZhbHVlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaWdub3JlTWlzc2luZ1ZhbHVlKHNjaGVtYSkge1xuICBjb25zdCB0eXBlT3B0aW9ucyA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSlcbiAgcmV0dXJuICEhKFxuICAgIHR5cGVPcHRpb25zPy5leGNsdWRlVmFsdWUgfHxcbiAgICB0eXBlT3B0aW9ucz8uaWdub3JlTWlzc2luZ1ZhbHVlPy4oc2NoZW1hKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNMYWJlbHMoc2NoZW1hKSB7XG4gIGNvbnN0IGNoZWNrQ29tcG9uZW50cyA9IGNvbXBvbmVudHMgPT5cbiAgICBPYmplY3QudmFsdWVzKGNvbXBvbmVudHMgfHwge30pLnNvbWUoaGFzTGFiZWwpXG5cbiAgcmV0dXJuIChcbiAgICBjaGVja0NvbXBvbmVudHMoc2NoZW1hLmNvbXBvbmVudHMpIHx8XG4gICAgT2JqZWN0LnZhbHVlcyhzY2hlbWEudGFicyB8fCB7fSkuc29tZShjaGVja0NvbXBvbmVudHMpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERlZmF1bHRzKHNjaGVtYSwgZGF0YSA9IHt9LCBjb21wb25lbnQpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHsgY29tcG9uZW50LCByb290RGF0YTogZGF0YSB9XG5cbiAgY29uc3QgcHJvY2Vzc0JlZm9yZSA9IChzY2hlbWEsIGRhdGEsIG5hbWUpID0+IHtcbiAgICBpZiAoIShuYW1lIGluIGRhdGEpICYmICFpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSkge1xuICAgICAgZGF0YVtuYW1lXSA9IGdldERlZmF1bHRWYWx1ZShzY2hlbWEpXG4gICAgfVxuICB9XG5cbiAgLy8gU2V0cyB1cCBhIGRhdGEgb2JqZWN0IHRoYXQgaGFzIGtleXMgd2l0aCBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsXG4gIC8vIGZvcm0gZmllbGRzLCBzbyB0aGV5IGNhbiBiZSBjb3JyZWN0bHkgd2F0Y2hlZCBmb3IgY2hhbmdlcy5cbiAgcmV0dXJuIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgIHNjaGVtYSwgZGF0YSwgbnVsbCwgbnVsbCwgcHJvY2Vzc0JlZm9yZSwgbnVsbCwgb3B0aW9uc1xuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlVmFsdWUoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwge1xuICBjb21wb25lbnQgPSBudWxsLFxuICByb290RGF0YSA9IGNvbXBvbmVudD8ucm9vdERhdGFcbn0gPSB7fSkge1xuICBjb25zdCB7IGNvbXB1dGUgfSA9IHNjaGVtYVxuICBpZiAoY29tcHV0ZSkge1xuICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZShEaXRvQ29udGV4dC5nZXQoY29tcG9uZW50LCB7XG4gICAgICAvLyBPdmVycmlkZSB2YWx1ZSB0byBwcmV2ZW50IGVuZGxlc3MgcmVjdXJzaW9uIHRocm91Z2ggY2FsbGluZyB0aGVcbiAgICAgIC8vIGdldHRlciBmb3IgYHRoaXMudmFsdWVgIGluIGBEaXRvQ29udGV4dGA6XG4gICAgICB2YWx1ZTogZGF0YVtuYW1lXSxcbiAgICAgIG5hbWUsXG4gICAgICBkYXRhLFxuICAgICAgZGF0YVBhdGgsXG4gICAgICByb290RGF0YVxuICAgIH0pKVxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBVc2UgYCRzZXQoKWAgZGlyZWN0bHkgaW5zdGVhZCBvZiBgdGhpcy52YWx1ZSA9IOKApmAgdG8gdXBkYXRlIHRoZVxuICAgICAgLy8gdmFsdWUgd2l0aG91dCBjYWxsaW5nIHBhcnNlKCk6XG4gICAgICBWdWUuc2V0KGRhdGEsIG5hbWUsIHZhbHVlKVxuICAgIH1cbiAgfVxuICAvLyBJZiB0aGUgdmFsdWUgaXMgc3RpbGwgbWlzc2luZyBhZnRlciBjb21wdXRlLCBzZXQgdGhlIGRlZmF1bHQgZm9yIGl0OlxuICBpZiAoIShuYW1lIGluIGRhdGEpICYmICFpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSkge1xuICAgIFZ1ZS5zZXQoZGF0YSwgbmFtZSwgZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSkpXG4gIH1cbiAgLy8gTm93IGFjY2VzcyB0aGUgdmFsdWUuIFRoaXMgaXMgaW1wb3J0YW50IGZvciByZWFjdGl2aXR5IGFuZCBuZWVkcyB0b1xuICAvLyBoYXBwZW4gYWZ0ZXIgYWxsIHByaW9yIG1hbmlwdWxhdGlvbiB0aHJvdWdoIGAkc2V0KClgLCBzZWUgYWJvdmU6XG4gIHJldHVybiBkYXRhW25hbWVdXG59XG5cbmZ1bmN0aW9uIGNsb25lSXRlbShzb3VyY2VTY2hlbWEsIGl0ZW0sIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMuc2NoZW1hT25seSkge1xuICAgIGNvbnN0IGNvcHkgPSB7fVxuICAgIGNvbnN0IHsgaWRLZXkgPSAnaWQnLCBvcmRlcktleSB9ID0gc291cmNlU2NoZW1hXG4gICAgY29uc3QgaWQgPSBpdGVtW2lkS2V5XVxuICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb3B5W2lkS2V5XSA9IGlkXG4gICAgfVxuICAgIC8vIENvcHkgb3ZlciB0eXBlIGluIGNhc2UgdGhlcmUgYXJlIG11bHRpcGxlIGZvcm1zIHRvIGNob29zZSBmcm9tLlxuICAgIGlmIChoYXNNdWx0aXBsZUZvcm1TY2hlbWFzKHNvdXJjZVNjaGVtYSkpIHtcbiAgICAgIGNvcHkudHlwZSA9IGl0ZW0udHlwZVxuICAgIH1cbiAgICBpZiAob3JkZXJLZXkpIHtcbiAgICAgIGNvcHlbb3JkZXJLZXldID0gaXRlbVtvcmRlcktleV1cbiAgICB9XG4gICAgcmV0dXJuIGNvcHlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geyAuLi5pdGVtIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0RhdGEoc2NoZW1hLCBzb3VyY2VTY2hlbWEsIGRhdGEsIGRhdGFQYXRoLCB7XG4gIGNvbXBvbmVudCxcbiAgc2NoZW1hT25seSwgLy8gd2hldGhlciB0byBvbmx5IGluY2x1ZGUgZGF0YSBjb3ZlcmVkIGJ5IHRoZSBzY2hlbWEsIG9yIGFsbCBkYXRhXG4gIHRhcmdldFxufSA9IHt9KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB7IGNvbXBvbmVudCwgc2NoZW1hT25seSwgdGFyZ2V0LCByb290RGF0YTogZGF0YSB9XG4gIGNvbnN0IHByb2Nlc3NlZERhdGEgPSBjbG9uZUl0ZW0oc291cmNlU2NoZW1hLCBkYXRhLCBvcHRpb25zKVxuICBjb25zdCBncmFwaCA9IG5ldyBTY2hlbWFHcmFwaCgpXG5cbiAgY29uc3QgcHJvY2Vzc0JlZm9yZSA9IChzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBwcm9jZXNzZWREYXRhKSA9PiB7XG4gICAgbGV0IHZhbHVlID0gY29tcHV0ZVZhbHVlKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIG9wdGlvbnMpXG4gICAgLy8gVGhlIHNjaGVtYSBleHBlY3RzIHRoZSBgd3JhcFByaW1pdGl2ZXNgIHRyYW5zZm9ybWF0aW9ucyB0byBiZSBwcmVzZW50IG9uXG4gICAgLy8gdGhlIGRhdGEgdGhhdCBpdCBpcyBhcHBsaWVkIG9uLCBzbyB3YXJwIGJlZm9yZSBhbmQgdW53cmFwIGFmdGVyLlxuICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcywgb3JkZXJLZXksIGlkS2V5ID0gJ2lkJyB9ID0gc2NoZW1hXG4gICAgICBpZiAod3JhcFByaW1pdGl2ZXMpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAoZW50cnkgPT4gKHtcbiAgICAgICAgICBbd3JhcFByaW1pdGl2ZXNdOiBlbnRyeVxuICAgICAgICB9KSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFsd2F5cyBzaGFsbG93LWNsb25lIGFycmF5IHZhbHVlczpcbiAgICAgICAgdmFsdWUgPSBbLi4udmFsdWVdXG4gICAgICB9XG4gICAgICBpZiAob3JkZXJLZXkgJiYgdGFyZ2V0ID09PSAnY2xpcGJvYXJkJykge1xuICAgICAgICAvLyBTb3J0IHRoZSBkYXRhIGJhY2sgaW50byB0aGUgbmF0dXJhbCBzZXF1ZW5jZSBhcyBkZWZpbmVkIGJ5IHRoZWlyIGlkcyxcbiAgICAgICAgLy8gc28gY29weS1wYXN0aW5nIGJldHdlZW4gc2VydmVycyAoZS5nLiBuZXN0ZWQgZm9udC1jdXRzIG9uIExpbmV0bylcbiAgICAgICAgLy8gbmF0dXJhbGx5IGdldHMgbWFwcGVkIHRvIHRoZSBzYW1lIGVudHJpZXMgaW4gdGhlIGdyYXBoLlxuICAgICAgICB2YWx1ZS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWQxID0gYT8uW2lkS2V5XVxuICAgICAgICAgIGNvbnN0IGlkMiA9IGI/LltpZEtleV1cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaWQxID09IG51bGwgfHwgaXNUZW1wb3JhcnlJZChpZDEpID8gMVxuICAgICAgICAgICAgOiBpZDIgPT0gbnVsbCB8fCBpc1RlbXBvcmFyeUlkKGlkMikgPyAtMVxuICAgICAgICAgICAgOiBpZDEgLSBpZDJcbiAgICAgICAgICApXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICB9XG5cbiAgY29uc3QgcHJvY2Vzc0FmdGVyID0gKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHByb2Nlc3NlZERhdGEpID0+IHtcbiAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzLCBleGNsdWRlLCBwcm9jZXNzIH0gPSBzY2hlbWFcbiAgICBsZXQgdmFsdWUgPSBwcm9jZXNzZWREYXRhW25hbWVdXG5cbiAgICBjb25zdCB0eXBlT3B0aW9ucyA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSlcblxuICAgIC8vIE5PVEU6IFdlIGRvbid0IGNhY2hlIHRoaXMgY29udGV4dCwgc2luY2UgYHZhbHVlYCBpcyBjaGFuZ2luZy5cbiAgICBjb25zdCBnZXRDb250ZXh0ID0gKCkgPT4gRGl0b0NvbnRleHQuZ2V0KGNvbXBvbmVudCwge1xuICAgICAgdmFsdWUsXG4gICAgICBuYW1lLFxuICAgICAgZGF0YSxcbiAgICAgIGRhdGFQYXRoLFxuICAgICAgcm9vdERhdGE6IG9wdGlvbnMucm9vdERhdGEsXG4gICAgICAvLyBQYXNzIHRoZSBhbHJlYWR5IHByb2Nlc3NlZCBkYXRhIHRvIGBwcm9jZXNzKClgLCBzbyBpdCBjYW4gYmUgbW9kaWZpZWRcbiAgICAgIC8vIHRocm91Z2ggYHByb2Nlc3NlZEl0ZW1gIGZyb20gdGhlcmUuXG4gICAgICBwcm9jZXNzZWREYXRhXG4gICAgfSlcblxuICAgIC8vIEZpcnN0IHVud3JhcCB0aGUgd3JhcHBlZCBwcmltaXRpdmVzIGFnYWluLCB0byBicmluZyB0aGUgZGF0YSBiYWNrIGludG9cbiAgICAvLyBpdHMgbmF0aXZlIGZvcm0uIFNlIGBwcm9jZXNzQmVmb3JlKClgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgaWYgKHdyYXBQcmltaXRpdmVzICYmIGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLm1hcChvYmplY3QgPT4gb2JqZWN0W3dyYXBQcmltaXRpdmVzXSlcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgdGhlIHVzZXIncyBgcHJvY2VzcygpYCBjYWxsYmFjayBmaXJzdCwgaWYgb25lIGlzIHByb3ZpZGVkLCBzbyB0aGF0XG4gICAgLy8gaXQgY2FuIG1vZGlmeSBkYXRhIGluIGBwcm9jZXNzZWREYXRhYCBldmVuIGlmIGl0IHByb3ZpZGVzIGBleGNsdWRlOiB0cnVlYFxuICAgIGlmIChwcm9jZXNzKSB7XG4gICAgICB2YWx1ZSA9IHByb2Nlc3MoZ2V0Q29udGV4dCgpKVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHR5cGVPcHRpb25zPy5leGNsdWRlVmFsdWUgfHxcbiAgICAgIC8vIFN1cHBvcnQgZnVuY3Rpb25zIG5leHQgdG8gYm9vbGVhbnMgZm9yIGBzY2hlbWEuZXhjbHVkZWA6XG4gICAgICBleGNsdWRlID09PSB0cnVlIHx8XG4gICAgICBpc0Z1bmN0aW9uKGV4Y2x1ZGUpICYmIGV4Y2x1ZGUoZ2V0Q29udGV4dCgpKVxuICAgICkge1xuICAgICAgZGVsZXRlIHByb2Nlc3NlZERhdGFbbmFtZV1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRWFjaCBjb21wb25lbnQgdHlwZSBjYW4gcHJvdmlkZSBpdHMgb3duIHN0YXRpYyBgcHJvY2Vzc1ZhbHVlKClgIG1ldGhvZFxuICAgICAgLy8gdG8gY29udmVydCB0aGUgZGF0YSBmb3Igc3RvcmFnZS5cbiAgICAgIGNvbnN0IHByb2Nlc3NWYWx1ZSA9IHR5cGVPcHRpb25zPy5wcm9jZXNzVmFsdWVcbiAgICAgIGlmIChwcm9jZXNzVmFsdWUpIHtcbiAgICAgICAgdmFsdWUgPSBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSwgZGF0YVBhdGgsIGdyYXBoKVxuICAgICAgfVxuICAgICAgcHJvY2Vzc2VkRGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgc2NoZW1hLFxuICAgIGRhdGEsXG4gICAgZGF0YVBhdGgsXG4gICAgcHJvY2Vzc2VkRGF0YSxcbiAgICBwcm9jZXNzQmVmb3JlLFxuICAgIHByb2Nlc3NBZnRlcixcbiAgICBvcHRpb25zXG4gIClcblxuICByZXR1cm4gZ3JhcGgucHJvY2Vzcyhzb3VyY2VTY2hlbWEsIHByb2Nlc3NlZERhdGEsIG9wdGlvbnMpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzU2NoZW1hRGF0YShcbiAgc2NoZW1hLFxuICBkYXRhLFxuICBkYXRhUGF0aCxcbiAgcHJvY2Vzc2VkRGF0YSxcbiAgcHJvY2Vzc0JlZm9yZSxcbiAgcHJvY2Vzc0FmdGVyLFxuICBvcHRpb25zXG4pIHtcbiAgY29uc3QgcHJvY2Vzc0NvbXBvbmVudHMgPSBjb21wb25lbnRzID0+IHtcbiAgICBjb25zdCBnZXREYXRhUGF0aCA9IChkYXRhUGF0aCwgdG9rZW4pID0+IGRhdGFQYXRoICE9IG51bGxcbiAgICAgID8gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHRva2VuKVxuICAgICAgOiBudWxsXG5cbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgZm9yIChjb25zdCBbbmFtZSwgY29tcG9uZW50U2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhjb21wb25lbnRzKSkge1xuICAgICAgICBpZiAoIWlzTmVzdGVkKGNvbXBvbmVudFNjaGVtYSkpIHtcbiAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIGRhdGEgb24gdW5uZXN0ZWQgY29tcG9uZW50cy5cbiAgICAgICAgICBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICAgIHByb2Nlc3NlZERhdGEsXG4gICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgcHJvY2Vzc0FmdGVyLFxuICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnREYXRhUGF0aCA9IGdldERhdGFQYXRoKGRhdGFQYXRoLCBuYW1lKVxuXG4gICAgICAgICAgY29uc3QgcHJvY2Vzc0l0ZW0gPSAoaXRlbSwgaW5kZXggPSBudWxsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhUGF0aCA9IGluZGV4ICE9PSBudWxsXG4gICAgICAgICAgICAgID8gZ2V0RGF0YVBhdGgoY29tcG9uZW50RGF0YVBhdGgsIGluZGV4KVxuICAgICAgICAgICAgICA6IGNvbXBvbmVudERhdGFQYXRoXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gRGl0b0NvbnRleHQuZ2V0KG9wdGlvbnMuY29tcG9uZW50LCB7XG4gICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgIHJvb3REYXRhOiBvcHRpb25zLnJvb3REYXRhXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgY29uc3QgZ2V0Rm9ybXMgPSAoXG4gICAgICAgICAgICAgIGdldFR5cGVPcHRpb25zKGNvbXBvbmVudFNjaGVtYSk/LmdldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZyB8fFxuICAgICAgICAgICAgICAgZ2V0Rm9ybVNjaGVtYXNcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IGZvcm1zID0gZ2V0Rm9ybXMoY29tcG9uZW50U2NoZW1hLCBjb250ZXh0KVxuICAgICAgICAgICAgY29uc3QgZm9ybSA9IGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGZvcm1zLCBpdGVtKVxuICAgICAgICAgICAgaWYgKGZvcm0pIHtcbiAgICAgICAgICAgICAgY29uc3QgcHJvY2Vzc2VkSXRlbSA9IHByb2Nlc3NlZERhdGFcbiAgICAgICAgICAgICAgICA/IGNsb25lSXRlbShjb21wb25lbnRTY2hlbWEsIGl0ZW0sIG9wdGlvbnMpXG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICAgICAgICAgICAgICBmb3JtLFxuICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkSXRlbSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NBZnRlcixcbiAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEl0ZW1zIHdpdGhvdXQgZm9ybXMgc3RpbGwgZ2V0IGZ1bGx5IChidXQgc2hhbGxvd2x5KSBjbG9uZWQuXG4gICAgICAgICAgICAgIC8vIFRPRE86IEZpbmQgb3V0IG9mIHRoaXMgaXMgYWN0dWFsbHkgbmVlZGVkIC8gdXNlZCBhdCBhbGw/XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLml0ZW0gfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHByb2Nlc3NCZWZvcmU/LihcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSwgZGF0YSwgbmFtZSwgY29tcG9uZW50RGF0YVBhdGgsIHByb2Nlc3NlZERhdGFcbiAgICAgICAgICApXG4gICAgICAgICAgbGV0IHZhbHVlID0gcHJvY2Vzc2VkRGF0YSA/IHByb2Nlc3NlZERhdGFbbmFtZV0gOiBkYXRhW25hbWVdXG4gICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgaGFzRm9ybVNjaGVtYShjb21wb25lbnRTY2hlbWEpKSB7XG4gICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIGRhdGEgb24gbmVzdGVkIGZvcm0gaXRlbXMuXG4gICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgLy8gT3B0aW1pemF0aW9uOiBObyBuZWVkIHRvIGNvbGxlY3QgdmFsdWVzIGlmIHdlJ3JlIG5vdCBjbG9uaW5nIVxuICAgICAgICAgICAgICB2YWx1ZSA9IHByb2Nlc3NlZERhdGFcbiAgICAgICAgICAgICAgICA/IHZhbHVlLm1hcChwcm9jZXNzSXRlbSlcbiAgICAgICAgICAgICAgICA6IHZhbHVlLmZvckVhY2gocHJvY2Vzc0l0ZW0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YWx1ZSA9IHByb2Nlc3NJdGVtKHZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb2Nlc3NlZERhdGEpIHtcbiAgICAgICAgICAgICAgcHJvY2Vzc2VkRGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHByb2Nlc3NBZnRlcj8uKFxuICAgICAgICAgICAgY29tcG9uZW50U2NoZW1hLCBkYXRhLCBuYW1lLCBjb21wb25lbnREYXRhUGF0aCwgcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NDb21wb25lbnRzKHNjaGVtYS5jb21wb25lbnRzKVxuICBpZiAoc2NoZW1hLnRhYnMpIHtcbiAgICBmb3IgKGNvbnN0IHRhYiBvZiBPYmplY3QudmFsdWVzKHNjaGVtYS50YWJzKSkge1xuICAgICAgcHJvY2Vzc0NvbXBvbmVudHModGFiLmNvbXBvbmVudHMpXG4gICAgfVxuICB9XG4gIGZvciAoY29uc3QgcGFuZWwgb2YgZ2V0QWxsUGFuZWxTY2hlbWFzKHNjaGVtYSwgZGF0YVBhdGgpKSB7XG4gICAgcHJvY2Vzc0NvbXBvbmVudHMocGFuZWwuc2NoZW1hLmNvbXBvbmVudHMpXG4gIH1cblxuICByZXR1cm4gcHJvY2Vzc2VkRGF0YSB8fCBkYXRhXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROYW1lZFNjaGVtYXMoZGVzY3JpcHRpb25zLCBkZWZhdWx0cykge1xuICBjb25zdCB0b09iamVjdCA9IChhcnJheSwgdG9TY2hlbWEpID0+IHtcbiAgICByZXR1cm4gYXJyYXkubGVuZ3RoID4gMFxuICAgICAgPyBhcnJheS5yZWR1Y2UoKG9iamVjdCwgdmFsdWUpID0+IHtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gdG9TY2hlbWEodmFsdWUpXG4gICAgICAgIGlmIChzY2hlbWEpIHtcbiAgICAgICAgICBvYmplY3Rbc2NoZW1hLm5hbWVdID0gc2NoZW1hICYmIGRlZmF1bHRzXG4gICAgICAgICAgICA/IHsgLi4uZGVmYXVsdHMsIC4uLnNjaGVtYSB9XG4gICAgICAgICAgICA6IHNjaGVtYVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmplY3RcbiAgICAgIH0sIHt9KVxuICAgICAgOiBudWxsXG4gIH1cblxuICByZXR1cm4gaXNBcnJheShkZXNjcmlwdGlvbnMpXG4gICAgPyB0b09iamVjdChkZXNjcmlwdGlvbnMsIHZhbHVlID0+IChcbiAgICAgIGlzT2JqZWN0KHZhbHVlKSA/IHZhbHVlIDoge1xuICAgICAgICBuYW1lOiBjYW1lbGl6ZSh2YWx1ZSwgZmFsc2UpXG4gICAgICB9XG4gICAgKSlcbiAgICA6IGlzT2JqZWN0KGRlc2NyaXB0aW9ucylcbiAgICAgID8gdG9PYmplY3QoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGRlc2NyaXB0aW9ucyksXG4gICAgICAgIChbbmFtZSwgdmFsdWVdKSA9PlxuICAgICAgICAgIGlzT2JqZWN0KHZhbHVlKSA/IHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAuLi52YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICA6IGlzU3RyaW5nKHZhbHVlKSA/IHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBsYWJlbDogdmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgICAgOiBudWxsXG4gICAgICApXG4gICAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1dHRvblNjaGVtYXMoYnV0dG9ucykge1xuICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKFxuICAgIGJ1dHRvbnMsXG4gICAgeyB0eXBlOiAnYnV0dG9uJyB9IC8vIERlZmF1bHRzXG4gIClcbn1cblxuZnVuY3Rpb24gZ2V0VHlwZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHNjaGVtYU9yVHlwZSkgPyBzY2hlbWFPclR5cGUudHlwZSA6IHNjaGVtYU9yVHlwZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBnZXRUeXBlQ29tcG9uZW50KGdldFR5cGUoc2NoZW1hT3JUeXBlKSwgdHJ1ZSk/Lm9wdGlvbnMgPz8gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFR5cGVPcHRpb25zKHNjaGVtYU9yVHlwZSk/LmdldFNvdXJjZVR5cGU/LihcbiAgICBnZXRUeXBlKHNjaGVtYU9yVHlwZSlcbiAgKSA/PyBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYW5lbFNjaGVtYShzY2hlbWEsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQpIHtcbiAgcmV0dXJuIHNjaGVtYVxuICAgID8ge1xuICAgICAgc2NoZW1hLFxuICAgICAgLy8gSWYgdGhlIHBhbmVsIHByb3ZpZGVzIGl0cyBvd24gbmFtZSwgYXBwZW5kIGl0IHRvIHRoZSBkYXRhUGF0aC5cbiAgICAgIC8vIFRoaXMgaXMgdXNlZCBlLmcuIGZvciAkZmlsdGVycyBwYW5lbHMuXG4gICAgICBkYXRhUGF0aDogc2NoZW1hLm5hbWVcbiAgICAgICAgPyBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgc2NoZW1hLm5hbWUpXG4gICAgICAgIDogZGF0YVBhdGgsXG4gICAgICB0YWJDb21wb25lbnRcbiAgICB9XG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYW5lbFNjaGVtYXMoc2NoZW1hcywgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCwgcGFuZWxzID0gW10pIHtcbiAgaWYgKHNjaGVtYXMpIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hcykpIHtcbiAgICAgIGNvbnN0IHBhbmVsID0gZ2V0UGFuZWxTY2hlbWEoXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIGtleSksXG4gICAgICAgIHRhYkNvbXBvbmVudFxuICAgICAgKVxuICAgICAgaWYgKHBhbmVsKSB7XG4gICAgICAgIHBhbmVscy5wdXNoKHBhbmVsKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcGFuZWxzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGxQYW5lbFNjaGVtYXMoXG4gIHNjaGVtYSxcbiAgZGF0YVBhdGgsXG4gIHNjaGVtYUNvbXBvbmVudCA9IG51bGwsXG4gIHRhYkNvbXBvbmVudCA9IG51bGxcbikge1xuICBjb25zdCBwYW5lbCA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmdldFBhbmVsU2NoZW1hPy4oXG4gICAgc2NoZW1hLFxuICAgIGRhdGFQYXRoLFxuICAgIHNjaGVtYUNvbXBvbmVudFxuICApXG4gIGNvbnN0IHBhbmVscyA9IHBhbmVsID8gW2dldFBhbmVsU2NoZW1hKHBhbmVsLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50KV0gOiBbXVxuICAvLyBBbGxvdyBlYWNoIGNvbXBvbmVudCB0byBwcm92aWRlIGl0cyBvd24gc2V0IG9mIHBhbmVscywgaW5cbiAgLy8gYWRkaXRpb24gdG8gdGhlIGRlZmF1bHQgb25lIChlLmcuICRmaWx0ZXIpOlxuICBnZXRQYW5lbFNjaGVtYXMoc2NoZW1hLnBhbmVscywgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCwgcGFuZWxzKVxuICByZXR1cm4gcGFuZWxzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdFNvdXJjZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSA9PT0gJ29iamVjdCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGlzdFNvdXJjZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSA9PT0gJ2xpc3QnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKSB7XG4gIGNvbnN0IGlkID0gaXRlbVtzb3VyY2VTY2hlbWEuaWRLZXkgfHwgJ2lkJ11cbiAgcmV0dXJuIGlkICE9IG51bGwgPyBTdHJpbmcoaWQpIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtVWlkKHNvdXJjZVNjaGVtYSwgaXRlbSkge1xuICAvLyBUcnkgdG8gdXNlIHRoZSBpdGVtIGlkIGFzIHRoZSB1aWQsIGZhbGxpbmcgYmFjayBvbiBhdXRvLWdlbmVyYXRlZCBpZHMsIGJ1dFxuICAvLyBlaXRoZXIgd2F5LCBwYXNzIHRocm91Z2ggYGdldFVpZCgpYCBzbyB0aGF0IHRoZSBpZHMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGVcbiAgLy8gaXRlbSB0aHJvdWdoIGEgd2VhayBtYXAsIGFzIHRoZSBpZHMgY2FuIGJlIGZpbHRlcmVkIG91dCBpbiBgcHJvY2Vzc0RhdGEoKWBcbiAgLy8gd2hpbGUgdGhlIGNvbXBvbmVudHMgdGhhdCB1c2UgdGhlIHVpZHMgYXMga2V5IGFyZSBzdGlsbCB2aXNpYmxlLlxuICByZXR1cm4gZ2V0VWlkKGl0ZW0sIGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pKVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFZhbGlkYXRpb25NaXhpbiBmcm9tICcuL1ZhbGlkYXRpb25NaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBjb21wdXRlVmFsdWUgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRJdGVtLCBnZXRQYXJlbnRJdGVtIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzU3RyaW5nLCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbVmFsaWRhdGlvbk1peGluXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gTk9URTogV2hpbGUgYGRhdGFQYXRoYCBwb2ludHMgdG8gdGhlIGFjdHVhbCBgdmFsdWVgLCBgZGF0YWAgcmVwcmVzZW50c1xuICAgIC8vIHRoZSBgaXRlbWAgaW4gd2hpY2ggdGhlIGB2YWx1ZWAgaXMgY29udGFpbmVkLCB1bmRlciB0aGUga2V5IGBuYW1lYC5cbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcnNlZFZhbHVlOiBudWxsLFxuICAgICAgZm9jdXNlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLm5hbWVcbiAgICB9LFxuXG4gICAgdHlwZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS50eXBlXG4gICAgfSxcblxuICAgIGNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVUeXBlQ29tcG9uZW50KHRoaXMuc2NoZW1hLmNvbXBvbmVudClcbiAgICB9LFxuXG4gICAgY29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBuZXN0ZWQ6IHRoaXMubmVzdGVkIH0pXG4gICAgfSxcblxuICAgIHZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZVZhbHVlKFxuICAgICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICAgIHRoaXMuZGF0YSxcbiAgICAgICAgICB0aGlzLm5hbWUsXG4gICAgICAgICAgdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICB7IGNvbXBvbmVudDogdGhpcyB9XG4gICAgICAgIClcbiAgICAgICAgY29uc3QgeyBmb3JtYXQgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIC8vIGBzY2hlbWEuZm9ybWF0YCBpcyBvbmx5IGV2ZXIgY2FsbGVkIGluIHRoZSBsaWZlLWN5Y2xlXG4gICAgICAgIC8vIG9mIHRoZSBjb21wb25lbnQgYW5kIHRodXMgaXQncyBvayB0byBiaW5kIGl0IHRvIGB0aGlzYFxuICAgICAgICByZXR1cm4gZm9ybWF0XG4gICAgICAgICAgPyBmb3JtYXQuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyB2YWx1ZSB9KSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgeyBwYXJzZSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgLy8gYHNjaGVtYS5wYXJzZWAgaXMgb25seSBldmVyIGNhbGxlZCBpbiB0aGUgbGlmZS1jeWNsZVxuICAgICAgICAvLyBvZiB0aGUgY29tcG9uZW50IGFuZCB0aHVzIGl0J3Mgb2sgdG8gYmluZCBpdCB0byBgdGhpc2BcbiAgICAgICAgdGhpcy5wYXJzZWRWYWx1ZSA9IHBhcnNlXG4gICAgICAgICAgPyBwYXJzZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IHZhbHVlIH0pKVxuICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgdGhpcy4kc2V0KHRoaXMuZGF0YSwgdGhpcy5uYW1lLCB0aGlzLnBhcnNlZFZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIHNpbWlsYXIgdG8gYERpdG9Db250ZXh0YFxuICAgIC8vIHByb3BlcnRpZXMsIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGVzZSBvbiBgdGhpc2AgYXMgd2VsbDpcbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIGdldEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gICAgfSxcblxuICAgIHBhcmVudEl0ZW0oKSB7XG4gICAgICByZXR1cm4gZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgICB9LFxuXG4gICAgcm9vdEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290RGF0YVxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWRJdGVtKCkge1xuICAgICAgLy8gV2UgY2FuIG9ubHkgZ2V0IHRoZSBwcm9jZXNzZWQgaXRlbXMgdGhyb3VnaCB0aGUgc2NoZW1hQ29tcG9uZW50LCBidXRcbiAgICAgIC8vIHRoYXQncyBub3QgbmVjZXNzYXJpbHkgdGhlIGl0ZW0gcmVwcmVzZW50ZWQgYnkgdGhpcyBjb21wb25lbnQuXG4gICAgICAvLyBTb2x1dGlvbjogRmluZCB0aGUgcmVsYXRpdmUgcGF0aCBhbmQgdGhlIHByb2Nlc3NlZCBzdWItaXRlbSBmcm9tIHRoZXJlOlxuICAgICAgY29uc3QgeyBzY2hlbWFDb21wb25lbnQgfSA9IHRoaXNcbiAgICAgIHJldHVybiBnZXRJdGVtKFxuICAgICAgICBzY2hlbWFDb21wb25lbnQucHJvY2Vzc2VkSXRlbSxcbiAgICAgICAgLy8gR2V0IHRoZSBkYXRhUGF0aCByZWxhdGl2ZSB0byB0aGUgc2NoZW1hQ29tcG9uZW50J3MgZGF0YTpcbiAgICAgICAgdGhpcy5kYXRhUGF0aC5zbGljZShzY2hlbWFDb21wb25lbnQuZGF0YVBhdGgubGVuZ3RoKSxcbiAgICAgICAgdGhpcy5uZXN0ZWRcbiAgICAgIClcbiAgICB9LFxuXG4gICAgbGFiZWw6IGdldFNjaGVtYUFjY2Vzc29yKCdsYWJlbCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEJvb2xlYW5dLFxuICAgICAgZ2V0KGxhYmVsKSB7XG4gICAgICAgIHJldHVybiBpc1N0cmluZyhsYWJlbClcbiAgICAgICAgICA/IGxhYmVsXG4gICAgICAgICAgOiBsYWJlbCAhPT0gZmFsc2UgJiYgdGhpcy4kb3B0aW9ucy5nZW5lcmF0ZUxhYmVsXG4gICAgICAgICAgICA/IHRoaXMuZ2V0TGFiZWwodGhpcy5zY2hlbWEpXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHdpZHRoOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdXG4gICAgfSksXG5cbiAgICB2aXNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndmlzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlT3B0aW9ucy5kZWZhdWx0VmlzaWJsZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBleGNsdWRlZGAgZm9yIGNvbnNpc3RlbnQgbmFtaW5nXG4gICAgZXhjbHVkZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2V4Y2x1ZGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHJlcXVpcmVkOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVxdWlyZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IE1vdmUgdGhlc2UgdG8gYSBzdWItY2xhc3MgY29tcG9uZW50IHVzZWQgZm9yIGFsbCBpbnB1dCBjb21wb25lbnRzP1xuICAgIHJlYWRvbmx5OiBnZXRTY2hlbWFBY2Nlc3NvcigncmVhZG9ubHknLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGF1dG9mb2N1czogZ2V0U2NoZW1hQWNjZXNzb3IoJ2F1dG9mb2N1cycsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgLy8gVG8gYmUgdXNlZCBmb3Igc2VsZWN0cyBhbmQgaW5wdXRzIG9ubHk/XG4gICAgY2xlYXJhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY2xlYXJhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBwbGFjZWhvbGRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3BsYWNlaG9sZGVyJywge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfSksXG5cbiAgICBhdXRvY29tcGxldGU6IGdldFNjaGVtYUFjY2Vzc29yKCdhdXRvY29tcGxldGUnLCB7XG4gICAgICB0eXBlOiBTdHJpbmdcbiAgICB9KSxcblxuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7IG5hdGl2ZUZpZWxkLCB0ZXh0RmllbGQgfSA9IHRoaXMuJG9wdGlvbnNcblxuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRcbiAgICAgIH1cblxuICAgICAgaWYgKG5hdGl2ZUZpZWxkKSB7XG4gICAgICAgIGF0dHJpYnV0ZXMubmFtZSA9IHRoaXMubmFtZVxuICAgICAgICBpZiAodGhpcy5sYWJlbCkge1xuICAgICAgICAgIGF0dHJpYnV0ZXMudGl0bGUgPSB0aGlzLmxhYmVsXG4gICAgICAgIH1cbiAgICAgICAgYXR0cmlidXRlcy5yZWFkb25seSA9IHRoaXMucmVhZG9ubHlcbiAgICAgICAgYXR0cmlidXRlcy5hdXRvZm9jdXMgPSB0aGlzLmF1dG9mb2N1c1xuICAgICAgICBpZiAodGV4dEZpZWxkKSB7XG4gICAgICAgICAgYXR0cmlidXRlcy5wbGFjZWhvbGRlciA9IHRoaXMucGxhY2Vob2xkZXJcbiAgICAgICAgICBhdHRyaWJ1dGVzLmF1dG9jb21wbGV0ZSA9IHRoaXMuYXV0b2NvbXBsZXRlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzXG4gICAgfSxcblxuICAgIGxpc3RlbmVycygpIHtcbiAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuZ2V0TGlzdGVuZXJzKClcbiAgICAgIGNvbnN0IHsgZXZlbnRzID0ge30gfSA9IHRoaXMuc2NoZW1hXG4gICAgICBpZiAoZXZlbnRzKSB7XG4gICAgICAgIC8vIFJlZ2lzdGVyIGNhbGxiYWNrcyBmb3IgYWxsIHByb3ZpZGVzIG5vbi1yZWNvZ25pemVkIGV2ZW50cyxcbiAgICAgICAgLy8gYXNzdW1pbmcgdGhleSBhcmUgbmF0aXZlIGV2ZW50cy5cbiAgICAgICAgZm9yIChjb25zdCBldmVudCBvZiBPYmplY3Qua2V5cyhldmVudHMpKSB7XG4gICAgICAgICAgbGlzdGVuZXJzW2V2ZW50XSB8fD0gKCkgPT4gdGhpcy5lbWl0RXZlbnQoZXZlbnQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0ZW5lcnNcbiAgICB9LFxuXG4gICAgdmFsaWRhdGlvbnMoKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9ucyA9IHsgLi4udGhpcy5nZXRWYWxpZGF0aW9ucygpIH1cbiAgICAgIGlmICh0aGlzLnJlcXVpcmVkKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLnJlcXVpcmVkID0gdHJ1ZVxuICAgICAgfVxuICAgICAgLy8gQWxsb3cgc2NoZW1hIHRvIG92ZXJyaWRlIGRlZmF1bHQgcnVsZXMgYW5kIGFkZCBhbnkgbmV3IG9uZXM6XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5ydWxlcyB8fCB7fSkpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkZWxldGUgdmFsaWRhdGlvbnNba2V5XVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRpb25zW2tleV0gPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsaWRhdGlvbnNcbiAgICB9LFxuXG4gICAgcHJvdmlkZXNEYXRhKCkge1xuICAgICAgLy8gTk9URTogVGhpcyBpcyBvdmVycmlkZGVuIGluIFJlc291cmNlTWl4aW4sIHVzZWQgYnkgbGlzdHMuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgc2hvd0NsZWFyQnV0dG9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xlYXJhYmxlICYmIHRoaXMudmFsdWUgIT0gbnVsbFxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgdGhpcy5zZXR1cFNjaGVtYUZpZWxkcygpXG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gUHJldmVudCB1bm5lc3RlZCB0eXBlIGNvbXBvbmVudHMgZnJvbSBvdmVycmlkaW5nIHBhcmVudCBkYXRhIHBhdGhzXG4gICAgICBpZiAodGhpcy5uZXN0ZWQpIHtcbiAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyQ29tcG9uZW50KHRoaXMsIGFkZClcbiAgICAgICAgLy8gSW5zdGFsbCAvIHJlbW92ZSB0aGUgZmllbGQgZXZlbnRzIHRvIHdhdGNoIG9mIGNoYW5nZXMgYW5kIGhhbmRsZVxuICAgICAgICAvLyB2YWxpZGF0aW9uIGZsYWdzLiBgZXZlbnRzYCBpcyBwcm92aWRlZCBieSBgVmFsaWRhdGlvbk1peGluLmV2ZW50cygpYFxuICAgICAgICB0aGlzW2FkZCA/ICdvbicgOiAnb2ZmJ10odGhpcy5ldmVudHMpXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGdldExpc3RlbmVycygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvY3VzOiB0aGlzLm9uRm9jdXMsXG4gICAgICAgIGJsdXI6IHRoaXMub25CbHVyLFxuICAgICAgICBpbnB1dDogdGhpcy5vbklucHV0LFxuICAgICAgICBjaGFuZ2U6IHRoaXMub25DaGFuZ2VcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICBjb25zdCBbZWxlbWVudF0gPSBhc0FycmF5KHRoaXMuJHJlZnMuZWxlbWVudClcbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICBlbGVtZW50LmZvY3VzKClcbiAgICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBkaXNhYmxlZCwgYGZvY3VzKClgIHdpbGwgbGlrZWx5IG5vdCBoYXZlIHRoZVxuICAgICAgICAgIC8vIGRlc2lyZWQgZWZmZWN0LiBVc2UgYHNjcm9sbEludG9WaWV3KClgIGlmIGF2YWlsYWJsZTpcbiAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgKGVsZW1lbnQuJGVsIHx8IGVsZW1lbnQpLnNjcm9sbEludG9WaWV3Py4oKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICAvLyBBbHNvIGZvY3VzIHRoaXMgY29tcG9uZW50J3Mgc2NoZW1hIGFuZCBwYW5lbCBpbiBjYXNlIGl0J3MgYSB0YWIuXG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5mb2N1cygpXG4gICAgICB0aGlzLnRhYkNvbXBvbmVudD8uZm9jdXMoKVxuICAgICAgdGhpcy5mb2N1c0VsZW1lbnQoKVxuICAgIH0sXG5cbiAgICBjbGVhcigpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICB9LFxuXG4gICAgb25Gb2N1cygpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IHRydWVcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdmb2N1cycpXG4gICAgfSxcblxuICAgIG9uQmx1cigpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlXG4gICAgICB0aGlzLmVtaXRFdmVudCgnYmx1cicpXG4gICAgfSxcblxuICAgIG9uSW5wdXQoKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnaW5wdXQnKVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdjaGFuZ2UnLCB7XG4gICAgICAgIGNvbnRleHQ6IHRoaXMucGFyc2VkVmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8geyB2YWx1ZTogdGhpcy5wYXJzZWRWYWx1ZSB9XG4gICAgICAgICAgOiBudWxsLFxuICAgICAgICAvLyBQYXNzIGBzY2hlbWFDb21wb25lbnRgIGFzIHBhcmVudCwgc28gY2hhbmdlIGV2ZW50cyBjYW4gcHJvcGFnYXRlIHVwLlxuICAgICAgICBwYXJlbnQ6IHRoaXMuc2NoZW1hQ29tcG9uZW50XG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc1Byb21pc2UgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9NaXhpbiBmcm9tICcuL21peGlucy9EaXRvTWl4aW4uanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCB7IGdldFR5cGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL3NjaGVtYS5qcydcblxuY29uc3QgY29tcG9uZW50cyA9IHt9XG5cbmNvbnN0IERpdG9Db21wb25lbnQgPSBWdWUuZXh0ZW5kKHtcbiAgLy8gTWFrZSBzdXJlIHRoYXQgcmVnaXN0ZXJlZCBjb21wb25lbnRzIGFyZSBwcmVzZW50IGluIGFsbCBEaXRvQ29tcG9uZW50LlxuICBjb21wb25lbnRzLFxuICBtaXhpbnM6IFtEaXRvTWl4aW5dLFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRUeXBlQ29tcG9uZW50LFxuXG4gICAgcmVzb2x2ZUNvbXBvbmVudChjb21wb25lbnQsIG1peGlucyA9IFtdKSB7XG4gICAgICAvLyBBIGhlbHBlciBtZXRob2QgdG8gYWxsb3cgdGhyZWUgdGhpbmdzOlxuICAgICAgLy8gLSBXaGVuIHVzZWQgaW4gYSBjb21wdXRlZCBwcm9wZXJ0eSwgaXQgcmVtb3ZlcyB0aGUgbmVlZCB0byBoYXZlIHRvXG4gICAgICAvLyAgIGxvYWQgY29tcG9uZW50cyB3aXRoIGFzeW5jIGZ1bmN0aW9ucyBgY29tcG9uZW50OiAoKSA9PiBpbXBvcnQoLi4uKWAuXG4gICAgICAvLyAgIGluc3RlYWQsIHRoZXkgY2FuIGJlIGRpcmVjdGx5IHByb3ZpZGVkOiBgY29tcG9uZW50OiBpbXBvcnQoLi4uKWBcbiAgICAgIC8vIC0gVGhlIHByb3BlcnRpZXMgcGFzc2VkIHRvIHN1Y2ggY29tcG9uZW50cyBkb24ndCBuZWVkIHRvIGJlIGRlZmluZWQuXG4gICAgICAvLyAgIEluc3RlYWQsIHRoZSBwcm92aWRlZCBtaXhpbnMgYXJlIGF1dG9tYXRpY2FsbHkgaW5oZXJpdGVkLlxuICAgICAgLy8gLSBUaGUgY29tcG9uZW50IGNhbiB1c2UgYWxsIGludGVybmFsIGNvbXBvbmVudHMga25vd24gdG8gRGl0by5qcyBBZG1pbi5cbiAgICAgIHJldHVybiBjb21wb25lbnRcbiAgICAgICAgPyBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgLy8gQXQgZmlyc3QsIHJlc29sdmUgY29tcG9uZW50IGlzIGl0IGlzIGxvYWRlZCBhc3luY2hyb25vdXNseS5cbiAgICAgICAgICBsZXQgY29tcCA9IGlzRnVuY3Rpb24oY29tcG9uZW50KSA/IGF3YWl0IGNvbXBvbmVudCgpXG4gICAgICAgICAgICA6IGlzUHJvbWlzZShjb21wb25lbnQpID8gYXdhaXQgY29tcG9uZW50XG4gICAgICAgICAgICA6IGNvbXBvbmVudFxuICAgICAgICAgIGNvbXAgPSBjb21wPy5kZWZhdWx0IHx8IGNvbXBcbiAgICAgICAgICBjb21wLm1peGlucyA9IG1peGluc1xuICAgICAgICAgIGNvbXAuY29tcG9uZW50cyA9IGNvbXBvbmVudHNcbiAgICAgICAgICByZXR1cm4gY29tcFxuICAgICAgICB9XG4gICAgICAgIDogY29tcG9uZW50XG4gICAgfSxcblxuICAgIHJlc29sdmVEaXRvQ29tcG9uZW50KGNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZUNvbXBvbmVudChjb21wb25lbnQsIFtEaXRvTWl4aW5dKVxuICAgIH0sXG5cbiAgICByZXNvbHZlVHlwZUNvbXBvbmVudChjb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVDb21wb25lbnQoY29tcG9uZW50LCBbRGl0b01peGluLCBUeXBlTWl4aW5dKVxuICAgIH1cbiAgfVxufSlcblxuRGl0b0NvbXBvbmVudC5jb21wb25lbnQgPSBmdW5jdGlvbihuYW1lLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHtcbiAgICAgIG5hbWUsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfVxuICAgIGNvbnN0IGN0b3IgPSB0aGlzLmV4dGVuZChvcHRpb25zKVxuICAgIGNvbXBvbmVudHNbbmFtZV0gPSBjdG9yXG4gICAgcmV0dXJuIGN0b3JcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY29tcG9uZW50c1tuYW1lXSB8fCBWdWUuY29tcG9uZW50KG5hbWUpXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudFxuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b1VzZXIge1xuICBoYXNSb2xlKC4uLnJvbGVzKSB7XG4gICAgaWYgKHRoaXMucm9sZXMpIHtcbiAgICAgIGZvciAoY29uc3Qgcm9sZSBvZiByb2xlcykge1xuICAgICAgICBpZiAodGhpcy5yb2xlcy5pbmNsdWRlcyhyb2xlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzY2hlbWFQYXJlbnRDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2NoZW1hQ29tcG9uZW50czogW11cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBtYWluU2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50c1swXVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IGBEaXRvU2NoZW1hLmNyZWF0ZWQoKS9kZXN0cm95ZWQoKWAgb24gaXRzXG4gICAgLy8gJHBhcmVudCwgaWYgdGhlIHBhcmVudCB1c2VzIHRoZSBgU2NoZW1hUGFyZW50TWl4aW5gOlxuICAgIF9yZWdpc3RlclNjaGVtYUNvbXBvbmVudChzY2hlbWFDb21wb25lbnQsIGFkZCkge1xuICAgICAgY29uc3QgeyBzY2hlbWFDb21wb25lbnRzIH0gPSB0aGlzXG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudHMucHVzaChzY2hlbWFDb21wb25lbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzY2hlbWFDb21wb25lbnRzLnNwbGljZShzY2hlbWFDb21wb25lbnRzLmluZGV4T2Yoc2NoZW1hQ29tcG9uZW50KSwgMSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBTY2hlbWFQYXJlbnRNaXhpbiBmcm9tICcuL1NjaGVtYVBhcmVudE1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtTY2hlbWFQYXJlbnRNaXhpbl0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBlcnJvcnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnJlZHVjZShcbiAgICAgICAgKHJlc3VsdCwgeyBlcnJvcnMgfSkgPT5cbiAgICAgICAgICBlcnJvcnMgJiYgcmVzdWx0ID8gcmVzdWx0LmNvbmNhdChlcnJvcnMpIDogZXJyb3JzLFxuICAgICAgICBudWxsXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzVG91Y2hlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuc29tZShpdCA9PiBpdC5pc1RvdWNoZWQpXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnNvbWUoaXQgPT4gaXQuaXNEaXJ0eSlcbiAgICB9LFxuXG4gICAgaXNWYWxpZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICB2YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC52YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5KSlcbiAgICB9LFxuXG4gICAgdmVyaWZ5QWxsKG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LnZlcmlmeUFsbChtYXRjaCkpXG4gICAgfSxcblxuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKGl0ID0+IGl0LnJlc2V0VmFsaWRhdGlvbigpKVxuICAgIH0sXG5cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKGl0ID0+IGl0LmNsZWFyRXJyb3JzKCkpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKFxuICAgICAgICBpdCA9PiBpdC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKVxuICAgICAgKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFZhbGlkYXRvck1peGluIGZyb20gJy4uL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcydcbmltcG9ydCB7IGdldENvbW1vblByZWZpeCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1ZhbGlkYXRvck1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcm91dGVDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlUm91dGVVcGRhdGUodG8sIGZyb20sIG5leHQpIHtcbiAgICB0aGlzLmJlZm9yZVJvdXRlQ2hhbmdlKHRvLCBmcm9tLCBuZXh0KVxuICB9LFxuXG4gIGJlZm9yZVJvdXRlTGVhdmUodG8sIGZyb20sIG5leHQpIHtcbiAgICB0aGlzLmJlZm9yZVJvdXRlQ2hhbmdlKHRvLCBmcm9tLCBuZXh0KVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlbG9hZDogZmFsc2UsXG4gICAgICAvLyBFYWNoIHJvdXRlLWNvbXBvbmVudCBkZWZpbmVzIGEgc3RvcmUgdGhhdCBnZXRzIHBhc3NlZCBvbiB0byBpdHNcbiAgICAgIC8vIGNoaWxkIGNvbXBvbmVudHMsIHNvIHRoZXkgY2FuIHN0b3JlIHZhbHVlcyBpbiB0aGVtIHRoYXQgbGl2ZSBiZXlvbmRcbiAgICAgIC8vIHRoZWlyIGxpZmUtY3ljbGUuIFNlZTogRGl0b1BhbmUsIFNvdXJjZU1peGluXG4gICAgICBzdG9yZToge30sXG4gICAgICBsb2FkQ2FjaGU6IHt9IC8vIFNlZSBUeXBlTWl4aW4ubG9hZCgpXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcm91dGVDb21wb25lbnQoKSB7XG4gICAgICAvLyBPdmVycmlkZSBEaXRvTWl4aW4ncyByb3V0ZUNvbXBvbmVudCgpIHdoaWNoIHVzZXMgdGhlIGluamVjdGVkIHZhbHVlLlxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcm91dGVSZWNvcmQoKSB7XG4gICAgICAvLyBUT0RPOiBDYW4gdGhpcy4kcm91dGUuY3VycmVudFJvdXRlIGJlIG9mIHVzZSBzb21ld2hlcmUgaGVyZT9cbiAgICAgIC8vIFJldHJpZXZlIHRoZSByb3V0ZS1yZWNvcmQgdG8gd2hpY2ggdGhpcyBjb21wb25lbnQgd2FzIG1hcHBlZCB0bzpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8xMzM4I2lzc3VlY29tbWVudC0yOTYzODE0NTlcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5tYXRjaGVkW3RoaXMuJHZub2RlLmRhdGEucm91dGVyVmlld0RlcHRoXVxuICAgIH0sXG5cbiAgICBpc0xhc3RSb3V0ZSgpIHtcbiAgICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIHRoaXMgcm91dGVyIGNvbXBvbmVudCBpcyB0aGUgbGFzdCBvbmUgaW4gdGhlIHJvdXRlLlxuICAgICAgY29uc3QgeyBtYXRjaGVkIH0gPSB0aGlzLiRyb3V0ZVxuICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQgPT09IG1hdGNoZWRbbWF0Y2hlZC5sZW5ndGggLSAxXVxuICAgIH0sXG5cbiAgICBpc0xhc3RVbm5lc3RlZFJvdXRlKCkge1xuICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgcm91dGUgY29tcG9uZW50IGlzIHRoZSBsYXN0IG9uZSBpbiB0aGUgcm91dGUgdGhhdFxuICAgICAgLy8gbmVlZHMgaXRzIG93biByb3V0ZXItdmlldyAoPSBpcyBub3QgbmVzdGVkKS5cbiAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIGZvciAobGV0IGkgPSBtYXRjaGVkLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IG1hdGNoZWRbaV1cbiAgICAgICAgaWYgKCFyZWNvcmQubWV0YS5uZXN0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZVJlY29yZCA9PT0gcmVjb3JkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBpc05lc3RlZFJvdXRlKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YS5uZXN0ZWRcbiAgICB9LFxuXG4gICAgbWV0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlUmVjb3JkPy5tZXRhXG4gICAgfSxcblxuICAgIHBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSb3V0ZVBhdGgodGhpcy5yb3V0ZVJlY29yZC5wYXRoKVxuICAgIH0sXG5cbiAgICBsYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iKCkge1xuICAgICAgY29uc3QgeyBicmVhZGNydW1iIH0gPSB0aGlzLnNjaGVtYSB8fCB7fVxuICAgICAgcmV0dXJuIGJyZWFkY3J1bWIgfHwgYCR7dGhpcy5icmVhZGNydW1iUHJlZml4fSAke3RoaXMubGFiZWx9YFxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iUHJlZml4KCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfSxcblxuICAgIHBhcmFtKCkge1xuICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgdnVlLXJvdXRlciBub3QgYmVpbmcgYWJsZSB0byBtYXAgbXVsdGlwbGUgdXJsIHBhcmFtZXRlcnNcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUgbmFtZSB0byBtdWx0aXBsZSBjb21wb25lbnRzLCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTM0NVxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhcmFtc1t0aGlzLm1ldGE/LnBhcmFtXSB8fCBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZSwgc2VlIERpdG9Gb3JtXG4gICAgZG9lc011dGF0ZSgpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIC8vIEtlZXAgYSBzaGFyZWQgc3RhY2sgb2Ygcm9vdCBjb21wb25lbnRzIGZvciBEaXRvVHJhaWwgdG8gdXNlIHRvIHJlbmRlclxuICAgIC8vIGxhYmVscy4gQ2FuJ3QgcmVseSBvbiAkcm91dGUubWF0Y2hlZFtpXS5pbnN0YW5jZXMuZGVmYXVsdCB1bmZvcnR1bmF0ZWx5LFxuICAgIC8vIGFzIGluc3RhbmNlcyBhcmVuJ3QgaW1tZWRpYXRlbHkgcmVhZHksIGFuZCBpbnN0YW5jZXMgaXMgbm90IHJlYWN0aXZlLlxuICAgIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzLnB1c2godGhpcylcbiAgfSxcblxuICBkZXN0cm95ZWQoKSB7XG4gICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICByb3V0ZUNvbXBvbmVudHMuc3BsaWNlKHJvdXRlQ29tcG9uZW50cy5pbmRleE9mKHRoaXMpLCAxKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBiZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dCkge1xuICAgICAgbGV0IG9rID0gdHJ1ZVxuICAgICAgY29uc3QgaXNDbG9zaW5nID0gKFxuICAgICAgICAvLyBPbmx5IGhhbmRsZSB0aGlzIHJvdXRlIGNoYW5nZSBpZiB0aGUgZm9ybSBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlXG4gICAgICAgIC8vIGBmcm9tYCByb3V0ZSwgYnV0IGluY2x1ZGUgcGFyZW50IGZvcm1zIG9mIGNsb3NpbmcgbmVzdGVkIGZvcm1zIGFzIGFzXG4gICAgICAgIC8vIHdlbGwsIGJ5IG1hdGNoaW5nIHRoZSB0aGUgc3RhcnQgb2YgZnJvbS90byBwYXRoIGFnYWluc3QgYHRoaXMucGF0aGA6XG4gICAgICAgIGZyb20ucGF0aC5zdGFydHNXaXRoKHRoaXMucGF0aCkgJiZcbiAgICAgICAgIXRvLnBhdGguc3RhcnRzV2l0aCh0aGlzLnBhdGgpICYmXG4gICAgICAgIC8vIEV4Y2x1ZGUgaGFzaCBjaGFuZ2VzIG9ubHkgKD0gdGFiIGNoYW5nZXMpOlxuICAgICAgICBmcm9tLnBhdGggIT09IHRvLnBhdGggJiYgKFxuICAgICAgICAgIHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHx8XG4gICAgICAgICAgLy8gRGVjaWRlIGlmIHdlJ3JlIG1vdmluZyB0b3dhcmRzIGEgbmV3IG5lc3RlZCBmb3JtLCBvciBjbG9zaW5nIC9cbiAgICAgICAgICAvLyByZXBsYWNpbmcgYW4gYWxyZWFkeSBvcGVuIG9uZSBieSBjb21wYXJpbmcgcGF0aCBsZW5ndGhzLlxuICAgICAgICAgIC8vIFRoZSBjYXNlIG9mIGA9YCBtYXRjaGVzIHRoZSByZXBsYWNpbmcgb2YgYW4gYWxyZWFkeSBvcGVuIG9uZS5cbiAgICAgICAgICB0by5wYXRoLmxlbmd0aCA8PSBmcm9tLnBhdGgubGVuZ3RoXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIGlmIChpc0Nsb3NpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9lc011dGF0ZSkge1xuICAgICAgICAgIC8vIEZvciBhY3RpdmUgZGlyZWN0bHkgbXV0YXRpbmcgKG5lc3RlZCkgZm9ybXMgdGhhdCB3ZXJlIG5vdCB2YWxpZGF0ZWRcbiAgICAgICAgICAvLyB5ZXQsIHZhbGlkYXRlIHRoZW0gb25jZS4gSWYgdGhlIHVzZXIgdGhlbiBzdGlsbCB3YW50cyB0byBsZWF2ZVxuICAgICAgICAgIC8vIHRoZW0sIHRoZXkgY2FuIGNsaWNrIGNsb3NlIC8gbmF2aWdhdGUgYXdheSBhZ2Fpbi5cbiAgICAgICAgICBvayA9IChcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgfHxcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVBbGwoKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGUgZm9ybSBkb2Vzbid0IGRpcmVjdGx5IG11dGF0ZSBkYXRhLiBJZiBpdCBpcyBkaXJ0eSwgYXNrIGlmIHVzZXJcbiAgICAgICAgICAvLyB3YW50cyB0byBwZXJzaXN0IGRhdGEgZmlyc3QuXG4gICAgICAgICAgaWYgKHRoaXMuaXNEaXJ0eSkge1xuICAgICAgICAgICAgb2sgPSB3aW5kb3cuY29uZmlybShcbiAgICAgICAgICAgICAgYFlvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gRG8geW91IHJlYWxseSB3YW50IHRvICR7XG4gICAgICAgICAgICAgICAgdGhpcy52ZXJicy5jYW5jZWxcbiAgICAgICAgICAgICAgfT9gXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXh0KG9rKVxuICAgIH0sXG5cbiAgICBnZXRSb3V0ZVBhdGgodGVtcGxhdGVQYXRoKSB7XG4gICAgICAvLyBNYXBzIHRoZSByb3V0ZSdzIGFjdHVhbCBwYXRoIHRvIHRoZSBtYXRjaGVkIHJvdXRlcyBieSBjb3VudGluZyBpdHNcbiAgICAgIC8vIHBhcnRzIHNlcGFyYXRlZCBieSAnLycsIHNwbGl0dGluZyB0aGUgcGF0aCBpbnRvIHRoZSBtYXBwZWQgcGFydHNcbiAgICAgIC8vIGNvbnRhaW5pbmcgYWN0dWFsIHBhcmFtZXRlcnMuXG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUucGF0aFxuICAgICAgICAuc3BsaXQoJy8nKVxuICAgICAgICAuc2xpY2UoMCwgdGVtcGxhdGVQYXRoLnNwbGl0KCcvJykubGVuZ3RoKVxuICAgICAgICAuam9pbignLycpXG4gICAgfSxcblxuICAgIGdldENoaWxkUGF0aChwYXRoKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5wYXRofS8ke3BhdGh9YFxuICAgIH0sXG5cbiAgICBpc0Z1bGxSb3V0ZUNoYW5nZSh0bywgZnJvbSkge1xuICAgICAgLy8gVGhlIHJvdXRlIHBhdGggaXMgdGhlIHBhdGggdXAgdG8gdGhlIGZpcnN0IC8gKGV4Y2x1ZGluZyB0aGUgaW5pdGlhbCAvKTpcbiAgICAgIGNvbnN0IHJvb3RQYXRoID0gdGhpcy5wYXRoLm1hdGNoKC9eKFxcL1teL10qKS8pWzFdXG4gICAgICByZXR1cm4gIWdldENvbW1vblByZWZpeCh0by5wYXRoLCBmcm9tLnBhdGgpLnN0YXJ0c1dpdGgocm9vdFBhdGgpXG4gICAgfVxuICB9XG59XG4iLCJcbi8vIE9ubHkgcmVuZGVyIERpdG9WaWV3IHdoZW4gaXQgaXMgYWN0aXZlLCBvdGhlcndpc2UgYSBub3JtYWwgcm91dGVyLXZpZXdcbi8vIGluc3RlYWQsIHRvIG5lc3QgZnVydGhlciByb3V0ZSBjb21wb25lbnRzLlxuLy8gTk9URTogVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgaGFuZGxpbmcgaW4gRGl0b0Zvcm0sIHdoZXJlIGB2LXNob3dgIGlzXG4vLyB1c2VkIHRvIGFsd2F5cyByZW5kZXIgZm9ybXMgZXZlbiB3aGVuIG90aGVyIG5lc3RlZCBmb3JtcyBhcmUgcHJlc2VudC5cbnJvdXRlci12aWV3KFxuICB2LWlmPVwiIWlzTGFzdFJvdXRlXCJcbiAgOmtleT1cIm5hbWVcIlxuKVxuLmRpdG8tdmlldy5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIHYtZWxzZS1pZj1cInNob3VsZFJlbmRlcih2aWV3U2NoZW1hKVwiXG4pXG4gIGRpdG8tc2NoZW1hLmRpdG8tc2Nyb2xsKFxuICAgIDpzY2hlbWE9XCJ2aWV3U2NoZW1hXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShuYW1lKVwiXG4gICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICA6Z2VuZXJhdGVMYWJlbHM9XCJmYWxzZVwiXG4gICAgOm1lbnVIZWFkZXI9XCJ0cnVlXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLy8gT25seSByZW5kZXIgRGl0b1ZpZXcgd2hlbiBpdCBpcyBhY3RpdmUsIG90aGVyd2lzZSBhIG5vcm1hbCByb3V0ZXItdmlld1xuICAvLyBpbnN0ZWFkLCB0byBuZXN0IGZ1cnRoZXIgcm91dGUgY29tcG9uZW50cy5cbiAgLy8gTk9URTogVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgaGFuZGxpbmcgaW4gRGl0b0Zvcm0sIHdoZXJlIGB2LXNob3dgIGlzXG4gIC8vIHVzZWQgdG8gYWx3YXlzIHJlbmRlciBmb3JtcyBldmVuIHdoZW4gb3RoZXIgbmVzdGVkIGZvcm1zIGFyZSBwcmVzZW50LlxuICByb3V0ZXItdmlldyhcbiAgICB2LWlmPVwiIWlzTGFzdFJvdXRlXCJcbiAgICA6a2V5PVwibmFtZVwiXG4gIClcbiAgLmRpdG8tdmlldy5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gICAgdi1lbHNlLWlmPVwic2hvdWxkUmVuZGVyKHZpZXdTY2hlbWEpXCJcbiAgKVxuICAgIGRpdG8tc2NoZW1hLmRpdG8tc2Nyb2xsKFxuICAgICAgOnNjaGVtYT1cInZpZXdTY2hlbWFcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKG5hbWUpXCJcbiAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJmYWxzZVwiXG4gICAgICA6bWVudUhlYWRlcj1cInRydWVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJvdXRlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1JvdXRlTWl4aW4uanMnXG5pbXBvcnQgeyBzb21lU2NoZW1hQ29tcG9uZW50LCBpc1NpbmdsZUNvbXBvbmVudFZpZXcgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBoYXNSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdmlldycsIHtcbiAgbWl4aW5zOiBbUm91dGVNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICAvLyBSZWRpcmVjdCAkc291cmNlQ29tcG9uZW50IGFuZCAkcmVzb3VyY2VDb21wb25lbnQgdG8gdGhlIG1haW4gY29tcG9uZW50OlxuICAgIHJldHVybiB7XG4gICAgICAkc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzLm1haW5Db21wb25lbnQ/LnNvdXJjZUNvbXBvbmVudCB8fCBudWxsLFxuICAgICAgJHJlc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzLm1haW5Db21wb25lbnQ/LnJlc291cmNlQ29tcG9uZW50IHx8IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNWaWV3OiB0cnVlLFxuICAgICAgLy8gVXBkYXRlZCBmcm9tIExvYWRpbmdNaXhpbiB0aHJvdWdoIGBzZXRMb2FkaW5nKGlzTG9hZGluZylgOlxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIC8vIE5PVEU6IERhdGEgaXMgc2hhcmVkIGFjcm9zcyBhbGwgdmlld3MgYmVjYXVzZSB0aGUgcm91dGVyIHJlY3ljbGVzIHRoZVxuICAgICAgLy8gRGl0b1ZpZXcgY29tcG9uZW50LlxuICAgICAgZGF0YToge31cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhLnNjaGVtYVxuICAgIH0sXG5cbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLm5hbWVcbiAgICB9LFxuXG4gICAgaXNTaW5nbGVDb21wb25lbnRWaWV3KCkge1xuICAgICAgcmV0dXJuIGlzU2luZ2xlQ29tcG9uZW50Vmlldyh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgbWFpbkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50QnlEYXRhUGF0aCh0aGlzLm5hbWUpXG4gICAgfSxcblxuICAgIHZpZXdTY2hlbWEoKSB7XG4gICAgICBjb25zdCB7IHNjaGVtYSB9ID0gdGhpc1xuICAgICAgLy8gVHJhbnNsYXRlIHNpbmdsZS1jb21wb25lbnQgc2NoZW1hcyBpbnRvIG11bHRpLWNvbXBvbmVudCBzY2hlbWFzLFxuICAgICAgLy8gc28gdGhleSBjYW4gYmUgcmVuZGVyZWQgZGlyZWN0bHkgdGhyb3VnaCBEaXRvU2NoZW1hIGFsc286XG4gICAgICByZXR1cm4gdGhpcy5pc1NpbmdsZUNvbXBvbmVudFZpZXdcbiAgICAgICAgPyB7XG4gICAgICAgICAgbmFtZTogc2NoZW1hLm5hbWUsXG4gICAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgICAgW3NjaGVtYS5uYW1lXToge1xuICAgICAgICAgICAgICAuLi5zY2hlbWEsXG4gICAgICAgICAgICAgIGxhYmVsOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA6IHNjaGVtYVxuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICByZXR1cm4gc29tZVNjaGVtYUNvbXBvbmVudChcbiAgICAgICAgdGhpcy52aWV3U2NoZW1hLFxuICAgICAgICBjb21wb25lbnQgPT4gaGFzUmVzb3VyY2UoY29tcG9uZW50KVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICRyb3V0ZSh0bywgZnJvbSkge1xuICAgICAgLy8gU2VlIGlmIHRoZSByb3V0ZSBjaGFuZ2VzIGNvbXBsZXRlbHksIGFuZCBjbGVhciB0aGUgZGF0YSBpZiBpdCBkb2VzLlxuICAgICAgaWYgKHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pKSB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcbiAgICAgICAgdGhpcy5kYXRhID0ge31cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFBhdGgocGF0aCkge1xuICAgICAgLy8gTGlzdHMgaW5zaWRlIHNpbmdsZS1jb21wb25lbnQgdmlld3MgdXNlIHRoZSB2aWV3J3MgcGF0aCBmb3Igc3ViLXBhdGhzOlxuICAgICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVDb21wb25lbnRWaWV3XG4gICAgICAgID8gdGhpcy5wYXRoXG4gICAgICAgIDogYCR7dGhpcy5wYXRofS8ke3BhdGh9YFxuICAgIH0sXG5cbiAgICBzZXRMb2FkaW5nKGlzTG9hZGluZykge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSAhIWlzTG9hZGluZ1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgYWRkRXZlbnRzIH0gZnJvbSAnQGRpdG9qcy91aSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZG9tSGFuZGxlcnM6IFtdXG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgZm9yIChjb25zdCB7IHJlbW92ZSB9IG9mIHRoaXMuZG9tSGFuZGxlcnMpIHtcbiAgICAgIHJlbW92ZSgpXG4gICAgfVxuICAgIHRoaXMuZG9tSGFuZGxlcnMgPSBbXVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBkb21PbihlbGVtZW50LCB0eXBlLCBoYW5kbGVyKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhZGRFdmVudHMoXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIGlzT2JqZWN0KHR5cGUpID8gdHlwZSA6IHsgW3R5cGVdOiBoYW5kbGVyIH1cbiAgICAgIClcbiAgICAgIHRoaXMuZG9tSGFuZGxlcnMucHVzaChyZXN1bHQpXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuICB9XG59XG4iLCJcbi5kaXRvLXJvb3RcbiAgbm90aWZpY2F0aW9ucy5kaXRvLW5vdGlmaWNhdGlvbnMoXG4gICAgcmVmPVwibm90aWZpY2F0aW9uc1wiXG4gICAgcG9zaXRpb249XCJ0b3AgcmlnaHRcIlxuICAgIGNsYXNzZXM9XCJkaXRvLW5vdGlmaWNhdGlvblwiXG4gIClcbiAgZGl0by1tZW51XG4gIG1haW4uZGl0by1wYWdlLmRpdG8tc2Nyb2xsLXBhcmVudFxuICAgIGRpdG8taGVhZGVyKFxuICAgICAgOnNwaW5uZXI9XCJvcHRpb25zLnNwaW5uZXJcIlxuICAgICAgOmlzTG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgKVxuICAgICAgZGl0by1hY2NvdW50KFxuICAgICAgICB2LWlmPVwidXNlclwiXG4gICAgICApXG4gICAgICBhLmRpdG8tbG9naW4oXG4gICAgICAgIHYtZWxzZS1pZj1cImFsbG93TG9naW5cIlxuICAgICAgICBAY2xpY2s9XCJyb290Q29tcG9uZW50LmxvZ2luKClcIlxuICAgICAgKVxuICAgICAgICBzcGFuIExvZ2luXG4gICAgcm91dGVyLXZpZXdcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXJvb3RcbiAgICBub3RpZmljYXRpb25zLmRpdG8tbm90aWZpY2F0aW9ucyhcbiAgICAgIHJlZj1cIm5vdGlmaWNhdGlvbnNcIlxuICAgICAgcG9zaXRpb249XCJ0b3AgcmlnaHRcIlxuICAgICAgY2xhc3Nlcz1cImRpdG8tbm90aWZpY2F0aW9uXCJcbiAgICApXG4gICAgZGl0by1tZW51XG4gICAgbWFpbi5kaXRvLXBhZ2UuZGl0by1zY3JvbGwtcGFyZW50XG4gICAgICBkaXRvLWhlYWRlcihcbiAgICAgICAgOnNwaW5uZXI9XCJvcHRpb25zLnNwaW5uZXJcIlxuICAgICAgICA6aXNMb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICAgIClcbiAgICAgICAgZGl0by1hY2NvdW50KFxuICAgICAgICAgIHYtaWY9XCJ1c2VyXCJcbiAgICAgICAgKVxuICAgICAgICBhLmRpdG8tbG9naW4oXG4gICAgICAgICAgdi1lbHNlLWlmPVwiYWxsb3dMb2dpblwiXG4gICAgICAgICAgQGNsaWNrPVwicm9vdENvbXBvbmVudC5sb2dpbigpXCJcbiAgICAgICAgKVxuICAgICAgICAgIHNwYW4gTG9naW5cbiAgICAgIHJvdXRlci12aWV3XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL3N0eWxlLnNhc3MnXG5cbiAgLmRpdG8tcm9vdFxuICAgIGhlaWdodDogMTAwJVxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICAuZGl0by1wYWdlXG4gICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kXG4gICAgICAvLyBUaGUgcm9vdC1sZXZlbCB2aWV3cyBhbmQgZm9ybXMgbWF5IGhhdmUgYSBgLmRpdG8tc2NoZW1hLWhlYWRlcmAgdGhhdFxuICAgICAgLy8gc2hvdWxkIGFwcGVhciBsYXllcmVkIG92ZXIgYC5kaXRvLW1lbnVgLCB3aGlsZSBoYXZpbmcgYG92ZXJsYXk6IGhpZGRlbmBcbiAgICAgIC8vIHNldCBieSBgLmRpdG8tc2Nyb2xsLXBhcmVudGAgdG8gZGVsZWdhdGUgc2Nyb2xsaW5nIHRvIGAuZGl0by1zY3JvbGxgLlxuICAgICAgLy8gSW4gb3JkZXIgdG8gbm90IGhhdmUgdGhlIGhlYWRlciBjbGlwcGVkLCBhZGp1c3QgdGhlIHRvcCBoZXJlOlxuICAgICAgPiAuZGl0by1mb3JtLFxuICAgICAgPiAuZGl0by12aWV3XG4gICAgICAgIG1hcmdpbi10b3A6IC0kbWVudS1oZWlnaHRcbiAgICAgICAgcGFkZGluZy10b3A6ICRtZW51LWhlaWdodFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGFzQXJyYXksIHN0cmlwVGFncyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Vc2VyIGZyb20gJy4uL0RpdG9Vc2VyLmpzJ1xuaW1wb3J0IERpdG9WaWV3IGZyb20gJy4uL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCB7IHByb2Nlc3NWaWV3LCByZXNvbHZlU2NoZW1hcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXJvb3QnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdmlld3M6ICgpID0+IHRoaXMucmVzb2x2ZWRWaWV3c1xuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHVucmVzb2x2ZWRWaWV3czogeyB0eXBlOiBbT2JqZWN0LCBGdW5jdGlvbiwgUHJvbWlzZV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgb3B0aW9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc29sdmVkVmlld3M6IHt9LFxuICAgICAgYWxsb3dMb2dpbjogZmFsc2UsXG4gICAgICBsb2FkaW5nQ291bnQ6IDBcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBub3RpZmljYXRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlZnMubm90aWZpY2F0aW9uc1xuICAgIH0sXG5cbiAgICBpc0xvYWRpbmcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb2FkaW5nQ291bnQgPiAwXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5hcHBTdGF0ZS50aXRsZSA9IGRvY3VtZW50LnRpdGxlIHx8ICdEaXRvLmpzIEFkbWluJ1xuICAgIC8vIFdpdGggaG90LXJlbG9hZGluZywgaXQgbG9va3MgbGlrZSBkZXN0cm95ZWQgaG9va3MgYXJlbid0IGFsd2F5cyBjYWxsZWRcbiAgICAvLyBmb3Igcm91dGUgY29tcG9uZW50cyBzbyByZXNldCB0aGUgYXJyYXkgb2YgcmVnaXN0ZXJlZCBjb21wb25lbnRzIGluc3RlYWQuXG4gICAgdGhpcy5hcHBTdGF0ZS5yb3V0ZUNvbXBvbmVudHMgPSBbXVxuICB9LFxuXG4gIGFzeW5jIG1vdW50ZWQoKSB7XG4gICAgLy8gQ2xlYXIgdGhlIGxhYmVsIG1hcmtlZCBhcyBhY3RpdmUgb24gYWxsIG1vdXNlIGFuZCBrZXlib2FyZCBldmVudHMsIGV4Y2VwdFxuICAgIC8vIHRoZSBvbmVzIHRoYXQgRGl0b0xhYmVsIGl0c2VsZiBpbnRlcmNlcHRzLlxuICAgIHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgIGNsaWNrOiBldmVudCA9PiB7XG4gICAgICAgIGlmICghZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJy5kaXRvLWxhYmVsJykpIHtcbiAgICAgICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBrZXl1cDogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ1RhYicpIHtcbiAgICAgICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgICB0cnkge1xuICAgICAgdGhpcy5hbGxvd0xvZ2luID0gZmFsc2VcbiAgICAgIGlmIChhd2FpdCB0aGlzLmZldGNoVXNlcigpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVzb2x2ZVZpZXdzKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgfVxuICAgIHRoaXMuYWxsb3dMb2dpbiA9IHRydWVcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgbm90aWZ5KHsgdHlwZSA9ICdpbmZvJywgdGl0bGUsIHRleHQgfSA9IHt9KSB7XG4gICAgICB0aXRsZSB8fD0ge1xuICAgICAgICB3YXJuaW5nOiAnV2FybmluZycsXG4gICAgICAgIGVycm9yOiAnRXJyb3InLFxuICAgICAgICBpbmZvOiAnSW5mb3JtYXRpb24nLFxuICAgICAgICBzdWNjZXNzOiAnU3VjY2VzcydcbiAgICAgIH1bdHlwZV0gfHwgJ05vdGlmaWNhdGlvbidcbiAgICAgIHRleHQgPSBgPHA+JHtcbiAgICAgICAgYXNBcnJheSh0ZXh0KS5qb2luKCc8L3A+IDxwPicpXG4gICAgICB9PC9wPmAucmVwbGFjZSgvXFxufFxcclxcbnxcXHIvZywgJzxicj4nKVxuICAgICAgY29uc3QgbG9nID0ge1xuICAgICAgICB3YXJuaW5nOiAnd2FybicsXG4gICAgICAgIGVycm9yOiAnZXJyb3InLFxuICAgICAgICBpbmZvOiAnbG9nJyxcbiAgICAgICAgc3VjY2VzczogJ2xvZydcbiAgICAgIH1bdHlwZV0gfHwgJ2Vycm9yJ1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGVbbG9nXShzdHJpcFRhZ3ModGV4dCkpXG4gICAgICBjb25zdCB7IG5vdGlmaWNhdGlvbnMgPSB0cnVlIH0gPSB0aGlzLmFwaVxuICAgICAgaWYgKG5vdGlmaWNhdGlvbnMpIHtcbiAgICAgICAgLy8gQ2FsY3VsYXRlIGRpc3BsYXktZHVyYXRpb24gZm9yIHRoZSBub3RpZmljYXRpb24gYmFzZWQgb24gaXRzIGNvbnRlbnRcbiAgICAgICAgLy8gYW5kIHRoZSBzZXR0aW5nIG9mIHRoZSBgZHVyYXRpb25GYWN0b3JgIGNvbmZpZ3VyYXRpb24uIEl0IGRlZmluZXMgdGhlXG4gICAgICAgIC8vIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgbXVsdGlwbGllZCB3aXRoIHRoZSBhbW91bnQgb2YgY2hhcmFjdGVyc1xuICAgICAgICAvLyBkaXNwbGF5ZWQgaW4gdGhlIG5vdGlmaWNhdGlvbiwgcGx1cyA0MCAoNDAgKyB0aXRsZSArIG1lc3NhZ2UpOlxuICAgICAgICBjb25zdCB7IGR1cmF0aW9uRmFjdG9yID0gMjAgfSA9IG5vdGlmaWNhdGlvbnNcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSAoNDAgKyB0ZXh0Lmxlbmd0aCArIHRpdGxlLmxlbmd0aCkgKiBkdXJhdGlvbkZhY3RvclxuICAgICAgICB0aGlzLiRub3RpZnkoeyB0eXBlLCB0aXRsZSwgdGV4dCwgZHVyYXRpb24gfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xvc2VOb3RpZmljYXRpb25zKCkge1xuICAgICAgdGhpcy5ub3RpZmljYXRpb25zLmRlc3Ryb3lBbGwoKVxuICAgIH0sXG5cbiAgICByZWdpc3RlckxvYWRpbmcoaXNMb2FkaW5nKSB7XG4gICAgICB0aGlzLmxvYWRpbmdDb3VudCArPSBpc0xvYWRpbmcgPyAxIDogLTFcbiAgICB9LFxuXG4gICAgYXN5bmMgbG9naW4oKSB7XG4gICAgICB0aGlzLmFsbG93TG9naW4gPSB0cnVlXG4gICAgICBjb25zdCB7XG4gICAgICAgIGFkZGl0aW9uYWxDb21wb25lbnRzLFxuICAgICAgICByZWRpcmVjdEFmdGVyTG9naW5cbiAgICAgIH0gPSB0aGlzLm9wdGlvbnMubG9naW4gfHwge31cbiAgICAgIGNvbnN0IGxvZ2luRGF0YSA9IGF3YWl0IHRoaXMuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICB1c2VybmFtZToge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgYXV0b2ZvY3VzOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwYXNzd29yZDoge1xuICAgICAgICAgICAgdHlwZTogJ3Bhc3N3b3JkJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4uYWRkaXRpb25hbENvbXBvbmVudHNcbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uczoge1xuICAgICAgICAgIGNhbmNlbDoge30sXG4gICAgICAgICAgbG9naW46IHsgdHlwZTogJ3N1Ym1pdCcgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgaWYgKGxvZ2luRGF0YSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMubG9naW4sXG4gICAgICAgICAgICBkYXRhOiBsb2dpbkRhdGEsXG4gICAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKHJlZGlyZWN0QWZ0ZXJMb2dpbikge1xuICAgICAgICAgICAgbG9jYXRpb24ucmVwbGFjZShyZWRpcmVjdEFmdGVyTG9naW4pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VXNlcihyZXNwb25zZS5kYXRhLnVzZXIpXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlc29sdmVWaWV3cygpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IGVyci5yZXNwb25zZT8uZGF0YT8uZXJyb3JcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgdGl0bGU6ICdBdXRoZW50aWNhdGlvbiBFcnJvcicsXG4gICAgICAgICAgICB0ZXh0OiBlcnJvciB8fCBlcnJcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIucmVzcG9uc2UpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubG9naW4oKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG5hdmlnYXRlSG9tZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlKCcvJylcbiAgICB9LFxuXG4gICAgYXN5bmMgbG9nb3V0KCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMubG9nb3V0LFxuICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLnNldFVzZXIobnVsbClcbiAgICAgICAgICB0aGlzLm5hdmlnYXRlSG9tZSgpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hVc2VyKCkge1xuICAgICAgbGV0IHVzZXIgPSBudWxsXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgIHJlc291cmNlOiB0aGlzLmFwaS51c2Vycy5zZXNzaW9uLFxuICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIHVzZXIgPSByZXNwb25zZS5kYXRhLnVzZXIgfHwgbnVsbFxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgIHRpdGxlOiAnQXV0aGVudGljYXRpb24gRXJyb3InLFxuICAgICAgICAgIHRleHQ6IGVyclxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRVc2VyKHVzZXIpXG4gICAgICByZXR1cm4gdXNlclxuICAgIH0sXG5cbiAgICBzZXRVc2VyKHVzZXIpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUudXNlciA9IChcbiAgICAgICAgdXNlciAmJlxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodXNlciwgRGl0b1VzZXIucHJvdG90eXBlKVxuICAgICAgKVxuICAgICAgLy8gQ2xlYXIgcmVzb2x2ZWQgdmlld3Mgd2hlbiB1c2VyIGlzIGxvZ2dlZCBvdXQuXG4gICAgICBpZiAoIXVzZXIpIHtcbiAgICAgICAgdGhpcy5yZXNvbHZlZFZpZXdzID0ge31cbiAgICAgICAgdGhpcy5uYXZpZ2F0ZUhvbWUoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBlbnN1cmVVc2VyKCkge1xuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5mZXRjaFVzZXIoKSkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHJlc29sdmVWaWV3cygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRWaWV3cyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKHRoaXMudW5yZXNvbHZlZFZpZXdzKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKCFlcnJvci5yZXF1ZXN0KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgICAvLyBDb2xsZWN0IGFsbCByb3V0ZXMgZnJvbSB0aGUgcm9vdCBzY2hlbWEgY29tcG9uZW50c1xuICAgICAgY29uc3Qgcm91dGVzID0gW11cbiAgICAgIGNvbnN0IHByb21pc2VzID0gW11cbiAgICAgIGZvciAoY29uc3QgW25hbWUsIHNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5yZXNvbHZlZFZpZXdzKSkge1xuICAgICAgICBwcm9taXNlcy5wdXNoKHByb2Nlc3NWaWV3KERpdG9WaWV3LCB0aGlzLmFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMpKVxuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG4gICAgICBmb3IgKGNvbnN0IHJvdXRlIG9mIHJvdXRlcykge1xuICAgICAgICB0aGlzLiRyb3V0ZXIuYWRkUm91dGUocm91dGUpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbm5hdi5kaXRvLW1lbnUuZGl0by1zY3JvbGwtcGFyZW50XG4gIGgxIHt7IGFwcFN0YXRlLnRpdGxlIH19XG4gIHVsLmRpdG8tc2Nyb2xsXG4gICAgbGkodi1mb3I9XCJ2aWV3IGluIHZpZXdzXCIpXG4gICAgICByb3V0ZXItbGluay5kaXRvLWxpbmsoXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodmlldylcIlxuICAgICAgICA6dG89XCJgLyR7dmlldy5wYXRofWBcIlxuICAgICAgICBhY3RpdmUtY2xhc3M9XCJkaXRvLWFjdGl2ZVwiXG4gICAgICApIHt7IGdldExhYmVsKHZpZXcpIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBuYXYuZGl0by1tZW51LmRpdG8tc2Nyb2xsLXBhcmVudFxuICAgIGgxIHt7IGFwcFN0YXRlLnRpdGxlIH19XG4gICAgdWwuZGl0by1zY3JvbGxcbiAgICAgIGxpKHYtZm9yPVwidmlldyBpbiB2aWV3c1wiKVxuICAgICAgICByb3V0ZXItbGluay5kaXRvLWxpbmsoXG4gICAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcih2aWV3KVwiXG4gICAgICAgICAgOnRvPVwiYC8ke3ZpZXcucGF0aH1gXCJcbiAgICAgICAgICBhY3RpdmUtY2xhc3M9XCJkaXRvLWFjdGl2ZVwiXG4gICAgICAgICkge3sgZ2V0TGFiZWwodmlldykgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1tZW51XG4gICAgZmxleDogaW5pdGlhbFxuICAgIGZvbnQtc2l6ZTogJG1lbnUtZm9udC1zaXplXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIHVsXG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlclxuICAgICAgYm9yZGVyLXJpZ2h0OiAkYm9yZGVyLXN0eWxlXG4gICAgYSxcbiAgICBoMVxuICAgICAgZGlzcGxheTogYmxvY2tcbiAgICBoMVxuICAgICAgcGFkZGluZzogJG1lbnUtcGFkZGluZ1xuICAgICAgbGluZS1oZWlnaHQ6ICRtZW51LWxpbmUtaGVpZ2h0XG4gICAgICBmb250LXdlaWdodDogYm9sZFxuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWRhcmtlclxuICAgICAgYm9yZGVyLXJpZ2h0OiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1kYXJrZXN0XG4gICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgLmRpdG8tbGlua1xuICAgICAgcGFkZGluZzogJG1lbnUtcGFkZGluZ1xuICAgICAgbGluZS1oZWlnaHQ6ICRtZW51LWxpbmUtaGVpZ2h0XG4gICAgICAmLmRpdG8tYWN0aXZlXG4gICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZVxuICAuZGl0by1saW5rXG4gICAgJjpmb2N1czpub3QoOmFjdGl2ZSk6bm90KC5kaXRvLWFjdGl2ZSlcbiAgICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctZm9jdXNcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tbWVudScsIHt9KVxuPC9zY3JpcHQ+XG4iLCJcbjxkaXYgY2xhc3M9XCJ2LXNwaW5uZXJcIiB2LXNob3c9XCJsb2FkaW5nXCI+XG4gICAgPGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTFcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTFdXCI+XG4gICAgPC9kaXY+PGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTJcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTJdXCI+XG4gICAgPC9kaXY+PGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTNcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTNdXCI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuIiwiPHRlbXBsYXRlPlxuPGRpdiBjbGFzcz1cInYtc3Bpbm5lclwiIHYtc2hvdz1cImxvYWRpbmdcIj5cbiAgICA8ZGl2IGNsYXNzPVwidi1wdWxzZSB2LXB1bHNlMVwiIHYtYmluZDpzdHlsZT1cIltzcGlubmVyU3R5bGUsc3Bpbm5lckRlbGF5MV1cIj5cbiAgICA8L2Rpdj48ZGl2IGNsYXNzPVwidi1wdWxzZSB2LXB1bHNlMlwiIHYtYmluZDpzdHlsZT1cIltzcGlubmVyU3R5bGUsc3Bpbm5lckRlbGF5Ml1cIj5cbiAgICA8L2Rpdj48ZGl2IGNsYXNzPVwidi1wdWxzZSB2LXB1bHNlM1wiIHYtYmluZDpzdHlsZT1cIltzcGlubmVyU3R5bGUsc3Bpbm5lckRlbGF5M11cIj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBcbiAgbmFtZTogJ1B1bHNlTG9hZGVyJyxcblxuICBwcm9wczoge1xuICAgIGxvYWRpbmc6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBjb2xvcjogeyBcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcjNWRjNTk2J1xuICAgIH0sXG4gICAgc2l6ZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJzE1cHgnXG4gICAgfSxcbiAgICBtYXJnaW46IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcycHgnXG4gICAgfSxcbiAgICByYWRpdXM6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcxMDAlJ1xuICAgIH1cbiAgfSxcbiAgZGF0YSAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNwaW5uZXJTdHlsZToge1xuICAgICAgXHRiYWNrZ3JvdW5kQ29sb3I6IHRoaXMuY29sb3IsXG4gICAgICBcdHdpZHRoOiB0aGlzLnNpemUsXG4gICAgICAgIGhlaWdodDogdGhpcy5zaXplLFxuICAgICAgXHRtYXJnaW46IHRoaXMubWFyZ2luLFxuICAgICAgXHRib3JkZXJSYWRpdXM6IHRoaXMucmFkaXVzLFxuICAgICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAgICAgYW5pbWF0aW9uTmFtZTogJ3YtcHVsc2VTdHJldGNoRGVsYXknLFxuICAgICAgICBhbmltYXRpb25EdXJhdGlvbjogJzAuNzVzJyxcbiAgICAgICAgYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6ICdpbmZpbml0ZScsXG4gICAgICAgIGFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uOiAnY3ViaWMtYmV6aWVyKC4yLC42OCwuMTgsMS4wOCknLFxuICAgICAgICBhbmltYXRpb25GaWxsTW9kZTogJ2JvdGgnXG4gICAgICB9LFxuICAgICAgc3Bpbm5lckRlbGF5MToge1xuICAgICAgICBhbmltYXRpb25EZWxheTogJzAuMTJzJ1xuICAgICAgfSxcbiAgICAgIHNwaW5uZXJEZWxheTI6IHtcbiAgICAgICAgYW5pbWF0aW9uRGVsYXk6ICcwLjI0cydcbiAgICAgIH0sXG4gICAgICBzcGlubmVyRGVsYXkzOiB7XG4gICAgICAgIGFuaW1hdGlvbkRlbGF5OiAnMC4zNnMnXG4gICAgICB9XG4gICAgfVxuICB9XG5cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGU+XG4vKi52LXNwaW5uZXJcbntcbiAgICBtYXJnaW46IDEwMHB4IGF1dG87XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuKi9cblxuQC13ZWJraXQta2V5ZnJhbWVzIHYtcHVsc2VTdHJldGNoRGVsYXlcbntcbiAgICAwJSxcbiAgICA4MCVcbiAgICB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgICAgICAtd2Via2l0LW9wYWNpdHk6IDE7ICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICAgIDQ1JVxuICAgIHtcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDAuMSk7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgICAgICAtd2Via2l0LW9wYWNpdHk6IDAuNzsgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMC43O1xuICAgIH1cbn1cblxuQGtleWZyYW1lcyB2LXB1bHNlU3RyZXRjaERlbGF5XG57XG4gICAgMCUsXG4gICAgODAlXG4gICAge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgLXdlYmtpdC1vcGFjaXR5OiAxOyAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgICA0NSVcbiAgICB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICAgICAgLXdlYmtpdC1vcGFjaXR5OiAwLjc7ICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNztcbiAgICB9XG59XG48L3N0eWxlPiIsIlxubmF2LmRpdG8taGVhZGVyXG4gIC5kaXRvLXRyYWlsXG4gICAgdWxcbiAgICAgIGxpKFxuICAgICAgICB2LWZvcj1cIihjb21wb25lbnQsIGluZGV4KSBpbiB0cmFpbFwiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKHYtaWY9XCJpbmRleCA9PT0gdHJhaWwubGVuZ3RoIC0gMVwiKVxuICAgICAgICAgIHNwYW4oOmNsYXNzPVwiZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudClcIilcbiAgICAgICAgICAgIHwge3sgY29tcG9uZW50LmJyZWFkY3J1bWIgfX1cbiAgICAgICAgcm91dGVyLWxpbmsuZGl0by1icmVhZGNydW1iKHYtZWxzZSwgOnRvPVwiY29tcG9uZW50LnBhdGhcIilcbiAgICAgICAgICBzcGFuKDpjbGFzcz1cImdldEJyZWFkY3J1bWJDbGFzcyhjb21wb25lbnQpXCIpXG4gICAgICAgICAgICB8IHt7IGNvbXBvbmVudC5icmVhZGNydW1iIH19XG4gICAgc3Bpbm5lci5kaXRvLXNwaW5uZXIodi1pZj1cImlzTG9hZGluZ1wiKVxuICBzbG90XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBuYXYuZGl0by1oZWFkZXJcbiAgICAuZGl0by10cmFpbFxuICAgICAgdWxcbiAgICAgICAgbGkoXG4gICAgICAgICAgdi1mb3I9XCIoY29tcG9uZW50LCBpbmRleCkgaW4gdHJhaWxcIlxuICAgICAgICApXG4gICAgICAgICAgdGVtcGxhdGUodi1pZj1cImluZGV4ID09PSB0cmFpbC5sZW5ndGggLSAxXCIpXG4gICAgICAgICAgICBzcGFuKDpjbGFzcz1cImdldEJyZWFkY3J1bWJDbGFzcyhjb21wb25lbnQpXCIpXG4gICAgICAgICAgICAgIHwge3sgY29tcG9uZW50LmJyZWFkY3J1bWIgfX1cbiAgICAgICAgICByb3V0ZXItbGluay5kaXRvLWJyZWFkY3J1bWIodi1lbHNlLCA6dG89XCJjb21wb25lbnQucGF0aFwiKVxuICAgICAgICAgICAgc3Bhbig6Y2xhc3M9XCJnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KVwiKVxuICAgICAgICAgICAgICB8IHt7IGNvbXBvbmVudC5icmVhZGNydW1iIH19XG4gICAgICBzcGlubmVyLmRpdG8tc3Bpbm5lcih2LWlmPVwiaXNMb2FkaW5nXCIpXG4gICAgc2xvdFxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWhlYWRlclxuICAgIGJhY2tncm91bmQ6ICRjb2xvci1ibGFja1xuICAgIGZvbnQtc2l6ZTogJG1lbnUtZm9udC1zaXplXG4gICAgbGluZS1oZWlnaHQ6ICRtZW51LWxpbmUtaGVpZ2h0XG4gICAgei1pbmRleDogJG1lbnUtei1pbmRleFxuICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIHNwYW5cbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgcGFkZGluZzogJG1lbnUtcGFkZGluZ1xuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgIC5kaXRvLXRyYWlsXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgICBoZWlnaHQ6IDNlbVxuICAgICAgd2lkdGg6IDEwMCVcbiAgICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGggKyAkY29udGVudC1wYWRkaW5nXG4gICAgICB1bFxuICAgICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBhXG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwLjRlbVxuICAgICAgICAkYW5nbGU6IDMzZGVnXG4gICAgICAgICY6aG92ZXJcbiAgICAgICAgICBjb2xvcjogIzk5OVxuICAgICAgICAmOjpiZWZvcmUsXG4gICAgICAgICY6OmFmdGVyXG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICAgICAgY29udGVudDogJydcbiAgICAgICAgICB3aWR0aDogMXB4XG4gICAgICAgICAgaGVpZ2h0OiAxLjJlbVxuICAgICAgICAgIHJpZ2h0OiAtMXB4XG4gICAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWRhcmtcbiAgICAgICAgJjo6YmVmb3JlXG4gICAgICAgICAgdG9wOiA1MCVcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgkYW5nbGUpXG4gICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogdG9wXG4gICAgICAgICY6OmFmdGVyXG4gICAgICAgICAgYm90dG9tOiA1MCVcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtJGFuZ2xlKVxuICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGJvdHRvbVxuICAgIC5kaXRvLXNwaW5uZXJcbiAgICAgIG1hcmdpbi10b3A6ICRtZW51LXBhZGRpbmctdmVyXG4gICAgLmRpdG8tZGlydHlcbiAgICAgICY6YWZ0ZXJcbiAgICAgICAgY29udGVudDogJydcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci13aGl0ZVxuICAgICAgICB3aWR0aDogOHB4XG4gICAgICAgIGhlaWdodDogOHB4XG4gICAgICAgIG1hcmdpbjogMnB4XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwLjVlbVxuICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlXG4gICAgLmRpdG8tYWNjb3VudCxcbiAgICAuZGl0by1sb2dpblxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICB0b3A6IDBcbiAgICAgIGN1cnNvcjogcG9pbnRlclxuICAgIC5kaXRvLWFjY291bnRcbiAgICAgIGxlZnQ6ICRjb250ZW50LXdpZHRoICsgJGNvbnRlbnQtcGFkZGluZyAqIDJcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFB1bHNlTG9hZGVyIGZyb20gJ3Z1ZS1zcGlubmVyL3NyYy9QdWxzZUxvYWRlci52dWUnXG5cbmNvbnN0IFNwaW5uZXIgPSBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnc3Bpbm5lcicsIFB1bHNlTG9hZGVyKVxuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8taGVhZGVyJywge1xuICBjb21wb25lbnRzOiB7IFNwaW5uZXIgfSxcblxuICBwcm9wczoge1xuICAgIHNwaW5uZXI6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9LFxuICAgIGlzTG9hZGluZzoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdHJhaWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcHBTdGF0ZS5yb3V0ZUNvbXBvbmVudHMuZmlsdGVyKFxuICAgICAgICBjb21wb25lbnQgPT4gISFjb21wb25lbnQucm91dGVSZWNvcmRcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICBjb25zdCB7XG4gICAgICBzaXplID0gJzhweCcsXG4gICAgICBjb2xvciA9ICcjOTk5J1xuICAgIH0gPSB0aGlzLnNwaW5uZXIgfHwge31cbiAgICBjb25zdCB7IHByb3BzIH0gPSBTcGlubmVyLm9wdGlvbnNcbiAgICBwcm9wcy5zaXplLmRlZmF1bHQgPSBzaXplXG4gICAgcHJvcHMuY29sb3IuZGVmYXVsdCA9IGNvbG9yXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldEJyZWFkY3J1bWJDbGFzcyhjb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWRpcnR5JzogY29tcG9uZW50LmlzRGlydHlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCBEb21NaXhpbiBmcm9tICcuL0RvbU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHVsbGRvd246IHtcbiAgICAgICAgb3BlbjogZmFsc2UsXG4gICAgICAgIHN0YXJ0VGltZTogMCxcbiAgICAgICAgY2hlY2tUaW1lOiB0cnVlLFxuICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICBtb3VzZWRvd246ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5wdWxsZG93bi5oYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBtb3VzZXVwOiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5vblB1bGxkb3duTW91c2VVcChudWxsKSkge1xuICAgICAgICAgICAgICB0aGlzLnB1bGxkb3duLmhhbmRsZXJzLnJlbW92ZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBoYW5kbGVyczogbnVsbFxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25QdWxsZG93bk1vdXNlRG93bih2YWx1ZSkge1xuICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICB0aGlzLnNldFB1bGxkb3duT3Blbih0cnVlKVxuICAgICAgICB0aGlzLmNoZWNrVGltZSA9IHRydWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2hlY2tUaW1lID0gZmFsc2VcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93bk1vdXNlVXAodmFsdWUpIHtcbiAgICAgIGNvbnN0IHsgc3RhcnRUaW1lIH0gPSB0aGlzLnB1bGxkb3duXG4gICAgICBpZiAoIXRoaXMuY2hlY2tUaW1lIHx8IHN0YXJ0VGltZSAmJiAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA+IDI1MCkpIHtcbiAgICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIHRoaXMub25QdWxsZG93blNlbGVjdCh2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duU2VsZWN0KC8qIHZhbHVlICovKSB7XG4gICAgICAvLyBOT1RFOiBUbyBiZSBvdmVycmlkZGVuLlxuICAgIH0sXG5cbiAgICBzZXRQdWxsZG93bk9wZW4ob3Blbikge1xuICAgICAgdGhpcy5wdWxsZG93bi5vcGVuID0gb3BlblxuICAgICAgdGhpcy5wdWxsZG93bi5zdGFydFRpbWUgPSBvcGVuID8gRGF0ZS5ub3coKSA6IDBcbiAgICAgIGlmIChvcGVuKSB7XG4gICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMgPSB0aGlzLmRvbU9uKGRvY3VtZW50LCB0aGlzLnB1bGxkb3duLmV2ZW50cylcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIlxuLmRpdG8tYWNjb3VudFxuICBhKFxuICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24oKVwiXG4gIClcbiAgICBzcGFuIHt7IHVzZXIudXNlcm5hbWUgfX1cbiAgdWwuZGl0by1wdWxsZG93bihcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiBwdWxsZG93bi5vcGVuIH1cIlxuICApXG4gICAgbGkoXG4gICAgICB2LWZvcj1cIihsYWJlbCwgdmFsdWUpIG9mIGl0ZW1zXCJcbiAgICApXG4gICAgICBhKFxuICAgICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKHZhbHVlKVwiXG4gICAgICAgIEBtb3VzZXVwPVwib25QdWxsZG93bk1vdXNlVXAodmFsdWUpXCJcbiAgICAgICkge3sgbGFiZWwgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWFjY291bnRcbiAgICBhKFxuICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgICApXG4gICAgICBzcGFuIHt7IHVzZXIudXNlcm5hbWUgfX1cbiAgICB1bC5kaXRvLXB1bGxkb3duKFxuICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogcHVsbGRvd24ub3BlbiB9XCJcbiAgICApXG4gICAgICBsaShcbiAgICAgICAgdi1mb3I9XCIobGFiZWwsIHZhbHVlKSBvZiBpdGVtc1wiXG4gICAgICApXG4gICAgICAgIGEoXG4gICAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih2YWx1ZSlcIlxuICAgICAgICAgIEBtb3VzZXVwPVwib25QdWxsZG93bk1vdXNlVXAodmFsdWUpXCJcbiAgICAgICAgKSB7eyBsYWJlbCB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWFjY291bnRcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAuZGl0by1wdWxsZG93blxuICAgICAgdG9wOiAkcHVsbGRvd24tcGFkZGluZy12ZXJcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFB1bGxkb3duTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1B1bGxkb3duTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1hY2NvdW50Jywge1xuICBtaXhpbnM6IFtQdWxsZG93bk1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpdGVtczoge1xuICAgICAgICBzZXR0aW5nczogJ1NldHRpbmdzJyxcbiAgICAgICAgbG9nb3V0OiAnTG9nb3V0J1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25QdWxsZG93blNlbGVjdCh2YWx1ZSkge1xuICAgICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgY2FzZSAnbG9nb3V0JzpcbiAgICAgICAgdGhpcy5yb290Q29tcG9uZW50LmxvZ291dCgpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdzZXR0aW5ncyc6XG4gICAgICAgIGNvbnNvbGUuaW5mbygnVE9ETzogSW1wbGVtZW50IFNldHRpbmdzJylcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuZm9ybS5kaXRvLWRpYWxvZyhAc3VibWl0LnByZXZlbnQ9XCJzdWJtaXRcIilcbiAgZGl0by1zY2hlbWEuZGl0by1zY3JvbGwoXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgKVxuICAgIGRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBmb3JtLmRpdG8tZGlhbG9nKEBzdWJtaXQucHJldmVudD1cInN1Ym1pdFwiKVxuICAgIGRpdG8tc2NoZW1hLmRpdG8tc2Nyb2xsKFxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YT1cImRpYWxvZ0RhdGFcIlxuICAgIClcbiAgICAgIGRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICAgIHNsb3Q9XCJidXR0b25zXCJcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAudi0tbW9kYWwtb3ZlcmxheVxuICAgIHotaW5kZXg6IDIwMDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBhZGRFdmVudHMgfSBmcm9tICdAZGl0b2pzL3VpJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldEJ1dHRvblNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1kaWFsb2cnLCB7XG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRkaWFsb2dDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBjb21wb25lbnRzOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwcm9taXNlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICAvLyBNYWtlIHN1cmUgZGlhbG9nIGRhdGEgY29udGFpbnMgYWxsIHRoZSBleHBlY3RlZCBrZXlzXG4gICAgY29uc3QgZGlhbG9nRGF0YSA9IGNsb25lKHRoaXMuZGF0YSlcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgIGlmICghKGtleSBpbiBkaWFsb2dEYXRhKSkge1xuICAgICAgICBkaWFsb2dEYXRhW2tleV0gPSBudWxsXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB3aW5kb3dFdmVudHM6IG51bGwsXG4gICAgICBkaWFsb2dEYXRhXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZGlhbG9nQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgbmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYXJlbnQubmFtZVxuICAgIH0sXG5cbiAgICBzY2hlbWEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb21wb25lbnRzOiB0aGlzLmNvbXBvbmVudHNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGdldEJ1dHRvblNjaGVtYXModGhpcy5idXR0b25zKSkubWFwKFxuICAgICAgICAgIC8vIFByb2Nlc3MgdGhlIGJ1dHRvbiBzY2hlbWFzIHRvIGFkZCBkZWZhdWx0IGNsaWNrIGV2ZW50c1xuICAgICAgICAgIC8vIGZvciBib3RoICdzdWJtaXQnIGFuZCAnY2FuY2VsJyBidXR0b25zOlxuICAgICAgICAgIChba2V5LCBzY2hlbWFdKSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnY2FuY2VsJyAmJiAhc2NoZW1hLmV2ZW50cykge1xuICAgICAgICAgICAgICBzY2hlbWEgPSB7XG4gICAgICAgICAgICAgICAgLi4uc2NoZW1hLFxuICAgICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgICAgY2xpY2s6ICgpID0+IHRoaXMuY2FuY2VsKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBba2V5LCBzY2hlbWFdXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGhhc0NhbmNlbCgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuYnV0dG9uU2NoZW1hcy5jYW5jZWxcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLndpbmRvd0V2ZW50cyA9IGFkZEV2ZW50cyh3aW5kb3csIHtcbiAgICAgIGtleXVwOiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmhhc0NhbmNlbCAmJiBldmVudC5rZXlDb2RlID09PSAyNykge1xuICAgICAgICAgIHRoaXMuY2FuY2VsKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgZGVzdHJveWVkKCkge1xuICAgIHRoaXMud2luZG93RXZlbnRzLnJlbW92ZSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhpZGUoKSB7XG4gICAgICB0aGlzLiRtb2RhbC5oaWRlKHRoaXMubmFtZSlcbiAgICB9LFxuXG4gICAgcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgdGhpcy5wcm9taXNlLnJlc29sdmUodmFsdWUpXG4gICAgICB0aGlzLmhpZGUoKVxuICAgIH0sXG5cbiAgICByZWplY3QodmFsdWUpIHtcbiAgICAgIHRoaXMucHJvbWlzZS5yZWplY3QodmFsdWUpXG4gICAgICB0aGlzLmhpZGUoKVxuICAgIH0sXG5cbiAgICBzdWJtaXQoKSB7XG4gICAgICB0aGlzLnJlc29sdmUodGhpcy5kaWFsb2dEYXRhKVxuICAgIH0sXG5cbiAgICBjYW5jZWwoKSB7XG4gICAgICB0aGlzLnJlc29sdmUobnVsbClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuY29tcG9uZW50KFxuICB2LWlmPVwiY29udGVudFwiXG4gIDppcz1cIm9wdGlvbnMudGFnIHx8IHRhZ1wiXG4gIDpjbGFzcz1cImNsYXNzZXNcIlxuICA6c3R5bGU9XCJzdHlsZXNcIlxuKSB7eyBvcHRpb25zLnRleHQgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGNvbXBvbmVudChcbiAgICB2LWlmPVwiY29udGVudFwiXG4gICAgOmlzPVwib3B0aW9ucy50YWcgfHwgdGFnXCJcbiAgICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgICA6c3R5bGU9XCJzdHlsZXNcIlxuICApIHt7IG9wdGlvbnMudGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tZWxlbWVudCcsIHtcbiAgcHJvcHM6IHtcbiAgICB0YWc6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc3BhbicgfSxcbiAgICBjb250ZW50OiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0gfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgb3B0aW9ucygpIHtcbiAgICAgIGNvbnN0IHsgY29udGVudCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KGNvbnRlbnQpID8gY29udGVudCA6IHsgdGV4dDogY29udGVudCB9XG4gICAgfSxcblxuICAgIGNsYXNzZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLiRhdHRycy5jbGFzcyxcbiAgICAgICAgLi4uYXNPYmplY3QodGhpcy5vcHRpb25zLmNsYXNzKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdHlsZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLiRhdHRycy5zdHlsZSxcbiAgICAgICAgLi4uYXNPYmplY3QodGhpcy5vcHRpb25zLnN0eWxlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcblxuZnVuY3Rpb24gYXNPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLnJlZHVjZSgob2JqZWN0LCBlbnRyeSkgPT4ge1xuICAgIGlmIChpc1N0cmluZyhlbnRyeSkpIHtcbiAgICAgIG9iamVjdFtlbnRyeV0gPSB0cnVlXG4gICAgfSBlbHNlIGlmIChpc09iamVjdChlbnRyeSkpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ob2JqZWN0LCBlbnRyeSlcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdFxuICB9LCB7fSlcbn1cblxuPC9zY3JpcHQ+XG4iLCJcbmNvbXBvbmVudC5kaXRvLWxhYmVsKFxuICB2LWlmPVwidGV4dCB8fCBjb2xsYXBzaWJsZVwiXG4gIDppcz1cInRhZ1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIlxuKVxuICAuZGl0by1jaGV2cm9uKFxuICAgIHYtaWY9XCJjb2xsYXBzaWJsZVwiXG4gICAgOmNsYXNzPVwieyAnZGl0by1vcGVuZWQnOiAhY29sbGFwc2VkIH1cIlxuICApXG4gIGRpdG8tZWxlbWVudC5kaXRvLWxhYmVsLXByZWZpeChcbiAgICB2LWZvcj1cIihwcmVmaXgsIGluZGV4KSBvZiBwcmVmaXhlc1wiXG4gICAgdGFnPVwic3BhblwiXG4gICAgOmtleT1cImBwcmVmaXgtJHtpbmRleH1gXCJcbiAgICA6Y29udGVudD1cInByZWZpeFwiXG4gIClcbiAgbGFiZWwoOmZvcj1cImRhdGFQYXRoXCIgdi1odG1sPVwidGV4dFwiKVxuICBkaXRvLWVsZW1lbnQuZGl0by1sYWJlbC1zdWZmaXgoXG4gICAgdi1mb3I9XCIoc3VmZml4LCBpbmRleCkgb2Ygc3VmZml4ZXNcIlxuICAgIHRhZz1cInNwYW5cIlxuICAgIDprZXk9XCJgc3VmZml4LSR7aW5kZXh9YFwiXG4gICAgOmNvbnRlbnQ9XCJzdWZmaXhcIlxuICApXG4gIHNsb3QobmFtZT1cImVkaXQtYnV0dG9uc1wiKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgY29tcG9uZW50LmRpdG8tbGFiZWwoXG4gICAgdi1pZj1cInRleHQgfHwgY29sbGFwc2libGVcIlxuICAgIDppcz1cInRhZ1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCJcbiAgKVxuICAgIC5kaXRvLWNoZXZyb24oXG4gICAgICB2LWlmPVwiY29sbGFwc2libGVcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuZWQnOiAhY29sbGFwc2VkIH1cIlxuICAgIClcbiAgICBkaXRvLWVsZW1lbnQuZGl0by1sYWJlbC1wcmVmaXgoXG4gICAgICB2LWZvcj1cIihwcmVmaXgsIGluZGV4KSBvZiBwcmVmaXhlc1wiXG4gICAgICB0YWc9XCJzcGFuXCJcbiAgICAgIDprZXk9XCJgcHJlZml4LSR7aW5kZXh9YFwiXG4gICAgICA6Y29udGVudD1cInByZWZpeFwiXG4gICAgKVxuICAgIGxhYmVsKDpmb3I9XCJkYXRhUGF0aFwiIHYtaHRtbD1cInRleHRcIilcbiAgICBkaXRvLWVsZW1lbnQuZGl0by1sYWJlbC1zdWZmaXgoXG4gICAgICB2LWZvcj1cIihzdWZmaXgsIGluZGV4KSBvZiBzdWZmaXhlc1wiXG4gICAgICB0YWc9XCJzcGFuXCJcbiAgICAgIDprZXk9XCJgc3VmZml4LSR7aW5kZXh9YFwiXG4gICAgICA6Y29udGVudD1cInN1ZmZpeFwiXG4gICAgKVxuICAgIHNsb3QobmFtZT1cImVkaXQtYnV0dG9uc1wiKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWxhYmVsXG4gICAgLS1sYWJlbC1wYWRkaW5nOiAwXG4gICAgLy8gRm9yIGJ1dHRvbnMgYW5kIGNoZXZyb24gdG8gYWxpZ24gcmlnaHQ6XG4gICAgZGlzcGxheTogZmxleFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIC8vIFZlcnRpY2FsbHkgY2VudGVyIGFsbCBpdGVtcyBpbiB0aGUgbGFiZWwsIGUuZy4gY2hldnJvbiwgZWRpdC1idXR0b25zLlxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXJcbiAgICBwYWRkaW5nOiB2YXIoLS1sYWJlbC1wYWRkaW5nKVxuICAgIG1hcmdpbjogMCAwICRmb3JtLXNwYWNpbmctaGFsZiAwXG5cbiAgICBsYWJlbFxuICAgICAgZGlzcGxheTogaW5saW5lXG4gICAgICBjdXJzb3I6IGluaGVyaXRcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkXG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG5cbiAgICBsYWJlbCxcbiAgICAuZGl0by1sYWJlbC1wcmVmaXgsXG4gICAgLmRpdG8tbGFiZWwtc3VmZml4XG4gICAgICAmOm50aC1sYXN0LWNoaWxkKDIpXG4gICAgICAgIC8vIFRvIHN0cmV0Y2ggZWl0aGVyIGxhYmVsIG9yIC5kaXRvLWxhYmVsLXN1ZmZpeCB0byBmdWxsIGF2YWlsYWJsZSB3aWR0aFxuICAgICAgICAvLyBzbyB0aGF0IGJ1dHRvbnMgYWx3YXlzIGFwcGVhciByaWdodC1hbGlnbmVkOlxuICAgICAgICBmbGV4OiAxIDEgYXV0b1xuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgY29udGVudDogJ1xcYTAnIC8vICZuYnBzO1xuXG4gICAgLmRpdG8tbGFiZWwtcHJlZml4LFxuICAgIC5kaXRvLWxhYmVsLXN1ZmZpeFxuICAgICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgICArZWxsaXBzaXNcblxuICAgIC5kaXRvLWJ1dHRvbnNcbiAgICAgIC8vIE1vdmUgdGhlIGxhYmVsIHBhZGRpbmcgaW5zaWRlIC5kaXRvLWJ1dHRvbnMsIHNvIHRoYXQgaXQgY2FwdHVyZXMgYWxsXG4gICAgICAvLyBuZWFyIG1vdXNlIGV2ZW50czpcbiAgICAgIG1hcmdpbjogY2FsYygtMSAqIHZhcigtLWxhYmVsLXBhZGRpbmcpKVxuICAgICAgbWFyZ2luLWxlZnQ6IDBcbiAgICAgIHBhZGRpbmc6IHZhcigtLWxhYmVsLXBhZGRpbmcpXG5cbiAgICAmLmRpdG8td2lkdGgtZmlsbFxuICAgICAgd2lkdGg6IDEwMCVcbiAgICAgIC8vIEluIG9yZGVyIGZvciBlbGxpcHNpcyB0byB3b3JrIG9uIGxhYmVscyB3aXRob3V0IGFmZmVjdGluZyBvdGhlciBsYXlvdXQsXG4gICAgICAvLyB3ZSBuZWVkIHRvIHBvc2l0aW9uIGl0IGFic29sdXRlbHkgaW5zaWRlIGl0cyBjb250YWluZXIuXG4gICAgICBsYWJlbFxuICAgICAgICArZWxsaXBzaXNcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICAgIG1heC13aWR0aDogMTAwJVxuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgLy8gU2luY2UgPGxhYmVsPiB1c2VzIGBwb3NpdGlvbjogYWJzb2x1dGVgLCBzZXQgY29udGVudCB0byBhIHplcm8td2lkdGhcbiAgICAgICAgLy8gc3BhY2Ugb24gaXRzIHBhcmVudCB0byBlbmZvcmNlIHRoZSByaWdodCB0ZXh0IGhlaWdodCBpbiB0aGUgY29udGFpbmVyXG4gICAgICAgIGNvbnRlbnQ6ICdcXDIwMGInIC8vIHplcm8td2lkdGggc3BhY2VcblxuICBhLmRpdG8tbGFiZWxcbiAgICAmOmhvdmVyXG4gICAgICAuZGl0by1jaGV2cm9uXG4gICAgICAgIGNvbG9yOiAkY29sb3ItZGFya2VyXG4gICAgJjpmb2N1czpub3QoOmFjdGl2ZSk6bm90KC5kaXRvLWFjdGl2ZSlcbiAgICAgIC5kaXRvLWNoZXZyb25cbiAgICAgICAgLXdlYmtpdC10ZXh0LXN0cm9rZTogJGJvcmRlci13aWR0aCAkY29sb3ItYWN0aXZlXG5cbiAgLy8gRGlzcGxheSBsYWJlbHMgaW4gY29tcGFjdCBzY2hlbWEgYXMgaW5saW5lLWJsb2NrcywgdG8gYWxsb3cgY29tcGFjdCBsYXlvdXRzXG4gIC8vIHdpdGggYHdpZHRoOiAnYXV0bydgIGVsZW1lbnRzOlxuICAvLyBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byBjb250cm9sIHRoaXMgYmVoYXZpb3IuXG4gIC5kaXRvLXNjaGVtYS1jb21wYWN0XG4gICAgPiAuZGl0by1zY2hlbWEtY29udGVudFxuICAgICAgPiAuZGl0by1wYW5lXG4gICAgICAgID4gLmRpdG8tY29udGFpbmVyXG4gICAgICAgICAgPiAuZGl0by1sYWJlbDpub3QoLmRpdG8tbGFiZWwtY29tcG9uZW50KVxuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWxhYmVsJywge1xuICBwcm9wczoge1xuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBjb2xsYXBzZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0YWcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb2xsYXBzaWJsZSA/ICdhJyA6ICdkaXYnXG4gICAgfSxcblxuICAgIHRleHQoKSB7XG4gICAgICBjb25zdCB7IGxhYmVsIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNPYmplY3QobGFiZWwpID8gbGFiZWw/LnRleHQgOiBsYWJlbFxuICAgIH0sXG5cbiAgICBwcmVmaXhlcygpIHtcbiAgICAgIHJldHVybiBhc0FycmF5KHRoaXMubGFiZWw/LnByZWZpeClcbiAgICB9LFxuXG4gICAgc3VmZml4ZXMoKSB7XG4gICAgICByZXR1cm4gYXNBcnJheSh0aGlzLmxhYmVsPy5zdWZmaXgpXG4gICAgfSxcblxuICAgIGxpc3RlbmVycygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLih0aGlzLmNvbGxhcHNpYmxlICYmIHtcbiAgICAgICAgICBjbGljazogdGhpcy5vbkNsaWNrXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGlzQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPT09IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uQ2xpY2soKSB7XG4gICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gdGhpc1xuICAgICAgdGhpcy4kZW1pdCgnZXhwYW5kJywgdGhpcy5jb2xsYXBzZWQpXG4gICAgfVxuICB9XG59KVxuXG48L3NjcmlwdD5cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7XG4gIGdldEl0ZW1Gb3JtU2NoZW1hLCBnZXRJdGVtSWQsIGdldEl0ZW1VaWQsIGlzTGlzdFNvdXJjZVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtZXRob2RzOiB7XG4gICAgZ2V0SXRlbUZvcm1TY2hlbWEsXG5cbiAgICBnZXRJdGVtVWlkLFxuXG4gICAgZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSwgaW5kZXggPSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1RyYW5zaWVudCAmJiBpbmRleCAhPT0gbnVsbFxuICAgICAgICA/IFN0cmluZyhpbmRleClcbiAgICAgICAgOiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKVxuICAgIH0sXG5cbiAgICBnZXRJdGVtRGF0YVBhdGgoc291cmNlU2NoZW1hLCBpbmRleCkge1xuICAgICAgbGV0IHsgZGF0YVBhdGggfSA9IHRoaXNcbiAgICAgIGlmIChzb3VyY2VTY2hlbWEgIT09IHRoaXMuc2NoZW1hKSB7XG4gICAgICAgIGRhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHNvdXJjZVNjaGVtYS5uYW1lKVxuICAgICAgfVxuICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgZGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgaW5kZXgpXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgZmluZEl0ZW1JZEluZGV4KHNvdXJjZVNjaGVtYSwgZGF0YSwgaXRlbUlkKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuaXNUcmFuc2llbnRcbiAgICAgICAgLy8gRm9yIHRyYW5zaWVudCBkYXRhLCB0aGUgaW5kZXggaXMgdXNlZCBhcyB0aGUgaWRcbiAgICAgICAgPyBpdGVtSWRcbiAgICAgICAgOiBkYXRhPy5maW5kSW5kZXgoXG4gICAgICAgICAgKGl0ZW0sIGluZGV4KSA9PlxuICAgICAgICAgICAgdGhpcy5nZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtLCBpbmRleCkgPT09IGl0ZW1JZFxuICAgICAgICApXG4gICAgICByZXR1cm4gaW5kZXggIT09IC0xID8gaW5kZXggOiBudWxsXG4gICAgfSxcblxuICAgIGdldEl0ZW1MYWJlbChzb3VyY2VTY2hlbWEsIGl0ZW0sIHtcbiAgICAgIGluZGV4ID0gbnVsbCxcbiAgICAgIGV4dGVuZGVkID0gZmFsc2UsXG4gICAgICBhc09iamVjdCA9IGZhbHNlXG4gICAgfSA9IHt9KSB7XG4gICAgICBjb25zdCB7IGl0ZW1MYWJlbCB9ID0gc291cmNlU2NoZW1hXG4gICAgICBpZiAoIWl0ZW0gfHwgIWV4dGVuZGVkICYmIGl0ZW1MYWJlbCA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cblxuICAgICAgbGV0IGRhdGFQYXRoXG4gICAgICBjb25zdCBnZXREYXRhUGF0aCA9ICgpID0+XG4gICAgICAgIChkYXRhUGF0aCB8fD0gdGhpcy5nZXRJdGVtRGF0YVBhdGgoc291cmNlU2NoZW1hLCBpbmRleCkpXG5cbiAgICAgIGxldCBmb3JtTGFiZWxcbiAgICAgIGNvbnN0IGdldEZvcm1MYWJlbCA9ICgpID0+XG4gICAgICAgIChmb3JtTGFiZWwgfHw9IHRoaXMuZ2V0TGFiZWwoXG4gICAgICAgICAgZ2V0SXRlbUZvcm1TY2hlbWEoc291cmNlU2NoZW1hLCBpdGVtLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICkpXG5cbiAgICAgIGxldCB0ZXh0XG4gICAgICBsZXQgcHJlZml4XG4gICAgICBsZXQgc3VmZml4XG4gICAgICBpZiAoaXNGdW5jdGlvbihpdGVtTGFiZWwpKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gaXRlbUxhYmVsLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgICAgbmVzdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgICAgICB2YWx1ZTogaXRlbSxcbiAgICAgICAgICAgIGluZGV4LFxuXG4gICAgICAgICAgICBnZXQgZGF0YVBhdGgoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXREYXRhUGF0aCgpXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBnZXQgZm9ybUxhYmVsKCkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0Rm9ybUxhYmVsKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIGlmIChpc09iamVjdChsYWJlbCkpIHtcbiAgICAgICAgICAoeyB0ZXh0LCBwcmVmaXgsIHN1ZmZpeCB9ID0gbGFiZWwpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGV4dCA9IGxhYmVsXG4gICAgICAgIH1cbiAgICAgICAgLy8gSXQncyB1cCB0byBgaXRlbUxhYmVsKClgIGVudGlyZWx5IHRvIHByb2R1Y2UgdGhlIGxhYmVsOlxuICAgICAgICBleHRlbmRlZCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBMb29rIHVwIHRoZSBuYW1lIG9uIHRoZSBpdGVtLCBieSB0aGVzZSBydWxlczpcbiAgICAgICAgLy8gMS4gSWYgYGl0ZW1MYWJlbGAgaXMgYSBzdHJpbmcsIHVzZSBpdCBhcyB0aGUgcHJvcGVydHkga2V5XG4gICAgICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgdGhlcmUgYXJlIGNvbHVtbnMsIHVzZSB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0XG4gICAgICAgIC8vIDMuIE90aGVyd2lzZSwgc2VlIGlmIHRoZSBpdGVtIGhhcyBhIHByb3BlcnR5IG5hbWVkICduYW1lJ1xuICAgICAgICBjb25zdCB7IGNvbHVtbnMgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgICBjb25zdCBrZXkgPSAoXG4gICAgICAgICAgaXNTdHJpbmcoaXRlbUxhYmVsKSAmJiBpdGVtTGFiZWwgfHxcbiAgICAgICAgICBpc0xpc3RTb3VyY2Uoc291cmNlU2NoZW1hKSAmJiBjb2x1bW5zICYmIE9iamVjdC5rZXlzKGNvbHVtbnMpWzBdIHx8XG4gICAgICAgICAgJ25hbWUnXG4gICAgICAgIClcbiAgICAgICAgdGV4dCA9IGl0ZW1ba2V5XVxuICAgICAgfVxuICAgICAgY29uc3QgaGFkTGFiZWwgPSAhIXRleHRcbiAgICAgIHRleHQgfHw9ICcnXG4gICAgICAvLyBJZiBubyBsYWJlbCB3YXMgZm91bmQgc28gZmFyLCB0cnkgdG8gcHJvZHVjZSBvbmUgZnJvbSB0aGVpbmRleC5cbiAgICAgIGlmICghdGV4dCkge1xuICAgICAgICAvLyBBbHdheXMgdXNlIGV4dGVuZGVkIHN0eWxlIHdoZW4gYXV0by1nZW5lcmF0aW5nIGxhYmVscyBmcm9tIGluZGV4L2lkOlxuICAgICAgICBleHRlbmRlZCA9IHRydWVcbiAgICAgICAgaWYgKGlzTGlzdFNvdXJjZShzb3VyY2VTY2hlbWEpICYmIGluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgICAgdGV4dCA9IGAke2luZGV4ICsgMX1gXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChleHRlbmRlZCkge1xuICAgICAgICBjb25zdCBmb3JtTGFiZWwgPSBnZXRGb3JtTGFiZWwoKVxuICAgICAgICBpZiAoZm9ybUxhYmVsKSB7XG4gICAgICAgICAgLy8gSWYgYSBsYWJlbCB3YXMgcHJvdmlkZWQsIHB1dCBpbiBxdW90ZXMgd2hlbiBwcmVmaXhlZCB3aXRoIHRoZVxuICAgICAgICAgIC8vIGZvcm0gbGFiZWwgZm9yIHRoZSBleHRlbmRlZCBzdHlsZTpcbiAgICAgICAgICB0ZXh0ID0gYCR7Zm9ybUxhYmVsfSAke2hhZExhYmVsID8gYCcke3RleHR9J2AgOiB0ZXh0fWBcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFzT2JqZWN0ID8geyB0ZXh0LCBwcmVmaXgsIHN1ZmZpeCB9IDogdGV4dFxuICAgIH1cbiAgfVxufVxuIiwiXG4uZGl0by1zY2hlbWFcbiAgLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAuZGl0by1zY2hlbWEtaGVhZGVyKFxuICAgICAgdi1pZj1cImhhc0xhYmVsIHx8IGhhc1RhYnMgfHwgY2xpcGJvYXJkXCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLW1lbnUtaGVhZGVyJzogbWVudUhlYWRlciB9XCJcbiAgICApXG4gICAgICBkaXRvLWxhYmVsKFxuICAgICAgICB2LWlmPVwiaGFzTGFiZWxcIlxuICAgICAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICA6Y29sbGFwc2VkPVwiIW9wZW5lZFwiXG4gICAgICAgIEBleHBhbmQ9XCJvbkV4cGFuZFwiXG4gICAgICApXG4gICAgICAgIC8vIFBhc3MgZWRpdC1idXR0b25zIHRocm91Z2ggdG8gZGl0by1sYWJlbCdzIG93biBlZGl0LWJ1dHRvbnMgc2xvdDpcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgI2VkaXQtYnV0dG9uc1xuICAgICAgICAgIHYtaWY9XCJpbmxpbmVkXCJcbiAgICAgICAgKVxuICAgICAgICAgIHNsb3QobmFtZT1cImVkaXQtYnV0dG9uc1wiKVxuICAgICAgZGl0by10YWJzKFxuICAgICAgICB2LWlmPVwidGFic1wiXG4gICAgICAgIDp0YWJzPVwidGFic1wiXG4gICAgICAgIDpzZWxlY3RlZFRhYj1cInNlbGVjdGVkVGFiXCJcbiAgICAgIClcbiAgICAgIGRpdG8tY2xpcGJvYXJkKFxuICAgICAgICA6Y2xpcGJvYXJkPVwiY2xpcGJvYXJkXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgKVxuICAgIGRpdG8tcGFuZS5kaXRvLXBhbmUtdGFiKFxuICAgICAgdi1pZj1cImhhc1RhYnNcIlxuICAgICAgdi1mb3I9XCIoc2NoZW1hLCB0YWIpIGluIHRhYnNcIlxuICAgICAgcmVmPVwidGFic1wiXG4gICAgICA6a2V5PVwidGFiXCJcbiAgICAgIDp2aXNpYmxlPVwic2VsZWN0ZWRUYWIgPT09IHRhYlwiXG4gICAgICA6dGFiPVwidGFiXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6c2luZ2xlPVwiIWlubGluZWQgJiYgIWhhc01haW5QYW5lXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICApXG4gICAgdHJhbnNpdGlvbi1oZWlnaHQoXG4gICAgICA6ZW5hYmxlZD1cImlubGluZWRcIlxuICAgIClcbiAgICAgIGRpdG8tcGFuZS5kaXRvLXBhbmUtbWFpbihcbiAgICAgICAgdi1pZj1cImhhc01haW5QYW5lICYmIG9wZW5lZFwiXG4gICAgICAgIHJlZj1cImNvbXBvbmVudHNcIlxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzVGFic1wiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgKVxuICAgIHNsb3QoXG4gICAgICBuYW1lPVwiYnV0dG9uc1wiXG4gICAgICB2LWlmPVwiIWlubGluZWQgJiYgaXNQb3B1bGF0ZWRcIlxuICAgIClcbiAgdGVtcGxhdGUodi1pZj1cImlubGluZWRcIilcbiAgICBzbG90KFxuICAgICAgdi1pZj1cIiFoYXNMYWJlbFwiXG4gICAgICBuYW1lPVwiZWRpdC1idXR0b25zXCJcbiAgICApXG4gIHRlbXBsYXRlKHYtZWxzZS1pZj1cImlzUG9wdWxhdGVkXCIpXG4gICAgZGl0by1wYW5lbHMoXG4gICAgICA6cGFuZWxzPVwicGFuZWxTY2hlbWFzXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXNjaGVtYVxuICAgIC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICAuZGl0by1zY2hlbWEtaGVhZGVyKFxuICAgICAgICB2LWlmPVwiaGFzTGFiZWwgfHwgaGFzVGFicyB8fCBjbGlwYm9hcmRcIlxuICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNjaGVtYS1tZW51LWhlYWRlcic6IG1lbnVIZWFkZXIgfVwiXG4gICAgICApXG4gICAgICAgIGRpdG8tbGFiZWwoXG4gICAgICAgICAgdi1pZj1cImhhc0xhYmVsXCJcbiAgICAgICAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgICAgICA6Y29sbGFwc2VkPVwiIW9wZW5lZFwiXG4gICAgICAgICAgQGV4cGFuZD1cIm9uRXhwYW5kXCJcbiAgICAgICAgKVxuICAgICAgICAgIC8vIFBhc3MgZWRpdC1idXR0b25zIHRocm91Z2ggdG8gZGl0by1sYWJlbCdzIG93biBlZGl0LWJ1dHRvbnMgc2xvdDpcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgICNlZGl0LWJ1dHRvbnNcbiAgICAgICAgICAgIHYtaWY9XCJpbmxpbmVkXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBzbG90KG5hbWU9XCJlZGl0LWJ1dHRvbnNcIilcbiAgICAgICAgZGl0by10YWJzKFxuICAgICAgICAgIHYtaWY9XCJ0YWJzXCJcbiAgICAgICAgICA6dGFicz1cInRhYnNcIlxuICAgICAgICAgIDpzZWxlY3RlZFRhYj1cInNlbGVjdGVkVGFiXCJcbiAgICAgICAgKVxuICAgICAgICBkaXRvLWNsaXBib2FyZChcbiAgICAgICAgICA6Y2xpcGJvYXJkPVwiY2xpcGJvYXJkXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgKVxuICAgICAgZGl0by1wYW5lLmRpdG8tcGFuZS10YWIoXG4gICAgICAgIHYtaWY9XCJoYXNUYWJzXCJcbiAgICAgICAgdi1mb3I9XCIoc2NoZW1hLCB0YWIpIGluIHRhYnNcIlxuICAgICAgICByZWY9XCJ0YWJzXCJcbiAgICAgICAgOmtleT1cInRhYlwiXG4gICAgICAgIDp2aXNpYmxlPVwic2VsZWN0ZWRUYWIgPT09IHRhYlwiXG4gICAgICAgIDp0YWI9XCJ0YWJcIlxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzTWFpblBhbmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICAgIClcbiAgICAgIHRyYW5zaXRpb24taGVpZ2h0KFxuICAgICAgICA6ZW5hYmxlZD1cImlubGluZWRcIlxuICAgICAgKVxuICAgICAgICBkaXRvLXBhbmUuZGl0by1wYW5lLW1haW4oXG4gICAgICAgICAgdi1pZj1cImhhc01haW5QYW5lICYmIG9wZW5lZFwiXG4gICAgICAgICAgcmVmPVwiY29tcG9uZW50c1wiXG4gICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNUYWJzXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgICApXG4gICAgICBzbG90KFxuICAgICAgICBuYW1lPVwiYnV0dG9uc1wiXG4gICAgICAgIHYtaWY9XCIhaW5saW5lZCAmJiBpc1BvcHVsYXRlZFwiXG4gICAgICApXG4gICAgdGVtcGxhdGUodi1pZj1cImlubGluZWRcIilcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCIhaGFzTGFiZWxcIlxuICAgICAgICBuYW1lPVwiZWRpdC1idXR0b25zXCJcbiAgICAgIClcbiAgICB0ZW1wbGF0ZSh2LWVsc2UtaWY9XCJpc1BvcHVsYXRlZFwiKVxuICAgICAgZGl0by1wYW5lbHMoXG4gICAgICAgIDpwYW5lbHM9XCJwYW5lbFNjaGVtYXNcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1zY2hlbWFcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgLy8gVG8gZGlzcGxheSBzY2hlbWEgbmV4dCB0byBwYW5lbHM6XG4gICAgZGlzcGxheTogZmxleFxuICAgIG1pbi1oZWlnaHQ6IDEwMCVcbiAgICA+IC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICBmbGV4OiAxIDEgMTAwJVxuICAgICAgLy8gU28gdGhhdCBzY2hlbWEgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IHRvIHRoZSBib3R0b206XG4gICAgICBkaXNwbGF5OiBncmlkXG4gICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50XG4gICAgICA+ICo6b25seS1jaGlsZFxuICAgICAgICBncmlkLXJvdy1lbmQ6IG5vbmVcbiAgICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGhcbiAgICAgIHBhZGRpbmc6ICRjb250ZW50LXBhZGRpbmdcbiAgICA+IC5kaXRvLWJ1dHRvbnMsXG4gICAgPiAuZGl0by1wYW5lbHNcbiAgICAgIGZsZXg6IDEgMSAwJVxuICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmdcbiAgICA+IC5kaXRvLXBhbmVsc1xuICAgICAgcGFkZGluZzogJGNvbnRlbnQtcGFkZGluZyAkY29udGVudC1wYWRkaW5nICRjb250ZW50LXBhZGRpbmcgMFxuICAgIC8vIERpc3BsYXkgYSBydWxlciBiZXR3ZWVuIHRhYmJlZCBjb21wb25lbnRzIGFuZCB0b3dhcmRzIHRoZSAuZGl0by1idXR0b25zXG4gICAgLmRpdG8tcGFuZS10YWIgKyAuZGl0by1wYW5lLW1haW5cbiAgICAgICY6OmJlZm9yZVxuICAgICAgICAvLyBVc2UgYSBwc2V1ZG8gZWxlbWVudCB0byBkaXNwbGF5IGEgcnVsZXIgd2l0aCBwcm9wZXIgbWFyZ2luc1xuICAgICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgICBjb250ZW50OiAnJ1xuICAgICAgICB3aWR0aDogMTAwJVxuICAgICAgICBib3JkZXItYm90dG9tOiAkYm9yZGVyLXN0eWxlXG4gICAgICAgIC8vIEFkZCByZW1vdmVkICRmb3JtLXNwYWNpbmcgYWdhaW4gdG8gdGhlIHJ1bGVyXG4gICAgICAgIG1hcmdpbjogJGNvbnRlbnQtcGFkZGluZyAkZm9ybS1zcGFjaW5nLWhhbGYgJGZvcm0tc3BhY2luZy1oYWxmXG4gIC5kaXRvLXNjaGVtYS1oZWFkZXJcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuXG4gICAgLmRpdG8tdGFicyxcbiAgICAuZGl0by1jbGlwYm9hcmRcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kXG4gICAgLmRpdG8tY2xpcGJvYXJkXG4gICAgICAmOm9ubHktY2hpbGRcbiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG9cbiAgICAgIC5kaXRvLWJ1dHRvblxuICAgICAgICBtYXJnaW46IDAgMCAkdGFiLW1hcmdpbiAkdGFiLW1hcmdpblxuICAgICYuZGl0by1zY2hlbWEtbWVudS1oZWFkZXJcbiAgICAgIC8vIEJyaW5nIHRoZSB0YWJzIHVwIHRvIHRoZSBtZW51LlxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICBoZWlnaHQ6ICRtZW51LWhlaWdodFxuICAgICAgcGFkZGluZzogMCAkbWVudS1wYWRkaW5nLWhvclxuICAgICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aFxuICAgICAgdG9wOiAwXG4gICAgICBsZWZ0OiAwXG4gICAgICByaWdodDogMFxuICAgICAgei1pbmRleDogJG1lbnUtei1pbmRleFxuICAgICAgLy8gVHVybiBvZmYgcG9pbnRlciBldmVudHMgc28gdGhhdCBEaXRvVHJhaWwga2VlcHMgcmVjZWl2aW5nIGV2ZW50cy4uLlxuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmVcbiAgICAgIC8vIC4uLmJ1dCBhbGxvdyBpbnRlcmFjdGlvbiB3aXRoIHRoZSB0YWJzIGFuZCBidXR0b25zIChlLmcuIGNsaXBib2FyZClcbiAgICAgIC8vIGxheWVyZWQgb24gdG9wIG9mIERpdG9UcmFpbC5cbiAgICAgIC5kaXRvLXRhYnMsXG4gICAgICAuZGl0by1idXR0b25zXG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodFxuICAgICAgICBmb250LXNpemU6ICRtZW51LWZvbnQtc2l6ZVxuICAgIGJ1dHRvbi5kaXRvLWxhYmVsXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgLy8gQ2F0Y2ggYWxsIGNsaWNrcywgZXZlbiB3aGVuIGl0IHdvdWxkIGJlIHBhcnRpYWxseSBjb3ZlcmVkIGJ5IHNjaGVtYS5cbiAgICAgIHotaW5kZXg6IDFcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQge1xuICBpc09iamVjdCwgaXNBcnJheSwgaXNGdW5jdGlvbiwgaXNSZWdFeHAsXG4gIHBhcnNlRGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoLCBsYWJlbGl6ZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgVHJhbnNpdGlvbkhlaWdodCB9IGZyb20gJ0BkaXRvanMvdWknXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuLi9taXhpbnMvSXRlbU1peGluLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGgsIGdldFBhcmVudEl0ZW0gfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgZ2V0TmFtZWRTY2hlbWFzLCBnZXRQYW5lbFNjaGVtYXMsIHNldERlZmF1bHRzLCBwcm9jZXNzRGF0YVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRTdG9yZUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1zY2hlbWEnLCB7XG4gIGNvbXBvbmVudHM6IHsgVHJhbnNpdGlvbkhlaWdodCB9LFxuICBtaXhpbnM6IFtJdGVtTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzY2hlbWFDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgaW5qZWN0OiBbXG4gICAgJyRzY2hlbWFQYXJlbnRDb21wb25lbnQnXG4gIF0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGlubGluZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGhhc093bkRhdGE6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBtZW51SGVhZGVyOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gdGhpcy5zY2hlbWFcbiAgICByZXR1cm4ge1xuICAgICAgLy8gQWxsb3cgc2NoZW1hIHRvIHByb3ZpZGUgbW9yZSBkYXRhIHRocm91Z2ggYHNjaGVtYS5kYXRhYCwgdnVlLXN0eWxlOlxuICAgICAgLi4uKFxuICAgICAgICBkYXRhICYmIGlzRnVuY3Rpb24oZGF0YSlcbiAgICAgICAgICA/IGRhdGEuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICAgOiBkYXRhXG4gICAgICApLFxuICAgICAgY29tcG9uZW50c1JlZ2lzdHJ5OiB7fSxcbiAgICAgIHBhbmVzUmVnaXN0cnk6IHt9LFxuICAgICAgcGFuZWxzUmVnaXN0cnk6IHt9XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgLy8gT3ZlcnJpZGUgRGl0b01peGluJ3Mgc2NoZW1hQ29tcG9uZW50KCkgd2hpY2ggdXNlcyB0aGUgaW5qZWN0ZWQgdmFsdWUuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBwYXJlbnRTY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICAvLyBEb24ndCByZXR1cm4gdGhlIGFjdHVhbCBwYXJlbnQgc2NoZW1hIGlzIHRoaXMgc2NoZW1hIGhhbmRsZXMgaXRzIG93blxuICAgICAgLy8gZGF0YS4gVGhpcyBwcmV2ZW50cyBkZWxlZ2F0aW5nIGV2ZW50cyB0byB0aGUgcGFyZW50LCBhbmQgcmVnaXN0ZXJpbmdcbiAgICAgIC8vIGNvbXBvbmVudHMgd2l0aCB0aGUgcGFyZW50IHRoYXQgd291bGQgY2F1c2UgaXQgdG8gc2V0IGlzRGlydHkgZmxhZ3MuXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gbnVsbCA6IHRoaXMuJHBhcmVudC5zY2hlbWFDb21wb25lbnRcbiAgICB9LFxuXG4gICAgcGFuZWxTY2hlbWFzKCkge1xuICAgICAgY29uc3QgcGFuZWxzID0gZ2V0UGFuZWxTY2hlbWFzKHRoaXMuc2NoZW1hLnBhbmVscywgJycpXG4gICAgICBmb3IgKGNvbnN0IHBhbmUgb2YgdGhpcy5wYW5lcykge1xuICAgICAgICBwYW5lbHMucHVzaCguLi5wYW5lLnBhbmVsU2NoZW1hcylcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYW5lbHNcbiAgICB9LFxuXG4gICAgdGFicygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEudGFicylcbiAgICB9LFxuXG4gICAgc2VsZWN0ZWRUYWIoKSB7XG4gICAgICBjb25zdCBjdXJyZW50VGFiID0gdGhpcy4kcm91dGUuaGFzaD8uc2xpY2UoMSkgfHwgbnVsbFxuICAgICAgY29uc3QgdGFiID0gY3VycmVudFRhYiAmJiB0aGlzLnNob3VsZFJlbmRlcih0aGlzLnRhYnNbY3VycmVudFRhYl0pXG4gICAgICAgID8gY3VycmVudFRhYlxuICAgICAgICA6IHRoaXMuZGVmYXVsdFRhYj8ubmFtZSB8fCBudWxsXG4gICAgICBpZiAodGFiICE9PSBjdXJyZW50VGFiKSB7XG4gICAgICAgIC8vIEFueSB0YWIgY2hhbmdlIG5lZWRzIHRvIGJlIHJlZmxlY3RlZCBpbiB0aGUgcm91dGVyIGFsc28uXG4gICAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKHsgaGFzaDogdGFiIH0pXG4gICAgICB9XG4gICAgICByZXR1cm4gdGFiXG4gICAgfSxcblxuICAgIGRlZmF1bHRUYWIoKSB7XG4gICAgICBpZiAodGhpcy50YWJzKSB7XG4gICAgICAgIGxldCBmaXJzdCA9IG51bGxcbiAgICAgICAgZm9yIChjb25zdCB0YWIgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnRhYnMpKSB7XG4gICAgICAgICAgY29uc3QgeyBkZWZhdWx0VGFiIH0gPSB0YWJcbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbihkZWZhdWx0VGFiKVxuICAgICAgICAgICAgPyBkZWZhdWx0VGFiLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuICAgICAgICAgICAgOiBkZWZhdWx0VGFiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdGFiXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgICAgIGZpcnN0ID0gdGFiXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaXJzdFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWE/LmNsaXBib2FyZFxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWREYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0RhdGEoeyB0YXJnZXQ6ICdzZXJ2ZXInLCBzY2hlbWFPbmx5OiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGNsaXBib2FyZERhdGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAkc2NoZW1hOiB0aGlzLnNjaGVtYS5uYW1lLFxuICAgICAgICAuLi50aGlzLnByb2Nlc3NEYXRhKHsgdGFyZ2V0OiAnY2xpcGJvYXJkJywgc2NoZW1hT25seTogdHJ1ZSB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIHNpbWlsYXIgdG8gYERpdG9Db250ZXh0YFxuICAgIC8vIHByb3BlcnRpZXMsIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGVzZSBvbiBgdGhpc2AgYXMgd2VsbDpcbiAgICAvLyBOT1RFOiBXaGlsZSBpbnRlcm5hbGx5LCB3ZSBzcGVhayBvZiBgZGF0YWAsIGluIHRoZSBBUEkgc3VyZmFjZSB0aGVcbiAgICAvLyB0ZXJtIGBpdGVtYCBpcyB1c2VkIGZvciB0aGUgZGF0YSB0aGF0IHJlbGF0ZXMgdG8gZWRpdGluZyBvYmplY3RzLlxuICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgYXM6XG4gICAgLy8gcmV0dXJuIGdldEl0ZW0odGhpcy5yb290RGF0YSwgdGhpcy5kYXRhUGF0aCwgZmFsc2UpXG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgcm9vdEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290RGF0YVxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc2VkRGF0YVxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xpcGJvYXJkRGF0YVxuICAgIH0sXG5cbiAgICBwYXJlbnRJdGVtKCkge1xuICAgICAgcmV0dXJuIGdldFBhcmVudEl0ZW0odGhpcy5yb290RGF0YSwgdGhpcy5kYXRhUGF0aCwgZmFsc2UpXG4gICAgfSxcblxuICAgIGZvcm1MYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKFxuICAgICAgICB0aGlzLmdldEl0ZW1Gb3JtU2NoZW1hKHRoaXMuc291cmNlU2NoZW1hLCB0aGlzLmRhdGEsIHRoaXMuY29udGV4dClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNEaXJ0eSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvbWVDb21wb25lbnQoaXQgPT4gaXQuaXNEaXJ0eSlcbiAgICB9LFxuXG4gICAgaXNUb3VjaGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc29tZUNvbXBvbmVudChpdCA9PiBpdC5pc1RvdWNoZWQpXG4gICAgfSxcblxuICAgIGlzVmFsaWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ldmVyeUNvbXBvbmVudChpdCA9PiBpdC5pc1ZhbGlkKVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkYXRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmV2ZXJ5Q29tcG9uZW50KGl0ID0+IGl0LmlzVmFsaWRhdGVkKVxuICAgIH0sXG5cbiAgICBoYXNEYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5sYWJlbCB8fCB0aGlzLmNvbGxhcHNpYmxlXG4gICAgfSxcblxuICAgIGhhc1RhYnMoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaW5saW5lZCAmJiAhIXRoaXMudGFic1xuICAgIH0sXG5cbiAgICBoYXNNYWluUGFuZSgpIHtcbiAgICAgIGNvbnN0IHsgY29tcG9uZW50cyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiAhIWNvbXBvbmVudHMgJiYgT2JqZWN0LmtleXMoY29tcG9uZW50cykubGVuZ3RoID4gMFxuICAgIH0sXG5cbiAgICBvcGVuZWQ6IGdldFN0b3JlQWNjZXNzb3IoJ29wZW5lZCcsIHtcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5jb2xsYXBzZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudHMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmNvbXBvbmVudHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnBhbmVzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVscygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMucGFuZWxzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIGNvbXBvbmVudHNCeURhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLmNvbXBvbmVudHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZXNCeURhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVsc0J5RGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGlzdEVudHJpZXNCeURhdGFQYXRoKHRoaXMucGFuZWxzUmVnaXN0cnkpXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgICB0aGlzLnNldHVwU2NoZW1hRmllbGRzKClcbiAgICAvLyBEZWxlZ2F0ZSBjaGFuZ2UgZXZlbnRzIHRocm91Z2ggdG8gcGFyZW50IHNjaGVtYTpcbiAgICB0aGlzLmRlbGVnYXRlKCdjaGFuZ2UnLCB0aGlzLnBhcmVudFNjaGVtYUNvbXBvbmVudClcbiAgICB0aGlzLmVtaXRFdmVudCgnaW5pdGlhbGl6ZScpIC8vIE5vdCBgJ2NyZWF0ZSdgLCBzaW5jZSB0aGF0J3MgZm9yIGRhdGEuXG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLmVtaXRFdmVudCgnZGVzdHJveScpXG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeURhdGFQYXRoKFxuICAgICAgICB0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2hcbiAgICAgIClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50QnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRzQnlOYW1lKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeU5hbWUodGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRCeU5hbWUobmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50cyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzKHRoaXMuY29tcG9uZW50c0J5RGF0YVBhdGgsIGRhdGFQYXRoT3JOYW1lLCBtYXRjaClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50KGRhdGFQYXRoT3JOYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50cyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVsc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaClcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFuZWxzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxzKGRhdGFQYXRoT3JOYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXModGhpcy5wYW5lbHNCeURhdGFQYXRoLCBkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpXG4gICAgfSxcblxuICAgIGdldFBhbmVsKGRhdGFQYXRoT3JOYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFuZWxzKGRhdGFQYXRoT3JOYW1lLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBzb21lQ29tcG9uZW50KGNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1BvcHVsYXRlZCAmJiB0aGlzLmNvbXBvbmVudHMuc29tZShjYWxsYmFjaylcbiAgICB9LFxuXG4gICAgZXZlcnlDb21wb25lbnQoY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLmlzUG9wdWxhdGVkICYmIHRoaXMuY29tcG9uZW50cy5ldmVyeShjYWxsYmFjaylcbiAgICB9LFxuXG4gICAgb25FeHBhbmQoZXhwYW5kKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnZXhwYW5kJywge1xuICAgICAgICAvLyBUT0RPOiBBY3R1YWxseSBleHBvc2UgdGhpcyBvbiBEaXRvQ29udGV4dD9cbiAgICAgICAgY29udGV4dDogeyBleHBhbmQgfVxuICAgICAgfSlcbiAgICAgIC8vIFByZXZlbnQgY2xvc2luZyB0aGUgc2NoZW1hIHdpdGggaW52YWxpZCBkYXRhLCBzaW5jZSB0aGUgaW4tY29tcG9uZW50XG4gICAgICAvLyB2YWxpZGF0aW9uIHdpbGwgbm90IGJlIGV4ZWN1dGVkIG9uY2UgaXQncyBjbG9zZWQuXG5cbiAgICAgIC8vIFRPRE86IE1vdmUgdmFsaWRhdGlvbiBvdXQgb2YgY29tcG9uZW50cywgdG8gc2NoZW1hLCBqdXN0IGxpa2VcbiAgICAgIC8vIHByb2Nlc3NpbmcsIGFuZCB1c2UgYHNob3dWYWxpZGF0aW9uRXJyb3JzKClgIGZvciB0aGUgcmVzdWx0aW5nIGVycm9ycyxcbiAgICAgIC8vIHRoZW4gcmVtb3ZlIHRoaXMgcmVxdWlyZW1lbnQsIHNpbmNlIHdlIGNhbiB2YWxpZGF0ZSBjbG9zZWQgZm9ybXMgYW5kXG4gICAgICAvLyBzY2hlbWFzIHRoZW4uXG4gICAgICBpZiAoIXRoaXMub3BlbmVkIHx8IGV4cGFuZCB8fCB0aGlzLnZhbGlkYXRlQWxsKCkpIHtcbiAgICAgICAgdGhpcy5vcGVuZWQgPSBleHBhbmRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnY2hhbmdlJylcbiAgICB9LFxuXG4gICAgcmVzZXRWYWxpZGF0aW9uKCkge1xuICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICAgIGNvbXBvbmVudC5yZXNldFZhbGlkYXRpb24oKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgICBjb21wb25lbnQuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMucGFyZW50U2NoZW1hQ29tcG9uZW50Py5mb2N1cygpXG4gICAgICB0aGlzLm9wZW5lZCA9IHRydWVcbiAgICB9LFxuXG4gICAgdmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIGNvbnN0IHsgY29tcG9uZW50c0J5RGF0YVBhdGggfSA9IHRoaXNcbiAgICAgIGxldCBkYXRhUGF0aHNcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBjb25zdCBjaGVjayA9IGlzRnVuY3Rpb24obWF0Y2gpXG4gICAgICAgICAgPyBtYXRjaFxuICAgICAgICAgIDogaXNSZWdFeHAobWF0Y2gpXG4gICAgICAgICAgICA/IGZpZWxkID0+IG1hdGNoLnRlc3QoZmllbGQpXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgZGF0YVBhdGhzID0gY2hlY2tcbiAgICAgICAgICA/IE9iamVjdC5rZXlzKGNvbXBvbmVudHNCeURhdGFQYXRoKS5maWx0ZXIoY2hlY2spXG4gICAgICAgICAgOiBpc0FycmF5KG1hdGNoKVxuICAgICAgICAgICAgPyBtYXRjaFxuICAgICAgICAgICAgOiBbbWF0Y2hdXG4gICAgICB9XG4gICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlXG4gICAgICBsZXQgZmlyc3QgPSB0cnVlXG4gICAgICBkYXRhUGF0aHMgfHw9IE9iamVjdC5rZXlzKGNvbXBvbmVudHNCeURhdGFQYXRoKVxuICAgICAgZm9yIChjb25zdCBkYXRhUGF0aCBvZiBkYXRhUGF0aHMpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBpZiAoIWNvbXBvbmVudC52YWxpZGF0ZShub3RpZnkpKSB7XG4gICAgICAgICAgICAvLyBGb2N1cyBmaXJzdCBlcnJvciBmaWVsZFxuICAgICAgICAgICAgaWYgKG5vdGlmeSAmJiBmaXJzdCkge1xuICAgICAgICAgICAgICBjb21wb25lbnQuZm9jdXMoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobm90aWZ5ICYmICFpc1ZhbGlkKSB7XG4gICAgICAgIHRoaXMubm90aWZ5RXJyb3JzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc1ZhbGlkXG4gICAgfSxcblxuICAgIHZlcmlmeUFsbChtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVBbGwobWF0Y2gsIGZhbHNlKVxuICAgIH0sXG5cbiAgICBhc3luYyBzaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKSB7XG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIGxldCBmaXJzdCA9IHRydWVcbiAgICAgIGNvbnN0IHVubWF0Y2hlZCA9IFtdXG4gICAgICBmb3IgKGNvbnN0IFtkYXRhUGF0aCwgZXJyc10gb2YgT2JqZWN0LmVudHJpZXMoZXJyb3JzKSkge1xuICAgICAgICAvLyBJZiB0aGUgc2NoZW1hIGlzIGEgZGF0YS1yb290LCBwcmVmaXggaXRzIG93biBkYXRhUGF0aCB0byBhbGwgZXJyb3JzLFxuICAgICAgICAvLyBzaW5jZSB0aGUgZGF0YSB0aGF0IGl0IHNlbmRzIGFuZCB2YWxpZGF0ZXMgd2lsbCBiZSB1bnByZWZpeGVkLlxuICAgICAgICBjb25zdCBmdWxsRGF0YVBhdGggPSB0aGlzLmhhc093bkRhdGFcbiAgICAgICAgICA/IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGRhdGFQYXRoKVxuICAgICAgICAgIDogZGF0YVBhdGhcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcywgdGhpcy5kYXRhUGF0aCwgdGhpcy5oYXNPd25EYXRhLCBmdWxsRGF0YVBhdGgpXG4gICAgICAgIC8vIENvbnZlcnQgZnJvbSBKYXZhU2NyaXB0IHByb3BlcnR5IGFjY2VzcyBub3RhdGlvbiwgdG8gb3VyIG93biBmb3JtXG4gICAgICAgIC8vIG9mIHJlbGF0aXZlIEpTT04gcG9pbnRlcnMgYXMgZGF0YS1wYXRoczpcbiAgICAgICAgY29uc3QgZGF0YVBhdGhQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoZnVsbERhdGFQYXRoKVxuICAgICAgICBsZXQgZm91bmQgPSBmYWxzZVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aFBhcnRzKVxuICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgaWYgKGNvbXBvbmVudC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJzLCBmaXJzdCAmJiBmb2N1cykpIHtcbiAgICAgICAgICAgIGZvdW5kID0gdHJ1ZVxuICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgICAgLy8gQ291bGRuJ3QgZmluZCBhIGNvbXBvbmVudCBpbiBhbiBhY3RpdmUgZm9ybSBmb3IgdGhlIGdpdmVuIGRhdGFQYXRoLlxuICAgICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBhIGNvbXBvbmVudCBzZXJ2aW5nIGEgcGFydCBvZiB0aGUgZGF0YVBhdGgsXG4gICAgICAgICAgLy8gYW5kIHRha2UgaXQgZnJvbSB0aGVyZTpcbiAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgICB3aGlsZSAoZGF0YVBhdGhQYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aFBhcnRzKVxuICAgICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgICAgICBpZiAoYXdhaXQgY29tcG9uZW50Lm5hdmlnYXRlVG9Db21wb25lbnQ/LihcbiAgICAgICAgICAgICAgICBmdWxsRGF0YVBhdGgsXG4gICAgICAgICAgICAgICAgc3ViQ29tcG9uZW50cyA9PiB7XG4gICAgICAgICAgICAgICAgICBsZXQgZm91bmQgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2Ygc3ViQ29tcG9uZW50cykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJzID0gZXJyb3JzW2NvbXBvbmVudC5kYXRhUGF0aF1cbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgIGVycnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJycywgZmlyc3QgJiYgZm9jdXMpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgICAgLy8gRm91bmQgYSBuZXN0ZWQgZm9ybSB0byBkaXNwbGF5IGF0IGxlYXN0IHBhcnRzIGZvIHRoZSBlcnJvcnMuXG4gICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3Qgc2hvdyBhbGwgZXJyb3JzIGF0IG9uY2UsIHNvIHdlJ3JlIGRvbmUuIERvbid0IGNhbGxcbiAgICAgICAgICAgICAgICAvLyBgbm90aWZ5RXJyb3JzKClgIHlldCwgYXMgd2UgY2FuIG9ubHkgZGlzcGxheSBpdCBvbmNlXG4gICAgICAgICAgICAgICAgLy8gYHNob3dWYWxpZGF0aW9uRXJyb3JzKClgIHdhcyBjYWxsZWQgZnJvbSBgRGl0b0Zvcm0ubW91bnRlZCgpYFxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTdGlsbCBoZXJlLCBzbyBrZWVwIHJlbW92aW5nIHRoZSBsYXN0IHBhcnQgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuICAgICAgICAgICAgZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBXaGVuIHRoZSBlcnJvciBjYW4ndCBiZSBtYXRjaGVkLCBhZGQgaXQgdG8gYSBsaXN0IG9mIHVubWF0Y2hlZFxuICAgICAgICAgIC8vIGVycm9ycyB3aXRoIGRlY2VudCBtZXNzYWdlLCB0byByZXBvcnQgYXQgdGhlIGVuZC5cbiAgICAgICAgICBjb25zdCBmaWVsZCA9IGxhYmVsaXplKHByb3BlcnR5KVxuICAgICAgICAgIGZvciAoY29uc3QgZXJyIG9mIGVycnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZWZpeCA9IGZpZWxkXG4gICAgICAgICAgICAgID8gYFRoZSBmaWVsZCAke2ZpZWxkfWBcbiAgICAgICAgICAgICAgOiBgVGhlICR7dGhpcy5mb3JtTGFiZWx9YFxuICAgICAgICAgICAgdW5tYXRjaGVkLnB1c2goYCR7cHJlZml4fSAke2Vyci5tZXNzYWdlfWApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgIH1cbiAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlFcnJvcnModW5tYXRjaGVkLmpvaW4oJ1xcbicpKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBub3RpZnlFcnJvcnMobWVzc2FnZSkge1xuICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICB0aXRsZTogJ1ZhbGlkYXRpb24gRXJyb3JzJyxcbiAgICAgICAgdGV4dDogbWVzc2FnZSB8fCAnUGxlYXNlIGNvcnJlY3QgdGhlIGhpZ2hsaWdodGVkIGVycm9ycy4nXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICByZXNldERhdGEoKSB7XG4gICAgICAvLyBXZSBjYW4ndCBzZXQgYHRoaXMuZGF0YSA9IC4uLmAgYmVjYXVzZSBpdCdzIGEgcHJvcGVydHksIGJ1dCB3ZSBjYW5cbiAgICAgIC8vIHNldCBhbGwga25vd24gcHJvcGVydGllcyBvbiBpdCB0byB0aGUgdmFsdWVzIHJldHVybmVkIGJ5XG4gICAgICAvLyBgc2V0RGVmYXVsdHMoKWAsIGFzIHRoZXkgYXJlIGFsbCByZWFjdGl2ZSBhbHJlYWR5IGZyb20gdGhlIHN0YXJ0czpcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5kYXRhLCBzZXREZWZhdWx0cyh0aGlzLnNjaGVtYSwge30sIHRoaXMpKVxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgZm9yIChjb25zdCBuYW1lIGluIGRhdGEpIHtcbiAgICAgICAgaWYgKG5hbWUgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgICAgdGhpcy4kc2V0KHRoaXMuZGF0YSwgbmFtZSwgZGF0YVtuYW1lXSlcbiAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSkpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudC5tYXJrRGlydHkoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmaWx0ZXJEYXRhKGRhdGEpIHtcbiAgICAgIC8vIEZpbHRlcnMgb3V0IGFycmF5cyBhbmQgb2JqZWN0cyB0aGF0IGFyZSBiYWNrIGJ5IGRhdGEgcmVzb3VyY2VzXG4gICAgICAvLyB0aGVtc2VsdmVzLCBhcyB0aG9zZSBhcmUgYWxyZWFkeSB0YWtpbmcgY2FyZSBvZiB0aHJvdWdoIHRoZWlyIG93biBBUElcbiAgICAgIC8vIHJlc291cmNlIGVuZC1wb2ludHMgYW5kIHNob3VsZG4ndCBiZSBzZXQuXG4gICAgICBjb25zdCBjb3B5ID0ge31cbiAgICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkYXRhKSkge1xuICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkgfHwgaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5TmFtZShuYW1lKVxuICAgICAgICAgIGlmIChjb21wb25lbnRzLnNvbWUoY29tcG9uZW50ID0+IGNvbXBvbmVudC5wcm92aWRlc0RhdGEpKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb3B5W25hbWVdID0gdmFsdWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb3B5XG4gICAgfSxcblxuICAgIHByb2Nlc3NEYXRhKHsgdGFyZ2V0ID0gJ2NsaXBib2FyZCcsIHNjaGVtYU9ubHkgPSB0cnVlIH0gPSB7fSkge1xuICAgICAgcmV0dXJuIHByb2Nlc3NEYXRhKFxuICAgICAgICB0aGlzLnNjaGVtYSxcbiAgICAgICAgdGhpcy5zb3VyY2VTY2hlbWEsXG4gICAgICAgIHRoaXMuZGF0YSxcbiAgICAgICAgdGhpcy5kYXRhUGF0aCwge1xuICAgICAgICAgIC8vIE5lZWRlZCBmb3IgRGl0b0NvbnRleHQgaGFuZGxpbmcgaW5zaWRlIGBwcm9jZXNzRGF0YWAgYW5kXG4gICAgICAgICAgLy8gYHByb2Nlc3NTY2hlbWFEYXRhKClgOlxuICAgICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgICBzY2hlbWFPbmx5LFxuICAgICAgICAgIHRhcmdldFxuICAgICAgICB9XG4gICAgICApXG4gICAgfSxcblxuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIC8vIGAkc2NoZW1hUGFyZW50Q29tcG9uZW50KClgIGlzIG9ubHkgc2V0IGlmIG9uZSBvZiB0aGUgYW5jZXN0b3JzIHVzZXNcbiAgICAgIC8vIHRoZSBgU2NoZW1hUGFyZW50TWl4aW5gOlxuICAgICAgdGhpcy4kc2NoZW1hUGFyZW50Q29tcG9uZW50KCk/Ll9yZWdpc3RlclNjaGVtYUNvbXBvbmVudCh0aGlzLCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlckNvbXBvbmVudChjb21wb25lbnQsIGFkZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJFbnRyeSh0aGlzLmNvbXBvbmVudHNSZWdpc3RyeSwgY29tcG9uZW50LCBhZGQpXG4gICAgICAvLyBPbmx5IHJlZ2lzdGVyIHdpdGggdGhlIHBhcmVudCBpZiBzY2hlbWEgc2hhcmVzIGRhdGEgd2l0aCBpdC5cbiAgICAgIHRoaXMucGFyZW50U2NoZW1hQ29tcG9uZW50Py5fcmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50LCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlclBhbmUocGFuZSwgYWRkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckVudHJ5KHRoaXMucGFuZXNSZWdpc3RyeSwgcGFuZSwgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJQYW5lbChwYW5lbCwgYWRkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckVudHJ5KHRoaXMucGFuZWxzUmVnaXN0cnksIHBhbmVsLCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlckVudHJ5KHJlZ2lzdHJ5LCBlbnRyeSwgYWRkKSB7XG4gICAgICBjb25zdCB1aWQgPSBlbnRyeS4kdWlkXG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIHRoaXMuJHNldChyZWdpc3RyeSwgdWlkLCBlbnRyeSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuJGRlbGV0ZShyZWdpc3RyeSwgdWlkKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBfbGlzdEVudHJpZXNCeURhdGFQYXRoKHJlZ2lzdHJ5KSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhyZWdpc3RyeSkucmVkdWNlKChlbnRyaWVzQnlEYXRhUGF0aCwgZW50cnkpID0+IHtcbiAgICAgICAgLy8gTXVsdGlwbGUgZW50cmllcyBjYW4gYmUgbGlua2VkIHRvIHRoZSBzYW1lIGRhdGEtcGF0aCwgZS5nLiB3aGVuXG4gICAgICAgIC8vIHRoZXJlIGFyZSB0YWJzLiBMaW5rIGVhY2ggZGF0YS1wYXRoIHRvIGFuIGFycmF5IG9mIGVudHJpZXMuXG4gICAgICAgIGNvbnN0IHsgZGF0YVBhdGggfSA9IGVudHJ5XG4gICAgICAgIGNvbnN0IGVudHJpZXMgPSBlbnRyaWVzQnlEYXRhUGF0aFtkYXRhUGF0aF0gfHw9IFtdXG4gICAgICAgIGVudHJpZXMucHVzaChlbnRyeSlcbiAgICAgICAgcmV0dXJuIGVudHJpZXNCeURhdGFQYXRoXG4gICAgICB9LCB7fSlcbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXMoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoKS5zdGFydHNXaXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICAgID8gdGhpcy5fZ2V0RW50cmllc0J5RGF0YVBhdGgoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaClcbiAgICAgICAgOiB0aGlzLl9nZXRFbnRyaWVzQnlOYW1lKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpXG4gICAgfSxcblxuICAgIF9nZXRFbnRyaWVzQnlEYXRhUGF0aChlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZmlsdGVyRW50cmllcyhcbiAgICAgICAgZW50cmllc0J5RGF0YVBhdGhbbm9ybWFsaXplRGF0YVBhdGgoZGF0YVBhdGgpXSB8fCBbXSxcbiAgICAgICAgbWF0Y2hcbiAgICAgIClcbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXNCeU5hbWUoZW50cmllc0J5RGF0YVBhdGgsIG5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZmlsdGVyRW50cmllcyhcbiAgICAgICAgZW50cmllc0J5RGF0YVBhdGhbYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgbmFtZSldIHx8IFtdLFxuICAgICAgICBtYXRjaFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBfZmlsdGVyRW50cmllcyhlbnRyaWVzLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIG1hdGNoID8gZW50cmllcy5maWx0ZXIobWF0Y2gpIDogZW50cmllc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5kaXRvLXNjaGVtYS5kaXRvLXNjaGVtYS1pbmxpbmVkKFxuICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICA6ZGF0YT1cImRhdGFcIlxuICA6bWV0YT1cIm1ldGFcIlxuICA6c3RvcmU9XCJzdG9yZVwiXG4gIDpsYWJlbD1cImlzQ29tcGFjdCA/IG51bGwgOiBsYWJlbFwiXG4gIDppbmxpbmVkPVwidHJ1ZVwiXG4gIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgOmNsYXNzPVwieyAnZGl0by1zY2hlbWEtY29tcGFjdCc6IGlzQ29tcGFjdCB9XCJcbilcbiAgLy8gUmVuZGVyIGRpdG8tZWRpdC1idXR0b25zIGZvciBpbmxpbmVkIHNoZW1hcyBzZXBhcmF0ZWx5IGZyb20gYWxsXG4gIC8vIG90aGVycyBpbiBgVHlwZUxpc3RgIGFzIGEgc2NvcGUsIGZvciBiZXR0ZXIgaGFuZGxpbmcgb2YgbGF5b3V0LlxuICB0ZW1wbGF0ZSgjZWRpdC1idXR0b25zKVxuICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgdi1pZj1cImRlbGV0YWJsZSB8fCBkcmFnZ2FibGUgfHwgZWRpdGFibGVcIlxuICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgIDplZGl0UGF0aD1cImVkaXRQYXRoXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICBAZGVsZXRlPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBkaXRvLXNjaGVtYS5kaXRvLXNjaGVtYS1pbmxpbmVkKFxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpsYWJlbD1cImlzQ29tcGFjdCA/IG51bGwgOiBsYWJlbFwiXG4gICAgOmlubGluZWQ9XCJ0cnVlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLWNvbXBhY3QnOiBpc0NvbXBhY3QgfVwiXG4gIClcbiAgICAvLyBSZW5kZXIgZGl0by1lZGl0LWJ1dHRvbnMgZm9yIGlubGluZWQgc2hlbWFzIHNlcGFyYXRlbHkgZnJvbSBhbGxcbiAgICAvLyBvdGhlcnMgaW4gYFR5cGVMaXN0YCBhcyBhIHNjb3BlLCBmb3IgYmV0dGVyIGhhbmRsaW5nIG9mIGxheW91dC5cbiAgICB0ZW1wbGF0ZSgjZWRpdC1idXR0b25zKVxuICAgICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICAgIHYtaWY9XCJkZWxldGFibGUgfHwgZHJhZ2dhYmxlIHx8IGVkaXRhYmxlXCJcbiAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgIDplZGl0UGF0aD1cImVkaXRQYXRoXCJcbiAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICBAZGVsZXRlPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1zY2hlbWEtaW5saW5lZFxuICAgID4gLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAgID4gLmRpdG8tc2NoZW1hLWhlYWRlclxuICAgICAgICAvLyBDaGFuZ2Ugc3BhY2luZyBzbyAuZGl0by1sYWJlbCBjb3ZlcnMgdGhlIGZ1bGwgLmRpdG8tc2NoZW1hLWhlYWRlci5cbiAgICAgICAgbWFyZ2luOiAtJGZvcm0tc3BhY2luZ1xuICAgICAgICAuZGl0by1sYWJlbFxuICAgICAgICAgIC8vIEFkZCByZW1vdmVkICRmb3JtLXNwYWNpbmcgYWdhaW5cbiAgICAgICAgICAtLWxhYmVsLXBhZGRpbmc6ICN7JGZvcm0tc3BhY2luZ31cbiAgICAgICAgICBtYXJnaW46IDBcbiAgICAgICAgICB3aWR0aDogMTAwJVxuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgICAgICAvLyBCZWNhdXNlIHRhYmxlcyBoYXZlIGEgZnVubnkgd2F5IG9mIGFsbG93aW5nIHRvbyBtdWNoIHdpZHRoIGdyb3d0aDpcbiAgICAgICAgICBtYXgtd2lkdGg6ICRjb250ZW50LXdpZHRoXG4gICAgICAgICYgKy5kaXRvLXBhbmVcbiAgICAgICAgICAvLyBOZWVkZWQgZm9yIHRyYW5zaXRpb24taGVpZ2h0IGluIERpdG9TY2hlbWE6XG4gICAgICAgICAgbWluLWhlaWdodDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBpc0NvbXBhY3QgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tc2NoZW1hLWlubGluZWQnLCB7XG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZHJhZ2dhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkZWxldGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0UGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXNDb21wYWN0KCkge1xuICAgICAgcmV0dXJuIGlzQ29tcGFjdCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNDb21wYWN0ICYmICEhdGhpcy5sYWJlbFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1wYW5lKFxuICB2LWlmPVwiaXNQb3B1bGF0ZWQgJiYgY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPiAwXCJcbiAgdi1zaG93PVwidmlzaWJsZVwiXG4pXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPWB7XG4gICAgICBzY2hlbWEsXG4gICAgICBkYXRhUGF0aCxcbiAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgbmVzdGVkLFxuICAgICAgc3RvcmVcbiAgICB9IGluIGNvbXBvbmVudFNjaGVtYXNgXG4gIClcbiAgICAuZGl0by1icmVhayhcbiAgICAgIHYtaWY9XCJzY2hlbWEuYnJlYWsgPT09ICdiZWZvcmUnXCJcbiAgICApXG4gICAgZGl0by1jb250YWluZXIoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHNjaGVtYSlcIlxuICAgICAgOmtleT1cIm5lc3RlZERhdGFQYXRoXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6c2luZ2xlPVwiaXNTaW5nbGVDb21wb25lbnRcIlxuICAgICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgKVxuICAgIC5kaXRvLWJyZWFrKFxuICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2FmdGVyJ1wiXG4gICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tcGFuZShcbiAgICB2LWlmPVwiaXNQb3B1bGF0ZWQgJiYgY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPiAwXCJcbiAgICB2LXNob3c9XCJ2aXNpYmxlXCJcbiAgKVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1mb3I9YHtcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICAgIG5lc3RlZCxcbiAgICAgICAgc3RvcmVcbiAgICAgIH0gaW4gY29tcG9uZW50U2NoZW1hc2BcbiAgICApXG4gICAgICAuZGl0by1icmVhayhcbiAgICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2JlZm9yZSdcIlxuICAgICAgKVxuICAgICAgZGl0by1jb250YWluZXIoXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoc2NoZW1hKVwiXG4gICAgICAgIDprZXk9XCJuZXN0ZWREYXRhUGF0aFwiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOnNpbmdsZT1cImlzU2luZ2xlQ29tcG9uZW50XCJcbiAgICAgICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgKVxuICAgICAgLmRpdG8tYnJlYWsoXG4gICAgICAgIHYtaWY9XCJzY2hlbWEuYnJlYWsgPT09ICdhZnRlcidcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXBhbmVcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgZmxleC1mbG93OiByb3cgd3JhcFxuICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnRcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmVcbiAgICAvLyBSZW1vdmUgcGFkZGluZyBhZGRlZCBieSBgLmRpdG8tY29udGFpbmVyYFxuICAgIG1hcmdpbjogKC0kZm9ybS1zcGFjaW5nKSAoLSRmb3JtLXNwYWNpbmctaGFsZilcbiAgICAvLyBBZGQgcmVtb3ZlZCBob3Jpem9udGFsIG1hcmdpbiBhZ2FpbiB0byBtYXgtd2lkdGg6XG4gICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aCArIDIgKiAkZm9ybS1zcGFjaW5nLWhhbGZcbiAgICAvLyBVc2UgYGZsZXg6IDAlYCBmb3IgYWxsIGAuZGl0by1wYW5lYCBleGNlcHQgYC5kaXRvLXBhbmUtbWFpbmAsXG4gICAgLy8gc28gdGhhdCB0aGUgYC5kaXRvLWJ1dHRvbnMtbWFpbmAgY2FuIGJlIG1vdmVkIGFsbCB0aGUgd2F5IHRvIHRoZSBib3R0b20uXG4gICAgZmxleDogMCVcblxuICAgICYuZGl0by1wYW5lLW1haW5cbiAgICAgIGZsZXg6IDEwMCVcblxuICAgIC5kaXRvLXNjaGVtYS1oZWFkZXI6bm90KC5kaXRvLXNjaGVtYS1tZW51LWhlYWRlcikgKyAmXG4gICAgICAvLyBDbGVhciB0b3AtbWFyZ2luIGlmIHRoZSBjb21wb25lbnRzIGFyZSBwcmVjZWRlZCBieSBhIHNjaGVtYSBoZWFkZXIuXG4gICAgICBtYXJnaW4tdG9wOiAwXG5cbiAgICAuZGl0by1jb250YWluZXIuZGl0by1vbWl0LXBhZGRpbmcgPiAmXG4gICAgICAvLyBDbGVhciBtYXJnaW5zIHNldCBhYm92ZSBhZ2FpbiBpZiBwYXJlbnQgaXMgb21pdHRpbmcgcGFkZGluZy5cbiAgICAgIG1hcmdpbjogMFxuICAgICAgbWF4LXdpZHRoOiB1bnNldFxuXG4gICAgLmRpdG8tYnJlYWtcbiAgICAgIGZsZXg6IDEwMCVcbiAgICAgIGhlaWdodDogMFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBnZXRBbGxQYW5lbFNjaGVtYXMsIGlzTmVzdGVkIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tcGFuZScsIHtcbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHRhYkNvbXBvbmVudDogKCkgPT4gdGhpcy50YWJDb21wb25lbnRcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0YWI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2luZ2xlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdmlzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnRhYiA/IHRoaXMgOiB0aGlzLiR0YWJDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRTY2hlbWFzKCkge1xuICAgICAgLy8gQ29tcHV0ZSBhIGNvbXBvbmVudHMgbGlzdCB3aGljaCBoYXMgdGhlIGRhdGFQYXRoIGJha2VkIGludG8gaXRzIGtleXNcbiAgICAgIC8vIGFuZCBhZGRzIHRoZSBrZXkgYXMgdGhlIG5hbWUgdG8gZWFjaCBjb21wb25lbnQsIHVzZWQgZm9yIGxhYmVscywgZXRjLlxuICAgICAgLy8gTk9URTogc2NoZW1hIGNhbiBiZSBudWxsIHdoaWxlIG11bHRpLWZvcm0gbGlzdHMgbG9hZCB0aGVpciBkYXRhLFxuICAgICAgLy8gYmVjYXVzZSBvbmx5IHRoZSBhdmFpbGFibGUgZGF0YSB3aWxsIGRldGVybWluZSB0aGUgdHlwZSBvZiBmb3JtLlxuICAgICAgLy8gV2hlbiBlZGl0aW5nIHByaW1pdGl2ZSB2YWx1ZXMgdGhyb3VnaCBhIGZvcm0sIGRvIG5vdCBhcHBlbmQgJ25hbWUnIHRvXG4gICAgICAvLyB0aGUgY29tcG9uZW50J3MgZGF0YVBhdGggc28gaXQgY2FuIGJlIG1hcHBlZCB0byBmcm9tIHZhbGlkYXRpb24gZXJyb3JzLlxuICAgICAgLy8gTk9URTogTm90IGFsbCBzY2hlbWFzIC8gY29tcG9uZW50cyBoYXZlIGEgc291cmNlU2NoZW1hLCBlLmcuIGRpYWxvZ3MuXG4gICAgICBjb25zdCB3cmFwUHJpbWl0aXZlcyA9IHRoaXMuc291cmNlU2NoZW1hPy53cmFwUHJpbWl0aXZlc1xuICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hPy5jb21wb25lbnRzIHx8IHt9KS5tYXAoXG4gICAgICAgIChbbmFtZSwgc2NoZW1hXSkgPT4ge1xuICAgICAgICAgIC8vIEFsd2F5cyBhZGQgbmFtZSB0byBjb21wb25lbnQgc2NoZW1hLlxuICAgICAgICAgIHNjaGVtYS5uYW1lID0gbmFtZVxuICAgICAgICAgIC8vIFNoYXJlIGRhdGFQYXRoIGFuZCBzdG9yZSB3aXRoIHBhcmVudCBpZiBub3QgbmVzdGVkOlxuICAgICAgICAgIGNvbnN0IG5lc3RlZCA9IGlzTmVzdGVkKHNjaGVtYSlcbiAgICAgICAgICBjb25zdCBuZXN0ZWREYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIG5hbWUpXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgIGRhdGFQYXRoOiBuZXN0ZWQgJiYgIXdyYXBQcmltaXRpdmVzXG4gICAgICAgICAgICAgID8gbmVzdGVkRGF0YVBhdGhcbiAgICAgICAgICAgICAgOiB0aGlzLmRhdGFQYXRoLFxuICAgICAgICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICAgICAgICBuZXN0ZWQsXG4gICAgICAgICAgICBzdG9yZTogbmVzdGVkID8gdGhpcy5nZXRDaGlsZFN0b3JlKG5hbWUpIDogdGhpcy5zdG9yZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBwYW5lbFNjaGVtYXMoKSB7XG4gICAgICAvLyBHYXRoZXIgYWxsIHBhbmVsIHNjaGVtYXMgZnJvbSBhbGwgY29tcG9uZW50IHNjaGVtYXMsIGJ5IGZpbmRpbmcgdGhvc2VcbiAgICAgIC8vIHRoYXQgd2FudCB0byBwcm92aWRlIGEgcGFuZWwuIFNlZSBgZ2V0QWxsUGFuZWxTY2hlbWFzKClgIGZvciBkZXRhaWxzLlxuICAgICAgcmV0dXJuIHRoaXMuY29tcG9uZW50U2NoZW1hcy5mbGF0TWFwKFxuICAgICAgICAoeyBzY2hlbWEsIG5lc3RlZERhdGFQYXRoOiBkYXRhUGF0aCB9KSA9PiBnZXRBbGxQYW5lbFNjaGVtYXMoXG4gICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgIGRhdGFQYXRoLFxuICAgICAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50LFxuICAgICAgICAgIHRoaXMudGFiQ29tcG9uZW50XG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNTaW5nbGVDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaW5nbGUgJiYgdGhpcy5jb21wb25lbnRTY2hlbWFzLmxlbmd0aCA9PT0gMVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyUGFuZSh0aGlzLCBhZGQpXG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgaWYgKHRoaXMudGFiKSB7XG4gICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgaGFzaDogdGhpcy50YWIgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRnJhY3Rpb24odmFsdWUpIHtcbiAgY29uc3QgbWF0Y2ggPSAoXG4gICAgaXNTdHJpbmcodmFsdWUpICYmXG4gICAgdmFsdWUubWF0Y2goL15cXHMqKFsrLV0/XFxkKylcXHMqXFwvXFxzKihbKy1dP1xcZCspXFxzKiQvKVxuICApXG4gIGlmIChtYXRjaCkge1xuICAgIGNvbnN0IFssIGRpdmlkZW5kLCBkaXZpc29yXSA9IG1hdGNoXG4gICAgcmV0dXJuIHBhcnNlRmxvYXQoZGl2aWRlbmQpIC8gcGFyc2VGbG9hdChkaXZpc29yKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKVxuICB9XG59XG4iLCJcbi5kaXRvLWNvbnRhaW5lcihcbiAgdi1zaG93PVwiY29tcG9uZW50VmlzaWJsZVwiXG4gIDpjbGFzcz1cImNvbnRhaW5lckNsYXNzXCJcbiAgOnN0eWxlPVwiY29udGFpbmVyU3R5bGVcIlxuKVxuICBkaXRvLWxhYmVsKFxuICAgIHYtaWY9XCJsYWJlbFwiXG4gICAgOmxhYmVsPVwibGFiZWxcIlxuICAgIDpkYXRhUGF0aD1cImxhYmVsRGF0YVBhdGhcIlxuICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzXCJcbiAgKVxuICBjb21wb25lbnQuZGl0by1jb21wb25lbnQoXG4gICAgOmlzPVwiZ2V0VHlwZUNvbXBvbmVudChzY2hlbWEudHlwZSlcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpzaW5nbGU9XCJzaW5nbGVcIlxuICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgIDpkaXNhYmxlZD1cImNvbXBvbmVudERpc2FibGVkXCJcbiAgICA6Y2xhc3M9XCJjb21wb25lbnRDbGFzc1wiXG4gICAgQGVycm9ycz1cIm9uRXJyb3JzXCJcbiAgKVxuICBkaXRvLWVycm9ycyhcbiAgICA6ZXJyb3JzPVwiZXJyb3JzXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tY29udGFpbmVyKFxuICAgIHYtc2hvdz1cImNvbXBvbmVudFZpc2libGVcIlxuICAgIDpjbGFzcz1cImNvbnRhaW5lckNsYXNzXCJcbiAgICA6c3R5bGU9XCJjb250YWluZXJTdHlsZVwiXG4gIClcbiAgICBkaXRvLWxhYmVsKFxuICAgICAgdi1pZj1cImxhYmVsXCJcbiAgICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICAgIDpkYXRhUGF0aD1cImxhYmVsRGF0YVBhdGhcIlxuICAgICAgOmNsYXNzPVwiY29tcG9uZW50Q2xhc3NcIlxuICAgIClcbiAgICBjb21wb25lbnQuZGl0by1jb21wb25lbnQoXG4gICAgICA6aXM9XCJnZXRUeXBlQ29tcG9uZW50KHNjaGVtYS50eXBlKVwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOnNpbmdsZT1cInNpbmdsZVwiXG4gICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgIDpkaXNhYmxlZD1cImNvbXBvbmVudERpc2FibGVkXCJcbiAgICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzXCJcbiAgICAgIEBlcnJvcnM9XCJvbkVycm9yc1wiXG4gICAgKVxuICAgIGRpdG8tZXJyb3JzKFxuICAgICAgOmVycm9ycz1cImVycm9yc1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWNvbnRhaW5lclxuICAgIC8vIE5lZWRlZCBmb3IgYmV0dGVyIHZlcnRpY2FsIGFsaWdubWVudDpcbiAgICBhbGlnbi1zZWxmOiBzdHJldGNoXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgIC8vIFRvIHByZXZlbnQgbGlzdCB0YWJsZXMgZnJvbSBibG93aW5nIG91dCBvZiB0aGVpciBmbGV4IGJveCBjb250YWluZXJzLlxuICAgIG1heC13aWR0aDogMTAwJVxuICAgIC8vIENhbm5vdCB1c2UgbWFyZ2luIGhlcmUgYXMgaXQgbmVlZHMgdG8gYmUgcGFydCBvZiBib3gtc2l6aW5nIGZvclxuICAgIC8vIHBlcmNlbnRhZ2VzIGluIGZsZXgtYmFzaXMgdG8gd29yay5cbiAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nICRmb3JtLXNwYWNpbmctaGFsZlxuICAgICY6ZW1wdHlcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAmLmRpdG8tb21pdC1wYWRkaW5nXG4gICAgICBwYWRkaW5nOiAwXG4gICAgICA+IC5kaXRvLWxhYmVsXG4gICAgICAgIG1hcmdpbjogJGZvcm0tc3BhY2luZyAkZm9ybS1zcGFjaW5nLWhhbGYgMFxuICAgICYuZGl0by1zaW5nbGVcbiAgICAgIGhlaWdodDogMTAwJSAvLyBTbyB0aGF0IGxpc3QgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IGF0IHRoZSBib3R0b21cbiAgLy8gTk9URTogVGhpcyBpcyBub3QgbmVzdGVkIGluc2lkZSBgLmRpdG8tY29udGFpbmVyYCBzbyB0aGF0IG90aGVyXG4gIC8vIHR5cGUgY29tcG9uZW50cyBjYW4gb3ZlcnJpZGUgYC5kaXRvLXdpZHRoLWZpbGxgIGNsYXNzIChmaWx0ZXIgcHJlY2VkZW5jZSkuXG4gIC5kaXRvLWNvbXBvbmVudFxuICAgICYuZGl0by13aWR0aC1maWxsXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgJi5kaXRvLWNoZWNrYm94LFxuICAgICAgJi5kaXRvLXJhZGlvLWJ1dHRvblxuICAgICAgICAvLyBXZWJLaXQgZG9lc24ndCBsaWtlIGNoYW5nZWQgd2lkdGggb24gY2hlY2tib3hlcyBhbmQgcmFkaW9zLCBvdmVycmlkZTpcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICAgIHdpZHRoOiBhdXRvXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNTdHJpbmcsIGlzTnVtYmVyIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0VHlwZU9wdGlvbnMsIHNob3VsZE9taXRQYWRkaW5nIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgcGFyc2VGcmFjdGlvbiB9IGZyb20gJy4uL3V0aWxzL21hdGguanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1jb250YWluZXInLCB7XG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBlcnJvcnM6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogdGhpcy5uZXN0ZWQgfSlcbiAgICB9LFxuXG4gICAgdHlwZU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gZ2V0VHlwZU9wdGlvbnModGhpcy5zY2hlbWEpIHx8IHt9XG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgY29uc3QgeyBzY2hlbWEgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHsgbGFiZWwgfSA9IHNjaGVtYVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgbGFiZWwgIT09IGZhbHNlICYmXG4gICAgICAgICghIWxhYmVsIHx8IHRoaXMudHlwZU9wdGlvbnMuZ2VuZXJhdGVMYWJlbCAmJiB0aGlzLmdlbmVyYXRlTGFiZWxzKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBsYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc0xhYmVsID8gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYSkgOiBudWxsXG4gICAgfSxcblxuICAgIGxhYmVsRGF0YVBhdGgoKSB7XG4gICAgICAvLyBVbm5lc3RlZCB0eXBlcyBkb24ndCBoYXZlIGEgZGF0YVBhdGggZm9yIHRoZW1zZWx2ZXMsIGRvbid0IHVzZSBpdDpcbiAgICAgIHJldHVybiB0aGlzLm5lc3RlZCA/IHRoaXMuZGF0YVBhdGggOiBudWxsXG4gICAgfSxcblxuICAgIGNvbXBvbmVudFdpZHRoOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZU9wdGlvbnMuZGVmYXVsdFdpZHRoXG4gICAgICB9LFxuICAgICAgZ2V0KHdpZHRoKSB7XG4gICAgICAgIC8vIFVzZSAxMDAlID09IDEuMCBhcyBkZWZhdWx0IHdpZHRoIHdoZW4gbm90aGluZyBpcyBzZXQ6XG4gICAgICAgIHJldHVybiB3aWR0aCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyAxLjBcbiAgICAgICAgICA6IGlzU3RyaW5nKHdpZHRoKVxuICAgICAgICAgICAgPyB3aWR0aC5tYXRjaCgvXlxccypbPD5dP1xccyooLiopJC8pWzFdIC8vIFJlbW92ZSB3aWR0aCBvcGVyYXRvclxuICAgICAgICAgICAgOiB3aWR0aFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50V2lkdGhPcGVyYXRvcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3dpZHRoJywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZ2V0KHdpZHRoKSB7XG4gICAgICAgIHJldHVybiBpc1N0cmluZyh3aWR0aClcbiAgICAgICAgICA/IHdpZHRoLm1hdGNoKC9eXFxzKihbPD5dPykvKVsxXSB8fCBudWxsXG4gICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnRWaXNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndmlzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlT3B0aW9ucy5kZWZhdWx0VmlzaWJsZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50RGlzYWJsZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdkaXNhYmxlZCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkaXNhYmxlZCkge1xuICAgICAgICByZXR1cm4gZGlzYWJsZWQgfHwgdGhpcy5kaXNhYmxlZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29udGFpbmVyQ2xhc3MoKSB7XG4gICAgICBjb25zdCB7IGNsYXNzOiBjb250YWluZXJDbGFzcyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLXNpbmdsZSc6IHRoaXMuc2luZ2xlLFxuICAgICAgICAnZGl0by1vbWl0LXBhZGRpbmcnOiBzaG91bGRPbWl0UGFkZGluZyh0aGlzLnNjaGVtYSksXG4gICAgICAgIC4uLihcbiAgICAgICAgICBpc1N0cmluZyhjb250YWluZXJDbGFzcylcbiAgICAgICAgICAgID8geyBbY29udGFpbmVyQ2xhc3NdOiB0cnVlIH1cbiAgICAgICAgICAgIDogY29udGFpbmVyQ2xhc3NcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRCYXNpcygpIHtcbiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5jb21wb25lbnRXaWR0aFxuICAgICAgLy8gJ2F1dG8nID0gbm8gZml0dGluZzpcbiAgICAgIGNvbnN0IGJhc2lzID0gKFxuICAgICAgICBbbnVsbCwgJ2F1dG8nLCAnZmlsbCddLmluY2x1ZGVzKHdpZHRoKSA/ICdhdXRvJ1xuICAgICAgICA6IC8lJC8udGVzdCh3aWR0aCkgPyBwYXJzZUZsb2F0KHdpZHRoKSAvLyBwZXJjZW50YWdlXG4gICAgICAgIDogL1thLXpdLy50ZXN0KHdpZHRoKSA/IHdpZHRoIC8vIG5hdGl2ZSB1bml0c1xuICAgICAgICA6IHBhcnNlRnJhY3Rpb24od2lkdGgpICogMTAwIC8vIGZyYWN0aW9uXG4gICAgICApXG4gICAgICByZXR1cm4gaXNOdW1iZXIoYmFzaXMpID8gYCR7YmFzaXN9JWAgOiBiYXNpc1xuICAgIH0sXG5cbiAgICBjb250YWluZXJTdHlsZSgpIHtcbiAgICAgIC8vIEludGVycHJldCAnPjUwJScgYXMgJzUwJSwgZmxleC1ncm93OiAxYFxuICAgICAgY29uc3QgZ3JvdyA9IChcbiAgICAgICAgdGhpcy5jb21wb25lbnRXaWR0aE9wZXJhdG9yID09PSAnPicgfHxcbiAgICAgICAgdGhpcy5jb21wb25lbnRXaWR0aCA9PT0gJ2ZpbGwnXG4gICAgICApXG4gICAgICAvLyBJbnRlcnByZXQgJzw1MCUnIGFzICc1MCUsIGZsZXgtc2hyaW5rOiAxYFxuICAgICAgY29uc3Qgc2hyaW5rID0gdGhpcy5jb21wb25lbnRXaWR0aE9wZXJhdG9yID09PSAnPCdcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZsZXg6IGAke2dyb3cgPyAxIDogMH0gJHtzaHJpbmsgPyAxIDogMH0gJHt0aGlzLmNvbXBvbmVudEJhc2lzfWBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29tcG9uZW50Q2xhc3MoKSB7XG4gICAgICBjb25zdCBiYXNpc0lzQXV0byA9IHRoaXMuY29tcG9uZW50QmFzaXMgPT09ICdhdXRvJ1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tc2luZ2xlJzogdGhpcy5zaW5nbGUsXG4gICAgICAgICdkaXRvLWRpc2FibGVkJzogdGhpcy5jb21wb25lbnREaXNhYmxlZCxcbiAgICAgICAgJ2RpdG8td2lkdGgtZmlsbCc6ICFiYXNpc0lzQXV0byB8fCB0aGlzLmNvbXBvbmVudFdpZHRoID09PSAnZmlsbCcsXG4gICAgICAgICdkaXRvLXdpZHRoLWF1dG8nOiBiYXNpc0lzQXV0byxcbiAgICAgICAgJ2RpdG8taGFzLWVycm9ycyc6ICEhdGhpcy5lcnJvcnNcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRXJyb3JzKGVycm9ycykge1xuICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tdGFic1xuICByb3V0ZXItbGluay5kaXRvLWxpbmsoXG4gICAgdi1mb3I9XCIodGFiU2NoZW1hLCBrZXkpIGluIHRhYnNcIlxuICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodGFiU2NoZW1hKVwiXG4gICAgOmtleT1cImtleVwiXG4gICAgOnRvPVwieyBoYXNoOiBrZXkgfVwiXG4gICAgYWN0aXZlLWNsYXNzPVwiZGl0by1hY3RpdmVcIlxuICApXG4gICAgfCB7eyBnZXRMYWJlbCh0YWJTY2hlbWEsIGtleSkgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXRhYnNcbiAgICByb3V0ZXItbGluay5kaXRvLWxpbmsoXG4gICAgICB2LWZvcj1cIih0YWJTY2hlbWEsIGtleSkgaW4gdGFic1wiXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHRhYlNjaGVtYSlcIlxuICAgICAgOmtleT1cImtleVwiXG4gICAgICA6dG89XCJ7IGhhc2g6IGtleSB9XCJcbiAgICAgIGFjdGl2ZS1jbGFzcz1cImRpdG8tYWN0aXZlXCJcbiAgICApXG4gICAgICB8IHt7IGdldExhYmVsKHRhYlNjaGVtYSwga2V5KSB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gICR0YWItY29sb3ItYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXN0XG4gICR0YWItY29sb3ItaW5hY3RpdmU6ICRjb2xvci1saWdodFxuICAkdGFiLWNvbG9yLWFjdGl2ZTogJGNvbG9yLWxpZ2h0ZXN0XG4gICR0YWItY29sb3ItaG92ZXI6ICRjb2xvci13aGl0ZVxuXG4gIC5kaXRvLXRhYnNcbiAgICAvLyBTZWU6IGh0dHBzOi8vY29kZXBlbi5pby90aG9sZXgvcGVuL2h2ZUJ4L1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvXG4gICAgYVxuICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1pbmFjdGl2ZVxuICAgICAgcGFkZGluZzogJHRhYi1wYWRkaW5nLXZlciAkdGFiLXBhZGRpbmctaG9yXG4gICAgICBtYXJnaW4tbGVmdDogJHRhYi1tYXJnaW5cbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICR0YWItcmFkaXVzXG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJHRhYi1yYWRpdXNcbiAgICAgICY6aG92ZXJcbiAgICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1ob3ZlclxuICAgICAgJjphY3RpdmVcbiAgICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1hY3RpdmVcbiAgICAgICYuZGl0by1hY3RpdmVcbiAgICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1iYWNrZ3JvdW5kXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXRhYnMnLCB7XG4gIHByb3BzOiB7XG4gICAgdGFiczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzZWxlY3RlZFRhYjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi8vIE9ubHkgc2hvdyBwYW5lbHMgaW4gdGFicyB3aGVuIHRoZSB0YWJzIGFyZSBhbHNvIHZpc2libGUuXG5jb21wb25lbnQuZGl0by1wYW5lbChcbiAgOmlzPVwicGFuZWxUYWdcIlxuICB2LXNob3c9XCJ2aXNpYmxlICYmICghcGFuZWxUYWJDb21wb25lbnQgfHwgcGFuZWxUYWJDb21wb25lbnQudmlzaWJsZSlcIlxuICBAc3VibWl0LnByZXZlbnRcbilcbiAgbGFiZWwuZGl0by1wYW5lbC10aXRsZSB7eyBnZXRMYWJlbChzY2hlbWEpIH19XG4gIGRpdG8tc2NoZW1hLmRpdG8tcGFuZWwtc2NoZW1hKFxuICAgIDpzY2hlbWE9XCJwYW5lbFNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6aGFzT3duRGF0YT1cImhhc093bkRhdGFcIlxuICApXG4gICAgZGl0by1idXR0b25zKFxuICAgICAgc2xvdD1cImJ1dHRvbnNcIlxuICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAvLyBPbmx5IHNob3cgcGFuZWxzIGluIHRhYnMgd2hlbiB0aGUgdGFicyBhcmUgYWxzbyB2aXNpYmxlLlxuICBjb21wb25lbnQuZGl0by1wYW5lbChcbiAgICA6aXM9XCJwYW5lbFRhZ1wiXG4gICAgdi1zaG93PVwidmlzaWJsZSAmJiAoIXBhbmVsVGFiQ29tcG9uZW50IHx8IHBhbmVsVGFiQ29tcG9uZW50LnZpc2libGUpXCJcbiAgICBAc3VibWl0LnByZXZlbnRcbiAgKVxuICAgIGxhYmVsLmRpdG8tcGFuZWwtdGl0bGUge3sgZ2V0TGFiZWwoc2NoZW1hKSB9fVxuICAgIGRpdG8tc2NoZW1hLmRpdG8tcGFuZWwtc2NoZW1hKFxuICAgICAgOnNjaGVtYT1cInBhbmVsU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpoYXNPd25EYXRhPVwiaGFzT3duRGF0YVwiXG4gICAgKVxuICAgICAgZGl0by1idXR0b25zKFxuICAgICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXBhbmVsXG4gICAgbWFyZ2luLWJvdHRvbTogJGNvbnRlbnQtcGFkZGluZ1xuICAgIC5kaXRvLXBhbmVsLXRpdGxlXG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAgIGJhY2tncm91bmQ6ICRidXR0b24tY29sb3JcbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgIC5kaXRvLXBhbmVsLXNjaGVtYVxuICAgICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsXG4gICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci10b3A6IDBcbiAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgID4gLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZy1oYWxmICRmb3JtLXNwYWNpbmdcbiAgICAgICAgPiAuZGl0by1idXR0b25zXG4gICAgICAgICAgLS1idXR0b24tbWFyZ2luOiAjeyRmb3JtLXNwYWNpbmd9XG4gICAgICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZy1oYWxmIDBcbiAgICAgIC5kaXRvLW9iamVjdFxuICAgICAgICBib3JkZXI6IDBcbiAgICAgICAgcGFkZGluZzogMFxuICAgICAgLmRpdG8tbGFiZWxcbiAgICAgICAgbWFyZ2luOiAwXG4gICAgICAgIGxhYmVsXG4gICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbFxuICAgICAgLmRpdG8tcGFuZVxuICAgICAgICBtYXJnaW46IDAgKC0kZm9ybS1zcGFjaW5nLWhhbGYpXG4gICAgICAuZGl0by1jb250YWluZXJcbiAgICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZy1oYWxmXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFZhbGlkYXRvck1peGluIGZyb20gJy4uL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcydcbmltcG9ydCB7IGdldEJ1dHRvblNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tcGFuZWwnLCB7XG4gIG1peGluczogW1ZhbGlkYXRvck1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcGFuZWxDb21wb25lbnQ6ICgpID0+IHRoaXMsXG4gICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiB0aGlzLnBhbmVsVGFiQ29tcG9uZW50XG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGFuZWxUYWJDb21wb25lbnQ6IHsgdHlwZTogRGl0b0NvbXBvbmVudCwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3duRGF0YTogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHBhbmVsQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgdGFiQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFuZWxUYWJDb21wb25lbnRcbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBnZXRCdXR0b25TY2hlbWFzKHRoaXMuc2NoZW1hLmJ1dHRvbnMpXG4gICAgfSxcblxuICAgIHRhcmdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS50YXJnZXQgfHwgdGhpcy5kYXRhUGF0aFxuICAgIH0sXG5cbiAgICBoYXNPd25EYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5vd25EYXRhXG4gICAgfSxcblxuICAgIHBhbmVsRGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm93bkRhdGEgfHwgdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIHBhbmVsU2NoZW1hKCkge1xuICAgICAgaWYgKHRoaXMuaGFzT3duRGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zY2hlbWFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBgZGF0YWAgZnJvbSB0aGUgc2NoZW1hLCBzbyB0aGF0IERpdG9TY2hlbWEgaXNuJ3QgdXNpbmcgaXQgdG9cbiAgICAgICAgLy8gcHJvZHVjZSBpdHMgb3duIGRhdGEuIFNlZSAkZmlsdGVycyBwYW5lbCBmb3IgbW9yZSBkZXRhaWxzIG9uIGRhdGEuXG4gICAgICAgIGNvbnN0IHsgZGF0YSwgLi4uc2NoZW1hIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgICByZXR1cm4gc2NoZW1hXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBhbmVsVGFnKCkge1xuICAgICAgLy8gUGFuZWxzIHRoYXQgcHJvdmlkZSB0aGVpciBvd24gZGF0YSBuZWVkIHRoZWlyIG93biBmb3JtLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzT3duRGF0YSA/ICdmb3JtJyA6ICdkaXYnXG4gICAgfSxcblxuICAgIHBhbmVsRGF0YVBhdGgoKSB7XG4gICAgICAvLyBJZiB0aGUgcGFuZWwgcHJvdmlkZXMgaXRzIG93biBkYXRhLCB0aGVuIGl0IG5lZWRzIHRvIHByZWZpeCBhbGxcbiAgICAgIC8vIGNvbXBvbmVudHMgd2l0aCBpdHMgZGF0YS1wYXRoLCBidXQgaWYgaXQgc2hhcmVzIGRhdGEgd2l0aCB0aGUgc2NoZW1hXG4gICAgICAvLyBjb21wb25lbnQsIHRoZW4gaXQgc2hvdWxkIHNoYXJlIHRoZSBkYXRhLXBhdGggbmFtZSBzcGFjZSB0b28uXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gdGhpcy5kYXRhUGF0aCA6IHRoaXMuc2NoZW1hQ29tcG9uZW50LmRhdGFQYXRoXG4gICAgfSxcblxuICAgIHZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgICAvLyBOT1RFOiBUaGlzIGlzIG5vdCB0aGUgc2FtZSBhcyBgc2NoZW1hLmRhdGFgIGhhbmRsaW5nIGluIERpdG9TY2hlbWEsXG4gICAgLy8gd2hlcmUgdGhlIGRhdGEgaXMgYWRkZWQgdG8gdGhlIGFjdHVhbCBjb21wb25lbnQuXG4gICAgY29uc3QgeyBkYXRhIH0gPSB0aGlzLnNjaGVtYVxuICAgIGlmIChkYXRhKSB7XG4gICAgICB0aGlzLm93bkRhdGEgPSBpc0Z1bmN0aW9uKGRhdGEpXG4gICAgICAgID8gZGF0YS5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgOiBkYXRhXG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIC8vIFJlZ2lzdGVyIHRoZSBwYW5lbHMgc28gdGhhdCBvdGhlciBjb21wb25lbnRzIGNhbiBmaW5kIHRoZW0gYnkgdGhlaXJcbiAgICAgIC8vIGRhdGEtcGF0aCwgZS5nLiBpbiBUeXBlTGlzdC5vbkZpbHRlckVycm9ycygpXG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5fcmVnaXN0ZXJQYW5lbCh0aGlzLCBhZGQpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXBhbmVscyhcbiAgdi1pZj1cInBhbmVscy5sZW5ndGggPiAwXCJcbilcbiAgZGl0by1wYW5lbChcbiAgICB2LWZvcj1cInsgc2NoZW1hLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50IH0gaW4gcGFuZWxzXCJcbiAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHNjaGVtYSlcIlxuICAgIDprZXk9XCJnZXRQYW5lbEtleShkYXRhUGF0aCwgdGFiQ29tcG9uZW50KVwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKHNjaGVtYS5uYW1lKVwiXG4gICAgOmRpc2FibGVkPVwic2NoZW1hLmRpc2FibGVkICE9IG51bGwgPyBzY2hlbWEuZGlzYWJsZWQgOiBkaXNhYmxlZFwiXG4gICAgOnBhbmVsVGFiQ29tcG9uZW50PVwidGFiQ29tcG9uZW50XCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tcGFuZWxzKFxuICAgIHYtaWY9XCJwYW5lbHMubGVuZ3RoID4gMFwiXG4gIClcbiAgICBkaXRvLXBhbmVsKFxuICAgICAgdi1mb3I9XCJ7IHNjaGVtYSwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCB9IGluIHBhbmVsc1wiXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHNjaGVtYSlcIlxuICAgICAgOmtleT1cImdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKHNjaGVtYS5uYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJzY2hlbWEuZGlzYWJsZWQgIT0gbnVsbCA/IHNjaGVtYS5kaXNhYmxlZCA6IGRpc2FibGVkXCJcbiAgICAgIDpwYW5lbFRhYkNvbXBvbmVudD1cInRhYkNvbXBvbmVudFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXBhbmVsc1xuICAgIG1heC13aWR0aDogJGNvbnRlbnQtc2lkZWJhci13aWR0aFxuICAgIG1pbi13aWR0aDogY2FsYygkY29udGVudC1zaWRlYmFyLXdpZHRoIC8gMilcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tcGFuZWxzJywge1xuICBwcm9wczoge1xuICAgIHBhbmVsczogeyB0eXBlOiBBcnJheSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpIHtcbiAgICAgIC8vIEFsbG93IHNlcGFyYXRlIHRhYnMgdG8gdXNlIHBhbmVscyBvZiB0aGUgc2FtZSBuYW1lLCBieVxuICAgICAgLy8gcHJlZml4aW5nIHRoZWlyIGtleSB3aXRoIHRoZSB0YWIgbmFtZS5cbiAgICAgIHJldHVybiB0YWJDb21wb25lbnQgPyBgJHt0YWJDb21wb25lbnQudGFifV8ke2RhdGFQYXRofWAgOiBkYXRhUGF0aFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1idXR0b25zKFxuICB2LWlmPVwiYnV0dG9uU2NoZW1hcyB8fCAkc2xvdHMuZGVmYXVsdFwiXG4gIC8qIFBhc3Mgb24gJGxpc3RlbmVycyBzbyB0aGF0IGRpdG8tZWRpdC1idXR0b25zIGNhbiBwYXNzIGV2ZW50cy4gKi9cbiAgdi1vbj1cIiRsaXN0ZW5lcnNcIlxuKVxuICBkaXRvLWNvbnRhaW5lcihcbiAgICB2LWZvcj1cIihidXR0b25TY2hlbWEsIGJ1dHRvbkRhdGFQYXRoKSBpbiBidXR0b25TY2hlbWFzXCJcbiAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGJ1dHRvblNjaGVtYSlcIlxuICAgIDprZXk9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgOnNjaGVtYT1cImJ1dHRvblNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGJ1dHRvblNjaGVtYS5uYW1lKVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpnZW5lcmF0ZUxhYmVscz1cImZhbHNlXCJcbiAgKVxuICAvLyBSZW5kZXIgZWFjaCBub2RlIGluIHRoZSBkZWZhdWx0IHNsb3QgdGhyb3VnaCBgZGl0by12bm9kZWAsIHNvIGl0IGNhbiBiZVxuICAvLyB3cmFwcGVkIGluIGEgYC5kaXRvLWNvbnRhaW5lcmAgY2xhc3MuXG4gIC5kaXRvLWNvbnRhaW5lcihcbiAgICB2LWZvcj1cIm5vZGUgaW4gJHNsb3RzLmRlZmF1bHRcIlxuICAgIHYtaWY9XCJub2RlLnRhZ1wiXG4gIClcbiAgICBkaXRvLXZub2RlKDpub2RlPVwibm9kZVwiKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tYnV0dG9ucyhcbiAgICB2LWlmPVwiYnV0dG9uU2NoZW1hcyB8fCAkc2xvdHMuZGVmYXVsdFwiXG4gICAgLyogUGFzcyBvbiAkbGlzdGVuZXJzIHNvIHRoYXQgZGl0by1lZGl0LWJ1dHRvbnMgY2FuIHBhc3MgZXZlbnRzLiAqL1xuICAgIHYtb249XCIkbGlzdGVuZXJzXCJcbiAgKVxuICAgIGRpdG8tY29udGFpbmVyKFxuICAgICAgdi1mb3I9XCIoYnV0dG9uU2NoZW1hLCBidXR0b25EYXRhUGF0aCkgaW4gYnV0dG9uU2NoZW1hc1wiXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGJ1dHRvblNjaGVtYSlcIlxuICAgICAgOmtleT1cImJ1dHRvbkRhdGFQYXRoXCJcbiAgICAgIDpzY2hlbWE9XCJidXR0b25TY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGJ1dHRvblNjaGVtYS5uYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJmYWxzZVwiXG4gICAgKVxuICAgIC8vIFJlbmRlciBlYWNoIG5vZGUgaW4gdGhlIGRlZmF1bHQgc2xvdCB0aHJvdWdoIGBkaXRvLXZub2RlYCwgc28gaXQgY2FuIGJlXG4gICAgLy8gd3JhcHBlZCBpbiBhIGAuZGl0by1jb250YWluZXJgIGNsYXNzLlxuICAgIC5kaXRvLWNvbnRhaW5lcihcbiAgICAgIHYtZm9yPVwibm9kZSBpbiAkc2xvdHMuZGVmYXVsdFwiXG4gICAgICB2LWlmPVwibm9kZS50YWdcIlxuICAgIClcbiAgICAgIGRpdG8tdm5vZGUoOm5vZGU9XCJub2RlXCIpXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbi5kaXRvLWJ1dHRvbnNcbiAgPiAuZGl0by1jb250YWluZXJcbiAgICBwYWRkaW5nOiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWJ1dHRvbnMnLCB7XG4gIHByb3ZpZGU6IHtcbiAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiBudWxsXG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIC8vIENvbXB1dGUgYSBidXR0b25zIGxpc3Qgd2hpY2ggaGFzIHRoZSBkYXRhUGF0aCBiYWtlZCBpbnRvIGl0cyBrZXlzLlxuICAgICAgY29uc3QgeyBkYXRhUGF0aCwgYnV0dG9ucyB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGJ1dHRvbnNcbiAgICAgICAgPyBPYmplY3QudmFsdWVzKGJ1dHRvbnMpLnJlZHVjZSgoc2NoZW1hcywgYnV0dG9uKSA9PiB7XG4gICAgICAgICAgc2NoZW1hc1thcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgYnV0dG9uLm5hbWUpXSA9IGJ1dHRvblxuICAgICAgICAgIHJldHVybiBzY2hlbWFzXG4gICAgICAgIH0sIHt9KVxuICAgICAgICA6IG51bGxcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuZGl0by1idXR0b25zLmRpdG8tZWRpdC1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgOmJ1dHRvbnM9XCJidXR0b25zXCJcbiAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICA6ZGF0YT1cImRhdGFcIlxuICA6bWV0YT1cIm1ldGFcIlxuICA6c3RvcmU9XCJzdG9yZVwiXG4gIC8qIFByZXZlbnQgY2xpY2sgZXZlbnRzIGZyb20gYnViYmxpbmcgdG8gZGl0by1sYWJlbDogKi9cbiAgQGNsaWNrLnN0b3BcbilcbiAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgYS5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiaXNEcmFnZ2FibGVcIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICApXG4gIHJvdXRlci1saW5rLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJpc0VkaXRhYmxlXCJcbiAgICA6dG89XCJ7IHBhdGg6IGVkaXRQYXRoIH1cIiBhcHBlbmRcbiAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgKVxuICBkaXRvLWNyZWF0ZS1idXR0b24oXG4gICAgdi1pZj1cImlzQ3JlYXRhYmxlXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6cGF0aD1cImNyZWF0ZVBhdGhcIlxuICAgIDp2ZXJiPVwidmVyYnMuY3JlYXRlXCJcbiAgICA6dGV4dD1cImNyZWF0ZUJ1dHRvblRleHRcIlxuICApXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiaXNEZWxldGFibGVcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgQGNsaWNrPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgZGl0by1idXR0b25zLmRpdG8tZWRpdC1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgICA6YnV0dG9ucz1cImJ1dHRvbnNcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIC8qIFByZXZlbnQgY2xpY2sgZXZlbnRzIGZyb20gYnViYmxpbmcgdG8gZGl0by1sYWJlbDogKi9cbiAgICBAY2xpY2suc3RvcFxuICApXG4gICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgdi1pZj1cImlzRHJhZ2dhYmxlXCJcbiAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgIClcbiAgICByb3V0ZXItbGluay5kaXRvLWJ1dHRvbihcbiAgICAgIHYtaWY9XCJpc0VkaXRhYmxlXCJcbiAgICAgIDp0bz1cInsgcGF0aDogZWRpdFBhdGggfVwiIGFwcGVuZFxuICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gICAgKVxuICAgIGRpdG8tY3JlYXRlLWJ1dHRvbihcbiAgICAgIHYtaWY9XCJpc0NyZWF0YWJsZVwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpwYXRoPVwiY3JlYXRlUGF0aFwiXG4gICAgICA6dmVyYj1cInZlcmJzLmNyZWF0ZVwiXG4gICAgICA6dGV4dD1cImNyZWF0ZUJ1dHRvblRleHRcIlxuICAgIClcbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB2LWlmPVwiaXNEZWxldGFibGVcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgQGNsaWNrPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tZWRpdC1idXR0b25zXG4gICAgLy8gT3ZlcnJpZGUgY3Vyc29yIGZyb20gY29sbGFwc2libGUgZGl0by1sYWJlbDpcbiAgICBjdXJzb3I6IGRlZmF1bHRcbiAgICBmbGV4OiBub25lXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGNhcGl0YWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tZWRpdC1idXR0b25zJywge1xuICBwcm9wczoge1xuICAgIGRyYWdnYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY3JlYXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGVsZXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdFBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgY3JlYXRlUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb3JtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYS5mb3JtKVxuICAgIH0sXG5cbiAgICBpc0RyYWdnYWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc09wdGlvbignZHJhZ2dhYmxlJylcbiAgICB9LFxuXG4gICAgaXNFZGl0YWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc09wdGlvbignZWRpdGFibGUnKSAmJiAhIXRoaXMuZWRpdFBhdGhcbiAgICB9LFxuXG4gICAgaXNDcmVhdGFibGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNPcHRpb24oJ2NyZWF0YWJsZScpICYmICEhdGhpcy5jcmVhdGVQYXRoXG4gICAgfSxcblxuICAgIGlzRGVsZXRhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3B0aW9uKCdkZWxldGFibGUnKVxuICAgIH0sXG5cbiAgICBjcmVhdGVCdXR0b25UZXh0KCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgLy8gQWxsb3cgc2NoZW1hIHRvIG92ZXJyaWRlIGNyZWF0ZSBidXR0b24gdGhyb3VnaCBjcmVhdGFibGUgb2JqZWN0OlxuICAgICAgICB0aGlzLnNjaGVtYS5jcmVhdGFibGU/LmxhYmVsIHx8XG4gICAgICAgIChcbiAgICAgICAgICAvLyBBdXRvLWdlbmVyYXRlIGNyZWF0ZSBidXR0b24gbGFiZWxzIGZyb20gZnJvbSBsYWJlbHMgZm9yIGxpc3RcbiAgICAgICAgICAvLyBzb3VyY2VzIHdpdGggb25seSBvbmUgZm9ybTpcbiAgICAgICAgICB0aGlzLmZvcm1MYWJlbCAmJlxuICAgICAgICAgIGAke2NhcGl0YWxpemUodGhpcy52ZXJicy5jcmVhdGUpfSAke3RoaXMuZm9ybUxhYmVsfWBcbiAgICAgICAgKSB8fFxuICAgICAgICBudWxsXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYXNPcHRpb24obmFtZSkge1xuICAgICAgLy8gVGhlIG9wdGlvbnMgb2YgdGhlIG91dGVyIGNvbXBvbmVudCBhcmUgcGFzc2VkIHRvIHRoZSBidXR0b25zIGNvbXBvbmVudFxuICAgICAgLy8gdGhyb3VnaCBwcm9wZXJ0aWVzIGB0aGlzW25hbWVdYCwgYnV0IGNhbiBiZSBkaXNhYmxlZCBvbiBhIHBlci1mb3JtXG4gICAgICAvLyBiYXNpcyBieSBzZXR0aW5nIGBzY2hlbWFbbmFtZV1gIHRvIGBmYWxzZWAuXG4gICAgICByZXR1cm4gISEodGhpc1tuYW1lXSAmJiB0aGlzLnNjaGVtYVtuYW1lXSAhPT0gZmFsc2UpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWNyZWF0ZS1idXR0b25cbiAgdGVtcGxhdGUodi1pZj1cInNob3dQdWxsZG93blwiKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgICAgIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gICAgICA6dGl0bGU9XCJsYWJlbGl6ZSh2ZXJiKVwiXG4gICAgKSB7eyB0ZXh0IH19XG4gICAgdWwuZGl0by1wdWxsZG93bihcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiXG4gICAgKVxuICAgICAgbGkodi1mb3I9XCIoZm9ybSwgdHlwZSkgaW4gZm9ybXNcIilcbiAgICAgICAgYShcbiAgICAgICAgICB2LWlmPVwiaXNDcmVhdGFibGUoZm9ybSlcIlxuICAgICAgICAgIDpjbGFzcz1cImBkaXRvLXR5cGUtJHt0eXBlfWBcIlxuICAgICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odHlwZSlcIlxuICAgICAgICAgIEBtb3VzZXVwPVwib25QdWxsZG93bk1vdXNlVXAodHlwZSlcIlxuICAgICAgICApIHt7IGdldExhYmVsKGZvcm0pIH19XG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICB2LWVsc2VcbiAgICA6dHlwZT1cImlzSW5saW5lZCA/ICdidXR0b24nIDogJ3N1Ym1pdCdcIlxuICAgIEBjbGljaz1cImNyZWF0ZUl0ZW0oZm9ybXMuZGVmYXVsdClcIlxuICAgIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gICAgOnRpdGxlPVwibGFiZWxpemUodmVyYilcIlxuICApIHt7IHRleHQgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWNyZWF0ZS1idXR0b25cbiAgICB0ZW1wbGF0ZSh2LWlmPVwic2hvd1B1bGxkb3duXCIpXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKClcIlxuICAgICAgICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICAgICAgICA6dGl0bGU9XCJsYWJlbGl6ZSh2ZXJiKVwiXG4gICAgICApIHt7IHRleHQgfX1cbiAgICAgIHVsLmRpdG8tcHVsbGRvd24oXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiXG4gICAgICApXG4gICAgICAgIGxpKHYtZm9yPVwiKGZvcm0sIHR5cGUpIGluIGZvcm1zXCIpXG4gICAgICAgICAgYShcbiAgICAgICAgICAgIHYtaWY9XCJpc0NyZWF0YWJsZShmb3JtKVwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJgZGl0by10eXBlLSR7dHlwZX1gXCJcbiAgICAgICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odHlwZSlcIlxuICAgICAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh0eXBlKVwiXG4gICAgICAgICAgKSB7eyBnZXRMYWJlbChmb3JtKSB9fVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHYtZWxzZVxuICAgICAgOnR5cGU9XCJpc0lubGluZWQgPyAnYnV0dG9uJyA6ICdzdWJtaXQnXCJcbiAgICAgIEBjbGljaz1cImNyZWF0ZUl0ZW0oZm9ybXMuZGVmYXVsdClcIlxuICAgICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICAgIDp0aXRsZT1cImxhYmVsaXplKHZlcmIpXCJcbiAgICApIHt7IHRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1jcmVhdGUtYnV0dG9uXG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgLmRpdG8tcHVsbGRvd25cbiAgICAgIHJpZ2h0OiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxsZG93bk1peGluIGZyb20gJy4uL21peGlucy9QdWxsZG93bk1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0Rm9ybVNjaGVtYXMsIGlzSW5saW5lZCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWNyZWF0ZS1idXR0b24nLCB7XG4gIG1peGluczogW1B1bGxkb3duTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB2ZXJiOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0ZXh0OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb3JtcygpIHtcbiAgICAgIHJldHVybiBnZXRGb3JtU2NoZW1hcyh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgIH0sXG5cbiAgICBpc0lubGluZWQoKSB7XG4gICAgICByZXR1cm4gaXNJbmxpbmVkKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBzaG93UHVsbGRvd24oKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5mb3JtcykubGVuZ3RoID4gMSB8fCAhdGhpcy5mb3Jtcy5kZWZhdWx0XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBpc0NyZWF0YWJsZShmb3JtKSB7XG4gICAgICAvLyBGb3JtcyBjYW4gYmUgZXhjbHVkZWQgZnJvbSB0aGUgbGlzdCBieSBwcm92aWRpbmcgYGNyZWF0YWJsZTogZmFsc2VgXG4gICAgICByZXR1cm4gZm9ybS5jcmVhdGFibGUgIT09IGZhbHNlXG4gICAgfSxcblxuICAgIGNyZWF0ZUl0ZW0oZm9ybSwgdHlwZSA9IG51bGwpIHtcbiAgICAgIGlmICh0aGlzLmlzQ3JlYXRhYmxlKGZvcm0pKSB7XG4gICAgICAgIGlmICh0aGlzLmlzSW5saW5lZCkge1xuICAgICAgICAgIHRoaXMuc291cmNlQ29tcG9uZW50LmNyZWF0ZUl0ZW0oZm9ybSwgdHlwZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7XG4gICAgICAgICAgICBwYXRoOiBgJHt0aGlzLnBhdGh9L2NyZWF0ZWAsXG4gICAgICAgICAgICBxdWVyeTogeyB0eXBlIH0sXG4gICAgICAgICAgICBhcHBlbmQ6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBhbGxvd2VkIHRvIGNyZWF0ZSBpdGVtIGZvciBnaXZlbiBmb3JtJylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93blNlbGVjdCh0eXBlKSB7XG4gICAgICB0aGlzLmNyZWF0ZUl0ZW0odGhpcy5mb3Jtc1t0eXBlXSwgdHlwZSlcbiAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1jbGlwYm9hcmQuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgdi1pZj1cImNsaXBib2FyZFwiXG4pXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1jb3B5KFxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHJlZj1cImNvcHlEYXRhXCJcbiAgICB0aXRsZT1cIkNvcHkgRGF0YVwiXG4gICAgOmRpc2FibGVkPVwiIWNvcHlFbmFibGVkXCJcbiAgICBAY2xpY2s9XCJvbkNvcHlcIlxuICApXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1wYXN0ZShcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB0aXRsZT1cIlBhc3RlIERhdGFcIlxuICAgIDpkaXNhYmxlZD1cIiFwYXN0ZUVuYWJsZWRcIlxuICAgIEBjbGljaz1cIm9uUGFzdGVcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1jbGlwYm9hcmQuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgICB2LWlmPVwiY2xpcGJvYXJkXCJcbiAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1jb3B5KFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICByZWY9XCJjb3B5RGF0YVwiXG4gICAgICB0aXRsZT1cIkNvcHkgRGF0YVwiXG4gICAgICA6ZGlzYWJsZWQ9XCIhY29weUVuYWJsZWRcIlxuICAgICAgQGNsaWNrPVwib25Db3B5XCJcbiAgICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLXBhc3RlKFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICB0aXRsZT1cIlBhc3RlIERhdGFcIlxuICAgICAgOmRpc2FibGVkPVwiIXBhc3RlRW5hYmxlZFwiXG4gICAgICBAY2xpY2s9XCJvblBhc3RlXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNPYmplY3QsIGNsb25lLCBkZWluZGVudCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWNsaXBib2FyZCcsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgY2xpcGJvYXJkOiB7IHR5cGU6IFtCb29sZWFuLCBPYmplY3RdLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29weUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgcGFzdGVFbmFibGVkOiBmYWxzZSxcbiAgICAgIGZpeENsaXBib2FyZDogdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsaXBib2FyZE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3QodGhpcy5jbGlwYm9hcmQpID8gdGhpcy5jbGlwYm9hcmQgOiB7fVxuICAgIH0sXG5cbiAgICBjb3B5RGF0YSgpIHtcbiAgICAgIGNvbnN0IHsgY29weSB9ID0gdGhpcy5jbGlwYm9hcmRPcHRpb25zXG4gICAgICByZXR1cm4gY29weVxuICAgICAgICA/IGNsaXBib2FyZERhdGEgPT4gY29weS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgY2xpcGJvYXJkRGF0YVxuICAgICAgICB9KSlcbiAgICAgICAgOiBjbGlwYm9hcmREYXRhID0+IGNsb25lKGNsaXBib2FyZERhdGEpXG4gICAgfSxcblxuICAgIHBhc3RlRGF0YSgpIHtcbiAgICAgIGNvbnN0IHsgcGFzdGUgfSA9IHRoaXMuY2xpcGJvYXJkT3B0aW9uc1xuICAgICAgcmV0dXJuIHBhc3RlXG4gICAgICAgID8gY2xpcGJvYXJkRGF0YSA9PiBwYXN0ZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgY2xpcGJvYXJkRGF0YVxuICAgICAgICB9KSlcbiAgICAgICAgOiBjbGlwYm9hcmREYXRhID0+IGNsaXBib2FyZERhdGFcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICAvLyBDaGVjayBjbGlwYm9hcmQgY29udGVudCB3aGVuZXZlciBzb21ldGhpbmcgZ2V0cyBjb3BpZWQgb3IgdGhlIHdpbmRvdyBnZXRzXG4gICAgLy8gKHJlKWFjdGl2YXRlZCwgYXMgdGhvc2UgYXJlIHRoZSBtb21lbnRzIHdoZW4gdGhlIGNsaXBib2FyZCBjYW4gY2hhbmdlOlxuICAgIHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgIGNvcHk6IHRoaXMuY2hlY2tDbGlwYm9hcmRcbiAgICB9KVxuICAgIHRoaXMuZG9tT24od2luZG93LCB7XG4gICAgICBmb2N1czogdGhpcy5jaGVja0NsaXBib2FyZFxuICAgIH0pXG4gICAgdGhpcy4kd2F0Y2goJ2RhdGEnLCB7XG4gICAgICAvLyBDaGVjayByaWdodCBhd2F5IGFsc28gaW4gY2FzZSB0aGVyZSdzIGFscmVhZHkgZGF0YSAoZS5nLiBjcmVhdGUgZm9ybSkuXG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBoYW5kbGVyOiAodG8sIGZyb20pID0+IHtcbiAgICAgICAgaWYgKHRvICE9PSBmcm9tKSB7XG4gICAgICAgICAgdGhpcy5jaGVja0NsaXBib2FyZCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBhc3luYyBnZXRDbGlwYm9hcmREYXRhKHJlcG9ydCkge1xuICAgICAgLy8gVXNlIHRoZSBpbnRlcm5hbCBjbGlwYm9hcmQgYXMgZmFsbGJhY2suXG4gICAgICBsZXQgeyBjbGlwYm9hcmREYXRhIH0gPSB0aGlzLmFwcFN0YXRlXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBqc29uID0gYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ucmVhZFRleHQ/LigpXG4gICAgICAgIGlmICh0aGlzLmZpeENsaXBib2FyZCAmJiBqc29uKSB7XG4gICAgICAgICAgLy8gVGhpcyBhcHBlYXJzIHRvIGJlIG5lZWRlZCBvbiBTYWZhcmkgdG8gcHJldmVudCBhIHN0cmFuZ2UgXCJQYXN0ZVwiXG4gICAgICAgICAgLy8gYnV0dG9uIGZyb20gYXBwZWFyaW5nIHdoZW4gdGhlIGNsaXBib2FyZCBpcyBhY2Nlc3NlZCAod2h5PyEpLlxuICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQ/LndyaXRlVGV4dD8uKGpzb24pXG4gICAgICAgICAgdGhpcy5maXhDbGlwYm9hcmQgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGlmIChqc29uKSB7XG4gICAgICAgICAgY2xpcGJvYXJkRGF0YSA9IEpTT04ucGFyc2UoanNvbilcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChyZXBvcnQpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJyLm5hbWUsIGVyci5tZXNzYWdlKVxuICAgICAgICAgIGlmIChlcnIubmFtZSA9PT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICAgICAgYWxlcnQoZGVpbmRlbnRgXG4gICAgICAgICAgICAgIFRoZSBkYXRhIGluIHRoZSBjbGlwYm9hcmQgYXBwZWFycyB0byBiZSBtYWxmb3JtZWQ6XG4gICAgICAgICAgICAgICR7ZXJyLm1lc3NhZ2V9XG4gICAgICAgICAgICBgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgeyAkc2NoZW1hLCAuLi5kYXRhIH0gPSBjbGlwYm9hcmREYXRhIHx8IHt9XG4gICAgICByZXR1cm4gJHNjaGVtYSA9PT0gdGhpcy5zY2hlbWFDb21wb25lbnQ/LnNjaGVtYS5uYW1lID8gZGF0YSA6IG51bGxcbiAgICB9LFxuXG4gICAgYXN5bmMgY2hlY2tDbGlwYm9hcmQoKSB7XG4gICAgICB0aGlzLmNvcHlFbmFibGVkID0gISF0aGlzLmRhdGFcbiAgICAgIC8vIFNlZSBpZiB0aGUgY2xpcGJvYXJkIGNvbnRlbnQgaXMgdmFsaWQgSlNPTiBkYXRhIHRoYXQgaXMgY29tcGF0aWJsZVxuICAgICAgLy8gd2l0aCB0aGUgY3VycmVudCB0YXJnZXQgc2NoZW1hLCBhbmQgb25seSB0aGVuIGFjdGl2YXRlIHRoZSBwYXN0aW5nOlxuICAgICAgdGhpcy5wYXN0ZUVuYWJsZWQgPSAhIShhd2FpdCB0aGlzLmdldENsaXBib2FyZERhdGEoZmFsc2UpKSAvLyBkb24ndCByZXBvcnRcbiAgICB9LFxuXG4gICAgYXN5bmMgb25Db3B5KCkge1xuICAgICAgbGV0IGRhdGEgPSB0aGlzLnNjaGVtYUNvbXBvbmVudD8uY2xpcGJvYXJkRGF0YVxuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IGRhdGEgJiYgdGhpcy5jb3B5RGF0YShkYXRhKVxuICAgICAgICAvLyBLZWVwIGFuIGludGVybmFsIGNsaXBib2FyZCBhcyBmYWxsYmFjay5cbiAgICAgICAgdGhpcy5hcHBTdGF0ZS5jbGlwYm9hcmREYXRhID0gZGF0YVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKVxuICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQ/LndyaXRlVGV4dD8uKGpzb24pXG4gICAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiBhY3RpdmF0ZSB0aGUgcGFzdGUgYnV0dG9uLCBkZXBlbmRkaW5nIG9uIGJyb3dzZXJzOlxuICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tDbGlwYm9hcmQoKVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJyLm5hbWUsIGVyci5tZXNzYWdlKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICBhbGVydChlcnJvci5tZXNzYWdlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBvblBhc3RlKCkge1xuICAgICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLmdldENsaXBib2FyZERhdGEodHJ1ZSkgLy8gcmVwb3J0XG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gZGF0YSAmJiB0aGlzLnBhc3RlRGF0YShkYXRhKVxuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50LnNldERhdGEoZGF0YSlcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgYWxlcnQoZXJyb3IubWVzc2FnZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldExvYWRpbmcoaXNMb2FkaW5nLCB7IHVwZGF0ZVJvb3QgPSBmYWxzZSwgdXBkYXRlVmlldyA9IGZhbHNlIH0gPSB7fSkge1xuICAgICAgaWYgKCF0aGlzLmlzTG9hZGluZyBeICFpc0xvYWRpbmcpIHsgLy8gQm9vbGVhbiB4b3JcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSAhIWlzTG9hZGluZ1xuICAgICAgICBpZiAodXBkYXRlUm9vdCkge1xuICAgICAgICAgIHRoaXMucm9vdENvbXBvbmVudC5yZWdpc3RlckxvYWRpbmcoaXNMb2FkaW5nKVxuICAgICAgICB9XG4gICAgICAgIGlmICh1cGRhdGVWaWV3KSB7XG4gICAgICAgICAgdGhpcy52aWV3Q29tcG9uZW50LnNldExvYWRpbmcodGhpcy5pc0xvYWRpbmcpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi9JdGVtTWl4aW4uanMnXG5pbXBvcnQgTG9hZGluZ01peGluIGZyb20gJy4vTG9hZGluZ01peGluLmpzJ1xuaW1wb3J0IHsgc2V0RGVmYXVsdHMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGdldFJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0l0ZW1NaXhpbiwgTG9hZGluZ01peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMsXG4gICAgICAvLyBQYXNzIGxvY2FsIHZlcmJzIG92ZXJyaWRlcyBvbiB0byBjaGlsZHJlbiwgc2VlIHZlcmJzKCkgY29tcHV0ZWQgcHJvcC5cbiAgICAgICR2ZXJiczogKCkgPT4gdGhpcy52ZXJicyxcbiAgICAgICRpc1BvcHVsYXRlZDogKCkgPT4gdGhpcy5oYXNEYXRhXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvYWRlZERhdGE6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHJlc291cmNlKCkge1xuICAgICAgLy8gUmV0dXJucyB0aGUgcmVzb3VyY2Ugb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcmVzb3VyY2UgZm9yIHRoZVxuICAgICAgLy8gYXNzb2NpYXRlZCBzb3VyY2Ugc2NoZW1hLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2UoKVxuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICAvLyBUaGlzIGNvbXBvbmVudCBpcyBhIGRhdGEtc291cmNlIGlmIGl0IGhhcyBhbiBhc3NvY2lhdGVkIEFQSSByZXNvdXJjZTpcbiAgICAgIHJldHVybiAhIXRoaXMucmVzb3VyY2VcbiAgICB9LFxuXG4gICAgbGlua3NUb1ZpZXcoKSB7XG4gICAgICAvLyBSZXR1cm5zIGBmYWxzZWBoZXJlLCBidXQgaXMgb3ZlcnJpZGRlbiB0byByZXR1cm4gYHRydWVgIGluXG4gICAgICAvLyBgU291cmNlTWl4aW5gIGZvciBjb21wb25lbnQgdGhhdCBkbyBub3QgcHJvdmlkZSB0aGVpciBvd24gZGF0YSwgYnV0XG4gICAgICAvLyBlZGl0IHRoZWlyIGl0ZW1zIHRocm91Z2ggYSBsaW5rZWQgdmlldy4gIEluIHRoaXMgY2FzZSwgcmVhbCBpZHMgbmVlZCB0b1xuICAgICAgLy8gYmUgdXNlZC5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBpc1RyYW5zaWVudCgpIHtcbiAgICAgIC8vIENoZWNrIHRoZSBmb3JtIHRoYXQgdGhpcyBjb21wb25lbnQgYmVsb25ncyB0byBhcyB3ZWxsLCBzaW5jZSBpdCBtYXkgYmVcbiAgICAgIC8vIGluIGNyZWF0aW9uIG1vZGUsIHdoaWNoIG1ha2VzIGl0IHRyYW5zaWVudC5cbiAgICAgIC8vIE5PVEU6IFRoaXMgZG9lcyBub3QgbG9vcCBlbmRsZXNzbHkgYmVjYXVzZSBEaXRvRm9ybSByZWRlZmluZXNcbiAgICAgIC8vIGBpc1RyYW5zaWVudCgpYCB0byBvbmx5IHJldHVybiBgIXRoaXMucHJvdmlkZXNEYXRhYC5cbiAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZvcm1Db21wb25lbnRcbiAgICAgIHJldHVybiAoXG4gICAgICAgICF0aGlzLnByb3ZpZGVzRGF0YSAmJlxuICAgICAgICAhdGhpcy5saW5rc1RvVmlldyB8fFxuICAgICAgICBmb3JtICYmIChcbiAgICAgICAgICBmb3JtLmlzVHJhbnNpZW50IHx8XG4gICAgICAgICAgZm9ybS5pc0NyZWF0aW5nXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgdHJhbnNpZW50Tm90ZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuaXNUcmFuc2llbnQgJiZcbiAgICAgICAgJzxiPk5vdGU8L2I+OiB0aGUgcGFyZW50IHN0aWxsIG5lZWRzIHRvIGJlIHNhdmVkICcgK1xuICAgICAgICAnaW4gb3JkZXIgdG8gcGVyc2lzdCB0aGlzIGNoYW5nZS4nXG4gICAgICApXG4gICAgfSxcblxuICAgIHNob3VsZExvYWQoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAhdGhpcy5pc1RyYW5zaWVudCAmJlxuICAgICAgICAhdGhpcy5pc0xvYWRpbmdcbiAgICAgIClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIC8vIEJhc2UgZGVmaW5pdGlvbiwgd2lsbCBiZSBvdmVycmlkZGVuIGJ5IERpdG9Gb3JtIGFuZCBTb3VyY2VNaXhpblxuICAgICAgcmV0dXJuICEhdGhpcy5sb2FkZWREYXRhXG4gICAgfSxcblxuICAgIHZlcmJzKCkge1xuICAgICAgLy8gVGhlIGFjdHVhbCBjb2RlIGlzIHRoZSBgZ2V0VmVyYnMoKWAgbWV0aG9kLCBmb3IgZWFzaWVyIG92ZXJyaWRpbmcgb2ZcbiAgICAgIC8vIHRoaXMgY29tcHV0ZWQgcHJvcGVydHkgaW4gY29tcG9uZW50cyB0aGF0IHVzZSB0aGUgUmVzb3VyY2VNaXhpbi5cbiAgICAgIHJldHVybiB0aGlzLmdldFZlcmJzKClcbiAgICB9LFxuXG4gICAgcGFnaW5hdGlvblJhbmdlKCkge1xuICAgICAgLy8gT25seSBhcHBseSBwYWdpbmF0aW9uIHRvIGxpc3RzLlxuICAgICAgY29uc3QgeyBwYWdpbmF0ZTogYW1vdW50IH0gPSB0aGlzLnNvdXJjZVNjaGVtYVxuICAgICAgaWYgKHRoaXMuaXNMaXN0U291cmNlICYmIGFtb3VudCkge1xuICAgICAgICBjb25zdCB7IHBhZ2UgPSAwIH0gPSB0aGlzLnF1ZXJ5IHx8IHt9XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gcGFnZSAqIGFtb3VudFxuICAgICAgICByZXR1cm4gW3N0YXJ0LCBzdGFydCArIGFtb3VudCAtIDFdXG4gICAgICB9XG4gICAgfSxcblxuICAgIHF1ZXJ5UGFyYW1zKCkge1xuICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnBhZ2luYXRpb25SYW5nZVxuICAgICAgY29uc3QgeyBwYWdlLCAuLi5xdWVyeSB9ID0gdGhpcy5xdWVyeSB8fCB7fVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucXVlcnksIC8vIFF1ZXJ5IG1heSBvdmVycmlkZSBzY29wZS5cbiAgICAgICAgLi4uKHJhbmdlICYmIHtcbiAgICAgICAgICAvLyBQYXNzIHBhZ2luYXRpb24gYXMgcmFuZ2UsIHNvIHRoYXQgd2UgYXV0b21hdGljYWxseSBnZXQgT2JqZWN0aW9uJ3NcbiAgICAgICAgICAvLyByZXN1bHRzIGNvdW50aW5nOlxuICAgICAgICAgIHJhbmdlOiByYW5nZS5qb2luKCcsJylcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICAvLyBXaGVuIGNyZWF0aW5nIG5lc3RlZCBkYXRhLCB3ZSBzdGlsbCBuZWVkIHRvIGNhbGwgc2V0dXBEYXRhKClcbiAgICBpZiAodGhpcy5wcm92aWRlc0RhdGEgfHwgdGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICB0aGlzLnNldHVwRGF0YSgpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRSZXNvdXJjZSgpIHtcbiAgICAgIC8vIFRoaXMgaXMgZGVmaW5lZCBhcyBhIG1ldGhvZCBzbyB0aGUgY29tcHV0ZWQgYHJlc291cmNlYCBnZXR0ZXIgY2FuXG4gICAgICAvLyBiZSBvdmVycmlkZGVuIGFuZCBgc3VwZXJgIGZ1bmN0aW9uYWxpdHkgY2FuIHN0aWxsIGJlIGFjY2Vzc2VkLlxuICAgICAgcmV0dXJuIGdldFJlc291cmNlKHRoaXMuc291cmNlU2NoZW1hPy5yZXNvdXJjZSwge1xuICAgICAgICB0eXBlOiAnY29sbGVjdGlvbicsXG4gICAgICAgIHBhcmVudDogdGhpcy5wYXJlbnRGb3JtQ29tcG9uZW50Py5yZXNvdXJjZSA/PyBudWxsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRWZXJicygpIHtcbiAgICAgIGNvbnN0IHZlcmJzID0gdGhpcy4kdmVyYnMoKVxuICAgICAgcmV0dXJuIHRoaXMuaXNUcmFuc2llbnRcbiAgICAgICAgPyB7XG4gICAgICAgICAgLi4udmVyYnMsXG4gICAgICAgICAgLy8gT3ZlcnJpZGUgZGVmYXVsdCB2ZXJicyB3aXRoIHRoZWlyIHRyYW5zaWVudCB2ZXJzaW9uczpcbiAgICAgICAgICBjcmVhdGU6ICdhZGQnLFxuICAgICAgICAgIGNyZWF0ZWQ6ICdhZGRlZCcsXG4gICAgICAgICAgc2F2ZTogJ2FwcGx5JyxcbiAgICAgICAgICBzYXZlZDogJ2FwcGxpZWQnLFxuICAgICAgICAgIGRlbGV0ZTogJ3JlbW92ZScsXG4gICAgICAgICAgZGVsZXRlZDogJ3JlbW92ZWQnXG4gICAgICAgIH1cbiAgICAgICAgOiB2ZXJic1xuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLmxvYWRlZERhdGEgPSBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgdGhpcy5sb2FkZWREYXRhID0gZGF0YVxuICAgIH0sXG5cbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICAvLyBBY3R1YWwgY29kZSBpcyBpbiBzZXBhcmF0ZSBmdW5jdGlvbiBzbyBpdCdzIGVhc2VyIHRvIG92ZXJyaWRlXG4gICAgICAvLyBgc2V0dXBEYXRhKClgIGFuZCBhbmQgY2FsbCBgZW5zdXJlRGF0YSgpYCBmcm9tIHRoZSBvdmVycmlkZXMsXG4gICAgICAvLyBzZWUgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluLlxuICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICB9LFxuXG4gICAgZW5zdXJlRGF0YSgpIHtcbiAgICAgIGlmICh0aGlzLnNob3VsZExvYWQpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzRGF0YSkge1xuICAgICAgICAgIHRoaXMucmVsb2FkRGF0YSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2FkRGF0YSh0cnVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlbG9hZERhdGEoKSB7XG4gICAgICB0aGlzLmxvYWREYXRhKGZhbHNlKVxuICAgIH0sXG5cbiAgICBsb2FkRGF0YShjbGVhcikge1xuICAgICAgaWYgKCF0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIGlmIChjbGVhcikge1xuICAgICAgICAgIHRoaXMuY2xlYXJEYXRhKClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlcXVlc3REYXRhKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlRGF0YShzY2hlbWEsIHR5cGUpIHtcbiAgICAgIHJldHVybiBzZXREZWZhdWx0cyhzY2hlbWEsIHR5cGUgPyB7IHR5cGUgfSA6IHt9LCB0aGlzKVxuICAgIH0sXG5cbiAgICByZXF1ZXN0RGF0YSgpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5xdWVyeVBhcmFtc1xuICAgICAgdGhpcy5oYW5kbGVSZXF1ZXN0KHsgbWV0aG9kOiAnZ2V0JywgcXVlcnkgfSwgKGVyciwgcmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgY29uc3QgeyBkYXRhIH0gPSByZXNwb25zZVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBkYXRhPy50eXBlID09PSAnRmlsdGVyVmFsaWRhdGlvbicgJiZcbiAgICAgICAgICAgICAgdGhpcy5vbkZpbHRlckVycm9ycz8uKGRhdGEuZXJyb3JzKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzVW5hdXRob3JpemVkRXJyb3IocmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgIC8vIFRPRE86IENhbiB3ZSByZWFsbHkgc3dhbGxvdyB0aGVzZSBlcnJvcnM/XG4gICAgICAgICAgICAgIC8vIElzIGNhbGxpbmcgYGVuc3VyZVVzZXIoKWAgaW4gYG9uQmVmb3JlUmVxdWVzdCgpYCBlbm91Z2g/XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2V0RGF0YShyZXNwb25zZS5kYXRhKVxuICAgICAgICAgIHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdsb2FkJylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0aW9uRXJyb3IocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXNwb25zZT8uc3RhdHVzID09PSA0MDBcbiAgICB9LFxuXG4gICAgaXNVbmF1dGhvcml6ZWRFcnJvcihyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlPy5zdGF0dXMgPT09IDQwMVxuICAgIH0sXG5cbiAgICBhc3luYyBoYW5kbGVSZXF1ZXN0KHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIHJlc291cmNlID0gdGhpcy5yZXNvdXJjZSxcbiAgICAgIHF1ZXJ5LFxuICAgICAgZGF0YVxuICAgIH0sIGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBsb2FkaW5nT3B0aW9ucyA9IHtcbiAgICAgICAgdXBkYXRlUm9vdDogdHJ1ZSwgLy8gRGlzcGxheSBzcGlubmVyIGluIGhlYWRlciB3aGVuIGxvYWRpbmcgaW4gcmVzb3VyY2VzXG4gICAgICAgIHVwZGF0ZVZpZXc6IHRoaXMuaXNJblZpZXcgLy8gTm90aWZ5IHZpZXcgb2YgbG9hZGluZyBmb3IgdmlldyBjb21wb25lbnRzXG4gICAgICB9XG4gICAgICB0aGlzLnNldExvYWRpbmcodHJ1ZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICBjb25zdCByZXF1ZXN0ID0geyBtZXRob2QsIHJlc291cmNlLCBkYXRhLCBxdWVyeSB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3QocmVxdWVzdClcbiAgICAgICAgLy8gUGFzcyBib3RoIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHRvIHRoZSBjYWxsYmFjaywgc28gdGhleSBjYW4gYmVcbiAgICAgICAgLy8gZXhwb3NlZCB0byBmdXJ0aGVyIGNhbGxiYWNrcyB0aHJvdWdoIERpdG9Db250ZXh0LlxuICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIElmIGNhbGxiYWNrIHJldHVybnMgdHJ1ZSwgZXJyb3JzIHdlcmUgYWxyZWFkeSBoYW5kbGVkLlxuICAgICAgICBjb25zdCB7IHJlc3BvbnNlIH0gPSBlcnJvclxuICAgICAgICBpZiAoIWNhbGxiYWNrKGVycm9yLCByZXNwb25zZSkpIHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2U/LmRhdGFcbiAgICAgICAgICBpZiAoZGF0YSAmJiBpc1N0cmluZyhkYXRhLnR5cGUpKSB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIHRpdGxlOiBsYWJlbGl6ZShkYXRhLnR5cGUpLFxuICAgICAgICAgICAgICB0ZXh0OiBkYXRhLm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgICAgICAgdGV4dDogZXJyb3JcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnNldExvYWRpbmcoZmFsc2UsIGxvYWRpbmdPcHRpb25zKVxuICAgIH0sXG5cbiAgICBnZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZCkge1xuICAgICAgLy8gQ29udmVudGlvbjogb25seSBwb3N0LCBwdXQgYW5kIHBhdGNoIHJlcXVlc3RzIHBhc3MgdGhlIGRhdGEgYXMgcGF5bG9hZC5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXS5pbmNsdWRlcyhtZXRob2QpICYmIChcbiAgICAgICAgICAvLyBUT0RPOiBVc2UgYGhhbmRsZURhdGFTY2hlbWEoKWAgYXN5bmNocm9ub3VzbHkgaGVyZSBpbnN0ZWFkLCB0b1xuICAgICAgICAgIC8vIG9mZmVyIHRoZSBzYW1lIGFtb3VudCBvZiBwb3NzaWJpbGl0aWVzIGZvciBkYXRhIGxvYWRpbmcuXG4gICAgICAgICAgYnV0dG9uLmdldFNjaGVtYVZhbHVlKFsncmVzb3VyY2UnLCAnZGF0YSddKSB8fFxuICAgICAgICAgIGJ1dHRvbi5wcm9jZXNzZWRJdGVtXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0KGJ1dHRvbikge1xuICAgICAgY29uc3QgcmVzb3VyY2UgPSBnZXRSZXNvdXJjZShidXR0b24uc2NoZW1hLnJlc291cmNlLCB7XG4gICAgICAgIHBhcmVudDogdGhpcy5yZXNvdXJjZVxuICAgICAgfSlcbiAgICAgIGlmIChyZXNvdXJjZSkge1xuICAgICAgICBjb25zdCB7IG1ldGhvZCB9ID0gcmVzb3VyY2VcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0UGF5bG9hZERhdGEoYnV0dG9uLCBtZXRob2QpXG4gICAgICAgIHJldHVybiB0aGlzLnN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXRSZXNvdXJjZShidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgIHNldERhdGEgPSBmYWxzZSxcbiAgICAgIG9uU3VjY2VzcyxcbiAgICAgIG9uRXJyb3IsXG4gICAgICBub3RpZnlTdWNjZXNzID0gKCkgPT4gdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgIHRpdGxlOiAnUmVxdWVzdCBTdWNjZXNzZnVsJyxcbiAgICAgICAgdGV4dDogJ1JlcXVlc3Qgd2FzIHN1Y2Nlc3NmdWxseSBzZW50LidcbiAgICAgIH0pLFxuICAgICAgbm90aWZ5RXJyb3IgPSBlcnJvciA9PiB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgIHRleHQ6IFtcbiAgICAgICAgICBgVW5hYmxlIHRvIHNlbmQgcmVxdWVzdCR7ZXJyb3IgPyAnOicgOiAnJ31gLFxuICAgICAgICAgIGVycm9yPy5tZXNzYWdlIHx8IGVycm9yXG4gICAgICAgIF1cbiAgICAgIH0pXG4gICAgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdChcbiAgICAgICAgICB7IG1ldGhvZCwgcmVzb3VyY2UsIGRhdGEgfSxcbiAgICAgICAgICBhc3luYyAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlPy5kYXRhXG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBEaXRvIHZhbGlkYXRpb24gZXJyb3I6XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuaXNWYWxpZGF0aW9uRXJyb3IocmVzcG9uc2UpICYmIGRhdGEuZXJyb3JzXG4gICAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgdHJ1ZSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IGlzT2JqZWN0KGRhdGEpID8gZGF0YSA6IGVyclxuICAgICAgICAgICAgICAgIG9uRXJyb3I/LihlcnJvcilcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdlcnJvcicsIHtcbiAgICAgICAgICAgICAgICAgIG5vdGlmeTogbm90aWZ5RXJyb3IsXG4gICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdW5kZXJseWluZyBkYXRhIGJlZm9yZSBjYWxsaW5nIGBub3RpZnkoKWAgb3JcbiAgICAgICAgICAgICAgLy8gYHRoaXMuaXRlbUxhYmVsYCwgc28gaWQgaXMgc2V0IGFmdGVyIGNyZWF0aW5nIG5ldyBpdGVtcy5cbiAgICAgICAgICAgICAgaWYgKHNldERhdGEgJiYgZGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YShkYXRhKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG9uU3VjY2Vzcz8uKClcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnc3VjY2VzcycsIHtcbiAgICAgICAgICAgICAgICBub3RpZnk6IG5vdGlmeVN1Y2Nlc3NcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgZXZlbnQsIHsgbm90aWZ5LCBlcnJvciB9KSB7XG4gICAgICAvLyBDcmVhdGUgdGhlIGNvbnRleHQgb3V0c2lkZSBvZiBgZW1pdEV2ZW50KClgLCBzbyB0aGF0XG4gICAgICAvLyBgY29udGV4dC53YXNOb3RpZmllZGAgY2FuIGJlIGNoZWNrZWQgYWZ0ZXIuXG4gICAgICBjb25zdCBjb250ZXh0ID0gbmV3IERpdG9Db250ZXh0KGJ1dHRvbiwge1xuICAgICAgICBuZXN0ZWQ6IGZhbHNlLFxuICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXG4gICAgICAgIGl0ZW1MYWJlbDogdGhpcy5pdGVtTGFiZWwsXG4gICAgICAgIGVycm9yXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYnV0dG9uLmVtaXRFdmVudChldmVudCwgeyBjb250ZXh0IH0pXG4gICAgICBpZiAoXG4gICAgICAgIG5vdGlmeSAmJlxuICAgICAgICAvLyBQcmV2ZW50IGRlZmF1bHQgaWYgYW55dGhpbmcgd2FzIHJldHVybmVkIGZyb20gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICAgIHJlcyA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgIC8vIERvIG5vdCBkaXNwbGF5IGRlZmF1bHQgbm90aWZpY2F0aW9uIGlmIHRoZSBldmVudCBoYW5kbGVyIGFscmVhZHlcbiAgICAgICAgLy8gZGlzcGxheWVkIGEgbm90aWZpY2F0aW9uLlxuICAgICAgICAhY29udGV4dC53YXNOb3RpZmllZFxuICAgICAgKSB7XG4gICAgICAgIG5vdGlmeShlcnJvcilcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gIH1cbn1cbiIsIlxuLmRpdG8tZm9ybS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIDpjbGFzcz1cInsgJ2RpdG8tZm9ybS1uZXN0ZWQnOiBpc05lc3RlZFJvdXRlIH1cIlxuKVxuICAvLyBOT1RFOiBOZXN0ZWQgZm9ybSBjb21wb25lbnRzIGFyZSBrZXB0IGFsaXZlIGJ5IHVzaW5nIGB2LXNob3dgIGluc3RlYWQgb2ZcbiAgLy8gYHYtaWZgIGhlcmUsIHNvIGV2ZW50IGhhbmRsaW5nIGFuZCBvdGhlciB0aGluZ3Mgc3RpbGwgd29yayB3aXRoIG5lc3RlZFxuICAvLyBlZGl0aW5nLiBPbmx5IHJlbmRlciBhIHJvdXRlci12aWV3IGhlcmUgaWYgdGhpcyBpc24ndCB0aGUgbGFzdCBkYXRhIHJvdXRlXG4gIC8vIGFuZCBub3QgYSBuZXN0ZWQgZm9ybSByb3V0ZSwgd2hpY2ggd2lsbCBhcHBlYXIgZWxzZXdoZXJlIGluIGl0cyBvd24gdmlldy5cbiAgcm91dGVyLXZpZXcoXG4gICAgdi1pZj1cIiEoaXNMYXN0VW5uZXN0ZWRSb3V0ZSB8fCBpc05lc3RlZFJvdXRlKVwiXG4gICAgdi1zaG93PVwiIWlzQWN0aXZlXCJcbiAgKVxuICAvLyBVc2UgYSA8ZGl2PiBmb3IgaW5saW5lZCBmb3JtcywgYXMgd2Ugc2hvdWxkbid0IG5lc3QgYWN0dWFsIDxmb3JtPiB0YWdzLlxuICBjb21wb25lbnQuZGl0by1zY3JvbGwoXG4gICAgdi1zaG93PVwiaXNBY3RpdmVcIlxuICAgIDppcz1cImlzTmVzdGVkUm91dGUgPyAnZGl2JyA6ICdmb3JtJ1wiXG4gICAgQHN1Ym1pdC5wcmV2ZW50XG4gIClcbiAgICAvLyBQcmV2ZW50IGltcGxpY2l0IHN1Ym1pc3Npb24gb2YgdGhlIGZvcm0sIGZvciBleGFtcGxlIHdoZW4gdHlwaW5nIGVudGVyXG4gICAgLy8gaW4gYW4gaW5wdXQgZmllbGQuXG4gICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzUxNTA3ODA2XG4gICAgYnV0dG9uKFxuICAgICAgdi1zaG93PVwiZmFsc2VcIlxuICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICBkaXNhYmxlZD1cInRydWVcIlxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICApXG4gICAgZGl0by1zY2hlbWEoXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgIDptZW51SGVhZGVyPVwidHJ1ZVwiXG4gICAgKVxuICAgICAgZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZC5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICAgIHNsb3Q9XCJidXR0b25zXCJcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZm9ybS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIDpjbGFzcz1cInsgJ2RpdG8tZm9ybS1uZXN0ZWQnOiBpc05lc3RlZFJvdXRlIH1cIlxuKVxuICAvLyBOT1RFOiBOZXN0ZWQgZm9ybSBjb21wb25lbnRzIGFyZSBrZXB0IGFsaXZlIGJ5IHVzaW5nIGB2LXNob3dgIGluc3RlYWQgb2ZcbiAgLy8gYHYtaWZgIGhlcmUsIHNvIGV2ZW50IGhhbmRsaW5nIGFuZCBvdGhlciB0aGluZ3Mgc3RpbGwgd29yayB3aXRoIG5lc3RlZFxuICAvLyBlZGl0aW5nLiBPbmx5IHJlbmRlciBhIHJvdXRlci12aWV3IGhlcmUgaWYgdGhpcyBpc24ndCB0aGUgbGFzdCBkYXRhIHJvdXRlXG4gIC8vIGFuZCBub3QgYSBuZXN0ZWQgZm9ybSByb3V0ZSwgd2hpY2ggd2lsbCBhcHBlYXIgZWxzZXdoZXJlIGluIGl0cyBvd24gdmlldy5cbiAgcm91dGVyLXZpZXcoXG4gICAgdi1pZj1cIiEoaXNMYXN0VW5uZXN0ZWRSb3V0ZSB8fCBpc05lc3RlZFJvdXRlKVwiXG4gICAgdi1zaG93PVwiIWlzQWN0aXZlXCJcbiAgKVxuICAvLyBVc2UgYSA8ZGl2PiBmb3IgaW5saW5lZCBmb3JtcywgYXMgd2Ugc2hvdWxkbid0IG5lc3QgYWN0dWFsIDxmb3JtPiB0YWdzLlxuICBjb21wb25lbnQuZGl0by1zY3JvbGwoXG4gICAgdi1zaG93PVwiaXNBY3RpdmVcIlxuICAgIDppcz1cImlzTmVzdGVkUm91dGUgPyAnZGl2JyA6ICdmb3JtJ1wiXG4gICAgQHN1Ym1pdC5wcmV2ZW50XG4gIClcbiAgICAvLyBQcmV2ZW50IGltcGxpY2l0IHN1Ym1pc3Npb24gb2YgdGhlIGZvcm0sIGZvciBleGFtcGxlIHdoZW4gdHlwaW5nIGVudGVyXG4gICAgLy8gaW4gYW4gaW5wdXQgZmllbGQuXG4gICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzUxNTA3ODA2XG4gICAgYnV0dG9uKFxuICAgICAgdi1zaG93PVwiZmFsc2VcIlxuICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICBkaXNhYmxlZD1cInRydWVcIlxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICApXG4gICAgZGl0by1zY2hlbWEoXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgIDptZW51SGVhZGVyPVwidHJ1ZVwiXG4gICAgKVxuICAgICAgZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZC5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICAgIHNsb3Q9XCJidXR0b25zXCJcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgY2xvbmUsIGNhcGl0YWxpemUsIHBhcnNlRGF0YVBhdGgsIG1lcmdlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUm91dGVNaXhpbiBmcm9tICcuLi9taXhpbnMvUm91dGVNaXhpbi5qcydcbmltcG9ydCBSZXNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9SZXNvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UsIGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzLCBpc09iamVjdFNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWZvcm0nLCB7XG4gIG1peGluczogW1JvdXRlTWl4aW4sIFJlc291cmNlTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNyZWF0ZWREYXRhOiBudWxsLFxuICAgICAgY2xvbmVkRGF0YTogdW5kZWZpbmVkLFxuICAgICAgc291cmNlS2V5OiBudWxsLFxuICAgICAgaXNGb3JtOiB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdmVyYnMoKSB7XG4gICAgICAvLyBBZGQgc3VibWl0IC8gc3VibWl0dGVkIHRvIHRoZSB2ZXJicyByZXR1cm5lZCBieSBSZXNvdXJjZU1peGluXG4gICAgICAvLyBOT1RFOiBUaGVzZSBnZXQgcGFzc2VkIG9uIHRvIGNoaWxkcmVuIHRocm91Z2g6XG4gICAgICAvLyBgcHJvdmlkZSgpIC4uLiB7ICR2ZXJiczogKCkgPT4gdGhpcy52ZXJicyB9YCBpbiBSZXNvdXJjZU1peGluXG4gICAgICBjb25zdCB2ZXJicyA9IHRoaXMuZ2V0VmVyYnMoKVxuICAgICAgY29uc3QgeyBpc0NyZWF0aW5nLCBwcm92aWRlc0RhdGEgfSA9IHRoaXNcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnZlcmJzLFxuICAgICAgICBzdWJtaXQ6IGlzQ3JlYXRpbmcgPyB2ZXJicy5jcmVhdGUgOiB2ZXJicy5zYXZlLFxuICAgICAgICBzdWJtaXR0ZWQ6IGlzQ3JlYXRpbmcgPyB2ZXJicy5jcmVhdGVkIDogdmVyYnMuc2F2ZWQsXG4gICAgICAgIGNhbmNlbDogcHJvdmlkZXNEYXRhID8gdmVyYnMuY2FuY2VsIDogdmVyYnMuY2xvc2UsXG4gICAgICAgIGNhbmNlbGxlZDogcHJvdmlkZXNEYXRhID8gdmVyYnMuY2FuY2VsbGVkIDogdmVyYnMuY2xvc2VkXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEl0ZW1Gb3JtU2NoZW1hKFxuICAgICAgICB0aGlzLnNvdXJjZVNjaGVtYSxcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZGF0YSB5ZXQsIHByb3ZpZGUgYW4gZW1wdHkgb2JqZWN0IHdpdGgganVzdCB0aGUgcmlnaHRcbiAgICAgICAgLy8gdHlwZSBzZXQsIHNvIHRoZSBmb3JtIGNhbiBhbHdheXMgYmUgZGV0ZXJtaW5lZC5cbiAgICAgICAgdGhpcy5kYXRhIHx8IHsgdHlwZTogdGhpcy50eXBlIH0sXG4gICAgICAgIHRoaXMuY29udGV4dFxuICAgICAgKSB8fCB7fSAvLyBBbHdheXMgcmV0dXJuIGEgc2NoZW1hIG9iamVjdCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGZvciBpdC5cbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBnZXRCdXR0b25TY2hlbWFzKFxuICAgICAgICBtZXJnZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjYW5jZWw6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLmNhbmNlbCgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHN1Ym1pdDogIXRoaXMuZG9lc011dGF0ZSAmJiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdzdWJtaXQnLFxuICAgICAgICAgICAgICAvLyBTdWJtaXQgYnV0dG9ucyBjbG9zZSB0aGUgZm9ybSBieSBkZWZhdWx0OlxuICAgICAgICAgICAgICBjbG9zZUZvcm06IHRydWUsXG4gICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiAoeyBjb21wb25lbnQ6IGJ1dHRvbiB9KSA9PiBidXR0b24uc3VibWl0KClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy5zY2hlbWEuYnV0dG9uc1xuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNMYXN0Um91dGUgfHwgdGhpcy5pc0xhc3RVbm5lc3RlZFJvdXRlXG4gICAgfSxcblxuICAgIGlzVHJhbnNpZW50KCkge1xuICAgICAgcmV0dXJuICF0aGlzLnByb3ZpZGVzRGF0YVxuICAgIH0sXG5cbiAgICBpc0NyZWF0aW5nKCkge1xuICAgICAgLy8gdGhpcy5wYXJhbSBpcyBpbmhlcml0ZWQgZnJvbSBSb3V0ZU1peGluXG4gICAgICByZXR1cm4gdGhpcy5wYXJhbSA9PT0gJ2NyZWF0ZSdcbiAgICB9LFxuXG4gICAgaXNEaXJ0eSgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5kb2VzTXV0YXRlICYmICEhdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50Py5pc0RpcnR5XG4gICAgfSxcblxuICAgIHNlbGVjdGVkVGFiKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uc2VsZWN0ZWRUYWIgfHwgbnVsbFxuICAgIH0sXG5cbiAgICBkb2VzTXV0YXRlKCkge1xuICAgICAgLy8gV2hlbiBgc291cmNlU2NoZW1hLm11dGF0ZWAgaXMgdHJ1ZSwgdGhlIGZvcm0gZWRpdHMgdGhlIGluaGVyaXRlZCBkYXRhXG4gICAgICAvLyBkaXJlY3RseSBpbnN0ZWFkIG9mIG1ha2luZyBhIGNvcHkgZm9yIGFwcGxpY2F0aW9uIHVwb24gc3VibWl0LlxuICAgICAgLy8gU2VlIGBpbmhlcml0ZWREYXRhKClgIGNvbXB1dGVkIHByb3BlcnR5IGZvciBtb3JlIGRldGFpbHMuXG4gICAgICByZXR1cm4gdGhpcy5zb3VyY2VTY2hlbWEubXV0YXRlXG4gICAgfSxcblxuICAgIHR5cGUoKSB7XG4gICAgICAvLyBUaGUgdHlwZSBvZiBmb3JtIHRvIGNyZWF0ZSwgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGZvcm1zIHRvIGNob29zZSBmcm9tLlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnF1ZXJ5LnR5cGVcbiAgICB9LFxuXG4gICAgaXRlbUlkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICA/IG51bGxcbiAgICAgICAgOiAodGhpcy5wYXJhbSA/PyBudWxsKVxuICAgIH0sXG5cbiAgICBtZXRob2QoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0NyZWF0aW5nID8gJ3Bvc3QnIDogJ3BhdGNoJ1xuICAgIH0sXG5cbiAgICByZXNvdXJjZSgpIHtcbiAgICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5nZXRSZXNvdXJjZSgpXG4gICAgICByZXR1cm4gZ2V0TWVtYmVyUmVzb3VyY2UodGhpcy5pdGVtSWQsIHJlc291cmNlKSB8fCByZXNvdXJjZVxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iUHJlZml4KCkge1xuICAgICAgcmV0dXJuIGNhcGl0YWxpemUodGhpcy5pc0NyZWF0aW5nID8gdGhpcy52ZXJicy5jcmVhdGUgOiB0aGlzLnZlcmJzLmVkaXQpXG4gICAgfSxcblxuICAgIGRhdGEoKSB7XG4gICAgICAvLyBSZXR1cm4gZGlmZmVyZW50IGRhdGEgXCJjb250YWluZXJzXCIgYmFzZWQgb24gZGlmZmVyZW50IHNjZW5hcmlvczpcbiAgICAgIC8vIDEuIGNyZWF0ZWREYXRhLCBpZiB3ZSdyZSBpbiBhIGZvcm0gZm9yIGEgbmV3bHkgY3JlYXRlZCBvYmplY3QuXG4gICAgICAvLyAyLiBsb2FkZWREYXRhLCBpZiB0aGUgZm9ybSBpdHNlbGYgaXMgdGhlIHJvb3Qgb2YgdGhlIGRhdGEgKGUuZy4gd2hlblxuICAgICAgLy8gICAgZGlyZWN0bHkgbG9hZGluZyBhbiBlZGl0aW5nIHJvb3QpLlxuICAgICAgLy8gMy4gVGhlIGRhdGEgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCwgd2hpY2ggaXRzZWxmIG1heSBiZSBlaXRoZXIgYVxuICAgICAgLy8gICAgdmlldyB0aGF0IGxvYWRlZCB0aGUgZGF0YSwgb3IgYSBmb3JtIHRoYXQgZWl0aGVyIGxvYWRlZCB0aGUgZGF0YSwgb3JcbiAgICAgIC8vICAgIGFsc28gaW5oZXJpdGVkIGl0IGZyb20gaXRzIHBhcmVudC4gTm90ZSB0aGF0IHdlIHVzZSBhIGNsb25lIG9mIGl0LFxuICAgICAgLy8gICAgc28sIGRhdGEgY2hhbmdlcyBhcmVuJ3QgYXBwbGllZCB1bnRpbCBzZXRTb3VyY2VEYXRhKCkgaXMgY2FsbGVkLlxuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlZERhdGEgfHwgdGhpcy5sb2FkZWREYXRhIHx8IHRoaXMuaW5oZXJpdGVkRGF0YSB8fCBudWxsXG4gICAgfSxcblxuICAgIGRhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0YVBhdGhGcm9tKHRoaXMuZGF0YUNvbXBvbmVudClcbiAgICB9LFxuXG4gICAgc291cmNlRGF0YSgpIHtcbiAgICAgIC8vIFBvc3NpYmxlIHBhcmVudHMgYXJlIERpdG9Gb3JtIGZvciBmb3Jtcywgb3IgRGl0b1ZpZXcgZm9yIHJvb3QgbGlzdHMuXG4gICAgICAvLyBCb3RoIGhhdmUgYSBkYXRhIHByb3BlcnR5IHdoaWNoIGFic3RyYWN0cyBhd2F5IGxvYWRpbmcgYW5kIGluaGVyaXRpbmdcbiAgICAgIC8vIG9mIGRhdGEuXG4gICAgICBsZXQgeyBkYXRhIH0gPSB0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICAvLyBIYW5kbGUgbmVzdGVkIGRhdGEgYnkgc3BsaXR0aW5nIHRoZSBkYXRhUGF0aCwgaXRlcmF0ZSB0aHJvdWdoIHRoZVxuICAgICAgICAvLyBhY3R1YWwgZGF0YSBhbmQgbG9vayBuZXN0IGNoaWxkLWRhdGEgdXAuXG4gICAgICAgIGNvbnN0IGRhdGFQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoXG4gICAgICAgICAgdGhpcy5nZXREYXRhUGF0aEZyb20odGhpcy5wYXJlbnRSb3V0ZUNvbXBvbmVudClcbiAgICAgICAgKVxuICAgICAgICAvLyBDb21wYXJlIGRhdGFQYXJ0cyBhZ2FpbnN0IG1hdGNoZWQgcm91dGVQYXRoIHBhcnRzLCB0byBpZGVudGlmeSB0aG9zZVxuICAgICAgICAvLyBwYXJ0cyB0aGF0IG5lZWQgdG8gYmUgdHJlYXRlZCBsaWtlIGlkcyBhbmQgbWFwcGVkIHRvIGluZGljZXMgaW4gZGF0YS5cbiAgICAgICAgY29uc3QgcGF0aFBhcnRzID0gdGhpcy5yb3V0ZVJlY29yZC5wYXRoLnNwbGl0KCcvJylcbiAgICAgICAgY29uc3Qgcm91dGVQYXJ0cyA9IHBhdGhQYXJ0cy5zbGljZShwYXRoUGFydHMubGVuZ3RoIC0gZGF0YVBhcnRzLmxlbmd0aClcbiAgICAgICAgdGhpcy5zb3VyY2VLZXkgPSBudWxsXG4gICAgICAgIGNvbnN0IGxhc3REYXRhUGFydCA9IGRhdGFQYXJ0c1tkYXRhUGFydHMubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKSAmJiBsYXN0RGF0YVBhcnQgPT09ICdjcmVhdGUnKSB7XG4gICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBvYmplY3Qgc291cmNlIGFuZCBhcmUgY3JlYXRpbmcsIHRoZSBkYXRhUGF0aCBuZWVkcyB0b1xuICAgICAgICAgIC8vIGJlIHNob3J0ZW5lZCBieSB0aGUgJ2NyZWF0ZScgZW50cnkuIFRoaXMgaXNuJ3QgbmVlZGVkIGZvciBsaXN0XG4gICAgICAgICAgLy8gc291cmNlcywgYXMgdGhlcmUgdGhlIHBhcmFtZXRlciBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlIGl0ZW0gaWQuXG4gICAgICAgICAgZGF0YVBhcnRzLmxlbmd0aC0tXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBkYXRhUGFydHMubGVuZ3RoOyBpIDwgbCAmJiBkYXRhOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXRhUGFydCA9IGRhdGFQYXJ0c1tpXVxuICAgICAgICAgIC8vIElmIHRoaXMgaXMgYW4gOmlkIHBhcnQsIGZpbmQgdGhlIGluZGV4IG9mIHRoZSBpdGVtIHdpdGggZ2l2ZW4gaWQuXG4gICAgICAgICAgY29uc3Qga2V5ID0gL146aWQvLnRlc3Qocm91dGVQYXJ0c1tpXSlcbiAgICAgICAgICAgID8gZGF0YVBhcnQgPT09ICdjcmVhdGUnXG4gICAgICAgICAgICAgID8gbnVsbCAvLyBUaGVyZSdzIG5vIGluZGV4IGZvciBlbnRyaWVzIGFib3V0IHRvIGJlIGNyZWF0ZWRcbiAgICAgICAgICAgICAgOiB0aGlzLmZpbmRJdGVtSWRJbmRleCh0aGlzLnNvdXJjZVNjaGVtYSwgZGF0YSwgZGF0YVBhcnQpXG4gICAgICAgICAgICA6IGRhdGFQYXJ0XG4gICAgICAgICAgLy8gU2tpcCB0aGUgZmluYWwgbG9va3VwIGJ1dCByZW1lbWJlciBgc291cmNlS2V5YCwgYXMgd2Ugd2FudCB0aGVcbiAgICAgICAgICAvLyBwYXJlbnQgZGF0YSBzbyB3ZSBjYW4gcmVwbGFjZSB0aGUgZW50cnkgYXQgYHNvdXJjZUtleWAgb24gaXQuXG4gICAgICAgICAgaWYgKGkgPT09IGwgLSAxKSB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZUtleSA9IGtleVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhID0gZGF0YVtrZXldXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVxuICAgIH0sXG5cbiAgICBpbmhlcml0ZWREYXRhKCkge1xuICAgICAgLy8gRGF0YSBpbmhlcml0ZWQgZnJvbSBwYXJlbnQsIGFuZCBjbG9uZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IHJlYWN0aXZlXG4gICAgICAvLyBjaGFuZ2VzIHVudGlsIGNoYW5nZXMgYXJlIGFwcGxpZWQgdGhyb3VnaCBzZXRTb3VyY2VEYXRhKCksIHVubGVzc1xuICAgICAgLy8gYHNvdXJjZVNjaGVtYS5tdXRhdGVgIGlzIHRydWUsIGluIHdoaWNoIGNhc2UgZGF0YSBpcyBtdXRhdGVkIGRpcmVjdGx5LlxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmlzVHJhbnNpZW50ICYmXG4gICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHRoaXMuc291cmNlRGF0YSAmJlxuICAgICAgICB0aGlzLnNvdXJjZUtleSAhPT0gbnVsbFxuICAgICAgKSB7XG4gICAgICAgIGxldCBkYXRhID0gdGhpcy5zb3VyY2VEYXRhW3RoaXMuc291cmNlS2V5XVxuICAgICAgICBpZiAoIXRoaXMuZG9lc011dGF0ZSkge1xuICAgICAgICAgIC8vIFVzZSBhIHRyaWNrIHRvIHN0b3JlIGNsb25lZCBpbmhlcml0ZWQgZGF0YSBpbiBjbG9uZWREYXRhLCB0byBtYWtlXG4gICAgICAgICAgLy8gaXQgcmVhY3RpdmUgYW5kIHByZXZlbnQgaXQgZnJvbSBiZWluZyBjbG9uZWQgbXVsdGlwbGUgdGltZXMuXG4gICAgICAgICAgdGhpcy5jbG9uZWREYXRhID0gZGF0YSA9IGNsb25lKGRhdGEpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGRhdGEgPT09IG51bGwgJiZcbiAgICAgICAgICAhdGhpcy5pc0NyZWF0aW5nICYmXG4gICAgICAgICAgaXNPYmplY3RTb3VyY2UodGhpcy5zb3VyY2VTY2hlbWEpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIElmIGRhdGEgb2YgYW4gb2JqZWN0IHNvdXJjZSBpcyBudWxsLCByZWRpcmVjdCB0byBpdHMgY3JlYXRlIHJvdXRlLlxuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgcGF0aDogJ2NyZWF0ZScsIGFwcGVuZDogdHJ1ZSB9KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5jbG9uZWREYXRhXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmhhc0RhdGEoKVxuICAgIGhhc0RhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgaXRlbUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0SXRlbUxhYmVsKHRoaXMuc291cmNlU2NoZW1hLCB0aGlzLmRhdGEsIHsgZXh0ZW5kZWQ6IHRydWUgfSlcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBzb3VyY2VEYXRhOiAnY2xlYXJDbG9uZWREYXRhJyxcbiAgICAvLyBOZWVkZWQgZm9yIHRoZSAnY3JlYXRlJyByZWRpcmVjdCBpbiBgaW5oZXJpdGVkRGF0YSgpYCB0byB3b3JrOlxuICAgIGNyZWF0ZTogJ3NldHVwRGF0YSdcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZW1pdFNjaGVtYUV2ZW50KGV2ZW50LCBwYXJhbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQuZW1pdEV2ZW50KGV2ZW50LCBwYXJhbXMpXG4gICAgfSxcblxuICAgIGdldERhdGFQYXRoRnJvbShyb3V0ZSkge1xuICAgICAgLy8gR2V0IHRoZSBkYXRhIHBhdGggYnkgZGVub3JtYWxpemVQYXRoIHRoZSByZWxhdGl2ZSByb3V0ZSBwYXRoXG4gICAgICByZXR1cm4gdGhpcy5hcGkuZGVub3JtYWxpemVQYXRoKHRoaXMucGF0aFxuICAgICAgICAvLyBEaXRvVmlld3MgaGF2ZSBuZXN0ZWQgcm91dGVzLCBzbyBkb24ndCByZW1vdmUgdGhlaXIgcGF0aC5cbiAgICAgICAgLnNsaWNlKChyb3V0ZS5pc1ZpZXcgPyAwIDogcm91dGUucGF0aC5sZW5ndGgpICsgMSkpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldHVwRGF0YSgpXG4gICAgc2V0dXBEYXRhKCkge1xuICAgICAgaWYgKHRoaXMuaXNDcmVhdGluZykge1xuICAgICAgICB0aGlzLmNyZWF0ZWREYXRhID0gdGhpcy5jcmVhdGVkRGF0YSB8fFxuICAgICAgICAgIHRoaXMuY3JlYXRlRGF0YSh0aGlzLnNjaGVtYSwgdGhpcy50eXBlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0U291cmNlRGF0YShkYXRhKSB7XG4gICAgICBpZiAodGhpcy5zb3VyY2VEYXRhICYmIHRoaXMuc291cmNlS2V5ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHsgbWFpblNjaGVtYUNvbXBvbmVudCB9ID0gdGhpc1xuICAgICAgICB0aGlzLiRzZXQoXG4gICAgICAgICAgdGhpcy5zb3VyY2VEYXRhLFxuICAgICAgICAgIHRoaXMuc291cmNlS2V5LFxuICAgICAgICAgIG1haW5TY2hlbWFDb21wb25lbnQuZmlsdGVyRGF0YShkYXRhKVxuICAgICAgICApXG4gICAgICAgIG1haW5TY2hlbWFDb21wb25lbnQub25DaGFuZ2UoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGFkZFNvdXJjZURhdGEoZGF0YSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKVxuICAgICAgICA/IHRoaXMuc2V0U291cmNlRGF0YShkYXRhKVxuICAgICAgICA6ICEhdGhpcy5zb3VyY2VEYXRhPy5wdXNoKGRhdGEpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmNsZWFyRGF0YSgpXG4gICAgY2xlYXJEYXRhKCkge1xuICAgICAgdGhpcy5zZXREYXRhKG51bGwpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldERhdGEoKVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgLy8gc2V0RGF0YSgpIGlzIGNhbGxlZCBhZnRlciBzdWJtaXQgd2hlbiBkYXRhIGhhcyBjaGFuZ2VkLlxuICAgICAgaWYgKHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgLy8gRm9yIGNvbXBvbmVudHMgd2l0aCB0cmFuc2llbnQgZGF0YSwgbW9kaWZ5IHRoaXMuc291cmNlRGF0YS5cbiAgICAgICAgdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNyZWF0ZWREYXRhID0gbnVsbFxuICAgICAgICB0aGlzLmxvYWRlZERhdGEgPSBkYXRhXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsZWFyQ2xvbmVkRGF0YShuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcbiAgICAgIC8vIE9ubHkgY2xlYXIgaWYgdGhlIHdhdGNoZWQgc291cmNlRGF0YSBpdHNlbGYgY2hhbmdlcyBpbiB0aGUgZm9ybS5cbiAgICAgIGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUpIHtcbiAgICAgICAgdGhpcy5jbG9uZWREYXRhID0gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsb3NlKClcbiAgICB9LFxuXG4gICAgYXN5bmMgY2xvc2UoKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZSh0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50LnBhdGgpXG4gICAgfSxcblxuICAgIGdldFN1Ym1pdFZlcmIocHJlc2VudCA9IHRydWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyBwcmVzZW50ID8gJ2NyZWF0ZScgOiAnY3JlYXRlZCdcbiAgICAgICAgOiBwcmVzZW50ID8gJ3N1Ym1pdCcgOiAnc3VibWl0dGVkJ1xuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQoYnV0dG9uLCB7IHZhbGlkYXRlID0gdHJ1ZSwgY2xvc2VGb3JtID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgICBpZiAodmFsaWRhdGUgJiYgIXRoaXMudmFsaWRhdGVBbGwoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ2V0VmVyYiA9IHByZXNlbnQgPT4gdGhpcy52ZXJic1t0aGlzLmdldFN1Ym1pdFZlcmIocHJlc2VudCldXG5cbiAgICAgIC8vIEFsbG93IGJ1dHRvbnMgdG8gb3ZlcnJpZGUgYm90aCBtZXRob2QgYW5kIHJlc291cmNlIHBhdGggdG8gc3VibWl0IHRvOlxuICAgICAgY29uc3QgYnV0dHRvblJlc291cmNlID0gZ2V0UmVzb3VyY2UoYnV0dG9uLnNjaGVtYS5yZXNvdXJjZSwge1xuICAgICAgICBwYXJlbnQ6IHRoaXMucmVzb3VyY2VcbiAgICAgIH0pXG4gICAgICBjb25zdCByZXNvdXJjZSA9IGJ1dHR0b25SZXNvdXJjZSB8fCB0aGlzLnJlc291cmNlXG4gICAgICBjb25zdCBtZXRob2QgPSByZXNvdXJjZT8ubWV0aG9kIHx8IHRoaXMubWV0aG9kXG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZClcbiAgICAgIGxldCBzdWNjZXNzXG4gICAgICBpZiAoIWJ1dHR0b25SZXNvdXJjZSAmJiB0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLnN1Ym1pdFRyYW5zaWVudChidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KHRoaXMuZ2V0U3VibWl0VmVyYigpKSxcbiAgICAgICAgICBvbkVycm9yOiBlcnJvciA9PiB0aGlzLmVtaXRTY2hlbWFFdmVudCgnZXJyb3InLCB7XG4gICAgICAgICAgICBjb250ZXh0OiB7IGVycm9yIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBub3RpZnlTdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYihmYWxzZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICAgICAgICB0aXRsZTogdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgICAgICAgICAgPyBgSXRlbSAke2NhcGl0YWxpemUodmVyYil9YFxuICAgICAgICAgICAgICAgIDogYENoYW5nZSAke2NhcGl0YWxpemUodmVyYil9YCxcbiAgICAgICAgICAgICAgdGV4dDogW1xuICAgICAgICAgICAgICAgIHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICAgICAgICAgICAgPyBgJHt0aGlzLml0ZW1MYWJlbH0gd2FzICR7dmVyYn0uYFxuICAgICAgICAgICAgICAgICAgOiBgQ2hhbmdlcyB0byAke3RoaXMuaXRlbUxhYmVsfSB3ZXJlICR7dmVyYn0uYCxcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zaWVudE5vdGVcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5vdGlmeUVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYih0cnVlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICAgICAgICB0ZXh0OiBgVW5hYmxlIHRvICR7dmVyYn0gJHt0aGlzLml0ZW1MYWJlbH0uYFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5zdWJtaXRSZXNvdXJjZShidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgICAgICBzZXREYXRhOiB0cnVlLFxuICAgICAgICAgIG9uU3VjY2VzczogKCkgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQodGhpcy5nZXRTdWJtaXRWZXJiKCkpLFxuICAgICAgICAgIG9uRXJyb3I6IGVycm9yID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdlcnJvcicsIHtcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgZXJyb3IgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIG5vdGlmeVN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgIHRpdGxlOiBgU3VjY2Vzc2Z1bGx5ICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gLFxuICAgICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLml0ZW1MYWJlbH0gd2FzICR7dmVyYn0uYFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5vdGlmeUVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYih0cnVlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICAgICAgYFVuYWJsZSB0byAke3ZlcmJ9ICR7dGhpcy5pdGVtTGFiZWx9JHtlcnJvciA/ICc6JyA6ICcnfWAsXG4gICAgICAgICAgICAgICAgZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICB0aGlzLnJlc2V0VmFsaWRhdGlvbigpXG4gICAgICAgIGlmIChjbG9zZUZvcm0gfHwgYnV0dG9uLmNsb3NlRm9ybSkge1xuICAgICAgICAgIHRoaXMuY2xvc2UoKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNDcmVhdGluZykge1xuICAgICAgICAgIC8vIFJlZGlyZWN0IHRvIHRoZSBmb3JtIGVkaXRpbmcgdGhlIG5ld2x5IGNyZWF0ZWQgaXRlbTpcbiAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCB0aGlzLmRhdGEpXG4gICAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoeyBwYXRoOiBgLi4vJHtpZH1gLCBhcHBlbmQ6IHRydWUgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Y2Nlc3NcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0VHJhbnNpZW50KGJ1dHRvbiwgX3Jlc291cmNlLCBfbWV0aG9kLCBkYXRhLCB7XG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBvbkVycm9yLFxuICAgICAgbm90aWZ5U3VjY2VzcyxcbiAgICAgIG5vdGlmeUVycm9yXG4gICAgfSkge1xuICAgICAgLy8gSGFuZGxlIHRoZSBkZWZhdWx0IFwic3VibWl0dGluZ1wiIG9mIHRyYW5zaWVudCwgbmVzdGVkIGRhdGE6XG4gICAgICBjb25zdCBzdWNjZXNzID0gdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgID8gdGhpcy5hZGRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICAgIDogdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICBvblN1Y2Nlc3M/LigpXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ3N1Y2Nlc3MnLCB7XG4gICAgICAgICAgbm90aWZ5OiBub3RpZnlTdWNjZXNzXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBlcnJvciA9ICdDb3VsZCBub3Qgc3VibWl0IHRyYW5zaWVudCBpdGVtJ1xuICAgICAgICBvbkVycm9yPy4oZXJyb3IpXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ2Vycm9yJywge1xuICAgICAgICAgIG5vdGlmeTogbm90aWZ5RXJyb3IsXG4gICAgICAgICAgZXJyb3JcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWNjZXNzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tZm9ybS1uZXN0ZWRcbiAgICAmLFxuICAgIC5kaXRvLXNjcm9sbFxuICAgICAgLy8gTm8gc2Nyb2xsaW5nIGluc2lkZSBuZXN0ZWQgZm9ybXMsIGFuZCBwcmV2ZW50IG9wZW4gLm11bHRpc2VsZWN0IGZyb21cbiAgICAgIC8vIGJlaW5nIGNyb3BwZWQuXG4gICAgICBvdmVyZmxvdzogdmlzaWJsZVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvRm9ybSBmcm9tICcuL0RpdG9Gb3JtLnZ1ZSdcblxuZXhwb3J0IGRlZmF1bHQgRGl0b0Zvcm0uY29tcG9uZW50KCdkaXRvLWZvcm0tbmVzdGVkJywge30pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tZXJyb3JzKFxuICB2LWlmPVwiZXJyb3JzXCJcbilcbiAgdWxcbiAgICBsaSh2LWZvcj1cImVycm9yIG9mIGVycm9yc1wiKVxuICAgICAgfCB7eyBlcnJvciB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tZXJyb3JzKFxuICAgIHYtaWY9XCJlcnJvcnNcIlxuICApXG4gICAgdWxcbiAgICAgIGxpKHYtZm9yPVwiZXJyb3Igb2YgZXJyb3JzXCIpXG4gICAgICAgIHwge3sgZXJyb3IgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1lcnJvcnNcbiAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICB6LWluZGV4OiAxXG4gICAgdWxcbiAgICAgIG1hcmdpbi10b3A6IDFweFxuICAgICAgY29sb3I6ICRjb2xvci1lcnJvclxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1lcnJvcnMnLCB7XG4gIHByb3BzOiB7XG4gICAgZXJyb3JzOiB7IHR5cGU6IEFycmF5LCBkZWZhdWx0OiBudWxsIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1zY29wZXNcbiAgcm91dGVyLWxpbmsoXG4gICAgdi1mb3I9XCIoc2NvcGUsIGtleSkgaW4gc2NvcGVzXCJcbiAgICA6a2V5PVwia2V5XCJcbiAgICA6dG89XCJnZXRTY29wZUxpbmsoc2NvcGUpXCJcbiAgICBjdXN0b20gdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1zZWxlY3RlZCc6IHNjb3BlLm5hbWUgPT09IHF1ZXJ5LnNjb3BlIH1cIlxuICAgICAgOnRpdGxlPVwic2NvcGUuaGludCB8fCBnZXRMYWJlbChzY29wZSlcIlxuICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICkge3sgZ2V0TGFiZWwoc2NvcGUpIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1zY29wZXNcbiAgICByb3V0ZXItbGluayhcbiAgICAgIHYtZm9yPVwiKHNjb3BlLCBrZXkpIGluIHNjb3Blc1wiXG4gICAgICA6a2V5PVwia2V5XCJcbiAgICAgIDp0bz1cImdldFNjb3BlTGluayhzY29wZSlcIlxuICAgICAgY3VzdG9tIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1zZWxlY3RlZCc6IHNjb3BlLm5hbWUgPT09IHF1ZXJ5LnNjb3BlIH1cIlxuICAgICAgICA6dGl0bGU9XCJzY29wZS5oaW50IHx8IGdldExhYmVsKHNjb3BlKVwiXG4gICAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICAgICkge3sgZ2V0TGFiZWwoc2NvcGUpIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tc2NvcGVzXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICAuZGl0by1idXR0b25cbiAgICAgICtlbGxpcHNpc1xuICAgICAgYm9yZGVyLXJhZGl1czogMFxuICAgICAgLy8gQSBiaXQgbW9yZSB0aGFuIHRoZSB3aWR0aCBvZiBlbGxpcHNpcywgdG8gcHJldmVudCByZXBsYWNpbmcgc2hvcnQgd29yZHNcbiAgICAgIC8vIHdpdGggZWxsaXBzaXMuXG4gICAgICBtaW4td2lkdGg6IDNlbVxuICAgICAgZmxleDogMCAxIGF1dG9cbiAgICAgICY6Zmlyc3QtY2hpbGRcbiAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMWVtXG4gICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDFlbVxuICAgICAgICBwYWRkaW5nLWxlZnQ6IDFlbVxuICAgICAgJjpsYXN0LWNoaWxkXG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAxZW1cbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDFlbVxuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxZW1cbiAgICAgICYgKyAuZGl0by1idXR0b25cbiAgICAgICAgbWFyZ2luLWxlZnQ6IC0xcHhcbiAgICAgIC8vIERvbid0IGNvdmVyIHRoZSBmb2N1c2VkIGJvcmRlciBvZiBidXR0b25zOlxuICAgICAgJjpmb2N1c1xuICAgICAgICB6LWluZGV4OiAxXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXNjb3BlcycsIHtcbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2NvcGVzOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRTY29wZUxpbmsoc2NvcGUpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0geyAuLi50aGlzLnF1ZXJ5LCBzY29wZTogc2NvcGUubmFtZSB9XG4gICAgICBpZiAocXVlcnkucGFnZSkge1xuICAgICAgICBxdWVyeS5wYWdlID0gMFxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlMaW5rKHF1ZXJ5KVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5wYWdpbmF0aW9uKFxuICA6cGFnZVNpemU9XCJsaW1pdFwiXG4gIDp0b3RhbD1cInRvdGFsXCJcbiAgOnBhZ2Uuc3luYz1cInBhZ2VcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgcGFnaW5hdGlvbihcbiAgICA6cGFnZVNpemU9XCJsaW1pdFwiXG4gICAgOnRvdGFsPVwidG90YWxcIlxuICAgIDpwYWdlLnN5bmM9XCJwYWdlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IFBhZ2luYXRpb24gfSBmcm9tICdAZGl0b2pzL3VpJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXBhZ2luYXRpb24nLCB7XG4gIGNvbXBvbmVudHM6IHsgUGFnaW5hdGlvbiB9LFxuXG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGxpbWl0OiB7IHR5cGU6IE51bWJlciwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0b3RhbDogeyB0eXBlOiBOdW1iZXIsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHBhZ2U6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuICgrdGhpcy5xdWVyeS5wYWdlIHx8IDApICsgMVxuICAgICAgfSxcblxuICAgICAgc2V0KHBhZ2UpIHtcbiAgICAgICAgaWYgKHRoaXMucGFnZSAhPT0gcGFnZSkge1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHRoaXMuZ2V0UXVlcnlMaW5rKHtcbiAgICAgICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgICAgICBwYWdlOiAocGFnZSAtIDEpXG4gICAgICAgICAgfSkpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0l0ZW1NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbSXRlbU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBkcmFnZ2luZzogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uU3RhcnREcmFnKCkge1xuICAgICAgdGhpcy5kcmFnZ2luZyA9IHRydWVcbiAgICB9LFxuXG4gICAgb25FbmREcmFnKHsgb2xkSW5kZXgsIG5ld0luZGV4IH0pIHtcbiAgICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZVxuICAgICAgaWYgKG9sZEluZGV4ICE9PSBuZXdJbmRleCkge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdXBkYXRlT3JkZXIoc291cmNlU2NoZW1hLCBsaXN0LCBwYWdpbmF0aW9uUmFuZ2UpIHtcbiAgICAgIGNvbnN0IHsgb3JkZXJLZXkgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgaWYgKG9yZGVyS2V5KSB7XG4gICAgICAgIC8vIFJlb3JkZXIgdGhlIGNoYW5nZWQgZW50cmllcyBieSB0aGVpciBvcmRlciBrZXksIHRha2luZyBwYWdpbmF0aW9uXG4gICAgICAgIC8vIG9mZnNldHMgaW50byBhY2NvdW50OlxuICAgICAgICBjb25zdCBvZmZzZXQgPSBwYWdpbmF0aW9uUmFuZ2U/LlswXSB8fCAwXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGxpc3RbaV1bb3JkZXJLZXldID0gaSArIG9mZnNldFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdFxuICAgIH1cbiAgfVxufVxuIiwiXG4uZGl0by10cmVlLWl0ZW0oXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPWB7XG4gICAgJ2RpdG8tZHJhZ2dpbmcnOiBkcmFnZ2luZyxcbiAgICAnZGl0by1hY3RpdmUnOiBhY3RpdmVcbiAgfWBcbiAgOnN0eWxlPVwibGV2ZWwgPiAwICYmIHsgJy0tbGV2ZWwnOiBsZXZlbCB9XCJcbilcbiAgLmRpdG8tdHJlZS1oZWFkZXIodi1pZj1cImxhYmVsXCIpXG4gICAgLmRpdG8tdHJlZS1icmFuY2goXG4gICAgICB2LWlmPVwibnVtRW50cmllc1wiXG4gICAgICBAY2xpY2suc3RvcD1cIm9wZW5lZCA9ICFvcGVuZWRcIlxuICAgIClcbiAgICAgIC5kaXRvLWNoZXZyb24oXG4gICAgICAgIHYtaWY9XCJudW1FbnRyaWVzXCJcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuZWQnOiBvcGVuZWQgfVwiXG4gICAgICApXG4gICAgICAuZGl0by10cmVlLWxhYmVsKHYtaHRtbD1cImxhYmVsXCIpXG4gICAgICAuZGl0by10cmVlLWluZm8odi1pZj1cImRldGFpbHNcIikge3sgZGV0YWlscyB9fVxuICAgIC5kaXRvLXRyZWUtbGVhZih2LWVsc2UpXG4gICAgICAuZGl0by10cmVlLWxhYmVsKHYtaHRtbD1cImxhYmVsXCIpXG4gICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtc21hbGwodi1pZj1cImhhc0VkaXRCdXR0b25zXCIpXG4gICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWlmPVwiZWRpdGFibGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgQGNsaWNrPVwib25FZGl0XCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gICAgICApXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgQGNsaWNrPVwib25EZWxldGVcIlxuICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgKVxuICB0YWJsZS5kaXRvLXByb3BlcnRpZXMoXG4gICAgdi1pZj1cInByb3BlcnRpZXNcIlxuICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gIClcbiAgICB0cihcbiAgICAgIHYtZm9yPVwicHJvcGVydHkgaW4gcHJvcGVydGllc1wiXG4gICAgKVxuICAgICAgdGRcbiAgICAgICAgZGl0by1sYWJlbChcbiAgICAgICAgICB2LWlmPVwicHJvcGVydHkubGFiZWwgIT09IGZhbHNlXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KVwiXG4gICAgICAgICAgOmxhYmVsPVwiZ2V0TGFiZWwocHJvcGVydHkpXCJcbiAgICAgICAgKVxuICAgICAgZGl0by10YWJsZS1jZWxsKFxuICAgICAgICA6Y2VsbD1cInByb3BlcnR5XCJcbiAgICAgICAgOnNjaGVtYT1cInByb3BlcnR5XCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIClcbiAgdnVlLWRyYWdnYWJsZShcbiAgICB2LWlmPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gICAgdi1iaW5kPVwiZ2V0RHJhZ09wdGlvbnMoY2hpbGRyZW5EcmFnZ2FibGUsIHRydWUpXCJcbiAgICA6bGlzdD1cInVwZGF0ZU9yZGVyKGNoaWxkcmVuU2NoZW1hLCBjaGlsZHJlbkxpc3QpXCJcbiAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgQGVuZD1cIm9uRW5kRHJhZygkZXZlbnQsIGNoaWxkcmVuU2NoZW1hKVwiXG4gIClcbiAgICBkaXRvLXRyZWUtaXRlbShcbiAgICAgIHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiBjaGlsZHJlbkl0ZW1zXCJcbiAgICAgIDprZXk9XCJnZXRJdGVtVWlkKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEpXCJcbiAgICAgIDpzY2hlbWE9XCJjaGlsZHJlblNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJnZXRJdGVtRGF0YVBhdGgoY2hpbGRyZW5TY2hlbWEsIGluZGV4KVwiXG4gICAgICA6ZGF0YT1cIml0ZW0uZGF0YVwiXG4gICAgICA6cGF0aD1cIml0ZW0ucGF0aFwiXG4gICAgICA6b3Blbj1cIml0ZW0ub3BlblwiXG4gICAgICA6YWN0aXZlPVwiaXRlbS5hY3RpdmVcIlxuICAgICAgOmRyYWdnYWJsZT1cImNoaWxkcmVuRHJhZ2dhYmxlXCJcbiAgICAgIDpsYWJlbD1cImdldEl0ZW1MYWJlbChjaGlsZHJlblNjaGVtYSwgaXRlbS5kYXRhLCB7IGluZGV4IH0pXCJcbiAgICAgIDpsZXZlbD1cImxldmVsICsgMVwiXG4gICAgKVxuICAgIC8vIFRPRE86IENvbnZlcnQgZGl0by10cmVlLWl0ZW0gdG8gdXNlIGRpdG8tbGFiZWwgaW50ZXJuYWxseSwgYW5kIHRoZW5cbiAgICAvLyBwYXNzIGBhc09iamVjdDogdHJ1ZWAgaW4gdGhlIGBnZXRJdGVtTGFiZWwoKWAgY2FsbCBhYm92ZS5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXRyZWUtaXRlbShcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOmNsYXNzPWB7XG4gICAgICAnZGl0by1kcmFnZ2luZyc6IGRyYWdnaW5nLFxuICAgICAgJ2RpdG8tYWN0aXZlJzogYWN0aXZlXG4gICAgfWBcbiAgICA6c3R5bGU9XCJsZXZlbCA+IDAgJiYgeyAnLS1sZXZlbCc6IGxldmVsIH1cIlxuICApXG4gICAgLmRpdG8tdHJlZS1oZWFkZXIodi1pZj1cImxhYmVsXCIpXG4gICAgICAuZGl0by10cmVlLWJyYW5jaChcbiAgICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgICBAY2xpY2suc3RvcD1cIm9wZW5lZCA9ICFvcGVuZWRcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1jaGV2cm9uKFxuICAgICAgICAgIHYtaWY9XCJudW1FbnRyaWVzXCJcbiAgICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW5lZCc6IG9wZW5lZCB9XCJcbiAgICAgICAgKVxuICAgICAgICAuZGl0by10cmVlLWxhYmVsKHYtaHRtbD1cImxhYmVsXCIpXG4gICAgICAgIC5kaXRvLXRyZWUtaW5mbyh2LWlmPVwiZGV0YWlsc1wiKSB7eyBkZXRhaWxzIH19XG4gICAgICAuZGl0by10cmVlLWxlYWYodi1lbHNlKVxuICAgICAgICAuZGl0by10cmVlLWxhYmVsKHYtaHRtbD1cImxhYmVsXCIpXG4gICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1zbWFsbCh2LWlmPVwiaGFzRWRpdEJ1dHRvbnNcIilcbiAgICAgICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgICAgICAgKVxuICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgdi1pZj1cImVkaXRhYmxlXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBAY2xpY2s9XCJvbkVkaXRcIlxuICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZWRpdClcIlxuICAgICAgICApXG4gICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBAY2xpY2s9XCJvbkRlbGV0ZVwiXG4gICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgKVxuICAgIHRhYmxlLmRpdG8tcHJvcGVydGllcyhcbiAgICAgIHYtaWY9XCJwcm9wZXJ0aWVzXCJcbiAgICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gICAgKVxuICAgICAgdHIoXG4gICAgICAgIHYtZm9yPVwicHJvcGVydHkgaW4gcHJvcGVydGllc1wiXG4gICAgICApXG4gICAgICAgIHRkXG4gICAgICAgICAgZGl0by1sYWJlbChcbiAgICAgICAgICAgIHYtaWY9XCJwcm9wZXJ0eS5sYWJlbCAhPT0gZmFsc2VcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICAgICAgOmxhYmVsPVwiZ2V0TGFiZWwocHJvcGVydHkpXCJcbiAgICAgICAgICApXG4gICAgICAgIGRpdG8tdGFibGUtY2VsbChcbiAgICAgICAgICA6Y2VsbD1cInByb3BlcnR5XCJcbiAgICAgICAgICA6c2NoZW1hPVwicHJvcGVydHlcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpXCJcbiAgICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgKVxuICAgIHZ1ZS1kcmFnZ2FibGUoXG4gICAgICB2LWlmPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgICAgdi1zaG93PVwib3BlbmVkXCJcbiAgICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGNoaWxkcmVuRHJhZ2dhYmxlLCB0cnVlKVwiXG4gICAgICA6bGlzdD1cInVwZGF0ZU9yZGVyKGNoaWxkcmVuU2NoZW1hLCBjaGlsZHJlbkxpc3QpXCJcbiAgICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICAgIEBlbmQ9XCJvbkVuZERyYWcoJGV2ZW50LCBjaGlsZHJlblNjaGVtYSlcIlxuICAgIClcbiAgICAgIGRpdG8tdHJlZS1pdGVtKFxuICAgICAgICB2LWZvcj1cIihpdGVtLCBpbmRleCkgaW4gY2hpbGRyZW5JdGVtc1wiXG4gICAgICAgIDprZXk9XCJnZXRJdGVtVWlkKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEpXCJcbiAgICAgICAgOnNjaGVtYT1cImNoaWxkcmVuU2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZ2V0SXRlbURhdGFQYXRoKGNoaWxkcmVuU2NoZW1hLCBpbmRleClcIlxuICAgICAgICA6ZGF0YT1cIml0ZW0uZGF0YVwiXG4gICAgICAgIDpwYXRoPVwiaXRlbS5wYXRoXCJcbiAgICAgICAgOm9wZW49XCJpdGVtLm9wZW5cIlxuICAgICAgICA6YWN0aXZlPVwiaXRlbS5hY3RpdmVcIlxuICAgICAgICA6ZHJhZ2dhYmxlPVwiY2hpbGRyZW5EcmFnZ2FibGVcIlxuICAgICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSwgeyBpbmRleCB9KVwiXG4gICAgICAgIDpsZXZlbD1cImxldmVsICsgMVwiXG4gICAgICApXG4gICAgICAvLyBUT0RPOiBDb252ZXJ0IGRpdG8tdHJlZS1pdGVtIHRvIHVzZSBkaXRvLWxhYmVsIGludGVybmFsbHksIGFuZCB0aGVuXG4gICAgICAvLyBwYXNzIGBhc09iamVjdDogdHJ1ZWAgaW4gdGhlIGBnZXRJdGVtTGFiZWwoKWAgY2FsbCBhYm92ZS5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by10cmVlLWl0ZW1cbiAgICAtLWNoZXZyb24taW5kZW50OiAjeyRjaGV2cm9uLWluZGVudH1cbiAgICA+IC5kaXRvLXRyZWUtaGVhZGVyXG4gICAgICA+IC5kaXRvLXRyZWUtYnJhbmNoLFxuICAgICAgPiAuZGl0by10cmVlLWxlYWZcbiAgICAgICAgLy8gVXNlIGAtLWxldmVsYCBDU1MgdmFyaWFibGUgdG8gY2FsY3VsYXRlZCB0aGUgYWNjdW11bGF0ZWQgaW5kZW50XG4gICAgICAgIC8vIHBhZGRpbmcgZGlyZWN0bHkgaW5zdGVhZCBvZiBoYXZpbmcgaXQgYWNjdW11bGF0ZSBpbiBuZXN0ZWQgQ1NTLlxuICAgICAgICAvLyBUaGlzIHdheSwgd2UgY2FuIGtlZXAgdGhlIC5kaXRvLWFjdGl2ZSBhcmVhIGNvdmVyIHRoZSBmdWxsIHdpZHRoOlxuICAgICAgICBwYWRkaW5nLWxlZnQ6IGNhbGModmFyKC0tY2hldnJvbi1pbmRlbnQpICogKHZhcigtLWxldmVsLCAxKSAtIDEpKVxuICAgIC5kaXRvLXRyZWUtYnJhbmNoXG4gICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAuZGl0by10cmVlLWhlYWRlclxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuXG4gICAgLmRpdG8tdHJlZS1icmFuY2gsXG4gICAgLmRpdG8tdHJlZS1sZWFmXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBmbGV4OiBhdXRvXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAgIG1hcmdpbjogMXB4IDBcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIC5kaXRvLXRyZWUtbGFiZWwsXG4gICAgLmRpdG8tdHJlZS1pbmZvXG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgLmRpdG8tdHJlZS1pbmZvXG4gICAgICBwYWRkaW5nLWxlZnQ6IDAuMzVlbVxuICAgICAgY29sb3I6IHJnYmEoJGNvbG9yLWJsYWNrLCAuMilcbiAgICAuZGl0by1idXR0b25zXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICB2aXNpYmlsaXR5OiBoaWRkZW5cbiAgICAgIGhlaWdodDogMTAwJVxuICAgICAgbWFyZ2luLWxlZnQ6IDFlbVxuICAgICAgbWFyZ2luOiAxcHggMCAxcHggMWVtXG4gICAgLmRpdG8tdHJlZS1oZWFkZXI6aG92ZXJcbiAgICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlXG4gICAgLy8gSGlkZSBidXR0b25zIGR1cmluZyBkcmFnZ2luZ1xuICAgICYuZGl0by1kcmFnZ2luZ1xuICAgICAgLmRpdG8tdHJlZS1oZWFkZXJcbiAgICAgICAgPiAuZGl0by1idXR0b25zXG4gICAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuXG4gICAgJi5kaXRvLWFjdGl2ZVxuICAgICAgPiAuZGl0by10cmVlLWhlYWRlclxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gICAgICAgIHBhZGRpbmc6IDAgJGlucHV0LXBhZGRpbmctaG9yXG4gICAgICAgIG1hcmdpbjogMCAoLSRpbnB1dC1wYWRkaW5nLWhvcilcbiAgICAgICAgPiAuZGl0by10cmVlLWJyYW5jaFxuICAgICAgICAgID4gLmRpdG8tY2hldnJvbjo6YmVmb3JlXG4gICAgICAgICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAgICAgPiAqID4gLmRpdG8tdHJlZS1sYWJlbFxuICAgICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAuZGl0by1wcm9wZXJ0aWVzXG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgbWFyZ2luLWxlZnQ6ICRjaGV2cm9uLWluZGVudFxuICAgICAgPiB0clxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmVcbiAgICAgIC5kaXRvLWxhYmVsXG4gICAgICAgIG1hcmdpbjogMFxuICAgICAgICAmOjphZnRlclxuICAgICAgICAgIGNvbnRlbnQ6ICc6ICdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVnVlRHJhZ2dhYmxlIGZyb20gJ3Z1ZWRyYWdnYWJsZSdcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgT3JkZXJlZE1peGluIGZyb20gJy4uL21peGlucy9PcmRlcmVkTWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0TmFtZWRTY2hlbWFzLCBoYXNGb3JtU2NoZW1hIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdHJlZS1pdGVtJywge1xuICBjb21wb25lbnRzOiB7IFZ1ZURyYWdnYWJsZSB9LFxuICBtaXhpbnM6IFtPcmRlcmVkTWl4aW5dLFxuICBpbmplY3Q6IFsnY29udGFpbmVyJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtBcnJheSwgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIG9wZW46IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhY3RpdmU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsZXZlbDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZW5lZDogdGhpcy5vcGVuIHx8IHRoaXMuc2NoZW1hLm9wZW5cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBtZXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLm1ldGFcbiAgICB9LFxuXG4gICAgc3RvcmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIuc3RvcmVcbiAgICB9LFxuXG4gICAgZGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIuZGlzYWJsZWRcbiAgICB9LFxuXG4gICAgbmVzdGVkTWV0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMubWV0YSxcbiAgICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9wZXJ0aWVzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzKVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBTaG91bGQgdGhpcyBiZSBuYW1lZCBgc291cmNlU2NoZW1hYCBpbnN0ZWFkPyBVc2UgU291cmNlTWl4aW4/XG4gICAgY2hpbGRyZW5TY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEuY2hpbGRyZW5cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5MaXN0KCkge1xuICAgICAgY29uc3QgbmFtZSA9IHRoaXMuY2hpbGRyZW5TY2hlbWE/Lm5hbWVcbiAgICAgIHJldHVybiBuYW1lICYmIHRoaXMuZGF0YVtuYW1lXVxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkRyYWdnYWJsZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuY2hpbGRyZW5MaXN0Py5sZW5ndGggPiAxICYmXG4gICAgICAgIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2RyYWdnYWJsZScsIHtcbiAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgIHNjaGVtYTogdGhpcy5jaGlsZHJlblNjaGVtYVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBudW1DaGlsZHJlbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuTGlzdD8ubGVuZ3RoIHx8IDBcbiAgICB9LFxuXG4gICAgbnVtUHJvcGVydGllcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXM/Lmxlbmd0aCB8fCAwXG4gICAgfSxcblxuICAgIG51bUVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5udW1Qcm9wZXJ0aWVzICsgdGhpcy5udW1DaGlsZHJlblxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkl0ZW1zKCkge1xuICAgICAgY29uc3QgeyBjaGlsZHJlblNjaGVtYSB9ID0gdGhpc1xuICAgICAgaWYgKGNoaWxkcmVuU2NoZW1hKSB7XG4gICAgICAgIGNvbnN0IHsgZWRpdFBhdGggfSA9IHRoaXMuY29udGFpbmVyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuT3BlbiA9ICF0aGlzLnBhdGggJiYgY2hpbGRyZW5TY2hlbWEub3BlblxuICAgICAgICAvLyBCdWlsZCBhIGNoaWxkcmVuIGxpc3Qgd2l0aCBjaGlsZCBtZXRhIGluZm9ybWF0aW9uIGZvciB0aGUgdGVtcGxhdGUuXG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuTGlzdD8ubWFwKChkYXRhLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhdGggPSAoXG4gICAgICAgICAgICBjaGlsZHJlblNjaGVtYS5wYXRoICYmXG4gICAgICAgICAgICBgJHt0aGlzLnBhdGh9LyR7Y2hpbGRyZW5TY2hlbWEucGF0aH0vJHtpbmRleH1gXG4gICAgICAgICAgKVxuICAgICAgICAgIGNvbnN0IG9wZW4gPSBjaGlsZHJlbk9wZW4gfHxcbiAgICAgICAgICAgIC8vIE9ubHkgY291bnQgYXMgXCJpbiBlZGl0IHBhdGhcIiB3aGVuIGl0J3Mgbm90IHRoZSBmdWxsIGVkaXQgcGF0aC5cbiAgICAgICAgICAgIGVkaXRQYXRoLnN0YXJ0c1dpdGgocGF0aCkgJiYgcGF0aC5sZW5ndGggPCBlZGl0UGF0aC5sZW5ndGhcbiAgICAgICAgICBjb25zdCBhY3RpdmUgPSBlZGl0UGF0aCA9PT0gcGF0aFxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgIG9wZW4sXG4gICAgICAgICAgICBhY3RpdmVcbiAgICAgICAgICB9XG4gICAgICAgIH0pIHx8IFtdXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRldGFpbHMoKSB7XG4gICAgICBjb25zdCB7IG51bUNoaWxkcmVuIH0gPSB0aGlzXG4gICAgICByZXR1cm4gbnVtQ2hpbGRyZW4gJiYgYCR7bnVtQ2hpbGRyZW59ICR7XG4gICAgICAgIG51bUNoaWxkcmVuID09PSAxID8gJ2l0ZW0nIDogJ2l0ZW1zJ1xuICAgICAgfWBcbiAgICB9LFxuXG4gICAgaGFzRWRpdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kcmFnZ2FibGUgfHwgdGhpcy5lZGl0YWJsZSB8fCB0aGlzLmRlbGV0YWJsZVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBTdXBwb3J0IGNyZWF0YWJsZSFcbiAgICAvLyBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgY3JlYXRhYmxlLCBlZGl0YWJsZSBhbmQgZGVsZXRhYmxlIG92ZXJyaWRlcyBvbiB0aGVcbiAgICAvLyBhc3NvY2lhdGVkIGZvcm1zLCBqdXN0IGxpa2UgaW4gYFR5cGVMaXN0YCBhbmQgYFR5cGVPYmplY3RgLCB0aHJvdWdoXG4gICAgLy8gYERpdG9FZGl0QnV0dG9uc2AuIEl0IHdvdWxkIGJlIGJlc3QgdG8gdXNlIGBEaXRvRWRpdEJ1dHRvbnNgIGhlcmUgdG9vLlxuICAgIGNyZWF0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NyZWF0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChjcmVhdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdlZGl0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlZGl0YWJsZSkge1xuICAgICAgICByZXR1cm4gZWRpdGFibGUgJiYgaGFzRm9ybVNjaGVtYSh0aGlzLnNjaGVtYSlcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpIHtcbiAgICAgIHJldHVybiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBwcm9wZXJ0eS5uYW1lKVxuICAgIH0sXG5cbiAgICBvbkVkaXQoKSB7XG4gICAgICAvLyBBbGwgd2UgZ290IHRvIGRvIGlzIHB1c2ggdGhlIHJpZ2h0IGVkaXQgcGF0aCB0byB0aGUgcm91dGVyLCB0aGUgcmVzdFxuICAgICAgLy8gaXMgaGFuZGxlZCBieSBvdXIgcm91dGVzLCBhbGxvd2luZyByZWxvYWRzIGFzIHdlbGwuXG4gICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7XG4gICAgICAgIHBhdGg6IGAke3RoaXMuY29udGFpbmVyLnBhdGh9JHt0aGlzLnBhdGh9YCxcbiAgICAgICAgLy8gUHJlc2VydmUgY3VycmVudCBxdWVyeVxuICAgICAgICBxdWVyeTogdGhpcy4kcm91dGUucXVlcnlcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uRGVsZXRlKCkge1xuICAgICAgLy8gVE9ETzogSW1wbGVtZW50IVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLm9uQ2hhbmdlKClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudGhlYWQuZGl0by10YWJsZS1oZWFkXG4gIHRyXG4gICAgdGgoXG4gICAgICB2LWZvcj1cIihjb2x1bW4sIGluZGV4KSBpbiBjb2x1bW5zXCJcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoY29sdW1uKVwiXG4gICAgICA6Y2xhc3M9XCJnZXRDb2x1bW5DbGFzcyhjb2x1bW4pXCJcbiAgICApXG4gICAgICByb3V0ZXItbGluayhcbiAgICAgICAgdi1pZj1cImNvbHVtbi5zb3J0YWJsZVwiXG4gICAgICAgIDp0bz1cImdldFNvcnRMaW5rKGNvbHVtbilcIlxuICAgICAgICBjdXN0b20gdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgICAgIClcbiAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIDpjbGFzcz1cImdldFNvcnRDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICBAY2xpY2s9XCJuYXZpZ2F0ZVwiXG4gICAgICAgIClcbiAgICAgICAgICAuZGl0by1vcmRlci1hcnJvd3NcbiAgICAgICAgICBzcGFuIHt7IGdldExhYmVsKGNvbHVtbikgfX1cbiAgICAgIHNwYW4oXG4gICAgICAgIHYtZWxzZVxuICAgICAgKSB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgdGgodi1pZj1cImhhc0VkaXRCdXR0b25zXCIpXG4gICAgICAvLyBFbXB0eSA8c3Bhbj4gaXMgbmVlZGVkIGZvciBzdHlsaW5nLCBzZWUgX3RhYmxlLnNhc3NcbiAgICAgIHNwYW5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICAgIHRyXG4gICAgICB0aChcbiAgICAgICAgdi1mb3I9XCIoY29sdW1uLCBpbmRleCkgaW4gY29sdW1uc1wiXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoY29sdW1uKVwiXG4gICAgICAgIDpjbGFzcz1cImdldENvbHVtbkNsYXNzKGNvbHVtbilcIlxuICAgICAgKVxuICAgICAgICByb3V0ZXItbGluayhcbiAgICAgICAgICB2LWlmPVwiY29sdW1uLnNvcnRhYmxlXCJcbiAgICAgICAgICA6dG89XCJnZXRTb3J0TGluayhjb2x1bW4pXCJcbiAgICAgICAgICBjdXN0b20gdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgICAgICAgKVxuICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgOmNsYXNzPVwiZ2V0U29ydENsYXNzKGNvbHVtbilcIlxuICAgICAgICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIC5kaXRvLW9yZGVyLWFycm93c1xuICAgICAgICAgICAgc3BhbiB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgICAgIHNwYW4oXG4gICAgICAgICAgdi1lbHNlXG4gICAgICAgICkge3sgZ2V0TGFiZWwoY29sdW1uKSB9fVxuICAgICAgdGgodi1pZj1cImhhc0VkaXRCdXR0b25zXCIpXG4gICAgICAgIC8vIEVtcHR5IDxzcGFuPiBpcyBuZWVkZWQgZm9yIHN0eWxpbmcsIHNlZSBfdGFibGUuc2Fzc1xuICAgICAgICBzcGFuXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tdGFibGUtaGVhZFxuICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIHRyXG4gICAgICB0aFxuICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWxcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdFxuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgICAgIC5kaXRvLWJ1dHRvblxuICAgICAgICAgIC8vIENvbnZlbnRpb246IE5lc3RlZCBzcGFucyBoYW5kbGUgcGFkZGluZywgc2VlIGJlbG93XG4gICAgICAgICAgcGFkZGluZzogMFxuICAgICAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdFxuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDBcbiAgICAgICAgc3BhblxuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgICAgIC8vIENvbnZlbnRpb246IE5lc3RlZCBzcGFucyBoYW5kbGUgcGFkZGluZ1xuICAgICAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgICAgICAgJjplbXB0eTo6YWZ0ZXJcbiAgICAgICAgICAgIC8vIFByZXZlbnQgZW1wdHkgPHRoPiBmcm9tIGNvbGxhcHNpbmdcbiAgICAgICAgICAgIGNvbnRlbnQ6ICdcXDIwMGInIC8vIHplcm8td2lkdGggc3BhY2VcbiAgICAgICAgPiBzcGFuXG4gICAgICAgICAgZGlzcGxheTogYmxvY2tcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXRhYmxlLWhlYWQnLCB7XG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGNvbHVtbnM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGhhc0VkaXRCdXR0b25zOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNvcnQoKSB7XG4gICAgICBjb25zdCBvcmRlciA9ICh0aGlzLnF1ZXJ5Lm9yZGVyIHx8ICcnKS5zcGxpdCgvXFxzKy8pXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBvcmRlclswXSxcbiAgICAgICAgb3JkZXI6IG9yZGVyWzFdXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb2x1bW5DbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiBgZGl0by1jb2x1bW4tJHtoeXBoZW5hdGUoY29sdW1uLm5hbWUpfWBcbiAgICB9LFxuXG4gICAgZ2V0U29ydENsYXNzKGNvbHVtbikge1xuICAgICAgcmV0dXJuIHRoaXMuc29ydC5uYW1lID09PSBjb2x1bW4ubmFtZVxuICAgICAgICA/IGBkaXRvLXNlbGVjdGVkIGRpdG8tb3JkZXItJHt0aGlzLnNvcnQub3JkZXJ9YFxuICAgICAgICA6IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0U29ydExpbmsoY29sdW1uKSB7XG4gICAgICAvLyBUb2dnbGUgb3JkZXIgaWYgdGhlIHNhbWUgY29sdW1uIGlzIGNsaWNrZWQgYWdhaW4uXG4gICAgICBjb25zdCBvcmRlciA9IHRoaXMuc29ydC5uYW1lID09PSBjb2x1bW4ubmFtZSAmJiB0aGlzLnNvcnQub3JkZXIgPT09ICdhc2MnXG4gICAgICAgID8gJ2Rlc2MnXG4gICAgICAgIDogJ2FzYydcbiAgICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5TGluayh7XG4gICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgIG9yZGVyOiBgJHtjb2x1bW4ubmFtZX0gJHtvcmRlcn1gXG4gICAgICB9KVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG50ZChcbiAgOmNsYXNzPVwiY2VsbC5jbGFzc1wiXG4gIDpzdHlsZT1cImNlbGwuc3R5bGVcIlxuKVxuICAvLyBUT0RPOiBJbXBsZW1lbnQgaW5saW5lZCBjb21wb25lbnRzIGluIGNlbGwgbW9kZSFcbiAgY29tcG9uZW50KFxuICAgIHYtaWY9XCJjb21wb25lbnRcIlxuICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICApXG4gIHNwYW4oXG4gICAgdi1lbHNlXG4gICAgdi1odG1sPVwicmVuZGVyQ2VsbChkYXRhKVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRkKFxuICAgIDpjbGFzcz1cImNlbGwuY2xhc3NcIlxuICAgIDpzdHlsZT1cImNlbGwuc3R5bGVcIlxuICApXG4gICAgLy8gVE9ETzogSW1wbGVtZW50IGlubGluZWQgY29tcG9uZW50cyBpbiBjZWxsIG1vZGUhXG4gICAgY29tcG9uZW50KFxuICAgICAgdi1pZj1cImNvbXBvbmVudFwiXG4gICAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiAgICBzcGFuKFxuICAgICAgdi1lbHNlXG4gICAgICB2LWh0bWw9XCJyZW5kZXJDZWxsKGRhdGEpXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGVzY2FwZUh0bWwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdGFibGUtY2VsbCcsIHtcbiAgcHJvcHM6IHtcbiAgICBjZWxsOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvbHZlVHlwZUNvbXBvbmVudCh0aGlzLmNlbGwuY29tcG9uZW50KVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcmVuZGVyQ2VsbChpdGVtKSB7XG4gICAgICBjb25zdCB7IG5hbWUsIHJlbmRlciB9ID0gdGhpcy5jZWxsXG4gICAgICBjb25zdCB2YWx1ZSA9IGl0ZW1bbmFtZV1cbiAgICAgIHJldHVybiByZW5kZXJcbiAgICAgICAgPyByZW5kZXIuY2FsbChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICAgICAgZGF0YVBhdGg6IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIG5hbWUpXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICA6IGVzY2FwZUh0bWwodmFsdWUpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQSBjb21wb25lbnQgdG8gc2ltcGx5IHBhc3MgdGhyb3VnaCBhbiBleGlzdGluZyB2dWUgdm5vZGUuXG4vLyBTZWU6IGh0dHBzOi8vZm9ydW0udnVlanMub3JnL3QvMjgxNjIvNFxuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdm5vZGUnLCB7XG4gIGZ1bmN0aW9uYWw6IHRydWUsXG4gIHJlbmRlcjogKGgsIGNvbnRleHQpID0+IGNvbnRleHQucHJvcHMubm9kZVxufSlcbjwvc2NyaXB0PlxuIiwiLy8gVHlwZUNvbXBvbmVudCBpcyB0aGUgYWJzdHJhY3QgYmFzZSBjb21wb25lbnQgZm9yIGFsbCBvdGhlciB0eXBlIGNvbXBvbmVudHNcbi8vIGluc2lkZSB0aGUgdHlwZXMvIGZvbGRlci4gVGhlcmUncyBhbHNvIGEgc2VwYXJhdGUgY29uY3JldGVcbi8vIGBUeXBlQ29tcG9uZW50LnZ1ZWAgY29tcG9uZW50LCB1c2UgdG8gcmVuZGVyIHRoZSBgdHlwZTogJ2NvbXBvbmVudCdgIHR5cGVzLlxuaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCB7IHJlZ2lzdGVyVHlwZUNvbXBvbmVudCwgZ2V0VHlwZUNvbXBvbmVudCB9IGZyb20gJy4vdXRpbHMvc2NoZW1hLmpzJ1xuXG5jb25zdCBUeXBlQ29tcG9uZW50ID0gRGl0b0NvbXBvbmVudC5leHRlbmQoe1xuICBtaXhpbnM6IFtUeXBlTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiBmYWxzZSxcbiAgdGV4dEZpZWxkOiBmYWxzZSxcbiAgLy8gU2V0IHJlYXNvbmFibGUgZGVmYXVsdHMgZm9yIGFsbCBvZiB0aGVzZSB0aGF0IGFyZSB1c2VkIGJ5IG1vc3QgdHlwZVxuICAvLyBjb21wb25lbnRzLiBUaGVzZSBvbmx5IG5lZWQgZGVmaW5pbmcgaW4gc3ViLWNsYXNzZXMgd2hlbiB0aGV5IGRpZmZlci5cbiAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICBkZWZhdWx0TmVzdGVkOiB0cnVlLFxuICBkZWZhdWx0VmlzaWJsZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogdHJ1ZSxcbiAgZXhjbHVkZVZhbHVlOiBmYWxzZSxcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBudWxsLFxuICBvbWl0UGFkZGluZzogZmFsc2Vcbn0pXG5cblR5cGVDb21wb25lbnQucmVnaXN0ZXIgPSBmdW5jdGlvbih0eXBlcywgZGVmaW5pdGlvbiA9IHt9KSB7XG4gIHR5cGVzID0gYXNBcnJheSh0eXBlcylcbiAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5jb21wb25lbnQoYGRpdG8tdHlwZS0ke3R5cGVzWzBdfWAsIGRlZmluaXRpb24pXG4gIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgIHJlZ2lzdGVyVHlwZUNvbXBvbmVudCh0eXBlLCBjb21wb25lbnQpXG4gIH1cbiAgcmV0dXJuIGNvbXBvbmVudFxufVxuXG5UeXBlQ29tcG9uZW50LmdldCA9IGdldFR5cGVDb21wb25lbnRcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudFxuIiwiXG5idXR0b24uZGl0by1idXR0b24oXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDp0eXBlPVwidHlwZVwiXG4gIDp0aXRsZT1cInRleHRcIlxuICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4pIHt7IHRleHQgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOnR5cGU9XCJ0eXBlXCJcbiAgICA6dGl0bGU9XCJ0ZXh0XCJcbiAgICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICApIHt7IHRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGhhc1Jlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBsYWJlbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAnYnV0dG9uJywgJ3N1Ym1pdCdcbl0sXG4vLyBAdnVlL2NvbXBvbmVudFxue1xuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgZXhjbHVkZVZhbHVlOiB0cnVlLFxuICBkZWZhdWx0V2lkdGg6ICdhdXRvJyxcbiAgLy8gVE9ETzogQ29uc2lkZXIgbWFraW5nIHRoaXMgd29yayBuaWNlbHk6XG4gIC8vIG9taXRGbGV4R3JvdzogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIHZlcmIoKSB7XG4gICAgICByZXR1cm4gdGhpcy52ZXJic1t0aGlzLm5hbWVdIHx8IHRoaXMubmFtZVxuICAgIH0sXG5cbiAgICB0ZXh0OiBnZXRTY2hlbWFBY2Nlc3NvcigndGV4dCcsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGdldCh0ZXh0KSB7XG4gICAgICAgIHJldHVybiB0ZXh0IHx8IGxhYmVsaXplKHRoaXMudmVyYilcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNsb3NlRm9ybTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Nsb3NlRm9ybScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIEBvdmVycmlkZVxuICAgIGdldExpc3RlbmVycygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvY3VzOiB0aGlzLm9uRm9jdXMsXG4gICAgICAgIGJsdXI6IHRoaXMub25CbHVyLFxuICAgICAgICBjbGljazogdGhpcy5vbkNsaWNrXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdChvcHRpb25zKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvdXJjZUNvbXBvbmVudD8uc3VibWl0KHRoaXMsIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIG9uQ2xpY2soKSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmVtaXRFdmVudCgnY2xpY2snLCB7XG4gICAgICAgIHBhcmVudDogdGhpcy5zY2hlbWFDb21wb25lbnRcbiAgICAgIH0pXG4gICAgICAvLyBIYXZlIGJ1dHRvbnMgdGhhdCBkZWZpbmUgcmVzb3VyY2VzIGNhbGwgYHRoaXMuc3VibWl0KClgIGJ5IGRlZmF1bHQ6XG4gICAgICBpZiAoXG4gICAgICAgIHJlcyA9PT0gdW5kZWZpbmVkICYmIC8vIE1lYW5pbmc6IGRvbid0IHByZXZlbnQgZGVmYXVsdC5cbiAgICAgICAgaGFzUmVzb3VyY2UodGhpcy5zY2hlbWEpXG4gICAgICApIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zdWJtaXQoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5pbnB1dC5kaXRvLWNoZWNrYm94KFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICB0eXBlPVwiY2hlY2tib3hcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBpbnB1dC5kaXRvLWNoZWNrYm94KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1jaGVja2JveFxuICAgIEBleHRlbmQgJWlucHV0LWJvcmRlcmxlc3Ncbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY2hlY2tib3gnLCB7XG4gIG5hdGl2ZUZpZWxkOiB0cnVlXG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQge1xuICBpc09iamVjdCwgaXNGdW5jdGlvbiwgaXNQcm9taXNlLCBub3JtYWxpemVEYXRhUGF0aCwgZ2V0VmFsdWVBdERhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgTG9hZGluZ01peGluIGZyb20gJy4vTG9hZGluZ01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtMb2FkaW5nTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBhc3luY0RhdGFFbnRyaWVzOiB7fVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlRGF0YVNjaGVtYShzY2hlbWEsIG5hbWUsIHtcbiAgICAgIHJlc29sdmVDb3VudGVyID0gMSxcbiAgICAgIC4uLmxvYWRpbmdPcHRpb25zXG4gICAgfSA9IHt9KSB7XG4gICAgICBpZiAoIWlzT2JqZWN0KHNjaGVtYSkpIHtcbiAgICAgICAgc2NoZW1hID0geyBkYXRhOiBzY2hlbWEgfVxuICAgICAgfVxuICAgICAgbGV0IHsgZGF0YSA9IHVuZGVmaW5lZCwgZGF0YVBhdGggPSBudWxsIH0gPSBzY2hlbWFcbiAgICAgIC8vIFNlZSBpZiB0aGVyZSBpcyBhc3luYyBkYXRhIGxvYWRpbmcgYWxyZWFkeSBpbiBwcm9jZXNzLlxuICAgICAgY29uc3QgYXN5bmNFbnRyeSA9IChcbiAgICAgICAgdGhpcy5hc3luY0RhdGFFbnRyaWVzW25hbWVdIHx8XG4gICAgICAgIHRoaXMuJHNldCh0aGlzLmFzeW5jRGF0YUVudHJpZXMsIG5hbWUsIHtcbiAgICAgICAgICBkZXBlbmRlbmN5RnVuY3Rpb246IG51bGwsXG4gICAgICAgICAgcmVzb2x2ZUNvdW50ZXI6IDAsXG4gICAgICAgICAgcmVzb2x2ZWREYXRhOiBudWxsLFxuICAgICAgICAgIHJlc29sdmluZzogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC8vIElmIHRoZSBkYXRhIGNhbGxiYWNrIHByb3ZpZGVkIGEgZGVwZW5kZW5jeSBmdW5jdGlvbiB3aGVuIGl0IHdhcyBjYWxsZWQsXG4gICAgICAvLyBjYWwgaXQgaW4gZXZlcnkgY2FsbCBvZiBgaGFuZGxlRGF0YVNjaGVtYSgpYCB0byBmb3JjZSBWdWUgdG8ga2VlcCB0cmFja1xuICAgICAgLy8gb2YgdGhlIGFzeW5jIGRlcGVuZGVuY2llcy5cbiAgICAgIGFzeW5jRW50cnkuZGVwZW5kZW5jeUZ1bmN0aW9uPy5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcblxuICAgICAgaWYgKGFzeW5jRW50cnkucmVzb2x2ZUNvdW50ZXIgPiAwKSB7XG4gICAgICAgIC8vIElmIHRoZSBkYXRhIHdhcyByZXNvbHZlZCBhbHJlYWR5LCByZXR1cm4gaXQgYW5kIGNsZWFyIHRoZSB2YWx1ZSBvbmNlXG4gICAgICAgIC8vIGByZXNvbHZlQ291bnRlcmAgcmVhY2hlcyB6ZXJvLiBDb3VudGluZyBpcyBuZWVkZWQgYmVjYXVzZSBkZXBlbmRpbmdcbiAgICAgICAgLy8gb24gdGhlIHVzZSBvZiBkYXRhIGFuZCByZWFjdGl2aXR5LCBtdWx0aXBsZSBjYWxscyB0byB0aGUgY29tcHV0ZWRcbiAgICAgICAgLy8gZ2V0dGVyIGFyZSB0cmlnZ2VyZWQgd2hlbiB0aGUgZGF0YSBpcyBjaGFuZ2luZy4gQ2xlYXJpbmcgdGhlIHJlc29sdmVkXG4gICAgICAgIC8vIGRhdGEgd29ya3MgYmVjYXVzZSBWdWUgY2FjaGVzIHRoZSByZXN1bHQgb2YgY29tcHV0ZWQgZ2V0dGVycyBhbmQgb25seVxuICAgICAgICAvLyByZWV2YWx1YXRlcyBpZiBvbmUgb2YgdGhlIGRlcGVuZGVuY2llcyBjaGFuZ2VkLiBUaGlzIGlzIHRvIGVuc3VyZVxuICAgICAgICAvLyB0aGF0IGEgY2FjaGVkIHZhbHVlIGhlcmUgZG9lc24ndCBibG9jayAvIG92ZXJyaWRlIHJlZXZhbHVhdGlvbjpcbiAgICAgICAgY29uc3QgeyByZXNvbHZlZERhdGEgfSA9IGFzeW5jRW50cnlcbiAgICAgICAgaWYgKC0tYXN5bmNFbnRyeS5yZXNvbHZlQ291bnRlciA9PT0gMCkge1xuICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWREYXRhID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNvbHZlZERhdGFcbiAgICAgIH1cbiAgICAgIC8vIEF2b2lkIGNhbGxpbmcgdGhlIGRhdGEgZnVuY3Rpb24gdHdpY2U6XG4gICAgICBpZiAoYXN5bmNFbnRyeS5yZXNvbHZpbmcpIHtcbiAgICAgICAgZGF0YSA9IG51bGxcbiAgICAgIH0gZWxzZSBpZiAoZGF0YSkge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihkYXRhKSkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGRhdGEuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICAgLy8gSWYgdGhlIHJlc3VsdCBvZiB0aGUgZGF0YSBmdW5jdGlvbiBpcyBhbm90aGVyIGZ1bmN0aW9uLCB0aGVuIHRoZVxuICAgICAgICAgIC8vIGZpcnN0IGRhdGEgZnVuY3Rpb24gaXMgdGhlcmUgdG8gdHJhY2sgZGVwZW5kZW5jaWVzIGFuZCB0aGUgcmVhbFxuICAgICAgICAgIC8vIGRhdGEgbG9hZGluZyBoYXBwZW5zIGluIHRoZSBmdW5jdGlvbiB0aGF0IGl0IHJldHVybmVkLiBLZWVwIHRyYWNrXG4gICAgICAgICAgLy8gaXQgaW4gYGRlcGVuZGVuY3lGdW5jdGlvbmAgc28gaXQgY2FuIGJlIGNhbGxlZCBvbiBlYWNoIGNhbGwgb2ZcbiAgICAgICAgICAvLyBgaGFuZGxlRGF0YVNjaGVtYSgpYCB0byBrZWVwIHRoZSBkZXBlbmRlbmNpZXMgaW50YWN0LCBhbmQgY2FsbFxuICAgICAgICAgIC8vIHRoZSBmdW5jdGlvbiB0aGF0IGl0IHJldHVybmVkIG9uY2UgdG8gZ2V0IHRoZSBhY3R1YWwgZGF0YTpcbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbihyZXN1bHQpKSB7XG4gICAgICAgICAgICBhc3luY0VudHJ5LmRlcGVuZGVuY3lGdW5jdGlvbiA9IGRhdGFcbiAgICAgICAgICAgIGRhdGEgPSByZXN1bHQuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSByZXN1bHRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJvbWlzZShkYXRhKSkge1xuICAgICAgICAgIC8vIElmIHRoZSBkYXRhIGlzIGFzeW5jaHJvbm91cywgaXQgY2FuJ3QgYmUgcmV0dXJuZWQgc3RyYWlnaHQgYXdheS5cbiAgICAgICAgICAvLyBCdXQgd2UgY2FuIGNoZWF0IHVzaW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYW5kIGByZXNvbHZlZERhdGFgLFxuICAgICAgICAgIC8vIHdoaWNoIGlzIGdvaW5nIHRvIHJlY2VpdmUgdGhlIGxvYWRlZCBkYXRhIGFzeW5jaHJvbm91c2x5LFxuICAgICAgICAgIC8vIHRyaWdnZXJpbmcgYSByZWNvbXB1dGUgb2YgdGhlIGNvbXB1dGVkIHByb3BlcnR5IHRoYXQgY2FsbHNcbiAgICAgICAgICAvLyBgaGFuZGxlRGF0YVNjaGVtYSgpYC5cbiAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmluZyA9IHRydWVcbiAgICAgICAgICB0aGlzLnJlc29sdmVEYXRhKGRhdGEsIGxvYWRpbmdPcHRpb25zKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZlQ291bnRlciA9IHJlc29sdmVDb3VudGVyXG4gICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVkRGF0YSA9IGRhdGFcbiAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2aW5nID0gZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICAgIC8vIENsZWFyIGRhdGEgdW50aWwgcHJvbWlzZSBpcyByZXNvbHZlZCBhbmQgYHJlc29sdmVkRGF0YWAgaXMgc2V0XG4gICAgICAgICAgZGF0YSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkYXRhUGF0aCkge1xuICAgICAgICBkYXRhID0gZ2V0VmFsdWVBdERhdGFQYXRoKFxuICAgICAgICAgIHRoaXMucm9vdERhdGEsXG4gICAgICAgICAgbm9ybWFsaXplRGF0YVBhdGgoYCR7dGhpcy5kYXRhUGF0aH0vJHtkYXRhUGF0aH1gKVxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVxuICAgIH0sXG5cbiAgICBhc3luYyByZXNvbHZlRGF0YShsb2FkLCBsb2FkaW5nT3B0aW9ucyA9IHt9KSB7XG4gICAgICB0aGlzLnNldExvYWRpbmcodHJ1ZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICBsZXQgZGF0YSA9IG51bGxcbiAgICAgIHRyeSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCAoaXNGdW5jdGlvbihsb2FkKSA/IGxvYWQoKSA6IGxvYWQpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmFkZEVycm9yKGVycm9yLm1lc3NhZ2UgfHwgZXJyb3IpXG4gICAgICB9XG4gICAgICB0aGlzLnNldExvYWRpbmcoZmFsc2UsIGxvYWRpbmdPcHRpb25zKVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBEYXRhTWl4aW4gZnJvbSAnLi9EYXRhTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgc2V0VGVtcG9yYXJ5SWQsIGlzUmVmZXJlbmNlIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc0FycmF5LCBpc1N0cmluZywgaXNGdW5jdGlvbixcbiAgbm9ybWFsaXplRGF0YVBhdGgsIGxhYmVsaXplLCBkZWJvdW5jZUFzeW5jXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0RhdGFNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaGFzT3B0aW9uczogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzZWxlY3RlZFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnRWYWx1ZSA9IHZhbHVlID0+IHRoaXMucmVsYXRlXG4gICAgICAgICAgPyB0aGlzLmhhc09wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgID8gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpc0FycmF5KHRoaXMudmFsdWUpXG4gICAgICAgICAgPyB0aGlzLnZhbHVlLm1hcChjb252ZXJ0VmFsdWUpLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAhPT0gbnVsbClcbiAgICAgICAgICA6IGNvbnZlcnRWYWx1ZSh0aGlzLnZhbHVlKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgLy8gV2hlbiByZWxhdGluZyBhbmQgYXMgc29vbiBhcyB0aGUgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLi4uXG4gICAgICAgICAgdGhpcy5yZWxhdGUgJiYgdGhpcy5oYXNPcHRpb25zICYmIChcbiAgICAgICAgICAgIC8vIC4uLmlmIHRoZSB2YWx1ZSBpcyBmb3JjZWQgdG8gbnVsbCBiZWNhdXNlIGEgZGlzYXBwZWFyZWQgb3B0aW9uLi4uXG4gICAgICAgICAgICB2YWx1ZSA9PT0gbnVsbCAmJiB0aGlzLnZhbHVlICE9PSBudWxsIHx8XG4gICAgICAgICAgICAvLyAuLi5vciBpZiB0aGUgdmFsdWUgaXMgYSByZWZlcmVuY2UsIHJlcGxhY2UgaXQgd2l0aCBpdHMgb3B0aW9uXG4gICAgICAgICAgICAvLyB2YWx1ZSwgc28gdGhhdCBpdCdsbCBob2xkIGFjdHVhbCBkYXRhLCBub3QganVzdCBhIHJlZmVyZW5jZSBpZC5cbiAgICAgICAgICAgIGlzUmVmZXJlbmNlKHRoaXMudmFsdWUpXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnQgPSB2YWx1ZSA9PiB0aGlzLnJlbGF0ZVxuICAgICAgICAgID8gdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIHRoaXMudmFsdWUgPSBpc0FycmF5KHZhbHVlKVxuICAgICAgICAgID8gdmFsdWUubWFwKGNvbnZlcnQpXG4gICAgICAgICAgOiBjb252ZXJ0KHZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZE9wdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHRoaXMuc2VsZWN0ZWRWYWx1ZSlcbiAgICB9LFxuXG4gICAgb3B0aW9ucygpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmhhbmRsZURhdGFTY2hlbWEodGhpcy5zY2hlbWEub3B0aW9ucywgJ29wdGlvbnMnLCB7XG4gICAgICAgIHJlc29sdmVDb3VudGVyOiAxXG4gICAgICB9KSA/PyBbXVxuICAgICAgaWYgKCFpc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBvcHRpb25zIGRhdGEsIHNob3VsZCBiZSBhcnJheTogJHtkYXRhfWApXG4gICAgICB9XG4gICAgICB0aGlzLmhhc09wdGlvbnMgPSBkYXRhLmxlbmd0aCA+IDBcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NPcHRpb25zKGRhdGEpXG4gICAgfSxcblxuICAgIGFjdGl2ZU9wdGlvbnMoKSB7XG4gICAgICAvLyBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gYFR5cGVNdWx0aXNlbGVjdGAgdG8gcmV0dXJuIHRoZSBgc2VhcmNoZWRPcHRpb25zYFxuICAgICAgLy8gd2hlbiBhIHNlYXJjaCBmaWx0ZXIgd2FzIGFwcGxpZWQuXG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zXG4gICAgfSxcblxuICAgIHJlbGF0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlbGF0ZScsIHtcbiAgICAgIC8vIFRPRE86IENvbnZlcnQgdG8gYHJlbGF0ZUJ5OiAnaWQnYFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgLy8gV2UgY2Fubm90IHVzZSBzY2hlbWEgYWNjZXNzb3IgY2FsbGJhY2sgbWFnaWMgZm9yIGByZWxhdGVgIGFzIHdlIG5lZWRcbiAgICAgIC8vIHRoaXMgb3V0c2lkZSBvZiB0aGUgY29tcG9uZW50J3MgbGlmZS1zcGFuLCBzZWUgYHByb2Nlc3NEYXRhKClgIGJlbG93LlxuICAgICAgY2FsbGJhY2s6IGZhbHNlXG4gICAgfSksXG5cbiAgICBncm91cEJ5OiBnZXRTY2hlbWFBY2Nlc3NvcignZ3JvdXBCeScsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIG9wdGlvbkxhYmVsOiBnZXRTY2hlbWFBY2Nlc3Nvcignb3B0aW9ucy5sYWJlbCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQobGFiZWwpIHtcbiAgICAgICAgLy8gSWYgbm8gYGxhYmVsYCB3YXMgcHJvdmlkZWQgYnV0IHRoZSBvcHRpb25zIGFyZSBvYmplY3RzLCBhc3N1bWUgYVxuICAgICAgICAvLyBkZWZhdWx0IHZhbHVlIG9mICdsYWJlbCc6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgbGFiZWwgfHxcbiAgICAgICAgICB0aGlzLmdldE9wdGlvbktleSgnbGFiZWwnKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgb3B0aW9uVmFsdWU6IGdldFNjaGVtYUFjY2Vzc29yKCdvcHRpb25zLnZhbHVlJywge1xuICAgICAgdHlwZTogW1N0cmluZywgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldCh2YWx1ZSkge1xuICAgICAgICAvLyBJZiBubyBgbGFiZWxgIHdhcyBwcm92aWRlZCBidXQgdGhlIG9wdGlvbnMgYXJlIG9iamVjdHMsIGFzc3VtZSBhXG4gICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgb2YgJ3ZhbHVlJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB2YWx1ZSB8fFxuICAgICAgICAgIHRoaXMucmVsYXRlICYmICdpZCcgfHxcbiAgICAgICAgICB0aGlzLmdldE9wdGlvbktleSgndmFsdWUnKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogQ29uc2lkZXIgbW92aW5nIHNlYXJjaCB0byBgb3B0aW9ucy5zZWFyY2hgP1xuICAgIHNlYXJjaEZpbHRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3NlYXJjaCcsIHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQoc2VhcmNoKSB7XG4gICAgICAgIGlmIChzZWFyY2gpIHtcbiAgICAgICAgICBjb25zdCB7IGZpbHRlciwgZGVib3VuY2UgfSA9IGlzRnVuY3Rpb24oc2VhcmNoKVxuICAgICAgICAgICAgPyB7IGZpbHRlcjogc2VhcmNoIH1cbiAgICAgICAgICAgIDogc2VhcmNoXG4gICAgICAgICAgcmV0dXJuIGRlYm91bmNlID8gZGVib3VuY2VBc3luYyhmaWx0ZXIsIGRlYm91bmNlKSA6IGZpbHRlclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSksXG5cbiAgICBncm91cEJ5TGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ncm91cEJ5ID8gJ2xhYmVsJyA6IG51bGxcbiAgICB9LFxuXG4gICAgZ3JvdXBCeU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ncm91cEJ5ID8gJ29wdGlvbnMnIDogbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0T3B0aW9uS2V5KGtleSkge1xuICAgICAgY29uc3QgW29wdGlvbl0gPSB0aGlzLmFjdGl2ZU9wdGlvbnNcbiAgICAgIHJldHVybiBpc09iamVjdChvcHRpb24pICYmIGtleSBpbiBvcHRpb24gPyBrZXkgOiBudWxsXG4gICAgfSxcblxuICAgIHByb2Nlc3NPcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBpZiAodGhpcy5yZWxhdGUpIHtcbiAgICAgICAgICAvLyBJZiBpZHMgYXJlIG1pc3NpbmcgYW5kIHdlIHdhbnQgdG8gcmVsYXRlLCBzZXQgdGVtcG9yYXJ5IGlkcy5cbiAgICAgICAgICAvLyBOT1RFOiBXZSBuZWVkIHRvIG1vZGlmeSB0aGUgYWN0dWFsIGRhdGEsIG1ha2luZyBhIGNvcHkgd29uJ3Qgd29ya1xuICAgICAgICAgIC8vIGFzIGl0IHdvbid0IHByb3BhZ2F0ZS5cbiAgICAgICAgICAvLyBOT1RFOiBUaGlzIG9ubHkgbWFrZXMgc2Vuc2UgaWYgdGhlIGRhdGEgaXMgZnJvbSB0aGUgZ3JhcGggdGhhdFxuICAgICAgICAgIC8vIHdlJ3JlIGN1cnJlbnRseSBlZGl0aW5nLlxuICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICghKCdpZCcgaW4gb3B0aW9uKSkge1xuICAgICAgICAgICAgICBzZXRUZW1wb3JhcnlJZChvcHRpb24sICdpZCcpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdyb3VwQnkpIHtcbiAgICAgICAgICBjb25zdCBncm91cGVkID0ge31cbiAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5yZWR1Y2UoXG4gICAgICAgICAgICAocmVzdWx0cywgb3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gb3B0aW9uW3RoaXMuZ3JvdXBCeV1cbiAgICAgICAgICAgICAgbGV0IGVudHJ5ID0gZ3JvdXBlZFtncm91cF1cbiAgICAgICAgICAgICAgaWYgKCFlbnRyeSkge1xuICAgICAgICAgICAgICAgIGVudHJ5ID0gZ3JvdXBlZFtncm91cF0gPSB7XG4gICAgICAgICAgICAgICAgICBbdGhpcy5ncm91cEJ5TGFiZWxdOiBncm91cCxcbiAgICAgICAgICAgICAgICAgIFt0aGlzLmdyb3VwQnlPcHRpb25zXTogW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGVudHJ5KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVudHJ5Lm9wdGlvbnMucHVzaChvcHRpb24pXG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHRzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW11cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRpb25zXG4gICAgfSxcblxuICAgIGhhc09wdGlvbihvcHRpb24pIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKVxuICAgIH0sXG5cbiAgICBnZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSkge1xuICAgICAgY29uc3QgZmluZE9wdGlvbiA9IChvcHRpb25zLCB2YWx1ZSwgZ3JvdXBCeSkgPT4ge1xuICAgICAgICAvLyBTZWFyY2ggZm9yIHRoZSBvcHRpb24gb2JqZWN0IHdpdGggdGhlIGdpdmVuIHZhbHVlIGFuZCByZXR1cm4gdGhlXG4gICAgICAgIC8vIHdob2xlIG9iamVjdC5cbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgIGlmIChncm91cEJ5KSB7XG4gICAgICAgICAgICBjb25zdCBmb3VuZCA9IGZpbmRPcHRpb24ob3B0aW9uLm9wdGlvbnMsIHZhbHVlLCBudWxsKVxuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmb3VuZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25WYWx1ZVxuICAgICAgICA/IGZpbmRPcHRpb24odGhpcy5hY3RpdmVPcHRpb25zLCB2YWx1ZSwgdGhpcy5ncm91cEJ5KVxuICAgICAgICA6IHZhbHVlXG4gICAgfSxcblxuICAgIGdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikge1xuICAgICAgY29uc3QgeyBvcHRpb25WYWx1ZSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzU3RyaW5nKG9wdGlvblZhbHVlKVxuICAgICAgICA/IG9wdGlvbj8uW29wdGlvblZhbHVlXVxuICAgICAgICA6IGlzRnVuY3Rpb24ob3B0aW9uVmFsdWUpXG4gICAgICAgICAgPyBvcHRpb25WYWx1ZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG9wdGlvbiB9KSlcbiAgICAgICAgICA6IG9wdGlvblxuICAgIH0sXG5cbiAgICBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIHtcbiAgICAgIGNvbnN0IHsgb3B0aW9uTGFiZWwgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc1N0cmluZyhvcHRpb25MYWJlbClcbiAgICAgICAgPyBvcHRpb24/LltvcHRpb25MYWJlbF1cbiAgICAgICAgOiBpc0Z1bmN0aW9uKG9wdGlvbkxhYmVsKVxuICAgICAgICAgID8gb3B0aW9uTGFiZWwuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBvcHRpb24gfSkpXG4gICAgICAgICAgOiBsYWJlbGl6ZShgJHtvcHRpb259YClcbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaCkge1xuICAgIGlmIChzY2hlbWEucmVsYXRlKSB7XG4gICAgICAvLyBGb3IgaW50ZXJuYWxseSByZWxhdGluZyBkYXRhIChgc2NoZW1hLm9wdGlvbnMuZGF0YVBhdGhgKSwgd2UgbmVlZCB0b1xuICAgICAgLy8gcHJvY2VzcyBib3RoIHRoZSBvcHRpb25zIChmb3IgJyNyZWYnKSBhbmQgdGhlIHZhbHVlICgnI2lkJykuXG4gICAgICAvLyBTZWUgYERhdGFNaXhpbi5oYW5kbGVEYXRhU2NoZW1hKClgOlxuICAgICAgY29uc3QgcGF0aCA9IHNjaGVtYS5vcHRpb25zPy5kYXRhUGF0aFxuICAgICAgY29uc3QgcmVsYXRlZERhdGFQYXRoID0gcGF0aFxuICAgICAgICA/IG5vcm1hbGl6ZURhdGFQYXRoKGAke2RhdGFQYXRofS8ke3BhdGh9YClcbiAgICAgICAgOiBudWxsXG4gICAgICBncmFwaC5hZGRSZWxhdGlvbihkYXRhUGF0aCwgcmVsYXRlZERhdGFQYXRoLCBzY2hlbWEpXG4gICAgICBpZiAocmVsYXRlZERhdGFQYXRoKSB7XG4gICAgICAgIGdyYXBoLnNldFNvdXJjZVJlbGF0ZWQocmVsYXRlZERhdGFQYXRoKVxuICAgICAgfVxuICAgICAgLy8gQ29udmVydCByZWxhdGluZyBvYmplY3RzIHRvIGEgc2hhbGxvdyBjb3B5IHdpdGggb25seSB0aGUgaWQgbGVmdC5cbiAgICAgIC8vIFRPRE86IENvbnZlcnQgdG8gdXNpbmcgYHJlbGF0ZUJ5YDpcbiAgICAgIGNvbnN0IHByb2Nlc3NSZWxhdGUgPSB2YWx1ZSA9PiB2YWx1ZSA/IHsgaWQ6IHZhbHVlLmlkIH0gOiB2YWx1ZVxuICAgICAgLy8gU2VsZWN0ZWQgb3B0aW9ucyBjYW4gYmUgYm90aCBvYmplY3RzICYgYXJyYXlzLCBlLmcuICdjaGVja2JveGVzJzpcbiAgICAgIHZhbHVlID0gaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgPyB2YWx1ZS5tYXAocHJvY2Vzc1JlbGF0ZSlcbiAgICAgICAgOiBwcm9jZXNzUmVsYXRlKHZhbHVlKVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuIiwiXG51bC5kaXRvLWNoZWNrYm94ZXMoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwiYGRpdG8tbGF5b3V0LSR7c2NoZW1hLmxheW91dCB8fCAndmVydGljYWwnfWBcIlxuKVxuICBsaSh2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCIpXG4gICAgbGFiZWxcbiAgICAgIGlucHV0LmRpdG8tY2hlY2tib3goXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgIClcbiAgICAgIHwge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgdWwuZGl0by1jaGVja2JveGVzKFxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4gIClcbiAgICBsaSh2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCIpXG4gICAgICBsYWJlbFxuICAgICAgICBpbnB1dC5kaXRvLWNoZWNrYm94KFxuICAgICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICAgIClcbiAgICAgICAgfCB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tY2hlY2tib3hlc1xuICAgIGxhYmVsXG4gICAgICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzXG4gICAgLmRpdG8tY2hlY2tib3hcbiAgICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjaGVja2JveGVzJywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICBkZWZhdWx0VmFsdWU6IFtdLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRPcHRpb25zOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5zZWxlY3RlZFZhbHVlIHx8IFtdKS5maWx0ZXIodmFsdWUgPT4gdmFsdWUpXG4gICAgICB9LFxuXG4gICAgICBzZXQob3B0aW9uKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IChvcHRpb24gfHwgW10pXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWNvZGUoXG4gIHJlZj1cImNvZGVcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpzdHlsZT1cInN0eWxlXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWNvZGUoXG4gICAgcmVmPVwiY29kZVwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpzdHlsZT1cInN0eWxlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWNvZGVcbiAgICBAZXh0ZW5kICVpbnB1dFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIC8vIEZvciBwcm9wcGVyIHNpemluZyBvZiBjb250ZW50IGFsb25nIHdpdGggOnN0eWxlPVwic3R5bGVcIiBzZXR0aW5nIGFib3ZlLFxuICAgIC8vIGZvciBwcm9wZXIgbGluZS1oZWlnaHQgY2FsY3VsYXRpb24uXG4gICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAmLmRpdG8td2lkdGgtZmlsbFxuICAgICAgd2lkdGg6IGF1dG9cbiAgICAuY29kZWZsYXNrXG4gICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICAvLyBJZ25vcmUgdGhlcGFyZW50IHBhZGRpbmcgZGVmaW5lZCBhYm92ZSB3aGljaCBpcyBvbmx5IG5lZWRlZCB0byBzZXRcbiAgICAgIC8vIHRoZSBkZXNpcmVkIGhlaWdodCB3aXRoIDpzdHlsZT1cInN0eWxlXCIuXG4gICAgICB0b3A6IDBcbiAgICAgIGxlZnQ6IDBcbiAgICAuY29kZWZsYXNrX190ZXh0YXJlYSxcbiAgICAuY29kZWZsYXNrX19wcmVcbiAgICAgIC8vIFVzZSBzYW1lIHBhZGRpbmcgYXMgLmRpdG8tY29kZVxuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAuY29kZWZsYXNrX190ZXh0YXJlYSxcbiAgICAuY29kZWZsYXNrX19jb2RlLFxuICAgIC5jb2RlZmxhc2tfX2xpbmVzXG4gICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LW1vbm9cbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplKVxuICAgICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0KVxuICAgIC5jb2RlZmxhc2tfX2xpbmVzXG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IENvZGVGbGFzayBmcm9tICdjb2RlZmxhc2snXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb2RlJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5saW5lcyB8fCAzXG4gICAgfSxcblxuICAgIHN0eWxlKCkge1xuICAgICAgcmV0dXJuIGBoZWlnaHQ6IGNhbGMoJHt0aGlzLmxpbmVzfWVtICogdmFyKC0tbGluZS1oZWlnaHQpKWBcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICBjb25zdCBmbGFzayA9IG5ldyBDb2RlRmxhc2sodGhpcy4kcmVmcy5jb2RlLCB7XG4gICAgICBsYW5ndWFnZTogdGhpcy5zY2hlbWEubGFuZ3VhZ2UgfHwgJ2phdmFzY3JpcHQnLFxuICAgICAgdGFiU2l6ZTogdGhpcy5zY2hlbWEuaW5kZW50U2l6ZSB8fCAyLFxuICAgICAgbGluZU51bWJlcnM6IGZhbHNlXG4gICAgfSlcblxuICAgIGxldCBjaGFuZ2VkID0gZmFsc2VcbiAgICBsZXQgaWdub3JlV2F0Y2ggPSBmYWxzZVxuICAgIGxldCBpZ25vcmVVcGRhdGUgPSBmYWxzZVxuXG4gICAgY29uc3Qgb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9jdXNlZCAmJiBjaGFuZ2VkKSB7XG4gICAgICAgIGNoYW5nZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvbkZvY3VzID0gKCkgPT4gdGhpcy5vbkZvY3VzKClcblxuICAgIGNvbnN0IG9uQmx1ciA9ICgpID0+IHtcbiAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9XG5cbiAgICB0aGlzLmRvbU9uKHRoaXMuJHJlZnMuY29kZS5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYScpLCB7XG4gICAgICBmb2N1czogb25Gb2N1cyxcbiAgICAgIGJsdXI6IG9uQmx1clxuICAgIH0pXG5cbiAgICBjb25zdCBzZXRDb2RlID0gY29kZSA9PiB7XG4gICAgICBpZiAoY29kZSAhPT0gZmxhc2suY29kZSkge1xuICAgICAgICBpZ25vcmVVcGRhdGUgPSB0cnVlXG4gICAgICAgIGZsYXNrLnVwZGF0ZUNvZGUoY29kZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy52YWx1ZSkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IHRydWVcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICAgIGNoYW5nZWQgPSB0cnVlXG4gICAgICAgIG9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmbGFzay5vblVwZGF0ZSh2YWx1ZSA9PiB7XG4gICAgICBpZiAoaWdub3JlVXBkYXRlKSB7XG4gICAgICAgIGlnbm9yZVVwZGF0ZSA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRWYWx1ZSh2YWx1ZSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy4kd2F0Y2goJ3ZhbHVlJywgdmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVdhdGNoKSB7XG4gICAgICAgIGlnbm9yZVdhdGNoID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldENvZGUodmFsdWUgfHwgJycpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHNldENvZGUodGhpcy52YWx1ZSB8fCAnJylcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy4kZWwucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKT8uZm9jdXMoKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG50cmlnZ2VyLmRpdG8tY29sb3IoXG4gIHRyaWdnZXI9XCJjbGlja1wiXG4gIDpzaG93LnN5bmM9XCJzaG93UG9wdXBcIlxuKVxuICAuZGl0by1pbnB1dChcbiAgICBzbG90PVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCJcbiAgKVxuICAgIGlucHV0KFxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICB0eXBlPVwiaW5wdXRcIlxuICAgICAgc2l6ZT1cIjhcIlxuICAgICAgdi1tb2RlbD1cImhleFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgKVxuICAgIC5kaXRvLWNvbG9yLXByZXZpZXcuZGl0by1pbmhlcml0LWZvY3VzKFxuICAgICAgdi1pZj1cInZhbHVlXCJcbiAgICApXG4gICAgICBkaXYoOnN0eWxlPVwieyBiYWNrZ3JvdW5kOiBgIyR7aGV4VmFsdWUgfHwgJzAwMDAwMDAwJ31gIH1cIilcbiAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgQGNsaWNrLnN0b3A9XCJjbGVhclwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuICBza2V0Y2gtcGlja2VyLmRpdG8tY29sb3ItcGlja2VyKFxuICAgIHNsb3Q9XCJwb3B1cFwiXG4gICAgdi1tb2RlbD1cImNvbG9yVmFsdWVcIlxuICAgIDpkaXNhYmxlLWFscGhhPVwiIWFscGhhXCJcbiAgICA6ZGlzYWJsZS1maWVsZHM9XCIhaW5wdXRzXCJcbiAgICA6cHJlc2V0LWNvbG9ycz1cInByZXNldHNcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB0cmlnZ2VyLmRpdG8tY29sb3IoXG4gICAgdHJpZ2dlcj1cImNsaWNrXCJcbiAgICA6c2hvdy5zeW5jPVwic2hvd1BvcHVwXCJcbiAgKVxuICAgIC5kaXRvLWlucHV0KFxuICAgICAgc2xvdD1cInRyaWdnZXJcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCJcbiAgICApXG4gICAgICBpbnB1dChcbiAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgICAgdHlwZT1cImlucHV0XCJcbiAgICAgICAgc2l6ZT1cIjhcIlxuICAgICAgICB2LW1vZGVsPVwiaGV4VmFsdWVcIlxuICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICApXG4gICAgICAuZGl0by1jb2xvci1wcmV2aWV3LmRpdG8taW5oZXJpdC1mb2N1cyhcbiAgICAgICAgdi1pZj1cInZhbHVlXCJcbiAgICAgIClcbiAgICAgICAgZGl2KDpzdHlsZT1cInsgYmFja2dyb3VuZDogYCMke2hleFZhbHVlIHx8ICcwMDAwMDAwMCd9YCB9XCIpXG4gICAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICAgIEBjbGljay5zdG9wPVwiY2xlYXJcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICApXG4gICAgc2tldGNoLXBpY2tlci5kaXRvLWNvbG9yLXBpY2tlcihcbiAgICAgIHNsb3Q9XCJwb3B1cFwiXG4gICAgICB2LW1vZGVsPVwiY29sb3JWYWx1ZVwiXG4gICAgICA6ZGlzYWJsZS1hbHBoYT1cIiFhbHBoYVwiXG4gICAgICA6ZGlzYWJsZS1maWVsZHM9XCIhaW5wdXRzXCJcbiAgICAgIDpwcmVzZXQtY29sb3JzPVwicHJlc2V0c1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gICRjb2xvci1zd2F0Y2gtd2lkdGg6ICRwYXR0ZXJuLXRyYW5zcGFyZW5jeS1zaXplXG4gICRjb2xvci1zd2F0Y2gtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtICRib3JkZXItd2lkdGhcbiAgLmRpdG8tY29sb3JcbiAgICAuZGl0by1pbnB1dFxuICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgICAgaW5wdXRcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6ICRjb2xvci1zd2F0Y2gtd2lkdGhcbiAgICAuZGl0by1idXR0b24tY2xlYXJcbiAgICAgIG1hcmdpbi1yaWdodDogJGNvbG9yLXN3YXRjaC13aWR0aFxuICAgIC5kaXRvLWNvbG9yLXBpY2tlclxuICAgICAgbWFyZ2luOiAkcG9wdXAtbWFyZ2luXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGVcbiAgICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93XG4gICAgLmRpdG8tY29sb3ItcHJldmlld1xuICAgICAgYmFja2dyb3VuZDogJHBhdHRlcm4tdHJhbnNwYXJlbmN5XG4gICAgICBib3JkZXItbGVmdDogJGJvcmRlci1zdHlsZVxuICAgICAgJixcbiAgICAgIGRpdlxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgd2lkdGg6ICRjb2xvci1zd2F0Y2gtd2lkdGhcbiAgICAgICAgdG9wOiAwXG4gICAgICAgIHJpZ2h0OiAwXG4gICAgICAgIGJvdHRvbTogMFxuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGNvbG9yLXN3YXRjaC1yYWRpdXNcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRjb2xvci1zd2F0Y2gtcmFkaXVzXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHRpbnljb2xvciBmcm9tICd0aW55Y29sb3IyJ1xuaW1wb3J0IHsgU2tldGNoIGFzIFNrZXRjaFBpY2tlciB9IGZyb20gJ3Z1ZS1jb2xvcidcbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBUcmlnZ2VyIH0gZnJvbSAnQGRpdG9qcy91aSdcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb2xvcicsIHtcbiAgY29tcG9uZW50czogeyBUcmlnZ2VyLCBTa2V0Y2hQaWNrZXIgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UG9wdXA6IGZhbHNlLFxuICAgICAgY29udmVydGVkSGV4VmFsdWU6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb2xvclZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlIHx8IHt9XG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy5jb2xvckZvcm1hdFxuICAgICAgICBjb25zdCBrZXkgPSB7XG4gICAgICAgICAgLy8gTk9URTogdnVlLWNvbG9yIGNhbGxzIGl0ICdoZXgnLCB3aGlsZSB0aW55Y29sb3IgY2FsbHMgaXQgJ2hleDYnXG4gICAgICAgICAgaGV4OiB2YWx1ZT8uYSA8IDEgPyAnaGV4OCcgOiAnaGV4JyxcbiAgICAgICAgICByZ2I6ICdyZ2JhJ1xuICAgICAgICB9W2Zvcm1hdF0gfHwgZm9ybWF0XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVba2V5XVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB0aW55Y29sb3IodmFsdWUpLnRvU3RyaW5nKGZvcm1hdClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaGV4VmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuY29udmVydGVkSGV4VmFsdWUgPSBudWxsXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgIGNvbnN0IGNvbG9yID0gdGlueWNvbG9yKHRoaXMudmFsdWUpXG4gICAgICAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IGNvbG9yXG4gICAgICAgICAgICAgIC50b1N0cmluZyhjb2xvci5nZXRBbHBoYSgpIDwgMSA/ICdoZXg4JyA6ICdoZXg2JylcbiAgICAgICAgICAgICAgLnNsaWNlKDEpXG4gICAgICAgICAgICAgIC50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRlZEhleFZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IHZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRPRE86IGBmb3JtYXRgIGNsYXNoZXMgd2l0aCBUeXBlTWl4aW4uZm9ybWF0KClgLCB3aGljaCBzaGFsbCBiZSByZW5hbWVkXG4gICAgLy8gc29vbiB0byBgZm9ybWF0VmFsdWUoKWAuIFJlbmFtZSBgY29sb3JGb3JtYXRgIGJhY2sgdG8gYGZvcm1hdGAgYWZ0ZXIuXG4gICAgY29sb3JGb3JtYXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdmb3JtYXQnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnaGV4J1xuICAgIH0pLFxuXG4gICAgYWxwaGE6IGdldFNjaGVtYUFjY2Vzc29yKCdhbHBoYScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgaW5wdXRzOiBnZXRTY2hlbWFBY2Nlc3NvcignaW5wdXRzJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KSxcblxuICAgIHByZXNldHM6IGdldFNjaGVtYUFjY2Vzc29yKCdwcmVzZXRzJywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBkZWZhdWx0OiBbXG4gICAgICAgICcjZmZmZmZmJyxcbiAgICAgICAgJyNjM2MzYzMnLFxuICAgICAgICAnIzdmN2Y3ZicsXG4gICAgICAgICcjMDAwMDAwJyxcbiAgICAgICAgJyM4ODAwMTUnLFxuICAgICAgICAnI2VkMWMyNCcsXG4gICAgICAgICcjZmY3ZjI3JyxcbiAgICAgICAgJyNmZmYyMDAnLFxuXG4gICAgICAgICcjMjJiMTRjJyxcbiAgICAgICAgJyMwMGEyZTgnLFxuICAgICAgICAnIzNmNDhjYycsXG4gICAgICAgICcjYTM0OWE0JyxcbiAgICAgICAgJyNiOTdhNTcnLFxuICAgICAgICAnI2ZmYWVjOScsXG4gICAgICAgICcjZmZjOTBlJyxcbiAgICAgICAgJyMwMDAwMDAwMCdcbiAgICAgIF1cbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgZm9jdXNlZChmb2N1c2VkKSB7XG4gICAgICBpZiAoIWZvY3VzZWQgJiYgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSkge1xuICAgICAgICBjb25zdCBjb2xvciA9IHRpbnljb2xvcihgIyR7dGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZX1gKVxuICAgICAgICBpZiAoY29sb3I/LmlzVmFsaWQoKSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBjb2xvci50b1N0cmluZyh0aGlzLmNvbG9yRm9ybWF0KVxuICAgICAgICAgIC8vIFRPRE86IEVtaXQgJ2lucHV0JyBoZXJlIGluc3RlYWQsIGFuZCAnY2hhbmdlJyBpbiBibHVyLCBsaWtlIG90aGVycy5cbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcblxuPC9zY3JpcHQ+XG4iLCJcbmNvbXBvbmVudChcbiAgOmlzPVwiY29tcG9uZW50XCJcbiAgdi1iaW5kPVwiJHByb3BzXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGNvbXBvbmVudChcbiAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgIHYtYmluZD1cIiRwcm9wc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4vLyBUaGlzIGlzIHRoZSBnZW5lcmFsIHB1cnBvc2UgJ2NvbXBvbmVudCcgdHlwZSwgd2hpY2ggY2FuIHJlc29sdmUgdG8gYW55IGN1c3RvbVxuLy8gY29tcG9uZW50IHRocm91Z2ggYHNjaGVtYS5jb21wb25lbnRgLCBzZWUgYHJlc29sdmVUeXBlQ29tcG9uZW50KClgLiBUaGlzIGNhblxuLy8gYmUgdXNlZCB0byBuZXN0IGFyYml0cmFyeSB2dWUgY29tcG9uZW50cyBpbiBzY2hlbWE6XG4vLyB7XG4vLyAgIHR5cGU6ICdjb21wb25lbnQnLFxuLy8gICBjb21wb25lbnQ6IGltcG9ydCgnLi9jb21wb25lbnQnKVxuLy8gfVxuXG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29tcG9uZW50Jywge1xuICAvLyBPdmVycmlkZSB0aGUgc3RhbmRhcmQgYGRlZmF1bHRWYWx1ZTogbnVsbGAgdG8gbm90IHNldCBhbnkgZGF0YSBmb3IgY3VzdG9tXG4gIC8vIGNvbXBvbmVudHMsIHVubGVzcyB0aGV5IHByb3ZpZGUgYSBkZWZhdWx0IHZhbHVlLlxuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gISgnZGVmYXVsdCcgaW4gc2NoZW1hKVxufSlcbjwvc2NyaXB0PlxuIiwiXG4vLy0gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gdHJpZ2dlciBldmFsdWF0aW9uIG9mIGB2YWx1ZWAgdGhhdCBkb3NlIG5vdFxuLy8gIGludm9sdmUgYWN0dWFsbHkgcmVuZGVyaW5nIGl0IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgdmlzaWJsZS5cbmlucHV0LmRpdG8tdGV4dC5kaXRvLWlucHV0KFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6bmFtZT1cIm5hbWVcIlxuICB0eXBlPVwidGV4dFwiXG4gIDp2YWx1ZT1cInZhbHVlXCJcbiAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICA6cmVhZG9ubHk9XCJ0cnVlXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC8vLSBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byB0cmlnZ2VyIGV2YWx1YXRpb24gb2YgYHZhbHVlYCB0aGF0IGRvc2Ugbm90XG4gIC8vICBpbnZvbHZlIGFjdHVhbGx5IHJlbmRlcmluZyBpdCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IHZpc2libGUuXG4gIGlucHV0LmRpdG8tdGV4dC5kaXRvLWlucHV0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6bmFtZT1cIm5hbWVcIlxuICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICA6dmFsdWU9XCJ2YWx1ZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpyZWFkb25seT1cInRydWVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCBEYXRhTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RhdGFNaXhpbi5qcydcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcihbXG4gICdjb21wdXRlZCcsICdkYXRhJywgJ2hpZGRlbidcbl0sXG4vLyBAdnVlL2NvbXBvbmVudFxue1xuICBtaXhpbnM6IFtEYXRhTWl4aW5dLFxuXG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBkZWZhdWx0VmlzaWJsZTogZmFsc2UsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB2YWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCB7IHNjaGVtYSB9ID0gdGhpc1xuICAgICAgICBpZiAoc2NoZW1hLmRhdGEgfHwgc2NoZW1hLmRhdGFQYXRoKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmhhbmRsZURhdGFTY2hlbWEoc2NoZW1hLCAnc2NoZW1hJywge1xuICAgICAgICAgICAgLy8gTW9kaWZ5aW5nIGB0aGlzLmRhdGFgIGJlbG93IHRyaWdnZXJzIGFub3RoZXIgY2FsbCBvZiB0aGUgYHZhbHVlYFxuICAgICAgICAgICAgLy8gZ2V0dGVyLCBzbyB1c2UgYSB2YWx1ZSBvZiAyIGZvciBgcmVzb2x2ZUNvdW50ZXJgIHRvIHJldHVybiB0aGVcbiAgICAgICAgICAgIC8vIHJlc29sdmVkIGRhdGEgdHdpY2UuXG4gICAgICAgICAgICByZXNvbHZlQ291bnRlcjogMlxuICAgICAgICAgIH0pXG4gICAgICAgICAgdGhpcy4kc2V0KHRoaXMuZGF0YSwgdGhpcy5uYW1lLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gVHlwZU1peGluLmNvbXB1dGVkLnZhbHVlLmdldC5jYWxsKHRoaXMpXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgVHlwZU1peGluLmNvbXB1dGVkLnZhbHVlLnNldC5jYWxsKHRoaXMsIHZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1kYXRlXG4gIGNvbXBvbmVudChcbiAgICA6aXM9XCJnZXRDb21wb25lbnQodHlwZSlcIlxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6bG9jYWxlPVwibG9jYWxlXCJcbiAgICA6ZGF0ZUZvcm1hdD1cInsgLi4uYXBpLmZvcm1hdHMuZGF0ZSwgLi4uZGF0ZUZvcm1hdCB9XCJcbiAgICB2LW1vZGVsPVwiZGF0ZVZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tZGF0ZVxuICAgIGNvbXBvbmVudChcbiAgICAgIDppcz1cImdldENvbXBvbmVudCh0eXBlKVwiXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgIDpsb2NhbGU9XCJsb2NhbGVcIlxuICAgICAgOmRhdGVGb3JtYXQ9XCJ7IC4uLmFwaS5mb3JtYXRzLmRhdGUsIC4uLmRhdGVGb3JtYXQgfVwiXG4gICAgICB2LW1vZGVsPVwiZGF0ZVZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgRGF0ZVRpbWVQaWNrZXIgfSBmcm9tICdAZGl0b2pzL3VpJ1xuaW1wb3J0IHsgaXNEYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcihbXG4gICdkYXRlJywgJ2RhdGV0aW1lJywgJ3RpbWUnXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgY29tcG9uZW50czogeyBEYXRlUGlja2VyLCBUaW1lUGlja2VyLCBEYXRlVGltZVBpY2tlciB9LFxuICAvLyBUT0RPOiBUaGlzIGlzIG9ubHkgaGVyZSBzbyB3ZSBnZXQgcGxhY2Vob2xkZXIgYWRkZWQuIENvbWUgdXAgd2l0aCBhIGJldHRlclxuICAvLyB3YXkgdG8gc3VwcG9ydCBhdHRyaWJ1dGVzIHBlciBjb21wb25lbnQgKGEgbGlzdCBvZiBhY3R1YWxseSBzdXBwb3J0ZWRcbiAgLy8gYXR0cmlidXRlcylcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIHRleHRGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIGRhdGVWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSB0aGlzXG4gICAgICAgIHJldHVybiB2YWx1ZSA/IG5ldyBEYXRlKHZhbHVlKSA6IHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRhdGVGb3JtYXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdkYXRlRm9ybWF0Jywge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbXBvbmVudCh0eXBlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRlOiAnZGF0ZS1waWNrZXInLFxuICAgICAgICB0aW1lOiAndGltZS1waWNrZXInLFxuICAgICAgICBkYXRldGltZTogJ2RhdGUtdGltZS1waWNrZXInXG4gICAgICB9W3R5cGVdXG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzRGF0ZSh2YWx1ZSkgPyB2YWx1ZS50b0lTT1N0cmluZygpIDogdmFsdWVcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBSZXNvdXJjZU1peGluIGZyb20gJy4vUmVzb3VyY2VNaXhpbi5qcydcbmltcG9ydCBTY2hlbWFQYXJlbnRNaXhpbiBmcm9tICcuLi9taXhpbnMvU2NoZW1hUGFyZW50TWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciwgZ2V0U3RvcmVBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0TWVtYmVyUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7XG4gIHByb2Nlc3NSb3V0ZVNjaGVtYSwgcHJvY2Vzc0Zvcm1zLCBnZXROYW1lZFNjaGVtYXMsIGdldEJ1dHRvblNjaGVtYXMsXG4gIGhhc0Zvcm1TY2hlbWEsIGdldEZvcm1TY2hlbWFzLCBnZXRWaWV3U2NoZW1hLFxuICBoYXNMYWJlbHMsIGlzQ29tcGFjdCwgaXNJbmxpbmVkLFxuICBpc09iamVjdFNvdXJjZSwgaXNMaXN0U291cmNlXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc1N0cmluZywgaXNBcnJheSwgaXNOdW1iZXIsIGVxdWFscyxcbiAgcGFyc2VEYXRhUGF0aCwgbm9ybWFsaXplRGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbUmVzb3VyY2VNaXhpbiwgU2NoZW1hUGFyZW50TWl4aW5dLFxuXG4gIGRlZmF1bHRWYWx1ZShzY2hlbWEpIHtcbiAgICByZXR1cm4gaXNMaXN0U291cmNlKHNjaGVtYSkgPyBbXSA6IG51bGxcbiAgfSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyYXBwZWRQcmltaXRpdmVzOiBudWxsLFxuICAgICAgdW53cmFwcGluZ1ByaW1pdGl2ZXM6IGZhbHNlLFxuICAgICAgaWdub3JlUm91dGVDaGFuZ2U6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc291cmNlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgaXNPYmplY3RTb3VyY2UoKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RTb3VyY2UodGhpcy50eXBlKVxuICAgIH0sXG5cbiAgICBpc0xpc3RTb3VyY2UoKSB7XG4gICAgICByZXR1cm4gaXNMaXN0U291cmNlKHRoaXMudHlwZSlcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uaGFzRGF0YSgpXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmFsdWVcbiAgICB9LFxuXG4gICAgaXNSZWFkeSgpIHtcbiAgICAgIC8vIExpc3RzIHRoYXQgaGF2ZSBubyBkYXRhIGFuZCBubyBhc3NvY2lhdGVkIHJlc291cmNlIHNob3VsZCBzdGlsbCByZW5kZXIsXG4gICAgICAvLyBhcyB0aGV5IG1heSBiZSBnZXR0aW5nIHRoZWlyIGRhdGEgZWxzZXdoZXJlLCBlLmcuIGBjb21wdXRlKClgLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzRGF0YSB8fCAhdGhpcy5wcm92aWRlc0RhdGFcbiAgICB9LFxuXG4gICAgaXNJblZpZXcoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZpZXdDb21wb25lbnRcbiAgICB9LFxuXG4gICAgd3JhcFByaW1pdGl2ZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEud3JhcFByaW1pdGl2ZXNcbiAgICB9LFxuXG4gICAgbGlzdERhdGE6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLnZhbHVlXG4gICAgICAgIGlmICh0aGlzLmlzT2JqZWN0U291cmNlKSB7XG4gICAgICAgICAgLy8gQ29udmVydCB0byBsaXN0IGFycmF5LlxuICAgICAgICAgIGRhdGEgPSBkYXRhICE9IG51bGwgPyBbZGF0YV0gOiBbXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIGRhdGEgZ2V0cyBpbmhlcml0ZWQgZnJvbSBwYXJlbnQsIHVud3JhcHBpbmcgaXMgbm90IGhhcHBlbmluZ1xuICAgICAgICAgIC8vIGF0IHRoZSByb290IGluIGBzZXREYXRhKClgLCBidXQgaGVyZSBpbnN0ZWFkLlxuICAgICAgICAgIGRhdGEgPSB0aGlzLnVud3JhcExpc3REYXRhKGRhdGEpIHx8IGRhdGFcbiAgICAgICAgfVxuICAgICAgICBkYXRhIHx8PSBbXVxuICAgICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzIH0gPSB0aGlzXG4gICAgICAgIGlmICh3cmFwUHJpbWl0aXZlcykge1xuICAgICAgICAgIGlmICh0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzKSB7XG4gICAgICAgICAgICAvLyBXZSdyZSBkb25lIHVud3JhcHBpbmcgb25jZSBgbGlzdERhdGFgIGlzIHJlZXZhbHVhdGVkLCBzbyBzZXRcbiAgICAgICAgICAgIC8vIHRoaXMgdG8gYGZhbHNlYCBhZ2Fpbi4gU2VlIGB3cmFwcGVkUHJpbWl0aXZlc2Agd2F0Y2hlciBhYm92ZS5cbiAgICAgICAgICAgIHRoaXMudW53cmFwcGluZ1ByaW1pdGl2ZXMgPSBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBDb252ZXJ0IGRhdGEgdG8gYSBsaXN0IG9mIHdyYXBwZWQgcHJpbWl0aXZlcywgYW5kIHJldHVybiBpdC5cbiAgICAgICAgICAgIHRoaXMud3JhcHBlZFByaW1pdGl2ZXMgPSBkYXRhLm1hcCh2YWx1ZSA9PiAoe1xuICAgICAgICAgICAgICBbd3JhcFByaW1pdGl2ZXNdOiB2YWx1ZVxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzLndyYXBwZWRQcmltaXRpdmVzXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgIH0sXG5cbiAgICAgIHNldChkYXRhKSB7XG4gICAgICAgIGlmICh0aGlzLndyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgICAgdGhpcy53cmFwcGVkUHJpbWl0aXZlcyA9IGRhdGFcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pc09iamVjdFNvdXJjZVxuICAgICAgICAgICAgPyAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDAgPyBkYXRhWzBdIDogbnVsbClcbiAgICAgICAgICAgIDogZGF0YVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG9iamVjdERhdGE6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgLy8gQWx3YXlzIGdvIHRocm91Z2ggYGxpc3REYXRhYCBpbnRlcm5hbGx5LCB3aGljaCBkb2VzIGFsbCB0aGVcbiAgICAgICAgLy8gcHJvY2Vzc2luZyBvZiBgd3JhcFByaW1pdGl2ZXNgLCBldGMuXG4gICAgICAgIHJldHVybiB0aGlzLmxpc3REYXRhWzBdIHx8IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHNldChkYXRhKSB7XG4gICAgICAgIHRoaXMubGlzdERhdGEgPSBkYXRhID8gW2RhdGFdIDogW11cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc291cmNlU2NoZW1hKCkge1xuICAgICAgLy8gVGhlIHNvdXJjZVNjaGVtYSBvZiBhIGxpc3QgaXMgdGhlIGxpc3QncyBzY2hlbWEgaXRzZWxmLlxuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hXG4gICAgfSxcblxuICAgIHBhdGgoKSB7XG4gICAgICAvLyBUaGlzIGlzIHVzZWQgaW4gVHlwZUxpc3QgZm9yIERpdG9Gb3JtQ2hvb3Nlci5cbiAgICAgIHJldHVybiB0aGlzLnJvdXRlQ29tcG9uZW50LmdldENoaWxkUGF0aCh0aGlzLnNjaGVtYS5wYXRoKVxuICAgIH0sXG5cbiAgICBkZWZhdWx0UXVlcnkoKSB7XG4gICAgICBjb25zdCB7IGRlZmF1bHRPcmRlcjogb3JkZXIgfSA9IHRoaXNcbiAgICAgIHJldHVybiBvcmRlciA/IHsgb3JkZXIgfSA6IHt9XG4gICAgfSxcblxuICAgIHF1ZXJ5OiBnZXRTdG9yZUFjY2Vzc29yKCdxdWVyeScsIHtcbiAgICAgIGdldChxdWVyeSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnRoaXMuZGVmYXVsdFF1ZXJ5LFxuICAgICAgICAgIC4uLnF1ZXJ5XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIHNldChxdWVyeSkge1xuICAgICAgICAvLyBBbHdheXMga2VlcCB0aGUgZGlzcGxheWVkIHF1ZXJ5IHBhcmFtZXRlcnMgaW4gc3luYyB3aXRoIHRoZSBzdG9yZWRcbiAgICAgICAgLy8gb25lcy4gVXNlIHNjb3BlIGFuZCBwYWdlIGZyb20gdGhlIGxpc3Qgc2NoZW1hIGFzIGRlZmF1bHRzLCBidXQgYWxsb3dcbiAgICAgICAgLy8gdGhlIHJvdXRlIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gb3ZlcnJpZGUgdGhlbS5cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHNjb3BlID0gdGhpcy5kZWZhdWx0U2NvcGU/Lm5hbWUsXG4gICAgICAgICAgcGFnZSA9IHRoaXMuc2NoZW1hLnBhZ2VcbiAgICAgICAgfSA9IHRoaXMucXVlcnlcbiAgICAgICAgLy8gUHJlc2VydmUgLyBtZXJnZSBjdXJyZW50bHkgc3RvcmVkIHZhbHVlcy5cbiAgICAgICAgcXVlcnkgPSB7XG4gICAgICAgICAgLi4udGhpcy5xdWVyeSxcbiAgICAgICAgICAuLi4oc2NvcGUgIT0gbnVsbCAmJiB7IHNjb3BlIH0pLFxuICAgICAgICAgIC4uLihwYWdlICE9IG51bGwgJiYgeyBwYWdlIH0pLFxuICAgICAgICAgIC4uLnF1ZXJ5XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFlcXVhbHMocXVlcnksIHRoaXMuJHJvdXRlLnF1ZXJ5KSkge1xuICAgICAgICAgIC8vIFRlbGwgdGhlIGAkcm91dGVgIHdhdGNoZXIgdG8gaWdub3JlIHRoZSBjaGFuZ2VkIHRyaWdnZXJlZCBoZXJlOlxuICAgICAgICAgIHRoaXMuaWdub3JlUm91dGVDaGFuZ2UgPSB0cnVlXG4gICAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoeyBxdWVyeSwgaGFzaDogdGhpcy4kcm91dGUuaGFzaCB9KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBxdWVyeSAvLyBMZXQgZ2V0U3RvcmVBY2Nlc3NvcigpIGRvIHRoZSBhY3R1YWwgc2V0dGluZ1xuICAgICAgfVxuICAgIH0pLFxuXG4gICAgdG90YWw6IGdldFN0b3JlQWNjZXNzb3IoJ3RvdGFsJyksXG5cbiAgICBjb2x1bW5zKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5jb2x1bW5zKVxuICAgIH0sXG5cbiAgICBzY29wZXMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLnNjb3BlcylcbiAgICB9LFxuXG4gICAgZGVmYXVsdFNjb3BlKCkge1xuICAgICAgaWYgKHRoaXMuc2NvcGVzKSB7XG4gICAgICAgIGxldCBmaXJzdCA9IG51bGxcbiAgICAgICAgZm9yIChjb25zdCBzY29wZSBvZiBPYmplY3QudmFsdWVzKHRoaXMuc2NvcGVzKSkge1xuICAgICAgICAgIGlmIChzY29wZS5kZWZhdWx0U2NvcGUpIHtcbiAgICAgICAgICAgIHJldHVybiBzY29wZVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgICAgICBmaXJzdCA9IHNjb3BlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaXJzdFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkZWZhdWx0T3JkZXIoKSB7XG4gICAgICBpZiAodGhpcy5jb2x1bW5zKSB7XG4gICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIE9iamVjdC52YWx1ZXModGhpcy5jb2x1bW5zKSkge1xuICAgICAgICAgIGNvbnN0IHsgZGVmYXVsdFNvcnQgfSA9IGNvbHVtblxuICAgICAgICAgIGlmIChkZWZhdWx0U29ydCkge1xuICAgICAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gaXNTdHJpbmcoZGVmYXVsdFNvcnQpID8gZGVmYXVsdFNvcnQgOiAnYXNjJ1xuICAgICAgICAgICAgcmV0dXJuIGAke2NvbHVtbi5uYW1lfSAke2RpcmVjdGlvbn1gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG5lc3RlZE1ldGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLm1ldGEsXG4gICAgICAgIHNjaGVtYTogdGhpcy5zY2hlbWFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9ybXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhnZXRGb3JtU2NoZW1hcyh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KSlcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgbGlua2VkIHZpZXcgc2NoZW1hIGlmIHRoaXMgc291cmNlIGVkaXRzIGl0IGl0cyBpdGVtcyB0aHJvdWdoXG4gICAgLy8gYSBsaW5rZWQgdmlldy5cbiAgICB2aWV3KCkge1xuICAgICAgcmV0dXJuIGdldFZpZXdTY2hlbWEodGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dClcbiAgICB9LFxuXG4gICAgbGlua3NUb1ZpZXcoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZpZXdcbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBnZXRCdXR0b25TY2hlbWFzKHRoaXMuc2NoZW1hLmJ1dHRvbnMpXG4gICAgfSxcblxuICAgIGhhc0xhYmVscygpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1zLnNvbWUoaGFzTGFiZWxzKVxuICAgIH0sXG5cbiAgICBpc0NvbXBhY3QoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3Jtcy5ldmVyeShpc0NvbXBhY3QpXG4gICAgfSxcblxuICAgIGlzSW5saW5lZCgpIHtcbiAgICAgIHJldHVybiBpc0lubGluZWQodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIHBhZ2luYXRlOiBnZXRTY2hlbWFBY2Nlc3NvcigncGFnaW5hdGUnLCB7XG4gICAgICB0eXBlOiBOdW1iZXJcbiAgICB9KSxcblxuICAgIHJlbmRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlbmRlcicsIHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pLFxuXG4gICAgY3JlYXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY3JlYXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGNyZWF0YWJsZSkge1xuICAgICAgICByZXR1cm4gY3JlYXRhYmxlICYmIGhhc0Zvcm1TY2hlbWEodGhpcy5zY2hlbWEpXG4gICAgICAgICAgPyB0aGlzLmlzT2JqZWN0U291cmNlXG4gICAgICAgICAgICA/ICF0aGlzLnZhbHVlXG4gICAgICAgICAgICA6IHRydWVcbiAgICAgICAgICA6IGZhbHNlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBlZGl0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2VkaXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVkaXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBlZGl0YWJsZSAmJiAhdGhpcy5pc0lubGluZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgZHJhZ2dhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZHJhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRyYWdnYWJsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2UgJiYgdGhpcy5saXN0RGF0YS5sZW5ndGggPiAxICYmIGRyYWdnYWJsZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29sbGFwc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjb2xsYXBzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBudWxsLCAvLyBzbyB0aGF0IGA/P2AgYmVsb3cgY2FuIGRvIGl0cyB0aGluZzpcbiAgICAgIGdldChjb2xsYXBzaWJsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0lubGluZWQgJiYgISEoY29sbGFwc2libGUgPz8gdGhpcy5jb2xsYXBzZWQgIT09IG51bGwpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb2xsYXBzZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdjb2xsYXBzZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAkcm91dGUodG8sIGZyb20pIHtcbiAgICAgIGlmICh0aGlzLmlnbm9yZVJvdXRlQ2hhbmdlKSB7XG4gICAgICAgIHRoaXMuaWdub3JlUm91dGVDaGFuZ2UgPSBmYWxzZVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChmcm9tLnBhdGggPT09IHRvLnBhdGggJiYgZnJvbS5oYXNoID09PSB0by5oYXNoKSB7XG4gICAgICAgIC8vIFBhdGhzIGFuZCBoYXNoZXMgcmVtYWluIHRoZSBzYW1lLCBzbyBvbmx5IHF1ZXJpZXMgaGF2ZSBjaGFuZ2VkLlxuICAgICAgICAvLyBVcGRhdGUgZmlsdGVyIGFuZCByZWxvYWQgZGF0YSB3aXRob3V0IGNsZWFyaW5nLlxuICAgICAgICB0aGlzLnF1ZXJ5ID0gdG8ucXVlcnlcbiAgICAgICAgdGhpcy5sb2FkRGF0YShmYWxzZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgd3JhcHBlZFByaW1pdGl2ZXM6IHtcbiAgICAgIGRlZXA6IHRydWUsXG4gICAgICBoYW5kbGVyKG5ld1ZhbHVlLCBvbGRWYWx1ZSkge1xuICAgICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzIH0gPSB0aGlzXG4gICAgICAgIC8vIFNraXAgdGhlIGluaXRpYWwgc2V0dGluZyBvZiB3cmFwcGVkUHJpbWl0aXZlcyBhcnJheVxuICAgICAgICBpZiAod3JhcFByaW1pdGl2ZXMgJiYgb2xkVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXaGVuZXZlciB0aGUgd3JhcHBlZFByaW1pdGl2ZXMgY2hhbmdlLCBtYXAgdGhlaXIgdmFsdWVzIGJhY2sgdG9cbiAgICAgICAgICAvLyB0aGUgYXJyYXkgb2YgcHJpbWl0aXZlcywgaW4gYSBwcmltaXRpdmUgd2F5IDopXG4gICAgICAgICAgLy8gQnV0IHNldCBgdW53cmFwcGluZ1ByaW1pdGl2ZXMgPSB0cnVlYCwgc28gdGhlIGBsaXN0RGF0YWAgY29tcHV0ZWRcbiAgICAgICAgICAvLyBwcm9wZXJ0eSBrbm93cyBhYm91dCBpdCwgd2hpY2ggc2V0cyBpdCB0byBgZmFsc2VgIGFnYWluLlxuICAgICAgICAgIHRoaXMudW53cmFwcGluZ1ByaW1pdGl2ZXMgPSB0cnVlXG4gICAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlLm1hcChvYmplY3QgPT4gb2JqZWN0W3dyYXBQcmltaXRpdmVzXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgc2V0dXBEYXRhKCkge1xuICAgICAgdGhpcy5xdWVyeSA9IHRoaXMuJHJvdXRlLnF1ZXJ5XG4gICAgICB0aGlzLmVuc3VyZURhdGEoKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5jbGVhckRhdGEoKVxuICAgIGNsZWFyRGF0YSgpIHtcbiAgICAgIHRoaXMudG90YWwgPSAwXG4gICAgICB0aGlzLnZhbHVlID0gbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5zZXREYXRhKClcbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIC8vIFdoZW4gbmV3IGRhdGEgaXMgbG9hZGVkLCB3ZSBjYW4gc3RvcmUgaXQgcmlnaHQgYmFjayBpbiB0aGUgZGF0YSBvZiB0aGVcbiAgICAgIC8vIHZpZXcgb3IgZm9ybSB0aGF0IGNyZWF0ZWQgdGhpcyBsaXN0IGNvbXBvbmVudC5cbiAgICAgIC8vIFN1cHBvcnQgdHdvIGZvcm1hdHMgZm9yIGxpc3QgZGF0YTpcbiAgICAgIC8vIC0gQXJyYXk6IGBbLi4uXWBcbiAgICAgIC8vIC0gT2JqZWN0OiBgeyByZXN1bHRzOiBbLi4uXSwgdG90YWwgfWAsIHNlZSBgdW53cmFwTGlzdERhdGEoKWBcbiAgICAgIGlmIChcbiAgICAgICAgIWRhdGEgfHxcbiAgICAgICAgdGhpcy5pc0xpc3RTb3VyY2UgJiYgaXNBcnJheShkYXRhKSB8fFxuICAgICAgICB0aGlzLmlzT2JqZWN0U291cmNlICYmIGlzT2JqZWN0KGRhdGEpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGFcbiAgICAgIH0gZWxzZSBpZiAodGhpcy51bndyYXBMaXN0RGF0YShkYXRhKSkge1xuICAgICAgICAvLyBUaGUgZm9ybWF0IGRpZG4ndCBtYXRjaCwgc2VlIGlmIHdlIHJlY2VpdmVkIGEgYHsgcmVzdWx0cywgdG90YWwgfWBcbiAgICAgICAgLy8gb2JqZWN0LCBpbiB3aGljaCBjYXNlIGB0aGlzLnZhbHVlYCB3YXMgYWxyZWFkeSBzZXQgYnlcbiAgICAgICAgLy8gYHVud3JhcExpc3REYXRhKClgIGFuZCB3ZSdyZSBkb25lIG5vdy5cbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZGF0YSkgJiYgdGhpcy5pc0luVmlldykge1xuICAgICAgICAvLyBUaGUgY29udHJvbGxlciBpcyBzZW5kaW5nIGRhdGEgZm9yIGEgZnVsbCBtdWx0aS1jb21wb25lbnQgdmlldyxcbiAgICAgICAgLy8gaW5jbHVkaW5nIHRoZSBuZXN0ZWQgbGlzdCBkYXRhLlxuICAgICAgICB0aGlzLnZpZXdDb21wb25lbnQuc2V0RGF0YShkYXRhKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB1bndyYXBMaXN0RGF0YShkYXRhKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaXNMaXN0U291cmNlICYmXG4gICAgICAgIGlzT2JqZWN0KGRhdGEpICYmXG4gICAgICAgIGlzTnVtYmVyKGRhdGEudG90YWwpICYmXG4gICAgICAgIGlzQXJyYXkoZGF0YS5yZXN1bHRzKVxuICAgICAgKSB7XG4gICAgICAgIC8vIElmIEBkaXRvanMvc2VydmVyIHNlbmRzIGRhdGEgaW4gdGhlIGZvcm0gb2YgYHsgcmVzdWx0cywgdG90YWwgfWBcbiAgICAgICAgLy8gcmVwbGFjZSB0aGUgdmFsdWUgd2l0aCByZXN1bHQsIGJ1dCByZW1lbWJlciB0aGUgdG90YWwgaW4gdGhlIHN0b3JlLlxuICAgICAgICB0aGlzLnRvdGFsID0gZGF0YS50b3RhbFxuICAgICAgICB0aGlzLnZhbHVlID0gZGF0YS5yZXN1bHRzXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNyZWF0ZUl0ZW0oc2NoZW1hLCB0eXBlKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5jcmVhdGVEYXRhKHNjaGVtYSwgdHlwZSlcbiAgICAgIGlmICh0aGlzLmlzT2JqZWN0U291cmNlKSB7XG4gICAgICAgIHRoaXMub2JqZWN0RGF0YSA9IGl0ZW1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubGlzdERhdGEucHVzaChpdGVtKVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY29sbGFwc2libGUpIHtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gdGhpcy5vcGVuU2NoZW1hQ29tcG9uZW50KC0xKSlcbiAgICAgIH1cbiAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgcmV0dXJuIGl0ZW1cbiAgICB9LFxuXG4gICAgcmVtb3ZlSXRlbShpdGVtKSB7XG4gICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICB0aGlzLm9iamVjdERhdGEgPSBudWxsXG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgeyBsaXN0RGF0YSB9ID0gdGhpc1xuICAgICAgICBjb25zdCBpbmRleCA9IGxpc3REYXRhICYmIGxpc3REYXRhLmluZGV4T2YoaXRlbSlcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICBsaXN0RGF0YS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVsZXRlSXRlbShpdGVtLCBpbmRleCkge1xuICAgICAgY29uc3QgbGFiZWwgPSBpdGVtICYmIHRoaXMuZ2V0SXRlbUxhYmVsKHRoaXMuc2NoZW1hLCBpdGVtLCB7XG4gICAgICAgIGluZGV4LFxuICAgICAgICBleHRlbmRlZDogdHJ1ZVxuICAgICAgfSlcblxuICAgICAgY29uc3Qgbm90aWZ5ID0gKCkgPT4gdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiB0aGlzLmlzVHJhbnNpZW50ID8gJ2luZm8nIDogJ3N1Y2Nlc3MnLFxuICAgICAgICB0aXRsZTogJ1N1Y2Nlc3NmdWxseSBSZW1vdmVkJyxcbiAgICAgICAgdGV4dDogW1xuICAgICAgICAgIGAke2xhYmVsfSB3YXMgJHt0aGlzLnZlcmJzLmRlbGV0ZWR9LmAsXG4gICAgICAgICAgdGhpcy50cmFuc2llbnROb3RlXG4gICAgICAgIF1cbiAgICAgIH0pXG5cbiAgICAgIGlmIChpdGVtICYmIHdpbmRvdy5jb25maXJtKFxuICAgICAgICBgRG8geW91IHJlYWxseSB3YW50IHRvICR7dGhpcy52ZXJicy5kZWxldGV9ICR7bGFiZWx9P2ApXG4gICAgICApIHtcbiAgICAgICAgaWYgKHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSlcbiAgICAgICAgICBub3RpZnkoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGl0ZW1JZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCBpdGVtKVxuICAgICAgICAgIGNvbnN0IHJlc291cmNlID0gZ2V0TWVtYmVyUmVzb3VyY2UoaXRlbUlkLCB0aGlzLnJlc291cmNlKVxuICAgICAgICAgIGlmIChyZXNvdXJjZSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVSZXF1ZXN0KHsgbWV0aG9kOiAnZGVsZXRlJywgcmVzb3VyY2UgfSwgZXJyID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSlcbiAgICAgICAgICAgICAgICBub3RpZnkoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMucmVsb2FkRGF0YSgpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRTY2hlbWFDb21wb25lbnQoaW5kZXgpIHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hQ29tcG9uZW50cyB9ID0gdGhpc1xuICAgICAgY29uc3QgeyBsZW5ndGggfSA9IHNjaGVtYUNvbXBvbmVudHNcbiAgICAgIHJldHVybiBzY2hlbWFDb21wb25lbnRzWygoaW5kZXggJSBsZW5ndGgpICsgbGVuZ3RoKSAlIGxlbmd0aF1cbiAgICB9LFxuXG4gICAgb3BlblNjaGVtYUNvbXBvbmVudChpbmRleCkge1xuICAgICAgY29uc3Qgc2NoZW1hQ29tcG9uZW50ID0gdGhpcy5nZXRTY2hlbWFDb21wb25lbnQoaW5kZXgpXG4gICAgICBpZiAoc2NoZW1hQ29tcG9uZW50KSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG5hdmlnYXRlVG9Db21wb25lbnQoZGF0YVBhdGgsIG9uQ29tcGxldGUpIHtcbiAgICAgIGlmICh0aGlzLmNvbGxhcHNpYmxlKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gZGF0YVBhdGguc3RhcnRzV2l0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgICAgID8gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgICAgID8gcGFyc2VEYXRhUGF0aChkYXRhUGF0aC5zbGljZSh0aGlzLmRhdGFQYXRoLmxlbmd0aCArIDEpKVswXSA/PyBudWxsXG4gICAgICAgICAgICA6IDBcbiAgICAgICAgICA6IG51bGxcbiAgICAgICAgaWYgKGluZGV4ICE9PSBudWxsICYmIGlzTnVtYmVyKCtpbmRleCkpIHtcbiAgICAgICAgICBjb25zdCBzY2hlbWFDb21wb25lbnQgPSB0aGlzLmdldFNjaGVtYUNvbXBvbmVudCgraW5kZXgpXG4gICAgICAgICAgaWYgKHNjaGVtYUNvbXBvbmVudCkge1xuICAgICAgICAgICAgY29uc3QgeyBvcGVuZWQgfSA9IHNjaGVtYUNvbXBvbmVudFxuICAgICAgICAgICAgaWYgKCFvcGVuZWQpIHtcbiAgICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50Lm9wZW5lZCA9IHRydWVcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy4kbmV4dFRpY2soKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aClcbiAgICAgICAgICAgIGlmIChjb21wb25lbnRzLmxlbmd0aCA+IDAgJiYgKG9uQ29tcGxldGU/Lihjb21wb25lbnRzKSA/PyB0cnVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50Lm9wZW5lZCA9IG9wZW5lZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGVUb1JvdXRlQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKVxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZVRvUm91dGVDb21wb25lbnQoZGF0YVBhdGgsIG9uQ29tcGxldGUpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxPbkNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgICAgIC8vIFJldHJpZXZlIHRoZSBsYXN0IHJvdXRlIGNvbXBvbmVudCwgd2hpY2ggd2lsbCBiZSB0aGUgY29tcG9uZW50IHRoYXRcbiAgICAgICAgICAvLyB3ZSBqdXN0IG5hdmlnYXRlZCB0bywgYW5kIHBhc3MgaXQgb24gdG8gYG9uQ29tcGxldGUoKWBcbiAgICAgICAgICBjb25zdCB7IHJvdXRlQ29tcG9uZW50cyB9ID0gdGhpcy5hcHBTdGF0ZVxuICAgICAgICAgIGNvbnN0IHJvdXRlQ29tcG9uZW50ID0gcm91dGVDb21wb25lbnRzW3JvdXRlQ29tcG9uZW50cy5sZW5ndGggLSAxXVxuICAgICAgICAgIHJlc29sdmUob25Db21wbGV0ZT8uKFtyb3V0ZUNvbXBvbmVudF0pID8/IHRydWUpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhUGF0aFBhcnRzID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiBmaW5kIGEgcm91dGUgdGhhdCBjYW4gc2VydmUgcGFydCBvZiB0aGUgZ2l2ZW4gZGF0YVBhdGgsXG4gICAgICAgIC8vIGFuZCB0YWtlIGl0IGZyb20gdGhlcmU6XG4gICAgICAgIHdoaWxlIChkYXRhUGF0aFBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5yb3V0ZUNvbXBvbmVudC5nZXRDaGlsZFBhdGgoXG4gICAgICAgICAgICB0aGlzLmFwaS5ub3JtYWxpemVQYXRoKG5vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoUGFydHMpKVxuICAgICAgICAgIClcbiAgICAgICAgICAvLyBTZWUgaWYgdGhlcmUgYWN0dWFsbHkgaXMgYSByb3V0ZSBmb3IgdGhpcyBzdWItY29tcG9uZW50OlxuICAgICAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVyLm1hdGNoKHBhdGgpXG4gICAgICAgICAgaWYgKG1hdGNoZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4kcm91dGUucGF0aCA9PT0gcGF0aCkge1xuICAgICAgICAgICAgLy8gV2UncmUgYWxyZWFkeSB0aGVyZSwgc28ganVzdCBjYWxsIGBvbkNvbXBsZXRlKClgOlxuICAgICAgICAgICAgICBjYWxsT25Db21wbGV0ZSgpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTmF2aWdhdGUgdG8gdGhlIGNvbXBvbmVudCdzIHBhdGgsIHRoZW4gY2FsbCBgb25Db21wbGV0ZSgpYF86XG4gICAgICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKFxuICAgICAgICAgICAgICAgIHsgcGF0aCB9LFxuICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIHRoZSBsYXN0IHJvdXRlIGNvbXBvbmVudCB0byBiZSBtb3VudGVkIGluIHRoZSBuZXh0XG4gICAgICAgICAgICAgICAgLy8gdGljayBiZWZvcmUgY2FsbGluZyBgb25Db21wbGV0ZSgpYFxuICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuJG5leHRUaWNrKGNhbGxPbkNvbXBsZXRlKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVqZWN0XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gS2VlcCByZW1vdmluZyB0aGUgbGFzdCBwYXJ0IHVudGlsIHdlIGZpbmQgYSBtYXRjaC5cbiAgICAgICAgICBkYXRhUGF0aFBhcnRzLnBvcCgpXG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgIH0pXG4gICAgfVxuICB9LCAvLyBlbmQgb2YgYG1ldGhvZHNgXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShcbiAgICBhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbCxcbiAgICBuZXN0ZWQgPSBmYWxzZSwgZmxhdHRlbiA9IGZhbHNlLFxuICAgIHByb2Nlc3MgPSBudWxsXG4gICkge1xuICAgIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSlcbiAgICBjb25zdCBpbmxpbmVkID0gaXNJbmxpbmVkKHNjaGVtYSlcbiAgICBpZiAoaW5saW5lZCAmJiBzY2hlbWEucmVzb3VyY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0xpc3RzIHdpdGggbmVzdGVkIGZvcm1zIGNhbm5vdCBsb2FkIGRhdGEgZnJvbSB0aGVpciBvd24gcmVzb3VyY2VzJ1xuICAgICAgKVxuICAgIH1cbiAgICAvLyBVc2UgZGlmZmVyZW50bHkgbmFtZWQgdXJsIHBhcmFtZXRlcnMgb24gZWFjaCBuZXN0ZWQgbGV2ZWwgZm9yIGlkIGFzXG4gICAgLy8gb3RoZXJ3aXNlIHRoZXkgd291bGQgY2xhc2ggYW5kIG92ZXJyaWRlIGVhY2ggb3RoZXIgaW5zaWRlICRyb3V0ZS5wYXJhbXNcbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8xMzQ1XG4gICAgY29uc3QgcGFyYW0gPSBgaWQke2xldmVsICsgMX1gXG4gICAgY29uc3QgbWV0YSA9IHtcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYVxuICAgIH1cbiAgICBjb25zdCBmb3JtTWV0YSA9IHtcbiAgICAgIC4uLm1ldGEsXG4gICAgICAvLyBXaGVuIGNoaWxkcmVuIGFyZSBmbGF0dGVuZWQgKGUuZy4gdHJlZS1saXN0cyksIGluY2x1ZGUgdGhlIGBmbGF0dGVuYFxuICAgICAgLy8gc2V0dGluZyBhbHNvLCBmb3IgZmxhdHRlbmluZyBiZWxvdy5cbiAgICAgIGZsYXR0ZW4sXG4gICAgICBuZXN0ZWQsXG4gICAgICBwYXJhbVxuICAgIH1cbiAgICBjb25zdCBjaGlsZFJvdXRlcyA9IGF3YWl0IHByb2Nlc3NGb3JtcyhhcGksIHNjaGVtYSwgbGV2ZWwpXG4gICAgaWYgKHByb2Nlc3MpIHtcbiAgICAgIGF3YWl0IHByb2Nlc3MoY2hpbGRSb3V0ZXMsIGxldmVsICsgMSlcbiAgICB9XG4gICAgLy8gSW5saW5lZCBmb3JtcyBkb24ndCBuZWVkIHRvIGFjdHVhbGx5IGFkZCByb3V0ZXMuXG4gICAgaWYgKGhhc0Zvcm1TY2hlbWEoc2NoZW1hKSAmJiAhaW5saW5lZCkge1xuICAgICAgY29uc3QgZ2V0UGF0aFdpdGhQYXJhbSA9IChwYXRoLCBwYXJhbSkgPT4gcGFyYW1cbiAgICAgICAgPyBwYXRoXG4gICAgICAgICAgPyBgJHtwYXRofS86JHtwYXJhbX1gXG4gICAgICAgICAgOiBgOiR7cGFyYW19YFxuICAgICAgICA6IHBhdGhcblxuICAgICAgLy8gTGlzdHMgaW4gc2luZ2xlLWNvbXBvbmVudC12aWV3cyAobGV2ZWwgPT09IDApIHVzZSB0aGVpciB2aWV3J3MgcGF0aCxcbiAgICAgIC8vIHdoaWxlIGFsbCBvdGhlcnMgbmVlZCB0aGVpciBwYXRoIHByZWZpeGVkIHdpdGggdGhlIHBhcmVudCdzIHBhdGg6XG4gICAgICBjb25zdCBzb3VyY2VQYXRoID0gbGV2ZWwgPT09IDAgPyAnJyA6IHNjaGVtYS5wYXRoXG4gICAgICBjb25zdCBmb3JtUm91dGUgPSB7XG4gICAgICAgIC8vIE9iamVjdCBzb3VyY2VzIGRvbid0IG5lZWQgaWQgcGFyYW1zIGluIHRoZWlyIGZvcm0gcGF0aHMsIGFzIHRoZXlcbiAgICAgICAgLy8gZGlyZWN0bHkgZWRpdCBvbmUgb2JqZWN0LlxuICAgICAgICBwYXRoOiBnZXRQYXRoV2l0aFBhcmFtKHNvdXJjZVBhdGgsIGlzTGlzdFNvdXJjZShzY2hlbWEpICYmIHBhcmFtKSxcbiAgICAgICAgY29tcG9uZW50OiBEaXRvQ29tcG9uZW50LmNvbXBvbmVudChcbiAgICAgICAgICBuZXN0ZWQgPyAnZGl0by1mb3JtLW5lc3RlZCcgOiAnZGl0by1mb3JtJ1xuICAgICAgICApLFxuICAgICAgICBtZXRhOiBmb3JtTWV0YVxuICAgICAgfVxuICAgICAgaWYgKGlzT2JqZWN0U291cmNlKHNjaGVtYSkpIHtcbiAgICAgICAgLy8gQWxzbyBhZGQgYSBwYXJhbSByb3V0ZSwgc2ltcGx5IHRvIGhhbmRsZSAnL2NyZWF0ZScgbGlua3MgdGhlIHNhbWVcbiAgICAgICAgLy8gd2F5IHRoYXQgbGlzdHMgZG8sIHdoZXJlIGl0IG92ZXJsYXBzIHdpdGggOmlkIGZvciBpdGVtIGlkcy5cbiAgICAgICAgcm91dGVzLnB1c2goe1xuICAgICAgICAgIC4uLmZvcm1Sb3V0ZSxcbiAgICAgICAgICBwYXRoOiBnZXRQYXRoV2l0aFBhcmFtKHNvdXJjZVBhdGgsIHBhcmFtKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKHNvdXJjZVBhdGgpIHtcbiAgICAgICAgLy8gSnVzdCByZWRpcmVjdCBiYWNrIHRvIHRoZSBwYXJlbnQgd2hlbiBhIG5lc3RlZCBzb3VyY2Ugcm91dGUgaXMgaGl0LlxuICAgICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgICAgcGF0aDogc291cmNlUGF0aCxcbiAgICAgICAgICByZWRpcmVjdDogJy4nLFxuICAgICAgICAgIG1ldGFcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIC8vIFBhcnRpdGlvbiBjaGlsZFJvdXRlcyBpbnRvIHRob3NlIHRoYXQgbmVlZCBmbGF0dGVuaW5nIChlLmcuIHRyZWUtbGlzdHMpXG4gICAgICAvLyBhbmQgdGhvc2UgdGhhdCBkb24ndCwgYW5kIHByb2Nlc3MgZWFjaCBncm91cCBzZXBhcmF0ZWx5IGFmdGVyLlxuICAgICAgY29uc3QgW2ZsYXRSb3V0ZXMsIHN1YlJvdXRlc10gPSBjaGlsZFJvdXRlcy5yZWR1Y2UoXG4gICAgICAgIChyZXMsIHJvdXRlKSA9PiB7XG4gICAgICAgICAgcmVzW3JvdXRlLm1ldGEuZmxhdHRlbiA/IDAgOiAxXS5wdXNoKHJvdXRlKVxuICAgICAgICAgIHJldHVybiByZXNcbiAgICAgICAgfSxcbiAgICAgICAgW1tdLCBbXV1cbiAgICAgIClcbiAgICAgIGlmIChzdWJSb3V0ZXMubGVuZ3RoKSB7XG4gICAgICAgIGZvcm1Sb3V0ZS5jaGlsZHJlbiA9IHN1YlJvdXRlc1xuICAgICAgfVxuICAgICAgcm91dGVzLnB1c2goZm9ybVJvdXRlKVxuICAgICAgLy8gQWRkIHRoZSBwcmVmaXhlZCBmb3JtUm91dGVzIHdpdGggdGhlaXIgY2hpbGRyZW4gZm9yIG5lc3RlZCBsaXN0cy5cbiAgICAgIGlmIChmbGF0Um91dGVzLmxlbmd0aCkge1xuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkUm91dGUgb2YgZmxhdFJvdXRlcykge1xuICAgICAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgICAgIC4uLihjaGlsZFJvdXRlLnJlZGlyZWN0ID8gY2hpbGRSb3V0ZSA6IGZvcm1Sb3V0ZSksXG4gICAgICAgICAgICBwYXRoOiBgJHtmb3JtUm91dGUucGF0aH0vJHtjaGlsZFJvdXRlLnBhdGh9YCxcbiAgICAgICAgICAgIG1ldGE6IHtcbiAgICAgICAgICAgICAgLi4uY2hpbGRSb3V0ZS5tZXRhLFxuICAgICAgICAgICAgICBmbGF0dGVuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSwgZGF0YVBhdGgsIGdyYXBoKSB7XG4gICAgZ3JhcGguYWRkU291cmNlKGRhdGFQYXRoLCBzY2hlbWEpXG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cbiIsImltcG9ydCB7IGlzQXJyYXksIGFzQXJyYXksIGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGZpbHRlckNvbXBvbmVudHMgPSB7XG4gIHRleHQoZmlsdGVyKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IFtcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdjb250YWlucycsXG4gICAgICAgIHZhbHVlOiAnY29udGFpbnMnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ2VxdWFscycsXG4gICAgICAgIHZhbHVlOiAnZXF1YWxzJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdzdGFydHMgd2l0aCcsXG4gICAgICAgIHZhbHVlOiAnc3RhcnRzLXdpdGgnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ2VuZHMgd2l0aCcsXG4gICAgICAgIHZhbHVlOiAnZW5kcy13aXRoJ1xuICAgICAgfVxuICAgIF1cbiAgICByZXR1cm4ge1xuICAgICAgb3BlcmF0b3I6IGZpbHRlci5vcGVyYXRvcnNcbiAgICAgICAgPyB7XG4gICAgICAgICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgICAgICAgb3B0aW9uczpcbiAgICAgICAgICAgIGlzQXJyYXkoZmlsdGVyLm9wZXJhdG9ycylcbiAgICAgICAgICAgICAgPyBvcHRpb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgICBvcHRpb24gPT4gZmlsdGVyLm9wZXJhdG9ycy5pbmNsdWRlcyhvcHRpb24udmFsdWUpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBvcHRpb25zLFxuICAgICAgICAgIHdpZHRoOiAnNDAlJ1xuICAgICAgICB9XG4gICAgICAgIDogbnVsbCxcbiAgICAgIHRleHQ6IHtcbiAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICB3aWR0aDogZmlsdGVyLm9wZXJhdG9ycyA/ICc2MCUnIDogJ2ZpbGwnXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gICdkYXRlLXJhbmdlJygpIHtcbiAgICAvLyBVc2Ugc2hvcnRlciBkYXRlIGZvcm1hdCBpbiBkYXRlLXJhbmdlIGZpbHRlcnM6XG4gICAgY29uc3QgZGF0ZUZvcm1hdCA9IHtcbiAgICAgIGRheTogJzItZGlnaXQnLFxuICAgICAgbW9udGg6ICcyLWRpZ2l0JyxcbiAgICAgIHllYXI6ICdudW1lcmljJ1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZnJvbToge1xuICAgICAgICB0eXBlOiAnZGF0ZXRpbWUnLFxuICAgICAgICB3aWR0aDogJzUwJScsXG4gICAgICAgIGRhdGVGb3JtYXRcbiAgICAgIH0sXG4gICAgICB0bzoge1xuICAgICAgICB0eXBlOiAnZGF0ZXRpbWUnLFxuICAgICAgICB3aWR0aDogJzUwJScsXG4gICAgICAgIGRhdGVGb3JtYXRcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbHRlcnNQYW5lbChmaWx0ZXJzLCBkYXRhUGF0aCwgcHJveHkpIHtcbiAgY29uc3QgcGFuZWwgPSB7XG4gICAgbGFiZWw6ICdGaWx0ZXJzJyxcbiAgICBuYW1lOiAnJGZpbHRlcnMnLFxuICAgIHRhcmdldDogZGF0YVBhdGgsXG4gICAgLy8gT3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmFsdWVcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgLy8gTk9URTogT24gcGFuZWxzLCB0aGUgZGF0YSgpIGNhbGxiYWNrIGRvZXMgc29tZXRoaW5nIGVsc2UgdGhhbiBvbiBub3JtYWxcbiAgICAvLyBzY2hlbWE6IEl0IHByb2R1Y2VzIHRoZSBgZGF0YWAgcHJvcGVydHkgdG8gYmUgcGFzc2VkIHRvIHRoZSBwYW5lbCdzXG4gICAgLy8gc2NoZW1hLCBub3QgdGhlIGRhdGEgdG8gYmUgdXNlZCBmb3IgdGhlIHBhbmVsIGNvbXBvbmVudCBkaXJlY3RseS5cbiAgICBkYXRhKCkge1xuICAgICAgcmV0dXJuIHBhcnNlRmlsdGVyc0RhdGEoXG4gICAgICAgIHBhbmVsLFxuICAgICAgICBwcm94eS5xdWVyeVxuICAgICAgKVxuICAgIH0sXG4gICAgY29tcG9uZW50czogZ2V0RmlsdGVyc0NvbXBvbmVudHMoZmlsdGVycyksXG4gICAgYnV0dG9uczoge1xuICAgICAgY2xlYXI6IHtcbiAgICAgICAgdGV4dDogJ0NsZWFyJyxcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgY2xpY2soeyBzY2hlbWFDb21wb25lbnQgfSkge1xuICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50LnJlc2V0RGF0YSgpXG4gICAgICAgICAgICBzY2hlbWFDb21wb25lbnQuYXBwbHlGaWx0ZXJzKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGZpbHRlcjoge1xuICAgICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgICAgdGV4dDogJ0ZpbHRlcicsXG4gICAgICAgIGV2ZW50czoge1xuICAgICAgICAgIGNsaWNrKHsgc2NoZW1hQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5hcHBseUZpbHRlcnMoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgYXBwbHlGaWx0ZXJzKCkge1xuICAgICAgICBwcm94eS5xdWVyeSA9IHtcbiAgICAgICAgICAuLi5wcm94eS5xdWVyeSxcbiAgICAgICAgICBmaWx0ZXI6IGZvcm1hdEZpbHRlcnNEYXRhKHRoaXMuc2NoZW1hLCB0aGlzLmRhdGEpLFxuICAgICAgICAgIC8vIENsZWFyIHBhZ2luYXRpb24gd2hlbiBhcHBseWluZyBvciBjbGVhcmluZyBmaWx0ZXJzOlxuICAgICAgICAgIHBhZ2U6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBwYW5lbFxufVxuXG5mdW5jdGlvbiBnZXRGaWx0ZXJzQ29tcG9uZW50cyhmaWx0ZXJzKSB7XG4gIGNvbnN0IGNvbXBzID0ge31cbiAgZm9yIChjb25zdCBmaWx0ZXIgb2YgT2JqZWN0LnZhbHVlcyhmaWx0ZXJzIHx8IHt9KSkge1xuICAgIC8vIFN1cHBvcnQgYm90aCBjdXN0b20gZm9ybXMgYW5kIGRlZmF1bHQgZmlsdGVyIGNvbXBvbmVudHMsIHRocm91Z2ggdGhlXG4gICAgLy8gYGZpbHRlckNvbXBvbmVudHNgIHJlZ2lzdHJ5LiBFdmVuIGZvciBkZWZhdWx0IGZpbHRlcnMsIHN0aWxsIHVzZSB0aGVcbiAgICAvLyBwcm9wZXJ0aWVzIGluIGBmaWx0ZXJgIGFzIHRoZSBiYXNlIGZvciBgZm9ybWAsIHNvIHRoaW5ncyBsaWtlIGBsYWJlbGBcbiAgICAvLyBjYW4gYmUgY2hhbmdlZCBvbiB0aGUgcmVzdWx0aW5nIGZvcm0uXG4gICAgY29uc3QgeyBmaWx0ZXI6IHR5cGUsIC4uLmZvcm0gfSA9IGZpbHRlclxuICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0eXBlXG4gICAgICA/IGZpbHRlckNvbXBvbmVudHNbdHlwZV0/LihmaWx0ZXIpXG4gICAgICA6IGZpbHRlci5jb21wb25lbnRzXG4gICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgIGZvcm0uY29tcG9uZW50cyA9IHt9XG4gICAgICAvLyBDb252ZXJ0IGxhYmVscyB0byBwbGFjZWhvbGRlcnM6XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIGNvbXBvbmVudF0gb2YgT2JqZWN0LmVudHJpZXMoY29tcG9uZW50cykpIHtcbiAgICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICAgIGNvbnN0IGxhYmVsID0gY29tcG9uZW50LmxhYmVsIHx8IGxhYmVsaXplKGNvbXBvbmVudC5uYW1lIHx8IGtleSlcbiAgICAgICAgICBmb3JtLmNvbXBvbmVudHNba2V5XSA9IHtcbiAgICAgICAgICAgIC4uLmNvbXBvbmVudCxcbiAgICAgICAgICAgIGxhYmVsOiBmYWxzZSxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBsYWJlbFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29tcHNbZmlsdGVyLm5hbWVdID0ge1xuICAgICAgICBsYWJlbDogZm9ybS5sYWJlbCxcbiAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIGRlZmF1bHQ6ICgpID0+ICh7fSksXG4gICAgICAgIGZvcm0sXG4gICAgICAgIGlubGluZWQ6IHRydWVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBmaWx0ZXIgJyR7ZmlsdGVyLm5hbWV9JzogVW5rbm93biBmaWx0ZXIgdHlwZSAnJHt0eXBlfScuYFxuICAgICAgKVxuICAgIH1cbiAgfVxuICByZXR1cm4gY29tcHNcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50c0ZvckZpbHRlcihzY2hlbWEsIG5hbWUpIHtcbiAgY29uc3QgY29tcG9uZW50ID0gc2NoZW1hLmNvbXBvbmVudHNbbmFtZV1cbiAgcmV0dXJuIGNvbXBvbmVudD8uZm9ybT8uY29tcG9uZW50c1xufVxuXG5mdW5jdGlvbiBmb3JtYXRGaWx0ZXJzRGF0YShzY2hlbWEsIGRhdGEpIHtcbiAgY29uc3QgZmlsdGVycyA9IFtdXG4gIGZvciAoY29uc3QgbmFtZSBpbiBkYXRhKSB7XG4gICAgY29uc3QgZW50cnkgPSBkYXRhW25hbWVdXG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICAvLyBNYXAgY29tcG9uZW50cyBzZXF1ZW5jZSB0byBhcmd1bWVudHM6XG4gICAgICBjb25zdCBhcmdzID0gT2JqZWN0LmtleXMoZ2V0Q29tcG9uZW50c0ZvckZpbHRlcihzY2hlbWEsIG5hbWUpKS5tYXAoXG4gICAgICAgIGtleSA9PiBlbnRyeVtrZXldID8/IG51bGxcbiAgICAgIClcbiAgICAgIC8vIE9ubHkgYXBwbHkgZmlsdGVyIGlmIHRoZXJlIGFyZSBzb21lIGFyZ3VtZW50cyB0aGF0IGFyZW4ndCBudWxsOlxuICAgICAgaWYgKGFyZ3Muc29tZSh2YWx1ZSA9PiB2YWx1ZSAhPT0gbnVsbCkpIHtcbiAgICAgICAgZmlsdGVycy5wdXNoKGAke25hbWV9OiR7YXJncy5tYXAoSlNPTi5zdHJpbmdpZnkpLmpvaW4oJywnKX1gKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmlsdGVycy5sZW5ndGggPyBmaWx0ZXJzIDogdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIHBhcnNlRmlsdGVyc0RhdGEoc2NoZW1hLCBxdWVyeSkge1xuICBjb25zdCBmaWx0ZXJzID0ge31cbiAgLy8gU2FtZSBhcyBAZGl0b2pzL3NlcnZlcidzIFF1ZXJ5UGFyYW1ldGVycy5maWx0ZXI6IFRyYW5zbGF0ZSB0aGUgc3RyaW5nIGRhdGFcbiAgLy8gZnJvbSAkcm91dGUucXVlcnkgYmFjayB0byBwYXJhbSBsaXN0cyBwZXIgZmlsdGVyOlxuICBpZiAocXVlcnkpIHtcbiAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBhc0FycmF5KHF1ZXJ5LmZpbHRlcikpIHtcbiAgICAgIGNvbnN0IFssIG5hbWUsIGpzb25dID0gZmlsdGVyLm1hdGNoKC9eKFxcdyspOiguKikkLylcbiAgICAgIHRyeSB7XG4gICAgICAgIGZpbHRlcnNbbmFtZV0gPSBhc0FycmF5KEpTT04ucGFyc2UoYFske2pzb259XWApKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgZmlsdGVyc0RhdGEgPSB7fVxuICBmb3IgKGNvbnN0IG5hbWUgaW4gc2NoZW1hLmNvbXBvbmVudHMpIHtcbiAgICBjb25zdCBkYXRhID0ge31cbiAgICAvLyBJZiB3ZSBoYXZlIHJldHJpZXZlZCBwYXJhbXMgZnJvbSB0aGUgcXVlcnksIGZldGNoIHRoZSBhc3NvY2lhdGVkXG4gICAgLy8gZm9ybSBjb21wb25lbnRzIHNvIHdlIGNhbiBtYXAgdGhlIHZhbHVlcyBiYWNrIHRvIG9iamVjdCBrZXlzOlxuICAgIGNvbnN0IGFyZ3MgPSBmaWx0ZXJzW25hbWVdXG4gICAgaWYgKGFyZ3MpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBnZXRDb21wb25lbnRzRm9yRmlsdGVyKHNjaGVtYSwgbmFtZSlcbiAgICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICAgIGxldCBpbmRleCA9IDBcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gY29tcG9uZW50cykge1xuICAgICAgICAgIGRhdGFba2V5XSA9IGFyZ3NbaW5kZXgrK11cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmaWx0ZXJzRGF0YVtuYW1lXSA9IGRhdGFcbiAgfVxuICByZXR1cm4gZmlsdGVyc0RhdGFcbn1cbiIsIlxuLmRpdG8tbGlzdChcbiAgdi1pZj1cImlzUmVhZHlcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1cInNjaGVtYS5jbGFzc1wiXG4gIDpzdHlsZT1cInNjaGVtYS5zdHlsZVwiXG4pXG4gIC5kaXRvLW5hdmlnYXRpb25cbiAgICBkaXRvLXNjb3BlcyhcbiAgICAgIHYtaWY9XCJzY29wZXNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gICAgKVxuICAgIC8vIFdoZW4gdGhlcmUncyBvbmx5IHBhZ2luYXRpb24gd2l0aG91dCBzY29wZXMsIHdlIG5lZWQgYSBnb29kIG9sJyBzcGFjZXJcbiAgICAvLyBkaXYsIGZvciB0aGUgbGF5b3V0IG5vdCB0byBicmVhay4uLlxuICAgIC5kaXRvLXNwYWNlcihcbiAgICAgIHYtZWxzZS1pZj1cInBhZ2luYXRlXCJcbiAgICApXG4gICAgZGl0by1wYWdpbmF0aW9uKFxuICAgICAgdi1pZj1cInBhZ2luYXRlXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpsaW1pdD1cInBhZ2luYXRlXCJcbiAgICAgIDp0b3RhbD1cInRvdGFsIHx8IDBcIlxuICAgIClcbiAgdGFibGUuZGl0by10YWJsZShcbiAgICA6Y2xhc3M9YHtcbiAgICAgICdkaXRvLXRhYmxlLXNlcGFyYXRvcnMnOiBpc0lubGluZWQsXG4gICAgICAnZGl0by10YWJsZS1sYXJnZXItcGFkZGluZyc6IGhhc0VkaXRCdXR0b25zICYmICFpc0lubGluZWQsXG4gICAgICAnZGl0by10YWJsZS1hbHRlcm5hdGUtY29sb3JzJzogIWlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWV2ZW4tY291bnQnOiBoYXNFdmVuQ291bnRcbiAgICB9YFxuICApXG4gICAgZGl0by10YWJsZS1oZWFkKFxuICAgICAgdi1pZj1cImNvbHVtbnNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOmNvbHVtbnM9XCJjb2x1bW5zXCJcbiAgICAgIDpoYXNFZGl0QnV0dG9ucz1cImhhc0VkaXRCdXR0b25zXCJcbiAgICApXG4gICAgdnVlLWRyYWdnYWJsZShcbiAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGRyYWdnYWJsZSlcIlxuICAgICAgOmxpc3Q9XCJ1cGRhdGVPcmRlcihzb3VyY2VTY2hlbWEsIGxpc3REYXRhLCBwYWdpbmF0aW9uUmFuZ2UpXCJcbiAgICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICAgIEBlbmQ9XCJvbkVuZERyYWdcIlxuICAgIClcbiAgICAgIHRyKFxuICAgICAgICB2LWZvcj1cIml0ZW0sIGluZGV4IGluIGxpc3REYXRhXCJcbiAgICAgICAgOmtleT1cImdldEl0ZW1VaWQoc2NoZW1hLCBpdGVtKVwiXG4gICAgICAgIDppZD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKHYtaWY9XCJjb2x1bW5zXCIpXG4gICAgICAgICAgZGl0by10YWJsZS1jZWxsKFxuICAgICAgICAgICAgdi1mb3I9XCJjb2x1bW4gaW4gY29sdW1uc1wiXG4gICAgICAgICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGNvbHVtbilcIlxuICAgICAgICAgICAgOmtleT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgICAgIDpjbGFzcz1cImdldENlbGxDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgIDpjZWxsPVwiY29sdW1uXCJcbiAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UpXG4gICAgICAgICAgdGRcbiAgICAgICAgICAgIGRpdG8tc2NoZW1hLWlubGluZWQoXG4gICAgICAgICAgICAgIHYtaWY9XCJpc0lubGluZWRcIlxuICAgICAgICAgICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBpdGVtLCB7IGluZGV4LCBhc09iamVjdDogdHJ1ZSB9KVwiXG4gICAgICAgICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShpbmRleClcIlxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgICAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbXBvbmVudChcbiAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZWxzZS1pZj1cInJlbmRlclwiXG4gICAgICAgICAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KGl0ZW0sIGluZGV4KSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIGl0ZW0sIHsgaW5kZXggfSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zKFxuICAgICAgICAgIHYtaWY9XCJoYXNDZWxsRWRpdEJ1dHRvbnNcIlxuICAgICAgICApXG4gICAgICAgICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoaW5kZXgpXCJcbiAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgKVxuICAgIC8vIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBpbnNpZGUgdGFibGUgd2hlbiBub3QgaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gICAgdGZvb3QoXG4gICAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgIXNpbmdsZVwiXG4gICAgKVxuICAgICAgdHJcbiAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICA6Y29sc3Bhbj1cIm51bUNvbHVtbnNcIlxuICAgICAgICApXG4gICAgICAgICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICAgICAgICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICA6ZGF0YT1cImxpc3REYXRhXCJcbiAgICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgKVxuICAvLyBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgb3V0c2lkZSB0YWJsZSB3aGVuIGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICBkaXRvLWVkaXQtYnV0dG9ucy5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgdi1pZj1cImhhc0xpc3RCdXR0b25zICYmIHNpbmdsZVwiXG4gICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImxpc3REYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tbGlzdChcbiAgICB2LWlmPVwiaXNSZWFkeVwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpjbGFzcz1cInNjaGVtYS5jbGFzc1wiXG4gICAgOnN0eWxlPVwic2NoZW1hLnN0eWxlXCJcbiAgKVxuICAgIC5kaXRvLW5hdmlnYXRpb25cbiAgICAgIGRpdG8tc2NvcGVzKFxuICAgICAgICB2LWlmPVwic2NvcGVzXCJcbiAgICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgICA6c2NvcGVzPVwic2NvcGVzXCJcbiAgICAgIClcbiAgICAgIC8vIFdoZW4gdGhlcmUncyBvbmx5IHBhZ2luYXRpb24gd2l0aG91dCBzY29wZXMsIHdlIG5lZWQgYSBnb29kIG9sJyBzcGFjZXJcbiAgICAgIC8vIGRpdiwgZm9yIHRoZSBsYXlvdXQgbm90IHRvIGJyZWFrLi4uXG4gICAgICAuZGl0by1zcGFjZXIoXG4gICAgICAgIHYtZWxzZS1pZj1cInBhZ2luYXRlXCJcbiAgICAgIClcbiAgICAgIGRpdG8tcGFnaW5hdGlvbihcbiAgICAgICAgdi1pZj1cInBhZ2luYXRlXCJcbiAgICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgICA6bGltaXQ9XCJwYWdpbmF0ZVwiXG4gICAgICAgIDp0b3RhbD1cInRvdGFsIHx8IDBcIlxuICAgICAgKVxuICAgIHRhYmxlLmRpdG8tdGFibGUoXG4gICAgICA6Y2xhc3M9YHtcbiAgICAgICAgJ2RpdG8tdGFibGUtc2VwYXJhdG9ycyc6IGlzSW5saW5lZCxcbiAgICAgICAgJ2RpdG8tdGFibGUtbGFyZ2VyLXBhZGRpbmcnOiBoYXNFZGl0QnV0dG9ucyAmJiAhaXNJbmxpbmVkLFxuICAgICAgICAnZGl0by10YWJsZS1hbHRlcm5hdGUtY29sb3JzJzogIWlzSW5saW5lZCxcbiAgICAgICAgJ2RpdG8tdGFibGUtZXZlbi1jb3VudCc6IGhhc0V2ZW5Db3VudFxuICAgICAgfWBcbiAgICApXG4gICAgICBkaXRvLXRhYmxlLWhlYWQoXG4gICAgICAgIHYtaWY9XCJjb2x1bW5zXCJcbiAgICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgICA6Y29sdW1ucz1cImNvbHVtbnNcIlxuICAgICAgICA6aGFzRWRpdEJ1dHRvbnM9XCJoYXNFZGl0QnV0dG9uc1wiXG4gICAgICApXG4gICAgICB2dWUtZHJhZ2dhYmxlKFxuICAgICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGRyYWdnYWJsZSlcIlxuICAgICAgICA6bGlzdD1cInVwZGF0ZU9yZGVyKHNvdXJjZVNjaGVtYSwgbGlzdERhdGEsIHBhZ2luYXRpb25SYW5nZSlcIlxuICAgICAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgICAgIEBlbmQ9XCJvbkVuZERyYWdcIlxuICAgICAgKVxuICAgICAgICB0cihcbiAgICAgICAgICB2LWZvcj1cIml0ZW0sIGluZGV4IGluIGxpc3REYXRhXCJcbiAgICAgICAgICA6a2V5PVwiZ2V0SXRlbVVpZChzY2hlbWEsIGl0ZW0pXCJcbiAgICAgICAgICA6aWQ9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICApXG4gICAgICAgICAgdGVtcGxhdGUodi1pZj1cImNvbHVtbnNcIilcbiAgICAgICAgICAgIGRpdG8tdGFibGUtY2VsbChcbiAgICAgICAgICAgICAgdi1mb3I9XCJjb2x1bW4gaW4gY29sdW1uc1wiXG4gICAgICAgICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoY29sdW1uKVwiXG4gICAgICAgICAgICAgIDprZXk9XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldENlbGxDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgICAgOmNlbGw9XCJjb2x1bW5cIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZSlcbiAgICAgICAgICAgIHRkXG4gICAgICAgICAgICAgIGRpdG8tc2NoZW1hLWlubGluZWQoXG4gICAgICAgICAgICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICAgICAgICAgICAgOmxhYmVsPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCwgYXNPYmplY3Q6IHRydWUgfSlcIlxuICAgICAgICAgICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgICAgICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICAgICAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgICAgIDplZGl0UGF0aD1cImdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb21wb25lbnQoXG4gICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgICAgICAgICAgICB2LWh0bWw9XCJyZW5kZXIoZ2V0Q29udGV4dChpdGVtLCBpbmRleCkpXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgICAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIGl0ZW0sIHsgaW5kZXggfSlcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICAgIHYtaWY9XCJoYXNDZWxsRWRpdEJ1dHRvbnNcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGluZGV4KVwiXG4gICAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICApXG4gICAgICAvLyBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgaW5zaWRlIHRhYmxlIHdoZW4gbm90IGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICAgICAgdGZvb3QoXG4gICAgICAgIHYtaWY9XCJoYXNMaXN0QnV0dG9ucyAmJiAhc2luZ2xlXCJcbiAgICAgIClcbiAgICAgICAgdHJcbiAgICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgOmNvbHNwYW49XCJudW1Db2x1bW5zXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICAgICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgICAgICAgICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgICAgICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgIDpkYXRhPVwibGlzdERhdGFcIlxuICAgICAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgICApXG4gICAgLy8gUmVuZGVyIGNyZWF0ZSBidXR0b25zIG91dHNpZGUgdGFibGUgd2hlbiBpbiBhIHNpbmdsZSBjb21wb25lbnQgdmlldzpcbiAgICBkaXRvLWVkaXQtYnV0dG9ucy5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgc2luZ2xlXCJcbiAgICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwibGlzdERhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tbGlzdFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIC5kaXRvLW5hdmlnYXRpb25cbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlblxuICAgICAgcGFkZGluZy1ib3R0b206ICRjb250ZW50LXBhZGRpbmctaGFsZlxuICAgICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgICAmOmVtcHR5XG4gICAgICAgIGRpc3BsYXk6IG5vbmVcbiAgICAgIC5kaXRvLXNjb3BlcyxcbiAgICAgIC5kaXRvLXBhZ2luYXRpb25cbiAgICAgICAgZGlzcGxheTogZmxleFxuICAgICAgICBmbGV4OiAwIDEgYXV0b1xuICAgICAgICBtaW4td2lkdGg6IDBcbiAgICAmLmRpdG8tc2luZ2xlXG4gICAgICAvLyBTbyB0aGF0IGxpc3QgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IHRvIHRoZSBib3R0b206XG4gICAgICBkaXNwbGF5OiBncmlkXG4gICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50XG4gICAgICBoZWlnaHQ6IDEwMCVcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcbmltcG9ydCBPcmRlcmVkTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09yZGVyZWRNaXhpbi5qcydcbmltcG9ydCBWdWVEcmFnZ2FibGUgZnJvbSAndnVlZHJhZ2dhYmxlJ1xuaW1wb3J0IHsgZ2V0TmFtZWRTY2hlbWFzLCBnZXRWaWV3RWRpdFBhdGggfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRGaWx0ZXJzUGFuZWwgfSBmcm9tICcuLi91dGlscy9maWx0ZXIuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBwaWNrQnksIGVxdWFscywgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2xpc3QnLCB7XG4gIGNvbXBvbmVudHM6IHsgVnVlRHJhZ2dhYmxlIH0sXG4gIG1peGluczogW1NvdXJjZU1peGluLCBPcmRlcmVkTWl4aW5dLFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIC8vIE5vIG5lZWQgZm9yIHRyYW5zZm9ybWF0aW9uIGhlcmUuIFNlZSBUeXBlVHJlZUxpc3QgZm9yIGRldGFpbHMuXG4gICAgcmV0dXJuIHR5cGVcbiAgfSxcblxuICBnZXRQYW5lbFNjaGVtYShzY2hlbWEsIGRhdGFQYXRoLCBzY2hlbWFDb21wb25lbnQpIHtcbiAgICBjb25zdCB7IGZpbHRlcnMgfSA9IHNjaGVtYVxuICAgIC8vIFNlZSBpZiB0aGlzIGxpc3QgY29tcG9uZW50IHdhbnRzIHRvIGRpc3BsYXkgYSBmaWx0ZXIgcGFuZWwsIGFuZCBpZiBzbyxcbiAgICAvLyBjcmVhdGUgdGhlIHBhbmVsIHNjaGVtYSBmb3IgaXQgdGhyb3VnaCBgZ2V0RmlsdGVyc1BhbmVsKClgLlxuICAgIGlmIChmaWx0ZXJzKSB7XG4gICAgICAvLyBBdCB0aGUgdGltZSBvZiB0aGUgY3JlYXRpb24gb2YgdGhlIHBhbmVsIHNjaGVtYSwgdGhlIHNjaGVtYUNvbXBvbmVudCBpc1xuICAgICAgLy8gbm90IGZpbGxlZCB5ZXQsIHNvIHdlIGNhbid0IGdldCB0aGUgdGFyZ2V0IGNvbXBvbmVudCAoZGF0YVBhdGgpIHJpZ2h0XG4gICAgICAvLyBhd2F5LiBVc2UgYSBwcm94eSBhbmQgYSBnZXR0ZXIgaW5zdGVhZCwgdG8gZ2V0IGFyb3VuZCB0aGlzOlxuICAgICAgY29uc3QgZ2V0TGlzdENvbXBvbmVudCA9ICgpID0+IHNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeURhdGFQYXRoKFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgY29tcG9uZW50ID0+IGNvbXBvbmVudC50eXBlID09PSAnbGlzdCdcbiAgICAgIClcblxuICAgICAgcmV0dXJuIGdldEZpbHRlcnNQYW5lbChcbiAgICAgICAgZ2V0TmFtZWRTY2hlbWFzKGZpbHRlcnMpLFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgeyAvLyBDcmVhdGUgYSBzaW1wbGUgcHJveHkgdG8gZ2V0IC8gc2V0IHRoZSBxdWVyeSwgc2VlIGdldEZpbHRlcnNQYW5lbCgpXG4gICAgICAgICAgZ2V0IHF1ZXJ5KCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldExpc3RDb21wb25lbnQoKT8ucXVlcnlcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNldCBxdWVyeShxdWVyeSkge1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gZ2V0TGlzdENvbXBvbmVudCgpXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgdW5kZWZpbmVkIHZhbHVlcyBmb3IgY29tcGFyaW5nIHdpdGggZXF1YWxzKClcbiAgICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gb2JqID0+IHBpY2tCeShvYmosIHZhbHVlID0+IHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIGlmICghZXF1YWxzKGZpbHRlcihxdWVyeSksIGZpbHRlcihjb21wb25lbnQucXVlcnkpKSkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5xdWVyeSA9IHF1ZXJ5XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmxvYWREYXRhKGZhbHNlKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaGFzTGlzdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gISEoXG4gICAgICAgIHRoaXMuYnV0dG9uU2NoZW1hcyB8fFxuICAgICAgICB0aGlzLmNyZWF0YWJsZVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNFZGl0QnV0dG9ucygpIHtcbiAgICAgIGNvbnN0IHsgbGlzdERhdGEgfSA9IHRoaXNcbiAgICAgIHJldHVybiBsaXN0RGF0YS5sZW5ndGggPiAwICYmIChcbiAgICAgICAgdGhpcy5lZGl0YWJsZSB8fFxuICAgICAgICB0aGlzLmRlbGV0YWJsZSB8fFxuICAgICAgICB0aGlzLmRyYWdnYWJsZVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNDZWxsRWRpdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNJbmxpbmVkICYmIHRoaXMuaGFzRWRpdEJ1dHRvbnNcbiAgICB9LFxuXG4gICAgaGFzRXZlbkNvdW50KCkge1xuICAgICAgcmV0dXJuICEodGhpcy5saXN0RGF0YS5sZW5ndGggJSAyKVxuICAgIH0sXG5cbiAgICBudW1Db2x1bW5zKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHRoaXMuY29sdW1ucyA/IE9iamVjdC5rZXlzKHRoaXMuY29sdW1ucykubGVuZ3RoIDogMSkgK1xuICAgICAgICAodGhpcy5oYXNDZWxsRWRpdEJ1dHRvbnMgPyAxIDogMClcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldERhdGFQYXRoKGluZGV4KSB7XG4gICAgICByZXR1cm4gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgaW5kZXgpXG4gICAgfSxcblxuICAgIGdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KSB7XG4gICAgICBpZiAodGhpcy5lZGl0YWJsZSkge1xuICAgICAgICBjb25zdCBwYXRoID0gZ2V0Vmlld0VkaXRQYXRoKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpIHx8IHRoaXMucGF0aFxuICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCBpdGVtLCBpbmRleClcbiAgICAgICAgcmV0dXJuIGAke3BhdGh9LyR7aWR9YFxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q2VsbENsYXNzKGNvbHVtbikge1xuICAgICAgcmV0dXJuIGBkaXRvLWNlbGwtJHtoeXBoZW5hdGUoY29sdW1uLm5hbWUpfWBcbiAgICB9LFxuXG4gICAgZ2V0Q29udGV4dChpdGVtLCBpbmRleCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgZGF0YVBhdGg6IHRoaXMuZ2V0RGF0YVBhdGgoaW5kZXgpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbkZpbHRlckVycm9ycyhlcnJvcnMpIHtcbiAgICAgIGNvbnN0IGZpbHRlcnNEYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsICckZmlsdGVycycpXG4gICAgICBjb25zdCBwYW5lbCA9IHRoaXMuc2NoZW1hQ29tcG9uZW50LmdldFBhbmVsQnlEYXRhUGF0aChmaWx0ZXJzRGF0YVBhdGgpXG4gICAgICBpZiAocGFuZWwpIHtcbiAgICAgICAgcGFuZWwuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCB0cnVlKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5kaXRvLWxhYmVsLmRpdG8tbGFiZWwtY29tcG9uZW50KDpsYWJlbD1cInZhbHVlXCIgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGRpdG8tbGFiZWwuZGl0by1sYWJlbC1jb21wb25lbnQoOmxhYmVsPVwidmFsdWVcIiA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWxhYmVsLWNvbXBvbmVudFxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICBoZWlnaHQ6IDJlbVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdsYWJlbCcsIHtcbiAgZXhjbHVkZVZhbHVlOiB0cnVlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1tYXJrdXAoXG4gIDppZD1cImRhdGFQYXRoXCJcbilcbiAgZWRpdG9yLW1lbnUtYmFyLmRpdG8tbWFya3VwLXRvb2xiYXIoOmVkaXRvcj1cImVkaXRvclwiKVxuICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXRvb2xiYXIoXG4gICAgICB2LWlmPVwiZ3JvdXBlZEJ1dHRvbnMubGVuZ3RoID4gMFwiXG4gICAgKVxuICAgICAgLmRpdG8tYnV0dG9uLWdyb3VwKFxuICAgICAgICB2LWZvcj1cImJ1dHRvbnMgaW4gZ3JvdXBlZEJ1dHRvbnNcIlxuICAgICAgKVxuICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgdi1mb3I9XCJ7IG5hbWUsIGljb24sIGlzQWN0aXZlLCBvbkNsaWNrIH0gaW4gYnV0dG9uc1wiXG4gICAgICAgICAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCIsXG4gICAgICAgICAgQGNsaWNrPVwib25DbGlja1wiXG4gICAgICAgIClcbiAgICAgICAgICBpY29uKDpuYW1lPVwiaWNvblwiKVxuICBlZGl0b3ItY29udGVudC5kaXRvLW1hcmt1cC1lZGl0b3IoXG4gICAgcmVmPVwiZWRpdG9yXCJcbiAgICA6ZWRpdG9yPVwiZWRpdG9yXCJcbiAgICA6c3R5bGU9XCJzdHlsZXNcIlxuICApXG4gIC5kaXRvLXJlc2l6ZShcbiAgICB2LWlmPVwicmVzaXphYmxlXCJcbiAgICBAbW91c2Vkb3duLnN0b3AucHJldmVudD1cIm9uRHJhZ1Jlc2l6ZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLW1hcmt1cChcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gIClcbiAgICBlZGl0b3ItbWVudS1iYXIuZGl0by1tYXJrdXAtdG9vbGJhcig6ZWRpdG9yPVwiZWRpdG9yXCIpXG4gICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy10b29sYmFyKFxuICAgICAgICB2LWlmPVwiZ3JvdXBlZEJ1dHRvbnMubGVuZ3RoID4gMFwiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWJ1dHRvbi1ncm91cChcbiAgICAgICAgICB2LWZvcj1cImJ1dHRvbnMgaW4gZ3JvdXBlZEJ1dHRvbnNcIlxuICAgICAgICApXG4gICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgdi1mb3I9XCJ7IG5hbWUsIGljb24sIGlzQWN0aXZlLCBvbkNsaWNrIH0gaW4gYnV0dG9uc1wiXG4gICAgICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIixcbiAgICAgICAgICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGljb24oOm5hbWU9XCJpY29uXCIpXG4gICAgZWRpdG9yLWNvbnRlbnQuZGl0by1tYXJrdXAtZWRpdG9yKFxuICAgICAgcmVmPVwiZWRpdG9yXCJcbiAgICAgIDplZGl0b3I9XCJlZGl0b3JcIlxuICAgICAgOnN0eWxlPVwic3R5bGVzXCJcbiAgICApXG4gICAgLmRpdG8tcmVzaXplKFxuICAgICAgdi1pZj1cInJlc2l6YWJsZVwiXG4gICAgICBAbW91c2Vkb3duLnN0b3AucHJldmVudD1cIm9uRHJhZ1Jlc2l6ZVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLW1hcmt1cFxuICAgIEBleHRlbmQgJWlucHV0XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG5cbiAgICAuZGl0by1yZXNpemVcbiAgICAgIEBleHRlbmQgJWljb24tcmVzaXplXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgIHRvcDogdW5zZXRcbiAgICAgIGxlZnQ6IHVuc2V0XG4gICAgICByaWdodDogMFxuICAgICAgYm90dG9tOiAwXG4gICAgICB3aWR0aDogMWVtXG4gICAgICBoZWlnaHQ6IDFlbVxuXG4gICAgLlByb3NlTWlycm9yXG4gICAgICBoZWlnaHQ6IDEwMCVcbiAgICAgIG91dGxpbmU6IG5vbmVcblxuICAgIC5kaXRvLW1hcmt1cC1lZGl0b3JcbiAgICAgIG92ZXJmbG93LXk6IHNjcm9sbFxuICAgICAgLy8gTW92ZSBwYWRkaW5nIFwiaW5zaWRlXCIgZWRpdG9yIHRvIGNvcnJlY3RseSBwb3NpdGlvbiBzY3JvbGxiYXJcbiAgICAgIG1hcmdpbi1yaWdodDogLSRpbnB1dC1wYWRkaW5nLWhvclxuICAgICAgcGFkZGluZy1yaWdodDogJGlucHV0LXBhZGRpbmctaG9yXG5cbiAgICAuZGl0by1idXR0b25zLXRvb2xiYXJcbiAgICAgIG1hcmdpbjogJGlucHV0LXBhZGRpbmctdmVyIDBcblxuICAgIGgxLFxuICAgIGgyLFxuICAgIGgzLFxuICAgIHAsXG4gICAgdWwsXG4gICAgb2wsXG4gICAgcHJlLFxuICAgIGJsb2NrcXVvdGVcbiAgICAgIG1hcmdpbjogMXJlbSAwXG4gICAgICAmOmZpcnN0LWNoaWxkXG4gICAgICAgIG1hcmdpbi10b3A6IDBcbiAgICAgICY6bGFzdC1jaGlsZFxuICAgICAgICBtYXJnaW4tYm90dG9tOiAwXG4gICAgaDEsXG4gICAgaDIsXG4gICAgaDNcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkXG4gICAgaDFcbiAgICAgIGZvbnQtc2l6ZTogMS40cmVtXG4gICAgaDJcbiAgICAgIGZvbnQtc2l6ZTogMS4ycmVtXG4gICAgdWxcbiAgICAgIGxpc3Qtc3R5bGU6IGRpc2NcbiAgICBjb2RlXG4gICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LW1vbm9cbiAgICBwcmVcbiAgICAgIHBhZGRpbmc6IDAuN3JlbSAxcmVtXG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWRhcmtlclxuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgICAgb3ZlcmZsb3cteDogYXV0b1xuICAgICAgY29kZVxuICAgICAgICBkaXNwbGF5OiBibG9ja1xuICAgIHAgY29kZVxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICBwYWRkaW5nOiAwIDAuM3JlbVxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVyXG4gICAgYVxuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmVcbiAgICAgIGN1cnNvcjogZGVmYXVsdFxuICAgICAgY29sb3I6IGJsdWVcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lXG4gICAgdWwsXG4gICAgb2xcbiAgICAgIHBhZGRpbmctbGVmdDogMnJlbVxuICAgIGxpXG4gICAgICAmID4gcCxcbiAgICAgICYgPiBvbCxcbiAgICAgICYgPiB1bFxuICAgICAgICBtYXJnaW46IDBcbiAgICBibG9ja3F1b3RlXG4gICAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkICRjb2xvci1saWdodGVyXG4gICAgICBwYWRkaW5nLWxlZnQ6IDFyZW1cbiAgICAgIGZvbnQtc3R5bGU6IGl0YWxpY1xuICAgICAgcFxuICAgICAgICBtYXJnaW46IDBcblxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IEVkaXRvciwgRWRpdG9yQ29udGVudCwgRWRpdG9yTWVudUJhciwgTWFyayB9IGZyb20gJ3RpcHRhcCdcbmltcG9ydCB7IHRvZ2dsZU1hcmsgfSBmcm9tICd0aXB0YXAtY29tbWFuZHMnXG5pbXBvcnQge1xuICAvLyBNYXJrczpcbiAgQm9sZCwgQ29kZSwgSXRhbGljLCBMaW5rLCBTdHJpa2UsIFVuZGVybGluZSxcbiAgLy8gTm9kZXM6XG4gIEJsb2NrcXVvdGUsIENvZGVCbG9jaywgSGFyZEJyZWFrLCBIZWFkaW5nLCBIb3Jpem9udGFsUnVsZSxcbiAgT3JkZXJlZExpc3QsIEJ1bGxldExpc3QsIExpc3RJdGVtLFxuICAvLyBUT0RPOlxuICAvLyAtIEltYWdlLCBNZW50aW9uLCBDb2RlQmxvY2tIaWdobGlnaHRcbiAgLy8gLSBUYWJsZSwgVGFibGVDZWxsLCBUYWJsZUhlYWRlciwgVGFibGVOb2RlcywgVGFibGVSb3csXG4gIC8vIC0gVG9kb0l0ZW0sIFRvZG9MaXN0XG4gIC8vIFRvb2xzOlxuICBIaXN0b3J5XG59IGZyb20gJ3RpcHRhcC1leHRlbnNpb25zJ1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gJ0BkaXRvanMvdWknXG5pbXBvcnQge1xuICBpc0FycmF5LCBpc09iamVjdCwgdW5kZXJzY29yZSwgaHlwaGVuYXRlLCBkZWJvdW5jZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbWFya3VwJywge1xuICBjb21wb25lbnRzOiB7XG4gICAgRWRpdG9yQ29udGVudCxcbiAgICBFZGl0b3JNZW51QmFyLFxuICAgIEljb25cbiAgfSxcblxuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWRpdG9yOiBudWxsLFxuICAgICAgaGVpZ2h0OiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgMTBcbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCB8fCBgY2FsYygke3RoaXMubGluZXN9ZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpYFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtYXJrQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ21hcmtzJywge1xuICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICBpdGFsaWM6IHRydWUsXG4gICAgICAgIHVuZGVybGluZTogdHJ1ZSxcbiAgICAgICAgc3RyaWtlOiB0cnVlLFxuICAgICAgICBzbWFsbDogdHJ1ZSxcbiAgICAgICAgY29kZTogdHJ1ZSxcbiAgICAgICAgbGluazoge1xuICAgICAgICAgIG9uQ2xpY2s6IGNvbW1hbmQgPT4gdGhpcy5vbkNsaWNrTGluayhjb21tYW5kKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBiYXNpY05vZGVCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygnbm9kZXMnLCB7XG4gICAgICAgIHBhcmFncmFwaDoge1xuICAgICAgICAvLyBEbyBub3Qgc2hvdyB0aGUgcGFyYWdyYXBoIGNvbW1hbmQgYXMgYWN0aXZlIGlmIGFueSBvZiB0aGUgYmxvY2tcbiAgICAgICAgLy8gY29tbWFuZHMgYXJlIGFsc28gYWN0aXZlOlxuICAgICAgICAgIGlnbm9yZUFjdGl2ZTogKCkgPT5cbiAgICAgICAgICAgIHRoaXMub3RoZXJOb2RlQnV0dG9ucy5zb21lKGJ1dHRvbiA9PiBidXR0b24uaXNBY3RpdmUpXG4gICAgICAgIH0sXG4gICAgICAgIGhlYWRpbmc6IHtcbiAgICAgICAgICBhdHRyOiAnbGV2ZWwnLFxuICAgICAgICAgIHZhbHVlczogWzEsIDIsIDMsIDQsIDUsIDZdXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG90aGVyTm9kZUJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdub2RlcycsIHtcbiAgICAgICAgYnVsbGV0TGlzdDogdHJ1ZSxcbiAgICAgICAgb3JkZXJlZExpc3Q6IHRydWUsXG4gICAgICAgIGJsb2NrcXVvdGU6IHRydWUsXG4gICAgICAgIGNvZGVCbG9jazogdHJ1ZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdG9vbEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCd0b29scycsIHtcbiAgICAgICAgdW5kbzogdHJ1ZSxcbiAgICAgICAgcmVkbzogdHJ1ZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZ3JvdXBlZEJ1dHRvbnMoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcmtCdXR0b25zLFxuICAgICAgICBiYXNpY05vZGVCdXR0b25zLFxuICAgICAgICBvdGhlck5vZGVCdXR0b25zLFxuICAgICAgICB0b29sQnV0dG9uc1xuICAgICAgfSA9IHRoaXNcbiAgICAgIHJldHVybiBbXG4gICAgICAgIG1hcmtCdXR0b25zLFxuICAgICAgICBiYXNpY05vZGVCdXR0b25zLFxuICAgICAgICBvdGhlck5vZGVCdXR0b25zLFxuICAgICAgICB0b29sQnV0dG9uc1xuICAgICAgXS5maWx0ZXIoYnV0dG9ucyA9PiBidXR0b25zLmxlbmd0aCA+IDApXG4gICAgfSxcblxuICAgIHBhcnNlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZXNlcnZlV2hpdGVzcGFjZToge1xuICAgICAgICAgICdjb2xsYXBzZSc6IGZhbHNlLFxuICAgICAgICAgICdwcmVzZXJ2ZSc6IHRydWUsXG4gICAgICAgICAgJ3ByZXNlcnZlLWFsbCc6ICdmdWxsJ1xuICAgICAgICB9W3RoaXMud2hpdGVzcGFjZV1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZWRpdG9yT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVkaXRhYmxlOiAhdGhpcy5yZWFkeW9ubHksXG4gICAgICAgIGF1dG9Gb2N1czogdGhpcy5hdXRvZm9jdXMsXG4gICAgICAgIGRpc2FibGVJbnB1dFJ1bGVzOiAhdGhpcy5lbmFibGVSdWxlcy5pbnB1dCxcbiAgICAgICAgZGlzYWJsZVBhc3RlUnVsZXM6ICF0aGlzLmVuYWJsZVJ1bGVzLnBhc3RlLFxuICAgICAgICBwYXJzZU9wdGlvbnM6IHRoaXMucGFyc2VPcHRpb25zXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlc2l6YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Jlc2l6YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgd2hpdGVzcGFjZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3doaXRlc3BhY2UnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnY29sbGFwc2UnXG4gICAgICAvLyBQb3NzaWJsZSB2YWx1ZXMgYXJlOiAnY29sbGFwc2UnLCAncHJlc2VydmUnLCAncHJlc2VydmUtYWxsJ1xuICAgIH0pLFxuXG4gICAgZW5hYmxlUnVsZXM6IGdldFNjaGVtYUFjY2Vzc29yKCdlbmFibGVSdWxlcycsIHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEJvb2xlYW5dLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZW5hYmxlUnVsZXMpIHtcbiAgICAgICAgcmV0dXJuIGlzT2JqZWN0KGVuYWJsZVJ1bGVzKVxuICAgICAgICAgID8gZW5hYmxlUnVsZXNcbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgIGlucHV0OiAhIWVuYWJsZVJ1bGVzLFxuICAgICAgICAgICAgcGFzdGU6ICEhZW5hYmxlUnVsZXNcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHJlYWR5b25seTogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnLFxuICAgIGF1dG9mb2N1czogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnLFxuICAgIGVuYWJsZVJ1bGVzOiAndXBkYXRlRWRpdG9yT3B0aW9ucydcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIGxldCBjaGFuZ2VkID0gZmFsc2VcbiAgICBsZXQgaWdub3JlV2F0Y2ggPSBmYWxzZVxuXG4gICAgY29uc3Qgb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9jdXNlZCAmJiBjaGFuZ2VkKSB7XG4gICAgICAgIGNoYW5nZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvbkZvY3VzID0gKCkgPT4gdGhpcy5vbkZvY3VzKClcblxuICAgIGNvbnN0IG9uQmx1ciA9ICgpID0+IHtcbiAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9XG5cbiAgICBjb25zdCBzZXRWYWx1ZURlYm91bmNlZCA9IGRlYm91bmNlKGdldFZhbHVlID0+IHtcbiAgICAgIGlnbm9yZVdhdGNoID0gdHJ1ZVxuICAgICAgdGhpcy52YWx1ZSA9IGdldFZhbHVlKClcbiAgICAgIGNoYW5nZWQgPSB0cnVlXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfSwgMTAwKVxuXG4gICAgY29uc3Qgb25VcGRhdGUgPSAoeyBnZXRIVE1MIH0pID0+IHtcbiAgICAgIHNldFZhbHVlRGVib3VuY2VkKGdldEhUTUwpXG4gICAgICB0aGlzLm9uSW5wdXQoKVxuICAgIH1cblxuICAgIHRoaXMuJHdhdGNoKCd2YWx1ZScsIHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVXYXRjaCkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVkaXRvci5zZXRDb250ZW50KHZhbHVlLCBmYWxzZSwgdGhpcy5wYXJzZU9wdGlvbnMpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuZWRpdG9yID0gbmV3IEVkaXRvcih7XG4gICAgICAuLi50aGlzLmVkaXRvck9wdGlvbnMsXG4gICAgICBvbkZvY3VzLFxuICAgICAgb25CbHVyLFxuICAgICAgb25VcGRhdGUsXG4gICAgICBleHRlbnNpb25zOiB0aGlzLmNyZWF0ZUV4dGVuc2lvbnMoKSxcbiAgICAgIGNvbnRlbnQ6IHRoaXMudmFsdWUgfHwgJydcbiAgICB9KVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5lZGl0b3IuZGVzdHJveSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRHJhZ1Jlc2l6ZShldmVudCkge1xuICAgICAgY29uc3QgZ2V0UG9pbnQgPSAoeyBjbGllbnRYOiB4LCBjbGllbnRZOiB5IH0pID0+ICh7IHgsIHkgfSlcblxuICAgICAgbGV0IHByZXZZID0gZ2V0UG9pbnQoZXZlbnQpLnlcbiAgICAgIGxldCBoZWlnaHQgPSBwYXJzZUZsb2F0KGdldENvbXB1dGVkU3R5bGUodGhpcy4kcmVmcy5lZGl0b3IuJGVsKS5oZWlnaHQpXG5cbiAgICAgIGNvbnN0IG1vdXNlbW92ZSA9IGV2ZW50ID0+IHtcbiAgICAgICAgY29uc3QgeyB5IH0gPSBnZXRQb2ludChldmVudClcbiAgICAgICAgaGVpZ2h0ICs9IHkgLSBwcmV2WVxuICAgICAgICBwcmV2WSA9IHlcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBgJHtNYXRoLm1heChoZWlnaHQsIDApfXB4YFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgICAgbW91c2Vtb3ZlLFxuXG4gICAgICAgIG1vdXNldXAoZXZlbnQpIHtcbiAgICAgICAgICBtb3VzZW1vdmUoZXZlbnQpXG4gICAgICAgICAgaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdXBkYXRlRWRpdG9yT3B0aW9ucygpIHtcbiAgICAgIHRoaXMuZWRpdG9yLnNldE9wdGlvbnModGhpcy5lZGl0b3JPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNsaWNrTGluayhjb21tYW5kKSB7XG4gICAgICBjb25zdCBhdHRycyA9IGF3YWl0IHRoaXMuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICBocmVmOiB7XG4gICAgICAgICAgICB0eXBlOiAndXJsJyxcbiAgICAgICAgICAgIGxhYmVsOiAnTGluaycsXG4gICAgICAgICAgICBhdXRvZm9jdXM6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICBsYWJlbDogJ1RpdGxlJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uczoge1xuICAgICAgICAgIGNhbmNlbDoge30sXG4gICAgICAgICAgYXBwbHk6IHsgdHlwZTogJ3N1Ym1pdCcgfSxcbiAgICAgICAgICByZW1vdmU6IHtcbiAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICBjbGljayh7IGRpYWxvZ0NvbXBvbmVudCB9KSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29tcG9uZW50LnJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgaHJlZjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIHRpdGxlOiBudWxsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF0YTogdGhpcy5lZGl0b3IuZ2V0TWFya0F0dHJzKCdsaW5rJylcbiAgICAgIH0pXG4gICAgICBpZiAoYXR0cnMpIHtcbiAgICAgICAgbGV0IHsgaHJlZiwgdGl0bGUgfSA9IGF0dHJzXG4gICAgICAgIGlmIChocmVmKSB7XG4gICAgICAgICAgLy8gU2VlIGlmIGBocmVmYCBjYW4gYmUgcGFyc2VkIGFzIGEgVVJMLCBhbmQgaWYgbm90LCBwcmVmaXggaXQgd2l0aFxuICAgICAgICAgIC8vIGEgZGVmYXVsdCBwcm90b2NvbC5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmV3IFVSTChocmVmKVxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgaHJlZiA9IGBodHRwOi8vJHtocmVmfWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29tbWFuZCh7IGhyZWYsIHRpdGxlIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNyZWF0ZUV4dGVuc2lvbnMoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcmtzID0ge30sXG4gICAgICAgIG5vZGVzID0ge30sXG4gICAgICAgIHRvb2xzID0ge31cbiAgICAgIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLy8gc2NoZW1hLm1hcmtzOlxuICAgICAgICBtYXJrcy5ib2xkICYmIG5ldyBCb2xkKCksXG4gICAgICAgIG1hcmtzLml0YWxpYyAmJiBuZXcgSXRhbGljKCksXG4gICAgICAgIG1hcmtzLnVuZGVybGluZSAmJiBuZXcgVW5kZXJsaW5lKCksXG4gICAgICAgIG1hcmtzLnN0cmlrZSAmJiBuZXcgU3RyaWtlKCksXG4gICAgICAgIG1hcmtzLnNtYWxsICYmIG5ldyBTbWFsbCgpLFxuICAgICAgICBtYXJrcy5jb2RlICYmIG5ldyBDb2RlKCksXG4gICAgICAgIG1hcmtzLmxpbmsgJiYgbmV3IExpbmtXaXRoVGl0bGUoKSxcblxuICAgICAgICAvLyBzY2hlbWEubm9kZXM6XG4gICAgICAgIG5vZGVzLmJsb2NrcXVvdGUgJiYgbmV3IEJsb2NrcXVvdGUoKSxcbiAgICAgICAgbm9kZXMuY29kZUJsb2NrICYmIG5ldyBDb2RlQmxvY2soKSxcbiAgICAgICAgbmV3IEhhcmRCcmVhaygpLCAvLyBUT0RPOiBTaG91bGQgdGhpcyBhbHdheXMgb24/XG4gICAgICAgIG5vZGVzLmhlYWRpbmcgJiYgbmV3IEhlYWRpbmcoeyBsZXZlbHM6IG5vZGVzLmhlYWRpbmcgfSksXG4gICAgICAgIG5vZGVzLmhvcml6b250YWxSdWxlICYmIG5ldyBIb3Jpem9udGFsUnVsZSgpLFxuICAgICAgICAobm9kZXMub3JkZXJlZExpc3QgfHwgbm9kZXMuYnVsbGV0TGlzdCkgJiYgbmV3IExpc3RJdGVtKCksXG4gICAgICAgIG5vZGVzLmJ1bGxldExpc3QgJiYgbmV3IEJ1bGxldExpc3QoKSxcbiAgICAgICAgbm9kZXMub3JkZXJlZExpc3QgJiYgbmV3IE9yZGVyZWRMaXN0KCksXG4gICAgICAgIC8vIFRPRE86XG4gICAgICAgIC8vIG5vZGVzLnRvZG9MaXN0ICYmIG5ldyBUb2RvSXRlbSgpLFxuICAgICAgICAvLyBub2Rlcy50b2RvTGlzdCAmJiBuZXcgVG9kb0xpc3QoKSxcblxuICAgICAgICAvLyBzY2hlbWEudG9vbHM6XG4gICAgICAgIHRvb2xzLmhpc3RvcnkgJiYgbmV3IEhpc3RvcnkoKVxuICAgICAgXS5maWx0ZXIoZXh0ZW5zaW9uID0+ICEhZXh0ZW5zaW9uKVxuICAgIH0sXG5cbiAgICBnZXRCdXR0b25zKHNldHRpbmdzTmFtZSwgZGVzY3JpcHRpb25zKSB7XG4gICAgICBjb25zdCBsaXN0ID0gW11cblxuICAgICAgY29uc3QgYWRkQnV0dG9uID0gKHsgbmFtZSwgaWNvbiwgYXR0cnMsIGlnbm9yZUFjdGl2ZSwgb25DbGljayB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGlzQWN0aXZlID0gdGhpcy5lZGl0b3IuaXNBY3RpdmVbbmFtZV1cbiAgICAgICAgY29uc3QgY29tbWFuZCA9IHRoaXMuZWRpdG9yLmNvbW1hbmRzW25hbWVdXG4gICAgICAgIGxpc3QucHVzaCh7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBpY29uLFxuICAgICAgICAgIGlzQWN0aXZlOiAoXG4gICAgICAgICAgICBpc0FjdGl2ZT8uKGF0dHJzKSAmJlxuICAgICAgICAgICAgKGlnbm9yZUFjdGl2ZSA9PSBudWxsIHx8ICFpZ25vcmVBY3RpdmUoKSlcbiAgICAgICAgICApLFxuICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IG9uQ2xpY2tcbiAgICAgICAgICAgID8gb25DbGljayhjb21tYW5kLCBhdHRycylcbiAgICAgICAgICAgIDogY29tbWFuZChhdHRycylcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLnNjaGVtYVtzZXR0aW5nc05hbWVdXG4gICAgICBpZiAoc2V0dGluZ3MpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCBkZXNjcmlwdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMoZGVzY3JpcHRpb25zKSkge1xuICAgICAgICAgIGNvbnN0IHNldHRpbmdOYW1lID0gWyd1bmRvJywgJ3JlZG8nXS5pbmNsdWRlcyhrZXkpID8gJ2hpc3RvcnknIDoga2V5XG4gICAgICAgICAgY29uc3Qgc2V0dGluZyA9IHNldHRpbmdzW3NldHRpbmdOYW1lXVxuICAgICAgICAgIGNvbnN0IG5hbWUgPSB1bmRlcnNjb3JlKGtleSlcbiAgICAgICAgICBjb25zdCBpY29uID0gaHlwaGVuYXRlKGtleSlcbiAgICAgICAgICBpZiAoc2V0dGluZykge1xuICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgIGFkZEJ1dHRvbih7IG5hbWUsIGljb24gfSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZGVzY3JpcHRpb24pKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgYXR0ciwgdmFsdWVzLCBpZ25vcmVBY3RpdmUsIG9uQ2xpY2sgfSA9IGRlc2NyaXB0aW9uXG4gICAgICAgICAgICAgIGlmIChhdHRyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWVzKSAmJiBpc0FycmF5KHNldHRpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IGhlYWRpbmcgbGV2ZWwgYXR0cnM6XG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZy5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBhZGRCdXR0b24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb246IGAke2ljb259LSR7dmFsdWV9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IFthdHRyXTogdmFsdWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUFjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZEJ1dHRvbih7IG5hbWUsIGljb24sIGlnbm9yZUFjdGl2ZSwgb25DbGljayB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdFxuICAgIH0sXG5cbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRlbC5zY3JvbGxJbnRvVmlldz8uKClcbiAgICAgIHRoaXMuZWRpdG9yLmZvY3VzKClcbiAgICB9XG4gIH1cbn0pXG5cbmNsYXNzIFNtYWxsIGV4dGVuZHMgTWFyayB7XG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiAnc21hbGwnXG4gIH1cblxuICBnZXQgc2NoZW1hKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJzZURPTTogW1xuICAgICAgICB7IHRhZzogJ3NtYWxsJyB9XG4gICAgICBdLFxuICAgICAgdG9ET006ICgpID0+IFsnc21hbGwnLCAwXVxuICAgIH1cbiAgfVxuXG4gIGNvbW1hbmRzKHsgdHlwZSB9KSB7XG4gICAgcmV0dXJuICgpID0+IHRvZ2dsZU1hcmsodHlwZSlcbiAgfVxufVxuY2xhc3MgTGlua1dpdGhUaXRsZSBleHRlbmRzIExpbmsge1xuICBnZXQgc2NoZW1hKCkge1xuICAgIHJldHVybiB7XG4gICAgICBhdHRyczoge1xuICAgICAgICBocmVmOiB7XG4gICAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgICB9LFxuICAgICAgICB0aXRsZToge1xuICAgICAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGluY2x1c2l2ZTogZmFsc2UsXG4gICAgICBwYXJzZURPTTogW3tcbiAgICAgICAgdGFnOiAnYScsXG4gICAgICAgIGdldEF0dHJzOiBkb20gPT4gKHtcbiAgICAgICAgICBocmVmOiBkb20uZ2V0QXR0cmlidXRlKCdocmVmJyksXG4gICAgICAgICAgdGl0bGU6IGRvbS5nZXRBdHRyaWJ1dGUoJ3RpdGxlJylcbiAgICAgICAgfSlcbiAgICAgIH1dLFxuICAgICAgdG9ET006IG5vZGUgPT4gWydhJywgbm9kZS5hdHRycywgMF1cbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1tdWx0aXNlbGVjdChcbiAgOmNsYXNzPWB7XG4gICAgJ2RpdG8tbXVsdGlzZWxlY3Qtc2luZ2xlJzogIW11bHRpcGxlLFxuICAgICdkaXRvLW11bHRpc2VsZWN0LW11bHRpcGxlJzogbXVsdGlwbGVcbiAgfWBcbilcbiAgdnVlLW11bHRpc2VsZWN0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIHYtbW9kZWw9XCJzZWxlY3RlZE9wdGlvbnNcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDpzaG93LWxhYmVscz1cImZhbHNlXCJcbiAgICA6cGxhY2Vob2xkZXI9XCJwbGFjZWhvbGRlclwiXG4gICAgdGFnLXBsYWNlaG9sZGVyPVwiUHJlc3MgZW50ZXIgdG8gYWRkIG5ldyB0YWdcIixcbiAgICA6b3B0aW9ucz1cInBvcHVsYXRlICYmIGFjdGl2ZU9wdGlvbnMgfHwgW11cIlxuICAgIDpjdXN0b20tbGFiZWw9XCJnZXRMYWJlbEZvck9wdGlvblwiXG4gICAgOnRyYWNrLWJ5PVwib3B0aW9uVmFsdWVcIlxuICAgIDpncm91cC1sYWJlbD1cImdyb3VwQnlMYWJlbFwiXG4gICAgOmdyb3VwLXZhbHVlcz1cImdyb3VwQnlPcHRpb25zXCJcbiAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgOnRhZ2dhYmxlPVwidGFnZ2FibGVcIlxuICAgIDpzZWFyY2hhYmxlPVwic2VhcmNoYWJsZVwiXG4gICAgOmludGVybmFsLXNlYXJjaD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgIDpwcmVzZXJ2ZS1zZWFyY2g9XCIhIXNlYXJjaEZpbHRlclwiXG4gICAgOmNsZWFyLW9uLXNlbGVjdD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgIDpjbG9zZS1vbi1zZWxlY3Q9XCIhc3RheU9wZW5cIlxuICAgIDpsb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICBAb3Blbj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgQHRhZz1cIm9uQWRkVGFnXCJcbiAgICBAc2VhcmNoLWNoYW5nZT1cIm9uU2VhcmNoQ2hhbmdlXCJcbiAgKVxuICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICBAY2xpY2s9XCJjbGVhclwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1tdWx0aXNlbGVjdChcbiAgICA6Y2xhc3M9YHtcbiAgICAgICdkaXRvLW11bHRpc2VsZWN0LXNpbmdsZSc6ICFtdWx0aXBsZSxcbiAgICAgICdkaXRvLW11bHRpc2VsZWN0LW11bHRpcGxlJzogbXVsdGlwbGVcbiAgICB9YFxuICApXG4gICAgdnVlLW11bHRpc2VsZWN0KFxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICA6c2hvdy1sYWJlbHM9XCJmYWxzZVwiXG4gICAgICA6cGxhY2Vob2xkZXI9XCJwbGFjZWhvbGRlclwiXG4gICAgICB0YWctcGxhY2Vob2xkZXI9XCJQcmVzcyBlbnRlciB0byBhZGQgbmV3IHRhZ1wiLFxuICAgICAgOm9wdGlvbnM9XCJwb3B1bGF0ZSAmJiBhY3RpdmVPcHRpb25zIHx8IFtdXCJcbiAgICAgIDpjdXN0b20tbGFiZWw9XCJnZXRMYWJlbEZvck9wdGlvblwiXG4gICAgICA6dHJhY2stYnk9XCJvcHRpb25WYWx1ZVwiXG4gICAgICA6Z3JvdXAtbGFiZWw9XCJncm91cEJ5TGFiZWxcIlxuICAgICAgOmdyb3VwLXZhbHVlcz1cImdyb3VwQnlPcHRpb25zXCJcbiAgICAgIDptdWx0aXBsZT1cIm11bHRpcGxlXCJcbiAgICAgIDp0YWdnYWJsZT1cInRhZ2dhYmxlXCJcbiAgICAgIDpzZWFyY2hhYmxlPVwic2VhcmNoYWJsZVwiXG4gICAgICA6aW50ZXJuYWwtc2VhcmNoPVwiIXNlYXJjaEZpbHRlclwiXG4gICAgICA6cHJlc2VydmUtc2VhcmNoPVwiISFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOmNsZWFyLW9uLXNlbGVjdD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOmNsb3NlLW9uLXNlbGVjdD1cIiFzdGF5T3BlblwiXG4gICAgICA6bG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgICBAb3Blbj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgICBAdGFnPVwib25BZGRUYWdcIlxuICAgICAgQHNlYXJjaC1jaGFuZ2U9XCJvblNlYXJjaENoYW5nZVwiXG4gICAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIEBjbGljaz1cImNsZWFyXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAndnVlLW11bHRpc2VsZWN0L2Rpc3QvdnVlLW11bHRpc2VsZWN0Lm1pbi5jc3MnXG5cbiAgJHNwaW5uZXItd2lkdGg6ICRzZWxlY3QtYXJyb3ctd2lkdGhcbiAgJHRhZy1pY29uLXdpZHRoOiAxLjhlbVxuICAkdGFnLW1hcmdpbjogMnB4XG4gICR0YWctcGFkZGluZzogM3B4XG4gICR0YWctbGluZS1oZWlnaHQ6IDEuMWVtXG5cbiAgLmRpdG8tbXVsdGlzZWxlY3RcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcblxuICAgIC5tdWx0aXNlbGVjdFxuICAgICAgZm9udC1zaXplOiBpbmhlcml0XG4gICAgICBtaW4taGVpZ2h0OiBpbmhlcml0XG4gICAgICBjb2xvcjogJGNvbG9yLWJsYWNrXG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZ3NcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdFxuICAgICAgb3ZlcmZsb3c6IGF1dG9cbiAgICAgIG1pbi1oZWlnaHQ6IGluaGVyaXRcbiAgICAgIHBhZGRpbmc6IDAgJHNwaW5uZXItd2lkdGggMCAwXG4gICAgICAvLyBTbyB0YWdzIGNhbiBmbG9hdCBvbiBtdWx0aXBsZSBsaW5lcyBhbmQgaGF2ZSBwcm9wZXIgbWFyZ2luczpcbiAgICAgIHBhZGRpbmctYm90dG9tOiAkdGFnLW1hcmdpblxuXG4gICAgLm11bHRpc2VsZWN0X190YWdcbiAgICAgIGZsb2F0OiBsZWZ0XG4gICAgICBtYXJnaW46ICR0YWctbWFyZ2luIDAgMCAkdGFnLW1hcmdpblxuICAgICAgYm9yZGVyLXJhZGl1czogMWVtXG4gICAgICBwYWRkaW5nOiAkdGFnLXBhZGRpbmcgJHRhZy1pY29uLXdpZHRoICR0YWctcGFkZGluZyAwLjhlbVxuICAgICAgbGluZS1oZWlnaHQ6ICR0YWctbGluZS1oZWlnaHRcblxuICAgIC5tdWx0aXNlbGVjdF9fdGFncy13cmFwXG4gICAgICBvdmVyZmxvdzogYXV0b1xuICAgICAgbGluZS1oZWlnaHQ6IDBcblxuICAgIC5tdWx0aXNlbGVjdF9fc2luZ2xlLFxuICAgIC5tdWx0aXNlbGVjdF9fcGxhY2Vob2xkZXIsXG4gICAgLm11bHRpc2VsZWN0X19pbnB1dFxuICAgICAgZm9udC1zaXplOiBpbmhlcml0XG4gICAgICBsaW5lLWhlaWdodDogaW5oZXJpdFxuICAgICAgbWluLWhlaWdodDogMFxuICAgICAgbWFyZ2luOiAwIDAgMXB4IDBcbiAgICAgIC8vIFNhZGx5LCB2dWUtc2VsZWN0IHNldHMgc3R5bGU9XCJwYWRkaW5nOiAuLi47XCIgaW4gYWRkaXRpb24gdG8gdXNpbmdcbiAgICAgIC8vIGNsYXNzZXMsIHNvIGAhaW1wb3J0YW50YCBpcyBuZWNlc3Nhcnk6XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZyAhaW1wb3J0YW50XG4gICAgICAvLyBTbyBpbnB1dCBjYW4gZmxvYXQgbmV4dCB0byB0YWdzIGFuZCBoYXZlIHByb3BlciBtYXJnaW5zIHdpdGhcbiAgICAgIC8vIC5tdWx0aXNlbGVjdF9fdGFnczpcbiAgICAgIHBhZGRpbmctYm90dG9tOiAwICFpbXBvcnRhbnRcbiAgICAgIGJhY2tncm91bmQ6IG5vbmVcblxuICAgIC5tdWx0aXNlbGVjdF9fcGxhY2Vob2xkZXIsXG4gICAgLm11bHRpc2VsZWN0X19pbnB1dDo6cGxhY2Vob2xkZXJcbiAgICAgIGNvbG9yOiAkY29sb3ItcGxhY2Vob2xkZXJcblxuICAgIC5tdWx0aXNlbGVjdC0tYWN0aXZlXG4gICAgICAubXVsdGlzZWxlY3RfX3BsYWNlaG9sZGVyXG4gICAgICAgIC8vIERvbid0IHVzZSBgZGlzcGxheTogbm9uZWAgdG8gaGlkZSBwbGFjZS1ob2xkZXIsIGFzIHRoZSBsYXlvdXQgd291bGRcbiAgICAgICAgLy8gY29sbGFwc2UuXG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW5cblxuICAgIC5tdWx0aXNlbGVjdF9fc2VsZWN0LFxuICAgIC5tdWx0aXNlbGVjdF9fc3Bpbm5lclxuICAgICAgcGFkZGluZzogMFxuICAgICAgLy8gJGJvcmRlci13aWR0aCB0byBwcmV2ZW50IG1hc2tpbmcgYm9yZGVyIHdpdGggLm11bHRpc2VsZWN0X19zcGlubmVyXG4gICAgICB0b3A6ICRib3JkZXItd2lkdGhcbiAgICAgIHJpZ2h0OiAkYm9yZGVyLXdpZHRoXG4gICAgICBib3R0b206ICRib3JkZXItd2lkdGhcbiAgICAgIGhlaWdodDogaW5oZXJpdFxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcblxuICAgIC5tdWx0aXNlbGVjdF9fc2VsZWN0XG4gICAgICB3aWR0aDogMFxuICAgICAgbWFyZ2luLXJpZ2h0OiBjYWxjKCRzZWxlY3QtYXJyb3ctd2lkdGggLyAyKVxuICAgICAgJjo6YmVmb3JlXG4gICAgICAgICthcnJvdygkc2VsZWN0LWFycm93LXNpemUpXG4gICAgICAgIGJvdHRvbTogJHNlbGVjdC1hcnJvdy1ib3R0b21cbiAgICAgICAgcmlnaHQ6IGNhbGMoLTEgKiAkc2VsZWN0LWFycm93LXNpemUgLyAyKVxuXG4gICAgLm11bHRpc2VsZWN0X19zcGlubmVyXG4gICAgICB3aWR0aDogJHNwaW5uZXItd2lkdGhcbiAgICAgICY6OmJlZm9yZSxcbiAgICAgICY6OmFmdGVyXG4gICAgICAgIC8vIENoYW5nZSB0aGUgd2lkdGggb2YgdGhlIGxvYWRpbmcgc3Bpbm5lclxuICAgICAgICBib3JkZXItd2lkdGg6IDNweFxuICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAkY29sb3ItYWN0aXZlXG4gICAgICAgIGluc2V0OiAwXG4gICAgICAgIG1hcmdpbjogYXV0b1xuXG4gICAgLm11bHRpc2VsZWN0X19vcHRpb25cbiAgICAgIG1pbi1oZWlnaHQ6IHVuc2V0XG4gICAgICBoZWlnaHQ6IHVuc2V0XG4gICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodFxuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAgICY6OmFmdGVyXG4gICAgICAgIC8vIEluc3RydWN0aW9uIHRleHQgZm9yIG9wdGlvbnNcbiAgICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAgICAgbGluZS1oZWlnaHQ6ICR0YWctbGluZS1oZWlnaHRcbiAgICAubXVsdGlzZWxlY3RfX29wdGlvbi0taGlnaGxpZ2h0XG4gICAgICAmOjphZnRlclxuICAgICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnRcbiAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uLS1kaXNhYmxlZFxuICAgICAgYmFja2dyb3VuZDogbm9uZVxuICAgICAgY29sb3I6ICRjb2xvci1kaXNhYmxlZFxuXG4gICAgLm11bHRpc2VsZWN0X190YWctaWNvblxuICAgICAgYmFja2dyb3VuZDogbm9uZVxuICAgICAgYm9yZGVyLXJhZGl1czogMWVtXG4gICAgICBmb250LXdlaWdodDogaW5oZXJpdFxuICAgICAgbGluZS1oZWlnaHQ6IDEuNGVtXG4gICAgICB3aWR0aDogJHRhZy1pY29uLXdpZHRoXG4gICAgICAmOjphZnRlclxuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWRcbiAgICAgICAgZm9udC1zaXplOiAxLjNlbVxuICAgICAgJjpob3Zlcjo6YWZ0ZXJcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0XG5cbiAgICAubXVsdGlzZWxlY3RfX29wdGlvbi0tc2VsZWN0ZWRcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHRcbiAgICAgIGNvbG9yOiAkY29sb3ItdGV4dFxuICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbFxuICAgICAgJi5tdWx0aXNlbGVjdF9fb3B0aW9uLS1oaWdobGlnaHRcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkXG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZyxcbiAgICAubXVsdGlzZWxlY3RfX29wdGlvbi0taGlnaGxpZ2h0XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWRcblxuICAgIC5tdWx0aXNlbGVjdF9fdGFncyxcbiAgICAubXVsdGlzZWxlY3RfX2NvbnRlbnQtd3JhcHBlclxuICAgICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuXG4gICAgJi5kaXRvLW11bHRpc2VsZWN0LXNpbmdsZVxuICAgICAgLS1pbnB1dC13aWR0aDogMTAwJVxuICAgICYuZGl0by1tdWx0aXNlbGVjdC1tdWx0aXBsZVxuICAgICAgLS1pbnB1dC13aWR0aDogYXV0b1xuXG4gICAgLm11bHRpc2VsZWN0LS1hY3RpdmVcbiAgICAgIC5tdWx0aXNlbGVjdF9fc2luZ2xlLFxuICAgICAgLm11bHRpc2VsZWN0X19pbnB1dFxuICAgICAgICAvLyBTYWRseSwgdnVlLXNlbGVjdCBzZXRzIGBzdHlsZT1cIndpZHRoXCJgIGluIGFkZGl0aW9uIHRvIHVzaW5nIGNsYXNzZXNcbiAgICAgICAgLy8gc28gYCFpbXBvcnRhbnRgIGlzIG5lY2Vzc2FyeTpcbiAgICAgICAgd2lkdGg6IHZhcigtLWlucHV0LXdpZHRoKSAhaW1wb3J0YW50XG5cbiAgICAgIC5tdWx0aXNlbGVjdF9fdGFnc1xuICAgICAgICBib3JkZXItY29sb3I6ICRjb2xvci1hY3RpdmVcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMFxuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMFxuXG4gICAgICAubXVsdGlzZWxlY3RfX2NvbnRlbnQtd3JhcHBlclxuICAgICAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgJGNvbG9yLWFjdGl2ZVxuICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAkYm9yZGVyLWNvbG9yXG4gICAgICAgIG1hcmdpbjogLTFweCAwIDBcbiAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMFxuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMFxuXG4gICAgICAmLm11bHRpc2VsZWN0LS1hYm92ZVxuICAgICAgICAubXVsdGlzZWxlY3RfX3RhZ3NcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDBcbiAgICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMFxuICAgICAgICAubXVsdGlzZWxlY3RfX2NvbnRlbnQtd3JhcHBlclxuICAgICAgICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItYWN0aXZlXG4gICAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJGJvcmRlci1jb2xvclxuICAgICAgICAgIG1hcmdpbjogMCAwIC0xcHhcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDBcbiAgICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMFxuXG4gICAgJi5kaXRvLWhhcy1lcnJvcnNcbiAgICAgIC5tdWx0aXNlbGVjdF9fdGFnc1xuICAgICAgICBib3JkZXItY29sb3I6ICRjb2xvci1lcnJvclxuXG4gICAgLmRpdG8tYnV0dG9uLWNsZWFyXG4gICAgICB3aWR0aDogJHNwaW5uZXItd2lkdGhcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuaW1wb3J0IFZ1ZU11bHRpc2VsZWN0IGZyb20gJ3Z1ZS1tdWx0aXNlbGVjdCdcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgJ3Z1ZS1tdWx0aXNlbGVjdC9kaXN0L3Z1ZS1tdWx0aXNlbGVjdC5taW4uY3NzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbXVsdGlzZWxlY3QnLCB7XG4gIGNvbXBvbmVudHM6IHsgVnVlTXVsdGlzZWxlY3QgfSxcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzZWFyY2hlZE9wdGlvbnM6IG51bGwsXG4gICAgICBwb3B1bGF0ZTogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzZWxlY3RlZE9wdGlvbnM6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGVcbiAgICAgICAgICA/ICh0aGlzLnNlbGVjdGVkVmFsdWUgfHwgW10pXG4gICAgICAgICAgICAubWFwKFxuICAgICAgICAgICAgICAvLyBJZiBhbiBvcHRpb24gY2Fubm90IGJlIGZvdW5kLCB3ZSBtYXkgYmUgaW4gdGFnZ2FibGUgbW9kZSBhbmRcbiAgICAgICAgICAgICAgLy8gY2FuIGFkZCBpdC5cbiAgICAgICAgICAgICAgdmFsdWUgPT4gdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSkgfHwgdGhpcy5hZGRUYWdPcHRpb24odmFsdWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IG9wdGlvbnMgdGhhdCB3ZSBjb3VsZG4ndCBtYXRjaC5cbiAgICAgICAgICAgIC8vIFRPRE86IFdlIHJlYWxseSBzaG91bGQgZGlzcGxheSBhbiBlcnJvciBpbnN0ZWFkXG4gICAgICAgICAgICAuZmlsdGVyKHZhbHVlID0+IHZhbHVlKVxuICAgICAgICAgIDogdGhpcy5zZWxlY3RlZE9wdGlvblxuICAgICAgfSxcblxuICAgICAgc2V0KG9wdGlvbikge1xuICAgICAgICAvLyBDb252ZXJ0IHZhbHVlIHRvIG9wdGlvbnMgb2JqZWN0LCBzaW5jZSB2dWUtbXVsdGlzZWxlY3QgY2FuJ3QgbWFwIHRoYXRcbiAgICAgICAgLy8gaXRzZWxmIHVuZm9ydHVuYXRlbHkuIGB0cmFjay1ieWAgaXMgdXNlZCBmb3IgOmtleSBtYXBwaW5nIGl0IHNlZW1zLlxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB0aGlzLm11bHRpcGxlXG4gICAgICAgICAgPyAob3B0aW9uIHx8IFtdKS5tYXAodmFsdWUgPT4gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbih2YWx1ZSkpXG4gICAgICAgICAgOiB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWN0aXZlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaGVkT3B0aW9ucyB8fCB0aGlzLm9wdGlvbnNcbiAgICB9LFxuXG4gICAgbXVsdGlwbGU6IGdldFNjaGVtYUFjY2Vzc29yKCdtdWx0aXBsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgc2VhcmNoYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3NlYXJjaGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHRhZ2dhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndGFnZ2FibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHN0YXlPcGVuOiBnZXRTY2hlbWFBY2Nlc3Nvcignc3RheU9wZW4nLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHBsYWNlaG9sZGVyKCkge1xuICAgICAgY29uc3QgeyBwbGFjZWhvbGRlciwgc2VhcmNoYWJsZSwgdGFnZ2FibGUgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gcGxhY2Vob2xkZXIgfHwgKFxuICAgICAgICBzZWFyY2hhYmxlICYmIHRhZ2dhYmxlID8gJ1NlYXJjaCBvciBhZGQgYSB0YWcnXG4gICAgICAgIDogc2VhcmNoYWJsZSA/ICdTZWxlY3Qgb3Igc2VhcmNoIGVudHJ5J1xuICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIGlmICh0aGlzLmF1dG9mb2N1cykge1xuICAgICAgLy8gdnVlLW11bHRpc2VsZWN0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgYXV0b2ZvY3VzIGF0dHJpYnV0ZS4gV2UgbmVlZCB0b1xuICAgICAgLy8gaGFuZGxlIGl0IGhlcmUuXG4gICAgICB0aGlzLmZvY3VzKClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIEBvdmVycmlkZVxuICAgIGdldExpc3RlbmVycygpIHtcbiAgICAgIC8vIG92ZXJyaWRlIGBUeXBlTWl4aW4uZ2V0TGlzdGVuZXJzKClgIHRvIHJlLXJvdXRlICdpbnB1dCcgdG8gYG9uQ2hhbmdlKClgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICBibHVyOiB0aGlzLm9uQmx1cixcbiAgICAgICAgaW5wdXQ6IHRoaXMub25DaGFuZ2VcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWRkVGFnT3B0aW9uKHRhZykge1xuICAgICAgaWYgKHRoaXMudGFnZ2FibGUpIHtcbiAgICAgICAgY29uc3QgeyBvcHRpb25MYWJlbCwgb3B0aW9uVmFsdWUgfSA9IHRoaXNcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gb3B0aW9uTGFiZWwgJiYgb3B0aW9uVmFsdWVcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgIFtvcHRpb25MYWJlbF06IHRhZyxcbiAgICAgICAgICAgIC8vIFRPRE86IERlZmluZSBhIHNpbXBsZSBzY2hlbWEgb3B0aW9uIHRvIGNvbnZlcnQgdGhlIHRhZyB2YWx1ZSB0b1xuICAgICAgICAgICAgLy8gc29tZXRoaW5nIGVsc2UsIGUuZy4gYHRvVGFnOiB0YWcgPT4gdW5kZXJzY29yZSh0YWcpYFxuICAgICAgICAgICAgW29wdGlvblZhbHVlXTogdGFnXG4gICAgICAgICAgfVxuICAgICAgICAgIDogdGFnXG4gICAgICAgIHRoaXMub3B0aW9ucy5wdXNoKG9wdGlvbilcbiAgICAgICAgcmV0dXJuIG9wdGlvblxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRyZWZzLmVsZW1lbnQuYWN0aXZhdGUoKVxuICAgIH0sXG5cbiAgICBvbkFkZFRhZyh0YWcpIHtcbiAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuYWRkVGFnT3B0aW9uKHRhZylcbiAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgdGhpcy52YWx1ZS5wdXNoKHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgb25TZWFyY2hDaGFuZ2UocXVlcnkpIHtcbiAgICAgIGlmICh0aGlzLnNlYXJjaEZpbHRlcikge1xuICAgICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgICAvLyBTZXQgYHNlYXJjaGVkT3B0aW9uc2AgdG8gYW4gZW1wdHkgYXJyYXksIGJlZm9yZSBpdCB3aWxsIGJlXG4gICAgICAgICAgLy8gcG9wdWxhdGVkIGFzeW5jaHJvbm91c2x5IHdpdGggdGhlIGFjdHVhbCByZXN1bHRzLlxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gW11cbiAgICAgICAgICB0aGlzLnNlYXJjaGVkT3B0aW9ucyA9IGF3YWl0IHRoaXMucmVzb2x2ZURhdGEoXG4gICAgICAgICAgICAoKSA9PiB0aGlzLnNlYXJjaEZpbHRlcihuZXcgRGl0b0NvbnRleHQodGhpcywgeyBxdWVyeSB9KSlcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQ2xlYXIgYHNlYXJjaGVkT3B0aW9uc2Agd2hlbiB0aGUgcXVlcnkgaXMgY2xlYXJlZC5cbiAgICAgICAgICB0aGlzLnNlYXJjaGVkT3B0aW9ucyA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wdXRlZDoge1xuICAgIGlucHV0VmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgIT09IG51bGwgPyB0aGlzLnZhbHVlIDogJydcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWUgIT09ICcnXG4gICAgICAgICAgPyB0aGlzLmlzSW50ZWdlciA/IHBhcnNlSW50KHZhbHVlLCAxMCkgOiBwYXJzZUZsb2F0KHZhbHVlKVxuICAgICAgICAgIDogbnVsbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBpc0ludGVnZXIoKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgc3RlcFZhbHVlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RlcCA9PSBudWxsICYmICF0aGlzLmlzSW50ZWdlciA/ICdhbnknIDogdGhpcy5zdGVwXG4gICAgfSxcblxuICAgIGRlY2ltYWxzOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVjaW1hbHMnLCB7XG4gICAgICB0eXBlOiBOdW1iZXJcbiAgICB9KSxcblxuICAgIHN0ZXA6IGdldFNjaGVtYUFjY2Vzc29yKCdzdGVwJywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KHN0ZXApIHtcbiAgICAgICAgLy8gRm9yIGludGVnZXJzLCByb3VuZCB0aGUgc3RlcHMgdG8gdGhlIG5leHQgYmlnZ2VyIGludGVnZXIgdmFsdWU6XG4gICAgICAgIHJldHVybiB0aGlzLmlzSW50ZWdlciAmJiBzdGVwICE9IG51bGwgPyBNYXRoLmNlaWwoc3RlcCkgOiBzdGVwXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtaW46IGdldFNjaGVtYUFjY2Vzc29yKCdtaW4nLCB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBnZXQobWluKSB7XG4gICAgICAgIG1pbiA9IG1pbiA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdyYW5nZScsIHsgdHlwZTogQXJyYXkgfSk/LlswXVxuICAgICAgICAgIDogbWluXG4gICAgICAgIHJldHVybiB0aGlzLmlzSW50ZWdlciAmJiBtaW4gIT0gbnVsbCA/IE1hdGguZmxvb3IobWluKSA6IG1pblxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWF4OiBnZXRTY2hlbWFBY2Nlc3NvcignbWF4Jywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KG1heCkge1xuICAgICAgICBtYXggPSBtYXggPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgncmFuZ2UnLCB7IHR5cGU6IEFycmF5IH0pPy5bMV1cbiAgICAgICAgICA6IG1heFxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgbWF4ICE9IG51bGwgPyBNYXRoLmNlaWwobWF4KSA6IG1heFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgcmFuZ2U6IGdldFNjaGVtYUFjY2Vzc29yKCdyYW5nZScsIHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZ2V0KCkge1xuICAgICAgICAvLyBgdGhpcy5taW5gLCBgdGhpcy5tYXhgIGFscmVhZHkgc3VwcG9ydCBgc2NoZW1hLnJhbmdlYCxcbiAgICAgICAgLy8gc28gcmVkaXJlY3QgdGhlcmUuXG4gICAgICAgIGNvbnN0IHsgbWluLCBtYXggfSA9IHRoaXNcbiAgICAgICAgcmV0dXJuIG1pbiAhPSBudWxsICYmIG1heCAhPSBudWxsID8gW21pbiwgbWF4XSA6IHVuZGVmaW5lZFxuICAgICAgfSxcblxuICAgICAgc2V0KHJhbmdlKSB7XG4gICAgICAgIC8vIFByb3ZpZGUgYSBzZXR0ZXIgdGhhdCBkZWxlZ2F0ZXMgdG8gYFt0aGlzLm1pbiwgdGhpcy5tYXhdYCxcbiAgICAgICAgLy8gc2luY2UgdGhvc2UgYWxyZWFkeSBoYW5kbGUgYHNjaGVtYS5yYW5nZWAuXG4gICAgICAgIGlmIChpc0FycmF5KHJhbmdlKSkge1xuICAgICAgICAgIFt0aGlzLm1pbiwgdGhpcy5tYXhdID0gcmFuZ2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFZhbGlkYXRpb25zKCkge1xuICAgICAgY29uc3QgdmFsaWRhdGlvbnMgPSB7fVxuICAgICAgY29uc3QgeyByYW5nZSwgbWluLCBtYXgsIGRlY2ltYWxzLCBzdGVwIH0gPSB0aGlzXG4gICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMucmFuZ2UgPSByYW5nZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG1pbiAhPSBudWxsKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMubWluID0gbWluXG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heCAhPSBudWxsKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMubWF4ID0gbWF4XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChkZWNpbWFscyAhPSBudWxsKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLmRlY2ltYWxzID0gZGVjaW1hbHNcbiAgICAgIH0gZWxzZSBpZiAoc3RlcCkge1xuICAgICAgICBjb25zdCBkZWNpbWFscyA9IChgJHtzdGVwfWAuc3BsaXQoJy4nKVsxXSB8fCAnJykubGVuZ3RoXG4gICAgICAgIGlmIChkZWNpbWFscyA+IDApIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5kZWNpbWFscyA9IGRlY2ltYWxzXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMuaW50ZWdlciA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNJbnRlZ2VyKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLmludGVnZXIgPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsaWRhdGlvbnNcbiAgICB9XG4gIH1cbn1cbiIsIlxuaW5wdXQtZmllbGQuZGl0by1udW1iZXIoXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHR5cGU9XCJudW1iZXJcIlxuICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgOm1pbj1cIm1pblwiXG4gIDptYXg9XCJtYXhcIlxuICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBpbnB1dC1maWVsZC5kaXRvLW51bWJlcihcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdHlwZT1cIm51bWJlclwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDptaW49XCJtaW5cIlxuICAgIDptYXg9XCJtYXhcIlxuICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC8vIE9ubHkgc2hvdyBzcGluIGJ1dHRvbnMgaWYgdGhlIG51bWJlciBjb21wb25lbnQgZGVmaW5lcyBhIHN0ZXAgc2l6ZS5cbiAgaW5wdXRbdHlwZT1cIm51bWJlclwiXTpub3QoW3N0ZXBdKVxuICAgICY6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG4gICAgJjo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvblxuICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lXG4gICAgICBtYXJnaW46IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpJ1xuXG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFtcbiAgJ251bWJlcicsICdpbnRlZ2VyJ1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCB9LFxuICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpc0ludGVnZXIoKSB7XG4gICAgICByZXR1cm4gdGhpcy50eXBlID09PSAnaW50ZWdlcidcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tb2JqZWN0KFxuICB2LWlmPVwiaXNSZWFkeVwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwic2NoZW1hLmNsYXNzXCJcbiAgOnN0eWxlPVwic2NoZW1hLnN0eWxlXCJcbilcbiAgLmRpdG8tb2JqZWN0LWNvbnRlbnQoXG4gICAgdi1pZj1cIm9iamVjdERhdGFcIlxuICApXG4gICAgLy8gU3VwcG9ydCB0aGUgc2FtZSByZW5kZXJpbmcgb3B0aW9ucyBhcyBUeXBlTGlzdDpcbiAgICBkaXRvLXNjaGVtYS1pbmxpbmVkKFxuICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBvYmplY3REYXRhLCBjb250ZXh0KVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICApXG4gICAgY29tcG9uZW50KFxuICAgICAgdi1lbHNlLWlmPVwiY29tcG9uZW50XCJcbiAgICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICApXG4gICAgc3BhbihcbiAgICAgIHYtZWxzZS1pZj1cInJlbmRlclwiXG4gICAgICB2LWh0bWw9XCJyZW5kZXIoZ2V0Q29udGV4dCgpKVwiXG4gICAgKVxuICAgIHNwYW4oXG4gICAgICB2LWVsc2VcbiAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIG9iamVjdERhdGEpXCJcbiAgICApXG4gIGRpdG8tZWRpdC1idXR0b25zKFxuICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgIDpkZWxldGFibGU9XCJvYmplY3REYXRhICYmIGRlbGV0YWJsZVwiXG4gICAgOmVkaXRhYmxlPVwib2JqZWN0RGF0YSAmJiBlZGl0YWJsZVwiXG4gICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICA6ZWRpdFBhdGg9XCJwYXRoXCJcbiAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgIDpwYXRoPVwicGF0aFwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0ob2JqZWN0RGF0YSlcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1vYmplY3QoXG4gICAgdi1pZj1cImlzUmVhZHlcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICAgIDpzdHlsZT1cInNjaGVtYS5zdHlsZVwiXG4gIClcbiAgICAuZGl0by1vYmplY3QtY29udGVudChcbiAgICAgIHYtaWY9XCJvYmplY3REYXRhXCJcbiAgICApXG4gICAgICAvLyBTdXBwb3J0IHRoZSBzYW1lIHJlbmRlcmluZyBvcHRpb25zIGFzIFR5cGVMaXN0OlxuICAgICAgZGl0by1zY2hlbWEtaW5saW5lZChcbiAgICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIG9iamVjdERhdGEsIGNvbnRleHQpXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICApXG4gICAgICBjb21wb25lbnQoXG4gICAgICAgIHYtZWxzZS1pZj1cImNvbXBvbmVudFwiXG4gICAgICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgIClcbiAgICAgIHNwYW4oXG4gICAgICAgIHYtZWxzZS1pZj1cInJlbmRlclwiXG4gICAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KCkpXCJcbiAgICAgIClcbiAgICAgIHNwYW4oXG4gICAgICAgIHYtZWxzZVxuICAgICAgICB2LWh0bWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBvYmplY3REYXRhKVwiXG4gICAgICApXG4gICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICAgIDpkZWxldGFibGU9XCJvYmplY3REYXRhICYmIGRlbGV0YWJsZVwiXG4gICAgICA6ZWRpdGFibGU9XCJvYmplY3REYXRhICYmIGVkaXRhYmxlXCJcbiAgICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgICA6ZWRpdFBhdGg9XCJwYXRoXCJcbiAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICA6cGF0aD1cInBhdGhcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKG9iamVjdERhdGEpXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tb2JqZWN0XG4gICAgZGlzcGxheTogZmxleFxuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgbWFyZ2luOiAwXG4gICAgcGFkZGluZzogJGZvcm0tc3BhY2luZ1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAuZGl0by1vYmplY3QtY29udGVudFxuICAgICAgZmxleDogMCAxIDEwMCVcbiAgICA+IC5kaXRvLWJ1dHRvbnNcbiAgICAgIGZsZXg6IDEgMCAwJVxuICAgICAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ29iamVjdCcsIHtcbiAgbWl4aW5zOiBbU291cmNlTWl4aW5dLFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIC8vIE5vIG5lZWQgZm9yIHRyYW5zZm9ybWF0aW9uIGhlcmUuIFNlZSBUeXBlVHJlZUxpc3QgZm9yIGRldGFpbHMuXG4gICAgcmV0dXJuIHR5cGVcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBkYXRhOiB0aGlzLm9iamVjdERhdGEgfSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcigncGFuZWwnLCB7XG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBleGNsdWRlVmFsdWU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlLFxuICBvbWl0UGFkZGluZzogdHJ1ZSxcblxuICBnZXRQYW5lbFNjaGVtYShzY2hlbWEpIHtcbiAgICAvLyBGb3IgYSBUeXBlUGFuZWwsIHRoZSBjb21wb25lbnQgc2NoZW1hIGlzIGFsc28gdGhlIHBhbmVsIHNjaGVtYSwgYnV0XG4gICAgLy8gcmVtb3ZlIHRoZSBhZGRlZCBuYW1lLCBzbyBpdCBkb2Vzbid0IGdldCBhcHBlbmRlZCB0d2ljZSB0byBkYXRhLXBhdGguXG4gICAgY29uc3QgeyBuYW1lLCAuLi5wYW5lbCB9ID0gc2NoZW1hXG4gICAgcmV0dXJuIHBhbmVsXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxucHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOnZhbHVlPVwicHJvZ3Jlc3NWYWx1ZVwiXG4gIDptYXg9XCJwcm9ncmVzc01heFwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHByb2dyZXNzLmRpdG8tcHJvZ3Jlc3MoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDp2YWx1ZT1cInByb2dyZXNzVmFsdWVcIlxuICAgIDptYXg9XCJwcm9ncmVzc01heFwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3Byb2dyZXNzJywge1xuICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gIGNvbXB1dGVkOiB7XG4gICAgcHJvZ3Jlc3NWYWx1ZSgpIHtcbiAgICAgIGxldCB7IHZhbHVlLCByYW5nZSwgc3RlcCB9ID0gdGhpc1xuICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgIHZhbHVlIC09IHJhbmdlWzBdXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0ZXApIHtcbiAgICAgICAgICB2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUgLyBzdGVwKSAqIHN0ZXBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSAnJ1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcblxuICAgIHByb2dyZXNzTWF4KCkge1xuICAgICAgY29uc3QgeyByYW5nZSB9ID0gdGhpc1xuICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgIHJldHVybiByYW5nZVsxXSAtIHJhbmdlWzBdXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnVsLmRpdG8tcmFkaW8tYnV0dG9ucyhcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4pXG4gIGxpKHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIilcbiAgICBsYWJlbFxuICAgICAgaW5wdXQuZGl0by1yYWRpby1idXR0b24oXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICApXG4gICAgICB8IHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHVsLmRpdG8tcmFkaW8tYnV0dG9ucyhcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOmNsYXNzPVwiYGRpdG8tbGF5b3V0LSR7c2NoZW1hLmxheW91dCB8fCAndmVydGljYWwnfWBcIlxuICApXG4gICAgbGkodi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiKVxuICAgICAgbGFiZWxcbiAgICAgICAgaW5wdXQuZGl0by1yYWRpby1idXR0b24oXG4gICAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICAgIClcbiAgICAgICAgfCB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tcmFkaW8tYnV0dG9uc1xuICAgIGxhYmVsXG4gICAgICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzXG4gICAgLmRpdG8tcmFkaW8tYnV0dG9uXG4gICAgICBtYXJnaW4tcmlnaHQ6ICRmb3JtLXNwYWNpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcigncmFkaW8nLCB7XG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IHRydWVcbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tc2VjdGlvbihcbiAgOmNsYXNzPVwieyAnZGl0by1zZWN0aW9uLWxhYmVsbGVkJyA6ICEhc2NoZW1hLmxhYmVsIH1cIlxuKVxuICBkaXRvLXBhbmUuZGl0by1zZWN0aW9uLXBhbmUoXG4gICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cIml0ZW1cIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tc2VjdGlvbihcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNlY3Rpb24tbGFiZWxsZWQnIDogISFzY2hlbWEubGFiZWwgfVwiXG4gIClcbiAgICBkaXRvLXBhbmUuZGl0by1zZWN0aW9uLXBhbmUoXG4gICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tc2VjdGlvblxuICAgICYuZGl0by1zZWN0aW9uLWxhYmVsbGVkXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nXG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldEl0ZW1Gb3JtU2NoZW1hLCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NlY3Rpb24nLCB7XG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6IHNjaGVtYSA9PiAhc2NoZW1hLm5lc3RlZCAmJiAhKCdkZWZhdWx0JyBpbiBzY2hlbWEpLFxuICBkZWZhdWx0TmVzdGVkOiBmYWxzZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2UsXG4gIG9taXRGbGV4R3JvdzogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIGl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5uZXN0ZWQgPyB0aGlzLnZhbHVlIDogdGhpcy5kYXRhXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRJdGVtRm9ybVNjaGVtYVxuICB9LFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwpIHtcbiAgICAvLyBQcm9jZXNzIHNlY3Rpb24gY29tcG9uZW50cyBzbyB0aGVpciBmb3JtcyBnZXQgcmVzb2x2ZWQgdG9vLlxuICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgc2NoZW1hLCByb3V0ZXMsIGxldmVsKVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi8vLSBOZXN0aW5nIGlzIG5lZWRlZCB0byBtYWtlIGFuIGFycm93IGFwcGVhciBvdmVyIHRoZSBzZWxlY3QgaXRlbTpcbi5kaXRvLXNlbGVjdFxuICBzZWxlY3QoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHYtbW9kZWw9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICBAbW91c2Vkb3duPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgICBAZm9jdXM9XCJwb3B1bGF0ZSA9IHRydWVcIlxuICApXG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWlmPVwicG9wdWxhdGVcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCJcbiAgICAgIClcbiAgICAgICAgb3B0Z3JvdXAoXG4gICAgICAgICAgdi1pZj1cImdyb3VwQnlcIlxuICAgICAgICAgIDpsYWJlbD1cIm9wdGlvbltncm91cEJ5TGFiZWxdXCJcbiAgICAgICAgKVxuICAgICAgICAgIG9wdGlvbihcbiAgICAgICAgICAgIHYtZm9yPVwib3B0IGluIG9wdGlvbltncm91cEJ5T3B0aW9uc11cIlxuICAgICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0KVwiXG4gICAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHQpIH19XG4gICAgICAgIG9wdGlvbihcbiAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWVsc2UtaWY9XCJzZWxlY3RlZE9wdGlvblwiXG4gICAgKVxuICAgICAgb3B0aW9uKFxuICAgICAgICA6dmFsdWU9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24oc2VsZWN0ZWRPcHRpb24pIH19XG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgIEBjbGljaz1cImNsZWFyXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC8vLSBOZXN0aW5nIGlzIG5lZWRlZCB0byBtYWtlIGFuIGFycm93IGFwcGVhciBvdmVyIHRoZSBzZWxlY3QgaXRlbTpcbiAgLmRpdG8tc2VsZWN0XG4gICAgc2VsZWN0KFxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgQG1vdXNlZG93bj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgICBAZm9jdXM9XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWlmPVwicG9wdWxhdGVcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCJcbiAgICAgICAgKVxuICAgICAgICAgIG9wdGdyb3VwKFxuICAgICAgICAgICAgdi1pZj1cImdyb3VwQnlcIlxuICAgICAgICAgICAgOmxhYmVsPVwib3B0aW9uW2dyb3VwQnlMYWJlbF1cIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIG9wdGlvbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJvcHQgaW4gb3B0aW9uW2dyb3VwQnlPcHRpb25zXVwiXG4gICAgICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdClcIlxuICAgICAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHQpIH19XG4gICAgICAgICAgb3B0aW9uKFxuICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWVsc2UtaWY9XCJzZWxlY3RlZE9wdGlvblwiXG4gICAgICApXG4gICAgICAgIG9wdGlvbihcbiAgICAgICAgICA6dmFsdWU9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihzZWxlY3RlZE9wdGlvbikgfX1cbiAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgQGNsaWNrPVwiY2xlYXJcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAvLyBUT0RPOiBNb3ZlIHRvIGRpdG8tdWlcbiAgJHNlbGVjdC1hcnJvdy1yaWdodDogY2FsYygoJHNlbGVjdC1hcnJvdy13aWR0aCAtICRzZWxlY3QtYXJyb3ctc2l6ZSkgLyAyKVxuXG4gIC5kaXRvLXNlbGVjdFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuXG4gICAgc2VsZWN0XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAkc2VsZWN0LWFycm93LXdpZHRoXG5cbiAgICAvLyBIYW5kbGUgLmRpdG8td2lkdGgtZmlsbCBzZXBhcmF0ZWx5IGR1ZSB0byByZXF1aXJlZCBuZXN0aW5nIG9mIHNlbGVjdDpcbiAgICAmLmRpdG8td2lkdGgtZmlsbFxuICAgICAgc2VsZWN0XG4gICAgICAgIHdpZHRoOiAxMDAlXG5cbiAgICAmOjphZnRlclxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICArYXJyb3coJHNlbGVjdC1hcnJvdy1zaXplKVxuICAgICAgYm90dG9tOiAkc2VsZWN0LWFycm93LWJvdHRvbVxuICAgICAgcmlnaHQ6IGNhbGMoI3skc2VsZWN0LWFycm93LXJpZ2h0fSArICN7JGJvcmRlci13aWR0aH0pXG5cbiAgICAmLmRpdG8tZGlzYWJsZWQ6OmFmdGVyXG4gICAgICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3Jcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2VsZWN0Jywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIERpc2FibGUgbGF6eS1wb3B1bGF0aW9uIGZvciBub3cuXG4gICAgICAvLyBUT0RPOiBTZXQgdG8gYGZhbHNlYCBPbmNlIGxpbmV0byBlMmUgdGVzdHMgYWRkcmVzcyB0aGVpciBpc3N1ZXMuXG4gICAgICBwb3B1bGF0ZTogdHJ1ZVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1zbGlkZXJcbiAgaW5wdXQuZGl0by1yYW5nZShcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdHlwZT1cInJhbmdlXCJcbiAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOm1pbj1cIm1pblwiXG4gICAgOm1heD1cIm1heFwiXG4gICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICApXG4gIGlucHV0LWZpZWxkLmRpdG8tbnVtYmVyKFxuICAgIHYtaWY9XCJpbnB1dFwiXG4gICAgdHlwZT1cIm51bWJlclwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDptaW49XCJtaW5cIlxuICAgIDptYXg9XCJtYXhcIlxuICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tc2xpZGVyXG4gICAgaW5wdXQuZGl0by1yYW5nZShcbiAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgICAgdHlwZT1cInJhbmdlXCJcbiAgICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICA6bWluPVwibWluXCJcbiAgICAgIDptYXg9XCJtYXhcIlxuICAgICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICAgIClcbiAgICBpbnB1dC1maWVsZC5kaXRvLW51bWJlcihcbiAgICAgIHYtaWY9XCJpbnB1dFwiXG4gICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICA6bWluPVwibWluXCJcbiAgICAgIDptYXg9XCJtYXhcIlxuICAgICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1zbGlkZXJcbiAgICBAZXh0ZW5kICVpbnB1dFxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICAuZGl0by1yYW5nZVxuICAgICAgZmxleDogYXV0b1xuICAgICAgaGVpZ2h0OiBjYWxjKDFlbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSlcbiAgICAuZGl0by1udW1iZXJcbiAgICAgIGJvcmRlcjogMFxuICAgICAgcGFkZGluZzogMFxuICAgICAgdGV4dC1hbGlnbjogcmlnaHRcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXNcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBJbnB1dEZpZWxkIH0gZnJvbSAnQGRpdG9qcy91aSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NsaWRlcicsIHtcbiAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gIG1peGluczogW051bWJlck1peGluXSxcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpbnB1dDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2lucHV0Jywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnN3aXRjaC1idXR0b24uZGl0by1zd2l0Y2goXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpzeW5jPVwidHJ1ZVwiXG4gIDpsYWJlbHM9XCJsYWJlbHNcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBzd2l0Y2gtYnV0dG9uLmRpdG8tc3dpdGNoKFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6c3luYz1cInRydWVcIlxuICAgIDpsYWJlbHM9XCJsYWJlbHNcIlxuICAgIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1zd2l0Y2hcbiAgICAuZGl0by1zd2l0Y2gtbGFiZWxcbiAgICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBTd2l0Y2hCdXR0b24gfSBmcm9tICdAZGl0b2pzL3VpJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc3dpdGNoJywge1xuICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICBkZWZhdWx0V2lkdGg6ICdhdXRvJyxcblxuICBjb21wb25lbnRzOiB7XG4gICAgU3dpdGNoQnV0dG9uXG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsYWJlbHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGFiZWxzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbmlucHV0LWZpZWxkLmRpdG8tdGV4dChcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOnR5cGU9XCJpbnB1dFR5cGVcIlxuICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGlucHV0LWZpZWxkLmRpdG8tdGV4dChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOnR5cGU9XCJpbnB1dFR5cGVcIlxuICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBJbnB1dEZpZWxkIH0gZnJvbSAnQGRpdG9qcy91aSdcblxuY29uc3QgbWFza2VkUGFzc3dvcmQgPSAnKioqKioqKioqKioqKioqKidcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcihbXG4gICd0ZXh0JywgJ2VtYWlsJywgJ3VybCcsICdob3N0bmFtZScsICdkb21haW4nLCAndGVsJywgJ3Bhc3N3b3JkJywgJ2NyZWRpdGNhcmQnXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogc2NoZW1hID0+IHNjaGVtYS50eXBlID09PSAncGFzc3dvcmQnLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaW5wdXRUeXBlKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3JlZGl0Y2FyZDogJ3RleHQnLFxuICAgICAgICBob3N0bmFtZTogJ3RleHQnLFxuICAgICAgICBkb21haW46ICd0ZXh0J1xuICAgICAgfVt0aGlzLnR5cGVdIHx8IHRoaXMudHlwZVxuICAgIH0sXG5cbiAgICBpbnB1dFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgdGhpcy50eXBlID09PSAncGFzc3dvcmQnICYmXG4gICAgICAgICAgdGhpcy52YWx1ZSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgIXRoaXMuZm9jdXNlZFxuICAgICAgICApXG4gICAgICAgICAgPyBtYXNrZWRQYXNzd29yZFxuICAgICAgICAgIDogdGhpcy52YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICBjb25zdCBydWxlID0ge1xuICAgICAgICBlbWFpbDogJ2VtYWlsJyxcbiAgICAgICAgdXJsOiAndXJsJyxcbiAgICAgICAgaG9zdG5hbWU6ICdob3N0bmFtZScsXG4gICAgICAgIGRvbWFpbjogJ2RvbWFpbicsXG4gICAgICAgIHBhc3N3b3JkOiAncGFzc3dvcmQnLFxuICAgICAgICBjcmVkaXRjYXJkOiAnY3JlZGl0Y2FyZCdcbiAgICAgIH1bdGhpcy50eXBlXVxuICAgICAgcmV0dXJuIHJ1bGUgPyB7IFtydWxlXTogdHJ1ZSB9IDoge31cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudGV4dGFyZWEuZGl0by10ZXh0YXJlYS5kaXRvLWlucHV0KFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIDpyb3dzPVwibGluZXNcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLXJlc2l6YWJsZSc6IHJlc2l6YWJsZSB9XCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRleHRhcmVhLmRpdG8tdGV4dGFyZWEuZGl0by1pbnB1dChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdi1tb2RlbD1cInZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6cm93cz1cImxpbmVzXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLXJlc2l6YWJsZSc6IHJlc2l6YWJsZSB9XCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXRleHRhcmVhXG4gICAgZGlzcGxheTogYmxvY2tcbiAgICByZXNpemU6IG5vbmVcbiAgICBtaW4taGVpZ2h0OiBjYWxjKDFlbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSArICN7IDIgKiAkaW5wdXQtcGFkZGluZy12ZXIgfSlcbiAgICAmLmRpdG8tcmVzaXphYmxlXG4gICAgICByZXNpemU6IHZlcnRpY2FsXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCd0ZXh0YXJlYScsIHtcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIHRleHRGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIGxpbmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxpbmVzIHx8IDRcbiAgICB9LFxuXG4gICAgcmVzaXphYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVzaXphYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by10cmVlLWxpc3RcbiAgZGl0by1zY29wZXMoXG4gICAgdi1pZj1cInNjb3Blc1wiXG4gICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgIDpzY29wZXM9XCJzY29wZXNcIlxuICApXG4gIC5kaXRvLXRyZWUtcGFuZWxcbiAgICBkaXRvLXRyZWUtaXRlbShcbiAgICAgIDpzY2hlbWE9XCJ0cmVlU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cInRyZWVEYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cInRyZWVEYXRhXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgOm9wZW49XCJ0cnVlXCJcbiAgICApXG4gICAgLmRpdG8tdHJlZS1mb3JtLWNvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJoYXNFZGl0YWJsZUZvcm1zXCJcbiAgICApXG4gICAgICAvLyBJbmNsdWRlIGEgcm91dGVyLXZpZXcgZm9yIHRoZSBvcHRpb25hbCBEaXRvRm9ybUlubGluZWRcbiAgICAgIHJvdXRlci12aWV3XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by10cmVlLWxpc3RcbiAgICBkaXRvLXNjb3BlcyhcbiAgICAgIHYtaWY9XCJzY29wZXNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gICAgKVxuICAgIC5kaXRvLXRyZWUtcGFuZWxcbiAgICAgIGRpdG8tdHJlZS1pdGVtKFxuICAgICAgICA6c2NoZW1hPVwidHJlZVNjaGVtYVwiXG4gICAgICAgIDpkYXRhUGF0aD1cInRyZWVEYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwidHJlZURhdGFcIlxuICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgOm9wZW49XCJ0cnVlXCJcbiAgICAgIClcbiAgICAgIC5kaXRvLXRyZWUtZm9ybS1jb250YWluZXIoXG4gICAgICAgIHYtaWY9XCJoYXNFZGl0YWJsZUZvcm1zXCJcbiAgICAgIClcbiAgICAgICAgLy8gSW5jbHVkZSBhIHJvdXRlci12aWV3IGZvciB0aGUgb3B0aW9uYWwgRGl0b0Zvcm1JbmxpbmVkXG4gICAgICAgIHJvdXRlci12aWV3XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tdHJlZS1saXN0XG4gICAgQGV4dGVuZCAlZmllbGRcbiAgICAuZGl0by10cmVlLXBhbmVsXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW5cbiAgICAgID4gLmRpdG8tdHJlZS1pdGVtXG4gICAgICAgIGZsZXg6IDEgMSAyNSVcbiAgICAgID4gLmRpdG8tdHJlZS1mb3JtLWNvbnRhaW5lclxuICAgICAgICBmbGV4OiAwIDEgNzUlXG4gICAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2hcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZFxuICAgICAgICBib3JkZXItbGVmdDogJGJvcmRlci1zdHlsZVxuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXMgLSAxXG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtIDFcbiAgICAgICAgbWFyZ2luOiAoLSRpbnB1dC1wYWRkaW5nLXZlcikgKC0kaW5wdXQtcGFkZGluZy1ob3IpXG4gICAgICAgIG1hcmdpbi1sZWZ0OiAkaW5wdXQtcGFkZGluZy1ob3Jcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcbmltcG9ydCB7IGhhc0Zvcm1TY2hlbWEsIGdldEZvcm1TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFtcbiAgJ3RyZWUtbGlzdCcsICd0cmVlLW9iamVjdCdcbl0sXG4vLyBAdnVlL2NvbXBvbmVudFxue1xuICBtaXhpbnM6IFtTb3VyY2VNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4geyBjb250YWluZXI6IHRoaXMgfVxuICB9LFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIHJldHVybiB0eXBlID09PSAndHJlZS1vYmplY3QnID8gJ29iamVjdCcgOiAnbGlzdCdcbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHBhdGgoKSB7XG4gICAgICAvLyBBY2Nlc3NlZCBmcm9tIERpdG9UcmVlSXRlbSB0aHJvdWdoIGBjb250YWluZXIucGF0aGA6XG4gICAgICByZXR1cm4gdGhpcy5mb3JtQ29tcG9uZW50Py5wYXRoXG4gICAgfSxcblxuICAgIGVkaXRQYXRoKCkge1xuICAgICAgLy8gQWNjZXNzZWQgZnJvbSBEaXRvVHJlZUl0ZW0gdGhyb3VnaCBgY29udGFpbmVyLmVkaXRQYXRoYDpcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5wYXRoLnNsaWNlKHRoaXMucGF0aD8ubGVuZ3RoKVxuICAgIH0sXG5cbiAgICB0cmVlRGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICA/IHsgW3RoaXMubmFtZV06IHRoaXMudmFsdWUgfVxuICAgICAgICA6IHRoaXMudmFsdWVcbiAgICB9LFxuXG4gICAgdHJlZURhdGFQYXRoKCkge1xuICAgICAgLy8gUmVtb3ZlIGBuYW1lYCBmcm9tIGBkYXRhUGF0aGAsIGFzIGl0IGlzIGFkZGVlZFxuICAgICAgLy8gdG8gYHRyZWVEYXRhYCBhbmQgYHRyZWVTY2hlbWFgXG4gICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgPyB0aGlzLmRhdGFQYXRoLnNsaWNlKDAsIHRoaXMuZGF0YVBhdGgubGVuZ3RoIC0gdGhpcy5uYW1lLmxlbmd0aClcbiAgICAgICAgOiB0aGlzLmRhdGFQYXRoXG4gICAgfSxcblxuICAgIHRyZWVTY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgPyB7XG4gICAgICAgICAgY2hpbGRyZW46IHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIC4uLnRoaXMuc2NoZW1hXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIDogdGhpcy5zY2hlbWFcbiAgICB9LFxuXG4gICAgaGFzRWRpdGFibGVGb3JtcygpIHtcbiAgICAgIGNvbnN0IGhhc0VkaXRhYmxlRm9ybXMgPSBzY2hlbWEgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGhhc0Zvcm1TY2hlbWEoc2NoZW1hKSAmJiAoXG4gICAgICAgICAgICB0aGlzLmdldFNjaGVtYVZhbHVlKCdlZGl0YWJsZScsIHtcbiAgICAgICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgICAgIHNjaGVtYVxuICAgICAgICAgICAgfSkgfHxcbiAgICAgICAgICAgIHNjaGVtYS5jaGlsZHJlbiAmJlxuICAgICAgICAgICAgaGFzRWRpdGFibGVGb3JtcyhzY2hlbWEuY2hpbGRyZW4pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gaGFzRWRpdGFibGVGb3Jtcyh0aGlzLnNjaGVtYSlcbiAgICB9XG4gIH0sXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShcbiAgICBhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbCxcbiAgICBuZXN0ZWQgPSB0cnVlLCBmbGF0dGVuID0gZmFsc2UsXG4gICAgcHJvY2VzcyA9IG51bGxcbiAgKSB7XG4gICAgcmV0dXJuIFNvdXJjZU1peGluLnByb2Nlc3NTY2hlbWEoXG4gICAgICBhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbCxcbiAgICAgIG5lc3RlZCwgZmxhdHRlbixcbiAgICAgIC8vIFBhc3MgcHJvY2VzcygpIHRvIGFkZCBtb3JlIHJvdXRlcyB0byBjaGlsZFJvdXRlczpcbiAgICAgIChjaGlsZFJvdXRlcywgbGV2ZWwpID0+IHtcbiAgICAgICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gc2NoZW1hXG4gICAgICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgICAgIC8vIEFkZCBgdHlwZWAgdG8gdGhlIG5lc3RlZCB0cmVlIGxpc3QuXG4gICAgICAgICAgY2hpbGRyZW4udHlwZSA9ICd0cmVlLWxpc3QnXG4gICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1NjaGVtYShcbiAgICAgICAgICAgIGFwaSwgY2hpbGRyZW4sIGNoaWxkcmVuLm5hbWUsIGNoaWxkUm91dGVzLCBsZXZlbCxcbiAgICAgICAgICAgIG5lc3RlZCwgdHJ1ZSwgLy8gUGFzcyBgdHJ1ZWAgZm9yIGBmbGF0dGVuYCBpbiB0cmVlIGxpc3RzLlxuICAgICAgICAgICAgcHJvY2Vzc1xuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIClcbiAgfSxcblxuICBnZXRGb3JtU2NoZW1hc0ZvclByb2Nlc3Npbmcoc2NoZW1hLCBjb250ZXh0KSB7XG4gICAgLy8gQ29udmVydCBuZXN0ZWQgY2hpbGRyZW4gc2NoZW1hIHRvIHN0YW5kLWFsb25lIHNjaGVtYSBjb21wb25lbnQsXG4gICAgLy8gcHJlc2VudCBpbiBlYWNoIG9mIHRoZSBmb3JtcywgYXMgcmVxdWlyZWQgYnkgYHByb2Nlc3NTY2hlbWFEYXRhKClgXG4gICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gc2NoZW1hXG4gICAgcmV0dXJuIGdldEZvcm1TY2hlbWFzKHNjaGVtYSwgY29udGV4dCwgY2hpbGRyZW5cbiAgICAgID8gZm9ybSA9PiAoe1xuICAgICAgICAuLi5mb3JtLFxuICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgLi4uZm9ybS5jb21wb25lbnRzLFxuICAgICAgICAgIFtjaGlsZHJlbi5uYW1lXTogY2hpbGRyZW5cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIDogbnVsbFxuICAgIClcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgZmlsZXNpemUgfSBmcm9tICdmaWxlc2l6ZSdcblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEZpbGVTaXplKHNpemUpIHtcbiAgcmV0dXJuIGZpbGVzaXplKHNpemUsIHsgYmFzZTogMTAgfSlcbn1cbiIsIlxuLmRpdG8tdXBsb2FkXG4gIHRhYmxlLmRpdG8tdGFibGUuZGl0by10YWJsZS1zZXBhcmF0b3JzLmRpdG8tdGFibGUtYmFja2dyb3VuZFxuICAgIC8vLSBTdHlsaW5nIGNvbWVzIGZyb20gRGl0b1RhYmxlSGVhZFxuICAgIHRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICAgICAgdHJcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIE5hbWVcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIFNpemVcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIFN0YXR1c1xuICAgICAgICB0aFxuICAgICAgICAgIHNwYW5cbiAgICB2dWUtZHJhZ2dhYmxlKFxuICAgICAgdGFnPVwidGJvZHlcIlxuICAgICAgdi1iaW5kPVwiZ2V0RHJhZ09wdGlvbnMoZHJhZ2dhYmxlKVwiXG4gICAgICA6bGlzdD1cImZpbGVzXCJcbiAgICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICAgIEBlbmQ9XCJvbkVuZERyYWdcIlxuICAgIClcbiAgICAgIHRyKFxuICAgICAgICB2LWZvcj1cIihmaWxlLCBpbmRleCkgaW4gZmlsZXNcIlxuICAgICAgICA6a2V5PVwiZmlsZS5rZXlcIlxuICAgICAgKVxuICAgICAgICB0ZCh2LWh0bWw9XCJyZW5kZXJGaWxlKGZpbGUsIGluZGV4KVwiKVxuICAgICAgICB0ZCB7eyBmaWxlLnNpemUgfCBmb3JtYXRGaWxlU2l6ZSB9fVxuICAgICAgICB0ZFxuICAgICAgICAgIHRlbXBsYXRlKHYtaWY9XCJmaWxlLnVwbG9hZFwiKVxuICAgICAgICAgICAgdGVtcGxhdGUodi1pZj1cImZpbGUudXBsb2FkLmVycm9yXCIpXG4gICAgICAgICAgICAgIHwgRXJyb3I6IHt7IGZpbGUudXBsb2FkLmVycm9yIH19XG4gICAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5hY3RpdmVcIilcbiAgICAgICAgICAgICAgfCBVcGxvYWRpbmcuLi5cbiAgICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZS1pZj1cImZpbGUudXBsb2FkLnN1Y2Nlc3NcIilcbiAgICAgICAgICAgICAgfCBVcGxvYWRlZFxuICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZSlcbiAgICAgICAgICAgIHwgU3RvcmVkXG4gICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnNcbiAgICAgICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgICAgICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICAgICAgICAgIGEuZGl0by1idXR0b24oXG4gICAgICAgICAgICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgdi1pZj1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJkZWxldGVGaWxlKGZpbGUsIGluZGV4KVwiXG4gICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICAgICAgICApXG4gICAgdGZvb3RcbiAgICAgIHRyXG4gICAgICAgIHRkKDpjb2xzcGFuPVwiNFwiKVxuICAgICAgICAgIC5kaXRvLXVwbG9hZC1mb290ZXJcbiAgICAgICAgICAgIHByb2dyZXNzLmRpdG8tcHJvZ3Jlc3MoXG4gICAgICAgICAgICAgIHYtaWY9XCJpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICAgICAgICAgIDp2YWx1ZT1cInVwbG9hZFByb2dyZXNzXCJcbiAgICAgICAgICAgICAgbWF4PVwiMTAwXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWlmPVwiaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwidXBsb2FkLmFjdGl2ZSA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgKSBDYW5jZWwgQWxsXG4gICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJpc1VwbG9hZFJlYWR5XCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD1cInVwbG9hZC5hY3RpdmUgPSB0cnVlXCJcbiAgICAgICAgICAgICAgKSBVcGxvYWQgQWxsXG4gICAgICAgICAgICAgIHZ1ZS11cGxvYWQuZGl0by1idXR0b24uZGl0by1idXR0b24tYWRkLXVwbG9hZChcbiAgICAgICAgICAgICAgICA6aW5wdXQtaWQ9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgICAgOm5hbWU9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIDpwb3N0LWFjdGlvbj1cInVwbG9hZFBhdGhcIlxuICAgICAgICAgICAgICAgIDpleHRlbnNpb25zPVwiZXh0ZW5zaW9uc1wiXG4gICAgICAgICAgICAgICAgOmFjY2VwdD1cImFjY2VwdFwiXG4gICAgICAgICAgICAgICAgOm11bHRpcGxlPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgIDpzaXplPVwibWF4U2l6ZVwiXG4gICAgICAgICAgICAgICAgdi1tb2RlbD1cInVwbG9hZHNcIlxuICAgICAgICAgICAgICAgIEBpbnB1dC1maWx0ZXI9XCJpbnB1dEZpbHRlclwiXG4gICAgICAgICAgICAgICAgQGlucHV0LWZpbGU9XCJpbnB1dEZpbGVcIlxuICAgICAgICAgICAgICAgIHJlZj1cInVwbG9hZFwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJVcGxvYWQgRmlsZXNcIlxuICAgICAgICAgICAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by11cGxvYWRcbiAgICB0YWJsZS5kaXRvLXRhYmxlLmRpdG8tdGFibGUtc2VwYXJhdG9ycy5kaXRvLXRhYmxlLWJhY2tncm91bmRcbiAgICAgIC8vLSBTdHlsaW5nIGNvbWVzIGZyb20gRGl0b1RhYmxlSGVhZFxuICAgICAgdGhlYWQuZGl0by10YWJsZS1oZWFkXG4gICAgICAgIHRyXG4gICAgICAgICAgdGhcbiAgICAgICAgICAgIHNwYW4gTmFtZVxuICAgICAgICAgIHRoXG4gICAgICAgICAgICBzcGFuIFNpemVcbiAgICAgICAgICB0aFxuICAgICAgICAgICAgc3BhbiBTdGF0dXNcbiAgICAgICAgICB0aFxuICAgICAgICAgICAgc3BhblxuICAgICAgdnVlLWRyYWdnYWJsZShcbiAgICAgICAgdGFnPVwidGJvZHlcIlxuICAgICAgICB2LWJpbmQ9XCJnZXREcmFnT3B0aW9ucyhkcmFnZ2FibGUpXCJcbiAgICAgICAgOmxpc3Q9XCJmaWxlc1wiXG4gICAgICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICAgICAgQGVuZD1cIm9uRW5kRHJhZ1wiXG4gICAgICApXG4gICAgICAgIHRyKFxuICAgICAgICAgIHYtZm9yPVwiKGZpbGUsIGluZGV4KSBpbiBmaWxlc1wiXG4gICAgICAgICAgOmtleT1cImZpbGUua2V5XCJcbiAgICAgICAgKVxuICAgICAgICAgIHRkKHYtaHRtbD1cInJlbmRlckZpbGUoZmlsZSwgaW5kZXgpXCIpXG4gICAgICAgICAgdGQge3sgZmlsZS5zaXplIHwgZm9ybWF0RmlsZVNpemUgfX1cbiAgICAgICAgICB0ZFxuICAgICAgICAgICAgdGVtcGxhdGUodi1pZj1cImZpbGUudXBsb2FkXCIpXG4gICAgICAgICAgICAgIHRlbXBsYXRlKHYtaWY9XCJmaWxlLnVwbG9hZC5lcnJvclwiKVxuICAgICAgICAgICAgICAgIHwgRXJyb3I6IHt7IGZpbGUudXBsb2FkLmVycm9yIH19XG4gICAgICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZS1pZj1cImZpbGUudXBsb2FkLmFjdGl2ZVwiKVxuICAgICAgICAgICAgICAgIHwgVXBsb2FkaW5nLi4uXG4gICAgICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZS1pZj1cImZpbGUudXBsb2FkLnN1Y2Nlc3NcIilcbiAgICAgICAgICAgICAgICB8IFVwbG9hZGVkXG4gICAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UpXG4gICAgICAgICAgICAgIHwgU3RvcmVkXG4gICAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9uc1xuICAgICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICAgICAgICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1pZj1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwiZGVsZXRlRmlsZShmaWxlLCBpbmRleClcIlxuICAgICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICAgICAgICAgIClcbiAgICAgIHRmb290XG4gICAgICAgIHRyXG4gICAgICAgICAgdGQoOmNvbHNwYW49XCI0XCIpXG4gICAgICAgICAgICAuZGl0by11cGxvYWQtZm9vdGVyXG4gICAgICAgICAgICAgIHByb2dyZXNzLmRpdG8tcHJvZ3Jlc3MoXG4gICAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgICA6dmFsdWU9XCJ1cGxvYWRQcm9ncmVzc1wiXG4gICAgICAgICAgICAgICAgbWF4PVwiMTAwXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICAgIHYtaWY9XCJpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwidXBsb2FkLmFjdGl2ZSA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgICApIENhbmNlbCBBbGxcbiAgICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJpc1VwbG9hZFJlYWR5XCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJ1cGxvYWQuYWN0aXZlID0gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgKSBVcGxvYWQgQWxsXG4gICAgICAgICAgICAgICAgdnVlLXVwbG9hZC5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1hZGQtdXBsb2FkKFxuICAgICAgICAgICAgICAgICAgOmlucHV0LWlkPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgICAgICAgOm5hbWU9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICA6cG9zdC1hY3Rpb249XCJ1cGxvYWRQYXRoXCJcbiAgICAgICAgICAgICAgICAgIDpleHRlbnNpb25zPVwiZXh0ZW5zaW9uc1wiXG4gICAgICAgICAgICAgICAgICA6YWNjZXB0PVwiYWNjZXB0XCJcbiAgICAgICAgICAgICAgICAgIDptdWx0aXBsZT1cIm11bHRpcGxlXCJcbiAgICAgICAgICAgICAgICAgIDpzaXplPVwibWF4U2l6ZVwiXG4gICAgICAgICAgICAgICAgICB2LW1vZGVsPVwidXBsb2Fkc1wiXG4gICAgICAgICAgICAgICAgICBAaW5wdXQtZmlsdGVyPVwiaW5wdXRGaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgQGlucHV0LWZpbGU9XCJpbnB1dEZpbGVcIlxuICAgICAgICAgICAgICAgICAgcmVmPVwidXBsb2FkXCJcbiAgICAgICAgICAgICAgICAgIHRpdGxlPVwiVXBsb2FkIEZpbGVzXCJcbiAgICAgICAgICAgICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tdXBsb2FkXG4gICAgLmRpdG8tdGFibGVcbiAgICAgIHRyXG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGVcbiAgICAuZGl0by1idXR0b24tYWRkLXVwbG9hZFxuICAgICAgcGFkZGluZzogMFxuICAgICAgPiAqXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAuZGl0by11cGxvYWQtZm9vdGVyXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyXG4gICAgICAuZGl0by1wcm9ncmVzc1xuICAgICAgICBmbGV4OiBhdXRvXG4gICAgICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgT3JkZXJlZE1peGluIGZyb20gJy4uL21peGlucy9PcmRlcmVkTWl4aW4uanMnXG5pbXBvcnQgVnVlVXBsb2FkIGZyb20gJ3Z1ZS11cGxvYWQtY29tcG9uZW50J1xuaW1wb3J0IFZ1ZURyYWdnYWJsZSBmcm9tICd2dWVkcmFnZ2FibGUnXG5pbXBvcnQgcGFyc2VGaWxlU2l6ZSBmcm9tICdmaWxlc2l6ZS1wYXJzZXInXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZm9ybWF0RmlsZVNpemUgfSBmcm9tICcuLi91dGlscy91bml0cy5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzQXJyYXksIGFzQXJyYXksIGVzY2FwZUh0bWwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcigndXBsb2FkJywge1xuICBjb21wb25lbnRzOiB7IFZ1ZVVwbG9hZCwgVnVlRHJhZ2dhYmxlIH0sXG4gIGZpbHRlcnM6IHsgZm9ybWF0RmlsZVNpemUgfSxcbiAgbWl4aW5zOiBbT3JkZXJlZE1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB1cGxvYWRzOiBbXVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHVwbG9hZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZWZzLnVwbG9hZFxuICAgIH0sXG5cbiAgICBmaWxlcygpIHtcbiAgICAgIHJldHVybiBhc0ZpbGVzKHRoaXMudmFsdWUpXG4gICAgfSxcblxuICAgIG11bHRpcGxlOiBnZXRTY2hlbWFBY2Nlc3NvcignbXVsdGlwbGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAvLyBObyBjYWxsYmFjayBhcyBpdCdzIHVzZWQgaW4gYHByb2Nlc3NWYWx1ZSgpYFxuICAgICAgY2FsbGJhY2s6IGZhbHNlXG4gICAgfSksXG5cbiAgICBleHRlbnNpb25zOiBnZXRTY2hlbWFBY2Nlc3NvcignZXh0ZW5zaW9ucycsIHtcbiAgICAgIHR5cGU6IFtBcnJheSwgU3RyaW5nLCBSZWdFeHBdXG4gICAgfSksXG5cbiAgICBhY2NlcHQ6IGdldFNjaGVtYUFjY2Vzc29yKCdhY2NlcHQnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGdldChhY2NlcHQpIHtcbiAgICAgICAgcmV0dXJuIGlzQXJyYXkoYWNjZXB0KSA/IGFjY2VwdC5qb2luKCcsJykgOiBhY2NlcHRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1heFNpemU6IGdldFNjaGVtYUFjY2Vzc29yKCdtYXhTaXplJywge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXSxcbiAgICAgIGdldChtYXhTaXplKSB7XG4gICAgICAgIHJldHVybiBtYXhTaXplID8gcGFyc2VGaWxlU2l6ZShtYXhTaXplKSA6IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZHJhZ2dhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZHJhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRyYWdnYWJsZSkge1xuICAgICAgICByZXR1cm4gZHJhZ2dhYmxlICYmIHRoaXMuZmlsZXMubGVuZ3RoID4gMVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZGVsZXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVsZXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBpc1VwbG9hZFJlYWR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMudXBsb2Fkcy5sZW5ndGggJiZcbiAgICAgICAgISh0aGlzLnVwbG9hZC5hY3RpdmUgfHwgdGhpcy51cGxvYWQudXBsb2FkZWQpXG4gICAgfSxcblxuICAgIGlzVXBsb2FkQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMudXBsb2Fkcy5sZW5ndGggJiYgdGhpcy51cGxvYWQuYWN0aXZlXG4gICAgfSxcblxuICAgIHVwbG9hZFByb2dyZXNzKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy51cGxvYWRzLnJlZHVjZSgodG90YWwsIGZpbGUpID0+IHRvdGFsICsgZmlsZS5wcm9ncmVzcywgMCkgL1xuICAgICAgICB0aGlzLnVwbG9hZHMubGVuZ3RoXG4gICAgICApXG4gICAgfSxcblxuICAgIHVwbG9hZFBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZVVybCh7XG4gICAgICAgIHR5cGU6ICd1cGxvYWQnLFxuICAgICAgICBwYXRoOiB0aGlzLmFwaS5ub3JtYWxpemVQYXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICB9KVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcmVuZGVyRmlsZShmaWxlLCBpbmRleCkge1xuICAgICAgY29uc3QgeyByZW5kZXIgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gcmVuZGVyXG4gICAgICAgID8gcmVuZGVyLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgICAgdmFsdWU6IGZpbGUsXG4gICAgICAgICAgICBkYXRhOiB0aGlzLmZpbGVzLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBkYXRhUGF0aDogYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgaW5kZXgpXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICA6IGVzY2FwZUh0bWwoZmlsZS5uYW1lKVxuICAgIH0sXG5cbiAgICBkZWxldGVGaWxlKGZpbGUsIGluZGV4KSB7XG4gICAgICBjb25zdCB7IG5hbWUgfSA9IGZpbGVcblxuICAgICAgaWYgKGZpbGUgJiYgd2luZG93LmNvbmZpcm0oXG4gICAgICAgIGBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJHt0aGlzLnZlcmJzLnJlbW92ZX0gJHtuYW1lfT9gKVxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsZS51cGxvYWQpIHtcbiAgICAgICAgICB0aGlzLnVwbG9hZC5yZW1vdmUoZmlsZS51cGxvYWQpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiAnaW5mbycsXG4gICAgICAgICAgdGl0bGU6ICdTdWNjZXNzZnVsbHkgUmVtb3ZlZCcsXG4gICAgICAgICAgdGV4dDogYCR7bmFtZX0gd2FzICR7dGhpcy52ZXJicy5kZWxldGVkfS5gXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldEZpbGVJbmRleChmaWxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSAmJiB0aGlzLnZhbHVlXG4gICAgICAgID8gdGhpcy52YWx1ZS5maW5kSW5kZXgoaXQgPT4gaXQuaWQgPT09IGZpbGUuaWQpXG4gICAgICAgIDogLTFcbiAgICB9LFxuXG4gICAgYWRkRmlsZShmaWxlKSB7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUucHVzaChmaWxlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBbZmlsZV1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGZpbGVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVwbGFjZUZpbGUoZmlsZSwgbmV3RmlsZSkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldEZpbGVJbmRleChmaWxlKVxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgIGlmIChuZXdGaWxlKSB7XG4gICAgICAgICAgICB0aGlzLiRzZXQodGhpcy52YWx1ZSwgaW5kZXgsIG5ld0ZpbGUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ld0ZpbGVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVtb3ZlRmlsZShmaWxlKSB7XG4gICAgICB0aGlzLnJlcGxhY2VGaWxlKGZpbGUsIG51bGwpXG4gICAgfSxcblxuICAgIGlucHV0RmlsZShuZXdGaWxlLCBvbGRGaWxlKSB7XG4gICAgICBpZiAobmV3RmlsZSAmJiAhb2xkRmlsZSkge1xuICAgICAgICBjb25zdCB7IGlkLCBuYW1lLCBzaXplIH0gPSBuZXdGaWxlXG4gICAgICAgIHRoaXMuYWRkRmlsZSh7IGlkLCBuYW1lLCBzaXplLCB1cGxvYWQ6IG5ld0ZpbGUgfSlcbiAgICAgIH1cbiAgICAgIGlmIChuZXdGaWxlICYmIG9sZEZpbGUpIHtcbiAgICAgICAgY29uc3QgeyBzdWNjZXNzLCBlcnJvciB9ID0gbmV3RmlsZVxuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICAgIGNvbnN0IGZpbGUgPSBuZXdGaWxlLnJlc3BvbnNlWzBdXG4gICAgICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgICAgIGZpbGUudXBsb2FkID0gbmV3RmlsZVxuICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgdXBsb2FkIGZpbGUgb2JqZWN0IHdpdGggdGhlIGZpbGUgb2JqZWN0IHJlY2VpdmVkXG4gICAgICAgICAgICAvLyBmcm9tIHRoZSB1cGxvYWQgcmVzcG9uc2UuXG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VGaWxlKG5ld0ZpbGUsIGZpbGUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRmlsZShuZXdGaWxlKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChlcnJvcikge1xuICAgICAgICAgIGNvbnN0IHRleHQgPSB7XG4gICAgICAgICAgICBhYm9ydDogJ1VwbG9hZCBhYm9ydGVkJyxcbiAgICAgICAgICAgIGRlbmllZDogJ1VwbG9hZCBkZW5pZWQnLFxuICAgICAgICAgICAgZXh0ZW5zaW9uOiBgVW5zdXBwb3J0ZWQgZmlsZS10eXBlOiAke25ld0ZpbGUubmFtZX1gLFxuICAgICAgICAgICAgbmV0d29yazogJ05ldHdvcmsgZXJyb3IgZW5jb3VudGVyZWQgZHVyaW5nIHVwbG9hZCcsXG4gICAgICAgICAgICBzZXJ2ZXI6ICdTZXJ2ZXIgZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHVwbG9hZCcsXG4gICAgICAgICAgICBzaXplOiBgRmlsZSBpcyB0b28gbGFyZ2U6ICR7Zm9ybWF0RmlsZVNpemUobmV3RmlsZS5zaXplKX1gLFxuICAgICAgICAgICAgdGltZW91dDogJ1RpbWVvdXQgb2NjdXJyZWQgZHVyaW5nIHVwbG9hZCdcblxuICAgICAgICAgIH1bZXJyb3JdIHx8IGBVbmtub3duIEZpbGUgVXBsb2FkIEVycm9yOiAnJHtlcnJvcn0nYFxuICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICB0aXRsZTogJ0ZpbGUgVXBsb2FkIEVycm9yJyxcbiAgICAgICAgICAgIHRleHRcbiAgICAgICAgICB9KVxuICAgICAgICAgIHRoaXMucmVtb3ZlRmlsZShuZXdGaWxlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGlucHV0RmlsdGVyKG5ld0ZpbGUvKiwgb2xkRmlsZSwgcHJldmVudCAqLykge1xuICAgICAgY29uc3QgeGhyID0gbmV3RmlsZT8ueGhyXG4gICAgICBpZiAodGhpcy5hcGkuY29ycz8uY3JlZGVudGlhbHMgJiYgeGhyICYmICF4aHIud2l0aENyZWRlbnRpYWxzKSB7XG4gICAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlKSB7XG4gICAgLy8gRmlsdGVyIG91dCBhbGwgbmV3bHkgYWRkZWQgZmlsZXMgdGhhdCB3ZXJlbid0IGFjdHVhbGx5IHVwbG9hZGVkLlxuICAgIGNvbnN0IGZpbGVzID0gYXNGaWxlcyh2YWx1ZSlcbiAgICAgIC5tYXAoXG4gICAgICAgICh7IHVwbG9hZCwgLi4uZmlsZSB9KSA9PiAhdXBsb2FkIHx8IHVwbG9hZC5zdWNjZXNzID8gZmlsZSA6IG51bGxcbiAgICAgIClcbiAgICAgIC5maWx0ZXIoZmlsZSA9PiBmaWxlKVxuICAgIHJldHVybiBzY2hlbWEubXVsdGlwbGUgPyBmaWxlcyA6IGZpbGVzWzBdIHx8IG51bGxcbiAgfVxufSlcblxuZnVuY3Rpb24gYXNGaWxlcyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPyBhc0FycmF5KHZhbHVlKSA6IFtdXG59XG5cbjwvc2NyaXB0PlxuIiwiY29uc3QgbG9nZ2VkRGVwcmVjYXRpb25zID0gbmV3IFNldCgpXG5cbmV4cG9ydCBmdW5jdGlvbiBkZXByZWNhdGUobWVzc2FnZSkge1xuICAvLyBPbmx5IGxvZyBkZXByZWNhdGlvbiBtZXNzYWdlcyBvbmNlLlxuICBpZiAoIWxvZ2dlZERlcHJlY2F0aW9ucy5oYXMobWVzc2FnZSkpIHtcbiAgICBsb2dnZWREZXByZWNhdGlvbnMuYWRkKG1lc3NhZ2UpXG4gICAgY29uc29sZS53YXJuKG1lc3NhZ2UpXG4gIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0IFtcbiAgJ2NyZWF0ZScsICdjcmVhdGVkJyxcbiAgJ3NhdmUnLCAnc2F2ZWQnLFxuICAnc3VibWl0JywgJ3N1Ym1pdHRlZCcsXG4gICdkZWxldGUnLCAnZGVsZXRlZCcsXG4gICdlZGl0JywgJ2VkaXRlZCcsXG4gICdjbG9zZScsICdjbG9zZWQnLFxuICAnY2FuY2VsJywgJ2NhbmNlbGxlZCcsXG4gICdkcmFnJywgJ2RyYWdnZWQnXG5dLnJlZHVjZSgodmVyYnMsIHZlcmIpID0+IHtcbiAgdmVyYnNbdmVyYl0gPSB2ZXJiXG4gIHJldHVybiB2ZXJic1xufSwge30pXG4iLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCBWdWVNb2RhbCBmcm9tICd2dWUtanMtbW9kYWwnXG5pbXBvcnQgVnVlUm91dGVyIGZyb20gJ3Z1ZS1yb3V0ZXInXG5pbXBvcnQgVnVlTm90aWZpY2F0aW9ucyBmcm9tICd2dWUtbm90aWZpY2F0aW9uJ1xuaW1wb3J0IHtcbiAgaXNTdHJpbmcsIGlzQWJzb2x1dGVVcmwsIG1lcmdlLCBoeXBoZW5hdGUsIGNhbWVsaXplLCBkZWZhdWx0Rm9ybWF0c1xufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0ICogYXMgY29tcG9uZW50cyBmcm9tICcuL2NvbXBvbmVudHMvaW5kZXguanMnXG5pbXBvcnQgKiBhcyB0eXBlcyBmcm9tICcuL3R5cGVzL2luZGV4LmpzJ1xuaW1wb3J0IERpdG9Sb290IGZyb20gJy4vY29tcG9uZW50cy9EaXRvUm9vdC52dWUnXG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZSB9IGZyb20gJy4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBkZXByZWNhdGUgfSBmcm9tICcuL3V0aWxzL2RlcHJlY2F0ZS5qcydcbmltcG9ydCB2ZXJicyBmcm9tICcuL3ZlcmJzLmpzJ1xuXG5WdWUuY29uZmlnLnByb2R1Y3Rpb25UaXAgPSBmYWxzZVxuXG4vLyBBbGwgZ2xvYmFsIHBsdWdpbnMgdGhhdCBuZWVkIHRvIGJlIHJlZ2lzdGVyZWQgb24gYFZ1ZWA6XG5WdWUudXNlKFZ1ZVJvdXRlcilcblZ1ZS51c2UoVnVlTW9kYWwsIHsgZHluYW1pYzogdHJ1ZSB9KVxuVnVlLnVzZShWdWVOb3RpZmljYXRpb25zKVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvQWRtaW4ge1xuICBjb25zdHJ1Y3RvcihlbCwge1xuICAgIC8vIGBkaXRvYCBjb250YWlucyB0aGUgYmFzZSBhbmQgYXBpIHNldHRpbmdzIHBhc3NlZCBmcm9tIGBBZG1pbkNvbnRyb2xsZXJgXG4gICAgZGl0byA9IHt9LFxuICAgIGFwaSxcbiAgICB2aWV3cyA9IHt9LFxuICAgIC4uLm9wdGlvbnNcbiAgfSA9IHt9KSB7XG4gICAgdGhpcy5lbCA9IGVsXG4gICAgLy8gTWVyZ2UgaW4gYGFwaWAgc2V0dGluZ3MgYXMgcGFzc2VkIGZyb20gYGNvbmZpZy5hZG1pbmAgYW5kIHRocm91Z2ggdGhlXG4gICAgLy8gYEFkbWluQ29udHJvbGxlcmAgd2l0aCBgYXBpYCB2YWx1ZXMgZnJvbSBmcm9tICdhZG1pbi9pbmRleC5qcydcbiAgICAvLyBOT1RFOiBgQWRtaW5Db250cm9sbGVyYCBwcm92aWRlcyBgZGl0by5hcGkuYmFzZWBcbiAgICB0aGlzLmFwaSA9IGFwaSA9IG1lcmdlKHsgYmFzZTogJy8nIH0sIGRpdG8uYXBpLCBhcGkpXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuXG4gICAgLy8gU2V0dXAgZGVmYXVsdCBhcGkgc2V0dHRpbmdzOlxuICAgIGFwaS5sb2NhbGUgfHw9ICdlbi1VUydcbiAgICBhcGkuZm9ybWF0cyA9IG1lcmdlKHt9LCBkZWZhdWx0Rm9ybWF0cywgYXBpLmZvcm1hdHMpXG4gICAgYXBpLnJlcXVlc3QgfHw9IG9wdGlvbnMgPT4gcmVxdWVzdChhcGksIG9wdGlvbnMpXG4gICAgYXBpLmdldEFwaVVybCB8fD0gcGF0aCA9PiBnZXRBcGlVcmwoYXBpLCBwYXRoKVxuICAgIGFwaS5pc0FwaVJlcXVlc3QgfHw9IHVybCA9PiBpc0FwaVJlcXVlc3QoYXBpLCB1cmwpXG4gICAgLy8gU2V0dGluZyBgYXBpLm5vcm1hbGl6ZVBhdGhzID0gdHJ1ZSAocGx1cmFsKSBzZXRzIGJvdGg6XG4gICAgLy8gYGFwaS5ub3JtYWxpemVQYXRoID0gaHlwaGVuYXRlYCBhbmQgYGFwaS5kZW5vcm1hbGl6ZVBhdGggPSBjYW1lbGl6ZWBcbiAgICBhcGkubm9ybWFsaXplUGF0aCB8fD0gYXBpLm5vcm1hbGl6ZVBhdGhzID8gaHlwaGVuYXRlIDogdmFsID0+IHZhbFxuICAgIGFwaS5kZW5vcm1hbGl6ZVBhdGggfHw9IGFwaS5ub3JtYWxpemVQYXRocyA/IGNhbWVsaXplIDogdmFsID0+IHZhbFxuXG4gICAgLy8gQWxsb3cgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYWxsIGF1dGggcmVzb3VyY2VzLCBsaWtlIHNvOlxuICAgIC8vIGFwaS51c2VycyA9IHtcbiAgICAvLyAgIHBhdGg6ICcvYWRtaW5zJyxcbiAgICAvLyAgIC8vIFRoZXNlIGFyZSB0aGUgZGVmYXVsdHM6XG4gICAgLy8gICBsb2dpbjoge1xuICAgIC8vICAgICBwYXRoOiAnbG9naW4nLFxuICAgIC8vICAgICBtZXRob2Q6ICdwb3N0J1xuICAgIC8vICAgfSxcbiAgICAvLyAgIGxvZ291dDoge1xuICAgIC8vICAgICBwYXRoOiAnbG9nb3V0JyxcbiAgICAvLyAgICAgbWV0aG9kOiAncG9zdCdcbiAgICAvLyAgIH0sXG4gICAgLy8gICBzZXNzaW9uOiB7XG4gICAgLy8gICAgIHBhdGg6ICdzZXNzaW9uJyxcbiAgICAvLyAgICAgbWV0aG9kOiAnZ2V0J1xuICAgIC8vICAgfVxuICAgIC8vIH1cbiAgICBjb25zdCB1c2VycyA9IGFwaS51c2VycyA9IGdldFJlc291cmNlKGFwaS51c2Vycywge1xuICAgICAgdHlwZTogJ2NvbGxlY3Rpb24nXG4gICAgfSkgfHwge31cbiAgICB1c2Vycy5sb2dpbiA9IGdldFJlc291cmNlKHVzZXJzLmxvZ2luIHx8ICdsb2dpbicsIHtcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG4gICAgdXNlcnMubG9nb3V0ID0gZ2V0UmVzb3VyY2UodXNlcnMubG9nb3V0IHx8ICdsb2dvdXQnLCB7XG4gICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuICAgIHVzZXJzLnNlc3Npb24gPSBnZXRSZXNvdXJjZSh1c2Vycy5zZXNzaW9uIHx8ICdzZXNzaW9uJywge1xuICAgICAgbWV0aG9kOiAnZ2V0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuXG4gICAgLy8gQWxsb3cgb3ZlcnJpZGluZyBvZiByZXNvdXJjZSBwYXRoIGhhbmRsZXJzOlxuICAgIC8vIGFwaS5yZXNvdXJjZXMgPSB7XG4gICAgLy8gICBjb2xsZWN0aW9uKHJlc291cmNlKSB7XG4gICAgLy8gICAgIHJldHVybiByZXNvdXJjZS5wYXJlbnRcbiAgICAvLyAgICAgICA/IGAke3Jlc291cmNlLnBhdGh9PyR7cmVzb3VyY2UucGFyZW50LnBhdGh9X2lkPSR7XG4gICAgLy8gICAgICAgICAgcmVzb3VyY2UucGFyZW50LmlkfWBcbiAgICAvLyAgICAgICA6IHJlc291cmNlLnBhdGhcbiAgICAvLyAgIH1cbiAgICAvLyB9XG5cbiAgICBhcGkucmVzb3VyY2VzID0ge1xuICAgICAgYW55KHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzW3Jlc291cmNlPy50eXBlXSB8fCB0aGlzLmRlZmF1bHRcbiAgICAgICAgcmV0dXJuIHJlc291cmNlICYmIGhhbmRsZXIuY2FsbCh0aGlzLCByZXNvdXJjZSlcbiAgICAgIH0sXG5cbiAgICAgIGRlZmF1bHQocmVzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgcGFyZW50UGF0aCA9IHRoaXMuYW55KHJlc291cmNlLnBhcmVudClcbiAgICAgICAgcmV0dXJuIHBhcmVudFBhdGhcbiAgICAgICAgICA/IGAke3BhcmVudFBhdGh9LyR7cmVzb3VyY2UucGF0aH1gXG4gICAgICAgICAgOiByZXNvdXJjZS5wYXRoXG4gICAgICB9LFxuXG4gICAgICBjb2xsZWN0aW9uKHJlc291cmNlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHQocmVzb3VyY2UpXG4gICAgICB9LFxuXG4gICAgICBtZW1iZXIocmVzb3VyY2UpIHtcbiAgICAgICAgLy8gTk9URTogV2UgYXNzdW1lIHRoYXQgYWxsIG1lbWJlcnMgaGF2ZSByb290LWxldmVsIGNvbGxlY3Rpb24gcm91dGVzLFxuICAgICAgICAvLyB0byBhdm9pZCBleGNlc3NpdmUgbmVzdGluZyBvZiAoc3ViLSljb2xsZWN0aW9uIHJvdXRlcy5cbiAgICAgICAgcmV0dXJuIGAke3Jlc291cmNlLnBhdGh9LyR7cmVzb3VyY2UuaWR9YFxuICAgICAgfSxcblxuICAgICAgdXBsb2FkKHJlc291cmNlKSB7XG4gICAgICAgIC8vIERpdG8gU2VydmVyIGhhbmRsZXMgdXBsb2FkIHJvdXRlcyBvbiB0aGUgY29sbGVjdGlvbiByZXNvdXJjZTpcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29sbGVjdGlvbihyZXNvdXJjZS5wYXJlbnQpfS91cGxvYWQvJHtyZXNvdXJjZS5wYXRofWBcbiAgICAgIH0sXG5cbiAgICAgIC4uLmFwaS5yZXNvdXJjZXNcbiAgICB9XG5cbiAgICAvLyBBbGxvdyBvdmVycmlkaW5nIC8gZXh0ZW5kaW5nIG9mIGhlYWRlcnM6XG4gICAgLy8gYXBpLmhlYWRlcnMgPSB7XG4gICAgLy8gICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgLy8gfVxuICAgIGFwaS5oZWFkZXJzID0ge1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIC4uLmFwaS5oZWFkZXJzXG4gICAgfVxuXG4gICAgaWYgKGlzU3RyaW5nKGVsKSkge1xuICAgICAgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsKVxuICAgIH1cblxuICAgIHRoaXMucm9vdCA9IG5ldyBWdWUoe1xuICAgICAgZWwsXG4gICAgICByb3V0ZXI6IG5ldyBWdWVSb3V0ZXIoe1xuICAgICAgICBtb2RlOiAnaGlzdG9yeScsXG4gICAgICAgIGJhc2U6IGRpdG8uYmFzZSxcbiAgICAgICAgbGlua0FjdGl2ZUNsYXNzOiAnJyxcbiAgICAgICAgbGlua0V4YWN0QWN0aXZlQ2xhc3M6ICcnXG4gICAgICB9KSxcbiAgICAgIGNvbXBvbmVudHM6IHsgRGl0b1Jvb3QgfSxcbiAgICAgIC8vIE1vc3QgaW5qZWN0cyBhcmUgZGVmaW5lZCBhcyBmdW5jdGlvbnMsIHRvIHByZXNlcnZlIHJlYWN0aXZlbmVzcyBhY3Jvc3NcbiAgICAgIC8vIHByb3ZpZGUvaW5qZWN0LCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL2lzc3Vlcy83MDE3I2lzc3VlY29tbWVudC00ODA5MDY2OTFcbiAgICAgIHByb3ZpZGU6IHtcbiAgICAgICAgYXBpLFxuICAgICAgICAvLyBBIGRlZmF1bHQgbGlzdCBvZiB2ZXJicyBhcmUgcHJvdmlkZWQgYnkgJHZlcmJzKCkgYW5kIGNhbiBiZVxuICAgICAgICAvLyBvdmVycmlkZGVuIGF0IGFueSBwb2ludCBpbiB0aGUgY29tcG9uZW50IGhpZXJhcmNoeS5cbiAgICAgICAgJHZlcmJzOiAoKSA9PiB2ZXJicyxcbiAgICAgICAgLy8gUHJvdmlkZSBkZWZhdWx0cyBzbyBEaXRvTWl4aW4gY2FuIGluamVjdCB0aGVtIGZvciBhbGwgY29tcG9uZW50czpcbiAgICAgICAgLy8gICBpbmplY3Q6IFsgICckaXNQb3B1bGF0ZWQnLCAnJHNjaGVtYUNvbXBvbmVudCcsICckcm91dGVDb21wb25lbnQnIF1cbiAgICAgICAgJHZpZXdzOiAoKSA9PiB7fSxcbiAgICAgICAgJGlzUG9wdWxhdGVkOiAoKSA9PiB0cnVlLFxuICAgICAgICAkc2NoZW1hQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkc2NoZW1hUGFyZW50Q29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcm91dGVDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRkYXRhQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkc291cmNlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRkaWFsb2dDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRwYW5lbENvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHRhYkNvbXBvbmVudDogKCkgPT4gbnVsbFxuICAgICAgfSxcblxuICAgICAgcmVuZGVyOiBjcmVhdGVFbGVtZW50ID0+IGNyZWF0ZUVsZW1lbnQoRGl0b1Jvb3QsIHtcbiAgICAgICAgLy8gUHJlc2VydmUgdGhlIHJvb3QgY29udGFpbmVyJ3MgaWQsIGFzIHJlcXVpcmVkIGJ5IGhvdC1yZWxvYWRpbmc6XG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgaWQ6IGVsLmlkXG4gICAgICAgIH0sXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgdW5yZXNvbHZlZFZpZXdzOiB2aWV3cyxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgIH0sXG4gICAgICAgIC8vIFRoaXMgbWF5IG9ubHkgYmUgbmVlZGVkIHRvIGF2b2lkIHRyZWUtc2hhY2tpbmcgb2YgdGhlc2UgY29tcG9uZW50cyxcbiAgICAgICAgLy8gc2luY2UgdGhleSBhY3R1YWxseSBoYW5kbGUgcmVnaXN0cnkgaW50ZXJuYWxseSBhbHJlYWR5LlxuICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgLi4uY29tcG9uZW50cyxcbiAgICAgICAgICAuLi50eXBlc1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICByZWdpc3Rlcih0eXBlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIFR5cGVDb21wb25lbnQucmVnaXN0ZXIodHlwZSwgb3B0aW9ucylcbiAgfVxufVxuXG5jbGFzcyBSZXF1ZXN0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlc3BvbnNlKSB7XG4gICAgc3VwZXIoYFJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGU6ICR7cmVzcG9uc2Uuc3RhdHVzfSAoJHtyZXNwb25zZS5zdGF0dXNUZXh0fSlgKVxuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlcXVlc3QoYXBpLCB7XG4gIHVybCxcbiAgbWV0aG9kID0gJ2dldCcsXG4gIC8vIFRPRE86IGBwYXJhbXNgIHdhcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGBxdWVyeWAgb24gMjAyMi0xMS0wMSwgcmVtb3ZlXG4gIC8vIG9uY2Ugbm90IGluIHVzZSBhbnl3aGVyZSBhbnltb3JlLlxuICBwYXJhbXMgPSBudWxsLFxuICBxdWVyeSA9IHBhcmFtcyB8fCBudWxsLFxuICBoZWFkZXJzID0gbnVsbCxcbiAgZGF0YSA9IG51bGxcbn0pIHtcbiAgaWYgKHBhcmFtcykge1xuICAgIGRlcHJlY2F0ZShgcmVxdWVzdC5wYXJhbXMgaXMgZGVwcmVjYXRlZC4gVXNlIGFjdGlvbi5tZXRob2QgYW5kIGFjdGlvbi5wYXRoIGluc3RlYWQuYClcbiAgfVxuXG4gIGNvbnN0IGlzQXBpUmVxdWVzdCA9IGFwaS5pc0FwaVJlcXVlc3QodXJsKVxuICBpZiAoaXNBcGlSZXF1ZXN0ICYmICFpc0Fic29sdXRlVXJsKHVybCkpIHtcbiAgICB1cmwgPSBhcGkuZ2V0QXBpVXJsKHVybClcbiAgfVxuXG4gIGNvbnN0IHNlYXJjaCA9IHF1ZXJ5ICYmIG5ldyBVUkxTZWFyY2hQYXJhbXMocXVlcnkpLnRvU3RyaW5nKClcbiAgaWYgKHNlYXJjaCkge1xuICAgIHVybCA9IGAke3VybH0/JHtzZWFyY2h9YFxuICB9XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICBtZXRob2Q6IG1ldGhvZC50b1VwcGVyQ2FzZSgpLFxuICAgIC4uLihkYXRhICYmIHsgYm9keTogSlNPTi5zdHJpbmdpZnkoZGF0YSkgfSksXG4gICAgaGVhZGVyczoge1xuICAgICAgLi4uKGlzQXBpUmVxdWVzdCAmJiBhcGkuaGVhZGVycyksXG4gICAgICAuLi5oZWFkZXJzXG4gICAgfSxcbiAgICBjcmVkZW50aWFsczogaXNBcGlSZXF1ZXN0ICYmIGFwaS5jb3JzPy5jcmVkZW50aWFsc1xuICAgICAgPyAnaW5jbHVkZSdcbiAgICAgIDogJ3NhbWUtb3JpZ2luJ1xuICB9KVxuICByZXNwb25zZS5kYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgUmVxdWVzdEVycm9yKHJlc3BvbnNlKVxuICB9XG4gIHJldHVybiByZXNwb25zZVxufVxuXG5mdW5jdGlvbiBnZXRBcGlVcmwoYXBpLCBwYXRoKSB7XG4gIC8vIFVzZSBzYW1lIGFwcHJvYWNoIGFzIGF4aW9zIGBjb21iaW5lVVJMcygpYCB0byBqb2luIGJhc2VVUkwgd2l0aCBwYXRoOlxuICByZXR1cm4gYCR7YXBpLnVybC5yZXBsYWNlKC9cXC8rJC8sICcnKX0vJHtwYXRoLnJlcGxhY2UoL15cXC8rLywgJycpfWBcbn1cblxuZnVuY3Rpb24gaXNBcGlSZXF1ZXN0KGFwaSwgdXJsKSB7XG4gIHJldHVybiAhaXNBYnNvbHV0ZVVybCh1cmwpIHx8IHVybC5zdGFydHNXaXRoKGFwaS51cmwpXG59XG4iXSwibmFtZXMiOlsiYXBwU3RhdGUiLCJhcHBlbmREYXRhUGF0aCIsImRhdGFQYXRoIiwidG9rZW4iLCJwYXJzZVBhcmVudERhdGFQYXRoIiwicGF0aCIsInBhcnNlRGF0YVBhdGgiLCJwYXJzZUl0ZW1EYXRhUGF0aCIsIm5lc3RlZCIsImdldEl0ZW1EYXRhUGF0aCIsIm5vcm1hbGl6ZURhdGFQYXRoIiwicGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgiLCJpc0ludGVnZXIiLCJnZXRQYXJlbnRJdGVtRGF0YVBhdGgiLCJnZXRJdGVtIiwicm9vdEl0ZW0iLCJnZXRWYWx1ZUF0RGF0YVBhdGgiLCJnZXRQYXJlbnRJdGVtIiwiZ2V0TGFzdERhdGFQYXRoVG9rZW4iLCJnZXRMYXN0RGF0YVBhdGhOYW1lIiwiZ2V0TGFzdERhdGFQYXRoSW5kZXgiLCJpbmRleCIsInRlbXBvcmFyeUlkIiwic2V0VGVtcG9yYXJ5SWQiLCJkYXRhIiwiaWRLZXkiLCJpc1RlbXBvcmFyeUlkIiwiaWQiLCJpc1JlZmVyZW5jZSIsImNvbnRleHRzIiwiZ2V0IiwiY29udGV4dCIsImtleSIsImRlZmF1bHRWYWx1ZSIsIm9iamVjdCIsInZhbHVlIiwiaXNGdW5jdGlvbiIsInNldCIsIkRpdG9Db250ZXh0IiwiY29tcG9uZW50IiwiX2EiLCJwYXJlbnRJdGVtIiwib3B0aW9ucyIsImxvY2F0aW9uIiwicmVzb3VyY2UiLCJFbWl0dGVyTWl4aW4iLCJldmVudCIsImNhbGxiYWNrIiwiaXNBcnJheSIsImV2IiwiaXNQbGFpbk9iamVjdCIsImV2ZW50cyIsImNhbGxiYWNrcyIsIm9uIiwiYXJncyIsImVudHJ5IiwiY2IiLCJxdWV1ZSIsInJlc29sdmUiLCJuZXh0IiwicmVzdWx0IiwicmVzIiwiZXJyb3IiLCJ0YXJnZXQiLCJ0eXBlQ2hlY2tlcnMiLCJpc0Jvb2xlYW4iLCJpc051bWJlciIsImlzU3RyaW5nIiwiaXNEYXRlIiwiaXNPYmplY3QiLCJpc1JlZ0V4cCIsInRvQm9vbGVhbiIsInRvTnVtYmVyIiwidG9TdHJpbmciLCJ0b0RhdGUiLCJ0b0FycmF5IiwiYXNBcnJheSIsInRvT2JqZWN0IiwidG9SZWdFeHAiLCJ0eXBlQ29udmVydGVycyIsImlzTWF0Y2hpbmdUeXBlIiwidHlwZXMiLCJ0eXBlIiwiY29udmVydFR5cGUiLCJjb252ZXJ0ZXIiLCJoYXNSZXNvdXJjZSIsInNjaGVtYSIsImdldFJlc291cmNlIiwiZGVmYXVsdHMiLCJwYXJlbnQiLCJkZWZzIiwiZ2V0TWVtYmVyUmVzb3VyY2UiLCJwaWNrQnkiLCJEaXRvTWl4aW4iLCJ1aWQiLCJrZXlPckRhdGFQYXRoIiwiZGVmIiwiY29udmVydGVkIiwibmFtZSIsImxhYmVsaXplIiwiYnV0dG9uIiwidmVyYiIsImRyYWdnYWJsZSIsImZhbGxiYWNrIiwicXVlcnkiLCJjb21wb25lbnRzIiwiYnV0dG9ucyIsInNldHRpbmdzIiwicmVqZWN0IiwiRGl0b0NvbXBvbmVudCIsInVybCIsInNlYXJjaCIsIm1ldGhvZCIsImludGVybmFsIiwiY2hlY2tVc2VyIiwicmVzcG9uc2UiLCJlcXVhbHMiLCJjYWNoZSIsImNhY2hlUGFyZW50IiwibG9hZENhY2hlIiwiY2FjaGVLZXkiLCJsb2NhbGUiLCJmb3JtYXQiLCJmaWxlbmFtZSIsImEiLCJib2R5IiwiYWNjZXNzb3IiLCJ3YXRjaCIsImhhbmRsZXJzIiwiZXhwciIsImFkZEV2ZW50IiwiaHlwaGVuYXRlIiwiaGFzTGlzdGVuZXJzIiwicGFyZW50SGFzTGlzdGVuZXJzIiwiZ2V0Q29udGV4dCIsInBhcmFtcyIsImNyZWRpdGNhcmQiLCJpc0NyZWRpdENhcmQiLCJkZWNpbWFscyIsIm1hdGNoIiwiZW1haWwiLCJpc0VtYWlsIiwiaG9zdG5hbWUiLCJpc0hvc3RuYW1lIiwiZG9tYWluIiwiaXNEb21haW4iLCJpbnRlZ2VyIiwibWF4IiwibWluIiwicGFzc3dvcmQiLCJyYW5nZSIsInJlcXVpcmVkIiwiaXNVcmwiLCJWYWxpZGF0aW9uTWl4aW4iLCJub3RpZnkiLCJpc1ZhbGlkIiwicnVsZSIsInNldHRpbmciLCJ2YWxpZGF0b3IiLCJ2YWxpZGF0aW9ucyIsInZhbGlkYXRlIiwibWVzc2FnZSIsImFkZExhYmVsIiwiZXJyb3JzIiwiZm9jdXMiLCJnZXRTY2hlbWFBY2Nlc3NvciIsImdldFN0b3JlQWNjZXNzb3IiLCJ1aWRNYXAiLCJnZXRVaWQiLCJpdGVtSWQiLCJTY2hlbWFHcmFwaCIsIl9fcHVibGljRmllbGQiLCJzdWJHcmFwaCIsInBhcnQiLCJyZWxhdGVkRGF0YVBhdGgiLCJfYiIsIm5hbm9pZCIsImZsYXR0ZW4iLCJncmFwaCIsImVudHJpZXMiLCIkc2V0dGluZ3MiLCJzdWJLZXkiLCJzb3VyY2VTY2hlbWEiLCJjbGlwYm9hcmQiLCJyZWxhdGVkIiwicmVmZXJlbmNlIiwic291cmNlIiwicmVsYXRpb24iLCJ2YWx1ZXMiLCJyZW1vdmVJZCIsInJlZmVyZW5jZUlkIiwicmVmS2V5IiwicmV2VmFsdWUiLCJ0eXBlQ29tcG9uZW50cyIsInVua25vd25UeXBlUmVwb3J0ZWQiLCJyZWdpc3RlclR5cGVDb21wb25lbnQiLCJnZXRUeXBlQ29tcG9uZW50IiwiYWxsb3dOdWxsIiwiZm9yRWFjaFNjaGVtYSIsInNjaGVtYXMiLCJmb3JFYWNoU2NoZW1hQ29tcG9uZW50Iiwic29tZVNjaGVtYUNvbXBvbmVudCIsInJlc29sdmVTY2hlbWEiLCJ1bndyYXBNb2R1bGUiLCJpc1Byb21pc2UiLCJpc01vZHVsZSIsImtleXMiLCJyZXNvbHZlU2NoZW1hcyIsInVucmVzb2x2ZWRTY2hlbWFzIiwicmVzb2x2ZUl0ZW0iLCJpdGVtIiwicmVzb2x2ZVBhbmVscyIsInBhbmVscyIsInByb2Nlc3NWaWV3IiwiYXBpIiwicm91dGVzIiwiY2hpbGRyZW4iLCJwcm9jZXNzUm91dGVTY2hlbWEiLCJpc1NpbmdsZUNvbXBvbmVudFZpZXciLCJwcm9jZXNzQ29tcG9uZW50IiwicHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMiLCJsZXZlbCIsImdldFR5cGVPcHRpb25zIiwicHJvbWlzZXMiLCJwcm9jZXNzRm9ybXMiLCJmb3JtIiwiZm9ybXMiLCJyZXNvbHZlRm9ybSIsImhhc0Zvcm1TY2hlbWEiLCJoYXNNdWx0aXBsZUZvcm1TY2hlbWFzIiwiZ2V0Vmlld1NjaGVtYSIsInZpZXciLCJ2aWV3U2NoZW1hIiwidmlld0NvbXBvbmVudCIsImdldFZpZXdFZGl0UGF0aCIsImdldEZvcm1TY2hlbWFzIiwibW9kaWZ5Rm9ybSIsImNvbXBhY3QiLCJnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3JtcyIsImdldEl0ZW1Gb3JtU2NoZW1hIiwiaGFzTGFiZWwiLCJpc0NvbXBhY3QiLCJpc0lubGluZWQiLCJpc05lc3RlZCIsInNob3VsZE9taXRQYWRkaW5nIiwiZ2V0RGVmYXVsdFZhbHVlIiwiY2xvbmUiLCJpZ25vcmVNaXNzaW5nVmFsdWUiLCJ0eXBlT3B0aW9ucyIsImhhc0xhYmVscyIsImNoZWNrQ29tcG9uZW50cyIsInNldERlZmF1bHRzIiwicHJvY2Vzc1NjaGVtYURhdGEiLCJjb21wdXRlVmFsdWUiLCJyb290RGF0YSIsImNvbXB1dGUiLCJWdWUiLCJjbG9uZUl0ZW0iLCJjb3B5Iiwib3JkZXJLZXkiLCJwcm9jZXNzRGF0YSIsInNjaGVtYU9ubHkiLCJwcm9jZXNzZWREYXRhIiwid3JhcFByaW1pdGl2ZXMiLCJiIiwiaWQxIiwiaWQyIiwiZXhjbHVkZSIsInByb2Nlc3MiLCJwcm9jZXNzVmFsdWUiLCJwcm9jZXNzQmVmb3JlIiwicHJvY2Vzc0FmdGVyIiwicHJvY2Vzc0NvbXBvbmVudHMiLCJnZXREYXRhUGF0aCIsImNvbXBvbmVudFNjaGVtYSIsImNvbXBvbmVudERhdGFQYXRoIiwicHJvY2Vzc0l0ZW0iLCJwcm9jZXNzZWRJdGVtIiwidGFiIiwicGFuZWwiLCJnZXRBbGxQYW5lbFNjaGVtYXMiLCJnZXROYW1lZFNjaGVtYXMiLCJkZXNjcmlwdGlvbnMiLCJhcnJheSIsInRvU2NoZW1hIiwiY2FtZWxpemUiLCJnZXRCdXR0b25TY2hlbWFzIiwiZ2V0VHlwZSIsInNjaGVtYU9yVHlwZSIsImdldFNvdXJjZVR5cGUiLCJfYyIsImdldFBhbmVsU2NoZW1hIiwidGFiQ29tcG9uZW50IiwiZ2V0UGFuZWxTY2hlbWFzIiwic2NoZW1hQ29tcG9uZW50IiwiaXNPYmplY3RTb3VyY2UiLCJpc0xpc3RTb3VyY2UiLCJnZXRJdGVtSWQiLCJnZXRJdGVtVWlkIiwiVHlwZU1peGluIiwicGFyc2UiLCJsYWJlbCIsIm5hdGl2ZUZpZWxkIiwidGV4dEZpZWxkIiwiYXR0cmlidXRlcyIsImxpc3RlbmVycyIsImFkZCIsImVsZW1lbnQiLCJtaXhpbnMiLCJjb21wIiwiY3RvciIsIkRpdG9Vc2VyIiwicm9sZXMiLCJyb2xlIiwiU2NoZW1hUGFyZW50TWl4aW4iLCJzY2hlbWFDb21wb25lbnRzIiwiVmFsaWRhdG9yTWl4aW4iLCJpdCIsIlJvdXRlTWl4aW4iLCJ0byIsImZyb20iLCJtYXRjaGVkIiwiaSIsInJlY29yZCIsImJyZWFkY3J1bWIiLCJyb3V0ZUNvbXBvbmVudHMiLCJvayIsInRlbXBsYXRlUGF0aCIsInJvb3RQYXRoIiwiZ2V0Q29tbW9uUHJlZml4IiwicmVuZGVyIiwiX3ZtIiwiX2giLCJzdGF0aWNSZW5kZXJGbnMiLCJfX3Z1ZTJfc2NyaXB0IiwiaXNMb2FkaW5nIiwiRG9tTWl4aW4iLCJyZW1vdmUiLCJoYW5kbGVyIiwiYWRkRXZlbnRzIiwiJGV2ZW50IiwiZXJyIiwidGl0bGUiLCJ0ZXh0IiwibG9nIiwic3RyaXBUYWdzIiwibm90aWZpY2F0aW9ucyIsImR1cmF0aW9uRmFjdG9yIiwiZHVyYXRpb24iLCJhZGRpdGlvbmFsQ29tcG9uZW50cyIsInJlZGlyZWN0QWZ0ZXJMb2dpbiIsImxvZ2luRGF0YSIsInVzZXIiLCJEaXRvVmlldyIsInJvdXRlIiwiU3Bpbm5lciIsIlB1bHNlTG9hZGVyIiwic2l6ZSIsImNvbG9yIiwicHJvcHMiLCJQdWxsZG93bk1peGluIiwic3RhcnRUaW1lIiwib3BlbiIsImRpYWxvZ0RhdGEiLCJjb250ZW50IiwiYXNPYmplY3QiLCJwcmVmaXgiLCJzdWZmaXgiLCJJdGVtTWl4aW4iLCJleHRlbmRlZCIsIml0ZW1MYWJlbCIsImZvcm1MYWJlbCIsImdldEZvcm1MYWJlbCIsImNvbHVtbnMiLCJoYWRMYWJlbCIsIlRyYW5zaXRpb25IZWlnaHQiLCJwYW5lIiwiY3VycmVudFRhYiIsImZpcnN0IiwiZGVmYXVsdFRhYiIsImRhdGFQYXRoT3JOYW1lIiwiZXhwYW5kIiwiY29tcG9uZW50c0J5RGF0YVBhdGgiLCJkYXRhUGF0aHMiLCJjaGVjayIsImZpZWxkIiwidW5tYXRjaGVkIiwiZXJycyIsImZ1bGxEYXRhUGF0aCIsImRhdGFQYXRoUGFydHMiLCJmb3VuZCIsInByb3BlcnR5Iiwic3ViQ29tcG9uZW50cyIsInJlZ2lzdHJ5IiwiZW50cmllc0J5RGF0YVBhdGgiLCJfcmVmIiwibmVzdGVkRGF0YVBhdGgiLCJzdG9yZSIsInBhcnNlRnJhY3Rpb24iLCJkaXZpZGVuZCIsImRpdmlzb3IiLCJ3aWR0aCIsImRpc2FibGVkIiwiY29udGFpbmVyQ2xhc3MiLCJiYXNpcyIsImdyb3ciLCJzaHJpbmsiLCJiYXNpc0lzQXV0byIsInRhYlNjaGVtYSIsImJ1dHRvblNjaGVtYSIsImJ1dHRvbkRhdGFQYXRoIiwibm9kZSIsImNhcGl0YWxpemUiLCJjbGlwYm9hcmREYXRhIiwicGFzdGUiLCJyZXBvcnQiLCJqc29uIiwiX2QiLCJkZWluZGVudCIsIiRzY2hlbWEiLCJfZSIsIkxvYWRpbmdNaXhpbiIsInVwZGF0ZVJvb3QiLCJ1cGRhdGVWaWV3IiwiUmVzb3VyY2VNaXhpbiIsImFtb3VudCIsInBhZ2UiLCJzdGFydCIsInZlcmJzIiwiY2xlYXIiLCJsb2FkaW5nT3B0aW9ucyIsInJlcXVlc3QiLCJzZXREYXRhIiwib25TdWNjZXNzIiwib25FcnJvciIsIm5vdGlmeVN1Y2Nlc3MiLCJub3RpZnlFcnJvciIsImlzQ3JlYXRpbmciLCJwcm92aWRlc0RhdGEiLCJtZXJnZSIsImRhdGFQYXJ0cyIsInBhdGhQYXJ0cyIsInJvdXRlUGFydHMiLCJsYXN0RGF0YVBhcnQiLCJsIiwiZGF0YVBhcnQiLCJtYWluU2NoZW1hQ29tcG9uZW50IiwibmV3VmFsdWUiLCJvbGRWYWx1ZSIsInByZXNlbnQiLCJjbG9zZUZvcm0iLCJnZXRWZXJiIiwiYnV0dHRvblJlc291cmNlIiwic3VjY2VzcyIsIl9yZXNvdXJjZSIsIl9tZXRob2QiLCJEaXRvRm9ybSIsInNjb3BlIiwibmF2aWdhdGUiLCJQYWdpbmF0aW9uIiwiT3JkZXJlZE1peGluIiwib2xkSW5kZXgiLCJuZXdJbmRleCIsImxpc3QiLCJwYWdpbmF0aW9uUmFuZ2UiLCJvZmZzZXQiLCJWdWVEcmFnZ2FibGUiLCJjaGlsZHJlblNjaGVtYSIsImVkaXRQYXRoIiwiY2hpbGRyZW5PcGVuIiwibnVtQ2hpbGRyZW4iLCJjcmVhdGFibGUiLCJlZGl0YWJsZSIsImNvbHVtbiIsIm9yZGVyIiwiZXNjYXBlSHRtbCIsImgiLCJUeXBlQ29tcG9uZW50IiwiZGVmaW5pdGlvbiIsIiQkYSIsIiQkZWwiLCIkJGMiLCIkJHYiLCIkJGkiLCJEYXRhTWl4aW4iLCJyZXNvbHZlQ291bnRlciIsImFzeW5jRW50cnkiLCJyZXNvbHZlZERhdGEiLCJsb2FkIiwiT3B0aW9uc01peGluIiwiY29udmVydFZhbHVlIiwiY29udmVydCIsImZpbHRlciIsImRlYm91bmNlIiwiZGVib3VuY2VBc3luYyIsIm9wdGlvbiIsImdyb3VwZWQiLCJyZXN1bHRzIiwiZ3JvdXAiLCJmaW5kT3B0aW9uIiwiZ3JvdXBCeSIsIm9wdGlvblZhbHVlIiwib3B0aW9uTGFiZWwiLCJwcm9jZXNzUmVsYXRlIiwiZmxhc2siLCJDb2RlRmxhc2siLCJjaGFuZ2VkIiwiaWdub3JlV2F0Y2giLCJpZ25vcmVVcGRhdGUiLCJvbkNoYW5nZSIsIm9uRm9jdXMiLCJvbkJsdXIiLCJzZXRDb2RlIiwiY29kZSIsInNldFZhbHVlIiwiVHJpZ2dlciIsIlNrZXRjaFBpY2tlciIsInRpbnljb2xvciIsImZvY3VzZWQiLCJEYXRlUGlja2VyIiwiVGltZVBpY2tlciIsIkRhdGVUaW1lUGlja2VyIiwiU291cmNlTWl4aW4iLCJkZWZhdWx0U29ydCIsImRpcmVjdGlvbiIsImNvbGxhcHNpYmxlIiwibGlzdERhdGEiLCJsZW5ndGgiLCJvbkNvbXBsZXRlIiwib3BlbmVkIiwiY2FsbE9uQ29tcGxldGUiLCJyb3V0ZUNvbXBvbmVudCIsImlubGluZWQiLCJwYXJhbSIsIm1ldGEiLCJmb3JtTWV0YSIsImNoaWxkUm91dGVzIiwiZ2V0UGF0aFdpdGhQYXJhbSIsInNvdXJjZVBhdGgiLCJmb3JtUm91dGUiLCJmbGF0Um91dGVzIiwic3ViUm91dGVzIiwiY2hpbGRSb3V0ZSIsImZpbHRlckNvbXBvbmVudHMiLCJkYXRlRm9ybWF0IiwiZ2V0RmlsdGVyc1BhbmVsIiwiZmlsdGVycyIsInByb3h5IiwicGFyc2VGaWx0ZXJzRGF0YSIsImdldEZpbHRlcnNDb21wb25lbnRzIiwiZm9ybWF0RmlsdGVyc0RhdGEiLCJjb21wcyIsImdldENvbXBvbmVudHNGb3JGaWx0ZXIiLCJmaWx0ZXJzRGF0YSIsImdldExpc3RDb21wb25lbnQiLCJvYmoiLCJmaWx0ZXJzRGF0YVBhdGgiLCJpY29uIiwiaXNBY3RpdmUiLCJvbkNsaWNrIiwiRWRpdG9yQ29udGVudCIsIkVkaXRvck1lbnVCYXIiLCJJY29uIiwiY29tbWFuZCIsIm1hcmtCdXR0b25zIiwiYmFzaWNOb2RlQnV0dG9ucyIsIm90aGVyTm9kZUJ1dHRvbnMiLCJ0b29sQnV0dG9ucyIsImVuYWJsZVJ1bGVzIiwic2V0VmFsdWVEZWJvdW5jZWQiLCJnZXRWYWx1ZSIsIm9uVXBkYXRlIiwiZ2V0SFRNTCIsIkVkaXRvciIsImdldFBvaW50IiwieCIsInkiLCJwcmV2WSIsImhlaWdodCIsIm1vdXNlbW92ZSIsImF0dHJzIiwiZGlhbG9nQ29tcG9uZW50IiwiaHJlZiIsIm1hcmtzIiwibm9kZXMiLCJ0b29scyIsIkJvbGQiLCJJdGFsaWMiLCJVbmRlcmxpbmUiLCJTdHJpa2UiLCJTbWFsbCIsIkNvZGUiLCJMaW5rV2l0aFRpdGxlIiwiQmxvY2txdW90ZSIsIkNvZGVCbG9jayIsIkhhcmRCcmVhayIsIkhlYWRpbmciLCJIb3Jpem9udGFsUnVsZSIsIkxpc3RJdGVtIiwiQnVsbGV0TGlzdCIsIk9yZGVyZWRMaXN0IiwiSGlzdG9yeSIsImV4dGVuc2lvbiIsInNldHRpbmdzTmFtZSIsImFkZEJ1dHRvbiIsImlnbm9yZUFjdGl2ZSIsImRlc2NyaXB0aW9uIiwic2V0dGluZ05hbWUiLCJ1bmRlcnNjb3JlIiwiYXR0ciIsIk1hcmsiLCJ0b2dnbGVNYXJrIiwiTGluayIsImRvbSIsIlZ1ZU11bHRpc2VsZWN0IiwicGxhY2Vob2xkZXIiLCJzZWFyY2hhYmxlIiwidGFnZ2FibGUiLCJ0YWciLCJOdW1iZXJNaXhpbiIsInN0ZXAiLCJJbnB1dEZpZWxkIiwiJCRzZWxlY3RlZFZhbCIsIm8iLCJ2YWwiLCJvcHQiLCJTd2l0Y2hCdXR0b24iLCJtYXNrZWRQYXNzd29yZCIsImhhc0VkaXRhYmxlRm9ybXMiLCJmb3JtYXRGaWxlU2l6ZSIsImZpbGVzaXplIiwiZmlsZSIsIlZ1ZVVwbG9hZCIsImFzRmlsZXMiLCJhY2NlcHQiLCJtYXhTaXplIiwicGFyc2VGaWxlU2l6ZSIsInRvdGFsIiwibmV3RmlsZSIsIm9sZEZpbGUiLCJ4aHIiLCJmaWxlcyIsInVwbG9hZCIsImxvZ2dlZERlcHJlY2F0aW9ucyIsImRlcHJlY2F0ZSIsIlZ1ZVJvdXRlciIsIlZ1ZU1vZGFsIiwiVnVlTm90aWZpY2F0aW9ucyIsIkRpdG9BZG1pbiIsImVsIiwiZGl0byIsInZpZXdzIiwiZGVmYXVsdEZvcm1hdHMiLCJnZXRBcGlVcmwiLCJpc0FwaVJlcXVlc3QiLCJ1c2VycyIsInBhcmVudFBhdGgiLCJEaXRvUm9vdCIsImNyZWF0ZUVsZW1lbnQiLCJSZXF1ZXN0RXJyb3IiLCJoZWFkZXJzIiwiaXNBYnNvbHV0ZVVybCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsTUFBZUEsS0FBQTtBQUFBLEVBQ2IsT0FBTztBQUFBLEVBQ1AsaUJBQWlCLENBQUU7QUFBQSxFQUNuQixN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QUFBQyxLQUFBak8sRUFBQSxVQUFBLGVBQUE7QUFBQSxFQUNBLFlBQUEsRUFBQSxrQkFBQTBRLEdBQUE7QUFBQSxFQUNBLFFBQUEsQ0FBQVAsRUFBQTtBQUFBLEVBRUEsVUFBQTtBQUNBLFdBQUE7QUFBQSxNQUNBLGtCQUFBLE1BQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsUUFBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBQUEsSUFDQSxRQUFBLEVBQUEsTUFBQSxRQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsVUFBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLE1BQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxLQUFBO0FBQUEsSUFDQSxNQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsT0FBQSxDQUFBLEdBQUE7QUFBQSxJQUNBLE9BQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxPQUFBLENBQUEsR0FBQTtBQUFBLElBQ0EsT0FBQSxFQUFBLE1BQUEsQ0FBQSxRQUFBLE1BQUEsR0FBQSxTQUFBLEtBQUE7QUFBQSxJQUNBLFNBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxVQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsV0FBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLGFBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxnQkFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLFlBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxZQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLE9BQUE7QUFDQSxVQUFBLEVBQUEsTUFBQXhWLE1BQUEsS0FBQTtBQUNBLFdBQUE7QUFBQSxNQUVBLEdBQ0FBLEtBQUFZLEVBQUFaLENBQUEsSUFDQUEsRUFBQSxLQUFBLE1BQUEsS0FBQSxPQUFBLElBQ0FBO0FBQUEsTUFFQSxvQkFBQSxDQUFBO0FBQUEsTUFDQSxlQUFBLENBQUE7QUFBQSxNQUNBLGdCQUFBLENBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUFBLElBQ0Esa0JBQUE7QUFFQSxhQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsd0JBQUE7QUFJQSxhQUFBLEtBQUEsYUFBQSxPQUFBLEtBQUEsUUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGVBQUE7QUFDQSxZQUFBNEwsSUFBQWlGLEdBQUEsS0FBQSxPQUFBLFFBQUEsRUFBQTtBQUNBLGlCQUFBbUYsS0FBQSxLQUFBO0FBQ0EsUUFBQXBLLEVBQUEsS0FBQSxHQUFBb0ssRUFBQSxZQUFBO0FBRUEsYUFBQXBLO0FBQUEsSUFDQTtBQUFBLElBRUEsT0FBQTtBQUNBLGFBQUFxRSxFQUFBLEtBQUEsT0FBQSxJQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQTs7QUFDQSxZQUFBZ0csTUFBQWpWLElBQUEsS0FBQSxPQUFBLFNBQUEsZ0JBQUFBLEVBQUEsTUFBQSxPQUFBLE1BQ0E4TyxJQUFBbUcsS0FBQSxLQUFBLGFBQUEsS0FBQSxLQUFBQSxFQUFBLElBQ0FBLE1BQ0ExTSxJQUFBLEtBQUEsZUFBQSxnQkFBQUEsRUFBQSxTQUFBO0FBQ0EsYUFBQXVHLE1BQUFtRyxLQUVBLEtBQUEsUUFBQSxRQUFBLEVBQUEsTUFBQW5HLEVBQUEsQ0FBQSxHQUVBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGFBQUE7QUFDQSxVQUFBLEtBQUEsTUFBQTtBQUNBLFlBQUFvRyxJQUFBO0FBQ0EsbUJBQUFwRyxLQUFBLE9BQUEsT0FBQSxLQUFBLElBQUEsR0FBQTtBQUNBLGdCQUFBLEVBQUEsWUFBQXFHLEVBQUEsSUFBQXJHO0FBQ0EsY0FBQWxQLEVBQUF1VixDQUFBLElBQ0FBLEVBQUEsS0FBQSxNQUFBLEtBQUEsT0FBQSxJQUNBQTtBQUVBLG1CQUFBckc7QUFFQSxVQUFBb0csTUFDQUEsSUFBQXBHO0FBQUEsUUFFQTtBQUNBLGVBQUFvRztBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxZQUFBOztBQUNBLGNBQUFsVixJQUFBLEtBQUEsV0FBQSxnQkFBQUEsRUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBO0FBQ0EsYUFBQSxLQUFBLFlBQUEsRUFBQSxRQUFBLFVBQUEsWUFBQSxJQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUE7QUFDQSxhQUFBO0FBQUEsUUFDQSxTQUFBLEtBQUEsT0FBQTtBQUFBLFFBQ0EsR0FBQSxLQUFBLFlBQUEsRUFBQSxRQUFBLGFBQUEsWUFBQSxJQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQVFBLE9BQUE7QUFDQSxhQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxXQUFBO0FBQ0EsYUFBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUE7QUFDQSxhQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxnQkFBQTtBQUNBLGFBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGFBQUE7QUFDQSxhQUFBdkIsR0FBQSxLQUFBLFVBQUEsS0FBQSxVQUFBLEVBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxZQUFBO0FBQ0EsYUFBQSxLQUFBO0FBQUEsUUFDQSxLQUFBLGtCQUFBLEtBQUEsY0FBQSxLQUFBLE1BQUEsS0FBQSxPQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUE7QUFDQSxhQUFBLEtBQUEsY0FBQSxDQUFBNFMsTUFBQUEsRUFBQSxPQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsWUFBQTtBQUNBLGFBQUEsS0FBQSxjQUFBLENBQUFBLE1BQUFBLEVBQUEsU0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUE7QUFDQSxhQUFBLEtBQUEsZUFBQSxDQUFBQSxNQUFBQSxFQUFBLE9BQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxjQUFBO0FBQ0EsYUFBQSxLQUFBLGVBQUEsQ0FBQUEsTUFBQUEsRUFBQSxXQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsVUFBQTtBQUNBLGFBQUEsQ0FBQSxDQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxXQUFBO0FBQ0EsYUFBQSxDQUFBLENBQUEsS0FBQSxTQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBO0FBQ0EsYUFBQSxDQUFBLEtBQUEsV0FBQSxDQUFBLENBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGNBQUE7QUFDQSxZQUFBLEVBQUEsWUFBQXBOLE1BQUEsS0FBQTtBQUNBLGFBQUEsQ0FBQSxDQUFBQSxLQUFBLE9BQUEsS0FBQUEsQ0FBQSxFQUFBLFNBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxRQUFBNkQsR0FBQSxVQUFBO0FBQUEsTUFDQSxVQUFBO0FBQ0EsZUFBQSxDQUFBLEtBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQSxDQUFBO0FBQUEsSUFFQSxhQUFBO0FBQ0EsYUFBQSxPQUFBLE9BQUEsS0FBQSxrQkFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFFBQUE7QUFDQSxhQUFBLE9BQUEsT0FBQSxLQUFBLGFBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxTQUFBO0FBQ0EsYUFBQSxPQUFBLE9BQUEsS0FBQSxjQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsdUJBQUE7QUFDQSxhQUFBLEtBQUEsdUJBQUEsS0FBQSxrQkFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGtCQUFBO0FBQ0EsYUFBQSxLQUFBLHVCQUFBLEtBQUEsYUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLG1CQUFBO0FBQ0EsYUFBQSxLQUFBLHVCQUFBLEtBQUEsY0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQ0EsU0FBQSxVQUFBLEVBQUEsR0FDQSxLQUFBLGtCQUFBLEdBRUEsS0FBQSxTQUFBLFVBQUEsS0FBQSxxQkFBQSxHQUNBLEtBQUEsVUFBQSxZQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsZ0JBQUE7QUFDQSxTQUFBLFVBQUEsU0FBQSxHQUNBLEtBQUEsVUFBQSxFQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsU0FBQTtBQUFBLElBQ0Esd0JBQUFwSyxHQUFBeUksR0FB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TUFBQSxRQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsTUFBQSxFQUFBLE1BQUEsQ0FBQSxRQUFBLEtBQUEsR0FBQSxVQUFBLEdBQUE7QUFBQSxJQUNBLE1BQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxPQUFBLEVBQUEsTUFBQSxRQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsUUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLFFBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxVQUFBLEVBQUEsTUFBQSxTQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsZ0JBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUNBLFdBQUE7QUFBQSxNQUNBLFFBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUFBLElBQ0EsVUFBQTtBQUNBLGFBQUEsSUFBQXZFLEVBQUEsTUFBQSxFQUFBLFFBQUEsS0FBQSxRQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQTtBQUNBLGFBQUF3TCxFQUFBLEtBQUEsTUFBQSxLQUFBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxXQUFBO0FBQ0EsWUFBQSxFQUFBLFFBQUF4SSxFQUFBLElBQUEsTUFDQSxFQUFBLE9BQUF1TixFQUFBLElBQUF2TjtBQUNBLGFBQ0F1TixNQUFBLE9BQ0EsQ0FBQSxDQUFBQSxLQUFBLEtBQUEsWUFBQSxpQkFBQSxLQUFBO0FBQUEsSUFFQTtBQUFBLElBRUEsUUFBQTtBQUNBLGFBQUEsS0FBQSxXQUFBLEtBQUEsU0FBQSxLQUFBLE1BQUEsSUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBO0FBRUEsYUFBQSxLQUFBLFNBQUEsS0FBQSxXQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUF4SSxFQUFBLFNBQUE7QUFBQSxNQUNBLE1BQUEsQ0FBQSxRQUFBLE1BQUE7QUFBQSxNQUNBLFVBQUE7QUFDQSxlQUFBLEtBQUEsWUFBQTtB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O0FBQUEsTUFDQSxhQUFBO0FBQUEsTUFDQSxZQUFBO0FBQUEsTUFDQSxXQUFBO0FBQUEsTUFDQSxRQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLFFBQUE7QUFJQSxZQUFBSSxJQUFBLEtBQUEsU0FBQSxHQUNBLEVBQUEsWUFBQVMsR0FBQSxjQUFBQyxFQUFBLElBQUE7QUFDQSxhQUFBO0FBQUEsUUFDQSxHQUFBVjtBQUFBLFFBQ0EsUUFBQVMsSUFBQVQsRUFBQSxTQUFBQSxFQUFBO0FBQUEsUUFDQSxXQUFBUyxJQUFBVCxFQUFBLFVBQUFBLEVBQUE7QUFBQSxRQUNBLFFBQUFVLElBQUFWLEVBQUEsU0FBQUEsRUFBQTtBQUFBLFFBQ0EsV0FBQVUsSUFBQVYsRUFBQSxZQUFBQSxFQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFNBQUE7QUFDQSxhQUFBLEtBQUE7QUFBQSxRQUNBLEtBQUE7QUFBQSxRQUdBLEtBQUEsUUFBQSxFQUFBLE1BQUEsS0FBQSxLQUFBO0FBQUEsUUFDQSxLQUFBO0FBQUEsTUFDQSxLQUFBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxnQkFBQTtBQUNBLGFBQUE5STtBQUFBLFFBQ0F5SjtBQUFBLFVBQ0E7QUFBQSxZQUNBLFFBQUE7QUFBQSxjQUNBLE1BQUE7QUFBQSxjQUNBLFFBQUE7QUFBQSxnQkFDQSxPQUFBLE1BQUEsS0FBQSxPQUFBO0FBQUEsY0FDQTtBQUFBLFlBQ0E7QUFBQSxZQUVBLFFBQUEsQ0FBQSxLQUFBLGNBQUE7QUFBQSxjQUNBLE1BQUE7QUFBQSxjQUVBLFdBQUE7QUFBQSxjQUNBLFFBQUE7QUFBQSxnQkFDQSxPQUFBLENBQUEsRUFBQSxXQUFBblYsRUFBQSxNQUFBQSxFQUFBLE9BQUE7QUFBQSxjQUNBO0FBQUEsWUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBLEtBQUEsT0FBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsV0FBQTtBQUNBLGFBQUEsS0FBQSxlQUFBLEtBQUE7QUFB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Q0EsV0FBQTtBQUFBLE1BQ0EsUUFBQTtBQUFBLE1BQ0EsUUFBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQUEsSUFDQSxRQUFBO0FBQ0EsYUFBQSxLQUFBLE9BQUEsU0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFNBQUE7QUFDQSxhQUFBO0FBQUEsUUFDQSxRQUFBLEtBQUEsVUFBQSxRQUFBLEtBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQTtBQUNBLGFBQUEsS0FBQSxXQUFBLFNBQUE7QUFBQSxRQUNBLE1BQUE7QUFBQSxRQUNBLFFBQUE7QUFBQSxRQUNBLFdBQUE7QUFBQSxRQUNBLFFBQUE7QUFBQSxRQUNBLE9BQUE7QUFBQSxRQUNBLE1BQUE7QUFBQSxRQUNBLE1BQUE7QUFBQSxVQUNBLFNBQUEsQ0FBQW1PLE1BQUEsS0FBQSxZQUFBQSxDQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0EsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLG1CQUFBO0FBQ0EsYUFBQSxLQUFBLFdBQUEsU0FBQTtBQUFBLFFBQ0EsV0FBQTtBQUFBLFVBR0EsY0FBQSxNQUNBLEtBQUEsaUJBQUEsS0FBQSxDQUFBL2MsTUFBQUEsRUFBQSxRQUFBO0FBQUEsUUFDQTtBQUFBLFFBQ0EsU0FBQTtBQUFBLFVBQ0EsTUFBQTtBQUFBLFVBQ0EsUUFBQSxDQUFBLEdBQUEsR0FBQSxHQUFBLEdBQUEsR0FBQSxDQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0EsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLG1CQUFBO0FBQ0EsYUFBQSxLQUFBLFdBQUEsU0FBQTtBQUFBLFFBQ0EsWUFBQTtBQUFBLFFBQ0EsYUFBQTtBQUFBLFFBQ0EsWUFBQTtBQUFBLFFBQ0EsV0FBQTtBQUFBLE1BQ0EsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGNBQUE7QUFDQSxhQUFBLEtBQUEsV0FBQSxTQUFBO0FBQUEsUUFDQSxNQUFBO0FBQUEsUUFDQSxNQUFBO0FBQUEsTUFDQSxDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsaUJB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LENBQUF0YyxNQUFBLEtBQUEsa0JBQUFBLENBQUEsS0FBQSxLQUFBLGFBQUFBLENBQUE7QUFBQSxRQUNBLEVBR0EsT0FBQSxDQUFBQSxNQUFBQSxDQUFBLElBQ0EsS0FBQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLElBQUE0YyxHQUFBO0FBR0EsYUFBQSxnQkFBQSxLQUFBLFlBQ0FBLEtBQUEsQ0FBQSxHQUFBLElBQUEsQ0FBQTVjLE1BQUEsS0FBQSxrQkFBQUEsQ0FBQSxDQUFBLElBQ0EsS0FBQSxrQkFBQTRjLENBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUE7QUFDQSxhQUFBLEtBQUEsbUJBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUExVSxFQUFBLFlBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLFNBQUE7QUFBQSxJQUNBLENBQUE7QUFBQSxJQUVBLFlBQUFBLEVBQUEsY0FBQTtBQUFBLE1BQ0EsTUFBQTtBQUFBLE1BQ0EsU0FBQTtBQUFBLElBQ0EsQ0FBQTtBQUFBLElBRUEsVUFBQUEsRUFBQSxZQUFBO0FBQUEsTUFDQSxNQUFBO0FBQUEsTUFDQSxTQUFBO0FBQUEsSUFDQSxDQUFBO0FBQUEsSUFFQSxVQUFBQSxFQUFBLFlBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLFNBQUE7QUFBQSxJQUNBLENBQUE7QUFBQSxJQUVBLGNBQUE7QUFDQSxZQUFBLEVBQUEsYUFBQWtjLEdBQUEsWUFBQUMsR0FBQSxVQUFBQyxFQUFBLElBQUEsS0FBQTtBQUNBLGFBQUFGLE1BQ0FDLEtBQUFDLElBQUEsd0JBQ0FELElBQUEsMkJBQ0E7QUFBQSxJQUVBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUNBLElBQUEsS0FBQSxhQUdBLEtBQUEsTUFBQTtBQUFBLEVBRUE7QUFBQSxFQUVBLFNBQUE7QUFBQSxJQUVBLGVBQUE7QUFFQSxhQUFBO0FBQUEsUUFDQSxPQUFBLEtBQUE7QUFBQSxRQUNBLE1BQUEsS0FBQTtBQUFBLFFBQ0EsT0FBQSxLQUFBO0FBQUEsTUFDQTtBQUFB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QUVBLE9BQUE7QUFDQSxXQUFBO0FBQUEsTUFDQSxTQUFBLENBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUFBLElBQ0EsU0FBQTtBQUNBLGFBQUEsS0FBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQTtBQUNBLGFBQUE2SyxHQUFBLEtBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUFwZCxFQUFBLFlBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLFNBQUE7QUFBQSxNQUVBLFVBQUE7QUFBQSxJQUNBLENBQUE7QUFBQSxJQUVBLFlBQUFBLEVBQUEsY0FBQTtBQUFBLE1BQ0EsTUFBQSxDQUFBLE9BQUEsUUFBQSxNQUFBO0FBQUEsSUFDQSxDQUFBO0FBQUEsSUFFQSxRQUFBQSxFQUFBLFVBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLElBQUFxZCxHQUFBO0FBQ0EsZUFBQTFrQixFQUFBMGtCLENBQUEsSUFBQUEsRUFBQSxLQUFBLEdBQUEsSUFBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQSxDQUFBO0FBQUEsSUFFQSxTQUFBcmQsRUFBQSxXQUFBO0FBQUEsTUFDQSxNQUFBLENBQUEsUUFBQSxNQUFBO0FBQUEsTUFDQSxJQUFBc2QsR0FBQTtBQUNBLGVBQUFBLElBQUFDLEdBQUFELENBQUEsSUFBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBLENBQUE7QUFBQSxJQUVBLFdBQUF0ZCxFQUFBLGFBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLFNBQUE7QUFBQSxNQUNBLElBQUEvRCxHQUFBO0FBQ0EsZUFBQUEsS0FBQSxLQUFBLE1BQUEsU0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBLENBQUE7QUFBQSxJQUVBLFdBQUErRCxFQUFBLGFBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLFNBQUE7QUFBQSxJQUNBLENBQUE7QUFBQSxJQUVBLGdCQUFBO0FBQ0EsYUFBQSxLQUFBLFFBQUEsVUFDQSxFQUFBLEtBQUEsT0FBQSxVQUFBLEtBQUEsT0FBQTtBQUFBLElBQ0E7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
|
|
8836
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi5lcy5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcFN0YXRlLmpzIiwiLi4vc3JjL3V0aWxzL2RhdGEuanMiLCIuLi9zcmMvRGl0b0NvbnRleHQuanMiLCIuLi9zcmMvbWl4aW5zL0VtaXR0ZXJNaXhpbi5qcyIsIi4uL3NyYy91dGlscy90eXBlLmpzIiwiLi4vc3JjL3V0aWxzL3Jlc291cmNlLmpzIiwiLi4vc3JjL21peGlucy9EaXRvTWl4aW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2NyZWRpdGNhcmQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2RlY2ltYWxzLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19lbWFpbC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9faG9zdG5hbWUuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2RvbWFpbi5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9faW50ZWdlci5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fbWF4LmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19taW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3Bhc3N3b3JkLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19yYW5nZS5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fcmVxdWlyZWQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3VybC5qcyIsIi4uL3NyYy9taXhpbnMvVmFsaWRhdGlvbk1peGluLmpzIiwiLi4vc3JjL3V0aWxzL2FjY2Vzc29yLmpzIiwiLi4vc3JjL3V0aWxzL3VpZC5qcyIsIi4uL3NyYy91dGlscy9TY2hlbWFHcmFwaC5qcyIsIi4uL3NyYy91dGlscy9zY2hlbWEuanMiLCIuLi9zcmMvbWl4aW5zL1R5cGVNaXhpbi5qcyIsIi4uL3NyYy9EaXRvQ29tcG9uZW50LmpzIiwiLi4vc3JjL0RpdG9Vc2VyLmpzIiwiLi4vc3JjL21peGlucy9TY2hlbWFQYXJlbnRNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL1JvdXRlTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVmlldy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WaWV3LnZ1ZSIsIi4uL3NyYy9taXhpbnMvRG9tTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUm9vdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Sb290LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9NZW51LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b01lbnUudnVlIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1zcGlubmVyL3NyYy9QdWxzZUxvYWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtc3Bpbm5lci9zcmMvUHVsc2VMb2FkZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0hlYWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9IZWFkZXIudnVlIiwiLi4vc3JjL21peGlucy9QdWxsZG93bk1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0FjY291bnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQWNjb3VudC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRGlhbG9nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0RpYWxvZy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FbGVtZW50LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9MYWJlbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9MYWJlbC52dWUiLCIuLi9zcmMvbWl4aW5zL0l0ZW1NaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWEudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWFJbmxpbmVkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NjaGVtYUlubGluZWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZS52dWUiLCIuLi9zcmMvdXRpbHMvbWF0aC5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Db250YWluZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ29udGFpbmVyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVsLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lbHMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZWxzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9CdXR0b25zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0J1dHRvbnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VkaXRCdXR0b25zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VkaXRCdXR0b25zLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9DcmVhdGVCdXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ3JlYXRlQnV0dG9uLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9DbGlwYm9hcmQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ2xpcGJvYXJkLnZ1ZSIsIi4uL3NyYy9taXhpbnMvTG9hZGluZ01peGluLmpzIiwiLi4vc3JjL21peGlucy9SZXNvdXJjZU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRm9ybS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRm9ybU5lc3RlZC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRXJyb3JzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Vycm9ycy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NvcGVzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Njb3Blcy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFnaW5hdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYWdpbmF0aW9uLnZ1ZSIsIi4uL3NyYy9taXhpbnMvT3JkZXJlZE1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RyZWVJdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RyZWVJdGVtLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJsZUhlYWQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVIZWFkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJsZUNlbGwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVDZWxsLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WTm9kZS52dWUiLCIuLi9zcmMvVHlwZUNvbXBvbmVudC5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVCdXR0b24udnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDaGVja2JveC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ2hlY2tib3gudnVlIiwiLi4vc3JjL21peGlucy9EYXRhTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL09wdGlvbnNNaXhpbi5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ2hlY2tib3hlcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ2hlY2tib3hlcy52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZUNvZGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNvZGUudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDb2xvci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ29sb3IudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDb21wb25lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNvbXBvbmVudC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZUNvbXB1dGVkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVDb21wdXRlZC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZURhdGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZURhdGUudnVlIiwiLi4vc3JjL21peGlucy9Tb3VyY2VNaXhpbi5qcyIsIi4uL3NyYy91dGlscy9maWx0ZXIuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUxpc3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUxpc3QudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVMYWJlbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlTGFiZWwudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVNYXJrdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZU1hcmt1cC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZU11bHRpc2VsZWN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVNdWx0aXNlbGVjdC52dWUiLCIuLi9zcmMvbWl4aW5zL051bWJlck1peGluLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVOdW1iZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZU51bWJlci52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZU9iamVjdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlT2JqZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlUGFuZWwudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVQcm9ncmVzcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlUHJvZ3Jlc3MudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVSYWRpby52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlUmFkaW8udnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVTZWN0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVTZWN0aW9uLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlU2VsZWN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVTZWxlY3QudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVTbGlkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVNsaWRlci52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVN3aXRjaC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlU3dpdGNoLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlVGV4dC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlVGV4dC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVRleHRhcmVhLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVUZXh0YXJlYS52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVRyZWVMaXN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVUcmVlTGlzdC52dWUiLCIuLi9zcmMvdXRpbHMvdW5pdHMuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVVwbG9hZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlVXBsb2FkLnZ1ZSIsIi4uL3NyYy91dGlscy9kZXByZWNhdGUuanMiLCIuLi9zcmMvdmVyYnMuanMiLCIuLi9zcmMvRGl0b0FkbWluLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IHtcbiAgdGl0bGU6ICcnLFxuICByb3V0ZUNvbXBvbmVudHM6IFtdLFxuICB1c2VyOiBudWxsLFxuICBsb2FkQ2FjaGU6IHt9LCAvLyBTZWUgVHlwZU1peGluLmxvYWQoKVxuICBhY3RpdmVMYWJlbDogbnVsbCxcbiAgY2xpcGJvYXJkRGF0YTogbnVsbFxufVxuIiwiaW1wb3J0IHtcbiAgaXNJbnRlZ2VyLCBwYXJzZURhdGFQYXRoLCBnZXRWYWx1ZUF0RGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgdG9rZW4pIHtcbiAgcmV0dXJuIGRhdGFQYXRoXG4gICAgPyBgJHtkYXRhUGF0aH0vJHt0b2tlbn1gXG4gICAgOiB0b2tlblxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkge1xuICBjb25zdCBwYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgcGF0aD8ucG9wKClcbiAgcmV0dXJuIHBhdGhcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZVBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbmVzdGVkID8gcGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkgOiBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIGlmIChwYXRoKSB7XG4gICAgLy8gUmVtb3ZlIHRoZSBwYXJlbnQgdG9rZW4uIElmIGl0J3MgYSBudW1iZXIsIHRoZW4gd2UncmUgZGVhbGluZyB3aXRoIGFuXG4gICAgLy8gYXJyYXkgYW5kIG5lZWQgdG8gcmVtb3ZlIG1vcmUgdG9rZW5zIHVudGlsIHdlIG1lZXQgdGhlIGFjdHVhbCBwYXJlbnQ6XG4gICAgbGV0IHRva2VuXG4gICAgZG8ge1xuICAgICAgdG9rZW4gPSBwYXRoLnBvcCgpXG4gICAgfSB3aGlsZSAodG9rZW4gIT0gbnVsbCAmJiBpc0ludGVnZXIoK3Rva2VuKSlcbiAgICAvLyBJZiB0aGUgcmVtb3ZlZCB0b2tlbiBpcyB2YWxpZCwgd2UgY2FuIGdldCB0aGUgcGFyZW50IGRhdGE6XG4gICAgaWYgKHRva2VuICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBwYXRoXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW0ocm9vdEl0ZW0sIGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgcmV0dXJuIHBhdGggPyBnZXRWYWx1ZUF0RGF0YVBhdGgocm9vdEl0ZW0sIHBhdGgpIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50SXRlbShyb290SXRlbSwgZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICByZXR1cm4gcGF0aCA/IGdldFZhbHVlQXREYXRhUGF0aChyb290SXRlbSwgcGF0aCkgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aCkge1xuICBjb25zdCBwYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgcmV0dXJuIHBhdGhbcGF0aC5sZW5ndGggLSAxXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoTmFtZShkYXRhUGF0aCkge1xuICBjb25zdCB0b2tlbiA9IGdldExhc3REYXRhUGF0aFRva2VuKGRhdGFQYXRoKVxuICByZXR1cm4gdG9rZW4gPT0gbnVsbCB8fCBpc0ludGVnZXIoK3Rva2VuKSA/IG51bGwgOiB0b2tlblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoSW5kZXgoZGF0YVBhdGgpIHtcbiAgY29uc3QgdG9rZW4gPSBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aClcbiAgY29uc3QgaW5kZXggPSB0b2tlbiA9PSBudWxsID8gbnVsbCA6ICt0b2tlblxuICByZXR1cm4gaXNJbnRlZ2VyKGluZGV4KSA/IGluZGV4IDogbnVsbFxufVxuXG5sZXQgdGVtcG9yYXJ5SWQgPSAwXG5leHBvcnQgZnVuY3Rpb24gc2V0VGVtcG9yYXJ5SWQoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIC8vIFRlbXBvcmFyeSBpZHMgYXJlIG1hcmtlZCB3aXRoIGEgJ0AnIGF0IHRoZSBiZWdpbm5pbmcuXG4gIGRhdGFbaWRLZXldID0gYEAkeysrdGVtcG9yYXJ5SWR9YFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZW1wb3JhcnlJZChpZCkge1xuICByZXR1cm4gL15ALy50ZXN0KGlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzVGVtcG9yYXJ5SWQoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIHJldHVybiBpc1RlbXBvcmFyeUlkKGRhdGE/LltpZEtleV0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JlZmVyZW5jZShkYXRhLCBpZEtleSA9ICdpZCcpIHtcbiAgLy8gUmV0dXJucyB0cnVlIGlmIHZhbHVlIGlzIGFuIG9iamVjdCB0aGF0IGhvbGRzIG5vdGhpbmcgbW9yZSB0aGFuIGFuIGlkLlxuICByZXR1cm4gZGF0YT8uW2lkS2V5XSAhPSBudWxsICYmIE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA9PT0gMVxufVxuIiwiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQge1xuICBnZXRJdGVtRGF0YVBhdGgsIGdldFBhcmVudEl0ZW1EYXRhUGF0aCwgZ2V0UGFyZW50SXRlbSwgZ2V0SXRlbSxcbiAgZ2V0TGFzdERhdGFQYXRoTmFtZSwgZ2V0TGFzdERhdGFQYXRoSW5kZXhcbn0gZnJvbSAnLi91dGlscy9kYXRhLmpzJ1xuXG4vLyBgRGl0b0NvbnRleHRgIGluc3RhbmNlcyBhcmUgYSB0aGluIHdyYXBwZXIgYXJvdW5kIHJhdyBgY29udGV4dGAgb2JqZWN0cyxcbi8vIHdoaWNoIHRoZW1zZWx2ZXMgYWN0dWFsbHkgaW5oZXJpdCBmcm9tIHRoZSBsaW5rZWQgYGNvbXBvbmVudGAgaW5zdGFuY2UsIHNvXG4vLyB0aGF0IHRoZXkgb25seSBuZWVkIHRvIHByb3ZpZGUgdGhlIHZhbHVlcyB0aGF0IHNob3VsZCBiZSBkaWZmZXJlbnQgdGhhblxuLy8gaW4gdGhlIHVuZGVybHlpbmcgY29tcG9uZW50LiBJbiBvcmRlciB0byBub3QgZXhwb3NlIGFsbCBmaWVsZHMgZnJvbSB0aGVcbi8vIGNvbXBvbmVudCwgdGhlIHdyYXBwZXIgaXMgaW50cm9kdWNlZDpcbi8vIFVzZSBXZWFrTWFwIGZvciB0aGUgcmF3IGBjb250ZXh0YCBvYmplY3RzLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHBvbGx1dGUgdGhlXG4vLyBhY3R1YWwgYERpdG9Db250ZXh0YCBpbnN0YW5jZSB3aXRoIGl0LlxuY29uc3QgY29udGV4dHMgPSBuZXcgV2Vha01hcCgpXG5cbmZ1bmN0aW9uIGdldChjb250ZXh0LCBrZXksIGRlZmF1bHRWYWx1ZSkge1xuICBjb25zdCBvYmplY3QgPSBjb250ZXh0cy5nZXQoY29udGV4dClcbiAgY29uc3QgdmFsdWUgPSBvYmplY3Rba2V5XVxuICAvLyBJZiBgb2JqZWN0YCBleHBsaWNpdGx5IHNldHMgdGhlIGtleSB0byBgdW5kZWZpbmVkYCwgcmV0dXJuIGl0LlxuICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCB8fCBvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KVxuICAgID8gdmFsdWVcbiAgICA6IGlzRnVuY3Rpb24oZGVmYXVsdFZhbHVlKVxuICAgICAgPyBkZWZhdWx0VmFsdWUoKVxuICAgICAgOiBkZWZhdWx0VmFsdWVcbn1cblxuZnVuY3Rpb24gc2V0KGNvbnRleHQsIGtleSwgdmFsdWUpIHtcbiAgY29udGV4dHMuZ2V0KGNvbnRleHQpW2tleV0gPSB2YWx1ZVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbXBvbmVudCwgY29udGV4dCkge1xuICAgIC8vIFVzZSB0aGUgcHJvdmlkZWQgcGFyYW1zIG9iamVjdCAvIGZ1bmN0aW9uLCBvciBjcmVhdGUgYSBuZXcgb25lOlxuICAgIGNvbnRleHQgPSBjb250ZXh0XG4gICAgICA/IChpc0Z1bmN0aW9uKGNvbnRleHQpID8gY29udGV4dCgpIDogeyAuLi5jb250ZXh0IH0pXG4gICAgICA6IHt9XG4gICAgLy8gSWYgbm90IGV4cGxpY2l0bHkgc2V0ICh0byBmYWxzZSksIGRlZmF1bHQgdG8gdHJ1ZSBzbyB3ZSBkb24ndCBmYWxsIGJhY2tcbiAgICAvLyB0byBgY29tcG9uZW50YCBmb3IgaXRzIHZhbHVlLlxuICAgIGNvbnRleHQubmVzdGVkID8/PSB0cnVlXG4gICAgY29udGV4dC5jb21wb25lbnQgPSBjb21wb25lbnRcbiAgICAvLyBIYXZlIGBvYmplY3RgIGluaGVyaXQgZnJvbSB0aGUgYGNvbXBvbmVudGAgaW5zdGFuY2UsIHNvIGl0IGNhbiBvdmVycmlkZVxuICAgIC8vIGl0cyB2YWx1ZXMgYW5kIHN0aWxsIHJldHJpZXZlIGZyb20gaXQsIGFuZCBhc3NvY2lhdGUgaXQgd2l0aCBgdGhpc2BcbiAgICAvLyB0aHJvdWdoIGBjb250ZXh0c2AgbWFwOlxuICAgIGNvbnN0IG9iamVjdCA9IE9iamVjdC5zZXRQcm90b3R5cGVPZihjb250ZXh0LCBjb21wb25lbnQpXG4gICAgY29udGV4dHMuc2V0KHRoaXMsIG9iamVjdClcbiAgfVxuXG4gIHN0YXRpYyBnZXQoY29tcG9uZW50LCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQgaW5zdGFuY2VvZiBEaXRvQ29udGV4dFxuICAgICAgPyBjb250ZXh0XG4gICAgICA6IG5ldyBEaXRvQ29udGV4dChjb21wb25lbnQsIGNvbnRleHQpXG4gIH1cblxuICAvLyBgbmVzdGVkYCBpcyBgdHJ1ZWAgd2hlbiB0aGUgZGF0YS1wYXRoIHBvaW50cyBhIHZhbHVlIGluc2lkZSBhbiBpdGVtLCBhbmRcbiAgLy8gYGZhbHNlYCB3aGVuIGl0IHBvaW50cyB0byB0aGUgaXRlbSBpdHNlbGYuXG4gIGdldCBuZXN0ZWQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnbmVzdGVkJywgdHJ1ZSlcbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2YWx1ZScsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCBkYXRhUGF0aCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdkYXRhUGF0aCcsICcnKVxuICB9XG5cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnbmFtZScsICgpID0+IGdldExhc3REYXRhUGF0aE5hbWUodGhpcy5kYXRhUGF0aCkpXG4gIH1cblxuICBnZXQgaW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnaW5kZXgnLCAoKSA9PiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLmRhdGFQYXRoKSlcbiAgfVxuXG4gIGdldCBpdGVtRGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldEl0ZW1EYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgfVxuXG4gIGdldCBwYXJlbnRJdGVtRGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldFBhcmVudEl0ZW1EYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgfVxuXG4gIGdldCBpdGVtSW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMuaXRlbURhdGFQYXRoKVxuICB9XG5cbiAgZ2V0IHBhcmVudEl0ZW1JbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5wYXJlbnRJdGVtRGF0YVBhdGgpXG4gIH1cblxuICBnZXQgaXRlbSgpIHtcbiAgICAvLyBOT1RFOiBXaGlsZSBpbnRlcm5hbGx5LCB3ZSBzcGVhayBvZiBgZGF0YWAsIGluIHRoZSBBUEkgc3VyZmFjZSB0aGVcbiAgICAvLyB0ZXJtIGBpdGVtYCBpcyB1c2VkIGZvciB0aGUgZGF0YSB0aGF0IHJlbGF0ZXMgdG8gZWRpdGluZyBvYmplY3RzOlxuICAgIC8vIElmIGBkYXRhYCBpc24ndCBwcm92aWRlZCwgd2UgY2FuIGRldGVybWluZSBpdCBmcm9tIHJvb3REYXRhICYgZGF0YVBhdGg6XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGF0YScsICgpID0+XG4gICAgICBnZXRJdGVtKHRoaXMucm9vdEl0ZW0sIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICAgIClcbiAgfVxuXG4gIC8vIE5PVEU6IGBwYXJlbnRJdGVtYCBpc24ndCB0aGUgY2xvc2VzdCBkYXRhIHBhcmVudCB0byBgaXRlbWAsIGl0J3MgdGhlXG4gIC8vIGNsb3Nlc3QgcGFyZW50IHRoYXQgaXNuJ3QgYW4gYXJyYXksIGUuZy4gZm9yIHJlbGF0aW9ucyBvciBuZXN0ZWQgSlNPTlxuICAvLyBkYXRhLiAgVGhpcyBpcyB3aHkgdGhlIHRlcm0gYGl0ZW1gIHdhcyBjaG9zZW4gb3ZlciBgZGF0YWAsIGUuZy4gVlMgdGhlXG4gIC8vIHVzZSBvZiBgcGFyZW50RGF0YWAgaW4gc2VydmVyLXNpZGVkIHZhbGlkYXRpb24sIHdoaWNoIGlzIHRoZSBjbG9zZXN0XG4gIC8vIHBhcmVudC4gSWYgbmVlZGVkLCB3ZSBjb3VsZCBleHBvc2UgdGhpcyBkYXRhIGhlcmUgdG9vLCBhcyB3ZSBjYW4gZG8gYWxsXG4gIC8vIHNvcnRzIG9mIGRhdGEgcHJvY2Vzc2luZyB3aXRoIGByb290RGF0YWAgYW5kIGBkYXRhUGF0aGAuXG4gIGdldCBwYXJlbnRJdGVtKCkge1xuICAgIGNvbnN0IHBhcmVudEl0ZW0gPVxuICAgICAgZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZCkgfHwgbnVsbFxuICAgIHJldHVybiBwYXJlbnRJdGVtICE9PSB0aGlzLml0ZW0gPyBwYXJlbnRJdGVtIDogbnVsbFxuICB9XG5cbiAgZ2V0IHJvb3RJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Jvb3REYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCBwcm9jZXNzZWRJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Byb2Nlc3NlZERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGNsaXBib2FyZEl0ZW0oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnY2xpcGJvYXJkRGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgdXNlcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd1c2VyJywgbnVsbClcbiAgfVxuXG4gIGdldCBhcGkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnYXBpJywgbnVsbClcbiAgfVxuXG4gIGdldCB2aWV3cygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2aWV3cycsIG51bGwpXG4gIH1cblxuICBnZXQgaXRlbUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2l0ZW1MYWJlbCcsIG51bGwpXG4gIH1cblxuICBnZXQgZm9ybUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1MYWJlbCcsIG51bGwpXG4gIH1cblxuICAvLyBUT0RPOiBSZW1vdmUgZXhwb3N1cmUgc2luY2UgdGhlIGFzc29jaWF0ZWQgY29tcG9uZW50IGRvZXNuJ3QgYWx3YXlzIGV4aXN0LFxuICAvLyBlLmcuIG5lc3RlZCBmb3JtcyBpbiBgcHJvY2Vzc0RhdGEoKWAuIEluc3RlYWQsIGJpbmQgY29tcG9uZW50IHRvIGB0aGlzYFxuICAvLyBvbmx5IHdoZXJlIGF2YWlsYWJsZS5cbiAgZ2V0IGNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdjb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgLy8gVE9ETzogQWRkIGBjb21wb25lbnRTY2hlbWFgIGdldHRlciBmb3IgdGhlIHNjaGVtYSBvZiB0aGUgY3VycmVudCBjb21wb25lbnQsXG4gIC8vIGV2ZW4gd2hlbiB0aGUgY29tcG9uZW50IGlzbid0IGFjdHVhbGx5IGluc3RhbnRpYXRlZC4gQ29uc2lkZXIgYWRkaW5nXG4gIC8vIGBzb3VyY2VTY2hlbWFgIGFzIHdlbGw/XG5cbiAgLy8gVE9ETzogRml4IHVuY2xlYXIgbmFtaW5nOiBXaGljaCBzY2hlbWEgaXMgdGhpcywgdGhhdCBvZiB0aGUgY29tcG9uZW50IG9yIG9mXG4gIC8vIGl0cyBwYXJlbnQ/IElzbid0IGV4cG9zaW5nIGBmb3JtQ29tcG9uZW50YCBhbmQgYHZpZXdDb21wb25lbnRgIGVub3VnaCwgb25jZVxuICAvLyB3ZSBvZmZlciBhY2Nlc3MgdG8gdGhlaXIgY29tcG9uZW50cyB0aGVyZSB0aHJvdWdoIGBnZXRDb21wb25lbnQoKWAgJiBjby4gb25cbiAgLy8gYERpdG9NaXhpbmAgcGVyaGFwcz8gIEFsc28sIHRoZXJlIGNvdWxkIGJlIGEgYHRhYkNvbXBvbmVudGAgZ2V0dGVyIGZvclxuICAvLyBzY2hlbWFzIGluIHRhYnM/XG4gIGdldCBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnc2NoZW1hQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBmb3JtQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1Db21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHZpZXdDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmlld0NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgZGlhbG9nQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2RpYWxvZ0NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncGFuZWxDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHJlc291cmNlQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Jlc291cmNlQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnc291cmNlQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIC8vIFdoZW4gdXNlZCBpbiBPcHRpb25zTWl4aW4gZm9yIGBzY2hlbWEub3B0aW9ucy52YWx1ZSgpYCxcbiAgLy8gYHNjaGVtYS5vcHRpb25zLmxhYmVsKClgIGFuZCAgYHNjaGVtYS5zZWFyY2guZmlsdGVyKClgIGNhbGxiYWNrczpcbiAgZ2V0IG9wdGlvbigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcHRpb24nLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcHRpb25zJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgLy8gVE9ETzogUmVuYW1lIHRoaXMgdG8gYHNlYXJjaFRlcm1gIG9yIGBzZWFyY2hRdWVyeWAsIHRvIHBlcmhhcHMgZnJlZSBgcXVlcnlgXG4gIC8vIGZvciB0aGUgYWN0dWFsIGByZXNvdXJjZUNvbXBvbmVudC5xdWVyeWAgb2JqZWN0P1xuICBnZXQgcXVlcnkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncXVlcnknLCB1bmRlZmluZWQpXG4gIH1cblxuICAvLyBUaGUgZXJyb3IgZmllbGQgaXMgb25seSBwb3B1bGF0ZWQgaW4gdGhlIGNvbnRleHQgb2YgYnV0dG9ucyB0aGF0IHNlbmRcbiAgLy8gcmVxdWVzdHMsIHNlZSBgUmVzb3VyY2VNaXhpbi5lbWl0QnV0dG9uRXZlbnQoKWA6XG4gIGdldCBlcnJvcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdlcnJvcicsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCB3YXNOb3RpZmllZCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIGZhbHNlKVxuICB9XG5cbiAgLy8gSGVscGVyIE1ldGhvZHNcblxuICBnZXQgcmVxdWVzdCgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB0aGlzLmNvbXBvbmVudC5yZXF1ZXN0KG9wdGlvbnMpXG4gIH1cblxuICBnZXQgZm9ybWF0KCkge1xuICAgIHJldHVybiAodmFsdWUsIG9wdGlvbnMpID0+IHRoaXMuY29tcG9uZW50LmZvcm1hdCh2YWx1ZSwgb3B0aW9ucylcbiAgfVxuXG4gIGdldCBuYXZpZ2F0ZSgpIHtcbiAgICByZXR1cm4gbG9jYXRpb24gPT4gdGhpcy5jb21wb25lbnQubmF2aWdhdGUobG9jYXRpb24pXG4gIH1cblxuICBnZXQgZG93bmxvYWQoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4gdGhpcy5jb21wb25lbnQuZG93bmxvYWQob3B0aW9ucylcbiAgfVxuXG4gIGdldCBnZXRSZXNvdXJjZVVybCgpIHtcbiAgICByZXR1cm4gcmVzb3VyY2UgPT4gdGhpcy5jb21wb25lbnQuZ2V0UmVzb3VyY2VVcmwocmVzb3VyY2UpXG4gIH1cblxuICBnZXQgbm90aWZ5KCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHtcbiAgICAgIHRoaXMuY29tcG9uZW50Lm5vdGlmeShvcHRpb25zKVxuICAgICAgc2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIHRydWUpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBpc1BsYWluT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJGV2ZW50czogbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gQXN5bmMgdmVyc2lvbnMgb2YgVnVlJ3MgJG9uKCkgYW5kICRvZmYoKSBtZXRob2RzIHRoYXQga2VlcCB0cmFjayBvZiB0aGVcbiAgICAvLyBldmVudHMgYWRkZWQgLyByZW1vdmVkLCBhbmQgcHJvdmlkZSBhIGhhc0xpc3RlbmVycygpIG1ldGhvZCB0aGF0IGNoZWNrc1xuICAgIC8vIGlmIHRoZSBjb21wb25lbnQgaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudC5cblxuICAgIC8vIEFsc28gYWRkcyBwcm9wZXIgaGFuZGxpbmcgb2YgYXN5bmMgZXZlbnRzLCBpbmNsdWRpbmcgYSBhc3luYyBlbWl0KCkgdGhhdFxuICAgIC8vIGRlYWxzIHdpdGggcHJvcGVyIGV2ZW50IHF1ZXVlaW5nLlxuICAgIG9uKGV2ZW50LCBjYWxsYmFjaykge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGV2LCBjYWxsYmFjaylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBldmVudCkge1xuICAgICAgICAgIHRoaXMub24oa2V5LCBldmVudFtrZXldKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBldmVudHMgPSB0aGlzLiRldmVudHMgfHwgKHRoaXMuJGV2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCkpXG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzIH0gPSBldmVudHNbZXZlbnRdIHx8IChldmVudHNbZXZlbnRdID0ge1xuICAgICAgICAgIGNhbGxiYWNrczogW10sXG4gICAgICAgICAgcXVldWU6IFtdXG4gICAgICAgIH0pXG4gICAgICAgIGNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgb25jZShldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IG9uID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgdGhpcy5vZmYoZXZlbnQsIG9uKVxuICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncylcbiAgICAgIH1cbiAgICAgIG9uLmNhbGxiYWNrID0gY2FsbGJhY2sgLy8gTmVlZGVkIGZvciBgb2ZmKClgLCBzZWUgYmVsb3cuXG4gICAgICByZXR1cm4gdGhpcy5vbihldmVudCwgb24pXG4gICAgfSxcblxuICAgIG9mZihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAvLyBSZW1vdmUgYWxsIGV2ZW50c1xuICAgICAgICBkZWxldGUgdGhpcy4kZXZlbnRzXG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihrZXksIGV2ZW50W2tleV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBzcGVjaWZpYyBldmVudFxuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMuJGV2ZW50cz8uW2V2ZW50XVxuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgYWxsIGhhbmRsZXJzIGZvciB0aGlzIGV2ZW50XG4gICAgICAgICAgICBkZWxldGUgdGhpcy4kZXZlbnRzW2V2ZW50XVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgYSBzcGVjaWZpYyBoYW5kbGVyOiBmaW5kIHRoZSBpbmRleCBpbiBjYWxsYmFja3NcbiAgICAgICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzIH0gPSBlbnRyeVxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjYWxsYmFja3MuZmluZEluZGV4KFxuICAgICAgICAgICAgICAvLyBNYXRjaCBgY2IuY2FsbGJhY2tgIGFsc28sIGFzIHVzZWQgYnkgYG9uY2UoKWAsIHNlZSAgYWJvdmU6XG4gICAgICAgICAgICAgIGNiID0+IGNiID09PSBjYWxsYmFjayB8fCBjYi5jYWxsYmFjayA9PT0gY2FsbGJhY2tcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2tzLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIGVtaXQoZXZlbnQsIC4uLmFyZ3MpIHtcbiAgICAgIC8vIE9ubHkgcXVldWUgZXZlbnQgaWYgdGhlcmUgYWN0dWFsbHkgYXJlIGxpc3RlbmVycyBmb3IgaXQuXG4gICAgICBjb25zdCBlbnRyeSA9IHRoaXMuJGV2ZW50cz8uW2V2ZW50XVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGNvbnN0IHsgcXVldWUsIGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIGNvbnN0IG5leHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAvLyBFbWl0IHRoZSBuZXh0IGV2ZW50IGluIHRoZSBxdWV1ZSB3aXRoIGl0cyBwYXJhbXMuXG4gICAgICAgICAgICAvLyBOb3RlIHRoYXQgaXQgb25seSBnZXRzIHJlbW92ZWQgb25jZSBgbmV4dCgpYCBpcyBjYWxsZWQuXG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHF1ZXVlLnNoaWZ0KClcbiAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICBsZXQgcmVzdWx0XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNhbGxiYWNrLmFwcGx5KHRoaXMsIGVudHJ5LmFyZ3MpXG4gICAgICAgICAgICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBFcnJvciBkdXJpbmcgZXZlbnQgaGFuZGxlciBmb3IgJyR7ZXZlbnR9JzpgLCBlcnJvclxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBxdWV1ZSBmb3IgdGhlIGV2ZW50XG4gICAgICAgICAgICAgIC8vIHRoYXQgd2FzIGp1c3QgY29tcGxldGVkIGJ5IHRoZSB3cmFwcGVyIHRoYXQgY2FsbGVkIGBuZXh0KClgXG4gICAgICAgICAgICAgIGVudHJ5LnJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgICBuZXh0KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcXVldWUucHVzaCh7IGFyZ3MsIHJlc29sdmUgfSlcbiAgICAgICAgICAvLyBGb3IgbmV3IHF1ZXVlcyAoPSBvbmx5IG9uZSBlbnRyeSkgZW1pdCB0aGUgZmlyc3QgZXZlbnQgaW1tZWRpYXRlbHksXG4gICAgICAgICAgLy8gdG8gZ2V0IHRoZSBxdWV1ZSBydW5uaW5nLlxuICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQ2hlY2tzIGlmIHRoZSBjb21wb25lbnQgaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudCB0eXBlOlxuICAgIGhhc0xpc3RlbmVycyhldmVudCkge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKGV2KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudC5sZW5ndGggPiAwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gISF0aGlzLiRldmVudHM/LltldmVudF1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVsZWdhdGUoZXZlbnQsIHRhcmdldCkge1xuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICBpZiAoaXNBcnJheShldmVudCkpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLmRlbGVnYXRlKGV2LCB0YXJnZXQpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub24oZXZlbnQsICguLi5hcmdzKSA9PiB0YXJnZXQuZW1pdChldmVudCwgLi4uYXJncykpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQge1xuICBpc0FycmF5LCBpc09iamVjdCwgaXNTdHJpbmcsIGlzQm9vbGVhbiwgaXNOdW1iZXIsIGlzRnVuY3Rpb24sIGlzRGF0ZSxcbiAgaXNSZWdFeHAsIGFzQXJyYXlcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuY29uc3QgdHlwZUNoZWNrZXJzID0ge1xuICBCb29sZWFuOiBpc0Jvb2xlYW4sXG4gIE51bWJlcjogaXNOdW1iZXIsXG4gIFN0cmluZzogaXNTdHJpbmcsXG4gIERhdGU6IGlzRGF0ZSxcbiAgQXJyYXk6IGlzQXJyYXksXG4gIE9iamVjdDogaXNPYmplY3QsXG4gIFJlZ0V4cDogaXNSZWdFeHAsXG4gIEZ1bmN0aW9uOiBpc0Z1bmN0aW9uXG59XG5cbi8vIERlY2xhcmUgdGhlc2Ugc2VwYXJhdGVseSBmcm9tIHRoZSBgdHlwZUNvbnZlcnRlcnNgIG9iamVjdCwgdG8gcHJldmVudFxuLy8gQmFiZWwgaXNzdWVzIHdpdGggYE9iamVjdGAgb3ZlcnJpZGluZyB0aGUgZ2xvYmFsIGBPYmplY3RgOlxuY29uc3QgdG9Cb29sZWFuID0gdmFsdWUgPT4gISF2YWx1ZVxuY29uc3QgdG9OdW1iZXIgPSB2YWx1ZSA9PiArdmFsdWVcbmNvbnN0IHRvU3RyaW5nID0gdmFsdWUgPT4gU3RyaW5nKHZhbHVlKVxuXG5jb25zdCB0b0RhdGUgPSB2YWx1ZSA9PiBpc0RhdGUodmFsdWUpXG4gID8gdmFsdWVcbiAgOiBuZXcgRGF0ZSh2YWx1ZSlcblxuY29uc3QgdG9BcnJheSA9IHZhbHVlID0+IGlzQXJyYXkodmFsdWUpXG4gID8gdmFsdWVcbiAgOiBpc1N0cmluZyh2YWx1ZSlcbiAgICA/IHZhbHVlLnNwbGl0KCcsJylcbiAgICA6IGFzQXJyYXkodmFsdWUpXG5cbmNvbnN0IHRvT2JqZWN0ID0gdmFsdWUgPT4gaXNPYmplY3QodmFsdWUpXG4gID8gdmFsdWVcbiAgLy8gSWYgYSBPYmplY3QgaXMgZXhwZWN0ZWQgYnV0IGEgQm9vbGVhbiBwcm92aWRlLCBjb252ZXJ0IHRvIGFuIGVtcHR5XG4gIC8vIG9iamVjdC4gVXNlZCBieSBgY3JlYXRhYmxlYCAmIGNvLCB0aGF0IGNhbiBiZSBib3RoLlxuICA6IHZhbHVlID09PSB0cnVlXG4gICAgPyB7fVxuICAgIDogbnVsbFxuXG5jb25zdCB0b1JlZ0V4cCA9IHZhbHVlID0+IGlzUmVnRXhwKHZhbHVlKVxuICA/IHZhbHVlXG4gIDogbmV3IFJlZ0V4cCh2YWx1ZSlcblxuY29uc3QgdHlwZUNvbnZlcnRlcnMgPSB7XG4gIEJvb2xlYW46IHRvQm9vbGVhbixcbiAgTnVtYmVyOiB0b051bWJlcixcbiAgU3RyaW5nOiB0b1N0cmluZyxcbiAgRGF0ZTogdG9EYXRlLFxuICBBcnJheTogdG9BcnJheSxcbiAgT2JqZWN0OiB0b09iamVjdCxcbiAgUmVnRXhwOiB0b1JlZ0V4cFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSB7XG4gIC8vIFNlZSBpZiBhbnkgb2YgdGhlIGV4cGVjdCB0eXBlcyBtYXRjaCwgcmV0dXJuIGltbWVkaWF0ZWx5IGlmIHRoZXkgZG86XG4gIGlmICh0eXBlcyAmJiB2YWx1ZSAhPSBudWxsKSB7XG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICBpZiAodHlwZUNoZWNrZXJzW3R5cGUubmFtZV0/Lih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VHlwZSh0eXBlLCB2YWx1ZSkge1xuICBjb25zdCBjb252ZXJ0ZXIgPSB0eXBlICYmIHR5cGVDb252ZXJ0ZXJzW3R5cGUubmFtZSB8fCB0eXBlXVxuICByZXR1cm4gY29udmVydGVyID8gY29udmVydGVyKHZhbHVlKSA6IHZhbHVlXG59XG4iLCJpbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIHBpY2tCeSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNSZXNvdXJjZShzY2hlbWEpIHtcbiAgcmV0dXJuICEhZ2V0UmVzb3VyY2Uoc2NoZW1hLnJlc291cmNlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzb3VyY2UocmVzb3VyY2UsIGRlZmF1bHRzID0ge30pIHtcbiAgY29uc3QgeyBwYXJlbnQsIC4uLmRlZnMgfSA9IGRlZmF1bHRzXG4gIHJlc291cmNlID0gaXNPYmplY3QocmVzb3VyY2UpID8geyAuLi5kZWZzLCAuLi5yZXNvdXJjZSB9XG4gICAgOiBpc1N0cmluZyhyZXNvdXJjZSkgPyB7IC4uLmRlZnMsIHBhdGg6IHJlc291cmNlIH1cbiAgICA6IG51bGxcbiAgLy8gT25seSBzZXQgcGFyZW50IGlmIHBhdGggZG9lc24ndCBzdGFydCB3aXRoICcvJywgc28gcmVsYXRpdmUgVVJMcyBhcmVcbiAgLy8gZGVhbHQgd2l0aCBjb3JyZWN0bHkuXG4gIGlmIChcbiAgICByZXNvdXJjZSAmJlxuICAgIHBhcmVudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgcmVzb3VyY2UucGFyZW50ID09PSB1bmRlZmluZWQgJiZcbiAgICAhcmVzb3VyY2UucGF0aD8uc3RhcnRzV2l0aCgnLycpXG4gICkge1xuICAgIHJlc291cmNlLnBhcmVudCA9IHBhcmVudFxuICAgIGlmICghcmVzb3VyY2UucGF0aCkge1xuICAgICAgcmVzb3VyY2UucGF0aCA9ICcuJ1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzb3VyY2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1lbWJlclJlc291cmNlKGlkLCByZXNvdXJjZSkge1xuICByZXR1cm4gaWQgIT0gbnVsbCAmJiByZXNvdXJjZT8udHlwZSA9PT0gJ2NvbGxlY3Rpb24nXG4gICAgPyB7XG4gICAgICB0eXBlOiAnbWVtYmVyJyxcbiAgICAgIC4uLnBpY2tCeShcbiAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgICh2YWx1ZSwga2V5KSA9PiBbJ21ldGhvZCcsICdwYXRoJywgJ3BhcmVudCddLmluY2x1ZGVzKGtleSlcbiAgICAgICksXG4gICAgICBpZDogYCR7aWR9YFxuICAgIH1cbiAgICA6IG51bGxcbn1cbiIsImltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc0FycmF5LCBpc1N0cmluZywgaXNGdW5jdGlvbiwgYXNBcnJheSwgZXF1YWxzLFxuICBnZXRWYWx1ZUF0RGF0YVBhdGgsIGxhYmVsaXplLCBoeXBoZW5hdGUsIGZvcm1hdFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IGFwcFN0YXRlIGZyb20gJy4uL2FwcFN0YXRlLmpzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBFbWl0dGVyTWl4aW4gZnJvbSAnLi9FbWl0dGVyTWl4aW4uanMnXG5pbXBvcnQgeyBpc01hdGNoaW5nVHlwZSwgY29udmVydFR5cGUgfSBmcm9tICcuLi91dGlscy90eXBlLmpzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UsIGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0VtaXR0ZXJNaXhpbl0sXG5cbiAgaW5qZWN0OiBbXG4gICAgJ2FwaScsXG4gICAgJyR2ZXJicycsXG4gICAgJyR2aWV3cycsXG4gICAgJyRpc1BvcHVsYXRlZCcsXG4gICAgJyRzY2hlbWFDb21wb25lbnQnLFxuICAgICckcm91dGVDb21wb25lbnQnLFxuICAgICckZGF0YUNvbXBvbmVudCcsXG4gICAgJyRzb3VyY2VDb21wb25lbnQnLFxuICAgICckcmVzb3VyY2VDb21wb25lbnQnLFxuICAgICckZGlhbG9nQ29tcG9uZW50JyxcbiAgICAnJHBhbmVsQ29tcG9uZW50JyxcbiAgICAnJHRhYkNvbXBvbmVudCdcbiAgXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB0aGlzLnByb3ZpZGVzRGF0YVxuICAgICAgPyB7ICRkYXRhQ29tcG9uZW50OiAoKSA9PiB0aGlzIH1cbiAgICAgIDoge31cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBhcHBTdGF0ZSxcbiAgICAgIG92ZXJyaWRlczogbnVsbCAvLyBTZWUgYWNjZXNzb3IuanNcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzb3VyY2VTY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhPy5zY2hlbWFcbiAgICB9LFxuXG4gICAgdXNlcigpIHtcbiAgICAgIHJldHVybiBhcHBTdGF0ZS51c2VyXG4gICAgfSxcblxuICAgIC8vICR2ZXJicywgJHZlcmJzIGFuZCAkaXNQb3B1bGF0ZWQgYXJlIGRlZmluZWQgYXMgZnVuY3Rpb25zLCB0byBwcmVzZXJ2ZVxuICAgIC8vIHJlYWN0aXZlbmVzcyBhY3Jvc3MgcHJvdmlkZS9pbmplY3QuXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL2lzc3Vlcy83MDE3I2lzc3VlY29tbWVudC00ODA5MDY2OTFcbiAgICB2ZXJicygpIHtcbiAgICAgIHJldHVybiB0aGlzLiR2ZXJicygpXG4gICAgfSxcblxuICAgIHZpZXdzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHZpZXdzKClcbiAgICB9LFxuXG4gICAgaXNQb3B1bGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kaXNQb3B1bGF0ZWQoKVxuICAgIH0sXG5cbiAgICBsb2NhbGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcGkubG9jYWxlXG4gICAgfSxcblxuICAgIGNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgbmVzdGVkOiBmYWxzZSB9KVxuICAgIH0sXG5cbiAgICByb290Q29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvb3QuJGNoaWxkcmVuWzBdXG4gICAgfSxcblxuICAgIHNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIFVzZSBjb21wdXRlZCBwcm9wZXJ0aWVzIGFzIGxpbmtzIHRvIGluamVjdHMsIHNvIERpdG9TY2hlbWEgY2FuXG4gICAgICAvLyBvdmVycmlkZSB0aGUgcHJvcGVydHkgYW5kIHJldHVybiBgdGhpc2AgaW5zdGVhZCBvZiB0aGUgcGFyZW50LlxuICAgICAgcmV0dXJuIHRoaXMuJHNjaGVtYUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgLy8gVXNlIGNvbXB1dGVkIHByb3BlcnRpZXMgYXMgbGlua3MgdG8gaW5qZWN0cywgc28gUm91dGVNaXhpbiBjYW5cbiAgICAgIC8vIG92ZXJyaWRlIHRoZSBwcm9wZXJ0eSBhbmQgcmV0dXJuIGB0aGlzYCBpbnN0ZWFkIG9mIHRoZSBwYXJlbnQuXG4gICAgICByZXR1cm4gdGhpcy4kcm91dGVDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBmb3JtQ29tcG9uZW50KCkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5yb3V0ZUNvbXBvbmVudFxuICAgICAgcmV0dXJuIGNvbXBvbmVudD8uaXNGb3JtID8gY29tcG9uZW50IDogbnVsbFxuICAgIH0sXG5cbiAgICB2aWV3Q29tcG9uZW50KCkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5yb3V0ZUNvbXBvbmVudFxuICAgICAgcmV0dXJuIGNvbXBvbmVudD8uaXNWaWV3ID8gY29tcG9uZW50IDogbnVsbFxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBmaXJzdCByb3V0ZSBjb21wb25lbnQgaW4gdGhlIGNoYWluIG9mIHBhcmVudHMsIGluY2x1ZGluZ1xuICAgIC8vIHRoaXMgY3VycmVudCBjb21wb25lbnQsIHRoYXQgaXMgbGlua2VkIHRvIGEgcmVzb3VyY2UgKGFuZCB0aHVzIGxvYWRzIGl0c1xuICAgIC8vIG93biBkYXRhIGFuZCBkb2Vzbid0IGhvbGQgbmVzdGVkIGRhdGEpLlxuICAgIGRhdGFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm92aWRlc0RhdGEgPyB0aGlzIDogdGhpcy4kZGF0YUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzb3VyY2VDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZXNvdXJjZUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRkaWFsb2dDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBwYW5lbENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYW5lbENvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiR0YWJDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBwYXJlbnRTY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnQ/LiRwYXJlbnQuc2NoZW1hQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhcmVudFJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucm91dGVDb21wb25lbnQ/LiRwYXJlbnQucm91dGVDb21wb25lbnRcbiAgICB9LFxuXG4gICAgcGFyZW50Rm9ybUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1Db21wb25lbnQ/LiRwYXJlbnQuZm9ybUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBkYXRhIG9mIHRoZSBmaXJzdCByb3V0ZSBjb21wb25lbnQgaW4gdGhlIGNoYWluIG9mIHBhcmVudHNcbiAgICAvLyB0aGF0IGxvYWRzIGl0cyBvd24gZGF0YSBmcm9tIGFuIGFzc29jaWF0ZWQgQVBJIHJlc291cmNlLlxuICAgIHJvb3REYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YUNvbXBvbmVudD8uZGF0YVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVDcmVhdGUoKSB7XG4gICAgdGhpcy4kdWlkID0gKyt1aWRcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gVGhlIHN0YXRlIG9mIGNvbXBvbmVudHMgaXMgb25seSBhdmFpbGFibGUgZHVyaW5nIHRoZSBsaWZlLWN5Y2xlIG9mIGFcbiAgICAvLyBjb21wb25lbnQuIFNvbWUgaW5mb3JtYXRpb24gd2UgbmVlZCBhdmFpbGFibGUgbG9uZ2VyIHRoYW4gdGhhdCwgZS5nLlxuICAgIC8vIGBxdWVyeWAgJiBgdG90YWxgIG9uIFR5cGVMaXN0LCBzbyB0aGF0IHdoZW4gdGhlIHVzZXIgbmF2aWdhdGVzIGJhY2sgZnJvbVxuICAgIC8vIGVkaXRpbmcgYW4gaXRlbSBpbiB0aGUgbGlzdCwgdGhlIHN0YXRlIG9mIHRoZSBsaXN0IGlzIHN0aWxsIHRoZSBzYW1lLlxuICAgIC8vIFdlIGNhbid0IHN0b3JlIHRoaXMgaW4gYGRhdGFgLCBhcyB0aGlzIGlzIGFscmVhZHkgdGhlIHB1cmUgZGF0YSBmcm9tIHRoZVxuICAgIC8vIEFQSSBzZXJ2ZXIuIFRoYXQncyB3aGF0IHRoZSBgc3RvcmVgIGlzIGZvcjogTWVtb3J5IHRoYXQncyBhdmFpbGFibGUgYXNcbiAgICAvLyBsb25nIGFzIHRoZSBjdXJyZW50IGVkaXRpbmcgcGF0aCBpcyBzdGlsbCB2YWxpZC4gRm9yIHR5cGUgY29tcG9uZW50cyxcbiAgICAvLyB0aGlzIG1lbW9yeSBpcyBwcm92aWRlZCBieSB0aGUgcGFyZW50LCBzZWUgUm91dGVNaXhpbiBhbmQgRGl0b1BhbmUuXG4gICAgZ2V0U3RvcmUoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5zdG9yZVtrZXldXG4gICAgfSxcblxuICAgIHNldFN0b3JlKGtleSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzZXQodGhpcy5zdG9yZSwga2V5LCB2YWx1ZSlcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRTdG9yZShrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFN0b3JlKGtleSkgfHwgdGhpcy5zZXRTdG9yZShrZXksIHt9KVxuICAgIH0sXG5cbiAgICBnZXRTY2hlbWFWYWx1ZShcbiAgICAgIGtleU9yRGF0YVBhdGgsXG4gICAgICB7IHR5cGUsIGRlZmF1bHQ6IGRlZiwgc2NoZW1hID0gdGhpcy5zY2hlbWEsIGNhbGxiYWNrID0gdHJ1ZSB9ID0ge31cbiAgICApIHtcbiAgICAgIGNvbnN0IHR5cGVzID0gdHlwZSAmJiBhc0FycmF5KHR5cGUpXG4gICAgICAvLyBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgZGF0YS1wYXRocyBpbiBga2V5T3JEYXRhUGF0aGAgY2FuIG9ubHkgYmVcbiAgICAgIC8vIHByb3ZpZGVkIGluIGluIGFycmF5IGZvcm1hdCBoZXJlOlxuICAgICAgbGV0IHZhbHVlID0gc2NoZW1hXG4gICAgICAgID8gaXNBcnJheShrZXlPckRhdGFQYXRoKVxuICAgICAgICAgID8gZ2V0VmFsdWVBdERhdGFQYXRoKHNjaGVtYSwga2V5T3JEYXRhUGF0aCwgKCkgPT4gdW5kZWZpbmVkKVxuICAgICAgICAgIDogc2NoZW1hW2tleU9yRGF0YVBhdGhdXG4gICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChjYWxsYmFjayAmJiBpc0Z1bmN0aW9uKGRlZikgJiYgIWlzTWF0Y2hpbmdUeXBlKHR5cGVzLCBkZWYpKSB7XG4gICAgICAgICAgLy8gU3VwcG9ydCBgZGVmYXVsdCgpYCBmdW5jdGlvbnMgZm9yIGFueSB0eXBlIGV4Y2VwdCBgRnVuY3Rpb25gOlxuICAgICAgICAgIGRlZiA9IGRlZi5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmXG4gICAgICB9XG5cbiAgICAgIGlmIChpc01hdGNoaW5nVHlwZSh0eXBlcywgdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgfVxuICAgICAgLy8gQW55IHNjaGVtYSB2YWx1ZSBoYW5kbGVkIHRocm91Z2ggYGdldFNjaGVtYVZhbHVlKClgIGNhbiBwcm92aWRlXG4gICAgICAvLyBhIGZ1bmN0aW9uIHRoYXQncyByZXNvbHZlZCB3aGVuIHRoZSB2YWx1ZSBpcyBldmFsdWF0ZWQ6XG4gICAgICBpZiAoY2FsbGJhY2sgJiYgaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgIH1cbiAgICAgIC8vIE5vdyBmaW5hbGx5IHNlZSBpZiB3ZSBjYW4gY29udmVydCB0byB0aGUgZXhwZWN0IHR5cGVzLlxuICAgICAgaWYgKHR5cGVzICYmIHZhbHVlICE9IG51bGwgJiYgIWlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkpIHtcbiAgICAgICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICAgICAgY29uc3QgY29udmVydGVkID0gY29udmVydFR5cGUodHlwZSwgdmFsdWUpXG4gICAgICAgICAgaWYgKGNvbnZlcnRlZCAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH0sXG5cbiAgICBnZXRMYWJlbChzY2hlbWEsIG5hbWUpIHtcbiAgICAgIHJldHVybiBzY2hlbWFcbiAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdsYWJlbCcsIHsgdHlwZTogU3RyaW5nLCBzY2hlbWEgfSkgfHxcbiAgICAgICAgICBsYWJlbGl6ZShuYW1lIHx8IHNjaGVtYS5uYW1lKVxuICAgICAgICA6IGxhYmVsaXplKG5hbWUpIHx8ICcnXG4gICAgfSxcblxuICAgIGxhYmVsaXplLFxuXG4gICAgZ2V0QnV0dG9uQXR0cmlidXRlcyhuYW1lLCBidXR0b24pIHtcbiAgICAgIGNvbnN0IHZlcmIgPSB0aGlzLnZlcmJzW25hbWVdIHx8IG5hbWVcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNsYXNzOiBgZGl0by1idXR0b24tJHt2ZXJifWAsXG4gICAgICAgIHRpdGxlOiBidXR0b24/LnRleHQgfHwgbGFiZWxpemUodmVyYilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0RHJhZ09wdGlvbnMoZHJhZ2dhYmxlLCBmYWxsYmFjayA9IGZhbHNlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbmltYXRpb246IDE1MCxcbiAgICAgICAgZGlzYWJsZWQ6ICFkcmFnZ2FibGUsXG4gICAgICAgIGhhbmRsZTogJy5kaXRvLWJ1dHRvbi1kcmFnJyxcbiAgICAgICAgZHJhZ0NsYXNzOiAnZGl0by1kcmFnLWFjdGl2ZScsXG4gICAgICAgIGNob3NlbkNsYXNzOiAnZGl0by1kcmFnLWNob3NlbicsXG4gICAgICAgIGdob3N0Q2xhc3M6ICdkaXRvLWRyYWctZ2hvc3QnLFxuICAgICAgICBmYWxsYmFja0NsYXNzOiAnZGl0by1kcmFnLWZhbGxiYWNrJyxcbiAgICAgICAgZm9yY2VGYWxsYmFjazogZmFsbGJhY2tcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0UXVlcnlMaW5rKHF1ZXJ5KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBxdWVyeSxcbiAgICAgICAgLy8gUHJlc2VydmUgaGFzaCBmb3IgdGFiczpcbiAgICAgICAgaGFzaDogdGhpcy4kcm91dGUuaGFzaFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzaG91bGRSZW5kZXIoc2NoZW1hID0gbnVsbCkge1xuICAgICAgcmV0dXJuICEhc2NoZW1hICYmIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2lmJywge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICBzY2hlbWFcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNob3dEaWFsb2coe1xuICAgICAgY29tcG9uZW50cyxcbiAgICAgIGJ1dHRvbnMsXG4gICAgICBkYXRhLFxuICAgICAgc2V0dGluZ3MgPSB7XG4gICAgICAgIHdpZHRoOiA0ODAsXG4gICAgICAgIGhlaWdodDogJ2F1dG8nLFxuICAgICAgICBjbGlja1RvQ2xvc2U6IGZhbHNlXG4gICAgICB9XG4gICAgfSkge1xuICAgICAgLy8gU2hvd3MgYSBkaXRvLWRpYWxvZyBjb21wb25lbnQgdGhyb3VnaCB2dWUtanMtbW9kYWwsIGFuZCB3cmFwcyBpdCBpbiBhXG4gICAgICAvLyBwcm9taXNlIHNvIHRoYXQgdGhlIGJ1dHRvbnMgaW4gdGhlIGRpYWxvZyBjYW4gdXNlIGBkaWFsb2cucmVzb2x2ZSgpYFxuICAgICAgLy8gYW5kIGBkaWFsb2cucmVqZWN0KClgIHRvIGNsb3NlIHRoZSBtb2RhbCBkaWFsb2cgYW5kIHJlc29sdmUgLyByZWplY3RcbiAgICAgIC8vIHRoZSBwcm9taXNlIGF0IG9uY2UuXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0aGlzLiRtb2RhbC5zaG93KERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWRpYWxvZycpLCB7XG4gICAgICAgICAgY29tcG9uZW50cyxcbiAgICAgICAgICBidXR0b25zLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgcHJvbWlzZTogeyByZXNvbHZlLCByZWplY3QgfVxuICAgICAgICB9LCBzZXR0aW5ncylcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdldFJlc291cmNlUGF0aChyZXNvdXJjZSkge1xuICAgICAgcmVzb3VyY2UgPSBnZXRSZXNvdXJjZShyZXNvdXJjZSlcbiAgICAgIC8vIFJlc291cmNlcyB3aXRob3V0IGEgcGFyZW50IGluaGVyaXQgdGhlIG9uZSBmcm9tIGBkYXRhQ29tcG9uZW50YFxuICAgICAgLy8gYXV0b21hdGljYWxseS5cbiAgICAgIGlmIChyZXNvdXJjZS5wYXJlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXNvdXJjZS5wYXJlbnQgPSB0aGlzLmRhdGFDb21wb25lbnQ/LnJlc291cmNlXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5hcGkucmVzb3VyY2VzLmFueShnZXRSZXNvdXJjZShyZXNvdXJjZSkpXG4gICAgfSxcblxuICAgIGdldFJlc291cmNlVXJsKHJlc291cmNlKSB7XG4gICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFJlc291cmNlUGF0aChyZXNvdXJjZSlcbiAgICAgIHJldHVybiB1cmwgPyB0aGlzLmFwaS5nZXRBcGlVcmwoeyB1cmwsIHF1ZXJ5OiByZXNvdXJjZS5xdWVyeSB9KSA6IG51bGxcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZFJlcXVlc3QoeyBtZXRob2QsIHVybCwgcmVzb3VyY2UsIHF1ZXJ5LCBkYXRhLCBpbnRlcm5hbCB9KSB7XG4gICAgICB1cmwgfHw9IHRoaXMuZ2V0UmVzb3VyY2VQYXRoKHJlc291cmNlKVxuICAgICAgbWV0aG9kIHx8PSByZXNvdXJjZT8ubWV0aG9kXG4gICAgICBjb25zdCBjaGVja1VzZXIgPSAhaW50ZXJuYWwgJiYgdGhpcy5hcGkuaXNBcGlVcmwodXJsKVxuICAgICAgaWYgKGNoZWNrVXNlcikge1xuICAgICAgICBhd2FpdCB0aGlzLnJvb3RDb21wb25lbnQuZW5zdXJlVXNlcigpXG4gICAgICB9XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuYXBpLnJlcXVlc3QoeyBtZXRob2QsIHVybCwgZGF0YSwgcXVlcnkgfSlcbiAgICAgIC8vIERldGVjdCBjaGFuZ2Ugb2YgdGhlIG93biB1c2VyLCBhbmQgZmV0Y2ggaXQgYWdhaW4gaWYgaXQgd2FzIGNoYW5nZWQuXG4gICAgICBpZiAoXG4gICAgICAgIGNoZWNrVXNlciAmJlxuICAgICAgICBtZXRob2QgPT09ICdwYXRjaCcgJiZcbiAgICAgICAgZXF1YWxzKHJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSh0aGlzLnVzZXIuaWQsIHRoaXMuYXBpLnVzZXJzKSlcbiAgICAgICkge1xuICAgICAgICBhd2FpdCB0aGlzLnJvb3RDb21wb25lbnQuZmV0Y2hVc2VyKClcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNwb25zZVxuICAgIH0sXG5cbiAgICByZXF1ZXN0KHsgY2FjaGUsIC4uLm9wdGlvbnMgfSkge1xuICAgICAgLy8gQWxsb3cgY2FjaGluZyBvZiBsb2FkZWQgZGF0YSBvbiB0d28gbGV2ZWxzOlxuICAgICAgLy8gLSAnZ2xvYmFsJzogY2FjaGUgZ2xvYmFsbHksIGZvciB0aGUgZW50aXJlIGFkbWluIHNlc3Npb25cbiAgICAgIC8vIC0gJ2xvY2FsJzogY2FjaGUgbG9jYWxseSB3aXRoaW4gdGhlIGNsb3Nlc3Qgcm91dGUgY29tcG9uZW50IHRoYXQgaXNcbiAgICAgIC8vICAgIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlIGFuZCBsb2FkcyBpdHMgb3duIGRhdGEuXG4gICAgICBjb25zdCBjYWNoZVBhcmVudCA9IGNhY2hlICYmIHtcbiAgICAgICAgZ2xvYmFsOiB0aGlzLmFwcFN0YXRlLFxuICAgICAgICBsb2NhbDogdGhpcy5kYXRhQ29tcG9uZW50XG4gICAgICB9W2NhY2hlXVxuICAgICAgY29uc3QgbG9hZENhY2hlID0gY2FjaGVQYXJlbnQ/LmxvYWRDYWNoZVxuICAgICAgLy8gQnVpbGQgYSBjYWNoZSBrZXkgZnJvbSB0aGUgY29uZmlnOlxuICAgICAgY29uc3QgY2FjaGVLZXkgPSBsb2FkQ2FjaGUgJiYgYCR7XG4gICAgICAgIG9wdGlvbnMubWV0aG9kIHx8ICdnZXQnfSAke1xuICAgICAgICBvcHRpb25zLnVybH0gJHtcbiAgICAgICAgLy8gVE9ETzogYHJlcXVlc3QucGFyYW1zYCB3YXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBgcXVlcnlgIG9uXG4gICAgICAgIC8vIDIwMjItMTEtMDEsIHJlbW92ZSBvbmNlIG5vdCBpbiB1c2UgYW55d2hlcmUgYW55bW9yZS5cbiAgICAgICAgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5xdWVyeSB8fCBvcHRpb25zLnBhcmFtcyB8fCAnJyl9ICR7XG4gICAgICAgIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuZGF0YSB8fCAnJylcbiAgICAgIH1gXG4gICAgICBpZiAobG9hZENhY2hlICYmIChjYWNoZUtleSBpbiBsb2FkQ2FjaGUpKSB7XG4gICAgICAgIHJldHVybiBsb2FkQ2FjaGVbY2FjaGVLZXldXG4gICAgICB9XG4gICAgICAvLyBOT1RFOiBObyBhd2FpdCBoZXJlLCByZXMgaXMgYSBwcm9taXNlIHRoYXQgd2UgY2FuIGVhc2lseSBjYWNoZS5cbiAgICAgIC8vIFRoYXQncyBmaW5lIGJlY2F1c2UgcHJvbWlzZXMgY2FuIGJlIHJlc29sdmVkIG92ZXIgYW5kIG92ZXIgYWdhaW4uXG4gICAgICBjb25zdCByZXMgPSB0aGlzLnNlbmRSZXF1ZXN0KG9wdGlvbnMpXG4gICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmRhdGEpXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgLy8gQ29udmVydCBheGlvcyBlcnJvcnMgdG8gbm9ybWFsIGVycm9yc1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBlcnJvci5yZXNwb25zZT8uZGF0YVxuICAgICAgICAgIHRocm93IGRhdGFcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoZGF0YS5tZXNzYWdlKSwgZGF0YSlcbiAgICAgICAgICAgIDogZXJyb3JcbiAgICAgICAgfSlcbiAgICAgIGlmIChsb2FkQ2FjaGUpIHtcbiAgICAgICAgbG9hZENhY2hlW2NhY2hlS2V5XSA9IHJlc1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH0sXG5cbiAgICBmb3JtYXQodmFsdWUsIHtcbiAgICAgIGxvY2FsZSA9IHRoaXMuYXBpLmxvY2FsZSxcbiAgICAgIGRlZmF1bHRzID0gdGhpcy5hcGkuZm9ybWF0cyxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9ID0ge30pIHtcbiAgICAgIHJldHVybiBmb3JtYXQodmFsdWUsIHtcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBkZWZhdWx0cyxcbiAgICAgICAgLi4ub3B0aW9uc1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbmF2aWdhdGUobG9jYXRpb24pIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goXG4gICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgKCkgPT4gcmVzb2x2ZSh0cnVlKSxcbiAgICAgICAgICAoKSA9PiByZXNvbHZlKGZhbHNlKVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBkb3dubG9hZChvcHRpb25zID0ge30pIHtcbiAgICAgIGlmIChpc1N0cmluZyhvcHRpb25zKSkge1xuICAgICAgICBvcHRpb25zID0geyB1cmw6IG9wdGlvbnMgfVxuICAgICAgfVxuICAgICAgLy8gU2VlOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDk5MTcwNjYvMTE2MzcwOFxuICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgYS5ocmVmID0gdGhpcy5hcGkuZ2V0QXBpVXJsKG9wdGlvbnMpXG4gICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5maWxlbmFtZSA/PyBudWxsXG4gICAgICBjb25zdCB7IGJvZHkgfSA9IGRvY3VtZW50XG4gICAgICBib2R5LmFwcGVuZENoaWxkKGEpXG4gICAgICBhLmNsaWNrKClcbiAgICAgIGJvZHkucmVtb3ZlQ2hpbGQoYSlcbiAgICB9LFxuXG4gICAgbm90aWZ5KG9wdGlvbnMpIHtcbiAgICAgIHRoaXMucm9vdENvbXBvbmVudC5ub3RpZnkob3B0aW9ucylcbiAgICB9LFxuXG4gICAgY2xvc2VOb3RpZmljYXRpb25zKCkge1xuICAgICAgdGhpcy5yb290Q29tcG9uZW50LmNsb3NlTm90aWZpY2F0aW9ucygpXG4gICAgfSxcblxuICAgIHNldHVwU2NoZW1hRmllbGRzKCkge1xuICAgICAgdGhpcy5zZXR1cE1ldGhvZHMoKVxuICAgICAgdGhpcy5zZXR1cENvbXB1dGVkKClcbiAgICAgIHRoaXMuc2V0dXBFdmVudHMoKVxuICAgIH0sXG5cbiAgICBzZXR1cE1ldGhvZHMoKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5tZXRob2RzIHx8IHt9KSkge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgICB0aGlzW2tleV0gPSB2YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgbWV0aG9kIGRlZmluaXRpb246ICR7a2V5fTogJHt2YWx1ZX1gKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldHVwQ29tcHV0ZWQoKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5jb21wdXRlZCB8fCB7fSkpIHtcbiAgICAgICAgY29uc3QgYWNjZXNzb3IgPSBpc0Z1bmN0aW9uKHZhbHVlKVxuICAgICAgICAgID8geyBnZXQ6IHZhbHVlIH1cbiAgICAgICAgICA6IGlzT2JqZWN0KHZhbHVlKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmdldClcbiAgICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICBpZiAoYWNjZXNzb3IpIHtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywga2V5LCBhY2Nlc3NvcilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgY29tcHV0ZWQgcHJvcGVydHkgZGVmaW5pdGlvbjogJHtrZXl9OiAke3ZhbHVlfWBcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0dXBFdmVudHMoKSB7XG4gICAgICBjb25zdCB7IHdhdGNoLCBldmVudHMgfSA9IHRoaXMuc2NoZW1hXG4gICAgICBpZiAod2F0Y2gpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlcnMgPSBpc0Z1bmN0aW9uKHdhdGNoKSA/IHdhdGNoLmNhbGwodGhpcykgOiB3YXRjaFxuICAgICAgICBpZiAoaXNPYmplY3QoaGFuZGxlcnMpKSB7XG4gICAgICAgICAgLy8gSW5zdGFsbCB0aGUgd2F0Y2ggaGFuZGxlcnMgaW4gdGhlIG5leHQgdGljaywgc28gYWxsIGNvbXBvbmVudHMgYXJlXG4gICAgICAgICAgLy8gaW5pdGlhbGl6ZWQgYW5kIHdlIGNhbiBjaGVjayBhZ2FpbnN0IHRoZWlyIG5hbWVzLlxuICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgY2FsbGJhY2tdIG9mIE9iamVjdC5lbnRyaWVzKGhhbmRsZXJzKSkge1xuICAgICAgICAgICAgICAvLyBFeHBhbmQgcHJvcGVydHkgbmFtZXMgdG8gJ2RhdGEucHJvcGVydHknOlxuICAgICAgICAgICAgICBjb25zdCBleHByID0gdGhpcy5zY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50QnlOYW1lKGtleSlcbiAgICAgICAgICAgICAgICA/IGBkYXRhLiR7a2V5fWBcbiAgICAgICAgICAgICAgICA6IGtleVxuICAgICAgICAgICAgICB0aGlzLiR3YXRjaChleHByLCBjYWxsYmFjaylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFkZEV2ZW50ID0gKGtleSwgZXZlbnQsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgICAgIHRoaXMub24oaHlwaGVuYXRlKGV2ZW50KSwgY2FsbGJhY2spXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBldmVudCBkZWZpbml0aW9uOiAke2tleX06ICR7Y2FsbGJhY2t9YClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnRzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGV2ZW50cykpIHtcbiAgICAgICAgICBhZGRFdmVudChrZXksIGtleSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIEFsc28gc2NhbiBzY2hlbWEgZm9yIGBvbltBLVpdYC1zdHlsZSBjYWxsYmFja3MgYW5kIGFkZCB0aGVtXG4gICAgICAvLyBUT0RPOiBEZXBlcmVjYXRlIG9uZSBmb3JtYXQgb3IgdGhlIG90aGVyLCBpbiBmYXZvdXIgb2Ygb25seSBvbmUgd2F5IG9mXG4gICAgICAvLyBkb2luZyB0aGluZ3MuIERlY2lkZSB3aGljaCBvbmUgdG8gcmVtb3ZlLlxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEpKSB7XG4gICAgICAgIGlmICgvXm9uW0EtWl0vLnRlc3Qoa2V5KSkge1xuICAgICAgICAgIGFkZEV2ZW50KGtleSwga2V5LnNsaWNlKDIpLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBlbWl0RXZlbnQoZXZlbnQsIHtcbiAgICAgIGNvbnRleHQgPSBudWxsLFxuICAgICAgcGFyZW50ID0gbnVsbFxuICAgIH0gPSB7fSkge1xuICAgICAgY29uc3QgaGFzTGlzdGVuZXJzID0gdGhpcy5oYXNMaXN0ZW5lcnMoZXZlbnQpXG4gICAgICBjb25zdCBwYXJlbnRIYXNMaXN0ZW5lcnMgPSBwYXJlbnQ/Lmhhc0xpc3RlbmVycyhldmVudClcbiAgICAgIGlmIChoYXNMaXN0ZW5lcnMgfHwgcGFyZW50SGFzTGlzdGVuZXJzKSB7XG4gICAgICAgIC8vIFRoZSBlZmZlY3RzIG9mIHNvbWUgZXZlbnRzIG5lZWQgc29tZSB0aW1lIHRvIHByb3BhZ2F0ZSB0aHJvdWdoIFZ1ZS5cbiAgICAgICAgLy8gVXNlICRuZXh0VGljaygpIHRvIG1ha2Ugc3VyZSBvdXIgaGFuZGxlcnMgc2VlIHRoZXNlIGNoYW5nZXMuXG4gICAgICAgIC8vIEZvciBleGFtcGxlLCBgcHJvY2Vzc2VkSXRlbWAgaXMgb25seSBjb3JyZWN0IGFmdGVyIGNvbXBvbmVudHMgdGhhdFxuICAgICAgICAvLyBhcmUgbmV3bHkgcmVuZGVyZWQgZHVlIHRvIGRhdGEgY2hhbmdlcyBoYXZlIHJlZ2lzdGVyZWQgdGhlbXNlbHZlcy5cbiAgICAgICAgaWYgKFsnbG9hZCcsICdjaGFuZ2UnXS5pbmNsdWRlcyhldmVudCkpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLiRuZXh0VGljaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBnZXRDb250ZXh0ID0gKCkgPT4gKGNvbnRleHQgPSBEaXRvQ29udGV4dC5nZXQodGhpcywgY29udGV4dCkpXG4gICAgICAgIGNvbnN0IHJlcyA9IGhhc0xpc3RlbmVyc1xuICAgICAgICAgID8gYXdhaXQgdGhpcy5lbWl0KGV2ZW50LCBnZXRDb250ZXh0KCkpXG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgLy8gRG9uJ3QgYnViYmxlIHRvIHBhcmVudCBpZiBoYW5kbGVkIGV2ZW50IHJldHVybmVkIGBmYWxzZWBcbiAgICAgICAgaWYgKHBhcmVudEhhc0xpc3RlbmVycyAmJiByZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgcGFyZW50LmVtaXQoZXZlbnQsIGdldENvbnRleHQoKSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGVtaXRTY2hlbWFFdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnQuZW1pdEV2ZW50KGV2ZW50LCBwYXJhbXMpXG4gICAgfVxuICB9XG59XG5cbmxldCB1aWQgPSAwXG4iLCJpbXBvcnQgeyBpc0NyZWRpdENhcmQgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgY3JlZGl0Y2FyZCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzQ3JlZGl0Q2FyZCh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBpbnZhbGlkJ1xufVxuIiwiZXhwb3J0IGNvbnN0IGRlY2ltYWxzID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBkZWNpbWFscykgPT4ge1xuICAgIGNvbnN0IG1hdGNoID0gZGVjaW1hbHMgPT09ICcqJyA/ICcrJyA6IGB7MSwke2RlY2ltYWxzfX1gXG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF5bLStdP1xcXFxkKihcXFxcLlxcXFxkJHttYXRjaH0pPyRgKS50ZXN0KHZhbHVlKVxuICB9LFxuXG4gIG1lc3NhZ2U6ICh2YWx1ZSwgZGVjaW1hbHMpID0+IChcbiAgICBgbXVzdCBiZSBudW1lcmljIGFuZCBtYXkgY29udGFpbiAke1xuICAgICAgIWRlY2ltYWxzIHx8IGRlY2ltYWxzID09PSAnKicgPyAnJyA6IGRlY2ltYWxzXG4gICAgfSBkZWNpbWFsIHBvaW50c2BcbiAgKVxufVxuIiwiaW1wb3J0IHsgaXNFbWFpbCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBlbWFpbCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzRW1haWwodmFsdWUpLFxuICBtZXNzYWdlOiAnbXVzdCBiZSBhIHZhbGlkIGVtYWlsJ1xufVxuIiwiaW1wb3J0IHsgaXNIb3N0bmFtZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBob3N0bmFtZSA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzSG9zdG5hbWUodmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgaG9zdCBuYW1lJ1xufVxuIiwiaW1wb3J0IHsgaXNEb21haW4gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgZG9tYWluID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNEb21haW4odmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgZG9tYWluJ1xufVxuIiwiaW1wb3J0IHsgaXNJbnRlZ2VyIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGludGVnZXIgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0ludGVnZXIodmFsdWUpLFxuICBtZXNzYWdlOiAnbXVzdCBiZSB3aG9sZSBudW1iZXInXG59XG4iLCJleHBvcnQgY29uc3QgbWF4ID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBtYXgpID0+IHZhbHVlIDw9IG1heCxcbiAgbWVzc2FnZSh2YWx1ZSwgbWF4KSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlICR7bWF4fSBvciBsZXNzYFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgbWluID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBtaW4pID0+IHZhbHVlID49IG1pbixcbiAgbWVzc2FnZSh2YWx1ZSwgbWluKSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlICR7bWlufSBvciBtb3JlYFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgcGFzc3dvcmQgPSB7XG4gIC8vIEFsbG93IGFueSB2YWx1ZS4gRm9yIG5vdyB0aGlzIGlzIG9ubHkgdXNlZCBhcyBhIG1hcmtlciwgdG8gYWxsb3cgdGhlXG4gIC8vIHJlcXVpcmVkIHZhbGlkYXRpb24gdG8gaGFuZGxlIHVuY2hhbmdlZCBwYXNzd29yZHMgc2VwYXJhdGVseS5cbiAgdmFsaWRhdGU6ICgpID0+IHRydWVcbn1cbiIsImV4cG9ydCBjb25zdCByYW5nZSA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgW21pbiwgbWF4XSkgPT4gdmFsdWUgPj0gbWluICYmIHZhbHVlIDw9IG1heCxcbiAgbWVzc2FnZSh2YWx1ZSwgW21pbiwgbWF4XSkge1xuICAgIHJldHVybiBgbXVzdCBiZSBiZXR3ZWVuICR7bWlufSBhbmQgJHttYXh9YFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgcmVxdWlyZWQgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIHNldHRpbmdzLCB7IHBhc3N3b3JkIH0pID0+IChcbiAgICAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycpIHx8XG4gICAgLy8gUGFzc3dvcmQgZmllbGRzIHVzZSBgdW5kZWZpbmVkYCBhcyBvcHBvc2VkIHRvIGBudWxsYCB3aGVuIHRoZXkncmUgc2V0XG4gICAgLy8gYnV0IHVuY2hhbmdlZCwgYWxsb3cgdGhpcyB0byBwYXNzIHRocm91Z2g6XG4gICAgKHBhc3N3b3JkICYmIHZhbHVlID09PSB1bmRlZmluZWQpXG4gICksXG4gIG1lc3NhZ2U6ICdpcyByZXF1aXJlZCcsXG4gIG51bGxpc2g6IHRydWVcbn1cbiIsImltcG9ydCB7IGlzVXJsIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IHVybCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzVXJsKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIHZhbGlkIFVSTCdcbn1cbiIsImltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0ICogYXMgdmFsaWRhdGlvbnMgZnJvbSAnLi4vdmFsaWRhdGlvbnMvaW5kZXguanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVG91Y2hlZDogZmFsc2UsXG4gICAgICBpc0RpcnR5OiBmYWxzZSxcbiAgICAgIGlzVmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgZXJyb3JzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZXZlbnRzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9jdXM6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzVG91Y2hlZCA9IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgYmx1cjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGUoKVxuICAgICAgICB9LFxuICAgICAgICBjaGFuZ2U6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLm1hcmtEaXJ0eSgpXG4gICAgICAgIH0sXG4gICAgICAgIGlucHV0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5tYXJrRGlydHkoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICB0aGlzLmlzVG91Y2hlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzRGlydHkgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZVxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIHZhbGlkYXRlKG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXNcbiAgICAgIC8vIGNvbnNvbGUubG9nKCd2YWxpZGF0ZScsIHRoaXMuZGF0YVBhdGgsIHZhbHVlLCB0aGlzLnZhbGlkYXRpb25zKVxuICAgICAgZm9yIChjb25zdCBbcnVsZSwgc2V0dGluZ10gb2YgT2JqZWN0LmVudHJpZXModGhpcy52YWxpZGF0aW9ucykpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdG9yID0gdmFsaWRhdGlvbnNbcnVsZV1cbiAgICAgICAgaWYgKHZhbGlkYXRvciAmJiAodmFsaWRhdG9yLm51bGxpc2ggfHwgdmFsdWUgIT0gbnVsbCkpIHtcbiAgICAgICAgICBjb25zdCB7IHZhbGlkYXRlLCBtZXNzYWdlIH0gPSB2YWxpZGF0b3JcbiAgICAgICAgICBpZiAoIXZhbGlkYXRlKHZhbHVlLCBzZXR0aW5nLCB0aGlzLnZhbGlkYXRpb25zKSkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNGdW5jdGlvbihtZXNzYWdlKVxuICAgICAgICAgICAgICAgID8gbWVzc2FnZSh2YWx1ZSwgc2V0dGluZywgdGhpcylcbiAgICAgICAgICAgICAgICA6IG1lc3NhZ2VcbiAgICAgICAgICAgICAgdGhpcy5hZGRFcnJvcihlcnJvciwgdHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IHRydWVcbiAgICAgICAgdGhpcy5pc1ZhbGlkID0gaXNWYWxpZFxuICAgICAgfVxuICAgICAgcmV0dXJuIGlzVmFsaWRcbiAgICB9LFxuXG4gICAgdmVyaWZ5KCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGUoZmFsc2UpXG4gICAgfSxcblxuICAgIG1hcmtEaXJ0eSgpIHtcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IHRydWVcbiAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkID0gZmFsc2VcbiAgICAgIC8vIENsZWFyIGN1cnJlbnRseSBkaXNwbGF5ZWQgZXJyb3JzIG9uIG5ldyBpbnB1dC5cbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICBhZGRFcnJvcihlcnJvciwgYWRkTGFiZWwgPSBmYWxzZSkge1xuICAgICAgdGhpcy5lcnJvcnMgfHw9IFtdXG4gICAgICBpZiAoYWRkTGFiZWwpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmxhYmVsIHx8IHRoaXMucGxhY2Vob2xkZXIgfHwgdGhpcy5uYW1lXG4gICAgICAgIGVycm9yID0gYFRoZSAke2xhYmVsfSBmaWVsZCAke2Vycm9yfS5gXG4gICAgICB9XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yKVxuICAgICAgdGhpcy4kZW1pdCgnZXJyb3JzJywgdGhpcy5lcnJvcnMpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIC8vIENvbnZlcnQgZnJvbSBBSlYgZXJyb3JzIG9iamVjdHMgdG8gYW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHRoaXMuZXJyb3JzID0gW11cbiAgICAgIGZvciAoY29uc3QgeyBtZXNzYWdlIH0gb2YgZXJyb3JzKSB7XG4gICAgICAgIHRoaXMuYWRkRXJyb3IobWVzc2FnZSwgdHJ1ZSlcbiAgICAgIH1cbiAgICAgIGlmIChmb2N1cykge1xuICAgICAgICB0aGlzLmZvY3VzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSxcblxuICAgIGdldEVycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLmVycm9ycyA/IFsuLi50aGlzLmVycm9yc10gOiBudWxsXG4gICAgfSxcblxuICAgIGNsZWFyRXJyb3JzKCkge1xuICAgICAgdGhpcy5lcnJvcnMgPSBudWxsXG4gICAgICB0aGlzLiRlbWl0KCdlcnJvcnMnLCB0aGlzLmVycm9ycylcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGlzRnVuY3Rpb24sIGlzU3RyaW5nLCBwYXJzZURhdGFQYXRoLCBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NoZW1hQWNjZXNzb3IoXG4gIGtleU9yRGF0YVBhdGgsXG4gIHsgdHlwZSwgZGVmYXVsdDogZGVmLCBnZXQsIHNldCwgY2FsbGJhY2sgPSB0cnVlIH0gPSB7fVxuKSB7XG4gIC8vIGBrZXlPckRhdGFQYXRoYCBjYW4gYmUgYSBzaW1wbGUgcHJvcGVydHkga2V5LFxuICAvLyBvciBhIGRhdGEtcGF0aCBpbnRvIHN1Yi1wcm9wZXJ0aWVzLCBib3RoIGluIGFycmF5IG9yIHN0cmluZyBmb3JtYXQuXG4gIGlmIChpc1N0cmluZyhrZXlPckRhdGFQYXRoKSAmJiBrZXlPckRhdGFQYXRoLmluY2x1ZGVzKCcuJykpIHtcbiAgICBrZXlPckRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChrZXlPckRhdGFQYXRoKVxuICB9XG4gIC8vIFVzZSB0aGUgbm9ybWFsaXplZCBkYXRhIHBhdGggZm9yIHRoZSBoYW5kbGluZyBvdmVycmlkZXNcbiAgY29uc3QgbmFtZSA9IG5vcm1hbGl6ZURhdGFQYXRoKGtleU9yRGF0YVBhdGgpXG4gIHJldHVybiB7XG4gICAgZ2V0KCkge1xuICAgICAgLy8gT25seSBkZXRlcm1pbmUgc2NoZW1hIHZhbHVlIGlmIHdlIGhhdmUgbm8gZ2V0dGVyLCBvciB0aGUgZ2V0dGVyXG4gICAgICAvLyB3YW50cyB0byByZWNlaXZlIHRoZSB2YWx1ZSBhbmQgcHJvY2VzcyBpdCBmdXJ0aGVyOlxuICAgICAgY29uc3QgdmFsdWUgPSAhZ2V0IHx8IGdldC5sZW5ndGggPiAwXG4gICAgICAgIC8vIE5PVEU6IEJlY2F1c2UgYHNjaGVtYWAgb2JqZWN0cyBhcmUgcmV0cmlldmVkIGZyb20gYG1ldGFgIG9iamVjdCwgdGhleVxuICAgICAgICAvLyBkb24ndCBzZWVtIHRvIGJlIHJlYWN0aXZlLiBUbyBhbGxvdyBjaGFuZ2VkIGluIGBzY2hlbWFgIHZhbHVlcyxcbiAgICAgICAgLy8gYHNldCgpYCBzdG9yZXMgY2hhbmdlZCB2YWx1ZXMgaW4gdGhlIHNlcGFyYXRlIGBvdmVycmlkZXNgIG9iamVjdC5cbiAgICAgICAgPyB0aGlzLm92ZXJyaWRlcyAmJiBuYW1lIGluIHRoaXMub3ZlcnJpZGVzXG4gICAgICAgICAgPyB0aGlzLm92ZXJyaWRlc1tuYW1lXVxuICAgICAgICAgIDogdGhpcy5nZXRTY2hlbWFWYWx1ZShrZXlPckRhdGFQYXRoLCB7IHR5cGUsIGRlZmF1bHQ6IGRlZiwgY2FsbGJhY2sgfSlcbiAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIHJldHVybiBnZXQgPyBnZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIGlmIChzZXQpIHtcbiAgICAgICAgc2V0LmNhbGwodGhpcywgdmFsdWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm92ZXJyaWRlcyB8fD0ge31cbiAgICAgICAgdGhpcy4kc2V0KHRoaXMub3ZlcnJpZGVzLCBuYW1lLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0b3JlQWNjZXNzb3IobmFtZSwgeyBkZWZhdWx0OiBkZWYsIGdldCwgc2V0IH0gPSB7fSkge1xuICByZXR1cm4ge1xuICAgIGdldCgpIHtcbiAgICAgIGxldCB2YWx1ZSA9IHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zOlxuICAgICAgICB2YWx1ZSA9IGlzRnVuY3Rpb24oZGVmKSA/IGRlZi5jYWxsKHRoaXMsIHRoaXMuY29udGV4dCkgOiBkZWZcbiAgICAgICAgLy8gVHJpZ2dlciBzZXR0ZXIgYnkgc2V0dGluZyB2YWx1ZSBhbmQgYWNjZXNzb3IgdG8gZGVmYXVsdDpcbiAgICAgICAgdGhpc1tuYW1lXSA9IHZhbHVlXG4gICAgICAgIC8vIE5vdyBhY2Nlc3Mgc3RvcmUgYWdhaW4sIGZvciByZWFjdGl2aXR5IHRyYWNraW5nXG4gICAgICAgIHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIH1cbiAgICAgIC8vIEFsbG93IHRoZSBwcm92aWRlZCBnZXR0ZXIgdG8gZnVydGhlciBjaGFuZ2Ugb3IgcHJvY2VzcyB0aGUgdmFsdWVcbiAgICAgIC8vIHJldHJpZXZlZCBmcm9tIHRoZSBzdG9yZTpcbiAgICAgIHJldHVybiBnZXQgPyBnZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIC8vIEFsbG93IHRoZSBwcm92aWRlZCBzZXR0ZXIgdG8gcmV0dXJuIGEgbmV3IHZhbHVlIHRvIHNldCwgb3IgZG8gdGhlXG4gICAgICAvLyBzZXR0aW5nIGl0c2VsZiwgYW5kIHRoZW4gcmV0dXJuIGB1bmRlZmluZWRgOlxuICAgICAgaWYgKCFzZXQgfHwgKHZhbHVlID0gc2V0LmNhbGwodGhpcywgdmFsdWUpKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuc2V0U3RvcmUobmFtZSwgdmFsdWUpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJjb25zdCB1aWRNYXAgPSBuZXcgV2Vha01hcCgpXG5cbi8vIEdlbmVyYXRlZCBhbmQgcmVtZW1iZXJzIHVuaXF1ZSBpZHMgcGVyIHBhc3NlZCBvYmplY3QgdXNpbmcgYSB3ZWFrIG1hcC5cbmxldCB1aWQgPSAwXG5leHBvcnQgZnVuY3Rpb24gZ2V0VWlkKG9iamVjdCwgaXRlbUlkKSB7XG4gIGxldCBpZCA9IHVpZE1hcC5nZXQob2JqZWN0KVxuICBpZiAoIWlkKSB7XG4gICAgaWQgPSBpdGVtSWQgfHwgYEAkeysrdWlkfWBcbiAgICB1aWRNYXAuc2V0KG9iamVjdCwgaWQpXG4gIH1cbiAgcmV0dXJuIGlkXG59XG4iLCJpbXBvcnQgeyBpc1RlbXBvcmFyeUlkIH0gZnJvbSAnLi9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgaXNJbnRlZ2VyLCBhc0FycmF5LCBwYXJzZURhdGFQYXRoLCBnZXRWYWx1ZUF0RGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IG5hbm9pZCB9IGZyb20gJ25hbm9pZCdcblxuLy8gU2NoZW1hR3JhcGggaXMgYSBjbGFzcyB0byBjb2xsZWN0IHNjaGVtYSBncmFwaCBtZXRhIGluZm9ybWF0aW9uIGluIG9yZGVyIHRvXG4vLyBwcm9jZXNzIHNvdXJjZXMgYW5kIHJlbGF0aW9ucyBmb3IgdGhlIGdpdmVuIHRhcmdldHMgJ3NlcnZlcicgYW5kICdjbGlwYm9hcmQnLFxuLy8gYWNjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHRhYmxlOlxuLy9cbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG4vLyB8IGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZXJ2ZXIgICAgfCBjbGlwYm9hcmQgfFxuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IGZhbHNlICAgICAgICAgICB8IGtlZXAgaWQgICB8IGtlZXAgaWQgICB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiB0cnVlICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZWYsICNyZWYgfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogdHJ1ZSwgdGVtcG9yYXJ5IHwgcmVmLCAjcmVmIHwgcmVmLCAjcmVmIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IGZhbHNlICAgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlbW92ZSBpZCB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiBmYWxzZSwgdGVtcG9yYXJ5ICAgfCByZWYsICNpZCAgfCByZW1vdmUgaWQgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogdHJ1ZSAgICAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVmLCAjaWQgIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IHRydWUsIHRlbXBvcmFyeSAgICB8IHJlZiwgI2lkICB8IHJlZiwgI2lkICB8XG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuXG5leHBvcnQgY2xhc3MgU2NoZW1hR3JhcGgge1xuICBncmFwaCA9IHt9XG4gIHJlZmVyZW5jZXMgPSB7fVxuXG4gIHNldChkYXRhUGF0aCwgc2V0dGluZ3MsIGRlZmF1bHRzKSB7XG4gICAgZGF0YVBhdGggPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxuICAgIGxldCBzdWJHcmFwaCA9IHRoaXMuZ3JhcGhcbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgZGF0YVBhdGgpIHtcbiAgICAgIGNvbnN0IGtleSA9IGlzSW50ZWdlcigrcGFydCkgPyAnKicgOiBwYXJ0XG4gICAgICBzdWJHcmFwaCA9IChzdWJHcmFwaFtrZXldID8/PSB7fSlcbiAgICB9XG4gICAgc3ViR3JhcGguJHNldHRpbmdzID0ge1xuICAgICAgLi4uZGVmYXVsdHMsIC8vIFNlZSBgYWRkU291cmNlKGRhdGFQYXRoKWBcbiAgICAgIC4uLnN1YkdyYXBoLiRzZXR0aW5ncyxcbiAgICAgIC4uLnNldHRpbmdzXG4gICAgfVxuICB9XG5cbiAgYWRkU291cmNlKGRhdGFQYXRoLCBzY2hlbWEpIHtcbiAgICAvLyBPbmx5IHNldCBgcmVsYXRlZDogZmFsc2VgIHRocm91Z2ggdGhlIGRlZmF1bHRzLCBhcyBgc2V0U291cmNlUmVsYXRlZCgpYFxuICAgIC8vIG1heSBiZSBjYWxsZWQgYmVmb3JlIGBhZGRTb3VyY2UoKWAsIGRlcGVuZGluZyBvbiB0aGUgZ3JhcGggc3RydWN0dXJlLlxuICAgIHRoaXMuc2V0KGRhdGFQYXRoLCB7IHR5cGU6ICdzb3VyY2UnLCBzY2hlbWEgfSwgeyByZWxhdGVkOiBmYWxzZSB9KVxuICB9XG5cbiAgc2V0U291cmNlUmVsYXRlZChkYXRhUGF0aCkge1xuICAgIHRoaXMuc2V0KGRhdGFQYXRoLCB7XG4gICAgICByZWxhdGVkOiB0cnVlLFxuICAgICAgcmVmZXJlbmNlOiB0aGlzLmdldFJlZmVyZW5jZVByZWZpeChkYXRhUGF0aClcbiAgICB9KVxuICB9XG5cbiAgYWRkUmVsYXRpb24oZGF0YVBhdGgsIHJlbGF0ZWREYXRhUGF0aCwgc2NoZW1hKSB7XG4gICAgdGhpcy5zZXQoZGF0YVBhdGgsIHtcbiAgICAgIHR5cGU6ICdyZWxhdGlvbicsXG4gICAgICBzY2hlbWEsXG4gICAgICBpbnRlcm5hbDogISFyZWxhdGVkRGF0YVBhdGgsXG4gICAgICByZWZlcmVuY2U6IHRoaXMuZ2V0UmVmZXJlbmNlUHJlZml4KHJlbGF0ZWREYXRhUGF0aClcbiAgICB9KVxuICB9XG5cbiAgZ2V0UmVmZXJlbmNlUHJlZml4KGRhdGFQYXRoKSB7XG4gICAgcmV0dXJuIGRhdGFQYXRoXG4gICAgICA/ICh0aGlzLnJlZmVyZW5jZXNbZGF0YVBhdGhdID8/PSBuYW5vaWQoNikpXG4gICAgICA6IG51bGxcbiAgfVxuXG4gIGZsYXR0ZW4oKSB7XG4gICAgY29uc3QgZmxhdHRlbiA9IGdyYXBoID0+IHtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBbXVxuICAgICAgZm9yIChjb25zdCBba2V5LCB7ICRzZXR0aW5ncywgLi4uc3ViR3JhcGggfV0gb2YgT2JqZWN0LmVudHJpZXMoZ3JhcGgpKSB7XG4gICAgICAgIGlmICgkc2V0dGluZ3MpIHtcbiAgICAgICAgICBlbnRyaWVzLnB1c2goW2tleSwgJHNldHRpbmdzXSlcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IFtzdWJLZXksIHNldHRpbmdzXSBvZiBmbGF0dGVuKHN1YkdyYXBoKSkge1xuICAgICAgICAgIGVudHJpZXMucHVzaChbYCR7a2V5fS8ke3N1YktleX1gLCBzZXR0aW5nc10pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBlbnRyaWVzXG4gICAgfVxuXG4gICAgcmV0dXJuIGZsYXR0ZW4odGhpcy5ncmFwaClcbiAgfVxuXG4gIHByb2Nlc3Moc291cmNlU2NoZW1hLCBkYXRhLCB7IHRhcmdldCB9KSB7XG4gICAgY29uc3QgY2xpcGJvYXJkID0gdGFyZ2V0ID09PSAnY2xpcGJvYXJkJ1xuICAgIGlmIChjbGlwYm9hcmQpIHtcbiAgICAgIGRlbGV0ZSBkYXRhW3NvdXJjZVNjaGVtYS5pZEtleSB8fCAnaWQnXVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtkYXRhUGF0aCwgc2V0dGluZ3NdIG9mIHRoaXMuZmxhdHRlbigpKSB7XG4gICAgICBjb25zdCB7IHR5cGUsIHNjaGVtYSwgaW50ZXJuYWwsIHJlbGF0ZWQsIHJlZmVyZW5jZSB9ID0gc2V0dGluZ3NcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHR5cGUgPT09ICdzb3VyY2UnXG4gICAgICBjb25zdCByZWxhdGlvbiA9IHR5cGUgPT09ICdyZWxhdGlvbidcbiAgICAgIGlmIChzb3VyY2UgfHwgcmVsYXRpb24gJiYgaW50ZXJuYWwpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gZ2V0VmFsdWVBdERhdGFQYXRoKGRhdGEsIGRhdGFQYXRoLCAoKSA9PiBudWxsKVxuICAgICAgICBjb25zdCByZW1vdmVJZCA9IGNsaXBib2FyZCAmJiBzb3VyY2UgJiYgIXJlbGF0ZWRcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlSWQgPSBjbGlwYm9hcmQgJiYgKFxuICAgICAgICAgIHJlbGF0aW9uICYmIGludGVybmFsIHx8XG4gICAgICAgICAgc291cmNlICYmIHJlbGF0ZWRcbiAgICAgICAgKVxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGFzQXJyYXkodmFsdWVzKS5mbGF0KCkpIHtcbiAgICAgICAgICBjb25zdCBpZEtleSA9IChcbiAgICAgICAgICAgIHNvdXJjZSAmJiBzY2hlbWEuaWRLZXkgfHxcbiAgICAgICAgICAgIHJlbGF0aW9uICYmIHNjaGVtYS5yZWxhdGVCeSB8fFxuICAgICAgICAgICAgJ2lkJ1xuICAgICAgICAgIClcbiAgICAgICAgICBsZXQgaWQgPSB2YWx1ZT8uW2lkS2V5XVxuICAgICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAocmVtb3ZlSWQpIHtcbiAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2lkS2V5XVxuICAgICAgICAgICAgfSBpZiAocmVmZXJlbmNlSWQgfHwgaXNUZW1wb3JhcnlJZChpZCkpIHtcbiAgICAgICAgICAgICAgaWYgKGlzVGVtcG9yYXJ5SWQoaWQpKSB7XG4gICAgICAgICAgICAgICAgaWQgPSBpZC5zbGljZSgxKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHJlZktleSA9IGNsaXBib2FyZFxuICAgICAgICAgICAgICAgIC8vIENsaXBib2FyZCBqdXN0IG5lZWRzIHRlbXBvcmFyeSBpZHMgdW5kZXIgdGhlIGFjdHVhbCBgaWRLZXlgLlxuICAgICAgICAgICAgICAgID8gaWRLZXlcbiAgICAgICAgICAgICAgICAvLyBTZXJ2ZXIgd2FudHMgT2JqZWN0aW9uLXN0eWxlICcjaWQnIC8gJyNyZWYnIHBhaXJzLlxuICAgICAgICAgICAgICAgIDogc291cmNlID8gJyNpZCcgOiAnI3JlZidcbiAgICAgICAgICAgICAgY29uc3QgcmV2VmFsdWUgPSBjbGlwYm9hcmRcbiAgICAgICAgICAgICAgICA/IGBAJHtpZH1gXG4gICAgICAgICAgICAgICAgLy8gS2VlcCB0aGUgaWRzIHVuaXF1ZSBpbiByZWZlcmVuY2UgZ3JvdXBzLCBzaW5jZSB0aGV5IHJlZmVyZW5jZVxuICAgICAgICAgICAgICAgIC8vIGFjY3Jvc3MgdGhlIGZ1bGwgZ3JhcGguXG4gICAgICAgICAgICAgICAgOiByZWZlcmVuY2VcbiAgICAgICAgICAgICAgICAgID8gYCR7cmVmZXJlbmNlfS0ke2lkfWBcbiAgICAgICAgICAgICAgICAgIDogaWQgLy8gQSB0ZW1wb3JhcnkgaWQgd2l0aG91dCBhIHJlbGF0ZWQsIGp1c3QgcHJlc2VydmUgaXQuXG4gICAgICAgICAgICAgIHZhbHVlW3JlZktleV0gPSByZXZWYWx1ZVxuICAgICAgICAgICAgICBpZiAocmVmS2V5ICE9PSBpZEtleSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtpZEtleV1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YVxuICB9XG59XG4iLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7IGdldFVpZCB9IGZyb20gJy4vdWlkLmpzJ1xuaW1wb3J0IHsgU2NoZW1hR3JhcGggfSBmcm9tICcuL1NjaGVtYUdyYXBoLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGgsIGlzVGVtcG9yYXJ5SWQgfSBmcm9tICcuL2RhdGEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCwgaXNTdHJpbmcsIGlzQXJyYXksIGlzRnVuY3Rpb24sIGlzUHJvbWlzZSwgY2xvbmUsIGNhbWVsaXplLCBpc01vZHVsZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5jb25zdCB0eXBlQ29tcG9uZW50cyA9IHt9XG5jb25zdCB1bmtub3duVHlwZVJlcG9ydGVkID0ge31cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyVHlwZUNvbXBvbmVudCh0eXBlLCBjb21wb25lbnQpIHtcbiAgdHlwZUNvbXBvbmVudHNbdHlwZV0gPSBjb21wb25lbnRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVDb21wb25lbnQodHlwZSwgYWxsb3dOdWxsID0gZmFsc2UpIHtcbiAgY29uc3QgY29tcG9uZW50ID0gdHlwZUNvbXBvbmVudHNbdHlwZV0gfHwgbnVsbFxuICBpZiAoIWNvbXBvbmVudCAmJiAhYWxsb3dOdWxsICYmICF1bmtub3duVHlwZVJlcG9ydGVkW3R5cGVdKSB7XG4gICAgLy8gUmVwb3J0IGVhY2ggbWlzc2luZyB0eXBlIG9ubHkgb25jZSwgdG8gYXZvaWQgZmxvb2RpbmcgdGhlIGNvbnNvbGU6XG4gICAgdW5rbm93blR5cGVSZXBvcnRlZFt0eXBlXSA9IHRydWVcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gRGl0byBjb21wb25lbnQgdHlwZTogJyR7dHlwZX0nYClcbiAgfVxuICByZXR1cm4gY29tcG9uZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JFYWNoU2NoZW1hKHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgY29uc3Qgc2NoZW1hcyA9IFtcbiAgICAuLi5PYmplY3QudmFsdWVzKHNjaGVtYT8udGFicyB8fCB7fSksXG4gICAgc2NoZW1hXG4gIF1cbiAgZm9yIChjb25zdCBzY2hlbWEgb2Ygc2NoZW1hcykge1xuICAgIGlmIChzY2hlbWEpIHtcbiAgICAgIGNvbnN0IHJlcyA9IGNhbGxiYWNrKHNjaGVtYSlcbiAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JFYWNoU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZvckVhY2hTY2hlbWEoc2NoZW1hLCBzY2hlbWEgPT4ge1xuICAgIGZvciAoY29uc3QgW25hbWUsIGNvbXBvbmVudF0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hLmNvbXBvbmVudHMgfHwge30pKSB7XG4gICAgICBjb25zdCByZXMgPSBjYWxsYmFjayhjb21wb25lbnQsIG5hbWUpXG4gICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgfVxuICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gZm9yRWFjaFNjaGVtYUNvbXBvbmVudChcbiAgICBzY2hlbWEsXG4gICAgKGNvbXBvbmVudCwgbmFtZSkgPT4gY2FsbGJhY2soY29tcG9uZW50LCBuYW1lKSA/IGNvbXBvbmVudCA6IHVuZGVmaW5lZFxuICApIHx8IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWVTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gZm9yRWFjaFNjaGVtYUNvbXBvbmVudChcbiAgICBzY2hlbWEsXG4gICAgKGNvbXBvbmVudCwgbmFtZSkgPT4gY2FsbGJhY2soY29tcG9uZW50LCBuYW1lKSA/IHRydWUgOiB1bmRlZmluZWRcbiAgKSA9PT0gdHJ1ZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZlcnlTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gZm9yRWFjaFNjaGVtYUNvbXBvbmVudChcbiAgICBzY2hlbWEsXG4gICAgKGNvbXBvbmVudCwgbmFtZSkgPT4gIWNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSkgPyBmYWxzZSA6IHVuZGVmaW5lZFxuICApICE9PSBmYWxzZVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYShzY2hlbWEsIHVud3JhcE1vZHVsZSA9IGZhbHNlKSB7XG4gIGlmIChpc0Z1bmN0aW9uKHNjaGVtYSkpIHtcbiAgICBzY2hlbWEgPSBzY2hlbWEoKVxuICB9XG4gIGlmIChpc1Byb21pc2Uoc2NoZW1hKSkge1xuICAgIHNjaGVtYSA9IGF3YWl0IHNjaGVtYVxuICB9XG4gIGlmIChpc01vZHVsZShzY2hlbWEpKSB7XG4gICAgLy8gQ29weSB0byBjb252ZXJ0IGZyb20gbW9kdWxlIHRvIG9iamVjdDpcbiAgICBzY2hlbWEgPSB7IC4uLnNjaGVtYSB9XG4gICAgLy8gVW53cmFwIGRlZmF1bHQgb3IgbmFtZWQgc2NoZW1hXG4gICAgaWYgKCFzY2hlbWEubmFtZSAmJiAodW53cmFwTW9kdWxlIHx8IHNjaGVtYS5kZWZhdWx0KSkge1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHNjaGVtYSlcbiAgICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb25zdCBuYW1lID0ga2V5c1swXVxuICAgICAgICBzY2hlbWEgPSBzY2hlbWFbbmFtZV1cbiAgICAgICAgaWYgKG5hbWUgIT09ICdkZWZhdWx0Jykge1xuICAgICAgICAgIHNjaGVtYS5uYW1lID0gbmFtZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBzY2hlbWFcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWFzKFxuICB1bnJlc29sdmVkU2NoZW1hcyxcbiAgcmVzb2x2ZUl0ZW0gPSByZXNvbHZlU2NoZW1hXG4pIHtcbiAgbGV0IHNjaGVtYXMgPSBpc0Z1bmN0aW9uKHVucmVzb2x2ZWRTY2hlbWFzKVxuICAgID8gdW5yZXNvbHZlZFNjaGVtYXMoKVxuICAgIDogdW5yZXNvbHZlZFNjaGVtYXNcbiAgc2NoZW1hcyA9IGF3YWl0IHJlc29sdmVTY2hlbWEoc2NoZW1hcywgZmFsc2UpXG4gIGlmIChpc0FycmF5KHNjaGVtYXMpKSB7XG4gICAgLy8gVHJhbnNsYXRlIGFuIGFycmF5IG9mIGR5bmFtaWMgaW1wb3J0LCBlYWNoIGltcG9ydGluZyBvbmUgbmFtZWQgc2NoZW1hXG4gICAgLy8gbW9kdWxlIHRvIGFuIG9iamVjdCB3aXRoIG5hbWVkIGVudHJpZXMuXG4gICAgc2NoZW1hcyA9IE9iamVjdC5mcm9tRW50cmllcyhhd2FpdCBQcm9taXNlLmFsbChzY2hlbWFzLm1hcChcbiAgICAgIGFzeW5jIGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICByZXR1cm4gW3NjaGVtYS5uYW1lLCBzY2hlbWFdXG4gICAgICB9XG4gICAgKSkpXG4gIH0gZWxzZSBpZiAoaXNPYmplY3Qoc2NoZW1hcykpIHtcbiAgICBzY2hlbWFzID0gT2JqZWN0LmZyb21FbnRyaWVzKGF3YWl0IFByb21pc2UuYWxsKE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpLm1hcChcbiAgICAgIGFzeW5jIChba2V5LCBpdGVtXSkgPT4ge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICByZXR1cm4gW2tleSwgc2NoZW1hXVxuICAgICAgfVxuICAgICkpKVxuICB9XG4gIHJldHVybiBzY2hlbWFzXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlUGFuZWxzKHNjaGVtYSkge1xuICBjb25zdCB7IHBhbmVscyB9ID0gc2NoZW1hXG4gIGlmIChzY2hlbWEucGFuZWxzKSB7XG4gICAgc2NoZW1hLnBhbmVscyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKHBhbmVscylcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1ZpZXcoY29tcG9uZW50LCBhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzKSB7XG4gIGNvbnN0IGNoaWxkcmVuID0gW11cbiAgcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lKVxuICBhd2FpdCByZXNvbHZlUGFuZWxzKHNjaGVtYSlcbiAgaWYgKGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpKSB7XG4gICAgYXdhaXQgcHJvY2Vzc0NvbXBvbmVudChhcGksIHNjaGVtYSwgbmFtZSwgY2hpbGRyZW4sIDApXG4gIH0gZWxzZSB7XG4gICAgLy8gQSBtdWx0aS1jb21wb25lbnQgdmlldywgc3RhcnQgYXQgbGV2ZWwgMVxuICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgc2NoZW1hLCBjaGlsZHJlbiwgMSlcbiAgfVxuICByb3V0ZXMucHVzaCh7XG4gICAgcGF0aDogYC8ke3NjaGVtYS5wYXRofWAsXG4gICAgY2hpbGRyZW4sXG4gICAgY29tcG9uZW50LFxuICAgIG1ldGE6IHtcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYVxuICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NDb21wb25lbnQoYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwpIHtcbiAgc2NoZW1hLmxldmVsID0gbGV2ZWxcbiAgLy8gRGVsZWdhdGUgc2NoZW1hIHByb2Nlc3NpbmcgdG8gdGhlIGFjdHVhbCB0eXBlIGNvbXBvbmVudHMuXG4gIHJldHVybiBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5wcm9jZXNzU2NoZW1hPy4oXG4gICAgYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWxcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lKSB7XG4gIC8vIFVzZWQgZm9yIHZpZXcgYW5kIHNvdXJjZSBzY2hlbWFzLCBzZWUgU291cmNlTWl4aW5cbiAgc2NoZW1hLm5hbWUgPSBuYW1lXG4gIHNjaGVtYS5wYXRoID0gc2NoZW1hLnBhdGggfHwgYXBpLm5vcm1hbGl6ZVBhdGgobmFtZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgc2NoZW1hLCByb3V0ZXMsIGxldmVsKSB7XG4gIGNvbnN0IHByb21pc2VzID0gW11cbiAgZm9yRWFjaFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIChjb21wb25lbnQsIG5hbWUpID0+IHtcbiAgICBwcm9taXNlcy5wdXNoKHByb2Nlc3NDb21wb25lbnQoYXBpLCBjb21wb25lbnQsIG5hbWUsIHJvdXRlcywgbGV2ZWwpKVxuICB9KVxuICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcylcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NGb3JtcyhhcGksIHNjaGVtYSwgbGV2ZWwpIHtcbiAgLy8gRmlyc3QgcmVzb2x2ZSB0aGUgZm9ybXMgYW5kIHN0b3JlIHRoZSByZXN1bHRzIGJhY2sgb24gdGhlIHNjaGVtYS5cbiAgbGV0IHsgZm9ybSwgZm9ybXMsIGNvbXBvbmVudHMgfSA9IHNjaGVtYVxuICBpZiAoZm9ybXMpIHtcbiAgICBmb3JtcyA9IHNjaGVtYS5mb3JtcyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKGZvcm1zLCByZXNvbHZlRm9ybSlcbiAgfSBlbHNlIGlmIChmb3JtKSB7XG4gICAgZm9ybSA9IHNjaGVtYS5mb3JtID0gYXdhaXQgcmVzb2x2ZUZvcm0oZm9ybSlcbiAgfSBlbHNlIGlmIChjb21wb25lbnRzKSB7XG4gICAgLy8gTk9URTogUHJvY2Vzc2luZyBmb3JtcyBpbiBjb21wdXRlZCBjb21wb25lbnRzIGlzIG5vdCBzdXBwb3J0ZWQsIHNpbmNlIGl0XG4gICAgLy8gb25seSBjYW4gYmUgY29tcHV0ZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhY3R1YWwgZGF0YS5cbiAgICBpZiAoaXNPYmplY3QoY29tcG9uZW50cykpIHtcbiAgICAgIGZvcm0gPSB7IGNvbXBvbmVudHMgfVxuICAgIH1cbiAgfVxuICBmb3JtcyB8fD0geyBkZWZhdWx0OiBmb3JtIH0gLy8gT25seSB1c2VkIGZvciBwcm9jZXNzIGxvb3AgYmVsb3cuXG4gIGNvbnN0IGNoaWxkcmVuID0gW11cbiAgZm9yIChjb25zdCBmb3JtIG9mIE9iamVjdC52YWx1ZXMoZm9ybXMpKSB7XG4gICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBmb3JtLCBjaGlsZHJlbiwgbGV2ZWwgKyAxKVxuICB9XG4gIHJldHVybiBjaGlsZHJlblxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUZvcm0oZm9ybSkge1xuICBmb3JtID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShmb3JtLCB0cnVlKVxuICBpZiAoZm9ybSkge1xuICAgIGF3YWl0IHJlc29sdmVQYW5lbHMoZm9ybSlcbiAgfVxuICByZXR1cm4gZm9ybVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTaW5nbGVDb21wb25lbnRWaWV3KHNjaGVtYSkge1xuICAvLyBJZiB0aGUgc2NoZW1hIGhhcyBhIHR5cGUsIGl0IGlzIGEgc2luZ2xlLWNvbXBvbmVudCB2aWV3LlxuICByZXR1cm4gISFzY2hlbWEudHlwZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzRm9ybVNjaGVtYShzY2hlbWEpIHtcbiAgLy8gU3VwcG9ydCBib3RoIHNpbmdsZSBmb3JtIGFuZCBtdWx0aXBsZSBmb3JtcyBub3RhdGlvbiwgYXMgd2VsbCBhcyBpbmxpbmVkXG4gIC8vIGNvbXBvbmVudHMuXG4gIHJldHVybiBpc09iamVjdChzY2hlbWEpICYmICEhKFxuICAgIHNjaGVtYS5mb3JtIHx8XG4gICAgc2NoZW1hLmZvcm1zIHx8XG4gICAgc2NoZW1hLmNvbXBvbmVudHNcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzTXVsdGlwbGVGb3JtU2NoZW1hcyhzY2hlbWEpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHNjaGVtYT8uZm9ybXMgfHwge30pLmxlbmd0aCA+IDFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgdmlldyB9ID0gc2NoZW1hXG4gIGNvbnN0IHZpZXdTY2hlbWEgPSB2aWV3ICYmIGNvbnRleHQudmlld3Nbdmlld11cbiAgcmV0dXJuIHZpZXdTY2hlbWFcbiAgICA/IGhhc0Zvcm1TY2hlbWEodmlld1NjaGVtYSlcbiAgICAgID8gdmlld1NjaGVtYVxuICAgICAgLy8gTk9URTogVmlld3MgY2FuIGhhdmUgdGFicywgaW4gd2hpY2ggY2FzZSB0aGUgdmlldyBjb21wb25lbnQgaXMgbmVzdGVkXG4gICAgICAvLyBpbiBvbmUgb2YgdGhlIHRhYnMsIGdvIGZpbmQgaXQuXG4gICAgICA6IGZvckVhY2hTY2hlbWEodmlld1NjaGVtYSwgc2NoZW1hID0+IHtcbiAgICAgICAgY29uc3Qgdmlld0NvbXBvbmVudCA9IHNjaGVtYS5jb21wb25lbnRzPy5bdmlld11cbiAgICAgICAgaWYgKGhhc0Zvcm1TY2hlbWEodmlld0NvbXBvbmVudCkpIHtcbiAgICAgICAgICByZXR1cm4gdmlld0NvbXBvbmVudFxuICAgICAgICB9XG4gICAgICB9KVxuICAgIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld0VkaXRQYXRoKHNjaGVtYSwgY29udGV4dCkge1xuICBjb25zdCB2aWV3ID0gZ2V0Vmlld1NjaGVtYShzY2hlbWEsIGNvbnRleHQpXG4gIHJldHVybiB2aWV3XG4gICAgPyB2aWV3LmxldmVsID09PSAwXG4gICAgICA/IGAvJHt2aWV3LnBhdGh9YCAvLyBBIHNpbmdsZS1jb21wb25lbnQgdmlld1xuICAgICAgOiBgLyR7dmlldy5wYXRofS8ke3ZpZXcucGF0aH1gIC8vIEEgbXVsdGktY29tcG9uZW50IHZpZXdcbiAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1TY2hlbWFzKHNjaGVtYSwgY29udGV4dCwgbW9kaWZ5Rm9ybSkge1xuICBjb25zdCB2aWV3ID0gZ2V0Vmlld1NjaGVtYShzY2hlbWEsIGNvbnRleHQpXG4gIGlmICh2aWV3KSB7XG4gICAgc2NoZW1hID0gdmlld1xuICB9IGVsc2UgaWYgKHNjaGVtYS52aWV3KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHZpZXc6ICcke3NjaGVtYS52aWV3fSdgKVxuICB9XG5cbiAgbGV0IHsgZm9ybSwgZm9ybXMsIGNvbXBvbmVudHMsIGNvbXBhY3QgfSA9IHNjaGVtYVxuICBpZiAoIWZvcm0gJiYgIWZvcm1zKSB7XG4gICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgIC8vIENvbnZlcnQgaW5saW5lZCBjb21wb25lbnRzIHRvIGZvcm1zLCBzdXBwb3J0aW5nIGBjb21wYWN0YCBzZXR0aW5nLlxuICAgICAgZm9ybSA9IHsgY29tcG9uZW50cywgY29tcGFjdCB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGBmb3Jtc2AsIGBmb3JtYCBvciBgY29tcG9uZW50c2AsIHJldHVybiBhbmQgZW1wdHkgYGZvcm1zYCBvYmplY3QuXG4gICAgICByZXR1cm4ge31cbiAgICB9XG4gIH1cbiAgZm9ybXMgfHw9IHsgZGVmYXVsdDogZm9ybSB9XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoZm9ybXMpLm1hcCgoW3R5cGUsIGZvcm1dKSA9PiB7XG4gICAgICAvLyBTdXBwb3J0IGBzY2hlbWEuY29tcG9uZW50c2AgY2FsbGJhY2tzIHRvIGNyZWF0ZSBjb21wb25lbnRzIG9uIHRoZSBmbHkuXG4gICAgICBpZiAoaXNGdW5jdGlvbihmb3JtLmNvbXBvbmVudHMpKSB7XG4gICAgICAgIGZvcm0gPSB7XG4gICAgICAgICAgLi4uZm9ybSxcbiAgICAgICAgICBjb21wb25lbnRzOiBmb3JtLmNvbXBvbmVudHMoY29udGV4dClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFt0eXBlLCBtb2RpZnlGb3JtPy4oZm9ybSkgPz8gZm9ybV1cbiAgICB9KVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3Jtcyhmb3JtcywgaXRlbSkge1xuICByZXR1cm4gZm9ybXNbaXRlbT8udHlwZV0gfHwgZm9ybXMuZGVmYXVsdCB8fCBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpIHtcbiAgcmV0dXJuIGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGdldEZvcm1TY2hlbWFzKHNjaGVtYSwgY29udGV4dCksIGl0ZW0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNMYWJlbChzY2hlbWEpIHtcbiAgcmV0dXJuIHNjaGVtYS5sYWJlbCAhPT0gZmFsc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tcGFjdChzY2hlbWEpIHtcbiAgcmV0dXJuICEhc2NoZW1hLmNvbXBhY3Rcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW5saW5lZChzY2hlbWEpIHtcbiAgcmV0dXJuICEhKHNjaGVtYS5pbmxpbmVkIHx8IHNjaGVtYS5jb21wb25lbnRzKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOZXN0ZWQoc2NoZW1hKSB7XG4gIHJldHVybiAhIShcbiAgICBzY2hlbWEubmVzdGVkIHx8XG4gICAgZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZGVmYXVsdE5lc3RlZCA9PT0gdHJ1ZVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRPbWl0UGFkZGluZyhzY2hlbWEpIHtcbiAgcmV0dXJuICEhZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8ub21pdFBhZGRpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRWYWx1ZShzY2hlbWEpIHtcbiAgLy8gU3VwcG9ydCBkZWZhdWx0IHZhbHVlcyBib3RoIG9uIHNjaGVtYSBhbmQgb24gY29tcG9uZW50IGxldmVsLlxuICAvLyBOT1RFOiBBdCB0aGUgdGltZSBvZiBjcmVhdGlvbiwgY29tcG9uZW50cyBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCwgKGUuZy4gaWZcbiAgLy8gZW50cmllcyBhcmUgY3JlYXRlZCB0aHJvdWdoIG5lc3RlZCBmb3JtcywgdGhlIHBhcmVudCBmb3JtIGlzbid0IG1vdW50ZWQpIHNvXG4gIC8vIHdlIGNhbid0IHVzZSBgZGF0YVBhdGhgIHRvIGdldCB0byBjb21wb25lbnRzLCBhbmQgdGhlIGBkZWZhdWx0VmFsdWVgIGZyb21cbiAgLy8gdGhlcmUuIFRoYXQncyB3aHkgYGRlZmF1bHRWYWx1ZWAgaXMgZGVmaW5lZCBzdGF0aWNhbGx5IGluIHRoZSBjb21wb25lbnRzOlxuICBjb25zdCBkZWZhdWx0VmFsdWUgPSBzY2hlbWEuZGVmYXVsdFxuICBjb25zdCB2YWx1ZSA9IGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgPyBkZWZhdWx0VmFsdWVcbiAgICA6IGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmRlZmF1bHRWYWx1ZVxuICByZXR1cm4gaXNGdW5jdGlvbih2YWx1ZSlcbiAgICA/IHZhbHVlKHNjaGVtYSlcbiAgICA6IGNsb25lKHZhbHVlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaWdub3JlTWlzc2luZ1ZhbHVlKHNjaGVtYSkge1xuICBjb25zdCB0eXBlT3B0aW9ucyA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSlcbiAgcmV0dXJuICEhKFxuICAgIHR5cGVPcHRpb25zPy5leGNsdWRlVmFsdWUgfHxcbiAgICB0eXBlT3B0aW9ucz8uaWdub3JlTWlzc2luZ1ZhbHVlPy4oc2NoZW1hKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNMYWJlbHMoc2NoZW1hKSB7XG4gIGNvbnN0IGNoZWNrQ29tcG9uZW50cyA9IGNvbXBvbmVudHMgPT5cbiAgICBPYmplY3QudmFsdWVzKGNvbXBvbmVudHMgfHwge30pLnNvbWUoaGFzTGFiZWwpXG5cbiAgcmV0dXJuIChcbiAgICBjaGVja0NvbXBvbmVudHMoc2NoZW1hLmNvbXBvbmVudHMpIHx8XG4gICAgT2JqZWN0LnZhbHVlcyhzY2hlbWEudGFicyB8fCB7fSkuc29tZShjaGVja0NvbXBvbmVudHMpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERlZmF1bHRzKHNjaGVtYSwgZGF0YSA9IHt9LCBjb21wb25lbnQpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHsgY29tcG9uZW50LCByb290RGF0YTogZGF0YSB9XG5cbiAgY29uc3QgcHJvY2Vzc0JlZm9yZSA9IChzY2hlbWEsIGRhdGEsIG5hbWUpID0+IHtcbiAgICBpZiAoIShuYW1lIGluIGRhdGEpICYmICFpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSkge1xuICAgICAgZGF0YVtuYW1lXSA9IGdldERlZmF1bHRWYWx1ZShzY2hlbWEpXG4gICAgfVxuICB9XG5cbiAgLy8gU2V0cyB1cCBhIGRhdGEgb2JqZWN0IHRoYXQgaGFzIGtleXMgd2l0aCBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsXG4gIC8vIGZvcm0gZmllbGRzLCBzbyB0aGV5IGNhbiBiZSBjb3JyZWN0bHkgd2F0Y2hlZCBmb3IgY2hhbmdlcy5cbiAgcmV0dXJuIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgIHNjaGVtYSwgZGF0YSwgbnVsbCwgbnVsbCwgcHJvY2Vzc0JlZm9yZSwgbnVsbCwgb3B0aW9uc1xuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlVmFsdWUoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwge1xuICBjb21wb25lbnQgPSBudWxsLFxuICByb290RGF0YSA9IGNvbXBvbmVudD8ucm9vdERhdGFcbn0gPSB7fSkge1xuICBjb25zdCB7IGNvbXB1dGUgfSA9IHNjaGVtYVxuICBpZiAoY29tcHV0ZSkge1xuICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZShEaXRvQ29udGV4dC5nZXQoY29tcG9uZW50LCB7XG4gICAgICAvLyBPdmVycmlkZSB2YWx1ZSB0byBwcmV2ZW50IGVuZGxlc3MgcmVjdXJzaW9uIHRocm91Z2ggY2FsbGluZyB0aGVcbiAgICAgIC8vIGdldHRlciBmb3IgYHRoaXMudmFsdWVgIGluIGBEaXRvQ29udGV4dGA6XG4gICAgICB2YWx1ZTogZGF0YVtuYW1lXSxcbiAgICAgIG5hbWUsXG4gICAgICBkYXRhLFxuICAgICAgZGF0YVBhdGgsXG4gICAgICByb290RGF0YVxuICAgIH0pKVxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBVc2UgYCRzZXQoKWAgZGlyZWN0bHkgaW5zdGVhZCBvZiBgdGhpcy52YWx1ZSA9IOKApmAgdG8gdXBkYXRlIHRoZVxuICAgICAgLy8gdmFsdWUgd2l0aG91dCBjYWxsaW5nIHBhcnNlKCk6XG4gICAgICBWdWUuc2V0KGRhdGEsIG5hbWUsIHZhbHVlKVxuICAgIH1cbiAgfVxuICAvLyBJZiB0aGUgdmFsdWUgaXMgc3RpbGwgbWlzc2luZyBhZnRlciBjb21wdXRlLCBzZXQgdGhlIGRlZmF1bHQgZm9yIGl0OlxuICBpZiAoIShuYW1lIGluIGRhdGEpICYmICFpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSkge1xuICAgIFZ1ZS5zZXQoZGF0YSwgbmFtZSwgZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSkpXG4gIH1cbiAgLy8gTm93IGFjY2VzcyB0aGUgdmFsdWUuIFRoaXMgaXMgaW1wb3J0YW50IGZvciByZWFjdGl2aXR5IGFuZCBuZWVkcyB0b1xuICAvLyBoYXBwZW4gYWZ0ZXIgYWxsIHByaW9yIG1hbmlwdWxhdGlvbiB0aHJvdWdoIGAkc2V0KClgLCBzZWUgYWJvdmU6XG4gIHJldHVybiBkYXRhW25hbWVdXG59XG5cbmZ1bmN0aW9uIGNsb25lSXRlbShzb3VyY2VTY2hlbWEsIGl0ZW0sIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMuc2NoZW1hT25seSkge1xuICAgIGNvbnN0IGNvcHkgPSB7fVxuICAgIGNvbnN0IHsgaWRLZXkgPSAnaWQnLCBvcmRlcktleSB9ID0gc291cmNlU2NoZW1hXG4gICAgY29uc3QgaWQgPSBpdGVtW2lkS2V5XVxuICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb3B5W2lkS2V5XSA9IGlkXG4gICAgfVxuICAgIC8vIENvcHkgb3ZlciB0eXBlIGluIGNhc2UgdGhlcmUgYXJlIG11bHRpcGxlIGZvcm1zIHRvIGNob29zZSBmcm9tLlxuICAgIGlmIChoYXNNdWx0aXBsZUZvcm1TY2hlbWFzKHNvdXJjZVNjaGVtYSkpIHtcbiAgICAgIGNvcHkudHlwZSA9IGl0ZW0udHlwZVxuICAgIH1cbiAgICBpZiAob3JkZXJLZXkpIHtcbiAgICAgIGNvcHlbb3JkZXJLZXldID0gaXRlbVtvcmRlcktleV1cbiAgICB9XG4gICAgcmV0dXJuIGNvcHlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geyAuLi5pdGVtIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0RhdGEoc2NoZW1hLCBzb3VyY2VTY2hlbWEsIGRhdGEsIGRhdGFQYXRoLCB7XG4gIGNvbXBvbmVudCxcbiAgc2NoZW1hT25seSwgLy8gd2hldGhlciB0byBvbmx5IGluY2x1ZGUgZGF0YSBjb3ZlcmVkIGJ5IHRoZSBzY2hlbWEsIG9yIGFsbCBkYXRhXG4gIHRhcmdldFxufSA9IHt9KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB7IGNvbXBvbmVudCwgc2NoZW1hT25seSwgdGFyZ2V0LCByb290RGF0YTogZGF0YSB9XG4gIGNvbnN0IHByb2Nlc3NlZERhdGEgPSBjbG9uZUl0ZW0oc291cmNlU2NoZW1hLCBkYXRhLCBvcHRpb25zKVxuICBjb25zdCBncmFwaCA9IG5ldyBTY2hlbWFHcmFwaCgpXG5cbiAgY29uc3QgcHJvY2Vzc0JlZm9yZSA9IChzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBwcm9jZXNzZWREYXRhKSA9PiB7XG4gICAgbGV0IHZhbHVlID0gY29tcHV0ZVZhbHVlKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIG9wdGlvbnMpXG4gICAgLy8gVGhlIHNjaGVtYSBleHBlY3RzIHRoZSBgd3JhcFByaW1pdGl2ZXNgIHRyYW5zZm9ybWF0aW9ucyB0byBiZSBwcmVzZW50IG9uXG4gICAgLy8gdGhlIGRhdGEgdGhhdCBpdCBpcyBhcHBsaWVkIG9uLCBzbyB3YXJwIGJlZm9yZSBhbmQgdW53cmFwIGFmdGVyLlxuICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcywgb3JkZXJLZXksIGlkS2V5ID0gJ2lkJyB9ID0gc2NoZW1hXG4gICAgICBpZiAod3JhcFByaW1pdGl2ZXMpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAoZW50cnkgPT4gKHtcbiAgICAgICAgICBbd3JhcFByaW1pdGl2ZXNdOiBlbnRyeVxuICAgICAgICB9KSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFsd2F5cyBzaGFsbG93LWNsb25lIGFycmF5IHZhbHVlczpcbiAgICAgICAgdmFsdWUgPSBbLi4udmFsdWVdXG4gICAgICB9XG4gICAgICBpZiAob3JkZXJLZXkgJiYgdGFyZ2V0ID09PSAnY2xpcGJvYXJkJykge1xuICAgICAgICAvLyBTb3J0IHRoZSBkYXRhIGJhY2sgaW50byB0aGUgbmF0dXJhbCBzZXF1ZW5jZSBhcyBkZWZpbmVkIGJ5IHRoZWlyIGlkcyxcbiAgICAgICAgLy8gc28gY29weS1wYXN0aW5nIGJldHdlZW4gc2VydmVycyAoZS5nLiBuZXN0ZWQgZm9udC1jdXRzIG9uIExpbmV0bylcbiAgICAgICAgLy8gbmF0dXJhbGx5IGdldHMgbWFwcGVkIHRvIHRoZSBzYW1lIGVudHJpZXMgaW4gdGhlIGdyYXBoLlxuICAgICAgICB2YWx1ZS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWQxID0gYT8uW2lkS2V5XVxuICAgICAgICAgIGNvbnN0IGlkMiA9IGI/LltpZEtleV1cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaWQxID09IG51bGwgfHwgaXNUZW1wb3JhcnlJZChpZDEpID8gMVxuICAgICAgICAgICAgOiBpZDIgPT0gbnVsbCB8fCBpc1RlbXBvcmFyeUlkKGlkMikgPyAtMVxuICAgICAgICAgICAgOiBpZDEgLSBpZDJcbiAgICAgICAgICApXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICB9XG5cbiAgY29uc3QgcHJvY2Vzc0FmdGVyID0gKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHByb2Nlc3NlZERhdGEpID0+IHtcbiAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzLCBleGNsdWRlLCBwcm9jZXNzIH0gPSBzY2hlbWFcbiAgICBsZXQgdmFsdWUgPSBwcm9jZXNzZWREYXRhW25hbWVdXG5cbiAgICBjb25zdCB0eXBlT3B0aW9ucyA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSlcblxuICAgIC8vIE5PVEU6IFdlIGRvbid0IGNhY2hlIHRoaXMgY29udGV4dCwgc2luY2UgYHZhbHVlYCBpcyBjaGFuZ2luZy5cbiAgICBjb25zdCBnZXRDb250ZXh0ID0gKCkgPT4gRGl0b0NvbnRleHQuZ2V0KGNvbXBvbmVudCwge1xuICAgICAgdmFsdWUsXG4gICAgICBuYW1lLFxuICAgICAgZGF0YSxcbiAgICAgIGRhdGFQYXRoLFxuICAgICAgcm9vdERhdGE6IG9wdGlvbnMucm9vdERhdGEsXG4gICAgICAvLyBQYXNzIHRoZSBhbHJlYWR5IHByb2Nlc3NlZCBkYXRhIHRvIGBwcm9jZXNzKClgLCBzbyBpdCBjYW4gYmUgbW9kaWZpZWRcbiAgICAgIC8vIHRocm91Z2ggYHByb2Nlc3NlZEl0ZW1gIGZyb20gdGhlcmUuXG4gICAgICBwcm9jZXNzZWREYXRhXG4gICAgfSlcblxuICAgIC8vIEZpcnN0IHVud3JhcCB0aGUgd3JhcHBlZCBwcmltaXRpdmVzIGFnYWluLCB0byBicmluZyB0aGUgZGF0YSBiYWNrIGludG9cbiAgICAvLyBpdHMgbmF0aXZlIGZvcm0uIFNlIGBwcm9jZXNzQmVmb3JlKClgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgaWYgKHdyYXBQcmltaXRpdmVzICYmIGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLm1hcChvYmplY3QgPT4gb2JqZWN0W3dyYXBQcmltaXRpdmVzXSlcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgdGhlIHVzZXIncyBgcHJvY2VzcygpYCBjYWxsYmFjayBmaXJzdCwgaWYgb25lIGlzIHByb3ZpZGVkLCBzbyB0aGF0XG4gICAgLy8gaXQgY2FuIG1vZGlmeSBkYXRhIGluIGBwcm9jZXNzZWREYXRhYCBldmVuIGlmIGl0IHByb3ZpZGVzIGBleGNsdWRlOiB0cnVlYFxuICAgIGlmIChwcm9jZXNzKSB7XG4gICAgICB2YWx1ZSA9IHByb2Nlc3MoZ2V0Q29udGV4dCgpKVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHR5cGVPcHRpb25zPy5leGNsdWRlVmFsdWUgfHxcbiAgICAgIC8vIFN1cHBvcnQgZnVuY3Rpb25zIG5leHQgdG8gYm9vbGVhbnMgZm9yIGBzY2hlbWEuZXhjbHVkZWA6XG4gICAgICBleGNsdWRlID09PSB0cnVlIHx8XG4gICAgICBpc0Z1bmN0aW9uKGV4Y2x1ZGUpICYmIGV4Y2x1ZGUoZ2V0Q29udGV4dCgpKVxuICAgICkge1xuICAgICAgZGVsZXRlIHByb2Nlc3NlZERhdGFbbmFtZV1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRWFjaCBjb21wb25lbnQgdHlwZSBjYW4gcHJvdmlkZSBpdHMgb3duIHN0YXRpYyBgcHJvY2Vzc1ZhbHVlKClgIG1ldGhvZFxuICAgICAgLy8gdG8gY29udmVydCB0aGUgZGF0YSBmb3Igc3RvcmFnZS5cbiAgICAgIGNvbnN0IHByb2Nlc3NWYWx1ZSA9IHR5cGVPcHRpb25zPy5wcm9jZXNzVmFsdWVcbiAgICAgIGlmIChwcm9jZXNzVmFsdWUpIHtcbiAgICAgICAgdmFsdWUgPSBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSwgZGF0YVBhdGgsIGdyYXBoKVxuICAgICAgfVxuICAgICAgcHJvY2Vzc2VkRGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgc2NoZW1hLFxuICAgIGRhdGEsXG4gICAgZGF0YVBhdGgsXG4gICAgcHJvY2Vzc2VkRGF0YSxcbiAgICBwcm9jZXNzQmVmb3JlLFxuICAgIHByb2Nlc3NBZnRlcixcbiAgICBvcHRpb25zXG4gIClcblxuICByZXR1cm4gZ3JhcGgucHJvY2Vzcyhzb3VyY2VTY2hlbWEsIHByb2Nlc3NlZERhdGEsIG9wdGlvbnMpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzU2NoZW1hRGF0YShcbiAgc2NoZW1hLFxuICBkYXRhLFxuICBkYXRhUGF0aCxcbiAgcHJvY2Vzc2VkRGF0YSxcbiAgcHJvY2Vzc0JlZm9yZSxcbiAgcHJvY2Vzc0FmdGVyLFxuICBvcHRpb25zXG4pIHtcbiAgY29uc3QgcHJvY2Vzc0NvbXBvbmVudHMgPSBjb21wb25lbnRzID0+IHtcbiAgICBjb25zdCBnZXREYXRhUGF0aCA9IChkYXRhUGF0aCwgdG9rZW4pID0+IGRhdGFQYXRoICE9IG51bGxcbiAgICAgID8gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHRva2VuKVxuICAgICAgOiBudWxsXG5cbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgZm9yIChjb25zdCBbbmFtZSwgY29tcG9uZW50U2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhjb21wb25lbnRzKSkge1xuICAgICAgICBpZiAoIWlzTmVzdGVkKGNvbXBvbmVudFNjaGVtYSkpIHtcbiAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIGRhdGEgb24gdW5uZXN0ZWQgY29tcG9uZW50cy5cbiAgICAgICAgICBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICAgIHByb2Nlc3NlZERhdGEsXG4gICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgcHJvY2Vzc0FmdGVyLFxuICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnREYXRhUGF0aCA9IGdldERhdGFQYXRoKGRhdGFQYXRoLCBuYW1lKVxuXG4gICAgICAgICAgY29uc3QgcHJvY2Vzc0l0ZW0gPSAoaXRlbSwgaW5kZXggPSBudWxsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhUGF0aCA9IGluZGV4ICE9PSBudWxsXG4gICAgICAgICAgICAgID8gZ2V0RGF0YVBhdGgoY29tcG9uZW50RGF0YVBhdGgsIGluZGV4KVxuICAgICAgICAgICAgICA6IGNvbXBvbmVudERhdGFQYXRoXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gRGl0b0NvbnRleHQuZ2V0KG9wdGlvbnMuY29tcG9uZW50LCB7XG4gICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgIHJvb3REYXRhOiBvcHRpb25zLnJvb3REYXRhXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgY29uc3QgZ2V0Rm9ybXMgPSAoXG4gICAgICAgICAgICAgIGdldFR5cGVPcHRpb25zKGNvbXBvbmVudFNjaGVtYSk/LmdldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZyB8fFxuICAgICAgICAgICAgICAgZ2V0Rm9ybVNjaGVtYXNcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IGZvcm1zID0gZ2V0Rm9ybXMoY29tcG9uZW50U2NoZW1hLCBjb250ZXh0KVxuICAgICAgICAgICAgY29uc3QgZm9ybSA9IGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGZvcm1zLCBpdGVtKVxuICAgICAgICAgICAgaWYgKGZvcm0pIHtcbiAgICAgICAgICAgICAgY29uc3QgcHJvY2Vzc2VkSXRlbSA9IHByb2Nlc3NlZERhdGFcbiAgICAgICAgICAgICAgICA/IGNsb25lSXRlbShjb21wb25lbnRTY2hlbWEsIGl0ZW0sIG9wdGlvbnMpXG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICAgICAgICAgICAgICBmb3JtLFxuICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkSXRlbSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NBZnRlcixcbiAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEl0ZW1zIHdpdGhvdXQgZm9ybXMgc3RpbGwgZ2V0IGZ1bGx5IChidXQgc2hhbGxvd2x5KSBjbG9uZWQuXG4gICAgICAgICAgICAgIC8vIFRPRE86IEZpbmQgb3V0IG9mIHRoaXMgaXMgYWN0dWFsbHkgbmVlZGVkIC8gdXNlZCBhdCBhbGw/XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLml0ZW0gfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHByb2Nlc3NCZWZvcmU/LihcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSwgZGF0YSwgbmFtZSwgY29tcG9uZW50RGF0YVBhdGgsIHByb2Nlc3NlZERhdGFcbiAgICAgICAgICApXG4gICAgICAgICAgbGV0IHZhbHVlID0gcHJvY2Vzc2VkRGF0YSA/IHByb2Nlc3NlZERhdGFbbmFtZV0gOiBkYXRhW25hbWVdXG4gICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgaGFzRm9ybVNjaGVtYShjb21wb25lbnRTY2hlbWEpKSB7XG4gICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIGRhdGEgb24gbmVzdGVkIGZvcm0gaXRlbXMuXG4gICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgLy8gT3B0aW1pemF0aW9uOiBObyBuZWVkIHRvIGNvbGxlY3QgdmFsdWVzIGlmIHdlJ3JlIG5vdCBjbG9uaW5nIVxuICAgICAgICAgICAgICB2YWx1ZSA9IHByb2Nlc3NlZERhdGFcbiAgICAgICAgICAgICAgICA/IHZhbHVlLm1hcChwcm9jZXNzSXRlbSlcbiAgICAgICAgICAgICAgICA6IHZhbHVlLmZvckVhY2gocHJvY2Vzc0l0ZW0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YWx1ZSA9IHByb2Nlc3NJdGVtKHZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb2Nlc3NlZERhdGEpIHtcbiAgICAgICAgICAgICAgcHJvY2Vzc2VkRGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHByb2Nlc3NBZnRlcj8uKFxuICAgICAgICAgICAgY29tcG9uZW50U2NoZW1hLCBkYXRhLCBuYW1lLCBjb21wb25lbnREYXRhUGF0aCwgcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NDb21wb25lbnRzKHNjaGVtYS5jb21wb25lbnRzKVxuICBpZiAoc2NoZW1hLnRhYnMpIHtcbiAgICBmb3IgKGNvbnN0IHRhYiBvZiBPYmplY3QudmFsdWVzKHNjaGVtYS50YWJzKSkge1xuICAgICAgcHJvY2Vzc0NvbXBvbmVudHModGFiLmNvbXBvbmVudHMpXG4gICAgfVxuICB9XG4gIGZvciAoY29uc3QgcGFuZWwgb2YgZ2V0QWxsUGFuZWxTY2hlbWFzKHNjaGVtYSwgZGF0YVBhdGgpKSB7XG4gICAgcHJvY2Vzc0NvbXBvbmVudHMocGFuZWwuc2NoZW1hLmNvbXBvbmVudHMpXG4gIH1cblxuICByZXR1cm4gcHJvY2Vzc2VkRGF0YSB8fCBkYXRhXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROYW1lZFNjaGVtYXMoZGVzY3JpcHRpb25zLCBkZWZhdWx0cykge1xuICBjb25zdCB0b09iamVjdCA9IChhcnJheSwgdG9TY2hlbWEpID0+IHtcbiAgICByZXR1cm4gYXJyYXkubGVuZ3RoID4gMFxuICAgICAgPyBhcnJheS5yZWR1Y2UoKG9iamVjdCwgdmFsdWUpID0+IHtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gdG9TY2hlbWEodmFsdWUpXG4gICAgICAgIGlmIChzY2hlbWEpIHtcbiAgICAgICAgICBvYmplY3Rbc2NoZW1hLm5hbWVdID0gc2NoZW1hICYmIGRlZmF1bHRzXG4gICAgICAgICAgICA/IHsgLi4uZGVmYXVsdHMsIC4uLnNjaGVtYSB9XG4gICAgICAgICAgICA6IHNjaGVtYVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmplY3RcbiAgICAgIH0sIHt9KVxuICAgICAgOiBudWxsXG4gIH1cblxuICByZXR1cm4gaXNBcnJheShkZXNjcmlwdGlvbnMpXG4gICAgPyB0b09iamVjdChkZXNjcmlwdGlvbnMsIHZhbHVlID0+IChcbiAgICAgIGlzT2JqZWN0KHZhbHVlKSA/IHZhbHVlIDoge1xuICAgICAgICBuYW1lOiBjYW1lbGl6ZSh2YWx1ZSwgZmFsc2UpXG4gICAgICB9XG4gICAgKSlcbiAgICA6IGlzT2JqZWN0KGRlc2NyaXB0aW9ucylcbiAgICAgID8gdG9PYmplY3QoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGRlc2NyaXB0aW9ucyksXG4gICAgICAgIChbbmFtZSwgdmFsdWVdKSA9PlxuICAgICAgICAgIGlzT2JqZWN0KHZhbHVlKSA/IHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAuLi52YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICA6IGlzU3RyaW5nKHZhbHVlKSA/IHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBsYWJlbDogdmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgICAgOiBudWxsXG4gICAgICApXG4gICAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1dHRvblNjaGVtYXMoYnV0dG9ucykge1xuICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKFxuICAgIGJ1dHRvbnMsXG4gICAgeyB0eXBlOiAnYnV0dG9uJyB9IC8vIERlZmF1bHRzXG4gIClcbn1cblxuZnVuY3Rpb24gZ2V0VHlwZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHNjaGVtYU9yVHlwZSkgPyBzY2hlbWFPclR5cGUudHlwZSA6IHNjaGVtYU9yVHlwZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBnZXRUeXBlQ29tcG9uZW50KGdldFR5cGUoc2NoZW1hT3JUeXBlKSwgdHJ1ZSk/Lm9wdGlvbnMgPz8gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFR5cGVPcHRpb25zKHNjaGVtYU9yVHlwZSk/LmdldFNvdXJjZVR5cGU/LihcbiAgICBnZXRUeXBlKHNjaGVtYU9yVHlwZSlcbiAgKSA/PyBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYW5lbFNjaGVtYShzY2hlbWEsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQpIHtcbiAgcmV0dXJuIHNjaGVtYVxuICAgID8ge1xuICAgICAgc2NoZW1hLFxuICAgICAgLy8gSWYgdGhlIHBhbmVsIHByb3ZpZGVzIGl0cyBvd24gbmFtZSwgYXBwZW5kIGl0IHRvIHRoZSBkYXRhUGF0aC5cbiAgICAgIC8vIFRoaXMgaXMgdXNlZCBlLmcuIGZvciAkZmlsdGVycyBwYW5lbHMuXG4gICAgICBkYXRhUGF0aDogc2NoZW1hLm5hbWVcbiAgICAgICAgPyBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgc2NoZW1hLm5hbWUpXG4gICAgICAgIDogZGF0YVBhdGgsXG4gICAgICB0YWJDb21wb25lbnRcbiAgICB9XG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYW5lbFNjaGVtYXMoc2NoZW1hcywgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCwgcGFuZWxzID0gW10pIHtcbiAgaWYgKHNjaGVtYXMpIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hcykpIHtcbiAgICAgIGNvbnN0IHBhbmVsID0gZ2V0UGFuZWxTY2hlbWEoXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIGtleSksXG4gICAgICAgIHRhYkNvbXBvbmVudFxuICAgICAgKVxuICAgICAgaWYgKHBhbmVsKSB7XG4gICAgICAgIHBhbmVscy5wdXNoKHBhbmVsKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcGFuZWxzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGxQYW5lbFNjaGVtYXMoXG4gIHNjaGVtYSxcbiAgZGF0YVBhdGgsXG4gIHNjaGVtYUNvbXBvbmVudCA9IG51bGwsXG4gIHRhYkNvbXBvbmVudCA9IG51bGxcbikge1xuICBjb25zdCBwYW5lbCA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmdldFBhbmVsU2NoZW1hPy4oXG4gICAgc2NoZW1hLFxuICAgIGRhdGFQYXRoLFxuICAgIHNjaGVtYUNvbXBvbmVudFxuICApXG4gIGNvbnN0IHBhbmVscyA9IHBhbmVsID8gW2dldFBhbmVsU2NoZW1hKHBhbmVsLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50KV0gOiBbXVxuICAvLyBBbGxvdyBlYWNoIGNvbXBvbmVudCB0byBwcm92aWRlIGl0cyBvd24gc2V0IG9mIHBhbmVscywgaW5cbiAgLy8gYWRkaXRpb24gdG8gdGhlIGRlZmF1bHQgb25lIChlLmcuICRmaWx0ZXIpOlxuICBnZXRQYW5lbFNjaGVtYXMoc2NoZW1hLnBhbmVscywgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCwgcGFuZWxzKVxuICByZXR1cm4gcGFuZWxzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdFNvdXJjZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSA9PT0gJ29iamVjdCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGlzdFNvdXJjZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSA9PT0gJ2xpc3QnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKSB7XG4gIGNvbnN0IGlkID0gaXRlbVtzb3VyY2VTY2hlbWEuaWRLZXkgfHwgJ2lkJ11cbiAgcmV0dXJuIGlkICE9IG51bGwgPyBTdHJpbmcoaWQpIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtVWlkKHNvdXJjZVNjaGVtYSwgaXRlbSkge1xuICAvLyBUcnkgdG8gdXNlIHRoZSBpdGVtIGlkIGFzIHRoZSB1aWQsIGZhbGxpbmcgYmFjayBvbiBhdXRvLWdlbmVyYXRlZCBpZHMsIGJ1dFxuICAvLyBlaXRoZXIgd2F5LCBwYXNzIHRocm91Z2ggYGdldFVpZCgpYCBzbyB0aGF0IHRoZSBpZHMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGVcbiAgLy8gaXRlbSB0aHJvdWdoIGEgd2VhayBtYXAsIGFzIHRoZSBpZHMgY2FuIGJlIGZpbHRlcmVkIG91dCBpbiBgcHJvY2Vzc0RhdGEoKWBcbiAgLy8gd2hpbGUgdGhlIGNvbXBvbmVudHMgdGhhdCB1c2UgdGhlIHVpZHMgYXMga2V5IGFyZSBzdGlsbCB2aXNpYmxlLlxuICByZXR1cm4gZ2V0VWlkKGl0ZW0sIGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pKVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFZhbGlkYXRpb25NaXhpbiBmcm9tICcuL1ZhbGlkYXRpb25NaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBjb21wdXRlVmFsdWUgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRJdGVtLCBnZXRQYXJlbnRJdGVtIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzU3RyaW5nLCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbVmFsaWRhdGlvbk1peGluXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gTk9URTogV2hpbGUgYGRhdGFQYXRoYCBwb2ludHMgdG8gdGhlIGFjdHVhbCBgdmFsdWVgLCBgZGF0YWAgcmVwcmVzZW50c1xuICAgIC8vIHRoZSBgaXRlbWAgaW4gd2hpY2ggdGhlIGB2YWx1ZWAgaXMgY29udGFpbmVkLCB1bmRlciB0aGUga2V5IGBuYW1lYC5cbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcnNlZFZhbHVlOiBudWxsLFxuICAgICAgZm9jdXNlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLm5hbWVcbiAgICB9LFxuXG4gICAgdHlwZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS50eXBlXG4gICAgfSxcblxuICAgIGNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVUeXBlQ29tcG9uZW50KHRoaXMuc2NoZW1hLmNvbXBvbmVudClcbiAgICB9LFxuXG4gICAgY29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBuZXN0ZWQ6IHRoaXMubmVzdGVkIH0pXG4gICAgfSxcblxuICAgIHZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZVZhbHVlKFxuICAgICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICAgIHRoaXMuZGF0YSxcbiAgICAgICAgICB0aGlzLm5hbWUsXG4gICAgICAgICAgdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICB7IGNvbXBvbmVudDogdGhpcyB9XG4gICAgICAgIClcbiAgICAgICAgY29uc3QgeyBmb3JtYXQgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIC8vIGBzY2hlbWEuZm9ybWF0YCBpcyBvbmx5IGV2ZXIgY2FsbGVkIGluIHRoZSBsaWZlLWN5Y2xlXG4gICAgICAgIC8vIG9mIHRoZSBjb21wb25lbnQgYW5kIHRodXMgaXQncyBvayB0byBiaW5kIGl0IHRvIGB0aGlzYFxuICAgICAgICByZXR1cm4gZm9ybWF0XG4gICAgICAgICAgPyBmb3JtYXQuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyB2YWx1ZSB9KSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgeyBwYXJzZSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgLy8gYHNjaGVtYS5wYXJzZWAgaXMgb25seSBldmVyIGNhbGxlZCBpbiB0aGUgbGlmZS1jeWNsZVxuICAgICAgICAvLyBvZiB0aGUgY29tcG9uZW50IGFuZCB0aHVzIGl0J3Mgb2sgdG8gYmluZCBpdCB0byBgdGhpc2BcbiAgICAgICAgdGhpcy5wYXJzZWRWYWx1ZSA9IHBhcnNlXG4gICAgICAgICAgPyBwYXJzZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IHZhbHVlIH0pKVxuICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgdGhpcy4kc2V0KHRoaXMuZGF0YSwgdGhpcy5uYW1lLCB0aGlzLnBhcnNlZFZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIHNpbWlsYXIgdG8gYERpdG9Db250ZXh0YFxuICAgIC8vIHByb3BlcnRpZXMsIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGVzZSBvbiBgdGhpc2AgYXMgd2VsbDpcbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIGdldEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gICAgfSxcblxuICAgIHBhcmVudEl0ZW0oKSB7XG4gICAgICByZXR1cm4gZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgICB9LFxuXG4gICAgcm9vdEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290RGF0YVxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWRJdGVtKCkge1xuICAgICAgLy8gV2UgY2FuIG9ubHkgZ2V0IHRoZSBwcm9jZXNzZWQgaXRlbXMgdGhyb3VnaCB0aGUgc2NoZW1hQ29tcG9uZW50LCBidXRcbiAgICAgIC8vIHRoYXQncyBub3QgbmVjZXNzYXJpbHkgdGhlIGl0ZW0gcmVwcmVzZW50ZWQgYnkgdGhpcyBjb21wb25lbnQuXG4gICAgICAvLyBTb2x1dGlvbjogRmluZCB0aGUgcmVsYXRpdmUgcGF0aCBhbmQgdGhlIHByb2Nlc3NlZCBzdWItaXRlbSBmcm9tIHRoZXJlOlxuICAgICAgY29uc3QgeyBzY2hlbWFDb21wb25lbnQgfSA9IHRoaXNcbiAgICAgIHJldHVybiBnZXRJdGVtKFxuICAgICAgICBzY2hlbWFDb21wb25lbnQucHJvY2Vzc2VkSXRlbSxcbiAgICAgICAgLy8gR2V0IHRoZSBkYXRhUGF0aCByZWxhdGl2ZSB0byB0aGUgc2NoZW1hQ29tcG9uZW50J3MgZGF0YTpcbiAgICAgICAgdGhpcy5kYXRhUGF0aC5zbGljZShzY2hlbWFDb21wb25lbnQuZGF0YVBhdGgubGVuZ3RoKSxcbiAgICAgICAgdGhpcy5uZXN0ZWRcbiAgICAgIClcbiAgICB9LFxuXG4gICAgbGFiZWw6IGdldFNjaGVtYUFjY2Vzc29yKCdsYWJlbCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEJvb2xlYW5dLFxuICAgICAgZ2V0KGxhYmVsKSB7XG4gICAgICAgIHJldHVybiBpc1N0cmluZyhsYWJlbClcbiAgICAgICAgICA/IGxhYmVsXG4gICAgICAgICAgOiBsYWJlbCAhPT0gZmFsc2UgJiYgdGhpcy4kb3B0aW9ucy5nZW5lcmF0ZUxhYmVsXG4gICAgICAgICAgICA/IHRoaXMuZ2V0TGFiZWwodGhpcy5zY2hlbWEpXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHdpZHRoOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdXG4gICAgfSksXG5cbiAgICB2aXNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndmlzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlT3B0aW9ucy5kZWZhdWx0VmlzaWJsZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBleGNsdWRlZGAgZm9yIGNvbnNpc3RlbnQgbmFtaW5nXG4gICAgZXhjbHVkZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2V4Y2x1ZGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHJlcXVpcmVkOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVxdWlyZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IE1vdmUgdGhlc2UgdG8gYSBzdWItY2xhc3MgY29tcG9uZW50IHVzZWQgZm9yIGFsbCBpbnB1dCBjb21wb25lbnRzP1xuICAgIHJlYWRvbmx5OiBnZXRTY2hlbWFBY2Nlc3NvcigncmVhZG9ubHknLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGF1dG9mb2N1czogZ2V0U2NoZW1hQWNjZXNzb3IoJ2F1dG9mb2N1cycsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgLy8gVG8gYmUgdXNlZCBmb3Igc2VsZWN0cyBhbmQgaW5wdXRzIG9ubHk/XG4gICAgY2xlYXJhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY2xlYXJhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBwbGFjZWhvbGRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3BsYWNlaG9sZGVyJywge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfSksXG5cbiAgICBhdXRvY29tcGxldGU6IGdldFNjaGVtYUFjY2Vzc29yKCdhdXRvY29tcGxldGUnLCB7XG4gICAgICB0eXBlOiBTdHJpbmdcbiAgICB9KSxcblxuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7IG5hdGl2ZUZpZWxkLCB0ZXh0RmllbGQgfSA9IHRoaXMuJG9wdGlvbnNcblxuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRcbiAgICAgIH1cblxuICAgICAgaWYgKG5hdGl2ZUZpZWxkKSB7XG4gICAgICAgIGF0dHJpYnV0ZXMubmFtZSA9IHRoaXMubmFtZVxuICAgICAgICBpZiAodGhpcy5sYWJlbCkge1xuICAgICAgICAgIGF0dHJpYnV0ZXMudGl0bGUgPSB0aGlzLmxhYmVsXG4gICAgICAgIH1cbiAgICAgICAgYXR0cmlidXRlcy5yZWFkb25seSA9IHRoaXMucmVhZG9ubHlcbiAgICAgICAgYXR0cmlidXRlcy5hdXRvZm9jdXMgPSB0aGlzLmF1dG9mb2N1c1xuICAgICAgICBpZiAodGV4dEZpZWxkKSB7XG4gICAgICAgICAgYXR0cmlidXRlcy5wbGFjZWhvbGRlciA9IHRoaXMucGxhY2Vob2xkZXJcbiAgICAgICAgICBhdHRyaWJ1dGVzLmF1dG9jb21wbGV0ZSA9IHRoaXMuYXV0b2NvbXBsZXRlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzXG4gICAgfSxcblxuICAgIGxpc3RlbmVycygpIHtcbiAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuZ2V0TGlzdGVuZXJzKClcbiAgICAgIGNvbnN0IHsgZXZlbnRzID0ge30gfSA9IHRoaXMuc2NoZW1hXG4gICAgICBpZiAoZXZlbnRzKSB7XG4gICAgICAgIC8vIFJlZ2lzdGVyIGNhbGxiYWNrcyBmb3IgYWxsIHByb3ZpZGVzIG5vbi1yZWNvZ25pemVkIGV2ZW50cyxcbiAgICAgICAgLy8gYXNzdW1pbmcgdGhleSBhcmUgbmF0aXZlIGV2ZW50cy5cbiAgICAgICAgZm9yIChjb25zdCBldmVudCBvZiBPYmplY3Qua2V5cyhldmVudHMpKSB7XG4gICAgICAgICAgbGlzdGVuZXJzW2V2ZW50XSB8fD0gKCkgPT4gdGhpcy5lbWl0RXZlbnQoZXZlbnQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0ZW5lcnNcbiAgICB9LFxuXG4gICAgdmFsaWRhdGlvbnMoKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9ucyA9IHsgLi4udGhpcy5nZXRWYWxpZGF0aW9ucygpIH1cbiAgICAgIGlmICh0aGlzLnJlcXVpcmVkKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLnJlcXVpcmVkID0gdHJ1ZVxuICAgICAgfVxuICAgICAgLy8gQWxsb3cgc2NoZW1hIHRvIG92ZXJyaWRlIGRlZmF1bHQgcnVsZXMgYW5kIGFkZCBhbnkgbmV3IG9uZXM6XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5ydWxlcyB8fCB7fSkpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkZWxldGUgdmFsaWRhdGlvbnNba2V5XVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRpb25zW2tleV0gPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsaWRhdGlvbnNcbiAgICB9LFxuXG4gICAgcHJvdmlkZXNEYXRhKCkge1xuICAgICAgLy8gTk9URTogVGhpcyBpcyBvdmVycmlkZGVuIGluIFJlc291cmNlTWl4aW4sIHVzZWQgYnkgbGlzdHMuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgc2hvd0NsZWFyQnV0dG9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xlYXJhYmxlICYmIHRoaXMudmFsdWUgIT0gbnVsbFxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgdGhpcy5zZXR1cFNjaGVtYUZpZWxkcygpXG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gUHJldmVudCB1bm5lc3RlZCB0eXBlIGNvbXBvbmVudHMgZnJvbSBvdmVycmlkaW5nIHBhcmVudCBkYXRhIHBhdGhzXG4gICAgICBpZiAodGhpcy5uZXN0ZWQpIHtcbiAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyQ29tcG9uZW50KHRoaXMsIGFkZClcbiAgICAgICAgLy8gSW5zdGFsbCAvIHJlbW92ZSB0aGUgZmllbGQgZXZlbnRzIHRvIHdhdGNoIG9mIGNoYW5nZXMgYW5kIGhhbmRsZVxuICAgICAgICAvLyB2YWxpZGF0aW9uIGZsYWdzLiBgZXZlbnRzYCBpcyBwcm92aWRlZCBieSBgVmFsaWRhdGlvbk1peGluLmV2ZW50cygpYFxuICAgICAgICB0aGlzW2FkZCA/ICdvbicgOiAnb2ZmJ10odGhpcy5ldmVudHMpXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGdldExpc3RlbmVycygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvY3VzOiB0aGlzLm9uRm9jdXMsXG4gICAgICAgIGJsdXI6IHRoaXMub25CbHVyLFxuICAgICAgICBpbnB1dDogdGhpcy5vbklucHV0LFxuICAgICAgICBjaGFuZ2U6IHRoaXMub25DaGFuZ2VcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICBjb25zdCBbZWxlbWVudF0gPSBhc0FycmF5KHRoaXMuJHJlZnMuZWxlbWVudClcbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICBlbGVtZW50LmZvY3VzKClcbiAgICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBkaXNhYmxlZCwgYGZvY3VzKClgIHdpbGwgbGlrZWx5IG5vdCBoYXZlIHRoZVxuICAgICAgICAgIC8vIGRlc2lyZWQgZWZmZWN0LiBVc2UgYHNjcm9sbEludG9WaWV3KClgIGlmIGF2YWlsYWJsZTpcbiAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgKGVsZW1lbnQuJGVsIHx8IGVsZW1lbnQpLnNjcm9sbEludG9WaWV3Py4oKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICAvLyBBbHNvIGZvY3VzIHRoaXMgY29tcG9uZW50J3Mgc2NoZW1hIGFuZCBwYW5lbCBpbiBjYXNlIGl0J3MgYSB0YWIuXG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5mb2N1cygpXG4gICAgICB0aGlzLnRhYkNvbXBvbmVudD8uZm9jdXMoKVxuICAgICAgdGhpcy5mb2N1c0VsZW1lbnQoKVxuICAgIH0sXG5cbiAgICBjbGVhcigpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICB9LFxuXG4gICAgb25Gb2N1cygpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IHRydWVcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdmb2N1cycpXG4gICAgfSxcblxuICAgIG9uQmx1cigpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlXG4gICAgICB0aGlzLmVtaXRFdmVudCgnYmx1cicpXG4gICAgfSxcblxuICAgIG9uSW5wdXQoKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnaW5wdXQnKVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdjaGFuZ2UnLCB7XG4gICAgICAgIGNvbnRleHQ6IHRoaXMucGFyc2VkVmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8geyB2YWx1ZTogdGhpcy5wYXJzZWRWYWx1ZSB9XG4gICAgICAgICAgOiBudWxsLFxuICAgICAgICAvLyBQYXNzIGBzY2hlbWFDb21wb25lbnRgIGFzIHBhcmVudCwgc28gY2hhbmdlIGV2ZW50cyBjYW4gcHJvcGFnYXRlIHVwLlxuICAgICAgICBwYXJlbnQ6IHRoaXMuc2NoZW1hQ29tcG9uZW50XG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc1Byb21pc2UgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9NaXhpbiBmcm9tICcuL21peGlucy9EaXRvTWl4aW4uanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCB7IGdldFR5cGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL3NjaGVtYS5qcydcblxuY29uc3QgY29tcG9uZW50cyA9IHt9XG5cbmNvbnN0IERpdG9Db21wb25lbnQgPSBWdWUuZXh0ZW5kKHtcbiAgLy8gTWFrZSBzdXJlIHRoYXQgcmVnaXN0ZXJlZCBjb21wb25lbnRzIGFyZSBwcmVzZW50IGluIGFsbCBEaXRvQ29tcG9uZW50LlxuICBjb21wb25lbnRzLFxuICBtaXhpbnM6IFtEaXRvTWl4aW5dLFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRUeXBlQ29tcG9uZW50LFxuXG4gICAgcmVzb2x2ZUNvbXBvbmVudChjb21wb25lbnQsIG1peGlucyA9IFtdKSB7XG4gICAgICAvLyBBIGhlbHBlciBtZXRob2QgdG8gYWxsb3cgdGhyZWUgdGhpbmdzOlxuICAgICAgLy8gLSBXaGVuIHVzZWQgaW4gYSBjb21wdXRlZCBwcm9wZXJ0eSwgaXQgcmVtb3ZlcyB0aGUgbmVlZCB0byBoYXZlIHRvXG4gICAgICAvLyAgIGxvYWQgY29tcG9uZW50cyB3aXRoIGFzeW5jIGZ1bmN0aW9ucyBgY29tcG9uZW50OiAoKSA9PiBpbXBvcnQoLi4uKWAuXG4gICAgICAvLyAgIGluc3RlYWQsIHRoZXkgY2FuIGJlIGRpcmVjdGx5IHByb3ZpZGVkOiBgY29tcG9uZW50OiBpbXBvcnQoLi4uKWBcbiAgICAgIC8vIC0gVGhlIHByb3BlcnRpZXMgcGFzc2VkIHRvIHN1Y2ggY29tcG9uZW50cyBkb24ndCBuZWVkIHRvIGJlIGRlZmluZWQuXG4gICAgICAvLyAgIEluc3RlYWQsIHRoZSBwcm92aWRlZCBtaXhpbnMgYXJlIGF1dG9tYXRpY2FsbHkgaW5oZXJpdGVkLlxuICAgICAgLy8gLSBUaGUgY29tcG9uZW50IGNhbiB1c2UgYWxsIGludGVybmFsIGNvbXBvbmVudHMga25vd24gdG8gRGl0by5qcyBBZG1pbi5cbiAgICAgIHJldHVybiBjb21wb25lbnRcbiAgICAgICAgPyBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgLy8gQXQgZmlyc3QsIHJlc29sdmUgY29tcG9uZW50IGlzIGl0IGlzIGxvYWRlZCBhc3luY2hyb25vdXNseS5cbiAgICAgICAgICBsZXQgY29tcCA9IGlzRnVuY3Rpb24oY29tcG9uZW50KSA/IGF3YWl0IGNvbXBvbmVudCgpXG4gICAgICAgICAgICA6IGlzUHJvbWlzZShjb21wb25lbnQpID8gYXdhaXQgY29tcG9uZW50XG4gICAgICAgICAgICA6IGNvbXBvbmVudFxuICAgICAgICAgIGNvbXAgPSBjb21wPy5kZWZhdWx0IHx8IGNvbXBcbiAgICAgICAgICBjb21wLm1peGlucyA9IG1peGluc1xuICAgICAgICAgIGNvbXAuY29tcG9uZW50cyA9IGNvbXBvbmVudHNcbiAgICAgICAgICByZXR1cm4gY29tcFxuICAgICAgICB9XG4gICAgICAgIDogY29tcG9uZW50XG4gICAgfSxcblxuICAgIHJlc29sdmVEaXRvQ29tcG9uZW50KGNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZUNvbXBvbmVudChjb21wb25lbnQsIFtEaXRvTWl4aW5dKVxuICAgIH0sXG5cbiAgICByZXNvbHZlVHlwZUNvbXBvbmVudChjb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVDb21wb25lbnQoY29tcG9uZW50LCBbRGl0b01peGluLCBUeXBlTWl4aW5dKVxuICAgIH1cbiAgfVxufSlcblxuRGl0b0NvbXBvbmVudC5jb21wb25lbnQgPSBmdW5jdGlvbihuYW1lLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHtcbiAgICAgIG5hbWUsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfVxuICAgIGNvbnN0IGN0b3IgPSB0aGlzLmV4dGVuZChvcHRpb25zKVxuICAgIGNvbXBvbmVudHNbbmFtZV0gPSBjdG9yXG4gICAgcmV0dXJuIGN0b3JcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY29tcG9uZW50c1tuYW1lXSB8fCBWdWUuY29tcG9uZW50KG5hbWUpXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudFxuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b1VzZXIge1xuICBoYXNSb2xlKC4uLnJvbGVzKSB7XG4gICAgaWYgKHRoaXMucm9sZXMpIHtcbiAgICAgIGZvciAoY29uc3Qgcm9sZSBvZiByb2xlcykge1xuICAgICAgICBpZiAodGhpcy5yb2xlcy5pbmNsdWRlcyhyb2xlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzY2hlbWFQYXJlbnRDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2NoZW1hQ29tcG9uZW50czogW11cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBtYWluU2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50c1swXVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IGBEaXRvU2NoZW1hLmNyZWF0ZWQoKS9kZXN0cm95ZWQoKWAgb24gaXRzXG4gICAgLy8gJHBhcmVudCwgaWYgdGhlIHBhcmVudCB1c2VzIHRoZSBgU2NoZW1hUGFyZW50TWl4aW5gOlxuICAgIF9yZWdpc3RlclNjaGVtYUNvbXBvbmVudChzY2hlbWFDb21wb25lbnQsIGFkZCkge1xuICAgICAgY29uc3QgeyBzY2hlbWFDb21wb25lbnRzIH0gPSB0aGlzXG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudHMucHVzaChzY2hlbWFDb21wb25lbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzY2hlbWFDb21wb25lbnRzLnNwbGljZShzY2hlbWFDb21wb25lbnRzLmluZGV4T2Yoc2NoZW1hQ29tcG9uZW50KSwgMSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBTY2hlbWFQYXJlbnRNaXhpbiBmcm9tICcuL1NjaGVtYVBhcmVudE1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtTY2hlbWFQYXJlbnRNaXhpbl0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBlcnJvcnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnJlZHVjZShcbiAgICAgICAgKHJlc3VsdCwgeyBlcnJvcnMgfSkgPT5cbiAgICAgICAgICBlcnJvcnMgJiYgcmVzdWx0ID8gcmVzdWx0LmNvbmNhdChlcnJvcnMpIDogZXJyb3JzLFxuICAgICAgICBudWxsXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzVG91Y2hlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuc29tZShpdCA9PiBpdC5pc1RvdWNoZWQpXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnNvbWUoaXQgPT4gaXQuaXNEaXJ0eSlcbiAgICB9LFxuXG4gICAgaXNWYWxpZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICB2YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC52YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5KSlcbiAgICB9LFxuXG4gICAgdmVyaWZ5QWxsKG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LnZlcmlmeUFsbChtYXRjaCkpXG4gICAgfSxcblxuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKGl0ID0+IGl0LnJlc2V0VmFsaWRhdGlvbigpKVxuICAgIH0sXG5cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKGl0ID0+IGl0LmNsZWFyRXJyb3JzKCkpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKFxuICAgICAgICBpdCA9PiBpdC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKVxuICAgICAgKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFZhbGlkYXRvck1peGluIGZyb20gJy4uL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcydcbmltcG9ydCB7IGdldENvbW1vblByZWZpeCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1ZhbGlkYXRvck1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcm91dGVDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlUm91dGVVcGRhdGUodG8sIGZyb20sIG5leHQpIHtcbiAgICB0aGlzLmJlZm9yZVJvdXRlQ2hhbmdlKHRvLCBmcm9tLCBuZXh0KVxuICB9LFxuXG4gIGJlZm9yZVJvdXRlTGVhdmUodG8sIGZyb20sIG5leHQpIHtcbiAgICB0aGlzLmJlZm9yZVJvdXRlQ2hhbmdlKHRvLCBmcm9tLCBuZXh0KVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlbG9hZDogZmFsc2UsXG4gICAgICAvLyBFYWNoIHJvdXRlLWNvbXBvbmVudCBkZWZpbmVzIGEgc3RvcmUgdGhhdCBnZXRzIHBhc3NlZCBvbiB0byBpdHNcbiAgICAgIC8vIGNoaWxkIGNvbXBvbmVudHMsIHNvIHRoZXkgY2FuIHN0b3JlIHZhbHVlcyBpbiB0aGVtIHRoYXQgbGl2ZSBiZXlvbmRcbiAgICAgIC8vIHRoZWlyIGxpZmUtY3ljbGUuIFNlZTogRGl0b1BhbmUsIFNvdXJjZU1peGluXG4gICAgICBzdG9yZToge30sXG4gICAgICBsb2FkQ2FjaGU6IHt9IC8vIFNlZSBUeXBlTWl4aW4ubG9hZCgpXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcm91dGVDb21wb25lbnQoKSB7XG4gICAgICAvLyBPdmVycmlkZSBEaXRvTWl4aW4ncyByb3V0ZUNvbXBvbmVudCgpIHdoaWNoIHVzZXMgdGhlIGluamVjdGVkIHZhbHVlLlxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcm91dGVSZWNvcmQoKSB7XG4gICAgICAvLyBUT0RPOiBDYW4gdGhpcy4kcm91dGUuY3VycmVudFJvdXRlIGJlIG9mIHVzZSBzb21ld2hlcmUgaGVyZT9cbiAgICAgIC8vIFJldHJpZXZlIHRoZSByb3V0ZS1yZWNvcmQgdG8gd2hpY2ggdGhpcyBjb21wb25lbnQgd2FzIG1hcHBlZCB0bzpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8xMzM4I2lzc3VlY29tbWVudC0yOTYzODE0NTlcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5tYXRjaGVkW3RoaXMuJHZub2RlLmRhdGEucm91dGVyVmlld0RlcHRoXVxuICAgIH0sXG5cbiAgICBpc0xhc3RSb3V0ZSgpIHtcbiAgICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIHRoaXMgcm91dGVyIGNvbXBvbmVudCBpcyB0aGUgbGFzdCBvbmUgaW4gdGhlIHJvdXRlLlxuICAgICAgY29uc3QgeyBtYXRjaGVkIH0gPSB0aGlzLiRyb3V0ZVxuICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQgPT09IG1hdGNoZWRbbWF0Y2hlZC5sZW5ndGggLSAxXVxuICAgIH0sXG5cbiAgICBpc0xhc3RVbm5lc3RlZFJvdXRlKCkge1xuICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgcm91dGUgY29tcG9uZW50IGlzIHRoZSBsYXN0IG9uZSBpbiB0aGUgcm91dGUgdGhhdFxuICAgICAgLy8gbmVlZHMgaXRzIG93biByb3V0ZXItdmlldyAoPSBpcyBub3QgbmVzdGVkKS5cbiAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIGZvciAobGV0IGkgPSBtYXRjaGVkLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IG1hdGNoZWRbaV1cbiAgICAgICAgaWYgKCFyZWNvcmQubWV0YS5uZXN0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZVJlY29yZCA9PT0gcmVjb3JkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBpc05lc3RlZFJvdXRlKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YS5uZXN0ZWRcbiAgICB9LFxuXG4gICAgbWV0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlUmVjb3JkPy5tZXRhXG4gICAgfSxcblxuICAgIHBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSb3V0ZVBhdGgodGhpcy5yb3V0ZVJlY29yZC5wYXRoKVxuICAgIH0sXG5cbiAgICBsYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iKCkge1xuICAgICAgY29uc3QgeyBicmVhZGNydW1iIH0gPSB0aGlzLnNjaGVtYSB8fCB7fVxuICAgICAgcmV0dXJuIGJyZWFkY3J1bWIgfHwgYCR7dGhpcy5icmVhZGNydW1iUHJlZml4fSAke3RoaXMubGFiZWx9YFxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iUHJlZml4KCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfSxcblxuICAgIHBhcmFtKCkge1xuICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgdnVlLXJvdXRlciBub3QgYmVpbmcgYWJsZSB0byBtYXAgbXVsdGlwbGUgdXJsIHBhcmFtZXRlcnNcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUgbmFtZSB0byBtdWx0aXBsZSBjb21wb25lbnRzLCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTM0NVxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhcmFtc1t0aGlzLm1ldGE/LnBhcmFtXSB8fCBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZSwgc2VlIERpdG9Gb3JtXG4gICAgZG9lc011dGF0ZSgpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIC8vIEtlZXAgYSBzaGFyZWQgc3RhY2sgb2Ygcm9vdCBjb21wb25lbnRzIGZvciBEaXRvVHJhaWwgdG8gdXNlIHRvIHJlbmRlclxuICAgIC8vIGxhYmVscy4gQ2FuJ3QgcmVseSBvbiAkcm91dGUubWF0Y2hlZFtpXS5pbnN0YW5jZXMuZGVmYXVsdCB1bmZvcnR1bmF0ZWx5LFxuICAgIC8vIGFzIGluc3RhbmNlcyBhcmVuJ3QgaW1tZWRpYXRlbHkgcmVhZHksIGFuZCBpbnN0YW5jZXMgaXMgbm90IHJlYWN0aXZlLlxuICAgIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzLnB1c2godGhpcylcbiAgfSxcblxuICBkZXN0cm95ZWQoKSB7XG4gICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICByb3V0ZUNvbXBvbmVudHMuc3BsaWNlKHJvdXRlQ29tcG9uZW50cy5pbmRleE9mKHRoaXMpLCAxKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBiZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dCkge1xuICAgICAgbGV0IG9rID0gdHJ1ZVxuICAgICAgY29uc3QgaXNDbG9zaW5nID0gKFxuICAgICAgICAvLyBPbmx5IGhhbmRsZSB0aGlzIHJvdXRlIGNoYW5nZSBpZiB0aGUgZm9ybSBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlXG4gICAgICAgIC8vIGBmcm9tYCByb3V0ZSwgYnV0IGluY2x1ZGUgcGFyZW50IGZvcm1zIG9mIGNsb3NpbmcgbmVzdGVkIGZvcm1zIGFzIGFzXG4gICAgICAgIC8vIHdlbGwsIGJ5IG1hdGNoaW5nIHRoZSB0aGUgc3RhcnQgb2YgZnJvbS90byBwYXRoIGFnYWluc3QgYHRoaXMucGF0aGA6XG4gICAgICAgIGZyb20ucGF0aC5zdGFydHNXaXRoKHRoaXMucGF0aCkgJiZcbiAgICAgICAgIXRvLnBhdGguc3RhcnRzV2l0aCh0aGlzLnBhdGgpICYmXG4gICAgICAgIC8vIEV4Y2x1ZGUgaGFzaCBjaGFuZ2VzIG9ubHkgKD0gdGFiIGNoYW5nZXMpOlxuICAgICAgICBmcm9tLnBhdGggIT09IHRvLnBhdGggJiYgKFxuICAgICAgICAgIHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHx8XG4gICAgICAgICAgLy8gRGVjaWRlIGlmIHdlJ3JlIG1vdmluZyB0b3dhcmRzIGEgbmV3IG5lc3RlZCBmb3JtLCBvciBjbG9zaW5nIC9cbiAgICAgICAgICAvLyByZXBsYWNpbmcgYW4gYWxyZWFkeSBvcGVuIG9uZSBieSBjb21wYXJpbmcgcGF0aCBsZW5ndGhzLlxuICAgICAgICAgIC8vIFRoZSBjYXNlIG9mIGA9YCBtYXRjaGVzIHRoZSByZXBsYWNpbmcgb2YgYW4gYWxyZWFkeSBvcGVuIG9uZS5cbiAgICAgICAgICB0by5wYXRoLmxlbmd0aCA8PSBmcm9tLnBhdGgubGVuZ3RoXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIGlmIChpc0Nsb3NpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9lc011dGF0ZSkge1xuICAgICAgICAgIC8vIEZvciBhY3RpdmUgZGlyZWN0bHkgbXV0YXRpbmcgKG5lc3RlZCkgZm9ybXMgdGhhdCB3ZXJlIG5vdCB2YWxpZGF0ZWRcbiAgICAgICAgICAvLyB5ZXQsIHZhbGlkYXRlIHRoZW0gb25jZS4gSWYgdGhlIHVzZXIgdGhlbiBzdGlsbCB3YW50cyB0byBsZWF2ZVxuICAgICAgICAgIC8vIHRoZW0sIHRoZXkgY2FuIGNsaWNrIGNsb3NlIC8gbmF2aWdhdGUgYXdheSBhZ2Fpbi5cbiAgICAgICAgICBvayA9IChcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgfHxcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVBbGwoKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGUgZm9ybSBkb2Vzbid0IGRpcmVjdGx5IG11dGF0ZSBkYXRhLiBJZiBpdCBpcyBkaXJ0eSwgYXNrIGlmIHVzZXJcbiAgICAgICAgICAvLyB3YW50cyB0byBwZXJzaXN0IGRhdGEgZmlyc3QuXG4gICAgICAgICAgaWYgKHRoaXMuaXNEaXJ0eSkge1xuICAgICAgICAgICAgb2sgPSB3aW5kb3cuY29uZmlybShcbiAgICAgICAgICAgICAgYFlvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gRG8geW91IHJlYWxseSB3YW50IHRvICR7XG4gICAgICAgICAgICAgICAgdGhpcy52ZXJicy5jYW5jZWxcbiAgICAgICAgICAgICAgfT9gXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXh0KG9rKVxuICAgIH0sXG5cbiAgICBnZXRSb3V0ZVBhdGgodGVtcGxhdGVQYXRoKSB7XG4gICAgICAvLyBNYXBzIHRoZSByb3V0ZSdzIGFjdHVhbCBwYXRoIHRvIHRoZSBtYXRjaGVkIHJvdXRlcyBieSBjb3VudGluZyBpdHNcbiAgICAgIC8vIHBhcnRzIHNlcGFyYXRlZCBieSAnLycsIHNwbGl0dGluZyB0aGUgcGF0aCBpbnRvIHRoZSBtYXBwZWQgcGFydHNcbiAgICAgIC8vIGNvbnRhaW5pbmcgYWN0dWFsIHBhcmFtZXRlcnMuXG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUucGF0aFxuICAgICAgICAuc3BsaXQoJy8nKVxuICAgICAgICAuc2xpY2UoMCwgdGVtcGxhdGVQYXRoLnNwbGl0KCcvJykubGVuZ3RoKVxuICAgICAgICAuam9pbignLycpXG4gICAgfSxcblxuICAgIGdldENoaWxkUGF0aChwYXRoKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5wYXRofS8ke3BhdGh9YFxuICAgIH0sXG5cbiAgICBpc0Z1bGxSb3V0ZUNoYW5nZSh0bywgZnJvbSkge1xuICAgICAgLy8gVGhlIHJvdXRlIHBhdGggaXMgdGhlIHBhdGggdXAgdG8gdGhlIGZpcnN0IC8gKGV4Y2x1ZGluZyB0aGUgaW5pdGlhbCAvKTpcbiAgICAgIGNvbnN0IHJvb3RQYXRoID0gdGhpcy5wYXRoLm1hdGNoKC9eKFxcL1teL10qKS8pWzFdXG4gICAgICByZXR1cm4gIWdldENvbW1vblByZWZpeCh0by5wYXRoLCBmcm9tLnBhdGgpLnN0YXJ0c1dpdGgocm9vdFBhdGgpXG4gICAgfVxuICB9XG59XG4iLCJcbi8vIE9ubHkgcmVuZGVyIERpdG9WaWV3IHdoZW4gaXQgaXMgYWN0aXZlLCBvdGhlcndpc2UgYSBub3JtYWwgcm91dGVyLXZpZXdcbi8vIGluc3RlYWQsIHRvIG5lc3QgZnVydGhlciByb3V0ZSBjb21wb25lbnRzLlxuLy8gTk9URTogVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgaGFuZGxpbmcgaW4gRGl0b0Zvcm0sIHdoZXJlIGB2LXNob3dgIGlzXG4vLyB1c2VkIHRvIGFsd2F5cyByZW5kZXIgZm9ybXMgZXZlbiB3aGVuIG90aGVyIG5lc3RlZCBmb3JtcyBhcmUgcHJlc2VudC5cbnJvdXRlci12aWV3KFxuICB2LWlmPVwiIWlzTGFzdFJvdXRlXCJcbiAgOmtleT1cIm5hbWVcIlxuKVxuLmRpdG8tdmlldy5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIHYtZWxzZS1pZj1cInNob3VsZFJlbmRlcih2aWV3U2NoZW1hKVwiXG4pXG4gIGRpdG8tc2NoZW1hLmRpdG8tc2Nyb2xsKFxuICAgIDpzY2hlbWE9XCJ2aWV3U2NoZW1hXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShuYW1lKVwiXG4gICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICA6Z2VuZXJhdGVMYWJlbHM9XCJmYWxzZVwiXG4gICAgOm1lbnVIZWFkZXI9XCJ0cnVlXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLy8gT25seSByZW5kZXIgRGl0b1ZpZXcgd2hlbiBpdCBpcyBhY3RpdmUsIG90aGVyd2lzZSBhIG5vcm1hbCByb3V0ZXItdmlld1xuICAvLyBpbnN0ZWFkLCB0byBuZXN0IGZ1cnRoZXIgcm91dGUgY29tcG9uZW50cy5cbiAgLy8gTk9URTogVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgaGFuZGxpbmcgaW4gRGl0b0Zvcm0sIHdoZXJlIGB2LXNob3dgIGlzXG4gIC8vIHVzZWQgdG8gYWx3YXlzIHJlbmRlciBmb3JtcyBldmVuIHdoZW4gb3RoZXIgbmVzdGVkIGZvcm1zIGFyZSBwcmVzZW50LlxuICByb3V0ZXItdmlldyhcbiAgICB2LWlmPVwiIWlzTGFzdFJvdXRlXCJcbiAgICA6a2V5PVwibmFtZVwiXG4gIClcbiAgLmRpdG8tdmlldy5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gICAgdi1lbHNlLWlmPVwic2hvdWxkUmVuZGVyKHZpZXdTY2hlbWEpXCJcbiAgKVxuICAgIGRpdG8tc2NoZW1hLmRpdG8tc2Nyb2xsKFxuICAgICAgOnNjaGVtYT1cInZpZXdTY2hlbWFcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKG5hbWUpXCJcbiAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJmYWxzZVwiXG4gICAgICA6bWVudUhlYWRlcj1cInRydWVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJvdXRlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1JvdXRlTWl4aW4uanMnXG5pbXBvcnQgeyBzb21lU2NoZW1hQ29tcG9uZW50LCBpc1NpbmdsZUNvbXBvbmVudFZpZXcgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBoYXNSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdmlldycsIHtcbiAgbWl4aW5zOiBbUm91dGVNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICAvLyBSZWRpcmVjdCAkc291cmNlQ29tcG9uZW50IGFuZCAkcmVzb3VyY2VDb21wb25lbnQgdG8gdGhlIG1haW4gY29tcG9uZW50OlxuICAgIHJldHVybiB7XG4gICAgICAkc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzLm1haW5Db21wb25lbnQ/LnNvdXJjZUNvbXBvbmVudCB8fCBudWxsLFxuICAgICAgJHJlc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzLm1haW5Db21wb25lbnQ/LnJlc291cmNlQ29tcG9uZW50IHx8IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNWaWV3OiB0cnVlLFxuICAgICAgLy8gVXBkYXRlZCBmcm9tIExvYWRpbmdNaXhpbiB0aHJvdWdoIGBzZXRMb2FkaW5nKGlzTG9hZGluZylgOlxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIC8vIE5PVEU6IERhdGEgaXMgc2hhcmVkIGFjcm9zcyBhbGwgdmlld3MgYmVjYXVzZSB0aGUgcm91dGVyIHJlY3ljbGVzIHRoZVxuICAgICAgLy8gRGl0b1ZpZXcgY29tcG9uZW50LlxuICAgICAgZGF0YToge31cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhLnNjaGVtYVxuICAgIH0sXG5cbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLm5hbWVcbiAgICB9LFxuXG4gICAgaXNTaW5nbGVDb21wb25lbnRWaWV3KCkge1xuICAgICAgcmV0dXJuIGlzU2luZ2xlQ29tcG9uZW50Vmlldyh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgbWFpbkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50QnlEYXRhUGF0aCh0aGlzLm5hbWUpXG4gICAgfSxcblxuICAgIHZpZXdTY2hlbWEoKSB7XG4gICAgICBjb25zdCB7IHNjaGVtYSB9ID0gdGhpc1xuICAgICAgLy8gVHJhbnNsYXRlIHNpbmdsZS1jb21wb25lbnQgc2NoZW1hcyBpbnRvIG11bHRpLWNvbXBvbmVudCBzY2hlbWFzLFxuICAgICAgLy8gc28gdGhleSBjYW4gYmUgcmVuZGVyZWQgZGlyZWN0bHkgdGhyb3VnaCBEaXRvU2NoZW1hIGFsc286XG4gICAgICByZXR1cm4gdGhpcy5pc1NpbmdsZUNvbXBvbmVudFZpZXdcbiAgICAgICAgPyB7XG4gICAgICAgICAgbmFtZTogc2NoZW1hLm5hbWUsXG4gICAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgICAgW3NjaGVtYS5uYW1lXToge1xuICAgICAgICAgICAgICAuLi5zY2hlbWEsXG4gICAgICAgICAgICAgIGxhYmVsOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA6IHNjaGVtYVxuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICByZXR1cm4gc29tZVNjaGVtYUNvbXBvbmVudChcbiAgICAgICAgdGhpcy52aWV3U2NoZW1hLFxuICAgICAgICBjb21wb25lbnQgPT4gaGFzUmVzb3VyY2UoY29tcG9uZW50KVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICRyb3V0ZSh0bywgZnJvbSkge1xuICAgICAgLy8gU2VlIGlmIHRoZSByb3V0ZSBjaGFuZ2VzIGNvbXBsZXRlbHksIGFuZCBjbGVhciB0aGUgZGF0YSBpZiBpdCBkb2VzLlxuICAgICAgaWYgKHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pKSB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcbiAgICAgICAgdGhpcy5kYXRhID0ge31cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFBhdGgocGF0aCkge1xuICAgICAgLy8gTGlzdHMgaW5zaWRlIHNpbmdsZS1jb21wb25lbnQgdmlld3MgdXNlIHRoZSB2aWV3J3MgcGF0aCBmb3Igc3ViLXBhdGhzOlxuICAgICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVDb21wb25lbnRWaWV3XG4gICAgICAgID8gdGhpcy5wYXRoXG4gICAgICAgIDogYCR7dGhpcy5wYXRofS8ke3BhdGh9YFxuICAgIH0sXG5cbiAgICBzZXRMb2FkaW5nKGlzTG9hZGluZykge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSAhIWlzTG9hZGluZ1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgYWRkRXZlbnRzIH0gZnJvbSAnQGRpdG9qcy91aSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZG9tSGFuZGxlcnM6IFtdXG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgZm9yIChjb25zdCB7IHJlbW92ZSB9IG9mIHRoaXMuZG9tSGFuZGxlcnMpIHtcbiAgICAgIHJlbW92ZSgpXG4gICAgfVxuICAgIHRoaXMuZG9tSGFuZGxlcnMgPSBbXVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBkb21PbihlbGVtZW50LCB0eXBlLCBoYW5kbGVyKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhZGRFdmVudHMoXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIGlzT2JqZWN0KHR5cGUpID8gdHlwZSA6IHsgW3R5cGVdOiBoYW5kbGVyIH1cbiAgICAgIClcbiAgICAgIHRoaXMuZG9tSGFuZGxlcnMucHVzaChyZXN1bHQpXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuICB9XG59XG4iLCJcbi5kaXRvLXJvb3RcbiAgbm90aWZpY2F0aW9ucy5kaXRvLW5vdGlmaWNhdGlvbnMoXG4gICAgcmVmPVwibm90aWZpY2F0aW9uc1wiXG4gICAgcG9zaXRpb249XCJ0b3AgcmlnaHRcIlxuICAgIGNsYXNzZXM9XCJkaXRvLW5vdGlmaWNhdGlvblwiXG4gIClcbiAgZGl0by1tZW51XG4gIG1haW4uZGl0by1wYWdlLmRpdG8tc2Nyb2xsLXBhcmVudFxuICAgIGRpdG8taGVhZGVyKFxuICAgICAgOnNwaW5uZXI9XCJvcHRpb25zLnNwaW5uZXJcIlxuICAgICAgOmlzTG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgKVxuICAgICAgZGl0by1hY2NvdW50KFxuICAgICAgICB2LWlmPVwidXNlclwiXG4gICAgICApXG4gICAgICBhLmRpdG8tbG9naW4oXG4gICAgICAgIHYtZWxzZS1pZj1cImFsbG93TG9naW5cIlxuICAgICAgICBAY2xpY2s9XCJyb290Q29tcG9uZW50LmxvZ2luKClcIlxuICAgICAgKVxuICAgICAgICBzcGFuIExvZ2luXG4gICAgcm91dGVyLXZpZXdcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXJvb3RcbiAgICBub3RpZmljYXRpb25zLmRpdG8tbm90aWZpY2F0aW9ucyhcbiAgICAgIHJlZj1cIm5vdGlmaWNhdGlvbnNcIlxuICAgICAgcG9zaXRpb249XCJ0b3AgcmlnaHRcIlxuICAgICAgY2xhc3Nlcz1cImRpdG8tbm90aWZpY2F0aW9uXCJcbiAgICApXG4gICAgZGl0by1tZW51XG4gICAgbWFpbi5kaXRvLXBhZ2UuZGl0by1zY3JvbGwtcGFyZW50XG4gICAgICBkaXRvLWhlYWRlcihcbiAgICAgICAgOnNwaW5uZXI9XCJvcHRpb25zLnNwaW5uZXJcIlxuICAgICAgICA6aXNMb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICAgIClcbiAgICAgICAgZGl0by1hY2NvdW50KFxuICAgICAgICAgIHYtaWY9XCJ1c2VyXCJcbiAgICAgICAgKVxuICAgICAgICBhLmRpdG8tbG9naW4oXG4gICAgICAgICAgdi1lbHNlLWlmPVwiYWxsb3dMb2dpblwiXG4gICAgICAgICAgQGNsaWNrPVwicm9vdENvbXBvbmVudC5sb2dpbigpXCJcbiAgICAgICAgKVxuICAgICAgICAgIHNwYW4gTG9naW5cbiAgICAgIHJvdXRlci12aWV3XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL3N0eWxlLnNhc3MnXG5cbiAgLmRpdG8tcm9vdFxuICAgIGhlaWdodDogMTAwJVxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICAuZGl0by1wYWdlXG4gICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kXG4gICAgICAvLyBUaGUgcm9vdC1sZXZlbCB2aWV3cyBhbmQgZm9ybXMgbWF5IGhhdmUgYSBgLmRpdG8tc2NoZW1hLWhlYWRlcmAgdGhhdFxuICAgICAgLy8gc2hvdWxkIGFwcGVhciBsYXllcmVkIG92ZXIgYC5kaXRvLW1lbnVgLCB3aGlsZSBoYXZpbmcgYG92ZXJsYXk6IGhpZGRlbmBcbiAgICAgIC8vIHNldCBieSBgLmRpdG8tc2Nyb2xsLXBhcmVudGAgdG8gZGVsZWdhdGUgc2Nyb2xsaW5nIHRvIGAuZGl0by1zY3JvbGxgLlxuICAgICAgLy8gSW4gb3JkZXIgdG8gbm90IGhhdmUgdGhlIGhlYWRlciBjbGlwcGVkLCBhZGp1c3QgdGhlIHRvcCBoZXJlOlxuICAgICAgPiAuZGl0by1mb3JtLFxuICAgICAgPiAuZGl0by12aWV3XG4gICAgICAgIG1hcmdpbi10b3A6IC0kbWVudS1oZWlnaHRcbiAgICAgICAgcGFkZGluZy10b3A6ICRtZW51LWhlaWdodFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGFzQXJyYXksIHN0cmlwVGFncyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Vc2VyIGZyb20gJy4uL0RpdG9Vc2VyLmpzJ1xuaW1wb3J0IERpdG9WaWV3IGZyb20gJy4uL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCB7IHByb2Nlc3NWaWV3LCByZXNvbHZlU2NoZW1hcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXJvb3QnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdmlld3M6ICgpID0+IHRoaXMucmVzb2x2ZWRWaWV3c1xuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHVucmVzb2x2ZWRWaWV3czogeyB0eXBlOiBbT2JqZWN0LCBGdW5jdGlvbiwgUHJvbWlzZV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgb3B0aW9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc29sdmVkVmlld3M6IHt9LFxuICAgICAgYWxsb3dMb2dpbjogZmFsc2UsXG4gICAgICBsb2FkaW5nQ291bnQ6IDBcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBub3RpZmljYXRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlZnMubm90aWZpY2F0aW9uc1xuICAgIH0sXG5cbiAgICBpc0xvYWRpbmcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb2FkaW5nQ291bnQgPiAwXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5hcHBTdGF0ZS50aXRsZSA9IGRvY3VtZW50LnRpdGxlIHx8ICdEaXRvLmpzIEFkbWluJ1xuICAgIC8vIFdpdGggaG90LXJlbG9hZGluZywgaXQgbG9va3MgbGlrZSBkZXN0cm95ZWQgaG9va3MgYXJlbid0IGFsd2F5cyBjYWxsZWRcbiAgICAvLyBmb3Igcm91dGUgY29tcG9uZW50cyBzbyByZXNldCB0aGUgYXJyYXkgb2YgcmVnaXN0ZXJlZCBjb21wb25lbnRzIGluc3RlYWQuXG4gICAgdGhpcy5hcHBTdGF0ZS5yb3V0ZUNvbXBvbmVudHMgPSBbXVxuICB9LFxuXG4gIGFzeW5jIG1vdW50ZWQoKSB7XG4gICAgLy8gQ2xlYXIgdGhlIGxhYmVsIG1hcmtlZCBhcyBhY3RpdmUgb24gYWxsIG1vdXNlIGFuZCBrZXlib2FyZCBldmVudHMsIGV4Y2VwdFxuICAgIC8vIHRoZSBvbmVzIHRoYXQgRGl0b0xhYmVsIGl0c2VsZiBpbnRlcmNlcHRzLlxuICAgIHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgIGNsaWNrOiBldmVudCA9PiB7XG4gICAgICAgIGlmICghZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJy5kaXRvLWxhYmVsJykpIHtcbiAgICAgICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBrZXl1cDogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ1RhYicpIHtcbiAgICAgICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgICB0cnkge1xuICAgICAgdGhpcy5hbGxvd0xvZ2luID0gZmFsc2VcbiAgICAgIGlmIChhd2FpdCB0aGlzLmZldGNoVXNlcigpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVzb2x2ZVZpZXdzKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgfVxuICAgIHRoaXMuYWxsb3dMb2dpbiA9IHRydWVcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgbm90aWZ5KHsgdHlwZSA9ICdpbmZvJywgdGl0bGUsIHRleHQgfSA9IHt9KSB7XG4gICAgICB0aXRsZSB8fD0ge1xuICAgICAgICB3YXJuaW5nOiAnV2FybmluZycsXG4gICAgICAgIGVycm9yOiAnRXJyb3InLFxuICAgICAgICBpbmZvOiAnSW5mb3JtYXRpb24nLFxuICAgICAgICBzdWNjZXNzOiAnU3VjY2VzcydcbiAgICAgIH1bdHlwZV0gfHwgJ05vdGlmaWNhdGlvbidcbiAgICAgIHRleHQgPSBgPHA+JHtcbiAgICAgICAgYXNBcnJheSh0ZXh0KS5qb2luKCc8L3A+IDxwPicpXG4gICAgICB9PC9wPmAucmVwbGFjZSgvXFxufFxcclxcbnxcXHIvZywgJzxicj4nKVxuICAgICAgY29uc3QgbG9nID0ge1xuICAgICAgICB3YXJuaW5nOiAnd2FybicsXG4gICAgICAgIGVycm9yOiAnZXJyb3InLFxuICAgICAgICBpbmZvOiAnbG9nJyxcbiAgICAgICAgc3VjY2VzczogJ2xvZydcbiAgICAgIH1bdHlwZV0gfHwgJ2Vycm9yJ1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGVbbG9nXShzdHJpcFRhZ3ModGV4dCkpXG4gICAgICBjb25zdCB7IG5vdGlmaWNhdGlvbnMgPSB0cnVlIH0gPSB0aGlzLmFwaVxuICAgICAgaWYgKG5vdGlmaWNhdGlvbnMpIHtcbiAgICAgICAgLy8gQ2FsY3VsYXRlIGRpc3BsYXktZHVyYXRpb24gZm9yIHRoZSBub3RpZmljYXRpb24gYmFzZWQgb24gaXRzIGNvbnRlbnRcbiAgICAgICAgLy8gYW5kIHRoZSBzZXR0aW5nIG9mIHRoZSBgZHVyYXRpb25GYWN0b3JgIGNvbmZpZ3VyYXRpb24uIEl0IGRlZmluZXMgdGhlXG4gICAgICAgIC8vIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgbXVsdGlwbGllZCB3aXRoIHRoZSBhbW91bnQgb2YgY2hhcmFjdGVyc1xuICAgICAgICAvLyBkaXNwbGF5ZWQgaW4gdGhlIG5vdGlmaWNhdGlvbiwgcGx1cyA0MCAoNDAgKyB0aXRsZSArIG1lc3NhZ2UpOlxuICAgICAgICBjb25zdCB7IGR1cmF0aW9uRmFjdG9yID0gMjAgfSA9IG5vdGlmaWNhdGlvbnNcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSAoNDAgKyB0ZXh0Lmxlbmd0aCArIHRpdGxlLmxlbmd0aCkgKiBkdXJhdGlvbkZhY3RvclxuICAgICAgICB0aGlzLiRub3RpZnkoeyB0eXBlLCB0aXRsZSwgdGV4dCwgZHVyYXRpb24gfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xvc2VOb3RpZmljYXRpb25zKCkge1xuICAgICAgdGhpcy5ub3RpZmljYXRpb25zLmRlc3Ryb3lBbGwoKVxuICAgIH0sXG5cbiAgICByZWdpc3RlckxvYWRpbmcoaXNMb2FkaW5nKSB7XG4gICAgICB0aGlzLmxvYWRpbmdDb3VudCArPSBpc0xvYWRpbmcgPyAxIDogLTFcbiAgICB9LFxuXG4gICAgYXN5bmMgbG9naW4oKSB7XG4gICAgICB0aGlzLmFsbG93TG9naW4gPSB0cnVlXG4gICAgICBjb25zdCB7XG4gICAgICAgIGFkZGl0aW9uYWxDb21wb25lbnRzLFxuICAgICAgICByZWRpcmVjdEFmdGVyTG9naW5cbiAgICAgIH0gPSB0aGlzLm9wdGlvbnMubG9naW4gfHwge31cbiAgICAgIGNvbnN0IGxvZ2luRGF0YSA9IGF3YWl0IHRoaXMuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICB1c2VybmFtZToge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgYXV0b2ZvY3VzOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwYXNzd29yZDoge1xuICAgICAgICAgICAgdHlwZTogJ3Bhc3N3b3JkJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4uYWRkaXRpb25hbENvbXBvbmVudHNcbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uczoge1xuICAgICAgICAgIGNhbmNlbDoge30sXG4gICAgICAgICAgbG9naW46IHsgdHlwZTogJ3N1Ym1pdCcgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgaWYgKGxvZ2luRGF0YSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMubG9naW4sXG4gICAgICAgICAgICBkYXRhOiBsb2dpbkRhdGEsXG4gICAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKHJlZGlyZWN0QWZ0ZXJMb2dpbikge1xuICAgICAgICAgICAgbG9jYXRpb24ucmVwbGFjZShyZWRpcmVjdEFmdGVyTG9naW4pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VXNlcihyZXNwb25zZS5kYXRhLnVzZXIpXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlc29sdmVWaWV3cygpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IGVyci5yZXNwb25zZT8uZGF0YT8uZXJyb3JcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgdGl0bGU6ICdBdXRoZW50aWNhdGlvbiBFcnJvcicsXG4gICAgICAgICAgICB0ZXh0OiBlcnJvciB8fCBlcnJcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIucmVzcG9uc2UpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubG9naW4oKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG5hdmlnYXRlSG9tZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlKCcvJylcbiAgICB9LFxuXG4gICAgYXN5bmMgbG9nb3V0KCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMubG9nb3V0LFxuICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLnNldFVzZXIobnVsbClcbiAgICAgICAgICB0aGlzLm5hdmlnYXRlSG9tZSgpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hVc2VyKCkge1xuICAgICAgbGV0IHVzZXIgPSBudWxsXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgIHJlc291cmNlOiB0aGlzLmFwaS51c2Vycy5zZXNzaW9uLFxuICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIHVzZXIgPSByZXNwb25zZS5kYXRhLnVzZXIgfHwgbnVsbFxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgIHRpdGxlOiAnQXV0aGVudGljYXRpb24gRXJyb3InLFxuICAgICAgICAgIHRleHQ6IGVyclxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRVc2VyKHVzZXIpXG4gICAgICByZXR1cm4gdXNlclxuICAgIH0sXG5cbiAgICBzZXRVc2VyKHVzZXIpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUudXNlciA9IChcbiAgICAgICAgdXNlciAmJlxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodXNlciwgRGl0b1VzZXIucHJvdG90eXBlKVxuICAgICAgKVxuICAgICAgLy8gQ2xlYXIgcmVzb2x2ZWQgdmlld3Mgd2hlbiB1c2VyIGlzIGxvZ2dlZCBvdXQuXG4gICAgICBpZiAoIXVzZXIpIHtcbiAgICAgICAgdGhpcy5yZXNvbHZlZFZpZXdzID0ge31cbiAgICAgICAgdGhpcy5uYXZpZ2F0ZUhvbWUoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBlbnN1cmVVc2VyKCkge1xuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5mZXRjaFVzZXIoKSkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHJlc29sdmVWaWV3cygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRWaWV3cyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKHRoaXMudW5yZXNvbHZlZFZpZXdzKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKCFlcnJvci5yZXF1ZXN0KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgICAvLyBDb2xsZWN0IGFsbCByb3V0ZXMgZnJvbSB0aGUgcm9vdCBzY2hlbWEgY29tcG9uZW50c1xuICAgICAgY29uc3Qgcm91dGVzID0gW11cbiAgICAgIGNvbnN0IHByb21pc2VzID0gW11cbiAgICAgIGZvciAoY29uc3QgW25hbWUsIHNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5yZXNvbHZlZFZpZXdzKSkge1xuICAgICAgICBwcm9taXNlcy5wdXNoKHByb2Nlc3NWaWV3KERpdG9WaWV3LCB0aGlzLmFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMpKVxuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG4gICAgICBmb3IgKGNvbnN0IHJvdXRlIG9mIHJvdXRlcykge1xuICAgICAgICB0aGlzLiRyb3V0ZXIuYWRkUm91dGUocm91dGUpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbm5hdi5kaXRvLW1lbnUuZGl0by1zY3JvbGwtcGFyZW50XG4gIGgxIHt7IGFwcFN0YXRlLnRpdGxlIH19XG4gIHVsLmRpdG8tc2Nyb2xsXG4gICAgbGkodi1mb3I9XCJ2aWV3IGluIHZpZXdzXCIpXG4gICAgICByb3V0ZXItbGluay5kaXRvLWxpbmsoXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodmlldylcIlxuICAgICAgICA6dG89XCJgLyR7dmlldy5wYXRofWBcIlxuICAgICAgICBhY3RpdmUtY2xhc3M9XCJkaXRvLWFjdGl2ZVwiXG4gICAgICApIHt7IGdldExhYmVsKHZpZXcpIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBuYXYuZGl0by1tZW51LmRpdG8tc2Nyb2xsLXBhcmVudFxuICAgIGgxIHt7IGFwcFN0YXRlLnRpdGxlIH19XG4gICAgdWwuZGl0by1zY3JvbGxcbiAgICAgIGxpKHYtZm9yPVwidmlldyBpbiB2aWV3c1wiKVxuICAgICAgICByb3V0ZXItbGluay5kaXRvLWxpbmsoXG4gICAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcih2aWV3KVwiXG4gICAgICAgICAgOnRvPVwiYC8ke3ZpZXcucGF0aH1gXCJcbiAgICAgICAgICBhY3RpdmUtY2xhc3M9XCJkaXRvLWFjdGl2ZVwiXG4gICAgICAgICkge3sgZ2V0TGFiZWwodmlldykgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1tZW51XG4gICAgZmxleDogaW5pdGlhbFxuICAgIGZvbnQtc2l6ZTogJG1lbnUtZm9udC1zaXplXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIHVsXG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlclxuICAgICAgYm9yZGVyLXJpZ2h0OiAkYm9yZGVyLXN0eWxlXG4gICAgYSxcbiAgICBoMVxuICAgICAgZGlzcGxheTogYmxvY2tcbiAgICBoMVxuICAgICAgcGFkZGluZzogJG1lbnUtcGFkZGluZ1xuICAgICAgbGluZS1oZWlnaHQ6ICRtZW51LWxpbmUtaGVpZ2h0XG4gICAgICBmb250LXdlaWdodDogYm9sZFxuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWRhcmtlclxuICAgICAgYm9yZGVyLXJpZ2h0OiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1kYXJrZXN0XG4gICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgLmRpdG8tbGlua1xuICAgICAgcGFkZGluZzogJG1lbnUtcGFkZGluZ1xuICAgICAgbGluZS1oZWlnaHQ6ICRtZW51LWxpbmUtaGVpZ2h0XG4gICAgICAmLmRpdG8tYWN0aXZlXG4gICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZVxuICAuZGl0by1saW5rXG4gICAgJjpmb2N1czpub3QoOmFjdGl2ZSk6bm90KC5kaXRvLWFjdGl2ZSlcbiAgICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctZm9jdXNcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tbWVudScsIHt9KVxuPC9zY3JpcHQ+XG4iLCJcbjxkaXYgY2xhc3M9XCJ2LXNwaW5uZXJcIiB2LXNob3c9XCJsb2FkaW5nXCI+XG4gICAgPGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTFcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTFdXCI+XG4gICAgPC9kaXY+PGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTJcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTJdXCI+XG4gICAgPC9kaXY+PGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTNcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTNdXCI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuIiwiPHRlbXBsYXRlPlxuPGRpdiBjbGFzcz1cInYtc3Bpbm5lclwiIHYtc2hvdz1cImxvYWRpbmdcIj5cbiAgICA8ZGl2IGNsYXNzPVwidi1wdWxzZSB2LXB1bHNlMVwiIHYtYmluZDpzdHlsZT1cIltzcGlubmVyU3R5bGUsc3Bpbm5lckRlbGF5MV1cIj5cbiAgICA8L2Rpdj48ZGl2IGNsYXNzPVwidi1wdWxzZSB2LXB1bHNlMlwiIHYtYmluZDpzdHlsZT1cIltzcGlubmVyU3R5bGUsc3Bpbm5lckRlbGF5Ml1cIj5cbiAgICA8L2Rpdj48ZGl2IGNsYXNzPVwidi1wdWxzZSB2LXB1bHNlM1wiIHYtYmluZDpzdHlsZT1cIltzcGlubmVyU3R5bGUsc3Bpbm5lckRlbGF5M11cIj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBcbiAgbmFtZTogJ1B1bHNlTG9hZGVyJyxcblxuICBwcm9wczoge1xuICAgIGxvYWRpbmc6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBjb2xvcjogeyBcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcjNWRjNTk2J1xuICAgIH0sXG4gICAgc2l6ZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJzE1cHgnXG4gICAgfSxcbiAgICBtYXJnaW46IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcycHgnXG4gICAgfSxcbiAgICByYWRpdXM6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcxMDAlJ1xuICAgIH1cbiAgfSxcbiAgZGF0YSAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNwaW5uZXJTdHlsZToge1xuICAgICAgXHRiYWNrZ3JvdW5kQ29sb3I6IHRoaXMuY29sb3IsXG4gICAgICBcdHdpZHRoOiB0aGlzLnNpemUsXG4gICAgICAgIGhlaWdodDogdGhpcy5zaXplLFxuICAgICAgXHRtYXJnaW46IHRoaXMubWFyZ2luLFxuICAgICAgXHRib3JkZXJSYWRpdXM6IHRoaXMucmFkaXVzLFxuICAgICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAgICAgYW5pbWF0aW9uTmFtZTogJ3YtcHVsc2VTdHJldGNoRGVsYXknLFxuICAgICAgICBhbmltYXRpb25EdXJhdGlvbjogJzAuNzVzJyxcbiAgICAgICAgYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6ICdpbmZpbml0ZScsXG4gICAgICAgIGFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uOiAnY3ViaWMtYmV6aWVyKC4yLC42OCwuMTgsMS4wOCknLFxuICAgICAgICBhbmltYXRpb25GaWxsTW9kZTogJ2JvdGgnXG4gICAgICB9LFxuICAgICAgc3Bpbm5lckRlbGF5MToge1xuICAgICAgICBhbmltYXRpb25EZWxheTogJzAuMTJzJ1xuICAgICAgfSxcbiAgICAgIHNwaW5uZXJEZWxheTI6IHtcbiAgICAgICAgYW5pbWF0aW9uRGVsYXk6ICcwLjI0cydcbiAgICAgIH0sXG4gICAgICBzcGlubmVyRGVsYXkzOiB7XG4gICAgICAgIGFuaW1hdGlvbkRlbGF5OiAnMC4zNnMnXG4gICAgICB9XG4gICAgfVxuICB9XG5cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGU+XG4vKi52LXNwaW5uZXJcbntcbiAgICBtYXJnaW46IDEwMHB4IGF1dG87XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuKi9cblxuQC13ZWJraXQta2V5ZnJhbWVzIHYtcHVsc2VTdHJldGNoRGVsYXlcbntcbiAgICAwJSxcbiAgICA4MCVcbiAgICB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgICAgICAtd2Via2l0LW9wYWNpdHk6IDE7ICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICAgIDQ1JVxuICAgIHtcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDAuMSk7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgICAgICAtd2Via2l0LW9wYWNpdHk6IDAuNzsgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMC43O1xuICAgIH1cbn1cblxuQGtleWZyYW1lcyB2LXB1bHNlU3RyZXRjaERlbGF5XG57XG4gICAgMCUsXG4gICAgODAlXG4gICAge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgLXdlYmtpdC1vcGFjaXR5OiAxOyAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgICA0NSVcbiAgICB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICAgICAgLXdlYmtpdC1vcGFjaXR5OiAwLjc7ICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNztcbiAgICB9XG59XG48L3N0eWxlPiIsIlxubmF2LmRpdG8taGVhZGVyXG4gIC5kaXRvLXRyYWlsXG4gICAgdWxcbiAgICAgIGxpKFxuICAgICAgICB2LWZvcj1cIihjb21wb25lbnQsIGluZGV4KSBpbiB0cmFpbFwiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKHYtaWY9XCJpbmRleCA9PT0gdHJhaWwubGVuZ3RoIC0gMVwiKVxuICAgICAgICAgIHNwYW4oOmNsYXNzPVwiZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudClcIilcbiAgICAgICAgICAgIHwge3sgY29tcG9uZW50LmJyZWFkY3J1bWIgfX1cbiAgICAgICAgcm91dGVyLWxpbmsuZGl0by1icmVhZGNydW1iKHYtZWxzZSwgOnRvPVwiY29tcG9uZW50LnBhdGhcIilcbiAgICAgICAgICBzcGFuKDpjbGFzcz1cImdldEJyZWFkY3J1bWJDbGFzcyhjb21wb25lbnQpXCIpXG4gICAgICAgICAgICB8IHt7IGNvbXBvbmVudC5icmVhZGNydW1iIH19XG4gICAgc3Bpbm5lci5kaXRvLXNwaW5uZXIodi1pZj1cImlzTG9hZGluZ1wiKVxuICBzbG90XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBuYXYuZGl0by1oZWFkZXJcbiAgICAuZGl0by10cmFpbFxuICAgICAgdWxcbiAgICAgICAgbGkoXG4gICAgICAgICAgdi1mb3I9XCIoY29tcG9uZW50LCBpbmRleCkgaW4gdHJhaWxcIlxuICAgICAgICApXG4gICAgICAgICAgdGVtcGxhdGUodi1pZj1cImluZGV4ID09PSB0cmFpbC5sZW5ndGggLSAxXCIpXG4gICAgICAgICAgICBzcGFuKDpjbGFzcz1cImdldEJyZWFkY3J1bWJDbGFzcyhjb21wb25lbnQpXCIpXG4gICAgICAgICAgICAgIHwge3sgY29tcG9uZW50LmJyZWFkY3J1bWIgfX1cbiAgICAgICAgICByb3V0ZXItbGluay5kaXRvLWJyZWFkY3J1bWIodi1lbHNlLCA6dG89XCJjb21wb25lbnQucGF0aFwiKVxuICAgICAgICAgICAgc3Bhbig6Y2xhc3M9XCJnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KVwiKVxuICAgICAgICAgICAgICB8IHt7IGNvbXBvbmVudC5icmVhZGNydW1iIH19XG4gICAgICBzcGlubmVyLmRpdG8tc3Bpbm5lcih2LWlmPVwiaXNMb2FkaW5nXCIpXG4gICAgc2xvdFxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWhlYWRlclxuICAgIGJhY2tncm91bmQ6ICRjb2xvci1ibGFja1xuICAgIGZvbnQtc2l6ZTogJG1lbnUtZm9udC1zaXplXG4gICAgbGluZS1oZWlnaHQ6ICRtZW51LWxpbmUtaGVpZ2h0XG4gICAgei1pbmRleDogJG1lbnUtei1pbmRleFxuICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIHNwYW5cbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgcGFkZGluZzogJG1lbnUtcGFkZGluZ1xuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgIC5kaXRvLXRyYWlsXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgICBoZWlnaHQ6IDNlbVxuICAgICAgd2lkdGg6IDEwMCVcbiAgICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGggKyAkY29udGVudC1wYWRkaW5nXG4gICAgICB1bFxuICAgICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBhXG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwLjRlbVxuICAgICAgICAkYW5nbGU6IDMzZGVnXG4gICAgICAgICY6aG92ZXJcbiAgICAgICAgICBjb2xvcjogIzk5OVxuICAgICAgICAmOjpiZWZvcmUsXG4gICAgICAgICY6OmFmdGVyXG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICAgICAgY29udGVudDogJydcbiAgICAgICAgICB3aWR0aDogMXB4XG4gICAgICAgICAgaGVpZ2h0OiAxLjJlbVxuICAgICAgICAgIHJpZ2h0OiAtMXB4XG4gICAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWRhcmtcbiAgICAgICAgJjo6YmVmb3JlXG4gICAgICAgICAgdG9wOiA1MCVcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgkYW5nbGUpXG4gICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogdG9wXG4gICAgICAgICY6OmFmdGVyXG4gICAgICAgICAgYm90dG9tOiA1MCVcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtJGFuZ2xlKVxuICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGJvdHRvbVxuICAgIC5kaXRvLXNwaW5uZXJcbiAgICAgIG1hcmdpbi10b3A6ICRtZW51LXBhZGRpbmctdmVyXG4gICAgLmRpdG8tZGlydHlcbiAgICAgICY6YWZ0ZXJcbiAgICAgICAgY29udGVudDogJydcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci13aGl0ZVxuICAgICAgICB3aWR0aDogOHB4XG4gICAgICAgIGhlaWdodDogOHB4XG4gICAgICAgIG1hcmdpbjogMnB4XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwLjVlbVxuICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlXG4gICAgLmRpdG8tYWNjb3VudCxcbiAgICAuZGl0by1sb2dpblxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICB0b3A6IDBcbiAgICAgIGN1cnNvcjogcG9pbnRlclxuICAgIC5kaXRvLWFjY291bnRcbiAgICAgIGxlZnQ6ICRjb250ZW50LXdpZHRoICsgJGNvbnRlbnQtcGFkZGluZyAqIDJcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFB1bHNlTG9hZGVyIGZyb20gJ3Z1ZS1zcGlubmVyL3NyYy9QdWxzZUxvYWRlci52dWUnXG5cbmNvbnN0IFNwaW5uZXIgPSBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnc3Bpbm5lcicsIFB1bHNlTG9hZGVyKVxuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8taGVhZGVyJywge1xuICBjb21wb25lbnRzOiB7IFNwaW5uZXIgfSxcblxuICBwcm9wczoge1xuICAgIHNwaW5uZXI6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9LFxuICAgIGlzTG9hZGluZzoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdHJhaWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcHBTdGF0ZS5yb3V0ZUNvbXBvbmVudHMuZmlsdGVyKFxuICAgICAgICBjb21wb25lbnQgPT4gISFjb21wb25lbnQucm91dGVSZWNvcmRcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICBjb25zdCB7XG4gICAgICBzaXplID0gJzhweCcsXG4gICAgICBjb2xvciA9ICcjOTk5J1xuICAgIH0gPSB0aGlzLnNwaW5uZXIgfHwge31cbiAgICBjb25zdCB7IHByb3BzIH0gPSBTcGlubmVyLm9wdGlvbnNcbiAgICBwcm9wcy5zaXplLmRlZmF1bHQgPSBzaXplXG4gICAgcHJvcHMuY29sb3IuZGVmYXVsdCA9IGNvbG9yXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldEJyZWFkY3J1bWJDbGFzcyhjb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWRpcnR5JzogY29tcG9uZW50LmlzRGlydHlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCBEb21NaXhpbiBmcm9tICcuL0RvbU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHVsbGRvd246IHtcbiAgICAgICAgb3BlbjogZmFsc2UsXG4gICAgICAgIHN0YXJ0VGltZTogMCxcbiAgICAgICAgY2hlY2tUaW1lOiB0cnVlLFxuICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICBtb3VzZWRvd246ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5wdWxsZG93bi5oYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBtb3VzZXVwOiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5vblB1bGxkb3duTW91c2VVcChudWxsKSkge1xuICAgICAgICAgICAgICB0aGlzLnB1bGxkb3duLmhhbmRsZXJzLnJlbW92ZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBoYW5kbGVyczogbnVsbFxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25QdWxsZG93bk1vdXNlRG93bih2YWx1ZSkge1xuICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICB0aGlzLnNldFB1bGxkb3duT3Blbih0cnVlKVxuICAgICAgICB0aGlzLmNoZWNrVGltZSA9IHRydWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2hlY2tUaW1lID0gZmFsc2VcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93bk1vdXNlVXAodmFsdWUpIHtcbiAgICAgIGNvbnN0IHsgc3RhcnRUaW1lIH0gPSB0aGlzLnB1bGxkb3duXG4gICAgICBpZiAoIXRoaXMuY2hlY2tUaW1lIHx8IHN0YXJ0VGltZSAmJiAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA+IDI1MCkpIHtcbiAgICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIHRoaXMub25QdWxsZG93blNlbGVjdCh2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duU2VsZWN0KC8qIHZhbHVlICovKSB7XG4gICAgICAvLyBOT1RFOiBUbyBiZSBvdmVycmlkZGVuLlxuICAgIH0sXG5cbiAgICBzZXRQdWxsZG93bk9wZW4ob3Blbikge1xuICAgICAgdGhpcy5wdWxsZG93bi5vcGVuID0gb3BlblxuICAgICAgdGhpcy5wdWxsZG93bi5zdGFydFRpbWUgPSBvcGVuID8gRGF0ZS5ub3coKSA6IDBcbiAgICAgIGlmIChvcGVuKSB7XG4gICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMgPSB0aGlzLmRvbU9uKGRvY3VtZW50LCB0aGlzLnB1bGxkb3duLmV2ZW50cylcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIlxuLmRpdG8tYWNjb3VudFxuICBhKFxuICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24oKVwiXG4gIClcbiAgICBzcGFuIHt7IHVzZXIudXNlcm5hbWUgfX1cbiAgdWwuZGl0by1wdWxsZG93bihcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiBwdWxsZG93bi5vcGVuIH1cIlxuICApXG4gICAgbGkoXG4gICAgICB2LWZvcj1cIihsYWJlbCwgdmFsdWUpIG9mIGl0ZW1zXCJcbiAgICApXG4gICAgICBhKFxuICAgICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKHZhbHVlKVwiXG4gICAgICAgIEBtb3VzZXVwPVwib25QdWxsZG93bk1vdXNlVXAodmFsdWUpXCJcbiAgICAgICkge3sgbGFiZWwgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWFjY291bnRcbiAgICBhKFxuICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgICApXG4gICAgICBzcGFuIHt7IHVzZXIudXNlcm5hbWUgfX1cbiAgICB1bC5kaXRvLXB1bGxkb3duKFxuICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogcHVsbGRvd24ub3BlbiB9XCJcbiAgICApXG4gICAgICBsaShcbiAgICAgICAgdi1mb3I9XCIobGFiZWwsIHZhbHVlKSBvZiBpdGVtc1wiXG4gICAgICApXG4gICAgICAgIGEoXG4gICAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih2YWx1ZSlcIlxuICAgICAgICAgIEBtb3VzZXVwPVwib25QdWxsZG93bk1vdXNlVXAodmFsdWUpXCJcbiAgICAgICAgKSB7eyBsYWJlbCB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWFjY291bnRcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAuZGl0by1wdWxsZG93blxuICAgICAgdG9wOiAkcHVsbGRvd24tcGFkZGluZy12ZXJcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFB1bGxkb3duTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1B1bGxkb3duTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1hY2NvdW50Jywge1xuICBtaXhpbnM6IFtQdWxsZG93bk1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpdGVtczoge1xuICAgICAgICBzZXR0aW5nczogJ1NldHRpbmdzJyxcbiAgICAgICAgbG9nb3V0OiAnTG9nb3V0J1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25QdWxsZG93blNlbGVjdCh2YWx1ZSkge1xuICAgICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgY2FzZSAnbG9nb3V0JzpcbiAgICAgICAgdGhpcy5yb290Q29tcG9uZW50LmxvZ291dCgpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdzZXR0aW5ncyc6XG4gICAgICAgIGNvbnNvbGUuaW5mbygnVE9ETzogSW1wbGVtZW50IFNldHRpbmdzJylcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuZm9ybS5kaXRvLWRpYWxvZyhAc3VibWl0LnByZXZlbnQ9XCJzdWJtaXRcIilcbiAgZGl0by1zY2hlbWEuZGl0by1zY3JvbGwoXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgKVxuICAgIGRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBmb3JtLmRpdG8tZGlhbG9nKEBzdWJtaXQucHJldmVudD1cInN1Ym1pdFwiKVxuICAgIGRpdG8tc2NoZW1hLmRpdG8tc2Nyb2xsKFxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YT1cImRpYWxvZ0RhdGFcIlxuICAgIClcbiAgICAgIGRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICAgIHNsb3Q9XCJidXR0b25zXCJcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAudi0tbW9kYWwtb3ZlcmxheVxuICAgIHotaW5kZXg6IDIwMDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBhZGRFdmVudHMgfSBmcm9tICdAZGl0b2pzL3VpJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldEJ1dHRvblNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1kaWFsb2cnLCB7XG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRkaWFsb2dDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBjb21wb25lbnRzOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwcm9taXNlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICAvLyBNYWtlIHN1cmUgZGlhbG9nIGRhdGEgY29udGFpbnMgYWxsIHRoZSBleHBlY3RlZCBrZXlzXG4gICAgY29uc3QgZGlhbG9nRGF0YSA9IGNsb25lKHRoaXMuZGF0YSlcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgIGlmICghKGtleSBpbiBkaWFsb2dEYXRhKSkge1xuICAgICAgICBkaWFsb2dEYXRhW2tleV0gPSBudWxsXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB3aW5kb3dFdmVudHM6IG51bGwsXG4gICAgICBkaWFsb2dEYXRhXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZGlhbG9nQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgbmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYXJlbnQubmFtZVxuICAgIH0sXG5cbiAgICBzY2hlbWEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb21wb25lbnRzOiB0aGlzLmNvbXBvbmVudHNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGdldEJ1dHRvblNjaGVtYXModGhpcy5idXR0b25zKSkubWFwKFxuICAgICAgICAgIC8vIFByb2Nlc3MgdGhlIGJ1dHRvbiBzY2hlbWFzIHRvIGFkZCBkZWZhdWx0IGNsaWNrIGV2ZW50c1xuICAgICAgICAgIC8vIGZvciBib3RoICdzdWJtaXQnIGFuZCAnY2FuY2VsJyBidXR0b25zOlxuICAgICAgICAgIChba2V5LCBzY2hlbWFdKSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnY2FuY2VsJyAmJiAhc2NoZW1hLmV2ZW50cykge1xuICAgICAgICAgICAgICBzY2hlbWEgPSB7XG4gICAgICAgICAgICAgICAgLi4uc2NoZW1hLFxuICAgICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgICAgY2xpY2s6ICgpID0+IHRoaXMuY2FuY2VsKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBba2V5LCBzY2hlbWFdXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGhhc0NhbmNlbCgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuYnV0dG9uU2NoZW1hcy5jYW5jZWxcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLndpbmRvd0V2ZW50cyA9IGFkZEV2ZW50cyh3aW5kb3csIHtcbiAgICAgIGtleXVwOiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmhhc0NhbmNlbCAmJiBldmVudC5rZXlDb2RlID09PSAyNykge1xuICAgICAgICAgIHRoaXMuY2FuY2VsKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgZGVzdHJveWVkKCkge1xuICAgIHRoaXMud2luZG93RXZlbnRzLnJlbW92ZSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhpZGUoKSB7XG4gICAgICB0aGlzLiRtb2RhbC5oaWRlKHRoaXMubmFtZSlcbiAgICB9LFxuXG4gICAgcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgdGhpcy5wcm9taXNlLnJlc29sdmUodmFsdWUpXG4gICAgICB0aGlzLmhpZGUoKVxuICAgIH0sXG5cbiAgICByZWplY3QodmFsdWUpIHtcbiAgICAgIHRoaXMucHJvbWlzZS5yZWplY3QodmFsdWUpXG4gICAgICB0aGlzLmhpZGUoKVxuICAgIH0sXG5cbiAgICBzdWJtaXQoKSB7XG4gICAgICB0aGlzLnJlc29sdmUodGhpcy5kaWFsb2dEYXRhKVxuICAgIH0sXG5cbiAgICBjYW5jZWwoKSB7XG4gICAgICB0aGlzLnJlc29sdmUobnVsbClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuY29tcG9uZW50KFxuICB2LWlmPVwiY29udGVudFwiXG4gIDppcz1cIm9wdGlvbnMudGFnIHx8IHRhZ1wiXG4gIDpjbGFzcz1cImNsYXNzZXNcIlxuICA6c3R5bGU9XCJzdHlsZXNcIlxuKSB7eyBvcHRpb25zLnRleHQgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGNvbXBvbmVudChcbiAgICB2LWlmPVwiY29udGVudFwiXG4gICAgOmlzPVwib3B0aW9ucy50YWcgfHwgdGFnXCJcbiAgICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgICA6c3R5bGU9XCJzdHlsZXNcIlxuICApIHt7IG9wdGlvbnMudGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tZWxlbWVudCcsIHtcbiAgcHJvcHM6IHtcbiAgICB0YWc6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc3BhbicgfSxcbiAgICBjb250ZW50OiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0gfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgb3B0aW9ucygpIHtcbiAgICAgIGNvbnN0IHsgY29udGVudCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KGNvbnRlbnQpID8gY29udGVudCA6IHsgdGV4dDogY29udGVudCB9XG4gICAgfSxcblxuICAgIGNsYXNzZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLiRhdHRycy5jbGFzcyxcbiAgICAgICAgLi4uYXNPYmplY3QodGhpcy5vcHRpb25zLmNsYXNzKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdHlsZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLiRhdHRycy5zdHlsZSxcbiAgICAgICAgLi4uYXNPYmplY3QodGhpcy5vcHRpb25zLnN0eWxlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcblxuZnVuY3Rpb24gYXNPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLnJlZHVjZSgob2JqZWN0LCBlbnRyeSkgPT4ge1xuICAgIGlmIChpc1N0cmluZyhlbnRyeSkpIHtcbiAgICAgIG9iamVjdFtlbnRyeV0gPSB0cnVlXG4gICAgfSBlbHNlIGlmIChpc09iamVjdChlbnRyeSkpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ob2JqZWN0LCBlbnRyeSlcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdFxuICB9LCB7fSlcbn1cblxuPC9zY3JpcHQ+XG4iLCJcbmNvbXBvbmVudC5kaXRvLWxhYmVsKFxuICB2LWlmPVwidGV4dCB8fCBjb2xsYXBzaWJsZVwiXG4gIDppcz1cInRhZ1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIlxuKVxuICAuZGl0by1jaGV2cm9uKFxuICAgIHYtaWY9XCJjb2xsYXBzaWJsZVwiXG4gICAgOmNsYXNzPVwieyAnZGl0by1vcGVuZWQnOiAhY29sbGFwc2VkIH1cIlxuICApXG4gIGRpdG8tZWxlbWVudC5kaXRvLWxhYmVsLXByZWZpeChcbiAgICB2LWZvcj1cIihwcmVmaXgsIGluZGV4KSBvZiBwcmVmaXhlc1wiXG4gICAgdGFnPVwic3BhblwiXG4gICAgOmtleT1cImBwcmVmaXgtJHtpbmRleH1gXCJcbiAgICA6Y29udGVudD1cInByZWZpeFwiXG4gIClcbiAgbGFiZWwoOmZvcj1cImRhdGFQYXRoXCIgdi1odG1sPVwidGV4dFwiKVxuICBkaXRvLWVsZW1lbnQuZGl0by1sYWJlbC1zdWZmaXgoXG4gICAgdi1mb3I9XCIoc3VmZml4LCBpbmRleCkgb2Ygc3VmZml4ZXNcIlxuICAgIHRhZz1cInNwYW5cIlxuICAgIDprZXk9XCJgc3VmZml4LSR7aW5kZXh9YFwiXG4gICAgOmNvbnRlbnQ9XCJzdWZmaXhcIlxuICApXG4gIHNsb3QobmFtZT1cImVkaXQtYnV0dG9uc1wiKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgY29tcG9uZW50LmRpdG8tbGFiZWwoXG4gICAgdi1pZj1cInRleHQgfHwgY29sbGFwc2libGVcIlxuICAgIDppcz1cInRhZ1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCJcbiAgKVxuICAgIC5kaXRvLWNoZXZyb24oXG4gICAgICB2LWlmPVwiY29sbGFwc2libGVcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuZWQnOiAhY29sbGFwc2VkIH1cIlxuICAgIClcbiAgICBkaXRvLWVsZW1lbnQuZGl0by1sYWJlbC1wcmVmaXgoXG4gICAgICB2LWZvcj1cIihwcmVmaXgsIGluZGV4KSBvZiBwcmVmaXhlc1wiXG4gICAgICB0YWc9XCJzcGFuXCJcbiAgICAgIDprZXk9XCJgcHJlZml4LSR7aW5kZXh9YFwiXG4gICAgICA6Y29udGVudD1cInByZWZpeFwiXG4gICAgKVxuICAgIGxhYmVsKDpmb3I9XCJkYXRhUGF0aFwiIHYtaHRtbD1cInRleHRcIilcbiAgICBkaXRvLWVsZW1lbnQuZGl0by1sYWJlbC1zdWZmaXgoXG4gICAgICB2LWZvcj1cIihzdWZmaXgsIGluZGV4KSBvZiBzdWZmaXhlc1wiXG4gICAgICB0YWc9XCJzcGFuXCJcbiAgICAgIDprZXk9XCJgc3VmZml4LSR7aW5kZXh9YFwiXG4gICAgICA6Y29udGVudD1cInN1ZmZpeFwiXG4gICAgKVxuICAgIHNsb3QobmFtZT1cImVkaXQtYnV0dG9uc1wiKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWxhYmVsXG4gICAgLS1sYWJlbC1wYWRkaW5nOiAwXG4gICAgLy8gRm9yIGJ1dHRvbnMgYW5kIGNoZXZyb24gdG8gYWxpZ24gcmlnaHQ6XG4gICAgZGlzcGxheTogZmxleFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIC8vIFZlcnRpY2FsbHkgY2VudGVyIGFsbCBpdGVtcyBpbiB0aGUgbGFiZWwsIGUuZy4gY2hldnJvbiwgZWRpdC1idXR0b25zLlxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXJcbiAgICBwYWRkaW5nOiB2YXIoLS1sYWJlbC1wYWRkaW5nKVxuICAgIG1hcmdpbjogMCAwICRmb3JtLXNwYWNpbmctaGFsZiAwXG5cbiAgICBsYWJlbFxuICAgICAgZGlzcGxheTogaW5saW5lXG4gICAgICBjdXJzb3I6IGluaGVyaXRcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkXG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG5cbiAgICBsYWJlbCxcbiAgICAuZGl0by1sYWJlbC1wcmVmaXgsXG4gICAgLmRpdG8tbGFiZWwtc3VmZml4XG4gICAgICAmOm50aC1sYXN0LWNoaWxkKDIpXG4gICAgICAgIC8vIFRvIHN0cmV0Y2ggZWl0aGVyIGxhYmVsIG9yIC5kaXRvLWxhYmVsLXN1ZmZpeCB0byBmdWxsIGF2YWlsYWJsZSB3aWR0aFxuICAgICAgICAvLyBzbyB0aGF0IGJ1dHRvbnMgYWx3YXlzIGFwcGVhciByaWdodC1hbGlnbmVkOlxuICAgICAgICBmbGV4OiAxIDEgYXV0b1xuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgY29udGVudDogJ1xcYTAnIC8vICZuYnBzO1xuXG4gICAgLmRpdG8tbGFiZWwtcHJlZml4LFxuICAgIC5kaXRvLWxhYmVsLXN1ZmZpeFxuICAgICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgICArZWxsaXBzaXNcblxuICAgIC5kaXRvLWJ1dHRvbnNcbiAgICAgIC8vIE1vdmUgdGhlIGxhYmVsIHBhZGRpbmcgaW5zaWRlIC5kaXRvLWJ1dHRvbnMsIHNvIHRoYXQgaXQgY2FwdHVyZXMgYWxsXG4gICAgICAvLyBuZWFyIG1vdXNlIGV2ZW50czpcbiAgICAgIG1hcmdpbjogY2FsYygtMSAqIHZhcigtLWxhYmVsLXBhZGRpbmcpKVxuICAgICAgbWFyZ2luLWxlZnQ6IDBcbiAgICAgIHBhZGRpbmc6IHZhcigtLWxhYmVsLXBhZGRpbmcpXG5cbiAgICAmLmRpdG8td2lkdGgtZmlsbFxuICAgICAgd2lkdGg6IDEwMCVcbiAgICAgIC8vIEluIG9yZGVyIGZvciBlbGxpcHNpcyB0byB3b3JrIG9uIGxhYmVscyB3aXRob3V0IGFmZmVjdGluZyBvdGhlciBsYXlvdXQsXG4gICAgICAvLyB3ZSBuZWVkIHRvIHBvc2l0aW9uIGl0IGFic29sdXRlbHkgaW5zaWRlIGl0cyBjb250YWluZXIuXG4gICAgICBsYWJlbFxuICAgICAgICArZWxsaXBzaXNcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICAgIG1heC13aWR0aDogMTAwJVxuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgLy8gU2luY2UgPGxhYmVsPiB1c2VzIGBwb3NpdGlvbjogYWJzb2x1dGVgLCBzZXQgY29udGVudCB0byBhIHplcm8td2lkdGhcbiAgICAgICAgLy8gc3BhY2Ugb24gaXRzIHBhcmVudCB0byBlbmZvcmNlIHRoZSByaWdodCB0ZXh0IGhlaWdodCBpbiB0aGUgY29udGFpbmVyXG4gICAgICAgIGNvbnRlbnQ6ICdcXDIwMGInIC8vIHplcm8td2lkdGggc3BhY2VcblxuICBhLmRpdG8tbGFiZWxcbiAgICAmOmhvdmVyXG4gICAgICAuZGl0by1jaGV2cm9uXG4gICAgICAgIGNvbG9yOiAkY29sb3ItZGFya2VyXG4gICAgJjpmb2N1czpub3QoOmFjdGl2ZSk6bm90KC5kaXRvLWFjdGl2ZSlcbiAgICAgIC5kaXRvLWNoZXZyb25cbiAgICAgICAgLXdlYmtpdC10ZXh0LXN0cm9rZTogJGJvcmRlci13aWR0aCAkY29sb3ItYWN0aXZlXG5cbiAgLy8gRGlzcGxheSBsYWJlbHMgaW4gY29tcGFjdCBzY2hlbWEgYXMgaW5saW5lLWJsb2NrcywgdG8gYWxsb3cgY29tcGFjdCBsYXlvdXRzXG4gIC8vIHdpdGggYHdpZHRoOiAnYXV0bydgIGVsZW1lbnRzOlxuICAvLyBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byBjb250cm9sIHRoaXMgYmVoYXZpb3IuXG4gIC5kaXRvLXNjaGVtYS1jb21wYWN0XG4gICAgPiAuZGl0by1zY2hlbWEtY29udGVudFxuICAgICAgPiAuZGl0by1wYW5lXG4gICAgICAgID4gLmRpdG8tY29udGFpbmVyXG4gICAgICAgICAgPiAuZGl0by1sYWJlbDpub3QoLmRpdG8tbGFiZWwtY29tcG9uZW50KVxuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWxhYmVsJywge1xuICBwcm9wczoge1xuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBjb2xsYXBzZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0YWcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb2xsYXBzaWJsZSA/ICdhJyA6ICdkaXYnXG4gICAgfSxcblxuICAgIHRleHQoKSB7XG4gICAgICBjb25zdCB7IGxhYmVsIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNPYmplY3QobGFiZWwpID8gbGFiZWw/LnRleHQgOiBsYWJlbFxuICAgIH0sXG5cbiAgICBwcmVmaXhlcygpIHtcbiAgICAgIHJldHVybiBhc0FycmF5KHRoaXMubGFiZWw/LnByZWZpeClcbiAgICB9LFxuXG4gICAgc3VmZml4ZXMoKSB7XG4gICAgICByZXR1cm4gYXNBcnJheSh0aGlzLmxhYmVsPy5zdWZmaXgpXG4gICAgfSxcblxuICAgIGxpc3RlbmVycygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLih0aGlzLmNvbGxhcHNpYmxlICYmIHtcbiAgICAgICAgICBjbGljazogdGhpcy5vbkNsaWNrXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGlzQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPT09IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uQ2xpY2soKSB7XG4gICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gdGhpc1xuICAgICAgdGhpcy4kZW1pdCgnZXhwYW5kJywgdGhpcy5jb2xsYXBzZWQpXG4gICAgfVxuICB9XG59KVxuXG48L3NjcmlwdD5cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7XG4gIGdldEl0ZW1Gb3JtU2NoZW1hLCBnZXRJdGVtSWQsIGdldEl0ZW1VaWQsIGlzTGlzdFNvdXJjZVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtZXRob2RzOiB7XG4gICAgZ2V0SXRlbUZvcm1TY2hlbWEsXG5cbiAgICBnZXRJdGVtVWlkLFxuXG4gICAgZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSwgaW5kZXggPSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1RyYW5zaWVudCAmJiBpbmRleCAhPT0gbnVsbFxuICAgICAgICA/IFN0cmluZyhpbmRleClcbiAgICAgICAgOiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKVxuICAgIH0sXG5cbiAgICBnZXRJdGVtRGF0YVBhdGgoc291cmNlU2NoZW1hLCBpbmRleCkge1xuICAgICAgbGV0IHsgZGF0YVBhdGggfSA9IHRoaXNcbiAgICAgIGlmIChzb3VyY2VTY2hlbWEgIT09IHRoaXMuc2NoZW1hKSB7XG4gICAgICAgIGRhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHNvdXJjZVNjaGVtYS5uYW1lKVxuICAgICAgfVxuICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgZGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgaW5kZXgpXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgZmluZEl0ZW1JZEluZGV4KHNvdXJjZVNjaGVtYSwgZGF0YSwgaXRlbUlkKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuaXNUcmFuc2llbnRcbiAgICAgICAgLy8gRm9yIHRyYW5zaWVudCBkYXRhLCB0aGUgaW5kZXggaXMgdXNlZCBhcyB0aGUgaWRcbiAgICAgICAgPyBpdGVtSWRcbiAgICAgICAgOiBkYXRhPy5maW5kSW5kZXgoXG4gICAgICAgICAgKGl0ZW0sIGluZGV4KSA9PlxuICAgICAgICAgICAgdGhpcy5nZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtLCBpbmRleCkgPT09IGl0ZW1JZFxuICAgICAgICApXG4gICAgICByZXR1cm4gaW5kZXggIT09IC0xID8gaW5kZXggOiBudWxsXG4gICAgfSxcblxuICAgIGdldEl0ZW1MYWJlbChzb3VyY2VTY2hlbWEsIGl0ZW0sIHtcbiAgICAgIGluZGV4ID0gbnVsbCxcbiAgICAgIGV4dGVuZGVkID0gZmFsc2UsXG4gICAgICBhc09iamVjdCA9IGZhbHNlXG4gICAgfSA9IHt9KSB7XG4gICAgICBjb25zdCB7IGl0ZW1MYWJlbCB9ID0gc291cmNlU2NoZW1hXG4gICAgICBpZiAoIWl0ZW0gfHwgIWV4dGVuZGVkICYmIGl0ZW1MYWJlbCA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cblxuICAgICAgbGV0IGRhdGFQYXRoXG4gICAgICBjb25zdCBnZXREYXRhUGF0aCA9ICgpID0+XG4gICAgICAgIChkYXRhUGF0aCB8fD0gdGhpcy5nZXRJdGVtRGF0YVBhdGgoc291cmNlU2NoZW1hLCBpbmRleCkpXG5cbiAgICAgIGxldCBmb3JtTGFiZWxcbiAgICAgIGNvbnN0IGdldEZvcm1MYWJlbCA9ICgpID0+XG4gICAgICAgIChmb3JtTGFiZWwgfHw9IHRoaXMuZ2V0TGFiZWwoXG4gICAgICAgICAgZ2V0SXRlbUZvcm1TY2hlbWEoc291cmNlU2NoZW1hLCBpdGVtLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICkpXG5cbiAgICAgIGxldCB0ZXh0XG4gICAgICBsZXQgcHJlZml4XG4gICAgICBsZXQgc3VmZml4XG4gICAgICBpZiAoaXNGdW5jdGlvbihpdGVtTGFiZWwpKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gaXRlbUxhYmVsLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgICAgbmVzdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgICAgICB2YWx1ZTogaXRlbSxcbiAgICAgICAgICAgIGluZGV4LFxuXG4gICAgICAgICAgICBnZXQgZGF0YVBhdGgoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXREYXRhUGF0aCgpXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBnZXQgZm9ybUxhYmVsKCkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0Rm9ybUxhYmVsKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIGlmIChpc09iamVjdChsYWJlbCkpIHtcbiAgICAgICAgICAoeyB0ZXh0LCBwcmVmaXgsIHN1ZmZpeCB9ID0gbGFiZWwpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGV4dCA9IGxhYmVsXG4gICAgICAgIH1cbiAgICAgICAgLy8gSXQncyB1cCB0byBgaXRlbUxhYmVsKClgIGVudGlyZWx5IHRvIHByb2R1Y2UgdGhlIGxhYmVsOlxuICAgICAgICBleHRlbmRlZCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBMb29rIHVwIHRoZSBuYW1lIG9uIHRoZSBpdGVtLCBieSB0aGVzZSBydWxlczpcbiAgICAgICAgLy8gMS4gSWYgYGl0ZW1MYWJlbGAgaXMgYSBzdHJpbmcsIHVzZSBpdCBhcyB0aGUgcHJvcGVydHkga2V5XG4gICAgICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgdGhlcmUgYXJlIGNvbHVtbnMsIHVzZSB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0XG4gICAgICAgIC8vIDMuIE90aGVyd2lzZSwgc2VlIGlmIHRoZSBpdGVtIGhhcyBhIHByb3BlcnR5IG5hbWVkICduYW1lJ1xuICAgICAgICBjb25zdCB7IGNvbHVtbnMgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgICBjb25zdCBrZXkgPSAoXG4gICAgICAgICAgaXNTdHJpbmcoaXRlbUxhYmVsKSAmJiBpdGVtTGFiZWwgfHxcbiAgICAgICAgICBpc0xpc3RTb3VyY2Uoc291cmNlU2NoZW1hKSAmJiBjb2x1bW5zICYmIE9iamVjdC5rZXlzKGNvbHVtbnMpWzBdIHx8XG4gICAgICAgICAgJ25hbWUnXG4gICAgICAgIClcbiAgICAgICAgdGV4dCA9IGl0ZW1ba2V5XVxuICAgICAgfVxuICAgICAgY29uc3QgaGFkTGFiZWwgPSAhIXRleHRcbiAgICAgIHRleHQgfHw9ICcnXG4gICAgICAvLyBJZiBubyBsYWJlbCB3YXMgZm91bmQgc28gZmFyLCB0cnkgdG8gcHJvZHVjZSBvbmUgZnJvbSB0aGVpbmRleC5cbiAgICAgIGlmICghdGV4dCkge1xuICAgICAgICAvLyBBbHdheXMgdXNlIGV4dGVuZGVkIHN0eWxlIHdoZW4gYXV0by1nZW5lcmF0aW5nIGxhYmVscyBmcm9tIGluZGV4L2lkOlxuICAgICAgICBleHRlbmRlZCA9IHRydWVcbiAgICAgICAgaWYgKGlzTGlzdFNvdXJjZShzb3VyY2VTY2hlbWEpICYmIGluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgICAgdGV4dCA9IGAke2luZGV4ICsgMX1gXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChleHRlbmRlZCkge1xuICAgICAgICBjb25zdCBmb3JtTGFiZWwgPSBnZXRGb3JtTGFiZWwoKVxuICAgICAgICBpZiAoZm9ybUxhYmVsKSB7XG4gICAgICAgICAgLy8gSWYgYSBsYWJlbCB3YXMgcHJvdmlkZWQsIHB1dCBpbiBxdW90ZXMgd2hlbiBwcmVmaXhlZCB3aXRoIHRoZVxuICAgICAgICAgIC8vIGZvcm0gbGFiZWwgZm9yIHRoZSBleHRlbmRlZCBzdHlsZTpcbiAgICAgICAgICB0ZXh0ID0gYCR7Zm9ybUxhYmVsfSAke2hhZExhYmVsID8gYCcke3RleHR9J2AgOiB0ZXh0fWBcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFzT2JqZWN0ID8geyB0ZXh0LCBwcmVmaXgsIHN1ZmZpeCB9IDogdGV4dFxuICAgIH1cbiAgfVxufVxuIiwiXG4uZGl0by1zY2hlbWFcbiAgLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAuZGl0by1zY2hlbWEtaGVhZGVyKFxuICAgICAgdi1pZj1cImhhc0xhYmVsIHx8IGhhc1RhYnMgfHwgY2xpcGJvYXJkXCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLW1lbnUtaGVhZGVyJzogbWVudUhlYWRlciB9XCJcbiAgICApXG4gICAgICBkaXRvLWxhYmVsKFxuICAgICAgICB2LWlmPVwiaGFzTGFiZWxcIlxuICAgICAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICA6Y29sbGFwc2VkPVwiIW9wZW5lZFwiXG4gICAgICAgIEBleHBhbmQ9XCJvbkV4cGFuZFwiXG4gICAgICApXG4gICAgICAgIC8vIFBhc3MgZWRpdC1idXR0b25zIHRocm91Z2ggdG8gZGl0by1sYWJlbCdzIG93biBlZGl0LWJ1dHRvbnMgc2xvdDpcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgI2VkaXQtYnV0dG9uc1xuICAgICAgICAgIHYtaWY9XCJpbmxpbmVkXCJcbiAgICAgICAgKVxuICAgICAgICAgIHNsb3QobmFtZT1cImVkaXQtYnV0dG9uc1wiKVxuICAgICAgZGl0by10YWJzKFxuICAgICAgICB2LWlmPVwidGFic1wiXG4gICAgICAgIDp0YWJzPVwidGFic1wiXG4gICAgICAgIDpzZWxlY3RlZFRhYj1cInNlbGVjdGVkVGFiXCJcbiAgICAgIClcbiAgICAgIGRpdG8tY2xpcGJvYXJkKFxuICAgICAgICA6Y2xpcGJvYXJkPVwiY2xpcGJvYXJkXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgKVxuICAgIGRpdG8tcGFuZS5kaXRvLXBhbmUtdGFiKFxuICAgICAgdi1pZj1cImhhc1RhYnNcIlxuICAgICAgdi1mb3I9XCIoc2NoZW1hLCB0YWIpIGluIHRhYnNcIlxuICAgICAgcmVmPVwidGFic1wiXG4gICAgICA6a2V5PVwidGFiXCJcbiAgICAgIDp2aXNpYmxlPVwic2VsZWN0ZWRUYWIgPT09IHRhYlwiXG4gICAgICA6dGFiPVwidGFiXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6c2luZ2xlPVwiIWlubGluZWQgJiYgIWhhc01haW5QYW5lXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICApXG4gICAgdHJhbnNpdGlvbi1oZWlnaHQoXG4gICAgICA6ZW5hYmxlZD1cImlubGluZWRcIlxuICAgIClcbiAgICAgIGRpdG8tcGFuZS5kaXRvLXBhbmUtbWFpbihcbiAgICAgICAgdi1pZj1cImhhc01haW5QYW5lICYmIG9wZW5lZFwiXG4gICAgICAgIHJlZj1cImNvbXBvbmVudHNcIlxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzVGFic1wiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgKVxuICAgIHNsb3QoXG4gICAgICBuYW1lPVwiYnV0dG9uc1wiXG4gICAgICB2LWlmPVwiIWlubGluZWQgJiYgaXNQb3B1bGF0ZWRcIlxuICAgIClcbiAgdGVtcGxhdGUodi1pZj1cImlubGluZWRcIilcbiAgICBzbG90KFxuICAgICAgdi1pZj1cIiFoYXNMYWJlbFwiXG4gICAgICBuYW1lPVwiZWRpdC1idXR0b25zXCJcbiAgICApXG4gIHRlbXBsYXRlKHYtZWxzZS1pZj1cImlzUG9wdWxhdGVkXCIpXG4gICAgZGl0by1wYW5lbHMoXG4gICAgICA6cGFuZWxzPVwicGFuZWxTY2hlbWFzXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXNjaGVtYVxuICAgIC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICAuZGl0by1zY2hlbWEtaGVhZGVyKFxuICAgICAgICB2LWlmPVwiaGFzTGFiZWwgfHwgaGFzVGFicyB8fCBjbGlwYm9hcmRcIlxuICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNjaGVtYS1tZW51LWhlYWRlcic6IG1lbnVIZWFkZXIgfVwiXG4gICAgICApXG4gICAgICAgIGRpdG8tbGFiZWwoXG4gICAgICAgICAgdi1pZj1cImhhc0xhYmVsXCJcbiAgICAgICAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgICAgICA6Y29sbGFwc2VkPVwiIW9wZW5lZFwiXG4gICAgICAgICAgQGV4cGFuZD1cIm9uRXhwYW5kXCJcbiAgICAgICAgKVxuICAgICAgICAgIC8vIFBhc3MgZWRpdC1idXR0b25zIHRocm91Z2ggdG8gZGl0by1sYWJlbCdzIG93biBlZGl0LWJ1dHRvbnMgc2xvdDpcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgICNlZGl0LWJ1dHRvbnNcbiAgICAgICAgICAgIHYtaWY9XCJpbmxpbmVkXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBzbG90KG5hbWU9XCJlZGl0LWJ1dHRvbnNcIilcbiAgICAgICAgZGl0by10YWJzKFxuICAgICAgICAgIHYtaWY9XCJ0YWJzXCJcbiAgICAgICAgICA6dGFicz1cInRhYnNcIlxuICAgICAgICAgIDpzZWxlY3RlZFRhYj1cInNlbGVjdGVkVGFiXCJcbiAgICAgICAgKVxuICAgICAgICBkaXRvLWNsaXBib2FyZChcbiAgICAgICAgICA6Y2xpcGJvYXJkPVwiY2xpcGJvYXJkXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgKVxuICAgICAgZGl0by1wYW5lLmRpdG8tcGFuZS10YWIoXG4gICAgICAgIHYtaWY9XCJoYXNUYWJzXCJcbiAgICAgICAgdi1mb3I9XCIoc2NoZW1hLCB0YWIpIGluIHRhYnNcIlxuICAgICAgICByZWY9XCJ0YWJzXCJcbiAgICAgICAgOmtleT1cInRhYlwiXG4gICAgICAgIDp2aXNpYmxlPVwic2VsZWN0ZWRUYWIgPT09IHRhYlwiXG4gICAgICAgIDp0YWI9XCJ0YWJcIlxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzTWFpblBhbmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICAgIClcbiAgICAgIHRyYW5zaXRpb24taGVpZ2h0KFxuICAgICAgICA6ZW5hYmxlZD1cImlubGluZWRcIlxuICAgICAgKVxuICAgICAgICBkaXRvLXBhbmUuZGl0by1wYW5lLW1haW4oXG4gICAgICAgICAgdi1pZj1cImhhc01haW5QYW5lICYmIG9wZW5lZFwiXG4gICAgICAgICAgcmVmPVwiY29tcG9uZW50c1wiXG4gICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNUYWJzXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgICApXG4gICAgICBzbG90KFxuICAgICAgICBuYW1lPVwiYnV0dG9uc1wiXG4gICAgICAgIHYtaWY9XCIhaW5saW5lZCAmJiBpc1BvcHVsYXRlZFwiXG4gICAgICApXG4gICAgdGVtcGxhdGUodi1pZj1cImlubGluZWRcIilcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCIhaGFzTGFiZWxcIlxuICAgICAgICBuYW1lPVwiZWRpdC1idXR0b25zXCJcbiAgICAgIClcbiAgICB0ZW1wbGF0ZSh2LWVsc2UtaWY9XCJpc1BvcHVsYXRlZFwiKVxuICAgICAgZGl0by1wYW5lbHMoXG4gICAgICAgIDpwYW5lbHM9XCJwYW5lbFNjaGVtYXNcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1zY2hlbWFcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgLy8gVG8gZGlzcGxheSBzY2hlbWEgbmV4dCB0byBwYW5lbHM6XG4gICAgZGlzcGxheTogZmxleFxuICAgIG1pbi1oZWlnaHQ6IDEwMCVcbiAgICA+IC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICBmbGV4OiAxIDEgMTAwJVxuICAgICAgLy8gU28gdGhhdCBzY2hlbWEgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IHRvIHRoZSBib3R0b206XG4gICAgICBkaXNwbGF5OiBncmlkXG4gICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50XG4gICAgICA+ICo6b25seS1jaGlsZFxuICAgICAgICBncmlkLXJvdy1lbmQ6IG5vbmVcbiAgICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGhcbiAgICAgIHBhZGRpbmc6ICRjb250ZW50LXBhZGRpbmdcbiAgICA+IC5kaXRvLWJ1dHRvbnMsXG4gICAgPiAuZGl0by1wYW5lbHNcbiAgICAgIGZsZXg6IDEgMSAwJVxuICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmdcbiAgICA+IC5kaXRvLXBhbmVsc1xuICAgICAgcGFkZGluZzogJGNvbnRlbnQtcGFkZGluZyAkY29udGVudC1wYWRkaW5nICRjb250ZW50LXBhZGRpbmcgMFxuICAgIC8vIERpc3BsYXkgYSBydWxlciBiZXR3ZWVuIHRhYmJlZCBjb21wb25lbnRzIGFuZCB0b3dhcmRzIHRoZSAuZGl0by1idXR0b25zXG4gICAgLmRpdG8tcGFuZS10YWIgKyAuZGl0by1wYW5lLW1haW5cbiAgICAgICY6OmJlZm9yZVxuICAgICAgICAvLyBVc2UgYSBwc2V1ZG8gZWxlbWVudCB0byBkaXNwbGF5IGEgcnVsZXIgd2l0aCBwcm9wZXIgbWFyZ2luc1xuICAgICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgICBjb250ZW50OiAnJ1xuICAgICAgICB3aWR0aDogMTAwJVxuICAgICAgICBib3JkZXItYm90dG9tOiAkYm9yZGVyLXN0eWxlXG4gICAgICAgIC8vIEFkZCByZW1vdmVkICRmb3JtLXNwYWNpbmcgYWdhaW4gdG8gdGhlIHJ1bGVyXG4gICAgICAgIG1hcmdpbjogJGNvbnRlbnQtcGFkZGluZyAkZm9ybS1zcGFjaW5nLWhhbGYgJGZvcm0tc3BhY2luZy1oYWxmXG4gIC5kaXRvLXNjaGVtYS1oZWFkZXJcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuXG4gICAgLmRpdG8tdGFicyxcbiAgICAuZGl0by1jbGlwYm9hcmRcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kXG4gICAgLmRpdG8tY2xpcGJvYXJkXG4gICAgICAmOm9ubHktY2hpbGRcbiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG9cbiAgICAgIC5kaXRvLWJ1dHRvblxuICAgICAgICBtYXJnaW46IDAgMCAkdGFiLW1hcmdpbiAkdGFiLW1hcmdpblxuICAgICYuZGl0by1zY2hlbWEtbWVudS1oZWFkZXJcbiAgICAgIC8vIEJyaW5nIHRoZSB0YWJzIHVwIHRvIHRoZSBtZW51LlxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICBoZWlnaHQ6ICRtZW51LWhlaWdodFxuICAgICAgcGFkZGluZzogMCAkbWVudS1wYWRkaW5nLWhvclxuICAgICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aFxuICAgICAgdG9wOiAwXG4gICAgICBsZWZ0OiAwXG4gICAgICByaWdodDogMFxuICAgICAgei1pbmRleDogJG1lbnUtei1pbmRleFxuICAgICAgLy8gVHVybiBvZmYgcG9pbnRlciBldmVudHMgc28gdGhhdCBEaXRvVHJhaWwga2VlcHMgcmVjZWl2aW5nIGV2ZW50cy4uLlxuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmVcbiAgICAgIC8vIC4uLmJ1dCBhbGxvdyBpbnRlcmFjdGlvbiB3aXRoIHRoZSB0YWJzIGFuZCBidXR0b25zIChlLmcuIGNsaXBib2FyZClcbiAgICAgIC8vIGxheWVyZWQgb24gdG9wIG9mIERpdG9UcmFpbC5cbiAgICAgIC5kaXRvLXRhYnMsXG4gICAgICAuZGl0by1idXR0b25zXG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodFxuICAgICAgICBmb250LXNpemU6ICRtZW51LWZvbnQtc2l6ZVxuICAgIGJ1dHRvbi5kaXRvLWxhYmVsXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgLy8gQ2F0Y2ggYWxsIGNsaWNrcywgZXZlbiB3aGVuIGl0IHdvdWxkIGJlIHBhcnRpYWxseSBjb3ZlcmVkIGJ5IHNjaGVtYS5cbiAgICAgIHotaW5kZXg6IDFcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQge1xuICBpc09iamVjdCwgaXNBcnJheSwgaXNGdW5jdGlvbiwgaXNSZWdFeHAsXG4gIHBhcnNlRGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoLCBsYWJlbGl6ZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgVHJhbnNpdGlvbkhlaWdodCB9IGZyb20gJ0BkaXRvanMvdWknXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuLi9taXhpbnMvSXRlbU1peGluLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGgsIGdldFBhcmVudEl0ZW0gfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgZ2V0TmFtZWRTY2hlbWFzLCBnZXRQYW5lbFNjaGVtYXMsIHNldERlZmF1bHRzLCBwcm9jZXNzRGF0YVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRTdG9yZUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1zY2hlbWEnLCB7XG4gIGNvbXBvbmVudHM6IHsgVHJhbnNpdGlvbkhlaWdodCB9LFxuICBtaXhpbnM6IFtJdGVtTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzY2hlbWFDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgaW5qZWN0OiBbXG4gICAgJyRzY2hlbWFQYXJlbnRDb21wb25lbnQnXG4gIF0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGlubGluZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGhhc093bkRhdGE6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBtZW51SGVhZGVyOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gdGhpcy5zY2hlbWFcbiAgICByZXR1cm4ge1xuICAgICAgLy8gQWxsb3cgc2NoZW1hIHRvIHByb3ZpZGUgbW9yZSBkYXRhIHRocm91Z2ggYHNjaGVtYS5kYXRhYCwgdnVlLXN0eWxlOlxuICAgICAgLi4uKFxuICAgICAgICBkYXRhICYmIGlzRnVuY3Rpb24oZGF0YSlcbiAgICAgICAgICA/IGRhdGEuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICAgOiBkYXRhXG4gICAgICApLFxuICAgICAgY29tcG9uZW50c1JlZ2lzdHJ5OiB7fSxcbiAgICAgIHBhbmVzUmVnaXN0cnk6IHt9LFxuICAgICAgcGFuZWxzUmVnaXN0cnk6IHt9XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgLy8gT3ZlcnJpZGUgRGl0b01peGluJ3Mgc2NoZW1hQ29tcG9uZW50KCkgd2hpY2ggdXNlcyB0aGUgaW5qZWN0ZWQgdmFsdWUuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBwYXJlbnRTY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICAvLyBEb24ndCByZXR1cm4gdGhlIGFjdHVhbCBwYXJlbnQgc2NoZW1hIGlzIHRoaXMgc2NoZW1hIGhhbmRsZXMgaXRzIG93blxuICAgICAgLy8gZGF0YS4gVGhpcyBwcmV2ZW50cyBkZWxlZ2F0aW5nIGV2ZW50cyB0byB0aGUgcGFyZW50LCBhbmQgcmVnaXN0ZXJpbmdcbiAgICAgIC8vIGNvbXBvbmVudHMgd2l0aCB0aGUgcGFyZW50IHRoYXQgd291bGQgY2F1c2UgaXQgdG8gc2V0IGlzRGlydHkgZmxhZ3MuXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gbnVsbCA6IHRoaXMuJHBhcmVudC5zY2hlbWFDb21wb25lbnRcbiAgICB9LFxuXG4gICAgcGFuZWxTY2hlbWFzKCkge1xuICAgICAgY29uc3QgcGFuZWxzID0gZ2V0UGFuZWxTY2hlbWFzKHRoaXMuc2NoZW1hLnBhbmVscywgJycpXG4gICAgICBmb3IgKGNvbnN0IHBhbmUgb2YgdGhpcy5wYW5lcykge1xuICAgICAgICBwYW5lbHMucHVzaCguLi5wYW5lLnBhbmVsU2NoZW1hcylcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYW5lbHNcbiAgICB9LFxuXG4gICAgdGFicygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEudGFicylcbiAgICB9LFxuXG4gICAgc2VsZWN0ZWRUYWIoKSB7XG4gICAgICBjb25zdCBjdXJyZW50VGFiID0gdGhpcy4kcm91dGUuaGFzaD8uc2xpY2UoMSkgfHwgbnVsbFxuICAgICAgY29uc3QgdGFiID0gY3VycmVudFRhYiAmJiB0aGlzLnNob3VsZFJlbmRlcih0aGlzLnRhYnNbY3VycmVudFRhYl0pXG4gICAgICAgID8gY3VycmVudFRhYlxuICAgICAgICA6IHRoaXMuZGVmYXVsdFRhYj8ubmFtZSB8fCBudWxsXG4gICAgICBpZiAodGFiICE9PSBjdXJyZW50VGFiKSB7XG4gICAgICAgIC8vIEFueSB0YWIgY2hhbmdlIG5lZWRzIHRvIGJlIHJlZmxlY3RlZCBpbiB0aGUgcm91dGVyIGFsc28uXG4gICAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKHsgaGFzaDogdGFiIH0pXG4gICAgICB9XG4gICAgICByZXR1cm4gdGFiXG4gICAgfSxcblxuICAgIGRlZmF1bHRUYWIoKSB7XG4gICAgICBpZiAodGhpcy50YWJzKSB7XG4gICAgICAgIGxldCBmaXJzdCA9IG51bGxcbiAgICAgICAgZm9yIChjb25zdCB0YWIgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnRhYnMpKSB7XG4gICAgICAgICAgY29uc3QgeyBkZWZhdWx0VGFiIH0gPSB0YWJcbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbihkZWZhdWx0VGFiKVxuICAgICAgICAgICAgPyBkZWZhdWx0VGFiLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuICAgICAgICAgICAgOiBkZWZhdWx0VGFiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdGFiXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgICAgIGZpcnN0ID0gdGFiXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaXJzdFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWE/LmNsaXBib2FyZFxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWREYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0RhdGEoeyB0YXJnZXQ6ICdzZXJ2ZXInLCBzY2hlbWFPbmx5OiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGNsaXBib2FyZERhdGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAkc2NoZW1hOiB0aGlzLnNjaGVtYS5uYW1lLFxuICAgICAgICAuLi50aGlzLnByb2Nlc3NEYXRhKHsgdGFyZ2V0OiAnY2xpcGJvYXJkJywgc2NoZW1hT25seTogdHJ1ZSB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIHNpbWlsYXIgdG8gYERpdG9Db250ZXh0YFxuICAgIC8vIHByb3BlcnRpZXMsIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGVzZSBvbiBgdGhpc2AgYXMgd2VsbDpcbiAgICAvLyBOT1RFOiBXaGlsZSBpbnRlcm5hbGx5LCB3ZSBzcGVhayBvZiBgZGF0YWAsIGluIHRoZSBBUEkgc3VyZmFjZSB0aGVcbiAgICAvLyB0ZXJtIGBpdGVtYCBpcyB1c2VkIGZvciB0aGUgZGF0YSB0aGF0IHJlbGF0ZXMgdG8gZWRpdGluZyBvYmplY3RzLlxuICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgYXM6XG4gICAgLy8gcmV0dXJuIGdldEl0ZW0odGhpcy5yb290RGF0YSwgdGhpcy5kYXRhUGF0aCwgZmFsc2UpXG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgcm9vdEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290RGF0YVxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc2VkRGF0YVxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xpcGJvYXJkRGF0YVxuICAgIH0sXG5cbiAgICBwYXJlbnRJdGVtKCkge1xuICAgICAgcmV0dXJuIGdldFBhcmVudEl0ZW0odGhpcy5yb290RGF0YSwgdGhpcy5kYXRhUGF0aCwgZmFsc2UpXG4gICAgfSxcblxuICAgIGZvcm1MYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKFxuICAgICAgICB0aGlzLmdldEl0ZW1Gb3JtU2NoZW1hKHRoaXMuc291cmNlU2NoZW1hLCB0aGlzLmRhdGEsIHRoaXMuY29udGV4dClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNEaXJ0eSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvbWVDb21wb25lbnQoaXQgPT4gaXQuaXNEaXJ0eSlcbiAgICB9LFxuXG4gICAgaXNUb3VjaGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc29tZUNvbXBvbmVudChpdCA9PiBpdC5pc1RvdWNoZWQpXG4gICAgfSxcblxuICAgIGlzVmFsaWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ldmVyeUNvbXBvbmVudChpdCA9PiBpdC5pc1ZhbGlkKVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkYXRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmV2ZXJ5Q29tcG9uZW50KGl0ID0+IGl0LmlzVmFsaWRhdGVkKVxuICAgIH0sXG5cbiAgICBoYXNEYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5sYWJlbCB8fCB0aGlzLmNvbGxhcHNpYmxlXG4gICAgfSxcblxuICAgIGhhc1RhYnMoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaW5saW5lZCAmJiAhIXRoaXMudGFic1xuICAgIH0sXG5cbiAgICBoYXNNYWluUGFuZSgpIHtcbiAgICAgIGNvbnN0IHsgY29tcG9uZW50cyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiAhIWNvbXBvbmVudHMgJiYgT2JqZWN0LmtleXMoY29tcG9uZW50cykubGVuZ3RoID4gMFxuICAgIH0sXG5cbiAgICBvcGVuZWQ6IGdldFN0b3JlQWNjZXNzb3IoJ29wZW5lZCcsIHtcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5jb2xsYXBzZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudHMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmNvbXBvbmVudHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnBhbmVzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVscygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMucGFuZWxzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIGNvbXBvbmVudHNCeURhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLmNvbXBvbmVudHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZXNCeURhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVsc0J5RGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGlzdEVudHJpZXNCeURhdGFQYXRoKHRoaXMucGFuZWxzUmVnaXN0cnkpXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgICB0aGlzLnNldHVwU2NoZW1hRmllbGRzKClcbiAgICAvLyBEZWxlZ2F0ZSBjaGFuZ2UgZXZlbnRzIHRocm91Z2ggdG8gcGFyZW50IHNjaGVtYTpcbiAgICB0aGlzLmRlbGVnYXRlKCdjaGFuZ2UnLCB0aGlzLnBhcmVudFNjaGVtYUNvbXBvbmVudClcbiAgICB0aGlzLmVtaXRFdmVudCgnaW5pdGlhbGl6ZScpIC8vIE5vdCBgJ2NyZWF0ZSdgLCBzaW5jZSB0aGF0J3MgZm9yIGRhdGEuXG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLmVtaXRFdmVudCgnZGVzdHJveScpXG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeURhdGFQYXRoKFxuICAgICAgICB0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2hcbiAgICAgIClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50QnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRzQnlOYW1lKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeU5hbWUodGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRCeU5hbWUobmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50cyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzKHRoaXMuY29tcG9uZW50c0J5RGF0YVBhdGgsIGRhdGFQYXRoT3JOYW1lLCBtYXRjaClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50KGRhdGFQYXRoT3JOYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50cyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVsc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaClcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFuZWxzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxzKGRhdGFQYXRoT3JOYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXModGhpcy5wYW5lbHNCeURhdGFQYXRoLCBkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpXG4gICAgfSxcblxuICAgIGdldFBhbmVsKGRhdGFQYXRoT3JOYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFuZWxzKGRhdGFQYXRoT3JOYW1lLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBzb21lQ29tcG9uZW50KGNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1BvcHVsYXRlZCAmJiB0aGlzLmNvbXBvbmVudHMuc29tZShjYWxsYmFjaylcbiAgICB9LFxuXG4gICAgZXZlcnlDb21wb25lbnQoY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLmlzUG9wdWxhdGVkICYmIHRoaXMuY29tcG9uZW50cy5ldmVyeShjYWxsYmFjaylcbiAgICB9LFxuXG4gICAgb25FeHBhbmQoZXhwYW5kKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnZXhwYW5kJywge1xuICAgICAgICAvLyBUT0RPOiBBY3R1YWxseSBleHBvc2UgdGhpcyBvbiBEaXRvQ29udGV4dD9cbiAgICAgICAgY29udGV4dDogeyBleHBhbmQgfVxuICAgICAgfSlcbiAgICAgIC8vIFByZXZlbnQgY2xvc2luZyB0aGUgc2NoZW1hIHdpdGggaW52YWxpZCBkYXRhLCBzaW5jZSB0aGUgaW4tY29tcG9uZW50XG4gICAgICAvLyB2YWxpZGF0aW9uIHdpbGwgbm90IGJlIGV4ZWN1dGVkIG9uY2UgaXQncyBjbG9zZWQuXG5cbiAgICAgIC8vIFRPRE86IE1vdmUgdmFsaWRhdGlvbiBvdXQgb2YgY29tcG9uZW50cywgdG8gc2NoZW1hLCBqdXN0IGxpa2VcbiAgICAgIC8vIHByb2Nlc3NpbmcsIGFuZCB1c2UgYHNob3dWYWxpZGF0aW9uRXJyb3JzKClgIGZvciB0aGUgcmVzdWx0aW5nIGVycm9ycyxcbiAgICAgIC8vIHRoZW4gcmVtb3ZlIHRoaXMgcmVxdWlyZW1lbnQsIHNpbmNlIHdlIGNhbiB2YWxpZGF0ZSBjbG9zZWQgZm9ybXMgYW5kXG4gICAgICAvLyBzY2hlbWFzIHRoZW4uXG4gICAgICBpZiAoIXRoaXMub3BlbmVkIHx8IGV4cGFuZCB8fCB0aGlzLnZhbGlkYXRlQWxsKCkpIHtcbiAgICAgICAgdGhpcy5vcGVuZWQgPSBleHBhbmRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnY2hhbmdlJylcbiAgICB9LFxuXG4gICAgcmVzZXRWYWxpZGF0aW9uKCkge1xuICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICAgIGNvbXBvbmVudC5yZXNldFZhbGlkYXRpb24oKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgICBjb21wb25lbnQuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMucGFyZW50U2NoZW1hQ29tcG9uZW50Py5mb2N1cygpXG4gICAgICB0aGlzLm9wZW5lZCA9IHRydWVcbiAgICB9LFxuXG4gICAgdmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIGNvbnN0IHsgY29tcG9uZW50c0J5RGF0YVBhdGggfSA9IHRoaXNcbiAgICAgIGxldCBkYXRhUGF0aHNcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBjb25zdCBjaGVjayA9IGlzRnVuY3Rpb24obWF0Y2gpXG4gICAgICAgICAgPyBtYXRjaFxuICAgICAgICAgIDogaXNSZWdFeHAobWF0Y2gpXG4gICAgICAgICAgICA/IGZpZWxkID0+IG1hdGNoLnRlc3QoZmllbGQpXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgZGF0YVBhdGhzID0gY2hlY2tcbiAgICAgICAgICA/IE9iamVjdC5rZXlzKGNvbXBvbmVudHNCeURhdGFQYXRoKS5maWx0ZXIoY2hlY2spXG4gICAgICAgICAgOiBpc0FycmF5KG1hdGNoKVxuICAgICAgICAgICAgPyBtYXRjaFxuICAgICAgICAgICAgOiBbbWF0Y2hdXG4gICAgICB9XG4gICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlXG4gICAgICBsZXQgZmlyc3QgPSB0cnVlXG4gICAgICBkYXRhUGF0aHMgfHw9IE9iamVjdC5rZXlzKGNvbXBvbmVudHNCeURhdGFQYXRoKVxuICAgICAgZm9yIChjb25zdCBkYXRhUGF0aCBvZiBkYXRhUGF0aHMpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBpZiAoIWNvbXBvbmVudC52YWxpZGF0ZShub3RpZnkpKSB7XG4gICAgICAgICAgICAvLyBGb2N1cyBmaXJzdCBlcnJvciBmaWVsZFxuICAgICAgICAgICAgaWYgKG5vdGlmeSAmJiBmaXJzdCkge1xuICAgICAgICAgICAgICBjb21wb25lbnQuZm9jdXMoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobm90aWZ5ICYmICFpc1ZhbGlkKSB7XG4gICAgICAgIHRoaXMubm90aWZ5RXJyb3JzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc1ZhbGlkXG4gICAgfSxcblxuICAgIHZlcmlmeUFsbChtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVBbGwobWF0Y2gsIGZhbHNlKVxuICAgIH0sXG5cbiAgICBhc3luYyBzaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKSB7XG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIGxldCBmaXJzdCA9IHRydWVcbiAgICAgIGNvbnN0IHVubWF0Y2hlZCA9IFtdXG4gICAgICBmb3IgKGNvbnN0IFtkYXRhUGF0aCwgZXJyc10gb2YgT2JqZWN0LmVudHJpZXMoZXJyb3JzKSkge1xuICAgICAgICAvLyBJZiB0aGUgc2NoZW1hIGlzIGEgZGF0YS1yb290LCBwcmVmaXggaXRzIG93biBkYXRhUGF0aCB0byBhbGwgZXJyb3JzLFxuICAgICAgICAvLyBzaW5jZSB0aGUgZGF0YSB0aGF0IGl0IHNlbmRzIGFuZCB2YWxpZGF0ZXMgd2lsbCBiZSB1bnByZWZpeGVkLlxuICAgICAgICBjb25zdCBmdWxsRGF0YVBhdGggPSB0aGlzLmhhc093bkRhdGFcbiAgICAgICAgICA/IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGRhdGFQYXRoKVxuICAgICAgICAgIDogZGF0YVBhdGhcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcywgdGhpcy5kYXRhUGF0aCwgdGhpcy5oYXNPd25EYXRhLCBmdWxsRGF0YVBhdGgpXG4gICAgICAgIC8vIENvbnZlcnQgZnJvbSBKYXZhU2NyaXB0IHByb3BlcnR5IGFjY2VzcyBub3RhdGlvbiwgdG8gb3VyIG93biBmb3JtXG4gICAgICAgIC8vIG9mIHJlbGF0aXZlIEpTT04gcG9pbnRlcnMgYXMgZGF0YS1wYXRoczpcbiAgICAgICAgY29uc3QgZGF0YVBhdGhQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoZnVsbERhdGFQYXRoKVxuICAgICAgICBsZXQgZm91bmQgPSBmYWxzZVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aFBhcnRzKVxuICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgaWYgKGNvbXBvbmVudC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJzLCBmaXJzdCAmJiBmb2N1cykpIHtcbiAgICAgICAgICAgIGZvdW5kID0gdHJ1ZVxuICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgICAgLy8gQ291bGRuJ3QgZmluZCBhIGNvbXBvbmVudCBpbiBhbiBhY3RpdmUgZm9ybSBmb3IgdGhlIGdpdmVuIGRhdGFQYXRoLlxuICAgICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBhIGNvbXBvbmVudCBzZXJ2aW5nIGEgcGFydCBvZiB0aGUgZGF0YVBhdGgsXG4gICAgICAgICAgLy8gYW5kIHRha2UgaXQgZnJvbSB0aGVyZTpcbiAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgICB3aGlsZSAoZGF0YVBhdGhQYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aFBhcnRzKVxuICAgICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgICAgICBpZiAoYXdhaXQgY29tcG9uZW50Lm5hdmlnYXRlVG9Db21wb25lbnQ/LihcbiAgICAgICAgICAgICAgICBmdWxsRGF0YVBhdGgsXG4gICAgICAgICAgICAgICAgc3ViQ29tcG9uZW50cyA9PiB7XG4gICAgICAgICAgICAgICAgICBsZXQgZm91bmQgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2Ygc3ViQ29tcG9uZW50cykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJzID0gZXJyb3JzW2NvbXBvbmVudC5kYXRhUGF0aF1cbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgIGVycnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJycywgZmlyc3QgJiYgZm9jdXMpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgICAgLy8gRm91bmQgYSBuZXN0ZWQgZm9ybSB0byBkaXNwbGF5IGF0IGxlYXN0IHBhcnRzIGZvIHRoZSBlcnJvcnMuXG4gICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3Qgc2hvdyBhbGwgZXJyb3JzIGF0IG9uY2UsIHNvIHdlJ3JlIGRvbmUuIERvbid0IGNhbGxcbiAgICAgICAgICAgICAgICAvLyBgbm90aWZ5RXJyb3JzKClgIHlldCwgYXMgd2UgY2FuIG9ubHkgZGlzcGxheSBpdCBvbmNlXG4gICAgICAgICAgICAgICAgLy8gYHNob3dWYWxpZGF0aW9uRXJyb3JzKClgIHdhcyBjYWxsZWQgZnJvbSBgRGl0b0Zvcm0ubW91bnRlZCgpYFxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTdGlsbCBoZXJlLCBzbyBrZWVwIHJlbW92aW5nIHRoZSBsYXN0IHBhcnQgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuICAgICAgICAgICAgZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBXaGVuIHRoZSBlcnJvciBjYW4ndCBiZSBtYXRjaGVkLCBhZGQgaXQgdG8gYSBsaXN0IG9mIHVubWF0Y2hlZFxuICAgICAgICAgIC8vIGVycm9ycyB3aXRoIGRlY2VudCBtZXNzYWdlLCB0byByZXBvcnQgYXQgdGhlIGVuZC5cbiAgICAgICAgICBjb25zdCBmaWVsZCA9IGxhYmVsaXplKHByb3BlcnR5KVxuICAgICAgICAgIGZvciAoY29uc3QgZXJyIG9mIGVycnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZWZpeCA9IGZpZWxkXG4gICAgICAgICAgICAgID8gYFRoZSBmaWVsZCAke2ZpZWxkfWBcbiAgICAgICAgICAgICAgOiBgVGhlICR7dGhpcy5mb3JtTGFiZWx9YFxuICAgICAgICAgICAgdW5tYXRjaGVkLnB1c2goYCR7cHJlZml4fSAke2Vyci5tZXNzYWdlfWApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgIH1cbiAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlFcnJvcnModW5tYXRjaGVkLmpvaW4oJ1xcbicpKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBub3RpZnlFcnJvcnMobWVzc2FnZSkge1xuICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICB0aXRsZTogJ1ZhbGlkYXRpb24gRXJyb3JzJyxcbiAgICAgICAgdGV4dDogbWVzc2FnZSB8fCAnUGxlYXNlIGNvcnJlY3QgdGhlIGhpZ2hsaWdodGVkIGVycm9ycy4nXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICByZXNldERhdGEoKSB7XG4gICAgICAvLyBXZSBjYW4ndCBzZXQgYHRoaXMuZGF0YSA9IC4uLmAgYmVjYXVzZSBpdCdzIGEgcHJvcGVydHksIGJ1dCB3ZSBjYW5cbiAgICAgIC8vIHNldCBhbGwga25vd24gcHJvcGVydGllcyBvbiBpdCB0byB0aGUgdmFsdWVzIHJldHVybmVkIGJ5XG4gICAgICAvLyBgc2V0RGVmYXVsdHMoKWAsIGFzIHRoZXkgYXJlIGFsbCByZWFjdGl2ZSBhbHJlYWR5IGZyb20gdGhlIHN0YXJ0czpcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5kYXRhLCBzZXREZWZhdWx0cyh0aGlzLnNjaGVtYSwge30sIHRoaXMpKVxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgZm9yIChjb25zdCBuYW1lIGluIGRhdGEpIHtcbiAgICAgICAgaWYgKG5hbWUgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgICAgdGhpcy4kc2V0KHRoaXMuZGF0YSwgbmFtZSwgZGF0YVtuYW1lXSlcbiAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSkpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudC5tYXJrRGlydHkoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmaWx0ZXJEYXRhKGRhdGEpIHtcbiAgICAgIC8vIEZpbHRlcnMgb3V0IGFycmF5cyBhbmQgb2JqZWN0cyB0aGF0IGFyZSBiYWNrIGJ5IGRhdGEgcmVzb3VyY2VzXG4gICAgICAvLyB0aGVtc2VsdmVzLCBhcyB0aG9zZSBhcmUgYWxyZWFkeSB0YWtpbmcgY2FyZSBvZiB0aHJvdWdoIHRoZWlyIG93biBBUElcbiAgICAgIC8vIHJlc291cmNlIGVuZC1wb2ludHMgYW5kIHNob3VsZG4ndCBiZSBzZXQuXG4gICAgICBjb25zdCBjb3B5ID0ge31cbiAgICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkYXRhKSkge1xuICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkgfHwgaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5TmFtZShuYW1lKVxuICAgICAgICAgIGlmIChjb21wb25lbnRzLnNvbWUoY29tcG9uZW50ID0+IGNvbXBvbmVudC5wcm92aWRlc0RhdGEpKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb3B5W25hbWVdID0gdmFsdWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb3B5XG4gICAgfSxcblxuICAgIHByb2Nlc3NEYXRhKHsgdGFyZ2V0ID0gJ2NsaXBib2FyZCcsIHNjaGVtYU9ubHkgPSB0cnVlIH0gPSB7fSkge1xuICAgICAgcmV0dXJuIHByb2Nlc3NEYXRhKFxuICAgICAgICB0aGlzLnNjaGVtYSxcbiAgICAgICAgdGhpcy5zb3VyY2VTY2hlbWEsXG4gICAgICAgIHRoaXMuZGF0YSxcbiAgICAgICAgdGhpcy5kYXRhUGF0aCwge1xuICAgICAgICAgIC8vIE5lZWRlZCBmb3IgRGl0b0NvbnRleHQgaGFuZGxpbmcgaW5zaWRlIGBwcm9jZXNzRGF0YWAgYW5kXG4gICAgICAgICAgLy8gYHByb2Nlc3NTY2hlbWFEYXRhKClgOlxuICAgICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgICBzY2hlbWFPbmx5LFxuICAgICAgICAgIHRhcmdldFxuICAgICAgICB9XG4gICAgICApXG4gICAgfSxcblxuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIC8vIGAkc2NoZW1hUGFyZW50Q29tcG9uZW50KClgIGlzIG9ubHkgc2V0IGlmIG9uZSBvZiB0aGUgYW5jZXN0b3JzIHVzZXNcbiAgICAgIC8vIHRoZSBgU2NoZW1hUGFyZW50TWl4aW5gOlxuICAgICAgdGhpcy4kc2NoZW1hUGFyZW50Q29tcG9uZW50KCk/Ll9yZWdpc3RlclNjaGVtYUNvbXBvbmVudCh0aGlzLCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlckNvbXBvbmVudChjb21wb25lbnQsIGFkZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJFbnRyeSh0aGlzLmNvbXBvbmVudHNSZWdpc3RyeSwgY29tcG9uZW50LCBhZGQpXG4gICAgICAvLyBPbmx5IHJlZ2lzdGVyIHdpdGggdGhlIHBhcmVudCBpZiBzY2hlbWEgc2hhcmVzIGRhdGEgd2l0aCBpdC5cbiAgICAgIHRoaXMucGFyZW50U2NoZW1hQ29tcG9uZW50Py5fcmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50LCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlclBhbmUocGFuZSwgYWRkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckVudHJ5KHRoaXMucGFuZXNSZWdpc3RyeSwgcGFuZSwgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJQYW5lbChwYW5lbCwgYWRkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckVudHJ5KHRoaXMucGFuZWxzUmVnaXN0cnksIHBhbmVsLCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlckVudHJ5KHJlZ2lzdHJ5LCBlbnRyeSwgYWRkKSB7XG4gICAgICBjb25zdCB1aWQgPSBlbnRyeS4kdWlkXG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIHRoaXMuJHNldChyZWdpc3RyeSwgdWlkLCBlbnRyeSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuJGRlbGV0ZShyZWdpc3RyeSwgdWlkKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBfbGlzdEVudHJpZXNCeURhdGFQYXRoKHJlZ2lzdHJ5KSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhyZWdpc3RyeSkucmVkdWNlKChlbnRyaWVzQnlEYXRhUGF0aCwgZW50cnkpID0+IHtcbiAgICAgICAgLy8gTXVsdGlwbGUgZW50cmllcyBjYW4gYmUgbGlua2VkIHRvIHRoZSBzYW1lIGRhdGEtcGF0aCwgZS5nLiB3aGVuXG4gICAgICAgIC8vIHRoZXJlIGFyZSB0YWJzLiBMaW5rIGVhY2ggZGF0YS1wYXRoIHRvIGFuIGFycmF5IG9mIGVudHJpZXMuXG4gICAgICAgIGNvbnN0IHsgZGF0YVBhdGggfSA9IGVudHJ5XG4gICAgICAgIGNvbnN0IGVudHJpZXMgPSBlbnRyaWVzQnlEYXRhUGF0aFtkYXRhUGF0aF0gfHw9IFtdXG4gICAgICAgIGVudHJpZXMucHVzaChlbnRyeSlcbiAgICAgICAgcmV0dXJuIGVudHJpZXNCeURhdGFQYXRoXG4gICAgICB9LCB7fSlcbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXMoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoKS5zdGFydHNXaXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICAgID8gdGhpcy5fZ2V0RW50cmllc0J5RGF0YVBhdGgoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaClcbiAgICAgICAgOiB0aGlzLl9nZXRFbnRyaWVzQnlOYW1lKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpXG4gICAgfSxcblxuICAgIF9nZXRFbnRyaWVzQnlEYXRhUGF0aChlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZmlsdGVyRW50cmllcyhcbiAgICAgICAgZW50cmllc0J5RGF0YVBhdGhbbm9ybWFsaXplRGF0YVBhdGgoZGF0YVBhdGgpXSB8fCBbXSxcbiAgICAgICAgbWF0Y2hcbiAgICAgIClcbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXNCeU5hbWUoZW50cmllc0J5RGF0YVBhdGgsIG5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZmlsdGVyRW50cmllcyhcbiAgICAgICAgZW50cmllc0J5RGF0YVBhdGhbYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgbmFtZSldIHx8IFtdLFxuICAgICAgICBtYXRjaFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBfZmlsdGVyRW50cmllcyhlbnRyaWVzLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIG1hdGNoID8gZW50cmllcy5maWx0ZXIobWF0Y2gpIDogZW50cmllc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5kaXRvLXNjaGVtYS5kaXRvLXNjaGVtYS1pbmxpbmVkKFxuICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICA6ZGF0YT1cImRhdGFcIlxuICA6bWV0YT1cIm1ldGFcIlxuICA6c3RvcmU9XCJzdG9yZVwiXG4gIDpsYWJlbD1cImlzQ29tcGFjdCA/IG51bGwgOiBsYWJlbFwiXG4gIDppbmxpbmVkPVwidHJ1ZVwiXG4gIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgOmNsYXNzPVwieyAnZGl0by1zY2hlbWEtY29tcGFjdCc6IGlzQ29tcGFjdCB9XCJcbilcbiAgLy8gUmVuZGVyIGRpdG8tZWRpdC1idXR0b25zIGZvciBpbmxpbmVkIHNoZW1hcyBzZXBhcmF0ZWx5IGZyb20gYWxsXG4gIC8vIG90aGVycyBpbiBgVHlwZUxpc3RgIGFzIGEgc2NvcGUsIGZvciBiZXR0ZXIgaGFuZGxpbmcgb2YgbGF5b3V0LlxuICB0ZW1wbGF0ZSgjZWRpdC1idXR0b25zKVxuICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgdi1pZj1cImRlbGV0YWJsZSB8fCBkcmFnZ2FibGUgfHwgZWRpdGFibGVcIlxuICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgIDplZGl0UGF0aD1cImVkaXRQYXRoXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICBAZGVsZXRlPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBkaXRvLXNjaGVtYS5kaXRvLXNjaGVtYS1pbmxpbmVkKFxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpsYWJlbD1cImlzQ29tcGFjdCA/IG51bGwgOiBsYWJlbFwiXG4gICAgOmlubGluZWQ9XCJ0cnVlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLWNvbXBhY3QnOiBpc0NvbXBhY3QgfVwiXG4gIClcbiAgICAvLyBSZW5kZXIgZGl0by1lZGl0LWJ1dHRvbnMgZm9yIGlubGluZWQgc2hlbWFzIHNlcGFyYXRlbHkgZnJvbSBhbGxcbiAgICAvLyBvdGhlcnMgaW4gYFR5cGVMaXN0YCBhcyBhIHNjb3BlLCBmb3IgYmV0dGVyIGhhbmRsaW5nIG9mIGxheW91dC5cbiAgICB0ZW1wbGF0ZSgjZWRpdC1idXR0b25zKVxuICAgICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICAgIHYtaWY9XCJkZWxldGFibGUgfHwgZHJhZ2dhYmxlIHx8IGVkaXRhYmxlXCJcbiAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgIDplZGl0UGF0aD1cImVkaXRQYXRoXCJcbiAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICBAZGVsZXRlPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1zY2hlbWEtaW5saW5lZFxuICAgID4gLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAgID4gLmRpdG8tc2NoZW1hLWhlYWRlclxuICAgICAgICAvLyBDaGFuZ2Ugc3BhY2luZyBzbyAuZGl0by1sYWJlbCBjb3ZlcnMgdGhlIGZ1bGwgLmRpdG8tc2NoZW1hLWhlYWRlci5cbiAgICAgICAgbWFyZ2luOiAtJGZvcm0tc3BhY2luZ1xuICAgICAgICAuZGl0by1sYWJlbFxuICAgICAgICAgIC8vIEFkZCByZW1vdmVkICRmb3JtLXNwYWNpbmcgYWdhaW5cbiAgICAgICAgICAtLWxhYmVsLXBhZGRpbmc6ICN7JGZvcm0tc3BhY2luZ31cbiAgICAgICAgICBtYXJnaW46IDBcbiAgICAgICAgICB3aWR0aDogMTAwJVxuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgICAgICAvLyBCZWNhdXNlIHRhYmxlcyBoYXZlIGEgZnVubnkgd2F5IG9mIGFsbG93aW5nIHRvbyBtdWNoIHdpZHRoIGdyb3d0aDpcbiAgICAgICAgICBtYXgtd2lkdGg6ICRjb250ZW50LXdpZHRoXG4gICAgICAgICYgKy5kaXRvLXBhbmVcbiAgICAgICAgICAvLyBOZWVkZWQgZm9yIHRyYW5zaXRpb24taGVpZ2h0IGluIERpdG9TY2hlbWE6XG4gICAgICAgICAgbWluLWhlaWdodDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBpc0NvbXBhY3QgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tc2NoZW1hLWlubGluZWQnLCB7XG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZHJhZ2dhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkZWxldGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0UGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXNDb21wYWN0KCkge1xuICAgICAgcmV0dXJuIGlzQ29tcGFjdCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNDb21wYWN0ICYmICEhdGhpcy5sYWJlbFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1wYW5lKFxuICB2LWlmPVwiaXNQb3B1bGF0ZWQgJiYgY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPiAwXCJcbiAgdi1zaG93PVwidmlzaWJsZVwiXG4pXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPWB7XG4gICAgICBzY2hlbWEsXG4gICAgICBkYXRhUGF0aCxcbiAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgbmVzdGVkLFxuICAgICAgc3RvcmVcbiAgICB9IGluIGNvbXBvbmVudFNjaGVtYXNgXG4gIClcbiAgICAuZGl0by1icmVhayhcbiAgICAgIHYtaWY9XCJzY2hlbWEuYnJlYWsgPT09ICdiZWZvcmUnXCJcbiAgICApXG4gICAgZGl0by1jb250YWluZXIoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHNjaGVtYSlcIlxuICAgICAgOmtleT1cIm5lc3RlZERhdGFQYXRoXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6c2luZ2xlPVwiaXNTaW5nbGVDb21wb25lbnRcIlxuICAgICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgKVxuICAgIC5kaXRvLWJyZWFrKFxuICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2FmdGVyJ1wiXG4gICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tcGFuZShcbiAgICB2LWlmPVwiaXNQb3B1bGF0ZWQgJiYgY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPiAwXCJcbiAgICB2LXNob3c9XCJ2aXNpYmxlXCJcbiAgKVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1mb3I9YHtcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICAgIG5lc3RlZCxcbiAgICAgICAgc3RvcmVcbiAgICAgIH0gaW4gY29tcG9uZW50U2NoZW1hc2BcbiAgICApXG4gICAgICAuZGl0by1icmVhayhcbiAgICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2JlZm9yZSdcIlxuICAgICAgKVxuICAgICAgZGl0by1jb250YWluZXIoXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoc2NoZW1hKVwiXG4gICAgICAgIDprZXk9XCJuZXN0ZWREYXRhUGF0aFwiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOnNpbmdsZT1cImlzU2luZ2xlQ29tcG9uZW50XCJcbiAgICAgICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgKVxuICAgICAgLmRpdG8tYnJlYWsoXG4gICAgICAgIHYtaWY9XCJzY2hlbWEuYnJlYWsgPT09ICdhZnRlcidcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXBhbmVcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgZmxleC1mbG93OiByb3cgd3JhcFxuICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnRcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmVcbiAgICAvLyBSZW1vdmUgcGFkZGluZyBhZGRlZCBieSBgLmRpdG8tY29udGFpbmVyYFxuICAgIG1hcmdpbjogKC0kZm9ybS1zcGFjaW5nKSAoLSRmb3JtLXNwYWNpbmctaGFsZilcbiAgICAvLyBBZGQgcmVtb3ZlZCBob3Jpem9udGFsIG1hcmdpbiBhZ2FpbiB0byBtYXgtd2lkdGg6XG4gICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aCArIDIgKiAkZm9ybS1zcGFjaW5nLWhhbGZcbiAgICAvLyBVc2UgYGZsZXg6IDAlYCBmb3IgYWxsIGAuZGl0by1wYW5lYCBleGNlcHQgYC5kaXRvLXBhbmUtbWFpbmAsXG4gICAgLy8gc28gdGhhdCB0aGUgYC5kaXRvLWJ1dHRvbnMtbWFpbmAgY2FuIGJlIG1vdmVkIGFsbCB0aGUgd2F5IHRvIHRoZSBib3R0b20uXG4gICAgZmxleDogMCVcblxuICAgICYuZGl0by1wYW5lLW1haW5cbiAgICAgIGZsZXg6IDEwMCVcblxuICAgIC5kaXRvLXNjaGVtYS1oZWFkZXI6bm90KC5kaXRvLXNjaGVtYS1tZW51LWhlYWRlcikgKyAmXG4gICAgICAvLyBDbGVhciB0b3AtbWFyZ2luIGlmIHRoZSBjb21wb25lbnRzIGFyZSBwcmVjZWRlZCBieSBhIHNjaGVtYSBoZWFkZXIuXG4gICAgICBtYXJnaW4tdG9wOiAwXG5cbiAgICAuZGl0by1jb250YWluZXIuZGl0by1vbWl0LXBhZGRpbmcgPiAmXG4gICAgICAvLyBDbGVhciBtYXJnaW5zIHNldCBhYm92ZSBhZ2FpbiBpZiBwYXJlbnQgaXMgb21pdHRpbmcgcGFkZGluZy5cbiAgICAgIG1hcmdpbjogMFxuICAgICAgbWF4LXdpZHRoOiB1bnNldFxuXG4gICAgLmRpdG8tYnJlYWtcbiAgICAgIGZsZXg6IDEwMCVcbiAgICAgIGhlaWdodDogMFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBnZXRBbGxQYW5lbFNjaGVtYXMsIGlzTmVzdGVkIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tcGFuZScsIHtcbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHRhYkNvbXBvbmVudDogKCkgPT4gdGhpcy50YWJDb21wb25lbnRcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0YWI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2luZ2xlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdmlzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnRhYiA/IHRoaXMgOiB0aGlzLiR0YWJDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRTY2hlbWFzKCkge1xuICAgICAgLy8gQ29tcHV0ZSBhIGNvbXBvbmVudHMgbGlzdCB3aGljaCBoYXMgdGhlIGRhdGFQYXRoIGJha2VkIGludG8gaXRzIGtleXNcbiAgICAgIC8vIGFuZCBhZGRzIHRoZSBrZXkgYXMgdGhlIG5hbWUgdG8gZWFjaCBjb21wb25lbnQsIHVzZWQgZm9yIGxhYmVscywgZXRjLlxuICAgICAgLy8gTk9URTogc2NoZW1hIGNhbiBiZSBudWxsIHdoaWxlIG11bHRpLWZvcm0gbGlzdHMgbG9hZCB0aGVpciBkYXRhLFxuICAgICAgLy8gYmVjYXVzZSBvbmx5IHRoZSBhdmFpbGFibGUgZGF0YSB3aWxsIGRldGVybWluZSB0aGUgdHlwZSBvZiBmb3JtLlxuICAgICAgLy8gV2hlbiBlZGl0aW5nIHByaW1pdGl2ZSB2YWx1ZXMgdGhyb3VnaCBhIGZvcm0sIGRvIG5vdCBhcHBlbmQgJ25hbWUnIHRvXG4gICAgICAvLyB0aGUgY29tcG9uZW50J3MgZGF0YVBhdGggc28gaXQgY2FuIGJlIG1hcHBlZCB0byBmcm9tIHZhbGlkYXRpb24gZXJyb3JzLlxuICAgICAgLy8gTk9URTogTm90IGFsbCBzY2hlbWFzIC8gY29tcG9uZW50cyBoYXZlIGEgc291cmNlU2NoZW1hLCBlLmcuIGRpYWxvZ3MuXG4gICAgICBjb25zdCB3cmFwUHJpbWl0aXZlcyA9IHRoaXMuc291cmNlU2NoZW1hPy53cmFwUHJpbWl0aXZlc1xuICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hPy5jb21wb25lbnRzIHx8IHt9KS5tYXAoXG4gICAgICAgIChbbmFtZSwgc2NoZW1hXSkgPT4ge1xuICAgICAgICAgIC8vIEFsd2F5cyBhZGQgbmFtZSB0byBjb21wb25lbnQgc2NoZW1hLlxuICAgICAgICAgIHNjaGVtYS5uYW1lID0gbmFtZVxuICAgICAgICAgIC8vIFNoYXJlIGRhdGFQYXRoIGFuZCBzdG9yZSB3aXRoIHBhcmVudCBpZiBub3QgbmVzdGVkOlxuICAgICAgICAgIGNvbnN0IG5lc3RlZCA9IGlzTmVzdGVkKHNjaGVtYSlcbiAgICAgICAgICBjb25zdCBuZXN0ZWREYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIG5hbWUpXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgIGRhdGFQYXRoOiBuZXN0ZWQgJiYgIXdyYXBQcmltaXRpdmVzXG4gICAgICAgICAgICAgID8gbmVzdGVkRGF0YVBhdGhcbiAgICAgICAgICAgICAgOiB0aGlzLmRhdGFQYXRoLFxuICAgICAgICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICAgICAgICBuZXN0ZWQsXG4gICAgICAgICAgICBzdG9yZTogbmVzdGVkID8gdGhpcy5nZXRDaGlsZFN0b3JlKG5hbWUpIDogdGhpcy5zdG9yZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBwYW5lbFNjaGVtYXMoKSB7XG4gICAgICAvLyBHYXRoZXIgYWxsIHBhbmVsIHNjaGVtYXMgZnJvbSBhbGwgY29tcG9uZW50IHNjaGVtYXMsIGJ5IGZpbmRpbmcgdGhvc2VcbiAgICAgIC8vIHRoYXQgd2FudCB0byBwcm92aWRlIGEgcGFuZWwuIFNlZSBgZ2V0QWxsUGFuZWxTY2hlbWFzKClgIGZvciBkZXRhaWxzLlxuICAgICAgcmV0dXJuIHRoaXMuY29tcG9uZW50U2NoZW1hcy5mbGF0TWFwKFxuICAgICAgICAoeyBzY2hlbWEsIG5lc3RlZERhdGFQYXRoOiBkYXRhUGF0aCB9KSA9PiBnZXRBbGxQYW5lbFNjaGVtYXMoXG4gICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgIGRhdGFQYXRoLFxuICAgICAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50LFxuICAgICAgICAgIHRoaXMudGFiQ29tcG9uZW50XG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNTaW5nbGVDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaW5nbGUgJiYgdGhpcy5jb21wb25lbnRTY2hlbWFzLmxlbmd0aCA9PT0gMVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyUGFuZSh0aGlzLCBhZGQpXG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgaWYgKHRoaXMudGFiKSB7XG4gICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgaGFzaDogdGhpcy50YWIgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRnJhY3Rpb24odmFsdWUpIHtcbiAgY29uc3QgbWF0Y2ggPSAoXG4gICAgaXNTdHJpbmcodmFsdWUpICYmXG4gICAgdmFsdWUubWF0Y2goL15cXHMqKFsrLV0/XFxkKylcXHMqXFwvXFxzKihbKy1dP1xcZCspXFxzKiQvKVxuICApXG4gIGlmIChtYXRjaCkge1xuICAgIGNvbnN0IFssIGRpdmlkZW5kLCBkaXZpc29yXSA9IG1hdGNoXG4gICAgcmV0dXJuIHBhcnNlRmxvYXQoZGl2aWRlbmQpIC8gcGFyc2VGbG9hdChkaXZpc29yKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKVxuICB9XG59XG4iLCJcbi5kaXRvLWNvbnRhaW5lcihcbiAgdi1zaG93PVwiY29tcG9uZW50VmlzaWJsZVwiXG4gIDpjbGFzcz1cImNvbnRhaW5lckNsYXNzXCJcbiAgOnN0eWxlPVwiY29udGFpbmVyU3R5bGVcIlxuKVxuICBkaXRvLWxhYmVsKFxuICAgIHYtaWY9XCJsYWJlbFwiXG4gICAgOmxhYmVsPVwibGFiZWxcIlxuICAgIDpkYXRhUGF0aD1cImxhYmVsRGF0YVBhdGhcIlxuICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzXCJcbiAgKVxuICBjb21wb25lbnQuZGl0by1jb21wb25lbnQoXG4gICAgOmlzPVwiZ2V0VHlwZUNvbXBvbmVudChzY2hlbWEudHlwZSlcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpzaW5nbGU9XCJzaW5nbGVcIlxuICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgIDpkaXNhYmxlZD1cImNvbXBvbmVudERpc2FibGVkXCJcbiAgICA6Y2xhc3M9XCJjb21wb25lbnRDbGFzc1wiXG4gICAgQGVycm9ycz1cIm9uRXJyb3JzXCJcbiAgKVxuICBkaXRvLWVycm9ycyhcbiAgICA6ZXJyb3JzPVwiZXJyb3JzXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tY29udGFpbmVyKFxuICAgIHYtc2hvdz1cImNvbXBvbmVudFZpc2libGVcIlxuICAgIDpjbGFzcz1cImNvbnRhaW5lckNsYXNzXCJcbiAgICA6c3R5bGU9XCJjb250YWluZXJTdHlsZVwiXG4gIClcbiAgICBkaXRvLWxhYmVsKFxuICAgICAgdi1pZj1cImxhYmVsXCJcbiAgICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICAgIDpkYXRhUGF0aD1cImxhYmVsRGF0YVBhdGhcIlxuICAgICAgOmNsYXNzPVwiY29tcG9uZW50Q2xhc3NcIlxuICAgIClcbiAgICBjb21wb25lbnQuZGl0by1jb21wb25lbnQoXG4gICAgICA6aXM9XCJnZXRUeXBlQ29tcG9uZW50KHNjaGVtYS50eXBlKVwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOnNpbmdsZT1cInNpbmdsZVwiXG4gICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgIDpkaXNhYmxlZD1cImNvbXBvbmVudERpc2FibGVkXCJcbiAgICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzXCJcbiAgICAgIEBlcnJvcnM9XCJvbkVycm9yc1wiXG4gICAgKVxuICAgIGRpdG8tZXJyb3JzKFxuICAgICAgOmVycm9ycz1cImVycm9yc1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWNvbnRhaW5lclxuICAgIC8vIE5lZWRlZCBmb3IgYmV0dGVyIHZlcnRpY2FsIGFsaWdubWVudDpcbiAgICBhbGlnbi1zZWxmOiBzdHJldGNoXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgIC8vIFRvIHByZXZlbnQgbGlzdCB0YWJsZXMgZnJvbSBibG93aW5nIG91dCBvZiB0aGVpciBmbGV4IGJveCBjb250YWluZXJzLlxuICAgIG1heC13aWR0aDogMTAwJVxuICAgIC8vIENhbm5vdCB1c2UgbWFyZ2luIGhlcmUgYXMgaXQgbmVlZHMgdG8gYmUgcGFydCBvZiBib3gtc2l6aW5nIGZvclxuICAgIC8vIHBlcmNlbnRhZ2VzIGluIGZsZXgtYmFzaXMgdG8gd29yay5cbiAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nICRmb3JtLXNwYWNpbmctaGFsZlxuICAgICY6ZW1wdHlcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAmLmRpdG8tb21pdC1wYWRkaW5nXG4gICAgICBwYWRkaW5nOiAwXG4gICAgICA+IC5kaXRvLWxhYmVsXG4gICAgICAgIG1hcmdpbjogJGZvcm0tc3BhY2luZyAkZm9ybS1zcGFjaW5nLWhhbGYgMFxuICAgICYuZGl0by1zaW5nbGVcbiAgICAgIGhlaWdodDogMTAwJSAvLyBTbyB0aGF0IGxpc3QgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IGF0IHRoZSBib3R0b21cbiAgLy8gTk9URTogVGhpcyBpcyBub3QgbmVzdGVkIGluc2lkZSBgLmRpdG8tY29udGFpbmVyYCBzbyB0aGF0IG90aGVyXG4gIC8vIHR5cGUgY29tcG9uZW50cyBjYW4gb3ZlcnJpZGUgYC5kaXRvLXdpZHRoLWZpbGxgIGNsYXNzIChmaWx0ZXIgcHJlY2VkZW5jZSkuXG4gIC5kaXRvLWNvbXBvbmVudFxuICAgICYuZGl0by13aWR0aC1maWxsXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgJi5kaXRvLWNoZWNrYm94LFxuICAgICAgJi5kaXRvLXJhZGlvLWJ1dHRvblxuICAgICAgICAvLyBXZWJLaXQgZG9lc24ndCBsaWtlIGNoYW5nZWQgd2lkdGggb24gY2hlY2tib3hlcyBhbmQgcmFkaW9zLCBvdmVycmlkZTpcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICAgIHdpZHRoOiBhdXRvXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNTdHJpbmcsIGlzTnVtYmVyIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0VHlwZU9wdGlvbnMsIHNob3VsZE9taXRQYWRkaW5nIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgcGFyc2VGcmFjdGlvbiB9IGZyb20gJy4uL3V0aWxzL21hdGguanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1jb250YWluZXInLCB7XG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBlcnJvcnM6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogdGhpcy5uZXN0ZWQgfSlcbiAgICB9LFxuXG4gICAgdHlwZU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gZ2V0VHlwZU9wdGlvbnModGhpcy5zY2hlbWEpIHx8IHt9XG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgY29uc3QgeyBzY2hlbWEgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHsgbGFiZWwgfSA9IHNjaGVtYVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgbGFiZWwgIT09IGZhbHNlICYmXG4gICAgICAgICghIWxhYmVsIHx8IHRoaXMudHlwZU9wdGlvbnMuZ2VuZXJhdGVMYWJlbCAmJiB0aGlzLmdlbmVyYXRlTGFiZWxzKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBsYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc0xhYmVsID8gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYSkgOiBudWxsXG4gICAgfSxcblxuICAgIGxhYmVsRGF0YVBhdGgoKSB7XG4gICAgICAvLyBVbm5lc3RlZCB0eXBlcyBkb24ndCBoYXZlIGEgZGF0YVBhdGggZm9yIHRoZW1zZWx2ZXMsIGRvbid0IHVzZSBpdDpcbiAgICAgIHJldHVybiB0aGlzLm5lc3RlZCA/IHRoaXMuZGF0YVBhdGggOiBudWxsXG4gICAgfSxcblxuICAgIGNvbXBvbmVudFdpZHRoOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZU9wdGlvbnMuZGVmYXVsdFdpZHRoXG4gICAgICB9LFxuICAgICAgZ2V0KHdpZHRoKSB7XG4gICAgICAgIC8vIFVzZSAxMDAlID09IDEuMCBhcyBkZWZhdWx0IHdpZHRoIHdoZW4gbm90aGluZyBpcyBzZXQ6XG4gICAgICAgIHJldHVybiB3aWR0aCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyAxLjBcbiAgICAgICAgICA6IGlzU3RyaW5nKHdpZHRoKVxuICAgICAgICAgICAgPyB3aWR0aC5tYXRjaCgvXlxccypbPD5dP1xccyooLiopJC8pWzFdIC8vIFJlbW92ZSB3aWR0aCBvcGVyYXRvclxuICAgICAgICAgICAgOiB3aWR0aFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50V2lkdGhPcGVyYXRvcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3dpZHRoJywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZ2V0KHdpZHRoKSB7XG4gICAgICAgIHJldHVybiBpc1N0cmluZyh3aWR0aClcbiAgICAgICAgICA/IHdpZHRoLm1hdGNoKC9eXFxzKihbPD5dPykvKVsxXSB8fCBudWxsXG4gICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnRWaXNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndmlzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlT3B0aW9ucy5kZWZhdWx0VmlzaWJsZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50RGlzYWJsZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdkaXNhYmxlZCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkaXNhYmxlZCkge1xuICAgICAgICByZXR1cm4gZGlzYWJsZWQgfHwgdGhpcy5kaXNhYmxlZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29udGFpbmVyQ2xhc3MoKSB7XG4gICAgICBjb25zdCB7IGNsYXNzOiBjb250YWluZXJDbGFzcyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLXNpbmdsZSc6IHRoaXMuc2luZ2xlLFxuICAgICAgICAnZGl0by1vbWl0LXBhZGRpbmcnOiBzaG91bGRPbWl0UGFkZGluZyh0aGlzLnNjaGVtYSksXG4gICAgICAgIC4uLihcbiAgICAgICAgICBpc1N0cmluZyhjb250YWluZXJDbGFzcylcbiAgICAgICAgICAgID8geyBbY29udGFpbmVyQ2xhc3NdOiB0cnVlIH1cbiAgICAgICAgICAgIDogY29udGFpbmVyQ2xhc3NcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRCYXNpcygpIHtcbiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5jb21wb25lbnRXaWR0aFxuICAgICAgLy8gJ2F1dG8nID0gbm8gZml0dGluZzpcbiAgICAgIGNvbnN0IGJhc2lzID0gKFxuICAgICAgICBbbnVsbCwgJ2F1dG8nLCAnZmlsbCddLmluY2x1ZGVzKHdpZHRoKSA/ICdhdXRvJ1xuICAgICAgICA6IC8lJC8udGVzdCh3aWR0aCkgPyBwYXJzZUZsb2F0KHdpZHRoKSAvLyBwZXJjZW50YWdlXG4gICAgICAgIDogL1thLXpdLy50ZXN0KHdpZHRoKSA/IHdpZHRoIC8vIG5hdGl2ZSB1bml0c1xuICAgICAgICA6IHBhcnNlRnJhY3Rpb24od2lkdGgpICogMTAwIC8vIGZyYWN0aW9uXG4gICAgICApXG4gICAgICByZXR1cm4gaXNOdW1iZXIoYmFzaXMpID8gYCR7YmFzaXN9JWAgOiBiYXNpc1xuICAgIH0sXG5cbiAgICBjb250YWluZXJTdHlsZSgpIHtcbiAgICAgIC8vIEludGVycHJldCAnPjUwJScgYXMgJzUwJSwgZmxleC1ncm93OiAxYFxuICAgICAgY29uc3QgZ3JvdyA9IChcbiAgICAgICAgdGhpcy5jb21wb25lbnRXaWR0aE9wZXJhdG9yID09PSAnPicgfHxcbiAgICAgICAgdGhpcy5jb21wb25lbnRXaWR0aCA9PT0gJ2ZpbGwnXG4gICAgICApXG4gICAgICAvLyBJbnRlcnByZXQgJzw1MCUnIGFzICc1MCUsIGZsZXgtc2hyaW5rOiAxYFxuICAgICAgY29uc3Qgc2hyaW5rID0gdGhpcy5jb21wb25lbnRXaWR0aE9wZXJhdG9yID09PSAnPCdcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZsZXg6IGAke2dyb3cgPyAxIDogMH0gJHtzaHJpbmsgPyAxIDogMH0gJHt0aGlzLmNvbXBvbmVudEJhc2lzfWBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29tcG9uZW50Q2xhc3MoKSB7XG4gICAgICBjb25zdCBiYXNpc0lzQXV0byA9IHRoaXMuY29tcG9uZW50QmFzaXMgPT09ICdhdXRvJ1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tc2luZ2xlJzogdGhpcy5zaW5nbGUsXG4gICAgICAgICdkaXRvLWRpc2FibGVkJzogdGhpcy5jb21wb25lbnREaXNhYmxlZCxcbiAgICAgICAgJ2RpdG8td2lkdGgtZmlsbCc6ICFiYXNpc0lzQXV0byB8fCB0aGlzLmNvbXBvbmVudFdpZHRoID09PSAnZmlsbCcsXG4gICAgICAgICdkaXRvLXdpZHRoLWF1dG8nOiBiYXNpc0lzQXV0byxcbiAgICAgICAgJ2RpdG8taGFzLWVycm9ycyc6ICEhdGhpcy5lcnJvcnNcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRXJyb3JzKGVycm9ycykge1xuICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tdGFic1xuICByb3V0ZXItbGluay5kaXRvLWxpbmsoXG4gICAgdi1mb3I9XCIodGFiU2NoZW1hLCBrZXkpIGluIHRhYnNcIlxuICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodGFiU2NoZW1hKVwiXG4gICAgOmtleT1cImtleVwiXG4gICAgOnRvPVwieyBoYXNoOiBrZXkgfVwiXG4gICAgYWN0aXZlLWNsYXNzPVwiZGl0by1hY3RpdmVcIlxuICApXG4gICAgfCB7eyBnZXRMYWJlbCh0YWJTY2hlbWEsIGtleSkgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXRhYnNcbiAgICByb3V0ZXItbGluay5kaXRvLWxpbmsoXG4gICAgICB2LWZvcj1cIih0YWJTY2hlbWEsIGtleSkgaW4gdGFic1wiXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHRhYlNjaGVtYSlcIlxuICAgICAgOmtleT1cImtleVwiXG4gICAgICA6dG89XCJ7IGhhc2g6IGtleSB9XCJcbiAgICAgIGFjdGl2ZS1jbGFzcz1cImRpdG8tYWN0aXZlXCJcbiAgICApXG4gICAgICB8IHt7IGdldExhYmVsKHRhYlNjaGVtYSwga2V5KSB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gICR0YWItY29sb3ItYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXN0XG4gICR0YWItY29sb3ItaW5hY3RpdmU6ICRjb2xvci1saWdodFxuICAkdGFiLWNvbG9yLWFjdGl2ZTogJGNvbG9yLWxpZ2h0ZXN0XG4gICR0YWItY29sb3ItaG92ZXI6ICRjb2xvci13aGl0ZVxuXG4gIC5kaXRvLXRhYnNcbiAgICAvLyBTZWU6IGh0dHBzOi8vY29kZXBlbi5pby90aG9sZXgvcGVuL2h2ZUJ4L1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvXG4gICAgYVxuICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1pbmFjdGl2ZVxuICAgICAgcGFkZGluZzogJHRhYi1wYWRkaW5nLXZlciAkdGFiLXBhZGRpbmctaG9yXG4gICAgICBtYXJnaW4tbGVmdDogJHRhYi1tYXJnaW5cbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICR0YWItcmFkaXVzXG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJHRhYi1yYWRpdXNcbiAgICAgICY6aG92ZXJcbiAgICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1ob3ZlclxuICAgICAgJjphY3RpdmVcbiAgICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1hY3RpdmVcbiAgICAgICYuZGl0by1hY3RpdmVcbiAgICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1iYWNrZ3JvdW5kXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXRhYnMnLCB7XG4gIHByb3BzOiB7XG4gICAgdGFiczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzZWxlY3RlZFRhYjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi8vIE9ubHkgc2hvdyBwYW5lbHMgaW4gdGFicyB3aGVuIHRoZSB0YWJzIGFyZSBhbHNvIHZpc2libGUuXG5jb21wb25lbnQuZGl0by1wYW5lbChcbiAgOmlzPVwicGFuZWxUYWdcIlxuICB2LXNob3c9XCJ2aXNpYmxlICYmICghcGFuZWxUYWJDb21wb25lbnQgfHwgcGFuZWxUYWJDb21wb25lbnQudmlzaWJsZSlcIlxuICBAc3VibWl0LnByZXZlbnRcbilcbiAgbGFiZWwuZGl0by1wYW5lbC10aXRsZSB7eyBnZXRMYWJlbChzY2hlbWEpIH19XG4gIGRpdG8tc2NoZW1hLmRpdG8tcGFuZWwtc2NoZW1hKFxuICAgIDpzY2hlbWE9XCJwYW5lbFNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6aGFzT3duRGF0YT1cImhhc093bkRhdGFcIlxuICApXG4gICAgZGl0by1idXR0b25zKFxuICAgICAgc2xvdD1cImJ1dHRvbnNcIlxuICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAvLyBPbmx5IHNob3cgcGFuZWxzIGluIHRhYnMgd2hlbiB0aGUgdGFicyBhcmUgYWxzbyB2aXNpYmxlLlxuICBjb21wb25lbnQuZGl0by1wYW5lbChcbiAgICA6aXM9XCJwYW5lbFRhZ1wiXG4gICAgdi1zaG93PVwidmlzaWJsZSAmJiAoIXBhbmVsVGFiQ29tcG9uZW50IHx8IHBhbmVsVGFiQ29tcG9uZW50LnZpc2libGUpXCJcbiAgICBAc3VibWl0LnByZXZlbnRcbiAgKVxuICAgIGxhYmVsLmRpdG8tcGFuZWwtdGl0bGUge3sgZ2V0TGFiZWwoc2NoZW1hKSB9fVxuICAgIGRpdG8tc2NoZW1hLmRpdG8tcGFuZWwtc2NoZW1hKFxuICAgICAgOnNjaGVtYT1cInBhbmVsU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpoYXNPd25EYXRhPVwiaGFzT3duRGF0YVwiXG4gICAgKVxuICAgICAgZGl0by1idXR0b25zKFxuICAgICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXBhbmVsXG4gICAgbWFyZ2luLWJvdHRvbTogJGNvbnRlbnQtcGFkZGluZ1xuICAgIC5kaXRvLXBhbmVsLXRpdGxlXG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAgIGJhY2tncm91bmQ6ICRidXR0b24tY29sb3JcbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgIC5kaXRvLXBhbmVsLXNjaGVtYVxuICAgICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsXG4gICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci10b3A6IDBcbiAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgID4gLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZy1oYWxmICRmb3JtLXNwYWNpbmdcbiAgICAgICAgPiAuZGl0by1idXR0b25zXG4gICAgICAgICAgLS1idXR0b24tbWFyZ2luOiAjeyRmb3JtLXNwYWNpbmd9XG4gICAgICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZy1oYWxmIDBcbiAgICAgIC5kaXRvLW9iamVjdFxuICAgICAgICBib3JkZXI6IDBcbiAgICAgICAgcGFkZGluZzogMFxuICAgICAgLmRpdG8tbGFiZWxcbiAgICAgICAgbWFyZ2luOiAwXG4gICAgICAgIGxhYmVsXG4gICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbFxuICAgICAgLmRpdG8tcGFuZVxuICAgICAgICBtYXJnaW46IDAgKC0kZm9ybS1zcGFjaW5nLWhhbGYpXG4gICAgICAuZGl0by1jb250YWluZXJcbiAgICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZy1oYWxmXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFZhbGlkYXRvck1peGluIGZyb20gJy4uL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcydcbmltcG9ydCB7IGdldEJ1dHRvblNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tcGFuZWwnLCB7XG4gIG1peGluczogW1ZhbGlkYXRvck1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcGFuZWxDb21wb25lbnQ6ICgpID0+IHRoaXMsXG4gICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiB0aGlzLnBhbmVsVGFiQ29tcG9uZW50XG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGFuZWxUYWJDb21wb25lbnQ6IHsgdHlwZTogRGl0b0NvbXBvbmVudCwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3duRGF0YTogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHBhbmVsQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgdGFiQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFuZWxUYWJDb21wb25lbnRcbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBnZXRCdXR0b25TY2hlbWFzKHRoaXMuc2NoZW1hLmJ1dHRvbnMpXG4gICAgfSxcblxuICAgIHRhcmdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS50YXJnZXQgfHwgdGhpcy5kYXRhUGF0aFxuICAgIH0sXG5cbiAgICBoYXNPd25EYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5vd25EYXRhXG4gICAgfSxcblxuICAgIHBhbmVsRGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm93bkRhdGEgfHwgdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIHBhbmVsU2NoZW1hKCkge1xuICAgICAgaWYgKHRoaXMuaGFzT3duRGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zY2hlbWFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBgZGF0YWAgZnJvbSB0aGUgc2NoZW1hLCBzbyB0aGF0IERpdG9TY2hlbWEgaXNuJ3QgdXNpbmcgaXQgdG9cbiAgICAgICAgLy8gcHJvZHVjZSBpdHMgb3duIGRhdGEuIFNlZSAkZmlsdGVycyBwYW5lbCBmb3IgbW9yZSBkZXRhaWxzIG9uIGRhdGEuXG4gICAgICAgIGNvbnN0IHsgZGF0YSwgLi4uc2NoZW1hIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgICByZXR1cm4gc2NoZW1hXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBhbmVsVGFnKCkge1xuICAgICAgLy8gUGFuZWxzIHRoYXQgcHJvdmlkZSB0aGVpciBvd24gZGF0YSBuZWVkIHRoZWlyIG93biBmb3JtLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzT3duRGF0YSA/ICdmb3JtJyA6ICdkaXYnXG4gICAgfSxcblxuICAgIHBhbmVsRGF0YVBhdGgoKSB7XG4gICAgICAvLyBJZiB0aGUgcGFuZWwgcHJvdmlkZXMgaXRzIG93biBkYXRhLCB0aGVuIGl0IG5lZWRzIHRvIHByZWZpeCBhbGxcbiAgICAgIC8vIGNvbXBvbmVudHMgd2l0aCBpdHMgZGF0YS1wYXRoLCBidXQgaWYgaXQgc2hhcmVzIGRhdGEgd2l0aCB0aGUgc2NoZW1hXG4gICAgICAvLyBjb21wb25lbnQsIHRoZW4gaXQgc2hvdWxkIHNoYXJlIHRoZSBkYXRhLXBhdGggbmFtZSBzcGFjZSB0b28uXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gdGhpcy5kYXRhUGF0aCA6IHRoaXMuc2NoZW1hQ29tcG9uZW50LmRhdGFQYXRoXG4gICAgfSxcblxuICAgIHZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgICAvLyBOT1RFOiBUaGlzIGlzIG5vdCB0aGUgc2FtZSBhcyBgc2NoZW1hLmRhdGFgIGhhbmRsaW5nIGluIERpdG9TY2hlbWEsXG4gICAgLy8gd2hlcmUgdGhlIGRhdGEgaXMgYWRkZWQgdG8gdGhlIGFjdHVhbCBjb21wb25lbnQuXG4gICAgY29uc3QgeyBkYXRhIH0gPSB0aGlzLnNjaGVtYVxuICAgIGlmIChkYXRhKSB7XG4gICAgICB0aGlzLm93bkRhdGEgPSBpc0Z1bmN0aW9uKGRhdGEpXG4gICAgICAgID8gZGF0YS5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgOiBkYXRhXG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIC8vIFJlZ2lzdGVyIHRoZSBwYW5lbHMgc28gdGhhdCBvdGhlciBjb21wb25lbnRzIGNhbiBmaW5kIHRoZW0gYnkgdGhlaXJcbiAgICAgIC8vIGRhdGEtcGF0aCwgZS5nLiBpbiBUeXBlTGlzdC5vbkZpbHRlckVycm9ycygpXG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5fcmVnaXN0ZXJQYW5lbCh0aGlzLCBhZGQpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXBhbmVscyhcbiAgdi1pZj1cInBhbmVscy5sZW5ndGggPiAwXCJcbilcbiAgZGl0by1wYW5lbChcbiAgICB2LWZvcj1cInsgc2NoZW1hLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50IH0gaW4gcGFuZWxzXCJcbiAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHNjaGVtYSlcIlxuICAgIDprZXk9XCJnZXRQYW5lbEtleShkYXRhUGF0aCwgdGFiQ29tcG9uZW50KVwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKHNjaGVtYS5uYW1lKVwiXG4gICAgOmRpc2FibGVkPVwic2NoZW1hLmRpc2FibGVkICE9IG51bGwgPyBzY2hlbWEuZGlzYWJsZWQgOiBkaXNhYmxlZFwiXG4gICAgOnBhbmVsVGFiQ29tcG9uZW50PVwidGFiQ29tcG9uZW50XCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tcGFuZWxzKFxuICAgIHYtaWY9XCJwYW5lbHMubGVuZ3RoID4gMFwiXG4gIClcbiAgICBkaXRvLXBhbmVsKFxuICAgICAgdi1mb3I9XCJ7IHNjaGVtYSwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCB9IGluIHBhbmVsc1wiXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHNjaGVtYSlcIlxuICAgICAgOmtleT1cImdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKHNjaGVtYS5uYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJzY2hlbWEuZGlzYWJsZWQgIT0gbnVsbCA/IHNjaGVtYS5kaXNhYmxlZCA6IGRpc2FibGVkXCJcbiAgICAgIDpwYW5lbFRhYkNvbXBvbmVudD1cInRhYkNvbXBvbmVudFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXBhbmVsc1xuICAgIG1heC13aWR0aDogJGNvbnRlbnQtc2lkZWJhci13aWR0aFxuICAgIG1pbi13aWR0aDogY2FsYygkY29udGVudC1zaWRlYmFyLXdpZHRoIC8gMilcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tcGFuZWxzJywge1xuICBwcm9wczoge1xuICAgIHBhbmVsczogeyB0eXBlOiBBcnJheSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpIHtcbiAgICAgIC8vIEFsbG93IHNlcGFyYXRlIHRhYnMgdG8gdXNlIHBhbmVscyBvZiB0aGUgc2FtZSBuYW1lLCBieVxuICAgICAgLy8gcHJlZml4aW5nIHRoZWlyIGtleSB3aXRoIHRoZSB0YWIgbmFtZS5cbiAgICAgIHJldHVybiB0YWJDb21wb25lbnQgPyBgJHt0YWJDb21wb25lbnQudGFifV8ke2RhdGFQYXRofWAgOiBkYXRhUGF0aFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1idXR0b25zKFxuICB2LWlmPVwiYnV0dG9uU2NoZW1hcyB8fCAkc2xvdHMuZGVmYXVsdFwiXG4gIC8qIFBhc3Mgb24gJGxpc3RlbmVycyBzbyB0aGF0IGRpdG8tZWRpdC1idXR0b25zIGNhbiBwYXNzIGV2ZW50cy4gKi9cbiAgdi1vbj1cIiRsaXN0ZW5lcnNcIlxuKVxuICBkaXRvLWNvbnRhaW5lcihcbiAgICB2LWZvcj1cIihidXR0b25TY2hlbWEsIGJ1dHRvbkRhdGFQYXRoKSBpbiBidXR0b25TY2hlbWFzXCJcbiAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGJ1dHRvblNjaGVtYSlcIlxuICAgIDprZXk9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgOnNjaGVtYT1cImJ1dHRvblNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGJ1dHRvblNjaGVtYS5uYW1lKVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpnZW5lcmF0ZUxhYmVscz1cImZhbHNlXCJcbiAgKVxuICAvLyBSZW5kZXIgZWFjaCBub2RlIGluIHRoZSBkZWZhdWx0IHNsb3QgdGhyb3VnaCBgZGl0by12bm9kZWAsIHNvIGl0IGNhbiBiZVxuICAvLyB3cmFwcGVkIGluIGEgYC5kaXRvLWNvbnRhaW5lcmAgY2xhc3MuXG4gIC5kaXRvLWNvbnRhaW5lcihcbiAgICB2LWZvcj1cIm5vZGUgaW4gJHNsb3RzLmRlZmF1bHRcIlxuICAgIHYtaWY9XCJub2RlLnRhZ1wiXG4gIClcbiAgICBkaXRvLXZub2RlKDpub2RlPVwibm9kZVwiKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tYnV0dG9ucyhcbiAgICB2LWlmPVwiYnV0dG9uU2NoZW1hcyB8fCAkc2xvdHMuZGVmYXVsdFwiXG4gICAgLyogUGFzcyBvbiAkbGlzdGVuZXJzIHNvIHRoYXQgZGl0by1lZGl0LWJ1dHRvbnMgY2FuIHBhc3MgZXZlbnRzLiAqL1xuICAgIHYtb249XCIkbGlzdGVuZXJzXCJcbiAgKVxuICAgIGRpdG8tY29udGFpbmVyKFxuICAgICAgdi1mb3I9XCIoYnV0dG9uU2NoZW1hLCBidXR0b25EYXRhUGF0aCkgaW4gYnV0dG9uU2NoZW1hc1wiXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGJ1dHRvblNjaGVtYSlcIlxuICAgICAgOmtleT1cImJ1dHRvbkRhdGFQYXRoXCJcbiAgICAgIDpzY2hlbWE9XCJidXR0b25TY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGJ1dHRvblNjaGVtYS5uYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJmYWxzZVwiXG4gICAgKVxuICAgIC8vIFJlbmRlciBlYWNoIG5vZGUgaW4gdGhlIGRlZmF1bHQgc2xvdCB0aHJvdWdoIGBkaXRvLXZub2RlYCwgc28gaXQgY2FuIGJlXG4gICAgLy8gd3JhcHBlZCBpbiBhIGAuZGl0by1jb250YWluZXJgIGNsYXNzLlxuICAgIC5kaXRvLWNvbnRhaW5lcihcbiAgICAgIHYtZm9yPVwibm9kZSBpbiAkc2xvdHMuZGVmYXVsdFwiXG4gICAgICB2LWlmPVwibm9kZS50YWdcIlxuICAgIClcbiAgICAgIGRpdG8tdm5vZGUoOm5vZGU9XCJub2RlXCIpXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbi5kaXRvLWJ1dHRvbnNcbiAgPiAuZGl0by1jb250YWluZXJcbiAgICBwYWRkaW5nOiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWJ1dHRvbnMnLCB7XG4gIHByb3ZpZGU6IHtcbiAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiBudWxsXG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIC8vIENvbXB1dGUgYSBidXR0b25zIGxpc3Qgd2hpY2ggaGFzIHRoZSBkYXRhUGF0aCBiYWtlZCBpbnRvIGl0cyBrZXlzLlxuICAgICAgY29uc3QgeyBkYXRhUGF0aCwgYnV0dG9ucyB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGJ1dHRvbnNcbiAgICAgICAgPyBPYmplY3QudmFsdWVzKGJ1dHRvbnMpLnJlZHVjZSgoc2NoZW1hcywgYnV0dG9uKSA9PiB7XG4gICAgICAgICAgc2NoZW1hc1thcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgYnV0dG9uLm5hbWUpXSA9IGJ1dHRvblxuICAgICAgICAgIHJldHVybiBzY2hlbWFzXG4gICAgICAgIH0sIHt9KVxuICAgICAgICA6IG51bGxcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuZGl0by1idXR0b25zLmRpdG8tZWRpdC1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgOmJ1dHRvbnM9XCJidXR0b25zXCJcbiAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICA6ZGF0YT1cImRhdGFcIlxuICA6bWV0YT1cIm1ldGFcIlxuICA6c3RvcmU9XCJzdG9yZVwiXG4gIC8qIFByZXZlbnQgY2xpY2sgZXZlbnRzIGZyb20gYnViYmxpbmcgdG8gZGl0by1sYWJlbDogKi9cbiAgQGNsaWNrLnN0b3BcbilcbiAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgYS5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiaXNEcmFnZ2FibGVcIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICApXG4gIHJvdXRlci1saW5rLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJpc0VkaXRhYmxlXCJcbiAgICA6dG89XCJ7IHBhdGg6IGVkaXRQYXRoIH1cIiBhcHBlbmRcbiAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgKVxuICBkaXRvLWNyZWF0ZS1idXR0b24oXG4gICAgdi1pZj1cImlzQ3JlYXRhYmxlXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6cGF0aD1cImNyZWF0ZVBhdGhcIlxuICAgIDp2ZXJiPVwidmVyYnMuY3JlYXRlXCJcbiAgICA6dGV4dD1cImNyZWF0ZUJ1dHRvblRleHRcIlxuICApXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiaXNEZWxldGFibGVcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgQGNsaWNrPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgZGl0by1idXR0b25zLmRpdG8tZWRpdC1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgICA6YnV0dG9ucz1cImJ1dHRvbnNcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIC8qIFByZXZlbnQgY2xpY2sgZXZlbnRzIGZyb20gYnViYmxpbmcgdG8gZGl0by1sYWJlbDogKi9cbiAgICBAY2xpY2suc3RvcFxuICApXG4gICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgdi1pZj1cImlzRHJhZ2dhYmxlXCJcbiAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgIClcbiAgICByb3V0ZXItbGluay5kaXRvLWJ1dHRvbihcbiAgICAgIHYtaWY9XCJpc0VkaXRhYmxlXCJcbiAgICAgIDp0bz1cInsgcGF0aDogZWRpdFBhdGggfVwiIGFwcGVuZFxuICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gICAgKVxuICAgIGRpdG8tY3JlYXRlLWJ1dHRvbihcbiAgICAgIHYtaWY9XCJpc0NyZWF0YWJsZVwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpwYXRoPVwiY3JlYXRlUGF0aFwiXG4gICAgICA6dmVyYj1cInZlcmJzLmNyZWF0ZVwiXG4gICAgICA6dGV4dD1cImNyZWF0ZUJ1dHRvblRleHRcIlxuICAgIClcbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB2LWlmPVwiaXNEZWxldGFibGVcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgQGNsaWNrPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tZWRpdC1idXR0b25zXG4gICAgLy8gT3ZlcnJpZGUgY3Vyc29yIGZyb20gY29sbGFwc2libGUgZGl0by1sYWJlbDpcbiAgICBjdXJzb3I6IGRlZmF1bHRcbiAgICBmbGV4OiBub25lXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGNhcGl0YWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tZWRpdC1idXR0b25zJywge1xuICBwcm9wczoge1xuICAgIGRyYWdnYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY3JlYXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGVsZXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdFBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgY3JlYXRlUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb3JtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYS5mb3JtKVxuICAgIH0sXG5cbiAgICBpc0RyYWdnYWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc09wdGlvbignZHJhZ2dhYmxlJylcbiAgICB9LFxuXG4gICAgaXNFZGl0YWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc09wdGlvbignZWRpdGFibGUnKSAmJiAhIXRoaXMuZWRpdFBhdGhcbiAgICB9LFxuXG4gICAgaXNDcmVhdGFibGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNPcHRpb24oJ2NyZWF0YWJsZScpICYmICEhdGhpcy5jcmVhdGVQYXRoXG4gICAgfSxcblxuICAgIGlzRGVsZXRhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3B0aW9uKCdkZWxldGFibGUnKVxuICAgIH0sXG5cbiAgICBjcmVhdGVCdXR0b25UZXh0KCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgLy8gQWxsb3cgc2NoZW1hIHRvIG92ZXJyaWRlIGNyZWF0ZSBidXR0b24gdGhyb3VnaCBjcmVhdGFibGUgb2JqZWN0OlxuICAgICAgICB0aGlzLnNjaGVtYS5jcmVhdGFibGU/LmxhYmVsIHx8XG4gICAgICAgIChcbiAgICAgICAgICAvLyBBdXRvLWdlbmVyYXRlIGNyZWF0ZSBidXR0b24gbGFiZWxzIGZyb20gZnJvbSBsYWJlbHMgZm9yIGxpc3RcbiAgICAgICAgICAvLyBzb3VyY2VzIHdpdGggb25seSBvbmUgZm9ybTpcbiAgICAgICAgICB0aGlzLmZvcm1MYWJlbCAmJlxuICAgICAgICAgIGAke2NhcGl0YWxpemUodGhpcy52ZXJicy5jcmVhdGUpfSAke3RoaXMuZm9ybUxhYmVsfWBcbiAgICAgICAgKSB8fFxuICAgICAgICBudWxsXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYXNPcHRpb24obmFtZSkge1xuICAgICAgLy8gVGhlIG9wdGlvbnMgb2YgdGhlIG91dGVyIGNvbXBvbmVudCBhcmUgcGFzc2VkIHRvIHRoZSBidXR0b25zIGNvbXBvbmVudFxuICAgICAgLy8gdGhyb3VnaCBwcm9wZXJ0aWVzIGB0aGlzW25hbWVdYCwgYnV0IGNhbiBiZSBkaXNhYmxlZCBvbiBhIHBlci1mb3JtXG4gICAgICAvLyBiYXNpcyBieSBzZXR0aW5nIGBzY2hlbWFbbmFtZV1gIHRvIGBmYWxzZWAuXG4gICAgICByZXR1cm4gISEodGhpc1tuYW1lXSAmJiB0aGlzLnNjaGVtYVtuYW1lXSAhPT0gZmFsc2UpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWNyZWF0ZS1idXR0b25cbiAgdGVtcGxhdGUodi1pZj1cInNob3dQdWxsZG93blwiKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgICAgIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gICAgICA6dGl0bGU9XCJsYWJlbGl6ZSh2ZXJiKVwiXG4gICAgKSB7eyB0ZXh0IH19XG4gICAgdWwuZGl0by1wdWxsZG93bihcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiXG4gICAgKVxuICAgICAgbGkodi1mb3I9XCIoZm9ybSwgdHlwZSkgaW4gZm9ybXNcIilcbiAgICAgICAgYShcbiAgICAgICAgICB2LWlmPVwiaXNDcmVhdGFibGUoZm9ybSlcIlxuICAgICAgICAgIDpjbGFzcz1cImBkaXRvLXR5cGUtJHt0eXBlfWBcIlxuICAgICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odHlwZSlcIlxuICAgICAgICAgIEBtb3VzZXVwPVwib25QdWxsZG93bk1vdXNlVXAodHlwZSlcIlxuICAgICAgICApIHt7IGdldExhYmVsKGZvcm0pIH19XG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICB2LWVsc2VcbiAgICA6dHlwZT1cImlzSW5saW5lZCA/ICdidXR0b24nIDogJ3N1Ym1pdCdcIlxuICAgIEBjbGljaz1cImNyZWF0ZUl0ZW0oZm9ybXMuZGVmYXVsdClcIlxuICAgIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gICAgOnRpdGxlPVwibGFiZWxpemUodmVyYilcIlxuICApIHt7IHRleHQgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWNyZWF0ZS1idXR0b25cbiAgICB0ZW1wbGF0ZSh2LWlmPVwic2hvd1B1bGxkb3duXCIpXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKClcIlxuICAgICAgICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICAgICAgICA6dGl0bGU9XCJsYWJlbGl6ZSh2ZXJiKVwiXG4gICAgICApIHt7IHRleHQgfX1cbiAgICAgIHVsLmRpdG8tcHVsbGRvd24oXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiXG4gICAgICApXG4gICAgICAgIGxpKHYtZm9yPVwiKGZvcm0sIHR5cGUpIGluIGZvcm1zXCIpXG4gICAgICAgICAgYShcbiAgICAgICAgICAgIHYtaWY9XCJpc0NyZWF0YWJsZShmb3JtKVwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJgZGl0by10eXBlLSR7dHlwZX1gXCJcbiAgICAgICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odHlwZSlcIlxuICAgICAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh0eXBlKVwiXG4gICAgICAgICAgKSB7eyBnZXRMYWJlbChmb3JtKSB9fVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHYtZWxzZVxuICAgICAgOnR5cGU9XCJpc0lubGluZWQgPyAnYnV0dG9uJyA6ICdzdWJtaXQnXCJcbiAgICAgIEBjbGljaz1cImNyZWF0ZUl0ZW0oZm9ybXMuZGVmYXVsdClcIlxuICAgICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICAgIDp0aXRsZT1cImxhYmVsaXplKHZlcmIpXCJcbiAgICApIHt7IHRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1jcmVhdGUtYnV0dG9uXG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgLmRpdG8tcHVsbGRvd25cbiAgICAgIHJpZ2h0OiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxsZG93bk1peGluIGZyb20gJy4uL21peGlucy9QdWxsZG93bk1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0Rm9ybVNjaGVtYXMsIGlzSW5saW5lZCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWNyZWF0ZS1idXR0b24nLCB7XG4gIG1peGluczogW1B1bGxkb3duTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB2ZXJiOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0ZXh0OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb3JtcygpIHtcbiAgICAgIHJldHVybiBnZXRGb3JtU2NoZW1hcyh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgIH0sXG5cbiAgICBpc0lubGluZWQoKSB7XG4gICAgICByZXR1cm4gaXNJbmxpbmVkKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBzaG93UHVsbGRvd24oKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5mb3JtcykubGVuZ3RoID4gMSB8fCAhdGhpcy5mb3Jtcy5kZWZhdWx0XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBpc0NyZWF0YWJsZShmb3JtKSB7XG4gICAgICAvLyBGb3JtcyBjYW4gYmUgZXhjbHVkZWQgZnJvbSB0aGUgbGlzdCBieSBwcm92aWRpbmcgYGNyZWF0YWJsZTogZmFsc2VgXG4gICAgICByZXR1cm4gZm9ybS5jcmVhdGFibGUgIT09IGZhbHNlXG4gICAgfSxcblxuICAgIGNyZWF0ZUl0ZW0oZm9ybSwgdHlwZSA9IG51bGwpIHtcbiAgICAgIGlmICh0aGlzLmlzQ3JlYXRhYmxlKGZvcm0pKSB7XG4gICAgICAgIGlmICh0aGlzLmlzSW5saW5lZCkge1xuICAgICAgICAgIHRoaXMuc291cmNlQ29tcG9uZW50LmNyZWF0ZUl0ZW0oZm9ybSwgdHlwZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7XG4gICAgICAgICAgICBwYXRoOiBgJHt0aGlzLnBhdGh9L2NyZWF0ZWAsXG4gICAgICAgICAgICBxdWVyeTogeyB0eXBlIH0sXG4gICAgICAgICAgICBhcHBlbmQ6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBhbGxvd2VkIHRvIGNyZWF0ZSBpdGVtIGZvciBnaXZlbiBmb3JtJylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93blNlbGVjdCh0eXBlKSB7XG4gICAgICB0aGlzLmNyZWF0ZUl0ZW0odGhpcy5mb3Jtc1t0eXBlXSwgdHlwZSlcbiAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1jbGlwYm9hcmQuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgdi1pZj1cImNsaXBib2FyZFwiXG4pXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1jb3B5KFxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHJlZj1cImNvcHlEYXRhXCJcbiAgICB0aXRsZT1cIkNvcHkgRGF0YVwiXG4gICAgOmRpc2FibGVkPVwiIWNvcHlFbmFibGVkXCJcbiAgICBAY2xpY2s9XCJvbkNvcHlcIlxuICApXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1wYXN0ZShcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB0aXRsZT1cIlBhc3RlIERhdGFcIlxuICAgIDpkaXNhYmxlZD1cIiFwYXN0ZUVuYWJsZWRcIlxuICAgIEBjbGljaz1cIm9uUGFzdGVcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1jbGlwYm9hcmQuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgICB2LWlmPVwiY2xpcGJvYXJkXCJcbiAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1jb3B5KFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICByZWY9XCJjb3B5RGF0YVwiXG4gICAgICB0aXRsZT1cIkNvcHkgRGF0YVwiXG4gICAgICA6ZGlzYWJsZWQ9XCIhY29weUVuYWJsZWRcIlxuICAgICAgQGNsaWNrPVwib25Db3B5XCJcbiAgICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLXBhc3RlKFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICB0aXRsZT1cIlBhc3RlIERhdGFcIlxuICAgICAgOmRpc2FibGVkPVwiIXBhc3RlRW5hYmxlZFwiXG4gICAgICBAY2xpY2s9XCJvblBhc3RlXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNPYmplY3QsIGNsb25lLCBkZWluZGVudCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWNsaXBib2FyZCcsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgY2xpcGJvYXJkOiB7IHR5cGU6IFtCb29sZWFuLCBPYmplY3RdLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29weUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgcGFzdGVFbmFibGVkOiBmYWxzZSxcbiAgICAgIGZpeENsaXBib2FyZDogdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsaXBib2FyZE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3QodGhpcy5jbGlwYm9hcmQpID8gdGhpcy5jbGlwYm9hcmQgOiB7fVxuICAgIH0sXG5cbiAgICBjb3B5RGF0YSgpIHtcbiAgICAgIGNvbnN0IHsgY29weSB9ID0gdGhpcy5jbGlwYm9hcmRPcHRpb25zXG4gICAgICByZXR1cm4gY29weVxuICAgICAgICA/IGNsaXBib2FyZERhdGEgPT4gY29weS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgY2xpcGJvYXJkRGF0YVxuICAgICAgICB9KSlcbiAgICAgICAgOiBjbGlwYm9hcmREYXRhID0+IGNsb25lKGNsaXBib2FyZERhdGEpXG4gICAgfSxcblxuICAgIHBhc3RlRGF0YSgpIHtcbiAgICAgIGNvbnN0IHsgcGFzdGUgfSA9IHRoaXMuY2xpcGJvYXJkT3B0aW9uc1xuICAgICAgcmV0dXJuIHBhc3RlXG4gICAgICAgID8gY2xpcGJvYXJkRGF0YSA9PiBwYXN0ZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgY2xpcGJvYXJkRGF0YVxuICAgICAgICB9KSlcbiAgICAgICAgOiBjbGlwYm9hcmREYXRhID0+IGNsaXBib2FyZERhdGFcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICAvLyBDaGVjayBjbGlwYm9hcmQgY29udGVudCB3aGVuZXZlciBzb21ldGhpbmcgZ2V0cyBjb3BpZWQgb3IgdGhlIHdpbmRvdyBnZXRzXG4gICAgLy8gKHJlKWFjdGl2YXRlZCwgYXMgdGhvc2UgYXJlIHRoZSBtb21lbnRzIHdoZW4gdGhlIGNsaXBib2FyZCBjYW4gY2hhbmdlOlxuICAgIHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgIGNvcHk6IHRoaXMuY2hlY2tDbGlwYm9hcmRcbiAgICB9KVxuICAgIHRoaXMuZG9tT24od2luZG93LCB7XG4gICAgICBmb2N1czogdGhpcy5jaGVja0NsaXBib2FyZFxuICAgIH0pXG4gICAgdGhpcy4kd2F0Y2goJ2RhdGEnLCB7XG4gICAgICAvLyBDaGVjayByaWdodCBhd2F5IGFsc28gaW4gY2FzZSB0aGVyZSdzIGFscmVhZHkgZGF0YSAoZS5nLiBjcmVhdGUgZm9ybSkuXG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBoYW5kbGVyOiAodG8sIGZyb20pID0+IHtcbiAgICAgICAgaWYgKHRvICE9PSBmcm9tKSB7XG4gICAgICAgICAgdGhpcy5jaGVja0NsaXBib2FyZCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBhc3luYyBnZXRDbGlwYm9hcmREYXRhKHJlcG9ydCkge1xuICAgICAgLy8gVXNlIHRoZSBpbnRlcm5hbCBjbGlwYm9hcmQgYXMgZmFsbGJhY2suXG4gICAgICBsZXQgeyBjbGlwYm9hcmREYXRhIH0gPSB0aGlzLmFwcFN0YXRlXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBqc29uID0gYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ucmVhZFRleHQ/LigpXG4gICAgICAgIGlmICh0aGlzLmZpeENsaXBib2FyZCAmJiBqc29uKSB7XG4gICAgICAgICAgLy8gVGhpcyBhcHBlYXJzIHRvIGJlIG5lZWRlZCBvbiBTYWZhcmkgdG8gcHJldmVudCBhIHN0cmFuZ2UgXCJQYXN0ZVwiXG4gICAgICAgICAgLy8gYnV0dG9uIGZyb20gYXBwZWFyaW5nIHdoZW4gdGhlIGNsaXBib2FyZCBpcyBhY2Nlc3NlZCAod2h5PyEpLlxuICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQ/LndyaXRlVGV4dD8uKGpzb24pXG4gICAgICAgICAgdGhpcy5maXhDbGlwYm9hcmQgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGlmIChqc29uKSB7XG4gICAgICAgICAgY2xpcGJvYXJkRGF0YSA9IEpTT04ucGFyc2UoanNvbilcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChyZXBvcnQpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJyLm5hbWUsIGVyci5tZXNzYWdlKVxuICAgICAgICAgIGlmIChlcnIubmFtZSA9PT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICAgICAgYWxlcnQoZGVpbmRlbnRgXG4gICAgICAgICAgICAgIFRoZSBkYXRhIGluIHRoZSBjbGlwYm9hcmQgYXBwZWFycyB0byBiZSBtYWxmb3JtZWQ6XG4gICAgICAgICAgICAgICR7ZXJyLm1lc3NhZ2V9XG4gICAgICAgICAgICBgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgeyAkc2NoZW1hLCAuLi5kYXRhIH0gPSBjbGlwYm9hcmREYXRhIHx8IHt9XG4gICAgICByZXR1cm4gJHNjaGVtYSA9PT0gdGhpcy5zY2hlbWFDb21wb25lbnQ/LnNjaGVtYS5uYW1lID8gZGF0YSA6IG51bGxcbiAgICB9LFxuXG4gICAgYXN5bmMgY2hlY2tDbGlwYm9hcmQoKSB7XG4gICAgICB0aGlzLmNvcHlFbmFibGVkID0gISF0aGlzLmRhdGFcbiAgICAgIC8vIFNlZSBpZiB0aGUgY2xpcGJvYXJkIGNvbnRlbnQgaXMgdmFsaWQgSlNPTiBkYXRhIHRoYXQgaXMgY29tcGF0aWJsZVxuICAgICAgLy8gd2l0aCB0aGUgY3VycmVudCB0YXJnZXQgc2NoZW1hLCBhbmQgb25seSB0aGVuIGFjdGl2YXRlIHRoZSBwYXN0aW5nOlxuICAgICAgdGhpcy5wYXN0ZUVuYWJsZWQgPSAhIShhd2FpdCB0aGlzLmdldENsaXBib2FyZERhdGEoZmFsc2UpKSAvLyBkb24ndCByZXBvcnRcbiAgICB9LFxuXG4gICAgYXN5bmMgb25Db3B5KCkge1xuICAgICAgbGV0IGRhdGEgPSB0aGlzLnNjaGVtYUNvbXBvbmVudD8uY2xpcGJvYXJkRGF0YVxuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IGRhdGEgJiYgdGhpcy5jb3B5RGF0YShkYXRhKVxuICAgICAgICAvLyBLZWVwIGFuIGludGVybmFsIGNsaXBib2FyZCBhcyBmYWxsYmFjay5cbiAgICAgICAgdGhpcy5hcHBTdGF0ZS5jbGlwYm9hcmREYXRhID0gZGF0YVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKVxuICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQ/LndyaXRlVGV4dD8uKGpzb24pXG4gICAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiBhY3RpdmF0ZSB0aGUgcGFzdGUgYnV0dG9uLCBkZXBlbmRkaW5nIG9uIGJyb3dzZXJzOlxuICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tDbGlwYm9hcmQoKVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJyLm5hbWUsIGVyci5tZXNzYWdlKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICBhbGVydChlcnJvci5tZXNzYWdlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBvblBhc3RlKCkge1xuICAgICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLmdldENsaXBib2FyZERhdGEodHJ1ZSkgLy8gcmVwb3J0XG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gZGF0YSAmJiB0aGlzLnBhc3RlRGF0YShkYXRhKVxuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50LnNldERhdGEoZGF0YSlcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgYWxlcnQoZXJyb3IubWVzc2FnZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldExvYWRpbmcoaXNMb2FkaW5nLCB7IHVwZGF0ZVJvb3QgPSBmYWxzZSwgdXBkYXRlVmlldyA9IGZhbHNlIH0gPSB7fSkge1xuICAgICAgaWYgKCF0aGlzLmlzTG9hZGluZyBeICFpc0xvYWRpbmcpIHsgLy8gQm9vbGVhbiB4b3JcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSAhIWlzTG9hZGluZ1xuICAgICAgICBpZiAodXBkYXRlUm9vdCkge1xuICAgICAgICAgIHRoaXMucm9vdENvbXBvbmVudC5yZWdpc3RlckxvYWRpbmcoaXNMb2FkaW5nKVxuICAgICAgICB9XG4gICAgICAgIGlmICh1cGRhdGVWaWV3KSB7XG4gICAgICAgICAgdGhpcy52aWV3Q29tcG9uZW50LnNldExvYWRpbmcodGhpcy5pc0xvYWRpbmcpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi9JdGVtTWl4aW4uanMnXG5pbXBvcnQgTG9hZGluZ01peGluIGZyb20gJy4vTG9hZGluZ01peGluLmpzJ1xuaW1wb3J0IHsgc2V0RGVmYXVsdHMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGdldFJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0l0ZW1NaXhpbiwgTG9hZGluZ01peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMsXG4gICAgICAvLyBQYXNzIGxvY2FsIHZlcmJzIG92ZXJyaWRlcyBvbiB0byBjaGlsZHJlbiwgc2VlIHZlcmJzKCkgY29tcHV0ZWQgcHJvcC5cbiAgICAgICR2ZXJiczogKCkgPT4gdGhpcy52ZXJicyxcbiAgICAgICRpc1BvcHVsYXRlZDogKCkgPT4gdGhpcy5oYXNEYXRhXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvYWRlZERhdGE6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHJlc291cmNlKCkge1xuICAgICAgLy8gUmV0dXJucyB0aGUgcmVzb3VyY2Ugb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcmVzb3VyY2UgZm9yIHRoZVxuICAgICAgLy8gYXNzb2NpYXRlZCBzb3VyY2Ugc2NoZW1hLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2UoKVxuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICAvLyBUaGlzIGNvbXBvbmVudCBpcyBhIGRhdGEtc291cmNlIGlmIGl0IGhhcyBhbiBhc3NvY2lhdGVkIEFQSSByZXNvdXJjZTpcbiAgICAgIHJldHVybiAhIXRoaXMucmVzb3VyY2VcbiAgICB9LFxuXG4gICAgbGlua3NUb1ZpZXcoKSB7XG4gICAgICAvLyBSZXR1cm5zIGBmYWxzZWBoZXJlLCBidXQgaXMgb3ZlcnJpZGRlbiB0byByZXR1cm4gYHRydWVgIGluXG4gICAgICAvLyBgU291cmNlTWl4aW5gIGZvciBjb21wb25lbnQgdGhhdCBkbyBub3QgcHJvdmlkZSB0aGVpciBvd24gZGF0YSwgYnV0XG4gICAgICAvLyBlZGl0IHRoZWlyIGl0ZW1zIHRocm91Z2ggYSBsaW5rZWQgdmlldy4gIEluIHRoaXMgY2FzZSwgcmVhbCBpZHMgbmVlZCB0b1xuICAgICAgLy8gYmUgdXNlZC5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBpc1RyYW5zaWVudCgpIHtcbiAgICAgIC8vIENoZWNrIHRoZSBmb3JtIHRoYXQgdGhpcyBjb21wb25lbnQgYmVsb25ncyB0byBhcyB3ZWxsLCBzaW5jZSBpdCBtYXkgYmVcbiAgICAgIC8vIGluIGNyZWF0aW9uIG1vZGUsIHdoaWNoIG1ha2VzIGl0IHRyYW5zaWVudC5cbiAgICAgIC8vIE5PVEU6IFRoaXMgZG9lcyBub3QgbG9vcCBlbmRsZXNzbHkgYmVjYXVzZSBEaXRvRm9ybSByZWRlZmluZXNcbiAgICAgIC8vIGBpc1RyYW5zaWVudCgpYCB0byBvbmx5IHJldHVybiBgIXRoaXMucHJvdmlkZXNEYXRhYC5cbiAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZvcm1Db21wb25lbnRcbiAgICAgIHJldHVybiAoXG4gICAgICAgICF0aGlzLnByb3ZpZGVzRGF0YSAmJlxuICAgICAgICAhdGhpcy5saW5rc1RvVmlldyB8fFxuICAgICAgICBmb3JtICYmIChcbiAgICAgICAgICBmb3JtLmlzVHJhbnNpZW50IHx8XG4gICAgICAgICAgZm9ybS5pc0NyZWF0aW5nXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgdHJhbnNpZW50Tm90ZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuaXNUcmFuc2llbnQgJiZcbiAgICAgICAgJzxiPk5vdGU8L2I+OiB0aGUgcGFyZW50IHN0aWxsIG5lZWRzIHRvIGJlIHNhdmVkICcgK1xuICAgICAgICAnaW4gb3JkZXIgdG8gcGVyc2lzdCB0aGlzIGNoYW5nZS4nXG4gICAgICApXG4gICAgfSxcblxuICAgIHNob3VsZExvYWQoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAhdGhpcy5pc1RyYW5zaWVudCAmJlxuICAgICAgICAhdGhpcy5pc0xvYWRpbmdcbiAgICAgIClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIC8vIEJhc2UgZGVmaW5pdGlvbiwgd2lsbCBiZSBvdmVycmlkZGVuIGJ5IERpdG9Gb3JtIGFuZCBTb3VyY2VNaXhpblxuICAgICAgcmV0dXJuICEhdGhpcy5sb2FkZWREYXRhXG4gICAgfSxcblxuICAgIHZlcmJzKCkge1xuICAgICAgLy8gVGhlIGFjdHVhbCBjb2RlIGlzIHRoZSBgZ2V0VmVyYnMoKWAgbWV0aG9kLCBmb3IgZWFzaWVyIG92ZXJyaWRpbmcgb2ZcbiAgICAgIC8vIHRoaXMgY29tcHV0ZWQgcHJvcGVydHkgaW4gY29tcG9uZW50cyB0aGF0IHVzZSB0aGUgUmVzb3VyY2VNaXhpbi5cbiAgICAgIHJldHVybiB0aGlzLmdldFZlcmJzKClcbiAgICB9LFxuXG4gICAgcGFnaW5hdGlvblJhbmdlKCkge1xuICAgICAgLy8gT25seSBhcHBseSBwYWdpbmF0aW9uIHRvIGxpc3RzLlxuICAgICAgY29uc3QgeyBwYWdpbmF0ZTogYW1vdW50IH0gPSB0aGlzLnNvdXJjZVNjaGVtYVxuICAgICAgaWYgKHRoaXMuaXNMaXN0U291cmNlICYmIGFtb3VudCkge1xuICAgICAgICBjb25zdCB7IHBhZ2UgPSAwIH0gPSB0aGlzLnF1ZXJ5IHx8IHt9XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gcGFnZSAqIGFtb3VudFxuICAgICAgICByZXR1cm4gW3N0YXJ0LCBzdGFydCArIGFtb3VudCAtIDFdXG4gICAgICB9XG4gICAgfSxcblxuICAgIHF1ZXJ5UGFyYW1zKCkge1xuICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnBhZ2luYXRpb25SYW5nZVxuICAgICAgY29uc3QgeyBwYWdlLCAuLi5xdWVyeSB9ID0gdGhpcy5xdWVyeSB8fCB7fVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucXVlcnksIC8vIFF1ZXJ5IG1heSBvdmVycmlkZSBzY29wZS5cbiAgICAgICAgLi4uKHJhbmdlICYmIHtcbiAgICAgICAgICAvLyBQYXNzIHBhZ2luYXRpb24gYXMgcmFuZ2UsIHNvIHRoYXQgd2UgYXV0b21hdGljYWxseSBnZXQgT2JqZWN0aW9uJ3NcbiAgICAgICAgICAvLyByZXN1bHRzIGNvdW50aW5nOlxuICAgICAgICAgIHJhbmdlOiByYW5nZS5qb2luKCcsJylcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICAvLyBXaGVuIGNyZWF0aW5nIG5lc3RlZCBkYXRhLCB3ZSBzdGlsbCBuZWVkIHRvIGNhbGwgc2V0dXBEYXRhKClcbiAgICBpZiAodGhpcy5wcm92aWRlc0RhdGEgfHwgdGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICB0aGlzLnNldHVwRGF0YSgpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRSZXNvdXJjZSgpIHtcbiAgICAgIC8vIFRoaXMgaXMgZGVmaW5lZCBhcyBhIG1ldGhvZCBzbyB0aGUgY29tcHV0ZWQgYHJlc291cmNlYCBnZXR0ZXIgY2FuXG4gICAgICAvLyBiZSBvdmVycmlkZGVuIGFuZCBgc3VwZXJgIGZ1bmN0aW9uYWxpdHkgY2FuIHN0aWxsIGJlIGFjY2Vzc2VkLlxuICAgICAgcmV0dXJuIGdldFJlc291cmNlKHRoaXMuc291cmNlU2NoZW1hPy5yZXNvdXJjZSwge1xuICAgICAgICB0eXBlOiAnY29sbGVjdGlvbicsXG4gICAgICAgIHBhcmVudDogdGhpcy5wYXJlbnRGb3JtQ29tcG9uZW50Py5yZXNvdXJjZSA/PyBudWxsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRWZXJicygpIHtcbiAgICAgIGNvbnN0IHZlcmJzID0gdGhpcy4kdmVyYnMoKVxuICAgICAgcmV0dXJuIHRoaXMuaXNUcmFuc2llbnRcbiAgICAgICAgPyB7XG4gICAgICAgICAgLi4udmVyYnMsXG4gICAgICAgICAgLy8gT3ZlcnJpZGUgZGVmYXVsdCB2ZXJicyB3aXRoIHRoZWlyIHRyYW5zaWVudCB2ZXJzaW9uczpcbiAgICAgICAgICBjcmVhdGU6ICdhZGQnLFxuICAgICAgICAgIGNyZWF0ZWQ6ICdhZGRlZCcsXG4gICAgICAgICAgc2F2ZTogJ2FwcGx5JyxcbiAgICAgICAgICBzYXZlZDogJ2FwcGxpZWQnLFxuICAgICAgICAgIGRlbGV0ZTogJ3JlbW92ZScsXG4gICAgICAgICAgZGVsZXRlZDogJ3JlbW92ZWQnXG4gICAgICAgIH1cbiAgICAgICAgOiB2ZXJic1xuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLmxvYWRlZERhdGEgPSBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgdGhpcy5sb2FkZWREYXRhID0gZGF0YVxuICAgIH0sXG5cbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICAvLyBBY3R1YWwgY29kZSBpcyBpbiBzZXBhcmF0ZSBmdW5jdGlvbiBzbyBpdCdzIGVhc2VyIHRvIG92ZXJyaWRlXG4gICAgICAvLyBgc2V0dXBEYXRhKClgIGFuZCBhbmQgY2FsbCBgZW5zdXJlRGF0YSgpYCBmcm9tIHRoZSBvdmVycmlkZXMsXG4gICAgICAvLyBzZWUgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluLlxuICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICB9LFxuXG4gICAgZW5zdXJlRGF0YSgpIHtcbiAgICAgIGlmICh0aGlzLnNob3VsZExvYWQpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzRGF0YSkge1xuICAgICAgICAgIHRoaXMucmVsb2FkRGF0YSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2FkRGF0YSh0cnVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlbG9hZERhdGEoKSB7XG4gICAgICB0aGlzLmxvYWREYXRhKGZhbHNlKVxuICAgIH0sXG5cbiAgICBsb2FkRGF0YShjbGVhcikge1xuICAgICAgaWYgKCF0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIGlmIChjbGVhcikge1xuICAgICAgICAgIHRoaXMuY2xlYXJEYXRhKClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlcXVlc3REYXRhKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlRGF0YShzY2hlbWEsIHR5cGUpIHtcbiAgICAgIHJldHVybiBzZXREZWZhdWx0cyhzY2hlbWEsIHR5cGUgPyB7IHR5cGUgfSA6IHt9LCB0aGlzKVxuICAgIH0sXG5cbiAgICByZXF1ZXN0RGF0YSgpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5xdWVyeVBhcmFtc1xuICAgICAgdGhpcy5oYW5kbGVSZXF1ZXN0KHsgbWV0aG9kOiAnZ2V0JywgcXVlcnkgfSwgKGVyciwgcmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgY29uc3QgeyBkYXRhIH0gPSByZXNwb25zZVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBkYXRhPy50eXBlID09PSAnRmlsdGVyVmFsaWRhdGlvbicgJiZcbiAgICAgICAgICAgICAgdGhpcy5vbkZpbHRlckVycm9ycz8uKGRhdGEuZXJyb3JzKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzVW5hdXRob3JpemVkRXJyb3IocmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgIC8vIFRPRE86IENhbiB3ZSByZWFsbHkgc3dhbGxvdyB0aGVzZSBlcnJvcnM/XG4gICAgICAgICAgICAgIC8vIElzIGNhbGxpbmcgYGVuc3VyZVVzZXIoKWAgaW4gYG9uQmVmb3JlUmVxdWVzdCgpYCBlbm91Z2g/XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2V0RGF0YShyZXNwb25zZS5kYXRhKVxuICAgICAgICAgIHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdsb2FkJylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0aW9uRXJyb3IocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXNwb25zZT8uc3RhdHVzID09PSA0MDBcbiAgICB9LFxuXG4gICAgaXNVbmF1dGhvcml6ZWRFcnJvcihyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlPy5zdGF0dXMgPT09IDQwMVxuICAgIH0sXG5cbiAgICBhc3luYyBoYW5kbGVSZXF1ZXN0KHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIHJlc291cmNlID0gdGhpcy5yZXNvdXJjZSxcbiAgICAgIHF1ZXJ5LFxuICAgICAgZGF0YVxuICAgIH0sIGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBsb2FkaW5nT3B0aW9ucyA9IHtcbiAgICAgICAgdXBkYXRlUm9vdDogdHJ1ZSwgLy8gRGlzcGxheSBzcGlubmVyIGluIGhlYWRlciB3aGVuIGxvYWRpbmcgaW4gcmVzb3VyY2VzXG4gICAgICAgIHVwZGF0ZVZpZXc6IHRoaXMuaXNJblZpZXcgLy8gTm90aWZ5IHZpZXcgb2YgbG9hZGluZyBmb3IgdmlldyBjb21wb25lbnRzXG4gICAgICB9XG4gICAgICB0aGlzLnNldExvYWRpbmcodHJ1ZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICBjb25zdCByZXF1ZXN0ID0geyBtZXRob2QsIHJlc291cmNlLCBkYXRhLCBxdWVyeSB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3QocmVxdWVzdClcbiAgICAgICAgLy8gUGFzcyBib3RoIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHRvIHRoZSBjYWxsYmFjaywgc28gdGhleSBjYW4gYmVcbiAgICAgICAgLy8gZXhwb3NlZCB0byBmdXJ0aGVyIGNhbGxiYWNrcyB0aHJvdWdoIERpdG9Db250ZXh0LlxuICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIElmIGNhbGxiYWNrIHJldHVybnMgdHJ1ZSwgZXJyb3JzIHdlcmUgYWxyZWFkeSBoYW5kbGVkLlxuICAgICAgICBjb25zdCB7IHJlc3BvbnNlIH0gPSBlcnJvclxuICAgICAgICBpZiAoIWNhbGxiYWNrKGVycm9yLCByZXNwb25zZSkpIHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2U/LmRhdGFcbiAgICAgICAgICBpZiAoZGF0YSAmJiBpc1N0cmluZyhkYXRhLnR5cGUpKSB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIHRpdGxlOiBsYWJlbGl6ZShkYXRhLnR5cGUpLFxuICAgICAgICAgICAgICB0ZXh0OiBkYXRhLm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgICAgICAgdGV4dDogZXJyb3JcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnNldExvYWRpbmcoZmFsc2UsIGxvYWRpbmdPcHRpb25zKVxuICAgIH0sXG5cbiAgICBnZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZCkge1xuICAgICAgLy8gQ29udmVudGlvbjogb25seSBwb3N0LCBwdXQgYW5kIHBhdGNoIHJlcXVlc3RzIHBhc3MgdGhlIGRhdGEgYXMgcGF5bG9hZC5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXS5pbmNsdWRlcyhtZXRob2QpICYmIChcbiAgICAgICAgICAvLyBUT0RPOiBVc2UgYGhhbmRsZURhdGFTY2hlbWEoKWAgYXN5bmNocm9ub3VzbHkgaGVyZSBpbnN0ZWFkLCB0b1xuICAgICAgICAgIC8vIG9mZmVyIHRoZSBzYW1lIGFtb3VudCBvZiBwb3NzaWJpbGl0aWVzIGZvciBkYXRhIGxvYWRpbmcuXG4gICAgICAgICAgYnV0dG9uLmdldFNjaGVtYVZhbHVlKFsncmVzb3VyY2UnLCAnZGF0YSddKSB8fFxuICAgICAgICAgIGJ1dHRvbi5wcm9jZXNzZWRJdGVtXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0KGJ1dHRvbikge1xuICAgICAgY29uc3QgcmVzb3VyY2UgPSBnZXRSZXNvdXJjZShidXR0b24uc2NoZW1hLnJlc291cmNlLCB7XG4gICAgICAgIHBhcmVudDogdGhpcy5yZXNvdXJjZVxuICAgICAgfSlcbiAgICAgIGlmIChyZXNvdXJjZSkge1xuICAgICAgICBjb25zdCB7IG1ldGhvZCB9ID0gcmVzb3VyY2VcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0UGF5bG9hZERhdGEoYnV0dG9uLCBtZXRob2QpXG4gICAgICAgIHJldHVybiB0aGlzLnN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXRSZXNvdXJjZShidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgIHNldERhdGEgPSBmYWxzZSxcbiAgICAgIG9uU3VjY2VzcyxcbiAgICAgIG9uRXJyb3IsXG4gICAgICBub3RpZnlTdWNjZXNzID0gKCkgPT4gdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgIHRpdGxlOiAnUmVxdWVzdCBTdWNjZXNzZnVsJyxcbiAgICAgICAgdGV4dDogJ1JlcXVlc3Qgd2FzIHN1Y2Nlc3NmdWxseSBzZW50LidcbiAgICAgIH0pLFxuICAgICAgbm90aWZ5RXJyb3IgPSBlcnJvciA9PiB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgIHRleHQ6IFtcbiAgICAgICAgICBgVW5hYmxlIHRvIHNlbmQgcmVxdWVzdCR7ZXJyb3IgPyAnOicgOiAnJ31gLFxuICAgICAgICAgIGVycm9yPy5tZXNzYWdlIHx8IGVycm9yXG4gICAgICAgIF1cbiAgICAgIH0pXG4gICAgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdChcbiAgICAgICAgICB7IG1ldGhvZCwgcmVzb3VyY2UsIGRhdGEgfSxcbiAgICAgICAgICBhc3luYyAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlPy5kYXRhXG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBEaXRvIHZhbGlkYXRpb24gZXJyb3I6XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuaXNWYWxpZGF0aW9uRXJyb3IocmVzcG9uc2UpICYmIGRhdGEuZXJyb3JzXG4gICAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgdHJ1ZSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IGlzT2JqZWN0KGRhdGEpID8gZGF0YSA6IGVyclxuICAgICAgICAgICAgICAgIG9uRXJyb3I/LihlcnJvcilcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdlcnJvcicsIHtcbiAgICAgICAgICAgICAgICAgIG5vdGlmeTogbm90aWZ5RXJyb3IsXG4gICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdW5kZXJseWluZyBkYXRhIGJlZm9yZSBjYWxsaW5nIGBub3RpZnkoKWAgb3JcbiAgICAgICAgICAgICAgLy8gYHRoaXMuaXRlbUxhYmVsYCwgc28gaWQgaXMgc2V0IGFmdGVyIGNyZWF0aW5nIG5ldyBpdGVtcy5cbiAgICAgICAgICAgICAgaWYgKHNldERhdGEgJiYgZGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YShkYXRhKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG9uU3VjY2Vzcz8uKClcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnc3VjY2VzcycsIHtcbiAgICAgICAgICAgICAgICBub3RpZnk6IG5vdGlmeVN1Y2Nlc3NcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgZXZlbnQsIHsgbm90aWZ5LCBlcnJvciB9KSB7XG4gICAgICAvLyBDcmVhdGUgdGhlIGNvbnRleHQgb3V0c2lkZSBvZiBgZW1pdEV2ZW50KClgLCBzbyB0aGF0XG4gICAgICAvLyBgY29udGV4dC53YXNOb3RpZmllZGAgY2FuIGJlIGNoZWNrZWQgYWZ0ZXIuXG4gICAgICBjb25zdCBjb250ZXh0ID0gbmV3IERpdG9Db250ZXh0KGJ1dHRvbiwge1xuICAgICAgICBuZXN0ZWQ6IGZhbHNlLFxuICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXG4gICAgICAgIGl0ZW1MYWJlbDogdGhpcy5pdGVtTGFiZWwsXG4gICAgICAgIGVycm9yXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYnV0dG9uLmVtaXRFdmVudChldmVudCwgeyBjb250ZXh0IH0pXG4gICAgICBpZiAoXG4gICAgICAgIG5vdGlmeSAmJlxuICAgICAgICAvLyBQcmV2ZW50IGRlZmF1bHQgaWYgYW55dGhpbmcgd2FzIHJldHVybmVkIGZyb20gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICAgIHJlcyA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgIC8vIERvIG5vdCBkaXNwbGF5IGRlZmF1bHQgbm90aWZpY2F0aW9uIGlmIHRoZSBldmVudCBoYW5kbGVyIGFscmVhZHlcbiAgICAgICAgLy8gZGlzcGxheWVkIGEgbm90aWZpY2F0aW9uLlxuICAgICAgICAhY29udGV4dC53YXNOb3RpZmllZFxuICAgICAgKSB7XG4gICAgICAgIG5vdGlmeShlcnJvcilcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gIH1cbn1cbiIsIlxuLmRpdG8tZm9ybS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIDpjbGFzcz1cInsgJ2RpdG8tZm9ybS1uZXN0ZWQnOiBpc05lc3RlZFJvdXRlIH1cIlxuKVxuICAvLyBOT1RFOiBOZXN0ZWQgZm9ybSBjb21wb25lbnRzIGFyZSBrZXB0IGFsaXZlIGJ5IHVzaW5nIGB2LXNob3dgIGluc3RlYWQgb2ZcbiAgLy8gYHYtaWZgIGhlcmUsIHNvIGV2ZW50IGhhbmRsaW5nIGFuZCBvdGhlciB0aGluZ3Mgc3RpbGwgd29yayB3aXRoIG5lc3RlZFxuICAvLyBlZGl0aW5nLiBPbmx5IHJlbmRlciBhIHJvdXRlci12aWV3IGhlcmUgaWYgdGhpcyBpc24ndCB0aGUgbGFzdCBkYXRhIHJvdXRlXG4gIC8vIGFuZCBub3QgYSBuZXN0ZWQgZm9ybSByb3V0ZSwgd2hpY2ggd2lsbCBhcHBlYXIgZWxzZXdoZXJlIGluIGl0cyBvd24gdmlldy5cbiAgcm91dGVyLXZpZXcoXG4gICAgdi1pZj1cIiEoaXNMYXN0VW5uZXN0ZWRSb3V0ZSB8fCBpc05lc3RlZFJvdXRlKVwiXG4gICAgdi1zaG93PVwiIWlzQWN0aXZlXCJcbiAgKVxuICAvLyBVc2UgYSA8ZGl2PiBmb3IgaW5saW5lZCBmb3JtcywgYXMgd2Ugc2hvdWxkbid0IG5lc3QgYWN0dWFsIDxmb3JtPiB0YWdzLlxuICBjb21wb25lbnQuZGl0by1zY3JvbGwoXG4gICAgdi1zaG93PVwiaXNBY3RpdmVcIlxuICAgIDppcz1cImlzTmVzdGVkUm91dGUgPyAnZGl2JyA6ICdmb3JtJ1wiXG4gICAgQHN1Ym1pdC5wcmV2ZW50XG4gIClcbiAgICAvLyBQcmV2ZW50IGltcGxpY2l0IHN1Ym1pc3Npb24gb2YgdGhlIGZvcm0sIGZvciBleGFtcGxlIHdoZW4gdHlwaW5nIGVudGVyXG4gICAgLy8gaW4gYW4gaW5wdXQgZmllbGQuXG4gICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzUxNTA3ODA2XG4gICAgYnV0dG9uKFxuICAgICAgdi1zaG93PVwiZmFsc2VcIlxuICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICBkaXNhYmxlZD1cInRydWVcIlxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICApXG4gICAgZGl0by1zY2hlbWEoXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgIDptZW51SGVhZGVyPVwidHJ1ZVwiXG4gICAgKVxuICAgICAgZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZC5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICAgIHNsb3Q9XCJidXR0b25zXCJcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZm9ybS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIDpjbGFzcz1cInsgJ2RpdG8tZm9ybS1uZXN0ZWQnOiBpc05lc3RlZFJvdXRlIH1cIlxuKVxuICAvLyBOT1RFOiBOZXN0ZWQgZm9ybSBjb21wb25lbnRzIGFyZSBrZXB0IGFsaXZlIGJ5IHVzaW5nIGB2LXNob3dgIGluc3RlYWQgb2ZcbiAgLy8gYHYtaWZgIGhlcmUsIHNvIGV2ZW50IGhhbmRsaW5nIGFuZCBvdGhlciB0aGluZ3Mgc3RpbGwgd29yayB3aXRoIG5lc3RlZFxuICAvLyBlZGl0aW5nLiBPbmx5IHJlbmRlciBhIHJvdXRlci12aWV3IGhlcmUgaWYgdGhpcyBpc24ndCB0aGUgbGFzdCBkYXRhIHJvdXRlXG4gIC8vIGFuZCBub3QgYSBuZXN0ZWQgZm9ybSByb3V0ZSwgd2hpY2ggd2lsbCBhcHBlYXIgZWxzZXdoZXJlIGluIGl0cyBvd24gdmlldy5cbiAgcm91dGVyLXZpZXcoXG4gICAgdi1pZj1cIiEoaXNMYXN0VW5uZXN0ZWRSb3V0ZSB8fCBpc05lc3RlZFJvdXRlKVwiXG4gICAgdi1zaG93PVwiIWlzQWN0aXZlXCJcbiAgKVxuICAvLyBVc2UgYSA8ZGl2PiBmb3IgaW5saW5lZCBmb3JtcywgYXMgd2Ugc2hvdWxkbid0IG5lc3QgYWN0dWFsIDxmb3JtPiB0YWdzLlxuICBjb21wb25lbnQuZGl0by1zY3JvbGwoXG4gICAgdi1zaG93PVwiaXNBY3RpdmVcIlxuICAgIDppcz1cImlzTmVzdGVkUm91dGUgPyAnZGl2JyA6ICdmb3JtJ1wiXG4gICAgQHN1Ym1pdC5wcmV2ZW50XG4gIClcbiAgICAvLyBQcmV2ZW50IGltcGxpY2l0IHN1Ym1pc3Npb24gb2YgdGhlIGZvcm0sIGZvciBleGFtcGxlIHdoZW4gdHlwaW5nIGVudGVyXG4gICAgLy8gaW4gYW4gaW5wdXQgZmllbGQuXG4gICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzUxNTA3ODA2XG4gICAgYnV0dG9uKFxuICAgICAgdi1zaG93PVwiZmFsc2VcIlxuICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICBkaXNhYmxlZD1cInRydWVcIlxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICApXG4gICAgZGl0by1zY2hlbWEoXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgIDptZW51SGVhZGVyPVwidHJ1ZVwiXG4gICAgKVxuICAgICAgZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZC5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICAgIHNsb3Q9XCJidXR0b25zXCJcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgY2xvbmUsIGNhcGl0YWxpemUsIHBhcnNlRGF0YVBhdGgsIG1lcmdlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUm91dGVNaXhpbiBmcm9tICcuLi9taXhpbnMvUm91dGVNaXhpbi5qcydcbmltcG9ydCBSZXNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9SZXNvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UsIGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzLCBpc09iamVjdFNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWZvcm0nLCB7XG4gIG1peGluczogW1JvdXRlTWl4aW4sIFJlc291cmNlTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNyZWF0ZWREYXRhOiBudWxsLFxuICAgICAgY2xvbmVkRGF0YTogdW5kZWZpbmVkLFxuICAgICAgc291cmNlS2V5OiBudWxsLFxuICAgICAgaXNGb3JtOiB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdmVyYnMoKSB7XG4gICAgICAvLyBBZGQgc3VibWl0IC8gc3VibWl0dGVkIHRvIHRoZSB2ZXJicyByZXR1cm5lZCBieSBSZXNvdXJjZU1peGluXG4gICAgICAvLyBOT1RFOiBUaGVzZSBnZXQgcGFzc2VkIG9uIHRvIGNoaWxkcmVuIHRocm91Z2g6XG4gICAgICAvLyBgcHJvdmlkZSgpIC4uLiB7ICR2ZXJiczogKCkgPT4gdGhpcy52ZXJicyB9YCBpbiBSZXNvdXJjZU1peGluXG4gICAgICBjb25zdCB2ZXJicyA9IHRoaXMuZ2V0VmVyYnMoKVxuICAgICAgY29uc3QgeyBpc0NyZWF0aW5nLCBwcm92aWRlc0RhdGEgfSA9IHRoaXNcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnZlcmJzLFxuICAgICAgICBzdWJtaXQ6IGlzQ3JlYXRpbmcgPyB2ZXJicy5jcmVhdGUgOiB2ZXJicy5zYXZlLFxuICAgICAgICBzdWJtaXR0ZWQ6IGlzQ3JlYXRpbmcgPyB2ZXJicy5jcmVhdGVkIDogdmVyYnMuc2F2ZWQsXG4gICAgICAgIGNhbmNlbDogcHJvdmlkZXNEYXRhID8gdmVyYnMuY2FuY2VsIDogdmVyYnMuY2xvc2UsXG4gICAgICAgIGNhbmNlbGxlZDogcHJvdmlkZXNEYXRhID8gdmVyYnMuY2FuY2VsbGVkIDogdmVyYnMuY2xvc2VkXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEl0ZW1Gb3JtU2NoZW1hKFxuICAgICAgICB0aGlzLnNvdXJjZVNjaGVtYSxcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZGF0YSB5ZXQsIHByb3ZpZGUgYW4gZW1wdHkgb2JqZWN0IHdpdGgganVzdCB0aGUgcmlnaHRcbiAgICAgICAgLy8gdHlwZSBzZXQsIHNvIHRoZSBmb3JtIGNhbiBhbHdheXMgYmUgZGV0ZXJtaW5lZC5cbiAgICAgICAgdGhpcy5kYXRhIHx8IHsgdHlwZTogdGhpcy50eXBlIH0sXG4gICAgICAgIHRoaXMuY29udGV4dFxuICAgICAgKSB8fCB7fSAvLyBBbHdheXMgcmV0dXJuIGEgc2NoZW1hIG9iamVjdCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGZvciBpdC5cbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBnZXRCdXR0b25TY2hlbWFzKFxuICAgICAgICBtZXJnZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjYW5jZWw6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLmNhbmNlbCgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHN1Ym1pdDogIXRoaXMuZG9lc011dGF0ZSAmJiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdzdWJtaXQnLFxuICAgICAgICAgICAgICAvLyBTdWJtaXQgYnV0dG9ucyBjbG9zZSB0aGUgZm9ybSBieSBkZWZhdWx0OlxuICAgICAgICAgICAgICBjbG9zZUZvcm06IHRydWUsXG4gICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiAoeyBjb21wb25lbnQ6IGJ1dHRvbiB9KSA9PiBidXR0b24uc3VibWl0KClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy5zY2hlbWEuYnV0dG9uc1xuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNMYXN0Um91dGUgfHwgdGhpcy5pc0xhc3RVbm5lc3RlZFJvdXRlXG4gICAgfSxcblxuICAgIGlzVHJhbnNpZW50KCkge1xuICAgICAgcmV0dXJuICF0aGlzLnByb3ZpZGVzRGF0YVxuICAgIH0sXG5cbiAgICBpc0NyZWF0aW5nKCkge1xuICAgICAgLy8gdGhpcy5wYXJhbSBpcyBpbmhlcml0ZWQgZnJvbSBSb3V0ZU1peGluXG4gICAgICByZXR1cm4gdGhpcy5wYXJhbSA9PT0gJ2NyZWF0ZSdcbiAgICB9LFxuXG4gICAgaXNEaXJ0eSgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5kb2VzTXV0YXRlICYmICEhdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50Py5pc0RpcnR5XG4gICAgfSxcblxuICAgIHNlbGVjdGVkVGFiKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uc2VsZWN0ZWRUYWIgfHwgbnVsbFxuICAgIH0sXG5cbiAgICBkb2VzTXV0YXRlKCkge1xuICAgICAgLy8gV2hlbiBgc291cmNlU2NoZW1hLm11dGF0ZWAgaXMgdHJ1ZSwgdGhlIGZvcm0gZWRpdHMgdGhlIGluaGVyaXRlZCBkYXRhXG4gICAgICAvLyBkaXJlY3RseSBpbnN0ZWFkIG9mIG1ha2luZyBhIGNvcHkgZm9yIGFwcGxpY2F0aW9uIHVwb24gc3VibWl0LlxuICAgICAgLy8gU2VlIGBpbmhlcml0ZWREYXRhKClgIGNvbXB1dGVkIHByb3BlcnR5IGZvciBtb3JlIGRldGFpbHMuXG4gICAgICByZXR1cm4gdGhpcy5zb3VyY2VTY2hlbWEubXV0YXRlXG4gICAgfSxcblxuICAgIHR5cGUoKSB7XG4gICAgICAvLyBUaGUgdHlwZSBvZiBmb3JtIHRvIGNyZWF0ZSwgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGZvcm1zIHRvIGNob29zZSBmcm9tLlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnF1ZXJ5LnR5cGVcbiAgICB9LFxuXG4gICAgaXRlbUlkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICA/IG51bGxcbiAgICAgICAgOiAodGhpcy5wYXJhbSA/PyBudWxsKVxuICAgIH0sXG5cbiAgICBtZXRob2QoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0NyZWF0aW5nID8gJ3Bvc3QnIDogJ3BhdGNoJ1xuICAgIH0sXG5cbiAgICByZXNvdXJjZSgpIHtcbiAgICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5nZXRSZXNvdXJjZSgpXG4gICAgICByZXR1cm4gZ2V0TWVtYmVyUmVzb3VyY2UodGhpcy5pdGVtSWQsIHJlc291cmNlKSB8fCByZXNvdXJjZVxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iUHJlZml4KCkge1xuICAgICAgcmV0dXJuIGNhcGl0YWxpemUodGhpcy5pc0NyZWF0aW5nID8gdGhpcy52ZXJicy5jcmVhdGUgOiB0aGlzLnZlcmJzLmVkaXQpXG4gICAgfSxcblxuICAgIGRhdGEoKSB7XG4gICAgICAvLyBSZXR1cm4gZGlmZmVyZW50IGRhdGEgXCJjb250YWluZXJzXCIgYmFzZWQgb24gZGlmZmVyZW50IHNjZW5hcmlvczpcbiAgICAgIC8vIDEuIGNyZWF0ZWREYXRhLCBpZiB3ZSdyZSBpbiBhIGZvcm0gZm9yIGEgbmV3bHkgY3JlYXRlZCBvYmplY3QuXG4gICAgICAvLyAyLiBsb2FkZWREYXRhLCBpZiB0aGUgZm9ybSBpdHNlbGYgaXMgdGhlIHJvb3Qgb2YgdGhlIGRhdGEgKGUuZy4gd2hlblxuICAgICAgLy8gICAgZGlyZWN0bHkgbG9hZGluZyBhbiBlZGl0aW5nIHJvb3QpLlxuICAgICAgLy8gMy4gVGhlIGRhdGEgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCwgd2hpY2ggaXRzZWxmIG1heSBiZSBlaXRoZXIgYVxuICAgICAgLy8gICAgdmlldyB0aGF0IGxvYWRlZCB0aGUgZGF0YSwgb3IgYSBmb3JtIHRoYXQgZWl0aGVyIGxvYWRlZCB0aGUgZGF0YSwgb3JcbiAgICAgIC8vICAgIGFsc28gaW5oZXJpdGVkIGl0IGZyb20gaXRzIHBhcmVudC4gTm90ZSB0aGF0IHdlIHVzZSBhIGNsb25lIG9mIGl0LFxuICAgICAgLy8gICAgc28sIGRhdGEgY2hhbmdlcyBhcmVuJ3QgYXBwbGllZCB1bnRpbCBzZXRTb3VyY2VEYXRhKCkgaXMgY2FsbGVkLlxuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlZERhdGEgfHwgdGhpcy5sb2FkZWREYXRhIHx8IHRoaXMuaW5oZXJpdGVkRGF0YSB8fCBudWxsXG4gICAgfSxcblxuICAgIGRhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0YVBhdGhGcm9tKHRoaXMuZGF0YUNvbXBvbmVudClcbiAgICB9LFxuXG4gICAgc291cmNlRGF0YSgpIHtcbiAgICAgIC8vIFBvc3NpYmxlIHBhcmVudHMgYXJlIERpdG9Gb3JtIGZvciBmb3Jtcywgb3IgRGl0b1ZpZXcgZm9yIHJvb3QgbGlzdHMuXG4gICAgICAvLyBCb3RoIGhhdmUgYSBkYXRhIHByb3BlcnR5IHdoaWNoIGFic3RyYWN0cyBhd2F5IGxvYWRpbmcgYW5kIGluaGVyaXRpbmdcbiAgICAgIC8vIG9mIGRhdGEuXG4gICAgICBsZXQgeyBkYXRhIH0gPSB0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICAvLyBIYW5kbGUgbmVzdGVkIGRhdGEgYnkgc3BsaXR0aW5nIHRoZSBkYXRhUGF0aCwgaXRlcmF0ZSB0aHJvdWdoIHRoZVxuICAgICAgICAvLyBhY3R1YWwgZGF0YSBhbmQgbG9vayBuZXN0IGNoaWxkLWRhdGEgdXAuXG4gICAgICAgIGNvbnN0IGRhdGFQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoXG4gICAgICAgICAgdGhpcy5nZXREYXRhUGF0aEZyb20odGhpcy5wYXJlbnRSb3V0ZUNvbXBvbmVudClcbiAgICAgICAgKVxuICAgICAgICAvLyBDb21wYXJlIGRhdGFQYXJ0cyBhZ2FpbnN0IG1hdGNoZWQgcm91dGVQYXRoIHBhcnRzLCB0byBpZGVudGlmeSB0aG9zZVxuICAgICAgICAvLyBwYXJ0cyB0aGF0IG5lZWQgdG8gYmUgdHJlYXRlZCBsaWtlIGlkcyBhbmQgbWFwcGVkIHRvIGluZGljZXMgaW4gZGF0YS5cbiAgICAgICAgY29uc3QgcGF0aFBhcnRzID0gdGhpcy5yb3V0ZVJlY29yZC5wYXRoLnNwbGl0KCcvJylcbiAgICAgICAgY29uc3Qgcm91dGVQYXJ0cyA9IHBhdGhQYXJ0cy5zbGljZShwYXRoUGFydHMubGVuZ3RoIC0gZGF0YVBhcnRzLmxlbmd0aClcbiAgICAgICAgdGhpcy5zb3VyY2VLZXkgPSBudWxsXG4gICAgICAgIGNvbnN0IGxhc3REYXRhUGFydCA9IGRhdGFQYXJ0c1tkYXRhUGFydHMubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKSAmJiBsYXN0RGF0YVBhcnQgPT09ICdjcmVhdGUnKSB7XG4gICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBvYmplY3Qgc291cmNlIGFuZCBhcmUgY3JlYXRpbmcsIHRoZSBkYXRhUGF0aCBuZWVkcyB0b1xuICAgICAgICAgIC8vIGJlIHNob3J0ZW5lZCBieSB0aGUgJ2NyZWF0ZScgZW50cnkuIFRoaXMgaXNuJ3QgbmVlZGVkIGZvciBsaXN0XG4gICAgICAgICAgLy8gc291cmNlcywgYXMgdGhlcmUgdGhlIHBhcmFtZXRlciBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlIGl0ZW0gaWQuXG4gICAgICAgICAgZGF0YVBhcnRzLmxlbmd0aC0tXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBkYXRhUGFydHMubGVuZ3RoOyBpIDwgbCAmJiBkYXRhOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXRhUGFydCA9IGRhdGFQYXJ0c1tpXVxuICAgICAgICAgIC8vIElmIHRoaXMgaXMgYW4gOmlkIHBhcnQsIGZpbmQgdGhlIGluZGV4IG9mIHRoZSBpdGVtIHdpdGggZ2l2ZW4gaWQuXG4gICAgICAgICAgY29uc3Qga2V5ID0gL146aWQvLnRlc3Qocm91dGVQYXJ0c1tpXSlcbiAgICAgICAgICAgID8gZGF0YVBhcnQgPT09ICdjcmVhdGUnXG4gICAgICAgICAgICAgID8gbnVsbCAvLyBUaGVyZSdzIG5vIGluZGV4IGZvciBlbnRyaWVzIGFib3V0IHRvIGJlIGNyZWF0ZWRcbiAgICAgICAgICAgICAgOiB0aGlzLmZpbmRJdGVtSWRJbmRleCh0aGlzLnNvdXJjZVNjaGVtYSwgZGF0YSwgZGF0YVBhcnQpXG4gICAgICAgICAgICA6IGRhdGFQYXJ0XG4gICAgICAgICAgLy8gU2tpcCB0aGUgZmluYWwgbG9va3VwIGJ1dCByZW1lbWJlciBgc291cmNlS2V5YCwgYXMgd2Ugd2FudCB0aGVcbiAgICAgICAgICAvLyBwYXJlbnQgZGF0YSBzbyB3ZSBjYW4gcmVwbGFjZSB0aGUgZW50cnkgYXQgYHNvdXJjZUtleWAgb24gaXQuXG4gICAgICAgICAgaWYgKGkgPT09IGwgLSAxKSB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZUtleSA9IGtleVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhID0gZGF0YVtrZXldXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVxuICAgIH0sXG5cbiAgICBpbmhlcml0ZWREYXRhKCkge1xuICAgICAgLy8gRGF0YSBpbmhlcml0ZWQgZnJvbSBwYXJlbnQsIGFuZCBjbG9uZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IHJlYWN0aXZlXG4gICAgICAvLyBjaGFuZ2VzIHVudGlsIGNoYW5nZXMgYXJlIGFwcGxpZWQgdGhyb3VnaCBzZXRTb3VyY2VEYXRhKCksIHVubGVzc1xuICAgICAgLy8gYHNvdXJjZVNjaGVtYS5tdXRhdGVgIGlzIHRydWUsIGluIHdoaWNoIGNhc2UgZGF0YSBpcyBtdXRhdGVkIGRpcmVjdGx5LlxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmlzVHJhbnNpZW50ICYmXG4gICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHRoaXMuc291cmNlRGF0YSAmJlxuICAgICAgICB0aGlzLnNvdXJjZUtleSAhPT0gbnVsbFxuICAgICAgKSB7XG4gICAgICAgIGxldCBkYXRhID0gdGhpcy5zb3VyY2VEYXRhW3RoaXMuc291cmNlS2V5XVxuICAgICAgICBpZiAoIXRoaXMuZG9lc011dGF0ZSkge1xuICAgICAgICAgIC8vIFVzZSBhIHRyaWNrIHRvIHN0b3JlIGNsb25lZCBpbmhlcml0ZWQgZGF0YSBpbiBjbG9uZWREYXRhLCB0byBtYWtlXG4gICAgICAgICAgLy8gaXQgcmVhY3RpdmUgYW5kIHByZXZlbnQgaXQgZnJvbSBiZWluZyBjbG9uZWQgbXVsdGlwbGUgdGltZXMuXG4gICAgICAgICAgdGhpcy5jbG9uZWREYXRhID0gZGF0YSA9IGNsb25lKGRhdGEpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGRhdGEgPT09IG51bGwgJiZcbiAgICAgICAgICAhdGhpcy5pc0NyZWF0aW5nICYmXG4gICAgICAgICAgaXNPYmplY3RTb3VyY2UodGhpcy5zb3VyY2VTY2hlbWEpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIElmIGRhdGEgb2YgYW4gb2JqZWN0IHNvdXJjZSBpcyBudWxsLCByZWRpcmVjdCB0byBpdHMgY3JlYXRlIHJvdXRlLlxuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgcGF0aDogJ2NyZWF0ZScsIGFwcGVuZDogdHJ1ZSB9KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5jbG9uZWREYXRhXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmhhc0RhdGEoKVxuICAgIGhhc0RhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgaXRlbUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0SXRlbUxhYmVsKHRoaXMuc291cmNlU2NoZW1hLCB0aGlzLmRhdGEsIHsgZXh0ZW5kZWQ6IHRydWUgfSlcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBzb3VyY2VEYXRhOiAnY2xlYXJDbG9uZWREYXRhJyxcbiAgICAvLyBOZWVkZWQgZm9yIHRoZSAnY3JlYXRlJyByZWRpcmVjdCBpbiBgaW5oZXJpdGVkRGF0YSgpYCB0byB3b3JrOlxuICAgIGNyZWF0ZTogJ3NldHVwRGF0YSdcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZW1pdFNjaGVtYUV2ZW50KGV2ZW50LCBwYXJhbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQuZW1pdEV2ZW50KGV2ZW50LCBwYXJhbXMpXG4gICAgfSxcblxuICAgIGdldERhdGFQYXRoRnJvbShyb3V0ZSkge1xuICAgICAgLy8gR2V0IHRoZSBkYXRhIHBhdGggYnkgZGVub3JtYWxpemVQYXRoIHRoZSByZWxhdGl2ZSByb3V0ZSBwYXRoXG4gICAgICByZXR1cm4gdGhpcy5hcGkuZGVub3JtYWxpemVQYXRoKHRoaXMucGF0aFxuICAgICAgICAvLyBEaXRvVmlld3MgaGF2ZSBuZXN0ZWQgcm91dGVzLCBzbyBkb24ndCByZW1vdmUgdGhlaXIgcGF0aC5cbiAgICAgICAgLnNsaWNlKChyb3V0ZS5pc1ZpZXcgPyAwIDogcm91dGUucGF0aC5sZW5ndGgpICsgMSkpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldHVwRGF0YSgpXG4gICAgc2V0dXBEYXRhKCkge1xuICAgICAgaWYgKHRoaXMuaXNDcmVhdGluZykge1xuICAgICAgICB0aGlzLmNyZWF0ZWREYXRhID0gdGhpcy5jcmVhdGVkRGF0YSB8fFxuICAgICAgICAgIHRoaXMuY3JlYXRlRGF0YSh0aGlzLnNjaGVtYSwgdGhpcy50eXBlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0U291cmNlRGF0YShkYXRhKSB7XG4gICAgICBpZiAodGhpcy5zb3VyY2VEYXRhICYmIHRoaXMuc291cmNlS2V5ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHsgbWFpblNjaGVtYUNvbXBvbmVudCB9ID0gdGhpc1xuICAgICAgICB0aGlzLiRzZXQoXG4gICAgICAgICAgdGhpcy5zb3VyY2VEYXRhLFxuICAgICAgICAgIHRoaXMuc291cmNlS2V5LFxuICAgICAgICAgIG1haW5TY2hlbWFDb21wb25lbnQuZmlsdGVyRGF0YShkYXRhKVxuICAgICAgICApXG4gICAgICAgIG1haW5TY2hlbWFDb21wb25lbnQub25DaGFuZ2UoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGFkZFNvdXJjZURhdGEoZGF0YSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKVxuICAgICAgICA/IHRoaXMuc2V0U291cmNlRGF0YShkYXRhKVxuICAgICAgICA6ICEhdGhpcy5zb3VyY2VEYXRhPy5wdXNoKGRhdGEpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmNsZWFyRGF0YSgpXG4gICAgY2xlYXJEYXRhKCkge1xuICAgICAgdGhpcy5zZXREYXRhKG51bGwpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldERhdGEoKVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgLy8gc2V0RGF0YSgpIGlzIGNhbGxlZCBhZnRlciBzdWJtaXQgd2hlbiBkYXRhIGhhcyBjaGFuZ2VkLlxuICAgICAgaWYgKHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgLy8gRm9yIGNvbXBvbmVudHMgd2l0aCB0cmFuc2llbnQgZGF0YSwgbW9kaWZ5IHRoaXMuc291cmNlRGF0YS5cbiAgICAgICAgdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNyZWF0ZWREYXRhID0gbnVsbFxuICAgICAgICB0aGlzLmxvYWRlZERhdGEgPSBkYXRhXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsZWFyQ2xvbmVkRGF0YShuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcbiAgICAgIC8vIE9ubHkgY2xlYXIgaWYgdGhlIHdhdGNoZWQgc291cmNlRGF0YSBpdHNlbGYgY2hhbmdlcyBpbiB0aGUgZm9ybS5cbiAgICAgIGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUpIHtcbiAgICAgICAgdGhpcy5jbG9uZWREYXRhID0gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsb3NlKClcbiAgICB9LFxuXG4gICAgYXN5bmMgY2xvc2UoKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZSh0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50LnBhdGgpXG4gICAgfSxcblxuICAgIGdldFN1Ym1pdFZlcmIocHJlc2VudCA9IHRydWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyBwcmVzZW50ID8gJ2NyZWF0ZScgOiAnY3JlYXRlZCdcbiAgICAgICAgOiBwcmVzZW50ID8gJ3N1Ym1pdCcgOiAnc3VibWl0dGVkJ1xuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQoYnV0dG9uLCB7IHZhbGlkYXRlID0gdHJ1ZSwgY2xvc2VGb3JtID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgICBpZiAodmFsaWRhdGUgJiYgIXRoaXMudmFsaWRhdGVBbGwoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ2V0VmVyYiA9IHByZXNlbnQgPT4gdGhpcy52ZXJic1t0aGlzLmdldFN1Ym1pdFZlcmIocHJlc2VudCldXG5cbiAgICAgIC8vIEFsbG93IGJ1dHRvbnMgdG8gb3ZlcnJpZGUgYm90aCBtZXRob2QgYW5kIHJlc291cmNlIHBhdGggdG8gc3VibWl0IHRvOlxuICAgICAgY29uc3QgYnV0dHRvblJlc291cmNlID0gZ2V0UmVzb3VyY2UoYnV0dG9uLnNjaGVtYS5yZXNvdXJjZSwge1xuICAgICAgICBwYXJlbnQ6IHRoaXMucmVzb3VyY2VcbiAgICAgIH0pXG4gICAgICBjb25zdCByZXNvdXJjZSA9IGJ1dHR0b25SZXNvdXJjZSB8fCB0aGlzLnJlc291cmNlXG4gICAgICBjb25zdCBtZXRob2QgPSByZXNvdXJjZT8ubWV0aG9kIHx8IHRoaXMubWV0aG9kXG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZClcbiAgICAgIGxldCBzdWNjZXNzXG4gICAgICBpZiAoIWJ1dHR0b25SZXNvdXJjZSAmJiB0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLnN1Ym1pdFRyYW5zaWVudChidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KHRoaXMuZ2V0U3VibWl0VmVyYigpKSxcbiAgICAgICAgICBvbkVycm9yOiBlcnJvciA9PiB0aGlzLmVtaXRTY2hlbWFFdmVudCgnZXJyb3InLCB7XG4gICAgICAgICAgICBjb250ZXh0OiB7IGVycm9yIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBub3RpZnlTdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYihmYWxzZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICAgICAgICB0aXRsZTogdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgICAgICAgICAgPyBgSXRlbSAke2NhcGl0YWxpemUodmVyYil9YFxuICAgICAgICAgICAgICAgIDogYENoYW5nZSAke2NhcGl0YWxpemUodmVyYil9YCxcbiAgICAgICAgICAgICAgdGV4dDogW1xuICAgICAgICAgICAgICAgIHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICAgICAgICAgICAgPyBgJHt0aGlzLml0ZW1MYWJlbH0gd2FzICR7dmVyYn0uYFxuICAgICAgICAgICAgICAgICAgOiBgQ2hhbmdlcyB0byAke3RoaXMuaXRlbUxhYmVsfSB3ZXJlICR7dmVyYn0uYCxcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zaWVudE5vdGVcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5vdGlmeUVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYih0cnVlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICAgICAgICB0ZXh0OiBgVW5hYmxlIHRvICR7dmVyYn0gJHt0aGlzLml0ZW1MYWJlbH0uYFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5zdWJtaXRSZXNvdXJjZShidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgICAgICBzZXREYXRhOiB0cnVlLFxuICAgICAgICAgIG9uU3VjY2VzczogKCkgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQodGhpcy5nZXRTdWJtaXRWZXJiKCkpLFxuICAgICAgICAgIG9uRXJyb3I6IGVycm9yID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdlcnJvcicsIHtcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgZXJyb3IgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIG5vdGlmeVN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgIHRpdGxlOiBgU3VjY2Vzc2Z1bGx5ICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gLFxuICAgICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLml0ZW1MYWJlbH0gd2FzICR7dmVyYn0uYFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5vdGlmeUVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYih0cnVlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICAgICAgYFVuYWJsZSB0byAke3ZlcmJ9ICR7dGhpcy5pdGVtTGFiZWx9JHtlcnJvciA/ICc6JyA6ICcnfWAsXG4gICAgICAgICAgICAgICAgZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICB0aGlzLnJlc2V0VmFsaWRhdGlvbigpXG4gICAgICAgIGlmIChjbG9zZUZvcm0gfHwgYnV0dG9uLmNsb3NlRm9ybSkge1xuICAgICAgICAgIHRoaXMuY2xvc2UoKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNDcmVhdGluZykge1xuICAgICAgICAgIC8vIFJlZGlyZWN0IHRvIHRoZSBmb3JtIGVkaXRpbmcgdGhlIG5ld2x5IGNyZWF0ZWQgaXRlbTpcbiAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCB0aGlzLmRhdGEpXG4gICAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoeyBwYXRoOiBgLi4vJHtpZH1gLCBhcHBlbmQ6IHRydWUgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Y2Nlc3NcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0VHJhbnNpZW50KGJ1dHRvbiwgX3Jlc291cmNlLCBfbWV0aG9kLCBkYXRhLCB7XG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBvbkVycm9yLFxuICAgICAgbm90aWZ5U3VjY2VzcyxcbiAgICAgIG5vdGlmeUVycm9yXG4gICAgfSkge1xuICAgICAgLy8gSGFuZGxlIHRoZSBkZWZhdWx0IFwic3VibWl0dGluZ1wiIG9mIHRyYW5zaWVudCwgbmVzdGVkIGRhdGE6XG4gICAgICBjb25zdCBzdWNjZXNzID0gdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgID8gdGhpcy5hZGRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICAgIDogdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICBvblN1Y2Nlc3M/LigpXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ3N1Y2Nlc3MnLCB7XG4gICAgICAgICAgbm90aWZ5OiBub3RpZnlTdWNjZXNzXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBlcnJvciA9ICdDb3VsZCBub3Qgc3VibWl0IHRyYW5zaWVudCBpdGVtJ1xuICAgICAgICBvbkVycm9yPy4oZXJyb3IpXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ2Vycm9yJywge1xuICAgICAgICAgIG5vdGlmeTogbm90aWZ5RXJyb3IsXG4gICAgICAgICAgZXJyb3JcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWNjZXNzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tZm9ybS1uZXN0ZWRcbiAgICAmLFxuICAgIC5kaXRvLXNjcm9sbFxuICAgICAgLy8gTm8gc2Nyb2xsaW5nIGluc2lkZSBuZXN0ZWQgZm9ybXMsIGFuZCBwcmV2ZW50IG9wZW4gLm11bHRpc2VsZWN0IGZyb21cbiAgICAgIC8vIGJlaW5nIGNyb3BwZWQuXG4gICAgICBvdmVyZmxvdzogdmlzaWJsZVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvRm9ybSBmcm9tICcuL0RpdG9Gb3JtLnZ1ZSdcblxuZXhwb3J0IGRlZmF1bHQgRGl0b0Zvcm0uY29tcG9uZW50KCdkaXRvLWZvcm0tbmVzdGVkJywge30pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tZXJyb3JzKFxuICB2LWlmPVwiZXJyb3JzXCJcbilcbiAgdWxcbiAgICBsaSh2LWZvcj1cImVycm9yIG9mIGVycm9yc1wiKVxuICAgICAgfCB7eyBlcnJvciB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tZXJyb3JzKFxuICAgIHYtaWY9XCJlcnJvcnNcIlxuICApXG4gICAgdWxcbiAgICAgIGxpKHYtZm9yPVwiZXJyb3Igb2YgZXJyb3JzXCIpXG4gICAgICAgIHwge3sgZXJyb3IgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1lcnJvcnNcbiAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICB6LWluZGV4OiAxXG4gICAgdWxcbiAgICAgIG1hcmdpbi10b3A6IDFweFxuICAgICAgY29sb3I6ICRjb2xvci1lcnJvclxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1lcnJvcnMnLCB7XG4gIHByb3BzOiB7XG4gICAgZXJyb3JzOiB7IHR5cGU6IEFycmF5LCBkZWZhdWx0OiBudWxsIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1zY29wZXNcbiAgcm91dGVyLWxpbmsoXG4gICAgdi1mb3I9XCIoc2NvcGUsIGtleSkgaW4gc2NvcGVzXCJcbiAgICA6a2V5PVwia2V5XCJcbiAgICA6dG89XCJnZXRTY29wZUxpbmsoc2NvcGUpXCJcbiAgICBjdXN0b20gdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1zZWxlY3RlZCc6IHNjb3BlLm5hbWUgPT09IHF1ZXJ5LnNjb3BlIH1cIlxuICAgICAgOnRpdGxlPVwic2NvcGUuaGludCB8fCBnZXRMYWJlbChzY29wZSlcIlxuICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICkge3sgZ2V0TGFiZWwoc2NvcGUpIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1zY29wZXNcbiAgICByb3V0ZXItbGluayhcbiAgICAgIHYtZm9yPVwiKHNjb3BlLCBrZXkpIGluIHNjb3Blc1wiXG4gICAgICA6a2V5PVwia2V5XCJcbiAgICAgIDp0bz1cImdldFNjb3BlTGluayhzY29wZSlcIlxuICAgICAgY3VzdG9tIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1zZWxlY3RlZCc6IHNjb3BlLm5hbWUgPT09IHF1ZXJ5LnNjb3BlIH1cIlxuICAgICAgICA6dGl0bGU9XCJzY29wZS5oaW50IHx8IGdldExhYmVsKHNjb3BlKVwiXG4gICAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICAgICkge3sgZ2V0TGFiZWwoc2NvcGUpIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tc2NvcGVzXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICAuZGl0by1idXR0b25cbiAgICAgICtlbGxpcHNpc1xuICAgICAgYm9yZGVyLXJhZGl1czogMFxuICAgICAgLy8gQSBiaXQgbW9yZSB0aGFuIHRoZSB3aWR0aCBvZiBlbGxpcHNpcywgdG8gcHJldmVudCByZXBsYWNpbmcgc2hvcnQgd29yZHNcbiAgICAgIC8vIHdpdGggZWxsaXBzaXMuXG4gICAgICBtaW4td2lkdGg6IDNlbVxuICAgICAgZmxleDogMCAxIGF1dG9cbiAgICAgICY6Zmlyc3QtY2hpbGRcbiAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMWVtXG4gICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDFlbVxuICAgICAgICBwYWRkaW5nLWxlZnQ6IDFlbVxuICAgICAgJjpsYXN0LWNoaWxkXG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAxZW1cbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDFlbVxuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxZW1cbiAgICAgICYgKyAuZGl0by1idXR0b25cbiAgICAgICAgbWFyZ2luLWxlZnQ6IC0xcHhcbiAgICAgIC8vIERvbid0IGNvdmVyIHRoZSBmb2N1c2VkIGJvcmRlciBvZiBidXR0b25zOlxuICAgICAgJjpmb2N1c1xuICAgICAgICB6LWluZGV4OiAxXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXNjb3BlcycsIHtcbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2NvcGVzOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRTY29wZUxpbmsoc2NvcGUpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0geyAuLi50aGlzLnF1ZXJ5LCBzY29wZTogc2NvcGUubmFtZSB9XG4gICAgICBpZiAocXVlcnkucGFnZSkge1xuICAgICAgICBxdWVyeS5wYWdlID0gMFxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlMaW5rKHF1ZXJ5KVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5wYWdpbmF0aW9uKFxuICA6cGFnZVNpemU9XCJsaW1pdFwiXG4gIDp0b3RhbD1cInRvdGFsXCJcbiAgOnBhZ2Uuc3luYz1cInBhZ2VcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgcGFnaW5hdGlvbihcbiAgICA6cGFnZVNpemU9XCJsaW1pdFwiXG4gICAgOnRvdGFsPVwidG90YWxcIlxuICAgIDpwYWdlLnN5bmM9XCJwYWdlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IFBhZ2luYXRpb24gfSBmcm9tICdAZGl0b2pzL3VpJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXBhZ2luYXRpb24nLCB7XG4gIGNvbXBvbmVudHM6IHsgUGFnaW5hdGlvbiB9LFxuXG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGxpbWl0OiB7IHR5cGU6IE51bWJlciwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0b3RhbDogeyB0eXBlOiBOdW1iZXIsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHBhZ2U6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuICgrdGhpcy5xdWVyeS5wYWdlIHx8IDApICsgMVxuICAgICAgfSxcblxuICAgICAgc2V0KHBhZ2UpIHtcbiAgICAgICAgaWYgKHRoaXMucGFnZSAhPT0gcGFnZSkge1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHRoaXMuZ2V0UXVlcnlMaW5rKHtcbiAgICAgICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgICAgICBwYWdlOiAocGFnZSAtIDEpXG4gICAgICAgICAgfSkpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0l0ZW1NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbSXRlbU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBkcmFnZ2luZzogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uU3RhcnREcmFnKCkge1xuICAgICAgdGhpcy5kcmFnZ2luZyA9IHRydWVcbiAgICB9LFxuXG4gICAgb25FbmREcmFnKHsgb2xkSW5kZXgsIG5ld0luZGV4IH0pIHtcbiAgICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZVxuICAgICAgaWYgKG9sZEluZGV4ICE9PSBuZXdJbmRleCkge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdXBkYXRlT3JkZXIoc291cmNlU2NoZW1hLCBsaXN0LCBwYWdpbmF0aW9uUmFuZ2UpIHtcbiAgICAgIGNvbnN0IHsgb3JkZXJLZXkgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgaWYgKG9yZGVyS2V5KSB7XG4gICAgICAgIC8vIFJlb3JkZXIgdGhlIGNoYW5nZWQgZW50cmllcyBieSB0aGVpciBvcmRlciBrZXksIHRha2luZyBwYWdpbmF0aW9uXG4gICAgICAgIC8vIG9mZnNldHMgaW50byBhY2NvdW50OlxuICAgICAgICBjb25zdCBvZmZzZXQgPSBwYWdpbmF0aW9uUmFuZ2U/LlswXSB8fCAwXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGxpc3RbaV1bb3JkZXJLZXldID0gaSArIG9mZnNldFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdFxuICAgIH1cbiAgfVxufVxuIiwiXG4uZGl0by10cmVlLWl0ZW0oXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPWB7XG4gICAgJ2RpdG8tZHJhZ2dpbmcnOiBkcmFnZ2luZyxcbiAgICAnZGl0by1hY3RpdmUnOiBhY3RpdmVcbiAgfWBcbiAgOnN0eWxlPVwibGV2ZWwgPiAwICYmIHsgJy0tbGV2ZWwnOiBsZXZlbCB9XCJcbilcbiAgLmRpdG8tdHJlZS1oZWFkZXIodi1pZj1cImxhYmVsXCIpXG4gICAgLmRpdG8tdHJlZS1icmFuY2goXG4gICAgICB2LWlmPVwibnVtRW50cmllc1wiXG4gICAgICBAY2xpY2suc3RvcD1cIm9wZW5lZCA9ICFvcGVuZWRcIlxuICAgIClcbiAgICAgIC5kaXRvLWNoZXZyb24oXG4gICAgICAgIHYtaWY9XCJudW1FbnRyaWVzXCJcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuZWQnOiBvcGVuZWQgfVwiXG4gICAgICApXG4gICAgICAuZGl0by10cmVlLWxhYmVsKHYtaHRtbD1cImxhYmVsXCIpXG4gICAgICAuZGl0by10cmVlLWluZm8odi1pZj1cImRldGFpbHNcIikge3sgZGV0YWlscyB9fVxuICAgIC5kaXRvLXRyZWUtbGVhZih2LWVsc2UpXG4gICAgICAuZGl0by10cmVlLWxhYmVsKHYtaHRtbD1cImxhYmVsXCIpXG4gICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtc21hbGwodi1pZj1cImhhc0VkaXRCdXR0b25zXCIpXG4gICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWlmPVwiZWRpdGFibGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgQGNsaWNrPVwib25FZGl0XCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gICAgICApXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgQGNsaWNrPVwib25EZWxldGVcIlxuICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgKVxuICB0YWJsZS5kaXRvLXByb3BlcnRpZXMoXG4gICAgdi1pZj1cInByb3BlcnRpZXNcIlxuICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gIClcbiAgICB0cihcbiAgICAgIHYtZm9yPVwicHJvcGVydHkgaW4gcHJvcGVydGllc1wiXG4gICAgKVxuICAgICAgdGRcbiAgICAgICAgZGl0by1sYWJlbChcbiAgICAgICAgICB2LWlmPVwicHJvcGVydHkubGFiZWwgIT09IGZhbHNlXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KVwiXG4gICAgICAgICAgOmxhYmVsPVwiZ2V0TGFiZWwocHJvcGVydHkpXCJcbiAgICAgICAgKVxuICAgICAgZGl0by10YWJsZS1jZWxsKFxuICAgICAgICA6Y2VsbD1cInByb3BlcnR5XCJcbiAgICAgICAgOnNjaGVtYT1cInByb3BlcnR5XCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIClcbiAgdnVlLWRyYWdnYWJsZShcbiAgICB2LWlmPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gICAgdi1iaW5kPVwiZ2V0RHJhZ09wdGlvbnMoY2hpbGRyZW5EcmFnZ2FibGUsIHRydWUpXCJcbiAgICA6bGlzdD1cInVwZGF0ZU9yZGVyKGNoaWxkcmVuU2NoZW1hLCBjaGlsZHJlbkxpc3QpXCJcbiAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgQGVuZD1cIm9uRW5kRHJhZygkZXZlbnQsIGNoaWxkcmVuU2NoZW1hKVwiXG4gIClcbiAgICBkaXRvLXRyZWUtaXRlbShcbiAgICAgIHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiBjaGlsZHJlbkl0ZW1zXCJcbiAgICAgIDprZXk9XCJnZXRJdGVtVWlkKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEpXCJcbiAgICAgIDpzY2hlbWE9XCJjaGlsZHJlblNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJnZXRJdGVtRGF0YVBhdGgoY2hpbGRyZW5TY2hlbWEsIGluZGV4KVwiXG4gICAgICA6ZGF0YT1cIml0ZW0uZGF0YVwiXG4gICAgICA6cGF0aD1cIml0ZW0ucGF0aFwiXG4gICAgICA6b3Blbj1cIml0ZW0ub3BlblwiXG4gICAgICA6YWN0aXZlPVwiaXRlbS5hY3RpdmVcIlxuICAgICAgOmRyYWdnYWJsZT1cImNoaWxkcmVuRHJhZ2dhYmxlXCJcbiAgICAgIDpsYWJlbD1cImdldEl0ZW1MYWJlbChjaGlsZHJlblNjaGVtYSwgaXRlbS5kYXRhLCB7IGluZGV4IH0pXCJcbiAgICAgIDpsZXZlbD1cImxldmVsICsgMVwiXG4gICAgKVxuICAgIC8vIFRPRE86IENvbnZlcnQgZGl0by10cmVlLWl0ZW0gdG8gdXNlIGRpdG8tbGFiZWwgaW50ZXJuYWxseSwgYW5kIHRoZW5cbiAgICAvLyBwYXNzIGBhc09iamVjdDogdHJ1ZWAgaW4gdGhlIGBnZXRJdGVtTGFiZWwoKWAgY2FsbCBhYm92ZS5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXRyZWUtaXRlbShcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOmNsYXNzPWB7XG4gICAgICAnZGl0by1kcmFnZ2luZyc6IGRyYWdnaW5nLFxuICAgICAgJ2RpdG8tYWN0aXZlJzogYWN0aXZlXG4gICAgfWBcbiAgICA6c3R5bGU9XCJsZXZlbCA+IDAgJiYgeyAnLS1sZXZlbCc6IGxldmVsIH1cIlxuICApXG4gICAgLmRpdG8tdHJlZS1oZWFkZXIodi1pZj1cImxhYmVsXCIpXG4gICAgICAuZGl0by10cmVlLWJyYW5jaChcbiAgICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgICBAY2xpY2suc3RvcD1cIm9wZW5lZCA9ICFvcGVuZWRcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1jaGV2cm9uKFxuICAgICAgICAgIHYtaWY9XCJudW1FbnRyaWVzXCJcbiAgICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW5lZCc6IG9wZW5lZCB9XCJcbiAgICAgICAgKVxuICAgICAgICAuZGl0by10cmVlLWxhYmVsKHYtaHRtbD1cImxhYmVsXCIpXG4gICAgICAgIC5kaXRvLXRyZWUtaW5mbyh2LWlmPVwiZGV0YWlsc1wiKSB7eyBkZXRhaWxzIH19XG4gICAgICAuZGl0by10cmVlLWxlYWYodi1lbHNlKVxuICAgICAgICAuZGl0by10cmVlLWxhYmVsKHYtaHRtbD1cImxhYmVsXCIpXG4gICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1zbWFsbCh2LWlmPVwiaGFzRWRpdEJ1dHRvbnNcIilcbiAgICAgICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgICAgICAgKVxuICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgdi1pZj1cImVkaXRhYmxlXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBAY2xpY2s9XCJvbkVkaXRcIlxuICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZWRpdClcIlxuICAgICAgICApXG4gICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBAY2xpY2s9XCJvbkRlbGV0ZVwiXG4gICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgKVxuICAgIHRhYmxlLmRpdG8tcHJvcGVydGllcyhcbiAgICAgIHYtaWY9XCJwcm9wZXJ0aWVzXCJcbiAgICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gICAgKVxuICAgICAgdHIoXG4gICAgICAgIHYtZm9yPVwicHJvcGVydHkgaW4gcHJvcGVydGllc1wiXG4gICAgICApXG4gICAgICAgIHRkXG4gICAgICAgICAgZGl0by1sYWJlbChcbiAgICAgICAgICAgIHYtaWY9XCJwcm9wZXJ0eS5sYWJlbCAhPT0gZmFsc2VcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICAgICAgOmxhYmVsPVwiZ2V0TGFiZWwocHJvcGVydHkpXCJcbiAgICAgICAgICApXG4gICAgICAgIGRpdG8tdGFibGUtY2VsbChcbiAgICAgICAgICA6Y2VsbD1cInByb3BlcnR5XCJcbiAgICAgICAgICA6c2NoZW1hPVwicHJvcGVydHlcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpXCJcbiAgICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgKVxuICAgIHZ1ZS1kcmFnZ2FibGUoXG4gICAgICB2LWlmPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgICAgdi1zaG93PVwib3BlbmVkXCJcbiAgICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGNoaWxkcmVuRHJhZ2dhYmxlLCB0cnVlKVwiXG4gICAgICA6bGlzdD1cInVwZGF0ZU9yZGVyKGNoaWxkcmVuU2NoZW1hLCBjaGlsZHJlbkxpc3QpXCJcbiAgICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICAgIEBlbmQ9XCJvbkVuZERyYWcoJGV2ZW50LCBjaGlsZHJlblNjaGVtYSlcIlxuICAgIClcbiAgICAgIGRpdG8tdHJlZS1pdGVtKFxuICAgICAgICB2LWZvcj1cIihpdGVtLCBpbmRleCkgaW4gY2hpbGRyZW5JdGVtc1wiXG4gICAgICAgIDprZXk9XCJnZXRJdGVtVWlkKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEpXCJcbiAgICAgICAgOnNjaGVtYT1cImNoaWxkcmVuU2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZ2V0SXRlbURhdGFQYXRoKGNoaWxkcmVuU2NoZW1hLCBpbmRleClcIlxuICAgICAgICA6ZGF0YT1cIml0ZW0uZGF0YVwiXG4gICAgICAgIDpwYXRoPVwiaXRlbS5wYXRoXCJcbiAgICAgICAgOm9wZW49XCJpdGVtLm9wZW5cIlxuICAgICAgICA6YWN0aXZlPVwiaXRlbS5hY3RpdmVcIlxuICAgICAgICA6ZHJhZ2dhYmxlPVwiY2hpbGRyZW5EcmFnZ2FibGVcIlxuICAgICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSwgeyBpbmRleCB9KVwiXG4gICAgICAgIDpsZXZlbD1cImxldmVsICsgMVwiXG4gICAgICApXG4gICAgICAvLyBUT0RPOiBDb252ZXJ0IGRpdG8tdHJlZS1pdGVtIHRvIHVzZSBkaXRvLWxhYmVsIGludGVybmFsbHksIGFuZCB0aGVuXG4gICAgICAvLyBwYXNzIGBhc09iamVjdDogdHJ1ZWAgaW4gdGhlIGBnZXRJdGVtTGFiZWwoKWAgY2FsbCBhYm92ZS5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by10cmVlLWl0ZW1cbiAgICAtLWNoZXZyb24taW5kZW50OiAjeyRjaGV2cm9uLWluZGVudH1cbiAgICA+IC5kaXRvLXRyZWUtaGVhZGVyXG4gICAgICA+IC5kaXRvLXRyZWUtYnJhbmNoLFxuICAgICAgPiAuZGl0by10cmVlLWxlYWZcbiAgICAgICAgLy8gVXNlIGAtLWxldmVsYCBDU1MgdmFyaWFibGUgdG8gY2FsY3VsYXRlZCB0aGUgYWNjdW11bGF0ZWQgaW5kZW50XG4gICAgICAgIC8vIHBhZGRpbmcgZGlyZWN0bHkgaW5zdGVhZCBvZiBoYXZpbmcgaXQgYWNjdW11bGF0ZSBpbiBuZXN0ZWQgQ1NTLlxuICAgICAgICAvLyBUaGlzIHdheSwgd2UgY2FuIGtlZXAgdGhlIC5kaXRvLWFjdGl2ZSBhcmVhIGNvdmVyIHRoZSBmdWxsIHdpZHRoOlxuICAgICAgICBwYWRkaW5nLWxlZnQ6IGNhbGModmFyKC0tY2hldnJvbi1pbmRlbnQpICogKHZhcigtLWxldmVsLCAxKSAtIDEpKVxuICAgIC5kaXRvLXRyZWUtYnJhbmNoXG4gICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAuZGl0by10cmVlLWhlYWRlclxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuXG4gICAgLmRpdG8tdHJlZS1icmFuY2gsXG4gICAgLmRpdG8tdHJlZS1sZWFmXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBmbGV4OiBhdXRvXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAgIG1hcmdpbjogMXB4IDBcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIC5kaXRvLXRyZWUtbGFiZWwsXG4gICAgLmRpdG8tdHJlZS1pbmZvXG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgLmRpdG8tdHJlZS1pbmZvXG4gICAgICBwYWRkaW5nLWxlZnQ6IDAuMzVlbVxuICAgICAgY29sb3I6IHJnYmEoJGNvbG9yLWJsYWNrLCAuMilcbiAgICAuZGl0by1idXR0b25zXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICB2aXNpYmlsaXR5OiBoaWRkZW5cbiAgICAgIGhlaWdodDogMTAwJVxuICAgICAgbWFyZ2luLWxlZnQ6IDFlbVxuICAgICAgbWFyZ2luOiAxcHggMCAxcHggMWVtXG4gICAgLmRpdG8tdHJlZS1oZWFkZXI6aG92ZXJcbiAgICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlXG4gICAgLy8gSGlkZSBidXR0b25zIGR1cmluZyBkcmFnZ2luZ1xuICAgICYuZGl0by1kcmFnZ2luZ1xuICAgICAgLmRpdG8tdHJlZS1oZWFkZXJcbiAgICAgICAgPiAuZGl0by1idXR0b25zXG4gICAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuXG4gICAgJi5kaXRvLWFjdGl2ZVxuICAgICAgPiAuZGl0by10cmVlLWhlYWRlclxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gICAgICAgIHBhZGRpbmc6IDAgJGlucHV0LXBhZGRpbmctaG9yXG4gICAgICAgIG1hcmdpbjogMCAoLSRpbnB1dC1wYWRkaW5nLWhvcilcbiAgICAgICAgPiAuZGl0by10cmVlLWJyYW5jaFxuICAgICAgICAgID4gLmRpdG8tY2hldnJvbjo6YmVmb3JlXG4gICAgICAgICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAgICAgPiAqID4gLmRpdG8tdHJlZS1sYWJlbFxuICAgICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAuZGl0by1wcm9wZXJ0aWVzXG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgbWFyZ2luLWxlZnQ6ICRjaGV2cm9uLWluZGVudFxuICAgICAgPiB0clxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmVcbiAgICAgIC5kaXRvLWxhYmVsXG4gICAgICAgIG1hcmdpbjogMFxuICAgICAgICAmOjphZnRlclxuICAgICAgICAgIGNvbnRlbnQ6ICc6ICdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVnVlRHJhZ2dhYmxlIGZyb20gJ3Z1ZWRyYWdnYWJsZSdcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgT3JkZXJlZE1peGluIGZyb20gJy4uL21peGlucy9PcmRlcmVkTWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0TmFtZWRTY2hlbWFzLCBoYXNGb3JtU2NoZW1hIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdHJlZS1pdGVtJywge1xuICBjb21wb25lbnRzOiB7IFZ1ZURyYWdnYWJsZSB9LFxuICBtaXhpbnM6IFtPcmRlcmVkTWl4aW5dLFxuICBpbmplY3Q6IFsnY29udGFpbmVyJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtBcnJheSwgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIG9wZW46IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhY3RpdmU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsZXZlbDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZW5lZDogdGhpcy5vcGVuIHx8IHRoaXMuc2NoZW1hLm9wZW5cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBtZXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLm1ldGFcbiAgICB9LFxuXG4gICAgc3RvcmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIuc3RvcmVcbiAgICB9LFxuXG4gICAgZGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIuZGlzYWJsZWRcbiAgICB9LFxuXG4gICAgbmVzdGVkTWV0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMubWV0YSxcbiAgICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9wZXJ0aWVzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzKVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBTaG91bGQgdGhpcyBiZSBuYW1lZCBgc291cmNlU2NoZW1hYCBpbnN0ZWFkPyBVc2UgU291cmNlTWl4aW4/XG4gICAgY2hpbGRyZW5TY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEuY2hpbGRyZW5cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5MaXN0KCkge1xuICAgICAgY29uc3QgbmFtZSA9IHRoaXMuY2hpbGRyZW5TY2hlbWE/Lm5hbWVcbiAgICAgIHJldHVybiBuYW1lICYmIHRoaXMuZGF0YVtuYW1lXVxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkRyYWdnYWJsZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuY2hpbGRyZW5MaXN0Py5sZW5ndGggPiAxICYmXG4gICAgICAgIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2RyYWdnYWJsZScsIHtcbiAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgIHNjaGVtYTogdGhpcy5jaGlsZHJlblNjaGVtYVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBudW1DaGlsZHJlbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuTGlzdD8ubGVuZ3RoIHx8IDBcbiAgICB9LFxuXG4gICAgbnVtUHJvcGVydGllcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXM/Lmxlbmd0aCB8fCAwXG4gICAgfSxcblxuICAgIG51bUVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5udW1Qcm9wZXJ0aWVzICsgdGhpcy5udW1DaGlsZHJlblxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkl0ZW1zKCkge1xuICAgICAgY29uc3QgeyBjaGlsZHJlblNjaGVtYSB9ID0gdGhpc1xuICAgICAgaWYgKGNoaWxkcmVuU2NoZW1hKSB7XG4gICAgICAgIGNvbnN0IHsgZWRpdFBhdGggfSA9IHRoaXMuY29udGFpbmVyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuT3BlbiA9ICF0aGlzLnBhdGggJiYgY2hpbGRyZW5TY2hlbWEub3BlblxuICAgICAgICAvLyBCdWlsZCBhIGNoaWxkcmVuIGxpc3Qgd2l0aCBjaGlsZCBtZXRhIGluZm9ybWF0aW9uIGZvciB0aGUgdGVtcGxhdGUuXG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuTGlzdD8ubWFwKChkYXRhLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhdGggPSAoXG4gICAgICAgICAgICBjaGlsZHJlblNjaGVtYS5wYXRoICYmXG4gICAgICAgICAgICBgJHt0aGlzLnBhdGh9LyR7Y2hpbGRyZW5TY2hlbWEucGF0aH0vJHtpbmRleH1gXG4gICAgICAgICAgKVxuICAgICAgICAgIGNvbnN0IG9wZW4gPSBjaGlsZHJlbk9wZW4gfHxcbiAgICAgICAgICAgIC8vIE9ubHkgY291bnQgYXMgXCJpbiBlZGl0IHBhdGhcIiB3aGVuIGl0J3Mgbm90IHRoZSBmdWxsIGVkaXQgcGF0aC5cbiAgICAgICAgICAgIGVkaXRQYXRoLnN0YXJ0c1dpdGgocGF0aCkgJiYgcGF0aC5sZW5ndGggPCBlZGl0UGF0aC5sZW5ndGhcbiAgICAgICAgICBjb25zdCBhY3RpdmUgPSBlZGl0UGF0aCA9PT0gcGF0aFxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgIG9wZW4sXG4gICAgICAgICAgICBhY3RpdmVcbiAgICAgICAgICB9XG4gICAgICAgIH0pIHx8IFtdXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRldGFpbHMoKSB7XG4gICAgICBjb25zdCB7IG51bUNoaWxkcmVuIH0gPSB0aGlzXG4gICAgICByZXR1cm4gbnVtQ2hpbGRyZW4gJiYgYCR7bnVtQ2hpbGRyZW59ICR7XG4gICAgICAgIG51bUNoaWxkcmVuID09PSAxID8gJ2l0ZW0nIDogJ2l0ZW1zJ1xuICAgICAgfWBcbiAgICB9LFxuXG4gICAgaGFzRWRpdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kcmFnZ2FibGUgfHwgdGhpcy5lZGl0YWJsZSB8fCB0aGlzLmRlbGV0YWJsZVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBTdXBwb3J0IGNyZWF0YWJsZSFcbiAgICAvLyBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgY3JlYXRhYmxlLCBlZGl0YWJsZSBhbmQgZGVsZXRhYmxlIG92ZXJyaWRlcyBvbiB0aGVcbiAgICAvLyBhc3NvY2lhdGVkIGZvcm1zLCBqdXN0IGxpa2UgaW4gYFR5cGVMaXN0YCBhbmQgYFR5cGVPYmplY3RgLCB0aHJvdWdoXG4gICAgLy8gYERpdG9FZGl0QnV0dG9uc2AuIEl0IHdvdWxkIGJlIGJlc3QgdG8gdXNlIGBEaXRvRWRpdEJ1dHRvbnNgIGhlcmUgdG9vLlxuICAgIGNyZWF0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NyZWF0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChjcmVhdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdlZGl0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlZGl0YWJsZSkge1xuICAgICAgICByZXR1cm4gZWRpdGFibGUgJiYgaGFzRm9ybVNjaGVtYSh0aGlzLnNjaGVtYSlcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpIHtcbiAgICAgIHJldHVybiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBwcm9wZXJ0eS5uYW1lKVxuICAgIH0sXG5cbiAgICBvbkVkaXQoKSB7XG4gICAgICAvLyBBbGwgd2UgZ290IHRvIGRvIGlzIHB1c2ggdGhlIHJpZ2h0IGVkaXQgcGF0aCB0byB0aGUgcm91dGVyLCB0aGUgcmVzdFxuICAgICAgLy8gaXMgaGFuZGxlZCBieSBvdXIgcm91dGVzLCBhbGxvd2luZyByZWxvYWRzIGFzIHdlbGwuXG4gICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7XG4gICAgICAgIHBhdGg6IGAke3RoaXMuY29udGFpbmVyLnBhdGh9JHt0aGlzLnBhdGh9YCxcbiAgICAgICAgLy8gUHJlc2VydmUgY3VycmVudCBxdWVyeVxuICAgICAgICBxdWVyeTogdGhpcy4kcm91dGUucXVlcnlcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uRGVsZXRlKCkge1xuICAgICAgLy8gVE9ETzogSW1wbGVtZW50IVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLm9uQ2hhbmdlKClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudGhlYWQuZGl0by10YWJsZS1oZWFkXG4gIHRyXG4gICAgdGgoXG4gICAgICB2LWZvcj1cIihjb2x1bW4sIGluZGV4KSBpbiBjb2x1bW5zXCJcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoY29sdW1uKVwiXG4gICAgICA6Y2xhc3M9XCJnZXRDb2x1bW5DbGFzcyhjb2x1bW4pXCJcbiAgICApXG4gICAgICByb3V0ZXItbGluayhcbiAgICAgICAgdi1pZj1cImNvbHVtbi5zb3J0YWJsZVwiXG4gICAgICAgIDp0bz1cImdldFNvcnRMaW5rKGNvbHVtbilcIlxuICAgICAgICBjdXN0b20gdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgICAgIClcbiAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIDpjbGFzcz1cImdldFNvcnRDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICBAY2xpY2s9XCJuYXZpZ2F0ZVwiXG4gICAgICAgIClcbiAgICAgICAgICAuZGl0by1vcmRlci1hcnJvd3NcbiAgICAgICAgICBzcGFuIHt7IGdldExhYmVsKGNvbHVtbikgfX1cbiAgICAgIHNwYW4oXG4gICAgICAgIHYtZWxzZVxuICAgICAgKSB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgdGgodi1pZj1cImhhc0VkaXRCdXR0b25zXCIpXG4gICAgICAvLyBFbXB0eSA8c3Bhbj4gaXMgbmVlZGVkIGZvciBzdHlsaW5nLCBzZWUgX3RhYmxlLnNhc3NcbiAgICAgIHNwYW5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICAgIHRyXG4gICAgICB0aChcbiAgICAgICAgdi1mb3I9XCIoY29sdW1uLCBpbmRleCkgaW4gY29sdW1uc1wiXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoY29sdW1uKVwiXG4gICAgICAgIDpjbGFzcz1cImdldENvbHVtbkNsYXNzKGNvbHVtbilcIlxuICAgICAgKVxuICAgICAgICByb3V0ZXItbGluayhcbiAgICAgICAgICB2LWlmPVwiY29sdW1uLnNvcnRhYmxlXCJcbiAgICAgICAgICA6dG89XCJnZXRTb3J0TGluayhjb2x1bW4pXCJcbiAgICAgICAgICBjdXN0b20gdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgICAgICAgKVxuICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgOmNsYXNzPVwiZ2V0U29ydENsYXNzKGNvbHVtbilcIlxuICAgICAgICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIC5kaXRvLW9yZGVyLWFycm93c1xuICAgICAgICAgICAgc3BhbiB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgICAgIHNwYW4oXG4gICAgICAgICAgdi1lbHNlXG4gICAgICAgICkge3sgZ2V0TGFiZWwoY29sdW1uKSB9fVxuICAgICAgdGgodi1pZj1cImhhc0VkaXRCdXR0b25zXCIpXG4gICAgICAgIC8vIEVtcHR5IDxzcGFuPiBpcyBuZWVkZWQgZm9yIHN0eWxpbmcsIHNlZSBfdGFibGUuc2Fzc1xuICAgICAgICBzcGFuXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tdGFibGUtaGVhZFxuICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIHRyXG4gICAgICB0aFxuICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWxcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdFxuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgICAgIC5kaXRvLWJ1dHRvblxuICAgICAgICAgIC8vIENvbnZlbnRpb246IE5lc3RlZCBzcGFucyBoYW5kbGUgcGFkZGluZywgc2VlIGJlbG93XG4gICAgICAgICAgcGFkZGluZzogMFxuICAgICAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdFxuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDBcbiAgICAgICAgc3BhblxuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgICAgIC8vIENvbnZlbnRpb246IE5lc3RlZCBzcGFucyBoYW5kbGUgcGFkZGluZ1xuICAgICAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgICAgICAgJjplbXB0eTo6YWZ0ZXJcbiAgICAgICAgICAgIC8vIFByZXZlbnQgZW1wdHkgPHRoPiBmcm9tIGNvbGxhcHNpbmdcbiAgICAgICAgICAgIGNvbnRlbnQ6ICdcXDIwMGInIC8vIHplcm8td2lkdGggc3BhY2VcbiAgICAgICAgPiBzcGFuXG4gICAgICAgICAgZGlzcGxheTogYmxvY2tcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXRhYmxlLWhlYWQnLCB7XG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGNvbHVtbnM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGhhc0VkaXRCdXR0b25zOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNvcnQoKSB7XG4gICAgICBjb25zdCBvcmRlciA9ICh0aGlzLnF1ZXJ5Lm9yZGVyIHx8ICcnKS5zcGxpdCgvXFxzKy8pXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBvcmRlclswXSxcbiAgICAgICAgb3JkZXI6IG9yZGVyWzFdXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb2x1bW5DbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiBgZGl0by1jb2x1bW4tJHtoeXBoZW5hdGUoY29sdW1uLm5hbWUpfWBcbiAgICB9LFxuXG4gICAgZ2V0U29ydENsYXNzKGNvbHVtbikge1xuICAgICAgcmV0dXJuIHRoaXMuc29ydC5uYW1lID09PSBjb2x1bW4ubmFtZVxuICAgICAgICA/IGBkaXRvLXNlbGVjdGVkIGRpdG8tb3JkZXItJHt0aGlzLnNvcnQub3JkZXJ9YFxuICAgICAgICA6IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0U29ydExpbmsoY29sdW1uKSB7XG4gICAgICAvLyBUb2dnbGUgb3JkZXIgaWYgdGhlIHNhbWUgY29sdW1uIGlzIGNsaWNrZWQgYWdhaW4uXG4gICAgICBjb25zdCBvcmRlciA9IHRoaXMuc29ydC5uYW1lID09PSBjb2x1bW4ubmFtZSAmJiB0aGlzLnNvcnQub3JkZXIgPT09ICdhc2MnXG4gICAgICAgID8gJ2Rlc2MnXG4gICAgICAgIDogJ2FzYydcbiAgICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5TGluayh7XG4gICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgIG9yZGVyOiBgJHtjb2x1bW4ubmFtZX0gJHtvcmRlcn1gXG4gICAgICB9KVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG50ZChcbiAgOmNsYXNzPVwiY2VsbC5jbGFzc1wiXG4gIDpzdHlsZT1cImNlbGwuc3R5bGVcIlxuKVxuICAvLyBUT0RPOiBJbXBsZW1lbnQgaW5saW5lZCBjb21wb25lbnRzIGluIGNlbGwgbW9kZSFcbiAgY29tcG9uZW50KFxuICAgIHYtaWY9XCJjb21wb25lbnRcIlxuICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICApXG4gIHNwYW4oXG4gICAgdi1lbHNlXG4gICAgdi1odG1sPVwicmVuZGVyQ2VsbChkYXRhKVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRkKFxuICAgIDpjbGFzcz1cImNlbGwuY2xhc3NcIlxuICAgIDpzdHlsZT1cImNlbGwuc3R5bGVcIlxuICApXG4gICAgLy8gVE9ETzogSW1wbGVtZW50IGlubGluZWQgY29tcG9uZW50cyBpbiBjZWxsIG1vZGUhXG4gICAgY29tcG9uZW50KFxuICAgICAgdi1pZj1cImNvbXBvbmVudFwiXG4gICAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiAgICBzcGFuKFxuICAgICAgdi1lbHNlXG4gICAgICB2LWh0bWw9XCJyZW5kZXJDZWxsKGRhdGEpXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGVzY2FwZUh0bWwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdGFibGUtY2VsbCcsIHtcbiAgcHJvcHM6IHtcbiAgICBjZWxsOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvbHZlVHlwZUNvbXBvbmVudCh0aGlzLmNlbGwuY29tcG9uZW50KVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcmVuZGVyQ2VsbChpdGVtKSB7XG4gICAgICBjb25zdCB7IG5hbWUsIHJlbmRlciB9ID0gdGhpcy5jZWxsXG4gICAgICBjb25zdCB2YWx1ZSA9IGl0ZW1bbmFtZV1cbiAgICAgIHJldHVybiByZW5kZXJcbiAgICAgICAgPyByZW5kZXIuY2FsbChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICAgICAgZGF0YVBhdGg6IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIG5hbWUpXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICA6IGVzY2FwZUh0bWwodmFsdWUpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQSBjb21wb25lbnQgdG8gc2ltcGx5IHBhc3MgdGhyb3VnaCBhbiBleGlzdGluZyB2dWUgdm5vZGUuXG4vLyBTZWU6IGh0dHBzOi8vZm9ydW0udnVlanMub3JnL3QvMjgxNjIvNFxuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdm5vZGUnLCB7XG4gIGZ1bmN0aW9uYWw6IHRydWUsXG4gIHJlbmRlcjogKGgsIGNvbnRleHQpID0+IGNvbnRleHQucHJvcHMubm9kZVxufSlcbjwvc2NyaXB0PlxuIiwiLy8gVHlwZUNvbXBvbmVudCBpcyB0aGUgYWJzdHJhY3QgYmFzZSBjb21wb25lbnQgZm9yIGFsbCBvdGhlciB0eXBlIGNvbXBvbmVudHNcbi8vIGluc2lkZSB0aGUgdHlwZXMvIGZvbGRlci4gVGhlcmUncyBhbHNvIGEgc2VwYXJhdGUgY29uY3JldGVcbi8vIGBUeXBlQ29tcG9uZW50LnZ1ZWAgY29tcG9uZW50LCB1c2UgdG8gcmVuZGVyIHRoZSBgdHlwZTogJ2NvbXBvbmVudCdgIHR5cGVzLlxuaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCB7IHJlZ2lzdGVyVHlwZUNvbXBvbmVudCwgZ2V0VHlwZUNvbXBvbmVudCB9IGZyb20gJy4vdXRpbHMvc2NoZW1hLmpzJ1xuXG5jb25zdCBUeXBlQ29tcG9uZW50ID0gRGl0b0NvbXBvbmVudC5leHRlbmQoe1xuICBtaXhpbnM6IFtUeXBlTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiBmYWxzZSxcbiAgdGV4dEZpZWxkOiBmYWxzZSxcbiAgLy8gU2V0IHJlYXNvbmFibGUgZGVmYXVsdHMgZm9yIGFsbCBvZiB0aGVzZSB0aGF0IGFyZSB1c2VkIGJ5IG1vc3QgdHlwZVxuICAvLyBjb21wb25lbnRzLiBUaGVzZSBvbmx5IG5lZWQgZGVmaW5pbmcgaW4gc3ViLWNsYXNzZXMgd2hlbiB0aGV5IGRpZmZlci5cbiAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICBkZWZhdWx0TmVzdGVkOiB0cnVlLFxuICBkZWZhdWx0VmlzaWJsZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogdHJ1ZSxcbiAgZXhjbHVkZVZhbHVlOiBmYWxzZSxcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBudWxsLFxuICBvbWl0UGFkZGluZzogZmFsc2Vcbn0pXG5cblR5cGVDb21wb25lbnQucmVnaXN0ZXIgPSBmdW5jdGlvbih0eXBlcywgZGVmaW5pdGlvbiA9IHt9KSB7XG4gIHR5cGVzID0gYXNBcnJheSh0eXBlcylcbiAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5jb21wb25lbnQoYGRpdG8tdHlwZS0ke3R5cGVzWzBdfWAsIGRlZmluaXRpb24pXG4gIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgIHJlZ2lzdGVyVHlwZUNvbXBvbmVudCh0eXBlLCBjb21wb25lbnQpXG4gIH1cbiAgcmV0dXJuIGNvbXBvbmVudFxufVxuXG5UeXBlQ29tcG9uZW50LmdldCA9IGdldFR5cGVDb21wb25lbnRcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudFxuIiwiXG5idXR0b24uZGl0by1idXR0b24oXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDp0eXBlPVwidHlwZVwiXG4gIDp0aXRsZT1cInRleHRcIlxuICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4pIHt7IHRleHQgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOnR5cGU9XCJ0eXBlXCJcbiAgICA6dGl0bGU9XCJ0ZXh0XCJcbiAgICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICApIHt7IHRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGhhc1Jlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBsYWJlbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAnYnV0dG9uJywgJ3N1Ym1pdCdcbl0sXG4vLyBAdnVlL2NvbXBvbmVudFxue1xuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgZXhjbHVkZVZhbHVlOiB0cnVlLFxuICBkZWZhdWx0V2lkdGg6ICdhdXRvJyxcbiAgLy8gVE9ETzogQ29uc2lkZXIgbWFraW5nIHRoaXMgd29yayBuaWNlbHk6XG4gIC8vIG9taXRGbGV4R3JvdzogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIHZlcmIoKSB7XG4gICAgICByZXR1cm4gdGhpcy52ZXJic1t0aGlzLm5hbWVdIHx8IHRoaXMubmFtZVxuICAgIH0sXG5cbiAgICB0ZXh0OiBnZXRTY2hlbWFBY2Nlc3NvcigndGV4dCcsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGdldCh0ZXh0KSB7XG4gICAgICAgIHJldHVybiB0ZXh0IHx8IGxhYmVsaXplKHRoaXMudmVyYilcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNsb3NlRm9ybTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Nsb3NlRm9ybScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIEBvdmVycmlkZVxuICAgIGdldExpc3RlbmVycygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvY3VzOiB0aGlzLm9uRm9jdXMsXG4gICAgICAgIGJsdXI6IHRoaXMub25CbHVyLFxuICAgICAgICBjbGljazogdGhpcy5vbkNsaWNrXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdChvcHRpb25zKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvdXJjZUNvbXBvbmVudD8uc3VibWl0KHRoaXMsIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIG9uQ2xpY2soKSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmVtaXRFdmVudCgnY2xpY2snLCB7XG4gICAgICAgIHBhcmVudDogdGhpcy5zY2hlbWFDb21wb25lbnRcbiAgICAgIH0pXG4gICAgICAvLyBIYXZlIGJ1dHRvbnMgdGhhdCBkZWZpbmUgcmVzb3VyY2VzIGNhbGwgYHRoaXMuc3VibWl0KClgIGJ5IGRlZmF1bHQ6XG4gICAgICBpZiAoXG4gICAgICAgIHJlcyA9PT0gdW5kZWZpbmVkICYmIC8vIE1lYW5pbmc6IGRvbid0IHByZXZlbnQgZGVmYXVsdC5cbiAgICAgICAgaGFzUmVzb3VyY2UodGhpcy5zY2hlbWEpXG4gICAgICApIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zdWJtaXQoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5pbnB1dC5kaXRvLWNoZWNrYm94KFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICB0eXBlPVwiY2hlY2tib3hcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBpbnB1dC5kaXRvLWNoZWNrYm94KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1jaGVja2JveFxuICAgIEBleHRlbmQgJWlucHV0LWJvcmRlcmxlc3Ncbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY2hlY2tib3gnLCB7XG4gIG5hdGl2ZUZpZWxkOiB0cnVlXG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQge1xuICBpc09iamVjdCwgaXNGdW5jdGlvbiwgaXNQcm9taXNlLCBub3JtYWxpemVEYXRhUGF0aCwgZ2V0VmFsdWVBdERhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgTG9hZGluZ01peGluIGZyb20gJy4vTG9hZGluZ01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtMb2FkaW5nTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBhc3luY0RhdGFFbnRyaWVzOiB7fVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlRGF0YVNjaGVtYShzY2hlbWEsIG5hbWUsIHtcbiAgICAgIHJlc29sdmVDb3VudGVyID0gMSxcbiAgICAgIC4uLmxvYWRpbmdPcHRpb25zXG4gICAgfSA9IHt9KSB7XG4gICAgICBpZiAoIWlzT2JqZWN0KHNjaGVtYSkpIHtcbiAgICAgICAgc2NoZW1hID0geyBkYXRhOiBzY2hlbWEgfVxuICAgICAgfVxuICAgICAgbGV0IHsgZGF0YSA9IHVuZGVmaW5lZCwgZGF0YVBhdGggPSBudWxsIH0gPSBzY2hlbWFcbiAgICAgIC8vIFNlZSBpZiB0aGVyZSBpcyBhc3luYyBkYXRhIGxvYWRpbmcgYWxyZWFkeSBpbiBwcm9jZXNzLlxuICAgICAgY29uc3QgYXN5bmNFbnRyeSA9IChcbiAgICAgICAgdGhpcy5hc3luY0RhdGFFbnRyaWVzW25hbWVdIHx8XG4gICAgICAgIHRoaXMuJHNldCh0aGlzLmFzeW5jRGF0YUVudHJpZXMsIG5hbWUsIHtcbiAgICAgICAgICBkZXBlbmRlbmN5RnVuY3Rpb246IG51bGwsXG4gICAgICAgICAgcmVzb2x2ZUNvdW50ZXI6IDAsXG4gICAgICAgICAgcmVzb2x2ZWREYXRhOiBudWxsLFxuICAgICAgICAgIHJlc29sdmluZzogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC8vIElmIHRoZSBkYXRhIGNhbGxiYWNrIHByb3ZpZGVkIGEgZGVwZW5kZW5jeSBmdW5jdGlvbiB3aGVuIGl0IHdhcyBjYWxsZWQsXG4gICAgICAvLyBjYWwgaXQgaW4gZXZlcnkgY2FsbCBvZiBgaGFuZGxlRGF0YVNjaGVtYSgpYCB0byBmb3JjZSBWdWUgdG8ga2VlcCB0cmFja1xuICAgICAgLy8gb2YgdGhlIGFzeW5jIGRlcGVuZGVuY2llcy5cbiAgICAgIGFzeW5jRW50cnkuZGVwZW5kZW5jeUZ1bmN0aW9uPy5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcblxuICAgICAgaWYgKGFzeW5jRW50cnkucmVzb2x2ZUNvdW50ZXIgPiAwKSB7XG4gICAgICAgIC8vIElmIHRoZSBkYXRhIHdhcyByZXNvbHZlZCBhbHJlYWR5LCByZXR1cm4gaXQgYW5kIGNsZWFyIHRoZSB2YWx1ZSBvbmNlXG4gICAgICAgIC8vIGByZXNvbHZlQ291bnRlcmAgcmVhY2hlcyB6ZXJvLiBDb3VudGluZyBpcyBuZWVkZWQgYmVjYXVzZSBkZXBlbmRpbmdcbiAgICAgICAgLy8gb24gdGhlIHVzZSBvZiBkYXRhIGFuZCByZWFjdGl2aXR5LCBtdWx0aXBsZSBjYWxscyB0byB0aGUgY29tcHV0ZWRcbiAgICAgICAgLy8gZ2V0dGVyIGFyZSB0cmlnZ2VyZWQgd2hlbiB0aGUgZGF0YSBpcyBjaGFuZ2luZy4gQ2xlYXJpbmcgdGhlIHJlc29sdmVkXG4gICAgICAgIC8vIGRhdGEgd29ya3MgYmVjYXVzZSBWdWUgY2FjaGVzIHRoZSByZXN1bHQgb2YgY29tcHV0ZWQgZ2V0dGVycyBhbmQgb25seVxuICAgICAgICAvLyByZWV2YWx1YXRlcyBpZiBvbmUgb2YgdGhlIGRlcGVuZGVuY2llcyBjaGFuZ2VkLiBUaGlzIGlzIHRvIGVuc3VyZVxuICAgICAgICAvLyB0aGF0IGEgY2FjaGVkIHZhbHVlIGhlcmUgZG9lc24ndCBibG9jayAvIG92ZXJyaWRlIHJlZXZhbHVhdGlvbjpcbiAgICAgICAgY29uc3QgeyByZXNvbHZlZERhdGEgfSA9IGFzeW5jRW50cnlcbiAgICAgICAgaWYgKC0tYXN5bmNFbnRyeS5yZXNvbHZlQ291bnRlciA9PT0gMCkge1xuICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWREYXRhID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNvbHZlZERhdGFcbiAgICAgIH1cbiAgICAgIC8vIEF2b2lkIGNhbGxpbmcgdGhlIGRhdGEgZnVuY3Rpb24gdHdpY2U6XG4gICAgICBpZiAoYXN5bmNFbnRyeS5yZXNvbHZpbmcpIHtcbiAgICAgICAgZGF0YSA9IG51bGxcbiAgICAgIH0gZWxzZSBpZiAoZGF0YSkge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihkYXRhKSkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGRhdGEuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICAgLy8gSWYgdGhlIHJlc3VsdCBvZiB0aGUgZGF0YSBmdW5jdGlvbiBpcyBhbm90aGVyIGZ1bmN0aW9uLCB0aGVuIHRoZVxuICAgICAgICAgIC8vIGZpcnN0IGRhdGEgZnVuY3Rpb24gaXMgdGhlcmUgdG8gdHJhY2sgZGVwZW5kZW5jaWVzIGFuZCB0aGUgcmVhbFxuICAgICAgICAgIC8vIGRhdGEgbG9hZGluZyBoYXBwZW5zIGluIHRoZSBmdW5jdGlvbiB0aGF0IGl0IHJldHVybmVkLiBLZWVwIHRyYWNrXG4gICAgICAgICAgLy8gaXQgaW4gYGRlcGVuZGVuY3lGdW5jdGlvbmAgc28gaXQgY2FuIGJlIGNhbGxlZCBvbiBlYWNoIGNhbGwgb2ZcbiAgICAgICAgICAvLyBgaGFuZGxlRGF0YVNjaGVtYSgpYCB0byBrZWVwIHRoZSBkZXBlbmRlbmNpZXMgaW50YWN0LCBhbmQgY2FsbFxuICAgICAgICAgIC8vIHRoZSBmdW5jdGlvbiB0aGF0IGl0IHJldHVybmVkIG9uY2UgdG8gZ2V0IHRoZSBhY3R1YWwgZGF0YTpcbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbihyZXN1bHQpKSB7XG4gICAgICAgICAgICBhc3luY0VudHJ5LmRlcGVuZGVuY3lGdW5jdGlvbiA9IGRhdGFcbiAgICAgICAgICAgIGRhdGEgPSByZXN1bHQuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSByZXN1bHRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJvbWlzZShkYXRhKSkge1xuICAgICAgICAgIC8vIElmIHRoZSBkYXRhIGlzIGFzeW5jaHJvbm91cywgaXQgY2FuJ3QgYmUgcmV0dXJuZWQgc3RyYWlnaHQgYXdheS5cbiAgICAgICAgICAvLyBCdXQgd2UgY2FuIGNoZWF0IHVzaW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYW5kIGByZXNvbHZlZERhdGFgLFxuICAgICAgICAgIC8vIHdoaWNoIGlzIGdvaW5nIHRvIHJlY2VpdmUgdGhlIGxvYWRlZCBkYXRhIGFzeW5jaHJvbm91c2x5LFxuICAgICAgICAgIC8vIHRyaWdnZXJpbmcgYSByZWNvbXB1dGUgb2YgdGhlIGNvbXB1dGVkIHByb3BlcnR5IHRoYXQgY2FsbHNcbiAgICAgICAgICAvLyBgaGFuZGxlRGF0YVNjaGVtYSgpYC5cbiAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmluZyA9IHRydWVcbiAgICAgICAgICB0aGlzLnJlc29sdmVEYXRhKGRhdGEsIGxvYWRpbmdPcHRpb25zKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZlQ291bnRlciA9IHJlc29sdmVDb3VudGVyXG4gICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVkRGF0YSA9IGRhdGFcbiAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2aW5nID0gZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICAgIC8vIENsZWFyIGRhdGEgdW50aWwgcHJvbWlzZSBpcyByZXNvbHZlZCBhbmQgYHJlc29sdmVkRGF0YWAgaXMgc2V0XG4gICAgICAgICAgZGF0YSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkYXRhUGF0aCkge1xuICAgICAgICBkYXRhID0gZ2V0VmFsdWVBdERhdGFQYXRoKFxuICAgICAgICAgIHRoaXMucm9vdERhdGEsXG4gICAgICAgICAgbm9ybWFsaXplRGF0YVBhdGgoYCR7dGhpcy5kYXRhUGF0aH0vJHtkYXRhUGF0aH1gKVxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVxuICAgIH0sXG5cbiAgICBhc3luYyByZXNvbHZlRGF0YShsb2FkLCBsb2FkaW5nT3B0aW9ucyA9IHt9KSB7XG4gICAgICB0aGlzLnNldExvYWRpbmcodHJ1ZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICBsZXQgZGF0YSA9IG51bGxcbiAgICAgIHRyeSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCAoaXNGdW5jdGlvbihsb2FkKSA/IGxvYWQoKSA6IGxvYWQpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmFkZEVycm9yKGVycm9yLm1lc3NhZ2UgfHwgZXJyb3IpXG4gICAgICB9XG4gICAgICB0aGlzLnNldExvYWRpbmcoZmFsc2UsIGxvYWRpbmdPcHRpb25zKVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBEYXRhTWl4aW4gZnJvbSAnLi9EYXRhTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgc2V0VGVtcG9yYXJ5SWQsIGlzUmVmZXJlbmNlIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc0FycmF5LCBpc1N0cmluZywgaXNGdW5jdGlvbixcbiAgbm9ybWFsaXplRGF0YVBhdGgsIGxhYmVsaXplLCBkZWJvdW5jZUFzeW5jXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0RhdGFNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaGFzT3B0aW9uczogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzZWxlY3RlZFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnRWYWx1ZSA9IHZhbHVlID0+IHRoaXMucmVsYXRlXG4gICAgICAgICAgPyB0aGlzLmhhc09wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgID8gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpc0FycmF5KHRoaXMudmFsdWUpXG4gICAgICAgICAgPyB0aGlzLnZhbHVlLm1hcChjb252ZXJ0VmFsdWUpLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAhPT0gbnVsbClcbiAgICAgICAgICA6IGNvbnZlcnRWYWx1ZSh0aGlzLnZhbHVlKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgLy8gV2hlbiByZWxhdGluZyBhbmQgYXMgc29vbiBhcyB0aGUgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLi4uXG4gICAgICAgICAgdGhpcy5yZWxhdGUgJiYgdGhpcy5oYXNPcHRpb25zICYmIChcbiAgICAgICAgICAgIC8vIC4uLmlmIHRoZSB2YWx1ZSBpcyBmb3JjZWQgdG8gbnVsbCBiZWNhdXNlIGEgZGlzYXBwZWFyZWQgb3B0aW9uLi4uXG4gICAgICAgICAgICB2YWx1ZSA9PT0gbnVsbCAmJiB0aGlzLnZhbHVlICE9PSBudWxsIHx8XG4gICAgICAgICAgICAvLyAuLi5vciBpZiB0aGUgdmFsdWUgaXMgYSByZWZlcmVuY2UsIHJlcGxhY2UgaXQgd2l0aCBpdHMgb3B0aW9uXG4gICAgICAgICAgICAvLyB2YWx1ZSwgc28gdGhhdCBpdCdsbCBob2xkIGFjdHVhbCBkYXRhLCBub3QganVzdCBhIHJlZmVyZW5jZSBpZC5cbiAgICAgICAgICAgIGlzUmVmZXJlbmNlKHRoaXMudmFsdWUpXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnQgPSB2YWx1ZSA9PiB0aGlzLnJlbGF0ZVxuICAgICAgICAgID8gdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIHRoaXMudmFsdWUgPSBpc0FycmF5KHZhbHVlKVxuICAgICAgICAgID8gdmFsdWUubWFwKGNvbnZlcnQpXG4gICAgICAgICAgOiBjb252ZXJ0KHZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZE9wdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHRoaXMuc2VsZWN0ZWRWYWx1ZSlcbiAgICB9LFxuXG4gICAgb3B0aW9ucygpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmhhbmRsZURhdGFTY2hlbWEodGhpcy5zY2hlbWEub3B0aW9ucywgJ29wdGlvbnMnLCB7XG4gICAgICAgIHJlc29sdmVDb3VudGVyOiAxXG4gICAgICB9KSA/PyBbXVxuICAgICAgaWYgKCFpc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBvcHRpb25zIGRhdGEsIHNob3VsZCBiZSBhcnJheTogJHtkYXRhfWApXG4gICAgICB9XG4gICAgICB0aGlzLmhhc09wdGlvbnMgPSBkYXRhLmxlbmd0aCA+IDBcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NPcHRpb25zKGRhdGEpXG4gICAgfSxcblxuICAgIGFjdGl2ZU9wdGlvbnMoKSB7XG4gICAgICAvLyBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gYFR5cGVNdWx0aXNlbGVjdGAgdG8gcmV0dXJuIHRoZSBgc2VhcmNoZWRPcHRpb25zYFxuICAgICAgLy8gd2hlbiBhIHNlYXJjaCBmaWx0ZXIgd2FzIGFwcGxpZWQuXG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zXG4gICAgfSxcblxuICAgIHJlbGF0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlbGF0ZScsIHtcbiAgICAgIC8vIFRPRE86IENvbnZlcnQgdG8gYHJlbGF0ZUJ5OiAnaWQnYFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgLy8gV2UgY2Fubm90IHVzZSBzY2hlbWEgYWNjZXNzb3IgY2FsbGJhY2sgbWFnaWMgZm9yIGByZWxhdGVgIGFzIHdlIG5lZWRcbiAgICAgIC8vIHRoaXMgb3V0c2lkZSBvZiB0aGUgY29tcG9uZW50J3MgbGlmZS1zcGFuLCBzZWUgYHByb2Nlc3NEYXRhKClgIGJlbG93LlxuICAgICAgY2FsbGJhY2s6IGZhbHNlXG4gICAgfSksXG5cbiAgICBncm91cEJ5OiBnZXRTY2hlbWFBY2Nlc3NvcignZ3JvdXBCeScsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIG9wdGlvbkxhYmVsOiBnZXRTY2hlbWFBY2Nlc3Nvcignb3B0aW9ucy5sYWJlbCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQobGFiZWwpIHtcbiAgICAgICAgLy8gSWYgbm8gYGxhYmVsYCB3YXMgcHJvdmlkZWQgYnV0IHRoZSBvcHRpb25zIGFyZSBvYmplY3RzLCBhc3N1bWUgYVxuICAgICAgICAvLyBkZWZhdWx0IHZhbHVlIG9mICdsYWJlbCc6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgbGFiZWwgfHxcbiAgICAgICAgICB0aGlzLmdldE9wdGlvbktleSgnbGFiZWwnKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgb3B0aW9uVmFsdWU6IGdldFNjaGVtYUFjY2Vzc29yKCdvcHRpb25zLnZhbHVlJywge1xuICAgICAgdHlwZTogW1N0cmluZywgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldCh2YWx1ZSkge1xuICAgICAgICAvLyBJZiBubyBgbGFiZWxgIHdhcyBwcm92aWRlZCBidXQgdGhlIG9wdGlvbnMgYXJlIG9iamVjdHMsIGFzc3VtZSBhXG4gICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgb2YgJ3ZhbHVlJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB2YWx1ZSB8fFxuICAgICAgICAgIHRoaXMucmVsYXRlICYmICdpZCcgfHxcbiAgICAgICAgICB0aGlzLmdldE9wdGlvbktleSgndmFsdWUnKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogQ29uc2lkZXIgbW92aW5nIHNlYXJjaCB0byBgb3B0aW9ucy5zZWFyY2hgP1xuICAgIHNlYXJjaEZpbHRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3NlYXJjaCcsIHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQoc2VhcmNoKSB7XG4gICAgICAgIGlmIChzZWFyY2gpIHtcbiAgICAgICAgICBjb25zdCB7IGZpbHRlciwgZGVib3VuY2UgfSA9IGlzRnVuY3Rpb24oc2VhcmNoKVxuICAgICAgICAgICAgPyB7IGZpbHRlcjogc2VhcmNoIH1cbiAgICAgICAgICAgIDogc2VhcmNoXG4gICAgICAgICAgcmV0dXJuIGRlYm91bmNlID8gZGVib3VuY2VBc3luYyhmaWx0ZXIsIGRlYm91bmNlKSA6IGZpbHRlclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSksXG5cbiAgICBncm91cEJ5TGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ncm91cEJ5ID8gJ2xhYmVsJyA6IG51bGxcbiAgICB9LFxuXG4gICAgZ3JvdXBCeU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ncm91cEJ5ID8gJ29wdGlvbnMnIDogbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0T3B0aW9uS2V5KGtleSkge1xuICAgICAgY29uc3QgW29wdGlvbl0gPSB0aGlzLmFjdGl2ZU9wdGlvbnNcbiAgICAgIHJldHVybiBpc09iamVjdChvcHRpb24pICYmIGtleSBpbiBvcHRpb24gPyBrZXkgOiBudWxsXG4gICAgfSxcblxuICAgIHByb2Nlc3NPcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBpZiAodGhpcy5yZWxhdGUpIHtcbiAgICAgICAgICAvLyBJZiBpZHMgYXJlIG1pc3NpbmcgYW5kIHdlIHdhbnQgdG8gcmVsYXRlLCBzZXQgdGVtcG9yYXJ5IGlkcy5cbiAgICAgICAgICAvLyBOT1RFOiBXZSBuZWVkIHRvIG1vZGlmeSB0aGUgYWN0dWFsIGRhdGEsIG1ha2luZyBhIGNvcHkgd29uJ3Qgd29ya1xuICAgICAgICAgIC8vIGFzIGl0IHdvbid0IHByb3BhZ2F0ZS5cbiAgICAgICAgICAvLyBOT1RFOiBUaGlzIG9ubHkgbWFrZXMgc2Vuc2UgaWYgdGhlIGRhdGEgaXMgZnJvbSB0aGUgZ3JhcGggdGhhdFxuICAgICAgICAgIC8vIHdlJ3JlIGN1cnJlbnRseSBlZGl0aW5nLlxuICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICghKCdpZCcgaW4gb3B0aW9uKSkge1xuICAgICAgICAgICAgICBzZXRUZW1wb3JhcnlJZChvcHRpb24sICdpZCcpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdyb3VwQnkpIHtcbiAgICAgICAgICBjb25zdCBncm91cGVkID0ge31cbiAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5yZWR1Y2UoXG4gICAgICAgICAgICAocmVzdWx0cywgb3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gb3B0aW9uW3RoaXMuZ3JvdXBCeV1cbiAgICAgICAgICAgICAgbGV0IGVudHJ5ID0gZ3JvdXBlZFtncm91cF1cbiAgICAgICAgICAgICAgaWYgKCFlbnRyeSkge1xuICAgICAgICAgICAgICAgIGVudHJ5ID0gZ3JvdXBlZFtncm91cF0gPSB7XG4gICAgICAgICAgICAgICAgICBbdGhpcy5ncm91cEJ5TGFiZWxdOiBncm91cCxcbiAgICAgICAgICAgICAgICAgIFt0aGlzLmdyb3VwQnlPcHRpb25zXTogW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGVudHJ5KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVudHJ5Lm9wdGlvbnMucHVzaChvcHRpb24pXG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHRzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW11cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRpb25zXG4gICAgfSxcblxuICAgIGhhc09wdGlvbihvcHRpb24pIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKVxuICAgIH0sXG5cbiAgICBnZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSkge1xuICAgICAgY29uc3QgZmluZE9wdGlvbiA9IChvcHRpb25zLCB2YWx1ZSwgZ3JvdXBCeSkgPT4ge1xuICAgICAgICAvLyBTZWFyY2ggZm9yIHRoZSBvcHRpb24gb2JqZWN0IHdpdGggdGhlIGdpdmVuIHZhbHVlIGFuZCByZXR1cm4gdGhlXG4gICAgICAgIC8vIHdob2xlIG9iamVjdC5cbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgIGlmIChncm91cEJ5KSB7XG4gICAgICAgICAgICBjb25zdCBmb3VuZCA9IGZpbmRPcHRpb24ob3B0aW9uLm9wdGlvbnMsIHZhbHVlLCBudWxsKVxuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmb3VuZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25WYWx1ZVxuICAgICAgICA/IGZpbmRPcHRpb24odGhpcy5hY3RpdmVPcHRpb25zLCB2YWx1ZSwgdGhpcy5ncm91cEJ5KVxuICAgICAgICA6IHZhbHVlXG4gICAgfSxcblxuICAgIGdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikge1xuICAgICAgY29uc3QgeyBvcHRpb25WYWx1ZSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzU3RyaW5nKG9wdGlvblZhbHVlKVxuICAgICAgICA/IG9wdGlvbj8uW29wdGlvblZhbHVlXVxuICAgICAgICA6IGlzRnVuY3Rpb24ob3B0aW9uVmFsdWUpXG4gICAgICAgICAgPyBvcHRpb25WYWx1ZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG9wdGlvbiB9KSlcbiAgICAgICAgICA6IG9wdGlvblxuICAgIH0sXG5cbiAgICBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIHtcbiAgICAgIGNvbnN0IHsgb3B0aW9uTGFiZWwgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc1N0cmluZyhvcHRpb25MYWJlbClcbiAgICAgICAgPyBvcHRpb24/LltvcHRpb25MYWJlbF1cbiAgICAgICAgOiBpc0Z1bmN0aW9uKG9wdGlvbkxhYmVsKVxuICAgICAgICAgID8gb3B0aW9uTGFiZWwuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBvcHRpb24gfSkpXG4gICAgICAgICAgOiBsYWJlbGl6ZShgJHtvcHRpb259YClcbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaCkge1xuICAgIGlmIChzY2hlbWEucmVsYXRlKSB7XG4gICAgICAvLyBGb3IgaW50ZXJuYWxseSByZWxhdGluZyBkYXRhIChgc2NoZW1hLm9wdGlvbnMuZGF0YVBhdGhgKSwgd2UgbmVlZCB0b1xuICAgICAgLy8gcHJvY2VzcyBib3RoIHRoZSBvcHRpb25zIChmb3IgJyNyZWYnKSBhbmQgdGhlIHZhbHVlICgnI2lkJykuXG4gICAgICAvLyBTZWUgYERhdGFNaXhpbi5oYW5kbGVEYXRhU2NoZW1hKClgOlxuICAgICAgY29uc3QgcGF0aCA9IHNjaGVtYS5vcHRpb25zPy5kYXRhUGF0aFxuICAgICAgY29uc3QgcmVsYXRlZERhdGFQYXRoID0gcGF0aFxuICAgICAgICA/IG5vcm1hbGl6ZURhdGFQYXRoKGAke2RhdGFQYXRofS8ke3BhdGh9YClcbiAgICAgICAgOiBudWxsXG4gICAgICBncmFwaC5hZGRSZWxhdGlvbihkYXRhUGF0aCwgcmVsYXRlZERhdGFQYXRoLCBzY2hlbWEpXG4gICAgICBpZiAocmVsYXRlZERhdGFQYXRoKSB7XG4gICAgICAgIGdyYXBoLnNldFNvdXJjZVJlbGF0ZWQocmVsYXRlZERhdGFQYXRoKVxuICAgICAgfVxuICAgICAgLy8gQ29udmVydCByZWxhdGluZyBvYmplY3RzIHRvIGEgc2hhbGxvdyBjb3B5IHdpdGggb25seSB0aGUgaWQgbGVmdC5cbiAgICAgIC8vIFRPRE86IENvbnZlcnQgdG8gdXNpbmcgYHJlbGF0ZUJ5YDpcbiAgICAgIGNvbnN0IHByb2Nlc3NSZWxhdGUgPSB2YWx1ZSA9PiB2YWx1ZSA/IHsgaWQ6IHZhbHVlLmlkIH0gOiB2YWx1ZVxuICAgICAgLy8gU2VsZWN0ZWQgb3B0aW9ucyBjYW4gYmUgYm90aCBvYmplY3RzICYgYXJyYXlzLCBlLmcuICdjaGVja2JveGVzJzpcbiAgICAgIHZhbHVlID0gaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgPyB2YWx1ZS5tYXAocHJvY2Vzc1JlbGF0ZSlcbiAgICAgICAgOiBwcm9jZXNzUmVsYXRlKHZhbHVlKVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuIiwiXG51bC5kaXRvLWNoZWNrYm94ZXMoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwiYGRpdG8tbGF5b3V0LSR7c2NoZW1hLmxheW91dCB8fCAndmVydGljYWwnfWBcIlxuKVxuICBsaSh2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCIpXG4gICAgbGFiZWxcbiAgICAgIGlucHV0LmRpdG8tY2hlY2tib3goXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgIClcbiAgICAgIHwge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgdWwuZGl0by1jaGVja2JveGVzKFxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4gIClcbiAgICBsaSh2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCIpXG4gICAgICBsYWJlbFxuICAgICAgICBpbnB1dC5kaXRvLWNoZWNrYm94KFxuICAgICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICAgIClcbiAgICAgICAgfCB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tY2hlY2tib3hlc1xuICAgIGxhYmVsXG4gICAgICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzXG4gICAgLmRpdG8tY2hlY2tib3hcbiAgICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjaGVja2JveGVzJywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICBkZWZhdWx0VmFsdWU6IFtdLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRPcHRpb25zOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5zZWxlY3RlZFZhbHVlIHx8IFtdKS5maWx0ZXIodmFsdWUgPT4gdmFsdWUpXG4gICAgICB9LFxuXG4gICAgICBzZXQob3B0aW9uKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IChvcHRpb24gfHwgW10pXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWNvZGUoXG4gIHJlZj1cImNvZGVcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpzdHlsZT1cInN0eWxlXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWNvZGUoXG4gICAgcmVmPVwiY29kZVwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpzdHlsZT1cInN0eWxlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWNvZGVcbiAgICBAZXh0ZW5kICVpbnB1dFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIC8vIEZvciBwcm9wcGVyIHNpemluZyBvZiBjb250ZW50IGFsb25nIHdpdGggOnN0eWxlPVwic3R5bGVcIiBzZXR0aW5nIGFib3ZlLFxuICAgIC8vIGZvciBwcm9wZXIgbGluZS1oZWlnaHQgY2FsY3VsYXRpb24uXG4gICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAmLmRpdG8td2lkdGgtZmlsbFxuICAgICAgd2lkdGg6IGF1dG9cbiAgICAuY29kZWZsYXNrXG4gICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICAvLyBJZ25vcmUgdGhlcGFyZW50IHBhZGRpbmcgZGVmaW5lZCBhYm92ZSB3aGljaCBpcyBvbmx5IG5lZWRlZCB0byBzZXRcbiAgICAgIC8vIHRoZSBkZXNpcmVkIGhlaWdodCB3aXRoIDpzdHlsZT1cInN0eWxlXCIuXG4gICAgICB0b3A6IDBcbiAgICAgIGxlZnQ6IDBcbiAgICAuY29kZWZsYXNrX190ZXh0YXJlYSxcbiAgICAuY29kZWZsYXNrX19wcmVcbiAgICAgIC8vIFVzZSBzYW1lIHBhZGRpbmcgYXMgLmRpdG8tY29kZVxuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAuY29kZWZsYXNrX190ZXh0YXJlYSxcbiAgICAuY29kZWZsYXNrX19jb2RlLFxuICAgIC5jb2RlZmxhc2tfX2xpbmVzXG4gICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LW1vbm9cbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplKVxuICAgICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0KVxuICAgIC5jb2RlZmxhc2tfX2xpbmVzXG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IENvZGVGbGFzayBmcm9tICdjb2RlZmxhc2snXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb2RlJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5saW5lcyB8fCAzXG4gICAgfSxcblxuICAgIHN0eWxlKCkge1xuICAgICAgcmV0dXJuIGBoZWlnaHQ6IGNhbGMoJHt0aGlzLmxpbmVzfWVtICogdmFyKC0tbGluZS1oZWlnaHQpKWBcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICBjb25zdCBmbGFzayA9IG5ldyBDb2RlRmxhc2sodGhpcy4kcmVmcy5jb2RlLCB7XG4gICAgICBsYW5ndWFnZTogdGhpcy5zY2hlbWEubGFuZ3VhZ2UgfHwgJ2phdmFzY3JpcHQnLFxuICAgICAgdGFiU2l6ZTogdGhpcy5zY2hlbWEuaW5kZW50U2l6ZSB8fCAyLFxuICAgICAgbGluZU51bWJlcnM6IGZhbHNlXG4gICAgfSlcblxuICAgIGxldCBjaGFuZ2VkID0gZmFsc2VcbiAgICBsZXQgaWdub3JlV2F0Y2ggPSBmYWxzZVxuICAgIGxldCBpZ25vcmVVcGRhdGUgPSBmYWxzZVxuXG4gICAgY29uc3Qgb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9jdXNlZCAmJiBjaGFuZ2VkKSB7XG4gICAgICAgIGNoYW5nZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvbkZvY3VzID0gKCkgPT4gdGhpcy5vbkZvY3VzKClcblxuICAgIGNvbnN0IG9uQmx1ciA9ICgpID0+IHtcbiAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9XG5cbiAgICB0aGlzLmRvbU9uKHRoaXMuJHJlZnMuY29kZS5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYScpLCB7XG4gICAgICBmb2N1czogb25Gb2N1cyxcbiAgICAgIGJsdXI6IG9uQmx1clxuICAgIH0pXG5cbiAgICBjb25zdCBzZXRDb2RlID0gY29kZSA9PiB7XG4gICAgICBpZiAoY29kZSAhPT0gZmxhc2suY29kZSkge1xuICAgICAgICBpZ25vcmVVcGRhdGUgPSB0cnVlXG4gICAgICAgIGZsYXNrLnVwZGF0ZUNvZGUoY29kZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy52YWx1ZSkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IHRydWVcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICAgIGNoYW5nZWQgPSB0cnVlXG4gICAgICAgIG9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmbGFzay5vblVwZGF0ZSh2YWx1ZSA9PiB7XG4gICAgICBpZiAoaWdub3JlVXBkYXRlKSB7XG4gICAgICAgIGlnbm9yZVVwZGF0ZSA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRWYWx1ZSh2YWx1ZSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy4kd2F0Y2goJ3ZhbHVlJywgdmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVdhdGNoKSB7XG4gICAgICAgIGlnbm9yZVdhdGNoID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldENvZGUodmFsdWUgfHwgJycpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHNldENvZGUodGhpcy52YWx1ZSB8fCAnJylcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy4kZWwucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKT8uZm9jdXMoKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG50cmlnZ2VyLmRpdG8tY29sb3IoXG4gIHRyaWdnZXI9XCJjbGlja1wiXG4gIDpzaG93LnN5bmM9XCJzaG93UG9wdXBcIlxuKVxuICAuZGl0by1pbnB1dChcbiAgICBzbG90PVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCJcbiAgKVxuICAgIGlucHV0KFxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICB0eXBlPVwiaW5wdXRcIlxuICAgICAgc2l6ZT1cIjhcIlxuICAgICAgdi1tb2RlbD1cImhleFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgKVxuICAgIC5kaXRvLWNvbG9yLXByZXZpZXcuZGl0by1pbmhlcml0LWZvY3VzKFxuICAgICAgdi1pZj1cInZhbHVlXCJcbiAgICApXG4gICAgICBkaXYoOnN0eWxlPVwieyBiYWNrZ3JvdW5kOiBgIyR7aGV4VmFsdWUgfHwgJzAwMDAwMDAwJ31gIH1cIilcbiAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgQGNsaWNrLnN0b3A9XCJjbGVhclwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuICBza2V0Y2gtcGlja2VyLmRpdG8tY29sb3ItcGlja2VyKFxuICAgIHNsb3Q9XCJwb3B1cFwiXG4gICAgdi1tb2RlbD1cImNvbG9yVmFsdWVcIlxuICAgIDpkaXNhYmxlLWFscGhhPVwiIWFscGhhXCJcbiAgICA6ZGlzYWJsZS1maWVsZHM9XCIhaW5wdXRzXCJcbiAgICA6cHJlc2V0LWNvbG9ycz1cInByZXNldHNcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB0cmlnZ2VyLmRpdG8tY29sb3IoXG4gICAgdHJpZ2dlcj1cImNsaWNrXCJcbiAgICA6c2hvdy5zeW5jPVwic2hvd1BvcHVwXCJcbiAgKVxuICAgIC5kaXRvLWlucHV0KFxuICAgICAgc2xvdD1cInRyaWdnZXJcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCJcbiAgICApXG4gICAgICBpbnB1dChcbiAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgICAgdHlwZT1cImlucHV0XCJcbiAgICAgICAgc2l6ZT1cIjhcIlxuICAgICAgICB2LW1vZGVsPVwiaGV4VmFsdWVcIlxuICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICApXG4gICAgICAuZGl0by1jb2xvci1wcmV2aWV3LmRpdG8taW5oZXJpdC1mb2N1cyhcbiAgICAgICAgdi1pZj1cInZhbHVlXCJcbiAgICAgIClcbiAgICAgICAgZGl2KDpzdHlsZT1cInsgYmFja2dyb3VuZDogYCMke2hleFZhbHVlIHx8ICcwMDAwMDAwMCd9YCB9XCIpXG4gICAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICAgIEBjbGljay5zdG9wPVwiY2xlYXJcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICApXG4gICAgc2tldGNoLXBpY2tlci5kaXRvLWNvbG9yLXBpY2tlcihcbiAgICAgIHNsb3Q9XCJwb3B1cFwiXG4gICAgICB2LW1vZGVsPVwiY29sb3JWYWx1ZVwiXG4gICAgICA6ZGlzYWJsZS1hbHBoYT1cIiFhbHBoYVwiXG4gICAgICA6ZGlzYWJsZS1maWVsZHM9XCIhaW5wdXRzXCJcbiAgICAgIDpwcmVzZXQtY29sb3JzPVwicHJlc2V0c1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gICRjb2xvci1zd2F0Y2gtd2lkdGg6ICRwYXR0ZXJuLXRyYW5zcGFyZW5jeS1zaXplXG4gICRjb2xvci1zd2F0Y2gtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtICRib3JkZXItd2lkdGhcbiAgLmRpdG8tY29sb3JcbiAgICAuZGl0by1pbnB1dFxuICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgICAgaW5wdXRcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6ICRjb2xvci1zd2F0Y2gtd2lkdGhcbiAgICAuZGl0by1idXR0b24tY2xlYXJcbiAgICAgIG1hcmdpbi1yaWdodDogJGNvbG9yLXN3YXRjaC13aWR0aFxuICAgIC5kaXRvLWNvbG9yLXBpY2tlclxuICAgICAgbWFyZ2luOiAkcG9wdXAtbWFyZ2luXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGVcbiAgICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93XG4gICAgLmRpdG8tY29sb3ItcHJldmlld1xuICAgICAgYmFja2dyb3VuZDogJHBhdHRlcm4tdHJhbnNwYXJlbmN5XG4gICAgICBib3JkZXItbGVmdDogJGJvcmRlci1zdHlsZVxuICAgICAgJixcbiAgICAgIGRpdlxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgd2lkdGg6ICRjb2xvci1zd2F0Y2gtd2lkdGhcbiAgICAgICAgdG9wOiAwXG4gICAgICAgIHJpZ2h0OiAwXG4gICAgICAgIGJvdHRvbTogMFxuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGNvbG9yLXN3YXRjaC1yYWRpdXNcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRjb2xvci1zd2F0Y2gtcmFkaXVzXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHRpbnljb2xvciBmcm9tICd0aW55Y29sb3IyJ1xuaW1wb3J0IHsgU2tldGNoIGFzIFNrZXRjaFBpY2tlciB9IGZyb20gJ3Z1ZS1jb2xvcidcbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBUcmlnZ2VyIH0gZnJvbSAnQGRpdG9qcy91aSdcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb2xvcicsIHtcbiAgY29tcG9uZW50czogeyBUcmlnZ2VyLCBTa2V0Y2hQaWNrZXIgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UG9wdXA6IGZhbHNlLFxuICAgICAgY29udmVydGVkSGV4VmFsdWU6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb2xvclZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlIHx8IHt9XG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy5jb2xvckZvcm1hdFxuICAgICAgICBjb25zdCBrZXkgPSB7XG4gICAgICAgICAgLy8gTk9URTogdnVlLWNvbG9yIGNhbGxzIGl0ICdoZXgnLCB3aGlsZSB0aW55Y29sb3IgY2FsbHMgaXQgJ2hleDYnXG4gICAgICAgICAgaGV4OiB2YWx1ZT8uYSA8IDEgPyAnaGV4OCcgOiAnaGV4JyxcbiAgICAgICAgICByZ2I6ICdyZ2JhJ1xuICAgICAgICB9W2Zvcm1hdF0gfHwgZm9ybWF0XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVba2V5XVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB0aW55Y29sb3IodmFsdWUpLnRvU3RyaW5nKGZvcm1hdClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaGV4VmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuY29udmVydGVkSGV4VmFsdWUgPSBudWxsXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgIGNvbnN0IGNvbG9yID0gdGlueWNvbG9yKHRoaXMudmFsdWUpXG4gICAgICAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IGNvbG9yXG4gICAgICAgICAgICAgIC50b1N0cmluZyhjb2xvci5nZXRBbHBoYSgpIDwgMSA/ICdoZXg4JyA6ICdoZXg2JylcbiAgICAgICAgICAgICAgLnNsaWNlKDEpXG4gICAgICAgICAgICAgIC50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRlZEhleFZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IHZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRPRE86IGBmb3JtYXRgIGNsYXNoZXMgd2l0aCBUeXBlTWl4aW4uZm9ybWF0KClgLCB3aGljaCBzaGFsbCBiZSByZW5hbWVkXG4gICAgLy8gc29vbiB0byBgZm9ybWF0VmFsdWUoKWAuIFJlbmFtZSBgY29sb3JGb3JtYXRgIGJhY2sgdG8gYGZvcm1hdGAgYWZ0ZXIuXG4gICAgY29sb3JGb3JtYXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdmb3JtYXQnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnaGV4J1xuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBzaG93QWxwaGFgP1xuICAgIGFscGhhOiBnZXRTY2hlbWFBY2Nlc3NvcignYWxwaGEnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgc2hvd0lucHV0c2A/XG4gICAgaW5wdXRzOiBnZXRTY2hlbWFBY2Nlc3NvcignaW5wdXRzJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KSxcblxuICAgIHByZXNldHM6IGdldFNjaGVtYUFjY2Vzc29yKCdwcmVzZXRzJywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBkZWZhdWx0OiBbXG4gICAgICAgICcjZmZmZmZmJyxcbiAgICAgICAgJyNjM2MzYzMnLFxuICAgICAgICAnIzdmN2Y3ZicsXG4gICAgICAgICcjMDAwMDAwJyxcbiAgICAgICAgJyM4ODAwMTUnLFxuICAgICAgICAnI2VkMWMyNCcsXG4gICAgICAgICcjZmY3ZjI3JyxcbiAgICAgICAgJyNmZmYyMDAnLFxuXG4gICAgICAgICcjMjJiMTRjJyxcbiAgICAgICAgJyMwMGEyZTgnLFxuICAgICAgICAnIzNmNDhjYycsXG4gICAgICAgICcjYTM0OWE0JyxcbiAgICAgICAgJyNiOTdhNTcnLFxuICAgICAgICAnI2ZmYWVjOScsXG4gICAgICAgICcjZmZjOTBlJyxcbiAgICAgICAgJyMwMDAwMDAwMCdcbiAgICAgIF1cbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgZm9jdXNlZChmb2N1c2VkKSB7XG4gICAgICBpZiAoIWZvY3VzZWQgJiYgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSkge1xuICAgICAgICBjb25zdCBjb2xvciA9IHRpbnljb2xvcihgIyR7dGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZX1gKVxuICAgICAgICBpZiAoY29sb3I/LmlzVmFsaWQoKSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBjb2xvci50b1N0cmluZyh0aGlzLmNvbG9yRm9ybWF0KVxuICAgICAgICAgIC8vIFRPRE86IEVtaXQgJ2lucHV0JyBoZXJlIGluc3RlYWQsIGFuZCAnY2hhbmdlJyBpbiBibHVyLCBsaWtlIG90aGVycy5cbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcblxuPC9zY3JpcHQ+XG4iLCJcbmNvbXBvbmVudChcbiAgOmlzPVwiY29tcG9uZW50XCJcbiAgdi1iaW5kPVwiJHByb3BzXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGNvbXBvbmVudChcbiAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgIHYtYmluZD1cIiRwcm9wc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4vLyBUaGlzIGlzIHRoZSBnZW5lcmFsIHB1cnBvc2UgJ2NvbXBvbmVudCcgdHlwZSwgd2hpY2ggY2FuIHJlc29sdmUgdG8gYW55IGN1c3RvbVxuLy8gY29tcG9uZW50IHRocm91Z2ggYHNjaGVtYS5jb21wb25lbnRgLCBzZWUgYHJlc29sdmVUeXBlQ29tcG9uZW50KClgLiBUaGlzIGNhblxuLy8gYmUgdXNlZCB0byBuZXN0IGFyYml0cmFyeSB2dWUgY29tcG9uZW50cyBpbiBzY2hlbWE6XG4vLyB7XG4vLyAgIHR5cGU6ICdjb21wb25lbnQnLFxuLy8gICBjb21wb25lbnQ6IGltcG9ydCgnLi9jb21wb25lbnQnKVxuLy8gfVxuXG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29tcG9uZW50Jywge1xuICAvLyBPdmVycmlkZSB0aGUgc3RhbmRhcmQgYGRlZmF1bHRWYWx1ZTogbnVsbGAgdG8gbm90IHNldCBhbnkgZGF0YSBmb3IgY3VzdG9tXG4gIC8vIGNvbXBvbmVudHMsIHVubGVzcyB0aGV5IHByb3ZpZGUgYSBkZWZhdWx0IHZhbHVlLlxuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gISgnZGVmYXVsdCcgaW4gc2NoZW1hKVxufSlcbjwvc2NyaXB0PlxuIiwiXG4vLy0gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gdHJpZ2dlciBldmFsdWF0aW9uIG9mIGB2YWx1ZWAgdGhhdCBkb3NlIG5vdFxuLy8gIGludm9sdmUgYWN0dWFsbHkgcmVuZGVyaW5nIGl0IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgdmlzaWJsZS5cbmlucHV0LmRpdG8tdGV4dC5kaXRvLWlucHV0KFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6bmFtZT1cIm5hbWVcIlxuICB0eXBlPVwidGV4dFwiXG4gIDp2YWx1ZT1cInZhbHVlXCJcbiAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICA6cmVhZG9ubHk9XCJ0cnVlXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC8vLSBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byB0cmlnZ2VyIGV2YWx1YXRpb24gb2YgYHZhbHVlYCB0aGF0IGRvc2Ugbm90XG4gIC8vICBpbnZvbHZlIGFjdHVhbGx5IHJlbmRlcmluZyBpdCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IHZpc2libGUuXG4gIGlucHV0LmRpdG8tdGV4dC5kaXRvLWlucHV0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6bmFtZT1cIm5hbWVcIlxuICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICA6dmFsdWU9XCJ2YWx1ZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpyZWFkb25seT1cInRydWVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCBEYXRhTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RhdGFNaXhpbi5qcydcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcihbXG4gICdjb21wdXRlZCcsICdkYXRhJywgJ2hpZGRlbidcbl0sXG4vLyBAdnVlL2NvbXBvbmVudFxue1xuICBtaXhpbnM6IFtEYXRhTWl4aW5dLFxuXG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBkZWZhdWx0VmlzaWJsZTogZmFsc2UsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB2YWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCB7IHNjaGVtYSB9ID0gdGhpc1xuICAgICAgICBpZiAoc2NoZW1hLmRhdGEgfHwgc2NoZW1hLmRhdGFQYXRoKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmhhbmRsZURhdGFTY2hlbWEoc2NoZW1hLCAnc2NoZW1hJywge1xuICAgICAgICAgICAgLy8gTW9kaWZ5aW5nIGB0aGlzLmRhdGFgIGJlbG93IHRyaWdnZXJzIGFub3RoZXIgY2FsbCBvZiB0aGUgYHZhbHVlYFxuICAgICAgICAgICAgLy8gZ2V0dGVyLCBzbyB1c2UgYSB2YWx1ZSBvZiAyIGZvciBgcmVzb2x2ZUNvdW50ZXJgIHRvIHJldHVybiB0aGVcbiAgICAgICAgICAgIC8vIHJlc29sdmVkIGRhdGEgdHdpY2UuXG4gICAgICAgICAgICByZXNvbHZlQ291bnRlcjogMlxuICAgICAgICAgIH0pXG4gICAgICAgICAgdGhpcy4kc2V0KHRoaXMuZGF0YSwgdGhpcy5uYW1lLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gVHlwZU1peGluLmNvbXB1dGVkLnZhbHVlLmdldC5jYWxsKHRoaXMpXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgVHlwZU1peGluLmNvbXB1dGVkLnZhbHVlLnNldC5jYWxsKHRoaXMsIHZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1kYXRlXG4gIGNvbXBvbmVudChcbiAgICA6aXM9XCJnZXRDb21wb25lbnQodHlwZSlcIlxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6bG9jYWxlPVwibG9jYWxlXCJcbiAgICA6ZGF0ZUZvcm1hdD1cInsgLi4uYXBpLmZvcm1hdHMuZGF0ZSwgLi4uZGF0ZUZvcm1hdCB9XCJcbiAgICB2LW1vZGVsPVwiZGF0ZVZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tZGF0ZVxuICAgIGNvbXBvbmVudChcbiAgICAgIDppcz1cImdldENvbXBvbmVudCh0eXBlKVwiXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgIDpsb2NhbGU9XCJsb2NhbGVcIlxuICAgICAgOmRhdGVGb3JtYXQ9XCJ7IC4uLmFwaS5mb3JtYXRzLmRhdGUsIC4uLmRhdGVGb3JtYXQgfVwiXG4gICAgICB2LW1vZGVsPVwiZGF0ZVZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgRGF0ZVRpbWVQaWNrZXIgfSBmcm9tICdAZGl0b2pzL3VpJ1xuaW1wb3J0IHsgaXNEYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcihbXG4gICdkYXRlJywgJ2RhdGV0aW1lJywgJ3RpbWUnXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgY29tcG9uZW50czogeyBEYXRlUGlja2VyLCBUaW1lUGlja2VyLCBEYXRlVGltZVBpY2tlciB9LFxuICAvLyBUT0RPOiBUaGlzIGlzIG9ubHkgaGVyZSBzbyB3ZSBnZXQgcGxhY2Vob2xkZXIgYWRkZWQuIENvbWUgdXAgd2l0aCBhIGJldHRlclxuICAvLyB3YXkgdG8gc3VwcG9ydCBhdHRyaWJ1dGVzIHBlciBjb21wb25lbnQgKGEgbGlzdCBvZiBhY3R1YWxseSBzdXBwb3J0ZWRcbiAgLy8gYXR0cmlidXRlcylcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIHRleHRGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIGRhdGVWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSB0aGlzXG4gICAgICAgIHJldHVybiB2YWx1ZSA/IG5ldyBEYXRlKHZhbHVlKSA6IHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRhdGVGb3JtYXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdkYXRlRm9ybWF0Jywge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbXBvbmVudCh0eXBlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRlOiAnZGF0ZS1waWNrZXInLFxuICAgICAgICB0aW1lOiAndGltZS1waWNrZXInLFxuICAgICAgICBkYXRldGltZTogJ2RhdGUtdGltZS1waWNrZXInXG4gICAgICB9W3R5cGVdXG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzRGF0ZSh2YWx1ZSkgPyB2YWx1ZS50b0lTT1N0cmluZygpIDogdmFsdWVcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBSZXNvdXJjZU1peGluIGZyb20gJy4vUmVzb3VyY2VNaXhpbi5qcydcbmltcG9ydCBTY2hlbWFQYXJlbnRNaXhpbiBmcm9tICcuLi9taXhpbnMvU2NoZW1hUGFyZW50TWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciwgZ2V0U3RvcmVBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0TWVtYmVyUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7XG4gIHByb2Nlc3NSb3V0ZVNjaGVtYSwgcHJvY2Vzc0Zvcm1zLCBnZXROYW1lZFNjaGVtYXMsIGdldEJ1dHRvblNjaGVtYXMsXG4gIGhhc0Zvcm1TY2hlbWEsIGdldEZvcm1TY2hlbWFzLCBnZXRWaWV3U2NoZW1hLFxuICBoYXNMYWJlbHMsIGlzQ29tcGFjdCwgaXNJbmxpbmVkLFxuICBpc09iamVjdFNvdXJjZSwgaXNMaXN0U291cmNlXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc1N0cmluZywgaXNBcnJheSwgaXNOdW1iZXIsIGVxdWFscyxcbiAgcGFyc2VEYXRhUGF0aCwgbm9ybWFsaXplRGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbUmVzb3VyY2VNaXhpbiwgU2NoZW1hUGFyZW50TWl4aW5dLFxuXG4gIGRlZmF1bHRWYWx1ZShzY2hlbWEpIHtcbiAgICByZXR1cm4gaXNMaXN0U291cmNlKHNjaGVtYSkgPyBbXSA6IG51bGxcbiAgfSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyYXBwZWRQcmltaXRpdmVzOiBudWxsLFxuICAgICAgdW53cmFwcGluZ1ByaW1pdGl2ZXM6IGZhbHNlLFxuICAgICAgaWdub3JlUm91dGVDaGFuZ2U6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc291cmNlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgaXNPYmplY3RTb3VyY2UoKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RTb3VyY2UodGhpcy50eXBlKVxuICAgIH0sXG5cbiAgICBpc0xpc3RTb3VyY2UoKSB7XG4gICAgICByZXR1cm4gaXNMaXN0U291cmNlKHRoaXMudHlwZSlcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uaGFzRGF0YSgpXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmFsdWVcbiAgICB9LFxuXG4gICAgaXNSZWFkeSgpIHtcbiAgICAgIC8vIExpc3RzIHRoYXQgaGF2ZSBubyBkYXRhIGFuZCBubyBhc3NvY2lhdGVkIHJlc291cmNlIHNob3VsZCBzdGlsbCByZW5kZXIsXG4gICAgICAvLyBhcyB0aGV5IG1heSBiZSBnZXR0aW5nIHRoZWlyIGRhdGEgZWxzZXdoZXJlLCBlLmcuIGBjb21wdXRlKClgLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzRGF0YSB8fCAhdGhpcy5wcm92aWRlc0RhdGFcbiAgICB9LFxuXG4gICAgaXNJblZpZXcoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZpZXdDb21wb25lbnRcbiAgICB9LFxuXG4gICAgd3JhcFByaW1pdGl2ZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEud3JhcFByaW1pdGl2ZXNcbiAgICB9LFxuXG4gICAgbGlzdERhdGE6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLnZhbHVlXG4gICAgICAgIGlmICh0aGlzLmlzT2JqZWN0U291cmNlKSB7XG4gICAgICAgICAgLy8gQ29udmVydCB0byBsaXN0IGFycmF5LlxuICAgICAgICAgIGRhdGEgPSBkYXRhICE9IG51bGwgPyBbZGF0YV0gOiBbXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIGRhdGEgZ2V0cyBpbmhlcml0ZWQgZnJvbSBwYXJlbnQsIHVud3JhcHBpbmcgaXMgbm90IGhhcHBlbmluZ1xuICAgICAgICAgIC8vIGF0IHRoZSByb290IGluIGBzZXREYXRhKClgLCBidXQgaGVyZSBpbnN0ZWFkLlxuICAgICAgICAgIGRhdGEgPSB0aGlzLnVud3JhcExpc3REYXRhKGRhdGEpIHx8IGRhdGFcbiAgICAgICAgfVxuICAgICAgICBkYXRhIHx8PSBbXVxuICAgICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzIH0gPSB0aGlzXG4gICAgICAgIGlmICh3cmFwUHJpbWl0aXZlcykge1xuICAgICAgICAgIGlmICh0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzKSB7XG4gICAgICAgICAgICAvLyBXZSdyZSBkb25lIHVud3JhcHBpbmcgb25jZSBgbGlzdERhdGFgIGlzIHJlZXZhbHVhdGVkLCBzbyBzZXRcbiAgICAgICAgICAgIC8vIHRoaXMgdG8gYGZhbHNlYCBhZ2Fpbi4gU2VlIGB3cmFwcGVkUHJpbWl0aXZlc2Agd2F0Y2hlciBhYm92ZS5cbiAgICAgICAgICAgIHRoaXMudW53cmFwcGluZ1ByaW1pdGl2ZXMgPSBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBDb252ZXJ0IGRhdGEgdG8gYSBsaXN0IG9mIHdyYXBwZWQgcHJpbWl0aXZlcywgYW5kIHJldHVybiBpdC5cbiAgICAgICAgICAgIHRoaXMud3JhcHBlZFByaW1pdGl2ZXMgPSBkYXRhLm1hcCh2YWx1ZSA9PiAoe1xuICAgICAgICAgICAgICBbd3JhcFByaW1pdGl2ZXNdOiB2YWx1ZVxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzLndyYXBwZWRQcmltaXRpdmVzXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgIH0sXG5cbiAgICAgIHNldChkYXRhKSB7XG4gICAgICAgIGlmICh0aGlzLndyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgICAgdGhpcy53cmFwcGVkUHJpbWl0aXZlcyA9IGRhdGFcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pc09iamVjdFNvdXJjZVxuICAgICAgICAgICAgPyAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDAgPyBkYXRhWzBdIDogbnVsbClcbiAgICAgICAgICAgIDogZGF0YVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG9iamVjdERhdGE6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgLy8gQWx3YXlzIGdvIHRocm91Z2ggYGxpc3REYXRhYCBpbnRlcm5hbGx5LCB3aGljaCBkb2VzIGFsbCB0aGVcbiAgICAgICAgLy8gcHJvY2Vzc2luZyBvZiBgd3JhcFByaW1pdGl2ZXNgLCBldGMuXG4gICAgICAgIHJldHVybiB0aGlzLmxpc3REYXRhWzBdIHx8IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHNldChkYXRhKSB7XG4gICAgICAgIHRoaXMubGlzdERhdGEgPSBkYXRhID8gW2RhdGFdIDogW11cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc291cmNlU2NoZW1hKCkge1xuICAgICAgLy8gVGhlIHNvdXJjZVNjaGVtYSBvZiBhIGxpc3QgaXMgdGhlIGxpc3QncyBzY2hlbWEgaXRzZWxmLlxuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hXG4gICAgfSxcblxuICAgIHBhdGgoKSB7XG4gICAgICAvLyBUaGlzIGlzIHVzZWQgaW4gVHlwZUxpc3QgZm9yIERpdG9Gb3JtQ2hvb3Nlci5cbiAgICAgIHJldHVybiB0aGlzLnJvdXRlQ29tcG9uZW50LmdldENoaWxkUGF0aCh0aGlzLnNjaGVtYS5wYXRoKVxuICAgIH0sXG5cbiAgICBkZWZhdWx0UXVlcnkoKSB7XG4gICAgICBjb25zdCB7IGRlZmF1bHRPcmRlcjogb3JkZXIgfSA9IHRoaXNcbiAgICAgIHJldHVybiBvcmRlciA/IHsgb3JkZXIgfSA6IHt9XG4gICAgfSxcblxuICAgIHF1ZXJ5OiBnZXRTdG9yZUFjY2Vzc29yKCdxdWVyeScsIHtcbiAgICAgIGdldChxdWVyeSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnRoaXMuZGVmYXVsdFF1ZXJ5LFxuICAgICAgICAgIC4uLnF1ZXJ5XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIHNldChxdWVyeSkge1xuICAgICAgICAvLyBBbHdheXMga2VlcCB0aGUgZGlzcGxheWVkIHF1ZXJ5IHBhcmFtZXRlcnMgaW4gc3luYyB3aXRoIHRoZSBzdG9yZWRcbiAgICAgICAgLy8gb25lcy4gVXNlIHNjb3BlIGFuZCBwYWdlIGZyb20gdGhlIGxpc3Qgc2NoZW1hIGFzIGRlZmF1bHRzLCBidXQgYWxsb3dcbiAgICAgICAgLy8gdGhlIHJvdXRlIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gb3ZlcnJpZGUgdGhlbS5cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHNjb3BlID0gdGhpcy5kZWZhdWx0U2NvcGU/Lm5hbWUsXG4gICAgICAgICAgcGFnZSA9IHRoaXMuc2NoZW1hLnBhZ2VcbiAgICAgICAgfSA9IHRoaXMucXVlcnlcbiAgICAgICAgLy8gUHJlc2VydmUgLyBtZXJnZSBjdXJyZW50bHkgc3RvcmVkIHZhbHVlcy5cbiAgICAgICAgcXVlcnkgPSB7XG4gICAgICAgICAgLi4udGhpcy5xdWVyeSxcbiAgICAgICAgICAuLi4oc2NvcGUgIT0gbnVsbCAmJiB7IHNjb3BlIH0pLFxuICAgICAgICAgIC4uLihwYWdlICE9IG51bGwgJiYgeyBwYWdlIH0pLFxuICAgICAgICAgIC4uLnF1ZXJ5XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFlcXVhbHMocXVlcnksIHRoaXMuJHJvdXRlLnF1ZXJ5KSkge1xuICAgICAgICAgIC8vIFRlbGwgdGhlIGAkcm91dGVgIHdhdGNoZXIgdG8gaWdub3JlIHRoZSBjaGFuZ2VkIHRyaWdnZXJlZCBoZXJlOlxuICAgICAgICAgIHRoaXMuaWdub3JlUm91dGVDaGFuZ2UgPSB0cnVlXG4gICAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoeyBxdWVyeSwgaGFzaDogdGhpcy4kcm91dGUuaGFzaCB9KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBxdWVyeSAvLyBMZXQgZ2V0U3RvcmVBY2Nlc3NvcigpIGRvIHRoZSBhY3R1YWwgc2V0dGluZ1xuICAgICAgfVxuICAgIH0pLFxuXG4gICAgdG90YWw6IGdldFN0b3JlQWNjZXNzb3IoJ3RvdGFsJyksXG5cbiAgICBjb2x1bW5zKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5jb2x1bW5zKVxuICAgIH0sXG5cbiAgICBzY29wZXMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLnNjb3BlcylcbiAgICB9LFxuXG4gICAgZGVmYXVsdFNjb3BlKCkge1xuICAgICAgaWYgKHRoaXMuc2NvcGVzKSB7XG4gICAgICAgIGxldCBmaXJzdCA9IG51bGxcbiAgICAgICAgZm9yIChjb25zdCBzY29wZSBvZiBPYmplY3QudmFsdWVzKHRoaXMuc2NvcGVzKSkge1xuICAgICAgICAgIGlmIChzY29wZS5kZWZhdWx0U2NvcGUpIHtcbiAgICAgICAgICAgIHJldHVybiBzY29wZVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgICAgICBmaXJzdCA9IHNjb3BlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaXJzdFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkZWZhdWx0T3JkZXIoKSB7XG4gICAgICBpZiAodGhpcy5jb2x1bW5zKSB7XG4gICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIE9iamVjdC52YWx1ZXModGhpcy5jb2x1bW5zKSkge1xuICAgICAgICAgIGNvbnN0IHsgZGVmYXVsdFNvcnQgfSA9IGNvbHVtblxuICAgICAgICAgIGlmIChkZWZhdWx0U29ydCkge1xuICAgICAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gaXNTdHJpbmcoZGVmYXVsdFNvcnQpID8gZGVmYXVsdFNvcnQgOiAnYXNjJ1xuICAgICAgICAgICAgcmV0dXJuIGAke2NvbHVtbi5uYW1lfSAke2RpcmVjdGlvbn1gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG5lc3RlZE1ldGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLm1ldGEsXG4gICAgICAgIHNjaGVtYTogdGhpcy5zY2hlbWFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9ybXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhnZXRGb3JtU2NoZW1hcyh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KSlcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgbGlua2VkIHZpZXcgc2NoZW1hIGlmIHRoaXMgc291cmNlIGVkaXRzIGl0IGl0cyBpdGVtcyB0aHJvdWdoXG4gICAgLy8gYSBsaW5rZWQgdmlldy5cbiAgICB2aWV3KCkge1xuICAgICAgcmV0dXJuIGdldFZpZXdTY2hlbWEodGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dClcbiAgICB9LFxuXG4gICAgbGlua3NUb1ZpZXcoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZpZXdcbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBnZXRCdXR0b25TY2hlbWFzKHRoaXMuc2NoZW1hLmJ1dHRvbnMpXG4gICAgfSxcblxuICAgIGhhc0xhYmVscygpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1zLnNvbWUoaGFzTGFiZWxzKVxuICAgIH0sXG5cbiAgICBpc0NvbXBhY3QoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3Jtcy5ldmVyeShpc0NvbXBhY3QpXG4gICAgfSxcblxuICAgIGlzSW5saW5lZCgpIHtcbiAgICAgIHJldHVybiBpc0lubGluZWQodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIHBhZ2luYXRlOiBnZXRTY2hlbWFBY2Nlc3NvcigncGFnaW5hdGUnLCB7XG4gICAgICB0eXBlOiBOdW1iZXJcbiAgICB9KSxcblxuICAgIHJlbmRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlbmRlcicsIHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pLFxuXG4gICAgY3JlYXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY3JlYXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGNyZWF0YWJsZSkge1xuICAgICAgICByZXR1cm4gY3JlYXRhYmxlICYmIGhhc0Zvcm1TY2hlbWEodGhpcy5zY2hlbWEpXG4gICAgICAgICAgPyB0aGlzLmlzT2JqZWN0U291cmNlXG4gICAgICAgICAgICA/ICF0aGlzLnZhbHVlXG4gICAgICAgICAgICA6IHRydWVcbiAgICAgICAgICA6IGZhbHNlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBlZGl0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2VkaXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVkaXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBlZGl0YWJsZSAmJiAhdGhpcy5pc0lubGluZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgZHJhZ2dhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZHJhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRyYWdnYWJsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2UgJiYgdGhpcy5saXN0RGF0YS5sZW5ndGggPiAxICYmIGRyYWdnYWJsZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29sbGFwc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjb2xsYXBzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBudWxsLCAvLyBzbyB0aGF0IGA/P2AgYmVsb3cgY2FuIGRvIGl0cyB0aGluZzpcbiAgICAgIGdldChjb2xsYXBzaWJsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0lubGluZWQgJiYgISEoY29sbGFwc2libGUgPz8gdGhpcy5jb2xsYXBzZWQgIT09IG51bGwpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb2xsYXBzZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdjb2xsYXBzZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAkcm91dGUodG8sIGZyb20pIHtcbiAgICAgIGlmICh0aGlzLmlnbm9yZVJvdXRlQ2hhbmdlKSB7XG4gICAgICAgIHRoaXMuaWdub3JlUm91dGVDaGFuZ2UgPSBmYWxzZVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChmcm9tLnBhdGggPT09IHRvLnBhdGggJiYgZnJvbS5oYXNoID09PSB0by5oYXNoKSB7XG4gICAgICAgIC8vIFBhdGhzIGFuZCBoYXNoZXMgcmVtYWluIHRoZSBzYW1lLCBzbyBvbmx5IHF1ZXJpZXMgaGF2ZSBjaGFuZ2VkLlxuICAgICAgICAvLyBVcGRhdGUgZmlsdGVyIGFuZCByZWxvYWQgZGF0YSB3aXRob3V0IGNsZWFyaW5nLlxuICAgICAgICB0aGlzLnF1ZXJ5ID0gdG8ucXVlcnlcbiAgICAgICAgdGhpcy5sb2FkRGF0YShmYWxzZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgd3JhcHBlZFByaW1pdGl2ZXM6IHtcbiAgICAgIGRlZXA6IHRydWUsXG4gICAgICBoYW5kbGVyKG5ld1ZhbHVlLCBvbGRWYWx1ZSkge1xuICAgICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzIH0gPSB0aGlzXG4gICAgICAgIC8vIFNraXAgdGhlIGluaXRpYWwgc2V0dGluZyBvZiB3cmFwcGVkUHJpbWl0aXZlcyBhcnJheVxuICAgICAgICBpZiAod3JhcFByaW1pdGl2ZXMgJiYgb2xkVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXaGVuZXZlciB0aGUgd3JhcHBlZFByaW1pdGl2ZXMgY2hhbmdlLCBtYXAgdGhlaXIgdmFsdWVzIGJhY2sgdG9cbiAgICAgICAgICAvLyB0aGUgYXJyYXkgb2YgcHJpbWl0aXZlcywgaW4gYSBwcmltaXRpdmUgd2F5IDopXG4gICAgICAgICAgLy8gQnV0IHNldCBgdW53cmFwcGluZ1ByaW1pdGl2ZXMgPSB0cnVlYCwgc28gdGhlIGBsaXN0RGF0YWAgY29tcHV0ZWRcbiAgICAgICAgICAvLyBwcm9wZXJ0eSBrbm93cyBhYm91dCBpdCwgd2hpY2ggc2V0cyBpdCB0byBgZmFsc2VgIGFnYWluLlxuICAgICAgICAgIHRoaXMudW53cmFwcGluZ1ByaW1pdGl2ZXMgPSB0cnVlXG4gICAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlLm1hcChvYmplY3QgPT4gb2JqZWN0W3dyYXBQcmltaXRpdmVzXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgc2V0dXBEYXRhKCkge1xuICAgICAgdGhpcy5xdWVyeSA9IHRoaXMuJHJvdXRlLnF1ZXJ5XG4gICAgICB0aGlzLmVuc3VyZURhdGEoKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5jbGVhckRhdGEoKVxuICAgIGNsZWFyRGF0YSgpIHtcbiAgICAgIHRoaXMudG90YWwgPSAwXG4gICAgICB0aGlzLnZhbHVlID0gbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5zZXREYXRhKClcbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIC8vIFdoZW4gbmV3IGRhdGEgaXMgbG9hZGVkLCB3ZSBjYW4gc3RvcmUgaXQgcmlnaHQgYmFjayBpbiB0aGUgZGF0YSBvZiB0aGVcbiAgICAgIC8vIHZpZXcgb3IgZm9ybSB0aGF0IGNyZWF0ZWQgdGhpcyBsaXN0IGNvbXBvbmVudC5cbiAgICAgIC8vIFN1cHBvcnQgdHdvIGZvcm1hdHMgZm9yIGxpc3QgZGF0YTpcbiAgICAgIC8vIC0gQXJyYXk6IGBbLi4uXWBcbiAgICAgIC8vIC0gT2JqZWN0OiBgeyByZXN1bHRzOiBbLi4uXSwgdG90YWwgfWAsIHNlZSBgdW53cmFwTGlzdERhdGEoKWBcbiAgICAgIGlmIChcbiAgICAgICAgIWRhdGEgfHxcbiAgICAgICAgdGhpcy5pc0xpc3RTb3VyY2UgJiYgaXNBcnJheShkYXRhKSB8fFxuICAgICAgICB0aGlzLmlzT2JqZWN0U291cmNlICYmIGlzT2JqZWN0KGRhdGEpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGFcbiAgICAgIH0gZWxzZSBpZiAodGhpcy51bndyYXBMaXN0RGF0YShkYXRhKSkge1xuICAgICAgICAvLyBUaGUgZm9ybWF0IGRpZG4ndCBtYXRjaCwgc2VlIGlmIHdlIHJlY2VpdmVkIGEgYHsgcmVzdWx0cywgdG90YWwgfWBcbiAgICAgICAgLy8gb2JqZWN0LCBpbiB3aGljaCBjYXNlIGB0aGlzLnZhbHVlYCB3YXMgYWxyZWFkeSBzZXQgYnlcbiAgICAgICAgLy8gYHVud3JhcExpc3REYXRhKClgIGFuZCB3ZSdyZSBkb25lIG5vdy5cbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZGF0YSkgJiYgdGhpcy5pc0luVmlldykge1xuICAgICAgICAvLyBUaGUgY29udHJvbGxlciBpcyBzZW5kaW5nIGRhdGEgZm9yIGEgZnVsbCBtdWx0aS1jb21wb25lbnQgdmlldyxcbiAgICAgICAgLy8gaW5jbHVkaW5nIHRoZSBuZXN0ZWQgbGlzdCBkYXRhLlxuICAgICAgICB0aGlzLnZpZXdDb21wb25lbnQuc2V0RGF0YShkYXRhKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB1bndyYXBMaXN0RGF0YShkYXRhKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaXNMaXN0U291cmNlICYmXG4gICAgICAgIGlzT2JqZWN0KGRhdGEpICYmXG4gICAgICAgIGlzTnVtYmVyKGRhdGEudG90YWwpICYmXG4gICAgICAgIGlzQXJyYXkoZGF0YS5yZXN1bHRzKVxuICAgICAgKSB7XG4gICAgICAgIC8vIElmIEBkaXRvanMvc2VydmVyIHNlbmRzIGRhdGEgaW4gdGhlIGZvcm0gb2YgYHsgcmVzdWx0cywgdG90YWwgfWBcbiAgICAgICAgLy8gcmVwbGFjZSB0aGUgdmFsdWUgd2l0aCByZXN1bHQsIGJ1dCByZW1lbWJlciB0aGUgdG90YWwgaW4gdGhlIHN0b3JlLlxuICAgICAgICB0aGlzLnRvdGFsID0gZGF0YS50b3RhbFxuICAgICAgICB0aGlzLnZhbHVlID0gZGF0YS5yZXN1bHRzXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNyZWF0ZUl0ZW0oc2NoZW1hLCB0eXBlKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5jcmVhdGVEYXRhKHNjaGVtYSwgdHlwZSlcbiAgICAgIGlmICh0aGlzLmlzT2JqZWN0U291cmNlKSB7XG4gICAgICAgIHRoaXMub2JqZWN0RGF0YSA9IGl0ZW1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubGlzdERhdGEucHVzaChpdGVtKVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY29sbGFwc2libGUpIHtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gdGhpcy5vcGVuU2NoZW1hQ29tcG9uZW50KC0xKSlcbiAgICAgIH1cbiAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgcmV0dXJuIGl0ZW1cbiAgICB9LFxuXG4gICAgcmVtb3ZlSXRlbShpdGVtKSB7XG4gICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICB0aGlzLm9iamVjdERhdGEgPSBudWxsXG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgeyBsaXN0RGF0YSB9ID0gdGhpc1xuICAgICAgICBjb25zdCBpbmRleCA9IGxpc3REYXRhICYmIGxpc3REYXRhLmluZGV4T2YoaXRlbSlcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICBsaXN0RGF0YS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVsZXRlSXRlbShpdGVtLCBpbmRleCkge1xuICAgICAgY29uc3QgbGFiZWwgPSBpdGVtICYmIHRoaXMuZ2V0SXRlbUxhYmVsKHRoaXMuc2NoZW1hLCBpdGVtLCB7XG4gICAgICAgIGluZGV4LFxuICAgICAgICBleHRlbmRlZDogdHJ1ZVxuICAgICAgfSlcblxuICAgICAgY29uc3Qgbm90aWZ5ID0gKCkgPT4gdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiB0aGlzLmlzVHJhbnNpZW50ID8gJ2luZm8nIDogJ3N1Y2Nlc3MnLFxuICAgICAgICB0aXRsZTogJ1N1Y2Nlc3NmdWxseSBSZW1vdmVkJyxcbiAgICAgICAgdGV4dDogW1xuICAgICAgICAgIGAke2xhYmVsfSB3YXMgJHt0aGlzLnZlcmJzLmRlbGV0ZWR9LmAsXG4gICAgICAgICAgdGhpcy50cmFuc2llbnROb3RlXG4gICAgICAgIF1cbiAgICAgIH0pXG5cbiAgICAgIGlmIChpdGVtICYmIHdpbmRvdy5jb25maXJtKFxuICAgICAgICBgRG8geW91IHJlYWxseSB3YW50IHRvICR7dGhpcy52ZXJicy5kZWxldGV9ICR7bGFiZWx9P2ApXG4gICAgICApIHtcbiAgICAgICAgaWYgKHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSlcbiAgICAgICAgICBub3RpZnkoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGl0ZW1JZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCBpdGVtKVxuICAgICAgICAgIGNvbnN0IHJlc291cmNlID0gZ2V0TWVtYmVyUmVzb3VyY2UoaXRlbUlkLCB0aGlzLnJlc291cmNlKVxuICAgICAgICAgIGlmIChyZXNvdXJjZSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVSZXF1ZXN0KHsgbWV0aG9kOiAnZGVsZXRlJywgcmVzb3VyY2UgfSwgZXJyID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSlcbiAgICAgICAgICAgICAgICBub3RpZnkoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMucmVsb2FkRGF0YSgpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRTY2hlbWFDb21wb25lbnQoaW5kZXgpIHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hQ29tcG9uZW50cyB9ID0gdGhpc1xuICAgICAgY29uc3QgeyBsZW5ndGggfSA9IHNjaGVtYUNvbXBvbmVudHNcbiAgICAgIHJldHVybiBzY2hlbWFDb21wb25lbnRzWygoaW5kZXggJSBsZW5ndGgpICsgbGVuZ3RoKSAlIGxlbmd0aF1cbiAgICB9LFxuXG4gICAgb3BlblNjaGVtYUNvbXBvbmVudChpbmRleCkge1xuICAgICAgY29uc3Qgc2NoZW1hQ29tcG9uZW50ID0gdGhpcy5nZXRTY2hlbWFDb21wb25lbnQoaW5kZXgpXG4gICAgICBpZiAoc2NoZW1hQ29tcG9uZW50KSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG5hdmlnYXRlVG9Db21wb25lbnQoZGF0YVBhdGgsIG9uQ29tcGxldGUpIHtcbiAgICAgIGlmICh0aGlzLmNvbGxhcHNpYmxlKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gZGF0YVBhdGguc3RhcnRzV2l0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgICAgID8gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgICAgID8gcGFyc2VEYXRhUGF0aChkYXRhUGF0aC5zbGljZSh0aGlzLmRhdGFQYXRoLmxlbmd0aCArIDEpKVswXSA/PyBudWxsXG4gICAgICAgICAgICA6IDBcbiAgICAgICAgICA6IG51bGxcbiAgICAgICAgaWYgKGluZGV4ICE9PSBudWxsICYmIGlzTnVtYmVyKCtpbmRleCkpIHtcbiAgICAgICAgICBjb25zdCBzY2hlbWFDb21wb25lbnQgPSB0aGlzLmdldFNjaGVtYUNvbXBvbmVudCgraW5kZXgpXG4gICAgICAgICAgaWYgKHNjaGVtYUNvbXBvbmVudCkge1xuICAgICAgICAgICAgY29uc3QgeyBvcGVuZWQgfSA9IHNjaGVtYUNvbXBvbmVudFxuICAgICAgICAgICAgaWYgKCFvcGVuZWQpIHtcbiAgICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50Lm9wZW5lZCA9IHRydWVcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy4kbmV4dFRpY2soKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aClcbiAgICAgICAgICAgIGlmIChjb21wb25lbnRzLmxlbmd0aCA+IDAgJiYgKG9uQ29tcGxldGU/Lihjb21wb25lbnRzKSA/PyB0cnVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50Lm9wZW5lZCA9IG9wZW5lZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGVUb1JvdXRlQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKVxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZVRvUm91dGVDb21wb25lbnQoZGF0YVBhdGgsIG9uQ29tcGxldGUpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxPbkNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgICAgIC8vIFJldHJpZXZlIHRoZSBsYXN0IHJvdXRlIGNvbXBvbmVudCwgd2hpY2ggd2lsbCBiZSB0aGUgY29tcG9uZW50IHRoYXRcbiAgICAgICAgICAvLyB3ZSBqdXN0IG5hdmlnYXRlZCB0bywgYW5kIHBhc3MgaXQgb24gdG8gYG9uQ29tcGxldGUoKWBcbiAgICAgICAgICBjb25zdCB7IHJvdXRlQ29tcG9uZW50cyB9ID0gdGhpcy5hcHBTdGF0ZVxuICAgICAgICAgIGNvbnN0IHJvdXRlQ29tcG9uZW50ID0gcm91dGVDb21wb25lbnRzW3JvdXRlQ29tcG9uZW50cy5sZW5ndGggLSAxXVxuICAgICAgICAgIHJlc29sdmUob25Db21wbGV0ZT8uKFtyb3V0ZUNvbXBvbmVudF0pID8/IHRydWUpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhUGF0aFBhcnRzID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiBmaW5kIGEgcm91dGUgdGhhdCBjYW4gc2VydmUgcGFydCBvZiB0aGUgZ2l2ZW4gZGF0YVBhdGgsXG4gICAgICAgIC8vIGFuZCB0YWtlIGl0IGZyb20gdGhlcmU6XG4gICAgICAgIHdoaWxlIChkYXRhUGF0aFBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5yb3V0ZUNvbXBvbmVudC5nZXRDaGlsZFBhdGgoXG4gICAgICAgICAgICB0aGlzLmFwaS5ub3JtYWxpemVQYXRoKG5vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoUGFydHMpKVxuICAgICAgICAgIClcbiAgICAgICAgICAvLyBTZWUgaWYgdGhlcmUgYWN0dWFsbHkgaXMgYSByb3V0ZSBmb3IgdGhpcyBzdWItY29tcG9uZW50OlxuICAgICAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVyLm1hdGNoKHBhdGgpXG4gICAgICAgICAgaWYgKG1hdGNoZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4kcm91dGUucGF0aCA9PT0gcGF0aCkge1xuICAgICAgICAgICAgLy8gV2UncmUgYWxyZWFkeSB0aGVyZSwgc28ganVzdCBjYWxsIGBvbkNvbXBsZXRlKClgOlxuICAgICAgICAgICAgICBjYWxsT25Db21wbGV0ZSgpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTmF2aWdhdGUgdG8gdGhlIGNvbXBvbmVudCdzIHBhdGgsIHRoZW4gY2FsbCBgb25Db21wbGV0ZSgpYF86XG4gICAgICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKFxuICAgICAgICAgICAgICAgIHsgcGF0aCB9LFxuICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIHRoZSBsYXN0IHJvdXRlIGNvbXBvbmVudCB0byBiZSBtb3VudGVkIGluIHRoZSBuZXh0XG4gICAgICAgICAgICAgICAgLy8gdGljayBiZWZvcmUgY2FsbGluZyBgb25Db21wbGV0ZSgpYFxuICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuJG5leHRUaWNrKGNhbGxPbkNvbXBsZXRlKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVqZWN0XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gS2VlcCByZW1vdmluZyB0aGUgbGFzdCBwYXJ0IHVudGlsIHdlIGZpbmQgYSBtYXRjaC5cbiAgICAgICAgICBkYXRhUGF0aFBhcnRzLnBvcCgpXG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgIH0pXG4gICAgfVxuICB9LCAvLyBlbmQgb2YgYG1ldGhvZHNgXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShcbiAgICBhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbCxcbiAgICBuZXN0ZWQgPSBmYWxzZSwgZmxhdHRlbiA9IGZhbHNlLFxuICAgIHByb2Nlc3MgPSBudWxsXG4gICkge1xuICAgIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSlcbiAgICBjb25zdCBpbmxpbmVkID0gaXNJbmxpbmVkKHNjaGVtYSlcbiAgICBpZiAoaW5saW5lZCAmJiBzY2hlbWEucmVzb3VyY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0xpc3RzIHdpdGggbmVzdGVkIGZvcm1zIGNhbm5vdCBsb2FkIGRhdGEgZnJvbSB0aGVpciBvd24gcmVzb3VyY2VzJ1xuICAgICAgKVxuICAgIH1cbiAgICAvLyBVc2UgZGlmZmVyZW50bHkgbmFtZWQgdXJsIHBhcmFtZXRlcnMgb24gZWFjaCBuZXN0ZWQgbGV2ZWwgZm9yIGlkIGFzXG4gICAgLy8gb3RoZXJ3aXNlIHRoZXkgd291bGQgY2xhc2ggYW5kIG92ZXJyaWRlIGVhY2ggb3RoZXIgaW5zaWRlICRyb3V0ZS5wYXJhbXNcbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8xMzQ1XG4gICAgY29uc3QgcGFyYW0gPSBgaWQke2xldmVsICsgMX1gXG4gICAgY29uc3QgbWV0YSA9IHtcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYVxuICAgIH1cbiAgICBjb25zdCBmb3JtTWV0YSA9IHtcbiAgICAgIC4uLm1ldGEsXG4gICAgICAvLyBXaGVuIGNoaWxkcmVuIGFyZSBmbGF0dGVuZWQgKGUuZy4gdHJlZS1saXN0cyksIGluY2x1ZGUgdGhlIGBmbGF0dGVuYFxuICAgICAgLy8gc2V0dGluZyBhbHNvLCBmb3IgZmxhdHRlbmluZyBiZWxvdy5cbiAgICAgIGZsYXR0ZW4sXG4gICAgICBuZXN0ZWQsXG4gICAgICBwYXJhbVxuICAgIH1cbiAgICBjb25zdCBjaGlsZFJvdXRlcyA9IGF3YWl0IHByb2Nlc3NGb3JtcyhhcGksIHNjaGVtYSwgbGV2ZWwpXG4gICAgaWYgKHByb2Nlc3MpIHtcbiAgICAgIGF3YWl0IHByb2Nlc3MoY2hpbGRSb3V0ZXMsIGxldmVsICsgMSlcbiAgICB9XG4gICAgLy8gSW5saW5lZCBmb3JtcyBkb24ndCBuZWVkIHRvIGFjdHVhbGx5IGFkZCByb3V0ZXMuXG4gICAgaWYgKGhhc0Zvcm1TY2hlbWEoc2NoZW1hKSAmJiAhaW5saW5lZCkge1xuICAgICAgY29uc3QgZ2V0UGF0aFdpdGhQYXJhbSA9IChwYXRoLCBwYXJhbSkgPT4gcGFyYW1cbiAgICAgICAgPyBwYXRoXG4gICAgICAgICAgPyBgJHtwYXRofS86JHtwYXJhbX1gXG4gICAgICAgICAgOiBgOiR7cGFyYW19YFxuICAgICAgICA6IHBhdGhcblxuICAgICAgLy8gTGlzdHMgaW4gc2luZ2xlLWNvbXBvbmVudC12aWV3cyAobGV2ZWwgPT09IDApIHVzZSB0aGVpciB2aWV3J3MgcGF0aCxcbiAgICAgIC8vIHdoaWxlIGFsbCBvdGhlcnMgbmVlZCB0aGVpciBwYXRoIHByZWZpeGVkIHdpdGggdGhlIHBhcmVudCdzIHBhdGg6XG4gICAgICBjb25zdCBzb3VyY2VQYXRoID0gbGV2ZWwgPT09IDAgPyAnJyA6IHNjaGVtYS5wYXRoXG4gICAgICBjb25zdCBmb3JtUm91dGUgPSB7XG4gICAgICAgIC8vIE9iamVjdCBzb3VyY2VzIGRvbid0IG5lZWQgaWQgcGFyYW1zIGluIHRoZWlyIGZvcm0gcGF0aHMsIGFzIHRoZXlcbiAgICAgICAgLy8gZGlyZWN0bHkgZWRpdCBvbmUgb2JqZWN0LlxuICAgICAgICBwYXRoOiBnZXRQYXRoV2l0aFBhcmFtKHNvdXJjZVBhdGgsIGlzTGlzdFNvdXJjZShzY2hlbWEpICYmIHBhcmFtKSxcbiAgICAgICAgY29tcG9uZW50OiBEaXRvQ29tcG9uZW50LmNvbXBvbmVudChcbiAgICAgICAgICBuZXN0ZWQgPyAnZGl0by1mb3JtLW5lc3RlZCcgOiAnZGl0by1mb3JtJ1xuICAgICAgICApLFxuICAgICAgICBtZXRhOiBmb3JtTWV0YVxuICAgICAgfVxuICAgICAgaWYgKGlzT2JqZWN0U291cmNlKHNjaGVtYSkpIHtcbiAgICAgICAgLy8gQWxzbyBhZGQgYSBwYXJhbSByb3V0ZSwgc2ltcGx5IHRvIGhhbmRsZSAnL2NyZWF0ZScgbGlua3MgdGhlIHNhbWVcbiAgICAgICAgLy8gd2F5IHRoYXQgbGlzdHMgZG8sIHdoZXJlIGl0IG92ZXJsYXBzIHdpdGggOmlkIGZvciBpdGVtIGlkcy5cbiAgICAgICAgcm91dGVzLnB1c2goe1xuICAgICAgICAgIC4uLmZvcm1Sb3V0ZSxcbiAgICAgICAgICBwYXRoOiBnZXRQYXRoV2l0aFBhcmFtKHNvdXJjZVBhdGgsIHBhcmFtKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKHNvdXJjZVBhdGgpIHtcbiAgICAgICAgLy8gSnVzdCByZWRpcmVjdCBiYWNrIHRvIHRoZSBwYXJlbnQgd2hlbiBhIG5lc3RlZCBzb3VyY2Ugcm91dGUgaXMgaGl0LlxuICAgICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgICAgcGF0aDogc291cmNlUGF0aCxcbiAgICAgICAgICByZWRpcmVjdDogJy4nLFxuICAgICAgICAgIG1ldGFcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIC8vIFBhcnRpdGlvbiBjaGlsZFJvdXRlcyBpbnRvIHRob3NlIHRoYXQgbmVlZCBmbGF0dGVuaW5nIChlLmcuIHRyZWUtbGlzdHMpXG4gICAgICAvLyBhbmQgdGhvc2UgdGhhdCBkb24ndCwgYW5kIHByb2Nlc3MgZWFjaCBncm91cCBzZXBhcmF0ZWx5IGFmdGVyLlxuICAgICAgY29uc3QgW2ZsYXRSb3V0ZXMsIHN1YlJvdXRlc10gPSBjaGlsZFJvdXRlcy5yZWR1Y2UoXG4gICAgICAgIChyZXMsIHJvdXRlKSA9PiB7XG4gICAgICAgICAgcmVzW3JvdXRlLm1ldGEuZmxhdHRlbiA/IDAgOiAxXS5wdXNoKHJvdXRlKVxuICAgICAgICAgIHJldHVybiByZXNcbiAgICAgICAgfSxcbiAgICAgICAgW1tdLCBbXV1cbiAgICAgIClcbiAgICAgIGlmIChzdWJSb3V0ZXMubGVuZ3RoKSB7XG4gICAgICAgIGZvcm1Sb3V0ZS5jaGlsZHJlbiA9IHN1YlJvdXRlc1xuICAgICAgfVxuICAgICAgcm91dGVzLnB1c2goZm9ybVJvdXRlKVxuICAgICAgLy8gQWRkIHRoZSBwcmVmaXhlZCBmb3JtUm91dGVzIHdpdGggdGhlaXIgY2hpbGRyZW4gZm9yIG5lc3RlZCBsaXN0cy5cbiAgICAgIGlmIChmbGF0Um91dGVzLmxlbmd0aCkge1xuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkUm91dGUgb2YgZmxhdFJvdXRlcykge1xuICAgICAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgICAgIC4uLihjaGlsZFJvdXRlLnJlZGlyZWN0ID8gY2hpbGRSb3V0ZSA6IGZvcm1Sb3V0ZSksXG4gICAgICAgICAgICBwYXRoOiBgJHtmb3JtUm91dGUucGF0aH0vJHtjaGlsZFJvdXRlLnBhdGh9YCxcbiAgICAgICAgICAgIG1ldGE6IHtcbiAgICAgICAgICAgICAgLi4uY2hpbGRSb3V0ZS5tZXRhLFxuICAgICAgICAgICAgICBmbGF0dGVuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSwgZGF0YVBhdGgsIGdyYXBoKSB7XG4gICAgZ3JhcGguYWRkU291cmNlKGRhdGFQYXRoLCBzY2hlbWEpXG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cbiIsImltcG9ydCB7IGlzQXJyYXksIGFzQXJyYXksIGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGZpbHRlckNvbXBvbmVudHMgPSB7XG4gIHRleHQoZmlsdGVyKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IFtcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdjb250YWlucycsXG4gICAgICAgIHZhbHVlOiAnY29udGFpbnMnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ2VxdWFscycsXG4gICAgICAgIHZhbHVlOiAnZXF1YWxzJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdzdGFydHMgd2l0aCcsXG4gICAgICAgIHZhbHVlOiAnc3RhcnRzLXdpdGgnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ2VuZHMgd2l0aCcsXG4gICAgICAgIHZhbHVlOiAnZW5kcy13aXRoJ1xuICAgICAgfVxuICAgIF1cbiAgICByZXR1cm4ge1xuICAgICAgb3BlcmF0b3I6IGZpbHRlci5vcGVyYXRvcnNcbiAgICAgICAgPyB7XG4gICAgICAgICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgICAgICAgb3B0aW9uczpcbiAgICAgICAgICAgIGlzQXJyYXkoZmlsdGVyLm9wZXJhdG9ycylcbiAgICAgICAgICAgICAgPyBvcHRpb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgICBvcHRpb24gPT4gZmlsdGVyLm9wZXJhdG9ycy5pbmNsdWRlcyhvcHRpb24udmFsdWUpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBvcHRpb25zLFxuICAgICAgICAgIHdpZHRoOiAnNDAlJ1xuICAgICAgICB9XG4gICAgICAgIDogbnVsbCxcbiAgICAgIHRleHQ6IHtcbiAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICB3aWR0aDogZmlsdGVyLm9wZXJhdG9ycyA/ICc2MCUnIDogJ2ZpbGwnXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gICdkYXRlLXJhbmdlJygpIHtcbiAgICAvLyBVc2Ugc2hvcnRlciBkYXRlIGZvcm1hdCBpbiBkYXRlLXJhbmdlIGZpbHRlcnM6XG4gICAgY29uc3QgZGF0ZUZvcm1hdCA9IHtcbiAgICAgIGRheTogJzItZGlnaXQnLFxuICAgICAgbW9udGg6ICcyLWRpZ2l0JyxcbiAgICAgIHllYXI6ICdudW1lcmljJ1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZnJvbToge1xuICAgICAgICB0eXBlOiAnZGF0ZXRpbWUnLFxuICAgICAgICB3aWR0aDogJzUwJScsXG4gICAgICAgIGRhdGVGb3JtYXRcbiAgICAgIH0sXG4gICAgICB0bzoge1xuICAgICAgICB0eXBlOiAnZGF0ZXRpbWUnLFxuICAgICAgICB3aWR0aDogJzUwJScsXG4gICAgICAgIGRhdGVGb3JtYXRcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbHRlcnNQYW5lbChmaWx0ZXJzLCBkYXRhUGF0aCwgcHJveHkpIHtcbiAgY29uc3QgcGFuZWwgPSB7XG4gICAgbGFiZWw6ICdGaWx0ZXJzJyxcbiAgICBuYW1lOiAnJGZpbHRlcnMnLFxuICAgIHRhcmdldDogZGF0YVBhdGgsXG4gICAgLy8gT3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmFsdWVcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgLy8gTk9URTogT24gcGFuZWxzLCB0aGUgZGF0YSgpIGNhbGxiYWNrIGRvZXMgc29tZXRoaW5nIGVsc2UgdGhhbiBvbiBub3JtYWxcbiAgICAvLyBzY2hlbWE6IEl0IHByb2R1Y2VzIHRoZSBgZGF0YWAgcHJvcGVydHkgdG8gYmUgcGFzc2VkIHRvIHRoZSBwYW5lbCdzXG4gICAgLy8gc2NoZW1hLCBub3QgdGhlIGRhdGEgdG8gYmUgdXNlZCBmb3IgdGhlIHBhbmVsIGNvbXBvbmVudCBkaXJlY3RseS5cbiAgICBkYXRhKCkge1xuICAgICAgcmV0dXJuIHBhcnNlRmlsdGVyc0RhdGEoXG4gICAgICAgIHBhbmVsLFxuICAgICAgICBwcm94eS5xdWVyeVxuICAgICAgKVxuICAgIH0sXG4gICAgY29tcG9uZW50czogZ2V0RmlsdGVyc0NvbXBvbmVudHMoZmlsdGVycyksXG4gICAgYnV0dG9uczoge1xuICAgICAgY2xlYXI6IHtcbiAgICAgICAgdGV4dDogJ0NsZWFyJyxcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgY2xpY2soeyBzY2hlbWFDb21wb25lbnQgfSkge1xuICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50LnJlc2V0RGF0YSgpXG4gICAgICAgICAgICBzY2hlbWFDb21wb25lbnQuYXBwbHlGaWx0ZXJzKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGZpbHRlcjoge1xuICAgICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgICAgdGV4dDogJ0ZpbHRlcicsXG4gICAgICAgIGV2ZW50czoge1xuICAgICAgICAgIGNsaWNrKHsgc2NoZW1hQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5hcHBseUZpbHRlcnMoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgYXBwbHlGaWx0ZXJzKCkge1xuICAgICAgICBwcm94eS5xdWVyeSA9IHtcbiAgICAgICAgICAuLi5wcm94eS5xdWVyeSxcbiAgICAgICAgICBmaWx0ZXI6IGZvcm1hdEZpbHRlcnNEYXRhKHRoaXMuc2NoZW1hLCB0aGlzLmRhdGEpLFxuICAgICAgICAgIC8vIENsZWFyIHBhZ2luYXRpb24gd2hlbiBhcHBseWluZyBvciBjbGVhcmluZyBmaWx0ZXJzOlxuICAgICAgICAgIHBhZ2U6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBwYW5lbFxufVxuXG5mdW5jdGlvbiBnZXRGaWx0ZXJzQ29tcG9uZW50cyhmaWx0ZXJzKSB7XG4gIGNvbnN0IGNvbXBzID0ge31cbiAgZm9yIChjb25zdCBmaWx0ZXIgb2YgT2JqZWN0LnZhbHVlcyhmaWx0ZXJzIHx8IHt9KSkge1xuICAgIC8vIFN1cHBvcnQgYm90aCBjdXN0b20gZm9ybXMgYW5kIGRlZmF1bHQgZmlsdGVyIGNvbXBvbmVudHMsIHRocm91Z2ggdGhlXG4gICAgLy8gYGZpbHRlckNvbXBvbmVudHNgIHJlZ2lzdHJ5LiBFdmVuIGZvciBkZWZhdWx0IGZpbHRlcnMsIHN0aWxsIHVzZSB0aGVcbiAgICAvLyBwcm9wZXJ0aWVzIGluIGBmaWx0ZXJgIGFzIHRoZSBiYXNlIGZvciBgZm9ybWAsIHNvIHRoaW5ncyBsaWtlIGBsYWJlbGBcbiAgICAvLyBjYW4gYmUgY2hhbmdlZCBvbiB0aGUgcmVzdWx0aW5nIGZvcm0uXG4gICAgY29uc3QgeyBmaWx0ZXI6IHR5cGUsIC4uLmZvcm0gfSA9IGZpbHRlclxuICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0eXBlXG4gICAgICA/IGZpbHRlckNvbXBvbmVudHNbdHlwZV0/LihmaWx0ZXIpXG4gICAgICA6IGZpbHRlci5jb21wb25lbnRzXG4gICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgIGZvcm0uY29tcG9uZW50cyA9IHt9XG4gICAgICAvLyBDb252ZXJ0IGxhYmVscyB0byBwbGFjZWhvbGRlcnM6XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIGNvbXBvbmVudF0gb2YgT2JqZWN0LmVudHJpZXMoY29tcG9uZW50cykpIHtcbiAgICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICAgIGNvbnN0IGxhYmVsID0gY29tcG9uZW50LmxhYmVsIHx8IGxhYmVsaXplKGNvbXBvbmVudC5uYW1lIHx8IGtleSlcbiAgICAgICAgICBmb3JtLmNvbXBvbmVudHNba2V5XSA9IHtcbiAgICAgICAgICAgIC4uLmNvbXBvbmVudCxcbiAgICAgICAgICAgIGxhYmVsOiBmYWxzZSxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBsYWJlbFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29tcHNbZmlsdGVyLm5hbWVdID0ge1xuICAgICAgICBsYWJlbDogZm9ybS5sYWJlbCxcbiAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIGRlZmF1bHQ6ICgpID0+ICh7fSksXG4gICAgICAgIGZvcm0sXG4gICAgICAgIGlubGluZWQ6IHRydWVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBmaWx0ZXIgJyR7ZmlsdGVyLm5hbWV9JzogVW5rbm93biBmaWx0ZXIgdHlwZSAnJHt0eXBlfScuYFxuICAgICAgKVxuICAgIH1cbiAgfVxuICByZXR1cm4gY29tcHNcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50c0ZvckZpbHRlcihzY2hlbWEsIG5hbWUpIHtcbiAgY29uc3QgY29tcG9uZW50ID0gc2NoZW1hLmNvbXBvbmVudHNbbmFtZV1cbiAgcmV0dXJuIGNvbXBvbmVudD8uZm9ybT8uY29tcG9uZW50c1xufVxuXG5mdW5jdGlvbiBmb3JtYXRGaWx0ZXJzRGF0YShzY2hlbWEsIGRhdGEpIHtcbiAgY29uc3QgZmlsdGVycyA9IFtdXG4gIGZvciAoY29uc3QgbmFtZSBpbiBkYXRhKSB7XG4gICAgY29uc3QgZW50cnkgPSBkYXRhW25hbWVdXG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICAvLyBNYXAgY29tcG9uZW50cyBzZXF1ZW5jZSB0byBhcmd1bWVudHM6XG4gICAgICBjb25zdCBhcmdzID0gT2JqZWN0LmtleXMoZ2V0Q29tcG9uZW50c0ZvckZpbHRlcihzY2hlbWEsIG5hbWUpKS5tYXAoXG4gICAgICAgIGtleSA9PiBlbnRyeVtrZXldID8/IG51bGxcbiAgICAgIClcbiAgICAgIC8vIE9ubHkgYXBwbHkgZmlsdGVyIGlmIHRoZXJlIGFyZSBzb21lIGFyZ3VtZW50cyB0aGF0IGFyZW4ndCBudWxsOlxuICAgICAgaWYgKGFyZ3Muc29tZSh2YWx1ZSA9PiB2YWx1ZSAhPT0gbnVsbCkpIHtcbiAgICAgICAgZmlsdGVycy5wdXNoKGAke25hbWV9OiR7YXJncy5tYXAoSlNPTi5zdHJpbmdpZnkpLmpvaW4oJywnKX1gKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmlsdGVycy5sZW5ndGggPyBmaWx0ZXJzIDogdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIHBhcnNlRmlsdGVyc0RhdGEoc2NoZW1hLCBxdWVyeSkge1xuICBjb25zdCBmaWx0ZXJzID0ge31cbiAgLy8gU2FtZSBhcyBAZGl0b2pzL3NlcnZlcidzIFF1ZXJ5UGFyYW1ldGVycy5maWx0ZXI6IFRyYW5zbGF0ZSB0aGUgc3RyaW5nIGRhdGFcbiAgLy8gZnJvbSAkcm91dGUucXVlcnkgYmFjayB0byBwYXJhbSBsaXN0cyBwZXIgZmlsdGVyOlxuICBpZiAocXVlcnkpIHtcbiAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBhc0FycmF5KHF1ZXJ5LmZpbHRlcikpIHtcbiAgICAgIGNvbnN0IFssIG5hbWUsIGpzb25dID0gZmlsdGVyLm1hdGNoKC9eKFxcdyspOiguKikkLylcbiAgICAgIHRyeSB7XG4gICAgICAgIGZpbHRlcnNbbmFtZV0gPSBhc0FycmF5KEpTT04ucGFyc2UoYFske2pzb259XWApKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgZmlsdGVyc0RhdGEgPSB7fVxuICBmb3IgKGNvbnN0IG5hbWUgaW4gc2NoZW1hLmNvbXBvbmVudHMpIHtcbiAgICBjb25zdCBkYXRhID0ge31cbiAgICAvLyBJZiB3ZSBoYXZlIHJldHJpZXZlZCBwYXJhbXMgZnJvbSB0aGUgcXVlcnksIGZldGNoIHRoZSBhc3NvY2lhdGVkXG4gICAgLy8gZm9ybSBjb21wb25lbnRzIHNvIHdlIGNhbiBtYXAgdGhlIHZhbHVlcyBiYWNrIHRvIG9iamVjdCBrZXlzOlxuICAgIGNvbnN0IGFyZ3MgPSBmaWx0ZXJzW25hbWVdXG4gICAgaWYgKGFyZ3MpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBnZXRDb21wb25lbnRzRm9yRmlsdGVyKHNjaGVtYSwgbmFtZSlcbiAgICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICAgIGxldCBpbmRleCA9IDBcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gY29tcG9uZW50cykge1xuICAgICAgICAgIGRhdGFba2V5XSA9IGFyZ3NbaW5kZXgrK11cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmaWx0ZXJzRGF0YVtuYW1lXSA9IGRhdGFcbiAgfVxuICByZXR1cm4gZmlsdGVyc0RhdGFcbn1cbiIsIlxuLmRpdG8tbGlzdChcbiAgdi1pZj1cImlzUmVhZHlcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1cInNjaGVtYS5jbGFzc1wiXG4gIDpzdHlsZT1cInNjaGVtYS5zdHlsZVwiXG4pXG4gIC5kaXRvLW5hdmlnYXRpb25cbiAgICBkaXRvLXNjb3BlcyhcbiAgICAgIHYtaWY9XCJzY29wZXNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gICAgKVxuICAgIC8vIFdoZW4gdGhlcmUncyBvbmx5IHBhZ2luYXRpb24gd2l0aG91dCBzY29wZXMsIHdlIG5lZWQgYSBnb29kIG9sJyBzcGFjZXJcbiAgICAvLyBkaXYsIGZvciB0aGUgbGF5b3V0IG5vdCB0byBicmVhay4uLlxuICAgIC5kaXRvLXNwYWNlcihcbiAgICAgIHYtZWxzZS1pZj1cInBhZ2luYXRlXCJcbiAgICApXG4gICAgZGl0by1wYWdpbmF0aW9uKFxuICAgICAgdi1pZj1cInBhZ2luYXRlXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpsaW1pdD1cInBhZ2luYXRlXCJcbiAgICAgIDp0b3RhbD1cInRvdGFsIHx8IDBcIlxuICAgIClcbiAgdGFibGUuZGl0by10YWJsZShcbiAgICA6Y2xhc3M9YHtcbiAgICAgICdkaXRvLXRhYmxlLXNlcGFyYXRvcnMnOiBpc0lubGluZWQsXG4gICAgICAnZGl0by10YWJsZS1sYXJnZXItcGFkZGluZyc6IGhhc0VkaXRCdXR0b25zICYmICFpc0lubGluZWQsXG4gICAgICAnZGl0by10YWJsZS1hbHRlcm5hdGUtY29sb3JzJzogIWlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWV2ZW4tY291bnQnOiBoYXNFdmVuQ291bnRcbiAgICB9YFxuICApXG4gICAgZGl0by10YWJsZS1oZWFkKFxuICAgICAgdi1pZj1cImNvbHVtbnNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOmNvbHVtbnM9XCJjb2x1bW5zXCJcbiAgICAgIDpoYXNFZGl0QnV0dG9ucz1cImhhc0VkaXRCdXR0b25zXCJcbiAgICApXG4gICAgdnVlLWRyYWdnYWJsZShcbiAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGRyYWdnYWJsZSlcIlxuICAgICAgOmxpc3Q9XCJ1cGRhdGVPcmRlcihzb3VyY2VTY2hlbWEsIGxpc3REYXRhLCBwYWdpbmF0aW9uUmFuZ2UpXCJcbiAgICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICAgIEBlbmQ9XCJvbkVuZERyYWdcIlxuICAgIClcbiAgICAgIHRyKFxuICAgICAgICB2LWZvcj1cIml0ZW0sIGluZGV4IGluIGxpc3REYXRhXCJcbiAgICAgICAgOmtleT1cImdldEl0ZW1VaWQoc2NoZW1hLCBpdGVtKVwiXG4gICAgICAgIDppZD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKHYtaWY9XCJjb2x1bW5zXCIpXG4gICAgICAgICAgZGl0by10YWJsZS1jZWxsKFxuICAgICAgICAgICAgdi1mb3I9XCJjb2x1bW4gaW4gY29sdW1uc1wiXG4gICAgICAgICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGNvbHVtbilcIlxuICAgICAgICAgICAgOmtleT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgICAgIDpjbGFzcz1cImdldENlbGxDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgIDpjZWxsPVwiY29sdW1uXCJcbiAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UpXG4gICAgICAgICAgdGRcbiAgICAgICAgICAgIGRpdG8tc2NoZW1hLWlubGluZWQoXG4gICAgICAgICAgICAgIHYtaWY9XCJpc0lubGluZWRcIlxuICAgICAgICAgICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBpdGVtLCB7IGluZGV4LCBhc09iamVjdDogdHJ1ZSB9KVwiXG4gICAgICAgICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShpbmRleClcIlxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgICAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbXBvbmVudChcbiAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZWxzZS1pZj1cInJlbmRlclwiXG4gICAgICAgICAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KGl0ZW0sIGluZGV4KSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIGl0ZW0sIHsgaW5kZXggfSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zKFxuICAgICAgICAgIHYtaWY9XCJoYXNDZWxsRWRpdEJ1dHRvbnNcIlxuICAgICAgICApXG4gICAgICAgICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoaW5kZXgpXCJcbiAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgKVxuICAgIC8vIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBpbnNpZGUgdGFibGUgd2hlbiBub3QgaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gICAgdGZvb3QoXG4gICAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgIXNpbmdsZVwiXG4gICAgKVxuICAgICAgdHJcbiAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICA6Y29sc3Bhbj1cIm51bUNvbHVtbnNcIlxuICAgICAgICApXG4gICAgICAgICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICAgICAgICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICA6ZGF0YT1cImxpc3REYXRhXCJcbiAgICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgKVxuICAvLyBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgb3V0c2lkZSB0YWJsZSB3aGVuIGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICBkaXRvLWVkaXQtYnV0dG9ucy5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgdi1pZj1cImhhc0xpc3RCdXR0b25zICYmIHNpbmdsZVwiXG4gICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImxpc3REYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tbGlzdChcbiAgICB2LWlmPVwiaXNSZWFkeVwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpjbGFzcz1cInNjaGVtYS5jbGFzc1wiXG4gICAgOnN0eWxlPVwic2NoZW1hLnN0eWxlXCJcbiAgKVxuICAgIC5kaXRvLW5hdmlnYXRpb25cbiAgICAgIGRpdG8tc2NvcGVzKFxuICAgICAgICB2LWlmPVwic2NvcGVzXCJcbiAgICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgICA6c2NvcGVzPVwic2NvcGVzXCJcbiAgICAgIClcbiAgICAgIC8vIFdoZW4gdGhlcmUncyBvbmx5IHBhZ2luYXRpb24gd2l0aG91dCBzY29wZXMsIHdlIG5lZWQgYSBnb29kIG9sJyBzcGFjZXJcbiAgICAgIC8vIGRpdiwgZm9yIHRoZSBsYXlvdXQgbm90IHRvIGJyZWFrLi4uXG4gICAgICAuZGl0by1zcGFjZXIoXG4gICAgICAgIHYtZWxzZS1pZj1cInBhZ2luYXRlXCJcbiAgICAgIClcbiAgICAgIGRpdG8tcGFnaW5hdGlvbihcbiAgICAgICAgdi1pZj1cInBhZ2luYXRlXCJcbiAgICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgICA6bGltaXQ9XCJwYWdpbmF0ZVwiXG4gICAgICAgIDp0b3RhbD1cInRvdGFsIHx8IDBcIlxuICAgICAgKVxuICAgIHRhYmxlLmRpdG8tdGFibGUoXG4gICAgICA6Y2xhc3M9YHtcbiAgICAgICAgJ2RpdG8tdGFibGUtc2VwYXJhdG9ycyc6IGlzSW5saW5lZCxcbiAgICAgICAgJ2RpdG8tdGFibGUtbGFyZ2VyLXBhZGRpbmcnOiBoYXNFZGl0QnV0dG9ucyAmJiAhaXNJbmxpbmVkLFxuICAgICAgICAnZGl0by10YWJsZS1hbHRlcm5hdGUtY29sb3JzJzogIWlzSW5saW5lZCxcbiAgICAgICAgJ2RpdG8tdGFibGUtZXZlbi1jb3VudCc6IGhhc0V2ZW5Db3VudFxuICAgICAgfWBcbiAgICApXG4gICAgICBkaXRvLXRhYmxlLWhlYWQoXG4gICAgICAgIHYtaWY9XCJjb2x1bW5zXCJcbiAgICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgICA6Y29sdW1ucz1cImNvbHVtbnNcIlxuICAgICAgICA6aGFzRWRpdEJ1dHRvbnM9XCJoYXNFZGl0QnV0dG9uc1wiXG4gICAgICApXG4gICAgICB2dWUtZHJhZ2dhYmxlKFxuICAgICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGRyYWdnYWJsZSlcIlxuICAgICAgICA6bGlzdD1cInVwZGF0ZU9yZGVyKHNvdXJjZVNjaGVtYSwgbGlzdERhdGEsIHBhZ2luYXRpb25SYW5nZSlcIlxuICAgICAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgICAgIEBlbmQ9XCJvbkVuZERyYWdcIlxuICAgICAgKVxuICAgICAgICB0cihcbiAgICAgICAgICB2LWZvcj1cIml0ZW0sIGluZGV4IGluIGxpc3REYXRhXCJcbiAgICAgICAgICA6a2V5PVwiZ2V0SXRlbVVpZChzY2hlbWEsIGl0ZW0pXCJcbiAgICAgICAgICA6aWQ9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICApXG4gICAgICAgICAgdGVtcGxhdGUodi1pZj1cImNvbHVtbnNcIilcbiAgICAgICAgICAgIGRpdG8tdGFibGUtY2VsbChcbiAgICAgICAgICAgICAgdi1mb3I9XCJjb2x1bW4gaW4gY29sdW1uc1wiXG4gICAgICAgICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoY29sdW1uKVwiXG4gICAgICAgICAgICAgIDprZXk9XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldENlbGxDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgICAgOmNlbGw9XCJjb2x1bW5cIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZSlcbiAgICAgICAgICAgIHRkXG4gICAgICAgICAgICAgIGRpdG8tc2NoZW1hLWlubGluZWQoXG4gICAgICAgICAgICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICAgICAgICAgICAgOmxhYmVsPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCwgYXNPYmplY3Q6IHRydWUgfSlcIlxuICAgICAgICAgICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgICAgICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICAgICAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgICAgIDplZGl0UGF0aD1cImdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb21wb25lbnQoXG4gICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgICAgICAgICAgICB2LWh0bWw9XCJyZW5kZXIoZ2V0Q29udGV4dChpdGVtLCBpbmRleCkpXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgICAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIGl0ZW0sIHsgaW5kZXggfSlcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICAgIHYtaWY9XCJoYXNDZWxsRWRpdEJ1dHRvbnNcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGluZGV4KVwiXG4gICAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICApXG4gICAgICAvLyBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgaW5zaWRlIHRhYmxlIHdoZW4gbm90IGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICAgICAgdGZvb3QoXG4gICAgICAgIHYtaWY9XCJoYXNMaXN0QnV0dG9ucyAmJiAhc2luZ2xlXCJcbiAgICAgIClcbiAgICAgICAgdHJcbiAgICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgOmNvbHNwYW49XCJudW1Db2x1bW5zXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICAgICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgICAgICAgICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgICAgICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgIDpkYXRhPVwibGlzdERhdGFcIlxuICAgICAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgICApXG4gICAgLy8gUmVuZGVyIGNyZWF0ZSBidXR0b25zIG91dHNpZGUgdGFibGUgd2hlbiBpbiBhIHNpbmdsZSBjb21wb25lbnQgdmlldzpcbiAgICBkaXRvLWVkaXQtYnV0dG9ucy5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgc2luZ2xlXCJcbiAgICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwibGlzdERhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tbGlzdFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIC5kaXRvLW5hdmlnYXRpb25cbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlblxuICAgICAgcGFkZGluZy1ib3R0b206ICRjb250ZW50LXBhZGRpbmctaGFsZlxuICAgICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgICAmOmVtcHR5XG4gICAgICAgIGRpc3BsYXk6IG5vbmVcbiAgICAgIC5kaXRvLXNjb3BlcyxcbiAgICAgIC5kaXRvLXBhZ2luYXRpb25cbiAgICAgICAgZGlzcGxheTogZmxleFxuICAgICAgICBmbGV4OiAwIDEgYXV0b1xuICAgICAgICBtaW4td2lkdGg6IDBcbiAgICAmLmRpdG8tc2luZ2xlXG4gICAgICAvLyBTbyB0aGF0IGxpc3QgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IHRvIHRoZSBib3R0b206XG4gICAgICBkaXNwbGF5OiBncmlkXG4gICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50XG4gICAgICBoZWlnaHQ6IDEwMCVcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcbmltcG9ydCBPcmRlcmVkTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09yZGVyZWRNaXhpbi5qcydcbmltcG9ydCBWdWVEcmFnZ2FibGUgZnJvbSAndnVlZHJhZ2dhYmxlJ1xuaW1wb3J0IHsgZ2V0TmFtZWRTY2hlbWFzLCBnZXRWaWV3RWRpdFBhdGggfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRGaWx0ZXJzUGFuZWwgfSBmcm9tICcuLi91dGlscy9maWx0ZXIuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBwaWNrQnksIGVxdWFscywgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2xpc3QnLCB7XG4gIGNvbXBvbmVudHM6IHsgVnVlRHJhZ2dhYmxlIH0sXG4gIG1peGluczogW1NvdXJjZU1peGluLCBPcmRlcmVkTWl4aW5dLFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIC8vIE5vIG5lZWQgZm9yIHRyYW5zZm9ybWF0aW9uIGhlcmUuIFNlZSBUeXBlVHJlZUxpc3QgZm9yIGRldGFpbHMuXG4gICAgcmV0dXJuIHR5cGVcbiAgfSxcblxuICBnZXRQYW5lbFNjaGVtYShzY2hlbWEsIGRhdGFQYXRoLCBzY2hlbWFDb21wb25lbnQpIHtcbiAgICBjb25zdCB7IGZpbHRlcnMgfSA9IHNjaGVtYVxuICAgIC8vIFNlZSBpZiB0aGlzIGxpc3QgY29tcG9uZW50IHdhbnRzIHRvIGRpc3BsYXkgYSBmaWx0ZXIgcGFuZWwsIGFuZCBpZiBzbyxcbiAgICAvLyBjcmVhdGUgdGhlIHBhbmVsIHNjaGVtYSBmb3IgaXQgdGhyb3VnaCBgZ2V0RmlsdGVyc1BhbmVsKClgLlxuICAgIGlmIChmaWx0ZXJzKSB7XG4gICAgICAvLyBBdCB0aGUgdGltZSBvZiB0aGUgY3JlYXRpb24gb2YgdGhlIHBhbmVsIHNjaGVtYSwgdGhlIHNjaGVtYUNvbXBvbmVudCBpc1xuICAgICAgLy8gbm90IGZpbGxlZCB5ZXQsIHNvIHdlIGNhbid0IGdldCB0aGUgdGFyZ2V0IGNvbXBvbmVudCAoZGF0YVBhdGgpIHJpZ2h0XG4gICAgICAvLyBhd2F5LiBVc2UgYSBwcm94eSBhbmQgYSBnZXR0ZXIgaW5zdGVhZCwgdG8gZ2V0IGFyb3VuZCB0aGlzOlxuICAgICAgY29uc3QgZ2V0TGlzdENvbXBvbmVudCA9ICgpID0+IHNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeURhdGFQYXRoKFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgY29tcG9uZW50ID0+IGNvbXBvbmVudC50eXBlID09PSAnbGlzdCdcbiAgICAgIClcblxuICAgICAgcmV0dXJuIGdldEZpbHRlcnNQYW5lbChcbiAgICAgICAgZ2V0TmFtZWRTY2hlbWFzKGZpbHRlcnMpLFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgeyAvLyBDcmVhdGUgYSBzaW1wbGUgcHJveHkgdG8gZ2V0IC8gc2V0IHRoZSBxdWVyeSwgc2VlIGdldEZpbHRlcnNQYW5lbCgpXG4gICAgICAgICAgZ2V0IHF1ZXJ5KCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldExpc3RDb21wb25lbnQoKT8ucXVlcnlcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNldCBxdWVyeShxdWVyeSkge1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gZ2V0TGlzdENvbXBvbmVudCgpXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgdW5kZWZpbmVkIHZhbHVlcyBmb3IgY29tcGFyaW5nIHdpdGggZXF1YWxzKClcbiAgICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gb2JqID0+IHBpY2tCeShvYmosIHZhbHVlID0+IHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIGlmICghZXF1YWxzKGZpbHRlcihxdWVyeSksIGZpbHRlcihjb21wb25lbnQucXVlcnkpKSkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5xdWVyeSA9IHF1ZXJ5XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmxvYWREYXRhKGZhbHNlKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaGFzTGlzdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gISEoXG4gICAgICAgIHRoaXMuYnV0dG9uU2NoZW1hcyB8fFxuICAgICAgICB0aGlzLmNyZWF0YWJsZVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNFZGl0QnV0dG9ucygpIHtcbiAgICAgIGNvbnN0IHsgbGlzdERhdGEgfSA9IHRoaXNcbiAgICAgIHJldHVybiBsaXN0RGF0YS5sZW5ndGggPiAwICYmIChcbiAgICAgICAgdGhpcy5lZGl0YWJsZSB8fFxuICAgICAgICB0aGlzLmRlbGV0YWJsZSB8fFxuICAgICAgICB0aGlzLmRyYWdnYWJsZVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNDZWxsRWRpdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNJbmxpbmVkICYmIHRoaXMuaGFzRWRpdEJ1dHRvbnNcbiAgICB9LFxuXG4gICAgaGFzRXZlbkNvdW50KCkge1xuICAgICAgcmV0dXJuICEodGhpcy5saXN0RGF0YS5sZW5ndGggJSAyKVxuICAgIH0sXG5cbiAgICBudW1Db2x1bW5zKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHRoaXMuY29sdW1ucyA/IE9iamVjdC5rZXlzKHRoaXMuY29sdW1ucykubGVuZ3RoIDogMSkgK1xuICAgICAgICAodGhpcy5oYXNDZWxsRWRpdEJ1dHRvbnMgPyAxIDogMClcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldERhdGFQYXRoKGluZGV4KSB7XG4gICAgICByZXR1cm4gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgaW5kZXgpXG4gICAgfSxcblxuICAgIGdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KSB7XG4gICAgICBpZiAodGhpcy5lZGl0YWJsZSkge1xuICAgICAgICBjb25zdCBwYXRoID0gZ2V0Vmlld0VkaXRQYXRoKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpIHx8IHRoaXMucGF0aFxuICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCBpdGVtLCBpbmRleClcbiAgICAgICAgcmV0dXJuIGAke3BhdGh9LyR7aWR9YFxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q2VsbENsYXNzKGNvbHVtbikge1xuICAgICAgcmV0dXJuIGBkaXRvLWNlbGwtJHtoeXBoZW5hdGUoY29sdW1uLm5hbWUpfWBcbiAgICB9LFxuXG4gICAgZ2V0Q29udGV4dChpdGVtLCBpbmRleCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgZGF0YVBhdGg6IHRoaXMuZ2V0RGF0YVBhdGgoaW5kZXgpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbkZpbHRlckVycm9ycyhlcnJvcnMpIHtcbiAgICAgIGNvbnN0IGZpbHRlcnNEYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsICckZmlsdGVycycpXG4gICAgICBjb25zdCBwYW5lbCA9IHRoaXMuc2NoZW1hQ29tcG9uZW50LmdldFBhbmVsQnlEYXRhUGF0aChmaWx0ZXJzRGF0YVBhdGgpXG4gICAgICBpZiAocGFuZWwpIHtcbiAgICAgICAgcGFuZWwuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCB0cnVlKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5kaXRvLWxhYmVsLmRpdG8tbGFiZWwtY29tcG9uZW50KDpsYWJlbD1cInZhbHVlXCIgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGRpdG8tbGFiZWwuZGl0by1sYWJlbC1jb21wb25lbnQoOmxhYmVsPVwidmFsdWVcIiA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWxhYmVsLWNvbXBvbmVudFxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICBoZWlnaHQ6IDJlbVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdsYWJlbCcsIHtcbiAgZXhjbHVkZVZhbHVlOiB0cnVlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1tYXJrdXAoXG4gIDppZD1cImRhdGFQYXRoXCJcbilcbiAgZWRpdG9yLW1lbnUtYmFyLmRpdG8tbWFya3VwLXRvb2xiYXIoOmVkaXRvcj1cImVkaXRvclwiKVxuICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXRvb2xiYXIoXG4gICAgICB2LWlmPVwiZ3JvdXBlZEJ1dHRvbnMubGVuZ3RoID4gMFwiXG4gICAgKVxuICAgICAgLmRpdG8tYnV0dG9uLWdyb3VwKFxuICAgICAgICB2LWZvcj1cImJ1dHRvbnMgaW4gZ3JvdXBlZEJ1dHRvbnNcIlxuICAgICAgKVxuICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgdi1mb3I9XCJ7IG5hbWUsIGljb24sIGlzQWN0aXZlLCBvbkNsaWNrIH0gaW4gYnV0dG9uc1wiXG4gICAgICAgICAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCIsXG4gICAgICAgICAgQGNsaWNrPVwib25DbGlja1wiXG4gICAgICAgIClcbiAgICAgICAgICBpY29uKDpuYW1lPVwiaWNvblwiKVxuICBlZGl0b3ItY29udGVudC5kaXRvLW1hcmt1cC1lZGl0b3IoXG4gICAgcmVmPVwiZWRpdG9yXCJcbiAgICA6ZWRpdG9yPVwiZWRpdG9yXCJcbiAgICA6c3R5bGU9XCJzdHlsZXNcIlxuICApXG4gIC5kaXRvLXJlc2l6ZShcbiAgICB2LWlmPVwicmVzaXphYmxlXCJcbiAgICBAbW91c2Vkb3duLnN0b3AucHJldmVudD1cIm9uRHJhZ1Jlc2l6ZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLW1hcmt1cChcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gIClcbiAgICBlZGl0b3ItbWVudS1iYXIuZGl0by1tYXJrdXAtdG9vbGJhcig6ZWRpdG9yPVwiZWRpdG9yXCIpXG4gICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy10b29sYmFyKFxuICAgICAgICB2LWlmPVwiZ3JvdXBlZEJ1dHRvbnMubGVuZ3RoID4gMFwiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWJ1dHRvbi1ncm91cChcbiAgICAgICAgICB2LWZvcj1cImJ1dHRvbnMgaW4gZ3JvdXBlZEJ1dHRvbnNcIlxuICAgICAgICApXG4gICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgdi1mb3I9XCJ7IG5hbWUsIGljb24sIGlzQWN0aXZlLCBvbkNsaWNrIH0gaW4gYnV0dG9uc1wiXG4gICAgICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIixcbiAgICAgICAgICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGljb24oOm5hbWU9XCJpY29uXCIpXG4gICAgZWRpdG9yLWNvbnRlbnQuZGl0by1tYXJrdXAtZWRpdG9yKFxuICAgICAgcmVmPVwiZWRpdG9yXCJcbiAgICAgIDplZGl0b3I9XCJlZGl0b3JcIlxuICAgICAgOnN0eWxlPVwic3R5bGVzXCJcbiAgICApXG4gICAgLmRpdG8tcmVzaXplKFxuICAgICAgdi1pZj1cInJlc2l6YWJsZVwiXG4gICAgICBAbW91c2Vkb3duLnN0b3AucHJldmVudD1cIm9uRHJhZ1Jlc2l6ZVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLW1hcmt1cFxuICAgIEBleHRlbmQgJWlucHV0XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG5cbiAgICAuZGl0by1yZXNpemVcbiAgICAgIEBleHRlbmQgJWljb24tcmVzaXplXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgIHRvcDogdW5zZXRcbiAgICAgIGxlZnQ6IHVuc2V0XG4gICAgICByaWdodDogMFxuICAgICAgYm90dG9tOiAwXG4gICAgICB3aWR0aDogMWVtXG4gICAgICBoZWlnaHQ6IDFlbVxuXG4gICAgLlByb3NlTWlycm9yXG4gICAgICBoZWlnaHQ6IDEwMCVcbiAgICAgIG91dGxpbmU6IG5vbmVcblxuICAgIC5kaXRvLW1hcmt1cC1lZGl0b3JcbiAgICAgIG92ZXJmbG93LXk6IHNjcm9sbFxuICAgICAgLy8gTW92ZSBwYWRkaW5nIFwiaW5zaWRlXCIgZWRpdG9yIHRvIGNvcnJlY3RseSBwb3NpdGlvbiBzY3JvbGxiYXJcbiAgICAgIG1hcmdpbi1yaWdodDogLSRpbnB1dC1wYWRkaW5nLWhvclxuICAgICAgcGFkZGluZy1yaWdodDogJGlucHV0LXBhZGRpbmctaG9yXG5cbiAgICAuZGl0by1idXR0b25zLXRvb2xiYXJcbiAgICAgIG1hcmdpbjogJGlucHV0LXBhZGRpbmctdmVyIDBcblxuICAgIGgxLFxuICAgIGgyLFxuICAgIGgzLFxuICAgIHAsXG4gICAgdWwsXG4gICAgb2wsXG4gICAgcHJlLFxuICAgIGJsb2NrcXVvdGVcbiAgICAgIG1hcmdpbjogMXJlbSAwXG4gICAgICAmOmZpcnN0LWNoaWxkXG4gICAgICAgIG1hcmdpbi10b3A6IDBcbiAgICAgICY6bGFzdC1jaGlsZFxuICAgICAgICBtYXJnaW4tYm90dG9tOiAwXG4gICAgaDEsXG4gICAgaDIsXG4gICAgaDNcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkXG4gICAgaDFcbiAgICAgIGZvbnQtc2l6ZTogMS40cmVtXG4gICAgaDJcbiAgICAgIGZvbnQtc2l6ZTogMS4ycmVtXG4gICAgdWxcbiAgICAgIGxpc3Qtc3R5bGU6IGRpc2NcbiAgICBjb2RlXG4gICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LW1vbm9cbiAgICBwcmVcbiAgICAgIHBhZGRpbmc6IDAuN3JlbSAxcmVtXG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWRhcmtlclxuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgICAgb3ZlcmZsb3cteDogYXV0b1xuICAgICAgY29kZVxuICAgICAgICBkaXNwbGF5OiBibG9ja1xuICAgIHAgY29kZVxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICBwYWRkaW5nOiAwIDAuM3JlbVxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVyXG4gICAgYVxuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmVcbiAgICAgIGN1cnNvcjogZGVmYXVsdFxuICAgICAgY29sb3I6IGJsdWVcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lXG4gICAgdWwsXG4gICAgb2xcbiAgICAgIHBhZGRpbmctbGVmdDogMnJlbVxuICAgIGxpXG4gICAgICAmID4gcCxcbiAgICAgICYgPiBvbCxcbiAgICAgICYgPiB1bFxuICAgICAgICBtYXJnaW46IDBcbiAgICBibG9ja3F1b3RlXG4gICAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkICRjb2xvci1saWdodGVyXG4gICAgICBwYWRkaW5nLWxlZnQ6IDFyZW1cbiAgICAgIGZvbnQtc3R5bGU6IGl0YWxpY1xuICAgICAgcFxuICAgICAgICBtYXJnaW46IDBcblxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IEVkaXRvciwgRWRpdG9yQ29udGVudCwgRWRpdG9yTWVudUJhciwgTWFyayB9IGZyb20gJ3RpcHRhcCdcbmltcG9ydCB7IHRvZ2dsZU1hcmsgfSBmcm9tICd0aXB0YXAtY29tbWFuZHMnXG5pbXBvcnQge1xuICAvLyBNYXJrczpcbiAgQm9sZCwgQ29kZSwgSXRhbGljLCBMaW5rLCBTdHJpa2UsIFVuZGVybGluZSxcbiAgLy8gTm9kZXM6XG4gIEJsb2NrcXVvdGUsIENvZGVCbG9jaywgSGFyZEJyZWFrLCBIZWFkaW5nLCBIb3Jpem9udGFsUnVsZSxcbiAgT3JkZXJlZExpc3QsIEJ1bGxldExpc3QsIExpc3RJdGVtLFxuICAvLyBUT0RPOlxuICAvLyAtIEltYWdlLCBNZW50aW9uLCBDb2RlQmxvY2tIaWdobGlnaHRcbiAgLy8gLSBUYWJsZSwgVGFibGVDZWxsLCBUYWJsZUhlYWRlciwgVGFibGVOb2RlcywgVGFibGVSb3csXG4gIC8vIC0gVG9kb0l0ZW0sIFRvZG9MaXN0XG4gIC8vIFRvb2xzOlxuICBIaXN0b3J5XG59IGZyb20gJ3RpcHRhcC1leHRlbnNpb25zJ1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gJ0BkaXRvanMvdWknXG5pbXBvcnQge1xuICBpc0FycmF5LCBpc09iamVjdCwgdW5kZXJzY29yZSwgaHlwaGVuYXRlLCBkZWJvdW5jZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbWFya3VwJywge1xuICBjb21wb25lbnRzOiB7XG4gICAgRWRpdG9yQ29udGVudCxcbiAgICBFZGl0b3JNZW51QmFyLFxuICAgIEljb25cbiAgfSxcblxuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWRpdG9yOiBudWxsLFxuICAgICAgaGVpZ2h0OiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgMTBcbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCB8fCBgY2FsYygke3RoaXMubGluZXN9ZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpYFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtYXJrQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ21hcmtzJywge1xuICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICBpdGFsaWM6IHRydWUsXG4gICAgICAgIHVuZGVybGluZTogdHJ1ZSxcbiAgICAgICAgc3RyaWtlOiB0cnVlLFxuICAgICAgICBzbWFsbDogdHJ1ZSxcbiAgICAgICAgY29kZTogdHJ1ZSxcbiAgICAgICAgbGluazoge1xuICAgICAgICAgIG9uQ2xpY2s6IGNvbW1hbmQgPT4gdGhpcy5vbkNsaWNrTGluayhjb21tYW5kKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBiYXNpY05vZGVCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygnbm9kZXMnLCB7XG4gICAgICAgIHBhcmFncmFwaDoge1xuICAgICAgICAvLyBEbyBub3Qgc2hvdyB0aGUgcGFyYWdyYXBoIGNvbW1hbmQgYXMgYWN0aXZlIGlmIGFueSBvZiB0aGUgYmxvY2tcbiAgICAgICAgLy8gY29tbWFuZHMgYXJlIGFsc28gYWN0aXZlOlxuICAgICAgICAgIGlnbm9yZUFjdGl2ZTogKCkgPT5cbiAgICAgICAgICAgIHRoaXMub3RoZXJOb2RlQnV0dG9ucy5zb21lKGJ1dHRvbiA9PiBidXR0b24uaXNBY3RpdmUpXG4gICAgICAgIH0sXG4gICAgICAgIGhlYWRpbmc6IHtcbiAgICAgICAgICBhdHRyOiAnbGV2ZWwnLFxuICAgICAgICAgIHZhbHVlczogWzEsIDIsIDMsIDQsIDUsIDZdXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG90aGVyTm9kZUJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdub2RlcycsIHtcbiAgICAgICAgYnVsbGV0TGlzdDogdHJ1ZSxcbiAgICAgICAgb3JkZXJlZExpc3Q6IHRydWUsXG4gICAgICAgIGJsb2NrcXVvdGU6IHRydWUsXG4gICAgICAgIGNvZGVCbG9jazogdHJ1ZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdG9vbEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCd0b29scycsIHtcbiAgICAgICAgdW5kbzogdHJ1ZSxcbiAgICAgICAgcmVkbzogdHJ1ZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZ3JvdXBlZEJ1dHRvbnMoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcmtCdXR0b25zLFxuICAgICAgICBiYXNpY05vZGVCdXR0b25zLFxuICAgICAgICBvdGhlck5vZGVCdXR0b25zLFxuICAgICAgICB0b29sQnV0dG9uc1xuICAgICAgfSA9IHRoaXNcbiAgICAgIHJldHVybiBbXG4gICAgICAgIG1hcmtCdXR0b25zLFxuICAgICAgICBiYXNpY05vZGVCdXR0b25zLFxuICAgICAgICBvdGhlck5vZGVCdXR0b25zLFxuICAgICAgICB0b29sQnV0dG9uc1xuICAgICAgXS5maWx0ZXIoYnV0dG9ucyA9PiBidXR0b25zLmxlbmd0aCA+IDApXG4gICAgfSxcblxuICAgIHBhcnNlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZXNlcnZlV2hpdGVzcGFjZToge1xuICAgICAgICAgICdjb2xsYXBzZSc6IGZhbHNlLFxuICAgICAgICAgICdwcmVzZXJ2ZSc6IHRydWUsXG4gICAgICAgICAgJ3ByZXNlcnZlLWFsbCc6ICdmdWxsJ1xuICAgICAgICB9W3RoaXMud2hpdGVzcGFjZV1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZWRpdG9yT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVkaXRhYmxlOiAhdGhpcy5yZWFkeW9ubHksXG4gICAgICAgIGF1dG9Gb2N1czogdGhpcy5hdXRvZm9jdXMsXG4gICAgICAgIGRpc2FibGVJbnB1dFJ1bGVzOiAhdGhpcy5lbmFibGVSdWxlcy5pbnB1dCxcbiAgICAgICAgZGlzYWJsZVBhc3RlUnVsZXM6ICF0aGlzLmVuYWJsZVJ1bGVzLnBhc3RlLFxuICAgICAgICBwYXJzZU9wdGlvbnM6IHRoaXMucGFyc2VPcHRpb25zXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlc2l6YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Jlc2l6YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgd2hpdGVzcGFjZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3doaXRlc3BhY2UnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnY29sbGFwc2UnXG4gICAgICAvLyBQb3NzaWJsZSB2YWx1ZXMgYXJlOiAnY29sbGFwc2UnLCAncHJlc2VydmUnLCAncHJlc2VydmUtYWxsJ1xuICAgIH0pLFxuXG4gICAgZW5hYmxlUnVsZXM6IGdldFNjaGVtYUFjY2Vzc29yKCdlbmFibGVSdWxlcycsIHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEJvb2xlYW5dLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZW5hYmxlUnVsZXMpIHtcbiAgICAgICAgcmV0dXJuIGlzT2JqZWN0KGVuYWJsZVJ1bGVzKVxuICAgICAgICAgID8gZW5hYmxlUnVsZXNcbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgIGlucHV0OiAhIWVuYWJsZVJ1bGVzLFxuICAgICAgICAgICAgcGFzdGU6ICEhZW5hYmxlUnVsZXNcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHJlYWR5b25seTogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnLFxuICAgIGF1dG9mb2N1czogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnLFxuICAgIGVuYWJsZVJ1bGVzOiAndXBkYXRlRWRpdG9yT3B0aW9ucydcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIGxldCBjaGFuZ2VkID0gZmFsc2VcbiAgICBsZXQgaWdub3JlV2F0Y2ggPSBmYWxzZVxuXG4gICAgY29uc3Qgb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9jdXNlZCAmJiBjaGFuZ2VkKSB7XG4gICAgICAgIGNoYW5nZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvbkZvY3VzID0gKCkgPT4gdGhpcy5vbkZvY3VzKClcblxuICAgIGNvbnN0IG9uQmx1ciA9ICgpID0+IHtcbiAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9XG5cbiAgICBjb25zdCBzZXRWYWx1ZURlYm91bmNlZCA9IGRlYm91bmNlKGdldFZhbHVlID0+IHtcbiAgICAgIGlnbm9yZVdhdGNoID0gdHJ1ZVxuICAgICAgdGhpcy52YWx1ZSA9IGdldFZhbHVlKClcbiAgICAgIGNoYW5nZWQgPSB0cnVlXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfSwgMTAwKVxuXG4gICAgY29uc3Qgb25VcGRhdGUgPSAoeyBnZXRIVE1MIH0pID0+IHtcbiAgICAgIHNldFZhbHVlRGVib3VuY2VkKGdldEhUTUwpXG4gICAgICB0aGlzLm9uSW5wdXQoKVxuICAgIH1cblxuICAgIHRoaXMuJHdhdGNoKCd2YWx1ZScsIHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVXYXRjaCkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVkaXRvci5zZXRDb250ZW50KHZhbHVlLCBmYWxzZSwgdGhpcy5wYXJzZU9wdGlvbnMpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuZWRpdG9yID0gbmV3IEVkaXRvcih7XG4gICAgICAuLi50aGlzLmVkaXRvck9wdGlvbnMsXG4gICAgICBvbkZvY3VzLFxuICAgICAgb25CbHVyLFxuICAgICAgb25VcGRhdGUsXG4gICAgICBleHRlbnNpb25zOiB0aGlzLmNyZWF0ZUV4dGVuc2lvbnMoKSxcbiAgICAgIGNvbnRlbnQ6IHRoaXMudmFsdWUgfHwgJydcbiAgICB9KVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5lZGl0b3IuZGVzdHJveSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRHJhZ1Jlc2l6ZShldmVudCkge1xuICAgICAgY29uc3QgZ2V0UG9pbnQgPSAoeyBjbGllbnRYOiB4LCBjbGllbnRZOiB5IH0pID0+ICh7IHgsIHkgfSlcblxuICAgICAgbGV0IHByZXZZID0gZ2V0UG9pbnQoZXZlbnQpLnlcbiAgICAgIGxldCBoZWlnaHQgPSBwYXJzZUZsb2F0KGdldENvbXB1dGVkU3R5bGUodGhpcy4kcmVmcy5lZGl0b3IuJGVsKS5oZWlnaHQpXG5cbiAgICAgIGNvbnN0IG1vdXNlbW92ZSA9IGV2ZW50ID0+IHtcbiAgICAgICAgY29uc3QgeyB5IH0gPSBnZXRQb2ludChldmVudClcbiAgICAgICAgaGVpZ2h0ICs9IHkgLSBwcmV2WVxuICAgICAgICBwcmV2WSA9IHlcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBgJHtNYXRoLm1heChoZWlnaHQsIDApfXB4YFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgICAgbW91c2Vtb3ZlLFxuXG4gICAgICAgIG1vdXNldXAoZXZlbnQpIHtcbiAgICAgICAgICBtb3VzZW1vdmUoZXZlbnQpXG4gICAgICAgICAgaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdXBkYXRlRWRpdG9yT3B0aW9ucygpIHtcbiAgICAgIHRoaXMuZWRpdG9yLnNldE9wdGlvbnModGhpcy5lZGl0b3JPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNsaWNrTGluayhjb21tYW5kKSB7XG4gICAgICBjb25zdCBhdHRycyA9IGF3YWl0IHRoaXMuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICBocmVmOiB7XG4gICAgICAgICAgICB0eXBlOiAndXJsJyxcbiAgICAgICAgICAgIGxhYmVsOiAnTGluaycsXG4gICAgICAgICAgICBhdXRvZm9jdXM6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICBsYWJlbDogJ1RpdGxlJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uczoge1xuICAgICAgICAgIGNhbmNlbDoge30sXG4gICAgICAgICAgYXBwbHk6IHsgdHlwZTogJ3N1Ym1pdCcgfSxcbiAgICAgICAgICByZW1vdmU6IHtcbiAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICBjbGljayh7IGRpYWxvZ0NvbXBvbmVudCB9KSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29tcG9uZW50LnJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgaHJlZjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIHRpdGxlOiBudWxsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF0YTogdGhpcy5lZGl0b3IuZ2V0TWFya0F0dHJzKCdsaW5rJylcbiAgICAgIH0pXG4gICAgICBpZiAoYXR0cnMpIHtcbiAgICAgICAgbGV0IHsgaHJlZiwgdGl0bGUgfSA9IGF0dHJzXG4gICAgICAgIGlmIChocmVmKSB7XG4gICAgICAgICAgLy8gU2VlIGlmIGBocmVmYCBjYW4gYmUgcGFyc2VkIGFzIGEgVVJMLCBhbmQgaWYgbm90LCBwcmVmaXggaXQgd2l0aFxuICAgICAgICAgIC8vIGEgZGVmYXVsdCBwcm90b2NvbC5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmV3IFVSTChocmVmKVxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgaHJlZiA9IGBodHRwOi8vJHtocmVmfWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29tbWFuZCh7IGhyZWYsIHRpdGxlIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNyZWF0ZUV4dGVuc2lvbnMoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcmtzID0ge30sXG4gICAgICAgIG5vZGVzID0ge30sXG4gICAgICAgIHRvb2xzID0ge31cbiAgICAgIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLy8gc2NoZW1hLm1hcmtzOlxuICAgICAgICBtYXJrcy5ib2xkICYmIG5ldyBCb2xkKCksXG4gICAgICAgIG1hcmtzLml0YWxpYyAmJiBuZXcgSXRhbGljKCksXG4gICAgICAgIG1hcmtzLnVuZGVybGluZSAmJiBuZXcgVW5kZXJsaW5lKCksXG4gICAgICAgIG1hcmtzLnN0cmlrZSAmJiBuZXcgU3RyaWtlKCksXG4gICAgICAgIG1hcmtzLnNtYWxsICYmIG5ldyBTbWFsbCgpLFxuICAgICAgICBtYXJrcy5jb2RlICYmIG5ldyBDb2RlKCksXG4gICAgICAgIG1hcmtzLmxpbmsgJiYgbmV3IExpbmtXaXRoVGl0bGUoKSxcblxuICAgICAgICAvLyBzY2hlbWEubm9kZXM6XG4gICAgICAgIG5vZGVzLmJsb2NrcXVvdGUgJiYgbmV3IEJsb2NrcXVvdGUoKSxcbiAgICAgICAgbm9kZXMuY29kZUJsb2NrICYmIG5ldyBDb2RlQmxvY2soKSxcbiAgICAgICAgbmV3IEhhcmRCcmVhaygpLCAvLyBUT0RPOiBTaG91bGQgdGhpcyBhbHdheXMgb24/XG4gICAgICAgIG5vZGVzLmhlYWRpbmcgJiYgbmV3IEhlYWRpbmcoeyBsZXZlbHM6IG5vZGVzLmhlYWRpbmcgfSksXG4gICAgICAgIG5vZGVzLmhvcml6b250YWxSdWxlICYmIG5ldyBIb3Jpem9udGFsUnVsZSgpLFxuICAgICAgICAobm9kZXMub3JkZXJlZExpc3QgfHwgbm9kZXMuYnVsbGV0TGlzdCkgJiYgbmV3IExpc3RJdGVtKCksXG4gICAgICAgIG5vZGVzLmJ1bGxldExpc3QgJiYgbmV3IEJ1bGxldExpc3QoKSxcbiAgICAgICAgbm9kZXMub3JkZXJlZExpc3QgJiYgbmV3IE9yZGVyZWRMaXN0KCksXG4gICAgICAgIC8vIFRPRE86XG4gICAgICAgIC8vIG5vZGVzLnRvZG9MaXN0ICYmIG5ldyBUb2RvSXRlbSgpLFxuICAgICAgICAvLyBub2Rlcy50b2RvTGlzdCAmJiBuZXcgVG9kb0xpc3QoKSxcblxuICAgICAgICAvLyBzY2hlbWEudG9vbHM6XG4gICAgICAgIHRvb2xzLmhpc3RvcnkgJiYgbmV3IEhpc3RvcnkoKVxuICAgICAgXS5maWx0ZXIoZXh0ZW5zaW9uID0+ICEhZXh0ZW5zaW9uKVxuICAgIH0sXG5cbiAgICBnZXRCdXR0b25zKHNldHRpbmdzTmFtZSwgZGVzY3JpcHRpb25zKSB7XG4gICAgICBjb25zdCBsaXN0ID0gW11cblxuICAgICAgY29uc3QgYWRkQnV0dG9uID0gKHsgbmFtZSwgaWNvbiwgYXR0cnMsIGlnbm9yZUFjdGl2ZSwgb25DbGljayB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGlzQWN0aXZlID0gdGhpcy5lZGl0b3IuaXNBY3RpdmVbbmFtZV1cbiAgICAgICAgY29uc3QgY29tbWFuZCA9IHRoaXMuZWRpdG9yLmNvbW1hbmRzW25hbWVdXG4gICAgICAgIGxpc3QucHVzaCh7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBpY29uLFxuICAgICAgICAgIGlzQWN0aXZlOiAoXG4gICAgICAgICAgICBpc0FjdGl2ZT8uKGF0dHJzKSAmJlxuICAgICAgICAgICAgKGlnbm9yZUFjdGl2ZSA9PSBudWxsIHx8ICFpZ25vcmVBY3RpdmUoKSlcbiAgICAgICAgICApLFxuICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IG9uQ2xpY2tcbiAgICAgICAgICAgID8gb25DbGljayhjb21tYW5kLCBhdHRycylcbiAgICAgICAgICAgIDogY29tbWFuZChhdHRycylcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLnNjaGVtYVtzZXR0aW5nc05hbWVdXG4gICAgICBpZiAoc2V0dGluZ3MpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCBkZXNjcmlwdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMoZGVzY3JpcHRpb25zKSkge1xuICAgICAgICAgIGNvbnN0IHNldHRpbmdOYW1lID0gWyd1bmRvJywgJ3JlZG8nXS5pbmNsdWRlcyhrZXkpID8gJ2hpc3RvcnknIDoga2V5XG4gICAgICAgICAgY29uc3Qgc2V0dGluZyA9IHNldHRpbmdzW3NldHRpbmdOYW1lXVxuICAgICAgICAgIGNvbnN0IG5hbWUgPSB1bmRlcnNjb3JlKGtleSlcbiAgICAgICAgICBjb25zdCBpY29uID0gaHlwaGVuYXRlKGtleSlcbiAgICAgICAgICBpZiAoc2V0dGluZykge1xuICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgIGFkZEJ1dHRvbih7IG5hbWUsIGljb24gfSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZGVzY3JpcHRpb24pKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgYXR0ciwgdmFsdWVzLCBpZ25vcmVBY3RpdmUsIG9uQ2xpY2sgfSA9IGRlc2NyaXB0aW9uXG4gICAgICAgICAgICAgIGlmIChhdHRyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWVzKSAmJiBpc0FycmF5KHNldHRpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IGhlYWRpbmcgbGV2ZWwgYXR0cnM6XG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZy5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBhZGRCdXR0b24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb246IGAke2ljb259LSR7dmFsdWV9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IFthdHRyXTogdmFsdWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUFjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZEJ1dHRvbih7IG5hbWUsIGljb24sIGlnbm9yZUFjdGl2ZSwgb25DbGljayB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdFxuICAgIH0sXG5cbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRlbC5zY3JvbGxJbnRvVmlldz8uKClcbiAgICAgIHRoaXMuZWRpdG9yLmZvY3VzKClcbiAgICB9XG4gIH1cbn0pXG5cbmNsYXNzIFNtYWxsIGV4dGVuZHMgTWFyayB7XG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiAnc21hbGwnXG4gIH1cblxuICBnZXQgc2NoZW1hKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJzZURPTTogW1xuICAgICAgICB7IHRhZzogJ3NtYWxsJyB9XG4gICAgICBdLFxuICAgICAgdG9ET006ICgpID0+IFsnc21hbGwnLCAwXVxuICAgIH1cbiAgfVxuXG4gIGNvbW1hbmRzKHsgdHlwZSB9KSB7XG4gICAgcmV0dXJuICgpID0+IHRvZ2dsZU1hcmsodHlwZSlcbiAgfVxufVxuY2xhc3MgTGlua1dpdGhUaXRsZSBleHRlbmRzIExpbmsge1xuICBnZXQgc2NoZW1hKCkge1xuICAgIHJldHVybiB7XG4gICAgICBhdHRyczoge1xuICAgICAgICBocmVmOiB7XG4gICAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgICB9LFxuICAgICAgICB0aXRsZToge1xuICAgICAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGluY2x1c2l2ZTogZmFsc2UsXG4gICAgICBwYXJzZURPTTogW3tcbiAgICAgICAgdGFnOiAnYScsXG4gICAgICAgIGdldEF0dHJzOiBkb20gPT4gKHtcbiAgICAgICAgICBocmVmOiBkb20uZ2V0QXR0cmlidXRlKCdocmVmJyksXG4gICAgICAgICAgdGl0bGU6IGRvbS5nZXRBdHRyaWJ1dGUoJ3RpdGxlJylcbiAgICAgICAgfSlcbiAgICAgIH1dLFxuICAgICAgdG9ET006IG5vZGUgPT4gWydhJywgbm9kZS5hdHRycywgMF1cbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1tdWx0aXNlbGVjdChcbiAgOmNsYXNzPWB7XG4gICAgJ2RpdG8tbXVsdGlzZWxlY3Qtc2luZ2xlJzogIW11bHRpcGxlLFxuICAgICdkaXRvLW11bHRpc2VsZWN0LW11bHRpcGxlJzogbXVsdGlwbGVcbiAgfWBcbilcbiAgdnVlLW11bHRpc2VsZWN0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIHYtbW9kZWw9XCJzZWxlY3RlZE9wdGlvbnNcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDpzaG93LWxhYmVscz1cImZhbHNlXCJcbiAgICA6cGxhY2Vob2xkZXI9XCJwbGFjZWhvbGRlclwiXG4gICAgdGFnLXBsYWNlaG9sZGVyPVwiUHJlc3MgZW50ZXIgdG8gYWRkIG5ldyB0YWdcIixcbiAgICA6b3B0aW9ucz1cInBvcHVsYXRlICYmIGFjdGl2ZU9wdGlvbnMgfHwgW11cIlxuICAgIDpjdXN0b20tbGFiZWw9XCJnZXRMYWJlbEZvck9wdGlvblwiXG4gICAgOnRyYWNrLWJ5PVwib3B0aW9uVmFsdWVcIlxuICAgIDpncm91cC1sYWJlbD1cImdyb3VwQnlMYWJlbFwiXG4gICAgOmdyb3VwLXZhbHVlcz1cImdyb3VwQnlPcHRpb25zXCJcbiAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgOnRhZ2dhYmxlPVwidGFnZ2FibGVcIlxuICAgIDpzZWFyY2hhYmxlPVwic2VhcmNoYWJsZVwiXG4gICAgOmludGVybmFsLXNlYXJjaD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgIDpwcmVzZXJ2ZS1zZWFyY2g9XCIhIXNlYXJjaEZpbHRlclwiXG4gICAgOmNsZWFyLW9uLXNlbGVjdD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgIDpjbG9zZS1vbi1zZWxlY3Q9XCIhc3RheU9wZW5cIlxuICAgIDpsb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICBAb3Blbj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgQHRhZz1cIm9uQWRkVGFnXCJcbiAgICBAc2VhcmNoLWNoYW5nZT1cIm9uU2VhcmNoQ2hhbmdlXCJcbiAgKVxuICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICBAY2xpY2s9XCJjbGVhclwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1tdWx0aXNlbGVjdChcbiAgICA6Y2xhc3M9YHtcbiAgICAgICdkaXRvLW11bHRpc2VsZWN0LXNpbmdsZSc6ICFtdWx0aXBsZSxcbiAgICAgICdkaXRvLW11bHRpc2VsZWN0LW11bHRpcGxlJzogbXVsdGlwbGVcbiAgICB9YFxuICApXG4gICAgdnVlLW11bHRpc2VsZWN0KFxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICA6c2hvdy1sYWJlbHM9XCJmYWxzZVwiXG4gICAgICA6cGxhY2Vob2xkZXI9XCJwbGFjZWhvbGRlclwiXG4gICAgICB0YWctcGxhY2Vob2xkZXI9XCJQcmVzcyBlbnRlciB0byBhZGQgbmV3IHRhZ1wiLFxuICAgICAgOm9wdGlvbnM9XCJwb3B1bGF0ZSAmJiBhY3RpdmVPcHRpb25zIHx8IFtdXCJcbiAgICAgIDpjdXN0b20tbGFiZWw9XCJnZXRMYWJlbEZvck9wdGlvblwiXG4gICAgICA6dHJhY2stYnk9XCJvcHRpb25WYWx1ZVwiXG4gICAgICA6Z3JvdXAtbGFiZWw9XCJncm91cEJ5TGFiZWxcIlxuICAgICAgOmdyb3VwLXZhbHVlcz1cImdyb3VwQnlPcHRpb25zXCJcbiAgICAgIDptdWx0aXBsZT1cIm11bHRpcGxlXCJcbiAgICAgIDp0YWdnYWJsZT1cInRhZ2dhYmxlXCJcbiAgICAgIDpzZWFyY2hhYmxlPVwic2VhcmNoYWJsZVwiXG4gICAgICA6aW50ZXJuYWwtc2VhcmNoPVwiIXNlYXJjaEZpbHRlclwiXG4gICAgICA6cHJlc2VydmUtc2VhcmNoPVwiISFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOmNsZWFyLW9uLXNlbGVjdD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOmNsb3NlLW9uLXNlbGVjdD1cIiFzdGF5T3BlblwiXG4gICAgICA6bG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgICBAb3Blbj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgICBAdGFnPVwib25BZGRUYWdcIlxuICAgICAgQHNlYXJjaC1jaGFuZ2U9XCJvblNlYXJjaENoYW5nZVwiXG4gICAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIEBjbGljaz1cImNsZWFyXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAndnVlLW11bHRpc2VsZWN0L2Rpc3QvdnVlLW11bHRpc2VsZWN0Lm1pbi5jc3MnXG5cbiAgJHNwaW5uZXItd2lkdGg6ICRzZWxlY3QtYXJyb3ctd2lkdGhcbiAgJHRhZy1pY29uLXdpZHRoOiAxLjhlbVxuICAkdGFnLW1hcmdpbjogMnB4XG4gICR0YWctcGFkZGluZzogM3B4XG4gICR0YWctbGluZS1oZWlnaHQ6IDEuMWVtXG5cbiAgLmRpdG8tbXVsdGlzZWxlY3RcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcblxuICAgIC5tdWx0aXNlbGVjdFxuICAgICAgZm9udC1zaXplOiBpbmhlcml0XG4gICAgICBtaW4taGVpZ2h0OiBpbmhlcml0XG4gICAgICBjb2xvcjogJGNvbG9yLWJsYWNrXG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZ3NcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdFxuICAgICAgb3ZlcmZsb3c6IGF1dG9cbiAgICAgIG1pbi1oZWlnaHQ6IGluaGVyaXRcbiAgICAgIHBhZGRpbmc6IDAgJHNwaW5uZXItd2lkdGggMCAwXG4gICAgICAvLyBTbyB0YWdzIGNhbiBmbG9hdCBvbiBtdWx0aXBsZSBsaW5lcyBhbmQgaGF2ZSBwcm9wZXIgbWFyZ2luczpcbiAgICAgIHBhZGRpbmctYm90dG9tOiAkdGFnLW1hcmdpblxuXG4gICAgLm11bHRpc2VsZWN0X190YWdcbiAgICAgIGZsb2F0OiBsZWZ0XG4gICAgICBtYXJnaW46ICR0YWctbWFyZ2luIDAgMCAkdGFnLW1hcmdpblxuICAgICAgYm9yZGVyLXJhZGl1czogMWVtXG4gICAgICBwYWRkaW5nOiAkdGFnLXBhZGRpbmcgJHRhZy1pY29uLXdpZHRoICR0YWctcGFkZGluZyAwLjhlbVxuICAgICAgbGluZS1oZWlnaHQ6ICR0YWctbGluZS1oZWlnaHRcblxuICAgIC5tdWx0aXNlbGVjdF9fdGFncy13cmFwXG4gICAgICBvdmVyZmxvdzogYXV0b1xuICAgICAgbGluZS1oZWlnaHQ6IDBcblxuICAgIC5tdWx0aXNlbGVjdF9fc2luZ2xlLFxuICAgIC5tdWx0aXNlbGVjdF9fcGxhY2Vob2xkZXIsXG4gICAgLm11bHRpc2VsZWN0X19pbnB1dFxuICAgICAgZm9udC1zaXplOiBpbmhlcml0XG4gICAgICBsaW5lLWhlaWdodDogaW5oZXJpdFxuICAgICAgbWluLWhlaWdodDogMFxuICAgICAgbWFyZ2luOiAwIDAgMXB4IDBcbiAgICAgIC8vIFNhZGx5LCB2dWUtc2VsZWN0IHNldHMgc3R5bGU9XCJwYWRkaW5nOiAuLi47XCIgaW4gYWRkaXRpb24gdG8gdXNpbmdcbiAgICAgIC8vIGNsYXNzZXMsIHNvIGAhaW1wb3J0YW50YCBpcyBuZWNlc3Nhcnk6XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZyAhaW1wb3J0YW50XG4gICAgICAvLyBTbyBpbnB1dCBjYW4gZmxvYXQgbmV4dCB0byB0YWdzIGFuZCBoYXZlIHByb3BlciBtYXJnaW5zIHdpdGhcbiAgICAgIC8vIC5tdWx0aXNlbGVjdF9fdGFnczpcbiAgICAgIHBhZGRpbmctYm90dG9tOiAwICFpbXBvcnRhbnRcbiAgICAgIGJhY2tncm91bmQ6IG5vbmVcblxuICAgIC5tdWx0aXNlbGVjdF9fcGxhY2Vob2xkZXIsXG4gICAgLm11bHRpc2VsZWN0X19pbnB1dDo6cGxhY2Vob2xkZXJcbiAgICAgIGNvbG9yOiAkY29sb3ItcGxhY2Vob2xkZXJcblxuICAgIC5tdWx0aXNlbGVjdC0tYWN0aXZlXG4gICAgICAubXVsdGlzZWxlY3RfX3BsYWNlaG9sZGVyXG4gICAgICAgIC8vIERvbid0IHVzZSBgZGlzcGxheTogbm9uZWAgdG8gaGlkZSBwbGFjZS1ob2xkZXIsIGFzIHRoZSBsYXlvdXQgd291bGRcbiAgICAgICAgLy8gY29sbGFwc2UuXG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW5cblxuICAgIC5tdWx0aXNlbGVjdF9fc2VsZWN0LFxuICAgIC5tdWx0aXNlbGVjdF9fc3Bpbm5lclxuICAgICAgcGFkZGluZzogMFxuICAgICAgLy8gJGJvcmRlci13aWR0aCB0byBwcmV2ZW50IG1hc2tpbmcgYm9yZGVyIHdpdGggLm11bHRpc2VsZWN0X19zcGlubmVyXG4gICAgICB0b3A6ICRib3JkZXItd2lkdGhcbiAgICAgIHJpZ2h0OiAkYm9yZGVyLXdpZHRoXG4gICAgICBib3R0b206ICRib3JkZXItd2lkdGhcbiAgICAgIGhlaWdodDogaW5oZXJpdFxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcblxuICAgIC5tdWx0aXNlbGVjdF9fc2VsZWN0XG4gICAgICB3aWR0aDogMFxuICAgICAgbWFyZ2luLXJpZ2h0OiBjYWxjKCRzZWxlY3QtYXJyb3ctd2lkdGggLyAyKVxuICAgICAgJjo6YmVmb3JlXG4gICAgICAgICthcnJvdygkc2VsZWN0LWFycm93LXNpemUpXG4gICAgICAgIGJvdHRvbTogJHNlbGVjdC1hcnJvdy1ib3R0b21cbiAgICAgICAgcmlnaHQ6IGNhbGMoLTEgKiAkc2VsZWN0LWFycm93LXNpemUgLyAyKVxuXG4gICAgLm11bHRpc2VsZWN0X19zcGlubmVyXG4gICAgICB3aWR0aDogJHNwaW5uZXItd2lkdGhcbiAgICAgICY6OmJlZm9yZSxcbiAgICAgICY6OmFmdGVyXG4gICAgICAgIC8vIENoYW5nZSB0aGUgd2lkdGggb2YgdGhlIGxvYWRpbmcgc3Bpbm5lclxuICAgICAgICBib3JkZXItd2lkdGg6IDNweFxuICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAkY29sb3ItYWN0aXZlXG4gICAgICAgIGluc2V0OiAwXG4gICAgICAgIG1hcmdpbjogYXV0b1xuXG4gICAgLm11bHRpc2VsZWN0X19vcHRpb25cbiAgICAgIG1pbi1oZWlnaHQ6IHVuc2V0XG4gICAgICBoZWlnaHQ6IHVuc2V0XG4gICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodFxuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAgICY6OmFmdGVyXG4gICAgICAgIC8vIEluc3RydWN0aW9uIHRleHQgZm9yIG9wdGlvbnNcbiAgICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAgICAgbGluZS1oZWlnaHQ6ICR0YWctbGluZS1oZWlnaHRcbiAgICAubXVsdGlzZWxlY3RfX29wdGlvbi0taGlnaGxpZ2h0XG4gICAgICAmOjphZnRlclxuICAgICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnRcbiAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uLS1kaXNhYmxlZFxuICAgICAgYmFja2dyb3VuZDogbm9uZVxuICAgICAgY29sb3I6ICRjb2xvci1kaXNhYmxlZFxuXG4gICAgLm11bHRpc2VsZWN0X190YWctaWNvblxuICAgICAgYmFja2dyb3VuZDogbm9uZVxuICAgICAgYm9yZGVyLXJhZGl1czogMWVtXG4gICAgICBmb250LXdlaWdodDogaW5oZXJpdFxuICAgICAgbGluZS1oZWlnaHQ6IDEuNGVtXG4gICAgICB3aWR0aDogJHRhZy1pY29uLXdpZHRoXG4gICAgICAmOjphZnRlclxuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWRcbiAgICAgICAgZm9udC1zaXplOiAxLjNlbVxuICAgICAgJjpob3Zlcjo6YWZ0ZXJcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0XG5cbiAgICAubXVsdGlzZWxlY3RfX29wdGlvbi0tc2VsZWN0ZWRcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHRcbiAgICAgIGNvbG9yOiAkY29sb3ItdGV4dFxuICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbFxuICAgICAgJi5tdWx0aXNlbGVjdF9fb3B0aW9uLS1oaWdobGlnaHRcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkXG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZyxcbiAgICAubXVsdGlzZWxlY3RfX29wdGlvbi0taGlnaGxpZ2h0XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWRcblxuICAgIC5tdWx0aXNlbGVjdF9fdGFncyxcbiAgICAubXVsdGlzZWxlY3RfX2NvbnRlbnQtd3JhcHBlclxuICAgICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuXG4gICAgJi5kaXRvLW11bHRpc2VsZWN0LXNpbmdsZVxuICAgICAgLS1pbnB1dC13aWR0aDogMTAwJVxuICAgICYuZGl0by1tdWx0aXNlbGVjdC1tdWx0aXBsZVxuICAgICAgLS1pbnB1dC13aWR0aDogYXV0b1xuXG4gICAgLm11bHRpc2VsZWN0LS1hY3RpdmVcbiAgICAgIC5tdWx0aXNlbGVjdF9fc2luZ2xlLFxuICAgICAgLm11bHRpc2VsZWN0X19pbnB1dFxuICAgICAgICAvLyBTYWRseSwgdnVlLXNlbGVjdCBzZXRzIGBzdHlsZT1cIndpZHRoXCJgIGluIGFkZGl0aW9uIHRvIHVzaW5nIGNsYXNzZXNcbiAgICAgICAgLy8gc28gYCFpbXBvcnRhbnRgIGlzIG5lY2Vzc2FyeTpcbiAgICAgICAgd2lkdGg6IHZhcigtLWlucHV0LXdpZHRoKSAhaW1wb3J0YW50XG5cbiAgICAgIC5tdWx0aXNlbGVjdF9fdGFnc1xuICAgICAgICBib3JkZXItY29sb3I6ICRjb2xvci1hY3RpdmVcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMFxuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMFxuXG4gICAgICAubXVsdGlzZWxlY3RfX2NvbnRlbnQtd3JhcHBlclxuICAgICAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgJGNvbG9yLWFjdGl2ZVxuICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAkYm9yZGVyLWNvbG9yXG4gICAgICAgIG1hcmdpbjogLTFweCAwIDBcbiAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMFxuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMFxuXG4gICAgICAmLm11bHRpc2VsZWN0LS1hYm92ZVxuICAgICAgICAubXVsdGlzZWxlY3RfX3RhZ3NcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDBcbiAgICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMFxuICAgICAgICAubXVsdGlzZWxlY3RfX2NvbnRlbnQtd3JhcHBlclxuICAgICAgICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItYWN0aXZlXG4gICAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJGJvcmRlci1jb2xvclxuICAgICAgICAgIG1hcmdpbjogMCAwIC0xcHhcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDBcbiAgICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMFxuXG4gICAgJi5kaXRvLWhhcy1lcnJvcnNcbiAgICAgIC5tdWx0aXNlbGVjdF9fdGFnc1xuICAgICAgICBib3JkZXItY29sb3I6ICRjb2xvci1lcnJvclxuXG4gICAgLmRpdG8tYnV0dG9uLWNsZWFyXG4gICAgICB3aWR0aDogJHNwaW5uZXItd2lkdGhcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuaW1wb3J0IFZ1ZU11bHRpc2VsZWN0IGZyb20gJ3Z1ZS1tdWx0aXNlbGVjdCdcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgJ3Z1ZS1tdWx0aXNlbGVjdC9kaXN0L3Z1ZS1tdWx0aXNlbGVjdC5taW4uY3NzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbXVsdGlzZWxlY3QnLCB7XG4gIGNvbXBvbmVudHM6IHsgVnVlTXVsdGlzZWxlY3QgfSxcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzZWFyY2hlZE9wdGlvbnM6IG51bGwsXG4gICAgICBwb3B1bGF0ZTogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzZWxlY3RlZE9wdGlvbnM6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGVcbiAgICAgICAgICA/ICh0aGlzLnNlbGVjdGVkVmFsdWUgfHwgW10pXG4gICAgICAgICAgICAubWFwKFxuICAgICAgICAgICAgICAvLyBJZiBhbiBvcHRpb24gY2Fubm90IGJlIGZvdW5kLCB3ZSBtYXkgYmUgaW4gdGFnZ2FibGUgbW9kZSBhbmRcbiAgICAgICAgICAgICAgLy8gY2FuIGFkZCBpdC5cbiAgICAgICAgICAgICAgdmFsdWUgPT4gdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSkgfHwgdGhpcy5hZGRUYWdPcHRpb24odmFsdWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IG9wdGlvbnMgdGhhdCB3ZSBjb3VsZG4ndCBtYXRjaC5cbiAgICAgICAgICAgIC8vIFRPRE86IFdlIHJlYWxseSBzaG91bGQgZGlzcGxheSBhbiBlcnJvciBpbnN0ZWFkXG4gICAgICAgICAgICAuZmlsdGVyKHZhbHVlID0+IHZhbHVlKVxuICAgICAgICAgIDogdGhpcy5zZWxlY3RlZE9wdGlvblxuICAgICAgfSxcblxuICAgICAgc2V0KG9wdGlvbikge1xuICAgICAgICAvLyBDb252ZXJ0IHZhbHVlIHRvIG9wdGlvbnMgb2JqZWN0LCBzaW5jZSB2dWUtbXVsdGlzZWxlY3QgY2FuJ3QgbWFwIHRoYXRcbiAgICAgICAgLy8gaXRzZWxmIHVuZm9ydHVuYXRlbHkuIGB0cmFjay1ieWAgaXMgdXNlZCBmb3IgOmtleSBtYXBwaW5nIGl0IHNlZW1zLlxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB0aGlzLm11bHRpcGxlXG4gICAgICAgICAgPyAob3B0aW9uIHx8IFtdKS5tYXAodmFsdWUgPT4gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbih2YWx1ZSkpXG4gICAgICAgICAgOiB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWN0aXZlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaGVkT3B0aW9ucyB8fCB0aGlzLm9wdGlvbnNcbiAgICB9LFxuXG4gICAgbXVsdGlwbGU6IGdldFNjaGVtYUFjY2Vzc29yKCdtdWx0aXBsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgc2VhcmNoYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3NlYXJjaGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHRhZ2dhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndGFnZ2FibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHN0YXlPcGVuOiBnZXRTY2hlbWFBY2Nlc3Nvcignc3RheU9wZW4nLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHBsYWNlaG9sZGVyKCkge1xuICAgICAgY29uc3QgeyBwbGFjZWhvbGRlciwgc2VhcmNoYWJsZSwgdGFnZ2FibGUgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gcGxhY2Vob2xkZXIgfHwgKFxuICAgICAgICBzZWFyY2hhYmxlICYmIHRhZ2dhYmxlID8gYFNlYXJjaCBvciBhZGQgYSAke3RoaXMubGFiZWx9YFxuICAgICAgICA6IHNlYXJjaGFibGUgPyBgU2VsZWN0IG9yIHNlYXJjaCAke3RoaXMubGFiZWx9YFxuICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIGlmICh0aGlzLmF1dG9mb2N1cykge1xuICAgICAgLy8gdnVlLW11bHRpc2VsZWN0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgYXV0b2ZvY3VzIGF0dHJpYnV0ZS4gV2UgbmVlZCB0b1xuICAgICAgLy8gaGFuZGxlIGl0IGhlcmUuXG4gICAgICB0aGlzLmZvY3VzKClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIEBvdmVycmlkZVxuICAgIGdldExpc3RlbmVycygpIHtcbiAgICAgIC8vIG92ZXJyaWRlIGBUeXBlTWl4aW4uZ2V0TGlzdGVuZXJzKClgIHRvIHJlLXJvdXRlICdpbnB1dCcgdG8gYG9uQ2hhbmdlKClgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICBibHVyOiB0aGlzLm9uQmx1cixcbiAgICAgICAgaW5wdXQ6IHRoaXMub25DaGFuZ2VcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWRkVGFnT3B0aW9uKHRhZykge1xuICAgICAgaWYgKHRoaXMudGFnZ2FibGUpIHtcbiAgICAgICAgY29uc3QgeyBvcHRpb25MYWJlbCwgb3B0aW9uVmFsdWUgfSA9IHRoaXNcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gb3B0aW9uTGFiZWwgJiYgb3B0aW9uVmFsdWVcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgIFtvcHRpb25MYWJlbF06IHRhZyxcbiAgICAgICAgICAgIC8vIFRPRE86IERlZmluZSBhIHNpbXBsZSBzY2hlbWEgb3B0aW9uIHRvIGNvbnZlcnQgdGhlIHRhZyB2YWx1ZSB0b1xuICAgICAgICAgICAgLy8gc29tZXRoaW5nIGVsc2UsIGUuZy4gYHRvVGFnOiB0YWcgPT4gdW5kZXJzY29yZSh0YWcpYFxuICAgICAgICAgICAgW29wdGlvblZhbHVlXTogdGFnXG4gICAgICAgICAgfVxuICAgICAgICAgIDogdGFnXG4gICAgICAgIHRoaXMub3B0aW9ucy5wdXNoKG9wdGlvbilcbiAgICAgICAgcmV0dXJuIG9wdGlvblxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRyZWZzLmVsZW1lbnQuYWN0aXZhdGUoKVxuICAgIH0sXG5cbiAgICBvbkFkZFRhZyh0YWcpIHtcbiAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuYWRkVGFnT3B0aW9uKHRhZylcbiAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgdGhpcy52YWx1ZS5wdXNoKHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgb25TZWFyY2hDaGFuZ2UocXVlcnkpIHtcbiAgICAgIGlmICh0aGlzLnNlYXJjaEZpbHRlcikge1xuICAgICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgICAvLyBTZXQgYHNlYXJjaGVkT3B0aW9uc2AgdG8gYW4gZW1wdHkgYXJyYXksIGJlZm9yZSBpdCB3aWxsIGJlXG4gICAgICAgICAgLy8gcG9wdWxhdGVkIGFzeW5jaHJvbm91c2x5IHdpdGggdGhlIGFjdHVhbCByZXN1bHRzLlxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gW11cbiAgICAgICAgICB0aGlzLnNlYXJjaGVkT3B0aW9ucyA9IGF3YWl0IHRoaXMucmVzb2x2ZURhdGEoXG4gICAgICAgICAgICAoKSA9PiB0aGlzLnNlYXJjaEZpbHRlcihuZXcgRGl0b0NvbnRleHQodGhpcywgeyBxdWVyeSB9KSlcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQ2xlYXIgYHNlYXJjaGVkT3B0aW9uc2Agd2hlbiB0aGUgcXVlcnkgaXMgY2xlYXJlZC5cbiAgICAgICAgICB0aGlzLnNlYXJjaGVkT3B0aW9ucyA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wdXRlZDoge1xuICAgIGlucHV0VmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgIT09IG51bGwgPyB0aGlzLnZhbHVlIDogJydcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWUgIT09ICcnXG4gICAgICAgICAgPyB0aGlzLmlzSW50ZWdlciA/IHBhcnNlSW50KHZhbHVlLCAxMCkgOiBwYXJzZUZsb2F0KHZhbHVlKVxuICAgICAgICAgIDogbnVsbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBpc0ludGVnZXIoKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgc3RlcFZhbHVlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RlcCA9PSBudWxsICYmICF0aGlzLmlzSW50ZWdlciA/ICdhbnknIDogdGhpcy5zdGVwXG4gICAgfSxcblxuICAgIGRlY2ltYWxzOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVjaW1hbHMnLCB7XG4gICAgICB0eXBlOiBOdW1iZXJcbiAgICB9KSxcblxuICAgIHN0ZXA6IGdldFNjaGVtYUFjY2Vzc29yKCdzdGVwJywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KHN0ZXApIHtcbiAgICAgICAgLy8gRm9yIGludGVnZXJzLCByb3VuZCB0aGUgc3RlcHMgdG8gdGhlIG5leHQgYmlnZ2VyIGludGVnZXIgdmFsdWU6XG4gICAgICAgIHJldHVybiB0aGlzLmlzSW50ZWdlciAmJiBzdGVwICE9IG51bGwgPyBNYXRoLmNlaWwoc3RlcCkgOiBzdGVwXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtaW46IGdldFNjaGVtYUFjY2Vzc29yKCdtaW4nLCB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBnZXQobWluKSB7XG4gICAgICAgIG1pbiA9IG1pbiA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdyYW5nZScsIHsgdHlwZTogQXJyYXkgfSk/LlswXVxuICAgICAgICAgIDogbWluXG4gICAgICAgIHJldHVybiB0aGlzLmlzSW50ZWdlciAmJiBtaW4gIT0gbnVsbCA/IE1hdGguZmxvb3IobWluKSA6IG1pblxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWF4OiBnZXRTY2hlbWFBY2Nlc3NvcignbWF4Jywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KG1heCkge1xuICAgICAgICBtYXggPSBtYXggPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgncmFuZ2UnLCB7IHR5cGU6IEFycmF5IH0pPy5bMV1cbiAgICAgICAgICA6IG1heFxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgbWF4ICE9IG51bGwgPyBNYXRoLmNlaWwobWF4KSA6IG1heFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgcmFuZ2U6IGdldFNjaGVtYUFjY2Vzc29yKCdyYW5nZScsIHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZ2V0KCkge1xuICAgICAgICAvLyBgdGhpcy5taW5gLCBgdGhpcy5tYXhgIGFscmVhZHkgc3VwcG9ydCBgc2NoZW1hLnJhbmdlYCxcbiAgICAgICAgLy8gc28gcmVkaXJlY3QgdGhlcmUuXG4gICAgICAgIGNvbnN0IHsgbWluLCBtYXggfSA9IHRoaXNcbiAgICAgICAgcmV0dXJuIG1pbiAhPSBudWxsICYmIG1heCAhPSBudWxsID8gW21pbiwgbWF4XSA6IHVuZGVmaW5lZFxuICAgICAgfSxcblxuICAgICAgc2V0KHJhbmdlKSB7XG4gICAgICAgIC8vIFByb3ZpZGUgYSBzZXR0ZXIgdGhhdCBkZWxlZ2F0ZXMgdG8gYFt0aGlzLm1pbiwgdGhpcy5tYXhdYCxcbiAgICAgICAgLy8gc2luY2UgdGhvc2UgYWxyZWFkeSBoYW5kbGUgYHNjaGVtYS5yYW5nZWAuXG4gICAgICAgIGlmIChpc0FycmF5KHJhbmdlKSkge1xuICAgICAgICAgIFt0aGlzLm1pbiwgdGhpcy5tYXhdID0gcmFuZ2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFZhbGlkYXRpb25zKCkge1xuICAgICAgY29uc3QgdmFsaWRhdGlvbnMgPSB7fVxuICAgICAgY29uc3QgeyByYW5nZSwgbWluLCBtYXgsIGRlY2ltYWxzLCBzdGVwIH0gPSB0aGlzXG4gICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMucmFuZ2UgPSByYW5nZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG1pbiAhPSBudWxsKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMubWluID0gbWluXG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heCAhPSBudWxsKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMubWF4ID0gbWF4XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChkZWNpbWFscyAhPSBudWxsKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLmRlY2ltYWxzID0gZGVjaW1hbHNcbiAgICAgIH0gZWxzZSBpZiAoc3RlcCkge1xuICAgICAgICBjb25zdCBkZWNpbWFscyA9IChgJHtzdGVwfWAuc3BsaXQoJy4nKVsxXSB8fCAnJykubGVuZ3RoXG4gICAgICAgIGlmIChkZWNpbWFscyA+IDApIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5kZWNpbWFscyA9IGRlY2ltYWxzXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMuaW50ZWdlciA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNJbnRlZ2VyKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLmludGVnZXIgPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsaWRhdGlvbnNcbiAgICB9XG4gIH1cbn1cbiIsIlxuaW5wdXQtZmllbGQuZGl0by1udW1iZXIoXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHR5cGU9XCJudW1iZXJcIlxuICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgOm1pbj1cIm1pblwiXG4gIDptYXg9XCJtYXhcIlxuICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBpbnB1dC1maWVsZC5kaXRvLW51bWJlcihcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdHlwZT1cIm51bWJlclwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDptaW49XCJtaW5cIlxuICAgIDptYXg9XCJtYXhcIlxuICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC8vIE9ubHkgc2hvdyBzcGluIGJ1dHRvbnMgaWYgdGhlIG51bWJlciBjb21wb25lbnQgZGVmaW5lcyBhIHN0ZXAgc2l6ZS5cbiAgaW5wdXRbdHlwZT1cIm51bWJlclwiXTpub3QoW3N0ZXBdKVxuICAgICY6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG4gICAgJjo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvblxuICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lXG4gICAgICBtYXJnaW46IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpJ1xuXG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFtcbiAgJ251bWJlcicsICdpbnRlZ2VyJ1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCB9LFxuICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpc0ludGVnZXIoKSB7XG4gICAgICByZXR1cm4gdGhpcy50eXBlID09PSAnaW50ZWdlcidcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tb2JqZWN0KFxuICB2LWlmPVwiaXNSZWFkeVwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwic2NoZW1hLmNsYXNzXCJcbiAgOnN0eWxlPVwic2NoZW1hLnN0eWxlXCJcbilcbiAgLmRpdG8tb2JqZWN0LWNvbnRlbnQoXG4gICAgdi1pZj1cIm9iamVjdERhdGFcIlxuICApXG4gICAgLy8gU3VwcG9ydCB0aGUgc2FtZSByZW5kZXJpbmcgb3B0aW9ucyBhcyBUeXBlTGlzdDpcbiAgICBkaXRvLXNjaGVtYS1pbmxpbmVkKFxuICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBvYmplY3REYXRhLCBjb250ZXh0KVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICApXG4gICAgY29tcG9uZW50KFxuICAgICAgdi1lbHNlLWlmPVwiY29tcG9uZW50XCJcbiAgICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICApXG4gICAgc3BhbihcbiAgICAgIHYtZWxzZS1pZj1cInJlbmRlclwiXG4gICAgICB2LWh0bWw9XCJyZW5kZXIoZ2V0Q29udGV4dCgpKVwiXG4gICAgKVxuICAgIHNwYW4oXG4gICAgICB2LWVsc2VcbiAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIG9iamVjdERhdGEpXCJcbiAgICApXG4gIGRpdG8tZWRpdC1idXR0b25zKFxuICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgIDpkZWxldGFibGU9XCJvYmplY3REYXRhICYmIGRlbGV0YWJsZVwiXG4gICAgOmVkaXRhYmxlPVwib2JqZWN0RGF0YSAmJiBlZGl0YWJsZVwiXG4gICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICA6ZWRpdFBhdGg9XCJwYXRoXCJcbiAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgIDpwYXRoPVwicGF0aFwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0ob2JqZWN0RGF0YSlcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1vYmplY3QoXG4gICAgdi1pZj1cImlzUmVhZHlcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICAgIDpzdHlsZT1cInNjaGVtYS5zdHlsZVwiXG4gIClcbiAgICAuZGl0by1vYmplY3QtY29udGVudChcbiAgICAgIHYtaWY9XCJvYmplY3REYXRhXCJcbiAgICApXG4gICAgICAvLyBTdXBwb3J0IHRoZSBzYW1lIHJlbmRlcmluZyBvcHRpb25zIGFzIFR5cGVMaXN0OlxuICAgICAgZGl0by1zY2hlbWEtaW5saW5lZChcbiAgICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIG9iamVjdERhdGEsIGNvbnRleHQpXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICApXG4gICAgICBjb21wb25lbnQoXG4gICAgICAgIHYtZWxzZS1pZj1cImNvbXBvbmVudFwiXG4gICAgICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgIClcbiAgICAgIHNwYW4oXG4gICAgICAgIHYtZWxzZS1pZj1cInJlbmRlclwiXG4gICAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KCkpXCJcbiAgICAgIClcbiAgICAgIHNwYW4oXG4gICAgICAgIHYtZWxzZVxuICAgICAgICB2LWh0bWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBvYmplY3REYXRhKVwiXG4gICAgICApXG4gICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICAgIDpkZWxldGFibGU9XCJvYmplY3REYXRhICYmIGRlbGV0YWJsZVwiXG4gICAgICA6ZWRpdGFibGU9XCJvYmplY3REYXRhICYmIGVkaXRhYmxlXCJcbiAgICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgICA6ZWRpdFBhdGg9XCJwYXRoXCJcbiAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICA6cGF0aD1cInBhdGhcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKG9iamVjdERhdGEpXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tb2JqZWN0XG4gICAgZGlzcGxheTogZmxleFxuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgbWFyZ2luOiAwXG4gICAgcGFkZGluZzogJGZvcm0tc3BhY2luZ1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAuZGl0by1vYmplY3QtY29udGVudFxuICAgICAgZmxleDogMCAxIDEwMCVcbiAgICA+IC5kaXRvLWJ1dHRvbnNcbiAgICAgIGZsZXg6IDEgMCAwJVxuICAgICAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ29iamVjdCcsIHtcbiAgbWl4aW5zOiBbU291cmNlTWl4aW5dLFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIC8vIE5vIG5lZWQgZm9yIHRyYW5zZm9ybWF0aW9uIGhlcmUuIFNlZSBUeXBlVHJlZUxpc3QgZm9yIGRldGFpbHMuXG4gICAgcmV0dXJuIHR5cGVcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBkYXRhOiB0aGlzLm9iamVjdERhdGEgfSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcigncGFuZWwnLCB7XG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBleGNsdWRlVmFsdWU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlLFxuICBvbWl0UGFkZGluZzogdHJ1ZSxcblxuICBnZXRQYW5lbFNjaGVtYShzY2hlbWEpIHtcbiAgICAvLyBGb3IgYSBUeXBlUGFuZWwsIHRoZSBjb21wb25lbnQgc2NoZW1hIGlzIGFsc28gdGhlIHBhbmVsIHNjaGVtYSwgYnV0XG4gICAgLy8gcmVtb3ZlIHRoZSBhZGRlZCBuYW1lLCBzbyBpdCBkb2Vzbid0IGdldCBhcHBlbmRlZCB0d2ljZSB0byBkYXRhLXBhdGguXG4gICAgY29uc3QgeyBuYW1lLCAuLi5wYW5lbCB9ID0gc2NoZW1hXG4gICAgcmV0dXJuIHBhbmVsXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxucHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOnZhbHVlPVwicHJvZ3Jlc3NWYWx1ZVwiXG4gIDptYXg9XCJwcm9ncmVzc01heFwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHByb2dyZXNzLmRpdG8tcHJvZ3Jlc3MoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDp2YWx1ZT1cInByb2dyZXNzVmFsdWVcIlxuICAgIDptYXg9XCJwcm9ncmVzc01heFwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3Byb2dyZXNzJywge1xuICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gIGNvbXB1dGVkOiB7XG4gICAgcHJvZ3Jlc3NWYWx1ZSgpIHtcbiAgICAgIGxldCB7IHZhbHVlLCByYW5nZSwgc3RlcCB9ID0gdGhpc1xuICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgIHZhbHVlIC09IHJhbmdlWzBdXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0ZXApIHtcbiAgICAgICAgICB2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUgLyBzdGVwKSAqIHN0ZXBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSAnJ1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcblxuICAgIHByb2dyZXNzTWF4KCkge1xuICAgICAgY29uc3QgeyByYW5nZSB9ID0gdGhpc1xuICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgIHJldHVybiByYW5nZVsxXSAtIHJhbmdlWzBdXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnVsLmRpdG8tcmFkaW8tYnV0dG9ucyhcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4pXG4gIGxpKHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIilcbiAgICBsYWJlbFxuICAgICAgaW5wdXQuZGl0by1yYWRpby1idXR0b24oXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICApXG4gICAgICB8IHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHVsLmRpdG8tcmFkaW8tYnV0dG9ucyhcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOmNsYXNzPVwiYGRpdG8tbGF5b3V0LSR7c2NoZW1hLmxheW91dCB8fCAndmVydGljYWwnfWBcIlxuICApXG4gICAgbGkodi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiKVxuICAgICAgbGFiZWxcbiAgICAgICAgaW5wdXQuZGl0by1yYWRpby1idXR0b24oXG4gICAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICAgIClcbiAgICAgICAgfCB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tcmFkaW8tYnV0dG9uc1xuICAgIGxhYmVsXG4gICAgICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzXG4gICAgLmRpdG8tcmFkaW8tYnV0dG9uXG4gICAgICBtYXJnaW4tcmlnaHQ6ICRmb3JtLXNwYWNpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcigncmFkaW8nLCB7XG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IHRydWVcbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tc2VjdGlvbihcbiAgOmNsYXNzPVwieyAnZGl0by1zZWN0aW9uLWxhYmVsbGVkJyA6ICEhc2NoZW1hLmxhYmVsIH1cIlxuKVxuICBkaXRvLXBhbmUuZGl0by1zZWN0aW9uLXBhbmUoXG4gICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cIml0ZW1cIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tc2VjdGlvbihcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNlY3Rpb24tbGFiZWxsZWQnIDogISFzY2hlbWEubGFiZWwgfVwiXG4gIClcbiAgICBkaXRvLXBhbmUuZGl0by1zZWN0aW9uLXBhbmUoXG4gICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tc2VjdGlvblxuICAgICYuZGl0by1zZWN0aW9uLWxhYmVsbGVkXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nXG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldEl0ZW1Gb3JtU2NoZW1hLCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NlY3Rpb24nLCB7XG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6IHNjaGVtYSA9PiAhc2NoZW1hLm5lc3RlZCAmJiAhKCdkZWZhdWx0JyBpbiBzY2hlbWEpLFxuICBkZWZhdWx0TmVzdGVkOiBmYWxzZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2UsXG4gIG9taXRGbGV4R3JvdzogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIGl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5uZXN0ZWQgPyB0aGlzLnZhbHVlIDogdGhpcy5kYXRhXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRJdGVtRm9ybVNjaGVtYVxuICB9LFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwpIHtcbiAgICAvLyBQcm9jZXNzIHNlY3Rpb24gY29tcG9uZW50cyBzbyB0aGVpciBmb3JtcyBnZXQgcmVzb2x2ZWQgdG9vLlxuICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgc2NoZW1hLCByb3V0ZXMsIGxldmVsKVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi8vLSBOZXN0aW5nIGlzIG5lZWRlZCB0byBtYWtlIGFuIGFycm93IGFwcGVhciBvdmVyIHRoZSBzZWxlY3QgaXRlbTpcbi5kaXRvLXNlbGVjdFxuICBzZWxlY3QoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHYtbW9kZWw9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICBAbW91c2Vkb3duPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgICBAZm9jdXM9XCJwb3B1bGF0ZSA9IHRydWVcIlxuICApXG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWlmPVwicG9wdWxhdGVcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCJcbiAgICAgIClcbiAgICAgICAgb3B0Z3JvdXAoXG4gICAgICAgICAgdi1pZj1cImdyb3VwQnlcIlxuICAgICAgICAgIDpsYWJlbD1cIm9wdGlvbltncm91cEJ5TGFiZWxdXCJcbiAgICAgICAgKVxuICAgICAgICAgIG9wdGlvbihcbiAgICAgICAgICAgIHYtZm9yPVwib3B0IGluIG9wdGlvbltncm91cEJ5T3B0aW9uc11cIlxuICAgICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0KVwiXG4gICAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHQpIH19XG4gICAgICAgIG9wdGlvbihcbiAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWVsc2UtaWY9XCJzZWxlY3RlZE9wdGlvblwiXG4gICAgKVxuICAgICAgb3B0aW9uKFxuICAgICAgICA6dmFsdWU9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24oc2VsZWN0ZWRPcHRpb24pIH19XG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgIEBjbGljaz1cImNsZWFyXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC8vLSBOZXN0aW5nIGlzIG5lZWRlZCB0byBtYWtlIGFuIGFycm93IGFwcGVhciBvdmVyIHRoZSBzZWxlY3QgaXRlbTpcbiAgLmRpdG8tc2VsZWN0XG4gICAgc2VsZWN0KFxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgQG1vdXNlZG93bj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgICBAZm9jdXM9XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWlmPVwicG9wdWxhdGVcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCJcbiAgICAgICAgKVxuICAgICAgICAgIG9wdGdyb3VwKFxuICAgICAgICAgICAgdi1pZj1cImdyb3VwQnlcIlxuICAgICAgICAgICAgOmxhYmVsPVwib3B0aW9uW2dyb3VwQnlMYWJlbF1cIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIG9wdGlvbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJvcHQgaW4gb3B0aW9uW2dyb3VwQnlPcHRpb25zXVwiXG4gICAgICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdClcIlxuICAgICAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHQpIH19XG4gICAgICAgICAgb3B0aW9uKFxuICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWVsc2UtaWY9XCJzZWxlY3RlZE9wdGlvblwiXG4gICAgICApXG4gICAgICAgIG9wdGlvbihcbiAgICAgICAgICA6dmFsdWU9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihzZWxlY3RlZE9wdGlvbikgfX1cbiAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgQGNsaWNrPVwiY2xlYXJcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAvLyBUT0RPOiBNb3ZlIHRvIGRpdG8tdWlcbiAgJHNlbGVjdC1hcnJvdy1yaWdodDogY2FsYygoJHNlbGVjdC1hcnJvdy13aWR0aCAtICRzZWxlY3QtYXJyb3ctc2l6ZSkgLyAyKVxuXG4gIC5kaXRvLXNlbGVjdFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuXG4gICAgc2VsZWN0XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAkc2VsZWN0LWFycm93LXdpZHRoXG5cbiAgICAvLyBIYW5kbGUgLmRpdG8td2lkdGgtZmlsbCBzZXBhcmF0ZWx5IGR1ZSB0byByZXF1aXJlZCBuZXN0aW5nIG9mIHNlbGVjdDpcbiAgICAmLmRpdG8td2lkdGgtZmlsbFxuICAgICAgc2VsZWN0XG4gICAgICAgIHdpZHRoOiAxMDAlXG5cbiAgICAmOjphZnRlclxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICArYXJyb3coJHNlbGVjdC1hcnJvdy1zaXplKVxuICAgICAgYm90dG9tOiAkc2VsZWN0LWFycm93LWJvdHRvbVxuICAgICAgcmlnaHQ6IGNhbGMoI3skc2VsZWN0LWFycm93LXJpZ2h0fSArICN7JGJvcmRlci13aWR0aH0pXG5cbiAgICAmLmRpdG8tZGlzYWJsZWQ6OmFmdGVyXG4gICAgICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3Jcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2VsZWN0Jywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIERpc2FibGUgbGF6eS1wb3B1bGF0aW9uIGZvciBub3cuXG4gICAgICAvLyBUT0RPOiBTZXQgdG8gYGZhbHNlYCBPbmNlIGxpbmV0byBlMmUgdGVzdHMgYWRkcmVzcyB0aGVpciBpc3N1ZXMuXG4gICAgICBwb3B1bGF0ZTogdHJ1ZVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1zbGlkZXJcbiAgaW5wdXQuZGl0by1yYW5nZShcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdHlwZT1cInJhbmdlXCJcbiAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOm1pbj1cIm1pblwiXG4gICAgOm1heD1cIm1heFwiXG4gICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICApXG4gIGlucHV0LWZpZWxkLmRpdG8tbnVtYmVyKFxuICAgIHYtaWY9XCJpbnB1dFwiXG4gICAgdHlwZT1cIm51bWJlclwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDptaW49XCJtaW5cIlxuICAgIDptYXg9XCJtYXhcIlxuICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tc2xpZGVyXG4gICAgaW5wdXQuZGl0by1yYW5nZShcbiAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgICAgdHlwZT1cInJhbmdlXCJcbiAgICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICA6bWluPVwibWluXCJcbiAgICAgIDptYXg9XCJtYXhcIlxuICAgICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICAgIClcbiAgICBpbnB1dC1maWVsZC5kaXRvLW51bWJlcihcbiAgICAgIHYtaWY9XCJpbnB1dFwiXG4gICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICA6bWluPVwibWluXCJcbiAgICAgIDptYXg9XCJtYXhcIlxuICAgICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1zbGlkZXJcbiAgICBAZXh0ZW5kICVpbnB1dFxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICAuZGl0by1yYW5nZVxuICAgICAgZmxleDogYXV0b1xuICAgICAgaGVpZ2h0OiBjYWxjKDFlbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSlcbiAgICAuZGl0by1udW1iZXJcbiAgICAgIGJvcmRlcjogMFxuICAgICAgcGFkZGluZzogMFxuICAgICAgdGV4dC1hbGlnbjogcmlnaHRcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXNcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBJbnB1dEZpZWxkIH0gZnJvbSAnQGRpdG9qcy91aSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NsaWRlcicsIHtcbiAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gIG1peGluczogW051bWJlck1peGluXSxcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYHNob3dJbnB1dGA/XG4gICAgaW5wdXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdpbnB1dCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5zd2l0Y2gtYnV0dG9uLmRpdG8tc3dpdGNoKFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6c3luYz1cInRydWVcIlxuICA6bGFiZWxzPVwibGFiZWxzXCJcbiAgdi1tb2RlbD1cInZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgc3dpdGNoLWJ1dHRvbi5kaXRvLXN3aXRjaChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOnN5bmM9XCJ0cnVlXCJcbiAgICA6bGFiZWxzPVwibGFiZWxzXCJcbiAgICB2LW1vZGVsPVwidmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tc3dpdGNoXG4gICAgLmRpdG8tc3dpdGNoLWxhYmVsXG4gICAgICBmb250LXNpemU6ICRmb250LXNpemUtc21hbGxcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgU3dpdGNoQnV0dG9uIH0gZnJvbSAnQGRpdG9qcy91aSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3N3aXRjaCcsIHtcbiAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgZGVmYXVsdFdpZHRoOiAnYXV0bycsXG5cbiAgY29tcG9uZW50czoge1xuICAgIFN3aXRjaEJ1dHRvblxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGFiZWxzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxhYmVsc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5pbnB1dC1maWVsZC5kaXRvLXRleHQoXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDp0eXBlPVwiaW5wdXRUeXBlXCJcbiAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBpbnB1dC1maWVsZC5kaXRvLXRleHQoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDp0eXBlPVwiaW5wdXRUeXBlXCJcbiAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgSW5wdXRGaWVsZCB9IGZyb20gJ0BkaXRvanMvdWknXG5cbmNvbnN0IG1hc2tlZFBhc3N3b3JkID0gJyoqKioqKioqKioqKioqKionXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAndGV4dCcsICdlbWFpbCcsICd1cmwnLCAnaG9zdG5hbWUnLCAnZG9tYWluJywgJ3RlbCcsICdwYXNzd29yZCcsICdjcmVkaXRjYXJkJ1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCB9LFxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgdGV4dEZpZWxkOiB0cnVlLFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6IHNjaGVtYSA9PiBzY2hlbWEudHlwZSA9PT0gJ3Bhc3N3b3JkJyxcblxuICBjb21wdXRlZDoge1xuICAgIGlucHV0VHlwZSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNyZWRpdGNhcmQ6ICd0ZXh0JyxcbiAgICAgICAgaG9zdG5hbWU6ICd0ZXh0JyxcbiAgICAgICAgZG9tYWluOiAndGV4dCdcbiAgICAgIH1bdGhpcy50eXBlXSB8fCB0aGlzLnR5cGVcbiAgICB9LFxuXG4gICAgaW5wdXRWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHRoaXMudHlwZSA9PT0gJ3Bhc3N3b3JkJyAmJlxuICAgICAgICAgIHRoaXMudmFsdWUgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICF0aGlzLmZvY3VzZWRcbiAgICAgICAgKVxuICAgICAgICAgID8gbWFza2VkUGFzc3dvcmRcbiAgICAgICAgICA6IHRoaXMudmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFZhbGlkYXRpb25zKCkge1xuICAgICAgY29uc3QgcnVsZSA9IHtcbiAgICAgICAgZW1haWw6ICdlbWFpbCcsXG4gICAgICAgIHVybDogJ3VybCcsXG4gICAgICAgIGhvc3RuYW1lOiAnaG9zdG5hbWUnLFxuICAgICAgICBkb21haW46ICdkb21haW4nLFxuICAgICAgICBwYXNzd29yZDogJ3Bhc3N3b3JkJyxcbiAgICAgICAgY3JlZGl0Y2FyZDogJ2NyZWRpdGNhcmQnXG4gICAgICB9W3RoaXMudHlwZV1cbiAgICAgIHJldHVybiBydWxlID8geyBbcnVsZV06IHRydWUgfSA6IHt9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnRleHRhcmVhLmRpdG8tdGV4dGFyZWEuZGl0by1pbnB1dChcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgdi1tb2RlbD1cInZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuICA6cm93cz1cImxpbmVzXCJcbiAgOmNsYXNzPVwieyAnZGl0by1yZXNpemFibGUnOiByZXNpemFibGUgfVwiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB0ZXh0YXJlYS5kaXRvLXRleHRhcmVhLmRpdG8taW5wdXQoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOnJvd3M9XCJsaW5lc1wiXG4gICAgOmNsYXNzPVwieyAnZGl0by1yZXNpemFibGUnOiByZXNpemFibGUgfVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by10ZXh0YXJlYVxuICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgcmVzaXplOiBub25lXG4gICAgbWluLWhlaWdodDogY2FsYygxZW0gKiB2YXIoLS1saW5lLWhlaWdodCkgKyAjeyAyICogJGlucHV0LXBhZGRpbmctdmVyIH0pXG4gICAgJi5kaXRvLXJlc2l6YWJsZVxuICAgICAgcmVzaXplOiB2ZXJ0aWNhbFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcigndGV4dGFyZWEnLCB7XG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5saW5lcyB8fCA0XG4gICAgfSxcblxuICAgIHJlc2l6YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Jlc2l6YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tdHJlZS1saXN0XG4gIGRpdG8tc2NvcGVzKFxuICAgIHYtaWY9XCJzY29wZXNcIlxuICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICA6c2NvcGVzPVwic2NvcGVzXCJcbiAgKVxuICAuZGl0by10cmVlLXBhbmVsXG4gICAgZGl0by10cmVlLWl0ZW0oXG4gICAgICA6c2NoZW1hPVwidHJlZVNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJ0cmVlRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJ0cmVlRGF0YVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgIDpvcGVuPVwidHJ1ZVwiXG4gICAgKVxuICAgIC5kaXRvLXRyZWUtZm9ybS1jb250YWluZXIoXG4gICAgICB2LWlmPVwiaGFzRWRpdGFibGVGb3Jtc1wiXG4gICAgKVxuICAgICAgLy8gSW5jbHVkZSBhIHJvdXRlci12aWV3IGZvciB0aGUgb3B0aW9uYWwgRGl0b0Zvcm1JbmxpbmVkXG4gICAgICByb3V0ZXItdmlld1xuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tdHJlZS1saXN0XG4gICAgZGl0by1zY29wZXMoXG4gICAgICB2LWlmPVwic2NvcGVzXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpzY29wZXM9XCJzY29wZXNcIlxuICAgIClcbiAgICAuZGl0by10cmVlLXBhbmVsXG4gICAgICBkaXRvLXRyZWUtaXRlbShcbiAgICAgICAgOnNjaGVtYT1cInRyZWVTY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJ0cmVlRGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cInRyZWVEYXRhXCJcbiAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgIDpvcGVuPVwidHJ1ZVwiXG4gICAgICApXG4gICAgICAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyKFxuICAgICAgICB2LWlmPVwiaGFzRWRpdGFibGVGb3Jtc1wiXG4gICAgICApXG4gICAgICAgIC8vIEluY2x1ZGUgYSByb3V0ZXItdmlldyBmb3IgdGhlIG9wdGlvbmFsIERpdG9Gb3JtSW5saW5lZFxuICAgICAgICByb3V0ZXItdmlld1xuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXRyZWUtbGlzdFxuICAgIEBleHRlbmQgJWZpZWxkXG4gICAgLmRpdG8tdHJlZS1wYW5lbFxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuXG4gICAgICA+IC5kaXRvLXRyZWUtaXRlbVxuICAgICAgICBmbGV4OiAxIDEgMjUlXG4gICAgICA+IC5kaXRvLXRyZWUtZm9ybS1jb250YWluZXJcbiAgICAgICAgZmxleDogMCAxIDc1JVxuICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoXG4gICAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmRcbiAgICAgICAgYm9yZGVyLWxlZnQ6ICRib3JkZXItc3R5bGVcbiAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gMVxuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXMgLSAxXG4gICAgICAgIG1hcmdpbjogKC0kaW5wdXQtcGFkZGluZy12ZXIpICgtJGlucHV0LXBhZGRpbmctaG9yKVxuICAgICAgICBtYXJnaW4tbGVmdDogJGlucHV0LXBhZGRpbmctaG9yXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBTb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvU291cmNlTWl4aW4uanMnXG5pbXBvcnQgeyBoYXNGb3JtU2NoZW1hLCBnZXRGb3JtU2NoZW1hcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcihbXG4gICd0cmVlLWxpc3QnLCAndHJlZS1vYmplY3QnXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgbWl4aW5zOiBbU291cmNlTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHsgY29udGFpbmVyOiB0aGlzIH1cbiAgfSxcblxuICBnZXRTb3VyY2VUeXBlKHR5cGUpIHtcbiAgICByZXR1cm4gdHlwZSA9PT0gJ3RyZWUtb2JqZWN0JyA/ICdvYmplY3QnIDogJ2xpc3QnXG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBwYXRoKCkge1xuICAgICAgLy8gQWNjZXNzZWQgZnJvbSBEaXRvVHJlZUl0ZW0gdGhyb3VnaCBgY29udGFpbmVyLnBhdGhgOlxuICAgICAgcmV0dXJuIHRoaXMuZm9ybUNvbXBvbmVudD8ucGF0aFxuICAgIH0sXG5cbiAgICBlZGl0UGF0aCgpIHtcbiAgICAgIC8vIEFjY2Vzc2VkIGZyb20gRGl0b1RyZWVJdGVtIHRocm91Z2ggYGNvbnRhaW5lci5lZGl0UGF0aGA6XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUucGF0aC5zbGljZSh0aGlzLnBhdGg/Lmxlbmd0aClcbiAgICB9LFxuXG4gICAgdHJlZURhdGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgPyB7IFt0aGlzLm5hbWVdOiB0aGlzLnZhbHVlIH1cbiAgICAgICAgOiB0aGlzLnZhbHVlXG4gICAgfSxcblxuICAgIHRyZWVEYXRhUGF0aCgpIHtcbiAgICAgIC8vIFJlbW92ZSBgbmFtZWAgZnJvbSBgZGF0YVBhdGhgLCBhcyBpdCBpcyBhZGRlZWRcbiAgICAgIC8vIHRvIGB0cmVlRGF0YWAgYW5kIGB0cmVlU2NoZW1hYFxuICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgID8gdGhpcy5kYXRhUGF0aC5zbGljZSgwLCB0aGlzLmRhdGFQYXRoLmxlbmd0aCAtIHRoaXMubmFtZS5sZW5ndGgpXG4gICAgICAgIDogdGhpcy5kYXRhUGF0aFxuICAgIH0sXG5cbiAgICB0cmVlU2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgID8ge1xuICAgICAgICAgIGNoaWxkcmVuOiB7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICAuLi50aGlzLnNjaGVtYVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA6IHRoaXMuc2NoZW1hXG4gICAgfSxcblxuICAgIGhhc0VkaXRhYmxlRm9ybXMoKSB7XG4gICAgICBjb25zdCBoYXNFZGl0YWJsZUZvcm1zID0gc2NoZW1hID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBoYXNGb3JtU2NoZW1hKHNjaGVtYSkgJiYgKFxuICAgICAgICAgICAgdGhpcy5nZXRTY2hlbWFWYWx1ZSgnZWRpdGFibGUnLCB7XG4gICAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgICAgICBzY2hlbWFcbiAgICAgICAgICAgIH0pIHx8XG4gICAgICAgICAgICBzY2hlbWEuY2hpbGRyZW4gJiZcbiAgICAgICAgICAgIGhhc0VkaXRhYmxlRm9ybXMoc2NoZW1hLmNoaWxkcmVuKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc0VkaXRhYmxlRm9ybXModGhpcy5zY2hlbWEpXG4gICAgfVxuICB9LFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwsXG4gICAgbmVzdGVkID0gdHJ1ZSwgZmxhdHRlbiA9IGZhbHNlLFxuICAgIHByb2Nlc3MgPSBudWxsXG4gICkge1xuICAgIHJldHVybiBTb3VyY2VNaXhpbi5wcm9jZXNzU2NoZW1hKFxuICAgICAgYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwsXG4gICAgICBuZXN0ZWQsIGZsYXR0ZW4sXG4gICAgICAvLyBQYXNzIHByb2Nlc3MoKSB0byBhZGQgbW9yZSByb3V0ZXMgdG8gY2hpbGRSb3V0ZXM6XG4gICAgICAoY2hpbGRSb3V0ZXMsIGxldmVsKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY2hpbGRyZW4gfSA9IHNjaGVtYVxuICAgICAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgICAgICAvLyBBZGQgYHR5cGVgIHRvIHRoZSBuZXN0ZWQgdHJlZSBsaXN0LlxuICAgICAgICAgIGNoaWxkcmVuLnR5cGUgPSAndHJlZS1saXN0J1xuICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NTY2hlbWEoXG4gICAgICAgICAgICBhcGksIGNoaWxkcmVuLCBjaGlsZHJlbi5uYW1lLCBjaGlsZFJvdXRlcywgbGV2ZWwsXG4gICAgICAgICAgICBuZXN0ZWQsIHRydWUsIC8vIFBhc3MgYHRydWVgIGZvciBgZmxhdHRlbmAgaW4gdHJlZSBsaXN0cy5cbiAgICAgICAgICAgIHByb2Nlc3NcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApXG4gIH0sXG5cbiAgZ2V0Rm9ybVNjaGVtYXNGb3JQcm9jZXNzaW5nKHNjaGVtYSwgY29udGV4dCkge1xuICAgIC8vIENvbnZlcnQgbmVzdGVkIGNoaWxkcmVuIHNjaGVtYSB0byBzdGFuZC1hbG9uZSBzY2hlbWEgY29tcG9uZW50LFxuICAgIC8vIHByZXNlbnQgaW4gZWFjaCBvZiB0aGUgZm9ybXMsIGFzIHJlcXVpcmVkIGJ5IGBwcm9jZXNzU2NoZW1hRGF0YSgpYFxuICAgIGNvbnN0IHsgY2hpbGRyZW4gfSA9IHNjaGVtYVxuICAgIHJldHVybiBnZXRGb3JtU2NoZW1hcyhzY2hlbWEsIGNvbnRleHQsIGNoaWxkcmVuXG4gICAgICA/IGZvcm0gPT4gKHtcbiAgICAgICAgLi4uZm9ybSxcbiAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgIC4uLmZvcm0uY29tcG9uZW50cyxcbiAgICAgICAgICBbY2hpbGRyZW4ubmFtZV06IGNoaWxkcmVuXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICA6IG51bGxcbiAgICApXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGZpbGVzaXplIH0gZnJvbSAnZmlsZXNpemUnXG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRGaWxlU2l6ZShzaXplKSB7XG4gIHJldHVybiBmaWxlc2l6ZShzaXplLCB7IGJhc2U6IDEwIH0pXG59XG4iLCJcbi5kaXRvLXVwbG9hZFxuICB0YWJsZS5kaXRvLXRhYmxlLmRpdG8tdGFibGUtc2VwYXJhdG9ycy5kaXRvLXRhYmxlLWJhY2tncm91bmRcbiAgICAvLy0gU3R5bGluZyBjb21lcyBmcm9tIERpdG9UYWJsZUhlYWRcbiAgICB0aGVhZC5kaXRvLXRhYmxlLWhlYWRcbiAgICAgIHRyXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhbiBOYW1lXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhbiBTaXplXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhbiBTdGF0dXNcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuXG4gICAgdnVlLWRyYWdnYWJsZShcbiAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGRyYWdnYWJsZSlcIlxuICAgICAgOmxpc3Q9XCJmaWxlc1wiXG4gICAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgICBAZW5kPVwib25FbmREcmFnXCJcbiAgICApXG4gICAgICB0cihcbiAgICAgICAgdi1mb3I9XCIoZmlsZSwgaW5kZXgpIGluIGZpbGVzXCJcbiAgICAgICAgOmtleT1cImZpbGUua2V5XCJcbiAgICAgIClcbiAgICAgICAgdGQodi1odG1sPVwicmVuZGVyRmlsZShmaWxlLCBpbmRleClcIilcbiAgICAgICAgdGQge3sgZmlsZS5zaXplIHwgZm9ybWF0RmlsZVNpemUgfX1cbiAgICAgICAgdGRcbiAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiZmlsZS51cGxvYWRcIilcbiAgICAgICAgICAgIHRlbXBsYXRlKHYtaWY9XCJmaWxlLnVwbG9hZC5lcnJvclwiKVxuICAgICAgICAgICAgICB8IEVycm9yOiB7eyBmaWxlLnVwbG9hZC5lcnJvciB9fVxuICAgICAgICAgICAgdGVtcGxhdGUodi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuYWN0aXZlXCIpXG4gICAgICAgICAgICAgIHwgVXBsb2FkaW5nLi4uXG4gICAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5zdWNjZXNzXCIpXG4gICAgICAgICAgICAgIHwgVXBsb2FkZWRcbiAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UpXG4gICAgICAgICAgICB8IFN0b3JlZFxuICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zXG4gICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gICAgICAgICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwiZGVsZXRlRmlsZShmaWxlLCBpbmRleClcIlxuICAgICAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgICAgICAgKVxuICAgIHRmb290XG4gICAgICB0clxuICAgICAgICB0ZCg6Y29sc3Bhbj1cIjRcIilcbiAgICAgICAgICAuZGl0by11cGxvYWQtZm9vdGVyXG4gICAgICAgICAgICBwcm9ncmVzcy5kaXRvLXByb2dyZXNzKFxuICAgICAgICAgICAgICB2LWlmPVwiaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgICAgICAgICA6dmFsdWU9XCJ1cGxvYWRQcm9ncmVzc1wiXG4gICAgICAgICAgICAgIG1heD1cIjEwMFwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD1cInVwbG9hZC5hY3RpdmUgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICkgQ2FuY2VsIEFsbFxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiaXNVcGxvYWRSZWFkeVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJ1cGxvYWQuYWN0aXZlID0gdHJ1ZVwiXG4gICAgICAgICAgICAgICkgVXBsb2FkIEFsbFxuICAgICAgICAgICAgICB2dWUtdXBsb2FkLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWFkZC11cGxvYWQoXG4gICAgICAgICAgICAgICAgOmlucHV0LWlkPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgICAgIDpuYW1lPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICA6cG9zdC1hY3Rpb249XCJ1cGxvYWRQYXRoXCJcbiAgICAgICAgICAgICAgICA6ZXh0ZW5zaW9ucz1cImV4dGVuc2lvbnNcIlxuICAgICAgICAgICAgICAgIDphY2NlcHQ9XCJhY2NlcHRcIlxuICAgICAgICAgICAgICAgIDptdWx0aXBsZT1cIm11bHRpcGxlXCJcbiAgICAgICAgICAgICAgICA6c2l6ZT1cIm1heFNpemVcIlxuICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJ1cGxvYWRzXCJcbiAgICAgICAgICAgICAgICBAaW5wdXQtZmlsdGVyPVwiaW5wdXRGaWx0ZXJcIlxuICAgICAgICAgICAgICAgIEBpbnB1dC1maWxlPVwiaW5wdXRGaWxlXCJcbiAgICAgICAgICAgICAgICByZWY9XCJ1cGxvYWRcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwiVXBsb2FkIEZpbGVzXCJcbiAgICAgICAgICAgICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tdXBsb2FkXG4gICAgdGFibGUuZGl0by10YWJsZS5kaXRvLXRhYmxlLXNlcGFyYXRvcnMuZGl0by10YWJsZS1iYWNrZ3JvdW5kXG4gICAgICAvLy0gU3R5bGluZyBjb21lcyBmcm9tIERpdG9UYWJsZUhlYWRcbiAgICAgIHRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICAgICAgICB0clxuICAgICAgICAgIHRoXG4gICAgICAgICAgICBzcGFuIE5hbWVcbiAgICAgICAgICB0aFxuICAgICAgICAgICAgc3BhbiBTaXplXG4gICAgICAgICAgdGhcbiAgICAgICAgICAgIHNwYW4gU3RhdHVzXG4gICAgICAgICAgdGhcbiAgICAgICAgICAgIHNwYW5cbiAgICAgIHZ1ZS1kcmFnZ2FibGUoXG4gICAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0RHJhZ09wdGlvbnMoZHJhZ2dhYmxlKVwiXG4gICAgICAgIDpsaXN0PVwiZmlsZXNcIlxuICAgICAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgICAgIEBlbmQ9XCJvbkVuZERyYWdcIlxuICAgICAgKVxuICAgICAgICB0cihcbiAgICAgICAgICB2LWZvcj1cIihmaWxlLCBpbmRleCkgaW4gZmlsZXNcIlxuICAgICAgICAgIDprZXk9XCJmaWxlLmtleVwiXG4gICAgICAgIClcbiAgICAgICAgICB0ZCh2LWh0bWw9XCJyZW5kZXJGaWxlKGZpbGUsIGluZGV4KVwiKVxuICAgICAgICAgIHRkIHt7IGZpbGUuc2l6ZSB8IGZvcm1hdEZpbGVTaXplIH19XG4gICAgICAgICAgdGRcbiAgICAgICAgICAgIHRlbXBsYXRlKHYtaWY9XCJmaWxlLnVwbG9hZFwiKVxuICAgICAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiZmlsZS51cGxvYWQuZXJyb3JcIilcbiAgICAgICAgICAgICAgICB8IEVycm9yOiB7eyBmaWxlLnVwbG9hZC5lcnJvciB9fVxuICAgICAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5hY3RpdmVcIilcbiAgICAgICAgICAgICAgICB8IFVwbG9hZGluZy4uLlxuICAgICAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5zdWNjZXNzXCIpXG4gICAgICAgICAgICAgICAgfCBVcGxvYWRlZFxuICAgICAgICAgICAgdGVtcGxhdGUodi1lbHNlKVxuICAgICAgICAgICAgICB8IFN0b3JlZFxuICAgICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnNcbiAgICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAgIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gICAgICAgICAgICAgIGEuZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIEBjbGljaz1cImRlbGV0ZUZpbGUoZmlsZSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgICAgICAgICApXG4gICAgICB0Zm9vdFxuICAgICAgICB0clxuICAgICAgICAgIHRkKDpjb2xzcGFuPVwiNFwiKVxuICAgICAgICAgICAgLmRpdG8tdXBsb2FkLWZvb3RlclxuICAgICAgICAgICAgICBwcm9ncmVzcy5kaXRvLXByb2dyZXNzKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgOnZhbHVlPVwidXBsb2FkUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICAgIG1heD1cIjEwMFwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgICB2LWlmPVwiaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD1cInVwbG9hZC5hY3RpdmUgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgKSBDYW5jZWwgQWxsXG4gICAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiaXNVcGxvYWRSZWFkeVwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwidXBsb2FkLmFjdGl2ZSA9IHRydWVcIlxuICAgICAgICAgICAgICAgICkgVXBsb2FkIEFsbFxuICAgICAgICAgICAgICAgIHZ1ZS11cGxvYWQuZGl0by1idXR0b24uZGl0by1idXR0b24tYWRkLXVwbG9hZChcbiAgICAgICAgICAgICAgICAgIDppbnB1dC1pZD1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgICAgIDpuYW1lPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgOnBvc3QtYWN0aW9uPVwidXBsb2FkUGF0aFwiXG4gICAgICAgICAgICAgICAgICA6ZXh0ZW5zaW9ucz1cImV4dGVuc2lvbnNcIlxuICAgICAgICAgICAgICAgICAgOmFjY2VwdD1cImFjY2VwdFwiXG4gICAgICAgICAgICAgICAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgICA6c2l6ZT1cIm1heFNpemVcIlxuICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cInVwbG9hZHNcIlxuICAgICAgICAgICAgICAgICAgQGlucHV0LWZpbHRlcj1cImlucHV0RmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgIEBpbnB1dC1maWxlPVwiaW5wdXRGaWxlXCJcbiAgICAgICAgICAgICAgICAgIHJlZj1cInVwbG9hZFwiXG4gICAgICAgICAgICAgICAgICB0aXRsZT1cIlVwbG9hZCBGaWxlc1wiXG4gICAgICAgICAgICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXVwbG9hZFxuICAgIC5kaXRvLXRhYmxlXG4gICAgICB0clxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlXG4gICAgLmRpdG8tYnV0dG9uLWFkZC11cGxvYWRcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAgID4gKlxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyXG4gICAgLmRpdG8tdXBsb2FkLWZvb3RlclxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZFxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlclxuICAgICAgLmRpdG8tcHJvZ3Jlc3NcbiAgICAgICAgZmxleDogYXV0b1xuICAgICAgICBtYXJnaW4tcmlnaHQ6ICRmb3JtLXNwYWNpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IE9yZGVyZWRNaXhpbiBmcm9tICcuLi9taXhpbnMvT3JkZXJlZE1peGluLmpzJ1xuaW1wb3J0IFZ1ZVVwbG9hZCBmcm9tICd2dWUtdXBsb2FkLWNvbXBvbmVudCdcbmltcG9ydCBWdWVEcmFnZ2FibGUgZnJvbSAndnVlZHJhZ2dhYmxlJ1xuaW1wb3J0IHBhcnNlRmlsZVNpemUgZnJvbSAnZmlsZXNpemUtcGFyc2VyJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGZvcm1hdEZpbGVTaXplIH0gZnJvbSAnLi4vdXRpbHMvdW5pdHMuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc0FycmF5LCBhc0FycmF5LCBlc2NhcGVIdG1sIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3VwbG9hZCcsIHtcbiAgY29tcG9uZW50czogeyBWdWVVcGxvYWQsIFZ1ZURyYWdnYWJsZSB9LFxuICBmaWx0ZXJzOiB7IGZvcm1hdEZpbGVTaXplIH0sXG4gIG1peGluczogW09yZGVyZWRNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdXBsb2FkczogW11cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB1cGxvYWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy51cGxvYWRcbiAgICB9LFxuXG4gICAgZmlsZXMoKSB7XG4gICAgICByZXR1cm4gYXNGaWxlcyh0aGlzLnZhbHVlKVxuICAgIH0sXG5cbiAgICBtdWx0aXBsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ211bHRpcGxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgLy8gTm8gY2FsbGJhY2sgYXMgaXQncyB1c2VkIGluIGBwcm9jZXNzVmFsdWUoKWBcbiAgICAgIGNhbGxiYWNrOiBmYWxzZVxuICAgIH0pLFxuXG4gICAgZXh0ZW5zaW9uczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2V4dGVuc2lvbnMnLCB7XG4gICAgICB0eXBlOiBbQXJyYXksIFN0cmluZywgUmVnRXhwXVxuICAgIH0pLFxuXG4gICAgYWNjZXB0OiBnZXRTY2hlbWFBY2Nlc3NvcignYWNjZXB0Jywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBnZXQoYWNjZXB0KSB7XG4gICAgICAgIHJldHVybiBpc0FycmF5KGFjY2VwdCkgPyBhY2NlcHQuam9pbignLCcpIDogYWNjZXB0XG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtYXhTaXplOiBnZXRTY2hlbWFBY2Nlc3NvcignbWF4U2l6ZScsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICBnZXQobWF4U2l6ZSkge1xuICAgICAgICByZXR1cm4gbWF4U2l6ZSA/IHBhcnNlRmlsZVNpemUobWF4U2l6ZSkgOiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRyYWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RyYWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkcmFnZ2FibGUpIHtcbiAgICAgICAgcmV0dXJuIGRyYWdnYWJsZSAmJiB0aGlzLmZpbGVzLmxlbmd0aCA+IDFcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgaXNVcGxvYWRSZWFkeSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwbG9hZHMubGVuZ3RoICYmXG4gICAgICAgICEodGhpcy51cGxvYWQuYWN0aXZlIHx8IHRoaXMudXBsb2FkLnVwbG9hZGVkKVxuICAgIH0sXG5cbiAgICBpc1VwbG9hZEFjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwbG9hZHMubGVuZ3RoICYmIHRoaXMudXBsb2FkLmFjdGl2ZVxuICAgIH0sXG5cbiAgICB1cGxvYWRQcm9ncmVzcygpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMudXBsb2Fkcy5yZWR1Y2UoKHRvdGFsLCBmaWxlKSA9PiB0b3RhbCArIGZpbGUucHJvZ3Jlc3MsIDApIC9cbiAgICAgICAgdGhpcy51cGxvYWRzLmxlbmd0aFxuICAgICAgKVxuICAgIH0sXG5cbiAgICB1cGxvYWRQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2VVcmwoe1xuICAgICAgICB0eXBlOiAndXBsb2FkJyxcbiAgICAgICAgcGF0aDogdGhpcy5hcGkubm9ybWFsaXplUGF0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgfSlcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlbmRlckZpbGUoZmlsZSwgaW5kZXgpIHtcbiAgICAgIGNvbnN0IHsgcmVuZGVyIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIHJlbmRlclxuICAgICAgICA/IHJlbmRlci5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgIHZhbHVlOiBmaWxlLFxuICAgICAgICAgICAgZGF0YTogdGhpcy5maWxlcyxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgZGF0YVBhdGg6IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGluZGV4KVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgOiBlc2NhcGVIdG1sKGZpbGUubmFtZSlcbiAgICB9LFxuXG4gICAgZGVsZXRlRmlsZShmaWxlLCBpbmRleCkge1xuICAgICAgY29uc3QgeyBuYW1lIH0gPSBmaWxlXG5cbiAgICAgIGlmIChmaWxlICYmIHdpbmRvdy5jb25maXJtKFxuICAgICAgICBgRG8geW91IHJlYWxseSB3YW50IHRvICR7dGhpcy52ZXJicy5yZW1vdmV9ICR7bmFtZX0/YClcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbGUudXBsb2FkKSB7XG4gICAgICAgICAgdGhpcy51cGxvYWQucmVtb3ZlKGZpbGUudXBsb2FkKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICAgIHRpdGxlOiAnU3VjY2Vzc2Z1bGx5IFJlbW92ZWQnLFxuICAgICAgICAgIHRleHQ6IGAke25hbWV9IHdhcyAke3RoaXMudmVyYnMuZGVsZXRlZH0uYFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRGaWxlSW5kZXgoZmlsZSkge1xuICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGUgJiYgdGhpcy52YWx1ZVxuICAgICAgICA/IHRoaXMudmFsdWUuZmluZEluZGV4KGl0ID0+IGl0LmlkID09PSBmaWxlLmlkKVxuICAgICAgICA6IC0xXG4gICAgfSxcblxuICAgIGFkZEZpbGUoZmlsZSkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlLnB1c2goZmlsZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gW2ZpbGVdXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBmaWxlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlcGxhY2VGaWxlKGZpbGUsIG5ld0ZpbGUpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRGaWxlSW5kZXgoZmlsZSlcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICBpZiAobmV3RmlsZSkge1xuICAgICAgICAgICAgdGhpcy4kc2V0KHRoaXMudmFsdWUsIGluZGV4LCBuZXdGaWxlKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXdGaWxlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlbW92ZUZpbGUoZmlsZSkge1xuICAgICAgdGhpcy5yZXBsYWNlRmlsZShmaWxlLCBudWxsKVxuICAgIH0sXG5cbiAgICBpbnB1dEZpbGUobmV3RmlsZSwgb2xkRmlsZSkge1xuICAgICAgaWYgKG5ld0ZpbGUgJiYgIW9sZEZpbGUpIHtcbiAgICAgICAgY29uc3QgeyBpZCwgbmFtZSwgc2l6ZSB9ID0gbmV3RmlsZVxuICAgICAgICB0aGlzLmFkZEZpbGUoeyBpZCwgbmFtZSwgc2l6ZSwgdXBsb2FkOiBuZXdGaWxlIH0pXG4gICAgICB9XG4gICAgICBpZiAobmV3RmlsZSAmJiBvbGRGaWxlKSB7XG4gICAgICAgIGNvbnN0IHsgc3VjY2VzcywgZXJyb3IgfSA9IG5ld0ZpbGVcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgICBjb25zdCBmaWxlID0gbmV3RmlsZS5yZXNwb25zZVswXVxuICAgICAgICAgIGlmIChmaWxlKSB7XG4gICAgICAgICAgICBmaWxlLnVwbG9hZCA9IG5ld0ZpbGVcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgdGhlIHVwbG9hZCBmaWxlIG9iamVjdCB3aXRoIHRoZSBmaWxlIG9iamVjdCByZWNlaXZlZFxuICAgICAgICAgICAgLy8gZnJvbSB0aGUgdXBsb2FkIHJlc3BvbnNlLlxuICAgICAgICAgICAgdGhpcy5yZXBsYWNlRmlsZShuZXdGaWxlLCBmaWxlKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUZpbGUobmV3RmlsZSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zdCB0ZXh0ID0ge1xuICAgICAgICAgICAgYWJvcnQ6ICdVcGxvYWQgYWJvcnRlZCcsXG4gICAgICAgICAgICBkZW5pZWQ6ICdVcGxvYWQgZGVuaWVkJyxcbiAgICAgICAgICAgIGV4dGVuc2lvbjogYFVuc3VwcG9ydGVkIGZpbGUtdHlwZTogJHtuZXdGaWxlLm5hbWV9YCxcbiAgICAgICAgICAgIG5ldHdvcms6ICdOZXR3b3JrIGVycm9yIGVuY291bnRlcmVkIGR1cmluZyB1cGxvYWQnLFxuICAgICAgICAgICAgc2VydmVyOiAnU2VydmVyIGVycm9yIG9jY3VycmVkIGR1cmluZyB1cGxvYWQnLFxuICAgICAgICAgICAgc2l6ZTogYEZpbGUgaXMgdG9vIGxhcmdlOiAke2Zvcm1hdEZpbGVTaXplKG5ld0ZpbGUuc2l6ZSl9YCxcbiAgICAgICAgICAgIHRpbWVvdXQ6ICdUaW1lb3V0IG9jY3VycmVkIGR1cmluZyB1cGxvYWQnXG5cbiAgICAgICAgICB9W2Vycm9yXSB8fCBgVW5rbm93biBGaWxlIFVwbG9hZCBFcnJvcjogJyR7ZXJyb3J9J2BcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgdGl0bGU6ICdGaWxlIFVwbG9hZCBFcnJvcicsXG4gICAgICAgICAgICB0ZXh0XG4gICAgICAgICAgfSlcbiAgICAgICAgICB0aGlzLnJlbW92ZUZpbGUobmV3RmlsZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBpbnB1dEZpbHRlcihuZXdGaWxlLyosIG9sZEZpbGUsIHByZXZlbnQgKi8pIHtcbiAgICAgIGNvbnN0IHhociA9IG5ld0ZpbGU/LnhoclxuICAgICAgaWYgKHRoaXMuYXBpLmNvcnM/LmNyZWRlbnRpYWxzICYmIHhociAmJiAheGhyLndpdGhDcmVkZW50aWFscykge1xuICAgICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSkge1xuICAgIC8vIEZpbHRlciBvdXQgYWxsIG5ld2x5IGFkZGVkIGZpbGVzIHRoYXQgd2VyZW4ndCBhY3R1YWxseSB1cGxvYWRlZC5cbiAgICBjb25zdCBmaWxlcyA9IGFzRmlsZXModmFsdWUpXG4gICAgICAubWFwKFxuICAgICAgICAoeyB1cGxvYWQsIC4uLmZpbGUgfSkgPT4gIXVwbG9hZCB8fCB1cGxvYWQuc3VjY2VzcyA/IGZpbGUgOiBudWxsXG4gICAgICApXG4gICAgICAuZmlsdGVyKGZpbGUgPT4gZmlsZSlcbiAgICByZXR1cm4gc2NoZW1hLm11bHRpcGxlID8gZmlsZXMgOiBmaWxlc1swXSB8fCBudWxsXG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGFzRmlsZXModmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID8gYXNBcnJheSh2YWx1ZSkgOiBbXVxufVxuXG48L3NjcmlwdD5cbiIsImNvbnN0IGxvZ2dlZERlcHJlY2F0aW9ucyA9IG5ldyBTZXQoKVxuXG5leHBvcnQgZnVuY3Rpb24gZGVwcmVjYXRlKG1lc3NhZ2UpIHtcbiAgLy8gT25seSBsb2cgZGVwcmVjYXRpb24gbWVzc2FnZXMgb25jZS5cbiAgaWYgKCFsb2dnZWREZXByZWNhdGlvbnMuaGFzKG1lc3NhZ2UpKSB7XG4gICAgbG9nZ2VkRGVwcmVjYXRpb25zLmFkZChtZXNzYWdlKVxuICAgIGNvbnNvbGUud2FybihtZXNzYWdlKVxuICB9XG59XG4iLCJleHBvcnQgZGVmYXVsdCBbXG4gICdjcmVhdGUnLCAnY3JlYXRlZCcsXG4gICdzYXZlJywgJ3NhdmVkJyxcbiAgJ3N1Ym1pdCcsICdzdWJtaXR0ZWQnLFxuICAnZGVsZXRlJywgJ2RlbGV0ZWQnLFxuICAnZWRpdCcsICdlZGl0ZWQnLFxuICAnY2xvc2UnLCAnY2xvc2VkJyxcbiAgJ2NhbmNlbCcsICdjYW5jZWxsZWQnLFxuICAnZHJhZycsICdkcmFnZ2VkJ1xuXS5yZWR1Y2UoKHZlcmJzLCB2ZXJiKSA9PiB7XG4gIHZlcmJzW3ZlcmJdID0gdmVyYlxuICByZXR1cm4gdmVyYnNcbn0sIHt9KVxuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQgVnVlTW9kYWwgZnJvbSAndnVlLWpzLW1vZGFsJ1xuaW1wb3J0IFZ1ZVJvdXRlciBmcm9tICd2dWUtcm91dGVyJ1xuaW1wb3J0IFZ1ZU5vdGlmaWNhdGlvbnMgZnJvbSAndnVlLW5vdGlmaWNhdGlvbidcbmltcG9ydCB7XG4gIGlzU3RyaW5nLCBpc0Fic29sdXRlVXJsLCBtZXJnZSwgaHlwaGVuYXRlLCBjYW1lbGl6ZSwgZGVmYXVsdEZvcm1hdHNcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCAqIGFzIGNvbXBvbmVudHMgZnJvbSAnLi9jb21wb25lbnRzL2luZGV4LmpzJ1xuaW1wb3J0ICogYXMgdHlwZXMgZnJvbSAnLi90eXBlcy9pbmRleC5qcydcbmltcG9ydCBEaXRvUm9vdCBmcm9tICcuL2NvbXBvbmVudHMvRGl0b1Jvb3QudnVlJ1xuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UgfSBmcm9tICcuL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgZGVwcmVjYXRlIH0gZnJvbSAnLi91dGlscy9kZXByZWNhdGUuanMnXG5pbXBvcnQgdmVyYnMgZnJvbSAnLi92ZXJicy5qcydcblxuVnVlLmNvbmZpZy5wcm9kdWN0aW9uVGlwID0gZmFsc2VcblxuLy8gQWxsIGdsb2JhbCBwbHVnaW5zIHRoYXQgbmVlZCB0byBiZSByZWdpc3RlcmVkIG9uIGBWdWVgOlxuVnVlLnVzZShWdWVSb3V0ZXIpXG5WdWUudXNlKFZ1ZU1vZGFsLCB7IGR5bmFtaWM6IHRydWUgfSlcblZ1ZS51c2UoVnVlTm90aWZpY2F0aW9ucylcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b0FkbWluIHtcbiAgY29uc3RydWN0b3IoZWwsIHtcbiAgICAvLyBgZGl0b2AgY29udGFpbnMgdGhlIGJhc2UgYW5kIGFwaSBzZXR0aW5ncyBwYXNzZWQgZnJvbSBgQWRtaW5Db250cm9sbGVyYFxuICAgIGRpdG8gPSB7fSxcbiAgICBhcGksXG4gICAgdmlld3MgPSB7fSxcbiAgICAuLi5vcHRpb25zXG4gIH0gPSB7fSkge1xuICAgIHRoaXMuZWwgPSBlbFxuICAgIC8vIE1lcmdlIGluIGBhcGlgIHNldHRpbmdzIGFzIHBhc3NlZCBmcm9tIGBjb25maWcuYWRtaW5gIGFuZCB0aHJvdWdoIHRoZVxuICAgIC8vIGBBZG1pbkNvbnRyb2xsZXJgIHdpdGggYGFwaWAgdmFsdWVzIGZyb20gZnJvbSAnYWRtaW4vaW5kZXguanMnXG4gICAgLy8gTk9URTogYEFkbWluQ29udHJvbGxlcmAgcHJvdmlkZXMgYGRpdG8uYXBpLmJhc2VgXG4gICAgdGhpcy5hcGkgPSBhcGkgPSBtZXJnZSh7IGJhc2U6ICcvJyB9LCBkaXRvLmFwaSwgYXBpKVxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNcblxuICAgIC8vIFNldHVwIGRlZmF1bHQgYXBpIHNldHR0aW5nczpcbiAgICBhcGkubG9jYWxlIHx8PSAnZW4tVVMnXG4gICAgYXBpLmZvcm1hdHMgPSBtZXJnZSh7fSwgZGVmYXVsdEZvcm1hdHMsIGFwaS5mb3JtYXRzKVxuICAgIGFwaS5yZXF1ZXN0IHx8PSBvcHRpb25zID0+IHJlcXVlc3QoYXBpLCBvcHRpb25zKVxuICAgIGFwaS5nZXRBcGlVcmwgfHw9IG9wdGlvbnMgPT4gZ2V0QXBpVXJsKGFwaSwgb3B0aW9ucylcbiAgICBhcGkuaXNBcGlVcmwgfHw9IHVybCA9PiBpc0FwaVVybChhcGksIHVybClcbiAgICAvLyBTZXR0aW5nIGBhcGkubm9ybWFsaXplUGF0aHMgPSB0cnVlIChwbHVyYWwpIHNldHMgYm90aDpcbiAgICAvLyBgYXBpLm5vcm1hbGl6ZVBhdGggPSBoeXBoZW5hdGVgIGFuZCBgYXBpLmRlbm9ybWFsaXplUGF0aCA9IGNhbWVsaXplYFxuICAgIGFwaS5ub3JtYWxpemVQYXRoIHx8PSBhcGkubm9ybWFsaXplUGF0aHMgPyBoeXBoZW5hdGUgOiB2YWwgPT4gdmFsXG4gICAgYXBpLmRlbm9ybWFsaXplUGF0aCB8fD0gYXBpLm5vcm1hbGl6ZVBhdGhzID8gY2FtZWxpemUgOiB2YWwgPT4gdmFsXG5cbiAgICAvLyBBbGxvdyB0aGUgY29uZmlndXJhdGlvbiBvZiBhbGwgYXV0aCByZXNvdXJjZXMsIGxpa2Ugc286XG4gICAgLy8gYXBpLnVzZXJzID0ge1xuICAgIC8vICAgcGF0aDogJy9hZG1pbnMnLFxuICAgIC8vICAgLy8gVGhlc2UgYXJlIHRoZSBkZWZhdWx0czpcbiAgICAvLyAgIGxvZ2luOiB7XG4gICAgLy8gICAgIHBhdGg6ICdsb2dpbicsXG4gICAgLy8gICAgIG1ldGhvZDogJ3Bvc3QnXG4gICAgLy8gICB9LFxuICAgIC8vICAgbG9nb3V0OiB7XG4gICAgLy8gICAgIHBhdGg6ICdsb2dvdXQnLFxuICAgIC8vICAgICBtZXRob2Q6ICdwb3N0J1xuICAgIC8vICAgfSxcbiAgICAvLyAgIHNlc3Npb246IHtcbiAgICAvLyAgICAgcGF0aDogJ3Nlc3Npb24nLFxuICAgIC8vICAgICBtZXRob2Q6ICdnZXQnXG4gICAgLy8gICB9XG4gICAgLy8gfVxuICAgIGNvbnN0IHVzZXJzID0gYXBpLnVzZXJzID0gZ2V0UmVzb3VyY2UoYXBpLnVzZXJzLCB7XG4gICAgICB0eXBlOiAnY29sbGVjdGlvbidcbiAgICB9KSB8fCB7fVxuICAgIHVzZXJzLmxvZ2luID0gZ2V0UmVzb3VyY2UodXNlcnMubG9naW4gfHwgJ2xvZ2luJywge1xuICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICBwYXJlbnQ6IHVzZXJzXG4gICAgfSlcbiAgICB1c2Vycy5sb2dvdXQgPSBnZXRSZXNvdXJjZSh1c2Vycy5sb2dvdXQgfHwgJ2xvZ291dCcsIHtcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG4gICAgdXNlcnMuc2Vzc2lvbiA9IGdldFJlc291cmNlKHVzZXJzLnNlc3Npb24gfHwgJ3Nlc3Npb24nLCB7XG4gICAgICBtZXRob2Q6ICdnZXQnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG5cbiAgICAvLyBBbGxvdyBvdmVycmlkaW5nIG9mIHJlc291cmNlIHBhdGggaGFuZGxlcnM6XG4gICAgLy8gYXBpLnJlc291cmNlcyA9IHtcbiAgICAvLyAgIGNvbGxlY3Rpb24ocmVzb3VyY2UpIHtcbiAgICAvLyAgICAgcmV0dXJuIHJlc291cmNlLnBhcmVudFxuICAgIC8vICAgICAgID8gYCR7cmVzb3VyY2UucGF0aH0/JHtyZXNvdXJjZS5wYXJlbnQucGF0aH1faWQ9JHtcbiAgICAvLyAgICAgICAgICByZXNvdXJjZS5wYXJlbnQuaWR9YFxuICAgIC8vICAgICAgIDogcmVzb3VyY2UucGF0aFxuICAgIC8vICAgfVxuICAgIC8vIH1cblxuICAgIGFwaS5yZXNvdXJjZXMgPSB7XG4gICAgICBhbnkocmVzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXNbcmVzb3VyY2U/LnR5cGVdIHx8IHRoaXMuZGVmYXVsdFxuICAgICAgICByZXR1cm4gcmVzb3VyY2UgJiYgaGFuZGxlci5jYWxsKHRoaXMsIHJlc291cmNlKVxuICAgICAgfSxcblxuICAgICAgZGVmYXVsdChyZXNvdXJjZSkge1xuICAgICAgICBjb25zdCBwYXJlbnRQYXRoID0gdGhpcy5hbnkocmVzb3VyY2UucGFyZW50KVxuICAgICAgICByZXR1cm4gcGFyZW50UGF0aFxuICAgICAgICAgID8gYCR7cGFyZW50UGF0aH0vJHtyZXNvdXJjZS5wYXRofWBcbiAgICAgICAgICA6IHJlc291cmNlLnBhdGhcbiAgICAgIH0sXG5cbiAgICAgIGNvbGxlY3Rpb24ocmVzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdChyZXNvdXJjZSlcbiAgICAgIH0sXG5cbiAgICAgIG1lbWJlcihyZXNvdXJjZSkge1xuICAgICAgICAvLyBOT1RFOiBXZSBhc3N1bWUgdGhhdCBhbGwgbWVtYmVycyBoYXZlIHJvb3QtbGV2ZWwgY29sbGVjdGlvbiByb3V0ZXMsXG4gICAgICAgIC8vIHRvIGF2b2lkIGV4Y2Vzc2l2ZSBuZXN0aW5nIG9mIChzdWItKWNvbGxlY3Rpb24gcm91dGVzLlxuICAgICAgICByZXR1cm4gYCR7cmVzb3VyY2UucGF0aH0vJHtyZXNvdXJjZS5pZH1gXG4gICAgICB9LFxuXG4gICAgICB1cGxvYWQocmVzb3VyY2UpIHtcbiAgICAgICAgLy8gRGl0byBTZXJ2ZXIgaGFuZGxlcyB1cGxvYWQgcm91dGVzIG9uIHRoZSBjb2xsZWN0aW9uIHJlc291cmNlOlxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb2xsZWN0aW9uKHJlc291cmNlLnBhcmVudCl9L3VwbG9hZC8ke3Jlc291cmNlLnBhdGh9YFxuICAgICAgfSxcblxuICAgICAgLi4uYXBpLnJlc291cmNlc1xuICAgIH1cblxuICAgIC8vIEFsbG93IG92ZXJyaWRpbmcgLyBleHRlbmRpbmcgb2YgaGVhZGVyczpcbiAgICAvLyBhcGkuaGVhZGVycyA9IHtcbiAgICAvLyAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAvLyB9XG4gICAgYXBpLmhlYWRlcnMgPSB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgLi4uYXBpLmhlYWRlcnNcbiAgICB9XG5cbiAgICBpZiAoaXNTdHJpbmcoZWwpKSB7XG4gICAgICBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWwpXG4gICAgfVxuXG4gICAgdGhpcy5yb290ID0gbmV3IFZ1ZSh7XG4gICAgICBlbCxcbiAgICAgIHJvdXRlcjogbmV3IFZ1ZVJvdXRlcih7XG4gICAgICAgIG1vZGU6ICdoaXN0b3J5JyxcbiAgICAgICAgYmFzZTogZGl0by5iYXNlLFxuICAgICAgICBsaW5rQWN0aXZlQ2xhc3M6ICcnLFxuICAgICAgICBsaW5rRXhhY3RBY3RpdmVDbGFzczogJydcbiAgICAgIH0pLFxuICAgICAgY29tcG9uZW50czogeyBEaXRvUm9vdCB9LFxuICAgICAgLy8gTW9zdCBpbmplY3RzIGFyZSBkZWZpbmVkIGFzIGZ1bmN0aW9ucywgdG8gcHJlc2VydmUgcmVhY3RpdmVuZXNzIGFjcm9zc1xuICAgICAgLy8gcHJvdmlkZS9pbmplY3QsIHNlZTpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUvaXNzdWVzLzcwMTcjaXNzdWVjb21tZW50LTQ4MDkwNjY5MVxuICAgICAgcHJvdmlkZToge1xuICAgICAgICBhcGksXG4gICAgICAgIC8vIEEgZGVmYXVsdCBsaXN0IG9mIHZlcmJzIGFyZSBwcm92aWRlZCBieSAkdmVyYnMoKSBhbmQgY2FuIGJlXG4gICAgICAgIC8vIG92ZXJyaWRkZW4gYXQgYW55IHBvaW50IGluIHRoZSBjb21wb25lbnQgaGllcmFyY2h5LlxuICAgICAgICAkdmVyYnM6ICgpID0+IHZlcmJzLFxuICAgICAgICAvLyBQcm92aWRlIGRlZmF1bHRzIHNvIERpdG9NaXhpbiBjYW4gaW5qZWN0IHRoZW0gZm9yIGFsbCBjb21wb25lbnRzOlxuICAgICAgICAvLyAgIGluamVjdDogWyAgJyRpc1BvcHVsYXRlZCcsICckc2NoZW1hQ29tcG9uZW50JywgJyRyb3V0ZUNvbXBvbmVudCcgXVxuICAgICAgICAkdmlld3M6ICgpID0+IHt9LFxuICAgICAgICAkaXNQb3B1bGF0ZWQ6ICgpID0+IHRydWUsXG4gICAgICAgICRzY2hlbWFDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRzY2hlbWFQYXJlbnRDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRyb3V0ZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJGRhdGFDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRzb3VyY2VDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJGRpYWxvZ0NvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHBhbmVsQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiBudWxsXG4gICAgICB9LFxuXG4gICAgICByZW5kZXI6IGNyZWF0ZUVsZW1lbnQgPT4gY3JlYXRlRWxlbWVudChEaXRvUm9vdCwge1xuICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgcm9vdCBjb250YWluZXIncyBpZCwgYXMgcmVxdWlyZWQgYnkgaG90LXJlbG9hZGluZzpcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBpZDogZWwuaWRcbiAgICAgICAgfSxcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICB1bnJlc29sdmVkVmlld3M6IHZpZXdzLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgfSxcbiAgICAgICAgLy8gVGhpcyBtYXkgb25seSBiZSBuZWVkZWQgdG8gYXZvaWQgdHJlZS1zaGFja2luZyBvZiB0aGVzZSBjb21wb25lbnRzLFxuICAgICAgICAvLyBzaW5jZSB0aGV5IGFjdHVhbGx5IGhhbmRsZSByZWdpc3RyeSBpbnRlcm5hbGx5IGFscmVhZHkuXG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAuLi5jb21wb25lbnRzLFxuICAgICAgICAgIC4uLnR5cGVzXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHJlZ2lzdGVyKHR5cGUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gVHlwZUNvbXBvbmVudC5yZWdpc3Rlcih0eXBlLCBvcHRpb25zKVxuICB9XG59XG5cbmNsYXNzIFJlcXVlc3RFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IocmVzcG9uc2UpIHtcbiAgICBzdXBlcihgUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZTogJHtyZXNwb25zZS5zdGF0dXN9ICgke3Jlc3BvbnNlLnN0YXR1c1RleHR9KWApXG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVxdWVzdChhcGksIHtcbiAgdXJsLFxuICBtZXRob2QgPSAnZ2V0JyxcbiAgLy8gVE9ETzogYHJlcXVlc3QucGFyYW1zYCB3YXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBgcXVlcnlgIG9uIDIwMjItMTEtMDEsXG4gIC8vIHJlbW92ZSBvbmNlIG5vdCBpbiB1c2UgYW55d2hlcmUgYW55bW9yZS5cbiAgcGFyYW1zID0gbnVsbCxcbiAgcXVlcnkgPSBwYXJhbXMgfHwgbnVsbCxcbiAgaGVhZGVycyA9IG51bGwsXG4gIGRhdGEgPSBudWxsXG59KSB7XG4gIGlmIChwYXJhbXMpIHtcbiAgICBkZXByZWNhdGUoYHJlcXVlc3QucGFyYW1zIGlzIGRlcHJlY2F0ZWQuIFVzZSBhY3Rpb24ubWV0aG9kIGFuZCBhY3Rpb24ucGF0aCBpbnN0ZWFkLmApXG4gIH1cblxuICBjb25zdCBpc0FwaVVybCA9IGFwaS5pc0FwaVVybCh1cmwpXG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChhcGkuZ2V0QXBpVXJsKHsgdXJsLCBxdWVyeSB9KSwge1xuICAgIG1ldGhvZDogbWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgLi4uKGRhdGEgJiYgeyBib2R5OiBKU09OLnN0cmluZ2lmeShkYXRhKSB9KSxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAuLi4oaXNBcGlVcmwgJiYgYXBpLmhlYWRlcnMpLFxuICAgICAgLi4uaGVhZGVyc1xuICAgIH0sXG4gICAgY3JlZGVudGlhbHM6IGlzQXBpVXJsICYmIGFwaS5jb3JzPy5jcmVkZW50aWFsc1xuICAgICAgPyAnaW5jbHVkZSdcbiAgICAgIDogJ3NhbWUtb3JpZ2luJ1xuICB9KVxuXG4gIGlmIChyZXNwb25zZS5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJyk/LmluY2x1ZGVzKCdhcHBsaWNhdGlvbi9qc29uJykpIHtcbiAgICByZXNwb25zZS5kYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG4gIH1cblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IFJlcXVlc3RFcnJvcihyZXNwb25zZSlcbiAgfVxuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxuZnVuY3Rpb24gZ2V0QXBpVXJsKGFwaSwgeyB1cmwsIHF1ZXJ5IH0pIHtcbiAgaWYgKCFpc0Fic29sdXRlVXJsKHVybCkpIHtcbiAgICAvLyBVc2Ugc2FtZSBhcHByb2FjaCBhcyBheGlvcyBgY29tYmluZVVSTHMoKWAgdG8gam9pbiBiYXNlVVJMIHdpdGggcGF0aDpcbiAgICB1cmwgPSBgJHthcGkudXJsLnJlcGxhY2UoL1xcLyskLywgJycpfS8ke3VybC5yZXBsYWNlKC9eXFwvKy8sICcnKX1gXG4gIH1cbiAgLy8gU3VwcG9ydCBvcHRpb25hbCBxdWVyeSBwYXJhbWV0ZXJzLCB0byBiZSBhcmUgYWRkZWQgdG8gdGhlIFVSTC5cbiAgY29uc3Qgc2VhcmNoID0gcXVlcnkgJiYgbmV3IFVSTFNlYXJjaFBhcmFtcyhxdWVyeSkudG9TdHJpbmcoKVxuICByZXR1cm4gc2VhcmNoID8gYCR7dXJsfT8ke3NlYXJjaH1gIDogdXJsXG59XG5cbmZ1bmN0aW9uIGlzQXBpVXJsKGFwaSwgdXJsKSB7XG4gIHJldHVybiAhaXNBYnNvbHV0ZVVybCh1cmwpIHx8IHVybC5zdGFydHNXaXRoKGFwaS51cmwpXG59XG4iXSwibmFtZXMiOlsiYXBwU3RhdGUiLCJhcHBlbmREYXRhUGF0aCIsImRhdGFQYXRoIiwidG9rZW4iLCJwYXJzZVBhcmVudERhdGFQYXRoIiwicGF0aCIsInBhcnNlRGF0YVBhdGgiLCJwYXJzZUl0ZW1EYXRhUGF0aCIsIm5lc3RlZCIsImdldEl0ZW1EYXRhUGF0aCIsIm5vcm1hbGl6ZURhdGFQYXRoIiwicGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgiLCJpc0ludGVnZXIiLCJnZXRQYXJlbnRJdGVtRGF0YVBhdGgiLCJnZXRJdGVtIiwicm9vdEl0ZW0iLCJnZXRWYWx1ZUF0RGF0YVBhdGgiLCJnZXRQYXJlbnRJdGVtIiwiZ2V0TGFzdERhdGFQYXRoVG9rZW4iLCJnZXRMYXN0RGF0YVBhdGhOYW1lIiwiZ2V0TGFzdERhdGFQYXRoSW5kZXgiLCJpbmRleCIsInRlbXBvcmFyeUlkIiwic2V0VGVtcG9yYXJ5SWQiLCJkYXRhIiwiaWRLZXkiLCJpc1RlbXBvcmFyeUlkIiwiaWQiLCJpc1JlZmVyZW5jZSIsImNvbnRleHRzIiwiZ2V0IiwiY29udGV4dCIsImtleSIsImRlZmF1bHRWYWx1ZSIsIm9iamVjdCIsInZhbHVlIiwiaXNGdW5jdGlvbiIsInNldCIsIkRpdG9Db250ZXh0IiwiY29tcG9uZW50IiwiX2EiLCJwYXJlbnRJdGVtIiwib3B0aW9ucyIsImxvY2F0aW9uIiwicmVzb3VyY2UiLCJFbWl0dGVyTWl4aW4iLCJldmVudCIsImNhbGxiYWNrIiwiaXNBcnJheSIsImV2IiwiaXNQbGFpbk9iamVjdCIsImV2ZW50cyIsImNhbGxiYWNrcyIsIm9uIiwiYXJncyIsImVudHJ5IiwiY2IiLCJxdWV1ZSIsInJlc29sdmUiLCJuZXh0IiwicmVzdWx0IiwicmVzIiwiZXJyb3IiLCJ0YXJnZXQiLCJ0eXBlQ2hlY2tlcnMiLCJpc0Jvb2xlYW4iLCJpc051bWJlciIsImlzU3RyaW5nIiwiaXNEYXRlIiwiaXNPYmplY3QiLCJpc1JlZ0V4cCIsInRvQm9vbGVhbiIsInRvTnVtYmVyIiwidG9TdHJpbmciLCJ0b0RhdGUiLCJ0b0FycmF5IiwiYXNBcnJheSIsInRvT2JqZWN0IiwidG9SZWdFeHAiLCJ0eXBlQ29udmVydGVycyIsImlzTWF0Y2hpbmdUeXBlIiwidHlwZXMiLCJ0eXBlIiwiY29udmVydFR5cGUiLCJjb252ZXJ0ZXIiLCJoYXNSZXNvdXJjZSIsInNjaGVtYSIsImdldFJlc291cmNlIiwiZGVmYXVsdHMiLCJwYXJlbnQiLCJkZWZzIiwiZ2V0TWVtYmVyUmVzb3VyY2UiLCJwaWNrQnkiLCJEaXRvTWl4aW4iLCJ1aWQiLCJrZXlPckRhdGFQYXRoIiwiZGVmIiwiY29udmVydGVkIiwibmFtZSIsImxhYmVsaXplIiwiYnV0dG9uIiwidmVyYiIsImRyYWdnYWJsZSIsImZhbGxiYWNrIiwicXVlcnkiLCJjb21wb25lbnRzIiwiYnV0dG9ucyIsInNldHRpbmdzIiwicmVqZWN0IiwiRGl0b0NvbXBvbmVudCIsInVybCIsIm1ldGhvZCIsImludGVybmFsIiwiY2hlY2tVc2VyIiwicmVzcG9uc2UiLCJlcXVhbHMiLCJjYWNoZSIsImNhY2hlUGFyZW50IiwibG9hZENhY2hlIiwiY2FjaGVLZXkiLCJsb2NhbGUiLCJmb3JtYXQiLCJhIiwiYm9keSIsImFjY2Vzc29yIiwid2F0Y2giLCJoYW5kbGVycyIsImV4cHIiLCJhZGRFdmVudCIsImh5cGhlbmF0ZSIsImhhc0xpc3RlbmVycyIsInBhcmVudEhhc0xpc3RlbmVycyIsImdldENvbnRleHQiLCJwYXJhbXMiLCJjcmVkaXRjYXJkIiwiaXNDcmVkaXRDYXJkIiwiZGVjaW1hbHMiLCJtYXRjaCIsImVtYWlsIiwiaXNFbWFpbCIsImhvc3RuYW1lIiwiaXNIb3N0bmFtZSIsImRvbWFpbiIsImlzRG9tYWluIiwiaW50ZWdlciIsIm1heCIsIm1pbiIsInBhc3N3b3JkIiwicmFuZ2UiLCJyZXF1aXJlZCIsImlzVXJsIiwiVmFsaWRhdGlvbk1peGluIiwibm90aWZ5IiwiaXNWYWxpZCIsInJ1bGUiLCJzZXR0aW5nIiwidmFsaWRhdG9yIiwidmFsaWRhdGlvbnMiLCJ2YWxpZGF0ZSIsIm1lc3NhZ2UiLCJhZGRMYWJlbCIsImVycm9ycyIsImZvY3VzIiwiZ2V0U2NoZW1hQWNjZXNzb3IiLCJnZXRTdG9yZUFjY2Vzc29yIiwidWlkTWFwIiwiZ2V0VWlkIiwiaXRlbUlkIiwiU2NoZW1hR3JhcGgiLCJfX3B1YmxpY0ZpZWxkIiwic3ViR3JhcGgiLCJwYXJ0IiwicmVsYXRlZERhdGFQYXRoIiwiX2IiLCJuYW5vaWQiLCJmbGF0dGVuIiwiZ3JhcGgiLCJlbnRyaWVzIiwiJHNldHRpbmdzIiwic3ViS2V5Iiwic291cmNlU2NoZW1hIiwiY2xpcGJvYXJkIiwicmVsYXRlZCIsInJlZmVyZW5jZSIsInNvdXJjZSIsInJlbGF0aW9uIiwidmFsdWVzIiwicmVtb3ZlSWQiLCJyZWZlcmVuY2VJZCIsInJlZktleSIsInJldlZhbHVlIiwidHlwZUNvbXBvbmVudHMiLCJ1bmtub3duVHlwZVJlcG9ydGVkIiwicmVnaXN0ZXJUeXBlQ29tcG9uZW50IiwiZ2V0VHlwZUNvbXBvbmVudCIsImFsbG93TnVsbCIsImZvckVhY2hTY2hlbWEiLCJzY2hlbWFzIiwiZm9yRWFjaFNjaGVtYUNvbXBvbmVudCIsInNvbWVTY2hlbWFDb21wb25lbnQiLCJyZXNvbHZlU2NoZW1hIiwidW53cmFwTW9kdWxlIiwiaXNQcm9taXNlIiwiaXNNb2R1bGUiLCJrZXlzIiwicmVzb2x2ZVNjaGVtYXMiLCJ1bnJlc29sdmVkU2NoZW1hcyIsInJlc29sdmVJdGVtIiwiaXRlbSIsInJlc29sdmVQYW5lbHMiLCJwYW5lbHMiLCJwcm9jZXNzVmlldyIsImFwaSIsInJvdXRlcyIsImNoaWxkcmVuIiwicHJvY2Vzc1JvdXRlU2NoZW1hIiwiaXNTaW5nbGVDb21wb25lbnRWaWV3IiwicHJvY2Vzc0NvbXBvbmVudCIsInByb2Nlc3NTY2hlbWFDb21wb25lbnRzIiwibGV2ZWwiLCJnZXRUeXBlT3B0aW9ucyIsInByb21pc2VzIiwicHJvY2Vzc0Zvcm1zIiwiZm9ybSIsImZvcm1zIiwicmVzb2x2ZUZvcm0iLCJoYXNGb3JtU2NoZW1hIiwiaGFzTXVsdGlwbGVGb3JtU2NoZW1hcyIsImdldFZpZXdTY2hlbWEiLCJ2aWV3Iiwidmlld1NjaGVtYSIsInZpZXdDb21wb25lbnQiLCJnZXRWaWV3RWRpdFBhdGgiLCJnZXRGb3JtU2NoZW1hcyIsIm1vZGlmeUZvcm0iLCJjb21wYWN0IiwiZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMiLCJnZXRJdGVtRm9ybVNjaGVtYSIsImhhc0xhYmVsIiwiaXNDb21wYWN0IiwiaXNJbmxpbmVkIiwiaXNOZXN0ZWQiLCJzaG91bGRPbWl0UGFkZGluZyIsImdldERlZmF1bHRWYWx1ZSIsImNsb25lIiwiaWdub3JlTWlzc2luZ1ZhbHVlIiwidHlwZU9wdGlvbnMiLCJoYXNMYWJlbHMiLCJjaGVja0NvbXBvbmVudHMiLCJzZXREZWZhdWx0cyIsInByb2Nlc3NTY2hlbWFEYXRhIiwiY29tcHV0ZVZhbHVlIiwicm9vdERhdGEiLCJjb21wdXRlIiwiVnVlIiwiY2xvbmVJdGVtIiwiY29weSIsIm9yZGVyS2V5IiwicHJvY2Vzc0RhdGEiLCJzY2hlbWFPbmx5IiwicHJvY2Vzc2VkRGF0YSIsIndyYXBQcmltaXRpdmVzIiwiYiIsImlkMSIsImlkMiIsImV4Y2x1ZGUiLCJwcm9jZXNzIiwicHJvY2Vzc1ZhbHVlIiwicHJvY2Vzc0JlZm9yZSIsInByb2Nlc3NBZnRlciIsInByb2Nlc3NDb21wb25lbnRzIiwiZ2V0RGF0YVBhdGgiLCJjb21wb25lbnRTY2hlbWEiLCJjb21wb25lbnREYXRhUGF0aCIsInByb2Nlc3NJdGVtIiwicHJvY2Vzc2VkSXRlbSIsInRhYiIsInBhbmVsIiwiZ2V0QWxsUGFuZWxTY2hlbWFzIiwiZ2V0TmFtZWRTY2hlbWFzIiwiZGVzY3JpcHRpb25zIiwiYXJyYXkiLCJ0b1NjaGVtYSIsImNhbWVsaXplIiwiZ2V0QnV0dG9uU2NoZW1hcyIsImdldFR5cGUiLCJzY2hlbWFPclR5cGUiLCJnZXRTb3VyY2VUeXBlIiwiX2MiLCJnZXRQYW5lbFNjaGVtYSIsInRhYkNvbXBvbmVudCIsImdldFBhbmVsU2NoZW1hcyIsInNjaGVtYUNvbXBvbmVudCIsImlzT2JqZWN0U291cmNlIiwiaXNMaXN0U291cmNlIiwiZ2V0SXRlbUlkIiwiZ2V0SXRlbVVpZCIsIlR5cGVNaXhpbiIsInBhcnNlIiwibGFiZWwiLCJuYXRpdmVGaWVsZCIsInRleHRGaWVsZCIsImF0dHJpYnV0ZXMiLCJsaXN0ZW5lcnMiLCJhZGQiLCJlbGVtZW50IiwibWl4aW5zIiwiY29tcCIsImN0b3IiLCJEaXRvVXNlciIsInJvbGVzIiwicm9sZSIsIlNjaGVtYVBhcmVudE1peGluIiwic2NoZW1hQ29tcG9uZW50cyIsIlZhbGlkYXRvck1peGluIiwiaXQiLCJSb3V0ZU1peGluIiwidG8iLCJmcm9tIiwibWF0Y2hlZCIsImkiLCJyZWNvcmQiLCJicmVhZGNydW1iIiwicm91dGVDb21wb25lbnRzIiwib2siLCJ0ZW1wbGF0ZVBhdGgiLCJyb290UGF0aCIsImdldENvbW1vblByZWZpeCIsInJlbmRlciIsIl92bSIsIl9oIiwic3RhdGljUmVuZGVyRm5zIiwiX192dWUyX3NjcmlwdCIsImlzTG9hZGluZyIsIkRvbU1peGluIiwicmVtb3ZlIiwiaGFuZGxlciIsImFkZEV2ZW50cyIsIiRldmVudCIsImVyciIsInRpdGxlIiwidGV4dCIsImxvZyIsInN0cmlwVGFncyIsIm5vdGlmaWNhdGlvbnMiLCJkdXJhdGlvbkZhY3RvciIsImR1cmF0aW9uIiwiYWRkaXRpb25hbENvbXBvbmVudHMiLCJyZWRpcmVjdEFmdGVyTG9naW4iLCJsb2dpbkRhdGEiLCJ1c2VyIiwiRGl0b1ZpZXciLCJyb3V0ZSIsIlNwaW5uZXIiLCJQdWxzZUxvYWRlciIsInNpemUiLCJjb2xvciIsInByb3BzIiwiUHVsbGRvd25NaXhpbiIsInN0YXJ0VGltZSIsIm9wZW4iLCJkaWFsb2dEYXRhIiwiY29udGVudCIsImFzT2JqZWN0IiwicHJlZml4Iiwic3VmZml4IiwiSXRlbU1peGluIiwiZXh0ZW5kZWQiLCJpdGVtTGFiZWwiLCJmb3JtTGFiZWwiLCJnZXRGb3JtTGFiZWwiLCJjb2x1bW5zIiwiaGFkTGFiZWwiLCJUcmFuc2l0aW9uSGVpZ2h0IiwicGFuZSIsImN1cnJlbnRUYWIiLCJmaXJzdCIsImRlZmF1bHRUYWIiLCJkYXRhUGF0aE9yTmFtZSIsImV4cGFuZCIsImNvbXBvbmVudHNCeURhdGFQYXRoIiwiZGF0YVBhdGhzIiwiY2hlY2siLCJmaWVsZCIsInVubWF0Y2hlZCIsImVycnMiLCJmdWxsRGF0YVBhdGgiLCJkYXRhUGF0aFBhcnRzIiwiZm91bmQiLCJwcm9wZXJ0eSIsInN1YkNvbXBvbmVudHMiLCJyZWdpc3RyeSIsImVudHJpZXNCeURhdGFQYXRoIiwiX3JlZiIsIm5lc3RlZERhdGFQYXRoIiwic3RvcmUiLCJwYXJzZUZyYWN0aW9uIiwiZGl2aWRlbmQiLCJkaXZpc29yIiwid2lkdGgiLCJkaXNhYmxlZCIsImNvbnRhaW5lckNsYXNzIiwiYmFzaXMiLCJncm93Iiwic2hyaW5rIiwiYmFzaXNJc0F1dG8iLCJ0YWJTY2hlbWEiLCJidXR0b25TY2hlbWEiLCJidXR0b25EYXRhUGF0aCIsIm5vZGUiLCJjYXBpdGFsaXplIiwiY2xpcGJvYXJkRGF0YSIsInBhc3RlIiwicmVwb3J0IiwianNvbiIsIl9kIiwiZGVpbmRlbnQiLCIkc2NoZW1hIiwiX2UiLCJMb2FkaW5nTWl4aW4iLCJ1cGRhdGVSb290IiwidXBkYXRlVmlldyIsIlJlc291cmNlTWl4aW4iLCJhbW91bnQiLCJwYWdlIiwic3RhcnQiLCJ2ZXJicyIsImNsZWFyIiwibG9hZGluZ09wdGlvbnMiLCJyZXF1ZXN0Iiwic2V0RGF0YSIsIm9uU3VjY2VzcyIsIm9uRXJyb3IiLCJub3RpZnlTdWNjZXNzIiwibm90aWZ5RXJyb3IiLCJpc0NyZWF0aW5nIiwicHJvdmlkZXNEYXRhIiwibWVyZ2UiLCJkYXRhUGFydHMiLCJwYXRoUGFydHMiLCJyb3V0ZVBhcnRzIiwibGFzdERhdGFQYXJ0IiwibCIsImRhdGFQYXJ0IiwibWFpblNjaGVtYUNvbXBvbmVudCIsIm5ld1ZhbHVlIiwib2xkVmFsdWUiLCJwcmVzZW50IiwiY2xvc2VGb3JtIiwiZ2V0VmVyYiIsImJ1dHR0b25SZXNvdXJjZSIsInN1Y2Nlc3MiLCJfcmVzb3VyY2UiLCJfbWV0aG9kIiwiRGl0b0Zvcm0iLCJzY29wZSIsIm5hdmlnYXRlIiwiUGFnaW5hdGlvbiIsIk9yZGVyZWRNaXhpbiIsIm9sZEluZGV4IiwibmV3SW5kZXgiLCJsaXN0IiwicGFnaW5hdGlvblJhbmdlIiwib2Zmc2V0IiwiVnVlRHJhZ2dhYmxlIiwiY2hpbGRyZW5TY2hlbWEiLCJlZGl0UGF0aCIsImNoaWxkcmVuT3BlbiIsIm51bUNoaWxkcmVuIiwiY3JlYXRhYmxlIiwiZWRpdGFibGUiLCJjb2x1bW4iLCJvcmRlciIsImVzY2FwZUh0bWwiLCJoIiwiVHlwZUNvbXBvbmVudCIsImRlZmluaXRpb24iLCIkJGEiLCIkJGVsIiwiJCRjIiwiJCR2IiwiJCRpIiwiRGF0YU1peGluIiwicmVzb2x2ZUNvdW50ZXIiLCJhc3luY0VudHJ5IiwicmVzb2x2ZWREYXRhIiwibG9hZCIsIk9wdGlvbnNNaXhpbiIsImNvbnZlcnRWYWx1ZSIsImNvbnZlcnQiLCJzZWFyY2giLCJmaWx0ZXIiLCJkZWJvdW5jZSIsImRlYm91bmNlQXN5bmMiLCJvcHRpb24iLCJncm91cGVkIiwicmVzdWx0cyIsImdyb3VwIiwiZmluZE9wdGlvbiIsImdyb3VwQnkiLCJvcHRpb25WYWx1ZSIsIm9wdGlvbkxhYmVsIiwicHJvY2Vzc1JlbGF0ZSIsImZsYXNrIiwiQ29kZUZsYXNrIiwiY2hhbmdlZCIsImlnbm9yZVdhdGNoIiwiaWdub3JlVXBkYXRlIiwib25DaGFuZ2UiLCJvbkZvY3VzIiwib25CbHVyIiwic2V0Q29kZSIsImNvZGUiLCJzZXRWYWx1ZSIsIlRyaWdnZXIiLCJTa2V0Y2hQaWNrZXIiLCJ0aW55Y29sb3IiLCJmb2N1c2VkIiwiRGF0ZVBpY2tlciIsIlRpbWVQaWNrZXIiLCJEYXRlVGltZVBpY2tlciIsIlNvdXJjZU1peGluIiwiZGVmYXVsdFNvcnQiLCJkaXJlY3Rpb24iLCJjb2xsYXBzaWJsZSIsImxpc3REYXRhIiwibGVuZ3RoIiwib25Db21wbGV0ZSIsIm9wZW5lZCIsImNhbGxPbkNvbXBsZXRlIiwicm91dGVDb21wb25lbnQiLCJpbmxpbmVkIiwicGFyYW0iLCJtZXRhIiwiZm9ybU1ldGEiLCJjaGlsZFJvdXRlcyIsImdldFBhdGhXaXRoUGFyYW0iLCJzb3VyY2VQYXRoIiwiZm9ybVJvdXRlIiwiZmxhdFJvdXRlcyIsInN1YlJvdXRlcyIsImNoaWxkUm91dGUiLCJmaWx0ZXJDb21wb25lbnRzIiwiZGF0ZUZvcm1hdCIsImdldEZpbHRlcnNQYW5lbCIsImZpbHRlcnMiLCJwcm94eSIsInBhcnNlRmlsdGVyc0RhdGEiLCJnZXRGaWx0ZXJzQ29tcG9uZW50cyIsImZvcm1hdEZpbHRlcnNEYXRhIiwiY29tcHMiLCJnZXRDb21wb25lbnRzRm9yRmlsdGVyIiwiZmlsdGVyc0RhdGEiLCJnZXRMaXN0Q29tcG9uZW50Iiwib2JqIiwiZmlsdGVyc0RhdGFQYXRoIiwiaWNvbiIsImlzQWN0aXZlIiwib25DbGljayIsIkVkaXRvckNvbnRlbnQiLCJFZGl0b3JNZW51QmFyIiwiSWNvbiIsImNvbW1hbmQiLCJtYXJrQnV0dG9ucyIsImJhc2ljTm9kZUJ1dHRvbnMiLCJvdGhlck5vZGVCdXR0b25zIiwidG9vbEJ1dHRvbnMiLCJlbmFibGVSdWxlcyIsInNldFZhbHVlRGVib3VuY2VkIiwiZ2V0VmFsdWUiLCJvblVwZGF0ZSIsImdldEhUTUwiLCJFZGl0b3IiLCJnZXRQb2ludCIsIngiLCJ5IiwicHJldlkiLCJoZWlnaHQiLCJtb3VzZW1vdmUiLCJhdHRycyIsImRpYWxvZ0NvbXBvbmVudCIsImhyZWYiLCJtYXJrcyIsIm5vZGVzIiwidG9vbHMiLCJCb2xkIiwiSXRhbGljIiwiVW5kZXJsaW5lIiwiU3RyaWtlIiwiU21hbGwiLCJDb2RlIiwiTGlua1dpdGhUaXRsZSIsIkJsb2NrcXVvdGUiLCJDb2RlQmxvY2siLCJIYXJkQnJlYWsiLCJIZWFkaW5nIiwiSG9yaXpvbnRhbFJ1bGUiLCJMaXN0SXRlbSIsIkJ1bGxldExpc3QiLCJPcmRlcmVkTGlzdCIsIkhpc3RvcnkiLCJleHRlbnNpb24iLCJzZXR0aW5nc05hbWUiLCJhZGRCdXR0b24iLCJpZ25vcmVBY3RpdmUiLCJkZXNjcmlwdGlvbiIsInNldHRpbmdOYW1lIiwidW5kZXJzY29yZSIsImF0dHIiLCJNYXJrIiwidG9nZ2xlTWFyayIsIkxpbmsiLCJkb20iLCJWdWVNdWx0aXNlbGVjdCIsInBsYWNlaG9sZGVyIiwic2VhcmNoYWJsZSIsInRhZ2dhYmxlIiwidGFnIiwiTnVtYmVyTWl4aW4iLCJzdGVwIiwiSW5wdXRGaWVsZCIsIiQkc2VsZWN0ZWRWYWwiLCJvIiwidmFsIiwib3B0IiwiU3dpdGNoQnV0dG9uIiwibWFza2VkUGFzc3dvcmQiLCJoYXNFZGl0YWJsZUZvcm1zIiwiZm9ybWF0RmlsZVNpemUiLCJmaWxlc2l6ZSIsImZpbGUiLCJWdWVVcGxvYWQiLCJhc0ZpbGVzIiwiYWNjZXB0IiwibWF4U2l6ZSIsInBhcnNlRmlsZVNpemUiLCJ0b3RhbCIsIm5ld0ZpbGUiLCJvbGRGaWxlIiwieGhyIiwiZmlsZXMiLCJ1cGxvYWQiLCJsb2dnZWREZXByZWNhdGlvbnMiLCJkZXByZWNhdGUiLCJWdWVSb3V0ZXIiLCJWdWVNb2RhbCIsIlZ1ZU5vdGlmaWNhdGlvbnMiLCJEaXRvQWRtaW4iLCJlbCIsImRpdG8iLCJ2aWV3cyIsImRlZmF1bHRGb3JtYXRzIiwiZ2V0QXBpVXJsIiwiaXNBcGlVcmwiLCJ1c2VycyIsInBhcmVudFBhdGgiLCJEaXRvUm9vdCIsImNyZWF0ZUVsZW1lbnQiLCJSZXF1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QUFBLFNBQUEsT0FBQSxDQUFBLEdBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBQ0EsV0FBQTtBQUFBLE1BQ0EsZUFBQSxDQUFBO0FBQUEsTUFDQSxZQUFBO0FBQUEsTUFDQSxjQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLGdCQUFBO0FBQ0EsYUFBQSxLQUFBLE1BQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxZQUFBO0FBQ0EsYUFBQSxLQUFBLGVBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUNBLFNBQUEsU0FBQSxRQUFBLFNBQUEsU0FBQSxpQkFHQSxLQUFBLFNBQUEsa0JBQUEsQ0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLE1BQUEsVUFBQTtBQUdBLFNBQUEsTUFBQSxVQUFBO0FBQUEsTUFDQSxPQUFBLENBQUFoUyxNQUFBO0FBQ0EsUUFBQUEsRUFBQSxPQUFBLFFBQUEsYUFBQSxNQUNBLEtBQUEsU0FBQSxjQUFBO0FBQUEsTUFFQTtBQUFBLE1BRUEsT0FBQSxDQUFBQSxNQUFBO0FBQ0EsUUFBQUEsRUFBQSxTQUFBLFVBQ0EsS0FBQSxTQUFBLGNBQUE7QUFBQSxNQUVBO0FBQUEsSUFDQSxDQUFBO0FBQ0EsUUFBQTtBQUNBLFdBQUEsYUFBQSxJQUNBLE1BQUEsS0FBQSxjQUNBLE1BQUEsS0FBQSxhQUFBLElBRUEsTUFBQSxLQUFBLE1BQUE7QUFBQSxJQUVBLFNBQUFxUyxHQUFBO0FBQ0EsY0FBQSxNQUFBQSxDQUFBO0FBQUEsSUFDQTtBQUNBLFNBQUEsYUFBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFNBQUE7QUFBQSxJQUNBLE9BQUEsRUFBQSxNQUFBalEsSUFBQSxRQUFBLE9BQUFrUSxHQUFBLE1BQUFDLEVBQUEsSUFBQSxJQUFBO0FBQ0EsTUFBQUQsVUFBQTtBQUFBLFFBQ0EsU0FBQTtBQUFBLFFBQ0EsT0FBQTtBQUFBLFFBQ0EsTUFBQTtBQUFBLFFBQ0EsU0FBQTtBQUFBLE1BQ0EsRUFBQWxRLE1BQUEsaUJBQ0FtUSxJQUFBLE1BQ0F6USxFQUFBeVEsQ0FBQSxFQUFBLEtBQUEsVUFBQSxRQUNBLFFBQUEsZUFBQSxNQUFBO0FBQ0EsWUFBQUMsSUFBQTtBQUFBLFFBQ0EsU0FBQTtBQUFBLFFBQ0EsT0FBQTtBQUFBLFFBQ0EsTUFBQTtBQUFBLFFBQ0EsU0FBQTtBQUFBLE1BQ0EsRUFBQXBRLE1BQUE7QUFFQSxjQUFBb1EsR0FBQUMsR0FBQUYsQ0FBQSxDQUFBO0FBQ0EsWUFBQSxFQUFBLGVBQUFHLElBQUEsR0FBQSxJQUFBLEtBQUE7QUFDQSxVQUFBQSxHQUFBO0FBS0EsY0FBQSxFQUFBLGdCQUFBQyxJQUFBLEdBQUEsSUFBQUQsR0FDQUUsS0FBQSxLQUFBTCxFQUFBLFNBQUFELEVBQUEsVUFBQUs7QUFDQSxhQUFBLFFBQUEsRUFBQSxNQUFBdlEsR0FBQSxPQUFBa1EsR0FBQSxNQUFBQyxHQUFBLFVBQUFLLEdBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEscUJBQUE7QUFDQSxXQUFBLGNBQUEsV0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBYixHQUFBO0FBQ0EsV0FBQSxnQkFBQUEsSUFBQSxJQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsTUFBQSxRQUFBOztBQUNBLFdBQUEsYUFBQTtBQUNBLFlBQUE7QUFBQSxRQUNBLHNCQUFBYztBQUFBLFFBQ0Esb0JBQUFDO0FBQUEsTUFDQSxJQUFBLEtBQUEsUUFBQSxTQUFBLENBQUEsR0FDQUMsSUFBQSxNQUFBLEtBQUEsV0FBQTtBQUFBLFFBQ0EsWUFBQTtBQUFBLFVBQ0EsVUFBQTtBQUFBLFlBQ0EsTUFBQTtBQUFBLFlBQ0EsV0FBQTtBQUFBLFVBQ0E7QUFBQSxVQUNBLFVBQUE7QUFBQSxZQUNBLE1BQUE7QUFBQSxVQUNBO0FBQUEsVUFDQSxHQUFBRjtBQUFBLFFBQ0E7QUFBQSxRQUNBLFNBQUE7QUFBQSxVQUNBLFFBQUEsQ0FBQTtBQUFBLFVBQ0EsT0FBQSxFQUFBLE1BQUEsU0FBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBLENBQUE7QUFDQSxVQUFBRTtBQUNBLFlBQUE7QUFDQSxnQkFBQTNPLElBQUEsTUFBQSxLQUFBLFlBQUE7QUFBQSxZQUNBLFVBQUEsS0FBQSxJQUFBLE1BQUE7QUFBQSxZQUNBLE1BQUEyTztBQUFBLFlBQ0EsVUFBQTtBQUFBLFVBQ0EsQ0FBQTtBQUNBLFVBQUFELElBQ0EsU0FBQSxRQUFBQSxDQUFBLEtBRUEsS0FBQSxRQUFBMU8sRUFBQSxLQUFBLElBQUEsR0FDQSxNQUFBLEtBQUEsYUFBQTtBQUFBLFFBRUEsU0FBQWlPLEdBQUE7QUFDQSxnQkFBQXJSLEtBQUErRyxLQUFBckksSUFBQTJTLEVBQUEsYUFBQSxnQkFBQTNTLEVBQUEsU0FBQSxnQkFBQXFJLEVBQUE7QUFDQSxlQUFBLE9BQUE7QUFBQSxZQUNBLE1BQUE7QUFBQSxZQUNBLE9BQUE7QUFBQSxZQUNBLE1BQUEvRyxLQUFBcVI7QUFBQSxVQUNBLENBQUEsR0FDQXJSLEtBQ0EsUUFBQSxNQUFBcVIsR0FBQUEsRUFBQSxRQUFBLEdBRUEsS0FBQSxNQUFBO0FBQUEsUUFDQTtBQUFBLElBRUE7QUFBQSxJQUVBLGVBQUE7QUFDQSxhQUFBLEtBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsTUFBQSxTQUFBO0FBQ0EsVUFBQTtBQUtBLFNBSkEsTUFBQSxLQUFBLFlBQUE7QUFBQSxVQUNBLFVBQUEsS0FBQSxJQUFBLE1BQUE7QUFBQSxVQUNBLFVBQUE7QUFBQSxRQUNBLENBQUEsR0FDQSxLQUFBLFlBQ0EsS0FBQSxRQUFBLElBQUEsR0FDQSxLQUFBLGFBQUE7QUFBQSxNQUVBLFNBQUFBLEdBQUE7QUFDQSxnQkFBQSxNQUFBQSxDQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLE1BQUEsWUFBQTtBQUNBLFVBQUFXLElBQUE7QUFDQSxVQUFBO0FBS0EsUUFBQUEsS0FKQSxNQUFBLEtBQUEsWUFBQTtBQUFBLFVBQ0EsVUFBQSxLQUFBLElBQUEsTUFBQTtBQUFBLFVBQ0EsVUFBQTtBQUFBLFFBQ0EsQ0FBQSxHQUNBLEtBQUEsUUFBQTtBQUFBLE1BQ0EsU0FBQVgsR0FBQTtBQUNBLGFBQUEsT0FBQTtBQUFBLFVBQ0EsTUFBQTtBQUFBLFVBQ0EsT0FBQTtBQUFBLFVBQ0EsTUFBQUE7QUFBQSxRQUNBLENBQUE7QUFBQSxNQUNBO0FBQ0Esa0JBQUEsUUFBQVcsQ0FBQSxHQUNBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFFBQUFBLEdBQUE7QUFDQSxXQUFBLFNBQUEsT0FDQUEsS0FDQSxPQUFBLGVBQUFBLEdBQUF6QyxHQUFBLFNBQUEsR0FHQXlDLE1BQ0EsS0FBQSxnQkFBQSxDQUFBLEdBQ0EsS0FBQSxhQUFBO0FBQUEsSUFFQTtBQUFBLElBRUEsTUFBQSxhQUFBO0FBQ0EsTUFBQSxNQUFBLEtBQUEsVUFBQSxLQUNBLE1BQUEsS0FBQSxNQUFBO0FBQUEsSUFFQTtBQUFBLElBRUEsTUFBQSxlQUFBO0FBQ0EsVUFBQTtBQUNBLGFBQUEsZ0JBQUEsTUFBQWpKLEdBQUEsS0FBQSxlQUFBO0FBQUEsTUFDQSxTQUFBL0ksR0FBQTtBQUNBLGVBQUFBLEVBQUEsV0FDQSxRQUFBLE1BQUFBLENBQUEsR0FFQSxLQUFBLE1BQUE7QUFBQSxNQUNBO0FBRUEsWUFBQXVKLElBQUEsQ0FBQSxHQUNBUSxJQUFBLENBQUE7QUFDQSxpQkFBQSxDQUFBM0gsR0FBQVosQ0FBQSxLQUFBLE9BQUEsUUFBQSxLQUFBLGFBQUE7QUFDQSxRQUFBdUksRUFBQSxLQUFBVixHQUFBNEksSUFBQSxLQUFBLEtBQUF6USxHQUFBWSxHQUFBbUgsQ0FBQSxDQUFBO0FBRUEsWUFBQSxRQUFBLElBQUFRLENBQUE7QUFDQSxpQkFBQW1JLEtBQUEzSTtBQUNBLGFBQUEsUUFBQSxTQUFBMkksQ0FBQTtBQUFBLElBRUE7QUFBQSxFQUNBO0FBQ0EsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDN1JBLElBQUl4QixLQUFTLFdBQVk7QUFDdkIsTUFBSUMsSUFBSSxNQUNKQyxJQUFHRCxFQUFJLGdCQUNQekMsSUFBR3lDLEVBQUksTUFBTSxNQUFJQztBQUVyQixTQUFPMUMsRUFBRyxPQUFPO0FBQUEsSUFDZixhQUFhO0FBQUEsRUFDakIsR0FBSyxDQUFDQSxFQUFHLE1BQU0sQ0FBQ3lDLEVBQUksR0FBR0EsRUFBSSxHQUFHQSxFQUFJLFNBQVMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHekMsRUFBRyxNQUFNO0FBQUEsSUFDM0QsYUFBYTtBQUFBLEVBQ2QsR0FBRXlDLEVBQUksR0FBR0EsRUFBSSxPQUFPLFNBQVVwRyxHQUFNO0FBQ25DLFdBQU8yRCxFQUFHLE1BQU0sQ0FBQ3lDLEVBQUksYUFBYXBHLENBQUksSUFBSTJELEVBQUcsZUFBZTtBQUFBLE1BQzFELGFBQWE7QUFBQSxNQUNiLE9BQU87QUFBQSxRQUNMLElBQU0sSUFBSTNELEVBQUs7QUFBQSxRQUNmLGdCQUFnQjtBQUFBLE1BQ2pCO0FBQUEsSUFDUCxHQUFPLENBQUNvRyxFQUFJLEdBQUdBLEVBQUksR0FBR0EsRUFBSSxTQUFTcEcsQ0FBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUlvRyxFQUFJLEdBQUksQ0FBQSxHQUFHLENBQUM7QUFBQSxFQUMzRCxDQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDVCxHQUVJRSxLQUFrQixDQUFFO0FDMEJ4QixNQUFBQyxLQUFBL04sRUFBQSxVQUFBLGFBQUEsQ0FBQSxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM5Q0EsSUFBSTJOLEtBQVMsV0FBWTtBQUN2QixNQUFJQyxJQUFJLE1BQ0pDLElBQUdELEVBQUksZ0JBQ1B6QyxJQUFHeUMsRUFBSSxNQUFNLE1BQUlDO0FBRXJCLFNBQU8xQyxFQUFHLE9BQU87QUFBQSxJQUNmLFlBQVksQ0FBQztBQUFBLE1BQ1gsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLE1BQ1QsT0FBT3lDLEVBQUk7QUFBQSxNQUNYLFlBQVk7QUFBQSxJQUNsQixDQUFLO0FBQUEsSUFDRCxhQUFhO0FBQUEsRUFDakIsR0FBSyxDQUFDekMsRUFBRyxPQUFPO0FBQUEsSUFDWixhQUFhO0FBQUEsSUFDYixPQUFPLENBQUN5QyxFQUFJLGNBQWNBLEVBQUksYUFBYTtBQUFBLEVBQy9DLENBQUcsR0FBR3pDLEVBQUcsT0FBTztBQUFBLElBQ1osYUFBYTtBQUFBLElBQ2IsT0FBTyxDQUFDeUMsRUFBSSxjQUFjQSxFQUFJLGFBQWE7QUFBQSxFQUMvQyxDQUFHLEdBQUd6QyxFQUFHLE9BQU87QUFBQSxJQUNaLGFBQWE7QUFBQSxJQUNiLE9BQU8sQ0FBQ3lDLEVBQUksY0FBY0EsRUFBSSxhQUFhO0FBQUEsRUFDNUMsQ0FBQSxDQUFDLENBQUM7QUFDTCxHQUVJRSxLQUFrQixDQUFFO0FDZnhCLE1BQUFDLEtBQUE7QUFBQSxFQUVBLE1BQUE7QUFBQSxFQUVBLE9BQUE7QUFBQSxJQUNBLFNBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLFNBQUE7QUFBQSxJQUNBO0FBQUEsSUFDQSxPQUFBO0FBQUEsTUFDQSxNQUFBO0FBQUEsTUFDQSxTQUFBO0FBQUEsSUFDQTtBQUFBLElBQ0EsTUFBQTtBQUFBLE1BQ0EsTUFBQTtBQUFBLE1BQ0EsU0FBQTtBQUFBLElBQ0E7QUFBQSxJQUNBLFFBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLFNBQUE7QUFBQSxJQUNBO0FBQUEsSUFDQSxRQUFBO0FBQUEsTUFDQSxNQUFBO0FBQUEsTUFDQSxTQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBLE9BQUE7QUFDQSxXQUFBO0FBQUEsTUFDQSxjQUFBO0FBQUEsUUFDQSxpQkFBQSxLQUFBO0FBQUEsUUFDQSxPQUFBLEtBQUE7QUFBQSxRQUNBLFFBQUEsS0FBQTtBQUFBLFFBQ0EsUUFBQSxLQUFBO0FBQUEsUUFDQSxjQUFBLEtBQUE7QUFBQSxRQUNBLFNBQUE7QUFBQSxRQUNBLGVBQUE7QUFBQSxRQUNBLG1CQUFBO0FBQUEsUUFDQSx5QkFBQTtBQUFBLFFBQ0EseUJBQUE7QUFBQSxRQUNBLG1CQUFBO0FBQUEsTUFDQTtBQUFBLE1BQ0EsZUFBQTtBQUFBLFFBQ0EsZ0JBQUE7QUFBQSxNQUNBO0FBQUEsTUFDQSxlQUFBO0FBQUEsUUFDQSxnQkFBQTtBQUFBLE1BQ0E7QUFBQSxNQUNBLGVBQUE7QUFBQSxRQUNBLGdCQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQy9EQSxJQUFJSixLQUFTLFdBQVk7QUFDdkIsTUFBSUMsSUFBSSxNQUNKQyxJQUFHRCxFQUFJLGdCQUNQekMsSUFBR3lDLEVBQUksTUFBTSxNQUFJQztBQUVyQixTQUFPMUMsRUFBRyxPQUFPO0FBQUEsSUFDZixhQUFhO0FBQUEsRUFDakIsR0FBSyxDQUFDQSxFQUFHLE9BQU87QUFBQSxJQUNaLGFBQWE7QUFBQSxFQUNqQixHQUFLLENBQUNBLEVBQUcsTUFBTXlDLEVBQUksR0FBR0EsRUFBSSxPQUFPLFNBQVVsUyxHQUFXbEIsR0FBTztBQUN6RCxXQUFPMlEsRUFBRyxNQUFNLENBQUMzUSxNQUFVb1QsRUFBSSxNQUFNLFNBQVMsSUFBSSxDQUFDekMsRUFBRyxRQUFRO0FBQUEsTUFDNUQsT0FBT3lDLEVBQUksbUJBQW1CbFMsQ0FBUztBQUFBLElBQ3hDLEdBQUUsQ0FBQ2tTLEVBQUksR0FBR0EsRUFBSSxHQUFHbFMsRUFBVSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSXlQLEVBQUcsZUFBZTtBQUFBLE1BQzlELGFBQWE7QUFBQSxNQUNiLE9BQU87QUFBQSxRQUNMLElBQU16UCxFQUFVO0FBQUEsTUFDakI7QUFBQSxJQUNQLEdBQU8sQ0FBQ3lQLEVBQUcsUUFBUTtBQUFBLE1BQ2IsT0FBT3lDLEVBQUksbUJBQW1CbFMsQ0FBUztBQUFBLElBQ3hDLEdBQUUsQ0FBQ2tTLEVBQUksR0FBR0EsRUFBSSxHQUFHbFMsRUFBVSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUFBLEVBQ3BELENBQUcsR0FBRyxDQUFDLEdBQUdrUyxFQUFJLFlBQVl6QyxFQUFHLFdBQVc7QUFBQSxJQUNwQyxhQUFhO0FBQUEsRUFDZCxDQUFBLElBQUl5QyxFQUFJLEdBQUksQ0FBQSxHQUFHLENBQUMsR0FBR0EsRUFBSSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUM7QUFDM0MsR0FFSUUsS0FBa0IsQ0FBRTtBQzJEeEIsTUFBQXNCLEtBQUFwUCxFQUFBLFVBQUEsV0FBQXFQLEVBQUEsR0FHQXRCLEtBQUEvTixFQUFBLFVBQUEsZUFBQTtBQUFBLEVBQ0EsWUFBQSxFQUFBLFNBQUFvUCxHQUFBO0FBQUEsRUFFQSxPQUFBO0FBQUEsSUFDQSxTQUFBO0FBQUEsTUFDQSxNQUFBO0FBQUEsTUFDQSxTQUFBO0FBQUEsSUFDQTtBQUFBLElBQ0EsV0FBQTtBQUFBLE1BQ0EsTUFBQTtBQUFBLE1BQ0EsU0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQUEsSUFDQSxRQUFBO0FBQ0EsYUFBQSxLQUFBLFNBQUEsZ0JBQUE7QUFBQSxRQUNBLENBQUExVCxNQUFBLENBQUEsQ0FBQUEsRUFBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUNBLFVBQUE7QUFBQSxNQUNBLE1BQUE0VCxJQUFBO0FBQUEsTUFDQSxPQUFBQyxJQUFBO0FBQUEsSUFDQSxJQUFBLEtBQUEsV0FBQSxDQUFBLEdBQ0EsRUFBQSxPQUFBQyxNQUFBSixHQUFBO0FBQ0EsSUFBQUksRUFBQSxLQUFBLFVBQUFGLEdBQ0FFLEVBQUEsTUFBQSxVQUFBRDtBQUFBLEVBQ0E7QUFBQSxFQUVBLFNBQUE7QUFBQSxJQUNBLG1CQUFBN1QsR0FBQTtBQUNBLGFBQUE7QUFBQSxRQUNBLGNBQUFBLEVBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFDQSxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7OztLQzNIZStULEtBQUE7QUFBQSxFQUNiLFFBQVEsQ0FBQ3hCLENBQVE7QUFBQSxFQUVqQixPQUFPO0FBQ0wsV0FBTztBQUFBLE1BQ0wsVUFBVTtBQUFBLFFBQ1IsTUFBTTtBQUFBLFFBQ04sV0FBVztBQUFBLFFBQ1gsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFVBQ04sV0FBVyxNQUFNO0FBQ2YsaUJBQUssZ0JBQWdCLEVBQUssR0FDMUIsS0FBSyxTQUFTLFNBQVMsT0FBUTtBQUFBLFVBQ2hDO0FBQUEsVUFFRCxTQUFTLE1BQU07QUFDYixZQUFJLEtBQUssa0JBQWtCLElBQUksS0FDN0IsS0FBSyxTQUFTLFNBQVMsT0FBUTtBQUFBLFVBRWxDO0FBQUEsUUFDRjtBQUFBLFFBQ0QsVUFBVTtBQUFBLE1BQ1g7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBLEVBRUQsU0FBUztBQUFBLElBQ1Asb0JBQW9CM1MsR0FBTztBQUN6QixNQUFLQSxJQUlILEtBQUssWUFBWSxNQUhqQixLQUFLLGdCQUFnQixFQUFJLEdBQ3pCLEtBQUssWUFBWTtBQUFBLElBSXBCO0FBQUEsSUFFRCxrQkFBa0JBLEdBQU87QUFDdkIsWUFBTSxFQUFFLFdBQUFvVSxNQUFjLEtBQUs7QUFDM0IsVUFBSSxDQUFDLEtBQUssYUFBYUEsS0FBYyxLQUFLLElBQUssSUFBR0EsSUFBWTtBQUM1RCxvQkFBSyxnQkFBZ0IsRUFBSyxHQUN0QnBVLEtBQ0YsS0FBSyxpQkFBaUJBLENBQUssR0FFdEI7QUFBQSxJQUVWO0FBQUEsSUFFRCxtQkFBOEI7QUFBQSxJQUU3QjtBQUFBLElBRUQsZ0JBQWdCcVUsR0FBTTtBQUNwQixXQUFLLFNBQVMsT0FBT0EsR0FDckIsS0FBSyxTQUFTLFlBQVlBLElBQU8sS0FBSyxJQUFHLElBQUssR0FDMUNBLE1BQ0YsS0FBSyxTQUFTLFdBQVcsS0FBSyxNQUFNLFVBQVUsS0FBSyxTQUFTLE1BQU07QUFBQSxJQUVyRTtBQUFBLEVBQ0Y7QUFDSDtBQzlEQSxJQUFJaEMsS0FBUyxXQUFZO0FBQ3ZCLE1BQUlDLElBQUksTUFDSkMsSUFBR0QsRUFBSSxnQkFDUHpDLElBQUd5QyxFQUFJLE1BQU0sTUFBSUM7QUFFckIsU0FBTzFDLEVBQUcsT0FBTztBQUFBLElBQ2YsYUFBYTtBQUFBLEVBQ2pCLEdBQUssQ0FBQ0EsRUFBRyxLQUFLO0FBQUEsSUFDVixJQUFJO0FBQUEsTUFDRixXQUFhLFNBQVVrRCxHQUFRO0FBQzdCLGVBQUFBLEVBQU8sZ0JBQWUsR0FDZlQsRUFBSTtNQUNaO0FBQUEsSUFDRjtBQUFBLEVBQ0wsR0FBSyxDQUFDekMsRUFBRyxRQUFRLENBQUN5QyxFQUFJLEdBQUdBLEVBQUksR0FBR0EsRUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUd6QyxFQUFHLE1BQU07QUFBQSxJQUM5RCxhQUFhO0FBQUEsSUFDYixPQUFPO0FBQUEsTUFDTCxhQUFheUMsRUFBSSxTQUFTO0FBQUEsSUFDM0I7QUFBQSxFQUNMLEdBQUtBLEVBQUksR0FBR0EsRUFBSSxPQUFPLFNBQVU5QixHQUFPeFEsR0FBTztBQUMzQyxXQUFPNlAsRUFBRyxNQUFNLENBQUNBLEVBQUcsS0FBSztBQUFBLE1BQ3ZCLElBQUk7QUFBQSxRQUNGLFdBQWEsU0FBVWtELEdBQVE7QUFDN0IsaUJBQUFBLEVBQU8sZ0JBQWUsR0FDZlQsRUFBSSxvQkFBb0J0UyxDQUFLO0FBQUEsUUFDckM7QUFBQSxRQUNELFNBQVcsU0FBVStTLEdBQVE7QUFDM0IsaUJBQU9ULEVBQUksa0JBQWtCdFMsQ0FBSztBQUFBLFFBQ25DO0FBQUEsTUFDRjtBQUFBLElBQ1AsR0FBTyxDQUFDc1MsRUFBSSxHQUFHQSxFQUFJLEdBQUc5QixDQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUFBLEVBQ2hDLENBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNULEdBRUlnQyxLQUFrQixDQUFFO0FDSnhCLE1BQUFDLEtBQUEvTixFQUFBLFVBQUEsZ0JBQUE7QUFBQSxFQUNBLFFBQUEsQ0FBQXlQLEVBQUE7QUFBQSxFQUVBLE9BQUE7QUFDQSxXQUFBO0FBQUEsTUFDQSxPQUFBO0FBQUEsUUFDQSxVQUFBO0FBQUEsUUFDQSxRQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxTQUFBO0FBQUEsSUFDQSxpQkFBQW5VLEdBQUE7QUFDQSxjQUFBQSxHQUFBO0FBQUEsUUFDQSxLQUFBO0FBQ0EsZUFBQSxjQUFBLE9BQUE7QUFDQTtBQUFBLFFBQ0EsS0FBQTtBQUNBLGtCQUFBLEtBQUEsMEJBQUE7QUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUNBLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3REQSxJQUFJcVMsS0FBUyxXQUFZO0FBQ3ZCLE1BQUlDLElBQUksTUFDSkMsSUFBR0QsRUFBSSxnQkFDUHpDLElBQUd5QyxFQUFJLE1BQU0sTUFBSUM7QUFFckIsU0FBTzFDLEVBQUcsUUFBUTtBQUFBLElBQ2hCLGFBQWE7QUFBQSxJQUNiLElBQUk7QUFBQSxNQUNGLFFBQVUsU0FBVWtELEdBQVE7QUFDMUIsZUFBQUEsRUFBTyxlQUFjLEdBQ2RULEVBQUksT0FBTyxNQUFNLE1BQU0sU0FBUztBQUFBLE1BQ3hDO0FBQUEsSUFDRjtBQUFBLEVBQ0wsR0FBSyxDQUFDekMsRUFBRyxlQUFlO0FBQUEsSUFDcEIsYUFBYTtBQUFBLElBQ2IsT0FBTztBQUFBLE1BQ0wsUUFBVXlDLEVBQUk7QUFBQSxNQUNkLE1BQVFBLEVBQUk7QUFBQSxJQUNiO0FBQUEsRUFDTCxHQUFLLENBQUN6QyxFQUFHLGdCQUFnQjtBQUFBLElBQ3JCLGFBQWE7QUFBQSxJQUNiLE9BQU87QUFBQSxNQUNMLE1BQVE7QUFBQSxNQUNSLFNBQVd5QyxFQUFJO0FBQUEsTUFDZixNQUFRQSxFQUFJO0FBQUEsSUFDYjtBQUFBLElBQ0QsTUFBTTtBQUFBLEVBQ1AsQ0FBQSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUNiLEdBRUlFLEtBQWtCLENBQUU7QUNMeEIsTUFBQUMsS0FBQS9OLEVBQUEsVUFBQSxlQUFBO0FBQUEsRUFDQSxVQUFBO0FBQ0EsV0FBQTtBQUFBLE1BQ0Esa0JBQUEsTUFBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBQUEsSUFDQSxZQUFBLEVBQUEsTUFBQSxRQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsU0FBQSxFQUFBLE1BQUEsUUFBQSxVQUFBLEdBQUE7QUFBQSxJQUNBLFNBQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxNQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsT0FBQSxDQUFBLEdBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBRUEsVUFBQTRQLElBQUFySCxHQUFBLEtBQUEsSUFBQTtBQUNBLGVBQUFwTixLQUFBLEtBQUE7QUFDQSxNQUFBQSxLQUFBeVUsTUFDQUEsRUFBQXpVLEtBQUE7QUFHQSxXQUFBO0FBQUEsTUFDQSxjQUFBO0FBQUEsTUFDQSxZQUFBeVU7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUFBLElBQ0Esa0JBQUE7QUFDQSxhQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsT0FBQTtBQUNBLGFBQUEsS0FBQSxRQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsU0FBQTtBQUNBLGFBQUE7QUFBQSxRQUNBLFlBQUEsS0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxnQkFBQTtBQUNBLGFBQUEsT0FBQTtBQUFBLFFBQ0EsT0FBQSxRQUFBN0UsR0FBQSxLQUFBLE9BQUEsQ0FBQSxFQUFBO0FBQUEsVUFHQSxDQUFBLENBQUE1UCxHQUFBc0QsQ0FBQSxPQUNBdEQsTUFBQSxZQUFBLENBQUFzRCxFQUFBLFdBQ0FBLElBQUE7QUFBQSxZQUNBLEdBQUFBO0FBQUEsWUFDQSxRQUFBO0FBQUEsY0FDQSxPQUFBLE1BQUEsS0FBQSxPQUFBO0FBQUEsWUFDQTtBQUFBLFVBQ0EsSUFFQSxDQUFBdEQsR0FBQXNELENBQUE7QUFBQSxRQUVBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFlBQUE7QUFDQSxhQUFBLENBQUEsQ0FBQSxLQUFBLGNBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUNBLFNBQUEsZUFBQTJQLEdBQUEsUUFBQTtBQUFBLE1BQ0EsT0FBQSxNQUFBO0FBQ0EsUUFBQSxLQUFBLGFBQUEsTUFBQSxZQUFBLE1BQ0EsS0FBQSxPQUFBO0FBQUEsTUFFQTtBQUFBLElBQ0EsQ0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFlBQUE7QUFDQSxTQUFBLGFBQUEsT0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFNBQUE7QUFBQSxJQUNBLE9BQUE7QUFDQSxXQUFBLE9BQUEsS0FBQSxLQUFBLElBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxRQUFBOVMsR0FBQTtBQUNBLFdBQUEsUUFBQSxRQUFBQSxDQUFBLEdBQ0EsS0FBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsT0FBQUEsR0FBQTtBQUNBLFdBQUEsUUFBQSxPQUFBQSxDQUFBLEdBQ0EsS0FBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsU0FBQTtBQUNBLFdBQUEsUUFBQSxLQUFBLFVBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxTQUFBO0FBQ0EsV0FBQSxRQUFBLElBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUNBLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2xJQSxJQUFJcVMsS0FBUyxXQUFZO0FBQ3ZCLE1BQUlDLElBQUksTUFDSkMsSUFBR0QsRUFBSSxnQkFDUHpDLElBQUd5QyxFQUFJLE1BQU0sTUFBSUM7QUFFckIsU0FBT0QsRUFBSSxVQUFVekMsRUFBR3lDLEVBQUksUUFBUSxPQUFPQSxFQUFJLEtBQUs7QUFBQSxJQUNsRCxLQUFLO0FBQUEsSUFDTCxPQUFPQSxFQUFJO0FBQUEsSUFDWCxPQUFPQSxFQUFJO0FBQUEsRUFDWixHQUFFLENBQUNBLEVBQUksR0FBR0EsRUFBSSxHQUFHQSxFQUFJLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJQSxFQUFJLEdBQUU7QUFDakQsR0FFSUUsS0FBa0IsQ0FBRTtBQ0V4QixNQUFBQyxLQUFBL04sRUFBQSxVQUFBLGdCQUFBO0FBQUEsRUFDQSxPQUFBO0FBQUEsSUFDQSxLQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsT0FBQTtBQUFBLElBQ0EsU0FBQSxFQUFBLE1BQUEsQ0FBQSxRQUFBLE1BQUEsRUFBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLFVBQUE7QUFDQSxZQUFBLEVBQUEsU0FBQTZQLEVBQUEsSUFBQTtBQUNBLGFBQUFyUyxFQUFBcVMsQ0FBQSxJQUFBQSxJQUFBLEVBQUEsTUFBQUEsRUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUE7QUFDQSxhQUFBO0FBQUEsUUFDQSxHQUFBLEtBQUEsT0FBQTtBQUFBLFFBQ0EsR0FBQUMsR0FBQSxLQUFBLFFBQUEsS0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxTQUFBO0FBQ0EsYUFBQTtBQUFBLFFBQ0EsR0FBQSxLQUFBLE9BQUE7QUFBQSxRQUNBLEdBQUFBLEdBQUEsS0FBQSxRQUFBLEtBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFDQSxDQUFBO0FBRUEsU0FBQUEsR0FBQXhVLEdBQUE7QUFDQSxTQUFBeUMsRUFBQXpDLENBQUEsRUFBQSxPQUFBLENBQUFELEdBQUFxQixPQUNBWSxFQUFBWixDQUFBLElBQ0FyQixFQUFBcUIsS0FBQSxLQUNBYyxFQUFBZCxDQUFBLEtBQ0EsT0FBQSxPQUFBckIsR0FBQXFCLENBQUEsR0FFQXJCLElBQ0EsRUFBQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbkRBLElBQUlzUyxLQUFTLFdBQVk7QUFDdkIsTUFBSUMsSUFBSSxNQUNKQyxJQUFHRCxFQUFJLGdCQUNQekMsSUFBR3lDLEVBQUksTUFBTSxNQUFJQztBQUVyQixTQUFPRCxFQUFJLFFBQVFBLEVBQUksY0FBY3pDLEVBQUd5QyxFQUFJLEtBQUtBLEVBQUksR0FBRztBQUFBLElBQ3RELEtBQUs7QUFBQSxJQUNMLGFBQWE7QUFBQSxJQUNiLE9BQU87QUFBQSxNQUNMLGVBQWVBLEVBQUk7QUFBQSxJQUNwQjtBQUFBLEVBQ0wsR0FBS0EsRUFBSSxTQUFTLEdBQUcsQ0FBQ0EsRUFBSSxjQUFjekMsRUFBRyxPQUFPO0FBQUEsSUFDOUMsYUFBYTtBQUFBLElBQ2IsT0FBTztBQUFBLE1BQ0wsZUFBZSxDQUFDeUMsRUFBSTtBQUFBLElBQ3JCO0FBQUEsRUFDTCxDQUFHLElBQUlBLEVBQUksR0FBRSxHQUFJQSxFQUFJLEdBQUdBLEVBQUksVUFBVSxTQUFVbUMsR0FBUXZWLEdBQU87QUFDM0QsV0FBTzJRLEVBQUcsZ0JBQWdCO0FBQUEsTUFDeEIsS0FBSyxVQUFVM1E7QUFBQSxNQUNmLGFBQWE7QUFBQSxNQUNiLE9BQU87QUFBQSxRQUNMLEtBQU87QUFBQSxRQUNQLFNBQVd1VjtBQUFBLE1BQ1o7QUFBQSxJQUNQLENBQUs7QUFBQSxFQUNMLENBQUcsR0FBRzVFLEVBQUcsU0FBUztBQUFBLElBQ2QsT0FBTztBQUFBLE1BQ0wsS0FBT3lDLEVBQUk7QUFBQSxJQUNaO0FBQUEsSUFDRCxVQUFVO0FBQUEsTUFDUixXQUFhQSxFQUFJLEdBQUdBLEVBQUksSUFBSTtBQUFBLElBQzdCO0FBQUEsRUFDTCxDQUFHLEdBQUdBLEVBQUksR0FBR0EsRUFBSSxVQUFVLFNBQVVvQyxHQUFReFYsR0FBTztBQUNoRCxXQUFPMlEsRUFBRyxnQkFBZ0I7QUFBQSxNQUN4QixLQUFLLFVBQVUzUTtBQUFBLE1BQ2YsYUFBYTtBQUFBLE1BQ2IsT0FBTztBQUFBLFFBQ0wsS0FBTztBQUFBLFFBQ1AsU0FBV3dWO0FBQUEsTUFDWjtBQUFBLElBQ1AsQ0FBSztBQUFBLEVBQ0wsQ0FBRyxHQUFHcEMsRUFBSSxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSUEsRUFBSTtBQUN4QyxHQUVJRSxLQUFrQixDQUFFO0FDMkR4QixNQUFBQyxLQUFBL04sRUFBQSxVQUFBLGNBQUE7QUFBQSxFQUNBLE9BQUE7QUFBQSxJQUNBLE9BQUEsRUFBQSxNQUFBLENBQUEsUUFBQSxNQUFBLEdBQUEsU0FBQSxLQUFBO0FBQUEsSUFDQSxVQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsS0FBQTtBQUFBLElBQ0EsV0FBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLGFBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUFBLElBQ0EsTUFBQTtBQUNBLGFBQUEsS0FBQSxjQUFBLE1BQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxPQUFBO0FBQ0EsWUFBQSxFQUFBLE9BQUE4TCxFQUFBLElBQUE7QUFDQSxhQUFBdE8sRUFBQXNPLENBQUEsSUFBQUEsS0FBQSxnQkFBQUEsRUFBQSxPQUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFdBQUE7O0FBQ0EsYUFBQS9OLEdBQUFwQyxJQUFBLEtBQUEsVUFBQSxnQkFBQUEsRUFBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsV0FBQTs7QUFDQSxhQUFBb0MsR0FBQXBDLElBQUEsS0FBQSxVQUFBLGdCQUFBQSxFQUFBLE1BQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxZQUFBO0FBQ0EsYUFBQTtBQUFBLFFBQ0EsR0FBQSxLQUFBLGVBQUE7QUFBQSxVQUNBLE9BQUEsS0FBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsV0FBQTtBQUNBLGFBQUEsS0FBQSxTQUFBLGdCQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFNBQUE7QUFBQSxJQUNBLFVBQUE7QUFDQSxXQUFBLFNBQUEsY0FBQSxNQUNBLEtBQUEsTUFBQSxVQUFBLEtBQUEsU0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQ0EsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7S0M1SWVzVSxLQUFBO0FBQUEsRUFDYixTQUFTO0FBQUEsSUFDUCxtQkFBQWpJO0FBQUEsSUFFQSxZQUFBMkQ7QUFBQSxJQUVBLFVBQVVwSCxHQUFjNEIsR0FBTTNMLElBQVEsTUFBTTtBQUMxQyxhQUFPLEtBQUssZUFBZUEsTUFBVSxPQUNqQyxPQUFPQSxDQUFLLElBQ1prUixHQUFVbkgsR0FBYzRCLENBQUk7QUFBQSxJQUNqQztBQUFBLElBRUQsZ0JBQWdCNUIsR0FBYy9KLEdBQU87QUFDbkMsVUFBSSxFQUFFLFVBQUFuQixFQUFRLElBQUs7QUFDbkIsYUFBSWtMLE1BQWlCLEtBQUssV0FDeEJsTCxJQUFXRCxFQUFlQyxHQUFVa0wsRUFBYSxJQUFJLElBRW5EL0osS0FBUyxTQUNYbkIsSUFBV0QsRUFBZUMsR0FBVW1CLENBQUssSUFFcENuQjtBQUFBLElBQ1I7QUFBQSxJQUVELGdCQUFnQmtMLEdBQWM1SixHQUFNK0ksR0FBUTtBQUMxQyxZQUFNbEosSUFBUSxLQUFLLGNBRWZrSixJQUNBL0ksS0FBQSxnQkFBQUEsRUFBTTtBQUFBLFFBQ04sQ0FBQ3dMLEdBQU0zTCxNQUNMLEtBQUssVUFBVStKLEdBQWM0QixHQUFNM0wsQ0FBSyxNQUFNa0o7QUFBQTtBQUVwRCxhQUFPbEosTUFBVSxLQUFLQSxJQUFRO0FBQUEsSUFDL0I7QUFBQSxJQUVELGFBQWErSixHQUFjNEIsR0FBTTtBQUFBLE1BQy9CLE9BQUEzTCxJQUFRO0FBQUEsTUFDUixVQUFBMFYsSUFBVztBQUFBLE1BQ1gsVUFBQUosSUFBVztBQUFBLElBQ1osSUFBRyxJQUFJO0FBQ04sWUFBTSxFQUFFLFdBQUFLLEVBQVMsSUFBSzVMO0FBQ3RCLFVBQUksQ0FBQzRCLEtBQVEsQ0FBQytKLEtBQVlDLE1BQWM7QUFDdEMsZUFBTztBQUdULFVBQUk5VztBQUNKLFlBQU02USxJQUFjLE1BQ2pCN1EsVUFBYSxLQUFLLGdCQUFnQmtMLEdBQWMvSixDQUFLO0FBRXhELFVBQUk0VjtBQUNKLFlBQU1DLElBQWUsTUFDbEJELFVBQWMsS0FBSztBQUFBLFFBQ2xCcEksR0FBa0J6RCxHQUFjNEIsR0FBTSxLQUFLLE9BQU87QUFBQSxNQUM1RDtBQUVNLFVBQUlxSSxHQUNBdUIsR0FDQUM7QUFDSixVQUFJelUsRUFBVzRVLENBQVMsR0FBRztBQUN6QixjQUFNckUsSUFBUXFFLEVBQVU7QUFBQSxVQUN0QjtBQUFBLFVBQ0EsSUFBSTFVLEVBQVksTUFBTTtBQUFBLFlBQ3BCLFFBQVE7QUFBQSxZQUNSLE1BQU0wSztBQUFBLFlBQ04sT0FBT0E7QUFBQSxZQUNQLE9BQUEzTDtBQUFBLFlBRUEsSUFBSSxXQUFXO0FBQ2IscUJBQU8wUCxFQUFhO0FBQUEsWUFDckI7QUFBQSxZQUVELElBQUksWUFBWTtBQUNkLHFCQUFPbUcsRUFBYztBQUFBLFlBQ3RCO0FBQUEsVUFDYixDQUFXO0FBQUEsUUFDRjtBQUNELFFBQUk3UyxFQUFTc08sQ0FBSyxJQUNmLEVBQUUsTUFBQTBDLEdBQU0sUUFBQXVCLEdBQVEsUUFBQUMsRUFBTSxJQUFLbEUsSUFFNUIwQyxJQUFPMUMsR0FHVG9FLElBQVc7QUFBQSxNQUNuQixPQUFhO0FBS0wsY0FBTSxFQUFFLFNBQUFJLEVBQU8sSUFBSy9MLEdBQ2RwSixJQUNKbUMsRUFBUzZTLENBQVMsS0FBS0EsS0FDdkIxRSxFQUFhbEgsQ0FBWSxLQUFLK0wsS0FBVyxPQUFPLEtBQUtBLENBQU8sRUFBRSxNQUM5RDtBQUVGLFFBQUE5QixJQUFPckksRUFBS2hMO0FBQUEsTUFDYjtBQUNELFlBQU1vVixJQUFXLENBQUMsQ0FBQy9CO0FBVW5CLFVBVEFBLFVBQVMsS0FFSkEsTUFFSDBCLElBQVcsSUFDUHpFLEVBQWFsSCxDQUFZLEtBQUsvSixNQUFVLFNBQzFDZ1UsSUFBTyxHQUFHaFUsSUFBUSxPQUdsQjBWLEdBQVU7QUFDWixjQUFNRSxJQUFZQyxFQUFjO0FBQ2hDLFFBQUlELE1BR0Y1QixJQUFPLEdBQUc0QixLQUFhRyxJQUFXLElBQUkvQixPQUFVQTtBQUFBLE1BRW5EO0FBQ0QsYUFBT3NCLElBQVcsRUFBRSxNQUFBdEIsR0FBTSxRQUFBdUIsR0FBUSxRQUFBQyxFQUFRLElBQUd4QjtBQUFBLElBQzlDO0FBQUEsRUFDRjtBQUNIO0FDNUhBLElBQUliLEtBQVMsV0FBWTtBQUN2QixNQUFJQyxJQUFJLE1BQ0pDLElBQUdELEVBQUksZ0JBQ1B6QyxJQUFHeUMsRUFBSSxNQUFNLE1BQUlDO0FBRXJCLFNBQU8xQyxFQUFHLE9BQU87QUFBQSxJQUNmLGFBQWE7QUFBQSxFQUNqQixHQUFLLENBQUNBLEVBQUcsT0FBTztBQUFBLElBQ1osYUFBYTtBQUFBLEVBQ2pCLEdBQUssQ0FBQ3lDLEVBQUksWUFBWUEsRUFBSSxXQUFXQSxFQUFJLFlBQVl6QyxFQUFHLE9BQU87QUFBQSxJQUMzRCxhQUFhO0FBQUEsSUFDYixPQUFPO0FBQUEsTUFDTCwyQkFBMkJ5QyxFQUFJO0FBQUEsSUFDaEM7QUFBQSxFQUNGLEdBQUUsQ0FBQ0EsRUFBSSxXQUFXekMsRUFBRyxjQUFjO0FBQUEsSUFDbEMsT0FBTztBQUFBLE1BQ0wsT0FBU3lDLEVBQUk7QUFBQSxNQUNiLFVBQVlBLEVBQUk7QUFBQSxNQUNoQixhQUFlQSxFQUFJO0FBQUEsTUFDbkIsV0FBYSxDQUFDQSxFQUFJO0FBQUEsSUFDbkI7QUFBQSxJQUNELElBQUk7QUFBQSxNQUNGLFFBQVVBLEVBQUk7QUFBQSxJQUNmO0FBQUEsSUFDRCxhQUFhQSxFQUFJLEdBQUcsQ0FBQ0EsRUFBSSxVQUFVO0FBQUEsTUFDakMsS0FBSztBQUFBLE1BQ0wsSUFBSSxXQUFZO0FBQ2QsZUFBTyxDQUFDQSxFQUFJLEdBQUcsY0FBYyxDQUFDO0FBQUEsTUFDL0I7QUFBQSxNQUNELE9BQU87QUFBQSxJQUNiLElBQVEsSUFBSSxHQUFHLE1BQU0sRUFBSTtBQUFBLEVBQ3pCLENBQUcsSUFBSUEsRUFBSSxHQUFJLEdBQUVBLEVBQUksT0FBT3pDLEVBQUcsYUFBYTtBQUFBLElBQ3hDLE9BQU87QUFBQSxNQUNMLE1BQVF5QyxFQUFJO0FBQUEsTUFDWixhQUFlQSxFQUFJO0FBQUEsSUFDcEI7QUFBQSxFQUNGLENBQUEsSUFBSUEsRUFBSSxNQUFNekMsRUFBRyxrQkFBa0I7QUFBQSxJQUNsQyxPQUFPO0FBQUEsTUFDTCxXQUFheUMsRUFBSTtBQUFBLE1BQ2pCLFVBQVlBLEVBQUk7QUFBQSxNQUNoQixNQUFRQSxFQUFJO0FBQUEsSUFDYjtBQUFBLEVBQ0YsQ0FBQSxDQUFDLEdBQUcsQ0FBQyxJQUFJQSxFQUFJLEdBQUksR0FBRUEsRUFBSSxHQUFHQSxFQUFJLE1BQU0sU0FBVW5QLEdBQVE4TCxHQUFLO0FBQzFELFdBQU9xRCxFQUFJLFVBQVV6QyxFQUFHLGFBQWE7QUFBQSxNQUNuQyxLQUFLWjtBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsVUFBVTtBQUFBLE1BQ1YsYUFBYTtBQUFBLE1BQ2IsT0FBTztBQUFBLFFBQ0wsU0FBV3FELEVBQUksZ0JBQWdCckQ7QUFBQSxRQUMvQixLQUFPQTtBQUFBLFFBQ1AsUUFBVTlMO0FBQUEsUUFDVixVQUFZbVAsRUFBSTtBQUFBLFFBQ2hCLE1BQVFBLEVBQUk7QUFBQSxRQUNaLE1BQVFBLEVBQUk7QUFBQSxRQUNaLE9BQVNBLEVBQUk7QUFBQSxRQUNiLFFBQVUsQ0FBQ0EsRUFBSSxXQUFXLENBQUNBLEVBQUk7QUFBQSxRQUMvQixVQUFZQSxFQUFJO0FBQUEsUUFDaEIsZ0JBQWtCQSxFQUFJO0FBQUEsTUFDdkI7QUFBQSxJQUNQLENBQUssSUFBSUEsRUFBSTtFQUNiLENBQUcsR0FBR3pDLEVBQUcscUJBQXFCO0FBQUEsSUFDMUIsT0FBTztBQUFBLE1BQ0wsU0FBV3lDLEVBQUk7QUFBQSxJQUNoQjtBQUFBLEVBQ0wsR0FBSyxDQUFDQSxFQUFJLGVBQWVBLEVBQUksU0FBU3pDLEVBQUcsYUFBYTtBQUFBLElBQ2xELEtBQUs7QUFBQSxJQUNMLGFBQWE7QUFBQSxJQUNiLE9BQU87QUFBQSxNQUNMLFFBQVV5QyxFQUFJO0FBQUEsTUFDZCxVQUFZQSxFQUFJO0FBQUEsTUFDaEIsTUFBUUEsRUFBSTtBQUFBLE1BQ1osTUFBUUEsRUFBSTtBQUFBLE1BQ1osT0FBU0EsRUFBSTtBQUFBLE1BQ2IsUUFBVSxDQUFDQSxFQUFJLFdBQVcsQ0FBQ0EsRUFBSTtBQUFBLE1BQy9CLFVBQVlBLEVBQUk7QUFBQSxNQUNoQixnQkFBa0JBLEVBQUk7QUFBQSxJQUN2QjtBQUFBLEVBQ0wsQ0FBRyxJQUFJQSxFQUFJLEdBQUUsQ0FBRSxHQUFHLENBQUMsR0FBRyxDQUFDQSxFQUFJLFdBQVdBLEVBQUksY0FBY0EsRUFBSSxHQUFHLFNBQVMsSUFBSUEsRUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHQSxFQUFJLFVBQVUsQ0FBRUEsRUFBSSxXQUFvQ0EsRUFBSSxHQUFFLElBQS9CQSxFQUFJLEdBQUcsY0FBYyxDQUFZLElBQUlBLEVBQUksY0FBYyxDQUFDekMsRUFBRyxlQUFlO0FBQUEsSUFDaE0sT0FBTztBQUFBLE1BQ0wsUUFBVXlDLEVBQUk7QUFBQSxNQUNkLE1BQVFBLEVBQUk7QUFBQSxNQUNaLE1BQVFBLEVBQUk7QUFBQSxNQUNaLE9BQVNBLEVBQUk7QUFBQSxNQUNiLFVBQVlBLEVBQUk7QUFBQSxJQUNqQjtBQUFBLEVBQ0YsQ0FBQSxDQUFDLElBQUlBLEVBQUksR0FBRSxDQUFFLEdBQUcsQ0FBQztBQUNwQixHQUVJRSxLQUFrQixDQUFFO0FDNEV4QixNQUFBQyxLQUFBL04sRUFBQSxVQUFBLGVBQUE7QUFBQSxFQUNBLFlBQUEsRUFBQSxrQkFBQXdRLEdBQUE7QUFBQSxFQUNBLFFBQUEsQ0FBQVAsRUFBQTtBQUFBLEVBRUEsVUFBQTtBQUNBLFdBQUE7QUFBQSxNQUNBLGtCQUFBLE1BQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsUUFBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBQUEsSUFDQSxRQUFBLEVBQUEsTUFBQSxRQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsVUFBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLE1BQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxLQUFBO0FBQUEsSUFDQSxNQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsT0FBQSxDQUFBLEdBQUE7QUFBQSxJQUNBLE9BQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxPQUFBLENBQUEsR0FBQTtBQUFBLElBQ0EsT0FBQSxFQUFBLE1BQUEsQ0FBQSxRQUFBLE1BQUEsR0FBQSxTQUFBLEtBQUE7QUFBQSxJQUNBLFNBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxVQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsV0FBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLGFBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxnQkFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLFlBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxZQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLE9BQUE7QUFDQSxVQUFBLEVBQUEsTUFBQXRWLE1BQUEsS0FBQTtBQUNBLFdBQUE7QUFBQSxNQUVBLEdBQ0FBLEtBQUFZLEVBQUFaLENBQUEsSUFDQUEsRUFBQSxLQUFBLE1BQUEsS0FBQSxPQUFBLElBQ0FBO0FBQUEsTUFFQSxvQkFBQSxDQUFBO0FBQUEsTUFDQSxlQUFBLENBQUE7QUFBQSxNQUNBLGdCQUFBLENBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUFBLElBQ0Esa0JBQUE7QUFFQSxhQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsd0JBQUE7QUFJQSxhQUFBLEtBQUEsYUFBQSxPQUFBLEtBQUEsUUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGVBQUE7QUFDQSxZQUFBMEwsSUFBQWlGLEdBQUEsS0FBQSxPQUFBLFFBQUEsRUFBQTtBQUNBLGlCQUFBbUYsS0FBQSxLQUFBO0FBQ0EsUUFBQXBLLEVBQUEsS0FBQSxHQUFBb0ssRUFBQSxZQUFBO0FBRUEsYUFBQXBLO0FBQUEsSUFDQTtBQUFBLElBRUEsT0FBQTtBQUNBLGFBQUFxRSxFQUFBLEtBQUEsT0FBQSxJQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQTs7QUFDQSxZQUFBZ0csTUFBQS9VLElBQUEsS0FBQSxPQUFBLFNBQUEsZ0JBQUFBLEVBQUEsTUFBQSxPQUFBLE1BQ0E0TyxJQUFBbUcsS0FBQSxLQUFBLGFBQUEsS0FBQSxLQUFBQSxFQUFBLElBQ0FBLE1BQ0ExTSxJQUFBLEtBQUEsZUFBQSxnQkFBQUEsRUFBQSxTQUFBO0FBQ0EsYUFBQXVHLE1BQUFtRyxLQUVBLEtBQUEsUUFBQSxRQUFBLEVBQUEsTUFBQW5HLEVBQUEsQ0FBQSxHQUVBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGFBQUE7QUFDQSxVQUFBLEtBQUEsTUFBQTtBQUNBLFlBQUFvRyxJQUFBO0FBQ0EsbUJBQUFwRyxLQUFBLE9BQUEsT0FBQSxLQUFBLElBQUEsR0FBQTtBQUNBLGdCQUFBLEVBQUEsWUFBQXFHLEVBQUEsSUFBQXJHO0FBQ0EsY0FBQWhQLEVBQUFxVixDQUFBLElBQ0FBLEVBQUEsS0FBQSxNQUFBLEtBQUEsT0FBQSxJQUNBQTtBQUVBLG1CQUFBckc7QUFFQSxVQUFBb0csTUFDQUEsSUFBQXBHO0FBQUEsUUFFQTtBQUNBLGVBQUFvRztBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxZQUFBOztBQUNBLGNBQUFoVixJQUFBLEtBQUEsV0FBQSxnQkFBQUEsRUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBO0FBQ0EsYUFBQSxLQUFBLFlBQUEsRUFBQSxRQUFBLFVBQUEsWUFBQSxJQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUE7QUFDQSxhQUFBO0FBQUEsUUFDQSxTQUFBLEtBQUEsT0FBQTtBQUFBLFFBQ0EsR0FBQSxLQUFBLFlBQUEsRUFBQSxRQUFBLGFBQUEsWUFBQSxJQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQVFBLE9BQUE7QUFDQSxhQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxXQUFBO0FBQ0EsYUFBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUE7QUFDQSxhQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxnQkFBQTtBQUNBLGFBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGFBQUE7QUFDQSxhQUFBdkIsR0FBQSxLQUFBLFVBQUEsS0FBQSxVQUFBLEVBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxZQUFBO0FBQ0EsYUFBQSxLQUFBO0FBQUEsUUFDQSxLQUFBLGtCQUFBLEtBQUEsY0FBQSxLQUFBLE1BQUEsS0FBQSxPQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUE7QUFDQSxhQUFBLEtBQUEsY0FBQSxDQUFBMFMsTUFBQUEsRUFBQSxPQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsWUFBQTtBQUNBLGFBQUEsS0FBQSxjQUFBLENBQUFBLE1BQUFBLEVBQUEsU0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUE7QUFDQSxhQUFBLEtBQUEsZUFBQSxDQUFBQSxNQUFBQSxFQUFBLE9BQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxjQUFBO0FBQ0EsYUFBQSxLQUFBLGVBQUEsQ0FBQUEsTUFBQUEsRUFBQSxXQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsVUFBQTtBQUNBLGFBQUEsQ0FBQSxDQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxXQUFBO0FBQ0EsYUFBQSxDQUFBLENBQUEsS0FBQSxTQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBO0FBQ0EsYUFBQSxDQUFBLEtBQUEsV0FBQSxDQUFBLENBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGNBQUE7QUFDQSxZQUFBLEVBQUEsWUFBQWxOLE1BQUEsS0FBQTtBQUNBLGFBQUEsQ0FBQSxDQUFBQSxLQUFBLE9BQUEsS0FBQUEsQ0FBQSxFQUFBLFNBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxRQUFBMkQsR0FBQSxVQUFBO0FBQUEsTUFDQSxVQUFBO0FBQ0EsZUFBQSxDQUFBLEtBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQSxDQUFBO0FBQUEsSUFFQSxhQUFBO0FBQ0EsYUFBQSxPQUFBLE9BQUEsS0FBQSxrQkFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFFBQUE7QUFDQSxhQUFBLE9BQUEsT0FBQSxLQUFBLGFBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxTQUFBO0FBQ0EsYUFBQSxPQUFBLE9BQUEsS0FBQSxjQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsdUJBQUE7QUFDQSxhQUFBLEtBQUEsdUJBQUEsS0FBQSxrQkFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGtCQUFBO0FBQ0EsYUFBQSxLQUFBLHVCQUFBLEtBQUEsYUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLG1CQUFBO0FBQ0EsYUFBQSxLQUFBLHVCQUFBLEtBQUEsY0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQ0EsU0FBQSxVQUFBLEVBQUEsR0FDQSxLQUFBLGtCQUFBLEdBRUEsS0FBQSxTQUFBLFVBQUEsS0FBQSxxQkFBQSxHQUNBLEtBQUEsVUFBQSxZQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsZ0JBQUE7QUFDQSxTQUFBLFVBQUEsU0FBQSxHQUNBLEtBQUEsVUFBQSxFQUFBO0FB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LFFBQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxVQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsTUFBQSxFQUFBLE1BQUEsQ0FBQSxRQUFBLEtBQUEsR0FBQSxVQUFBLEdBQUE7QUFBQSxJQUNBLE1BQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxPQUFBLEVBQUEsTUFBQSxRQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsUUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLFFBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxVQUFBLEVBQUEsTUFBQSxTQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsZ0JBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUNBLFdBQUE7QUFBQSxNQUNBLFFBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUFBLElBQ0EsVUFBQTtBQUNBLGFBQUEsSUFBQXZFLEVBQUEsTUFBQSxFQUFBLFFBQUEsS0FBQSxRQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQTtBQUNBLGFBQUFzTCxFQUFBLEtBQUEsTUFBQSxLQUFBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxXQUFBO0FBQ0EsWUFBQSxFQUFBLFFBQUF0SSxFQUFBLElBQUEsTUFDQSxFQUFBLE9BQUFxTixFQUFBLElBQUFyTjtBQUNBLGFBQ0FxTixNQUFBLE9BQ0EsQ0FBQSxDQUFBQSxLQUFBLEtBQUEsWUFBQSxpQkFBQSxLQUFBO0FBQUEsSUFFQTtBQUFBLElBRUEsUUFBQTtBQUNBLGFBQUEsS0FBQSxXQUFBLEtBQUEsU0FBQSxLQUFBLE1BQUEsSUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBO0FBRUEsYUFBQSxLQUFBLFNBQUEsS0FBQSxXQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUF4SSxFQUFBLFNBQUE7QUFBQSxNQUNBLE1BQUEs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QUFBO0FBQUEsRUFDQSxRQUFBLENBQUF5UCxFQUFBO0FBQUEsRUFFQSxPQUFBO0FBQUEsSUFDQSxRQUFBLEVBQUEsTUFBQSxRQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsTUFBQSxFQUFBLE1BQUEsUUFBQSxVQUFBLEdBQUE7QUFBQSxJQUNBLE1BQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxNQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsS0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLFFBQUE7QUFDQSxhQUFBN0gsRUFBQSxLQUFBLFFBQUEsS0FBQSxPQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsWUFBQTtBQUNBLGFBQUFPLEdBQUEsS0FBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZUFBQTtBQUNBLGFBQUEsT0FBQSxLQUFBLEtBQUEsS0FBQSxFQUFBLFNBQUEsS0FBQSxDQUFBLEtBQUEsTUFBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxTQUFBO0FBQUEsSUFDQSxZQUFBakIsR0FBQTtBQUVBLGFBQUFBLEVBQUEsY0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFdBQUFBLEdBQUE3SSxJQUFBLE1BQUE7QUFDQSxVQUFBLEtBQUEsWUFBQTZJLENBQUE7QUFDQSxRQUFBLEtBQUEsWUFDQSxLQUFBLGdCQUFBLFdBQUFBLEdBQUE3SSxDQUFBLElBRUEsS0FBQSxRQUFBLEtBQUE7QUFBQSxVQUNBLE1BQUEsR0FBQSxLQUFBO0FBQUEsVUFDQSxPQUFBLEVBQUEsTUFBQUEsRUFBQTtBQUFBLFVBQ0EsUUFBQTtBQUFBLFFBQ0EsQ0FBQTtBQUFBO0FBR0EsY0FBQSxJQUFBLE1BQUEsMkNBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxpQkFBQUEsR0FBQTtBQUNBLFdBQUEsV0FBQSxLQUFBLE1BQUFBLElBQUFBLENBQUEsR0FDQSxLQUFBLGdCQUFBLEVBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUNBLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzVGQSxJQUFJ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QUFHLEdBQUcsQ0FBQyxJQUFJQSxFQUFJLEdBQUksQ0FBQSxHQUFHLENBQUM7QUFDdkIsR0FFSUUsS0FBa0IsQ0FBRTtBQ2dDeEIsTUFBQUMsS0FBQS9OLEVBQUEsVUFBQSxrQkFBQTtBQUFBLEVBQ0EsWUFBQSxFQUFBLGNBQUFtVyxHQUFBO0FBQUEsRUFDQSxRQUFBLENBQUFOLEVBQUE7QUFBQSxFQUNBLFFBQUEsQ0FBQSxXQUFBO0FBQUEsRUFFQSxPQUFBO0FBQUEsSUFDQSxRQUFBLEVBQUEsTUFBQSxRQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsVUFBQSxFQUFBLE1BQUEsUUFBQSxVQUFBLEdBQUE7QUFBQSxJQUNBLE1BQUEsRUFBQSxNQUFBLENBQUEsT0FBQSxNQUFBLEdBQUEsU0FBQSxLQUFBO0FBQUEsSUFDQSxNQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsTUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLFFBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxXQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsT0FBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLEtBQUE7QUFBQSxJQUNBLE9BQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxFQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUNBLFdBQUE7QUFBQSxNQUNBLFFBQUEsS0FBQSxRQUFBLEtBQUEsT0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQUEsSUFDQSxPQUFBO0FBQ0EsYUFBQSxLQUFBLFVBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxRQUFBO0FBQ0EsYUFBQSxLQUFBLFVBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxXQUFBO0FBQ0EsYUFBQSxLQUFBLFVBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxhQUFBO0FBQ0EsYUFBQTtBQUFBLFFBQ0EsR0FBQSxLQUFBO0FBQUEsUUFDQSxRQUFBLEtBQUE7QUFBQSxNQUNBO0FBQUEsSUFD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RUFDQTtBQUFBLEVBRUEsUUFBQSxDQUFBbk8sQ0FBQTtBQUFBLEVBRUEsT0FBQTtBQUNBLFdBQUE7QUFBQSxNQUNBLFFBQUE7QUFBQSxNQUNBLFFBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUFBLElBQ0EsUUFBQTtBQUNBLGFBQUEsS0FBQSxPQUFBLFNBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxTQUFBO0FBQ0EsYUFBQTtBQUFBLFFBQ0EsUUFBQSxLQUFBLFVBQUEsUUFBQSxLQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGNBQUE7QUFDQSxhQUFBLEtBQUEsV0FBQSxTQUFBO0FBQUEsUUFDQSxNQUFBO0FBQUEsUUFDQSxRQUFBO0FBQUEsUUFDQSxXQUFBO0FBQUEsUUFDQSxRQUFBO0FBQUEsUUFDQSxPQUFBO0FBQUEsUUFDQSxNQUFBO0FBQUEsUUFDQSxNQUFBO0FBQUEsVUFDQSxTQUFBLENBQUFvTyxNQUFBLEtBQUEsWUFBQUEsQ0FBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxtQkFBQTtBQUNBLGFBQUEsS0FBQSxXQUFBLFNBQUE7QUFBQSxRQUNBLFdBQUE7QUFBQSxVQUdBLGNBQUEsTUFDQSxLQUFBLGlCQUFBLEtBQUEsQ0FBQTljLE1BQUFBLEVBQUEsUUFBQTtBQUFBLFFBQ0E7QUFBQSxRQUNBLFNBQUE7QUFBQSxVQUNBLE1BQUE7QUFBQSxVQUNBLFFBQUEsQ0FBQSxHQUFBLEdBQUEsR0FBQSxHQUFBLEdBQUEsQ0FBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxtQkFBQTtBQUNBLGFBQUEsS0FBQSxXQUFBLFNBQUE7QUFBQSxRQUNBLFlBQUE7QUFBQSxRQUNBLGFBQUE7QUFBQSxRQUNBLFlBQUE7QUFBQSxRQUNBLFdBQUE7QUFBQSxNQUNBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxjQUFBO0FBQ0EsYUFBQSxLQUFBLFdBQUEsU0FBQTtBQUFBLFFBQ0EsTUFBQTtBQUFBLFFBQ0EsTUFBQTtBQUFBLE1BQ0EsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGlCQUFBO0FBQ0EsWUFBQTtBQUFBLFFBQ0EsYUFBQStjO0FBQUEsUUFDQSxrQkFBQUM7QUFBQSxRQUNBLGtCQUFBQztBQUFBLFFBQ0EsYUFBQUM7QUFBQSxNQUNBLElBQUE7QUFDQSxhQUFBO0FBQUEsUUFDQUg7QUFBQSxRQUNBQztBQUFBLFFBQ0FDO0FBQUEsUUFDQUM7QUFBQSxNQUNBLEVBQUEsT0FBQSxDQUFBNWMsTUFBQUEsRUFBQSxTQUFBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxlQUFBO0FBQ0EsYUFBQTtBQUFBLFFBQ0Esb0JBQUE7QUFBQSxVQUNBLFVBQUE7QUFBQSxVQUNBLFVBQUE7QUFBQSxVQUNBLGdCQUFBO0FBQUEsUUFDQSxFQUFBLEtBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUE7QUFDQSxhQUFBO0FBQUEsUUFDQSxVQUFBLENBQUEsS0FBQTtBQUFBLFFBQ0EsV0FBQSxLQUFBO0FBQUEsUUFDQSxtQkFBQSxDQUFBLEtBQUEsWUFBQTtBQUFBLFFBQ0EsbUJBQUEsQ0FBQSxLQUFBLFlBQUE7QUFBQSxRQUNBLGNBQUEsS0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxXQUFBeUQsRUFBQSxhQUFBO0FBQUEsTUFDQSxNQUFBO0FBQUEsTUFDQSxTQUFBO0FBQUEsSUFDQSxDQUFBO0FBQUEsSUFFQSxZQUFBQSxFQUFBLGNBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLFNBQUE7QUFBQSxJQUVBLENBQUE7QUFBQSxJQUVBLGFBQUFBLEVBQUEsZUFBQTtBQUFBLE1BQ0EsTUFBQSxDQUFBLFFBQUEsT0FBQTtBQUFBLE1BQ0EsU0FBQTtBQUFBLE1BQ0EsSUFBQW9aLEdBQUE7QUFDQSxlQUFBbGYsRUFBQWtmLENBQUEsSUFDQUEsSUFDQTtBQUFBLFVBQ0EsT0FBQSxDQUFBLENBQUFBO0FBQUEsVUFDQSxPQUFBLENBQUEsQ0FBQUE7QUFBQSxRQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0EsQ0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLE9BQUE7QUFBQSxJQUNBLFdBQUE7QUFBQSxJQUNBLFdBQUE7QUFBQSxJQUNBLGFBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQ0EsUUFBQTlELElBQUEsSUFDQUMsSUFBQTtBQUVBLFVBQUFFLElBQUEsTUFBQTtBQUNBLE1BQUEsQ0FBQSxLQUFBLFdBQUFILE1BQ0FBLElBQUEsSUFDQSxLQUFBLFNBQUE7QUFBQSxJQUVBLEdBRUFJLElBQUEsTUFBQSxLQUFBLFFBQUEsR0FFQUMsSUFBQSxNQUFBO0FBQ0EsV0FBQSxPQUFBLEdBQ0FGLEVBQUE7QUFBQSxJQUNBLEdBRUE0RCxJQUFBNUUsR0FBQSxDQUFBNkUsTUFBQTtBQUNBLE1BQUEvRCxJQUFBLElBQ0EsS0FBQSxRQUFBK0QsRUFBQSxHQUNBaEUsSUFBQSxJQUNBRyxFQUFBO0FBQUEsSUFDQSxHQUFBLEdBQUEsR0FFQThELElBQUEsQ0FBQSxFQUFBLFNBQUFDLFFBQUE7QUFDQSxNQUFBSCxFQUFBRyxDQUFBLEdBQ0EsS0FBQSxRQUFBO0FBQUEsSUFDQTtBQUVBLFNBQUEsT0FBQSxTQUFBLENBQUF4aEIsTUFBQTtBQUNBLE1BQUF1ZCxJQUNBQSxJQUFBLEtBRUEsS0FBQSxPQUFBLFdBQUF2ZCxHQUFBLElBQUEsS0FBQSxZQUFBO0FBQUEsSUFFQSxDQUFBLEdBRUEsS0FBQSxTQUFBLElBQUF5aEIsR0FBQTtBQUFBLE1BQ0EsR0FBQSxLQUFBO0FBQUEsTUFDQSxTQUFBL0Q7QUFBQSxNQUNBLFFBQUFDO0FBQUEsTUFDQSxVQUFBNEQ7QUFBQSxNQUNBLFlBQUEsS0FBQSxpQkFBQTtBQUFBLE1BQ0EsU0FBQSxLQUFBLFNBQUE7QUFBQSxJQUNBLENBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxnQkFBQTtBQUNBLFNBQUEsT0FBQSxRQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsU0FBQTtBQUFBLElBQ0EsYUFBQTVnQixHQUFBO0FBQ0EsWUFBQStnQixJQUFBLENBQUEsRUFBQSxTQUFBQyxHQUFBLFNBQUFDLFNBQUEsRUFBQSxHQUFBRCxHQUFBLEdBQUFDO0FBRUEsVUFBQUMsSUFBQUgsRUFBQS9nQixDQUFBLEVBQUEsR0FDQW1oQixJQUFBLFdBQUEsaUJBQUEsS0FBQSxNQUFBLE9BQUEsR0FBQSxFQUFBLE1BQUE7QUFFQSxZQUFBQyxJQUFBLENBQUFwaEIsTUFBQTtBQUNBLGNBQUEsRUFBQSxHQUFBaWhCLEVBQUEsSUFBQUYsRUFBQS9nQixDQUFBO0FBQ0EsUUFBQW1oQixLQUFBRixJQUFBQyxHQUNBQSxJQUFBRCxHQUNBLEtBQUEsU0FBQSxHQUFBLEtBQUEsSUFBQUUsR0FBQSxDQUFBO0FBQUEsTUFDQSxHQUVBbmMsSUFBQSxLQUFBLE1BQUEsVUFBQTtBQUFBLFFBQ0EsV0FBQW9jO0FBQUEsUUFFQSxRQUFBcGhCLEdBQUE7QUFDQSxVQUFBb2hCLEVBQUFwaEIsQ0FBQSxHQUNBZ0YsRUFBQSxPQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0EsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLHNCQUFBO0FBQ0EsV0FBQSxPQUFBLFdBQUEsS0FBQSxhQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsTUFBQSxZQUFBb2IsR0FBQTtBQUNBLFlBQUFpQixJQUFBLE1BQUEsS0FBQSxXQUFBO0FBQUEsUUFDQSxZQUFBO0FBQUEsVUFDQSxNQUFBO0FBQUEsWUFDQSxNQUFBO0FBQUEsWUFDQSxPQUFBO0FBQUEsWUFDQSxXQUFBO0FBQUEsVUFDQTtBQUFBLFVBQ0EsT0FBQTtBQUFBLFlBQ0EsTUFBQTtBQUFBLFlBQ0EsT0FBQTtBQUFBLFVBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQSxTQUFBO0FBQUEsVUFDQSxRQUFBLENBQUE7QUFBQSxVQUNBLE9BQUEsRUFBQSxNQUFBLFNBQUE7QUFBQSxVQUNBLFFBQUE7QUFBQSxZQUNBLFFBQUE7QUFBQSxjQUNBLE1BQUEsRUFBQSxpQkFBQUMsS0FBQTtBQUNBLGdCQUFBQSxFQUFBLFFBQUE7QUFBQSxrQkFDQSxNQUFBO0FBQUEsa0JBQ0EsT0FBQTtBQUFBLGdCQUNBLENBQUE7QUFBQSxjQUNBO0FBQUEsWUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQSxNQUFBLEtBQUEsT0FBQSxhQUFBLE1BQUE7QUFBQSxNQUNBLENBQUE7QUFDQSxVQUFBRCxHQUFBO0FBQ0EsWUFBQSxFQUFBLE1BQUFFLEdBQUEsT0FBQWpQLEVBQUEsSUFBQStPO0FBQ0EsWUFBQUU7QUFHQSxjQUFBO0FBQ0EsZ0JBQUEsSUFBQUEsQ0FBQTtBQUFBLFVBQ0EsUUFBQTtBQUNBLFlBQUFBLElBQUEsVUFBQUE7QUFBQSxVQUNBO0FBRUEsUUFBQW5CLEVBQUEsRUFBQSxNQUFBbUIsR0FBQSxPQUFBalAsR0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxtQkFBQTtBQUNBLFlBQUE7QUFBQSxRQUNBLE9BQUFrUCxJQUFBLENBQUE7QUFBQSxRQUNBLE9BQUFDLElBQUEsQ0FBQTtBQUFBLFFBQ0EsT0FBQUMsSUFBQSxDQUFBO0FBQUEsTUFDQSxJQUFBLEtBQUE7QUFDQSxhQUFBO0FBQUEsUUFFQUYsRUFBQSxRQUFBLElBQUFHLEdBQUE7QUFBQSxRQUNBSCxFQUFBLFVBQUEsSUFBQUksR0FBQTtBQUFBLFFBQ0FKLEVBQUEsYUFBQSxJQUFBSyxHQUFBO0FBQUEsUUFDQUwsRUFBQSxVQUFBLElBQUFNLEdBQUE7QUFBQSxRQUNBTixFQUFBLFNBQUEsSUFBQU8sR0FBQTtBQUFBLFFBQ0FQLEVBQUEsUUFBQSxJQUFBUSxHQUFBO0FBQUEsUUFDQVIsRUFBQSxRQUFBLElBQUFTLEdBQUE7QUFBQSxRQUdBUixFQUFBLGNBQUEsSUFBQVMsR0FBQTtBQUFBLFFBQ0FULEVBQUEsYUFBQSxJQUFBVSxHQUFBO0FBQUEsUUFDQSxJQUFBQyxHQUFBO0FBQUEsUUFDQVgsRUFBQSxXQUFBLElBQUFZLEdBQUEsRUFBQSxRQUFBWixFQUFBLFNBQUE7QUFBQSxRQUNBQSxFQUFBLGtCQUFBLElBQUFhLEdBQUE7QUFBQSxTQUNBYixFQUFBLGVBQUFBLEVBQUEsZUFBQSxJQUFBYyxHQUFBO0FBQUEsUUFDQWQsRUFBQSxjQUFBLElBQUFlLEdBQUE7QUFBQSxRQUNBZixFQUFBLGVBQUEsSUFBQWdCLEdBQUE7QUFBQSxRQU1BZixFQUFBLFdBQUEsSUFBQWdCLEdBQUE7QUFBQSxNQUNBLEVBQUEsT0FBQSxDQUFBQyxNQUFBLENBQUEsQ0FBQUEsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFdBQUFDLEdBQUFsVSxHQUFBO0FBQ0EsWUFBQXFMLElBQUEsQ0FBQSxHQUVBOEksSUFBQSxDQUFBLEVBQUEsTUFBQXpmLEdBQUEsTUFBQTBjLEdBQUEsT0FBQXVCLEdBQUEsY0FBQXlCLEdBQUEsU0FBQTlDLFFBQUE7QUFDQSxjQUFBRCxJQUFBLEtBQUEsT0FBQSxTQUFBM2MsSUFDQWdkLElBQUEsS0FBQSxPQUFBLFNBQUFoZDtBQUNBLFFBQUEyVyxFQUFBLEtBQUE7QUFBQSxVQUNBLE1BQUEzVztBQUFBLFVBQ0EsTUFBQTBjO0FBQUEsVUFDQSxXQUNBQyxLQUFBLGdCQUFBQSxFQUFBc0IsUUFDQXlCLEtBQUEsUUFBQSxDQUFBQTtVQUVBLFNBQUEsTUFBQTlDLElBQ0FBLEVBQUFJLEdBQUFpQixDQUFBLElBQ0FqQixFQUFBaUIsQ0FBQTtBQUFBLFFBQ0EsQ0FBQTtBQUFBLE1BQ0EsR0FFQXhkLElBQUEsS0FBQSxPQUFBK2U7QUFDQSxVQUFBL2U7QUFDQSxtQkFBQSxDQUFBM0UsR0FBQTZqQixDQUFBLEtBQUEsT0FBQSxRQUFBclUsQ0FBQSxHQUFBO0FBQ0EsZ0JBQUFzVSxJQUFBLENBQUEsUUFBQSxNQUFBLEVBQUEsU0FBQTlqQixDQUFBLElBQUEsWUFBQUEsR0FDQTJILElBQUFoRCxFQUFBbWYsSUFDQTVmLElBQUE2ZixHQUFBL2pCLENBQUEsR0FDQTRnQixJQUFBM2EsRUFBQWpHLENBQUE7QUFDQSxjQUFBMkg7QUFDQSxnQkFBQWtjLE1BQUE7QUFDQSxjQUFBRixFQUFBLEVBQUEsTUFBQXpmLEdBQUEsTUFBQTBjLEdBQUE7QUFBQSxxQkFDQXZlLEVBQUF3aEIsQ0FBQSxHQUFBO0FBQ0Esb0JBQUEsRUFBQSxNQUFBRyxHQUFBLFFBQUF0YSxHQUFBLGNBQUFrYSxHQUFBLFNBQUE5QyxFQUFBLElBQUErQztBQUNBLGtCQUFBRztBQUNBLG9CQUFBaGpCLEVBQUEwSSxDQUFBLEtBQUExSSxFQUFBMkcsQ0FBQTtBQUVBLDZCQUFBeEgsS0FBQXVKO0FBQ0Esb0JBQUEvQixFQUFBLFNBQUF4SCxDQUFBLEtBQ0F3akIsRUFBQTtBQUFBLHNCQUNBLE1BQUF6ZjtBQUFBLHNCQUNBLE1BQUEsR0FBQTBjLEtBQUF6Z0I7QUFBQSxzQkFDQSxPQUFBLEVBQUEsQ0FBQTZqQixJQUFBN2pCLEVBQUE7QUFBQSxzQkFDQSxjQUFBeWpCO0FBQUEsc0JBQ0EsU0FBQTlDO0FBQUEsb0JBQ0EsQ0FBQTtBQUFBO0FBS0EsZ0JBQUE2QyxFQUFBLEVBQUEsTUFBQXpmLEdBQUEsTUFBQTBjLEdBQUEsY0FBQWdELEdBQUEsU0FBQTlDLEVBQUEsQ0FBQTtBQUFBLFlBRUE7QUFBQTtBQUFBLFFBRUE7QUFFQSxhQUFBakc7QUFBQSxJQUNBO0FBQUEsSUFFQSxlQUFBOztBQUNBLE9BQUFoUyxLQUFBckksSUFBQSxLQUFBLEtBQUEsbUJBQUEsUUFBQXFJLEVBQUEsS0FBQXJJLElBQ0EsS0FBQSxPQUFBLE1BQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUNBLENBQUE7QUFFQSxNQUFBcWlCLFdBQUFvQixHQUFBO0FBQUEsRUFDQSxJQUFBLE9BQUE7QUFDQSxXQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsSUFBQSxTQUFBO0FBQ0EsV0FBQTtBQUFBLE1BQ0EsVUFBQTtBQUFBLFFBQ0EsRUFBQSxLQUFBLFFBQUE7QUFBQSxNQUNBO0FBQUEsTUFDQSxPQUFBLE1BQUEsQ0FBQSxTQUFBLENBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsU0FBQSxFQUFBLE1BQUEvZ0IsS0FBQTtBQUNBLFdBQUEsTUFBQWdoQixHQUFBaGhCLENBQUE7QUFBQSxFQUNBO0FBQ0E7QUFDQSxNQUFBNmYsV0FBQW9CLEdBQUE7QUFBQSxFQUNBLElBQUEsU0FBQTtBQUNBLFdBQUE7QUFBQSxNQUNBLE9BQUE7QUFBQSxRQUNBLE1BQUE7QUFBQSxVQUNBLFNBQUE7QUFBQSxRQUNBO0FBQUEsUUFDQSxPQUFBO0FBQUEsVUFDQSxTQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBLFdBQUE7QUFBQSxNQUNBLFVBQUEsQ0FBQTtBQUFBLFFBQ0EsS0FBQTtBQUFBLFFBQ0EsVUFBQSxDQUFBQyxPQUFBO0FBQUEsVUFDQSxNQUFBQSxFQUFBLGFBQUEsTUFBQTtBQUFBLFVBQ0EsT0FBQUEsRUFBQSxhQUFBLE9BQUE7QUFBQSxRQUNBO0FBQUEsTUFDQSxDQUFBO0FBQUEsTUFDQSxPQUFBLENBQUEzTSxNQUFBLENBQUEsS0FBQUEsRUFBQSxPQUFBLENBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDNWhCQSxJQUFJakYsS0FBUyxXQUFZO0FBQ3ZCLE1BQUlDLElBQUksTUFDSkMsSUFBR0QsRUFBSSxnQkFDUHpDLElBQUd5QyxFQUFJLE1BQU0sTUFBSUM7QUFFckIsU0FBTzFDLEVBQUcsT0FBTztBQUFBLElBQ2YsYUFBYTtBQUFBLElBQ2IsT0FBTztBQUFBLE1BQ0wsMkJBQTJCLENBQUN5QyxFQUFJO0FBQUEsTUFDaEMsNkJBQTZCQSxFQUFJO0FBQUEsSUFDbEM7QUFBQSxFQUNMLEdBQUssQ0FBQ3pDLEVBQUcsbUJBQW1CeUMsRUFBSSxHQUFHQSxFQUFJLEdBQUc7QUFBQSxJQUN0QyxLQUFLO0FBQUEsSUFDTCxPQUFPO0FBQUEsTUFDTCxlQUFlO0FBQUEsTUFDZixhQUFlQSxFQUFJO0FBQUEsTUFDbkIsbUJBQW1CO0FBQUEsTUFDbkIsU0FBV0EsRUFBSSxZQUFZQSxFQUFJLGlCQUFpQixDQUFFO0FBQUEsTUFDbEQsZ0JBQWdCQSxFQUFJO0FBQUEsTUFDcEIsWUFBWUEsRUFBSTtBQUFBLE1BQ2hCLGVBQWVBLEVBQUk7QUFBQSxNQUNuQixnQkFBZ0JBLEVBQUk7QUFBQSxNQUNwQixVQUFZQSxFQUFJO0FBQUEsTUFDaEIsVUFBWUEsRUFBSTtBQUFBLE1BQ2hCLFlBQWNBLEVBQUk7QUFBQSxNQUNsQixtQkFBbUIsQ0FBQ0EsRUFBSTtBQUFBLE1BQ3hCLG1CQUFtQixDQUFDLENBQUNBLEVBQUk7QUFBQSxNQUN6QixtQkFBbUIsQ0FBQ0EsRUFBSTtBQUFBLE1BQ3hCLG1CQUFtQixDQUFDQSxFQUFJO0FBQUEsTUFDeEIsU0FBV0EsRUFBSTtBQUFBLElBQ2hCO0FBQUEsSUFDRCxJQUFJO0FBQUEsTUFDRixNQUFRLFNBQVVTLEdBQVE7QUFDeEIsUUFBQVQsRUFBSSxXQUFXO0FBQUEsTUFDaEI7QUFBQSxNQUNELEtBQU9BLEVBQUk7QUFBQSxNQUNYLGlCQUFpQkEsRUFBSTtBQUFBLElBQ3RCO0FBQUEsSUFDRCxPQUFPO0FBQUEsTUFDTCxPQUFPQSxFQUFJO0FBQUEsTUFDWCxVQUFVLFNBQVV1SixHQUFLO0FBQ3ZCLFFBQUF2SixFQUFJLGtCQUFrQnVKO0FBQUEsTUFDdkI7QUFBQSxNQUNELFlBQVk7QUFBQSxJQUNiO0FBQUEsRUFDRixHQUFFLG1CQUFtQnZKLEVBQUksWUFBWSxFQUFLLEdBQUdBLEVBQUksU0FBUyxDQUFDLEdBQUdBLEVBQUksa0JBQWtCekMsRUFBRyxVQUFVO0FBQUEsSUFDaEcsYUFBYTtBQUFBLElBQ2IsT0FBTztBQUFBLE1BQ0wsTUFBUTtBQUFBLE1BQ1IsVUFBWXlDLEVBQUk7QUFBQSxJQUNqQjtBQUFBLElBQ0QsSUFBSTtBQUFBLE1BQ0YsT0FBU0EsRUFBSTtBQUFBLElBQ2Q7QUFBQSxFQUNGLENBQUEsSUFBSUEsRUFBSSxJQUFJLEdBQUcsQ0FBQztBQUNuQixHQUVJRSxLQUFrQixDQUFFO0FDK0t4QixNQUFBQyxLQUFBK0ksRUFBQSxTQUFBLGVBQUE7QUFBQSxFQUNBLFlBQUEsRUFBQSxnQkFBQTBJLEdBQUE7QUFBQSxFQUNBLFFBQUEsQ0FBQTlILEVBQUE7QUFBQSxFQUVBLE9BQUE7QUFDQSxXQUFBO0FBQUEsTUFDQSxpQkFBQTtBQUFBLE1BQ0EsVUFBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQUEsSUFDQSxpQkFBQTtBQUFBLE1BQ0EsTUFBQTtBQUNBLGVBQUEsS0FBQSxZQUNBLEtBQUEsaUJBQUEsQ0FBQSxHQUNBO0FBQUEsVUFHQSxDQUFBcGMsTUFBQSxLQUFBLGtCQUFBQSxDQUFBLEtBQUEsS0FBQSxhQUFBQSxDQUFBO0FBQUEsUUFDQSxFQUdBLE9BQUEsQ0FBQUEsTUFBQUEsQ0FBQSxJQUNBLEtBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxJQUFBMmMsR0FBQTtBQUdBLGFBQUEsZ0JBQUEsS0FBQSxZQUNBQSxLQUFBLENBQUEsR0FBQSxJQUFBLENBQUEzYyxNQUFBLEtBQUEsa0JBQUFBLENBQUEsQ0FBQSxJQUNBLEtBQUEsa0JBQUEyYyxDQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBO0FBQ0EsYUFBQSxLQUFBLG1CQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBM1UsRUFBQSxZQUFBO0FBQUEsTUFDQSxNQUFBO0FBQUEsTUFDQSxTQUFBO0FBQUEsSUFDQSxDQUFBO0FBQUEsSUFFQSxZQUFBQSxFQUFBLGNBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLFNBQUE7QUFBQSxJQUNBLENBQUE7QUFBQSxJQUVBLFVBQUFBLEVBQUEsWUFBQTtBQUFBLE1BQ0EsTUFBQTtBQUFBLE1BQ0EsU0FBQTtBQUFBLElBQ0EsQ0FBQTtBQUFBLElBRUEsVUFBQUEsRUFBQSxZQUFBO0FBQUEsTUFDQSxNQUFBO0FBQUEsTUFDQSxTQUFBO0FBQUEsSUFDQSxDQUFBO0FBQUEsSUFFQSxjQUFBO0FBQ0EsWUFBQSxFQUFBLGFBQUFtYyxHQUFBLFlBQUFDLEdBQUEsVUFBQUMsRUFBQSxJQUFBLEtBQUE7QUFDQSxhQUFBRixNQUNBQyxLQUFBQyxJQUFBLG1CQUFBLEtBQUEsVUFDQUQsSUFBQSxvQkFBQSxLQUFBLFVBQ0E7QUFBQSxJQUVBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUNBLElBQUEsS0FBQSxhQUdBLEtBQUEsTUFBQTtBQUFBLEVBRUE7QUFBQSxFQUVBLFNBQUE7QUFBQSxJQUVBLGVBQUE7QUFFQSxhQUFBO0FBQUEsUUFDQSxPQUFBLEtBQUE7QUFBQSxRQUNBLE1BQUEsS0FBQTtBQUFBLFFBQ0EsT0FBQSxLQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGFBQUFFLEdBQUE7QUFDQSxVQUFBLEtBQUEsVUFBQTtBQUNBLGNBQUEsRUFBQSxhQUFBcEgsR0FBQSxhQUFBRCxFQUFBLElBQUEsTUFDQU4sSUFBQU8sS0FBQUQsSUFDQTtBQUFBLFVBQ0EsQ0FBQUMsSUFBQW9IO0FBQUEsVUFHQSxDQUFBckgsSUFBQXFIO0FBQUEsUUFDQSxJQUNBQTtBQUNBLG9CQUFBLFFBQUEsS0FBQTNILENBQUEsR0FDQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsZUFBQTtBQUNBLFdBQUEsTUFBQSxRQUFBLFNBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxTQUFBMkgsR0FBQTtBQUNBLFlBQUEzSCxJQUFBLEtBQUEsYUFBQTJILENBQUE7QUFDQSxNQUFBM0gsS0FDQSxLQUFBLE1BQUEsS0FBQSxLQUFBLGtCQUFBQSxDQUFBLENBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxNQUFBLGVBQUF0WSxHQUFBO0FBQ0EsTUFBQSxLQUFBLGlCQUNBQSxLQUdBLEtBQUEsa0JBQUEsQ0FBQSxHQUNBLEtBQUEsa0JBQUEsTUFBQSxLQUFBO0FBQUEsUUFDQSxNQUFBLEtBQUEsYUFBQSxJQUFBbEUsRUFBQSxNQUFBLEVBQUEsT0FBQWtFLEVBQUEsQ0FBQSxDQUFBO0FBQUEsTUFDQSxLQUdBLEtBQUEsa0JBQUE7QUFBQSxJQUdBO0FBQUEsRUFDQTtBQUNBLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0tDeFdla2dCLEtBQUE7QUFBQSxFQUNiLFVBQVU7QUFBQSxJQUNSLFlBQVk7QUFBQSxNQUNWLE1BQU07QUFDSixlQUFPLEtBQUssVUFBVSxPQUFPLEtBQUssUUFBUTtBQUFBLE1BQzNDO0FBQUEsTUFFRCxJQUFJdmtCLEdBQU87QUFDVCxhQUFLLFFBQVFBLE1BQVUsS0FDbkIsS0FBSyxZQUFZLFNBQVNBLEdBQU8sRUFBRSxJQUFJLFdBQVdBLENBQUssSUFDdkQ7QUFBQSxNQUNMO0FBQUEsSUFDRjtBQUFBLElBR0QsWUFBWTtBQUNWLGFBQU87QUFBQSxJQUNSO0FBQUEsSUFFRCxZQUFZO0FBQ1YsYUFBTyxLQUFLLFFBQVEsUUFBUSxDQUFDLEtBQUssWUFBWSxRQUFRLEtBQUs7QUFBQSxJQUM1RDtBQUFBLElBRUQsVUFBVWdJLEVBQWtCLFlBQVk7QUFBQSxNQUN0QyxNQUFNO0FBQUEsSUFDWixDQUFLO0FBQUEsSUFFRCxNQUFNQSxFQUFrQixRQUFRO0FBQUEsTUFDOUIsTUFBTTtBQUFBLE1BQ04sSUFBSXdjLEdBQU07QUFFUixlQUFPLEtBQUssYUFBYUEsS0FBUSxPQUFPLEtBQUssS0FBS0EsQ0FBSSxJQUFJQTtBQUFBLE1BQzNEO0FBQUEsSUFDUCxDQUFLO0FBQUEsSUFFRCxLQUFLeGMsRUFBa0IsT0FBTztBQUFBLE1BQzVCLE1BQU07QUFBQSxNQUNOLElBQUlqQixHQUFLOztBQUNQLGVBQUFBLElBQU1BLE1BQVEsVUFDVjFHLElBQUEsS0FBSyxlQUFlLFNBQVMsRUFBRSxNQUFNLE1BQUssQ0FBRSxNQUE1QyxnQkFBQUEsRUFBZ0QsS0FDaEQwRyxHQUNHLEtBQUssYUFBYUEsS0FBTyxPQUFPLEtBQUssTUFBTUEsQ0FBRyxJQUFJQTtBQUFBLE1BQzFEO0FBQUEsSUFDUCxDQUFLO0FBQUEsSUFFRCxLQUFLaUIsRUFBa0IsT0FBTztBQUFBLE1BQzVCLE1BQU07QUFBQSxNQUNOLElBQUlsQixHQUFLOztBQUNQLGVBQUFBLElBQU1BLE1BQVEsVUFDVnpHLElBQUEsS0FBSyxlQUFlLFNBQVMsRUFBRSxNQUFNLE1BQUssQ0FBRSxNQUE1QyxnQkFBQUEsRUFBZ0QsS0FDaER5RyxHQUNHLEtBQUssYUFBYUEsS0FBTyxPQUFPLEtBQUssS0FBS0EsQ0FBRyxJQUFJQTtBQUFBLE1BQ3pEO0FBQUEsSUFDUCxDQUFLO0FBQUEsSUFFRCxPQUFPa0IsRUFBa0IsU0FBUztBQUFBLE1BQ2hDLE1BQU07QUFBQSxNQUNOLE1BQU07QUFHSixjQUFNLEVBQUUsS0FBQWpCLEdBQUssS0FBQUQsRUFBRyxJQUFLO0FBQ3JCLGVBQU9DLEtBQU8sUUFBUUQsS0FBTyxPQUFPLENBQUNDLEdBQUtELENBQUcsSUFBSTtBQUFBLE1BQ2xEO0FBQUEsTUFFRCxJQUFJRyxHQUFPO0FBR1QsUUFBSXBHLEVBQVFvRyxDQUFLLE1BQ2YsQ0FBQyxLQUFLLEtBQUssS0FBSyxHQUFHLElBQUlBO0FBQUEsTUFFMUI7QUFBQSxJQUNQLENBQUs7QUFBQSxFQUNGO0FBQUEsRUFFRCxTQUFTO0FBQUEsSUFDUCxpQkFBaUI7QUFDZixZQUFNUyxJQUFjLENBQUUsR0FDaEIsRUFBRSxPQUFBVCxHQUFPLEtBQUFGLEdBQUssS0FBQUQsR0FBSyxVQUFBVCxHQUFVLE1BQUFtZSxFQUFJLElBQUs7QUFXNUMsVUFWSXZkLElBQ0ZTLEVBQVksUUFBUVQsS0FFaEJGLEtBQU8sU0FDVFcsRUFBWSxNQUFNWCxJQUVoQkQsS0FBTyxTQUNUWSxFQUFZLE1BQU1aLEtBR2xCVCxLQUFZO0FBQ2QsUUFBQXFCLEVBQVksV0FBV3JCO0FBQUEsZUFDZG1lLEdBQU07QUFDZixjQUFNbmUsS0FBWSxHQUFHbWUsSUFBTyxNQUFNLEdBQUcsRUFBRSxNQUFNLElBQUk7QUFDakQsUUFBSW5lLElBQVcsSUFDYnFCLEVBQVksV0FBV3JCLElBRXZCcUIsRUFBWSxVQUFVO0FBQUEsTUFFekI7QUFDRCxhQUFJLEtBQUssY0FDUEEsRUFBWSxVQUFVLEtBRWpCQTtBQUFBLElBQ1I7QUFBQSxFQUNGO0FBQ0g7QUM1R0EsSUFBSTJLLEtBQVMsV0FBWTtBQUN2QixNQUFJQyxJQUFJLE1BQ0pDLElBQUdELEVBQUksZ0JBQ1B6QyxJQUFHeUMsRUFBSSxNQUFNLE1BQUlDO0FBRXJCLFNBQU8xQyxFQUFHLGVBQWV5QyxFQUFJLEdBQUdBLEVBQUksR0FBRztBQUFBLElBQ3JDLEtBQUs7QUFBQSxJQUNMLGFBQWE7QUFBQSxJQUNiLE9BQU87QUFBQSxNQUNMLElBQU1BLEVBQUk7QUFBQSxNQUNWLE1BQVE7QUFBQSxNQUNSLEtBQU9BLEVBQUk7QUFBQSxNQUNYLEtBQU9BLEVBQUk7QUFBQSxNQUNYLE1BQVFBLEVBQUk7QUFBQSxJQUNiO0FBQUEsSUFDRCxPQUFPO0FBQUEsTUFDTCxPQUFPQSxFQUFJO0FBQUEsTUFDWCxVQUFVLFNBQVV1SixHQUFLO0FBQ3ZCLFFBQUF2SixFQUFJLGFBQWF1SjtBQUFBLE1BQ2xCO0FBQUEsTUFDRCxZQUFZO0FBQUEsSUFDYjtBQUFBLEVBQ0wsR0FBSyxlQUFldkosRUFBSSxZQUFZLEVBQUssR0FBR0EsRUFBSSxTQUFTLENBQUM7QUFDMUQsR0FFSUUsS0FBa0IsQ0FBRTtBQ0d4QixNQUFBQyxLQUFBK0ksRUFBQTtBQUFBLEVBQUE7QUFBQSxJQUNBO0FBQUEsSUFBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBO0FBQUEsSUFDQSxZQUFBLEVBQUEsWUFBQWlKLEdBQUE7QUFBQSxJQUNBLFFBQUEsQ0FBQUYsRUFBQTtBQUFBLElBQ0EsYUFBQTtBQUFBLElBQ0EsV0FBQTtBQUFBLElBRUEsVUFBQTtBQUFBLE1BQ0EsWUFBQTtBQUNBLGVBQUEsS0FBQSxTQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzNDQSxJQUFJbFMsS0FBUyxXQUFZO0FBQ3ZCLE1BQUlDLElBQUksTUFDSkMsSUFBR0QsRUFBSSxnQkFDUHpDLElBQUd5QyxFQUFJLE1BQU0sTUFBSUM7QUFFckIsU0FBT0QsRUFBSSxVQUFVekMsRUFBRyxPQUFPO0FBQUEsSUFDN0IsYUFBYTtBQUFBLElBQ2IsT0FBT3lDLEVBQUksT0FBTztBQUFBLElBQ2xCLE9BQU9BLEVBQUksT0FBTztBQUFBLElBQ2xCLE9BQU87QUFBQSxNQUNMLElBQU1BLEVBQUk7QUFBQSxJQUNYO0FBQUEsRUFDRixHQUFFLENBQUNBLEVBQUksYUFBYXpDLEVBQUcsT0FBTztBQUFBLElBQzdCLGFBQWE7QUFBQSxFQUNkLEdBQUUsQ0FBQ3lDLEVBQUksWUFBWXpDLEVBQUcsdUJBQXVCO0FBQUEsSUFDNUMsT0FBTztBQUFBLE1BQ0wsUUFBVXlDLEVBQUksa0JBQWtCQSxFQUFJLFFBQVFBLEVBQUksWUFBWUEsRUFBSSxPQUFPO0FBQUEsTUFDdkUsVUFBWUEsRUFBSTtBQUFBLE1BQ2hCLE1BQVFBLEVBQUk7QUFBQSxNQUNaLE1BQVFBLEVBQUk7QUFBQSxNQUNaLE9BQVNBLEVBQUk7QUFBQSxNQUNiLFVBQVlBLEVBQUksWUFBWUEsRUFBSTtBQUFBLE1BQ2hDLFdBQWFBLEVBQUk7QUFBQSxNQUNqQixhQUFlQSxFQUFJO0FBQUEsSUFDcEI7QUFBQSxFQUNGLENBQUEsSUFBSUEsRUFBSSxZQUFZekMsRUFBR3lDLEVBQUksV0FBVztBQUFBLElBQ3JDLEtBQUs7QUFBQSxJQUNMLE9BQU87QUFBQSxNQUNMLFVBQVlBLEVBQUk7QUFBQSxNQUNoQixNQUFRQSxFQUFJO0FBQUEsTUFDWixRQUFVO0FBQUEsSUFDWDtBQUFBLEVBQ0YsQ0FBQSxJQUFJQSxFQUFJLFNBQVN6QyxFQUFHLFFBQVE7QUFBQSxJQUMzQixVQUFVO0FBQUEsTUFDUixXQUFheUMsRUFBSSxHQUFHQSxFQUFJLE9BQU9BLEVBQUksV0FBVSxDQUFFLENBQUM7QUFBQSxJQUNqRDtBQUFBLEVBQ0wsQ0FBRyxJQUFJekMsRUFBRyxRQUFRO0FBQUEsSUFDZCxVQUFVO0FBQUEsTUFDUixXQUFheUMsRUFBSSxHQUFHQSxFQUFJLGFBQWFBLEVBQUksUUFBUUEsRUFBSSxVQUFVLENBQUM7QUFBQSxJQUNqRTtBQUFBLEVBQ0wsQ0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJQSxFQUFJLEdBQUksR0FBRXpDLEVBQUcscUJBQXFCO0FBQUEsSUFDMUMsT0FBTztBQUFBLE1BQ0wsV0FBYXlDLEVBQUk7QUFBQSxNQUNqQixXQUFhQSxFQUFJLGNBQWNBLEVBQUk7QUFBQSxNQUNuQyxVQUFZQSxFQUFJLGNBQWNBLEVBQUk7QUFBQSxNQUNsQyxZQUFjQSxFQUFJO0FBQUEsTUFDbEIsVUFBWUEsRUFBSTtBQUFBLE1BQ2hCLFNBQVdBLEVBQUk7QUFBQSxNQUNmLFFBQVVBLEVBQUk7QUFBQSxNQUNkLFVBQVlBLEVBQUk7QUFBQSxNQUNoQixNQUFRQSxFQUFJO0FBQUEsTUFDWixNQUFRQSxFQUFJO0FBQUEsTUFDWixNQUFRQSxFQUFJO0FBQUEsTUFDWixPQUFTQSxFQUFJO0FBQUEsSUFDZDtBQUFBLElBQ0QsSUFBSTtBQUFBLE1BQ0YsUUFBVSxTQUFVUyxHQUFRO0FBQzFCLGVBQU9ULEVBQUksV0FBV0EsRUFBSSxVQUFVO0FBQUEsTUFDckM7QUFBQSxJQUNGO0FBQUEsRUFDRixDQUFBLENBQUMsR0FBRyxDQUFDLElBQUlBLEVBQUksR0FBRTtBQUNsQixHQUVJRSxLQUFrQixDQUFFO0FDWXhCLE1BQUFDLEtBQUErSSxFQUFBLFNBQUEsVUFBQTtBQUFBLEVBQ0EsUUFBQSxDQUFBOEMsRUFBQTtBQUFBLEVBRUEsY0FBQXZiLEdBQUE7QUFFQSxXQUFBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFNBQUE7QUFBQSxJQUNBLGFBQUE7QUFDQSxhQUFBLElBQUE1QyxFQUFBLE1BQUEsRUFBQSxNQUFBLEtBQUEsWUFBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQ0EsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7S0NyRkFzUyxLQUFBK0ksRUFBQSxTQUFBLFNBQUE7QUFBQSxFQUNBLGNBQUEsTUFBQTtBQUFBO0FBQUEsRUFDQSxjQUFBO0FBQUEsRUFDQSxlQUFBO0FBQUEsRUFDQSxhQUFBO0FBQUE7QUFLQSxVQUFBLEVBQUEsTUFBQXpYLE1BQUFtTCxFQUFBLElBQUEvTDtBQUNBLFdBQUErTDtBQUFBLEVBQ0E7QUFDQSxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2ZBLElBQUltRCxLQUFTLFdBQVk7QUFDdkIsTUFBSUMsSUFBSSxNQUNKQyxJQUFHRCxFQUFJLGdCQUNQekMsSUFBR3lDLEVBQUksTUFBTSxNQUFJQztBQUVyQixTQUFPMUMsRUFBRyxZQUFZeUMsRUFBSSxHQUFHQSxFQUFJLEdBQUc7QUFBQSxJQUNsQyxLQUFLO0FBQUEsSUFDTCxhQUFhO0FBQUEsSUFDYixPQUFPO0FBQUEsTUFDTCxJQUFNQSxFQUFJO0FBQUEsTUFDVixLQUFPQSxFQUFJO0FBQUEsSUFDWjtBQUFBLElBQ0QsVUFBVTtBQUFBLE1BQ1IsT0FBU0EsRUFBSTtBQUFBLElBQ2Q7QUFBQSxFQUNMLEdBQUssWUFBWUEsRUFBSSxZQUFZLEVBQUssR0FBR0EsRUFBSSxTQUFTLENBQUM7QUFDdkQsR0FFSUUsS0FBa0IsQ0FBRTtBQ0Z4QixNQUFBQyxLQUFBK0ksRUFBQSxTQUFBLFlBQUE7QUFBQSxFQUNBLFFBQUEsQ0FBQStJLEVBQUE7QUFBQSxFQUNBLFVBQUE7QUFBQSxJQUNBLGdCQUFBO0FBQ0EsVUFBQSxFQUFBLE9BQUF2a0IsR0FBQSxPQUFBaUgsR0FBQSxNQUFBdWQsRUFBQSxJQUFBO0FBQ0EsYUFBQXhrQixNQUFBLFFBQ0FpSCxNQUNBakgsS0FBQWlILEVBQUEsS0FFQXVkLE1BQ0F4a0IsSUFBQSxLQUFBLE1BQUFBLElBQUF3a0IsQ0FBQSxJQUFBQSxNQUdBeGtCLElBQUEsSUFFQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxjQUFBO0FBQ0EsWUFBQSxFQUFBLE9BQUFpSCxFQUFBLElBQUE7QUFDQSxVQUFBQTtBQUNBLGVBQUFBLEVBQUEsS0FBQUEsRUFBQTtBQUFBLElBRUE7QUFBQSxFQUNBO0FBQ0EsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDekNBLElBQUlvTCxLQUFTLFdBQVk7QUFDdkIsTUFBSUMsSUFBSSxNQUNKQyxJQUFHRCxFQUFJLGdCQUNQekMsSUFBR3lDLEVBQUksTUFBTSxNQUFJQztBQUVyQixTQUFPMUMsRUFBRyxNQUFNO0FBQUEsSUFDZCxhQUFhO0FBQUEsSUFDYixPQUFPLGVBQWV5QyxFQUFJLE9BQU8sVUFBVTtBQUFBLElBQzNDLE9BQU87QUFBQSxNQUNMLElBQU1BLEVBQUk7QUFBQSxJQUNYO0FBQUEsRUFDRixHQUFFQSxFQUFJLEdBQUdBLEVBQUksU0FBUyxTQUFVcUssR0FBUTtBQUN2QyxXQUFPOU0sRUFBRyxNQUFNLENBQUNBLEVBQUcsU0FBUyxDQUFDQSxFQUFHLFNBQVN5QyxFQUFJLEdBQUdBLEVBQUksR0FBRztBQUFBLE1BQ3RELFlBQVksQ0FBQztBQUFBLFFBQ1gsTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLFFBQ1QsT0FBT0EsRUFBSTtBQUFBLFFBQ1gsWUFBWTtBQUFBLE1BQ3BCLENBQU87QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLFVBQVU7QUFBQSxNQUNWLGFBQWE7QUFBQSxNQUNiLE9BQU87QUFBQSxRQUNMLE1BQVE7QUFBQSxNQUNUO0FBQUEsTUFDRCxVQUFVO0FBQUEsUUFDUixPQUFTQSxFQUFJLGtCQUFrQnFLLENBQU07QUFBQSxRQUNyQyxTQUFXckssRUFBSSxHQUFHQSxFQUFJLGVBQWVBLEVBQUksa0JBQWtCcUssQ0FBTSxDQUFDO0FBQUEsTUFDbkU7QUFBQSxNQUNELElBQUk7QUFBQSxRQUNGLFFBQVUsU0FBVTVKLEdBQVE7QUFDMUIsVUFBQVQsRUFBSSxnQkFBZ0JBLEVBQUksa0JBQWtCcUssQ0FBTTtBQUFBLFFBQ2pEO0FBQUEsTUFDRjtBQUFBLElBQ1AsR0FBTyxTQUFTckssRUFBSSxZQUFZLEVBQUssR0FBR0EsRUFBSSxTQUFTLENBQUMsR0FBR0EsRUFBSSxHQUFHQSxFQUFJLEdBQUdBLEVBQUksa0JBQWtCcUssQ0FBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUFBLEVBQ3pHLENBQUcsR0FBRyxDQUFDO0FBQ1AsR0FFSW5LLEtBQWtCLENBQUU7QUNQeEIsTUFBQUMsS0FBQStJLEVBQUEsU0FBQSxTQUFBO0FBQUEsRUFDQSxRQUFBLENBQUFZLEVBQUE7QUFBQSxFQUVBLGFBQUE7QUFDQSxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNuQ0EsSUFBSS9KLEtBQVMsV0FBWTtBQUN2QixNQUFJQyxJQUFJLE1BQ0pDLElBQUdELEVBQUksZ0JBQ1B6QyxJQUFHeUMsRUFBSSxNQUFNLE1BQUlDO0FBRXJCLFNBQU8xQyxFQUFHLE9BQU87QUFBQSxJQUNmLGFBQWE7QUFBQSxJQUNiLE9BQU87QUFBQSxNQUNMLHlCQUF5QixDQUFDLENBQUN5QyxFQUFJLE9BQU87QUFBQSxJQUN2QztBQUFBLEVBQ0wsR0FBSyxDQUFDekMsRUFBRyxhQUFhO0FBQUEsSUFDbEIsYUFBYTtBQUFBLElBQ2IsT0FBTztBQUFBLE1BQ0wsUUFBVXlDLEVBQUksa0JBQWtCQSxFQUFJLFFBQVFBLEVBQUksTUFBTUEsRUFBSSxPQUFPO0FBQUEsTUFDakUsVUFBWUEsRUFBSTtBQUFBLE1BQ2hCLE1BQVFBLEVBQUk7QUFBQSxNQUNaLE1BQVFBLEVBQUk7QUFBQSxNQUNaLE9BQVNBLEVBQUk7QUFBQSxNQUNiLFVBQVlBLEVBQUk7QUFBQSxJQUNqQjtBQUFBLEVBQ0wsQ0FBRyxDQUFDLEdBQUcsQ0FBQztBQUNSLEdBRUlFLEtBQWtCLENBQUU7QUNLeEIsTUFBQUMsS0FBQStJLEVBQUEsU0FBQSxXQUFBO0FBQUEsRUFDQSxjQUFBLE1BQUE7QUFBQTtBQUFBLEVBQ0Esb0JBQUEsQ0FBQXJZLE1BQUEsQ0FBQUEsRUFBQSxVQUFBLEVBQUEsYUFBQUE7QUFBQSxFQUNBLGVBQUE7QUFBQSxFQUNBLGVBQUE7QUFBQSxFQUNBLGNBQUE7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLE9BQUE7QUFDQSxhQUFBLEtBQUEsU0FBQSxLQUFBLFFBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxTQUFBO0FBQUEsSUFDQSxtQkFBQXVKO0FBQUEsRUFDQTtBQUFBLEVBRUEsTUFBQSxjQUFBekIsR0FBQTlILEdBQUFZLEdBQUFtSCxHQUFBTSxHQUFBO0FBRUEsVUFBQUQsR0FBQU4sR0FBQTlILEdBQUErSCxHQUFBTSxDQUFBO0FBQUEsRUFDQTtBQUNBLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2pEQSxJQUFJNkcsS0FBUyxXQUFZO0FBQ3ZCLE1BQUlDLElBQUksTUFDSkMsSUFBR0QsRUFBSSxnQkFDUHpDLElBQUd5QyxFQUFJLE1BQU0sTUFBSUM7QUFFckIsU0FBTzFDLEVBQUcsT0FBTztBQUFBLElBQ2YsYUFBYTtBQUFBLEVBQ2pCLEdBQUssQ0FBQ0EsRUFBRyxVQUFVeUMsRUFBSSxHQUFHQSxFQUFJLEdBQUc7QUFBQSxJQUM3QixZQUFZLENBQUM7QUFBQSxNQUNYLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxNQUNULE9BQU9BLEVBQUk7QUFBQSxNQUNYLFlBQVk7QUFBQSxJQUNsQixDQUFLO0FBQUEsSUFDRCxLQUFLO0FBQUEsSUFDTCxPQUFPO0FBQUEsTUFDTCxJQUFNQSxFQUFJO0FBQUEsSUFDWDtBQUFBLElBQ0QsSUFBSTtBQUFBLE1BQ0YsV0FBYSxTQUFVUyxHQUFRO0FBQzdCLFFBQUFULEVBQUksV0FBVztBQUFBLE1BQ2hCO0FBQUEsTUFDRCxPQUFTLFNBQVVTLEdBQVE7QUFDekIsUUFBQVQsRUFBSSxXQUFXO0FBQUEsTUFDaEI7QUFBQSxNQUNELFFBQVUsU0FBVVMsR0FBUTtBQUMxQixZQUFJMlIsSUFBZ0IsTUFBTSxVQUFVLE9BQU8sS0FBSzNSLEVBQU8sT0FBTyxTQUFTLFNBQVU0UixHQUFHO0FBQ2xGLGlCQUFPQSxFQUFFO0FBQUEsUUFDbkIsQ0FBUyxFQUFFLElBQUksU0FBVUEsR0FBRztBQUNsQixjQUFJQyxJQUFNLFlBQVlELElBQUlBLEVBQUUsU0FBU0EsRUFBRTtBQUN2QyxpQkFBT0M7QUFBQSxRQUNqQixDQUFTO0FBQ0QsUUFBQXRTLEVBQUksZ0JBQWdCUyxFQUFPLE9BQU8sV0FBVzJSLElBQWdCQSxFQUFjO0FBQUEsTUFDNUU7QUFBQSxJQUNGO0FBQUEsRUFDTCxHQUFLLFVBQVVwUyxFQUFJLFlBQVksRUFBSyxHQUFHQSxFQUFJLFNBQVMsR0FBRyxDQUFDQSxFQUFJLFdBQVcsQ0FBQ0EsRUFBSSxHQUFHQSxFQUFJLFNBQVMsU0FBVXFLLEdBQVE7QUFDMUcsV0FBTyxDQUFDckssRUFBSSxVQUFVekMsRUFBRyxZQUFZO0FBQUEsTUFDbkMsT0FBTztBQUFBLFFBQ0wsT0FBUzhNLEVBQU9ySyxFQUFJO0FBQUEsTUFDckI7QUFBQSxJQUNQLEdBQU9BLEVBQUksR0FBR3FLLEVBQU9ySyxFQUFJLGlCQUFpQixTQUFVdVMsR0FBSztBQUNuRCxhQUFPaFYsRUFBRyxVQUFVO0FBQUEsUUFDbEIsVUFBVTtBQUFBLFVBQ1IsT0FBU3lDLEVBQUksa0JBQWtCdVMsQ0FBRztBQUFBLFFBQ25DO0FBQUEsTUFDRixHQUFFLENBQUN2UyxFQUFJLEdBQUdBLEVBQUksR0FBR0EsRUFBSSxrQkFBa0J1UyxDQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFBQSxJQUNoRCxDQUFBLEdBQUcsQ0FBQyxJQUFJaFYsRUFBRyxVQUFVO0FBQUEsTUFDcEIsVUFBVTtBQUFBLFFBQ1IsT0FBU3lDLEVBQUksa0JBQWtCcUssQ0FBTTtBQUFBLE1BQ3RDO0FBQUEsSUFDRixHQUFFLENBQUNySyxFQUFJLEdBQUdBLEVBQUksR0FBR0EsRUFBSSxrQkFBa0JxSyxDQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUFBLEVBQ3BELENBQUEsQ0FBQyxJQUFJckssRUFBSSxpQkFBaUIsQ0FBQ3pDLEVBQUcsVUFBVTtBQUFBLElBQ3ZDLFVBQVU7QUFBQSxNQUNSLE9BQVN5QyxFQUFJO0FBQUEsSUFDZDtBQUFBLEVBQ0wsR0FBSyxDQUFDQSxFQUFJLEdBQUdBLEVBQUksR0FBR0EsRUFBSSxrQkFBa0JBLEVBQUksY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSUEsRUFBSSxHQUFFLENBQUUsR0FBRyxDQUFDLEdBQUdBLEVBQUksa0JBQWtCekMsRUFBRyxVQUFVO0FBQUEsSUFDbkgsYUFBYTtBQUFBLElBQ2IsT0FBTztBQUFBLE1BQ0wsVUFBWXlDLEVBQUk7QUFBQSxJQUNqQjtBQUFBLElBQ0QsSUFBSTtBQUFBLE1BQ0YsT0FBU0EsRUFBSTtBQUFBLElBQ2Q7QUFBQSxFQUNGLENBQUEsSUFBSUEsRUFBSSxHQUFJLENBQUEsQ0FBQztBQUNoQixHQUVJRSxLQUFrQixDQUFFO0FDUXhCLE1BQUFDLEtBQUErSSxFQUFBLFNBQUEsVUFBQTtBQUFBLEVBQ0EsUUFBQSxDQUFBWSxFQUFBO0FBQUEsRUFFQSxhQUFBO0FBQUEsRUFFQSxPQUFBO0FBQ0EsV0FBQTtBQUFBLE1BR0EsVUFBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQ0EsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdEZBLElBQUkvSixLQUFTLFdBQVk7QUFDdkIsTUFBSUMsSUFBSSxNQUNKQyxJQUFHRCxFQUFJLGdCQUNQekMsSUFBR3lDLEVBQUksTUFBTSxNQUFJQztBQUVyQixTQUFPMUMsRUFBRyxPQUFPO0FBQUEsSUFDZixhQUFhO0FBQUEsRUFDakIsR0FBSyxDQUFDQSxFQUFHLFNBQVN5QyxFQUFJLEdBQUdBLEVBQUksR0FBRztBQUFBLElBQzVCLFlBQVksQ0FBQztBQUFBLE1BQ1gsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLE1BQ1QsT0FBT0EsRUFBSTtBQUFBLE1BQ1gsWUFBWTtBQUFBLElBQ2xCLENBQUs7QUFBQSxJQUNELEtBQUs7QUFBQSxJQUNMLGFBQWE7QUFBQSxJQUNiLE9BQU87QUFBQSxNQUNMLElBQU1BLEVBQUk7QUFBQSxNQUNWLE1BQVE7QUFBQSxNQUNSLEtBQU9BLEVBQUk7QUFBQSxNQUNYLEtBQU9BLEVBQUk7QUFBQSxNQUNYLE1BQVFBLEVBQUk7QUFBQSxJQUNiO0FBQUEsSUFDRCxVQUFVO0FBQUEsTUFDUixPQUFTQSxFQUFJO0FBQUEsSUFDZDtBQUFBLElBQ0QsSUFBSTtBQUFBLE1BQ0YsS0FBTyxTQUFVUyxHQUFRO0FBQ3ZCLFFBQUFULEVBQUksYUFBYVMsRUFBTyxPQUFPO0FBQUEsTUFDaEM7QUFBQSxJQUNGO0FBQUEsRUFDTCxHQUFLLFNBQVNULEVBQUksWUFBWSxFQUFLLEdBQUdBLEVBQUksU0FBUyxDQUFDLEdBQUdBLEVBQUksUUFBUXpDLEVBQUcsZUFBZXlDLEVBQUksR0FBR0EsRUFBSSxHQUFHO0FBQUEsSUFDL0YsYUFBYTtBQUFBLElBQ2IsT0FBTztBQUFBLE1BQ0wsTUFBUTtBQUFBLE1BQ1IsS0FBT0EsRUFBSTtBQUFBLE1BQ1gsS0FBT0EsRUFBSTtBQUFBLE1BQ1gsTUFBUUEsRUFBSTtBQUFBLElBQ2I7QUFBQSxJQUNELE9BQU87QUFBQSxNQUNMLE9BQU9BLEVBQUk7QUFBQSxNQUNYLFVBQVUsU0FBVXVKLEdBQUs7QUFDdkIsUUFBQXZKLEVBQUksYUFBYXVKO0FBQUEsTUFDbEI7QUFBQSxNQUNELFlBQVk7QUFBQSxJQUNiO0FBQUEsRUFDRixHQUFFLGVBQWV2SixFQUFJLFlBQVksRUFBSyxHQUFHQSxFQUFJLFNBQVMsQ0FBQyxJQUFJQSxFQUFJLElBQUksR0FBRyxDQUFDO0FBQzFFLEdBRUlFLEtBQWtCLENBQUU7QUNIeEIsTUFBQUMsS0FBQStJLEVBQUEsU0FBQSxVQUFBO0FBQUEsRUFDQSxZQUFBLEVBQUEsWUFBQWlKLEdBQUE7QUFBQSxFQUNBLFFBQUEsQ0FBQUYsRUFBQTtBQUFBLEVBQ0EsYUFBQTtBQUFBLEVBRUEsVUFBQTtBQUFBLElBRUEsT0FBQXZjLEVBQUEsU0FBQTtBQUFBLE1BQ0EsTUFBQTtBQUFBLE1BQ0EsU0FBQTtBQUFBLElBQ0EsQ0FBQTtBQUFBLEVBQ0E7QUFDQSxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMxREEsSUFBSXFLLEtBQVMsV0FBWTtBQUN2QixNQUFJQyxJQUFJLE1BQ0pDLElBQUdELEVBQUksZ0JBQ1B6QyxJQUFHeUMsRUFBSSxNQUFNLE1BQUlDO0FBRXJCLFNBQU8xQyxFQUFHLGlCQUFpQnlDLEVBQUksR0FBR0EsRUFBSSxHQUFHO0FBQUEsSUFDdkMsS0FBSztBQUFBLElBQ0wsYUFBYTtBQUFBLElBQ2IsT0FBTztBQUFBLE1BQ0wsSUFBTUEsRUFBSTtBQUFBLE1BQ1YsTUFBUTtBQUFBLE1BQ1IsUUFBVUEsRUFBSTtBQUFBLElBQ2Y7QUFBQSxJQUNELE9BQU87QUFBQSxNQUNMLE9BQU9BLEVBQUk7QUFBQSxNQUNYLFVBQVUsU0FBVXVKLEdBQUs7QUFDdkIsUUFBQXZKLEVBQUksUUFBUXVKO0FBQUEsTUFDYjtBQUFBLE1BQ0QsWUFBWTtBQUFBLElBQ2I7QUFBQSxFQUNMLEdBQUssaUJBQWlCdkosRUFBSSxZQUFZLEVBQUssR0FBR0EsRUFBSSxTQUFTLENBQUM7QUFDNUQsR0FFSUUsS0FBa0IsQ0FBRTtBQ0F4QixNQUFBQyxLQUFBK0ksRUFBQSxTQUFBLFVBQUE7QUFBQSxFQUNBLGNBQUE7QUFBQSxFQUNBLGNBQUE7QUFBQSxFQUVBLFlBQUE7QUFBQSxJQUNBLGNBQUFzSjtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLFNBQUE7QUFDQSxhQUFBLEtBQUEsT0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQ0EsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDcENBLElBQUl6UyxLQUFTLFdBQVk7QUFDdkIsTUFBSUMsSUFBSSxNQUNKQyxJQUFHRCxFQUFJLGdCQUNQekMsSUFBR3lDLEVBQUksTUFBTSxNQUFJQztBQUVyQixTQUFPMUMsRUFBRyxlQUFleUMsRUFBSSxHQUFHQSxFQUFJLEdBQUc7QUFBQSxJQUNyQyxLQUFLO0FBQUEsSUFDTCxhQUFhO0FBQUEsSUFDYixPQUFPO0FBQUEsTUFDTCxJQUFNQSxFQUFJO0FBQUEsTUFDVixNQUFRQSxFQUFJO0FBQUEsSUFDYjtBQUFBLElBQ0QsT0FBTztBQUFBLE1BQ0wsT0FBT0EsRUFBSTtBQUFBLE1BQ1gsVUFBVSxTQUFVdUosR0FBSztBQUN2QixRQUFBdkosRUFBSSxhQUFhdUo7QUFBQSxNQUNsQjtBQUFBLE1BQ0QsWUFBWTtBQUFBLElBQ2I7QUFBQSxFQUNMLEdBQUssZUFBZXZKLEVBQUksWUFBWSxFQUFLLEdBQUdBLEVBQUksU0FBUyxDQUFDO0FBQzFELEdBRUlFLEtBQWtCLENBQUU7QUNQeEIsTUFBQXVTLEtBQUEsb0JBRUF0UyxLQUFBK0ksRUFBQTtBQUFBLEVBQUE7QUFBQSxJQUNBO0FBQUEsSUFBQTtBQUFBLElBQUE7QUFBQSxJQUFBO0FBQUEsSUFBQTtBQUFBLElBQUE7QUFBQSxJQUFBO0FBQUEsSUFBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBO0FBQUEsSUFDQSxZQUFBLEVBQUEsWUFBQWlKLEdBQUE7QUFBQSxJQUNBLGFBQUE7QUFBQSxJQUNBLFdBQUE7QUFBQSxJQUNBLG9CQUFBLENBQUF0aEIsTUFBQUEsRUFBQSxTQUFBO0FBQUEsSUFFQSxVQUFBO0FBQUEsTUFDQSxZQUFBO0FBQ0EsZUFBQTtBQUFBLFVBQ0EsWUFBQTtBQUFBLFVBQ0EsVUFBQTtBQUFBLFVBQ0EsUUFBQTtBQUFBLFFBQ0EsRUFBQSxLQUFBLFNBQUEsS0FBQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLFlBQUE7QUFBQSxRQUNBLE1BQUE7QUFDQSxpQkFDQSxLQUFBLFNBQUEsY0FDQSxLQUFBLFVBQUEsVUFDQSxDQUFBLEtBQUEsVUFFQTRoQixLQUNBLEtBQUE7QUFBQSxRQUNBO0FBQUEsUUFFQSxJQUFBL2tCLEdBQUE7QUFDQSxlQUFBLFFBQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxTQUFBO0FBQUEsTUFDQSxpQkFBQTtBQUNBLGNBQUF1SCxJQUFBO0FBQUEsVUFDQSxPQUFBO0FBQUEsVUFDQSxLQUFBO0FBQUEsVUFDQSxVQUFBO0FBQUEsVUFDQSxRQUFBO0FBQUEsVUFDQSxVQUFBO0FBQUEsVUFDQSxZQUFBO0FBQUEsUUFDQSxFQUFBLEtBQUE7QUFDQSxlQUFBQSxJQUFBLEVBQUEsQ0FBQUEsSUFBQSxHQUFBLElBQUEsQ0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNsRUEsSUFBSThLLEtBQVMsV0FBWTtBQUN2QixNQUFJQyxJQUFJLE1BQ0pDLElBQUdELEVBQUksZ0JBQ1B6QyxJQUFHeUMsRUFBSSxNQUFNLE1BQUlDO0FBRXJCLFNBQU8xQyxFQUFHLFlBQVl5QyxFQUFJLEdBQUdBLEVBQUksR0FBRztBQUFBLElBQ2xDLFlBQVksQ0FBQztBQUFBLE1BQ1gsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLE1BQ1QsT0FBT0EsRUFBSTtBQUFBLE1BQ1gsWUFBWTtBQUFBLElBQ2xCLENBQUs7QUFBQSxJQUNELEtBQUs7QUFBQSxJQUNMLGFBQWE7QUFBQSxJQUNiLE9BQU87QUFBQSxNQUNMLGtCQUFrQkEsRUFBSTtBQUFBLElBQ3ZCO0FBQUEsSUFDRCxPQUFPO0FBQUEsTUFDTCxJQUFNQSxFQUFJO0FBQUEsTUFDVixNQUFRQSxFQUFJO0FBQUEsSUFDYjtBQUFBLElBQ0QsVUFBVTtBQUFBLE1BQ1IsT0FBU0EsRUFBSTtBQUFBLElBQ2Q7QUFBQSxJQUNELElBQUk7QUFBQSxNQUNGLE9BQVMsU0FBVVMsR0FBUTtBQUN6QixRQUFJQSxFQUFPLE9BQU8sY0FDbEJULEVBQUksUUFBUVMsRUFBTyxPQUFPO0FBQUEsTUFDM0I7QUFBQSxJQUNGO0FBQUEsRUFDTCxHQUFLLFlBQVlULEVBQUksWUFBWSxFQUFLLEdBQUdBLEVBQUksU0FBUyxDQUFDO0FBQ3ZELEdBRUlFLEtBQWtCLENBQUU7QUNQeEIsTUFBQUMsS0FBQStJLEVBQUEsU0FBQSxZQUFBO0FBQUEsRUFDQSxhQUFBO0FBQUEsRUFDQSxXQUFBO0FBQUEsRUFFQSxVQUFBO0FBQUEsSUFDQSxRQUFBO0FBQ0EsYUFBQSxLQUFBLE9BQUEsU0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFdBQUF4VCxFQUFBLGFBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLFNBQUE7QUFBQSxJQUNBLENBQUE7QUFBQSxFQUNBO0FBQ0EsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDeENBLElBQUlxSyxLQUFTLFdBQVk7QUFDdkIsTUFBSUMsSUFBSSxNQUNKQyxJQUFHRCxFQUFJLGdCQUNQekMsSUFBR3lDLEVBQUksTUFBTSxNQUFJQztBQUVyQixTQUFPMUMsRUFBRyxPQUFPO0FBQUEsSUFDZixhQUFhO0FBQUEsRUFDZCxHQUFFLENBQUN5QyxFQUFJLFNBQVN6QyxFQUFHLGVBQWU7QUFBQSxJQUNqQyxPQUFPO0FBQUEsTUFDTCxPQUFTeUMsRUFBSTtBQUFBLE1BQ2IsUUFBVUEsRUFBSTtBQUFBLElBQ2Y7QUFBQSxFQUNGLENBQUEsSUFBSUEsRUFBSSxNQUFNekMsRUFBRyxPQUFPO0FBQUEsSUFDdkIsYUFBYTtBQUFBLEVBQ2pCLEdBQUssQ0FBQ0EsRUFBRyxrQkFBa0I7QUFBQSxJQUN2QixPQUFPO0FBQUEsTUFDTCxRQUFVeUMsRUFBSTtBQUFBLE1BQ2QsVUFBWUEsRUFBSTtBQUFBLE1BQ2hCLE1BQVFBLEVBQUk7QUFBQSxNQUNaLFdBQWFBLEVBQUk7QUFBQSxNQUNqQixNQUFRO0FBQUEsSUFDVDtBQUFBLEVBQ0YsQ0FBQSxHQUFHQSxFQUFJLG1CQUFtQnpDLEVBQUcsT0FBTztBQUFBLElBQ25DLGFBQWE7QUFBQSxFQUNkLEdBQUUsQ0FBQ0EsRUFBRyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUl5QyxFQUFJLEdBQUksQ0FBQSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDaEQsR0FFSUUsS0FBa0IsQ0FBRTtBQ21CeEIsTUFBQUMsS0FBQStJLEVBQUE7QUFBQSxFQUFBO0FBQUEsSUFDQTtBQUFBLElBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQTtBQUFBLElBQ0EsUUFBQSxDQUFBOEMsRUFBQTtBQUFBLElBRUEsVUFBQTtBQUNBLGFBQUEsRUFBQSxXQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxjQUFBdmIsR0FBQTtBQUNBLGFBQUFBLE1BQUEsZ0JBQUEsV0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUE7QUFBQSxNQUNBLE9BQUE7O0FBRUEsZ0JBQUExQyxJQUFBLEtBQUEsa0JBQUEsZ0JBQUFBLEVBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxXQUFBOztBQUVBLGVBQUEsS0FBQSxPQUFBLEtBQUEsT0FBQUEsSUFBQSxLQUFBLFNBQUEsZ0JBQUFBLEVBQUEsTUFBQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLFdBQUE7QUFDQSxlQUFBLEtBQUEsZUFDQSxFQUFBLENBQUEsS0FBQSxPQUFBLEtBQUEsTUFBQSxJQUNBLEtBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxlQUFBO0FBR0EsZUFBQSxLQUFBLGVBQ0EsS0FBQSxTQUFBLE1BQUEsR0FBQSxLQUFBLFNBQUEsU0FBQSxLQUFBLEtBQUEsTUFBQSxJQUNBLEtBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxhQUFBO0FBQ0EsZUFBQSxLQUFBLGVBQ0E7QUFBQSxVQUNBLFVBQUE7QUFBQSxZQUNBLE1BQUEsS0FBQTtBQUFBLFlBQ0EsR0FBQSxLQUFBO0FBQUEsVUFDQTtBQUFBLFFBQ0EsSUFDQSxLQUFBO0FBQUEsTUFDQTtBQUFBLE1BRUEsbUJBQUE7QUFDQSxjQUFBMmtCLElBQUEsQ0FBQTdoQixNQUVBNEksRUFBQTVJLENBQUEsTUFDQSxLQUFBLGVBQUEsWUFBQTtBQUFBLFVBQ0EsTUFBQTtBQUFBLFVBQ0EsU0FBQTtBQUFBLFVBQ0EsUUFBQUE7QUFBQSxRQUNBLENBQUEsS0FDQUEsRUFBQSxZQUNBNmhCLEVBQUE3aEIsRUFBQSxRQUFBO0FBSUEsZUFBQTZoQixFQUFBLEtBQUEsTUFBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxNQUFBLGNBQ0EvWixHQUFBOUgsR0FBQVksR0FBQW1ILEdBQUFNLEdBQ0FuTixJQUFBLElBQUF1SyxJQUFBLElBQ0EyRixJQUFBLE1BQ0E7QUFDQSxhQUFBK1AsR0FBQTtBQUFBLFFBQ0FyVDtBQUFBLFFBQUE5SDtBQUFBLFFBQUFZO0FBQUEsUUFBQW1IO0FBQUEsUUFBQU07QUFBQSxRQUNBbk47QUFBQSxRQUFBdUs7QUFBQSxRQUVBLENBQUF3VyxHQUFBNVQsTUFBQTtBQUNBLGdCQUFBLEVBQUEsVUFBQUwsRUFBQSxJQUFBaEk7QUFDQSxjQUFBZ0k7QUFFQSxtQkFBQUEsRUFBQSxPQUFBLGFBQ0EsS0FBQTtBQUFBLGNBQ0FGO0FBQUEsY0FBQUU7QUFBQSxjQUFBQSxFQUFBO0FBQUEsY0FBQWlVO0FBQUEsY0FBQTVUO0FBQUEsY0FDQW5OO0FBQUEsY0FBQTtBQUFBLGNBQ0FrUTtBQUFBLFlBQ0E7QUFBQSxRQUVBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLDRCQUFBcEwsR0FBQXZELEdBQUE7QUFHQSxZQUFBLEVBQUEsVUFBQXVMLEVBQUEsSUFBQWhJO0FBQ0EsYUFBQW1KO0FBQUEsUUFBQW5KO0FBQUEsUUFBQXZEO0FBQUEsUUFBQXVMLElBQ0EsQ0FBQVMsT0FBQTtBQUFBLFVBQ0EsR0FBQUE7QUFBQSxVQUNBLFlBQUE7QUFBQSxZQUNBLEdBQUFBLEVBQUE7QUFBQSxZQUNBLENBQUFULEVBQUEsT0FBQUE7QUFBQSxVQUNBO0FBQUEsUUFDQSxLQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3hKTyxTQUFTOFosR0FBZWpSLEdBQU07QUFDbkMsU0FBT2tSLEdBQVNsUixHQUFNLEVBQUUsTUFBTSxHQUFFLENBQUU7QUFDcEM7QUNKQSxJQUFJM0IsS0FBUyxXQUFZO0FBQ3ZCLE1BQUlDLElBQUksTUFDSkMsSUFBR0QsRUFBSSxnQkFDUHpDLElBQUd5QyxFQUFJLE1BQU0sTUFBSUM7QUFFckIsU0FBTzFDLEVBQUcsT0FBTztBQUFBLElBQ2YsYUFBYTtBQUFBLEVBQ2pCLEdBQUssQ0FBQ0EsRUFBRyxTQUFTO0FBQUEsSUFDZCxhQUFhO0FBQUEsRUFDakIsR0FBSyxDQUFDeUMsRUFBSSxHQUFHLENBQUMsR0FBR3pDLEVBQUcsaUJBQWlCeUMsRUFBSSxHQUFHO0FBQUEsSUFDeEMsT0FBTztBQUFBLE1BQ0wsS0FBTztBQUFBLE1BQ1AsTUFBUUEsRUFBSTtBQUFBLElBQ2I7QUFBQSxJQUNELElBQUk7QUFBQSxNQUNGLE9BQVNBLEVBQUk7QUFBQSxNQUNiLEtBQU9BLEVBQUk7QUFBQSxJQUNaO0FBQUEsRUFDRixHQUFFLGlCQUFpQkEsRUFBSSxlQUFlQSxFQUFJLFNBQVMsR0FBRyxFQUFLLEdBQUdBLEVBQUksR0FBR0EsRUFBSSxPQUFPLFNBQVU2UyxHQUFNam1CLEdBQU87QUFDdEcsV0FBTzJRLEVBQUcsTUFBTTtBQUFBLE1BQ2QsS0FBS3NWLEVBQUs7QUFBQSxJQUNoQixHQUFPLENBQUN0VixFQUFHLE1BQU07QUFBQSxNQUNYLFVBQVU7QUFBQSxRQUNSLFdBQWF5QyxFQUFJLEdBQUdBLEVBQUksV0FBVzZTLEdBQU1qbUIsQ0FBSyxDQUFDO0FBQUEsTUFDaEQ7QUFBQSxJQUNGLENBQUEsR0FBRzJRLEVBQUcsTUFBTSxDQUFDeUMsRUFBSSxHQUFHQSxFQUFJLEdBQUdBLEVBQUksR0FBRyxnQkFBZ0IsRUFBRTZTLEVBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUd0VixFQUFHLE1BQU0sQ0FBQ3NWLEVBQUssU0FBUyxDQUFDQSxFQUFLLE9BQU8sUUFBUSxDQUFDN1MsRUFBSSxHQUFHLFlBQVlBLEVBQUksR0FBRzZTLEVBQUssT0FBTyxLQUFLLENBQUMsQ0FBQyxJQUFJQSxFQUFLLE9BQU8sU0FBUyxDQUFDN1MsRUFBSSxHQUFHLGNBQWMsQ0FBQyxJQUFJNlMsRUFBSyxPQUFPLFVBQVUsQ0FBQzdTLEVBQUksR0FBRyxVQUFVLENBQUMsSUFBSUEsRUFBSSxHQUFFLENBQUUsSUFBSSxDQUFDQSxFQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUd6QyxFQUFHLE1BQU07QUFBQSxNQUM3UyxhQUFhO0FBQUEsSUFDbkIsR0FBTyxDQUFDQSxFQUFHLE9BQU87QUFBQSxNQUNaLGFBQWE7QUFBQSxJQUNuQixHQUFPLENBQUN5QyxFQUFJLFlBQVl6QyxFQUFHLEtBQUt5QyxFQUFJLEdBQUc7QUFBQSxNQUNqQyxhQUFhO0FBQUEsSUFDbkIsR0FBTyxLQUFLQSxFQUFJLG9CQUFvQkEsRUFBSSxNQUFNLElBQUksR0FBRyxFQUFLLENBQUMsSUFBSUEsRUFBSSxHQUFJLEdBQUVBLEVBQUksWUFBWXpDLEVBQUcsVUFBVXlDLEVBQUksR0FBRztBQUFBLE1BQ3ZHLGFBQWE7QUFBQSxNQUNiLE9BQU87QUFBQSxRQUNMLE1BQVE7QUFBQSxNQUNUO0FBQUEsTUFDRCxJQUFJO0FBQUEsUUFDRixPQUFTLFNBQVVTLEdBQVE7QUFDekIsaUJBQU9ULEVBQUksV0FBVzZTLEdBQU1qbUIsQ0FBSztBQUFBLFFBQ2xDO0FBQUEsTUFDRjtBQUFBLElBQ1AsR0FBTyxVQUFVb1QsRUFBSSxvQkFBb0JBLEVBQUksTUFBTSxNQUFNLEdBQUcsRUFBSyxDQUFDLElBQUlBLEVBQUksR0FBRSxDQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUFBLEVBQ25GLENBQUcsR0FBRyxDQUFDLEdBQUd6QyxFQUFHLFNBQVMsQ0FBQ0EsRUFBRyxNQUFNLENBQUNBLEVBQUcsTUFBTTtBQUFBLElBQ3RDLE9BQU87QUFBQSxNQUNMLFNBQVc7QUFBQSxJQUNaO0FBQUEsRUFDTCxHQUFLLENBQUNBLEVBQUcsT0FBTztBQUFBLElBQ1osYUFBYTtBQUFBLEVBQ2QsR0FBRSxDQUFDeUMsRUFBSSxpQkFBaUJ6QyxFQUFHLFlBQVk7QUFBQSxJQUN0QyxhQUFhO0FBQUEsSUFDYixPQUFPO0FBQUEsTUFDTCxLQUFPO0FBQUEsSUFDUjtBQUFBLElBQ0QsVUFBVTtBQUFBLE1BQ1IsT0FBU3lDLEVBQUk7QUFBQSxJQUNkO0FBQUEsRUFDRixDQUFBLElBQUlBLEVBQUksTUFBTXpDLEVBQUcsT0FBTztBQUFBLElBQ3ZCLGFBQWE7QUFBQSxFQUNkLEdBQUUsQ0FBQ3lDLEVBQUksaUJBQWlCekMsRUFBRyxVQUFVO0FBQUEsSUFDcEMsYUFBYTtBQUFBLElBQ2IsT0FBTztBQUFBLE1BQ0wsTUFBUTtBQUFBLElBQ1Q7QUFBQSxJQUNELElBQUk7QUFBQSxNQUNGLE9BQVMsU0FBVWtELEdBQVE7QUFDekIsUUFBQUEsRUFBTyxlQUFjLEdBQ3JCVCxFQUFJLE9BQU8sU0FBUztBQUFBLE1BQ3JCO0FBQUEsSUFDRjtBQUFBLEVBQ0wsR0FBSyxDQUFDQSxFQUFJLEdBQUcsWUFBWSxDQUFDLENBQUMsSUFBSUEsRUFBSSxnQkFBZ0J6QyxFQUFHLFVBQVU7QUFBQSxJQUM1RCxhQUFhO0FBQUEsSUFDYixPQUFPO0FBQUEsTUFDTCxNQUFRO0FBQUEsSUFDVDtBQUFBLElBQ0QsSUFBSTtBQUFBLE1BQ0YsT0FBUyxTQUFVa0QsR0FBUTtBQUN6QixRQUFBQSxFQUFPLGVBQWMsR0FDckJULEVBQUksT0FBTyxTQUFTO0FBQUEsTUFDckI7QUFBQSxJQUNGO0FBQUEsRUFDTCxHQUFLLENBQUNBLEVBQUksR0FBRyxZQUFZLENBQUMsQ0FBQyxJQUFJQSxFQUFJLEdBQUUsR0FBSXpDLEVBQUcsY0FBYztBQUFBLElBQ3RELEtBQUs7QUFBQSxJQUNMLGFBQWE7QUFBQSxJQUNiLE9BQU87QUFBQSxNQUNMLFlBQVl5QyxFQUFJO0FBQUEsTUFDaEIsTUFBUUEsRUFBSTtBQUFBLE1BQ1osVUFBWUEsRUFBSTtBQUFBLE1BQ2hCLGVBQWVBLEVBQUk7QUFBQSxNQUNuQixZQUFjQSxFQUFJO0FBQUEsTUFDbEIsUUFBVUEsRUFBSTtBQUFBLE1BQ2QsVUFBWUEsRUFBSTtBQUFBLE1BQ2hCLE1BQVFBLEVBQUk7QUFBQSxNQUNaLE9BQVM7QUFBQSxJQUNWO0FBQUEsSUFDRCxJQUFJO0FBQUEsTUFDRixnQkFBZ0JBLEVBQUk7QUFBQSxNQUNwQixjQUFjQSxFQUFJO0FBQUEsSUFDbkI7QUFBQSxJQUNELE9BQU87QUFBQSxNQUNMLE9BQU9BLEVBQUk7QUFBQSxNQUNYLFVBQVUsU0FBVXVKLEdBQUs7QUFDdkIsUUFBQXZKLEVBQUksVUFBVXVKO0FBQUEsTUFDZjtBQUFBLE1BQ0QsWUFBWTtBQUFBLElBQ2I7QUFBQSxFQUNMLENBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2QixHQUVJckosS0FBa0IsQ0FBQyxXQUFZO0FBQ2pDLE1BQUlGLElBQUksTUFDSkMsSUFBR0QsRUFBSSxnQkFDUHpDLElBQUd5QyxFQUFJLE1BQU0sTUFBSUM7QUFFckIsU0FBTzFDLEVBQUcsU0FBUztBQUFBLElBQ2pCLGFBQWE7QUFBQSxFQUNqQixHQUFLLENBQUNBLEVBQUcsTUFBTSxDQUFDQSxFQUFHLE1BQU0sQ0FBQ0EsRUFBRyxRQUFRLENBQUN5QyxFQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUd6QyxFQUFHLE1BQU0sQ0FBQ0EsRUFBRyxRQUFRLENBQUN5QyxFQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUd6QyxFQUFHLE1BQU0sQ0FBQ0EsRUFBRyxRQUFRLENBQUN5QyxFQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUd6QyxFQUFHLE1BQU0sQ0FBQ0EsRUFBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pLLENBQUM7QUNHRCxNQUFBNEMsS0FBQStJLEVBQUEsU0FBQSxVQUFBO0FBQUEsRUFDQSxZQUFBLEVBQUEsV0FBQTRKLElBQUEsY0FBQXZLLEdBQUE7QUFBQSxFQUNBLFNBQUEsRUFBQSxnQkFBQW9LLEdBQUE7QUFBQSxFQUNBLFFBQUEsQ0FBQTFLLEVBQUE7QUFBQSxFQUVBLE9BQUE7QUFDQSxXQUFBO0FBQUEsTUFDQSxTQUFBLENBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUFBLElBQ0EsU0FBQTtBQUNBLGFBQUEsS0FBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQTtBQUNBLGFBQUE4SyxHQUFBLEtBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUFyZCxFQUFBLFlBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLFNBQUE7QUFBQSxNQUVBLFVBQUE7QUFBQSxJQUNBLENBQUE7QUFBQSxJQUVBLFlBQUFBLEVBQUEsY0FBQTtBQUFBLE1BQ0EsTUFBQSxDQUFBLE9BQUEsUUFBQSxNQUFBO0FBQUEsSUFDQSxDQUFBO0FBQUEsSUFFQSxRQUFBQSxFQUFBLFVBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLElBQUFzZCxHQUFBO0FBQ0EsZUFBQXprQixFQUFBeWtCLENBQUEsSUFBQUEsRUFBQSxLQUFBLEdBQUEsSUFBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQSxDQUFBO0FBQUEsSUFFQSxTQUFBdGQsRUFBQSxXQUFBO0FBQUEsTUFDQSxNQUFBLENBQUEsUUFBQSxNQUFBO0FBQUEsTUFDQSxJQUFBdWQsR0FBQTtBQUNBLGVBQUFBLElBQUFDLEdBQUFELENBQUEsSUFBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBLENBQUE7QUFBQSxJQUVBLFdBQUF2ZCxFQUFBLGFBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLFNBQUE7QUFBQSxNQUNBLElBQUE3RCxHQUFBO0FBQ0EsZUFBQUEsS0FBQSxLQUFBLE1BQUEsU0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBLENBQUE7QUFBQSxJQUVBLFdBQUE2RCxFQUFBLGFBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLFNBQUE7QUFBQSxJQUNBLENBQUE7QUFBQSxJQUVBLGdCQUFBO0FBQ0EsYUFBQSxLQUFBLFFBQUEsVUFDQSxFQUFBLEtBQUEsT0FBQSxVQUFBLEtBQUEsT0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGlCQUFBO0FBQ0EsYUFBQSxLQUFBLFFBQUEsVUFBQSxLQUFBLE9BQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxpQkFBQTtBQUNBLGFBQ0EsS0FBQSxRQUFBLE9BQUEsQ0FBQXlkLEdBQUFOLE1BQUFNLElBQUFOLEVBQUEsVUFBQSxDQUFBLElBQ0EsS0FBQSxRQUFBO0FBQUEsSUFFQTtBQUFBLElBRUEsYUFBQTtBQUNBLGFBQUEsS0FBQSxlQUFBO0FBQUEsUUFDQSxNQUFBO0FBQUEsUUFDQSxNQUFBLEtBQUEsSUFBQSxjQUFBLEtBQUEsUUFBQTtBQUFBLE1BQ0EsQ0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxTQUFBO0FBQUEsSUFDQSxXQUFBQSxHQUFBam1CLEdBQUE7QUFDQSxZQUFBLEVBQUEsUUFBQW1ULE1BQUEsS0FBQTtBQUNBLGFBQUFBLElBQ0FBLEVBQUE7QUFBQSxRQUNBO0FBQUEsUUFDQSxJQUFBbFMsRUFBQSxNQUFBO0FBQUEsVUFDQSxPQUFBZ2xCO0FBQUEsVUFDQSxNQUFBLEtBQUE7QUFBQSxVQUNBLE9BQUFqbUI7QUFBQSxVQUNBLFVBQUFwQixFQUFBLEtBQUEsVUFBQW9CLENBQUE7QUFBQSxRQUNBLENBQUE7QUFBQSxNQUNBLElBQ0FvYyxHQUFBNkosRUFBQSxJQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsV0FBQUEsR0FBQWptQixHQUFBO0FBQ0EsWUFBQSxFQUFBLE1BQUE2RSxFQUFBLElBQUFvaEI7QUFFQSxNQUFBQSxLQUFBLE9BQUE7QUFBQSxRQUNBLHlCQUFBLEtBQUEsTUFBQSxVQUFBcGhCO0FBQUEsTUFBQSxNQUVBLEtBQUEsV0FDQSxLQUFBLE1BQUEsT0FBQTdFLEdBQUEsQ0FBQSxJQUVBLEtBQUEsUUFBQSxNQUVBaW1CLEVBQUEsVUFDQSxLQUFBLE9BQUEsT0FBQUEsRUFBQSxNQUFBLEdBRUEsS0FBQSxTQUFBLEdBQ0EsS0FBQSxPQUFBO0FBQUEsUUFDQSxNQUFBO0FBQUEsUUFDQSxPQUFBO0FBQUEsUUFDQSxNQUFBLEdBQUFwaEIsU0FBQSxLQUFBLE1BQUE7QUFBQSxNQUNBLENBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxhQUFBb2hCLEdBQUE7QUFDQSxhQUFBLEtBQUEsWUFBQSxLQUFBLFFBQ0EsS0FBQSxNQUFBLFVBQUEsQ0FBQTNULE1BQUFBLEVBQUEsT0FBQTJULEVBQUEsRUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQUEsR0FBQTtBQUNBLE1BQUEsS0FBQSxXQUNBLEtBQUEsUUFDQSxLQUFBLE1BQUEsS0FBQUEsQ0FBQSxJQUVBLEtBQUEsUUFBQSxDQUFBQSxDQUFBLElBR0EsS0FBQSxRQUFBQTtBQUFBLElBRUE7QUFBQSxJQUVBLFlBQUFBLEdBQUFPLEdBQUE7QUFDQSxVQUFBLEtBQUEsVUFBQTtBQUNBLGNBQUF4bUIsSUFBQSxLQUFBLGFBQUFpbUIsQ0FBQTtBQUNBLFFBQUFqbUIsS0FBQSxNQUNBd21CLElBQ0EsS0FBQSxLQUFBLEtBQUEsT0FBQXhtQixHQUFBd21CLENBQUEsSUFFQSxLQUFBLE1BQUEsT0FBQXhtQixHQUFBLENBQUE7QUFBQSxNQUdBO0FBQ0EsYUFBQSxRQUFBd21CO0FBQUEsSUFFQTtBQUFBLElBRUEsV0FBQVAsR0FBQTtBQUNBLFdBQUEsWUFBQUEsR0FBQSxJQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsVUFBQU8sR0FBQUMsR0FBQTtBQUNBLFVBQUFELEtBQUEsQ0FBQUMsR0FBQTtBQUNBLGNBQUEsRUFBQSxJQUFBbm1CLEdBQUEsTUFBQXVFLEdBQUEsTUFBQWlRLEVBQUEsSUFBQTBSO0FBQ0EsYUFBQSxRQUFBLEVBQUEsSUFBQWxtQixHQUFBLE1BQUF1RSxHQUFBLE1BQUFpUSxHQUFBLFFBQUEwUixHQUFBO0FBQUEsTUFDQTtBQUNBLFVBQUFBLEtBQUFDLEdBQUE7QUFDQSxjQUFBLEVBQUEsU0FBQTNMLEdBQUEsT0FBQXJZLEVBQUEsSUFBQStqQjtBQUNBLFlBQUExTCxHQUFBO0FBQ0EsZUFBQSxTQUFBO0FBQ0EsZ0JBQUFtTCxJQUFBTyxFQUFBLFNBQUE7QUFDQSxVQUFBUCxLQUNBQSxFQUFBLFNBQUFPLEdBR0EsS0FBQSxZQUFBQSxHQUFBUCxDQUFBLEtBRUEsS0FBQSxXQUFBTyxDQUFBO0FBQUEsUUFFQSxXQUFBL2pCLEdBQUE7QUFDQSxnQkFBQXVSLElBQUE7QUFBQSxZQUNBLE9BQUE7QUFBQSxZQUNBLFFBQUE7QUFBQSxZQUNBLFdBQUEsMEJBQUF3UyxFQUFBO0FBQUEsWUFDQSxTQUFBO0FBQUEsWUFDQSxRQUFBO0FBQUEsWUFDQSxNQUFBLHNCQUFBVCxHQUFBUyxFQUFBLElBQUE7QUFBQSxZQUNBLFNBQUE7QUFBQSxVQUVBLEVBQUEvakIsTUFBQSwrQkFBQUE7QUFDQSxlQUFBLE9BQUE7QUFBQSxZQUNBLE1BQUE7QUFBQSxZQUNBLE9BQUE7QUFBQSxZQUNBLE1BQUF1UjtBQUFBLFVBQ0EsQ0FBQSxHQUNBLEtBQUEsV0FBQXdTLENBQUE7QUFBQSxRQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFlBQUFBLEdBQUE7O0FBQ0EsWUFBQUUsSUFBQUYsS0FBQSxnQkFBQUEsRUFBQTtBQUNBLFFBQUFybEIsSUFBQSxLQUFBLElBQUEsU0FBQSxnQkFBQUEsRUFBQSxnQkFBQXVsQixLQUFBLENBQUFBLEVBQUEsb0JBQ0FBLEVBQUEsa0JBQUE7QUFBQSxJQUVBO0FBQUEsRUFDQTtBQUFBLEVBRUEsYUFBQXppQixHQUFBbkQsR0FBQTtBQUVBLFVBQUE2bEIsSUFBQVIsR0FBQXJsQixDQUFBLEVBQ0E7QUFBQSxNQUNBLENBQUEsRUFBQSxRQUFBOGxCLE1BQUFYLEVBQUEsTUFBQSxDQUFBVyxLQUFBQSxFQUFBLFVBQUFYLElBQUE7QUFBQSxJQUNBLEVBQ0EsT0FBQSxDQUFBQSxNQUFBQSxDQUFBO0FBQ0EsV0FBQWhpQixFQUFBLFdBQUEwaUIsSUFBQUEsRUFBQSxNQUFBO0FBQUEsRUFDQTtBQUNBLENBQUE7QUFFQSxTQUFBUixHQUFBcmxCLEdBQUE7QUFDQSxTQUFBQSxJQUFBeUMsRUFBQXpDLENBQUEsSUFBQSxDQUFBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs4Q0NqVk0rbEIsS0FBcUIsb0JBQUksSUFBSztBQUU3QixTQUFTQyxHQUFVcGUsR0FBUztBQUVqQyxFQUFLbWUsR0FBbUIsSUFBSW5lLENBQU8sTUFDakNtZSxHQUFtQixJQUFJbmUsQ0FBTyxHQUM5QixRQUFRLEtBQUtBLENBQU87QUFFeEI7QUNSQSxNQUFlMlEsS0FBQTtBQUFBLEVBQ2I7QUFBQSxFQUFVO0FBQUEsRUFDVjtBQUFBLEVBQVE7QUFBQSxFQUNSO0FBQUEsRUFBVTtBQUFBLEVBQ1Y7QUFBQSxFQUFVO0FBQUEsRUFDVjtBQUFBLEVBQVE7QUFBQSxFQUNSO0FBQUEsRUFBUztBQUFBLEVBQ1Q7QUFBQSxFQUFVO0FBQUEsRUFDVjtBQUFBLEVBQVE7QUFDVixFQUFFLE9BQU8sQ0FBQ0EsR0FBT3JVLE9BQ2ZxVSxFQUFNclUsS0FBUUEsR0FDUHFVLElBQ04sQ0FBRSxDQUFBO0FDR0w1SyxFQUFJLE9BQU8sZ0JBQWdCO0FBRzNCQSxFQUFJLElBQUlzWSxFQUFTO0FBQ2pCdFksRUFBSSxJQUFJdVksSUFBVSxFQUFFLFNBQVMsR0FBSSxDQUFFO0FBQ25DdlksRUFBSSxJQUFJd1ksRUFBZ0I7QUFFVCxNQUFNQyxHQUFVO0FBQUEsRUFDN0IsWUFBWUMsR0FBSTtBQUFBLElBRWQsTUFBQUMsSUFBTyxDQUFFO0FBQUEsSUFDVCxLQUFBcmI7QUFBQSxJQUNBLE9BQUFzYixJQUFRLENBQUU7QUFBQSxPQUNQaG1CO0FBQUEsRUFDSixJQUFHLElBQUk7QUFDTixTQUFLLEtBQUs4bEIsR0FJVixLQUFLLE1BQU1wYixJQUFNaU8sR0FBTSxFQUFFLE1BQU0sT0FBT29OLEVBQUssS0FBS3JiLENBQUcsR0FDbkQsS0FBSyxVQUFVMUssR0FHZjBLLEVBQUksV0FBSkEsRUFBSSxTQUFXLFVBQ2ZBLEVBQUksVUFBVWlPLEdBQU0sQ0FBRSxHQUFFc04sSUFBZ0J2YixFQUFJLE9BQU8sR0FDbkRBLEVBQUksWUFBSkEsRUFBSSxVQUFZLENBQUExSyxNQUFXbVksR0FBUXpOLEdBQUsxSyxDQUFPLElBQy9DMEssRUFBSSxjQUFKQSxFQUFJLFlBQWMsQ0FBQTFLLE1BQVdrbUIsR0FBVXhiLEdBQUsxSyxDQUFPLElBQ25EMEssRUFBSSxhQUFKQSxFQUFJLFdBQWEsQ0FBQXRHLE1BQU8raEIsR0FBU3piLEdBQUt0RyxDQUFHLElBR3pDc0csRUFBSSxrQkFBSkEsRUFBSSxnQkFBa0JBLEVBQUksaUJBQWlCbkYsSUFBWSxDQUFBOGUsTUFBT0EsSUFDOUQzWixFQUFJLG9CQUFKQSxFQUFJLGtCQUFvQkEsRUFBSSxpQkFBaUJ1RSxLQUFXLENBQUFvVixNQUFPQTtBQW1CL0QsVUFBTStCLElBQVExYixFQUFJLFFBQVE3SCxFQUFZNkgsRUFBSSxPQUFPO0FBQUEsTUFDL0MsTUFBTTtBQUFBLElBQ1AsQ0FBQSxLQUFLLENBQUU7QUFDUixJQUFBMGIsRUFBTSxRQUFRdmpCLEVBQVl1akIsRUFBTSxTQUFTLFNBQVM7QUFBQSxNQUNoRCxRQUFRO0FBQUEsTUFDUixRQUFRQTtBQUFBLElBQ2QsQ0FBSyxHQUNEQSxFQUFNLFNBQVN2akIsRUFBWXVqQixFQUFNLFVBQVUsVUFBVTtBQUFBLE1BQ25ELFFBQVE7QUFBQSxNQUNSLFFBQVFBO0FBQUEsSUFDZCxDQUFLLEdBQ0RBLEVBQU0sVUFBVXZqQixFQUFZdWpCLEVBQU0sV0FBVyxXQUFXO0FBQUEsTUFDdEQsUUFBUTtBQUFBLE1BQ1IsUUFBUUE7QUFBQSxJQUNkLENBQUssR0FZRDFiLEVBQUksWUFBWTtBQUFBLE1BQ2QsSUFBSXhLLEdBQVU7QUFDWixjQUFNb1MsSUFBVSxLQUFLcFMsS0FBQSxnQkFBQUEsRUFBVSxTQUFTLEtBQUs7QUFDN0MsZUFBT0EsS0FBWW9TLEVBQVEsS0FBSyxNQUFNcFMsQ0FBUTtBQUFBLE1BQy9DO0FBQUEsTUFFRCxRQUFRQSxHQUFVO0FBQ2hCLGNBQU1tbUIsSUFBYSxLQUFLLElBQUlubUIsRUFBUyxNQUFNO0FBQzNDLGVBQU9tbUIsSUFDSCxHQUFHQSxLQUFjbm1CLEVBQVMsU0FDMUJBLEVBQVM7QUFBQSxNQUNkO0FBQUEsTUFFRCxXQUFXQSxHQUFVO0FBQ25CLGVBQU8sS0FBSyxRQUFRQSxDQUFRO0FBQUEsTUFDN0I7QUFBQSxNQUVELE9BQU9BLEdBQVU7QUFHZixlQUFPLEdBQUdBLEVBQVMsUUFBUUEsRUFBUztBQUFBLE1BQ3JDO0FBQUEsTUFFRCxPQUFPQSxHQUFVO0FBRWYsZUFBTyxHQUFHLEtBQUssV0FBV0EsRUFBUyxNQUFNLFlBQVlBLEVBQVM7QUFBQSxNQUMvRDtBQUFBLE1BRUQsR0FBR3dLLEVBQUk7QUFBQSxJQUNSLEdBTURBLEVBQUksVUFBVTtBQUFBLE1BQ1osZ0JBQWdCO0FBQUEsTUFDaEIsR0FBR0EsRUFBSTtBQUFBLElBQ1IsR0FFR2pKLEVBQVNxa0IsQ0FBRSxNQUNiQSxJQUFLLFNBQVMsY0FBY0EsQ0FBRSxJQUdoQyxLQUFLLE9BQU8sSUFBSTFZLEVBQUk7QUFBQSxNQUNsQixJQUFBMFk7QUFBQSxNQUNBLFFBQVEsSUFBSUosR0FBVTtBQUFBLFFBQ3BCLE1BQU07QUFBQSxRQUNOLE1BQU1LLEVBQUs7QUFBQSxRQUNYLGlCQUFpQjtBQUFBLFFBQ2pCLHNCQUFzQjtBQUFBLE1BQzlCLENBQU87QUFBQSxNQUNELFlBQVksRUFBRSxVQUFBTyxHQUFVO0FBQUEsTUFJeEIsU0FBUztBQUFBLFFBQ1AsS0FBQTViO0FBQUEsUUFHQSxRQUFRLE1BQU1zTjtBQUFBLFFBR2QsUUFBUSxNQUFNO0FBQUEsUUFBRTtBQUFBLFFBQ2hCLGNBQWMsTUFBTTtBQUFBLFFBQ3BCLGtCQUFrQixNQUFNO0FBQUEsUUFDeEIsd0JBQXdCLE1BQU07QUFBQSxRQUM5QixpQkFBaUIsTUFBTTtBQUFBLFFBQ3ZCLGdCQUFnQixNQUFNO0FBQUEsUUFDdEIsa0JBQWtCLE1BQU07QUFBQSxRQUN4QixvQkFBb0IsTUFBTTtBQUFBLFFBQzFCLGtCQUFrQixNQUFNO0FBQUEsUUFDeEIsaUJBQWlCLE1BQU07QUFBQSxRQUN2QixlQUFlLE1BQU07QUFBQSxNQUN0QjtBQUFBLE1BRUQsUUFBUSxDQUFBdU8sTUFBaUJBLEVBQWNELElBQVU7QUFBQSxRQUUvQyxPQUFPO0FBQUEsVUFDTCxJQUFJUixFQUFHO0FBQUEsUUFDUjtBQUFBLFFBQ0QsT0FBTztBQUFBLFVBQ0wsaUJBQWlCRTtBQUFBLFVBQ2pCLFNBQUFobUI7QUFBQSxRQUNEO0FBQUEsUUFHRCxZQUFZO0FBQUEsVUFDVixHQUFHK0Q7QUFBQSxVQUNILEdBQUd4QjtBQUFBLFFBQ0o7QUFBQSxNQUNULENBQU87QUFBQSxJQUNQLENBQUs7QUFBQSxFQUNGO0FBQUEsRUFFRCxTQUFTQyxHQUFNeEMsR0FBUztBQUN0QixXQUFPaWIsRUFBYyxTQUFTelksR0FBTXhDLENBQU87QUFBQSxFQUM1QztBQUNIO0FBRUEsTUFBTXdtQixXQUFxQixNQUFNO0FBQUEsRUFDL0IsWUFBWWhpQixHQUFVO0FBQ3BCLFVBQU0sb0NBQW9DQSxFQUFTLFdBQVdBLEVBQVMsYUFBYSxHQUNwRixLQUFLLFdBQVdBO0FBQUEsRUFDakI7QUFDSDtBQUVBLGVBQWUyVCxHQUFRek4sR0FBSztBQUFBLEVBQzFCLEtBQUF0RztBQUFBLEVBQ0EsUUFBQUMsSUFBUztBQUFBLEVBR1QsUUFBQXNCLElBQVM7QUFBQSxFQUNULE9BQUE3QixJQUFRNkIsS0FBVTtBQUFBLEVBQ2xCLFNBQUE4Z0IsSUFBVTtBQUFBLEVBQ1YsTUFBQTNuQixJQUFPO0FBQ1QsR0FBRzs7QUFDRCxFQUFJNkcsS0FDRjhmLEdBQVUsMEVBQTBFO0FBR3RGLFFBQU1VLElBQVd6YixFQUFJLFNBQVN0RyxDQUFHLEdBRTNCSSxJQUFXLE1BQU0sTUFBTWtHLEVBQUksVUFBVSxFQUFFLEtBQUF0RyxHQUFLLE9BQUFOLEVBQUssQ0FBRSxHQUFHO0FBQUEsSUFDMUQsUUFBUU8sRUFBTyxZQUFhO0FBQUEsSUFDNUIsR0FBSXZGLEtBQVEsRUFBRSxNQUFNLEtBQUssVUFBVUEsQ0FBSTtJQUN2QyxTQUFTO0FBQUEsTUFDUCxHQUFJcW5CLEtBQVl6YixFQUFJO0FBQUEsTUFDcEIsR0FBRytiO0FBQUEsSUFDSjtBQUFBLElBQ0QsYUFBYU4sT0FBWXJtQixJQUFBNEssRUFBSSxTQUFKLGdCQUFBNUssRUFBVSxlQUMvQixZQUNBO0FBQUEsRUFDUixDQUFHO0FBTUQsT0FKSXFJLElBQUEzRCxFQUFTLFFBQVEsSUFBSSxjQUFjLE1BQW5DLFFBQUEyRCxFQUFzQyxTQUFTLHdCQUNqRDNELEVBQVMsT0FBTyxNQUFNQSxFQUFTLEtBQU0sSUFHbkMsQ0FBQ0EsRUFBUztBQUNaLFVBQU0sSUFBSWdpQixHQUFhaGlCLENBQVE7QUFFakMsU0FBT0E7QUFDVDtBQUVBLFNBQVMwaEIsR0FBVXhiLEdBQUssRUFBRSxLQUFBdEcsR0FBSyxPQUFBTixFQUFLLEdBQUk7QUFDdEMsRUFBSzRpQixHQUFjdGlCLENBQUcsTUFFcEJBLElBQU0sR0FBR3NHLEVBQUksSUFBSSxRQUFRLFFBQVEsRUFBRSxLQUFLdEcsRUFBSSxRQUFRLFFBQVEsRUFBRTtBQUdoRSxRQUFNNFgsSUFBU2xZLEtBQVMsSUFBSSxnQkFBZ0JBLENBQUssRUFBRSxTQUFVO0FBQzdELFNBQU9rWSxJQUFTLEdBQUc1WCxLQUFPNFgsTUFBVzVYO0FBQ3ZDO0FBRUEsU0FBUytoQixHQUFTemIsR0FBS3RHLEdBQUs7QUFDMUIsU0FBTyxDQUFDc2lCLEdBQWN0aUIsQ0FBRyxLQUFLQSxFQUFJLFdBQVdzRyxFQUFJLEdBQUc7QUFDdEQ7In0=
|