@ilamy/calendar 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +2 -0
- package/dist/index.js +11 -7
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -3725,7 +3725,8 @@ var Header = ({ className = "" }) => {
|
|
|
3725
3725
|
openEventForm,
|
|
3726
3726
|
headerComponent,
|
|
3727
3727
|
headerClassName,
|
|
3728
|
-
rawEvents
|
|
3728
|
+
rawEvents,
|
|
3729
|
+
t
|
|
3729
3730
|
} = useCalendarContext();
|
|
3730
3731
|
const [mobilePopoverOpen, setMobilePopoverOpen] = useState6(false);
|
|
3731
3732
|
const handleViewChange = (newView, closePopover = false) => {
|
|
@@ -3766,11 +3767,11 @@ var Header = ({ className = "" }) => {
|
|
|
3766
3767
|
}),
|
|
3767
3768
|
/* @__PURE__ */ jsx36("span", {
|
|
3768
3769
|
className: "hidden @4xl:inline",
|
|
3769
|
-
children: "
|
|
3770
|
+
children: t("new")
|
|
3770
3771
|
})
|
|
3771
3772
|
]
|
|
3772
3773
|
})
|
|
3773
|
-
}), [openEventForm]);
|
|
3774
|
+
}), [openEventForm, t]);
|
|
3774
3775
|
if (headerComponent) {
|
|
3775
3776
|
return headerComponent;
|
|
3776
3777
|
}
|
|
@@ -3817,7 +3818,7 @@ var Header = ({ className = "" }) => {
|
|
|
3817
3818
|
}),
|
|
3818
3819
|
/* @__PURE__ */ jsx36("span", {
|
|
3819
3820
|
className: "hidden @4xl/base-header:inline",
|
|
3820
|
-
children: "
|
|
3821
|
+
children: t("export")
|
|
3821
3822
|
})
|
|
3822
3823
|
]
|
|
3823
3824
|
})
|
|
@@ -3870,7 +3871,8 @@ var Header = ({ className = "" }) => {
|
|
|
3870
3871
|
/* @__PURE__ */ jsx36(Download, {
|
|
3871
3872
|
className: "h-4 w-4"
|
|
3872
3873
|
}),
|
|
3873
|
-
"
|
|
3874
|
+
t("export"),
|
|
3875
|
+
" Calendar (.ics)"
|
|
3874
3876
|
]
|
|
3875
3877
|
})
|
|
3876
3878
|
})
|
|
@@ -4204,9 +4206,11 @@ import { useCallback as useCallback3, useEffect as useEffect4, useMemo as useMem
|
|
|
4204
4206
|
var defaultTranslations = {
|
|
4205
4207
|
today: "Today",
|
|
4206
4208
|
create: "Create",
|
|
4209
|
+
new: "New",
|
|
4207
4210
|
update: "Update",
|
|
4208
4211
|
delete: "Delete",
|
|
4209
4212
|
cancel: "Cancel",
|
|
4213
|
+
export: "Export",
|
|
4210
4214
|
event: "Event",
|
|
4211
4215
|
events: "Events",
|
|
4212
4216
|
newEvent: "New Event",
|
|
@@ -4796,5 +4800,5 @@ export {
|
|
|
4796
4800
|
IlamyCalendar
|
|
4797
4801
|
};
|
|
4798
4802
|
|
|
4799
|
-
//# debugId=
|
|
4800
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2ZlYXR1cmVzL21vbnRoLXZpZXcvY29tcG9uZW50cy92aWV3L21vbnRoLXZpZXcudHN4IiwgIi4uL3NyYy9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQudHMiLCAiLi4vc3JjL2NvbXBvbmVudHMvdWkvYnV0dG9uLnRzeCIsICIuLi9zcmMvbGliL3V0aWxzLnRzIiwgIi4uL3NyYy9saWIvZGF5anMtY29uZmlnLnRzIiwgIi4uL3NyYy9jb21wb25lbnRzL3VpL2NhbGVuZGFyLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy91aS9jaGVja2JveC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvdWkvY2FyZC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvdWkvZGF0ZS1waWNrZXIudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3VpL3BvcG92ZXIudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3VpL2RpYWxvZy50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvdWkvaW5wdXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3VpL2xhYmVsLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYS50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvdWkvc2VsZWN0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy91aS90YWJzLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy91aS90b29sdGlwLnRzeCIsICIuLi9zcmMvZmVhdHVyZXMvbW9udGgtdmlldy9jb21wb25lbnRzL2FsbC1ldmVudHMtZGlhbG9nLnRzeCIsICIuLi9zcmMvZmVhdHVyZXMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudC50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL21vbnRoLXZpZXcvY29tcG9uZW50cy9kYXktY2VsbC50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL2Ryb3BwYWJsZS1jZWxsL2Ryb3BwYWJsZS1jZWxsLnRzeCIsICIuLi9zcmMvZmVhdHVyZXMvbW9udGgtdmlldy9jb21wb25lbnRzL21vbnRoLWhlYWRlci9tb250aC1oZWFkZXIudHN4IiwgIi4uL3NyYy9saWIvY29uc3RhbnRzLnRzIiwgIi4uL3NyYy9ob29rcy91c2VQcm9jZXNzZWRXZWVrRXZlbnRzLnRzIiwgIi4uL3NyYy9mZWF0dXJlcy9tb250aC12aWV3L2NvbXBvbmVudHMvd2Vlay1ldmVudHMtbGF5ZXIvd2Vlay1ldmVudHMtbGF5ZXIudHN4IiwgIi4uL3NyYy9mZWF0dXJlcy93ZWVrLXZpZXcvdmlldy93ZWVrLXZpZXcudHN4IiwgIi4uL3NyYy9mZWF0dXJlcy93ZWVrLXZpZXcvd2Vlay1hbGwtZGF5LXJvdy50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL3dlZWstdmlldy93ZWVrLWhlYWRlci50c3giLCAiLi4vc3JjL2hvb2tzL3VzZVByb2Nlc3NlZERheUV2ZW50cy50cyIsICIuLi9zcmMvZmVhdHVyZXMvZGF5LXZpZXcvY29tcG9uZW50cy9kYXktZXZlbnRzLWxheWVyLnRzeCIsICIuLi9zcmMvZmVhdHVyZXMvd2Vlay12aWV3L3dlZWstZGF5LWNvbC50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL3dlZWstdmlldy93ZWVrLXRpbWUtZ3JpZC50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL2RheS12aWV3L2NvbXBvbmVudHMvdmlldy9kYXktdmlldy50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL2RheS12aWV3L2NvbXBvbmVudHMvZGF5LWFsbC1kYXktcm93LnRzeCIsICIuLi9zcmMvZmVhdHVyZXMvZGF5LXZpZXcvY29tcG9uZW50cy9kYXktaGVhZGVyLnRzeCIsICIuLi9zcmMvZmVhdHVyZXMvZGF5LXZpZXcvY29tcG9uZW50cy9kYXktdGltZS1jb2wudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybS50c3giLCAiLi4vc3JjL2xpYi9yZWN1cnJlbmNlLWhhbmRsZXIvaW5kZXgudHMiLCAiLi4vc3JjL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXRvci9yZWN1cnJlbmNlLWVkaXRvci50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXQtZGlhbG9nL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cudHN4IiwgIi4uL3NyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL2hvb2tzL3VzZVJlY3VycmluZ0V2ZW50QWN0aW9ucy50cyIsICIuLi9zcmMvbGliL2V4cG9ydC1pY2FsLnRzIiwgIi4uL3NyYy9jb21wb25lbnRzL2hlYWRlci9iYXNlLWhlYWRlci50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvaGVhZGVyL3RpdGxlLWNvbnRlbnQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL2hlYWRlci92aWV3LWNvbnRyb2xzLnRzeCIsICIuLi9zcmMvZmVhdHVyZXMveWVhci12aWV3L3ZpZXcveWVhci12aWV3LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy9pbGFteS1jYWxlbmRhci9pbGFteS1jYWxlbmRhci50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL2RyYWctYW5kLWRyb3AvY2FsZW5kYXItZG5kLWNvbnRleHQudHN4IiwgIi4uL3NyYy9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyLnRzeCIsICIuLi9zcmMvbGliL3RyYW5zbGF0aW9ucy9kZWZhdWx0LnRzIiwgIi4uL3NyYy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICJpbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB7IEFsbEV2ZW50RGlhbG9nIH0gZnJvbSAnLi4vYWxsLWV2ZW50cy1kaWFsb2cnXG5pbXBvcnQgeyBEYXlDZWxsIH0gZnJvbSAnLi4vZGF5LWNlbGwnXG5pbXBvcnQgdHlwZSB7IE1vbnRoVmlld1Byb3BzLCBTZWxlY3RlZERheUV2ZW50cyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgTW9udGhIZWFkZXIgfSBmcm9tICcuLi9tb250aC1oZWFkZXIvbW9udGgtaGVhZGVyJ1xuaW1wb3J0IHsgV2Vla0V2ZW50c0xheWVyIH0gZnJvbSAnLi4vd2Vlay1ldmVudHMtbGF5ZXIvd2Vlay1ldmVudHMtbGF5ZXInXG5pbXBvcnQgeyBTY3JvbGxBcmVhIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuXG5leHBvcnQgY29uc3QgTW9udGhWaWV3OiBSZWFjdC5GQzxNb250aFZpZXdQcm9wcz4gPSAoeyBkYXlNYXhFdmVudHMgPSAzIH0pID0+IHtcbiAgY29uc3QgYWxsRXZlbnRzRGlhbG9nUmVmID0gUmVhY3QudXNlUmVmPHtcbiAgICBvcGVuOiAoKSA9PiB2b2lkXG4gICAgY2xvc2U6ICgpID0+IHZvaWRcbiAgICBzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+IHZvaWRcbiAgfT4obnVsbClcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWsgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgLy8gR2V0IHN0YXJ0IGRhdGUgZm9yIHRoZSBjdXJyZW50IG1vbnRoIHZpZXcgYmFzZWQgb24gZmlyc3REYXlPZldlZWtcbiAgY29uc3QgZmlyc3REYXlPZk1vbnRoID0gY3VycmVudERhdGUuc3RhcnRPZignbW9udGgnKVxuXG4gIC8vIENhbGN1bGF0ZSB0aGUgZmlyc3QgZGF5IG9mIHRoZSBjYWxlbmRhciBncmlkIGNvcnJlY3RseVxuICAvLyBGaW5kIHRoZSBmaXJzdCBkYXkgb2Ygd2VlayAoZS5nLiBTdW5kYXkgb3IgTW9uZGF5KSB0aGF0IGNvbWVzIGJlZm9yZSBvciBvbiB0aGUgZmlyc3QgZGF5IG9mIHRoZSBtb250aFxuICBsZXQgYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIgPSBmaXJzdERheU9mTW9udGguY2xvbmUoKVxuICB3aGlsZSAoYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIuZGF5KCkgIT09IGZpcnN0RGF5T2ZXZWVrKSB7XG4gICAgYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIgPSBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhci5zdWJ0cmFjdCgxLCAnZGF5JylcbiAgfVxuXG4gIC8vIEFsd2F5cyBnZW5lcmF0ZSA2IHdlZWtzICg0MiBkYXlzKSByZWdhcmRsZXNzIG9mIHRoZSBtb250aCBsZW5ndGhcbiAgLy8gVGhpcyBlbnN1cmVzIHdlIGFsd2F5cyBoYXZlIDYgcm93cyBvZiBkYXlzXG4gIGNvbnN0IGNhbGVuZGFyRGF5cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIC8vIDYgd2Vla3Mgw5cgNyBkYXlzID0gNDIgZGF5c1xuICAgIGNvbnN0IGRheXM6IGRheWpzLkRheWpzW11bXSA9IFtbXV1cbiAgICBsZXQgZGF5ID0gYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIuY2xvbmUoKSAvLyBDbG9uZSB0byBhdm9pZCBtdXRhdGlvblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDI7IGkrKykge1xuICAgICAgaWYgKGRheXNbZGF5cy5sZW5ndGggLSAxXS5sZW5ndGggPT09IDcpIHtcbiAgICAgICAgZGF5cy5wdXNoKFtdKSAvLyBTdGFydCBhIG5ldyB3ZWVrXG4gICAgICB9XG4gICAgICBkYXlzW2RheXMubGVuZ3RoIC0gMV0ucHVzaChkYXkpXG4gICAgICBkYXkgPSBkYXkuYWRkKDEsICdkYXknKSAvLyBNb3ZlIHRvIHRoZSBuZXh0IGRheVxuICAgIH1cbiAgICByZXR1cm4gZGF5c1xuICB9LCBbYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXJdKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtZnVsbCBmbGV4LWNvbFwiIGRhdGEtdGVzdGlkPVwibW9udGgtdmlld1wiPlxuICAgICAgey8qIFdlZWsgZGF5cyBoZWFkZXIgKi99XG4gICAgICA8TW9udGhIZWFkZXIgY2xhc3NOYW1lPVwiaC1bM3JlbV1cIiAvPlxuXG4gICAgICB7LyogQ2FsZW5kYXIgZ3JpZCAtIGFkZGVkIGZpeGVkIGhlaWdodCAqL31cbiAgICAgIDxTY3JvbGxBcmVhXG4gICAgICAgIGNsYXNzTmFtZT1cIm92ZXJmbG93LWF1dG8gaC1bY2FsYygxMDAlLTNyZW0pXVwiXG4gICAgICAgIGRhdGEtdGVzdGlkPVwibW9udGgtc2Nyb2xsLWFyZWFcIlxuICAgICAgICB2aWV3UG9ydFByb3BzPXt7IGNsYXNzTmFtZTogJyo6ZmxleCEgKjpmbGV4LWNvbCAqOm1pbi1oLWZ1bGwnIH19XG4gICAgICA+XG4gICAgICAgIDxBbmltYXRlUHJlc2VuY2UgbW9kZT1cIndhaXRcIj5cbiAgICAgICAgICA8bW90aW9uLmRpdlxuICAgICAgICAgICAga2V5PXtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1cbiAgICAgICAgICAgIGluaXRpYWw9e3sgb3BhY2l0eTogMCB9fVxuICAgICAgICAgICAgYW5pbWF0ZT17eyBvcGFjaXR5OiAxIH19XG4gICAgICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAgfX1cbiAgICAgICAgICAgIHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuMjUsIGVhc2U6ICdlYXNlSW5PdXQnIH19XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBncmlkIGgtZnVsbCBncmlkLWNvbHMtNyBncmlkLXJvd3MtNiBvdmVyZmxvdy1hdXRvIGZsZXgtMVwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cIm1vbnRoLWNhbGVuZGFyLWdyaWRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHsvKiBEYXkgY2VsbHMgKi99XG4gICAgICAgICAgICB7Y2FsZW5kYXJEYXlzLm1hcCgoZGF5cywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBrZXk9e2B3ZWVrLSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIGNvbC1zcGFuLTcgZ3JpZCBncmlkLWNvbHMtN1wiXG4gICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YHdlZWstcm93LSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7ZGF5cy5tYXAoKGRheSwgZGF5SW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICA8RGF5Q2VsbFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg9e2RheUluZGV4fVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF5PXtkYXl9XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXlNYXhFdmVudHM9e2RheU1heEV2ZW50c31cbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm9yZGVyLXIgYm9yZGVyLWIgZmlyc3Q6Ym9yZGVyLWxcIlxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIH0pfVxuXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LTAgei0xMCBwb2ludGVyLWV2ZW50cy1ub25lXCI+XG4gICAgICAgICAgICAgICAgICAgIDxXZWVrRXZlbnRzTGF5ZXIgZGF5cz17ZGF5c30gLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L21vdGlvbi5kaXY+XG4gICAgICAgIDwvQW5pbWF0ZVByZXNlbmNlPlxuICAgICAgPC9TY3JvbGxBcmVhPlxuXG4gICAgICB7LyogRGlhbG9nIGZvciBzaG93aW5nIGFsbCBldmVudHMgKi99XG4gICAgICA8QWxsRXZlbnREaWFsb2cgcmVmPXthbGxFdmVudHNEaWFsb2dSZWZ9IC8+XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdE9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9uS2V5IH0gZnJvbSAnQC9saWIvdHJhbnNsYXRpb25zL3R5cGVzJ1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyQ29udGV4dFR5cGUge1xuICBjdXJyZW50RGF0ZTogZGF5anMuRGF5anNcbiAgdmlldzogJ21vbnRoJyB8ICd3ZWVrJyB8ICdkYXknIHwgJ3llYXInXG4gIGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIHJhd0V2ZW50czogQ2FsZW5kYXJFdmVudFtdIC8vIFVucHJvY2Vzc2VkIGV2ZW50cyBmb3IgZXhwb3J0XG4gIGlzRXZlbnRGb3JtT3BlbjogYm9vbGVhblxuICBzZWxlY3RlZEV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuICBzZWxlY3RlZERhdGU6IGRheWpzLkRheWpzIHwgbnVsbFxuICBmaXJzdERheU9mV2VlazogbnVtYmVyIC8vIDAgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5LCBldGMuXG4gIHNldEN1cnJlbnREYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcbiAgc2VsZWN0RGF0ZTogKGRhdGU6IGRheWpzLkRheWpzKSA9PiB2b2lkXG4gIHNldFZpZXc6ICh2aWV3OiAnbW9udGgnIHwgJ3dlZWsnIHwgJ2RheScgfCAneWVhcicpID0+IHZvaWRcbiAgbmV4dFBlcmlvZDogKCkgPT4gdm9pZFxuICBwcmV2UGVyaW9kOiAoKSA9PiB2b2lkXG4gIHRvZGF5OiAoKSA9PiB2b2lkXG4gIGFkZEV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgdXBkYXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIsIGV2ZW50OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG4gIHVwZGF0ZVJlY3VycmluZ0V2ZW50OiAoXG4gICAgZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG4gICAgdXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PixcbiAgICBvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcbiAgKSA9PiB2b2lkXG4gIGRlbGV0ZUV2ZW50OiAoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB2b2lkXG4gIGRlbGV0ZVJlY3VycmluZ0V2ZW50OiAoXG4gICAgZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG4gICAgb3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG4gICkgPT4gdm9pZFxuICBvcGVuRXZlbnRGb3JtOiAoZGF0ZT86IGRheWpzLkRheWpzKSA9PiB2b2lkXG4gIGNsb3NlRXZlbnRGb3JtOiAoKSA9PiB2b2lkXG4gIGdldEV2ZW50c0ZvckRhdGVSYW5nZTogKFxuICAgIHN0YXJ0RGF0ZTogZGF5anMuRGF5anMsXG4gICAgZW5kRGF0ZTogZGF5anMuRGF5anNcbiAgKSA9PiBDYWxlbmRhckV2ZW50W11cbiAgZmluZFBhcmVudFJlY3VycmluZ0V2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IENhbGVuZGFyRXZlbnQgfCBudWxsXG4gIHJlbmRlckV2ZW50PzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBSZWFjdC5SZWFjdE5vZGVcbiAgb25FdmVudENsaWNrOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgb25DZWxsQ2xpY2s6IChzdGFydERhdGU6IGRheWpzLkRheWpzLCBlbmREYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuICBjdXJyZW50TG9jYWxlPzogc3RyaW5nXG4gIGRpc2FibGVDZWxsQ2xpY2s/OiBib29sZWFuXG4gIGRpc2FibGVFdmVudENsaWNrPzogYm9vbGVhblxuICBkaXNhYmxlRHJhZ0FuZERyb3A/OiBib29sZWFuXG4gIGRheU1heEV2ZW50czogbnVtYmVyXG4gIHN0aWNreVZpZXdIZWFkZXI6IGJvb2xlYW5cbiAgdmlld0hlYWRlckNsYXNzTmFtZTogc3RyaW5nXG4gIGhlYWRlckNvbXBvbmVudD86IFJlYWN0LlJlYWN0Tm9kZSAvLyBPcHRpb25hbCBjdXN0b20gaGVhZGVyIGNvbXBvbmVudFxuICBoZWFkZXJDbGFzc05hbWU/OiBzdHJpbmcgLy8gT3B0aW9uYWwgY3VzdG9tIGhlYWRlciBjbGFzc1xuICAvLyBUcmFuc2xhdGlvbiBmdW5jdGlvblxuICB0OiAoa2V5OiBUcmFuc2xhdGlvbktleSkgPT4gc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBDYWxlbmRhckNvbnRleHQ6IFJlYWN0LkNvbnRleHQ8Q2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4gPVxuICBjcmVhdGVDb250ZXh0PENhbGVuZGFyQ29udGV4dFR5cGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcblxuZXhwb3J0IGNvbnN0IHVzZUNhbGVuZGFyQ29udGV4dCA9ICgpOiBDYWxlbmRhckNvbnRleHRUeXBlID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoQ2FsZW5kYXJDb250ZXh0KVxuICBpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VDYWxlbmRhckNvbnRleHQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIENhbGVuZGFyUHJvdmlkZXInKVxuICB9XG4gIHJldHVybiBjb250ZXh0XG59XG5cbi8qKlxuICogU2ltcGxpZmllZCBjYWxlbmRhciBjb250ZXh0IHR5cGUgZm9yIGV4dGVybmFsIHVzZVxuICogQ29udGFpbnMgb25seSB0aGUgbW9zdCBjb21tb25seSB1c2VkIGNhbGVuZGFyIG9wZXJhdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybiB7XG4gIHJlYWRvbmx5IGN1cnJlbnREYXRlOiBkYXlqcy5EYXlqc1xuICByZWFkb25seSB2aWV3OiAnbW9udGgnIHwgJ3dlZWsnIHwgJ2RheScgfCAneWVhcidcbiAgcmVhZG9ubHkgZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cbiAgcmVhZG9ubHkgaXNFdmVudEZvcm1PcGVuOiBib29sZWFuXG4gIHJlYWRvbmx5IHNlbGVjdGVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG4gIHJlYWRvbmx5IHNlbGVjdGVkRGF0ZTogZGF5anMuRGF5anMgfCBudWxsXG4gIHJlYWRvbmx5IGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcbiAgcmVhZG9ubHkgc2V0Q3VycmVudERhdGU6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuICByZWFkb25seSBzZWxlY3REYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcbiAgcmVhZG9ubHkgc2V0VmlldzogKHZpZXc6ICdtb250aCcgfCAnd2VlaycgfCAnZGF5JyB8ICd5ZWFyJykgPT4gdm9pZFxuICByZWFkb25seSBuZXh0UGVyaW9kOiAoKSA9PiB2b2lkXG4gIHJlYWRvbmx5IHByZXZQZXJpb2Q6ICgpID0+IHZvaWRcbiAgcmVhZG9ubHkgdG9kYXk6ICgpID0+IHZvaWRcbiAgcmVhZG9ubHkgYWRkRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuICByZWFkb25seSB1cGRhdGVFdmVudDogKFxuICAgIGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBldmVudDogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuICApID0+IHZvaWRcbiAgcmVhZG9ubHkgZGVsZXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWRcbiAgcmVhZG9ubHkgb3BlbkV2ZW50Rm9ybTogKGRhdGU/OiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuICByZWFkb25seSBjbG9zZUV2ZW50Rm9ybTogKCkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgdXNlSWxhbXlDYWxlbmRhckNvbnRleHQgPSAoKTogVXNlSWxhbXlDYWxlbmRhckNvbnRleHRSZXR1cm4gPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChDYWxlbmRhckNvbnRleHQpXG4gIGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAndXNlSWxhbXlDYWxlbmRhckNvbnRleHQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIENhbGVuZGFyUHJvdmlkZXInXG4gICAgKVxuICB9XG4gIHJldHVybiB7XG4gICAgY3VycmVudERhdGU6IGNvbnRleHQuY3VycmVudERhdGUsXG4gICAgdmlldzogY29udGV4dC52aWV3LFxuICAgIGV2ZW50czogY29udGV4dC5ldmVudHMsXG4gICAgaXNFdmVudEZvcm1PcGVuOiBjb250ZXh0LmlzRXZlbnRGb3JtT3BlbixcbiAgICBzZWxlY3RlZEV2ZW50OiBjb250ZXh0LnNlbGVjdGVkRXZlbnQsXG4gICAgc2VsZWN0ZWREYXRlOiBjb250ZXh0LnNlbGVjdGVkRGF0ZSxcbiAgICBmaXJzdERheU9mV2VlazogY29udGV4dC5maXJzdERheU9mV2VlayxcbiAgICBzZXRDdXJyZW50RGF0ZTogY29udGV4dC5zZXRDdXJyZW50RGF0ZSxcbiAgICBzZWxlY3REYXRlOiBjb250ZXh0LnNlbGVjdERhdGUsXG4gICAgc2V0VmlldzogY29udGV4dC5zZXRWaWV3LFxuICAgIG5leHRQZXJpb2Q6IGNvbnRleHQubmV4dFBlcmlvZCxcbiAgICBwcmV2UGVyaW9kOiBjb250ZXh0LnByZXZQZXJpb2QsXG4gICAgdG9kYXk6IGNvbnRleHQudG9kYXksXG4gICAgYWRkRXZlbnQ6IGNvbnRleHQuYWRkRXZlbnQsXG4gICAgdXBkYXRlRXZlbnQ6IGNvbnRleHQudXBkYXRlRXZlbnQsXG4gICAgZGVsZXRlRXZlbnQ6IGNvbnRleHQuZGVsZXRlRXZlbnQsXG4gICAgb3BlbkV2ZW50Rm9ybTogY29udGV4dC5vcGVuRXZlbnRGb3JtLFxuICAgIGNsb3NlRXZlbnRGb3JtOiBjb250ZXh0LmNsb3NlRXZlbnRGb3JtLFxuICB9IGFzIGNvbnN0XG59XG4iLAogICAgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgU2xvdCB9IGZyb20gJ0ByYWRpeC11aS9yZWFjdC1zbG90J1xuaW1wb3J0IHR5cGUgeyBWYXJpYW50UHJvcHMgfSBmcm9tICdjbGFzcy12YXJpYW5jZS1hdXRob3JpdHknXG5pbXBvcnQgeyBjdmEgfSBmcm9tICdjbGFzcy12YXJpYW5jZS1hdXRob3JpdHknXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IGJ1dHRvblZhcmlhbnRzID0gY3ZhKFxuICBcImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiB3aGl0ZXNwYWNlLW5vd3JhcCByb3VuZGVkLW1kIHRleHQtc20gZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1hbGwgZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkaXNhYmxlZDpvcGFjaXR5LTUwIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTQgc2hyaW5rLTAgWyZfc3ZnXTpzaHJpbmstMCBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gYXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazphcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS80MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlXCIsXG4gIHtcbiAgICB2YXJpYW50czoge1xuICAgICAgdmFyaWFudDoge1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHNoYWRvdy14cyBob3ZlcjpiZy1wcmltYXJ5LzkwJyxcbiAgICAgICAgZGVzdHJ1Y3RpdmU6XG4gICAgICAgICAgJ2JnLWRlc3RydWN0aXZlIHRleHQtd2hpdGUgc2hhZG93LXhzIGhvdmVyOmJnLWRlc3RydWN0aXZlLzkwIGZvY3VzLXZpc2libGU6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmZvY3VzLXZpc2libGU6cmluZy1kZXN0cnVjdGl2ZS80MCBkYXJrOmJnLWRlc3RydWN0aXZlLzYwJyxcbiAgICAgICAgb3V0bGluZTpcbiAgICAgICAgICAnYm9yZGVyIGJnLWJhY2tncm91bmQgc2hhZG93LXhzIGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGRhcms6YmctaW5wdXQvMzAgZGFyazpib3JkZXItaW5wdXQgZGFyazpob3ZlcjpiZy1pbnB1dC81MCcsXG4gICAgICAgIHNlY29uZGFyeTpcbiAgICAgICAgICAnYmctc2Vjb25kYXJ5IHRleHQtc2Vjb25kYXJ5LWZvcmVncm91bmQgc2hhZG93LXhzIGhvdmVyOmJnLXNlY29uZGFyeS84MCcsXG4gICAgICAgIGdob3N0OlxuICAgICAgICAgICdob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXJrOmhvdmVyOmJnLWFjY2VudC81MCcsXG4gICAgICAgIGxpbms6ICd0ZXh0LXByaW1hcnkgdW5kZXJsaW5lLW9mZnNldC00IGhvdmVyOnVuZGVybGluZScsXG4gICAgICB9LFxuICAgICAgc2l6ZToge1xuICAgICAgICBkZWZhdWx0OiAnaC05IHB4LTQgcHktMiBoYXMtWz5zdmddOnB4LTMnLFxuICAgICAgICBzbTogJ2gtOCByb3VuZGVkLW1kIGdhcC0xLjUgcHgtMyBoYXMtWz5zdmddOnB4LTIuNScsXG4gICAgICAgIGxnOiAnaC0xMCByb3VuZGVkLW1kIHB4LTYgaGFzLVs+c3ZnXTpweC00JyxcbiAgICAgICAgaWNvbjogJ3NpemUtOScsXG4gICAgICB9LFxuICAgIH0sXG4gICAgZGVmYXVsdFZhcmlhbnRzOiB7XG4gICAgICB2YXJpYW50OiAnZGVmYXVsdCcsXG4gICAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgfSxcbiAgfVxuKVxuXG5mdW5jdGlvbiBCdXR0b24oe1xuICBjbGFzc05hbWUsXG4gIHZhcmlhbnQsXG4gIHNpemUsXG4gIGFzQ2hpbGQgPSBmYWxzZSxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdidXR0b24nPiAmXG4gIFZhcmlhbnRQcm9wczx0eXBlb2YgYnV0dG9uVmFyaWFudHM+ICYge1xuICAgIGFzQ2hpbGQ/OiBib29sZWFuXG4gIH0pIHtcbiAgY29uc3QgQ29tcCA9IGFzQ2hpbGQgPyBTbG90IDogJ2J1dHRvbidcblxuICByZXR1cm4gKFxuICAgIDxDb21wXG4gICAgICBkYXRhLXNsb3Q9XCJidXR0b25cIlxuICAgICAgY2xhc3NOYW1lPXtjbihidXR0b25WYXJpYW50cyh7IHZhcmlhbnQsIHNpemUsIGNsYXNzTmFtZSB9KSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgeyBCdXR0b24sIGJ1dHRvblZhcmlhbnRzIH1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzJ1xuaW1wb3J0IHR5cGUgeyBDbGFzc1ZhbHVlIH0gZnJvbSAnY2xzeCdcbmltcG9ydCB7IGNsc3ggfSBmcm9tICdjbHN4J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IHR3TWVyZ2UgfSBmcm9tICd0YWlsd2luZC1tZXJnZSdcbmltcG9ydCB0eXBlIHsgSWxhbXlDYWxlbmRhclByb3BFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy9pbGFteS1jYWxlbmRhci90eXBlcydcblxuZXhwb3J0IGZ1bmN0aW9uIGNuKC4uLmlucHV0czogQ2xhc3NWYWx1ZVtdKSB7XG4gIHJldHVybiB0d01lcmdlKGNsc3goaW5wdXRzKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlTW9ja0V2ZW50cyh7IGNvdW50ID0gNSB9ID0ge30pIHtcbiAgY29uc3QgZXZlbnRzOiBDYWxlbmRhckV2ZW50W10gPSBbXVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICBldmVudHMucHVzaCh7XG4gICAgICBpZDogaS50b1N0cmluZygpLFxuICAgICAgdGl0bGU6IGBNb2NrIEV2ZW50ICR7aSArIDF9YCxcbiAgICAgIHN0YXJ0OiBkYXlqcygpLnN0YXJ0T2YoJ3dlZWsnKS5hZGQoaSwgJ2RheScpLnN0YXJ0T2YoJ2RheScpLFxuICAgICAgZW5kOiBkYXlqcygpLnN0YXJ0T2YoJ3dlZWsnKS5hZGQoaSwgJ2RheScpLmVuZE9mKCdkYXknKSxcbiAgICAgIGNvbG9yOiAnYmctZ3JheS0xMDAgdGV4dC1ncmF5LTgwMCcsXG4gICAgfSlcbiAgfVxuICByZXR1cm4gZXZlbnRzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYWZlRGF0ZShkYXRlOiBkYXlqcy5EYXlqcyB8IERhdGUgfCBzdHJpbmcpOiBkYXlqcy5EYXlqcyB7XG4gIGlmIChkYXlqcy5pc0RheWpzKGRhdGUpKSB7XG4gICAgcmV0dXJuIGRhdGVcbiAgfVxuXG4gIGNvbnN0IHBhcnNlZERhdGUgPSBkYXlqcyhkYXRlKVxuICByZXR1cm4gcGFyc2VkRGF0ZS5pc1ZhbGlkKCkgPyBwYXJzZWREYXRlIDogZGF5anMoKVxufVxuXG5leHBvcnQgY29uc3Qgb21pdEtleXMgPSA8VCBleHRlbmRzIG9iamVjdCwgSyBleHRlbmRzIGtleW9mIFQ+KFxuICBvYmo6IFQsXG4gIGtleXM6IEtbXVxuKTogT21pdDxULCBLPiA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IHsgLi4ub2JqIH1cbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgIGRlbGV0ZSByZXN1bHRba2V5XVxuICB9XG4gIHJldHVybiByZXN1bHRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVB1YmxpY0ZhY2luZ0NhbGVuZGFyRXZlbnQoXG4gIGV2ZW50czogSWxhbXlDYWxlbmRhclByb3BFdmVudFtdXG4pOiBDYWxlbmRhckV2ZW50W10ge1xuICBpZiAoIWV2ZW50cyB8fCAhZXZlbnRzLmxlbmd0aCkge1xuICAgIHJldHVybiBbXVxuICB9XG5cbiAgcmV0dXJuIGV2ZW50cy5tYXAoKGV2ZW50KSA9PiB7XG4gICAgLy8gRXZlbnRzIGFyZSBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IGZvcm1hdCB3aXRoIFJSVUxFIHN0cmluZ3NcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZXZlbnQsXG4gICAgICBzdGFydDogZGF5anMuaXNEYXlqcyhldmVudC5zdGFydCkgPyBldmVudC5zdGFydCA6IGRheWpzKGV2ZW50LnN0YXJ0KSxcbiAgICAgIGVuZDogZGF5anMuaXNEYXlqcyhldmVudC5lbmQpID8gZXZlbnQuZW5kIDogZGF5anMoZXZlbnQuZW5kKSxcbiAgICB9IGFzIENhbGVuZGFyRXZlbnRcbiAgfSlcbn1cbiIsCiAgICAiaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJ1xuaW1wb3J0IHdlZWtkYXkgZnJvbSAnZGF5anMvcGx1Z2luL3dlZWtkYXkuanMnXG5pbXBvcnQgd2Vla09mWWVhciBmcm9tICdkYXlqcy9wbHVnaW4vd2Vla09mWWVhci5qcydcbmltcG9ydCBpc1NhbWVPckFmdGVyIGZyb20gJ2RheWpzL3BsdWdpbi9pc1NhbWVPckFmdGVyLmpzJ1xuaW1wb3J0IGlzU2FtZU9yQmVmb3JlIGZyb20gJ2RheWpzL3BsdWdpbi9pc1NhbWVPckJlZm9yZS5qcydcbmltcG9ydCBpc0JldHdlZW4gZnJvbSAnZGF5anMvcGx1Z2luL2lzQmV0d2Vlbi5qcydcbmltcG9ydCBtaW5NYXggZnJvbSAnZGF5anMvcGx1Z2luL21pbk1heC5qcydcbmltcG9ydCB0aW1lem9uZSBmcm9tICdkYXlqcy9wbHVnaW4vdGltZXpvbmUuanMnXG5pbXBvcnQgdXRjIGZyb20gJ2RheWpzL3BsdWdpbi91dGMuanMnXG5pbXBvcnQgbG9jYWxlRGF0YSBmcm9tICdkYXlqcy9wbHVnaW4vbG9jYWxlRGF0YS5qcydcblxuLy8gRXh0ZW5kIGRheWpzIHdpdGggcGx1Z2luc1xuZGF5anMuZXh0ZW5kKHdlZWtkYXkpXG5kYXlqcy5leHRlbmQod2Vla09mWWVhcilcbmRheWpzLmV4dGVuZChpc1NhbWVPckFmdGVyKVxuZGF5anMuZXh0ZW5kKGlzU2FtZU9yQmVmb3JlKVxuZGF5anMuZXh0ZW5kKGlzQmV0d2VlbilcbmRheWpzLmV4dGVuZChtaW5NYXgpXG5kYXlqcy5leHRlbmQodGltZXpvbmUpXG5kYXlqcy5leHRlbmQodXRjKVxuZGF5anMuZXh0ZW5kKGxvY2FsZURhdGEpXG5cbi8vIEltcG9ydCBhbGwgZGF5anMgbG9jYWxlcyBhbHBoYWJldGljYWxseVxuLy8gbG9jYWxlLmpzb24gZmlsZTogW3tcImtleVwiOlwiYWZcIixcIm5hbWVcIjpcIkFmcmlrYWFuc1wifSx7XCJrZXlcIjpcImFtXCIsXCJuYW1lXCI6XCJBbWhhcmljXCJ9LHtcImtleVwiOlwiYXItZHpcIixcIm5hbWVcIjpcIkFyYWJpYyAoQWxnZXJpYSlcIn0se1wia2V5XCI6XCJhci1pcVwiLFwibmFtZVwiOlwiIEFyYWJpYyAoSXJhcSlcIn0se1wia2V5XCI6XCJhci1rd1wiLFwibmFtZVwiOlwiQXJhYmljIChLdXdhaXQpXCJ9LHtcImtleVwiOlwiYXItbHlcIixcIm5hbWVcIjpcIkFyYWJpYyAoTHliaWEpXCJ9LHtcImtleVwiOlwiYXItbWFcIixcIm5hbWVcIjpcIkFyYWJpYyAoTW9yb2NjbylcIn0se1wia2V5XCI6XCJhci1zYVwiLFwibmFtZVwiOlwiQXJhYmljIChTYXVkaSBBcmFiaWEpXCJ9LHtcImtleVwiOlwiYXItdG5cIixcIm5hbWVcIjpcIiBBcmFiaWMgKFR1bmlzaWEpXCJ9LHtcImtleVwiOlwiYXJcIixcIm5hbWVcIjpcIkFyYWJpY1wifSx7XCJrZXlcIjpcImF6XCIsXCJuYW1lXCI6XCJBemVyYmFpamFuaVwifSx7XCJrZXlcIjpcImJlXCIsXCJuYW1lXCI6XCJCZWxhcnVzaWFuXCJ9LHtcImtleVwiOlwiYmdcIixcIm5hbWVcIjpcIkJ1bGdhcmlhblwifSx7XCJrZXlcIjpcImJpXCIsXCJuYW1lXCI6XCJCaXNsYW1hXCJ9LHtcImtleVwiOlwiYm1cIixcIm5hbWVcIjpcIkJhbWJhcmFcIn0se1wia2V5XCI6XCJibi1iZFwiLFwibmFtZVwiOlwiQmVuZ2FsaSAoQmFuZ2xhZGVzaClcIn0se1wia2V5XCI6XCJiblwiLFwibmFtZVwiOlwiQmVuZ2FsaVwifSx7XCJrZXlcIjpcImJvXCIsXCJuYW1lXCI6XCJUaWJldGFuXCJ9LHtcImtleVwiOlwiYnJcIixcIm5hbWVcIjpcIkJyZXRvblwifSx7XCJrZXlcIjpcImJzXCIsXCJuYW1lXCI6XCJCb3NuaWFuXCJ9LHtcImtleVwiOlwiY2FcIixcIm5hbWVcIjpcIkNhdGFsYW5cIn0se1wia2V5XCI6XCJjc1wiLFwibmFtZVwiOlwiQ3plY2hcIn0se1wia2V5XCI6XCJjdlwiLFwibmFtZVwiOlwiQ2h1dmFzaFwifSx7XCJrZXlcIjpcImN5XCIsXCJuYW1lXCI6XCJXZWxzaFwifSx7XCJrZXlcIjpcImRlLWF0XCIsXCJuYW1lXCI6XCJHZXJtYW4gKEF1c3RyaWEpXCJ9LHtcImtleVwiOlwiZGFcIixcIm5hbWVcIjpcIkRhbmlzaFwifSx7XCJrZXlcIjpcImRlLWNoXCIsXCJuYW1lXCI6XCJHZXJtYW4gKFN3aXR6ZXJsYW5kKVwifSx7XCJrZXlcIjpcImRlXCIsXCJuYW1lXCI6XCJHZXJtYW5cIn0se1wia2V5XCI6XCJkdlwiLFwibmFtZVwiOlwiTWFsZGl2aWFuXCJ9LHtcImtleVwiOlwiZWxcIixcIm5hbWVcIjpcIkdyZWVrXCJ9LHtcImtleVwiOlwiZW4tYXVcIixcIm5hbWVcIjpcIkVuZ2xpc2ggKEF1c3RyYWxpYSlcIn0se1wia2V5XCI6XCJlbi1jYVwiLFwibmFtZVwiOlwiRW5nbGlzaCAoQ2FuYWRhKVwifSx7XCJrZXlcIjpcImVuLWdiXCIsXCJuYW1lXCI6XCJFbmdsaXNoIChVbml0ZWQgS2luZ2RvbSlcIn0se1wia2V5XCI6XCJlbi1pZVwiLFwibmFtZVwiOlwiRW5nbGlzaCAoSXJlbGFuZClcIn0se1wia2V5XCI6XCJlbi1pbFwiLFwibmFtZVwiOlwiRW5nbGlzaCAoSXNyYWVsKVwifSx7XCJrZXlcIjpcImVuLWluXCIsXCJuYW1lXCI6XCJFbmdsaXNoIChJbmRpYSlcIn0se1wia2V5XCI6XCJlbi1uelwiLFwibmFtZVwiOlwiRW5nbGlzaCAoTmV3IFplYWxhbmQpXCJ9LHtcImtleVwiOlwiZW4tc2dcIixcIm5hbWVcIjpcIkVuZ2xpc2ggKFNpbmdhcG9yZSlcIn0se1wia2V5XCI6XCJlbi10dFwiLFwibmFtZVwiOlwiRW5nbGlzaCAoVHJpbmlkYWQgJiBUb2JhZ28pXCJ9LHtcImtleVwiOlwiZW9cIixcIm5hbWVcIjpcIkVzcGVyYW50b1wifSx7XCJrZXlcIjpcImVuXCIsXCJuYW1lXCI6XCJFbmdsaXNoXCJ9LHtcImtleVwiOlwiZXMtZG9cIixcIm5hbWVcIjpcIlNwYW5pc2ggKERvbWluaWNhbiBSZXB1YmxpYylcIn0se1wia2V5XCI6XCJlcy1teFwiLFwibmFtZVwiOlwiU3BhbmlzaCAoTWV4aWNvKVwifSx7XCJrZXlcIjpcImVzLXByXCIsXCJuYW1lXCI6XCJTcGFuaXNoIChQdWVydG8gUmljbylcIn0se1wia2V5XCI6XCJlcy11c1wiLFwibmFtZVwiOlwiU3BhbmlzaCAoVW5pdGVkIFN0YXRlcylcIn0se1wia2V5XCI6XCJldFwiLFwibmFtZVwiOlwiRXN0b25pYW5cIn0se1wia2V5XCI6XCJlc1wiLFwibmFtZVwiOlwiU3BhbmlzaFwifSx7XCJrZXlcIjpcImV1XCIsXCJuYW1lXCI6XCJCYXNxdWVcIn0se1wia2V5XCI6XCJmYVwiLFwibmFtZVwiOlwiUGVyc2lhblwifSx7XCJrZXlcIjpcImZvXCIsXCJuYW1lXCI6XCJGYXJvZXNlXCJ9LHtcImtleVwiOlwiZmlcIixcIm5hbWVcIjpcIkZpbm5pc2hcIn0se1wia2V5XCI6XCJmci1jYVwiLFwibmFtZVwiOlwiRnJlbmNoIChDYW5hZGEpXCJ9LHtcImtleVwiOlwiZnItY2hcIixcIm5hbWVcIjpcIkZyZW5jaCAoU3dpdHplcmxhbmQpXCJ9LHtcImtleVwiOlwiZnJcIixcIm5hbWVcIjpcIkZyZW5jaFwifSx7XCJrZXlcIjpcImZ5XCIsXCJuYW1lXCI6XCJGcmlzaWFuXCJ9LHtcImtleVwiOlwiZ2FcIixcIm5hbWVcIjpcIklyaXNoIG9yIElyaXNoIEdhZWxpY1wifSx7XCJrZXlcIjpcImdkXCIsXCJuYW1lXCI6XCJTY290dGlzaCBHYWVsaWNcIn0se1wia2V5XCI6XCJnb20tbGF0blwiLFwibmFtZVwiOlwiS29ua2FuaSBMYXRpbiBzY3JpcHRcIn0se1wia2V5XCI6XCJnbFwiLFwibmFtZVwiOlwiR2FsaWNpYW5cIn0se1wia2V5XCI6XCJndVwiLFwibmFtZVwiOlwiR3VqYXJhdGlcIn0se1wia2V5XCI6XCJoZVwiLFwibmFtZVwiOlwiSGVicmV3XCJ9LHtcImtleVwiOlwiaGlcIixcIm5hbWVcIjpcIkhpbmRpXCJ9LHtcImtleVwiOlwiaHJcIixcIm5hbWVcIjpcIkNyb2F0aWFuXCJ9LHtcImtleVwiOlwiaHVcIixcIm5hbWVcIjpcIkh1bmdhcmlhblwifSx7XCJrZXlcIjpcImh0XCIsXCJuYW1lXCI6XCJIYWl0aWFuIENyZW9sZSAoSGFpdGkpXCJ9LHtcImtleVwiOlwiaHktYW1cIixcIm5hbWVcIjpcIkFybWVuaWFuXCJ9LHtcImtleVwiOlwiaWRcIixcIm5hbWVcIjpcIkluZG9uZXNpYW5cIn0se1wia2V5XCI6XCJpc1wiLFwibmFtZVwiOlwiSWNlbGFuZGljXCJ9LHtcImtleVwiOlwiaXQtY2hcIixcIm5hbWVcIjpcIkl0YWxpYW4gKFN3aXR6ZXJsYW5kKVwifSx7XCJrZXlcIjpcIml0XCIsXCJuYW1lXCI6XCJJdGFsaWFuXCJ9LHtcImtleVwiOlwiamFcIixcIm5hbWVcIjpcIkphcGFuZXNlXCJ9LHtcImtleVwiOlwianZcIixcIm5hbWVcIjpcIkphdmFuZXNlXCJ9LHtcImtleVwiOlwia2FcIixcIm5hbWVcIjpcIkdlb3JnaWFuXCJ9LHtcImtleVwiOlwia2tcIixcIm5hbWVcIjpcIkthemFraFwifSx7XCJrZXlcIjpcImttXCIsXCJuYW1lXCI6XCJDYW1ib2RpYW5cIn0se1wia2V5XCI6XCJrblwiLFwibmFtZVwiOlwiS2FubmFkYVwifSx7XCJrZXlcIjpcImtvXCIsXCJuYW1lXCI6XCJLb3JlYW5cIn0se1wia2V5XCI6XCJrdVwiLFwibmFtZVwiOlwiS3VyZGlzaFwifSx7XCJrZXlcIjpcImt5XCIsXCJuYW1lXCI6XCJLeXJneXpcIn0se1wia2V5XCI6XCJsYlwiLFwibmFtZVwiOlwiTHV4ZW1ib3VyZ2lzaFwifSx7XCJrZXlcIjpcImxvXCIsXCJuYW1lXCI6XCJMYW9cIn0se1wia2V5XCI6XCJsdFwiLFwibmFtZVwiOlwiTGl0aHVhbmlhblwifSx7XCJrZXlcIjpcImx2XCIsXCJuYW1lXCI6XCJMYXR2aWFuXCJ9LHtcImtleVwiOlwibWVcIixcIm5hbWVcIjpcIk1vbnRlbmVncmluXCJ9LHtcImtleVwiOlwibWlcIixcIm5hbWVcIjpcIk1hb3JpXCJ9LHtcImtleVwiOlwibWtcIixcIm5hbWVcIjpcIk1hY2Vkb25pYW5cIn0se1wia2V5XCI6XCJtbFwiLFwibmFtZVwiOlwiTWFsYXlhbGFtXCJ9LHtcImtleVwiOlwibW5cIixcIm5hbWVcIjpcIk1vbmdvbGlhblwifSx7XCJrZXlcIjpcIm1yXCIsXCJuYW1lXCI6XCJNYXJhdGhpXCJ9LHtcImtleVwiOlwibXMtbXlcIixcIm5hbWVcIjpcIk1hbGF5XCJ9LHtcImtleVwiOlwibXNcIixcIm5hbWVcIjpcIk1hbGF5XCJ9LHtcImtleVwiOlwibXRcIixcIm5hbWVcIjpcIk1hbHRlc2UgKE1hbHRhKVwifSx7XCJrZXlcIjpcIm15XCIsXCJuYW1lXCI6XCJCdXJtZXNlXCJ9LHtcImtleVwiOlwibmJcIixcIm5hbWVcIjpcIk5vcndlZ2lhbiBCb2ttw6VsXCJ9LHtcImtleVwiOlwibmVcIixcIm5hbWVcIjpcIk5lcGFsZXNlXCJ9LHtcImtleVwiOlwibmwtYmVcIixcIm5hbWVcIjpcIkR1dGNoIChCZWxnaXVtKVwifSx7XCJrZXlcIjpcIm5sXCIsXCJuYW1lXCI6XCJEdXRjaFwifSx7XCJrZXlcIjpcInBsXCIsXCJuYW1lXCI6XCJQb2xpc2hcIn0se1wia2V5XCI6XCJwdC1iclwiLFwibmFtZVwiOlwiUG9ydHVndWVzZSAoQnJhemlsKVwifSx7XCJrZXlcIjpcInB0XCIsXCJuYW1lXCI6XCJQb3J0dWd1ZXNlXCJ9LHtcImtleVwiOlwicm5cIixcIm5hbWVcIjpcIktpcnVuZGlcIn0se1wia2V5XCI6XCJyb1wiLFwibmFtZVwiOlwiUm9tYW5pYW5cIn0se1wia2V5XCI6XCJydVwiLFwibmFtZVwiOlwiUnVzc2lhblwifSx7XCJrZXlcIjpcInJ3XCIsXCJuYW1lXCI6XCJLaW55YXJ3YW5kYSAoUndhbmRhKVwifSx7XCJrZXlcIjpcInNkXCIsXCJuYW1lXCI6XCJTaW5kaGlcIn0se1wia2V5XCI6XCJzZVwiLFwibmFtZVwiOlwiTm9ydGhlcm4gU2FtaVwifSx7XCJrZXlcIjpcInNpXCIsXCJuYW1lXCI6XCJTaW5oYWxlc2VcIn0se1wia2V5XCI6XCJza1wiLFwibmFtZVwiOlwiU2xvdmFrXCJ9LHtcImtleVwiOlwic2xcIixcIm5hbWVcIjpcIlNsb3ZlbmlhblwifSx7XCJrZXlcIjpcInNxXCIsXCJuYW1lXCI6XCJBbGJhbmlhblwifSx7XCJrZXlcIjpcInNyLWN5cmxcIixcIm5hbWVcIjpcIlNlcmJpYW4gQ3lyaWxsaWNcIn0se1wia2V5XCI6XCJzc1wiLFwibmFtZVwiOlwic2lTd2F0aVwifSx7XCJrZXlcIjpcInN2LWZpXCIsXCJuYW1lXCI6XCJGaW5sYW5kIFN3ZWRpc2hcIn0se1wia2V5XCI6XCJzclwiLFwibmFtZVwiOlwiU2VyYmlhblwifSx7XCJrZXlcIjpcInN2XCIsXCJuYW1lXCI6XCJTd2VkaXNoXCJ9LHtcImtleVwiOlwic3dcIixcIm5hbWVcIjpcIlN3YWhpbGlcIn0se1wia2V5XCI6XCJ0YVwiLFwibmFtZVwiOlwiVGFtaWxcIn0se1wia2V5XCI6XCJ0ZVwiLFwibmFtZVwiOlwiVGVsdWd1XCJ9LHtcImtleVwiOlwidGV0XCIsXCJuYW1lXCI6XCJUZXR1biBEaWxpIChFYXN0IFRpbW9yKVwifSx7XCJrZXlcIjpcInRnXCIsXCJuYW1lXCI6XCJUYWppa1wifSx7XCJrZXlcIjpcInRoXCIsXCJuYW1lXCI6XCJUaGFpXCJ9LHtcImtleVwiOlwidGtcIixcIm5hbWVcIjpcIlR1cmttZW5cIn0se1wia2V5XCI6XCJ0bC1waFwiLFwibmFtZVwiOlwiVGFnYWxvZyAoUGhpbGlwcGluZXMpXCJ9LHtcImtleVwiOlwidGxoXCIsXCJuYW1lXCI6XCJLbGluZ29uXCJ9LHtcImtleVwiOlwidHJcIixcIm5hbWVcIjpcIlR1cmtpc2hcIn0se1wia2V5XCI6XCJ0emxcIixcIm5hbWVcIjpcIlRhbG9zc2FuXCJ9LHtcImtleVwiOlwidHptLWxhdG5cIixcIm5hbWVcIjpcIkNlbnRyYWwgQXRsYXMgVGFtYXppZ2h0IExhdGluXCJ9LHtcImtleVwiOlwidHptXCIsXCJuYW1lXCI6XCJDZW50cmFsIEF0bGFzIFRhbWF6aWdodFwifSx7XCJrZXlcIjpcInVnLWNuXCIsXCJuYW1lXCI6XCJVeWdodXIgKENoaW5hKVwifSx7XCJrZXlcIjpcInVrXCIsXCJuYW1lXCI6XCJVa3JhaW5pYW5cIn0se1wia2V5XCI6XCJ1clwiLFwibmFtZVwiOlwiVXJkdVwifSx7XCJrZXlcIjpcInV6LWxhdG5cIixcIm5hbWVcIjpcIlV6YmVrIExhdGluXCJ9LHtcImtleVwiOlwidXpcIixcIm5hbWVcIjpcIlV6YmVrXCJ9LHtcImtleVwiOlwidmlcIixcIm5hbWVcIjpcIlZpZXRuYW1lc2VcIn0se1wia2V5XCI6XCJ4LXBzZXVkb1wiLFwibmFtZVwiOlwiUHNldWRvXCJ9LHtcImtleVwiOlwieW9cIixcIm5hbWVcIjpcIllvcnViYSBOaWdlcmlhXCJ9LHtcImtleVwiOlwiemgtY25cIixcIm5hbWVcIjpcIkNoaW5lc2UgKENoaW5hKVwifSx7XCJrZXlcIjpcInpoLWhrXCIsXCJuYW1lXCI6XCJDaGluZXNlIChIb25nIEtvbmcpXCJ9LHtcImtleVwiOlwiemgtdHdcIixcIm5hbWVcIjpcIkNoaW5lc2UgKFRhaXdhbilcIn0se1wia2V5XCI6XCJ6aFwiLFwibmFtZVwiOlwiQ2hpbmVzZVwifSx7XCJrZXlcIjpcIm9jLWxuY1wiLFwibmFtZVwiOlwiT2NjaXRhbiwgbGVuZ2Fkb2NpYW4gZGlhbGVjdGVcIn0se1wia2V5XCI6XCJublwiLFwibmFtZVwiOlwiTnlub3Jza1wifSx7XCJrZXlcIjpcInBhLWluXCIsXCJuYW1lXCI6XCJQdW5qYWJpIChJbmRpYSlcIn1dXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hZi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2FtLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYXItZHouanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hci1pcS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2FyLWt3LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYXItbHkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hci1tYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2FyLXNhLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYXItdG4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hci5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2F6LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYmUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9iZy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2JpLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYm0uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ibi1iZC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2JuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYm8uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ici5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2JzLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvY2EuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9jcy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2N2LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvY3kuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9kYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2RlLWF0LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZGUtY2guanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9kZS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2R2LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZWwuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi1hdS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VuLWNhLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW4tZ2IuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi1pZS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VuLWlsLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW4taW4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi1uei5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VuLXNnLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW4tdHQuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VvLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZXMtZG8uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lcy1teC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VzLXByLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZXMtdXMuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lcy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2V0LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZXUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9mYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2ZpLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZm8uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9mci1jYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2ZyLWNoLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZnIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9meS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2dhLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZ2QuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9nbC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2dvbS1sYXRuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZ3UuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9oZS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2hpLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvaHIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9odC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2h1LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvaHktYW0uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9pZC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2lzLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvaXQtY2guanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9pdC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2phLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvanYuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9rYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2trLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUva20uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9rbi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2tvLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUva3UuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9reS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2xiLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbG8uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9sdC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2x2LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbWUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9taS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL21rLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbWwuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9tbi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL21yLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbXMtbXkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9tcy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL210LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbXkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9uYi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL25lLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbmwtYmUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ubC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL25uLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvb2MtbG5jLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvcGEtaW4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9wbC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3B0LWJyLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvcHQuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ybi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3JvLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvcnUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ydy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3NkLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc2UuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zaS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3NrLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc2wuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zcS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3NyLWN5cmwuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zci5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3NzLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc3YtZmkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zdi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3N3LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdGEuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90ZS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3RldC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3RnLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdGguanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90ay5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3RsLXBoLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdGxoLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdHIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90emwuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90em0tbGF0bi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3R6bS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3VnLWNuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdWsuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS91ci5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3V6LWxhdG4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS91ei5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3ZpLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUveC1wc2V1ZG8uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS95by5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3poLWNuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvemgtaGsuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS96aC10dy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3poLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCBkYXlqc1xuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7XG4gIENoZXZyb25Eb3duSWNvbixcbiAgQ2hldnJvbkxlZnRJY29uLFxuICBDaGV2cm9uUmlnaHRJY29uLFxufSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSB7IERheUJ1dHRvbiB9IGZyb20gJ3JlYWN0LWRheS1waWNrZXInXG5pbXBvcnQgeyBEYXlQaWNrZXIsIGdldERlZmF1bHRDbGFzc05hbWVzIH0gZnJvbSAncmVhY3QtZGF5LXBpY2tlcidcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IEJ1dHRvbiwgYnV0dG9uVmFyaWFudHMgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuXG5mdW5jdGlvbiBDYWxlbmRhcih7XG4gIGNsYXNzTmFtZSxcbiAgY2xhc3NOYW1lcyxcbiAgc2hvd091dHNpZGVEYXlzID0gdHJ1ZSxcbiAgY2FwdGlvbkxheW91dCA9ICdsYWJlbCcsXG4gIGJ1dHRvblZhcmlhbnQgPSAnZ2hvc3QnLFxuICBmb3JtYXR0ZXJzLFxuICBjb21wb25lbnRzLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERheVBpY2tlcj4gJiB7XG4gIGJ1dHRvblZhcmlhbnQ/OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgQnV0dG9uPlsndmFyaWFudCddXG59KSB7XG4gIGNvbnN0IGRlZmF1bHRDbGFzc05hbWVzID0gZ2V0RGVmYXVsdENsYXNzTmFtZXMoKVxuXG4gIHJldHVybiAoXG4gICAgPERheVBpY2tlclxuICAgICAgc2hvd091dHNpZGVEYXlzPXtzaG93T3V0c2lkZURheXN9XG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnYmctYmFja2dyb3VuZCBncm91cC9jYWxlbmRhciBwLTMgWy0tY2VsbC1zaXplOi0tc3BhY2luZyg4KV0gW1tkYXRhLXNsb3Q9Y2FyZC1jb250ZW50XV8mXTpiZy10cmFuc3BhcmVudCBbW2RhdGEtc2xvdD1wb3BvdmVyLWNvbnRlbnRdXyZdOmJnLXRyYW5zcGFyZW50JyxcbiAgICAgICAgU3RyaW5nLnJhd2BydGw6Kio6Wy5yZHAtYnV0dG9uXFxfbmV4dD5zdmddOnJvdGF0ZS0xODBgLFxuICAgICAgICBTdHJpbmcucmF3YHJ0bDoqKjpbLnJkcC1idXR0b25cXF9wcmV2aW91cz5zdmddOnJvdGF0ZS0xODBgLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICBjYXB0aW9uTGF5b3V0PXtjYXB0aW9uTGF5b3V0fVxuICAgICAgZm9ybWF0dGVycz17e1xuICAgICAgICBmb3JtYXRNb250aERyb3Bkb3duOiAoZGF0ZSkgPT5cbiAgICAgICAgICBkYXRlLnRvTG9jYWxlU3RyaW5nKCdkZWZhdWx0JywgeyBtb250aDogJ3Nob3J0JyB9KSxcbiAgICAgICAgLi4uZm9ybWF0dGVycyxcbiAgICAgIH19XG4gICAgICBjbGFzc05hbWVzPXt7XG4gICAgICAgIHJvb3Q6IGNuKCd3LWZpdCcsIGRlZmF1bHRDbGFzc05hbWVzLnJvb3QpLFxuICAgICAgICBtb250aHM6IGNuKFxuICAgICAgICAgICdmbGV4IGdhcC00IGZsZXgtY29sIG1kOmZsZXgtcm93IHJlbGF0aXZlJyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy5tb250aHNcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGg6IGNuKCdmbGV4IGZsZXgtY29sIHctZnVsbCBnYXAtNCcsIGRlZmF1bHRDbGFzc05hbWVzLm1vbnRoKSxcbiAgICAgICAgbmF2OiBjbihcbiAgICAgICAgICAnZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgdy1mdWxsIGFic29sdXRlIHRvcC0wIGluc2V0LXgtMCBqdXN0aWZ5LWJldHdlZW4nLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLm5hdlxuICAgICAgICApLFxuICAgICAgICBidXR0b25fcHJldmlvdXM6IGNuKFxuICAgICAgICAgIGJ1dHRvblZhcmlhbnRzKHsgdmFyaWFudDogYnV0dG9uVmFyaWFudCB9KSxcbiAgICAgICAgICAnc2l6ZS0oLS1jZWxsLXNpemUpIGFyaWEtZGlzYWJsZWQ6b3BhY2l0eS01MCBwLTAgc2VsZWN0LW5vbmUnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLmJ1dHRvbl9wcmV2aW91c1xuICAgICAgICApLFxuICAgICAgICBidXR0b25fbmV4dDogY24oXG4gICAgICAgICAgYnV0dG9uVmFyaWFudHMoeyB2YXJpYW50OiBidXR0b25WYXJpYW50IH0pLFxuICAgICAgICAgICdzaXplLSgtLWNlbGwtc2l6ZSkgYXJpYS1kaXNhYmxlZDpvcGFjaXR5LTUwIHAtMCBzZWxlY3Qtbm9uZScsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMuYnV0dG9uX25leHRcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhfY2FwdGlvbjogY24oXG4gICAgICAgICAgJ2ZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGgtKC0tY2VsbC1zaXplKSB3LWZ1bGwgcHgtKC0tY2VsbC1zaXplKScsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMubW9udGhfY2FwdGlvblxuICAgICAgICApLFxuICAgICAgICBkcm9wZG93bnM6IGNuKFxuICAgICAgICAgICd3LWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1zbSBmb250LW1lZGl1bSBqdXN0aWZ5LWNlbnRlciBoLSgtLWNlbGwtc2l6ZSkgZ2FwLTEuNScsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMuZHJvcGRvd25zXG4gICAgICAgICksXG4gICAgICAgIGRyb3Bkb3duX3Jvb3Q6IGNuKFxuICAgICAgICAgICdyZWxhdGl2ZSBoYXMtZm9jdXM6Ym9yZGVyLXJpbmcgYm9yZGVyIGJvcmRlci1pbnB1dCBzaGFkb3cteHMgaGFzLWZvY3VzOnJpbmctcmluZy81MCBoYXMtZm9jdXM6cmluZy1bM3B4XSByb3VuZGVkLW1kJyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy5kcm9wZG93bl9yb290XG4gICAgICAgICksXG4gICAgICAgIGRyb3Bkb3duOiBjbihcbiAgICAgICAgICAnYWJzb2x1dGUgYmctcG9wb3ZlciBpbnNldC0wIG9wYWNpdHktMCcsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMuZHJvcGRvd25cbiAgICAgICAgKSxcbiAgICAgICAgY2FwdGlvbl9sYWJlbDogY24oXG4gICAgICAgICAgJ3NlbGVjdC1ub25lIGZvbnQtbWVkaXVtJyxcbiAgICAgICAgICBjYXB0aW9uTGF5b3V0ID09PSAnbGFiZWwnXG4gICAgICAgICAgICA/ICd0ZXh0LXNtJ1xuICAgICAgICAgICAgOiAncm91bmRlZC1tZCBwbC0yIHByLTEgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgdGV4dC1zbSBoLTggWyY+c3ZnXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgWyY+c3ZnXTpzaXplLTMuNScsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMuY2FwdGlvbl9sYWJlbFxuICAgICAgICApLFxuICAgICAgICB0YWJsZTogJ3ctZnVsbCBib3JkZXItY29sbGFwc2UnLFxuICAgICAgICB3ZWVrZGF5czogY24oJ2ZsZXgnLCBkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrZGF5cyksXG4gICAgICAgIHdlZWtkYXk6IGNuKFxuICAgICAgICAgICd0ZXh0LW11dGVkLWZvcmVncm91bmQgcm91bmRlZC1tZCBmbGV4LTEgZm9udC1ub3JtYWwgdGV4dC1bMC44cmVtXSBzZWxlY3Qtbm9uZScsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMud2Vla2RheVxuICAgICAgICApLFxuICAgICAgICB3ZWVrOiBjbignZmxleCB3LWZ1bGwgbXQtMicsIGRlZmF1bHRDbGFzc05hbWVzLndlZWspLFxuICAgICAgICB3ZWVrX251bWJlcl9oZWFkZXI6IGNuKFxuICAgICAgICAgICdzZWxlY3Qtbm9uZSB3LSgtLWNlbGwtc2l6ZSknLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLndlZWtfbnVtYmVyX2hlYWRlclxuICAgICAgICApLFxuICAgICAgICB3ZWVrX251bWJlcjogY24oXG4gICAgICAgICAgJ3RleHQtWzAuOHJlbV0gc2VsZWN0LW5vbmUgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kJyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrX251bWJlclxuICAgICAgICApLFxuICAgICAgICBkYXk6IGNuKFxuICAgICAgICAgICdyZWxhdGl2ZSB3LWZ1bGwgaC1mdWxsIHAtMCB0ZXh0LWNlbnRlciBbJjpmaXJzdC1jaGlsZFtkYXRhLXNlbGVjdGVkPXRydWVdX2J1dHRvbl06cm91bmRlZC1sLW1kIFsmOmxhc3QtY2hpbGRbZGF0YS1zZWxlY3RlZD10cnVlXV9idXR0b25dOnJvdW5kZWQtci1tZCBncm91cC9kYXkgYXNwZWN0LXNxdWFyZSBzZWxlY3Qtbm9uZScsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMuZGF5XG4gICAgICAgICksXG4gICAgICAgIHJhbmdlX3N0YXJ0OiBjbihcbiAgICAgICAgICAncm91bmRlZC1sLW1kIGJnLWFjY2VudCcsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMucmFuZ2Vfc3RhcnRcbiAgICAgICAgKSxcbiAgICAgICAgcmFuZ2VfbWlkZGxlOiBjbigncm91bmRlZC1ub25lJywgZGVmYXVsdENsYXNzTmFtZXMucmFuZ2VfbWlkZGxlKSxcbiAgICAgICAgcmFuZ2VfZW5kOiBjbigncm91bmRlZC1yLW1kIGJnLWFjY2VudCcsIGRlZmF1bHRDbGFzc05hbWVzLnJhbmdlX2VuZCksXG4gICAgICAgIHRvZGF5OiBjbihcbiAgICAgICAgICAnYmctYWNjZW50IHRleHQtYWNjZW50LWZvcmVncm91bmQgcm91bmRlZC1tZCBkYXRhLVtzZWxlY3RlZD10cnVlXTpyb3VuZGVkLW5vbmUnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLnRvZGF5XG4gICAgICAgICksXG4gICAgICAgIG91dHNpZGU6IGNuKFxuICAgICAgICAgICd0ZXh0LW11dGVkLWZvcmVncm91bmQgYXJpYS1zZWxlY3RlZDp0ZXh0LW11dGVkLWZvcmVncm91bmQnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLm91dHNpZGVcbiAgICAgICAgKSxcbiAgICAgICAgZGlzYWJsZWQ6IGNuKFxuICAgICAgICAgICd0ZXh0LW11dGVkLWZvcmVncm91bmQgb3BhY2l0eS01MCcsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMuZGlzYWJsZWRcbiAgICAgICAgKSxcbiAgICAgICAgaGlkZGVuOiBjbignaW52aXNpYmxlJywgZGVmYXVsdENsYXNzTmFtZXMuaGlkZGVuKSxcbiAgICAgICAgLi4uY2xhc3NOYW1lcyxcbiAgICAgIH19XG4gICAgICBjb21wb25lbnRzPXt7XG4gICAgICAgIFJvb3Q6ICh7IGNsYXNzTmFtZSwgcm9vdFJlZiwgLi4ucHJvcHMgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGRhdGEtc2xvdD1cImNhbGVuZGFyXCJcbiAgICAgICAgICAgICAgcmVmPXtyb290UmVmfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKGNsYXNzTmFtZSl9XG4gICAgICAgICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKVxuICAgICAgICB9LFxuICAgICAgICBDaGV2cm9uOiAoeyBjbGFzc05hbWUsIG9yaWVudGF0aW9uLCAuLi5wcm9wcyB9KSA9PiB7XG4gICAgICAgICAgaWYgKG9yaWVudGF0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxDaGV2cm9uTGVmdEljb24gY2xhc3NOYW1lPXtjbignc2l6ZS00JywgY2xhc3NOYW1lKX0gey4uLnByb3BzfSAvPlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPENoZXZyb25SaWdodEljb25cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKCdzaXplLTQnLCBjbGFzc05hbWUpfVxuICAgICAgICAgICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPENoZXZyb25Eb3duSWNvbiBjbGFzc05hbWU9e2NuKCdzaXplLTQnLCBjbGFzc05hbWUpfSB7Li4ucHJvcHN9IC8+XG4gICAgICAgICAgKVxuICAgICAgICB9LFxuICAgICAgICBEYXlCdXR0b246IENhbGVuZGFyRGF5QnV0dG9uLFxuICAgICAgICBXZWVrTnVtYmVyOiAoeyBjaGlsZHJlbiwgLi4ucHJvcHMgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8dGQgey4uLnByb3BzfT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IHNpemUtKC0tY2VsbC1zaXplKSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICApXG4gICAgICAgIH0sXG4gICAgICAgIC4uLmNvbXBvbmVudHMsXG4gICAgICB9fVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gQ2FsZW5kYXJEYXlCdXR0b24oe1xuICBjbGFzc05hbWUsXG4gIGRheSxcbiAgbW9kaWZpZXJzLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERheUJ1dHRvbj4pIHtcbiAgY29uc3QgZGVmYXVsdENsYXNzTmFtZXMgPSBnZXREZWZhdWx0Q2xhc3NOYW1lcygpXG5cbiAgY29uc3QgcmVmID0gUmVhY3QudXNlUmVmPEhUTUxCdXR0b25FbGVtZW50PihudWxsKVxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChtb2RpZmllcnMuZm9jdXNlZCkge1xuICAgICAgcmVmLmN1cnJlbnQ/LmZvY3VzKClcbiAgICB9XG4gIH0sIFttb2RpZmllcnMuZm9jdXNlZF0pXG5cbiAgcmV0dXJuIChcbiAgICA8QnV0dG9uXG4gICAgICByZWY9e3JlZn1cbiAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICBzaXplPVwiaWNvblwiXG4gICAgICBkYXRhLWRheT17ZGF5LmRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCl9XG4gICAgICBkYXRhLXNlbGVjdGVkLXNpbmdsZT17XG4gICAgICAgIG1vZGlmaWVycy5zZWxlY3RlZCAmJlxuICAgICAgICAhbW9kaWZpZXJzLnJhbmdlX3N0YXJ0ICYmXG4gICAgICAgICFtb2RpZmllcnMucmFuZ2VfZW5kICYmXG4gICAgICAgICFtb2RpZmllcnMucmFuZ2VfbWlkZGxlXG4gICAgICB9XG4gICAgICBkYXRhLXJhbmdlLXN0YXJ0PXttb2RpZmllcnMucmFuZ2Vfc3RhcnR9XG4gICAgICBkYXRhLXJhbmdlLWVuZD17bW9kaWZpZXJzLnJhbmdlX2VuZH1cbiAgICAgIGRhdGEtcmFuZ2UtbWlkZGxlPXttb2RpZmllcnMucmFuZ2VfbWlkZGxlfVxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2RhdGEtW3NlbGVjdGVkLXNpbmdsZT10cnVlXTpiZy1wcmltYXJ5IGRhdGEtW3NlbGVjdGVkLXNpbmdsZT10cnVlXTp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBkYXRhLVtyYW5nZS1taWRkbGU9dHJ1ZV06YmctYWNjZW50IGRhdGEtW3JhbmdlLW1pZGRsZT10cnVlXTp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGRhdGEtW3JhbmdlLXN0YXJ0PXRydWVdOmJnLXByaW1hcnkgZGF0YS1bcmFuZ2Utc3RhcnQ9dHJ1ZV06dGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZGF0YS1bcmFuZ2UtZW5kPXRydWVdOmJnLXByaW1hcnkgZGF0YS1bcmFuZ2UtZW5kPXRydWVdOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OmJvcmRlci1yaW5nIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OnJpbmctcmluZy81MCBkYXJrOmhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQgZmxleCBhc3BlY3Qtc3F1YXJlIHNpemUtYXV0byB3LWZ1bGwgbWluLXctKC0tY2VsbC1zaXplKSBmbGV4LWNvbCBnYXAtMSBsZWFkaW5nLW5vbmUgZm9udC1ub3JtYWwgZ3JvdXAtZGF0YS1bZm9jdXNlZD10cnVlXS9kYXk6cmVsYXRpdmUgZ3JvdXAtZGF0YS1bZm9jdXNlZD10cnVlXS9kYXk6ei0xMCBncm91cC1kYXRhLVtmb2N1c2VkPXRydWVdL2RheTpyaW5nLVszcHhdIGRhdGEtW3JhbmdlLWVuZD10cnVlXTpyb3VuZGVkLW1kIGRhdGEtW3JhbmdlLWVuZD10cnVlXTpyb3VuZGVkLXItbWQgZGF0YS1bcmFuZ2UtbWlkZGxlPXRydWVdOnJvdW5kZWQtbm9uZSBkYXRhLVtyYW5nZS1zdGFydD10cnVlXTpyb3VuZGVkLW1kIGRhdGEtW3JhbmdlLXN0YXJ0PXRydWVdOnJvdW5kZWQtbC1tZCBbJj5zcGFuXTp0ZXh0LXhzIFsmPnNwYW5dOm9wYWNpdHktNzAnLFxuICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy5kYXksXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmV4cG9ydCB7IENhbGVuZGFyLCBDYWxlbmRhckRheUJ1dHRvbiB9XG4iLAogICAgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICogYXMgQ2hlY2tib3hQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LWNoZWNrYm94J1xuaW1wb3J0IHsgQ2hlY2tJY29uIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBDaGVja2JveCh7XG4gIGNsYXNzTmFtZSxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBDaGVja2JveFByaW1pdGl2ZS5Sb290Pikge1xuICByZXR1cm4gKFxuICAgIDxDaGVja2JveFByaW1pdGl2ZS5Sb290XG4gICAgICBkYXRhLXNsb3Q9XCJjaGVja2JveFwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAncGVlciBib3JkZXItaW5wdXQgZGFyazpiZy1pbnB1dC8zMCBkYXRhLVtzdGF0ZT1jaGVja2VkXTpiZy1wcmltYXJ5IGRhdGEtW3N0YXRlPWNoZWNrZWRdOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhcms6ZGF0YS1bc3RhdGU9Y2hlY2tlZF06YmctcHJpbWFyeSBkYXRhLVtzdGF0ZT1jaGVja2VkXTpib3JkZXItcHJpbWFyeSBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBzaXplLTQgc2hyaW5rLTAgcm91bmRlZC1bNHB4XSBib3JkZXIgc2hhZG93LXhzIHRyYW5zaXRpb24tc2hhZG93IG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgPlxuICAgICAgPENoZWNrYm94UHJpbWl0aXZlLkluZGljYXRvclxuICAgICAgICBkYXRhLXNsb3Q9XCJjaGVja2JveC1pbmRpY2F0b3JcIlxuICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWN1cnJlbnQgdHJhbnNpdGlvbi1ub25lXCJcbiAgICAgID5cbiAgICAgICAgPENoZWNrSWNvbiBjbGFzc05hbWU9XCJzaXplLTMuNVwiIC8+XG4gICAgICA8L0NoZWNrYm94UHJpbWl0aXZlLkluZGljYXRvcj5cbiAgICA8L0NoZWNrYm94UHJpbWl0aXZlLlJvb3Q+XG4gIClcbn1cblxuZXhwb3J0IHsgQ2hlY2tib3ggfVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gQ2FyZCh7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1zbG90PVwiY2FyZFwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAndGV4dC1jYXJkLWZvcmVncm91bmQgZmxleCBmbGV4LWNvbCBnYXAtNiByb3VuZGVkLXhsIGJvcmRlciBzaGFkb3ctc20nLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBDYXJkSGVhZGVyKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBkYXRhLXNsb3Q9XCJjYXJkLWhlYWRlclwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnQGNvbnRhaW5lci9jYXJkLWhlYWRlciBncmlkIGF1dG8tcm93cy1taW4gZ3JpZC1yb3dzLVthdXRvX2F1dG9dIGl0ZW1zLXN0YXJ0IGdhcC0xLjUgcC00IHBiLTAgaGFzLWRhdGEtW3Nsb3Q9Y2FyZC1hY3Rpb25dOmdyaWQtY29scy1bMWZyX2F1dG9dJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gQ2FyZFRpdGxlKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBkYXRhLXNsb3Q9XCJjYXJkLXRpdGxlXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ2xlYWRpbmctbm9uZSBmb250LXNlbWlib2xkJywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIENhcmREZXNjcmlwdGlvbih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1zbG90PVwiY2FyZC1kZXNjcmlwdGlvblwiXG4gICAgICBjbGFzc05hbWU9e2NuKCd0ZXh0LW11dGVkLWZvcmVncm91bmQgdGV4dC1zbScsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBDYXJkQWN0aW9uKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBkYXRhLXNsb3Q9XCJjYXJkLWFjdGlvblwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnY29sLXN0YXJ0LTIgcm93LXNwYW4tMiByb3ctc3RhcnQtMSBzZWxmLXN0YXJ0IGp1c3RpZnktc2VsZi1lbmQnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBDYXJkQ29udGVudCh7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1zbG90PVwiY2FyZC1jb250ZW50XCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ3AtNCBwdC0wJywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIENhcmRGb290ZXIoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtc2xvdD1cImNhcmQtZm9vdGVyXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ2ZsZXggaXRlbXMtY2VudGVyIHB4LTYgWy5ib3JkZXItdF06cHQtNicsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQge1xuICBDYXJkLFxuICBDYXJkSGVhZGVyLFxuICBDYXJkRm9vdGVyLFxuICBDYXJkVGl0bGUsXG4gIENhcmRBY3Rpb24sXG4gIENhcmREZXNjcmlwdGlvbixcbiAgQ2FyZENvbnRlbnQsXG59XG4iLAogICAgImltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBDYWxlbmRhciBhcyBDYWxlbmRhckljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7IENhbGVuZGFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NhbGVuZGFyJ1xuaW1wb3J0IHtcbiAgUG9wb3ZlcixcbiAgUG9wb3ZlckNvbnRlbnQsXG4gIFBvcG92ZXJUcmlnZ2VyLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvcG9wb3ZlcidcbmltcG9ydCB7IHVzZVJlZiB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgUG9wb3ZlckNsb3NlIH0gZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXBvcG92ZXInXG5cbmludGVyZmFjZSBEYXRlUGlja2VyUHJvcHMge1xuICBkYXRlOiBEYXRlIHwgdW5kZWZpbmVkXG4gIHNldERhdGU6IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB2b2lkXG4gIGxhYmVsPzogc3RyaW5nXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICBjbG9zZU9uU2VsZWN0PzogYm9vbGVhblxufVxuXG5leHBvcnQgZnVuY3Rpb24gRGF0ZVBpY2tlcih7XG4gIGRhdGUsXG4gIGNsb3NlT25TZWxlY3QsXG4gIHNldERhdGUsXG4gIGxhYmVsID0gJ1BpY2sgYSBkYXRlJyxcbiAgY2xhc3NOYW1lLFxufTogRGF0ZVBpY2tlclByb3BzKSB7XG4gIGNvbnN0IHBvcE92ZXJSZWYgPSB1c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQgfCBudWxsPihudWxsKVxuXG4gIGNvbnN0IG9uU2VsZWN0ID0gKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHtcbiAgICBzZXREYXRlKGRhdGUpXG4gICAgaWYgKGNsb3NlT25TZWxlY3QpIHtcbiAgICAgIHBvcE92ZXJSZWYuY3VycmVudD8uY2xpY2soKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICA8UG9wb3Zlcj5cbiAgICAgICAgPFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgJ3ctZnVsbCBqdXN0aWZ5LXN0YXJ0IHRleHQtbGVmdCBmb250LW5vcm1hbCcsXG4gICAgICAgICAgICAgICFkYXRlICYmICd0ZXh0LW11dGVkLWZvcmVncm91bmQnXG4gICAgICAgICAgICApfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxDYWxlbmRhckljb24gY2xhc3NOYW1lPVwibXItMiBoLTQgdy00XCIgLz5cbiAgICAgICAgICAgIHtkYXRlID8gZGF5anMoZGF0ZSkuZm9ybWF0KCdNTU0gRCwgWVlZWScpIDogPHNwYW4+e2xhYmVsfTwvc3Bhbj59XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvUG9wb3ZlclRyaWdnZXI+XG4gICAgICAgIDxQb3BvdmVyQ29udGVudCBjbGFzc05hbWU9XCJ3LWF1dG8gcC0wXCIgYWxpZ249XCJzdGFydFwiPlxuICAgICAgICAgIDxQb3BvdmVyQ2xvc2UgcmVmPXtwb3BPdmVyUmVmfSAvPlxuICAgICAgICAgIDxDYWxlbmRhclxuICAgICAgICAgICAgbW9kZT1cInNpbmdsZVwiXG4gICAgICAgICAgICBzZWxlY3RlZD17ZGF0ZX1cbiAgICAgICAgICAgIG9uU2VsZWN0PXtvblNlbGVjdH1cbiAgICAgICAgICAgIG1vbnRoPXtkYXRlfVxuICAgICAgICAgICAgaW5pdGlhbEZvY3VzXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9Qb3BvdmVyQ29udGVudD5cbiAgICAgIDwvUG9wb3Zlcj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIFBvcG92ZXJQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXBvcG92ZXInXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIFBvcG92ZXIoe1xuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuUm9vdD4pIHtcbiAgcmV0dXJuIDxQb3BvdmVyUHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwicG9wb3ZlclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gUG9wb3ZlclRyaWdnZXIoe1xuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuVHJpZ2dlcj4pIHtcbiAgcmV0dXJuIDxQb3BvdmVyUHJpbWl0aXZlLlRyaWdnZXIgZGF0YS1zbG90PVwicG9wb3Zlci10cmlnZ2VyXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBQb3BvdmVyQ29udGVudCh7XG4gIGNsYXNzTmFtZSxcbiAgYWxpZ24gPSAnY2VudGVyJyxcbiAgc2lkZU9mZnNldCA9IDQsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgUG9wb3ZlclByaW1pdGl2ZS5Db250ZW50Pikge1xuICByZXR1cm4gKFxuICAgIDxQb3BvdmVyUHJpbWl0aXZlLlBvcnRhbD5cbiAgICAgIDxQb3BvdmVyUHJpbWl0aXZlLkNvbnRlbnRcbiAgICAgICAgZGF0YS1zbG90PVwicG9wb3Zlci1jb250ZW50XCJcbiAgICAgICAgYWxpZ249e2FsaWdufVxuICAgICAgICBzaWRlT2Zmc2V0PXtzaWRlT2Zmc2V0fVxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICdiZy1wb3BvdmVyIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc3RhdGU9b3Blbl06em9vbS1pbi05NSBkYXRhLVtzaWRlPWJvdHRvbV06c2xpZGUtaW4tZnJvbS10b3AtMiBkYXRhLVtzaWRlPWxlZnRdOnNsaWRlLWluLWZyb20tcmlnaHQtMiBkYXRhLVtzaWRlPXJpZ2h0XTpzbGlkZS1pbi1mcm9tLWxlZnQtMiBkYXRhLVtzaWRlPXRvcF06c2xpZGUtaW4tZnJvbS1ib3R0b20tMiB6LTUwIHctNzIgb3JpZ2luLSgtLXJhZGl4LXBvcG92ZXItY29udGVudC10cmFuc2Zvcm0tb3JpZ2luKSByb3VuZGVkLW1kIGJvcmRlciBwLTQgc2hhZG93LW1kIG91dGxpbmUtaGlkZGVuJyxcbiAgICAgICAgICBjbGFzc05hbWVcbiAgICAgICAgKX1cbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgLz5cbiAgICA8L1BvcG92ZXJQcmltaXRpdmUuUG9ydGFsPlxuICApXG59XG5cbmZ1bmN0aW9uIFBvcG92ZXJBbmNob3Ioe1xuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuQW5jaG9yPikge1xuICByZXR1cm4gPFBvcG92ZXJQcmltaXRpdmUuQW5jaG9yIGRhdGEtc2xvdD1cInBvcG92ZXItYW5jaG9yXCIgey4uLnByb3BzfSAvPlxufVxuXG5leHBvcnQgeyBQb3BvdmVyLCBQb3BvdmVyVHJpZ2dlciwgUG9wb3ZlckNvbnRlbnQsIFBvcG92ZXJBbmNob3IgfVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIERpYWxvZ1ByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtZGlhbG9nJ1xuaW1wb3J0IHsgWEljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIERpYWxvZyh7XG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlJvb3Q+KSB7XG4gIHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwiZGlhbG9nXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBEaWFsb2dUcmlnZ2VyKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuVHJpZ2dlcj4pIHtcbiAgcmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuVHJpZ2dlciBkYXRhLXNsb3Q9XCJkaWFsb2ctdHJpZ2dlclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nUG9ydGFsKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuUG9ydGFsPikge1xuICByZXR1cm4gPERpYWxvZ1ByaW1pdGl2ZS5Qb3J0YWwgZGF0YS1zbG90PVwiZGlhbG9nLXBvcnRhbFwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nQ2xvc2Uoe1xuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5DbG9zZT4pIHtcbiAgcmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuQ2xvc2UgZGF0YS1zbG90PVwiZGlhbG9nLWNsb3NlXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBEaWFsb2dPdmVybGF5KHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5PdmVybGF5Pikge1xuICByZXR1cm4gKFxuICAgIDxEaWFsb2dQcmltaXRpdmUuT3ZlcmxheVxuICAgICAgZGF0YS1zbG90PVwiZGlhbG9nLW92ZXJsYXlcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2RhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGZpeGVkIGluc2V0LTAgei01MCBiZy1ibGFjay81MCcsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0NvbnRlbnQoe1xuICBjbGFzc05hbWUsXG4gIGNoaWxkcmVuLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5Db250ZW50Pikge1xuICByZXR1cm4gKFxuICAgIDxEaWFsb2dQb3J0YWwgZGF0YS1zbG90PVwiZGlhbG9nLXBvcnRhbFwiPlxuICAgICAgPERpYWxvZ092ZXJsYXkgLz5cbiAgICAgIDxEaWFsb2dQcmltaXRpdmUuQ29udGVudFxuICAgICAgICBkYXRhLXNsb3Q9XCJkaWFsb2ctY29udGVudFwiXG4gICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgJ2JnLWJhY2tncm91bmQgZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1pbiBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1vcGVuXTpmYWRlLWluLTAgZGF0YS1bc3RhdGU9Y2xvc2VkXTp6b29tLW91dC05NSBkYXRhLVtzdGF0ZT1vcGVuXTp6b29tLWluLTk1IGZpeGVkIHRvcC1bNTAlXSBsZWZ0LVs1MCVdIHotNTAgZ3JpZCB3LWZ1bGwgbWF4LXctW2NhbGMoMTAwJS0ycmVtKV0gdHJhbnNsYXRlLXgtWy01MCVdIHRyYW5zbGF0ZS15LVstNTAlXSBnYXAtNCByb3VuZGVkLWxnIGJvcmRlciBwLTYgc2hhZG93LWxnIGR1cmF0aW9uLTIwMCBzbTptYXgtdy1sZyBtYXgtaC1bOTAlXSBvdmVyZmxvdy15LXNjcm9sbCcsXG4gICAgICAgICAgY2xhc3NOYW1lXG4gICAgICAgICl9XG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8RGlhbG9nUHJpbWl0aXZlLkNsb3NlIGNsYXNzTmFtZT1cInJpbmctb2Zmc2V0LWJhY2tncm91bmQgZm9jdXM6cmluZy1yaW5nIGRhdGEtW3N0YXRlPW9wZW5dOmJnLWFjY2VudCBkYXRhLVtzdGF0ZT1vcGVuXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgYWJzb2x1dGUgdG9wLTQgcmlnaHQtNCByb3VuZGVkLXhzIG9wYWNpdHktNzAgdHJhbnNpdGlvbi1vcGFjaXR5IGhvdmVyOm9wYWNpdHktMTAwIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLW9mZnNldC0yIGZvY3VzOm91dGxpbmUtaGlkZGVuIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTAgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00XCI+XG4gICAgICAgICAgPFhJY29uIC8+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPkNsb3NlPC9zcGFuPlxuICAgICAgICA8L0RpYWxvZ1ByaW1pdGl2ZS5DbG9zZT5cbiAgICAgIDwvRGlhbG9nUHJpbWl0aXZlLkNvbnRlbnQ+XG4gICAgPC9EaWFsb2dQb3J0YWw+XG4gIClcbn1cblxuZnVuY3Rpb24gRGlhbG9nSGVhZGVyKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBkYXRhLXNsb3Q9XCJkaWFsb2ctaGVhZGVyXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ2ZsZXggZmxleC1jb2wgZ2FwLTIgdGV4dC1jZW50ZXIgc206dGV4dC1sZWZ0JywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0Zvb3Rlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1zbG90PVwiZGlhbG9nLWZvb3RlclwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnZmxleCBmbGV4LWNvbC1yZXZlcnNlIGdhcC0yIHNtOmZsZXgtcm93IHNtOmp1c3RpZnktZW5kJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gRGlhbG9nVGl0bGUoe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlRpdGxlPikge1xuICByZXR1cm4gKFxuICAgIDxEaWFsb2dQcmltaXRpdmUuVGl0bGVcbiAgICAgIGRhdGEtc2xvdD1cImRpYWxvZy10aXRsZVwiXG4gICAgICBjbGFzc05hbWU9e2NuKCd0ZXh0LWxnIGxlYWRpbmctbm9uZSBmb250LXNlbWlib2xkJywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0Rlc2NyaXB0aW9uKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5EZXNjcmlwdGlvbj4pIHtcbiAgcmV0dXJuIChcbiAgICA8RGlhbG9nUHJpbWl0aXZlLkRlc2NyaXB0aW9uXG4gICAgICBkYXRhLXNsb3Q9XCJkaWFsb2ctZGVzY3JpcHRpb25cIlxuICAgICAgY2xhc3NOYW1lPXtjbigndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtc20nLCBjbGFzc05hbWUpfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZXhwb3J0IHtcbiAgRGlhbG9nLFxuICBEaWFsb2dDbG9zZSxcbiAgRGlhbG9nQ29udGVudCxcbiAgRGlhbG9nRGVzY3JpcHRpb24sXG4gIERpYWxvZ0Zvb3RlcixcbiAgRGlhbG9nSGVhZGVyLFxuICBEaWFsb2dPdmVybGF5LFxuICBEaWFsb2dQb3J0YWwsXG4gIERpYWxvZ1RpdGxlLFxuICBEaWFsb2dUcmlnZ2VyLFxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gSW5wdXQoeyBjbGFzc05hbWUsIHR5cGUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdpbnB1dCc+KSB7XG4gIHJldHVybiAoXG4gICAgPGlucHV0XG4gICAgICB0eXBlPXt0eXBlfVxuICAgICAgZGF0YS1zbG90PVwiaW5wdXRcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2ZpbGU6dGV4dC1mb3JlZ3JvdW5kIHBsYWNlaG9sZGVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBzZWxlY3Rpb246YmctcHJpbWFyeSBzZWxlY3Rpb246dGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZGFyazpiZy1pbnB1dC8zMCBib3JkZXItaW5wdXQgZmxleCBoLTkgdy1mdWxsIG1pbi13LTAgcm91bmRlZC1tZCBib3JkZXIgYmctdHJhbnNwYXJlbnQgcHgtMyBweS0xIHRleHQtYmFzZSBzaGFkb3cteHMgdHJhbnNpdGlvbi1bY29sb3IsYm94LXNoYWRvd10gb3V0bGluZS1ub25lIGZpbGU6aW5saW5lLWZsZXggZmlsZTpoLTcgZmlsZTpib3JkZXItMCBmaWxlOmJnLXRyYW5zcGFyZW50IGZpbGU6dGV4dC1zbSBmaWxlOmZvbnQtbWVkaXVtIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAgbWQ6dGV4dC1zbScsXG4gICAgICAgICdmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XScsXG4gICAgICAgICdhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgeyBJbnB1dCB9XG4iLAogICAgIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIExhYmVsUHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1sYWJlbCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gTGFiZWwoe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgTGFiZWxQcmltaXRpdmUuUm9vdD4pIHtcbiAgcmV0dXJuIChcbiAgICA8TGFiZWxQcmltaXRpdmUuUm9vdFxuICAgICAgZGF0YS1zbG90PVwibGFiZWxcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2ZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtc20gbGVhZGluZy1ub25lIGZvbnQtbWVkaXVtIHNlbGVjdC1ub25lIGdyb3VwLWRhdGEtW2Rpc2FibGVkPXRydWVdOnBvaW50ZXItZXZlbnRzLW5vbmUgZ3JvdXAtZGF0YS1bZGlzYWJsZWQ9dHJ1ZV06b3BhY2l0eS01MCBwZWVyLWRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBwZWVyLWRpc2FibGVkOm9wYWNpdHktNTAnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgeyBMYWJlbCB9XG4iLAogICAgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICogYXMgU2Nyb2xsQXJlYVByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3Qtc2Nyb2xsLWFyZWEnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBTY3JvbGxBcmVhUHJvcHNcbiAgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2Nyb2xsQXJlYVByaW1pdGl2ZS5Sb290PiB7XG4gIHZpZXdQb3J0UHJvcHM/OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydD5cbn1cblxuZnVuY3Rpb24gU2Nyb2xsQXJlYSh7IGNsYXNzTmFtZSwgY2hpbGRyZW4sIC4uLnByb3BzIH06IFNjcm9sbEFyZWFQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxTY3JvbGxBcmVhUHJpbWl0aXZlLlJvb3RcbiAgICAgIGRhdGEtc2xvdD1cInNjcm9sbC1hcmVhXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ3JlbGF0aXZlJywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICA8U2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydFxuICAgICAgICB7Li4ucHJvcHMudmlld1BvcnRQcm9wc31cbiAgICAgICAgZGF0YS1zbG90PVwic2Nyb2xsLWFyZWEtdmlld3BvcnRcIlxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICdmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBzaXplLWZ1bGwgcm91bmRlZC1baW5oZXJpdF0gdHJhbnNpdGlvbi1bY29sb3IsYm94LXNoYWRvd10gb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBmb2N1cy12aXNpYmxlOm91dGxpbmUtMScsXG4gICAgICAgICAgcHJvcHMudmlld1BvcnRQcm9wcz8uY2xhc3NOYW1lXG4gICAgICAgICl9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydD5cbiAgICAgIDxTY3JvbGxCYXIgLz5cbiAgICAgIDxTY3JvbGxBcmVhUHJpbWl0aXZlLkNvcm5lciAvPlxuICAgIDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5Sb290PlxuICApXG59XG5cbmZ1bmN0aW9uIFNjcm9sbEJhcih7XG4gIGNsYXNzTmFtZSxcbiAgb3JpZW50YXRpb24gPSAndmVydGljYWwnLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjcm9sbEFyZWFQcmltaXRpdmUuU2Nyb2xsQXJlYVNjcm9sbGJhcj4pIHtcbiAgcmV0dXJuIChcbiAgICA8U2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhU2Nyb2xsYmFyXG4gICAgICBkYXRhLXNsb3Q9XCJzY3JvbGwtYXJlYS1zY3JvbGxiYXJcIlxuICAgICAgb3JpZW50YXRpb249e29yaWVudGF0aW9ufVxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2ZsZXggdG91Y2gtbm9uZSBwLXB4IHRyYW5zaXRpb24tY29sb3JzIHNlbGVjdC1ub25lJyxcbiAgICAgICAgb3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcgJiZcbiAgICAgICAgICAnaC1mdWxsIHctMi41IGJvcmRlci1sIGJvcmRlci1sLXRyYW5zcGFyZW50JyxcbiAgICAgICAgb3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJyAmJlxuICAgICAgICAgICdoLTIuNSBmbGV4LWNvbCBib3JkZXItdCBib3JkZXItdC10cmFuc3BhcmVudCcsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICA8U2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhVGh1bWJcbiAgICAgICAgZGF0YS1zbG90PVwic2Nyb2xsLWFyZWEtdGh1bWJcIlxuICAgICAgICBjbGFzc05hbWU9XCJiZy1ib3JkZXIgcmVsYXRpdmUgZmxleC0xIHJvdW5kZWQtZnVsbFwiXG4gICAgICAvPlxuICAgIDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhU2Nyb2xsYmFyPlxuICApXG59XG5cbmV4cG9ydCB7IFNjcm9sbEFyZWEsIFNjcm9sbEJhciB9XG4iLAogICAgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICogYXMgU2VsZWN0UHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1zZWxlY3QnXG5pbXBvcnQgeyBDaGVja0ljb24sIENoZXZyb25Eb3duSWNvbiwgQ2hldnJvblVwSWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gU2VsZWN0KHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuUm9vdD4pIHtcbiAgcmV0dXJuIDxTZWxlY3RQcmltaXRpdmUuUm9vdCBkYXRhLXNsb3Q9XCJzZWxlY3RcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFNlbGVjdEdyb3VwKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuR3JvdXA+KSB7XG4gIHJldHVybiA8U2VsZWN0UHJpbWl0aXZlLkdyb3VwIGRhdGEtc2xvdD1cInNlbGVjdC1ncm91cFwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gU2VsZWN0VmFsdWUoe1xuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5WYWx1ZT4pIHtcbiAgcmV0dXJuIDxTZWxlY3RQcmltaXRpdmUuVmFsdWUgZGF0YS1zbG90PVwic2VsZWN0LXZhbHVlXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBTZWxlY3RUcmlnZ2VyKHtcbiAgY2xhc3NOYW1lLFxuICBzaXplID0gJ2RlZmF1bHQnLFxuICBjaGlsZHJlbixcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuVHJpZ2dlcj4gJiB7XG4gIHNpemU/OiAnc20nIHwgJ2RlZmF1bHQnXG59KSB7XG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFByaW1pdGl2ZS5UcmlnZ2VyXG4gICAgICBkYXRhLXNsb3Q9XCJzZWxlY3QtdHJpZ2dlclwiXG4gICAgICBkYXRhLXNpemU9e3NpemV9XG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICBcImJvcmRlci1pbnB1dCBkYXRhLVtwbGFjZWhvbGRlcl06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIFsmX3N2Zzpub3QoW2NsYXNzKj0ndGV4dC0nXSldOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBkYXJrOmJnLWlucHV0LzMwIGRhcms6aG92ZXI6YmctaW5wdXQvNTAgZmxleCB3LWZpdCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIHJvdW5kZWQtbWQgYm9yZGVyIGJnLXRyYW5zcGFyZW50IHB4LTMgcHktMiB0ZXh0LXNtIHdoaXRlc3BhY2Utbm93cmFwIHNoYWRvdy14cyB0cmFuc2l0aW9uLVtjb2xvcixib3gtc2hhZG93XSBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLVszcHhdIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwIGRhdGEtW3NpemU9ZGVmYXVsdF06aC05IGRhdGEtW3NpemU9c21dOmgtOCAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTpsaW5lLWNsYW1wLTEgKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06ZmxleCAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTppdGVtcy1jZW50ZXIgKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06Z2FwLTIgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTAgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00XCIsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgICA8U2VsZWN0UHJpbWl0aXZlLkljb24gYXNDaGlsZD5cbiAgICAgICAgPENoZXZyb25Eb3duSWNvbiBjbGFzc05hbWU9XCJzaXplLTQgb3BhY2l0eS01MFwiIC8+XG4gICAgICA8L1NlbGVjdFByaW1pdGl2ZS5JY29uPlxuICAgIDwvU2VsZWN0UHJpbWl0aXZlLlRyaWdnZXI+XG4gIClcbn1cblxuZnVuY3Rpb24gU2VsZWN0Q29udGVudCh7XG4gIGNsYXNzTmFtZSxcbiAgY2hpbGRyZW4sXG4gIHBvc2l0aW9uID0gJ3BvcHBlcicsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkNvbnRlbnQ+KSB7XG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFByaW1pdGl2ZS5Qb3J0YWw+XG4gICAgICA8U2VsZWN0UHJpbWl0aXZlLkNvbnRlbnRcbiAgICAgICAgZGF0YS1zbG90PVwic2VsZWN0LWNvbnRlbnRcIlxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICdiZy1wb3BvdmVyIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc3RhdGU9b3Blbl06em9vbS1pbi05NSBkYXRhLVtzaWRlPWJvdHRvbV06c2xpZGUtaW4tZnJvbS10b3AtMiBkYXRhLVtzaWRlPWxlZnRdOnNsaWRlLWluLWZyb20tcmlnaHQtMiBkYXRhLVtzaWRlPXJpZ2h0XTpzbGlkZS1pbi1mcm9tLWxlZnQtMiBkYXRhLVtzaWRlPXRvcF06c2xpZGUtaW4tZnJvbS1ib3R0b20tMiByZWxhdGl2ZSB6LTUwIG1heC1oLSgtLXJhZGl4LXNlbGVjdC1jb250ZW50LWF2YWlsYWJsZS1oZWlnaHQpIG1pbi13LVs4cmVtXSBvcmlnaW4tKC0tcmFkaXgtc2VsZWN0LWNvbnRlbnQtdHJhbnNmb3JtLW9yaWdpbikgb3ZlcmZsb3cteC1oaWRkZW4gb3ZlcmZsb3cteS1hdXRvIHJvdW5kZWQtbWQgYm9yZGVyIHNoYWRvdy1tZCcsXG4gICAgICAgICAgcG9zaXRpb24gPT09ICdwb3BwZXInICYmXG4gICAgICAgICAgICAnZGF0YS1bc2lkZT1ib3R0b21dOnRyYW5zbGF0ZS15LTEgZGF0YS1bc2lkZT1sZWZ0XTotdHJhbnNsYXRlLXgtMSBkYXRhLVtzaWRlPXJpZ2h0XTp0cmFuc2xhdGUteC0xIGRhdGEtW3NpZGU9dG9wXTotdHJhbnNsYXRlLXktMScsXG4gICAgICAgICAgY2xhc3NOYW1lXG4gICAgICAgICl9XG4gICAgICAgIHBvc2l0aW9uPXtwb3NpdGlvbn1cbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgPlxuICAgICAgICA8U2VsZWN0U2Nyb2xsVXBCdXR0b24gLz5cbiAgICAgICAgPFNlbGVjdFByaW1pdGl2ZS5WaWV3cG9ydFxuICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAncC0xJyxcbiAgICAgICAgICAgIHBvc2l0aW9uID09PSAncG9wcGVyJyAmJlxuICAgICAgICAgICAgICAnaC1bdmFyKC0tcmFkaXgtc2VsZWN0LXRyaWdnZXItaGVpZ2h0KV0gdy1mdWxsIG1pbi13LVt2YXIoLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci13aWR0aCldIHNjcm9sbC1teS0xJ1xuICAgICAgICAgICl9XG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvU2VsZWN0UHJpbWl0aXZlLlZpZXdwb3J0PlxuICAgICAgICA8U2VsZWN0U2Nyb2xsRG93bkJ1dHRvbiAvPlxuICAgICAgPC9TZWxlY3RQcmltaXRpdmUuQ29udGVudD5cbiAgICA8L1NlbGVjdFByaW1pdGl2ZS5Qb3J0YWw+XG4gIClcbn1cblxuZnVuY3Rpb24gU2VsZWN0TGFiZWwoe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkxhYmVsPikge1xuICByZXR1cm4gKFxuICAgIDxTZWxlY3RQcmltaXRpdmUuTGFiZWxcbiAgICAgIGRhdGEtc2xvdD1cInNlbGVjdC1sYWJlbFwiXG4gICAgICBjbGFzc05hbWU9e2NuKCd0ZXh0LW11dGVkLWZvcmVncm91bmQgcHgtMiBweS0xLjUgdGV4dC14cycsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBTZWxlY3RJdGVtKHtcbiAgY2xhc3NOYW1lLFxuICBjaGlsZHJlbixcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuSXRlbT4pIHtcbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0UHJpbWl0aXZlLkl0ZW1cbiAgICAgIGRhdGEtc2xvdD1cInNlbGVjdC1pdGVtXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgIFwiZm9jdXM6YmctYWNjZW50IGZvY3VzOnRleHQtYWNjZW50LWZvcmVncm91bmQgWyZfc3ZnOm5vdChbY2xhc3MqPSd0ZXh0LSddKV06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHJlbGF0aXZlIGZsZXggdy1mdWxsIGN1cnNvci1kZWZhdWx0IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLXNtIHB5LTEuNSBwci04IHBsLTIgdGV4dC1zbSBvdXRsaW5lLWhpZGRlbiBzZWxlY3Qtbm9uZSBkYXRhLVtkaXNhYmxlZF06cG9pbnRlci1ldmVudHMtbm9uZSBkYXRhLVtkaXNhYmxlZF06b3BhY2l0eS01MCBbJl9zdmddOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpzaHJpbmstMCBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTQgKjpbc3Bhbl06bGFzdDpmbGV4ICo6W3NwYW5dOmxhc3Q6aXRlbXMtY2VudGVyICo6W3NwYW5dOmxhc3Q6Z2FwLTJcIixcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImFic29sdXRlIHJpZ2h0LTIgZmxleCBzaXplLTMuNSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgPFNlbGVjdFByaW1pdGl2ZS5JdGVtSW5kaWNhdG9yPlxuICAgICAgICAgIDxDaGVja0ljb24gY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cbiAgICAgICAgPC9TZWxlY3RQcmltaXRpdmUuSXRlbUluZGljYXRvcj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxTZWxlY3RQcmltaXRpdmUuSXRlbVRleHQ+e2NoaWxkcmVufTwvU2VsZWN0UHJpbWl0aXZlLkl0ZW1UZXh0PlxuICAgIDwvU2VsZWN0UHJpbWl0aXZlLkl0ZW0+XG4gIClcbn1cblxuZnVuY3Rpb24gU2VsZWN0U2VwYXJhdG9yKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5TZXBhcmF0b3I+KSB7XG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFByaW1pdGl2ZS5TZXBhcmF0b3JcbiAgICAgIGRhdGEtc2xvdD1cInNlbGVjdC1zZXBhcmF0b3JcIlxuICAgICAgY2xhc3NOYW1lPXtjbignYmctYm9yZGVyIHBvaW50ZXItZXZlbnRzLW5vbmUgLW14LTEgbXktMSBoLXB4JywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIFNlbGVjdFNjcm9sbFVwQnV0dG9uKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxVcEJ1dHRvbj4pIHtcbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0UHJpbWl0aXZlLlNjcm9sbFVwQnV0dG9uXG4gICAgICBkYXRhLXNsb3Q9XCJzZWxlY3Qtc2Nyb2xsLXVwLWJ1dHRvblwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnZmxleCBjdXJzb3ItZGVmYXVsdCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHktMScsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICA8Q2hldnJvblVwSWNvbiBjbGFzc05hbWU9XCJzaXplLTRcIiAvPlxuICAgIDwvU2VsZWN0UHJpbWl0aXZlLlNjcm9sbFVwQnV0dG9uPlxuICApXG59XG5cbmZ1bmN0aW9uIFNlbGVjdFNjcm9sbERvd25CdXR0b24oe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlNjcm9sbERvd25CdXR0b24+KSB7XG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxEb3duQnV0dG9uXG4gICAgICBkYXRhLXNsb3Q9XCJzZWxlY3Qtc2Nyb2xsLWRvd24tYnV0dG9uXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdmbGV4IGN1cnNvci1kZWZhdWx0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS0xJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIDxDaGV2cm9uRG93bkljb24gY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cbiAgICA8L1NlbGVjdFByaW1pdGl2ZS5TY3JvbGxEb3duQnV0dG9uPlxuICApXG59XG5cbmV4cG9ydCB7XG4gIFNlbGVjdCxcbiAgU2VsZWN0Q29udGVudCxcbiAgU2VsZWN0R3JvdXAsXG4gIFNlbGVjdEl0ZW0sXG4gIFNlbGVjdExhYmVsLFxuICBTZWxlY3RTY3JvbGxEb3duQnV0dG9uLFxuICBTZWxlY3RTY3JvbGxVcEJ1dHRvbixcbiAgU2VsZWN0U2VwYXJhdG9yLFxuICBTZWxlY3RUcmlnZ2VyLFxuICBTZWxlY3RWYWx1ZSxcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgKiBhcyBUYWJzUHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC10YWJzJ1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBUYWJzKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFRhYnNQcmltaXRpdmUuUm9vdD4pIHtcbiAgcmV0dXJuIChcbiAgICA8VGFic1ByaW1pdGl2ZS5Sb290XG4gICAgICBkYXRhLXNsb3Q9XCJ0YWJzXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ2ZsZXggZmxleC1jb2wgZ2FwLTInLCBjbGFzc05hbWUpfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gVGFic0xpc3Qoe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgVGFic1ByaW1pdGl2ZS5MaXN0Pikge1xuICByZXR1cm4gKFxuICAgIDxUYWJzUHJpbWl0aXZlLkxpc3RcbiAgICAgIGRhdGEtc2xvdD1cInRhYnMtbGlzdFwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnYmctbXV0ZWQgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGlubGluZS1mbGV4IGgtOSB3LWZpdCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1sZyBwLVszcHhdJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gVGFic1RyaWdnZXIoe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgVGFic1ByaW1pdGl2ZS5UcmlnZ2VyPikge1xuICByZXR1cm4gKFxuICAgIDxUYWJzUHJpbWl0aXZlLlRyaWdnZXJcbiAgICAgIGRhdGEtc2xvdD1cInRhYnMtdHJpZ2dlclwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICBcImRhdGEtW3N0YXRlPWFjdGl2ZV06YmctYmFja2dyb3VuZCBkYXJrOmRhdGEtW3N0YXRlPWFjdGl2ZV06dGV4dC1mb3JlZ3JvdW5kIGZvY3VzLXZpc2libGU6Ym9yZGVyLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLXJpbmcgZGFyazpkYXRhLVtzdGF0ZT1hY3RpdmVdOmJvcmRlci1pbnB1dCBkYXJrOmRhdGEtW3N0YXRlPWFjdGl2ZV06YmctaW5wdXQvMzAgdGV4dC1mb3JlZ3JvdW5kIGRhcms6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGlubGluZS1mbGV4IGgtW2NhbGMoMTAwJS0xcHgpXSBmbGV4LTEgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXRyYW5zcGFyZW50IHB4LTIgcHktMSB0ZXh0LXNtIGZvbnQtbWVkaXVtIHdoaXRlc3BhY2Utbm93cmFwIHRyYW5zaXRpb24tW2NvbG9yLGJveC1zaGFkb3ddIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBmb2N1cy12aXNpYmxlOm91dGxpbmUtMSBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOm9wYWNpdHktNTAgZGF0YS1bc3RhdGU9YWN0aXZlXTpzaGFkb3ctc20gWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTAgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00XCIsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIFRhYnNDb250ZW50KHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFRhYnNQcmltaXRpdmUuQ29udGVudD4pIHtcbiAgcmV0dXJuIChcbiAgICA8VGFic1ByaW1pdGl2ZS5Db250ZW50XG4gICAgICBkYXRhLXNsb3Q9XCJ0YWJzLWNvbnRlbnRcIlxuICAgICAgY2xhc3NOYW1lPXtjbignZmxleC0xIG91dGxpbmUtbm9uZScsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgeyBUYWJzLCBUYWJzTGlzdCwgVGFic1RyaWdnZXIsIFRhYnNDb250ZW50IH1cbiIsCiAgICAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgKiBhcyBUb29sdGlwUHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC10b29sdGlwJ1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBUb29sdGlwUHJvdmlkZXIoe1xuICBkZWxheUR1cmF0aW9uID0gMCxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBUb29sdGlwUHJpbWl0aXZlLlByb3ZpZGVyPikge1xuICByZXR1cm4gKFxuICAgIDxUb29sdGlwUHJpbWl0aXZlLlByb3ZpZGVyXG4gICAgICBkYXRhLXNsb3Q9XCJ0b29sdGlwLXByb3ZpZGVyXCJcbiAgICAgIGRlbGF5RHVyYXRpb249e2RlbGF5RHVyYXRpb259XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBUb29sdGlwKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBUb29sdGlwUHJpbWl0aXZlLlJvb3Q+KSB7XG4gIHJldHVybiAoXG4gICAgPFRvb2x0aXBQcm92aWRlcj5cbiAgICAgIDxUb29sdGlwUHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwidG9vbHRpcFwiIHsuLi5wcm9wc30gLz5cbiAgICA8L1Rvb2x0aXBQcm92aWRlcj5cbiAgKVxufVxuXG5mdW5jdGlvbiBUb29sdGlwVHJpZ2dlcih7XG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgVG9vbHRpcFByaW1pdGl2ZS5UcmlnZ2VyPikge1xuICByZXR1cm4gPFRvb2x0aXBQcmltaXRpdmUuVHJpZ2dlciBkYXRhLXNsb3Q9XCJ0b29sdGlwLXRyaWdnZXJcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFRvb2x0aXBDb250ZW50KHtcbiAgY2xhc3NOYW1lLFxuICBzaWRlT2Zmc2V0ID0gMCxcbiAgY2hpbGRyZW4sXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgVG9vbHRpcFByaW1pdGl2ZS5Db250ZW50Pikge1xuICByZXR1cm4gKFxuICAgIDxUb29sdGlwUHJpbWl0aXZlLlBvcnRhbD5cbiAgICAgIDxUb29sdGlwUHJpbWl0aXZlLkNvbnRlbnRcbiAgICAgICAgZGF0YS1zbG90PVwidG9vbHRpcC1jb250ZW50XCJcbiAgICAgICAgc2lkZU9mZnNldD17c2lkZU9mZnNldH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBhbmltYXRlLWluIGZhZGUtaW4tMCB6b29tLWluLTk1IGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc2lkZT1ib3R0b21dOnNsaWRlLWluLWZyb20tdG9wLTIgZGF0YS1bc2lkZT1sZWZ0XTpzbGlkZS1pbi1mcm9tLXJpZ2h0LTIgZGF0YS1bc2lkZT1yaWdodF06c2xpZGUtaW4tZnJvbS1sZWZ0LTIgZGF0YS1bc2lkZT10b3BdOnNsaWRlLWluLWZyb20tYm90dG9tLTIgei01MCB3LWZpdCBvcmlnaW4tKC0tcmFkaXgtdG9vbHRpcC1jb250ZW50LXRyYW5zZm9ybS1vcmlnaW4pIHJvdW5kZWQtbWQgcHgtMyBweS0xLjUgdGV4dC14cyB0ZXh0LWJhbGFuY2UnLFxuICAgICAgICAgIGNsYXNzTmFtZVxuICAgICAgICApfVxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPFRvb2x0aXBQcmltaXRpdmUuQXJyb3cgY2xhc3NOYW1lPVwiYmctcHJpbWFyeSBmaWxsLXByaW1hcnkgei01MCBzaXplLTIuNSB0cmFuc2xhdGUteS1bY2FsYygtNTAlXy1fMnB4KV0gcm90YXRlLTQ1IHJvdW5kZWQtWzJweF1cIiAvPlxuICAgICAgPC9Ub29sdGlwUHJpbWl0aXZlLkNvbnRlbnQ+XG4gICAgPC9Ub29sdGlwUHJpbWl0aXZlLlBvcnRhbD5cbiAgKVxufVxuXG5leHBvcnQgeyBUb29sdGlwLCBUb29sdGlwVHJpZ2dlciwgVG9vbHRpcENvbnRlbnQsIFRvb2x0aXBQcm92aWRlciB9XG4iLAogICAgImltcG9ydCB7XG4gIERpYWxvZyxcbiAgRGlhbG9nQ29udGVudCxcbiAgRGlhbG9nSGVhZGVyLFxuICBEaWFsb2dUaXRsZSxcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBEcmFnZ2FibGVFdmVudCB9IGZyb20gJ0AvZmVhdHVyZXMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudCdcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBTZWxlY3RlZERheUV2ZW50cyB9IGZyb20gJy4uL3R5cGVzJ1xuXG5pbnRlcmZhY2UgQWxsRXZlbnREaWFsb2dQcm9wcyB7XG4gIHJlZjogUmVhY3QuUmVmPHtcbiAgICBvcGVuOiAoKSA9PiB2b2lkXG4gICAgY2xvc2U6ICgpID0+IHZvaWRcbiAgICBzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+IHZvaWRcbiAgfT5cbn1cblxuZXhwb3J0IGNvbnN0IEFsbEV2ZW50RGlhbG9nOiBSZWFjdC5GQzxBbGxFdmVudERpYWxvZ1Byb3BzPiA9ICh7IHJlZiB9KSA9PiB7XG4gIGNvbnN0IFtkaWFsb2dPcGVuLCBzZXREaWFsb2dPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2VsZWN0ZWREYXlFdmVudHMsIHNldFNlbGVjdGVkRGF5RXZlbnRzXSA9XG4gICAgdXNlU3RhdGU8U2VsZWN0ZWREYXlFdmVudHMgfCBudWxsPihudWxsKVxuICBjb25zdCB7IGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuICB1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgKCkgPT4gKHtcbiAgICBvcGVuOiAoKSA9PiBzZXREaWFsb2dPcGVuKHRydWUpLFxuICAgIGNsb3NlOiAoKSA9PiBzZXREaWFsb2dPcGVuKGZhbHNlKSxcbiAgICBzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+XG4gICAgICBzZXRTZWxlY3RlZERheUV2ZW50cyhkYXlFdmVudHMpLFxuICB9KSlcblxuICAvLyBHZXQgc3RhcnQgZGF0ZSBmb3IgdGhlIGN1cnJlbnQgbW9udGggdmlldyBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuICBjb25zdCBmaXJzdERheU9mTW9udGggPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cbiAgLy8gQ2FsY3VsYXRlIHRoZSBmaXJzdCBkYXkgb2YgdGhlIGNhbGVuZGFyIGdyaWQgY29ycmVjdGx5XG4gIC8vIEZpbmQgdGhlIGZpcnN0IGRheSBvZiB3ZWVrIChlLmcuIFN1bmRheSBvciBNb25kYXkpIHRoYXQgY29tZXMgYmVmb3JlIG9yIG9uIHRoZSBmaXJzdCBkYXkgb2YgdGhlIG1vbnRoXG4gIGxldCBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGZpcnN0RGF5T2ZNb250aC5jbG9uZSgpXG4gIHdoaWxlIChhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhci5kYXkoKSAhPT0gZmlyc3REYXlPZldlZWspIHtcbiAgICBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLnN1YnRyYWN0KDEsICdkYXknKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8RGlhbG9nIG9wZW49e2RpYWxvZ09wZW59IG9uT3BlbkNoYW5nZT17c2V0RGlhbG9nT3Blbn0+XG4gICAgICA8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJtYXgtaC1bODB2aF0gbWF4LXctbWQgb3ZlcmZsb3cteS1hdXRvXCI+XG4gICAgICAgIDxEaWFsb2dIZWFkZXI+XG4gICAgICAgICAgPERpYWxvZ1RpdGxlPlxuICAgICAgICAgICAge3NlbGVjdGVkRGF5RXZlbnRzICYmIHNlbGVjdGVkRGF5RXZlbnRzLmRheS5mb3JtYXQoJ01NTU0gRCwgWVlZWScpfVxuICAgICAgICAgIDwvRGlhbG9nVGl0bGU+XG4gICAgICAgIDwvRGlhbG9nSGVhZGVyPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTQgc3BhY2UteS0zXCI+XG4gICAgICAgICAge3NlbGVjdGVkRGF5RXZlbnRzICYmXG4gICAgICAgICAgICBzZWxlY3RlZERheUV2ZW50cy5ldmVudHMubWFwKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxEcmFnZ2FibGVFdmVudFxuICAgICAgICAgICAgICAgICAgZWxlbWVudElkPXtgYWxsLWV2ZW50cy1kaWFsb2ctZXZlbnQtJCR7ZXZlbnQuaWR9YH0gLy8gVXNlIGV2ZW50IElEIGZvciB1bmlxdWUgaWRlbnRpZmljYXRpb25cbiAgICAgICAgICAgICAgICAgIGtleT17ZXZlbnQuaWR9XG4gICAgICAgICAgICAgICAgICBldmVudD17ZXZlbnR9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBteS0xIGgtWzMwcHhdXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L0RpYWxvZ0NvbnRlbnQ+XG4gICAgPC9EaWFsb2c+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgdXNlRHJhZ2dhYmxlIH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgbW90aW9uIH0gZnJvbSAnbW90aW9uL3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDU1NQcm9wZXJ0aWVzIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5cbmNvbnN0IGdldEJvcmRlclJhZGl1c0NsYXNzID0gKFxuICBpc1RydW5jYXRlZFN0YXJ0OiBib29sZWFuLFxuICBpc1RydW5jYXRlZEVuZDogYm9vbGVhblxuKSA9PiB7XG4gIGlmIChpc1RydW5jYXRlZFN0YXJ0ICYmIGlzVHJ1bmNhdGVkRW5kKSB7XG4gICAgcmV0dXJuICdyb3VuZGVkLW5vbmUnXG4gIH1cbiAgaWYgKGlzVHJ1bmNhdGVkU3RhcnQpIHtcbiAgICByZXR1cm4gJ3JvdW5kZWQtci1tZCByb3VuZGVkLWwtbm9uZSdcbiAgfVxuICBpZiAoaXNUcnVuY2F0ZWRFbmQpIHtcbiAgICByZXR1cm4gJ3JvdW5kZWQtbC1tZCByb3VuZGVkLXItbm9uZSdcbiAgfVxuICByZXR1cm4gJ3JvdW5kZWQtbWQnXG59XG5cbmZ1bmN0aW9uIERyYWdnYWJsZUV2ZW50VW5tZW1vaXplZCh7XG4gIGVsZW1lbnRJZCxcbiAgZXZlbnQsXG4gIGNsYXNzTmFtZSxcbiAgc3R5bGUsXG4gIGRpc2FibGVEcmFnID0gZmFsc2UsXG59OiB7XG4gIGVsZW1lbnRJZDogc3RyaW5nXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICBzdHlsZT86IENTU1Byb3BlcnRpZXNcbiAgZXZlbnQ6IENhbGVuZGFyRXZlbnRcbiAgZGlzYWJsZURyYWc/OiBib29sZWFuXG59KSB7XG4gIGNvbnN0IHsgb25FdmVudENsaWNrLCByZW5kZXJFdmVudCwgZGlzYWJsZUV2ZW50Q2xpY2ssIGRpc2FibGVEcmFnQW5kRHJvcCB9ID1cbiAgICB1c2VDYWxlbmRhckNvbnRleHQoKVxuICBjb25zdCB7IGF0dHJpYnV0ZXMsIGxpc3RlbmVycywgc2V0Tm9kZVJlZiwgaXNEcmFnZ2luZyB9ID0gdXNlRHJhZ2dhYmxlKHtcbiAgICBpZDogZWxlbWVudElkLFxuICAgIGRhdGE6IHtcbiAgICAgIGV2ZW50LFxuICAgICAgdHlwZTogJ2NhbGVuZGFyLWV2ZW50JyxcbiAgICB9LFxuICAgIGRpc2FibGVkOiBkaXNhYmxlRHJhZyB8fCBkaXNhYmxlRHJhZ0FuZERyb3AsXG4gIH0pXG5cbiAgLy8gRGVmYXVsdCBldmVudCBjb250ZW50IHRvIHJlbmRlciBpZiBjdXN0b20gcmVuZGVyRXZlbnQgaXMgbm90IHByb3ZpZGVkXG4gIGNvbnN0IERlZmF1bHRFdmVudENvbnRlbnQgPSAoKSA9PiB7XG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBldmVudCBoYXMgdHJ1bmNhdGlvbiBpbmZvcm1hdGlvblxuICAgIGNvbnN0IGVuaGFuY2VkRXZlbnQgPSBldmVudCBhcyB1bmtub3duIGFzIHtcbiAgICAgIGlzVHJ1bmNhdGVkU3RhcnQ/OiBib29sZWFuXG4gICAgICBpc1RydW5jYXRlZEVuZD86IGJvb2xlYW5cbiAgICB9XG4gICAgY29uc3QgaXNUcnVuY2F0ZWRTdGFydCA9IGVuaGFuY2VkRXZlbnQuaXNUcnVuY2F0ZWRTdGFydFxuICAgIGNvbnN0IGlzVHJ1bmNhdGVkRW5kID0gZW5oYW5jZWRFdmVudC5pc1RydW5jYXRlZEVuZFxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICBldmVudC5iYWNrZ3JvdW5kQ29sb3IgfHwgJ2JnLWJsdWUtNTAwJyxcbiAgICAgICAgICBldmVudC5jb2xvciB8fCAndGV4dC13aGl0ZScsXG4gICAgICAgICAgJ2gtZnVsbCB3LWZ1bGwgcHgtMSBib3JkZXItWzEuNXB4XSBib3JkZXItY2FyZCB0ZXh0LWxlZnQgb3ZlcmZsb3ctY2xpcCByZWxhdGl2ZScsXG4gICAgICAgICAgZ2V0Qm9yZGVyUmFkaXVzQ2xhc3MoaXNUcnVuY2F0ZWRTdGFydCwgaXNUcnVuY2F0ZWRFbmQpXG4gICAgICAgICl9XG4gICAgICAgIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogZXZlbnQuYmFja2dyb3VuZENvbG9yLCBjb2xvcjogZXZlbnQuY29sb3IgfX1cbiAgICAgID5cbiAgICAgICAgey8qIExlZnQgY29udGludWF0aW9uIGluZGljYXRvciAqL31cbiAgICAgICAge2lzVHJ1bmNhdGVkU3RhcnQgJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgbGVmdC0wIHRvcC0wIGJvdHRvbS0wIHctMC41IGJnLWZvcmVncm91bmQvMjVcIj48L2Rpdj5cbiAgICAgICAgKX1cblxuICAgICAgICB7LyogRXZlbnQgdGl0bGUgKi99XG4gICAgICAgIDxwXG4gICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICd0ZXh0LVsxMHB4XSBmb250LXNlbWlib2xkIHNtOnRleHQteHMgbXQtMC41JyxcbiAgICAgICAgICAgIC8vIEFkZCBzbGlnaHQgcGFkZGluZyB0byBhdm9pZCBvdmVybGFwIHdpdGggaW5kaWNhdG9yc1xuICAgICAgICAgICAgaXNUcnVuY2F0ZWRTdGFydCAmJiAncGwtMScsXG4gICAgICAgICAgICBpc1RydW5jYXRlZEVuZCAmJiAncHItMSdcbiAgICAgICAgICApfVxuICAgICAgICA+XG4gICAgICAgICAge2V2ZW50LnRpdGxlfVxuICAgICAgICA8L3A+XG5cbiAgICAgICAgey8qIFJpZ2h0IGNvbnRpbnVhdGlvbiBpbmRpY2F0b3IgKi99XG4gICAgICAgIHtpc1RydW5jYXRlZEVuZCAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSByaWdodC0wIHRvcC0wIGJvdHRvbS0wIHctMC41IGJnLWZvcmVncm91bmQvMjVcIj48L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuICAgICAgPG1vdGlvbi5kaXZcbiAgICAgICAga2V5PXtlbGVtZW50SWR9XG4gICAgICAgIHJlZj17c2V0Tm9kZVJlZn1cbiAgICAgICAgey4uLmF0dHJpYnV0ZXN9XG4gICAgICAgIHsuLi5saXN0ZW5lcnN9XG4gICAgICAgIGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeTogLTUwIH19XG4gICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC01MCB9fVxuICAgICAgICBsYXlvdXRcbiAgICAgICAgbGF5b3V0SWQ9e2VsZW1lbnRJZH1cbiAgICAgICAgdHJhbnNpdGlvbj17eyBkdXJhdGlvbjogMC40LCBlYXNlOiAnZWFzZUluT3V0JyB9fVxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICd0cnVuY2F0ZSBoLWZ1bGwgdy1mdWxsJyxcbiAgICAgICAgICBkaXNhYmxlRHJhZyB8fCBkaXNhYmxlRHJhZ0FuZERyb3BcbiAgICAgICAgICAgID8gZGlzYWJsZUV2ZW50Q2xpY2tcbiAgICAgICAgICAgICAgPyAnY3Vyc29yLWRlZmF1bHQnXG4gICAgICAgICAgICAgIDogJ2N1cnNvci1wb2ludGVyJ1xuICAgICAgICAgICAgOiAnY3Vyc29yLWdyYWInLFxuICAgICAgICAgIGlzRHJhZ2dpbmcgJiZcbiAgICAgICAgICAgICEoZGlzYWJsZURyYWcgfHwgZGlzYWJsZURyYWdBbmREcm9wKSAmJlxuICAgICAgICAgICAgJ2N1cnNvci1ncmFiYmluZyBzaGFkb3ctbGcnLFxuICAgICAgICAgIGNsYXNzTmFtZVxuICAgICAgICApfVxuICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgIG9uRXZlbnRDbGljayhldmVudClcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgey8qIFVzZSBjdXN0b20gcmVuZGVyRXZlbnQgZnJvbSBjb250ZXh0IGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHVzZSBkZWZhdWx0ICovfVxuICAgICAgICB7cmVuZGVyRXZlbnQgPyByZW5kZXJFdmVudChldmVudCkgOiA8RGVmYXVsdEV2ZW50Q29udGVudCAvPn1cbiAgICAgIDwvbW90aW9uLmRpdj5cbiAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgRHJhZ2dhYmxlRXZlbnQgPSBtZW1vKFxuICBEcmFnZ2FibGVFdmVudFVubWVtb2l6ZWQsXG4gIChwcmV2UHJvcHMsIG5leHRQcm9wcykgPT4ge1xuICAgIC8vIENvbXBhcmUgdGhlIGVzc2VudGlhbCBwcm9wcyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcbiAgICByZXR1cm4gKFxuICAgICAgcHJldlByb3BzLmVsZW1lbnRJZCA9PT0gbmV4dFByb3BzLmVsZW1lbnRJZCAmJlxuICAgICAgcHJldlByb3BzLmRpc2FibGVEcmFnID09PSBuZXh0UHJvcHMuZGlzYWJsZURyYWcgJiZcbiAgICAgIHByZXZQcm9wcy5jbGFzc05hbWUgPT09IG5leHRQcm9wcy5jbGFzc05hbWUgJiZcbiAgICAgIHByZXZQcm9wcy5ldmVudCA9PT0gbmV4dFByb3BzLmV2ZW50XG4gICAgKVxuICB9XG4pXG4iLAogICAgImltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBEcm9wcGFibGVDZWxsIH0gZnJvbSAnQC9mZWF0dXJlcy9kcm9wcGFibGUtY2VsbC9kcm9wcGFibGUtY2VsbCdcbmltcG9ydCB7IEFsbEV2ZW50RGlhbG9nIH0gZnJvbSAnLi9hbGwtZXZlbnRzLWRpYWxvZydcbmltcG9ydCB0eXBlIHsgU2VsZWN0ZWREYXlFdmVudHMgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcblxuaW50ZXJmYWNlIERheUNlbGxQcm9wcyB7XG4gIGluZGV4OiBudW1iZXIgLy8gSW5kZXggb2YgdGhlIGRheSBpbiB0aGUgd2VlayAoMC02KVxuICBkYXk6IGRheWpzLkRheWpzXG4gIGRheU1heEV2ZW50cz86IG51bWJlclxuICBjbGFzc05hbWU/OiBzdHJpbmcgLy8gT3B0aW9uYWwgY2xhc3NOYW1lIGZvciBjdXN0b20gc3R5bGluZ1xufVxuXG5leHBvcnQgY29uc3QgRGF5Q2VsbDogUmVhY3QuRkM8RGF5Q2VsbFByb3BzPiA9ICh7XG4gIGluZGV4LFxuICBkYXksXG4gIGNsYXNzTmFtZSA9ICcnLFxufSkgPT4ge1xuICBjb25zdCBhbGxFdmVudHNEaWFsb2dSZWYgPSBSZWFjdC51c2VSZWY8e1xuICAgIG9wZW46ICgpID0+IHZvaWRcbiAgICBjbG9zZTogKCkgPT4gdm9pZFxuICAgIHNldFNlbGVjdGVkRGF5RXZlbnRzOiAoZGF5RXZlbnRzOiBTZWxlY3RlZERheUV2ZW50cykgPT4gdm9pZFxuICB9PihudWxsKVxuICBjb25zdCB7XG4gICAgY3VycmVudExvY2FsZSxcbiAgICBnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG4gICAgY3VycmVudERhdGUsXG4gICAgZmlyc3REYXlPZldlZWssXG4gICAgZGF5TWF4RXZlbnRzID0gMCxcbiAgICB0LFxuICB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcbiAgY29uc3QgdG9kYXlFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UoXG4gICAgZGF5LnN0YXJ0T2YoJ2RheScpLFxuICAgIGRheS5lbmRPZignZGF5JylcbiAgKVxuXG4gIC8vIEdldCBzdGFydCBkYXRlIGZvciB0aGUgY3VycmVudCBtb250aCB2aWV3IGJhc2VkIG9uIGZpcnN0RGF5T2ZXZWVrXG4gIGNvbnN0IGZpcnN0RGF5T2ZNb250aCA9IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ21vbnRoJylcblxuICAvLyBDYWxjdWxhdGUgdGhlIGZpcnN0IGRheSBvZiB0aGUgY2FsZW5kYXIgZ3JpZCBjb3JyZWN0bHlcbiAgLy8gRmluZCB0aGUgZmlyc3QgZGF5IG9mIHdlZWsgKGUuZy4gU3VuZGF5IG9yIE1vbmRheSkgdGhhdCBjb21lcyBiZWZvcmUgb3Igb24gdGhlIGZpcnN0IGRheSBvZiB0aGUgbW9udGhcbiAgbGV0IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyID0gZmlyc3REYXlPZk1vbnRoLmNsb25lKClcbiAgd2hpbGUgKGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLmRheSgpICE9PSBmaXJzdERheU9mV2Vlaykge1xuICAgIGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyID0gYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIuc3VidHJhY3QoMSwgJ2RheScpXG4gIH1cblxuICAvLyBIYW5kbGVyIGZvciBzaG93aW5nIGFsbCBldmVudHMgaW4gYSBkaWFsb2dcbiAgY29uc3Qgc2hvd0FsbEV2ZW50cyA9IChkYXk6IGRheWpzLkRheWpzLCBldmVudHM6IENhbGVuZGFyRXZlbnRbXSkgPT4ge1xuICAgIGFsbEV2ZW50c0RpYWxvZ1JlZi5jdXJyZW50Py5zZXRTZWxlY3RlZERheUV2ZW50cyh7XG4gICAgICBkYXksXG4gICAgICBldmVudHMsXG4gICAgfSlcbiAgICBhbGxFdmVudHNEaWFsb2dSZWYuY3VycmVudD8ub3BlbigpXG4gIH1cblxuICBjb25zdCBpc1RvZGF5ID0gZGF5LmlzU2FtZShkYXlqcygpLCAnZGF5JylcbiAgY29uc3QgaXNDdXJyZW50TW9udGggPSBkYXkubW9udGgoKSA9PT0gY3VycmVudERhdGUubW9udGgoKVxuICBjb25zdCBpc0xhc3RDb2x1bW4gPSBpbmRleCA9PT0gNiAvLyBTYXR1cmRheSBpcyB0aGUgbGFzdCBjb2x1bW4gaW4gYSB3ZWVrXG5cbiAgY29uc3QgaGlkZGVuRXZlbnRzQ291bnQgPSB0b2RheUV2ZW50cy5sZW5ndGggLSBkYXlNYXhFdmVudHNcbiAgY29uc3QgaGFzSGlkZGVuRXZlbnRzID0gaGlkZGVuRXZlbnRzQ291bnQgPiAwXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPERyb3BwYWJsZUNlbGxcbiAgICAgICAgaWQ9e2BkYXktY2VsbC0ke2RheS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuICAgICAgICB0eXBlPVwiZGF5LWNlbGxcIlxuICAgICAgICBkYXRhLXRlc3RpZD17YGRheS1jZWxsLSR7ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfWB9XG4gICAgICAgIGRhdGU9e2RheX1cbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAnY3Vyc29yLXBvaW50ZXIgb3ZlcmZsb3ctY2xpcCBwLTEgaG92ZXI6YmctYWNjZW50IG1pbi1oLVs2MHB4XScsXG4gICAgICAgICAgIWlzQ3VycmVudE1vbnRoICYmICdiZy1zZWNvbmRhcnkgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kJyxcbiAgICAgICAgICBpc0xhc3RDb2x1bW4gJiYgJ2JvcmRlci1yLTAnLFxuICAgICAgICAgIGNsYXNzTmFtZVxuICAgICAgICApfVxuICAgICAgPlxuICAgICAgICB7LyogQWJzb2x1dGVseSBwb3NpdGlvbmVkIG11bHRpLWRheSBiYXJzIChHb29nbGUgQ2FsZW5kYXIgc3R5bGUpICovfVxuXG4gICAgICAgIHsvKiBTaW5nbGUtZGF5IGV2ZW50cyBjb250YWluZXIgcG9zaXRpb25lZCBiZWxvdyBtdWx0aS1kYXkgZXZlbnRzICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLTFcIj5cbiAgICAgICAgICB7LyogRGF5IG51bWJlciAqL31cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAnZmxleCBoLTUgdy01IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdGV4dC14cyBzbTpoLTYgc206dy02JyxcbiAgICAgICAgICAgICAgaXNUb2RheSAmJiAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBmb250LW1lZGl1bSdcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge0ludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwgeyBkYXk6ICdudW1lcmljJyB9KS5mb3JtYXQoXG4gICAgICAgICAgICAgIGRheS50b0RhdGUoKVxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIHsvKiBSZW5kZXIgcGxhY2Vob2xkZXJzIGZvciBldmVudHMgdGhhdCBvY2N1ciB0b2RheSBzbyB0aGF0IHRoZSBjZWxsIGhlaWdodCBpcyBhY2NvcmRpbmcgdG8gZGF5TWF4RXZlbnRzLiAqL31cbiAgICAgICAgICB7dG9kYXlFdmVudHMuc2xpY2UoMCwgZGF5TWF4RXZlbnRzKS5tYXAoKGV2ZW50LCByb3dJbmRleCkgPT4gKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBrZXk9e2BlbXB0eS0ke3Jvd0luZGV4fWB9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtWzIwcHhdIHctZnVsbFwiXG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtldmVudD8udGl0bGV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpfVxuXG4gICAgICAgICAgey8qIFNob3cgbW9yZSBldmVudHMgYnV0dG9uIHdpdGggYWNjdXJhdGUgY291bnQgKi99XG4gICAgICAgICAge2hhc0hpZGRlbkV2ZW50cyAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBob3Zlcjp0ZXh0LWZvcmVncm91bmQgY3Vyc29yLXBvaW50ZXIgdGV4dC1bMTBweF0gd2hpdGVzcGFjZS1ub3dyYXAgc206dGV4dC14cyBtdC0xXCJcbiAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG5cbiAgICAgICAgICAgICAgICBzaG93QWxsRXZlbnRzKGRheSwgdG9kYXlFdmVudHMpXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIG9uS2V5RG93bj17KGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgfHwgZS5rZXkgPT09ICcgJykge1xuICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICBzaG93QWxsRXZlbnRzKGRheSwgdG9kYXlFdmVudHMpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICB0YWJJbmRleD17MH1cbiAgICAgICAgICAgICAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci10YWctb3Zlci1yb2xlXG4gICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAre2hpZGRlbkV2ZW50c0NvdW50fSB7dCgnbW9yZScpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L0Ryb3BwYWJsZUNlbGw+XG5cbiAgICAgIHsvKiBEaWFsb2cgZm9yIHNob3dpbmcgYWxsIGV2ZW50cyAqL31cbiAgICAgIDxBbGxFdmVudERpYWxvZyByZWY9e2FsbEV2ZW50c0RpYWxvZ1JlZn0gLz5cbiAgICA8Lz5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VEcm9wcGFibGUgfSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuXG5pbnRlcmZhY2UgRHJvcHBhYmxlQ2VsbFByb3BzIHtcbiAgaWQ6IHN0cmluZ1xuICB0eXBlOiAnZGF5LWNlbGwnIHwgJ3RpbWUtY2VsbCdcbiAgZGF0ZTogZGF5anMuRGF5anNcbiAgaG91cj86IG51bWJlclxuICBtaW51dGU/OiBudW1iZXJcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG4gIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllc1xuICAnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBEcm9wcGFibGVDZWxsKHtcbiAgaWQsXG4gIHR5cGUsXG4gIGRhdGUsXG4gIGhvdXIsXG4gIG1pbnV0ZSxcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgc3R5bGUsXG4gICdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG59OiBEcm9wcGFibGVDZWxsUHJvcHMpIHtcbiAgY29uc3QgeyBvbkNlbGxDbGljaywgZGlzYWJsZURyYWdBbmREcm9wLCBkaXNhYmxlQ2VsbENsaWNrIH0gPVxuICAgIHVzZUNhbGVuZGFyQ29udGV4dCgpXG4gIGNvbnN0IHsgaXNPdmVyLCBzZXROb2RlUmVmIH0gPSB1c2VEcm9wcGFibGUoe1xuICAgIGlkLFxuICAgIGRhdGE6IHtcbiAgICAgIHR5cGUsXG4gICAgICBkYXRlLFxuICAgICAgaG91cixcbiAgICAgIG1pbnV0ZSxcbiAgICB9LFxuICAgIGRpc2FibGVkOiBkaXNhYmxlRHJhZ0FuZERyb3AsXG4gIH0pXG5cbiAgY29uc3QgaGFuZGxlQ2VsbENsaWNrID0gKGU6IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgaWYgKGRpc2FibGVDZWxsQ2xpY2spIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IGRhdGUuaG91cihob3VyID8/IDApLm1pbnV0ZShtaW51dGUgPz8gMClcbiAgICBsZXQgZW5kRGF0ZSA9IHN0YXJ0RGF0ZS5jbG9uZSgpXG4gICAgaWYgKGhvdXIgIT09IHVuZGVmaW5lZCAmJiBtaW51dGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZW5kRGF0ZSA9IGVuZERhdGUuaG91cihob3VyKS5taW51dGUobWludXRlICsgMTUpIC8vIGRheSB2aWV3IHRpbWUgc2xvdHMgYXJlIDE1IG1pbnV0ZXNcbiAgICB9IGVsc2UgaWYgKGhvdXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZW5kRGF0ZSA9IGVuZERhdGUuaG91cihob3VyICsgMSkubWludXRlKDApIC8vIHdlZWsgdmlldyB0aW1lIHNsb3RzIGFyZSAxIGhvdXJcbiAgICB9IGVsc2Uge1xuICAgICAgZW5kRGF0ZSA9IGVuZERhdGUuaG91cigyMykubWludXRlKDU5KSAvLyBtb250aCB2aWV3IGZ1bGwgZGF5XG4gICAgfVxuXG4gICAgb25DZWxsQ2xpY2soc3RhcnREYXRlLCBlbmREYXRlKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e3NldE5vZGVSZWZ9XG4gICAgICBkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZH1cbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgaXNPdmVyICYmICFkaXNhYmxlRHJhZ0FuZERyb3AgJiYgJ2JnLWFjY2VudCcsXG4gICAgICAgIGRpc2FibGVDZWxsQ2xpY2sgPyAnY3Vyc29yLWRlZmF1bHQnIDogJ2N1cnNvci1wb2ludGVyJ1xuICAgICAgKX1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNlbGxDbGlja31cbiAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIE1vbnRoSGVhZGVyUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IE1vbnRoSGVhZGVyOiBSZWFjdC5GQzxNb250aEhlYWRlclByb3BzPiA9ICh7IGNsYXNzTmFtZSB9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBmaXJzdERheU9mV2VlayxcbiAgICBjdXJyZW50TG9jYWxlLFxuICAgIHN0aWNreVZpZXdIZWFkZXIsXG4gICAgdmlld0hlYWRlckNsYXNzTmFtZSxcbiAgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgLy8gUmVvcmRlciB3ZWVrIGRheXMgYmFzZWQgb24gZmlyc3REYXlPZldlZWtcbiAgY29uc3Qgd2Vla0RheXMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBkYXlzID0gZGF5anMud2Vla2RheXMoKS5tYXAoKGRheSkgPT4gZGF5LnRvTG93ZXJDYXNlKCkpXG4gICAgY29uc3Qgc2hvcnREYXlzID0gZGF5anMud2Vla2RheXNTaG9ydCgpLm1hcCgoZGF5KSA9PiBkYXkudG9Mb3dlckNhc2UoKSlcblxuICAgIC8vIFJvdGF0ZSB0aGUgYXJyYXkgYmFzZWQgb24gZmlyc3REYXlPZldlZWtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpcnN0RGF5T2ZXZWVrOyBpKyspIHtcbiAgICAgIGNvbnN0IGRheVRvTW92ZSA9IGRheXMuc2hpZnQoKVxuICAgICAgY29uc3Qgc2hvcnREYXlUb01vdmUgPSBzaG9ydERheXMuc2hpZnQoKVxuICAgICAgaWYgKGRheVRvTW92ZSkge1xuICAgICAgICBkYXlzLnB1c2goZGF5VG9Nb3ZlKVxuICAgICAgfVxuICAgICAgaWYgKHNob3J0RGF5VG9Nb3ZlKSB7XG4gICAgICAgIHNob3J0RGF5cy5wdXNoKHNob3J0RGF5VG9Nb3ZlKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IGRheXMsIHNob3J0RGF5cyB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbZmlyc3REYXlPZldlZWssIGN1cnJlbnRMb2NhbGVdKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2dyaWQgZ3JpZC1jb2xzLTcgYm9yZGVyLWInLFxuICAgICAgICBzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0yMCcsXG4gICAgICAgIHZpZXdIZWFkZXJDbGFzc05hbWUsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIGRhdGEtdGVzdGlkPVwibW9udGgtaGVhZGVyXCJcbiAgICA+XG4gICAgICB7d2Vla0RheXMuZGF5cy5tYXAoKHdlZWtEYXksIGluZGV4KSA9PiAoXG4gICAgICAgIDxBbmltYXRlUHJlc2VuY2Uga2V5PXt3ZWVrRGF5fSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgIDxtb3Rpb24uZGl2XG4gICAgICAgICAgICBrZXk9e3dlZWtEYXl9XG4gICAgICAgICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgICAgYW5pbWF0ZT17eyBvcGFjaXR5OiAxLCB5OiAwIH19XG4gICAgICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgICAgdHJhbnNpdGlvbj17e1xuICAgICAgICAgICAgICBkdXJhdGlvbjogMC4yNSxcbiAgICAgICAgICAgICAgZWFzZTogJ2Vhc2VJbk91dCcsXG4gICAgICAgICAgICAgIGRlbGF5OiBpbmRleCAqIDAuMDUsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwicHktMiB0ZXh0LWNlbnRlciBmb250LW1lZGl1bSBib3JkZXItciBmaXJzdDpib3JkZXItbFwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD17YHdlZWtkYXktaGVhZGVyLSR7d2Vla0RheX1gfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImhpZGRlbiB0ZXh0LXNtIHNtOmlubGluZVwiPnt3ZWVrRGF5fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQteHMgc206aGlkZGVuXCI+XG4gICAgICAgICAgICAgIHt3ZWVrRGF5cy5zaG9ydERheXNbaW5kZXhdfVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvbW90aW9uLmRpdj5cbiAgICAgICAgPC9BbmltYXRlUHJlc2VuY2U+XG4gICAgICApKX1cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IFdlZWtEYXlzIH0gZnJvbSAnQC9jb21wb25lbnRzJ1xuXG5leHBvcnQgY29uc3QgR0FQX0JFVFdFRU5fRUxFTUVOVFMgPSAxIC8vIHB4IChnYXAtMSlcbmV4cG9ydCBjb25zdCBEQVlfTlVNQkVSX0hFSUdIVCA9IDI4IC8vIHB4IChoLTcpXG5leHBvcnQgY29uc3QgRVZFTlRfQkFSX0hFSUdIVCA9IDI0IC8vIHB4IChoLVsyNHB4XSlcblxuZXhwb3J0IGNvbnN0IFdFRUtfREFZU19OVU1CRVJfTUFQOiBSZWNvcmQ8V2Vla0RheXMsIG51bWJlcj4gPSB7XG4gIHN1bmRheTogMCxcbiAgbW9uZGF5OiAxLFxuICB0dWVzZGF5OiAyLFxuICB3ZWRuZXNkYXk6IDMsXG4gIHRodXJzZGF5OiA0LFxuICBmcmlkYXk6IDUsXG4gIHNhdHVyZGF5OiA2LFxufVxuXG5leHBvcnQgY29uc3QgREFZX05VTUJFUl9UT19XRUVLX0RBWVM6IFJlY29yZDxudW1iZXIsIFdlZWtEYXlzPiA9IHtcbiAgMDogJ3N1bmRheScsXG4gIDE6ICdtb25kYXknLFxuICAyOiAndHVlc2RheScsXG4gIDM6ICd3ZWRuZXNkYXknLFxuICA0OiAndGh1cnNkYXknLFxuICA1OiAnZnJpZGF5JyxcbiAgNjogJ3NhdHVyZGF5Jyxcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQge1xuICBEQVlfTlVNQkVSX0hFSUdIVCxcbiAgRVZFTlRfQkFSX0hFSUdIVCxcbiAgR0FQX0JFVFdFRU5fRUxFTUVOVFMsXG59IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5cbmludGVyZmFjZSBQcm9jZXNzZWRFdmVudCBleHRlbmRzIENhbGVuZGFyRXZlbnQge1xuICBsZWZ0OiBudW1iZXIgLy8gTGVmdCBwb3NpdGlvbiBpbiBwZXJjZW50YWdlXG4gIHdpZHRoOiBudW1iZXIgLy8gV2lkdGggaW4gcGVyY2VudGFnZVxuICB0b3A6IG51bWJlciAvLyBUb3AgcG9zaXRpb24gaW4gcGVyY2VudGFnZVxuICBoZWlnaHQ6IG51bWJlciAvLyBIZWlnaHQgaW4gcGVyY2VudGFnZVxuICBwb3NpdGlvbjogbnVtYmVyIC8vIFBvc2l0aW9uIGluIHRoZSByb3cgKDAgZm9yIGZpcnN0LCAxIGZvciBzZWNvbmQsIGV0Yy4pXG59XG5cbmludGVyZmFjZSBVc2VQcm9jZXNzZWRXZWVrRXZlbnRzUHJvcHMge1xuICBkYXlzOiBkYXlqcy5EYXlqc1tdXG59XG5cbmV4cG9ydCBjb25zdCB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzID0gKHtcbiAgZGF5cyxcbn06IFVzZVByb2Nlc3NlZFdlZWtFdmVudHNQcm9wcykgPT4ge1xuICBjb25zdCB7IGdldEV2ZW50c0ZvckRhdGVSYW5nZSwgZGF5TWF4RXZlbnRzIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIGNvbnN0IHdlZWtTdGFydCA9IGRheXNbMF0uc3RhcnRPZignZGF5JylcbiAgY29uc3Qgd2Vla0VuZCA9IGRheXNbNl0uZW5kT2YoJ2RheScpXG5cbiAgLy8gR2V0IGFsbCBldmVudHMgdGhhdCBpbnRlcnNlY3Qgd2l0aCB0aGlzIHdlZWtcbiAgY29uc3Qgd2Vla0V2ZW50cyA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZSh3ZWVrU3RhcnQsIHdlZWtFbmQpXG5cbiAgLy8gU2VwYXJhdGUgbXVsdGktZGF5IGFuZCBzaW5nbGUtZGF5IGV2ZW50c1xuICBjb25zdCBtdWx0aURheUV2ZW50cyA9IHdlZWtFdmVudHMuZmlsdGVyKFxuICAgIChlKSA9PiBlLmVuZC5kaWZmKGUuc3RhcnQsICdkYXknKSA+IDBcbiAgKVxuICBjb25zdCBzaW5nbGVEYXlFdmVudHMgPSB3ZWVrRXZlbnRzLmZpbHRlcihcbiAgICAoZSkgPT4gZS5lbmQuZGlmZihlLnN0YXJ0LCAnZGF5JykgPT09IDBcbiAgKVxuXG4gIC8vIFNvcnQgbXVsdGktZGF5IGV2ZW50cyBieSBzdGFydCBkYXRlLCB0aGVuIGJ5IGR1cmF0aW9uXG4gIGNvbnN0IHNvcnRlZE11bHRpRGF5ID0gWy4uLm11bHRpRGF5RXZlbnRzXS5zb3J0KChhLCBiKSA9PiB7XG4gICAgY29uc3Qgc3RhcnREaWZmID0gYS5zdGFydC5kaWZmKGIuc3RhcnQpXG4gICAgaWYgKHN0YXJ0RGlmZiAhPT0gMCkge1xuICAgICAgcmV0dXJuIHN0YXJ0RGlmZlxuICAgIH1cbiAgICByZXR1cm4gYi5lbmQuZGlmZihiLnN0YXJ0KSAtIGEuZW5kLmRpZmYoYS5zdGFydCkgLy8gTG9uZ2VyIGV2ZW50cyBmaXJzdFxuICB9KVxuXG4gIC8vIFNvcnQgc2luZ2xlLWRheSBldmVudHMgYnkgc3RhcnQgdGltZVxuICBjb25zdCBzb3J0ZWRTaW5nbGVEYXkgPSBbLi4uc2luZ2xlRGF5RXZlbnRzXS5zb3J0KChhLCBiKSA9PlxuICAgIGEuc3RhcnQuZGlmZihiLnN0YXJ0KVxuICApXG5cbiAgLy8gQ3JlYXRlIDcgeCBkYXlNYXhFdmVudHMgZ3JpZCB3aXRoIGZsYWdzXG4gIGNvbnN0IGdyaWQ6IHsgdGFrZW46IGJvb2xlYW47IGV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbCB9W11bXSA9IFtdXG4gIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IGRheU1heEV2ZW50czsgcm93KyspIHtcbiAgICBncmlkW3Jvd10gPSBbXVxuICAgIGZvciAobGV0IGNvbCA9IDA7IGNvbCA8IDc7IGNvbCsrKSB7XG4gICAgICBncmlkW3Jvd11bY29sXSA9IHsgdGFrZW46IGZhbHNlLCBldmVudDogbnVsbCB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcHJvY2Vzc2VkRXZlbnRzOiBQcm9jZXNzZWRFdmVudFtdID0gW11cblxuICAvLyBTdGVwIDE6IEFzc2lnbiBwb3NpdGlvbnMgdG8gbXVsdGktZGF5IGV2ZW50cyBmaXJzdFxuICBmb3IgKGNvbnN0IGV2ZW50IG9mIHNvcnRlZE11bHRpRGF5KSB7XG4gICAgY29uc3QgZXZlbnRTdGFydCA9IGRheWpzLm1heChldmVudC5zdGFydC5zdGFydE9mKCdkYXknKSwgd2Vla1N0YXJ0KVxuICAgIGNvbnN0IGV2ZW50RW5kID0gZGF5anMubWluKGV2ZW50LmVuZC5zdGFydE9mKCdkYXknKSwgd2Vla0VuZClcbiAgICBjb25zdCBzdGFydENvbCA9IE1hdGgubWF4KDAsIGV2ZW50U3RhcnQuZGlmZih3ZWVrU3RhcnQsICdkYXknKSlcbiAgICBjb25zdCBlbmRDb2wgPSBNYXRoLm1pbig2LCBldmVudEVuZC5kaWZmKHdlZWtTdGFydCwgJ2RheScpKVxuXG4gICAgLy8gRGV0ZWN0IGlmIGV2ZW50IGlzIHRydW5jYXRlZCBhdCB0aGUgYm91bmRhcmllc1xuICAgIGNvbnN0IGlzVHJ1bmNhdGVkU3RhcnQgPSBldmVudC5zdGFydC5zdGFydE9mKCdkYXknKS5pc0JlZm9yZSh3ZWVrU3RhcnQpXG4gICAgY29uc3QgaXNUcnVuY2F0ZWRFbmQgPSBldmVudC5lbmQuc3RhcnRPZignZGF5JykuaXNBZnRlcih3ZWVrRW5kKVxuXG4gICAgLy8gVHJ5IHRvIHBsYWNlIHRoZSBldmVudCBzdGFydGluZyBmcm9tIGl0cyBvcmlnaW5hbCBzdGFydCBjb2x1bW5cbiAgICBsZXQgcGxhY2VkU3VjY2Vzc2Z1bGx5ID0gZmFsc2VcblxuICAgIC8vIEZpcnN0IHRyeTogcGxhY2UgZnJvbSBvcmlnaW5hbCBzdGFydCBwb3NpdGlvblxuICAgIGxldCBhc3NpZ25lZFJvdyA9IC0xXG4gICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgZGF5TWF4RXZlbnRzOyByb3crKykge1xuICAgICAgbGV0IGNhblBsYWNlID0gdHJ1ZVxuICAgICAgZm9yIChsZXQgY29sID0gc3RhcnRDb2w7IGNvbCA8PSBlbmRDb2w7IGNvbCsrKSB7XG4gICAgICAgIGlmIChncmlkW3Jvd11bY29sXS50YWtlbikge1xuICAgICAgICAgIGNhblBsYWNlID0gZmFsc2VcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2FuUGxhY2UpIHtcbiAgICAgICAgYXNzaWduZWRSb3cgPSByb3dcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBmb3VuZCBhIHJvdywgYXNzaWduIHRoZSBldmVudCB0byBhbGwgaXRzIGNvbHVtbnNcbiAgICBpZiAoYXNzaWduZWRSb3cgIT09IC0xKSB7XG4gICAgICBmb3IgKGxldCBjb2wgPSBzdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcbiAgICAgICAgZ3JpZFthc3NpZ25lZFJvd11bY29sXSA9IHsgdGFrZW46IHRydWUsIGV2ZW50IH1cbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIHBvc2l0aW9uIGRhdGEgZm9yIHJlbmRlcmluZ1xuICAgICAgY29uc3Qgc3BhbkRheXMgPSBlbmRDb2wgLSBzdGFydENvbCArIDFcbiAgICAgIHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcbiAgICAgICAgbGVmdDogKHN0YXJ0Q29sIC8gNykgKiAxMDAsXG4gICAgICAgIHdpZHRoOiAoc3BhbkRheXMgLyA3KSAqIDEwMCxcbiAgICAgICAgdG9wOlxuICAgICAgICAgIERBWV9OVU1CRVJfSEVJR0hUICtcbiAgICAgICAgICBHQVBfQkVUV0VFTl9FTEVNRU5UUyArXG4gICAgICAgICAgYXNzaWduZWRSb3cgKiAoRVZFTlRfQkFSX0hFSUdIVCArIEdBUF9CRVRXRUVOX0VMRU1FTlRTKSxcbiAgICAgICAgaGVpZ2h0OiBFVkVOVF9CQVJfSEVJR0hULFxuICAgICAgICBwb3NpdGlvbjogYXNzaWduZWRSb3csXG4gICAgICAgIC4uLmV2ZW50LFxuICAgICAgICBpc1RydW5jYXRlZFN0YXJ0LFxuICAgICAgICBpc1RydW5jYXRlZEVuZCxcbiAgICAgIH0gYXMgUHJvY2Vzc2VkRXZlbnQpXG4gICAgICBwbGFjZWRTdWNjZXNzZnVsbHkgPSB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgY291bGRuJ3QgcGxhY2UgYXQgb3JpZ2luYWwgcG9zaXRpb24sIHRyeSB0cnVuY2F0ZWQgdmVyc2lvbnMgc3RhcnRpbmcgZnJvbSBsYXRlciBkYXlzXG4gICAgaWYgKCFwbGFjZWRTdWNjZXNzZnVsbHkpIHtcbiAgICAgIGZvciAoXG4gICAgICAgIGxldCB0cnlTdGFydENvbCA9IHN0YXJ0Q29sICsgMTtcbiAgICAgICAgdHJ5U3RhcnRDb2wgPD0gZW5kQ29sO1xuICAgICAgICB0cnlTdGFydENvbCsrXG4gICAgICApIHtcbiAgICAgICAgLy8gVHJ5IHRvIHBsYWNlIHRoZSB0cnVuY2F0ZWQgZXZlbnQgc3RhcnRpbmcgZnJvbSB0aGlzIGNvbHVtblxuICAgICAgICBsZXQgdHJ1bmNhdGVkQXNzaWduZWRSb3cgPSAtMVxuICAgICAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG4gICAgICAgICAgbGV0IGNhblBsYWNlID0gdHJ1ZVxuICAgICAgICAgIGZvciAobGV0IGNvbCA9IHRyeVN0YXJ0Q29sOyBjb2wgPD0gZW5kQ29sOyBjb2wrKykge1xuICAgICAgICAgICAgaWYgKGdyaWRbcm93XVtjb2xdLnRha2VuKSB7XG4gICAgICAgICAgICAgIGNhblBsYWNlID0gZmFsc2VcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNhblBsYWNlKSB7XG4gICAgICAgICAgICB0cnVuY2F0ZWRBc3NpZ25lZFJvdyA9IHJvd1xuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB3ZSBmb3VuZCBhIHJvdyBmb3IgdGhlIHRydW5jYXRlZCB2ZXJzaW9uLCBwbGFjZSBpdFxuICAgICAgICBpZiAodHJ1bmNhdGVkQXNzaWduZWRSb3cgIT09IC0xKSB7XG4gICAgICAgICAgZm9yIChsZXQgY29sID0gdHJ5U3RhcnRDb2w7IGNvbCA8PSBlbmRDb2w7IGNvbCsrKSB7XG4gICAgICAgICAgICBncmlkW3RydW5jYXRlZEFzc2lnbmVkUm93XVtjb2xdID0geyB0YWtlbjogdHJ1ZSwgZXZlbnQgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENyZWF0ZSBwb3NpdGlvbiBkYXRhIGZvciB0aGUgdHJ1bmNhdGVkIHJlbmRlcmluZ1xuICAgICAgICAgIGNvbnN0IHRydW5jYXRlZFNwYW5EYXlzID0gZW5kQ29sIC0gdHJ5U3RhcnRDb2wgKyAxXG4gICAgICAgICAgcHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuICAgICAgICAgICAgbGVmdDogKHRyeVN0YXJ0Q29sIC8gNykgKiAxMDAsXG4gICAgICAgICAgICB3aWR0aDogKHRydW5jYXRlZFNwYW5EYXlzIC8gNykgKiAxMDAsXG4gICAgICAgICAgICB0b3A6XG4gICAgICAgICAgICAgIERBWV9OVU1CRVJfSEVJR0hUICtcbiAgICAgICAgICAgICAgR0FQX0JFVFdFRU5fRUxFTUVOVFMgK1xuICAgICAgICAgICAgICB0cnVuY2F0ZWRBc3NpZ25lZFJvdyAqIChFVkVOVF9CQVJfSEVJR0hUICsgR0FQX0JFVFdFRU5fRUxFTUVOVFMpLFxuICAgICAgICAgICAgaGVpZ2h0OiBFVkVOVF9CQVJfSEVJR0hULFxuICAgICAgICAgICAgcG9zaXRpb246IHRydW5jYXRlZEFzc2lnbmVkUm93LFxuICAgICAgICAgICAgLi4uZXZlbnQsXG4gICAgICAgICAgICBpc1RydW5jYXRlZFN0YXJ0OiB0cnVlLCAvLyBBbHdheXMgdHJ1bmNhdGVkIGF0IHN0YXJ0IHdoZW4gdXNpbmcgdGhpcyBmYWxsYmFjayBsb2dpY1xuICAgICAgICAgICAgaXNUcnVuY2F0ZWRFbmQsXG4gICAgICAgICAgfSBhcyBQcm9jZXNzZWRFdmVudClcbiAgICAgICAgICBwbGFjZWRTdWNjZXNzZnVsbHkgPSB0cnVlXG4gICAgICAgICAgYnJlYWsgLy8gU3VjY2Vzc2Z1bGx5IHBsYWNlZCwgc3RvcCB0cnlpbmcgb3RoZXIgc3RhcnQgcG9zaXRpb25zXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTdGVwIDI6IEZpbGwgZ2FwcyB3aXRoIHNpbmdsZS1kYXkgZXZlbnRzXG4gIGZvciAoY29uc3QgZXZlbnQgb2Ygc29ydGVkU2luZ2xlRGF5KSB7XG4gICAgY29uc3QgZXZlbnRTdGFydCA9IGRheWpzLm1heChldmVudC5zdGFydC5zdGFydE9mKCdkYXknKSwgd2Vla1N0YXJ0KVxuICAgIGNvbnN0IGNvbCA9IE1hdGgubWF4KDAsIGV2ZW50U3RhcnQuZGlmZih3ZWVrU3RhcnQsICdkYXknKSlcblxuICAgIC8vIFNpbmdsZS1kYXkgZXZlbnRzIGFyZSBub3QgdHJ1bmNhdGVkIGJ5IGRlZmluaXRpb25cbiAgICBjb25zdCBpc1RydW5jYXRlZFN0YXJ0ID0gZmFsc2VcbiAgICBjb25zdCBpc1RydW5jYXRlZEVuZCA9IGZhbHNlXG5cbiAgICAvLyBGaW5kIHRoZSBmaXJzdCBhdmFpbGFibGUgcm93IGluIHRoaXMgY29sdW1uXG4gICAgbGV0IGFzc2lnbmVkUm93ID0gLTFcbiAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG4gICAgICBpZiAoIWdyaWRbcm93XVtjb2xdLnRha2VuKSB7XG4gICAgICAgIGFzc2lnbmVkUm93ID0gcm93XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgZm91bmQgYSByb3csIGFzc2lnbiB0aGUgZXZlbnRcbiAgICBpZiAoYXNzaWduZWRSb3cgIT09IC0xKSB7XG4gICAgICBncmlkW2Fzc2lnbmVkUm93XVtjb2xdID0geyB0YWtlbjogdHJ1ZSwgZXZlbnQgfVxuXG4gICAgICAvLyBDcmVhdGUgcG9zaXRpb24gZGF0YSBmb3IgcmVuZGVyaW5nXG4gICAgICBwcm9jZXNzZWRFdmVudHMucHVzaCh7XG4gICAgICAgIGxlZnQ6IChjb2wgLyA3KSAqIDEwMCxcbiAgICAgICAgd2lkdGg6ICgxIC8gNykgKiAxMDAsXG4gICAgICAgIHRvcDpcbiAgICAgICAgICBEQVlfTlVNQkVSX0hFSUdIVCArXG4gICAgICAgICAgR0FQX0JFVFdFRU5fRUxFTUVOVFMgK1xuICAgICAgICAgIGFzc2lnbmVkUm93ICogKEVWRU5UX0JBUl9IRUlHSFQgKyBHQVBfQkVUV0VFTl9FTEVNRU5UUyksXG4gICAgICAgIGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcbiAgICAgICAgcG9zaXRpb246IGFzc2lnbmVkUm93LFxuICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgaXNUcnVuY2F0ZWRTdGFydCxcbiAgICAgICAgaXNUcnVuY2F0ZWRFbmQsXG4gICAgICB9IGFzIFByb2Nlc3NlZEV2ZW50KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwcm9jZXNzZWRFdmVudHNcbn1cbiIsCiAgICAiaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICdAL2ZlYXR1cmVzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQnXG5pbXBvcnQgeyB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzIH0gZnJvbSAnQC9ob29rcy91c2VQcm9jZXNzZWRXZWVrRXZlbnRzJ1xuaW1wb3J0IHsgRVZFTlRfQkFSX0hFSUdIVCB9IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcblxuaW50ZXJmYWNlIFdlZWtFdmVudHNMYXllclByb3BzIHtcbiAgZGF5czogZGF5anMuRGF5anNbXVxufVxuXG5leHBvcnQgY29uc3QgV2Vla0V2ZW50c0xheWVyOiBSZWFjdC5GQzxXZWVrRXZlbnRzTGF5ZXJQcm9wcz4gPSAoeyBkYXlzIH0pID0+IHtcbiAgY29uc3Qgd2Vla1N0YXJ0ID0gZGF5c1swXVxuICBjb25zdCBwcm9jZXNzZWRXZWVrRXZlbnRzID0gdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cyh7IGRheXMgfSlcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgdy1mdWxsIGgtZnVsbCBwb2ludGVyLWV2ZW50cy1ub25lIHotMTAgb3ZlcmZsb3ctY2xpcFwiPlxuICAgICAge3Byb2Nlc3NlZFdlZWtFdmVudHMubWFwKChldmVudCkgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGtleT17YGV2ZW50LSR7ZXZlbnQuaWR9LSR7ZXZlbnQucG9zaXRpb259LSR7d2Vla1N0YXJ0LmZvcm1hdChcbiAgICAgICAgICAgICAgJ1lZWVktTU0tREQnXG4gICAgICAgICAgICApfWB9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSB6LTEwIHBvaW50ZXItZXZlbnRzLWF1dG8gb3ZlcmZsb3ctY2xpcFwiXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBsZWZ0OiBgY2FsYygke2V2ZW50LmxlZnR9JSArIHZhcigtLXNwYWNpbmcpICogMC4yNSlgLFxuICAgICAgICAgICAgICB3aWR0aDogYGNhbGMoJHtldmVudC53aWR0aH0lIC0gdmFyKC0tc3BhY2luZykgKiAxKWAsXG4gICAgICAgICAgICAgIHRvcDogYCR7ZXZlbnQudG9wfXB4YCxcbiAgICAgICAgICAgICAgaGVpZ2h0OiBgJHtFVkVOVF9CQVJfSEVJR0hUfXB4YCxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBkYXRhLXRlc3RpZD17YHdlZWstZXZlbnQtbGF5ZXItZXZlbnQtJHtldmVudC5pZH1gfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxEcmFnZ2FibGVFdmVudFxuICAgICAgICAgICAgICBlbGVtZW50SWQ9e2BldmVudC0ke2V2ZW50LmlkfS0ke1xuICAgICAgICAgICAgICAgIGV2ZW50LnBvc2l0aW9uXG4gICAgICAgICAgICAgIH0tJHt3ZWVrU3RhcnQuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cbiAgICAgICAgICAgICAgZXZlbnQ9e2V2ZW50fVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLWZ1bGwgdy1mdWxsIHNoYWRvd1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApXG4gICAgICB9KX1cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyBTY3JvbGxBcmVhIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcbmltcG9ydCB3ZWVrT2ZZZWFyIGZyb20gJ2RheWpzL3BsdWdpbi93ZWVrT2ZZZWFyJ1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgV2Vla0FsbERheVJvdyB9IGZyb20gJy4uL3dlZWstYWxsLWRheS1yb3cnXG5pbXBvcnQgeyBXZWVrSGVhZGVyIH0gZnJvbSAnLi4vd2Vlay1oZWFkZXInXG5pbXBvcnQgeyBXZWVrVGltZUdyaWQgfSBmcm9tICcuLi93ZWVrLXRpbWUtZ3JpZCdcbi8vIEFkZCB3ZWVrT2ZZZWFyIHBsdWdpbiB0byBkYXlqc1xuZGF5anMuZXh0ZW5kKHdlZWtPZlllYXIpXG5cbmNvbnN0IFdlZWtWaWV3OiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaC1mdWxsXCIgZGF0YS10ZXN0aWQ9XCJ3ZWVrLXZpZXdcIj5cbiAgICAgIHsvKiBXZWVrIGhlYWRlciByb3cgLSBmaXhlZCAqL31cbiAgICAgIDxXZWVrSGVhZGVyIGNsYXNzTmFtZT1cImgtWzVyZW1dXCIgLz5cblxuICAgICAgey8qIFNjcm9sbGFibGUgdGltZSBncmlkICovfVxuICAgICAgPFNjcm9sbEFyZWFcbiAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBvdmVyZmxvdy1hdXRvIGgtW2NhbGMoMTAwJS01cmVtKV1cIlxuICAgICAgICBkYXRhLXRlc3RpZD1cIndlZWstc2Nyb2xsLWFyZWFcIlxuICAgICAgPlxuICAgICAgICB7LyogQWxsLWRheSBldmVudHMgcm93IC0gZHluYW1pYyBoZWlnaHQgYmFzZWQgb24gY29udGVudCAqL31cbiAgICAgICAgPFdlZWtBbGxEYXlSb3cgLz5cbiAgICAgICAgPFdlZWtUaW1lR3JpZCAvPlxuICAgICAgPC9TY3JvbGxBcmVhPlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IFdlZWtWaWV3XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IERyYWdnYWJsZUV2ZW50IH0gZnJvbSAnLi4vZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudCdcbmltcG9ydCB7IERyb3BwYWJsZUNlbGwgfSBmcm9tICcuLi9kcm9wcGFibGUtY2VsbC9kcm9wcGFibGUtY2VsbCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCwgUHJvY2Vzc2VkQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IEVWRU5UX0JBUl9IRUlHSFQsIEdBUF9CRVRXRUVOX0VMRU1FTlRTIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuXG5leHBvcnQgY29uc3QgV2Vla0FsbERheVJvdzogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHsgY3VycmVudERhdGUsIGdldEV2ZW50c0ZvckRhdGVSYW5nZSwgZmlyc3REYXlPZldlZWsgfSA9XG4gICAgdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuICAvLyBHZXQgc3RhcnQgYW5kIGVuZCBvZiBjdXJyZW50IHdlZWsgYmFzZWQgb24gZmlyc3REYXlPZldlZWsgc2V0dGluZ1xuICBjb25zdCBzdGFydE9mV2VlayA9IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ3dlZWsnKS5kYXkoZmlyc3REYXlPZldlZWspXG4gIC8vIElmIGN1cnJlbnQgZGF0ZSBpcyBiZWZvcmUgdGhlIHN0YXJ0IG9mIHdlZWssIG1vdmUgYmFjayBvbmUgd2Vla1xuICBjb25zdCBhZGp1c3RlZFN0YXJ0T2ZXZWVrID0gY3VycmVudERhdGUuaXNCZWZvcmUoc3RhcnRPZldlZWspXG4gICAgPyBzdGFydE9mV2Vlay5zdWJ0cmFjdCgxLCAnd2VlaycpXG4gICAgOiBzdGFydE9mV2Vla1xuICBjb25zdCBlbmRPZldlZWsgPSBhZGp1c3RlZFN0YXJ0T2ZXZWVrLmFkZCg2LCAnZGF5JylcblxuICAvLyBDcmVhdGUgYW4gYXJyYXkgb2YgZGF5cyBmb3IgdGhlIGN1cnJlbnQgd2Vla1xuICBjb25zdCB3ZWVrRGF5cyA9IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgd2Vla0RheXMucHVzaChhZGp1c3RlZFN0YXJ0T2ZXZWVrLmFkZChpLCAnZGF5JykpXG4gIH1cblxuICAvLyBHZXQgZXZlbnRzIHRoYXQgbWlnaHQgb3ZlcmxhcCB3aXRoIHRoaXMgd2VlayAoZXhwYW5kIHNlYXJjaCByYW5nZSlcbiAgY29uc3QgZXhwYW5kZWRTdGFydERhdGUgPSBhZGp1c3RlZFN0YXJ0T2ZXZWVrLnN1YnRyYWN0KDYsICdkYXknKSAvLyBMb29rIDYgZGF5cyBiZWZvcmUgd2VlayBzdGFydFxuICBjb25zdCBleHBhbmRlZEVuZERhdGUgPSBlbmRPZldlZWsuYWRkKDYsICdkYXknKSAvLyBMb29rIDYgZGF5cyBhZnRlciB3ZWVrIGVuZFxuICBjb25zdCB3ZWVrRXZlbnRzID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKGV4cGFuZGVkU3RhcnREYXRlLCBleHBhbmRlZEVuZERhdGUpXG5cbiAgLy8gU2VwYXJhdGUgYWxsLWRheSBldmVudHMgZnJvbSByZWd1bGFyIGV2ZW50cyAoaW5jbHVkaW5nIG11bHRpLWRheSBldmVudHMpXG4gIGNvbnN0IGFsbERheUV2ZW50cyA9IHdlZWtFdmVudHMuZmlsdGVyKChldmVudCkgPT4gZXZlbnQuYWxsRGF5KVxuXG4gIC8vIFByb2Nlc3MgYW5kIGxheW91dCBhbGwtZGF5IGV2ZW50cyB0byBhdm9pZCBvdmVybGFwcGluZ1xuICBjb25zdCB7IHByb2Nlc3NlZEFsbERheUV2ZW50cyB9ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgLy8gU29ydCBhbGwtZGF5IGV2ZW50cyBieSBzdGFydCBkYXRlIGFuZCB0aGVuIGJ5IGR1cmF0aW9uIChsb25nZXIgZXZlbnRzIGZpcnN0KVxuICAgIGNvbnN0IHNvcnRlZEV2ZW50cyA9IFsuLi5hbGxEYXlFdmVudHNdLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIC8vIEZpcnN0IGNvbXBhcmUgYnkgc3RhcnQgZGF0ZVxuICAgICAgY29uc3Qgc3RhcnREaWZmID0gYS5zdGFydC5kaWZmKGIuc3RhcnQpXG4gICAgICBpZiAoc3RhcnREaWZmICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBzdGFydERpZmZcbiAgICAgIH1cblxuICAgICAgLy8gSWYgc3RhcnQgZGF0ZXMgYXJlIHRoZSBzYW1lLCBsb25nZXIgZXZlbnRzIGNvbWUgZmlyc3RcbiAgICAgIGNvbnN0IGFEdXJhdGlvbiA9IGEuZW5kLmRpZmYoYS5zdGFydClcbiAgICAgIGNvbnN0IGJEdXJhdGlvbiA9IGIuZW5kLmRpZmYoYi5zdGFydClcbiAgICAgIHJldHVybiBiRHVyYXRpb24gLSBhRHVyYXRpb25cbiAgICB9KVxuXG4gICAgLy8gVHJhY2sgcG9zaXRpb25zIGluIHJvd3NcbiAgICBjb25zdCByb3dzOiB7IGVuZDogZGF5anMuRGF5anM7IGV2ZW50OiBDYWxlbmRhckV2ZW50IH1bXVtdID0gW11cbiAgICBjb25zdCBwcm9jZXNzZWRFdmVudHM6IFByb2Nlc3NlZENhbGVuZGFyRXZlbnRbXSA9IFtdXG5cbiAgICBzb3J0ZWRFdmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgIC8vIENhbGN1bGF0ZSB3aGljaCBkYXlzIHRoaXMgZXZlbnQgc3BhbnNcbiAgICAgIGNvbnN0IGV2ZW50U3RhcnQgPSBldmVudC5zdGFydC5pc0JlZm9yZShhZGp1c3RlZFN0YXJ0T2ZXZWVrKVxuICAgICAgICA/IGFkanVzdGVkU3RhcnRPZldlZWtcbiAgICAgICAgOiBldmVudC5zdGFydFxuICAgICAgY29uc3QgZXZlbnRFbmQgPSBldmVudC5lbmQuaXNBZnRlcihlbmRPZldlZWspID8gZW5kT2ZXZWVrIDogZXZlbnQuZW5kXG5cbiAgICAgIC8vIENhbGN1bGF0ZSBwb3NpdGlvbiBhcyBwZXJjZW50YWdlIG9mIHRoZSB3ZWVrIHdpZHRoXG4gICAgICBjb25zdCBzdGFydERheUluZGV4ID0gTWF0aC5tYXgoXG4gICAgICAgIDAsXG4gICAgICAgIGV2ZW50U3RhcnQuZGlmZihhZGp1c3RlZFN0YXJ0T2ZXZWVrLCAnZGF5JylcbiAgICAgIClcbiAgICAgIGNvbnN0IGVuZERheUluZGV4ID0gTWF0aC5taW4oNiwgZXZlbnRFbmQuZGlmZihhZGp1c3RlZFN0YXJ0T2ZXZWVrLCAnZGF5JykpXG5cbiAgICAgIGNvbnN0IGxlZnQgPSAoc3RhcnREYXlJbmRleCAvIDcpICogMTAwXG4gICAgICBjb25zdCB3aWR0aCA9ICgoZW5kRGF5SW5kZXggLSBzdGFydERheUluZGV4ICsgMSkgLyA3KSAqIDEwMFxuXG4gICAgICAvLyBGaW5kIGEgcm93IHdoZXJlIHRoaXMgZXZlbnQgY2FuIGZpdFxuICAgICAgbGV0IHJvd0luZGV4ID0gMFxuICAgICAgbGV0IHBsYWNlZCA9IGZhbHNlXG5cbiAgICAgIHdoaWxlICghcGxhY2VkKSB7XG4gICAgICAgIGlmIChyb3dJbmRleCA+PSByb3dzLmxlbmd0aCkge1xuICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyByb3cgaWYgbmVlZGVkXG4gICAgICAgICAgcm93cy5wdXNoKFtdKVxuICAgICAgICAgIHBsYWNlZCA9IHRydWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGlzIGV2ZW50IGNhbiBmaXQgaW4gdGhlIGN1cnJlbnQgcm93XG4gICAgICAgICAgY29uc3Qgcm93ID0gcm93c1tyb3dJbmRleF1cbiAgICAgICAgICBjb25zdCBjYW5GaXQgPSByb3cuZXZlcnkoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIGV2ZW50U3RhcnQuaXNBZnRlcihpdGVtLmVuZCkgfHxcbiAgICAgICAgICAgICAgZXZlbnRFbmQuaXNCZWZvcmUoaXRlbS5ldmVudC5zdGFydClcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgaWYgKGNhbkZpdCkge1xuICAgICAgICAgICAgcGxhY2VkID0gdHJ1ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByb3dJbmRleCsrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBldmVudCB0byB0aGUgcm93XG4gICAgICByb3dzW3Jvd0luZGV4XS5wdXNoKHsgZW5kOiBldmVudEVuZCwgZXZlbnQgfSlcblxuICAgICAgLy8gQWRkIHByb2Nlc3NlZCBldmVudCB3aXRoIGNvcnJlY3QgcG9zaXRpb25pbmdcbiAgICAgIHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcbiAgICAgICAgLi4uZXZlbnQsXG4gICAgICAgIGxlZnQsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICB0b3A6IHJvd0luZGV4ICogKEVWRU5UX0JBUl9IRUlHSFQgKyBHQVBfQkVUV0VFTl9FTEVNRU5UUyksXG4gICAgICAgIGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcbiAgICAgICAgYWxsRGF5OiB0cnVlLFxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NlZEFsbERheUV2ZW50czogcHJvY2Vzc2VkRXZlbnRzLFxuICAgICAgYWxsRGF5Um93c0NvdW50OiBNYXRoLm1heCgxLCByb3dzLmxlbmd0aCksIC8vIEF0IGxlYXN0IDEgcm93LCBldmVuIGlmIGVtcHR5XG4gICAgfVxuICB9LCBbYWxsRGF5RXZlbnRzLCBhZGp1c3RlZFN0YXJ0T2ZXZWVrLCBlbmRPZldlZWtdKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtW2F1dG9fMWZyXzFmcl8xZnJfMWZyXzFmcl8xZnJfMWZyXSBncmlkLXJvd3MtMSByZWxhdGl2ZVwiXG4gICAgICBkYXRhLXRlc3RpZD1cIndlZWstYWxsLWRheS1yb3dcIlxuICAgID5cbiAgICAgIHsvKiBMZWZ0IGxhYmVsIGZvciBhbGwtZGF5IGV2ZW50cyAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0xNCBmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBib3JkZXIteCBib3JkZXItYiBwci0yIG1pbi1oLTE2XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LVsxMHB4XSB3aGl0ZXNwYWNlLW5vd3JhcCBzbTp0ZXh0LXhzXCI+XG4gICAgICAgICAgQWxsLWRheVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cblxuICAgICAgey8qIERyb3BwYWJsZSBjZWxscyBmb3IgZWFjaCBkYXkgKi99XG4gICAgICB7d2Vla0RheXMubWFwKChkYXkpID0+IChcbiAgICAgICAgPERyb3BwYWJsZUNlbGxcbiAgICAgICAgICBrZXk9e2BhbGwtZGF5LSR7ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfWB9XG4gICAgICAgICAgaWQ9e2BhbGwtZGF5LWNlbGwtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cbiAgICAgICAgICB0eXBlPVwiZGF5LWNlbGxcIlxuICAgICAgICAgIGRhdGU9e2RheX1cbiAgICAgICAgICBjbGFzc05hbWU9XCJob3ZlcjpiZy1hY2NlbnQgaC1mdWxsIGZsZXgtMSBjdXJzb3ItcG9pbnRlciBib3JkZXItciBib3JkZXItYlwiXG4gICAgICAgIC8+XG4gICAgICApKX1cblxuICAgICAgey8qIEFsbC1kYXkgZXZlbnQgYmxvY2tzICovfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMTAgcC0xIGNvbC1zcGFuLTcgY29sLXN0YXJ0LTJcIj5cbiAgICAgICAge3Byb2Nlc3NlZEFsbERheUV2ZW50cy5tYXAoKGV2ZW50LCBpbmRleCkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGtleT17YGFsbC1kYXktY29udGFpbmVyLSR7ZXZlbnQuaWR9YH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlXCJcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGxlZnQ6IGAke2V2ZW50LmxlZnR9JWAsXG4gICAgICAgICAgICAgIHdpZHRoOiBgY2FsYygke2V2ZW50LndpZHRofSUgLSB2YXIoLS1zcGFjaW5nKSAqIDIpYCxcbiAgICAgICAgICAgICAgdG9wOiBgJHtldmVudC50b3B9cHhgLFxuICAgICAgICAgICAgICBoZWlnaHQ6IGAke2V2ZW50LmhlaWdodH1weGAsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxEcmFnZ2FibGVFdmVudFxuICAgICAgICAgICAgICBlbGVtZW50SWQ9e2BhbGwtZGF5LSR7ZXZlbnQuaWR9LSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgZXZlbnQ9e2V2ZW50fVxuICAgICAgICAgICAgICBrZXk9e2BhbGwtZGF5LSR7ZXZlbnQuaWR9LSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC1mdWxsIHctZnVsbCBvdmVyZmxvdy1jbGlwIHRleHQteHMgYWJzb2x1dGVcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmludGVyZmFjZSBXZWVrSGVhZGVyUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IFdlZWtIZWFkZXI6IFJlYWN0LkZDPFdlZWtIZWFkZXJQcm9wcz4gPSAoeyBjbGFzc05hbWUgfSkgPT4ge1xuICBjb25zdCB7XG4gICAgY3VycmVudERhdGUsXG4gICAgY3VycmVudExvY2FsZSxcbiAgICBzZWxlY3REYXRlLFxuICAgIG9wZW5FdmVudEZvcm0sXG4gICAgZmlyc3REYXlPZldlZWssXG4gICAgc3RpY2t5Vmlld0hlYWRlcixcbiAgICB2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuICB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuICAvLyBHZXQgc3RhcnQgYW5kIGVuZCBvZiBjdXJyZW50IHdlZWsgYmFzZWQgb24gZmlyc3REYXlPZldlZWsgc2V0dGluZ1xuICBjb25zdCBzdGFydE9mV2VlayA9IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ3dlZWsnKS5kYXkoZmlyc3REYXlPZldlZWspXG4gIC8vIElmIGN1cnJlbnQgZGF0ZSBpcyBiZWZvcmUgdGhlIHN0YXJ0IG9mIHdlZWssIG1vdmUgYmFjayBvbmUgd2Vla1xuICBjb25zdCBhZGp1c3RlZFN0YXJ0T2ZXZWVrID0gY3VycmVudERhdGUuaXNCZWZvcmUoc3RhcnRPZldlZWspXG4gICAgPyBzdGFydE9mV2Vlay5zdWJ0cmFjdCgxLCAnd2VlaycpXG4gICAgOiBzdGFydE9mV2Vla1xuXG4gIC8vIENyZWF0ZSBhbiBhcnJheSBvZiBkYXlzIGZvciB0aGUgY3VycmVudCB3ZWVrXG4gIGNvbnN0IHdlZWtEYXlzID0gW11cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICB3ZWVrRGF5cy5wdXNoKGFkanVzdGVkU3RhcnRPZldlZWsuYWRkKGksICdkYXknKSlcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgLy8gY3NzIGdyaWQgaGVhZGVyIHdpdGggbGVmIGNvcm5lciBjZWxsIHNob3J0ZXIgdGhhbiB0aGUgcmVzdFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdncmlkIGdyaWQtY29scy1bYXV0b18xZnJfMWZyXzFmcl8xZnJfMWZyXzFmcl8xZnJdIGdyaWQtcm93cy0xJyxcbiAgICAgICAgc3RpY2t5Vmlld0hlYWRlciAmJiAnc3RpY2t5IHRvcC0wIHotMjAnLFxuICAgICAgICB2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICBkYXRhLXRlc3RpZD1cIndlZWstaGVhZGVyXCJcbiAgICA+XG4gICAgICB7LyogQ29ybmVyIGNlbGwgd2l0aCB3ZWVrIG51bWJlciAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLXNwYW4tMSB3LTE0IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXIteCBib3JkZXItYiBwLTJcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LXhzXCI+V2Vlazwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPntjdXJyZW50RGF0ZS53ZWVrKCl9PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7LyogRGF5IGhlYWRlciBjZWxscyAqL31cbiAgICAgIHt3ZWVrRGF5cy5tYXAoKGRheSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgaXNUb2RheSA9IGRheS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8QW5pbWF0ZVByZXNlbmNlIGtleT17ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgICAgPG1vdGlvbi5kaXZcbiAgICAgICAgICAgICAga2V5PXtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG4gICAgICAgICAgICAgIGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG4gICAgICAgICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuICAgICAgICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgICAgICB0cmFuc2l0aW9uPXt7XG4gICAgICAgICAgICAgICAgZHVyYXRpb246IDAuMjUsXG4gICAgICAgICAgICAgICAgZWFzZTogJ2Vhc2VJbk91dCcsXG4gICAgICAgICAgICAgICAgZGVsYXk6IGluZGV4ICogMC4wNSxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAnaG92ZXI6YmctYWNjZW50IGZsZXgtMSBjdXJzb3ItcG9pbnRlciBwLTEgdGV4dC1jZW50ZXIgc206cC0yIGJvcmRlci1yIGJvcmRlci1iJyxcbiAgICAgICAgICAgICAgICBpc1RvZGF5ICYmICdiZy1wcmltYXJ5LzEwIGZvbnQtYm9sZCdcbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgIHNlbGVjdERhdGUoZGF5KVxuICAgICAgICAgICAgICAgIG9wZW5FdmVudEZvcm0oZGF5KVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YHdlZWstZGF5LWhlYWRlci0ke2RheS5mb3JtYXQoJ2RkZGQnKS50b0xvd2VyQ2FzZSgpfWB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e2RheS5mb3JtYXQoJ2RkZCcpfTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICdteC1hdXRvIG10LTEgZmxleCBoLTUgdy01IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdGV4dC14cyBzbTpoLTcgc206dy03IHNtOnRleHQtc20nLFxuICAgICAgICAgICAgICAgICAgaXNUb2RheSAmJiAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCdcbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge0ludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwgeyBkYXk6ICdudW1lcmljJyB9KS5mb3JtYXQoXG4gICAgICAgICAgICAgICAgICBkYXkudG9EYXRlKClcbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbW90aW9uLmRpdj5cbiAgICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgICAgKVxuICAgICAgfSl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuXG5pbnRlcmZhY2UgUHJvY2Vzc2VkRXZlbnQgZXh0ZW5kcyBDYWxlbmRhckV2ZW50IHtcbiAgbGVmdDogbnVtYmVyIC8vIExlZnQgcG9zaXRpb24gaW4gcGVyY2VudGFnZVxuICB3aWR0aDogbnVtYmVyIC8vIFdpZHRoIGluIHBlcmNlbnRhZ2VcbiAgdG9wOiBudW1iZXIgLy8gVG9wIHBvc2l0aW9uIGluIHBlcmNlbnRhZ2VcbiAgaGVpZ2h0OiBudW1iZXIgLy8gSGVpZ2h0IGluIHBlcmNlbnRhZ2VcbiAgekluZGV4PzogbnVtYmVyIC8vIFotaW5kZXggZm9yIGxheWVyaW5nIG92ZXJsYXBwaW5nIGV2ZW50c1xufVxuXG5pbnRlcmZhY2UgVXNlUHJvY2Vzc2VkRGF5RXZlbnRzUHJvcHMge1xuICBkYXk6IGRheWpzLkRheWpzIC8vIFRoZSBzcGVjaWZpYyBkYXkgdGhpcyBjb2x1bW4gcmVwcmVzZW50c1xufVxuXG5leHBvcnQgY29uc3QgdXNlUHJvY2Vzc2VkRGF5RXZlbnRzID0gKHsgZGF5IH06IFVzZVByb2Nlc3NlZERheUV2ZW50c1Byb3BzKSA9PiB7XG4gIGNvbnN0IHsgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIGNvbnN0IHRvZGF5RXZlbnRzID0gdXNlTWVtbzxQcm9jZXNzZWRFdmVudFtdPigoKSA9PiB7XG4gICAgbGV0IGV2ZW50c0ZvckRheSA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZShcbiAgICAgIGRheS5zdGFydE9mKCdkYXknKSxcbiAgICAgIGRheS5lbmRPZignZGF5JylcbiAgICApXG5cbiAgICAvLyBGaWx0ZXIgb3V0IGFsbC1kYXkgZXZlbnRzIGFuZCBzb3J0IGJ5IHN0YXJ0IHRpbWVcbiAgICBldmVudHNGb3JEYXkgPSBldmVudHNGb3JEYXlcbiAgICAgIC5maWx0ZXIoKGUpID0+ICFlLmFsbERheSlcbiAgICAgIC50b1NvcnRlZCgoYSwgYikgPT4gYS5zdGFydC5kaWZmKGIuc3RhcnQpKVxuXG4gICAgaWYgKGV2ZW50c0ZvckRheS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cblxuICAgIC8vIFN0ZXAgMTogR3JvdXAgZXZlbnRzIGludG8gY2x1c3RlcnMgb2Ygb3ZlcmxhcHBpbmcgZXZlbnRzXG4gICAgY29uc3QgY2x1c3RlcnM6IENhbGVuZGFyRXZlbnRbXVtdID0gW11cbiAgICBsZXQgY3VycmVudENsdXN0ZXI6IENhbGVuZGFyRXZlbnRbXSA9IFtdXG4gICAgbGV0IGxhc3RFdmVudEVuZDogZGF5anMuRGF5anMgfCBudWxsID0gbnVsbFxuICAgIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzRm9yRGF5KSB7XG4gICAgICBpZiAobGFzdEV2ZW50RW5kICYmIGV2ZW50LnN0YXJ0LmlzU2FtZU9yQWZ0ZXIobGFzdEV2ZW50RW5kKSkge1xuICAgICAgICBpZiAoY3VycmVudENsdXN0ZXIubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNsdXN0ZXJzLnB1c2goY3VycmVudENsdXN0ZXIpXG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudENsdXN0ZXIgPSBbXVxuICAgICAgfVxuICAgICAgY3VycmVudENsdXN0ZXIucHVzaChldmVudClcbiAgICAgIGxhc3RFdmVudEVuZCA9IGxhc3RFdmVudEVuZFxuICAgICAgICA/IGRheWpzLm1heChsYXN0RXZlbnRFbmQsIGV2ZW50LmVuZClcbiAgICAgICAgOiBldmVudC5lbmRcbiAgICB9XG4gICAgaWYgKGN1cnJlbnRDbHVzdGVyLmxlbmd0aCA+IDApIHtcbiAgICAgIGNsdXN0ZXJzLnB1c2goY3VycmVudENsdXN0ZXIpXG4gICAgfVxuXG4gICAgLy8gU3RlcCAyOiBGb3IgZWFjaCBjbHVzdGVyLCB1c2UgYSBtb3JlIGludGVsbGlnZW50IGNvbHVtbiBhc3NpZ25tZW50XG4gICAgY29uc3QgcHJvY2Vzc2VkRXZlbnRzOiBQcm9jZXNzZWRFdmVudFtdID0gW11cbiAgICBmb3IgKGNvbnN0IGNsdXN0ZXIgb2YgY2x1c3RlcnMpIHtcbiAgICAgIGlmIChjbHVzdGVyLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAvLyBTaW5nbGUgZXZlbnQgdGFrZXMgZnVsbCB3aWR0aFxuICAgICAgICBjb25zdCBldmVudCA9IGNsdXN0ZXJbMF1cbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gZXZlbnQuc3RhcnQuaG91cigpICsgZXZlbnQuc3RhcnQubWludXRlKCkgLyA2MFxuICAgICAgICBsZXQgZW5kVGltZSA9IGV2ZW50LmVuZC5ob3VyKCkgKyBldmVudC5lbmQubWludXRlKCkgLyA2MFxuICAgICAgICBpZiAoZW5kVGltZSA8IHN0YXJ0VGltZSkge1xuICAgICAgICAgIC8vIElmIHRoZSBldmVudCBlbmRzIG9uIHRoZSBuZXh0IGRheSwgc2V0IGVuZCB0aW1lIHRvIDI0IGhvdXJzXG4gICAgICAgICAgZW5kVGltZSA9IDI0XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG90YWxEdXJhdGlvbiA9IGVuZFRpbWUgLSBzdGFydFRpbWVcbiAgICAgICAgY29uc3QgdG9wID0gKHN0YXJ0VGltZSAvIDI0KSAqIDEwMFxuICAgICAgICBjb25zdCBoZWlnaHQgPSAodG90YWxEdXJhdGlvbiAvIDI0KSAqIDEwMFxuICAgICAgICBwcm9jZXNzZWRFdmVudHMucHVzaCh7IC4uLmV2ZW50LCBsZWZ0OiAwLCB3aWR0aDogMTAwLCB0b3AsIGhlaWdodCB9KVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyBNdWx0aXBsZSBldmVudHMgLSB1c2UgbGF5ZXJlZCBwb3NpdGlvbmluZyBhcHByb2FjaFxuICAgICAgLy8gU29ydCBieSBkdXJhdGlvbiAobG9uZ2VzdCBmaXJzdCksIHRoZW4gYnkgc3RhcnQgdGltZVxuICAgICAgY29uc3Qgc29ydGVkRXZlbnRzID0gWy4uLmNsdXN0ZXJdLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgY29uc3QgYUR1cmF0aW9uID0gYS5lbmQuZGlmZihhLnN0YXJ0LCAnbWludXRlJylcbiAgICAgICAgY29uc3QgYkR1cmF0aW9uID0gYi5lbmQuZGlmZihiLnN0YXJ0LCAnbWludXRlJylcblxuICAgICAgICAvLyBMb25nZXIgZXZlbnRzIGZpcnN0XG4gICAgICAgIGlmIChhRHVyYXRpb24gIT09IGJEdXJhdGlvbikge1xuICAgICAgICAgIHJldHVybiBiRHVyYXRpb24gLSBhRHVyYXRpb25cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHNhbWUgZHVyYXRpb24sIGVhcmxpZXIgc3RhcnQgdGltZSBmaXJzdFxuICAgICAgICByZXR1cm4gYS5zdGFydC5kaWZmKGIuc3RhcnQpXG4gICAgICB9KVxuXG4gICAgICAvLyBQcm9jZXNzIGV2ZW50cyB3aXRoIGxheWVyZWQgcG9zaXRpb25pbmdcbiAgICAgIGNvbnN0IHRvdGFsRXZlbnRzID0gc29ydGVkRXZlbnRzLmxlbmd0aFxuXG4gICAgICAvLyBDYWxjdWxhdGUgZHluYW1pYyBvZmZzZXQgYmFzZWQgb24gbnVtYmVyIG9mIG92ZXJsYXBwaW5nIGV2ZW50c1xuICAgICAgLy8gRmV3ZXIgZXZlbnRzID0gbGFyZ2VyIGluZGl2aWR1YWwgb2Zmc2V0cywgbW9yZSBldmVudHMgPSBzbWFsbGVyIG9mZnNldHNcbiAgICAgIGxldCBtYXhPZmZzZXQ6IG51bWJlclxuICAgICAgaWYgKHRvdGFsRXZlbnRzID09PSAyKSB7XG4gICAgICAgIG1heE9mZnNldCA9IDI1IC8vIDI1JSBvZmZzZXQgZm9yIDIgZXZlbnRzXG4gICAgICB9IGVsc2UgaWYgKHRvdGFsRXZlbnRzID09PSAzKSB7XG4gICAgICAgIG1heE9mZnNldCA9IDUwIC8vIDUwJSB0b3RhbCBmb3IgMyBldmVudHMgKDI1JSBlYWNoKVxuICAgICAgfSBlbHNlIGlmICh0b3RhbEV2ZW50cyA9PT0gNCkge1xuICAgICAgICBtYXhPZmZzZXQgPSA2MCAvLyA2MCUgdG90YWwgZm9yIDQgZXZlbnRzICgyMCUgZWFjaClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1heE9mZnNldCA9IDcwIC8vIDcwJSB0b3RhbCBmb3IgNSsgZXZlbnRzXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9mZnNldFBlckV2ZW50ID0gdG90YWxFdmVudHMgPiAxID8gbWF4T2Zmc2V0IC8gKHRvdGFsRXZlbnRzIC0gMSkgOiAwXG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc29ydGVkRXZlbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gc29ydGVkRXZlbnRzW2ldXG4gICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IGV2ZW50LnN0YXJ0LmhvdXIoKSArIGV2ZW50LnN0YXJ0Lm1pbnV0ZSgpIC8gNjBcbiAgICAgICAgbGV0IGVuZFRpbWUgPSBldmVudC5lbmQuaG91cigpICsgZXZlbnQuZW5kLm1pbnV0ZSgpIC8gNjBcblxuICAgICAgICBpZiAoZW5kVGltZSA8IHN0YXJ0VGltZSkge1xuICAgICAgICAgIC8vIElmIHRoZSBldmVudCBlbmRzIG9uIHRoZSBuZXh0IGRheSwgc2V0IGVuZCB0aW1lIHRvIDI0IGhvdXJzXG4gICAgICAgICAgZW5kVGltZSA9IDI0XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0b3RhbER1cmF0aW9uID0gZW5kVGltZSAtIHN0YXJ0VGltZVxuICAgICAgICBjb25zdCB0b3AgPSAoc3RhcnRUaW1lIC8gMjQpICogMTAwXG4gICAgICAgIGNvbnN0IGhlaWdodCA9ICh0b3RhbER1cmF0aW9uIC8gMjQpICogMTAwXG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIHBvc2l0aW9uaW5nIGJhc2VkIG9uIGxheWVyIGFuZCB0b3RhbCBldmVudHNcbiAgICAgICAgbGV0IGxlZnQ6IG51bWJlclxuICAgICAgICBsZXQgd2lkdGg6IG51bWJlclxuICAgICAgICBsZXQgekluZGV4OiBudW1iZXJcblxuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgIC8vIEZpcnN0IGV2ZW50IChsb25nZXN0KSB0YWtlcyBmdWxsIHdpZHRoIGF0IGJvdHRvbVxuICAgICAgICAgIGxlZnQgPSAwXG4gICAgICAgICAgd2lkdGggPSAxMDBcbiAgICAgICAgICB6SW5kZXggPSAxXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU3Vic2VxdWVudCBldmVudHMgYXJlIG9mZnNldCBkeW5hbWljYWxseSBiYXNlZCBvbiB0b3RhbCBldmVudCBjb3VudFxuICAgICAgICAgIGxlZnQgPSBvZmZzZXRQZXJFdmVudCAqIGlcbiAgICAgICAgICB3aWR0aCA9IDEwMCAtIGxlZnQgLy8gUmVtYWluaW5nIHdpZHRoXG4gICAgICAgICAgekluZGV4ID0gaSArIDEgLy8gSGlnaGVyIHotaW5kZXggZm9yIGV2ZW50cyBvbiB0b3BcbiAgICAgICAgfVxuXG4gICAgICAgIHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcbiAgICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgICBsZWZ0LFxuICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgIHRvcCxcbiAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgekluZGV4LFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcm9jZXNzZWRFdmVudHNcbiAgfSwgW2RheSwgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlXSlcblxuICByZXR1cm4gdG9kYXlFdmVudHNcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlUHJvY2Vzc2VkRGF5RXZlbnRzIH0gZnJvbSAnQC9ob29rcy91c2VQcm9jZXNzZWREYXlFdmVudHMnXG5pbXBvcnQgeyBEcmFnZ2FibGVFdmVudCB9IGZyb20gJy4uLy4uL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgRGF5RXZlbnRzTGF5ZXJQcm9wcyB7XG4gIGRheTogZGF5anMuRGF5anMgLy8gVGhlIHNwZWNpZmljIGRheSB0aGlzIGxheWVyIHJlcHJlc2VudHNcbiAgJ2RhdGEtdGVzdGlkJz86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgRGF5RXZlbnRzTGF5ZXI6IFJlYWN0LkZDPERheUV2ZW50c0xheWVyUHJvcHM+ID0gKHtcbiAgZGF5LFxuICAnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxufSkgPT4ge1xuICBjb25zdCB0b2RheUV2ZW50cyA9IHVzZVByb2Nlc3NlZERheUV2ZW50cyh7IGRheSB9KVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWR9XG4gICAgICBjbGFzc05hbWU9XCJwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIGluc2V0LTAgei0xMFwiXG4gICAgPlxuICAgICAge3RvZGF5RXZlbnRzLm1hcCgoZXZlbnQsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHZlcnlWZXJ5VW5pcXVlS2V5ID0gYGV2ZW50LSR7ZXZlbnQuaWR9LSR7aW5kZXh9LSR7ZGF5LmZvcm1hdChcbiAgICAgICAgICAnWVlZWS1NTS1ERCdcbiAgICAgICAgKX1gXG4gICAgICAgIGNvbnN0IGlzU2hvcnRFdmVudCA9IGV2ZW50LmVuZC5kaWZmKGV2ZW50LnN0YXJ0LCAnbWludXRlJykgPD0gMTVcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBrZXk9e2Bjb250YWluZXItJHt2ZXJ5VmVyeVVuaXF1ZUtleX1gfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGVcIlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgbGVmdDogYCR7ZXZlbnQubGVmdH0lYCxcbiAgICAgICAgICAgICAgd2lkdGg6IGBjYWxjKCR7ZXZlbnQud2lkdGh9JSAtIHZhcigtLXNwYWNpbmcpICogMilgLFxuICAgICAgICAgICAgICB0b3A6IGAke2V2ZW50LnRvcH0lYCxcbiAgICAgICAgICAgICAgaGVpZ2h0OiBgJHtldmVudC5oZWlnaHR9JWAsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxEcmFnZ2FibGVFdmVudFxuICAgICAgICAgICAgICBlbGVtZW50SWQ9e2BkcmFnZ2FibGUtJHt2ZXJ5VmVyeVVuaXF1ZUtleX1gfVxuICAgICAgICAgICAgICBldmVudD17ZXZlbnR9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oJ3BvaW50ZXItZXZlbnRzLWF1dG8gYWJzb2x1dGUnLCB7XG4gICAgICAgICAgICAgICAgJ1smX3BdOnRleHQtWzEwcHhdIFsmX3BdOm10LTAnOiBpc1Nob3J0RXZlbnQsXG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKVxuICAgICAgfSl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBEYXlFdmVudHNMYXllciB9IGZyb20gJy4uL2RheS12aWV3L2NvbXBvbmVudHMvZGF5LWV2ZW50cy1sYXllcidcbmltcG9ydCB7IERyb3BwYWJsZUNlbGwgfSBmcm9tICcuLi9kcm9wcGFibGUtY2VsbC9kcm9wcGFibGUtY2VsbCdcblxuY29uc3QgaG91cnMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAyNCB9LCAoXywgaSkgPT4gaSkubWFwKChob3VyKSA9PlxuICBkYXlqcygpLmhvdXIoaG91cikubWludXRlKDApXG4pXG5cbmludGVyZmFjZSBXZWVrRGF5Q29sUHJvcHMge1xuICBkYXk6IGRheWpzLkRheWpzIC8vIFRoZSBzcGVjaWZpYyBkYXkgdGhpcyBjb2x1bW4gcmVwcmVzZW50c1xufVxuXG5leHBvcnQgY29uc3QgV2Vla0RheUNvbDogUmVhY3QuRkM8V2Vla0RheUNvbFByb3BzPiA9ICh7IGRheSB9KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS10ZXN0aWQ9e2B3ZWVrLWRheS1jb2wtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cbiAgICAgIGNsYXNzTmFtZT1cImNvbC1zcGFuLTEgcmVsYXRpdmUgZ3JpZCBncmlkLXJvd3MtMjQgYm9yZGVyLXJcIlxuICAgID5cbiAgICAgIHtob3Vycy5tYXAoKHRpbWUpID0+IHtcbiAgICAgICAgY29uc3QgaG91ciA9IHRpbWUuaG91cigpXG4gICAgICAgIGNvbnN0IGNlbGxEYXRlID0gZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpXG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8RHJvcHBhYmxlQ2VsbFxuICAgICAgICAgICAga2V5PXtgJHtjZWxsRGF0ZX0tJHt0aW1lLmZvcm1hdCgnSEgnKX1gfVxuICAgICAgICAgICAgaWQ9e2B0aW1lLWNlbGwtJHtjZWxsRGF0ZX0tJHt0aW1lLmZvcm1hdCgnSEgnKX1gfVxuICAgICAgICAgICAgdHlwZT1cInRpbWUtY2VsbFwiXG4gICAgICAgICAgICBkYXRlPXtkYXl9XG4gICAgICAgICAgICBob3VyPXtob3VyfVxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2B3ZWVrLXRpbWUtY2VsbC0ke2NlbGxEYXRlfS0ke3RpbWUuZm9ybWF0KCdISCcpfWB9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAnaG92ZXI6YmctYWNjZW50IHJlbGF0aXZlIHotMTAgaC1bNjBweF0gY3Vyc29yLXBvaW50ZXIgYm9yZGVyLWInXG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgIClcbiAgICAgIH0pfVxuXG4gICAgICB7LyogRXZlbnQgYmxvY2tzIGxheWVyICovfVxuICAgICAgPERheUV2ZW50c0xheWVyXG4gICAgICAgIGRhdGEtdGVzdGlkPXtgd2Vlay1kYXktZXZlbnRzLSR7ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfWB9XG4gICAgICAgIGRheT17ZGF5fVxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBXZWVrRGF5Q29sIH0gZnJvbSAnLi93ZWVrLWRheS1jb2wnXG5cbmNvbnN0IGhvdXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMjQgfSwgKF8sIGkpID0+IGkpLm1hcCgoaG91cikgPT5cbiAgZGF5anMoKS5ob3VyKGhvdXIpLm1pbnV0ZSgwKVxuKVxuXG5leHBvcnQgY29uc3QgV2Vla1RpbWVHcmlkOiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWssIGN1cnJlbnRMb2NhbGUgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgLy8gR2V0IHN0YXJ0IGFuZCBlbmQgb2YgY3VycmVudCB3ZWVrIGJhc2VkIG9uIGZpcnN0RGF5T2ZXZWVrIHNldHRpbmdcbiAgY29uc3Qgc3RhcnRPZldlZWsgPSBjdXJyZW50RGF0ZS5zdGFydE9mKCd3ZWVrJykuZGF5KGZpcnN0RGF5T2ZXZWVrKVxuICAvLyBJZiBjdXJyZW50IGRhdGUgaXMgYmVmb3JlIHRoZSBzdGFydCBvZiB3ZWVrLCBtb3ZlIGJhY2sgb25lIHdlZWtcbiAgY29uc3QgYWRqdXN0ZWRTdGFydE9mV2VlayA9IGN1cnJlbnREYXRlLmlzQmVmb3JlKHN0YXJ0T2ZXZWVrKVxuICAgID8gc3RhcnRPZldlZWsuc3VidHJhY3QoMSwgJ3dlZWsnKVxuICAgIDogc3RhcnRPZldlZWtcblxuICAvLyBDcmVhdGUgYW4gYXJyYXkgb2YgZGF5cyBmb3IgdGhlIGN1cnJlbnQgd2Vla1xuICBjb25zdCB3ZWVrRGF5cyA9IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgd2Vla0RheXMucHVzaChhZGp1c3RlZFN0YXJ0T2ZXZWVrLmFkZChpLCAnZGF5JykpXG4gIH1cblxuICAvLyBTZXBhcmF0ZSBhbGwtZGF5IGV2ZW50cyBmcm9tIHJlZ3VsYXIgZXZlbnRzIChpbmNsdWRpbmcgbXVsdGktZGF5IGV2ZW50cylcblxuICAvLyBGaW5kIGlmIGN1cnJlbnQgZGF5IGlzIGluIHRoZSBkaXNwbGF5ZWQgd2Vla1xuICBjb25zdCB0b2RheUluZGV4ID0gd2Vla0RheXMuZmluZEluZGV4KChkYXkpID0+IGRheS5pc1NhbWUoZGF5anMoKSwgJ2RheScpKVxuICBjb25zdCBpc0N1cnJlbnRXZWVrID0gdG9kYXlJbmRleCAhPT0gLTFcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtdGVzdGlkPVwid2Vlay10aW1lLWdyaWRcIlxuICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgaC1mdWxsIGdyaWQgZ3JpZC1jb2xzLVthdXRvX3JlcGVhdCg3LDFmcildIGdyaWQtcm93cy1bcmVwZWF0KDI0LG1pbm1heCg2MHB4LCAxZnIpKV1cIlxuICAgID5cbiAgICAgIHsvKiBUaW1lIGxhYmVscyBjb2x1bW4gLSBmaXhlZCAqL31cbiAgICAgIDxkaXZcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJ3ZWVrLXRpbWUtbGFiZWxzXCJcbiAgICAgICAgY2xhc3NOYW1lPVwiei0xMCBjb2wtc3Bhbi0xIHctMTQgZ3JpZCBncmlkLXJvd3MtMjQgYm9yZGVyLXhcIlxuICAgICAgPlxuICAgICAgICB7aG91cnMubWFwKCh0aW1lKSA9PiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAga2V5PXt0aW1lLmZvcm1hdCgnSEg6bW0nKX1cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgd2Vlay10aW1lLWhvdXItJHt0aW1lLmZvcm1hdCgnSEgnKX1gfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC1bNjBweF0gYm9yZGVyLWIgdGV4dC1yaWdodFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHByLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzXCI+XG4gICAgICAgICAgICAgIHtJbnRsLkRhdGVUaW1lRm9ybWF0KGN1cnJlbnRMb2NhbGUsIHtcbiAgICAgICAgICAgICAgICBob3VyOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgbWludXRlOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgaG91cjEyOiB0cnVlLFxuICAgICAgICAgICAgICB9KS5mb3JtYXQodGltZS50b0RhdGUoKSl9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkpfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIHsvKiBEYXkgY29sdW1ucyB3aXRoIHRpbWUgc2xvdHMgKi99XG4gICAgICB7d2Vla0RheXMubWFwKChkYXkpID0+IChcbiAgICAgICAgPFdlZWtEYXlDb2wga2V5PXtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9IGRheT17ZGF5fSAvPlxuICAgICAgKSl9XG5cbiAgICAgIHsvKiBDdXJyZW50IHRpbWUgaW5kaWNhdG9yICovfVxuICAgICAge2lzQ3VycmVudFdlZWsgJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJ3ZWVrLWN1cnJlbnQtdGltZS1pbmRpY2F0b3JcIlxuICAgICAgICAgIGNsYXNzTmFtZT1cInBvaW50ZXItZXZlbnRzLW5vbmUgYWJzb2x1dGUgei00MFwiXG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIHRvcDogYCR7KGRheWpzKCkuaG91cigpICsgZGF5anMoKS5taW51dGUoKSAvIDYwKSAqIDYwfXB4YCxcbiAgICAgICAgICAgIGxlZnQ6IGAke3RvZGF5SW5kZXggKiAoMTAwIC8gNyl9JWAsXG4gICAgICAgICAgICB3aWR0aDogYCR7MTAwIC8gN30lYCxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgYm9yZGVyLXQgYm9yZGVyLXJlZC01MDBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiLW10LTEgbWwtMSBoLTIgdy0yIHJvdW5kZWQtZnVsbCBiZy1yZWQtNTAwXCI+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyBTY3JvbGxBcmVhIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IEZyYWdtZW50IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBEcm9wcGFibGVDZWxsIH0gZnJvbSAnQC9mZWF0dXJlcy9kcm9wcGFibGUtY2VsbC9kcm9wcGFibGUtY2VsbCdcbmltcG9ydCB7IERheUFsbERheVJvdyB9IGZyb20gJy4uL2RheS1hbGwtZGF5LXJvdydcbmltcG9ydCB7IERheUV2ZW50c0xheWVyIH0gZnJvbSAnLi4vZGF5LWV2ZW50cy1sYXllcidcbmltcG9ydCB7IERheUhlYWRlciB9IGZyb20gJy4uL2RheS1oZWFkZXInXG5pbXBvcnQgeyBEYXlUaW1lQ29sIH0gZnJvbSAnLi4vZGF5LXRpbWUtY29sJ1xuXG4vLyBGb3IgbW9yZSBncmFudWxhciB0aW1lIHNsb3RzLCB3ZSdsbCBkaXZpZGUgZWFjaCBob3VyIGludG8gMTUtbWludXRlIHNlZ21lbnRzXG5jb25zdCB0aW1lU2VnbWVudHMgPSBbMCwgMTUsIDMwLCA0NV1cblxuLy8gSG91cnMgdG8gZGlzcGxheSAoYWxsIDI0IGhvdXJzIG9mIHRoZSBkYXkpXG5jb25zdCBob3VycyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDI0IH0sIChfLCBpKSA9PiBpKS5tYXAoKGhvdXIpID0+IHtcbiAgcmV0dXJuIGRheWpzKCkuaG91cihob3VyKS5taW51dGUoMClcbn0pXG5cbmNvbnN0IERheVZpZXcgPSAoKSA9PiB7XG4gIGNvbnN0IHsgY3VycmVudERhdGUgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgY29uc3QgaXNUb2RheSA9IGN1cnJlbnREYXRlLmlzU2FtZShkYXlqcygpLCAnZGF5JylcbiAgY29uc3QgY2VsbERhdGUgPSBjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBkYXRhLXRlc3RpZD1cImRheS12aWV3XCIgY2xhc3NOYW1lPVwiZmxleCBoLWZ1bGwgZmxleC1jb2xcIj5cbiAgICAgIHsvKiBEYXkgaGVhZGVyICovfVxuICAgICAgPERheUhlYWRlciBjbGFzc05hbWU9XCJoLVszcmVtXVwiIC8+XG5cbiAgICAgIHsvKiBUaW1lIGdyaWQgd2l0aG91dCBzY3JvbGxiYXIgKi99XG4gICAgICA8U2Nyb2xsQXJlYVxuICAgICAgICBkYXRhLXRlc3RpZD1cImRheS1zY3JvbGwtYXJlYVwiXG4gICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIG92ZXJmbG93LXktYXV0byBoLVtjYWxjKDEwMCUtM3JlbSldXCJcbiAgICAgID5cbiAgICAgICAgey8qIEFsbC1kYXkgZXZlbnRzIHJvdyAqL31cbiAgICAgICAgPERheUFsbERheVJvdyAvPlxuXG4gICAgICAgIHsvKiBTZXQgYSBmaXhlZCBoZWlnaHQgY29udGFpbmVyIHRoYXQgbWF0Y2hlcyBleGFjdGx5IHRoZSB0b3RhbCBoZWlnaHQgb2YgYWxsIGhvdXIgYmxvY2tzICovfVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJkYXktdGltZS1ncmlkXCJcbiAgICAgICAgICBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy04IGRpdmlkZS14IGJvcmRlci14XCJcbiAgICAgICAgICBzdHlsZT17eyBoZWlnaHQ6IGAke2hvdXJzLmxlbmd0aCAqIDYwfXB4YCB9fVxuICAgICAgICA+XG4gICAgICAgICAgey8qIFRpbWUgbGFiZWxzIGNvbHVtbiAqL31cbiAgICAgICAgICA8RGF5VGltZUNvbCBjbGFzc05hbWU9XCJjb2wtc3Bhbi0yIGgtZnVsbCBtZDpjb2wtc3Bhbi0xXCIgLz5cblxuICAgICAgICAgIHsvKiBEYXkgY29sdW1uIHdpdGggZXZlbnRzICovfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZGF5LWV2ZW50cy1jb2x1bW5cIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgY29sLXNwYW4tNiBoLWZ1bGwgbWQ6Y29sLXNwYW4tN1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgey8qIEJhY2tncm91bmQgZ3JpZCBmb3IgdGltZSBzbG90cyAtIGxvd2VzdCBsYXllciAqL31cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJkYXktYmFja2dyb3VuZC1ncmlkXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMCB6LTBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7aG91cnMubWFwKChob3VyLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGtleT17YGJnLSR7Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9LSR7aG91ci5mb3JtYXQoXG4gICAgICAgICAgICAgICAgICAgICdISCdcbiAgICAgICAgICAgICAgICAgICl9YH1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtWzYwcHhdIGJvcmRlci1iXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7LyogMTUtbWludXRlIG1hcmtlciBsaW5lcyAqL31cbiAgICAgICAgICAgICAgICAgIHt0aW1lU2VnbWVudHMuc2xpY2UoMSkubWFwKChtaW51dGVzKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBrZXk9e2BiZy0ke2hvdXIuZm9ybWF0KCdISCcpfS0ke21pbnV0ZXN9YH1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJib3JkZXItYm9yZGVyIGFic29sdXRlIHctZnVsbCBib3JkZXItdCBib3JkZXItZGFzaGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyB0b3A6IGAke2luZGV4ICogNjAgKyBtaW51dGVzfXB4YCB9fVxuICAgICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIEludGVyYWN0aXZlIGxheWVyIGZvciB0aW1lIHNsb3RzIC0gbWlkZGxlIGxheWVyIHdpdGggbm8gYm9yZGVycyAqL31cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJkYXktaW50ZXJhY3RpdmUtbGF5ZXJcIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJwb2ludGVyLWV2ZW50cy1hdXRvIGFic29sdXRlIGluc2V0LTAgei0xMFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtob3Vycy5tYXAoKHRpbWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBob3VyID0gdGltZS5ob3VyKClcblxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8RnJhZ21lbnQga2V5PXtgJHtjZWxsRGF0ZX0tJHt0aW1lLmZvcm1hdCgnSEgnKX1gfT5cbiAgICAgICAgICAgICAgICAgICAgPERyb3BwYWJsZUNlbGxcbiAgICAgICAgICAgICAgICAgICAgICBpZD17YHRpbWUtY2VsbC0ke2NlbGxEYXRlfS0ke3RpbWUuZm9ybWF0KCdISCcpfS0wMGB9XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRpbWUtY2VsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgZGF0ZT17Y3VycmVudERhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgaG91cj17aG91cn1cbiAgICAgICAgICAgICAgICAgICAgICBtaW51dGU9ezB9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbignaG92ZXI6YmctYWNjZW50IGgtWzE1cHhdIGN1cnNvci1wb2ludGVyJyl9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxEcm9wcGFibGVDZWxsXG4gICAgICAgICAgICAgICAgICAgICAgaWQ9e2B0aW1lLWNlbGwtJHtjZWxsRGF0ZX0tJHt0aW1lLmZvcm1hdCgnSEgnKX0tMTVgfVxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0aW1lLWNlbGxcIlxuICAgICAgICAgICAgICAgICAgICAgIGRhdGU9e2N1cnJlbnREYXRlfVxuICAgICAgICAgICAgICAgICAgICAgIGhvdXI9e2hvdXJ9XG4gICAgICAgICAgICAgICAgICAgICAgbWludXRlPXsxNX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJob3ZlcjpiZy1hY2NlbnQgaC1bMTVweF0gY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8RHJvcHBhYmxlQ2VsbFxuICAgICAgICAgICAgICAgICAgICAgIGlkPXtgdGltZS1jZWxsLSR7Y2VsbERhdGV9LSR7dGltZS5mb3JtYXQoJ0hIJyl9LTMwYH1cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGltZS1jZWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRlPXtjdXJyZW50RGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICBob3VyPXtob3VyfVxuICAgICAgICAgICAgICAgICAgICAgIG1pbnV0ZT17MzB9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaG92ZXI6YmctYWNjZW50IGgtWzE1cHhdIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPERyb3BwYWJsZUNlbGxcbiAgICAgICAgICAgICAgICAgICAgICBpZD17YHRpbWUtY2VsbC0ke2NlbGxEYXRlfS0ke3RpbWUuZm9ybWF0KCdISCcpfS00NWB9XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRpbWUtY2VsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgZGF0ZT17Y3VycmVudERhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgaG91cj17aG91cn1cbiAgICAgICAgICAgICAgICAgICAgICBtaW51dGU9ezQ1fVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImhvdmVyOmJnLWFjY2VudCBoLVsxNXB4XSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIEV2ZW50cyBsYXllciAtIG1pZGRsZS10b3AgbGF5ZXIgKi99XG4gICAgICAgICAgICA8RGF5RXZlbnRzTGF5ZXIgZGF5PXtjdXJyZW50RGF0ZX0gLz5cblxuICAgICAgICAgICAgey8qIEN1cnJlbnQgdGltZSBpbmRpY2F0b3IgLSB0b3AgbGF5ZXIgKi99XG4gICAgICAgICAgICB7aXNUb2RheSAmJiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImRheS1jdXJyZW50LXRpbWUtaW5kaWNhdG9yXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSByaWdodC0wIGxlZnQtMCB6LTQwIGJvcmRlci10IGJvcmRlci1yZWQtNTAwXCJcbiAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgdG9wOiBgJHsoZGF5anMoKS5ob3VyKCkgKyBkYXlqcygpLm1pbnV0ZSgpIC8gNjApICogNjB9cHhgLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIi1tdC0xIC1tbC0xIGgtMiB3LTIgcm91bmRlZC1mdWxsIGJnLXJlZC01MDBcIj48L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvU2Nyb2xsQXJlYT5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBEYXlWaWV3XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICcuLi8uLi9kcmFnZ2FibGUtZXZlbnQvZHJhZ2dhYmxlLWV2ZW50J1xuaW1wb3J0IHsgRHJvcHBhYmxlQ2VsbCB9IGZyb20gJy4uLy4uL2Ryb3BwYWJsZS1jZWxsL2Ryb3BwYWJsZS1jZWxsJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50LCBQcm9jZXNzZWRDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgRVZFTlRfQkFSX0hFSUdIVCB9IGZyb20gJ0AvbGliL2NvbnN0YW50cydcblxuZXhwb3J0IGNvbnN0IERheUFsbERheVJvdyA9ICgpID0+IHtcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIC8vIEdldCBjdXJyZW50IGRheSdzIGV2ZW50cyAtIHRoaXMgd2lsbCByZWZyZXNoIGF1dG9tYXRpY2FsbHkgd2hlbiBzdG9yZSB1cGRhdGVzXG4gIC8vIGJlY2F1c2UgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlIGlzIGEgc2VsZWN0b3IgZnVuY3Rpb24gZnJvbSB0aGUgc3RvcmUgdGhhdCBydW5zIHdoZW5ldmVyIGV2ZW50cyBjaGFuZ2VcbiAgY29uc3QgZGF5RXZlbnRzID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKFxuICAgIGN1cnJlbnREYXRlLnN0YXJ0T2YoJ2RheScpLFxuICAgIGN1cnJlbnREYXRlLmVuZE9mKCdkYXknKVxuICApXG5cbiAgLy8gU2VwYXJhdGUgYWxsLWRheSBldmVudHMgZnJvbSByZWd1bGFyIGV2ZW50c1xuICBjb25zdCB7IGFsbERheUV2ZW50cyB9ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgLy8gT25seSBldmVudHMgZXhwbGljaXRseSBtYXJrZWQgYXMgYWxsRGF5IHNob3VsZCBiZSBpbiB0aGUgYWxsLWRheSBzZWN0aW9uXG4gICAgY29uc3QgYWxsRGF5RXZ0cyA9IGRheUV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC5hbGxEYXkpXG5cbiAgICAvLyBSZWd1bGFyIGV2ZW50cyAoaW5jbHVkaW5nIG11bHRpLWRheSBldmVudHMpXG4gICAgY29uc3QgcmVndWxhckV2dHMgPSBkYXlFdmVudHMuZmlsdGVyKChldmVudCkgPT4gIWV2ZW50LmFsbERheSlcblxuICAgIHJldHVybiB7IGFsbERheUV2ZW50czogYWxsRGF5RXZ0cywgcmVndWxhckV2ZW50czogcmVndWxhckV2dHMgfVxuICB9LCBbZGF5RXZlbnRzXSkgLy8gT25seSBkZXBlbmQgb24gdGhlIGRheUV2ZW50cyB3aGljaCBpcyByZWZyZXNoZWQgYXV0b21hdGljYWxseVxuXG4gIC8vIFByb2Nlc3MgYWxsLWRheSBldmVudHMgZm9yIGRpc3BsYXlcbiAgY29uc3QgeyBwcm9jZXNzZWRBbGxEYXlFdmVudHMgfSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIC8vIFNvcnQgYWxsLWRheSBldmVudHMgKGlmIG5lZWRlZClcbiAgICBjb25zdCBzb3J0ZWRFdmVudHMgPSBbLi4uYWxsRGF5RXZlbnRzXS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICByZXR1cm4gYS5zdGFydC5kaWZmKGIuc3RhcnQpXG4gICAgfSlcblxuICAgIC8vIFRyYWNrIHBvc2l0aW9ucyBpbiByb3dzIGZvciBzdGFja2luZ1xuICAgIGNvbnN0IHJvd3M6IHsgZXZlbnQ6IENhbGVuZGFyRXZlbnQgfVtdW10gPSBbXVxuICAgIGNvbnN0IHByb2Nlc3NlZEV2ZW50czogUHJvY2Vzc2VkQ2FsZW5kYXJFdmVudFtdID0gW11cblxuICAgIHNvcnRlZEV2ZW50cy5mb3JFYWNoKChldmVudCwgcm93SW5kZXgpID0+IHtcbiAgICAgIGxldCBwbGFjZWQgPSBmYWxzZVxuXG4gICAgICB3aGlsZSAoIXBsYWNlZCkge1xuICAgICAgICBpZiAocm93SW5kZXggPj0gcm93cy5sZW5ndGgpIHtcbiAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgcm93IGlmIG5lZWRlZFxuICAgICAgICAgIHJvd3MucHVzaChbXSlcbiAgICAgICAgICBwbGFjZWQgPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSW4gZGF5IHZpZXcsIHdlIGNhbiBwbGFjZSBvbmUgZXZlbnQgcGVyIHJvdyBhcyB0aGV5IGRvbid0IG92ZXJsYXAgaG9yaXpvbnRhbGx5XG4gICAgICAgICAgLy8gVGhpcyBpcyBzaW1wbGVyIHRoYW4gd2VlayB2aWV3IHdoZXJlIHdlIG5lZWRlZCB0byBjaGVjayBmb3Igb3ZlcmxhcHNcbiAgICAgICAgICBwbGFjZWQgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQWRkIGV2ZW50IHRvIHRoZSByb3dcbiAgICAgIHJvd3Nbcm93SW5kZXhdLnB1c2goeyBldmVudCB9KVxuXG4gICAgICAvLyBBZGQgcHJvY2Vzc2VkIGV2ZW50IHdpdGggY29ycmVjdCBwb3NpdGlvbmluZ1xuICAgICAgcHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgbGVmdDogMCxcbiAgICAgICAgd2lkdGg6IDEwMCxcbiAgICAgICAgdG9wOiByb3dJbmRleCAqIEVWRU5UX0JBUl9IRUlHSFQsXG4gICAgICAgIGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcbiAgICAgICAgYWxsRGF5OiB0cnVlLFxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NlZEFsbERheUV2ZW50czogcHJvY2Vzc2VkRXZlbnRzLFxuICAgICAgYWxsRGF5Um93c0NvdW50OiBNYXRoLm1heCgxLCByb3dzLmxlbmd0aCksIC8vIEF0IGxlYXN0IDEgcm93LCBldmVuIGlmIGVtcHR5XG4gICAgfVxuICB9LCBbYWxsRGF5RXZlbnRzXSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtdGVzdGlkPVwiZGF5LWFsbC1kYXktcm93XCJcbiAgICAgIGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTggYm9yZGVyLWIgYm9yZGVyLXhcIlxuICAgID5cbiAgICAgIHsvKiBMZWZ0IGxhYmVsIGZvciBhbGwtZGF5IGV2ZW50cyAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLXNwYW4tMiBmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBib3JkZXItciBwci0yIG1kOmNvbC1zcGFuLTFcIj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtWzEwcHhdIHdoaXRlc3BhY2Utbm93cmFwIHNtOnRleHQteHNcIj5cbiAgICAgICAgICBBbGwtZGF5XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7LyogQWxsLWRheSBldmVudHMgY29udGFpbmVyIHdpdGggZHluYW1pYyBoZWlnaHQgKi99XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIGNvbC1zcGFuLTYgbWQ6Y29sLXNwYW4tNyBcIj5cbiAgICAgICAgPERyb3BwYWJsZUNlbGxcbiAgICAgICAgICBpZD17YGFsbC1kYXktJHtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuICAgICAgICAgIHR5cGU9XCJkYXktY2VsbFwiXG4gICAgICAgICAgZGF0ZT17Y3VycmVudERhdGV9XG4gICAgICAgICAgY2xhc3NOYW1lPVwiaG92ZXI6YmctYWNjZW50IHctZnVsbCBjdXJzb3ItcG9pbnRlciBtaW4taC0xMCBmbGV4IGZsZXgtY29sXCJcbiAgICAgICAgPlxuICAgICAgICAgIHtwcm9jZXNzZWRBbGxEYXlFdmVudHMubWFwKChldmVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBrZXk9e2BhbGwtZGF5LSR7ZXZlbnQuaWR9LSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgICBzdHlsZT17eyBoZWlnaHQ6IEVWRU5UX0JBUl9IRUlHSFQgKyAncHgnIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8RHJhZ2dhYmxlRXZlbnRcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnRJZD17YGFsbC1kYXktJHtldmVudC5pZH0tJHtpbmRleH1gfVxuICAgICAgICAgICAgICAgICAgZXZlbnQ9e2V2ZW50fVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwib3ZlcmZsb3ctY2xpcCB0ZXh0LXhzXCJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IHdpZHRoOiBgY2FsYygxMDAlIC0gdmFyKC0tc3BhY2luZykgKiAyKWAgfX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC9Ecm9wcGFibGVDZWxsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuXG5pbnRlcmZhY2UgRGF5SGVhZGVyUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IERheUhlYWRlcjogUmVhY3QuRkM8RGF5SGVhZGVyUHJvcHM+ID0gKHsgY2xhc3NOYW1lIH0pID0+IHtcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgc3RpY2t5Vmlld0hlYWRlciwgdmlld0hlYWRlckNsYXNzTmFtZSB9ID1cbiAgICB1c2VDYWxlbmRhckNvbnRleHQoKVxuICBjb25zdCBpc1RvZGF5ID0gY3VycmVudERhdGUuaXNTYW1lKGRheWpzKCksICdkYXknKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS10ZXN0aWQ9XCJkYXktaGVhZGVyXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItYiBwLTIgYm9yZGVyLXgnLFxuICAgICAgICBzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0yMCcsXG4gICAgICAgIHZpZXdIZWFkZXJDbGFzc05hbWUsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICA+XG4gICAgICA8QW5pbWF0ZVByZXNlbmNlIG1vZGU9XCJ3YWl0XCI+XG4gICAgICAgIDxtb3Rpb24uZGl2XG4gICAgICAgICAga2V5PXtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1cbiAgICAgICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuICAgICAgICAgIGV4aXQ9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG4gICAgICAgICAgdHJhbnNpdGlvbj17eyBkdXJhdGlvbjogMC4yNSwgZWFzZTogJ2Vhc2VJbk91dCcgfX1cbiAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgJ2ZsZXggaXRlbXMtY2VudGVyIHRleHQtY2VudGVyIHRleHQtYmFzZSBmb250LXNlbWlib2xkIHNtOnRleHQteGwnLFxuICAgICAgICAgICAgaXNUb2RheSAmJiAndGV4dC1wcmltYXJ5J1xuICAgICAgICAgICl9XG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ4czppbmxpbmUgaGlkZGVuXCI+XG4gICAgICAgICAgICB7Y3VycmVudERhdGUuZm9ybWF0KCdkZGRkLCAnKX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAge2N1cnJlbnREYXRlLmZvcm1hdCgnTU1NTSBELCBZWVlZJyl9XG4gICAgICAgICAge2lzVG9kYXkgJiYgKFxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBtbC0yIHJvdW5kZWQtZnVsbCBweC0xIHB5LTAuNSB0ZXh0LXhzIHNtOnB4LTIgc206dGV4dC1zbVwiPlxuICAgICAgICAgICAgICBUb2RheVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvbW90aW9uLmRpdj5cbiAgICAgIDwvQW5pbWF0ZVByZXNlbmNlPlxuICAgIDwvZGl2PlxuICApXG59XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcblxuLy8gSG91cnMgdG8gZGlzcGxheSAoYWxsIDI0IGhvdXJzIG9mIHRoZSBkYXkpXG5jb25zdCBob3VycyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDI0IH0sIChfLCBpKSA9PiBpKS5tYXAoKGhvdXIpID0+IHtcbiAgcmV0dXJuIGRheWpzKCkuaG91cihob3VyKS5taW51dGUoMClcbn0pXG5cbmludGVyZmFjZSBEYXlUaW1lQ29sUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IERheVRpbWVDb2w6IFJlYWN0LkZDPERheVRpbWVDb2xQcm9wcz4gPSAoeyBjbGFzc05hbWUgfSkgPT4ge1xuICBjb25zdCB7IGN1cnJlbnRMb2NhbGUgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBkYXRhLXRlc3RpZD1cImRheS10aW1lLWNvbFwiXG4gICAgICBjbGFzc05hbWU9e2Bjb2wtc3Bhbi0yIGgtZnVsbCBtZDpjb2wtc3Bhbi0xICR7Y2xhc3NOYW1lfWB9XG4gICAgPlxuICAgICAge2hvdXJzLm1hcCgodGltZSkgPT4gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAga2V5PXt0aW1lLmZvcm1hdCgnSEg6bW0nKX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD17YGRheS10aW1lLWhvdXItJHt0aW1lLmZvcm1hdCgnSEgnKX1gfVxuICAgICAgICAgIGNsYXNzTmFtZT1cImgtWzYwcHhdIGJvcmRlci1iIHRleHQtcmlnaHRcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHByLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzXCI+XG4gICAgICAgICAgICB7SW50bC5EYXRlVGltZUZvcm1hdChjdXJyZW50TG9jYWxlLCB7XG4gICAgICAgICAgICAgIGhvdXI6ICdudW1lcmljJyxcbiAgICAgICAgICAgICAgbWludXRlOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgIGhvdXIxMjogdHJ1ZSxcbiAgICAgICAgICAgIH0pLmZvcm1hdCh0aW1lLnRvRGF0ZSgpKX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKSl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7XG4gIEJ1dHRvbixcbiAgQ2hlY2tib3gsXG4gIERhdGVQaWNrZXIsXG4gIERpYWxvZyxcbiAgRGlhbG9nQ29udGVudCxcbiAgRGlhbG9nRGVzY3JpcHRpb24sXG4gIERpYWxvZ0Zvb3RlcixcbiAgRGlhbG9nSGVhZGVyLFxuICBEaWFsb2dUaXRsZSxcbiAgSW5wdXQsXG4gIExhYmVsLFxuICBUb29sdGlwLFxuICBUb29sdGlwQ29udGVudCxcbiAgVG9vbHRpcFByb3ZpZGVyLFxuICBUb29sdGlwVHJpZ2dlcixcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgUlJ1bGVPcHRpb25zIH0gZnJvbSAnQC9saWIvcmVjdXJyZW5jZS1oYW5kbGVyL3R5cGVzJ1xuaW1wb3J0IHsgaXNSZWN1cnJpbmdFdmVudCB9IGZyb20gJ0AvbGliL3JlY3VycmVuY2UtaGFuZGxlcidcbmltcG9ydCB7IFJlY3VycmVuY2VFZGl0b3IgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXRvci9yZWN1cnJlbmNlLWVkaXRvcidcbmltcG9ydCB7IFJlY3VycmVuY2VFZGl0RGlhbG9nIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL2NvbXBvbmVudHMvcmVjdXJyZW5jZS1lZGl0LWRpYWxvZydcbmltcG9ydCB7IHVzZVJlY3VycmluZ0V2ZW50QWN0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9ob29rcy91c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcblxuY29uc3QgY29sb3JPcHRpb25zID0gW1xuICB7IHZhbHVlOiAnYmctYmx1ZS0xMDAgdGV4dC1ibHVlLTgwMCcsIGxhYmVsOiAnQmx1ZScgfSxcbiAgeyB2YWx1ZTogJ2JnLWdyZWVuLTEwMCB0ZXh0LWdyZWVuLTgwMCcsIGxhYmVsOiAnR3JlZW4nIH0sXG4gIHsgdmFsdWU6ICdiZy1wdXJwbGUtMTAwIHRleHQtcHVycGxlLTgwMCcsIGxhYmVsOiAnUHVycGxlJyB9LFxuICB7IHZhbHVlOiAnYmctcmVkLTEwMCB0ZXh0LXJlZC04MDAnLCBsYWJlbDogJ1JlZCcgfSxcbiAgeyB2YWx1ZTogJ2JnLXllbGxvdy0xMDAgdGV4dC15ZWxsb3ctODAwJywgbGFiZWw6ICdZZWxsb3cnIH0sXG4gIHsgdmFsdWU6ICdiZy1waW5rLTEwMCB0ZXh0LXBpbmstODAwJywgbGFiZWw6ICdQaW5rJyB9LFxuICB7IHZhbHVlOiAnYmctaW5kaWdvLTEwMCB0ZXh0LWluZGlnby04MDAnLCBsYWJlbDogJ0luZGlnbycgfSxcbiAgeyB2YWx1ZTogJ2JnLWFtYmVyLTEwMCB0ZXh0LWFtYmVyLTgwMCcsIGxhYmVsOiAnQW1iZXInIH0sXG4gIHsgdmFsdWU6ICdiZy1lbWVyYWxkLTEwMCB0ZXh0LWVtZXJhbGQtODAwJywgbGFiZWw6ICdFbWVyYWxkJyB9LFxuICB7IHZhbHVlOiAnYmctc2t5LTEwMCB0ZXh0LXNreS04MDAnLCBsYWJlbDogJ1NreScgfSxcbiAgeyB2YWx1ZTogJ2JnLXZpb2xldC0xMDAgdGV4dC12aW9sZXQtODAwJywgbGFiZWw6ICdWaW9sZXQnIH0sXG4gIHsgdmFsdWU6ICdiZy1yb3NlLTEwMCB0ZXh0LXJvc2UtODAwJywgbGFiZWw6ICdSb3NlJyB9LFxuICB7IHZhbHVlOiAnYmctdGVhbC0xMDAgdGV4dC10ZWFsLTgwMCcsIGxhYmVsOiAnVGVhbCcgfSxcbiAgeyB2YWx1ZTogJ2JnLW9yYW5nZS0xMDAgdGV4dC1vcmFuZ2UtODAwJywgbGFiZWw6ICdPcmFuZ2UnIH0sXG5dXG5cbmludGVyZmFjZSBFdmVudEZvcm1Qcm9wcyB7XG4gIHNlbGVjdGVkRXZlbnQ/OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuICBzZWxlY3RlZERhdGU/OiBkYXlqcy5EYXlqcyB8IG51bGxcbiAgb25BZGQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgb25VcGRhdGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgb25EZWxldGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgb25DbG9zZTogKCkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgRXZlbnRGb3JtOiBSZWFjdC5GQzxFdmVudEZvcm1Qcm9wcz4gPSAoe1xuICBzZWxlY3RlZEV2ZW50LFxuICBzZWxlY3RlZERhdGUsXG4gIG9uQ2xvc2UsXG4gIG9uVXBkYXRlLFxuICBvbkRlbGV0ZSxcbiAgb25BZGQsXG59KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBkaWFsb2dTdGF0ZSxcbiAgICBvcGVuRWRpdERpYWxvZyxcbiAgICBvcGVuRGVsZXRlRGlhbG9nLFxuICAgIGNsb3NlRGlhbG9nLFxuICAgIGhhbmRsZUNvbmZpcm0sXG4gIH0gPSB1c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMob25DbG9zZSlcblxuICBjb25zdCB7IGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCwgdCB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuICBjb25zdCBzdGFydCA9IHNlbGVjdGVkRXZlbnQ/LnN0YXJ0XG4gIGNvbnN0IGVuZCA9IHNlbGVjdGVkRXZlbnQ/LmVuZFxuXG4gIC8vIEZpbmQgcGFyZW50IGV2ZW50IGlmIHRoaXMgaXMgYSByZWN1cnJpbmcgZXZlbnQgaW5zdGFuY2VcbiAgY29uc3QgcGFyZW50RXZlbnQgPSBzZWxlY3RlZEV2ZW50XG4gICAgPyBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQoc2VsZWN0ZWRFdmVudClcbiAgICA6IG51bGxcblxuICAvLyBGb3JtIGRlZmF1bHQgdmFsdWVzXG4gIGNvbnN0IGRlZmF1bHRTdGFydERhdGUgPSBzZWxlY3RlZERhdGU/LnRvRGF0ZSgpIHx8IG5ldyBEYXRlKClcbiAgY29uc3QgZGVmYXVsdEVuZERhdGUgPVxuICAgIHNlbGVjdGVkRGF0ZT8uYWRkKDEsICdob3VyJykudG9EYXRlKCkgfHwgZGF5anMoKS5hZGQoMSwgJ2hvdXInKS50b0RhdGUoKVxuXG4gIC8vIEZvcm0gc3RhdGVcbiAgY29uc3QgW3N0YXJ0RGF0ZSwgc2V0U3RhcnREYXRlXSA9IHVzZVN0YXRlKFxuICAgIHN0YXJ0Py50b0RhdGUoKSB8fCBkZWZhdWx0U3RhcnREYXRlXG4gIClcbiAgY29uc3QgW2VuZERhdGUsIHNldEVuZERhdGVdID0gdXNlU3RhdGUoZW5kPy50b0RhdGUoKSB8fCBkZWZhdWx0RW5kRGF0ZSlcbiAgY29uc3QgW2lzQWxsRGF5LCBzZXRJc0FsbERheV0gPSB1c2VTdGF0ZShzZWxlY3RlZEV2ZW50Py5hbGxEYXkgfHwgZmFsc2UpXG4gIGNvbnN0IFtzZWxlY3RlZENvbG9yLCBzZXRTZWxlY3RlZENvbG9yXSA9IHVzZVN0YXRlKFxuICAgIHNlbGVjdGVkRXZlbnQ/LmNvbG9yIHx8IGNvbG9yT3B0aW9uc1swXS52YWx1ZVxuICApXG5cbiAgLy8gVGltZSBzdGF0ZVxuICBjb25zdCBbc3RhcnRUaW1lLCBzZXRTdGFydFRpbWVdID0gdXNlU3RhdGUoXG4gICAgc3RhcnQgPyBzdGFydC5mb3JtYXQoJ0hIOm1tJykgOiBkYXlqcyhkZWZhdWx0U3RhcnREYXRlKS5mb3JtYXQoJ0hIOm1tJylcbiAgKVxuICBjb25zdCBbZW5kVGltZSwgc2V0RW5kVGltZV0gPSB1c2VTdGF0ZShcbiAgICBlbmQgPyBlbmQuZm9ybWF0KCdISDptbScpIDogZGF5anMoZGVmYXVsdEVuZERhdGUpLmZvcm1hdCgnSEg6bW0nKVxuICApXG5cbiAgLy8gSW5pdGlhbGl6ZSBmb3JtIHZhbHVlcyBmcm9tIHNlbGVjdGVkIGV2ZW50IG9yIGRlZmF1bHRzXG4gIGNvbnN0IFtmb3JtVmFsdWVzLCBzZXRGb3JtVmFsdWVzXSA9IHVzZVN0YXRlKHtcbiAgICB0aXRsZTogc2VsZWN0ZWRFdmVudD8udGl0bGUgfHwgJycsXG4gICAgZGVzY3JpcHRpb246IHNlbGVjdGVkRXZlbnQ/LmRlc2NyaXB0aW9uIHx8ICcnLFxuICAgIGxvY2F0aW9uOiBzZWxlY3RlZEV2ZW50Py5sb2NhdGlvbiB8fCAnJyxcbiAgfSlcblxuICAvLyBSZWN1cnJlbmNlIHN0YXRlIC0gcHVsbCBSUlVMRSBmcm9tIHBhcmVudCBpZiB0aGlzIGlzIGFuIGluc3RhbmNlXG4gIGNvbnN0IFtycnVsZSwgc2V0UnJ1bGVdID0gdXNlU3RhdGU8UlJ1bGVPcHRpb25zIHwgbnVsbD4oKCkgPT4ge1xuICAgIGNvbnN0IGV2ZW50UnJ1bGUgPSBzZWxlY3RlZEV2ZW50Py5ycnVsZSB8fCBwYXJlbnRFdmVudD8ucnJ1bGVcbiAgICByZXR1cm4gZXZlbnRScnVsZSB8fCBudWxsXG4gIH0pXG5cbiAgLy8gQ3JlYXRlIHdyYXBwZXIgZnVuY3Rpb25zIHRvIGZpeCBUeXBlU2NyaXB0IGVycm9ycyB3aXRoIERhdGVQaWNrZXJcbiAgY29uc3QgaGFuZGxlU3RhcnREYXRlQ2hhbmdlID0gKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHtcbiAgICBpZiAoZGF0ZSkge1xuICAgICAgc2V0U3RhcnREYXRlKGRhdGUpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRW5kRGF0ZUNoYW5nZSA9IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgaWYgKGRhdGUpIHtcbiAgICAgIHNldEVuZERhdGUoZGF0ZSlcbiAgICB9XG4gIH1cblxuICAvLyBVcGRhdGUgZm9ybSB2YWx1ZXMgd2hlbiBpbnB1dCBjaGFuZ2VzXG4gIGNvbnN0IGhhbmRsZUlucHV0Q2hhbmdlID0gKFxuICAgIGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50PlxuICApID0+IHtcbiAgICBjb25zdCB7IG5hbWUsIHZhbHVlIH0gPSBlLnRhcmdldFxuICAgIHNldEZvcm1WYWx1ZXMoKHByZXYpID0+ICh7IC4uLnByZXYsIFtuYW1lXTogdmFsdWUgfSkpXG4gIH1cblxuICAvLyBIYW5kbGUgdGltZSBjaGFuZ2VzXG4gIGNvbnN0IGhhbmRsZVRpbWVDaGFuZ2UgPSAoXG4gICAgZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4sXG4gICAgaXNTdGFydDogYm9vbGVhblxuICApID0+IHtcbiAgICBjb25zdCB0aW1lVmFsdWUgPSBlLnRhcmdldC52YWx1ZVxuICAgIGlmIChpc1N0YXJ0KSB7XG4gICAgICBzZXRTdGFydFRpbWUodGltZVZhbHVlKVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRFbmRUaW1lKHRpbWVWYWx1ZSlcbiAgICB9XG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIFJlc2V0IGVuZCB0aW1lIHdoZW4gYWxsIGRheSBpcyB0b2dnbGVkIHRvIG9uXG4gICAgaWYgKGlzQWxsRGF5KSB7XG4gICAgICBzZXRFbmRUaW1lKCcyMzo1OScpXG4gICAgfVxuICB9LCBbaXNBbGxEYXldKVxuXG4gIC8vIEhhbmRsZSBmb3JtIHN1Ym1pc3Npb25cbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gKGU6IFJlYWN0LkZvcm1FdmVudCkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuXG4gICAgLy8gQ3JlYXRlIGZ1bGwgZGF0ZXRpbWUgb2JqZWN0cyBieSBjb21iaW5pbmcgZGF0ZSBhbmQgdGltZVxuICAgIGNvbnN0IFtzdGFydEhvdXJzLCBzdGFydE1pbnV0ZXNdID0gc3RhcnRUaW1lLnNwbGl0KCc6JykubWFwKE51bWJlcilcbiAgICBjb25zdCBbZW5kSG91cnMsIGVuZE1pbnV0ZXNdID0gZW5kVGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG5cbiAgICBsZXQgc3RhcnREYXRlVGltZSA9IGRheWpzKHN0YXJ0RGF0ZSkuaG91cihzdGFydEhvdXJzKS5taW51dGUoc3RhcnRNaW51dGVzKVxuXG4gICAgbGV0IGVuZERhdGVUaW1lID0gZGF5anMoZW5kRGF0ZSkuaG91cihlbmRIb3VycykubWludXRlKGVuZE1pbnV0ZXMpXG5cbiAgICAvLyBGb3IgYWxsLWRheSBldmVudHMsIHNldCBhcHByb3ByaWF0ZSB0aW1lc1xuICAgIGlmIChpc0FsbERheSkge1xuICAgICAgc3RhcnREYXRlVGltZSA9IHN0YXJ0RGF0ZVRpbWUuaG91cigwKS5taW51dGUoMClcbiAgICAgIGVuZERhdGVUaW1lID0gZW5kRGF0ZVRpbWUuaG91cigyMykubWludXRlKDU5KVxuICAgIH1cblxuICAgIGNvbnN0IGV2ZW50RGF0YTogQ2FsZW5kYXJFdmVudCA9IHtcbiAgICAgIGlkOiBzZWxlY3RlZEV2ZW50Py5pZCB8fCBkYXlqcygpLmZvcm1hdCgnWVlZWU1NRERISG1tc3MnKSxcbiAgICAgIHRpdGxlOiBmb3JtVmFsdWVzLnRpdGxlLFxuICAgICAgc3RhcnQ6IHN0YXJ0RGF0ZVRpbWUsXG4gICAgICBlbmQ6IGVuZERhdGVUaW1lLFxuICAgICAgZGVzY3JpcHRpb246IGZvcm1WYWx1ZXMuZGVzY3JpcHRpb24sXG4gICAgICBsb2NhdGlvbjogZm9ybVZhbHVlcy5sb2NhdGlvbixcbiAgICAgIGFsbERheTogaXNBbGxEYXksXG4gICAgICBjb2xvcjogc2VsZWN0ZWRDb2xvcixcbiAgICAgIHJydWxlOiBycnVsZSB8fCB1bmRlZmluZWQsXG4gICAgfVxuXG4gICAgaWYgKHNlbGVjdGVkRXZlbnQ/LmlkKSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgcmVjdXJyaW5nIGV2ZW50XG4gICAgICBpZiAoaXNSZWN1cnJpbmdFdmVudChzZWxlY3RlZEV2ZW50KSkge1xuICAgICAgICAvLyBTaG93IHJlY3VycmluZyBldmVudCBlZGl0IGRpYWxvZ1xuICAgICAgICBvcGVuRWRpdERpYWxvZyhzZWxlY3RlZEV2ZW50LCB7XG4gICAgICAgICAgdGl0bGU6IGZvcm1WYWx1ZXMudGl0bGUsXG4gICAgICAgICAgc3RhcnQ6IHN0YXJ0RGF0ZVRpbWUsXG4gICAgICAgICAgZW5kOiBlbmREYXRlVGltZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogZm9ybVZhbHVlcy5kZXNjcmlwdGlvbixcbiAgICAgICAgICBsb2NhdGlvbjogZm9ybVZhbHVlcy5sb2NhdGlvbixcbiAgICAgICAgICBhbGxEYXk6IGlzQWxsRGF5LFxuICAgICAgICAgIGNvbG9yOiBzZWxlY3RlZENvbG9yLFxuICAgICAgICAgIHJydWxlOiBycnVsZSB8fCB1bmRlZmluZWQsXG4gICAgICAgIH0pXG4gICAgICAgIHJldHVybiAvLyBEb24ndCBjbG9zZSB0aGUgZm9ybSB5ZXQsIGxldCB0aGUgZGlhbG9nIGhhbmRsZSBpdFxuICAgICAgfVxuICAgICAgb25VcGRhdGU/LihldmVudERhdGEpXG4gICAgfSBlbHNlIHtcbiAgICAgIG9uQWRkPy4oZXZlbnREYXRhKVxuICAgIH1cblxuICAgIG9uQ2xvc2UoKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRGVsZXRlID0gKCkgPT4ge1xuICAgIGlmIChzZWxlY3RlZEV2ZW50Py5pZCkge1xuICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIHJlY3VycmluZyBldmVudFxuICAgICAgaWYgKGlzUmVjdXJyaW5nRXZlbnQoc2VsZWN0ZWRFdmVudCkpIHtcbiAgICAgICAgLy8gU2hvdyByZWN1cnJpbmcgZXZlbnQgZGVsZXRlIGRpYWxvZ1xuICAgICAgICBvcGVuRGVsZXRlRGlhbG9nKHNlbGVjdGVkRXZlbnQpXG4gICAgICAgIHJldHVybiAvLyBEb24ndCBjbG9zZSB0aGUgZm9ybSB5ZXQsIGxldCB0aGUgZGlhbG9nIGhhbmRsZSBpdFxuICAgICAgfVxuICAgICAgb25EZWxldGU/LihzZWxlY3RlZEV2ZW50KVxuICAgICAgb25DbG9zZSgpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlUlJ1bGVDaGFuZ2UgPSAobmV3UlJ1bGU6IFJSdWxlT3B0aW9ucyB8IG51bGwpID0+IHtcbiAgICBpZiAobmV3UlJ1bGUpIHtcbiAgICAgIC8vIENyZWF0ZSBkdHN0YXJ0IHdpdGggdGhlIHNhbWUgbG9naWMgYXMgaW4gaGFuZGxlU3VibWl0XG4gICAgICBjb25zdCBbc3RhcnRIb3Vycywgc3RhcnRNaW51dGVzXSA9IHN0YXJ0VGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG4gICAgICBsZXQgc3RhcnREYXRlVGltZSA9IGRheWpzKHN0YXJ0RGF0ZSkuaG91cihzdGFydEhvdXJzKS5taW51dGUoc3RhcnRNaW51dGVzKVxuXG4gICAgICBpZiAoaXNBbGxEYXkpIHtcbiAgICAgICAgc3RhcnREYXRlVGltZSA9IHN0YXJ0RGF0ZVRpbWUuaG91cigwKS5taW51dGUoMClcbiAgICAgIH1cblxuICAgICAgLy8gRW5zdXJlIGR0c3RhcnQgaXMgYWx3YXlzIGluY2x1ZGVkIGluIFJSdWxlT3B0aW9ucyBhcyBhIERhdGUgb2JqZWN0XG4gICAgICBjb25zdCBjb21wbGV0ZVJydWxlOiBSUnVsZU9wdGlvbnMgPSB7XG4gICAgICAgIC4uLm5ld1JSdWxlLFxuICAgICAgICBkdHN0YXJ0OiBzdGFydERhdGVUaW1lLnRvRGF0ZSgpLCAvLyBDb252ZXJ0IGRheWpzIHRvIERhdGVcbiAgICAgIH1cbiAgICAgIHNldFJydWxlKGNvbXBsZXRlUnJ1bGUpXG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFJydWxlKG51bGwpXG4gICAgfVxuICB9XG5cbiAgLy8gVmFsaWRhdGUgZW5kIGRhdGUgaXMgbm90IGJlZm9yZSBzdGFydCBkYXRlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGRheWpzKHN0YXJ0RGF0ZSkuaXNBZnRlcihkYXlqcyhlbmREYXRlKSkpIHtcbiAgICAgIHNldEVuZERhdGUoc3RhcnREYXRlKVxuICAgIH1cbiAgfSwgW3N0YXJ0RGF0ZSwgZW5kRGF0ZV0pXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPERpYWxvZyBvcGVuPXt0cnVlfSBvbk9wZW5DaGFuZ2U9e29uQ2xvc2V9PlxuICAgICAgICA8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJ3LVs5MHZ3XSBtYXgtdy1bNTAwcHhdIHAtNCBzbTpwLTZcIj5cbiAgICAgICAgICA8Zm9ybSBvblN1Ym1pdD17aGFuZGxlU3VibWl0fT5cbiAgICAgICAgICAgIDxEaWFsb2dIZWFkZXIgY2xhc3NOYW1lPVwibWItMiBzbTptYi00XCI+XG4gICAgICAgICAgICAgIDxEaWFsb2dUaXRsZSBjbGFzc05hbWU9XCJ0ZXh0LWJhc2Ugc206dGV4dC1sZ1wiPlxuICAgICAgICAgICAgICAgIHtzZWxlY3RlZEV2ZW50Py5pZCA/IHQoJ2VkaXRFdmVudCcpIDogdCgnY3JlYXRlRXZlbnQnKX1cbiAgICAgICAgICAgICAgPC9EaWFsb2dUaXRsZT5cbiAgICAgICAgICAgICAgPERpYWxvZ0Rlc2NyaXB0aW9uIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPlxuICAgICAgICAgICAgICAgIHtzZWxlY3RlZEV2ZW50Py5pZCA/IHQoJ2VkaXRFdmVudERldGFpbHMnKSA6IHQoJ2FkZE5ld0V2ZW50Jyl9XG4gICAgICAgICAgICAgIDwvRGlhbG9nRGVzY3JpcHRpb24+XG4gICAgICAgICAgICA8L0RpYWxvZ0hlYWRlcj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0zIHB5LTIgc206Z2FwLTQgc206cHktNFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8TGFiZWwgaHRtbEZvcj1cInRpdGxlXCIgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICB7dCgndGl0bGUnKX1cbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgaWQ9XCJ0aXRsZVwiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwidGl0bGVcIlxuICAgICAgICAgICAgICAgICAgdmFsdWU9e2Zvcm1WYWx1ZXMudGl0bGV9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlSW5wdXRDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17dCgnZXZlbnRUaXRsZVBsYWNlaG9sZGVyJyl9XG4gICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC04IHRleHQtc20gc206aC05XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTEgc206Z2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8TGFiZWwgaHRtbEZvcj1cImRlc2NyaXB0aW9uXCIgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICB7dCgnZGVzY3JpcHRpb24nKX1cbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgaWQ9XCJkZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwiZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgICAgdmFsdWU9e2Zvcm1WYWx1ZXMuZGVzY3JpcHRpb259XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlSW5wdXRDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17dCgnZXZlbnREZXNjcmlwdGlvblBsYWNlaG9sZGVyJyl9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTggdGV4dC1zbSBzbTpoLTlcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG4gICAgICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgICAgICBpZD1cImFsbERheVwiXG4gICAgICAgICAgICAgICAgICBjaGVja2VkPXtpc0FsbERheX1cbiAgICAgICAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17KGNoZWNrZWQpID0+IHNldElzQWxsRGF5KGNoZWNrZWQgPT09IHRydWUpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPExhYmVsIGh0bWxGb3I9XCJhbGxEYXlcIiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj5cbiAgICAgICAgICAgICAgICAgIHt0KCdhbGxEYXknKX1cbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTIgc206Z2FwLTRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPnt0KCdzdGFydERhdGUnKX08L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgPERhdGVQaWNrZXJcbiAgICAgICAgICAgICAgICAgICAgZGF0ZT17c3RhcnREYXRlfVxuICAgICAgICAgICAgICAgICAgICBzZXREYXRlPXtoYW5kbGVTdGFydERhdGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm10LTFcIlxuICAgICAgICAgICAgICAgICAgICBjbG9zZU9uU2VsZWN0XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICA8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e3QoJ2VuZERhdGUnKX08L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgPERhdGVQaWNrZXJcbiAgICAgICAgICAgICAgICAgICAgZGF0ZT17ZW5kRGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgc2V0RGF0ZT17aGFuZGxlRW5kRGF0ZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXQtMVwiXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlT25TZWxlY3RcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIHshaXNBbGxEYXkgJiYgKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtMiBzbTpnYXAtNFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPExhYmVsIGh0bWxGb3I9XCJzdGFydC10aW1lXCIgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3QoJ3N0YXJ0VGltZScpfVxuICAgICAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cInN0YXJ0LXRpbWVcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0aW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17c3RhcnRUaW1lfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gaGFuZGxlVGltZUNoYW5nZShlLCB0cnVlKX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtdC0xIGgtOCB0ZXh0LXNtIHNtOmgtOVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwiZW5kLXRpbWVcIiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj5cbiAgICAgICAgICAgICAgICAgICAgICB7dCgnZW5kVGltZScpfVxuICAgICAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImVuZC10aW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2VuZFRpbWV9XG4gICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBoYW5kbGVUaW1lQ2hhbmdlKGUsIGZhbHNlKX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtdC0xIGgtOCB0ZXh0LXNtIHNtOmgtOVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTEgc206Z2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e3QoJ2NvbG9yJyl9PC9MYWJlbD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8VG9vbHRpcFByb3ZpZGVyPlxuICAgICAgICAgICAgICAgICAgICB7Y29sb3JPcHRpb25zLm1hcCgoY29sb3IpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICA8VG9vbHRpcCBrZXk9e2NvbG9yLnZhbHVlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUb29sdGlwVHJpZ2dlciBhc0NoaWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2NvbG9yLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtjb2xvci52YWx1ZX0gaC02IHctNiByb3VuZGVkLWZ1bGwgc206aC04IHNtOnctOGAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENvbG9yID09PSBjb2xvci52YWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmluZy0yIHJpbmctYmxhY2sgcmluZy1vZmZzZXQtMSBzbTpyaW5nLW9mZnNldC0yJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0U2VsZWN0ZWRDb2xvcihjb2xvci52YWx1ZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17Y29sb3IubGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXBUcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRvb2x0aXBDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57Y29sb3IubGFiZWx9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMSBzbTpnYXAtMlwiPlxuICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwibG9jYXRpb25cIiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj5cbiAgICAgICAgICAgICAgICAgIHt0KCdsb2NhdGlvbicpfVxuICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICBpZD1cImxvY2F0aW9uXCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJsb2NhdGlvblwiXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17Zm9ybVZhbHVlcy5sb2NhdGlvbn1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVJbnB1dENoYW5nZX1cbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXt0KCdldmVudExvY2F0aW9uUGxhY2Vob2xkZXInKX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtOCB0ZXh0LXNtIHNtOmgtOVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgey8qIFJlY3VycmVuY2UgU2VjdGlvbiAqL31cbiAgICAgICAgICAgICAgPFJlY3VycmVuY2VFZGl0b3IgdmFsdWU9e3JydWxlfSBvbkNoYW5nZT17aGFuZGxlUlJ1bGVDaGFuZ2V9IC8+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPERpYWxvZ0Zvb3RlciBjbGFzc05hbWU9XCJtdC0yIGZsZXggZmxleC1jb2wtcmV2ZXJzZSBnYXAtMiBzbTptdC00IHNtOmZsZXgtcm93IHNtOmdhcC0wXCI+XG4gICAgICAgICAgICAgIHtzZWxlY3RlZEV2ZW50Py5pZCAmJiAoXG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICB2YXJpYW50PVwiZGVzdHJ1Y3RpdmVcIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlRGVsZXRlfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHNtOm1yLWF1dG8gc206dy1hdXRvXCJcbiAgICAgICAgICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3QoJ2RlbGV0ZScpfVxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsIGdhcC0yIHNtOnctYXV0b1wiPlxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVcIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17b25DbG9zZX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMSBzbTpmbGV4LW5vbmVcIlxuICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7dCgnY2FuY2VsJyl9XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgPEJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3NOYW1lPVwiZmxleC0xIHNtOmZsZXgtbm9uZVwiIHNpemU9XCJzbVwiPlxuICAgICAgICAgICAgICAgICAge3NlbGVjdGVkRXZlbnQ/LmlkID8gdCgndXBkYXRlJykgOiB0KCdjcmVhdGUnKX1cbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L0RpYWxvZ0Zvb3Rlcj5cbiAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgIDwvRGlhbG9nQ29udGVudD5cbiAgICAgIDwvRGlhbG9nPlxuXG4gICAgICB7LyogUmVjdXJyaW5nIEV2ZW50IEVkaXQgRGlhbG9nICovfVxuICAgICAgPFJlY3VycmVuY2VFZGl0RGlhbG9nXG4gICAgICAgIGlzT3Blbj17ZGlhbG9nU3RhdGUuaXNPcGVufVxuICAgICAgICBvbkNsb3NlPXtjbG9zZURpYWxvZ31cbiAgICAgICAgb25Db25maXJtPXtoYW5kbGVDb25maXJtfVxuICAgICAgICBvcGVyYXRpb25UeXBlPXtkaWFsb2dTdGF0ZS5vcGVyYXRpb25UeXBlfVxuICAgICAgICBldmVudFRpdGxlPXtkaWFsb2dTdGF0ZS5ldmVudD8udGl0bGUgfHwgJyd9XG4gICAgICAvPlxuICAgIDwvPlxuICApXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuaW1wb3J0IHsgb21pdEtleXMsIHNhZmVEYXRlIH0gZnJvbSAnLi4vdXRpbHMnXG5pbXBvcnQgdHlwZSB7IFJSdWxlT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBpc1JlY3VycmluZ0V2ZW50ID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBCb29sZWFuKGV2ZW50LnJydWxlIHx8IGV2ZW50LnJlY3VycmVuY2VJZCB8fCBldmVudC51aWQpXG59XG5cbmludGVyZmFjZSBHZW5lcmF0ZVJlY3VycmluZ0V2ZW50c1Byb3BzIHtcbiAgZXZlbnQ6IENhbGVuZGFyRXZlbnRcbiAgY3VycmVudEV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIHN0YXJ0RGF0ZTogZGF5anMuRGF5anNcbiAgZW5kRGF0ZTogZGF5anMuRGF5anNcbn1cblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzID0gKHtcbiAgZXZlbnQsXG4gIGN1cnJlbnRFdmVudHMsXG4gIHN0YXJ0RGF0ZSxcbiAgZW5kRGF0ZSxcbn06IEdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzUHJvcHMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuICAvLyBJZiBub3QgYSByZWN1cnJpbmcgZXZlbnQsIHJldHVybiBlbXB0eSBhcnJheVxuICBpZiAoIWV2ZW50LnJydWxlKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICB0cnkge1xuICAgIC8vIENyZWF0ZSBydWxlIGZyb20gUlJ1bGVPcHRpb25zIGVuc3VyaW5nIGR0c3RhcnQgaXMgYWx3YXlzIHByb3ZpZGVkXG4gICAgLy8gSWYgZHRzdGFydCBpcyBtaXNzaW5nIGZyb20gdGhlIFJSVUxFLCB1c2UgdGhlIGV2ZW50J3Mgc3RhcnQgdGltZSBhcyBmYWxsYmFja1xuICAgIGNvbnN0IHJ1bGVPcHRpb25zOiBSUnVsZU9wdGlvbnMgPSB7XG4gICAgICAuLi5ldmVudC5ycnVsZSxcbiAgICAgIGR0c3RhcnQ6IGV2ZW50LnJydWxlLmR0c3RhcnQgfHwgZXZlbnQuc3RhcnQudG9EYXRlKCksXG4gICAgfVxuICAgIGNvbnN0IHJ1bGUgPSBuZXcgUlJ1bGUocnVsZU9wdGlvbnMpXG5cbiAgICBjb25zdCBvdmVycmlkZXMgPSBjdXJyZW50RXZlbnRzLmZpbHRlcihcbiAgICAgIChlKSA9PiBlLnJlY3VycmVuY2VJZCAmJiBlLnVpZCA9PT0gZXZlbnQudWlkXG4gICAgKVxuXG4gICAgLy8gQ2FsY3VsYXRlIGV2ZW50IGR1cmF0aW9uIHRvIGV4cGFuZCBzZWFyY2ggd2luZG93IGZvciBldmVudHMgdGhhdCBzcGFuIHRoZSByYW5nZVxuICAgIGNvbnN0IGV2ZW50RHVyYXRpb24gPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydClcblxuICAgIC8vIEV4cGFuZCBzZWFyY2ggd2luZG93IGJhY2t3YXJkIGJ5IGV2ZW50IGR1cmF0aW9uIHRvIGNhdGNoIGV2ZW50cyB0aGF0IHN0YXJ0IGJlZm9yZVxuICAgIC8vIHRoZSByYW5nZSBidXQgc3BhbiBpbnRvIGl0XG4gICAgY29uc3QgZXhwYW5kZWRTdGFydERhdGVUaW1lID0gc3RhcnREYXRlXG4gICAgICAuc3VidHJhY3QoZXZlbnREdXJhdGlvbiwgJ21pbGxpc2Vjb25kJylcbiAgICAgIC50b0RhdGUoKVxuICAgIGNvbnN0IGVuZERhdGVUaW1lID0gZW5kRGF0ZS50b0RhdGUoKVxuXG4gICAgLy8gR2V0IGFsbCBvY2N1cnJlbmNlcyBpbiB0aGUgZXhwYW5kZWQgcmFuZ2VcbiAgICBjb25zdCBvY2N1cnJlbmNlcyA9IHJ1bGUuYmV0d2VlbihleHBhbmRlZFN0YXJ0RGF0ZVRpbWUsIGVuZERhdGVUaW1lLCB0cnVlKVxuXG4gICAgLy8gQ29udmVydCBvY2N1cnJlbmNlcyB0byBDYWxlbmRhckV2ZW50IGluc3RhbmNlc1xuICAgIGNvbnN0IHJlY3VycmluZ0V2ZW50czogQ2FsZW5kYXJFdmVudFtdID0gb2NjdXJyZW5jZXNcbiAgICAgIC5tYXAoKG9jY3VycmVuY2UsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IG9jY3VycmVuY2VEYXRlID0gZGF5anMob2NjdXJyZW5jZSlcbiAgICAgICAgY29uc3QgZXhpc3RpbmdPdmVycmlkZSA9IG92ZXJyaWRlcy5maW5kKChlKSA9PlxuICAgICAgICAgIHNhZmVEYXRlKGUucmVjdXJyZW5jZUlkKS5pc1NhbWUob2NjdXJyZW5jZURhdGUpXG4gICAgICAgIClcblxuICAgICAgICAvLyBJZiB0aGVyZSdzIGFuIG92ZXJyaWRlLCB1c2UgaXRcbiAgICAgICAgaWYgKGV4aXN0aW5nT3ZlcnJpZGUpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi5ldmVudCwgLi4uZXhpc3RpbmdPdmVycmlkZSB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGR1cmF0aW9uIGZyb20gdGhlIG9yaWdpbmFsIGV2ZW50XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsRHVyYXRpb24gPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydClcbiAgICAgICAgY29uc3QgbmV3RW5kVGltZSA9IG9jY3VycmVuY2VEYXRlLmFkZChvcmlnaW5hbER1cmF0aW9uLCAnbWlsbGlzZWNvbmQnKVxuICAgICAgICBjb25zdCByZWN1cnJpbmdFdmVudElkID0gYCR7ZXZlbnQuaWR9XyR7aW5kZXh9YFxuICAgICAgICBjb25zdCBwYXJlbnRVSUQgPSBldmVudC51aWQgfHwgYCR7ZXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYFxuXG4gICAgICAgIC8vIENyZWF0ZSB0aGUgcmVjdXJyaW5nIGV2ZW50IGluc3RhbmNlXG4gICAgICAgIGNvbnN0IHJlY3VycmluZ0V2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuICAgICAgICAgIC4uLmV2ZW50LFxuICAgICAgICAgIGlkOiByZWN1cnJpbmdFdmVudElkLFxuICAgICAgICAgIHN0YXJ0OiBvY2N1cnJlbmNlRGF0ZSxcbiAgICAgICAgICBlbmQ6IG5ld0VuZFRpbWUsXG4gICAgICAgICAgdWlkOiBwYXJlbnRVSUQsIC8vIFNhbWUgVUlEIGFzIHBhcmVudCBmb3IgcHJvcGVyIGdyb3VwaW5nXG4gICAgICAgICAgcnJ1bGU6IHVuZGVmaW5lZCwgLy8gSW5zdGFuY2UgZXZlbnRzIGRvbid0IGhhdmUgUlJVTEVcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZWN1cnJpbmdFdmVudFxuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKHJlY3VycmluZ0V2ZW50KSA9PiB7XG4gICAgICAgIC8vIEZpbHRlciBvdXQgRVhEQVRFIGV4Y2x1c2lvbnNcbiAgICAgICAgY29uc3QgaGFzRXhkYXRlcyA9IGV2ZW50LmV4ZGF0ZXMgJiYgZXZlbnQuZXhkYXRlcy5sZW5ndGggPiAwXG4gICAgICAgIGlmIChoYXNFeGRhdGVzKSB7XG4gICAgICAgICAgY29uc3QgZXZlbnRTdGFydElTTyA9IHJlY3VycmluZ0V2ZW50LnN0YXJ0LnRvSVNPU3RyaW5nKClcbiAgICAgICAgICBjb25zdCBpc0V4Y2x1ZGVkID0gZXZlbnQuZXhkYXRlcy5pbmNsdWRlcyhldmVudFN0YXJ0SVNPKVxuICAgICAgICAgIGlmIChpc0V4Y2x1ZGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaWx0ZXIgdG8gb25seSBpbmNsdWRlIGV2ZW50cyB0aGF0IHNwYW4gdGhyb3VnaCB0aGUgb3JpZ2luYWwgcmVxdWVzdGVkIGRhdGUgcmFuZ2VcbiAgICAgICAgLy8gQW4gZXZlbnQgc3BhbnMgdGhlIHJhbmdlIGlmOiBldmVudF9zdGFydCA8IHJhbmdlX2VuZCBBTkQgZXZlbnRfZW5kID4gcmFuZ2Vfc3RhcnRcbiAgICAgICAgLy8gVXNlIGlzU2FtZU9yQmVmb3JlL2lzU2FtZU9yQWZ0ZXIgdG8gaW5jbHVkZSBib3VuZGFyeSBjYXNlc1xuICAgICAgICBjb25zdCBldmVudFNwYW5zUmFuZ2UgPVxuICAgICAgICAgIHJlY3VycmluZ0V2ZW50LnN0YXJ0LmlzU2FtZU9yQmVmb3JlKGVuZERhdGUpICYmXG4gICAgICAgICAgcmVjdXJyaW5nRXZlbnQuZW5kLmlzU2FtZU9yQWZ0ZXIoc3RhcnREYXRlKVxuXG4gICAgICAgIHJldHVybiBldmVudFNwYW5zUmFuZ2VcbiAgICAgIH0pXG5cbiAgICByZXR1cm4gcmVjdXJyaW5nRXZlbnRzXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLy8gSGFuZGxlIGludmFsaWQgUlJVTEUgb3B0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIFJSVUxFIG9wdGlvbnM6ICR7SlNPTi5zdHJpbmdpZnkoZXZlbnQucnJ1bGUpfS4gRXJyb3I6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgIClcbiAgfVxufVxuXG5pbnRlcmZhY2UgVXBkYXRlUmVjdXJyaW5nRXZlbnRQcm9wcyB7XG4gIHRhcmdldEV2ZW50OiBDYWxlbmRhckV2ZW50XG4gIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD5cbiAgY3VycmVudEV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIHNjb3BlOiAndGhpcycgfCAnZm9sbG93aW5nJyB8ICdhbGwnXG59XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVSZWN1cnJpbmdFdmVudCA9ICh7XG4gIHRhcmdldEV2ZW50LFxuICB1cGRhdGVzLFxuICBjdXJyZW50RXZlbnRzLFxuICBzY29wZSxcbn06IFVwZGF0ZVJlY3VycmluZ0V2ZW50UHJvcHMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuICBjb25zdCB1cGRhdGVkRXZlbnRzID0gWy4uLmN1cnJlbnRFdmVudHNdXG5cbiAgLy8gRmluZCB0aGUgYmFzZSByZWN1cnJpbmcgZXZlbnRcbiAgY29uc3QgYmFzZUV2ZW50SW5kZXggPSB1cGRhdGVkRXZlbnRzLmZpbmRJbmRleCgoZSkgPT4ge1xuICAgIGNvbnN0IHBhcmVudFVpZCA9IGUudWlkIHx8IGAke2UuaWR9QGlsYW15LmNhbGVuZGFyYFxuICAgIHJldHVybiBwYXJlbnRVaWQgPT09IHRhcmdldEV2ZW50LnVpZCAmJiBlLnJydWxlICYmICFlLnJlY3VycmVuY2VJZFxuICB9KVxuXG4gIGlmIChiYXNlRXZlbnRJbmRleCA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Jhc2UgcmVjdXJyaW5nIGV2ZW50IG5vdCBmb3VuZCcpXG4gIH1cblxuICBjb25zdCBiYXNlRXZlbnQgPSB1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XVxuXG4gIHN3aXRjaCAoc2NvcGUpIHtcbiAgICBjYXNlICd0aGlzJzoge1xuICAgICAgLy8gXCJUaGlzIGV2ZW50IG9ubHlcIiAtIEFkZCBFWERBVEUgdG8gYmFzZSBldmVudCBhbmQgY3JlYXRlIHN0YW5kYWxvbmUgbW9kaWZpZWQgZXZlbnRcbiAgICAgIGNvbnN0IHRhcmdldEV2ZW50U3RhcnRJU08gPSB0YXJnZXRFdmVudC5zdGFydC50b0lTT1N0cmluZygpXG4gICAgICBjb25zdCBleGlzdGluZ0V4ZGF0ZXMgPSBiYXNlRXZlbnQuZXhkYXRlcyB8fCBbXVxuICAgICAgY29uc3QgdXBkYXRlZEV4ZGF0ZXMgPSBbLi4uZXhpc3RpbmdFeGRhdGVzLCB0YXJnZXRFdmVudFN0YXJ0SVNPXVxuXG4gICAgICBjb25zdCB1cGRhdGVkQmFzZUV2ZW50ID0ge1xuICAgICAgICAuLi5iYXNlRXZlbnQsXG4gICAgICAgIGV4ZGF0ZXM6IHVwZGF0ZWRFeGRhdGVzLFxuICAgICAgfVxuICAgICAgdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB1cGRhdGVkQmFzZUV2ZW50XG5cbiAgICAgIC8vIENyZWF0ZSBzdGFuZGFsb25lIG1vZGlmaWVkIGV2ZW50IHdpdGggcmVjdXJyZW5jZUlkXG4gICAgICBjb25zdCBtb2RpZmllZEV2ZW50SWQgPSBgJHt0YXJnZXRFdmVudC5pZH1fbW9kaWZpZWRfJHtEYXRlLm5vdygpfWBcbiAgICAgIGNvbnN0IG1vZGlmaWVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgPSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVE9ETzogZml4IHRoZSB0eXBlc1xuICAgICAgICAuLi5vbWl0S2V5cyh0YXJnZXRFdmVudCwgWyd3aWR0aCcsICdoZWlnaHQnLCAndG9wJywgJ2xlZnQnLCAncmlnaHQnXSksXG4gICAgICAgIC4uLnVwZGF0ZXMsXG4gICAgICAgIGlkOiBtb2RpZmllZEV2ZW50SWQsXG4gICAgICAgIHJlY3VycmVuY2VJZDogdGFyZ2V0RXZlbnRTdGFydElTTywgLy8gVGhpcyBtYXJrcyBpdCBhcyBhIG1vZGlmaWVkIGluc3RhbmNlXG4gICAgICAgIHVpZDogYmFzZUV2ZW50LnVpZCB8fCBgJHtiYXNlRXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYCwgLy8gS2VlcCBzYW1lIFVJRCBhcyBiYXNlIGV2ZW50IChpQ2FsZW5kYXIgc3RhbmRhcmQpXG4gICAgICAgIHJydWxlOiB1bmRlZmluZWQsIC8vIFN0YW5kYWxvbmUgZXZlbnRzIGRvbid0IGhhdmUgUlJVTEVcbiAgICAgIH0gYXMgQ2FsZW5kYXJFdmVudFxuICAgICAgdXBkYXRlZEV2ZW50cy5wdXNoKG1vZGlmaWVkRXZlbnQpXG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGNhc2UgJ2ZvbGxvd2luZyc6IHtcbiAgICAgIC8vIFwiVGhpcyBhbmQgZm9sbG93aW5nXCIgLSBUZXJtaW5hdGUgb3JpZ2luYWwgc2VyaWVzIGFuZCBjcmVhdGUgbmV3IHNlcmllc1xuXG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIHRlcm1pbmF0aW9uIGRhdGU6IGRheSBiZWZvcmUgdGFyZ2V0IHdpdGggZW5kIG9mIGRheSB0aW1lXG4gICAgICAvLyBUaGlzIGVuc3VyZXMgdGhlIGxhc3Qgb2NjdXJyZW5jZSBiZWZvcmUgdGFyZ2V0IGlzIGluY2x1ZGVkIGluIHRoZSB0ZXJtaW5hdGVkIHNlcmllc1xuICAgICAgY29uc3QgZGF5QmVmb3JlVGFyZ2V0ID0gdGFyZ2V0RXZlbnQuc3RhcnQuc3VidHJhY3QoMSwgJ2RheScpXG4gICAgICBjb25zdCB0ZXJtaW5hdGlvbkRhdGUgPSBkYXlCZWZvcmVUYXJnZXQuZW5kT2YoJ2RheScpLnRvRGF0ZSgpXG5cbiAgICAgIC8vIFVwZGF0ZSBvcmlnaW5hbCBzZXJpZXMgd2l0aCBVTlRJTCB0byBlbmQgYmVmb3JlIHRhcmdldCBkYXRlXG4gICAgICBjb25zdCB0ZXJtaW5hdGVkRXZlbnQgPSB7XG4gICAgICAgIC4uLmJhc2VFdmVudCxcbiAgICAgICAgcnJ1bGU6IHtcbiAgICAgICAgICAuLi5iYXNlRXZlbnQucnJ1bGUsXG4gICAgICAgICAgdW50aWw6IHRlcm1pbmF0aW9uRGF0ZSxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICAgIHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdGVybWluYXRlZEV2ZW50XG5cbiAgICAgIC8vIENyZWF0ZSBuZXcgc2VyaWVzIHN0YXJ0aW5nIGZyb20gdGFyZ2V0IGRhdGVcbiAgICAgIGNvbnN0IG9yaWdpbmFsRHVyYXRpb24gPSBiYXNlRXZlbnQuZW5kLmRpZmYoYmFzZUV2ZW50LnN0YXJ0KVxuICAgICAgY29uc3QgbmV3U2VyaWVzU3RhcnRUaW1lID0gdXBkYXRlcy5zdGFydCB8fCB0YXJnZXRFdmVudC5zdGFydFxuICAgICAgY29uc3QgbmV3U2VyaWVzRW5kVGltZSA9XG4gICAgICAgIHVwZGF0ZXMuZW5kIHx8IG5ld1Nlcmllc1N0YXJ0VGltZS5hZGQob3JpZ2luYWxEdXJhdGlvbilcbiAgICAgIGNvbnN0IG5ld1Nlcmllc0lkID0gYCR7YmFzZUV2ZW50LmlkfV9mb2xsb3dpbmdgXG4gICAgICBjb25zdCBuZXdTZXJpZXNVSUQgPSBgJHtuZXdTZXJpZXNJZH1AaWxhbXkuY2FsZW5kYXJgXG5cbiAgICAgIGNvbnN0IG5ld1Nlcmllc0V2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuICAgICAgICAuLi5iYXNlRXZlbnQsXG4gICAgICAgIC4uLnVwZGF0ZXMsXG4gICAgICAgIHJydWxlOiB7XG4gICAgICAgICAgLi4uYmFzZUV2ZW50LnJydWxlLFxuICAgICAgICAgIC4uLnVwZGF0ZXMucnJ1bGUsXG4gICAgICAgICAgZHRzdGFydDogbmV3U2VyaWVzU3RhcnRUaW1lLnRvRGF0ZSgpLFxuICAgICAgICB9LFxuICAgICAgICBpZDogbmV3U2VyaWVzSWQsXG4gICAgICAgIHVpZDogbmV3U2VyaWVzVUlELCAvLyBOZXcgVUlEIGZvciBuZXcgc2VyaWVzXG4gICAgICAgIHN0YXJ0OiBuZXdTZXJpZXNTdGFydFRpbWUsXG4gICAgICAgIGVuZDogbmV3U2VyaWVzRW5kVGltZSxcbiAgICAgICAgcmVjdXJyZW5jZUlkOiB1bmRlZmluZWQsIC8vIFRoaXMgaXMgYSBuZXcgYmFzZSBldmVudCwgbm90IGFuIGluc3RhbmNlXG4gICAgICB9XG4gICAgICB1cGRhdGVkRXZlbnRzLnB1c2gobmV3U2VyaWVzRXZlbnQpXG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGNhc2UgJ2FsbCc6IHtcbiAgICAgIC8vIFwiQWxsIGV2ZW50c1wiIC0gVXBkYXRlIHRoZSBiYXNlIHJlY3VycmluZyBldmVudFxuICAgICAgY29uc3QgdXBkYXRlZEJhc2VFdmVudCA9IHtcbiAgICAgICAgLi4uYmFzZUV2ZW50LFxuICAgICAgICAuLi51cGRhdGVzLFxuICAgICAgfVxuICAgICAgdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB1cGRhdGVkQmFzZUV2ZW50XG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHNjb3BlOiAke3Njb3BlfS4gTXVzdCBiZSAndGhpcycsICdmb2xsb3dpbmcnLCBvciAnYWxsJ2BcbiAgICAgIClcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVkRXZlbnRzXG59XG5cbmludGVyZmFjZSBEZWxldGVSZWN1cnJpbmdFdmVudFByb3BzIHtcbiAgdGFyZ2V0RXZlbnQ6IENhbGVuZGFyRXZlbnRcbiAgY3VycmVudEV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIHNjb3BlOiAndGhpcycgfCAnZm9sbG93aW5nJyB8ICdhbGwnXG59XG5cbmV4cG9ydCBjb25zdCBkZWxldGVSZWN1cnJpbmdFdmVudCA9ICh7XG4gIHRhcmdldEV2ZW50LFxuICBjdXJyZW50RXZlbnRzLFxuICBzY29wZSxcbn06IERlbGV0ZVJlY3VycmluZ0V2ZW50UHJvcHMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuICBjb25zdCB1cGRhdGVkRXZlbnRzID0gWy4uLmN1cnJlbnRFdmVudHNdXG5cbiAgLy8gRmluZCB0aGUgYmFzZSByZWN1cnJpbmcgZXZlbnRcbiAgY29uc3QgYmFzZUV2ZW50SW5kZXggPSB1cGRhdGVkRXZlbnRzLmZpbmRJbmRleCgoZSkgPT4ge1xuICAgIGNvbnN0IHBhcmVudFVpZCA9IGUudWlkIHx8IGAke2UuaWR9QGlsYW15LmNhbGVuZGFyYFxuICAgIHJldHVybiBwYXJlbnRVaWQgPT09IHRhcmdldEV2ZW50LnVpZCAmJiBlLnJydWxlICYmICFlLnJlY3VycmVuY2VJZFxuICB9KVxuXG4gIGlmIChiYXNlRXZlbnRJbmRleCA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Jhc2UgcmVjdXJyaW5nIGV2ZW50IG5vdCBmb3VuZCcpXG4gIH1cblxuICBjb25zdCBiYXNlRXZlbnQgPSB1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XVxuXG4gIHN3aXRjaCAoc2NvcGUpIHtcbiAgICBjYXNlICd0aGlzJzoge1xuICAgICAgLy8gXCJUaGlzIGV2ZW50IG9ubHlcIiAtIEFkZCBFWERBVEUgdG8gZXhjbHVkZSB0aGlzIG9jY3VycmVuY2VcbiAgICAgIGNvbnN0IHRhcmdldEV2ZW50U3RhcnRJU08gPSB0YXJnZXRFdmVudC5zdGFydC50b0lTT1N0cmluZygpXG4gICAgICBjb25zdCBleGlzdGluZ0V4ZGF0ZXMgPSBiYXNlRXZlbnQuZXhkYXRlcyB8fCBbXVxuICAgICAgY29uc3QgdXBkYXRlZEV4ZGF0ZXMgPSBbLi4uZXhpc3RpbmdFeGRhdGVzLCB0YXJnZXRFdmVudFN0YXJ0SVNPXVxuXG4gICAgICBjb25zdCB1cGRhdGVkQmFzZUV2ZW50ID0geyAuLi5iYXNlRXZlbnQsIGV4ZGF0ZXM6IHVwZGF0ZWRFeGRhdGVzIH1cbiAgICAgIHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdXBkYXRlZEJhc2VFdmVudFxuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBjYXNlICdmb2xsb3dpbmcnOiB7XG4gICAgICAvLyBcIlRoaXMgYW5kIGZvbGxvd2luZ1wiIC0gVGVybWluYXRlIHNlcmllcyB3aXRoIFVOVElMIGJlZm9yZSB0YXJnZXQgZGF0ZVxuXG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIHRlcm1pbmF0aW9uIGRhdGU6IGRheSBiZWZvcmUgdGFyZ2V0IHdpdGggZW5kIG9mIGRheSB0aW1lXG4gICAgICAvLyBUaGlzIGVuc3VyZXMgdGhlIGxhc3Qgb2NjdXJyZW5jZSBiZWZvcmUgdGFyZ2V0IGlzIGluY2x1ZGVkIGluIHRoZSB0ZXJtaW5hdGVkIHNlcmllc1xuICAgICAgY29uc3QgZGF5QmVmb3JlVGFyZ2V0ID0gdGFyZ2V0RXZlbnQuc3RhcnQuc3VidHJhY3QoMSwgJ2RheScpXG4gICAgICBjb25zdCB0ZXJtaW5hdGlvbkRhdGUgPSBkYXlCZWZvcmVUYXJnZXQuZW5kT2YoJ2RheScpLnRvRGF0ZSgpXG5cbiAgICAgIGNvbnN0IHRlcm1pbmF0ZWRFdmVudCA9IHtcbiAgICAgICAgLi4uYmFzZUV2ZW50LFxuICAgICAgICBycnVsZToge1xuICAgICAgICAgIC4uLmJhc2VFdmVudC5ycnVsZSxcbiAgICAgICAgICB1bnRpbDogdGVybWluYXRpb25EYXRlLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgICAgdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB0ZXJtaW5hdGVkRXZlbnRcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgY2FzZSAnYWxsJzoge1xuICAgICAgLy8gXCJBbGwgZXZlbnRzXCIgLSBSZW1vdmUgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzXG4gICAgICBjb25zdCBldmVudHNXaXRob3V0VGFyZ2V0U2VyaWVzID0gdXBkYXRlZEV2ZW50cy5maWx0ZXIoXG4gICAgICAgIChlKSA9PiBlLnVpZCAhPT0gdGFyZ2V0RXZlbnQudWlkXG4gICAgICApXG4gICAgICByZXR1cm4gZXZlbnRzV2l0aG91dFRhcmdldFNlcmllc1xuICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHNjb3BlOiAke3Njb3BlfS4gTXVzdCBiZSAndGhpcycsICdmb2xsb3dpbmcnLCBvciAnYWxsJ2BcbiAgICAgIClcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVkRXZlbnRzXG59XG4iLAogICAgImltcG9ydCB7XG4gIENhcmQsXG4gIENhcmRDb250ZW50LFxuICBDYXJkSGVhZGVyLFxuICBDYXJkVGl0bGUsXG4gIENoZWNrYm94LFxuICBEYXRlUGlja2VyLFxuICBJbnB1dCxcbiAgTGFiZWwsXG4gIFNlbGVjdCxcbiAgU2VsZWN0Q29udGVudCxcbiAgU2VsZWN0SXRlbSxcbiAgU2VsZWN0VHJpZ2dlcixcbiAgU2VsZWN0VmFsdWUsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aSdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IFJSdWxlT3B0aW9ucyB9IGZyb20gJ0AvbGliL3JlY3VycmVuY2UtaGFuZGxlci90eXBlcydcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFJSdWxlIH0gZnJvbSAncnJ1bGUnXG5pbXBvcnQgdHlwZSB7IFdlZWtkYXkgfSBmcm9tICdycnVsZSdcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuXG4vLyBOYXR1cmFsIGxhbmd1YWdlIGRlc2NyaXB0aW9uIGZ1bmN0aW9uIHVzaW5nIFJSdWxlJ3MgYnVpbHQtaW4gaGVscGVyIG1ldGhvZHNcbmZ1bmN0aW9uIGdldFJSdWxlRGVzY3JpcHRpb24oXG4gIHJydWxlT3B0aW9uczogUlJ1bGVPcHRpb25zIHwgbnVsbCxcbiAgdDogKGtleTogc3RyaW5nKSA9PiBzdHJpbmdcbik6IHN0cmluZyB7XG4gIGlmICghcnJ1bGVPcHRpb25zKSB7XG4gICAgcmV0dXJuIHQoJ2N1c3RvbVJlY3VycmVuY2UnKVxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBDcmVhdGUgUlJ1bGUgaW5zdGFuY2UgZGlyZWN0bHkgZnJvbSBvcHRpb25zXG4gICAgY29uc3QgcnVsZSA9IG5ldyBSUnVsZShycnVsZU9wdGlvbnMpXG5cbiAgICAvLyBVc2UgUlJ1bGUncyBidWlsdC1pbiBuYXR1cmFsIGxhbmd1YWdlIGNvbnZlcnNpb24gd2l0aCB0b1RleHQoKVxuICAgIGNvbnN0IG5hdHVyYWxUZXh0ID0gcnVsZS50b1RleHQoKVxuXG4gICAgLy8gSGFuZGxlIGNhc2VzIHdoZXJlIFJSdWxlIGNhbid0IGNvbnZlcnQgdG8gbmF0dXJhbCBsYW5ndWFnZVxuICAgIGlmIChcbiAgICAgICFuYXR1cmFsVGV4dCB8fFxuICAgICAgbmF0dXJhbFRleHQuaW5jbHVkZXMoJ1JSdWxlIGVycm9yJykgfHxcbiAgICAgIG5hdHVyYWxUZXh0LmluY2x1ZGVzKCdVbmFibGUgdG8gZnVsbHkgY29udmVydCcpIHx8XG4gICAgICBuYXR1cmFsVGV4dC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdlcnJvcicpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdCgnY3VzdG9tUmVjdXJyZW5jZScpXG4gICAgfVxuXG4gICAgLy8gQ2FwaXRhbGl6ZSBmaXJzdCBsZXR0ZXIgZm9yIGNvbnNpc3RlbnQgZm9ybWF0dGluZ1xuICAgIHJldHVybiBuYXR1cmFsVGV4dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG5hdHVyYWxUZXh0LnNsaWNlKDEpXG4gIH0gY2F0Y2gge1xuICAgIC8vIElmIHBhcnNpbmcgZmFpbHMsIHJldHVybiBmYWxsYmFja1xuICAgIHJldHVybiB0KCdjdXN0b21SZWN1cnJlbmNlJylcbiAgfVxufVxuXG5pbnRlcmZhY2UgUmVjdXJyZW5jZUVkaXRvclByb3BzIHtcbiAgdmFsdWU/OiBSUnVsZU9wdGlvbnMgfCBudWxsXG4gIG9uQ2hhbmdlOiAocnJ1bGVPcHRpb25zOiBSUnVsZU9wdGlvbnMgfCBudWxsKSA9PiB2b2lkXG59XG5cbmV4cG9ydCBjb25zdCBSZWN1cnJlbmNlRWRpdG9yOiBSZWFjdC5GQzxSZWN1cnJlbmNlRWRpdG9yUHJvcHM+ID0gKHtcbiAgdmFsdWUsXG4gIG9uQ2hhbmdlLFxufSkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG4gIGNvbnN0IFtzaG93UmVjdXJyZW5jZSwgc2V0U2hvd1JlY3VycmVuY2VdID0gdXNlU3RhdGUoISF2YWx1ZSlcblxuICAvLyBDcmVhdGUgV0VFS19EQVlTIGFycmF5IHdpdGggdHJhbnNsYXRpb25zXG4gIGNvbnN0IFdFRUtfREFZUyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gW1xuICAgICAgeyB2YWx1ZTogUlJ1bGUuU1UsIGxhYmVsOiB0KCdzdW5kYXknKSwgc2hvcnQ6IHQoJ3N1bicpIH0sXG4gICAgICB7IHZhbHVlOiBSUnVsZS5NTywgbGFiZWw6IHQoJ21vbmRheScpLCBzaG9ydDogdCgnbW9uJykgfSxcbiAgICAgIHsgdmFsdWU6IFJSdWxlLlRVLCBsYWJlbDogdCgndHVlc2RheScpLCBzaG9ydDogdCgndHVlJykgfSxcbiAgICAgIHsgdmFsdWU6IFJSdWxlLldFLCBsYWJlbDogdCgnd2VkbmVzZGF5JyksIHNob3J0OiB0KCd3ZWQnKSB9LFxuICAgICAgeyB2YWx1ZTogUlJ1bGUuVEgsIGxhYmVsOiB0KCd0aHVyc2RheScpLCBzaG9ydDogdCgndGh1JykgfSxcbiAgICAgIHsgdmFsdWU6IFJSdWxlLkZSLCBsYWJlbDogdCgnZnJpZGF5JyksIHNob3J0OiB0KCdmcmknKSB9LFxuICAgICAgeyB2YWx1ZTogUlJ1bGUuU0EsIGxhYmVsOiB0KCdzYXR1cmRheScpLCBzaG9ydDogdCgnc2F0JykgfSxcbiAgICBdLFxuICAgIFt0XVxuICApXG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgUlJ1bGUgZnJlcXVlbmN5IHRvIHN0cmluZ1xuICBjb25zdCBnZXRGcmVxdWVuY3lTdHJpbmcgPSAoZnJlcTogUlJ1bGVPcHRpb25zWydmcmVxJ10pOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IGZyZXFNYXA6IFJlY29yZDxudW1iZXIsIHN0cmluZz4gPSB7XG4gICAgICBbUlJ1bGUuREFJTFldOiAnREFJTFknLFxuICAgICAgW1JSdWxlLldFRUtMWV06ICdXRUVLTFknLFxuICAgICAgW1JSdWxlLk1PTlRITFldOiAnTU9OVEhMWScsXG4gICAgICBbUlJ1bGUuWUVBUkxZXTogJ1lFQVJMWScsXG4gICAgfVxuICAgIHJldHVybiBmcmVxTWFwW2ZyZXFdIHx8ICdEQUlMWSdcbiAgfVxuXG4gIC8vIFdvcmsgd2l0aCBjb21wbGV0ZSBSUnVsZU9wdGlvbnMgLSBkdHN0YXJ0IGNvbWVzIGZyb20gcGFyZW50IEV2ZW50Rm9ybVxuICBjb25zdCBbcnJ1bGVPcHRpb25zLCBzZXRSUnVsZU9wdGlvbnNdID0gdXNlU3RhdGU8UlJ1bGVPcHRpb25zIHwgbnVsbD4oXG4gICAgKCkgPT4gdmFsdWUgfHwgbnVsbFxuICApXG5cbiAgLy8gU3luYyBzdGF0ZSB3aGVuIHZhbHVlIHByb3AgY2hhbmdlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFNob3dSZWN1cnJlbmNlKCEhdmFsdWUpXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBzZXRSUnVsZU9wdGlvbnModmFsdWUpXG4gICAgfVxuICB9LCBbdmFsdWVdKVxuXG4gIGNvbnN0IHVwZGF0ZVJSdWxlID0gKHVwZGF0ZXM6IFBhcnRpYWw8UlJ1bGVPcHRpb25zPikgPT4ge1xuICAgIGlmICghcnJ1bGVPcHRpb25zKSB7XG4gICAgICByZXR1cm4gLy8gQ2FuJ3QgdXBkYXRlIGlmIG5vIGJhc2Ugb3B0aW9ucyBleGlzdFxuICAgIH1cblxuICAgIGNvbnN0IG5ld09wdGlvbnM6IFJSdWxlT3B0aW9ucyA9IHsgLi4ucnJ1bGVPcHRpb25zLCAuLi51cGRhdGVzIH1cbiAgICBzZXRSUnVsZU9wdGlvbnMobmV3T3B0aW9ucylcblxuICAgIGlmIChzaG93UmVjdXJyZW5jZSkge1xuICAgICAgb25DaGFuZ2UobmV3T3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgb25DaGFuZ2UobnVsbClcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVSZWN1cnJlbmNlVG9nZ2xlID0gKGNoZWNrZWQ6IGJvb2xlYW4pID0+IHtcbiAgICBzZXRTaG93UmVjdXJyZW5jZShjaGVja2VkKVxuICAgIGlmIChjaGVja2VkKSB7XG4gICAgICBpZiAocnJ1bGVPcHRpb25zKSB7XG4gICAgICAgIG9uQ2hhbmdlKHJydWxlT3B0aW9ucylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENyZWF0ZSBkZWZhdWx0IFJSdWxlIHdoZW4gdG9nZ2xpbmcgb24gZm9yIHRoZSBmaXJzdCB0aW1lXG4gICAgICAgIC8vIE5vdGU6IGR0c3RhcnQgd2lsbCBiZSBzZXQgYnkgdGhlIHBhcmVudCBFdmVudEZvcm1cbiAgICAgICAgY29uc3QgZGVmYXVsdFJSdWxlOiBQYXJ0aWFsPFJSdWxlT3B0aW9ucz4gPSB7XG4gICAgICAgICAgZnJlcTogUlJ1bGUuREFJTFksXG4gICAgICAgICAgaW50ZXJ2YWw6IDEsXG4gICAgICAgIH1cbiAgICAgICAgc2V0UlJ1bGVPcHRpb25zKGRlZmF1bHRSUnVsZSBhcyBSUnVsZU9wdGlvbnMpXG4gICAgICAgIG9uQ2hhbmdlKGRlZmF1bHRSUnVsZSBhcyBSUnVsZU9wdGlvbnMpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uQ2hhbmdlKG51bGwpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRnJlcXVlbmN5Q2hhbmdlID0gKGZyZXF1ZW5jeTogc3RyaW5nKSA9PiB7XG4gICAgLy8gQ29udmVydCBzdHJpbmcgdG8gUlJ1bGUgZnJlcXVlbmN5IGNvbnN0YW50XG4gICAgY29uc3QgZnJlcU1hcDogUmVjb3JkPHN0cmluZywgUlJ1bGVPcHRpb25zWydmcmVxJ10+ID0ge1xuICAgICAgREFJTFk6IFJSdWxlLkRBSUxZLFxuICAgICAgV0VFS0xZOiBSUnVsZS5XRUVLTFksXG4gICAgICBNT05USExZOiBSUnVsZS5NT05USExZLFxuICAgICAgWUVBUkxZOiBSUnVsZS5ZRUFSTFksXG4gICAgfVxuICAgIHVwZGF0ZVJSdWxlKHsgZnJlcTogZnJlcU1hcFtmcmVxdWVuY3ldIHx8IFJSdWxlLkRBSUxZIH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVJbnRlcnZhbENoYW5nZSA9IChlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgIGNvbnN0IGludGVydmFsID0gTWF0aC5tYXgoMSwgTnVtYmVyLnBhcnNlSW50KGUudGFyZ2V0LnZhbHVlKSB8fCAxKVxuICAgIHVwZGF0ZVJSdWxlKHsgaW50ZXJ2YWwgfSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUVuZFR5cGVDaGFuZ2UgPSAoZW5kVHlwZTogJ25ldmVyJyB8ICdjb3VudCcgfCAndW50aWwnKSA9PiB7XG4gICAgY29uc3QgdXBkYXRlczogUGFydGlhbDxSUnVsZU9wdGlvbnM+ID0ge31cblxuICAgIGlmIChlbmRUeXBlID09PSAnbmV2ZXInKSB7XG4gICAgICAvLyBSZW1vdmUgY291bnQgYW5kIHVudGlsXG4gICAgICB1cGRhdGVzLmNvdW50ID0gdW5kZWZpbmVkXG4gICAgICB1cGRhdGVzLnVudGlsID0gdW5kZWZpbmVkXG4gICAgfSBlbHNlIGlmIChlbmRUeXBlID09PSAnY291bnQnKSB7XG4gICAgICAvLyBTZXQgZGVmYXVsdCBjb3VudCBpZiBub25lIGV4aXN0cywgcmVtb3ZlIHVudGlsXG4gICAgICB1cGRhdGVzLmNvdW50ID0gcnJ1bGVPcHRpb25zPy5jb3VudCB8fCAxXG4gICAgICB1cGRhdGVzLnVudGlsID0gdW5kZWZpbmVkXG4gICAgfSBlbHNlIGlmIChlbmRUeXBlID09PSAndW50aWwnKSB7XG4gICAgICAvLyBTZXQgZGVmYXVsdCB1bnRpbCBkYXRlIGlmIG5vbmUgZXhpc3RzLCByZW1vdmUgY291bnRcbiAgICAgIHVwZGF0ZXMudW50aWwgPVxuICAgICAgICBycnVsZU9wdGlvbnM/LnVudGlsIHx8IGRheWpzKCkuYWRkKDEsICdtb250aCcpLmVuZE9mKCdkYXknKS50b0RhdGUoKVxuICAgICAgdXBkYXRlcy5jb3VudCA9IHVuZGVmaW5lZFxuICAgIH1cblxuICAgIHVwZGF0ZVJSdWxlKHVwZGF0ZXMpXG4gIH1cblxuICBjb25zdCBoYW5kbGVDb3VudENoYW5nZSA9IChlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgIGNvbnN0IGNvdW50ID0gTWF0aC5tYXgoMSwgTnVtYmVyLnBhcnNlSW50KGUudGFyZ2V0LnZhbHVlKSB8fCAxKVxuICAgIHVwZGF0ZVJSdWxlKHsgY291bnQgfSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUVuZERhdGVDaGFuZ2UgPSAoZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4ge1xuICAgIGNvbnN0IHVudGlsID0gZGF0ZSA/IGRheWpzKGRhdGUpLmVuZE9mKCdkYXknKS50b0RhdGUoKSA6IHVuZGVmaW5lZFxuICAgIHVwZGF0ZVJSdWxlKHsgdW50aWwgfSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURheVRvZ2dsZSA9IChkYXlJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3Qgd2Vla2RheU1hcCA9IFtcbiAgICAgIFJSdWxlLlNVLFxuICAgICAgUlJ1bGUuTU8sXG4gICAgICBSUnVsZS5UVSxcbiAgICAgIFJSdWxlLldFLFxuICAgICAgUlJ1bGUuVEgsXG4gICAgICBSUnVsZS5GUixcbiAgICAgIFJSdWxlLlNBLFxuICAgIF1cbiAgICBjb25zdCBjdXJyZW50V2Vla2RheXMgPSAocnJ1bGVPcHRpb25zPy5ieXdlZWtkYXkgYXMgV2Vla2RheVtdKSB8fCBbXVxuICAgIGNvbnN0IHRhcmdldFdlZWtkYXkgPSB3ZWVrZGF5TWFwW2RheUluZGV4XVxuXG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IGN1cnJlbnRXZWVrZGF5cy5pbmNsdWRlcyh0YXJnZXRXZWVrZGF5KVxuICAgIGxldCBuZXdXZWVrZGF5czogV2Vla2RheVtdXG5cbiAgICBpZiAoaXNTZWxlY3RlZCkge1xuICAgICAgbmV3V2Vla2RheXMgPSBjdXJyZW50V2Vla2RheXMuZmlsdGVyKChkYXkpID0+IGRheSAhPT0gdGFyZ2V0V2Vla2RheSlcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3V2Vla2RheXMgPSBbLi4uY3VycmVudFdlZWtkYXlzLCB0YXJnZXRXZWVrZGF5XVxuICAgIH1cblxuICAgIHVwZGF0ZVJSdWxlKHtcbiAgICAgIGJ5d2Vla2RheTogbmV3V2Vla2RheXMubGVuZ3RoID4gMCA/IG5ld1dlZWtkYXlzIDogdW5kZWZpbmVkLFxuICAgIH0pXG4gIH1cblxuICAvLyBIZWxwZXIgdG8gZGV0ZXJtaW5lIGVuZCB0eXBlIGZyb20gY3VycmVudCBvcHRpb25zXG4gIGNvbnN0IGdldEVuZFR5cGUgPSAoKTogJ25ldmVyJyB8ICdjb3VudCcgfCAndW50aWwnID0+IHtcbiAgICBpZiAocnJ1bGVPcHRpb25zPy51bnRpbCkge1xuICAgICAgcmV0dXJuICd1bnRpbCdcbiAgICB9XG4gICAgaWYgKHJydWxlT3B0aW9ucz8uY291bnQpIHtcbiAgICAgIHJldHVybiAnY291bnQnXG4gICAgfVxuICAgIHJldHVybiAnbmV2ZXInXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDYXJkIGRhdGEtdGVzdGlkPVwicmVjdXJyZW5jZS1lZGl0b3JcIj5cbiAgICAgIDxDYXJkSGVhZGVyIGNsYXNzTmFtZT1cInBiLTNcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cbiAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgIGlkPVwicmVjdXJyaW5nXCJcbiAgICAgICAgICAgIGNoZWNrZWQ9e3Nob3dSZWN1cnJlbmNlfVxuICAgICAgICAgICAgb25DaGVja2VkQ2hhbmdlPXtoYW5kbGVSZWN1cnJlbmNlVG9nZ2xlfVxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJ0b2dnbGUtcmVjdXJyZW5jZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8Q2FyZFRpdGxlIGNsYXNzTmFtZT1cInRleHQtc21cIj57dCgncmVwZWF0Jyl9PC9DYXJkVGl0bGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7c2hvd1JlY3VycmVuY2UgJiYgdmFsdWUgJiYgKFxuICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICB7Z2V0UlJ1bGVEZXNjcmlwdGlvbih2YWx1ZSwgdCl9XG4gICAgICAgICAgPC9wPlxuICAgICAgICApfVxuICAgICAgPC9DYXJkSGVhZGVyPlxuXG4gICAgICB7c2hvd1JlY3VycmVuY2UgJiYgKFxuICAgICAgICA8Q2FyZENvbnRlbnQgY2xhc3NOYW1lPVwicHQtMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS00XCI+XG4gICAgICAgICAgICB7LyogRnJlcXVlbmN5IFNlbGVjdGlvbiAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtNFwiPlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwiZnJlcXVlbmN5XCIgY2xhc3NOYW1lPVwidGV4dC14c1wiPlxuICAgICAgICAgICAgICAgICAge3QoJ3JlcGVhdHMnKX1cbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtnZXRGcmVxdWVuY3lTdHJpbmcocnJ1bGVPcHRpb25zPy5mcmVxID8/IFJSdWxlLkRBSUxZKX1cbiAgICAgICAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9e2hhbmRsZUZyZXF1ZW5jeUNoYW5nZX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8U2VsZWN0VHJpZ2dlclxuICAgICAgICAgICAgICAgICAgICBpZD1cImZyZXF1ZW5jeVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtOFwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZnJlcXVlbmN5LXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxTZWxlY3RWYWx1ZSAvPlxuICAgICAgICAgICAgICAgICAgPC9TZWxlY3RUcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgPFNlbGVjdENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxTZWxlY3RJdGVtIHZhbHVlPVwiREFJTFlcIj57dCgnZGFpbHknKX08L1NlbGVjdEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIDxTZWxlY3RJdGVtIHZhbHVlPVwiV0VFS0xZXCI+e3QoJ3dlZWtseScpfTwvU2VsZWN0SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgPFNlbGVjdEl0ZW0gdmFsdWU9XCJNT05USExZXCI+e3QoJ21vbnRobHknKX08L1NlbGVjdEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIDxTZWxlY3RJdGVtIHZhbHVlPVwiWUVBUkxZXCI+e3QoJ3llYXJseScpfTwvU2VsZWN0SXRlbT5cbiAgICAgICAgICAgICAgICAgIDwvU2VsZWN0Q29udGVudD5cbiAgICAgICAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8TGFiZWwgaHRtbEZvcj1cImludGVydmFsXCIgY2xhc3NOYW1lPVwidGV4dC14c1wiPlxuICAgICAgICAgICAgICAgICAge3QoJ2V2ZXJ5Jyl9XG4gICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgIGlkPVwiaW50ZXJ2YWxcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtycnVsZU9wdGlvbnM/LmludGVydmFsIHx8IDF9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlSW50ZXJ2YWxDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLThcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBXZWVrbHkgRGF5IFNlbGVjdGlvbiAqL31cbiAgICAgICAgICAgIHtycnVsZU9wdGlvbnM/LmZyZXEgPT09IFJSdWxlLldFRUtMWSAmJiAoXG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIj57dCgncmVwZWF0T24nKX08L0xhYmVsPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgZ2FwLTEgbXQtMVwiPlxuICAgICAgICAgICAgICAgICAge1dFRUtfREFZUy5tYXAoKGRheSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl3ZWVrZGF5QXJyYXkgPSBBcnJheS5pc0FycmF5KFxuICAgICAgICAgICAgICAgICAgICAgIHJydWxlT3B0aW9ucz8uYnl3ZWVrZGF5XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICA/IHJydWxlT3B0aW9ucy5ieXdlZWtkYXlcbiAgICAgICAgICAgICAgICAgICAgICA6IHJydWxlT3B0aW9ucz8uYnl3ZWVrZGF5XG4gICAgICAgICAgICAgICAgICAgICAgICA/IFtycnVsZU9wdGlvbnMuYnl3ZWVrZGF5XVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBbXVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gYnl3ZWVrZGF5QXJyYXkuaW5jbHVkZXMoZGF5LnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17YGRheS0ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTFcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17YGRheS0ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2lzU2VsZWN0ZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17KCkgPT4gaGFuZGxlRGF5VG9nZ2xlKGluZGV4KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbEZvcj17YGRheS0ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQteHMgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7ZGF5LnNob3J0fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgey8qIEVuZCBDb25kaXRpb24gKi99XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiPnt0KCdlbmRzJyl9PC9MYWJlbD5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTIgbXQtMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG4gICAgICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJuZXZlclwiXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2dldEVuZFR5cGUoKSA9PT0gJ25ldmVyJ31cbiAgICAgICAgICAgICAgICAgICAgb25DaGVja2VkQ2hhbmdlPXsoKSA9PiBoYW5kbGVFbmRUeXBlQ2hhbmdlKCduZXZlcicpfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwibmV2ZXJcIiBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+XG4gICAgICAgICAgICAgICAgICAgIHt0KCduZXZlcicpfVxuICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG4gICAgICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJhZnRlclwiXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2dldEVuZFR5cGUoKSA9PT0gJ2NvdW50J31cbiAgICAgICAgICAgICAgICAgICAgb25DaGVja2VkQ2hhbmdlPXsoKSA9PiBoYW5kbGVFbmRUeXBlQ2hhbmdlKCdjb3VudCcpfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwiYWZ0ZXJcIiBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+XG4gICAgICAgICAgICAgICAgICAgIHt0KCdhZnRlcicpfVxuICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgIHtnZXRFbmRUeXBlKCkgPT09ICdjb3VudCcgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cnJ1bGVPcHRpb25zPy5jb3VudCB8fCAxfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDb3VudENoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTYgdy0xNiB0ZXh0LXhzXCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImNvdW50LWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+e3QoJ29jY3VycmVuY2VzJyl9PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cbiAgICAgICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICBpZD1cIm9uXCJcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17Z2V0RW5kVHlwZSgpID09PSAndW50aWwnfVxuICAgICAgICAgICAgICAgICAgICBvbkNoZWNrZWRDaGFuZ2U9eygpID0+IGhhbmRsZUVuZFR5cGVDaGFuZ2UoJ3VudGlsJyl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPExhYmVsIGh0bWxGb3I9XCJvblwiIGNsYXNzTmFtZT1cInRleHQteHNcIj5cbiAgICAgICAgICAgICAgICAgICAge3QoJ29uJyl9XG4gICAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAge2dldEVuZFR5cGUoKSA9PT0gJ3VudGlsJyAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxEYXRlUGlja2VyXG4gICAgICAgICAgICAgICAgICAgICAgZGF0ZT17cnJ1bGVPcHRpb25zPy51bnRpbH1cbiAgICAgICAgICAgICAgICAgICAgICBzZXREYXRlPXtoYW5kbGVFbmREYXRlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtNlwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L0NhcmRDb250ZW50PlxuICAgICAgKX1cbiAgICA8L0NhcmQ+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHtcbiAgRGlhbG9nLFxuICBEaWFsb2dDb250ZW50LFxuICBEaWFsb2dEZXNjcmlwdGlvbixcbiAgRGlhbG9nRm9vdGVyLFxuICBEaWFsb2dIZWFkZXIsXG4gIERpYWxvZ1RpdGxlLFxuICBCdXR0b24sXG59IGZyb20gJ0AvY29tcG9uZW50cy91aSdcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRTY29wZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuXG5pbnRlcmZhY2UgUmVjdXJyZW5jZUVkaXREaWFsb2dQcm9wcyB7XG4gIGlzT3BlbjogYm9vbGVhblxuICBvbkNsb3NlOiAoKSA9PiB2b2lkXG4gIG9uQ29uZmlybTogKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB2b2lkXG4gIG9wZXJhdGlvblR5cGU6ICdlZGl0JyB8ICdkZWxldGUnXG4gIGV2ZW50VGl0bGU6IHN0cmluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVjdXJyZW5jZUVkaXREaWFsb2coe1xuICBpc09wZW4sXG4gIG9uQ2xvc2UsXG4gIG9uQ29uZmlybSxcbiAgb3BlcmF0aW9uVHlwZSxcbiAgZXZlbnRUaXRsZSxcbn06IFJlY3VycmVuY2VFZGl0RGlhbG9nUHJvcHMpIHtcbiAgY29uc3QgeyB0IH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIGNvbnN0IGhhbmRsZVNjb3BlU2VsZWN0ID0gKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG4gICAgb25Db25maXJtKHNjb3BlKVxuICAgIG9uQ2xvc2UoKVxuICB9XG5cbiAgY29uc3QgaXNFZGl0ID0gb3BlcmF0aW9uVHlwZSA9PT0gJ2VkaXQnXG5cbiAgcmV0dXJuIChcbiAgICA8RGlhbG9nIG9wZW49e2lzT3Blbn0gb25PcGVuQ2hhbmdlPXtvbkNsb3NlfT5cbiAgICAgIDxEaWFsb2dDb250ZW50IGNsYXNzTmFtZT1cIm1heC13LW1kXCI+XG4gICAgICAgIDxEaWFsb2dIZWFkZXI+XG4gICAgICAgICAgPERpYWxvZ1RpdGxlPlxuICAgICAgICAgICAge2lzRWRpdCA/IHQoJ2VkaXRSZWN1cnJpbmdFdmVudCcpIDogdCgnZGVsZXRlUmVjdXJyaW5nRXZlbnQnKX1cbiAgICAgICAgICA8L0RpYWxvZ1RpdGxlPlxuICAgICAgICAgIDxEaWFsb2dEZXNjcmlwdGlvbj5cbiAgICAgICAgICAgIFwie2V2ZW50VGl0bGV9XCJ7JyAnfVxuICAgICAgICAgICAge2lzRWRpdFxuICAgICAgICAgICAgICA/IHQoJ2VkaXRSZWN1cnJpbmdFdmVudFF1ZXN0aW9uJylcbiAgICAgICAgICAgICAgOiB0KCdkZWxldGVSZWN1cnJpbmdFdmVudFF1ZXN0aW9uJyl9XG4gICAgICAgICAgPC9EaWFsb2dEZXNjcmlwdGlvbj5cbiAgICAgICAgPC9EaWFsb2dIZWFkZXI+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTNcIj5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZVwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwganVzdGlmeS1zdGFydCBoLWF1dG8gcC00XCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVNjb3BlU2VsZWN0KCd0aGlzJyl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWxlZnRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPnt0KCd0aGlzRXZlbnQnKX08L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuICAgICAgICAgICAgICAgIHtpc0VkaXQgPyB0KCdvbmx5Q2hhbmdlVGhpcycpIDogdCgnb25seURlbGV0ZVRoaXMnKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L0J1dHRvbj5cblxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBqdXN0aWZ5LXN0YXJ0IGgtYXV0byBwLTRcIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2NvcGVTZWxlY3QoJ2ZvbGxvd2luZycpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZWZ0XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57dCgndGhpc0FuZEZvbGxvd2luZ0V2ZW50cycpfTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICAgICAge2lzRWRpdCA/IHQoJ2NoYW5nZVRoaXNBbmRGdXR1cmUnKSA6IHQoJ2RlbGV0ZVRoaXNBbmRGdXR1cmUnKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L0J1dHRvbj5cblxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBqdXN0aWZ5LXN0YXJ0IGgtYXV0byBwLTRcIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2NvcGVTZWxlY3QoJ2FsbCcpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZWZ0XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57dCgnYWxsRXZlbnRzJyl9PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cbiAgICAgICAgICAgICAgICB7aXNFZGl0ID8gdCgnY2hhbmdlRW50aXJlU2VyaWVzJykgOiB0KCdkZWxldGVFbnRpcmVTZXJpZXMnKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPERpYWxvZ0Zvb3Rlcj5cbiAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJvdXRsaW5lXCIgb25DbGljaz17b25DbG9zZX0+XG4gICAgICAgICAgICB7dCgnY2FuY2VsJyl9XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvRGlhbG9nRm9vdGVyPlxuICAgICAgPC9EaWFsb2dDb250ZW50PlxuICAgIDwvRGlhbG9nPlxuICApXG59XG4iLAogICAgImltcG9ydCB7IHVzZVN0YXRlLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0U2NvcGUgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMob25Db21wbGV0ZT86ICgpID0+IHZvaWQpIHtcbiAgY29uc3QgeyB1cGRhdGVSZWN1cnJpbmdFdmVudCwgZGVsZXRlUmVjdXJyaW5nRXZlbnQgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgY29uc3QgW2RpYWxvZ1N0YXRlLCBzZXREaWFsb2dTdGF0ZV0gPSB1c2VTdGF0ZTx7XG4gICAgaXNPcGVuOiBib29sZWFuXG4gICAgb3BlcmF0aW9uVHlwZTogJ2VkaXQnIHwgJ2RlbGV0ZSdcbiAgICBldmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcbiAgICB1cGRhdGVzPzogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuICAgIG9uQ29uZmlybT86IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4gdm9pZFxuICB9Pih7XG4gICAgaXNPcGVuOiBmYWxzZSxcbiAgICBvcGVyYXRpb25UeXBlOiAnZWRpdCcsXG4gICAgZXZlbnQ6IG51bGwsXG4gIH0pXG5cbiAgY29uc3Qgb3BlbkVkaXREaWFsb2cgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IENhbGVuZGFyRXZlbnQsIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHtcbiAgICAgIHNldERpYWxvZ1N0YXRlKHtcbiAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICBvcGVyYXRpb25UeXBlOiAnZWRpdCcsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICB1cGRhdGVzLFxuICAgICAgICBvbkNvbmZpcm06IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuICAgICAgICAgIHVwZGF0ZVJlY3VycmluZ0V2ZW50KGV2ZW50LCB1cGRhdGVzLCB7XG4gICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgIGV2ZW50RGF0ZTogZXZlbnQuc3RhcnQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbdXBkYXRlUmVjdXJyaW5nRXZlbnRdXG4gIClcblxuICBjb25zdCBvcGVuRGVsZXRlRGlhbG9nID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG4gICAgICBzZXREaWFsb2dTdGF0ZSh7XG4gICAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgICAgb3BlcmF0aW9uVHlwZTogJ2RlbGV0ZScsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICBvbkNvbmZpcm06IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuICAgICAgICAgIGRlbGV0ZVJlY3VycmluZ0V2ZW50KGV2ZW50LCB7XG4gICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgIGV2ZW50RGF0ZTogZXZlbnQuc3RhcnQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbZGVsZXRlUmVjdXJyaW5nRXZlbnRdXG4gIClcblxuICBjb25zdCBjbG9zZURpYWxvZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXREaWFsb2dTdGF0ZSh7XG4gICAgICBpc09wZW46IGZhbHNlLFxuICAgICAgb3BlcmF0aW9uVHlwZTogJ2VkaXQnLFxuICAgICAgZXZlbnQ6IG51bGwsXG4gICAgfSlcbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlQ29uZmlybSA9IHVzZUNhbGxiYWNrKFxuICAgIChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuICAgICAgaWYgKGRpYWxvZ1N0YXRlLm9uQ29uZmlybSkge1xuICAgICAgICBkaWFsb2dTdGF0ZS5vbkNvbmZpcm0oc2NvcGUpXG4gICAgICB9XG4gICAgICBjbG9zZURpYWxvZygpXG4gICAgICAvLyBDYWxsIG9uQ29tcGxldGUgdG8gY2xvc2UgdGhlIHBhcmVudCBmb3JtXG4gICAgICBvbkNvbXBsZXRlPy4oKVxuICAgIH0sXG4gICAgW2RpYWxvZ1N0YXRlLCBjbG9zZURpYWxvZywgb25Db21wbGV0ZV1cbiAgKVxuXG4gIHJldHVybiB7XG4gICAgZGlhbG9nU3RhdGUsXG4gICAgb3BlbkVkaXREaWFsb2csXG4gICAgb3BlbkRlbGV0ZURpYWxvZyxcbiAgICBjbG9zZURpYWxvZyxcbiAgICBoYW5kbGVDb25maXJtLFxuICB9XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuXG4vKipcbiAqIEV4cG9ydCBjYWxlbmRhciBldmVudHMgdG8gaUNhbGVuZGFyICguaWNhbCkgZm9ybWF0XG4gKiBGdWxseSBSRkMgNTU0NSBjb21wbGlhbnQgaUNhbGVuZGFyIGdlbmVyYXRpb25cbiAqL1xuXG4vKipcbiAqIEVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gaUNhbGVuZGFyIHRleHQgZmllbGRzXG4gKi9cbmNvbnN0IGVzY2FwZUlDYWxUZXh0ID0gKHRleHQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIHJldHVybiB0ZXh0XG4gICAgLnJlcGxhY2VBbGwoJ1xcXFwnLCAnXFxcXFxcXFwnKSAvLyBFc2NhcGUgYmFja3NsYXNoZXNcbiAgICAucmVwbGFjZUFsbCgnOycsICdcXFxcOycpIC8vIEVzY2FwZSBzZW1pY29sb25zXG4gICAgLnJlcGxhY2VBbGwoJywnLCAnXFxcXCwnKSAvLyBFc2NhcGUgY29tbWFzXG4gICAgLnJlcGxhY2VBbGwoJ1xcbicsICdcXFxcbicpIC8vIEVzY2FwZSBuZXdsaW5lc1xuICAgIC5yZXBsYWNlQWxsKCdcXHInLCAnJykgLy8gUmVtb3ZlIGNhcnJpYWdlIHJldHVybnNcbn1cblxuLyoqXG4gKiBGb3JtYXQgZGF0ZSBmb3IgaUNhbGVuZGFyIGZvcm1hdCAoWVlZWU1NRERUSEhNTVNTWiBmb3IgVVRDKVxuICovXG5jb25zdCBmb3JtYXRJQ2FsRGF0ZSA9IChkYXRlOiBkYXlqcy5EYXlqcywgYWxsRGF5ID0gZmFsc2UpOiBzdHJpbmcgPT4ge1xuICBpZiAoYWxsRGF5KSB7XG4gICAgcmV0dXJuIGRhdGUuZm9ybWF0KCdZWVlZTU1ERCcpXG4gIH1cbiAgcmV0dXJuIGRhdGUudXRjKCkuZm9ybWF0KCdZWVlZTU1ERFtUXUhIbW1zc1taXScpXG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSB1bmlxdWUgVUlEIGZvciBhbiBldmVudCBpZiBub3QgYWxyZWFkeSBwcmVzZW50XG4gKi9cbmNvbnN0IGdlbmVyYXRlVUlEID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogc3RyaW5nID0+IHtcbiAgaWYgKGV2ZW50LnVpZCkge1xuICAgIHJldHVybiBldmVudC51aWRcbiAgfVxuICByZXR1cm4gYCR7ZXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYFxufVxuXG4vKipcbiAqIENvbnZlcnQgUlJ1bGVPcHRpb25zIHRvIGlDYWxlbmRhciBSUlVMRSBzdHJpbmdcbiAqL1xuY29uc3QgZm9ybWF0UlJ1bGUgPSAocnJ1bGVPcHRpb25zOiB1bmtub3duKTogc3RyaW5nID0+IHtcbiAgdHJ5IHtcbiAgICAvLyBDcmVhdGUgUlJ1bGUgaW5zdGFuY2Ugd2l0aCBhcHByb3ByaWF0ZSB0eXBlIGNhc3RpbmdcbiAgICBjb25zdCBydWxlID0gbmV3IFJSdWxlKFxuICAgICAgcnJ1bGVPcHRpb25zIGFzIENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgUlJ1bGU+WzBdXG4gICAgKVxuICAgIGNvbnN0IHJydWxlU3RyaW5nID0gcnVsZS50b1N0cmluZygpXG4gICAgLy8gRXh0cmFjdCBqdXN0IHRoZSBSUlVMRSBwYXJ0IChyZW1vdmUgRFRTVEFSVCBpZiBwcmVzZW50KVxuICAgIGNvbnN0IHJydWxlUGFydCA9IHJydWxlU3RyaW5nXG4gICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAuZmluZCgobGluZSkgPT4gbGluZS5zdGFydHNXaXRoKCdSUlVMRTonKSlcbiAgICByZXR1cm4gcnJ1bGVQYXJ0IHx8ICcnXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAnJ1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydCBhIHNpbmdsZSBDYWxlbmRhckV2ZW50IHRvIGlDYWxlbmRhciBWRVZFTlQgc3RyaW5nXG4gKi9cbmNvbnN0IGV2ZW50VG9JQ2FsRXZlbnQgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXVxuXG4gIGxpbmVzLnB1c2goJ0JFR0lOOlZFVkVOVCcpXG5cbiAgLy8gVUlEIChyZXF1aXJlZClcbiAgbGluZXMucHVzaChgVUlEOiR7Z2VuZXJhdGVVSUQoZXZlbnQpfWApXG5cbiAgLy8gRFRTVEFSVCAocmVxdWlyZWQpXG4gIGNvbnN0IGR0c3RhcnQgPSBmb3JtYXRJQ2FsRGF0ZShldmVudC5zdGFydCwgZXZlbnQuYWxsRGF5KVxuICBpZiAoZXZlbnQuYWxsRGF5KSB7XG4gICAgbGluZXMucHVzaChgRFRTVEFSVDtWQUxVRT1EQVRFOiR7ZHRzdGFydH1gKVxuICB9IGVsc2Uge1xuICAgIGxpbmVzLnB1c2goYERUU1RBUlQ6JHtkdHN0YXJ0fWApXG4gIH1cblxuICAvLyBEVEVORCAocmVxdWlyZWQgZm9yIGV2ZW50cyB3aXRoIGR1cmF0aW9uKVxuICBjb25zdCBkdGVuZCA9IGZvcm1hdElDYWxEYXRlKGV2ZW50LmVuZCwgZXZlbnQuYWxsRGF5KVxuICBpZiAoZXZlbnQuYWxsRGF5KSB7XG4gICAgbGluZXMucHVzaChgRFRFTkQ7VkFMVUU9REFURToke2R0ZW5kfWApXG4gIH0gZWxzZSB7XG4gICAgbGluZXMucHVzaChgRFRFTkQ6JHtkdGVuZH1gKVxuICB9XG5cbiAgLy8gU1VNTUFSWSAodGl0bGUpXG4gIGxpbmVzLnB1c2goYFNVTU1BUlk6JHtlc2NhcGVJQ2FsVGV4dChldmVudC50aXRsZSl9YClcblxuICAvLyBERVNDUklQVElPTiAob3B0aW9uYWwpXG4gIGlmIChldmVudC5kZXNjcmlwdGlvbikge1xuICAgIGxpbmVzLnB1c2goYERFU0NSSVBUSU9OOiR7ZXNjYXBlSUNhbFRleHQoZXZlbnQuZGVzY3JpcHRpb24pfWApXG4gIH1cblxuICAvLyBMT0NBVElPTiAob3B0aW9uYWwpXG4gIGlmIChldmVudC5sb2NhdGlvbikge1xuICAgIGxpbmVzLnB1c2goYExPQ0FUSU9OOiR7ZXNjYXBlSUNhbFRleHQoZXZlbnQubG9jYXRpb24pfWApXG4gIH1cblxuICAvLyBSUlVMRSAocmVjdXJyZW5jZSBydWxlKVxuICBpZiAoZXZlbnQucnJ1bGUpIHtcbiAgICBjb25zdCBycnVsZVN0cmluZyA9IGZvcm1hdFJSdWxlKGV2ZW50LnJydWxlKVxuICAgIGlmIChycnVsZVN0cmluZykge1xuICAgICAgbGluZXMucHVzaChycnVsZVN0cmluZylcbiAgICB9XG4gIH1cblxuICAvLyBFWERBVEUgKGV4Y2VwdGlvbiBkYXRlcylcbiAgaWYgKGV2ZW50LmV4ZGF0ZXMgJiYgZXZlbnQuZXhkYXRlcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgZXhkYXRlcyA9IGV2ZW50LmV4ZGF0ZXNcbiAgICAgIC5tYXAoKGRhdGVTdHIpID0+IGZvcm1hdElDYWxEYXRlKGRheWpzKGRhdGVTdHIpLCBldmVudC5hbGxEYXkpKVxuICAgICAgLmpvaW4oJywnKVxuICAgIGxpbmVzLnB1c2goYEVYREFURToke2V4ZGF0ZXN9YClcbiAgfVxuXG4gIC8vIFJFQ1VSUkVOQ0UtSUQgKGZvciBtb2RpZmllZCBpbnN0YW5jZXMpXG4gIGlmIChldmVudC5yZWN1cnJlbmNlSWQpIHtcbiAgICBjb25zdCByZWN1cnJlbmNlSWQgPSBmb3JtYXRJQ2FsRGF0ZShkYXlqcyhldmVudC5yZWN1cnJlbmNlSWQpLCBldmVudC5hbGxEYXkpXG4gICAgbGluZXMucHVzaChgUkVDVVJSRU5DRS1JRDoke3JlY3VycmVuY2VJZH1gKVxuICB9XG5cbiAgLy8gRFRTVEFNUCAocmVxdWlyZWQgLSB3aGVuIHRoaXMgd2FzIGNyZWF0ZWQvbW9kaWZpZWQpXG4gIGNvbnN0IG5vdyA9IGRheWpzKCkudXRjKCkuZm9ybWF0KCdZWVlZTU1ERFtUXUhIbW1zc1taXScpXG4gIGxpbmVzLnB1c2goYERUU1RBTVA6JHtub3d9YClcblxuICAvLyBDUkVBVEVEICh3aGVuIGV2ZW50IHdhcyBjcmVhdGVkKVxuICBsaW5lcy5wdXNoKGBDUkVBVEVEOiR7bm93fWApXG5cbiAgLy8gTEFTVC1NT0RJRklFRCAod2hlbiBldmVudCB3YXMgbGFzdCBtb2RpZmllZClcbiAgbGluZXMucHVzaChgTEFTVC1NT0RJRklFRDoke25vd31gKVxuXG4gIC8vIFNUQVRVUyAoZGVmYXVsdCB0byBDT05GSVJNRUQpXG4gIGxpbmVzLnB1c2goJ1NUQVRVUzpDT05GSVJNRUQnKVxuXG4gIC8vIFNFUVVFTkNFICh2ZXJzaW9uIG51bWJlciwgZGVmYXVsdCB0byAwKVxuICBsaW5lcy5wdXNoKCdTRVFVRU5DRTowJylcblxuICAvLyBUUkFOU1AgKHRyYW5zcGFyZW5jeSAtIE9QQVFVRSBmb3IgYnVzeSB0aW1lKVxuICBsaW5lcy5wdXNoKCdUUkFOU1A6T1BBUVVFJylcblxuICBsaW5lcy5wdXNoKCdFTkQ6VkVWRU5UJylcblxuICByZXR1cm4gbGluZXMuam9pbignXFxyXFxuJylcbn1cblxuLyoqXG4gKiBGaWx0ZXIgZXZlbnRzIGZvciBwcm9wZXIgaUNhbGVuZGFyIGV4cG9ydFxuICogLSBJbmNsdWRlIGJhc2UgcmVjdXJyaW5nIGV2ZW50cyAod2l0aCBSUlVMRSlcbiAqIC0gSW5jbHVkZSBtb2RpZmllZCBpbnN0YW5jZXMgKHdpdGggcmVjdXJyZW5jZUlkKVxuICogLSBJbmNsdWRlIG5vbi1yZWN1cnJpbmcgZXZlbnRzXG4gKiAtIEVYQ0xVREUgZ2VuZXJhdGVkIHJlY3VycmluZyBpbnN0YW5jZXMgKG5vIHJydWxlLCBubyByZWN1cnJlbmNlSWQpXG4gKi9cbmNvbnN0IGZpbHRlckV2ZW50c0ZvckV4cG9ydCA9IChldmVudHM6IENhbGVuZGFyRXZlbnRbXSk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG4gIGNvbnN0IGV4cG9ydEV2ZW50czogQ2FsZW5kYXJFdmVudFtdID0gW11cbiAgY29uc3QgcHJvY2Vzc2VkVUlEcyA9IG5ldyBTZXQ8c3RyaW5nPigpXG5cbiAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAvLyBHZXQgb3IgZ2VuZXJhdGUgVUlEIGZvciB0aGUgZXZlbnRcbiAgICBjb25zdCBldmVudFVJRCA9IGV2ZW50LnVpZCB8fCBgJHtldmVudC5pZH1AaWxhbXkuY2FsZW5kYXJgXG5cbiAgICAvLyBDYXNlIDE6IEJhc2UgcmVjdXJyaW5nIGV2ZW50IChoYXMgUlJVTEUsIG5vIHJlY3VycmVuY2VJZClcbiAgICBpZiAoZXZlbnQucnJ1bGUgJiYgIWV2ZW50LnJlY3VycmVuY2VJZCkge1xuICAgICAgZXhwb3J0RXZlbnRzLnB1c2goZXZlbnQpXG4gICAgICBwcm9jZXNzZWRVSURzLmFkZChldmVudFVJRClcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gQ2FzZSAyOiBNb2RpZmllZCByZWN1cnJpbmcgaW5zdGFuY2UgKGhhcyByZWN1cnJlbmNlSWQsIG5vIFJSVUxFKVxuICAgIGlmIChldmVudC5yZWN1cnJlbmNlSWQgJiYgIWV2ZW50LnJydWxlKSB7XG4gICAgICBleHBvcnRFdmVudHMucHVzaChldmVudClcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gQ2FzZSAzOiBOb24tcmVjdXJyaW5nIGV2ZW50IChubyBSUlVMRSwgbm8gcmVjdXJyZW5jZUlkLCBubyBVSUQgcGF0dGVybilcbiAgICBpZiAoIWV2ZW50LnJydWxlICYmICFldmVudC5yZWN1cnJlbmNlSWQpIHtcbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBnZW5lcmF0ZWQgaW5zdGFuY2UgYnkgVUlEIHBhdHRlcm5cbiAgICAgIGNvbnN0IGlzR2VuZXJhdGVkSW5zdGFuY2UgPSBwcm9jZXNzZWRVSURzLmhhcyhldmVudFVJRClcblxuICAgICAgaWYgKCFpc0dlbmVyYXRlZEluc3RhbmNlKSB7XG4gICAgICAgIGV4cG9ydEV2ZW50cy5wdXNoKGV2ZW50KVxuICAgICAgfVxuICAgICAgLy8gU2tpcCBnZW5lcmF0ZWQgaW5zdGFuY2VzIC0gdGhleSdsbCBiZSByZWNyZWF0ZWQgYnkgUlJVTEVcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhwb3J0RXZlbnRzXG59XG5cbi8qKlxuICogRXhwb3J0IGV2ZW50cyB0byBpQ2FsZW5kYXIgZm9ybWF0XG4gKi9cbmV4cG9ydCBjb25zdCBleHBvcnRUb0lDYWxlbmRhciA9IChcbiAgZXZlbnRzOiBDYWxlbmRhckV2ZW50W10sXG4gIGNhbGVuZGFyTmFtZSA9ICdpbGFteSBDYWxlbmRhcidcbik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdXG5cbiAgLy8gQ2FsZW5kYXIgaGVhZGVyXG4gIGxpbmVzLnB1c2goJ0JFR0lOOlZDQUxFTkRBUicpXG4gIGxpbmVzLnB1c2goJ1ZFUlNJT046Mi4wJylcbiAgbGluZXMucHVzaCgnUFJPRElEOi0vL2lsYW15Ly9pbGFteSBDYWxlbmRhci8vRU4nKVxuICBsaW5lcy5wdXNoKCdDQUxTQ0FMRTpHUkVHT1JJQU4nKVxuICBsaW5lcy5wdXNoKCdNRVRIT0Q6UFVCTElTSCcpXG4gIGxpbmVzLnB1c2goYFgtV1ItQ0FMTkFNRToke2VzY2FwZUlDYWxUZXh0KGNhbGVuZGFyTmFtZSl9YClcbiAgbGluZXMucHVzaChgWC1XUi1DQUxERVNDOiR7ZXNjYXBlSUNhbFRleHQoYEV4cG9ydGVkIGZyb20gJHtjYWxlbmRhck5hbWV9YCl9YClcblxuICAvLyBBZGQgdGltZXpvbmUgaW5mb3JtYXRpb24gKFVUQylcbiAgbGluZXMucHVzaCgnQkVHSU46VlRJTUVaT05FJylcbiAgbGluZXMucHVzaCgnVFpJRDpVVEMnKVxuICBsaW5lcy5wdXNoKCdCRUdJTjpTVEFOREFSRCcpXG4gIGxpbmVzLnB1c2goJ0RUU1RBUlQ6MTk3MDAxMDFUMDAwMDAwJylcbiAgbGluZXMucHVzaCgnVFpOQU1FOlVUQycpXG4gIGxpbmVzLnB1c2goJ1RaT0ZGU0VURlJPTTorMDAwMCcpXG4gIGxpbmVzLnB1c2goJ1RaT0ZGU0VUVE86KzAwMDAnKVxuICBsaW5lcy5wdXNoKCdFTkQ6U1RBTkRBUkQnKVxuICBsaW5lcy5wdXNoKCdFTkQ6VlRJTUVaT05FJylcblxuICAvLyBGaWx0ZXIgZXZlbnRzIGZvciBwcm9wZXIgaUNhbGVuZGFyIGV4cG9ydFxuICBjb25zdCBmaWx0ZXJlZEV2ZW50cyA9IGZpbHRlckV2ZW50c0ZvckV4cG9ydChldmVudHMpXG5cbiAgLy8gQWRkIGVhY2ggZmlsdGVyZWQgZXZlbnRcbiAgZmlsdGVyZWRFdmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICBsaW5lcy5wdXNoKGV2ZW50VG9JQ2FsRXZlbnQoZXZlbnQpKVxuICB9KVxuXG4gIC8vIENhbGVuZGFyIGZvb3RlclxuICBsaW5lcy5wdXNoKCdFTkQ6VkNBTEVOREFSJylcblxuICByZXR1cm4gbGluZXMuam9pbignXFxyXFxuJylcbn1cblxuLyoqXG4gKiBEb3dubG9hZCBpQ2FsZW5kYXIgZmlsZSB0byB1c2VyJ3MgZGV2aWNlXG4gKi9cbmV4cG9ydCBjb25zdCBkb3dubG9hZElDYWxlbmRhciA9IChcbiAgZXZlbnRzOiBDYWxlbmRhckV2ZW50W10sXG4gIGZpbGVuYW1lID0gJ2NhbGVuZGFyLmljcycsXG4gIGNhbGVuZGFyTmFtZSA9ICdpbGFteSBDYWxlbmRhcidcbik6IHZvaWQgPT4ge1xuICBjb25zdCBpY2FsQ29udGVudCA9IGV4cG9ydFRvSUNhbGVuZGFyKGV2ZW50cywgY2FsZW5kYXJOYW1lKVxuXG4gIC8vIENyZWF0ZSBibG9iIGFuZCBkb3dubG9hZFxuICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2ljYWxDb250ZW50XSwge1xuICAgIHR5cGU6ICd0ZXh0L2NhbGVuZGFyO2NoYXJzZXQ9dXRmLTgnLFxuICB9KVxuXG4gIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYilcbiAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICBsaW5rLmhyZWYgPSB1cmxcbiAgbGluay5kb3dubG9hZCA9IGZpbGVuYW1lLmVuZHNXaXRoKCcuaWNzJykgPyBmaWxlbmFtZSA6IGAke2ZpbGVuYW1lfS5pY3NgXG5cbiAgLy8gVHJpZ2dlciBkb3dubG9hZFxuICBkb2N1bWVudC5ib2R5LmFwcGVuZChsaW5rKVxuICBsaW5rLmNsaWNrKClcbiAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKVxuXG4gIC8vIENsZWFuIHVwXG4gIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKVxufVxuIiwKICAgICJpbXBvcnQge1xuICBCdXR0b24sXG4gIFBvcG92ZXIsXG4gIFBvcG92ZXJDb250ZW50LFxuICBQb3BvdmVyVHJpZ2dlcixcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBkb3dubG9hZElDYWxlbmRhciB9IGZyb20gJ0AvbGliL2V4cG9ydC1pY2FsJ1xuaW1wb3J0IHsgQ2FsZW5kYXIgYXMgQ2FsZW5kYXJJY29uLCBEb3dubG9hZCwgTWVudSwgUGx1cyB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCBUaXRsZUNvbnRlbnQgZnJvbSAnLi90aXRsZS1jb250ZW50J1xuaW1wb3J0IFZpZXdDb250cm9scyBmcm9tICcuL3ZpZXctY29udHJvbHMnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliJ1xuXG5pbnRlcmZhY2UgSGVhZGVyUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuY29uc3QgSGVhZGVyOiBSZWFjdC5GQzxIZWFkZXJQcm9wcz4gPSAoeyBjbGFzc05hbWUgPSAnJyB9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICB2aWV3LFxuICAgIHNldFZpZXcsXG4gICAgbmV4dFBlcmlvZCxcbiAgICBwcmV2UGVyaW9kLFxuICAgIHRvZGF5LFxuICAgIG9wZW5FdmVudEZvcm0sXG4gICAgaGVhZGVyQ29tcG9uZW50LFxuICAgIGhlYWRlckNsYXNzTmFtZSxcbiAgICByYXdFdmVudHMsXG4gIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIC8vIFN0YXRlIGZvciBtb2JpbGUgbWVudSBwb3BvdmVyXG4gIGNvbnN0IFttb2JpbGVQb3BvdmVyT3Blbiwgc2V0TW9iaWxlUG9wb3Zlck9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgLy8gSGFuZGxlIHZpZXcgY2hhbmdlIHdpdGggb3B0aW9uYWwgcG9wb3ZlciBjbG9zaW5nXG4gIGNvbnN0IGhhbmRsZVZpZXdDaGFuZ2UgPSAoXG4gICAgbmV3VmlldzogJ2RheScgfCAnd2VlaycgfCAnbW9udGgnIHwgJ3llYXInLFxuICAgIGNsb3NlUG9wb3ZlciA9IGZhbHNlXG4gICkgPT4ge1xuICAgIHNldFZpZXcobmV3VmlldylcbiAgICBpZiAoY2xvc2VQb3BvdmVyKSB7XG4gICAgICBzZXRNb2JpbGVQb3BvdmVyT3BlbihmYWxzZSlcbiAgICB9XG4gIH1cblxuICAvLyBIYW5kbGUgaUNhbGVuZGFyIGV4cG9ydFxuICBjb25zdCBoYW5kbGVFeHBvcnQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgZmlsZW5hbWUgPSBgaWxhbXktY2FsZW5kYXItJHtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXX0uaWNzYFxuICAgIGRvd25sb2FkSUNhbGVuZGFyKHJhd0V2ZW50cywgZmlsZW5hbWUsICdpbGFteSBDYWxlbmRhcicpXG4gICAgc2V0TW9iaWxlUG9wb3Zlck9wZW4oZmFsc2UpXG4gIH0sIFtyYXdFdmVudHNdKVxuXG4gIC8vIENhbGxiYWNrIGZvciBuYXZpZ2F0aW9uIHRoYXQgYWxzbyBjbG9zZXMgdGhlIG1vYmlsZSBwb3BvdmVyXG4gIGNvbnN0IGhhbmRsZU5hdmlnYXRpb24gPSB7XG4gICAgdG9kYXk6ICgpID0+IHtcbiAgICAgIHRvZGF5KClcbiAgICAgIHNldE1vYmlsZVBvcG92ZXJPcGVuKGZhbHNlKVxuICAgIH0sXG4gICAgcHJldmlvdXM6ICgpID0+IHtcbiAgICAgIHByZXZQZXJpb2QoKVxuICAgICAgc2V0TW9iaWxlUG9wb3Zlck9wZW4oZmFsc2UpXG4gICAgfSxcbiAgICBuZXh0OiAoKSA9PiB7XG4gICAgICBuZXh0UGVyaW9kKClcbiAgICAgIHNldE1vYmlsZVBvcG92ZXJPcGVuKGZhbHNlKVxuICAgIH0sXG4gIH1cblxuICBjb25zdCBOZXdFdmVudEJ1dHRvbiA9IHVzZUNhbGxiYWNrKFxuICAgICgpID0+IChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9wZW5FdmVudEZvcm0oKX1cbiAgICAgICAgICB2YXJpYW50PVwiZGVmYXVsdFwiXG4gICAgICAgICAgc2l6ZT1cInNtXCJcbiAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiXG4gICAgICAgID5cbiAgICAgICAgICA8UGx1cyBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJoaWRkZW4gQDR4bDppbmxpbmVcIj5OZXc8L3NwYW4+XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgKSxcbiAgICBbb3BlbkV2ZW50Rm9ybV1cbiAgKVxuXG4gIGlmIChoZWFkZXJDb21wb25lbnQpIHtcbiAgICAvLyBSZW5kZXIgY3VzdG9tIGhlYWRlciBjb21wb25lbnQgaWYgcHJvdmlkZWRcbiAgICByZXR1cm4gaGVhZGVyQ29tcG9uZW50XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7LyogQ2FsZW5kYXIgSGVhZGVyIHdpdGggZ3JpZCBsYXlvdXQgKi99XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT1cIkBjb250YWluZXIvYmFzZS1oZWFkZXIgdy1mdWxsXCJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1oZWFkZXJcIlxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICdmbGV4IGp1c3RpZnktY2VudGVyIEAyeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1iZXR3ZWVuIGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTIgYm9yZGVyLWInLFxuICAgICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgICAgaGVhZGVyQ2xhc3NOYW1lXG4gICAgICAgICAgKX1cbiAgICAgICAgPlxuICAgICAgICAgIHsvKiBUaXRsZSBhcmVhIC0gTGVmdCBzZWN0aW9uICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xIEAyeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1zdGFydFwiPlxuICAgICAgICAgICAgPENhbGVuZGFySWNvbiBjbGFzc05hbWU9XCJoLTUgdy01XCIgLz5cbiAgICAgICAgICAgIDxUaXRsZUNvbnRlbnQgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIHsvKiBOZXcgZXZlbnQgYnV0dG9uIC0gTW9iaWxlICYgRGVza3RvcCAqL31cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGp1c3RpZnktc3RhcnQgQHhsL2Jhc2UtaGVhZGVyOmp1c3RpZnktY2VudGVyIGdhcC0xIEA0eGwvYmFzZS1oZWFkZXI6anVzdGlmeS1lbmQgb3ZlcmZsb3cteC1hdXRvXCI+XG4gICAgICAgICAgICB7LyogRGVza3RvcCBjb250cm9scyAtIGNlbnRyYWxpemVkICovfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoaWRkZW4gQG1kL2Jhc2UtaGVhZGVyOmZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktc3RhcnQgZ2FwLTFcIj5cbiAgICAgICAgICAgICAgPFZpZXdDb250cm9sc1xuICAgICAgICAgICAgICAgIGN1cnJlbnRWaWV3PXt2aWV3fVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRWaWV3fVxuICAgICAgICAgICAgICAgIG9uVG9kYXk9e3RvZGF5fVxuICAgICAgICAgICAgICAgIG9uTmV4dD17bmV4dFBlcmlvZH1cbiAgICAgICAgICAgICAgICBvblByZXZpb3VzPXtwcmV2UGVyaW9kfVxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJkZWZhdWx0XCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJqdXN0aWZ5LWVuZFwiXG4gICAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgICAgey8qIE5ldyBldmVudCBidXR0b24gLSBEZXNrdG9wICovfVxuICAgICAgICAgICAgICA8TmV3RXZlbnRCdXR0b24gLz5cblxuICAgICAgICAgICAgICB7LyogRXhwb3J0IGJ1dHRvbiAtIERlc2t0b3AgKi99XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVFeHBvcnR9XG4gICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVcIlxuICAgICAgICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPERvd25sb2FkIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImhpZGRlbiBANHhsL2Jhc2UtaGVhZGVyOmlubGluZVwiPkV4cG9ydDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIE1vYmlsZSBuYXZpZ2F0aW9uIG1lbnUgYnV0dG9uIC0gUmlnaHQgYWxpZ25lZCAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgZ2FwLTEgQG1kL2Jhc2UtaGVhZGVyOmhpZGRlblwiPlxuICAgICAgICAgICAgICB7LyogTmV3IGV2ZW50IGJ1dHRvbiAtIE1vYmlsZSAqL31cbiAgICAgICAgICAgICAgPE5ld0V2ZW50QnV0dG9uIC8+XG5cbiAgICAgICAgICAgICAgPFBvcG92ZXJcbiAgICAgICAgICAgICAgICBvcGVuPXttb2JpbGVQb3BvdmVyT3Blbn1cbiAgICAgICAgICAgICAgICBvbk9wZW5DaGFuZ2U9e3NldE1vYmlsZVBvcG92ZXJPcGVufVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJvdXRsaW5lXCIgc2l6ZT1cInNtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxNZW51IGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgPC9Qb3BvdmVyVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICA8UG9wb3ZlckNvbnRlbnQgYWxpZ249XCJlbmRcIiBjbGFzc05hbWU9XCJ3LVsyNDBweF0gcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwibWItMSB0ZXh0LXNtIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgVmlldyAmIE5hdmlnYXRpb25cbiAgICAgICAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgICAgICAgICAgPFZpZXdDb250cm9sc1xuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRWaWV3PXt2aWV3fVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsobmV3VmlldykgPT4gaGFuZGxlVmlld0NoYW5nZShuZXdWaWV3LCB0cnVlKX1cbiAgICAgICAgICAgICAgICAgICAgICBvblRvZGF5PXtoYW5kbGVOYXZpZ2F0aW9uLnRvZGF5fVxuICAgICAgICAgICAgICAgICAgICAgIG9uTmV4dD17aGFuZGxlTmF2aWdhdGlvbi5uZXh0fVxuICAgICAgICAgICAgICAgICAgICAgIG9uUHJldmlvdXM9e2hhbmRsZU5hdmlnYXRpb24ucHJldmlvdXN9XG4gICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImdyaWRcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICAgICAgICAgIHsvKiBFeHBvcnQgYnV0dG9uIC0gTW9iaWxlICovfVxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInB0LTIgYm9yZGVyLXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVFeHBvcnR9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RG93bmxvYWQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnQgQ2FsZW5kYXIgKC5pY3MpXG4gICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9Qb3BvdmVyQ29udGVudD5cbiAgICAgICAgICAgICAgPC9Qb3BvdmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC8+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgSGVhZGVyXG4iLAogICAgImltcG9ydCB7XG4gIEJ1dHRvbixcbiAgUG9wb3ZlcixcbiAgUG9wb3ZlckNvbnRlbnQsXG4gIFBvcG92ZXJUcmlnZ2VyLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWknXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgeyBDaGV2cm9uRG93biB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbi8vIE1vbnRocyBhcnJheSBpcyBub3cgY3JlYXRlZCBkeW5hbWljYWxseSBpbiB0aGUgY29tcG9uZW50IHVzaW5nIHRyYW5zbGF0aW9uc1xuXG4vLyBBbmltYXRpb24gdmFyaWFudHMgZm9yIG51bWJlciB0cmFuc2l0aW9uc1xuY29uc3QgYW5pbWF0aW9uVmFyaWFudHMgPSB7XG4gIGluaXRpYWw6IHsgb3BhY2l0eTogMCwgeTogMTAgfSxcbiAgYW5pbWF0ZTogeyBvcGFjaXR5OiAxLCB5OiAwIH0sXG4gIGV4aXQ6IHsgb3BhY2l0eTogMCwgeTogLTEwIH0sXG59XG5cbmNvbnN0IFRpdGxlQ29udGVudCA9ICgpID0+IHtcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgdmlldywgc2V0Q3VycmVudERhdGUsIHQgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgLy8gQ3JlYXRlIG1vbnRocyBhcnJheSB1c2luZyB0cmFuc2xhdGlvbnNcbiAgY29uc3QgbW9udGhzID0gdXNlTWVtbyhcbiAgICAoKSA9PiBbXG4gICAgICB0KCdqYW51YXJ5JyksXG4gICAgICB0KCdmZWJydWFyeScpLFxuICAgICAgdCgnbWFyY2gnKSxcbiAgICAgIHQoJ2FwcmlsJyksXG4gICAgICB0KCdtYXknKSxcbiAgICAgIHQoJ2p1bmUnKSxcbiAgICAgIHQoJ2p1bHknKSxcbiAgICAgIHQoJ2F1Z3VzdCcpLFxuICAgICAgdCgnc2VwdGVtYmVyJyksXG4gICAgICB0KCdvY3RvYmVyJyksXG4gICAgICB0KCdub3ZlbWJlcicpLFxuICAgICAgdCgnZGVjZW1iZXInKSxcbiAgICBdLFxuICAgIFt0XVxuICApXG5cbiAgLy8gU3RhdGUgZm9yIG1vYmlsZSBtZW51IGFuZCBwb3BvdmVyc1xuICBjb25zdCBbbW9udGhQb3BvdmVyT3Blbiwgc2V0TW9udGhQb3BvdmVyT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3llYXJQb3BvdmVyT3Blbiwgc2V0WWVhclBvcG92ZXJPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbd2Vla1BvcG92ZXJPcGVuLCBzZXRXZWVrUG9wb3Zlck9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtkYXlQb3BvdmVyT3Blbiwgc2V0RGF5UG9wb3Zlck9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgY29uc3QgY3VycmVudFllYXIgPSBjdXJyZW50RGF0ZS55ZWFyKClcbiAgY29uc3QgeWVhcnMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAxMSB9LCAoXywgaSkgPT4gY3VycmVudFllYXIgLSA1ICsgaSlcblxuICAvLyBIYW5kbGUgbW9udGggYW5kIHllYXIgc2VsZWN0aW9uXG4gIGNvbnN0IGhhbmRsZU1vbnRoQ2hhbmdlID0gKG1vbnRoOiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBuZXdEYXRlID0gY3VycmVudERhdGUubW9udGgobW9udGgpXG4gICAgc2V0Q3VycmVudERhdGUobmV3RGF0ZSlcbiAgICBzZXRNb250aFBvcG92ZXJPcGVuKGZhbHNlKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlWWVhckNoYW5nZSA9ICh5ZWFyOiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBuZXdEYXRlID0gY3VycmVudERhdGUueWVhcih5ZWFyKVxuICAgIHNldEN1cnJlbnREYXRlKG5ld0RhdGUpXG4gICAgc2V0WWVhclBvcG92ZXJPcGVuKGZhbHNlKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge3ZpZXcgIT09ICd5ZWFyJyAmJiAoXG4gICAgICAgIDxQb3BvdmVyIG9wZW49e21vbnRoUG9wb3Zlck9wZW59IG9uT3BlbkNoYW5nZT17c2V0TW9udGhQb3BvdmVyT3Blbn0+XG4gICAgICAgICAgPFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHB4LTEhIGZvbnQtc2VtaWJvbGRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8QW5pbWF0ZVByZXNlbmNlIG1vZGU9XCJ3YWl0XCI+XG4gICAgICAgICAgICAgICAgPG1vdGlvbi5zcGFuXG4gICAgICAgICAgICAgICAgICBrZXk9e2Btb250aC0ke2N1cnJlbnREYXRlLm1vbnRoKCl9YH1cbiAgICAgICAgICAgICAgICAgIGluaXRpYWw9XCJpbml0aWFsXCJcbiAgICAgICAgICAgICAgICAgIGFuaW1hdGU9XCJhbmltYXRlXCJcbiAgICAgICAgICAgICAgICAgIGV4aXQ9XCJleGl0XCJcbiAgICAgICAgICAgICAgICAgIHZhcmlhbnRzPXthbmltYXRpb25WYXJpYW50c31cbiAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuMjUsIGVhc2U6ICdlYXNlSW5PdXQnIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2N1cnJlbnREYXRlLmZvcm1hdCgnTU1NTScpfVxuICAgICAgICAgICAgICAgIDwvbW90aW9uLnNwYW4+XG4gICAgICAgICAgICAgIDwvQW5pbWF0ZVByZXNlbmNlPlxuICAgICAgICAgICAgICA8Q2hldnJvbkRvd24gY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8L1BvcG92ZXJUcmlnZ2VyPlxuICAgICAgICAgIDxQb3BvdmVyQ29udGVudCBjbGFzc05hbWU9XCJ3LTQwIHAtMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IG1heC1oLTYwIGZsZXgtY29sIG92ZXJmbG93LWF1dG9cIj5cbiAgICAgICAgICAgICAge21vbnRocy5tYXAoKG1vbnRoLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgIGtleT17bW9udGh9XG4gICAgICAgICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICAgJ2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50RGF0ZS5tb250aCgpID09PSBpbmRleCAmJiAnYmctcHJpbWFyeS8xMCdcbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVNb250aENoYW5nZShpbmRleCl9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge21vbnRofVxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvUG9wb3ZlckNvbnRlbnQ+XG4gICAgICAgIDwvUG9wb3Zlcj5cbiAgICAgICl9XG5cbiAgICAgIDxQb3BvdmVyIG9wZW49e3llYXJQb3BvdmVyT3Blbn0gb25PcGVuQ2hhbmdlPXtzZXRZZWFyUG9wb3Zlck9wZW59PlxuICAgICAgICA8UG9wb3ZlclRyaWdnZXIgYXNDaGlsZD5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcHgtMSEgZm9udC1zZW1pYm9sZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgICAgICA8bW90aW9uLnNwYW5cbiAgICAgICAgICAgICAgICBrZXk9e2B5ZWFyLSR7Y3VycmVudERhdGUueWVhcigpfWB9XG4gICAgICAgICAgICAgICAgaW5pdGlhbD1cImluaXRpYWxcIlxuICAgICAgICAgICAgICAgIGFuaW1hdGU9XCJhbmltYXRlXCJcbiAgICAgICAgICAgICAgICBleGl0PVwiZXhpdFwiXG4gICAgICAgICAgICAgICAgdmFyaWFudHM9e2FuaW1hdGlvblZhcmlhbnRzfVxuICAgICAgICAgICAgICAgIHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuMjUsIGVhc2U6ICdlYXNlSW5PdXQnIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZJyl9XG4gICAgICAgICAgICAgIDwvbW90aW9uLnNwYW4+XG4gICAgICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgICAgICAgIDxDaGV2cm9uRG93biBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9Qb3BvdmVyVHJpZ2dlcj5cbiAgICAgICAgPFBvcG92ZXJDb250ZW50IGNsYXNzTmFtZT1cInctMjQgcC0wXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IG1heC1oLTYwIGZsZXgtY29sIG92ZXJmbG93LWF1dG9cIj5cbiAgICAgICAgICAgIHt5ZWFycy5tYXAoKHllYXIpID0+IChcbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGtleT17eWVhcn1cbiAgICAgICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAnanVzdGlmeS1zdGFydCBmb250LW5vcm1hbCcsXG4gICAgICAgICAgICAgICAgICBjdXJyZW50RGF0ZS55ZWFyKCkgPT09IHllYXIgJiYgJ2JnLXByaW1hcnkvMTAnXG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVZZWFyQ2hhbmdlKHllYXIpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3llYXJ9XG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvUG9wb3ZlckNvbnRlbnQ+XG4gICAgICA8L1BvcG92ZXI+XG5cbiAgICAgIHsvKiBEaXNwbGF5IGFkZGl0aW9uYWwgdmlldy1zcGVjaWZpYyBpbmZvcm1hdGlvbiAqL31cbiAgICAgIHt2aWV3ID09PSAnd2VlaycgJiYgKFxuICAgICAgICA8UG9wb3ZlciBvcGVuPXt3ZWVrUG9wb3Zlck9wZW59IG9uT3BlbkNoYW5nZT17c2V0V2Vla1BvcG92ZXJPcGVufT5cbiAgICAgICAgICA8UG9wb3ZlclRyaWdnZXIgYXNDaGlsZD5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcHgtMSEgZm9udC1zZW1pYm9sZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxBbmltYXRlUHJlc2VuY2UgbW9kZT1cIndhaXRcIj5cbiAgICAgICAgICAgICAgICA8bW90aW9uLnNwYW5cbiAgICAgICAgICAgICAgICAgIGtleT17YHdlZWstcmFuZ2UtJHtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuICAgICAgICAgICAgICAgICAgaW5pdGlhbD1cImluaXRpYWxcIlxuICAgICAgICAgICAgICAgICAgYW5pbWF0ZT1cImFuaW1hdGVcIlxuICAgICAgICAgICAgICAgICAgZXhpdD1cImV4aXRcIlxuICAgICAgICAgICAgICAgICAgdmFyaWFudHM9e2FuaW1hdGlvblZhcmlhbnRzfVxuICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbj17eyBkdXJhdGlvbjogMC4yNSwgZWFzZTogJ2Vhc2VJbk91dCcgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7YCR7Y3VycmVudERhdGVcbiAgICAgICAgICAgICAgICAgICAgLnN0YXJ0T2YoJ3dlZWsnKVxuICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KCdNTU0gRCcpfSAtICR7Y3VycmVudERhdGVcbiAgICAgICAgICAgICAgICAgICAgLmVuZE9mKCd3ZWVrJylcbiAgICAgICAgICAgICAgICAgICAgLmZvcm1hdCgnTU1NIEQnKX1gfVxuICAgICAgICAgICAgICAgIDwvbW90aW9uLnNwYW4+XG4gICAgICAgICAgICAgIDwvQW5pbWF0ZVByZXNlbmNlPlxuICAgICAgICAgICAgICA8Q2hldnJvbkRvd24gY2xhc3NOYW1lPVwibWwtMSBoLTMgdy0zIG9wYWNpdHktNzBcIiAvPlxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPC9Qb3BvdmVyVHJpZ2dlcj5cbiAgICAgICAgICA8UG9wb3ZlckNvbnRlbnQgY2xhc3NOYW1lPVwidy01NiBwLTBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBtYXgtaC02MCBmbGV4LWNvbCBvdmVyZmxvdy1hdXRvXCI+XG4gICAgICAgICAgICAgIHsvKiBTaG93IDcgd2Vla3MgKDMgcGFzdCwgY3VycmVudCwgMyBmdXR1cmUpICovfVxuICAgICAgICAgICAgICB7QXJyYXkuZnJvbSh7IGxlbmd0aDogNyB9LCAoXywgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHdlZWtEYXRlID0gY3VycmVudERhdGUuc3VidHJhY3QoMywgJ3dlZWsnKS5hZGQoaSwgJ3dlZWsnKVxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0T2ZXZWVrID0gd2Vla0RhdGUuc3RhcnRPZignd2VlaycpXG4gICAgICAgICAgICAgICAgY29uc3QgZW5kT2ZXZWVrID0gd2Vla0RhdGUuZW5kT2YoJ3dlZWsnKVxuICAgICAgICAgICAgICAgIGNvbnN0IGlzQ3VycmVudFdlZWsgPSB3ZWVrRGF0ZS5pc1NhbWUoY3VycmVudERhdGUsICd3ZWVrJylcblxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGtleT17c3RhcnRPZldlZWsuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAgICAgJ2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuICAgICAgICAgICAgICAgICAgICAgIGlzQ3VycmVudFdlZWsgJiYgJ2JnLXByaW1hcnkvMTAnXG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRDdXJyZW50RGF0ZShzdGFydE9mV2VlaylcbiAgICAgICAgICAgICAgICAgICAgICBzZXRXZWVrUG9wb3Zlck9wZW4oZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPntgJHtzdGFydE9mV2Vlay5mb3JtYXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAnTU1NIEQnXG4gICAgICAgICAgICAgICAgICAgICAgKX0gLSAke2VuZE9mV2Vlay5mb3JtYXQoJ0QnKX1gfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICB7c3RhcnRPZldlZWsubW9udGgoKSAhPT0gZW5kT2ZXZWVrLm1vbnRoKCkgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC14cyBvcGFjaXR5LTcwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtgJHtzdGFydE9mV2Vlay5mb3JtYXQoJ01NTScpfS0ke2VuZE9mV2Vlay5mb3JtYXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01NTSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKX1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvUG9wb3ZlckNvbnRlbnQ+XG4gICAgICAgIDwvUG9wb3Zlcj5cbiAgICAgICl9XG4gICAgICB7dmlldyA9PT0gJ2RheScgJiYgKFxuICAgICAgICA8UG9wb3ZlciBvcGVuPXtkYXlQb3BvdmVyT3Blbn0gb25PcGVuQ2hhbmdlPXtzZXREYXlQb3BvdmVyT3Blbn0+XG4gICAgICAgICAgPFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHB4LTEhIGZvbnQtc2VtaWJvbGRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8QW5pbWF0ZVByZXNlbmNlIG1vZGU9XCJ3YWl0XCI+XG4gICAgICAgICAgICAgICAgPG1vdGlvbi5zcGFuXG4gICAgICAgICAgICAgICAgICBrZXk9e2BkYXktaW5mby0ke2N1cnJlbnREYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpfWB9XG4gICAgICAgICAgICAgICAgICBpbml0aWFsPVwiaW5pdGlhbFwiXG4gICAgICAgICAgICAgICAgICBhbmltYXRlPVwiYW5pbWF0ZVwiXG4gICAgICAgICAgICAgICAgICBleGl0PVwiZXhpdFwiXG4gICAgICAgICAgICAgICAgICB2YXJpYW50cz17YW5pbWF0aW9uVmFyaWFudHN9XG4gICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uPXt7IGR1cmF0aW9uOiAwLjI1LCBlYXNlOiAnZWFzZUluT3V0JyB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHtjdXJyZW50RGF0ZS5mb3JtYXQoJ2RkZGQsIEQnKX1cbiAgICAgICAgICAgICAgICA8L21vdGlvbi5zcGFuPlxuICAgICAgICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgICAgICAgICAgPENoZXZyb25Eb3duIGNsYXNzTmFtZT1cIm1sLTEgaC0zIHctMyBvcGFjaXR5LTcwXCIgLz5cbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDwvUG9wb3ZlclRyaWdnZXI+XG4gICAgICAgICAgPFBvcG92ZXJDb250ZW50IGNsYXNzTmFtZT1cInctNTYgcC0wXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggbWF4LWgtNjAgZmxleC1jb2wgb3ZlcmZsb3ctYXV0b1wiPlxuICAgICAgICAgICAgICB7LyogU2hvdyBhbGwgZGF5cyBvZiB0aGUgY3VycmVudCBtb250aCAqL31cbiAgICAgICAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gR2V0IGZpcnN0IGRheSBvZiBtb250aCBhbmQgbGFzdCBkYXkgb2YgbW9udGhcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdERheU9mTW9udGggPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG4gICAgICAgICAgICAgICAgY29uc3QgZGF5c0luTW9udGggPSBjdXJyZW50RGF0ZS5kYXlzSW5Nb250aCgpXG5cbiAgICAgICAgICAgICAgICAvLyBHZW5lcmF0ZSBhcnJheSBvZiBkYXlzIGluIHRoZSBtb250aFxuICAgICAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBkYXlzSW5Nb250aCB9LCAoXywgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZGF5RGF0ZSA9IGZpcnN0RGF5T2ZNb250aC5kYXRlKGkgKyAxKSAvLyBpICsgMSBiZWNhdXNlIGRheXMgc3RhcnQgYXQgMVxuICAgICAgICAgICAgICAgICAgY29uc3QgaXNDdXJyZW50RGF5ID0gZGF5RGF0ZS5pc1NhbWUoY3VycmVudERhdGUsICdkYXknKVxuICAgICAgICAgICAgICAgICAgY29uc3QgaXNUb2RheSA9IGRheURhdGUuaXNTYW1lKGRheWpzKCksICdkYXknKVxuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAga2V5PXtkYXlEYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpfVxuICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICAgICAgICdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQ3VycmVudERheSAmJiAnYmctcHJpbWFyeS8xMCdcbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEN1cnJlbnREYXRlKGRheURhdGUpXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXREYXlQb3BvdmVyT3BlbihmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57ZGF5RGF0ZS5mb3JtYXQoJ2RkZGQsIE1NTSBEJyl9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAge2lzVG9kYXkgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHJvdW5kZWQtc20gcHgtMSEgdGV4dC14c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0KCd0b2RheScpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9KSgpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9Qb3BvdmVyQ29udGVudD5cbiAgICAgICAgPC9Qb3BvdmVyPlxuICAgICAgKX1cbiAgICA8Lz5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBUaXRsZUNvbnRlbnRcbiIsCiAgICAiaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IENoZXZyb25MZWZ0LCBDaGV2cm9uUmlnaHQgfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcblxuaW50ZXJmYWNlIFZpZXdDb250cm9sc1Byb3BzIHtcbiAgY3VycmVudFZpZXc6ICdkYXknIHwgJ3dlZWsnIHwgJ21vbnRoJyB8ICd5ZWFyJ1xuICBvbkNoYW5nZTogKHZpZXc6ICdkYXknIHwgJ3dlZWsnIHwgJ21vbnRoJyB8ICd5ZWFyJykgPT4gdm9pZFxuICBvblRvZGF5PzogKCkgPT4gdm9pZFxuICBvbk5leHQ/OiAoKSA9PiB2b2lkXG4gIG9uUHJldmlvdXM/OiAoKSA9PiB2b2lkXG4gIHZhcmlhbnQ/OiAnZGVmYXVsdCcgfCAnZ3JpZCdcbiAgc2l6ZT86ICdzbScgfCAnZGVmYXVsdCdcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmNvbnN0IFZpZXdDb250cm9sczogUmVhY3QuRkM8Vmlld0NvbnRyb2xzUHJvcHM+ID0gKHtcbiAgY3VycmVudFZpZXcsXG4gIG9uQ2hhbmdlLFxuICB2YXJpYW50ID0gJ2RlZmF1bHQnLFxuICBzaXplID0gJ3NtJyxcbiAgY2xhc3NOYW1lLFxuICBvblRvZGF5LFxuICBvbk5leHQsXG4gIG9uUHJldmlvdXMsXG59KSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcbiAgY29uc3QgaXNHcmlkID0gdmFyaWFudCA9PT0gJ2dyaWQnXG5cbiAgLy8gRXh0cmFjdCBjb21tb24gYnV0dG9uIGNsYXNzTmFtZSBsb2dpYyB0byBhIGZ1bmN0aW9uXG4gIGNvbnN0IGdldEJ1dHRvbkNsYXNzTmFtZSA9ICh2aWV3VHlwZTogJ2RheScgfCAnd2VlaycgfCAnbW9udGgnIHwgJ3llYXInKSA9PiB7XG4gICAgcmV0dXJuIGNuKFxuICAgICAgLy8gQmFzZSB3aWR0aCBmb3IgZ3JpZCBsYXlvdXRcbiAgICAgIGlzR3JpZCA/ICd3LWZ1bGwnIDogJycsXG4gICAgICAvLyBBY3RpdmUgdmlldyBzdHlsaW5nXG4gICAgICBjdXJyZW50VmlldyA9PT0gdmlld1R5cGUgJiYgJ2JnLXByaW1hcnkvODAnXG4gICAgKVxuICB9XG5cbiAgY29uc3QgZ2V0QnRuVmFyaWFudCA9ICh2aWV3VHlwZTogJ2RheScgfCAnd2VlaycgfCAnbW9udGgnIHwgJ3llYXInKSA9PiB7XG4gICAgcmV0dXJuIGN1cnJlbnRWaWV3ID09PSB2aWV3VHlwZSA/ICdkZWZhdWx0JyA6ICdvdXRsaW5lJ1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICBpc0dyaWQgPyAnZ3JpZCBncmlkLWNvbHMtMiBnYXAtMicgOiAnZmxleCBnYXAtMScsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICA+XG4gICAgICA8QnV0dG9uIG9uQ2xpY2s9e29uUHJldmlvdXN9IHZhcmlhbnQ9XCJvdXRsaW5lXCIgc2l6ZT17c2l6ZX0+XG4gICAgICAgIDxDaGV2cm9uTGVmdCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cbiAgICAgIDwvQnV0dG9uPlxuICAgICAgPEJ1dHRvbiBvbkNsaWNrPXtvbk5leHR9IHZhcmlhbnQ9XCJvdXRsaW5lXCIgc2l6ZT17c2l6ZX0+XG4gICAgICAgIDxDaGV2cm9uUmlnaHQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICA8L0J1dHRvbj5cblxuICAgICAgPEJ1dHRvblxuICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbkNoYW5nZSgnZGF5Jyl9XG4gICAgICAgIHZhcmlhbnQ9e2dldEJ0blZhcmlhbnQoJ2RheScpfVxuICAgICAgICBzaXplPXtzaXplfVxuICAgICAgICBjbGFzc05hbWU9e2dldEJ1dHRvbkNsYXNzTmFtZSgnZGF5Jyl9XG4gICAgICA+XG4gICAgICAgIHt0KCdkYXknKX1cbiAgICAgIDwvQnV0dG9uPlxuICAgICAgPEJ1dHRvblxuICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbkNoYW5nZSgnd2VlaycpfVxuICAgICAgICB2YXJpYW50PXtnZXRCdG5WYXJpYW50KCd3ZWVrJyl9XG4gICAgICAgIHNpemU9e3NpemV9XG4gICAgICAgIGNsYXNzTmFtZT17Z2V0QnV0dG9uQ2xhc3NOYW1lKCd3ZWVrJyl9XG4gICAgICA+XG4gICAgICAgIHt0KCd3ZWVrJyl9XG4gICAgICA8L0J1dHRvbj5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgb25DbGljaz17KCkgPT4gb25DaGFuZ2UoJ21vbnRoJyl9XG4gICAgICAgIHZhcmlhbnQ9e2dldEJ0blZhcmlhbnQoJ21vbnRoJyl9XG4gICAgICAgIHNpemU9e3NpemV9XG4gICAgICAgIGNsYXNzTmFtZT17Z2V0QnV0dG9uQ2xhc3NOYW1lKCdtb250aCcpfVxuICAgICAgPlxuICAgICAgICB7dCgnbW9udGgnKX1cbiAgICAgIDwvQnV0dG9uPlxuICAgICAgPEJ1dHRvblxuICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbkNoYW5nZSgneWVhcicpfVxuICAgICAgICB2YXJpYW50PXtnZXRCdG5WYXJpYW50KCd5ZWFyJyl9XG4gICAgICAgIHNpemU9e3NpemV9XG4gICAgICAgIGNsYXNzTmFtZT17Z2V0QnV0dG9uQ2xhc3NOYW1lKCd5ZWFyJyl9XG4gICAgICA+XG4gICAgICAgIHt0KCd5ZWFyJyl9XG4gICAgICA8L0J1dHRvbj5cblxuICAgICAgPEJ1dHRvbiBvbkNsaWNrPXtvblRvZGF5fSB2YXJpYW50PVwib3V0bGluZVwiIHNpemU9e3NpemV9PlxuICAgICAgICB7dCgndG9kYXknKX1cbiAgICAgIDwvQnV0dG9uPlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IFZpZXdDb250cm9sc1xuIiwKICAgICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IFNjcm9sbEFyZWEgfSBmcm9tICdAL2NvbXBvbmVudHMvdWknXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgbW90aW9uIH0gZnJvbSAnbW90aW9uL3JlYWN0J1xuXG5jb25zdCBZZWFyVmlldzogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHsgY3VycmVudERhdGUsIHNlbGVjdERhdGUsIGV2ZW50cywgc2V0VmlldywgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLCB0IH0gPVxuICAgIHVzZUNhbGVuZGFyQ29udGV4dCgpXG4gIGNvbnN0IHllYXIgPSBjdXJyZW50RGF0ZS55ZWFyKClcblxuICAvLyBHZW5lcmF0ZSBhbiBhcnJheSBvZiAxMiBtb250aHMgZm9yIHRoZSBjdXJyZW50IHllYXJcbiAgY29uc3QgbW9udGhzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMTIgfSwgKF8sIGkpID0+IHtcbiAgICBjb25zdCBtb250aERhdGUgPSBkYXlqcygpLnllYXIoeWVhcikubW9udGgoaSkuc3RhcnRPZignbW9udGgnKVxuICAgIHJldHVybiB7XG4gICAgICBkYXRlOiBtb250aERhdGUsXG4gICAgICBuYW1lOiBtb250aERhdGUuZm9ybWF0KCdNTU1NJyksXG4gICAgICBkYXlzSW5Nb250aDogbW9udGhEYXRlLmRheXNJbk1vbnRoKCksXG4gICAgICBmaXJzdERheU9mTW9udGg6IG1vbnRoRGF0ZS5zdGFydE9mKCdtb250aCcpLmRheSgpLCAvLyAwLTYsIDAgaXMgU3VuZGF5XG4gICAgfVxuICB9KVxuXG4gIC8vIENhbGN1bGF0ZSBldmVudHMgZm9yIGVhY2ggbW9udGhcbiAgY29uc3QgbW9udGhzV2l0aEV2ZW50Q291bnQgPSBtb250aHMubWFwKChtb250aCkgPT4ge1xuICAgIGNvbnN0IGV2ZW50c0luTW9udGggPSBldmVudHMuZmlsdGVyKFxuICAgICAgKGV2ZW50KSA9PlxuICAgICAgICBldmVudC5zdGFydC55ZWFyKCkgPT09IHllYXIgJiZcbiAgICAgICAgZXZlbnQuc3RhcnQubW9udGgoKSA9PT0gbW9udGguZGF0ZS5tb250aCgpXG4gICAgKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm1vbnRoLFxuICAgICAgZXZlbnRDb3VudDogZXZlbnRzSW5Nb250aC5sZW5ndGgsXG4gICAgfVxuICB9KVxuXG4gIC8vIEhhbmRsZSBtb250aCBjbGljayB0byBuYXZpZ2F0ZSB0byBtb250aCB2aWV3XG4gIGNvbnN0IGhhbmRsZU1vbnRoQ2xpY2sgPSAoZGF0ZTogZGF5anMuRGF5anMpID0+IHtcbiAgICBzZWxlY3REYXRlKGRhdGUpXG4gICAgc2V0VmlldygnbW9udGgnKVxuICB9XG5cbiAgLy8gSGFuZGxlIGRheSBjbGljayB3aXRoaW4gdGhlIG1pbmkgY2FsZW5kYXJcbiAgY29uc3QgaGFuZGxlRGF5Q2xpY2sgPSAoZGF0ZTogZGF5anMuRGF5anMsIGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkgLy8gUHJldmVudCB0cmlnZ2VyaW5nIHRoZSBtb250aCBjbGlja1xuICAgIHNlbGVjdERhdGUoZGF0ZSlcbiAgICBzZXRWaWV3KCdkYXknKSAvLyBOYXZpZ2F0ZSBkaXJlY3RseSB0byBkYXkgdmlldyB3aGVuIGNsaWNraW5nIG9uIGEgc3BlY2lmaWMgZGF5XG4gIH1cblxuICAvLyBHZW5lcmF0ZSBkYXlzIGZvciBtaW5pIGNhbGVuZGFyIGluIGVhY2ggbW9udGhcbiAgY29uc3QgcmVuZGVyTWluaUNhbGVuZGFyID0gKG1vbnRoOiAodHlwZW9mIG1vbnRoc1dpdGhFdmVudENvdW50KVswXSkgPT4ge1xuICAgIC8vIEdldCB0aGUgZmlyc3QgZGF5IG9mIHRoZSBtb250aCdzIGNhbGVuZGFyICh3aGljaCBjb3VsZCBiZSBpbiB0aGUgcHJldmlvdXMgbW9udGgpXG4gICAgY29uc3QgZmlyc3REYXlPZkNhbGVuZGFyID0gbW9udGguZGF0ZS5zdGFydE9mKCdtb250aCcpLnN0YXJ0T2YoJ3dlZWsnKVxuXG4gICAgLy8gQ3JlYXRlIDQyIGRheXMgKDYgcm93cyBvZiA3IGRheXMpIGZvciBjb25zaXN0ZW5jeVxuICAgIGNvbnN0IGRheXNBcnJheSA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDQyIH0sIChfLCBpKSA9PiB7XG4gICAgICBjb25zdCBkYXkgPSBmaXJzdERheU9mQ2FsZW5kYXIuYWRkKGksICdkYXknKVxuICAgICAgY29uc3QgaXNDdXJyZW50TW9udGggPSBkYXkubW9udGgoKSA9PT0gbW9udGguZGF0ZS5tb250aCgpXG4gICAgICBjb25zdCBpc1RvZGF5ID0gZGF5LmlzU2FtZShkYXlqcygpLCAnZGF5JylcbiAgICAgIGNvbnN0IGlzQ3VycmVudERhdGUgPSBkYXkuaXNTYW1lKGN1cnJlbnREYXRlLCAnZGF5JylcblxuICAgICAgLy8gR2V0IGV2ZW50cyBmb3IgdGhpcyBkYXlcbiAgICAgIGNvbnN0IGRheUV2ZW50cyA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZShcbiAgICAgICAgZGF5LnN0YXJ0T2YoJ2RheScpLFxuICAgICAgICBkYXkuZW5kT2YoJ2RheScpXG4gICAgICApXG4gICAgICBjb25zdCBoYXNFdmVudHMgPSBkYXlFdmVudHMubGVuZ3RoID4gMFxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXksXG4gICAgICAgIGlzQ3VycmVudE1vbnRoLFxuICAgICAgICBpc1RvZGF5LFxuICAgICAgICBpc0N1cnJlbnREYXRlLFxuICAgICAgICBoYXNFdmVudHMsXG4gICAgICAgIGV2ZW50Q291bnQ6IGRheUV2ZW50cy5sZW5ndGgsXG4gICAgICAgIC8vIEdyb3VwIGV2ZW50cyBieSB0aGVpciBjYXRlZ29yaWVzIHRvIHNob3cgZGlmZmVyZW50IGNvbG9yc1xuICAgICAgICBldmVudHM6IGRheUV2ZW50cyxcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgZGF0YS10ZXN0aWQ9e2B5ZWFyLW1pbmktY2FsZW5kYXItJHttb250aC5kYXRlLmZvcm1hdCgnTU0nKX1gfVxuICAgICAgICBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy03IGdhcC1bMXB4XSB0ZXh0LVswLjZyZW1dXCJcbiAgICAgID5cbiAgICAgICAgey8qIERheSBuYW1lcyAqL31cbiAgICAgICAge1snUycsICdNJywgJ1QnLCAnVycsICdUJywgJ0YnLCAnUyddLm1hcCgoZGF5TmFtZSwgaSkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGtleT17YGhlYWRlci0ke2l9YH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBoLTMgdGV4dC1jZW50ZXJcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtkYXlOYW1lfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApKX1cblxuICAgICAgICB7LyogQ2FsZW5kYXIgZGF5cyAqL31cbiAgICAgICAge2RheXNBcnJheS5tYXAoKGRheUluZm8sIGkpID0+IChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBrZXk9e2BkYXktJHtpfWB9XG4gICAgICAgICAgICBkYXRhLXRlc3RpZD17YHllYXItZGF5LSR7bW9udGguZGF0ZS5mb3JtYXQoJ1lZWVktTU0nKX0tJHtkYXlJbmZvLmRheS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuICAgICAgICAgICAgb25DbGljaz17KGUpID0+IGhhbmRsZURheUNsaWNrKGRheUluZm8uZGF5LCBlKX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICdyZWxhdGl2ZSBmbGV4IGFzcGVjdC1zcXVhcmUgdy1mdWxsIGN1cnNvci1wb2ludGVyIGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlcicsXG4gICAgICAgICAgICAgICdob3ZlcjpiZy1hY2NlbnQgcm91bmRlZC1zbSB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0yMDAnLFxuICAgICAgICAgICAgICAhZGF5SW5mby5pc0N1cnJlbnRNb250aCAmJiAndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIG9wYWNpdHktNTAnLFxuICAgICAgICAgICAgICBkYXlJbmZvLmlzVG9kYXkgJiZcbiAgICAgICAgICAgICAgICAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCByb3VuZGVkLWZ1bGwnLFxuICAgICAgICAgICAgICBkYXlJbmZvLmlzQ3VycmVudERhdGUgJiZcbiAgICAgICAgICAgICAgICAhZGF5SW5mby5pc1RvZGF5ICYmXG4gICAgICAgICAgICAgICAgJ2JnLW11dGVkIHJvdW5kZWQtZnVsbCBmb250LWJvbGQnLFxuICAgICAgICAgICAgICBkYXlJbmZvLmhhc0V2ZW50cyAmJlxuICAgICAgICAgICAgICAgICFkYXlJbmZvLmlzVG9kYXkgJiZcbiAgICAgICAgICAgICAgICAhZGF5SW5mby5pc0N1cnJlbnREYXRlICYmXG4gICAgICAgICAgICAgICAgJ2ZvbnQtbWVkaXVtJ1xuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHRpdGxlPXtcbiAgICAgICAgICAgICAgZGF5SW5mby5oYXNFdmVudHNcbiAgICAgICAgICAgICAgICA/IGAke2RheUluZm8uZXZlbnRDb3VudH0gZXZlbnQke1xuICAgICAgICAgICAgICAgICAgICBkYXlJbmZvLmV2ZW50Q291bnQgPiAxID8gJ3MnIDogJydcbiAgICAgICAgICAgICAgICAgIH1gXG4gICAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtY2VudGVyIGxlYWRpbmctbm9uZVwiPlxuICAgICAgICAgICAgICB7ZGF5SW5mby5kYXkuZGF0ZSgpfVxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICB7LyogRW5oYW5jZWQgZXZlbnQgaW5kaWNhdG9yIC0gc2hvdyBtdWx0aXBsZSBjb2xvcmVkIGRvdHMgZm9yIGRpZmZlcmVudCBldmVudCB0eXBlcyAqL31cbiAgICAgICAgICAgIHtkYXlJbmZvLmhhc0V2ZW50cyAmJiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICAgJ2Fic29sdXRlIGJvdHRvbS0wIGZsZXggdy1mdWxsIGp1c3RpZnktY2VudGVyIHNwYWNlLXgtWzFweF0nLFxuICAgICAgICAgICAgICAgICAgZGF5SW5mby5pc1RvZGF5ID8gJ2JvdHRvbS1bMXB4XScgOiAnJ1xuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7LyogU2hvdyB1cCB0byAzIGV2ZW50IGRvdHMgd2l0aCBkaWZmZXJlbnQgY29sb3JzIGlmIGF2YWlsYWJsZSAqL31cbiAgICAgICAgICAgICAgICB7ZGF5SW5mby5ldmVudENvdW50ID4gMCAmJiAoXG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICAgICAgICdoLVszcHhdIHctWzNweF0gcm91bmRlZC1mdWxsJyxcbiAgICAgICAgICAgICAgICAgICAgICBkYXlJbmZvLmlzVG9kYXkgPyAnYmctcHJpbWFyeS1mb3JlZ3JvdW5kJyA6ICdiZy1wcmltYXJ5J1xuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIHtkYXlJbmZvLmV2ZW50Q291bnQgPiAxICYmIChcbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAgICAgJ2gtWzNweF0gdy1bM3B4XSByb3VuZGVkLWZ1bGwnLFxuICAgICAgICAgICAgICAgICAgICAgIGRheUluZm8uaXNUb2RheSA/ICdiZy1wcmltYXJ5LWZvcmVncm91bmQnIDogJ2JnLWJsdWUtNTAwJ1xuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIHtkYXlJbmZvLmV2ZW50Q291bnQgPiAyICYmIChcbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAgICAgJ2gtWzNweF0gdy1bM3B4XSByb3VuZGVkLWZ1bGwnLFxuICAgICAgICAgICAgICAgICAgICAgIGRheUluZm8uaXNUb2RheSA/ICdiZy1wcmltYXJ5LWZvcmVncm91bmQnIDogJ2JnLWdyZWVuLTUwMCdcbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApKX1cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNjcm9sbEFyZWEgZGF0YS10ZXN0aWQ9XCJ5ZWFyLXZpZXdcIiBjbGFzc05hbWU9XCJoLWZ1bGxcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJ5ZWFyLWdyaWRcIlxuICAgICAgICBjbGFzc05hbWU9XCJncmlkIGF1dG8tcm93cy1mciBncmlkLWNvbHMtMSBnYXAtNCBwLTQgc206Z3JpZC1jb2xzLTIgbGc6Z3JpZC1jb2xzLTNcIlxuICAgICAgPlxuICAgICAgICB7bW9udGhzV2l0aEV2ZW50Q291bnQubWFwKChtb250aCwgaW5kZXgpID0+IChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBrZXk9e21vbnRoLm5hbWV9XG4gICAgICAgICAgICBkYXRhLXRlc3RpZD17YHllYXItbW9udGgtJHttb250aC5kYXRlLmZvcm1hdCgnTU0nKX1gfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlTW9udGhDbGljayhtb250aC5kYXRlKX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImhvdmVyOmJvcmRlci1wcmltYXJ5IGZsZXggY3Vyc29yLXBvaW50ZXIgZmxleC1jb2wgcm91bmRlZC1sZyBib3JkZXIgcC0zIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTIwMCBob3ZlcjpzY2FsZS1bMS4wMV0gaG92ZXI6c2hhZG93LW1kXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8QW5pbWF0ZVByZXNlbmNlIG1vZGU9XCJ3YWl0XCI+XG4gICAgICAgICAgICAgIDxtb3Rpb24uZGl2XG4gICAgICAgICAgICAgICAga2V5PXtgbW9udGgtJHtpbmRleH1gfVxuICAgICAgICAgICAgICAgIGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG4gICAgICAgICAgICAgICAgYW5pbWF0ZT17eyBvcGFjaXR5OiAxLCB5OiAwIH19XG4gICAgICAgICAgICAgICAgZXhpdD17eyBvcGFjaXR5OiAwLCB5OiAtMTAgfX1cbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uPXt7XG4gICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMC4yNSxcbiAgICAgICAgICAgICAgICAgIGVhc2U6ICdlYXNlSW5PdXQnLFxuICAgICAgICAgICAgICAgICAgZGVsYXk6IGluZGV4ICogMC4wNSxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1iLTIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxoM1xuICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2B5ZWFyLW1vbnRoLXRpdGxlLSR7bW9udGguZGF0ZS5mb3JtYXQoJ01NJyl9YH1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtbGcgZm9udC1tZWRpdW1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHttb250aC5uYW1lfVxuICAgICAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgICAgICAge21vbnRoLmV2ZW50Q291bnQgPiAwICYmIChcbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgeWVhci1tb250aC1ldmVudC1jb3VudC0ke21vbnRoLmRhdGUuZm9ybWF0KCdNTScpfWB9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgcm91bmRlZC1mdWxsIHB4LTIgcHktMSB0ZXh0LXhzXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge21vbnRoLmV2ZW50Q291bnR9eycgJ31cbiAgICAgICAgICAgICAgICAgICAge21vbnRoLmV2ZW50Q291bnQgPT09IDEgPyB0KCdldmVudCcpIDogdCgnZXZlbnRzJyl9XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9tb3Rpb24uZGl2PlxuICAgICAgICAgICAgPC9BbmltYXRlUHJlc2VuY2U+XG5cbiAgICAgICAgICAgIHtyZW5kZXJNaW5pQ2FsZW5kYXIobW9udGgpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvU2Nyb2xsQXJlYT5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBZZWFyVmlld1xuIiwKICAgICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBNb250aFZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL21vbnRoLXZpZXcvY29tcG9uZW50cy92aWV3L21vbnRoLXZpZXcnXG5pbXBvcnQgV2Vla1ZpZXcgZnJvbSAnQC9mZWF0dXJlcy93ZWVrLXZpZXcvdmlldy93ZWVrLXZpZXcnXG5pbXBvcnQgRGF5VmlldyBmcm9tICdAL2ZlYXR1cmVzL2RheS12aWV3L2NvbXBvbmVudHMvdmlldy9kYXktdmlldydcbmltcG9ydCB7IEV2ZW50Rm9ybSB9IGZyb20gJy4uL2V2ZW50LWZvcm0vZXZlbnQtZm9ybSdcbmltcG9ydCB7IEhlYWRlciB9IGZyb20gJy4uL2hlYWRlcidcbmltcG9ydCBZZWFyVmlldyBmcm9tICdAL2ZlYXR1cmVzL3llYXItdmlldy92aWV3L3llYXItdmlldydcbmltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgbW90aW9uIH0gZnJvbSAnbW90aW9uL3JlYWN0J1xuaW1wb3J0IHsgQ2FsZW5kYXJEbmRDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9kcmFnLWFuZC1kcm9wL2NhbGVuZGFyLWRuZC1jb250ZXh0J1xuaW1wb3J0IHsgQ2FsZW5kYXJQcm92aWRlciB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9wcm92aWRlcidcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWR1cGxpY2F0ZXNcbmltcG9ydCAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgV0VFS19EQVlTX05VTUJFUl9NQVAgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgeyBub3JtYWxpemVQdWJsaWNGYWNpbmdDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9saWInXG5pbXBvcnQgdHlwZSB7IElsYW15Q2FsZW5kYXJQcm9wcyB9IGZyb20gJy4vdHlwZXMnXG5cbmNvbnN0IENhbGVuZGFyQ29udGVudDogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHtcbiAgICB2aWV3LFxuICAgIGlzRXZlbnRGb3JtT3BlbixcbiAgICBjbG9zZUV2ZW50Rm9ybSxcbiAgICBzZWxlY3RlZEV2ZW50LFxuICAgIHNlbGVjdGVkRGF0ZSxcbiAgICBhZGRFdmVudCxcbiAgICB1cGRhdGVFdmVudCxcbiAgICBkZWxldGVFdmVudCxcbiAgICBkYXlNYXhFdmVudHMsXG4gIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIGNvbnN0IHZpZXdNYXAgPSB7XG4gICAgbW9udGg6IDxNb250aFZpZXcga2V5PVwibW9udGhcIiBkYXlNYXhFdmVudHM9e2RheU1heEV2ZW50c30gLz4sXG4gICAgd2VlazogPFdlZWtWaWV3IGtleT1cIndlZWtcIiAvPixcbiAgICBkYXk6IDxEYXlWaWV3IGtleT1cImRheVwiIC8+LFxuICAgIHllYXI6IDxZZWFyVmlldyBrZXk9XCJ5ZWFyXCIgLz4sXG4gIH1cblxuICBjb25zdCBoYW5kbGVPblVwZGF0ZSA9IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuICAgIHVwZGF0ZUV2ZW50KGV2ZW50LmlkLCBldmVudClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZU9uRGVsZXRlID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG4gICAgZGVsZXRlRXZlbnQoZXZlbnQuaWQpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCB3LWZ1bGwgaC1mdWxsXCI+XG4gICAgICA8SGVhZGVyIGNsYXNzTmFtZT1cInAtMVwiIC8+XG5cbiAgICAgIHsvKiBDYWxlbmRhciBCb2R5IHdpdGggQW5pbWF0ZVByZXNlbmNlIGZvciB2aWV3IHRyYW5zaXRpb25zICovfVxuICAgICAgPENhbGVuZGFyRG5kQ29udGV4dD5cbiAgICAgICAgPEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgIDxtb3Rpb24uZGl2XG4gICAgICAgICAgICBrZXk9e3ZpZXd9XG4gICAgICAgICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHg6IDIwIH19XG4gICAgICAgICAgICBhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHg6IDAgfX1cbiAgICAgICAgICAgIGV4aXQ9e3sgb3BhY2l0eTogMCwgeDogLTIwIH19XG4gICAgICAgICAgICB0cmFuc2l0aW9uPXt7IGR1cmF0aW9uOiAwLjEsIGVhc2U6ICdlYXNlSW5PdXQnIH19XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1bY2FsYygxMDAlLTMuNXJlbSldXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dmlld01hcFt2aWV3XX1cbiAgICAgICAgICA8L21vdGlvbi5kaXY+XG4gICAgICAgIDwvQW5pbWF0ZVByZXNlbmNlPlxuICAgICAgPC9DYWxlbmRhckRuZENvbnRleHQ+XG5cbiAgICAgIHsvKiBFdmVudCBGb3JtIERpYWxvZyAqL31cbiAgICAgIHtpc0V2ZW50Rm9ybU9wZW4gJiYgKFxuICAgICAgICA8RXZlbnRGb3JtXG4gICAgICAgICAgb25DbG9zZT17Y2xvc2VFdmVudEZvcm19XG4gICAgICAgICAgc2VsZWN0ZWRFdmVudD17c2VsZWN0ZWRFdmVudH1cbiAgICAgICAgICBzZWxlY3RlZERhdGU9e3NlbGVjdGVkRGF0ZX1cbiAgICAgICAgICBvbkFkZD17YWRkRXZlbnR9XG4gICAgICAgICAgb25VcGRhdGU9e2hhbmRsZU9uVXBkYXRlfVxuICAgICAgICAgIG9uRGVsZXRlPXtoYW5kbGVPbkRlbGV0ZX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gIClcbn1cblxuY29uc3QgREVGQVVMVF9EQVlfTUFYX0VWRU5UUyA9IDRcbmV4cG9ydCBjb25zdCBJbGFteUNhbGVuZGFyOiBSZWFjdC5GQzxJbGFteUNhbGVuZGFyUHJvcHM+ID0gKHtcbiAgZXZlbnRzLFxuICBmaXJzdERheU9mV2VlayA9ICdzdW5kYXknLFxuICBpbml0aWFsVmlldyA9ICdtb250aCcsXG4gIHJlbmRlckV2ZW50LFxuICBvbkV2ZW50Q2xpY2ssXG4gIG9uQ2VsbENsaWNrLFxuICBvblZpZXdDaGFuZ2UsXG4gIG9uRXZlbnRBZGQsXG4gIG9uRXZlbnRVcGRhdGUsXG4gIG9uRXZlbnREZWxldGUsXG4gIG9uRGF0ZUNoYW5nZSxcbiAgbG9jYWxlLFxuICB0cmFuc2xhdGlvbnMsXG4gIHRyYW5zbGF0b3IsXG4gIHRpbWV6b25lLFxuICBkaXNhYmxlQ2VsbENsaWNrLFxuICBkaXNhYmxlRXZlbnRDbGljayxcbiAgZGlzYWJsZURyYWdBbmREcm9wLFxuICBkYXlNYXhFdmVudHMgPSBERUZBVUxUX0RBWV9NQVhfRVZFTlRTLFxuICBzdGlja3lWaWV3SGVhZGVyID0gdHJ1ZSxcbiAgdmlld0hlYWRlckNsYXNzTmFtZSA9ICcnLFxuICBoZWFkZXJDb21wb25lbnQsXG4gIGhlYWRlckNsYXNzTmFtZSxcbn0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8Q2FsZW5kYXJQcm92aWRlclxuICAgICAgZXZlbnRzPXtub3JtYWxpemVQdWJsaWNGYWNpbmdDYWxlbmRhckV2ZW50KGV2ZW50cyl9XG4gICAgICBmaXJzdERheU9mV2Vlaz17V0VFS19EQVlTX05VTUJFUl9NQVBbZmlyc3REYXlPZldlZWtdfVxuICAgICAgaW5pdGlhbFZpZXc9e2luaXRpYWxWaWV3fVxuICAgICAgcmVuZGVyRXZlbnQ9e3JlbmRlckV2ZW50fVxuICAgICAgb25FdmVudENsaWNrPXtvbkV2ZW50Q2xpY2t9XG4gICAgICBvbkNlbGxDbGljaz17b25DZWxsQ2xpY2t9XG4gICAgICBvblZpZXdDaGFuZ2U9e29uVmlld0NoYW5nZX1cbiAgICAgIG9uRXZlbnRBZGQ9e29uRXZlbnRBZGR9XG4gICAgICBvbkV2ZW50VXBkYXRlPXtvbkV2ZW50VXBkYXRlfVxuICAgICAgb25FdmVudERlbGV0ZT17b25FdmVudERlbGV0ZX1cbiAgICAgIG9uRGF0ZUNoYW5nZT17b25EYXRlQ2hhbmdlfVxuICAgICAgbG9jYWxlPXtsb2NhbGV9XG4gICAgICB0cmFuc2xhdGlvbnM9e3RyYW5zbGF0aW9uc31cbiAgICAgIHRyYW5zbGF0b3I9e3RyYW5zbGF0b3J9XG4gICAgICB0aW1lem9uZT17dGltZXpvbmV9XG4gICAgICBkaXNhYmxlQ2VsbENsaWNrPXtkaXNhYmxlQ2VsbENsaWNrfVxuICAgICAgZGlzYWJsZUV2ZW50Q2xpY2s9e2Rpc2FibGVFdmVudENsaWNrfVxuICAgICAgZGlzYWJsZURyYWdBbmREcm9wPXtkaXNhYmxlRHJhZ0FuZERyb3B9XG4gICAgICBkYXlNYXhFdmVudHM9e2RheU1heEV2ZW50c31cbiAgICAgIHN0aWNreVZpZXdIZWFkZXI9e3N0aWNreVZpZXdIZWFkZXJ9XG4gICAgICB2aWV3SGVhZGVyQ2xhc3NOYW1lPXt2aWV3SGVhZGVyQ2xhc3NOYW1lfVxuICAgICAgaGVhZGVyQ29tcG9uZW50PXtoZWFkZXJDb21wb25lbnR9XG4gICAgICBoZWFkZXJDbGFzc05hbWU9e2hlYWRlckNsYXNzTmFtZX1cbiAgICA+XG4gICAgICA8Q2FsZW5kYXJDb250ZW50IC8+XG4gICAgPC9DYWxlbmRhclByb3ZpZGVyPlxuICApXG59XG4iLAogICAgImltcG9ydCB7XG4gIERuZENvbnRleHQsXG4gIERyYWdPdmVybGF5LFxuICBNb3VzZVNlbnNvcixcbiAgcG9pbnRlcldpdGhpbixcbiAgVG91Y2hTZW5zb3IsXG4gIHVzZVNlbnNvcixcbiAgdXNlU2Vuc29ycyxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHtcbiAgRHJhZ0NhbmNlbEV2ZW50LFxuICBEcmFnRW5kRXZlbnQsXG4gIERyYWdTdGFydEV2ZW50LFxufSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHsgc25hcENlbnRlclRvQ3Vyc29yIH0gZnJvbSAnQGRuZC1raXQvbW9kaWZpZXJzJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgaXNSZWN1cnJpbmdFdmVudCB9IGZyb20gJ0AvbGliL3JlY3VycmVuY2UtaGFuZGxlcidcbmltcG9ydCB7IFJlY3VycmVuY2VFZGl0RGlhbG9nIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL2NvbXBvbmVudHMvcmVjdXJyZW5jZS1lZGl0LWRpYWxvZydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRTY29wZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcblxuaW50ZXJmYWNlIENhbGVuZGFyRG5kQ29udGV4dFByb3BzIHtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ2FsZW5kYXJEbmRDb250ZXh0KHsgY2hpbGRyZW4gfTogQ2FsZW5kYXJEbmRDb250ZXh0UHJvcHMpIHtcbiAgY29uc3QgeyB1cGRhdGVFdmVudCwgdXBkYXRlUmVjdXJyaW5nRXZlbnQsIHZpZXcsIGRpc2FibGVEcmFnQW5kRHJvcCB9ID1cbiAgICB1c2VDYWxlbmRhckNvbnRleHQoKVxuICBjb25zdCBbYWN0aXZlRXZlbnQsIHNldEFjdGl2ZUV2ZW50XSA9IFJlYWN0LnVzZVN0YXRlPENhbGVuZGFyRXZlbnQgfCBudWxsPihcbiAgICBudWxsXG4gIClcblxuICAvLyBTdGF0ZSBmb3IgcmVjdXJyaW5nIGV2ZW50IGRpYWxvZ1xuICBjb25zdCBbcmVjdXJyaW5nRGlhbG9nLCBzZXRSZWN1cnJpbmdEaWFsb2ddID0gdXNlU3RhdGU8e1xuICAgIGlzT3BlbjogYm9vbGVhblxuICAgIGV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuICAgIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4gfCBudWxsXG4gIH0+KHtcbiAgICBpc09wZW46IGZhbHNlLFxuICAgIGV2ZW50OiBudWxsLFxuICAgIHVwZGF0ZXM6IG51bGwsXG4gIH0pXG5cbiAgLy8gQ29uZmlndXJlIHNlbnNvcnMgd2l0aCByZWR1Y2VkIGFjdGl2YXRpb24gY29uc3RyYWludHMgZm9yIGVhc2llciBkcmFnZ2luZ1xuICBjb25zdCBtb3VzZVNlbnNvciA9IHVzZVNlbnNvcihNb3VzZVNlbnNvciwge1xuICAgIC8vIFJlcXVpcmUgbWluaW1hbCBtb3ZlbWVudCBiZWZvcmUgYWN0aXZhdGluZ1xuICAgIGFjdGl2YXRpb25Db25zdHJhaW50OiB7XG4gICAgICBkaXN0YW5jZTogMixcbiAgICB9LFxuICB9KVxuXG4gIGNvbnN0IHRvdWNoU2Vuc29yID0gdXNlU2Vuc29yKFRvdWNoU2Vuc29yLCB7XG4gICAgLy8gUmVkdWNlIGRlbGF5IGZvciB0b3VjaCBkZXZpY2VzXG4gICAgYWN0aXZhdGlvbkNvbnN0cmFpbnQ6IHtcbiAgICAgIGRlbGF5OiAxMDAsXG4gICAgICB0b2xlcmFuY2U6IDUsXG4gICAgfSxcbiAgfSlcblxuICBjb25zdCBzZW5zb3JzID0gdXNlU2Vuc29ycyhtb3VzZVNlbnNvciwgdG91Y2hTZW5zb3IpXG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHBlcmZvcm0gdGhlIGFjdHVhbCBldmVudCB1cGRhdGVcbiAgY29uc3QgcGVyZm9ybUV2ZW50VXBkYXRlID0gKFxuICAgIGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuICAgIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD5cbiAgKSA9PiB7XG4gICAgLy8gVmFsaWRhdGUgaW5wdXRzXG4gICAgaWYgKCFldmVudCB8fCAhZXZlbnQuaWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghdXBkYXRlcyB8fCBPYmplY3Qua2V5cyh1cGRhdGVzKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChpc1JlY3VycmluZ0V2ZW50KGV2ZW50KSkge1xuICAgICAgLy8gU2hvdyBkaWFsb2cgZm9yIHJlY3VycmluZyBldmVudHNcbiAgICAgIHNldFJlY3VycmluZ0RpYWxvZyh7XG4gICAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIHVwZGF0ZXMsXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEaXJlY3RseSB1cGRhdGUgcmVndWxhciBldmVudHNcbiAgICAgIHVwZGF0ZUV2ZW50KGV2ZW50LmlkLCB1cGRhdGVzKVxuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSByZWN1cnJpbmcgZXZlbnQgZGlhbG9nIGNvbmZpcm1hdGlvblxuICBjb25zdCBoYW5kbGVSZWN1cnJpbmdFdmVudENvbmZpcm0gPSAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcbiAgICBpZiAoIXJlY3VycmluZ0RpYWxvZy5ldmVudCB8fCAhcmVjdXJyaW5nRGlhbG9nLnVwZGF0ZXMpIHtcbiAgICAgIHNldFJlY3VycmluZ0RpYWxvZyh7IGlzT3BlbjogZmFsc2UsIGV2ZW50OiBudWxsLCB1cGRhdGVzOiBudWxsIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgdXBkYXRlUmVjdXJyaW5nRXZlbnQocmVjdXJyaW5nRGlhbG9nLmV2ZW50LCByZWN1cnJpbmdEaWFsb2cudXBkYXRlcywge1xuICAgICAgICBzY29wZSxcbiAgICAgICAgZXZlbnREYXRlOiByZWN1cnJpbmdEaWFsb2cuZXZlbnQuc3RhcnQsXG4gICAgICB9KVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gU2lsZW50bHkgaGFuZGxlIGVycm9yIGFuZCByZXNldCBkaWFsb2cgc3RhdGVcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0UmVjdXJyaW5nRGlhbG9nKHsgaXNPcGVuOiBmYWxzZSwgZXZlbnQ6IG51bGwsIHVwZGF0ZXM6IG51bGwgfSlcbiAgICB9XG4gIH1cblxuICAvLyBIYW5kbGUgcmVjdXJyaW5nIGV2ZW50IGRpYWxvZyBjbG9zZVxuICBjb25zdCBoYW5kbGVSZWN1cnJpbmdFdmVudENsb3NlID0gKCkgPT4ge1xuICAgIHNldFJlY3VycmluZ0RpYWxvZyh7IGlzT3BlbjogZmFsc2UsIGV2ZW50OiBudWxsLCB1cGRhdGVzOiBudWxsIH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVEcmFnU3RhcnQgPSAoZXZlbnQ6IERyYWdTdGFydEV2ZW50KSA9PiB7XG4gICAgY29uc3QgeyBhY3RpdmUgfSA9IGV2ZW50XG5cbiAgICAvLyBTZXQgdGhlIGFjdGl2ZSBldmVudCBiYXNlZCBvbiB0aGUgZXZlbnQgZGF0YVxuICAgIGlmIChhY3RpdmUuZGF0YS5jdXJyZW50Py50eXBlID09PSAnY2FsZW5kYXItZXZlbnQnKSB7XG4gICAgICBzZXRBY3RpdmVFdmVudChhY3RpdmUuZGF0YS5jdXJyZW50LmV2ZW50KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURyYWdFbmQgPSAoZXZlbnQ6IERyYWdFbmRFdmVudCkgPT4ge1xuICAgIGNvbnN0IHsgYWN0aXZlLCBvdmVyIH0gPSBldmVudFxuXG4gICAgaWYgKCFhY3RpdmUgfHwgIW92ZXIgfHwgIWFjdGl2ZUV2ZW50KSB7XG4gICAgICBzZXRBY3RpdmVFdmVudChudWxsKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKG92ZXIuZGF0YS5jdXJyZW50Py50eXBlID09PSAndGltZS1jZWxsJykge1xuICAgICAgY29uc3QgeyBkYXRlLCBob3VyID0gMCwgbWludXRlID0gMCB9ID0gb3Zlci5kYXRhLmN1cnJlbnRcblxuICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBldmVudCBkdXJhdGlvbiBpbiBtaW51dGVzXG4gICAgICBjb25zdCBzdGFydCA9IGFjdGl2ZUV2ZW50LnN0YXJ0XG4gICAgICBjb25zdCBlbmQgPSBhY3RpdmVFdmVudC5lbmRcbiAgICAgIGNvbnN0IGR1cmF0aW9uTWludXRlcyA9IGVuZC5kaWZmKHN0YXJ0LCAnbWludXRlJylcblxuICAgICAgLy8gQ3JlYXRlIG5ldyBzdGFydCB0aW1lIGJhc2VkIG9uIHRoZSBkcm9wIHRhcmdldFxuICAgICAgY29uc3QgbmV3U3RhcnQgPSBkYXlqcyhkYXRlKVxuICAgICAgICAuaG91cihob3VyKVxuICAgICAgICAubWludXRlKG1pbnV0ZSB8fCAwKVxuXG4gICAgICAvLyBDcmVhdGUgbmV3IGVuZCB0aW1lIGJ5IGFkZGluZyB0aGUgb3JpZ2luYWwgZHVyYXRpb25cbiAgICAgIGxldCBuZXdFbmQgPSBuZXdTdGFydC5hZGQoZHVyYXRpb25NaW51dGVzLCAnbWludXRlJylcbiAgICAgIGlmIChuZXdFbmQuaXNTYW1lKG5ld0VuZC5zdGFydE9mKCdkYXknKSkpIHtcbiAgICAgICAgLy8gSWYgdGhlIG5ldyBlbmQgdGltZSBpcyBhdCBtaWRuaWdodCwgc2V0IGl0IHRvIDI0IGhvdXJzIG9mIHBhcnRpYWwgZGF5XG4gICAgICAgIG5ld0VuZCA9IG5ld0VuZC5zdWJ0cmFjdCgxLCAnZGF5JykuZW5kT2YoJ2RheScpXG4gICAgICB9XG5cbiAgICAgIC8vIFVwZGF0ZSB0aGUgZXZlbnQgd2l0aCBuZXcgdGltZXNcbiAgICAgIHBlcmZvcm1FdmVudFVwZGF0ZShhY3RpdmVFdmVudCwge1xuICAgICAgICBzdGFydDogbmV3U3RhcnQsXG4gICAgICAgIGVuZDogbmV3RW5kLFxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKG92ZXIuZGF0YS5jdXJyZW50Py50eXBlID09PSAnZGF5LWNlbGwnKSB7XG4gICAgICBjb25zdCB7IGRhdGUgfSA9IG92ZXIuZGF0YS5jdXJyZW50XG4gICAgICBjb25zdCBuZXdEYXRlID0gZGF5anMoZGF0ZSlcblxuICAgICAgLy8gRm9yIG11bHRpLWRheSBldmVudHMsIHdlIG5lZWQgdG8gcHJlc2VydmUgdGhlIGR1cmF0aW9uIGluIGRheXNcbiAgICAgIGNvbnN0IGlzTXVsdGlEYXlFdmVudCA9ICFhY3RpdmVFdmVudC5zdGFydC5pc1NhbWUoYWN0aXZlRXZlbnQuZW5kLCAnZGF5JylcbiAgICAgIGNvbnN0IHN0YXJ0ID0gYWN0aXZlRXZlbnQuc3RhcnRcbiAgICAgIGNvbnN0IGVuZCA9IGFjdGl2ZUV2ZW50LmVuZFxuXG4gICAgICBpZiAoaXNNdWx0aURheUV2ZW50KSB7XG4gICAgICAgIGlmICh2aWV3ID09PSAnd2VlaycpIHtcbiAgICAgICAgICAvLyBHZXQgdGltZSBjb21wb25lbnRzIHRvIHByZXNlcnZlXG4gICAgICAgICAgY29uc3Qgc3RhcnRIb3VyID0gc3RhcnQuaG91cigpXG4gICAgICAgICAgY29uc3Qgc3RhcnRNaW51dGUgPSBzdGFydC5taW51dGUoKVxuICAgICAgICAgIGNvbnN0IGVuZEhvdXIgPSBlbmQuaG91cigpXG4gICAgICAgICAgY29uc3QgZW5kTWludXRlID0gZW5kLm1pbnV0ZSgpXG5cbiAgICAgICAgICAvLyBDYWxjdWxhdGUgZHVyYXRpb24gaW4gZGF5cyB0byBwcmVzZXJ2ZVxuICAgICAgICAgIGNvbnN0IGR1cmF0aW9uRGF5cyA9IGVuZC5kaWZmKHN0YXJ0LCAnZGF5JylcblxuICAgICAgICAgIC8vIENyZWF0ZSBuZXcgc3RhcnQgYW5kIGVuZCBkYXRlc1xuICAgICAgICAgIGNvbnN0IG5ld1N0YXJ0ID0gbmV3RGF0ZVxuICAgICAgICAgICAgLnN0YXJ0T2YoJ2RheScpXG4gICAgICAgICAgICAuaG91cihzdGFydEhvdXIpXG4gICAgICAgICAgICAubWludXRlKHN0YXJ0TWludXRlKVxuICAgICAgICAgIGNvbnN0IG5ld0VuZCA9IG5ld1N0YXJ0XG4gICAgICAgICAgICAuYWRkKGR1cmF0aW9uRGF5cywgJ2RheScpXG4gICAgICAgICAgICAuaG91cihlbmRIb3VyKVxuICAgICAgICAgICAgLm1pbnV0ZShlbmRNaW51dGUpXG5cbiAgICAgICAgICBwZXJmb3JtRXZlbnRVcGRhdGUoYWN0aXZlRXZlbnQsIHtcbiAgICAgICAgICAgIHN0YXJ0OiBuZXdTdGFydCxcbiAgICAgICAgICAgIGVuZDogbmV3RW5kLFxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRm9yIG90aGVyIHZpZXdzIGxpa2UgbW9udGggdmlld1xuICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgZGF0ZSBzaGlmdCAoaG93IG1hbnkgZGF5cyB3ZSdyZSBtb3ZpbmcgdGhlIGV2ZW50KVxuICAgICAgICAgIGNvbnN0IGRheXNEaWZmZXJlbmNlID0gbmV3RGF0ZS5kaWZmKHN0YXJ0LnN0YXJ0T2YoJ2RheScpLCAnZGF5JylcblxuICAgICAgICAgIC8vIENhbGN1bGF0ZSBuZXcgc3RhcnQgYW5kIGVuZCB3aGlsZSBwcmVzZXJ2aW5nIHRpbWUgY29tcG9uZW50c1xuICAgICAgICAgIGNvbnN0IG5ld1N0YXJ0ID0gc3RhcnQuYWRkKGRheXNEaWZmZXJlbmNlLCAnZGF5JylcbiAgICAgICAgICBjb25zdCBuZXdFbmQgPSBlbmQuYWRkKGRheXNEaWZmZXJlbmNlLCAnZGF5JylcblxuICAgICAgICAgIHBlcmZvcm1FdmVudFVwZGF0ZShhY3RpdmVFdmVudCwge1xuICAgICAgICAgICAgc3RhcnQ6IG5ld1N0YXJ0LFxuICAgICAgICAgICAgZW5kOiBuZXdFbmQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIHNpbmdsZS1kYXkgZXZlbnRzLCBtYWludGFpbiB0aGUgdGltZSBidXQgY2hhbmdlIHRoZSBkYXRlXG4gICAgICAgIGNvbnN0IG5ld1N0YXJ0ID0gbmV3RGF0ZVxuICAgICAgICAgIC5ob3VyKGFjdGl2ZUV2ZW50LnN0YXJ0LmhvdXIoKSlcbiAgICAgICAgICAubWludXRlKGFjdGl2ZUV2ZW50LnN0YXJ0Lm1pbnV0ZSgpKVxuXG4gICAgICAgIC8vIENhbGN1bGF0ZSBldmVudCBkdXJhdGlvbiBhbmQgc2V0IG5ldyBlbmQgdGltZVxuICAgICAgICBjb25zdCBkdXJhdGlvbk1pbnV0ZXMgPSBhY3RpdmVFdmVudC5lbmQuZGlmZihcbiAgICAgICAgICBhY3RpdmVFdmVudC5zdGFydCxcbiAgICAgICAgICAnbWludXRlJ1xuICAgICAgICApXG4gICAgICAgIGNvbnN0IG5ld0VuZCA9IG5ld1N0YXJ0LmFkZChkdXJhdGlvbk1pbnV0ZXMsICdtaW51dGUnKVxuXG4gICAgICAgIHBlcmZvcm1FdmVudFVwZGF0ZShhY3RpdmVFdmVudCwge1xuICAgICAgICAgIHN0YXJ0OiBuZXdTdGFydCxcbiAgICAgICAgICBlbmQ6IG5ld0VuZCxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRBY3RpdmVFdmVudChudWxsKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRHJhZ0NhbmNlbCA9IChfZXZlbnQ6IERyYWdDYW5jZWxFdmVudCkgPT4ge1xuICAgIHNldEFjdGl2ZUV2ZW50KG51bGwpXG4gIH1cblxuICAvLyBJZiBkcmFnIGFuZCBkcm9wIGlzIGRpc2FibGVkLCBqdXN0IHJldHVybiBjaGlsZHJlbiB3aXRob3V0IERuZENvbnRleHRcbiAgaWYgKGRpc2FibGVEcmFnQW5kRHJvcCkge1xuICAgIHJldHVybiBjaGlsZHJlbiBhcyBSZWFjdC5SZWFjdEVsZW1lbnRcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxEbmRDb250ZXh0XG4gICAgICAgIHNlbnNvcnM9e3NlbnNvcnN9XG4gICAgICAgIG9uRHJhZ1N0YXJ0PXtoYW5kbGVEcmFnU3RhcnR9XG4gICAgICAgIG9uRHJhZ0VuZD17aGFuZGxlRHJhZ0VuZH1cbiAgICAgICAgb25EcmFnQ2FuY2VsPXtoYW5kbGVEcmFnQ2FuY2VsfVxuICAgICAgICBjb2xsaXNpb25EZXRlY3Rpb249e3BvaW50ZXJXaXRoaW59XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPERyYWdPdmVybGF5IG1vZGlmaWVycz17W3NuYXBDZW50ZXJUb0N1cnNvcl19PlxuICAgICAgICAgIHthY3RpdmVFdmVudCAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgJ2N1cnNvci1ncmFiIHRydW5jYXRlIHJvdW5kZWQgYmctYW1iZXItMjAwIHAtMiB0ZXh0LVsxMHB4XSBzaGFkb3ctbGcgc206dGV4dC14cycsXG4gICAgICAgICAgICAgICAgYWN0aXZlRXZlbnQuYmFja2dyb3VuZENvbG9yIHx8ICdiZy1ibHVlLTUwMCcsXG4gICAgICAgICAgICAgICAgYWN0aXZlRXZlbnQuY29sb3IgfHwgJ3RleHQtd2hpdGUnXG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHthY3RpdmVFdmVudD8udGl0bGV9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L0RyYWdPdmVybGF5PlxuICAgICAgPC9EbmRDb250ZXh0PlxuXG4gICAgICB7LyogUmVjdXJyaW5nIGV2ZW50IGVkaXQgZGlhbG9nICovfVxuICAgICAgPFJlY3VycmVuY2VFZGl0RGlhbG9nXG4gICAgICAgIGlzT3Blbj17cmVjdXJyaW5nRGlhbG9nLmlzT3Blbn1cbiAgICAgICAgb25DbG9zZT17aGFuZGxlUmVjdXJyaW5nRXZlbnRDbG9zZX1cbiAgICAgICAgb25Db25maXJtPXtoYW5kbGVSZWN1cnJpbmdFdmVudENvbmZpcm19XG4gICAgICAgIG9wZXJhdGlvblR5cGU9XCJlZGl0XCJcbiAgICAgICAgZXZlbnRUaXRsZT17cmVjdXJyaW5nRGlhbG9nLmV2ZW50Py50aXRsZSB8fCAnJ31cbiAgICAgIC8+XG4gICAgPC8+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IENhbGVuZGFyQ29udGV4dCB9IGZyb20gJy4vY29udGV4dCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7XG4gIGdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzLFxuICB1cGRhdGVSZWN1cnJpbmdFdmVudCBhcyB1cGRhdGVSZWN1cnJpbmdFdmVudEltcGwsXG4gIGRlbGV0ZVJlY3VycmluZ0V2ZW50IGFzIGRlbGV0ZVJlY3VycmluZ0V2ZW50SW1wbCxcbn0gZnJvbSAnQC9saWIvcmVjdXJyZW5jZS1oYW5kbGVyJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdE9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9ucywgVHJhbnNsYXRvckZ1bmN0aW9uIH0gZnJvbSAnQC9saWIvdHJhbnNsYXRpb25zL3R5cGVzJ1xuaW1wb3J0IHsgZGVmYXVsdFRyYW5zbGF0aW9ucyB9IGZyb20gJ0AvbGliL3RyYW5zbGF0aW9ucy9kZWZhdWx0J1xuXG5pbnRlcmZhY2UgQ2FsZW5kYXJQcm92aWRlclByb3BzIHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZVxuICBldmVudHM/OiBDYWxlbmRhckV2ZW50W11cbiAgZmlyc3REYXlPZldlZWs/OiBudW1iZXIgLy8gMCBmb3IgU3VuZGF5LCAxIGZvciBNb25kYXksIGV0Yy5cbiAgaW5pdGlhbFZpZXc/OiAnbW9udGgnIHwgJ3dlZWsnIHwgJ2RheScgfCAneWVhcidcbiAgcmVuZGVyRXZlbnQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IFJlYWN0Tm9kZVxuICBvbkV2ZW50Q2xpY2s/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgb25DZWxsQ2xpY2s/OiAoc3RhcnREYXRlOiBkYXlqcy5EYXlqcywgZW5kRGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcbiAgb25WaWV3Q2hhbmdlPzogKHZpZXc6ICdtb250aCcgfCAnd2VlaycgfCAnZGF5JyB8ICd5ZWFyJykgPT4gdm9pZFxuICBvbkV2ZW50QWRkPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG4gIG9uRXZlbnRVcGRhdGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgb25FdmVudERlbGV0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuICBvbkRhdGVDaGFuZ2U/OiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcbiAgbG9jYWxlPzogc3RyaW5nXG4gIHRpbWV6b25lPzogc3RyaW5nXG4gIGRpc2FibGVDZWxsQ2xpY2s/OiBib29sZWFuXG4gIGRpc2FibGVFdmVudENsaWNrPzogYm9vbGVhblxuICBkaXNhYmxlRHJhZ0FuZERyb3A/OiBib29sZWFuXG4gIGRheU1heEV2ZW50czogbnVtYmVyXG4gIHN0aWNreVZpZXdIZWFkZXI/OiBib29sZWFuXG4gIHZpZXdIZWFkZXJDbGFzc05hbWU/OiBzdHJpbmdcbiAgaGVhZGVyQ29tcG9uZW50PzogUmVhY3ROb2RlIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY29tcG9uZW50XG4gIGhlYWRlckNsYXNzTmFtZT86IHN0cmluZyAvLyBPcHRpb25hbCBjdXN0b20gaGVhZGVyIGNsYXNzXG4gIC8vIFRyYW5zbGF0aW9uIG9wdGlvbnMgLSBwcm92aWRlIGVpdGhlciB0cmFuc2xhdGlvbnMgb2JqZWN0IE9SIHRyYW5zbGF0b3IgZnVuY3Rpb25cbiAgdHJhbnNsYXRpb25zPzogVHJhbnNsYXRpb25zXG4gIHRyYW5zbGF0b3I/OiBUcmFuc2xhdG9yRnVuY3Rpb25cbn1cblxuZXhwb3J0IGNvbnN0IENhbGVuZGFyUHJvdmlkZXI6IFJlYWN0LkZDPENhbGVuZGFyUHJvdmlkZXJQcm9wcz4gPSAoe1xuICBjaGlsZHJlbixcbiAgZXZlbnRzID0gW10sXG4gIGZpcnN0RGF5T2ZXZWVrID0gMCwgLy8gRGVmYXVsdCB0byBTdW5kYXksXG4gIGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcbiAgcmVuZGVyRXZlbnQsXG4gIG9uRXZlbnRDbGljayxcbiAgb25DZWxsQ2xpY2ssXG4gIG9uVmlld0NoYW5nZSxcbiAgb25FdmVudEFkZCxcbiAgb25FdmVudFVwZGF0ZSxcbiAgb25FdmVudERlbGV0ZSxcbiAgb25EYXRlQ2hhbmdlLFxuICBsb2NhbGUsXG4gIHRpbWV6b25lLFxuICBkaXNhYmxlQ2VsbENsaWNrLFxuICBkaXNhYmxlRXZlbnRDbGljayxcbiAgZGlzYWJsZURyYWdBbmREcm9wLFxuICBkYXlNYXhFdmVudHMsXG4gIHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuICB2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG4gIGhlYWRlckNvbXBvbmVudCxcbiAgaGVhZGVyQ2xhc3NOYW1lLFxuICB0cmFuc2xhdGlvbnMsXG4gIHRyYW5zbGF0b3IsXG59KSA9PiB7XG4gIC8vIFN0YXRlXG4gIGNvbnN0IFtjdXJyZW50RGF0ZSwgc2V0Q3VycmVudERhdGVdID0gdXNlU3RhdGU8ZGF5anMuRGF5anM+KGRheWpzKCkpXG4gIGNvbnN0IFt2aWV3LCBzZXRWaWV3XSA9IHVzZVN0YXRlPCdtb250aCcgfCAnd2VlaycgfCAnZGF5JyB8ICd5ZWFyJz4oXG4gICAgaW5pdGlhbFZpZXdcbiAgKVxuICBjb25zdCBbY3VycmVudEV2ZW50cywgc2V0Q3VycmVudEV2ZW50c10gPSB1c2VTdGF0ZTxDYWxlbmRhckV2ZW50W10+KGV2ZW50cylcbiAgY29uc3QgW2lzRXZlbnRGb3JtT3Blbiwgc2V0SXNFdmVudEZvcm1PcGVuXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKVxuICBjb25zdCBbc2VsZWN0ZWRFdmVudCwgc2V0U2VsZWN0ZWRFdmVudF0gPSB1c2VTdGF0ZTxDYWxlbmRhckV2ZW50IHwgbnVsbD4obnVsbClcbiAgY29uc3QgW3NlbGVjdGVkRGF0ZSwgc2V0U2VsZWN0ZWREYXRlXSA9IHVzZVN0YXRlPGRheWpzLkRheWpzIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW2N1cnJlbnRMb2NhbGUsIHNldEN1cnJlbnRMb2NhbGVdID0gdXNlU3RhdGU8c3RyaW5nPihsb2NhbGUgfHwgJ2VuJylcbiAgY29uc3QgW2N1cnJlbnRUaW1lem9uZSwgc2V0Q3VycmVudFRpbWV6b25lXSA9IHVzZVN0YXRlPHN0cmluZz4odGltZXpvbmUgfHwgJycpXG5cbiAgLy8gQ3JlYXRlIHRyYW5zbGF0aW9uIGZ1bmN0aW9uXG4gIGNvbnN0IHQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAodHJhbnNsYXRvcikge1xuICAgICAgLy8gVXNlIHByb3ZpZGVkIHRyYW5zbGF0b3IgZnVuY3Rpb25cbiAgICAgIHJldHVybiB0cmFuc2xhdG9yXG4gICAgfVxuXG4gICAgaWYgKHRyYW5zbGF0aW9ucykge1xuICAgICAgLy8gVXNlIHByb3ZpZGVkIHRyYW5zbGF0aW9ucyBvYmplY3RcbiAgICAgIHJldHVybiAoa2V5OiBrZXlvZiBUcmFuc2xhdGlvbnMpID0+IHRyYW5zbGF0aW9uc1trZXldIHx8IGtleVxuICAgIH1cbiAgICAvLyBVc2UgZGVmYXVsdCB0cmFuc2xhdGlvbnNcbiAgICByZXR1cm4gKGtleToga2V5b2YgVHJhbnNsYXRpb25zKSA9PiBkZWZhdWx0VHJhbnNsYXRpb25zW2tleV0gfHwga2V5XG4gIH0sIFt0cmFuc2xhdGlvbnMsIHRyYW5zbGF0b3JdKVxuXG4gIC8vIEhlbHBlciBmdW5jdGlvbiB0byBnZXQgZXZlbnRzIGZvciBhIHNwZWNpZmljIGRhdGUgcmFuZ2UgKG9uLWRlbWFuZCBnZW5lcmF0aW9uKVxuICBjb25zdCBnZXRFdmVudHNGb3JEYXRlUmFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoc3RhcnREYXRlOiBkYXlqcy5EYXlqcywgZW5kRGF0ZTogZGF5anMuRGF5anMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuICAgICAgY29uc3QgYWxsRXZlbnRzOiBDYWxlbmRhckV2ZW50W10gPSBbXVxuXG4gICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGN1cnJlbnRFdmVudHMpIHtcbiAgICAgICAgaWYgKGV2ZW50LnJydWxlKSB7XG4gICAgICAgICAgLy8gR2VuZXJhdGUgcmVjdXJyaW5nIGluc3RhbmNlcyBmb3IgdGhlIHNwZWNpZmljIHJhbmdlXG4gICAgICAgICAgY29uc3QgcmVjdXJyaW5nRXZlbnRzID0gZ2VuZXJhdGVSZWN1cnJpbmdFdmVudHMoe1xuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICBjdXJyZW50RXZlbnRzLFxuICAgICAgICAgICAgc3RhcnREYXRlLFxuICAgICAgICAgICAgZW5kRGF0ZSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIGFsbEV2ZW50cy5wdXNoKC4uLnJlY3VycmluZ0V2ZW50cylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBBZGQgbm9uLXJlY3VycmluZyBldmVudHMgd2l0aCBjb21wcmVoZW5zaXZlIHJhbmdlIGNoZWNraW5nXG4gICAgICAgICAgY29uc3QgZXZlbnRTdGFydHNJblJhbmdlID1cbiAgICAgICAgICAgIGV2ZW50LnN0YXJ0LmlzU2FtZU9yQWZ0ZXIoc3RhcnREYXRlKSAmJlxuICAgICAgICAgICAgZXZlbnQuc3RhcnQuaXNTYW1lT3JCZWZvcmUoZW5kRGF0ZSlcblxuICAgICAgICAgIGNvbnN0IGV2ZW50RW5kc0luUmFuZ2UgPVxuICAgICAgICAgICAgZXZlbnQuZW5kLmlzU2FtZU9yQWZ0ZXIoc3RhcnREYXRlKSAmJlxuICAgICAgICAgICAgZXZlbnQuZW5kLmlzU2FtZU9yQmVmb3JlKGVuZERhdGUpXG5cbiAgICAgICAgICBjb25zdCBldmVudFNwYW5zUmFuZ2UgPVxuICAgICAgICAgICAgZXZlbnQuc3RhcnQuaXNCZWZvcmUoc3RhcnREYXRlKSAmJiBldmVudC5lbmQuaXNBZnRlcihlbmREYXRlKVxuXG4gICAgICAgICAgaWYgKGV2ZW50U3RhcnRzSW5SYW5nZSB8fCBldmVudEVuZHNJblJhbmdlIHx8IGV2ZW50U3BhbnNSYW5nZSkge1xuICAgICAgICAgICAgYWxsRXZlbnRzLnB1c2goZXZlbnQpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhbGxFdmVudHNcbiAgICB9LFxuICAgIFtjdXJyZW50RXZlbnRzXVxuICApXG5cbiAgLy8gR2V0IHRoZSBjdXJyZW50IHZpZXcncyBkYXRlIHJhbmdlIGZvciBvbi1kZW1hbmQgZXZlbnQgZ2VuZXJhdGlvblxuICBjb25zdCBnZXRDdXJyZW50Vmlld1JhbmdlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN3aXRjaCAodmlldykge1xuICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGFydDogY3VycmVudERhdGUuc3RhcnRPZignZGF5JyksXG4gICAgICAgICAgZW5kOiBjdXJyZW50RGF0ZS5lbmRPZignZGF5JyksXG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0YXJ0OiBjdXJyZW50RGF0ZVxuICAgICAgICAgICAgLnN0YXJ0T2YoJ3dlZWsnKVxuICAgICAgICAgICAgLnN1YnRyYWN0KGZpcnN0RGF5T2ZXZWVrID09PSAxID8gMSA6IDAsICdkYXknKSxcbiAgICAgICAgICBlbmQ6IGN1cnJlbnREYXRlXG4gICAgICAgICAgICAuZW5kT2YoJ3dlZWsnKVxuICAgICAgICAgICAgLmFkZChmaXJzdERheU9mV2VlayA9PT0gMSA/IDEgOiAwLCAnZGF5JyksXG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGFydDogY3VycmVudERhdGVcbiAgICAgICAgICAgIC5zdGFydE9mKCdtb250aCcpXG4gICAgICAgICAgICAuc3RhcnRPZignd2VlaycpXG4gICAgICAgICAgICAuc3VidHJhY3QoZmlyc3REYXlPZldlZWsgPT09IDEgPyAxIDogMCwgJ2RheScpLFxuICAgICAgICAgIGVuZDogY3VycmVudERhdGVcbiAgICAgICAgICAgIC5lbmRPZignbW9udGgnKVxuICAgICAgICAgICAgLmVuZE9mKCd3ZWVrJylcbiAgICAgICAgICAgIC5hZGQoZmlyc3REYXlPZldlZWsgPT09IDEgPyAxIDogMCwgJ2RheScpLFxuICAgICAgICB9XG4gICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGFydDogY3VycmVudERhdGUuc3RhcnRPZigneWVhcicpLFxuICAgICAgICAgIGVuZDogY3VycmVudERhdGUuZW5kT2YoJ3llYXInKSxcbiAgICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGFydDogY3VycmVudERhdGUuc3RhcnRPZignbW9udGgnKSxcbiAgICAgICAgICBlbmQ6IGN1cnJlbnREYXRlLmVuZE9mKCdtb250aCcpLFxuICAgICAgICB9XG4gICAgfVxuICB9LCBbY3VycmVudERhdGUsIHZpZXcsIGZpcnN0RGF5T2ZXZWVrXSlcblxuICAvLyBHZXQgcHJvY2Vzc2VkIGV2ZW50cyBmb3IgdGhlIGN1cnJlbnQgdmlldyAob24tZGVtYW5kKVxuICBjb25zdCBwcm9jZXNzZWRFdmVudHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IGdldEN1cnJlbnRWaWV3UmFuZ2UoKVxuICAgIHJldHVybiBnZXRFdmVudHNGb3JEYXRlUmFuZ2Uoc3RhcnQsIGVuZClcbiAgfSwgW2dldEV2ZW50c0ZvckRhdGVSYW5nZSwgZ2V0Q3VycmVudFZpZXdSYW5nZV0pXG5cbiAgLy8gVXBkYXRlIGV2ZW50cyB3aGVuIGV2ZW50cyBwcm9wIGNoYW5nZXNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZXZlbnRzKSB7XG4gICAgICBzZXRDdXJyZW50RXZlbnRzKGV2ZW50cylcbiAgICB9XG4gIH0sIFtldmVudHNdKVxuXG4gIC8vIENvbmZpZ3VyZSBsb2NhbGUgd2hlbiBsb2NhbGUgcHJvcCBjaGFuZ2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGxvY2FsZSkge1xuICAgICAgc2V0Q3VycmVudExvY2FsZShsb2NhbGUpXG4gICAgICBkYXlqcy5sb2NhbGUobG9jYWxlKVxuICAgIH1cbiAgfSwgW2xvY2FsZV0pXG5cbiAgLy8gQ29uZmlndXJlIHRpbWV6b25lIGZvciBjdXJyZW50RGF0ZSB3aGVuIHRpbWV6b25lIHByb3AgY2hhbmdlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0aW1lem9uZSkge1xuICAgICAgc2V0Q3VycmVudFRpbWV6b25lKHRpbWV6b25lKVxuICAgICAgZGF5anMudHouc2V0RGVmYXVsdCh0aW1lem9uZSlcbiAgICB9XG4gIH0sIFt0aW1lem9uZV0pXG5cbiAgLy8gSGFuZGxlcnNcbiAgY29uc3Qgc2VsZWN0RGF0ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChkYXRlOiBkYXlqcy5EYXlqcykgPT4ge1xuICAgICAgc2V0Q3VycmVudERhdGUoZGF0ZSlcbiAgICAgIG9uRGF0ZUNoYW5nZT8uKGRhdGUpXG4gICAgfSxcbiAgICBbb25EYXRlQ2hhbmdlXVxuICApXG5cbiAgY29uc3QgbmV4dFBlcmlvZCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzd2l0Y2ggKHZpZXcpIHtcbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgc2V0Q3VycmVudERhdGUoKGN1cnJlbnREYXRlKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IGN1cnJlbnREYXRlLmFkZCgxLCAnbW9udGgnKVxuICAgICAgICAgIG9uRGF0ZUNoYW5nZT8uKG5ld0RhdGUpXG4gICAgICAgICAgcmV0dXJuIG5ld0RhdGVcbiAgICAgICAgfSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICBzZXRDdXJyZW50RGF0ZSgoY3VycmVudERhdGUpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdEYXRlID0gY3VycmVudERhdGUuYWRkKDEsICd3ZWVrJylcbiAgICAgICAgICBvbkRhdGVDaGFuZ2U/LihuZXdEYXRlKVxuICAgICAgICAgIHJldHVybiBuZXdEYXRlXG4gICAgICAgIH0pXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdkYXknOlxuICAgICAgICBzZXRDdXJyZW50RGF0ZSgoY3VycmVudERhdGUpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdEYXRlID0gY3VycmVudERhdGUuYWRkKDEsICdkYXknKVxuICAgICAgICAgIG9uRGF0ZUNoYW5nZT8uKG5ld0RhdGUpXG4gICAgICAgICAgcmV0dXJuIG5ld0RhdGVcbiAgICAgICAgfSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICBzZXRDdXJyZW50RGF0ZSgoY3VycmVudERhdGUpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdEYXRlID0gY3VycmVudERhdGUuYWRkKDEsICd5ZWFyJylcbiAgICAgICAgICBvbkRhdGVDaGFuZ2U/LihuZXdEYXRlKVxuICAgICAgICAgIHJldHVybiBuZXdEYXRlXG4gICAgICAgIH0pXG4gICAgICAgIGJyZWFrXG4gICAgfVxuICB9LCBbdmlldywgb25EYXRlQ2hhbmdlXSlcblxuICBjb25zdCBwcmV2UGVyaW9kID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN3aXRjaCAodmlldykge1xuICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICBzZXRDdXJyZW50RGF0ZSgoY3VycmVudERhdGUpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdEYXRlID0gY3VycmVudERhdGUuc3VidHJhY3QoMSwgJ21vbnRoJylcbiAgICAgICAgICBvbkRhdGVDaGFuZ2U/LihuZXdEYXRlKVxuICAgICAgICAgIHJldHVybiBuZXdEYXRlXG4gICAgICAgIH0pXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgc2V0Q3VycmVudERhdGUoKGN1cnJlbnREYXRlKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IGN1cnJlbnREYXRlLnN1YnRyYWN0KDEsICd3ZWVrJylcbiAgICAgICAgICBvbkRhdGVDaGFuZ2U/LihuZXdEYXRlKVxuICAgICAgICAgIHJldHVybiBuZXdEYXRlXG4gICAgICAgIH0pXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdkYXknOlxuICAgICAgICBzZXRDdXJyZW50RGF0ZSgoY3VycmVudERhdGUpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdEYXRlID0gY3VycmVudERhdGUuc3VidHJhY3QoMSwgJ2RheScpXG4gICAgICAgICAgb25EYXRlQ2hhbmdlPy4obmV3RGF0ZSlcbiAgICAgICAgICByZXR1cm4gbmV3RGF0ZVxuICAgICAgICB9KVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgIHNldEN1cnJlbnREYXRlKChjdXJyZW50RGF0ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld0RhdGUgPSBjdXJyZW50RGF0ZS5zdWJ0cmFjdCgxLCAneWVhcicpXG4gICAgICAgICAgb25EYXRlQ2hhbmdlPy4obmV3RGF0ZSlcbiAgICAgICAgICByZXR1cm4gbmV3RGF0ZVxuICAgICAgICB9KVxuICAgICAgICBicmVha1xuICAgIH1cbiAgfSwgW3ZpZXcsIG9uRGF0ZUNoYW5nZV0pXG5cbiAgY29uc3QgdG9kYXkgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgbmV3RGF0ZSA9IGRheWpzKClcbiAgICBzZXRDdXJyZW50RGF0ZShuZXdEYXRlKVxuICAgIG9uRGF0ZUNoYW5nZT8uKG5ld0RhdGUpXG4gIH0sIFtvbkRhdGVDaGFuZ2VdKVxuXG4gIGNvbnN0IGFkZEV2ZW50ID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG4gICAgICBzZXRDdXJyZW50RXZlbnRzKChwcmV2RXZlbnRzKSA9PiBbLi4ucHJldkV2ZW50cywgZXZlbnRdKVxuICAgICAgb25FdmVudEFkZD8uKGV2ZW50KVxuICAgIH0sXG4gICAgW29uRXZlbnRBZGRdXG4gIClcblxuICBjb25zdCB1cGRhdGVFdmVudCA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudElkOiBzdHJpbmcsIHVwZGF0ZWRFdmVudDogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4ge1xuICAgICAgc2V0Q3VycmVudEV2ZW50cygocHJldkV2ZW50cykgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGVkID0gcHJldkV2ZW50cy5tYXAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgaWYgKGV2ZW50LmlkID09PSBldmVudElkKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdFdmVudCA9IHsgLi4uZXZlbnQsIC4uLnVwZGF0ZWRFdmVudCB9XG4gICAgICAgICAgICBvbkV2ZW50VXBkYXRlPy4obmV3RXZlbnQpXG4gICAgICAgICAgICByZXR1cm4gbmV3RXZlbnRcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGV2ZW50XG4gICAgICAgIH0pXG4gICAgICAgIHJldHVybiB1cGRhdGVkXG4gICAgICB9KVxuICAgIH0sXG4gICAgW29uRXZlbnRVcGRhdGVdXG4gIClcblxuICBjb25zdCB1cGRhdGVSZWN1cnJpbmdFdmVudCA9IHVzZUNhbGxiYWNrKFxuICAgIChcbiAgICAgIGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuICAgICAgdXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PixcbiAgICAgIG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuICAgICkgPT4ge1xuICAgICAgLy8gQ3JlYXRlIHRoZSB1cGRhdGVkIGV2ZW50IHdpdGggdGhlIHVwZGF0ZXMgYXBwbGllZFxuICAgICAgY29uc3QgdXBkYXRlZEV2ZW50ID0geyAuLi5ldmVudCwgLi4udXBkYXRlcyB9XG5cbiAgICAgIC8vIENhbGwgdGhlIHJlZ3VsYXIgdXBkYXRlIGNhbGxiYWNrIHdpdGggdGhlIHVwZGF0ZWQgZXZlbnRcbiAgICAgIG9uRXZlbnRVcGRhdGU/Lih1cGRhdGVkRXZlbnQpXG5cbiAgICAgIC8vIFVzZSBvdXIgaW1wbGVtZW50ZWQgcmVjdXJyaW5nIGV2ZW50IHVwZGF0ZSBmdW5jdGlvblxuICAgICAgY29uc3QgdXBkYXRlZEV2ZW50cyA9IHVwZGF0ZVJlY3VycmluZ0V2ZW50SW1wbCh7XG4gICAgICAgIHRhcmdldEV2ZW50OiBldmVudCxcbiAgICAgICAgdXBkYXRlcyxcbiAgICAgICAgY3VycmVudEV2ZW50cyxcbiAgICAgICAgc2NvcGU6IG9wdGlvbnMuc2NvcGUsXG4gICAgICB9KVxuXG4gICAgICBzZXRDdXJyZW50RXZlbnRzKHVwZGF0ZWRFdmVudHMpXG4gICAgfSxcbiAgICBbY3VycmVudEV2ZW50cywgb25FdmVudFVwZGF0ZV1cbiAgKVxuXG4gIGNvbnN0IGRlbGV0ZVJlY3VycmluZ0V2ZW50ID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBDYWxlbmRhckV2ZW50LCBvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnMpID0+IHtcbiAgICAgIC8vIENhbGwgdGhlIHJlZ3VsYXIgZGVsZXRlIGNhbGxiYWNrIHdpdGggdGhlIGV2ZW50IGJlaW5nIGRlbGV0ZWRcbiAgICAgIG9uRXZlbnREZWxldGU/LihldmVudClcblxuICAgICAgLy8gVXNlIG91ciBpbXBsZW1lbnRlZCByZWN1cnJpbmcgZXZlbnQgZGVsZXRlIGZ1bmN0aW9uXG4gICAgICBjb25zdCB1cGRhdGVkRXZlbnRzID0gZGVsZXRlUmVjdXJyaW5nRXZlbnRJbXBsKHtcbiAgICAgICAgdGFyZ2V0RXZlbnQ6IGV2ZW50LFxuICAgICAgICBjdXJyZW50RXZlbnRzLFxuICAgICAgICBzY29wZTogb3B0aW9ucy5zY29wZSxcbiAgICAgIH0pXG5cbiAgICAgIHNldEN1cnJlbnRFdmVudHModXBkYXRlZEV2ZW50cylcbiAgICB9LFxuICAgIFtjdXJyZW50RXZlbnRzLCBvbkV2ZW50RGVsZXRlXVxuICApXG5cbiAgY29uc3QgZGVsZXRlRXZlbnQgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnRJZDogc3RyaW5nKSA9PiB7XG4gICAgICBzZXRDdXJyZW50RXZlbnRzKChwcmV2RXZlbnRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGV2ZW50VG9EZWxldGUgPSBwcmV2RXZlbnRzLmZpbmQoKGV2ZW50KSA9PiBldmVudC5pZCA9PT0gZXZlbnRJZClcbiAgICAgICAgaWYgKGV2ZW50VG9EZWxldGUpIHtcbiAgICAgICAgICBvbkV2ZW50RGVsZXRlPy4oZXZlbnRUb0RlbGV0ZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJldkV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC5pZCAhPT0gZXZlbnRJZClcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbb25FdmVudERlbGV0ZV1cbiAgKVxuXG4gIGNvbnN0IGVkaXRFdmVudCA9IHVzZUNhbGxiYWNrKChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuICAgIHNldFNlbGVjdGVkRXZlbnQoZXZlbnQpXG4gICAgc2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGNsb3NlRXZlbnRGb3JtID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFNlbGVjdGVkRGF0ZShudWxsKVxuICAgIHNldFNlbGVjdGVkRXZlbnQobnVsbClcbiAgICBzZXRJc0V2ZW50Rm9ybU9wZW4oZmFsc2UpXG4gIH0sIFtdKVxuXG4gIC8vIEN1c3RvbSBoYW5kbGVycyB0aGF0IGNhbGwgZXh0ZXJuYWwgY2FsbGJhY2tzXG4gIGNvbnN0IGhhbmRsZVZpZXdDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAobmV3VmlldzogJ21vbnRoJyB8ICd3ZWVrJyB8ICdkYXknIHwgJ3llYXInKSA9PiB7XG4gICAgICBzZXRWaWV3KG5ld1ZpZXcpXG4gICAgICBvblZpZXdDaGFuZ2U/LihuZXdWaWV3KVxuICAgIH0sXG4gICAgW29uVmlld0NoYW5nZV1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUV2ZW50Q2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcbiAgICAgIGlmIChkaXNhYmxlQ2VsbENsaWNrKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKG9uRXZlbnRDbGljaykge1xuICAgICAgICBvbkV2ZW50Q2xpY2soZXZlbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlZGl0RXZlbnQoZXZlbnQpXG4gICAgICB9XG4gICAgfSxcbiAgICBbZGlzYWJsZUNlbGxDbGljaywgb25FdmVudENsaWNrLCBlZGl0RXZlbnRdXG4gIClcblxuICBjb25zdCBoYW5kbGVEYXRlQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAoc3RhcnREYXRlOiBkYXlqcy5EYXlqcywgZW5kRGF0ZTogZGF5anMuRGF5anMpID0+IHtcbiAgICAgIGlmIChkaXNhYmxlQ2VsbENsaWNrKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAob25DZWxsQ2xpY2spIHtcbiAgICAgICAgb25DZWxsQ2xpY2soc3RhcnREYXRlLCBlbmREYXRlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0U2VsZWN0ZWREYXRlKHN0YXJ0RGF0ZSlcbiAgICAgICAgc2V0U2VsZWN0ZWRFdmVudCh7XG4gICAgICAgICAgdGl0bGU6IHQoJ25ld0V2ZW50JyksXG4gICAgICAgICAgc3RhcnQ6IHN0YXJ0RGF0ZSxcbiAgICAgICAgICBlbmQ6IGVuZERhdGUsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgICAgIGFsbERheTogZmFsc2UsXG4gICAgICAgIH0gYXMgQ2FsZW5kYXJFdmVudClcbiAgICAgICAgc2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG4gICAgICB9XG4gICAgfSxcbiAgICBbb25DZWxsQ2xpY2ssIGRpc2FibGVDZWxsQ2xpY2ssIHRdXG4gIClcblxuICBjb25zdCBoYW5kbGVPcGVuRXZlbnRGb3JtID0gdXNlQ2FsbGJhY2soXG4gICAgKGRhdGU/OiBkYXlqcy5EYXlqcykgPT4ge1xuICAgICAgaWYgKGRhdGUpIHtcbiAgICAgICAgc2V0U2VsZWN0ZWREYXRlKGRhdGUpXG4gICAgICB9XG4gICAgICBzZXRTZWxlY3RlZEV2ZW50KHtcbiAgICAgICAgdGl0bGU6IHQoJ25ld0V2ZW50JyksXG4gICAgICAgIHN0YXJ0OiBkYXRlID8/IGN1cnJlbnREYXRlLFxuICAgICAgICBlbmQ6IGRhdGUgPz8gY3VycmVudERhdGUuYWRkKDEsICdob3VyJyksXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgICAgYWxsRGF5OiBmYWxzZSxcbiAgICAgIH0gYXMgQ2FsZW5kYXJFdmVudClcbiAgICAgIHNldElzRXZlbnRGb3JtT3Blbih0cnVlKVxuICAgIH0sXG4gICAgW2N1cnJlbnREYXRlLCB0XVxuICApXG5cbiAgLy8gRmluZCBwYXJlbnQgcmVjdXJyaW5nIGV2ZW50IGZvciBhIGdpdmVuIGV2ZW50IGluc3RhbmNlXG4gIGNvbnN0IGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogQ2FsZW5kYXJFdmVudCk6IENhbGVuZGFyRXZlbnQgfCBudWxsID0+IHtcbiAgICAgIC8vIEdlbmVyYXRlIFVJRCBpZiBtaXNzaW5nIChmb2xsb3dpbmcgUkZDIDU1NDUgY29tcGxpYW5jZSlcbiAgICAgIGNvbnN0IHRhcmdldFVJRCA9IGV2ZW50LnVpZFxuXG4gICAgICBjb25zdCBwYXJlbnRFdmVudCA9IGN1cnJlbnRFdmVudHMuZmluZCgoZSkgPT4ge1xuICAgICAgICBjb25zdCBwYXJlbnRVSUQgPSBlLnVpZCB8fCBgJHtlLmlkfUBpbGFteS5jYWxlbmRhcmBcbiAgICAgICAgcmV0dXJuIHBhcmVudFVJRCA9PT0gdGFyZ2V0VUlEICYmIGUucnJ1bGVcbiAgICAgIH0pXG5cbiAgICAgIHJldHVybiBwYXJlbnRFdmVudCB8fCBudWxsXG4gICAgfSxcbiAgICBbY3VycmVudEV2ZW50c11cbiAgKVxuXG4gIC8vIENyZWF0ZSB0aGUgY29udGV4dCB2YWx1ZVxuICBjb25zdCBjb250ZXh0VmFsdWUgPSB1c2VNZW1vKFxuICAgICgpID0+ICh7XG4gICAgICBjdXJyZW50RGF0ZSxcbiAgICAgIHZpZXcsXG4gICAgICBldmVudHM6IHByb2Nlc3NlZEV2ZW50cyxcbiAgICAgIHJhd0V2ZW50czogY3VycmVudEV2ZW50cyxcbiAgICAgIGN1cnJlbnRMb2NhbGUsXG4gICAgICBpc0V2ZW50Rm9ybU9wZW4sXG4gICAgICBzZWxlY3RlZEV2ZW50LFxuICAgICAgc2VsZWN0ZWREYXRlLFxuICAgICAgZmlyc3REYXlPZldlZWssXG4gICAgICBzZXRDdXJyZW50RGF0ZSxcbiAgICAgIHNlbGVjdERhdGUsXG4gICAgICBzZXRWaWV3OiBoYW5kbGVWaWV3Q2hhbmdlLFxuICAgICAgbmV4dFBlcmlvZCxcbiAgICAgIHByZXZQZXJpb2QsXG4gICAgICB0b2RheSxcbiAgICAgIGFkZEV2ZW50LFxuICAgICAgdXBkYXRlRXZlbnQsXG4gICAgICB1cGRhdGVSZWN1cnJpbmdFdmVudCxcbiAgICAgIGRlbGV0ZUV2ZW50LFxuICAgICAgZGVsZXRlUmVjdXJyaW5nRXZlbnQsXG4gICAgICBvcGVuRXZlbnRGb3JtOiBoYW5kbGVPcGVuRXZlbnRGb3JtLFxuICAgICAgY2xvc2VFdmVudEZvcm0sXG4gICAgICBnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG4gICAgICBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQsXG4gICAgICByZW5kZXJFdmVudCxcbiAgICAgIG9uRXZlbnRDbGljazogaGFuZGxlRXZlbnRDbGljayxcbiAgICAgIG9uQ2VsbENsaWNrOiBoYW5kbGVEYXRlQ2xpY2ssXG4gICAgICBsb2NhbGUsXG4gICAgICB0aW1lem9uZTogY3VycmVudFRpbWV6b25lLFxuICAgICAgZGlzYWJsZUNlbGxDbGljayxcbiAgICAgIGRpc2FibGVFdmVudENsaWNrLFxuICAgICAgZGlzYWJsZURyYWdBbmREcm9wLFxuICAgICAgZGF5TWF4RXZlbnRzLFxuICAgICAgc3RpY2t5Vmlld0hlYWRlcixcbiAgICAgIHZpZXdIZWFkZXJDbGFzc05hbWUsXG4gICAgICBoZWFkZXJDb21wb25lbnQsXG4gICAgICBoZWFkZXJDbGFzc05hbWUsXG4gICAgICAvLyBUcmFuc2xhdGlvbiBmdW5jdGlvblxuICAgICAgdCxcbiAgICB9KSxcbiAgICBbXG4gICAgICBjdXJyZW50RGF0ZSxcbiAgICAgIHZpZXcsXG4gICAgICBwcm9jZXNzZWRFdmVudHMsXG4gICAgICBjdXJyZW50RXZlbnRzLFxuICAgICAgY3VycmVudExvY2FsZSxcbiAgICAgIGlzRXZlbnRGb3JtT3BlbixcbiAgICAgIHNlbGVjdGVkRXZlbnQsXG4gICAgICBzZWxlY3RlZERhdGUsXG4gICAgICBmaXJzdERheU9mV2VlayxcbiAgICAgIHNlbGVjdERhdGUsXG4gICAgICBoYW5kbGVWaWV3Q2hhbmdlLFxuICAgICAgbmV4dFBlcmlvZCxcbiAgICAgIGhhbmRsZU9wZW5FdmVudEZvcm0sXG4gICAgICBwcmV2UGVyaW9kLFxuICAgICAgdG9kYXksXG4gICAgICBhZGRFdmVudCxcbiAgICAgIHVwZGF0ZUV2ZW50LFxuICAgICAgdXBkYXRlUmVjdXJyaW5nRXZlbnQsXG4gICAgICBkZWxldGVFdmVudCxcbiAgICAgIGRlbGV0ZVJlY3VycmluZ0V2ZW50LFxuICAgICAgY2xvc2VFdmVudEZvcm0sXG4gICAgICBnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG4gICAgICBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQsXG4gICAgICByZW5kZXJFdmVudCxcbiAgICAgIGhhbmRsZUV2ZW50Q2xpY2ssXG4gICAgICBoYW5kbGVEYXRlQ2xpY2ssXG4gICAgICBsb2NhbGUsXG4gICAgICBjdXJyZW50VGltZXpvbmUsXG4gICAgICBkaXNhYmxlQ2VsbENsaWNrLFxuICAgICAgZGlzYWJsZUV2ZW50Q2xpY2ssXG4gICAgICBkaXNhYmxlRHJhZ0FuZERyb3AsXG4gICAgICBkYXlNYXhFdmVudHMsXG4gICAgICBzdGlja3lWaWV3SGVhZGVyLFxuICAgICAgdmlld0hlYWRlckNsYXNzTmFtZSxcbiAgICAgIGhlYWRlckNvbXBvbmVudCxcbiAgICAgIGhlYWRlckNsYXNzTmFtZSxcbiAgICAgIC8vIFRyYW5zbGF0aW9uIGRlcGVuZGVuY2llc1xuICAgICAgdCxcbiAgICBdXG4gIClcblxuICByZXR1cm4gKFxuICAgIDxDYWxlbmRhckNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHRWYWx1ZX0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9DYWxlbmRhckNvbnRleHQuUHJvdmlkZXI+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBUcmFuc2xhdGlvbnMgfSBmcm9tICcuL3R5cGVzJ1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdFRyYW5zbGF0aW9uczogVHJhbnNsYXRpb25zID0ge1xuICAvLyBDb21tb24gYWN0aW9uc1xuICB0b2RheTogJ1RvZGF5JyxcbiAgY3JlYXRlOiAnQ3JlYXRlJyxcbiAgdXBkYXRlOiAnVXBkYXRlJyxcbiAgZGVsZXRlOiAnRGVsZXRlJyxcbiAgY2FuY2VsOiAnQ2FuY2VsJyxcblxuICAvLyBFdmVudCByZWxhdGVkXG4gIGV2ZW50OiAnRXZlbnQnLFxuICBldmVudHM6ICdFdmVudHMnLFxuICBuZXdFdmVudDogJ05ldyBFdmVudCcsXG4gIHRpdGxlOiAnVGl0bGUnLFxuICBkZXNjcmlwdGlvbjogJ0Rlc2NyaXB0aW9uJyxcbiAgbG9jYXRpb246ICdMb2NhdGlvbicsXG4gIGFsbERheTogJ0FsbCBkYXknLFxuICBzdGFydERhdGU6ICdTdGFydCBEYXRlJyxcbiAgZW5kRGF0ZTogJ0VuZCBEYXRlJyxcbiAgc3RhcnRUaW1lOiAnU3RhcnQgVGltZScsXG4gIGVuZFRpbWU6ICdFbmQgVGltZScsXG4gIGNvbG9yOiAnQ29sb3InLFxuXG4gIC8vIEV2ZW50IGZvcm1cbiAgY3JlYXRlRXZlbnQ6ICdDcmVhdGUgRXZlbnQnLFxuICBlZGl0RXZlbnQ6ICdFZGl0IEV2ZW50JyxcbiAgYWRkTmV3RXZlbnQ6ICdBZGQgYSBuZXcgZXZlbnQgdG8geW91ciBjYWxlbmRhcicsXG4gIGVkaXRFdmVudERldGFpbHM6ICdFZGl0IHlvdXIgZXZlbnQgZGV0YWlscycsXG4gIGV2ZW50VGl0bGVQbGFjZWhvbGRlcjogJ0V2ZW50IHRpdGxlJyxcbiAgZXZlbnREZXNjcmlwdGlvblBsYWNlaG9sZGVyOiAnRXZlbnQgZGVzY3JpcHRpb24gKG9wdGlvbmFsKScsXG4gIGV2ZW50TG9jYXRpb25QbGFjZWhvbGRlcjogJ0V2ZW50IGxvY2F0aW9uIChvcHRpb25hbCknLFxuXG4gIC8vIFJlY3VycmVuY2VcbiAgcmVwZWF0OiAnUmVwZWF0JyxcbiAgcmVwZWF0czogJ1JlcGVhdHMnLFxuICBjdXN0b21SZWN1cnJlbmNlOiAnQ3VzdG9tIHJlY3VycmVuY2UnLFxuICBkYWlseTogJ0RhaWx5JyxcbiAgd2Vla2x5OiAnV2Vla2x5JyxcbiAgbW9udGhseTogJ01vbnRobHknLFxuICB5ZWFybHk6ICdZZWFybHknLFxuICBpbnRlcnZhbDogJ0ludGVydmFsJyxcbiAgcmVwZWF0T246ICdSZXBlYXQgb24nLFxuICBuZXZlcjogJ05ldmVyJyxcbiAgY291bnQ6ICdDb3VudCcsXG4gIGV2ZXJ5OiAnRXZlcnknLFxuICBlbmRzOiAnRW5kcycsXG4gIGFmdGVyOiAnQWZ0ZXInLFxuICBvY2N1cnJlbmNlczogJ29jY3VycmVuY2VzJyxcbiAgb246ICdPbicsXG5cbiAgLy8gUmVjdXJyZW5jZSBlZGl0IGRpYWxvZ1xuICBlZGl0UmVjdXJyaW5nRXZlbnQ6ICdFZGl0IHJlY3VycmluZyBldmVudCcsXG4gIGRlbGV0ZVJlY3VycmluZ0V2ZW50OiAnRGVsZXRlIHJlY3VycmluZyBldmVudCcsXG4gIGVkaXRSZWN1cnJpbmdFdmVudFF1ZXN0aW9uOlxuICAgICdpcyBhIHJlY3VycmluZyBldmVudC4gSG93IHdvdWxkIHlvdSBsaWtlIHRvIGVkaXQgaXQ/JyxcbiAgZGVsZXRlUmVjdXJyaW5nRXZlbnRRdWVzdGlvbjpcbiAgICAnaXMgYSByZWN1cnJpbmcgZXZlbnQuIEhvdyB3b3VsZCB5b3UgbGlrZSB0byBkZWxldGUgaXQ/JyxcbiAgdGhpc0V2ZW50OiAnVGhpcyBldmVudCcsXG4gIHRoaXNFdmVudERlc2NyaXB0aW9uOiAnT25seSBjaGFuZ2UgdGhpcyBzcGVjaWZpYyBvY2N1cnJlbmNlJyxcbiAgdGhpc0FuZEZvbGxvd2luZ0V2ZW50czogJ1RoaXMgYW5kIGZvbGxvd2luZyBldmVudHMnLFxuICB0aGlzQW5kRm9sbG93aW5nRXZlbnRzRGVzY3JpcHRpb246ICdFZGl0IHRoaXMgYW5kIGFsbCBmdXR1cmUgb2NjdXJyZW5jZXMnLFxuICBhbGxFdmVudHM6ICdBbGwgZXZlbnRzJyxcbiAgYWxsRXZlbnRzRGVzY3JpcHRpb246ICdFZGl0IHRoZSBlbnRpcmUgcmVjdXJyaW5nIHNlcmllcycsXG4gIG9ubHlDaGFuZ2VUaGlzOiAnT25seSBjaGFuZ2UgdGhpcyBzcGVjaWZpYyBvY2N1cnJlbmNlJyxcbiAgY2hhbmdlVGhpc0FuZEZ1dHVyZTogJ0NoYW5nZSB0aGlzIGFuZCBhbGwgZnV0dXJlIG9jY3VycmVuY2VzJyxcbiAgY2hhbmdlRW50aXJlU2VyaWVzOiAnQ2hhbmdlIHRoZSBlbnRpcmUgcmVjdXJyaW5nIHNlcmllcycsXG4gIG9ubHlEZWxldGVUaGlzOiAnT25seSBkZWxldGUgdGhpcyBzcGVjaWZpYyBvY2N1cnJlbmNlJyxcbiAgZGVsZXRlVGhpc0FuZEZ1dHVyZTogJ0RlbGV0ZSB0aGlzIGFuZCBhbGwgZnV0dXJlIG9jY3VycmVuY2VzJyxcbiAgZGVsZXRlRW50aXJlU2VyaWVzOiAnRGVsZXRlIHRoZSBlbnRpcmUgcmVjdXJyaW5nIHNlcmllcycsXG5cbiAgLy8gVmlldyB0eXBlc1xuICBtb250aDogJ01vbnRoJyxcbiAgd2VlazogJ1dlZWsnLFxuICBkYXk6ICdEYXknLFxuICB5ZWFyOiAnWWVhcicsXG4gIG1vcmU6ICdtb3JlJyxcblxuICAvLyBEYXlzIG9mIHdlZWtcbiAgc3VuZGF5OiAnU3VuZGF5JyxcbiAgbW9uZGF5OiAnTW9uZGF5JyxcbiAgdHVlc2RheTogJ1R1ZXNkYXknLFxuICB3ZWRuZXNkYXk6ICdXZWRuZXNkYXknLFxuICB0aHVyc2RheTogJ1RodXJzZGF5JyxcbiAgZnJpZGF5OiAnRnJpZGF5JyxcbiAgc2F0dXJkYXk6ICdTYXR1cmRheScsXG5cbiAgLy8gRGF5cyBzaG9ydFxuICBzdW46ICdTdW4nLFxuICBtb246ICdNb24nLFxuICB0dWU6ICdUdWUnLFxuICB3ZWQ6ICdXZWQnLFxuICB0aHU6ICdUaHUnLFxuICBmcmk6ICdGcmknLFxuICBzYXQ6ICdTYXQnLFxuXG4gIC8vIE1vbnRoc1xuICBqYW51YXJ5OiAnSmFudWFyeScsXG4gIGZlYnJ1YXJ5OiAnRmVicnVhcnknLFxuICBtYXJjaDogJ01hcmNoJyxcbiAgYXByaWw6ICdBcHJpbCcsXG4gIG1heTogJ01heScsXG4gIGp1bmU6ICdKdW5lJyxcbiAganVseTogJ0p1bHknLFxuICBhdWd1c3Q6ICdBdWd1c3QnLFxuICBzZXB0ZW1iZXI6ICdTZXB0ZW1iZXInLFxuICBvY3RvYmVyOiAnT2N0b2JlcicsXG4gIG5vdmVtYmVyOiAnTm92ZW1iZXInLFxuICBkZWNlbWJlcjogJ0RlY2VtYmVyJyxcbn1cbiIsCiAgICAiLy8gTWFpbiBjYWxlbmRhciBjb21wb25lbnRcbmV4cG9ydCB7IElsYW15Q2FsZW5kYXIgfSBmcm9tICcuL2NvbXBvbmVudHMvaWxhbXktY2FsZW5kYXIvaWxhbXktY2FsZW5kYXInXG5cbi8vIFB1YmxpYyBjYWxlbmRhciBjb250ZXh0IGhvb2tcbmV4cG9ydCB7IHVzZUlsYW15Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5cbi8vIFJSVUxFLWJhc2VkIHJlY3VycmVuY2Ugc3lzdGVtXG5leHBvcnQge1xuICBnZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyxcbiAgaXNSZWN1cnJpbmdFdmVudCxcbn0gZnJvbSAnLi9saWIvcmVjdXJyZW5jZS1oYW5kbGVyJ1xuXG4vLyBFeHBvcnQgdHlwZXNcbmV4cG9ydCB0eXBlIHsgUlJ1bGVPcHRpb25zIH0gZnJvbSAnLi9saWIvcmVjdXJyZW5jZS1oYW5kbGVyL3R5cGVzJ1xuZXhwb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3R5cGVzJ1xuZXhwb3J0IHR5cGUgeyBJbGFteUNhbGVuZGFyUHJvcHMgfSBmcm9tICcuL2NvbXBvbmVudHMvaWxhbXktY2FsZW5kYXIvdHlwZXMnXG5leHBvcnQgdHlwZSB7IFdlZWtEYXlzIH0gZnJvbSAnLi9jb21wb25lbnRzL3R5cGVzJ1xuZXhwb3J0IHR5cGUgeyBVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybiB9IGZyb20gJy4vY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuLy8gUmUtZXhwb3J0IHJydWxlLmpzIHR5cGVzIGZvciBjb252ZW5pZW5jZVxuZXhwb3J0IHR5cGUgeyBGcmVxdWVuY3ksIFdlZWtkYXkgfSBmcm9tICdycnVsZSdcbmV4cG9ydCB7IFJSdWxlIH0gZnJvbSAncnJ1bGUnXG5cbi8vIFRyYW5zbGF0aW9uIHN5c3RlbVxuZXhwb3J0IHR5cGUge1xuICBUcmFuc2xhdGlvbnMsXG4gIFRyYW5zbGF0aW9uS2V5LFxuICBUcmFuc2xhdG9yRnVuY3Rpb24sXG59IGZyb20gJy4vbGliL3RyYW5zbGF0aW9ucy90eXBlcydcbmV4cG9ydCB7IGRlZmF1bHRUcmFuc2xhdGlvbnMgfSBmcm9tICcuL2xpYi90cmFuc2xhdGlvbnMvZGVmYXVsdCdcbiIKICBdLAogICJtYXBwaW5ncyI6ICI7QUFDQSw0QkFBUyw0QkFBaUI7QUFDMUIsNEJBQWdCOzs7QUNFaEI7QUFvRE8sSUFBTSxrQkFDWCxjQUErQyxTQUFTO0FBRW5ELElBQU0scUJBQXFCLE1BQTJCO0FBQUEsRUFDM0QsTUFBTSxVQUFVLFdBQVcsZUFBZTtBQUFBLEVBQzFDLElBQUksWUFBWSxXQUFXO0FBQUEsSUFDekIsTUFBTSxJQUFJLE1BQU0sMkRBQTJEO0FBQUEsRUFDN0U7QUFBQSxFQUNBLE9BQU87QUFBQTtBQStCRixJQUFNLDBCQUEwQixNQUFxQztBQUFBLEVBQzFFLE1BQU0sVUFBVSxXQUFXLGVBQWU7QUFBQSxFQUMxQyxJQUFJLFlBQVksV0FBVztBQUFBLElBQ3pCLE1BQU0sSUFBSSxNQUNSLGdFQUNGO0FBQUEsRUFDRjtBQUFBLEVBQ0EsT0FBTztBQUFBLElBQ0wsYUFBYSxRQUFRO0FBQUEsSUFDckIsTUFBTSxRQUFRO0FBQUEsSUFDZCxRQUFRLFFBQVE7QUFBQSxJQUNoQixpQkFBaUIsUUFBUTtBQUFBLElBQ3pCLGVBQWUsUUFBUTtBQUFBLElBQ3ZCLGNBQWMsUUFBUTtBQUFBLElBQ3RCLGdCQUFnQixRQUFRO0FBQUEsSUFDeEIsZ0JBQWdCLFFBQVE7QUFBQSxJQUN4QixZQUFZLFFBQVE7QUFBQSxJQUNwQixTQUFTLFFBQVE7QUFBQSxJQUNqQixZQUFZLFFBQVE7QUFBQSxJQUNwQixZQUFZLFFBQVE7QUFBQSxJQUNwQixPQUFPLFFBQVE7QUFBQSxJQUNmLFVBQVUsUUFBUTtBQUFBLElBQ2xCLGFBQWEsUUFBUTtBQUFBLElBQ3JCLGFBQWEsUUFBUTtBQUFBLElBQ3JCLGVBQWUsUUFBUTtBQUFBLElBQ3ZCLGdCQUFnQixRQUFRO0FBQUEsRUFDMUI7QUFBQTs7O0FDeEhGO0FBRUE7OztBQ0RBOzs7QUNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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LE9BQU07QUFBQSxzQkFHeEIsTUFhRSxvQkFiRjtBQUFBLGtDQUNFLE1BV0Usa0JBWEY7QUFBQSxVQUFpQixNQUFLO0FBQUEsVUFBdEIsMEJBQ0UsTUFTRSxRQUFPLEtBVFQ7QUFBQSxZQUVFLFNBQVMsRUFBRSxTQUFTLEdBQUcsR0FBRyxHQUFHO0FBQUEsWUFDN0IsU0FBUyxFQUFFLFNBQVMsR0FBRyxHQUFHLEVBQUU7QUFBQSxZQUM1QixNQUFNLEVBQUUsU0FBUyxHQUFHLEdBQUcsSUFBSTtBQUFBLFlBQzNCLFlBQVksRUFBRSxVQUFVLEtBQUssTUFBTSxZQUFZO0FBQUEsWUFDL0MsV0FBVTtBQUFBLFlBTlosVUFRRyxRQUFRO0FBQUEsYUFQSixJQVFMO0FBQUEsU0FDRjtBQUFBLE9BQ0Y7QUFBQSxNQUdELG1DQUNDLE1BQUMsV0FBRDtBQUFBLFFBQ0UsU0FBUztBQUFBLFFBQ1Q7QUFBQSxRQUNBO0FBQUEsUUFDQSxPQUFPO0FBQUEsUUFDUCxVQUFVO0FBQUEsUUFDVixVQUFVO0FBQUEsT0FDWjtBQUFBO0FBQUEsR0FFRjtBQUFBO0FBSU4sSUFBTSx5QkFBeUI7QUFDeEIsSUFBTSxnQkFBOEM7QUFBQSxFQUN6RDtBQUFBLEVBQ0EsaUJBQWlCO0FBQUEsRUFDakIsY0FBYztBQUFBLEVBQ2Q7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0EsZUFBZTtBQUFBLEVBQ2YsbUJBQW1CO0FBQUEsRUFDbkIsc0JBQXNCO0FBQUEsRUFDdEI7QUFBQSxFQUNBO0FBQUEsTUFDSTtBQUFBLEVBQ0osdUJBQ0UsTUEwQkUsa0JBMUJGO0FBQUEsSUFDRSxRQUFRLG1DQUFtQyxNQUFNO0FBQUEsSUFDakQsZ0JBQWdCLHFCQUFxQjtBQUFBLElBQ3JDO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBdkJGLDBCQXlCRSxNQUFDLGlCQUFELEVBQWlCO0FBQUEsR0FDakI7QUFBQTs7O0FJbEhOLGtCQUFTOyIsCiAgImRlYnVnSWQiOiAiQjQ0N0VGMDVCOEZGODI4MzY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
|
|
4803
|
+
//# debugId=610D3B681CFFAA3D64756E2164756E21
|
|
4804
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2ZlYXR1cmVzL21vbnRoLXZpZXcvY29tcG9uZW50cy92aWV3L21vbnRoLXZpZXcudHN4IiwgIi4uL3NyYy9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQudHMiLCAiLi4vc3JjL2NvbXBvbmVudHMvdWkvYnV0dG9uLnRzeCIsICIuLi9zcmMvbGliL3V0aWxzLnRzIiwgIi4uL3NyYy9saWIvZGF5anMtY29uZmlnLnRzIiwgIi4uL3NyYy9jb21wb25lbnRzL3VpL2NhbGVuZGFyLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy91aS9jaGVja2JveC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvdWkvY2FyZC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvdWkvZGF0ZS1waWNrZXIudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3VpL3BvcG92ZXIudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3VpL2RpYWxvZy50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvdWkvaW5wdXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3VpL2xhYmVsLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYS50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvdWkvc2VsZWN0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy91aS90YWJzLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy91aS90b29sdGlwLnRzeCIsICIuLi9zcmMvZmVhdHVyZXMvbW9udGgtdmlldy9jb21wb25lbnRzL2FsbC1ldmVudHMtZGlhbG9nLnRzeCIsICIuLi9zcmMvZmVhdHVyZXMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudC50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL21vbnRoLXZpZXcvY29tcG9uZW50cy9kYXktY2VsbC50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL2Ryb3BwYWJsZS1jZWxsL2Ryb3BwYWJsZS1jZWxsLnRzeCIsICIuLi9zcmMvZmVhdHVyZXMvbW9udGgtdmlldy9jb21wb25lbnRzL21vbnRoLWhlYWRlci9tb250aC1oZWFkZXIudHN4IiwgIi4uL3NyYy9saWIvY29uc3RhbnRzLnRzIiwgIi4uL3NyYy9ob29rcy91c2VQcm9jZXNzZWRXZWVrRXZlbnRzLnRzIiwgIi4uL3NyYy9mZWF0dXJlcy9tb250aC12aWV3L2NvbXBvbmVudHMvd2Vlay1ldmVudHMtbGF5ZXIvd2Vlay1ldmVudHMtbGF5ZXIudHN4IiwgIi4uL3NyYy9mZWF0dXJlcy93ZWVrLXZpZXcvdmlldy93ZWVrLXZpZXcudHN4IiwgIi4uL3NyYy9mZWF0dXJlcy93ZWVrLXZpZXcvd2Vlay1hbGwtZGF5LXJvdy50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL3dlZWstdmlldy93ZWVrLWhlYWRlci50c3giLCAiLi4vc3JjL2hvb2tzL3VzZVByb2Nlc3NlZERheUV2ZW50cy50cyIsICIuLi9zcmMvZmVhdHVyZXMvZGF5LXZpZXcvY29tcG9uZW50cy9kYXktZXZlbnRzLWxheWVyLnRzeCIsICIuLi9zcmMvZmVhdHVyZXMvd2Vlay12aWV3L3dlZWstZGF5LWNvbC50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL3dlZWstdmlldy93ZWVrLXRpbWUtZ3JpZC50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL2RheS12aWV3L2NvbXBvbmVudHMvdmlldy9kYXktdmlldy50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL2RheS12aWV3L2NvbXBvbmVudHMvZGF5LWFsbC1kYXktcm93LnRzeCIsICIuLi9zcmMvZmVhdHVyZXMvZGF5LXZpZXcvY29tcG9uZW50cy9kYXktaGVhZGVyLnRzeCIsICIuLi9zcmMvZmVhdHVyZXMvZGF5LXZpZXcvY29tcG9uZW50cy9kYXktdGltZS1jb2wudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybS50c3giLCAiLi4vc3JjL2xpYi9yZWN1cnJlbmNlLWhhbmRsZXIvaW5kZXgudHMiLCAiLi4vc3JjL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXRvci9yZWN1cnJlbmNlLWVkaXRvci50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXQtZGlhbG9nL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cudHN4IiwgIi4uL3NyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL2hvb2tzL3VzZVJlY3VycmluZ0V2ZW50QWN0aW9ucy50cyIsICIuLi9zcmMvbGliL2V4cG9ydC1pY2FsLnRzIiwgIi4uL3NyYy9jb21wb25lbnRzL2hlYWRlci9iYXNlLWhlYWRlci50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvaGVhZGVyL3RpdGxlLWNvbnRlbnQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL2hlYWRlci92aWV3LWNvbnRyb2xzLnRzeCIsICIuLi9zcmMvZmVhdHVyZXMveWVhci12aWV3L3ZpZXcveWVhci12aWV3LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy9pbGFteS1jYWxlbmRhci9pbGFteS1jYWxlbmRhci50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL2RyYWctYW5kLWRyb3AvY2FsZW5kYXItZG5kLWNvbnRleHQudHN4IiwgIi4uL3NyYy9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyLnRzeCIsICIuLi9zcmMvbGliL3RyYW5zbGF0aW9ucy9kZWZhdWx0LnRzIiwgIi4uL3NyYy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICJpbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB7IEFsbEV2ZW50RGlhbG9nIH0gZnJvbSAnLi4vYWxsLWV2ZW50cy1kaWFsb2cnXG5pbXBvcnQgeyBEYXlDZWxsIH0gZnJvbSAnLi4vZGF5LWNlbGwnXG5pbXBvcnQgdHlwZSB7IE1vbnRoVmlld1Byb3BzLCBTZWxlY3RlZERheUV2ZW50cyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgTW9udGhIZWFkZXIgfSBmcm9tICcuLi9tb250aC1oZWFkZXIvbW9udGgtaGVhZGVyJ1xuaW1wb3J0IHsgV2Vla0V2ZW50c0xheWVyIH0gZnJvbSAnLi4vd2Vlay1ldmVudHMtbGF5ZXIvd2Vlay1ldmVudHMtbGF5ZXInXG5pbXBvcnQgeyBTY3JvbGxBcmVhIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuXG5leHBvcnQgY29uc3QgTW9udGhWaWV3OiBSZWFjdC5GQzxNb250aFZpZXdQcm9wcz4gPSAoeyBkYXlNYXhFdmVudHMgPSAzIH0pID0+IHtcbiAgY29uc3QgYWxsRXZlbnRzRGlhbG9nUmVmID0gUmVhY3QudXNlUmVmPHtcbiAgICBvcGVuOiAoKSA9PiB2b2lkXG4gICAgY2xvc2U6ICgpID0+IHZvaWRcbiAgICBzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+IHZvaWRcbiAgfT4obnVsbClcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWsgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgLy8gR2V0IHN0YXJ0IGRhdGUgZm9yIHRoZSBjdXJyZW50IG1vbnRoIHZpZXcgYmFzZWQgb24gZmlyc3REYXlPZldlZWtcbiAgY29uc3QgZmlyc3REYXlPZk1vbnRoID0gY3VycmVudERhdGUuc3RhcnRPZignbW9udGgnKVxuXG4gIC8vIENhbGN1bGF0ZSB0aGUgZmlyc3QgZGF5IG9mIHRoZSBjYWxlbmRhciBncmlkIGNvcnJlY3RseVxuICAvLyBGaW5kIHRoZSBmaXJzdCBkYXkgb2Ygd2VlayAoZS5nLiBTdW5kYXkgb3IgTW9uZGF5KSB0aGF0IGNvbWVzIGJlZm9yZSBvciBvbiB0aGUgZmlyc3QgZGF5IG9mIHRoZSBtb250aFxuICBsZXQgYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIgPSBmaXJzdERheU9mTW9udGguY2xvbmUoKVxuICB3aGlsZSAoYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIuZGF5KCkgIT09IGZpcnN0RGF5T2ZXZWVrKSB7XG4gICAgYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIgPSBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhci5zdWJ0cmFjdCgxLCAnZGF5JylcbiAgfVxuXG4gIC8vIEFsd2F5cyBnZW5lcmF0ZSA2IHdlZWtzICg0MiBkYXlzKSByZWdhcmRsZXNzIG9mIHRoZSBtb250aCBsZW5ndGhcbiAgLy8gVGhpcyBlbnN1cmVzIHdlIGFsd2F5cyBoYXZlIDYgcm93cyBvZiBkYXlzXG4gIGNvbnN0IGNhbGVuZGFyRGF5cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIC8vIDYgd2Vla3Mgw5cgNyBkYXlzID0gNDIgZGF5c1xuICAgIGNvbnN0IGRheXM6IGRheWpzLkRheWpzW11bXSA9IFtbXV1cbiAgICBsZXQgZGF5ID0gYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIuY2xvbmUoKSAvLyBDbG9uZSB0byBhdm9pZCBtdXRhdGlvblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDI7IGkrKykge1xuICAgICAgaWYgKGRheXNbZGF5cy5sZW5ndGggLSAxXS5sZW5ndGggPT09IDcpIHtcbiAgICAgICAgZGF5cy5wdXNoKFtdKSAvLyBTdGFydCBhIG5ldyB3ZWVrXG4gICAgICB9XG4gICAgICBkYXlzW2RheXMubGVuZ3RoIC0gMV0ucHVzaChkYXkpXG4gICAgICBkYXkgPSBkYXkuYWRkKDEsICdkYXknKSAvLyBNb3ZlIHRvIHRoZSBuZXh0IGRheVxuICAgIH1cbiAgICByZXR1cm4gZGF5c1xuICB9LCBbYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXJdKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtZnVsbCBmbGV4LWNvbFwiIGRhdGEtdGVzdGlkPVwibW9udGgtdmlld1wiPlxuICAgICAgey8qIFdlZWsgZGF5cyBoZWFkZXIgKi99XG4gICAgICA8TW9udGhIZWFkZXIgY2xhc3NOYW1lPVwiaC1bM3JlbV1cIiAvPlxuXG4gICAgICB7LyogQ2FsZW5kYXIgZ3JpZCAtIGFkZGVkIGZpeGVkIGhlaWdodCAqL31cbiAgICAgIDxTY3JvbGxBcmVhXG4gICAgICAgIGNsYXNzTmFtZT1cIm92ZXJmbG93LWF1dG8gaC1bY2FsYygxMDAlLTNyZW0pXVwiXG4gICAgICAgIGRhdGEtdGVzdGlkPVwibW9udGgtc2Nyb2xsLWFyZWFcIlxuICAgICAgICB2aWV3UG9ydFByb3BzPXt7IGNsYXNzTmFtZTogJyo6ZmxleCEgKjpmbGV4LWNvbCAqOm1pbi1oLWZ1bGwnIH19XG4gICAgICA+XG4gICAgICAgIDxBbmltYXRlUHJlc2VuY2UgbW9kZT1cIndhaXRcIj5cbiAgICAgICAgICA8bW90aW9uLmRpdlxuICAgICAgICAgICAga2V5PXtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1cbiAgICAgICAgICAgIGluaXRpYWw9e3sgb3BhY2l0eTogMCB9fVxuICAgICAgICAgICAgYW5pbWF0ZT17eyBvcGFjaXR5OiAxIH19XG4gICAgICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAgfX1cbiAgICAgICAgICAgIHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuMjUsIGVhc2U6ICdlYXNlSW5PdXQnIH19XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBncmlkIGgtZnVsbCBncmlkLWNvbHMtNyBncmlkLXJvd3MtNiBvdmVyZmxvdy1hdXRvIGZsZXgtMVwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cIm1vbnRoLWNhbGVuZGFyLWdyaWRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHsvKiBEYXkgY2VsbHMgKi99XG4gICAgICAgICAgICB7Y2FsZW5kYXJEYXlzLm1hcCgoZGF5cywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBrZXk9e2B3ZWVrLSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIGNvbC1zcGFuLTcgZ3JpZCBncmlkLWNvbHMtN1wiXG4gICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YHdlZWstcm93LSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7ZGF5cy5tYXAoKGRheSwgZGF5SW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICA8RGF5Q2VsbFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg9e2RheUluZGV4fVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF5PXtkYXl9XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXlNYXhFdmVudHM9e2RheU1heEV2ZW50c31cbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm9yZGVyLXIgYm9yZGVyLWIgZmlyc3Q6Ym9yZGVyLWxcIlxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIH0pfVxuXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LTAgei0xMCBwb2ludGVyLWV2ZW50cy1ub25lXCI+XG4gICAgICAgICAgICAgICAgICAgIDxXZWVrRXZlbnRzTGF5ZXIgZGF5cz17ZGF5c30gLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L21vdGlvbi5kaXY+XG4gICAgICAgIDwvQW5pbWF0ZVByZXNlbmNlPlxuICAgICAgPC9TY3JvbGxBcmVhPlxuXG4gICAgICB7LyogRGlhbG9nIGZvciBzaG93aW5nIGFsbCBldmVudHMgKi99XG4gICAgICA8QWxsRXZlbnREaWFsb2cgcmVmPXthbGxFdmVudHNEaWFsb2dSZWZ9IC8+XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdE9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9uS2V5IH0gZnJvbSAnQC9saWIvdHJhbnNsYXRpb25zL3R5cGVzJ1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyQ29udGV4dFR5cGUge1xuICBjdXJyZW50RGF0ZTogZGF5anMuRGF5anNcbiAgdmlldzogJ21vbnRoJyB8ICd3ZWVrJyB8ICdkYXknIHwgJ3llYXInXG4gIGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIHJhd0V2ZW50czogQ2FsZW5kYXJFdmVudFtdIC8vIFVucHJvY2Vzc2VkIGV2ZW50cyBmb3IgZXhwb3J0XG4gIGlzRXZlbnRGb3JtT3BlbjogYm9vbGVhblxuICBzZWxlY3RlZEV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuICBzZWxlY3RlZERhdGU6IGRheWpzLkRheWpzIHwgbnVsbFxuICBmaXJzdERheU9mV2VlazogbnVtYmVyIC8vIDAgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5LCBldGMuXG4gIHNldEN1cnJlbnREYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcbiAgc2VsZWN0RGF0ZTogKGRhdGU6IGRheWpzLkRheWpzKSA9PiB2b2lkXG4gIHNldFZpZXc6ICh2aWV3OiAnbW9udGgnIHwgJ3dlZWsnIHwgJ2RheScgfCAneWVhcicpID0+IHZvaWRcbiAgbmV4dFBlcmlvZDogKCkgPT4gdm9pZFxuICBwcmV2UGVyaW9kOiAoKSA9PiB2b2lkXG4gIHRvZGF5OiAoKSA9PiB2b2lkXG4gIGFkZEV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgdXBkYXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIsIGV2ZW50OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG4gIHVwZGF0ZVJlY3VycmluZ0V2ZW50OiAoXG4gICAgZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG4gICAgdXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PixcbiAgICBvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcbiAgKSA9PiB2b2lkXG4gIGRlbGV0ZUV2ZW50OiAoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB2b2lkXG4gIGRlbGV0ZVJlY3VycmluZ0V2ZW50OiAoXG4gICAgZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG4gICAgb3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG4gICkgPT4gdm9pZFxuICBvcGVuRXZlbnRGb3JtOiAoZGF0ZT86IGRheWpzLkRheWpzKSA9PiB2b2lkXG4gIGNsb3NlRXZlbnRGb3JtOiAoKSA9PiB2b2lkXG4gIGdldEV2ZW50c0ZvckRhdGVSYW5nZTogKFxuICAgIHN0YXJ0RGF0ZTogZGF5anMuRGF5anMsXG4gICAgZW5kRGF0ZTogZGF5anMuRGF5anNcbiAgKSA9PiBDYWxlbmRhckV2ZW50W11cbiAgZmluZFBhcmVudFJlY3VycmluZ0V2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IENhbGVuZGFyRXZlbnQgfCBudWxsXG4gIHJlbmRlckV2ZW50PzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBSZWFjdC5SZWFjdE5vZGVcbiAgb25FdmVudENsaWNrOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgb25DZWxsQ2xpY2s6IChzdGFydERhdGU6IGRheWpzLkRheWpzLCBlbmREYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuICBjdXJyZW50TG9jYWxlPzogc3RyaW5nXG4gIGRpc2FibGVDZWxsQ2xpY2s/OiBib29sZWFuXG4gIGRpc2FibGVFdmVudENsaWNrPzogYm9vbGVhblxuICBkaXNhYmxlRHJhZ0FuZERyb3A/OiBib29sZWFuXG4gIGRheU1heEV2ZW50czogbnVtYmVyXG4gIHN0aWNreVZpZXdIZWFkZXI6IGJvb2xlYW5cbiAgdmlld0hlYWRlckNsYXNzTmFtZTogc3RyaW5nXG4gIGhlYWRlckNvbXBvbmVudD86IFJlYWN0LlJlYWN0Tm9kZSAvLyBPcHRpb25hbCBjdXN0b20gaGVhZGVyIGNvbXBvbmVudFxuICBoZWFkZXJDbGFzc05hbWU/OiBzdHJpbmcgLy8gT3B0aW9uYWwgY3VzdG9tIGhlYWRlciBjbGFzc1xuICAvLyBUcmFuc2xhdGlvbiBmdW5jdGlvblxuICB0OiAoa2V5OiBUcmFuc2xhdGlvbktleSkgPT4gc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBDYWxlbmRhckNvbnRleHQ6IFJlYWN0LkNvbnRleHQ8Q2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4gPVxuICBjcmVhdGVDb250ZXh0PENhbGVuZGFyQ29udGV4dFR5cGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcblxuZXhwb3J0IGNvbnN0IHVzZUNhbGVuZGFyQ29udGV4dCA9ICgpOiBDYWxlbmRhckNvbnRleHRUeXBlID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoQ2FsZW5kYXJDb250ZXh0KVxuICBpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VDYWxlbmRhckNvbnRleHQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIENhbGVuZGFyUHJvdmlkZXInKVxuICB9XG4gIHJldHVybiBjb250ZXh0XG59XG5cbi8qKlxuICogU2ltcGxpZmllZCBjYWxlbmRhciBjb250ZXh0IHR5cGUgZm9yIGV4dGVybmFsIHVzZVxuICogQ29udGFpbnMgb25seSB0aGUgbW9zdCBjb21tb25seSB1c2VkIGNhbGVuZGFyIG9wZXJhdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybiB7XG4gIHJlYWRvbmx5IGN1cnJlbnREYXRlOiBkYXlqcy5EYXlqc1xuICByZWFkb25seSB2aWV3OiAnbW9udGgnIHwgJ3dlZWsnIHwgJ2RheScgfCAneWVhcidcbiAgcmVhZG9ubHkgZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cbiAgcmVhZG9ubHkgaXNFdmVudEZvcm1PcGVuOiBib29sZWFuXG4gIHJlYWRvbmx5IHNlbGVjdGVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG4gIHJlYWRvbmx5IHNlbGVjdGVkRGF0ZTogZGF5anMuRGF5anMgfCBudWxsXG4gIHJlYWRvbmx5IGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcbiAgcmVhZG9ubHkgc2V0Q3VycmVudERhdGU6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuICByZWFkb25seSBzZWxlY3REYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcbiAgcmVhZG9ubHkgc2V0VmlldzogKHZpZXc6ICdtb250aCcgfCAnd2VlaycgfCAnZGF5JyB8ICd5ZWFyJykgPT4gdm9pZFxuICByZWFkb25seSBuZXh0UGVyaW9kOiAoKSA9PiB2b2lkXG4gIHJlYWRvbmx5IHByZXZQZXJpb2Q6ICgpID0+IHZvaWRcbiAgcmVhZG9ubHkgdG9kYXk6ICgpID0+IHZvaWRcbiAgcmVhZG9ubHkgYWRkRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuICByZWFkb25seSB1cGRhdGVFdmVudDogKFxuICAgIGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBldmVudDogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuICApID0+IHZvaWRcbiAgcmVhZG9ubHkgZGVsZXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWRcbiAgcmVhZG9ubHkgb3BlbkV2ZW50Rm9ybTogKGRhdGU/OiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuICByZWFkb25seSBjbG9zZUV2ZW50Rm9ybTogKCkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgdXNlSWxhbXlDYWxlbmRhckNvbnRleHQgPSAoKTogVXNlSWxhbXlDYWxlbmRhckNvbnRleHRSZXR1cm4gPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChDYWxlbmRhckNvbnRleHQpXG4gIGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAndXNlSWxhbXlDYWxlbmRhckNvbnRleHQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIENhbGVuZGFyUHJvdmlkZXInXG4gICAgKVxuICB9XG4gIHJldHVybiB7XG4gICAgY3VycmVudERhdGU6IGNvbnRleHQuY3VycmVudERhdGUsXG4gICAgdmlldzogY29udGV4dC52aWV3LFxuICAgIGV2ZW50czogY29udGV4dC5ldmVudHMsXG4gICAgaXNFdmVudEZvcm1PcGVuOiBjb250ZXh0LmlzRXZlbnRGb3JtT3BlbixcbiAgICBzZWxlY3RlZEV2ZW50OiBjb250ZXh0LnNlbGVjdGVkRXZlbnQsXG4gICAgc2VsZWN0ZWREYXRlOiBjb250ZXh0LnNlbGVjdGVkRGF0ZSxcbiAgICBmaXJzdERheU9mV2VlazogY29udGV4dC5maXJzdERheU9mV2VlayxcbiAgICBzZXRDdXJyZW50RGF0ZTogY29udGV4dC5zZXRDdXJyZW50RGF0ZSxcbiAgICBzZWxlY3REYXRlOiBjb250ZXh0LnNlbGVjdERhdGUsXG4gICAgc2V0VmlldzogY29udGV4dC5zZXRWaWV3LFxuICAgIG5leHRQZXJpb2Q6IGNvbnRleHQubmV4dFBlcmlvZCxcbiAgICBwcmV2UGVyaW9kOiBjb250ZXh0LnByZXZQZXJpb2QsXG4gICAgdG9kYXk6IGNvbnRleHQudG9kYXksXG4gICAgYWRkRXZlbnQ6IGNvbnRleHQuYWRkRXZlbnQsXG4gICAgdXBkYXRlRXZlbnQ6IGNvbnRleHQudXBkYXRlRXZlbnQsXG4gICAgZGVsZXRlRXZlbnQ6IGNvbnRleHQuZGVsZXRlRXZlbnQsXG4gICAgb3BlbkV2ZW50Rm9ybTogY29udGV4dC5vcGVuRXZlbnRGb3JtLFxuICAgIGNsb3NlRXZlbnRGb3JtOiBjb250ZXh0LmNsb3NlRXZlbnRGb3JtLFxuICB9IGFzIGNvbnN0XG59XG4iLAogICAgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgU2xvdCB9IGZyb20gJ0ByYWRpeC11aS9yZWFjdC1zbG90J1xuaW1wb3J0IHR5cGUgeyBWYXJpYW50UHJvcHMgfSBmcm9tICdjbGFzcy12YXJpYW5jZS1hdXRob3JpdHknXG5pbXBvcnQgeyBjdmEgfSBmcm9tICdjbGFzcy12YXJpYW5jZS1hdXRob3JpdHknXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IGJ1dHRvblZhcmlhbnRzID0gY3ZhKFxuICBcImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiB3aGl0ZXNwYWNlLW5vd3JhcCByb3VuZGVkLW1kIHRleHQtc20gZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1hbGwgZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkaXNhYmxlZDpvcGFjaXR5LTUwIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTQgc2hyaW5rLTAgWyZfc3ZnXTpzaHJpbmstMCBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gYXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazphcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS80MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlXCIsXG4gIHtcbiAgICB2YXJpYW50czoge1xuICAgICAgdmFyaWFudDoge1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHNoYWRvdy14cyBob3ZlcjpiZy1wcmltYXJ5LzkwJyxcbiAgICAgICAgZGVzdHJ1Y3RpdmU6XG4gICAgICAgICAgJ2JnLWRlc3RydWN0aXZlIHRleHQtd2hpdGUgc2hhZG93LXhzIGhvdmVyOmJnLWRlc3RydWN0aXZlLzkwIGZvY3VzLXZpc2libGU6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmZvY3VzLXZpc2libGU6cmluZy1kZXN0cnVjdGl2ZS80MCBkYXJrOmJnLWRlc3RydWN0aXZlLzYwJyxcbiAgICAgICAgb3V0bGluZTpcbiAgICAgICAgICAnYm9yZGVyIGJnLWJhY2tncm91bmQgc2hhZG93LXhzIGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGRhcms6YmctaW5wdXQvMzAgZGFyazpib3JkZXItaW5wdXQgZGFyazpob3ZlcjpiZy1pbnB1dC81MCcsXG4gICAgICAgIHNlY29uZGFyeTpcbiAgICAgICAgICAnYmctc2Vjb25kYXJ5IHRleHQtc2Vjb25kYXJ5LWZvcmVncm91bmQgc2hhZG93LXhzIGhvdmVyOmJnLXNlY29uZGFyeS84MCcsXG4gICAgICAgIGdob3N0OlxuICAgICAgICAgICdob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXJrOmhvdmVyOmJnLWFjY2VudC81MCcsXG4gICAgICAgIGxpbms6ICd0ZXh0LXByaW1hcnkgdW5kZXJsaW5lLW9mZnNldC00IGhvdmVyOnVuZGVybGluZScsXG4gICAgICB9LFxuICAgICAgc2l6ZToge1xuICAgICAgICBkZWZhdWx0OiAnaC05IHB4LTQgcHktMiBoYXMtWz5zdmddOnB4LTMnLFxuICAgICAgICBzbTogJ2gtOCByb3VuZGVkLW1kIGdhcC0xLjUgcHgtMyBoYXMtWz5zdmddOnB4LTIuNScsXG4gICAgICAgIGxnOiAnaC0xMCByb3VuZGVkLW1kIHB4LTYgaGFzLVs+c3ZnXTpweC00JyxcbiAgICAgICAgaWNvbjogJ3NpemUtOScsXG4gICAgICB9LFxuICAgIH0sXG4gICAgZGVmYXVsdFZhcmlhbnRzOiB7XG4gICAgICB2YXJpYW50OiAnZGVmYXVsdCcsXG4gICAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgfSxcbiAgfVxuKVxuXG5mdW5jdGlvbiBCdXR0b24oe1xuICBjbGFzc05hbWUsXG4gIHZhcmlhbnQsXG4gIHNpemUsXG4gIGFzQ2hpbGQgPSBmYWxzZSxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdidXR0b24nPiAmXG4gIFZhcmlhbnRQcm9wczx0eXBlb2YgYnV0dG9uVmFyaWFudHM+ICYge1xuICAgIGFzQ2hpbGQ/OiBib29sZWFuXG4gIH0pIHtcbiAgY29uc3QgQ29tcCA9IGFzQ2hpbGQgPyBTbG90IDogJ2J1dHRvbidcblxuICByZXR1cm4gKFxuICAgIDxDb21wXG4gICAgICBkYXRhLXNsb3Q9XCJidXR0b25cIlxuICAgICAgY2xhc3NOYW1lPXtjbihidXR0b25WYXJpYW50cyh7IHZhcmlhbnQsIHNpemUsIGNsYXNzTmFtZSB9KSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgeyBCdXR0b24sIGJ1dHRvblZhcmlhbnRzIH1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzJ1xuaW1wb3J0IHR5cGUgeyBDbGFzc1ZhbHVlIH0gZnJvbSAnY2xzeCdcbmltcG9ydCB7IGNsc3ggfSBmcm9tICdjbHN4J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IHR3TWVyZ2UgfSBmcm9tICd0YWlsd2luZC1tZXJnZSdcbmltcG9ydCB0eXBlIHsgSWxhbXlDYWxlbmRhclByb3BFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy9pbGFteS1jYWxlbmRhci90eXBlcydcblxuZXhwb3J0IGZ1bmN0aW9uIGNuKC4uLmlucHV0czogQ2xhc3NWYWx1ZVtdKSB7XG4gIHJldHVybiB0d01lcmdlKGNsc3goaW5wdXRzKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlTW9ja0V2ZW50cyh7IGNvdW50ID0gNSB9ID0ge30pIHtcbiAgY29uc3QgZXZlbnRzOiBDYWxlbmRhckV2ZW50W10gPSBbXVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICBldmVudHMucHVzaCh7XG4gICAgICBpZDogaS50b1N0cmluZygpLFxuICAgICAgdGl0bGU6IGBNb2NrIEV2ZW50ICR7aSArIDF9YCxcbiAgICAgIHN0YXJ0OiBkYXlqcygpLnN0YXJ0T2YoJ3dlZWsnKS5hZGQoaSwgJ2RheScpLnN0YXJ0T2YoJ2RheScpLFxuICAgICAgZW5kOiBkYXlqcygpLnN0YXJ0T2YoJ3dlZWsnKS5hZGQoaSwgJ2RheScpLmVuZE9mKCdkYXknKSxcbiAgICAgIGNvbG9yOiAnYmctZ3JheS0xMDAgdGV4dC1ncmF5LTgwMCcsXG4gICAgfSlcbiAgfVxuICByZXR1cm4gZXZlbnRzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYWZlRGF0ZShkYXRlOiBkYXlqcy5EYXlqcyB8IERhdGUgfCBzdHJpbmcpOiBkYXlqcy5EYXlqcyB7XG4gIGlmIChkYXlqcy5pc0RheWpzKGRhdGUpKSB7XG4gICAgcmV0dXJuIGRhdGVcbiAgfVxuXG4gIGNvbnN0IHBhcnNlZERhdGUgPSBkYXlqcyhkYXRlKVxuICByZXR1cm4gcGFyc2VkRGF0ZS5pc1ZhbGlkKCkgPyBwYXJzZWREYXRlIDogZGF5anMoKVxufVxuXG5leHBvcnQgY29uc3Qgb21pdEtleXMgPSA8VCBleHRlbmRzIG9iamVjdCwgSyBleHRlbmRzIGtleW9mIFQ+KFxuICBvYmo6IFQsXG4gIGtleXM6IEtbXVxuKTogT21pdDxULCBLPiA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IHsgLi4ub2JqIH1cbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgIGRlbGV0ZSByZXN1bHRba2V5XVxuICB9XG4gIHJldHVybiByZXN1bHRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVB1YmxpY0ZhY2luZ0NhbGVuZGFyRXZlbnQoXG4gIGV2ZW50czogSWxhbXlDYWxlbmRhclByb3BFdmVudFtdXG4pOiBDYWxlbmRhckV2ZW50W10ge1xuICBpZiAoIWV2ZW50cyB8fCAhZXZlbnRzLmxlbmd0aCkge1xuICAgIHJldHVybiBbXVxuICB9XG5cbiAgcmV0dXJuIGV2ZW50cy5tYXAoKGV2ZW50KSA9PiB7XG4gICAgLy8gRXZlbnRzIGFyZSBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IGZvcm1hdCB3aXRoIFJSVUxFIHN0cmluZ3NcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZXZlbnQsXG4gICAgICBzdGFydDogZGF5anMuaXNEYXlqcyhldmVudC5zdGFydCkgPyBldmVudC5zdGFydCA6IGRheWpzKGV2ZW50LnN0YXJ0KSxcbiAgICAgIGVuZDogZGF5anMuaXNEYXlqcyhldmVudC5lbmQpID8gZXZlbnQuZW5kIDogZGF5anMoZXZlbnQuZW5kKSxcbiAgICB9IGFzIENhbGVuZGFyRXZlbnRcbiAgfSlcbn1cbiIsCiAgICAiaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJ1xuaW1wb3J0IHdlZWtkYXkgZnJvbSAnZGF5anMvcGx1Z2luL3dlZWtkYXkuanMnXG5pbXBvcnQgd2Vla09mWWVhciBmcm9tICdkYXlqcy9wbHVnaW4vd2Vla09mWWVhci5qcydcbmltcG9ydCBpc1NhbWVPckFmdGVyIGZyb20gJ2RheWpzL3BsdWdpbi9pc1NhbWVPckFmdGVyLmpzJ1xuaW1wb3J0IGlzU2FtZU9yQmVmb3JlIGZyb20gJ2RheWpzL3BsdWdpbi9pc1NhbWVPckJlZm9yZS5qcydcbmltcG9ydCBpc0JldHdlZW4gZnJvbSAnZGF5anMvcGx1Z2luL2lzQmV0d2Vlbi5qcydcbmltcG9ydCBtaW5NYXggZnJvbSAnZGF5anMvcGx1Z2luL21pbk1heC5qcydcbmltcG9ydCB0aW1lem9uZSBmcm9tICdkYXlqcy9wbHVnaW4vdGltZXpvbmUuanMnXG5pbXBvcnQgdXRjIGZyb20gJ2RheWpzL3BsdWdpbi91dGMuanMnXG5pbXBvcnQgbG9jYWxlRGF0YSBmcm9tICdkYXlqcy9wbHVnaW4vbG9jYWxlRGF0YS5qcydcblxuLy8gRXh0ZW5kIGRheWpzIHdpdGggcGx1Z2luc1xuZGF5anMuZXh0ZW5kKHdlZWtkYXkpXG5kYXlqcy5leHRlbmQod2Vla09mWWVhcilcbmRheWpzLmV4dGVuZChpc1NhbWVPckFmdGVyKVxuZGF5anMuZXh0ZW5kKGlzU2FtZU9yQmVmb3JlKVxuZGF5anMuZXh0ZW5kKGlzQmV0d2VlbilcbmRheWpzLmV4dGVuZChtaW5NYXgpXG5kYXlqcy5leHRlbmQodGltZXpvbmUpXG5kYXlqcy5leHRlbmQodXRjKVxuZGF5anMuZXh0ZW5kKGxvY2FsZURhdGEpXG5cbi8vIEltcG9ydCBhbGwgZGF5anMgbG9jYWxlcyBhbHBoYWJldGljYWxseVxuLy8gbG9jYWxlLmpzb24gZmlsZTogW3tcImtleVwiOlwiYWZcIixcIm5hbWVcIjpcIkFmcmlrYWFuc1wifSx7XCJrZXlcIjpcImFtXCIsXCJuYW1lXCI6XCJBbWhhcmljXCJ9LHtcImtleVwiOlwiYXItZHpcIixcIm5hbWVcIjpcIkFyYWJpYyAoQWxnZXJpYSlcIn0se1wia2V5XCI6XCJhci1pcVwiLFwibmFtZVwiOlwiIEFyYWJpYyAoSXJhcSlcIn0se1wia2V5XCI6XCJhci1rd1wiLFwibmFtZVwiOlwiQXJhYmljIChLdXdhaXQpXCJ9LHtcImtleVwiOlwiYXItbHlcIixcIm5hbWVcIjpcIkFyYWJpYyAoTHliaWEpXCJ9LHtcImtleVwiOlwiYXItbWFcIixcIm5hbWVcIjpcIkFyYWJpYyAoTW9yb2NjbylcIn0se1wia2V5XCI6XCJhci1zYVwiLFwibmFtZVwiOlwiQXJhYmljIChTYXVkaSBBcmFiaWEpXCJ9LHtcImtleVwiOlwiYXItdG5cIixcIm5hbWVcIjpcIiBBcmFiaWMgKFR1bmlzaWEpXCJ9LHtcImtleVwiOlwiYXJcIixcIm5hbWVcIjpcIkFyYWJpY1wifSx7XCJrZXlcIjpcImF6XCIsXCJuYW1lXCI6XCJBemVyYmFpamFuaVwifSx7XCJrZXlcIjpcImJlXCIsXCJuYW1lXCI6XCJCZWxhcnVzaWFuXCJ9LHtcImtleVwiOlwiYmdcIixcIm5hbWVcIjpcIkJ1bGdhcmlhblwifSx7XCJrZXlcIjpcImJpXCIsXCJuYW1lXCI6XCJCaXNsYW1hXCJ9LHtcImtleVwiOlwiYm1cIixcIm5hbWVcIjpcIkJhbWJhcmFcIn0se1wia2V5XCI6XCJibi1iZFwiLFwibmFtZVwiOlwiQmVuZ2FsaSAoQmFuZ2xhZGVzaClcIn0se1wia2V5XCI6XCJiblwiLFwibmFtZVwiOlwiQmVuZ2FsaVwifSx7XCJrZXlcIjpcImJvXCIsXCJuYW1lXCI6XCJUaWJldGFuXCJ9LHtcImtleVwiOlwiYnJcIixcIm5hbWVcIjpcIkJyZXRvblwifSx7XCJrZXlcIjpcImJzXCIsXCJuYW1lXCI6XCJCb3NuaWFuXCJ9LHtcImtleVwiOlwiY2FcIixcIm5hbWVcIjpcIkNhdGFsYW5cIn0se1wia2V5XCI6XCJjc1wiLFwibmFtZVwiOlwiQ3plY2hcIn0se1wia2V5XCI6XCJjdlwiLFwibmFtZVwiOlwiQ2h1dmFzaFwifSx7XCJrZXlcIjpcImN5XCIsXCJuYW1lXCI6XCJXZWxzaFwifSx7XCJrZXlcIjpcImRlLWF0XCIsXCJuYW1lXCI6XCJHZXJtYW4gKEF1c3RyaWEpXCJ9LHtcImtleVwiOlwiZGFcIixcIm5hbWVcIjpcIkRhbmlzaFwifSx7XCJrZXlcIjpcImRlLWNoXCIsXCJuYW1lXCI6XCJHZXJtYW4gKFN3aXR6ZXJsYW5kKVwifSx7XCJrZXlcIjpcImRlXCIsXCJuYW1lXCI6XCJHZXJtYW5cIn0se1wia2V5XCI6XCJkdlwiLFwibmFtZVwiOlwiTWFsZGl2aWFuXCJ9LHtcImtleVwiOlwiZWxcIixcIm5hbWVcIjpcIkdyZWVrXCJ9LHtcImtleVwiOlwiZW4tYXVcIixcIm5hbWVcIjpcIkVuZ2xpc2ggKEF1c3RyYWxpYSlcIn0se1wia2V5XCI6XCJlbi1jYVwiLFwibmFtZVwiOlwiRW5nbGlzaCAoQ2FuYWRhKVwifSx7XCJrZXlcIjpcImVuLWdiXCIsXCJuYW1lXCI6XCJFbmdsaXNoIChVbml0ZWQgS2luZ2RvbSlcIn0se1wia2V5XCI6XCJlbi1pZVwiLFwibmFtZVwiOlwiRW5nbGlzaCAoSXJlbGFuZClcIn0se1wia2V5XCI6XCJlbi1pbFwiLFwibmFtZVwiOlwiRW5nbGlzaCAoSXNyYWVsKVwifSx7XCJrZXlcIjpcImVuLWluXCIsXCJuYW1lXCI6XCJFbmdsaXNoIChJbmRpYSlcIn0se1wia2V5XCI6XCJlbi1uelwiLFwibmFtZVwiOlwiRW5nbGlzaCAoTmV3IFplYWxhbmQpXCJ9LHtcImtleVwiOlwiZW4tc2dcIixcIm5hbWVcIjpcIkVuZ2xpc2ggKFNpbmdhcG9yZSlcIn0se1wia2V5XCI6XCJlbi10dFwiLFwibmFtZVwiOlwiRW5nbGlzaCAoVHJpbmlkYWQgJiBUb2JhZ28pXCJ9LHtcImtleVwiOlwiZW9cIixcIm5hbWVcIjpcIkVzcGVyYW50b1wifSx7XCJrZXlcIjpcImVuXCIsXCJuYW1lXCI6XCJFbmdsaXNoXCJ9LHtcImtleVwiOlwiZXMtZG9cIixcIm5hbWVcIjpcIlNwYW5pc2ggKERvbWluaWNhbiBSZXB1YmxpYylcIn0se1wia2V5XCI6XCJlcy1teFwiLFwibmFtZVwiOlwiU3BhbmlzaCAoTWV4aWNvKVwifSx7XCJrZXlcIjpcImVzLXByXCIsXCJuYW1lXCI6XCJTcGFuaXNoIChQdWVydG8gUmljbylcIn0se1wia2V5XCI6XCJlcy11c1wiLFwibmFtZVwiOlwiU3BhbmlzaCAoVW5pdGVkIFN0YXRlcylcIn0se1wia2V5XCI6XCJldFwiLFwibmFtZVwiOlwiRXN0b25pYW5cIn0se1wia2V5XCI6XCJlc1wiLFwibmFtZVwiOlwiU3BhbmlzaFwifSx7XCJrZXlcIjpcImV1XCIsXCJuYW1lXCI6XCJCYXNxdWVcIn0se1wia2V5XCI6XCJmYVwiLFwibmFtZVwiOlwiUGVyc2lhblwifSx7XCJrZXlcIjpcImZvXCIsXCJuYW1lXCI6XCJGYXJvZXNlXCJ9LHtcImtleVwiOlwiZmlcIixcIm5hbWVcIjpcIkZpbm5pc2hcIn0se1wia2V5XCI6XCJmci1jYVwiLFwibmFtZVwiOlwiRnJlbmNoIChDYW5hZGEpXCJ9LHtcImtleVwiOlwiZnItY2hcIixcIm5hbWVcIjpcIkZyZW5jaCAoU3dpdHplcmxhbmQpXCJ9LHtcImtleVwiOlwiZnJcIixcIm5hbWVcIjpcIkZyZW5jaFwifSx7XCJrZXlcIjpcImZ5XCIsXCJuYW1lXCI6XCJGcmlzaWFuXCJ9LHtcImtleVwiOlwiZ2FcIixcIm5hbWVcIjpcIklyaXNoIG9yIElyaXNoIEdhZWxpY1wifSx7XCJrZXlcIjpcImdkXCIsXCJuYW1lXCI6XCJTY290dGlzaCBHYWVsaWNcIn0se1wia2V5XCI6XCJnb20tbGF0blwiLFwibmFtZVwiOlwiS29ua2FuaSBMYXRpbiBzY3JpcHRcIn0se1wia2V5XCI6XCJnbFwiLFwibmFtZVwiOlwiR2FsaWNpYW5cIn0se1wia2V5XCI6XCJndVwiLFwibmFtZVwiOlwiR3VqYXJhdGlcIn0se1wia2V5XCI6XCJoZVwiLFwibmFtZVwiOlwiSGVicmV3XCJ9LHtcImtleVwiOlwiaGlcIixcIm5hbWVcIjpcIkhpbmRpXCJ9LHtcImtleVwiOlwiaHJcIixcIm5hbWVcIjpcIkNyb2F0aWFuXCJ9LHtcImtleVwiOlwiaHVcIixcIm5hbWVcIjpcIkh1bmdhcmlhblwifSx7XCJrZXlcIjpcImh0XCIsXCJuYW1lXCI6XCJIYWl0aWFuIENyZW9sZSAoSGFpdGkpXCJ9LHtcImtleVwiOlwiaHktYW1cIixcIm5hbWVcIjpcIkFybWVuaWFuXCJ9LHtcImtleVwiOlwiaWRcIixcIm5hbWVcIjpcIkluZG9uZXNpYW5cIn0se1wia2V5XCI6XCJpc1wiLFwibmFtZVwiOlwiSWNlbGFuZGljXCJ9LHtcImtleVwiOlwiaXQtY2hcIixcIm5hbWVcIjpcIkl0YWxpYW4gKFN3aXR6ZXJsYW5kKVwifSx7XCJrZXlcIjpcIml0XCIsXCJuYW1lXCI6XCJJdGFsaWFuXCJ9LHtcImtleVwiOlwiamFcIixcIm5hbWVcIjpcIkphcGFuZXNlXCJ9LHtcImtleVwiOlwianZcIixcIm5hbWVcIjpcIkphdmFuZXNlXCJ9LHtcImtleVwiOlwia2FcIixcIm5hbWVcIjpcIkdlb3JnaWFuXCJ9LHtcImtleVwiOlwia2tcIixcIm5hbWVcIjpcIkthemFraFwifSx7XCJrZXlcIjpcImttXCIsXCJuYW1lXCI6XCJDYW1ib2RpYW5cIn0se1wia2V5XCI6XCJrblwiLFwibmFtZVwiOlwiS2FubmFkYVwifSx7XCJrZXlcIjpcImtvXCIsXCJuYW1lXCI6XCJLb3JlYW5cIn0se1wia2V5XCI6XCJrdVwiLFwibmFtZVwiOlwiS3VyZGlzaFwifSx7XCJrZXlcIjpcImt5XCIsXCJuYW1lXCI6XCJLeXJneXpcIn0se1wia2V5XCI6XCJsYlwiLFwibmFtZVwiOlwiTHV4ZW1ib3VyZ2lzaFwifSx7XCJrZXlcIjpcImxvXCIsXCJuYW1lXCI6XCJMYW9cIn0se1wia2V5XCI6XCJsdFwiLFwibmFtZVwiOlwiTGl0aHVhbmlhblwifSx7XCJrZXlcIjpcImx2XCIsXCJuYW1lXCI6XCJMYXR2aWFuXCJ9LHtcImtleVwiOlwibWVcIixcIm5hbWVcIjpcIk1vbnRlbmVncmluXCJ9LHtcImtleVwiOlwibWlcIixcIm5hbWVcIjpcIk1hb3JpXCJ9LHtcImtleVwiOlwibWtcIixcIm5hbWVcIjpcIk1hY2Vkb25pYW5cIn0se1wia2V5XCI6XCJtbFwiLFwibmFtZVwiOlwiTWFsYXlhbGFtXCJ9LHtcImtleVwiOlwibW5cIixcIm5hbWVcIjpcIk1vbmdvbGlhblwifSx7XCJrZXlcIjpcIm1yXCIsXCJuYW1lXCI6XCJNYXJhdGhpXCJ9LHtcImtleVwiOlwibXMtbXlcIixcIm5hbWVcIjpcIk1hbGF5XCJ9LHtcImtleVwiOlwibXNcIixcIm5hbWVcIjpcIk1hbGF5XCJ9LHtcImtleVwiOlwibXRcIixcIm5hbWVcIjpcIk1hbHRlc2UgKE1hbHRhKVwifSx7XCJrZXlcIjpcIm15XCIsXCJuYW1lXCI6XCJCdXJtZXNlXCJ9LHtcImtleVwiOlwibmJcIixcIm5hbWVcIjpcIk5vcndlZ2lhbiBCb2ttw6VsXCJ9LHtcImtleVwiOlwibmVcIixcIm5hbWVcIjpcIk5lcGFsZXNlXCJ9LHtcImtleVwiOlwibmwtYmVcIixcIm5hbWVcIjpcIkR1dGNoIChCZWxnaXVtKVwifSx7XCJrZXlcIjpcIm5sXCIsXCJuYW1lXCI6XCJEdXRjaFwifSx7XCJrZXlcIjpcInBsXCIsXCJuYW1lXCI6XCJQb2xpc2hcIn0se1wia2V5XCI6XCJwdC1iclwiLFwibmFtZVwiOlwiUG9ydHVndWVzZSAoQnJhemlsKVwifSx7XCJrZXlcIjpcInB0XCIsXCJuYW1lXCI6XCJQb3J0dWd1ZXNlXCJ9LHtcImtleVwiOlwicm5cIixcIm5hbWVcIjpcIktpcnVuZGlcIn0se1wia2V5XCI6XCJyb1wiLFwibmFtZVwiOlwiUm9tYW5pYW5cIn0se1wia2V5XCI6XCJydVwiLFwibmFtZVwiOlwiUnVzc2lhblwifSx7XCJrZXlcIjpcInJ3XCIsXCJuYW1lXCI6XCJLaW55YXJ3YW5kYSAoUndhbmRhKVwifSx7XCJrZXlcIjpcInNkXCIsXCJuYW1lXCI6XCJTaW5kaGlcIn0se1wia2V5XCI6XCJzZVwiLFwibmFtZVwiOlwiTm9ydGhlcm4gU2FtaVwifSx7XCJrZXlcIjpcInNpXCIsXCJuYW1lXCI6XCJTaW5oYWxlc2VcIn0se1wia2V5XCI6XCJza1wiLFwibmFtZVwiOlwiU2xvdmFrXCJ9LHtcImtleVwiOlwic2xcIixcIm5hbWVcIjpcIlNsb3ZlbmlhblwifSx7XCJrZXlcIjpcInNxXCIsXCJuYW1lXCI6XCJBbGJhbmlhblwifSx7XCJrZXlcIjpcInNyLWN5cmxcIixcIm5hbWVcIjpcIlNlcmJpYW4gQ3lyaWxsaWNcIn0se1wia2V5XCI6XCJzc1wiLFwibmFtZVwiOlwic2lTd2F0aVwifSx7XCJrZXlcIjpcInN2LWZpXCIsXCJuYW1lXCI6XCJGaW5sYW5kIFN3ZWRpc2hcIn0se1wia2V5XCI6XCJzclwiLFwibmFtZVwiOlwiU2VyYmlhblwifSx7XCJrZXlcIjpcInN2XCIsXCJuYW1lXCI6XCJTd2VkaXNoXCJ9LHtcImtleVwiOlwic3dcIixcIm5hbWVcIjpcIlN3YWhpbGlcIn0se1wia2V5XCI6XCJ0YVwiLFwibmFtZVwiOlwiVGFtaWxcIn0se1wia2V5XCI6XCJ0ZVwiLFwibmFtZVwiOlwiVGVsdWd1XCJ9LHtcImtleVwiOlwidGV0XCIsXCJuYW1lXCI6XCJUZXR1biBEaWxpIChFYXN0IFRpbW9yKVwifSx7XCJrZXlcIjpcInRnXCIsXCJuYW1lXCI6XCJUYWppa1wifSx7XCJrZXlcIjpcInRoXCIsXCJuYW1lXCI6XCJUaGFpXCJ9LHtcImtleVwiOlwidGtcIixcIm5hbWVcIjpcIlR1cmttZW5cIn0se1wia2V5XCI6XCJ0bC1waFwiLFwibmFtZVwiOlwiVGFnYWxvZyAoUGhpbGlwcGluZXMpXCJ9LHtcImtleVwiOlwidGxoXCIsXCJuYW1lXCI6XCJLbGluZ29uXCJ9LHtcImtleVwiOlwidHJcIixcIm5hbWVcIjpcIlR1cmtpc2hcIn0se1wia2V5XCI6XCJ0emxcIixcIm5hbWVcIjpcIlRhbG9zc2FuXCJ9LHtcImtleVwiOlwidHptLWxhdG5cIixcIm5hbWVcIjpcIkNlbnRyYWwgQXRsYXMgVGFtYXppZ2h0IExhdGluXCJ9LHtcImtleVwiOlwidHptXCIsXCJuYW1lXCI6XCJDZW50cmFsIEF0bGFzIFRhbWF6aWdodFwifSx7XCJrZXlcIjpcInVnLWNuXCIsXCJuYW1lXCI6XCJVeWdodXIgKENoaW5hKVwifSx7XCJrZXlcIjpcInVrXCIsXCJuYW1lXCI6XCJVa3JhaW5pYW5cIn0se1wia2V5XCI6XCJ1clwiLFwibmFtZVwiOlwiVXJkdVwifSx7XCJrZXlcIjpcInV6LWxhdG5cIixcIm5hbWVcIjpcIlV6YmVrIExhdGluXCJ9LHtcImtleVwiOlwidXpcIixcIm5hbWVcIjpcIlV6YmVrXCJ9LHtcImtleVwiOlwidmlcIixcIm5hbWVcIjpcIlZpZXRuYW1lc2VcIn0se1wia2V5XCI6XCJ4LXBzZXVkb1wiLFwibmFtZVwiOlwiUHNldWRvXCJ9LHtcImtleVwiOlwieW9cIixcIm5hbWVcIjpcIllvcnViYSBOaWdlcmlhXCJ9LHtcImtleVwiOlwiemgtY25cIixcIm5hbWVcIjpcIkNoaW5lc2UgKENoaW5hKVwifSx7XCJrZXlcIjpcInpoLWhrXCIsXCJuYW1lXCI6XCJDaGluZXNlIChIb25nIEtvbmcpXCJ9LHtcImtleVwiOlwiemgtdHdcIixcIm5hbWVcIjpcIkNoaW5lc2UgKFRhaXdhbilcIn0se1wia2V5XCI6XCJ6aFwiLFwibmFtZVwiOlwiQ2hpbmVzZVwifSx7XCJrZXlcIjpcIm9jLWxuY1wiLFwibmFtZVwiOlwiT2NjaXRhbiwgbGVuZ2Fkb2NpYW4gZGlhbGVjdGVcIn0se1wia2V5XCI6XCJublwiLFwibmFtZVwiOlwiTnlub3Jza1wifSx7XCJrZXlcIjpcInBhLWluXCIsXCJuYW1lXCI6XCJQdW5qYWJpIChJbmRpYSlcIn1dXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hZi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2FtLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYXItZHouanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hci1pcS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2FyLWt3LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYXItbHkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hci1tYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2FyLXNhLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYXItdG4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hci5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2F6LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYmUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9iZy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2JpLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYm0uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ibi1iZC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2JuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYm8uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ici5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2JzLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvY2EuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9jcy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2N2LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvY3kuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9kYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2RlLWF0LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZGUtY2guanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9kZS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2R2LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZWwuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi1hdS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VuLWNhLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW4tZ2IuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi1pZS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VuLWlsLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW4taW4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi1uei5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VuLXNnLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW4tdHQuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VvLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZXMtZG8uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lcy1teC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VzLXByLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZXMtdXMuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lcy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2V0LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZXUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9mYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2ZpLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZm8uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9mci1jYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2ZyLWNoLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZnIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9meS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2dhLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZ2QuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9nbC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2dvbS1sYXRuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZ3UuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9oZS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2hpLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvaHIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9odC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2h1LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvaHktYW0uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9pZC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2lzLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvaXQtY2guanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9pdC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2phLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvanYuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9rYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2trLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUva20uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9rbi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2tvLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUva3UuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9reS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2xiLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbG8uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9sdC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2x2LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbWUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9taS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL21rLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbWwuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9tbi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL21yLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbXMtbXkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9tcy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL210LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbXkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9uYi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL25lLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbmwtYmUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ubC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL25uLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvb2MtbG5jLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvcGEtaW4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9wbC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3B0LWJyLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvcHQuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ybi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3JvLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvcnUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ydy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3NkLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc2UuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zaS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3NrLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc2wuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zcS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3NyLWN5cmwuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zci5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3NzLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc3YtZmkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zdi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3N3LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdGEuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90ZS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3RldC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3RnLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdGguanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90ay5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3RsLXBoLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdGxoLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdHIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90emwuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90em0tbGF0bi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3R6bS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3VnLWNuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdWsuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS91ci5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3V6LWxhdG4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS91ei5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3ZpLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUveC1wc2V1ZG8uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS95by5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3poLWNuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvemgtaGsuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS96aC10dy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3poLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCBkYXlqc1xuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7XG4gIENoZXZyb25Eb3duSWNvbixcbiAgQ2hldnJvbkxlZnRJY29uLFxuICBDaGV2cm9uUmlnaHRJY29uLFxufSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSB7IERheUJ1dHRvbiB9IGZyb20gJ3JlYWN0LWRheS1waWNrZXInXG5pbXBvcnQgeyBEYXlQaWNrZXIsIGdldERlZmF1bHRDbGFzc05hbWVzIH0gZnJvbSAncmVhY3QtZGF5LXBpY2tlcidcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IEJ1dHRvbiwgYnV0dG9uVmFyaWFudHMgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuXG5mdW5jdGlvbiBDYWxlbmRhcih7XG4gIGNsYXNzTmFtZSxcbiAgY2xhc3NOYW1lcyxcbiAgc2hvd091dHNpZGVEYXlzID0gdHJ1ZSxcbiAgY2FwdGlvbkxheW91dCA9ICdsYWJlbCcsXG4gIGJ1dHRvblZhcmlhbnQgPSAnZ2hvc3QnLFxuICBmb3JtYXR0ZXJzLFxuICBjb21wb25lbnRzLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERheVBpY2tlcj4gJiB7XG4gIGJ1dHRvblZhcmlhbnQ/OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgQnV0dG9uPlsndmFyaWFudCddXG59KSB7XG4gIGNvbnN0IGRlZmF1bHRDbGFzc05hbWVzID0gZ2V0RGVmYXVsdENsYXNzTmFtZXMoKVxuXG4gIHJldHVybiAoXG4gICAgPERheVBpY2tlclxuICAgICAgc2hvd091dHNpZGVEYXlzPXtzaG93T3V0c2lkZURheXN9XG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnYmctYmFja2dyb3VuZCBncm91cC9jYWxlbmRhciBwLTMgWy0tY2VsbC1zaXplOi0tc3BhY2luZyg4KV0gW1tkYXRhLXNsb3Q9Y2FyZC1jb250ZW50XV8mXTpiZy10cmFuc3BhcmVudCBbW2RhdGEtc2xvdD1wb3BvdmVyLWNvbnRlbnRdXyZdOmJnLXRyYW5zcGFyZW50JyxcbiAgICAgICAgU3RyaW5nLnJhd2BydGw6Kio6Wy5yZHAtYnV0dG9uXFxfbmV4dD5zdmddOnJvdGF0ZS0xODBgLFxuICAgICAgICBTdHJpbmcucmF3YHJ0bDoqKjpbLnJkcC1idXR0b25cXF9wcmV2aW91cz5zdmddOnJvdGF0ZS0xODBgLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICBjYXB0aW9uTGF5b3V0PXtjYXB0aW9uTGF5b3V0fVxuICAgICAgZm9ybWF0dGVycz17e1xuICAgICAgICBmb3JtYXRNb250aERyb3Bkb3duOiAoZGF0ZSkgPT5cbiAgICAgICAgICBkYXRlLnRvTG9jYWxlU3RyaW5nKCdkZWZhdWx0JywgeyBtb250aDogJ3Nob3J0JyB9KSxcbiAgICAgICAgLi4uZm9ybWF0dGVycyxcbiAgICAgIH19XG4gICAgICBjbGFzc05hbWVzPXt7XG4gICAgICAgIHJvb3Q6IGNuKCd3LWZpdCcsIGRlZmF1bHRDbGFzc05hbWVzLnJvb3QpLFxuICAgICAgICBtb250aHM6IGNuKFxuICAgICAgICAgICdmbGV4IGdhcC00IGZsZXgtY29sIG1kOmZsZXgtcm93IHJlbGF0aXZlJyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy5tb250aHNcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGg6IGNuKCdmbGV4IGZsZXgtY29sIHctZnVsbCBnYXAtNCcsIGRlZmF1bHRDbGFzc05hbWVzLm1vbnRoKSxcbiAgICAgICAgbmF2OiBjbihcbiAgICAgICAgICAnZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgdy1mdWxsIGFic29sdXRlIHRvcC0wIGluc2V0LXgtMCBqdXN0aWZ5LWJldHdlZW4nLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLm5hdlxuICAgICAgICApLFxuICAgICAgICBidXR0b25fcHJldmlvdXM6IGNuKFxuICAgICAgICAgIGJ1dHRvblZhcmlhbnRzKHsgdmFyaWFudDogYnV0dG9uVmFyaWFudCB9KSxcbiAgICAgICAgICAnc2l6ZS0oLS1jZWxsLXNpemUpIGFyaWEtZGlzYWJsZWQ6b3BhY2l0eS01MCBwLTAgc2VsZWN0LW5vbmUnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLmJ1dHRvbl9wcmV2aW91c1xuICAgICAgICApLFxuICAgICAgICBidXR0b25fbmV4dDogY24oXG4gICAgICAgICAgYnV0dG9uVmFyaWFudHMoeyB2YXJpYW50OiBidXR0b25WYXJpYW50IH0pLFxuICAgICAgICAgICdzaXplLSgtLWNlbGwtc2l6ZSkgYXJpYS1kaXNhYmxlZDpvcGFjaXR5LTUwIHAtMCBzZWxlY3Qtbm9uZScsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMuYnV0dG9uX25leHRcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhfY2FwdGlvbjogY24oXG4gICAgICAgICAgJ2ZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGgtKC0tY2VsbC1zaXplKSB3LWZ1bGwgcHgtKC0tY2VsbC1zaXplKScsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMubW9udGhfY2FwdGlvblxuICAgICAgICApLFxuICAgICAgICBkcm9wZG93bnM6IGNuKFxuICAgICAgICAgICd3LWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1zbSBmb250LW1lZGl1bSBqdXN0aWZ5LWNlbnRlciBoLSgtLWNlbGwtc2l6ZSkgZ2FwLTEuNScsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMuZHJvcGRvd25zXG4gICAgICAgICksXG4gICAgICAgIGRyb3Bkb3duX3Jvb3Q6IGNuKFxuICAgICAgICAgICdyZWxhdGl2ZSBoYXMtZm9jdXM6Ym9yZGVyLXJpbmcgYm9yZGVyIGJvcmRlci1pbnB1dCBzaGFkb3cteHMgaGFzLWZvY3VzOnJpbmctcmluZy81MCBoYXMtZm9jdXM6cmluZy1bM3B4XSByb3VuZGVkLW1kJyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy5kcm9wZG93bl9yb290XG4gICAgICAgICksXG4gICAgICAgIGRyb3Bkb3duOiBjbihcbiAgICAgICAgICAnYWJzb2x1dGUgYmctcG9wb3ZlciBpbnNldC0wIG9wYWNpdHktMCcsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMuZHJvcGRvd25cbiAgICAgICAgKSxcbiAgICAgICAgY2FwdGlvbl9sYWJlbDogY24oXG4gICAgICAgICAgJ3NlbGVjdC1ub25lIGZvbnQtbWVkaXVtJyxcbiAgICAgICAgICBjYXB0aW9uTGF5b3V0ID09PSAnbGFiZWwnXG4gICAgICAgICAgICA/ICd0ZXh0LXNtJ1xuICAgICAgICAgICAgOiAncm91bmRlZC1tZCBwbC0yIHByLTEgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgdGV4dC1zbSBoLTggWyY+c3ZnXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgWyY+c3ZnXTpzaXplLTMuNScsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMuY2FwdGlvbl9sYWJlbFxuICAgICAgICApLFxuICAgICAgICB0YWJsZTogJ3ctZnVsbCBib3JkZXItY29sbGFwc2UnLFxuICAgICAgICB3ZWVrZGF5czogY24oJ2ZsZXgnLCBkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrZGF5cyksXG4gICAgICAgIHdlZWtkYXk6IGNuKFxuICAgICAgICAgICd0ZXh0LW11dGVkLWZvcmVncm91bmQgcm91bmRlZC1tZCBmbGV4LTEgZm9udC1ub3JtYWwgdGV4dC1bMC44cmVtXSBzZWxlY3Qtbm9uZScsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMud2Vla2RheVxuICAgICAgICApLFxuICAgICAgICB3ZWVrOiBjbignZmxleCB3LWZ1bGwgbXQtMicsIGRlZmF1bHRDbGFzc05hbWVzLndlZWspLFxuICAgICAgICB3ZWVrX251bWJlcl9oZWFkZXI6IGNuKFxuICAgICAgICAgICdzZWxlY3Qtbm9uZSB3LSgtLWNlbGwtc2l6ZSknLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLndlZWtfbnVtYmVyX2hlYWRlclxuICAgICAgICApLFxuICAgICAgICB3ZWVrX251bWJlcjogY24oXG4gICAgICAgICAgJ3RleHQtWzAuOHJlbV0gc2VsZWN0LW5vbmUgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kJyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrX251bWJlclxuICAgICAgICApLFxuICAgICAgICBkYXk6IGNuKFxuICAgICAgICAgICdyZWxhdGl2ZSB3LWZ1bGwgaC1mdWxsIHAtMCB0ZXh0LWNlbnRlciBbJjpmaXJzdC1jaGlsZFtkYXRhLXNlbGVjdGVkPXRydWVdX2J1dHRvbl06cm91bmRlZC1sLW1kIFsmOmxhc3QtY2hpbGRbZGF0YS1zZWxlY3RlZD10cnVlXV9idXR0b25dOnJvdW5kZWQtci1tZCBncm91cC9kYXkgYXNwZWN0LXNxdWFyZSBzZWxlY3Qtbm9uZScsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMuZGF5XG4gICAgICAgICksXG4gICAgICAgIHJhbmdlX3N0YXJ0OiBjbihcbiAgICAgICAgICAncm91bmRlZC1sLW1kIGJnLWFjY2VudCcsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMucmFuZ2Vfc3RhcnRcbiAgICAgICAgKSxcbiAgICAgICAgcmFuZ2VfbWlkZGxlOiBjbigncm91bmRlZC1ub25lJywgZGVmYXVsdENsYXNzTmFtZXMucmFuZ2VfbWlkZGxlKSxcbiAgICAgICAgcmFuZ2VfZW5kOiBjbigncm91bmRlZC1yLW1kIGJnLWFjY2VudCcsIGRlZmF1bHRDbGFzc05hbWVzLnJhbmdlX2VuZCksXG4gICAgICAgIHRvZGF5OiBjbihcbiAgICAgICAgICAnYmctYWNjZW50IHRleHQtYWNjZW50LWZvcmVncm91bmQgcm91bmRlZC1tZCBkYXRhLVtzZWxlY3RlZD10cnVlXTpyb3VuZGVkLW5vbmUnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLnRvZGF5XG4gICAgICAgICksXG4gICAgICAgIG91dHNpZGU6IGNuKFxuICAgICAgICAgICd0ZXh0LW11dGVkLWZvcmVncm91bmQgYXJpYS1zZWxlY3RlZDp0ZXh0LW11dGVkLWZvcmVncm91bmQnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLm91dHNpZGVcbiAgICAgICAgKSxcbiAgICAgICAgZGlzYWJsZWQ6IGNuKFxuICAgICAgICAgICd0ZXh0LW11dGVkLWZvcmVncm91bmQgb3BhY2l0eS01MCcsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMuZGlzYWJsZWRcbiAgICAgICAgKSxcbiAgICAgICAgaGlkZGVuOiBjbignaW52aXNpYmxlJywgZGVmYXVsdENsYXNzTmFtZXMuaGlkZGVuKSxcbiAgICAgICAgLi4uY2xhc3NOYW1lcyxcbiAgICAgIH19XG4gICAgICBjb21wb25lbnRzPXt7XG4gICAgICAgIFJvb3Q6ICh7IGNsYXNzTmFtZSwgcm9vdFJlZiwgLi4ucHJvcHMgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGRhdGEtc2xvdD1cImNhbGVuZGFyXCJcbiAgICAgICAgICAgICAgcmVmPXtyb290UmVmfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKGNsYXNzTmFtZSl9XG4gICAgICAgICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKVxuICAgICAgICB9LFxuICAgICAgICBDaGV2cm9uOiAoeyBjbGFzc05hbWUsIG9yaWVudGF0aW9uLCAuLi5wcm9wcyB9KSA9PiB7XG4gICAgICAgICAgaWYgKG9yaWVudGF0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxDaGV2cm9uTGVmdEljb24gY2xhc3NOYW1lPXtjbignc2l6ZS00JywgY2xhc3NOYW1lKX0gey4uLnByb3BzfSAvPlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPENoZXZyb25SaWdodEljb25cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKCdzaXplLTQnLCBjbGFzc05hbWUpfVxuICAgICAgICAgICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPENoZXZyb25Eb3duSWNvbiBjbGFzc05hbWU9e2NuKCdzaXplLTQnLCBjbGFzc05hbWUpfSB7Li4ucHJvcHN9IC8+XG4gICAgICAgICAgKVxuICAgICAgICB9LFxuICAgICAgICBEYXlCdXR0b246IENhbGVuZGFyRGF5QnV0dG9uLFxuICAgICAgICBXZWVrTnVtYmVyOiAoeyBjaGlsZHJlbiwgLi4ucHJvcHMgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8dGQgey4uLnByb3BzfT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IHNpemUtKC0tY2VsbC1zaXplKSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICApXG4gICAgICAgIH0sXG4gICAgICAgIC4uLmNvbXBvbmVudHMsXG4gICAgICB9fVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gQ2FsZW5kYXJEYXlCdXR0b24oe1xuICBjbGFzc05hbWUsXG4gIGRheSxcbiAgbW9kaWZpZXJzLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERheUJ1dHRvbj4pIHtcbiAgY29uc3QgZGVmYXVsdENsYXNzTmFtZXMgPSBnZXREZWZhdWx0Q2xhc3NOYW1lcygpXG5cbiAgY29uc3QgcmVmID0gUmVhY3QudXNlUmVmPEhUTUxCdXR0b25FbGVtZW50PihudWxsKVxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChtb2RpZmllcnMuZm9jdXNlZCkge1xuICAgICAgcmVmLmN1cnJlbnQ/LmZvY3VzKClcbiAgICB9XG4gIH0sIFttb2RpZmllcnMuZm9jdXNlZF0pXG5cbiAgcmV0dXJuIChcbiAgICA8QnV0dG9uXG4gICAgICByZWY9e3JlZn1cbiAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICBzaXplPVwiaWNvblwiXG4gICAgICBkYXRhLWRheT17ZGF5LmRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCl9XG4gICAgICBkYXRhLXNlbGVjdGVkLXNpbmdsZT17XG4gICAgICAgIG1vZGlmaWVycy5zZWxlY3RlZCAmJlxuICAgICAgICAhbW9kaWZpZXJzLnJhbmdlX3N0YXJ0ICYmXG4gICAgICAgICFtb2RpZmllcnMucmFuZ2VfZW5kICYmXG4gICAgICAgICFtb2RpZmllcnMucmFuZ2VfbWlkZGxlXG4gICAgICB9XG4gICAgICBkYXRhLXJhbmdlLXN0YXJ0PXttb2RpZmllcnMucmFuZ2Vfc3RhcnR9XG4gICAgICBkYXRhLXJhbmdlLWVuZD17bW9kaWZpZXJzLnJhbmdlX2VuZH1cbiAgICAgIGRhdGEtcmFuZ2UtbWlkZGxlPXttb2RpZmllcnMucmFuZ2VfbWlkZGxlfVxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2RhdGEtW3NlbGVjdGVkLXNpbmdsZT10cnVlXTpiZy1wcmltYXJ5IGRhdGEtW3NlbGVjdGVkLXNpbmdsZT10cnVlXTp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBkYXRhLVtyYW5nZS1taWRkbGU9dHJ1ZV06YmctYWNjZW50IGRhdGEtW3JhbmdlLW1pZGRsZT10cnVlXTp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGRhdGEtW3JhbmdlLXN0YXJ0PXRydWVdOmJnLXByaW1hcnkgZGF0YS1bcmFuZ2Utc3RhcnQ9dHJ1ZV06dGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZGF0YS1bcmFuZ2UtZW5kPXRydWVdOmJnLXByaW1hcnkgZGF0YS1bcmFuZ2UtZW5kPXRydWVdOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OmJvcmRlci1yaW5nIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OnJpbmctcmluZy81MCBkYXJrOmhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQgZmxleCBhc3BlY3Qtc3F1YXJlIHNpemUtYXV0byB3LWZ1bGwgbWluLXctKC0tY2VsbC1zaXplKSBmbGV4LWNvbCBnYXAtMSBsZWFkaW5nLW5vbmUgZm9udC1ub3JtYWwgZ3JvdXAtZGF0YS1bZm9jdXNlZD10cnVlXS9kYXk6cmVsYXRpdmUgZ3JvdXAtZGF0YS1bZm9jdXNlZD10cnVlXS9kYXk6ei0xMCBncm91cC1kYXRhLVtmb2N1c2VkPXRydWVdL2RheTpyaW5nLVszcHhdIGRhdGEtW3JhbmdlLWVuZD10cnVlXTpyb3VuZGVkLW1kIGRhdGEtW3JhbmdlLWVuZD10cnVlXTpyb3VuZGVkLXItbWQgZGF0YS1bcmFuZ2UtbWlkZGxlPXRydWVdOnJvdW5kZWQtbm9uZSBkYXRhLVtyYW5nZS1zdGFydD10cnVlXTpyb3VuZGVkLW1kIGRhdGEtW3JhbmdlLXN0YXJ0PXRydWVdOnJvdW5kZWQtbC1tZCBbJj5zcGFuXTp0ZXh0LXhzIFsmPnNwYW5dOm9wYWNpdHktNzAnLFxuICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy5kYXksXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmV4cG9ydCB7IENhbGVuZGFyLCBDYWxlbmRhckRheUJ1dHRvbiB9XG4iLAogICAgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICogYXMgQ2hlY2tib3hQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LWNoZWNrYm94J1xuaW1wb3J0IHsgQ2hlY2tJY29uIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBDaGVja2JveCh7XG4gIGNsYXNzTmFtZSxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBDaGVja2JveFByaW1pdGl2ZS5Sb290Pikge1xuICByZXR1cm4gKFxuICAgIDxDaGVja2JveFByaW1pdGl2ZS5Sb290XG4gICAgICBkYXRhLXNsb3Q9XCJjaGVja2JveFwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAncGVlciBib3JkZXItaW5wdXQgZGFyazpiZy1pbnB1dC8zMCBkYXRhLVtzdGF0ZT1jaGVja2VkXTpiZy1wcmltYXJ5IGRhdGEtW3N0YXRlPWNoZWNrZWRdOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhcms6ZGF0YS1bc3RhdGU9Y2hlY2tlZF06YmctcHJpbWFyeSBkYXRhLVtzdGF0ZT1jaGVja2VkXTpib3JkZXItcHJpbWFyeSBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBzaXplLTQgc2hyaW5rLTAgcm91bmRlZC1bNHB4XSBib3JkZXIgc2hhZG93LXhzIHRyYW5zaXRpb24tc2hhZG93IG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgPlxuICAgICAgPENoZWNrYm94UHJpbWl0aXZlLkluZGljYXRvclxuICAgICAgICBkYXRhLXNsb3Q9XCJjaGVja2JveC1pbmRpY2F0b3JcIlxuICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWN1cnJlbnQgdHJhbnNpdGlvbi1ub25lXCJcbiAgICAgID5cbiAgICAgICAgPENoZWNrSWNvbiBjbGFzc05hbWU9XCJzaXplLTMuNVwiIC8+XG4gICAgICA8L0NoZWNrYm94UHJpbWl0aXZlLkluZGljYXRvcj5cbiAgICA8L0NoZWNrYm94UHJpbWl0aXZlLlJvb3Q+XG4gIClcbn1cblxuZXhwb3J0IHsgQ2hlY2tib3ggfVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gQ2FyZCh7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1zbG90PVwiY2FyZFwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAndGV4dC1jYXJkLWZvcmVncm91bmQgZmxleCBmbGV4LWNvbCBnYXAtNiByb3VuZGVkLXhsIGJvcmRlciBzaGFkb3ctc20nLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBDYXJkSGVhZGVyKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBkYXRhLXNsb3Q9XCJjYXJkLWhlYWRlclwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnQGNvbnRhaW5lci9jYXJkLWhlYWRlciBncmlkIGF1dG8tcm93cy1taW4gZ3JpZC1yb3dzLVthdXRvX2F1dG9dIGl0ZW1zLXN0YXJ0IGdhcC0xLjUgcC00IHBiLTAgaGFzLWRhdGEtW3Nsb3Q9Y2FyZC1hY3Rpb25dOmdyaWQtY29scy1bMWZyX2F1dG9dJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gQ2FyZFRpdGxlKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBkYXRhLXNsb3Q9XCJjYXJkLXRpdGxlXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ2xlYWRpbmctbm9uZSBmb250LXNlbWlib2xkJywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIENhcmREZXNjcmlwdGlvbih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1zbG90PVwiY2FyZC1kZXNjcmlwdGlvblwiXG4gICAgICBjbGFzc05hbWU9e2NuKCd0ZXh0LW11dGVkLWZvcmVncm91bmQgdGV4dC1zbScsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBDYXJkQWN0aW9uKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBkYXRhLXNsb3Q9XCJjYXJkLWFjdGlvblwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnY29sLXN0YXJ0LTIgcm93LXNwYW4tMiByb3ctc3RhcnQtMSBzZWxmLXN0YXJ0IGp1c3RpZnktc2VsZi1lbmQnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBDYXJkQ29udGVudCh7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1zbG90PVwiY2FyZC1jb250ZW50XCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ3AtNCBwdC0wJywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIENhcmRGb290ZXIoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtc2xvdD1cImNhcmQtZm9vdGVyXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ2ZsZXggaXRlbXMtY2VudGVyIHB4LTYgWy5ib3JkZXItdF06cHQtNicsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQge1xuICBDYXJkLFxuICBDYXJkSGVhZGVyLFxuICBDYXJkRm9vdGVyLFxuICBDYXJkVGl0bGUsXG4gIENhcmRBY3Rpb24sXG4gIENhcmREZXNjcmlwdGlvbixcbiAgQ2FyZENvbnRlbnQsXG59XG4iLAogICAgImltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBDYWxlbmRhciBhcyBDYWxlbmRhckljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7IENhbGVuZGFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NhbGVuZGFyJ1xuaW1wb3J0IHtcbiAgUG9wb3ZlcixcbiAgUG9wb3ZlckNvbnRlbnQsXG4gIFBvcG92ZXJUcmlnZ2VyLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvcG9wb3ZlcidcbmltcG9ydCB7IHVzZVJlZiB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgUG9wb3ZlckNsb3NlIH0gZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXBvcG92ZXInXG5cbmludGVyZmFjZSBEYXRlUGlja2VyUHJvcHMge1xuICBkYXRlOiBEYXRlIHwgdW5kZWZpbmVkXG4gIHNldERhdGU6IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB2b2lkXG4gIGxhYmVsPzogc3RyaW5nXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICBjbG9zZU9uU2VsZWN0PzogYm9vbGVhblxufVxuXG5leHBvcnQgZnVuY3Rpb24gRGF0ZVBpY2tlcih7XG4gIGRhdGUsXG4gIGNsb3NlT25TZWxlY3QsXG4gIHNldERhdGUsXG4gIGxhYmVsID0gJ1BpY2sgYSBkYXRlJyxcbiAgY2xhc3NOYW1lLFxufTogRGF0ZVBpY2tlclByb3BzKSB7XG4gIGNvbnN0IHBvcE92ZXJSZWYgPSB1c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQgfCBudWxsPihudWxsKVxuXG4gIGNvbnN0IG9uU2VsZWN0ID0gKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHtcbiAgICBzZXREYXRlKGRhdGUpXG4gICAgaWYgKGNsb3NlT25TZWxlY3QpIHtcbiAgICAgIHBvcE92ZXJSZWYuY3VycmVudD8uY2xpY2soKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICA8UG9wb3Zlcj5cbiAgICAgICAgPFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgJ3ctZnVsbCBqdXN0aWZ5LXN0YXJ0IHRleHQtbGVmdCBmb250LW5vcm1hbCcsXG4gICAgICAgICAgICAgICFkYXRlICYmICd0ZXh0LW11dGVkLWZvcmVncm91bmQnXG4gICAgICAgICAgICApfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxDYWxlbmRhckljb24gY2xhc3NOYW1lPVwibXItMiBoLTQgdy00XCIgLz5cbiAgICAgICAgICAgIHtkYXRlID8gZGF5anMoZGF0ZSkuZm9ybWF0KCdNTU0gRCwgWVlZWScpIDogPHNwYW4+e2xhYmVsfTwvc3Bhbj59XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvUG9wb3ZlclRyaWdnZXI+XG4gICAgICAgIDxQb3BvdmVyQ29udGVudCBjbGFzc05hbWU9XCJ3LWF1dG8gcC0wXCIgYWxpZ249XCJzdGFydFwiPlxuICAgICAgICAgIDxQb3BvdmVyQ2xvc2UgcmVmPXtwb3BPdmVyUmVmfSAvPlxuICAgICAgICAgIDxDYWxlbmRhclxuICAgICAgICAgICAgbW9kZT1cInNpbmdsZVwiXG4gICAgICAgICAgICBzZWxlY3RlZD17ZGF0ZX1cbiAgICAgICAgICAgIG9uU2VsZWN0PXtvblNlbGVjdH1cbiAgICAgICAgICAgIG1vbnRoPXtkYXRlfVxuICAgICAgICAgICAgaW5pdGlhbEZvY3VzXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9Qb3BvdmVyQ29udGVudD5cbiAgICAgIDwvUG9wb3Zlcj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIFBvcG92ZXJQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXBvcG92ZXInXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIFBvcG92ZXIoe1xuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuUm9vdD4pIHtcbiAgcmV0dXJuIDxQb3BvdmVyUHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwicG9wb3ZlclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gUG9wb3ZlclRyaWdnZXIoe1xuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuVHJpZ2dlcj4pIHtcbiAgcmV0dXJuIDxQb3BvdmVyUHJpbWl0aXZlLlRyaWdnZXIgZGF0YS1zbG90PVwicG9wb3Zlci10cmlnZ2VyXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBQb3BvdmVyQ29udGVudCh7XG4gIGNsYXNzTmFtZSxcbiAgYWxpZ24gPSAnY2VudGVyJyxcbiAgc2lkZU9mZnNldCA9IDQsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgUG9wb3ZlclByaW1pdGl2ZS5Db250ZW50Pikge1xuICByZXR1cm4gKFxuICAgIDxQb3BvdmVyUHJpbWl0aXZlLlBvcnRhbD5cbiAgICAgIDxQb3BvdmVyUHJpbWl0aXZlLkNvbnRlbnRcbiAgICAgICAgZGF0YS1zbG90PVwicG9wb3Zlci1jb250ZW50XCJcbiAgICAgICAgYWxpZ249e2FsaWdufVxuICAgICAgICBzaWRlT2Zmc2V0PXtzaWRlT2Zmc2V0fVxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICdiZy1wb3BvdmVyIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc3RhdGU9b3Blbl06em9vbS1pbi05NSBkYXRhLVtzaWRlPWJvdHRvbV06c2xpZGUtaW4tZnJvbS10b3AtMiBkYXRhLVtzaWRlPWxlZnRdOnNsaWRlLWluLWZyb20tcmlnaHQtMiBkYXRhLVtzaWRlPXJpZ2h0XTpzbGlkZS1pbi1mcm9tLWxlZnQtMiBkYXRhLVtzaWRlPXRvcF06c2xpZGUtaW4tZnJvbS1ib3R0b20tMiB6LTUwIHctNzIgb3JpZ2luLSgtLXJhZGl4LXBvcG92ZXItY29udGVudC10cmFuc2Zvcm0tb3JpZ2luKSByb3VuZGVkLW1kIGJvcmRlciBwLTQgc2hhZG93LW1kIG91dGxpbmUtaGlkZGVuJyxcbiAgICAgICAgICBjbGFzc05hbWVcbiAgICAgICAgKX1cbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgLz5cbiAgICA8L1BvcG92ZXJQcmltaXRpdmUuUG9ydGFsPlxuICApXG59XG5cbmZ1bmN0aW9uIFBvcG92ZXJBbmNob3Ioe1xuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuQW5jaG9yPikge1xuICByZXR1cm4gPFBvcG92ZXJQcmltaXRpdmUuQW5jaG9yIGRhdGEtc2xvdD1cInBvcG92ZXItYW5jaG9yXCIgey4uLnByb3BzfSAvPlxufVxuXG5leHBvcnQgeyBQb3BvdmVyLCBQb3BvdmVyVHJpZ2dlciwgUG9wb3ZlckNvbnRlbnQsIFBvcG92ZXJBbmNob3IgfVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIERpYWxvZ1ByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtZGlhbG9nJ1xuaW1wb3J0IHsgWEljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIERpYWxvZyh7XG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlJvb3Q+KSB7XG4gIHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwiZGlhbG9nXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBEaWFsb2dUcmlnZ2VyKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuVHJpZ2dlcj4pIHtcbiAgcmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuVHJpZ2dlciBkYXRhLXNsb3Q9XCJkaWFsb2ctdHJpZ2dlclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nUG9ydGFsKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuUG9ydGFsPikge1xuICByZXR1cm4gPERpYWxvZ1ByaW1pdGl2ZS5Qb3J0YWwgZGF0YS1zbG90PVwiZGlhbG9nLXBvcnRhbFwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nQ2xvc2Uoe1xuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5DbG9zZT4pIHtcbiAgcmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuQ2xvc2UgZGF0YS1zbG90PVwiZGlhbG9nLWNsb3NlXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBEaWFsb2dPdmVybGF5KHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5PdmVybGF5Pikge1xuICByZXR1cm4gKFxuICAgIDxEaWFsb2dQcmltaXRpdmUuT3ZlcmxheVxuICAgICAgZGF0YS1zbG90PVwiZGlhbG9nLW92ZXJsYXlcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2RhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGZpeGVkIGluc2V0LTAgei01MCBiZy1ibGFjay81MCcsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0NvbnRlbnQoe1xuICBjbGFzc05hbWUsXG4gIGNoaWxkcmVuLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5Db250ZW50Pikge1xuICByZXR1cm4gKFxuICAgIDxEaWFsb2dQb3J0YWwgZGF0YS1zbG90PVwiZGlhbG9nLXBvcnRhbFwiPlxuICAgICAgPERpYWxvZ092ZXJsYXkgLz5cbiAgICAgIDxEaWFsb2dQcmltaXRpdmUuQ29udGVudFxuICAgICAgICBkYXRhLXNsb3Q9XCJkaWFsb2ctY29udGVudFwiXG4gICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgJ2JnLWJhY2tncm91bmQgZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1pbiBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1vcGVuXTpmYWRlLWluLTAgZGF0YS1bc3RhdGU9Y2xvc2VkXTp6b29tLW91dC05NSBkYXRhLVtzdGF0ZT1vcGVuXTp6b29tLWluLTk1IGZpeGVkIHRvcC1bNTAlXSBsZWZ0LVs1MCVdIHotNTAgZ3JpZCB3LWZ1bGwgbWF4LXctW2NhbGMoMTAwJS0ycmVtKV0gdHJhbnNsYXRlLXgtWy01MCVdIHRyYW5zbGF0ZS15LVstNTAlXSBnYXAtNCByb3VuZGVkLWxnIGJvcmRlciBwLTYgc2hhZG93LWxnIGR1cmF0aW9uLTIwMCBzbTptYXgtdy1sZyBtYXgtaC1bOTAlXSBvdmVyZmxvdy15LXNjcm9sbCcsXG4gICAgICAgICAgY2xhc3NOYW1lXG4gICAgICAgICl9XG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8RGlhbG9nUHJpbWl0aXZlLkNsb3NlIGNsYXNzTmFtZT1cInJpbmctb2Zmc2V0LWJhY2tncm91bmQgZm9jdXM6cmluZy1yaW5nIGRhdGEtW3N0YXRlPW9wZW5dOmJnLWFjY2VudCBkYXRhLVtzdGF0ZT1vcGVuXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgYWJzb2x1dGUgdG9wLTQgcmlnaHQtNCByb3VuZGVkLXhzIG9wYWNpdHktNzAgdHJhbnNpdGlvbi1vcGFjaXR5IGhvdmVyOm9wYWNpdHktMTAwIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLW9mZnNldC0yIGZvY3VzOm91dGxpbmUtaGlkZGVuIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTAgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00XCI+XG4gICAgICAgICAgPFhJY29uIC8+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPkNsb3NlPC9zcGFuPlxuICAgICAgICA8L0RpYWxvZ1ByaW1pdGl2ZS5DbG9zZT5cbiAgICAgIDwvRGlhbG9nUHJpbWl0aXZlLkNvbnRlbnQ+XG4gICAgPC9EaWFsb2dQb3J0YWw+XG4gIClcbn1cblxuZnVuY3Rpb24gRGlhbG9nSGVhZGVyKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBkYXRhLXNsb3Q9XCJkaWFsb2ctaGVhZGVyXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ2ZsZXggZmxleC1jb2wgZ2FwLTIgdGV4dC1jZW50ZXIgc206dGV4dC1sZWZ0JywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0Zvb3Rlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1zbG90PVwiZGlhbG9nLWZvb3RlclwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnZmxleCBmbGV4LWNvbC1yZXZlcnNlIGdhcC0yIHNtOmZsZXgtcm93IHNtOmp1c3RpZnktZW5kJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gRGlhbG9nVGl0bGUoe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlRpdGxlPikge1xuICByZXR1cm4gKFxuICAgIDxEaWFsb2dQcmltaXRpdmUuVGl0bGVcbiAgICAgIGRhdGEtc2xvdD1cImRpYWxvZy10aXRsZVwiXG4gICAgICBjbGFzc05hbWU9e2NuKCd0ZXh0LWxnIGxlYWRpbmctbm9uZSBmb250LXNlbWlib2xkJywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0Rlc2NyaXB0aW9uKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5EZXNjcmlwdGlvbj4pIHtcbiAgcmV0dXJuIChcbiAgICA8RGlhbG9nUHJpbWl0aXZlLkRlc2NyaXB0aW9uXG4gICAgICBkYXRhLXNsb3Q9XCJkaWFsb2ctZGVzY3JpcHRpb25cIlxuICAgICAgY2xhc3NOYW1lPXtjbigndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtc20nLCBjbGFzc05hbWUpfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZXhwb3J0IHtcbiAgRGlhbG9nLFxuICBEaWFsb2dDbG9zZSxcbiAgRGlhbG9nQ29udGVudCxcbiAgRGlhbG9nRGVzY3JpcHRpb24sXG4gIERpYWxvZ0Zvb3RlcixcbiAgRGlhbG9nSGVhZGVyLFxuICBEaWFsb2dPdmVybGF5LFxuICBEaWFsb2dQb3J0YWwsXG4gIERpYWxvZ1RpdGxlLFxuICBEaWFsb2dUcmlnZ2VyLFxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gSW5wdXQoeyBjbGFzc05hbWUsIHR5cGUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdpbnB1dCc+KSB7XG4gIHJldHVybiAoXG4gICAgPGlucHV0XG4gICAgICB0eXBlPXt0eXBlfVxuICAgICAgZGF0YS1zbG90PVwiaW5wdXRcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2ZpbGU6dGV4dC1mb3JlZ3JvdW5kIHBsYWNlaG9sZGVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBzZWxlY3Rpb246YmctcHJpbWFyeSBzZWxlY3Rpb246dGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZGFyazpiZy1pbnB1dC8zMCBib3JkZXItaW5wdXQgZmxleCBoLTkgdy1mdWxsIG1pbi13LTAgcm91bmRlZC1tZCBib3JkZXIgYmctdHJhbnNwYXJlbnQgcHgtMyBweS0xIHRleHQtYmFzZSBzaGFkb3cteHMgdHJhbnNpdGlvbi1bY29sb3IsYm94LXNoYWRvd10gb3V0bGluZS1ub25lIGZpbGU6aW5saW5lLWZsZXggZmlsZTpoLTcgZmlsZTpib3JkZXItMCBmaWxlOmJnLXRyYW5zcGFyZW50IGZpbGU6dGV4dC1zbSBmaWxlOmZvbnQtbWVkaXVtIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAgbWQ6dGV4dC1zbScsXG4gICAgICAgICdmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XScsXG4gICAgICAgICdhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgeyBJbnB1dCB9XG4iLAogICAgIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIExhYmVsUHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1sYWJlbCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gTGFiZWwoe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgTGFiZWxQcmltaXRpdmUuUm9vdD4pIHtcbiAgcmV0dXJuIChcbiAgICA8TGFiZWxQcmltaXRpdmUuUm9vdFxuICAgICAgZGF0YS1zbG90PVwibGFiZWxcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2ZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtc20gbGVhZGluZy1ub25lIGZvbnQtbWVkaXVtIHNlbGVjdC1ub25lIGdyb3VwLWRhdGEtW2Rpc2FibGVkPXRydWVdOnBvaW50ZXItZXZlbnRzLW5vbmUgZ3JvdXAtZGF0YS1bZGlzYWJsZWQ9dHJ1ZV06b3BhY2l0eS01MCBwZWVyLWRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBwZWVyLWRpc2FibGVkOm9wYWNpdHktNTAnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgeyBMYWJlbCB9XG4iLAogICAgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICogYXMgU2Nyb2xsQXJlYVByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3Qtc2Nyb2xsLWFyZWEnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBTY3JvbGxBcmVhUHJvcHNcbiAgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2Nyb2xsQXJlYVByaW1pdGl2ZS5Sb290PiB7XG4gIHZpZXdQb3J0UHJvcHM/OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydD5cbn1cblxuZnVuY3Rpb24gU2Nyb2xsQXJlYSh7IGNsYXNzTmFtZSwgY2hpbGRyZW4sIC4uLnByb3BzIH06IFNjcm9sbEFyZWFQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxTY3JvbGxBcmVhUHJpbWl0aXZlLlJvb3RcbiAgICAgIGRhdGEtc2xvdD1cInNjcm9sbC1hcmVhXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ3JlbGF0aXZlJywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICA8U2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydFxuICAgICAgICB7Li4ucHJvcHMudmlld1BvcnRQcm9wc31cbiAgICAgICAgZGF0YS1zbG90PVwic2Nyb2xsLWFyZWEtdmlld3BvcnRcIlxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICdmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBzaXplLWZ1bGwgcm91bmRlZC1baW5oZXJpdF0gdHJhbnNpdGlvbi1bY29sb3IsYm94LXNoYWRvd10gb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBmb2N1cy12aXNpYmxlOm91dGxpbmUtMScsXG4gICAgICAgICAgcHJvcHMudmlld1BvcnRQcm9wcz8uY2xhc3NOYW1lXG4gICAgICAgICl9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydD5cbiAgICAgIDxTY3JvbGxCYXIgLz5cbiAgICAgIDxTY3JvbGxBcmVhUHJpbWl0aXZlLkNvcm5lciAvPlxuICAgIDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5Sb290PlxuICApXG59XG5cbmZ1bmN0aW9uIFNjcm9sbEJhcih7XG4gIGNsYXNzTmFtZSxcbiAgb3JpZW50YXRpb24gPSAndmVydGljYWwnLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjcm9sbEFyZWFQcmltaXRpdmUuU2Nyb2xsQXJlYVNjcm9sbGJhcj4pIHtcbiAgcmV0dXJuIChcbiAgICA8U2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhU2Nyb2xsYmFyXG4gICAgICBkYXRhLXNsb3Q9XCJzY3JvbGwtYXJlYS1zY3JvbGxiYXJcIlxuICAgICAgb3JpZW50YXRpb249e29yaWVudGF0aW9ufVxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2ZsZXggdG91Y2gtbm9uZSBwLXB4IHRyYW5zaXRpb24tY29sb3JzIHNlbGVjdC1ub25lJyxcbiAgICAgICAgb3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcgJiZcbiAgICAgICAgICAnaC1mdWxsIHctMi41IGJvcmRlci1sIGJvcmRlci1sLXRyYW5zcGFyZW50JyxcbiAgICAgICAgb3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJyAmJlxuICAgICAgICAgICdoLTIuNSBmbGV4LWNvbCBib3JkZXItdCBib3JkZXItdC10cmFuc3BhcmVudCcsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICA8U2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhVGh1bWJcbiAgICAgICAgZGF0YS1zbG90PVwic2Nyb2xsLWFyZWEtdGh1bWJcIlxuICAgICAgICBjbGFzc05hbWU9XCJiZy1ib3JkZXIgcmVsYXRpdmUgZmxleC0xIHJvdW5kZWQtZnVsbFwiXG4gICAgICAvPlxuICAgIDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhU2Nyb2xsYmFyPlxuICApXG59XG5cbmV4cG9ydCB7IFNjcm9sbEFyZWEsIFNjcm9sbEJhciB9XG4iLAogICAgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICogYXMgU2VsZWN0UHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1zZWxlY3QnXG5pbXBvcnQgeyBDaGVja0ljb24sIENoZXZyb25Eb3duSWNvbiwgQ2hldnJvblVwSWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gU2VsZWN0KHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuUm9vdD4pIHtcbiAgcmV0dXJuIDxTZWxlY3RQcmltaXRpdmUuUm9vdCBkYXRhLXNsb3Q9XCJzZWxlY3RcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFNlbGVjdEdyb3VwKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuR3JvdXA+KSB7XG4gIHJldHVybiA8U2VsZWN0UHJpbWl0aXZlLkdyb3VwIGRhdGEtc2xvdD1cInNlbGVjdC1ncm91cFwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gU2VsZWN0VmFsdWUoe1xuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5WYWx1ZT4pIHtcbiAgcmV0dXJuIDxTZWxlY3RQcmltaXRpdmUuVmFsdWUgZGF0YS1zbG90PVwic2VsZWN0LXZhbHVlXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBTZWxlY3RUcmlnZ2VyKHtcbiAgY2xhc3NOYW1lLFxuICBzaXplID0gJ2RlZmF1bHQnLFxuICBjaGlsZHJlbixcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuVHJpZ2dlcj4gJiB7XG4gIHNpemU/OiAnc20nIHwgJ2RlZmF1bHQnXG59KSB7XG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFByaW1pdGl2ZS5UcmlnZ2VyXG4gICAgICBkYXRhLXNsb3Q9XCJzZWxlY3QtdHJpZ2dlclwiXG4gICAgICBkYXRhLXNpemU9e3NpemV9XG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICBcImJvcmRlci1pbnB1dCBkYXRhLVtwbGFjZWhvbGRlcl06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIFsmX3N2Zzpub3QoW2NsYXNzKj0ndGV4dC0nXSldOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBkYXJrOmJnLWlucHV0LzMwIGRhcms6aG92ZXI6YmctaW5wdXQvNTAgZmxleCB3LWZpdCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIHJvdW5kZWQtbWQgYm9yZGVyIGJnLXRyYW5zcGFyZW50IHB4LTMgcHktMiB0ZXh0LXNtIHdoaXRlc3BhY2Utbm93cmFwIHNoYWRvdy14cyB0cmFuc2l0aW9uLVtjb2xvcixib3gtc2hhZG93XSBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLVszcHhdIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwIGRhdGEtW3NpemU9ZGVmYXVsdF06aC05IGRhdGEtW3NpemU9c21dOmgtOCAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTpsaW5lLWNsYW1wLTEgKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06ZmxleCAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTppdGVtcy1jZW50ZXIgKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06Z2FwLTIgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTAgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00XCIsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgICA8U2VsZWN0UHJpbWl0aXZlLkljb24gYXNDaGlsZD5cbiAgICAgICAgPENoZXZyb25Eb3duSWNvbiBjbGFzc05hbWU9XCJzaXplLTQgb3BhY2l0eS01MFwiIC8+XG4gICAgICA8L1NlbGVjdFByaW1pdGl2ZS5JY29uPlxuICAgIDwvU2VsZWN0UHJpbWl0aXZlLlRyaWdnZXI+XG4gIClcbn1cblxuZnVuY3Rpb24gU2VsZWN0Q29udGVudCh7XG4gIGNsYXNzTmFtZSxcbiAgY2hpbGRyZW4sXG4gIHBvc2l0aW9uID0gJ3BvcHBlcicsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkNvbnRlbnQ+KSB7XG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFByaW1pdGl2ZS5Qb3J0YWw+XG4gICAgICA8U2VsZWN0UHJpbWl0aXZlLkNvbnRlbnRcbiAgICAgICAgZGF0YS1zbG90PVwic2VsZWN0LWNvbnRlbnRcIlxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICdiZy1wb3BvdmVyIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc3RhdGU9b3Blbl06em9vbS1pbi05NSBkYXRhLVtzaWRlPWJvdHRvbV06c2xpZGUtaW4tZnJvbS10b3AtMiBkYXRhLVtzaWRlPWxlZnRdOnNsaWRlLWluLWZyb20tcmlnaHQtMiBkYXRhLVtzaWRlPXJpZ2h0XTpzbGlkZS1pbi1mcm9tLWxlZnQtMiBkYXRhLVtzaWRlPXRvcF06c2xpZGUtaW4tZnJvbS1ib3R0b20tMiByZWxhdGl2ZSB6LTUwIG1heC1oLSgtLXJhZGl4LXNlbGVjdC1jb250ZW50LWF2YWlsYWJsZS1oZWlnaHQpIG1pbi13LVs4cmVtXSBvcmlnaW4tKC0tcmFkaXgtc2VsZWN0LWNvbnRlbnQtdHJhbnNmb3JtLW9yaWdpbikgb3ZlcmZsb3cteC1oaWRkZW4gb3ZlcmZsb3cteS1hdXRvIHJvdW5kZWQtbWQgYm9yZGVyIHNoYWRvdy1tZCcsXG4gICAgICAgICAgcG9zaXRpb24gPT09ICdwb3BwZXInICYmXG4gICAgICAgICAgICAnZGF0YS1bc2lkZT1ib3R0b21dOnRyYW5zbGF0ZS15LTEgZGF0YS1bc2lkZT1sZWZ0XTotdHJhbnNsYXRlLXgtMSBkYXRhLVtzaWRlPXJpZ2h0XTp0cmFuc2xhdGUteC0xIGRhdGEtW3NpZGU9dG9wXTotdHJhbnNsYXRlLXktMScsXG4gICAgICAgICAgY2xhc3NOYW1lXG4gICAgICAgICl9XG4gICAgICAgIHBvc2l0aW9uPXtwb3NpdGlvbn1cbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgPlxuICAgICAgICA8U2VsZWN0U2Nyb2xsVXBCdXR0b24gLz5cbiAgICAgICAgPFNlbGVjdFByaW1pdGl2ZS5WaWV3cG9ydFxuICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAncC0xJyxcbiAgICAgICAgICAgIHBvc2l0aW9uID09PSAncG9wcGVyJyAmJlxuICAgICAgICAgICAgICAnaC1bdmFyKC0tcmFkaXgtc2VsZWN0LXRyaWdnZXItaGVpZ2h0KV0gdy1mdWxsIG1pbi13LVt2YXIoLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci13aWR0aCldIHNjcm9sbC1teS0xJ1xuICAgICAgICAgICl9XG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvU2VsZWN0UHJpbWl0aXZlLlZpZXdwb3J0PlxuICAgICAgICA8U2VsZWN0U2Nyb2xsRG93bkJ1dHRvbiAvPlxuICAgICAgPC9TZWxlY3RQcmltaXRpdmUuQ29udGVudD5cbiAgICA8L1NlbGVjdFByaW1pdGl2ZS5Qb3J0YWw+XG4gIClcbn1cblxuZnVuY3Rpb24gU2VsZWN0TGFiZWwoe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkxhYmVsPikge1xuICByZXR1cm4gKFxuICAgIDxTZWxlY3RQcmltaXRpdmUuTGFiZWxcbiAgICAgIGRhdGEtc2xvdD1cInNlbGVjdC1sYWJlbFwiXG4gICAgICBjbGFzc05hbWU9e2NuKCd0ZXh0LW11dGVkLWZvcmVncm91bmQgcHgtMiBweS0xLjUgdGV4dC14cycsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBTZWxlY3RJdGVtKHtcbiAgY2xhc3NOYW1lLFxuICBjaGlsZHJlbixcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuSXRlbT4pIHtcbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0UHJpbWl0aXZlLkl0ZW1cbiAgICAgIGRhdGEtc2xvdD1cInNlbGVjdC1pdGVtXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgIFwiZm9jdXM6YmctYWNjZW50IGZvY3VzOnRleHQtYWNjZW50LWZvcmVncm91bmQgWyZfc3ZnOm5vdChbY2xhc3MqPSd0ZXh0LSddKV06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHJlbGF0aXZlIGZsZXggdy1mdWxsIGN1cnNvci1kZWZhdWx0IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLXNtIHB5LTEuNSBwci04IHBsLTIgdGV4dC1zbSBvdXRsaW5lLWhpZGRlbiBzZWxlY3Qtbm9uZSBkYXRhLVtkaXNhYmxlZF06cG9pbnRlci1ldmVudHMtbm9uZSBkYXRhLVtkaXNhYmxlZF06b3BhY2l0eS01MCBbJl9zdmddOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpzaHJpbmstMCBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTQgKjpbc3Bhbl06bGFzdDpmbGV4ICo6W3NwYW5dOmxhc3Q6aXRlbXMtY2VudGVyICo6W3NwYW5dOmxhc3Q6Z2FwLTJcIixcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImFic29sdXRlIHJpZ2h0LTIgZmxleCBzaXplLTMuNSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgPFNlbGVjdFByaW1pdGl2ZS5JdGVtSW5kaWNhdG9yPlxuICAgICAgICAgIDxDaGVja0ljb24gY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cbiAgICAgICAgPC9TZWxlY3RQcmltaXRpdmUuSXRlbUluZGljYXRvcj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxTZWxlY3RQcmltaXRpdmUuSXRlbVRleHQ+e2NoaWxkcmVufTwvU2VsZWN0UHJpbWl0aXZlLkl0ZW1UZXh0PlxuICAgIDwvU2VsZWN0UHJpbWl0aXZlLkl0ZW0+XG4gIClcbn1cblxuZnVuY3Rpb24gU2VsZWN0U2VwYXJhdG9yKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5TZXBhcmF0b3I+KSB7XG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFByaW1pdGl2ZS5TZXBhcmF0b3JcbiAgICAgIGRhdGEtc2xvdD1cInNlbGVjdC1zZXBhcmF0b3JcIlxuICAgICAgY2xhc3NOYW1lPXtjbignYmctYm9yZGVyIHBvaW50ZXItZXZlbnRzLW5vbmUgLW14LTEgbXktMSBoLXB4JywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIFNlbGVjdFNjcm9sbFVwQnV0dG9uKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxVcEJ1dHRvbj4pIHtcbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0UHJpbWl0aXZlLlNjcm9sbFVwQnV0dG9uXG4gICAgICBkYXRhLXNsb3Q9XCJzZWxlY3Qtc2Nyb2xsLXVwLWJ1dHRvblwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnZmxleCBjdXJzb3ItZGVmYXVsdCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHktMScsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICA8Q2hldnJvblVwSWNvbiBjbGFzc05hbWU9XCJzaXplLTRcIiAvPlxuICAgIDwvU2VsZWN0UHJpbWl0aXZlLlNjcm9sbFVwQnV0dG9uPlxuICApXG59XG5cbmZ1bmN0aW9uIFNlbGVjdFNjcm9sbERvd25CdXR0b24oe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlNjcm9sbERvd25CdXR0b24+KSB7XG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxEb3duQnV0dG9uXG4gICAgICBkYXRhLXNsb3Q9XCJzZWxlY3Qtc2Nyb2xsLWRvd24tYnV0dG9uXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdmbGV4IGN1cnNvci1kZWZhdWx0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS0xJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIDxDaGV2cm9uRG93bkljb24gY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cbiAgICA8L1NlbGVjdFByaW1pdGl2ZS5TY3JvbGxEb3duQnV0dG9uPlxuICApXG59XG5cbmV4cG9ydCB7XG4gIFNlbGVjdCxcbiAgU2VsZWN0Q29udGVudCxcbiAgU2VsZWN0R3JvdXAsXG4gIFNlbGVjdEl0ZW0sXG4gIFNlbGVjdExhYmVsLFxuICBTZWxlY3RTY3JvbGxEb3duQnV0dG9uLFxuICBTZWxlY3RTY3JvbGxVcEJ1dHRvbixcbiAgU2VsZWN0U2VwYXJhdG9yLFxuICBTZWxlY3RUcmlnZ2VyLFxuICBTZWxlY3RWYWx1ZSxcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgKiBhcyBUYWJzUHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC10YWJzJ1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBUYWJzKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFRhYnNQcmltaXRpdmUuUm9vdD4pIHtcbiAgcmV0dXJuIChcbiAgICA8VGFic1ByaW1pdGl2ZS5Sb290XG4gICAgICBkYXRhLXNsb3Q9XCJ0YWJzXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ2ZsZXggZmxleC1jb2wgZ2FwLTInLCBjbGFzc05hbWUpfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gVGFic0xpc3Qoe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgVGFic1ByaW1pdGl2ZS5MaXN0Pikge1xuICByZXR1cm4gKFxuICAgIDxUYWJzUHJpbWl0aXZlLkxpc3RcbiAgICAgIGRhdGEtc2xvdD1cInRhYnMtbGlzdFwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnYmctbXV0ZWQgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGlubGluZS1mbGV4IGgtOSB3LWZpdCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1sZyBwLVszcHhdJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gVGFic1RyaWdnZXIoe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgVGFic1ByaW1pdGl2ZS5UcmlnZ2VyPikge1xuICByZXR1cm4gKFxuICAgIDxUYWJzUHJpbWl0aXZlLlRyaWdnZXJcbiAgICAgIGRhdGEtc2xvdD1cInRhYnMtdHJpZ2dlclwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICBcImRhdGEtW3N0YXRlPWFjdGl2ZV06YmctYmFja2dyb3VuZCBkYXJrOmRhdGEtW3N0YXRlPWFjdGl2ZV06dGV4dC1mb3JlZ3JvdW5kIGZvY3VzLXZpc2libGU6Ym9yZGVyLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLXJpbmcgZGFyazpkYXRhLVtzdGF0ZT1hY3RpdmVdOmJvcmRlci1pbnB1dCBkYXJrOmRhdGEtW3N0YXRlPWFjdGl2ZV06YmctaW5wdXQvMzAgdGV4dC1mb3JlZ3JvdW5kIGRhcms6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGlubGluZS1mbGV4IGgtW2NhbGMoMTAwJS0xcHgpXSBmbGV4LTEgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXRyYW5zcGFyZW50IHB4LTIgcHktMSB0ZXh0LXNtIGZvbnQtbWVkaXVtIHdoaXRlc3BhY2Utbm93cmFwIHRyYW5zaXRpb24tW2NvbG9yLGJveC1zaGFkb3ddIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBmb2N1cy12aXNpYmxlOm91dGxpbmUtMSBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOm9wYWNpdHktNTAgZGF0YS1bc3RhdGU9YWN0aXZlXTpzaGFkb3ctc20gWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTAgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00XCIsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIFRhYnNDb250ZW50KHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFRhYnNQcmltaXRpdmUuQ29udGVudD4pIHtcbiAgcmV0dXJuIChcbiAgICA8VGFic1ByaW1pdGl2ZS5Db250ZW50XG4gICAgICBkYXRhLXNsb3Q9XCJ0YWJzLWNvbnRlbnRcIlxuICAgICAgY2xhc3NOYW1lPXtjbignZmxleC0xIG91dGxpbmUtbm9uZScsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgeyBUYWJzLCBUYWJzTGlzdCwgVGFic1RyaWdnZXIsIFRhYnNDb250ZW50IH1cbiIsCiAgICAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgKiBhcyBUb29sdGlwUHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC10b29sdGlwJ1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBUb29sdGlwUHJvdmlkZXIoe1xuICBkZWxheUR1cmF0aW9uID0gMCxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBUb29sdGlwUHJpbWl0aXZlLlByb3ZpZGVyPikge1xuICByZXR1cm4gKFxuICAgIDxUb29sdGlwUHJpbWl0aXZlLlByb3ZpZGVyXG4gICAgICBkYXRhLXNsb3Q9XCJ0b29sdGlwLXByb3ZpZGVyXCJcbiAgICAgIGRlbGF5RHVyYXRpb249e2RlbGF5RHVyYXRpb259XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBUb29sdGlwKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBUb29sdGlwUHJpbWl0aXZlLlJvb3Q+KSB7XG4gIHJldHVybiAoXG4gICAgPFRvb2x0aXBQcm92aWRlcj5cbiAgICAgIDxUb29sdGlwUHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwidG9vbHRpcFwiIHsuLi5wcm9wc30gLz5cbiAgICA8L1Rvb2x0aXBQcm92aWRlcj5cbiAgKVxufVxuXG5mdW5jdGlvbiBUb29sdGlwVHJpZ2dlcih7XG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgVG9vbHRpcFByaW1pdGl2ZS5UcmlnZ2VyPikge1xuICByZXR1cm4gPFRvb2x0aXBQcmltaXRpdmUuVHJpZ2dlciBkYXRhLXNsb3Q9XCJ0b29sdGlwLXRyaWdnZXJcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFRvb2x0aXBDb250ZW50KHtcbiAgY2xhc3NOYW1lLFxuICBzaWRlT2Zmc2V0ID0gMCxcbiAgY2hpbGRyZW4sXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgVG9vbHRpcFByaW1pdGl2ZS5Db250ZW50Pikge1xuICByZXR1cm4gKFxuICAgIDxUb29sdGlwUHJpbWl0aXZlLlBvcnRhbD5cbiAgICAgIDxUb29sdGlwUHJpbWl0aXZlLkNvbnRlbnRcbiAgICAgICAgZGF0YS1zbG90PVwidG9vbHRpcC1jb250ZW50XCJcbiAgICAgICAgc2lkZU9mZnNldD17c2lkZU9mZnNldH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBhbmltYXRlLWluIGZhZGUtaW4tMCB6b29tLWluLTk1IGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc2lkZT1ib3R0b21dOnNsaWRlLWluLWZyb20tdG9wLTIgZGF0YS1bc2lkZT1sZWZ0XTpzbGlkZS1pbi1mcm9tLXJpZ2h0LTIgZGF0YS1bc2lkZT1yaWdodF06c2xpZGUtaW4tZnJvbS1sZWZ0LTIgZGF0YS1bc2lkZT10b3BdOnNsaWRlLWluLWZyb20tYm90dG9tLTIgei01MCB3LWZpdCBvcmlnaW4tKC0tcmFkaXgtdG9vbHRpcC1jb250ZW50LXRyYW5zZm9ybS1vcmlnaW4pIHJvdW5kZWQtbWQgcHgtMyBweS0xLjUgdGV4dC14cyB0ZXh0LWJhbGFuY2UnLFxuICAgICAgICAgIGNsYXNzTmFtZVxuICAgICAgICApfVxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPFRvb2x0aXBQcmltaXRpdmUuQXJyb3cgY2xhc3NOYW1lPVwiYmctcHJpbWFyeSBmaWxsLXByaW1hcnkgei01MCBzaXplLTIuNSB0cmFuc2xhdGUteS1bY2FsYygtNTAlXy1fMnB4KV0gcm90YXRlLTQ1IHJvdW5kZWQtWzJweF1cIiAvPlxuICAgICAgPC9Ub29sdGlwUHJpbWl0aXZlLkNvbnRlbnQ+XG4gICAgPC9Ub29sdGlwUHJpbWl0aXZlLlBvcnRhbD5cbiAgKVxufVxuXG5leHBvcnQgeyBUb29sdGlwLCBUb29sdGlwVHJpZ2dlciwgVG9vbHRpcENvbnRlbnQsIFRvb2x0aXBQcm92aWRlciB9XG4iLAogICAgImltcG9ydCB7XG4gIERpYWxvZyxcbiAgRGlhbG9nQ29udGVudCxcbiAgRGlhbG9nSGVhZGVyLFxuICBEaWFsb2dUaXRsZSxcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBEcmFnZ2FibGVFdmVudCB9IGZyb20gJ0AvZmVhdHVyZXMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudCdcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBTZWxlY3RlZERheUV2ZW50cyB9IGZyb20gJy4uL3R5cGVzJ1xuXG5pbnRlcmZhY2UgQWxsRXZlbnREaWFsb2dQcm9wcyB7XG4gIHJlZjogUmVhY3QuUmVmPHtcbiAgICBvcGVuOiAoKSA9PiB2b2lkXG4gICAgY2xvc2U6ICgpID0+IHZvaWRcbiAgICBzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+IHZvaWRcbiAgfT5cbn1cblxuZXhwb3J0IGNvbnN0IEFsbEV2ZW50RGlhbG9nOiBSZWFjdC5GQzxBbGxFdmVudERpYWxvZ1Byb3BzPiA9ICh7IHJlZiB9KSA9PiB7XG4gIGNvbnN0IFtkaWFsb2dPcGVuLCBzZXREaWFsb2dPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2VsZWN0ZWREYXlFdmVudHMsIHNldFNlbGVjdGVkRGF5RXZlbnRzXSA9XG4gICAgdXNlU3RhdGU8U2VsZWN0ZWREYXlFdmVudHMgfCBudWxsPihudWxsKVxuICBjb25zdCB7IGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuICB1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgKCkgPT4gKHtcbiAgICBvcGVuOiAoKSA9PiBzZXREaWFsb2dPcGVuKHRydWUpLFxuICAgIGNsb3NlOiAoKSA9PiBzZXREaWFsb2dPcGVuKGZhbHNlKSxcbiAgICBzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+XG4gICAgICBzZXRTZWxlY3RlZERheUV2ZW50cyhkYXlFdmVudHMpLFxuICB9KSlcblxuICAvLyBHZXQgc3RhcnQgZGF0ZSBmb3IgdGhlIGN1cnJlbnQgbW9udGggdmlldyBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuICBjb25zdCBmaXJzdERheU9mTW9udGggPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cbiAgLy8gQ2FsY3VsYXRlIHRoZSBmaXJzdCBkYXkgb2YgdGhlIGNhbGVuZGFyIGdyaWQgY29ycmVjdGx5XG4gIC8vIEZpbmQgdGhlIGZpcnN0IGRheSBvZiB3ZWVrIChlLmcuIFN1bmRheSBvciBNb25kYXkpIHRoYXQgY29tZXMgYmVmb3JlIG9yIG9uIHRoZSBmaXJzdCBkYXkgb2YgdGhlIG1vbnRoXG4gIGxldCBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGZpcnN0RGF5T2ZNb250aC5jbG9uZSgpXG4gIHdoaWxlIChhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhci5kYXkoKSAhPT0gZmlyc3REYXlPZldlZWspIHtcbiAgICBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLnN1YnRyYWN0KDEsICdkYXknKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8RGlhbG9nIG9wZW49e2RpYWxvZ09wZW59IG9uT3BlbkNoYW5nZT17c2V0RGlhbG9nT3Blbn0+XG4gICAgICA8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJtYXgtaC1bODB2aF0gbWF4LXctbWQgb3ZlcmZsb3cteS1hdXRvXCI+XG4gICAgICAgIDxEaWFsb2dIZWFkZXI+XG4gICAgICAgICAgPERpYWxvZ1RpdGxlPlxuICAgICAgICAgICAge3NlbGVjdGVkRGF5RXZlbnRzICYmIHNlbGVjdGVkRGF5RXZlbnRzLmRheS5mb3JtYXQoJ01NTU0gRCwgWVlZWScpfVxuICAgICAgICAgIDwvRGlhbG9nVGl0bGU+XG4gICAgICAgIDwvRGlhbG9nSGVhZGVyPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTQgc3BhY2UteS0zXCI+XG4gICAgICAgICAge3NlbGVjdGVkRGF5RXZlbnRzICYmXG4gICAgICAgICAgICBzZWxlY3RlZERheUV2ZW50cy5ldmVudHMubWFwKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxEcmFnZ2FibGVFdmVudFxuICAgICAgICAgICAgICAgICAgZWxlbWVudElkPXtgYWxsLWV2ZW50cy1kaWFsb2ctZXZlbnQtJCR7ZXZlbnQuaWR9YH0gLy8gVXNlIGV2ZW50IElEIGZvciB1bmlxdWUgaWRlbnRpZmljYXRpb25cbiAgICAgICAgICAgICAgICAgIGtleT17ZXZlbnQuaWR9XG4gICAgICAgICAgICAgICAgICBldmVudD17ZXZlbnR9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBteS0xIGgtWzMwcHhdXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L0RpYWxvZ0NvbnRlbnQ+XG4gICAgPC9EaWFsb2c+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgdXNlRHJhZ2dhYmxlIH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgbW90aW9uIH0gZnJvbSAnbW90aW9uL3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDU1NQcm9wZXJ0aWVzIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5cbmNvbnN0IGdldEJvcmRlclJhZGl1c0NsYXNzID0gKFxuICBpc1RydW5jYXRlZFN0YXJ0OiBib29sZWFuLFxuICBpc1RydW5jYXRlZEVuZDogYm9vbGVhblxuKSA9PiB7XG4gIGlmIChpc1RydW5jYXRlZFN0YXJ0ICYmIGlzVHJ1bmNhdGVkRW5kKSB7XG4gICAgcmV0dXJuICdyb3VuZGVkLW5vbmUnXG4gIH1cbiAgaWYgKGlzVHJ1bmNhdGVkU3RhcnQpIHtcbiAgICByZXR1cm4gJ3JvdW5kZWQtci1tZCByb3VuZGVkLWwtbm9uZSdcbiAgfVxuICBpZiAoaXNUcnVuY2F0ZWRFbmQpIHtcbiAgICByZXR1cm4gJ3JvdW5kZWQtbC1tZCByb3VuZGVkLXItbm9uZSdcbiAgfVxuICByZXR1cm4gJ3JvdW5kZWQtbWQnXG59XG5cbmZ1bmN0aW9uIERyYWdnYWJsZUV2ZW50VW5tZW1vaXplZCh7XG4gIGVsZW1lbnRJZCxcbiAgZXZlbnQsXG4gIGNsYXNzTmFtZSxcbiAgc3R5bGUsXG4gIGRpc2FibGVEcmFnID0gZmFsc2UsXG59OiB7XG4gIGVsZW1lbnRJZDogc3RyaW5nXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICBzdHlsZT86IENTU1Byb3BlcnRpZXNcbiAgZXZlbnQ6IENhbGVuZGFyRXZlbnRcbiAgZGlzYWJsZURyYWc/OiBib29sZWFuXG59KSB7XG4gIGNvbnN0IHsgb25FdmVudENsaWNrLCByZW5kZXJFdmVudCwgZGlzYWJsZUV2ZW50Q2xpY2ssIGRpc2FibGVEcmFnQW5kRHJvcCB9ID1cbiAgICB1c2VDYWxlbmRhckNvbnRleHQoKVxuICBjb25zdCB7IGF0dHJpYnV0ZXMsIGxpc3RlbmVycywgc2V0Tm9kZVJlZiwgaXNEcmFnZ2luZyB9ID0gdXNlRHJhZ2dhYmxlKHtcbiAgICBpZDogZWxlbWVudElkLFxuICAgIGRhdGE6IHtcbiAgICAgIGV2ZW50LFxuICAgICAgdHlwZTogJ2NhbGVuZGFyLWV2ZW50JyxcbiAgICB9LFxuICAgIGRpc2FibGVkOiBkaXNhYmxlRHJhZyB8fCBkaXNhYmxlRHJhZ0FuZERyb3AsXG4gIH0pXG5cbiAgLy8gRGVmYXVsdCBldmVudCBjb250ZW50IHRvIHJlbmRlciBpZiBjdXN0b20gcmVuZGVyRXZlbnQgaXMgbm90IHByb3ZpZGVkXG4gIGNvbnN0IERlZmF1bHRFdmVudENvbnRlbnQgPSAoKSA9PiB7XG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBldmVudCBoYXMgdHJ1bmNhdGlvbiBpbmZvcm1hdGlvblxuICAgIGNvbnN0IGVuaGFuY2VkRXZlbnQgPSBldmVudCBhcyB1bmtub3duIGFzIHtcbiAgICAgIGlzVHJ1bmNhdGVkU3RhcnQ/OiBib29sZWFuXG4gICAgICBpc1RydW5jYXRlZEVuZD86IGJvb2xlYW5cbiAgICB9XG4gICAgY29uc3QgaXNUcnVuY2F0ZWRTdGFydCA9IGVuaGFuY2VkRXZlbnQuaXNUcnVuY2F0ZWRTdGFydFxuICAgIGNvbnN0IGlzVHJ1bmNhdGVkRW5kID0gZW5oYW5jZWRFdmVudC5pc1RydW5jYXRlZEVuZFxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICBldmVudC5iYWNrZ3JvdW5kQ29sb3IgfHwgJ2JnLWJsdWUtNTAwJyxcbiAgICAgICAgICBldmVudC5jb2xvciB8fCAndGV4dC13aGl0ZScsXG4gICAgICAgICAgJ2gtZnVsbCB3LWZ1bGwgcHgtMSBib3JkZXItWzEuNXB4XSBib3JkZXItY2FyZCB0ZXh0LWxlZnQgb3ZlcmZsb3ctY2xpcCByZWxhdGl2ZScsXG4gICAgICAgICAgZ2V0Qm9yZGVyUmFkaXVzQ2xhc3MoaXNUcnVuY2F0ZWRTdGFydCwgaXNUcnVuY2F0ZWRFbmQpXG4gICAgICAgICl9XG4gICAgICAgIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogZXZlbnQuYmFja2dyb3VuZENvbG9yLCBjb2xvcjogZXZlbnQuY29sb3IgfX1cbiAgICAgID5cbiAgICAgICAgey8qIExlZnQgY29udGludWF0aW9uIGluZGljYXRvciAqL31cbiAgICAgICAge2lzVHJ1bmNhdGVkU3RhcnQgJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgbGVmdC0wIHRvcC0wIGJvdHRvbS0wIHctMC41IGJnLWZvcmVncm91bmQvMjVcIj48L2Rpdj5cbiAgICAgICAgKX1cblxuICAgICAgICB7LyogRXZlbnQgdGl0bGUgKi99XG4gICAgICAgIDxwXG4gICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICd0ZXh0LVsxMHB4XSBmb250LXNlbWlib2xkIHNtOnRleHQteHMgbXQtMC41JyxcbiAgICAgICAgICAgIC8vIEFkZCBzbGlnaHQgcGFkZGluZyB0byBhdm9pZCBvdmVybGFwIHdpdGggaW5kaWNhdG9yc1xuICAgICAgICAgICAgaXNUcnVuY2F0ZWRTdGFydCAmJiAncGwtMScsXG4gICAgICAgICAgICBpc1RydW5jYXRlZEVuZCAmJiAncHItMSdcbiAgICAgICAgICApfVxuICAgICAgICA+XG4gICAgICAgICAge2V2ZW50LnRpdGxlfVxuICAgICAgICA8L3A+XG5cbiAgICAgICAgey8qIFJpZ2h0IGNvbnRpbnVhdGlvbiBpbmRpY2F0b3IgKi99XG4gICAgICAgIHtpc1RydW5jYXRlZEVuZCAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSByaWdodC0wIHRvcC0wIGJvdHRvbS0wIHctMC41IGJnLWZvcmVncm91bmQvMjVcIj48L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuICAgICAgPG1vdGlvbi5kaXZcbiAgICAgICAga2V5PXtlbGVtZW50SWR9XG4gICAgICAgIHJlZj17c2V0Tm9kZVJlZn1cbiAgICAgICAgey4uLmF0dHJpYnV0ZXN9XG4gICAgICAgIHsuLi5saXN0ZW5lcnN9XG4gICAgICAgIGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeTogLTUwIH19XG4gICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC01MCB9fVxuICAgICAgICBsYXlvdXRcbiAgICAgICAgbGF5b3V0SWQ9e2VsZW1lbnRJZH1cbiAgICAgICAgdHJhbnNpdGlvbj17eyBkdXJhdGlvbjogMC40LCBlYXNlOiAnZWFzZUluT3V0JyB9fVxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICd0cnVuY2F0ZSBoLWZ1bGwgdy1mdWxsJyxcbiAgICAgICAgICBkaXNhYmxlRHJhZyB8fCBkaXNhYmxlRHJhZ0FuZERyb3BcbiAgICAgICAgICAgID8gZGlzYWJsZUV2ZW50Q2xpY2tcbiAgICAgICAgICAgICAgPyAnY3Vyc29yLWRlZmF1bHQnXG4gICAgICAgICAgICAgIDogJ2N1cnNvci1wb2ludGVyJ1xuICAgICAgICAgICAgOiAnY3Vyc29yLWdyYWInLFxuICAgICAgICAgIGlzRHJhZ2dpbmcgJiZcbiAgICAgICAgICAgICEoZGlzYWJsZURyYWcgfHwgZGlzYWJsZURyYWdBbmREcm9wKSAmJlxuICAgICAgICAgICAgJ2N1cnNvci1ncmFiYmluZyBzaGFkb3ctbGcnLFxuICAgICAgICAgIGNsYXNzTmFtZVxuICAgICAgICApfVxuICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgIG9uRXZlbnRDbGljayhldmVudClcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgey8qIFVzZSBjdXN0b20gcmVuZGVyRXZlbnQgZnJvbSBjb250ZXh0IGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHVzZSBkZWZhdWx0ICovfVxuICAgICAgICB7cmVuZGVyRXZlbnQgPyByZW5kZXJFdmVudChldmVudCkgOiA8RGVmYXVsdEV2ZW50Q29udGVudCAvPn1cbiAgICAgIDwvbW90aW9uLmRpdj5cbiAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgRHJhZ2dhYmxlRXZlbnQgPSBtZW1vKFxuICBEcmFnZ2FibGVFdmVudFVubWVtb2l6ZWQsXG4gIChwcmV2UHJvcHMsIG5leHRQcm9wcykgPT4ge1xuICAgIC8vIENvbXBhcmUgdGhlIGVzc2VudGlhbCBwcm9wcyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcbiAgICByZXR1cm4gKFxuICAgICAgcHJldlByb3BzLmVsZW1lbnRJZCA9PT0gbmV4dFByb3BzLmVsZW1lbnRJZCAmJlxuICAgICAgcHJldlByb3BzLmRpc2FibGVEcmFnID09PSBuZXh0UHJvcHMuZGlzYWJsZURyYWcgJiZcbiAgICAgIHByZXZQcm9wcy5jbGFzc05hbWUgPT09IG5leHRQcm9wcy5jbGFzc05hbWUgJiZcbiAgICAgIHByZXZQcm9wcy5ldmVudCA9PT0gbmV4dFByb3BzLmV2ZW50XG4gICAgKVxuICB9XG4pXG4iLAogICAgImltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBEcm9wcGFibGVDZWxsIH0gZnJvbSAnQC9mZWF0dXJlcy9kcm9wcGFibGUtY2VsbC9kcm9wcGFibGUtY2VsbCdcbmltcG9ydCB7IEFsbEV2ZW50RGlhbG9nIH0gZnJvbSAnLi9hbGwtZXZlbnRzLWRpYWxvZydcbmltcG9ydCB0eXBlIHsgU2VsZWN0ZWREYXlFdmVudHMgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcblxuaW50ZXJmYWNlIERheUNlbGxQcm9wcyB7XG4gIGluZGV4OiBudW1iZXIgLy8gSW5kZXggb2YgdGhlIGRheSBpbiB0aGUgd2VlayAoMC02KVxuICBkYXk6IGRheWpzLkRheWpzXG4gIGRheU1heEV2ZW50cz86IG51bWJlclxuICBjbGFzc05hbWU/OiBzdHJpbmcgLy8gT3B0aW9uYWwgY2xhc3NOYW1lIGZvciBjdXN0b20gc3R5bGluZ1xufVxuXG5leHBvcnQgY29uc3QgRGF5Q2VsbDogUmVhY3QuRkM8RGF5Q2VsbFByb3BzPiA9ICh7XG4gIGluZGV4LFxuICBkYXksXG4gIGNsYXNzTmFtZSA9ICcnLFxufSkgPT4ge1xuICBjb25zdCBhbGxFdmVudHNEaWFsb2dSZWYgPSBSZWFjdC51c2VSZWY8e1xuICAgIG9wZW46ICgpID0+IHZvaWRcbiAgICBjbG9zZTogKCkgPT4gdm9pZFxuICAgIHNldFNlbGVjdGVkRGF5RXZlbnRzOiAoZGF5RXZlbnRzOiBTZWxlY3RlZERheUV2ZW50cykgPT4gdm9pZFxuICB9PihudWxsKVxuICBjb25zdCB7XG4gICAgY3VycmVudExvY2FsZSxcbiAgICBnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG4gICAgY3VycmVudERhdGUsXG4gICAgZmlyc3REYXlPZldlZWssXG4gICAgZGF5TWF4RXZlbnRzID0gMCxcbiAgICB0LFxuICB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcbiAgY29uc3QgdG9kYXlFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UoXG4gICAgZGF5LnN0YXJ0T2YoJ2RheScpLFxuICAgIGRheS5lbmRPZignZGF5JylcbiAgKVxuXG4gIC8vIEdldCBzdGFydCBkYXRlIGZvciB0aGUgY3VycmVudCBtb250aCB2aWV3IGJhc2VkIG9uIGZpcnN0RGF5T2ZXZWVrXG4gIGNvbnN0IGZpcnN0RGF5T2ZNb250aCA9IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ21vbnRoJylcblxuICAvLyBDYWxjdWxhdGUgdGhlIGZpcnN0IGRheSBvZiB0aGUgY2FsZW5kYXIgZ3JpZCBjb3JyZWN0bHlcbiAgLy8gRmluZCB0aGUgZmlyc3QgZGF5IG9mIHdlZWsgKGUuZy4gU3VuZGF5IG9yIE1vbmRheSkgdGhhdCBjb21lcyBiZWZvcmUgb3Igb24gdGhlIGZpcnN0IGRheSBvZiB0aGUgbW9udGhcbiAgbGV0IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyID0gZmlyc3REYXlPZk1vbnRoLmNsb25lKClcbiAgd2hpbGUgKGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLmRheSgpICE9PSBmaXJzdERheU9mV2Vlaykge1xuICAgIGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyID0gYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIuc3VidHJhY3QoMSwgJ2RheScpXG4gIH1cblxuICAvLyBIYW5kbGVyIGZvciBzaG93aW5nIGFsbCBldmVudHMgaW4gYSBkaWFsb2dcbiAgY29uc3Qgc2hvd0FsbEV2ZW50cyA9IChkYXk6IGRheWpzLkRheWpzLCBldmVudHM6IENhbGVuZGFyRXZlbnRbXSkgPT4ge1xuICAgIGFsbEV2ZW50c0RpYWxvZ1JlZi5jdXJyZW50Py5zZXRTZWxlY3RlZERheUV2ZW50cyh7XG4gICAgICBkYXksXG4gICAgICBldmVudHMsXG4gICAgfSlcbiAgICBhbGxFdmVudHNEaWFsb2dSZWYuY3VycmVudD8ub3BlbigpXG4gIH1cblxuICBjb25zdCBpc1RvZGF5ID0gZGF5LmlzU2FtZShkYXlqcygpLCAnZGF5JylcbiAgY29uc3QgaXNDdXJyZW50TW9udGggPSBkYXkubW9udGgoKSA9PT0gY3VycmVudERhdGUubW9udGgoKVxuICBjb25zdCBpc0xhc3RDb2x1bW4gPSBpbmRleCA9PT0gNiAvLyBTYXR1cmRheSBpcyB0aGUgbGFzdCBjb2x1bW4gaW4gYSB3ZWVrXG5cbiAgY29uc3QgaGlkZGVuRXZlbnRzQ291bnQgPSB0b2RheUV2ZW50cy5sZW5ndGggLSBkYXlNYXhFdmVudHNcbiAgY29uc3QgaGFzSGlkZGVuRXZlbnRzID0gaGlkZGVuRXZlbnRzQ291bnQgPiAwXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPERyb3BwYWJsZUNlbGxcbiAgICAgICAgaWQ9e2BkYXktY2VsbC0ke2RheS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuICAgICAgICB0eXBlPVwiZGF5LWNlbGxcIlxuICAgICAgICBkYXRhLXRlc3RpZD17YGRheS1jZWxsLSR7ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfWB9XG4gICAgICAgIGRhdGU9e2RheX1cbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAnY3Vyc29yLXBvaW50ZXIgb3ZlcmZsb3ctY2xpcCBwLTEgaG92ZXI6YmctYWNjZW50IG1pbi1oLVs2MHB4XScsXG4gICAgICAgICAgIWlzQ3VycmVudE1vbnRoICYmICdiZy1zZWNvbmRhcnkgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kJyxcbiAgICAgICAgICBpc0xhc3RDb2x1bW4gJiYgJ2JvcmRlci1yLTAnLFxuICAgICAgICAgIGNsYXNzTmFtZVxuICAgICAgICApfVxuICAgICAgPlxuICAgICAgICB7LyogQWJzb2x1dGVseSBwb3NpdGlvbmVkIG11bHRpLWRheSBiYXJzIChHb29nbGUgQ2FsZW5kYXIgc3R5bGUpICovfVxuXG4gICAgICAgIHsvKiBTaW5nbGUtZGF5IGV2ZW50cyBjb250YWluZXIgcG9zaXRpb25lZCBiZWxvdyBtdWx0aS1kYXkgZXZlbnRzICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLTFcIj5cbiAgICAgICAgICB7LyogRGF5IG51bWJlciAqL31cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAnZmxleCBoLTUgdy01IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdGV4dC14cyBzbTpoLTYgc206dy02JyxcbiAgICAgICAgICAgICAgaXNUb2RheSAmJiAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBmb250LW1lZGl1bSdcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge0ludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwgeyBkYXk6ICdudW1lcmljJyB9KS5mb3JtYXQoXG4gICAgICAgICAgICAgIGRheS50b0RhdGUoKVxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIHsvKiBSZW5kZXIgcGxhY2Vob2xkZXJzIGZvciBldmVudHMgdGhhdCBvY2N1ciB0b2RheSBzbyB0aGF0IHRoZSBjZWxsIGhlaWdodCBpcyBhY2NvcmRpbmcgdG8gZGF5TWF4RXZlbnRzLiAqL31cbiAgICAgICAgICB7dG9kYXlFdmVudHMuc2xpY2UoMCwgZGF5TWF4RXZlbnRzKS5tYXAoKGV2ZW50LCByb3dJbmRleCkgPT4gKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBrZXk9e2BlbXB0eS0ke3Jvd0luZGV4fWB9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtWzIwcHhdIHctZnVsbFwiXG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtldmVudD8udGl0bGV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpfVxuXG4gICAgICAgICAgey8qIFNob3cgbW9yZSBldmVudHMgYnV0dG9uIHdpdGggYWNjdXJhdGUgY291bnQgKi99XG4gICAgICAgICAge2hhc0hpZGRlbkV2ZW50cyAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBob3Zlcjp0ZXh0LWZvcmVncm91bmQgY3Vyc29yLXBvaW50ZXIgdGV4dC1bMTBweF0gd2hpdGVzcGFjZS1ub3dyYXAgc206dGV4dC14cyBtdC0xXCJcbiAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG5cbiAgICAgICAgICAgICAgICBzaG93QWxsRXZlbnRzKGRheSwgdG9kYXlFdmVudHMpXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIG9uS2V5RG93bj17KGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgfHwgZS5rZXkgPT09ICcgJykge1xuICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICBzaG93QWxsRXZlbnRzKGRheSwgdG9kYXlFdmVudHMpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICB0YWJJbmRleD17MH1cbiAgICAgICAgICAgICAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci10YWctb3Zlci1yb2xlXG4gICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAre2hpZGRlbkV2ZW50c0NvdW50fSB7dCgnbW9yZScpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L0Ryb3BwYWJsZUNlbGw+XG5cbiAgICAgIHsvKiBEaWFsb2cgZm9yIHNob3dpbmcgYWxsIGV2ZW50cyAqL31cbiAgICAgIDxBbGxFdmVudERpYWxvZyByZWY9e2FsbEV2ZW50c0RpYWxvZ1JlZn0gLz5cbiAgICA8Lz5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VEcm9wcGFibGUgfSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuXG5pbnRlcmZhY2UgRHJvcHBhYmxlQ2VsbFByb3BzIHtcbiAgaWQ6IHN0cmluZ1xuICB0eXBlOiAnZGF5LWNlbGwnIHwgJ3RpbWUtY2VsbCdcbiAgZGF0ZTogZGF5anMuRGF5anNcbiAgaG91cj86IG51bWJlclxuICBtaW51dGU/OiBudW1iZXJcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG4gIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllc1xuICAnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBEcm9wcGFibGVDZWxsKHtcbiAgaWQsXG4gIHR5cGUsXG4gIGRhdGUsXG4gIGhvdXIsXG4gIG1pbnV0ZSxcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgc3R5bGUsXG4gICdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG59OiBEcm9wcGFibGVDZWxsUHJvcHMpIHtcbiAgY29uc3QgeyBvbkNlbGxDbGljaywgZGlzYWJsZURyYWdBbmREcm9wLCBkaXNhYmxlQ2VsbENsaWNrIH0gPVxuICAgIHVzZUNhbGVuZGFyQ29udGV4dCgpXG4gIGNvbnN0IHsgaXNPdmVyLCBzZXROb2RlUmVmIH0gPSB1c2VEcm9wcGFibGUoe1xuICAgIGlkLFxuICAgIGRhdGE6IHtcbiAgICAgIHR5cGUsXG4gICAgICBkYXRlLFxuICAgICAgaG91cixcbiAgICAgIG1pbnV0ZSxcbiAgICB9LFxuICAgIGRpc2FibGVkOiBkaXNhYmxlRHJhZ0FuZERyb3AsXG4gIH0pXG5cbiAgY29uc3QgaGFuZGxlQ2VsbENsaWNrID0gKGU6IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgaWYgKGRpc2FibGVDZWxsQ2xpY2spIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IGRhdGUuaG91cihob3VyID8/IDApLm1pbnV0ZShtaW51dGUgPz8gMClcbiAgICBsZXQgZW5kRGF0ZSA9IHN0YXJ0RGF0ZS5jbG9uZSgpXG4gICAgaWYgKGhvdXIgIT09IHVuZGVmaW5lZCAmJiBtaW51dGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZW5kRGF0ZSA9IGVuZERhdGUuaG91cihob3VyKS5taW51dGUobWludXRlICsgMTUpIC8vIGRheSB2aWV3IHRpbWUgc2xvdHMgYXJlIDE1IG1pbnV0ZXNcbiAgICB9IGVsc2UgaWYgKGhvdXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZW5kRGF0ZSA9IGVuZERhdGUuaG91cihob3VyICsgMSkubWludXRlKDApIC8vIHdlZWsgdmlldyB0aW1lIHNsb3RzIGFyZSAxIGhvdXJcbiAgICB9IGVsc2Uge1xuICAgICAgZW5kRGF0ZSA9IGVuZERhdGUuaG91cigyMykubWludXRlKDU5KSAvLyBtb250aCB2aWV3IGZ1bGwgZGF5XG4gICAgfVxuXG4gICAgb25DZWxsQ2xpY2soc3RhcnREYXRlLCBlbmREYXRlKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e3NldE5vZGVSZWZ9XG4gICAgICBkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZH1cbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgaXNPdmVyICYmICFkaXNhYmxlRHJhZ0FuZERyb3AgJiYgJ2JnLWFjY2VudCcsXG4gICAgICAgIGRpc2FibGVDZWxsQ2xpY2sgPyAnY3Vyc29yLWRlZmF1bHQnIDogJ2N1cnNvci1wb2ludGVyJ1xuICAgICAgKX1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNlbGxDbGlja31cbiAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIE1vbnRoSGVhZGVyUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IE1vbnRoSGVhZGVyOiBSZWFjdC5GQzxNb250aEhlYWRlclByb3BzPiA9ICh7IGNsYXNzTmFtZSB9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBmaXJzdERheU9mV2VlayxcbiAgICBjdXJyZW50TG9jYWxlLFxuICAgIHN0aWNreVZpZXdIZWFkZXIsXG4gICAgdmlld0hlYWRlckNsYXNzTmFtZSxcbiAgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgLy8gUmVvcmRlciB3ZWVrIGRheXMgYmFzZWQgb24gZmlyc3REYXlPZldlZWtcbiAgY29uc3Qgd2Vla0RheXMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBkYXlzID0gZGF5anMud2Vla2RheXMoKS5tYXAoKGRheSkgPT4gZGF5LnRvTG93ZXJDYXNlKCkpXG4gICAgY29uc3Qgc2hvcnREYXlzID0gZGF5anMud2Vla2RheXNTaG9ydCgpLm1hcCgoZGF5KSA9PiBkYXkudG9Mb3dlckNhc2UoKSlcblxuICAgIC8vIFJvdGF0ZSB0aGUgYXJyYXkgYmFzZWQgb24gZmlyc3REYXlPZldlZWtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpcnN0RGF5T2ZXZWVrOyBpKyspIHtcbiAgICAgIGNvbnN0IGRheVRvTW92ZSA9IGRheXMuc2hpZnQoKVxuICAgICAgY29uc3Qgc2hvcnREYXlUb01vdmUgPSBzaG9ydERheXMuc2hpZnQoKVxuICAgICAgaWYgKGRheVRvTW92ZSkge1xuICAgICAgICBkYXlzLnB1c2goZGF5VG9Nb3ZlKVxuICAgICAgfVxuICAgICAgaWYgKHNob3J0RGF5VG9Nb3ZlKSB7XG4gICAgICAgIHNob3J0RGF5cy5wdXNoKHNob3J0RGF5VG9Nb3ZlKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IGRheXMsIHNob3J0RGF5cyB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbZmlyc3REYXlPZldlZWssIGN1cnJlbnRMb2NhbGVdKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2dyaWQgZ3JpZC1jb2xzLTcgYm9yZGVyLWInLFxuICAgICAgICBzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0yMCcsXG4gICAgICAgIHZpZXdIZWFkZXJDbGFzc05hbWUsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIGRhdGEtdGVzdGlkPVwibW9udGgtaGVhZGVyXCJcbiAgICA+XG4gICAgICB7d2Vla0RheXMuZGF5cy5tYXAoKHdlZWtEYXksIGluZGV4KSA9PiAoXG4gICAgICAgIDxBbmltYXRlUHJlc2VuY2Uga2V5PXt3ZWVrRGF5fSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgIDxtb3Rpb24uZGl2XG4gICAgICAgICAgICBrZXk9e3dlZWtEYXl9XG4gICAgICAgICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgICAgYW5pbWF0ZT17eyBvcGFjaXR5OiAxLCB5OiAwIH19XG4gICAgICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgICAgdHJhbnNpdGlvbj17e1xuICAgICAgICAgICAgICBkdXJhdGlvbjogMC4yNSxcbiAgICAgICAgICAgICAgZWFzZTogJ2Vhc2VJbk91dCcsXG4gICAgICAgICAgICAgIGRlbGF5OiBpbmRleCAqIDAuMDUsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwicHktMiB0ZXh0LWNlbnRlciBmb250LW1lZGl1bSBib3JkZXItciBmaXJzdDpib3JkZXItbFwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD17YHdlZWtkYXktaGVhZGVyLSR7d2Vla0RheX1gfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImhpZGRlbiB0ZXh0LXNtIHNtOmlubGluZVwiPnt3ZWVrRGF5fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQteHMgc206aGlkZGVuXCI+XG4gICAgICAgICAgICAgIHt3ZWVrRGF5cy5zaG9ydERheXNbaW5kZXhdfVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvbW90aW9uLmRpdj5cbiAgICAgICAgPC9BbmltYXRlUHJlc2VuY2U+XG4gICAgICApKX1cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IFdlZWtEYXlzIH0gZnJvbSAnQC9jb21wb25lbnRzJ1xuXG5leHBvcnQgY29uc3QgR0FQX0JFVFdFRU5fRUxFTUVOVFMgPSAxIC8vIHB4IChnYXAtMSlcbmV4cG9ydCBjb25zdCBEQVlfTlVNQkVSX0hFSUdIVCA9IDI4IC8vIHB4IChoLTcpXG5leHBvcnQgY29uc3QgRVZFTlRfQkFSX0hFSUdIVCA9IDI0IC8vIHB4IChoLVsyNHB4XSlcblxuZXhwb3J0IGNvbnN0IFdFRUtfREFZU19OVU1CRVJfTUFQOiBSZWNvcmQ8V2Vla0RheXMsIG51bWJlcj4gPSB7XG4gIHN1bmRheTogMCxcbiAgbW9uZGF5OiAxLFxuICB0dWVzZGF5OiAyLFxuICB3ZWRuZXNkYXk6IDMsXG4gIHRodXJzZGF5OiA0LFxuICBmcmlkYXk6IDUsXG4gIHNhdHVyZGF5OiA2LFxufVxuXG5leHBvcnQgY29uc3QgREFZX05VTUJFUl9UT19XRUVLX0RBWVM6IFJlY29yZDxudW1iZXIsIFdlZWtEYXlzPiA9IHtcbiAgMDogJ3N1bmRheScsXG4gIDE6ICdtb25kYXknLFxuICAyOiAndHVlc2RheScsXG4gIDM6ICd3ZWRuZXNkYXknLFxuICA0OiAndGh1cnNkYXknLFxuICA1OiAnZnJpZGF5JyxcbiAgNjogJ3NhdHVyZGF5Jyxcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQge1xuICBEQVlfTlVNQkVSX0hFSUdIVCxcbiAgRVZFTlRfQkFSX0hFSUdIVCxcbiAgR0FQX0JFVFdFRU5fRUxFTUVOVFMsXG59IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5cbmludGVyZmFjZSBQcm9jZXNzZWRFdmVudCBleHRlbmRzIENhbGVuZGFyRXZlbnQge1xuICBsZWZ0OiBudW1iZXIgLy8gTGVmdCBwb3NpdGlvbiBpbiBwZXJjZW50YWdlXG4gIHdpZHRoOiBudW1iZXIgLy8gV2lkdGggaW4gcGVyY2VudGFnZVxuICB0b3A6IG51bWJlciAvLyBUb3AgcG9zaXRpb24gaW4gcGVyY2VudGFnZVxuICBoZWlnaHQ6IG51bWJlciAvLyBIZWlnaHQgaW4gcGVyY2VudGFnZVxuICBwb3NpdGlvbjogbnVtYmVyIC8vIFBvc2l0aW9uIGluIHRoZSByb3cgKDAgZm9yIGZpcnN0LCAxIGZvciBzZWNvbmQsIGV0Yy4pXG59XG5cbmludGVyZmFjZSBVc2VQcm9jZXNzZWRXZWVrRXZlbnRzUHJvcHMge1xuICBkYXlzOiBkYXlqcy5EYXlqc1tdXG59XG5cbmV4cG9ydCBjb25zdCB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzID0gKHtcbiAgZGF5cyxcbn06IFVzZVByb2Nlc3NlZFdlZWtFdmVudHNQcm9wcykgPT4ge1xuICBjb25zdCB7IGdldEV2ZW50c0ZvckRhdGVSYW5nZSwgZGF5TWF4RXZlbnRzIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIGNvbnN0IHdlZWtTdGFydCA9IGRheXNbMF0uc3RhcnRPZignZGF5JylcbiAgY29uc3Qgd2Vla0VuZCA9IGRheXNbNl0uZW5kT2YoJ2RheScpXG5cbiAgLy8gR2V0IGFsbCBldmVudHMgdGhhdCBpbnRlcnNlY3Qgd2l0aCB0aGlzIHdlZWtcbiAgY29uc3Qgd2Vla0V2ZW50cyA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZSh3ZWVrU3RhcnQsIHdlZWtFbmQpXG5cbiAgLy8gU2VwYXJhdGUgbXVsdGktZGF5IGFuZCBzaW5nbGUtZGF5IGV2ZW50c1xuICBjb25zdCBtdWx0aURheUV2ZW50cyA9IHdlZWtFdmVudHMuZmlsdGVyKFxuICAgIChlKSA9PiBlLmVuZC5kaWZmKGUuc3RhcnQsICdkYXknKSA+IDBcbiAgKVxuICBjb25zdCBzaW5nbGVEYXlFdmVudHMgPSB3ZWVrRXZlbnRzLmZpbHRlcihcbiAgICAoZSkgPT4gZS5lbmQuZGlmZihlLnN0YXJ0LCAnZGF5JykgPT09IDBcbiAgKVxuXG4gIC8vIFNvcnQgbXVsdGktZGF5IGV2ZW50cyBieSBzdGFydCBkYXRlLCB0aGVuIGJ5IGR1cmF0aW9uXG4gIGNvbnN0IHNvcnRlZE11bHRpRGF5ID0gWy4uLm11bHRpRGF5RXZlbnRzXS5zb3J0KChhLCBiKSA9PiB7XG4gICAgY29uc3Qgc3RhcnREaWZmID0gYS5zdGFydC5kaWZmKGIuc3RhcnQpXG4gICAgaWYgKHN0YXJ0RGlmZiAhPT0gMCkge1xuICAgICAgcmV0dXJuIHN0YXJ0RGlmZlxuICAgIH1cbiAgICByZXR1cm4gYi5lbmQuZGlmZihiLnN0YXJ0KSAtIGEuZW5kLmRpZmYoYS5zdGFydCkgLy8gTG9uZ2VyIGV2ZW50cyBmaXJzdFxuICB9KVxuXG4gIC8vIFNvcnQgc2luZ2xlLWRheSBldmVudHMgYnkgc3RhcnQgdGltZVxuICBjb25zdCBzb3J0ZWRTaW5nbGVEYXkgPSBbLi4uc2luZ2xlRGF5RXZlbnRzXS5zb3J0KChhLCBiKSA9PlxuICAgIGEuc3RhcnQuZGlmZihiLnN0YXJ0KVxuICApXG5cbiAgLy8gQ3JlYXRlIDcgeCBkYXlNYXhFdmVudHMgZ3JpZCB3aXRoIGZsYWdzXG4gIGNvbnN0IGdyaWQ6IHsgdGFrZW46IGJvb2xlYW47IGV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbCB9W11bXSA9IFtdXG4gIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IGRheU1heEV2ZW50czsgcm93KyspIHtcbiAgICBncmlkW3Jvd10gPSBbXVxuICAgIGZvciAobGV0IGNvbCA9IDA7IGNvbCA8IDc7IGNvbCsrKSB7XG4gICAgICBncmlkW3Jvd11bY29sXSA9IHsgdGFrZW46IGZhbHNlLCBldmVudDogbnVsbCB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcHJvY2Vzc2VkRXZlbnRzOiBQcm9jZXNzZWRFdmVudFtdID0gW11cblxuICAvLyBTdGVwIDE6IEFzc2lnbiBwb3NpdGlvbnMgdG8gbXVsdGktZGF5IGV2ZW50cyBmaXJzdFxuICBmb3IgKGNvbnN0IGV2ZW50IG9mIHNvcnRlZE11bHRpRGF5KSB7XG4gICAgY29uc3QgZXZlbnRTdGFydCA9IGRheWpzLm1heChldmVudC5zdGFydC5zdGFydE9mKCdkYXknKSwgd2Vla1N0YXJ0KVxuICAgIGNvbnN0IGV2ZW50RW5kID0gZGF5anMubWluKGV2ZW50LmVuZC5zdGFydE9mKCdkYXknKSwgd2Vla0VuZClcbiAgICBjb25zdCBzdGFydENvbCA9IE1hdGgubWF4KDAsIGV2ZW50U3RhcnQuZGlmZih3ZWVrU3RhcnQsICdkYXknKSlcbiAgICBjb25zdCBlbmRDb2wgPSBNYXRoLm1pbig2LCBldmVudEVuZC5kaWZmKHdlZWtTdGFydCwgJ2RheScpKVxuXG4gICAgLy8gRGV0ZWN0IGlmIGV2ZW50IGlzIHRydW5jYXRlZCBhdCB0aGUgYm91bmRhcmllc1xuICAgIGNvbnN0IGlzVHJ1bmNhdGVkU3RhcnQgPSBldmVudC5zdGFydC5zdGFydE9mKCdkYXknKS5pc0JlZm9yZSh3ZWVrU3RhcnQpXG4gICAgY29uc3QgaXNUcnVuY2F0ZWRFbmQgPSBldmVudC5lbmQuc3RhcnRPZignZGF5JykuaXNBZnRlcih3ZWVrRW5kKVxuXG4gICAgLy8gVHJ5IHRvIHBsYWNlIHRoZSBldmVudCBzdGFydGluZyBmcm9tIGl0cyBvcmlnaW5hbCBzdGFydCBjb2x1bW5cbiAgICBsZXQgcGxhY2VkU3VjY2Vzc2Z1bGx5ID0gZmFsc2VcblxuICAgIC8vIEZpcnN0IHRyeTogcGxhY2UgZnJvbSBvcmlnaW5hbCBzdGFydCBwb3NpdGlvblxuICAgIGxldCBhc3NpZ25lZFJvdyA9IC0xXG4gICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgZGF5TWF4RXZlbnRzOyByb3crKykge1xuICAgICAgbGV0IGNhblBsYWNlID0gdHJ1ZVxuICAgICAgZm9yIChsZXQgY29sID0gc3RhcnRDb2w7IGNvbCA8PSBlbmRDb2w7IGNvbCsrKSB7XG4gICAgICAgIGlmIChncmlkW3Jvd11bY29sXS50YWtlbikge1xuICAgICAgICAgIGNhblBsYWNlID0gZmFsc2VcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2FuUGxhY2UpIHtcbiAgICAgICAgYXNzaWduZWRSb3cgPSByb3dcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBmb3VuZCBhIHJvdywgYXNzaWduIHRoZSBldmVudCB0byBhbGwgaXRzIGNvbHVtbnNcbiAgICBpZiAoYXNzaWduZWRSb3cgIT09IC0xKSB7XG4gICAgICBmb3IgKGxldCBjb2wgPSBzdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcbiAgICAgICAgZ3JpZFthc3NpZ25lZFJvd11bY29sXSA9IHsgdGFrZW46IHRydWUsIGV2ZW50IH1cbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIHBvc2l0aW9uIGRhdGEgZm9yIHJlbmRlcmluZ1xuICAgICAgY29uc3Qgc3BhbkRheXMgPSBlbmRDb2wgLSBzdGFydENvbCArIDFcbiAgICAgIHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcbiAgICAgICAgbGVmdDogKHN0YXJ0Q29sIC8gNykgKiAxMDAsXG4gICAgICAgIHdpZHRoOiAoc3BhbkRheXMgLyA3KSAqIDEwMCxcbiAgICAgICAgdG9wOlxuICAgICAgICAgIERBWV9OVU1CRVJfSEVJR0hUICtcbiAgICAgICAgICBHQVBfQkVUV0VFTl9FTEVNRU5UUyArXG4gICAgICAgICAgYXNzaWduZWRSb3cgKiAoRVZFTlRfQkFSX0hFSUdIVCArIEdBUF9CRVRXRUVOX0VMRU1FTlRTKSxcbiAgICAgICAgaGVpZ2h0OiBFVkVOVF9CQVJfSEVJR0hULFxuICAgICAgICBwb3NpdGlvbjogYXNzaWduZWRSb3csXG4gICAgICAgIC4uLmV2ZW50LFxuICAgICAgICBpc1RydW5jYXRlZFN0YXJ0LFxuICAgICAgICBpc1RydW5jYXRlZEVuZCxcbiAgICAgIH0gYXMgUHJvY2Vzc2VkRXZlbnQpXG4gICAgICBwbGFjZWRTdWNjZXNzZnVsbHkgPSB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgY291bGRuJ3QgcGxhY2UgYXQgb3JpZ2luYWwgcG9zaXRpb24sIHRyeSB0cnVuY2F0ZWQgdmVyc2lvbnMgc3RhcnRpbmcgZnJvbSBsYXRlciBkYXlzXG4gICAgaWYgKCFwbGFjZWRTdWNjZXNzZnVsbHkpIHtcbiAgICAgIGZvciAoXG4gICAgICAgIGxldCB0cnlTdGFydENvbCA9IHN0YXJ0Q29sICsgMTtcbiAgICAgICAgdHJ5U3RhcnRDb2wgPD0gZW5kQ29sO1xuICAgICAgICB0cnlTdGFydENvbCsrXG4gICAgICApIHtcbiAgICAgICAgLy8gVHJ5IHRvIHBsYWNlIHRoZSB0cnVuY2F0ZWQgZXZlbnQgc3RhcnRpbmcgZnJvbSB0aGlzIGNvbHVtblxuICAgICAgICBsZXQgdHJ1bmNhdGVkQXNzaWduZWRSb3cgPSAtMVxuICAgICAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG4gICAgICAgICAgbGV0IGNhblBsYWNlID0gdHJ1ZVxuICAgICAgICAgIGZvciAobGV0IGNvbCA9IHRyeVN0YXJ0Q29sOyBjb2wgPD0gZW5kQ29sOyBjb2wrKykge1xuICAgICAgICAgICAgaWYgKGdyaWRbcm93XVtjb2xdLnRha2VuKSB7XG4gICAgICAgICAgICAgIGNhblBsYWNlID0gZmFsc2VcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNhblBsYWNlKSB7XG4gICAgICAgICAgICB0cnVuY2F0ZWRBc3NpZ25lZFJvdyA9IHJvd1xuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB3ZSBmb3VuZCBhIHJvdyBmb3IgdGhlIHRydW5jYXRlZCB2ZXJzaW9uLCBwbGFjZSBpdFxuICAgICAgICBpZiAodHJ1bmNhdGVkQXNzaWduZWRSb3cgIT09IC0xKSB7XG4gICAgICAgICAgZm9yIChsZXQgY29sID0gdHJ5U3RhcnRDb2w7IGNvbCA8PSBlbmRDb2w7IGNvbCsrKSB7XG4gICAgICAgICAgICBncmlkW3RydW5jYXRlZEFzc2lnbmVkUm93XVtjb2xdID0geyB0YWtlbjogdHJ1ZSwgZXZlbnQgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENyZWF0ZSBwb3NpdGlvbiBkYXRhIGZvciB0aGUgdHJ1bmNhdGVkIHJlbmRlcmluZ1xuICAgICAgICAgIGNvbnN0IHRydW5jYXRlZFNwYW5EYXlzID0gZW5kQ29sIC0gdHJ5U3RhcnRDb2wgKyAxXG4gICAgICAgICAgcHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuICAgICAgICAgICAgbGVmdDogKHRyeVN0YXJ0Q29sIC8gNykgKiAxMDAsXG4gICAgICAgICAgICB3aWR0aDogKHRydW5jYXRlZFNwYW5EYXlzIC8gNykgKiAxMDAsXG4gICAgICAgICAgICB0b3A6XG4gICAgICAgICAgICAgIERBWV9OVU1CRVJfSEVJR0hUICtcbiAgICAgICAgICAgICAgR0FQX0JFVFdFRU5fRUxFTUVOVFMgK1xuICAgICAgICAgICAgICB0cnVuY2F0ZWRBc3NpZ25lZFJvdyAqIChFVkVOVF9CQVJfSEVJR0hUICsgR0FQX0JFVFdFRU5fRUxFTUVOVFMpLFxuICAgICAgICAgICAgaGVpZ2h0OiBFVkVOVF9CQVJfSEVJR0hULFxuICAgICAgICAgICAgcG9zaXRpb246IHRydW5jYXRlZEFzc2lnbmVkUm93LFxuICAgICAgICAgICAgLi4uZXZlbnQsXG4gICAgICAgICAgICBpc1RydW5jYXRlZFN0YXJ0OiB0cnVlLCAvLyBBbHdheXMgdHJ1bmNhdGVkIGF0IHN0YXJ0IHdoZW4gdXNpbmcgdGhpcyBmYWxsYmFjayBsb2dpY1xuICAgICAgICAgICAgaXNUcnVuY2F0ZWRFbmQsXG4gICAgICAgICAgfSBhcyBQcm9jZXNzZWRFdmVudClcbiAgICAgICAgICBwbGFjZWRTdWNjZXNzZnVsbHkgPSB0cnVlXG4gICAgICAgICAgYnJlYWsgLy8gU3VjY2Vzc2Z1bGx5IHBsYWNlZCwgc3RvcCB0cnlpbmcgb3RoZXIgc3RhcnQgcG9zaXRpb25zXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTdGVwIDI6IEZpbGwgZ2FwcyB3aXRoIHNpbmdsZS1kYXkgZXZlbnRzXG4gIGZvciAoY29uc3QgZXZlbnQgb2Ygc29ydGVkU2luZ2xlRGF5KSB7XG4gICAgY29uc3QgZXZlbnRTdGFydCA9IGRheWpzLm1heChldmVudC5zdGFydC5zdGFydE9mKCdkYXknKSwgd2Vla1N0YXJ0KVxuICAgIGNvbnN0IGNvbCA9IE1hdGgubWF4KDAsIGV2ZW50U3RhcnQuZGlmZih3ZWVrU3RhcnQsICdkYXknKSlcblxuICAgIC8vIFNpbmdsZS1kYXkgZXZlbnRzIGFyZSBub3QgdHJ1bmNhdGVkIGJ5IGRlZmluaXRpb25cbiAgICBjb25zdCBpc1RydW5jYXRlZFN0YXJ0ID0gZmFsc2VcbiAgICBjb25zdCBpc1RydW5jYXRlZEVuZCA9IGZhbHNlXG5cbiAgICAvLyBGaW5kIHRoZSBmaXJzdCBhdmFpbGFibGUgcm93IGluIHRoaXMgY29sdW1uXG4gICAgbGV0IGFzc2lnbmVkUm93ID0gLTFcbiAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG4gICAgICBpZiAoIWdyaWRbcm93XVtjb2xdLnRha2VuKSB7XG4gICAgICAgIGFzc2lnbmVkUm93ID0gcm93XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgZm91bmQgYSByb3csIGFzc2lnbiB0aGUgZXZlbnRcbiAgICBpZiAoYXNzaWduZWRSb3cgIT09IC0xKSB7XG4gICAgICBncmlkW2Fzc2lnbmVkUm93XVtjb2xdID0geyB0YWtlbjogdHJ1ZSwgZXZlbnQgfVxuXG4gICAgICAvLyBDcmVhdGUgcG9zaXRpb24gZGF0YSBmb3IgcmVuZGVyaW5nXG4gICAgICBwcm9jZXNzZWRFdmVudHMucHVzaCh7XG4gICAgICAgIGxlZnQ6IChjb2wgLyA3KSAqIDEwMCxcbiAgICAgICAgd2lkdGg6ICgxIC8gNykgKiAxMDAsXG4gICAgICAgIHRvcDpcbiAgICAgICAgICBEQVlfTlVNQkVSX0hFSUdIVCArXG4gICAgICAgICAgR0FQX0JFVFdFRU5fRUxFTUVOVFMgK1xuICAgICAgICAgIGFzc2lnbmVkUm93ICogKEVWRU5UX0JBUl9IRUlHSFQgKyBHQVBfQkVUV0VFTl9FTEVNRU5UUyksXG4gICAgICAgIGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcbiAgICAgICAgcG9zaXRpb246IGFzc2lnbmVkUm93LFxuICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgaXNUcnVuY2F0ZWRTdGFydCxcbiAgICAgICAgaXNUcnVuY2F0ZWRFbmQsXG4gICAgICB9IGFzIFByb2Nlc3NlZEV2ZW50KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwcm9jZXNzZWRFdmVudHNcbn1cbiIsCiAgICAiaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICdAL2ZlYXR1cmVzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQnXG5pbXBvcnQgeyB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzIH0gZnJvbSAnQC9ob29rcy91c2VQcm9jZXNzZWRXZWVrRXZlbnRzJ1xuaW1wb3J0IHsgRVZFTlRfQkFSX0hFSUdIVCB9IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcblxuaW50ZXJmYWNlIFdlZWtFdmVudHNMYXllclByb3BzIHtcbiAgZGF5czogZGF5anMuRGF5anNbXVxufVxuXG5leHBvcnQgY29uc3QgV2Vla0V2ZW50c0xheWVyOiBSZWFjdC5GQzxXZWVrRXZlbnRzTGF5ZXJQcm9wcz4gPSAoeyBkYXlzIH0pID0+IHtcbiAgY29uc3Qgd2Vla1N0YXJ0ID0gZGF5c1swXVxuICBjb25zdCBwcm9jZXNzZWRXZWVrRXZlbnRzID0gdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cyh7IGRheXMgfSlcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgdy1mdWxsIGgtZnVsbCBwb2ludGVyLWV2ZW50cy1ub25lIHotMTAgb3ZlcmZsb3ctY2xpcFwiPlxuICAgICAge3Byb2Nlc3NlZFdlZWtFdmVudHMubWFwKChldmVudCkgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGtleT17YGV2ZW50LSR7ZXZlbnQuaWR9LSR7ZXZlbnQucG9zaXRpb259LSR7d2Vla1N0YXJ0LmZvcm1hdChcbiAgICAgICAgICAgICAgJ1lZWVktTU0tREQnXG4gICAgICAgICAgICApfWB9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSB6LTEwIHBvaW50ZXItZXZlbnRzLWF1dG8gb3ZlcmZsb3ctY2xpcFwiXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBsZWZ0OiBgY2FsYygke2V2ZW50LmxlZnR9JSArIHZhcigtLXNwYWNpbmcpICogMC4yNSlgLFxuICAgICAgICAgICAgICB3aWR0aDogYGNhbGMoJHtldmVudC53aWR0aH0lIC0gdmFyKC0tc3BhY2luZykgKiAxKWAsXG4gICAgICAgICAgICAgIHRvcDogYCR7ZXZlbnQudG9wfXB4YCxcbiAgICAgICAgICAgICAgaGVpZ2h0OiBgJHtFVkVOVF9CQVJfSEVJR0hUfXB4YCxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBkYXRhLXRlc3RpZD17YHdlZWstZXZlbnQtbGF5ZXItZXZlbnQtJHtldmVudC5pZH1gfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxEcmFnZ2FibGVFdmVudFxuICAgICAgICAgICAgICBlbGVtZW50SWQ9e2BldmVudC0ke2V2ZW50LmlkfS0ke1xuICAgICAgICAgICAgICAgIGV2ZW50LnBvc2l0aW9uXG4gICAgICAgICAgICAgIH0tJHt3ZWVrU3RhcnQuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cbiAgICAgICAgICAgICAgZXZlbnQ9e2V2ZW50fVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLWZ1bGwgdy1mdWxsIHNoYWRvd1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApXG4gICAgICB9KX1cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyBTY3JvbGxBcmVhIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcbmltcG9ydCB3ZWVrT2ZZZWFyIGZyb20gJ2RheWpzL3BsdWdpbi93ZWVrT2ZZZWFyJ1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgV2Vla0FsbERheVJvdyB9IGZyb20gJy4uL3dlZWstYWxsLWRheS1yb3cnXG5pbXBvcnQgeyBXZWVrSGVhZGVyIH0gZnJvbSAnLi4vd2Vlay1oZWFkZXInXG5pbXBvcnQgeyBXZWVrVGltZUdyaWQgfSBmcm9tICcuLi93ZWVrLXRpbWUtZ3JpZCdcbi8vIEFkZCB3ZWVrT2ZZZWFyIHBsdWdpbiB0byBkYXlqc1xuZGF5anMuZXh0ZW5kKHdlZWtPZlllYXIpXG5cbmNvbnN0IFdlZWtWaWV3OiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaC1mdWxsXCIgZGF0YS10ZXN0aWQ9XCJ3ZWVrLXZpZXdcIj5cbiAgICAgIHsvKiBXZWVrIGhlYWRlciByb3cgLSBmaXhlZCAqL31cbiAgICAgIDxXZWVrSGVhZGVyIGNsYXNzTmFtZT1cImgtWzVyZW1dXCIgLz5cblxuICAgICAgey8qIFNjcm9sbGFibGUgdGltZSBncmlkICovfVxuICAgICAgPFNjcm9sbEFyZWFcbiAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBvdmVyZmxvdy1hdXRvIGgtW2NhbGMoMTAwJS01cmVtKV1cIlxuICAgICAgICBkYXRhLXRlc3RpZD1cIndlZWstc2Nyb2xsLWFyZWFcIlxuICAgICAgPlxuICAgICAgICB7LyogQWxsLWRheSBldmVudHMgcm93IC0gZHluYW1pYyBoZWlnaHQgYmFzZWQgb24gY29udGVudCAqL31cbiAgICAgICAgPFdlZWtBbGxEYXlSb3cgLz5cbiAgICAgICAgPFdlZWtUaW1lR3JpZCAvPlxuICAgICAgPC9TY3JvbGxBcmVhPlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IFdlZWtWaWV3XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IERyYWdnYWJsZUV2ZW50IH0gZnJvbSAnLi4vZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudCdcbmltcG9ydCB7IERyb3BwYWJsZUNlbGwgfSBmcm9tICcuLi9kcm9wcGFibGUtY2VsbC9kcm9wcGFibGUtY2VsbCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCwgUHJvY2Vzc2VkQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IEVWRU5UX0JBUl9IRUlHSFQsIEdBUF9CRVRXRUVOX0VMRU1FTlRTIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuXG5leHBvcnQgY29uc3QgV2Vla0FsbERheVJvdzogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHsgY3VycmVudERhdGUsIGdldEV2ZW50c0ZvckRhdGVSYW5nZSwgZmlyc3REYXlPZldlZWsgfSA9XG4gICAgdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuICAvLyBHZXQgc3RhcnQgYW5kIGVuZCBvZiBjdXJyZW50IHdlZWsgYmFzZWQgb24gZmlyc3REYXlPZldlZWsgc2V0dGluZ1xuICBjb25zdCBzdGFydE9mV2VlayA9IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ3dlZWsnKS5kYXkoZmlyc3REYXlPZldlZWspXG4gIC8vIElmIGN1cnJlbnQgZGF0ZSBpcyBiZWZvcmUgdGhlIHN0YXJ0IG9mIHdlZWssIG1vdmUgYmFjayBvbmUgd2Vla1xuICBjb25zdCBhZGp1c3RlZFN0YXJ0T2ZXZWVrID0gY3VycmVudERhdGUuaXNCZWZvcmUoc3RhcnRPZldlZWspXG4gICAgPyBzdGFydE9mV2Vlay5zdWJ0cmFjdCgxLCAnd2VlaycpXG4gICAgOiBzdGFydE9mV2Vla1xuICBjb25zdCBlbmRPZldlZWsgPSBhZGp1c3RlZFN0YXJ0T2ZXZWVrLmFkZCg2LCAnZGF5JylcblxuICAvLyBDcmVhdGUgYW4gYXJyYXkgb2YgZGF5cyBmb3IgdGhlIGN1cnJlbnQgd2Vla1xuICBjb25zdCB3ZWVrRGF5cyA9IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgd2Vla0RheXMucHVzaChhZGp1c3RlZFN0YXJ0T2ZXZWVrLmFkZChpLCAnZGF5JykpXG4gIH1cblxuICAvLyBHZXQgZXZlbnRzIHRoYXQgbWlnaHQgb3ZlcmxhcCB3aXRoIHRoaXMgd2VlayAoZXhwYW5kIHNlYXJjaCByYW5nZSlcbiAgY29uc3QgZXhwYW5kZWRTdGFydERhdGUgPSBhZGp1c3RlZFN0YXJ0T2ZXZWVrLnN1YnRyYWN0KDYsICdkYXknKSAvLyBMb29rIDYgZGF5cyBiZWZvcmUgd2VlayBzdGFydFxuICBjb25zdCBleHBhbmRlZEVuZERhdGUgPSBlbmRPZldlZWsuYWRkKDYsICdkYXknKSAvLyBMb29rIDYgZGF5cyBhZnRlciB3ZWVrIGVuZFxuICBjb25zdCB3ZWVrRXZlbnRzID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKGV4cGFuZGVkU3RhcnREYXRlLCBleHBhbmRlZEVuZERhdGUpXG5cbiAgLy8gU2VwYXJhdGUgYWxsLWRheSBldmVudHMgZnJvbSByZWd1bGFyIGV2ZW50cyAoaW5jbHVkaW5nIG11bHRpLWRheSBldmVudHMpXG4gIGNvbnN0IGFsbERheUV2ZW50cyA9IHdlZWtFdmVudHMuZmlsdGVyKChldmVudCkgPT4gZXZlbnQuYWxsRGF5KVxuXG4gIC8vIFByb2Nlc3MgYW5kIGxheW91dCBhbGwtZGF5IGV2ZW50cyB0byBhdm9pZCBvdmVybGFwcGluZ1xuICBjb25zdCB7IHByb2Nlc3NlZEFsbERheUV2ZW50cyB9ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgLy8gU29ydCBhbGwtZGF5IGV2ZW50cyBieSBzdGFydCBkYXRlIGFuZCB0aGVuIGJ5IGR1cmF0aW9uIChsb25nZXIgZXZlbnRzIGZpcnN0KVxuICAgIGNvbnN0IHNvcnRlZEV2ZW50cyA9IFsuLi5hbGxEYXlFdmVudHNdLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIC8vIEZpcnN0IGNvbXBhcmUgYnkgc3RhcnQgZGF0ZVxuICAgICAgY29uc3Qgc3RhcnREaWZmID0gYS5zdGFydC5kaWZmKGIuc3RhcnQpXG4gICAgICBpZiAoc3RhcnREaWZmICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBzdGFydERpZmZcbiAgICAgIH1cblxuICAgICAgLy8gSWYgc3RhcnQgZGF0ZXMgYXJlIHRoZSBzYW1lLCBsb25nZXIgZXZlbnRzIGNvbWUgZmlyc3RcbiAgICAgIGNvbnN0IGFEdXJhdGlvbiA9IGEuZW5kLmRpZmYoYS5zdGFydClcbiAgICAgIGNvbnN0IGJEdXJhdGlvbiA9IGIuZW5kLmRpZmYoYi5zdGFydClcbiAgICAgIHJldHVybiBiRHVyYXRpb24gLSBhRHVyYXRpb25cbiAgICB9KVxuXG4gICAgLy8gVHJhY2sgcG9zaXRpb25zIGluIHJvd3NcbiAgICBjb25zdCByb3dzOiB7IGVuZDogZGF5anMuRGF5anM7IGV2ZW50OiBDYWxlbmRhckV2ZW50IH1bXVtdID0gW11cbiAgICBjb25zdCBwcm9jZXNzZWRFdmVudHM6IFByb2Nlc3NlZENhbGVuZGFyRXZlbnRbXSA9IFtdXG5cbiAgICBzb3J0ZWRFdmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgIC8vIENhbGN1bGF0ZSB3aGljaCBkYXlzIHRoaXMgZXZlbnQgc3BhbnNcbiAgICAgIGNvbnN0IGV2ZW50U3RhcnQgPSBldmVudC5zdGFydC5pc0JlZm9yZShhZGp1c3RlZFN0YXJ0T2ZXZWVrKVxuICAgICAgICA/IGFkanVzdGVkU3RhcnRPZldlZWtcbiAgICAgICAgOiBldmVudC5zdGFydFxuICAgICAgY29uc3QgZXZlbnRFbmQgPSBldmVudC5lbmQuaXNBZnRlcihlbmRPZldlZWspID8gZW5kT2ZXZWVrIDogZXZlbnQuZW5kXG5cbiAgICAgIC8vIENhbGN1bGF0ZSBwb3NpdGlvbiBhcyBwZXJjZW50YWdlIG9mIHRoZSB3ZWVrIHdpZHRoXG4gICAgICBjb25zdCBzdGFydERheUluZGV4ID0gTWF0aC5tYXgoXG4gICAgICAgIDAsXG4gICAgICAgIGV2ZW50U3RhcnQuZGlmZihhZGp1c3RlZFN0YXJ0T2ZXZWVrLCAnZGF5JylcbiAgICAgIClcbiAgICAgIGNvbnN0IGVuZERheUluZGV4ID0gTWF0aC5taW4oNiwgZXZlbnRFbmQuZGlmZihhZGp1c3RlZFN0YXJ0T2ZXZWVrLCAnZGF5JykpXG5cbiAgICAgIGNvbnN0IGxlZnQgPSAoc3RhcnREYXlJbmRleCAvIDcpICogMTAwXG4gICAgICBjb25zdCB3aWR0aCA9ICgoZW5kRGF5SW5kZXggLSBzdGFydERheUluZGV4ICsgMSkgLyA3KSAqIDEwMFxuXG4gICAgICAvLyBGaW5kIGEgcm93IHdoZXJlIHRoaXMgZXZlbnQgY2FuIGZpdFxuICAgICAgbGV0IHJvd0luZGV4ID0gMFxuICAgICAgbGV0IHBsYWNlZCA9IGZhbHNlXG5cbiAgICAgIHdoaWxlICghcGxhY2VkKSB7XG4gICAgICAgIGlmIChyb3dJbmRleCA+PSByb3dzLmxlbmd0aCkge1xuICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyByb3cgaWYgbmVlZGVkXG4gICAgICAgICAgcm93cy5wdXNoKFtdKVxuICAgICAgICAgIHBsYWNlZCA9IHRydWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGlzIGV2ZW50IGNhbiBmaXQgaW4gdGhlIGN1cnJlbnQgcm93XG4gICAgICAgICAgY29uc3Qgcm93ID0gcm93c1tyb3dJbmRleF1cbiAgICAgICAgICBjb25zdCBjYW5GaXQgPSByb3cuZXZlcnkoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIGV2ZW50U3RhcnQuaXNBZnRlcihpdGVtLmVuZCkgfHxcbiAgICAgICAgICAgICAgZXZlbnRFbmQuaXNCZWZvcmUoaXRlbS5ldmVudC5zdGFydClcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgaWYgKGNhbkZpdCkge1xuICAgICAgICAgICAgcGxhY2VkID0gdHJ1ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByb3dJbmRleCsrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBldmVudCB0byB0aGUgcm93XG4gICAgICByb3dzW3Jvd0luZGV4XS5wdXNoKHsgZW5kOiBldmVudEVuZCwgZXZlbnQgfSlcblxuICAgICAgLy8gQWRkIHByb2Nlc3NlZCBldmVudCB3aXRoIGNvcnJlY3QgcG9zaXRpb25pbmdcbiAgICAgIHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcbiAgICAgICAgLi4uZXZlbnQsXG4gICAgICAgIGxlZnQsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICB0b3A6IHJvd0luZGV4ICogKEVWRU5UX0JBUl9IRUlHSFQgKyBHQVBfQkVUV0VFTl9FTEVNRU5UUyksXG4gICAgICAgIGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcbiAgICAgICAgYWxsRGF5OiB0cnVlLFxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NlZEFsbERheUV2ZW50czogcHJvY2Vzc2VkRXZlbnRzLFxuICAgICAgYWxsRGF5Um93c0NvdW50OiBNYXRoLm1heCgxLCByb3dzLmxlbmd0aCksIC8vIEF0IGxlYXN0IDEgcm93LCBldmVuIGlmIGVtcHR5XG4gICAgfVxuICB9LCBbYWxsRGF5RXZlbnRzLCBhZGp1c3RlZFN0YXJ0T2ZXZWVrLCBlbmRPZldlZWtdKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtW2F1dG9fMWZyXzFmcl8xZnJfMWZyXzFmcl8xZnJfMWZyXSBncmlkLXJvd3MtMSByZWxhdGl2ZVwiXG4gICAgICBkYXRhLXRlc3RpZD1cIndlZWstYWxsLWRheS1yb3dcIlxuICAgID5cbiAgICAgIHsvKiBMZWZ0IGxhYmVsIGZvciBhbGwtZGF5IGV2ZW50cyAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0xNCBmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBib3JkZXIteCBib3JkZXItYiBwci0yIG1pbi1oLTE2XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LVsxMHB4XSB3aGl0ZXNwYWNlLW5vd3JhcCBzbTp0ZXh0LXhzXCI+XG4gICAgICAgICAgQWxsLWRheVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cblxuICAgICAgey8qIERyb3BwYWJsZSBjZWxscyBmb3IgZWFjaCBkYXkgKi99XG4gICAgICB7d2Vla0RheXMubWFwKChkYXkpID0+IChcbiAgICAgICAgPERyb3BwYWJsZUNlbGxcbiAgICAgICAgICBrZXk9e2BhbGwtZGF5LSR7ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfWB9XG4gICAgICAgICAgaWQ9e2BhbGwtZGF5LWNlbGwtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cbiAgICAgICAgICB0eXBlPVwiZGF5LWNlbGxcIlxuICAgICAgICAgIGRhdGU9e2RheX1cbiAgICAgICAgICBjbGFzc05hbWU9XCJob3ZlcjpiZy1hY2NlbnQgaC1mdWxsIGZsZXgtMSBjdXJzb3ItcG9pbnRlciBib3JkZXItciBib3JkZXItYlwiXG4gICAgICAgIC8+XG4gICAgICApKX1cblxuICAgICAgey8qIEFsbC1kYXkgZXZlbnQgYmxvY2tzICovfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMTAgcC0xIGNvbC1zcGFuLTcgY29sLXN0YXJ0LTJcIj5cbiAgICAgICAge3Byb2Nlc3NlZEFsbERheUV2ZW50cy5tYXAoKGV2ZW50LCBpbmRleCkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGtleT17YGFsbC1kYXktY29udGFpbmVyLSR7ZXZlbnQuaWR9YH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlXCJcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGxlZnQ6IGAke2V2ZW50LmxlZnR9JWAsXG4gICAgICAgICAgICAgIHdpZHRoOiBgY2FsYygke2V2ZW50LndpZHRofSUgLSB2YXIoLS1zcGFjaW5nKSAqIDIpYCxcbiAgICAgICAgICAgICAgdG9wOiBgJHtldmVudC50b3B9cHhgLFxuICAgICAgICAgICAgICBoZWlnaHQ6IGAke2V2ZW50LmhlaWdodH1weGAsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxEcmFnZ2FibGVFdmVudFxuICAgICAgICAgICAgICBlbGVtZW50SWQ9e2BhbGwtZGF5LSR7ZXZlbnQuaWR9LSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgZXZlbnQ9e2V2ZW50fVxuICAgICAgICAgICAgICBrZXk9e2BhbGwtZGF5LSR7ZXZlbnQuaWR9LSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC1mdWxsIHctZnVsbCBvdmVyZmxvdy1jbGlwIHRleHQteHMgYWJzb2x1dGVcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmludGVyZmFjZSBXZWVrSGVhZGVyUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IFdlZWtIZWFkZXI6IFJlYWN0LkZDPFdlZWtIZWFkZXJQcm9wcz4gPSAoeyBjbGFzc05hbWUgfSkgPT4ge1xuICBjb25zdCB7XG4gICAgY3VycmVudERhdGUsXG4gICAgY3VycmVudExvY2FsZSxcbiAgICBzZWxlY3REYXRlLFxuICAgIG9wZW5FdmVudEZvcm0sXG4gICAgZmlyc3REYXlPZldlZWssXG4gICAgc3RpY2t5Vmlld0hlYWRlcixcbiAgICB2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuICB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuICAvLyBHZXQgc3RhcnQgYW5kIGVuZCBvZiBjdXJyZW50IHdlZWsgYmFzZWQgb24gZmlyc3REYXlPZldlZWsgc2V0dGluZ1xuICBjb25zdCBzdGFydE9mV2VlayA9IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ3dlZWsnKS5kYXkoZmlyc3REYXlPZldlZWspXG4gIC8vIElmIGN1cnJlbnQgZGF0ZSBpcyBiZWZvcmUgdGhlIHN0YXJ0IG9mIHdlZWssIG1vdmUgYmFjayBvbmUgd2Vla1xuICBjb25zdCBhZGp1c3RlZFN0YXJ0T2ZXZWVrID0gY3VycmVudERhdGUuaXNCZWZvcmUoc3RhcnRPZldlZWspXG4gICAgPyBzdGFydE9mV2Vlay5zdWJ0cmFjdCgxLCAnd2VlaycpXG4gICAgOiBzdGFydE9mV2Vla1xuXG4gIC8vIENyZWF0ZSBhbiBhcnJheSBvZiBkYXlzIGZvciB0aGUgY3VycmVudCB3ZWVrXG4gIGNvbnN0IHdlZWtEYXlzID0gW11cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICB3ZWVrRGF5cy5wdXNoKGFkanVzdGVkU3RhcnRPZldlZWsuYWRkKGksICdkYXknKSlcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgLy8gY3NzIGdyaWQgaGVhZGVyIHdpdGggbGVmIGNvcm5lciBjZWxsIHNob3J0ZXIgdGhhbiB0aGUgcmVzdFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdncmlkIGdyaWQtY29scy1bYXV0b18xZnJfMWZyXzFmcl8xZnJfMWZyXzFmcl8xZnJdIGdyaWQtcm93cy0xJyxcbiAgICAgICAgc3RpY2t5Vmlld0hlYWRlciAmJiAnc3RpY2t5IHRvcC0wIHotMjAnLFxuICAgICAgICB2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICBkYXRhLXRlc3RpZD1cIndlZWstaGVhZGVyXCJcbiAgICA+XG4gICAgICB7LyogQ29ybmVyIGNlbGwgd2l0aCB3ZWVrIG51bWJlciAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLXNwYW4tMSB3LTE0IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXIteCBib3JkZXItYiBwLTJcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LXhzXCI+V2Vlazwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPntjdXJyZW50RGF0ZS53ZWVrKCl9PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7LyogRGF5IGhlYWRlciBjZWxscyAqL31cbiAgICAgIHt3ZWVrRGF5cy5tYXAoKGRheSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgaXNUb2RheSA9IGRheS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8QW5pbWF0ZVByZXNlbmNlIGtleT17ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgICAgPG1vdGlvbi5kaXZcbiAgICAgICAgICAgICAga2V5PXtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG4gICAgICAgICAgICAgIGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG4gICAgICAgICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuICAgICAgICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgICAgICB0cmFuc2l0aW9uPXt7XG4gICAgICAgICAgICAgICAgZHVyYXRpb246IDAuMjUsXG4gICAgICAgICAgICAgICAgZWFzZTogJ2Vhc2VJbk91dCcsXG4gICAgICAgICAgICAgICAgZGVsYXk6IGluZGV4ICogMC4wNSxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAnaG92ZXI6YmctYWNjZW50IGZsZXgtMSBjdXJzb3ItcG9pbnRlciBwLTEgdGV4dC1jZW50ZXIgc206cC0yIGJvcmRlci1yIGJvcmRlci1iJyxcbiAgICAgICAgICAgICAgICBpc1RvZGF5ICYmICdiZy1wcmltYXJ5LzEwIGZvbnQtYm9sZCdcbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgIHNlbGVjdERhdGUoZGF5KVxuICAgICAgICAgICAgICAgIG9wZW5FdmVudEZvcm0oZGF5KVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YHdlZWstZGF5LWhlYWRlci0ke2RheS5mb3JtYXQoJ2RkZGQnKS50b0xvd2VyQ2FzZSgpfWB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e2RheS5mb3JtYXQoJ2RkZCcpfTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICdteC1hdXRvIG10LTEgZmxleCBoLTUgdy01IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdGV4dC14cyBzbTpoLTcgc206dy03IHNtOnRleHQtc20nLFxuICAgICAgICAgICAgICAgICAgaXNUb2RheSAmJiAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCdcbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge0ludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwgeyBkYXk6ICdudW1lcmljJyB9KS5mb3JtYXQoXG4gICAgICAgICAgICAgICAgICBkYXkudG9EYXRlKClcbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbW90aW9uLmRpdj5cbiAgICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgICAgKVxuICAgICAgfSl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuXG5pbnRlcmZhY2UgUHJvY2Vzc2VkRXZlbnQgZXh0ZW5kcyBDYWxlbmRhckV2ZW50IHtcbiAgbGVmdDogbnVtYmVyIC8vIExlZnQgcG9zaXRpb24gaW4gcGVyY2VudGFnZVxuICB3aWR0aDogbnVtYmVyIC8vIFdpZHRoIGluIHBlcmNlbnRhZ2VcbiAgdG9wOiBudW1iZXIgLy8gVG9wIHBvc2l0aW9uIGluIHBlcmNlbnRhZ2VcbiAgaGVpZ2h0OiBudW1iZXIgLy8gSGVpZ2h0IGluIHBlcmNlbnRhZ2VcbiAgekluZGV4PzogbnVtYmVyIC8vIFotaW5kZXggZm9yIGxheWVyaW5nIG92ZXJsYXBwaW5nIGV2ZW50c1xufVxuXG5pbnRlcmZhY2UgVXNlUHJvY2Vzc2VkRGF5RXZlbnRzUHJvcHMge1xuICBkYXk6IGRheWpzLkRheWpzIC8vIFRoZSBzcGVjaWZpYyBkYXkgdGhpcyBjb2x1bW4gcmVwcmVzZW50c1xufVxuXG5leHBvcnQgY29uc3QgdXNlUHJvY2Vzc2VkRGF5RXZlbnRzID0gKHsgZGF5IH06IFVzZVByb2Nlc3NlZERheUV2ZW50c1Byb3BzKSA9PiB7XG4gIGNvbnN0IHsgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIGNvbnN0IHRvZGF5RXZlbnRzID0gdXNlTWVtbzxQcm9jZXNzZWRFdmVudFtdPigoKSA9PiB7XG4gICAgbGV0IGV2ZW50c0ZvckRheSA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZShcbiAgICAgIGRheS5zdGFydE9mKCdkYXknKSxcbiAgICAgIGRheS5lbmRPZignZGF5JylcbiAgICApXG5cbiAgICAvLyBGaWx0ZXIgb3V0IGFsbC1kYXkgZXZlbnRzIGFuZCBzb3J0IGJ5IHN0YXJ0IHRpbWVcbiAgICBldmVudHNGb3JEYXkgPSBldmVudHNGb3JEYXlcbiAgICAgIC5maWx0ZXIoKGUpID0+ICFlLmFsbERheSlcbiAgICAgIC50b1NvcnRlZCgoYSwgYikgPT4gYS5zdGFydC5kaWZmKGIuc3RhcnQpKVxuXG4gICAgaWYgKGV2ZW50c0ZvckRheS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cblxuICAgIC8vIFN0ZXAgMTogR3JvdXAgZXZlbnRzIGludG8gY2x1c3RlcnMgb2Ygb3ZlcmxhcHBpbmcgZXZlbnRzXG4gICAgY29uc3QgY2x1c3RlcnM6IENhbGVuZGFyRXZlbnRbXVtdID0gW11cbiAgICBsZXQgY3VycmVudENsdXN0ZXI6IENhbGVuZGFyRXZlbnRbXSA9IFtdXG4gICAgbGV0IGxhc3RFdmVudEVuZDogZGF5anMuRGF5anMgfCBudWxsID0gbnVsbFxuICAgIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzRm9yRGF5KSB7XG4gICAgICBpZiAobGFzdEV2ZW50RW5kICYmIGV2ZW50LnN0YXJ0LmlzU2FtZU9yQWZ0ZXIobGFzdEV2ZW50RW5kKSkge1xuICAgICAgICBpZiAoY3VycmVudENsdXN0ZXIubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNsdXN0ZXJzLnB1c2goY3VycmVudENsdXN0ZXIpXG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudENsdXN0ZXIgPSBbXVxuICAgICAgfVxuICAgICAgY3VycmVudENsdXN0ZXIucHVzaChldmVudClcbiAgICAgIGxhc3RFdmVudEVuZCA9IGxhc3RFdmVudEVuZFxuICAgICAgICA/IGRheWpzLm1heChsYXN0RXZlbnRFbmQsIGV2ZW50LmVuZClcbiAgICAgICAgOiBldmVudC5lbmRcbiAgICB9XG4gICAgaWYgKGN1cnJlbnRDbHVzdGVyLmxlbmd0aCA+IDApIHtcbiAgICAgIGNsdXN0ZXJzLnB1c2goY3VycmVudENsdXN0ZXIpXG4gICAgfVxuXG4gICAgLy8gU3RlcCAyOiBGb3IgZWFjaCBjbHVzdGVyLCB1c2UgYSBtb3JlIGludGVsbGlnZW50IGNvbHVtbiBhc3NpZ25tZW50XG4gICAgY29uc3QgcHJvY2Vzc2VkRXZlbnRzOiBQcm9jZXNzZWRFdmVudFtdID0gW11cbiAgICBmb3IgKGNvbnN0IGNsdXN0ZXIgb2YgY2x1c3RlcnMpIHtcbiAgICAgIGlmIChjbHVzdGVyLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAvLyBTaW5nbGUgZXZlbnQgdGFrZXMgZnVsbCB3aWR0aFxuICAgICAgICBjb25zdCBldmVudCA9IGNsdXN0ZXJbMF1cbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gZXZlbnQuc3RhcnQuaG91cigpICsgZXZlbnQuc3RhcnQubWludXRlKCkgLyA2MFxuICAgICAgICBsZXQgZW5kVGltZSA9IGV2ZW50LmVuZC5ob3VyKCkgKyBldmVudC5lbmQubWludXRlKCkgLyA2MFxuICAgICAgICBpZiAoZW5kVGltZSA8IHN0YXJ0VGltZSkge1xuICAgICAgICAgIC8vIElmIHRoZSBldmVudCBlbmRzIG9uIHRoZSBuZXh0IGRheSwgc2V0IGVuZCB0aW1lIHRvIDI0IGhvdXJzXG4gICAgICAgICAgZW5kVGltZSA9IDI0XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG90YWxEdXJhdGlvbiA9IGVuZFRpbWUgLSBzdGFydFRpbWVcbiAgICAgICAgY29uc3QgdG9wID0gKHN0YXJ0VGltZSAvIDI0KSAqIDEwMFxuICAgICAgICBjb25zdCBoZWlnaHQgPSAodG90YWxEdXJhdGlvbiAvIDI0KSAqIDEwMFxuICAgICAgICBwcm9jZXNzZWRFdmVudHMucHVzaCh7IC4uLmV2ZW50LCBsZWZ0OiAwLCB3aWR0aDogMTAwLCB0b3AsIGhlaWdodCB9KVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyBNdWx0aXBsZSBldmVudHMgLSB1c2UgbGF5ZXJlZCBwb3NpdGlvbmluZyBhcHByb2FjaFxuICAgICAgLy8gU29ydCBieSBkdXJhdGlvbiAobG9uZ2VzdCBmaXJzdCksIHRoZW4gYnkgc3RhcnQgdGltZVxuICAgICAgY29uc3Qgc29ydGVkRXZlbnRzID0gWy4uLmNsdXN0ZXJdLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgY29uc3QgYUR1cmF0aW9uID0gYS5lbmQuZGlmZihhLnN0YXJ0LCAnbWludXRlJylcbiAgICAgICAgY29uc3QgYkR1cmF0aW9uID0gYi5lbmQuZGlmZihiLnN0YXJ0LCAnbWludXRlJylcblxuICAgICAgICAvLyBMb25nZXIgZXZlbnRzIGZpcnN0XG4gICAgICAgIGlmIChhRHVyYXRpb24gIT09IGJEdXJhdGlvbikge1xuICAgICAgICAgIHJldHVybiBiRHVyYXRpb24gLSBhRHVyYXRpb25cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHNhbWUgZHVyYXRpb24sIGVhcmxpZXIgc3RhcnQgdGltZSBmaXJzdFxuICAgICAgICByZXR1cm4gYS5zdGFydC5kaWZmKGIuc3RhcnQpXG4gICAgICB9KVxuXG4gICAgICAvLyBQcm9jZXNzIGV2ZW50cyB3aXRoIGxheWVyZWQgcG9zaXRpb25pbmdcbiAgICAgIGNvbnN0IHRvdGFsRXZlbnRzID0gc29ydGVkRXZlbnRzLmxlbmd0aFxuXG4gICAgICAvLyBDYWxjdWxhdGUgZHluYW1pYyBvZmZzZXQgYmFzZWQgb24gbnVtYmVyIG9mIG92ZXJsYXBwaW5nIGV2ZW50c1xuICAgICAgLy8gRmV3ZXIgZXZlbnRzID0gbGFyZ2VyIGluZGl2aWR1YWwgb2Zmc2V0cywgbW9yZSBldmVudHMgPSBzbWFsbGVyIG9mZnNldHNcbiAgICAgIGxldCBtYXhPZmZzZXQ6IG51bWJlclxuICAgICAgaWYgKHRvdGFsRXZlbnRzID09PSAyKSB7XG4gICAgICAgIG1heE9mZnNldCA9IDI1IC8vIDI1JSBvZmZzZXQgZm9yIDIgZXZlbnRzXG4gICAgICB9IGVsc2UgaWYgKHRvdGFsRXZlbnRzID09PSAzKSB7XG4gICAgICAgIG1heE9mZnNldCA9IDUwIC8vIDUwJSB0b3RhbCBmb3IgMyBldmVudHMgKDI1JSBlYWNoKVxuICAgICAgfSBlbHNlIGlmICh0b3RhbEV2ZW50cyA9PT0gNCkge1xuICAgICAgICBtYXhPZmZzZXQgPSA2MCAvLyA2MCUgdG90YWwgZm9yIDQgZXZlbnRzICgyMCUgZWFjaClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1heE9mZnNldCA9IDcwIC8vIDcwJSB0b3RhbCBmb3IgNSsgZXZlbnRzXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9mZnNldFBlckV2ZW50ID0gdG90YWxFdmVudHMgPiAxID8gbWF4T2Zmc2V0IC8gKHRvdGFsRXZlbnRzIC0gMSkgOiAwXG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc29ydGVkRXZlbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gc29ydGVkRXZlbnRzW2ldXG4gICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IGV2ZW50LnN0YXJ0LmhvdXIoKSArIGV2ZW50LnN0YXJ0Lm1pbnV0ZSgpIC8gNjBcbiAgICAgICAgbGV0IGVuZFRpbWUgPSBldmVudC5lbmQuaG91cigpICsgZXZlbnQuZW5kLm1pbnV0ZSgpIC8gNjBcblxuICAgICAgICBpZiAoZW5kVGltZSA8IHN0YXJ0VGltZSkge1xuICAgICAgICAgIC8vIElmIHRoZSBldmVudCBlbmRzIG9uIHRoZSBuZXh0IGRheSwgc2V0IGVuZCB0aW1lIHRvIDI0IGhvdXJzXG4gICAgICAgICAgZW5kVGltZSA9IDI0XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0b3RhbER1cmF0aW9uID0gZW5kVGltZSAtIHN0YXJ0VGltZVxuICAgICAgICBjb25zdCB0b3AgPSAoc3RhcnRUaW1lIC8gMjQpICogMTAwXG4gICAgICAgIGNvbnN0IGhlaWdodCA9ICh0b3RhbER1cmF0aW9uIC8gMjQpICogMTAwXG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIHBvc2l0aW9uaW5nIGJhc2VkIG9uIGxheWVyIGFuZCB0b3RhbCBldmVudHNcbiAgICAgICAgbGV0IGxlZnQ6IG51bWJlclxuICAgICAgICBsZXQgd2lkdGg6IG51bWJlclxuICAgICAgICBsZXQgekluZGV4OiBudW1iZXJcblxuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgIC8vIEZpcnN0IGV2ZW50IChsb25nZXN0KSB0YWtlcyBmdWxsIHdpZHRoIGF0IGJvdHRvbVxuICAgICAgICAgIGxlZnQgPSAwXG4gICAgICAgICAgd2lkdGggPSAxMDBcbiAgICAgICAgICB6SW5kZXggPSAxXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU3Vic2VxdWVudCBldmVudHMgYXJlIG9mZnNldCBkeW5hbWljYWxseSBiYXNlZCBvbiB0b3RhbCBldmVudCBjb3VudFxuICAgICAgICAgIGxlZnQgPSBvZmZzZXRQZXJFdmVudCAqIGlcbiAgICAgICAgICB3aWR0aCA9IDEwMCAtIGxlZnQgLy8gUmVtYWluaW5nIHdpZHRoXG4gICAgICAgICAgekluZGV4ID0gaSArIDEgLy8gSGlnaGVyIHotaW5kZXggZm9yIGV2ZW50cyBvbiB0b3BcbiAgICAgICAgfVxuXG4gICAgICAgIHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcbiAgICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgICBsZWZ0LFxuICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgIHRvcCxcbiAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgekluZGV4LFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcm9jZXNzZWRFdmVudHNcbiAgfSwgW2RheSwgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlXSlcblxuICByZXR1cm4gdG9kYXlFdmVudHNcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlUHJvY2Vzc2VkRGF5RXZlbnRzIH0gZnJvbSAnQC9ob29rcy91c2VQcm9jZXNzZWREYXlFdmVudHMnXG5pbXBvcnQgeyBEcmFnZ2FibGVFdmVudCB9IGZyb20gJy4uLy4uL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgRGF5RXZlbnRzTGF5ZXJQcm9wcyB7XG4gIGRheTogZGF5anMuRGF5anMgLy8gVGhlIHNwZWNpZmljIGRheSB0aGlzIGxheWVyIHJlcHJlc2VudHNcbiAgJ2RhdGEtdGVzdGlkJz86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgRGF5RXZlbnRzTGF5ZXI6IFJlYWN0LkZDPERheUV2ZW50c0xheWVyUHJvcHM+ID0gKHtcbiAgZGF5LFxuICAnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxufSkgPT4ge1xuICBjb25zdCB0b2RheUV2ZW50cyA9IHVzZVByb2Nlc3NlZERheUV2ZW50cyh7IGRheSB9KVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWR9XG4gICAgICBjbGFzc05hbWU9XCJwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIGluc2V0LTAgei0xMFwiXG4gICAgPlxuICAgICAge3RvZGF5RXZlbnRzLm1hcCgoZXZlbnQsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHZlcnlWZXJ5VW5pcXVlS2V5ID0gYGV2ZW50LSR7ZXZlbnQuaWR9LSR7aW5kZXh9LSR7ZGF5LmZvcm1hdChcbiAgICAgICAgICAnWVlZWS1NTS1ERCdcbiAgICAgICAgKX1gXG4gICAgICAgIGNvbnN0IGlzU2hvcnRFdmVudCA9IGV2ZW50LmVuZC5kaWZmKGV2ZW50LnN0YXJ0LCAnbWludXRlJykgPD0gMTVcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBrZXk9e2Bjb250YWluZXItJHt2ZXJ5VmVyeVVuaXF1ZUtleX1gfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGVcIlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgbGVmdDogYCR7ZXZlbnQubGVmdH0lYCxcbiAgICAgICAgICAgICAgd2lkdGg6IGBjYWxjKCR7ZXZlbnQud2lkdGh9JSAtIHZhcigtLXNwYWNpbmcpICogMilgLFxuICAgICAgICAgICAgICB0b3A6IGAke2V2ZW50LnRvcH0lYCxcbiAgICAgICAgICAgICAgaGVpZ2h0OiBgJHtldmVudC5oZWlnaHR9JWAsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxEcmFnZ2FibGVFdmVudFxuICAgICAgICAgICAgICBlbGVtZW50SWQ9e2BkcmFnZ2FibGUtJHt2ZXJ5VmVyeVVuaXF1ZUtleX1gfVxuICAgICAgICAgICAgICBldmVudD17ZXZlbnR9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oJ3BvaW50ZXItZXZlbnRzLWF1dG8gYWJzb2x1dGUnLCB7XG4gICAgICAgICAgICAgICAgJ1smX3BdOnRleHQtWzEwcHhdIFsmX3BdOm10LTAnOiBpc1Nob3J0RXZlbnQsXG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKVxuICAgICAgfSl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBEYXlFdmVudHNMYXllciB9IGZyb20gJy4uL2RheS12aWV3L2NvbXBvbmVudHMvZGF5LWV2ZW50cy1sYXllcidcbmltcG9ydCB7IERyb3BwYWJsZUNlbGwgfSBmcm9tICcuLi9kcm9wcGFibGUtY2VsbC9kcm9wcGFibGUtY2VsbCdcblxuY29uc3QgaG91cnMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAyNCB9LCAoXywgaSkgPT4gaSkubWFwKChob3VyKSA9PlxuICBkYXlqcygpLmhvdXIoaG91cikubWludXRlKDApXG4pXG5cbmludGVyZmFjZSBXZWVrRGF5Q29sUHJvcHMge1xuICBkYXk6IGRheWpzLkRheWpzIC8vIFRoZSBzcGVjaWZpYyBkYXkgdGhpcyBjb2x1bW4gcmVwcmVzZW50c1xufVxuXG5leHBvcnQgY29uc3QgV2Vla0RheUNvbDogUmVhY3QuRkM8V2Vla0RheUNvbFByb3BzPiA9ICh7IGRheSB9KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS10ZXN0aWQ9e2B3ZWVrLWRheS1jb2wtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cbiAgICAgIGNsYXNzTmFtZT1cImNvbC1zcGFuLTEgcmVsYXRpdmUgZ3JpZCBncmlkLXJvd3MtMjQgYm9yZGVyLXJcIlxuICAgID5cbiAgICAgIHtob3Vycy5tYXAoKHRpbWUpID0+IHtcbiAgICAgICAgY29uc3QgaG91ciA9IHRpbWUuaG91cigpXG4gICAgICAgIGNvbnN0IGNlbGxEYXRlID0gZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpXG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8RHJvcHBhYmxlQ2VsbFxuICAgICAgICAgICAga2V5PXtgJHtjZWxsRGF0ZX0tJHt0aW1lLmZvcm1hdCgnSEgnKX1gfVxuICAgICAgICAgICAgaWQ9e2B0aW1lLWNlbGwtJHtjZWxsRGF0ZX0tJHt0aW1lLmZvcm1hdCgnSEgnKX1gfVxuICAgICAgICAgICAgdHlwZT1cInRpbWUtY2VsbFwiXG4gICAgICAgICAgICBkYXRlPXtkYXl9XG4gICAgICAgICAgICBob3VyPXtob3VyfVxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2B3ZWVrLXRpbWUtY2VsbC0ke2NlbGxEYXRlfS0ke3RpbWUuZm9ybWF0KCdISCcpfWB9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAnaG92ZXI6YmctYWNjZW50IHJlbGF0aXZlIHotMTAgaC1bNjBweF0gY3Vyc29yLXBvaW50ZXIgYm9yZGVyLWInXG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgIClcbiAgICAgIH0pfVxuXG4gICAgICB7LyogRXZlbnQgYmxvY2tzIGxheWVyICovfVxuICAgICAgPERheUV2ZW50c0xheWVyXG4gICAgICAgIGRhdGEtdGVzdGlkPXtgd2Vlay1kYXktZXZlbnRzLSR7ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfWB9XG4gICAgICAgIGRheT17ZGF5fVxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBXZWVrRGF5Q29sIH0gZnJvbSAnLi93ZWVrLWRheS1jb2wnXG5cbmNvbnN0IGhvdXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMjQgfSwgKF8sIGkpID0+IGkpLm1hcCgoaG91cikgPT5cbiAgZGF5anMoKS5ob3VyKGhvdXIpLm1pbnV0ZSgwKVxuKVxuXG5leHBvcnQgY29uc3QgV2Vla1RpbWVHcmlkOiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWssIGN1cnJlbnRMb2NhbGUgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgLy8gR2V0IHN0YXJ0IGFuZCBlbmQgb2YgY3VycmVudCB3ZWVrIGJhc2VkIG9uIGZpcnN0RGF5T2ZXZWVrIHNldHRpbmdcbiAgY29uc3Qgc3RhcnRPZldlZWsgPSBjdXJyZW50RGF0ZS5zdGFydE9mKCd3ZWVrJykuZGF5KGZpcnN0RGF5T2ZXZWVrKVxuICAvLyBJZiBjdXJyZW50IGRhdGUgaXMgYmVmb3JlIHRoZSBzdGFydCBvZiB3ZWVrLCBtb3ZlIGJhY2sgb25lIHdlZWtcbiAgY29uc3QgYWRqdXN0ZWRTdGFydE9mV2VlayA9IGN1cnJlbnREYXRlLmlzQmVmb3JlKHN0YXJ0T2ZXZWVrKVxuICAgID8gc3RhcnRPZldlZWsuc3VidHJhY3QoMSwgJ3dlZWsnKVxuICAgIDogc3RhcnRPZldlZWtcblxuICAvLyBDcmVhdGUgYW4gYXJyYXkgb2YgZGF5cyBmb3IgdGhlIGN1cnJlbnQgd2Vla1xuICBjb25zdCB3ZWVrRGF5cyA9IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgd2Vla0RheXMucHVzaChhZGp1c3RlZFN0YXJ0T2ZXZWVrLmFkZChpLCAnZGF5JykpXG4gIH1cblxuICAvLyBTZXBhcmF0ZSBhbGwtZGF5IGV2ZW50cyBmcm9tIHJlZ3VsYXIgZXZlbnRzIChpbmNsdWRpbmcgbXVsdGktZGF5IGV2ZW50cylcblxuICAvLyBGaW5kIGlmIGN1cnJlbnQgZGF5IGlzIGluIHRoZSBkaXNwbGF5ZWQgd2Vla1xuICBjb25zdCB0b2RheUluZGV4ID0gd2Vla0RheXMuZmluZEluZGV4KChkYXkpID0+IGRheS5pc1NhbWUoZGF5anMoKSwgJ2RheScpKVxuICBjb25zdCBpc0N1cnJlbnRXZWVrID0gdG9kYXlJbmRleCAhPT0gLTFcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtdGVzdGlkPVwid2Vlay10aW1lLWdyaWRcIlxuICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgaC1mdWxsIGdyaWQgZ3JpZC1jb2xzLVthdXRvX3JlcGVhdCg3LDFmcildIGdyaWQtcm93cy1bcmVwZWF0KDI0LG1pbm1heCg2MHB4LCAxZnIpKV1cIlxuICAgID5cbiAgICAgIHsvKiBUaW1lIGxhYmVscyBjb2x1bW4gLSBmaXhlZCAqL31cbiAgICAgIDxkaXZcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJ3ZWVrLXRpbWUtbGFiZWxzXCJcbiAgICAgICAgY2xhc3NOYW1lPVwiei0xMCBjb2wtc3Bhbi0xIHctMTQgZ3JpZCBncmlkLXJvd3MtMjQgYm9yZGVyLXhcIlxuICAgICAgPlxuICAgICAgICB7aG91cnMubWFwKCh0aW1lKSA9PiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAga2V5PXt0aW1lLmZvcm1hdCgnSEg6bW0nKX1cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgd2Vlay10aW1lLWhvdXItJHt0aW1lLmZvcm1hdCgnSEgnKX1gfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC1bNjBweF0gYm9yZGVyLWIgdGV4dC1yaWdodFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHByLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzXCI+XG4gICAgICAgICAgICAgIHtJbnRsLkRhdGVUaW1lRm9ybWF0KGN1cnJlbnRMb2NhbGUsIHtcbiAgICAgICAgICAgICAgICBob3VyOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgbWludXRlOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgaG91cjEyOiB0cnVlLFxuICAgICAgICAgICAgICB9KS5mb3JtYXQodGltZS50b0RhdGUoKSl9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkpfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIHsvKiBEYXkgY29sdW1ucyB3aXRoIHRpbWUgc2xvdHMgKi99XG4gICAgICB7d2Vla0RheXMubWFwKChkYXkpID0+IChcbiAgICAgICAgPFdlZWtEYXlDb2wga2V5PXtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9IGRheT17ZGF5fSAvPlxuICAgICAgKSl9XG5cbiAgICAgIHsvKiBDdXJyZW50IHRpbWUgaW5kaWNhdG9yICovfVxuICAgICAge2lzQ3VycmVudFdlZWsgJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJ3ZWVrLWN1cnJlbnQtdGltZS1pbmRpY2F0b3JcIlxuICAgICAgICAgIGNsYXNzTmFtZT1cInBvaW50ZXItZXZlbnRzLW5vbmUgYWJzb2x1dGUgei00MFwiXG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIHRvcDogYCR7KGRheWpzKCkuaG91cigpICsgZGF5anMoKS5taW51dGUoKSAvIDYwKSAqIDYwfXB4YCxcbiAgICAgICAgICAgIGxlZnQ6IGAke3RvZGF5SW5kZXggKiAoMTAwIC8gNyl9JWAsXG4gICAgICAgICAgICB3aWR0aDogYCR7MTAwIC8gN30lYCxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgYm9yZGVyLXQgYm9yZGVyLXJlZC01MDBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiLW10LTEgbWwtMSBoLTIgdy0yIHJvdW5kZWQtZnVsbCBiZy1yZWQtNTAwXCI+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyBTY3JvbGxBcmVhIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IEZyYWdtZW50IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBEcm9wcGFibGVDZWxsIH0gZnJvbSAnQC9mZWF0dXJlcy9kcm9wcGFibGUtY2VsbC9kcm9wcGFibGUtY2VsbCdcbmltcG9ydCB7IERheUFsbERheVJvdyB9IGZyb20gJy4uL2RheS1hbGwtZGF5LXJvdydcbmltcG9ydCB7IERheUV2ZW50c0xheWVyIH0gZnJvbSAnLi4vZGF5LWV2ZW50cy1sYXllcidcbmltcG9ydCB7IERheUhlYWRlciB9IGZyb20gJy4uL2RheS1oZWFkZXInXG5pbXBvcnQgeyBEYXlUaW1lQ29sIH0gZnJvbSAnLi4vZGF5LXRpbWUtY29sJ1xuXG4vLyBGb3IgbW9yZSBncmFudWxhciB0aW1lIHNsb3RzLCB3ZSdsbCBkaXZpZGUgZWFjaCBob3VyIGludG8gMTUtbWludXRlIHNlZ21lbnRzXG5jb25zdCB0aW1lU2VnbWVudHMgPSBbMCwgMTUsIDMwLCA0NV1cblxuLy8gSG91cnMgdG8gZGlzcGxheSAoYWxsIDI0IGhvdXJzIG9mIHRoZSBkYXkpXG5jb25zdCBob3VycyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDI0IH0sIChfLCBpKSA9PiBpKS5tYXAoKGhvdXIpID0+IHtcbiAgcmV0dXJuIGRheWpzKCkuaG91cihob3VyKS5taW51dGUoMClcbn0pXG5cbmNvbnN0IERheVZpZXcgPSAoKSA9PiB7XG4gIGNvbnN0IHsgY3VycmVudERhdGUgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgY29uc3QgaXNUb2RheSA9IGN1cnJlbnREYXRlLmlzU2FtZShkYXlqcygpLCAnZGF5JylcbiAgY29uc3QgY2VsbERhdGUgPSBjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBkYXRhLXRlc3RpZD1cImRheS12aWV3XCIgY2xhc3NOYW1lPVwiZmxleCBoLWZ1bGwgZmxleC1jb2xcIj5cbiAgICAgIHsvKiBEYXkgaGVhZGVyICovfVxuICAgICAgPERheUhlYWRlciBjbGFzc05hbWU9XCJoLVszcmVtXVwiIC8+XG5cbiAgICAgIHsvKiBUaW1lIGdyaWQgd2l0aG91dCBzY3JvbGxiYXIgKi99XG4gICAgICA8U2Nyb2xsQXJlYVxuICAgICAgICBkYXRhLXRlc3RpZD1cImRheS1zY3JvbGwtYXJlYVwiXG4gICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIG92ZXJmbG93LXktYXV0byBoLVtjYWxjKDEwMCUtM3JlbSldXCJcbiAgICAgID5cbiAgICAgICAgey8qIEFsbC1kYXkgZXZlbnRzIHJvdyAqL31cbiAgICAgICAgPERheUFsbERheVJvdyAvPlxuXG4gICAgICAgIHsvKiBTZXQgYSBmaXhlZCBoZWlnaHQgY29udGFpbmVyIHRoYXQgbWF0Y2hlcyBleGFjdGx5IHRoZSB0b3RhbCBoZWlnaHQgb2YgYWxsIGhvdXIgYmxvY2tzICovfVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJkYXktdGltZS1ncmlkXCJcbiAgICAgICAgICBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy04IGRpdmlkZS14IGJvcmRlci14XCJcbiAgICAgICAgICBzdHlsZT17eyBoZWlnaHQ6IGAke2hvdXJzLmxlbmd0aCAqIDYwfXB4YCB9fVxuICAgICAgICA+XG4gICAgICAgICAgey8qIFRpbWUgbGFiZWxzIGNvbHVtbiAqL31cbiAgICAgICAgICA8RGF5VGltZUNvbCBjbGFzc05hbWU9XCJjb2wtc3Bhbi0yIGgtZnVsbCBtZDpjb2wtc3Bhbi0xXCIgLz5cblxuICAgICAgICAgIHsvKiBEYXkgY29sdW1uIHdpdGggZXZlbnRzICovfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZGF5LWV2ZW50cy1jb2x1bW5cIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgY29sLXNwYW4tNiBoLWZ1bGwgbWQ6Y29sLXNwYW4tN1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgey8qIEJhY2tncm91bmQgZ3JpZCBmb3IgdGltZSBzbG90cyAtIGxvd2VzdCBsYXllciAqL31cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJkYXktYmFja2dyb3VuZC1ncmlkXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMCB6LTBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7aG91cnMubWFwKChob3VyLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGtleT17YGJnLSR7Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9LSR7aG91ci5mb3JtYXQoXG4gICAgICAgICAgICAgICAgICAgICdISCdcbiAgICAgICAgICAgICAgICAgICl9YH1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtWzYwcHhdIGJvcmRlci1iXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7LyogMTUtbWludXRlIG1hcmtlciBsaW5lcyAqL31cbiAgICAgICAgICAgICAgICAgIHt0aW1lU2VnbWVudHMuc2xpY2UoMSkubWFwKChtaW51dGVzKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBrZXk9e2BiZy0ke2hvdXIuZm9ybWF0KCdISCcpfS0ke21pbnV0ZXN9YH1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJib3JkZXItYm9yZGVyIGFic29sdXRlIHctZnVsbCBib3JkZXItdCBib3JkZXItZGFzaGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyB0b3A6IGAke2luZGV4ICogNjAgKyBtaW51dGVzfXB4YCB9fVxuICAgICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIEludGVyYWN0aXZlIGxheWVyIGZvciB0aW1lIHNsb3RzIC0gbWlkZGxlIGxheWVyIHdpdGggbm8gYm9yZGVycyAqL31cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJkYXktaW50ZXJhY3RpdmUtbGF5ZXJcIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJwb2ludGVyLWV2ZW50cy1hdXRvIGFic29sdXRlIGluc2V0LTAgei0xMFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtob3Vycy5tYXAoKHRpbWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBob3VyID0gdGltZS5ob3VyKClcblxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8RnJhZ21lbnQga2V5PXtgJHtjZWxsRGF0ZX0tJHt0aW1lLmZvcm1hdCgnSEgnKX1gfT5cbiAgICAgICAgICAgICAgICAgICAgPERyb3BwYWJsZUNlbGxcbiAgICAgICAgICAgICAgICAgICAgICBpZD17YHRpbWUtY2VsbC0ke2NlbGxEYXRlfS0ke3RpbWUuZm9ybWF0KCdISCcpfS0wMGB9XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRpbWUtY2VsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgZGF0ZT17Y3VycmVudERhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgaG91cj17aG91cn1cbiAgICAgICAgICAgICAgICAgICAgICBtaW51dGU9ezB9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbignaG92ZXI6YmctYWNjZW50IGgtWzE1cHhdIGN1cnNvci1wb2ludGVyJyl9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxEcm9wcGFibGVDZWxsXG4gICAgICAgICAgICAgICAgICAgICAgaWQ9e2B0aW1lLWNlbGwtJHtjZWxsRGF0ZX0tJHt0aW1lLmZvcm1hdCgnSEgnKX0tMTVgfVxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0aW1lLWNlbGxcIlxuICAgICAgICAgICAgICAgICAgICAgIGRhdGU9e2N1cnJlbnREYXRlfVxuICAgICAgICAgICAgICAgICAgICAgIGhvdXI9e2hvdXJ9XG4gICAgICAgICAgICAgICAgICAgICAgbWludXRlPXsxNX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJob3ZlcjpiZy1hY2NlbnQgaC1bMTVweF0gY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8RHJvcHBhYmxlQ2VsbFxuICAgICAgICAgICAgICAgICAgICAgIGlkPXtgdGltZS1jZWxsLSR7Y2VsbERhdGV9LSR7dGltZS5mb3JtYXQoJ0hIJyl9LTMwYH1cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGltZS1jZWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRlPXtjdXJyZW50RGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICBob3VyPXtob3VyfVxuICAgICAgICAgICAgICAgICAgICAgIG1pbnV0ZT17MzB9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaG92ZXI6YmctYWNjZW50IGgtWzE1cHhdIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPERyb3BwYWJsZUNlbGxcbiAgICAgICAgICAgICAgICAgICAgICBpZD17YHRpbWUtY2VsbC0ke2NlbGxEYXRlfS0ke3RpbWUuZm9ybWF0KCdISCcpfS00NWB9XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRpbWUtY2VsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgZGF0ZT17Y3VycmVudERhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgaG91cj17aG91cn1cbiAgICAgICAgICAgICAgICAgICAgICBtaW51dGU9ezQ1fVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImhvdmVyOmJnLWFjY2VudCBoLVsxNXB4XSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIEV2ZW50cyBsYXllciAtIG1pZGRsZS10b3AgbGF5ZXIgKi99XG4gICAgICAgICAgICA8RGF5RXZlbnRzTGF5ZXIgZGF5PXtjdXJyZW50RGF0ZX0gLz5cblxuICAgICAgICAgICAgey8qIEN1cnJlbnQgdGltZSBpbmRpY2F0b3IgLSB0b3AgbGF5ZXIgKi99XG4gICAgICAgICAgICB7aXNUb2RheSAmJiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImRheS1jdXJyZW50LXRpbWUtaW5kaWNhdG9yXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSByaWdodC0wIGxlZnQtMCB6LTQwIGJvcmRlci10IGJvcmRlci1yZWQtNTAwXCJcbiAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgdG9wOiBgJHsoZGF5anMoKS5ob3VyKCkgKyBkYXlqcygpLm1pbnV0ZSgpIC8gNjApICogNjB9cHhgLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIi1tdC0xIC1tbC0xIGgtMiB3LTIgcm91bmRlZC1mdWxsIGJnLXJlZC01MDBcIj48L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvU2Nyb2xsQXJlYT5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBEYXlWaWV3XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICcuLi8uLi9kcmFnZ2FibGUtZXZlbnQvZHJhZ2dhYmxlLWV2ZW50J1xuaW1wb3J0IHsgRHJvcHBhYmxlQ2VsbCB9IGZyb20gJy4uLy4uL2Ryb3BwYWJsZS1jZWxsL2Ryb3BwYWJsZS1jZWxsJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50LCBQcm9jZXNzZWRDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgRVZFTlRfQkFSX0hFSUdIVCB9IGZyb20gJ0AvbGliL2NvbnN0YW50cydcblxuZXhwb3J0IGNvbnN0IERheUFsbERheVJvdyA9ICgpID0+IHtcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIC8vIEdldCBjdXJyZW50IGRheSdzIGV2ZW50cyAtIHRoaXMgd2lsbCByZWZyZXNoIGF1dG9tYXRpY2FsbHkgd2hlbiBzdG9yZSB1cGRhdGVzXG4gIC8vIGJlY2F1c2UgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlIGlzIGEgc2VsZWN0b3IgZnVuY3Rpb24gZnJvbSB0aGUgc3RvcmUgdGhhdCBydW5zIHdoZW5ldmVyIGV2ZW50cyBjaGFuZ2VcbiAgY29uc3QgZGF5RXZlbnRzID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKFxuICAgIGN1cnJlbnREYXRlLnN0YXJ0T2YoJ2RheScpLFxuICAgIGN1cnJlbnREYXRlLmVuZE9mKCdkYXknKVxuICApXG5cbiAgLy8gU2VwYXJhdGUgYWxsLWRheSBldmVudHMgZnJvbSByZWd1bGFyIGV2ZW50c1xuICBjb25zdCB7IGFsbERheUV2ZW50cyB9ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgLy8gT25seSBldmVudHMgZXhwbGljaXRseSBtYXJrZWQgYXMgYWxsRGF5IHNob3VsZCBiZSBpbiB0aGUgYWxsLWRheSBzZWN0aW9uXG4gICAgY29uc3QgYWxsRGF5RXZ0cyA9IGRheUV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC5hbGxEYXkpXG5cbiAgICAvLyBSZWd1bGFyIGV2ZW50cyAoaW5jbHVkaW5nIG11bHRpLWRheSBldmVudHMpXG4gICAgY29uc3QgcmVndWxhckV2dHMgPSBkYXlFdmVudHMuZmlsdGVyKChldmVudCkgPT4gIWV2ZW50LmFsbERheSlcblxuICAgIHJldHVybiB7IGFsbERheUV2ZW50czogYWxsRGF5RXZ0cywgcmVndWxhckV2ZW50czogcmVndWxhckV2dHMgfVxuICB9LCBbZGF5RXZlbnRzXSkgLy8gT25seSBkZXBlbmQgb24gdGhlIGRheUV2ZW50cyB3aGljaCBpcyByZWZyZXNoZWQgYXV0b21hdGljYWxseVxuXG4gIC8vIFByb2Nlc3MgYWxsLWRheSBldmVudHMgZm9yIGRpc3BsYXlcbiAgY29uc3QgeyBwcm9jZXNzZWRBbGxEYXlFdmVudHMgfSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIC8vIFNvcnQgYWxsLWRheSBldmVudHMgKGlmIG5lZWRlZClcbiAgICBjb25zdCBzb3J0ZWRFdmVudHMgPSBbLi4uYWxsRGF5RXZlbnRzXS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICByZXR1cm4gYS5zdGFydC5kaWZmKGIuc3RhcnQpXG4gICAgfSlcblxuICAgIC8vIFRyYWNrIHBvc2l0aW9ucyBpbiByb3dzIGZvciBzdGFja2luZ1xuICAgIGNvbnN0IHJvd3M6IHsgZXZlbnQ6IENhbGVuZGFyRXZlbnQgfVtdW10gPSBbXVxuICAgIGNvbnN0IHByb2Nlc3NlZEV2ZW50czogUHJvY2Vzc2VkQ2FsZW5kYXJFdmVudFtdID0gW11cblxuICAgIHNvcnRlZEV2ZW50cy5mb3JFYWNoKChldmVudCwgcm93SW5kZXgpID0+IHtcbiAgICAgIGxldCBwbGFjZWQgPSBmYWxzZVxuXG4gICAgICB3aGlsZSAoIXBsYWNlZCkge1xuICAgICAgICBpZiAocm93SW5kZXggPj0gcm93cy5sZW5ndGgpIHtcbiAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgcm93IGlmIG5lZWRlZFxuICAgICAgICAgIHJvd3MucHVzaChbXSlcbiAgICAgICAgICBwbGFjZWQgPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSW4gZGF5IHZpZXcsIHdlIGNhbiBwbGFjZSBvbmUgZXZlbnQgcGVyIHJvdyBhcyB0aGV5IGRvbid0IG92ZXJsYXAgaG9yaXpvbnRhbGx5XG4gICAgICAgICAgLy8gVGhpcyBpcyBzaW1wbGVyIHRoYW4gd2VlayB2aWV3IHdoZXJlIHdlIG5lZWRlZCB0byBjaGVjayBmb3Igb3ZlcmxhcHNcbiAgICAgICAgICBwbGFjZWQgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQWRkIGV2ZW50IHRvIHRoZSByb3dcbiAgICAgIHJvd3Nbcm93SW5kZXhdLnB1c2goeyBldmVudCB9KVxuXG4gICAgICAvLyBBZGQgcHJvY2Vzc2VkIGV2ZW50IHdpdGggY29ycmVjdCBwb3NpdGlvbmluZ1xuICAgICAgcHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgbGVmdDogMCxcbiAgICAgICAgd2lkdGg6IDEwMCxcbiAgICAgICAgdG9wOiByb3dJbmRleCAqIEVWRU5UX0JBUl9IRUlHSFQsXG4gICAgICAgIGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcbiAgICAgICAgYWxsRGF5OiB0cnVlLFxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NlZEFsbERheUV2ZW50czogcHJvY2Vzc2VkRXZlbnRzLFxuICAgICAgYWxsRGF5Um93c0NvdW50OiBNYXRoLm1heCgxLCByb3dzLmxlbmd0aCksIC8vIEF0IGxlYXN0IDEgcm93LCBldmVuIGlmIGVtcHR5XG4gICAgfVxuICB9LCBbYWxsRGF5RXZlbnRzXSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtdGVzdGlkPVwiZGF5LWFsbC1kYXktcm93XCJcbiAgICAgIGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTggYm9yZGVyLWIgYm9yZGVyLXhcIlxuICAgID5cbiAgICAgIHsvKiBMZWZ0IGxhYmVsIGZvciBhbGwtZGF5IGV2ZW50cyAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLXNwYW4tMiBmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBib3JkZXItciBwci0yIG1kOmNvbC1zcGFuLTFcIj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtWzEwcHhdIHdoaXRlc3BhY2Utbm93cmFwIHNtOnRleHQteHNcIj5cbiAgICAgICAgICBBbGwtZGF5XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7LyogQWxsLWRheSBldmVudHMgY29udGFpbmVyIHdpdGggZHluYW1pYyBoZWlnaHQgKi99XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIGNvbC1zcGFuLTYgbWQ6Y29sLXNwYW4tNyBcIj5cbiAgICAgICAgPERyb3BwYWJsZUNlbGxcbiAgICAgICAgICBpZD17YGFsbC1kYXktJHtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuICAgICAgICAgIHR5cGU9XCJkYXktY2VsbFwiXG4gICAgICAgICAgZGF0ZT17Y3VycmVudERhdGV9XG4gICAgICAgICAgY2xhc3NOYW1lPVwiaG92ZXI6YmctYWNjZW50IHctZnVsbCBjdXJzb3ItcG9pbnRlciBtaW4taC0xMCBmbGV4IGZsZXgtY29sXCJcbiAgICAgICAgPlxuICAgICAgICAgIHtwcm9jZXNzZWRBbGxEYXlFdmVudHMubWFwKChldmVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBrZXk9e2BhbGwtZGF5LSR7ZXZlbnQuaWR9LSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgICBzdHlsZT17eyBoZWlnaHQ6IEVWRU5UX0JBUl9IRUlHSFQgKyAncHgnIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8RHJhZ2dhYmxlRXZlbnRcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnRJZD17YGFsbC1kYXktJHtldmVudC5pZH0tJHtpbmRleH1gfVxuICAgICAgICAgICAgICAgICAgZXZlbnQ9e2V2ZW50fVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwib3ZlcmZsb3ctY2xpcCB0ZXh0LXhzXCJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IHdpZHRoOiBgY2FsYygxMDAlIC0gdmFyKC0tc3BhY2luZykgKiAyKWAgfX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC9Ecm9wcGFibGVDZWxsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuXG5pbnRlcmZhY2UgRGF5SGVhZGVyUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IERheUhlYWRlcjogUmVhY3QuRkM8RGF5SGVhZGVyUHJvcHM+ID0gKHsgY2xhc3NOYW1lIH0pID0+IHtcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgc3RpY2t5Vmlld0hlYWRlciwgdmlld0hlYWRlckNsYXNzTmFtZSB9ID1cbiAgICB1c2VDYWxlbmRhckNvbnRleHQoKVxuICBjb25zdCBpc1RvZGF5ID0gY3VycmVudERhdGUuaXNTYW1lKGRheWpzKCksICdkYXknKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS10ZXN0aWQ9XCJkYXktaGVhZGVyXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItYiBwLTIgYm9yZGVyLXgnLFxuICAgICAgICBzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0yMCcsXG4gICAgICAgIHZpZXdIZWFkZXJDbGFzc05hbWUsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICA+XG4gICAgICA8QW5pbWF0ZVByZXNlbmNlIG1vZGU9XCJ3YWl0XCI+XG4gICAgICAgIDxtb3Rpb24uZGl2XG4gICAgICAgICAga2V5PXtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1cbiAgICAgICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuICAgICAgICAgIGV4aXQ9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG4gICAgICAgICAgdHJhbnNpdGlvbj17eyBkdXJhdGlvbjogMC4yNSwgZWFzZTogJ2Vhc2VJbk91dCcgfX1cbiAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgJ2ZsZXggaXRlbXMtY2VudGVyIHRleHQtY2VudGVyIHRleHQtYmFzZSBmb250LXNlbWlib2xkIHNtOnRleHQteGwnLFxuICAgICAgICAgICAgaXNUb2RheSAmJiAndGV4dC1wcmltYXJ5J1xuICAgICAgICAgICl9XG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ4czppbmxpbmUgaGlkZGVuXCI+XG4gICAgICAgICAgICB7Y3VycmVudERhdGUuZm9ybWF0KCdkZGRkLCAnKX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAge2N1cnJlbnREYXRlLmZvcm1hdCgnTU1NTSBELCBZWVlZJyl9XG4gICAgICAgICAge2lzVG9kYXkgJiYgKFxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBtbC0yIHJvdW5kZWQtZnVsbCBweC0xIHB5LTAuNSB0ZXh0LXhzIHNtOnB4LTIgc206dGV4dC1zbVwiPlxuICAgICAgICAgICAgICBUb2RheVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvbW90aW9uLmRpdj5cbiAgICAgIDwvQW5pbWF0ZVByZXNlbmNlPlxuICAgIDwvZGl2PlxuICApXG59XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcblxuLy8gSG91cnMgdG8gZGlzcGxheSAoYWxsIDI0IGhvdXJzIG9mIHRoZSBkYXkpXG5jb25zdCBob3VycyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDI0IH0sIChfLCBpKSA9PiBpKS5tYXAoKGhvdXIpID0+IHtcbiAgcmV0dXJuIGRheWpzKCkuaG91cihob3VyKS5taW51dGUoMClcbn0pXG5cbmludGVyZmFjZSBEYXlUaW1lQ29sUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IERheVRpbWVDb2w6IFJlYWN0LkZDPERheVRpbWVDb2xQcm9wcz4gPSAoeyBjbGFzc05hbWUgfSkgPT4ge1xuICBjb25zdCB7IGN1cnJlbnRMb2NhbGUgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBkYXRhLXRlc3RpZD1cImRheS10aW1lLWNvbFwiXG4gICAgICBjbGFzc05hbWU9e2Bjb2wtc3Bhbi0yIGgtZnVsbCBtZDpjb2wtc3Bhbi0xICR7Y2xhc3NOYW1lfWB9XG4gICAgPlxuICAgICAge2hvdXJzLm1hcCgodGltZSkgPT4gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAga2V5PXt0aW1lLmZvcm1hdCgnSEg6bW0nKX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD17YGRheS10aW1lLWhvdXItJHt0aW1lLmZvcm1hdCgnSEgnKX1gfVxuICAgICAgICAgIGNsYXNzTmFtZT1cImgtWzYwcHhdIGJvcmRlci1iIHRleHQtcmlnaHRcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHByLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzXCI+XG4gICAgICAgICAgICB7SW50bC5EYXRlVGltZUZvcm1hdChjdXJyZW50TG9jYWxlLCB7XG4gICAgICAgICAgICAgIGhvdXI6ICdudW1lcmljJyxcbiAgICAgICAgICAgICAgbWludXRlOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgIGhvdXIxMjogdHJ1ZSxcbiAgICAgICAgICAgIH0pLmZvcm1hdCh0aW1lLnRvRGF0ZSgpKX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKSl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7XG4gIEJ1dHRvbixcbiAgQ2hlY2tib3gsXG4gIERhdGVQaWNrZXIsXG4gIERpYWxvZyxcbiAgRGlhbG9nQ29udGVudCxcbiAgRGlhbG9nRGVzY3JpcHRpb24sXG4gIERpYWxvZ0Zvb3RlcixcbiAgRGlhbG9nSGVhZGVyLFxuICBEaWFsb2dUaXRsZSxcbiAgSW5wdXQsXG4gIExhYmVsLFxuICBUb29sdGlwLFxuICBUb29sdGlwQ29udGVudCxcbiAgVG9vbHRpcFByb3ZpZGVyLFxuICBUb29sdGlwVHJpZ2dlcixcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgUlJ1bGVPcHRpb25zIH0gZnJvbSAnQC9saWIvcmVjdXJyZW5jZS1oYW5kbGVyL3R5cGVzJ1xuaW1wb3J0IHsgaXNSZWN1cnJpbmdFdmVudCB9IGZyb20gJ0AvbGliL3JlY3VycmVuY2UtaGFuZGxlcidcbmltcG9ydCB7IFJlY3VycmVuY2VFZGl0b3IgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXRvci9yZWN1cnJlbmNlLWVkaXRvcidcbmltcG9ydCB7IFJlY3VycmVuY2VFZGl0RGlhbG9nIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL2NvbXBvbmVudHMvcmVjdXJyZW5jZS1lZGl0LWRpYWxvZydcbmltcG9ydCB7IHVzZVJlY3VycmluZ0V2ZW50QWN0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9ob29rcy91c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcblxuY29uc3QgY29sb3JPcHRpb25zID0gW1xuICB7IHZhbHVlOiAnYmctYmx1ZS0xMDAgdGV4dC1ibHVlLTgwMCcsIGxhYmVsOiAnQmx1ZScgfSxcbiAgeyB2YWx1ZTogJ2JnLWdyZWVuLTEwMCB0ZXh0LWdyZWVuLTgwMCcsIGxhYmVsOiAnR3JlZW4nIH0sXG4gIHsgdmFsdWU6ICdiZy1wdXJwbGUtMTAwIHRleHQtcHVycGxlLTgwMCcsIGxhYmVsOiAnUHVycGxlJyB9LFxuICB7IHZhbHVlOiAnYmctcmVkLTEwMCB0ZXh0LXJlZC04MDAnLCBsYWJlbDogJ1JlZCcgfSxcbiAgeyB2YWx1ZTogJ2JnLXllbGxvdy0xMDAgdGV4dC15ZWxsb3ctODAwJywgbGFiZWw6ICdZZWxsb3cnIH0sXG4gIHsgdmFsdWU6ICdiZy1waW5rLTEwMCB0ZXh0LXBpbmstODAwJywgbGFiZWw6ICdQaW5rJyB9LFxuICB7IHZhbHVlOiAnYmctaW5kaWdvLTEwMCB0ZXh0LWluZGlnby04MDAnLCBsYWJlbDogJ0luZGlnbycgfSxcbiAgeyB2YWx1ZTogJ2JnLWFtYmVyLTEwMCB0ZXh0LWFtYmVyLTgwMCcsIGxhYmVsOiAnQW1iZXInIH0sXG4gIHsgdmFsdWU6ICdiZy1lbWVyYWxkLTEwMCB0ZXh0LWVtZXJhbGQtODAwJywgbGFiZWw6ICdFbWVyYWxkJyB9LFxuICB7IHZhbHVlOiAnYmctc2t5LTEwMCB0ZXh0LXNreS04MDAnLCBsYWJlbDogJ1NreScgfSxcbiAgeyB2YWx1ZTogJ2JnLXZpb2xldC0xMDAgdGV4dC12aW9sZXQtODAwJywgbGFiZWw6ICdWaW9sZXQnIH0sXG4gIHsgdmFsdWU6ICdiZy1yb3NlLTEwMCB0ZXh0LXJvc2UtODAwJywgbGFiZWw6ICdSb3NlJyB9LFxuICB7IHZhbHVlOiAnYmctdGVhbC0xMDAgdGV4dC10ZWFsLTgwMCcsIGxhYmVsOiAnVGVhbCcgfSxcbiAgeyB2YWx1ZTogJ2JnLW9yYW5nZS0xMDAgdGV4dC1vcmFuZ2UtODAwJywgbGFiZWw6ICdPcmFuZ2UnIH0sXG5dXG5cbmludGVyZmFjZSBFdmVudEZvcm1Qcm9wcyB7XG4gIHNlbGVjdGVkRXZlbnQ/OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuICBzZWxlY3RlZERhdGU/OiBkYXlqcy5EYXlqcyB8IG51bGxcbiAgb25BZGQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgb25VcGRhdGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgb25EZWxldGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgb25DbG9zZTogKCkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgRXZlbnRGb3JtOiBSZWFjdC5GQzxFdmVudEZvcm1Qcm9wcz4gPSAoe1xuICBzZWxlY3RlZEV2ZW50LFxuICBzZWxlY3RlZERhdGUsXG4gIG9uQ2xvc2UsXG4gIG9uVXBkYXRlLFxuICBvbkRlbGV0ZSxcbiAgb25BZGQsXG59KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBkaWFsb2dTdGF0ZSxcbiAgICBvcGVuRWRpdERpYWxvZyxcbiAgICBvcGVuRGVsZXRlRGlhbG9nLFxuICAgIGNsb3NlRGlhbG9nLFxuICAgIGhhbmRsZUNvbmZpcm0sXG4gIH0gPSB1c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMob25DbG9zZSlcblxuICBjb25zdCB7IGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCwgdCB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuICBjb25zdCBzdGFydCA9IHNlbGVjdGVkRXZlbnQ/LnN0YXJ0XG4gIGNvbnN0IGVuZCA9IHNlbGVjdGVkRXZlbnQ/LmVuZFxuXG4gIC8vIEZpbmQgcGFyZW50IGV2ZW50IGlmIHRoaXMgaXMgYSByZWN1cnJpbmcgZXZlbnQgaW5zdGFuY2VcbiAgY29uc3QgcGFyZW50RXZlbnQgPSBzZWxlY3RlZEV2ZW50XG4gICAgPyBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQoc2VsZWN0ZWRFdmVudClcbiAgICA6IG51bGxcblxuICAvLyBGb3JtIGRlZmF1bHQgdmFsdWVzXG4gIGNvbnN0IGRlZmF1bHRTdGFydERhdGUgPSBzZWxlY3RlZERhdGU/LnRvRGF0ZSgpIHx8IG5ldyBEYXRlKClcbiAgY29uc3QgZGVmYXVsdEVuZERhdGUgPVxuICAgIHNlbGVjdGVkRGF0ZT8uYWRkKDEsICdob3VyJykudG9EYXRlKCkgfHwgZGF5anMoKS5hZGQoMSwgJ2hvdXInKS50b0RhdGUoKVxuXG4gIC8vIEZvcm0gc3RhdGVcbiAgY29uc3QgW3N0YXJ0RGF0ZSwgc2V0U3RhcnREYXRlXSA9IHVzZVN0YXRlKFxuICAgIHN0YXJ0Py50b0RhdGUoKSB8fCBkZWZhdWx0U3RhcnREYXRlXG4gIClcbiAgY29uc3QgW2VuZERhdGUsIHNldEVuZERhdGVdID0gdXNlU3RhdGUoZW5kPy50b0RhdGUoKSB8fCBkZWZhdWx0RW5kRGF0ZSlcbiAgY29uc3QgW2lzQWxsRGF5LCBzZXRJc0FsbERheV0gPSB1c2VTdGF0ZShzZWxlY3RlZEV2ZW50Py5hbGxEYXkgfHwgZmFsc2UpXG4gIGNvbnN0IFtzZWxlY3RlZENvbG9yLCBzZXRTZWxlY3RlZENvbG9yXSA9IHVzZVN0YXRlKFxuICAgIHNlbGVjdGVkRXZlbnQ/LmNvbG9yIHx8IGNvbG9yT3B0aW9uc1swXS52YWx1ZVxuICApXG5cbiAgLy8gVGltZSBzdGF0ZVxuICBjb25zdCBbc3RhcnRUaW1lLCBzZXRTdGFydFRpbWVdID0gdXNlU3RhdGUoXG4gICAgc3RhcnQgPyBzdGFydC5mb3JtYXQoJ0hIOm1tJykgOiBkYXlqcyhkZWZhdWx0U3RhcnREYXRlKS5mb3JtYXQoJ0hIOm1tJylcbiAgKVxuICBjb25zdCBbZW5kVGltZSwgc2V0RW5kVGltZV0gPSB1c2VTdGF0ZShcbiAgICBlbmQgPyBlbmQuZm9ybWF0KCdISDptbScpIDogZGF5anMoZGVmYXVsdEVuZERhdGUpLmZvcm1hdCgnSEg6bW0nKVxuICApXG5cbiAgLy8gSW5pdGlhbGl6ZSBmb3JtIHZhbHVlcyBmcm9tIHNlbGVjdGVkIGV2ZW50IG9yIGRlZmF1bHRzXG4gIGNvbnN0IFtmb3JtVmFsdWVzLCBzZXRGb3JtVmFsdWVzXSA9IHVzZVN0YXRlKHtcbiAgICB0aXRsZTogc2VsZWN0ZWRFdmVudD8udGl0bGUgfHwgJycsXG4gICAgZGVzY3JpcHRpb246IHNlbGVjdGVkRXZlbnQ/LmRlc2NyaXB0aW9uIHx8ICcnLFxuICAgIGxvY2F0aW9uOiBzZWxlY3RlZEV2ZW50Py5sb2NhdGlvbiB8fCAnJyxcbiAgfSlcblxuICAvLyBSZWN1cnJlbmNlIHN0YXRlIC0gcHVsbCBSUlVMRSBmcm9tIHBhcmVudCBpZiB0aGlzIGlzIGFuIGluc3RhbmNlXG4gIGNvbnN0IFtycnVsZSwgc2V0UnJ1bGVdID0gdXNlU3RhdGU8UlJ1bGVPcHRpb25zIHwgbnVsbD4oKCkgPT4ge1xuICAgIGNvbnN0IGV2ZW50UnJ1bGUgPSBzZWxlY3RlZEV2ZW50Py5ycnVsZSB8fCBwYXJlbnRFdmVudD8ucnJ1bGVcbiAgICByZXR1cm4gZXZlbnRScnVsZSB8fCBudWxsXG4gIH0pXG5cbiAgLy8gQ3JlYXRlIHdyYXBwZXIgZnVuY3Rpb25zIHRvIGZpeCBUeXBlU2NyaXB0IGVycm9ycyB3aXRoIERhdGVQaWNrZXJcbiAgY29uc3QgaGFuZGxlU3RhcnREYXRlQ2hhbmdlID0gKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHtcbiAgICBpZiAoZGF0ZSkge1xuICAgICAgc2V0U3RhcnREYXRlKGRhdGUpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRW5kRGF0ZUNoYW5nZSA9IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgaWYgKGRhdGUpIHtcbiAgICAgIHNldEVuZERhdGUoZGF0ZSlcbiAgICB9XG4gIH1cblxuICAvLyBVcGRhdGUgZm9ybSB2YWx1ZXMgd2hlbiBpbnB1dCBjaGFuZ2VzXG4gIGNvbnN0IGhhbmRsZUlucHV0Q2hhbmdlID0gKFxuICAgIGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50PlxuICApID0+IHtcbiAgICBjb25zdCB7IG5hbWUsIHZhbHVlIH0gPSBlLnRhcmdldFxuICAgIHNldEZvcm1WYWx1ZXMoKHByZXYpID0+ICh7IC4uLnByZXYsIFtuYW1lXTogdmFsdWUgfSkpXG4gIH1cblxuICAvLyBIYW5kbGUgdGltZSBjaGFuZ2VzXG4gIGNvbnN0IGhhbmRsZVRpbWVDaGFuZ2UgPSAoXG4gICAgZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4sXG4gICAgaXNTdGFydDogYm9vbGVhblxuICApID0+IHtcbiAgICBjb25zdCB0aW1lVmFsdWUgPSBlLnRhcmdldC52YWx1ZVxuICAgIGlmIChpc1N0YXJ0KSB7XG4gICAgICBzZXRTdGFydFRpbWUodGltZVZhbHVlKVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRFbmRUaW1lKHRpbWVWYWx1ZSlcbiAgICB9XG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIFJlc2V0IGVuZCB0aW1lIHdoZW4gYWxsIGRheSBpcyB0b2dnbGVkIHRvIG9uXG4gICAgaWYgKGlzQWxsRGF5KSB7XG4gICAgICBzZXRFbmRUaW1lKCcyMzo1OScpXG4gICAgfVxuICB9LCBbaXNBbGxEYXldKVxuXG4gIC8vIEhhbmRsZSBmb3JtIHN1Ym1pc3Npb25cbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gKGU6IFJlYWN0LkZvcm1FdmVudCkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuXG4gICAgLy8gQ3JlYXRlIGZ1bGwgZGF0ZXRpbWUgb2JqZWN0cyBieSBjb21iaW5pbmcgZGF0ZSBhbmQgdGltZVxuICAgIGNvbnN0IFtzdGFydEhvdXJzLCBzdGFydE1pbnV0ZXNdID0gc3RhcnRUaW1lLnNwbGl0KCc6JykubWFwKE51bWJlcilcbiAgICBjb25zdCBbZW5kSG91cnMsIGVuZE1pbnV0ZXNdID0gZW5kVGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG5cbiAgICBsZXQgc3RhcnREYXRlVGltZSA9IGRheWpzKHN0YXJ0RGF0ZSkuaG91cihzdGFydEhvdXJzKS5taW51dGUoc3RhcnRNaW51dGVzKVxuXG4gICAgbGV0IGVuZERhdGVUaW1lID0gZGF5anMoZW5kRGF0ZSkuaG91cihlbmRIb3VycykubWludXRlKGVuZE1pbnV0ZXMpXG5cbiAgICAvLyBGb3IgYWxsLWRheSBldmVudHMsIHNldCBhcHByb3ByaWF0ZSB0aW1lc1xuICAgIGlmIChpc0FsbERheSkge1xuICAgICAgc3RhcnREYXRlVGltZSA9IHN0YXJ0RGF0ZVRpbWUuaG91cigwKS5taW51dGUoMClcbiAgICAgIGVuZERhdGVUaW1lID0gZW5kRGF0ZVRpbWUuaG91cigyMykubWludXRlKDU5KVxuICAgIH1cblxuICAgIGNvbnN0IGV2ZW50RGF0YTogQ2FsZW5kYXJFdmVudCA9IHtcbiAgICAgIGlkOiBzZWxlY3RlZEV2ZW50Py5pZCB8fCBkYXlqcygpLmZvcm1hdCgnWVlZWU1NRERISG1tc3MnKSxcbiAgICAgIHRpdGxlOiBmb3JtVmFsdWVzLnRpdGxlLFxuICAgICAgc3RhcnQ6IHN0YXJ0RGF0ZVRpbWUsXG4gICAgICBlbmQ6IGVuZERhdGVUaW1lLFxuICAgICAgZGVzY3JpcHRpb246IGZvcm1WYWx1ZXMuZGVzY3JpcHRpb24sXG4gICAgICBsb2NhdGlvbjogZm9ybVZhbHVlcy5sb2NhdGlvbixcbiAgICAgIGFsbERheTogaXNBbGxEYXksXG4gICAgICBjb2xvcjogc2VsZWN0ZWRDb2xvcixcbiAgICAgIHJydWxlOiBycnVsZSB8fCB1bmRlZmluZWQsXG4gICAgfVxuXG4gICAgaWYgKHNlbGVjdGVkRXZlbnQ/LmlkKSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgcmVjdXJyaW5nIGV2ZW50XG4gICAgICBpZiAoaXNSZWN1cnJpbmdFdmVudChzZWxlY3RlZEV2ZW50KSkge1xuICAgICAgICAvLyBTaG93IHJlY3VycmluZyBldmVudCBlZGl0IGRpYWxvZ1xuICAgICAgICBvcGVuRWRpdERpYWxvZyhzZWxlY3RlZEV2ZW50LCB7XG4gICAgICAgICAgdGl0bGU6IGZvcm1WYWx1ZXMudGl0bGUsXG4gICAgICAgICAgc3RhcnQ6IHN0YXJ0RGF0ZVRpbWUsXG4gICAgICAgICAgZW5kOiBlbmREYXRlVGltZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogZm9ybVZhbHVlcy5kZXNjcmlwdGlvbixcbiAgICAgICAgICBsb2NhdGlvbjogZm9ybVZhbHVlcy5sb2NhdGlvbixcbiAgICAgICAgICBhbGxEYXk6IGlzQWxsRGF5LFxuICAgICAgICAgIGNvbG9yOiBzZWxlY3RlZENvbG9yLFxuICAgICAgICAgIHJydWxlOiBycnVsZSB8fCB1bmRlZmluZWQsXG4gICAgICAgIH0pXG4gICAgICAgIHJldHVybiAvLyBEb24ndCBjbG9zZSB0aGUgZm9ybSB5ZXQsIGxldCB0aGUgZGlhbG9nIGhhbmRsZSBpdFxuICAgICAgfVxuICAgICAgb25VcGRhdGU/LihldmVudERhdGEpXG4gICAgfSBlbHNlIHtcbiAgICAgIG9uQWRkPy4oZXZlbnREYXRhKVxuICAgIH1cblxuICAgIG9uQ2xvc2UoKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRGVsZXRlID0gKCkgPT4ge1xuICAgIGlmIChzZWxlY3RlZEV2ZW50Py5pZCkge1xuICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIHJlY3VycmluZyBldmVudFxuICAgICAgaWYgKGlzUmVjdXJyaW5nRXZlbnQoc2VsZWN0ZWRFdmVudCkpIHtcbiAgICAgICAgLy8gU2hvdyByZWN1cnJpbmcgZXZlbnQgZGVsZXRlIGRpYWxvZ1xuICAgICAgICBvcGVuRGVsZXRlRGlhbG9nKHNlbGVjdGVkRXZlbnQpXG4gICAgICAgIHJldHVybiAvLyBEb24ndCBjbG9zZSB0aGUgZm9ybSB5ZXQsIGxldCB0aGUgZGlhbG9nIGhhbmRsZSBpdFxuICAgICAgfVxuICAgICAgb25EZWxldGU/LihzZWxlY3RlZEV2ZW50KVxuICAgICAgb25DbG9zZSgpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlUlJ1bGVDaGFuZ2UgPSAobmV3UlJ1bGU6IFJSdWxlT3B0aW9ucyB8IG51bGwpID0+IHtcbiAgICBpZiAobmV3UlJ1bGUpIHtcbiAgICAgIC8vIENyZWF0ZSBkdHN0YXJ0IHdpdGggdGhlIHNhbWUgbG9naWMgYXMgaW4gaGFuZGxlU3VibWl0XG4gICAgICBjb25zdCBbc3RhcnRIb3Vycywgc3RhcnRNaW51dGVzXSA9IHN0YXJ0VGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG4gICAgICBsZXQgc3RhcnREYXRlVGltZSA9IGRheWpzKHN0YXJ0RGF0ZSkuaG91cihzdGFydEhvdXJzKS5taW51dGUoc3RhcnRNaW51dGVzKVxuXG4gICAgICBpZiAoaXNBbGxEYXkpIHtcbiAgICAgICAgc3RhcnREYXRlVGltZSA9IHN0YXJ0RGF0ZVRpbWUuaG91cigwKS5taW51dGUoMClcbiAgICAgIH1cblxuICAgICAgLy8gRW5zdXJlIGR0c3RhcnQgaXMgYWx3YXlzIGluY2x1ZGVkIGluIFJSdWxlT3B0aW9ucyBhcyBhIERhdGUgb2JqZWN0XG4gICAgICBjb25zdCBjb21wbGV0ZVJydWxlOiBSUnVsZU9wdGlvbnMgPSB7XG4gICAgICAgIC4uLm5ld1JSdWxlLFxuICAgICAgICBkdHN0YXJ0OiBzdGFydERhdGVUaW1lLnRvRGF0ZSgpLCAvLyBDb252ZXJ0IGRheWpzIHRvIERhdGVcbiAgICAgIH1cbiAgICAgIHNldFJydWxlKGNvbXBsZXRlUnJ1bGUpXG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFJydWxlKG51bGwpXG4gICAgfVxuICB9XG5cbiAgLy8gVmFsaWRhdGUgZW5kIGRhdGUgaXMgbm90IGJlZm9yZSBzdGFydCBkYXRlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGRheWpzKHN0YXJ0RGF0ZSkuaXNBZnRlcihkYXlqcyhlbmREYXRlKSkpIHtcbiAgICAgIHNldEVuZERhdGUoc3RhcnREYXRlKVxuICAgIH1cbiAgfSwgW3N0YXJ0RGF0ZSwgZW5kRGF0ZV0pXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPERpYWxvZyBvcGVuPXt0cnVlfSBvbk9wZW5DaGFuZ2U9e29uQ2xvc2V9PlxuICAgICAgICA8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJ3LVs5MHZ3XSBtYXgtdy1bNTAwcHhdIHAtNCBzbTpwLTZcIj5cbiAgICAgICAgICA8Zm9ybSBvblN1Ym1pdD17aGFuZGxlU3VibWl0fT5cbiAgICAgICAgICAgIDxEaWFsb2dIZWFkZXIgY2xhc3NOYW1lPVwibWItMiBzbTptYi00XCI+XG4gICAgICAgICAgICAgIDxEaWFsb2dUaXRsZSBjbGFzc05hbWU9XCJ0ZXh0LWJhc2Ugc206dGV4dC1sZ1wiPlxuICAgICAgICAgICAgICAgIHtzZWxlY3RlZEV2ZW50Py5pZCA/IHQoJ2VkaXRFdmVudCcpIDogdCgnY3JlYXRlRXZlbnQnKX1cbiAgICAgICAgICAgICAgPC9EaWFsb2dUaXRsZT5cbiAgICAgICAgICAgICAgPERpYWxvZ0Rlc2NyaXB0aW9uIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPlxuICAgICAgICAgICAgICAgIHtzZWxlY3RlZEV2ZW50Py5pZCA/IHQoJ2VkaXRFdmVudERldGFpbHMnKSA6IHQoJ2FkZE5ld0V2ZW50Jyl9XG4gICAgICAgICAgICAgIDwvRGlhbG9nRGVzY3JpcHRpb24+XG4gICAgICAgICAgICA8L0RpYWxvZ0hlYWRlcj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0zIHB5LTIgc206Z2FwLTQgc206cHktNFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8TGFiZWwgaHRtbEZvcj1cInRpdGxlXCIgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICB7dCgndGl0bGUnKX1cbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgaWQ9XCJ0aXRsZVwiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwidGl0bGVcIlxuICAgICAgICAgICAgICAgICAgdmFsdWU9e2Zvcm1WYWx1ZXMudGl0bGV9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlSW5wdXRDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17dCgnZXZlbnRUaXRsZVBsYWNlaG9sZGVyJyl9XG4gICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC04IHRleHQtc20gc206aC05XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTEgc206Z2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8TGFiZWwgaHRtbEZvcj1cImRlc2NyaXB0aW9uXCIgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICB7dCgnZGVzY3JpcHRpb24nKX1cbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgaWQ9XCJkZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwiZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgICAgdmFsdWU9e2Zvcm1WYWx1ZXMuZGVzY3JpcHRpb259XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlSW5wdXRDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17dCgnZXZlbnREZXNjcmlwdGlvblBsYWNlaG9sZGVyJyl9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTggdGV4dC1zbSBzbTpoLTlcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG4gICAgICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgICAgICBpZD1cImFsbERheVwiXG4gICAgICAgICAgICAgICAgICBjaGVja2VkPXtpc0FsbERheX1cbiAgICAgICAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17KGNoZWNrZWQpID0+IHNldElzQWxsRGF5KGNoZWNrZWQgPT09IHRydWUpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPExhYmVsIGh0bWxGb3I9XCJhbGxEYXlcIiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj5cbiAgICAgICAgICAgICAgICAgIHt0KCdhbGxEYXknKX1cbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTIgc206Z2FwLTRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPnt0KCdzdGFydERhdGUnKX08L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgPERhdGVQaWNrZXJcbiAgICAgICAgICAgICAgICAgICAgZGF0ZT17c3RhcnREYXRlfVxuICAgICAgICAgICAgICAgICAgICBzZXREYXRlPXtoYW5kbGVTdGFydERhdGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm10LTFcIlxuICAgICAgICAgICAgICAgICAgICBjbG9zZU9uU2VsZWN0XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICA8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e3QoJ2VuZERhdGUnKX08L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgPERhdGVQaWNrZXJcbiAgICAgICAgICAgICAgICAgICAgZGF0ZT17ZW5kRGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgc2V0RGF0ZT17aGFuZGxlRW5kRGF0ZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXQtMVwiXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlT25TZWxlY3RcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIHshaXNBbGxEYXkgJiYgKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtMiBzbTpnYXAtNFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPExhYmVsIGh0bWxGb3I9XCJzdGFydC10aW1lXCIgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3QoJ3N0YXJ0VGltZScpfVxuICAgICAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cInN0YXJ0LXRpbWVcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0aW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17c3RhcnRUaW1lfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gaGFuZGxlVGltZUNoYW5nZShlLCB0cnVlKX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtdC0xIGgtOCB0ZXh0LXNtIHNtOmgtOVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwiZW5kLXRpbWVcIiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj5cbiAgICAgICAgICAgICAgICAgICAgICB7dCgnZW5kVGltZScpfVxuICAgICAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImVuZC10aW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2VuZFRpbWV9XG4gICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBoYW5kbGVUaW1lQ2hhbmdlKGUsIGZhbHNlKX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtdC0xIGgtOCB0ZXh0LXNtIHNtOmgtOVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTEgc206Z2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e3QoJ2NvbG9yJyl9PC9MYWJlbD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8VG9vbHRpcFByb3ZpZGVyPlxuICAgICAgICAgICAgICAgICAgICB7Y29sb3JPcHRpb25zLm1hcCgoY29sb3IpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICA8VG9vbHRpcCBrZXk9e2NvbG9yLnZhbHVlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUb29sdGlwVHJpZ2dlciBhc0NoaWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2NvbG9yLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtjb2xvci52YWx1ZX0gaC02IHctNiByb3VuZGVkLWZ1bGwgc206aC04IHNtOnctOGAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENvbG9yID09PSBjb2xvci52YWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmluZy0yIHJpbmctYmxhY2sgcmluZy1vZmZzZXQtMSBzbTpyaW5nLW9mZnNldC0yJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0U2VsZWN0ZWRDb2xvcihjb2xvci52YWx1ZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17Y29sb3IubGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXBUcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRvb2x0aXBDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57Y29sb3IubGFiZWx9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMSBzbTpnYXAtMlwiPlxuICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwibG9jYXRpb25cIiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj5cbiAgICAgICAgICAgICAgICAgIHt0KCdsb2NhdGlvbicpfVxuICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICBpZD1cImxvY2F0aW9uXCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJsb2NhdGlvblwiXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17Zm9ybVZhbHVlcy5sb2NhdGlvbn1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVJbnB1dENoYW5nZX1cbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXt0KCdldmVudExvY2F0aW9uUGxhY2Vob2xkZXInKX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtOCB0ZXh0LXNtIHNtOmgtOVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgey8qIFJlY3VycmVuY2UgU2VjdGlvbiAqL31cbiAgICAgICAgICAgICAgPFJlY3VycmVuY2VFZGl0b3IgdmFsdWU9e3JydWxlfSBvbkNoYW5nZT17aGFuZGxlUlJ1bGVDaGFuZ2V9IC8+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPERpYWxvZ0Zvb3RlciBjbGFzc05hbWU9XCJtdC0yIGZsZXggZmxleC1jb2wtcmV2ZXJzZSBnYXAtMiBzbTptdC00IHNtOmZsZXgtcm93IHNtOmdhcC0wXCI+XG4gICAgICAgICAgICAgIHtzZWxlY3RlZEV2ZW50Py5pZCAmJiAoXG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICB2YXJpYW50PVwiZGVzdHJ1Y3RpdmVcIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlRGVsZXRlfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHNtOm1yLWF1dG8gc206dy1hdXRvXCJcbiAgICAgICAgICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3QoJ2RlbGV0ZScpfVxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsIGdhcC0yIHNtOnctYXV0b1wiPlxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVcIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17b25DbG9zZX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMSBzbTpmbGV4LW5vbmVcIlxuICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7dCgnY2FuY2VsJyl9XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgPEJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3NOYW1lPVwiZmxleC0xIHNtOmZsZXgtbm9uZVwiIHNpemU9XCJzbVwiPlxuICAgICAgICAgICAgICAgICAge3NlbGVjdGVkRXZlbnQ/LmlkID8gdCgndXBkYXRlJykgOiB0KCdjcmVhdGUnKX1cbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L0RpYWxvZ0Zvb3Rlcj5cbiAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgIDwvRGlhbG9nQ29udGVudD5cbiAgICAgIDwvRGlhbG9nPlxuXG4gICAgICB7LyogUmVjdXJyaW5nIEV2ZW50IEVkaXQgRGlhbG9nICovfVxuICAgICAgPFJlY3VycmVuY2VFZGl0RGlhbG9nXG4gICAgICAgIGlzT3Blbj17ZGlhbG9nU3RhdGUuaXNPcGVufVxuICAgICAgICBvbkNsb3NlPXtjbG9zZURpYWxvZ31cbiAgICAgICAgb25Db25maXJtPXtoYW5kbGVDb25maXJtfVxuICAgICAgICBvcGVyYXRpb25UeXBlPXtkaWFsb2dTdGF0ZS5vcGVyYXRpb25UeXBlfVxuICAgICAgICBldmVudFRpdGxlPXtkaWFsb2dTdGF0ZS5ldmVudD8udGl0bGUgfHwgJyd9XG4gICAgICAvPlxuICAgIDwvPlxuICApXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuaW1wb3J0IHsgb21pdEtleXMsIHNhZmVEYXRlIH0gZnJvbSAnLi4vdXRpbHMnXG5pbXBvcnQgdHlwZSB7IFJSdWxlT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBpc1JlY3VycmluZ0V2ZW50ID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBCb29sZWFuKGV2ZW50LnJydWxlIHx8IGV2ZW50LnJlY3VycmVuY2VJZCB8fCBldmVudC51aWQpXG59XG5cbmludGVyZmFjZSBHZW5lcmF0ZVJlY3VycmluZ0V2ZW50c1Byb3BzIHtcbiAgZXZlbnQ6IENhbGVuZGFyRXZlbnRcbiAgY3VycmVudEV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIHN0YXJ0RGF0ZTogZGF5anMuRGF5anNcbiAgZW5kRGF0ZTogZGF5anMuRGF5anNcbn1cblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzID0gKHtcbiAgZXZlbnQsXG4gIGN1cnJlbnRFdmVudHMsXG4gIHN0YXJ0RGF0ZSxcbiAgZW5kRGF0ZSxcbn06IEdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzUHJvcHMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuICAvLyBJZiBub3QgYSByZWN1cnJpbmcgZXZlbnQsIHJldHVybiBlbXB0eSBhcnJheVxuICBpZiAoIWV2ZW50LnJydWxlKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICB0cnkge1xuICAgIC8vIENyZWF0ZSBydWxlIGZyb20gUlJ1bGVPcHRpb25zIGVuc3VyaW5nIGR0c3RhcnQgaXMgYWx3YXlzIHByb3ZpZGVkXG4gICAgLy8gSWYgZHRzdGFydCBpcyBtaXNzaW5nIGZyb20gdGhlIFJSVUxFLCB1c2UgdGhlIGV2ZW50J3Mgc3RhcnQgdGltZSBhcyBmYWxsYmFja1xuICAgIGNvbnN0IHJ1bGVPcHRpb25zOiBSUnVsZU9wdGlvbnMgPSB7XG4gICAgICAuLi5ldmVudC5ycnVsZSxcbiAgICAgIGR0c3RhcnQ6IGV2ZW50LnJydWxlLmR0c3RhcnQgfHwgZXZlbnQuc3RhcnQudG9EYXRlKCksXG4gICAgfVxuICAgIGNvbnN0IHJ1bGUgPSBuZXcgUlJ1bGUocnVsZU9wdGlvbnMpXG5cbiAgICBjb25zdCBvdmVycmlkZXMgPSBjdXJyZW50RXZlbnRzLmZpbHRlcihcbiAgICAgIChlKSA9PiBlLnJlY3VycmVuY2VJZCAmJiBlLnVpZCA9PT0gZXZlbnQudWlkXG4gICAgKVxuXG4gICAgLy8gQ2FsY3VsYXRlIGV2ZW50IGR1cmF0aW9uIHRvIGV4cGFuZCBzZWFyY2ggd2luZG93IGZvciBldmVudHMgdGhhdCBzcGFuIHRoZSByYW5nZVxuICAgIGNvbnN0IGV2ZW50RHVyYXRpb24gPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydClcblxuICAgIC8vIEV4cGFuZCBzZWFyY2ggd2luZG93IGJhY2t3YXJkIGJ5IGV2ZW50IGR1cmF0aW9uIHRvIGNhdGNoIGV2ZW50cyB0aGF0IHN0YXJ0IGJlZm9yZVxuICAgIC8vIHRoZSByYW5nZSBidXQgc3BhbiBpbnRvIGl0XG4gICAgY29uc3QgZXhwYW5kZWRTdGFydERhdGVUaW1lID0gc3RhcnREYXRlXG4gICAgICAuc3VidHJhY3QoZXZlbnREdXJhdGlvbiwgJ21pbGxpc2Vjb25kJylcbiAgICAgIC50b0RhdGUoKVxuICAgIGNvbnN0IGVuZERhdGVUaW1lID0gZW5kRGF0ZS50b0RhdGUoKVxuXG4gICAgLy8gR2V0IGFsbCBvY2N1cnJlbmNlcyBpbiB0aGUgZXhwYW5kZWQgcmFuZ2VcbiAgICBjb25zdCBvY2N1cnJlbmNlcyA9IHJ1bGUuYmV0d2VlbihleHBhbmRlZFN0YXJ0RGF0ZVRpbWUsIGVuZERhdGVUaW1lLCB0cnVlKVxuXG4gICAgLy8gQ29udmVydCBvY2N1cnJlbmNlcyB0byBDYWxlbmRhckV2ZW50IGluc3RhbmNlc1xuICAgIGNvbnN0IHJlY3VycmluZ0V2ZW50czogQ2FsZW5kYXJFdmVudFtdID0gb2NjdXJyZW5jZXNcbiAgICAgIC5tYXAoKG9jY3VycmVuY2UsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IG9jY3VycmVuY2VEYXRlID0gZGF5anMob2NjdXJyZW5jZSlcbiAgICAgICAgY29uc3QgZXhpc3RpbmdPdmVycmlkZSA9IG92ZXJyaWRlcy5maW5kKChlKSA9PlxuICAgICAgICAgIHNhZmVEYXRlKGUucmVjdXJyZW5jZUlkKS5pc1NhbWUob2NjdXJyZW5jZURhdGUpXG4gICAgICAgIClcblxuICAgICAgICAvLyBJZiB0aGVyZSdzIGFuIG92ZXJyaWRlLCB1c2UgaXRcbiAgICAgICAgaWYgKGV4aXN0aW5nT3ZlcnJpZGUpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi5ldmVudCwgLi4uZXhpc3RpbmdPdmVycmlkZSB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGR1cmF0aW9uIGZyb20gdGhlIG9yaWdpbmFsIGV2ZW50XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsRHVyYXRpb24gPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydClcbiAgICAgICAgY29uc3QgbmV3RW5kVGltZSA9IG9jY3VycmVuY2VEYXRlLmFkZChvcmlnaW5hbER1cmF0aW9uLCAnbWlsbGlzZWNvbmQnKVxuICAgICAgICBjb25zdCByZWN1cnJpbmdFdmVudElkID0gYCR7ZXZlbnQuaWR9XyR7aW5kZXh9YFxuICAgICAgICBjb25zdCBwYXJlbnRVSUQgPSBldmVudC51aWQgfHwgYCR7ZXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYFxuXG4gICAgICAgIC8vIENyZWF0ZSB0aGUgcmVjdXJyaW5nIGV2ZW50IGluc3RhbmNlXG4gICAgICAgIGNvbnN0IHJlY3VycmluZ0V2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuICAgICAgICAgIC4uLmV2ZW50LFxuICAgICAgICAgIGlkOiByZWN1cnJpbmdFdmVudElkLFxuICAgICAgICAgIHN0YXJ0OiBvY2N1cnJlbmNlRGF0ZSxcbiAgICAgICAgICBlbmQ6IG5ld0VuZFRpbWUsXG4gICAgICAgICAgdWlkOiBwYXJlbnRVSUQsIC8vIFNhbWUgVUlEIGFzIHBhcmVudCBmb3IgcHJvcGVyIGdyb3VwaW5nXG4gICAgICAgICAgcnJ1bGU6IHVuZGVmaW5lZCwgLy8gSW5zdGFuY2UgZXZlbnRzIGRvbid0IGhhdmUgUlJVTEVcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZWN1cnJpbmdFdmVudFxuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKHJlY3VycmluZ0V2ZW50KSA9PiB7XG4gICAgICAgIC8vIEZpbHRlciBvdXQgRVhEQVRFIGV4Y2x1c2lvbnNcbiAgICAgICAgY29uc3QgaGFzRXhkYXRlcyA9IGV2ZW50LmV4ZGF0ZXMgJiYgZXZlbnQuZXhkYXRlcy5sZW5ndGggPiAwXG4gICAgICAgIGlmIChoYXNFeGRhdGVzKSB7XG4gICAgICAgICAgY29uc3QgZXZlbnRTdGFydElTTyA9IHJlY3VycmluZ0V2ZW50LnN0YXJ0LnRvSVNPU3RyaW5nKClcbiAgICAgICAgICBjb25zdCBpc0V4Y2x1ZGVkID0gZXZlbnQuZXhkYXRlcy5pbmNsdWRlcyhldmVudFN0YXJ0SVNPKVxuICAgICAgICAgIGlmIChpc0V4Y2x1ZGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaWx0ZXIgdG8gb25seSBpbmNsdWRlIGV2ZW50cyB0aGF0IHNwYW4gdGhyb3VnaCB0aGUgb3JpZ2luYWwgcmVxdWVzdGVkIGRhdGUgcmFuZ2VcbiAgICAgICAgLy8gQW4gZXZlbnQgc3BhbnMgdGhlIHJhbmdlIGlmOiBldmVudF9zdGFydCA8IHJhbmdlX2VuZCBBTkQgZXZlbnRfZW5kID4gcmFuZ2Vfc3RhcnRcbiAgICAgICAgLy8gVXNlIGlzU2FtZU9yQmVmb3JlL2lzU2FtZU9yQWZ0ZXIgdG8gaW5jbHVkZSBib3VuZGFyeSBjYXNlc1xuICAgICAgICBjb25zdCBldmVudFNwYW5zUmFuZ2UgPVxuICAgICAgICAgIHJlY3VycmluZ0V2ZW50LnN0YXJ0LmlzU2FtZU9yQmVmb3JlKGVuZERhdGUpICYmXG4gICAgICAgICAgcmVjdXJyaW5nRXZlbnQuZW5kLmlzU2FtZU9yQWZ0ZXIoc3RhcnREYXRlKVxuXG4gICAgICAgIHJldHVybiBldmVudFNwYW5zUmFuZ2VcbiAgICAgIH0pXG5cbiAgICByZXR1cm4gcmVjdXJyaW5nRXZlbnRzXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLy8gSGFuZGxlIGludmFsaWQgUlJVTEUgb3B0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIFJSVUxFIG9wdGlvbnM6ICR7SlNPTi5zdHJpbmdpZnkoZXZlbnQucnJ1bGUpfS4gRXJyb3I6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgIClcbiAgfVxufVxuXG5pbnRlcmZhY2UgVXBkYXRlUmVjdXJyaW5nRXZlbnRQcm9wcyB7XG4gIHRhcmdldEV2ZW50OiBDYWxlbmRhckV2ZW50XG4gIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD5cbiAgY3VycmVudEV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIHNjb3BlOiAndGhpcycgfCAnZm9sbG93aW5nJyB8ICdhbGwnXG59XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVSZWN1cnJpbmdFdmVudCA9ICh7XG4gIHRhcmdldEV2ZW50LFxuICB1cGRhdGVzLFxuICBjdXJyZW50RXZlbnRzLFxuICBzY29wZSxcbn06IFVwZGF0ZVJlY3VycmluZ0V2ZW50UHJvcHMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuICBjb25zdCB1cGRhdGVkRXZlbnRzID0gWy4uLmN1cnJlbnRFdmVudHNdXG5cbiAgLy8gRmluZCB0aGUgYmFzZSByZWN1cnJpbmcgZXZlbnRcbiAgY29uc3QgYmFzZUV2ZW50SW5kZXggPSB1cGRhdGVkRXZlbnRzLmZpbmRJbmRleCgoZSkgPT4ge1xuICAgIGNvbnN0IHBhcmVudFVpZCA9IGUudWlkIHx8IGAke2UuaWR9QGlsYW15LmNhbGVuZGFyYFxuICAgIHJldHVybiBwYXJlbnRVaWQgPT09IHRhcmdldEV2ZW50LnVpZCAmJiBlLnJydWxlICYmICFlLnJlY3VycmVuY2VJZFxuICB9KVxuXG4gIGlmIChiYXNlRXZlbnRJbmRleCA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Jhc2UgcmVjdXJyaW5nIGV2ZW50IG5vdCBmb3VuZCcpXG4gIH1cblxuICBjb25zdCBiYXNlRXZlbnQgPSB1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XVxuXG4gIHN3aXRjaCAoc2NvcGUpIHtcbiAgICBjYXNlICd0aGlzJzoge1xuICAgICAgLy8gXCJUaGlzIGV2ZW50IG9ubHlcIiAtIEFkZCBFWERBVEUgdG8gYmFzZSBldmVudCBhbmQgY3JlYXRlIHN0YW5kYWxvbmUgbW9kaWZpZWQgZXZlbnRcbiAgICAgIGNvbnN0IHRhcmdldEV2ZW50U3RhcnRJU08gPSB0YXJnZXRFdmVudC5zdGFydC50b0lTT1N0cmluZygpXG4gICAgICBjb25zdCBleGlzdGluZ0V4ZGF0ZXMgPSBiYXNlRXZlbnQuZXhkYXRlcyB8fCBbXVxuICAgICAgY29uc3QgdXBkYXRlZEV4ZGF0ZXMgPSBbLi4uZXhpc3RpbmdFeGRhdGVzLCB0YXJnZXRFdmVudFN0YXJ0SVNPXVxuXG4gICAgICBjb25zdCB1cGRhdGVkQmFzZUV2ZW50ID0ge1xuICAgICAgICAuLi5iYXNlRXZlbnQsXG4gICAgICAgIGV4ZGF0ZXM6IHVwZGF0ZWRFeGRhdGVzLFxuICAgICAgfVxuICAgICAgdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB1cGRhdGVkQmFzZUV2ZW50XG5cbiAgICAgIC8vIENyZWF0ZSBzdGFuZGFsb25lIG1vZGlmaWVkIGV2ZW50IHdpdGggcmVjdXJyZW5jZUlkXG4gICAgICBjb25zdCBtb2RpZmllZEV2ZW50SWQgPSBgJHt0YXJnZXRFdmVudC5pZH1fbW9kaWZpZWRfJHtEYXRlLm5vdygpfWBcbiAgICAgIGNvbnN0IG1vZGlmaWVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgPSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVE9ETzogZml4IHRoZSB0eXBlc1xuICAgICAgICAuLi5vbWl0S2V5cyh0YXJnZXRFdmVudCwgWyd3aWR0aCcsICdoZWlnaHQnLCAndG9wJywgJ2xlZnQnLCAncmlnaHQnXSksXG4gICAgICAgIC4uLnVwZGF0ZXMsXG4gICAgICAgIGlkOiBtb2RpZmllZEV2ZW50SWQsXG4gICAgICAgIHJlY3VycmVuY2VJZDogdGFyZ2V0RXZlbnRTdGFydElTTywgLy8gVGhpcyBtYXJrcyBpdCBhcyBhIG1vZGlmaWVkIGluc3RhbmNlXG4gICAgICAgIHVpZDogYmFzZUV2ZW50LnVpZCB8fCBgJHtiYXNlRXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYCwgLy8gS2VlcCBzYW1lIFVJRCBhcyBiYXNlIGV2ZW50IChpQ2FsZW5kYXIgc3RhbmRhcmQpXG4gICAgICAgIHJydWxlOiB1bmRlZmluZWQsIC8vIFN0YW5kYWxvbmUgZXZlbnRzIGRvbid0IGhhdmUgUlJVTEVcbiAgICAgIH0gYXMgQ2FsZW5kYXJFdmVudFxuICAgICAgdXBkYXRlZEV2ZW50cy5wdXNoKG1vZGlmaWVkRXZlbnQpXG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGNhc2UgJ2ZvbGxvd2luZyc6IHtcbiAgICAgIC8vIFwiVGhpcyBhbmQgZm9sbG93aW5nXCIgLSBUZXJtaW5hdGUgb3JpZ2luYWwgc2VyaWVzIGFuZCBjcmVhdGUgbmV3IHNlcmllc1xuXG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIHRlcm1pbmF0aW9uIGRhdGU6IGRheSBiZWZvcmUgdGFyZ2V0IHdpdGggZW5kIG9mIGRheSB0aW1lXG4gICAgICAvLyBUaGlzIGVuc3VyZXMgdGhlIGxhc3Qgb2NjdXJyZW5jZSBiZWZvcmUgdGFyZ2V0IGlzIGluY2x1ZGVkIGluIHRoZSB0ZXJtaW5hdGVkIHNlcmllc1xuICAgICAgY29uc3QgZGF5QmVmb3JlVGFyZ2V0ID0gdGFyZ2V0RXZlbnQuc3RhcnQuc3VidHJhY3QoMSwgJ2RheScpXG4gICAgICBjb25zdCB0ZXJtaW5hdGlvbkRhdGUgPSBkYXlCZWZvcmVUYXJnZXQuZW5kT2YoJ2RheScpLnRvRGF0ZSgpXG5cbiAgICAgIC8vIFVwZGF0ZSBvcmlnaW5hbCBzZXJpZXMgd2l0aCBVTlRJTCB0byBlbmQgYmVmb3JlIHRhcmdldCBkYXRlXG4gICAgICBjb25zdCB0ZXJtaW5hdGVkRXZlbnQgPSB7XG4gICAgICAgIC4uLmJhc2VFdmVudCxcbiAgICAgICAgcnJ1bGU6IHtcbiAgICAgICAgICAuLi5iYXNlRXZlbnQucnJ1bGUsXG4gICAgICAgICAgdW50aWw6IHRlcm1pbmF0aW9uRGF0ZSxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICAgIHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdGVybWluYXRlZEV2ZW50XG5cbiAgICAgIC8vIENyZWF0ZSBuZXcgc2VyaWVzIHN0YXJ0aW5nIGZyb20gdGFyZ2V0IGRhdGVcbiAgICAgIGNvbnN0IG9yaWdpbmFsRHVyYXRpb24gPSBiYXNlRXZlbnQuZW5kLmRpZmYoYmFzZUV2ZW50LnN0YXJ0KVxuICAgICAgY29uc3QgbmV3U2VyaWVzU3RhcnRUaW1lID0gdXBkYXRlcy5zdGFydCB8fCB0YXJnZXRFdmVudC5zdGFydFxuICAgICAgY29uc3QgbmV3U2VyaWVzRW5kVGltZSA9XG4gICAgICAgIHVwZGF0ZXMuZW5kIHx8IG5ld1Nlcmllc1N0YXJ0VGltZS5hZGQob3JpZ2luYWxEdXJhdGlvbilcbiAgICAgIGNvbnN0IG5ld1Nlcmllc0lkID0gYCR7YmFzZUV2ZW50LmlkfV9mb2xsb3dpbmdgXG4gICAgICBjb25zdCBuZXdTZXJpZXNVSUQgPSBgJHtuZXdTZXJpZXNJZH1AaWxhbXkuY2FsZW5kYXJgXG5cbiAgICAgIGNvbnN0IG5ld1Nlcmllc0V2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuICAgICAgICAuLi5iYXNlRXZlbnQsXG4gICAgICAgIC4uLnVwZGF0ZXMsXG4gICAgICAgIHJydWxlOiB7XG4gICAgICAgICAgLi4uYmFzZUV2ZW50LnJydWxlLFxuICAgICAgICAgIC4uLnVwZGF0ZXMucnJ1bGUsXG4gICAgICAgICAgZHRzdGFydDogbmV3U2VyaWVzU3RhcnRUaW1lLnRvRGF0ZSgpLFxuICAgICAgICB9LFxuICAgICAgICBpZDogbmV3U2VyaWVzSWQsXG4gICAgICAgIHVpZDogbmV3U2VyaWVzVUlELCAvLyBOZXcgVUlEIGZvciBuZXcgc2VyaWVzXG4gICAgICAgIHN0YXJ0OiBuZXdTZXJpZXNTdGFydFRpbWUsXG4gICAgICAgIGVuZDogbmV3U2VyaWVzRW5kVGltZSxcbiAgICAgICAgcmVjdXJyZW5jZUlkOiB1bmRlZmluZWQsIC8vIFRoaXMgaXMgYSBuZXcgYmFzZSBldmVudCwgbm90IGFuIGluc3RhbmNlXG4gICAgICB9XG4gICAgICB1cGRhdGVkRXZlbnRzLnB1c2gobmV3U2VyaWVzRXZlbnQpXG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGNhc2UgJ2FsbCc6IHtcbiAgICAgIC8vIFwiQWxsIGV2ZW50c1wiIC0gVXBkYXRlIHRoZSBiYXNlIHJlY3VycmluZyBldmVudFxuICAgICAgY29uc3QgdXBkYXRlZEJhc2VFdmVudCA9IHtcbiAgICAgICAgLi4uYmFzZUV2ZW50LFxuICAgICAgICAuLi51cGRhdGVzLFxuICAgICAgfVxuICAgICAgdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB1cGRhdGVkQmFzZUV2ZW50XG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHNjb3BlOiAke3Njb3BlfS4gTXVzdCBiZSAndGhpcycsICdmb2xsb3dpbmcnLCBvciAnYWxsJ2BcbiAgICAgIClcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVkRXZlbnRzXG59XG5cbmludGVyZmFjZSBEZWxldGVSZWN1cnJpbmdFdmVudFByb3BzIHtcbiAgdGFyZ2V0RXZlbnQ6IENhbGVuZGFyRXZlbnRcbiAgY3VycmVudEV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIHNjb3BlOiAndGhpcycgfCAnZm9sbG93aW5nJyB8ICdhbGwnXG59XG5cbmV4cG9ydCBjb25zdCBkZWxldGVSZWN1cnJpbmdFdmVudCA9ICh7XG4gIHRhcmdldEV2ZW50LFxuICBjdXJyZW50RXZlbnRzLFxuICBzY29wZSxcbn06IERlbGV0ZVJlY3VycmluZ0V2ZW50UHJvcHMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuICBjb25zdCB1cGRhdGVkRXZlbnRzID0gWy4uLmN1cnJlbnRFdmVudHNdXG5cbiAgLy8gRmluZCB0aGUgYmFzZSByZWN1cnJpbmcgZXZlbnRcbiAgY29uc3QgYmFzZUV2ZW50SW5kZXggPSB1cGRhdGVkRXZlbnRzLmZpbmRJbmRleCgoZSkgPT4ge1xuICAgIGNvbnN0IHBhcmVudFVpZCA9IGUudWlkIHx8IGAke2UuaWR9QGlsYW15LmNhbGVuZGFyYFxuICAgIHJldHVybiBwYXJlbnRVaWQgPT09IHRhcmdldEV2ZW50LnVpZCAmJiBlLnJydWxlICYmICFlLnJlY3VycmVuY2VJZFxuICB9KVxuXG4gIGlmIChiYXNlRXZlbnRJbmRleCA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Jhc2UgcmVjdXJyaW5nIGV2ZW50IG5vdCBmb3VuZCcpXG4gIH1cblxuICBjb25zdCBiYXNlRXZlbnQgPSB1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XVxuXG4gIHN3aXRjaCAoc2NvcGUpIHtcbiAgICBjYXNlICd0aGlzJzoge1xuICAgICAgLy8gXCJUaGlzIGV2ZW50IG9ubHlcIiAtIEFkZCBFWERBVEUgdG8gZXhjbHVkZSB0aGlzIG9jY3VycmVuY2VcbiAgICAgIGNvbnN0IHRhcmdldEV2ZW50U3RhcnRJU08gPSB0YXJnZXRFdmVudC5zdGFydC50b0lTT1N0cmluZygpXG4gICAgICBjb25zdCBleGlzdGluZ0V4ZGF0ZXMgPSBiYXNlRXZlbnQuZXhkYXRlcyB8fCBbXVxuICAgICAgY29uc3QgdXBkYXRlZEV4ZGF0ZXMgPSBbLi4uZXhpc3RpbmdFeGRhdGVzLCB0YXJnZXRFdmVudFN0YXJ0SVNPXVxuXG4gICAgICBjb25zdCB1cGRhdGVkQmFzZUV2ZW50ID0geyAuLi5iYXNlRXZlbnQsIGV4ZGF0ZXM6IHVwZGF0ZWRFeGRhdGVzIH1cbiAgICAgIHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdXBkYXRlZEJhc2VFdmVudFxuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBjYXNlICdmb2xsb3dpbmcnOiB7XG4gICAgICAvLyBcIlRoaXMgYW5kIGZvbGxvd2luZ1wiIC0gVGVybWluYXRlIHNlcmllcyB3aXRoIFVOVElMIGJlZm9yZSB0YXJnZXQgZGF0ZVxuXG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIHRlcm1pbmF0aW9uIGRhdGU6IGRheSBiZWZvcmUgdGFyZ2V0IHdpdGggZW5kIG9mIGRheSB0aW1lXG4gICAgICAvLyBUaGlzIGVuc3VyZXMgdGhlIGxhc3Qgb2NjdXJyZW5jZSBiZWZvcmUgdGFyZ2V0IGlzIGluY2x1ZGVkIGluIHRoZSB0ZXJtaW5hdGVkIHNlcmllc1xuICAgICAgY29uc3QgZGF5QmVmb3JlVGFyZ2V0ID0gdGFyZ2V0RXZlbnQuc3RhcnQuc3VidHJhY3QoMSwgJ2RheScpXG4gICAgICBjb25zdCB0ZXJtaW5hdGlvbkRhdGUgPSBkYXlCZWZvcmVUYXJnZXQuZW5kT2YoJ2RheScpLnRvRGF0ZSgpXG5cbiAgICAgIGNvbnN0IHRlcm1pbmF0ZWRFdmVudCA9IHtcbiAgICAgICAgLi4uYmFzZUV2ZW50LFxuICAgICAgICBycnVsZToge1xuICAgICAgICAgIC4uLmJhc2VFdmVudC5ycnVsZSxcbiAgICAgICAgICB1bnRpbDogdGVybWluYXRpb25EYXRlLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgICAgdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB0ZXJtaW5hdGVkRXZlbnRcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgY2FzZSAnYWxsJzoge1xuICAgICAgLy8gXCJBbGwgZXZlbnRzXCIgLSBSZW1vdmUgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzXG4gICAgICBjb25zdCBldmVudHNXaXRob3V0VGFyZ2V0U2VyaWVzID0gdXBkYXRlZEV2ZW50cy5maWx0ZXIoXG4gICAgICAgIChlKSA9PiBlLnVpZCAhPT0gdGFyZ2V0RXZlbnQudWlkXG4gICAgICApXG4gICAgICByZXR1cm4gZXZlbnRzV2l0aG91dFRhcmdldFNlcmllc1xuICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHNjb3BlOiAke3Njb3BlfS4gTXVzdCBiZSAndGhpcycsICdmb2xsb3dpbmcnLCBvciAnYWxsJ2BcbiAgICAgIClcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVkRXZlbnRzXG59XG4iLAogICAgImltcG9ydCB7XG4gIENhcmQsXG4gIENhcmRDb250ZW50LFxuICBDYXJkSGVhZGVyLFxuICBDYXJkVGl0bGUsXG4gIENoZWNrYm94LFxuICBEYXRlUGlja2VyLFxuICBJbnB1dCxcbiAgTGFiZWwsXG4gIFNlbGVjdCxcbiAgU2VsZWN0Q29udGVudCxcbiAgU2VsZWN0SXRlbSxcbiAgU2VsZWN0VHJpZ2dlcixcbiAgU2VsZWN0VmFsdWUsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aSdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IFJSdWxlT3B0aW9ucyB9IGZyb20gJ0AvbGliL3JlY3VycmVuY2UtaGFuZGxlci90eXBlcydcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFJSdWxlIH0gZnJvbSAncnJ1bGUnXG5pbXBvcnQgdHlwZSB7IFdlZWtkYXkgfSBmcm9tICdycnVsZSdcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuXG4vLyBOYXR1cmFsIGxhbmd1YWdlIGRlc2NyaXB0aW9uIGZ1bmN0aW9uIHVzaW5nIFJSdWxlJ3MgYnVpbHQtaW4gaGVscGVyIG1ldGhvZHNcbmZ1bmN0aW9uIGdldFJSdWxlRGVzY3JpcHRpb24oXG4gIHJydWxlT3B0aW9uczogUlJ1bGVPcHRpb25zIHwgbnVsbCxcbiAgdDogKGtleTogc3RyaW5nKSA9PiBzdHJpbmdcbik6IHN0cmluZyB7XG4gIGlmICghcnJ1bGVPcHRpb25zKSB7XG4gICAgcmV0dXJuIHQoJ2N1c3RvbVJlY3VycmVuY2UnKVxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBDcmVhdGUgUlJ1bGUgaW5zdGFuY2UgZGlyZWN0bHkgZnJvbSBvcHRpb25zXG4gICAgY29uc3QgcnVsZSA9IG5ldyBSUnVsZShycnVsZU9wdGlvbnMpXG5cbiAgICAvLyBVc2UgUlJ1bGUncyBidWlsdC1pbiBuYXR1cmFsIGxhbmd1YWdlIGNvbnZlcnNpb24gd2l0aCB0b1RleHQoKVxuICAgIGNvbnN0IG5hdHVyYWxUZXh0ID0gcnVsZS50b1RleHQoKVxuXG4gICAgLy8gSGFuZGxlIGNhc2VzIHdoZXJlIFJSdWxlIGNhbid0IGNvbnZlcnQgdG8gbmF0dXJhbCBsYW5ndWFnZVxuICAgIGlmIChcbiAgICAgICFuYXR1cmFsVGV4dCB8fFxuICAgICAgbmF0dXJhbFRleHQuaW5jbHVkZXMoJ1JSdWxlIGVycm9yJykgfHxcbiAgICAgIG5hdHVyYWxUZXh0LmluY2x1ZGVzKCdVbmFibGUgdG8gZnVsbHkgY29udmVydCcpIHx8XG4gICAgICBuYXR1cmFsVGV4dC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdlcnJvcicpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdCgnY3VzdG9tUmVjdXJyZW5jZScpXG4gICAgfVxuXG4gICAgLy8gQ2FwaXRhbGl6ZSBmaXJzdCBsZXR0ZXIgZm9yIGNvbnNpc3RlbnQgZm9ybWF0dGluZ1xuICAgIHJldHVybiBuYXR1cmFsVGV4dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG5hdHVyYWxUZXh0LnNsaWNlKDEpXG4gIH0gY2F0Y2gge1xuICAgIC8vIElmIHBhcnNpbmcgZmFpbHMsIHJldHVybiBmYWxsYmFja1xuICAgIHJldHVybiB0KCdjdXN0b21SZWN1cnJlbmNlJylcbiAgfVxufVxuXG5pbnRlcmZhY2UgUmVjdXJyZW5jZUVkaXRvclByb3BzIHtcbiAgdmFsdWU/OiBSUnVsZU9wdGlvbnMgfCBudWxsXG4gIG9uQ2hhbmdlOiAocnJ1bGVPcHRpb25zOiBSUnVsZU9wdGlvbnMgfCBudWxsKSA9PiB2b2lkXG59XG5cbmV4cG9ydCBjb25zdCBSZWN1cnJlbmNlRWRpdG9yOiBSZWFjdC5GQzxSZWN1cnJlbmNlRWRpdG9yUHJvcHM+ID0gKHtcbiAgdmFsdWUsXG4gIG9uQ2hhbmdlLFxufSkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG4gIGNvbnN0IFtzaG93UmVjdXJyZW5jZSwgc2V0U2hvd1JlY3VycmVuY2VdID0gdXNlU3RhdGUoISF2YWx1ZSlcblxuICAvLyBDcmVhdGUgV0VFS19EQVlTIGFycmF5IHdpdGggdHJhbnNsYXRpb25zXG4gIGNvbnN0IFdFRUtfREFZUyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gW1xuICAgICAgeyB2YWx1ZTogUlJ1bGUuU1UsIGxhYmVsOiB0KCdzdW5kYXknKSwgc2hvcnQ6IHQoJ3N1bicpIH0sXG4gICAgICB7IHZhbHVlOiBSUnVsZS5NTywgbGFiZWw6IHQoJ21vbmRheScpLCBzaG9ydDogdCgnbW9uJykgfSxcbiAgICAgIHsgdmFsdWU6IFJSdWxlLlRVLCBsYWJlbDogdCgndHVlc2RheScpLCBzaG9ydDogdCgndHVlJykgfSxcbiAgICAgIHsgdmFsdWU6IFJSdWxlLldFLCBsYWJlbDogdCgnd2VkbmVzZGF5JyksIHNob3J0OiB0KCd3ZWQnKSB9LFxuICAgICAgeyB2YWx1ZTogUlJ1bGUuVEgsIGxhYmVsOiB0KCd0aHVyc2RheScpLCBzaG9ydDogdCgndGh1JykgfSxcbiAgICAgIHsgdmFsdWU6IFJSdWxlLkZSLCBsYWJlbDogdCgnZnJpZGF5JyksIHNob3J0OiB0KCdmcmknKSB9LFxuICAgICAgeyB2YWx1ZTogUlJ1bGUuU0EsIGxhYmVsOiB0KCdzYXR1cmRheScpLCBzaG9ydDogdCgnc2F0JykgfSxcbiAgICBdLFxuICAgIFt0XVxuICApXG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgUlJ1bGUgZnJlcXVlbmN5IHRvIHN0cmluZ1xuICBjb25zdCBnZXRGcmVxdWVuY3lTdHJpbmcgPSAoZnJlcTogUlJ1bGVPcHRpb25zWydmcmVxJ10pOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IGZyZXFNYXA6IFJlY29yZDxudW1iZXIsIHN0cmluZz4gPSB7XG4gICAgICBbUlJ1bGUuREFJTFldOiAnREFJTFknLFxuICAgICAgW1JSdWxlLldFRUtMWV06ICdXRUVLTFknLFxuICAgICAgW1JSdWxlLk1PTlRITFldOiAnTU9OVEhMWScsXG4gICAgICBbUlJ1bGUuWUVBUkxZXTogJ1lFQVJMWScsXG4gICAgfVxuICAgIHJldHVybiBmcmVxTWFwW2ZyZXFdIHx8ICdEQUlMWSdcbiAgfVxuXG4gIC8vIFdvcmsgd2l0aCBjb21wbGV0ZSBSUnVsZU9wdGlvbnMgLSBkdHN0YXJ0IGNvbWVzIGZyb20gcGFyZW50IEV2ZW50Rm9ybVxuICBjb25zdCBbcnJ1bGVPcHRpb25zLCBzZXRSUnVsZU9wdGlvbnNdID0gdXNlU3RhdGU8UlJ1bGVPcHRpb25zIHwgbnVsbD4oXG4gICAgKCkgPT4gdmFsdWUgfHwgbnVsbFxuICApXG5cbiAgLy8gU3luYyBzdGF0ZSB3aGVuIHZhbHVlIHByb3AgY2hhbmdlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFNob3dSZWN1cnJlbmNlKCEhdmFsdWUpXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBzZXRSUnVsZU9wdGlvbnModmFsdWUpXG4gICAgfVxuICB9LCBbdmFsdWVdKVxuXG4gIGNvbnN0IHVwZGF0ZVJSdWxlID0gKHVwZGF0ZXM6IFBhcnRpYWw8UlJ1bGVPcHRpb25zPikgPT4ge1xuICAgIGlmICghcnJ1bGVPcHRpb25zKSB7XG4gICAgICByZXR1cm4gLy8gQ2FuJ3QgdXBkYXRlIGlmIG5vIGJhc2Ugb3B0aW9ucyBleGlzdFxuICAgIH1cblxuICAgIGNvbnN0IG5ld09wdGlvbnM6IFJSdWxlT3B0aW9ucyA9IHsgLi4ucnJ1bGVPcHRpb25zLCAuLi51cGRhdGVzIH1cbiAgICBzZXRSUnVsZU9wdGlvbnMobmV3T3B0aW9ucylcblxuICAgIGlmIChzaG93UmVjdXJyZW5jZSkge1xuICAgICAgb25DaGFuZ2UobmV3T3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgb25DaGFuZ2UobnVsbClcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVSZWN1cnJlbmNlVG9nZ2xlID0gKGNoZWNrZWQ6IGJvb2xlYW4pID0+IHtcbiAgICBzZXRTaG93UmVjdXJyZW5jZShjaGVja2VkKVxuICAgIGlmIChjaGVja2VkKSB7XG4gICAgICBpZiAocnJ1bGVPcHRpb25zKSB7XG4gICAgICAgIG9uQ2hhbmdlKHJydWxlT3B0aW9ucylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENyZWF0ZSBkZWZhdWx0IFJSdWxlIHdoZW4gdG9nZ2xpbmcgb24gZm9yIHRoZSBmaXJzdCB0aW1lXG4gICAgICAgIC8vIE5vdGU6IGR0c3RhcnQgd2lsbCBiZSBzZXQgYnkgdGhlIHBhcmVudCBFdmVudEZvcm1cbiAgICAgICAgY29uc3QgZGVmYXVsdFJSdWxlOiBQYXJ0aWFsPFJSdWxlT3B0aW9ucz4gPSB7XG4gICAgICAgICAgZnJlcTogUlJ1bGUuREFJTFksXG4gICAgICAgICAgaW50ZXJ2YWw6IDEsXG4gICAgICAgIH1cbiAgICAgICAgc2V0UlJ1bGVPcHRpb25zKGRlZmF1bHRSUnVsZSBhcyBSUnVsZU9wdGlvbnMpXG4gICAgICAgIG9uQ2hhbmdlKGRlZmF1bHRSUnVsZSBhcyBSUnVsZU9wdGlvbnMpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uQ2hhbmdlKG51bGwpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRnJlcXVlbmN5Q2hhbmdlID0gKGZyZXF1ZW5jeTogc3RyaW5nKSA9PiB7XG4gICAgLy8gQ29udmVydCBzdHJpbmcgdG8gUlJ1bGUgZnJlcXVlbmN5IGNvbnN0YW50XG4gICAgY29uc3QgZnJlcU1hcDogUmVjb3JkPHN0cmluZywgUlJ1bGVPcHRpb25zWydmcmVxJ10+ID0ge1xuICAgICAgREFJTFk6IFJSdWxlLkRBSUxZLFxuICAgICAgV0VFS0xZOiBSUnVsZS5XRUVLTFksXG4gICAgICBNT05USExZOiBSUnVsZS5NT05USExZLFxuICAgICAgWUVBUkxZOiBSUnVsZS5ZRUFSTFksXG4gICAgfVxuICAgIHVwZGF0ZVJSdWxlKHsgZnJlcTogZnJlcU1hcFtmcmVxdWVuY3ldIHx8IFJSdWxlLkRBSUxZIH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVJbnRlcnZhbENoYW5nZSA9IChlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgIGNvbnN0IGludGVydmFsID0gTWF0aC5tYXgoMSwgTnVtYmVyLnBhcnNlSW50KGUudGFyZ2V0LnZhbHVlKSB8fCAxKVxuICAgIHVwZGF0ZVJSdWxlKHsgaW50ZXJ2YWwgfSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUVuZFR5cGVDaGFuZ2UgPSAoZW5kVHlwZTogJ25ldmVyJyB8ICdjb3VudCcgfCAndW50aWwnKSA9PiB7XG4gICAgY29uc3QgdXBkYXRlczogUGFydGlhbDxSUnVsZU9wdGlvbnM+ID0ge31cblxuICAgIGlmIChlbmRUeXBlID09PSAnbmV2ZXInKSB7XG4gICAgICAvLyBSZW1vdmUgY291bnQgYW5kIHVudGlsXG4gICAgICB1cGRhdGVzLmNvdW50ID0gdW5kZWZpbmVkXG4gICAgICB1cGRhdGVzLnVudGlsID0gdW5kZWZpbmVkXG4gICAgfSBlbHNlIGlmIChlbmRUeXBlID09PSAnY291bnQnKSB7XG4gICAgICAvLyBTZXQgZGVmYXVsdCBjb3VudCBpZiBub25lIGV4aXN0cywgcmVtb3ZlIHVudGlsXG4gICAgICB1cGRhdGVzLmNvdW50ID0gcnJ1bGVPcHRpb25zPy5jb3VudCB8fCAxXG4gICAgICB1cGRhdGVzLnVudGlsID0gdW5kZWZpbmVkXG4gICAgfSBlbHNlIGlmIChlbmRUeXBlID09PSAndW50aWwnKSB7XG4gICAgICAvLyBTZXQgZGVmYXVsdCB1bnRpbCBkYXRlIGlmIG5vbmUgZXhpc3RzLCByZW1vdmUgY291bnRcbiAgICAgIHVwZGF0ZXMudW50aWwgPVxuICAgICAgICBycnVsZU9wdGlvbnM/LnVudGlsIHx8IGRheWpzKCkuYWRkKDEsICdtb250aCcpLmVuZE9mKCdkYXknKS50b0RhdGUoKVxuICAgICAgdXBkYXRlcy5jb3VudCA9IHVuZGVmaW5lZFxuICAgIH1cblxuICAgIHVwZGF0ZVJSdWxlKHVwZGF0ZXMpXG4gIH1cblxuICBjb25zdCBoYW5kbGVDb3VudENoYW5nZSA9IChlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgIGNvbnN0IGNvdW50ID0gTWF0aC5tYXgoMSwgTnVtYmVyLnBhcnNlSW50KGUudGFyZ2V0LnZhbHVlKSB8fCAxKVxuICAgIHVwZGF0ZVJSdWxlKHsgY291bnQgfSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUVuZERhdGVDaGFuZ2UgPSAoZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4ge1xuICAgIGNvbnN0IHVudGlsID0gZGF0ZSA/IGRheWpzKGRhdGUpLmVuZE9mKCdkYXknKS50b0RhdGUoKSA6IHVuZGVmaW5lZFxuICAgIHVwZGF0ZVJSdWxlKHsgdW50aWwgfSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURheVRvZ2dsZSA9IChkYXlJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3Qgd2Vla2RheU1hcCA9IFtcbiAgICAgIFJSdWxlLlNVLFxuICAgICAgUlJ1bGUuTU8sXG4gICAgICBSUnVsZS5UVSxcbiAgICAgIFJSdWxlLldFLFxuICAgICAgUlJ1bGUuVEgsXG4gICAgICBSUnVsZS5GUixcbiAgICAgIFJSdWxlLlNBLFxuICAgIF1cbiAgICBjb25zdCBjdXJyZW50V2Vla2RheXMgPSAocnJ1bGVPcHRpb25zPy5ieXdlZWtkYXkgYXMgV2Vla2RheVtdKSB8fCBbXVxuICAgIGNvbnN0IHRhcmdldFdlZWtkYXkgPSB3ZWVrZGF5TWFwW2RheUluZGV4XVxuXG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IGN1cnJlbnRXZWVrZGF5cy5pbmNsdWRlcyh0YXJnZXRXZWVrZGF5KVxuICAgIGxldCBuZXdXZWVrZGF5czogV2Vla2RheVtdXG5cbiAgICBpZiAoaXNTZWxlY3RlZCkge1xuICAgICAgbmV3V2Vla2RheXMgPSBjdXJyZW50V2Vla2RheXMuZmlsdGVyKChkYXkpID0+IGRheSAhPT0gdGFyZ2V0V2Vla2RheSlcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3V2Vla2RheXMgPSBbLi4uY3VycmVudFdlZWtkYXlzLCB0YXJnZXRXZWVrZGF5XVxuICAgIH1cblxuICAgIHVwZGF0ZVJSdWxlKHtcbiAgICAgIGJ5d2Vla2RheTogbmV3V2Vla2RheXMubGVuZ3RoID4gMCA/IG5ld1dlZWtkYXlzIDogdW5kZWZpbmVkLFxuICAgIH0pXG4gIH1cblxuICAvLyBIZWxwZXIgdG8gZGV0ZXJtaW5lIGVuZCB0eXBlIGZyb20gY3VycmVudCBvcHRpb25zXG4gIGNvbnN0IGdldEVuZFR5cGUgPSAoKTogJ25ldmVyJyB8ICdjb3VudCcgfCAndW50aWwnID0+IHtcbiAgICBpZiAocnJ1bGVPcHRpb25zPy51bnRpbCkge1xuICAgICAgcmV0dXJuICd1bnRpbCdcbiAgICB9XG4gICAgaWYgKHJydWxlT3B0aW9ucz8uY291bnQpIHtcbiAgICAgIHJldHVybiAnY291bnQnXG4gICAgfVxuICAgIHJldHVybiAnbmV2ZXInXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDYXJkIGRhdGEtdGVzdGlkPVwicmVjdXJyZW5jZS1lZGl0b3JcIj5cbiAgICAgIDxDYXJkSGVhZGVyIGNsYXNzTmFtZT1cInBiLTNcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cbiAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgIGlkPVwicmVjdXJyaW5nXCJcbiAgICAgICAgICAgIGNoZWNrZWQ9e3Nob3dSZWN1cnJlbmNlfVxuICAgICAgICAgICAgb25DaGVja2VkQ2hhbmdlPXtoYW5kbGVSZWN1cnJlbmNlVG9nZ2xlfVxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJ0b2dnbGUtcmVjdXJyZW5jZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8Q2FyZFRpdGxlIGNsYXNzTmFtZT1cInRleHQtc21cIj57dCgncmVwZWF0Jyl9PC9DYXJkVGl0bGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7c2hvd1JlY3VycmVuY2UgJiYgdmFsdWUgJiYgKFxuICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICB7Z2V0UlJ1bGVEZXNjcmlwdGlvbih2YWx1ZSwgdCl9XG4gICAgICAgICAgPC9wPlxuICAgICAgICApfVxuICAgICAgPC9DYXJkSGVhZGVyPlxuXG4gICAgICB7c2hvd1JlY3VycmVuY2UgJiYgKFxuICAgICAgICA8Q2FyZENvbnRlbnQgY2xhc3NOYW1lPVwicHQtMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS00XCI+XG4gICAgICAgICAgICB7LyogRnJlcXVlbmN5IFNlbGVjdGlvbiAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtNFwiPlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwiZnJlcXVlbmN5XCIgY2xhc3NOYW1lPVwidGV4dC14c1wiPlxuICAgICAgICAgICAgICAgICAge3QoJ3JlcGVhdHMnKX1cbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtnZXRGcmVxdWVuY3lTdHJpbmcocnJ1bGVPcHRpb25zPy5mcmVxID8/IFJSdWxlLkRBSUxZKX1cbiAgICAgICAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9e2hhbmRsZUZyZXF1ZW5jeUNoYW5nZX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8U2VsZWN0VHJpZ2dlclxuICAgICAgICAgICAgICAgICAgICBpZD1cImZyZXF1ZW5jeVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtOFwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZnJlcXVlbmN5LXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxTZWxlY3RWYWx1ZSAvPlxuICAgICAgICAgICAgICAgICAgPC9TZWxlY3RUcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgPFNlbGVjdENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxTZWxlY3RJdGVtIHZhbHVlPVwiREFJTFlcIj57dCgnZGFpbHknKX08L1NlbGVjdEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIDxTZWxlY3RJdGVtIHZhbHVlPVwiV0VFS0xZXCI+e3QoJ3dlZWtseScpfTwvU2VsZWN0SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgPFNlbGVjdEl0ZW0gdmFsdWU9XCJNT05USExZXCI+e3QoJ21vbnRobHknKX08L1NlbGVjdEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIDxTZWxlY3RJdGVtIHZhbHVlPVwiWUVBUkxZXCI+e3QoJ3llYXJseScpfTwvU2VsZWN0SXRlbT5cbiAgICAgICAgICAgICAgICAgIDwvU2VsZWN0Q29udGVudD5cbiAgICAgICAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8TGFiZWwgaHRtbEZvcj1cImludGVydmFsXCIgY2xhc3NOYW1lPVwidGV4dC14c1wiPlxuICAgICAgICAgICAgICAgICAge3QoJ2V2ZXJ5Jyl9XG4gICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgIGlkPVwiaW50ZXJ2YWxcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtycnVsZU9wdGlvbnM/LmludGVydmFsIHx8IDF9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlSW50ZXJ2YWxDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLThcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBXZWVrbHkgRGF5IFNlbGVjdGlvbiAqL31cbiAgICAgICAgICAgIHtycnVsZU9wdGlvbnM/LmZyZXEgPT09IFJSdWxlLldFRUtMWSAmJiAoXG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIj57dCgncmVwZWF0T24nKX08L0xhYmVsPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgZ2FwLTEgbXQtMVwiPlxuICAgICAgICAgICAgICAgICAge1dFRUtfREFZUy5tYXAoKGRheSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl3ZWVrZGF5QXJyYXkgPSBBcnJheS5pc0FycmF5KFxuICAgICAgICAgICAgICAgICAgICAgIHJydWxlT3B0aW9ucz8uYnl3ZWVrZGF5XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICA/IHJydWxlT3B0aW9ucy5ieXdlZWtkYXlcbiAgICAgICAgICAgICAgICAgICAgICA6IHJydWxlT3B0aW9ucz8uYnl3ZWVrZGF5XG4gICAgICAgICAgICAgICAgICAgICAgICA/IFtycnVsZU9wdGlvbnMuYnl3ZWVrZGF5XVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBbXVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gYnl3ZWVrZGF5QXJyYXkuaW5jbHVkZXMoZGF5LnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17YGRheS0ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTFcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17YGRheS0ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2lzU2VsZWN0ZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17KCkgPT4gaGFuZGxlRGF5VG9nZ2xlKGluZGV4KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbEZvcj17YGRheS0ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQteHMgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7ZGF5LnNob3J0fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgey8qIEVuZCBDb25kaXRpb24gKi99XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiPnt0KCdlbmRzJyl9PC9MYWJlbD5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTIgbXQtMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG4gICAgICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJuZXZlclwiXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2dldEVuZFR5cGUoKSA9PT0gJ25ldmVyJ31cbiAgICAgICAgICAgICAgICAgICAgb25DaGVja2VkQ2hhbmdlPXsoKSA9PiBoYW5kbGVFbmRUeXBlQ2hhbmdlKCduZXZlcicpfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwibmV2ZXJcIiBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+XG4gICAgICAgICAgICAgICAgICAgIHt0KCduZXZlcicpfVxuICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG4gICAgICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJhZnRlclwiXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2dldEVuZFR5cGUoKSA9PT0gJ2NvdW50J31cbiAgICAgICAgICAgICAgICAgICAgb25DaGVja2VkQ2hhbmdlPXsoKSA9PiBoYW5kbGVFbmRUeXBlQ2hhbmdlKCdjb3VudCcpfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwiYWZ0ZXJcIiBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+XG4gICAgICAgICAgICAgICAgICAgIHt0KCdhZnRlcicpfVxuICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgIHtnZXRFbmRUeXBlKCkgPT09ICdjb3VudCcgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cnJ1bGVPcHRpb25zPy5jb3VudCB8fCAxfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDb3VudENoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTYgdy0xNiB0ZXh0LXhzXCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImNvdW50LWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+e3QoJ29jY3VycmVuY2VzJyl9PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cbiAgICAgICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICBpZD1cIm9uXCJcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17Z2V0RW5kVHlwZSgpID09PSAndW50aWwnfVxuICAgICAgICAgICAgICAgICAgICBvbkNoZWNrZWRDaGFuZ2U9eygpID0+IGhhbmRsZUVuZFR5cGVDaGFuZ2UoJ3VudGlsJyl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPExhYmVsIGh0bWxGb3I9XCJvblwiIGNsYXNzTmFtZT1cInRleHQteHNcIj5cbiAgICAgICAgICAgICAgICAgICAge3QoJ29uJyl9XG4gICAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAge2dldEVuZFR5cGUoKSA9PT0gJ3VudGlsJyAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxEYXRlUGlja2VyXG4gICAgICAgICAgICAgICAgICAgICAgZGF0ZT17cnJ1bGVPcHRpb25zPy51bnRpbH1cbiAgICAgICAgICAgICAgICAgICAgICBzZXREYXRlPXtoYW5kbGVFbmREYXRlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtNlwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L0NhcmRDb250ZW50PlxuICAgICAgKX1cbiAgICA8L0NhcmQ+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHtcbiAgRGlhbG9nLFxuICBEaWFsb2dDb250ZW50LFxuICBEaWFsb2dEZXNjcmlwdGlvbixcbiAgRGlhbG9nRm9vdGVyLFxuICBEaWFsb2dIZWFkZXIsXG4gIERpYWxvZ1RpdGxlLFxuICBCdXR0b24sXG59IGZyb20gJ0AvY29tcG9uZW50cy91aSdcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRTY29wZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuXG5pbnRlcmZhY2UgUmVjdXJyZW5jZUVkaXREaWFsb2dQcm9wcyB7XG4gIGlzT3BlbjogYm9vbGVhblxuICBvbkNsb3NlOiAoKSA9PiB2b2lkXG4gIG9uQ29uZmlybTogKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB2b2lkXG4gIG9wZXJhdGlvblR5cGU6ICdlZGl0JyB8ICdkZWxldGUnXG4gIGV2ZW50VGl0bGU6IHN0cmluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVjdXJyZW5jZUVkaXREaWFsb2coe1xuICBpc09wZW4sXG4gIG9uQ2xvc2UsXG4gIG9uQ29uZmlybSxcbiAgb3BlcmF0aW9uVHlwZSxcbiAgZXZlbnRUaXRsZSxcbn06IFJlY3VycmVuY2VFZGl0RGlhbG9nUHJvcHMpIHtcbiAgY29uc3QgeyB0IH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIGNvbnN0IGhhbmRsZVNjb3BlU2VsZWN0ID0gKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG4gICAgb25Db25maXJtKHNjb3BlKVxuICAgIG9uQ2xvc2UoKVxuICB9XG5cbiAgY29uc3QgaXNFZGl0ID0gb3BlcmF0aW9uVHlwZSA9PT0gJ2VkaXQnXG5cbiAgcmV0dXJuIChcbiAgICA8RGlhbG9nIG9wZW49e2lzT3Blbn0gb25PcGVuQ2hhbmdlPXtvbkNsb3NlfT5cbiAgICAgIDxEaWFsb2dDb250ZW50IGNsYXNzTmFtZT1cIm1heC13LW1kXCI+XG4gICAgICAgIDxEaWFsb2dIZWFkZXI+XG4gICAgICAgICAgPERpYWxvZ1RpdGxlPlxuICAgICAgICAgICAge2lzRWRpdCA/IHQoJ2VkaXRSZWN1cnJpbmdFdmVudCcpIDogdCgnZGVsZXRlUmVjdXJyaW5nRXZlbnQnKX1cbiAgICAgICAgICA8L0RpYWxvZ1RpdGxlPlxuICAgICAgICAgIDxEaWFsb2dEZXNjcmlwdGlvbj5cbiAgICAgICAgICAgIFwie2V2ZW50VGl0bGV9XCJ7JyAnfVxuICAgICAgICAgICAge2lzRWRpdFxuICAgICAgICAgICAgICA/IHQoJ2VkaXRSZWN1cnJpbmdFdmVudFF1ZXN0aW9uJylcbiAgICAgICAgICAgICAgOiB0KCdkZWxldGVSZWN1cnJpbmdFdmVudFF1ZXN0aW9uJyl9XG4gICAgICAgICAgPC9EaWFsb2dEZXNjcmlwdGlvbj5cbiAgICAgICAgPC9EaWFsb2dIZWFkZXI+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTNcIj5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZVwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwganVzdGlmeS1zdGFydCBoLWF1dG8gcC00XCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVNjb3BlU2VsZWN0KCd0aGlzJyl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWxlZnRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPnt0KCd0aGlzRXZlbnQnKX08L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuICAgICAgICAgICAgICAgIHtpc0VkaXQgPyB0KCdvbmx5Q2hhbmdlVGhpcycpIDogdCgnb25seURlbGV0ZVRoaXMnKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L0J1dHRvbj5cblxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBqdXN0aWZ5LXN0YXJ0IGgtYXV0byBwLTRcIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2NvcGVTZWxlY3QoJ2ZvbGxvd2luZycpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZWZ0XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57dCgndGhpc0FuZEZvbGxvd2luZ0V2ZW50cycpfTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICAgICAge2lzRWRpdCA/IHQoJ2NoYW5nZVRoaXNBbmRGdXR1cmUnKSA6IHQoJ2RlbGV0ZVRoaXNBbmRGdXR1cmUnKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L0J1dHRvbj5cblxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBqdXN0aWZ5LXN0YXJ0IGgtYXV0byBwLTRcIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2NvcGVTZWxlY3QoJ2FsbCcpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZWZ0XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57dCgnYWxsRXZlbnRzJyl9PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cbiAgICAgICAgICAgICAgICB7aXNFZGl0ID8gdCgnY2hhbmdlRW50aXJlU2VyaWVzJykgOiB0KCdkZWxldGVFbnRpcmVTZXJpZXMnKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPERpYWxvZ0Zvb3Rlcj5cbiAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJvdXRsaW5lXCIgb25DbGljaz17b25DbG9zZX0+XG4gICAgICAgICAgICB7dCgnY2FuY2VsJyl9XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvRGlhbG9nRm9vdGVyPlxuICAgICAgPC9EaWFsb2dDb250ZW50PlxuICAgIDwvRGlhbG9nPlxuICApXG59XG4iLAogICAgImltcG9ydCB7IHVzZVN0YXRlLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0U2NvcGUgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMob25Db21wbGV0ZT86ICgpID0+IHZvaWQpIHtcbiAgY29uc3QgeyB1cGRhdGVSZWN1cnJpbmdFdmVudCwgZGVsZXRlUmVjdXJyaW5nRXZlbnQgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgY29uc3QgW2RpYWxvZ1N0YXRlLCBzZXREaWFsb2dTdGF0ZV0gPSB1c2VTdGF0ZTx7XG4gICAgaXNPcGVuOiBib29sZWFuXG4gICAgb3BlcmF0aW9uVHlwZTogJ2VkaXQnIHwgJ2RlbGV0ZSdcbiAgICBldmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcbiAgICB1cGRhdGVzPzogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuICAgIG9uQ29uZmlybT86IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4gdm9pZFxuICB9Pih7XG4gICAgaXNPcGVuOiBmYWxzZSxcbiAgICBvcGVyYXRpb25UeXBlOiAnZWRpdCcsXG4gICAgZXZlbnQ6IG51bGwsXG4gIH0pXG5cbiAgY29uc3Qgb3BlbkVkaXREaWFsb2cgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IENhbGVuZGFyRXZlbnQsIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHtcbiAgICAgIHNldERpYWxvZ1N0YXRlKHtcbiAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICBvcGVyYXRpb25UeXBlOiAnZWRpdCcsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICB1cGRhdGVzLFxuICAgICAgICBvbkNvbmZpcm06IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuICAgICAgICAgIHVwZGF0ZVJlY3VycmluZ0V2ZW50KGV2ZW50LCB1cGRhdGVzLCB7XG4gICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgIGV2ZW50RGF0ZTogZXZlbnQuc3RhcnQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbdXBkYXRlUmVjdXJyaW5nRXZlbnRdXG4gIClcblxuICBjb25zdCBvcGVuRGVsZXRlRGlhbG9nID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG4gICAgICBzZXREaWFsb2dTdGF0ZSh7XG4gICAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgICAgb3BlcmF0aW9uVHlwZTogJ2RlbGV0ZScsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICBvbkNvbmZpcm06IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuICAgICAgICAgIGRlbGV0ZVJlY3VycmluZ0V2ZW50KGV2ZW50LCB7XG4gICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgIGV2ZW50RGF0ZTogZXZlbnQuc3RhcnQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbZGVsZXRlUmVjdXJyaW5nRXZlbnRdXG4gIClcblxuICBjb25zdCBjbG9zZURpYWxvZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXREaWFsb2dTdGF0ZSh7XG4gICAgICBpc09wZW46IGZhbHNlLFxuICAgICAgb3BlcmF0aW9uVHlwZTogJ2VkaXQnLFxuICAgICAgZXZlbnQ6IG51bGwsXG4gICAgfSlcbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlQ29uZmlybSA9IHVzZUNhbGxiYWNrKFxuICAgIChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuICAgICAgaWYgKGRpYWxvZ1N0YXRlLm9uQ29uZmlybSkge1xuICAgICAgICBkaWFsb2dTdGF0ZS5vbkNvbmZpcm0oc2NvcGUpXG4gICAgICB9XG4gICAgICBjbG9zZURpYWxvZygpXG4gICAgICAvLyBDYWxsIG9uQ29tcGxldGUgdG8gY2xvc2UgdGhlIHBhcmVudCBmb3JtXG4gICAgICBvbkNvbXBsZXRlPy4oKVxuICAgIH0sXG4gICAgW2RpYWxvZ1N0YXRlLCBjbG9zZURpYWxvZywgb25Db21wbGV0ZV1cbiAgKVxuXG4gIHJldHVybiB7XG4gICAgZGlhbG9nU3RhdGUsXG4gICAgb3BlbkVkaXREaWFsb2csXG4gICAgb3BlbkRlbGV0ZURpYWxvZyxcbiAgICBjbG9zZURpYWxvZyxcbiAgICBoYW5kbGVDb25maXJtLFxuICB9XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuXG4vKipcbiAqIEV4cG9ydCBjYWxlbmRhciBldmVudHMgdG8gaUNhbGVuZGFyICguaWNhbCkgZm9ybWF0XG4gKiBGdWxseSBSRkMgNTU0NSBjb21wbGlhbnQgaUNhbGVuZGFyIGdlbmVyYXRpb25cbiAqL1xuXG4vKipcbiAqIEVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gaUNhbGVuZGFyIHRleHQgZmllbGRzXG4gKi9cbmNvbnN0IGVzY2FwZUlDYWxUZXh0ID0gKHRleHQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIHJldHVybiB0ZXh0XG4gICAgLnJlcGxhY2VBbGwoJ1xcXFwnLCAnXFxcXFxcXFwnKSAvLyBFc2NhcGUgYmFja3NsYXNoZXNcbiAgICAucmVwbGFjZUFsbCgnOycsICdcXFxcOycpIC8vIEVzY2FwZSBzZW1pY29sb25zXG4gICAgLnJlcGxhY2VBbGwoJywnLCAnXFxcXCwnKSAvLyBFc2NhcGUgY29tbWFzXG4gICAgLnJlcGxhY2VBbGwoJ1xcbicsICdcXFxcbicpIC8vIEVzY2FwZSBuZXdsaW5lc1xuICAgIC5yZXBsYWNlQWxsKCdcXHInLCAnJykgLy8gUmVtb3ZlIGNhcnJpYWdlIHJldHVybnNcbn1cblxuLyoqXG4gKiBGb3JtYXQgZGF0ZSBmb3IgaUNhbGVuZGFyIGZvcm1hdCAoWVlZWU1NRERUSEhNTVNTWiBmb3IgVVRDKVxuICovXG5jb25zdCBmb3JtYXRJQ2FsRGF0ZSA9IChkYXRlOiBkYXlqcy5EYXlqcywgYWxsRGF5ID0gZmFsc2UpOiBzdHJpbmcgPT4ge1xuICBpZiAoYWxsRGF5KSB7XG4gICAgcmV0dXJuIGRhdGUuZm9ybWF0KCdZWVlZTU1ERCcpXG4gIH1cbiAgcmV0dXJuIGRhdGUudXRjKCkuZm9ybWF0KCdZWVlZTU1ERFtUXUhIbW1zc1taXScpXG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSB1bmlxdWUgVUlEIGZvciBhbiBldmVudCBpZiBub3QgYWxyZWFkeSBwcmVzZW50XG4gKi9cbmNvbnN0IGdlbmVyYXRlVUlEID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogc3RyaW5nID0+IHtcbiAgaWYgKGV2ZW50LnVpZCkge1xuICAgIHJldHVybiBldmVudC51aWRcbiAgfVxuICByZXR1cm4gYCR7ZXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYFxufVxuXG4vKipcbiAqIENvbnZlcnQgUlJ1bGVPcHRpb25zIHRvIGlDYWxlbmRhciBSUlVMRSBzdHJpbmdcbiAqL1xuY29uc3QgZm9ybWF0UlJ1bGUgPSAocnJ1bGVPcHRpb25zOiB1bmtub3duKTogc3RyaW5nID0+IHtcbiAgdHJ5IHtcbiAgICAvLyBDcmVhdGUgUlJ1bGUgaW5zdGFuY2Ugd2l0aCBhcHByb3ByaWF0ZSB0eXBlIGNhc3RpbmdcbiAgICBjb25zdCBydWxlID0gbmV3IFJSdWxlKFxuICAgICAgcnJ1bGVPcHRpb25zIGFzIENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgUlJ1bGU+WzBdXG4gICAgKVxuICAgIGNvbnN0IHJydWxlU3RyaW5nID0gcnVsZS50b1N0cmluZygpXG4gICAgLy8gRXh0cmFjdCBqdXN0IHRoZSBSUlVMRSBwYXJ0IChyZW1vdmUgRFRTVEFSVCBpZiBwcmVzZW50KVxuICAgIGNvbnN0IHJydWxlUGFydCA9IHJydWxlU3RyaW5nXG4gICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAuZmluZCgobGluZSkgPT4gbGluZS5zdGFydHNXaXRoKCdSUlVMRTonKSlcbiAgICByZXR1cm4gcnJ1bGVQYXJ0IHx8ICcnXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAnJ1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydCBhIHNpbmdsZSBDYWxlbmRhckV2ZW50IHRvIGlDYWxlbmRhciBWRVZFTlQgc3RyaW5nXG4gKi9cbmNvbnN0IGV2ZW50VG9JQ2FsRXZlbnQgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXVxuXG4gIGxpbmVzLnB1c2goJ0JFR0lOOlZFVkVOVCcpXG5cbiAgLy8gVUlEIChyZXF1aXJlZClcbiAgbGluZXMucHVzaChgVUlEOiR7Z2VuZXJhdGVVSUQoZXZlbnQpfWApXG5cbiAgLy8gRFRTVEFSVCAocmVxdWlyZWQpXG4gIGNvbnN0IGR0c3RhcnQgPSBmb3JtYXRJQ2FsRGF0ZShldmVudC5zdGFydCwgZXZlbnQuYWxsRGF5KVxuICBpZiAoZXZlbnQuYWxsRGF5KSB7XG4gICAgbGluZXMucHVzaChgRFRTVEFSVDtWQUxVRT1EQVRFOiR7ZHRzdGFydH1gKVxuICB9IGVsc2Uge1xuICAgIGxpbmVzLnB1c2goYERUU1RBUlQ6JHtkdHN0YXJ0fWApXG4gIH1cblxuICAvLyBEVEVORCAocmVxdWlyZWQgZm9yIGV2ZW50cyB3aXRoIGR1cmF0aW9uKVxuICBjb25zdCBkdGVuZCA9IGZvcm1hdElDYWxEYXRlKGV2ZW50LmVuZCwgZXZlbnQuYWxsRGF5KVxuICBpZiAoZXZlbnQuYWxsRGF5KSB7XG4gICAgbGluZXMucHVzaChgRFRFTkQ7VkFMVUU9REFURToke2R0ZW5kfWApXG4gIH0gZWxzZSB7XG4gICAgbGluZXMucHVzaChgRFRFTkQ6JHtkdGVuZH1gKVxuICB9XG5cbiAgLy8gU1VNTUFSWSAodGl0bGUpXG4gIGxpbmVzLnB1c2goYFNVTU1BUlk6JHtlc2NhcGVJQ2FsVGV4dChldmVudC50aXRsZSl9YClcblxuICAvLyBERVNDUklQVElPTiAob3B0aW9uYWwpXG4gIGlmIChldmVudC5kZXNjcmlwdGlvbikge1xuICAgIGxpbmVzLnB1c2goYERFU0NSSVBUSU9OOiR7ZXNjYXBlSUNhbFRleHQoZXZlbnQuZGVzY3JpcHRpb24pfWApXG4gIH1cblxuICAvLyBMT0NBVElPTiAob3B0aW9uYWwpXG4gIGlmIChldmVudC5sb2NhdGlvbikge1xuICAgIGxpbmVzLnB1c2goYExPQ0FUSU9OOiR7ZXNjYXBlSUNhbFRleHQoZXZlbnQubG9jYXRpb24pfWApXG4gIH1cblxuICAvLyBSUlVMRSAocmVjdXJyZW5jZSBydWxlKVxuICBpZiAoZXZlbnQucnJ1bGUpIHtcbiAgICBjb25zdCBycnVsZVN0cmluZyA9IGZvcm1hdFJSdWxlKGV2ZW50LnJydWxlKVxuICAgIGlmIChycnVsZVN0cmluZykge1xuICAgICAgbGluZXMucHVzaChycnVsZVN0cmluZylcbiAgICB9XG4gIH1cblxuICAvLyBFWERBVEUgKGV4Y2VwdGlvbiBkYXRlcylcbiAgaWYgKGV2ZW50LmV4ZGF0ZXMgJiYgZXZlbnQuZXhkYXRlcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgZXhkYXRlcyA9IGV2ZW50LmV4ZGF0ZXNcbiAgICAgIC5tYXAoKGRhdGVTdHIpID0+IGZvcm1hdElDYWxEYXRlKGRheWpzKGRhdGVTdHIpLCBldmVudC5hbGxEYXkpKVxuICAgICAgLmpvaW4oJywnKVxuICAgIGxpbmVzLnB1c2goYEVYREFURToke2V4ZGF0ZXN9YClcbiAgfVxuXG4gIC8vIFJFQ1VSUkVOQ0UtSUQgKGZvciBtb2RpZmllZCBpbnN0YW5jZXMpXG4gIGlmIChldmVudC5yZWN1cnJlbmNlSWQpIHtcbiAgICBjb25zdCByZWN1cnJlbmNlSWQgPSBmb3JtYXRJQ2FsRGF0ZShkYXlqcyhldmVudC5yZWN1cnJlbmNlSWQpLCBldmVudC5hbGxEYXkpXG4gICAgbGluZXMucHVzaChgUkVDVVJSRU5DRS1JRDoke3JlY3VycmVuY2VJZH1gKVxuICB9XG5cbiAgLy8gRFRTVEFNUCAocmVxdWlyZWQgLSB3aGVuIHRoaXMgd2FzIGNyZWF0ZWQvbW9kaWZpZWQpXG4gIGNvbnN0IG5vdyA9IGRheWpzKCkudXRjKCkuZm9ybWF0KCdZWVlZTU1ERFtUXUhIbW1zc1taXScpXG4gIGxpbmVzLnB1c2goYERUU1RBTVA6JHtub3d9YClcblxuICAvLyBDUkVBVEVEICh3aGVuIGV2ZW50IHdhcyBjcmVhdGVkKVxuICBsaW5lcy5wdXNoKGBDUkVBVEVEOiR7bm93fWApXG5cbiAgLy8gTEFTVC1NT0RJRklFRCAod2hlbiBldmVudCB3YXMgbGFzdCBtb2RpZmllZClcbiAgbGluZXMucHVzaChgTEFTVC1NT0RJRklFRDoke25vd31gKVxuXG4gIC8vIFNUQVRVUyAoZGVmYXVsdCB0byBDT05GSVJNRUQpXG4gIGxpbmVzLnB1c2goJ1NUQVRVUzpDT05GSVJNRUQnKVxuXG4gIC8vIFNFUVVFTkNFICh2ZXJzaW9uIG51bWJlciwgZGVmYXVsdCB0byAwKVxuICBsaW5lcy5wdXNoKCdTRVFVRU5DRTowJylcblxuICAvLyBUUkFOU1AgKHRyYW5zcGFyZW5jeSAtIE9QQVFVRSBmb3IgYnVzeSB0aW1lKVxuICBsaW5lcy5wdXNoKCdUUkFOU1A6T1BBUVVFJylcblxuICBsaW5lcy5wdXNoKCdFTkQ6VkVWRU5UJylcblxuICByZXR1cm4gbGluZXMuam9pbignXFxyXFxuJylcbn1cblxuLyoqXG4gKiBGaWx0ZXIgZXZlbnRzIGZvciBwcm9wZXIgaUNhbGVuZGFyIGV4cG9ydFxuICogLSBJbmNsdWRlIGJhc2UgcmVjdXJyaW5nIGV2ZW50cyAod2l0aCBSUlVMRSlcbiAqIC0gSW5jbHVkZSBtb2RpZmllZCBpbnN0YW5jZXMgKHdpdGggcmVjdXJyZW5jZUlkKVxuICogLSBJbmNsdWRlIG5vbi1yZWN1cnJpbmcgZXZlbnRzXG4gKiAtIEVYQ0xVREUgZ2VuZXJhdGVkIHJlY3VycmluZyBpbnN0YW5jZXMgKG5vIHJydWxlLCBubyByZWN1cnJlbmNlSWQpXG4gKi9cbmNvbnN0IGZpbHRlckV2ZW50c0ZvckV4cG9ydCA9IChldmVudHM6IENhbGVuZGFyRXZlbnRbXSk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG4gIGNvbnN0IGV4cG9ydEV2ZW50czogQ2FsZW5kYXJFdmVudFtdID0gW11cbiAgY29uc3QgcHJvY2Vzc2VkVUlEcyA9IG5ldyBTZXQ8c3RyaW5nPigpXG5cbiAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAvLyBHZXQgb3IgZ2VuZXJhdGUgVUlEIGZvciB0aGUgZXZlbnRcbiAgICBjb25zdCBldmVudFVJRCA9IGV2ZW50LnVpZCB8fCBgJHtldmVudC5pZH1AaWxhbXkuY2FsZW5kYXJgXG5cbiAgICAvLyBDYXNlIDE6IEJhc2UgcmVjdXJyaW5nIGV2ZW50IChoYXMgUlJVTEUsIG5vIHJlY3VycmVuY2VJZClcbiAgICBpZiAoZXZlbnQucnJ1bGUgJiYgIWV2ZW50LnJlY3VycmVuY2VJZCkge1xuICAgICAgZXhwb3J0RXZlbnRzLnB1c2goZXZlbnQpXG4gICAgICBwcm9jZXNzZWRVSURzLmFkZChldmVudFVJRClcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gQ2FzZSAyOiBNb2RpZmllZCByZWN1cnJpbmcgaW5zdGFuY2UgKGhhcyByZWN1cnJlbmNlSWQsIG5vIFJSVUxFKVxuICAgIGlmIChldmVudC5yZWN1cnJlbmNlSWQgJiYgIWV2ZW50LnJydWxlKSB7XG4gICAgICBleHBvcnRFdmVudHMucHVzaChldmVudClcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gQ2FzZSAzOiBOb24tcmVjdXJyaW5nIGV2ZW50IChubyBSUlVMRSwgbm8gcmVjdXJyZW5jZUlkLCBubyBVSUQgcGF0dGVybilcbiAgICBpZiAoIWV2ZW50LnJydWxlICYmICFldmVudC5yZWN1cnJlbmNlSWQpIHtcbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBnZW5lcmF0ZWQgaW5zdGFuY2UgYnkgVUlEIHBhdHRlcm5cbiAgICAgIGNvbnN0IGlzR2VuZXJhdGVkSW5zdGFuY2UgPSBwcm9jZXNzZWRVSURzLmhhcyhldmVudFVJRClcblxuICAgICAgaWYgKCFpc0dlbmVyYXRlZEluc3RhbmNlKSB7XG4gICAgICAgIGV4cG9ydEV2ZW50cy5wdXNoKGV2ZW50KVxuICAgICAgfVxuICAgICAgLy8gU2tpcCBnZW5lcmF0ZWQgaW5zdGFuY2VzIC0gdGhleSdsbCBiZSByZWNyZWF0ZWQgYnkgUlJVTEVcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhwb3J0RXZlbnRzXG59XG5cbi8qKlxuICogRXhwb3J0IGV2ZW50cyB0byBpQ2FsZW5kYXIgZm9ybWF0XG4gKi9cbmV4cG9ydCBjb25zdCBleHBvcnRUb0lDYWxlbmRhciA9IChcbiAgZXZlbnRzOiBDYWxlbmRhckV2ZW50W10sXG4gIGNhbGVuZGFyTmFtZSA9ICdpbGFteSBDYWxlbmRhcidcbik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdXG5cbiAgLy8gQ2FsZW5kYXIgaGVhZGVyXG4gIGxpbmVzLnB1c2goJ0JFR0lOOlZDQUxFTkRBUicpXG4gIGxpbmVzLnB1c2goJ1ZFUlNJT046Mi4wJylcbiAgbGluZXMucHVzaCgnUFJPRElEOi0vL2lsYW15Ly9pbGFteSBDYWxlbmRhci8vRU4nKVxuICBsaW5lcy5wdXNoKCdDQUxTQ0FMRTpHUkVHT1JJQU4nKVxuICBsaW5lcy5wdXNoKCdNRVRIT0Q6UFVCTElTSCcpXG4gIGxpbmVzLnB1c2goYFgtV1ItQ0FMTkFNRToke2VzY2FwZUlDYWxUZXh0KGNhbGVuZGFyTmFtZSl9YClcbiAgbGluZXMucHVzaChgWC1XUi1DQUxERVNDOiR7ZXNjYXBlSUNhbFRleHQoYEV4cG9ydGVkIGZyb20gJHtjYWxlbmRhck5hbWV9YCl9YClcblxuICAvLyBBZGQgdGltZXpvbmUgaW5mb3JtYXRpb24gKFVUQylcbiAgbGluZXMucHVzaCgnQkVHSU46VlRJTUVaT05FJylcbiAgbGluZXMucHVzaCgnVFpJRDpVVEMnKVxuICBsaW5lcy5wdXNoKCdCRUdJTjpTVEFOREFSRCcpXG4gIGxpbmVzLnB1c2goJ0RUU1RBUlQ6MTk3MDAxMDFUMDAwMDAwJylcbiAgbGluZXMucHVzaCgnVFpOQU1FOlVUQycpXG4gIGxpbmVzLnB1c2goJ1RaT0ZGU0VURlJPTTorMDAwMCcpXG4gIGxpbmVzLnB1c2goJ1RaT0ZGU0VUVE86KzAwMDAnKVxuICBsaW5lcy5wdXNoKCdFTkQ6U1RBTkRBUkQnKVxuICBsaW5lcy5wdXNoKCdFTkQ6VlRJTUVaT05FJylcblxuICAvLyBGaWx0ZXIgZXZlbnRzIGZvciBwcm9wZXIgaUNhbGVuZGFyIGV4cG9ydFxuICBjb25zdCBmaWx0ZXJlZEV2ZW50cyA9IGZpbHRlckV2ZW50c0ZvckV4cG9ydChldmVudHMpXG5cbiAgLy8gQWRkIGVhY2ggZmlsdGVyZWQgZXZlbnRcbiAgZmlsdGVyZWRFdmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICBsaW5lcy5wdXNoKGV2ZW50VG9JQ2FsRXZlbnQoZXZlbnQpKVxuICB9KVxuXG4gIC8vIENhbGVuZGFyIGZvb3RlclxuICBsaW5lcy5wdXNoKCdFTkQ6VkNBTEVOREFSJylcblxuICByZXR1cm4gbGluZXMuam9pbignXFxyXFxuJylcbn1cblxuLyoqXG4gKiBEb3dubG9hZCBpQ2FsZW5kYXIgZmlsZSB0byB1c2VyJ3MgZGV2aWNlXG4gKi9cbmV4cG9ydCBjb25zdCBkb3dubG9hZElDYWxlbmRhciA9IChcbiAgZXZlbnRzOiBDYWxlbmRhckV2ZW50W10sXG4gIGZpbGVuYW1lID0gJ2NhbGVuZGFyLmljcycsXG4gIGNhbGVuZGFyTmFtZSA9ICdpbGFteSBDYWxlbmRhcidcbik6IHZvaWQgPT4ge1xuICBjb25zdCBpY2FsQ29udGVudCA9IGV4cG9ydFRvSUNhbGVuZGFyKGV2ZW50cywgY2FsZW5kYXJOYW1lKVxuXG4gIC8vIENyZWF0ZSBibG9iIGFuZCBkb3dubG9hZFxuICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2ljYWxDb250ZW50XSwge1xuICAgIHR5cGU6ICd0ZXh0L2NhbGVuZGFyO2NoYXJzZXQ9dXRmLTgnLFxuICB9KVxuXG4gIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYilcbiAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICBsaW5rLmhyZWYgPSB1cmxcbiAgbGluay5kb3dubG9hZCA9IGZpbGVuYW1lLmVuZHNXaXRoKCcuaWNzJykgPyBmaWxlbmFtZSA6IGAke2ZpbGVuYW1lfS5pY3NgXG5cbiAgLy8gVHJpZ2dlciBkb3dubG9hZFxuICBkb2N1bWVudC5ib2R5LmFwcGVuZChsaW5rKVxuICBsaW5rLmNsaWNrKClcbiAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKVxuXG4gIC8vIENsZWFuIHVwXG4gIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKVxufVxuIiwKICAgICJpbXBvcnQge1xuICBCdXR0b24sXG4gIFBvcG92ZXIsXG4gIFBvcG92ZXJDb250ZW50LFxuICBQb3BvdmVyVHJpZ2dlcixcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBkb3dubG9hZElDYWxlbmRhciB9IGZyb20gJ0AvbGliL2V4cG9ydC1pY2FsJ1xuaW1wb3J0IHsgQ2FsZW5kYXIgYXMgQ2FsZW5kYXJJY29uLCBEb3dubG9hZCwgTWVudSwgUGx1cyB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCBUaXRsZUNvbnRlbnQgZnJvbSAnLi90aXRsZS1jb250ZW50J1xuaW1wb3J0IFZpZXdDb250cm9scyBmcm9tICcuL3ZpZXctY29udHJvbHMnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliJ1xuXG5pbnRlcmZhY2UgSGVhZGVyUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuY29uc3QgSGVhZGVyOiBSZWFjdC5GQzxIZWFkZXJQcm9wcz4gPSAoeyBjbGFzc05hbWUgPSAnJyB9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICB2aWV3LFxuICAgIHNldFZpZXcsXG4gICAgbmV4dFBlcmlvZCxcbiAgICBwcmV2UGVyaW9kLFxuICAgIHRvZGF5LFxuICAgIG9wZW5FdmVudEZvcm0sXG4gICAgaGVhZGVyQ29tcG9uZW50LFxuICAgIGhlYWRlckNsYXNzTmFtZSxcbiAgICByYXdFdmVudHMsXG4gICAgdCxcbiAgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgLy8gU3RhdGUgZm9yIG1vYmlsZSBtZW51IHBvcG92ZXJcbiAgY29uc3QgW21vYmlsZVBvcG92ZXJPcGVuLCBzZXRNb2JpbGVQb3BvdmVyT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcblxuICAvLyBIYW5kbGUgdmlldyBjaGFuZ2Ugd2l0aCBvcHRpb25hbCBwb3BvdmVyIGNsb3NpbmdcbiAgY29uc3QgaGFuZGxlVmlld0NoYW5nZSA9IChcbiAgICBuZXdWaWV3OiAnZGF5JyB8ICd3ZWVrJyB8ICdtb250aCcgfCAneWVhcicsXG4gICAgY2xvc2VQb3BvdmVyID0gZmFsc2VcbiAgKSA9PiB7XG4gICAgc2V0VmlldyhuZXdWaWV3KVxuICAgIGlmIChjbG9zZVBvcG92ZXIpIHtcbiAgICAgIHNldE1vYmlsZVBvcG92ZXJPcGVuKGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSBpQ2FsZW5kYXIgZXhwb3J0XG4gIGNvbnN0IGhhbmRsZUV4cG9ydCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBmaWxlbmFtZSA9IGBpbGFteS1jYWxlbmRhci0ke25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdfS5pY3NgXG4gICAgZG93bmxvYWRJQ2FsZW5kYXIocmF3RXZlbnRzLCBmaWxlbmFtZSwgJ2lsYW15IENhbGVuZGFyJylcbiAgICBzZXRNb2JpbGVQb3BvdmVyT3BlbihmYWxzZSlcbiAgfSwgW3Jhd0V2ZW50c10pXG5cbiAgLy8gQ2FsbGJhY2sgZm9yIG5hdmlnYXRpb24gdGhhdCBhbHNvIGNsb3NlcyB0aGUgbW9iaWxlIHBvcG92ZXJcbiAgY29uc3QgaGFuZGxlTmF2aWdhdGlvbiA9IHtcbiAgICB0b2RheTogKCkgPT4ge1xuICAgICAgdG9kYXkoKVxuICAgICAgc2V0TW9iaWxlUG9wb3Zlck9wZW4oZmFsc2UpXG4gICAgfSxcbiAgICBwcmV2aW91czogKCkgPT4ge1xuICAgICAgcHJldlBlcmlvZCgpXG4gICAgICBzZXRNb2JpbGVQb3BvdmVyT3BlbihmYWxzZSlcbiAgICB9LFxuICAgIG5leHQ6ICgpID0+IHtcbiAgICAgIG5leHRQZXJpb2QoKVxuICAgICAgc2V0TW9iaWxlUG9wb3Zlck9wZW4oZmFsc2UpXG4gICAgfSxcbiAgfVxuXG4gIGNvbnN0IE5ld0V2ZW50QnV0dG9uID0gdXNlQ2FsbGJhY2soXG4gICAgKCkgPT4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgb25DbGljaz17KCkgPT4gb3BlbkV2ZW50Rm9ybSgpfVxuICAgICAgICAgIHZhcmlhbnQ9XCJkZWZhdWx0XCJcbiAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxQbHVzIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImhpZGRlbiBANHhsOmlubGluZVwiPnt0KCduZXcnKX08L3NwYW4+XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgKSxcbiAgICBbb3BlbkV2ZW50Rm9ybSwgdF1cbiAgKVxuXG4gIGlmIChoZWFkZXJDb21wb25lbnQpIHtcbiAgICAvLyBSZW5kZXIgY3VzdG9tIGhlYWRlciBjb21wb25lbnQgaWYgcHJvdmlkZWRcbiAgICByZXR1cm4gaGVhZGVyQ29tcG9uZW50XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7LyogQ2FsZW5kYXIgSGVhZGVyIHdpdGggZ3JpZCBsYXlvdXQgKi99XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT1cIkBjb250YWluZXIvYmFzZS1oZWFkZXIgdy1mdWxsXCJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1oZWFkZXJcIlxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICdmbGV4IGp1c3RpZnktY2VudGVyIEAyeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1iZXR3ZWVuIGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTIgYm9yZGVyLWInLFxuICAgICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgICAgaGVhZGVyQ2xhc3NOYW1lXG4gICAgICAgICAgKX1cbiAgICAgICAgPlxuICAgICAgICAgIHsvKiBUaXRsZSBhcmVhIC0gTGVmdCBzZWN0aW9uICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xIEAyeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1zdGFydFwiPlxuICAgICAgICAgICAgPENhbGVuZGFySWNvbiBjbGFzc05hbWU9XCJoLTUgdy01XCIgLz5cbiAgICAgICAgICAgIDxUaXRsZUNvbnRlbnQgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIHsvKiBOZXcgZXZlbnQgYnV0dG9uIC0gTW9iaWxlICYgRGVza3RvcCAqL31cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGp1c3RpZnktc3RhcnQgQHhsL2Jhc2UtaGVhZGVyOmp1c3RpZnktY2VudGVyIGdhcC0xIEA0eGwvYmFzZS1oZWFkZXI6anVzdGlmeS1lbmQgb3ZlcmZsb3cteC1hdXRvXCI+XG4gICAgICAgICAgICB7LyogRGVza3RvcCBjb250cm9scyAtIGNlbnRyYWxpemVkICovfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoaWRkZW4gQG1kL2Jhc2UtaGVhZGVyOmZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktc3RhcnQgZ2FwLTFcIj5cbiAgICAgICAgICAgICAgPFZpZXdDb250cm9sc1xuICAgICAgICAgICAgICAgIGN1cnJlbnRWaWV3PXt2aWV3fVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRWaWV3fVxuICAgICAgICAgICAgICAgIG9uVG9kYXk9e3RvZGF5fVxuICAgICAgICAgICAgICAgIG9uTmV4dD17bmV4dFBlcmlvZH1cbiAgICAgICAgICAgICAgICBvblByZXZpb3VzPXtwcmV2UGVyaW9kfVxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJkZWZhdWx0XCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJqdXN0aWZ5LWVuZFwiXG4gICAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgICAgey8qIE5ldyBldmVudCBidXR0b24gLSBEZXNrdG9wICovfVxuICAgICAgICAgICAgICA8TmV3RXZlbnRCdXR0b24gLz5cblxuICAgICAgICAgICAgICB7LyogRXhwb3J0IGJ1dHRvbiAtIERlc2t0b3AgKi99XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVFeHBvcnR9XG4gICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVcIlxuICAgICAgICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPERvd25sb2FkIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImhpZGRlbiBANHhsL2Jhc2UtaGVhZGVyOmlubGluZVwiPlxuICAgICAgICAgICAgICAgICAge3QoJ2V4cG9ydCcpfVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIE1vYmlsZSBuYXZpZ2F0aW9uIG1lbnUgYnV0dG9uIC0gUmlnaHQgYWxpZ25lZCAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgZ2FwLTEgQG1kL2Jhc2UtaGVhZGVyOmhpZGRlblwiPlxuICAgICAgICAgICAgICB7LyogTmV3IGV2ZW50IGJ1dHRvbiAtIE1vYmlsZSAqL31cbiAgICAgICAgICAgICAgPE5ld0V2ZW50QnV0dG9uIC8+XG5cbiAgICAgICAgICAgICAgPFBvcG92ZXJcbiAgICAgICAgICAgICAgICBvcGVuPXttb2JpbGVQb3BvdmVyT3Blbn1cbiAgICAgICAgICAgICAgICBvbk9wZW5DaGFuZ2U9e3NldE1vYmlsZVBvcG92ZXJPcGVufVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJvdXRsaW5lXCIgc2l6ZT1cInNtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxNZW51IGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgPC9Qb3BvdmVyVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICA8UG9wb3ZlckNvbnRlbnQgYWxpZ249XCJlbmRcIiBjbGFzc05hbWU9XCJ3LVsyNDBweF0gcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwibWItMSB0ZXh0LXNtIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgVmlldyAmIE5hdmlnYXRpb25cbiAgICAgICAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgICAgICAgICAgPFZpZXdDb250cm9sc1xuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRWaWV3PXt2aWV3fVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsobmV3VmlldykgPT4gaGFuZGxlVmlld0NoYW5nZShuZXdWaWV3LCB0cnVlKX1cbiAgICAgICAgICAgICAgICAgICAgICBvblRvZGF5PXtoYW5kbGVOYXZpZ2F0aW9uLnRvZGF5fVxuICAgICAgICAgICAgICAgICAgICAgIG9uTmV4dD17aGFuZGxlTmF2aWdhdGlvbi5uZXh0fVxuICAgICAgICAgICAgICAgICAgICAgIG9uUHJldmlvdXM9e2hhbmRsZU5hdmlnYXRpb24ucHJldmlvdXN9XG4gICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImdyaWRcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICAgICAgICAgIHsvKiBFeHBvcnQgYnV0dG9uIC0gTW9iaWxlICovfVxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInB0LTIgYm9yZGVyLXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVFeHBvcnR9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RG93bmxvYWQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB7dCgnZXhwb3J0Jyl9IENhbGVuZGFyICguaWNzKVxuICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvUG9wb3ZlckNvbnRlbnQ+XG4gICAgICAgICAgICAgIDwvUG9wb3Zlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IEhlYWRlclxuIiwKICAgICJpbXBvcnQge1xuICBCdXR0b24sXG4gIFBvcG92ZXIsXG4gIFBvcG92ZXJDb250ZW50LFxuICBQb3BvdmVyVHJpZ2dlcixcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgbW90aW9uIH0gZnJvbSAnbW90aW9uL3JlYWN0J1xuaW1wb3J0IHsgQ2hldnJvbkRvd24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuXG4vLyBNb250aHMgYXJyYXkgaXMgbm93IGNyZWF0ZWQgZHluYW1pY2FsbHkgaW4gdGhlIGNvbXBvbmVudCB1c2luZyB0cmFuc2xhdGlvbnNcblxuLy8gQW5pbWF0aW9uIHZhcmlhbnRzIGZvciBudW1iZXIgdHJhbnNpdGlvbnNcbmNvbnN0IGFuaW1hdGlvblZhcmlhbnRzID0ge1xuICBpbml0aWFsOiB7IG9wYWNpdHk6IDAsIHk6IDEwIH0sXG4gIGFuaW1hdGU6IHsgb3BhY2l0eTogMSwgeTogMCB9LFxuICBleGl0OiB7IG9wYWNpdHk6IDAsIHk6IC0xMCB9LFxufVxuXG5jb25zdCBUaXRsZUNvbnRlbnQgPSAoKSA9PiB7XG4gIGNvbnN0IHsgY3VycmVudERhdGUsIHZpZXcsIHNldEN1cnJlbnREYXRlLCB0IH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIC8vIENyZWF0ZSBtb250aHMgYXJyYXkgdXNpbmcgdHJhbnNsYXRpb25zXG4gIGNvbnN0IG1vbnRocyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gW1xuICAgICAgdCgnamFudWFyeScpLFxuICAgICAgdCgnZmVicnVhcnknKSxcbiAgICAgIHQoJ21hcmNoJyksXG4gICAgICB0KCdhcHJpbCcpLFxuICAgICAgdCgnbWF5JyksXG4gICAgICB0KCdqdW5lJyksXG4gICAgICB0KCdqdWx5JyksXG4gICAgICB0KCdhdWd1c3QnKSxcbiAgICAgIHQoJ3NlcHRlbWJlcicpLFxuICAgICAgdCgnb2N0b2JlcicpLFxuICAgICAgdCgnbm92ZW1iZXInKSxcbiAgICAgIHQoJ2RlY2VtYmVyJyksXG4gICAgXSxcbiAgICBbdF1cbiAgKVxuXG4gIC8vIFN0YXRlIGZvciBtb2JpbGUgbWVudSBhbmQgcG9wb3ZlcnNcbiAgY29uc3QgW21vbnRoUG9wb3Zlck9wZW4sIHNldE1vbnRoUG9wb3Zlck9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFt5ZWFyUG9wb3Zlck9wZW4sIHNldFllYXJQb3BvdmVyT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3dlZWtQb3BvdmVyT3Blbiwgc2V0V2Vla1BvcG92ZXJPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbZGF5UG9wb3Zlck9wZW4sIHNldERheVBvcG92ZXJPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIGNvbnN0IGN1cnJlbnRZZWFyID0gY3VycmVudERhdGUueWVhcigpXG4gIGNvbnN0IHllYXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMTEgfSwgKF8sIGkpID0+IGN1cnJlbnRZZWFyIC0gNSArIGkpXG5cbiAgLy8gSGFuZGxlIG1vbnRoIGFuZCB5ZWFyIHNlbGVjdGlvblxuICBjb25zdCBoYW5kbGVNb250aENoYW5nZSA9IChtb250aDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgbmV3RGF0ZSA9IGN1cnJlbnREYXRlLm1vbnRoKG1vbnRoKVxuICAgIHNldEN1cnJlbnREYXRlKG5ld0RhdGUpXG4gICAgc2V0TW9udGhQb3BvdmVyT3BlbihmYWxzZSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVllYXJDaGFuZ2UgPSAoeWVhcjogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgbmV3RGF0ZSA9IGN1cnJlbnREYXRlLnllYXIoeWVhcilcbiAgICBzZXRDdXJyZW50RGF0ZShuZXdEYXRlKVxuICAgIHNldFllYXJQb3BvdmVyT3BlbihmYWxzZSlcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHt2aWV3ICE9PSAneWVhcicgJiYgKFxuICAgICAgICA8UG9wb3ZlciBvcGVuPXttb250aFBvcG92ZXJPcGVufSBvbk9wZW5DaGFuZ2U9e3NldE1vbnRoUG9wb3Zlck9wZW59PlxuICAgICAgICAgIDxQb3BvdmVyVHJpZ2dlciBhc0NoaWxkPlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBweC0xISBmb250LXNlbWlib2xkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgICAgICAgIDxtb3Rpb24uc3BhblxuICAgICAgICAgICAgICAgICAga2V5PXtgbW9udGgtJHtjdXJyZW50RGF0ZS5tb250aCgpfWB9XG4gICAgICAgICAgICAgICAgICBpbml0aWFsPVwiaW5pdGlhbFwiXG4gICAgICAgICAgICAgICAgICBhbmltYXRlPVwiYW5pbWF0ZVwiXG4gICAgICAgICAgICAgICAgICBleGl0PVwiZXhpdFwiXG4gICAgICAgICAgICAgICAgICB2YXJpYW50cz17YW5pbWF0aW9uVmFyaWFudHN9XG4gICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uPXt7IGR1cmF0aW9uOiAwLjI1LCBlYXNlOiAnZWFzZUluT3V0JyB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHtjdXJyZW50RGF0ZS5mb3JtYXQoJ01NTU0nKX1cbiAgICAgICAgICAgICAgICA8L21vdGlvbi5zcGFuPlxuICAgICAgICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgICAgICAgICAgPENoZXZyb25Eb3duIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPC9Qb3BvdmVyVHJpZ2dlcj5cbiAgICAgICAgICA8UG9wb3ZlckNvbnRlbnQgY2xhc3NOYW1lPVwidy00MCBwLTBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBtYXgtaC02MCBmbGV4LWNvbCBvdmVyZmxvdy1hdXRvXCI+XG4gICAgICAgICAgICAgIHttb250aHMubWFwKChtb250aCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICBrZXk9e21vbnRofVxuICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAgICdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudERhdGUubW9udGgoKSA9PT0gaW5kZXggJiYgJ2JnLXByaW1hcnkvMTAnXG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlTW9udGhDaGFuZ2UoaW5kZXgpfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHttb250aH1cbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L1BvcG92ZXJDb250ZW50PlxuICAgICAgICA8L1BvcG92ZXI+XG4gICAgICApfVxuXG4gICAgICA8UG9wb3ZlciBvcGVuPXt5ZWFyUG9wb3Zlck9wZW59IG9uT3BlbkNoYW5nZT17c2V0WWVhclBvcG92ZXJPcGVufT5cbiAgICAgICAgPFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHB4LTEhIGZvbnQtc2VtaWJvbGRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxBbmltYXRlUHJlc2VuY2UgbW9kZT1cIndhaXRcIj5cbiAgICAgICAgICAgICAgPG1vdGlvbi5zcGFuXG4gICAgICAgICAgICAgICAga2V5PXtgeWVhci0ke2N1cnJlbnREYXRlLnllYXIoKX1gfVxuICAgICAgICAgICAgICAgIGluaXRpYWw9XCJpbml0aWFsXCJcbiAgICAgICAgICAgICAgICBhbmltYXRlPVwiYW5pbWF0ZVwiXG4gICAgICAgICAgICAgICAgZXhpdD1cImV4aXRcIlxuICAgICAgICAgICAgICAgIHZhcmlhbnRzPXthbmltYXRpb25WYXJpYW50c31cbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uPXt7IGR1cmF0aW9uOiAwLjI1LCBlYXNlOiAnZWFzZUluT3V0JyB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2N1cnJlbnREYXRlLmZvcm1hdCgnWVlZWScpfVxuICAgICAgICAgICAgICA8L21vdGlvbi5zcGFuPlxuICAgICAgICAgICAgPC9BbmltYXRlUHJlc2VuY2U+XG4gICAgICAgICAgICA8Q2hldnJvbkRvd24gY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvUG9wb3ZlclRyaWdnZXI+XG4gICAgICAgIDxQb3BvdmVyQ29udGVudCBjbGFzc05hbWU9XCJ3LTI0IHAtMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBtYXgtaC02MCBmbGV4LWNvbCBvdmVyZmxvdy1hdXRvXCI+XG4gICAgICAgICAgICB7eWVhcnMubWFwKCh5ZWFyKSA9PiAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBrZXk9e3llYXJ9XG4gICAgICAgICAgICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICAgJ2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuICAgICAgICAgICAgICAgICAgY3VycmVudERhdGUueWVhcigpID09PSB5ZWFyICYmICdiZy1wcmltYXJ5LzEwJ1xuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlWWVhckNoYW5nZSh5ZWFyKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt5ZWFyfVxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L1BvcG92ZXJDb250ZW50PlxuICAgICAgPC9Qb3BvdmVyPlxuXG4gICAgICB7LyogRGlzcGxheSBhZGRpdGlvbmFsIHZpZXctc3BlY2lmaWMgaW5mb3JtYXRpb24gKi99XG4gICAgICB7dmlldyA9PT0gJ3dlZWsnICYmIChcbiAgICAgICAgPFBvcG92ZXIgb3Blbj17d2Vla1BvcG92ZXJPcGVufSBvbk9wZW5DaGFuZ2U9e3NldFdlZWtQb3BvdmVyT3Blbn0+XG4gICAgICAgICAgPFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHB4LTEhIGZvbnQtc2VtaWJvbGRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8QW5pbWF0ZVByZXNlbmNlIG1vZGU9XCJ3YWl0XCI+XG4gICAgICAgICAgICAgICAgPG1vdGlvbi5zcGFuXG4gICAgICAgICAgICAgICAgICBrZXk9e2B3ZWVrLXJhbmdlLSR7Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cbiAgICAgICAgICAgICAgICAgIGluaXRpYWw9XCJpbml0aWFsXCJcbiAgICAgICAgICAgICAgICAgIGFuaW1hdGU9XCJhbmltYXRlXCJcbiAgICAgICAgICAgICAgICAgIGV4aXQ9XCJleGl0XCJcbiAgICAgICAgICAgICAgICAgIHZhcmlhbnRzPXthbmltYXRpb25WYXJpYW50c31cbiAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuMjUsIGVhc2U6ICdlYXNlSW5PdXQnIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2Ake2N1cnJlbnREYXRlXG4gICAgICAgICAgICAgICAgICAgIC5zdGFydE9mKCd3ZWVrJylcbiAgICAgICAgICAgICAgICAgICAgLmZvcm1hdCgnTU1NIEQnKX0gLSAke2N1cnJlbnREYXRlXG4gICAgICAgICAgICAgICAgICAgIC5lbmRPZignd2VlaycpXG4gICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoJ01NTSBEJyl9YH1cbiAgICAgICAgICAgICAgICA8L21vdGlvbi5zcGFuPlxuICAgICAgICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgICAgICAgICAgPENoZXZyb25Eb3duIGNsYXNzTmFtZT1cIm1sLTEgaC0zIHctMyBvcGFjaXR5LTcwXCIgLz5cbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDwvUG9wb3ZlclRyaWdnZXI+XG4gICAgICAgICAgPFBvcG92ZXJDb250ZW50IGNsYXNzTmFtZT1cInctNTYgcC0wXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggbWF4LWgtNjAgZmxleC1jb2wgb3ZlcmZsb3ctYXV0b1wiPlxuICAgICAgICAgICAgICB7LyogU2hvdyA3IHdlZWtzICgzIHBhc3QsIGN1cnJlbnQsIDMgZnV0dXJlKSAqL31cbiAgICAgICAgICAgICAge0FycmF5LmZyb20oeyBsZW5ndGg6IDcgfSwgKF8sIGkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB3ZWVrRGF0ZSA9IGN1cnJlbnREYXRlLnN1YnRyYWN0KDMsICd3ZWVrJykuYWRkKGksICd3ZWVrJylcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydE9mV2VlayA9IHdlZWtEYXRlLnN0YXJ0T2YoJ3dlZWsnKVxuICAgICAgICAgICAgICAgIGNvbnN0IGVuZE9mV2VlayA9IHdlZWtEYXRlLmVuZE9mKCd3ZWVrJylcbiAgICAgICAgICAgICAgICBjb25zdCBpc0N1cnJlbnRXZWVrID0gd2Vla0RhdGUuaXNTYW1lKGN1cnJlbnREYXRlLCAnd2VlaycpXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBrZXk9e3N0YXJ0T2ZXZWVrLmZvcm1hdCgnWVlZWS1NTS1ERCcpfVxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICAgICAgICdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcbiAgICAgICAgICAgICAgICAgICAgICBpc0N1cnJlbnRXZWVrICYmICdiZy1wcmltYXJ5LzEwJ1xuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0Q3VycmVudERhdGUoc3RhcnRPZldlZWspXG4gICAgICAgICAgICAgICAgICAgICAgc2V0V2Vla1BvcG92ZXJPcGVuKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57YCR7c3RhcnRPZldlZWsuZm9ybWF0KFxuICAgICAgICAgICAgICAgICAgICAgICAgJ01NTSBEJ1xuICAgICAgICAgICAgICAgICAgICAgICl9IC0gJHtlbmRPZldlZWsuZm9ybWF0KCdEJyl9YH08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAge3N0YXJ0T2ZXZWVrLm1vbnRoKCkgIT09IGVuZE9mV2Vlay5tb250aCgpICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQteHMgb3BhY2l0eS03MFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7YCR7c3RhcnRPZldlZWsuZm9ybWF0KCdNTU0nKX0tJHtlbmRPZldlZWsuZm9ybWF0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNTU0nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICl9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L1BvcG92ZXJDb250ZW50PlxuICAgICAgICA8L1BvcG92ZXI+XG4gICAgICApfVxuICAgICAge3ZpZXcgPT09ICdkYXknICYmIChcbiAgICAgICAgPFBvcG92ZXIgb3Blbj17ZGF5UG9wb3Zlck9wZW59IG9uT3BlbkNoYW5nZT17c2V0RGF5UG9wb3Zlck9wZW59PlxuICAgICAgICAgIDxQb3BvdmVyVHJpZ2dlciBhc0NoaWxkPlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBweC0xISBmb250LXNlbWlib2xkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgICAgICAgIDxtb3Rpb24uc3BhblxuICAgICAgICAgICAgICAgICAga2V5PXtgZGF5LWluZm8tJHtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuICAgICAgICAgICAgICAgICAgaW5pdGlhbD1cImluaXRpYWxcIlxuICAgICAgICAgICAgICAgICAgYW5pbWF0ZT1cImFuaW1hdGVcIlxuICAgICAgICAgICAgICAgICAgZXhpdD1cImV4aXRcIlxuICAgICAgICAgICAgICAgICAgdmFyaWFudHM9e2FuaW1hdGlvblZhcmlhbnRzfVxuICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbj17eyBkdXJhdGlvbjogMC4yNSwgZWFzZTogJ2Vhc2VJbk91dCcgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7Y3VycmVudERhdGUuZm9ybWF0KCdkZGRkLCBEJyl9XG4gICAgICAgICAgICAgICAgPC9tb3Rpb24uc3Bhbj5cbiAgICAgICAgICAgICAgPC9BbmltYXRlUHJlc2VuY2U+XG4gICAgICAgICAgICAgIDxDaGV2cm9uRG93biBjbGFzc05hbWU9XCJtbC0xIGgtMyB3LTMgb3BhY2l0eS03MFwiIC8+XG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8L1BvcG92ZXJUcmlnZ2VyPlxuICAgICAgICAgIDxQb3BvdmVyQ29udGVudCBjbGFzc05hbWU9XCJ3LTU2IHAtMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IG1heC1oLTYwIGZsZXgtY29sIG92ZXJmbG93LWF1dG9cIj5cbiAgICAgICAgICAgICAgey8qIFNob3cgYWxsIGRheXMgb2YgdGhlIGN1cnJlbnQgbW9udGggKi99XG4gICAgICAgICAgICAgIHsoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEdldCBmaXJzdCBkYXkgb2YgbW9udGggYW5kIGxhc3QgZGF5IG9mIG1vbnRoXG4gICAgICAgICAgICAgICAgY29uc3QgZmlyc3REYXlPZk1vbnRoID0gY3VycmVudERhdGUuc3RhcnRPZignbW9udGgnKVxuICAgICAgICAgICAgICAgIGNvbnN0IGRheXNJbk1vbnRoID0gY3VycmVudERhdGUuZGF5c0luTW9udGgoKVxuXG4gICAgICAgICAgICAgICAgLy8gR2VuZXJhdGUgYXJyYXkgb2YgZGF5cyBpbiB0aGUgbW9udGhcbiAgICAgICAgICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogZGF5c0luTW9udGggfSwgKF8sIGkpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRheURhdGUgPSBmaXJzdERheU9mTW9udGguZGF0ZShpICsgMSkgLy8gaSArIDEgYmVjYXVzZSBkYXlzIHN0YXJ0IGF0IDFcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlzQ3VycmVudERheSA9IGRheURhdGUuaXNTYW1lKGN1cnJlbnREYXRlLCAnZGF5JylcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlzVG9kYXkgPSBkYXlEYXRlLmlzU2FtZShkYXlqcygpLCAnZGF5JylcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGtleT17ZGF5RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1cbiAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAgICAgICAnanVzdGlmeS1zdGFydCBmb250LW5vcm1hbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0N1cnJlbnREYXkgJiYgJ2JnLXByaW1hcnkvMTAnXG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRDdXJyZW50RGF0ZShkYXlEYXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RGF5UG9wb3Zlck9wZW4oZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e2RheURhdGUuZm9ybWF0KCdkZGRkLCBNTU0gRCcpfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc1RvZGF5ICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCByb3VuZGVkLXNtIHB4LTEhIHRleHQteHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dCgndG9kYXknKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfSkoKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvUG9wb3ZlckNvbnRlbnQ+XG4gICAgICAgIDwvUG9wb3Zlcj5cbiAgICAgICl9XG4gICAgPC8+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGl0bGVDb250ZW50XG4iLAogICAgImltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aSdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBDaGV2cm9uTGVmdCwgQ2hldnJvblJpZ2h0IH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5cbmludGVyZmFjZSBWaWV3Q29udHJvbHNQcm9wcyB7XG4gIGN1cnJlbnRWaWV3OiAnZGF5JyB8ICd3ZWVrJyB8ICdtb250aCcgfCAneWVhcidcbiAgb25DaGFuZ2U6ICh2aWV3OiAnZGF5JyB8ICd3ZWVrJyB8ICdtb250aCcgfCAneWVhcicpID0+IHZvaWRcbiAgb25Ub2RheT86ICgpID0+IHZvaWRcbiAgb25OZXh0PzogKCkgPT4gdm9pZFxuICBvblByZXZpb3VzPzogKCkgPT4gdm9pZFxuICB2YXJpYW50PzogJ2RlZmF1bHQnIHwgJ2dyaWQnXG4gIHNpemU/OiAnc20nIHwgJ2RlZmF1bHQnXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5jb25zdCBWaWV3Q29udHJvbHM6IFJlYWN0LkZDPFZpZXdDb250cm9sc1Byb3BzPiA9ICh7XG4gIGN1cnJlbnRWaWV3LFxuICBvbkNoYW5nZSxcbiAgdmFyaWFudCA9ICdkZWZhdWx0JyxcbiAgc2l6ZSA9ICdzbScsXG4gIGNsYXNzTmFtZSxcbiAgb25Ub2RheSxcbiAgb25OZXh0LFxuICBvblByZXZpb3VzLFxufSkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG4gIGNvbnN0IGlzR3JpZCA9IHZhcmlhbnQgPT09ICdncmlkJ1xuXG4gIC8vIEV4dHJhY3QgY29tbW9uIGJ1dHRvbiBjbGFzc05hbWUgbG9naWMgdG8gYSBmdW5jdGlvblxuICBjb25zdCBnZXRCdXR0b25DbGFzc05hbWUgPSAodmlld1R5cGU6ICdkYXknIHwgJ3dlZWsnIHwgJ21vbnRoJyB8ICd5ZWFyJykgPT4ge1xuICAgIHJldHVybiBjbihcbiAgICAgIC8vIEJhc2Ugd2lkdGggZm9yIGdyaWQgbGF5b3V0XG4gICAgICBpc0dyaWQgPyAndy1mdWxsJyA6ICcnLFxuICAgICAgLy8gQWN0aXZlIHZpZXcgc3R5bGluZ1xuICAgICAgY3VycmVudFZpZXcgPT09IHZpZXdUeXBlICYmICdiZy1wcmltYXJ5LzgwJ1xuICAgIClcbiAgfVxuXG4gIGNvbnN0IGdldEJ0blZhcmlhbnQgPSAodmlld1R5cGU6ICdkYXknIHwgJ3dlZWsnIHwgJ21vbnRoJyB8ICd5ZWFyJykgPT4ge1xuICAgIHJldHVybiBjdXJyZW50VmlldyA9PT0gdmlld1R5cGUgPyAnZGVmYXVsdCcgOiAnb3V0bGluZSdcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgaXNHcmlkID8gJ2dyaWQgZ3JpZC1jb2xzLTIgZ2FwLTInIDogJ2ZsZXggZ2FwLTEnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgPlxuICAgICAgPEJ1dHRvbiBvbkNsaWNrPXtvblByZXZpb3VzfSB2YXJpYW50PVwib3V0bGluZVwiIHNpemU9e3NpemV9PlxuICAgICAgICA8Q2hldnJvbkxlZnQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICA8L0J1dHRvbj5cbiAgICAgIDxCdXR0b24gb25DbGljaz17b25OZXh0fSB2YXJpYW50PVwib3V0bGluZVwiIHNpemU9e3NpemV9PlxuICAgICAgICA8Q2hldnJvblJpZ2h0IGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgPC9CdXR0b24+XG5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgb25DbGljaz17KCkgPT4gb25DaGFuZ2UoJ2RheScpfVxuICAgICAgICB2YXJpYW50PXtnZXRCdG5WYXJpYW50KCdkYXknKX1cbiAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgY2xhc3NOYW1lPXtnZXRCdXR0b25DbGFzc05hbWUoJ2RheScpfVxuICAgICAgPlxuICAgICAgICB7dCgnZGF5Jyl9XG4gICAgICA8L0J1dHRvbj5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgb25DbGljaz17KCkgPT4gb25DaGFuZ2UoJ3dlZWsnKX1cbiAgICAgICAgdmFyaWFudD17Z2V0QnRuVmFyaWFudCgnd2VlaycpfVxuICAgICAgICBzaXplPXtzaXplfVxuICAgICAgICBjbGFzc05hbWU9e2dldEJ1dHRvbkNsYXNzTmFtZSgnd2VlaycpfVxuICAgICAgPlxuICAgICAgICB7dCgnd2VlaycpfVxuICAgICAgPC9CdXR0b24+XG4gICAgICA8QnV0dG9uXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IG9uQ2hhbmdlKCdtb250aCcpfVxuICAgICAgICB2YXJpYW50PXtnZXRCdG5WYXJpYW50KCdtb250aCcpfVxuICAgICAgICBzaXplPXtzaXplfVxuICAgICAgICBjbGFzc05hbWU9e2dldEJ1dHRvbkNsYXNzTmFtZSgnbW9udGgnKX1cbiAgICAgID5cbiAgICAgICAge3QoJ21vbnRoJyl9XG4gICAgICA8L0J1dHRvbj5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgb25DbGljaz17KCkgPT4gb25DaGFuZ2UoJ3llYXInKX1cbiAgICAgICAgdmFyaWFudD17Z2V0QnRuVmFyaWFudCgneWVhcicpfVxuICAgICAgICBzaXplPXtzaXplfVxuICAgICAgICBjbGFzc05hbWU9e2dldEJ1dHRvbkNsYXNzTmFtZSgneWVhcicpfVxuICAgICAgPlxuICAgICAgICB7dCgneWVhcicpfVxuICAgICAgPC9CdXR0b24+XG5cbiAgICAgIDxCdXR0b24gb25DbGljaz17b25Ub2RheX0gdmFyaWFudD1cIm91dGxpbmVcIiBzaXplPXtzaXplfT5cbiAgICAgICAge3QoJ3RvZGF5Jyl9XG4gICAgICA8L0J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBWaWV3Q29udHJvbHNcbiIsCiAgICAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBTY3JvbGxBcmVhIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcblxuY29uc3QgWWVhclZpZXc6IFJlYWN0LkZDID0gKCkgPT4ge1xuICBjb25zdCB7IGN1cnJlbnREYXRlLCBzZWxlY3REYXRlLCBldmVudHMsIHNldFZpZXcsIGdldEV2ZW50c0ZvckRhdGVSYW5nZSwgdCB9ID1cbiAgICB1c2VDYWxlbmRhckNvbnRleHQoKVxuICBjb25zdCB5ZWFyID0gY3VycmVudERhdGUueWVhcigpXG5cbiAgLy8gR2VuZXJhdGUgYW4gYXJyYXkgb2YgMTIgbW9udGhzIGZvciB0aGUgY3VycmVudCB5ZWFyXG4gIGNvbnN0IG1vbnRocyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDEyIH0sIChfLCBpKSA9PiB7XG4gICAgY29uc3QgbW9udGhEYXRlID0gZGF5anMoKS55ZWFyKHllYXIpLm1vbnRoKGkpLnN0YXJ0T2YoJ21vbnRoJylcbiAgICByZXR1cm4ge1xuICAgICAgZGF0ZTogbW9udGhEYXRlLFxuICAgICAgbmFtZTogbW9udGhEYXRlLmZvcm1hdCgnTU1NTScpLFxuICAgICAgZGF5c0luTW9udGg6IG1vbnRoRGF0ZS5kYXlzSW5Nb250aCgpLFxuICAgICAgZmlyc3REYXlPZk1vbnRoOiBtb250aERhdGUuc3RhcnRPZignbW9udGgnKS5kYXkoKSwgLy8gMC02LCAwIGlzIFN1bmRheVxuICAgIH1cbiAgfSlcblxuICAvLyBDYWxjdWxhdGUgZXZlbnRzIGZvciBlYWNoIG1vbnRoXG4gIGNvbnN0IG1vbnRoc1dpdGhFdmVudENvdW50ID0gbW9udGhzLm1hcCgobW9udGgpID0+IHtcbiAgICBjb25zdCBldmVudHNJbk1vbnRoID0gZXZlbnRzLmZpbHRlcihcbiAgICAgIChldmVudCkgPT5cbiAgICAgICAgZXZlbnQuc3RhcnQueWVhcigpID09PSB5ZWFyICYmXG4gICAgICAgIGV2ZW50LnN0YXJ0Lm1vbnRoKCkgPT09IG1vbnRoLmRhdGUubW9udGgoKVxuICAgIClcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5tb250aCxcbiAgICAgIGV2ZW50Q291bnQ6IGV2ZW50c0luTW9udGgubGVuZ3RoLFxuICAgIH1cbiAgfSlcblxuICAvLyBIYW5kbGUgbW9udGggY2xpY2sgdG8gbmF2aWdhdGUgdG8gbW9udGggdmlld1xuICBjb25zdCBoYW5kbGVNb250aENsaWNrID0gKGRhdGU6IGRheWpzLkRheWpzKSA9PiB7XG4gICAgc2VsZWN0RGF0ZShkYXRlKVxuICAgIHNldFZpZXcoJ21vbnRoJylcbiAgfVxuXG4gIC8vIEhhbmRsZSBkYXkgY2xpY2sgd2l0aGluIHRoZSBtaW5pIGNhbGVuZGFyXG4gIGNvbnN0IGhhbmRsZURheUNsaWNrID0gKGRhdGU6IGRheWpzLkRheWpzLCBldmVudDogUmVhY3QuTW91c2VFdmVudCkgPT4ge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIC8vIFByZXZlbnQgdHJpZ2dlcmluZyB0aGUgbW9udGggY2xpY2tcbiAgICBzZWxlY3REYXRlKGRhdGUpXG4gICAgc2V0VmlldygnZGF5JykgLy8gTmF2aWdhdGUgZGlyZWN0bHkgdG8gZGF5IHZpZXcgd2hlbiBjbGlja2luZyBvbiBhIHNwZWNpZmljIGRheVxuICB9XG5cbiAgLy8gR2VuZXJhdGUgZGF5cyBmb3IgbWluaSBjYWxlbmRhciBpbiBlYWNoIG1vbnRoXG4gIGNvbnN0IHJlbmRlck1pbmlDYWxlbmRhciA9IChtb250aDogKHR5cGVvZiBtb250aHNXaXRoRXZlbnRDb3VudClbMF0pID0+IHtcbiAgICAvLyBHZXQgdGhlIGZpcnN0IGRheSBvZiB0aGUgbW9udGgncyBjYWxlbmRhciAod2hpY2ggY291bGQgYmUgaW4gdGhlIHByZXZpb3VzIG1vbnRoKVxuICAgIGNvbnN0IGZpcnN0RGF5T2ZDYWxlbmRhciA9IG1vbnRoLmRhdGUuc3RhcnRPZignbW9udGgnKS5zdGFydE9mKCd3ZWVrJylcblxuICAgIC8vIENyZWF0ZSA0MiBkYXlzICg2IHJvd3Mgb2YgNyBkYXlzKSBmb3IgY29uc2lzdGVuY3lcbiAgICBjb25zdCBkYXlzQXJyYXkgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiA0MiB9LCAoXywgaSkgPT4ge1xuICAgICAgY29uc3QgZGF5ID0gZmlyc3REYXlPZkNhbGVuZGFyLmFkZChpLCAnZGF5JylcbiAgICAgIGNvbnN0IGlzQ3VycmVudE1vbnRoID0gZGF5Lm1vbnRoKCkgPT09IG1vbnRoLmRhdGUubW9udGgoKVxuICAgICAgY29uc3QgaXNUb2RheSA9IGRheS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG4gICAgICBjb25zdCBpc0N1cnJlbnREYXRlID0gZGF5LmlzU2FtZShjdXJyZW50RGF0ZSwgJ2RheScpXG5cbiAgICAgIC8vIEdldCBldmVudHMgZm9yIHRoaXMgZGF5XG4gICAgICBjb25zdCBkYXlFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UoXG4gICAgICAgIGRheS5zdGFydE9mKCdkYXknKSxcbiAgICAgICAgZGF5LmVuZE9mKCdkYXknKVxuICAgICAgKVxuICAgICAgY29uc3QgaGFzRXZlbnRzID0gZGF5RXZlbnRzLmxlbmd0aCA+IDBcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF5LFxuICAgICAgICBpc0N1cnJlbnRNb250aCxcbiAgICAgICAgaXNUb2RheSxcbiAgICAgICAgaXNDdXJyZW50RGF0ZSxcbiAgICAgICAgaGFzRXZlbnRzLFxuICAgICAgICBldmVudENvdW50OiBkYXlFdmVudHMubGVuZ3RoLFxuICAgICAgICAvLyBHcm91cCBldmVudHMgYnkgdGhlaXIgY2F0ZWdvcmllcyB0byBzaG93IGRpZmZlcmVudCBjb2xvcnNcbiAgICAgICAgZXZlbnRzOiBkYXlFdmVudHMsXG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGRhdGEtdGVzdGlkPXtgeWVhci1taW5pLWNhbGVuZGFyLSR7bW9udGguZGF0ZS5mb3JtYXQoJ01NJyl9YH1cbiAgICAgICAgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtNyBnYXAtWzFweF0gdGV4dC1bMC42cmVtXVwiXG4gICAgICA+XG4gICAgICAgIHsvKiBEYXkgbmFtZXMgKi99XG4gICAgICAgIHtbJ1MnLCAnTScsICdUJywgJ1cnLCAnVCcsICdGJywgJ1MnXS5tYXAoKGRheU5hbWUsIGkpID0+IChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBrZXk9e2BoZWFkZXItJHtpfWB9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgaC0zIHRleHQtY2VudGVyXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7ZGF5TmFtZX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSl9XG5cbiAgICAgICAgey8qIENhbGVuZGFyIGRheXMgKi99XG4gICAgICAgIHtkYXlzQXJyYXkubWFwKChkYXlJbmZvLCBpKSA9PiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAga2V5PXtgZGF5LSR7aX1gfVxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2B5ZWFyLWRheS0ke21vbnRoLmRhdGUuZm9ybWF0KCdZWVlZLU1NJyl9LSR7ZGF5SW5mby5kYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cbiAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBoYW5kbGVEYXlDbGljayhkYXlJbmZvLmRheSwgZSl9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAncmVsYXRpdmUgZmxleCBhc3BlY3Qtc3F1YXJlIHctZnVsbCBjdXJzb3ItcG9pbnRlciBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXInLFxuICAgICAgICAgICAgICAnaG92ZXI6YmctYWNjZW50IHJvdW5kZWQtc20gdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMjAwJyxcbiAgICAgICAgICAgICAgIWRheUluZm8uaXNDdXJyZW50TW9udGggJiYgJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCBvcGFjaXR5LTUwJyxcbiAgICAgICAgICAgICAgZGF5SW5mby5pc1RvZGF5ICYmXG4gICAgICAgICAgICAgICAgJ2JnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgcm91bmRlZC1mdWxsJyxcbiAgICAgICAgICAgICAgZGF5SW5mby5pc0N1cnJlbnREYXRlICYmXG4gICAgICAgICAgICAgICAgIWRheUluZm8uaXNUb2RheSAmJlxuICAgICAgICAgICAgICAgICdiZy1tdXRlZCByb3VuZGVkLWZ1bGwgZm9udC1ib2xkJyxcbiAgICAgICAgICAgICAgZGF5SW5mby5oYXNFdmVudHMgJiZcbiAgICAgICAgICAgICAgICAhZGF5SW5mby5pc1RvZGF5ICYmXG4gICAgICAgICAgICAgICAgIWRheUluZm8uaXNDdXJyZW50RGF0ZSAmJlxuICAgICAgICAgICAgICAgICdmb250LW1lZGl1bSdcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB0aXRsZT17XG4gICAgICAgICAgICAgIGRheUluZm8uaGFzRXZlbnRzXG4gICAgICAgICAgICAgICAgPyBgJHtkYXlJbmZvLmV2ZW50Q291bnR9IGV2ZW50JHtcbiAgICAgICAgICAgICAgICAgICAgZGF5SW5mby5ldmVudENvdW50ID4gMSA/ICdzJyA6ICcnXG4gICAgICAgICAgICAgICAgICB9YFxuICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlciBsZWFkaW5nLW5vbmVcIj5cbiAgICAgICAgICAgICAge2RheUluZm8uZGF5LmRhdGUoKX1cbiAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgey8qIEVuaGFuY2VkIGV2ZW50IGluZGljYXRvciAtIHNob3cgbXVsdGlwbGUgY29sb3JlZCBkb3RzIGZvciBkaWZmZXJlbnQgZXZlbnQgdHlwZXMgKi99XG4gICAgICAgICAgICB7ZGF5SW5mby5oYXNFdmVudHMgJiYgKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICdhYnNvbHV0ZSBib3R0b20tMCBmbGV4IHctZnVsbCBqdXN0aWZ5LWNlbnRlciBzcGFjZS14LVsxcHhdJyxcbiAgICAgICAgICAgICAgICAgIGRheUluZm8uaXNUb2RheSA/ICdib3R0b20tWzFweF0nIDogJydcbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgey8qIFNob3cgdXAgdG8gMyBldmVudCBkb3RzIHdpdGggZGlmZmVyZW50IGNvbG9ycyBpZiBhdmFpbGFibGUgKi99XG4gICAgICAgICAgICAgICAge2RheUluZm8uZXZlbnRDb3VudCA+IDAgJiYgKFxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICAgICAnaC1bM3B4XSB3LVszcHhdIHJvdW5kZWQtZnVsbCcsXG4gICAgICAgICAgICAgICAgICAgICAgZGF5SW5mby5pc1RvZGF5ID8gJ2JnLXByaW1hcnktZm9yZWdyb3VuZCcgOiAnYmctcHJpbWFyeSdcbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICB7ZGF5SW5mby5ldmVudENvdW50ID4gMSAmJiAoXG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICAgICAgICdoLVszcHhdIHctWzNweF0gcm91bmRlZC1mdWxsJyxcbiAgICAgICAgICAgICAgICAgICAgICBkYXlJbmZvLmlzVG9kYXkgPyAnYmctcHJpbWFyeS1mb3JlZ3JvdW5kJyA6ICdiZy1ibHVlLTUwMCdcbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICB7ZGF5SW5mby5ldmVudENvdW50ID4gMiAmJiAoXG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICAgICAgICdoLVszcHhdIHctWzNweF0gcm91bmRlZC1mdWxsJyxcbiAgICAgICAgICAgICAgICAgICAgICBkYXlJbmZvLmlzVG9kYXkgPyAnYmctcHJpbWFyeS1mb3JlZ3JvdW5kJyA6ICdiZy1ncmVlbi01MDAnXG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSl9XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTY3JvbGxBcmVhIGRhdGEtdGVzdGlkPVwieWVhci12aWV3XCIgY2xhc3NOYW1lPVwiaC1mdWxsXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGRhdGEtdGVzdGlkPVwieWVhci1ncmlkXCJcbiAgICAgICAgY2xhc3NOYW1lPVwiZ3JpZCBhdXRvLXJvd3MtZnIgZ3JpZC1jb2xzLTEgZ2FwLTQgcC00IHNtOmdyaWQtY29scy0yIGxnOmdyaWQtY29scy0zXCJcbiAgICAgID5cbiAgICAgICAge21vbnRoc1dpdGhFdmVudENvdW50Lm1hcCgobW9udGgsIGluZGV4KSA9PiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAga2V5PXttb250aC5uYW1lfVxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2B5ZWFyLW1vbnRoLSR7bW9udGguZGF0ZS5mb3JtYXQoJ01NJyl9YH1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZU1vbnRoQ2xpY2sobW9udGguZGF0ZSl9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJob3Zlcjpib3JkZXItcHJpbWFyeSBmbGV4IGN1cnNvci1wb2ludGVyIGZsZXgtY29sIHJvdW5kZWQtbGcgYm9yZGVyIHAtMyB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDAgaG92ZXI6c2NhbGUtWzEuMDFdIGhvdmVyOnNoYWRvdy1tZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgICAgICA8bW90aW9uLmRpdlxuICAgICAgICAgICAgICAgIGtleT17YG1vbnRoLSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuICAgICAgICAgICAgICAgIGV4aXQ9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbj17e1xuICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDAuMjUsXG4gICAgICAgICAgICAgICAgICBlYXNlOiAnZWFzZUluT3V0JyxcbiAgICAgICAgICAgICAgICAgIGRlbGF5OiBpbmRleCAqIDAuMDUsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtYi0yIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aDNcbiAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgeWVhci1tb250aC10aXRsZS0ke21vbnRoLmRhdGUuZm9ybWF0KCdNTScpfWB9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LWxnIGZvbnQtbWVkaXVtXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7bW9udGgubmFtZX1cbiAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgIHttb250aC5ldmVudENvdW50ID4gMCAmJiAoXG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YHllYXItbW9udGgtZXZlbnQtY291bnQtJHttb250aC5kYXRlLmZvcm1hdCgnTU0nKX1gfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHJvdW5kZWQtZnVsbCBweC0yIHB5LTEgdGV4dC14c1wiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHttb250aC5ldmVudENvdW50fXsnICd9XG4gICAgICAgICAgICAgICAgICAgIHttb250aC5ldmVudENvdW50ID09PSAxID8gdCgnZXZlbnQnKSA6IHQoJ2V2ZW50cycpfVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvbW90aW9uLmRpdj5cbiAgICAgICAgICAgIDwvQW5pbWF0ZVByZXNlbmNlPlxuXG4gICAgICAgICAgICB7cmVuZGVyTWluaUNhbGVuZGFyKG1vbnRoKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSl9XG4gICAgICA8L2Rpdj5cbiAgICA8L1Njcm9sbEFyZWE+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgWWVhclZpZXdcbiIsCiAgICAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgTW9udGhWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9tb250aC12aWV3L2NvbXBvbmVudHMvdmlldy9tb250aC12aWV3J1xuaW1wb3J0IFdlZWtWaWV3IGZyb20gJ0AvZmVhdHVyZXMvd2Vlay12aWV3L3ZpZXcvd2Vlay12aWV3J1xuaW1wb3J0IERheVZpZXcgZnJvbSAnQC9mZWF0dXJlcy9kYXktdmlldy9jb21wb25lbnRzL3ZpZXcvZGF5LXZpZXcnXG5pbXBvcnQgeyBFdmVudEZvcm0gfSBmcm9tICcuLi9ldmVudC1mb3JtL2V2ZW50LWZvcm0nXG5pbXBvcnQgeyBIZWFkZXIgfSBmcm9tICcuLi9oZWFkZXInXG5pbXBvcnQgWWVhclZpZXcgZnJvbSAnQC9mZWF0dXJlcy95ZWFyLXZpZXcvdmlldy95ZWFyLXZpZXcnXG5pbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCB7IENhbGVuZGFyRG5kQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvZHJhZy1hbmQtZHJvcC9jYWxlbmRhci1kbmQtY29udGV4dCdcbmltcG9ydCB7IENhbGVuZGFyUHJvdmlkZXIgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvcHJvdmlkZXInXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbi8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBuby1kdXBsaWNhdGVzXG5pbXBvcnQgJ0AvbGliL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IFdFRUtfREFZU19OVU1CRVJfTUFQIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHsgbm9ybWFsaXplUHVibGljRmFjaW5nQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvbGliJ1xuaW1wb3J0IHR5cGUgeyBJbGFteUNhbGVuZGFyUHJvcHMgfSBmcm9tICcuL3R5cGVzJ1xuXG5jb25zdCBDYWxlbmRhckNvbnRlbnQ6IFJlYWN0LkZDID0gKCkgPT4ge1xuICBjb25zdCB7XG4gICAgdmlldyxcbiAgICBpc0V2ZW50Rm9ybU9wZW4sXG4gICAgY2xvc2VFdmVudEZvcm0sXG4gICAgc2VsZWN0ZWRFdmVudCxcbiAgICBzZWxlY3RlZERhdGUsXG4gICAgYWRkRXZlbnQsXG4gICAgdXBkYXRlRXZlbnQsXG4gICAgZGVsZXRlRXZlbnQsXG4gICAgZGF5TWF4RXZlbnRzLFxuICB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuICBjb25zdCB2aWV3TWFwID0ge1xuICAgIG1vbnRoOiA8TW9udGhWaWV3IGtleT1cIm1vbnRoXCIgZGF5TWF4RXZlbnRzPXtkYXlNYXhFdmVudHN9IC8+LFxuICAgIHdlZWs6IDxXZWVrVmlldyBrZXk9XCJ3ZWVrXCIgLz4sXG4gICAgZGF5OiA8RGF5VmlldyBrZXk9XCJkYXlcIiAvPixcbiAgICB5ZWFyOiA8WWVhclZpZXcga2V5PVwieWVhclwiIC8+LFxuICB9XG5cbiAgY29uc3QgaGFuZGxlT25VcGRhdGUgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcbiAgICB1cGRhdGVFdmVudChldmVudC5pZCwgZXZlbnQpXG4gIH1cblxuICBjb25zdCBoYW5kbGVPbkRlbGV0ZSA9IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuICAgIGRlbGV0ZUV2ZW50KGV2ZW50LmlkKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbFwiPlxuICAgICAgPEhlYWRlciBjbGFzc05hbWU9XCJwLTFcIiAvPlxuXG4gICAgICB7LyogQ2FsZW5kYXIgQm9keSB3aXRoIEFuaW1hdGVQcmVzZW5jZSBmb3IgdmlldyB0cmFuc2l0aW9ucyAqL31cbiAgICAgIDxDYWxlbmRhckRuZENvbnRleHQ+XG4gICAgICAgIDxBbmltYXRlUHJlc2VuY2UgbW9kZT1cIndhaXRcIj5cbiAgICAgICAgICA8bW90aW9uLmRpdlxuICAgICAgICAgICAga2V5PXt2aWV3fVxuICAgICAgICAgICAgaW5pdGlhbD17eyBvcGFjaXR5OiAwLCB4OiAyMCB9fVxuICAgICAgICAgICAgYW5pbWF0ZT17eyBvcGFjaXR5OiAxLCB4OiAwIH19XG4gICAgICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAsIHg6IC0yMCB9fVxuICAgICAgICAgICAgdHJhbnNpdGlvbj17eyBkdXJhdGlvbjogMC4xLCBlYXNlOiAnZWFzZUluT3V0JyB9fVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGgtW2NhbGMoMTAwJS0zLjVyZW0pXVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3ZpZXdNYXBbdmlld119XG4gICAgICAgICAgPC9tb3Rpb24uZGl2PlxuICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgIDwvQ2FsZW5kYXJEbmRDb250ZXh0PlxuXG4gICAgICB7LyogRXZlbnQgRm9ybSBEaWFsb2cgKi99XG4gICAgICB7aXNFdmVudEZvcm1PcGVuICYmIChcbiAgICAgICAgPEV2ZW50Rm9ybVxuICAgICAgICAgIG9uQ2xvc2U9e2Nsb3NlRXZlbnRGb3JtfVxuICAgICAgICAgIHNlbGVjdGVkRXZlbnQ9e3NlbGVjdGVkRXZlbnR9XG4gICAgICAgICAgc2VsZWN0ZWREYXRlPXtzZWxlY3RlZERhdGV9XG4gICAgICAgICAgb25BZGQ9e2FkZEV2ZW50fVxuICAgICAgICAgIG9uVXBkYXRlPXtoYW5kbGVPblVwZGF0ZX1cbiAgICAgICAgICBvbkRlbGV0ZT17aGFuZGxlT25EZWxldGV9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApXG59XG5cbmNvbnN0IERFRkFVTFRfREFZX01BWF9FVkVOVFMgPSA0XG5leHBvcnQgY29uc3QgSWxhbXlDYWxlbmRhcjogUmVhY3QuRkM8SWxhbXlDYWxlbmRhclByb3BzPiA9ICh7XG4gIGV2ZW50cyxcbiAgZmlyc3REYXlPZldlZWsgPSAnc3VuZGF5JyxcbiAgaW5pdGlhbFZpZXcgPSAnbW9udGgnLFxuICByZW5kZXJFdmVudCxcbiAgb25FdmVudENsaWNrLFxuICBvbkNlbGxDbGljayxcbiAgb25WaWV3Q2hhbmdlLFxuICBvbkV2ZW50QWRkLFxuICBvbkV2ZW50VXBkYXRlLFxuICBvbkV2ZW50RGVsZXRlLFxuICBvbkRhdGVDaGFuZ2UsXG4gIGxvY2FsZSxcbiAgdHJhbnNsYXRpb25zLFxuICB0cmFuc2xhdG9yLFxuICB0aW1lem9uZSxcbiAgZGlzYWJsZUNlbGxDbGljayxcbiAgZGlzYWJsZUV2ZW50Q2xpY2ssXG4gIGRpc2FibGVEcmFnQW5kRHJvcCxcbiAgZGF5TWF4RXZlbnRzID0gREVGQVVMVF9EQVlfTUFYX0VWRU5UUyxcbiAgc3RpY2t5Vmlld0hlYWRlciA9IHRydWUsXG4gIHZpZXdIZWFkZXJDbGFzc05hbWUgPSAnJyxcbiAgaGVhZGVyQ29tcG9uZW50LFxuICBoZWFkZXJDbGFzc05hbWUsXG59KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPENhbGVuZGFyUHJvdmlkZXJcbiAgICAgIGV2ZW50cz17bm9ybWFsaXplUHVibGljRmFjaW5nQ2FsZW5kYXJFdmVudChldmVudHMpfVxuICAgICAgZmlyc3REYXlPZldlZWs9e1dFRUtfREFZU19OVU1CRVJfTUFQW2ZpcnN0RGF5T2ZXZWVrXX1cbiAgICAgIGluaXRpYWxWaWV3PXtpbml0aWFsVmlld31cbiAgICAgIHJlbmRlckV2ZW50PXtyZW5kZXJFdmVudH1cbiAgICAgIG9uRXZlbnRDbGljaz17b25FdmVudENsaWNrfVxuICAgICAgb25DZWxsQ2xpY2s9e29uQ2VsbENsaWNrfVxuICAgICAgb25WaWV3Q2hhbmdlPXtvblZpZXdDaGFuZ2V9XG4gICAgICBvbkV2ZW50QWRkPXtvbkV2ZW50QWRkfVxuICAgICAgb25FdmVudFVwZGF0ZT17b25FdmVudFVwZGF0ZX1cbiAgICAgIG9uRXZlbnREZWxldGU9e29uRXZlbnREZWxldGV9XG4gICAgICBvbkRhdGVDaGFuZ2U9e29uRGF0ZUNoYW5nZX1cbiAgICAgIGxvY2FsZT17bG9jYWxlfVxuICAgICAgdHJhbnNsYXRpb25zPXt0cmFuc2xhdGlvbnN9XG4gICAgICB0cmFuc2xhdG9yPXt0cmFuc2xhdG9yfVxuICAgICAgdGltZXpvbmU9e3RpbWV6b25lfVxuICAgICAgZGlzYWJsZUNlbGxDbGljaz17ZGlzYWJsZUNlbGxDbGlja31cbiAgICAgIGRpc2FibGVFdmVudENsaWNrPXtkaXNhYmxlRXZlbnRDbGlja31cbiAgICAgIGRpc2FibGVEcmFnQW5kRHJvcD17ZGlzYWJsZURyYWdBbmREcm9wfVxuICAgICAgZGF5TWF4RXZlbnRzPXtkYXlNYXhFdmVudHN9XG4gICAgICBzdGlja3lWaWV3SGVhZGVyPXtzdGlja3lWaWV3SGVhZGVyfVxuICAgICAgdmlld0hlYWRlckNsYXNzTmFtZT17dmlld0hlYWRlckNsYXNzTmFtZX1cbiAgICAgIGhlYWRlckNvbXBvbmVudD17aGVhZGVyQ29tcG9uZW50fVxuICAgICAgaGVhZGVyQ2xhc3NOYW1lPXtoZWFkZXJDbGFzc05hbWV9XG4gICAgPlxuICAgICAgPENhbGVuZGFyQ29udGVudCAvPlxuICAgIDwvQ2FsZW5kYXJQcm92aWRlcj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQge1xuICBEbmRDb250ZXh0LFxuICBEcmFnT3ZlcmxheSxcbiAgTW91c2VTZW5zb3IsXG4gIHBvaW50ZXJXaXRoaW4sXG4gIFRvdWNoU2Vuc29yLFxuICB1c2VTZW5zb3IsXG4gIHVzZVNlbnNvcnMsXG59IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7XG4gIERyYWdDYW5jZWxFdmVudCxcbiAgRHJhZ0VuZEV2ZW50LFxuICBEcmFnU3RhcnRFdmVudCxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB7IHNuYXBDZW50ZXJUb0N1cnNvciB9IGZyb20gJ0BkbmQta2l0L21vZGlmaWVycydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IGlzUmVjdXJyaW5nRXZlbnQgfSBmcm9tICdAL2xpYi9yZWN1cnJlbmNlLWhhbmRsZXInXG5pbXBvcnQgeyBSZWN1cnJlbmNlRWRpdERpYWxvZyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cnXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0U2NvcGUgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5cbmludGVyZmFjZSBDYWxlbmRhckRuZENvbnRleHRQcm9wcyB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENhbGVuZGFyRG5kQ29udGV4dCh7IGNoaWxkcmVuIH06IENhbGVuZGFyRG5kQ29udGV4dFByb3BzKSB7XG4gIGNvbnN0IHsgdXBkYXRlRXZlbnQsIHVwZGF0ZVJlY3VycmluZ0V2ZW50LCB2aWV3LCBkaXNhYmxlRHJhZ0FuZERyb3AgfSA9XG4gICAgdXNlQ2FsZW5kYXJDb250ZXh0KClcbiAgY29uc3QgW2FjdGl2ZUV2ZW50LCBzZXRBY3RpdmVFdmVudF0gPSBSZWFjdC51c2VTdGF0ZTxDYWxlbmRhckV2ZW50IHwgbnVsbD4oXG4gICAgbnVsbFxuICApXG5cbiAgLy8gU3RhdGUgZm9yIHJlY3VycmluZyBldmVudCBkaWFsb2dcbiAgY29uc3QgW3JlY3VycmluZ0RpYWxvZywgc2V0UmVjdXJyaW5nRGlhbG9nXSA9IHVzZVN0YXRlPHtcbiAgICBpc09wZW46IGJvb2xlYW5cbiAgICBldmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcbiAgICB1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+IHwgbnVsbFxuICB9Pih7XG4gICAgaXNPcGVuOiBmYWxzZSxcbiAgICBldmVudDogbnVsbCxcbiAgICB1cGRhdGVzOiBudWxsLFxuICB9KVxuXG4gIC8vIENvbmZpZ3VyZSBzZW5zb3JzIHdpdGggcmVkdWNlZCBhY3RpdmF0aW9uIGNvbnN0cmFpbnRzIGZvciBlYXNpZXIgZHJhZ2dpbmdcbiAgY29uc3QgbW91c2VTZW5zb3IgPSB1c2VTZW5zb3IoTW91c2VTZW5zb3IsIHtcbiAgICAvLyBSZXF1aXJlIG1pbmltYWwgbW92ZW1lbnQgYmVmb3JlIGFjdGl2YXRpbmdcbiAgICBhY3RpdmF0aW9uQ29uc3RyYWludDoge1xuICAgICAgZGlzdGFuY2U6IDIsXG4gICAgfSxcbiAgfSlcblxuICBjb25zdCB0b3VjaFNlbnNvciA9IHVzZVNlbnNvcihUb3VjaFNlbnNvciwge1xuICAgIC8vIFJlZHVjZSBkZWxheSBmb3IgdG91Y2ggZGV2aWNlc1xuICAgIGFjdGl2YXRpb25Db25zdHJhaW50OiB7XG4gICAgICBkZWxheTogMTAwLFxuICAgICAgdG9sZXJhbmNlOiA1LFxuICAgIH0sXG4gIH0pXG5cbiAgY29uc3Qgc2Vuc29ycyA9IHVzZVNlbnNvcnMobW91c2VTZW5zb3IsIHRvdWNoU2Vuc29yKVxuXG4gIC8vIEhlbHBlciBmdW5jdGlvbiB0byBwZXJmb3JtIHRoZSBhY3R1YWwgZXZlbnQgdXBkYXRlXG4gIGNvbnN0IHBlcmZvcm1FdmVudFVwZGF0ZSA9IChcbiAgICBldmVudDogQ2FsZW5kYXJFdmVudCxcbiAgICB1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+XG4gICkgPT4ge1xuICAgIC8vIFZhbGlkYXRlIGlucHV0c1xuICAgIGlmICghZXZlbnQgfHwgIWV2ZW50LmlkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXVwZGF0ZXMgfHwgT2JqZWN0LmtleXModXBkYXRlcykubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoaXNSZWN1cnJpbmdFdmVudChldmVudCkpIHtcbiAgICAgIC8vIFNob3cgZGlhbG9nIGZvciByZWN1cnJpbmcgZXZlbnRzXG4gICAgICBzZXRSZWN1cnJpbmdEaWFsb2coe1xuICAgICAgICBpc09wZW46IHRydWUsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICB1cGRhdGVzLFxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRGlyZWN0bHkgdXBkYXRlIHJlZ3VsYXIgZXZlbnRzXG4gICAgICB1cGRhdGVFdmVudChldmVudC5pZCwgdXBkYXRlcylcbiAgICB9XG4gIH1cblxuICAvLyBIYW5kbGUgcmVjdXJyaW5nIGV2ZW50IGRpYWxvZyBjb25maXJtYXRpb25cbiAgY29uc3QgaGFuZGxlUmVjdXJyaW5nRXZlbnRDb25maXJtID0gKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG4gICAgaWYgKCFyZWN1cnJpbmdEaWFsb2cuZXZlbnQgfHwgIXJlY3VycmluZ0RpYWxvZy51cGRhdGVzKSB7XG4gICAgICBzZXRSZWN1cnJpbmdEaWFsb2coeyBpc09wZW46IGZhbHNlLCBldmVudDogbnVsbCwgdXBkYXRlczogbnVsbCB9KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHVwZGF0ZVJlY3VycmluZ0V2ZW50KHJlY3VycmluZ0RpYWxvZy5ldmVudCwgcmVjdXJyaW5nRGlhbG9nLnVwZGF0ZXMsIHtcbiAgICAgICAgc2NvcGUsXG4gICAgICAgIGV2ZW50RGF0ZTogcmVjdXJyaW5nRGlhbG9nLmV2ZW50LnN0YXJ0LFxuICAgICAgfSlcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFNpbGVudGx5IGhhbmRsZSBlcnJvciBhbmQgcmVzZXQgZGlhbG9nIHN0YXRlXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldFJlY3VycmluZ0RpYWxvZyh7IGlzT3BlbjogZmFsc2UsIGV2ZW50OiBudWxsLCB1cGRhdGVzOiBudWxsIH0pXG4gICAgfVxuICB9XG5cbiAgLy8gSGFuZGxlIHJlY3VycmluZyBldmVudCBkaWFsb2cgY2xvc2VcbiAgY29uc3QgaGFuZGxlUmVjdXJyaW5nRXZlbnRDbG9zZSA9ICgpID0+IHtcbiAgICBzZXRSZWN1cnJpbmdEaWFsb2coeyBpc09wZW46IGZhbHNlLCBldmVudDogbnVsbCwgdXBkYXRlczogbnVsbCB9KVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRHJhZ1N0YXJ0ID0gKGV2ZW50OiBEcmFnU3RhcnRFdmVudCkgPT4ge1xuICAgIGNvbnN0IHsgYWN0aXZlIH0gPSBldmVudFxuXG4gICAgLy8gU2V0IHRoZSBhY3RpdmUgZXZlbnQgYmFzZWQgb24gdGhlIGV2ZW50IGRhdGFcbiAgICBpZiAoYWN0aXZlLmRhdGEuY3VycmVudD8udHlwZSA9PT0gJ2NhbGVuZGFyLWV2ZW50Jykge1xuICAgICAgc2V0QWN0aXZlRXZlbnQoYWN0aXZlLmRhdGEuY3VycmVudC5ldmVudClcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVEcmFnRW5kID0gKGV2ZW50OiBEcmFnRW5kRXZlbnQpID0+IHtcbiAgICBjb25zdCB7IGFjdGl2ZSwgb3ZlciB9ID0gZXZlbnRcblxuICAgIGlmICghYWN0aXZlIHx8ICFvdmVyIHx8ICFhY3RpdmVFdmVudCkge1xuICAgICAgc2V0QWN0aXZlRXZlbnQobnVsbClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChvdmVyLmRhdGEuY3VycmVudD8udHlwZSA9PT0gJ3RpbWUtY2VsbCcpIHtcbiAgICAgIGNvbnN0IHsgZGF0ZSwgaG91ciA9IDAsIG1pbnV0ZSA9IDAgfSA9IG92ZXIuZGF0YS5jdXJyZW50XG5cbiAgICAgIC8vIENhbGN1bGF0ZSB0aGUgZXZlbnQgZHVyYXRpb24gaW4gbWludXRlc1xuICAgICAgY29uc3Qgc3RhcnQgPSBhY3RpdmVFdmVudC5zdGFydFxuICAgICAgY29uc3QgZW5kID0gYWN0aXZlRXZlbnQuZW5kXG4gICAgICBjb25zdCBkdXJhdGlvbk1pbnV0ZXMgPSBlbmQuZGlmZihzdGFydCwgJ21pbnV0ZScpXG5cbiAgICAgIC8vIENyZWF0ZSBuZXcgc3RhcnQgdGltZSBiYXNlZCBvbiB0aGUgZHJvcCB0YXJnZXRcbiAgICAgIGNvbnN0IG5ld1N0YXJ0ID0gZGF5anMoZGF0ZSlcbiAgICAgICAgLmhvdXIoaG91cilcbiAgICAgICAgLm1pbnV0ZShtaW51dGUgfHwgMClcblxuICAgICAgLy8gQ3JlYXRlIG5ldyBlbmQgdGltZSBieSBhZGRpbmcgdGhlIG9yaWdpbmFsIGR1cmF0aW9uXG4gICAgICBsZXQgbmV3RW5kID0gbmV3U3RhcnQuYWRkKGR1cmF0aW9uTWludXRlcywgJ21pbnV0ZScpXG4gICAgICBpZiAobmV3RW5kLmlzU2FtZShuZXdFbmQuc3RhcnRPZignZGF5JykpKSB7XG4gICAgICAgIC8vIElmIHRoZSBuZXcgZW5kIHRpbWUgaXMgYXQgbWlkbmlnaHQsIHNldCBpdCB0byAyNCBob3VycyBvZiBwYXJ0aWFsIGRheVxuICAgICAgICBuZXdFbmQgPSBuZXdFbmQuc3VidHJhY3QoMSwgJ2RheScpLmVuZE9mKCdkYXknKVxuICAgICAgfVxuXG4gICAgICAvLyBVcGRhdGUgdGhlIGV2ZW50IHdpdGggbmV3IHRpbWVzXG4gICAgICBwZXJmb3JtRXZlbnRVcGRhdGUoYWN0aXZlRXZlbnQsIHtcbiAgICAgICAgc3RhcnQ6IG5ld1N0YXJ0LFxuICAgICAgICBlbmQ6IG5ld0VuZCxcbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmIChvdmVyLmRhdGEuY3VycmVudD8udHlwZSA9PT0gJ2RheS1jZWxsJykge1xuICAgICAgY29uc3QgeyBkYXRlIH0gPSBvdmVyLmRhdGEuY3VycmVudFxuICAgICAgY29uc3QgbmV3RGF0ZSA9IGRheWpzKGRhdGUpXG5cbiAgICAgIC8vIEZvciBtdWx0aS1kYXkgZXZlbnRzLCB3ZSBuZWVkIHRvIHByZXNlcnZlIHRoZSBkdXJhdGlvbiBpbiBkYXlzXG4gICAgICBjb25zdCBpc011bHRpRGF5RXZlbnQgPSAhYWN0aXZlRXZlbnQuc3RhcnQuaXNTYW1lKGFjdGl2ZUV2ZW50LmVuZCwgJ2RheScpXG4gICAgICBjb25zdCBzdGFydCA9IGFjdGl2ZUV2ZW50LnN0YXJ0XG4gICAgICBjb25zdCBlbmQgPSBhY3RpdmVFdmVudC5lbmRcblxuICAgICAgaWYgKGlzTXVsdGlEYXlFdmVudCkge1xuICAgICAgICBpZiAodmlldyA9PT0gJ3dlZWsnKSB7XG4gICAgICAgICAgLy8gR2V0IHRpbWUgY29tcG9uZW50cyB0byBwcmVzZXJ2ZVxuICAgICAgICAgIGNvbnN0IHN0YXJ0SG91ciA9IHN0YXJ0LmhvdXIoKVxuICAgICAgICAgIGNvbnN0IHN0YXJ0TWludXRlID0gc3RhcnQubWludXRlKClcbiAgICAgICAgICBjb25zdCBlbmRIb3VyID0gZW5kLmhvdXIoKVxuICAgICAgICAgIGNvbnN0IGVuZE1pbnV0ZSA9IGVuZC5taW51dGUoKVxuXG4gICAgICAgICAgLy8gQ2FsY3VsYXRlIGR1cmF0aW9uIGluIGRheXMgdG8gcHJlc2VydmVcbiAgICAgICAgICBjb25zdCBkdXJhdGlvbkRheXMgPSBlbmQuZGlmZihzdGFydCwgJ2RheScpXG5cbiAgICAgICAgICAvLyBDcmVhdGUgbmV3IHN0YXJ0IGFuZCBlbmQgZGF0ZXNcbiAgICAgICAgICBjb25zdCBuZXdTdGFydCA9IG5ld0RhdGVcbiAgICAgICAgICAgIC5zdGFydE9mKCdkYXknKVxuICAgICAgICAgICAgLmhvdXIoc3RhcnRIb3VyKVxuICAgICAgICAgICAgLm1pbnV0ZShzdGFydE1pbnV0ZSlcbiAgICAgICAgICBjb25zdCBuZXdFbmQgPSBuZXdTdGFydFxuICAgICAgICAgICAgLmFkZChkdXJhdGlvbkRheXMsICdkYXknKVxuICAgICAgICAgICAgLmhvdXIoZW5kSG91cilcbiAgICAgICAgICAgIC5taW51dGUoZW5kTWludXRlKVxuXG4gICAgICAgICAgcGVyZm9ybUV2ZW50VXBkYXRlKGFjdGl2ZUV2ZW50LCB7XG4gICAgICAgICAgICBzdGFydDogbmV3U3RhcnQsXG4gICAgICAgICAgICBlbmQ6IG5ld0VuZCxcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEZvciBvdGhlciB2aWV3cyBsaWtlIG1vbnRoIHZpZXdcbiAgICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGRhdGUgc2hpZnQgKGhvdyBtYW55IGRheXMgd2UncmUgbW92aW5nIHRoZSBldmVudClcbiAgICAgICAgICBjb25zdCBkYXlzRGlmZmVyZW5jZSA9IG5ld0RhdGUuZGlmZihzdGFydC5zdGFydE9mKCdkYXknKSwgJ2RheScpXG5cbiAgICAgICAgICAvLyBDYWxjdWxhdGUgbmV3IHN0YXJ0IGFuZCBlbmQgd2hpbGUgcHJlc2VydmluZyB0aW1lIGNvbXBvbmVudHNcbiAgICAgICAgICBjb25zdCBuZXdTdGFydCA9IHN0YXJ0LmFkZChkYXlzRGlmZmVyZW5jZSwgJ2RheScpXG4gICAgICAgICAgY29uc3QgbmV3RW5kID0gZW5kLmFkZChkYXlzRGlmZmVyZW5jZSwgJ2RheScpXG5cbiAgICAgICAgICBwZXJmb3JtRXZlbnRVcGRhdGUoYWN0aXZlRXZlbnQsIHtcbiAgICAgICAgICAgIHN0YXJ0OiBuZXdTdGFydCxcbiAgICAgICAgICAgIGVuZDogbmV3RW5kLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZvciBzaW5nbGUtZGF5IGV2ZW50cywgbWFpbnRhaW4gdGhlIHRpbWUgYnV0IGNoYW5nZSB0aGUgZGF0ZVxuICAgICAgICBjb25zdCBuZXdTdGFydCA9IG5ld0RhdGVcbiAgICAgICAgICAuaG91cihhY3RpdmVFdmVudC5zdGFydC5ob3VyKCkpXG4gICAgICAgICAgLm1pbnV0ZShhY3RpdmVFdmVudC5zdGFydC5taW51dGUoKSlcblxuICAgICAgICAvLyBDYWxjdWxhdGUgZXZlbnQgZHVyYXRpb24gYW5kIHNldCBuZXcgZW5kIHRpbWVcbiAgICAgICAgY29uc3QgZHVyYXRpb25NaW51dGVzID0gYWN0aXZlRXZlbnQuZW5kLmRpZmYoXG4gICAgICAgICAgYWN0aXZlRXZlbnQuc3RhcnQsXG4gICAgICAgICAgJ21pbnV0ZSdcbiAgICAgICAgKVxuICAgICAgICBjb25zdCBuZXdFbmQgPSBuZXdTdGFydC5hZGQoZHVyYXRpb25NaW51dGVzLCAnbWludXRlJylcblxuICAgICAgICBwZXJmb3JtRXZlbnRVcGRhdGUoYWN0aXZlRXZlbnQsIHtcbiAgICAgICAgICBzdGFydDogbmV3U3RhcnQsXG4gICAgICAgICAgZW5kOiBuZXdFbmQsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0QWN0aXZlRXZlbnQobnVsbClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURyYWdDYW5jZWwgPSAoX2V2ZW50OiBEcmFnQ2FuY2VsRXZlbnQpID0+IHtcbiAgICBzZXRBY3RpdmVFdmVudChudWxsKVxuICB9XG5cbiAgLy8gSWYgZHJhZyBhbmQgZHJvcCBpcyBkaXNhYmxlZCwganVzdCByZXR1cm4gY2hpbGRyZW4gd2l0aG91dCBEbmRDb250ZXh0XG4gIGlmIChkaXNhYmxlRHJhZ0FuZERyb3ApIHtcbiAgICByZXR1cm4gY2hpbGRyZW4gYXMgUmVhY3QuUmVhY3RFbGVtZW50XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8RG5kQ29udGV4dFxuICAgICAgICBzZW5zb3JzPXtzZW5zb3JzfVxuICAgICAgICBvbkRyYWdTdGFydD17aGFuZGxlRHJhZ1N0YXJ0fVxuICAgICAgICBvbkRyYWdFbmQ9e2hhbmRsZURyYWdFbmR9XG4gICAgICAgIG9uRHJhZ0NhbmNlbD17aGFuZGxlRHJhZ0NhbmNlbH1cbiAgICAgICAgY29sbGlzaW9uRGV0ZWN0aW9uPXtwb2ludGVyV2l0aGlufVxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDxEcmFnT3ZlcmxheSBtb2RpZmllcnM9e1tzbmFwQ2VudGVyVG9DdXJzb3JdfT5cbiAgICAgICAgICB7YWN0aXZlRXZlbnQgJiYgKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICdjdXJzb3ItZ3JhYiB0cnVuY2F0ZSByb3VuZGVkIGJnLWFtYmVyLTIwMCBwLTIgdGV4dC1bMTBweF0gc2hhZG93LWxnIHNtOnRleHQteHMnLFxuICAgICAgICAgICAgICAgIGFjdGl2ZUV2ZW50LmJhY2tncm91bmRDb2xvciB8fCAnYmctYmx1ZS01MDAnLFxuICAgICAgICAgICAgICAgIGFjdGl2ZUV2ZW50LmNvbG9yIHx8ICd0ZXh0LXdoaXRlJ1xuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7YWN0aXZlRXZlbnQ/LnRpdGxlfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9EcmFnT3ZlcmxheT5cbiAgICAgIDwvRG5kQ29udGV4dD5cblxuICAgICAgey8qIFJlY3VycmluZyBldmVudCBlZGl0IGRpYWxvZyAqL31cbiAgICAgIDxSZWN1cnJlbmNlRWRpdERpYWxvZ1xuICAgICAgICBpc09wZW49e3JlY3VycmluZ0RpYWxvZy5pc09wZW59XG4gICAgICAgIG9uQ2xvc2U9e2hhbmRsZVJlY3VycmluZ0V2ZW50Q2xvc2V9XG4gICAgICAgIG9uQ29uZmlybT17aGFuZGxlUmVjdXJyaW5nRXZlbnRDb25maXJtfVxuICAgICAgICBvcGVyYXRpb25UeXBlPVwiZWRpdFwiXG4gICAgICAgIGV2ZW50VGl0bGU9e3JlY3VycmluZ0RpYWxvZy5ldmVudD8udGl0bGUgfHwgJyd9XG4gICAgICAvPlxuICAgIDwvPlxuICApXG59XG4iLAogICAgImltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBDYWxlbmRhckNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQge1xuICBnZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyxcbiAgdXBkYXRlUmVjdXJyaW5nRXZlbnQgYXMgdXBkYXRlUmVjdXJyaW5nRXZlbnRJbXBsLFxuICBkZWxldGVSZWN1cnJpbmdFdmVudCBhcyBkZWxldGVSZWN1cnJpbmdFdmVudEltcGwsXG59IGZyb20gJ0AvbGliL3JlY3VycmVuY2UtaGFuZGxlcidcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBUcmFuc2xhdGlvbnMsIFRyYW5zbGF0b3JGdW5jdGlvbiB9IGZyb20gJ0AvbGliL3RyYW5zbGF0aW9ucy90eXBlcydcbmltcG9ydCB7IGRlZmF1bHRUcmFuc2xhdGlvbnMgfSBmcm9tICdAL2xpYi90cmFuc2xhdGlvbnMvZGVmYXVsdCdcblxuaW50ZXJmYWNlIENhbGVuZGFyUHJvdmlkZXJQcm9wcyB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGVcbiAgZXZlbnRzPzogQ2FsZW5kYXJFdmVudFtdXG4gIGZpcnN0RGF5T2ZXZWVrPzogbnVtYmVyIC8vIDAgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5LCBldGMuXG4gIGluaXRpYWxWaWV3PzogJ21vbnRoJyB8ICd3ZWVrJyB8ICdkYXknIHwgJ3llYXInXG4gIHJlbmRlckV2ZW50PzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBSZWFjdE5vZGVcbiAgb25FdmVudENsaWNrPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG4gIG9uQ2VsbENsaWNrPzogKHN0YXJ0RGF0ZTogZGF5anMuRGF5anMsIGVuZERhdGU6IGRheWpzLkRheWpzKSA9PiB2b2lkXG4gIG9uVmlld0NoYW5nZT86ICh2aWV3OiAnbW9udGgnIHwgJ3dlZWsnIHwgJ2RheScgfCAneWVhcicpID0+IHZvaWRcbiAgb25FdmVudEFkZD86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuICBvbkV2ZW50VXBkYXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG4gIG9uRXZlbnREZWxldGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgb25EYXRlQ2hhbmdlPzogKGRhdGU6IGRheWpzLkRheWpzKSA9PiB2b2lkXG4gIGxvY2FsZT86IHN0cmluZ1xuICB0aW1lem9uZT86IHN0cmluZ1xuICBkaXNhYmxlQ2VsbENsaWNrPzogYm9vbGVhblxuICBkaXNhYmxlRXZlbnRDbGljaz86IGJvb2xlYW5cbiAgZGlzYWJsZURyYWdBbmREcm9wPzogYm9vbGVhblxuICBkYXlNYXhFdmVudHM6IG51bWJlclxuICBzdGlja3lWaWV3SGVhZGVyPzogYm9vbGVhblxuICB2aWV3SGVhZGVyQ2xhc3NOYW1lPzogc3RyaW5nXG4gIGhlYWRlckNvbXBvbmVudD86IFJlYWN0Tm9kZSAvLyBPcHRpb25hbCBjdXN0b20gaGVhZGVyIGNvbXBvbmVudFxuICBoZWFkZXJDbGFzc05hbWU/OiBzdHJpbmcgLy8gT3B0aW9uYWwgY3VzdG9tIGhlYWRlciBjbGFzc1xuICAvLyBUcmFuc2xhdGlvbiBvcHRpb25zIC0gcHJvdmlkZSBlaXRoZXIgdHJhbnNsYXRpb25zIG9iamVjdCBPUiB0cmFuc2xhdG9yIGZ1bmN0aW9uXG4gIHRyYW5zbGF0aW9ucz86IFRyYW5zbGF0aW9uc1xuICB0cmFuc2xhdG9yPzogVHJhbnNsYXRvckZ1bmN0aW9uXG59XG5cbmV4cG9ydCBjb25zdCBDYWxlbmRhclByb3ZpZGVyOiBSZWFjdC5GQzxDYWxlbmRhclByb3ZpZGVyUHJvcHM+ID0gKHtcbiAgY2hpbGRyZW4sXG4gIGV2ZW50cyA9IFtdLFxuICBmaXJzdERheU9mV2VlayA9IDAsIC8vIERlZmF1bHQgdG8gU3VuZGF5LFxuICBpbml0aWFsVmlldyA9ICdtb250aCcsXG4gIHJlbmRlckV2ZW50LFxuICBvbkV2ZW50Q2xpY2ssXG4gIG9uQ2VsbENsaWNrLFxuICBvblZpZXdDaGFuZ2UsXG4gIG9uRXZlbnRBZGQsXG4gIG9uRXZlbnRVcGRhdGUsXG4gIG9uRXZlbnREZWxldGUsXG4gIG9uRGF0ZUNoYW5nZSxcbiAgbG9jYWxlLFxuICB0aW1lem9uZSxcbiAgZGlzYWJsZUNlbGxDbGljayxcbiAgZGlzYWJsZUV2ZW50Q2xpY2ssXG4gIGRpc2FibGVEcmFnQW5kRHJvcCxcbiAgZGF5TWF4RXZlbnRzLFxuICBzdGlja3lWaWV3SGVhZGVyID0gdHJ1ZSxcbiAgdmlld0hlYWRlckNsYXNzTmFtZSA9ICcnLFxuICBoZWFkZXJDb21wb25lbnQsXG4gIGhlYWRlckNsYXNzTmFtZSxcbiAgdHJhbnNsYXRpb25zLFxuICB0cmFuc2xhdG9yLFxufSkgPT4ge1xuICAvLyBTdGF0ZVxuICBjb25zdCBbY3VycmVudERhdGUsIHNldEN1cnJlbnREYXRlXSA9IHVzZVN0YXRlPGRheWpzLkRheWpzPihkYXlqcygpKVxuICBjb25zdCBbdmlldywgc2V0Vmlld10gPSB1c2VTdGF0ZTwnbW9udGgnIHwgJ3dlZWsnIHwgJ2RheScgfCAneWVhcic+KFxuICAgIGluaXRpYWxWaWV3XG4gIClcbiAgY29uc3QgW2N1cnJlbnRFdmVudHMsIHNldEN1cnJlbnRFdmVudHNdID0gdXNlU3RhdGU8Q2FsZW5kYXJFdmVudFtdPihldmVudHMpXG4gIGNvbnN0IFtpc0V2ZW50Rm9ybU9wZW4sIHNldElzRXZlbnRGb3JtT3Blbl0gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSlcbiAgY29uc3QgW3NlbGVjdGVkRXZlbnQsIHNldFNlbGVjdGVkRXZlbnRdID0gdXNlU3RhdGU8Q2FsZW5kYXJFdmVudCB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtzZWxlY3RlZERhdGUsIHNldFNlbGVjdGVkRGF0ZV0gPSB1c2VTdGF0ZTxkYXlqcy5EYXlqcyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtjdXJyZW50TG9jYWxlLCBzZXRDdXJyZW50TG9jYWxlXSA9IHVzZVN0YXRlPHN0cmluZz4obG9jYWxlIHx8ICdlbicpXG4gIGNvbnN0IFtjdXJyZW50VGltZXpvbmUsIHNldEN1cnJlbnRUaW1lem9uZV0gPSB1c2VTdGF0ZTxzdHJpbmc+KHRpbWV6b25lIHx8ICcnKVxuXG4gIC8vIENyZWF0ZSB0cmFuc2xhdGlvbiBmdW5jdGlvblxuICBjb25zdCB0ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKHRyYW5zbGF0b3IpIHtcbiAgICAgIC8vIFVzZSBwcm92aWRlZCB0cmFuc2xhdG9yIGZ1bmN0aW9uXG4gICAgICByZXR1cm4gdHJhbnNsYXRvclxuICAgIH1cblxuICAgIGlmICh0cmFuc2xhdGlvbnMpIHtcbiAgICAgIC8vIFVzZSBwcm92aWRlZCB0cmFuc2xhdGlvbnMgb2JqZWN0XG4gICAgICByZXR1cm4gKGtleToga2V5b2YgVHJhbnNsYXRpb25zKSA9PiB0cmFuc2xhdGlvbnNba2V5XSB8fCBrZXlcbiAgICB9XG4gICAgLy8gVXNlIGRlZmF1bHQgdHJhbnNsYXRpb25zXG4gICAgcmV0dXJuIChrZXk6IGtleW9mIFRyYW5zbGF0aW9ucykgPT4gZGVmYXVsdFRyYW5zbGF0aW9uc1trZXldIHx8IGtleVxuICB9LCBbdHJhbnNsYXRpb25zLCB0cmFuc2xhdG9yXSlcblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IGV2ZW50cyBmb3IgYSBzcGVjaWZpYyBkYXRlIHJhbmdlIChvbi1kZW1hbmQgZ2VuZXJhdGlvbilcbiAgY29uc3QgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKHN0YXJ0RGF0ZTogZGF5anMuRGF5anMsIGVuZERhdGU6IGRheWpzLkRheWpzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcbiAgICAgIGNvbnN0IGFsbEV2ZW50czogQ2FsZW5kYXJFdmVudFtdID0gW11cblxuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBjdXJyZW50RXZlbnRzKSB7XG4gICAgICAgIGlmIChldmVudC5ycnVsZSkge1xuICAgICAgICAgIC8vIEdlbmVyYXRlIHJlY3VycmluZyBpbnN0YW5jZXMgZm9yIHRoZSBzcGVjaWZpYyByYW5nZVxuICAgICAgICAgIGNvbnN0IHJlY3VycmluZ0V2ZW50cyA9IGdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzKHtcbiAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgY3VycmVudEV2ZW50cyxcbiAgICAgICAgICAgIHN0YXJ0RGF0ZSxcbiAgICAgICAgICAgIGVuZERhdGUsXG4gICAgICAgICAgfSlcbiAgICAgICAgICBhbGxFdmVudHMucHVzaCguLi5yZWN1cnJpbmdFdmVudHMpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQWRkIG5vbi1yZWN1cnJpbmcgZXZlbnRzIHdpdGggY29tcHJlaGVuc2l2ZSByYW5nZSBjaGVja2luZ1xuICAgICAgICAgIGNvbnN0IGV2ZW50U3RhcnRzSW5SYW5nZSA9XG4gICAgICAgICAgICBldmVudC5zdGFydC5pc1NhbWVPckFmdGVyKHN0YXJ0RGF0ZSkgJiZcbiAgICAgICAgICAgIGV2ZW50LnN0YXJ0LmlzU2FtZU9yQmVmb3JlKGVuZERhdGUpXG5cbiAgICAgICAgICBjb25zdCBldmVudEVuZHNJblJhbmdlID1cbiAgICAgICAgICAgIGV2ZW50LmVuZC5pc1NhbWVPckFmdGVyKHN0YXJ0RGF0ZSkgJiZcbiAgICAgICAgICAgIGV2ZW50LmVuZC5pc1NhbWVPckJlZm9yZShlbmREYXRlKVxuXG4gICAgICAgICAgY29uc3QgZXZlbnRTcGFuc1JhbmdlID1cbiAgICAgICAgICAgIGV2ZW50LnN0YXJ0LmlzQmVmb3JlKHN0YXJ0RGF0ZSkgJiYgZXZlbnQuZW5kLmlzQWZ0ZXIoZW5kRGF0ZSlcblxuICAgICAgICAgIGlmIChldmVudFN0YXJ0c0luUmFuZ2UgfHwgZXZlbnRFbmRzSW5SYW5nZSB8fCBldmVudFNwYW5zUmFuZ2UpIHtcbiAgICAgICAgICAgIGFsbEV2ZW50cy5wdXNoKGV2ZW50KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxsRXZlbnRzXG4gICAgfSxcbiAgICBbY3VycmVudEV2ZW50c11cbiAgKVxuXG4gIC8vIEdldCB0aGUgY3VycmVudCB2aWV3J3MgZGF0ZSByYW5nZSBmb3Igb24tZGVtYW5kIGV2ZW50IGdlbmVyYXRpb25cbiAgY29uc3QgZ2V0Q3VycmVudFZpZXdSYW5nZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzd2l0Y2ggKHZpZXcpIHtcbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3RhcnQ6IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ2RheScpLFxuICAgICAgICAgIGVuZDogY3VycmVudERhdGUuZW5kT2YoJ2RheScpLFxuICAgICAgICB9XG4gICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGFydDogY3VycmVudERhdGVcbiAgICAgICAgICAgIC5zdGFydE9mKCd3ZWVrJylcbiAgICAgICAgICAgIC5zdWJ0cmFjdChmaXJzdERheU9mV2VlayA9PT0gMSA/IDEgOiAwLCAnZGF5JyksXG4gICAgICAgICAgZW5kOiBjdXJyZW50RGF0ZVxuICAgICAgICAgICAgLmVuZE9mKCd3ZWVrJylcbiAgICAgICAgICAgIC5hZGQoZmlyc3REYXlPZldlZWsgPT09IDEgPyAxIDogMCwgJ2RheScpLFxuICAgICAgICB9XG4gICAgICBjYXNlICdtb250aCc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3RhcnQ6IGN1cnJlbnREYXRlXG4gICAgICAgICAgICAuc3RhcnRPZignbW9udGgnKVxuICAgICAgICAgICAgLnN0YXJ0T2YoJ3dlZWsnKVxuICAgICAgICAgICAgLnN1YnRyYWN0KGZpcnN0RGF5T2ZXZWVrID09PSAxID8gMSA6IDAsICdkYXknKSxcbiAgICAgICAgICBlbmQ6IGN1cnJlbnREYXRlXG4gICAgICAgICAgICAuZW5kT2YoJ21vbnRoJylcbiAgICAgICAgICAgIC5lbmRPZignd2VlaycpXG4gICAgICAgICAgICAuYWRkKGZpcnN0RGF5T2ZXZWVrID09PSAxID8gMSA6IDAsICdkYXknKSxcbiAgICAgICAgfVxuICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3RhcnQ6IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ3llYXInKSxcbiAgICAgICAgICBlbmQ6IGN1cnJlbnREYXRlLmVuZE9mKCd5ZWFyJyksXG4gICAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3RhcnQ6IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ21vbnRoJyksXG4gICAgICAgICAgZW5kOiBjdXJyZW50RGF0ZS5lbmRPZignbW9udGgnKSxcbiAgICAgICAgfVxuICAgIH1cbiAgfSwgW2N1cnJlbnREYXRlLCB2aWV3LCBmaXJzdERheU9mV2Vla10pXG5cbiAgLy8gR2V0IHByb2Nlc3NlZCBldmVudHMgZm9yIHRoZSBjdXJyZW50IHZpZXcgKG9uLWRlbWFuZClcbiAgY29uc3QgcHJvY2Vzc2VkRXZlbnRzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSBnZXRDdXJyZW50Vmlld1JhbmdlKClcbiAgICByZXR1cm4gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKHN0YXJ0LCBlbmQpXG4gIH0sIFtnZXRFdmVudHNGb3JEYXRlUmFuZ2UsIGdldEN1cnJlbnRWaWV3UmFuZ2VdKVxuXG4gIC8vIFVwZGF0ZSBldmVudHMgd2hlbiBldmVudHMgcHJvcCBjaGFuZ2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGV2ZW50cykge1xuICAgICAgc2V0Q3VycmVudEV2ZW50cyhldmVudHMpXG4gICAgfVxuICB9LCBbZXZlbnRzXSlcblxuICAvLyBDb25maWd1cmUgbG9jYWxlIHdoZW4gbG9jYWxlIHByb3AgY2hhbmdlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChsb2NhbGUpIHtcbiAgICAgIHNldEN1cnJlbnRMb2NhbGUobG9jYWxlKVxuICAgICAgZGF5anMubG9jYWxlKGxvY2FsZSlcbiAgICB9XG4gIH0sIFtsb2NhbGVdKVxuXG4gIC8vIENvbmZpZ3VyZSB0aW1lem9uZSBmb3IgY3VycmVudERhdGUgd2hlbiB0aW1lem9uZSBwcm9wIGNoYW5nZXNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodGltZXpvbmUpIHtcbiAgICAgIHNldEN1cnJlbnRUaW1lem9uZSh0aW1lem9uZSlcbiAgICAgIGRheWpzLnR6LnNldERlZmF1bHQodGltZXpvbmUpXG4gICAgfVxuICB9LCBbdGltZXpvbmVdKVxuXG4gIC8vIEhhbmRsZXJzXG4gIGNvbnN0IHNlbGVjdERhdGUgPSB1c2VDYWxsYmFjayhcbiAgICAoZGF0ZTogZGF5anMuRGF5anMpID0+IHtcbiAgICAgIHNldEN1cnJlbnREYXRlKGRhdGUpXG4gICAgICBvbkRhdGVDaGFuZ2U/LihkYXRlKVxuICAgIH0sXG4gICAgW29uRGF0ZUNoYW5nZV1cbiAgKVxuXG4gIGNvbnN0IG5leHRQZXJpb2QgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc3dpdGNoICh2aWV3KSB7XG4gICAgICBjYXNlICdtb250aCc6XG4gICAgICAgIHNldEN1cnJlbnREYXRlKChjdXJyZW50RGF0ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld0RhdGUgPSBjdXJyZW50RGF0ZS5hZGQoMSwgJ21vbnRoJylcbiAgICAgICAgICBvbkRhdGVDaGFuZ2U/LihuZXdEYXRlKVxuICAgICAgICAgIHJldHVybiBuZXdEYXRlXG4gICAgICAgIH0pXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgc2V0Q3VycmVudERhdGUoKGN1cnJlbnREYXRlKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IGN1cnJlbnREYXRlLmFkZCgxLCAnd2VlaycpXG4gICAgICAgICAgb25EYXRlQ2hhbmdlPy4obmV3RGF0ZSlcbiAgICAgICAgICByZXR1cm4gbmV3RGF0ZVxuICAgICAgICB9KVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgc2V0Q3VycmVudERhdGUoKGN1cnJlbnREYXRlKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IGN1cnJlbnREYXRlLmFkZCgxLCAnZGF5JylcbiAgICAgICAgICBvbkRhdGVDaGFuZ2U/LihuZXdEYXRlKVxuICAgICAgICAgIHJldHVybiBuZXdEYXRlXG4gICAgICAgIH0pXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgc2V0Q3VycmVudERhdGUoKGN1cnJlbnREYXRlKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IGN1cnJlbnREYXRlLmFkZCgxLCAneWVhcicpXG4gICAgICAgICAgb25EYXRlQ2hhbmdlPy4obmV3RGF0ZSlcbiAgICAgICAgICByZXR1cm4gbmV3RGF0ZVxuICAgICAgICB9KVxuICAgICAgICBicmVha1xuICAgIH1cbiAgfSwgW3ZpZXcsIG9uRGF0ZUNoYW5nZV0pXG5cbiAgY29uc3QgcHJldlBlcmlvZCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzd2l0Y2ggKHZpZXcpIHtcbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgc2V0Q3VycmVudERhdGUoKGN1cnJlbnREYXRlKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IGN1cnJlbnREYXRlLnN1YnRyYWN0KDEsICdtb250aCcpXG4gICAgICAgICAgb25EYXRlQ2hhbmdlPy4obmV3RGF0ZSlcbiAgICAgICAgICByZXR1cm4gbmV3RGF0ZVxuICAgICAgICB9KVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgIHNldEN1cnJlbnREYXRlKChjdXJyZW50RGF0ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld0RhdGUgPSBjdXJyZW50RGF0ZS5zdWJ0cmFjdCgxLCAnd2VlaycpXG4gICAgICAgICAgb25EYXRlQ2hhbmdlPy4obmV3RGF0ZSlcbiAgICAgICAgICByZXR1cm4gbmV3RGF0ZVxuICAgICAgICB9KVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgc2V0Q3VycmVudERhdGUoKGN1cnJlbnREYXRlKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IGN1cnJlbnREYXRlLnN1YnRyYWN0KDEsICdkYXknKVxuICAgICAgICAgIG9uRGF0ZUNoYW5nZT8uKG5ld0RhdGUpXG4gICAgICAgICAgcmV0dXJuIG5ld0RhdGVcbiAgICAgICAgfSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICBzZXRDdXJyZW50RGF0ZSgoY3VycmVudERhdGUpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdEYXRlID0gY3VycmVudERhdGUuc3VidHJhY3QoMSwgJ3llYXInKVxuICAgICAgICAgIG9uRGF0ZUNoYW5nZT8uKG5ld0RhdGUpXG4gICAgICAgICAgcmV0dXJuIG5ld0RhdGVcbiAgICAgICAgfSlcbiAgICAgICAgYnJlYWtcbiAgICB9XG4gIH0sIFt2aWV3LCBvbkRhdGVDaGFuZ2VdKVxuXG4gIGNvbnN0IHRvZGF5ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IG5ld0RhdGUgPSBkYXlqcygpXG4gICAgc2V0Q3VycmVudERhdGUobmV3RGF0ZSlcbiAgICBvbkRhdGVDaGFuZ2U/LihuZXdEYXRlKVxuICB9LCBbb25EYXRlQ2hhbmdlXSlcblxuICBjb25zdCBhZGRFdmVudCA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuICAgICAgc2V0Q3VycmVudEV2ZW50cygocHJldkV2ZW50cykgPT4gWy4uLnByZXZFdmVudHMsIGV2ZW50XSlcbiAgICAgIG9uRXZlbnRBZGQ/LihldmVudClcbiAgICB9LFxuICAgIFtvbkV2ZW50QWRkXVxuICApXG5cbiAgY29uc3QgdXBkYXRlRXZlbnQgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnRJZDogc3RyaW5nLCB1cGRhdGVkRXZlbnQ6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHtcbiAgICAgIHNldEN1cnJlbnRFdmVudHMoKHByZXZFdmVudHMpID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlZCA9IHByZXZFdmVudHMubWFwKChldmVudCkgPT4ge1xuICAgICAgICAgIGlmIChldmVudC5pZCA9PT0gZXZlbnRJZCkge1xuICAgICAgICAgICAgY29uc3QgbmV3RXZlbnQgPSB7IC4uLmV2ZW50LCAuLi51cGRhdGVkRXZlbnQgfVxuICAgICAgICAgICAgb25FdmVudFVwZGF0ZT8uKG5ld0V2ZW50KVxuICAgICAgICAgICAgcmV0dXJuIG5ld0V2ZW50XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBldmVudFxuICAgICAgICB9KVxuICAgICAgICByZXR1cm4gdXBkYXRlZFxuICAgICAgfSlcbiAgICB9LFxuICAgIFtvbkV2ZW50VXBkYXRlXVxuICApXG5cbiAgY29uc3QgdXBkYXRlUmVjdXJyaW5nRXZlbnQgPSB1c2VDYWxsYmFjayhcbiAgICAoXG4gICAgICBldmVudDogQ2FsZW5kYXJFdmVudCxcbiAgICAgIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4sXG4gICAgICBvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcbiAgICApID0+IHtcbiAgICAgIC8vIENyZWF0ZSB0aGUgdXBkYXRlZCBldmVudCB3aXRoIHRoZSB1cGRhdGVzIGFwcGxpZWRcbiAgICAgIGNvbnN0IHVwZGF0ZWRFdmVudCA9IHsgLi4uZXZlbnQsIC4uLnVwZGF0ZXMgfVxuXG4gICAgICAvLyBDYWxsIHRoZSByZWd1bGFyIHVwZGF0ZSBjYWxsYmFjayB3aXRoIHRoZSB1cGRhdGVkIGV2ZW50XG4gICAgICBvbkV2ZW50VXBkYXRlPy4odXBkYXRlZEV2ZW50KVxuXG4gICAgICAvLyBVc2Ugb3VyIGltcGxlbWVudGVkIHJlY3VycmluZyBldmVudCB1cGRhdGUgZnVuY3Rpb25cbiAgICAgIGNvbnN0IHVwZGF0ZWRFdmVudHMgPSB1cGRhdGVSZWN1cnJpbmdFdmVudEltcGwoe1xuICAgICAgICB0YXJnZXRFdmVudDogZXZlbnQsXG4gICAgICAgIHVwZGF0ZXMsXG4gICAgICAgIGN1cnJlbnRFdmVudHMsXG4gICAgICAgIHNjb3BlOiBvcHRpb25zLnNjb3BlLFxuICAgICAgfSlcblxuICAgICAgc2V0Q3VycmVudEV2ZW50cyh1cGRhdGVkRXZlbnRzKVxuICAgIH0sXG4gICAgW2N1cnJlbnRFdmVudHMsIG9uRXZlbnRVcGRhdGVdXG4gIClcblxuICBjb25zdCBkZWxldGVSZWN1cnJpbmdFdmVudCA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogQ2FsZW5kYXJFdmVudCwgb3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zKSA9PiB7XG4gICAgICAvLyBDYWxsIHRoZSByZWd1bGFyIGRlbGV0ZSBjYWxsYmFjayB3aXRoIHRoZSBldmVudCBiZWluZyBkZWxldGVkXG4gICAgICBvbkV2ZW50RGVsZXRlPy4oZXZlbnQpXG5cbiAgICAgIC8vIFVzZSBvdXIgaW1wbGVtZW50ZWQgcmVjdXJyaW5nIGV2ZW50IGRlbGV0ZSBmdW5jdGlvblxuICAgICAgY29uc3QgdXBkYXRlZEV2ZW50cyA9IGRlbGV0ZVJlY3VycmluZ0V2ZW50SW1wbCh7XG4gICAgICAgIHRhcmdldEV2ZW50OiBldmVudCxcbiAgICAgICAgY3VycmVudEV2ZW50cyxcbiAgICAgICAgc2NvcGU6IG9wdGlvbnMuc2NvcGUsXG4gICAgICB9KVxuXG4gICAgICBzZXRDdXJyZW50RXZlbnRzKHVwZGF0ZWRFdmVudHMpXG4gICAgfSxcbiAgICBbY3VycmVudEV2ZW50cywgb25FdmVudERlbGV0ZV1cbiAgKVxuXG4gIGNvbnN0IGRlbGV0ZUV2ZW50ID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50SWQ6IHN0cmluZykgPT4ge1xuICAgICAgc2V0Q3VycmVudEV2ZW50cygocHJldkV2ZW50cykgPT4ge1xuICAgICAgICBjb25zdCBldmVudFRvRGVsZXRlID0gcHJldkV2ZW50cy5maW5kKChldmVudCkgPT4gZXZlbnQuaWQgPT09IGV2ZW50SWQpXG4gICAgICAgIGlmIChldmVudFRvRGVsZXRlKSB7XG4gICAgICAgICAgb25FdmVudERlbGV0ZT8uKGV2ZW50VG9EZWxldGUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByZXZFdmVudHMuZmlsdGVyKChldmVudCkgPT4gZXZlbnQuaWQgIT09IGV2ZW50SWQpXG4gICAgICB9KVxuICAgIH0sXG4gICAgW29uRXZlbnREZWxldGVdXG4gIClcblxuICBjb25zdCBlZGl0RXZlbnQgPSB1c2VDYWxsYmFjaygoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcbiAgICBzZXRTZWxlY3RlZEV2ZW50KGV2ZW50KVxuICAgIHNldElzRXZlbnRGb3JtT3Blbih0cnVlKVxuICB9LCBbXSlcblxuICBjb25zdCBjbG9zZUV2ZW50Rm9ybSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRTZWxlY3RlZERhdGUobnVsbClcbiAgICBzZXRTZWxlY3RlZEV2ZW50KG51bGwpXG4gICAgc2V0SXNFdmVudEZvcm1PcGVuKGZhbHNlKVxuICB9LCBbXSlcblxuICAvLyBDdXN0b20gaGFuZGxlcnMgdGhhdCBjYWxsIGV4dGVybmFsIGNhbGxiYWNrc1xuICBjb25zdCBoYW5kbGVWaWV3Q2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKG5ld1ZpZXc6ICdtb250aCcgfCAnd2VlaycgfCAnZGF5JyB8ICd5ZWFyJykgPT4ge1xuICAgICAgc2V0VmlldyhuZXdWaWV3KVxuICAgICAgb25WaWV3Q2hhbmdlPy4obmV3VmlldylcbiAgICB9LFxuICAgIFtvblZpZXdDaGFuZ2VdXG4gIClcblxuICBjb25zdCBoYW5kbGVFdmVudENsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG4gICAgICBpZiAoZGlzYWJsZUNlbGxDbGljaykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChvbkV2ZW50Q2xpY2spIHtcbiAgICAgICAgb25FdmVudENsaWNrKGV2ZW50KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWRpdEV2ZW50KGV2ZW50KVxuICAgICAgfVxuICAgIH0sXG4gICAgW2Rpc2FibGVDZWxsQ2xpY2ssIG9uRXZlbnRDbGljaywgZWRpdEV2ZW50XVxuICApXG5cbiAgY29uc3QgaGFuZGxlRGF0ZUNsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgKHN0YXJ0RGF0ZTogZGF5anMuRGF5anMsIGVuZERhdGU6IGRheWpzLkRheWpzKSA9PiB7XG4gICAgICBpZiAoZGlzYWJsZUNlbGxDbGljaykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKG9uQ2VsbENsaWNrKSB7XG4gICAgICAgIG9uQ2VsbENsaWNrKHN0YXJ0RGF0ZSwgZW5kRGF0ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFNlbGVjdGVkRGF0ZShzdGFydERhdGUpXG4gICAgICAgIHNldFNlbGVjdGVkRXZlbnQoe1xuICAgICAgICAgIHRpdGxlOiB0KCduZXdFdmVudCcpLFxuICAgICAgICAgIHN0YXJ0OiBzdGFydERhdGUsXG4gICAgICAgICAgZW5kOiBlbmREYXRlLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgICAgICBhbGxEYXk6IGZhbHNlLFxuICAgICAgICB9IGFzIENhbGVuZGFyRXZlbnQpXG4gICAgICAgIHNldElzRXZlbnRGb3JtT3Blbih0cnVlKVxuICAgICAgfVxuICAgIH0sXG4gICAgW29uQ2VsbENsaWNrLCBkaXNhYmxlQ2VsbENsaWNrLCB0XVxuICApXG5cbiAgY29uc3QgaGFuZGxlT3BlbkV2ZW50Rm9ybSA9IHVzZUNhbGxiYWNrKFxuICAgIChkYXRlPzogZGF5anMuRGF5anMpID0+IHtcbiAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgIHNldFNlbGVjdGVkRGF0ZShkYXRlKVxuICAgICAgfVxuICAgICAgc2V0U2VsZWN0ZWRFdmVudCh7XG4gICAgICAgIHRpdGxlOiB0KCduZXdFdmVudCcpLFxuICAgICAgICBzdGFydDogZGF0ZSA/PyBjdXJyZW50RGF0ZSxcbiAgICAgICAgZW5kOiBkYXRlID8/IGN1cnJlbnREYXRlLmFkZCgxLCAnaG91cicpLFxuICAgICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICAgIGFsbERheTogZmFsc2UsXG4gICAgICB9IGFzIENhbGVuZGFyRXZlbnQpXG4gICAgICBzZXRJc0V2ZW50Rm9ybU9wZW4odHJ1ZSlcbiAgICB9LFxuICAgIFtjdXJyZW50RGF0ZSwgdF1cbiAgKVxuXG4gIC8vIEZpbmQgcGFyZW50IHJlY3VycmluZyBldmVudCBmb3IgYSBnaXZlbiBldmVudCBpbnN0YW5jZVxuICBjb25zdCBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBDYWxlbmRhckV2ZW50IHwgbnVsbCA9PiB7XG4gICAgICAvLyBHZW5lcmF0ZSBVSUQgaWYgbWlzc2luZyAoZm9sbG93aW5nIFJGQyA1NTQ1IGNvbXBsaWFuY2UpXG4gICAgICBjb25zdCB0YXJnZXRVSUQgPSBldmVudC51aWRcblxuICAgICAgY29uc3QgcGFyZW50RXZlbnQgPSBjdXJyZW50RXZlbnRzLmZpbmQoKGUpID0+IHtcbiAgICAgICAgY29uc3QgcGFyZW50VUlEID0gZS51aWQgfHwgYCR7ZS5pZH1AaWxhbXkuY2FsZW5kYXJgXG4gICAgICAgIHJldHVybiBwYXJlbnRVSUQgPT09IHRhcmdldFVJRCAmJiBlLnJydWxlXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4gcGFyZW50RXZlbnQgfHwgbnVsbFxuICAgIH0sXG4gICAgW2N1cnJlbnRFdmVudHNdXG4gIClcblxuICAvLyBDcmVhdGUgdGhlIGNvbnRleHQgdmFsdWVcbiAgY29uc3QgY29udGV4dFZhbHVlID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgY3VycmVudERhdGUsXG4gICAgICB2aWV3LFxuICAgICAgZXZlbnRzOiBwcm9jZXNzZWRFdmVudHMsXG4gICAgICByYXdFdmVudHM6IGN1cnJlbnRFdmVudHMsXG4gICAgICBjdXJyZW50TG9jYWxlLFxuICAgICAgaXNFdmVudEZvcm1PcGVuLFxuICAgICAgc2VsZWN0ZWRFdmVudCxcbiAgICAgIHNlbGVjdGVkRGF0ZSxcbiAgICAgIGZpcnN0RGF5T2ZXZWVrLFxuICAgICAgc2V0Q3VycmVudERhdGUsXG4gICAgICBzZWxlY3REYXRlLFxuICAgICAgc2V0VmlldzogaGFuZGxlVmlld0NoYW5nZSxcbiAgICAgIG5leHRQZXJpb2QsXG4gICAgICBwcmV2UGVyaW9kLFxuICAgICAgdG9kYXksXG4gICAgICBhZGRFdmVudCxcbiAgICAgIHVwZGF0ZUV2ZW50LFxuICAgICAgdXBkYXRlUmVjdXJyaW5nRXZlbnQsXG4gICAgICBkZWxldGVFdmVudCxcbiAgICAgIGRlbGV0ZVJlY3VycmluZ0V2ZW50LFxuICAgICAgb3BlbkV2ZW50Rm9ybTogaGFuZGxlT3BlbkV2ZW50Rm9ybSxcbiAgICAgIGNsb3NlRXZlbnRGb3JtLFxuICAgICAgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuICAgICAgZmluZFBhcmVudFJlY3VycmluZ0V2ZW50LFxuICAgICAgcmVuZGVyRXZlbnQsXG4gICAgICBvbkV2ZW50Q2xpY2s6IGhhbmRsZUV2ZW50Q2xpY2ssXG4gICAgICBvbkNlbGxDbGljazogaGFuZGxlRGF0ZUNsaWNrLFxuICAgICAgbG9jYWxlLFxuICAgICAgdGltZXpvbmU6IGN1cnJlbnRUaW1lem9uZSxcbiAgICAgIGRpc2FibGVDZWxsQ2xpY2ssXG4gICAgICBkaXNhYmxlRXZlbnRDbGljayxcbiAgICAgIGRpc2FibGVEcmFnQW5kRHJvcCxcbiAgICAgIGRheU1heEV2ZW50cyxcbiAgICAgIHN0aWNreVZpZXdIZWFkZXIsXG4gICAgICB2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuICAgICAgaGVhZGVyQ29tcG9uZW50LFxuICAgICAgaGVhZGVyQ2xhc3NOYW1lLFxuICAgICAgLy8gVHJhbnNsYXRpb24gZnVuY3Rpb25cbiAgICAgIHQsXG4gICAgfSksXG4gICAgW1xuICAgICAgY3VycmVudERhdGUsXG4gICAgICB2aWV3LFxuICAgICAgcHJvY2Vzc2VkRXZlbnRzLFxuICAgICAgY3VycmVudEV2ZW50cyxcbiAgICAgIGN1cnJlbnRMb2NhbGUsXG4gICAgICBpc0V2ZW50Rm9ybU9wZW4sXG4gICAgICBzZWxlY3RlZEV2ZW50LFxuICAgICAgc2VsZWN0ZWREYXRlLFxuICAgICAgZmlyc3REYXlPZldlZWssXG4gICAgICBzZWxlY3REYXRlLFxuICAgICAgaGFuZGxlVmlld0NoYW5nZSxcbiAgICAgIG5leHRQZXJpb2QsXG4gICAgICBoYW5kbGVPcGVuRXZlbnRGb3JtLFxuICAgICAgcHJldlBlcmlvZCxcbiAgICAgIHRvZGF5LFxuICAgICAgYWRkRXZlbnQsXG4gICAgICB1cGRhdGVFdmVudCxcbiAgICAgIHVwZGF0ZVJlY3VycmluZ0V2ZW50LFxuICAgICAgZGVsZXRlRXZlbnQsXG4gICAgICBkZWxldGVSZWN1cnJpbmdFdmVudCxcbiAgICAgIGNsb3NlRXZlbnRGb3JtLFxuICAgICAgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuICAgICAgZmluZFBhcmVudFJlY3VycmluZ0V2ZW50LFxuICAgICAgcmVuZGVyRXZlbnQsXG4gICAgICBoYW5kbGVFdmVudENsaWNrLFxuICAgICAgaGFuZGxlRGF0ZUNsaWNrLFxuICAgICAgbG9jYWxlLFxuICAgICAgY3VycmVudFRpbWV6b25lLFxuICAgICAgZGlzYWJsZUNlbGxDbGljayxcbiAgICAgIGRpc2FibGVFdmVudENsaWNrLFxuICAgICAgZGlzYWJsZURyYWdBbmREcm9wLFxuICAgICAgZGF5TWF4RXZlbnRzLFxuICAgICAgc3RpY2t5Vmlld0hlYWRlcixcbiAgICAgIHZpZXdIZWFkZXJDbGFzc05hbWUsXG4gICAgICBoZWFkZXJDb21wb25lbnQsXG4gICAgICBoZWFkZXJDbGFzc05hbWUsXG4gICAgICAvLyBUcmFuc2xhdGlvbiBkZXBlbmRlbmNpZXNcbiAgICAgIHQsXG4gICAgXVxuICApXG5cbiAgcmV0dXJuIChcbiAgICA8Q2FsZW5kYXJDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjb250ZXh0VmFsdWV9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQ2FsZW5kYXJDb250ZXh0LlByb3ZpZGVyPlxuICApXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb25zIH0gZnJvbSAnLi90eXBlcydcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRUcmFuc2xhdGlvbnM6IFRyYW5zbGF0aW9ucyA9IHtcbiAgLy8gQ29tbW9uIGFjdGlvbnNcbiAgdG9kYXk6ICdUb2RheScsXG4gIGNyZWF0ZTogJ0NyZWF0ZScsXG4gIG5ldzogJ05ldycsXG4gIHVwZGF0ZTogJ1VwZGF0ZScsXG4gIGRlbGV0ZTogJ0RlbGV0ZScsXG4gIGNhbmNlbDogJ0NhbmNlbCcsXG4gIGV4cG9ydDogJ0V4cG9ydCcsXG5cbiAgLy8gRXZlbnQgcmVsYXRlZFxuICBldmVudDogJ0V2ZW50JyxcbiAgZXZlbnRzOiAnRXZlbnRzJyxcbiAgbmV3RXZlbnQ6ICdOZXcgRXZlbnQnLFxuICB0aXRsZTogJ1RpdGxlJyxcbiAgZGVzY3JpcHRpb246ICdEZXNjcmlwdGlvbicsXG4gIGxvY2F0aW9uOiAnTG9jYXRpb24nLFxuICBhbGxEYXk6ICdBbGwgZGF5JyxcbiAgc3RhcnREYXRlOiAnU3RhcnQgRGF0ZScsXG4gIGVuZERhdGU6ICdFbmQgRGF0ZScsXG4gIHN0YXJ0VGltZTogJ1N0YXJ0IFRpbWUnLFxuICBlbmRUaW1lOiAnRW5kIFRpbWUnLFxuICBjb2xvcjogJ0NvbG9yJyxcblxuICAvLyBFdmVudCBmb3JtXG4gIGNyZWF0ZUV2ZW50OiAnQ3JlYXRlIEV2ZW50JyxcbiAgZWRpdEV2ZW50OiAnRWRpdCBFdmVudCcsXG4gIGFkZE5ld0V2ZW50OiAnQWRkIGEgbmV3IGV2ZW50IHRvIHlvdXIgY2FsZW5kYXInLFxuICBlZGl0RXZlbnREZXRhaWxzOiAnRWRpdCB5b3VyIGV2ZW50IGRldGFpbHMnLFxuICBldmVudFRpdGxlUGxhY2Vob2xkZXI6ICdFdmVudCB0aXRsZScsXG4gIGV2ZW50RGVzY3JpcHRpb25QbGFjZWhvbGRlcjogJ0V2ZW50IGRlc2NyaXB0aW9uIChvcHRpb25hbCknLFxuICBldmVudExvY2F0aW9uUGxhY2Vob2xkZXI6ICdFdmVudCBsb2NhdGlvbiAob3B0aW9uYWwpJyxcblxuICAvLyBSZWN1cnJlbmNlXG4gIHJlcGVhdDogJ1JlcGVhdCcsXG4gIHJlcGVhdHM6ICdSZXBlYXRzJyxcbiAgY3VzdG9tUmVjdXJyZW5jZTogJ0N1c3RvbSByZWN1cnJlbmNlJyxcbiAgZGFpbHk6ICdEYWlseScsXG4gIHdlZWtseTogJ1dlZWtseScsXG4gIG1vbnRobHk6ICdNb250aGx5JyxcbiAgeWVhcmx5OiAnWWVhcmx5JyxcbiAgaW50ZXJ2YWw6ICdJbnRlcnZhbCcsXG4gIHJlcGVhdE9uOiAnUmVwZWF0IG9uJyxcbiAgbmV2ZXI6ICdOZXZlcicsXG4gIGNvdW50OiAnQ291bnQnLFxuICBldmVyeTogJ0V2ZXJ5JyxcbiAgZW5kczogJ0VuZHMnLFxuICBhZnRlcjogJ0FmdGVyJyxcbiAgb2NjdXJyZW5jZXM6ICdvY2N1cnJlbmNlcycsXG4gIG9uOiAnT24nLFxuXG4gIC8vIFJlY3VycmVuY2UgZWRpdCBkaWFsb2dcbiAgZWRpdFJlY3VycmluZ0V2ZW50OiAnRWRpdCByZWN1cnJpbmcgZXZlbnQnLFxuICBkZWxldGVSZWN1cnJpbmdFdmVudDogJ0RlbGV0ZSByZWN1cnJpbmcgZXZlbnQnLFxuICBlZGl0UmVjdXJyaW5nRXZlbnRRdWVzdGlvbjpcbiAgICAnaXMgYSByZWN1cnJpbmcgZXZlbnQuIEhvdyB3b3VsZCB5b3UgbGlrZSB0byBlZGl0IGl0PycsXG4gIGRlbGV0ZVJlY3VycmluZ0V2ZW50UXVlc3Rpb246XG4gICAgJ2lzIGEgcmVjdXJyaW5nIGV2ZW50LiBIb3cgd291bGQgeW91IGxpa2UgdG8gZGVsZXRlIGl0PycsXG4gIHRoaXNFdmVudDogJ1RoaXMgZXZlbnQnLFxuICB0aGlzRXZlbnREZXNjcmlwdGlvbjogJ09ubHkgY2hhbmdlIHRoaXMgc3BlY2lmaWMgb2NjdXJyZW5jZScsXG4gIHRoaXNBbmRGb2xsb3dpbmdFdmVudHM6ICdUaGlzIGFuZCBmb2xsb3dpbmcgZXZlbnRzJyxcbiAgdGhpc0FuZEZvbGxvd2luZ0V2ZW50c0Rlc2NyaXB0aW9uOiAnRWRpdCB0aGlzIGFuZCBhbGwgZnV0dXJlIG9jY3VycmVuY2VzJyxcbiAgYWxsRXZlbnRzOiAnQWxsIGV2ZW50cycsXG4gIGFsbEV2ZW50c0Rlc2NyaXB0aW9uOiAnRWRpdCB0aGUgZW50aXJlIHJlY3VycmluZyBzZXJpZXMnLFxuICBvbmx5Q2hhbmdlVGhpczogJ09ubHkgY2hhbmdlIHRoaXMgc3BlY2lmaWMgb2NjdXJyZW5jZScsXG4gIGNoYW5nZVRoaXNBbmRGdXR1cmU6ICdDaGFuZ2UgdGhpcyBhbmQgYWxsIGZ1dHVyZSBvY2N1cnJlbmNlcycsXG4gIGNoYW5nZUVudGlyZVNlcmllczogJ0NoYW5nZSB0aGUgZW50aXJlIHJlY3VycmluZyBzZXJpZXMnLFxuICBvbmx5RGVsZXRlVGhpczogJ09ubHkgZGVsZXRlIHRoaXMgc3BlY2lmaWMgb2NjdXJyZW5jZScsXG4gIGRlbGV0ZVRoaXNBbmRGdXR1cmU6ICdEZWxldGUgdGhpcyBhbmQgYWxsIGZ1dHVyZSBvY2N1cnJlbmNlcycsXG4gIGRlbGV0ZUVudGlyZVNlcmllczogJ0RlbGV0ZSB0aGUgZW50aXJlIHJlY3VycmluZyBzZXJpZXMnLFxuXG4gIC8vIFZpZXcgdHlwZXNcbiAgbW9udGg6ICdNb250aCcsXG4gIHdlZWs6ICdXZWVrJyxcbiAgZGF5OiAnRGF5JyxcbiAgeWVhcjogJ1llYXInLFxuICBtb3JlOiAnbW9yZScsXG5cbiAgLy8gRGF5cyBvZiB3ZWVrXG4gIHN1bmRheTogJ1N1bmRheScsXG4gIG1vbmRheTogJ01vbmRheScsXG4gIHR1ZXNkYXk6ICdUdWVzZGF5JyxcbiAgd2VkbmVzZGF5OiAnV2VkbmVzZGF5JyxcbiAgdGh1cnNkYXk6ICdUaHVyc2RheScsXG4gIGZyaWRheTogJ0ZyaWRheScsXG4gIHNhdHVyZGF5OiAnU2F0dXJkYXknLFxuXG4gIC8vIERheXMgc2hvcnRcbiAgc3VuOiAnU3VuJyxcbiAgbW9uOiAnTW9uJyxcbiAgdHVlOiAnVHVlJyxcbiAgd2VkOiAnV2VkJyxcbiAgdGh1OiAnVGh1JyxcbiAgZnJpOiAnRnJpJyxcbiAgc2F0OiAnU2F0JyxcblxuICAvLyBNb250aHNcbiAgamFudWFyeTogJ0phbnVhcnknLFxuICBmZWJydWFyeTogJ0ZlYnJ1YXJ5JyxcbiAgbWFyY2g6ICdNYXJjaCcsXG4gIGFwcmlsOiAnQXByaWwnLFxuICBtYXk6ICdNYXknLFxuICBqdW5lOiAnSnVuZScsXG4gIGp1bHk6ICdKdWx5JyxcbiAgYXVndXN0OiAnQXVndXN0JyxcbiAgc2VwdGVtYmVyOiAnU2VwdGVtYmVyJyxcbiAgb2N0b2JlcjogJ09jdG9iZXInLFxuICBub3ZlbWJlcjogJ05vdmVtYmVyJyxcbiAgZGVjZW1iZXI6ICdEZWNlbWJlcicsXG59XG4iLAogICAgIi8vIE1haW4gY2FsZW5kYXIgY29tcG9uZW50XG5leHBvcnQgeyBJbGFteUNhbGVuZGFyIH0gZnJvbSAnLi9jb21wb25lbnRzL2lsYW15LWNhbGVuZGFyL2lsYW15LWNhbGVuZGFyJ1xuXG4vLyBQdWJsaWMgY2FsZW5kYXIgY29udGV4dCBob29rXG5leHBvcnQgeyB1c2VJbGFteUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJy4vY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuXG4vLyBSUlVMRS1iYXNlZCByZWN1cnJlbmNlIHN5c3RlbVxuZXhwb3J0IHtcbiAgZ2VuZXJhdGVSZWN1cnJpbmdFdmVudHMsXG4gIGlzUmVjdXJyaW5nRXZlbnQsXG59IGZyb20gJy4vbGliL3JlY3VycmVuY2UtaGFuZGxlcidcblxuLy8gRXhwb3J0IHR5cGVzXG5leHBvcnQgdHlwZSB7IFJSdWxlT3B0aW9ucyB9IGZyb20gJy4vbGliL3JlY3VycmVuY2UtaGFuZGxlci90eXBlcydcbmV4cG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90eXBlcydcbmV4cG9ydCB0eXBlIHsgSWxhbXlDYWxlbmRhclByb3BzIH0gZnJvbSAnLi9jb21wb25lbnRzL2lsYW15LWNhbGVuZGFyL3R5cGVzJ1xuZXhwb3J0IHR5cGUgeyBXZWVrRGF5cyB9IGZyb20gJy4vY29tcG9uZW50cy90eXBlcydcbmV4cG9ydCB0eXBlIHsgVXNlSWxhbXlDYWxlbmRhckNvbnRleHRSZXR1cm4gfSBmcm9tICcuL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbi8vIFJlLWV4cG9ydCBycnVsZS5qcyB0eXBlcyBmb3IgY29udmVuaWVuY2VcbmV4cG9ydCB0eXBlIHsgRnJlcXVlbmN5LCBXZWVrZGF5IH0gZnJvbSAncnJ1bGUnXG5leHBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuXG4vLyBUcmFuc2xhdGlvbiBzeXN0ZW1cbmV4cG9ydCB0eXBlIHtcbiAgVHJhbnNsYXRpb25zLFxuICBUcmFuc2xhdGlvbktleSxcbiAgVHJhbnNsYXRvckZ1bmN0aW9uLFxufSBmcm9tICcuL2xpYi90cmFuc2xhdGlvbnMvdHlwZXMnXG5leHBvcnQgeyBkZWZhdWx0VHJhbnNsYXRpb25zIH0gZnJvbSAnLi9saWIvdHJhbnNsYXRpb25zL2RlZmF1bHQnXG4iCiAgXSwKICAibWFwcGluZ3MiOiAiO0FBQ0EsNEJBQVMsNEJBQWlCO0FBQzFCLDRCQUFnQjs7O0FDRWhCO0FBb0RPLElBQU0sa0JBQ1gsY0FBK0MsU0FBUztBQUVuRCxJQUFNLHFCQUFxQixNQUEyQjtBQUFBLEVBQzNELE1BQU0sVUFBVSxXQUFXLGVBQWU7QUFBQSxFQUMxQyxJQUFJLFlBQVksV0FBVztBQUFBLElBQ3pCLE1BQU0sSUFBSSxNQUFNLDJEQUEyRDtBQUFBLEVBQzdFO0FBQUEsRUFDQSxPQUFPO0FBQUE7QUErQkYsSUFBTSwwQkFBMEIsTUFBcUM7QUFBQSxFQUMxRSxNQUFNLFVBQVUsV0FBVyxlQUFlO0FBQUEsRUFDMUMsSUFBSSxZQUFZLFdBQVc7QUFBQSxJQUN6QixNQUFNLElBQUksTUFDUixnRUFDRjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLE9BQU87QUFBQSxJQUNMLGFBQWEsUUFBUTtBQUFBLElBQ3JCLE1BQU0sUUFBUTtBQUFBLElBQ2QsUUFBUSxRQUFRO0FBQUEsSUFDaEIsaUJBQWlCLFFBQVE7QUFBQSxJQUN6QixlQUFlLFFBQVE7QUFBQSxJQUN2QixjQUFjLFFBQVE7QUFBQSxJQUN0QixnQkFBZ0IsUUFBUTtBQUFBLElBQ3hCLGdCQUFnQixRQUFRO0FBQUEsSUFDeEIsWUFBWSxRQUFRO0FBQUEsSUFDcEIsU0FBUyxRQUFRO0FBQUEsSUFDakIsWUFBWSxRQUFRO0FBQUEsSUFDcEIsWUFBWSxRQUFRO0FBQUEsSUFDcEIsT0FBTyxRQUFRO0FBQUEsSUFDZixVQUFVLFFBQVE7QUFBQSxJQUNsQixhQUFhLFFBQVE7QUFBQSxJQUNyQixhQUFhLFFBQVE7QUFBQSxJQUNyQixlQUFlLFFBQVE7QUFBQSxJQUN2QixnQkFBZ0IsUUFBUTtBQUFBLEVBQzFCO0FBQUE7OztBQ3hIRjtBQUVBOzs7QUNEQTs7O0FDRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFlQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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LEVBQ0EsZUFBZTtBQUFBLEVBQ2YsbUJBQW1CO0FBQUEsRUFDbkIsc0JBQXNCO0FBQUEsRUFDdEI7QUFBQSxFQUNBO0FBQUEsTUFDSTtBQUFBLEVBQ0osdUJBQ0UsTUEwQkUsa0JBMUJGO0FBQUEsSUFDRSxRQUFRLG1DQUFtQyxNQUFNO0FBQUEsSUFDakQsZ0JBQWdCLHFCQUFxQjtBQUFBLElBQ3JDO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBdkJGLDBCQXlCRSxNQUFDLGlCQUFELEVBQWlCO0FBQUEsR0FDakI7QUFBQTs7O0FJbEhOLGtCQUFTOyIsCiAgImRlYnVnSWQiOiAiNjEwRDNCNjgxQ0ZGQUEzRDY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
|