tide-design-system 2.2.2 → 2.2.3
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.
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineComponent as C, openBlock as E, createElementBlock as A, normalizeClass as d, unref as t, ref as D, watch as K, defineAsyncComponent as Ut, markRaw as Pt, createBlock as B, resolveDynamicComponent as Oe, createCommentVNode as S,
|
|
1
|
+
import { defineComponent as C, openBlock as E, createElementBlock as T, createElementVNode as A, normalizeClass as d, unref as t, ref as D, watch as K, defineAsyncComponent as Ut, markRaw as Pt, createBlock as B, resolveDynamicComponent as Oe, createCommentVNode as S, toDisplayString as h, createVNode as x, renderSlot as k, withCtx as Re, computed as P, createTextVNode as Rt, Fragment as q, renderList as oe, onMounted as We, onUnmounted as It, onUpdated as bt, normalizeStyle as Xe, withModifiers as De, withDirectives as Ce, vModelSelect as Bt, vModelDynamic as Gt, vModelText as Ht, nextTick as Tt, shallowRef as wt, getCurrentScope as Mt, onScopeDispose as xt, shallowReadonly as de, watchEffect as Wt, onBeforeMount as Xt, Teleport as kt, Transition as Yt, vShow as Vt } from "vue";
|
|
2
2
|
const je = {
|
|
3
3
|
HORIZONTAL: "horizontal",
|
|
4
4
|
VERTICAL: "vertical"
|
|
@@ -487,27 +487,36 @@ const je = {
|
|
|
487
487
|
}
|
|
488
488
|
};
|
|
489
489
|
e.DISPLAY.BLOCK, e.DISPLAY.CONTENTS, e.DISPLAY.FLEX, e.DISPLAY.GRID, e.DISPLAY.NONE, e.DISPLAY.INITIAL, e.DISPLAY.INLINE, e.DISPLAY.INLINE_BLOCK, e.DISPLAY.INLINE_FLEX, e.AXIS1.AROUND, e.AXIS1.BETWEEN, e.AXIS1.CENTER, e.AXIS1.END, e.AXIS1.START, e.AXIS2.AROUND, e.AXIS2.CENTER, e.AXIS2.END, e.AXIS2.START, e.FLEX.DIRECTION.COLUMN, e.FLEX.DIRECTION.COLUMN_REVERSE, e.FLEX.DIRECTION.ROW, e.FLEX.DIRECTION.ROW_REVERSE, e.GAP.ONE, e.GAP.HALF, e.GAP.QUARTER, e.GAP.TWO, e.GAP.FOUR, e.FLEX.BASIS.ZERO, e.FLEX.GROW.ON, e.FLEX.GROW.OFF, e.FLEX.SHRINK.ON, e.FLEX.SHRINK.OFF, e.FLEX.WRAP, e.POSITION.ABSOLUTE, e.POSITION.FIXED, e.POSITION.RELATIVE, e.POSITION.STICKY, e.POSITIONING.TOP, e.POSITIONING.RIGHT, e.POSITIONING.BOTTOM, e.POSITIONING.LEFT, e.BOX_SIZING.BORDER_BOX, e.BOX_SIZING.CONTENT_BOX, e.MARGIN.FULL.ZERO, e.MARGIN.FULL.ONE, e.MARGIN.FULL.HALF, e.MARGIN.FULL.QUARTER, e.MARGIN.FULL.TWO, e.MARGIN.FULL.FOUR, e.MARGIN.Y.ZERO, e.MARGIN.Y.ONE, e.MARGIN.Y.HALF, e.MARGIN.Y.QUARTER, e.MARGIN.Y.TWO, e.MARGIN.Y.FOUR, e.MARGIN.TOP.ZERO, e.MARGIN.TOP.ONE, e.MARGIN.TOP.HALF, e.MARGIN.TOP.QUARTER, e.MARGIN.TOP.TWO, e.MARGIN.TOP.FOUR, e.MARGIN.X.ZERO, e.MARGIN.X.ONE, e.MARGIN.X.HALF, e.MARGIN.X.QUARTER, e.MARGIN.X.TWO, e.MARGIN.X.FOUR, e.MARGIN.X.AUTO, e.MARGIN.RIGHT.ZERO, e.MARGIN.RIGHT.ONE, e.MARGIN.RIGHT.HALF, e.MARGIN.RIGHT.QUARTER, e.MARGIN.RIGHT.TWO, e.MARGIN.RIGHT.FOUR, e.MARGIN.RIGHT.AUTO, e.MARGIN.BOTTOM.ZERO, e.MARGIN.BOTTOM.ONE, e.MARGIN.BOTTOM.HALF, e.MARGIN.BOTTOM.QUARTER, e.MARGIN.BOTTOM.TWO, e.MARGIN.BOTTOM.FOUR, e.MARGIN.LEFT.ZERO, e.MARGIN.LEFT.ONE, e.MARGIN.LEFT.HALF, e.MARGIN.LEFT.QUARTER, e.MARGIN.LEFT.TWO, e.MARGIN.LEFT.FOUR, e.MARGIN.LEFT.AUTO, e.BORDER.FULL.ONE, e.BORDER.FULL.TWO, e.BORDER.TOP.ONE, e.BORDER.TOP.TWO, e.BORDER.RIGHT.ONE, e.BORDER.RIGHT.TWO, e.BORDER.BOTTOM.ONE, e.BORDER.BOTTOM.TWO, e.BORDER.LEFT.ONE, e.BORDER.LEFT.TWO, e.BORDER.RADIUS.ONE, e.BORDER.RADIUS.HALF, e.BORDER.RADIUS.QUARTER, e.BORDER.RADIUS.FULL, e.PADDING.FULL.ZERO, e.PADDING.FULL.ONE, e.PADDING.FULL.HALF, e.PADDING.FULL.QUARTER, e.PADDING.FULL.TWO, e.PADDING.FULL.FOUR, e.PADDING.Y.ZERO, e.PADDING.Y.ONE, e.PADDING.Y.HALF, e.PADDING.Y.QUARTER, e.PADDING.Y.TWO, e.PADDING.Y.FOUR, e.PADDING.TOP.ZERO, e.PADDING.TOP.ONE, e.PADDING.TOP.HALF, e.PADDING.TOP.QUARTER, e.PADDING.TOP.TWO, e.PADDING.TOP.FOUR, e.PADDING.X.ZERO, e.PADDING.X.ONE, e.PADDING.X.HALF, e.PADDING.X.QUARTER, e.PADDING.X.TWO, e.PADDING.X.FOUR, e.PADDING.RIGHT.ZERO, e.PADDING.RIGHT.ONE, e.PADDING.RIGHT.HALF, e.PADDING.RIGHT.QUARTER, e.PADDING.RIGHT.TWO, e.PADDING.RIGHT.FOUR, e.PADDING.BOTTOM.ZERO, e.PADDING.BOTTOM.ONE, e.PADDING.BOTTOM.HALF, e.PADDING.BOTTOM.QUARTER, e.PADDING.BOTTOM.TWO, e.PADDING.BOTTOM.FOUR, e.PADDING.LEFT.ZERO, e.PADDING.LEFT.ONE, e.PADDING.LEFT.HALF, e.PADDING.LEFT.QUARTER, e.PADDING.LEFT.TWO, e.PADDING.LEFT.FOUR, e.WIDTH.MAX_FULL, e.WIDTH.ZERO, e.WIDTH.FULL, e.HEIGHT.ZERO, e.HEIGHT.FULL, e.ALIGN.Y.MIDDLE, e.BREAK_WORD, e.CURSOR.NOT_ALLOWED, e.CURSOR.POINTER, e.CURSOR.TEXT, e.FONT.SIZE.TWELVE, e.FONT.SIZE.FOURTEEN, e.FONT.SIZE.SIXTEEN, e.FONT.SIZE.TWENTY, e.FONT.SIZE.TWENTY_FOUR, e.FONT.SIZE.THIRTY_TWO, e.FONT.WEIGHT.FOUR_HUNDRED, e.FONT.WEIGHT.FIVE_HUNDRED, e.FONT.WEIGHT.SIX_HUNDRED, e.FONT.WEIGHT.SEVEN_HUNDRED, e.LIST_BULLETS.OFF, e.OBJECT.CENTER, e.OBJECT.CONTAIN, e.OBJECT.COVER, e.OBJECT.SCALE_DOWN, e.POINTER_EVENTS.ON, e.POINTER_EVENTS.OFF, e.SCROLLBAR.OFF, e.SHADOW.BOTTOM, e.SHADOW.TOP, e.SNAP.ON, e.SNAP_ALIGN.START, e.ALIGN.X.LEFT, e.ALIGN.X.CENTER, e.ALIGN.X.RIGHT, e.TEXT_TRANSFORM.LOWER, e.TEXT_TRANSFORM.NONE, e.TEXT_TRANSFORM.UPPER, e.UNDERLINE.HOVER, e.UNDERLINE.OFF, e.UNDERLINE.ON, e.VISIBILITY.ON, e.VISIBILITY.OFF, e.WHITESPACE_WRAP.OFF, e.OVERFLOW.XY.AUTO, e.OVERFLOW.XY.HIDDEN, e.OVERFLOW.X.AUTO, e.OVERFLOW.X.HIDDEN, e.OVERFLOW.X.SCROLL, e.OVERFLOW.Y.AUTO, e.OVERFLOW.Y.HIDDEN, e.Z_INDEX.ONE;
|
|
490
|
-
const
|
|
490
|
+
const $t = {
|
|
491
|
+
class: /* @__PURE__ */ d(["tide-divider"])
|
|
492
|
+
}, Kt = /* @__PURE__ */ C({
|
|
491
493
|
__name: "TideDivider",
|
|
492
494
|
props: {
|
|
493
495
|
orientation: { default: je.HORIZONTAL }
|
|
494
496
|
},
|
|
495
497
|
setup(i) {
|
|
496
498
|
const s = i;
|
|
497
|
-
return (o, n) => (E(),
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
499
|
+
return (o, n) => (E(), T("div", $t, [
|
|
500
|
+
A("div", {
|
|
501
|
+
class: d([
|
|
502
|
+
t(e).BORDER.COLOR.LOW,
|
|
503
|
+
s.orientation === t(je).HORIZONTAL ? [t(e).MARGIN.Y.HALF, t(e).BORDER.BOTTOM.ONE, t(e).WIDTH.FULL] : [t(e).MARGIN.X.HALF, t(e).BORDER.RIGHT.ONE, t(e).HEIGHT.FULL]
|
|
504
|
+
])
|
|
505
|
+
}, null, 2)
|
|
506
|
+
]));
|
|
504
507
|
}
|
|
505
|
-
})
|
|
508
|
+
});
|
|
509
|
+
const w = (i, s) => {
|
|
510
|
+
const o = i.__vccOpts || i;
|
|
511
|
+
for (const [n, a] of s)
|
|
512
|
+
o[n] = a;
|
|
513
|
+
return o;
|
|
514
|
+
}, Je = /* @__PURE__ */ w(Kt, [["__scopeId", "data-v-c2dc7d09"]]), et = (i, s) => {
|
|
506
515
|
const o = i[s];
|
|
507
516
|
return o ? typeof o == "function" ? o() : Promise.resolve(o) : new Promise((n, a) => {
|
|
508
517
|
(typeof queueMicrotask == "function" ? queueMicrotask : setTimeout)(a.bind(null, new Error("Unknown variable dynamic import: " + s)));
|
|
509
518
|
});
|
|
510
|
-
},
|
|
519
|
+
}, zt = {
|
|
511
520
|
AERO: "aero",
|
|
512
521
|
ATV: "atv",
|
|
513
522
|
BOATMART: "boatmart",
|
|
@@ -526,7 +535,7 @@ const Je = /* @__PURE__ */ C({
|
|
|
526
535
|
}, ke = (i) => {
|
|
527
536
|
let s = i && typeof i == "number" ? new Intl.NumberFormat().format(i) : String(i || ""), o = s;
|
|
528
537
|
return i && typeof i == "string" && (o = o.replace(/\D/g, ""), Number(o) ? s = new Intl.NumberFormat().format(Number(o)) : s = "0"), s;
|
|
529
|
-
},
|
|
538
|
+
}, Qt = (i) => i && typeof i == "string" ? i.replace(/([a-z]{1})([A-Z]{1})/g, "$1 $2").replace(/[\s_-]/g, " ").toLowerCase().split(" ").map((s) => s.slice(0, 1).toUpperCase() + s.slice(1)).join("") : i, Zt = (i) => {
|
|
530
539
|
let s = String(i && typeof i == "number" ? i : i || ""), o = s;
|
|
531
540
|
switch (o = o.replace(/\D/g, ""), o.length) {
|
|
532
541
|
case 7:
|
|
@@ -543,7 +552,7 @@ const Je = /* @__PURE__ */ C({
|
|
|
543
552
|
break;
|
|
544
553
|
}
|
|
545
554
|
return s;
|
|
546
|
-
},
|
|
555
|
+
}, qt = (i) => `$${i ? ke(i) : String(i || "0")}`, H = /* @__PURE__ */ C({
|
|
547
556
|
__name: "TideIcon",
|
|
548
557
|
props: {
|
|
549
558
|
icon: {},
|
|
@@ -554,11 +563,11 @@ const Je = /* @__PURE__ */ C({
|
|
|
554
563
|
return K(
|
|
555
564
|
() => s.icon,
|
|
556
565
|
async () => {
|
|
557
|
-
const n = s.icon, a = Kt(n), [c] = n.split("-"), r = $t[c == null ? void 0 : c.toUpperCase()], l = Ut(() => r ? et(/* @__PURE__ */ Object.assign({ "../assets/svg/icons/realm/atv/IconAtvAtv.svg": () => import("./IconAtvAtv-d10d11c0.js"), "../assets/svg/icons/realm/atv/IconAtvDuneBuggy.svg": () => import("./IconAtvDuneBuggy-458e7a9c.js"), "../assets/svg/icons/realm/atv/IconAtvGoKart.svg": () => import("./IconAtvGoKart-0eab678e.js"), "../assets/svg/icons/realm/atv/IconAtvGolfCart.svg": () => import("./IconAtvGolfCart-c549f7f3.js"), "../assets/svg/icons/realm/atv/IconAtvSandRail.svg": () => import("./IconAtvSandRail-e8913dd9.js"), "../assets/svg/icons/realm/atv/IconAtvSideBySide.svg": () => import("./IconAtvSideBySide-50377701.js"), "../assets/svg/icons/realm/atv/IconAtvTrailer.svg": () => import("./IconAtvTrailer-062da3ab.js"), "../assets/svg/icons/realm/boatmart/IconBoatmartPwc.svg": () => import("./IconBoatmartPwc-7a3c368a.js"), "../assets/svg/icons/realm/boatmart/IconBoatmartTrailer.svg": () => import("./IconBoatmartTrailer-68276601.js"), "../assets/svg/icons/realm/rv/IconRvClassA.svg": () => import("./IconRvClassA-e2335760.js"), "../assets/svg/icons/realm/rv/IconRvClassB.svg": () => import("./IconRvClassB-ae8261fe.js"), "../assets/svg/icons/realm/rv/IconRvClassC.svg": () => import("./IconRvClassC-c1ff2a5a.js"), "../assets/svg/icons/realm/rv/IconRvFifthWheel.svg": () => import("./IconRvFifthWheel-d201d502.js"), "../assets/svg/icons/realm/rv/IconRvFishHouse.svg": () => import("./IconRvFishHouse-b35e6ac1.js"), "../assets/svg/icons/realm/rv/IconRvParkModel.svg": () => import("./IconRvParkModel-20bf39bc.js"), "../assets/svg/icons/realm/rv/IconRvPopUpCamper.svg": () => import("./IconRvPopUpCamper-14ac6a8d.js"), "../assets/svg/icons/realm/rv/IconRvTravelTrailer.svg": () => import("./IconRvTravelTrailer-e7c21b4c.js"), "../assets/svg/icons/realm/rv/IconRvTruckCamper.svg": () => import("./IconRvTruckCamper-661b0c28.js") }), `../assets/svg/icons/realm/${r}/Icon${a}.svg`) : et(/* @__PURE__ */ Object.assign({ "../assets/svg/icons/IconAccountBalance.svg": () => import("./IconAccountBalance-ad4f4a95.js"), "../assets/svg/icons/IconAcute.svg": () => import("./IconAcute-ad6bc5da.js"), "../assets/svg/icons/IconAdd.svg": () => import("./IconAdd-917e055b.js"), "../assets/svg/icons/IconAiDescription.svg": () => import("./IconAiDescription-e6f8ed46.js"), "../assets/svg/icons/IconAlignSpaceEven.svg": () => import("./IconAlignSpaceEven-a1d90758.js"), "../assets/svg/icons/IconApplePay.svg": () => import("./IconApplePay-7742e162.js"), "../assets/svg/icons/IconArrowBack.svg": () => import("./IconArrowBack-1810092d.js"), "../assets/svg/icons/IconArrowCycle.svg": () => import("./IconArrowCycle-f8d882fe.js"), "../assets/svg/icons/IconArrowForward.svg": () => import("./IconArrowForward-ddabefc9.js"), "../assets/svg/icons/IconArrowRight.svg": () => import("./IconArrowRight-d93347c3.js"), "../assets/svg/icons/IconAssignment.svg": () => import("./IconAssignment-1983e555.js"), "../assets/svg/icons/IconAttachMoney.svg": () => import("./IconAttachMoney-1360c507.js"), "../assets/svg/icons/IconAutoRenew.svg": () => import("./IconAutoRenew-00afcc33.js"), "../assets/svg/icons/IconAwardStar.svg": () => import("./IconAwardStar-8128aca1.js"), "../assets/svg/icons/IconBed.svg": () => import("./IconBed-3b1fa670.js"), "../assets/svg/icons/IconBolt.svg": () => import("./IconBolt-83121ee2.js"), "../assets/svg/icons/IconBookmark.svg": () => import("./IconBookmark-7d88d664.js"), "../assets/svg/icons/IconBunkhouse.svg": () => import("./IconBunkhouse-e7cb965d.js"), "../assets/svg/icons/IconCalendarMonth.svg": () => import("./IconCalendarMonth-2fd1e713.js"), "../assets/svg/icons/IconCall.svg": () => import("./IconCall-8aa582d9.js"), "../assets/svg/icons/IconCallQuality.svg": () => import("./IconCallQuality-1edf4c35.js"), "../assets/svg/icons/IconCarRental.svg": () => import("./IconCarRental-7709e091.js"), "../assets/svg/icons/IconCheck.svg": () => import("./IconCheck-cf7470ee.js"), "../assets/svg/icons/IconChevronLeft.svg": () => import("./IconChevronLeft-558206bb.js"), "../assets/svg/icons/IconChevronRight.svg": () => import("./IconChevronRight-28930a0b.js"), "../assets/svg/icons/IconClear.svg": () => import("./IconClear-9419bf17.js"), "../assets/svg/icons/IconClose.svg": () => import("./IconClose-abfb6177.js"), "../assets/svg/icons/IconContract.svg": () => import("./IconContract-289a7094.js"), "../assets/svg/icons/IconCrash.svg": () => import("./IconCrash-d87f6517.js"), "../assets/svg/icons/IconDashboardCustomize.svg": () => import("./IconDashboardCustomize-f74fde35.js"), "../assets/svg/icons/IconDelete.svg": () => import("./IconDelete-67b69553.js"), "../assets/svg/icons/IconDiamond.svg": () => import("./IconDiamond-93af488a.js"), "../assets/svg/icons/IconDirectionsBoat.svg": () => import("./IconDirectionsBoat-4d41fb87.js"), "../assets/svg/icons/IconDomain.svg": () => import("./IconDomain-377b91aa.js"), "../assets/svg/icons/IconDraft.svg": () => import("./IconDraft-6e70e48f.js"), "../assets/svg/icons/IconEdit.svg": () => import("./IconEdit-16d34325.js"), "../assets/svg/icons/IconEngine.svg": () => import("./IconEngine-ee5f92d4.js"), "../assets/svg/icons/IconEngineering.svg": () => import("./IconEngineering-e18db558.js"), "../assets/svg/icons/IconError.svg": () => import("./IconError-a2922b95.js"), "../assets/svg/icons/IconExpandContent.svg": () => import("./IconExpandContent-7e144d1c.js"), "../assets/svg/icons/IconExpandLess.svg": () => import("./IconExpandLess-3a8a0552.js"), "../assets/svg/icons/IconExpandMore.svg": () => import("./IconExpandMore-c600148e.js"), "../assets/svg/icons/IconFacebook.svg": () => import("./IconFacebook-4658b533.js"), "../assets/svg/icons/IconFavorite.svg": () => import("./IconFavorite-d23faefe.js"), "../assets/svg/icons/IconFavoriteFilled.svg": () => import("./IconFavoriteFilled-aa0d6d5e.js"), "../assets/svg/icons/IconFlag.svg": () => import("./IconFlag-8bafa50c.js"), "../assets/svg/icons/IconFormatBold.svg": () => import("./IconFormatBold-70a5cacf.js"), "../assets/svg/icons/IconFormatItalic.svg": () => import("./IconFormatItalic-c06504d7.js"), "../assets/svg/icons/IconFormatListBulleted.svg": () => import("./IconFormatListBulleted-9493858a.js"), "../assets/svg/icons/IconForum.svg": () => import("./IconForum-ae4ad63f.js"), "../assets/svg/icons/IconGas.svg": () => import("./IconGas-198d529d.js"), "../assets/svg/icons/IconGavel.svg": () => import("./IconGavel-44c29036.js"), "../assets/svg/icons/IconGears.svg": () => import("./IconGears-a52f8ce9.js"), "../assets/svg/icons/IconGlobeLocationPin.svg": () => import("./IconGlobeLocationPin-4b7fb00b.js"), "../assets/svg/icons/IconGoogle.svg": () => import("./IconGoogle-febad0d8.js"), "../assets/svg/icons/IconGooglePay.svg": () => import("./IconGooglePay-8cf0286e.js"), "../assets/svg/icons/IconGrid.svg": () => import("./IconGrid-25f665e0.js"), "../assets/svg/icons/IconHandshake.svg": () => import("./IconHandshake-7c9f1e84.js"), "../assets/svg/icons/IconHandyman.svg": () => import("./IconHandyman-73c7c329.js"), "../assets/svg/icons/IconHeight.svg": () => import("./IconHeight-4fae7545.js"), "../assets/svg/icons/IconHelp.svg": () => import("./IconHelp-340ee4fb.js"), "../assets/svg/icons/IconInfo.svg": () => import("./IconInfo-efead10b.js"), "../assets/svg/icons/IconInformation.svg": () => import("./IconInformation-790c598a.js"), "../assets/svg/icons/IconInsertText.svg": () => import("./IconInsertText-00236a65.js"), "../assets/svg/icons/IconInstagram.svg": () => import("./IconInstagram-57188d29.js"), "../assets/svg/icons/IconIosShare.svg": () => import("./IconIosShare-167aa8c4.js"), "../assets/svg/icons/IconLayout.svg": () => import("./IconLayout-2865e0eb.js"), "../assets/svg/icons/IconLevellingJack.svg": () => import("./IconLevellingJack-04860178.js"), "../assets/svg/icons/IconLinkedIn.svg": () => import("./IconLinkedIn-f29c217d.js"), "../assets/svg/icons/IconLocalShipping.svg": () => import("./IconLocalShipping-901a3e4c.js"), "../assets/svg/icons/IconLock.svg": () => import("./IconLock-47669e20.js"), "../assets/svg/icons/IconMail.svg": () => import("./IconMail-9b85058a.js"), "../assets/svg/icons/IconMenu.svg": () => import("./IconMenu-4bed57f3.js"), "../assets/svg/icons/IconMoneyBag.svg": () => import("./IconMoneyBag-4a01a10a.js"), "../assets/svg/icons/IconMoreHoriz.svg": () => import("./IconMoreHoriz-2aabe29f.js"), "../assets/svg/icons/IconNotifications.svg": () => import("./IconNotifications-bcbf1d8c.js"), "../assets/svg/icons/IconOdometer.svg": () => import("./IconOdometer-709f4f00.js"), "../assets/svg/icons/IconOpenInNew.svg": () => import("./IconOpenInNew-78fffcfe.js"), "../assets/svg/icons/IconPalette.svg": () => import("./IconPalette-22865300.js"), "../assets/svg/icons/IconPaypal.svg": () => import("./IconPaypal-c28e6dbe.js"), "../assets/svg/icons/IconPerson.svg": () => import("./IconPerson-7ada8b07.js"), "../assets/svg/icons/IconPersonSearch.svg": () => import("./IconPersonSearch-1ccccee1.js"), "../assets/svg/icons/IconPhotoCamera.svg": () => import("./IconPhotoCamera-31a58b85.js"), "../assets/svg/icons/IconPinterest.svg": () => import("./IconPinterest-fe5cc414.js"), "../assets/svg/icons/IconPlayArrow.svg": () => import("./IconPlayArrow-1ed5d884.js"), "../assets/svg/icons/IconPolicy.svg": () => import("./IconPolicy-0a3a02bc.js"), "../assets/svg/icons/IconPower.svg": () => import("./IconPower-bfe4f81a.js"), "../assets/svg/icons/IconPowerOff.svg": () => import("./IconPowerOff-dbade32b.js"), "../assets/svg/icons/IconPriorityHigh.svg": () => import("./IconPriorityHigh-ab1b4a95.js"), "../assets/svg/icons/IconRemove.svg": () => import("./IconRemove-bab221ba.js"), "../assets/svg/icons/IconRequestQuote.svg": () => import("./IconRequestQuote-f6364b1e.js"), "../assets/svg/icons/IconResetWrench.svg": () => import("./IconResetWrench-8791a5a9.js"), "../assets/svg/icons/IconRoad.svg": () => import("./IconRoad-efce130e.js"), "../assets/svg/icons/IconRoundedCorner.svg": () => import("./IconRoundedCorner-adbcfd09.js"), "../assets/svg/icons/IconRuler.svg": () => import("./IconRuler-0ceea80a.js"), "../assets/svg/icons/IconSailing.svg": () => import("./IconSailing-19762955.js"), "../assets/svg/icons/IconSchool.svg": () => import("./IconSchool-2f3ff8d7.js"), "../assets/svg/icons/IconSearch.svg": () => import("./IconSearch-f8faefb4.js"), "../assets/svg/icons/IconSeating.svg": () => import("./IconSeating-2ca8921d.js"), "../assets/svg/icons/IconSell.svg": () => import("./IconSell-b011ac2d.js"), "../assets/svg/icons/IconSensors.svg": () => import("./IconSensors-c4387bc9.js"), "../assets/svg/icons/IconSettings.svg": () => import("./IconSettings-32dd2125.js"), "../assets/svg/icons/IconShare.svg": () => import("./IconShare-57f28ce3.js"), "../assets/svg/icons/IconShieldCheck.svg": () => import("./IconShieldCheck-0c47755d.js"), "../assets/svg/icons/IconShoppingCart.svg": () => import("./IconShoppingCart-b532dab0.js"), "../assets/svg/icons/IconSleeps.svg": () => import("./IconSleeps-b994bd2f.js"), "../assets/svg/icons/IconSms.svg": () => import("./IconSms-378f373a.js"), "../assets/svg/icons/IconSnowflake.svg": () => import("./IconSnowflake-9d956143.js"), "../assets/svg/icons/IconStar.svg": () => import("./IconStar-1b8ad0f9.js"), "../assets/svg/icons/IconSummarize.svg": () => import("./IconSummarize-69ab122a.js"), "../assets/svg/icons/IconSwapHoriz.svg": () => import("./IconSwapHoriz-2d9550c3.js"), "../assets/svg/icons/IconSwapVert.svg": () => import("./IconSwapVert-8085e942.js"), "../assets/svg/icons/IconThreeDRotation.svg": () => import("./IconThreeDRotation-33f086a7.js"), "../assets/svg/icons/IconThumbUp.svg": () => import("./IconThumbUp-72caf64e.js"), "../assets/svg/icons/IconTrendingDown.svg": () => import("./IconTrendingDown-ff3969c7.js"), "../assets/svg/icons/IconTrophy.svg": () => import("./IconTrophy-f4be8b54.js"), "../assets/svg/icons/IconTune.svg": () => import("./IconTune-0913ba01.js"), "../assets/svg/icons/IconTwitter.svg": () => import("./IconTwitter-9acefb07.js"), "../assets/svg/icons/IconUmbrella.svg": () => import("./IconUmbrella-775b11b8.js"), "../assets/svg/icons/IconVerified.svg": () => import("./IconVerified-000f615f.js"), "../assets/svg/icons/IconVideocam.svg": () => import("./IconVideocam-33650e6f.js"), "../assets/svg/icons/IconViewInAr.svg": () => import("./IconViewInAr-d1534ef2.js"), "../assets/svg/icons/IconVisibility.svg": () => import("./IconVisibility-a1c21dd0.js"), "../assets/svg/icons/IconVolumeOff.svg": () => import("./IconVolumeOff-8e121ef3.js"), "../assets/svg/icons/IconVolumeOn.svg": () => import("./IconVolumeOn-992e16dd.js"), "../assets/svg/icons/IconWarehouse.svg": () => import("./IconWarehouse-764da944.js"), "../assets/svg/icons/IconWarning.svg": () => import("./IconWarning-6f490acf.js"), "../assets/svg/icons/IconWater.svg": () => import("./IconWater-a5f94879.js"), "../assets/svg/icons/IconWeight.svg": () => import("./IconWeight-e3b3daa6.js"), "../assets/svg/icons/IconWidth.svg": () => import("./IconWidth-c81dbc7a.js"), "../assets/svg/icons/IconWorkspacePremium.svg": () => import("./IconWorkspacePremium-efd0a531.js"), "../assets/svg/icons/IconWrench.svg": () => import("./IconWrench-6c52ef4f.js"), "../assets/svg/icons/IconYoutube.svg": () => import("./IconYoutube-a6224033.js") }), `../assets/svg/icons/Icon${a}.svg`));
|
|
566
|
+
const n = s.icon, a = Qt(n), [c] = n.split("-"), r = zt[c == null ? void 0 : c.toUpperCase()], l = Ut(() => r ? et(/* @__PURE__ */ Object.assign({ "../assets/svg/icons/realm/atv/IconAtvAtv.svg": () => import("./IconAtvAtv-d10d11c0.js"), "../assets/svg/icons/realm/atv/IconAtvDuneBuggy.svg": () => import("./IconAtvDuneBuggy-458e7a9c.js"), "../assets/svg/icons/realm/atv/IconAtvGoKart.svg": () => import("./IconAtvGoKart-0eab678e.js"), "../assets/svg/icons/realm/atv/IconAtvGolfCart.svg": () => import("./IconAtvGolfCart-c549f7f3.js"), "../assets/svg/icons/realm/atv/IconAtvSandRail.svg": () => import("./IconAtvSandRail-e8913dd9.js"), "../assets/svg/icons/realm/atv/IconAtvSideBySide.svg": () => import("./IconAtvSideBySide-50377701.js"), "../assets/svg/icons/realm/atv/IconAtvTrailer.svg": () => import("./IconAtvTrailer-062da3ab.js"), "../assets/svg/icons/realm/boatmart/IconBoatmartPwc.svg": () => import("./IconBoatmartPwc-7a3c368a.js"), "../assets/svg/icons/realm/boatmart/IconBoatmartTrailer.svg": () => import("./IconBoatmartTrailer-68276601.js"), "../assets/svg/icons/realm/rv/IconRvClassA.svg": () => import("./IconRvClassA-e2335760.js"), "../assets/svg/icons/realm/rv/IconRvClassB.svg": () => import("./IconRvClassB-ae8261fe.js"), "../assets/svg/icons/realm/rv/IconRvClassC.svg": () => import("./IconRvClassC-c1ff2a5a.js"), "../assets/svg/icons/realm/rv/IconRvFifthWheel.svg": () => import("./IconRvFifthWheel-d201d502.js"), "../assets/svg/icons/realm/rv/IconRvFishHouse.svg": () => import("./IconRvFishHouse-b35e6ac1.js"), "../assets/svg/icons/realm/rv/IconRvParkModel.svg": () => import("./IconRvParkModel-20bf39bc.js"), "../assets/svg/icons/realm/rv/IconRvPopUpCamper.svg": () => import("./IconRvPopUpCamper-14ac6a8d.js"), "../assets/svg/icons/realm/rv/IconRvTravelTrailer.svg": () => import("./IconRvTravelTrailer-e7c21b4c.js"), "../assets/svg/icons/realm/rv/IconRvTruckCamper.svg": () => import("./IconRvTruckCamper-661b0c28.js") }), `../assets/svg/icons/realm/${r}/Icon${a}.svg`) : et(/* @__PURE__ */ Object.assign({ "../assets/svg/icons/IconAccountBalance.svg": () => import("./IconAccountBalance-ad4f4a95.js"), "../assets/svg/icons/IconAcute.svg": () => import("./IconAcute-ad6bc5da.js"), "../assets/svg/icons/IconAdd.svg": () => import("./IconAdd-917e055b.js"), "../assets/svg/icons/IconAiDescription.svg": () => import("./IconAiDescription-e6f8ed46.js"), "../assets/svg/icons/IconAlignSpaceEven.svg": () => import("./IconAlignSpaceEven-a1d90758.js"), "../assets/svg/icons/IconApplePay.svg": () => import("./IconApplePay-7742e162.js"), "../assets/svg/icons/IconArrowBack.svg": () => import("./IconArrowBack-1810092d.js"), "../assets/svg/icons/IconArrowCycle.svg": () => import("./IconArrowCycle-f8d882fe.js"), "../assets/svg/icons/IconArrowForward.svg": () => import("./IconArrowForward-ddabefc9.js"), "../assets/svg/icons/IconArrowRight.svg": () => import("./IconArrowRight-d93347c3.js"), "../assets/svg/icons/IconAssignment.svg": () => import("./IconAssignment-1983e555.js"), "../assets/svg/icons/IconAttachMoney.svg": () => import("./IconAttachMoney-1360c507.js"), "../assets/svg/icons/IconAutoRenew.svg": () => import("./IconAutoRenew-00afcc33.js"), "../assets/svg/icons/IconAwardStar.svg": () => import("./IconAwardStar-8128aca1.js"), "../assets/svg/icons/IconBed.svg": () => import("./IconBed-3b1fa670.js"), "../assets/svg/icons/IconBolt.svg": () => import("./IconBolt-83121ee2.js"), "../assets/svg/icons/IconBookmark.svg": () => import("./IconBookmark-7d88d664.js"), "../assets/svg/icons/IconBunkhouse.svg": () => import("./IconBunkhouse-e7cb965d.js"), "../assets/svg/icons/IconCalendarMonth.svg": () => import("./IconCalendarMonth-2fd1e713.js"), "../assets/svg/icons/IconCall.svg": () => import("./IconCall-8aa582d9.js"), "../assets/svg/icons/IconCallQuality.svg": () => import("./IconCallQuality-1edf4c35.js"), "../assets/svg/icons/IconCarRental.svg": () => import("./IconCarRental-7709e091.js"), "../assets/svg/icons/IconCheck.svg": () => import("./IconCheck-cf7470ee.js"), "../assets/svg/icons/IconChevronLeft.svg": () => import("./IconChevronLeft-558206bb.js"), "../assets/svg/icons/IconChevronRight.svg": () => import("./IconChevronRight-28930a0b.js"), "../assets/svg/icons/IconClear.svg": () => import("./IconClear-9419bf17.js"), "../assets/svg/icons/IconClose.svg": () => import("./IconClose-abfb6177.js"), "../assets/svg/icons/IconContract.svg": () => import("./IconContract-289a7094.js"), "../assets/svg/icons/IconCrash.svg": () => import("./IconCrash-d87f6517.js"), "../assets/svg/icons/IconDashboardCustomize.svg": () => import("./IconDashboardCustomize-f74fde35.js"), "../assets/svg/icons/IconDelete.svg": () => import("./IconDelete-67b69553.js"), "../assets/svg/icons/IconDiamond.svg": () => import("./IconDiamond-93af488a.js"), "../assets/svg/icons/IconDirectionsBoat.svg": () => import("./IconDirectionsBoat-4d41fb87.js"), "../assets/svg/icons/IconDomain.svg": () => import("./IconDomain-377b91aa.js"), "../assets/svg/icons/IconDraft.svg": () => import("./IconDraft-6e70e48f.js"), "../assets/svg/icons/IconEdit.svg": () => import("./IconEdit-16d34325.js"), "../assets/svg/icons/IconEngine.svg": () => import("./IconEngine-ee5f92d4.js"), "../assets/svg/icons/IconEngineering.svg": () => import("./IconEngineering-e18db558.js"), "../assets/svg/icons/IconError.svg": () => import("./IconError-a2922b95.js"), "../assets/svg/icons/IconExpandContent.svg": () => import("./IconExpandContent-7e144d1c.js"), "../assets/svg/icons/IconExpandLess.svg": () => import("./IconExpandLess-3a8a0552.js"), "../assets/svg/icons/IconExpandMore.svg": () => import("./IconExpandMore-c600148e.js"), "../assets/svg/icons/IconFacebook.svg": () => import("./IconFacebook-4658b533.js"), "../assets/svg/icons/IconFavorite.svg": () => import("./IconFavorite-d23faefe.js"), "../assets/svg/icons/IconFavoriteFilled.svg": () => import("./IconFavoriteFilled-aa0d6d5e.js"), "../assets/svg/icons/IconFlag.svg": () => import("./IconFlag-8bafa50c.js"), "../assets/svg/icons/IconFormatBold.svg": () => import("./IconFormatBold-70a5cacf.js"), "../assets/svg/icons/IconFormatItalic.svg": () => import("./IconFormatItalic-c06504d7.js"), "../assets/svg/icons/IconFormatListBulleted.svg": () => import("./IconFormatListBulleted-9493858a.js"), "../assets/svg/icons/IconForum.svg": () => import("./IconForum-ae4ad63f.js"), "../assets/svg/icons/IconGas.svg": () => import("./IconGas-198d529d.js"), "../assets/svg/icons/IconGavel.svg": () => import("./IconGavel-44c29036.js"), "../assets/svg/icons/IconGears.svg": () => import("./IconGears-a52f8ce9.js"), "../assets/svg/icons/IconGlobeLocationPin.svg": () => import("./IconGlobeLocationPin-4b7fb00b.js"), "../assets/svg/icons/IconGoogle.svg": () => import("./IconGoogle-febad0d8.js"), "../assets/svg/icons/IconGooglePay.svg": () => import("./IconGooglePay-8cf0286e.js"), "../assets/svg/icons/IconGrid.svg": () => import("./IconGrid-25f665e0.js"), "../assets/svg/icons/IconHandshake.svg": () => import("./IconHandshake-7c9f1e84.js"), "../assets/svg/icons/IconHandyman.svg": () => import("./IconHandyman-73c7c329.js"), "../assets/svg/icons/IconHeight.svg": () => import("./IconHeight-4fae7545.js"), "../assets/svg/icons/IconHelp.svg": () => import("./IconHelp-340ee4fb.js"), "../assets/svg/icons/IconInfo.svg": () => import("./IconInfo-efead10b.js"), "../assets/svg/icons/IconInformation.svg": () => import("./IconInformation-790c598a.js"), "../assets/svg/icons/IconInsertText.svg": () => import("./IconInsertText-00236a65.js"), "../assets/svg/icons/IconInstagram.svg": () => import("./IconInstagram-57188d29.js"), "../assets/svg/icons/IconIosShare.svg": () => import("./IconIosShare-167aa8c4.js"), "../assets/svg/icons/IconLayout.svg": () => import("./IconLayout-2865e0eb.js"), "../assets/svg/icons/IconLevellingJack.svg": () => import("./IconLevellingJack-04860178.js"), "../assets/svg/icons/IconLinkedIn.svg": () => import("./IconLinkedIn-f29c217d.js"), "../assets/svg/icons/IconLocalShipping.svg": () => import("./IconLocalShipping-901a3e4c.js"), "../assets/svg/icons/IconLock.svg": () => import("./IconLock-47669e20.js"), "../assets/svg/icons/IconMail.svg": () => import("./IconMail-9b85058a.js"), "../assets/svg/icons/IconMenu.svg": () => import("./IconMenu-4bed57f3.js"), "../assets/svg/icons/IconMoneyBag.svg": () => import("./IconMoneyBag-4a01a10a.js"), "../assets/svg/icons/IconMoreHoriz.svg": () => import("./IconMoreHoriz-2aabe29f.js"), "../assets/svg/icons/IconNotifications.svg": () => import("./IconNotifications-bcbf1d8c.js"), "../assets/svg/icons/IconOdometer.svg": () => import("./IconOdometer-709f4f00.js"), "../assets/svg/icons/IconOpenInNew.svg": () => import("./IconOpenInNew-78fffcfe.js"), "../assets/svg/icons/IconPalette.svg": () => import("./IconPalette-22865300.js"), "../assets/svg/icons/IconPaypal.svg": () => import("./IconPaypal-c28e6dbe.js"), "../assets/svg/icons/IconPerson.svg": () => import("./IconPerson-7ada8b07.js"), "../assets/svg/icons/IconPersonSearch.svg": () => import("./IconPersonSearch-1ccccee1.js"), "../assets/svg/icons/IconPhotoCamera.svg": () => import("./IconPhotoCamera-31a58b85.js"), "../assets/svg/icons/IconPinterest.svg": () => import("./IconPinterest-fe5cc414.js"), "../assets/svg/icons/IconPlayArrow.svg": () => import("./IconPlayArrow-1ed5d884.js"), "../assets/svg/icons/IconPolicy.svg": () => import("./IconPolicy-0a3a02bc.js"), "../assets/svg/icons/IconPower.svg": () => import("./IconPower-bfe4f81a.js"), "../assets/svg/icons/IconPowerOff.svg": () => import("./IconPowerOff-dbade32b.js"), "../assets/svg/icons/IconPriorityHigh.svg": () => import("./IconPriorityHigh-ab1b4a95.js"), "../assets/svg/icons/IconRemove.svg": () => import("./IconRemove-bab221ba.js"), "../assets/svg/icons/IconRequestQuote.svg": () => import("./IconRequestQuote-f6364b1e.js"), "../assets/svg/icons/IconResetWrench.svg": () => import("./IconResetWrench-8791a5a9.js"), "../assets/svg/icons/IconRoad.svg": () => import("./IconRoad-efce130e.js"), "../assets/svg/icons/IconRoundedCorner.svg": () => import("./IconRoundedCorner-adbcfd09.js"), "../assets/svg/icons/IconRuler.svg": () => import("./IconRuler-0ceea80a.js"), "../assets/svg/icons/IconSailing.svg": () => import("./IconSailing-19762955.js"), "../assets/svg/icons/IconSchool.svg": () => import("./IconSchool-2f3ff8d7.js"), "../assets/svg/icons/IconSearch.svg": () => import("./IconSearch-f8faefb4.js"), "../assets/svg/icons/IconSeating.svg": () => import("./IconSeating-2ca8921d.js"), "../assets/svg/icons/IconSell.svg": () => import("./IconSell-b011ac2d.js"), "../assets/svg/icons/IconSensors.svg": () => import("./IconSensors-c4387bc9.js"), "../assets/svg/icons/IconSettings.svg": () => import("./IconSettings-32dd2125.js"), "../assets/svg/icons/IconShare.svg": () => import("./IconShare-57f28ce3.js"), "../assets/svg/icons/IconShieldCheck.svg": () => import("./IconShieldCheck-0c47755d.js"), "../assets/svg/icons/IconShoppingCart.svg": () => import("./IconShoppingCart-b532dab0.js"), "../assets/svg/icons/IconSleeps.svg": () => import("./IconSleeps-b994bd2f.js"), "../assets/svg/icons/IconSms.svg": () => import("./IconSms-378f373a.js"), "../assets/svg/icons/IconSnowflake.svg": () => import("./IconSnowflake-9d956143.js"), "../assets/svg/icons/IconStar.svg": () => import("./IconStar-1b8ad0f9.js"), "../assets/svg/icons/IconSummarize.svg": () => import("./IconSummarize-69ab122a.js"), "../assets/svg/icons/IconSwapHoriz.svg": () => import("./IconSwapHoriz-2d9550c3.js"), "../assets/svg/icons/IconSwapVert.svg": () => import("./IconSwapVert-8085e942.js"), "../assets/svg/icons/IconThreeDRotation.svg": () => import("./IconThreeDRotation-33f086a7.js"), "../assets/svg/icons/IconThumbUp.svg": () => import("./IconThumbUp-72caf64e.js"), "../assets/svg/icons/IconTrendingDown.svg": () => import("./IconTrendingDown-ff3969c7.js"), "../assets/svg/icons/IconTrophy.svg": () => import("./IconTrophy-f4be8b54.js"), "../assets/svg/icons/IconTune.svg": () => import("./IconTune-0913ba01.js"), "../assets/svg/icons/IconTwitter.svg": () => import("./IconTwitter-9acefb07.js"), "../assets/svg/icons/IconUmbrella.svg": () => import("./IconUmbrella-775b11b8.js"), "../assets/svg/icons/IconVerified.svg": () => import("./IconVerified-000f615f.js"), "../assets/svg/icons/IconVideocam.svg": () => import("./IconVideocam-33650e6f.js"), "../assets/svg/icons/IconViewInAr.svg": () => import("./IconViewInAr-d1534ef2.js"), "../assets/svg/icons/IconVisibility.svg": () => import("./IconVisibility-a1c21dd0.js"), "../assets/svg/icons/IconVolumeOff.svg": () => import("./IconVolumeOff-8e121ef3.js"), "../assets/svg/icons/IconVolumeOn.svg": () => import("./IconVolumeOn-992e16dd.js"), "../assets/svg/icons/IconWarehouse.svg": () => import("./IconWarehouse-764da944.js"), "../assets/svg/icons/IconWarning.svg": () => import("./IconWarning-6f490acf.js"), "../assets/svg/icons/IconWater.svg": () => import("./IconWater-a5f94879.js"), "../assets/svg/icons/IconWeight.svg": () => import("./IconWeight-e3b3daa6.js"), "../assets/svg/icons/IconWidth.svg": () => import("./IconWidth-c81dbc7a.js"), "../assets/svg/icons/IconWorkspacePremium.svg": () => import("./IconWorkspacePremium-efd0a531.js"), "../assets/svg/icons/IconWrench.svg": () => import("./IconWrench-6c52ef4f.js"), "../assets/svg/icons/IconYoutube.svg": () => import("./IconYoutube-a6224033.js") }), `../assets/svg/icons/Icon${a}.svg`));
|
|
558
567
|
o.value = Pt(l);
|
|
559
568
|
},
|
|
560
569
|
{ immediate: !0 }
|
|
561
|
-
), (n, a) => (E(),
|
|
570
|
+
), (n, a) => (E(), T("div", {
|
|
562
571
|
class: d(["tide-icon", s.size])
|
|
563
572
|
}, [
|
|
564
573
|
o.value ? (E(), B(Oe(o.value), {
|
|
@@ -704,7 +713,7 @@ const b = {
|
|
|
704
713
|
WORKSPACE_PREMIUM: "workspace-premium",
|
|
705
714
|
WRENCH: "wrench",
|
|
706
715
|
YOUTUBE: "youtube"
|
|
707
|
-
},
|
|
716
|
+
}, Yi = {
|
|
708
717
|
ATV: {
|
|
709
718
|
ATV: "atv-atv",
|
|
710
719
|
DUNE_BUGGY: "atv-dune-buggy",
|
|
@@ -729,7 +738,7 @@ const b = {
|
|
|
729
738
|
TRAVEL_TRAILER: "rv-travel-trailer",
|
|
730
739
|
TRUCK_CAMPER: "rv-truck-camper"
|
|
731
740
|
}
|
|
732
|
-
},
|
|
741
|
+
}, jt = { class: "tide-accordion-item" }, Jt = /* @__PURE__ */ C({
|
|
733
742
|
__name: "TideAccordionItem",
|
|
734
743
|
props: {
|
|
735
744
|
hasBottomDivider: { type: Boolean, default: !1 },
|
|
@@ -743,17 +752,17 @@ const b = {
|
|
|
743
752
|
const o = i, n = () => {
|
|
744
753
|
s("toggle");
|
|
745
754
|
};
|
|
746
|
-
return (a, c) => (E(),
|
|
755
|
+
return (a, c) => (E(), T("div", jt, [
|
|
747
756
|
o.hasTopDivider ? (E(), B(Je, { key: 0 })) : S("", !0),
|
|
748
|
-
|
|
757
|
+
A("div", {
|
|
749
758
|
class: d(["tide-accordion-head", t(e).DISPLAY.FLEX, t(e).AXIS1.BETWEEN, t(e).PADDING.Y.HALF, t(e).CURSOR.POINTER]),
|
|
750
759
|
onClick: n
|
|
751
760
|
}, [
|
|
752
|
-
|
|
761
|
+
A("div", {
|
|
753
762
|
class: d([t(e).DISPLAY.FLEX, t(e).AXIS2.CENTER, t(e).GAP.HALF, t(e).FONT.ROLE.LABEL_1_SEMIBOLD])
|
|
754
763
|
}, [
|
|
755
|
-
|
|
756
|
-
o.isOptional ? (E(),
|
|
764
|
+
A("span", null, h(o.label), 1),
|
|
765
|
+
o.isOptional ? (E(), T("span", {
|
|
757
766
|
key: 0,
|
|
758
767
|
class: d([t(e).FONT.COLOR.SURFACE.VARIANT])
|
|
759
768
|
}, " (optional) ", 2)) : S("", !0)
|
|
@@ -763,10 +772,10 @@ const b = {
|
|
|
763
772
|
size: t(W).LARGE
|
|
764
773
|
}, null, 8, ["icon", "size"])
|
|
765
774
|
], 2),
|
|
766
|
-
|
|
775
|
+
A("div", {
|
|
767
776
|
class: d(["tide-accordion-body", o.isExpanded ? "expanded" : "collapsed", t(e).DISPLAY.GRID])
|
|
768
777
|
}, [
|
|
769
|
-
|
|
778
|
+
A("div", {
|
|
770
779
|
class: d([t(e).OVERFLOW.Y.HIDDEN, t(e).MARGIN.Y.ONE, t(e).FONT.ROLE.BODY_1, t(e).FONT.COLOR.SURFACE.DEFAULT])
|
|
771
780
|
}, [
|
|
772
781
|
k(a.$slots, "default", {}, void 0, !0)
|
|
@@ -776,12 +785,7 @@ const b = {
|
|
|
776
785
|
]));
|
|
777
786
|
}
|
|
778
787
|
});
|
|
779
|
-
const
|
|
780
|
-
const o = i.__vccOpts || i;
|
|
781
|
-
for (const [n, a] of s)
|
|
782
|
-
o[n] = a;
|
|
783
|
-
return o;
|
|
784
|
-
}, ki = /* @__PURE__ */ w(qt, [["__scopeId", "data-v-d5fdff3b"]]), M = {
|
|
788
|
+
const Vi = /* @__PURE__ */ w(Jt, [["__scopeId", "data-v-d5fdff3b"]]), M = {
|
|
785
789
|
BUTTON: "button",
|
|
786
790
|
LINK: "a"
|
|
787
791
|
}, ie = {
|
|
@@ -836,7 +840,7 @@ const w = (i, s) => {
|
|
|
836
840
|
INFO: "info",
|
|
837
841
|
SUCCESS: "success",
|
|
838
842
|
WARNING: "warning"
|
|
839
|
-
},
|
|
843
|
+
}, es = /* @__PURE__ */ C({
|
|
840
844
|
__name: "TideAlert",
|
|
841
845
|
props: {
|
|
842
846
|
heading: { default: void 0 },
|
|
@@ -863,7 +867,7 @@ const w = (i, s) => {
|
|
|
863
867
|
}
|
|
864
868
|
return n;
|
|
865
869
|
});
|
|
866
|
-
return (n, a) => (E(),
|
|
870
|
+
return (n, a) => (E(), T("div", {
|
|
867
871
|
class: d([
|
|
868
872
|
s.type,
|
|
869
873
|
"tide-alert",
|
|
@@ -878,7 +882,7 @@ const w = (i, s) => {
|
|
|
878
882
|
s.isToast ? t(e).SHADOW.BOTTOM : ""
|
|
879
883
|
])
|
|
880
884
|
}, [
|
|
881
|
-
|
|
885
|
+
A("div", {
|
|
882
886
|
class: d([
|
|
883
887
|
"tide-alert-icon",
|
|
884
888
|
t(e).PADDING.FULL.HALF,
|
|
@@ -892,10 +896,10 @@ const w = (i, s) => {
|
|
|
892
896
|
}, [
|
|
893
897
|
x(H, { icon: o.value }, null, 8, ["icon"])
|
|
894
898
|
], 2),
|
|
895
|
-
|
|
899
|
+
A("div", {
|
|
896
900
|
class: d(["tide-alert-heading", t(e).DISPLAY.FLEX, t(e).AXIS2.CENTER])
|
|
897
901
|
}, [
|
|
898
|
-
|
|
902
|
+
A("h2", {
|
|
899
903
|
class: d([t(e).FONT.ROLE.LABEL_1_SEMIBOLD, t(e).FONT.COLOR.SURFACE.DEFAULT])
|
|
900
904
|
}, h(s.heading), 3)
|
|
901
905
|
], 2),
|
|
@@ -905,7 +909,7 @@ const w = (i, s) => {
|
|
|
905
909
|
priority: t($).QUATERNARY,
|
|
906
910
|
"aria-label": "Close alert"
|
|
907
911
|
}, null, 8, ["class", "icon", "priority"]),
|
|
908
|
-
|
|
912
|
+
A("div", {
|
|
909
913
|
class: d(["tide-alert-body", t(e).FONT.ROLE.LABEL_1, t(e).FONT.COLOR.SURFACE.VARIANT])
|
|
910
914
|
}, [
|
|
911
915
|
k(n.$slots, "default", {}, void 0, !0)
|
|
@@ -913,7 +917,7 @@ const w = (i, s) => {
|
|
|
913
917
|
], 2));
|
|
914
918
|
}
|
|
915
919
|
});
|
|
916
|
-
const
|
|
920
|
+
const $i = /* @__PURE__ */ w(es, [["__scopeId", "data-v-e15788b8"]]), Ki = /* @__PURE__ */ C({
|
|
917
921
|
__name: "TideBadge",
|
|
918
922
|
props: {
|
|
919
923
|
iconLeading: { default: void 0 },
|
|
@@ -922,7 +926,7 @@ const Yi = /* @__PURE__ */ w(jt, [["__scopeId", "data-v-e15788b8"]]), Vi = /* @_
|
|
|
922
926
|
},
|
|
923
927
|
setup(i) {
|
|
924
928
|
const s = i;
|
|
925
|
-
return (o, n) => (E(),
|
|
929
|
+
return (o, n) => (E(), T("div", {
|
|
926
930
|
class: d([
|
|
927
931
|
"tide-badge",
|
|
928
932
|
s.isFloating ? [t(e).BG.SURFACE.FLOATING, t(e).SHADOW.BOTTOM] : [t(e).BG.SURFACE.VARIANT],
|
|
@@ -942,20 +946,20 @@ const Yi = /* @__PURE__ */ w(jt, [["__scopeId", "data-v-e15788b8"]]), Vi = /* @_
|
|
|
942
946
|
Rt(" " + h(s.label), 1)
|
|
943
947
|
], 2));
|
|
944
948
|
}
|
|
945
|
-
}),
|
|
949
|
+
}), ts = {
|
|
946
950
|
YEARS_10: "10",
|
|
947
951
|
YEARS_15: "15",
|
|
948
952
|
YEARS_5: "5"
|
|
949
|
-
},
|
|
953
|
+
}, ss = {
|
|
950
954
|
class: /* @__PURE__ */ d([])
|
|
951
|
-
},
|
|
955
|
+
}, zi = /* @__PURE__ */ C({
|
|
952
956
|
__name: "TideBadgeTrustedPartner",
|
|
953
957
|
props: {
|
|
954
|
-
years: { default:
|
|
958
|
+
years: { default: ts.YEARS_5 }
|
|
955
959
|
},
|
|
956
960
|
setup(i) {
|
|
957
961
|
const s = i;
|
|
958
|
-
return (o, n) => (E(),
|
|
962
|
+
return (o, n) => (E(), T("div", {
|
|
959
963
|
class: d([
|
|
960
964
|
"tide-badge-trusted-partner",
|
|
961
965
|
t(e).FONT.COLOR.SURFACE.BRAND,
|
|
@@ -970,39 +974,39 @@ const Yi = /* @__PURE__ */ w(jt, [["__scopeId", "data-v-e15788b8"]]), Vi = /* @_
|
|
|
970
974
|
x(H, {
|
|
971
975
|
icon: t(b).AWARD_STAR
|
|
972
976
|
}, null, 8, ["icon"]),
|
|
973
|
-
|
|
974
|
-
|
|
977
|
+
A("div", ss, [
|
|
978
|
+
A("span", null, h(s.years) + " year trusted partner", 1)
|
|
975
979
|
])
|
|
976
980
|
], 2));
|
|
977
981
|
}
|
|
978
|
-
}),
|
|
982
|
+
}), is = ["data-track", "href"], os = ["data-track"], ns = { key: 0 }, Qi = /* @__PURE__ */ C({
|
|
979
983
|
__name: "TideBreadCrumbs",
|
|
980
984
|
props: {
|
|
981
985
|
breadCrumbs: { default: void 0 }
|
|
982
986
|
},
|
|
983
987
|
setup(i) {
|
|
984
988
|
const s = i;
|
|
985
|
-
return (o, n) => (E(),
|
|
989
|
+
return (o, n) => (E(), T("ul", {
|
|
986
990
|
class: d(["tide-bread-crumbs", t(e).DISPLAY.FLEX, t(e).AXIS2.CENTER, t(e).GAP.QUARTER, t(e).LIST_BULLETS.OFF])
|
|
987
991
|
}, [
|
|
988
|
-
(E(!0),
|
|
992
|
+
(E(!0), T(q, null, oe(s.breadCrumbs, (a, c) => (E(), T(q, {
|
|
989
993
|
key: a.label
|
|
990
994
|
}, [
|
|
991
|
-
|
|
995
|
+
A("li", {
|
|
992
996
|
class: d([t(e).FONT.ROLE.BODY_2])
|
|
993
997
|
}, [
|
|
994
|
-
a.url ? (E(),
|
|
998
|
+
a.url ? (E(), T("a", {
|
|
995
999
|
key: 0,
|
|
996
1000
|
class: d([t(e).FONT.ROLE.LINK_2, t(e).FONT.COLOR.SURFACE.DEFAULT]),
|
|
997
1001
|
"data-track": a.dataTrack || void 0,
|
|
998
1002
|
href: a.url
|
|
999
|
-
}, h(a.label), 11,
|
|
1003
|
+
}, h(a.label), 11, is)) : (E(), T("span", {
|
|
1000
1004
|
key: 1,
|
|
1001
1005
|
class: d([t(e).FONT.ROLE.LABEL_2, t(e).FONT.COLOR.SURFACE.VARIANT]),
|
|
1002
1006
|
"data-track": a.dataTrack || void 0
|
|
1003
|
-
}, h(a.label), 11,
|
|
1007
|
+
}, h(a.label), 11, os))
|
|
1004
1008
|
], 2),
|
|
1005
|
-
s.breadCrumbs && c < s.breadCrumbs.length - 1 ? (E(),
|
|
1009
|
+
s.breadCrumbs && c < s.breadCrumbs.length - 1 ? (E(), T("li", ns, [
|
|
1006
1010
|
x(H, {
|
|
1007
1011
|
icon: t(b).ARROW_RIGHT,
|
|
1008
1012
|
size: t(W).SMALL
|
|
@@ -1011,7 +1015,7 @@ const Yi = /* @__PURE__ */ w(jt, [["__scopeId", "data-v-e15788b8"]]), Vi = /* @_
|
|
|
1011
1015
|
], 64))), 128))
|
|
1012
1016
|
], 2));
|
|
1013
1017
|
}
|
|
1014
|
-
}),
|
|
1018
|
+
}), Zi = /* @__PURE__ */ C({
|
|
1015
1019
|
__name: "TideButton",
|
|
1016
1020
|
props: {
|
|
1017
1021
|
disabled: { type: Boolean, default: !1 },
|
|
@@ -1060,7 +1064,7 @@ const Yi = /* @__PURE__ */ w(jt, [["__scopeId", "data-v-e15788b8"]]), Vi = /* @_
|
|
|
1060
1064
|
_: 1
|
|
1061
1065
|
}, 8, ["class", "disabled", "href", "target"]));
|
|
1062
1066
|
}
|
|
1063
|
-
}),
|
|
1067
|
+
}), as = /* @__PURE__ */ C({
|
|
1064
1068
|
__name: "TideButtonPagination",
|
|
1065
1069
|
props: {
|
|
1066
1070
|
disabled: { type: Boolean, default: !1 },
|
|
@@ -1084,7 +1088,7 @@ const Yi = /* @__PURE__ */ w(jt, [["__scopeId", "data-v-e15788b8"]]), Vi = /* @_
|
|
|
1084
1088
|
href: s.element === t(ie).LINK && s.href ? s.href : void 0
|
|
1085
1089
|
}, {
|
|
1086
1090
|
default: Re(() => [
|
|
1087
|
-
|
|
1091
|
+
A("span", {
|
|
1088
1092
|
class: d(["label", t(e).DISPLAY.FLEX, t(e).AXIS1.CENTER, t(e).AXIS2.CENTER])
|
|
1089
1093
|
}, h(s.label), 3)
|
|
1090
1094
|
]),
|
|
@@ -1092,7 +1096,7 @@ const Yi = /* @__PURE__ */ w(jt, [["__scopeId", "data-v-e15788b8"]]), Vi = /* @_
|
|
|
1092
1096
|
}, 8, ["class", "disabled", "href"]));
|
|
1093
1097
|
}
|
|
1094
1098
|
});
|
|
1095
|
-
const
|
|
1099
|
+
const rs = /* @__PURE__ */ w(as, [["__scopeId", "data-v-f6d8e4e9"]]), ls = ["data-track", "onClick"], cs = /* @__PURE__ */ C({
|
|
1096
1100
|
__name: "TideButtonSegmented",
|
|
1097
1101
|
props: {
|
|
1098
1102
|
activeTab: { default: 0 },
|
|
@@ -1103,7 +1107,7 @@ const ns = /* @__PURE__ */ w(os, [["__scopeId", "data-v-f6d8e4e9"]]), as = ["dat
|
|
|
1103
1107
|
const o = i, n = (a) => {
|
|
1104
1108
|
s("change", a);
|
|
1105
1109
|
};
|
|
1106
|
-
return (a, c) => (E(),
|
|
1110
|
+
return (a, c) => (E(), T("div", {
|
|
1107
1111
|
class: d([
|
|
1108
1112
|
"tide-button-segmented",
|
|
1109
1113
|
t(e).BG.SURFACE.VARIANT,
|
|
@@ -1115,7 +1119,7 @@ const ns = /* @__PURE__ */ w(os, [["__scopeId", "data-v-f6d8e4e9"]]), as = ["dat
|
|
|
1115
1119
|
t(e).WIDTH.FULL
|
|
1116
1120
|
])
|
|
1117
1121
|
}, [
|
|
1118
|
-
(E(!0),
|
|
1122
|
+
(E(!0), T(q, null, oe(o.tabs, (r, l) => (E(), T("button", {
|
|
1119
1123
|
class: d([
|
|
1120
1124
|
"tide-button-segmented-tab",
|
|
1121
1125
|
l === a.activeTab ? [t(e).BG.SURFACE.DEFAULT, t(e).FONT.COLOR.SURFACE.DEFAULT, t(e).SHADOW.BOTTOM] : ["inactive", t(e).FONT.COLOR.SURFACE.VARIANT],
|
|
@@ -1131,22 +1135,22 @@ const ns = /* @__PURE__ */ w(os, [["__scopeId", "data-v-f6d8e4e9"]]), as = ["dat
|
|
|
1131
1135
|
key: r.label,
|
|
1132
1136
|
onClick: (u) => n(l)
|
|
1133
1137
|
}, [
|
|
1134
|
-
|
|
1138
|
+
A("span", {
|
|
1135
1139
|
class: d([t(e).FONT.ROLE.LABEL_2_SEMIBOLD])
|
|
1136
1140
|
}, h(r.label), 3),
|
|
1137
|
-
r.count && r.count > 0 ? (E(),
|
|
1141
|
+
r.count && r.count > 0 ? (E(), T("span", {
|
|
1138
1142
|
key: 0,
|
|
1139
1143
|
class: d([t(e).FONT.ROLE.LABEL_2_SEMIBOLD])
|
|
1140
1144
|
}, " (" + h(r.count) + ") ", 3)) : S("", !0)
|
|
1141
|
-
], 10,
|
|
1145
|
+
], 10, ls))), 128))
|
|
1142
1146
|
], 2));
|
|
1143
1147
|
}
|
|
1144
1148
|
});
|
|
1145
|
-
const
|
|
1149
|
+
const qi = /* @__PURE__ */ w(cs, [["__scopeId", "data-v-4e385d0b"]]), _e = {
|
|
1146
1150
|
ACTIONABLE: "action",
|
|
1147
1151
|
INFORMATIONAL: "informational",
|
|
1148
1152
|
SELECTABLE: "select"
|
|
1149
|
-
},
|
|
1153
|
+
}, ds = /* @__PURE__ */ C({
|
|
1150
1154
|
__name: "TideCard",
|
|
1151
1155
|
props: {
|
|
1152
1156
|
description: { default: void 0 },
|
|
@@ -1181,13 +1185,13 @@ const Qi = /* @__PURE__ */ w(rs, [["__scopeId", "data-v-4e385d0b"]]), _e = {
|
|
|
1181
1185
|
icon: s.icon,
|
|
1182
1186
|
size: t(W).SMALL
|
|
1183
1187
|
}, null, 8, ["class", "icon", "size"])) : S("", !0),
|
|
1184
|
-
|
|
1188
|
+
A("div", {
|
|
1185
1189
|
class: d([t(e).AXIS2.START, t(e).DISPLAY.FLEX, t(e).FLEX.DIRECTION.COLUMN, t(e).GAP.HALF])
|
|
1186
1190
|
}, [
|
|
1187
|
-
|
|
1191
|
+
A("div", {
|
|
1188
1192
|
class: d([t(e).FONT.ROLE.LABEL_1_SEMIBOLD, t(e).FONT.COLOR.SURFACE.DEFAULT])
|
|
1189
1193
|
}, h(s.heading), 3),
|
|
1190
|
-
s.description ? (E(),
|
|
1194
|
+
s.description ? (E(), T("div", {
|
|
1191
1195
|
key: 0,
|
|
1192
1196
|
class: d([t(e).FONT.ROLE.LABEL_2, t(e).FONT.COLOR.SURFACE.VARIANT])
|
|
1193
1197
|
}, h(s.description), 3)) : S("", !0)
|
|
@@ -1197,7 +1201,7 @@ const Qi = /* @__PURE__ */ w(rs, [["__scopeId", "data-v-4e385d0b"]]), _e = {
|
|
|
1197
1201
|
}, 8, ["class", "href"]));
|
|
1198
1202
|
}
|
|
1199
1203
|
});
|
|
1200
|
-
const
|
|
1204
|
+
const ji = /* @__PURE__ */ w(ds, [["__scopeId", "data-v-98f24c4f"]]), us = /* @__PURE__ */ C({
|
|
1201
1205
|
__name: "TideCarousel",
|
|
1202
1206
|
props: {
|
|
1203
1207
|
isFloating: { type: Boolean, default: !1 },
|
|
@@ -1208,14 +1212,14 @@ const Zi = /* @__PURE__ */ w(ls, [["__scopeId", "data-v-98f24c4f"]]), cs = /* @_
|
|
|
1208
1212
|
},
|
|
1209
1213
|
emits: ["change"],
|
|
1210
1214
|
setup(i, { emit: s }) {
|
|
1211
|
-
const o = i, n = D(), a = D(), c = D(), r = D(), l = D(0), u = D(), O = D(), R = D(), I = D(), v = D(),
|
|
1215
|
+
const o = i, n = D(), a = D(), c = D(), r = D(), l = D(0), u = D(), O = D(), R = D(), I = D(), v = D(), L = () => {
|
|
1212
1216
|
const m = Array.from(n.value.children).map((F) => F.offsetLeft);
|
|
1213
1217
|
if (m.length === 0)
|
|
1214
1218
|
return;
|
|
1215
1219
|
const U = m.reduce((F, G) => Math.abs(G - a.value.scrollLeft) < Math.abs(F - a.value.scrollLeft) ? G : F);
|
|
1216
1220
|
l.value = m.indexOf(U);
|
|
1217
1221
|
}, g = () => {
|
|
1218
|
-
c.value = a.value.scrollLeft + a.value.clientWidth, r.value = n.value.scrollWidth, u.value = a.value.clientWidth, O.value = r.value > u.value, R.value = c.value === r.value, I.value = a.value.scrollWidth - a.value.clientWidth, v.value = O.value && !o.isTouchscreen,
|
|
1222
|
+
c.value = a.value.scrollLeft + a.value.clientWidth, r.value = n.value.scrollWidth, u.value = a.value.clientWidth, O.value = r.value > u.value, R.value = c.value === r.value, I.value = a.value.scrollWidth - a.value.clientWidth, v.value = O.value && !o.isTouchscreen, L();
|
|
1219
1223
|
}, _ = () => {
|
|
1220
1224
|
g();
|
|
1221
1225
|
}, p = (m) => {
|
|
@@ -1239,28 +1243,28 @@ const Zi = /* @__PURE__ */ w(ls, [["__scopeId", "data-v-98f24c4f"]]), cs = /* @_
|
|
|
1239
1243
|
g();
|
|
1240
1244
|
}), K(l, () => {
|
|
1241
1245
|
s("change", l.value);
|
|
1242
|
-
}), (m, U) => (E(),
|
|
1246
|
+
}), (m, U) => (E(), T("section", {
|
|
1243
1247
|
class: d(["tide-carousel", t(e).DISPLAY.FLEX, t(e).FLEX.DIRECTION.COLUMN, t(e).GAP.TWO, t(e).WIDTH.MAX_FULL]),
|
|
1244
1248
|
ref: "carouselRef"
|
|
1245
1249
|
}, [
|
|
1246
|
-
!o.isFloating && (v.value || o.title) ? (E(),
|
|
1250
|
+
!o.isFloating && (v.value || o.title) ? (E(), T("section", {
|
|
1247
1251
|
key: 0,
|
|
1248
1252
|
class: d([t(e).DISPLAY.FLEX, o.title ? t(e).AXIS1.BETWEEN : t(e).AXIS1.END, t(e).AXIS2.CENTER, t(e).WIDTH.FULL])
|
|
1249
1253
|
}, [
|
|
1250
|
-
o.title || o.subtitle ? (E(),
|
|
1254
|
+
o.title || o.subtitle ? (E(), T("div", {
|
|
1251
1255
|
key: 0,
|
|
1252
1256
|
class: d([t(e).DISPLAY.FLEX, t(e).AXIS2.CENTER, t(e).GAP.ONE])
|
|
1253
1257
|
}, [
|
|
1254
|
-
o.title ? (E(),
|
|
1258
|
+
o.title ? (E(), T("div", {
|
|
1255
1259
|
key: 0,
|
|
1256
1260
|
class: d([t(e).FONT.ROLE.DISPLAY_1])
|
|
1257
1261
|
}, h(o.title), 3)) : S("", !0),
|
|
1258
|
-
o.subtitle ? (E(),
|
|
1262
|
+
o.subtitle ? (E(), T("div", {
|
|
1259
1263
|
key: 1,
|
|
1260
1264
|
class: d([t(e).FONT.ROLE.LABEL_2, t(e).FONT.COLOR.SURFACE.VARIANT])
|
|
1261
1265
|
}, h(o.subtitle), 3)) : S("", !0)
|
|
1262
1266
|
], 2)) : S("", !0),
|
|
1263
|
-
v.value ? (E(),
|
|
1267
|
+
v.value ? (E(), T("div", {
|
|
1264
1268
|
key: 1,
|
|
1265
1269
|
class: d([t(e).DISPLAY.FLEX, t(e).AXIS2.CENTER, t(e).GAP.ONE])
|
|
1266
1270
|
}, [
|
|
@@ -1279,16 +1283,16 @@ const Zi = /* @__PURE__ */ w(ls, [["__scopeId", "data-v-98f24c4f"]]), cs = /* @_
|
|
|
1279
1283
|
], 2)) : S("", !0)
|
|
1280
1284
|
], 2)) : S("", !0),
|
|
1281
1285
|
k(m.$slots, "misc", {}, void 0, !0),
|
|
1282
|
-
|
|
1286
|
+
A("div", {
|
|
1283
1287
|
class: d([t(e).POSITION.RELATIVE])
|
|
1284
1288
|
}, [
|
|
1285
|
-
|
|
1289
|
+
A("div", {
|
|
1286
1290
|
class: d([t(e).SCROLLBAR.OFF, t(e).SNAP.ON, t(e).OVERFLOW.X.SCROLL, t(e).WIDTH.FULL]),
|
|
1287
1291
|
ref_key: "frameRef",
|
|
1288
1292
|
ref: a,
|
|
1289
1293
|
onScroll: _
|
|
1290
1294
|
}, [
|
|
1291
|
-
|
|
1295
|
+
A("ul", {
|
|
1292
1296
|
class: d([t(e).DISPLAY.FLEX, t(e).GAP.ONE, t(e).LIST_BULLETS.OFF]),
|
|
1293
1297
|
ref_key: "contentRef",
|
|
1294
1298
|
ref: n
|
|
@@ -1296,7 +1300,7 @@ const Zi = /* @__PURE__ */ w(ls, [["__scopeId", "data-v-98f24c4f"]]), cs = /* @_
|
|
|
1296
1300
|
k(m.$slots, "default", {}, void 0, !0)
|
|
1297
1301
|
], 2)
|
|
1298
1302
|
], 34),
|
|
1299
|
-
m.isFloating && v.value ? (E(),
|
|
1303
|
+
m.isFloating && v.value ? (E(), T("div", {
|
|
1300
1304
|
key: 0,
|
|
1301
1305
|
class: d([
|
|
1302
1306
|
"tide-carousel-button-overlay",
|
|
@@ -1330,7 +1334,7 @@ const Zi = /* @__PURE__ */ w(ls, [["__scopeId", "data-v-98f24c4f"]]), cs = /* @_
|
|
|
1330
1334
|
], 2));
|
|
1331
1335
|
}
|
|
1332
1336
|
});
|
|
1333
|
-
const
|
|
1337
|
+
const Ji = /* @__PURE__ */ w(us, [["__scopeId", "data-v-b803c6b8"]]), Es = ["href", "target"], Os = /* @__PURE__ */ C({
|
|
1334
1338
|
__name: "TideChipAction",
|
|
1335
1339
|
props: {
|
|
1336
1340
|
href: {},
|
|
@@ -1339,7 +1343,7 @@ const qi = /* @__PURE__ */ w(cs, [["__scopeId", "data-v-b803c6b8"]]), ds = ["hre
|
|
|
1339
1343
|
},
|
|
1340
1344
|
setup(i) {
|
|
1341
1345
|
const s = i;
|
|
1342
|
-
return (o, n) => (E(),
|
|
1346
|
+
return (o, n) => (E(), T("a", {
|
|
1343
1347
|
class: d([
|
|
1344
1348
|
"tide-chip-action",
|
|
1345
1349
|
t(e).DISPLAY.FLEX,
|
|
@@ -1360,11 +1364,11 @@ const qi = /* @__PURE__ */ w(cs, [["__scopeId", "data-v-b803c6b8"]]), ds = ["hre
|
|
|
1360
1364
|
x(H, {
|
|
1361
1365
|
icon: t(b).SEARCH
|
|
1362
1366
|
}, null, 8, ["icon"]),
|
|
1363
|
-
|
|
1364
|
-
], 10,
|
|
1367
|
+
A("span", null, h(s.label), 1)
|
|
1368
|
+
], 10, Es));
|
|
1365
1369
|
}
|
|
1366
1370
|
});
|
|
1367
|
-
const
|
|
1371
|
+
const eo = /* @__PURE__ */ w(Os, [["__scopeId", "data-v-7e30d2ca"]]), Rs = /* @__PURE__ */ C({
|
|
1368
1372
|
__name: "TideChipFilter",
|
|
1369
1373
|
props: {
|
|
1370
1374
|
isActive: { type: Boolean },
|
|
@@ -1372,7 +1376,7 @@ const ji = /* @__PURE__ */ w(us, [["__scopeId", "data-v-7e30d2ca"]]), Es = /* @_
|
|
|
1372
1376
|
},
|
|
1373
1377
|
setup(i) {
|
|
1374
1378
|
const s = i;
|
|
1375
|
-
return (o, n) => (E(),
|
|
1379
|
+
return (o, n) => (E(), T("button", {
|
|
1376
1380
|
class: d([
|
|
1377
1381
|
"tide-chip-filter",
|
|
1378
1382
|
s.isActive ? [t(e).BG.SECONDARY, t(e).FONT.COLOR.SECONDARY] : [t(e).BG.SURFACE.VARIANT, t(e).FONT.COLOR.SURFACE.DEFAULT],
|
|
@@ -1388,24 +1392,24 @@ const ji = /* @__PURE__ */ w(us, [["__scopeId", "data-v-7e30d2ca"]]), Es = /* @_
|
|
|
1388
1392
|
])
|
|
1389
1393
|
}, [
|
|
1390
1394
|
k(o.$slots, "default", {}, void 0, !0),
|
|
1391
|
-
|
|
1395
|
+
A("div", {
|
|
1392
1396
|
class: d([t(e).DISPLAY.FLEX, t(e).AXIS1.CENTER, t(e).AXIS2.CENTER, t(e).GAP.HALF])
|
|
1393
1397
|
}, [
|
|
1394
|
-
|
|
1398
|
+
A("span", {
|
|
1395
1399
|
class: d([s.isActive ? "" : "icon-spacing", t(e).FONT.ROLE.LABEL_1, t(e).WHITESPACE_WRAP.OFF])
|
|
1396
1400
|
}, h(s.label), 3)
|
|
1397
1401
|
], 2)
|
|
1398
1402
|
], 2));
|
|
1399
1403
|
}
|
|
1400
1404
|
});
|
|
1401
|
-
const
|
|
1405
|
+
const to = /* @__PURE__ */ w(Rs, [["__scopeId", "data-v-6ddce1c2"]]), Is = /* @__PURE__ */ C({
|
|
1402
1406
|
__name: "TideChipInput",
|
|
1403
1407
|
props: {
|
|
1404
1408
|
label: {}
|
|
1405
1409
|
},
|
|
1406
1410
|
setup(i) {
|
|
1407
1411
|
const s = i;
|
|
1408
|
-
return (o, n) => (E(),
|
|
1412
|
+
return (o, n) => (E(), T("button", {
|
|
1409
1413
|
class: d([
|
|
1410
1414
|
"tide-chip-input",
|
|
1411
1415
|
t(e).BG.SURFACE.VARIANT,
|
|
@@ -1420,44 +1424,44 @@ const Ji = /* @__PURE__ */ w(Es, [["__scopeId", "data-v-6ddce1c2"]]), Os = /* @_
|
|
|
1420
1424
|
t(e).FONT.ROLE.LABEL_2
|
|
1421
1425
|
])
|
|
1422
1426
|
}, [
|
|
1423
|
-
|
|
1427
|
+
A("span", null, h(s.label), 1),
|
|
1424
1428
|
x(H, {
|
|
1425
1429
|
icon: t(b).CLOSE
|
|
1426
1430
|
}, null, 8, ["icon"])
|
|
1427
1431
|
], 2));
|
|
1428
1432
|
}
|
|
1429
1433
|
});
|
|
1430
|
-
const
|
|
1434
|
+
const so = /* @__PURE__ */ w(Is, [["__scopeId", "data-v-42611a29"]]), Ts = { class: "tide-columns" }, As = { class: "tide-columns-column" }, Ls = { class: "tide-columns-column" }, ps = { class: "tide-columns-column" }, vs = { class: "tide-columns-column" }, fs = /* @__PURE__ */ C({
|
|
1431
1435
|
__name: "TideColumns",
|
|
1432
1436
|
props: {
|
|
1433
1437
|
heading: { default: "" }
|
|
1434
1438
|
},
|
|
1435
1439
|
setup(i) {
|
|
1436
1440
|
const s = i;
|
|
1437
|
-
return (o, n) => (E(),
|
|
1438
|
-
|
|
1441
|
+
return (o, n) => (E(), T("section", Ts, [
|
|
1442
|
+
A("h2", {
|
|
1439
1443
|
class: d([t(e).MARGIN.BOTTOM.HALF])
|
|
1440
1444
|
}, h(s.heading), 3),
|
|
1441
|
-
|
|
1445
|
+
A("ul", {
|
|
1442
1446
|
class: d([t(e).DISPLAY.FLEX, t(e).FLEX.WRAP, t(e).GAP.TWO, t(e).LIST_BULLETS.OFF])
|
|
1443
1447
|
}, [
|
|
1444
|
-
|
|
1448
|
+
A("li", As, [
|
|
1445
1449
|
k(o.$slots, "section1", {}, void 0, !0)
|
|
1446
1450
|
]),
|
|
1447
|
-
|
|
1451
|
+
A("li", Ls, [
|
|
1448
1452
|
k(o.$slots, "section2", {}, void 0, !0)
|
|
1449
1453
|
]),
|
|
1450
|
-
|
|
1454
|
+
A("li", ps, [
|
|
1451
1455
|
k(o.$slots, "section3", {}, void 0, !0)
|
|
1452
1456
|
]),
|
|
1453
|
-
|
|
1457
|
+
A("li", vs, [
|
|
1454
1458
|
k(o.$slots, "section4", {}, void 0, !0)
|
|
1455
1459
|
])
|
|
1456
1460
|
], 2)
|
|
1457
1461
|
]));
|
|
1458
1462
|
}
|
|
1459
1463
|
});
|
|
1460
|
-
const
|
|
1464
|
+
const io = /* @__PURE__ */ w(fs, [["__scopeId", "data-v-c92a6639"]]), Ns = ["media", "srcset"], gs = ["alt", "fetchpriority", "loading", "src"], He = "https://cdn-static.tilabs.io/marketplace/common/image-coming-soon.svg", ms = /* @__PURE__ */ C({
|
|
1461
1465
|
__name: "TideImage",
|
|
1462
1466
|
props: {
|
|
1463
1467
|
alt: { default: "" },
|
|
@@ -1473,7 +1477,7 @@ const to = /* @__PURE__ */ w(ps, [["__scopeId", "data-v-c92a6639"]]), vs = ["med
|
|
|
1473
1477
|
const c = (l = n.value) == null ? void 0 : l.currentSrc, r = (u = o.value) == null ? void 0 : u.querySelector(`source[srcset="${c}"]`);
|
|
1474
1478
|
c && r ? r.srcset = He : n.value && (n.value.src = He);
|
|
1475
1479
|
};
|
|
1476
|
-
return (c, r) => (E(),
|
|
1480
|
+
return (c, r) => (E(), T("picture", {
|
|
1477
1481
|
class: d(["tide-image", t(e).DISPLAY.BLOCK]),
|
|
1478
1482
|
ref_key: "picture",
|
|
1479
1483
|
ref: o,
|
|
@@ -1484,12 +1488,12 @@ const to = /* @__PURE__ */ w(ps, [["__scopeId", "data-v-c92a6639"]]), vs = ["med
|
|
|
1484
1488
|
} : void 0
|
|
1485
1489
|
)
|
|
1486
1490
|
}, [
|
|
1487
|
-
(E(!0),
|
|
1491
|
+
(E(!0), T(q, null, oe(s.sources, (l) => (E(), T("source", {
|
|
1488
1492
|
key: l.srcset,
|
|
1489
1493
|
media: `(min-width:${l.media}px)`,
|
|
1490
1494
|
srcset: l.srcset
|
|
1491
|
-
}, null, 8,
|
|
1492
|
-
|
|
1495
|
+
}, null, 8, Ns))), 128)),
|
|
1496
|
+
A("img", {
|
|
1493
1497
|
alt: c.alt,
|
|
1494
1498
|
class: d([t(e).WIDTH.FULL, t(e).HEIGHT.FULL, t(e).OBJECT.CENTER, t(e).OBJECT.COVER]),
|
|
1495
1499
|
fetchpriority: c.isLazy ? void 0 : "high",
|
|
@@ -1498,10 +1502,10 @@ const to = /* @__PURE__ */ w(ps, [["__scopeId", "data-v-c92a6639"]]), vs = ["med
|
|
|
1498
1502
|
ref: n,
|
|
1499
1503
|
src: c.src ?? He,
|
|
1500
1504
|
onError: a
|
|
1501
|
-
}, null, 42,
|
|
1505
|
+
}, null, 42, gs)
|
|
1502
1506
|
], 6));
|
|
1503
1507
|
}
|
|
1504
|
-
}),
|
|
1508
|
+
}), _s = /* @__PURE__ */ C({
|
|
1505
1509
|
__name: "TideImageBackground",
|
|
1506
1510
|
props: {
|
|
1507
1511
|
alt: { default: "" },
|
|
@@ -1511,10 +1515,10 @@ const to = /* @__PURE__ */ w(ps, [["__scopeId", "data-v-c92a6639"]]), vs = ["med
|
|
|
1511
1515
|
},
|
|
1512
1516
|
setup(i) {
|
|
1513
1517
|
const s = i;
|
|
1514
|
-
return (o, n) => (E(),
|
|
1518
|
+
return (o, n) => (E(), T("div", {
|
|
1515
1519
|
class: d([t(e).POSITION.RELATIVE, t(e).OVERFLOW.XY.HIDDEN, t(e).ISOLATION.ISOLATE])
|
|
1516
1520
|
}, [
|
|
1517
|
-
|
|
1521
|
+
A("div", {
|
|
1518
1522
|
class: d([
|
|
1519
1523
|
t(e).POSITION.ABSOLUTE,
|
|
1520
1524
|
t(e).HEIGHT.FULL,
|
|
@@ -1524,7 +1528,7 @@ const to = /* @__PURE__ */ w(ps, [["__scopeId", "data-v-c92a6639"]]), vs = ["med
|
|
|
1524
1528
|
t(e).AXIS2.CENTER
|
|
1525
1529
|
])
|
|
1526
1530
|
}, [
|
|
1527
|
-
x(
|
|
1531
|
+
x(ms, {
|
|
1528
1532
|
class: d(["tide-image-background", t(e).WIDTH.FULL, t(e).HEIGHT.FULL]),
|
|
1529
1533
|
"is-lazy": s.isLazy,
|
|
1530
1534
|
sources: s.sources,
|
|
@@ -1536,17 +1540,17 @@ const to = /* @__PURE__ */ w(ps, [["__scopeId", "data-v-c92a6639"]]), vs = ["med
|
|
|
1536
1540
|
], 2));
|
|
1537
1541
|
}
|
|
1538
1542
|
});
|
|
1539
|
-
const
|
|
1543
|
+
const oo = /* @__PURE__ */ w(_s, [["__scopeId", "data-v-5875300e"]]), Fs = {
|
|
1540
1544
|
key: 0,
|
|
1541
1545
|
class: /* @__PURE__ */ d(["tide-indicator-label"])
|
|
1542
|
-
},
|
|
1546
|
+
}, Ds = /* @__PURE__ */ C({
|
|
1543
1547
|
__name: "TideIndicator",
|
|
1544
1548
|
props: {
|
|
1545
1549
|
label: { default: void 0 }
|
|
1546
1550
|
},
|
|
1547
1551
|
setup(i) {
|
|
1548
1552
|
const s = i;
|
|
1549
|
-
return (o, n) => (E(),
|
|
1553
|
+
return (o, n) => (E(), T("div", {
|
|
1550
1554
|
class: d([
|
|
1551
1555
|
"tide-indicator",
|
|
1552
1556
|
s.label ? "" : "dot",
|
|
@@ -1558,11 +1562,11 @@ const so = /* @__PURE__ */ w(gs, [["__scopeId", "data-v-5875300e"]]), ms = {
|
|
|
1558
1562
|
s.label ? [t(e).POSITION.RELATIVE, t(e).FONT.ROLE.LABEL_3, t(e).FONT.COLOR.SURFACE.INVERSE] : [t(e).BORDER.FULL.ONE]
|
|
1559
1563
|
])
|
|
1560
1564
|
}, [
|
|
1561
|
-
s.label ? (E(),
|
|
1565
|
+
s.label ? (E(), T("div", Fs, h(s.label), 1)) : S("", !0)
|
|
1562
1566
|
], 2));
|
|
1563
1567
|
}
|
|
1564
1568
|
});
|
|
1565
|
-
const
|
|
1569
|
+
const no = /* @__PURE__ */ w(Ds, [["__scopeId", "data-v-d402ac82"]]), Ss = ["checked", "disabled", "name", "id"], hs = ["for"], ys = /* @__PURE__ */ C({
|
|
1566
1570
|
__name: "TideInputCheckbox",
|
|
1567
1571
|
props: {
|
|
1568
1572
|
checked: { type: Boolean, default: !1 },
|
|
@@ -1576,7 +1580,7 @@ const io = /* @__PURE__ */ w(_s, [["__scopeId", "data-v-d402ac82"]]), Fs = ["che
|
|
|
1576
1580
|
},
|
|
1577
1581
|
setup(i) {
|
|
1578
1582
|
const s = i, o = P(() => s.checked || s.indeterminate);
|
|
1579
|
-
return (n, a) => (E(),
|
|
1583
|
+
return (n, a) => (E(), T("div", {
|
|
1580
1584
|
class: d([
|
|
1581
1585
|
"tide-input-checkbox",
|
|
1582
1586
|
t(e).DISPLAY.FLEX,
|
|
@@ -1586,7 +1590,7 @@ const io = /* @__PURE__ */ w(_s, [["__scopeId", "data-v-d402ac82"]]), Fs = ["che
|
|
|
1586
1590
|
n.disabled ? ["disabled", t(e).POINTER_EVENTS.OFF] : t(e).CURSOR.POINTER
|
|
1587
1591
|
])
|
|
1588
1592
|
}, [
|
|
1589
|
-
|
|
1593
|
+
A("input", {
|
|
1590
1594
|
checked: o.value,
|
|
1591
1595
|
class: d([t(e).DISPLAY.NONE]),
|
|
1592
1596
|
disabled: s.disabled,
|
|
@@ -1596,8 +1600,8 @@ const io = /* @__PURE__ */ w(_s, [["__scopeId", "data-v-d402ac82"]]), Fs = ["che
|
|
|
1596
1600
|
}, ["prevent"])),
|
|
1597
1601
|
id: s.inputId,
|
|
1598
1602
|
type: "checkbox"
|
|
1599
|
-
}, null, 10,
|
|
1600
|
-
|
|
1603
|
+
}, null, 10, Ss),
|
|
1604
|
+
A("div", {
|
|
1601
1605
|
class: d([
|
|
1602
1606
|
"tide-input-checkbox-custom",
|
|
1603
1607
|
t(e).POSITION.RELATIVE,
|
|
@@ -1619,7 +1623,7 @@ const io = /* @__PURE__ */ w(_s, [["__scopeId", "data-v-d402ac82"]]), Fs = ["che
|
|
|
1619
1623
|
size: t(W).SMALL
|
|
1620
1624
|
}, null, 8, ["class", "icon", "size"])) : S("", !0)
|
|
1621
1625
|
], 2),
|
|
1622
|
-
n.label ? (E(),
|
|
1626
|
+
n.label ? (E(), T("label", {
|
|
1623
1627
|
key: 0,
|
|
1624
1628
|
class: d([
|
|
1625
1629
|
t(e).DISPLAY.FLEX,
|
|
@@ -1631,16 +1635,16 @@ const io = /* @__PURE__ */ w(_s, [["__scopeId", "data-v-d402ac82"]]), Fs = ["che
|
|
|
1631
1635
|
onClick: a[1] || (a[1] = De(() => {
|
|
1632
1636
|
}, ["prevent"]))
|
|
1633
1637
|
}, [
|
|
1634
|
-
|
|
1635
|
-
s.number ? (E(),
|
|
1638
|
+
A("span", null, h(n.label), 1),
|
|
1639
|
+
s.number ? (E(), T("span", {
|
|
1636
1640
|
key: 0,
|
|
1637
1641
|
class: d([t(e).FONT.COLOR.SURFACE.VARIANT])
|
|
1638
1642
|
}, " (" + h(t(ke)(s.number)) + ") ", 3)) : S("", !0)
|
|
1639
|
-
], 10,
|
|
1643
|
+
], 10, hs)) : S("", !0)
|
|
1640
1644
|
], 2));
|
|
1641
1645
|
}
|
|
1642
1646
|
});
|
|
1643
|
-
const
|
|
1647
|
+
const ao = /* @__PURE__ */ w(ys, [["__scopeId", "data-v-4e880909"]]), Cs = ["checked", "id"], Us = ["for"], Ps = /* @__PURE__ */ C({
|
|
1644
1648
|
__name: "TideInputRadio",
|
|
1645
1649
|
props: {
|
|
1646
1650
|
checked: { type: Boolean, default: !1 },
|
|
@@ -1657,7 +1661,7 @@ const oo = /* @__PURE__ */ w(Ss, [["__scopeId", "data-v-4e880909"]]), hs = ["che
|
|
|
1657
1661
|
(n, a) => {
|
|
1658
1662
|
(n !== a || n !== o.value) && (o.value = n);
|
|
1659
1663
|
}
|
|
1660
|
-
), (n, a) => (E(),
|
|
1664
|
+
), (n, a) => (E(), T("div", {
|
|
1661
1665
|
class: d([
|
|
1662
1666
|
"tide-input-radio",
|
|
1663
1667
|
t(e).DISPLAY.FLEX,
|
|
@@ -1667,15 +1671,15 @@ const oo = /* @__PURE__ */ w(Ss, [["__scopeId", "data-v-4e880909"]]), hs = ["che
|
|
|
1667
1671
|
s.disabled && "disabled"
|
|
1668
1672
|
])
|
|
1669
1673
|
}, [
|
|
1670
|
-
|
|
1674
|
+
A("input", {
|
|
1671
1675
|
checked: o.value,
|
|
1672
1676
|
class: d([t(e).DISPLAY.NONE]),
|
|
1673
1677
|
id: s.inputId,
|
|
1674
1678
|
name: "",
|
|
1675
1679
|
type: "radio",
|
|
1676
1680
|
value: ""
|
|
1677
|
-
}, null, 10,
|
|
1678
|
-
|
|
1681
|
+
}, null, 10, Cs),
|
|
1682
|
+
A("div", {
|
|
1679
1683
|
class: d([
|
|
1680
1684
|
"tide-input-radio-custom",
|
|
1681
1685
|
t(e).POSITION.RELATIVE,
|
|
@@ -1691,30 +1695,30 @@ const oo = /* @__PURE__ */ w(Ss, [["__scopeId", "data-v-4e880909"]]), hs = ["che
|
|
|
1691
1695
|
o.value && "checked"
|
|
1692
1696
|
])
|
|
1693
1697
|
}, [
|
|
1694
|
-
|
|
1698
|
+
A("div", {
|
|
1695
1699
|
class: d(["tide-input-radio-check", t(e).BORDER.RADIUS.FULL, s.checked && t(e).BG.SECONDARY])
|
|
1696
1700
|
}, null, 2)
|
|
1697
1701
|
], 2),
|
|
1698
|
-
|
|
1702
|
+
A("label", {
|
|
1699
1703
|
class: d([t(e).FONT.ROLE.BODY_1, t(e).CURSOR.POINTER, t(e).POINTER_EVENTS.ON]),
|
|
1700
1704
|
for: s.inputId
|
|
1701
|
-
}, h(s.label), 11,
|
|
1705
|
+
}, h(s.label), 11, Us)
|
|
1702
1706
|
], 2));
|
|
1703
1707
|
}
|
|
1704
1708
|
});
|
|
1705
|
-
const
|
|
1709
|
+
const ro = /* @__PURE__ */ w(Ps, [["__scopeId", "data-v-4fd02dd8"]]), Ye = "Please enter a valid value.", bs = {
|
|
1706
1710
|
message: "",
|
|
1707
1711
|
valid: !0
|
|
1708
1712
|
}, pe = (i) => (s) => {
|
|
1709
|
-
let o =
|
|
1713
|
+
let o = bs;
|
|
1710
1714
|
return s.trim().match(i) || (o = {
|
|
1711
1715
|
message: Ye,
|
|
1712
1716
|
valid: !1
|
|
1713
1717
|
}), o;
|
|
1714
|
-
}, Ve = (i, s) => typeof i == "string" && i.length > 0 ? i : typeof s == "string" && s.length > 0 ? s : Ye, $e = (i, s) => i !== !1 || s !== !1,
|
|
1718
|
+
}, Ve = (i, s) => typeof i == "string" && i.length > 0 ? i : typeof s == "string" && s.length > 0 ? s : Ye, $e = (i, s) => i !== !1 || s !== !1, Bs = ({ maxlength: i, minlength: s, required: o, value: n }) => {
|
|
1715
1719
|
const a = n.length === 0 && !o, c = i && n.length > i;
|
|
1716
1720
|
return !(!a && s && n.length < s) && !c;
|
|
1717
|
-
},
|
|
1721
|
+
}, At = ({
|
|
1718
1722
|
error: i,
|
|
1719
1723
|
errorFromProps: s,
|
|
1720
1724
|
maxlength: o,
|
|
@@ -1724,11 +1728,11 @@ const no = /* @__PURE__ */ w(Cs, [["__scopeId", "data-v-4fd02dd8"]]), Ye = "Plea
|
|
|
1724
1728
|
value: r
|
|
1725
1729
|
}) => {
|
|
1726
1730
|
if (i.value = s || !1, !i.value && c) {
|
|
1727
|
-
const l =
|
|
1731
|
+
const l = Hs((r == null ? void 0 : r.value) || "", c);
|
|
1728
1732
|
l.valid || (i.value = l.message);
|
|
1729
1733
|
}
|
|
1730
1734
|
if (!i.value && (o || n)) {
|
|
1731
|
-
const l =
|
|
1735
|
+
const l = Gs({
|
|
1732
1736
|
maxlength: o,
|
|
1733
1737
|
minlength: n,
|
|
1734
1738
|
required: a,
|
|
@@ -1736,7 +1740,7 @@ const no = /* @__PURE__ */ w(Cs, [["__scopeId", "data-v-4fd02dd8"]]), Ye = "Plea
|
|
|
1736
1740
|
});
|
|
1737
1741
|
l.valid || (i.value = l.message);
|
|
1738
1742
|
}
|
|
1739
|
-
},
|
|
1743
|
+
}, Gs = ({
|
|
1740
1744
|
maxlength: i,
|
|
1741
1745
|
minlength: s,
|
|
1742
1746
|
required: o = !1,
|
|
@@ -1746,14 +1750,14 @@ const no = /* @__PURE__ */ w(Cs, [["__scopeId", "data-v-4fd02dd8"]]), Ye = "Plea
|
|
|
1746
1750
|
message: "",
|
|
1747
1751
|
valid: !0
|
|
1748
1752
|
};
|
|
1749
|
-
return a.valid =
|
|
1753
|
+
return a.valid = Bs({
|
|
1750
1754
|
maxlength: i,
|
|
1751
1755
|
minlength: s,
|
|
1752
1756
|
required: o,
|
|
1753
1757
|
value: n
|
|
1754
1758
|
}), a.valid || (a.message = Ye, i && s ? a.message = `Please enter a value between ${s} and ${i} characters in length.` : i ? a.message = `Please enter a value no more than ${i} characters in length.` : s && (a.message = `Please enter a value no less than ${s} characters in length.`)), a;
|
|
1755
1759
|
};
|
|
1756
|
-
function
|
|
1760
|
+
function Hs(i, s) {
|
|
1757
1761
|
for (const o of s) {
|
|
1758
1762
|
const n = o(i);
|
|
1759
1763
|
if (!n.valid)
|
|
@@ -1764,7 +1768,7 @@ function Bs(i, s) {
|
|
|
1764
1768
|
valid: !0
|
|
1765
1769
|
};
|
|
1766
1770
|
}
|
|
1767
|
-
const
|
|
1771
|
+
const ws = ["for"], Ms = ["disabled", "name", "required", "id"], xs = ["label"], Ws = ["value"], Xs = ["selected", "value"], ks = ["selected", "value"], Ys = /* @__PURE__ */ C({
|
|
1768
1772
|
__name: "TideInputSelect",
|
|
1769
1773
|
props: {
|
|
1770
1774
|
inputId: { default: void 0 },
|
|
@@ -1779,7 +1783,7 @@ const Gs = ["for"], Hs = ["disabled", "name", "required", "id"], ws = ["label"],
|
|
|
1779
1783
|
value: { default: void 0 }
|
|
1780
1784
|
},
|
|
1781
1785
|
setup(i, { expose: s }) {
|
|
1782
|
-
const o = i, n = D(o.error), a = D(!1), c = D(null), r = D(o.required), l = D(o.value), u = P(() => Ve(o.error, n.value)), O = P(() => o.required ? `${o.label} *` : o.label), R = P(() => o.required && !l.value || $e(n.value, o.error)), I = P(() => a.value || !v.value), v = P(() => l.value === void 0),
|
|
1786
|
+
const o = i, n = D(o.error), a = D(!1), c = D(null), r = D(o.required), l = D(o.value), u = P(() => Ve(o.error, n.value)), O = P(() => o.required ? `${o.label} *` : o.label), R = P(() => o.required && !l.value || $e(n.value, o.error)), I = P(() => a.value || !v.value), v = P(() => l.value === void 0), L = () => {
|
|
1783
1787
|
var N;
|
|
1784
1788
|
const p = new MouseEvent("mousedown");
|
|
1785
1789
|
(N = c == null ? void 0 : c.value) == null || N.dispatchEvent(p);
|
|
@@ -1793,7 +1797,7 @@ const Gs = ["for"], Hs = ["disabled", "name", "required", "id"], ws = ["label"],
|
|
|
1793
1797
|
(p, N) => {
|
|
1794
1798
|
(p !== N || p !== l.value) && (l.value = p);
|
|
1795
1799
|
}
|
|
1796
|
-
), s({ error: n, value: l }), (p, N) => (E(),
|
|
1800
|
+
), s({ error: n, value: l }), (p, N) => (E(), T("div", {
|
|
1797
1801
|
class: d([
|
|
1798
1802
|
"tide-input-select",
|
|
1799
1803
|
t(e).DISPLAY.FLEX,
|
|
@@ -1803,7 +1807,7 @@ const Gs = ["for"], Hs = ["disabled", "name", "required", "id"], ws = ["label"],
|
|
|
1803
1807
|
R.value && "error"
|
|
1804
1808
|
])
|
|
1805
1809
|
}, [
|
|
1806
|
-
|
|
1810
|
+
A("div", {
|
|
1807
1811
|
class: d([
|
|
1808
1812
|
"tide-input-border",
|
|
1809
1813
|
t(e).POSITION.RELATIVE,
|
|
@@ -1815,12 +1819,12 @@ const Gs = ["for"], Hs = ["disabled", "name", "required", "id"], ws = ["label"],
|
|
|
1815
1819
|
o.disabled ? t(e).CURSOR.NOT_ALLOWED : "",
|
|
1816
1820
|
t(e).OVERFLOW.XY.HIDDEN
|
|
1817
1821
|
]),
|
|
1818
|
-
onClick:
|
|
1822
|
+
onClick: L
|
|
1819
1823
|
}, [
|
|
1820
|
-
|
|
1824
|
+
A("div", {
|
|
1821
1825
|
class: d([t(e).DISPLAY.FLEX, t(e).FLEX.DIRECTION.COLUMN, t(e).WIDTH.FULL])
|
|
1822
1826
|
}, [
|
|
1823
|
-
p.label ? (E(),
|
|
1827
|
+
p.label ? (E(), T("label", {
|
|
1824
1828
|
key: 0,
|
|
1825
1829
|
class: d([
|
|
1826
1830
|
I.value ? ["minilabel", t(e).FONT.ROLE.LABEL_3] : t(e).FONT.ROLE.LABEL_1,
|
|
@@ -1832,8 +1836,8 @@ const Gs = ["for"], Hs = ["disabled", "name", "required", "id"], ws = ["label"],
|
|
|
1832
1836
|
t(e).POINTER_EVENTS.OFF
|
|
1833
1837
|
]),
|
|
1834
1838
|
for: o.inputId
|
|
1835
|
-
}, h(O.value), 11,
|
|
1836
|
-
Ce(
|
|
1839
|
+
}, h(O.value), 11, ws)) : S("", !0),
|
|
1840
|
+
Ce(A("select", {
|
|
1837
1841
|
class: d([
|
|
1838
1842
|
t(e).PADDING.BOTTOM.HALF,
|
|
1839
1843
|
t(e).PADDING.X.ONE,
|
|
@@ -1851,31 +1855,31 @@ const Gs = ["for"], Hs = ["disabled", "name", "required", "id"], ws = ["label"],
|
|
|
1851
1855
|
id: o.inputId,
|
|
1852
1856
|
"onUpdate:modelValue": N[0] || (N[0] = (f) => l.value = f)
|
|
1853
1857
|
}, [
|
|
1854
|
-
(E(!0),
|
|
1855
|
-
f.options ? (E(),
|
|
1858
|
+
(E(!0), T(q, null, oe(o.optgroups, (f) => (E(), T(q, null, [
|
|
1859
|
+
f.options ? (E(), T("optgroup", {
|
|
1856
1860
|
class: d([t(e).WIDTH.FULL, t(e).BG.SURFACE.DEFAULT]),
|
|
1857
1861
|
key: f.label,
|
|
1858
1862
|
label: f.label
|
|
1859
1863
|
}, [
|
|
1860
|
-
(E(!0),
|
|
1864
|
+
(E(!0), T(q, null, oe(f.options, (m) => (E(), T("option", {
|
|
1861
1865
|
class: d([t(e).WIDTH.FULL, t(e).BG.SURFACE.DEFAULT]),
|
|
1862
1866
|
key: m.value,
|
|
1863
1867
|
value: m.value
|
|
1864
|
-
}, h(m.label), 11,
|
|
1865
|
-
], 10,
|
|
1868
|
+
}, h(m.label), 11, Ws))), 128))
|
|
1869
|
+
], 10, xs)) : (E(), T("option", {
|
|
1866
1870
|
class: d([t(e).WIDTH.FULL, t(e).BG.SURFACE.DEFAULT]),
|
|
1867
1871
|
key: f.value,
|
|
1868
1872
|
selected: l.value === f.value ? !0 : void 0,
|
|
1869
1873
|
value: f.value
|
|
1870
|
-
}, h(f.label), 11,
|
|
1874
|
+
}, h(f.label), 11, Xs))
|
|
1871
1875
|
], 64))), 256)),
|
|
1872
|
-
(E(!0),
|
|
1876
|
+
(E(!0), T(q, null, oe(p.options, (f) => (E(), T("option", {
|
|
1873
1877
|
class: d([t(e).WIDTH.FULL, t(e).BG.SURFACE.DEFAULT]),
|
|
1874
1878
|
key: f.value,
|
|
1875
1879
|
selected: l.value === f.value ? !0 : void 0,
|
|
1876
1880
|
value: f.value
|
|
1877
|
-
}, h(f.label), 11,
|
|
1878
|
-
], 42,
|
|
1881
|
+
}, h(f.label), 11, ks))), 128))
|
|
1882
|
+
], 42, Ms), [
|
|
1879
1883
|
[Bt, l.value]
|
|
1880
1884
|
])
|
|
1881
1885
|
], 2),
|
|
@@ -1885,7 +1889,7 @@ const Gs = ["for"], Hs = ["disabled", "name", "required", "id"], ws = ["label"],
|
|
|
1885
1889
|
size: t(W).SMALL
|
|
1886
1890
|
}, null, 8, ["class", "icon", "size"])
|
|
1887
1891
|
], 2),
|
|
1888
|
-
o.supportingText || R.value ? (E(),
|
|
1892
|
+
o.supportingText || R.value ? (E(), T("div", {
|
|
1889
1893
|
key: 0,
|
|
1890
1894
|
class: d([t(e).DISPLAY.FLEX, t(e).AXIS2.CENTER, t(e).GAP.QUARTER])
|
|
1891
1895
|
}, [
|
|
@@ -1895,14 +1899,14 @@ const Gs = ["for"], Hs = ["disabled", "name", "required", "id"], ws = ["label"],
|
|
|
1895
1899
|
icon: t(b).ERROR,
|
|
1896
1900
|
size: t(W).SMALL
|
|
1897
1901
|
}, null, 8, ["icon", "size"])) : S("", !0),
|
|
1898
|
-
|
|
1902
|
+
A("div", {
|
|
1899
1903
|
class: d([t(e).FONT.ROLE.LABEL_3])
|
|
1900
1904
|
}, h(R.value ? u.value : o.supportingText), 3)
|
|
1901
1905
|
], 2)) : S("", !0)
|
|
1902
1906
|
], 2));
|
|
1903
1907
|
}
|
|
1904
1908
|
});
|
|
1905
|
-
const
|
|
1909
|
+
const lo = /* @__PURE__ */ w(Ys, [["__scopeId", "data-v-2da267e1"]]), ve = {
|
|
1906
1910
|
DATE: "date",
|
|
1907
1911
|
DATETIME_LOCAL: "datetime-local",
|
|
1908
1912
|
EMAIL: "email",
|
|
@@ -1915,7 +1919,7 @@ const ao = /* @__PURE__ */ w(Xs, [["__scopeId", "data-v-2da267e1"]]), ve = {
|
|
|
1915
1919
|
TIME: "time",
|
|
1916
1920
|
URL: "url",
|
|
1917
1921
|
WEEK: "week"
|
|
1918
|
-
},
|
|
1922
|
+
}, Vs = ["for"], $s = ["autocomplete", "data-track", "disabled", "maxlength", "minlength", "name", "required", "type", "id"], Ks = /* @__PURE__ */ C({
|
|
1919
1923
|
__name: "TideInputText",
|
|
1920
1924
|
props: {
|
|
1921
1925
|
autocomplete: { type: Boolean, default: !1 },
|
|
@@ -1941,7 +1945,7 @@ const ao = /* @__PURE__ */ w(Xs, [["__scopeId", "data-v-2da267e1"]]), ve = {
|
|
|
1941
1945
|
setup(i, { expose: s }) {
|
|
1942
1946
|
const o = i, n = D(o.error), a = D(!1), c = D(null), r = D(!1), l = D(o.value), u = P(() => Ve(o.error, n.value)), O = P(() => o.required && o.label ? `${o.label} *` : o.label), R = P(() => o.hasClear && l.value), I = P(
|
|
1943
1947
|
() => o.required && l.value !== void 0 && !l.value || $e(n.value, o.error)
|
|
1944
|
-
), v = P(() => a.value || !
|
|
1948
|
+
), v = P(() => a.value || !L.value), L = P(() => l.value === "" || l.value === void 0), g = P(
|
|
1945
1949
|
() => o.type === ve.PASSWORD && r.value === !0 ? ve.TEXT : o.type
|
|
1946
1950
|
), _ = () => {
|
|
1947
1951
|
var F;
|
|
@@ -1957,7 +1961,7 @@ const ao = /* @__PURE__ */ w(Xs, [["__scopeId", "data-v-2da267e1"]]), ve = {
|
|
|
1957
1961
|
l.value = y ? o.transformValue(y) : "";
|
|
1958
1962
|
}
|
|
1959
1963
|
}, m = () => {
|
|
1960
|
-
|
|
1964
|
+
At({
|
|
1961
1965
|
error: n,
|
|
1962
1966
|
errorFromProps: o.error,
|
|
1963
1967
|
maxlength: o.maxlength,
|
|
@@ -1979,7 +1983,7 @@ const ao = /* @__PURE__ */ w(Xs, [["__scopeId", "data-v-2da267e1"]]), ve = {
|
|
|
1979
1983
|
required: o.required,
|
|
1980
1984
|
updateValue: U,
|
|
1981
1985
|
value: l
|
|
1982
|
-
}), (F, G) => (E(),
|
|
1986
|
+
}), (F, G) => (E(), T("div", {
|
|
1983
1987
|
class: d([
|
|
1984
1988
|
"tide-input-text",
|
|
1985
1989
|
t(e).DISPLAY.FLEX,
|
|
@@ -1989,7 +1993,7 @@ const ao = /* @__PURE__ */ w(Xs, [["__scopeId", "data-v-2da267e1"]]), ve = {
|
|
|
1989
1993
|
I.value && "error"
|
|
1990
1994
|
])
|
|
1991
1995
|
}, [
|
|
1992
|
-
|
|
1996
|
+
A("div", {
|
|
1993
1997
|
class: d([
|
|
1994
1998
|
"tide-input-border",
|
|
1995
1999
|
t(e).DISPLAY.FLEX,
|
|
@@ -2009,10 +2013,10 @@ const ao = /* @__PURE__ */ w(Xs, [["__scopeId", "data-v-2da267e1"]]), ve = {
|
|
|
2009
2013
|
icon: o.iconLeading,
|
|
2010
2014
|
size: t(W).SMALL
|
|
2011
2015
|
}, null, 8, ["class", "icon", "size"])) : S("", !0),
|
|
2012
|
-
|
|
2016
|
+
A("div", {
|
|
2013
2017
|
class: d([t(e).DISPLAY.FLEX, t(e).AXIS2.CENTER, t(e).GAP.QUARTER, t(e).WIDTH.FULL])
|
|
2014
2018
|
}, [
|
|
2015
|
-
o.prefix ? (E(),
|
|
2019
|
+
o.prefix ? (E(), T("div", {
|
|
2016
2020
|
key: 0,
|
|
2017
2021
|
class: d([
|
|
2018
2022
|
"tide-input-text-prefix",
|
|
@@ -2022,14 +2026,14 @@ const ao = /* @__PURE__ */ w(Xs, [["__scopeId", "data-v-2da267e1"]]), ve = {
|
|
|
2022
2026
|
v.value ? "" : "offset"
|
|
2023
2027
|
])
|
|
2024
2028
|
}, h(o.prefix), 3)) : S("", !0),
|
|
2025
|
-
|
|
2029
|
+
A("div", {
|
|
2026
2030
|
class: d([t(e).DISPLAY.FLEX, t(e).FLEX.DIRECTION.COLUMN, t(e).WIDTH.FULL]),
|
|
2027
2031
|
onClick: G[1] || (G[1] = De((y) => {
|
|
2028
2032
|
var V;
|
|
2029
2033
|
return (V = c.value) == null ? void 0 : V.focus();
|
|
2030
2034
|
}, ["prevent"]))
|
|
2031
2035
|
}, [
|
|
2032
|
-
F.label ? (E(),
|
|
2036
|
+
F.label ? (E(), T("label", {
|
|
2033
2037
|
key: 0,
|
|
2034
2038
|
class: d([
|
|
2035
2039
|
v.value ? ["minilabel", t(e).FONT.ROLE.LABEL_3] : t(e).FONT.ROLE.LABEL_1,
|
|
@@ -2038,8 +2042,8 @@ const ao = /* @__PURE__ */ w(Xs, [["__scopeId", "data-v-2da267e1"]]), ve = {
|
|
|
2038
2042
|
t(e).POINTER_EVENTS.OFF
|
|
2039
2043
|
]),
|
|
2040
2044
|
for: o.inputId
|
|
2041
|
-
}, h(O.value), 11,
|
|
2042
|
-
Ce(
|
|
2045
|
+
}, h(O.value), 11, Vs)) : S("", !0),
|
|
2046
|
+
Ce(A("input", {
|
|
2043
2047
|
autocomplete: F.autocomplete ? "on" : "off",
|
|
2044
2048
|
class: d([t(e).WIDTH.FULL, F.disabled && t(e).CURSOR.NOT_ALLOWED, t(e).FONT.ROLE.BODY_1]),
|
|
2045
2049
|
"data-track": o.dataTrack,
|
|
@@ -2057,11 +2061,11 @@ const ao = /* @__PURE__ */ w(Xs, [["__scopeId", "data-v-2da267e1"]]), ve = {
|
|
|
2057
2061
|
onInput: f,
|
|
2058
2062
|
id: o.inputId,
|
|
2059
2063
|
"onUpdate:modelValue": G[0] || (G[0] = (y) => l.value = y)
|
|
2060
|
-
}, null, 42,
|
|
2064
|
+
}, null, 42, $s), [
|
|
2061
2065
|
[Gt, l.value]
|
|
2062
2066
|
])
|
|
2063
2067
|
], 2),
|
|
2064
|
-
o.suffix ? (E(),
|
|
2068
|
+
o.suffix ? (E(), T("div", {
|
|
2065
2069
|
key: 1,
|
|
2066
2070
|
class: d([
|
|
2067
2071
|
"tide-input-text-suffix",
|
|
@@ -2086,7 +2090,7 @@ const ao = /* @__PURE__ */ w(Xs, [["__scopeId", "data-v-2da267e1"]]), ve = {
|
|
|
2086
2090
|
onClick: G[2] || (G[2] = (y) => r.value = !r.value)
|
|
2087
2091
|
}, null, 8, ["class", "icon", "size"])) : S("", !0)
|
|
2088
2092
|
], 2),
|
|
2089
|
-
o.supportingText || I.value ? (E(),
|
|
2093
|
+
o.supportingText || I.value ? (E(), T("div", {
|
|
2090
2094
|
key: 0,
|
|
2091
2095
|
class: d([t(e).DISPLAY.FLEX, t(e).AXIS2.CENTER, t(e).GAP.QUARTER])
|
|
2092
2096
|
}, [
|
|
@@ -2096,14 +2100,14 @@ const ao = /* @__PURE__ */ w(Xs, [["__scopeId", "data-v-2da267e1"]]), ve = {
|
|
|
2096
2100
|
icon: t(b).ERROR,
|
|
2097
2101
|
size: t(W).SMALL
|
|
2098
2102
|
}, null, 8, ["icon", "size"])) : S("", !0),
|
|
2099
|
-
|
|
2103
|
+
A("div", {
|
|
2100
2104
|
class: d([t(e).FONT.ROLE.LABEL_3])
|
|
2101
2105
|
}, h(I.value ? u.value : o.supportingText), 3)
|
|
2102
2106
|
], 2)) : S("", !0)
|
|
2103
2107
|
], 2));
|
|
2104
2108
|
}
|
|
2105
2109
|
});
|
|
2106
|
-
const
|
|
2110
|
+
const co = /* @__PURE__ */ w(Ks, [["__scopeId", "data-v-d369bda5"]]), zs = ["for"], Qs = ["data-track", "maxlength", "minlength", "name", "required", "rows", "id"], Zs = /* @__PURE__ */ C({
|
|
2107
2111
|
__name: "TideInputTextarea",
|
|
2108
2112
|
props: {
|
|
2109
2113
|
dataTrack: { default: "" },
|
|
@@ -2123,9 +2127,9 @@ const ro = /* @__PURE__ */ w(Vs, [["__scopeId", "data-v-d369bda5"]]), $s = ["for
|
|
|
2123
2127
|
() => o.required && r.value !== void 0 && !r.value || $e(n.value, o.error)
|
|
2124
2128
|
), R = P(() => a.value || !I.value), I = P(() => r.value === "" || r.value === void 0), v = () => {
|
|
2125
2129
|
a.value = !0;
|
|
2126
|
-
},
|
|
2130
|
+
}, L = () => {
|
|
2127
2131
|
a.value = !1, r.value || (r.value = "");
|
|
2128
|
-
}, g = () =>
|
|
2132
|
+
}, g = () => At({
|
|
2129
2133
|
error: n,
|
|
2130
2134
|
errorFromProps: o.error,
|
|
2131
2135
|
maxlength: o.maxlength,
|
|
@@ -2142,10 +2146,10 @@ const ro = /* @__PURE__ */ w(Vs, [["__scopeId", "data-v-d369bda5"]]), $s = ["for
|
|
|
2142
2146
|
error: n,
|
|
2143
2147
|
required: o.required,
|
|
2144
2148
|
value: r
|
|
2145
|
-
}), (_, p) => (E(),
|
|
2149
|
+
}), (_, p) => (E(), T("div", {
|
|
2146
2150
|
class: d(["tide-input-textarea", t(e).DISPLAY.FLEX, t(e).FLEX.DIRECTION.COLUMN, t(e).GAP.QUARTER, O.value && "error"])
|
|
2147
2151
|
}, [
|
|
2148
|
-
|
|
2152
|
+
A("div", {
|
|
2149
2153
|
class: d([
|
|
2150
2154
|
"tide-input-textarea-field",
|
|
2151
2155
|
t(e).GAP.HALF,
|
|
@@ -2157,7 +2161,7 @@ const ro = /* @__PURE__ */ w(Vs, [["__scopeId", "data-v-d369bda5"]]), $s = ["for
|
|
|
2157
2161
|
t(e).BG.SURFACE.DEFAULT
|
|
2158
2162
|
])
|
|
2159
2163
|
}, [
|
|
2160
|
-
_.label ? (E(),
|
|
2164
|
+
_.label ? (E(), T("label", {
|
|
2161
2165
|
key: 0,
|
|
2162
2166
|
class: d([
|
|
2163
2167
|
R.value ? ["minilabel", t(e).FONT.ROLE.LABEL_3] : t(e).FONT.ROLE.LABEL_1,
|
|
@@ -2167,8 +2171,8 @@ const ro = /* @__PURE__ */ w(Vs, [["__scopeId", "data-v-d369bda5"]]), $s = ["for
|
|
|
2167
2171
|
]),
|
|
2168
2172
|
for: o.inputId,
|
|
2169
2173
|
ref: "label"
|
|
2170
|
-
}, h(u.value), 11,
|
|
2171
|
-
Ce(
|
|
2174
|
+
}, h(u.value), 11, zs)) : S("", !0),
|
|
2175
|
+
Ce(A("textarea", {
|
|
2172
2176
|
class: d([t(e).WIDTH.FULL, t(e).FONT.ROLE.BODY_1]),
|
|
2173
2177
|
"data-track": o.dataTrack,
|
|
2174
2178
|
maxlength: o.maxlength,
|
|
@@ -2180,14 +2184,14 @@ const ro = /* @__PURE__ */ w(Vs, [["__scopeId", "data-v-d369bda5"]]), $s = ["for
|
|
|
2180
2184
|
rows: o.rows,
|
|
2181
2185
|
onChange: g,
|
|
2182
2186
|
onFocus: v,
|
|
2183
|
-
onFocusout:
|
|
2187
|
+
onFocusout: L,
|
|
2184
2188
|
id: o.inputId,
|
|
2185
2189
|
"onUpdate:modelValue": p[0] || (p[0] = (N) => r.value = N)
|
|
2186
|
-
}, null, 42,
|
|
2190
|
+
}, null, 42, Qs), [
|
|
2187
2191
|
[Ht, r.value]
|
|
2188
2192
|
])
|
|
2189
2193
|
], 2),
|
|
2190
|
-
o.supportingText || O.value ? (E(),
|
|
2194
|
+
o.supportingText || O.value ? (E(), T("div", {
|
|
2191
2195
|
key: 0,
|
|
2192
2196
|
class: d([t(e).DISPLAY.FLEX, t(e).AXIS2.CENTER, t(e).GAP.QUARTER])
|
|
2193
2197
|
}, [
|
|
@@ -2196,14 +2200,14 @@ const ro = /* @__PURE__ */ w(Vs, [["__scopeId", "data-v-d369bda5"]]), $s = ["for
|
|
|
2196
2200
|
icon: t(b).ERROR,
|
|
2197
2201
|
size: t(W).SMALL
|
|
2198
2202
|
}, null, 8, ["icon", "size"])) : S("", !0),
|
|
2199
|
-
|
|
2203
|
+
A("div", {
|
|
2200
2204
|
class: d([t(e).FONT.ROLE.LABEL_3])
|
|
2201
2205
|
}, h(O.value ? l.value : o.supportingText), 3)
|
|
2202
2206
|
], 2)) : S("", !0)
|
|
2203
2207
|
], 2));
|
|
2204
2208
|
}
|
|
2205
2209
|
});
|
|
2206
|
-
const
|
|
2210
|
+
const uo = /* @__PURE__ */ w(Zs, [["__scopeId", "data-v-2105ab99"]]), Eo = /* @__PURE__ */ C({
|
|
2207
2211
|
__name: "TideLink",
|
|
2208
2212
|
props: {
|
|
2209
2213
|
element: { default: M.LINK },
|
|
@@ -2226,7 +2230,7 @@ const lo = /* @__PURE__ */ w(zs, [["__scopeId", "data-v-2105ab99"]]), co = /* @_
|
|
|
2226
2230
|
class: d([t(e).DISPLAY.INLINE_BLOCK, t(e).ALIGN.Y.MIDDLE, t(e).MARGIN.RIGHT.QUARTER]),
|
|
2227
2231
|
icon: s.iconLeading
|
|
2228
2232
|
}, null, 8, ["class", "icon"])) : S("", !0),
|
|
2229
|
-
|
|
2233
|
+
A("span", {
|
|
2230
2234
|
class: d([t(e).ALIGN.Y.MIDDLE])
|
|
2231
2235
|
}, h(s.label), 3),
|
|
2232
2236
|
s.iconTrailing ? (E(), B(H, {
|
|
@@ -2238,34 +2242,34 @@ const lo = /* @__PURE__ */ w(zs, [["__scopeId", "data-v-2105ab99"]]), co = /* @_
|
|
|
2238
2242
|
_: 1
|
|
2239
2243
|
}, 8, ["class", "href", "target"]));
|
|
2240
2244
|
}
|
|
2241
|
-
}),
|
|
2245
|
+
}), qs = {
|
|
2242
2246
|
SM: "sm",
|
|
2243
2247
|
MD: "md",
|
|
2244
2248
|
LG: "lg",
|
|
2245
2249
|
XL: "xl"
|
|
2246
|
-
},
|
|
2250
|
+
}, Oo = {
|
|
2247
2251
|
SM: 768,
|
|
2248
2252
|
MD: 992,
|
|
2249
2253
|
LG: 1232,
|
|
2250
2254
|
XL: 1920
|
|
2251
|
-
},
|
|
2255
|
+
}, js = async (i) => {
|
|
2252
2256
|
const s = document.body;
|
|
2253
2257
|
if (i) {
|
|
2254
2258
|
if (!s.dataset.scrollLockY) {
|
|
2255
2259
|
const o = window.scrollY;
|
|
2256
2260
|
s.dataset.scrollLockY = o.toString(), s.style.setProperty("--saved-scroll-y", `${o}px`), s.style.setProperty("inset", "0"), s.style.setProperty("margin-top", "calc(0px - var(--saved-scroll-y, 0px))"), s.style.setProperty("overflow-y", "scroll"), s.style.setProperty("position", "fixed");
|
|
2257
2261
|
}
|
|
2258
|
-
} else if (await
|
|
2262
|
+
} else if (await Tt(), !document.querySelector("dialog[open]")) {
|
|
2259
2263
|
const o = parseInt(s.dataset.scrollLockY || "0");
|
|
2260
2264
|
s.style.removeProperty("inset"), s.style.removeProperty("marginTop"), s.style.removeProperty("overflowY"), s.style.removeProperty("position"), s.style.removeProperty("--saved-scroll-y"), window.scrollTo({
|
|
2261
2265
|
behavior: "auto",
|
|
2262
2266
|
top: o
|
|
2263
2267
|
}), delete s.dataset.scrollLockY;
|
|
2264
2268
|
}
|
|
2265
|
-
}, Me = "tideTopLayer",
|
|
2269
|
+
}, Me = "tideTopLayer", Js = () => {
|
|
2266
2270
|
let i = document.getElementById(Me);
|
|
2267
2271
|
i || (i = document.createElement("div"), i.id = Me, document.body.appendChild(i)), i.style.isolation = "isolate";
|
|
2268
|
-
},
|
|
2272
|
+
}, ei = ["textContent"], ti = /* @__PURE__ */ C({
|
|
2269
2273
|
__name: "TideModal",
|
|
2270
2274
|
props: {
|
|
2271
2275
|
isBackButton: { type: Boolean, default: !1 },
|
|
@@ -2283,18 +2287,18 @@ const lo = /* @__PURE__ */ w(zs, [["__scopeId", "data-v-2105ab99"]]), co = /* @_
|
|
|
2283
2287
|
var u;
|
|
2284
2288
|
(u = a.value) == null || u.close();
|
|
2285
2289
|
}, l = () => {
|
|
2286
|
-
|
|
2290
|
+
Tt(() => {
|
|
2287
2291
|
n.value && (n.value.scrollTop = 0);
|
|
2288
2292
|
});
|
|
2289
2293
|
};
|
|
2290
2294
|
return K(
|
|
2291
2295
|
() => o.isOpen,
|
|
2292
2296
|
(u) => {
|
|
2293
|
-
a.value && (u ? (c(), l()) : r(),
|
|
2297
|
+
a.value && (u ? (c(), l()) : r(), js(u));
|
|
2294
2298
|
}
|
|
2295
2299
|
), We(() => {
|
|
2296
2300
|
o.isOpen && c();
|
|
2297
|
-
}), (u, O) => (E(),
|
|
2301
|
+
}), (u, O) => (E(), T("dialog", {
|
|
2298
2302
|
class: d(["tide-modal", t(e).BG.INITIAL, t(e).HEIGHT.FULL, t(e).WIDTH.FULL, t(e).OVERFLOW.XY.HIDDEN]),
|
|
2299
2303
|
ref_key: "modalDialog",
|
|
2300
2304
|
ref: a,
|
|
@@ -2302,7 +2306,7 @@ const lo = /* @__PURE__ */ w(zs, [["__scopeId", "data-v-2105ab99"]]), co = /* @_
|
|
|
2302
2306
|
onClick: O[1] || (O[1] = De((R) => s("close"), ["self"])),
|
|
2303
2307
|
onClose: O[2] || (O[2] = (R) => s("close"))
|
|
2304
2308
|
}, [
|
|
2305
|
-
|
|
2309
|
+
A("div", {
|
|
2306
2310
|
class: d([
|
|
2307
2311
|
"tide-modal-body",
|
|
2308
2312
|
t(e).BG.SURFACE.DEFAULT,
|
|
@@ -2315,10 +2319,10 @@ const lo = /* @__PURE__ */ w(zs, [["__scopeId", "data-v-2105ab99"]]), co = /* @_
|
|
|
2315
2319
|
t(e).SHADOW.TOP,
|
|
2316
2320
|
t(e).WIDTH.FULL,
|
|
2317
2321
|
t(e).WIDTH.MAX_FULL,
|
|
2318
|
-
t(e).withBreakpoint([t(e).SHADOW.BOTTOM], t(
|
|
2322
|
+
t(e).withBreakpoint([t(e).SHADOW.BOTTOM], t(qs).SM)
|
|
2319
2323
|
])
|
|
2320
2324
|
}, [
|
|
2321
|
-
|
|
2325
|
+
A("header", {
|
|
2322
2326
|
class: d([
|
|
2323
2327
|
"tide-modal-header",
|
|
2324
2328
|
t(e).DISPLAY.FLEX,
|
|
@@ -2336,10 +2340,10 @@ const lo = /* @__PURE__ */ w(zs, [["__scopeId", "data-v-2105ab99"]]), co = /* @_
|
|
|
2336
2340
|
onClick: O[0] || (O[0] = (R) => s("back")),
|
|
2337
2341
|
title: "Back"
|
|
2338
2342
|
}, null, 8, ["icon", "priority"])) : S("", !0),
|
|
2339
|
-
|
|
2343
|
+
A("div", {
|
|
2340
2344
|
class: d([t(e).FONT.ROLE.HEADLINE_2]),
|
|
2341
2345
|
textContent: h(u.title)
|
|
2342
|
-
}, null, 10,
|
|
2346
|
+
}, null, 10, ei),
|
|
2343
2347
|
u.isDismissible ? (E(), B(se, {
|
|
2344
2348
|
key: 1,
|
|
2345
2349
|
class: d([t(e).FLEX.GROW.OFF, t(e).FLEX.SHRINK.OFF, t(e).MARGIN.LEFT.AUTO]),
|
|
@@ -2348,7 +2352,7 @@ const lo = /* @__PURE__ */ w(zs, [["__scopeId", "data-v-2105ab99"]]), co = /* @_
|
|
|
2348
2352
|
onClick: r
|
|
2349
2353
|
}, null, 8, ["class", "icon", "priority"])) : S("", !0)
|
|
2350
2354
|
], 2),
|
|
2351
|
-
|
|
2355
|
+
A("div", {
|
|
2352
2356
|
class: d([
|
|
2353
2357
|
"tide-modal-content",
|
|
2354
2358
|
t(e).DISPLAY.GRID,
|
|
@@ -2362,7 +2366,7 @@ const lo = /* @__PURE__ */ w(zs, [["__scopeId", "data-v-2105ab99"]]), co = /* @_
|
|
|
2362
2366
|
}, [
|
|
2363
2367
|
k(u.$slots, "default", {}, void 0, !0)
|
|
2364
2368
|
], 2),
|
|
2365
|
-
u.$slots.footer ? (E(),
|
|
2369
|
+
u.$slots.footer ? (E(), T("footer", {
|
|
2366
2370
|
key: 0,
|
|
2367
2371
|
class: d(["tide-modal-footer", t(e).AXIS1.END, t(e).DISPLAY.FLEX, t(e).GAP.TWO, t(e).PADDING.Y.ONE, t(e).SHADOW.TOP])
|
|
2368
2372
|
}, [
|
|
@@ -2372,7 +2376,7 @@ const lo = /* @__PURE__ */ w(zs, [["__scopeId", "data-v-2105ab99"]]), co = /* @_
|
|
|
2372
2376
|
], 38));
|
|
2373
2377
|
}
|
|
2374
2378
|
});
|
|
2375
|
-
const
|
|
2379
|
+
const Ro = /* @__PURE__ */ w(ti, [["__scopeId", "data-v-b0e46dd4"]]), Io = /* @__PURE__ */ C({
|
|
2376
2380
|
__name: "TidePagination",
|
|
2377
2381
|
props: {
|
|
2378
2382
|
pageCurrent: { default: 1 },
|
|
@@ -2383,7 +2387,7 @@ const Eo = /* @__PURE__ */ w(Js, [["__scopeId", "data-v-b0e46dd4"]]), Oo = /* @_
|
|
|
2383
2387
|
const o = i, n = D(o.pageCurrent), a = P(() => new Array(o.pageTotal).fill("").map((r, l) => l + 1)), c = (r) => {
|
|
2384
2388
|
n.value = r, s("change", event, r);
|
|
2385
2389
|
};
|
|
2386
|
-
return (r, l) => (E(),
|
|
2390
|
+
return (r, l) => (E(), T("section", {
|
|
2387
2391
|
class: d(["tide-pagination", t(e).DISPLAY.FLEX, t(e).AXIS1.CENTER, t(e).AXIS2.CENTER, t(e).GAP.QUARTER, t(e).WIDTH.FULL])
|
|
2388
2392
|
}, [
|
|
2389
2393
|
x(se, {
|
|
@@ -2392,11 +2396,11 @@ const Eo = /* @__PURE__ */ w(Js, [["__scopeId", "data-v-b0e46dd4"]]), Oo = /* @_
|
|
|
2392
2396
|
priority: t($).QUATERNARY,
|
|
2393
2397
|
onClick: l[0] || (l[0] = (u) => c(n.value - 1))
|
|
2394
2398
|
}, null, 8, ["disabled", "icon", "priority"]),
|
|
2395
|
-
|
|
2399
|
+
A("ul", {
|
|
2396
2400
|
class: d([t(e).DISPLAY.FLEX, t(e).AXIS2.CENTER, t(e).GAP.QUARTER, t(e).LIST_BULLETS.OFF])
|
|
2397
2401
|
}, [
|
|
2398
|
-
(E(!0),
|
|
2399
|
-
x(
|
|
2402
|
+
(E(!0), T(q, null, oe(a.value, (u) => (E(), T("li", { key: u }, [
|
|
2403
|
+
x(rs, {
|
|
2400
2404
|
disabled: n.value === u,
|
|
2401
2405
|
label: u,
|
|
2402
2406
|
priority: t($).QUATERNARY,
|
|
@@ -2412,15 +2416,15 @@ const Eo = /* @__PURE__ */ w(Js, [["__scopeId", "data-v-b0e46dd4"]]), Oo = /* @_
|
|
|
2412
2416
|
}, null, 8, ["disabled", "icon", "priority"])
|
|
2413
2417
|
], 2));
|
|
2414
2418
|
}
|
|
2415
|
-
}),
|
|
2419
|
+
}), si = ["top", "right", "bottom", "left"], tt = ["start", "end"], st = /* @__PURE__ */ si.reduce((i, s) => i.concat(s, s + "-" + tt[0], s + "-" + tt[1]), []), Se = Math.min, re = Math.max, he = Math.round, Fe = Math.floor, j = (i) => ({
|
|
2416
2420
|
x: i,
|
|
2417
2421
|
y: i
|
|
2418
|
-
}),
|
|
2422
|
+
}), ii = {
|
|
2419
2423
|
left: "right",
|
|
2420
2424
|
right: "left",
|
|
2421
2425
|
bottom: "top",
|
|
2422
2426
|
top: "bottom"
|
|
2423
|
-
},
|
|
2427
|
+
}, oi = {
|
|
2424
2428
|
start: "end",
|
|
2425
2429
|
end: "start"
|
|
2426
2430
|
};
|
|
@@ -2448,19 +2452,19 @@ function Pe(i) {
|
|
|
2448
2452
|
function vt(i) {
|
|
2449
2453
|
return Lt(Pe(i));
|
|
2450
2454
|
}
|
|
2451
|
-
function
|
|
2455
|
+
function ni(i, s, o) {
|
|
2452
2456
|
o === void 0 && (o = !1);
|
|
2453
2457
|
const n = ne(i), a = vt(i), c = pt(a);
|
|
2454
2458
|
let r = a === "x" ? n === (o ? "end" : "start") ? "right" : "left" : n === "start" ? "bottom" : "top";
|
|
2455
2459
|
return s.reference[c] > s.floating[c] && (r = ot(r)), [r, ot(r)];
|
|
2456
2460
|
}
|
|
2457
|
-
function
|
|
2458
|
-
return i.replace(/start|end/g, (s) =>
|
|
2461
|
+
function ai(i) {
|
|
2462
|
+
return i.replace(/start|end/g, (s) => oi[s]);
|
|
2459
2463
|
}
|
|
2460
2464
|
function ot(i) {
|
|
2461
|
-
return i.replace(/left|right|bottom|top/g, (s) =>
|
|
2465
|
+
return i.replace(/left|right|bottom|top/g, (s) => ii[s]);
|
|
2462
2466
|
}
|
|
2463
|
-
function
|
|
2467
|
+
function ri(i) {
|
|
2464
2468
|
return {
|
|
2465
2469
|
top: 0,
|
|
2466
2470
|
right: 0,
|
|
@@ -2469,8 +2473,8 @@ function ni(i) {
|
|
|
2469
2473
|
...i
|
|
2470
2474
|
};
|
|
2471
2475
|
}
|
|
2472
|
-
function
|
|
2473
|
-
return typeof i != "number" ?
|
|
2476
|
+
function li(i) {
|
|
2477
|
+
return typeof i != "number" ? ri(i) : {
|
|
2474
2478
|
top: i,
|
|
2475
2479
|
right: i,
|
|
2476
2480
|
bottom: i,
|
|
@@ -2501,49 +2505,49 @@ function nt(i, s, o) {
|
|
|
2501
2505
|
floating: a
|
|
2502
2506
|
} = i;
|
|
2503
2507
|
const c = Pe(s), r = vt(s), l = pt(r), u = Ie(s), O = c === "y", R = n.x + n.width / 2 - a.width / 2, I = n.y + n.height / 2 - a.height / 2, v = n[l] / 2 - a[l] / 2;
|
|
2504
|
-
let
|
|
2508
|
+
let L;
|
|
2505
2509
|
switch (u) {
|
|
2506
2510
|
case "top":
|
|
2507
|
-
|
|
2511
|
+
L = {
|
|
2508
2512
|
x: R,
|
|
2509
2513
|
y: n.y - a.height
|
|
2510
2514
|
};
|
|
2511
2515
|
break;
|
|
2512
2516
|
case "bottom":
|
|
2513
|
-
|
|
2517
|
+
L = {
|
|
2514
2518
|
x: R,
|
|
2515
2519
|
y: n.y + n.height
|
|
2516
2520
|
};
|
|
2517
2521
|
break;
|
|
2518
2522
|
case "right":
|
|
2519
|
-
|
|
2523
|
+
L = {
|
|
2520
2524
|
x: n.x + n.width,
|
|
2521
2525
|
y: I
|
|
2522
2526
|
};
|
|
2523
2527
|
break;
|
|
2524
2528
|
case "left":
|
|
2525
|
-
|
|
2529
|
+
L = {
|
|
2526
2530
|
x: n.x - a.width,
|
|
2527
2531
|
y: I
|
|
2528
2532
|
};
|
|
2529
2533
|
break;
|
|
2530
2534
|
default:
|
|
2531
|
-
|
|
2535
|
+
L = {
|
|
2532
2536
|
x: n.x,
|
|
2533
2537
|
y: n.y
|
|
2534
2538
|
};
|
|
2535
2539
|
}
|
|
2536
2540
|
switch (ne(s)) {
|
|
2537
2541
|
case "start":
|
|
2538
|
-
|
|
2542
|
+
L[r] -= v * (o && O ? -1 : 1);
|
|
2539
2543
|
break;
|
|
2540
2544
|
case "end":
|
|
2541
|
-
|
|
2545
|
+
L[r] += v * (o && O ? -1 : 1);
|
|
2542
2546
|
break;
|
|
2543
2547
|
}
|
|
2544
|
-
return
|
|
2548
|
+
return L;
|
|
2545
2549
|
}
|
|
2546
|
-
const
|
|
2550
|
+
const ci = async (i, s, o) => {
|
|
2547
2551
|
const {
|
|
2548
2552
|
placement: n = "bottom",
|
|
2549
2553
|
strategy: a = "absolute",
|
|
@@ -2557,7 +2561,7 @@ const ri = async (i, s, o) => {
|
|
|
2557
2561
|
}), {
|
|
2558
2562
|
x: R,
|
|
2559
2563
|
y: I
|
|
2560
|
-
} = nt(O, n, u), v = n,
|
|
2564
|
+
} = nt(O, n, u), v = n, L = {}, g = 0;
|
|
2561
2565
|
for (let _ = 0; _ < l.length; _++) {
|
|
2562
2566
|
const {
|
|
2563
2567
|
name: p,
|
|
@@ -2573,7 +2577,7 @@ const ri = async (i, s, o) => {
|
|
|
2573
2577
|
initialPlacement: n,
|
|
2574
2578
|
placement: v,
|
|
2575
2579
|
strategy: a,
|
|
2576
|
-
middlewareData:
|
|
2580
|
+
middlewareData: L,
|
|
2577
2581
|
rects: O,
|
|
2578
2582
|
platform: r,
|
|
2579
2583
|
elements: {
|
|
@@ -2581,10 +2585,10 @@ const ri = async (i, s, o) => {
|
|
|
2581
2585
|
floating: s
|
|
2582
2586
|
}
|
|
2583
2587
|
});
|
|
2584
|
-
R = f ?? R, I = m ?? I,
|
|
2585
|
-
...
|
|
2588
|
+
R = f ?? R, I = m ?? I, L = {
|
|
2589
|
+
...L,
|
|
2586
2590
|
[p]: {
|
|
2587
|
-
...
|
|
2591
|
+
...L[p],
|
|
2588
2592
|
...U
|
|
2589
2593
|
}
|
|
2590
2594
|
}, F && g <= 50 && (g++, typeof F == "object" && (F.placement && (v = F.placement), F.rects && (O = F.rects === !0 ? await r.getElementRects({
|
|
@@ -2601,7 +2605,7 @@ const ri = async (i, s, o) => {
|
|
|
2601
2605
|
y: I,
|
|
2602
2606
|
placement: v,
|
|
2603
2607
|
strategy: a,
|
|
2604
|
-
middlewareData:
|
|
2608
|
+
middlewareData: L
|
|
2605
2609
|
};
|
|
2606
2610
|
};
|
|
2607
2611
|
async function ft(i, s) {
|
|
@@ -2619,8 +2623,8 @@ async function ft(i, s) {
|
|
|
2619
2623
|
rootBoundary: R = "viewport",
|
|
2620
2624
|
elementContext: I = "floating",
|
|
2621
2625
|
altBoundary: v = !1,
|
|
2622
|
-
padding:
|
|
2623
|
-
} = Ue(s, i), g =
|
|
2626
|
+
padding: L = 0
|
|
2627
|
+
} = Ue(s, i), g = li(L), p = l[v ? I === "floating" ? "reference" : "floating" : I], N = ye(await c.getClippingRect({
|
|
2624
2628
|
element: (o = await (c.isElement == null ? void 0 : c.isElement(p))) == null || o ? p : p.contextElement || await (c.getDocumentElement == null ? void 0 : c.getDocumentElement(l.floating)),
|
|
2625
2629
|
boundary: O,
|
|
2626
2630
|
rootBoundary: R,
|
|
@@ -2649,10 +2653,10 @@ async function ft(i, s) {
|
|
|
2649
2653
|
right: (F.right - N.right + g.right) / U.x
|
|
2650
2654
|
};
|
|
2651
2655
|
}
|
|
2652
|
-
function
|
|
2653
|
-
return (i ? [...o.filter((a) => ne(a) === i), ...o.filter((a) => ne(a) !== i)] : o.filter((a) => Ie(a) === a)).filter((a) => i ? ne(a) === i || (s ?
|
|
2656
|
+
function di(i, s, o) {
|
|
2657
|
+
return (i ? [...o.filter((a) => ne(a) === i), ...o.filter((a) => ne(a) !== i)] : o.filter((a) => Ie(a) === a)).filter((a) => i ? ne(a) === i || (s ? ai(a) !== a : !1) : !0);
|
|
2654
2658
|
}
|
|
2655
|
-
const
|
|
2659
|
+
const ui = function(i) {
|
|
2656
2660
|
return i === void 0 && (i = {}), {
|
|
2657
2661
|
name: "autoPlacement",
|
|
2658
2662
|
options: i,
|
|
@@ -2668,12 +2672,12 @@ const ci = function(i) {
|
|
|
2668
2672
|
crossAxis: R = !1,
|
|
2669
2673
|
alignment: I,
|
|
2670
2674
|
allowedPlacements: v = st,
|
|
2671
|
-
autoAlignment:
|
|
2675
|
+
autoAlignment: L = !0,
|
|
2672
2676
|
...g
|
|
2673
|
-
} = Ue(i, s), _ = I !== void 0 || v === st ?
|
|
2677
|
+
} = Ue(i, s), _ = I !== void 0 || v === st ? di(I || null, L, v) : v, p = await ft(s, g), N = ((o = r.autoPlacement) == null ? void 0 : o.index) || 0, f = _[N];
|
|
2674
2678
|
if (f == null)
|
|
2675
2679
|
return {};
|
|
2676
|
-
const m =
|
|
2680
|
+
const m = ni(f, c, await (u.isRTL == null ? void 0 : u.isRTL(O.floating)));
|
|
2677
2681
|
if (l !== f)
|
|
2678
2682
|
return {
|
|
2679
2683
|
reset: {
|
|
@@ -2695,33 +2699,33 @@ const ci = function(i) {
|
|
|
2695
2699
|
}
|
|
2696
2700
|
};
|
|
2697
2701
|
const y = F.map((Z) => {
|
|
2698
|
-
const
|
|
2699
|
-
return [Z.placement,
|
|
2702
|
+
const Ae = ne(Z.placement);
|
|
2703
|
+
return [Z.placement, Ae && R ? (
|
|
2700
2704
|
// Check along the mainAxis and main crossAxis side.
|
|
2701
2705
|
Z.overflows.slice(0, 2).reduce((yt, Ct) => yt + Ct, 0)
|
|
2702
2706
|
) : (
|
|
2703
2707
|
// Check only the mainAxis.
|
|
2704
2708
|
Z.overflows[0]
|
|
2705
2709
|
), Z.overflows];
|
|
2706
|
-
}).sort((Z,
|
|
2710
|
+
}).sort((Z, Ae) => Z[1] - Ae[1]), Te = ((a = y.filter((Z) => Z[2].slice(
|
|
2707
2711
|
0,
|
|
2708
2712
|
// Aligned placements should not check their opposite crossAxis
|
|
2709
2713
|
// side.
|
|
2710
2714
|
ne(Z[0]) ? 2 : 3
|
|
2711
|
-
).every((
|
|
2712
|
-
return
|
|
2715
|
+
).every((Ae) => Ae <= 0))[0]) == null ? void 0 : a[0]) || y[0][0];
|
|
2716
|
+
return Te !== l ? {
|
|
2713
2717
|
data: {
|
|
2714
2718
|
index: N + 1,
|
|
2715
2719
|
overflows: F
|
|
2716
2720
|
},
|
|
2717
2721
|
reset: {
|
|
2718
|
-
placement:
|
|
2722
|
+
placement: Te
|
|
2719
2723
|
}
|
|
2720
2724
|
} : {};
|
|
2721
2725
|
}
|
|
2722
2726
|
};
|
|
2723
2727
|
};
|
|
2724
|
-
async function
|
|
2728
|
+
async function Ei(i, s) {
|
|
2725
2729
|
const {
|
|
2726
2730
|
placement: o,
|
|
2727
2731
|
platform: n,
|
|
@@ -2729,7 +2733,7 @@ async function di(i, s) {
|
|
|
2729
2733
|
} = i, c = await (n.isRTL == null ? void 0 : n.isRTL(a.floating)), r = Ie(o), l = ne(o), u = Pe(o) === "y", O = ["left", "top"].includes(r) ? -1 : 1, R = c && u ? -1 : 1, I = Ue(s, i);
|
|
2730
2734
|
let {
|
|
2731
2735
|
mainAxis: v,
|
|
2732
|
-
crossAxis:
|
|
2736
|
+
crossAxis: L,
|
|
2733
2737
|
alignmentAxis: g
|
|
2734
2738
|
} = typeof I == "number" ? {
|
|
2735
2739
|
mainAxis: I,
|
|
@@ -2740,15 +2744,15 @@ async function di(i, s) {
|
|
|
2740
2744
|
crossAxis: I.crossAxis || 0,
|
|
2741
2745
|
alignmentAxis: I.alignmentAxis
|
|
2742
2746
|
};
|
|
2743
|
-
return l && typeof g == "number" && (
|
|
2744
|
-
x:
|
|
2747
|
+
return l && typeof g == "number" && (L = l === "end" ? g * -1 : g), u ? {
|
|
2748
|
+
x: L * R,
|
|
2745
2749
|
y: v * O
|
|
2746
2750
|
} : {
|
|
2747
2751
|
x: v * O,
|
|
2748
|
-
y:
|
|
2752
|
+
y: L * R
|
|
2749
2753
|
};
|
|
2750
2754
|
}
|
|
2751
|
-
const
|
|
2755
|
+
const Oi = function(i) {
|
|
2752
2756
|
return i === void 0 && (i = 0), {
|
|
2753
2757
|
name: "offset",
|
|
2754
2758
|
options: i,
|
|
@@ -2759,7 +2763,7 @@ const ui = function(i) {
|
|
|
2759
2763
|
y: c,
|
|
2760
2764
|
placement: r,
|
|
2761
2765
|
middlewareData: l
|
|
2762
|
-
} = s, u = await
|
|
2766
|
+
} = s, u = await Ei(s, i);
|
|
2763
2767
|
return r === ((o = l.offset) == null ? void 0 : o.placement) && (n = l.arrow) != null && n.alignmentOffset ? {} : {
|
|
2764
2768
|
x: a + u.x,
|
|
2765
2769
|
y: c + u.y,
|
|
@@ -2770,7 +2774,7 @@ const ui = function(i) {
|
|
|
2770
2774
|
};
|
|
2771
2775
|
}
|
|
2772
2776
|
};
|
|
2773
|
-
},
|
|
2777
|
+
}, Ri = function(i) {
|
|
2774
2778
|
return i === void 0 && (i = {}), {
|
|
2775
2779
|
name: "shift",
|
|
2776
2780
|
options: i,
|
|
@@ -2799,10 +2803,10 @@ const ui = function(i) {
|
|
|
2799
2803
|
x: o,
|
|
2800
2804
|
y: n
|
|
2801
2805
|
}, R = await ft(s, u), I = Pe(Ie(a)), v = Lt(I);
|
|
2802
|
-
let
|
|
2806
|
+
let L = O[v], g = O[I];
|
|
2803
2807
|
if (c) {
|
|
2804
|
-
const p = v === "y" ? "top" : "left", N = v === "y" ? "bottom" : "right", f =
|
|
2805
|
-
|
|
2808
|
+
const p = v === "y" ? "top" : "left", N = v === "y" ? "bottom" : "right", f = L + R[p], m = L - R[N];
|
|
2809
|
+
L = it(f, L, m);
|
|
2806
2810
|
}
|
|
2807
2811
|
if (r) {
|
|
2808
2812
|
const p = I === "y" ? "top" : "left", N = I === "y" ? "bottom" : "right", f = g + R[p], m = g - R[N];
|
|
@@ -2810,7 +2814,7 @@ const ui = function(i) {
|
|
|
2810
2814
|
}
|
|
2811
2815
|
const _ = l.fn({
|
|
2812
2816
|
...s,
|
|
2813
|
-
[v]:
|
|
2817
|
+
[v]: L,
|
|
2814
2818
|
[I]: g
|
|
2815
2819
|
});
|
|
2816
2820
|
return {
|
|
@@ -2862,7 +2866,7 @@ function me(i) {
|
|
|
2862
2866
|
} = Q(i);
|
|
2863
2867
|
return /auto|scroll|overlay|hidden|clip/.test(s + n + o) && !["inline", "contents"].includes(a);
|
|
2864
2868
|
}
|
|
2865
|
-
function
|
|
2869
|
+
function Ii(i) {
|
|
2866
2870
|
return ["table", "td", "th"].includes(ce(i));
|
|
2867
2871
|
}
|
|
2868
2872
|
function Be(i) {
|
|
@@ -2878,7 +2882,7 @@ function ze(i) {
|
|
|
2878
2882
|
const s = Qe(), o = z(i) ? Q(i) : i;
|
|
2879
2883
|
return ["transform", "translate", "scale", "rotate", "perspective"].some((n) => o[n] ? o[n] !== "none" : !1) || (o.containerType ? o.containerType !== "normal" : !1) || !s && (o.backdropFilter ? o.backdropFilter !== "none" : !1) || !s && (o.filter ? o.filter !== "none" : !1) || ["transform", "translate", "scale", "rotate", "perspective", "filter"].some((n) => (o.willChange || "").includes(n)) || ["paint", "layout", "strict", "content"].some((n) => (o.contain || "").includes(n));
|
|
2880
2884
|
}
|
|
2881
|
-
function
|
|
2885
|
+
function Ti(i) {
|
|
2882
2886
|
let s = ae(i);
|
|
2883
2887
|
for (; ee(s) && !Ee(s); ) {
|
|
2884
2888
|
if (ze(s))
|
|
@@ -2964,15 +2968,15 @@ function ue(i) {
|
|
|
2964
2968
|
y: l
|
|
2965
2969
|
};
|
|
2966
2970
|
}
|
|
2967
|
-
const
|
|
2971
|
+
const Ai = /* @__PURE__ */ j(0);
|
|
2968
2972
|
function mt(i) {
|
|
2969
2973
|
const s = Y(i);
|
|
2970
|
-
return !Qe() || !s.visualViewport ?
|
|
2974
|
+
return !Qe() || !s.visualViewport ? Ai : {
|
|
2971
2975
|
x: s.visualViewport.offsetLeft,
|
|
2972
2976
|
y: s.visualViewport.offsetTop
|
|
2973
2977
|
};
|
|
2974
2978
|
}
|
|
2975
|
-
function
|
|
2979
|
+
function Li(i, s, o) {
|
|
2976
2980
|
return s === void 0 && (s = !1), !o || s && o !== Y(i) ? !1 : s;
|
|
2977
2981
|
}
|
|
2978
2982
|
function le(i, s, o, n) {
|
|
@@ -2980,12 +2984,12 @@ function le(i, s, o, n) {
|
|
|
2980
2984
|
const a = i.getBoundingClientRect(), c = Ze(i);
|
|
2981
2985
|
let r = j(1);
|
|
2982
2986
|
s && (n ? z(n) && (r = ue(n)) : r = ue(i));
|
|
2983
|
-
const l =
|
|
2987
|
+
const l = Li(c, o, n) ? mt(c) : j(0);
|
|
2984
2988
|
let u = (a.left + l.x) / r.x, O = (a.top + l.y) / r.y, R = a.width / r.x, I = a.height / r.y;
|
|
2985
2989
|
if (c) {
|
|
2986
|
-
const v = Y(c),
|
|
2990
|
+
const v = Y(c), L = n && z(n) ? Y(n) : n;
|
|
2987
2991
|
let g = v, _ = xe(g);
|
|
2988
|
-
for (; _ && n &&
|
|
2992
|
+
for (; _ && n && L !== g; ) {
|
|
2989
2993
|
const p = ue(_), N = _.getBoundingClientRect(), f = Q(_), m = N.left + (_.clientLeft + parseFloat(f.paddingLeft)) * p.x, U = N.top + (_.clientTop + parseFloat(f.paddingTop)) * p.y;
|
|
2990
2994
|
u *= p.x, O *= p.y, R *= p.x, I *= p.y, u += m, O += U, g = Y(_), _ = xe(g);
|
|
2991
2995
|
}
|
|
@@ -3012,7 +3016,7 @@ function _t(i, s, o) {
|
|
|
3012
3016
|
y: c
|
|
3013
3017
|
};
|
|
3014
3018
|
}
|
|
3015
|
-
function
|
|
3019
|
+
function pi(i) {
|
|
3016
3020
|
let {
|
|
3017
3021
|
elements: s,
|
|
3018
3022
|
rect: o,
|
|
@@ -3028,8 +3032,8 @@ function Ti(i) {
|
|
|
3028
3032
|
}, O = j(1);
|
|
3029
3033
|
const R = j(0), I = ee(n);
|
|
3030
3034
|
if ((I || !I && !c) && ((ce(n) !== "body" || me(r)) && (u = Ge(n)), ee(n))) {
|
|
3031
|
-
const
|
|
3032
|
-
O = ue(n), R.x =
|
|
3035
|
+
const L = le(n);
|
|
3036
|
+
O = ue(n), R.x = L.x + n.clientLeft, R.y = L.y + n.clientTop;
|
|
3033
3037
|
}
|
|
3034
3038
|
const v = r && !I && !c ? _t(r, u, !0) : j(0);
|
|
3035
3039
|
return {
|
|
@@ -3039,10 +3043,10 @@ function Ti(i) {
|
|
|
3039
3043
|
y: o.y * O.y - u.scrollTop * O.y + R.y + v.y
|
|
3040
3044
|
};
|
|
3041
3045
|
}
|
|
3042
|
-
function
|
|
3046
|
+
function vi(i) {
|
|
3043
3047
|
return Array.from(i.getClientRects());
|
|
3044
3048
|
}
|
|
3045
|
-
function
|
|
3049
|
+
function fi(i) {
|
|
3046
3050
|
const s = te(i), o = Ge(i), n = i.ownerDocument.body, a = re(s.scrollWidth, s.clientWidth, n.scrollWidth, n.clientWidth), c = re(s.scrollHeight, s.clientHeight, n.scrollHeight, n.clientHeight);
|
|
3047
3051
|
let r = -o.scrollLeft + qe(i);
|
|
3048
3052
|
const l = -o.scrollTop;
|
|
@@ -3053,7 +3057,7 @@ function pi(i) {
|
|
|
3053
3057
|
y: l
|
|
3054
3058
|
};
|
|
3055
3059
|
}
|
|
3056
|
-
function
|
|
3060
|
+
function Ni(i, s) {
|
|
3057
3061
|
const o = Y(i), n = te(i), a = o.visualViewport;
|
|
3058
3062
|
let c = n.clientWidth, r = n.clientHeight, l = 0, u = 0;
|
|
3059
3063
|
if (a) {
|
|
@@ -3068,7 +3072,7 @@ function vi(i, s) {
|
|
|
3068
3072
|
y: u
|
|
3069
3073
|
};
|
|
3070
3074
|
}
|
|
3071
|
-
function
|
|
3075
|
+
function gi(i, s) {
|
|
3072
3076
|
const o = le(i, !0, s === "fixed"), n = o.top + i.clientTop, a = o.left + i.clientLeft, c = ee(i) ? ue(i) : j(1), r = i.clientWidth * c.x, l = i.clientHeight * c.y, u = a * c.x, O = n * c.y;
|
|
3073
3077
|
return {
|
|
3074
3078
|
width: r,
|
|
@@ -3080,11 +3084,11 @@ function fi(i, s) {
|
|
|
3080
3084
|
function rt(i, s, o) {
|
|
3081
3085
|
let n;
|
|
3082
3086
|
if (s === "viewport")
|
|
3083
|
-
n =
|
|
3087
|
+
n = Ni(i, o);
|
|
3084
3088
|
else if (s === "document")
|
|
3085
|
-
n =
|
|
3089
|
+
n = fi(te(i));
|
|
3086
3090
|
else if (z(s))
|
|
3087
|
-
n =
|
|
3091
|
+
n = gi(s, o);
|
|
3088
3092
|
else {
|
|
3089
3093
|
const a = mt(i);
|
|
3090
3094
|
n = {
|
|
@@ -3100,7 +3104,7 @@ function Ft(i, s) {
|
|
|
3100
3104
|
const o = ae(i);
|
|
3101
3105
|
return o === s || !z(o) || Ee(o) ? !1 : Q(o).position === "fixed" || Ft(o, s);
|
|
3102
3106
|
}
|
|
3103
|
-
function
|
|
3107
|
+
function mi(i, s) {
|
|
3104
3108
|
const o = s.get(i);
|
|
3105
3109
|
if (o)
|
|
3106
3110
|
return o;
|
|
@@ -3113,14 +3117,14 @@ function Ni(i, s) {
|
|
|
3113
3117
|
}
|
|
3114
3118
|
return s.set(i, n), n;
|
|
3115
3119
|
}
|
|
3116
|
-
function
|
|
3120
|
+
function _i(i) {
|
|
3117
3121
|
let {
|
|
3118
3122
|
element: s,
|
|
3119
3123
|
boundary: o,
|
|
3120
3124
|
rootBoundary: n,
|
|
3121
3125
|
strategy: a
|
|
3122
3126
|
} = i;
|
|
3123
|
-
const r = [...o === "clippingAncestors" ? Be(s) ? [] :
|
|
3127
|
+
const r = [...o === "clippingAncestors" ? Be(s) ? [] : mi(s, this._c) : [].concat(o), n], l = r[0], u = r.reduce((O, R) => {
|
|
3124
3128
|
const I = rt(s, R, a);
|
|
3125
3129
|
return O.top = re(I.top, O.top), O.right = Se(I.right, O.right), O.bottom = Se(I.bottom, O.bottom), O.left = re(I.left, O.left), O;
|
|
3126
3130
|
}, rt(s, l, a));
|
|
@@ -3131,7 +3135,7 @@ function gi(i) {
|
|
|
3131
3135
|
y: u.top
|
|
3132
3136
|
};
|
|
3133
3137
|
}
|
|
3134
|
-
function
|
|
3138
|
+
function Fi(i) {
|
|
3135
3139
|
const {
|
|
3136
3140
|
width: s,
|
|
3137
3141
|
height: o
|
|
@@ -3141,7 +3145,7 @@ function mi(i) {
|
|
|
3141
3145
|
height: o
|
|
3142
3146
|
};
|
|
3143
3147
|
}
|
|
3144
|
-
function
|
|
3148
|
+
function Di(i, s, o) {
|
|
3145
3149
|
const n = ee(s), a = te(s), c = o === "fixed", r = le(i, !0, c, s);
|
|
3146
3150
|
let l = {
|
|
3147
3151
|
scrollLeft: 0,
|
|
@@ -3187,14 +3191,14 @@ function Dt(i, s) {
|
|
|
3187
3191
|
return o;
|
|
3188
3192
|
}
|
|
3189
3193
|
let n = lt(i, s);
|
|
3190
|
-
for (; n &&
|
|
3194
|
+
for (; n && Ii(n) && we(n); )
|
|
3191
3195
|
n = lt(n, s);
|
|
3192
|
-
return n && Ee(n) && we(n) && !ze(n) ? o : n ||
|
|
3196
|
+
return n && Ee(n) && we(n) && !ze(n) ? o : n || Ti(i) || o;
|
|
3193
3197
|
}
|
|
3194
|
-
const
|
|
3198
|
+
const Si = async function(i) {
|
|
3195
3199
|
const s = this.getOffsetParent || Dt, o = this.getDimensions, n = await o(i.floating);
|
|
3196
3200
|
return {
|
|
3197
|
-
reference:
|
|
3201
|
+
reference: Di(i.reference, await s(i.floating), i.strategy),
|
|
3198
3202
|
floating: {
|
|
3199
3203
|
x: 0,
|
|
3200
3204
|
y: 0,
|
|
@@ -3203,25 +3207,25 @@ const Fi = async function(i) {
|
|
|
3203
3207
|
}
|
|
3204
3208
|
};
|
|
3205
3209
|
};
|
|
3206
|
-
function
|
|
3210
|
+
function hi(i) {
|
|
3207
3211
|
return Q(i).direction === "rtl";
|
|
3208
3212
|
}
|
|
3209
|
-
const
|
|
3210
|
-
convertOffsetParentRelativeRectToViewportRelativeRect:
|
|
3213
|
+
const yi = {
|
|
3214
|
+
convertOffsetParentRelativeRectToViewportRelativeRect: pi,
|
|
3211
3215
|
getDocumentElement: te,
|
|
3212
|
-
getClippingRect:
|
|
3216
|
+
getClippingRect: _i,
|
|
3213
3217
|
getOffsetParent: Dt,
|
|
3214
|
-
getElementRects:
|
|
3215
|
-
getClientRects:
|
|
3216
|
-
getDimensions:
|
|
3218
|
+
getElementRects: Si,
|
|
3219
|
+
getClientRects: vi,
|
|
3220
|
+
getDimensions: Fi,
|
|
3217
3221
|
getScale: ue,
|
|
3218
3222
|
isElement: z,
|
|
3219
|
-
isRTL:
|
|
3223
|
+
isRTL: hi
|
|
3220
3224
|
};
|
|
3221
3225
|
function St(i, s) {
|
|
3222
3226
|
return i.x === s.x && i.y === s.y && i.width === s.width && i.height === s.height;
|
|
3223
3227
|
}
|
|
3224
|
-
function
|
|
3228
|
+
function Ci(i, s) {
|
|
3225
3229
|
let o = null, n;
|
|
3226
3230
|
const a = te(i);
|
|
3227
3231
|
function c() {
|
|
@@ -3234,11 +3238,11 @@ function hi(i, s) {
|
|
|
3234
3238
|
left: R,
|
|
3235
3239
|
top: I,
|
|
3236
3240
|
width: v,
|
|
3237
|
-
height:
|
|
3241
|
+
height: L
|
|
3238
3242
|
} = O;
|
|
3239
|
-
if (l || s(), !v || !
|
|
3243
|
+
if (l || s(), !v || !L)
|
|
3240
3244
|
return;
|
|
3241
|
-
const g = Fe(I), _ = Fe(a.clientWidth - (R + v)), p = Fe(a.clientHeight - (I +
|
|
3245
|
+
const g = Fe(I), _ = Fe(a.clientWidth - (R + v)), p = Fe(a.clientHeight - (I + L)), N = Fe(R), m = {
|
|
3242
3246
|
rootMargin: -g + "px " + -_ + "px " + -p + "px " + -N + "px",
|
|
3243
3247
|
threshold: re(0, Se(1, u)) || 1
|
|
3244
3248
|
};
|
|
@@ -3267,7 +3271,7 @@ function hi(i, s) {
|
|
|
3267
3271
|
}
|
|
3268
3272
|
return r(!0), c;
|
|
3269
3273
|
}
|
|
3270
|
-
function
|
|
3274
|
+
function Ui(i, s, o, n) {
|
|
3271
3275
|
n === void 0 && (n = {});
|
|
3272
3276
|
const {
|
|
3273
3277
|
ancestorScroll: a = !0,
|
|
@@ -3281,15 +3285,15 @@ function yi(i, s, o, n) {
|
|
|
3281
3285
|
passive: !0
|
|
3282
3286
|
}), c && N.addEventListener("resize", o);
|
|
3283
3287
|
});
|
|
3284
|
-
const I = O && l ?
|
|
3285
|
-
let v = -1,
|
|
3286
|
-
r && (
|
|
3288
|
+
const I = O && l ? Ci(O, o) : null;
|
|
3289
|
+
let v = -1, L = null;
|
|
3290
|
+
r && (L = new ResizeObserver((N) => {
|
|
3287
3291
|
let [f] = N;
|
|
3288
|
-
f && f.target === O &&
|
|
3292
|
+
f && f.target === O && L && (L.unobserve(s), cancelAnimationFrame(v), v = requestAnimationFrame(() => {
|
|
3289
3293
|
var m;
|
|
3290
|
-
(m =
|
|
3294
|
+
(m = L) == null || m.observe(s);
|
|
3291
3295
|
})), o();
|
|
3292
|
-
}), O && !u &&
|
|
3296
|
+
}), O && !u && L.observe(O), L.observe(s));
|
|
3293
3297
|
let g, _ = u ? le(i) : null;
|
|
3294
3298
|
u && p();
|
|
3295
3299
|
function p() {
|
|
@@ -3300,27 +3304,27 @@ function yi(i, s, o, n) {
|
|
|
3300
3304
|
var N;
|
|
3301
3305
|
R.forEach((f) => {
|
|
3302
3306
|
a && f.removeEventListener("scroll", o), c && f.removeEventListener("resize", o);
|
|
3303
|
-
}), I == null || I(), (N =
|
|
3307
|
+
}), I == null || I(), (N = L) == null || N.disconnect(), L = null, u && cancelAnimationFrame(g);
|
|
3304
3308
|
};
|
|
3305
3309
|
}
|
|
3306
|
-
const ct =
|
|
3310
|
+
const ct = Oi, dt = ui, ut = Ri, Pi = (i, s, o) => {
|
|
3307
3311
|
const n = /* @__PURE__ */ new Map(), a = {
|
|
3308
|
-
platform:
|
|
3312
|
+
platform: yi,
|
|
3309
3313
|
...o
|
|
3310
3314
|
}, c = {
|
|
3311
3315
|
...a.platform,
|
|
3312
3316
|
_c: n
|
|
3313
3317
|
};
|
|
3314
|
-
return
|
|
3318
|
+
return ci(i, s, {
|
|
3315
3319
|
...a,
|
|
3316
3320
|
platform: c
|
|
3317
3321
|
});
|
|
3318
3322
|
};
|
|
3319
|
-
function
|
|
3323
|
+
function bi(i) {
|
|
3320
3324
|
return i != null && typeof i == "object" && "$el" in i;
|
|
3321
3325
|
}
|
|
3322
3326
|
function Et(i) {
|
|
3323
|
-
if (
|
|
3327
|
+
if (bi(i)) {
|
|
3324
3328
|
const s = i.$el;
|
|
3325
3329
|
return Ke(s) && ce(s) === "#comment" ? null : s;
|
|
3326
3330
|
}
|
|
@@ -3336,7 +3340,7 @@ function Ot(i, s) {
|
|
|
3336
3340
|
const o = ht(i);
|
|
3337
3341
|
return Math.round(s * o) / o;
|
|
3338
3342
|
}
|
|
3339
|
-
function
|
|
3343
|
+
function Bi(i, s, o) {
|
|
3340
3344
|
o === void 0 && (o = {});
|
|
3341
3345
|
const n = o.whileElementsMounted, a = P(() => {
|
|
3342
3346
|
var y;
|
|
@@ -3350,25 +3354,25 @@ function Pi(i, s, o) {
|
|
|
3350
3354
|
}), u = P(() => {
|
|
3351
3355
|
var y;
|
|
3352
3356
|
return (y = fe(o.transform)) != null ? y : !0;
|
|
3353
|
-
}), O = P(() => Et(i.value)), R = P(() => Et(s.value)), I = D(0), v = D(0),
|
|
3357
|
+
}), O = P(() => Et(i.value)), R = P(() => Et(s.value)), I = D(0), v = D(0), L = D(l.value), g = D(r.value), _ = wt({}), p = D(!1), N = P(() => {
|
|
3354
3358
|
const y = {
|
|
3355
|
-
position:
|
|
3359
|
+
position: L.value,
|
|
3356
3360
|
left: "0",
|
|
3357
3361
|
top: "0"
|
|
3358
3362
|
};
|
|
3359
3363
|
if (!R.value)
|
|
3360
3364
|
return y;
|
|
3361
|
-
const V = Ot(R.value, I.value),
|
|
3365
|
+
const V = Ot(R.value, I.value), Te = Ot(R.value, v.value);
|
|
3362
3366
|
return u.value ? {
|
|
3363
3367
|
...y,
|
|
3364
|
-
transform: "translate(" + V + "px, " +
|
|
3368
|
+
transform: "translate(" + V + "px, " + Te + "px)",
|
|
3365
3369
|
...ht(R.value) >= 1.5 && {
|
|
3366
3370
|
willChange: "transform"
|
|
3367
3371
|
}
|
|
3368
3372
|
} : {
|
|
3369
|
-
position:
|
|
3373
|
+
position: L.value,
|
|
3370
3374
|
left: V + "px",
|
|
3371
|
-
top:
|
|
3375
|
+
top: Te + "px"
|
|
3372
3376
|
};
|
|
3373
3377
|
});
|
|
3374
3378
|
let f;
|
|
@@ -3376,12 +3380,12 @@ function Pi(i, s, o) {
|
|
|
3376
3380
|
if (O.value == null || R.value == null)
|
|
3377
3381
|
return;
|
|
3378
3382
|
const y = a.value;
|
|
3379
|
-
|
|
3383
|
+
Pi(O.value, R.value, {
|
|
3380
3384
|
middleware: c.value,
|
|
3381
3385
|
placement: r.value,
|
|
3382
3386
|
strategy: l.value
|
|
3383
3387
|
}).then((V) => {
|
|
3384
|
-
I.value = V.x, v.value = V.y,
|
|
3388
|
+
I.value = V.x, v.value = V.y, L.value = V.strategy, g.value = V.placement, _.value = V.middlewareData, p.value = y !== !1;
|
|
3385
3389
|
});
|
|
3386
3390
|
}
|
|
3387
3391
|
function U() {
|
|
@@ -3409,7 +3413,7 @@ function Pi(i, s, o) {
|
|
|
3409
3413
|
}), Mt() && xt(U), {
|
|
3410
3414
|
x: de(I),
|
|
3411
3415
|
y: de(v),
|
|
3412
|
-
strategy: de(
|
|
3416
|
+
strategy: de(L),
|
|
3413
3417
|
placement: de(g),
|
|
3414
3418
|
middlewareData: de(_),
|
|
3415
3419
|
isPositioned: de(p),
|
|
@@ -3417,33 +3421,33 @@ function Pi(i, s, o) {
|
|
|
3417
3421
|
update: m
|
|
3418
3422
|
};
|
|
3419
3423
|
}
|
|
3420
|
-
const
|
|
3424
|
+
const Gi = (i, s) => !(Array.isArray(s) ? s : [s]).some((n) => n.contains(i.target)), Hi = /* @__PURE__ */ C({
|
|
3421
3425
|
__name: "TidePopover",
|
|
3422
3426
|
props: {
|
|
3423
3427
|
anchorId: {},
|
|
3424
3428
|
offset: { default: 16 }
|
|
3425
3429
|
},
|
|
3426
3430
|
setup(i) {
|
|
3427
|
-
const s = i, o = D(null), n = D(null), a = D(null), c = D(!1), r = D(!1), l = D([dt(), ct({ mainAxis: s.offset }), ut({ padding: 16 })]), u = P(() => c.value || r.value), { floatingStyles: O } =
|
|
3431
|
+
const s = i, o = D(null), n = D(null), a = D(null), c = D(!1), r = D(!1), l = D([dt(), ct({ mainAxis: s.offset }), ut({ padding: 16 })]), u = P(() => c.value || r.value), { floatingStyles: O } = Bi(o, n, {
|
|
3428
3432
|
middleware: l,
|
|
3429
3433
|
strategy: "fixed",
|
|
3430
|
-
whileElementsMounted:
|
|
3434
|
+
whileElementsMounted: Ui
|
|
3431
3435
|
}), R = (U) => {
|
|
3432
|
-
!o.value || !n.value ||
|
|
3436
|
+
!o.value || !n.value || Gi(U, [o.value, n.value]) && (U.stopImmediatePropagation(), r.value = !1);
|
|
3433
3437
|
}, I = () => {
|
|
3434
3438
|
c.value = !0;
|
|
3435
3439
|
}, v = () => {
|
|
3436
3440
|
c.value = !1;
|
|
3437
|
-
},
|
|
3441
|
+
}, L = () => {
|
|
3438
3442
|
r.value = !0;
|
|
3439
3443
|
}, g = () => {
|
|
3440
3444
|
if (!o.value)
|
|
3441
3445
|
return null;
|
|
3442
|
-
o.value.addEventListener("mouseover", I), o.value.addEventListener("mouseleave", v), o.value.addEventListener("click",
|
|
3446
|
+
o.value.addEventListener("mouseover", I), o.value.addEventListener("mouseleave", v), o.value.addEventListener("click", L);
|
|
3443
3447
|
}, _ = () => {
|
|
3444
3448
|
if (!o.value)
|
|
3445
3449
|
return null;
|
|
3446
|
-
o.value.removeEventListener("mouseover", I), o.value.removeEventListener("mouseleave", v), o.value.removeEventListener("click",
|
|
3450
|
+
o.value.removeEventListener("mouseover", I), o.value.removeEventListener("mouseleave", v), o.value.removeEventListener("click", L);
|
|
3447
3451
|
}, p = (U) => {
|
|
3448
3452
|
U.key === "Escape" && (r.value = !1);
|
|
3449
3453
|
}, N = () => {
|
|
@@ -3466,7 +3470,7 @@ const bi = (i, s) => !(Array.isArray(s) ? s : [s]).some((n) => n.contains(i.targ
|
|
|
3466
3470
|
), Wt(() => {
|
|
3467
3471
|
l.value = [dt(), ct({ mainAxis: s.offset }), ut({ padding: 16 })];
|
|
3468
3472
|
}), Xt(() => {
|
|
3469
|
-
|
|
3473
|
+
Js();
|
|
3470
3474
|
}), We(() => {
|
|
3471
3475
|
m(), a.value = document.documentElement, g();
|
|
3472
3476
|
}), It(() => {
|
|
@@ -3476,7 +3480,7 @@ const bi = (i, s) => !(Array.isArray(s) ? s : [s]).some((n) => n.contains(i.targ
|
|
|
3476
3480
|
}, [
|
|
3477
3481
|
x(Yt, null, {
|
|
3478
3482
|
default: Re(() => [
|
|
3479
|
-
Ce(
|
|
3483
|
+
Ce(A("div", {
|
|
3480
3484
|
class: d([
|
|
3481
3485
|
"tide-popover",
|
|
3482
3486
|
t(e).BG.SURFACE.DEFAULT,
|
|
@@ -3501,7 +3505,7 @@ const bi = (i, s) => !(Array.isArray(s) ? s : [s]).some((n) => n.contains(i.targ
|
|
|
3501
3505
|
], 8, ["to"]));
|
|
3502
3506
|
}
|
|
3503
3507
|
});
|
|
3504
|
-
const
|
|
3508
|
+
const To = /* @__PURE__ */ w(Hi, [["__scopeId", "data-v-a4dd063e"]]), wi = { class: "tide-seo-links" }, Mi = ["href", "target"], xi = /* @__PURE__ */ C({
|
|
3505
3509
|
__name: "TideSeoLinks",
|
|
3506
3510
|
props: {
|
|
3507
3511
|
heading: { default: "" },
|
|
@@ -3509,28 +3513,28 @@ const Ro = /* @__PURE__ */ w(Bi, [["__scopeId", "data-v-a4dd063e"]]), Gi = { cla
|
|
|
3509
3513
|
},
|
|
3510
3514
|
setup(i) {
|
|
3511
3515
|
const s = i;
|
|
3512
|
-
return (o, n) => (E(),
|
|
3513
|
-
|
|
3516
|
+
return (o, n) => (E(), T("section", wi, [
|
|
3517
|
+
A("h2", {
|
|
3514
3518
|
class: d([t(e).MARGIN.BOTTOM.HALF])
|
|
3515
3519
|
}, h(s.heading), 3),
|
|
3516
|
-
|
|
3520
|
+
A("ul", {
|
|
3517
3521
|
class: d([t(e).DISPLAY.FLEX, t(e).FLEX.WRAP, t(e).GAP.TWO, t(e).LIST_BULLETS.OFF])
|
|
3518
3522
|
}, [
|
|
3519
|
-
(E(!0),
|
|
3523
|
+
(E(!0), T(q, null, oe(s.links, (a) => (E(), T("li", {
|
|
3520
3524
|
class: d(["tide-seo-link", t(e).DISPLAY.FLEX, t(e).FLEX.DIRECTION.COLUMN, t(e).GAP.QUARTER, t(e).FONT.ROLE.BODY_2]),
|
|
3521
3525
|
key: a.label
|
|
3522
3526
|
}, [
|
|
3523
|
-
|
|
3527
|
+
A("a", {
|
|
3524
3528
|
class: d([t(e).UNDERLINE.OFF]),
|
|
3525
3529
|
href: a.url,
|
|
3526
3530
|
target: a.isNewTab ? t(J).BLANK : t(J).SELF
|
|
3527
|
-
}, h(a.label), 11,
|
|
3531
|
+
}, h(a.label), 11, Mi)
|
|
3528
3532
|
], 2))), 128))
|
|
3529
3533
|
], 2)
|
|
3530
3534
|
]));
|
|
3531
3535
|
}
|
|
3532
3536
|
});
|
|
3533
|
-
const
|
|
3537
|
+
const Ao = /* @__PURE__ */ w(xi, [["__scopeId", "data-v-0348487b"]]), Wi = ["disabled"], Xi = /* @__PURE__ */ C({
|
|
3534
3538
|
__name: "TideSwitch",
|
|
3535
3539
|
props: {
|
|
3536
3540
|
disabled: { type: Boolean, default: !1 },
|
|
@@ -3541,7 +3545,7 @@ const Io = /* @__PURE__ */ w(wi, [["__scopeId", "data-v-0348487b"]]), Mi = ["dis
|
|
|
3541
3545
|
const o = i, n = () => {
|
|
3542
3546
|
o.disabled || s("change");
|
|
3543
3547
|
};
|
|
3544
|
-
return (a, c) => (E(),
|
|
3548
|
+
return (a, c) => (E(), T("button", {
|
|
3545
3549
|
class: d([
|
|
3546
3550
|
"tide-switch",
|
|
3547
3551
|
o.isActive ? "active" : "",
|
|
@@ -3557,7 +3561,7 @@ const Io = /* @__PURE__ */ w(wi, [["__scopeId", "data-v-0348487b"]]), Mi = ["dis
|
|
|
3557
3561
|
onClick: n,
|
|
3558
3562
|
"aria-label": "Switch"
|
|
3559
3563
|
}, [
|
|
3560
|
-
|
|
3564
|
+
A("div", {
|
|
3561
3565
|
class: d([
|
|
3562
3566
|
"tide-switch-indicator",
|
|
3563
3567
|
t(e).POSITION.RELATIVE,
|
|
@@ -3573,13 +3577,13 @@ const Io = /* @__PURE__ */ w(wi, [["__scopeId", "data-v-0348487b"]]), Mi = ["dis
|
|
|
3573
3577
|
size: t(W).LARGE
|
|
3574
3578
|
}, null, 8, ["icon", "size"])
|
|
3575
3579
|
], 2)
|
|
3576
|
-
], 10,
|
|
3580
|
+
], 10, Wi));
|
|
3577
3581
|
}
|
|
3578
3582
|
});
|
|
3579
|
-
const
|
|
3583
|
+
const Lo = /* @__PURE__ */ w(Xi, [["__scopeId", "data-v-9bdb658a"]]), po = {
|
|
3580
3584
|
NUMBER: ke,
|
|
3581
|
-
PHONE:
|
|
3582
|
-
PRICE:
|
|
3585
|
+
PHONE: Zt,
|
|
3586
|
+
PRICE: qt
|
|
3583
3587
|
}, Ne = {
|
|
3584
3588
|
alpha: /^[a-zA-Z]+$/g,
|
|
3585
3589
|
alphaNumberOrEmpty: /^$|^[a-z0-9]+$/i,
|
|
@@ -3588,14 +3592,14 @@ const Ao = /* @__PURE__ */ w(xi, [["__scopeId", "data-v-9bdb658a"]]), To = {
|
|
|
3588
3592
|
numberFormatted: /^$|(?=.)^\$?(([1-9][0-9]{0,2}(,[0-9]{3})*)|0)?(\.[0-9]{1,2})?$/,
|
|
3589
3593
|
phone: /^(?:\d{3}-\d{3}-\d{4}|\d{1}-\d{3}-\d{3}-\d{4})?$/,
|
|
3590
3594
|
price: /(?=.)^\$?(([1-9][0-9]{0,2}(,[0-9]{3})*)|0)?(\.[0-9]{1,2})?$/
|
|
3591
|
-
},
|
|
3595
|
+
}, vo = {
|
|
3592
3596
|
IMAGE: {
|
|
3593
3597
|
FLOORPLAN: "floorplan",
|
|
3594
3598
|
IMAGE: "image"
|
|
3595
3599
|
},
|
|
3596
3600
|
VIDEO: "video",
|
|
3597
3601
|
VR: "vr"
|
|
3598
|
-
},
|
|
3602
|
+
}, fo = {
|
|
3599
3603
|
ALPHA_NUMBER_EMPTY: pe(Ne.alphaNumberOrEmpty),
|
|
3600
3604
|
ALPHA_SPACE: pe(Ne.alphaSpace),
|
|
3601
3605
|
EMAIL: pe(Ne.email),
|
|
@@ -3604,56 +3608,56 @@ const Ao = /* @__PURE__ */ w(xi, [["__scopeId", "data-v-9bdb658a"]]), To = {
|
|
|
3604
3608
|
};
|
|
3605
3609
|
export {
|
|
3606
3610
|
X as ALERT,
|
|
3607
|
-
|
|
3608
|
-
|
|
3611
|
+
ts as BADGE_TRUSTED,
|
|
3612
|
+
qs as BREAKPOINT,
|
|
3609
3613
|
e as CSS,
|
|
3610
3614
|
M as ELEMENT,
|
|
3611
3615
|
ie as ELEMENT_TEXT_AS_ICON,
|
|
3612
|
-
|
|
3616
|
+
po as FORMAT,
|
|
3613
3617
|
Ne as FORMAT_REGEX,
|
|
3614
3618
|
b as ICON,
|
|
3615
|
-
|
|
3616
|
-
|
|
3617
|
-
|
|
3619
|
+
Yi as ICON_REALM,
|
|
3620
|
+
Oo as MEDIA,
|
|
3621
|
+
vo as MEDIA_SLIDE_TYPES,
|
|
3618
3622
|
je as ORIENTATION,
|
|
3619
3623
|
$ as PRIORITY,
|
|
3620
|
-
|
|
3624
|
+
zt as REALM,
|
|
3621
3625
|
W as SIZE,
|
|
3622
3626
|
Le as SIZE_BUTTON,
|
|
3623
3627
|
J as TARGET,
|
|
3624
3628
|
ve as TEXT_INPUT_TYPE,
|
|
3625
3629
|
_e as TYPE_CARD,
|
|
3626
|
-
|
|
3627
|
-
|
|
3628
|
-
|
|
3629
|
-
|
|
3630
|
-
|
|
3631
|
-
|
|
3630
|
+
Vi as TideAccordionItem,
|
|
3631
|
+
$i as TideAlert,
|
|
3632
|
+
Ki as TideBadge,
|
|
3633
|
+
zi as TideBadgeTrustedPartner,
|
|
3634
|
+
Qi as TideBreadCrumbs,
|
|
3635
|
+
Zi as TideButton,
|
|
3632
3636
|
se as TideButtonIcon,
|
|
3633
|
-
|
|
3634
|
-
|
|
3635
|
-
|
|
3636
|
-
|
|
3637
|
-
|
|
3638
|
-
|
|
3639
|
-
|
|
3640
|
-
|
|
3637
|
+
rs as TideButtonPagination,
|
|
3638
|
+
qi as TideButtonSegmented,
|
|
3639
|
+
ji as TideCard,
|
|
3640
|
+
Ji as TideCarousel,
|
|
3641
|
+
eo as TideChipAction,
|
|
3642
|
+
to as TideChipFilter,
|
|
3643
|
+
so as TideChipInput,
|
|
3644
|
+
io as TideColumns,
|
|
3641
3645
|
Je as TideDivider,
|
|
3642
3646
|
H as TideIcon,
|
|
3643
|
-
|
|
3644
|
-
|
|
3645
|
-
|
|
3646
|
-
|
|
3647
|
-
|
|
3648
|
-
|
|
3649
|
-
|
|
3650
|
-
|
|
3651
|
-
|
|
3652
|
-
|
|
3653
|
-
|
|
3654
|
-
|
|
3655
|
-
|
|
3656
|
-
|
|
3657
|
-
|
|
3647
|
+
ms as TideImage,
|
|
3648
|
+
oo as TideImageBackground,
|
|
3649
|
+
no as TideIndicator,
|
|
3650
|
+
ao as TideInputCheckbox,
|
|
3651
|
+
ro as TideInputRadio,
|
|
3652
|
+
lo as TideInputSelect,
|
|
3653
|
+
co as TideInputText,
|
|
3654
|
+
uo as TideInputTextarea,
|
|
3655
|
+
Eo as TideLink,
|
|
3656
|
+
Ro as TideModal,
|
|
3657
|
+
Io as TidePagination,
|
|
3658
|
+
To as TidePopover,
|
|
3659
|
+
Ao as TideSeoLinks,
|
|
3660
|
+
Lo as TideSwitch,
|
|
3661
|
+
fo as VALIDATOR
|
|
3658
3662
|
};
|
|
3659
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlkZS1kZXNpZ24tc3lzdGVtLmVzbS5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL3R5cGVzL09yaWVudGF0aW9uLnRzIiwiLi4vc3JjL3R5cGVzL1N0eWxlcy50cyIsIi4uL3NyYy90eXBlcy9SZWFsbS50cyIsIi4uL3NyYy90eXBlcy9TaXplLnRzIiwiLi4vc3JjL3V0aWxpdGllcy9mb3JtYXQudHMiLCIuLi9zcmMvY29tcG9uZW50cy9UaWRlSWNvbi52dWUiLCIuLi9zcmMvdHlwZXMvSWNvbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL1RpZGVBY2NvcmRpb25JdGVtLnZ1ZSIsIi4uL3NyYy90eXBlcy9FbGVtZW50LnRzIiwiLi4vc3JjL3R5cGVzL1ByaW9yaXR5LnRzIiwiLi4vc3JjL3R5cGVzL1RhcmdldC50cyIsIi4uL3NyYy90eXBlcy9BbGVydC50cyIsIi4uL3NyYy9jb21wb25lbnRzL1RpZGVBbGVydC52dWUiLCIuLi9zcmMvdHlwZXMvQmFkZ2UudHMiLCIuLi9zcmMvY29tcG9uZW50cy9UaWRlQnV0dG9uU2VnbWVudGVkLnZ1ZSIsIi4uL3NyYy90eXBlcy9DYXJkLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvVGlkZUNhcm91c2VsLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1RpZGVJbWFnZS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9UaWRlSW5wdXRDaGVja2JveC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9UaWRlSW5wdXRSYWRpby52dWUiLCIuLi9zcmMvdXRpbGl0aWVzL3ZhbGlkYXRpb24udHMiLCIuLi9zcmMvY29tcG9uZW50cy9UaWRlSW5wdXRTZWxlY3QudnVlIiwiLi4vc3JjL3R5cGVzL1RleHRJbnB1dC50cyIsIi4uL3NyYy9jb21wb25lbnRzL1RpZGVJbnB1dFRleHQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvVGlkZUlucHV0VGV4dGFyZWEudnVlIiwiLi4vc3JjL3R5cGVzL0JyZWFrcG9pbnQudHMiLCIuLi9zcmMvdXRpbGl0aWVzL3ZpZXdwb3J0LnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvVGlkZU1vZGFsLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1RpZGVQYWdpbmF0aW9uLnZ1ZSIsIi4uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5tanMiLCIuLi9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL2NvcmUvZGlzdC9mbG9hdGluZy11aS5jb3JlLm1qcyIsIi4uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5kb20ubWpzIiwiLi4vbm9kZV9tb2R1bGVzL0BmbG9hdGluZy11aS9kb20vZGlzdC9mbG9hdGluZy11aS5kb20ubWpzIiwiLi4vbm9kZV9tb2R1bGVzL0BmbG9hdGluZy11aS92dWUvZGlzdC9mbG9hdGluZy11aS52dWUubWpzIiwiLi4vc3JjL3V0aWxpdGllcy9ldmVudC50cyIsIi4uL3NyYy9jb21wb25lbnRzL1RpZGVQb3BvdmVyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1RpZGVTd2l0Y2gudnVlIiwiLi4vc3JjL3R5cGVzL0Zvcm1hdHRlZC50cyIsIi4uL3NyYy90eXBlcy9MaXN0aW5nTWVkaWEudHMiLCIuLi9zcmMvdHlwZXMvVmFsaWRhdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgT1JJRU5UQVRJT04gPSB7XG4gIEhPUklaT05UQUw6ICdob3Jpem9udGFsJyxcbiAgVkVSVElDQUw6ICd2ZXJ0aWNhbCcsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBPcmllbnRhdGlvbiA9ICh0eXBlb2YgT1JJRU5UQVRJT04pW2tleW9mIHR5cGVvZiBPUklFTlRBVElPTl07XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSB2dWUvc29ydC1rZXlzICovXG5cbmltcG9ydCB0eXBlIHsgQnJlYWtwb2ludCB9IGZyb20gJ0AvdHlwZXMvQnJlYWtwb2ludCc7XG5cbmV4cG9ydCBjb25zdCBDU1MgPSB7XG4gIHdpdGhCcmVha3BvaW50OiAodXRpbGl0aWVzOiBzdHJpbmdbXSwgYnJlYWtwb2ludDogQnJlYWtwb2ludCk6IHN0cmluZ1tdID0+IHtcbiAgICByZXR1cm4gdXRpbGl0aWVzLm1hcCgodXRpbGl0eSkgPT4gYCR7YnJlYWtwb2ludH0tJHt1dGlsaXR5fWApO1xuICB9LFxuICBBTElHTjoge1xuICAgIFg6IHtcbiAgICAgIENFTlRFUjogJ3RpZGUtdGV4dC1jZW50ZXInLFxuICAgICAgTEVGVDogJ3RpZGUtdGV4dC1sZWZ0JyxcbiAgICAgIFJJR0hUOiAndGlkZS10ZXh0LXJpZ2h0JyxcbiAgICB9LFxuICAgIFk6IHtcbiAgICAgIElOSVRJQUw6ICd0aWRlLWFsaWduLWluaXRpYWwnLFxuICAgICAgTUlERExFOiAndGlkZS1hbGlnbi1taWRkbGUnLFxuICAgIH0sXG4gIH0sXG4gIEFYSVMxOiB7XG4gICAgQVJPVU5EOiAndGlkZS1heGlzMS1hcm91bmQnLFxuICAgIEJFVFdFRU46ICd0aWRlLWF4aXMxLWJldHdlZW4nLFxuICAgIENFTlRFUjogJ3RpZGUtYXhpczEtY2VudGVyJyxcbiAgICBFTkQ6ICd0aWRlLWF4aXMxLWVuZCcsXG4gICAgU1RBUlQ6ICd0aWRlLWF4aXMxLXN0YXJ0JyxcbiAgfSxcbiAgQVhJUzI6IHtcbiAgICBBUk9VTkQ6ICd0aWRlLWF4aXMyLWFyb3VuZCcsXG4gICAgQ0VOVEVSOiAndGlkZS1heGlzMi1jZW50ZXInLFxuICAgIEVORDogJ3RpZGUtYXhpczItZW5kJyxcbiAgICBTVEFSVDogJ3RpZGUtYXhpczItc3RhcnQnLFxuICB9LFxuICBCRzoge1xuICAgIEdMT0JBTDoge1xuICAgICAgUFJJTUFSWToge1xuICAgICAgICBFUlJPUjogJ3RpZGUtYmctcHJpbWFyeS1lcnJvcicsXG4gICAgICAgIElORk86ICd0aWRlLWJnLXByaW1hcnktaW5mbycsXG4gICAgICAgIFNVQ0NFU1M6ICd0aWRlLWJnLXByaW1hcnktc3VjY2VzcycsXG4gICAgICAgIFdBUk5JTkc6ICd0aWRlLWJnLXByaW1hcnktd2FybmluZycsXG4gICAgICB9LFxuICAgICAgU1VSRkFDRToge1xuICAgICAgICBFUlJPUjogJ3RpZGUtYmctc3VyZmFjZS1lcnJvcicsXG4gICAgICAgIElORk86ICd0aWRlLWJnLXN1cmZhY2UtaW5mbycsXG4gICAgICAgIFNVQ0NFU1M6ICd0aWRlLWJnLXN1cmZhY2Utc3VjY2VzcycsXG4gICAgICAgIFdBUk5JTkc6ICd0aWRlLWJnLXN1cmZhY2Utd2FybmluZycsXG4gICAgICB9LFxuICAgIH0sXG4gICAgSU5JVElBTDogJ3RpZGUtYmctaW5pdGlhbCcsXG4gICAgQkxVUjogJ3RpZGUtYmctYmx1cicsXG4gICAgUFJJTUFSWTogJ3RpZGUtYmctcHJpbWFyeScsXG4gICAgU0VDT05EQVJZOiAndGlkZS1iZy1zZWNvbmRhcnknLFxuICAgIFNVUkZBQ0U6IHtcbiAgICAgIEFDQ0VOVDogJ3RpZGUtYmctc3VyZmFjZS1hY2NlbnQnLFxuICAgICAgQlJBTkQ6ICd0aWRlLWJnLXN1cmZhY2UtYnJhbmQnLFxuICAgICAgREVGQVVMVDogJ3RpZGUtYmctc3VyZmFjZScsXG4gICAgICBGTE9BVElORzogJ3RpZGUtYmctc3VyZmFjZS1mbG9hdGluZycsXG4gICAgICBHUkFESUVOVDogJ3RpZGUtYmctc3VyZmFjZS1ncmFkaWVudCcsXG4gICAgICBWQVJJQU5UOiAndGlkZS1iZy1zdXJmYWNlLXZhcmlhbnQnLFxuICAgIH0sXG4gICAgVFJBTlNQQVJFTlQ6IHtcbiAgICAgIE9ORV9IVU5EUkVEOiAndGlkZS10cmFuc3BhcmVudC0xMDAnLFxuICAgICAgVFdPX0hVTkRSRUQ6ICd0aWRlLXRyYW5zcGFyZW50LTIwMCcsXG4gICAgICBUSFJFRV9IVU5EUkVEOiAndGlkZS10cmFuc3BhcmVudC0zMDAnLFxuICAgICAgRk9VUl9IVU5EUkVEOiAndGlkZS10cmFuc3BhcmVudC00MDAnLFxuICAgIH0sXG4gIH0sXG4gIEJPUkRFUjoge1xuICAgIENPTE9SOiB7XG4gICAgICBHTE9CQUw6IHtcbiAgICAgICAgRVJST1I6ICd0aWRlLWJvcmRlci1lcnJvcicsXG4gICAgICAgIElORk86ICd0aWRlLWJvcmRlci1pbmZvJyxcbiAgICAgICAgU1VDQ0VTUzogJ3RpZGUtYm9yZGVyLXN1Y2Nlc3MnLFxuICAgICAgICBXQVJOSU5HOiAndGlkZS1ib3JkZXItd2FybmluZycsXG4gICAgICB9LFxuICAgICAgSU5JVElBTDogJ3RpZGUtYm9yZGVyLWNvbG9yLWluaXRpYWwnLFxuICAgICAgREVGQVVMVDogJ3RpZGUtYm9yZGVyJyxcbiAgICAgIEZMT0FUSU5HOiAndGlkZS1ib3JkZXItZmxvYXRpbmcnLFxuICAgICAgSElHSDogJ3RpZGUtYm9yZGVyLWhpZ2gnLFxuICAgICAgTE9XOiAndGlkZS1ib3JkZXItbG93JyxcbiAgICAgIFBSSU1BUlk6ICd0aWRlLWJvcmRlci1wcmltYXJ5JyxcbiAgICB9LFxuICAgIFJBRElVUzoge1xuICAgICAgWkVSTzogJ3RpZGUtcmFkaXVzLTAnLFxuICAgICAgUVVBUlRFUjogJ3RpZGUtcmFkaXVzLTEvNCcsXG4gICAgICBIQUxGOiAndGlkZS1yYWRpdXMtMS8yJyxcbiAgICAgIE9ORTogJ3RpZGUtcmFkaXVzLTEnLFxuICAgICAgRlVMTDogJ3RpZGUtcmFkaXVzLWZ1bGwnLFxuICAgIH0sXG4gICAgQk9UVE9NOiB7XG4gICAgICBaRVJPOiAndGlkZS1ib3JkZXItYm90dG9tLTAnLFxuICAgICAgT05FOiAndGlkZS1ib3JkZXItYm90dG9tLTEnLFxuICAgICAgVFdPOiAndGlkZS1ib3JkZXItYm90dG9tLTInLFxuICAgIH0sXG4gICAgRlVMTDoge1xuICAgICAgWkVSTzogJ3RpZGUtYm9yZGVyLTAnLFxuICAgICAgT05FOiAndGlkZS1ib3JkZXItMScsXG4gICAgICBUV086ICd0aWRlLWJvcmRlci0yJyxcbiAgICB9LFxuICAgIExFRlQ6IHtcbiAgICAgIFpFUk86ICd0aWRlLWJvcmRlci1sZWZ0LTAnLFxuICAgICAgT05FOiAndGlkZS1ib3JkZXItbGVmdC0xJyxcbiAgICAgIFRXTzogJ3RpZGUtYm9yZGVyLWxlZnQtMicsXG4gICAgfSxcbiAgICBSSUdIVDoge1xuICAgICAgWkVSTzogJ3RpZGUtYm9yZGVyLXJpZ2h0LTAnLFxuICAgICAgT05FOiAndGlkZS1ib3JkZXItcmlnaHQtMScsXG4gICAgICBUV086ICd0aWRlLWJvcmRlci1yaWdodC0yJyxcbiAgICB9LFxuICAgIFRPUDoge1xuICAgICAgWkVSTzogJ3RpZGUtYm9yZGVyLXRvcC0wJyxcbiAgICAgIE9ORTogJ3RpZGUtYm9yZGVyLXRvcC0xJyxcbiAgICAgIFRXTzogJ3RpZGUtYm9yZGVyLXRvcC0yJyxcbiAgICB9LFxuICB9LFxuICBCT1hfU0laSU5HOiB7XG4gICAgQk9SREVSX0JPWDogJ3RpZGUtYm94LWJvcmRlcicsXG4gICAgQ09OVEVOVF9CT1g6ICd0aWRlLWJveC1jb250ZW50JyxcbiAgfSxcbiAgQlJFQUtfSU5TSURFOiB7XG4gICAgQVZPSURfQ09MVU1OOiAndGlkZS1icmVhay1pbnNpZGUtYXZvaWQtY29sdW1uJyxcbiAgfSxcbiAgQlJFQUtfV09SRDoge1xuICAgIE9GRjogJ3RpZGUtYnJlYWstaW5pdGlhbCcsXG4gICAgT046ICd0aWRlLWJyZWFrLXdvcmQnLFxuICB9LFxuICBDT0xVTU5TOiB7XG4gICAgSU5JVElBTDogJ3RpZGUtY29sdW1ucy1pbml0aWFsJyxcbiAgICBPTkU6ICd0aWRlLWNvbHVtbnMtMScsXG4gICAgVFdPOiAndGlkZS1jb2x1bW5zLTInLFxuICAgIFRIUkVFOiAndGlkZS1jb2x1bW5zLTMnLFxuICAgIEZPVVI6ICd0aWRlLWNvbHVtbnMtNCcsXG4gIH0sXG4gIENVUlNPUjoge1xuICAgIE5PVF9BTExPV0VEOiAndGlkZS1jdXJzb3Itbm90LWFsbG93ZWQnLFxuICAgIFBPSU5URVI6ICd0aWRlLWN1cnNvci1wb2ludGVyJyxcbiAgICBURVhUOiAndGlkZS1jdXJzb3ItdGV4dCcsXG4gIH0sXG4gIERJU1BMQVk6IHtcbiAgICBCTE9DSzogJ3RpZGUtZGlzcGxheS1ibG9jaycsXG4gICAgQ09OVEVOVFM6ICd0aWRlLWRpc3BsYXktY29udGVudHMnLFxuICAgIEZMRVg6ICd0aWRlLWRpc3BsYXktZmxleCcsXG4gICAgR1JJRDogJ3RpZGUtZGlzcGxheS1ncmlkJyxcbiAgICBJTklUSUFMOiAndGlkZS1kaXNwbGF5LWluaXRpYWwnLFxuICAgIElOTElORTogJ3RpZGUtZGlzcGxheS1pbmxpbmUnLFxuICAgIElOTElORV9CTE9DSzogJ3RpZGUtZGlzcGxheS1pbmxpbmUtYmxvY2snLFxuICAgIElOTElORV9GTEVYOiAndGlkZS1kaXNwbGF5LWlubGluZS1mbGV4JyxcbiAgICBOT05FOiAndGlkZS1kaXNwbGF5LW5vbmUnLFxuICB9LFxuICBFTExJUFNJUzogJ3RpZGUtZWxsaXBzaXMnLFxuICBGTEVYOiB7XG4gICAgQkFTSVM6IHtcbiAgICAgIEFVVE86ICd0aWRlLWZsZXgtYmFzaXMtYXV0bycsXG4gICAgICBaRVJPOiAndGlkZS1mbGV4LWJhc2lzLTAnLFxuICAgIH0sXG4gICAgRElSRUNUSU9OOiB7XG4gICAgICBDT0xVTU46ICd0aWRlLWZsZXgtY29sdW1uJyxcbiAgICAgIENPTFVNTl9SRVZFUlNFOiAndGlkZS1mbGV4LWNvbHVtbi1yZXZlcnNlJyxcbiAgICAgIFJPVzogJ3RpZGUtZmxleC1yb3cnLFxuICAgICAgUk9XX1JFVkVSU0U6ICd0aWRlLWZsZXgtcm93LXJldmVyc2UnLFxuICAgIH0sXG4gICAgR1JPVzoge1xuICAgICAgT0ZGOiAndGlkZS1ncm93LW5vbmUnLFxuICAgICAgT046ICd0aWRlLWdyb3cnLFxuICAgIH0sXG4gICAgU0hSSU5LOiB7XG4gICAgICBPRkY6ICd0aWRlLXNocmluay1ub25lJyxcbiAgICAgIE9OOiAndGlkZS1zaHJpbmsnLFxuICAgIH0sXG4gICAgV1JBUDogJ3RpZGUtZmxleC13cmFwJyxcbiAgfSxcbiAgRk9OVDoge1xuICAgIENPTE9SOiB7XG4gICAgICBHTE9CQUw6IHtcbiAgICAgICAgRVJST1I6ICd0aWRlLWZvbnQtZXJyb3InLFxuICAgICAgICBJTkZPOiAndGlkZS1mb250LWluZm8nLFxuICAgICAgICBTVUNDRVNTOiAndGlkZS1mb250LXN1Y2Nlc3MnLFxuICAgICAgICBXQVJOSU5HOiAndGlkZS1mb250LXdhcm5pbmcnLFxuICAgICAgfSxcbiAgICAgIFBSSU1BUlk6ICd0aWRlLWZvbnQtb24tcHJpbWFyeScsXG4gICAgICBTRUNPTkRBUlk6ICd0aWRlLWZvbnQtb24tc2Vjb25kYXJ5JyxcbiAgICAgIFNVUkZBQ0U6IHtcbiAgICAgICAgQlJBTkQ6ICd0aWRlLWZvbnQtb24tc3VyZmFjZS1icmFuZCcsXG4gICAgICAgIERFRkFVTFQ6ICd0aWRlLWZvbnQtb24tc3VyZmFjZScsXG4gICAgICAgIElOVkVSU0U6ICd0aWRlLWZvbnQtb24tc3VyZmFjZS1pbnZlcnNlJyxcbiAgICAgICAgVkFSSUFOVDogJ3RpZGUtZm9udC1vbi1zdXJmYWNlLXZhcmlhbnQnLFxuICAgICAgICBWQVJJQU5UX0lOVkVSU0U6ICd0aWRlLWZvbnQtb24tc3VyZmFjZS12YXJpYW50LWludmVyc2UnLFxuICAgICAgfSxcbiAgICB9LFxuICAgIFJPTEU6IHtcbiAgICAgIERJU1BMQVlfMTogJ3RpZGUtdHlwb2dyYXBoeS1kaXNwbGF5LTEnLFxuICAgICAgSEVBRExJTkVfMTogJ3RpZGUtdHlwb2dyYXBoeS1oZWFkbGluZS0xJyxcbiAgICAgIEhFQURMSU5FXzI6ICd0aWRlLXR5cG9ncmFwaHktaGVhZGxpbmUtMicsXG4gICAgICBIRUFETElORV8zOiAndGlkZS10eXBvZ3JhcGh5LWhlYWRsaW5lLTMnLFxuICAgICAgVElUTEVfMTogJ3RpZGUtdHlwb2dyYXBoeS10aXRsZS0xJyxcbiAgICAgIFRJVExFXzI6ICd0aWRlLXR5cG9ncmFwaHktdGl0bGUtMicsXG4gICAgICBCT0RZXzE6ICd0aWRlLXR5cG9ncmFwaHktYm9keS0xJyxcbiAgICAgIEJPRFlfMjogJ3RpZGUtdHlwb2dyYXBoeS1ib2R5LTInLFxuICAgICAgTEFCRUxfMTogJ3RpZGUtdHlwb2dyYXBoeS1sYWJlbC0xJyxcbiAgICAgIExBQkVMXzFfU0VNSUJPTEQ6ICd0aWRlLXR5cG9ncmFwaHktbGFiZWwtMS1zZW1pYm9sZCcsXG4gICAgICBMQUJFTF8yOiAndGlkZS10eXBvZ3JhcGh5LWxhYmVsLTInLFxuICAgICAgTEFCRUxfMl9TRU1JQk9MRDogJ3RpZGUtdHlwb2dyYXBoeS1sYWJlbC0yLXNlbWlib2xkJyxcbiAgICAgIExBQkVMXzM6ICd0aWRlLXR5cG9ncmFwaHktbGFiZWwtMycsXG4gICAgICBMSU5LXzE6ICd0aWRlLXR5cG9ncmFwaHktbGluay0xJyxcbiAgICAgIExJTktfMjogJ3RpZGUtdHlwb2dyYXBoeS1saW5rLTInLFxuICAgICAgTElOS18zOiAndGlkZS10eXBvZ3JhcGh5LWxpbmstMycsXG4gICAgICBCVVRUT05fMTogJ3RpZGUtdHlwb2dyYXBoeS1idXR0b24tMScsXG4gICAgICBCVVRUT05fMjogJ3RpZGUtdHlwb2dyYXBoeS1idXR0b24tMicsXG4gICAgfSxcbiAgICBTSVpFOiB7XG4gICAgICBUV0VMVkU6ICd0aWRlLWZvbnQtMTInLFxuICAgICAgRk9VUlRFRU46ICd0aWRlLWZvbnQtMTQnLFxuICAgICAgU0lYVEVFTjogJ3RpZGUtZm9udC0xNicsXG4gICAgICBUV0VOVFk6ICd0aWRlLWZvbnQtMjAnLFxuICAgICAgVFdFTlRZX0ZPVVI6ICd0aWRlLWZvbnQtMjQnLFxuICAgICAgVEhJUlRZX1RXTzogJ3RpZGUtZm9udC0zMicsXG4gICAgfSxcbiAgICBXRUlHSFQ6IHtcbiAgICAgIEZPVVJfSFVORFJFRDogJ3RpZGUtZm9udC00MDAnLFxuICAgICAgRklWRV9IVU5EUkVEOiAndGlkZS1mb250LTUwMCcsXG4gICAgICBTSVhfSFVORFJFRDogJ3RpZGUtZm9udC02MDAnLFxuICAgICAgU0VWRU5fSFVORFJFRDogJ3RpZGUtZm9udC03MDAnLFxuICAgIH0sXG4gIH0sXG4gIEdBUDoge1xuICAgIFpFUk86ICd0aWRlLWdhcC0wJyxcbiAgICBRVUFSVEVSOiAndGlkZS1nYXAtMS80JyxcbiAgICBIQUxGOiAndGlkZS1nYXAtMS8yJyxcbiAgICBPTkU6ICd0aWRlLWdhcC0xJyxcbiAgICBUV086ICd0aWRlLWdhcC0yJyxcbiAgICBGT1VSOiAndGlkZS1nYXAtNCcsXG4gIH0sXG4gIEdSSUQ6IHtcbiAgICBFTkQ6IHtcbiAgICAgIE9ORTogJ3RpZGUtZW5kLTEnLFxuICAgICAgVFdPOiAndGlkZS1lbmQtMicsXG4gICAgICBUSFJFRTogJ3RpZGUtZW5kLTMnLFxuICAgICAgRk9VUjogJ3RpZGUtZW5kLTQnLFxuICAgICAgRklWRTogJ3RpZGUtZW5kLTUnLFxuICAgICAgU0lYOiAndGlkZS1lbmQtNicsXG4gICAgICBTRVZFTjogJ3RpZGUtZW5kLTcnLFxuICAgICAgRUlHSFQ6ICd0aWRlLWVuZC04JyxcbiAgICAgIE5JTkU6ICd0aWRlLWVuZC05JyxcbiAgICAgIFRFTjogJ3RpZGUtZW5kLTEwJyxcbiAgICAgIEVMRVZFTjogJ3RpZGUtZW5kLTExJyxcbiAgICAgIFRXRUxWRTogJ3RpZGUtZW5kLTEyJyxcbiAgICAgIFRISVJURUVOOiAndGlkZS1lbmQtMTMnLFxuICAgIH0sXG4gICAgRkxVSUQ6ICd0aWRlLWZsdWlkJyxcbiAgICBJVEVNOiAndGlkZS1ncmlkLWl0ZW0nLFxuICAgIExBWU9VVDogJ3RpZGUtZ3JpZC1sYXlvdXQnLFxuICAgIFNUQVJUOiB7XG4gICAgICBaRVJPOiAndGlkZS1zdGFydC0wJyxcbiAgICAgIE9ORTogJ3RpZGUtc3RhcnQtMScsXG4gICAgICBUV086ICd0aWRlLXN0YXJ0LTInLFxuICAgICAgVEhSRUU6ICd0aWRlLXN0YXJ0LTMnLFxuICAgICAgRk9VUjogJ3RpZGUtc3RhcnQtNCcsXG4gICAgICBGSVZFOiAndGlkZS1zdGFydC01JyxcbiAgICAgIFNJWDogJ3RpZGUtc3RhcnQtNicsXG4gICAgICBTRVZFTjogJ3RpZGUtc3RhcnQtNycsXG4gICAgICBFSUdIVDogJ3RpZGUtc3RhcnQtOCcsXG4gICAgICBOSU5FOiAndGlkZS1zdGFydC05JyxcbiAgICAgIFRFTjogJ3RpZGUtc3RhcnQtMTAnLFxuICAgICAgRUxFVkVOOiAndGlkZS1zdGFydC0xMScsXG4gICAgICBUV0VMVkU6ICd0aWRlLXN0YXJ0LTEyJyxcbiAgICB9LFxuICAgIFhMOiAndGlkZS1ncmlkLXhsJyxcbiAgfSxcbiAgSEVJR0hUOiB7XG4gICAgQVVUTzogJ3RpZGUtaGVpZ2h0LWF1dG8nLFxuICAgIFpFUk86ICd0aWRlLWhlaWdodC0wJyxcbiAgICBGVUxMOiAndGlkZS1oZWlnaHQtZnVsbCcsXG4gICAgTUFYX0ZVTEw6ICd0aWRlLW1heC1oZWlnaHQtZnVsbCcsXG4gIH0sXG4gIElTT0xBVElPTjoge1xuICAgIElTT0xBVEU6ICd0aWRlLWlzb2xhdGUnLFxuICB9LFxuICBMSVNUX0JVTExFVFM6IHtcbiAgICBPRkY6ICd0aWRlLWxpc3Qtbm9uZScsXG4gIH0sXG4gIE1BUkdJTjoge1xuICAgIEJPVFRPTToge1xuICAgICAgQVVUTzogJ3RpZGUtbWFyZ2luLWJvdHRvbS1hdXRvJyxcbiAgICAgIFpFUk86ICd0aWRlLW1hcmdpbi1ib3R0b20tMCcsXG4gICAgICBRVUFSVEVSOiAndGlkZS1tYXJnaW4tYm90dG9tLTEvNCcsXG4gICAgICBIQUxGOiAndGlkZS1tYXJnaW4tYm90dG9tLTEvMicsXG4gICAgICBPTkU6ICd0aWRlLW1hcmdpbi1ib3R0b20tMScsXG4gICAgICBUV086ICd0aWRlLW1hcmdpbi1ib3R0b20tMicsXG4gICAgICBGT1VSOiAndGlkZS1tYXJnaW4tYm90dG9tLTQnLFxuICAgIH0sXG4gICAgRlVMTDoge1xuICAgICAgWkVSTzogJ3RpZGUtbWFyZ2luLTAnLFxuICAgICAgUVVBUlRFUjogJ3RpZGUtbWFyZ2luLTEvNCcsXG4gICAgICBIQUxGOiAndGlkZS1tYXJnaW4tMS8yJyxcbiAgICAgIE9ORTogJ3RpZGUtbWFyZ2luLTEnLFxuICAgICAgVFdPOiAndGlkZS1tYXJnaW4tMicsXG4gICAgICBGT1VSOiAndGlkZS1tYXJnaW4tNCcsXG4gICAgfSxcbiAgICBMRUZUOiB7XG4gICAgICBBVVRPOiAndGlkZS1tYXJnaW4tbGVmdC1hdXRvJyxcbiAgICAgIFpFUk86ICd0aWRlLW1hcmdpbi1sZWZ0LTAnLFxuICAgICAgUVVBUlRFUjogJ3RpZGUtbWFyZ2luLWxlZnQtMS80JyxcbiAgICAgIEhBTEY6ICd0aWRlLW1hcmdpbi1sZWZ0LTEvMicsXG4gICAgICBPTkU6ICd0aWRlLW1hcmdpbi1sZWZ0LTEnLFxuICAgICAgVFdPOiAndGlkZS1tYXJnaW4tbGVmdC0yJyxcbiAgICAgIEZPVVI6ICd0aWRlLW1hcmdpbi1sZWZ0LTQnLFxuICAgIH0sXG4gICAgUklHSFQ6IHtcbiAgICAgIEFVVE86ICd0aWRlLW1hcmdpbi1yaWdodC1hdXRvJyxcbiAgICAgIFpFUk86ICd0aWRlLW1hcmdpbi1yaWdodC0wJyxcbiAgICAgIFFVQVJURVI6ICd0aWRlLW1hcmdpbi1yaWdodC0xLzQnLFxuICAgICAgSEFMRjogJ3RpZGUtbWFyZ2luLXJpZ2h0LTEvMicsXG4gICAgICBPTkU6ICd0aWRlLW1hcmdpbi1yaWdodC0xJyxcbiAgICAgIFRXTzogJ3RpZGUtbWFyZ2luLXJpZ2h0LTInLFxuICAgICAgRk9VUjogJ3RpZGUtbWFyZ2luLXJpZ2h0LTQnLFxuICAgIH0sXG4gICAgVE9QOiB7XG4gICAgICBBVVRPOiAndGlkZS1tYXJnaW4tdG9wLWF1dG8nLFxuICAgICAgWkVSTzogJ3RpZGUtbWFyZ2luLXRvcC0wJyxcbiAgICAgIFFVQVJURVI6ICd0aWRlLW1hcmdpbi10b3AtMS80JyxcbiAgICAgIEhBTEY6ICd0aWRlLW1hcmdpbi10b3AtMS8yJyxcbiAgICAgIE9ORTogJ3RpZGUtbWFyZ2luLXRvcC0xJyxcbiAgICAgIFRXTzogJ3RpZGUtbWFyZ2luLXRvcC0yJyxcbiAgICAgIEZPVVI6ICd0aWRlLW1hcmdpbi10b3AtNCcsXG4gICAgfSxcbiAgICBYOiB7XG4gICAgICBBVVRPOiAndGlkZS1tYXJnaW4teC1hdXRvJyxcbiAgICAgIFpFUk86ICd0aWRlLW1hcmdpbi14LTAnLFxuICAgICAgUVVBUlRFUjogJ3RpZGUtbWFyZ2luLXgtMS80JyxcbiAgICAgIEhBTEY6ICd0aWRlLW1hcmdpbi14LTEvMicsXG4gICAgICBPTkU6ICd0aWRlLW1hcmdpbi14LTEnLFxuICAgICAgVFdPOiAndGlkZS1tYXJnaW4teC0yJyxcbiAgICAgIEZPVVI6ICd0aWRlLW1hcmdpbi14LTQnLFxuICAgIH0sXG4gICAgWToge1xuICAgICAgWkVSTzogJ3RpZGUtbWFyZ2luLXktMCcsXG4gICAgICBRVUFSVEVSOiAndGlkZS1tYXJnaW4teS0xLzQnLFxuICAgICAgSEFMRjogJ3RpZGUtbWFyZ2luLXktMS8yJyxcbiAgICAgIE9ORTogJ3RpZGUtbWFyZ2luLXktMScsXG4gICAgICBUV086ICd0aWRlLW1hcmdpbi15LTInLFxuICAgICAgRk9VUjogJ3RpZGUtbWFyZ2luLXktNCcsXG4gICAgfSxcbiAgfSxcbiAgT0JKRUNUOiB7XG4gICAgQ0VOVEVSOiAndGlkZS1vYmplY3QtY2VudGVyJyxcbiAgICBDT05UQUlOOiAndGlkZS1vYmplY3QtY29udGFpbicsXG4gICAgQ09WRVI6ICd0aWRlLW9iamVjdC1jb3ZlcicsXG4gICAgU0NBTEVfRE9XTjogJ3RpZGUtb2JqZWN0LXNjYWxlLWRvd24nLFxuICB9LFxuICBPUEFDSVRZOiB7XG4gICAgT0ZGOiAndGlkZS1vcGFjaXR5LW5vbmUnLFxuICAgIE9OOiAndGlkZS1vcGFjaXR5JyxcbiAgfSxcbiAgT1ZFUkZMT1c6IHtcbiAgICBYOiB7XG4gICAgICBBVVRPOiAndGlkZS14LWF1dG8nLFxuICAgICAgSElEREVOOiAndGlkZS14LWhpZGRlbicsXG4gICAgICBTQ1JPTEw6ICd0aWRlLXgtc2Nyb2xsJyxcbiAgICB9LFxuICAgIFhZOiB7XG4gICAgICBBVVRPOiAndGlkZS14eS1hdXRvJyxcbiAgICAgIEhJRERFTjogJ3RpZGUteHktaGlkZGVuJyxcbiAgICB9LFxuICAgIFk6IHtcbiAgICAgIEFVVE86ICd0aWRlLXktYXV0bycsXG4gICAgICBISURERU46ICd0aWRlLXktaGlkZGVuJyxcbiAgICB9LFxuICB9LFxuICBQQURESU5HOiB7XG4gICAgQk9UVE9NOiB7XG4gICAgICBaRVJPOiAndGlkZS1wYWRkaW5nLWJvdHRvbS0wJyxcbiAgICAgIFFVQVJURVI6ICd0aWRlLXBhZGRpbmctYm90dG9tLTEvNCcsXG4gICAgICBIQUxGOiAndGlkZS1wYWRkaW5nLWJvdHRvbS0xLzInLFxuICAgICAgT05FOiAndGlkZS1wYWRkaW5nLWJvdHRvbS0xJyxcbiAgICAgIFRXTzogJ3RpZGUtcGFkZGluZy1ib3R0b20tMicsXG4gICAgICBGT1VSOiAndGlkZS1wYWRkaW5nLWJvdHRvbS00JyxcbiAgICB9LFxuICAgIEZVTEw6IHtcbiAgICAgIFpFUk86ICd0aWRlLXBhZGRpbmctMCcsXG4gICAgICBRVUFSVEVSOiAndGlkZS1wYWRkaW5nLTEvNCcsXG4gICAgICBIQUxGOiAndGlkZS1wYWRkaW5nLTEvMicsXG4gICAgICBPTkU6ICd0aWRlLXBhZGRpbmctMScsXG4gICAgICBUV086ICd0aWRlLXBhZGRpbmctMicsXG4gICAgICBGT1VSOiAndGlkZS1wYWRkaW5nLTQnLFxuICAgIH0sXG4gICAgTEVGVDoge1xuICAgICAgWkVSTzogJ3RpZGUtcGFkZGluZy1sZWZ0LTAnLFxuICAgICAgUVVBUlRFUjogJ3RpZGUtcGFkZGluZy1sZWZ0LTEvNCcsXG4gICAgICBIQUxGOiAndGlkZS1wYWRkaW5nLWxlZnQtMS8yJyxcbiAgICAgIE9ORTogJ3RpZGUtcGFkZGluZy1sZWZ0LTEnLFxuICAgICAgVFdPOiAndGlkZS1wYWRkaW5nLWxlZnQtMicsXG4gICAgICBGT1VSOiAndGlkZS1wYWRkaW5nLWxlZnQtNCcsXG4gICAgfSxcbiAgICBSSUdIVDoge1xuICAgICAgWkVSTzogJ3RpZGUtcGFkZGluZy1yaWdodC0wJyxcbiAgICAgIFFVQVJURVI6ICd0aWRlLXBhZGRpbmctcmlnaHQtMS80JyxcbiAgICAgIEhBTEY6ICd0aWRlLXBhZGRpbmctcmlnaHQtMS8yJyxcbiAgICAgIE9ORTogJ3RpZGUtcGFkZGluZy1yaWdodC0xJyxcbiAgICAgIFRXTzogJ3RpZGUtcGFkZGluZy1yaWdodC0yJyxcbiAgICAgIEZPVVI6ICd0aWRlLXBhZGRpbmctcmlnaHQtNCcsXG4gICAgfSxcbiAgICBUT1A6IHtcbiAgICAgIFpFUk86ICd0aWRlLXBhZGRpbmctdG9wLTAnLFxuICAgICAgUVVBUlRFUjogJ3RpZGUtcGFkZGluZy10b3AtMS80JyxcbiAgICAgIEhBTEY6ICd0aWRlLXBhZGRpbmctdG9wLTEvMicsXG4gICAgICBPTkU6ICd0aWRlLXBhZGRpbmctdG9wLTEnLFxuICAgICAgVFdPOiAndGlkZS1wYWRkaW5nLXRvcC0yJyxcbiAgICAgIEZPVVI6ICd0aWRlLXBhZGRpbmctdG9wLTQnLFxuICAgIH0sXG4gICAgWDoge1xuICAgICAgWkVSTzogJ3RpZGUtcGFkZGluZy14LTAnLFxuICAgICAgUVVBUlRFUjogJ3RpZGUtcGFkZGluZy14LTEvNCcsXG4gICAgICBIQUxGOiAndGlkZS1wYWRkaW5nLXgtMS8yJyxcbiAgICAgIE9ORTogJ3RpZGUtcGFkZGluZy14LTEnLFxuICAgICAgVFdPOiAndGlkZS1wYWRkaW5nLXgtMicsXG4gICAgICBGT1VSOiAndGlkZS1wYWRkaW5nLXgtNCcsXG4gICAgfSxcbiAgICBZOiB7XG4gICAgICBaRVJPOiAndGlkZS1wYWRkaW5nLXktMCcsXG4gICAgICBRVUFSVEVSOiAndGlkZS1wYWRkaW5nLXktMS80JyxcbiAgICAgIEhBTEY6ICd0aWRlLXBhZGRpbmcteS0xLzInLFxuICAgICAgT05FOiAndGlkZS1wYWRkaW5nLXktMScsXG4gICAgICBUV086ICd0aWRlLXBhZGRpbmcteS0yJyxcbiAgICAgIEZPVVI6ICd0aWRlLXBhZGRpbmcteS00JyxcbiAgICB9LFxuICB9LFxuICBQT0lOVEVSX0VWRU5UUzoge1xuICAgIE9GRjogJ3RpZGUtcG9pbnRlci1ldmVudHMtbm9uZScsXG4gICAgT046ICd0aWRlLXBvaW50ZXItZXZlbnRzJyxcbiAgfSxcbiAgUE9TSVRJT046IHtcbiAgICBBQlNPTFVURTogJ3RpZGUtcG9zaXRpb24tYWJzb2x1dGUnLFxuICAgIEZJWEVEOiAndGlkZS1wb3NpdGlvbi1maXhlZCcsXG4gICAgUkVMQVRJVkU6ICd0aWRlLXBvc2l0aW9uLXJlbGF0aXZlJyxcbiAgICBTVEFUSUM6ICd0aWRlLXBvc2l0aW9uLXN0YXRpYycsXG4gICAgU1RJQ0tZOiAndGlkZS1wb3NpdGlvbi1zdGlja3knLFxuICB9LFxuICBQT1NJVElPTklORzoge1xuICAgIEJPVFRPTTogJ3RpZGUtYm90dG9tLTAnLFxuICAgIExFRlQ6ICd0aWRlLWxlZnQtMCcsXG4gICAgUklHSFQ6ICd0aWRlLXJpZ2h0LTAnLFxuICAgIFRPUDogJ3RpZGUtdG9wLTAnLFxuICB9LFxuICBSQVRJTzoge1xuICAgIE9ORV9UT19PTkU6ICd0aWRlLXJhdGlvLTEvMScsXG4gICAgU0lYVEVFTl9UT19OSU5FOiAndGlkZS1yYXRpby0xNi85JyxcbiAgICBUSFJFRV9UT19UV086ICd0aWRlLXJhdGlvLTMvMicsXG4gIH0sXG4gIFNDUk9MTEJBUjoge1xuICAgIE9GRjogJ3RpZGUtc2Nyb2xsYmFyLW5vbmUnLFxuICB9LFxuICBTSEFET1c6IHtcbiAgICBJTklUSUFMOiAndGlkZS1zaGFkb3ctaW5pdGlhbCcsXG4gICAgQk9UVE9NOiAndGlkZS1zaGFkb3ctYm90dG9tJyxcbiAgICBUT1A6ICd0aWRlLXNoYWRvdy10b3AnLFxuICAgIFRFWFQ6ICd0aWRlLXNoYWRvdy10ZXh0JyxcbiAgfSxcbiAgU05BUDoge1xuICAgIE9OOiAndGlkZS1zY3JvbGwtc25hcCcsXG4gIH0sXG4gIFNOQVBfQUxJR046IHtcbiAgICBTVEFSVDogJ3RpZGUtc2Nyb2xsLXNuYXAtc3RhcnQnLFxuICB9LFxuICBURVhUX1RSQU5TRk9STToge1xuICAgIExPV0VSOiAndGlkZS10ZXh0LXRyYW5zZm9ybS1sb3dlcicsXG4gICAgTk9ORTogJ3RpZGUtdGV4dC10cmFuc2Zvcm0tbm9uZScsXG4gICAgVVBQRVI6ICd0aWRlLXRleHQtdHJhbnNmb3JtLXVwcGVyJyxcbiAgfSxcbiAgVU5ERVJMSU5FOiB7XG4gICAgSE9WRVI6ICd0aWRlLXVuZGVybGluZS1ob3ZlcicsXG4gICAgT0ZGOiAndGlkZS11bmRlcmxpbmUtbm9uZScsXG4gICAgT046ICd0aWRlLXVuZGVybGluZScsXG4gIH0sXG4gIFZJU0lCSUxJVFk6IHtcbiAgICBPRkY6ICd0aWRlLXZpc2libGUtbm9uZScsXG4gICAgT046ICd0aWRlLXZpc2libGUnLFxuICB9LFxuICBXSElURVNQQUNFX1dSQVA6IHtcbiAgICBPRkY6ICd0aWRlLXdoaXRlc3BhY2Utbm93cmFwJyxcbiAgfSxcbiAgV0lEVEg6IHtcbiAgICBBVVRPOiAndGlkZS13aWR0aC1hdXRvJyxcbiAgICBaRVJPOiAndGlkZS13aWR0aC0wJyxcbiAgICBGVUxMOiAndGlkZS13aWR0aC1mdWxsJyxcbiAgICBNQVhfRlVMTDogJ3RpZGUtbWF4LXdpZHRoLWZ1bGwnLFxuICB9LFxuICBaX0lOREVYOiB7XG4gICAgSU5JVElBTDogJ3RpZGUtei1pbmRleC1pbml0aWFsJyxcbiAgICBPTkU6ICd0aWRlLXotaW5kZXgtMScsXG4gIH0sXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBDc3NVdGlsaXR5ID0gKHR5cGVvZiBDU1MpW2tleW9mIHR5cGVvZiBDU1NdO1xuXG5leHBvcnQgY29uc3QgY3NzU29ydE9yZGVyID0gW1xuICBDU1MuRElTUExBWS5CTE9DSyxcbiAgQ1NTLkRJU1BMQVkuQ09OVEVOVFMsXG4gIENTUy5ESVNQTEFZLkZMRVgsXG4gIENTUy5ESVNQTEFZLkdSSUQsXG4gIENTUy5ESVNQTEFZLk5PTkUsXG4gIENTUy5ESVNQTEFZLklOSVRJQUwsXG4gIENTUy5ESVNQTEFZLklOTElORSxcbiAgQ1NTLkRJU1BMQVkuSU5MSU5FX0JMT0NLLFxuICBDU1MuRElTUExBWS5JTkxJTkVfRkxFWCxcbiAgQ1NTLkFYSVMxLkFST1VORCxcbiAgQ1NTLkFYSVMxLkJFVFdFRU4sXG4gIENTUy5BWElTMS5DRU5URVIsXG4gIENTUy5BWElTMS5FTkQsXG4gIENTUy5BWElTMS5TVEFSVCxcbiAgQ1NTLkFYSVMyLkFST1VORCxcbiAgQ1NTLkFYSVMyLkNFTlRFUixcbiAgQ1NTLkFYSVMyLkVORCxcbiAgQ1NTLkFYSVMyLlNUQVJULFxuICBDU1MuRkxFWC5ESVJFQ1RJT04uQ09MVU1OLFxuICBDU1MuRkxFWC5ESVJFQ1RJT04uQ09MVU1OX1JFVkVSU0UsXG4gIENTUy5GTEVYLkRJUkVDVElPTi5ST1csXG4gIENTUy5GTEVYLkRJUkVDVElPTi5ST1dfUkVWRVJTRSxcbiAgQ1NTLkdBUC5PTkUsXG4gIENTUy5HQVAuSEFMRixcbiAgQ1NTLkdBUC5RVUFSVEVSLFxuICBDU1MuR0FQLlRXTyxcbiAgQ1NTLkdBUC5GT1VSLFxuICBDU1MuRkxFWC5CQVNJUy5aRVJPLFxuICBDU1MuRkxFWC5HUk9XLk9OLFxuICBDU1MuRkxFWC5HUk9XLk9GRixcbiAgQ1NTLkZMRVguU0hSSU5LLk9OLFxuICBDU1MuRkxFWC5TSFJJTksuT0ZGLFxuICBDU1MuRkxFWC5XUkFQLFxuICBDU1MuUE9TSVRJT04uQUJTT0xVVEUsXG4gIENTUy5QT1NJVElPTi5GSVhFRCxcbiAgQ1NTLlBPU0lUSU9OLlJFTEFUSVZFLFxuICBDU1MuUE9TSVRJT04uU1RJQ0tZLFxuICBDU1MuUE9TSVRJT05JTkcuVE9QLFxuICBDU1MuUE9TSVRJT05JTkcuUklHSFQsXG4gIENTUy5QT1NJVElPTklORy5CT1RUT00sXG4gIENTUy5QT1NJVElPTklORy5MRUZULFxuICBDU1MuQk9YX1NJWklORy5CT1JERVJfQk9YLFxuICBDU1MuQk9YX1NJWklORy5DT05URU5UX0JPWCxcbiAgQ1NTLk1BUkdJTi5GVUxMLlpFUk8sXG4gIENTUy5NQVJHSU4uRlVMTC5PTkUsXG4gIENTUy5NQVJHSU4uRlVMTC5IQUxGLFxuICBDU1MuTUFSR0lOLkZVTEwuUVVBUlRFUixcbiAgQ1NTLk1BUkdJTi5GVUxMLlRXTyxcbiAgQ1NTLk1BUkdJTi5GVUxMLkZPVVIsXG4gIENTUy5NQVJHSU4uWS5aRVJPLFxuICBDU1MuTUFSR0lOLlkuT05FLFxuICBDU1MuTUFSR0lOLlkuSEFMRixcbiAgQ1NTLk1BUkdJTi5ZLlFVQVJURVIsXG4gIENTUy5NQVJHSU4uWS5UV08sXG4gIENTUy5NQVJHSU4uWS5GT1VSLFxuICBDU1MuTUFSR0lOLlRPUC5aRVJPLFxuICBDU1MuTUFSR0lOLlRPUC5PTkUsXG4gIENTUy5NQVJHSU4uVE9QLkhBTEYsXG4gIENTUy5NQVJHSU4uVE9QLlFVQVJURVIsXG4gIENTUy5NQVJHSU4uVE9QLlRXTyxcbiAgQ1NTLk1BUkdJTi5UT1AuRk9VUixcbiAgQ1NTLk1BUkdJTi5YLlpFUk8sXG4gIENTUy5NQVJHSU4uWC5PTkUsXG4gIENTUy5NQVJHSU4uWC5IQUxGLFxuICBDU1MuTUFSR0lOLlguUVVBUlRFUixcbiAgQ1NTLk1BUkdJTi5YLlRXTyxcbiAgQ1NTLk1BUkdJTi5YLkZPVVIsXG4gIENTUy5NQVJHSU4uWC5BVVRPLFxuICBDU1MuTUFSR0lOLlJJR0hULlpFUk8sXG4gIENTUy5NQVJHSU4uUklHSFQuT05FLFxuICBDU1MuTUFSR0lOLlJJR0hULkhBTEYsXG4gIENTUy5NQVJHSU4uUklHSFQuUVVBUlRFUixcbiAgQ1NTLk1BUkdJTi5SSUdIVC5UV08sXG4gIENTUy5NQVJHSU4uUklHSFQuRk9VUixcbiAgQ1NTLk1BUkdJTi5SSUdIVC5BVVRPLFxuICBDU1MuTUFSR0lOLkJPVFRPTS5aRVJPLFxuICBDU1MuTUFSR0lOLkJPVFRPTS5PTkUsXG4gIENTUy5NQVJHSU4uQk9UVE9NLkhBTEYsXG4gIENTUy5NQVJHSU4uQk9UVE9NLlFVQVJURVIsXG4gIENTUy5NQVJHSU4uQk9UVE9NLlRXTyxcbiAgQ1NTLk1BUkdJTi5CT1RUT00uRk9VUixcbiAgQ1NTLk1BUkdJTi5MRUZULlpFUk8sXG4gIENTUy5NQVJHSU4uTEVGVC5PTkUsXG4gIENTUy5NQVJHSU4uTEVGVC5IQUxGLFxuICBDU1MuTUFSR0lOLkxFRlQuUVVBUlRFUixcbiAgQ1NTLk1BUkdJTi5MRUZULlRXTyxcbiAgQ1NTLk1BUkdJTi5MRUZULkZPVVIsXG4gIENTUy5NQVJHSU4uTEVGVC5BVVRPLFxuICBDU1MuQk9SREVSLkZVTEwuT05FLFxuICBDU1MuQk9SREVSLkZVTEwuVFdPLFxuICBDU1MuQk9SREVSLlRPUC5PTkUsXG4gIENTUy5CT1JERVIuVE9QLlRXTyxcbiAgQ1NTLkJPUkRFUi5SSUdIVC5PTkUsXG4gIENTUy5CT1JERVIuUklHSFQuVFdPLFxuICBDU1MuQk9SREVSLkJPVFRPTS5PTkUsXG4gIENTUy5CT1JERVIuQk9UVE9NLlRXTyxcbiAgQ1NTLkJPUkRFUi5MRUZULk9ORSxcbiAgQ1NTLkJPUkRFUi5MRUZULlRXTyxcbiAgQ1NTLkJPUkRFUi5SQURJVVMuT05FLFxuICBDU1MuQk9SREVSLlJBRElVUy5IQUxGLFxuICBDU1MuQk9SREVSLlJBRElVUy5RVUFSVEVSLFxuICBDU1MuQk9SREVSLlJBRElVUy5GVUxMLFxuICBDU1MuUEFERElORy5GVUxMLlpFUk8sXG4gIENTUy5QQURESU5HLkZVTEwuT05FLFxuICBDU1MuUEFERElORy5GVUxMLkhBTEYsXG4gIENTUy5QQURESU5HLkZVTEwuUVVBUlRFUixcbiAgQ1NTLlBBRERJTkcuRlVMTC5UV08sXG4gIENTUy5QQURESU5HLkZVTEwuRk9VUixcbiAgQ1NTLlBBRERJTkcuWS5aRVJPLFxuICBDU1MuUEFERElORy5ZLk9ORSxcbiAgQ1NTLlBBRERJTkcuWS5IQUxGLFxuICBDU1MuUEFERElORy5ZLlFVQVJURVIsXG4gIENTUy5QQURESU5HLlkuVFdPLFxuICBDU1MuUEFERElORy5ZLkZPVVIsXG4gIENTUy5QQURESU5HLlRPUC5aRVJPLFxuICBDU1MuUEFERElORy5UT1AuT05FLFxuICBDU1MuUEFERElORy5UT1AuSEFMRixcbiAgQ1NTLlBBRERJTkcuVE9QLlFVQVJURVIsXG4gIENTUy5QQURESU5HLlRPUC5UV08sXG4gIENTUy5QQURESU5HLlRPUC5GT1VSLFxuICBDU1MuUEFERElORy5YLlpFUk8sXG4gIENTUy5QQURESU5HLlguT05FLFxuICBDU1MuUEFERElORy5YLkhBTEYsXG4gIENTUy5QQURESU5HLlguUVVBUlRFUixcbiAgQ1NTLlBBRERJTkcuWC5UV08sXG4gIENTUy5QQURESU5HLlguRk9VUixcbiAgQ1NTLlBBRERJTkcuUklHSFQuWkVSTyxcbiAgQ1NTLlBBRERJTkcuUklHSFQuT05FLFxuICBDU1MuUEFERElORy5SSUdIVC5IQUxGLFxuICBDU1MuUEFERElORy5SSUdIVC5RVUFSVEVSLFxuICBDU1MuUEFERElORy5SSUdIVC5UV08sXG4gIENTUy5QQURESU5HLlJJR0hULkZPVVIsXG4gIENTUy5QQURESU5HLkJPVFRPTS5aRVJPLFxuICBDU1MuUEFERElORy5CT1RUT00uT05FLFxuICBDU1MuUEFERElORy5CT1RUT00uSEFMRixcbiAgQ1NTLlBBRERJTkcuQk9UVE9NLlFVQVJURVIsXG4gIENTUy5QQURESU5HLkJPVFRPTS5UV08sXG4gIENTUy5QQURESU5HLkJPVFRPTS5GT1VSLFxuICBDU1MuUEFERElORy5MRUZULlpFUk8sXG4gIENTUy5QQURESU5HLkxFRlQuT05FLFxuICBDU1MuUEFERElORy5MRUZULkhBTEYsXG4gIENTUy5QQURESU5HLkxFRlQuUVVBUlRFUixcbiAgQ1NTLlBBRERJTkcuTEVGVC5UV08sXG4gIENTUy5QQURESU5HLkxFRlQuRk9VUixcbiAgQ1NTLldJRFRILk1BWF9GVUxMLFxuICBDU1MuV0lEVEguWkVSTyxcbiAgQ1NTLldJRFRILkZVTEwsXG4gIENTUy5IRUlHSFQuWkVSTyxcbiAgQ1NTLkhFSUdIVC5GVUxMLFxuICBDU1MuQUxJR04uWS5NSURETEUsXG4gIENTUy5CUkVBS19XT1JELFxuICBDU1MuQ1VSU09SLk5PVF9BTExPV0VELFxuICBDU1MuQ1VSU09SLlBPSU5URVIsXG4gIENTUy5DVVJTT1IuVEVYVCxcbiAgQ1NTLkZPTlQuU0laRS5UV0VMVkUsXG4gIENTUy5GT05ULlNJWkUuRk9VUlRFRU4sXG4gIENTUy5GT05ULlNJWkUuU0lYVEVFTixcbiAgQ1NTLkZPTlQuU0laRS5UV0VOVFksXG4gIENTUy5GT05ULlNJWkUuVFdFTlRZX0ZPVVIsXG4gIENTUy5GT05ULlNJWkUuVEhJUlRZX1RXTyxcbiAgQ1NTLkZPTlQuV0VJR0hULkZPVVJfSFVORFJFRCxcbiAgQ1NTLkZPTlQuV0VJR0hULkZJVkVfSFVORFJFRCxcbiAgQ1NTLkZPTlQuV0VJR0hULlNJWF9IVU5EUkVELFxuICBDU1MuRk9OVC5XRUlHSFQuU0VWRU5fSFVORFJFRCxcbiAgQ1NTLkxJU1RfQlVMTEVUUy5PRkYsXG4gIENTUy5PQkpFQ1QuQ0VOVEVSLFxuICBDU1MuT0JKRUNULkNPTlRBSU4sXG4gIENTUy5PQkpFQ1QuQ09WRVIsXG4gIENTUy5PQkpFQ1QuU0NBTEVfRE9XTixcbiAgQ1NTLlBPSU5URVJfRVZFTlRTLk9OLFxuICBDU1MuUE9JTlRFUl9FVkVOVFMuT0ZGLFxuICBDU1MuU0NST0xMQkFSLk9GRixcbiAgQ1NTLlNIQURPVy5CT1RUT00sXG4gIENTUy5TSEFET1cuVE9QLFxuICBDU1MuU05BUC5PTixcbiAgQ1NTLlNOQVBfQUxJR04uU1RBUlQsXG4gIENTUy5BTElHTi5YLkxFRlQsXG4gIENTUy5BTElHTi5YLkNFTlRFUixcbiAgQ1NTLkFMSUdOLlguUklHSFQsXG4gIENTUy5URVhUX1RSQU5TRk9STS5MT1dFUixcbiAgQ1NTLlRFWFRfVFJBTlNGT1JNLk5PTkUsXG4gIENTUy5URVhUX1RSQU5TRk9STS5VUFBFUixcbiAgQ1NTLlVOREVSTElORS5IT1ZFUixcbiAgQ1NTLlVOREVSTElORS5PRkYsXG4gIENTUy5VTkRFUkxJTkUuT04sXG4gIENTUy5WSVNJQklMSVRZLk9OLFxuICBDU1MuVklTSUJJTElUWS5PRkYsXG4gIENTUy5XSElURVNQQUNFX1dSQVAuT0ZGLFxuICBDU1MuT1ZFUkZMT1cuWFkuQVVUTyxcbiAgQ1NTLk9WRVJGTE9XLlhZLkhJRERFTixcbiAgQ1NTLk9WRVJGTE9XLlguQVVUTyxcbiAgQ1NTLk9WRVJGTE9XLlguSElEREVOLFxuICBDU1MuT1ZFUkZMT1cuWC5TQ1JPTEwsXG4gIENTUy5PVkVSRkxPVy5ZLkFVVE8sXG4gIENTUy5PVkVSRkxPVy5ZLkhJRERFTixcbiAgQ1NTLlpfSU5ERVguT05FLFxuXSBhcyBjb25zdDtcbiIsImV4cG9ydCBjb25zdCBSRUFMTSA9IHtcbiAgQUVSTzogJ2Flcm8nLFxuICBBVFY6ICdhdHYnLFxuICBCT0FUTUFSVDogJ2JvYXRtYXJ0JyxcbiAgQ1lDTEU6ICdjeWNsZScsXG4gIEVRVUlQTUVOVDogJ2VxdWlwbWVudCcsXG4gIFBXQzogJ3B3YycsXG4gIFJWOiAncnYnLFxuICBTTk9XOiAnc25vdycsXG4gIFRSVUNLOiAndHJ1Y2snLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgUmVhbG1LZXkgPSBrZXlvZiB0eXBlb2YgUkVBTE07XG5leHBvcnQgdHlwZSBSZWFsbSA9ICh0eXBlb2YgUkVBTE0pW1JlYWxtS2V5XTtcbiIsImV4cG9ydCBjb25zdCBTSVpFID0ge1xuICBMQVJHRTogJ2xhcmdlJyxcbiAgU01BTEw6ICdzbWFsbCcsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBTaXplID0gKHR5cGVvZiBTSVpFKVtrZXlvZiB0eXBlb2YgU0laRV07XG5cbmV4cG9ydCBjb25zdCBTSVpFX0JVVFRPTiA9IHtcbiAgTEFSR0U6ICdsYXJnZScsXG4gIFNNQUxMOiAnc21hbGwnLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgU2l6ZUJ1dHRvbiA9ICh0eXBlb2YgU0laRSlba2V5b2YgdHlwZW9mIFNJWkVdO1xuIiwiY29uc3QgY2FwaXRhbGl6ZUZpcnN0ID0gKHN0cmluZzogc3RyaW5nKSA9PiB7XG4gIHJldHVybiBzdHJpbmcuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHJpbmcuc2xpY2UoMSk7XG59O1xuXG5jb25zdCBmb3JtYXRDYW1lbENhc2UgPSAoaW5wdXQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIHJldHVybiBpbnB1dCAmJiB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnXG4gICAgPyBpbnB1dFxuICAgICAgICAucmVwbGFjZSgvXltcXHNfLV0vLCAnJylcbiAgICAgICAgLnJlcGxhY2UoLyhbYS16XXsxfSkoW0EtWl17MX0pL2csICckMSAkMicpXG4gICAgICAgIC5yZXBsYWNlKC9bXFxzXy1dL2csICcgJylcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLnNwbGl0KCcgJylcbiAgICAgICAgLm1hcCgod29yZCwgaW5kZXgpID0+IChpbmRleCA9PT0gMCA/IHdvcmQgOiB3b3JkLnNsaWNlKDAsIDEpLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpKSlcbiAgICAgICAgLmpvaW4oJycpXG4gICAgOiBpbnB1dDtcbn07XG5cbmNvbnN0IGZvcm1hdEtlYmFiQ2FzZSA9IChpbnB1dDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIGlucHV0ICYmIHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZydcbiAgICA/IGlucHV0XG4gICAgICAgIC5yZXBsYWNlKC8oW2Etel17MX0pKFtBLVpdezF9KS9nLCAnJDEgJDInKVxuICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAucmVwbGFjZSgvW1xcc18tXS9nLCAnLScpXG4gICAgOiBpbnB1dDtcbn07XG5cbmNvbnN0IGZvcm1hdExhYmVsID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgbGFiZWxNYXA6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgZmFsc2U6ICdObycsXG4gICAgdHJ1ZTogJ1llcycsXG4gIH07XG4gIHJldHVybiBPYmplY3QuaGFzT3duKGxhYmVsTWFwLCB2YWx1ZSkgPyBsYWJlbE1hcFt2YWx1ZV0gOiB2YWx1ZTtcbn07XG5cbmNvbnN0IGZvcm1hdE51bWJlciA9IChpbnB1dDogbnVtYmVyIHwgc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgbGV0IG91dHB1dCA9IGlucHV0ICYmIHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicgPyBuZXcgSW50bC5OdW1iZXJGb3JtYXQoKS5mb3JtYXQoaW5wdXQpIDogU3RyaW5nKGlucHV0IHx8ICcnKTtcbiAgbGV0IGRpZ2l0cyA9IG91dHB1dDtcblxuICBpZiAoaW5wdXQgJiYgdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgIGRpZ2l0cyA9IGRpZ2l0cy5yZXBsYWNlKC9cXEQvZywgJycpO1xuICAgIGlmIChOdW1iZXIoZGlnaXRzKSkge1xuICAgICAgb3V0cHV0ID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KCkuZm9ybWF0KE51bWJlcihkaWdpdHMpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0cHV0ID0gJzAnO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59O1xuXG5jb25zdCBmb3JtYXRQYXNjYWxDYXNlID0gKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gaW5wdXQgJiYgdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJ1xuICAgID8gaW5wdXRcbiAgICAgICAgLnJlcGxhY2UoLyhbYS16XXsxfSkoW0EtWl17MX0pL2csICckMSAkMicpXG4gICAgICAgIC5yZXBsYWNlKC9bXFxzXy1dL2csICcgJylcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLnNwbGl0KCcgJylcbiAgICAgICAgLm1hcCgod29yZCkgPT4gd29yZC5zbGljZSgwLCAxKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSlcbiAgICAgICAgLmpvaW4oJycpXG4gICAgOiBpbnB1dDtcbn07XG5cbmNvbnN0IGZvcm1hdFBob25lID0gKGlucHV0OiBudW1iZXIgfCBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBsZXQgb3V0cHV0ID0gaW5wdXQgJiYgdHlwZW9mIGlucHV0ID09PSAnbnVtYmVyJyA/IFN0cmluZyhpbnB1dCkgOiBTdHJpbmcoaW5wdXQgfHwgJycpO1xuICBsZXQgZGlnaXRzID0gb3V0cHV0O1xuICBkaWdpdHMgPSBkaWdpdHMucmVwbGFjZSgvXFxEL2csICcnKTtcblxuICBzd2l0Y2ggKGRpZ2l0cy5sZW5ndGgpIHtcbiAgICBjYXNlIDc6XG4gICAgICBvdXRwdXQgPSBgJHtkaWdpdHMuc2xpY2UoMCwgMyl9LSR7ZGlnaXRzLnNsaWNlKDMpfWA7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDEwOlxuICAgICAgb3V0cHV0ID0gYCR7ZGlnaXRzLnNsaWNlKDAsIDMpfS0ke2RpZ2l0cy5zbGljZSgzLCA2KX0tJHtkaWdpdHMuc2xpY2UoNil9YDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTE6XG4gICAgICBvdXRwdXQgPSBgJHtkaWdpdHMuc2xpY2UoMCwgMSl9LSR7ZGlnaXRzLnNsaWNlKDEsIDQpfS0ke2RpZ2l0cy5zbGljZSg0LCA3KX0tJHtkaWdpdHMuc2xpY2UoNyl9YDtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBvdXRwdXQgPSBkaWdpdHM7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59O1xuXG5jb25zdCBmb3JtYXRQcmljZSA9IChpbnB1dDogbnVtYmVyIHwgc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3Qgb3V0cHV0ID0gaW5wdXQgPyBmb3JtYXROdW1iZXIoaW5wdXQpIDogU3RyaW5nKGlucHV0IHx8ICcwJyk7XG4gIHJldHVybiBgJCR7b3V0cHV0fWA7XG59O1xuXG5jb25zdCBmb3JtYXRRdW90ZXMgPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICBpZiAodmFsdWUuc3RhcnRzV2l0aCgnXCInKSAmJiB2YWx1ZS5lbmRzV2l0aCgnXCInKSkge1xuICAgIHJldHVybiB2YWx1ZS5zbGljZSgxLCAtMSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59O1xuXG5jb25zdCBmb3JtYXRTZW50ZW5jZUNhc2UgPSAoaW5wdXQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGxldCBzZW50ZW5jZUNhc2UgPSBpbnB1dDtcblxuICBpZiAoaW5wdXQgJiYgdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IGxvd2VyQ2FzZSA9IGlucHV0XG4gICAgICAucmVwbGFjZSgvKFthLXpdezF9KShbQS1aXXsxfSkvZywgJyQxICQyJylcbiAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAucmVwbGFjZSgvW1xcc18tXS9nLCAnICcpO1xuXG4gICAgc2VudGVuY2VDYXNlID0gbG93ZXJDYXNlLnNsaWNlKDAsIDEpLnRvVXBwZXJDYXNlKCkgKyBsb3dlckNhc2Uuc2xpY2UoMSk7XG4gIH1cblxuICByZXR1cm4gc2VudGVuY2VDYXNlO1xufTtcblxuY29uc3QgZm9ybWF0U25ha2VDYXNlID0gKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gaW5wdXQgJiYgdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJ1xuICAgID8gaW5wdXRcbiAgICAgICAgLnJlcGxhY2UoLyhbYS16XXsxfSkoW0EtWl17MX0pL2csICckMSAkMicpXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgIC5yZXBsYWNlKC9bXFxzXy1dL2csICdfJylcbiAgICA6IGlucHV0O1xufTtcblxuY29uc3QgZm9ybWF0VGl0bGVDYXNlID0gKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gaW5wdXQgJiYgdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJ1xuICAgID8gaW5wdXRcbiAgICAgICAgLnJlcGxhY2UoLyhbYS16XXsxfSkoW0EtWl17MX0pL2csICckMSAkMicpXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgIC5yZXBsYWNlKC9bXFxzXy1dL2csICcgJylcbiAgICAgICAgLnNwbGl0KCcgJylcbiAgICAgICAgLm1hcCgod29yZCkgPT4gd29yZC5zbGljZSgwLCAxKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSlcbiAgICAgICAgLmpvaW4oJyAnKVxuICAgIDogaW5wdXQ7XG59O1xuXG5jb25zdCBmb3JtYXRVcmxGcm9tUm9vdCA9ICh1cmw6IHN0cmluZykgPT4ge1xuICBjb25zdCB1cmxGb3JtYXR0ZWQgPSB1cmwuc3BsaXQoJy5jb20vJyk7XG5cbiAgcmV0dXJuIHVybEZvcm1hdHRlZC5sZW5ndGggPiAxID8gYC8ke3VybEZvcm1hdHRlZFsxXX1gIDogdXJsO1xufTtcblxuY29uc3QgZm9ybWF0V2VpZ2h0ID0gKGlucHV0OiBudW1iZXIgfCBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBvdXRwdXQgPSBpbnB1dCA/IGZvcm1hdE51bWJlcihpbnB1dCkgOiBTdHJpbmcoaW5wdXQgfHwgJzAnKTtcbiAgcmV0dXJuIGAke291dHB1dH0gbGJzYDtcbn07XG5cbmNvbnN0IGdldEFydGljbGUgPSAobm91bjogc3RyaW5nLCBpc1BsdXJhbCA9IGZhbHNlLCBpc0RlZmluaXRlID0gZmFsc2UpID0+IHtcbiAgY29uc3Qgdm93ZWxzID0gWydhJywgJ2UnLCAnaScsICdvJywgJ3UnXTtcbiAgY29uc3QgaXNWb3dlbExlYWRpbmcgPSB2b3dlbHMuaW5jbHVkZXMobm91bi5jaGFyQXQoMCkpO1xuXG4gIHJldHVybiBpc0RlZmluaXRlID8gJ3RoZScgOiBpc1BsdXJhbCA/ICdzb21lJyA6IGlzVm93ZWxMZWFkaW5nID8gJ2FuJyA6ICdhJztcbn07XG5cbmNvbnN0IHByaWNlVG9OdW1iZXIgPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICBpZiAoTnVtYmVyLmlzTmFOKE51bWJlcih2YWx1ZSkpKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKCckJywgJycpO1xuICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvLC9nLCAnJyk7XG4gIH1cbiAgcmV0dXJuIHBhcnNlSW50KHZhbHVlLCAxMCk7XG59O1xuXG5jb25zdCB1bmZvcm1hdFByaWNlID0gKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBvdXRwdXQgPSBpbnB1dC5yZXBsYWNlKC9cXCQvZywgJycpLnJlcGxhY2UoLywvZywgJycpO1xuICByZXR1cm4gYCR7b3V0cHV0fWA7XG59O1xuXG5leHBvcnQge1xuICBjYXBpdGFsaXplRmlyc3QsXG4gIGZvcm1hdENhbWVsQ2FzZSxcbiAgZm9ybWF0S2ViYWJDYXNlLFxuICBmb3JtYXRMYWJlbCxcbiAgZm9ybWF0TnVtYmVyLFxuICBmb3JtYXRQYXNjYWxDYXNlLFxuICBmb3JtYXRQaG9uZSxcbiAgZm9ybWF0UHJpY2UsXG4gIGZvcm1hdFF1b3RlcyxcbiAgZm9ybWF0U2VudGVuY2VDYXNlLFxuICBmb3JtYXRTbmFrZUNhc2UsXG4gIGZvcm1hdFRpdGxlQ2FzZSxcbiAgZm9ybWF0VXJsRnJvbVJvb3QsXG4gIGZvcm1hdFdlaWdodCxcbiAgZ2V0QXJ0aWNsZSxcbiAgcHJpY2VUb051bWJlcixcbiAgdW5mb3JtYXRQcmljZSxcbn07XG4iLCI8c2NyaXB0IGxhbmc9XCJ0c1wiIHNldHVwPlxuICBpbXBvcnQgeyBkZWZpbmVBc3luY0NvbXBvbmVudCwgbWFya1JhdywgcmVmLCB3YXRjaCB9IGZyb20gJ3Z1ZSc7XG5cbiAgaW1wb3J0IHsgUkVBTE0gfSBmcm9tICdAL3R5cGVzL1JlYWxtJztcbiAgaW1wb3J0IHsgU0laRSB9IGZyb20gJ0AvdHlwZXMvU2l6ZSc7XG4gIGltcG9ydCB7IENTUyB9IGZyb20gJ0AvdHlwZXMvU3R5bGVzJztcbiAgaW1wb3J0IHsgZm9ybWF0UGFzY2FsQ2FzZSB9IGZyb20gJ0AvdXRpbGl0aWVzL2Zvcm1hdCc7XG5cbiAgaW1wb3J0IHR5cGUgeyBJY29uIH0gZnJvbSAnQC90eXBlcy9JY29uJztcbiAgaW1wb3J0IHR5cGUgeyBTaXplIH0gZnJvbSAnQC90eXBlcy9TaXplJztcbiAgaW1wb3J0IHR5cGUgeyBDb21wb25lbnQgfSBmcm9tICd2dWUnO1xuXG4gIHR5cGUgUHJvcHMgPSB7XG4gICAgaWNvbjogSWNvbjtcbiAgICBzaXplPzogU2l6ZTtcbiAgfTtcblxuICBjb25zdCBwcm9wcyA9IHdpdGhEZWZhdWx0cyhkZWZpbmVQcm9wczxQcm9wcz4oKSwge1xuICAgIHNpemU6IFNJWkUuU01BTEwsXG4gIH0pO1xuXG4gIGNvbnN0IGlubmVyU1ZHID0gcmVmPENvbXBvbmVudD4oKTtcblxuICB3YXRjaChcbiAgICAoKSA9PiBwcm9wcy5pY29uLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGlkOiBzdHJpbmcgPSBwcm9wcy5pY29uO1xuICAgICAgY29uc3QgbmFtZSA9IGZvcm1hdFBhc2NhbENhc2UoaWQpO1xuICAgICAgY29uc3QgW3ByZWZpeF0gPSBpZC5zcGxpdCgnLScpO1xuICAgICAgY29uc3QgcmVhbG1Gb2xkZXIgPSBSRUFMTVtwcmVmaXg/LnRvVXBwZXJDYXNlKCkgYXMga2V5b2YgdHlwZW9mIFJFQUxNXTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGRlZmluZUFzeW5jQ29tcG9uZW50KCgpID0+IHtcbiAgICAgICAgaWYgKHJlYWxtRm9sZGVyKSB7XG4gICAgICAgICAgcmV0dXJuIGltcG9ydChgLi4vYXNzZXRzL3N2Zy9pY29ucy9yZWFsbS8ke3JlYWxtRm9sZGVyfS9JY29uJHtuYW1lfS5zdmc/Y29tcG9uZW50YCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaW1wb3J0KGAuLi9hc3NldHMvc3ZnL2ljb25zL0ljb24ke25hbWV9LnN2Zz9jb21wb25lbnRgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpbm5lclNWRy52YWx1ZSA9IG1hcmtSYXcoY29tcG9uZW50KTtcbiAgICB9LFxuICAgIHsgaW1tZWRpYXRlOiB0cnVlIH1cbiAgKTtcbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG4gIDxkaXYgOmNsYXNzPVwiWyd0aWRlLWljb24nLCBwcm9wcy5zaXplXVwiPlxuICAgIDxDb21wb25lbnRcbiAgICAgIDpjbGFzcz1cIltDU1MuRElTUExBWS5CTE9DS11cIlxuICAgICAgOmRhdGEtaWNvbj1cImljb25cIlxuICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiXG4gICAgICA6aXM9XCJpbm5lclNWR1wiXG4gICAgICB2LWlmPVwiaW5uZXJTVkdcIlxuICAgIC8+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlPlxuICAudGlkZS1pY29uIHtcbiAgICB3aWR0aDogMS41cmVtO1xuICAgIGhlaWdodDogMS41cmVtO1xuICB9XG5cbiAgLnRpZGUtaWNvbi5zbWFsbCB7XG4gICAgd2lkdGg6IDEuMjVyZW07XG4gICAgaGVpZ2h0OiAxLjI1cmVtO1xuICB9XG5cbiAgLnRpZGUtaWNvbiBzdmcge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgfVxuPC9zdHlsZT5cbiIsImltcG9ydCB0eXBlIHsgUmVhbG1LZXkgfSBmcm9tICdAL3R5cGVzL1JlYWxtJztcblxuZXhwb3J0IGNvbnN0IElDT04gPSB7XG4gIEFDQ09VTlRfQkFMQU5DRTogJ2FjY291bnQtYmFsYW5jZScsXG4gIEFDVVRFOiAnYWN1dGUnLFxuICBBREQ6ICdhZGQnLFxuICBBSV9ERVNDUklQVElPTjogJ2FpLWRlc2NyaXB0aW9uJyxcbiAgQUxJR05fU1BBQ0VfRVZFTjogJ2FsaWduLXNwYWNlLWV2ZW4nLFxuICBBUFBMRV9QQVk6ICdhcHBsZS1wYXknLFxuICBBUlJPV19CQUNLOiAnYXJyb3ctYmFjaycsXG4gIEFSUk9XX0NZQ0xFOiAnYXJyb3ctY3ljbGUnLFxuICBBUlJPV19GT1JXQVJEOiAnYXJyb3ctZm9yd2FyZCcsXG4gIEFSUk9XX1JJR0hUOiAnYXJyb3ctcmlnaHQnLFxuICBBU1NJR05NRU5UOiAnYXNzaWdubWVudCcsXG4gIEFUVEFDSF9NT05FWTogJ2F0dGFjaC1tb25leScsXG4gIEFVVE9fUkVORVc6ICdhdXRvLXJlbmV3JyxcbiAgQVdBUkRfU1RBUjogJ2F3YXJkLXN0YXInLFxuICBCRUQ6ICdiZWQnLFxuICBCT0xUOiAnYm9sdCcsXG4gIEJPT0tNQVJLOiAnYm9va21hcmsnLFxuICBCVU5LSE9VU0U6ICdidW5raG91c2UnLFxuICBDQUxFTkRBUl9NT05USDogJ2NhbGVuZGFyLW1vbnRoJyxcbiAgQ0FMTDogJ2NhbGwnLFxuICBDQUxMX1FVQUxJVFk6ICdjYWxsLXF1YWxpdHknLFxuICBDQVJfUkVOVEFMOiAnY2FyLXJlbnRhbCcsXG4gIENIRUNLOiAnY2hlY2snLFxuICBDSEVWUk9OX0xFRlQ6ICdjaGV2cm9uLWxlZnQnLFxuICBDSEVWUk9OX1JJR0hUOiAnY2hldnJvbi1yaWdodCcsXG4gIENMRUFSOiAnY2xlYXInLFxuICBDTE9TRTogJ2Nsb3NlJyxcbiAgQ09OVFJBQ1Q6ICdjb250cmFjdCcsXG4gIENSQVNIOiAnY3Jhc2gnLFxuICBEQVNIQk9BUkRfQ1VTVE9NSVpFOiAnZGFzaGJvYXJkLWN1c3RvbWl6ZScsXG4gIERFTEVURTogJ2RlbGV0ZScsXG4gIERJQU1PTkQ6ICdkaWFtb25kJyxcbiAgRElSRUNUSU9OU19CT0FUOiAnZGlyZWN0aW9ucy1ib2F0JyxcbiAgRE9NQUlOOiAnZG9tYWluJyxcbiAgRFJBRlQ6ICdkcmFmdCcsXG4gIEVESVQ6ICdlZGl0JyxcbiAgRU5HSU5FOiAnZW5naW5lJyxcbiAgRU5HSU5FRVJJTkc6ICdlbmdpbmVlcmluZycsXG4gIEVSUk9SOiAnZXJyb3InLFxuICBFWFBBTkRfQ09OVEVOVDogJ2V4cGFuZC1jb250ZW50JyxcbiAgRVhQQU5EX0xFU1M6ICdleHBhbmQtbGVzcycsXG4gIEVYUEFORF9NT1JFOiAnZXhwYW5kLW1vcmUnLFxuICBGQUNFQk9PSzogJ2ZhY2Vib29rJyxcbiAgRkFWT1JJVEU6ICdmYXZvcml0ZScsXG4gIEZBVk9SSVRFX0ZJTExFRDogJ2Zhdm9yaXRlLWZpbGxlZCcsXG4gIEZMQUc6ICdmbGFnJyxcbiAgRk9STUFUX0JPTEQ6ICdmb3JtYXQtYm9sZCcsXG4gIEZPUk1BVF9JVEFMSUM6ICdmb3JtYXQtaXRhbGljJyxcbiAgRk9STUFUX0xJU1RfQlVMTEVURUQ6ICdmb3JtYXQtbGlzdC1idWxsZXRlZCcsXG4gIEZPUlVNOiAnZm9ydW0nLFxuICBHQVM6ICdnYXMnLFxuICBHQVZFTDogJ2dhdmVsJyxcbiAgR0VBUlM6ICdnZWFycycsXG4gIEdMT0JFX0xPQ0FUSU9OX1BJTjogJ2dsb2JlLWxvY2F0aW9uLXBpbicsXG4gIEdPT0dMRTogJ2dvb2dsZScsXG4gIEdPT0dMRV9QQVk6ICdnb29nbGUtcGF5JyxcbiAgR1JJRDogJ2dyaWQnLFxuICBIQU5EU0hBS0U6ICdoYW5kc2hha2UnLFxuICBIQU5EWU1BTjogJ2hhbmR5bWFuJyxcbiAgSEVJR0hUOiAnaGVpZ2h0JyxcbiAgSEVMUDogJ2hlbHAnLFxuICBJTkZPOiAnaW5mbycsXG4gIElORk9STUFUSU9OOiAnaW5mb3JtYXRpb24nLFxuICBJTlNFUlRfVEVYVDogJ2luc2VydC10ZXh0JyxcbiAgSU5TVEFHUkFNOiAnaW5zdGFncmFtJyxcbiAgSU9TX1NIQVJFOiAnaW9zLXNoYXJlJyxcbiAgTEFZT1VUOiAnbGF5b3V0JyxcbiAgTEVWRUxMSU5HX0pBQ0s6ICdsZXZlbGxpbmctamFjaycsXG4gIExJTktFRF9JTjogJ2xpbmtlZCBpbicsXG4gIExPQ0FMX1NISVBQSU5HOiAnbG9jYWwtc2hpcHBpbmcnLFxuICBMT0NLOiAnbG9jaycsXG4gIE1BSUw6ICdtYWlsJyxcbiAgTUVOVTogJ21lbnUnLFxuICBNT05FWV9CQUc6ICdtb25leS1iYWcnLFxuICBNT1JFX0hPUklaOiAnbW9yZS1ob3JpeicsXG4gIE5PVElGSUNBVElPTlM6ICdub3RpZmljYXRpb25zJyxcbiAgT0RPTUVURVI6ICdvZG9tZXRlcicsXG4gIE9QRU5fSU5fTkVXOiAnb3Blbi1pbi1uZXcnLFxuICBQQUxFVFRFOiAncGFsZXR0ZScsXG4gIFBBWVBBTDogJ3BheXBhbCcsXG4gIFBFUlNPTjogJ3BlcnNvbicsXG4gIFBFUlNPTl9TRUFSQ0g6ICdwZXJzb24tc2VhcmNoJyxcbiAgUEhPVE9fQ0FNRVJBOiAncGhvdG8tY2FtZXJhJyxcbiAgUElOVEVSRVNUOiAncGludGVyZXN0JyxcbiAgUExBWV9BUlJPVzogJ3BsYXktYXJyb3cnLFxuICBQT0xJQ1k6ICdwb2xpY3knLFxuICBQT1dFUjogJ3Bvd2VyJyxcbiAgUE9XRVJfT0ZGOiAncG93ZXItb2ZmJyxcbiAgUFJJT1JJVFlfSElHSDogJ3ByaW9yaXR5LWhpZ2gnLFxuICBSRU1PVkU6ICdyZW1vdmUnLFxuICBSRVFVRVNUX1FVT1RFOiAncmVxdWVzdC1xdW90ZScsXG4gIFJFU0VUX1dSRU5DSDogJ3Jlc2V0LXdyZW5jaCcsXG4gIFJPQUQ6ICdyb2FkJyxcbiAgUk9VTkRFRF9DT1JORVI6ICdyb3VuZGVkLWNvcm5lcicsXG4gIFJVTEVSOiAncnVsZXInLFxuICBTQUlMSU5HOiAnc2FpbGluZycsXG4gIFNDSE9PTDogJ3NjaG9vbCcsXG4gIFNFQVJDSDogJ3NlYXJjaCcsXG4gIFNFQVRJTkc6ICdzZWF0aW5nJyxcbiAgU0VMTDogJ3NlbGwnLFxuICBTRU5TT1JTOiAnc2Vuc29ycycsXG4gIFNFVFRJTkdTOiAnc2V0dGluZ3MnLFxuICBTSEFSRTogJ3NoYXJlJyxcbiAgU0hJRUxEX0NIRUNLOiAnc2hpZWxkLWNoZWNrJyxcbiAgU0hPUFBJTkdfQ0FSVDogJ3Nob3BwaW5nLWNhcnQnLFxuICBTTEVFUFM6ICdzbGVlcHMnLFxuICBTTVM6ICdzbXMnLFxuICBTTk9XRkxBS0U6ICdzbm93Zmxha2UnLFxuICBTVEFSOiAnc3RhcicsXG4gIFNVTU1BUklaRTogJ3N1bW1hcml6ZScsXG4gIFNXQVBfSE9SSVo6ICdzd2FwLWhvcml6JyxcbiAgU1dBUF9WRVJUOiAnc3dhcC12ZXJ0JyxcbiAgVEhSRUVfRF9ST1RBVElPTjogJ3RocmVlLWQtcm90YXRpb24nLFxuICBUSFVNQl9VUDogJ3RodW1iLXVwJyxcbiAgVFJFTkRJTkdfRE9XTjogJ3RyZW5kaW5nLWRvd24nLFxuICBUUk9QSFk6ICd0cm9waHknLFxuICBUVU5FOiAndHVuZScsXG4gIFRXSVRURVI6ICd0d2l0dGVyJyxcbiAgVU1CUkVMTEE6ICd1bWJyZWxsYScsXG4gIFZFUklGSUVEOiAndmVyaWZpZWQnLFxuICBWSURFT0NBTTogJ3ZpZGVvY2FtJyxcbiAgVklFV19JTl9BUjogJ3ZpZXctaW4tYXInLFxuICBWSVNJQklMSVRZOiAndmlzaWJpbGl0eScsXG4gIFZPTFVNRV9PRkY6ICd2b2x1bWUtb2ZmJyxcbiAgVk9MVU1FX09OOiAndm9sdW1lLW9uJyxcbiAgV0FSRUhPVVNFOiAnd2FyZWhvdXNlJyxcbiAgV0FSTklORzogJ3dhcm5pbmcnLFxuICBXQVRFUjogJ3dhdGVyJyxcbiAgV0VJR0hUOiAnd2VpZ2h0JyxcbiAgV0lEVEg6ICd3aWR0aCcsXG4gIFdPUktTUEFDRV9QUkVNSVVNOiAnd29ya3NwYWNlLXByZW1pdW0nLFxuICBXUkVOQ0g6ICd3cmVuY2gnLFxuICBZT1VUVUJFOiAneW91dHViZScsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgSUNPTl9SRUFMTSA9IHtcbiAgQVRWOiB7XG4gICAgQVRWOiAnYXR2LWF0dicsXG4gICAgRFVORV9CVUdHWTogJ2F0di1kdW5lLWJ1Z2d5JyxcbiAgICBHT0xGX0NBUlQ6ICdhdHYtZ29sZi1jYXJ0JyxcbiAgICBHT19LQVJUOiAnYXR2LWdvLWthcnQnLFxuICAgIFNBTkRfUkFJTDogJ2F0di1zYW5kLXJhaWwnLFxuICAgIFNJREVfQllfU0lERTogJ2F0di1zaWRlLWJ5LXNpZGUnLFxuICAgIFRSQUlMRVI6ICdhdHYtdHJhaWxlcicsXG4gIH0sXG4gIEJPQVRNQVJUOiB7XG4gICAgUFdDOiAnYm9hdG1hcnQtcHdjJyxcbiAgICBUUkFJTEVSOiAnYm9hdG1hcnQtdHJhaWxlcicsXG4gIH0sXG4gIFJWOiB7XG4gICAgQ0xBU1NfQTogJ3J2LWNsYXNzLWEnLFxuICAgIENMQVNTX0I6ICdydi1jbGFzcy1iJyxcbiAgICBDTEFTU19DOiAncnYtY2xhc3MtYycsXG4gICAgRklGVEhfV0hFRUw6ICdydi1maWZ0aC13aGVlbCcsXG4gICAgRklTSF9IT1VTRTogJ3J2LWZpc2gtaG91c2UnLFxuICAgIFBBUktfTU9ERUw6ICdydi1wYXJrLW1vZGVsJyxcbiAgICBQT1BfVVBfQ0FNUEVSOiAncnYtcG9wLXVwLWNhbXBlcicsXG4gICAgVFJBVkVMX1RSQUlMRVI6ICdydi10cmF2ZWwtdHJhaWxlcicsXG4gICAgVFJVQ0tfQ0FNUEVSOiAncnYtdHJ1Y2stY2FtcGVyJyxcbiAgfSxcbn0gYXMgY29uc3Q7XG5cbnR5cGUgUmVhbG1LZXlzV2l0aEljb25zID0gRXh0cmFjdDxSZWFsbUtleSwga2V5b2YgdHlwZW9mIElDT05fUkVBTE0+O1xudHlwZSBSZWFsbUljb24gPSB7XG4gIFtSZWFsbUtleSBpbiBSZWFsbUtleXNXaXRoSWNvbnNdOiAodHlwZW9mIElDT05fUkVBTE0pW1JlYWxtS2V5XVtrZXlvZiAodHlwZW9mIElDT05fUkVBTE0pW1JlYWxtS2V5XV07XG59W1JlYWxtS2V5c1dpdGhJY29uc107XG5cbmV4cG9ydCB0eXBlIEdsb2JhbEljb24gPSAodHlwZW9mIElDT04pW2tleW9mIHR5cGVvZiBJQ09OXTtcbmV4cG9ydCB0eXBlIEljb24gPSBHbG9iYWxJY29uIHwgUmVhbG1JY29uO1xuIiwiPHNjcmlwdCBsYW5nPVwidHNcIiBzZXR1cD5cbiAgaW1wb3J0IFRpZGVEaXZpZGVyIGZyb20gJ0AvY29tcG9uZW50cy9UaWRlRGl2aWRlci52dWUnO1xuICBpbXBvcnQgVGlkZUljb24gZnJvbSAnQC9jb21wb25lbnRzL1RpZGVJY29uLnZ1ZSc7XG4gIGltcG9ydCB7IElDT04gfSBmcm9tICdAL3R5cGVzL0ljb24nO1xuICBpbXBvcnQgeyBTSVpFIH0gZnJvbSAnQC90eXBlcy9TaXplJztcbiAgaW1wb3J0IHsgQ1NTIH0gZnJvbSAnQC90eXBlcy9TdHlsZXMnO1xuXG4gIGNvbnN0IGVtaXQgPSBkZWZpbmVFbWl0cyhbJ3RvZ2dsZSddKTtcblxuICB0eXBlIFByb3BzID0ge1xuICAgIGhhc0JvdHRvbURpdmlkZXI/OiBib29sZWFuO1xuICAgIGhhc1RvcERpdmlkZXI/OiBib29sZWFuO1xuICAgIGlzRXhwYW5kZWQ/OiBib29sZWFuO1xuICAgIGlzT3B0aW9uYWw/OiBib29sZWFuO1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gIH07XG5cbiAgY29uc3QgcHJvcHMgPSB3aXRoRGVmYXVsdHMoZGVmaW5lUHJvcHM8UHJvcHM+KCksIHtcbiAgICBoYXNCb3R0b21EaXZpZGVyOiBmYWxzZSxcbiAgICBoYXNUb3BEaXZpZGVyOiBmYWxzZSxcbiAgICBpc0V4cGFuZGVkOiBmYWxzZSxcbiAgICBpc09wdGlvbmFsOiBmYWxzZSxcbiAgICBsYWJlbDogJycsXG4gIH0pO1xuXG4gIGNvbnN0IGhhbmRsZVRvZ2dsZUNsaWNrID0gKCkgPT4ge1xuICAgIGVtaXQoJ3RvZ2dsZScpO1xuICB9O1xuPC9zY3JpcHQ+XG5cbjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cInRpZGUtYWNjb3JkaW9uLWl0ZW1cIj5cbiAgICA8VGlkZURpdmlkZXIgdi1pZj1cInByb3BzLmhhc1RvcERpdmlkZXJcIiAvPlxuXG4gICAgPGRpdlxuICAgICAgOmNsYXNzPVwiWyd0aWRlLWFjY29yZGlvbi1oZWFkJywgQ1NTLkRJU1BMQVkuRkxFWCwgQ1NTLkFYSVMxLkJFVFdFRU4sIENTUy5QQURESU5HLlkuSEFMRiwgQ1NTLkNVUlNPUi5QT0lOVEVSXVwiXG4gICAgICBAY2xpY2s9XCJoYW5kbGVUb2dnbGVDbGlja1wiXG4gICAgPlxuICAgICAgPGRpdiA6Y2xhc3M9XCJbQ1NTLkRJU1BMQVkuRkxFWCwgQ1NTLkFYSVMyLkNFTlRFUiwgQ1NTLkdBUC5IQUxGLCBDU1MuRk9OVC5ST0xFLkxBQkVMXzFfU0VNSUJPTERdXCI+XG4gICAgICAgIDxzcGFuPnt7IHByb3BzLmxhYmVsIH19PC9zcGFuPlxuXG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgOmNsYXNzPVwiW0NTUy5GT05ULkNPTE9SLlNVUkZBQ0UuVkFSSUFOVF1cIlxuICAgICAgICAgIHYtaWY9XCJwcm9wcy5pc09wdGlvbmFsXCJcbiAgICAgICAgPlxuICAgICAgICAgIChvcHRpb25hbClcbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxUaWRlSWNvblxuICAgICAgICA6aWNvbj1cImlzRXhwYW5kZWQgPyBJQ09OLkVYUEFORF9MRVNTIDogSUNPTi5FWFBBTkRfTU9SRVwiXG4gICAgICAgIDpzaXplPVwiU0laRS5MQVJHRVwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiA6Y2xhc3M9XCJbJ3RpZGUtYWNjb3JkaW9uLWJvZHknLCBwcm9wcy5pc0V4cGFuZGVkID8gJ2V4cGFuZGVkJyA6ICdjb2xsYXBzZWQnLCBDU1MuRElTUExBWS5HUklEXVwiPlxuICAgICAgPGRpdiA6Y2xhc3M9XCJbQ1NTLk9WRVJGTE9XLlkuSElEREVOLCBDU1MuTUFSR0lOLlkuT05FLCBDU1MuRk9OVC5ST0xFLkJPRFlfMSwgQ1NTLkZPTlQuQ09MT1IuU1VSRkFDRS5ERUZBVUxUXVwiPlxuICAgICAgICA8c2xvdCAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8VGlkZURpdmlkZXIgdi1pZj1cInByb3BzLmhhc0JvdHRvbURpdmlkZXJcIiAvPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBzY29wZWQ+XG4gIC50aWRlLWFjY29yZGlvbi1ib2R5IHtcbiAgICB0cmFuc2l0aW9uOiBncmlkLXRlbXBsYXRlLXJvd3MgdmFyKC0tdGlkZS1hbmltYXRlKTtcbiAgfVxuXG4gIC50aWRlLWFjY29yZGlvbi1ib2R5LmV4cGFuZGVkIHtcbiAgICBncmlkLXRlbXBsYXRlLXJvd3M6IDFmcjtcbiAgfVxuXG4gIC50aWRlLWFjY29yZGlvbi1ib2R5LmNvbGxhcHNlZCB7XG4gICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiAwZnI7XG4gIH1cbjwvc3R5bGU+XG4iLCJleHBvcnQgY29uc3QgRUxFTUVOVCA9IHtcbiAgQlVUVE9OOiAnYnV0dG9uJyxcbiAgTElOSzogJ2EnLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IEVMRU1FTlRfVEVYVF9BU19JQ09OID0ge1xuICBCVVRUT046ICdidXR0b24nLFxuICBESVY6ICdkaXYnLFxuICBMSU5LOiAnYScsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBFbGVtZW50ID0gKHR5cGVvZiBFTEVNRU5UKVtrZXlvZiB0eXBlb2YgRUxFTUVOVF07XG5leHBvcnQgdHlwZSBFbGVtZW50VGV4dEFzSWNvbiA9ICh0eXBlb2YgRUxFTUVOVF9URVhUX0FTX0lDT04pW2tleW9mIHR5cGVvZiBFTEVNRU5UX1RFWFRfQVNfSUNPTl07XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSB2dWUvc29ydC1rZXlzICovXG5cbmV4cG9ydCBjb25zdCBQUklPUklUWSA9IHtcbiAgUFJJTUFSWTogJ3ByaW1hcnknLFxuICBTRUNPTkRBUlk6ICdzZWNvbmRhcnknLFxuICBURVJUSUFSWTogJ3RlcnRpYXJ5JyxcbiAgUVVBVEVSTkFSWTogJ3F1YXRlcm5hcnknLFxuICBGTE9BVElORzogJ2Zsb2F0aW5nJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIFByaW9yaXR5ID0gKHR5cGVvZiBQUklPUklUWSlba2V5b2YgdHlwZW9mIFBSSU9SSVRZXTtcbiIsImV4cG9ydCBjb25zdCBUQVJHRVQgPSB7XG4gIEJMQU5LOiAnX2JsYW5rJyxcbiAgU0VMRjogdW5kZWZpbmVkLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgVGFyZ2V0ID0gKHR5cGVvZiBUQVJHRVQpW2tleW9mIHR5cGVvZiBUQVJHRVRdO1xuIiwiZXhwb3J0IGNvbnN0IEFMRVJUID0ge1xuICBFUlJPUjogJ2Vycm9yJyxcbiAgSU5GTzogJ2luZm8nLFxuICBTVUNDRVNTOiAnc3VjY2VzcycsXG4gIFdBUk5JTkc6ICd3YXJuaW5nJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIEFsZXJ0ID0gKHR5cGVvZiBBTEVSVClba2V5b2YgdHlwZW9mIEFMRVJUXTtcbiIsIjxzY3JpcHQgbGFuZz1cInRzXCIgc2V0dXA+XG4gIGltcG9ydCB7IGNvbXB1dGVkIH0gZnJvbSAndnVlJztcblxuICBpbXBvcnQgVGlkZUJ1dHRvbkljb24gZnJvbSAnQC9jb21wb25lbnRzL1RpZGVCdXR0b25JY29uLnZ1ZSc7XG4gIGltcG9ydCBUaWRlSWNvbiBmcm9tICdAL2NvbXBvbmVudHMvVGlkZUljb24udnVlJztcbiAgaW1wb3J0IHsgQUxFUlQgfSBmcm9tICdAL3R5cGVzL0FsZXJ0JztcbiAgaW1wb3J0IHsgSUNPTiB9IGZyb20gJ0AvdHlwZXMvSWNvbic7XG4gIGltcG9ydCB7IFBSSU9SSVRZIH0gZnJvbSAnQC90eXBlcy9Qcmlvcml0eSc7XG4gIGltcG9ydCB7IENTUyB9IGZyb20gJ0AvdHlwZXMvU3R5bGVzJztcblxuICBpbXBvcnQgdHlwZSB7IEFsZXJ0IH0gZnJvbSAnQC90eXBlcy9BbGVydCc7XG4gIGltcG9ydCB0eXBlIHsgSWNvbiB9IGZyb20gJ0AvdHlwZXMvSWNvbic7XG5cbiAgdHlwZSBQcm9wcyA9IHtcbiAgICBoZWFkaW5nPzogc3RyaW5nO1xuICAgIGlzVG9hc3Q/OiBib29sZWFuO1xuICAgIHR5cGU/OiBBbGVydDtcbiAgfTtcblxuICBjb25zdCBwcm9wcyA9IHdpdGhEZWZhdWx0cyhkZWZpbmVQcm9wczxQcm9wcz4oKSwge1xuICAgIGhlYWRpbmc6IHVuZGVmaW5lZCxcbiAgICBpc1RvYXN0OiBmYWxzZSxcbiAgICB0eXBlOiBBTEVSVC5JTkZPLFxuICB9KTtcblxuICBjb25zdCBpY29uID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGxldCBpY29uOiBJY29uID0gSUNPTi5JTkZPO1xuXG4gICAgc3dpdGNoIChwcm9wcy50eXBlKSB7XG4gICAgICBjYXNlIEFMRVJULkVSUk9SOlxuICAgICAgICBpY29uID0gSUNPTi5FUlJPUjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgY2FzZSBBTEVSVC5JTkZPOlxuICAgICAgICBpY29uID0gSUNPTi5JTkZPO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQUxFUlQuU1VDQ0VTUzpcbiAgICAgICAgaWNvbiA9IElDT04uQ0hFQ0s7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBBTEVSVC5XQVJOSU5HOlxuICAgICAgICBpY29uID0gSUNPTi5XQVJOSU5HO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gaWNvbjtcbiAgfSk7XG48L3NjcmlwdD5cblxuPHRlbXBsYXRlPlxuICA8ZGl2XG4gICAgOmNsYXNzPVwiW1xuICAgICAgcHJvcHMudHlwZSxcbiAgICAgICd0aWRlLWFsZXJ0JyxcbiAgICAgIENTUy5ESVNQTEFZLkdSSUQsXG4gICAgICBDU1MuQVhJUzIuQ0VOVEVSLFxuICAgICAgQ1NTLkJPUkRFUi5SQURJVVMuSEFMRixcbiAgICAgIENTUy5QQURESU5HLkZVTEwuT05FLFxuICAgICAgcHJvcHMudHlwZSA9PT0gQUxFUlQuRVJST1IgJiYgQ1NTLkJHLkdMT0JBTC5TVVJGQUNFLkVSUk9SLFxuICAgICAgcHJvcHMudHlwZSA9PT0gQUxFUlQuSU5GTyAmJiBDU1MuQkcuR0xPQkFMLlNVUkZBQ0UuSU5GTyxcbiAgICAgIHByb3BzLnR5cGUgPT09IEFMRVJULlNVQ0NFU1MgJiYgQ1NTLkJHLkdMT0JBTC5TVVJGQUNFLlNVQ0NFU1MsXG4gICAgICBwcm9wcy50eXBlID09PSBBTEVSVC5XQVJOSU5HICYmIENTUy5CRy5HTE9CQUwuU1VSRkFDRS5XQVJOSU5HLFxuICAgICAgcHJvcHMuaXNUb2FzdCA/IENTUy5TSEFET1cuQk9UVE9NIDogJycsXG4gICAgXVwiXG4gID5cbiAgICA8ZGl2XG4gICAgICA6Y2xhc3M9XCJbXG4gICAgICAgICd0aWRlLWFsZXJ0LWljb24nLFxuICAgICAgICBDU1MuUEFERElORy5GVUxMLkhBTEYsXG4gICAgICAgIENTUy5CT1JERVIuUkFESVVTLkZVTEwsXG4gICAgICAgIENTUy5GT05ULkNPTE9SLlNVUkZBQ0UuSU5WRVJTRSxcbiAgICAgICAgcHJvcHMudHlwZSA9PT0gQUxFUlQuRVJST1IgJiYgQ1NTLkJHLkdMT0JBTC5QUklNQVJZLkVSUk9SLFxuICAgICAgICBwcm9wcy50eXBlID09PSBBTEVSVC5JTkZPICYmIENTUy5CRy5HTE9CQUwuUFJJTUFSWS5JTkZPLFxuICAgICAgICBwcm9wcy50eXBlID09PSBBTEVSVC5TVUNDRVNTICYmIENTUy5CRy5HTE9CQUwuUFJJTUFSWS5TVUNDRVNTLFxuICAgICAgICBwcm9wcy50eXBlID09PSBBTEVSVC5XQVJOSU5HICYmIENTUy5CRy5HTE9CQUwuUFJJTUFSWS5XQVJOSU5HLFxuICAgICAgXVwiXG4gICAgPlxuICAgICAgPFRpZGVJY29uIDppY29uPVwiaWNvblwiIC8+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IDpjbGFzcz1cIlsndGlkZS1hbGVydC1oZWFkaW5nJywgQ1NTLkRJU1BMQVkuRkxFWCwgQ1NTLkFYSVMyLkNFTlRFUl1cIj5cbiAgICAgIDxoMiA6Y2xhc3M9XCJbQ1NTLkZPTlQuUk9MRS5MQUJFTF8xX1NFTUlCT0xELCBDU1MuRk9OVC5DT0xPUi5TVVJGQUNFLkRFRkFVTFRdXCI+XG4gICAgICAgIHt7IHByb3BzLmhlYWRpbmcgfX1cbiAgICAgIDwvaDI+XG4gICAgPC9kaXY+XG5cbiAgICA8VGlkZUJ1dHRvbkljb25cbiAgICAgIDpjbGFzcz1cIlsndGlkZS1hbGVydC1jbG9zZScsIENTUy5BWElTMi5DRU5URVIsIENTUy5GT05ULkNPTE9SLlNVUkZBQ0UuREVGQVVMVF1cIlxuICAgICAgOmljb249XCJJQ09OLkNMT1NFXCJcbiAgICAgIDpwcmlvcml0eT1cIlBSSU9SSVRZLlFVQVRFUk5BUllcIlxuICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlIGFsZXJ0XCJcbiAgICAvPlxuXG4gICAgPGRpdiA6Y2xhc3M9XCJbJ3RpZGUtYWxlcnQtYm9keScsIENTUy5GT05ULlJPTEUuTEFCRUxfMSwgQ1NTLkZPTlQuQ09MT1IuU1VSRkFDRS5WQVJJQU5UXVwiPlxuICAgICAgPHNsb3QgLz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgc2NvcGVkPlxuICAudGlkZS1hbGVydCB7XG4gICAgZ3JpZC10ZW1wbGF0ZS1hcmVhczpcbiAgICAgICdpY29uIGhlYWRpbmcgY2xvc2UnXG4gICAgICAnLiBib2R5IC4nO1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogYXV0byAxZnIgYXV0bztcbiAgICBncmlkLWNvbHVtbi1nYXA6IDAuNXJlbTtcbiAgICBtYXgtd2lkdGg6IDQwcmVtO1xuICB9XG5cbiAgLnRpZGUtYWxlcnQtaWNvbiB7XG4gICAgZ3JpZC1hcmVhOiBpY29uO1xuICB9XG5cbiAgLnRpZGUtYWxlcnQtaGVhZGluZyB7XG4gICAgZ3JpZC1hcmVhOiBoZWFkaW5nO1xuICB9XG5cbiAgLnRpZGUtYWxlcnQtY2xvc2Uge1xuICAgIGdyaWQtYXJlYTogY2xvc2U7XG4gIH1cblxuICAudGlkZS1hbGVydC1ib2R5IHtcbiAgICBncmlkLWFyZWE6IGJvZHk7XG4gIH1cbjwvc3R5bGU+XG4iLCJleHBvcnQgY29uc3QgQkFER0VfVFJVU1RFRCA9IHtcbiAgWUVBUlNfMTA6ICcxMCcsXG4gIFlFQVJTXzE1OiAnMTUnLFxuICBZRUFSU181OiAnNScsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBCYWRnZVRydXN0ZWRZZWFycyA9ICh0eXBlb2YgQkFER0VfVFJVU1RFRClba2V5b2YgdHlwZW9mIEJBREdFX1RSVVNURURdO1xuIiwiPHNjcmlwdCBsYW5nPVwidHNcIiBzZXR1cD5cbiAgaW1wb3J0IHsgQ1NTIH0gZnJvbSAnQC90eXBlcy9TdHlsZXMnO1xuXG4gIGltcG9ydCB0eXBlIHsgVGFiIH0gZnJvbSAnQC90eXBlcy9UYWInO1xuXG4gIHR5cGUgUHJvcHMgPSB7XG4gICAgYWN0aXZlVGFiOiBudW1iZXI7XG4gICAgdGFiczogVGFiW107XG4gIH07XG5cbiAgY29uc3QgcHJvcHMgPSB3aXRoRGVmYXVsdHMoZGVmaW5lUHJvcHM8UHJvcHM+KCksIHtcbiAgICBhY3RpdmVUYWI6IDAsXG4gIH0pO1xuXG4gIGNvbnN0IGVtaXQgPSBkZWZpbmVFbWl0cyhbJ2NoYW5nZSddKTtcblxuICBjb25zdCBoYW5kbGVDbGljayA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgZW1pdCgnY2hhbmdlJywgaW5kZXgpO1xuICB9O1xuPC9zY3JpcHQ+XG5cbjx0ZW1wbGF0ZT5cbiAgPGRpdlxuICAgIDpjbGFzcz1cIltcbiAgICAgICd0aWRlLWJ1dHRvbi1zZWdtZW50ZWQnLFxuICAgICAgQ1NTLkJHLlNVUkZBQ0UuVkFSSUFOVCxcbiAgICAgIENTUy5ESVNQTEFZLkZMRVgsXG4gICAgICBDU1MuR0FQLlFVQVJURVIsXG4gICAgICBDU1MuQk9SREVSLlJBRElVUy5GVUxMLFxuICAgICAgQ1NTLlBBRERJTkcuRlVMTC5RVUFSVEVSLFxuICAgICAgQ1NTLk9WRVJGTE9XLlhZLkhJRERFTixcbiAgICAgIENTUy5XSURUSC5GVUxMLFxuICAgIF1cIlxuICA+XG4gICAgPGJ1dHRvblxuICAgICAgOmNsYXNzPVwiW1xuICAgICAgICAndGlkZS1idXR0b24tc2VnbWVudGVkLXRhYicsXG4gICAgICAgIGluZGV4ID09PSBhY3RpdmVUYWJcbiAgICAgICAgICA/IFtDU1MuQkcuU1VSRkFDRS5ERUZBVUxULCBDU1MuRk9OVC5DT0xPUi5TVVJGQUNFLkRFRkFVTFQsIENTUy5TSEFET1cuQk9UVE9NXVxuICAgICAgICAgIDogWydpbmFjdGl2ZScsIENTUy5GT05ULkNPTE9SLlNVUkZBQ0UuVkFSSUFOVF0sXG4gICAgICAgIENTUy5GTEVYLkdST1cuT04sXG4gICAgICAgIENTUy5CT1JERVIuRlVMTC5UV08sXG4gICAgICAgIENTUy5CT1JERVIuUkFESVVTLkZVTEwsXG4gICAgICAgIENTUy5QQURESU5HLlkuUVVBUlRFUixcbiAgICAgICAgQ1NTLldJRFRILkZVTEwsXG4gICAgICAgIENTUy5GT05ULlJPTEUuQlVUVE9OXzEsXG4gICAgICAgIENTUy5XSElURVNQQUNFX1dSQVAuT0ZGLFxuICAgICAgXVwiXG4gICAgICA6ZGF0YS10cmFjaz1cInRhYi5kYXRhVHJhY2sgfHwgdW5kZWZpbmVkXCJcbiAgICAgIDprZXk9XCJ0YWIubGFiZWxcIlxuICAgICAgQGNsaWNrPVwiaGFuZGxlQ2xpY2soaW5kZXgpXCJcbiAgICAgIHYtZm9yPVwiKHRhYiwgaW5kZXgpIGluIHByb3BzLnRhYnNcIlxuICAgID5cbiAgICAgIDxzcGFuIDpjbGFzcz1cIltDU1MuRk9OVC5ST0xFLkxBQkVMXzJfU0VNSUJPTERdXCI+XG4gICAgICAgIHt7IHRhYi5sYWJlbCB9fVxuICAgICAgPC9zcGFuPlxuXG4gICAgICA8c3BhblxuICAgICAgICA6Y2xhc3M9XCJbQ1NTLkZPTlQuUk9MRS5MQUJFTF8yX1NFTUlCT0xEXVwiXG4gICAgICAgIHYtaWY9XCJ0YWIuY291bnQgJiYgdGFiLmNvdW50ID4gMFwiXG4gICAgICA+XG4gICAgICAgICh7eyB0YWIuY291bnQgfX0pXG4gICAgICA8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIHNjb3BlZD5cbiAgLnRpZGUtYnV0dG9uLXNlZ21lbnRlZCB7XG4gICAgbWF4LXdpZHRoOiAyMy4zcmVtO1xuICB9XG5cbiAgLnRpZGUtYnV0dG9uLXNlZ21lbnRlZC10YWIge1xuICAgIGZsZXg6IDE7XG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciB2YXIoLS10aWRlLWFuaW1hdGUpO1xuICB9XG5cbiAgLmluYWN0aXZlOm5vdCg6aG92ZXIpIHtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLXRpZGUtc3VyZmFjZS12YXJpYW50KTtcbiAgfVxuXG4gIC5pbmFjdGl2ZTpob3ZlciB7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS10aWRlLWJvcmRlcik7XG4gICAgY29sb3I6IHZhcigtLXRpZGUtc3VyZmFjZS1kZWZhdWx0KTtcbiAgfVxuPC9zdHlsZT5cbiIsImV4cG9ydCBjb25zdCBUWVBFX0NBUkQgPSB7XG4gIEFDVElPTkFCTEU6ICdhY3Rpb24nLFxuICBJTkZPUk1BVElPTkFMOiAnaW5mb3JtYXRpb25hbCcsXG4gIFNFTEVDVEFCTEU6ICdzZWxlY3QnLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgQ2FyZFR5cGUgPSAodHlwZW9mIFRZUEVfQ0FSRClba2V5b2YgdHlwZW9mIFRZUEVfQ0FSRF07XG4iLCI8c2NyaXB0IGxhbmc9XCJ0c1wiIHNldHVwPlxuICBpbXBvcnQgeyBvbk1vdW50ZWQsIG9uVW5tb3VudGVkLCBvblVwZGF0ZWQsIHJlZiwgd2F0Y2ggfSBmcm9tICd2dWUnO1xuXG4gIGltcG9ydCBUaWRlQnV0dG9uSWNvbiBmcm9tICdAL2NvbXBvbmVudHMvVGlkZUJ1dHRvbkljb24udnVlJztcbiAgaW1wb3J0IHsgSUNPTiB9IGZyb20gJ0AvdHlwZXMvSWNvbic7XG4gIGltcG9ydCB7IFBSSU9SSVRZIH0gZnJvbSAnQC90eXBlcy9Qcmlvcml0eSc7XG4gIGltcG9ydCB7IENTUyB9IGZyb20gJ0AvdHlwZXMvU3R5bGVzJztcblxuICB0eXBlIFByb3BzID0ge1xuICAgIGlzRmxvYXRpbmc/OiBib29sZWFuO1xuICAgIGlzSGlkZWF3YXlCdXR0b25zPzogYm9vbGVhbjtcbiAgICBpc1RvdWNoc2NyZWVuPzogYm9vbGVhbjtcbiAgICBzdWJ0aXRsZT86IHN0cmluZztcbiAgICB0aXRsZT86IHN0cmluZztcbiAgfTtcblxuICBjb25zdCBwcm9wcyA9IHdpdGhEZWZhdWx0cyhkZWZpbmVQcm9wczxQcm9wcz4oKSwge1xuICAgIGlzRmxvYXRpbmc6IGZhbHNlLFxuICAgIGlzSGlkZWF3YXlCdXR0b25zOiB0cnVlLFxuICAgIGlzVG91Y2hzY3JlZW46IHVuZGVmaW5lZCxcbiAgICBzdWJ0aXRsZTogdW5kZWZpbmVkLFxuICAgIHRpdGxlOiB1bmRlZmluZWQsXG4gIH0pO1xuXG4gIGNvbnN0IGVtaXQgPSBkZWZpbmVFbWl0cyhbJ2NoYW5nZSddKTtcblxuICBjb25zdCBjb250ZW50UmVmID0gcmVmKCk7XG4gIGNvbnN0IGZyYW1lUmVmID0gcmVmKCk7XG5cbiAgY29uc3QgY29udGVudFJpZ2h0RWRnZSA9IHJlZigpO1xuICBjb25zdCBjb250ZW50V2lkdGggPSByZWYoKTtcbiAgY29uc3QgY3VycmVudFNsaWRlID0gcmVmKDApO1xuICBjb25zdCBmcmFtZVdpZHRoID0gcmVmKCk7XG4gIGNvbnN0IGhhc092ZXJmbG93ID0gcmVmKCk7XG4gIGNvbnN0IGlzTGFzdFNsaWRlID0gcmVmKCk7XG4gIGNvbnN0IGxhc3RQb3NpdGlvbiA9IHJlZigpO1xuICBjb25zdCBzaG93QnV0dG9ucyA9IHJlZigpO1xuXG4gIC8qKlxuICAgKiBNZWFzdXJlIHRoZSBjdXJyZW50IHNsaWRlIGJhc2VkIG9uIHRoZSBzY3JvbGxcbiAgICogcG9zaXRpb24gb2YgdGhlIGZyYW1lLiBUaGUgY3VycmVudCBzbGlkZSBpc1xuICAgKiB0aGUgc2xpZGUgdGhhdCBpcyBjbG9zZXN0IHRvIHRoZSBsZWZ0IGVkZ2Ugb2ZcbiAgICogdGhlIGZyYW1lLlxuICAgKi9cbiAgY29uc3QgbWVhc3VyZUN1cnJlbnRTbGlkZSA9ICgpID0+IHtcbiAgICAvLyBHZXQgbGVmdCBvZmZzZXQgb2YgZWFjaCBzbGlkZS5cbiAgICBjb25zdCBzbGlkZU9mZnNldHMgPSBBcnJheS5mcm9tKGNvbnRlbnRSZWYudmFsdWUuY2hpbGRyZW4pLm1hcCgoc2xpZGU6IGFueSkgPT4gc2xpZGUub2Zmc2V0TGVmdCk7XG5cbiAgICBpZiAoc2xpZGVPZmZzZXRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgLy8gR2V0IGNsb3Nlc3Qgb2Zmc2V0IHRvIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uLlxuICAgIGNvbnN0IGNsb3Nlc3RTbGlkZU9mZnNldCA9IHNsaWRlT2Zmc2V0cy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHtcbiAgICAgIHJldHVybiBNYXRoLmFicyhjdXJyIC0gZnJhbWVSZWYudmFsdWUuc2Nyb2xsTGVmdCkgPCBNYXRoLmFicyhwcmV2IC0gZnJhbWVSZWYudmFsdWUuc2Nyb2xsTGVmdCkgPyBjdXJyIDogcHJldjtcbiAgICB9KTtcblxuICAgIGN1cnJlbnRTbGlkZS52YWx1ZSA9IHNsaWRlT2Zmc2V0cy5pbmRleE9mKGNsb3Nlc3RTbGlkZU9mZnNldCk7XG4gIH07XG5cbiAgY29uc3QgbWVhc3VyZURvbSA9ICgpID0+IHtcbiAgICBjb250ZW50UmlnaHRFZGdlLnZhbHVlID0gZnJhbWVSZWYudmFsdWUuc2Nyb2xsTGVmdCArIGZyYW1lUmVmLnZhbHVlLmNsaWVudFdpZHRoO1xuICAgIGNvbnRlbnRXaWR0aC52YWx1ZSA9IGNvbnRlbnRSZWYudmFsdWUuc2Nyb2xsV2lkdGg7XG4gICAgZnJhbWVXaWR0aC52YWx1ZSA9IGZyYW1lUmVmLnZhbHVlLmNsaWVudFdpZHRoO1xuICAgIGhhc092ZXJmbG93LnZhbHVlID0gY29udGVudFdpZHRoLnZhbHVlID4gZnJhbWVXaWR0aC52YWx1ZTtcbiAgICBpc0xhc3RTbGlkZS52YWx1ZSA9IGNvbnRlbnRSaWdodEVkZ2UudmFsdWUgPT09IGNvbnRlbnRXaWR0aC52YWx1ZTtcbiAgICBsYXN0UG9zaXRpb24udmFsdWUgPSBmcmFtZVJlZi52YWx1ZS5zY3JvbGxXaWR0aCAtIGZyYW1lUmVmLnZhbHVlLmNsaWVudFdpZHRoO1xuICAgIHNob3dCdXR0b25zLnZhbHVlID0gaGFzT3ZlcmZsb3cudmFsdWUgJiYgIXByb3BzLmlzVG91Y2hzY3JlZW47XG5cbiAgICBtZWFzdXJlQ3VycmVudFNsaWRlKCk7XG4gIH07XG5cbiAgLy8gVE9ETzogZGVib3VuY2UgdGhpc1xuICBjb25zdCBoYW5kbGVTY3JvbGwgPSAoKSA9PiB7XG4gICAgbWVhc3VyZURvbSgpO1xuICB9O1xuXG4gIGNvbnN0IHNjcm9sbFRvU2xpZGUgPSAoc2xpZGVJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgZnJhbWVSZWYudmFsdWUuc2Nyb2xsVG8oe1xuICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgbGVmdDogY29udGVudFJlZi52YWx1ZS5jaGlsZHJlbltzbGlkZUluZGV4XS5vZmZzZXRMZWZ0LFxuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IHNob3dOZXh0U2xpZGUgPSAoKSA9PiB7XG4gICAgaWYgKGNvbnRlbnRSaWdodEVkZ2UudmFsdWUgPiBjb250ZW50V2lkdGgudmFsdWUpIHtcbiAgICAgIGZyYW1lUmVmLnZhbHVlLnNjcm9sbFRvKHtcbiAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgICBsZWZ0OiBjb250ZW50V2lkdGgsXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKCFpc0xhc3RTbGlkZS52YWx1ZSkge1xuICAgICAgc2Nyb2xsVG9TbGlkZShjdXJyZW50U2xpZGUudmFsdWUgKyAxKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgc2hvd1ByZXZpb3VzU2xpZGUgPSAoKSA9PiB7XG4gICAgY29uc3QgaXNGaXJzdFNsaWRlID0gY3VycmVudFNsaWRlLnZhbHVlID09PSAwO1xuXG4gICAgaWYgKCFpc0ZpcnN0U2xpZGUpIHtcbiAgICAgIHNjcm9sbFRvU2xpZGUoY3VycmVudFNsaWRlLnZhbHVlIC0gMSk7XG4gICAgfVxuICB9O1xuXG4gIG9uTW91bnRlZCgoKSA9PiB7XG4gICAgbWVhc3VyZURvbSgpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBtZWFzdXJlRG9tKTtcbiAgfSk7XG5cbiAgb25Vbm1vdW50ZWQoKCkgPT4ge1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBtZWFzdXJlRG9tKTtcbiAgfSk7XG5cbiAgb25VcGRhdGVkKCgpID0+IHtcbiAgICBtZWFzdXJlRG9tKCk7XG4gIH0pO1xuXG4gIHdhdGNoKGN1cnJlbnRTbGlkZSwgKCkgPT4ge1xuICAgIGVtaXQoJ2NoYW5nZScsIGN1cnJlbnRTbGlkZS52YWx1ZSk7XG4gIH0pO1xuPC9zY3JpcHQ+XG5cbjx0ZW1wbGF0ZT5cbiAgPHNlY3Rpb25cbiAgICA6Y2xhc3M9XCJbJ3RpZGUtY2Fyb3VzZWwnLCBDU1MuRElTUExBWS5GTEVYLCBDU1MuRkxFWC5ESVJFQ1RJT04uQ09MVU1OLCBDU1MuR0FQLlRXTywgQ1NTLldJRFRILk1BWF9GVUxMXVwiXG4gICAgcmVmPVwiY2Fyb3VzZWxSZWZcIlxuICA+XG4gICAgPHNlY3Rpb25cbiAgICAgIDpjbGFzcz1cIltDU1MuRElTUExBWS5GTEVYLCBwcm9wcy50aXRsZSA/IENTUy5BWElTMS5CRVRXRUVOIDogQ1NTLkFYSVMxLkVORCwgQ1NTLkFYSVMyLkNFTlRFUiwgQ1NTLldJRFRILkZVTExdXCJcbiAgICAgIHYtaWY9XCIhcHJvcHMuaXNGbG9hdGluZyAmJiAoc2hvd0J1dHRvbnMgfHwgcHJvcHMudGl0bGUpXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIDpjbGFzcz1cIltDU1MuRElTUExBWS5GTEVYLCBDU1MuQVhJUzIuQ0VOVEVSLCBDU1MuR0FQLk9ORV1cIlxuICAgICAgICB2LWlmPVwicHJvcHMudGl0bGUgfHwgcHJvcHMuc3VidGl0bGVcIlxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgOmNsYXNzPVwiW0NTUy5GT05ULlJPTEUuRElTUExBWV8xXVwiXG4gICAgICAgICAgdi1pZj1cInByb3BzLnRpdGxlXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHByb3BzLnRpdGxlIH19XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICA6Y2xhc3M9XCJbQ1NTLkZPTlQuUk9MRS5MQUJFTF8yLCBDU1MuRk9OVC5DT0xPUi5TVVJGQUNFLlZBUklBTlRdXCJcbiAgICAgICAgICB2LWlmPVwicHJvcHMuc3VidGl0bGVcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgcHJvcHMuc3VidGl0bGUgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICA6Y2xhc3M9XCJbQ1NTLkRJU1BMQVkuRkxFWCwgQ1NTLkFYSVMyLkNFTlRFUiwgQ1NTLkdBUC5PTkVdXCJcbiAgICAgICAgdi1pZj1cInNob3dCdXR0b25zXCJcbiAgICAgID5cbiAgICAgICAgPFRpZGVCdXR0b25JY29uXG4gICAgICAgICAgOmRpc2FibGVkPVwiY3VycmVudFNsaWRlID09PSAwXCJcbiAgICAgICAgICA6aWNvbj1cIklDT04uQ0hFVlJPTl9MRUZUXCJcbiAgICAgICAgICA6cHJpb3JpdHk9XCJQUklPUklUWS5URVJUSUFSWVwiXG4gICAgICAgICAgQGNsaWNrPVwic2hvd1ByZXZpb3VzU2xpZGVcIlxuICAgICAgICAvPlxuXG4gICAgICAgIDxUaWRlQnV0dG9uSWNvblxuICAgICAgICAgIDpkaXNhYmxlZD1cImlzTGFzdFNsaWRlXCJcbiAgICAgICAgICA6aWNvbj1cIklDT04uQ0hFVlJPTl9SSUdIVFwiXG4gICAgICAgICAgOnByaW9yaXR5PVwiUFJJT1JJVFkuVEVSVElBUllcIlxuICAgICAgICAgIEBjbGljaz1cInNob3dOZXh0U2xpZGVcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9zZWN0aW9uPlxuXG4gICAgPHNsb3QgbmFtZT1cIm1pc2NcIiAvPlxuXG4gICAgPGRpdiA6Y2xhc3M9XCJbQ1NTLlBPU0lUSU9OLlJFTEFUSVZFXVwiPlxuICAgICAgPGRpdlxuICAgICAgICA6Y2xhc3M9XCJbQ1NTLlNDUk9MTEJBUi5PRkYsIENTUy5TTkFQLk9OLCBDU1MuT1ZFUkZMT1cuWC5TQ1JPTEwsIENTUy5XSURUSC5GVUxMXVwiXG4gICAgICAgIHJlZj1cImZyYW1lUmVmXCJcbiAgICAgICAgQHNjcm9sbD1cImhhbmRsZVNjcm9sbFwiXG4gICAgICA+XG4gICAgICAgIDx1bFxuICAgICAgICAgIDpjbGFzcz1cIltDU1MuRElTUExBWS5GTEVYLCBDU1MuR0FQLk9ORSwgQ1NTLkxJU1RfQlVMTEVUUy5PRkZdXCJcbiAgICAgICAgICByZWY9XCJjb250ZW50UmVmXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzbG90IC8+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICA6Y2xhc3M9XCJbXG4gICAgICAgICAgJ3RpZGUtY2Fyb3VzZWwtYnV0dG9uLW92ZXJsYXknLFxuICAgICAgICAgIENTUy5QT1NJVElPTi5BQlNPTFVURSxcbiAgICAgICAgICBDU1MuUE9TSVRJT05JTkcuVE9QLFxuICAgICAgICAgIENTUy5ESVNQTEFZLkZMRVgsXG4gICAgICAgICAgQ1NTLkFYSVMxLkJFVFdFRU4sXG4gICAgICAgICAgQ1NTLkFYSVMyLkNFTlRFUixcbiAgICAgICAgICBDU1MuV0lEVEguRlVMTCxcbiAgICAgICAgICBDU1MuSEVJR0hULkZVTEwsXG4gICAgICAgICAgQ1NTLlBPSU5URVJfRVZFTlRTLk9GRixcbiAgICAgICAgICBwcm9wcy5pc0hpZGVhd2F5QnV0dG9ucyA/ICdoaWRlYXdheScgOiAnJyxcbiAgICAgICAgXVwiXG4gICAgICAgIHYtaWY9XCJpc0Zsb2F0aW5nICYmIHNob3dCdXR0b25zXCJcbiAgICAgID5cbiAgICAgICAgPFRpZGVCdXR0b25JY29uXG4gICAgICAgICAgOmNsYXNzPVwiW0NTUy5NQVJHSU4uTEVGVC5PTkUsIENTUy5QT0lOVEVSX0VWRU5UUy5PTl1cIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImN1cnJlbnRTbGlkZSA9PT0gMFwiXG4gICAgICAgICAgOmljb249XCJJQ09OLkNIRVZST05fTEVGVFwiXG4gICAgICAgICAgOnByaW9yaXR5PVwiUFJJT1JJVFkuUVVBVEVSTkFSWVwiXG4gICAgICAgICAgQGNsaWNrPVwic2hvd1ByZXZpb3VzU2xpZGVcIlxuICAgICAgICAvPlxuXG4gICAgICAgIDxUaWRlQnV0dG9uSWNvblxuICAgICAgICAgIDpjbGFzcz1cIltDU1MuTUFSR0lOLlJJR0hULk9ORSwgQ1NTLlBPSU5URVJfRVZFTlRTLk9OXVwiXG4gICAgICAgICAgOmRpc2FibGVkPVwiaXNMYXN0U2xpZGVcIlxuICAgICAgICAgIDppY29uPVwiSUNPTi5DSEVWUk9OX1JJR0hUXCJcbiAgICAgICAgICA6cHJpb3JpdHk9XCJQUklPUklUWS5RVUFURVJOQVJZXCJcbiAgICAgICAgICBAY2xpY2s9XCJzaG93TmV4dFNsaWRlXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L3NlY3Rpb24+XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgc2NvcGVkPlxuICAudGlkZS1jYXJvdXNlbC1idXR0b24tb3ZlcmxheS5oaWRlYXdheSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuXG4gIC50aWRlLWNhcm91c2VsOmhvdmVyIC50aWRlLWNhcm91c2VsLWJ1dHRvbi1vdmVybGF5LmhpZGVhd2F5IHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG48L3N0eWxlPlxuIiwiPHNjcmlwdCBsYW5nPVwidHNcIiBzZXR1cD5cbiAgaW1wb3J0IHsgcmVmIH0gZnJvbSAndnVlJztcblxuICBpbXBvcnQgeyBDU1MgfSBmcm9tICdAL3R5cGVzL1N0eWxlcyc7XG5cbiAgaW1wb3J0IHR5cGUgeyBTb3VyY2UgfSBmcm9tICdAL3R5cGVzL1NvdXJjZSc7XG5cbiAgdHlwZSBQcm9wcyA9IHtcbiAgICBhbHQ6IHN0cmluZztcbiAgICBoZWlnaHQ/OiBzdHJpbmc7XG4gICAgaXNMYXp5PzogYm9vbGVhbjtcbiAgICBzb3VyY2VzPzogU291cmNlW107XG4gICAgc3JjPzogc3RyaW5nO1xuICAgIHdpZHRoPzogc3RyaW5nO1xuICB9O1xuXG4gIGNvbnN0IHByb3BzID0gd2l0aERlZmF1bHRzKGRlZmluZVByb3BzPFByb3BzPigpLCB7XG4gICAgYWx0OiAnJyxcbiAgICBoZWlnaHQ6IHVuZGVmaW5lZCxcbiAgICBpc0xhenk6IHRydWUsXG4gICAgc291cmNlczogKCkgPT4gW10sXG4gICAgc3JjOiB1bmRlZmluZWQsXG4gICAgd2lkdGg6IHVuZGVmaW5lZCxcbiAgfSk7XG5cbiAgY29uc3QgcGljdHVyZSA9IHJlZigpO1xuICBjb25zdCBpbWcgPSByZWYoKTtcblxuICBjb25zdCBpbWFnZURlZmF1bHQgPSAnaHR0cHM6Ly9jZG4tc3RhdGljLnRpbGFicy5pby9tYXJrZXRwbGFjZS9jb21tb24vaW1hZ2UtY29taW5nLXNvb24uc3ZnJztcblxuICBjb25zdCBzZXRJbWFnZUZyb21EZWZhdWx0ID0gKCkgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRTcmMgPSBpbWcudmFsdWU/LmN1cnJlbnRTcmM7XG4gICAgY29uc3QgcGljdHVyZVNvdXJjZSA9IHBpY3R1cmUudmFsdWU/LnF1ZXJ5U2VsZWN0b3IoYHNvdXJjZVtzcmNzZXQ9XCIke2N1cnJlbnRTcmN9XCJdYCk7XG5cbiAgICBpZiAoY3VycmVudFNyYyAmJiBwaWN0dXJlU291cmNlKSB7XG4gICAgICBwaWN0dXJlU291cmNlLnNyY3NldCA9IGltYWdlRGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKGltZy52YWx1ZSkge1xuICAgICAgaW1nLnZhbHVlLnNyYyA9IGltYWdlRGVmYXVsdDtcbiAgICB9XG4gIH07XG48L3NjcmlwdD5cblxuPHRlbXBsYXRlPlxuICA8cGljdHVyZVxuICAgIDpjbGFzcz1cIlsndGlkZS1pbWFnZScsIENTUy5ESVNQTEFZLkJMT0NLXVwiXG4gICAgcmVmPVwicGljdHVyZVwiXG4gICAgOnN0eWxlPVwiXG4gICAgICB3aWR0aCB8fCBoZWlnaHRcbiAgICAgICAgPyB7XG4gICAgICAgICAgICB3aWR0aDogd2lkdGggfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWRcbiAgICBcIlxuICA+XG4gICAgPHNvdXJjZVxuICAgICAgOmtleT1cInNvdXJjZS5zcmNzZXRcIlxuICAgICAgOm1lZGlhPVwiYChtaW4td2lkdGg6JHtzb3VyY2UubWVkaWF9cHgpYFwiXG4gICAgICA6c3Jjc2V0PVwic291cmNlLnNyY3NldFwiXG4gICAgICB2LWZvcj1cInNvdXJjZSBpbiBwcm9wcy5zb3VyY2VzXCJcbiAgICAvPlxuXG4gICAgPGltZ1xuICAgICAgOmFsdD1cImFsdFwiXG4gICAgICA6Y2xhc3M9XCJbQ1NTLldJRFRILkZVTEwsIENTUy5IRUlHSFQuRlVMTCwgQ1NTLk9CSkVDVC5DRU5URVIsIENTUy5PQkpFQ1QuQ09WRVJdXCJcbiAgICAgIDpmZXRjaHByaW9yaXR5PVwiaXNMYXp5ID8gdW5kZWZpbmVkIDogJ2hpZ2gnXCJcbiAgICAgIDpsb2FkaW5nPVwicHJvcHMuaXNMYXp5ID8gJ2xhenknIDogJ2VhZ2VyJ1wiXG4gICAgICByZWY9XCJpbWdcIlxuICAgICAgOnNyYz1cInNyYyA/PyBpbWFnZURlZmF1bHRcIlxuICAgICAgQGVycm9yPVwic2V0SW1hZ2VGcm9tRGVmYXVsdFwiXG4gICAgLz5cbiAgPC9waWN0dXJlPlxuPC90ZW1wbGF0ZT5cbiIsIjxzY3JpcHQgbGFuZz1cInRzXCIgc2V0dXA+XG4gIGltcG9ydCB7IGNvbXB1dGVkIH0gZnJvbSAndnVlJztcblxuICBpbXBvcnQgVGlkZUljb24gZnJvbSAnQC9jb21wb25lbnRzL1RpZGVJY29uLnZ1ZSc7XG4gIGltcG9ydCB7IElDT04gfSBmcm9tICdAL3R5cGVzL0ljb24nO1xuICBpbXBvcnQgeyBTSVpFIH0gZnJvbSAnQC90eXBlcy9TaXplJztcbiAgaW1wb3J0IHsgQ1NTIH0gZnJvbSAnQC90eXBlcy9TdHlsZXMnO1xuICBpbXBvcnQgeyBmb3JtYXROdW1iZXIgfSBmcm9tICdAL3V0aWxpdGllcy9mb3JtYXQnO1xuXG4gIHR5cGUgUHJvcHMgPSB7XG4gICAgY2hlY2tlZD86IGJvb2xlYW47XG4gICAgZGF0YVRyYWNrPzogc3RyaW5nO1xuICAgIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgICBpbmRldGVybWluYXRlPzogYm9vbGVhbjtcbiAgICBpbnB1dElkPzogc3RyaW5nO1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIG51bWJlcj86IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgfTtcblxuICBjb25zdCBwcm9wcyA9IHdpdGhEZWZhdWx0cyhkZWZpbmVQcm9wczxQcm9wcz4oKSwge1xuICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIGRhdGFUcmFjazogJycsXG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIGluZGV0ZXJtaW5hdGU6IGZhbHNlLFxuICAgIGlucHV0SWQ6IHVuZGVmaW5lZCxcbiAgICBsYWJlbDogdW5kZWZpbmVkLFxuICAgIG5hbWU6IHVuZGVmaW5lZCxcbiAgICBudW1iZXI6IHVuZGVmaW5lZCxcbiAgfSk7XG5cbiAgY29uc3QgaXNDaGVja2VkID0gY29tcHV0ZWQoKCkgPT4gcHJvcHMuY2hlY2tlZCB8fCBwcm9wcy5pbmRldGVybWluYXRlKTtcbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG4gIDxkaXZcbiAgICA6Y2xhc3M9XCJbXG4gICAgICAndGlkZS1pbnB1dC1jaGVja2JveCcsXG4gICAgICBDU1MuRElTUExBWS5GTEVYLFxuICAgICAgQ1NTLkFYSVMyLkNFTlRFUixcbiAgICAgIENTUy5HQVAuSEFMRixcbiAgICAgIENTUy5GT05ULlJPTEUuQk9EWV8xLFxuICAgICAgZGlzYWJsZWQgPyBbJ2Rpc2FibGVkJywgQ1NTLlBPSU5URVJfRVZFTlRTLk9GRl0gOiBDU1MuQ1VSU09SLlBPSU5URVIsXG4gICAgXVwiXG4gID5cbiAgICA8aW5wdXRcbiAgICAgIDpjaGVja2VkPVwiaXNDaGVja2VkXCJcbiAgICAgIDpjbGFzcz1cIltDU1MuRElTUExBWS5OT05FXVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJwcm9wcy5kaXNhYmxlZFwiXG4gICAgICA6bmFtZT1cInByb3BzLm5hbWVcIlxuICAgICAgcmVmPVwiaW5wdXRcIlxuICAgICAgQGNsaWNrLnByZXZlbnRcbiAgICAgIDppZD1cInByb3BzLmlucHV0SWRcIlxuICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAvPlxuXG4gICAgPGRpdlxuICAgICAgOmNsYXNzPVwiW1xuICAgICAgICAndGlkZS1pbnB1dC1jaGVja2JveC1jdXN0b20nLFxuICAgICAgICBDU1MuUE9TSVRJT04uUkVMQVRJVkUsXG4gICAgICAgIENTUy5ESVNQTEFZLkZMRVgsXG4gICAgICAgIENTUy5BWElTMS5DRU5URVIsXG4gICAgICAgIENTUy5BWElTMi5DRU5URVIsXG4gICAgICAgIENTUy5GTEVYLlNIUklOSy5PRkYsXG4gICAgICAgIENTUy5CT1JERVIuRlVMTC5PTkUsXG4gICAgICAgIGlzQ2hlY2tlZCA/IFtDU1MuQk9SREVSLkNPTE9SLkhJR0gsIENTUy5CRy5TRUNPTkRBUlldIDogW0NTUy5CT1JERVIuQ09MT1IuREVGQVVMVCwgQ1NTLkJHLlNVUkZBQ0UuREVGQVVMVF0sXG4gICAgICAgIENTUy5CT1JERVIuUkFESVVTLlFVQVJURVIsXG4gICAgICAgIGlzQ2hlY2tlZCAmJiAnY2hlY2tlZCcsXG4gICAgICAgIGRpc2FibGVkID8gQ1NTLkNVUlNPUi5OT1RfQUxMT1dFRCA6IENTUy5DVVJTT1IuUE9JTlRFUixcbiAgICAgIF1cIlxuICAgID5cbiAgICAgIDxUaWRlSWNvblxuICAgICAgICA6Y2xhc3M9XCJbQ1NTLkZPTlQuQ09MT1IuU0VDT05EQVJZXVwiXG4gICAgICAgIDppY29uPVwicHJvcHMuaW5kZXRlcm1pbmF0ZSA/IElDT04uUkVNT1ZFIDogSUNPTi5DSEVDS1wiXG4gICAgICAgIDpzaXplPVwiU0laRS5TTUFMTFwiXG4gICAgICAgIHYtaWY9XCJpc0NoZWNrZWRcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxsYWJlbFxuICAgICAgOmNsYXNzPVwiW1xuICAgICAgICBDU1MuRElTUExBWS5GTEVYLFxuICAgICAgICBDU1MuR0FQLkhBTEYsXG4gICAgICAgIENTUy5GT05ULlJPTEUuQk9EWV8xLFxuICAgICAgICBkaXNhYmxlZCA/IENTUy5DVVJTT1IuTk9UX0FMTE9XRUQgOiBDU1MuQ1VSU09SLlBPSU5URVIsXG4gICAgICBdXCJcbiAgICAgIDpmb3I9XCJwcm9wcy5pbnB1dElkXCJcbiAgICAgIEBjbGljay5wcmV2ZW50XG4gICAgICB2LWlmPVwibGFiZWxcIlxuICAgID5cbiAgICAgIDxzcGFuPnt7IGxhYmVsIH19PC9zcGFuPlxuICAgICAgPHNwYW5cbiAgICAgICAgOmNsYXNzPVwiW0NTUy5GT05ULkNPTE9SLlNVUkZBQ0UuVkFSSUFOVF1cIlxuICAgICAgICB2LWlmPVwicHJvcHMubnVtYmVyXCJcbiAgICAgID5cbiAgICAgICAgKHt7IGZvcm1hdE51bWJlcihwcm9wcy5udW1iZXIpIH19KVxuICAgICAgPC9zcGFuPlxuICAgIDwvbGFiZWw+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIHNjb3BlZD5cbiAgLnRpZGUtaW5wdXQtY2hlY2tib3guZGlzYWJsZWQge1xuICAgIG9wYWNpdHk6IHZhcigtLXRpZGUtZGlzYWJsZWQpO1xuICB9XG5cbiAgLnRpZGUtaW5wdXQtY2hlY2tib3gtY3VzdG9tIHtcbiAgICB3aWR0aDogdmFyKC0tdGlkZS1mb250LTI4KTtcbiAgICBoZWlnaHQ6IHZhcigtLXRpZGUtZm9udC0yOCk7XG4gIH1cbjwvc3R5bGU+XG4iLCI8c2NyaXB0IGxhbmc9XCJ0c1wiIHNldHVwPlxuICBpbXBvcnQgeyByZWYsIHdhdGNoIH0gZnJvbSAndnVlJztcblxuICBpbXBvcnQgeyBDU1MgfSBmcm9tICdAL3R5cGVzL1N0eWxlcyc7XG5cbiAgdHlwZSBQcm9wcyA9IHtcbiAgICBjaGVja2VkPzogYm9vbGVhbjtcbiAgICBkYXRhVHJhY2s/OiBzdHJpbmc7XG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIGlucHV0SWQ/OiBzdHJpbmc7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gIH07XG5cbiAgY29uc3QgcHJvcHMgPSB3aXRoRGVmYXVsdHMoZGVmaW5lUHJvcHM8UHJvcHM+KCksIHtcbiAgICBjaGVja2VkOiBmYWxzZSxcbiAgICBkYXRhVHJhY2s6ICcnLFxuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBpbnB1dElkOiB1bmRlZmluZWQsXG4gICAgbGFiZWw6IHVuZGVmaW5lZCxcbiAgfSk7XG5cbiAgY29uc3QgY2hlY2tlZCA9IHJlZihwcm9wcy5jaGVja2VkKTtcblxuICB3YXRjaChcbiAgICAoKSA9PiBwcm9wcy5jaGVja2VkLFxuICAgIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcbiAgICAgIGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUgfHwgbmV3VmFsdWUgIT09IGNoZWNrZWQudmFsdWUpIHtcbiAgICAgICAgY2hlY2tlZC52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG4gIDxkaXZcbiAgICA6Y2xhc3M9XCJbXG4gICAgICAndGlkZS1pbnB1dC1yYWRpbycsXG4gICAgICBDU1MuRElTUExBWS5GTEVYLFxuICAgICAgQ1NTLkFYSVMyLkNFTlRFUixcbiAgICAgIENTUy5HQVAuSEFMRixcbiAgICAgIENTUy5QT0lOVEVSX0VWRU5UUy5PRkYsXG4gICAgICBwcm9wcy5kaXNhYmxlZCAmJiAnZGlzYWJsZWQnLFxuICAgIF1cIlxuICA+XG4gICAgPGlucHV0XG4gICAgICA6Y2hlY2tlZD1cImNoZWNrZWRcIlxuICAgICAgOmNsYXNzPVwiW0NTUy5ESVNQTEFZLk5PTkVdXCJcbiAgICAgIDppZD1cInByb3BzLmlucHV0SWRcIlxuICAgICAgbmFtZT1cIlwiXG4gICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgdmFsdWU9XCJcIlxuICAgIC8+XG5cbiAgICA8ZGl2XG4gICAgICA6Y2xhc3M9XCJbXG4gICAgICAgICd0aWRlLWlucHV0LXJhZGlvLWN1c3RvbScsXG4gICAgICAgIENTUy5QT1NJVElPTi5SRUxBVElWRSxcbiAgICAgICAgQ1NTLkRJU1BMQVkuRkxFWCxcbiAgICAgICAgQ1NTLkFYSVMxLkNFTlRFUixcbiAgICAgICAgQ1NTLkFYSVMyLkNFTlRFUixcbiAgICAgICAgQ1NTLkJPUkRFUi5GVUxMLk9ORSxcbiAgICAgICAgY2hlY2tlZCA/IENTUy5CT1JERVIuQ09MT1IuSElHSCA6IENTUy5CT1JERVIuQ09MT1IuREVGQVVMVCxcbiAgICAgICAgQ1NTLkJPUkRFUi5SQURJVVMuRlVMTCxcbiAgICAgICAgQ1NTLkJHLlNVUkZBQ0UuREVGQVVMVCxcbiAgICAgICAgQ1NTLkNVUlNPUi5QT0lOVEVSLFxuICAgICAgICBDU1MuUE9JTlRFUl9FVkVOVFMuT04sXG4gICAgICAgIGNoZWNrZWQgJiYgJ2NoZWNrZWQnLFxuICAgICAgXVwiXG4gICAgPlxuICAgICAgPGRpdiA6Y2xhc3M9XCJbJ3RpZGUtaW5wdXQtcmFkaW8tY2hlY2snLCBDU1MuQk9SREVSLlJBRElVUy5GVUxMLCBwcm9wcy5jaGVja2VkICYmIENTUy5CRy5TRUNPTkRBUlldXCIgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxsYWJlbFxuICAgICAgOmNsYXNzPVwiW0NTUy5GT05ULlJPTEUuQk9EWV8xLCBDU1MuQ1VSU09SLlBPSU5URVIsIENTUy5QT0lOVEVSX0VWRU5UUy5PTl1cIlxuICAgICAgOmZvcj1cInByb3BzLmlucHV0SWRcIlxuICAgID5cbiAgICAgIHt7IHByb3BzLmxhYmVsIH19XG4gICAgPC9sYWJlbD5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgc2NvcGVkPlxuICAudGlkZS1pbnB1dC1yYWRpby5kaXNhYmxlZCB7XG4gICAgb3BhY2l0eTogdmFyKC0tdGlkZS1kaXNhYmxlZCk7XG4gIH1cblxuICAudGlkZS1pbnB1dC1yYWRpby1jdXN0b20ge1xuICAgIHdpZHRoOiB2YXIoLS10aWRlLWZvbnQtMjgpO1xuICAgIGhlaWdodDogdmFyKC0tdGlkZS1mb250LTI4KTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXJhZGlvLWNoZWNrIHtcbiAgICB3aWR0aDogMXJlbTtcbiAgICBoZWlnaHQ6IDFyZW07XG4gIH1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBwcmljZVRvTnVtYmVyIH0gZnJvbSAnQC91dGlsaXRpZXMvZm9ybWF0JztcblxuaW1wb3J0IHR5cGUgeyBSYW5nZURhdGEgfSBmcm9tICdAL3R5cGVzL0ZhY2V0UmFuZ2UnO1xuaW1wb3J0IHR5cGUgeyBTdHJpbmdJbnB1dCB9IGZyb20gJ0AvdHlwZXMvRm9ybSc7XG5pbXBvcnQgdHlwZSB7IFNlbGVjdE9wdGlvbiB9IGZyb20gJ0AvdHlwZXMvU2VsZWN0JztcbmltcG9ydCB0eXBlIHsgVmFsaWRhdGlvbkVycm9yLCBWYWxpZGF0aW9uTGVuZ3RoLCBWYWxpZGF0aW9uUmVzdWx0LCBWYWxpZGF0b3IgfSBmcm9tICdAL3R5cGVzL1ZhbGlkYXRpb24nO1xuaW1wb3J0IHR5cGUgeyBSZWYgfSBmcm9tICd2dWUnO1xuXG5leHBvcnQgY29uc3QgZXJyb3JNZXNzYWdlRGVmYXVsdCA9ICdQbGVhc2UgZW50ZXIgYSB2YWxpZCB2YWx1ZS4nO1xuXG5leHBvcnQgY29uc3Qgbm9FcnJvciA9IHtcbiAgbWVzc2FnZTogJycsXG4gIHZhbGlkOiB0cnVlLFxufSBhcyBSZWFkb25seTxWYWxpZGF0aW9uUmVzdWx0PjtcblxuZXhwb3J0IGNvbnN0IGNoZWNrRm9ybWF0ID0gKGZvcm1hdDogUmVnRXhwKSA9PiB7XG4gIHJldHVybiAodmFsdWU6IHN0cmluZyk6IFZhbGlkYXRpb25SZXN1bHQgPT4ge1xuICAgIGxldCByZXN1bHQgPSBub0Vycm9yO1xuXG4gICAgaWYgKCF2YWx1ZS50cmltKCkubWF0Y2goZm9ybWF0KSkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2VEZWZhdWx0LFxuICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RXJyb3JNZXNzYWdlID0gKGVycm9yRnJvbVByb3BzOiBWYWxpZGF0aW9uRXJyb3IsIGVycm9yRnJvbVJlZjogVmFsaWRhdGlvbkVycm9yKSA9PiB7XG4gIC8vIGVycm9yIGluIHByb3BzIHRha2VzIHByZWNlZGVuY2Ugb3ZlciB2YWxpZGF0aW9uIGVycm9yXG4gIGlmICh0eXBlb2YgZXJyb3JGcm9tUHJvcHMgPT09ICdzdHJpbmcnICYmIGVycm9yRnJvbVByb3BzLmxlbmd0aCA+IDApIHJldHVybiBlcnJvckZyb21Qcm9wcztcblxuICByZXR1cm4gdHlwZW9mIGVycm9yRnJvbVJlZiA9PT0gJ3N0cmluZycgJiYgZXJyb3JGcm9tUmVmLmxlbmd0aCA+IDAgPyBlcnJvckZyb21SZWYgOiBlcnJvck1lc3NhZ2VEZWZhdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpZWxkSGFzRXJyb3IgPSAoZXJyb3JGcm9tUHJvcHM6IFZhbGlkYXRpb25FcnJvciwgZXJyb3JGcm9tUmVmOiBWYWxpZGF0aW9uRXJyb3IpID0+XG4gIGVycm9yRnJvbVByb3BzICE9PSBmYWxzZSB8fCBlcnJvckZyb21SZWYgIT09IGZhbHNlO1xuXG5leHBvcnQgY29uc3QgZ2V0RmllbGRMZW5ndGhJc1ZhbGlkID0gKHsgbWF4bGVuZ3RoLCBtaW5sZW5ndGgsIHJlcXVpcmVkLCB2YWx1ZSB9OiBWYWxpZGF0aW9uTGVuZ3RoKSA9PiB7XG4gIGNvbnN0IGlzRW1wdHlBbmRVbnJlcXVpcmVkID0gdmFsdWUubGVuZ3RoID09PSAwICYmICFyZXF1aXJlZDtcbiAgY29uc3QgaXNUb29Mb25nID0gbWF4bGVuZ3RoICYmIHZhbHVlLmxlbmd0aCA+IG1heGxlbmd0aDtcbiAgY29uc3QgaXNUb29TaG9ydCA9ICFpc0VtcHR5QW5kVW5yZXF1aXJlZCAmJiBtaW5sZW5ndGggJiYgdmFsdWUubGVuZ3RoIDwgbWlubGVuZ3RoO1xuXG4gIHJldHVybiAhaXNUb29TaG9ydCAmJiAhaXNUb29Mb25nO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE1heFJhbmdlSXNWYWxpZCA9ICh7IG1pbiB9OiBQaWNrPFJhbmdlRGF0YSwgJ21pbic+LCB0eXBlPzogJ3ByaWNlJykgPT4ge1xuICByZXR1cm4gKHZhbHVlOiBzdHJpbmcpOiBWYWxpZGF0aW9uUmVzdWx0ID0+IHtcbiAgICBsZXQgbmV3TWF4OiBudW1iZXIgfCBudWxsID0gdHlwZSA9PT0gJ3ByaWNlJyA/IHByaWNlVG9OdW1iZXIodmFsdWUpIDogTnVtYmVyKHZhbHVlKTtcbiAgICBuZXdNYXggPSAhaXNOYU4obmV3TWF4KSA/IG5ld01heCA6IG51bGw7XG4gICAgaWYgKG1pbiAmJiBuZXdNYXgpIHtcbiAgICAgIGlmIChuZXdNYXggPj0gbWluKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWVzc2FnZTogJycsXG4gICAgICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1lc3NhZ2U6IGBNdXN0IGJlIGdyZWF0ZXIgdGhhbiBtaW5gLFxuICAgICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5vRXJyb3I7XG4gICAgfVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE1pblJhbmdlSXNWYWxpZCA9ICh7IG1heCB9OiBQaWNrPFJhbmdlRGF0YSwgJ21heCc+LCB0eXBlPzogJ3ByaWNlJykgPT4ge1xuICByZXR1cm4gKHZhbHVlOiBzdHJpbmcpOiBWYWxpZGF0aW9uUmVzdWx0ID0+IHtcbiAgICBsZXQgbmV3TWluOiBudW1iZXIgfCBudWxsID0gdHlwZSA9PT0gJ3ByaWNlJyA/IHByaWNlVG9OdW1iZXIodmFsdWUpIDogTnVtYmVyKHZhbHVlKTtcbiAgICBuZXdNaW4gPSAhaXNOYU4obmV3TWluKSA/IG5ld01pbiA6IG51bGw7XG4gICAgaWYgKG1heCAmJiBuZXdNaW4pIHtcbiAgICAgIGlmIChuZXdNaW4gPD0gbWF4KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWVzc2FnZTogJycsXG4gICAgICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1lc3NhZ2U6IGBNdXN0IGJlIGxlc3MgdGhhbiBtYXhgLFxuICAgICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5vRXJyb3I7XG4gICAgfVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNlbGVjdE9wdGlvbnNGcm9tU3RyaW5ncyA9IChzdHJpbmdzOiBzdHJpbmdbXSkgPT5cbiAgc3RyaW5ncy5tYXAoXG4gICAgKG9wdGlvbikgPT5cbiAgICAgICh7XG4gICAgICAgIGxhYmVsOiBvcHRpb24sXG4gICAgICAgIHZhbHVlOiBvcHRpb24sXG4gICAgICB9IGFzIFNlbGVjdE9wdGlvbilcbiAgKTtcblxuZXhwb3J0IGNvbnN0IGhhbmRsZUZpZWxkVmFsaWRhdGlvbiA9ICh7XG4gIGVycm9yLFxuICBlcnJvckZyb21Qcm9wcyxcbiAgbWF4bGVuZ3RoLFxuICBtaW5sZW5ndGgsXG4gIHJlcXVpcmVkID0gZmFsc2UsXG4gIHZhbGlkYXRvcnMsXG4gIHZhbHVlLFxufToge1xuICBlcnJvcjogUmVmPFZhbGlkYXRpb25FcnJvcj47XG4gIGVycm9yRnJvbVByb3BzOiBWYWxpZGF0aW9uRXJyb3I7XG4gIG1heGxlbmd0aD86IG51bWJlcjtcbiAgbWlubGVuZ3RoPzogbnVtYmVyO1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIHZhbGlkYXRvcnM/OiBWYWxpZGF0b3JbXTtcbiAgdmFsdWU/OiBSZWY8c3RyaW5nIHwgdW5kZWZpbmVkPjtcbn0pID0+IHtcbiAgLy8gZXJyb3IgaW4gcHJvcHMgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHZhbGlkYXRpb24gZXJyb3JcblxuICBlcnJvci52YWx1ZSA9IGVycm9yRnJvbVByb3BzID8gZXJyb3JGcm9tUHJvcHMgOiBmYWxzZTtcblxuICBpZiAoIWVycm9yLnZhbHVlICYmIHZhbGlkYXRvcnMpIHtcbiAgICBjb25zdCB2YWxpZGF0aW9uID0gdmFsaWRhdGVQcm9wZXJ0eSh2YWx1ZT8udmFsdWUgfHwgJycsIHZhbGlkYXRvcnMpO1xuXG4gICAgaWYgKCF2YWxpZGF0aW9uLnZhbGlkKSB7XG4gICAgICBlcnJvci52YWx1ZSA9IHZhbGlkYXRpb24ubWVzc2FnZTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWVycm9yLnZhbHVlICYmIChtYXhsZW5ndGggfHwgbWlubGVuZ3RoKSkge1xuICAgIGNvbnN0IGxlbmd0aFZhbGlkYXRpb24gPSB2YWxpZGF0ZUxlbmd0aCh7XG4gICAgICBtYXhsZW5ndGgsXG4gICAgICBtaW5sZW5ndGgsXG4gICAgICByZXF1aXJlZCxcbiAgICAgIHZhbHVlOiB2YWx1ZT8udmFsdWUgfHwgJycsXG4gICAgfSk7XG5cbiAgICBpZiAoIWxlbmd0aFZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgIGVycm9yLnZhbHVlID0gbGVuZ3RoVmFsaWRhdGlvbi5tZXNzYWdlO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRmllbGRzRnJvbVJlZnMoZmllbGRzOiB7IFtrZXk6IHN0cmluZ106IFJlZjxTdHJpbmdJbnB1dCB8IG51bGw+IH0pIHtcbiAgbGV0IHZhbGlkID0gdHJ1ZTtcblxuICBmb3IgKGNvbnN0IGtleSBpbiBmaWVsZHMpIHtcbiAgICBpZiAoZmllbGRzW2tleV0udmFsdWU/LnJlcXVpcmVkKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGZpZWxkc1trZXldLnZhbHVlPy52YWx1ZTtcbiAgICAgIHZhbGlkID0gdmFsaWQgJiYgISF2YWx1ZSAmJiB2YWx1ZS50cmltKCkgIT09ICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGVycm9yID0gZmllbGRzW2tleV0udmFsdWU/LmVycm9yO1xuICAgIHZhbGlkID0gdmFsaWQgJiYgIWVycm9yO1xuICB9XG5cbiAgcmV0dXJuIHZhbGlkO1xufVxuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVMZW5ndGggPSAoe1xuICBtYXhsZW5ndGgsXG4gIG1pbmxlbmd0aCxcbiAgcmVxdWlyZWQgPSBmYWxzZSxcbiAgdmFsdWUsXG59OiBWYWxpZGF0aW9uTGVuZ3RoKTogVmFsaWRhdGlvblJlc3VsdCA9PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgIG1lc3NhZ2U6ICcnLFxuICAgIHZhbGlkOiB0cnVlLFxuICB9O1xuXG4gIHJlc3BvbnNlLnZhbGlkID0gZ2V0RmllbGRMZW5ndGhJc1ZhbGlkKHtcbiAgICBtYXhsZW5ndGgsXG4gICAgbWlubGVuZ3RoLFxuICAgIHJlcXVpcmVkLFxuICAgIHZhbHVlLFxuICB9KTtcblxuICBpZiAocmVzcG9uc2UudmFsaWQpIHJldHVybiByZXNwb25zZTtcblxuICByZXNwb25zZS5tZXNzYWdlID0gZXJyb3JNZXNzYWdlRGVmYXVsdDtcblxuICBpZiAobWF4bGVuZ3RoICYmIG1pbmxlbmd0aCkge1xuICAgIHJlc3BvbnNlLm1lc3NhZ2UgPSBgUGxlYXNlIGVudGVyIGEgdmFsdWUgYmV0d2VlbiAke21pbmxlbmd0aH0gYW5kICR7bWF4bGVuZ3RofSBjaGFyYWN0ZXJzIGluIGxlbmd0aC5gO1xuICB9IGVsc2UgaWYgKG1heGxlbmd0aCkge1xuICAgIHJlc3BvbnNlLm1lc3NhZ2UgPSBgUGxlYXNlIGVudGVyIGEgdmFsdWUgbm8gbW9yZSB0aGFuICR7bWF4bGVuZ3RofSBjaGFyYWN0ZXJzIGluIGxlbmd0aC5gO1xuICB9IGVsc2UgaWYgKG1pbmxlbmd0aCkge1xuICAgIHJlc3BvbnNlLm1lc3NhZ2UgPSBgUGxlYXNlIGVudGVyIGEgdmFsdWUgbm8gbGVzcyB0aGFuICR7bWlubGVuZ3RofSBjaGFyYWN0ZXJzIGluIGxlbmd0aC5gO1xuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydHkodmFsdWU6IHN0cmluZywgdmFsaWRhdG9yczogKCh2YWx1ZTogc3RyaW5nKSA9PiBWYWxpZGF0aW9uUmVzdWx0KVtdKTogVmFsaWRhdGlvblJlc3VsdCB7XG4gIGZvciAoY29uc3QgdmFsaWRhdG9yIG9mIHZhbGlkYXRvcnMpIHtcbiAgICBjb25zdCB2YWxpZGF0aW9uID0gdmFsaWRhdG9yKHZhbHVlKTtcbiAgICBpZiAoIXZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgIHJldHVybiB2YWxpZGF0aW9uO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbWVzc2FnZTogJycsXG4gICAgdmFsaWQ6IHRydWUsXG4gIH07XG59XG4iLCI8c2NyaXB0IGxhbmc9XCJ0c1wiIHNldHVwPlxuICBpbXBvcnQgeyBjb21wdXRlZCwgcmVmLCB3YXRjaCB9IGZyb20gJ3Z1ZSc7XG5cbiAgaW1wb3J0IFRpZGVJY29uIGZyb20gJ0AvY29tcG9uZW50cy9UaWRlSWNvbi52dWUnO1xuICBpbXBvcnQgeyBJQ09OIH0gZnJvbSAnQC90eXBlcy9JY29uJztcbiAgaW1wb3J0IHsgU0laRSB9IGZyb20gJ0AvdHlwZXMvU2l6ZSc7XG4gIGltcG9ydCB7IENTUyB9IGZyb20gJ0AvdHlwZXMvU3R5bGVzJztcbiAgaW1wb3J0IHsgZ2V0RXJyb3JNZXNzYWdlLCBnZXRGaWVsZEhhc0Vycm9yIH0gZnJvbSAnQC91dGlsaXRpZXMvdmFsaWRhdGlvbic7XG5cbiAgaW1wb3J0IHR5cGUgeyBTZWxlY3RGaWVsZCB9IGZyb20gJ0AvdHlwZXMvRmllbGQnO1xuICBpbXBvcnQgdHlwZSB7IFNlbGVjdE9wdGlvbiwgU2VsZWN0T3B0aW9uR3JvdXAgfSBmcm9tICdAL3R5cGVzL1NlbGVjdCc7XG5cbiAgaW50ZXJmYWNlIFByb3BzIGV4dGVuZHMgU2VsZWN0RmllbGQge1xuICAgIGlucHV0SWQ/OiBzdHJpbmc7XG4gICAgc3VwcG9ydGluZ1RleHQ/OiBzdHJpbmc7XG4gIH1cblxuICBjb25zdCBwcm9wcyA9IHdpdGhEZWZhdWx0cyhkZWZpbmVQcm9wczxQcm9wcz4oKSwge1xuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBlcnJvcjogZmFsc2UsXG4gICAgaW5wdXRJZDogdW5kZWZpbmVkLFxuICAgIGxhYmVsOiB1bmRlZmluZWQsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIHN1cHBvcnRpbmdUZXh0OiB1bmRlZmluZWQsXG4gICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgfSk7XG5cbiAgY29uc3QgZXJyb3IgPSByZWYocHJvcHMuZXJyb3IpO1xuICBjb25zdCBoYXNGb2N1cyA9IHJlZihmYWxzZSk7XG4gIGNvbnN0IGlucHV0ID0gcmVmPEhUTUxTZWxlY3RFbGVtZW50IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IHJlcXVpcmVkID0gcmVmKHByb3BzLnJlcXVpcmVkKTtcbiAgY29uc3QgdmFsdWUgPSByZWY8c3RyaW5nIHwgdW5kZWZpbmVkPihwcm9wcy52YWx1ZSk7XG5cbiAgY29uc3QgZXJyb3JNZXNzYWdlID0gY29tcHV0ZWQoKCkgPT4gZ2V0RXJyb3JNZXNzYWdlKHByb3BzLmVycm9yLCBlcnJvci52YWx1ZSkpO1xuICBjb25zdCBmb3JtYXR0ZWRMYWJlbCA9IGNvbXB1dGVkKCgpID0+IChwcm9wcy5yZXF1aXJlZCA/IGAke3Byb3BzLmxhYmVsfSAqYCA6IHByb3BzLmxhYmVsKSk7XG4gIGNvbnN0IGhhc0Vycm9yID0gY29tcHV0ZWQoKCkgPT4gKHByb3BzLnJlcXVpcmVkICYmICF2YWx1ZS52YWx1ZSkgfHwgZ2V0RmllbGRIYXNFcnJvcihlcnJvci52YWx1ZSwgcHJvcHMuZXJyb3IpKTtcbiAgY29uc3QgaGFzTWluaWxhYmVsID0gY29tcHV0ZWQoKCkgPT4gaGFzRm9jdXMudmFsdWUgfHwgIWlzRW1wdHkudmFsdWUpO1xuICBjb25zdCBpc0VtcHR5ID0gY29tcHV0ZWQoKCkgPT4gdmFsdWUudmFsdWUgPT09IHVuZGVmaW5lZCk7XG5cbiAgY29uc3QgZXhwYW5kT3B0aW9ucyA9ICgpID0+IHtcbiAgICBjb25zdCBldmVudCA9IG5ldyBNb3VzZUV2ZW50KCdtb3VzZWRvd24nKTtcbiAgICBpbnB1dD8udmFsdWU/LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUZvY3VzID0gKCkgPT4ge1xuICAgIGhhc0ZvY3VzLnZhbHVlID0gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVGb2N1c091dCA9ICgpID0+IHtcbiAgICBoYXNGb2N1cy52YWx1ZSA9IGZhbHNlO1xuICB9O1xuXG4gIHdhdGNoKFxuICAgICgpID0+IHByb3BzLnZhbHVlLFxuICAgIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcbiAgICAgIGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUgfHwgbmV3VmFsdWUgIT09IHZhbHVlLnZhbHVlKSB7XG4gICAgICAgIHZhbHVlLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICB9XG4gICAgfVxuICApO1xuXG4gIGRlZmluZUV4cG9zZSh7IGVycm9yLCB2YWx1ZSB9KTtcbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG4gIDxkaXZcbiAgICA6Y2xhc3M9XCJbXG4gICAgICAndGlkZS1pbnB1dC1zZWxlY3QnLFxuICAgICAgQ1NTLkRJU1BMQVkuRkxFWCxcbiAgICAgIENTUy5GTEVYLkRJUkVDVElPTi5DT0xVTU4sXG4gICAgICBDU1MuR0FQLlFVQVJURVIsXG4gICAgICBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLFxuICAgICAgaGFzRXJyb3IgJiYgJ2Vycm9yJyxcbiAgICBdXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgIDpjbGFzcz1cIltcbiAgICAgICAgJ3RpZGUtaW5wdXQtYm9yZGVyJyxcbiAgICAgICAgQ1NTLlBPU0lUSU9OLlJFTEFUSVZFLFxuICAgICAgICBDU1MuRElTUExBWS5GTEVYLFxuICAgICAgICBDU1MuQVhJUzIuQ0VOVEVSLFxuICAgICAgICBDU1MuR0FQLkhBTEYsXG4gICAgICAgIENTUy5CT1JERVIuUkFESVVTLkhBTEYsXG4gICAgICAgIENTUy5CRy5TVVJGQUNFLkRFRkFVTFQsXG4gICAgICAgIHByb3BzLmRpc2FibGVkID8gQ1NTLkNVUlNPUi5OT1RfQUxMT1dFRCA6ICcnLFxuICAgICAgICBDU1MuT1ZFUkZMT1cuWFkuSElEREVOLFxuICAgICAgXVwiXG4gICAgICBAY2xpY2s9XCJleHBhbmRPcHRpb25zXCJcbiAgICA+XG4gICAgICA8ZGl2IDpjbGFzcz1cIltDU1MuRElTUExBWS5GTEVYLCBDU1MuRkxFWC5ESVJFQ1RJT04uQ09MVU1OLCBDU1MuV0lEVEguRlVMTF1cIj5cbiAgICAgICAgPGxhYmVsXG4gICAgICAgICAgOmNsYXNzPVwiW1xuICAgICAgICAgICAgaGFzTWluaWxhYmVsID8gWydtaW5pbGFiZWwnLCBDU1MuRk9OVC5ST0xFLkxBQkVMXzNdIDogQ1NTLkZPTlQuUk9MRS5MQUJFTF8xLFxuICAgICAgICAgICAgQ1NTLlBPU0lUSU9OLkFCU09MVVRFLFxuICAgICAgICAgICAgQ1NTLlBPU0lUSU9OSU5HLkxFRlQsXG4gICAgICAgICAgICBDU1MuTUFSR0lOLlRPUC5IQUxGLFxuICAgICAgICAgICAgQ1NTLk1BUkdJTi5MRUZULk9ORSxcbiAgICAgICAgICAgICFoYXNFcnJvciAmJiBDU1MuRk9OVC5DT0xPUi5TVVJGQUNFLlZBUklBTlQsXG4gICAgICAgICAgICBDU1MuUE9JTlRFUl9FVkVOVFMuT0ZGLFxuICAgICAgICAgIF1cIlxuICAgICAgICAgIDpmb3I9XCJwcm9wcy5pbnB1dElkXCJcbiAgICAgICAgICB2LWlmPVwibGFiZWxcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgZm9ybWF0dGVkTGFiZWwgfX1cbiAgICAgICAgPC9sYWJlbD5cblxuICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgOmNsYXNzPVwiW1xuICAgICAgICAgICAgQ1NTLlBBRERJTkcuQk9UVE9NLkhBTEYsXG4gICAgICAgICAgICBDU1MuUEFERElORy5YLk9ORSxcbiAgICAgICAgICAgIENTUy5XSURUSC5GVUxMLFxuICAgICAgICAgICAgZGlzYWJsZWQgJiYgQ1NTLkNVUlNPUi5OT1RfQUxMT1dFRCxcbiAgICAgICAgICAgIENTUy5GT05ULlJPTEUuQk9EWV8xLFxuICAgICAgICAgIF1cIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICA6bmFtZT1cIm5hbWVcIlxuICAgICAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgICAgICA6cmVxdWlyZWQ9XCJyZXF1aXJlZFwiXG4gICAgICAgICAgQGZvY3VzPVwiaGFuZGxlRm9jdXNcIlxuICAgICAgICAgIEBmb2N1c291dD1cImhhbmRsZUZvY3VzT3V0XCJcbiAgICAgICAgICA6aWQ9XCJwcm9wcy5pbnB1dElkXCJcbiAgICAgICAgICB2LW1vZGVsPVwidmFsdWVcIlxuICAgICAgICA+XG4gICAgICAgICAgPHRlbXBsYXRlIHYtZm9yPVwib3B0Z3JvdXAgaW4gcHJvcHMub3B0Z3JvdXBzXCI+XG4gICAgICAgICAgICA8b3B0Z3JvdXBcbiAgICAgICAgICAgICAgOmNsYXNzPVwiW0NTUy5XSURUSC5GVUxMLCBDU1MuQkcuU1VSRkFDRS5ERUZBVUxUXVwiXG4gICAgICAgICAgICAgIDprZXk9XCIob3B0Z3JvdXAgYXMgU2VsZWN0T3B0aW9uR3JvdXApLmxhYmVsXCJcbiAgICAgICAgICAgICAgOmxhYmVsPVwiKG9wdGdyb3VwIGFzIFNlbGVjdE9wdGlvbkdyb3VwKS5sYWJlbFwiXG4gICAgICAgICAgICAgIHYtaWY9XCIob3B0Z3JvdXAgYXMgU2VsZWN0T3B0aW9uR3JvdXApLm9wdGlvbnNcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8b3B0aW9uXG4gICAgICAgICAgICAgICAgOmNsYXNzPVwiW0NTUy5XSURUSC5GVUxMLCBDU1MuQkcuU1VSRkFDRS5ERUZBVUxUXVwiXG4gICAgICAgICAgICAgICAgOmtleT1cIm9wdGlvbi52YWx1ZVwiXG4gICAgICAgICAgICAgICAgOnZhbHVlPVwib3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgICAgICB2LWZvcj1cIm9wdGlvbiBpbiAob3B0Z3JvdXAgYXMgU2VsZWN0T3B0aW9uR3JvdXApLm9wdGlvbnNcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgb3B0aW9uLmxhYmVsIH19XG4gICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9vcHRncm91cD5cblxuICAgICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgICA6Y2xhc3M9XCJbQ1NTLldJRFRILkZVTEwsIENTUy5CRy5TVVJGQUNFLkRFRkFVTFRdXCJcbiAgICAgICAgICAgICAgOmtleT1cIihvcHRncm91cCBhcyBTZWxlY3RPcHRpb24pLnZhbHVlXCJcbiAgICAgICAgICAgICAgOnNlbGVjdGVkPVwidmFsdWUgPT09IChvcHRncm91cCBhcyBTZWxlY3RPcHRpb24pLnZhbHVlID8gdHJ1ZSA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgIDp2YWx1ZT1cIihvcHRncm91cCBhcyBTZWxlY3RPcHRpb24pLnZhbHVlXCJcbiAgICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IChvcHRncm91cCBhcyBTZWxlY3RPcHRpb24pLmxhYmVsIH19XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgOmNsYXNzPVwiW0NTUy5XSURUSC5GVUxMLCBDU1MuQkcuU1VSRkFDRS5ERUZBVUxUXVwiXG4gICAgICAgICAgICA6a2V5PVwib3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgIDpzZWxlY3RlZD1cInZhbHVlID09PSBvcHRpb24udmFsdWUgPyB0cnVlIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICAgIDp2YWx1ZT1cIm9wdGlvbi52YWx1ZVwiXG4gICAgICAgICAgICB2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBvcHRpb24ubGFiZWwgfX1cbiAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPFRpZGVJY29uXG4gICAgICAgIDpjbGFzcz1cIltDU1MuUE9TSVRJT04uQUJTT0xVVEUsIENTUy5QT1NJVElPTklORy5SSUdIVCwgQ1NTLk1BUkdJTi5SSUdIVC5PTkUsIENTUy5QT0lOVEVSX0VWRU5UUy5PRkZdXCJcbiAgICAgICAgOmljb249XCJJQ09OLkVYUEFORF9NT1JFXCJcbiAgICAgICAgOnNpemU9XCJTSVpFLlNNQUxMXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICA6Y2xhc3M9XCJbQ1NTLkRJU1BMQVkuRkxFWCwgQ1NTLkFYSVMyLkNFTlRFUiwgQ1NTLkdBUC5RVUFSVEVSXVwiXG4gICAgICB2LWlmPVwicHJvcHMuc3VwcG9ydGluZ1RleHQgfHwgaGFzRXJyb3JcIlxuICAgID5cbiAgICAgIDxUaWRlSWNvblxuICAgICAgICA6Y2xhc3M9XCJbXVwiXG4gICAgICAgIDppY29uPVwiSUNPTi5FUlJPUlwiXG4gICAgICAgIDpzaXplPVwiU0laRS5TTUFMTFwiXG4gICAgICAgIHYtaWY9XCJoYXNFcnJvclwiXG4gICAgICAvPlxuXG4gICAgICA8ZGl2IDpjbGFzcz1cIltDU1MuRk9OVC5ST0xFLkxBQkVMXzNdXCI+XG4gICAgICAgIHt7IGhhc0Vycm9yID8gZXJyb3JNZXNzYWdlIDogcHJvcHMuc3VwcG9ydGluZ1RleHQgfX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBzY29wZWQ+XG4gIHNlbGVjdCB7XG4gICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgfVxuXG4gIGxhYmVsIHtcbiAgICBoZWlnaHQ6IDEuMTg3NXJlbTtcbiAgICB0cmFuc2l0aW9uOiBmb250LXNpemUgdmFyKC0tdGlkZS1hbmltYXRlKSwgdHJhbnNmb3JtIHZhcigtLXRpZGUtYW5pbWF0ZSk7XG4gIH1cblxuICBsYWJlbDpub3QoLm1pbmlsYWJlbCkge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIGNhbGMoOSAvIDE2ICogMXJlbSkpO1xuICB9XG5cbiAgLnRpZGUtaW5wdXQtc2VsZWN0LmRpc2FibGVkIHtcbiAgICBvcGFjaXR5OiB2YXIoLS10aWRlLWRpc2FibGVkKTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXNlbGVjdC5lcnJvciAudGlkZS1pbnB1dC1ib3JkZXIge1xuICAgIG91dGxpbmUtY29sb3I6IHZhcigtLXRpZGUtZXJyb3ItYm9yZGVyKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS10aWRlLWVycm9yLXN1cmZhY2UpO1xuICB9XG5cbiAgLnRpZGUtaW5wdXQtc2VsZWN0LmVycm9yOmZvY3VzLXdpdGhpbiAudGlkZS1pbnB1dC1ib3JkZXIge1xuICAgIG91dGxpbmUtY29sb3I6IHZhcigtLXRpZGUtZXJyb3ItYm9yZGVyKTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXNlbGVjdDpmb2N1cy13aXRoaW4gLnRpZGUtaW5wdXQtYm9yZGVyIHtcbiAgICAtLXRpZGUtaW5wdXQtb3V0bGluZS13aWR0aDogdmFyKC0tdGlkZS1ib3JkZXItd2lkdGgtMik7XG4gICAgb3V0bGluZS1jb2xvcjogdmFyKC0tdGlkZS1zdXJmYWNlLWJvcmRlci1oaWdoKTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LWJvcmRlciB7XG4gICAgLS10aWRlLWlucHV0LW91dGxpbmUtd2lkdGg6IHZhcigtLXRpZGUtYm9yZGVyLXdpZHRoLTEpO1xuICAgIG91dGxpbmU6IHZhcigtLXRpZGUtaW5wdXQtb3V0bGluZS13aWR0aCkgc29saWQgdmFyKC0tdGlkZS1ib3JkZXIpO1xuICAgIG91dGxpbmUtb2Zmc2V0OiBjYWxjKHZhcigtLXRpZGUtaW5wdXQtb3V0bGluZS13aWR0aCkgKiAtMSk7XG4gIH1cblxuICAudGlkZS1pbnB1dC1zZWxlY3QuZXJyb3Ige1xuICAgIGNvbG9yOiB2YXIoLS10aWRlLWVycm9yLXByaW1hcnkpO1xuICB9XG5cbiAgLnRpZGUtaW5wdXQtc2VsZWN0LmVycm9yIG9wdGlvbiB7XG4gICAgY29sb3I6IHZhcigtLXRpZGUtb24tc3VyZmFjZSk7XG4gIH1cblxuICBzZWxlY3Qge1xuICAgIHBhZGRpbmctdG9wOiAyN3B4O1xuICB9XG48L3N0eWxlPlxuIiwiZXhwb3J0IGNvbnN0IFRFWFRfSU5QVVRfVFlQRSA9IHtcbiAgREFURTogJ2RhdGUnLFxuICBEQVRFVElNRV9MT0NBTDogJ2RhdGV0aW1lLWxvY2FsJyxcbiAgRU1BSUw6ICdlbWFpbCcsXG4gIE1PTlRIOiAnbW9udGgnLFxuICBOVU1CRVI6ICdudW1iZXInLFxuICBQQVNTV09SRDogJ3Bhc3N3b3JkJyxcbiAgU0VBUkNIOiAnc2VhcmNoJyxcbiAgVEVMOiAndGVsJyxcbiAgVEVYVDogJ3RleHQnLFxuICBUSU1FOiAndGltZScsXG4gIFVSTDogJ3VybCcsXG4gIFdFRUs6ICd3ZWVrJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIFRleHRJbnB1dFR5cGUgPSAodHlwZW9mIFRFWFRfSU5QVVRfVFlQRSlba2V5b2YgdHlwZW9mIFRFWFRfSU5QVVRfVFlQRV07XG4iLCI8c2NyaXB0IGxhbmc9XCJ0c1wiIHNldHVwPlxuICBpbXBvcnQgeyBjb21wdXRlZCwgcmVmLCB3YXRjaCB9IGZyb20gJ3Z1ZSc7XG5cbiAgaW1wb3J0IFRpZGVJY29uIGZyb20gJ0AvY29tcG9uZW50cy9UaWRlSWNvbi52dWUnO1xuICBpbXBvcnQgeyBJQ09OIH0gZnJvbSAnQC90eXBlcy9JY29uJztcbiAgaW1wb3J0IHsgU0laRSB9IGZyb20gJ0AvdHlwZXMvU2l6ZSc7XG4gIGltcG9ydCB7IENTUyB9IGZyb20gJ0AvdHlwZXMvU3R5bGVzJztcbiAgaW1wb3J0IHsgVEVYVF9JTlBVVF9UWVBFIH0gZnJvbSAnQC90eXBlcy9UZXh0SW5wdXQnO1xuICBpbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2UsIGdldEZpZWxkSGFzRXJyb3IsIGhhbmRsZUZpZWxkVmFsaWRhdGlvbiB9IGZyb20gJ0AvdXRpbGl0aWVzL3ZhbGlkYXRpb24nO1xuXG4gIGltcG9ydCB0eXBlIHsgRm9ybVZhbHVlVHJhbnNmb3JtZXIgfSBmcm9tICdAL3R5cGVzL0Zvcm0nO1xuICBpbXBvcnQgdHlwZSB7IEljb24gfSBmcm9tICdAL3R5cGVzL0ljb24nO1xuICBpbXBvcnQgdHlwZSB7IFRleHRJbnB1dFR5cGUgfSBmcm9tICdAL3R5cGVzL1RleHRJbnB1dCc7XG4gIGltcG9ydCB0eXBlIHsgVmFsaWRhdGlvbkVycm9yLCBWYWxpZGF0b3IgfSBmcm9tICdAL3R5cGVzL1ZhbGlkYXRpb24nO1xuXG4gIHR5cGUgUHJvcHMgPSB7XG4gICAgYXV0b2NvbXBsZXRlPzogYm9vbGVhbjtcbiAgICBkYXRhVHJhY2s/OiBzdHJpbmc7XG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIGVycm9yPzogVmFsaWRhdGlvbkVycm9yO1xuICAgIGhhc0NsZWFyPzogYm9vbGVhbjtcbiAgICBpY29uTGVhZGluZz86IEljb247XG4gICAgaW5wdXRJZD86IHN0cmluZztcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIG1heGxlbmd0aD86IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICBtaW5sZW5ndGg/OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHByZWZpeD86IHN0cmluZztcbiAgICByZXF1aXJlZD86IGJvb2xlYW47XG4gICAgc3VmZml4Pzogc3RyaW5nO1xuICAgIHN1cHBvcnRpbmdUZXh0Pzogc3RyaW5nO1xuICAgIHRyYW5zZm9ybVZhbHVlPzogRm9ybVZhbHVlVHJhbnNmb3JtZXI7XG4gICAgdHlwZT86IFRleHRJbnB1dFR5cGU7XG4gICAgdmFsaWRhdG9ycz86IFZhbGlkYXRvcltdO1xuICAgIHZhbHVlPzogc3RyaW5nO1xuICB9O1xuXG4gIGNvbnN0IHByb3BzID0gd2l0aERlZmF1bHRzKGRlZmluZVByb3BzPFByb3BzPigpLCB7XG4gICAgYXV0b2NvbXBsZXRlOiBmYWxzZSxcbiAgICBkYXRhVHJhY2s6ICcnLFxuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBlcnJvcjogZmFsc2UsXG4gICAgaGFzQ2xlYXI6IGZhbHNlLFxuICAgIGljb25MZWFkaW5nOiB1bmRlZmluZWQsXG4gICAgaW5wdXRJZDogdW5kZWZpbmVkLFxuICAgIGxhYmVsOiB1bmRlZmluZWQsXG4gICAgbWF4bGVuZ3RoOiB1bmRlZmluZWQsXG4gICAgbWlubGVuZ3RoOiB1bmRlZmluZWQsXG4gICAgcHJlZml4OiB1bmRlZmluZWQsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIHN1ZmZpeDogdW5kZWZpbmVkLFxuICAgIHN1cHBvcnRpbmdUZXh0OiB1bmRlZmluZWQsXG4gICAgdHJhbnNmb3JtVmFsdWU6IHVuZGVmaW5lZCxcbiAgICB0eXBlOiBURVhUX0lOUFVUX1RZUEUuVEVYVCxcbiAgICB2YWxpZGF0b3JzOiB1bmRlZmluZWQsXG4gICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgfSk7XG5cbiAgY29uc3QgZXJyb3IgPSByZWYocHJvcHMuZXJyb3IpO1xuICBjb25zdCBoYXNGb2N1cyA9IHJlZihmYWxzZSk7XG4gIGNvbnN0IGlucHV0ID0gcmVmPEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgY29uc3Qgc2hvd1Bhc3N3b3JkID0gcmVmKGZhbHNlKTtcbiAgY29uc3QgdmFsdWUgPSByZWYocHJvcHMudmFsdWUpO1xuXG4gIGNvbnN0IGVycm9yTWVzc2FnZSA9IGNvbXB1dGVkKCgpID0+IGdldEVycm9yTWVzc2FnZShwcm9wcy5lcnJvciwgZXJyb3IudmFsdWUpKTtcbiAgY29uc3QgZm9ybWF0dGVkTGFiZWwgPSBjb21wdXRlZCgoKSA9PiAocHJvcHMucmVxdWlyZWQgJiYgcHJvcHMubGFiZWwgPyBgJHtwcm9wcy5sYWJlbH0gKmAgOiBwcm9wcy5sYWJlbCkpO1xuICBjb25zdCBoYXNDbGVhciA9IGNvbXB1dGVkKCgpID0+IHByb3BzLmhhc0NsZWFyICYmIHZhbHVlLnZhbHVlKTtcbiAgY29uc3QgaGFzRXJyb3IgPSBjb21wdXRlZChcbiAgICAoKSA9PiAocHJvcHMucmVxdWlyZWQgJiYgdmFsdWUudmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhdmFsdWUudmFsdWUpIHx8IGdldEZpZWxkSGFzRXJyb3IoZXJyb3IudmFsdWUsIHByb3BzLmVycm9yKVxuICApO1xuICBjb25zdCBoYXNNaW5pbGFiZWwgPSBjb21wdXRlZCgoKSA9PiBoYXNGb2N1cy52YWx1ZSB8fCAhaXNFbXB0eS52YWx1ZSk7XG4gIGNvbnN0IGlzRW1wdHkgPSBjb21wdXRlZCgoKSA9PiB2YWx1ZS52YWx1ZSA9PT0gJycgfHwgdmFsdWUudmFsdWUgPT09IHVuZGVmaW5lZCk7XG4gIGNvbnN0IHR5cGUgPSBjb21wdXRlZCgoKSA9PlxuICAgIHByb3BzLnR5cGUgPT09IFRFWFRfSU5QVVRfVFlQRS5QQVNTV09SRCAmJiBzaG93UGFzc3dvcmQudmFsdWUgPT09IHRydWUgPyBURVhUX0lOUFVUX1RZUEUuVEVYVCA6IHByb3BzLnR5cGVcbiAgKTtcblxuICBjb25zdCBoYW5kbGVDbGVhciA9ICgpID0+IHtcbiAgICB2YWx1ZS52YWx1ZSA9ICcnO1xuICAgIGlucHV0LnZhbHVlPy5mb2N1cygpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUZvY3VzID0gKCkgPT4ge1xuICAgIGhhc0ZvY3VzLnZhbHVlID0gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVGb2N1c091dCA9ICgpID0+IHtcbiAgICBoYXNGb2N1cy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgaWYgKCF2YWx1ZS52YWx1ZSkge1xuICAgICAgdmFsdWUudmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICBoYW5kbGVWYWxpZGF0aW9uKCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlSW5wdXQgPSAoKSA9PiB7XG4gICAgaWYgKHByb3BzLnRyYW5zZm9ybVZhbHVlKSB7XG4gICAgICBjb25zdCBkaWdpdHMgPSB2YWx1ZS52YWx1ZT8ubWF0Y2goL1xcZC9nKT8uam9pbignJykgfHwgdW5kZWZpbmVkO1xuXG4gICAgICB2YWx1ZS52YWx1ZSA9IGRpZ2l0cyA/IHByb3BzLnRyYW5zZm9ybVZhbHVlKGRpZ2l0cykgOiAnJztcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlVmFsaWRhdGlvbiA9ICgpID0+IHtcbiAgICBoYW5kbGVGaWVsZFZhbGlkYXRpb24oe1xuICAgICAgZXJyb3IsXG4gICAgICBlcnJvckZyb21Qcm9wczogcHJvcHMuZXJyb3IsXG4gICAgICBtYXhsZW5ndGg6IHByb3BzLm1heGxlbmd0aCxcbiAgICAgIG1pbmxlbmd0aDogcHJvcHMubWlubGVuZ3RoLFxuICAgICAgcmVxdWlyZWQ6IHByb3BzLnJlcXVpcmVkLFxuICAgICAgdmFsaWRhdG9yczogcHJvcHMudmFsaWRhdG9ycyxcbiAgICAgIHZhbHVlLFxuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZVZhbHVlID0gKG5ld1ZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICB2YWx1ZS52YWx1ZSA9IG5ld1ZhbHVlO1xuICB9O1xuXG4gIHdhdGNoKFxuICAgICgpID0+IHByb3BzLnZhbHVlLFxuICAgIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcbiAgICAgIGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUgfHwgbmV3VmFsdWUgIT09IHZhbHVlLnZhbHVlKSB7XG4gICAgICAgIHZhbHVlLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICB9XG4gICAgfVxuICApO1xuXG4gIGRlZmluZUV4cG9zZSh7XG4gICAgZXJyb3IsXG4gICAgcmVxdWlyZWQ6IHByb3BzLnJlcXVpcmVkLFxuICAgIHVwZGF0ZVZhbHVlLFxuICAgIHZhbHVlLFxuICB9KTtcbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG4gIDxkaXZcbiAgICA6Y2xhc3M9XCJbXG4gICAgICAndGlkZS1pbnB1dC10ZXh0JyxcbiAgICAgIENTUy5ESVNQTEFZLkZMRVgsXG4gICAgICBDU1MuRkxFWC5ESVJFQ1RJT04uQ09MVU1OLFxuICAgICAgQ1NTLkdBUC5RVUFSVEVSLFxuICAgICAgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJyxcbiAgICAgIGhhc0Vycm9yICYmICdlcnJvcicsXG4gICAgXVwiXG4gID5cbiAgICA8ZGl2XG4gICAgICA6Y2xhc3M9XCJbXG4gICAgICAgICd0aWRlLWlucHV0LWJvcmRlcicsXG4gICAgICAgIENTUy5ESVNQTEFZLkZMRVgsXG4gICAgICAgIENTUy5BWElTMi5DRU5URVIsXG4gICAgICAgIENTUy5HQVAuSEFMRixcbiAgICAgICAgQ1NTLlBPU0lUSU9OLlJFTEFUSVZFLFxuICAgICAgICBDU1MuQk9SREVSLlJBRElVUy5IQUxGLFxuICAgICAgICBDU1MuQkcuU1VSRkFDRS5ERUZBVUxULFxuICAgICAgICBoYXNDbGVhciA/IFtDU1MuUEFERElORy5SSUdIVC5IQUxGLCBDU1MuUEFERElORy5MRUZULk9ORV0gOiBbQ1NTLlBBRERJTkcuWC5PTkVdLFxuICAgICAgICBDU1MuUEFERElORy5ZLkhBTEYsXG4gICAgICAgIHByb3BzLmRpc2FibGVkID8gQ1NTLkNVUlNPUi5OT1RfQUxMT1dFRCA6IENTUy5DVVJTT1IuVEVYVCxcbiAgICAgIF1cIlxuICAgID5cbiAgICAgIDxUaWRlSWNvblxuICAgICAgICA6Y2xhc3M9XCJbQ1NTLkZPTlQuQ09MT1IuU1VSRkFDRS5WQVJJQU5UXVwiXG4gICAgICAgIDppY29uPVwicHJvcHMuaWNvbkxlYWRpbmdcIlxuICAgICAgICA6c2l6ZT1cIlNJWkUuU01BTExcIlxuICAgICAgICB2LWlmPVwicHJvcHMuaWNvbkxlYWRpbmdcIlxuICAgICAgLz5cblxuICAgICAgPGRpdiA6Y2xhc3M9XCJbQ1NTLkRJU1BMQVkuRkxFWCwgQ1NTLkFYSVMyLkNFTlRFUiwgQ1NTLkdBUC5RVUFSVEVSLCBDU1MuV0lEVEguRlVMTF1cIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIDpjbGFzcz1cIltcbiAgICAgICAgICAgICd0aWRlLWlucHV0LXRleHQtcHJlZml4JyxcbiAgICAgICAgICAgIENTUy5GT05ULlJPTEUuQk9EWV8xLFxuICAgICAgICAgICAgLFxuICAgICAgICAgICAgIWhhc0Vycm9yICYmIENTUy5GT05ULkNPTE9SLlNVUkZBQ0UuVkFSSUFOVCxcbiAgICAgICAgICAgIGhhc01pbmlsYWJlbCA/ICcnIDogJ29mZnNldCcsXG4gICAgICAgICAgXVwiXG4gICAgICAgICAgdi1pZj1cInByb3BzLnByZWZpeFwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBwcm9wcy5wcmVmaXggfX1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIDpjbGFzcz1cIltDU1MuRElTUExBWS5GTEVYLCBDU1MuRkxFWC5ESVJFQ1RJT04uQ09MVU1OLCBDU1MuV0lEVEguRlVMTF1cIlxuICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwiaW5wdXQ/LmZvY3VzKClcIlxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICA6Y2xhc3M9XCJbXG4gICAgICAgICAgICAgIGhhc01pbmlsYWJlbCA/IFsnbWluaWxhYmVsJywgQ1NTLkZPTlQuUk9MRS5MQUJFTF8zXSA6IENTUy5GT05ULlJPTEUuTEFCRUxfMSxcbiAgICAgICAgICAgICAgIWhhc0Vycm9yICYmIENTUy5GT05ULkNPTE9SLlNVUkZBQ0UuVkFSSUFOVCxcbiAgICAgICAgICAgICAgQ1NTLkNVUlNPUi5URVhULFxuICAgICAgICAgICAgICBDU1MuUE9JTlRFUl9FVkVOVFMuT0ZGLFxuICAgICAgICAgICAgXVwiXG4gICAgICAgICAgICA6Zm9yPVwicHJvcHMuaW5wdXRJZFwiXG4gICAgICAgICAgICB2LWlmPVwibGFiZWxcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IGZvcm1hdHRlZExhYmVsIH19XG4gICAgICAgICAgPC9sYWJlbD5cblxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgOmF1dG9jb21wbGV0ZT1cImF1dG9jb21wbGV0ZSA/ICdvbicgOiAnb2ZmJ1wiXG4gICAgICAgICAgICA6Y2xhc3M9XCJbQ1NTLldJRFRILkZVTEwsIGRpc2FibGVkICYmIENTUy5DVVJTT1IuTk9UX0FMTE9XRUQsIENTUy5GT05ULlJPTEUuQk9EWV8xXVwiXG4gICAgICAgICAgICA6ZGF0YS10cmFjaz1cInByb3BzLmRhdGFUcmFja1wiXG4gICAgICAgICAgICA6ZGlzYWJsZWQ9XCJwcm9wcy5kaXNhYmxlZFwiXG4gICAgICAgICAgICA6bWF4bGVuZ3RoPVwicHJvcHMubWF4bGVuZ3RoXCJcbiAgICAgICAgICAgIDptaW5sZW5ndGg9XCJwcm9wcy5taW5sZW5ndGhcIlxuICAgICAgICAgICAgOm5hbWU9XCJwcm9wcy5uYW1lXCJcbiAgICAgICAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgICAgICAgIDpyZXF1aXJlZD1cInByb3BzLnJlcXVpcmVkXCJcbiAgICAgICAgICAgIDp0eXBlPVwidHlwZVwiXG4gICAgICAgICAgICBAY2hhbmdlPVwiaGFuZGxlVmFsaWRhdGlvblwiXG4gICAgICAgICAgICBAZm9jdXM9XCJoYW5kbGVGb2N1c1wiXG4gICAgICAgICAgICBAZm9jdXNvdXQ9XCJoYW5kbGVGb2N1c091dFwiXG4gICAgICAgICAgICBAaW5wdXQ9XCJoYW5kbGVJbnB1dFwiXG4gICAgICAgICAgICA6aWQ9XCJwcm9wcy5pbnB1dElkXCJcbiAgICAgICAgICAgIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIDpjbGFzcz1cIltcbiAgICAgICAgICAgICd0aWRlLWlucHV0LXRleHQtc3VmZml4JyxcbiAgICAgICAgICAgIENTUy5GT05ULlJPTEUuQk9EWV8xLFxuICAgICAgICAgICAgIWhhc0Vycm9yICYmIENTUy5GT05ULkNPTE9SLlNVUkZBQ0UuVkFSSUFOVCxcbiAgICAgICAgICAgIGhhc01pbmlsYWJlbCA/ICcnIDogJ29mZnNldCcsXG4gICAgICAgICAgXVwiXG4gICAgICAgICAgdi1pZj1cInByb3BzLnN1ZmZpeFwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBwcm9wcy5zdWZmaXggfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPFRpZGVJY29uXG4gICAgICAgIDpjbGFzcz1cIltDU1MuUEFERElORy5ZLkhBTEYsIENTUy5QQURESU5HLkZVTEwuSEFMRiwgQ1NTLkNVUlNPUi5QT0lOVEVSXVwiXG4gICAgICAgIDppY29uPVwiSUNPTi5DTE9TRVwiXG4gICAgICAgIDpzaXplPVwiU0laRS5TTUFMTFwiXG4gICAgICAgIEBjbGljaz1cImhhbmRsZUNsZWFyXCJcbiAgICAgICAgdi1pZj1cImhhc0NsZWFyICYmIHByb3BzLnR5cGUgIT09IFRFWFRfSU5QVVRfVFlQRS5QQVNTV09SRFwiXG4gICAgICAvPlxuXG4gICAgICA8VGlkZUljb25cbiAgICAgICAgOmNsYXNzPVwiW0NTUy5QQURESU5HLlkuSEFMRiwgQ1NTLlBBRERJTkcuRlVMTC5IQUxGLCBDU1MuQ1VSU09SLlBPSU5URVJdXCJcbiAgICAgICAgOmljb249XCJJQ09OLlZJU0lCSUxJVFlcIlxuICAgICAgICA6c2l6ZT1cIlNJWkUuU01BTExcIlxuICAgICAgICBAY2xpY2s9XCJzaG93UGFzc3dvcmQgPSAhc2hvd1Bhc3N3b3JkXCJcbiAgICAgICAgdi1pZj1cInByb3BzLnR5cGUgPT09IFRFWFRfSU5QVVRfVFlQRS5QQVNTV09SRFwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgOmNsYXNzPVwiW0NTUy5ESVNQTEFZLkZMRVgsIENTUy5BWElTMi5DRU5URVIsIENTUy5HQVAuUVVBUlRFUl1cIlxuICAgICAgdi1pZj1cInByb3BzLnN1cHBvcnRpbmdUZXh0IHx8IGhhc0Vycm9yXCJcbiAgICA+XG4gICAgICA8VGlkZUljb25cbiAgICAgICAgOmNsYXNzPVwiW11cIlxuICAgICAgICA6aWNvbj1cIklDT04uRVJST1JcIlxuICAgICAgICA6c2l6ZT1cIlNJWkUuU01BTExcIlxuICAgICAgICB2LWlmPVwiaGFzRXJyb3JcIlxuICAgICAgLz5cblxuICAgICAgPGRpdiA6Y2xhc3M9XCJbQ1NTLkZPTlQuUk9MRS5MQUJFTF8zXVwiPlxuICAgICAgICB7eyBoYXNFcnJvciA/IGVycm9yTWVzc2FnZSA6IHByb3BzLnN1cHBvcnRpbmdUZXh0IH19XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgc2NvcGVkPlxuICBsYWJlbCB7XG4gICAgaGVpZ2h0OiAxLjE4NzVyZW07XG4gICAgdHJhbnNpdGlvbjogZm9udC1zaXplIHZhcigtLXRpZGUtYW5pbWF0ZSksIHRyYW5zZm9ybSB2YXIoLS10aWRlLWFuaW1hdGUpO1xuICB9XG5cbiAgbGFiZWw6bm90KC5taW5pbGFiZWwpLFxuICAudGlkZS1pbnB1dC10ZXh0LXByZWZpeDpub3QoLm9mZnNldCksXG4gIC50aWRlLWlucHV0LXRleHQtc3VmZml4Om5vdCgub2Zmc2V0KSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgY2FsYyg5IC8gMTYgKiAxcmVtKSk7XG4gIH1cblxuICAudGlkZS1pbnB1dC10ZXh0LXByZWZpeCxcbiAgLnRpZGUtaW5wdXQtdGV4dC1zdWZmaXgge1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSB2YXIoLS10aWRlLWFuaW1hdGUpO1xuICB9XG5cbiAgLnRpZGUtaW5wdXQtdGV4dC5kaXNhYmxlZCB7XG4gICAgb3BhY2l0eTogdmFyKC0tdGlkZS1kaXNhYmxlZCk7XG4gIH1cblxuICAudGlkZS1pbnB1dC10ZXh0LmVycm9yIHtcbiAgICBjb2xvcjogdmFyKC0tdGlkZS1lcnJvci1wcmltYXJ5KTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXRleHQuZXJyb3IgLnRpZGUtaW5wdXQtYm9yZGVyIHtcbiAgICBvdXRsaW5lLWNvbG9yOiB2YXIoLS10aWRlLWVycm9yLWJvcmRlcik7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGlkZS1lcnJvci1zdXJmYWNlKTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXRleHQuZXJyb3I6Zm9jdXMtd2l0aGluIC50aWRlLWlucHV0LWJvcmRlciB7XG4gICAgb3V0bGluZS1jb2xvcjogdmFyKC0tdGlkZS1lcnJvci1ib3JkZXIpO1xuICB9XG5cbiAgLnRpZGUtaW5wdXQtdGV4dDpmb2N1cy13aXRoaW4gLnRpZGUtaW5wdXQtYm9yZGVyIHtcbiAgICAtLXRpZGUtaW5wdXQtb3V0bGluZS13aWR0aDogdmFyKC0tdGlkZS1ib3JkZXItd2lkdGgtMik7XG4gICAgb3V0bGluZS1jb2xvcjogdmFyKC0tdGlkZS1zdXJmYWNlLWJvcmRlci1oaWdoKTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXRleHQgaW5wdXQge1xuICAgIG91dGxpbmU6IG5vbmU7XG4gIH1cblxuICAudGlkZS1pbnB1dC1ib3JkZXIge1xuICAgIC0tdGlkZS1pbnB1dC1vdXRsaW5lLXdpZHRoOiB2YXIoLS10aWRlLWJvcmRlci13aWR0aC0xKTtcbiAgICBvdXRsaW5lOiB2YXIoLS10aWRlLWlucHV0LW91dGxpbmUtd2lkdGgpIHNvbGlkIHZhcigtLXRpZGUtYm9yZGVyKTtcbiAgICBvdXRsaW5lLW9mZnNldDogY2FsYyh2YXIoLS10aWRlLWlucHV0LW91dGxpbmUtd2lkdGgpICogLTEpO1xuICAgIGNvbG9yOiB2YXIoLS10aWRlLXN1cmZhY2UtZm9yZWdyb3VuZCk7XG4gIH1cbjwvc3R5bGU+XG4iLCI8c2NyaXB0IGxhbmc9XCJ0c1wiIHNldHVwPlxuICBpbXBvcnQgeyBjb21wdXRlZCwgcmVmLCB3YXRjaCB9IGZyb20gJ3Z1ZSc7XG5cbiAgaW1wb3J0IFRpZGVJY29uIGZyb20gJ0AvY29tcG9uZW50cy9UaWRlSWNvbi52dWUnO1xuICBpbXBvcnQgeyBJQ09OIH0gZnJvbSAnQC90eXBlcy9JY29uJztcbiAgaW1wb3J0IHsgU0laRSB9IGZyb20gJ0AvdHlwZXMvU2l6ZSc7XG4gIGltcG9ydCB7IENTUyB9IGZyb20gJ0AvdHlwZXMvU3R5bGVzJztcbiAgaW1wb3J0IHsgZ2V0RXJyb3JNZXNzYWdlLCBnZXRGaWVsZEhhc0Vycm9yLCBoYW5kbGVGaWVsZFZhbGlkYXRpb24gfSBmcm9tICdAL3V0aWxpdGllcy92YWxpZGF0aW9uJztcblxuICBpbXBvcnQgdHlwZSB7IFZhbGlkYXRpb25FcnJvciB9IGZyb20gJ0AvdHlwZXMvVmFsaWRhdGlvbic7XG5cbiAgdHlwZSBQcm9wcyA9IHtcbiAgICBkYXRhVHJhY2s/OiBzdHJpbmc7XG4gICAgZXJyb3I/OiBWYWxpZGF0aW9uRXJyb3I7XG4gICAgaW5wdXRJZD86IHN0cmluZztcbiAgICBsYWJlbD86IHN0cmluZztcbiAgICBtYXhsZW5ndGg/OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgbWlubGVuZ3RoPzogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICAgIHJvd3M/OiBudW1iZXI7XG4gICAgc3VwcG9ydGluZ1RleHQ/OiBzdHJpbmc7XG4gICAgdmFsdWU/OiBzdHJpbmc7XG4gIH07XG5cbiAgY29uc3QgcHJvcHMgPSB3aXRoRGVmYXVsdHMoZGVmaW5lUHJvcHM8UHJvcHM+KCksIHtcbiAgICBkYXRhVHJhY2s6ICcnLFxuICAgIGVycm9yOiBmYWxzZSxcbiAgICBpbnB1dElkOiB1bmRlZmluZWQsXG4gICAgbGFiZWw6IHVuZGVmaW5lZCxcbiAgICBtYXhsZW5ndGg6IHVuZGVmaW5lZCxcbiAgICBtaW5sZW5ndGg6IHVuZGVmaW5lZCxcbiAgICBuYW1lOiB1bmRlZmluZWQsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIHJvd3M6IDgsXG4gICAgc3VwcG9ydGluZ1RleHQ6IHVuZGVmaW5lZCxcbiAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICB9KTtcblxuICBjb25zdCBlcnJvciA9IHJlZihwcm9wcy5lcnJvcik7XG4gIGNvbnN0IGhhc0ZvY3VzID0gcmVmKGZhbHNlKTtcbiAgY29uc3QgaW5wdXQgPSByZWY8SFRNTElucHV0RWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBjb25zdCB2YWx1ZSA9IHJlZihwcm9wcy52YWx1ZSk7XG5cbiAgY29uc3QgZXJyb3JNZXNzYWdlID0gY29tcHV0ZWQoKCkgPT4gZ2V0RXJyb3JNZXNzYWdlKHByb3BzLmVycm9yLCBlcnJvci52YWx1ZSkpO1xuICBjb25zdCBmb3JtYXR0ZWRMYWJlbCA9IGNvbXB1dGVkKCgpID0+IChwcm9wcy5yZXF1aXJlZCA/IGAke3Byb3BzLmxhYmVsfSAqYCA6IHByb3BzLmxhYmVsKSk7XG4gIGNvbnN0IGhhc0Vycm9yID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gKHByb3BzLnJlcXVpcmVkICYmIHZhbHVlLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgIXZhbHVlLnZhbHVlKSB8fCBnZXRGaWVsZEhhc0Vycm9yKGVycm9yLnZhbHVlLCBwcm9wcy5lcnJvcilcbiAgKTtcbiAgY29uc3QgaGFzTWluaWxhYmVsID0gY29tcHV0ZWQoKCkgPT4gaGFzRm9jdXMudmFsdWUgfHwgIWlzRW1wdHkudmFsdWUpO1xuICBjb25zdCBpc0VtcHR5ID0gY29tcHV0ZWQoKCkgPT4gdmFsdWUudmFsdWUgPT09ICcnIHx8IHZhbHVlLnZhbHVlID09PSB1bmRlZmluZWQpO1xuXG4gIGNvbnN0IGhhbmRsZUZvY3VzID0gKCkgPT4ge1xuICAgIGhhc0ZvY3VzLnZhbHVlID0gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVGb2N1c091dCA9ICgpID0+IHtcbiAgICBoYXNGb2N1cy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgaWYgKCF2YWx1ZS52YWx1ZSkge1xuICAgICAgdmFsdWUudmFsdWUgPSAnJztcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlVmFsaWRhdGlvbiA9ICgpID0+IHtcbiAgICByZXR1cm4gaGFuZGxlRmllbGRWYWxpZGF0aW9uKHtcbiAgICAgIGVycm9yLFxuICAgICAgZXJyb3JGcm9tUHJvcHM6IHByb3BzLmVycm9yLFxuICAgICAgbWF4bGVuZ3RoOiBwcm9wcy5tYXhsZW5ndGgsXG4gICAgICBtaW5sZW5ndGg6IHByb3BzLm1pbmxlbmd0aCxcbiAgICAgIHJlcXVpcmVkOiBwcm9wcy5yZXF1aXJlZCxcbiAgICAgIHZhbHVlLFxuICAgIH0pO1xuICB9O1xuXG4gIHdhdGNoKFxuICAgICgpID0+IHByb3BzLnZhbHVlLFxuICAgIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcbiAgICAgIGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUgfHwgbmV3VmFsdWUgIT09IHZhbHVlLnZhbHVlKSB7XG4gICAgICAgIHZhbHVlLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICB9XG4gICAgfVxuICApO1xuXG4gIGRlZmluZUV4cG9zZSh7XG4gICAgZXJyb3IsXG4gICAgcmVxdWlyZWQ6IHByb3BzLnJlcXVpcmVkLFxuICAgIHZhbHVlLFxuICB9KTtcbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG4gIDxkaXZcbiAgICA6Y2xhc3M9XCJbJ3RpZGUtaW5wdXQtdGV4dGFyZWEnLCBDU1MuRElTUExBWS5GTEVYLCBDU1MuRkxFWC5ESVJFQ1RJT04uQ09MVU1OLCBDU1MuR0FQLlFVQVJURVIsIGhhc0Vycm9yICYmICdlcnJvciddXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgIDpjbGFzcz1cIltcbiAgICAgICAgJ3RpZGUtaW5wdXQtdGV4dGFyZWEtZmllbGQnLFxuICAgICAgICBDU1MuR0FQLkhBTEYsXG4gICAgICAgIENTUy5QT1NJVElPTi5SRUxBVElWRSxcbiAgICAgICAgQ1NTLkJPUkRFUi5SQURJVVMuSEFMRixcbiAgICAgICAgQ1NTLlBBRERJTkcuTEVGVC5PTkUsXG4gICAgICAgIENTUy5QQURESU5HLlRPUC5IQUxGLFxuICAgICAgICBDU1MuT1ZFUkZMT1cuWFkuSElEREVOLFxuICAgICAgICBDU1MuQkcuU1VSRkFDRS5ERUZBVUxULFxuICAgICAgXVwiXG4gICAgPlxuICAgICAgPGxhYmVsXG4gICAgICAgIDpjbGFzcz1cIltcbiAgICAgICAgICBoYXNNaW5pbGFiZWwgPyBbJ21pbmlsYWJlbCcsIENTUy5GT05ULlJPTEUuTEFCRUxfM10gOiBDU1MuRk9OVC5ST0xFLkxBQkVMXzEsXG4gICAgICAgICAgIWhhc0Vycm9yICYmIENTUy5GT05ULkNPTE9SLlNVUkZBQ0UuVkFSSUFOVCxcbiAgICAgICAgICBDU1MuQ1VSU09SLlRFWFQsXG4gICAgICAgICAgQ1NTLlBPSU5URVJfRVZFTlRTLk9GRixcbiAgICAgICAgXVwiXG4gICAgICAgIDpmb3I9XCJwcm9wcy5pbnB1dElkXCJcbiAgICAgICAgcmVmPVwibGFiZWxcIlxuICAgICAgICB2LWlmPVwibGFiZWxcIlxuICAgICAgPlxuICAgICAgICB7eyBmb3JtYXR0ZWRMYWJlbCB9fVxuICAgICAgPC9sYWJlbD5cblxuICAgICAgPHRleHRhcmVhXG4gICAgICAgIDpjbGFzcz1cIltDU1MuV0lEVEguRlVMTCwgQ1NTLkZPTlQuUk9MRS5CT0RZXzFdXCJcbiAgICAgICAgOmRhdGEtdHJhY2s9XCJwcm9wcy5kYXRhVHJhY2tcIlxuICAgICAgICA6bWF4bGVuZ3RoPVwicHJvcHMubWF4bGVuZ3RoXCJcbiAgICAgICAgOm1pbmxlbmd0aD1cInByb3BzLm1pbmxlbmd0aFwiXG4gICAgICAgIDpuYW1lPVwicHJvcHMubmFtZVwiXG4gICAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgICAgOnJlcXVpcmVkPVwicHJvcHMucmVxdWlyZWRcIlxuICAgICAgICA6cm93cz1cInByb3BzLnJvd3NcIlxuICAgICAgICBAY2hhbmdlPVwiaGFuZGxlVmFsaWRhdGlvblwiXG4gICAgICAgIEBmb2N1cz1cImhhbmRsZUZvY3VzXCJcbiAgICAgICAgQGZvY3Vzb3V0PVwiaGFuZGxlRm9jdXNPdXRcIlxuICAgICAgICA6aWQ9XCJwcm9wcy5pbnB1dElkXCJcbiAgICAgICAgdi1tb2RlbD1cInZhbHVlXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICA6Y2xhc3M9XCJbQ1NTLkRJU1BMQVkuRkxFWCwgQ1NTLkFYSVMyLkNFTlRFUiwgQ1NTLkdBUC5RVUFSVEVSXVwiXG4gICAgICB2LWlmPVwicHJvcHMuc3VwcG9ydGluZ1RleHQgfHwgaGFzRXJyb3JcIlxuICAgID5cbiAgICAgIDxUaWRlSWNvblxuICAgICAgICA6aWNvbj1cIklDT04uRVJST1JcIlxuICAgICAgICA6c2l6ZT1cIlNJWkUuU01BTExcIlxuICAgICAgICB2LWlmPVwiaGFzRXJyb3JcIlxuICAgICAgLz5cblxuICAgICAgPGRpdiA6Y2xhc3M9XCJbQ1NTLkZPTlQuUk9MRS5MQUJFTF8zXVwiPlxuICAgICAgICB7eyBoYXNFcnJvciA/IGVycm9yTWVzc2FnZSA6IHByb3BzLnN1cHBvcnRpbmdUZXh0IH19XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgc2NvcGVkPlxuICB0ZXh0YXJlYSB7XG4gICAgcmVzaXplOiB2ZXJ0aWNhbDtcbiAgfVxuPC9zdHlsZT5cblxuPHN0eWxlIHNjb3BlZD5cbiAgbGFiZWwge1xuICAgIGhlaWdodDogMS4xODc1cmVtO1xuICAgIHRyYW5zaXRpb246IGZvbnQtc2l6ZSB2YXIoLS10aWRlLWFuaW1hdGUpLCB0cmFuc2Zvcm0gdmFyKC0tdGlkZS1hbmltYXRlKTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXRleHRhcmVhLmVycm9yIHtcbiAgICBjb2xvcjogdmFyKC0tdGlkZS1lcnJvci1wcmltYXJ5KTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXRleHRhcmVhLmVycm9yIC50aWRlLWlucHV0LXRleHRhcmVhLWZpZWxkIHtcbiAgICBvdXRsaW5lLWNvbG9yOiB2YXIoLS10aWRlLWVycm9yLWJvcmRlcik7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGlkZS1lcnJvci1zdXJmYWNlKTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXRleHRhcmVhLmVycm9yOmZvY3VzLXdpdGhpbiAudGlkZS1pbnB1dC10ZXh0YXJlYS1maWVsZCB7XG4gICAgb3V0bGluZS1jb2xvcjogdmFyKC0tdGlkZS1lcnJvci1ib3JkZXIpO1xuICB9XG5cbiAgLnRpZGUtaW5wdXQtdGV4dGFyZWE6Zm9jdXMtd2l0aGluIC50aWRlLWlucHV0LXRleHRhcmVhLWZpZWxkIHtcbiAgICAtLXRpZGUtaW5wdXQtb3V0bGluZS13aWR0aDogdmFyKC0tdGlkZS1ib3JkZXItd2lkdGgtMik7XG4gICAgb3V0bGluZS1jb2xvcjogdmFyKC0tdGlkZS1zdXJmYWNlLWJvcmRlci1oaWdoKTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXRleHRhcmVhIHRleHRhcmVhIHtcbiAgICBvdXRsaW5lOiBub25lO1xuICB9XG5cbiAgLnRpZGUtaW5wdXQtdGV4dGFyZWEtZmllbGQge1xuICAgIC0tdGlkZS1pbnB1dC1vdXRsaW5lLXdpZHRoOiB2YXIoLS10aWRlLWJvcmRlci13aWR0aC0xKTtcbiAgICBvdXRsaW5lOiB2YXIoLS10aWRlLWlucHV0LW91dGxpbmUtd2lkdGgpIHNvbGlkIHZhcigtLXRpZGUtYm9yZGVyKTtcbiAgICBvdXRsaW5lLW9mZnNldDogY2FsYyh2YXIoLS10aWRlLWlucHV0LW91dGxpbmUtd2lkdGgpICogLTEpO1xuICAgIGNvbG9yOiB2YXIoLS10aWRlLXN1cmZhY2UtZm9yZWdyb3VuZCk7XG4gIH1cbjwvc3R5bGU+XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSB2dWUvc29ydC1rZXlzICovXG5cbmV4cG9ydCBjb25zdCBCUkVBS1BPSU5UID0ge1xuICBTTTogJ3NtJyxcbiAgTUQ6ICdtZCcsXG4gIExHOiAnbGcnLFxuICBYTDogJ3hsJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBNRURJQSA9IHtcbiAgU006IDc2OCxcbiAgTUQ6IDk5MixcbiAgTEc6IDEyMzIsXG4gIFhMOiAxOTIwLFxufTtcblxuZXhwb3J0IHR5cGUgQnJlYWtwb2ludCA9ICh0eXBlb2YgQlJFQUtQT0lOVClba2V5b2YgdHlwZW9mIEJSRUFLUE9JTlRdO1xuZXhwb3J0IHR5cGUgTWVkaWEgPSAodHlwZW9mIE1FRElBKVtrZXlvZiB0eXBlb2YgTUVESUFdO1xuIiwiaW1wb3J0IHsgbmV4dFRpY2sgfSBmcm9tICd2dWUnO1xuXG4vKipcbiAqIERpcmVjdGx5IG1vZGlmaWVzIHRoZSBgPGJvZHk+YCBlbGVtZW50IHRvIGFwcGx5IG9yIHJlbW92ZSBzY3JvbGwgbG9jay5cbiAqIFdoZW4gYGZhbHNlYCBpcyBwcm92aWRlZCwgaXQgb25seSB1bmxvY2tzIHNjcm9sbCBpZiB0aGVyZSBhcmUgbm8gb3BlblxuICogSFRNTCBkaWFsb2cgZWxlbWVudHMuXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTY3JvbGxMb2NrID0gYXN5bmMgKGlzTG9ja2VkOiBib29sZWFuKSA9PiB7XG4gIC8vIENhbm5vdCBiZSBhcHBsaWVkIHRvIGJvZHkgdGFnIGluIG1hcmtldHBsYWNlIHJlcG8gZHVlIHRvIGRhdGEtY3NzLXNjb3BlXG4gIC8vIGNvbnN0IEJPRFlfTE9DS19DTEFTUyA9ICdib2R5LXNjcm9sbC1sb2NrJztcblxuICBjb25zdCBib2R5ID0gZG9jdW1lbnQuYm9keTtcblxuICBpZiAoaXNMb2NrZWQpIHtcbiAgICBpZiAoIWJvZHkuZGF0YXNldC5zY3JvbGxMb2NrWSkge1xuICAgICAgY29uc3Qgc2Nyb2xsWSA9IHdpbmRvdy5zY3JvbGxZO1xuXG4gICAgICBib2R5LmRhdGFzZXQuc2Nyb2xsTG9ja1kgPSBzY3JvbGxZLnRvU3RyaW5nKCk7XG4gICAgICBib2R5LnN0eWxlLnNldFByb3BlcnR5KCctLXNhdmVkLXNjcm9sbC15JywgYCR7c2Nyb2xsWX1weGApO1xuICAgICAgYm9keS5zdHlsZS5zZXRQcm9wZXJ0eSgnaW5zZXQnLCAnMCcpO1xuICAgICAgYm9keS5zdHlsZS5zZXRQcm9wZXJ0eSgnbWFyZ2luLXRvcCcsIGBjYWxjKDBweCAtIHZhcigtLXNhdmVkLXNjcm9sbC15LCAwcHgpKWApO1xuICAgICAgYm9keS5zdHlsZS5zZXRQcm9wZXJ0eSgnb3ZlcmZsb3cteScsICdzY3JvbGwnKTtcbiAgICAgIGJvZHkuc3R5bGUuc2V0UHJvcGVydHkoJ3Bvc2l0aW9uJywgJ2ZpeGVkJyk7XG5cbiAgICAgIC8vIENhbm5vdCBiZSBhcHBsaWVkIHRvIGJvZHkgdGFnIGluIG1hcmtldHBsYWNlIHJlcG8gZHVlIHRvIGRhdGEtY3NzLXNjb3BlXG4gICAgICAvLyBib2R5LmNsYXNzTGlzdC5hZGQoQk9EWV9MT0NLX0NMQVNTKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgbmV4dFRpY2soKTtcbiAgICBpZiAoIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2RpYWxvZ1tvcGVuXScpKSB7XG4gICAgICBjb25zdCBzYXZlZFNjcm9sbFkgPSBwYXJzZUludChib2R5LmRhdGFzZXQuc2Nyb2xsTG9ja1kgfHwgJzAnKTtcblxuICAgICAgLy8gQ2Fubm90IGJlIGFwcGxpZWQgdG8gYm9keSB0YWcgaW4gbWFya2V0cGxhY2UgcmVwbyBkdWUgdG8gZGF0YS1jc3Mtc2NvcGVcbiAgICAgIC8vIGJvZHkuY2xhc3NMaXN0LnJlbW92ZShCT0RZX0xPQ0tfQ0xBU1MpO1xuXG4gICAgICBib2R5LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdpbnNldCcpO1xuICAgICAgYm9keS5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnbWFyZ2luVG9wJyk7XG4gICAgICBib2R5LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdvdmVyZmxvd1knKTtcbiAgICAgIGJvZHkuc3R5bGUucmVtb3ZlUHJvcGVydHkoJ3Bvc2l0aW9uJyk7XG4gICAgICBib2R5LnN0eWxlLnJlbW92ZVByb3BlcnR5KCctLXNhdmVkLXNjcm9sbC15Jyk7XG5cbiAgICAgIHdpbmRvdy5zY3JvbGxUbyh7XG4gICAgICAgIGJlaGF2aW9yOiAnYXV0bycsXG4gICAgICAgIHRvcDogc2F2ZWRTY3JvbGxZLFxuICAgICAgfSk7XG5cbiAgICAgIGRlbGV0ZSBib2R5LmRhdGFzZXQuc2Nyb2xsTG9ja1k7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgVE9QX0xBWUVSX0lEID0gJ3RpZGVUb3BMYXllcic7XG5cbmV4cG9ydCBjb25zdCBpbml0RmF1eFRvcExheWVyID0gKCkgPT4ge1xuICBsZXQgdG9wTGF5ZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChUT1BfTEFZRVJfSUQpO1xuICBpZiAoIXRvcExheWVyKSB7XG4gICAgdG9wTGF5ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB0b3BMYXllci5pZCA9IFRPUF9MQVlFUl9JRDtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRvcExheWVyKTtcbiAgfVxuICB0b3BMYXllci5zdHlsZS5pc29sYXRpb24gPSAnaXNvbGF0ZSc7XG59O1xuIiwiPHNjcmlwdCBsYW5nPVwidHNcIiBzZXR1cD5cbiAgaW1wb3J0IHsgbmV4dFRpY2ssIG9uTW91bnRlZCwgcmVmLCB3YXRjaCB9IGZyb20gJ3Z1ZSc7XG5cbiAgaW1wb3J0IFRpZGVCdXR0b25JY29uIGZyb20gJ0AvY29tcG9uZW50cy9UaWRlQnV0dG9uSWNvbi52dWUnO1xuICBpbXBvcnQgeyBCUkVBS1BPSU5UIH0gZnJvbSAnQC90eXBlcy9CcmVha3BvaW50JztcbiAgaW1wb3J0IHsgSUNPTiB9IGZyb20gJ0AvdHlwZXMvSWNvbic7XG4gIGltcG9ydCB7IFBSSU9SSVRZIH0gZnJvbSAnQC90eXBlcy9Qcmlvcml0eSc7XG4gIGltcG9ydCB7IENTUyB9IGZyb20gJ0AvdHlwZXMvU3R5bGVzJztcbiAgaW1wb3J0IHsgc2V0U2Nyb2xsTG9jayB9IGZyb20gJ0AvdXRpbGl0aWVzL3ZpZXdwb3J0JztcblxuICBpbXBvcnQgdHlwZSB7IFJlZiB9IGZyb20gJ3Z1ZSc7XG5cbiAgdHlwZSBQcm9wcyA9IHtcbiAgICBpc0JhY2tCdXR0b24/OiBib29sZWFuO1xuICAgIGlzRGlzbWlzc2libGU/OiBib29sZWFuO1xuICAgIGlzT3BlbjogYm9vbGVhbjtcbiAgICB0aXRsZT86IHN0cmluZztcbiAgICB3aWR0aD86IHN0cmluZztcbiAgfTtcblxuICBjb25zdCBwcm9wcyA9IHdpdGhEZWZhdWx0cyhkZWZpbmVQcm9wczxQcm9wcz4oKSwge1xuICAgIGlzQmFja0J1dHRvbjogZmFsc2UsXG4gICAgaXNEaXNtaXNzaWJsZTogdHJ1ZSxcbiAgICB0aXRsZTogdW5kZWZpbmVkLFxuICAgIHdpZHRoOiB1bmRlZmluZWQsXG4gIH0pO1xuXG4gIHR5cGUgRW1pdHMgPSB7XG4gICAgKGU6ICdjbG9zZScpOiB2b2lkO1xuICAgIChlOiAnYmFjaycpOiB2b2lkO1xuICB9O1xuXG4gIGNvbnN0IGVtaXQgPSBkZWZpbmVFbWl0czxFbWl0cz4oKTtcblxuICBjb25zdCBtb2RhbENvbnRlbnQ6IFJlZjxIVE1MRGl2RWxlbWVudCB8IHVuZGVmaW5lZD4gPSByZWYoKTtcbiAgY29uc3QgbW9kYWxEaWFsb2c6IFJlZjxIVE1MRGlhbG9nRWxlbWVudCB8IHVuZGVmaW5lZD4gPSByZWYoKTtcblxuICBjb25zdCB0cmlnZ2VyTmF0aXZlRGlhbG9nT3BlbiA9ICgpID0+IHtcbiAgICBtb2RhbERpYWxvZy52YWx1ZT8uc2hvd01vZGFsKCk7XG4gIH07XG5cbiAgY29uc3QgdHJpZ2dlck5hdGl2ZURpYWxvZ0Nsb3NlID0gKCkgPT4ge1xuICAgIG1vZGFsRGlhbG9nLnZhbHVlPy5jbG9zZSgpO1xuICB9O1xuXG4gIGNvbnN0IHNjcm9sbENvbnRlbnRUb1RvcCA9ICgpID0+IHtcbiAgICBuZXh0VGljaygoKSA9PiB7XG4gICAgICBpZiAoIW1vZGFsQ29udGVudC52YWx1ZSkgcmV0dXJuO1xuICAgICAgbW9kYWxDb250ZW50LnZhbHVlLnNjcm9sbFRvcCA9IDA7XG4gICAgfSk7XG4gIH07XG5cbiAgd2F0Y2goXG4gICAgKCkgPT4gcHJvcHMuaXNPcGVuLFxuICAgIChuZXdWYWx1ZSkgPT4ge1xuICAgICAgaWYgKCFtb2RhbERpYWxvZy52YWx1ZSkgcmV0dXJuO1xuICAgICAgaWYgKG5ld1ZhbHVlKSB7XG4gICAgICAgIHRyaWdnZXJOYXRpdmVEaWFsb2dPcGVuKCk7XG4gICAgICAgIHNjcm9sbENvbnRlbnRUb1RvcCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJpZ2dlck5hdGl2ZURpYWxvZ0Nsb3NlKCk7XG4gICAgICB9XG4gICAgICBzZXRTY3JvbGxMb2NrKG5ld1ZhbHVlKTtcbiAgICB9XG4gICk7XG5cbiAgb25Nb3VudGVkKCgpID0+IHtcbiAgICBpZiAocHJvcHMuaXNPcGVuKSB7XG4gICAgICB0cmlnZ2VyTmF0aXZlRGlhbG9nT3BlbigpO1xuICAgIH1cbiAgfSk7XG48L3NjcmlwdD5cblxuPHRlbXBsYXRlPlxuICA8ZGlhbG9nXG4gICAgOmNsYXNzPVwiWyd0aWRlLW1vZGFsJywgQ1NTLkJHLklOSVRJQUwsIENTUy5IRUlHSFQuRlVMTCwgQ1NTLldJRFRILkZVTEwsIENTUy5PVkVSRkxPVy5YWS5ISURERU5dXCJcbiAgICByZWY9XCJtb2RhbERpYWxvZ1wiXG4gICAgOnN0eWxlPVwieyAnLS1tb2RhbC13aWR0aCc6IHByb3BzLndpZHRoIH1cIlxuICAgIEBjbGljay5zZWxmPVwiZW1pdCgnY2xvc2UnKVwiXG4gICAgQGNsb3NlPVwiZW1pdCgnY2xvc2UnKVwiXG4gID5cbiAgICA8ZGl2XG4gICAgICA6Y2xhc3M9XCJbXG4gICAgICAgICd0aWRlLW1vZGFsLWJvZHknLFxuICAgICAgICBDU1MuQkcuU1VSRkFDRS5ERUZBVUxULFxuICAgICAgICBDU1MuQk9SREVSLlJBRElVUy5PTkUsXG4gICAgICAgIENTUy5ESVNQTEFZLkZMRVgsXG4gICAgICAgIENTUy5GTEVYLkRJUkVDVElPTi5DT0xVTU4sXG4gICAgICAgIENTUy5PVkVSRkxPVy5YWS5ISURERU4sXG4gICAgICAgIENTUy5QT1NJVElPTi5BQlNPTFVURSxcbiAgICAgICAgQ1NTLlBPU0lUSU9OSU5HLkJPVFRPTSxcbiAgICAgICAgQ1NTLlNIQURPVy5UT1AsXG4gICAgICAgIENTUy5XSURUSC5GVUxMLFxuICAgICAgICBDU1MuV0lEVEguTUFYX0ZVTEwsXG4gICAgICAgIENTUy53aXRoQnJlYWtwb2ludChbQ1NTLlNIQURPVy5CT1RUT01dLCBCUkVBS1BPSU5ULlNNKSxcbiAgICAgIF1cIlxuICAgID5cbiAgICAgIDxoZWFkZXJcbiAgICAgICAgOmNsYXNzPVwiW1xuICAgICAgICAgICd0aWRlLW1vZGFsLWhlYWRlcicsXG4gICAgICAgICAgQ1NTLkRJU1BMQVkuRkxFWCxcbiAgICAgICAgICBDU1MuQVhJUzIuQ0VOVEVSLFxuICAgICAgICAgIENTUy5HQVAuSEFMRixcbiAgICAgICAgICBDU1MuUEFERElORy5ZLk9ORSxcbiAgICAgICAgICBDU1MuQk9SREVSLkJPVFRPTS5PTkUsXG4gICAgICAgICAgQ1NTLkJPUkRFUi5DT0xPUi5MT1csXG4gICAgICAgIF1cIlxuICAgICAgPlxuICAgICAgICA8VGlkZUJ1dHRvbkljb25cbiAgICAgICAgICA6aWNvbj1cIklDT04uQ0hFVlJPTl9MRUZUXCJcbiAgICAgICAgICA6cHJpb3JpdHk9XCJQUklPUklUWS5RVUFURVJOQVJZXCJcbiAgICAgICAgICBAY2xpY2s9XCJlbWl0KCdiYWNrJylcIlxuICAgICAgICAgIHRpdGxlPVwiQmFja1wiXG4gICAgICAgICAgdi1pZj1cImlzQmFja0J1dHRvblwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIDpjbGFzcz1cIltDU1MuRk9OVC5ST0xFLkhFQURMSU5FXzJdXCJcbiAgICAgICAgICB2LXRleHQ9XCJ0aXRsZVwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPFRpZGVCdXR0b25JY29uXG4gICAgICAgICAgOmNsYXNzPVwiW0NTUy5GTEVYLkdST1cuT0ZGLCBDU1MuRkxFWC5TSFJJTksuT0ZGLCBDU1MuTUFSR0lOLkxFRlQuQVVUT11cIlxuICAgICAgICAgIDppY29uPVwiSUNPTi5DTE9TRVwiXG4gICAgICAgICAgOnByaW9yaXR5PVwiUFJJT1JJVFkuUVVBVEVSTkFSWVwiXG4gICAgICAgICAgQGNsaWNrPVwidHJpZ2dlck5hdGl2ZURpYWxvZ0Nsb3NlXCJcbiAgICAgICAgICB2LWlmPVwiaXNEaXNtaXNzaWJsZVwiXG4gICAgICAgIC8+XG4gICAgICA8L2hlYWRlcj5cblxuICAgICAgPGRpdlxuICAgICAgICA6Y2xhc3M9XCJbXG4gICAgICAgICAgJ3RpZGUtbW9kYWwtY29udGVudCcsXG4gICAgICAgICAgQ1NTLkRJU1BMQVkuR1JJRCxcbiAgICAgICAgICBDU1MuT1ZFUkZMT1cuWS5BVVRPLFxuICAgICAgICAgIENTUy5PVkVSRkxPVy5YLkhJRERFTixcbiAgICAgICAgICBDU1MuV0lEVEguRlVMTCxcbiAgICAgICAgICBDU1MuUEFERElORy5ZLlRXTyxcbiAgICAgICAgXVwiXG4gICAgICAgIHJlZj1cIm1vZGFsQ29udGVudFwiXG4gICAgICA+XG4gICAgICAgIDxzbG90IC8+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGZvb3RlclxuICAgICAgICA6Y2xhc3M9XCJbJ3RpZGUtbW9kYWwtZm9vdGVyJywgQ1NTLkFYSVMxLkVORCwgQ1NTLkRJU1BMQVkuRkxFWCwgQ1NTLkdBUC5UV08sIENTUy5QQURESU5HLlkuT05FLCBDU1MuU0hBRE9XLlRPUF1cIlxuICAgICAgICB2LWlmPVwiJHNsb3RzLmZvb3RlclwiXG4gICAgICA+XG4gICAgICAgIDxzbG90IG5hbWU9XCJmb290ZXJcIiAvPlxuICAgICAgPC9mb290ZXI+XG4gICAgPC9kaXY+XG4gIDwvZGlhbG9nPlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIHNjb3BlZD5cbiAgLnRpZGUtbW9kYWwge1xuICAgIC0tbW9kYWwtcGFkZGluZy14OiAyMHB4O1xuICAgIG1heC13aWR0aDogdW5zZXQ7XG4gICAgbWF4LWhlaWdodDogdW5zZXQ7XG4gICAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcbiAgICBkaXNwbGF5OiBub25lO1xuICAgIHRyYW5zaXRpb246IGFsbCB2YXIoLS10aWRlLWFuaW1hdGUpIGFsbG93LWRpc2NyZXRlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTtcbiAgfVxuICAudGlkZS1tb2RhbFtvcGVuXSB7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCUpO1xuICB9XG4gIC50aWRlLW1vZGFsOjpiYWNrZHJvcCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXRpZGUtYW5pbWF0ZSkgYWxsb3ctZGlzY3JldGU7XG4gICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDBweCk7XG4gIH1cbiAgLnRpZGUtbW9kYWxbb3Blbl06OmJhY2tkcm9wIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS10aWRlLXRyYW5zcGFyZW50LTQwMCk7XG4gICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDRweCk7XG4gIH1cbiAgQHN0YXJ0aW5nLXN0eWxlIHtcbiAgICAudGlkZS1tb2RhbFtvcGVuXSB7XG4gICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpO1xuICAgIH1cbiAgICAudGlkZS1tb2RhbFtvcGVuXTo6YmFja2Ryb3Age1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNHB4KTtcbiAgICB9XG4gIH1cbiAgLnRpZGUtbW9kYWwtYm9keSB7XG4gICAgd2lkdGg6IHZhcigtLW1vZGFsLXdpZHRoLCA1NzZweCk7XG4gICAgbWF4LWhlaWdodDogY2FsYygxMDAlIC0gdmFyKC0tdGlkZS1zcGFjaW5nLTIpKTtcbiAgfVxuXG4gIC50aWRlLW1vZGFsLWhlYWRlcixcbiAgLnRpZGUtbW9kYWwtZm9vdGVyIHtcbiAgICBwYWRkaW5nLWlubGluZTogdmFyKC0tbW9kYWwtcGFkZGluZy14KTtcbiAgfVxuICAudGlkZS1tb2RhbC1jb250ZW50IHtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHZhcigtLW1vZGFsLXBhZGRpbmcteCkgMWZyIHZhcigtLW1vZGFsLXBhZGRpbmcteCk7XG4gIH1cbiAgOndoZXJlKC50aWRlLW1vZGFsLWNvbnRlbnQpOmRlZXAoPiA6d2hlcmUoKikpIHtcbiAgICBncmlkLWNvbHVtbjogMjtcbiAgfVxuXG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgIC50aWRlLW1vZGFsLWJvZHkge1xuICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xuICAgIH1cbiAgfVxuICBAbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgICAudGlkZS1tb2RhbCB7XG4gICAgICAtLW1vZGFsLXBhZGRpbmcteDogdmFyKC0tdGlkZS1zcGFjaW5nLTIpO1xuICAgIH1cbiAgICAudGlkZS1tb2RhbC1ib2R5IHtcbiAgICAgIG1heC1oZWlnaHQ6IDg1JTtcbiAgICAgIGJvdHRvbTogaW5pdGlhbDtcbiAgICB9XG4gIH1cbjwvc3R5bGU+XG4iLCI8c2NyaXB0IGxhbmc9XCJ0c1wiIHNldHVwPlxuICBpbXBvcnQgeyBjb21wdXRlZCwgcmVmIH0gZnJvbSAndnVlJztcblxuICBpbXBvcnQgVGlkZUJ1dHRvbkljb24gZnJvbSAnQC9jb21wb25lbnRzL1RpZGVCdXR0b25JY29uLnZ1ZSc7XG4gIGltcG9ydCBUaWRlQnV0dG9uUGFnaW5hdGlvbiBmcm9tICdAL2NvbXBvbmVudHMvVGlkZUJ1dHRvblBhZ2luYXRpb24udnVlJztcbiAgaW1wb3J0IHsgSUNPTiB9IGZyb20gJ0AvdHlwZXMvSWNvbic7XG4gIGltcG9ydCB7IFBSSU9SSVRZIH0gZnJvbSAnQC90eXBlcy9Qcmlvcml0eSc7XG4gIGltcG9ydCB7IENTUyB9IGZyb20gJ0AvdHlwZXMvU3R5bGVzJztcblxuICB0eXBlIFByb3BzID0ge1xuICAgIHBhZ2VDdXJyZW50PzogbnVtYmVyO1xuICAgIHBhZ2VUb3RhbD86IG51bWJlcjtcbiAgfTtcblxuICBjb25zdCBwcm9wcyA9IHdpdGhEZWZhdWx0cyhkZWZpbmVQcm9wczxQcm9wcz4oKSwge1xuICAgIHBhZ2VDdXJyZW50OiAxLFxuICAgIHBhZ2VUb3RhbDogMSxcbiAgfSk7XG5cbiAgY29uc3QgZW1pdCA9IGRlZmluZUVtaXRzKFsnY2hhbmdlJ10pO1xuXG4gIGNvbnN0IHBhZ2VDdXJyZW50ID0gcmVmKHByb3BzLnBhZ2VDdXJyZW50KTtcblxuICBjb25zdCBwYWdpbmF0aW9uQnV0dG9ucyA9IGNvbXB1dGVkKCgpID0+IG5ldyBBcnJheShwcm9wcy5wYWdlVG90YWwpLmZpbGwoJycpLm1hcCgoZW1wdHksIGluZGV4KSA9PiBpbmRleCArIDEpKTtcblxuICBjb25zdCBoYW5kbGVDbGljayA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgcGFnZUN1cnJlbnQudmFsdWUgPSBpbmRleDtcblxuICAgIGVtaXQoJ2NoYW5nZScsIGV2ZW50LCBpbmRleCk7XG4gIH07XG48L3NjcmlwdD5cblxuPHRlbXBsYXRlPlxuICA8c2VjdGlvblxuICAgIDpjbGFzcz1cIlsndGlkZS1wYWdpbmF0aW9uJywgQ1NTLkRJU1BMQVkuRkxFWCwgQ1NTLkFYSVMxLkNFTlRFUiwgQ1NTLkFYSVMyLkNFTlRFUiwgQ1NTLkdBUC5RVUFSVEVSLCBDU1MuV0lEVEguRlVMTF1cIlxuICA+XG4gICAgPFRpZGVCdXR0b25JY29uXG4gICAgICA6ZGlzYWJsZWQ9XCJwYWdlQ3VycmVudCA9PT0gMVwiXG4gICAgICA6aWNvbj1cIklDT04uQ0hFVlJPTl9MRUZUXCJcbiAgICAgIDpwcmlvcml0eT1cIlBSSU9SSVRZLlFVQVRFUk5BUllcIlxuICAgICAgQGNsaWNrPVwiaGFuZGxlQ2xpY2socGFnZUN1cnJlbnQgLSAxKVwiXG4gICAgLz5cblxuICAgIDx1bCA6Y2xhc3M9XCJbQ1NTLkRJU1BMQVkuRkxFWCwgQ1NTLkFYSVMyLkNFTlRFUiwgQ1NTLkdBUC5RVUFSVEVSLCBDU1MuTElTVF9CVUxMRVRTLk9GRl1cIj5cbiAgICAgIDxsaVxuICAgICAgICA6a2V5PVwicGFnaW5hdGlvbkJ1dHRvblwiXG4gICAgICAgIHYtZm9yPVwicGFnaW5hdGlvbkJ1dHRvbiBpbiBwYWdpbmF0aW9uQnV0dG9uc1wiXG4gICAgICA+XG4gICAgICAgIDxUaWRlQnV0dG9uUGFnaW5hdGlvblxuICAgICAgICAgIDpkaXNhYmxlZD1cInBhZ2VDdXJyZW50ID09PSBwYWdpbmF0aW9uQnV0dG9uXCJcbiAgICAgICAgICA6bGFiZWw9XCJwYWdpbmF0aW9uQnV0dG9uXCJcbiAgICAgICAgICA6cHJpb3JpdHk9XCJQUklPUklUWS5RVUFURVJOQVJZXCJcbiAgICAgICAgICBAY2xpY2s9XCJoYW5kbGVDbGljayhwYWdpbmF0aW9uQnV0dG9uKVwiXG4gICAgICAgIC8+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG5cbiAgICA8VGlkZUJ1dHRvbkljb25cbiAgICAgIDpkaXNhYmxlZD1cInBhZ2VDdXJyZW50ID09PSBwYWdpbmF0aW9uQnV0dG9uc1twYWdpbmF0aW9uQnV0dG9ucy5sZW5ndGggLSAxXVwiXG4gICAgICA6aWNvbj1cIklDT04uQ0hFVlJPTl9SSUdIVFwiXG4gICAgICA6cHJpb3JpdHk9XCJQUklPUklUWS5RVUFURVJOQVJZXCJcbiAgICAgIEBjbGljaz1cImhhbmRsZUNsaWNrKHBhZ2VDdXJyZW50ICsgMSlcIlxuICAgIC8+XG4gIDwvc2VjdGlvbj5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBzY29wZWQ+PC9zdHlsZT5cbiIsIi8qKlxuICogQ3VzdG9tIHBvc2l0aW9uaW5nIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3ZpcnR1YWwtZWxlbWVudHNcbiAqL1xuXG5jb25zdCBzaWRlcyA9IFsndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0J107XG5jb25zdCBhbGlnbm1lbnRzID0gWydzdGFydCcsICdlbmQnXTtcbmNvbnN0IHBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovc2lkZXMucmVkdWNlKChhY2MsIHNpZGUpID0+IGFjYy5jb25jYXQoc2lkZSwgc2lkZSArIFwiLVwiICsgYWxpZ25tZW50c1swXSwgc2lkZSArIFwiLVwiICsgYWxpZ25tZW50c1sxXSksIFtdKTtcbmNvbnN0IG1pbiA9IE1hdGgubWluO1xuY29uc3QgbWF4ID0gTWF0aC5tYXg7XG5jb25zdCByb3VuZCA9IE1hdGgucm91bmQ7XG5jb25zdCBmbG9vciA9IE1hdGguZmxvb3I7XG5jb25zdCBjcmVhdGVDb29yZHMgPSB2ID0+ICh7XG4gIHg6IHYsXG4gIHk6IHZcbn0pO1xuY29uc3Qgb3Bwb3NpdGVTaWRlTWFwID0ge1xuICBsZWZ0OiAncmlnaHQnLFxuICByaWdodDogJ2xlZnQnLFxuICBib3R0b206ICd0b3AnLFxuICB0b3A6ICdib3R0b20nXG59O1xuY29uc3Qgb3Bwb3NpdGVBbGlnbm1lbnRNYXAgPSB7XG4gIHN0YXJ0OiAnZW5kJyxcbiAgZW5kOiAnc3RhcnQnXG59O1xuZnVuY3Rpb24gY2xhbXAoc3RhcnQsIHZhbHVlLCBlbmQpIHtcbiAgcmV0dXJuIG1heChzdGFydCwgbWluKHZhbHVlLCBlbmQpKTtcbn1cbmZ1bmN0aW9uIGV2YWx1YXRlKHZhbHVlLCBwYXJhbSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nID8gdmFsdWUocGFyYW0pIDogdmFsdWU7XG59XG5mdW5jdGlvbiBnZXRTaWRlKHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG59XG5mdW5jdGlvbiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVsxXTtcbn1cbmZ1bmN0aW9uIGdldE9wcG9zaXRlQXhpcyhheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneCcgPyAneScgOiAneCc7XG59XG5mdW5jdGlvbiBnZXRBeGlzTGVuZ3RoKGF4aXMpIHtcbiAgcmV0dXJuIGF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbn1cbmZ1bmN0aW9uIGdldFNpZGVBeGlzKHBsYWNlbWVudCkge1xuICByZXR1cm4gWyd0b3AnLCAnYm90dG9tJ10uaW5jbHVkZXMoZ2V0U2lkZShwbGFjZW1lbnQpKSA/ICd5JyA6ICd4Jztcbn1cbmZ1bmN0aW9uIGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KSB7XG4gIHJldHVybiBnZXRPcHBvc2l0ZUF4aXMoZ2V0U2lkZUF4aXMocGxhY2VtZW50KSk7XG59XG5mdW5jdGlvbiBnZXRBbGlnbm1lbnRTaWRlcyhwbGFjZW1lbnQsIHJlY3RzLCBydGwpIHtcbiAgaWYgKHJ0bCA9PT0gdm9pZCAwKSB7XG4gICAgcnRsID0gZmFsc2U7XG4gIH1cbiAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCk7XG4gIGNvbnN0IGFsaWdubWVudEF4aXMgPSBnZXRBbGlnbm1lbnRBeGlzKHBsYWNlbWVudCk7XG4gIGNvbnN0IGxlbmd0aCA9IGdldEF4aXNMZW5ndGgoYWxpZ25tZW50QXhpcyk7XG4gIGxldCBtYWluQWxpZ25tZW50U2lkZSA9IGFsaWdubWVudEF4aXMgPT09ICd4JyA/IGFsaWdubWVudCA9PT0gKHJ0bCA/ICdlbmQnIDogJ3N0YXJ0JykgPyAncmlnaHQnIDogJ2xlZnQnIDogYWxpZ25tZW50ID09PSAnc3RhcnQnID8gJ2JvdHRvbScgOiAndG9wJztcbiAgaWYgKHJlY3RzLnJlZmVyZW5jZVtsZW5ndGhdID4gcmVjdHMuZmxvYXRpbmdbbGVuZ3RoXSkge1xuICAgIG1haW5BbGlnbm1lbnRTaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpbkFsaWdubWVudFNpZGUpO1xuICB9XG4gIHJldHVybiBbbWFpbkFsaWdubWVudFNpZGUsIGdldE9wcG9zaXRlUGxhY2VtZW50KG1haW5BbGlnbm1lbnRTaWRlKV07XG59XG5mdW5jdGlvbiBnZXRFeHBhbmRlZFBsYWNlbWVudHMocGxhY2VtZW50KSB7XG4gIGNvbnN0IG9wcG9zaXRlUGxhY2VtZW50ID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgcmV0dXJuIFtnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChwbGFjZW1lbnQpLCBvcHBvc2l0ZVBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQob3Bwb3NpdGVQbGFjZW1lbnQpXTtcbn1cbmZ1bmN0aW9uIGdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL3N0YXJ0fGVuZC9nLCBhbGlnbm1lbnQgPT4gb3Bwb3NpdGVBbGlnbm1lbnRNYXBbYWxpZ25tZW50XSk7XG59XG5mdW5jdGlvbiBnZXRTaWRlTGlzdChzaWRlLCBpc1N0YXJ0LCBydGwpIHtcbiAgY29uc3QgbHIgPSBbJ2xlZnQnLCAncmlnaHQnXTtcbiAgY29uc3QgcmwgPSBbJ3JpZ2h0JywgJ2xlZnQnXTtcbiAgY29uc3QgdGIgPSBbJ3RvcCcsICdib3R0b20nXTtcbiAgY29uc3QgYnQgPSBbJ2JvdHRvbScsICd0b3AnXTtcbiAgc3dpdGNoIChzaWRlKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgaWYgKHJ0bCkgcmV0dXJuIGlzU3RhcnQgPyBybCA6IGxyO1xuICAgICAgcmV0dXJuIGlzU3RhcnQgPyBsciA6IHJsO1xuICAgIGNhc2UgJ2xlZnQnOlxuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIHJldHVybiBpc1N0YXJ0ID8gdGIgOiBidDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFtdO1xuICB9XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzKHBsYWNlbWVudCwgZmxpcEFsaWdubWVudCwgZGlyZWN0aW9uLCBydGwpIHtcbiAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCk7XG4gIGxldCBsaXN0ID0gZ2V0U2lkZUxpc3QoZ2V0U2lkZShwbGFjZW1lbnQpLCBkaXJlY3Rpb24gPT09ICdzdGFydCcsIHJ0bCk7XG4gIGlmIChhbGlnbm1lbnQpIHtcbiAgICBsaXN0ID0gbGlzdC5tYXAoc2lkZSA9PiBzaWRlICsgXCItXCIgKyBhbGlnbm1lbnQpO1xuICAgIGlmIChmbGlwQWxpZ25tZW50KSB7XG4gICAgICBsaXN0ID0gbGlzdC5jb25jYXQobGlzdC5tYXAoZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxpc3Q7XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZywgc2lkZSA9PiBvcHBvc2l0ZVNpZGVNYXBbc2lkZV0pO1xufVxuZnVuY3Rpb24gZXhwYW5kUGFkZGluZ09iamVjdChwYWRkaW5nKSB7XG4gIHJldHVybiB7XG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBsZWZ0OiAwLFxuICAgIC4uLnBhZGRpbmdcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFBhZGRpbmdPYmplY3QocGFkZGluZykge1xuICByZXR1cm4gdHlwZW9mIHBhZGRpbmcgIT09ICdudW1iZXInID8gZXhwYW5kUGFkZGluZ09iamVjdChwYWRkaW5nKSA6IHtcbiAgICB0b3A6IHBhZGRpbmcsXG4gICAgcmlnaHQ6IHBhZGRpbmcsXG4gICAgYm90dG9tOiBwYWRkaW5nLFxuICAgIGxlZnQ6IHBhZGRpbmdcbiAgfTtcbn1cbmZ1bmN0aW9uIHJlY3RUb0NsaWVudFJlY3QocmVjdCkge1xuICBjb25zdCB7XG4gICAgeCxcbiAgICB5LFxuICAgIHdpZHRoLFxuICAgIGhlaWdodFxuICB9ID0gcmVjdDtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgdG9wOiB5LFxuICAgIGxlZnQ6IHgsXG4gICAgcmlnaHQ6IHggKyB3aWR0aCxcbiAgICBib3R0b206IHkgKyBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmV4cG9ydCB7IGFsaWdubWVudHMsIGNsYW1wLCBjcmVhdGVDb29yZHMsIGV2YWx1YXRlLCBleHBhbmRQYWRkaW5nT2JqZWN0LCBmbG9vciwgZ2V0QWxpZ25tZW50LCBnZXRBbGlnbm1lbnRBeGlzLCBnZXRBbGlnbm1lbnRTaWRlcywgZ2V0QXhpc0xlbmd0aCwgZ2V0RXhwYW5kZWRQbGFjZW1lbnRzLCBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVBeGlzLCBnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzLCBnZXRPcHBvc2l0ZVBsYWNlbWVudCwgZ2V0UGFkZGluZ09iamVjdCwgZ2V0U2lkZSwgZ2V0U2lkZUF4aXMsIG1heCwgbWluLCBwbGFjZW1lbnRzLCByZWN0VG9DbGllbnRSZWN0LCByb3VuZCwgc2lkZXMgfTtcbiIsImltcG9ydCB7IGdldFNpZGVBeGlzLCBnZXRBbGlnbm1lbnRBeGlzLCBnZXRBeGlzTGVuZ3RoLCBnZXRTaWRlLCBnZXRBbGlnbm1lbnQsIGV2YWx1YXRlLCBnZXRQYWRkaW5nT2JqZWN0LCByZWN0VG9DbGllbnRSZWN0LCBtaW4sIGNsYW1wLCBwbGFjZW1lbnRzLCBnZXRBbGlnbm1lbnRTaWRlcywgZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQsIGdldE9wcG9zaXRlUGxhY2VtZW50LCBnZXRFeHBhbmRlZFBsYWNlbWVudHMsIGdldE9wcG9zaXRlQXhpc1BsYWNlbWVudHMsIHNpZGVzLCBtYXgsIGdldE9wcG9zaXRlQXhpcyB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscyc7XG5leHBvcnQgeyByZWN0VG9DbGllbnRSZWN0IH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzJztcblxuZnVuY3Rpb24gY29tcHV0ZUNvb3Jkc0Zyb21QbGFjZW1lbnQoX3JlZiwgcGxhY2VtZW50LCBydGwpIHtcbiAgbGV0IHtcbiAgICByZWZlcmVuY2UsXG4gICAgZmxvYXRpbmdcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IHNpZGVBeGlzID0gZ2V0U2lkZUF4aXMocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25tZW50QXhpcyA9IGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25MZW5ndGggPSBnZXRBeGlzTGVuZ3RoKGFsaWdubWVudEF4aXMpO1xuICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xuICBjb25zdCBpc1ZlcnRpY2FsID0gc2lkZUF4aXMgPT09ICd5JztcbiAgY29uc3QgY29tbW9uWCA9IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoIC8gMiAtIGZsb2F0aW5nLndpZHRoIC8gMjtcbiAgY29uc3QgY29tbW9uWSA9IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodCAvIDIgLSBmbG9hdGluZy5oZWlnaHQgLyAyO1xuICBjb25zdCBjb21tb25BbGlnbiA9IHJlZmVyZW5jZVthbGlnbkxlbmd0aF0gLyAyIC0gZmxvYXRpbmdbYWxpZ25MZW5ndGhdIC8gMjtcbiAgbGV0IGNvb3JkcztcbiAgc3dpdGNoIChzaWRlKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgLSBmbG9hdGluZy5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdyaWdodCc6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbGVmdCc6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54IC0gZmxvYXRpbmcud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnlcbiAgICAgIH07XG4gIH1cbiAgc3dpdGNoIChnZXRBbGlnbm1lbnQocGxhY2VtZW50KSkge1xuICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgIGNvb3Jkc1thbGlnbm1lbnRBeGlzXSAtPSBjb21tb25BbGlnbiAqIChydGwgJiYgaXNWZXJ0aWNhbCA/IC0xIDogMSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdlbmQnOlxuICAgICAgY29vcmRzW2FsaWdubWVudEF4aXNdICs9IGNvbW1vbkFsaWduICogKHJ0bCAmJiBpc1ZlcnRpY2FsID8gLTEgOiAxKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiBjb29yZHM7XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIHRoYXQgd2lsbCBwbGFjZSB0aGUgZmxvYXRpbmcgZWxlbWVudFxuICogbmV4dCB0byBhIGdpdmVuIHJlZmVyZW5jZSBlbGVtZW50LlxuICpcbiAqIFRoaXMgZXhwb3J0IGRvZXMgbm90IGhhdmUgYW55IGBwbGF0Zm9ybWAgaW50ZXJmYWNlIGxvZ2ljLiBZb3Ugd2lsbCBuZWVkIHRvXG4gKiB3cml0ZSBvbmUgZm9yIHRoZSBwbGF0Zm9ybSB5b3UgYXJlIHVzaW5nIEZsb2F0aW5nIFVJIHdpdGguXG4gKi9cbmNvbnN0IGNvbXB1dGVQb3NpdGlvbiA9IGFzeW5jIChyZWZlcmVuY2UsIGZsb2F0aW5nLCBjb25maWcpID0+IHtcbiAgY29uc3Qge1xuICAgIHBsYWNlbWVudCA9ICdib3R0b20nLFxuICAgIHN0cmF0ZWd5ID0gJ2Fic29sdXRlJyxcbiAgICBtaWRkbGV3YXJlID0gW10sXG4gICAgcGxhdGZvcm1cbiAgfSA9IGNvbmZpZztcbiAgY29uc3QgdmFsaWRNaWRkbGV3YXJlID0gbWlkZGxld2FyZS5maWx0ZXIoQm9vbGVhbik7XG4gIGNvbnN0IHJ0bCA9IGF3YWl0IChwbGF0Zm9ybS5pc1JUTCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNSVEwoZmxvYXRpbmcpKTtcbiAgbGV0IHJlY3RzID0gYXdhaXQgcGxhdGZvcm0uZ2V0RWxlbWVudFJlY3RzKHtcbiAgICByZWZlcmVuY2UsXG4gICAgZmxvYXRpbmcsXG4gICAgc3RyYXRlZ3lcbiAgfSk7XG4gIGxldCB7XG4gICAgeCxcbiAgICB5XG4gIH0gPSBjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudChyZWN0cywgcGxhY2VtZW50LCBydGwpO1xuICBsZXQgc3RhdGVmdWxQbGFjZW1lbnQgPSBwbGFjZW1lbnQ7XG4gIGxldCBtaWRkbGV3YXJlRGF0YSA9IHt9O1xuICBsZXQgcmVzZXRDb3VudCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsaWRNaWRkbGV3YXJlLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qge1xuICAgICAgbmFtZSxcbiAgICAgIGZuXG4gICAgfSA9IHZhbGlkTWlkZGxld2FyZVtpXTtcbiAgICBjb25zdCB7XG4gICAgICB4OiBuZXh0WCxcbiAgICAgIHk6IG5leHRZLFxuICAgICAgZGF0YSxcbiAgICAgIHJlc2V0XG4gICAgfSA9IGF3YWl0IGZuKHtcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgaW5pdGlhbFBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgcGxhY2VtZW50OiBzdGF0ZWZ1bFBsYWNlbWVudCxcbiAgICAgIHN0cmF0ZWd5LFxuICAgICAgbWlkZGxld2FyZURhdGEsXG4gICAgICByZWN0cyxcbiAgICAgIHBsYXRmb3JtLFxuICAgICAgZWxlbWVudHM6IHtcbiAgICAgICAgcmVmZXJlbmNlLFxuICAgICAgICBmbG9hdGluZ1xuICAgICAgfVxuICAgIH0pO1xuICAgIHggPSBuZXh0WCAhPSBudWxsID8gbmV4dFggOiB4O1xuICAgIHkgPSBuZXh0WSAhPSBudWxsID8gbmV4dFkgOiB5O1xuICAgIG1pZGRsZXdhcmVEYXRhID0ge1xuICAgICAgLi4ubWlkZGxld2FyZURhdGEsXG4gICAgICBbbmFtZV06IHtcbiAgICAgICAgLi4ubWlkZGxld2FyZURhdGFbbmFtZV0sXG4gICAgICAgIC4uLmRhdGFcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChyZXNldCAmJiByZXNldENvdW50IDw9IDUwKSB7XG4gICAgICByZXNldENvdW50Kys7XG4gICAgICBpZiAodHlwZW9mIHJlc2V0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAocmVzZXQucGxhY2VtZW50KSB7XG4gICAgICAgICAgc3RhdGVmdWxQbGFjZW1lbnQgPSByZXNldC5wbGFjZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc2V0LnJlY3RzKSB7XG4gICAgICAgICAgcmVjdHMgPSByZXNldC5yZWN0cyA9PT0gdHJ1ZSA/IGF3YWl0IHBsYXRmb3JtLmdldEVsZW1lbnRSZWN0cyh7XG4gICAgICAgICAgICByZWZlcmVuY2UsXG4gICAgICAgICAgICBmbG9hdGluZyxcbiAgICAgICAgICAgIHN0cmF0ZWd5XG4gICAgICAgICAgfSkgOiByZXNldC5yZWN0cztcbiAgICAgICAgfVxuICAgICAgICAoe1xuICAgICAgICAgIHgsXG4gICAgICAgICAgeVxuICAgICAgICB9ID0gY29tcHV0ZUNvb3Jkc0Zyb21QbGFjZW1lbnQocmVjdHMsIHN0YXRlZnVsUGxhY2VtZW50LCBydGwpKTtcbiAgICAgIH1cbiAgICAgIGkgPSAtMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHksXG4gICAgcGxhY2VtZW50OiBzdGF0ZWZ1bFBsYWNlbWVudCxcbiAgICBzdHJhdGVneSxcbiAgICBtaWRkbGV3YXJlRGF0YVxuICB9O1xufTtcblxuLyoqXG4gKiBSZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBvZiBvdmVyZmxvdyBzaWRlIG9mZnNldHMgdGhhdCBkZXRlcm1pbmUgaG93IG11Y2ggdGhlXG4gKiBlbGVtZW50IGlzIG92ZXJmbG93aW5nIGEgZ2l2ZW4gY2xpcHBpbmcgYm91bmRhcnkgb24gZWFjaCBzaWRlLlxuICogLSBwb3NpdGl2ZSA9IG92ZXJmbG93aW5nIHRoZSBib3VuZGFyeSBieSB0aGF0IG51bWJlciBvZiBwaXhlbHNcbiAqIC0gbmVnYXRpdmUgPSBob3cgbWFueSBwaXhlbHMgbGVmdCBiZWZvcmUgaXQgd2lsbCBvdmVyZmxvd1xuICogLSAwID0gbGllcyBmbHVzaCB3aXRoIHRoZSBib3VuZGFyeVxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2RldGVjdE92ZXJmbG93XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRldGVjdE92ZXJmbG93KHN0YXRlLCBvcHRpb25zKSB7XG4gIHZhciBfYXdhaXQkcGxhdGZvcm0kaXNFbGU7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgY29uc3Qge1xuICAgIHgsXG4gICAgeSxcbiAgICBwbGF0Zm9ybSxcbiAgICByZWN0cyxcbiAgICBlbGVtZW50cyxcbiAgICBzdHJhdGVneVxuICB9ID0gc3RhdGU7XG4gIGNvbnN0IHtcbiAgICBib3VuZGFyeSA9ICdjbGlwcGluZ0FuY2VzdG9ycycsXG4gICAgcm9vdEJvdW5kYXJ5ID0gJ3ZpZXdwb3J0JyxcbiAgICBlbGVtZW50Q29udGV4dCA9ICdmbG9hdGluZycsXG4gICAgYWx0Qm91bmRhcnkgPSBmYWxzZSxcbiAgICBwYWRkaW5nID0gMFxuICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICBjb25zdCBwYWRkaW5nT2JqZWN0ID0gZ2V0UGFkZGluZ09iamVjdChwYWRkaW5nKTtcbiAgY29uc3QgYWx0Q29udGV4dCA9IGVsZW1lbnRDb250ZXh0ID09PSAnZmxvYXRpbmcnID8gJ3JlZmVyZW5jZScgOiAnZmxvYXRpbmcnO1xuICBjb25zdCBlbGVtZW50ID0gZWxlbWVudHNbYWx0Qm91bmRhcnkgPyBhbHRDb250ZXh0IDogZWxlbWVudENvbnRleHRdO1xuICBjb25zdCBjbGlwcGluZ0NsaWVudFJlY3QgPSByZWN0VG9DbGllbnRSZWN0KGF3YWl0IHBsYXRmb3JtLmdldENsaXBwaW5nUmVjdCh7XG4gICAgZWxlbWVudDogKChfYXdhaXQkcGxhdGZvcm0kaXNFbGUgPSBhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQoZWxlbWVudCkpKSAhPSBudWxsID8gX2F3YWl0JHBsYXRmb3JtJGlzRWxlIDogdHJ1ZSkgPyBlbGVtZW50IDogZWxlbWVudC5jb250ZXh0RWxlbWVudCB8fCAoYXdhaXQgKHBsYXRmb3JtLmdldERvY3VtZW50RWxlbWVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnRzLmZsb2F0aW5nKSkpLFxuICAgIGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeSxcbiAgICBzdHJhdGVneVxuICB9KSk7XG4gIGNvbnN0IHJlY3QgPSBlbGVtZW50Q29udGV4dCA9PT0gJ2Zsb2F0aW5nJyA/IHtcbiAgICB4LFxuICAgIHksXG4gICAgd2lkdGg6IHJlY3RzLmZsb2F0aW5nLndpZHRoLFxuICAgIGhlaWdodDogcmVjdHMuZmxvYXRpbmcuaGVpZ2h0XG4gIH0gOiByZWN0cy5yZWZlcmVuY2U7XG4gIGNvbnN0IG9mZnNldFBhcmVudCA9IGF3YWl0IChwbGF0Zm9ybS5nZXRPZmZzZXRQYXJlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldE9mZnNldFBhcmVudChlbGVtZW50cy5mbG9hdGluZykpO1xuICBjb25zdCBvZmZzZXRTY2FsZSA9IChhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQob2Zmc2V0UGFyZW50KSkpID8gKGF3YWl0IChwbGF0Zm9ybS5nZXRTY2FsZSA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0U2NhbGUob2Zmc2V0UGFyZW50KSkpIHx8IHtcbiAgICB4OiAxLFxuICAgIHk6IDFcbiAgfSA6IHtcbiAgICB4OiAxLFxuICAgIHk6IDFcbiAgfTtcbiAgY29uc3QgZWxlbWVudENsaWVudFJlY3QgPSByZWN0VG9DbGllbnRSZWN0KHBsYXRmb3JtLmNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0ID8gYXdhaXQgcGxhdGZvcm0uY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3Qoe1xuICAgIGVsZW1lbnRzLFxuICAgIHJlY3QsXG4gICAgb2Zmc2V0UGFyZW50LFxuICAgIHN0cmF0ZWd5XG4gIH0pIDogcmVjdCk7XG4gIHJldHVybiB7XG4gICAgdG9wOiAoY2xpcHBpbmdDbGllbnRSZWN0LnRvcCAtIGVsZW1lbnRDbGllbnRSZWN0LnRvcCArIHBhZGRpbmdPYmplY3QudG9wKSAvIG9mZnNldFNjYWxlLnksXG4gICAgYm90dG9tOiAoZWxlbWVudENsaWVudFJlY3QuYm90dG9tIC0gY2xpcHBpbmdDbGllbnRSZWN0LmJvdHRvbSArIHBhZGRpbmdPYmplY3QuYm90dG9tKSAvIG9mZnNldFNjYWxlLnksXG4gICAgbGVmdDogKGNsaXBwaW5nQ2xpZW50UmVjdC5sZWZ0IC0gZWxlbWVudENsaWVudFJlY3QubGVmdCArIHBhZGRpbmdPYmplY3QubGVmdCkgLyBvZmZzZXRTY2FsZS54LFxuICAgIHJpZ2h0OiAoZWxlbWVudENsaWVudFJlY3QucmlnaHQgLSBjbGlwcGluZ0NsaWVudFJlY3QucmlnaHQgKyBwYWRkaW5nT2JqZWN0LnJpZ2h0KSAvIG9mZnNldFNjYWxlLnhcbiAgfTtcbn1cblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIHBvc2l0aW9uIGFuIGlubmVyIGVsZW1lbnQgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgc28gdGhhdCBpdFxuICogYXBwZWFycyBjZW50ZXJlZCB0byB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXJyb3dcbiAqL1xuY29uc3QgYXJyb3cgPSBvcHRpb25zID0+ICh7XG4gIG5hbWU6ICdhcnJvdycsXG4gIG9wdGlvbnMsXG4gIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgY29uc3Qge1xuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBwbGFjZW1lbnQsXG4gICAgICByZWN0cyxcbiAgICAgIHBsYXRmb3JtLFxuICAgICAgZWxlbWVudHMsXG4gICAgICBtaWRkbGV3YXJlRGF0YVxuICAgIH0gPSBzdGF0ZTtcbiAgICAvLyBTaW5jZSBgZWxlbWVudGAgaXMgcmVxdWlyZWQsIHdlIGRvbid0IFBhcnRpYWw8PiB0aGUgdHlwZS5cbiAgICBjb25zdCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgcGFkZGluZyA9IDBcbiAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpIHx8IHt9O1xuICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgcGFkZGluZ09iamVjdCA9IGdldFBhZGRpbmdPYmplY3QocGFkZGluZyk7XG4gICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgeCxcbiAgICAgIHlcbiAgICB9O1xuICAgIGNvbnN0IGF4aXMgPSBnZXRBbGlnbm1lbnRBeGlzKHBsYWNlbWVudCk7XG4gICAgY29uc3QgbGVuZ3RoID0gZ2V0QXhpc0xlbmd0aChheGlzKTtcbiAgICBjb25zdCBhcnJvd0RpbWVuc2lvbnMgPSBhd2FpdCBwbGF0Zm9ybS5nZXREaW1lbnNpb25zKGVsZW1lbnQpO1xuICAgIGNvbnN0IGlzWUF4aXMgPSBheGlzID09PSAneSc7XG4gICAgY29uc3QgbWluUHJvcCA9IGlzWUF4aXMgPyAndG9wJyA6ICdsZWZ0JztcbiAgICBjb25zdCBtYXhQcm9wID0gaXNZQXhpcyA/ICdib3R0b20nIDogJ3JpZ2h0JztcbiAgICBjb25zdCBjbGllbnRQcm9wID0gaXNZQXhpcyA/ICdjbGllbnRIZWlnaHQnIDogJ2NsaWVudFdpZHRoJztcbiAgICBjb25zdCBlbmREaWZmID0gcmVjdHMucmVmZXJlbmNlW2xlbmd0aF0gKyByZWN0cy5yZWZlcmVuY2VbYXhpc10gLSBjb29yZHNbYXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5ndGhdO1xuICAgIGNvbnN0IHN0YXJ0RGlmZiA9IGNvb3Jkc1theGlzXSAtIHJlY3RzLnJlZmVyZW5jZVtheGlzXTtcbiAgICBjb25zdCBhcnJvd09mZnNldFBhcmVudCA9IGF3YWl0IChwbGF0Zm9ybS5nZXRPZmZzZXRQYXJlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldE9mZnNldFBhcmVudChlbGVtZW50KSk7XG4gICAgbGV0IGNsaWVudFNpemUgPSBhcnJvd09mZnNldFBhcmVudCA/IGFycm93T2Zmc2V0UGFyZW50W2NsaWVudFByb3BdIDogMDtcblxuICAgIC8vIERPTSBwbGF0Zm9ybSBjYW4gcmV0dXJuIGB3aW5kb3dgIGFzIHRoZSBgb2Zmc2V0UGFyZW50YC5cbiAgICBpZiAoIWNsaWVudFNpemUgfHwgIShhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQoYXJyb3dPZmZzZXRQYXJlbnQpKSkpIHtcbiAgICAgIGNsaWVudFNpemUgPSBlbGVtZW50cy5mbG9hdGluZ1tjbGllbnRQcm9wXSB8fCByZWN0cy5mbG9hdGluZ1tsZW5ndGhdO1xuICAgIH1cbiAgICBjb25zdCBjZW50ZXJUb1JlZmVyZW5jZSA9IGVuZERpZmYgLyAyIC0gc3RhcnREaWZmIC8gMjtcblxuICAgIC8vIElmIHRoZSBwYWRkaW5nIGlzIGxhcmdlIGVub3VnaCB0aGF0IGl0IGNhdXNlcyB0aGUgYXJyb3cgdG8gbm8gbG9uZ2VyIGJlXG4gICAgLy8gY2VudGVyZWQsIG1vZGlmeSB0aGUgcGFkZGluZyBzbyB0aGF0IGl0IGlzIGNlbnRlcmVkLlxuICAgIGNvbnN0IGxhcmdlc3RQb3NzaWJsZVBhZGRpbmcgPSBjbGllbnRTaXplIC8gMiAtIGFycm93RGltZW5zaW9uc1tsZW5ndGhdIC8gMiAtIDE7XG4gICAgY29uc3QgbWluUGFkZGluZyA9IG1pbihwYWRkaW5nT2JqZWN0W21pblByb3BdLCBsYXJnZXN0UG9zc2libGVQYWRkaW5nKTtcbiAgICBjb25zdCBtYXhQYWRkaW5nID0gbWluKHBhZGRpbmdPYmplY3RbbWF4UHJvcF0sIGxhcmdlc3RQb3NzaWJsZVBhZGRpbmcpO1xuXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBhcnJvdyBkb2Vzbid0IG92ZXJmbG93IHRoZSBmbG9hdGluZyBlbGVtZW50IGlmIHRoZSBjZW50ZXJcbiAgICAvLyBwb2ludCBpcyBvdXRzaWRlIHRoZSBmbG9hdGluZyBlbGVtZW50J3MgYm91bmRzLlxuICAgIGNvbnN0IG1pbiQxID0gbWluUGFkZGluZztcbiAgICBjb25zdCBtYXggPSBjbGllbnRTaXplIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLSBtYXhQYWRkaW5nO1xuICAgIGNvbnN0IGNlbnRlciA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLyAyICsgY2VudGVyVG9SZWZlcmVuY2U7XG4gICAgY29uc3Qgb2Zmc2V0ID0gY2xhbXAobWluJDEsIGNlbnRlciwgbWF4KTtcblxuICAgIC8vIElmIHRoZSByZWZlcmVuY2UgaXMgc21hbGwgZW5vdWdoIHRoYXQgdGhlIGFycm93J3MgcGFkZGluZyBjYXVzZXMgaXQgdG9cbiAgICAvLyB0byBwb2ludCB0byBub3RoaW5nIGZvciBhbiBhbGlnbmVkIHBsYWNlbWVudCwgYWRqdXN0IHRoZSBvZmZzZXQgb2YgdGhlXG4gICAgLy8gZmxvYXRpbmcgZWxlbWVudCBpdHNlbGYuIFRvIGVuc3VyZSBgc2hpZnQoKWAgY29udGludWVzIHRvIHRha2UgYWN0aW9uLFxuICAgIC8vIGEgc2luZ2xlIHJlc2V0IGlzIHBlcmZvcm1lZCB3aGVuIHRoaXMgaXMgdHJ1ZS5cbiAgICBjb25zdCBzaG91bGRBZGRPZmZzZXQgPSAhbWlkZGxld2FyZURhdGEuYXJyb3cgJiYgZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgIT0gbnVsbCAmJiBjZW50ZXIgIT09IG9mZnNldCAmJiByZWN0cy5yZWZlcmVuY2VbbGVuZ3RoXSAvIDIgLSAoY2VudGVyIDwgbWluJDEgPyBtaW5QYWRkaW5nIDogbWF4UGFkZGluZykgLSBhcnJvd0RpbWVuc2lvbnNbbGVuZ3RoXSAvIDIgPCAwO1xuICAgIGNvbnN0IGFsaWdubWVudE9mZnNldCA9IHNob3VsZEFkZE9mZnNldCA/IGNlbnRlciA8IG1pbiQxID8gY2VudGVyIC0gbWluJDEgOiBjZW50ZXIgLSBtYXggOiAwO1xuICAgIHJldHVybiB7XG4gICAgICBbYXhpc106IGNvb3Jkc1theGlzXSArIGFsaWdubWVudE9mZnNldCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgW2F4aXNdOiBvZmZzZXQsXG4gICAgICAgIGNlbnRlck9mZnNldDogY2VudGVyIC0gb2Zmc2V0IC0gYWxpZ25tZW50T2Zmc2V0LFxuICAgICAgICAuLi4oc2hvdWxkQWRkT2Zmc2V0ICYmIHtcbiAgICAgICAgICBhbGlnbm1lbnRPZmZzZXRcbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICByZXNldDogc2hvdWxkQWRkT2Zmc2V0XG4gICAgfTtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIGdldFBsYWNlbWVudExpc3QoYWxpZ25tZW50LCBhdXRvQWxpZ25tZW50LCBhbGxvd2VkUGxhY2VtZW50cykge1xuICBjb25zdCBhbGxvd2VkUGxhY2VtZW50c1NvcnRlZEJ5QWxpZ25tZW50ID0gYWxpZ25tZW50ID8gWy4uLmFsbG93ZWRQbGFjZW1lbnRzLmZpbHRlcihwbGFjZW1lbnQgPT4gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgPT09IGFsaWdubWVudCksIC4uLmFsbG93ZWRQbGFjZW1lbnRzLmZpbHRlcihwbGFjZW1lbnQgPT4gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgIT09IGFsaWdubWVudCldIDogYWxsb3dlZFBsYWNlbWVudHMuZmlsdGVyKHBsYWNlbWVudCA9PiBnZXRTaWRlKHBsYWNlbWVudCkgPT09IHBsYWNlbWVudCk7XG4gIHJldHVybiBhbGxvd2VkUGxhY2VtZW50c1NvcnRlZEJ5QWxpZ25tZW50LmZpbHRlcihwbGFjZW1lbnQgPT4ge1xuICAgIGlmIChhbGlnbm1lbnQpIHtcbiAgICAgIHJldHVybiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSA9PT0gYWxpZ25tZW50IHx8IChhdXRvQWxpZ25tZW50ID8gZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQocGxhY2VtZW50KSAhPT0gcGxhY2VtZW50IDogZmFsc2UpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG59XG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBjaG9vc2luZyB0aGUgcGxhY2VtZW50XG4gKiB0aGF0IGhhcyB0aGUgbW9zdCBzcGFjZSBhdmFpbGFibGUgYXV0b21hdGljYWxseSwgd2l0aG91dCBuZWVkaW5nIHRvIHNwZWNpZnkgYVxuICogcHJlZmVycmVkIHBsYWNlbWVudC4gQWx0ZXJuYXRpdmUgdG8gYGZsaXBgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9QbGFjZW1lbnRcbiAqL1xuY29uc3QgYXV0b1BsYWNlbWVudCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnYXV0b1BsYWNlbWVudCcsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRhdXRvUCwgX21pZGRsZXdhcmVEYXRhJGF1dG9QMiwgX3BsYWNlbWVudHNUaGF0Rml0T25FO1xuICAgICAgY29uc3Qge1xuICAgICAgICByZWN0cyxcbiAgICAgICAgbWlkZGxld2FyZURhdGEsXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIGVsZW1lbnRzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNyb3NzQXhpcyA9IGZhbHNlLFxuICAgICAgICBhbGlnbm1lbnQsXG4gICAgICAgIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cyxcbiAgICAgICAgYXV0b0FsaWdubWVudCA9IHRydWUsXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IHBsYWNlbWVudHMkMSA9IGFsaWdubWVudCAhPT0gdW5kZWZpbmVkIHx8IGFsbG93ZWRQbGFjZW1lbnRzID09PSBwbGFjZW1lbnRzID8gZ2V0UGxhY2VtZW50TGlzdChhbGlnbm1lbnQgfHwgbnVsbCwgYXV0b0FsaWdubWVudCwgYWxsb3dlZFBsYWNlbWVudHMpIDogYWxsb3dlZFBsYWNlbWVudHM7XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gKChfbWlkZGxld2FyZURhdGEkYXV0b1AgPSBtaWRkbGV3YXJlRGF0YS5hdXRvUGxhY2VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGF1dG9QLmluZGV4KSB8fCAwO1xuICAgICAgY29uc3QgY3VycmVudFBsYWNlbWVudCA9IHBsYWNlbWVudHMkMVtjdXJyZW50SW5kZXhdO1xuICAgICAgaWYgKGN1cnJlbnRQbGFjZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICBjb25zdCBhbGlnbm1lbnRTaWRlcyA9IGdldEFsaWdubWVudFNpZGVzKGN1cnJlbnRQbGFjZW1lbnQsIHJlY3RzLCBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSkpO1xuXG4gICAgICAvLyBNYWtlIGBjb21wdXRlQ29vcmRzYCBzdGFydCBmcm9tIHRoZSByaWdodCBwbGFjZS5cbiAgICAgIGlmIChwbGFjZW1lbnQgIT09IGN1cnJlbnRQbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnRzJDFbMF1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyZW50T3ZlcmZsb3dzID0gW292ZXJmbG93W2dldFNpZGUoY3VycmVudFBsYWNlbWVudCldLCBvdmVyZmxvd1thbGlnbm1lbnRTaWRlc1swXV0sIG92ZXJmbG93W2FsaWdubWVudFNpZGVzWzFdXV07XG4gICAgICBjb25zdCBhbGxPdmVyZmxvd3MgPSBbLi4uKCgoX21pZGRsZXdhcmVEYXRhJGF1dG9QMiA9IG1pZGRsZXdhcmVEYXRhLmF1dG9QbGFjZW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkYXV0b1AyLm92ZXJmbG93cykgfHwgW10pLCB7XG4gICAgICAgIHBsYWNlbWVudDogY3VycmVudFBsYWNlbWVudCxcbiAgICAgICAgb3ZlcmZsb3dzOiBjdXJyZW50T3ZlcmZsb3dzXG4gICAgICB9XTtcbiAgICAgIGNvbnN0IG5leHRQbGFjZW1lbnQgPSBwbGFjZW1lbnRzJDFbY3VycmVudEluZGV4ICsgMV07XG5cbiAgICAgIC8vIFRoZXJlIGFyZSBtb3JlIHBsYWNlbWVudHMgdG8gY2hlY2suXG4gICAgICBpZiAobmV4dFBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGluZGV4OiBjdXJyZW50SW5kZXggKyAxLFxuICAgICAgICAgICAgb3ZlcmZsb3dzOiBhbGxPdmVyZmxvd3NcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICBwbGFjZW1lbnQ6IG5leHRQbGFjZW1lbnRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBwbGFjZW1lbnRzU29ydGVkQnlNb3N0U3BhY2UgPSBhbGxPdmVyZmxvd3MubWFwKGQgPT4ge1xuICAgICAgICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQoZC5wbGFjZW1lbnQpO1xuICAgICAgICByZXR1cm4gW2QucGxhY2VtZW50LCBhbGlnbm1lbnQgJiYgY3Jvc3NBeGlzID9cbiAgICAgICAgLy8gQ2hlY2sgYWxvbmcgdGhlIG1haW5BeGlzIGFuZCBtYWluIGNyb3NzQXhpcyBzaWRlLlxuICAgICAgICBkLm92ZXJmbG93cy5zbGljZSgwLCAyKS5yZWR1Y2UoKGFjYywgdikgPT4gYWNjICsgdiwgMCkgOlxuICAgICAgICAvLyBDaGVjayBvbmx5IHRoZSBtYWluQXhpcy5cbiAgICAgICAgZC5vdmVyZmxvd3NbMF0sIGQub3ZlcmZsb3dzXTtcbiAgICAgIH0pLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKTtcbiAgICAgIGNvbnN0IHBsYWNlbWVudHNUaGF0Rml0T25FYWNoU2lkZSA9IHBsYWNlbWVudHNTb3J0ZWRCeU1vc3RTcGFjZS5maWx0ZXIoZCA9PiBkWzJdLnNsaWNlKDAsXG4gICAgICAvLyBBbGlnbmVkIHBsYWNlbWVudHMgc2hvdWxkIG5vdCBjaGVjayB0aGVpciBvcHBvc2l0ZSBjcm9zc0F4aXNcbiAgICAgIC8vIHNpZGUuXG4gICAgICBnZXRBbGlnbm1lbnQoZFswXSkgPyAyIDogMykuZXZlcnkodiA9PiB2IDw9IDApKTtcbiAgICAgIGNvbnN0IHJlc2V0UGxhY2VtZW50ID0gKChfcGxhY2VtZW50c1RoYXRGaXRPbkUgPSBwbGFjZW1lbnRzVGhhdEZpdE9uRWFjaFNpZGVbMF0pID09IG51bGwgPyB2b2lkIDAgOiBfcGxhY2VtZW50c1RoYXRGaXRPbkVbMF0pIHx8IHBsYWNlbWVudHNTb3J0ZWRCeU1vc3RTcGFjZVswXVswXTtcbiAgICAgIGlmIChyZXNldFBsYWNlbWVudCAhPT0gcGxhY2VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgaW5kZXg6IGN1cnJlbnRJbmRleCArIDEsXG4gICAgICAgICAgICBvdmVyZmxvd3M6IGFsbE92ZXJmbG93c1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHBsYWNlbWVudDogcmVzZXRQbGFjZW1lbnRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgZmxpcHBpbmcgdGhlIGBwbGFjZW1lbnRgXG4gKiBpbiBvcmRlciB0byBrZWVwIGl0IGluIHZpZXcgd2hlbiB0aGUgcHJlZmVycmVkIHBsYWNlbWVudChzKSB3aWxsIG92ZXJmbG93IHRoZVxuICogY2xpcHBpbmcgYm91bmRhcnkuIEFsdGVybmF0aXZlIHRvIGBhdXRvUGxhY2VtZW50YC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9mbGlwXG4gKi9cbmNvbnN0IGZsaXAgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2ZsaXAnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkYXJyb3csIF9taWRkbGV3YXJlRGF0YSRmbGlwO1xuICAgICAgY29uc3Qge1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIG1pZGRsZXdhcmVEYXRhLFxuICAgICAgICByZWN0cyxcbiAgICAgICAgaW5pdGlhbFBsYWNlbWVudCxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIGVsZW1lbnRzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1haW5BeGlzOiBjaGVja01haW5BeGlzID0gdHJ1ZSxcbiAgICAgICAgY3Jvc3NBeGlzOiBjaGVja0Nyb3NzQXhpcyA9IHRydWUsXG4gICAgICAgIGZhbGxiYWNrUGxhY2VtZW50czogc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzLFxuICAgICAgICBmYWxsYmFja1N0cmF0ZWd5ID0gJ2Jlc3RGaXQnLFxuICAgICAgICBmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uID0gJ25vbmUnLFxuICAgICAgICBmbGlwQWxpZ25tZW50ID0gdHJ1ZSxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuXG4gICAgICAvLyBJZiBhIHJlc2V0IGJ5IHRoZSBhcnJvdyB3YXMgY2F1c2VkIGR1ZSB0byBhbiBhbGlnbm1lbnQgb2Zmc2V0IGJlaW5nXG4gICAgICAvLyBhZGRlZCwgd2Ugc2hvdWxkIHNraXAgYW55IGxvZ2ljIG5vdyBzaW5jZSBgZmxpcCgpYCBoYXMgYWxyZWFkeSBkb25lIGl0c1xuICAgICAgLy8gd29yay5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mbG9hdGluZy11aS9mbG9hdGluZy11aS9pc3N1ZXMvMjU0OSNpc3N1ZWNvbW1lbnQtMTcxOTYwMTY0M1xuICAgICAgaWYgKChfbWlkZGxld2FyZURhdGEkYXJyb3cgPSBtaWRkbGV3YXJlRGF0YS5hcnJvdykgIT0gbnVsbCAmJiBfbWlkZGxld2FyZURhdGEkYXJyb3cuYWxpZ25tZW50T2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCk7XG4gICAgICBjb25zdCBpbml0aWFsU2lkZUF4aXMgPSBnZXRTaWRlQXhpcyhpbml0aWFsUGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGlzQmFzZVBsYWNlbWVudCA9IGdldFNpZGUoaW5pdGlhbFBsYWNlbWVudCkgPT09IGluaXRpYWxQbGFjZW1lbnQ7XG4gICAgICBjb25zdCBydGwgPSBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSk7XG4gICAgICBjb25zdCBmYWxsYmFja1BsYWNlbWVudHMgPSBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgfHwgKGlzQmFzZVBsYWNlbWVudCB8fCAhZmxpcEFsaWdubWVudCA/IFtnZXRPcHBvc2l0ZVBsYWNlbWVudChpbml0aWFsUGxhY2VtZW50KV0gOiBnZXRFeHBhbmRlZFBsYWNlbWVudHMoaW5pdGlhbFBsYWNlbWVudCkpO1xuICAgICAgY29uc3QgaGFzRmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbiA9IGZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24gIT09ICdub25lJztcbiAgICAgIGlmICghc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzICYmIGhhc0ZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24pIHtcbiAgICAgICAgZmFsbGJhY2tQbGFjZW1lbnRzLnB1c2goLi4uZ2V0T3Bwb3NpdGVBeGlzUGxhY2VtZW50cyhpbml0aWFsUGxhY2VtZW50LCBmbGlwQWxpZ25tZW50LCBmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uLCBydGwpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBsYWNlbWVudHMgPSBbaW5pdGlhbFBsYWNlbWVudCwgLi4uZmFsbGJhY2tQbGFjZW1lbnRzXTtcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XG4gICAgICBjb25zdCBvdmVyZmxvd3MgPSBbXTtcbiAgICAgIGxldCBvdmVyZmxvd3NEYXRhID0gKChfbWlkZGxld2FyZURhdGEkZmxpcCA9IG1pZGRsZXdhcmVEYXRhLmZsaXApID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkZmxpcC5vdmVyZmxvd3MpIHx8IFtdO1xuICAgICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgICAgb3ZlcmZsb3dzLnB1c2gob3ZlcmZsb3dbc2lkZV0pO1xuICAgICAgfVxuICAgICAgaWYgKGNoZWNrQ3Jvc3NBeGlzKSB7XG4gICAgICAgIGNvbnN0IHNpZGVzID0gZ2V0QWxpZ25tZW50U2lkZXMocGxhY2VtZW50LCByZWN0cywgcnRsKTtcbiAgICAgICAgb3ZlcmZsb3dzLnB1c2gob3ZlcmZsb3dbc2lkZXNbMF1dLCBvdmVyZmxvd1tzaWRlc1sxXV0pO1xuICAgICAgfVxuICAgICAgb3ZlcmZsb3dzRGF0YSA9IFsuLi5vdmVyZmxvd3NEYXRhLCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgb3ZlcmZsb3dzXG4gICAgICB9XTtcblxuICAgICAgLy8gT25lIG9yIG1vcmUgc2lkZXMgaXMgb3ZlcmZsb3dpbmcuXG4gICAgICBpZiAoIW92ZXJmbG93cy5ldmVyeShzaWRlID0+IHNpZGUgPD0gMCkpIHtcbiAgICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRmbGlwMiwgX292ZXJmbG93c0RhdGEkZmlsdGVyO1xuICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoKChfbWlkZGxld2FyZURhdGEkZmxpcDIgPSBtaWRkbGV3YXJlRGF0YS5mbGlwKSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGZsaXAyLmluZGV4KSB8fCAwKSArIDE7XG4gICAgICAgIGNvbnN0IG5leHRQbGFjZW1lbnQgPSBwbGFjZW1lbnRzW25leHRJbmRleF07XG4gICAgICAgIGlmIChuZXh0UGxhY2VtZW50KSB7XG4gICAgICAgICAgLy8gVHJ5IG5leHQgcGxhY2VtZW50IGFuZCByZS1ydW4gdGhlIGxpZmVjeWNsZS5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICBpbmRleDogbmV4dEluZGV4LFxuICAgICAgICAgICAgICBvdmVyZmxvd3M6IG92ZXJmbG93c0RhdGFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgICBwbGFjZW1lbnQ6IG5leHRQbGFjZW1lbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmlyc3QsIGZpbmQgdGhlIGNhbmRpZGF0ZXMgdGhhdCBmaXQgb24gdGhlIG1haW5BeGlzIHNpZGUgb2Ygb3ZlcmZsb3csXG4gICAgICAgIC8vIHRoZW4gZmluZCB0aGUgcGxhY2VtZW50IHRoYXQgZml0cyB0aGUgYmVzdCBvbiB0aGUgbWFpbiBjcm9zc0F4aXMgc2lkZS5cbiAgICAgICAgbGV0IHJlc2V0UGxhY2VtZW50ID0gKF9vdmVyZmxvd3NEYXRhJGZpbHRlciA9IG92ZXJmbG93c0RhdGEuZmlsdGVyKGQgPT4gZC5vdmVyZmxvd3NbMF0gPD0gMCkuc29ydCgoYSwgYikgPT4gYS5vdmVyZmxvd3NbMV0gLSBiLm92ZXJmbG93c1sxXSlbMF0pID09IG51bGwgPyB2b2lkIDAgOiBfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIucGxhY2VtZW50O1xuXG4gICAgICAgIC8vIE90aGVyd2lzZSBmYWxsYmFjay5cbiAgICAgICAgaWYgKCFyZXNldFBsYWNlbWVudCkge1xuICAgICAgICAgIHN3aXRjaCAoZmFsbGJhY2tTdHJhdGVneSkge1xuICAgICAgICAgICAgY2FzZSAnYmVzdEZpdCc6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgX292ZXJmbG93c0RhdGEkZmlsdGVyMjtcbiAgICAgICAgICAgICAgICBjb25zdCBwbGFjZW1lbnQgPSAoX292ZXJmbG93c0RhdGEkZmlsdGVyMiA9IG92ZXJmbG93c0RhdGEuZmlsdGVyKGQgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGhhc0ZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFNpZGVBeGlzID0gZ2V0U2lkZUF4aXMoZC5wbGFjZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFNpZGVBeGlzID09PSBpbml0aWFsU2lkZUF4aXMgfHxcbiAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgYmlhcyB0byB0aGUgYHlgIHNpZGUgYXhpcyBkdWUgdG8gaG9yaXpvbnRhbFxuICAgICAgICAgICAgICAgICAgICAvLyByZWFkaW5nIGRpcmVjdGlvbnMgZmF2b3JpbmcgZ3JlYXRlciB3aWR0aC5cbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFNpZGVBeGlzID09PSAneSc7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KS5tYXAoZCA9PiBbZC5wbGFjZW1lbnQsIGQub3ZlcmZsb3dzLmZpbHRlcihvdmVyZmxvdyA9PiBvdmVyZmxvdyA+IDApLnJlZHVjZSgoYWNjLCBvdmVyZmxvdykgPT4gYWNjICsgb3ZlcmZsb3csIDApXSkuc29ydCgoYSwgYikgPT4gYVsxXSAtIGJbMV0pWzBdKSA9PSBudWxsID8gdm9pZCAwIDogX292ZXJmbG93c0RhdGEkZmlsdGVyMlswXTtcbiAgICAgICAgICAgICAgICBpZiAocGxhY2VtZW50KSB7XG4gICAgICAgICAgICAgICAgICByZXNldFBsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2luaXRpYWxQbGFjZW1lbnQnOlxuICAgICAgICAgICAgICByZXNldFBsYWNlbWVudCA9IGluaXRpYWxQbGFjZW1lbnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocGxhY2VtZW50ICE9PSByZXNldFBsYWNlbWVudCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgICBwbGFjZW1lbnQ6IHJlc2V0UGxhY2VtZW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0KSB7XG4gIHJldHVybiB7XG4gICAgdG9wOiBvdmVyZmxvdy50b3AgLSByZWN0LmhlaWdodCxcbiAgICByaWdodDogb3ZlcmZsb3cucmlnaHQgLSByZWN0LndpZHRoLFxuICAgIGJvdHRvbTogb3ZlcmZsb3cuYm90dG9tIC0gcmVjdC5oZWlnaHQsXG4gICAgbGVmdDogb3ZlcmZsb3cubGVmdCAtIHJlY3Qud2lkdGhcbiAgfTtcbn1cbmZ1bmN0aW9uIGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChvdmVyZmxvdykge1xuICByZXR1cm4gc2lkZXMuc29tZShzaWRlID0+IG92ZXJmbG93W3NpZGVdID49IDApO1xufVxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIGhpZGUgdGhlIGZsb2F0aW5nIGVsZW1lbnQgaW4gYXBwbGljYWJsZSBzaXR1YXRpb25zLCBzdWNoIGFzXG4gKiB3aGVuIGl0IGlzIG5vdCBpbiB0aGUgc2FtZSBjbGlwcGluZyBjb250ZXh0IGFzIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9oaWRlXG4gKi9cbmNvbnN0IGhpZGUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2hpZGUnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcmVjdHNcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgc3RyYXRlZ3kgPSAncmVmZXJlbmNlSGlkZGVuJyxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgc3dpdGNoIChzdHJhdGVneSkge1xuICAgICAgICBjYXNlICdyZWZlcmVuY2VIaWRkZW4nOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgICAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zLFxuICAgICAgICAgICAgICBlbGVtZW50Q29udGV4dDogJ3JlZmVyZW5jZSdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0cy5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIHJlZmVyZW5jZUhpZGRlbk9mZnNldHM6IG9mZnNldHMsXG4gICAgICAgICAgICAgICAgcmVmZXJlbmNlSGlkZGVuOiBpc0FueVNpZGVGdWxseUNsaXBwZWQob2Zmc2V0cylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2VzY2FwZWQnOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgICAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zLFxuICAgICAgICAgICAgICBhbHRCb3VuZGFyeTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMob3ZlcmZsb3csIHJlY3RzLmZsb2F0aW5nKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBlc2NhcGVkT2Zmc2V0czogb2Zmc2V0cyxcbiAgICAgICAgICAgICAgICBlc2NhcGVkOiBpc0FueVNpZGVGdWxseUNsaXBwZWQob2Zmc2V0cylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xuXG5mdW5jdGlvbiBnZXRCb3VuZGluZ1JlY3QocmVjdHMpIHtcbiAgY29uc3QgbWluWCA9IG1pbiguLi5yZWN0cy5tYXAocmVjdCA9PiByZWN0LmxlZnQpKTtcbiAgY29uc3QgbWluWSA9IG1pbiguLi5yZWN0cy5tYXAocmVjdCA9PiByZWN0LnRvcCkpO1xuICBjb25zdCBtYXhYID0gbWF4KC4uLnJlY3RzLm1hcChyZWN0ID0+IHJlY3QucmlnaHQpKTtcbiAgY29uc3QgbWF4WSA9IG1heCguLi5yZWN0cy5tYXAocmVjdCA9PiByZWN0LmJvdHRvbSkpO1xuICByZXR1cm4ge1xuICAgIHg6IG1pblgsXG4gICAgeTogbWluWSxcbiAgICB3aWR0aDogbWF4WCAtIG1pblgsXG4gICAgaGVpZ2h0OiBtYXhZIC0gbWluWVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0UmVjdHNCeUxpbmUocmVjdHMpIHtcbiAgY29uc3Qgc29ydGVkUmVjdHMgPSByZWN0cy5zbGljZSgpLnNvcnQoKGEsIGIpID0+IGEueSAtIGIueSk7XG4gIGNvbnN0IGdyb3VwcyA9IFtdO1xuICBsZXQgcHJldlJlY3QgPSBudWxsO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNvcnRlZFJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgcmVjdCA9IHNvcnRlZFJlY3RzW2ldO1xuICAgIGlmICghcHJldlJlY3QgfHwgcmVjdC55IC0gcHJldlJlY3QueSA+IHByZXZSZWN0LmhlaWdodCAvIDIpIHtcbiAgICAgIGdyb3Vwcy5wdXNoKFtyZWN0XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdyb3Vwc1tncm91cHMubGVuZ3RoIC0gMV0ucHVzaChyZWN0KTtcbiAgICB9XG4gICAgcHJldlJlY3QgPSByZWN0O1xuICB9XG4gIHJldHVybiBncm91cHMubWFwKHJlY3QgPT4gcmVjdFRvQ2xpZW50UmVjdChnZXRCb3VuZGluZ1JlY3QocmVjdCkpKTtcbn1cbi8qKlxuICogUHJvdmlkZXMgaW1wcm92ZWQgcG9zaXRpb25pbmcgZm9yIGlubGluZSByZWZlcmVuY2UgZWxlbWVudHMgdGhhdCBjYW4gc3BhblxuICogb3ZlciBtdWx0aXBsZSBsaW5lcywgc3VjaCBhcyBoeXBlcmxpbmtzIG9yIHJhbmdlIHNlbGVjdGlvbnMuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvaW5saW5lXG4gKi9cbmNvbnN0IGlubGluZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnaW5saW5lJyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgZWxlbWVudHMsXG4gICAgICAgIHJlY3RzLFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICAgc3RyYXRlZ3lcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIC8vIEEgTW91c2VFdmVudCdzIGNsaWVudHtYLFl9IGNvb3JkcyBjYW4gYmUgdXAgdG8gMiBwaXhlbHMgb2ZmIGFcbiAgICAgIC8vIENsaWVudFJlY3QncyBib3VuZHMsIGRlc3BpdGUgdGhlIGV2ZW50IGxpc3RlbmVyIGJlaW5nIHRyaWdnZXJlZC4gQVxuICAgICAgLy8gcGFkZGluZyBvZiAyIHNlZW1zIHRvIGhhbmRsZSB0aGlzIGlzc3VlLlxuICAgICAgY29uc3Qge1xuICAgICAgICBwYWRkaW5nID0gMixcbiAgICAgICAgeCxcbiAgICAgICAgeVxuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IG5hdGl2ZUNsaWVudFJlY3RzID0gQXJyYXkuZnJvbSgoYXdhaXQgKHBsYXRmb3JtLmdldENsaWVudFJlY3RzID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5nZXRDbGllbnRSZWN0cyhlbGVtZW50cy5yZWZlcmVuY2UpKSkgfHwgW10pO1xuICAgICAgY29uc3QgY2xpZW50UmVjdHMgPSBnZXRSZWN0c0J5TGluZShuYXRpdmVDbGllbnRSZWN0cyk7XG4gICAgICBjb25zdCBmYWxsYmFjayA9IHJlY3RUb0NsaWVudFJlY3QoZ2V0Qm91bmRpbmdSZWN0KG5hdGl2ZUNsaWVudFJlY3RzKSk7XG4gICAgICBjb25zdCBwYWRkaW5nT2JqZWN0ID0gZ2V0UGFkZGluZ09iamVjdChwYWRkaW5nKTtcbiAgICAgIGZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIHtcbiAgICAgICAgLy8gVGhlcmUgYXJlIHR3byByZWN0cyBhbmQgdGhleSBhcmUgZGlzam9pbmVkLlxuICAgICAgICBpZiAoY2xpZW50UmVjdHMubGVuZ3RoID09PSAyICYmIGNsaWVudFJlY3RzWzBdLmxlZnQgPiBjbGllbnRSZWN0c1sxXS5yaWdodCAmJiB4ICE9IG51bGwgJiYgeSAhPSBudWxsKSB7XG4gICAgICAgICAgLy8gRmluZCB0aGUgZmlyc3QgcmVjdCBpbiB3aGljaCB0aGUgcG9pbnQgaXMgZnVsbHkgaW5zaWRlLlxuICAgICAgICAgIHJldHVybiBjbGllbnRSZWN0cy5maW5kKHJlY3QgPT4geCA+IHJlY3QubGVmdCAtIHBhZGRpbmdPYmplY3QubGVmdCAmJiB4IDwgcmVjdC5yaWdodCArIHBhZGRpbmdPYmplY3QucmlnaHQgJiYgeSA+IHJlY3QudG9wIC0gcGFkZGluZ09iamVjdC50b3AgJiYgeSA8IHJlY3QuYm90dG9tICsgcGFkZGluZ09iamVjdC5ib3R0b20pIHx8IGZhbGxiYWNrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlcmUgYXJlIDIgb3IgbW9yZSBjb25uZWN0ZWQgcmVjdHMuXG4gICAgICAgIGlmIChjbGllbnRSZWN0cy5sZW5ndGggPj0gMikge1xuICAgICAgICAgIGlmIChnZXRTaWRlQXhpcyhwbGFjZW1lbnQpID09PSAneScpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0UmVjdCA9IGNsaWVudFJlY3RzWzBdO1xuICAgICAgICAgICAgY29uc3QgbGFzdFJlY3QgPSBjbGllbnRSZWN0c1tjbGllbnRSZWN0cy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGNvbnN0IGlzVG9wID0gZ2V0U2lkZShwbGFjZW1lbnQpID09PSAndG9wJztcbiAgICAgICAgICAgIGNvbnN0IHRvcCA9IGZpcnN0UmVjdC50b3A7XG4gICAgICAgICAgICBjb25zdCBib3R0b20gPSBsYXN0UmVjdC5ib3R0b207XG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0gaXNUb3AgPyBmaXJzdFJlY3QubGVmdCA6IGxhc3RSZWN0LmxlZnQ7XG4gICAgICAgICAgICBjb25zdCByaWdodCA9IGlzVG9wID8gZmlyc3RSZWN0LnJpZ2h0IDogbGFzdFJlY3QucmlnaHQ7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IHJpZ2h0IC0gbGVmdDtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGJvdHRvbSAtIHRvcDtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgICAgYm90dG9tLFxuICAgICAgICAgICAgICBsZWZ0LFxuICAgICAgICAgICAgICByaWdodCxcbiAgICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgICAgeDogbGVmdCxcbiAgICAgICAgICAgICAgeTogdG9wXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBpc0xlZnRTaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpID09PSAnbGVmdCc7XG4gICAgICAgICAgY29uc3QgbWF4UmlnaHQgPSBtYXgoLi4uY2xpZW50UmVjdHMubWFwKHJlY3QgPT4gcmVjdC5yaWdodCkpO1xuICAgICAgICAgIGNvbnN0IG1pbkxlZnQgPSBtaW4oLi4uY2xpZW50UmVjdHMubWFwKHJlY3QgPT4gcmVjdC5sZWZ0KSk7XG4gICAgICAgICAgY29uc3QgbWVhc3VyZVJlY3RzID0gY2xpZW50UmVjdHMuZmlsdGVyKHJlY3QgPT4gaXNMZWZ0U2lkZSA/IHJlY3QubGVmdCA9PT0gbWluTGVmdCA6IHJlY3QucmlnaHQgPT09IG1heFJpZ2h0KTtcbiAgICAgICAgICBjb25zdCB0b3AgPSBtZWFzdXJlUmVjdHNbMF0udG9wO1xuICAgICAgICAgIGNvbnN0IGJvdHRvbSA9IG1lYXN1cmVSZWN0c1ttZWFzdXJlUmVjdHMubGVuZ3RoIC0gMV0uYm90dG9tO1xuICAgICAgICAgIGNvbnN0IGxlZnQgPSBtaW5MZWZ0O1xuICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gbWF4UmlnaHQ7XG4gICAgICAgICAgY29uc3Qgd2lkdGggPSByaWdodCAtIGxlZnQ7XG4gICAgICAgICAgY29uc3QgaGVpZ2h0ID0gYm90dG9tIC0gdG9wO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0b3AsXG4gICAgICAgICAgICBib3R0b20sXG4gICAgICAgICAgICBsZWZ0LFxuICAgICAgICAgICAgcmlnaHQsXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHg6IGxlZnQsXG4gICAgICAgICAgICB5OiB0b3BcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxsYmFjaztcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc2V0UmVjdHMgPSBhd2FpdCBwbGF0Zm9ybS5nZXRFbGVtZW50UmVjdHMoe1xuICAgICAgICByZWZlcmVuY2U6IHtcbiAgICAgICAgICBnZXRCb3VuZGluZ0NsaWVudFJlY3RcbiAgICAgICAgfSxcbiAgICAgICAgZmxvYXRpbmc6IGVsZW1lbnRzLmZsb2F0aW5nLFxuICAgICAgICBzdHJhdGVneVxuICAgICAgfSk7XG4gICAgICBpZiAocmVjdHMucmVmZXJlbmNlLnggIT09IHJlc2V0UmVjdHMucmVmZXJlbmNlLnggfHwgcmVjdHMucmVmZXJlbmNlLnkgIT09IHJlc2V0UmVjdHMucmVmZXJlbmNlLnkgfHwgcmVjdHMucmVmZXJlbmNlLndpZHRoICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS53aWR0aCB8fCByZWN0cy5yZWZlcmVuY2UuaGVpZ2h0ICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS5oZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcmVjdHM6IHJlc2V0UmVjdHNcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9O1xufTtcblxuLy8gRm9yIHR5cGUgYmFja3dhcmRzLWNvbXBhdGliaWxpdHksIHRoZSBgT2Zmc2V0T3B0aW9uc2AgdHlwZSB3YXMgYWxzb1xuLy8gRGVyaXZhYmxlLlxuXG5hc3luYyBmdW5jdGlvbiBjb252ZXJ0VmFsdWVUb0Nvb3JkcyhzdGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCB7XG4gICAgcGxhY2VtZW50LFxuICAgIHBsYXRmb3JtLFxuICAgIGVsZW1lbnRzXG4gIH0gPSBzdGF0ZTtcbiAgY29uc3QgcnRsID0gYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpO1xuICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgY29uc3QgaXNWZXJ0aWNhbCA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCkgPT09ICd5JztcbiAgY29uc3QgbWFpbkF4aXNNdWx0aSA9IFsnbGVmdCcsICd0b3AnXS5pbmNsdWRlcyhzaWRlKSA/IC0xIDogMTtcbiAgY29uc3QgY3Jvc3NBeGlzTXVsdGkgPSBydGwgJiYgaXNWZXJ0aWNhbCA/IC0xIDogMTtcbiAgY29uc3QgcmF3VmFsdWUgPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICBsZXQge1xuICAgIG1haW5BeGlzLFxuICAgIGNyb3NzQXhpcyxcbiAgICBhbGlnbm1lbnRBeGlzXG4gIH0gPSB0eXBlb2YgcmF3VmFsdWUgPT09ICdudW1iZXInID8ge1xuICAgIG1haW5BeGlzOiByYXdWYWx1ZSxcbiAgICBjcm9zc0F4aXM6IDAsXG4gICAgYWxpZ25tZW50QXhpczogbnVsbFxuICB9IDoge1xuICAgIG1haW5BeGlzOiByYXdWYWx1ZS5tYWluQXhpcyB8fCAwLFxuICAgIGNyb3NzQXhpczogcmF3VmFsdWUuY3Jvc3NBeGlzIHx8IDAsXG4gICAgYWxpZ25tZW50QXhpczogcmF3VmFsdWUuYWxpZ25tZW50QXhpc1xuICB9O1xuICBpZiAoYWxpZ25tZW50ICYmIHR5cGVvZiBhbGlnbm1lbnRBeGlzID09PSAnbnVtYmVyJykge1xuICAgIGNyb3NzQXhpcyA9IGFsaWdubWVudCA9PT0gJ2VuZCcgPyBhbGlnbm1lbnRBeGlzICogLTEgOiBhbGlnbm1lbnRBeGlzO1xuICB9XG4gIHJldHVybiBpc1ZlcnRpY2FsID8ge1xuICAgIHg6IGNyb3NzQXhpcyAqIGNyb3NzQXhpc011bHRpLFxuICAgIHk6IG1haW5BeGlzICogbWFpbkF4aXNNdWx0aVxuICB9IDoge1xuICAgIHg6IG1haW5BeGlzICogbWFpbkF4aXNNdWx0aSxcbiAgICB5OiBjcm9zc0F4aXMgKiBjcm9zc0F4aXNNdWx0aVxuICB9O1xufVxuXG4vKipcbiAqIE1vZGlmaWVzIHRoZSBwbGFjZW1lbnQgYnkgdHJhbnNsYXRpbmcgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYWxvbmcgdGhlXG4gKiBzcGVjaWZpZWQgYXhlcy5cbiAqIEEgbnVtYmVyIChzaG9ydGhhbmQgZm9yIGBtYWluQXhpc2Agb3IgZGlzdGFuY2UpLCBvciBhbiBheGVzIGNvbmZpZ3VyYXRpb25cbiAqIG9iamVjdCBtYXkgYmUgcGFzc2VkLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL29mZnNldFxuICovXG5jb25zdCBvZmZzZXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IDA7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJG9mZnNlLCBfbWlkZGxld2FyZURhdGEkYXJyb3c7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgbWlkZGxld2FyZURhdGFcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IGRpZmZDb29yZHMgPSBhd2FpdCBjb252ZXJ0VmFsdWVUb0Nvb3JkcyhzdGF0ZSwgb3B0aW9ucyk7XG5cbiAgICAgIC8vIElmIHRoZSBwbGFjZW1lbnQgaXMgdGhlIHNhbWUgYW5kIHRoZSBhcnJvdyBjYXVzZWQgYW4gYWxpZ25tZW50IG9mZnNldFxuICAgICAgLy8gdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGNoYW5nZSB0aGUgcG9zaXRpb25pbmcgY29vcmRpbmF0ZXMuXG4gICAgICBpZiAocGxhY2VtZW50ID09PSAoKF9taWRkbGV3YXJlRGF0YSRvZmZzZSA9IG1pZGRsZXdhcmVEYXRhLm9mZnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRvZmZzZS5wbGFjZW1lbnQpICYmIChfbWlkZGxld2FyZURhdGEkYXJyb3cgPSBtaWRkbGV3YXJlRGF0YS5hcnJvdykgIT0gbnVsbCAmJiBfbWlkZGxld2FyZURhdGEkYXJyb3cuYWxpZ25tZW50T2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHggKyBkaWZmQ29vcmRzLngsXG4gICAgICAgIHk6IHkgKyBkaWZmQ29vcmRzLnksXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAuLi5kaWZmQ29vcmRzLFxuICAgICAgICAgIHBsYWNlbWVudFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IHNoaWZ0aW5nIGl0IGluIG9yZGVyIHRvXG4gKiBrZWVwIGl0IGluIHZpZXcgd2hlbiBpdCB3aWxsIG92ZXJmbG93IHRoZSBjbGlwcGluZyBib3VuZGFyeS5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaGlmdFxuICovXG5jb25zdCBzaGlmdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnc2hpZnQnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgcGxhY2VtZW50XG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1haW5BeGlzOiBjaGVja01haW5BeGlzID0gdHJ1ZSxcbiAgICAgICAgY3Jvc3NBeGlzOiBjaGVja0Nyb3NzQXhpcyA9IGZhbHNlLFxuICAgICAgICBsaW1pdGVyID0ge1xuICAgICAgICAgIGZuOiBfcmVmID0+IHtcbiAgICAgICAgICAgIGxldCB7XG4gICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgIHlcbiAgICAgICAgICAgIH0gPSBfcmVmO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgeVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IGNvb3JkcyA9IHtcbiAgICAgICAgeCxcbiAgICAgICAgeVxuICAgICAgfTtcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XG4gICAgICBjb25zdCBjcm9zc0F4aXMgPSBnZXRTaWRlQXhpcyhnZXRTaWRlKHBsYWNlbWVudCkpO1xuICAgICAgY29uc3QgbWFpbkF4aXMgPSBnZXRPcHBvc2l0ZUF4aXMoY3Jvc3NBeGlzKTtcbiAgICAgIGxldCBtYWluQXhpc0Nvb3JkID0gY29vcmRzW21haW5BeGlzXTtcbiAgICAgIGxldCBjcm9zc0F4aXNDb29yZCA9IGNvb3Jkc1tjcm9zc0F4aXNdO1xuICAgICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgICAgY29uc3QgbWluU2lkZSA9IG1haW5BeGlzID09PSAneScgPyAndG9wJyA6ICdsZWZ0JztcbiAgICAgICAgY29uc3QgbWF4U2lkZSA9IG1haW5BeGlzID09PSAneScgPyAnYm90dG9tJyA6ICdyaWdodCc7XG4gICAgICAgIGNvbnN0IG1pbiA9IG1haW5BeGlzQ29vcmQgKyBvdmVyZmxvd1ttaW5TaWRlXTtcbiAgICAgICAgY29uc3QgbWF4ID0gbWFpbkF4aXNDb29yZCAtIG92ZXJmbG93W21heFNpZGVdO1xuICAgICAgICBtYWluQXhpc0Nvb3JkID0gY2xhbXAobWluLCBtYWluQXhpc0Nvb3JkLCBtYXgpO1xuICAgICAgfVxuICAgICAgaWYgKGNoZWNrQ3Jvc3NBeGlzKSB7XG4gICAgICAgIGNvbnN0IG1pblNpZGUgPSBjcm9zc0F4aXMgPT09ICd5JyA/ICd0b3AnIDogJ2xlZnQnO1xuICAgICAgICBjb25zdCBtYXhTaWRlID0gY3Jvc3NBeGlzID09PSAneScgPyAnYm90dG9tJyA6ICdyaWdodCc7XG4gICAgICAgIGNvbnN0IG1pbiA9IGNyb3NzQXhpc0Nvb3JkICsgb3ZlcmZsb3dbbWluU2lkZV07XG4gICAgICAgIGNvbnN0IG1heCA9IGNyb3NzQXhpc0Nvb3JkIC0gb3ZlcmZsb3dbbWF4U2lkZV07XG4gICAgICAgIGNyb3NzQXhpc0Nvb3JkID0gY2xhbXAobWluLCBjcm9zc0F4aXNDb29yZCwgbWF4KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxpbWl0ZWRDb29yZHMgPSBsaW1pdGVyLmZuKHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIFttYWluQXhpc106IG1haW5BeGlzQ29vcmQsXG4gICAgICAgIFtjcm9zc0F4aXNdOiBjcm9zc0F4aXNDb29yZFxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5saW1pdGVkQ29vcmRzLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgeDogbGltaXRlZENvb3Jkcy54IC0geCxcbiAgICAgICAgICB5OiBsaW1pdGVkQ29vcmRzLnkgLSB5LFxuICAgICAgICAgIGVuYWJsZWQ6IHtcbiAgICAgICAgICAgIFttYWluQXhpc106IGNoZWNrTWFpbkF4aXMsXG4gICAgICAgICAgICBbY3Jvc3NBeGlzXTogY2hlY2tDcm9zc0F4aXNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9O1xufTtcbi8qKlxuICogQnVpbHQtaW4gYGxpbWl0ZXJgIHRoYXQgd2lsbCBzdG9wIGBzaGlmdCgpYCBhdCBhIGNlcnRhaW4gcG9pbnQuXG4gKi9cbmNvbnN0IGxpbWl0U2hpZnQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgb3B0aW9ucyxcbiAgICBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIHJlY3RzLFxuICAgICAgICBtaWRkbGV3YXJlRGF0YVxuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBvZmZzZXQgPSAwLFxuICAgICAgICBtYWluQXhpczogY2hlY2tNYWluQXhpcyA9IHRydWUsXG4gICAgICAgIGNyb3NzQXhpczogY2hlY2tDcm9zc0F4aXMgPSB0cnVlXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgICB4LFxuICAgICAgICB5XG4gICAgICB9O1xuICAgICAgY29uc3QgY3Jvc3NBeGlzID0gZ2V0U2lkZUF4aXMocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IG1haW5BeGlzID0gZ2V0T3Bwb3NpdGVBeGlzKGNyb3NzQXhpcyk7XG4gICAgICBsZXQgbWFpbkF4aXNDb29yZCA9IGNvb3Jkc1ttYWluQXhpc107XG4gICAgICBsZXQgY3Jvc3NBeGlzQ29vcmQgPSBjb29yZHNbY3Jvc3NBeGlzXTtcbiAgICAgIGNvbnN0IHJhd09mZnNldCA9IGV2YWx1YXRlKG9mZnNldCwgc3RhdGUpO1xuICAgICAgY29uc3QgY29tcHV0ZWRPZmZzZXQgPSB0eXBlb2YgcmF3T2Zmc2V0ID09PSAnbnVtYmVyJyA/IHtcbiAgICAgICAgbWFpbkF4aXM6IHJhd09mZnNldCxcbiAgICAgICAgY3Jvc3NBeGlzOiAwXG4gICAgICB9IDoge1xuICAgICAgICBtYWluQXhpczogMCxcbiAgICAgICAgY3Jvc3NBeGlzOiAwLFxuICAgICAgICAuLi5yYXdPZmZzZXRcbiAgICAgIH07XG4gICAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgICBjb25zdCBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICAgICAgICBjb25zdCBsaW1pdE1pbiA9IHJlY3RzLnJlZmVyZW5jZVttYWluQXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5dICsgY29tcHV0ZWRPZmZzZXQubWFpbkF4aXM7XG4gICAgICAgIGNvbnN0IGxpbWl0TWF4ID0gcmVjdHMucmVmZXJlbmNlW21haW5BeGlzXSArIHJlY3RzLnJlZmVyZW5jZVtsZW5dIC0gY29tcHV0ZWRPZmZzZXQubWFpbkF4aXM7XG4gICAgICAgIGlmIChtYWluQXhpc0Nvb3JkIDwgbGltaXRNaW4pIHtcbiAgICAgICAgICBtYWluQXhpc0Nvb3JkID0gbGltaXRNaW47XG4gICAgICAgIH0gZWxzZSBpZiAobWFpbkF4aXNDb29yZCA+IGxpbWl0TWF4KSB7XG4gICAgICAgICAgbWFpbkF4aXNDb29yZCA9IGxpbWl0TWF4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2hlY2tDcm9zc0F4aXMpIHtcbiAgICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRvZmZzZSwgX21pZGRsZXdhcmVEYXRhJG9mZnNlMjtcbiAgICAgICAgY29uc3QgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICd3aWR0aCcgOiAnaGVpZ2h0JztcbiAgICAgICAgY29uc3QgaXNPcmlnaW5TaWRlID0gWyd0b3AnLCAnbGVmdCddLmluY2x1ZGVzKGdldFNpZGUocGxhY2VtZW50KSk7XG4gICAgICAgIGNvbnN0IGxpbWl0TWluID0gcmVjdHMucmVmZXJlbmNlW2Nyb3NzQXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5dICsgKGlzT3JpZ2luU2lkZSA/ICgoX21pZGRsZXdhcmVEYXRhJG9mZnNlID0gbWlkZGxld2FyZURhdGEub2Zmc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJG9mZnNlW2Nyb3NzQXhpc10pIHx8IDAgOiAwKSArIChpc09yaWdpblNpZGUgPyAwIDogY29tcHV0ZWRPZmZzZXQuY3Jvc3NBeGlzKTtcbiAgICAgICAgY29uc3QgbGltaXRNYXggPSByZWN0cy5yZWZlcmVuY2VbY3Jvc3NBeGlzXSArIHJlY3RzLnJlZmVyZW5jZVtsZW5dICsgKGlzT3JpZ2luU2lkZSA/IDAgOiAoKF9taWRkbGV3YXJlRGF0YSRvZmZzZTIgPSBtaWRkbGV3YXJlRGF0YS5vZmZzZXQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkb2Zmc2UyW2Nyb3NzQXhpc10pIHx8IDApIC0gKGlzT3JpZ2luU2lkZSA/IGNvbXB1dGVkT2Zmc2V0LmNyb3NzQXhpcyA6IDApO1xuICAgICAgICBpZiAoY3Jvc3NBeGlzQ29vcmQgPCBsaW1pdE1pbikge1xuICAgICAgICAgIGNyb3NzQXhpc0Nvb3JkID0gbGltaXRNaW47XG4gICAgICAgIH0gZWxzZSBpZiAoY3Jvc3NBeGlzQ29vcmQgPiBsaW1pdE1heCkge1xuICAgICAgICAgIGNyb3NzQXhpc0Nvb3JkID0gbGltaXRNYXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIFttYWluQXhpc106IG1haW5BeGlzQ29vcmQsXG4gICAgICAgIFtjcm9zc0F4aXNdOiBjcm9zc0F4aXNDb29yZFxuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdGhhdCBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgc2l6ZSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCDigJRcbiAqIGZvciBpbnN0YW5jZSwgcHJldmVudCBpdCBmcm9tIG92ZXJmbG93aW5nIHRoZSBjbGlwcGluZyBib3VuZGFyeSBvciBtYXRjaCB0aGVcbiAqIHdpZHRoIG9mIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaXplXG4gKi9cbmNvbnN0IHNpemUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3NpemUnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIHZhciBfc3RhdGUkbWlkZGxld2FyZURhdGEsIF9zdGF0ZSRtaWRkbGV3YXJlRGF0YTI7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgcmVjdHMsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgICBlbGVtZW50c1xuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBhcHBseSA9ICgpID0+IHt9LFxuICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnNcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3Qgc2lkZSA9IGdldFNpZGUocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChwbGFjZW1lbnQpO1xuICAgICAgY29uc3QgaXNZQXhpcyA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCkgPT09ICd5JztcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodFxuICAgICAgfSA9IHJlY3RzLmZsb2F0aW5nO1xuICAgICAgbGV0IGhlaWdodFNpZGU7XG4gICAgICBsZXQgd2lkdGhTaWRlO1xuICAgICAgaWYgKHNpZGUgPT09ICd0b3AnIHx8IHNpZGUgPT09ICdib3R0b20nKSB7XG4gICAgICAgIGhlaWdodFNpZGUgPSBzaWRlO1xuICAgICAgICB3aWR0aFNpZGUgPSBhbGlnbm1lbnQgPT09ICgoYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpKSA/ICdzdGFydCcgOiAnZW5kJykgPyAnbGVmdCcgOiAncmlnaHQnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2lkdGhTaWRlID0gc2lkZTtcbiAgICAgICAgaGVpZ2h0U2lkZSA9IGFsaWdubWVudCA9PT0gJ2VuZCcgPyAndG9wJyA6ICdib3R0b20nO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF4aW11bUNsaXBwaW5nSGVpZ2h0ID0gaGVpZ2h0IC0gb3ZlcmZsb3cudG9wIC0gb3ZlcmZsb3cuYm90dG9tO1xuICAgICAgY29uc3QgbWF4aW11bUNsaXBwaW5nV2lkdGggPSB3aWR0aCAtIG92ZXJmbG93LmxlZnQgLSBvdmVyZmxvdy5yaWdodDtcbiAgICAgIGNvbnN0IG92ZXJmbG93QXZhaWxhYmxlSGVpZ2h0ID0gbWluKGhlaWdodCAtIG92ZXJmbG93W2hlaWdodFNpZGVdLCBtYXhpbXVtQ2xpcHBpbmdIZWlnaHQpO1xuICAgICAgY29uc3Qgb3ZlcmZsb3dBdmFpbGFibGVXaWR0aCA9IG1pbih3aWR0aCAtIG92ZXJmbG93W3dpZHRoU2lkZV0sIG1heGltdW1DbGlwcGluZ1dpZHRoKTtcbiAgICAgIGNvbnN0IG5vU2hpZnQgPSAhc3RhdGUubWlkZGxld2FyZURhdGEuc2hpZnQ7XG4gICAgICBsZXQgYXZhaWxhYmxlSGVpZ2h0ID0gb3ZlcmZsb3dBdmFpbGFibGVIZWlnaHQ7XG4gICAgICBsZXQgYXZhaWxhYmxlV2lkdGggPSBvdmVyZmxvd0F2YWlsYWJsZVdpZHRoO1xuICAgICAgaWYgKChfc3RhdGUkbWlkZGxld2FyZURhdGEgPSBzdGF0ZS5taWRkbGV3YXJlRGF0YS5zaGlmdCkgIT0gbnVsbCAmJiBfc3RhdGUkbWlkZGxld2FyZURhdGEuZW5hYmxlZC54KSB7XG4gICAgICAgIGF2YWlsYWJsZVdpZHRoID0gbWF4aW11bUNsaXBwaW5nV2lkdGg7XG4gICAgICB9XG4gICAgICBpZiAoKF9zdGF0ZSRtaWRkbGV3YXJlRGF0YTIgPSBzdGF0ZS5taWRkbGV3YXJlRGF0YS5zaGlmdCkgIT0gbnVsbCAmJiBfc3RhdGUkbWlkZGxld2FyZURhdGEyLmVuYWJsZWQueSkge1xuICAgICAgICBhdmFpbGFibGVIZWlnaHQgPSBtYXhpbXVtQ2xpcHBpbmdIZWlnaHQ7XG4gICAgICB9XG4gICAgICBpZiAobm9TaGlmdCAmJiAhYWxpZ25tZW50KSB7XG4gICAgICAgIGNvbnN0IHhNaW4gPSBtYXgob3ZlcmZsb3cubGVmdCwgMCk7XG4gICAgICAgIGNvbnN0IHhNYXggPSBtYXgob3ZlcmZsb3cucmlnaHQsIDApO1xuICAgICAgICBjb25zdCB5TWluID0gbWF4KG92ZXJmbG93LnRvcCwgMCk7XG4gICAgICAgIGNvbnN0IHlNYXggPSBtYXgob3ZlcmZsb3cuYm90dG9tLCAwKTtcbiAgICAgICAgaWYgKGlzWUF4aXMpIHtcbiAgICAgICAgICBhdmFpbGFibGVXaWR0aCA9IHdpZHRoIC0gMiAqICh4TWluICE9PSAwIHx8IHhNYXggIT09IDAgPyB4TWluICsgeE1heCA6IG1heChvdmVyZmxvdy5sZWZ0LCBvdmVyZmxvdy5yaWdodCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF2YWlsYWJsZUhlaWdodCA9IGhlaWdodCAtIDIgKiAoeU1pbiAhPT0gMCB8fCB5TWF4ICE9PSAwID8geU1pbiArIHlNYXggOiBtYXgob3ZlcmZsb3cudG9wLCBvdmVyZmxvdy5ib3R0b20pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXdhaXQgYXBwbHkoe1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgYXZhaWxhYmxlV2lkdGgsXG4gICAgICAgIGF2YWlsYWJsZUhlaWdodFxuICAgICAgfSk7XG4gICAgICBjb25zdCBuZXh0RGltZW5zaW9ucyA9IGF3YWl0IHBsYXRmb3JtLmdldERpbWVuc2lvbnMoZWxlbWVudHMuZmxvYXRpbmcpO1xuICAgICAgaWYgKHdpZHRoICE9PSBuZXh0RGltZW5zaW9ucy53aWR0aCB8fCBoZWlnaHQgIT09IG5leHREaW1lbnNpb25zLmhlaWdodCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICByZWN0czogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnQgeyBhcnJvdywgYXV0b1BsYWNlbWVudCwgY29tcHV0ZVBvc2l0aW9uLCBkZXRlY3RPdmVyZmxvdywgZmxpcCwgaGlkZSwgaW5saW5lLCBsaW1pdFNoaWZ0LCBvZmZzZXQsIHNoaWZ0LCBzaXplIH07XG4iLCJmdW5jdGlvbiBoYXNXaW5kb3coKSB7XG4gIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcbn1cbmZ1bmN0aW9uIGdldE5vZGVOYW1lKG5vZGUpIHtcbiAgaWYgKGlzTm9kZShub2RlKSkge1xuICAgIHJldHVybiAobm9kZS5ub2RlTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgfVxuICAvLyBNb2NrZWQgbm9kZXMgaW4gdGVzdGluZyBlbnZpcm9ubWVudHMgbWF5IG5vdCBiZSBpbnN0YW5jZXMgb2YgTm9kZS4gQnlcbiAgLy8gcmV0dXJuaW5nIGAjZG9jdW1lbnRgIGFuIGluZmluaXRlIGxvb3Agd29uJ3Qgb2NjdXIuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mbG9hdGluZy11aS9mbG9hdGluZy11aS9pc3N1ZXMvMjMxN1xuICByZXR1cm4gJyNkb2N1bWVudCc7XG59XG5mdW5jdGlvbiBnZXRXaW5kb3cobm9kZSkge1xuICB2YXIgX25vZGUkb3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIChub2RlID09IG51bGwgfHwgKF9ub2RlJG93bmVyRG9jdW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbm9kZSRvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSB8fCB3aW5kb3c7XG59XG5mdW5jdGlvbiBnZXREb2N1bWVudEVsZW1lbnQobm9kZSkge1xuICB2YXIgX3JlZjtcbiAgcmV0dXJuIChfcmVmID0gKGlzTm9kZShub2RlKSA/IG5vZGUub3duZXJEb2N1bWVudCA6IG5vZGUuZG9jdW1lbnQpIHx8IHdpbmRvdy5kb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9yZWYuZG9jdW1lbnRFbGVtZW50O1xufVxuZnVuY3Rpb24gaXNOb2RlKHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgTm9kZSB8fCB2YWx1ZSBpbnN0YW5jZW9mIGdldFdpbmRvdyh2YWx1ZSkuTm9kZTtcbn1cbmZ1bmN0aW9uIGlzRWxlbWVudCh2YWx1ZSkge1xuICBpZiAoIWhhc1dpbmRvdygpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEVsZW1lbnQgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLkVsZW1lbnQ7XG59XG5mdW5jdGlvbiBpc0hUTUxFbGVtZW50KHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLkhUTUxFbGVtZW50O1xufVxuZnVuY3Rpb24gaXNTaGFkb3dSb290KHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkgfHwgdHlwZW9mIFNoYWRvd1Jvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLlNoYWRvd1Jvb3Q7XG59XG5mdW5jdGlvbiBpc092ZXJmbG93RWxlbWVudChlbGVtZW50KSB7XG4gIGNvbnN0IHtcbiAgICBvdmVyZmxvdyxcbiAgICBvdmVyZmxvd1gsXG4gICAgb3ZlcmZsb3dZLFxuICAgIGRpc3BsYXlcbiAgfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIHJldHVybiAvYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW58Y2xpcC8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCkgJiYgIVsnaW5saW5lJywgJ2NvbnRlbnRzJ10uaW5jbHVkZXMoZGlzcGxheSk7XG59XG5mdW5jdGlvbiBpc1RhYmxlRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBbJ3RhYmxlJywgJ3RkJywgJ3RoJ10uaW5jbHVkZXMoZ2V0Tm9kZU5hbWUoZWxlbWVudCkpO1xufVxuZnVuY3Rpb24gaXNUb3BMYXllcihlbGVtZW50KSB7XG4gIHJldHVybiBbJzpwb3BvdmVyLW9wZW4nLCAnOm1vZGFsJ10uc29tZShzZWxlY3RvciA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBlbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xufVxuZnVuY3Rpb24gaXNDb250YWluaW5nQmxvY2soZWxlbWVudE9yQ3NzKSB7XG4gIGNvbnN0IHdlYmtpdCA9IGlzV2ViS2l0KCk7XG4gIGNvbnN0IGNzcyA9IGlzRWxlbWVudChlbGVtZW50T3JDc3MpID8gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50T3JDc3MpIDogZWxlbWVudE9yQ3NzO1xuXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Db250YWluaW5nX2Jsb2NrI2lkZW50aWZ5aW5nX3RoZV9jb250YWluaW5nX2Jsb2NrXG4gIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdHJhbnNmb3Jtcy0yLyNpbmRpdmlkdWFsLXRyYW5zZm9ybXNcbiAgcmV0dXJuIFsndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZScsICdzY2FsZScsICdyb3RhdGUnLCAncGVyc3BlY3RpdmUnXS5zb21lKHZhbHVlID0+IGNzc1t2YWx1ZV0gPyBjc3NbdmFsdWVdICE9PSAnbm9uZScgOiBmYWxzZSkgfHwgKGNzcy5jb250YWluZXJUeXBlID8gY3NzLmNvbnRhaW5lclR5cGUgIT09ICdub3JtYWwnIDogZmFsc2UpIHx8ICF3ZWJraXQgJiYgKGNzcy5iYWNrZHJvcEZpbHRlciA/IGNzcy5iYWNrZHJvcEZpbHRlciAhPT0gJ25vbmUnIDogZmFsc2UpIHx8ICF3ZWJraXQgJiYgKGNzcy5maWx0ZXIgPyBjc3MuZmlsdGVyICE9PSAnbm9uZScgOiBmYWxzZSkgfHwgWyd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlJywgJ3NjYWxlJywgJ3JvdGF0ZScsICdwZXJzcGVjdGl2ZScsICdmaWx0ZXInXS5zb21lKHZhbHVlID0+IChjc3Mud2lsbENoYW5nZSB8fCAnJykuaW5jbHVkZXModmFsdWUpKSB8fCBbJ3BhaW50JywgJ2xheW91dCcsICdzdHJpY3QnLCAnY29udGVudCddLnNvbWUodmFsdWUgPT4gKGNzcy5jb250YWluIHx8ICcnKS5pbmNsdWRlcyh2YWx1ZSkpO1xufVxuZnVuY3Rpb24gZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHtcbiAgbGV0IGN1cnJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTtcbiAgd2hpbGUgKGlzSFRNTEVsZW1lbnQoY3VycmVudE5vZGUpICYmICFpc0xhc3RUcmF2ZXJzYWJsZU5vZGUoY3VycmVudE5vZGUpKSB7XG4gICAgaWYgKGlzQ29udGFpbmluZ0Jsb2NrKGN1cnJlbnROb2RlKSkge1xuICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgIH0gZWxzZSBpZiAoaXNUb3BMYXllcihjdXJyZW50Tm9kZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoY3VycmVudE5vZGUpO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gaXNXZWJLaXQoKSB7XG4gIGlmICh0eXBlb2YgQ1NTID09PSAndW5kZWZpbmVkJyB8fCAhQ1NTLnN1cHBvcnRzKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBDU1Muc3VwcG9ydHMoJy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyJywgJ25vbmUnKTtcbn1cbmZ1bmN0aW9uIGlzTGFzdFRyYXZlcnNhYmxlTm9kZShub2RlKSB7XG4gIHJldHVybiBbJ2h0bWwnLCAnYm9keScsICcjZG9jdW1lbnQnXS5pbmNsdWRlcyhnZXROb2RlTmFtZShub2RlKSk7XG59XG5mdW5jdGlvbiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldFdpbmRvdyhlbGVtZW50KS5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xufVxuZnVuY3Rpb24gZ2V0Tm9kZVNjcm9sbChlbGVtZW50KSB7XG4gIGlmIChpc0VsZW1lbnQoZWxlbWVudCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2Nyb2xsTGVmdDogZWxlbWVudC5zY3JvbGxMZWZ0LFxuICAgICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFRvcFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBlbGVtZW50LnNjcm9sbFgsXG4gICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFlcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFBhcmVudE5vZGUobm9kZSkge1xuICBpZiAoZ2V0Tm9kZU5hbWUobm9kZSkgPT09ICdodG1sJykge1xuICAgIHJldHVybiBub2RlO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9XG4gIC8vIFN0ZXAgaW50byB0aGUgc2hhZG93IERPTSBvZiB0aGUgcGFyZW50IG9mIGEgc2xvdHRlZCBub2RlLlxuICBub2RlLmFzc2lnbmVkU2xvdCB8fFxuICAvLyBET00gRWxlbWVudCBkZXRlY3RlZC5cbiAgbm9kZS5wYXJlbnROb2RlIHx8XG4gIC8vIFNoYWRvd1Jvb3QgZGV0ZWN0ZWQuXG4gIGlzU2hhZG93Um9vdChub2RlKSAmJiBub2RlLmhvc3QgfHxcbiAgLy8gRmFsbGJhY2suXG4gIGdldERvY3VtZW50RWxlbWVudChub2RlKTtcbiAgcmV0dXJuIGlzU2hhZG93Um9vdChyZXN1bHQpID8gcmVzdWx0Lmhvc3QgOiByZXN1bHQ7XG59XG5mdW5jdGlvbiBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3Rvcihub2RlKSB7XG4gIGNvbnN0IHBhcmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKG5vZGUpO1xuICBpZiAoaXNMYXN0VHJhdmVyc2FibGVOb2RlKHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGUub3duZXJEb2N1bWVudCA/IG5vZGUub3duZXJEb2N1bWVudC5ib2R5IDogbm9kZS5ib2R5O1xuICB9XG4gIGlmIChpc0hUTUxFbGVtZW50KHBhcmVudE5vZGUpICYmIGlzT3ZlcmZsb3dFbGVtZW50KHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIHBhcmVudE5vZGU7XG4gIH1cbiAgcmV0dXJuIGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKHBhcmVudE5vZGUpO1xufVxuZnVuY3Rpb24gZ2V0T3ZlcmZsb3dBbmNlc3RvcnMobm9kZSwgbGlzdCwgdHJhdmVyc2VJZnJhbWVzKSB7XG4gIHZhciBfbm9kZSRvd25lckRvY3VtZW50MjtcbiAgaWYgKGxpc3QgPT09IHZvaWQgMCkge1xuICAgIGxpc3QgPSBbXTtcbiAgfVxuICBpZiAodHJhdmVyc2VJZnJhbWVzID09PSB2b2lkIDApIHtcbiAgICB0cmF2ZXJzZUlmcmFtZXMgPSB0cnVlO1xuICB9XG4gIGNvbnN0IHNjcm9sbGFibGVBbmNlc3RvciA9IGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKG5vZGUpO1xuICBjb25zdCBpc0JvZHkgPSBzY3JvbGxhYmxlQW5jZXN0b3IgPT09ICgoX25vZGUkb3duZXJEb2N1bWVudDIgPSBub2RlLm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbm9kZSRvd25lckRvY3VtZW50Mi5ib2R5KTtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KHNjcm9sbGFibGVBbmNlc3Rvcik7XG4gIGlmIChpc0JvZHkpIHtcbiAgICBjb25zdCBmcmFtZUVsZW1lbnQgPSBnZXRGcmFtZUVsZW1lbnQod2luKTtcbiAgICByZXR1cm4gbGlzdC5jb25jYXQod2luLCB3aW4udmlzdWFsVmlld3BvcnQgfHwgW10sIGlzT3ZlcmZsb3dFbGVtZW50KHNjcm9sbGFibGVBbmNlc3RvcikgPyBzY3JvbGxhYmxlQW5jZXN0b3IgOiBbXSwgZnJhbWVFbGVtZW50ICYmIHRyYXZlcnNlSWZyYW1lcyA/IGdldE92ZXJmbG93QW5jZXN0b3JzKGZyYW1lRWxlbWVudCkgOiBbXSk7XG4gIH1cbiAgcmV0dXJuIGxpc3QuY29uY2F0KHNjcm9sbGFibGVBbmNlc3RvciwgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMoc2Nyb2xsYWJsZUFuY2VzdG9yLCBbXSwgdHJhdmVyc2VJZnJhbWVzKSk7XG59XG5mdW5jdGlvbiBnZXRGcmFtZUVsZW1lbnQod2luKSB7XG4gIHJldHVybiB3aW4ucGFyZW50ICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZih3aW4ucGFyZW50KSA/IHdpbi5mcmFtZUVsZW1lbnQgOiBudWxsO1xufVxuXG5leHBvcnQgeyBnZXRDb21wdXRlZFN0eWxlLCBnZXRDb250YWluaW5nQmxvY2ssIGdldERvY3VtZW50RWxlbWVudCwgZ2V0RnJhbWVFbGVtZW50LCBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3RvciwgZ2V0Tm9kZU5hbWUsIGdldE5vZGVTY3JvbGwsIGdldE92ZXJmbG93QW5jZXN0b3JzLCBnZXRQYXJlbnROb2RlLCBnZXRXaW5kb3csIGlzQ29udGFpbmluZ0Jsb2NrLCBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQsIGlzTGFzdFRyYXZlcnNhYmxlTm9kZSwgaXNOb2RlLCBpc092ZXJmbG93RWxlbWVudCwgaXNTaGFkb3dSb290LCBpc1RhYmxlRWxlbWVudCwgaXNUb3BMYXllciwgaXNXZWJLaXQgfTtcbiIsImltcG9ydCB7IHJlY3RUb0NsaWVudFJlY3QsIGRldGVjdE92ZXJmbG93IGFzIGRldGVjdE92ZXJmbG93JDEsIG9mZnNldCBhcyBvZmZzZXQkMSwgYXV0b1BsYWNlbWVudCBhcyBhdXRvUGxhY2VtZW50JDEsIHNoaWZ0IGFzIHNoaWZ0JDEsIGZsaXAgYXMgZmxpcCQxLCBzaXplIGFzIHNpemUkMSwgaGlkZSBhcyBoaWRlJDEsIGFycm93IGFzIGFycm93JDEsIGlubGluZSBhcyBpbmxpbmUkMSwgbGltaXRTaGlmdCBhcyBsaW1pdFNoaWZ0JDEsIGNvbXB1dGVQb3NpdGlvbiBhcyBjb21wdXRlUG9zaXRpb24kMSB9IGZyb20gJ0BmbG9hdGluZy11aS9jb3JlJztcbmltcG9ydCB7IHJvdW5kLCBjcmVhdGVDb29yZHMsIG1heCwgbWluLCBmbG9vciB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscyc7XG5pbXBvcnQgeyBnZXRDb21wdXRlZFN0eWxlLCBpc0hUTUxFbGVtZW50LCBpc0VsZW1lbnQsIGdldFdpbmRvdywgaXNXZWJLaXQsIGdldEZyYW1lRWxlbWVudCwgZ2V0Tm9kZVNjcm9sbCwgZ2V0RG9jdW1lbnRFbGVtZW50LCBpc1RvcExheWVyLCBnZXROb2RlTmFtZSwgaXNPdmVyZmxvd0VsZW1lbnQsIGdldE92ZXJmbG93QW5jZXN0b3JzLCBnZXRQYXJlbnROb2RlLCBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUsIGlzQ29udGFpbmluZ0Jsb2NrLCBpc1RhYmxlRWxlbWVudCwgZ2V0Q29udGFpbmluZ0Jsb2NrIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzL2RvbSc7XG5leHBvcnQgeyBnZXRPdmVyZmxvd0FuY2VzdG9ycyB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscy9kb20nO1xuXG5mdW5jdGlvbiBnZXRDc3NEaW1lbnNpb25zKGVsZW1lbnQpIHtcbiAgY29uc3QgY3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgLy8gSW4gdGVzdGluZyBlbnZpcm9ubWVudHMsIHRoZSBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBwcm9wZXJ0aWVzIGFyZSBlbXB0eVxuICAvLyBzdHJpbmdzIGZvciBTVkcgZWxlbWVudHMsIHJldHVybmluZyBOYU4uIEZhbGxiYWNrIHRvIGAwYCBpbiB0aGlzIGNhc2UuXG4gIGxldCB3aWR0aCA9IHBhcnNlRmxvYXQoY3NzLndpZHRoKSB8fCAwO1xuICBsZXQgaGVpZ2h0ID0gcGFyc2VGbG9hdChjc3MuaGVpZ2h0KSB8fCAwO1xuICBjb25zdCBoYXNPZmZzZXQgPSBpc0hUTUxFbGVtZW50KGVsZW1lbnQpO1xuICBjb25zdCBvZmZzZXRXaWR0aCA9IGhhc09mZnNldCA/IGVsZW1lbnQub2Zmc2V0V2lkdGggOiB3aWR0aDtcbiAgY29uc3Qgb2Zmc2V0SGVpZ2h0ID0gaGFzT2Zmc2V0ID8gZWxlbWVudC5vZmZzZXRIZWlnaHQgOiBoZWlnaHQ7XG4gIGNvbnN0IHNob3VsZEZhbGxiYWNrID0gcm91bmQod2lkdGgpICE9PSBvZmZzZXRXaWR0aCB8fCByb3VuZChoZWlnaHQpICE9PSBvZmZzZXRIZWlnaHQ7XG4gIGlmIChzaG91bGRGYWxsYmFjaykge1xuICAgIHdpZHRoID0gb2Zmc2V0V2lkdGg7XG4gICAgaGVpZ2h0ID0gb2Zmc2V0SGVpZ2h0O1xuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgICQ6IHNob3VsZEZhbGxiYWNrXG4gIH07XG59XG5cbmZ1bmN0aW9uIHVud3JhcEVsZW1lbnQoZWxlbWVudCkge1xuICByZXR1cm4gIWlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgOiBlbGVtZW50O1xufVxuXG5mdW5jdGlvbiBnZXRTY2FsZShlbGVtZW50KSB7XG4gIGNvbnN0IGRvbUVsZW1lbnQgPSB1bndyYXBFbGVtZW50KGVsZW1lbnQpO1xuICBpZiAoIWlzSFRNTEVsZW1lbnQoZG9tRWxlbWVudCkpIHtcbiAgICByZXR1cm4gY3JlYXRlQ29vcmRzKDEpO1xuICB9XG4gIGNvbnN0IHJlY3QgPSBkb21FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgICRcbiAgfSA9IGdldENzc0RpbWVuc2lvbnMoZG9tRWxlbWVudCk7XG4gIGxldCB4ID0gKCQgPyByb3VuZChyZWN0LndpZHRoKSA6IHJlY3Qud2lkdGgpIC8gd2lkdGg7XG4gIGxldCB5ID0gKCQgPyByb3VuZChyZWN0LmhlaWdodCkgOiByZWN0LmhlaWdodCkgLyBoZWlnaHQ7XG5cbiAgLy8gMCwgTmFOLCBvciBJbmZpbml0eSBzaG91bGQgYWx3YXlzIGZhbGxiYWNrIHRvIDEuXG5cbiAgaWYgKCF4IHx8ICFOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICB4ID0gMTtcbiAgfVxuICBpZiAoIXkgfHwgIU51bWJlci5pc0Zpbml0ZSh5KSkge1xuICAgIHkgPSAxO1xuICB9XG4gIHJldHVybiB7XG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmNvbnN0IG5vT2Zmc2V0cyA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb29yZHMoMCk7XG5mdW5jdGlvbiBnZXRWaXN1YWxPZmZzZXRzKGVsZW1lbnQpIHtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICBpZiAoIWlzV2ViS2l0KCkgfHwgIXdpbi52aXN1YWxWaWV3cG9ydCkge1xuICAgIHJldHVybiBub09mZnNldHM7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4OiB3aW4udmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdCxcbiAgICB5OiB3aW4udmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wXG4gIH07XG59XG5mdW5jdGlvbiBzaG91bGRBZGRWaXN1YWxPZmZzZXRzKGVsZW1lbnQsIGlzRml4ZWQsIGZsb2F0aW5nT2Zmc2V0UGFyZW50KSB7XG4gIGlmIChpc0ZpeGVkID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkID0gZmFsc2U7XG4gIH1cbiAgaWYgKCFmbG9hdGluZ09mZnNldFBhcmVudCB8fCBpc0ZpeGVkICYmIGZsb2F0aW5nT2Zmc2V0UGFyZW50ICE9PSBnZXRXaW5kb3coZWxlbWVudCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGlzRml4ZWQ7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBpbmNsdWRlU2NhbGUsIGlzRml4ZWRTdHJhdGVneSwgb2Zmc2V0UGFyZW50KSB7XG4gIGlmIChpbmNsdWRlU2NhbGUgPT09IHZvaWQgMCkge1xuICAgIGluY2x1ZGVTY2FsZSA9IGZhbHNlO1xuICB9XG4gIGlmIChpc0ZpeGVkU3RyYXRlZ3kgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWRTdHJhdGVneSA9IGZhbHNlO1xuICB9XG4gIGNvbnN0IGNsaWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCBkb21FbGVtZW50ID0gdW53cmFwRWxlbWVudChlbGVtZW50KTtcbiAgbGV0IHNjYWxlID0gY3JlYXRlQ29vcmRzKDEpO1xuICBpZiAoaW5jbHVkZVNjYWxlKSB7XG4gICAgaWYgKG9mZnNldFBhcmVudCkge1xuICAgICAgaWYgKGlzRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICAgIHNjYWxlID0gZ2V0U2NhbGUob2Zmc2V0UGFyZW50KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2NhbGUgPSBnZXRTY2FsZShlbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgY29uc3QgdmlzdWFsT2Zmc2V0cyA9IHNob3VsZEFkZFZpc3VhbE9mZnNldHMoZG9tRWxlbWVudCwgaXNGaXhlZFN0cmF0ZWd5LCBvZmZzZXRQYXJlbnQpID8gZ2V0VmlzdWFsT2Zmc2V0cyhkb21FbGVtZW50KSA6IGNyZWF0ZUNvb3JkcygwKTtcbiAgbGV0IHggPSAoY2xpZW50UmVjdC5sZWZ0ICsgdmlzdWFsT2Zmc2V0cy54KSAvIHNjYWxlLng7XG4gIGxldCB5ID0gKGNsaWVudFJlY3QudG9wICsgdmlzdWFsT2Zmc2V0cy55KSAvIHNjYWxlLnk7XG4gIGxldCB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGggLyBzY2FsZS54O1xuICBsZXQgaGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQgLyBzY2FsZS55O1xuICBpZiAoZG9tRWxlbWVudCkge1xuICAgIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhkb21FbGVtZW50KTtcbiAgICBjb25zdCBvZmZzZXRXaW4gPSBvZmZzZXRQYXJlbnQgJiYgaXNFbGVtZW50KG9mZnNldFBhcmVudCkgPyBnZXRXaW5kb3cob2Zmc2V0UGFyZW50KSA6IG9mZnNldFBhcmVudDtcbiAgICBsZXQgY3VycmVudFdpbiA9IHdpbjtcbiAgICBsZXQgY3VycmVudElGcmFtZSA9IGdldEZyYW1lRWxlbWVudChjdXJyZW50V2luKTtcbiAgICB3aGlsZSAoY3VycmVudElGcmFtZSAmJiBvZmZzZXRQYXJlbnQgJiYgb2Zmc2V0V2luICE9PSBjdXJyZW50V2luKSB7XG4gICAgICBjb25zdCBpZnJhbWVTY2FsZSA9IGdldFNjYWxlKGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY29uc3QgaWZyYW1lUmVjdCA9IGN1cnJlbnRJRnJhbWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY29uc3QgbGVmdCA9IGlmcmFtZVJlY3QubGVmdCArIChjdXJyZW50SUZyYW1lLmNsaWVudExlZnQgKyBwYXJzZUZsb2F0KGNzcy5wYWRkaW5nTGVmdCkpICogaWZyYW1lU2NhbGUueDtcbiAgICAgIGNvbnN0IHRvcCA9IGlmcmFtZVJlY3QudG9wICsgKGN1cnJlbnRJRnJhbWUuY2xpZW50VG9wICsgcGFyc2VGbG9hdChjc3MucGFkZGluZ1RvcCkpICogaWZyYW1lU2NhbGUueTtcbiAgICAgIHggKj0gaWZyYW1lU2NhbGUueDtcbiAgICAgIHkgKj0gaWZyYW1lU2NhbGUueTtcbiAgICAgIHdpZHRoICo9IGlmcmFtZVNjYWxlLng7XG4gICAgICBoZWlnaHQgKj0gaWZyYW1lU2NhbGUueTtcbiAgICAgIHggKz0gbGVmdDtcbiAgICAgIHkgKz0gdG9wO1xuICAgICAgY3VycmVudFdpbiA9IGdldFdpbmRvdyhjdXJyZW50SUZyYW1lKTtcbiAgICAgIGN1cnJlbnRJRnJhbWUgPSBnZXRGcmFtZUVsZW1lbnQoY3VycmVudFdpbik7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0VG9DbGllbnRSZWN0KHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH0pO1xufVxuXG4vLyBJZiA8aHRtbD4gaGFzIGEgQ1NTIHdpZHRoIGdyZWF0ZXIgdGhhbiB0aGUgdmlld3BvcnQsIHRoZW4gdGhpcyB3aWxsIGJlXG4vLyBpbmNvcnJlY3QgZm9yIFJUTC5cbmZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCwgcmVjdCkge1xuICBjb25zdCBsZWZ0U2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChlbGVtZW50KS5zY3JvbGxMZWZ0O1xuICBpZiAoIXJlY3QpIHtcbiAgICByZXR1cm4gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSkubGVmdCArIGxlZnRTY3JvbGw7XG4gIH1cbiAgcmV0dXJuIHJlY3QubGVmdCArIGxlZnRTY3JvbGw7XG59XG5cbmZ1bmN0aW9uIGdldEhUTUxPZmZzZXQoZG9jdW1lbnRFbGVtZW50LCBzY3JvbGwsIGlnbm9yZVNjcm9sbGJhclgpIHtcbiAgaWYgKGlnbm9yZVNjcm9sbGJhclggPT09IHZvaWQgMCkge1xuICAgIGlnbm9yZVNjcm9sbGJhclggPSBmYWxzZTtcbiAgfVxuICBjb25zdCBodG1sUmVjdCA9IGRvY3VtZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgeCA9IGh0bWxSZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIChpZ25vcmVTY3JvbGxiYXJYID8gMCA6XG4gIC8vIFJUTCA8Ym9keT4gc2Nyb2xsYmFyLlxuICBnZXRXaW5kb3dTY3JvbGxCYXJYKGRvY3VtZW50RWxlbWVudCwgaHRtbFJlY3QpKTtcbiAgY29uc3QgeSA9IGh0bWxSZWN0LnRvcCArIHNjcm9sbC5zY3JvbGxUb3A7XG4gIHJldHVybiB7XG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0KF9yZWYpIHtcbiAgbGV0IHtcbiAgICBlbGVtZW50cyxcbiAgICByZWN0LFxuICAgIG9mZnNldFBhcmVudCxcbiAgICBzdHJhdGVneVxuICB9ID0gX3JlZjtcbiAgY29uc3QgaXNGaXhlZCA9IHN0cmF0ZWd5ID09PSAnZml4ZWQnO1xuICBjb25zdCBkb2N1bWVudEVsZW1lbnQgPSBnZXREb2N1bWVudEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgY29uc3QgdG9wTGF5ZXIgPSBlbGVtZW50cyA/IGlzVG9wTGF5ZXIoZWxlbWVudHMuZmxvYXRpbmcpIDogZmFsc2U7XG4gIGlmIChvZmZzZXRQYXJlbnQgPT09IGRvY3VtZW50RWxlbWVudCB8fCB0b3BMYXllciAmJiBpc0ZpeGVkKSB7XG4gICAgcmV0dXJuIHJlY3Q7XG4gIH1cbiAgbGV0IHNjcm9sbCA9IHtcbiAgICBzY3JvbGxMZWZ0OiAwLFxuICAgIHNjcm9sbFRvcDogMFxuICB9O1xuICBsZXQgc2NhbGUgPSBjcmVhdGVDb29yZHMoMSk7XG4gIGNvbnN0IG9mZnNldHMgPSBjcmVhdGVDb29yZHMoMCk7XG4gIGNvbnN0IGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBpZiAoaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgfHwgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkKSB7XG4gICAgaWYgKGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgIT09ICdib2R5JyB8fCBpc092ZXJmbG93RWxlbWVudChkb2N1bWVudEVsZW1lbnQpKSB7XG4gICAgICBzY3JvbGwgPSBnZXROb2RlU2Nyb2xsKG9mZnNldFBhcmVudCk7XG4gICAgfVxuICAgIGlmIChpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCkpIHtcbiAgICAgIGNvbnN0IG9mZnNldFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qob2Zmc2V0UGFyZW50KTtcbiAgICAgIHNjYWxlID0gZ2V0U2NhbGUob2Zmc2V0UGFyZW50KTtcbiAgICAgIG9mZnNldHMueCA9IG9mZnNldFJlY3QueCArIG9mZnNldFBhcmVudC5jbGllbnRMZWZ0O1xuICAgICAgb2Zmc2V0cy55ID0gb2Zmc2V0UmVjdC55ICsgb2Zmc2V0UGFyZW50LmNsaWVudFRvcDtcbiAgICB9XG4gIH1cbiAgY29uc3QgaHRtbE9mZnNldCA9IGRvY3VtZW50RWxlbWVudCAmJiAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQgPyBnZXRIVE1MT2Zmc2V0KGRvY3VtZW50RWxlbWVudCwgc2Nyb2xsLCB0cnVlKSA6IGNyZWF0ZUNvb3JkcygwKTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogcmVjdC53aWR0aCAqIHNjYWxlLngsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodCAqIHNjYWxlLnksXG4gICAgeDogcmVjdC54ICogc2NhbGUueCAtIHNjcm9sbC5zY3JvbGxMZWZ0ICogc2NhbGUueCArIG9mZnNldHMueCArIGh0bWxPZmZzZXQueCxcbiAgICB5OiByZWN0LnkgKiBzY2FsZS55IC0gc2Nyb2xsLnNjcm9sbFRvcCAqIHNjYWxlLnkgKyBvZmZzZXRzLnkgKyBodG1sT2Zmc2V0LnlcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdHMoZWxlbWVudCkge1xuICByZXR1cm4gQXJyYXkuZnJvbShlbGVtZW50LmdldENsaWVudFJlY3RzKCkpO1xufVxuXG4vLyBHZXRzIHRoZSBlbnRpcmUgc2l6ZSBvZiB0aGUgc2Nyb2xsYWJsZSBkb2N1bWVudCBhcmVhLCBldmVuIGV4dGVuZGluZyBvdXRzaWRlXG4vLyBvZiB0aGUgYDxodG1sPmAgYW5kIGA8Ym9keT5gIHJlY3QgYm91bmRzIGlmIGhvcml6b250YWxseSBzY3JvbGxhYmxlLlxuZnVuY3Rpb24gZ2V0RG9jdW1lbnRSZWN0KGVsZW1lbnQpIHtcbiAgY29uc3QgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgY29uc3Qgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChlbGVtZW50KTtcbiAgY29uc3QgYm9keSA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5ib2R5O1xuICBjb25zdCB3aWR0aCA9IG1heChodG1sLnNjcm9sbFdpZHRoLCBodG1sLmNsaWVudFdpZHRoLCBib2R5LnNjcm9sbFdpZHRoLCBib2R5LmNsaWVudFdpZHRoKTtcbiAgY29uc3QgaGVpZ2h0ID0gbWF4KGh0bWwuc2Nyb2xsSGVpZ2h0LCBodG1sLmNsaWVudEhlaWdodCwgYm9keS5zY3JvbGxIZWlnaHQsIGJvZHkuY2xpZW50SGVpZ2h0KTtcbiAgbGV0IHggPSAtc2Nyb2xsLnNjcm9sbExlZnQgKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpO1xuICBjb25zdCB5ID0gLXNjcm9sbC5zY3JvbGxUb3A7XG4gIGlmIChnZXRDb21wdXRlZFN0eWxlKGJvZHkpLmRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICB4ICs9IG1heChodG1sLmNsaWVudFdpZHRoLCBib2R5LmNsaWVudFdpZHRoKSAtIHdpZHRoO1xuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRWaWV3cG9ydFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpIHtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICBjb25zdCBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICBjb25zdCB2aXN1YWxWaWV3cG9ydCA9IHdpbi52aXN1YWxWaWV3cG9ydDtcbiAgbGV0IHdpZHRoID0gaHRtbC5jbGllbnRXaWR0aDtcbiAgbGV0IGhlaWdodCA9IGh0bWwuY2xpZW50SGVpZ2h0O1xuICBsZXQgeCA9IDA7XG4gIGxldCB5ID0gMDtcbiAgaWYgKHZpc3VhbFZpZXdwb3J0KSB7XG4gICAgd2lkdGggPSB2aXN1YWxWaWV3cG9ydC53aWR0aDtcbiAgICBoZWlnaHQgPSB2aXN1YWxWaWV3cG9ydC5oZWlnaHQ7XG4gICAgY29uc3QgdmlzdWFsVmlld3BvcnRCYXNlZCA9IGlzV2ViS2l0KCk7XG4gICAgaWYgKCF2aXN1YWxWaWV3cG9ydEJhc2VkIHx8IHZpc3VhbFZpZXdwb3J0QmFzZWQgJiYgc3RyYXRlZ3kgPT09ICdmaXhlZCcpIHtcbiAgICAgIHggPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0O1xuICAgICAgeSA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbi8vIFJldHVybnMgdGhlIGlubmVyIGNsaWVudCByZWN0LCBzdWJ0cmFjdGluZyBzY3JvbGxiYXJzIGlmIHByZXNlbnQuXG5mdW5jdGlvbiBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICBjb25zdCBjbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHRydWUsIHN0cmF0ZWd5ID09PSAnZml4ZWQnKTtcbiAgY29uc3QgdG9wID0gY2xpZW50UmVjdC50b3AgKyBlbGVtZW50LmNsaWVudFRvcDtcbiAgY29uc3QgbGVmdCA9IGNsaWVudFJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50TGVmdDtcbiAgY29uc3Qgc2NhbGUgPSBpc0hUTUxFbGVtZW50KGVsZW1lbnQpID8gZ2V0U2NhbGUoZWxlbWVudCkgOiBjcmVhdGVDb29yZHMoMSk7XG4gIGNvbnN0IHdpZHRoID0gZWxlbWVudC5jbGllbnRXaWR0aCAqIHNjYWxlLng7XG4gIGNvbnN0IGhlaWdodCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0ICogc2NhbGUueTtcbiAgY29uc3QgeCA9IGxlZnQgKiBzY2FsZS54O1xuICBjb25zdCB5ID0gdG9wICogc2NhbGUueTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0RnJvbUNsaXBwaW5nQW5jZXN0b3IoZWxlbWVudCwgY2xpcHBpbmdBbmNlc3Rvciwgc3RyYXRlZ3kpIHtcbiAgbGV0IHJlY3Q7XG4gIGlmIChjbGlwcGluZ0FuY2VzdG9yID09PSAndmlld3BvcnQnKSB7XG4gICAgcmVjdCA9IGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSk7XG4gIH0gZWxzZSBpZiAoY2xpcHBpbmdBbmNlc3RvciA9PT0gJ2RvY3VtZW50Jykge1xuICAgIHJlY3QgPSBnZXREb2N1bWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKTtcbiAgfSBlbHNlIGlmIChpc0VsZW1lbnQoY2xpcHBpbmdBbmNlc3RvcikpIHtcbiAgICByZWN0ID0gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoY2xpcHBpbmdBbmNlc3Rvciwgc3RyYXRlZ3kpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHZpc3VhbE9mZnNldHMgPSBnZXRWaXN1YWxPZmZzZXRzKGVsZW1lbnQpO1xuICAgIHJlY3QgPSB7XG4gICAgICB4OiBjbGlwcGluZ0FuY2VzdG9yLnggLSB2aXN1YWxPZmZzZXRzLngsXG4gICAgICB5OiBjbGlwcGluZ0FuY2VzdG9yLnkgLSB2aXN1YWxPZmZzZXRzLnksXG4gICAgICB3aWR0aDogY2xpcHBpbmdBbmNlc3Rvci53aWR0aCxcbiAgICAgIGhlaWdodDogY2xpcHBpbmdBbmNlc3Rvci5oZWlnaHRcbiAgICB9O1xuICB9XG4gIHJldHVybiByZWN0VG9DbGllbnRSZWN0KHJlY3QpO1xufVxuZnVuY3Rpb24gaGFzRml4ZWRQb3NpdGlvbkFuY2VzdG9yKGVsZW1lbnQsIHN0b3BOb2RlKSB7XG4gIGNvbnN0IHBhcmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuICBpZiAocGFyZW50Tm9kZSA9PT0gc3RvcE5vZGUgfHwgIWlzRWxlbWVudChwYXJlbnROb2RlKSB8fCBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUocGFyZW50Tm9kZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGdldENvbXB1dGVkU3R5bGUocGFyZW50Tm9kZSkucG9zaXRpb24gPT09ICdmaXhlZCcgfHwgaGFzRml4ZWRQb3NpdGlvbkFuY2VzdG9yKHBhcmVudE5vZGUsIHN0b3BOb2RlKTtcbn1cblxuLy8gQSBcImNsaXBwaW5nIGFuY2VzdG9yXCIgaXMgYW4gYG92ZXJmbG93YCBlbGVtZW50IHdpdGggdGhlIGNoYXJhY3RlcmlzdGljIG9mXG4vLyBjbGlwcGluZyAob3IgaGlkaW5nKSBjaGlsZCBlbGVtZW50cy4gVGhpcyByZXR1cm5zIGFsbCBjbGlwcGluZyBhbmNlc3RvcnNcbi8vIG9mIHRoZSBnaXZlbiBlbGVtZW50IHVwIHRoZSB0cmVlLlxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdFbGVtZW50QW5jZXN0b3JzKGVsZW1lbnQsIGNhY2hlKSB7XG4gIGNvbnN0IGNhY2hlZFJlc3VsdCA9IGNhY2hlLmdldChlbGVtZW50KTtcbiAgaWYgKGNhY2hlZFJlc3VsdCkge1xuICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gIH1cbiAgbGV0IHJlc3VsdCA9IGdldE92ZXJmbG93QW5jZXN0b3JzKGVsZW1lbnQsIFtdLCBmYWxzZSkuZmlsdGVyKGVsID0+IGlzRWxlbWVudChlbCkgJiYgZ2V0Tm9kZU5hbWUoZWwpICE9PSAnYm9keScpO1xuICBsZXQgY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUgPSBudWxsO1xuICBjb25zdCBlbGVtZW50SXNGaXhlZCA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCc7XG4gIGxldCBjdXJyZW50Tm9kZSA9IGVsZW1lbnRJc0ZpeGVkID8gZ2V0UGFyZW50Tm9kZShlbGVtZW50KSA6IGVsZW1lbnQ7XG5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcbiAgd2hpbGUgKGlzRWxlbWVudChjdXJyZW50Tm9kZSkgJiYgIWlzTGFzdFRyYXZlcnNhYmxlTm9kZShjdXJyZW50Tm9kZSkpIHtcbiAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShjdXJyZW50Tm9kZSk7XG4gICAgY29uc3QgY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgPSBpc0NvbnRhaW5pbmdCbG9jayhjdXJyZW50Tm9kZSk7XG4gICAgaWYgKCFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiBjb21wdXRlZFN0eWxlLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgICBjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSA9IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHNob3VsZERyb3BDdXJyZW50Tm9kZSA9IGVsZW1lbnRJc0ZpeGVkID8gIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmICFjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSA6ICFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiBjb21wdXRlZFN0eWxlLnBvc2l0aW9uID09PSAnc3RhdGljJyAmJiAhIWN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlICYmIFsnYWJzb2x1dGUnLCAnZml4ZWQnXS5pbmNsdWRlcyhjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZS5wb3NpdGlvbikgfHwgaXNPdmVyZmxvd0VsZW1lbnQoY3VycmVudE5vZGUpICYmICFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiBoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IoZWxlbWVudCwgY3VycmVudE5vZGUpO1xuICAgIGlmIChzaG91bGREcm9wQ3VycmVudE5vZGUpIHtcbiAgICAgIC8vIERyb3Agbm9uLWNvbnRhaW5pbmcgYmxvY2tzLlxuICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcihhbmNlc3RvciA9PiBhbmNlc3RvciAhPT0gY3VycmVudE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZWNvcmQgbGFzdCBjb250YWluaW5nIGJsb2NrIGZvciBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgIGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gY29tcHV0ZWRTdHlsZTtcbiAgICB9XG4gICAgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGN1cnJlbnROb2RlKTtcbiAgfVxuICBjYWNoZS5zZXQoZWxlbWVudCwgcmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gR2V0cyB0aGUgbWF4aW11bSBhcmVhIHRoYXQgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiBkdWUgdG8gYW55IG51bWJlciBvZlxuLy8gY2xpcHBpbmcgYW5jZXN0b3JzLlxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdSZWN0KF9yZWYpIHtcbiAgbGV0IHtcbiAgICBlbGVtZW50LFxuICAgIGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeSxcbiAgICBzdHJhdGVneVxuICB9ID0gX3JlZjtcbiAgY29uc3QgZWxlbWVudENsaXBwaW5nQW5jZXN0b3JzID0gYm91bmRhcnkgPT09ICdjbGlwcGluZ0FuY2VzdG9ycycgPyBpc1RvcExheWVyKGVsZW1lbnQpID8gW10gOiBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnMoZWxlbWVudCwgdGhpcy5fYykgOiBbXS5jb25jYXQoYm91bmRhcnkpO1xuICBjb25zdCBjbGlwcGluZ0FuY2VzdG9ycyA9IFsuLi5lbGVtZW50Q2xpcHBpbmdBbmNlc3RvcnMsIHJvb3RCb3VuZGFyeV07XG4gIGNvbnN0IGZpcnN0Q2xpcHBpbmdBbmNlc3RvciA9IGNsaXBwaW5nQW5jZXN0b3JzWzBdO1xuICBjb25zdCBjbGlwcGluZ1JlY3QgPSBjbGlwcGluZ0FuY2VzdG9ycy5yZWR1Y2UoKGFjY1JlY3QsIGNsaXBwaW5nQW5jZXN0b3IpID0+IHtcbiAgICBjb25zdCByZWN0ID0gZ2V0Q2xpZW50UmVjdEZyb21DbGlwcGluZ0FuY2VzdG9yKGVsZW1lbnQsIGNsaXBwaW5nQW5jZXN0b3IsIHN0cmF0ZWd5KTtcbiAgICBhY2NSZWN0LnRvcCA9IG1heChyZWN0LnRvcCwgYWNjUmVjdC50b3ApO1xuICAgIGFjY1JlY3QucmlnaHQgPSBtaW4ocmVjdC5yaWdodCwgYWNjUmVjdC5yaWdodCk7XG4gICAgYWNjUmVjdC5ib3R0b20gPSBtaW4ocmVjdC5ib3R0b20sIGFjY1JlY3QuYm90dG9tKTtcbiAgICBhY2NSZWN0LmxlZnQgPSBtYXgocmVjdC5sZWZ0LCBhY2NSZWN0LmxlZnQpO1xuICAgIHJldHVybiBhY2NSZWN0O1xuICB9LCBnZXRDbGllbnRSZWN0RnJvbUNsaXBwaW5nQW5jZXN0b3IoZWxlbWVudCwgZmlyc3RDbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSkpO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiBjbGlwcGluZ1JlY3QucmlnaHQgLSBjbGlwcGluZ1JlY3QubGVmdCxcbiAgICBoZWlnaHQ6IGNsaXBwaW5nUmVjdC5ib3R0b20gLSBjbGlwcGluZ1JlY3QudG9wLFxuICAgIHg6IGNsaXBwaW5nUmVjdC5sZWZ0LFxuICAgIHk6IGNsaXBwaW5nUmVjdC50b3BcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RGltZW5zaW9ucyhlbGVtZW50KSB7XG4gIGNvbnN0IHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHRcbiAgfSA9IGdldENzc0RpbWVuc2lvbnMoZWxlbWVudCk7XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFJlY3RSZWxhdGl2ZVRvT2Zmc2V0UGFyZW50KGVsZW1lbnQsIG9mZnNldFBhcmVudCwgc3RyYXRlZ3kpIHtcbiAgY29uc3QgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGNvbnN0IGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBjb25zdCBpc0ZpeGVkID0gc3RyYXRlZ3kgPT09ICdmaXhlZCc7XG4gIGNvbnN0IHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgdHJ1ZSwgaXNGaXhlZCwgb2Zmc2V0UGFyZW50KTtcbiAgbGV0IHNjcm9sbCA9IHtcbiAgICBzY3JvbGxMZWZ0OiAwLFxuICAgIHNjcm9sbFRvcDogMFxuICB9O1xuICBjb25zdCBvZmZzZXRzID0gY3JlYXRlQ29vcmRzKDApO1xuICBpZiAoaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgfHwgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkKSB7XG4gICAgaWYgKGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgIT09ICdib2R5JyB8fCBpc092ZXJmbG93RWxlbWVudChkb2N1bWVudEVsZW1lbnQpKSB7XG4gICAgICBzY3JvbGwgPSBnZXROb2RlU2Nyb2xsKG9mZnNldFBhcmVudCk7XG4gICAgfVxuICAgIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCkge1xuICAgICAgY29uc3Qgb2Zmc2V0UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChvZmZzZXRQYXJlbnQsIHRydWUsIGlzRml4ZWQsIG9mZnNldFBhcmVudCk7XG4gICAgICBvZmZzZXRzLnggPSBvZmZzZXRSZWN0LnggKyBvZmZzZXRQYXJlbnQuY2xpZW50TGVmdDtcbiAgICAgIG9mZnNldHMueSA9IG9mZnNldFJlY3QueSArIG9mZnNldFBhcmVudC5jbGllbnRUb3A7XG4gICAgfSBlbHNlIGlmIChkb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIC8vIElmIHRoZSA8Ym9keT4gc2Nyb2xsYmFyIGFwcGVhcnMgb24gdGhlIGxlZnQgKGUuZy4gUlRMIHN5c3RlbXMpLiBVc2VcbiAgICAgIC8vIEZpcmVmb3ggd2l0aCBsYXlvdXQuc2Nyb2xsYmFyLnNpZGUgPSAzIGluIGFib3V0OmNvbmZpZyB0byB0ZXN0IHRoaXMuXG4gICAgICBvZmZzZXRzLnggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGRvY3VtZW50RWxlbWVudCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGh0bWxPZmZzZXQgPSBkb2N1bWVudEVsZW1lbnQgJiYgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkID8gZ2V0SFRNTE9mZnNldChkb2N1bWVudEVsZW1lbnQsIHNjcm9sbCkgOiBjcmVhdGVDb29yZHMoMCk7XG4gIGNvbnN0IHggPSByZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIG9mZnNldHMueCAtIGh0bWxPZmZzZXQueDtcbiAgY29uc3QgeSA9IHJlY3QudG9wICsgc2Nyb2xsLnNjcm9sbFRvcCAtIG9mZnNldHMueSAtIGh0bWxPZmZzZXQueTtcbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHksXG4gICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc1N0YXRpY1Bvc2l0aW9uZWQoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYyc7XG59XG5cbmZ1bmN0aW9uIGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCwgcG9seWZpbGwpIHtcbiAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAocG9seWZpbGwpIHtcbiAgICByZXR1cm4gcG9seWZpbGwoZWxlbWVudCk7XG4gIH1cbiAgbGV0IHJhd09mZnNldFBhcmVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50O1xuXG4gIC8vIEZpcmVmb3ggcmV0dXJucyB0aGUgPGh0bWw+IGVsZW1lbnQgYXMgdGhlIG9mZnNldFBhcmVudCBpZiBpdCdzIG5vbi1zdGF0aWMsXG4gIC8vIHdoaWxlIENocm9tZSBhbmQgU2FmYXJpIHJldHVybiB0aGUgPGJvZHk+IGVsZW1lbnQuIFRoZSA8Ym9keT4gZWxlbWVudCBtdXN0XG4gIC8vIGJlIHVzZWQgdG8gcGVyZm9ybSB0aGUgY29ycmVjdCBjYWxjdWxhdGlvbnMgZXZlbiBpZiB0aGUgPGh0bWw+IGVsZW1lbnQgaXNcbiAgLy8gbm9uLXN0YXRpYy5cbiAgaWYgKGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSA9PT0gcmF3T2Zmc2V0UGFyZW50KSB7XG4gICAgcmF3T2Zmc2V0UGFyZW50ID0gcmF3T2Zmc2V0UGFyZW50Lm93bmVyRG9jdW1lbnQuYm9keTtcbiAgfVxuICByZXR1cm4gcmF3T2Zmc2V0UGFyZW50O1xufVxuXG4vLyBHZXRzIHRoZSBjbG9zZXN0IGFuY2VzdG9yIHBvc2l0aW9uZWQgZWxlbWVudC4gSGFuZGxlcyBzb21lIGVkZ2UgY2FzZXMsXG4vLyBzdWNoIGFzIHRhYmxlIGFuY2VzdG9ycyBhbmQgY3Jvc3MgYnJvd3NlciBidWdzLlxuZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQsIHBvbHlmaWxsKSB7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgaWYgKGlzVG9wTGF5ZXIoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gd2luO1xuICB9XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIGxldCBzdmdPZmZzZXRQYXJlbnQgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuICAgIHdoaWxlIChzdmdPZmZzZXRQYXJlbnQgJiYgIWlzTGFzdFRyYXZlcnNhYmxlTm9kZShzdmdPZmZzZXRQYXJlbnQpKSB7XG4gICAgICBpZiAoaXNFbGVtZW50KHN2Z09mZnNldFBhcmVudCkgJiYgIWlzU3RhdGljUG9zaXRpb25lZChzdmdPZmZzZXRQYXJlbnQpKSB7XG4gICAgICAgIHJldHVybiBzdmdPZmZzZXRQYXJlbnQ7XG4gICAgICB9XG4gICAgICBzdmdPZmZzZXRQYXJlbnQgPSBnZXRQYXJlbnROb2RlKHN2Z09mZnNldFBhcmVudCk7XG4gICAgfVxuICAgIHJldHVybiB3aW47XG4gIH1cbiAgbGV0IG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCwgcG9seWZpbGwpO1xuICB3aGlsZSAob2Zmc2V0UGFyZW50ICYmIGlzVGFibGVFbGVtZW50KG9mZnNldFBhcmVudCkgJiYgaXNTdGF0aWNQb3NpdGlvbmVkKG9mZnNldFBhcmVudCkpIHtcbiAgICBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KG9mZnNldFBhcmVudCwgcG9seWZpbGwpO1xuICB9XG4gIGlmIChvZmZzZXRQYXJlbnQgJiYgaXNMYXN0VHJhdmVyc2FibGVOb2RlKG9mZnNldFBhcmVudCkgJiYgaXNTdGF0aWNQb3NpdGlvbmVkKG9mZnNldFBhcmVudCkgJiYgIWlzQ29udGFpbmluZ0Jsb2NrKG9mZnNldFBhcmVudCkpIHtcbiAgICByZXR1cm4gd2luO1xuICB9XG4gIHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHx8IHdpbjtcbn1cblxuY29uc3QgZ2V0RWxlbWVudFJlY3RzID0gYXN5bmMgZnVuY3Rpb24gKGRhdGEpIHtcbiAgY29uc3QgZ2V0T2Zmc2V0UGFyZW50Rm4gPSB0aGlzLmdldE9mZnNldFBhcmVudCB8fCBnZXRPZmZzZXRQYXJlbnQ7XG4gIGNvbnN0IGdldERpbWVuc2lvbnNGbiA9IHRoaXMuZ2V0RGltZW5zaW9ucztcbiAgY29uc3QgZmxvYXRpbmdEaW1lbnNpb25zID0gYXdhaXQgZ2V0RGltZW5zaW9uc0ZuKGRhdGEuZmxvYXRpbmcpO1xuICByZXR1cm4ge1xuICAgIHJlZmVyZW5jZTogZ2V0UmVjdFJlbGF0aXZlVG9PZmZzZXRQYXJlbnQoZGF0YS5yZWZlcmVuY2UsIGF3YWl0IGdldE9mZnNldFBhcmVudEZuKGRhdGEuZmxvYXRpbmcpLCBkYXRhLnN0cmF0ZWd5KSxcbiAgICBmbG9hdGluZzoge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDAsXG4gICAgICB3aWR0aDogZmxvYXRpbmdEaW1lbnNpb25zLndpZHRoLFxuICAgICAgaGVpZ2h0OiBmbG9hdGluZ0RpbWVuc2lvbnMuaGVpZ2h0XG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gaXNSVEwoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5kaXJlY3Rpb24gPT09ICdydGwnO1xufVxuXG5jb25zdCBwbGF0Zm9ybSA9IHtcbiAgY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3QsXG4gIGdldERvY3VtZW50RWxlbWVudCxcbiAgZ2V0Q2xpcHBpbmdSZWN0LFxuICBnZXRPZmZzZXRQYXJlbnQsXG4gIGdldEVsZW1lbnRSZWN0cyxcbiAgZ2V0Q2xpZW50UmVjdHMsXG4gIGdldERpbWVuc2lvbnMsXG4gIGdldFNjYWxlLFxuICBpc0VsZW1lbnQsXG4gIGlzUlRMXG59O1xuXG5mdW5jdGlvbiByZWN0c0FyZUVxdWFsKGEsIGIpIHtcbiAgcmV0dXJuIGEueCA9PT0gYi54ICYmIGEueSA9PT0gYi55ICYmIGEud2lkdGggPT09IGIud2lkdGggJiYgYS5oZWlnaHQgPT09IGIuaGVpZ2h0O1xufVxuXG4vLyBodHRwczovL3NhbXRob3IuYXUvMjAyMS9vYnNlcnZpbmctZG9tL1xuZnVuY3Rpb24gb2JzZXJ2ZU1vdmUoZWxlbWVudCwgb25Nb3ZlKSB7XG4gIGxldCBpbyA9IG51bGw7XG4gIGxldCB0aW1lb3V0SWQ7XG4gIGNvbnN0IHJvb3QgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgdmFyIF9pbztcbiAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAoX2lvID0gaW8pID09IG51bGwgfHwgX2lvLmRpc2Nvbm5lY3QoKTtcbiAgICBpbyA9IG51bGw7XG4gIH1cbiAgZnVuY3Rpb24gcmVmcmVzaChza2lwLCB0aHJlc2hvbGQpIHtcbiAgICBpZiAoc2tpcCA9PT0gdm9pZCAwKSB7XG4gICAgICBza2lwID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aHJlc2hvbGQgPT09IHZvaWQgMCkge1xuICAgICAgdGhyZXNob2xkID0gMTtcbiAgICB9XG4gICAgY2xlYW51cCgpO1xuICAgIGNvbnN0IGVsZW1lbnRSZWN0Rm9yUm9vdE1hcmdpbiA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3Qge1xuICAgICAgbGVmdCxcbiAgICAgIHRvcCxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0XG4gICAgfSA9IGVsZW1lbnRSZWN0Rm9yUm9vdE1hcmdpbjtcbiAgICBpZiAoIXNraXApIHtcbiAgICAgIG9uTW92ZSgpO1xuICAgIH1cbiAgICBpZiAoIXdpZHRoIHx8ICFoZWlnaHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5zZXRUb3AgPSBmbG9vcih0b3ApO1xuICAgIGNvbnN0IGluc2V0UmlnaHQgPSBmbG9vcihyb290LmNsaWVudFdpZHRoIC0gKGxlZnQgKyB3aWR0aCkpO1xuICAgIGNvbnN0IGluc2V0Qm90dG9tID0gZmxvb3Iocm9vdC5jbGllbnRIZWlnaHQgLSAodG9wICsgaGVpZ2h0KSk7XG4gICAgY29uc3QgaW5zZXRMZWZ0ID0gZmxvb3IobGVmdCk7XG4gICAgY29uc3Qgcm9vdE1hcmdpbiA9IC1pbnNldFRvcCArIFwicHggXCIgKyAtaW5zZXRSaWdodCArIFwicHggXCIgKyAtaW5zZXRCb3R0b20gKyBcInB4IFwiICsgLWluc2V0TGVmdCArIFwicHhcIjtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgcm9vdE1hcmdpbixcbiAgICAgIHRocmVzaG9sZDogbWF4KDAsIG1pbigxLCB0aHJlc2hvbGQpKSB8fCAxXG4gICAgfTtcbiAgICBsZXQgaXNGaXJzdFVwZGF0ZSA9IHRydWU7XG4gICAgZnVuY3Rpb24gaGFuZGxlT2JzZXJ2ZShlbnRyaWVzKSB7XG4gICAgICBjb25zdCByYXRpbyA9IGVudHJpZXNbMF0uaW50ZXJzZWN0aW9uUmF0aW87XG4gICAgICBpZiAocmF0aW8gIT09IHRocmVzaG9sZCkge1xuICAgICAgICBpZiAoIWlzRmlyc3RVcGRhdGUpIHtcbiAgICAgICAgICByZXR1cm4gcmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcmF0aW8pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgcmVmZXJlbmNlIGlzIGNsaXBwZWQsIHRoZSByYXRpbyBpcyAwLiBUaHJvdHRsZSB0aGUgcmVmcmVzaFxuICAgICAgICAgIC8vIHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcCBvZiB1cGRhdGVzLlxuICAgICAgICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgcmVmcmVzaChmYWxzZSwgMWUtNyk7XG4gICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVmcmVzaChmYWxzZSwgcmF0aW8pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocmF0aW8gPT09IDEgJiYgIXJlY3RzQXJlRXF1YWwoZWxlbWVudFJlY3RGb3JSb290TWFyZ2luLCBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSkge1xuICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgZXZlbiB0aG91Z2ggdGhlIHJhdGlvIGlzIHJlcG9ydGVkIGFzIDEsIHRoZVxuICAgICAgICAvLyBlbGVtZW50IGlzIG5vdCBhY3R1YWxseSBmdWxseSB3aXRoaW4gdGhlIEludGVyc2VjdGlvbk9ic2VydmVyJ3Mgcm9vdFxuICAgICAgICAvLyBhcmVhIGFueW1vcmUuIFRoaXMgY2FuIGhhcHBlbiB1bmRlciBwZXJmb3JtYW5jZSBjb25zdHJhaW50cy4gVGhpcyBtYXlcbiAgICAgICAgLy8gYmUgYSBidWcgaW4gdGhlIGJyb3dzZXIncyBJbnRlcnNlY3Rpb25PYnNlcnZlciBpbXBsZW1lbnRhdGlvbi4gVG9cbiAgICAgICAgLy8gd29yayBhcm91bmQgdGhpcywgd2UgY29tcGFyZSB0aGUgZWxlbWVudCdzIGJvdW5kaW5nIHJlY3Qgbm93IHdpdGhcbiAgICAgICAgLy8gd2hhdCBpdCB3YXMgYXQgdGhlIHRpbWUgd2UgY3JlYXRlZCB0aGUgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuIElmIHRoZXlcbiAgICAgICAgLy8gYXJlIG5vdCBlcXVhbCB0aGVuIHRoZSBlbGVtZW50IG1vdmVkLCBzbyB3ZSByZWZyZXNoLlxuICAgICAgICByZWZyZXNoKCk7XG4gICAgICB9XG4gICAgICBpc0ZpcnN0VXBkYXRlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gT2xkZXIgYnJvd3NlcnMgZG9uJ3Qgc3VwcG9ydCBhIGBkb2N1bWVudGAgYXMgdGhlIHJvb3QgYW5kIHdpbGwgdGhyb3cgYW5cbiAgICAvLyBlcnJvci5cbiAgICB0cnkge1xuICAgICAgaW8gPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoaGFuZGxlT2JzZXJ2ZSwge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAvLyBIYW5kbGUgPGlmcmFtZT5zXG4gICAgICAgIHJvb3Q6IHJvb3Qub3duZXJEb2N1bWVudFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaW8gPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoaGFuZGxlT2JzZXJ2ZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGlvLm9ic2VydmUoZWxlbWVudCk7XG4gIH1cbiAgcmVmcmVzaCh0cnVlKTtcbiAgcmV0dXJuIGNsZWFudXA7XG59XG5cbi8qKlxuICogQXV0b21hdGljYWxseSB1cGRhdGVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCB3aGVuIG5lY2Vzc2FyeS5cbiAqIFNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBmbG9hdGluZyBlbGVtZW50IGlzIG1vdW50ZWQgb24gdGhlIERPTSBvclxuICogdmlzaWJsZSBvbiB0aGUgc2NyZWVuLlxuICogQHJldHVybnMgY2xlYW51cCBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSBpbnZva2VkIHdoZW4gdGhlIGZsb2F0aW5nIGVsZW1lbnQgaXNcbiAqIHJlbW92ZWQgZnJvbSB0aGUgRE9NIG9yIGhpZGRlbiBmcm9tIHRoZSBzY3JlZW4uXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXV0b1VwZGF0ZVxuICovXG5mdW5jdGlvbiBhdXRvVXBkYXRlKHJlZmVyZW5jZSwgZmxvYXRpbmcsIHVwZGF0ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIGNvbnN0IHtcbiAgICBhbmNlc3RvclNjcm9sbCA9IHRydWUsXG4gICAgYW5jZXN0b3JSZXNpemUgPSB0cnVlLFxuICAgIGVsZW1lbnRSZXNpemUgPSB0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgPT09ICdmdW5jdGlvbicsXG4gICAgbGF5b3V0U2hpZnQgPSB0eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPT09ICdmdW5jdGlvbicsXG4gICAgYW5pbWF0aW9uRnJhbWUgPSBmYWxzZVxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgcmVmZXJlbmNlRWwgPSB1bndyYXBFbGVtZW50KHJlZmVyZW5jZSk7XG4gIGNvbnN0IGFuY2VzdG9ycyA9IGFuY2VzdG9yU2Nyb2xsIHx8IGFuY2VzdG9yUmVzaXplID8gWy4uLihyZWZlcmVuY2VFbCA/IGdldE92ZXJmbG93QW5jZXN0b3JzKHJlZmVyZW5jZUVsKSA6IFtdKSwgLi4uZ2V0T3ZlcmZsb3dBbmNlc3RvcnMoZmxvYXRpbmcpXSA6IFtdO1xuICBhbmNlc3RvcnMuZm9yRWFjaChhbmNlc3RvciA9PiB7XG4gICAgYW5jZXN0b3JTY3JvbGwgJiYgYW5jZXN0b3IuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdXBkYXRlLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlXG4gICAgfSk7XG4gICAgYW5jZXN0b3JSZXNpemUgJiYgYW5jZXN0b3IuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlKTtcbiAgfSk7XG4gIGNvbnN0IGNsZWFudXBJbyA9IHJlZmVyZW5jZUVsICYmIGxheW91dFNoaWZ0ID8gb2JzZXJ2ZU1vdmUocmVmZXJlbmNlRWwsIHVwZGF0ZSkgOiBudWxsO1xuICBsZXQgcmVvYnNlcnZlRnJhbWUgPSAtMTtcbiAgbGV0IHJlc2l6ZU9ic2VydmVyID0gbnVsbDtcbiAgaWYgKGVsZW1lbnRSZXNpemUpIHtcbiAgICByZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihfcmVmID0+IHtcbiAgICAgIGxldCBbZmlyc3RFbnRyeV0gPSBfcmVmO1xuICAgICAgaWYgKGZpcnN0RW50cnkgJiYgZmlyc3RFbnRyeS50YXJnZXQgPT09IHJlZmVyZW5jZUVsICYmIHJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICAgIC8vIFByZXZlbnQgdXBkYXRlIGxvb3BzIHdoZW4gdXNpbmcgdGhlIGBzaXplYCBtaWRkbGV3YXJlLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmxvYXRpbmctdWkvZmxvYXRpbmctdWkvaXNzdWVzLzE3NDBcbiAgICAgICAgcmVzaXplT2JzZXJ2ZXIudW5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmVvYnNlcnZlRnJhbWUpO1xuICAgICAgICByZW9ic2VydmVGcmFtZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgdmFyIF9yZXNpemVPYnNlcnZlcjtcbiAgICAgICAgICAoX3Jlc2l6ZU9ic2VydmVyID0gcmVzaXplT2JzZXJ2ZXIpID09IG51bGwgfHwgX3Jlc2l6ZU9ic2VydmVyLm9ic2VydmUoZmxvYXRpbmcpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHVwZGF0ZSgpO1xuICAgIH0pO1xuICAgIGlmIChyZWZlcmVuY2VFbCAmJiAhYW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUocmVmZXJlbmNlRWwpO1xuICAgIH1cbiAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgfVxuICBsZXQgZnJhbWVJZDtcbiAgbGV0IHByZXZSZWZSZWN0ID0gYW5pbWF0aW9uRnJhbWUgPyBnZXRCb3VuZGluZ0NsaWVudFJlY3QocmVmZXJlbmNlKSA6IG51bGw7XG4gIGlmIChhbmltYXRpb25GcmFtZSkge1xuICAgIGZyYW1lTG9vcCgpO1xuICB9XG4gIGZ1bmN0aW9uIGZyYW1lTG9vcCgpIHtcbiAgICBjb25zdCBuZXh0UmVmUmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChyZWZlcmVuY2UpO1xuICAgIGlmIChwcmV2UmVmUmVjdCAmJiAhcmVjdHNBcmVFcXVhbChwcmV2UmVmUmVjdCwgbmV4dFJlZlJlY3QpKSB7XG4gICAgICB1cGRhdGUoKTtcbiAgICB9XG4gICAgcHJldlJlZlJlY3QgPSBuZXh0UmVmUmVjdDtcbiAgICBmcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZyYW1lTG9vcCk7XG4gIH1cbiAgdXBkYXRlKCk7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgdmFyIF9yZXNpemVPYnNlcnZlcjI7XG4gICAgYW5jZXN0b3JzLmZvckVhY2goYW5jZXN0b3IgPT4ge1xuICAgICAgYW5jZXN0b3JTY3JvbGwgJiYgYW5jZXN0b3IucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdXBkYXRlKTtcbiAgICAgIGFuY2VzdG9yUmVzaXplICYmIGFuY2VzdG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZSk7XG4gICAgfSk7XG4gICAgY2xlYW51cElvID09IG51bGwgfHwgY2xlYW51cElvKCk7XG4gICAgKF9yZXNpemVPYnNlcnZlcjIgPSByZXNpemVPYnNlcnZlcikgPT0gbnVsbCB8fCBfcmVzaXplT2JzZXJ2ZXIyLmRpc2Nvbm5lY3QoKTtcbiAgICByZXNpemVPYnNlcnZlciA9IG51bGw7XG4gICAgaWYgKGFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShmcmFtZUlkKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgd2l0aCBhbiBvYmplY3Qgb2Ygb3ZlcmZsb3cgc2lkZSBvZmZzZXRzIHRoYXQgZGV0ZXJtaW5lIGhvdyBtdWNoIHRoZVxuICogZWxlbWVudCBpcyBvdmVyZmxvd2luZyBhIGdpdmVuIGNsaXBwaW5nIGJvdW5kYXJ5IG9uIGVhY2ggc2lkZS5cbiAqIC0gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgYm91bmRhcnkgYnkgdGhhdCBudW1iZXIgb2YgcGl4ZWxzXG4gKiAtIG5lZ2F0aXZlID0gaG93IG1hbnkgcGl4ZWxzIGxlZnQgYmVmb3JlIGl0IHdpbGwgb3ZlcmZsb3dcbiAqIC0gMCA9IGxpZXMgZmx1c2ggd2l0aCB0aGUgYm91bmRhcnlcbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9kZXRlY3RPdmVyZmxvd1xuICovXG5jb25zdCBkZXRlY3RPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93JDE7XG5cbi8qKlxuICogTW9kaWZpZXMgdGhlIHBsYWNlbWVudCBieSB0cmFuc2xhdGluZyB0aGUgZmxvYXRpbmcgZWxlbWVudCBhbG9uZyB0aGVcbiAqIHNwZWNpZmllZCBheGVzLlxuICogQSBudW1iZXIgKHNob3J0aGFuZCBmb3IgYG1haW5BeGlzYCBvciBkaXN0YW5jZSksIG9yIGFuIGF4ZXMgY29uZmlndXJhdGlvblxuICogb2JqZWN0IG1heSBiZSBwYXNzZWQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvb2Zmc2V0XG4gKi9cbmNvbnN0IG9mZnNldCA9IG9mZnNldCQxO1xuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBjaG9vc2luZyB0aGUgcGxhY2VtZW50XG4gKiB0aGF0IGhhcyB0aGUgbW9zdCBzcGFjZSBhdmFpbGFibGUgYXV0b21hdGljYWxseSwgd2l0aG91dCBuZWVkaW5nIHRvIHNwZWNpZnkgYVxuICogcHJlZmVycmVkIHBsYWNlbWVudC4gQWx0ZXJuYXRpdmUgdG8gYGZsaXBgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9QbGFjZW1lbnRcbiAqL1xuY29uc3QgYXV0b1BsYWNlbWVudCA9IGF1dG9QbGFjZW1lbnQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgc2hpZnRpbmcgaXQgaW4gb3JkZXIgdG9cbiAqIGtlZXAgaXQgaW4gdmlldyB3aGVuIGl0IHdpbGwgb3ZlcmZsb3cgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NoaWZ0XG4gKi9cbmNvbnN0IHNoaWZ0ID0gc2hpZnQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgZmxpcHBpbmcgdGhlIGBwbGFjZW1lbnRgXG4gKiBpbiBvcmRlciB0byBrZWVwIGl0IGluIHZpZXcgd2hlbiB0aGUgcHJlZmVycmVkIHBsYWNlbWVudChzKSB3aWxsIG92ZXJmbG93IHRoZVxuICogY2xpcHBpbmcgYm91bmRhcnkuIEFsdGVybmF0aXZlIHRvIGBhdXRvUGxhY2VtZW50YC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9mbGlwXG4gKi9cbmNvbnN0IGZsaXAgPSBmbGlwJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0aGF0IGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBzaXplIG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IOKAlFxuICogZm9yIGluc3RhbmNlLCBwcmV2ZW50IGl0IGZyb20gb3ZlcmZsb3dpbmcgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5IG9yIG1hdGNoIHRoZVxuICogd2lkdGggb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NpemVcbiAqL1xuY29uc3Qgc2l6ZSA9IHNpemUkMTtcblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIGhpZGUgdGhlIGZsb2F0aW5nIGVsZW1lbnQgaW4gYXBwbGljYWJsZSBzaXR1YXRpb25zLCBzdWNoIGFzXG4gKiB3aGVuIGl0IGlzIG5vdCBpbiB0aGUgc2FtZSBjbGlwcGluZyBjb250ZXh0IGFzIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9oaWRlXG4gKi9cbmNvbnN0IGhpZGUgPSBoaWRlJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBwb3NpdGlvbiBhbiBpbm5lciBlbGVtZW50IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IHNvIHRoYXQgaXRcbiAqIGFwcGVhcnMgY2VudGVyZWQgdG8gdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2Fycm93XG4gKi9cbmNvbnN0IGFycm93ID0gYXJyb3ckMTtcblxuLyoqXG4gKiBQcm92aWRlcyBpbXByb3ZlZCBwb3NpdGlvbmluZyBmb3IgaW5saW5lIHJlZmVyZW5jZSBlbGVtZW50cyB0aGF0IGNhbiBzcGFuXG4gKiBvdmVyIG11bHRpcGxlIGxpbmVzLCBzdWNoIGFzIGh5cGVybGlua3Mgb3IgcmFuZ2Ugc2VsZWN0aW9ucy5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9pbmxpbmVcbiAqL1xuY29uc3QgaW5saW5lID0gaW5saW5lJDE7XG5cbi8qKlxuICogQnVpbHQtaW4gYGxpbWl0ZXJgIHRoYXQgd2lsbCBzdG9wIGBzaGlmdCgpYCBhdCBhIGNlcnRhaW4gcG9pbnQuXG4gKi9cbmNvbnN0IGxpbWl0U2hpZnQgPSBsaW1pdFNoaWZ0JDE7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIHRoYXQgd2lsbCBwbGFjZSB0aGUgZmxvYXRpbmcgZWxlbWVudFxuICogbmV4dCB0byBhIGdpdmVuIHJlZmVyZW5jZSBlbGVtZW50LlxuICovXG5jb25zdCBjb21wdXRlUG9zaXRpb24gPSAocmVmZXJlbmNlLCBmbG9hdGluZywgb3B0aW9ucykgPT4ge1xuICAvLyBUaGlzIGNhY2hlcyB0aGUgZXhwZW5zaXZlIGBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnNgIGZ1bmN0aW9uIHNvIHRoYXRcbiAgLy8gbXVsdGlwbGUgbGlmZWN5Y2xlIHJlc2V0cyByZS11c2UgdGhlIHNhbWUgcmVzdWx0LiBJdCBvbmx5IGxpdmVzIGZvciBhXG4gIC8vIHNpbmdsZSBjYWxsLiBJZiBvdGhlciBmdW5jdGlvbnMgYmVjb21lIGV4cGVuc2l2ZSwgd2UgY2FuIGFkZCB0aGVtIGFzIHdlbGwuXG4gIGNvbnN0IGNhY2hlID0gbmV3IE1hcCgpO1xuICBjb25zdCBtZXJnZWRPcHRpb25zID0ge1xuICAgIHBsYXRmb3JtLFxuICAgIC4uLm9wdGlvbnNcbiAgfTtcbiAgY29uc3QgcGxhdGZvcm1XaXRoQ2FjaGUgPSB7XG4gICAgLi4ubWVyZ2VkT3B0aW9ucy5wbGF0Zm9ybSxcbiAgICBfYzogY2FjaGVcbiAgfTtcbiAgcmV0dXJuIGNvbXB1dGVQb3NpdGlvbiQxKHJlZmVyZW5jZSwgZmxvYXRpbmcsIHtcbiAgICAuLi5tZXJnZWRPcHRpb25zLFxuICAgIHBsYXRmb3JtOiBwbGF0Zm9ybVdpdGhDYWNoZVxuICB9KTtcbn07XG5cbmV4cG9ydCB7IGFycm93LCBhdXRvUGxhY2VtZW50LCBhdXRvVXBkYXRlLCBjb21wdXRlUG9zaXRpb24sIGRldGVjdE92ZXJmbG93LCBmbGlwLCBoaWRlLCBpbmxpbmUsIGxpbWl0U2hpZnQsIG9mZnNldCwgcGxhdGZvcm0sIHNoaWZ0LCBzaXplIH07XG4iLCJpbXBvcnQgeyBhcnJvdyBhcyBhcnJvdyQxLCBjb21wdXRlUG9zaXRpb24gfSBmcm9tICdAZmxvYXRpbmctdWkvZG9tJztcbmV4cG9ydCB7IGF1dG9QbGFjZW1lbnQsIGF1dG9VcGRhdGUsIGNvbXB1dGVQb3NpdGlvbiwgZGV0ZWN0T3ZlcmZsb3csIGZsaXAsIGdldE92ZXJmbG93QW5jZXN0b3JzLCBoaWRlLCBpbmxpbmUsIGxpbWl0U2hpZnQsIG9mZnNldCwgcGxhdGZvcm0sIHNoaWZ0LCBzaXplIH0gZnJvbSAnQGZsb2F0aW5nLXVpL2RvbSc7XG5pbXBvcnQgeyBpc05vZGUsIGdldE5vZGVOYW1lIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzL2RvbSc7XG5pbXBvcnQgeyB1bnJlZiwgY29tcHV0ZWQsIHJlZiwgc2hhbGxvd1JlZiwgd2F0Y2gsIGdldEN1cnJlbnRTY29wZSwgb25TY29wZURpc3Bvc2UsIHNoYWxsb3dSZWFkb25seSB9IGZyb20gJ3Z1ZS1kZW1pJztcblxuZnVuY3Rpb24gaXNDb21wb25lbnRQdWJsaWNJbnN0YW5jZSh0YXJnZXQpIHtcbiAgcmV0dXJuIHRhcmdldCAhPSBudWxsICYmIHR5cGVvZiB0YXJnZXQgPT09ICdvYmplY3QnICYmICckZWwnIGluIHRhcmdldDtcbn1cbmZ1bmN0aW9uIHVud3JhcEVsZW1lbnQodGFyZ2V0KSB7XG4gIGlmIChpc0NvbXBvbmVudFB1YmxpY0luc3RhbmNlKHRhcmdldCkpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGFyZ2V0LiRlbDtcbiAgICByZXR1cm4gaXNOb2RlKGVsZW1lbnQpICYmIGdldE5vZGVOYW1lKGVsZW1lbnQpID09PSAnI2NvbW1lbnQnID8gbnVsbCA6IGVsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gdG9WYWx1ZShzb3VyY2UpIHtcbiAgcmV0dXJuIHR5cGVvZiBzb3VyY2UgPT09ICdmdW5jdGlvbicgPyBzb3VyY2UoKSA6IHVucmVmKHNvdXJjZSk7XG59XG5cbi8qKlxuICogUG9zaXRpb25zIGFuIGlubmVyIGVsZW1lbnQgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgc3VjaCB0aGF0IGl0IGlzIGNlbnRlcmVkIHRvIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBwYXJhbSBvcHRpb25zIFRoZSBhcnJvdyBvcHRpb25zLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2Fycm93XG4gKi9cbmZ1bmN0aW9uIGFycm93KG9wdGlvbnMpIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnYXJyb3cnLFxuICAgIG9wdGlvbnMsXG4gICAgZm4oYXJncykge1xuICAgICAgY29uc3QgZWxlbWVudCA9IHVud3JhcEVsZW1lbnQodG9WYWx1ZShvcHRpb25zLmVsZW1lbnQpKTtcbiAgICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFycm93JDEoe1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBwYWRkaW5nOiBvcHRpb25zLnBhZGRpbmdcbiAgICAgIH0pLmZuKGFyZ3MpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RFBSKGVsZW1lbnQpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgY29uc3Qgd2luID0gZWxlbWVudC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdztcbiAgcmV0dXJuIHdpbi5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG59XG5cbmZ1bmN0aW9uIHJvdW5kQnlEUFIoZWxlbWVudCwgdmFsdWUpIHtcbiAgY29uc3QgZHByID0gZ2V0RFBSKGVsZW1lbnQpO1xuICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIGRwcikgLyBkcHI7XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIHRoYXQgd2lsbCBwbGFjZSB0aGUgZmxvYXRpbmcgZWxlbWVudCBuZXh0IHRvIGEgcmVmZXJlbmNlIGVsZW1lbnQgd2hlbiBpdCBpcyBnaXZlbiBhIGNlcnRhaW4gQ1NTIHBvc2l0aW9uaW5nIHN0cmF0ZWd5LlxuICogQHBhcmFtIHJlZmVyZW5jZSBUaGUgcmVmZXJlbmNlIHRlbXBsYXRlIHJlZi5cbiAqIEBwYXJhbSBmbG9hdGluZyBUaGUgZmxvYXRpbmcgdGVtcGxhdGUgcmVmLlxuICogQHBhcmFtIG9wdGlvbnMgVGhlIGZsb2F0aW5nIG9wdGlvbnMuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvdnVlXG4gKi9cbmZ1bmN0aW9uIHVzZUZsb2F0aW5nKHJlZmVyZW5jZSwgZmxvYXRpbmcsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICBjb25zdCB3aGlsZUVsZW1lbnRzTW91bnRlZE9wdGlvbiA9IG9wdGlvbnMud2hpbGVFbGVtZW50c01vdW50ZWQ7XG4gIGNvbnN0IG9wZW5PcHRpb24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgdmFyIF90b1ZhbHVlO1xuICAgIHJldHVybiAoX3RvVmFsdWUgPSB0b1ZhbHVlKG9wdGlvbnMub3BlbikpICE9IG51bGwgPyBfdG9WYWx1ZSA6IHRydWU7XG4gIH0pO1xuICBjb25zdCBtaWRkbGV3YXJlT3B0aW9uID0gY29tcHV0ZWQoKCkgPT4gdG9WYWx1ZShvcHRpb25zLm1pZGRsZXdhcmUpKTtcbiAgY29uc3QgcGxhY2VtZW50T3B0aW9uID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHZhciBfdG9WYWx1ZTI7XG4gICAgcmV0dXJuIChfdG9WYWx1ZTIgPSB0b1ZhbHVlKG9wdGlvbnMucGxhY2VtZW50KSkgIT0gbnVsbCA/IF90b1ZhbHVlMiA6ICdib3R0b20nO1xuICB9KTtcbiAgY29uc3Qgc3RyYXRlZ3lPcHRpb24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgdmFyIF90b1ZhbHVlMztcbiAgICByZXR1cm4gKF90b1ZhbHVlMyA9IHRvVmFsdWUob3B0aW9ucy5zdHJhdGVneSkpICE9IG51bGwgPyBfdG9WYWx1ZTMgOiAnYWJzb2x1dGUnO1xuICB9KTtcbiAgY29uc3QgdHJhbnNmb3JtT3B0aW9uID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHZhciBfdG9WYWx1ZTQ7XG4gICAgcmV0dXJuIChfdG9WYWx1ZTQgPSB0b1ZhbHVlKG9wdGlvbnMudHJhbnNmb3JtKSkgIT0gbnVsbCA/IF90b1ZhbHVlNCA6IHRydWU7XG4gIH0pO1xuICBjb25zdCByZWZlcmVuY2VFbGVtZW50ID0gY29tcHV0ZWQoKCkgPT4gdW53cmFwRWxlbWVudChyZWZlcmVuY2UudmFsdWUpKTtcbiAgY29uc3QgZmxvYXRpbmdFbGVtZW50ID0gY29tcHV0ZWQoKCkgPT4gdW53cmFwRWxlbWVudChmbG9hdGluZy52YWx1ZSkpO1xuICBjb25zdCB4ID0gcmVmKDApO1xuICBjb25zdCB5ID0gcmVmKDApO1xuICBjb25zdCBzdHJhdGVneSA9IHJlZihzdHJhdGVneU9wdGlvbi52YWx1ZSk7XG4gIGNvbnN0IHBsYWNlbWVudCA9IHJlZihwbGFjZW1lbnRPcHRpb24udmFsdWUpO1xuICBjb25zdCBtaWRkbGV3YXJlRGF0YSA9IHNoYWxsb3dSZWYoe30pO1xuICBjb25zdCBpc1Bvc2l0aW9uZWQgPSByZWYoZmFsc2UpO1xuICBjb25zdCBmbG9hdGluZ1N0eWxlcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBpbml0aWFsU3R5bGVzID0ge1xuICAgICAgcG9zaXRpb246IHN0cmF0ZWd5LnZhbHVlLFxuICAgICAgbGVmdDogJzAnLFxuICAgICAgdG9wOiAnMCdcbiAgICB9O1xuICAgIGlmICghZmxvYXRpbmdFbGVtZW50LnZhbHVlKSB7XG4gICAgICByZXR1cm4gaW5pdGlhbFN0eWxlcztcbiAgICB9XG4gICAgY29uc3QgeFZhbCA9IHJvdW5kQnlEUFIoZmxvYXRpbmdFbGVtZW50LnZhbHVlLCB4LnZhbHVlKTtcbiAgICBjb25zdCB5VmFsID0gcm91bmRCeURQUihmbG9hdGluZ0VsZW1lbnQudmFsdWUsIHkudmFsdWUpO1xuICAgIGlmICh0cmFuc2Zvcm1PcHRpb24udmFsdWUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmluaXRpYWxTdHlsZXMsXG4gICAgICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoXCIgKyB4VmFsICsgXCJweCwgXCIgKyB5VmFsICsgXCJweClcIixcbiAgICAgICAgLi4uKGdldERQUihmbG9hdGluZ0VsZW1lbnQudmFsdWUpID49IDEuNSAmJiB7XG4gICAgICAgICAgd2lsbENoYW5nZTogJ3RyYW5zZm9ybSdcbiAgICAgICAgfSlcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBwb3NpdGlvbjogc3RyYXRlZ3kudmFsdWUsXG4gICAgICBsZWZ0OiB4VmFsICsgXCJweFwiLFxuICAgICAgdG9wOiB5VmFsICsgXCJweFwiXG4gICAgfTtcbiAgfSk7XG4gIGxldCB3aGlsZUVsZW1lbnRzTW91bnRlZENsZWFudXA7XG4gIGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICBpZiAocmVmZXJlbmNlRWxlbWVudC52YWx1ZSA9PSBudWxsIHx8IGZsb2F0aW5nRWxlbWVudC52YWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG9wZW4gPSBvcGVuT3B0aW9uLnZhbHVlO1xuICAgIGNvbXB1dGVQb3NpdGlvbihyZWZlcmVuY2VFbGVtZW50LnZhbHVlLCBmbG9hdGluZ0VsZW1lbnQudmFsdWUsIHtcbiAgICAgIG1pZGRsZXdhcmU6IG1pZGRsZXdhcmVPcHRpb24udmFsdWUsXG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudE9wdGlvbi52YWx1ZSxcbiAgICAgIHN0cmF0ZWd5OiBzdHJhdGVneU9wdGlvbi52YWx1ZVxuICAgIH0pLnRoZW4ocG9zaXRpb24gPT4ge1xuICAgICAgeC52YWx1ZSA9IHBvc2l0aW9uLng7XG4gICAgICB5LnZhbHVlID0gcG9zaXRpb24ueTtcbiAgICAgIHN0cmF0ZWd5LnZhbHVlID0gcG9zaXRpb24uc3RyYXRlZ3k7XG4gICAgICBwbGFjZW1lbnQudmFsdWUgPSBwb3NpdGlvbi5wbGFjZW1lbnQ7XG4gICAgICBtaWRkbGV3YXJlRGF0YS52YWx1ZSA9IHBvc2l0aW9uLm1pZGRsZXdhcmVEYXRhO1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgZmxvYXRpbmcgZWxlbWVudCdzIHBvc2l0aW9uIG1heSBiZSByZWNvbXB1dGVkIHdoaWxlIGl0J3MgY2xvc2VkXG4gICAgICAgKiBidXQgc3RpbGwgbW91bnRlZCAoc3VjaCBhcyB3aGVuIHRyYW5zaXRpb25pbmcgb3V0KS4gVG8gZW5zdXJlXG4gICAgICAgKiBgaXNQb3NpdGlvbmVkYCB3aWxsIGJlIGBmYWxzZWAgaW5pdGlhbGx5IG9uIHRoZSBuZXh0IG9wZW4sIGF2b2lkXG4gICAgICAgKiBzZXR0aW5nIGl0IHRvIGB0cnVlYCB3aGVuIGBvcGVuID09PSBmYWxzZWAgKG11c3QgYmUgc3BlY2lmaWVkKS5cbiAgICAgICAqL1xuICAgICAgaXNQb3NpdGlvbmVkLnZhbHVlID0gb3BlbiAhPT0gZmFsc2U7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICBpZiAodHlwZW9mIHdoaWxlRWxlbWVudHNNb3VudGVkQ2xlYW51cCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd2hpbGVFbGVtZW50c01vdW50ZWRDbGVhbnVwKCk7XG4gICAgICB3aGlsZUVsZW1lbnRzTW91bnRlZENsZWFudXAgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGF0dGFjaCgpIHtcbiAgICBjbGVhbnVwKCk7XG4gICAgaWYgKHdoaWxlRWxlbWVudHNNb3VudGVkT3B0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHVwZGF0ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocmVmZXJlbmNlRWxlbWVudC52YWx1ZSAhPSBudWxsICYmIGZsb2F0aW5nRWxlbWVudC52YWx1ZSAhPSBudWxsKSB7XG4gICAgICB3aGlsZUVsZW1lbnRzTW91bnRlZENsZWFudXAgPSB3aGlsZUVsZW1lbnRzTW91bnRlZE9wdGlvbihyZWZlcmVuY2VFbGVtZW50LnZhbHVlLCBmbG9hdGluZ0VsZW1lbnQudmFsdWUsIHVwZGF0ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIGlmICghb3Blbk9wdGlvbi52YWx1ZSkge1xuICAgICAgaXNQb3NpdGlvbmVkLnZhbHVlID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIHdhdGNoKFttaWRkbGV3YXJlT3B0aW9uLCBwbGFjZW1lbnRPcHRpb24sIHN0cmF0ZWd5T3B0aW9uLCBvcGVuT3B0aW9uXSwgdXBkYXRlLCB7XG4gICAgZmx1c2g6ICdzeW5jJ1xuICB9KTtcbiAgd2F0Y2goW3JlZmVyZW5jZUVsZW1lbnQsIGZsb2F0aW5nRWxlbWVudF0sIGF0dGFjaCwge1xuICAgIGZsdXNoOiAnc3luYydcbiAgfSk7XG4gIHdhdGNoKG9wZW5PcHRpb24sIHJlc2V0LCB7XG4gICAgZmx1c2g6ICdzeW5jJ1xuICB9KTtcbiAgaWYgKGdldEN1cnJlbnRTY29wZSgpKSB7XG4gICAgb25TY29wZURpc3Bvc2UoY2xlYW51cCk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4OiBzaGFsbG93UmVhZG9ubHkoeCksXG4gICAgeTogc2hhbGxvd1JlYWRvbmx5KHkpLFxuICAgIHN0cmF0ZWd5OiBzaGFsbG93UmVhZG9ubHkoc3RyYXRlZ3kpLFxuICAgIHBsYWNlbWVudDogc2hhbGxvd1JlYWRvbmx5KHBsYWNlbWVudCksXG4gICAgbWlkZGxld2FyZURhdGE6IHNoYWxsb3dSZWFkb25seShtaWRkbGV3YXJlRGF0YSksXG4gICAgaXNQb3NpdGlvbmVkOiBzaGFsbG93UmVhZG9ubHkoaXNQb3NpdGlvbmVkKSxcbiAgICBmbG9hdGluZ1N0eWxlcyxcbiAgICB1cGRhdGVcbiAgfTtcbn1cblxuZXhwb3J0IHsgYXJyb3csIHVzZUZsb2F0aW5nIH07XG4iLCJleHBvcnQgY29uc3QgaXNDbGlja091dHNpZGUgPSAoZXZlbnQ6IE1vdXNlRXZlbnQsIGVsZW1lbnRzOiBIVE1MRWxlbWVudCB8IEhUTUxFbGVtZW50W10pOiBib29sZWFuID0+IHtcbiAgY29uc3QgdGFyZ2V0cyA9IEFycmF5LmlzQXJyYXkoZWxlbWVudHMpID8gZWxlbWVudHMgOiBbZWxlbWVudHNdO1xuICByZXR1cm4gIXRhcmdldHMuc29tZSgoZWwpID0+IGVsLmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSk7XG59O1xuIiwiPHNjcmlwdCBsYW5nPVwidHNcIiBzZXR1cD5cbiAgaW1wb3J0IHsgYXV0b1BsYWNlbWVudCwgYXV0b1VwZGF0ZSwgb2Zmc2V0IGFzIG9mZnNldE1pZGRsZXdhcmUsIHNoaWZ0LCB1c2VGbG9hdGluZyB9IGZyb20gJ0BmbG9hdGluZy11aS92dWUnO1xuICBpbXBvcnQgeyBjb21wdXRlZCwgb25CZWZvcmVNb3VudCwgb25Nb3VudGVkLCBvblVubW91bnRlZCwgcmVmLCB3YXRjaCwgd2F0Y2hFZmZlY3QgfSBmcm9tICd2dWUnO1xuXG4gIGltcG9ydCB7IENTUyB9IGZyb20gJ0AvdHlwZXMvU3R5bGVzJztcbiAgaW1wb3J0IHsgaXNDbGlja091dHNpZGUgfSBmcm9tICdAL3V0aWxpdGllcy9ldmVudCc7XG4gIGltcG9ydCB7IFRPUF9MQVlFUl9JRCwgaW5pdEZhdXhUb3BMYXllciB9IGZyb20gJ0AvdXRpbGl0aWVzL3ZpZXdwb3J0JztcblxuICBpbXBvcnQgdHlwZSB7IFJlZiB9IGZyb20gJ3Z1ZSc7XG5cbiAgdHlwZSBQcm9wcyA9IHtcbiAgICBhbmNob3JJZDogc3RyaW5nO1xuICAgIG9mZnNldD86IG51bWJlcjtcbiAgfTtcblxuICBjb25zdCBwcm9wcyA9IHdpdGhEZWZhdWx0cyhkZWZpbmVQcm9wczxQcm9wcz4oKSwge1xuICAgIG9mZnNldDogMTYsXG4gIH0pO1xuXG4gIGNvbnN0IGFuY2hvcjogUmVmPEhUTUxFbGVtZW50IHwgbnVsbD4gPSByZWYobnVsbCk7XG4gIGNvbnN0IGZsb2F0aW5nOiBSZWY8SFRNTEVsZW1lbnQgfCBudWxsPiA9IHJlZihudWxsKTtcbiAgY29uc3Qgcm9vdDogUmVmPEhUTUxFbGVtZW50IHwgbnVsbD4gPSByZWYobnVsbCk7XG4gIGNvbnN0IGlzSG92ZXJlZCA9IHJlZihmYWxzZSk7XG4gIGNvbnN0IGlzVG9nZ2xlZE9wZW4gPSByZWYoZmFsc2UpO1xuICBjb25zdCBtaWRkbGV3YXJlID0gcmVmKFthdXRvUGxhY2VtZW50KCksIG9mZnNldE1pZGRsZXdhcmUoeyBtYWluQXhpczogcHJvcHMub2Zmc2V0IH0pLCBzaGlmdCh7IHBhZGRpbmc6IDE2IH0pXSk7XG5cbiAgY29uc3QgaXNTaG93UG9wb3ZlciA9IGNvbXB1dGVkKCgpID0+IGlzSG92ZXJlZC52YWx1ZSB8fCBpc1RvZ2dsZWRPcGVuLnZhbHVlKTtcblxuICBjb25zdCB7IGZsb2F0aW5nU3R5bGVzIH0gPSB1c2VGbG9hdGluZyhhbmNob3IsIGZsb2F0aW5nLCB7XG4gICAgbWlkZGxld2FyZSxcbiAgICBzdHJhdGVneTogJ2ZpeGVkJyxcbiAgICB3aGlsZUVsZW1lbnRzTW91bnRlZDogYXV0b1VwZGF0ZSxcbiAgfSk7XG5cbiAgY29uc3QgaGFuZGxlUGVybWFuZW50T3BlbkJvZHlDbGljayA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgaWYgKCFhbmNob3IudmFsdWUgfHwgIWZsb2F0aW5nLnZhbHVlKSByZXR1cm47XG4gICAgaWYgKGlzQ2xpY2tPdXRzaWRlKGUsIFthbmNob3IudmFsdWUsIGZsb2F0aW5nLnZhbHVlXSkpIHtcbiAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICBpc1RvZ2dsZWRPcGVuLnZhbHVlID0gZmFsc2U7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUFuY2hvckVsZW1lbnRNb3VzZU92ZXIgPSAoKSA9PiB7XG4gICAgaXNIb3ZlcmVkLnZhbHVlID0gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVBbmNob3JFbGVtZW50TW91c2VMZWF2ZSA9ICgpID0+IHtcbiAgICBpc0hvdmVyZWQudmFsdWUgPSBmYWxzZTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVBbmNob3JFbGVtZW50Q2xpY2sgPSAoKSA9PiB7XG4gICAgaXNUb2dnbGVkT3Blbi52YWx1ZSA9IHRydWU7XG4gIH07XG5cbiAgY29uc3QgYWRkTGlzdGVuZXJzVG9BbmNob3JFbGVtZW50ID0gKCkgPT4ge1xuICAgIGlmICghYW5jaG9yLnZhbHVlKSByZXR1cm4gbnVsbDtcbiAgICBhbmNob3IudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdmVyJywgaGFuZGxlQW5jaG9yRWxlbWVudE1vdXNlT3Zlcik7XG4gICAgYW5jaG9yLnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCBoYW5kbGVBbmNob3JFbGVtZW50TW91c2VMZWF2ZSk7XG4gICAgYW5jaG9yLnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlQW5jaG9yRWxlbWVudENsaWNrKTtcbiAgfTtcblxuICBjb25zdCByZW1vdmVMaXN0ZW5lcnNGcm9tQW5jaG9yRWxlbWVudCA9ICgpID0+IHtcbiAgICBpZiAoIWFuY2hvci52YWx1ZSkgcmV0dXJuIG51bGw7XG4gICAgYW5jaG9yLnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlb3ZlcicsIGhhbmRsZUFuY2hvckVsZW1lbnRNb3VzZU92ZXIpO1xuICAgIGFuY2hvci52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgaGFuZGxlQW5jaG9yRWxlbWVudE1vdXNlTGVhdmUpO1xuICAgIGFuY2hvci52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZUFuY2hvckVsZW1lbnRDbGljayk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUGVybWFuZW50T3BlbkJvZHlLZXlkb3duID0gKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICBpc1RvZ2dsZWRPcGVuLnZhbHVlID0gZmFsc2U7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGFkZE9wZW5MaXN0ZW5lcnNUb1Jvb3QgPSAoKSA9PiB7XG4gICAgaWYgKCFyb290LnZhbHVlKSByZXR1cm47XG4gICAgcm9vdC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZVBlcm1hbmVudE9wZW5Cb2R5Q2xpY2ssIHRydWUpO1xuICAgIHJvb3QudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZVBlcm1hbmVudE9wZW5Cb2R5S2V5ZG93bik7XG4gIH07XG5cbiAgY29uc3QgcmVtb3ZlT3Blbkxpc3RlbmVyc0Zyb21Sb290ID0gKCkgPT4ge1xuICAgIGlmICghcm9vdC52YWx1ZSkgcmV0dXJuO1xuICAgIHJvb3QudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVQZXJtYW5lbnRPcGVuQm9keUNsaWNrLCB0cnVlKTtcbiAgICByb290LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVQZXJtYW5lbnRPcGVuQm9keUtleWRvd24pO1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZUFuY2hvckVsZW1lbnQgPSAoKSA9PiB7XG4gICAgYW5jaG9yLnZhbHVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJvcHMuYW5jaG9ySWQpO1xuICB9O1xuXG4gIHdhdGNoKFxuICAgICgpID0+IGlzVG9nZ2xlZE9wZW4udmFsdWUsXG4gICAgKG5ld1ZhbHVlKSA9PiB7XG4gICAgICBpZiAobmV3VmFsdWUpIHtcbiAgICAgICAgYWRkT3Blbkxpc3RlbmVyc1RvUm9vdCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVtb3ZlT3Blbkxpc3RlbmVyc0Zyb21Sb290KCk7XG4gICAgICB9XG4gICAgfVxuICApO1xuXG4gIHdhdGNoKFxuICAgICgpID0+IHByb3BzLmFuY2hvcklkLFxuICAgICgpID0+IHtcbiAgICAgIHJlbW92ZUxpc3RlbmVyc0Zyb21BbmNob3JFbGVtZW50KCk7XG4gICAgICB1cGRhdGVBbmNob3JFbGVtZW50KCk7XG4gICAgICBhZGRMaXN0ZW5lcnNUb0FuY2hvckVsZW1lbnQoKTtcbiAgICB9XG4gICk7XG5cbiAgd2F0Y2hFZmZlY3QoKCkgPT4ge1xuICAgIG1pZGRsZXdhcmUudmFsdWUgPSBbYXV0b1BsYWNlbWVudCgpLCBvZmZzZXRNaWRkbGV3YXJlKHsgbWFpbkF4aXM6IHByb3BzLm9mZnNldCB9KSwgc2hpZnQoeyBwYWRkaW5nOiAxNiB9KV07XG4gIH0pO1xuXG4gIG9uQmVmb3JlTW91bnQoKCkgPT4ge1xuICAgIGluaXRGYXV4VG9wTGF5ZXIoKTtcbiAgfSk7XG5cbiAgb25Nb3VudGVkKCgpID0+IHtcbiAgICB1cGRhdGVBbmNob3JFbGVtZW50KCk7XG4gICAgcm9vdC52YWx1ZSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICBhZGRMaXN0ZW5lcnNUb0FuY2hvckVsZW1lbnQoKTtcbiAgfSk7XG5cbiAgb25Vbm1vdW50ZWQoKCkgPT4ge1xuICAgIHJlbW92ZUxpc3RlbmVyc0Zyb21BbmNob3JFbGVtZW50KCk7XG4gIH0pO1xuPC9zY3JpcHQ+XG5cbjx0ZW1wbGF0ZT5cbiAgPFRlbGVwb3J0IDp0bz1cImAjJHtUT1BfTEFZRVJfSUR9YFwiPlxuICAgIDxUcmFuc2l0aW9uPlxuICAgICAgPGRpdlxuICAgICAgICA6Y2xhc3M9XCJbXG4gICAgICAgICAgJ3RpZGUtcG9wb3ZlcicsXG4gICAgICAgICAgQ1NTLkJHLlNVUkZBQ0UuREVGQVVMVCxcbiAgICAgICAgICBDU1MuQk9SREVSLkNPTE9SLkxPVyxcbiAgICAgICAgICBDU1MuQk9SREVSLkZVTEwuT05FLFxuICAgICAgICAgIENTUy5CT1JERVIuUkFESVVTLkhBTEYsXG4gICAgICAgICAgQ1NTLkZPTlQuUk9MRS5CT0RZXzIsXG4gICAgICAgICAgQ1NTLlBBRERJTkcuRlVMTC5PTkUsXG4gICAgICAgICAgQ1NTLlNIQURPVy5CT1RUT00sXG4gICAgICAgIF1cIlxuICAgICAgICByZWY9XCJmbG9hdGluZ1wiXG4gICAgICAgIDpzdHlsZT1cInsgLi4uZmxvYXRpbmdTdHlsZXMsIG1heFdpZHRoOiBgY2FsYygxMDAlIC0gJHtwcm9wcy5vZmZzZXQgKiAyfXB4KWAgfVwiXG4gICAgICAgIHYtc2hvdz1cImlzU2hvd1BvcG92ZXJcIlxuICAgICAgPlxuICAgICAgICA8c2xvdCAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9UcmFuc2l0aW9uPlxuICA8L1RlbGVwb3J0PlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIHNjb3BlZD5cbiAgLnYtZW50ZXItZnJvbSxcbiAgLnYtbGVhdmUtdG8ge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbiAgLnYtZW50ZXItYWN0aXZlLFxuICAudi1sZWF2ZS1hY3RpdmUge1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgdmFyKC0tdGlkZS1hbmltYXRlKTtcbiAgfVxuICAudi1lbnRlci10byxcbiAgLnYtbGVhdmUtZnJvbSB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuPC9zdHlsZT5cbiIsIjxzY3JpcHQgbGFuZz1cInRzXCIgc2V0dXA+XG4gIGltcG9ydCBUaWRlSWNvbiBmcm9tICdAL2NvbXBvbmVudHMvVGlkZUljb24udnVlJztcbiAgaW1wb3J0IHsgSUNPTiB9IGZyb20gJ0AvdHlwZXMvSWNvbic7XG4gIGltcG9ydCB7IFNJWkUgfSBmcm9tICdAL3R5cGVzL1NpemUnO1xuICBpbXBvcnQgeyBDU1MgfSBmcm9tICdAL3R5cGVzL1N0eWxlcyc7XG5cbiAgdHlwZSBQcm9wcyA9IHtcbiAgICBkaXNhYmxlZD86IGJvb2xlYW47XG4gICAgaXNBY3RpdmU/OiBib29sZWFuO1xuICB9O1xuXG4gIGNvbnN0IHByb3BzID0gd2l0aERlZmF1bHRzKGRlZmluZVByb3BzPFByb3BzPigpLCB7XG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIGlzQWN0aXZlOiBmYWxzZSxcbiAgfSk7XG5cbiAgY29uc3QgZW1pdCA9IGRlZmluZUVtaXRzKFsnY2hhbmdlJ10pO1xuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gKCkgPT4ge1xuICAgIGlmICghcHJvcHMuZGlzYWJsZWQpIHtcbiAgICAgIGVtaXQoJ2NoYW5nZScpO1xuICAgIH1cbiAgfTtcbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG4gIDxidXR0b25cbiAgICA6Y2xhc3M9XCJbXG4gICAgICAndGlkZS1zd2l0Y2gnLFxuICAgICAgcHJvcHMuaXNBY3RpdmUgPyAnYWN0aXZlJyA6ICcnLFxuICAgICAgQ1NTLkRJU1BMQVkuRkxFWCxcbiAgICAgIENTUy5BWElTMi5DRU5URVIsXG4gICAgICBDU1MuQk9SREVSLkZVTEwuT05FLFxuICAgICAgQ1NTLkJPUkRFUi5SQURJVVMuRlVMTCxcbiAgICAgIHByb3BzLmlzQWN0aXZlID8gJycgOiBDU1MuQk9SREVSLkNPTE9SLkRFRkFVTFQsXG4gICAgICBDU1MuT1ZFUkZMT1cuWFkuSElEREVOLFxuICAgICAgcHJvcHMuaXNBY3RpdmUgPyBDU1MuQkcuU0VDT05EQVJZIDogQ1NTLkJHLlNVUkZBQ0UuREVGQVVMVCxcbiAgICBdXCJcbiAgICA6ZGlzYWJsZWQ9XCJwcm9wcy5kaXNhYmxlZFwiXG4gICAgQGNsaWNrPVwiaGFuZGxlQ2xpY2tcIlxuICAgIGFyaWEtbGFiZWw9XCJTd2l0Y2hcIlxuICA+XG4gICAgPGRpdlxuICAgICAgOmNsYXNzPVwiW1xuICAgICAgICAndGlkZS1zd2l0Y2gtaW5kaWNhdG9yJyxcbiAgICAgICAgQ1NTLlBPU0lUSU9OLlJFTEFUSVZFLFxuICAgICAgICBDU1MuRElTUExBWS5GTEVYLFxuICAgICAgICBDU1MuQVhJUzEuQ0VOVEVSLFxuICAgICAgICBDU1MuQVhJUzIuQ0VOVEVSLFxuICAgICAgICBDU1MuQk9SREVSLlJBRElVUy5GVUxMLFxuICAgICAgICBwcm9wcy5pc0FjdGl2ZSA/IENTUy5CRy5TVVJGQUNFLkRFRkFVTFQgOiBDU1MuQkcuU0VDT05EQVJZLFxuICAgICAgXVwiXG4gICAgPlxuICAgICAgPFRpZGVJY29uXG4gICAgICAgIDppY29uPVwiSUNPTi5DSEVDS1wiXG4gICAgICAgIDpzaXplPVwiU0laRS5MQVJHRVwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuICA8L2J1dHRvbj5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBzY29wZWQ+XG4gIC50aWRlLXN3aXRjaCB7XG4gICAgd2lkdGg6IDY0cHg7XG4gICAgaGVpZ2h0OiAzMnB4O1xuICAgIHRyYW5zaXRpb246IHZhcigtLXRpZGUtYW5pbWF0ZSk7XG4gICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogYmFja2dyb3VuZC1jb2xvcjtcbiAgfVxuXG4gIC50aWRlLXN3aXRjaDpkaXNhYmxlZCB7XG4gICAgb3BhY2l0eTogMC4zMjtcbiAgfVxuXG4gIC50aWRlLXN3aXRjaC5hY3RpdmUge1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tdGlkZS1zZWNvbmRhcnkpO1xuICB9XG5cbiAgLnRpZGUtc3dpdGNoLmFjdGl2ZSAudGlkZS1zd2l0Y2gtaW5kaWNhdG9yIHtcbiAgICBsZWZ0OiAzNnB4O1xuICB9XG5cbiAgLnRpZGUtc3dpdGNoLWluZGljYXRvciB7XG4gICAgbGVmdDogNHB4O1xuICAgIHRyYW5zaXRpb246IHZhcigtLXRpZGUtYW5pbWF0ZSk7XG4gICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogbGVmdCwgYm9yZGVyLWNvbG9yLCBiYWNrZ3JvdW5kLWNvbG9yO1xuICB9XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgZm9ybWF0TnVtYmVyLCBmb3JtYXRQaG9uZSwgZm9ybWF0UHJpY2UgfSBmcm9tICdAL3V0aWxpdGllcy9mb3JtYXQnO1xuXG5leHBvcnQgdHlwZSBGb3JtYXR0ZWQgPSB7XG4gIFtrZXk6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVtYmVyO1xufTtcblxuZXhwb3J0IGNvbnN0IEZPUk1BVCA9IHtcbiAgTlVNQkVSOiBmb3JtYXROdW1iZXIsXG4gIFBIT05FOiBmb3JtYXRQaG9uZSxcbiAgUFJJQ0U6IGZvcm1hdFByaWNlLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IEZPUk1BVF9SRUdFWCA9IHtcbiAgYWxwaGE6IC9eW2EtekEtWl0rJC9nLFxuICBhbHBoYU51bWJlck9yRW1wdHk6IC9eJHxeW2EtejAtOV0rJC9pLFxuICBhbHBoYVNwYWNlOiAvXlthLXpBLVogXSskL2csXG4gIGVtYWlsOlxuICAgIC9eKChbXjw+KClbXFxdXFxcXC4sOzpcXHNAXCJdKyhcXC5bXjw+KClbXFxdXFxcXC4sOzpcXHNAXCJdKykqKXwoXCIuK1wiKSlAKChcXFtbMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcLlswLTldezEsM31cXC5bMC05XXsxLDN9XFxdKXwoKFthLXpBLVpcXC0wLTldK1xcLikrW2EtekEtWl17Mix9KSkkLyxcbiAgbnVtYmVyRm9ybWF0dGVkOiAvXiR8KD89LileXFwkPygoWzEtOV1bMC05XXswLDJ9KCxbMC05XXszfSkqKXwwKT8oXFwuWzAtOV17MSwyfSk/JC8sXG4gIHBob25lOiAvXig/OlxcZHszfS1cXGR7M30tXFxkezR9fFxcZHsxfS1cXGR7M30tXFxkezN9LVxcZHs0fSk/JC8sXG4gIHByaWNlOiAvKD89LileXFwkPygoWzEtOV1bMC05XXswLDJ9KCxbMC05XXszfSkqKXwwKT8oXFwuWzAtOV17MSwyfSk/JC8sXG59O1xuIiwiLyoqXG4gKiBUaGVzZSBzbGlkZXMgYXJlIHVzZWQgaW4gYm90aCB0aGUgaW5saW5lIGRldGFpbCBwYWdlIHBob3RvIHNsaWRlclxuICogYW5kIHRoZSBmdWxsc2NyZWVuIG1lZGlhIGdhbGxlcnkuXG4gKi9cblxuZXhwb3J0IGNvbnN0IE1FRElBX1NMSURFX1RZUEVTID0ge1xuICBJTUFHRToge1xuICAgIEZMT09SUExBTjogJ2Zsb29ycGxhbicsXG4gICAgSU1BR0U6ICdpbWFnZScsXG4gIH0sXG4gIFZJREVPOiAndmlkZW8nLFxuICBWUjogJ3ZyJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIE1lZGlhU2xpZGVUeXBlID1cbiAgfCAodHlwZW9mIE1FRElBX1NMSURFX1RZUEVTLklNQUdFKVtrZXlvZiB0eXBlb2YgTUVESUFfU0xJREVfVFlQRVMuSU1BR0VdXG4gIHwgdHlwZW9mIE1FRElBX1NMSURFX1RZUEVTLlZJREVPXG4gIHwgdHlwZW9mIE1FRElBX1NMSURFX1RZUEVTLlZSO1xuXG5leHBvcnQgdHlwZSBJbWFnZVNsaWRlVHlwZSA9ICh0eXBlb2YgTUVESUFfU0xJREVfVFlQRVMuSU1BR0UpW2tleW9mIHR5cGVvZiBNRURJQV9TTElERV9UWVBFUy5JTUFHRV07XG5cbnR5cGUgSW1hZ2VTbGlkZSA9IHtcbiAgaW1hZ2VVcmw6IHN0cmluZztcbiAgdHlwZTogSW1hZ2VTbGlkZVR5cGU7XG59O1xuXG5leHBvcnQgdHlwZSBWaWRlb1NsaWRlVHlwZSA9IHR5cGVvZiBNRURJQV9TTElERV9UWVBFUy5WSURFTztcblxudHlwZSBWaWRlb1NsaWRlID0ge1xuICBpbWFnZVVybDogc3RyaW5nO1xuICB0eXBlOiBWaWRlb1NsaWRlVHlwZTtcbiAgdmlkZW9Vcmw6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFZyU2xpZGVUeXBlID0gdHlwZW9mIE1FRElBX1NMSURFX1RZUEVTLlZSO1xuXG50eXBlIFZyU2xpZGUgPSB7XG4gIGltYWdlVXJsOiBzdHJpbmc7XG4gIHR5cGU6IFZyU2xpZGVUeXBlO1xuICB2clVybDogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgTGlzdGluZ01lZGlhID0gSW1hZ2VTbGlkZSB8IFZpZGVvU2xpZGUgfCBWclNsaWRlO1xuIiwiaW1wb3J0IHsgRk9STUFUX1JFR0VYIH0gZnJvbSAnQC90eXBlcy9Gb3JtYXR0ZWQnO1xuaW1wb3J0IHsgY2hlY2tGb3JtYXQgfSBmcm9tICdAL3V0aWxpdGllcy92YWxpZGF0aW9uJztcblxuZXhwb3J0IGNvbnN0IFZBTElEQVRPUiA9IHtcbiAgQUxQSEFfTlVNQkVSX0VNUFRZOiBjaGVja0Zvcm1hdChGT1JNQVRfUkVHRVguYWxwaGFOdW1iZXJPckVtcHR5KSxcbiAgQUxQSEFfU1BBQ0U6IGNoZWNrRm9ybWF0KEZPUk1BVF9SRUdFWC5hbHBoYVNwYWNlKSxcbiAgRU1BSUw6IGNoZWNrRm9ybWF0KEZPUk1BVF9SRUdFWC5lbWFpbCksXG4gIE5VTUJFUjogY2hlY2tGb3JtYXQoRk9STUFUX1JFR0VYLm51bWJlckZvcm1hdHRlZCksXG4gIFBIT05FOiBjaGVja0Zvcm1hdChGT1JNQVRfUkVHRVgucGhvbmUpLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgVmFsaWRhdGlvbkVycm9yID0gc3RyaW5nIHwgYm9vbGVhbjtcbmV4cG9ydCB0eXBlIFZhbGlkYXRpb25SZXN1bHQgPSB7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgdmFsaWQ6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBWYWxpZGF0aW9uTGVuZ3RoID0ge1xuICBtYXhsZW5ndGg/OiBudW1iZXI7XG4gIG1pbmxlbmd0aD86IG51bWJlcjtcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICB2YWx1ZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgVmFsaWRhdG9yID0gKHZhbHVlOiBzdHJpbmcpID0+IFZhbGlkYXRpb25SZXN1bHQ7XG4iXSwibmFtZXMiOlsiT1JJRU5UQVRJT04iLCJDU1MiLCJ1dGlsaXRpZXMiLCJicmVha3BvaW50IiwidXRpbGl0eSIsIlJFQUxNIiwiU0laRSIsIlNJWkVfQlVUVE9OIiwiZm9ybWF0TnVtYmVyIiwiaW5wdXQiLCJvdXRwdXQiLCJkaWdpdHMiLCJmb3JtYXRQYXNjYWxDYXNlIiwid29yZCIsImZvcm1hdFBob25lIiwiZm9ybWF0UHJpY2UiLCJpbm5lclNWRyIsInJlZiIsIndhdGNoIiwicHJvcHMiLCJpZCIsIm5hbWUiLCJwcmVmaXgiLCJyZWFsbUZvbGRlciIsImNvbXBvbmVudCIsImRlZmluZUFzeW5jQ29tcG9uZW50IiwiX192YXJpYWJsZUR5bmFtaWNJbXBvcnRSdW50aW1lSGVscGVyIiwibWFya1JhdyIsIklDT04iLCJJQ09OX1JFQUxNIiwiaGFuZGxlVG9nZ2xlQ2xpY2siLCJlbWl0IiwiRUxFTUVOVCIsIkVMRU1FTlRfVEVYVF9BU19JQ09OIiwiUFJJT1JJVFkiLCJUQVJHRVQiLCJBTEVSVCIsImljb24iLCJjb21wdXRlZCIsIkJBREdFX1RSVVNURUQiLCJoYW5kbGVDbGljayIsImluZGV4IiwiVFlQRV9DQVJEIiwiY29udGVudFJlZiIsImZyYW1lUmVmIiwiY29udGVudFJpZ2h0RWRnZSIsImNvbnRlbnRXaWR0aCIsImN1cnJlbnRTbGlkZSIsImZyYW1lV2lkdGgiLCJoYXNPdmVyZmxvdyIsImlzTGFzdFNsaWRlIiwibGFzdFBvc2l0aW9uIiwic2hvd0J1dHRvbnMiLCJtZWFzdXJlQ3VycmVudFNsaWRlIiwic2xpZGVPZmZzZXRzIiwic2xpZGUiLCJjbG9zZXN0U2xpZGVPZmZzZXQiLCJwcmV2IiwiY3VyciIsIm1lYXN1cmVEb20iLCJoYW5kbGVTY3JvbGwiLCJzY3JvbGxUb1NsaWRlIiwic2xpZGVJbmRleCIsInNob3dOZXh0U2xpZGUiLCJzaG93UHJldmlvdXNTbGlkZSIsIm9uTW91bnRlZCIsIm9uVW5tb3VudGVkIiwib25VcGRhdGVkIiwiaW1hZ2VEZWZhdWx0IiwicGljdHVyZSIsImltZyIsInNldEltYWdlRnJvbURlZmF1bHQiLCJjdXJyZW50U3JjIiwiX2EiLCJwaWN0dXJlU291cmNlIiwiX2IiLCJpc0NoZWNrZWQiLCJjaGVja2VkIiwibmV3VmFsdWUiLCJvbGRWYWx1ZSIsImVycm9yTWVzc2FnZURlZmF1bHQiLCJub0Vycm9yIiwiY2hlY2tGb3JtYXQiLCJmb3JtYXQiLCJ2YWx1ZSIsInJlc3VsdCIsImdldEVycm9yTWVzc2FnZSIsImVycm9yRnJvbVByb3BzIiwiZXJyb3JGcm9tUmVmIiwiZ2V0RmllbGRIYXNFcnJvciIsImdldEZpZWxkTGVuZ3RoSXNWYWxpZCIsIm1heGxlbmd0aCIsIm1pbmxlbmd0aCIsInJlcXVpcmVkIiwiaXNFbXB0eUFuZFVucmVxdWlyZWQiLCJpc1Rvb0xvbmciLCJoYW5kbGVGaWVsZFZhbGlkYXRpb24iLCJlcnJvciIsInZhbGlkYXRvcnMiLCJ2YWxpZGF0aW9uIiwidmFsaWRhdGVQcm9wZXJ0eSIsImxlbmd0aFZhbGlkYXRpb24iLCJ2YWxpZGF0ZUxlbmd0aCIsInJlc3BvbnNlIiwidmFsaWRhdG9yIiwiaGFzRm9jdXMiLCJlcnJvck1lc3NhZ2UiLCJmb3JtYXR0ZWRMYWJlbCIsImhhc0Vycm9yIiwiaGFzTWluaWxhYmVsIiwiaXNFbXB0eSIsImV4cGFuZE9wdGlvbnMiLCJldmVudCIsImhhbmRsZUZvY3VzIiwiaGFuZGxlRm9jdXNPdXQiLCJfX2V4cG9zZSIsIlRFWFRfSU5QVVRfVFlQRSIsInNob3dQYXNzd29yZCIsImhhc0NsZWFyIiwidHlwZSIsImhhbmRsZUNsZWFyIiwiaGFuZGxlVmFsaWRhdGlvbiIsImhhbmRsZUlucHV0IiwidXBkYXRlVmFsdWUiLCJCUkVBS1BPSU5UIiwiTUVESUEiLCJzZXRTY3JvbGxMb2NrIiwiaXNMb2NrZWQiLCJib2R5Iiwic2Nyb2xsWSIsIm5leHRUaWNrIiwic2F2ZWRTY3JvbGxZIiwiVE9QX0xBWUVSX0lEIiwiaW5pdEZhdXhUb3BMYXllciIsInRvcExheWVyIiwibW9kYWxDb250ZW50IiwibW9kYWxEaWFsb2ciLCJ0cmlnZ2VyTmF0aXZlRGlhbG9nT3BlbiIsInRyaWdnZXJOYXRpdmVEaWFsb2dDbG9zZSIsInNjcm9sbENvbnRlbnRUb1RvcCIsInBhZ2VDdXJyZW50IiwicGFnaW5hdGlvbkJ1dHRvbnMiLCJlbXB0eSIsInNpZGVzIiwiYWxpZ25tZW50cyIsInBsYWNlbWVudHMiLCJhY2MiLCJzaWRlIiwibWluIiwibWF4Iiwicm91bmQiLCJmbG9vciIsImNyZWF0ZUNvb3JkcyIsInYiLCJvcHBvc2l0ZVNpZGVNYXAiLCJvcHBvc2l0ZUFsaWdubWVudE1hcCIsImNsYW1wIiwic3RhcnQiLCJlbmQiLCJldmFsdWF0ZSIsInBhcmFtIiwiZ2V0U2lkZSIsInBsYWNlbWVudCIsImdldEFsaWdubWVudCIsImdldE9wcG9zaXRlQXhpcyIsImF4aXMiLCJnZXRBeGlzTGVuZ3RoIiwiZ2V0U2lkZUF4aXMiLCJnZXRBbGlnbm1lbnRBeGlzIiwiZ2V0QWxpZ25tZW50U2lkZXMiLCJyZWN0cyIsInJ0bCIsImFsaWdubWVudCIsImFsaWdubWVudEF4aXMiLCJsZW5ndGgiLCJtYWluQWxpZ25tZW50U2lkZSIsImdldE9wcG9zaXRlUGxhY2VtZW50IiwiZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQiLCJleHBhbmRQYWRkaW5nT2JqZWN0IiwicGFkZGluZyIsImdldFBhZGRpbmdPYmplY3QiLCJyZWN0VG9DbGllbnRSZWN0IiwicmVjdCIsIngiLCJ5Iiwid2lkdGgiLCJoZWlnaHQiLCJjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudCIsIl9yZWYiLCJyZWZlcmVuY2UiLCJmbG9hdGluZyIsInNpZGVBeGlzIiwiYWxpZ25MZW5ndGgiLCJpc1ZlcnRpY2FsIiwiY29tbW9uWCIsImNvbW1vblkiLCJjb21tb25BbGlnbiIsImNvb3JkcyIsImNvbXB1dGVQb3NpdGlvbiIsImNvbmZpZyIsInN0cmF0ZWd5IiwibWlkZGxld2FyZSIsInBsYXRmb3JtIiwidmFsaWRNaWRkbGV3YXJlIiwic3RhdGVmdWxQbGFjZW1lbnQiLCJtaWRkbGV3YXJlRGF0YSIsInJlc2V0Q291bnQiLCJpIiwiZm4iLCJuZXh0WCIsIm5leHRZIiwiZGF0YSIsInJlc2V0IiwiZGV0ZWN0T3ZlcmZsb3ciLCJzdGF0ZSIsIm9wdGlvbnMiLCJfYXdhaXQkcGxhdGZvcm0kaXNFbGUiLCJlbGVtZW50cyIsImJvdW5kYXJ5Iiwicm9vdEJvdW5kYXJ5IiwiZWxlbWVudENvbnRleHQiLCJhbHRCb3VuZGFyeSIsInBhZGRpbmdPYmplY3QiLCJlbGVtZW50IiwiY2xpcHBpbmdDbGllbnRSZWN0Iiwib2Zmc2V0UGFyZW50Iiwib2Zmc2V0U2NhbGUiLCJlbGVtZW50Q2xpZW50UmVjdCIsImdldFBsYWNlbWVudExpc3QiLCJhdXRvQWxpZ25tZW50IiwiYWxsb3dlZFBsYWNlbWVudHMiLCJhdXRvUGxhY2VtZW50IiwiX21pZGRsZXdhcmVEYXRhJGF1dG9QIiwiX21pZGRsZXdhcmVEYXRhJGF1dG9QMiIsIl9wbGFjZW1lbnRzVGhhdEZpdE9uRSIsImNyb3NzQXhpcyIsImRldGVjdE92ZXJmbG93T3B0aW9ucyIsInBsYWNlbWVudHMkMSIsIm92ZXJmbG93IiwiY3VycmVudEluZGV4IiwiY3VycmVudFBsYWNlbWVudCIsImFsaWdubWVudFNpZGVzIiwiY3VycmVudE92ZXJmbG93cyIsImFsbE92ZXJmbG93cyIsIm5leHRQbGFjZW1lbnQiLCJwbGFjZW1lbnRzU29ydGVkQnlNb3N0U3BhY2UiLCJkIiwiYSIsImIiLCJyZXNldFBsYWNlbWVudCIsImNvbnZlcnRWYWx1ZVRvQ29vcmRzIiwibWFpbkF4aXNNdWx0aSIsImNyb3NzQXhpc011bHRpIiwicmF3VmFsdWUiLCJtYWluQXhpcyIsIm9mZnNldCIsIl9taWRkbGV3YXJlRGF0YSRvZmZzZSIsIl9taWRkbGV3YXJlRGF0YSRhcnJvdyIsImRpZmZDb29yZHMiLCJzaGlmdCIsImNoZWNrTWFpbkF4aXMiLCJjaGVja0Nyb3NzQXhpcyIsImxpbWl0ZXIiLCJtYWluQXhpc0Nvb3JkIiwiY3Jvc3NBeGlzQ29vcmQiLCJtaW5TaWRlIiwibWF4U2lkZSIsImxpbWl0ZWRDb29yZHMiLCJoYXNXaW5kb3ciLCJnZXROb2RlTmFtZSIsIm5vZGUiLCJpc05vZGUiLCJnZXRXaW5kb3ciLCJfbm9kZSRvd25lckRvY3VtZW50IiwiZ2V0RG9jdW1lbnRFbGVtZW50IiwiaXNFbGVtZW50IiwiaXNIVE1MRWxlbWVudCIsImlzU2hhZG93Um9vdCIsImlzT3ZlcmZsb3dFbGVtZW50Iiwib3ZlcmZsb3dYIiwib3ZlcmZsb3dZIiwiZGlzcGxheSIsImdldENvbXB1dGVkU3R5bGUiLCJpc1RhYmxlRWxlbWVudCIsImlzVG9wTGF5ZXIiLCJzZWxlY3RvciIsImlzQ29udGFpbmluZ0Jsb2NrIiwiZWxlbWVudE9yQ3NzIiwid2Via2l0IiwiaXNXZWJLaXQiLCJjc3MiLCJnZXRDb250YWluaW5nQmxvY2siLCJjdXJyZW50Tm9kZSIsImdldFBhcmVudE5vZGUiLCJpc0xhc3RUcmF2ZXJzYWJsZU5vZGUiLCJnZXROb2RlU2Nyb2xsIiwiZ2V0TmVhcmVzdE92ZXJmbG93QW5jZXN0b3IiLCJwYXJlbnROb2RlIiwiZ2V0T3ZlcmZsb3dBbmNlc3RvcnMiLCJsaXN0IiwidHJhdmVyc2VJZnJhbWVzIiwiX25vZGUkb3duZXJEb2N1bWVudDIiLCJzY3JvbGxhYmxlQW5jZXN0b3IiLCJpc0JvZHkiLCJ3aW4iLCJmcmFtZUVsZW1lbnQiLCJnZXRGcmFtZUVsZW1lbnQiLCJnZXRDc3NEaW1lbnNpb25zIiwiaGFzT2Zmc2V0Iiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJzaG91bGRGYWxsYmFjayIsInVud3JhcEVsZW1lbnQiLCJnZXRTY2FsZSIsImRvbUVsZW1lbnQiLCIkIiwibm9PZmZzZXRzIiwiZ2V0VmlzdWFsT2Zmc2V0cyIsInNob3VsZEFkZFZpc3VhbE9mZnNldHMiLCJpc0ZpeGVkIiwiZmxvYXRpbmdPZmZzZXRQYXJlbnQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJpbmNsdWRlU2NhbGUiLCJpc0ZpeGVkU3RyYXRlZ3kiLCJjbGllbnRSZWN0Iiwic2NhbGUiLCJ2aXN1YWxPZmZzZXRzIiwib2Zmc2V0V2luIiwiY3VycmVudFdpbiIsImN1cnJlbnRJRnJhbWUiLCJpZnJhbWVTY2FsZSIsImlmcmFtZVJlY3QiLCJsZWZ0IiwidG9wIiwiZ2V0V2luZG93U2Nyb2xsQmFyWCIsImxlZnRTY3JvbGwiLCJnZXRIVE1MT2Zmc2V0IiwiZG9jdW1lbnRFbGVtZW50Iiwic2Nyb2xsIiwiaWdub3JlU2Nyb2xsYmFyWCIsImh0bWxSZWN0IiwiY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3QiLCJvZmZzZXRzIiwiaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQiLCJvZmZzZXRSZWN0IiwiaHRtbE9mZnNldCIsImdldENsaWVudFJlY3RzIiwiZ2V0RG9jdW1lbnRSZWN0IiwiaHRtbCIsImdldFZpZXdwb3J0UmVjdCIsInZpc3VhbFZpZXdwb3J0IiwidmlzdWFsVmlld3BvcnRCYXNlZCIsImdldElubmVyQm91bmRpbmdDbGllbnRSZWN0IiwiZ2V0Q2xpZW50UmVjdEZyb21DbGlwcGluZ0FuY2VzdG9yIiwiY2xpcHBpbmdBbmNlc3RvciIsImhhc0ZpeGVkUG9zaXRpb25BbmNlc3RvciIsInN0b3BOb2RlIiwiZ2V0Q2xpcHBpbmdFbGVtZW50QW5jZXN0b3JzIiwiY2FjaGUiLCJjYWNoZWRSZXN1bHQiLCJlbCIsImN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlIiwiZWxlbWVudElzRml4ZWQiLCJjb21wdXRlZFN0eWxlIiwiY3VycmVudE5vZGVJc0NvbnRhaW5pbmciLCJhbmNlc3RvciIsImdldENsaXBwaW5nUmVjdCIsImNsaXBwaW5nQW5jZXN0b3JzIiwiZmlyc3RDbGlwcGluZ0FuY2VzdG9yIiwiY2xpcHBpbmdSZWN0IiwiYWNjUmVjdCIsImdldERpbWVuc2lvbnMiLCJnZXRSZWN0UmVsYXRpdmVUb09mZnNldFBhcmVudCIsImlzU3RhdGljUG9zaXRpb25lZCIsImdldFRydWVPZmZzZXRQYXJlbnQiLCJwb2x5ZmlsbCIsInJhd09mZnNldFBhcmVudCIsImdldE9mZnNldFBhcmVudCIsInN2Z09mZnNldFBhcmVudCIsImdldEVsZW1lbnRSZWN0cyIsImdldE9mZnNldFBhcmVudEZuIiwiZ2V0RGltZW5zaW9uc0ZuIiwiZmxvYXRpbmdEaW1lbnNpb25zIiwiaXNSVEwiLCJyZWN0c0FyZUVxdWFsIiwib2JzZXJ2ZU1vdmUiLCJvbk1vdmUiLCJpbyIsInRpbWVvdXRJZCIsInJvb3QiLCJjbGVhbnVwIiwiX2lvIiwicmVmcmVzaCIsInNraXAiLCJ0aHJlc2hvbGQiLCJlbGVtZW50UmVjdEZvclJvb3RNYXJnaW4iLCJpbnNldFRvcCIsImluc2V0UmlnaHQiLCJpbnNldEJvdHRvbSIsImluc2V0TGVmdCIsImlzRmlyc3RVcGRhdGUiLCJoYW5kbGVPYnNlcnZlIiwiZW50cmllcyIsInJhdGlvIiwiYXV0b1VwZGF0ZSIsInVwZGF0ZSIsImFuY2VzdG9yU2Nyb2xsIiwiYW5jZXN0b3JSZXNpemUiLCJlbGVtZW50UmVzaXplIiwibGF5b3V0U2hpZnQiLCJhbmltYXRpb25GcmFtZSIsInJlZmVyZW5jZUVsIiwiYW5jZXN0b3JzIiwiY2xlYW51cElvIiwicmVvYnNlcnZlRnJhbWUiLCJyZXNpemVPYnNlcnZlciIsImZpcnN0RW50cnkiLCJfcmVzaXplT2JzZXJ2ZXIiLCJmcmFtZUlkIiwicHJldlJlZlJlY3QiLCJmcmFtZUxvb3AiLCJuZXh0UmVmUmVjdCIsIl9yZXNpemVPYnNlcnZlcjIiLCJvZmZzZXQkMSIsImF1dG9QbGFjZW1lbnQkMSIsInNoaWZ0JDEiLCJtZXJnZWRPcHRpb25zIiwicGxhdGZvcm1XaXRoQ2FjaGUiLCJjb21wdXRlUG9zaXRpb24kMSIsImlzQ29tcG9uZW50UHVibGljSW5zdGFuY2UiLCJ0YXJnZXQiLCJ0b1ZhbHVlIiwic291cmNlIiwidW5yZWYiLCJnZXREUFIiLCJyb3VuZEJ5RFBSIiwiZHByIiwidXNlRmxvYXRpbmciLCJ3aGlsZUVsZW1lbnRzTW91bnRlZE9wdGlvbiIsIm9wZW5PcHRpb24iLCJfdG9WYWx1ZSIsIm1pZGRsZXdhcmVPcHRpb24iLCJwbGFjZW1lbnRPcHRpb24iLCJfdG9WYWx1ZTIiLCJzdHJhdGVneU9wdGlvbiIsIl90b1ZhbHVlMyIsInRyYW5zZm9ybU9wdGlvbiIsIl90b1ZhbHVlNCIsInJlZmVyZW5jZUVsZW1lbnQiLCJmbG9hdGluZ0VsZW1lbnQiLCJzaGFsbG93UmVmIiwiaXNQb3NpdGlvbmVkIiwiZmxvYXRpbmdTdHlsZXMiLCJpbml0aWFsU3R5bGVzIiwieFZhbCIsInlWYWwiLCJ3aGlsZUVsZW1lbnRzTW91bnRlZENsZWFudXAiLCJvcGVuIiwicG9zaXRpb24iLCJhdHRhY2giLCJnZXRDdXJyZW50U2NvcGUiLCJvblNjb3BlRGlzcG9zZSIsInNoYWxsb3dSZWFkb25seSIsImlzQ2xpY2tPdXRzaWRlIiwiYW5jaG9yIiwiaXNIb3ZlcmVkIiwiaXNUb2dnbGVkT3BlbiIsIm9mZnNldE1pZGRsZXdhcmUiLCJpc1Nob3dQb3BvdmVyIiwiaGFuZGxlUGVybWFuZW50T3BlbkJvZHlDbGljayIsImUiLCJoYW5kbGVBbmNob3JFbGVtZW50TW91c2VPdmVyIiwiaGFuZGxlQW5jaG9yRWxlbWVudE1vdXNlTGVhdmUiLCJoYW5kbGVBbmNob3JFbGVtZW50Q2xpY2siLCJhZGRMaXN0ZW5lcnNUb0FuY2hvckVsZW1lbnQiLCJyZW1vdmVMaXN0ZW5lcnNGcm9tQW5jaG9yRWxlbWVudCIsImhhbmRsZVBlcm1hbmVudE9wZW5Cb2R5S2V5ZG93biIsImFkZE9wZW5MaXN0ZW5lcnNUb1Jvb3QiLCJyZW1vdmVPcGVuTGlzdGVuZXJzRnJvbVJvb3QiLCJ1cGRhdGVBbmNob3JFbGVtZW50Iiwid2F0Y2hFZmZlY3QiLCJvbkJlZm9yZU1vdW50IiwiRk9STUFUIiwiRk9STUFUX1JFR0VYIiwiTUVESUFfU0xJREVfVFlQRVMiLCJWQUxJREFUT1IiXSwibWFwcGluZ3MiOiI7QUFBTyxNQUFNQSxLQUFjO0FBQUEsRUFDekIsWUFBWTtBQUFBLEVBQ1osVUFBVTtBQUNaLEdDQ2FDLElBQU07QUFBQSxFQUNqQixnQkFBZ0IsQ0FBQ0MsR0FBcUJDLE1BQzdCRCxFQUFVLElBQUksQ0FBQ0UsTUFBWSxHQUFHRCxDQUFVLElBQUlDLENBQU8sRUFBRTtBQUFBLEVBRTlELE9BQU87QUFBQSxJQUNMLEdBQUc7QUFBQSxNQUNELFFBQVE7QUFBQSxNQUNSLE1BQU07QUFBQSxNQUNOLE9BQU87QUFBQSxJQUNUO0FBQUEsSUFDQSxHQUFHO0FBQUEsTUFDRCxTQUFTO0FBQUEsTUFDVCxRQUFRO0FBQUEsSUFDVjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLE9BQU87QUFBQSxJQUNMLFFBQVE7QUFBQSxJQUNSLFNBQVM7QUFBQSxJQUNULFFBQVE7QUFBQSxJQUNSLEtBQUs7QUFBQSxJQUNMLE9BQU87QUFBQSxFQUNUO0FBQUEsRUFDQSxPQUFPO0FBQUEsSUFDTCxRQUFRO0FBQUEsSUFDUixRQUFRO0FBQUEsSUFDUixLQUFLO0FBQUEsSUFDTCxPQUFPO0FBQUEsRUFDVDtBQUFBLEVBQ0EsSUFBSTtBQUFBLElBQ0YsUUFBUTtBQUFBLE1BQ04sU0FBUztBQUFBLFFBQ1AsT0FBTztBQUFBLFFBQ1AsTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLFFBQ1QsU0FBUztBQUFBLE1BQ1g7QUFBQSxNQUNBLFNBQVM7QUFBQSxRQUNQLE9BQU87QUFBQSxRQUNQLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxRQUNULFNBQVM7QUFBQSxNQUNYO0FBQUEsSUFDRjtBQUFBLElBQ0EsU0FBUztBQUFBLElBQ1QsTUFBTTtBQUFBLElBQ04sU0FBUztBQUFBLElBQ1QsV0FBVztBQUFBLElBQ1gsU0FBUztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsT0FBTztBQUFBLE1BQ1AsU0FBUztBQUFBLE1BQ1QsVUFBVTtBQUFBLE1BQ1YsVUFBVTtBQUFBLE1BQ1YsU0FBUztBQUFBLElBQ1g7QUFBQSxJQUNBLGFBQWE7QUFBQSxNQUNYLGFBQWE7QUFBQSxNQUNiLGFBQWE7QUFBQSxNQUNiLGVBQWU7QUFBQSxNQUNmLGNBQWM7QUFBQSxJQUNoQjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLFFBQVE7QUFBQSxJQUNOLE9BQU87QUFBQSxNQUNMLFFBQVE7QUFBQSxRQUNOLE9BQU87QUFBQSxRQUNQLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxRQUNULFNBQVM7QUFBQSxNQUNYO0FBQUEsTUFDQSxTQUFTO0FBQUEsTUFDVCxTQUFTO0FBQUEsTUFDVCxVQUFVO0FBQUEsTUFDVixNQUFNO0FBQUEsTUFDTixLQUFLO0FBQUEsTUFDTCxTQUFTO0FBQUEsSUFDWDtBQUFBLElBQ0EsUUFBUTtBQUFBLE1BQ04sTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLE1BQ1QsTUFBTTtBQUFBLE1BQ04sS0FBSztBQUFBLE1BQ0wsTUFBTTtBQUFBLElBQ1I7QUFBQSxJQUNBLFFBQVE7QUFBQSxNQUNOLE1BQU07QUFBQSxNQUNOLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxJQUNQO0FBQUEsSUFDQSxNQUFNO0FBQUEsTUFDSixNQUFNO0FBQUEsTUFD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LE1BQU07QUFBQSxNQUNOLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLE1BQU07QUFBQSxJQUNSO0FBQUEsSUFDQSxNQUFNO0FBQUEsTUFDSixNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFDVCxNQUFNO0FBQUEsTUFDTixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTCxNQUFNO0FBQUEsSUFDUjtBQUFBLElBQ0EsTUFBTTtBQUFBLE1BQ0osTUFBTTtBQUFBLE1BQ04sTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLE1BQ1QsTUFBTTtBQUFBLE1BQ04sS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsTUFBTTtBQUFBLElBQ1I7QUFBQSxJQUNBLE9BQU87QUFBQSxNQUNMLE1BQU07QUFBQSxNQUNOLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxNQUNULE1BQU07QUFBQSxNQUNOLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLE1BQU07QUFBQSxJQUNSO0FBQUEsSUFDQSxLQUFLO0FBQUEsTUFDSCxNQUFNO0FBQUEsTUFDTixNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFDVCxNQUFNO0FBQUEsTUFDTixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTCxNQUFNO0FBQUEsSUFDUjtBQUFBLElBQ0EsR0FBRztBQUFBLE1BQ0QsTUFBTTtBQUFBLE1BQ04sTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLE1BQ1QsTUFBTTtBQUFBLE1BQ04sS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsTUFBTTtBQUFBLElBQ1I7QUFBQSxJQUNBLEdBQUc7QUFBQSxNQUNELE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxNQUNULE1BQU07QUFBQSxNQUNOLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLE1BQU07QUFBQSxJQUNSO0FBQUEsRUFDRjtBQUFBLEVBQ0EsUUFBUTtBQUFBLElBQ04sUUFBUTtBQUFBLElBQ1IsU0FBUztBQUFBLElBQ1QsT0FBTztBQUFBLElBQ1AsWUFBWTtBQUFBLEVBQ2Q7QUFBQSxFQUNBLFNBQVM7QUFBQSxJQUNQLEtBQUs7QUFBQSxJQUNMLElBQUk7QUFBQSxFQUNOO0FBQUEsRUFDQSxVQUFVO0FBQUEsSUFDUixHQUFHO0FBQUEsTUFDRCxNQUFNO0FBQUEsTUFDTixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsSUFDVjtBQUFBLElBQ0EsSUFBSTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sUUFBUTtBQUFBLElBQ1Y7QUFBQSxJQUNBLEdBQUc7QUFBQSxNQUNELE1BQU07QUFBQSxNQUNOLFFBQVE7QUFBQSxJQUNWO0FBQUEsRUFDRjtBQUFBLEVBQ0EsU0FBUztBQUFBLElBQ1AsUUFBUTtBQUFBLE1BQ04sTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLE1BQ1QsTUFBTTtBQUFBLE1BQ04sS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsTUFBTTtBQUFBLElBQ1I7QUFBQSxJQUNBLE1BQU07QUFBQSxNQUNKLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxNQUNULE1BQU07QUFBQSxNQUNOLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLE1BQU07QUFBQSxJQUNSO0FBQUEsSUFDQSxNQUFNO0FBQUEsTUFDSixNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFDVCxNQUFNO0FBQUEsTUFDTixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTCxNQUFNO0FBQUEsSUFDUjtBQUFBLElBQ0EsT0FBTztBQUFBLE1BQ0wsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLE1BQ1QsTUFBTTtBQUFBLE1BQ04sS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsTUFBTTtBQUFBLElBQ1I7QUFBQSxJQUNBLEtBQUs7QUFBQSxNQUNILE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxNQUNULE1BQU07QUFBQSxNQUNOLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLE1BQU07QUFBQSxJQUNSO0FBQUEsSUFDQSxHQUFHO0FBQUEsTUFDRCxNQUFNO0FBQUEsTUFDTixTQUFT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QSxFQUFJLFlBQVksTUFDaEJBLEVBQUksV0FBVyxZQUNmQSxFQUFJLFdBQVcsYUFDZkEsRUFBSSxPQUFPLEtBQUssTUFDaEJBLEVBQUksT0FBTyxLQUFLLEtBQ2hCQSxFQUFJLE9BQU8sS0FBSyxNQUNoQkEsRUFBSSxPQUFPLEtBQUssU0FDaEJBLEVBQUksT0FBTyxLQUFLLEtBQ2hCQSxFQUFJLE9BQU8sS0FBSyxNQUNoQkEsRUFBSSxPQUFPLEVBQUUsTUFDYkEsRUFBSSxPQUFPLEVBQUUsS0FDYkEsRUFBSSxPQUFPLEVBQUUsTUFDYkEsRUFBSSxPQUFPLEVBQUUsU0FDYkEsRUFBSSxPQUFPLEVBQUUsS0FDYkEsRUFBSSxPQUFPLEVBQUUsTUFDYkEsRUFBSSxPQUFPLElBQUksTUFDZkEsRUFBSSxPQUFPLElBQUksS0FDZkEsRUFBSSxPQUFPLElBQUksTUFDZkEsRUFBSSxPQUFPLElBQUksU0FDZkEsRUFBSSxPQUFPLElBQUksS0FDZkEsRUFBSSxPQUFPLElBQUksTUFDZkEsRUFBSSxPQUFPLEVBQUUsTUFDYkEsRUFBSSxPQUFPLEVBQUUsS0FDYkEsRUFBSSxPQUFPLEVBQUUsTUFDYkEsRUFBSSxPQUFPLEVBQUUsU0FDYkEsRUFBSSxPQUFPLEVBQUUsS0FDYkEsRUFBSSxPQUFPLEVBQUUsTUFDYkEsRUFBSSxPQUFPLEVBQUUsTUFDYkEsRUFBSSxPQUFPLE1BQU0sTUFDakJBLEVBQUksT0FBTyxNQUFNLEtBQ2pCQSxFQUFJLE9BQU8sTUFBTSxNQUNqQkEsRUFBSSxPQUFPLE1BQU0sU0FDakJBLEVBQUksT0FBTyxNQUFNLEtBQ2pCQSxFQUFJLE9BQU8sTUFBTSxNQUNqQkEsRUFBSSxPQUFPLE1BQU0sTUFDakJBLEVBQUksT0FBTyxPQUFPLE1BQ2xCQSxFQUFJLE9BQU8sT0FBTyxLQUNsQkEsRUFBSSxPQUFPLE9BQU8sTUFDbEJBLEVBQUksT0FBTyxPQUFPLFNBQ2xCQSxFQUFJLE9BQU8sT0FBTyxLQUNsQkEsRUFBSSxPQUFPLE9BQU8sTUFDbEJBLEVBQUksT0FBTyxLQUFLLE1BQ2hCQSxFQUFJLE9BQU8sS0FBSyxLQUNoQkEsRUFBSSxPQUFPLEtBQUssTUFDaEJBLEVBQUksT0FBTyxLQUFLLFNBQ2hCQSxFQUFJLE9BQU8sS0FBSyxLQUNoQkEsRUFBSSxPQUFPLEtBQUssTUFDaEJBLEVBQUksT0FBTyxLQUFLLE1BQ2hCQSxFQUFJLE9BQU8sS0FBSyxLQUNoQkEsRUFBSSxPQUFPLEtBQUssS0FDaEJBLEVBQUksT0FBTyxJQUFJLEtBQ2ZBLEVBQUksT0FBTyxJQUFJLEtBQ2ZBLEVBQUksT0FBTyxNQUFNLEtBQ2pCQSxFQUFJLE9BQU8sTUFBTSxLQUNqQkEsRUFBSSxPQUFPLE9BQU8sS0FDbEJBLEVBQUksT0FBTyxPQUFPLEtBQ2xCQSxFQUFJLE9BQU8sS0FBSyxLQUNoQkEsRUFBSSxPQUFPLEtBQUssS0FDaEJBLEVBQUksT0FBTyxPQUFPLEtBQ2xCQSxFQUFJLE9BQU8sT0FBTyxNQUNsQkEsRUFBSSxPQUFPLE9BQU8sU0FDbEJBLEVBQUksT0FBTyxPQUFPLE1BQ2xCQSxFQUFJLFFBQVEsS0FBSyxNQUNqQkEsRUFBSSxRQUFRLEtBQUssS0FDakJBLEVBQUksUUFBUSxLQUFLLE1BQ2pCQSxFQUFJLFFBQVEsS0FBSyxTQUNqQkEsRUFBSSxRQUFRLEtBQUssS0FDakJBLEVBQUksUUFBUSxLQUFLLE1BQ2pCQSxFQUFJLFFBQVEsRUFBRSxNQUNkQSxFQUFJLFFBQVEsRUFBRSxLQUNkQSxFQUFJLFFBQVEsRUFBRSxNQUNkQSxFQUFJLFFBQVEsRUFBRSxTQUNkQSxFQUFJLFFBQVEsRUFBRSxLQUNkQSxFQUFJLFFBQVEsRUFBRSxNQUNkQSxFQUFJLFFBQVEsSUFBSSxNQUNoQkEsRUFBSSxRQUFRLElBQUksS0FDaEJBLEVBQUksUUFBUSxJQUFJLE1BQ2hCQSxFQUFJLFFBQVEsSUFBSSxTQUNoQkEsRUFBSSxRQUFRLElBQUksS0FDaEJBLEVBQUksUUFBUSxJQUFJLE1BQ2hCQSxFQUFJLFFBQVEsRUFBRSxNQUNkQSxFQUFJLFFBQVEsRUFBRSxLQUNkQSxFQUFJLFFBQVEsRUFBRSxNQUNkQSxFQUFJLFFBQVEsRUFBRSxTQUNkQSxFQUFJLFFBQVEsRUFBRSxLQUNkQSxFQUFJLFFBQVEsRUFBRSxNQUNkQSxFQUFJLFFBQVEsTUFBTSxNQUNsQkEsRUFBSSxRQUFRLE1BQU0sS0FDbEJBLEVBQUksUUFBUSxNQUFNLE1BQ2xCQSxFQUFJLFFBQVEsTUFBTSxTQUNsQkEsRUFBSSxRQUFRLE1BQU0sS0FDbEJBLEVBQUksUUFBUSxNQUFNLE1BQ2xCQSxFQUFJLFFBQVEsT0FBTyxNQUNuQkEsRUFBSSxRQUFRLE9BQU8sS0FDbkJBLEVBQUksUUFBUSxPQUFPLE1BQ25CQSxFQUFJLFFBQVEsT0FBTyxTQUNuQkEsRUFBSSxRQUFRLE9BQU8sS0FDbkJBLEVBQUksUUFBUSxPQUFPLE1BQ25CQSxFQUFJLFFBQVEsS0FBSyxNQUNqQkEsRUFBSSxRQUFRLEtBQUssS0FDakJBLEVBQUksUUFBUSxLQUFLLE1BQ2pCQSxFQUFJLFFBQVEsS0FBSyxTQUNqQkEsRUFBSSxRQUFRLEtBQUssS0FDakJBLEVBQUksUUFBUSxLQUFLLE1BQ2pCQSxFQUFJLE1BQU0sVUFDVkEsRUFBSSxNQUFNLE1BQ1ZBLEVBQUksTUFBTSxNQUNWQSxFQUFJLE9BQU8sTUFDWEEsRUFBSSxPQUFPLE1BQ1hBLEVBQUksTUFBTSxFQUFFLFFBQ1pBLEVBQUksWUFDSkEsRUFBSSxPQUFPLGFBQ1hBLEVBQUksT0FBTyxTQUNYQSxFQUFJLE9BQU8sTUFDWEEsRUFBSSxLQUFLLEtBQUssUUFDZEEsRUFBSSxLQUFLLEtBQUssVUFDZEEsRUFBSSxLQUFLLEtBQUssU0FDZEEsRUFBSSxLQUFLLEtBQUssUUFDZEEsRUFBSSxLQUFLLEtBQUssYUFDZEEsRUFBSSxLQUFLLEtBQUssWUFDZEEsRUFBSSxLQUFLLE9BQU8sY0FDaEJBLEVBQUksS0FBSyxPQUFPLGNBQ2hCQSxFQUFJLEtBQUssT0FBTyxhQUNoQkEsRUFBSSxLQUFLLE9BQU8sZUFDaEJBLEVBQUksYUFBYSxLQUNqQkEsRUFBSSxPQUFPLFFBQ1hBLEVBQUksT0FBTyxTQUNYQSxFQUFJLE9BQU8sT0FDWEEsRUFBSSxPQUFPLFlBQ1hBLEVBQUks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QSxHQUFBLDJDQUFBLE1BQUEsT0FBQSwrQkFBQSxHQUFBLHlDQUFBLE1BQUEsT0FBQSw2QkFBQSxHQUFBLHFDQUFBLE1BQUEsT0FBQSx5QkFBQSxHQUFBLDJDQUFBLE1BQUEsT0FBQSwrQkFBQSxHQUFBLDRDQUFBLE1BQUEsT0FBQSxnQ0FBQSxHQUFBLHFDQUFBLE1BQUEsT0FBQSx5QkFBQSxHQUFBLHFDQUFBLE1BQUEsT0FBQSx5QkFBQSxHQUFBLHdDQUFBLE1BQUEsT0FBQSw0QkFBQSxHQUFBLHFDQUFBLE1BQUEsT0FBQSx5QkFBQSxHQUFBLGtEQUFBLE1BQUEsT0FBQSxzQ0FBQSxHQUFBLHNDQUFBLE1BQUEsT0FBQSwwQkFBQSxHQUFBLHVDQUFBLE1BQUEsT0FBQSwyQkFBQSxHQUFBLDhDQUFBLE1BQUEsT0FBQSxrQ0FBQSxHQUFBLHNDQUFBLE1BQUEsT0FBQSwwQkFBQSxHQUFBLHFDQUFBLE1BQUEsT0FBQSx5QkFBQSxHQUFBLG9DQUFBLE1BQUEsT0FBQSx3QkFBQSxHQUFBLHNDQUFBLE1BQUEsT0FBQSwwQkFBQSxHQUFBLDJDQUFBLE1BQUEsT0FBQSwrQkFBQSxHQUFBLHFDQUFBLE1BQUEsT0FBQSx5QkFBQSxHQUFBLDZDQUFBLE1BQUEsT0FBQSxpQ0FBQSxHQUFBLDBDQUFBLE1BQUEsT0FBQSw4QkFBQSxHQUFBLDBDQUFBLE1BQUEsT0FBQSw4QkFBQSxHQUFBLHdDQUFBLE1BQUEsT0FBQSw0QkFBQSxHQUFBLHdDQUFBLE1BQUEsT0FBQSw0QkFBQSxHQUFBLDhDQUFBLE1BQUEsT0FBQSxrQ0FBQSxHQUFBLG9DQUFBLE1BQUEsT0FBQSx3QkFBQSxHQUFBLDBDQUFBLE1BQUEsT0FBQSw4QkFBQSxHQUFBLDRDQUFBLE1BQUEsT0FBQSxnQ0FBQSxHQUFBLGtEQUFBLE1BQUEsT0FBQSxzQ0FBQSxHQUFBLHFDQUFBLE1BQUEsT0FBQSx5QkFBQSxHQUFBLG1DQUFBLE1BQUEsT0FBQSx1QkFBQSxHQUFBLHFDQUFBLE1BQUEsT0FBQSx5QkFBQSxHQUFBLHFDQUFBLE1BQUEsT0FBQSx5QkFBQSxHQUFBLGdEQUFBLE1BQUEsT0FBQSxvQ0FBQSxHQUFBLHNDQUFBLE1BQUEsT0FBQSwwQkFBQSxHQUFBLHlDQUFBLE1BQUEsT0FBQSw2QkFBQSxHQUFBLG9DQUFBLE1BQUEsT0FBQSx3QkFBQSxHQUFBLHlDQUFBLE1BQUEsT0FBQSw2QkFBQSxHQUFBLHdDQUFBLE1BQUEsT0FBQSw0QkFBQSxHQUFBLHNDQUFBLE1BQUEsT0FBQSwwQkFBQSxHQUFBLG9DQUFBLE1BQUEsT0FBQSx3QkFBQSxHQUFBLG9DQUFBLE1BQUEsT0FBQSx3QkFBQSxHQUFBLDJDQUFBLE1BQUEsT0FBQSwrQkFBQSxHQUFBLDBDQUFBLE1BQUEsT0FBQSw4QkFBQSxHQUFBLHlDQUFBLE1BQUEsT0FBQSw2QkFBQSxHQUFBLHdDQUFBLE1BQUEsT0FBQSw0QkFBQSxHQUFBLHNDQUFBLE1BQUEsT0FBQSwwQkFBQSxHQUFBLDZDQUFBLE1BQUEsT0FBQSxpQ0FBQSxHQUFBLHdDQUFBLE1BQUEsT0FBQSw0QkFBQSxHQUFBLDZDQUFBLE1BQUEsT0FBQSxpQ0FBQSxHQUFBLG9DQUFBLE1BQUEsT0FBQSx3QkFBQSxHQUFBLG9DQUFBLE1BQUEsT0FBQSx3QkFBQSxHQUFBLG9DQUFBLE1BQUEsT0FBQSx3QkFBQSxHQUFBLHdDQUFBLE1BQUEsT0FBQSw0QkFBQSxHQUFBLHlDQUFBLE1BQUEsT0FBQSw2QkFBQSxHQUFBLDZDQUFBLE1BQUEsT0FBQSxpQ0FBQSxHQUFBLHdDQUFBLE1BQUEsT0FBQSw0QkFBQSxHQUFBLHlDQUFBLE1BQUEsT0FBQSw2QkFBQSxHQUFBLHVDQUFBLE1BQUEsT0FBQSwyQkFBQSxHQUFBLHNDQUFBLE1BQUEsT0FBQSwwQkFBQSxHQUFBLHNDQUFBLE1BQUEsT0FBQSwwQkFBQSxHQUFBLDRDQUFBLE1BQUEsT0FBQSxnQ0FBQSxHQUFBLDJDQUFBLE1BQUEsT0FBQSwrQkFBQSxHQUFBLHlDQUFBLE1BQUEsT0FBQSw2QkFBQSxHQUFBLHlDQUFBLE1BQUEsT0FBQSw2QkFBQSxHQUFBLHNDQUFBLE1BQUEsT0FBQSwwQkFBQSxHQUFBLHFDQUFBLE1BQUEsT0FBQSx5QkFBQSxHQUFBLHdDQUFBLE1BQUEsT0FBQSw0QkFBQSxHQUFBLDRDQUFBLE1BQUEsT0FBQSxnQ0FBQSxHQUFBLHNDQUFBLE1BQUEsT0FBQSwwQkFBQSxHQUFBLDRDQUFBLE1BQUEsT0FBQSxnQ0FBQSxHQUFBLDJDQUFBLE1BQUEsT0FBQSwrQkFBQSxHQUFBLG9DQUFBLE1BQUEsT0FBQSx3QkFBQSxHQUFBLDZDQUFBLE1BQUEsT0FBQSxpQ0FBQSxHQUFBLHFDQUFBLE1BQUEsT0FBQSx5QkFBQSxHQUFBLHVDQUFBLE1BQUEsT0FBQSwyQkFBQSxHQUFBLHNDQUFBLE1BQUEsT0FBQSwwQkFBQSxHQUFBLHNDQUFBLE1BQUEsT0FBQSwwQkFBQSxHQUFBLHVDQUFBLE1BQUEsT0FBQSwyQkFBQSxHQUFBLG9DQUFBLE1BQUEsT0FBQSx3QkFBQSxHQUFBLHVDQUFBLE1BQUEsT0FBQSwyQkFBQSxHQUFBLHdDQUFBLE1BQUEsT0FBQSw0QkFBQSxHQUFBLHFDQUFBLE1BQUEsT0FBQSx5QkFBQSxHQUFBLDJDQUFBLE1BQUEsT0FBQSwrQkFBQSxHQUFBLDRDQUFBLE1BQUEsT0FBQSxnQ0FBQSxHQUFBLHNDQUFBLE1BQUEsT0FBQSwwQkFBQSxHQUFBLG1DQUFBLE1BQUEsT0FBQSx1QkFBQSxHQUFBLHlDQUFBLE1BQUEsT0FBQSw2QkFBQSxHQUFBLG9DQUFBLE1BQUEsT0FBQSx3QkFBQSxHQUFBLHlDQUFBLE1BQUEsT0FBQSw2QkFBQSxHQUFBLHlDQUFBLE1BQUEsT0FBQSw2QkFBQSxHQUFBLHdDQUFBLE1BQUEsT0FBQSw0QkFBQSxHQUFBLDhDQUFBLE1BQUEsT0FBQSxrQ0FBQSxHQUFBLHVDQUFBLE1BQUEsT0FBQSwyQkFBQSxHQUFBLDRDQUFBLE1BQUEsT0FBQSxnQ0FBQSxHQUFBLHNDQUFBLE1BQUEsT0FBQSwwQkFBQSxHQUFBLG9DQUFBLE1BQUEsT0FBQSx3QkFBQSxHQUFBLHVDQUFBLE1BQUEsT0FBQSwyQkFBQSxHQUFBLHdDQUFBLE1BQUEsT0FBQSw0QkFBQSxHQUFBLHdDQUFBLE1BQUEsT0FBQSw0QkFB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QUEsTUFDRSxNQUFNQyxFQUFNO0FBQUEsTUFDWixNQUFNO0FBQzZCLFFBQUF3YyxLQUNiSSxLQUNRTDtNQUM5QjtBQUFBLElBQUEsR0FHRk0sR0FBWSxNQUFNO0FBQ2hCLE1BQUF2UixFQUFXLFFBQVEsQ0FBQzhCLEdBQWlCLEdBQUE0TyxHQUFpQixFQUFFLFVBQVVoYyxFQUFNLE9BQVEsQ0FBQSxHQUFHZ1AsR0FBTSxFQUFFLFNBQVMsR0FBQSxDQUFJLENBQUM7QUFBQSxJQUFBLENBQzFHLEdBRUQ4TixHQUFjLE1BQU07QUFDRCxNQUFBNVY7SUFBQSxDQUNsQixHQUVEcEUsR0FBVSxNQUFNO0FBQ00sTUFBQThaLEtBQ3BCMUYsRUFBSyxRQUFRLFNBQVMsaUJBQ01xRjtJQUFBLENBQzdCLEdBRUR4WixHQUFZLE1BQU07QUFDaUIsTUFBQXlaO0lBQUEsQ0FDbEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7aUJDNUdLbmIsSUFBYyxNQUFNO0FBQ3BCLE1BQUNyQixFQUFNLFlBQ1RZLEVBQUssUUFBUTtBQUFBLElBQ2Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztzRUNmU21jLEtBQVM7QUFBQSxFQUNwQixRQUFRMWQ7QUFBQSxFQUNSLE9BQU9NO0FBQUEsRUFDUCxPQUFPQztBQUNULEdBRWFvZCxLQUFlO0FBQUEsRUFDMUIsT0FBTztBQUFBLEVBQ1Asb0JBQW9CO0FBQUEsRUFDcEIsWUFBWTtBQUFBLEVBQ1osT0FDRTtBQUFBLEVBQ0YsaUJBQWlCO0FBQUEsRUFDakIsT0FBTztBQUFBLEVBQ1AsT0FBTztBQUNULEdDaEJhQyxLQUFvQjtBQUFBLEVBQy9CLE9BQU87QUFBQSxJQUNMLFdBQVc7QUFBQSxJQUNYLE9BQU87QUFBQSxFQUNUO0FBQUEsRUFDQSxPQUFPO0FBQUEsRUFDUCxJQUFJO0FBQ04sR0NUYUMsS0FBWTtBQUFBLEVBQ3ZCLG9CQUFvQm5aLEdBQVlpWixHQUFhLGtCQUFrQjtBQUFBLEVBQy9ELGFBQWFqWixHQUFZaVosR0FBYSxVQUFVO0FBQUEsRUFDaEQsT0FBT2paLEdBQVlpWixHQUFhLEtBQUs7QUFBQSxFQUNyQyxRQUFRalosR0FBWWlaLEdBQWEsZUFBZTtBQUFBLEVBQ2hELE9BQU9qWixHQUFZaVosR0FBYSxLQUFLO0FBQ3ZDOyIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlsyOSwzMCwzMSwzMiwzM119
|
|
3663
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlkZS1kZXNpZ24tc3lzdGVtLmVzbS5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL3R5cGVzL09yaWVudGF0aW9uLnRzIiwiLi4vc3JjL3R5cGVzL1N0eWxlcy50cyIsIi4uL3NyYy90eXBlcy9SZWFsbS50cyIsIi4uL3NyYy90eXBlcy9TaXplLnRzIiwiLi4vc3JjL3V0aWxpdGllcy9mb3JtYXQudHMiLCIuLi9zcmMvY29tcG9uZW50cy9UaWRlSWNvbi52dWUiLCIuLi9zcmMvdHlwZXMvSWNvbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL1RpZGVBY2NvcmRpb25JdGVtLnZ1ZSIsIi4uL3NyYy90eXBlcy9FbGVtZW50LnRzIiwiLi4vc3JjL3R5cGVzL1ByaW9yaXR5LnRzIiwiLi4vc3JjL3R5cGVzL1RhcmdldC50cyIsIi4uL3NyYy90eXBlcy9BbGVydC50cyIsIi4uL3NyYy9jb21wb25lbnRzL1RpZGVBbGVydC52dWUiLCIuLi9zcmMvdHlwZXMvQmFkZ2UudHMiLCIuLi9zcmMvY29tcG9uZW50cy9UaWRlQnV0dG9uU2VnbWVudGVkLnZ1ZSIsIi4uL3NyYy90eXBlcy9DYXJkLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvVGlkZUNhcm91c2VsLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1RpZGVJbWFnZS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9UaWRlSW5wdXRDaGVja2JveC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9UaWRlSW5wdXRSYWRpby52dWUiLCIuLi9zcmMvdXRpbGl0aWVzL3ZhbGlkYXRpb24udHMiLCIuLi9zcmMvY29tcG9uZW50cy9UaWRlSW5wdXRTZWxlY3QudnVlIiwiLi4vc3JjL3R5cGVzL1RleHRJbnB1dC50cyIsIi4uL3NyYy9jb21wb25lbnRzL1RpZGVJbnB1dFRleHQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvVGlkZUlucHV0VGV4dGFyZWEudnVlIiwiLi4vc3JjL3R5cGVzL0JyZWFrcG9pbnQudHMiLCIuLi9zcmMvdXRpbGl0aWVzL3ZpZXdwb3J0LnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvVGlkZU1vZGFsLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1RpZGVQYWdpbmF0aW9uLnZ1ZSIsIi4uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5tanMiLCIuLi9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL2NvcmUvZGlzdC9mbG9hdGluZy11aS5jb3JlLm1qcyIsIi4uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5kb20ubWpzIiwiLi4vbm9kZV9tb2R1bGVzL0BmbG9hdGluZy11aS9kb20vZGlzdC9mbG9hdGluZy11aS5kb20ubWpzIiwiLi4vbm9kZV9tb2R1bGVzL0BmbG9hdGluZy11aS92dWUvZGlzdC9mbG9hdGluZy11aS52dWUubWpzIiwiLi4vc3JjL3V0aWxpdGllcy9ldmVudC50cyIsIi4uL3NyYy9jb21wb25lbnRzL1RpZGVQb3BvdmVyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1RpZGVTd2l0Y2gudnVlIiwiLi4vc3JjL3R5cGVzL0Zvcm1hdHRlZC50cyIsIi4uL3NyYy90eXBlcy9MaXN0aW5nTWVkaWEudHMiLCIuLi9zcmMvdHlwZXMvVmFsaWRhdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgT1JJRU5UQVRJT04gPSB7XG4gIEhPUklaT05UQUw6ICdob3Jpem9udGFsJyxcbiAgVkVSVElDQUw6ICd2ZXJ0aWNhbCcsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBPcmllbnRhdGlvbiA9ICh0eXBlb2YgT1JJRU5UQVRJT04pW2tleW9mIHR5cGVvZiBPUklFTlRBVElPTl07XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSB2dWUvc29ydC1rZXlzICovXG5cbmltcG9ydCB0eXBlIHsgQnJlYWtwb2ludCB9IGZyb20gJ0AvdHlwZXMvQnJlYWtwb2ludCc7XG5cbmV4cG9ydCBjb25zdCBDU1MgPSB7XG4gIHdpdGhCcmVha3BvaW50OiAodXRpbGl0aWVzOiBzdHJpbmdbXSwgYnJlYWtwb2ludDogQnJlYWtwb2ludCk6IHN0cmluZ1tdID0+IHtcbiAgICByZXR1cm4gdXRpbGl0aWVzLm1hcCgodXRpbGl0eSkgPT4gYCR7YnJlYWtwb2ludH0tJHt1dGlsaXR5fWApO1xuICB9LFxuICBBTElHTjoge1xuICAgIFg6IHtcbiAgICAgIENFTlRFUjogJ3RpZGUtdGV4dC1jZW50ZXInLFxuICAgICAgTEVGVDogJ3RpZGUtdGV4dC1sZWZ0JyxcbiAgICAgIFJJR0hUOiAndGlkZS10ZXh0LXJpZ2h0JyxcbiAgICB9LFxuICAgIFk6IHtcbiAgICAgIElOSVRJQUw6ICd0aWRlLWFsaWduLWluaXRpYWwnLFxuICAgICAgTUlERExFOiAndGlkZS1hbGlnbi1taWRkbGUnLFxuICAgIH0sXG4gIH0sXG4gIEFYSVMxOiB7XG4gICAgQVJPVU5EOiAndGlkZS1heGlzMS1hcm91bmQnLFxuICAgIEJFVFdFRU46ICd0aWRlLWF4aXMxLWJldHdlZW4nLFxuICAgIENFTlRFUjogJ3RpZGUtYXhpczEtY2VudGVyJyxcbiAgICBFTkQ6ICd0aWRlLWF4aXMxLWVuZCcsXG4gICAgU1RBUlQ6ICd0aWRlLWF4aXMxLXN0YXJ0JyxcbiAgfSxcbiAgQVhJUzI6IHtcbiAgICBBUk9VTkQ6ICd0aWRlLWF4aXMyLWFyb3VuZCcsXG4gICAgQ0VOVEVSOiAndGlkZS1heGlzMi1jZW50ZXInLFxuICAgIEVORDogJ3RpZGUtYXhpczItZW5kJyxcbiAgICBTVEFSVDogJ3RpZGUtYXhpczItc3RhcnQnLFxuICB9LFxuICBCRzoge1xuICAgIEdMT0JBTDoge1xuICAgICAgUFJJTUFSWToge1xuICAgICAgICBFUlJPUjogJ3RpZGUtYmctcHJpbWFyeS1lcnJvcicsXG4gICAgICAgIElORk86ICd0aWRlLWJnLXByaW1hcnktaW5mbycsXG4gICAgICAgIFNVQ0NFU1M6ICd0aWRlLWJnLXByaW1hcnktc3VjY2VzcycsXG4gICAgICAgIFdBUk5JTkc6ICd0aWRlLWJnLXByaW1hcnktd2FybmluZycsXG4gICAgICB9LFxuICAgICAgU1VSRkFDRToge1xuICAgICAgICBFUlJPUjogJ3RpZGUtYmctc3VyZmFjZS1lcnJvcicsXG4gICAgICAgIElORk86ICd0aWRlLWJnLXN1cmZhY2UtaW5mbycsXG4gICAgICAgIFNVQ0NFU1M6ICd0aWRlLWJnLXN1cmZhY2Utc3VjY2VzcycsXG4gICAgICAgIFdBUk5JTkc6ICd0aWRlLWJnLXN1cmZhY2Utd2FybmluZycsXG4gICAgICB9LFxuICAgIH0sXG4gICAgSU5JVElBTDogJ3RpZGUtYmctaW5pdGlhbCcsXG4gICAgQkxVUjogJ3RpZGUtYmctYmx1cicsXG4gICAgUFJJTUFSWTogJ3RpZGUtYmctcHJpbWFyeScsXG4gICAgU0VDT05EQVJZOiAndGlkZS1iZy1zZWNvbmRhcnknLFxuICAgIFNVUkZBQ0U6IHtcbiAgICAgIEFDQ0VOVDogJ3RpZGUtYmctc3VyZmFjZS1hY2NlbnQnLFxuICAgICAgQlJBTkQ6ICd0aWRlLWJnLXN1cmZhY2UtYnJhbmQnLFxuICAgICAgREVGQVVMVDogJ3RpZGUtYmctc3VyZmFjZScsXG4gICAgICBGTE9BVElORzogJ3RpZGUtYmctc3VyZmFjZS1mbG9hdGluZycsXG4gICAgICBHUkFESUVOVDogJ3RpZGUtYmctc3VyZmFjZS1ncmFkaWVudCcsXG4gICAgICBWQVJJQU5UOiAndGlkZS1iZy1zdXJmYWNlLXZhcmlhbnQnLFxuICAgIH0sXG4gICAgVFJBTlNQQVJFTlQ6IHtcbiAgICAgIE9ORV9IVU5EUkVEOiAndGlkZS10cmFuc3BhcmVudC0xMDAnLFxuICAgICAgVFdPX0hVTkRSRUQ6ICd0aWRlLXRyYW5zcGFyZW50LTIwMCcsXG4gICAgICBUSFJFRV9IVU5EUkVEOiAndGlkZS10cmFuc3BhcmVudC0zMDAnLFxuICAgICAgRk9VUl9IVU5EUkVEOiAndGlkZS10cmFuc3BhcmVudC00MDAnLFxuICAgIH0sXG4gIH0sXG4gIEJPUkRFUjoge1xuICAgIENPTE9SOiB7XG4gICAgICBHTE9CQUw6IHtcbiAgICAgICAgRVJST1I6ICd0aWRlLWJvcmRlci1lcnJvcicsXG4gICAgICAgIElORk86ICd0aWRlLWJvcmRlci1pbmZvJyxcbiAgICAgICAgU1VDQ0VTUzogJ3RpZGUtYm9yZGVyLXN1Y2Nlc3MnLFxuICAgICAgICBXQVJOSU5HOiAndGlkZS1ib3JkZXItd2FybmluZycsXG4gICAgICB9LFxuICAgICAgSU5JVElBTDogJ3RpZGUtYm9yZGVyLWNvbG9yLWluaXRpYWwnLFxuICAgICAgREVGQVVMVDogJ3RpZGUtYm9yZGVyJyxcbiAgICAgIEZMT0FUSU5HOiAndGlkZS1ib3JkZXItZmxvYXRpbmcnLFxuICAgICAgSElHSDogJ3RpZGUtYm9yZGVyLWhpZ2gnLFxuICAgICAgTE9XOiAndGlkZS1ib3JkZXItbG93JyxcbiAgICAgIFBSSU1BUlk6ICd0aWRlLWJvcmRlci1wcmltYXJ5JyxcbiAgICB9LFxuICAgIFJBRElVUzoge1xuICAgICAgWkVSTzogJ3RpZGUtcmFkaXVzLTAnLFxuICAgICAgUVVBUlRFUjogJ3RpZGUtcmFkaXVzLTEvNCcsXG4gICAgICBIQUxGOiAndGlkZS1yYWRpdXMtMS8yJyxcbiAgICAgIE9ORTogJ3RpZGUtcmFkaXVzLTEnLFxuICAgICAgRlVMTDogJ3RpZGUtcmFkaXVzLWZ1bGwnLFxuICAgIH0sXG4gICAgQk9UVE9NOiB7XG4gICAgICBaRVJPOiAndGlkZS1ib3JkZXItYm90dG9tLTAnLFxuICAgICAgT05FOiAndGlkZS1ib3JkZXItYm90dG9tLTEnLFxuICAgICAgVFdPOiAndGlkZS1ib3JkZXItYm90dG9tLTInLFxuICAgIH0sXG4gICAgRlVMTDoge1xuICAgICAgWkVSTzogJ3RpZGUtYm9yZGVyLTAnLFxuICAgICAgT05FOiAndGlkZS1ib3JkZXItMScsXG4gICAgICBUV086ICd0aWRlLWJvcmRlci0yJyxcbiAgICB9LFxuICAgIExFRlQ6IHtcbiAgICAgIFpFUk86ICd0aWRlLWJvcmRlci1sZWZ0LTAnLFxuICAgICAgT05FOiAndGlkZS1ib3JkZXItbGVmdC0xJyxcbiAgICAgIFRXTzogJ3RpZGUtYm9yZGVyLWxlZnQtMicsXG4gICAgfSxcbiAgICBSSUdIVDoge1xuICAgICAgWkVSTzogJ3RpZGUtYm9yZGVyLXJpZ2h0LTAnLFxuICAgICAgT05FOiAndGlkZS1ib3JkZXItcmlnaHQtMScsXG4gICAgICBUV086ICd0aWRlLWJvcmRlci1yaWdodC0yJyxcbiAgICB9LFxuICAgIFRPUDoge1xuICAgICAgWkVSTzogJ3RpZGUtYm9yZGVyLXRvcC0wJyxcbiAgICAgIE9ORTogJ3RpZGUtYm9yZGVyLXRvcC0xJyxcbiAgICAgIFRXTzogJ3RpZGUtYm9yZGVyLXRvcC0yJyxcbiAgICB9LFxuICB9LFxuICBCT1hfU0laSU5HOiB7XG4gICAgQk9SREVSX0JPWDogJ3RpZGUtYm94LWJvcmRlcicsXG4gICAgQ09OVEVOVF9CT1g6ICd0aWRlLWJveC1jb250ZW50JyxcbiAgfSxcbiAgQlJFQUtfSU5TSURFOiB7XG4gICAgQVZPSURfQ09MVU1OOiAndGlkZS1icmVhay1pbnNpZGUtYXZvaWQtY29sdW1uJyxcbiAgfSxcbiAgQlJFQUtfV09SRDoge1xuICAgIE9GRjogJ3RpZGUtYnJlYWstaW5pdGlhbCcsXG4gICAgT046ICd0aWRlLWJyZWFrLXdvcmQnLFxuICB9LFxuICBDT0xVTU5TOiB7XG4gICAgSU5JVElBTDogJ3RpZGUtY29sdW1ucy1pbml0aWFsJyxcbiAgICBPTkU6ICd0aWRlLWNvbHVtbnMtMScsXG4gICAgVFdPOiAndGlkZS1jb2x1bW5zLTInLFxuICAgIFRIUkVFOiAndGlkZS1jb2x1bW5zLTMnLFxuICAgIEZPVVI6ICd0aWRlLWNvbHVtbnMtNCcsXG4gIH0sXG4gIENVUlNPUjoge1xuICAgIE5PVF9BTExPV0VEOiAndGlkZS1jdXJzb3Itbm90LWFsbG93ZWQnLFxuICAgIFBPSU5URVI6ICd0aWRlLWN1cnNvci1wb2ludGVyJyxcbiAgICBURVhUOiAndGlkZS1jdXJzb3ItdGV4dCcsXG4gIH0sXG4gIERJU1BMQVk6IHtcbiAgICBCTE9DSzogJ3RpZGUtZGlzcGxheS1ibG9jaycsXG4gICAgQ09OVEVOVFM6ICd0aWRlLWRpc3BsYXktY29udGVudHMnLFxuICAgIEZMRVg6ICd0aWRlLWRpc3BsYXktZmxleCcsXG4gICAgR1JJRDogJ3RpZGUtZGlzcGxheS1ncmlkJyxcbiAgICBJTklUSUFMOiAndGlkZS1kaXNwbGF5LWluaXRpYWwnLFxuICAgIElOTElORTogJ3RpZGUtZGlzcGxheS1pbmxpbmUnLFxuICAgIElOTElORV9CTE9DSzogJ3RpZGUtZGlzcGxheS1pbmxpbmUtYmxvY2snLFxuICAgIElOTElORV9GTEVYOiAndGlkZS1kaXNwbGF5LWlubGluZS1mbGV4JyxcbiAgICBOT05FOiAndGlkZS1kaXNwbGF5LW5vbmUnLFxuICB9LFxuICBFTExJUFNJUzogJ3RpZGUtZWxsaXBzaXMnLFxuICBGTEVYOiB7XG4gICAgQkFTSVM6IHtcbiAgICAgIEFVVE86ICd0aWRlLWZsZXgtYmFzaXMtYXV0bycsXG4gICAgICBaRVJPOiAndGlkZS1mbGV4LWJhc2lzLTAnLFxuICAgIH0sXG4gICAgRElSRUNUSU9OOiB7XG4gICAgICBDT0xVTU46ICd0aWRlLWZsZXgtY29sdW1uJyxcbiAgICAgIENPTFVNTl9SRVZFUlNFOiAndGlkZS1mbGV4LWNvbHVtbi1yZXZlcnNlJyxcbiAgICAgIFJPVzogJ3RpZGUtZmxleC1yb3cnLFxuICAgICAgUk9XX1JFVkVSU0U6ICd0aWRlLWZsZXgtcm93LXJldmVyc2UnLFxuICAgIH0sXG4gICAgR1JPVzoge1xuICAgICAgT0ZGOiAndGlkZS1ncm93LW5vbmUnLFxuICAgICAgT046ICd0aWRlLWdyb3cnLFxuICAgIH0sXG4gICAgU0hSSU5LOiB7XG4gICAgICBPRkY6ICd0aWRlLXNocmluay1ub25lJyxcbiAgICAgIE9OOiAndGlkZS1zaHJpbmsnLFxuICAgIH0sXG4gICAgV1JBUDogJ3RpZGUtZmxleC13cmFwJyxcbiAgfSxcbiAgRk9OVDoge1xuICAgIENPTE9SOiB7XG4gICAgICBHTE9CQUw6IHtcbiAgICAgICAgRVJST1I6ICd0aWRlLWZvbnQtZXJyb3InLFxuICAgICAgICBJTkZPOiAndGlkZS1mb250LWluZm8nLFxuICAgICAgICBTVUNDRVNTOiAndGlkZS1mb250LXN1Y2Nlc3MnLFxuICAgICAgICBXQVJOSU5HOiAndGlkZS1mb250LXdhcm5pbmcnLFxuICAgICAgfSxcbiAgICAgIFBSSU1BUlk6ICd0aWRlLWZvbnQtb24tcHJpbWFyeScsXG4gICAgICBTRUNPTkRBUlk6ICd0aWRlLWZvbnQtb24tc2Vjb25kYXJ5JyxcbiAgICAgIFNVUkZBQ0U6IHtcbiAgICAgICAgQlJBTkQ6ICd0aWRlLWZvbnQtb24tc3VyZmFjZS1icmFuZCcsXG4gICAgICAgIERFRkFVTFQ6ICd0aWRlLWZvbnQtb24tc3VyZmFjZScsXG4gICAgICAgIElOVkVSU0U6ICd0aWRlLWZvbnQtb24tc3VyZmFjZS1pbnZlcnNlJyxcbiAgICAgICAgVkFSSUFOVDogJ3RpZGUtZm9udC1vbi1zdXJmYWNlLXZhcmlhbnQnLFxuICAgICAgICBWQVJJQU5UX0lOVkVSU0U6ICd0aWRlLWZvbnQtb24tc3VyZmFjZS12YXJpYW50LWludmVyc2UnLFxuICAgICAgfSxcbiAgICB9LFxuICAgIFJPTEU6IHtcbiAgICAgIERJU1BMQVlfMTogJ3RpZGUtdHlwb2dyYXBoeS1kaXNwbGF5LTEnLFxuICAgICAgSEVBRExJTkVfMTogJ3RpZGUtdHlwb2dyYXBoeS1oZWFkbGluZS0xJyxcbiAgICAgIEhFQURMSU5FXzI6ICd0aWRlLXR5cG9ncmFwaHktaGVhZGxpbmUtMicsXG4gICAgICBIRUFETElORV8zOiAndGlkZS10eXBvZ3JhcGh5LWhlYWRsaW5lLTMnLFxuICAgICAgVElUTEVfMTogJ3RpZGUtdHlwb2dyYXBoeS10aXRsZS0xJyxcbiAgICAgIFRJVExFXzI6ICd0aWRlLXR5cG9ncmFwaHktdGl0bGUtMicsXG4gICAgICBCT0RZXzE6ICd0aWRlLXR5cG9ncmFwaHktYm9keS0xJyxcbiAgICAgIEJPRFlfMjogJ3RpZGUtdHlwb2dyYXBoeS1ib2R5LTInLFxuICAgICAgTEFCRUxfMTogJ3RpZGUtdHlwb2dyYXBoeS1sYWJlbC0xJyxcbiAgICAgIExBQkVMXzFfU0VNSUJPTEQ6ICd0aWRlLXR5cG9ncmFwaHktbGFiZWwtMS1zZW1pYm9sZCcsXG4gICAgICBMQUJFTF8yOiAndGlkZS10eXBvZ3JhcGh5LWxhYmVsLTInLFxuICAgICAgTEFCRUxfMl9TRU1JQk9MRDogJ3RpZGUtdHlwb2dyYXBoeS1sYWJlbC0yLXNlbWlib2xkJyxcbiAgICAgIExBQkVMXzM6ICd0aWRlLXR5cG9ncmFwaHktbGFiZWwtMycsXG4gICAgICBMSU5LXzE6ICd0aWRlLXR5cG9ncmFwaHktbGluay0xJyxcbiAgICAgIExJTktfMjogJ3RpZGUtdHlwb2dyYXBoeS1saW5rLTInLFxuICAgICAgTElOS18zOiAndGlkZS10eXBvZ3JhcGh5LWxpbmstMycsXG4gICAgICBCVVRUT05fMTogJ3RpZGUtdHlwb2dyYXBoeS1idXR0b24tMScsXG4gICAgICBCVVRUT05fMjogJ3RpZGUtdHlwb2dyYXBoeS1idXR0b24tMicsXG4gICAgfSxcbiAgICBTSVpFOiB7XG4gICAgICBUV0VMVkU6ICd0aWRlLWZvbnQtMTInLFxuICAgICAgRk9VUlRFRU46ICd0aWRlLWZvbnQtMTQnLFxuICAgICAgU0lYVEVFTjogJ3RpZGUtZm9udC0xNicsXG4gICAgICBUV0VOVFk6ICd0aWRlLWZvbnQtMjAnLFxuICAgICAgVFdFTlRZX0ZPVVI6ICd0aWRlLWZvbnQtMjQnLFxuICAgICAgVEhJUlRZX1RXTzogJ3RpZGUtZm9udC0zMicsXG4gICAgfSxcbiAgICBXRUlHSFQ6IHtcbiAgICAgIEZPVVJfSFVORFJFRDogJ3RpZGUtZm9udC00MDAnLFxuICAgICAgRklWRV9IVU5EUkVEOiAndGlkZS1mb250LTUwMCcsXG4gICAgICBTSVhfSFVORFJFRDogJ3RpZGUtZm9udC02MDAnLFxuICAgICAgU0VWRU5fSFVORFJFRDogJ3RpZGUtZm9udC03MDAnLFxuICAgIH0sXG4gIH0sXG4gIEdBUDoge1xuICAgIFpFUk86ICd0aWRlLWdhcC0wJyxcbiAgICBRVUFSVEVSOiAndGlkZS1nYXAtMS80JyxcbiAgICBIQUxGOiAndGlkZS1nYXAtMS8yJyxcbiAgICBPTkU6ICd0aWRlLWdhcC0xJyxcbiAgICBUV086ICd0aWRlLWdhcC0yJyxcbiAgICBGT1VSOiAndGlkZS1nYXAtNCcsXG4gIH0sXG4gIEdSSUQ6IHtcbiAgICBFTkQ6IHtcbiAgICAgIE9ORTogJ3RpZGUtZW5kLTEnLFxuICAgICAgVFdPOiAndGlkZS1lbmQtMicsXG4gICAgICBUSFJFRTogJ3RpZGUtZW5kLTMnLFxuICAgICAgRk9VUjogJ3RpZGUtZW5kLTQnLFxuICAgICAgRklWRTogJ3RpZGUtZW5kLTUnLFxuICAgICAgU0lYOiAndGlkZS1lbmQtNicsXG4gICAgICBTRVZFTjogJ3RpZGUtZW5kLTcnLFxuICAgICAgRUlHSFQ6ICd0aWRlLWVuZC04JyxcbiAgICAgIE5JTkU6ICd0aWRlLWVuZC05JyxcbiAgICAgIFRFTjogJ3RpZGUtZW5kLTEwJyxcbiAgICAgIEVMRVZFTjogJ3RpZGUtZW5kLTExJyxcbiAgICAgIFRXRUxWRTogJ3RpZGUtZW5kLTEyJyxcbiAgICAgIFRISVJURUVOOiAndGlkZS1lbmQtMTMnLFxuICAgIH0sXG4gICAgRkxVSUQ6ICd0aWRlLWZsdWlkJyxcbiAgICBJVEVNOiAndGlkZS1ncmlkLWl0ZW0nLFxuICAgIExBWU9VVDogJ3RpZGUtZ3JpZC1sYXlvdXQnLFxuICAgIFNUQVJUOiB7XG4gICAgICBaRVJPOiAndGlkZS1zdGFydC0wJyxcbiAgICAgIE9ORTogJ3RpZGUtc3RhcnQtMScsXG4gICAgICBUV086ICd0aWRlLXN0YXJ0LTInLFxuICAgICAgVEhSRUU6ICd0aWRlLXN0YXJ0LTMnLFxuICAgICAgRk9VUjogJ3RpZGUtc3RhcnQtNCcsXG4gICAgICBGSVZFOiAndGlkZS1zdGFydC01JyxcbiAgICAgIFNJWDogJ3RpZGUtc3RhcnQtNicsXG4gICAgICBTRVZFTjogJ3RpZGUtc3RhcnQtNycsXG4gICAgICBFSUdIVDogJ3RpZGUtc3RhcnQtOCcsXG4gICAgICBOSU5FOiAndGlkZS1zdGFydC05JyxcbiAgICAgIFRFTjogJ3RpZGUtc3RhcnQtMTAnLFxuICAgICAgRUxFVkVOOiAndGlkZS1zdGFydC0xMScsXG4gICAgICBUV0VMVkU6ICd0aWRlLXN0YXJ0LTEyJyxcbiAgICB9LFxuICAgIFhMOiAndGlkZS1ncmlkLXhsJyxcbiAgfSxcbiAgSEVJR0hUOiB7XG4gICAgQVVUTzogJ3RpZGUtaGVpZ2h0LWF1dG8nLFxuICAgIFpFUk86ICd0aWRlLWhlaWdodC0wJyxcbiAgICBGVUxMOiAndGlkZS1oZWlnaHQtZnVsbCcsXG4gICAgTUFYX0ZVTEw6ICd0aWRlLW1heC1oZWlnaHQtZnVsbCcsXG4gIH0sXG4gIElTT0xBVElPTjoge1xuICAgIElTT0xBVEU6ICd0aWRlLWlzb2xhdGUnLFxuICB9LFxuICBMSVNUX0JVTExFVFM6IHtcbiAgICBPRkY6ICd0aWRlLWxpc3Qtbm9uZScsXG4gIH0sXG4gIE1BUkdJTjoge1xuICAgIEJPVFRPTToge1xuICAgICAgQVVUTzogJ3RpZGUtbWFyZ2luLWJvdHRvbS1hdXRvJyxcbiAgICAgIFpFUk86ICd0aWRlLW1hcmdpbi1ib3R0b20tMCcsXG4gICAgICBRVUFSVEVSOiAndGlkZS1tYXJnaW4tYm90dG9tLTEvNCcsXG4gICAgICBIQUxGOiAndGlkZS1tYXJnaW4tYm90dG9tLTEvMicsXG4gICAgICBPTkU6ICd0aWRlLW1hcmdpbi1ib3R0b20tMScsXG4gICAgICBUV086ICd0aWRlLW1hcmdpbi1ib3R0b20tMicsXG4gICAgICBGT1VSOiAndGlkZS1tYXJnaW4tYm90dG9tLTQnLFxuICAgIH0sXG4gICAgRlVMTDoge1xuICAgICAgWkVSTzogJ3RpZGUtbWFyZ2luLTAnLFxuICAgICAgUVVBUlRFUjogJ3RpZGUtbWFyZ2luLTEvNCcsXG4gICAgICBIQUxGOiAndGlkZS1tYXJnaW4tMS8yJyxcbiAgICAgIE9ORTogJ3RpZGUtbWFyZ2luLTEnLFxuICAgICAgVFdPOiAndGlkZS1tYXJnaW4tMicsXG4gICAgICBGT1VSOiAndGlkZS1tYXJnaW4tNCcsXG4gICAgfSxcbiAgICBMRUZUOiB7XG4gICAgICBBVVRPOiAndGlkZS1tYXJnaW4tbGVmdC1hdXRvJyxcbiAgICAgIFpFUk86ICd0aWRlLW1hcmdpbi1sZWZ0LTAnLFxuICAgICAgUVVBUlRFUjogJ3RpZGUtbWFyZ2luLWxlZnQtMS80JyxcbiAgICAgIEhBTEY6ICd0aWRlLW1hcmdpbi1sZWZ0LTEvMicsXG4gICAgICBPTkU6ICd0aWRlLW1hcmdpbi1sZWZ0LTEnLFxuICAgICAgVFdPOiAndGlkZS1tYXJnaW4tbGVmdC0yJyxcbiAgICAgIEZPVVI6ICd0aWRlLW1hcmdpbi1sZWZ0LTQnLFxuICAgIH0sXG4gICAgUklHSFQ6IHtcbiAgICAgIEFVVE86ICd0aWRlLW1hcmdpbi1yaWdodC1hdXRvJyxcbiAgICAgIFpFUk86ICd0aWRlLW1hcmdpbi1yaWdodC0wJyxcbiAgICAgIFFVQVJURVI6ICd0aWRlLW1hcmdpbi1yaWdodC0xLzQnLFxuICAgICAgSEFMRjogJ3RpZGUtbWFyZ2luLXJpZ2h0LTEvMicsXG4gICAgICBPTkU6ICd0aWRlLW1hcmdpbi1yaWdodC0xJyxcbiAgICAgIFRXTzogJ3RpZGUtbWFyZ2luLXJpZ2h0LTInLFxuICAgICAgRk9VUjogJ3RpZGUtbWFyZ2luLXJpZ2h0LTQnLFxuICAgIH0sXG4gICAgVE9QOiB7XG4gICAgICBBVVRPOiAndGlkZS1tYXJnaW4tdG9wLWF1dG8nLFxuICAgICAgWkVSTzogJ3RpZGUtbWFyZ2luLXRvcC0wJyxcbiAgICAgIFFVQVJURVI6ICd0aWRlLW1hcmdpbi10b3AtMS80JyxcbiAgICAgIEhBTEY6ICd0aWRlLW1hcmdpbi10b3AtMS8yJyxcbiAgICAgIE9ORTogJ3RpZGUtbWFyZ2luLXRvcC0xJyxcbiAgICAgIFRXTzogJ3RpZGUtbWFyZ2luLXRvcC0yJyxcbiAgICAgIEZPVVI6ICd0aWRlLW1hcmdpbi10b3AtNCcsXG4gICAgfSxcbiAgICBYOiB7XG4gICAgICBBVVRPOiAndGlkZS1tYXJnaW4teC1hdXRvJyxcbiAgICAgIFpFUk86ICd0aWRlLW1hcmdpbi14LTAnLFxuICAgICAgUVVBUlRFUjogJ3RpZGUtbWFyZ2luLXgtMS80JyxcbiAgICAgIEhBTEY6ICd0aWRlLW1hcmdpbi14LTEvMicsXG4gICAgICBPTkU6ICd0aWRlLW1hcmdpbi14LTEnLFxuICAgICAgVFdPOiAndGlkZS1tYXJnaW4teC0yJyxcbiAgICAgIEZPVVI6ICd0aWRlLW1hcmdpbi14LTQnLFxuICAgIH0sXG4gICAgWToge1xuICAgICAgWkVSTzogJ3RpZGUtbWFyZ2luLXktMCcsXG4gICAgICBRVUFSVEVSOiAndGlkZS1tYXJnaW4teS0xLzQnLFxuICAgICAgSEFMRjogJ3RpZGUtbWFyZ2luLXktMS8yJyxcbiAgICAgIE9ORTogJ3RpZGUtbWFyZ2luLXktMScsXG4gICAgICBUV086ICd0aWRlLW1hcmdpbi15LTInLFxuICAgICAgRk9VUjogJ3RpZGUtbWFyZ2luLXktNCcsXG4gICAgfSxcbiAgfSxcbiAgT0JKRUNUOiB7XG4gICAgQ0VOVEVSOiAndGlkZS1vYmplY3QtY2VudGVyJyxcbiAgICBDT05UQUlOOiAndGlkZS1vYmplY3QtY29udGFpbicsXG4gICAgQ09WRVI6ICd0aWRlLW9iamVjdC1jb3ZlcicsXG4gICAgU0NBTEVfRE9XTjogJ3RpZGUtb2JqZWN0LXNjYWxlLWRvd24nLFxuICB9LFxuICBPUEFDSVRZOiB7XG4gICAgT0ZGOiAndGlkZS1vcGFjaXR5LW5vbmUnLFxuICAgIE9OOiAndGlkZS1vcGFjaXR5JyxcbiAgfSxcbiAgT1ZFUkZMT1c6IHtcbiAgICBYOiB7XG4gICAgICBBVVRPOiAndGlkZS14LWF1dG8nLFxuICAgICAgSElEREVOOiAndGlkZS14LWhpZGRlbicsXG4gICAgICBTQ1JPTEw6ICd0aWRlLXgtc2Nyb2xsJyxcbiAgICB9LFxuICAgIFhZOiB7XG4gICAgICBBVVRPOiAndGlkZS14eS1hdXRvJyxcbiAgICAgIEhJRERFTjogJ3RpZGUteHktaGlkZGVuJyxcbiAgICB9LFxuICAgIFk6IHtcbiAgICAgIEFVVE86ICd0aWRlLXktYXV0bycsXG4gICAgICBISURERU46ICd0aWRlLXktaGlkZGVuJyxcbiAgICB9LFxuICB9LFxuICBQQURESU5HOiB7XG4gICAgQk9UVE9NOiB7XG4gICAgICBaRVJPOiAndGlkZS1wYWRkaW5nLWJvdHRvbS0wJyxcbiAgICAgIFFVQVJURVI6ICd0aWRlLXBhZGRpbmctYm90dG9tLTEvNCcsXG4gICAgICBIQUxGOiAndGlkZS1wYWRkaW5nLWJvdHRvbS0xLzInLFxuICAgICAgT05FOiAndGlkZS1wYWRkaW5nLWJvdHRvbS0xJyxcbiAgICAgIFRXTzogJ3RpZGUtcGFkZGluZy1ib3R0b20tMicsXG4gICAgICBGT1VSOiAndGlkZS1wYWRkaW5nLWJvdHRvbS00JyxcbiAgICB9LFxuICAgIEZVTEw6IHtcbiAgICAgIFpFUk86ICd0aWRlLXBhZGRpbmctMCcsXG4gICAgICBRVUFSVEVSOiAndGlkZS1wYWRkaW5nLTEvNCcsXG4gICAgICBIQUxGOiAndGlkZS1wYWRkaW5nLTEvMicsXG4gICAgICBPTkU6ICd0aWRlLXBhZGRpbmctMScsXG4gICAgICBUV086ICd0aWRlLXBhZGRpbmctMicsXG4gICAgICBGT1VSOiAndGlkZS1wYWRkaW5nLTQnLFxuICAgIH0sXG4gICAgTEVGVDoge1xuICAgICAgWkVSTzogJ3RpZGUtcGFkZGluZy1sZWZ0LTAnLFxuICAgICAgUVVBUlRFUjogJ3RpZGUtcGFkZGluZy1sZWZ0LTEvNCcsXG4gICAgICBIQUxGOiAndGlkZS1wYWRkaW5nLWxlZnQtMS8yJyxcbiAgICAgIE9ORTogJ3RpZGUtcGFkZGluZy1sZWZ0LTEnLFxuICAgICAgVFdPOiAndGlkZS1wYWRkaW5nLWxlZnQtMicsXG4gICAgICBGT1VSOiAndGlkZS1wYWRkaW5nLWxlZnQtNCcsXG4gICAgfSxcbiAgICBSSUdIVDoge1xuICAgICAgWkVSTzogJ3RpZGUtcGFkZGluZy1yaWdodC0wJyxcbiAgICAgIFFVQVJURVI6ICd0aWRlLXBhZGRpbmctcmlnaHQtMS80JyxcbiAgICAgIEhBTEY6ICd0aWRlLXBhZGRpbmctcmlnaHQtMS8yJyxcbiAgICAgIE9ORTogJ3RpZGUtcGFkZGluZy1yaWdodC0xJyxcbiAgICAgIFRXTzogJ3RpZGUtcGFkZGluZy1yaWdodC0yJyxcbiAgICAgIEZPVVI6ICd0aWRlLXBhZGRpbmctcmlnaHQtNCcsXG4gICAgfSxcbiAgICBUT1A6IHtcbiAgICAgIFpFUk86ICd0aWRlLXBhZGRpbmctdG9wLTAnLFxuICAgICAgUVVBUlRFUjogJ3RpZGUtcGFkZGluZy10b3AtMS80JyxcbiAgICAgIEhBTEY6ICd0aWRlLXBhZGRpbmctdG9wLTEvMicsXG4gICAgICBPTkU6ICd0aWRlLXBhZGRpbmctdG9wLTEnLFxuICAgICAgVFdPOiAndGlkZS1wYWRkaW5nLXRvcC0yJyxcbiAgICAgIEZPVVI6ICd0aWRlLXBhZGRpbmctdG9wLTQnLFxuICAgIH0sXG4gICAgWDoge1xuICAgICAgWkVSTzogJ3RpZGUtcGFkZGluZy14LTAnLFxuICAgICAgUVVBUlRFUjogJ3RpZGUtcGFkZGluZy14LTEvNCcsXG4gICAgICBIQUxGOiAndGlkZS1wYWRkaW5nLXgtMS8yJyxcbiAgICAgIE9ORTogJ3RpZGUtcGFkZGluZy14LTEnLFxuICAgICAgVFdPOiAndGlkZS1wYWRkaW5nLXgtMicsXG4gICAgICBGT1VSOiAndGlkZS1wYWRkaW5nLXgtNCcsXG4gICAgfSxcbiAgICBZOiB7XG4gICAgICBaRVJPOiAndGlkZS1wYWRkaW5nLXktMCcsXG4gICAgICBRVUFSVEVSOiAndGlkZS1wYWRkaW5nLXktMS80JyxcbiAgICAgIEhBTEY6ICd0aWRlLXBhZGRpbmcteS0xLzInLFxuICAgICAgT05FOiAndGlkZS1wYWRkaW5nLXktMScsXG4gICAgICBUV086ICd0aWRlLXBhZGRpbmcteS0yJyxcbiAgICAgIEZPVVI6ICd0aWRlLXBhZGRpbmcteS00JyxcbiAgICB9LFxuICB9LFxuICBQT0lOVEVSX0VWRU5UUzoge1xuICAgIE9GRjogJ3RpZGUtcG9pbnRlci1ldmVudHMtbm9uZScsXG4gICAgT046ICd0aWRlLXBvaW50ZXItZXZlbnRzJyxcbiAgfSxcbiAgUE9TSVRJT046IHtcbiAgICBBQlNPTFVURTogJ3RpZGUtcG9zaXRpb24tYWJzb2x1dGUnLFxuICAgIEZJWEVEOiAndGlkZS1wb3NpdGlvbi1maXhlZCcsXG4gICAgUkVMQVRJVkU6ICd0aWRlLXBvc2l0aW9uLXJlbGF0aXZlJyxcbiAgICBTVEFUSUM6ICd0aWRlLXBvc2l0aW9uLXN0YXRpYycsXG4gICAgU1RJQ0tZOiAndGlkZS1wb3NpdGlvbi1zdGlja3knLFxuICB9LFxuICBQT1NJVElPTklORzoge1xuICAgIEJPVFRPTTogJ3RpZGUtYm90dG9tLTAnLFxuICAgIExFRlQ6ICd0aWRlLWxlZnQtMCcsXG4gICAgUklHSFQ6ICd0aWRlLXJpZ2h0LTAnLFxuICAgIFRPUDogJ3RpZGUtdG9wLTAnLFxuICB9LFxuICBSQVRJTzoge1xuICAgIE9ORV9UT19PTkU6ICd0aWRlLXJhdGlvLTEvMScsXG4gICAgU0lYVEVFTl9UT19OSU5FOiAndGlkZS1yYXRpby0xNi85JyxcbiAgICBUSFJFRV9UT19UV086ICd0aWRlLXJhdGlvLTMvMicsXG4gIH0sXG4gIFNDUk9MTEJBUjoge1xuICAgIE9GRjogJ3RpZGUtc2Nyb2xsYmFyLW5vbmUnLFxuICB9LFxuICBTSEFET1c6IHtcbiAgICBJTklUSUFMOiAndGlkZS1zaGFkb3ctaW5pdGlhbCcsXG4gICAgQk9UVE9NOiAndGlkZS1zaGFkb3ctYm90dG9tJyxcbiAgICBUT1A6ICd0aWRlLXNoYWRvdy10b3AnLFxuICAgIFRFWFQ6ICd0aWRlLXNoYWRvdy10ZXh0JyxcbiAgfSxcbiAgU05BUDoge1xuICAgIE9OOiAndGlkZS1zY3JvbGwtc25hcCcsXG4gIH0sXG4gIFNOQVBfQUxJR046IHtcbiAgICBTVEFSVDogJ3RpZGUtc2Nyb2xsLXNuYXAtc3RhcnQnLFxuICB9LFxuICBURVhUX1RSQU5TRk9STToge1xuICAgIExPV0VSOiAndGlkZS10ZXh0LXRyYW5zZm9ybS1sb3dlcicsXG4gICAgTk9ORTogJ3RpZGUtdGV4dC10cmFuc2Zvcm0tbm9uZScsXG4gICAgVVBQRVI6ICd0aWRlLXRleHQtdHJhbnNmb3JtLXVwcGVyJyxcbiAgfSxcbiAgVU5ERVJMSU5FOiB7XG4gICAgSE9WRVI6ICd0aWRlLXVuZGVybGluZS1ob3ZlcicsXG4gICAgT0ZGOiAndGlkZS11bmRlcmxpbmUtbm9uZScsXG4gICAgT046ICd0aWRlLXVuZGVybGluZScsXG4gIH0sXG4gIFZJU0lCSUxJVFk6IHtcbiAgICBPRkY6ICd0aWRlLXZpc2libGUtbm9uZScsXG4gICAgT046ICd0aWRlLXZpc2libGUnLFxuICB9LFxuICBXSElURVNQQUNFX1dSQVA6IHtcbiAgICBPRkY6ICd0aWRlLXdoaXRlc3BhY2Utbm93cmFwJyxcbiAgfSxcbiAgV0lEVEg6IHtcbiAgICBBVVRPOiAndGlkZS13aWR0aC1hdXRvJyxcbiAgICBaRVJPOiAndGlkZS13aWR0aC0wJyxcbiAgICBGVUxMOiAndGlkZS13aWR0aC1mdWxsJyxcbiAgICBNQVhfRlVMTDogJ3RpZGUtbWF4LXdpZHRoLWZ1bGwnLFxuICB9LFxuICBaX0lOREVYOiB7XG4gICAgSU5JVElBTDogJ3RpZGUtei1pbmRleC1pbml0aWFsJyxcbiAgICBPTkU6ICd0aWRlLXotaW5kZXgtMScsXG4gIH0sXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBDc3NVdGlsaXR5ID0gKHR5cGVvZiBDU1MpW2tleW9mIHR5cGVvZiBDU1NdO1xuXG5leHBvcnQgY29uc3QgY3NzU29ydE9yZGVyID0gW1xuICBDU1MuRElTUExBWS5CTE9DSyxcbiAgQ1NTLkRJU1BMQVkuQ09OVEVOVFMsXG4gIENTUy5ESVNQTEFZLkZMRVgsXG4gIENTUy5ESVNQTEFZLkdSSUQsXG4gIENTUy5ESVNQTEFZLk5PTkUsXG4gIENTUy5ESVNQTEFZLklOSVRJQUwsXG4gIENTUy5ESVNQTEFZLklOTElORSxcbiAgQ1NTLkRJU1BMQVkuSU5MSU5FX0JMT0NLLFxuICBDU1MuRElTUExBWS5JTkxJTkVfRkxFWCxcbiAgQ1NTLkFYSVMxLkFST1VORCxcbiAgQ1NTLkFYSVMxLkJFVFdFRU4sXG4gIENTUy5BWElTMS5DRU5URVIsXG4gIENTUy5BWElTMS5FTkQsXG4gIENTUy5BWElTMS5TVEFSVCxcbiAgQ1NTLkFYSVMyLkFST1VORCxcbiAgQ1NTLkFYSVMyLkNFTlRFUixcbiAgQ1NTLkFYSVMyLkVORCxcbiAgQ1NTLkFYSVMyLlNUQVJULFxuICBDU1MuRkxFWC5ESVJFQ1RJT04uQ09MVU1OLFxuICBDU1MuRkxFWC5ESVJFQ1RJT04uQ09MVU1OX1JFVkVSU0UsXG4gIENTUy5GTEVYLkRJUkVDVElPTi5ST1csXG4gIENTUy5GTEVYLkRJUkVDVElPTi5ST1dfUkVWRVJTRSxcbiAgQ1NTLkdBUC5PTkUsXG4gIENTUy5HQVAuSEFMRixcbiAgQ1NTLkdBUC5RVUFSVEVSLFxuICBDU1MuR0FQLlRXTyxcbiAgQ1NTLkdBUC5GT1VSLFxuICBDU1MuRkxFWC5CQVNJUy5aRVJPLFxuICBDU1MuRkxFWC5HUk9XLk9OLFxuICBDU1MuRkxFWC5HUk9XLk9GRixcbiAgQ1NTLkZMRVguU0hSSU5LLk9OLFxuICBDU1MuRkxFWC5TSFJJTksuT0ZGLFxuICBDU1MuRkxFWC5XUkFQLFxuICBDU1MuUE9TSVRJT04uQUJTT0xVVEUsXG4gIENTUy5QT1NJVElPTi5GSVhFRCxcbiAgQ1NTLlBPU0lUSU9OLlJFTEFUSVZFLFxuICBDU1MuUE9TSVRJT04uU1RJQ0tZLFxuICBDU1MuUE9TSVRJT05JTkcuVE9QLFxuICBDU1MuUE9TSVRJT05JTkcuUklHSFQsXG4gIENTUy5QT1NJVElPTklORy5CT1RUT00sXG4gIENTUy5QT1NJVElPTklORy5MRUZULFxuICBDU1MuQk9YX1NJWklORy5CT1JERVJfQk9YLFxuICBDU1MuQk9YX1NJWklORy5DT05URU5UX0JPWCxcbiAgQ1NTLk1BUkdJTi5GVUxMLlpFUk8sXG4gIENTUy5NQVJHSU4uRlVMTC5PTkUsXG4gIENTUy5NQVJHSU4uRlVMTC5IQUxGLFxuICBDU1MuTUFSR0lOLkZVTEwuUVVBUlRFUixcbiAgQ1NTLk1BUkdJTi5GVUxMLlRXTyxcbiAgQ1NTLk1BUkdJTi5GVUxMLkZPVVIsXG4gIENTUy5NQVJHSU4uWS5aRVJPLFxuICBDU1MuTUFSR0lOLlkuT05FLFxuICBDU1MuTUFSR0lOLlkuSEFMRixcbiAgQ1NTLk1BUkdJTi5ZLlFVQVJURVIsXG4gIENTUy5NQVJHSU4uWS5UV08sXG4gIENTUy5NQVJHSU4uWS5GT1VSLFxuICBDU1MuTUFSR0lOLlRPUC5aRVJPLFxuICBDU1MuTUFSR0lOLlRPUC5PTkUsXG4gIENTUy5NQVJHSU4uVE9QLkhBTEYsXG4gIENTUy5NQVJHSU4uVE9QLlFVQVJURVIsXG4gIENTUy5NQVJHSU4uVE9QLlRXTyxcbiAgQ1NTLk1BUkdJTi5UT1AuRk9VUixcbiAgQ1NTLk1BUkdJTi5YLlpFUk8sXG4gIENTUy5NQVJHSU4uWC5PTkUsXG4gIENTUy5NQVJHSU4uWC5IQUxGLFxuICBDU1MuTUFSR0lOLlguUVVBUlRFUixcbiAgQ1NTLk1BUkdJTi5YLlRXTyxcbiAgQ1NTLk1BUkdJTi5YLkZPVVIsXG4gIENTUy5NQVJHSU4uWC5BVVRPLFxuICBDU1MuTUFSR0lOLlJJR0hULlpFUk8sXG4gIENTUy5NQVJHSU4uUklHSFQuT05FLFxuICBDU1MuTUFSR0lOLlJJR0hULkhBTEYsXG4gIENTUy5NQVJHSU4uUklHSFQuUVVBUlRFUixcbiAgQ1NTLk1BUkdJTi5SSUdIVC5UV08sXG4gIENTUy5NQVJHSU4uUklHSFQuRk9VUixcbiAgQ1NTLk1BUkdJTi5SSUdIVC5BVVRPLFxuICBDU1MuTUFSR0lOLkJPVFRPTS5aRVJPLFxuICBDU1MuTUFSR0lOLkJPVFRPTS5PTkUsXG4gIENTUy5NQVJHSU4uQk9UVE9NLkhBTEYsXG4gIENTUy5NQVJHSU4uQk9UVE9NLlFVQVJURVIsXG4gIENTUy5NQVJHSU4uQk9UVE9NLlRXTyxcbiAgQ1NTLk1BUkdJTi5CT1RUT00uRk9VUixcbiAgQ1NTLk1BUkdJTi5MRUZULlpFUk8sXG4gIENTUy5NQVJHSU4uTEVGVC5PTkUsXG4gIENTUy5NQVJHSU4uTEVGVC5IQUxGLFxuICBDU1MuTUFSR0lOLkxFRlQuUVVBUlRFUixcbiAgQ1NTLk1BUkdJTi5MRUZULlRXTyxcbiAgQ1NTLk1BUkdJTi5MRUZULkZPVVIsXG4gIENTUy5NQVJHSU4uTEVGVC5BVVRPLFxuICBDU1MuQk9SREVSLkZVTEwuT05FLFxuICBDU1MuQk9SREVSLkZVTEwuVFdPLFxuICBDU1MuQk9SREVSLlRPUC5PTkUsXG4gIENTUy5CT1JERVIuVE9QLlRXTyxcbiAgQ1NTLkJPUkRFUi5SSUdIVC5PTkUsXG4gIENTUy5CT1JERVIuUklHSFQuVFdPLFxuICBDU1MuQk9SREVSLkJPVFRPTS5PTkUsXG4gIENTUy5CT1JERVIuQk9UVE9NLlRXTyxcbiAgQ1NTLkJPUkRFUi5MRUZULk9ORSxcbiAgQ1NTLkJPUkRFUi5MRUZULlRXTyxcbiAgQ1NTLkJPUkRFUi5SQURJVVMuT05FLFxuICBDU1MuQk9SREVSLlJBRElVUy5IQUxGLFxuICBDU1MuQk9SREVSLlJBRElVUy5RVUFSVEVSLFxuICBDU1MuQk9SREVSLlJBRElVUy5GVUxMLFxuICBDU1MuUEFERElORy5GVUxMLlpFUk8sXG4gIENTUy5QQURESU5HLkZVTEwuT05FLFxuICBDU1MuUEFERElORy5GVUxMLkhBTEYsXG4gIENTUy5QQURESU5HLkZVTEwuUVVBUlRFUixcbiAgQ1NTLlBBRERJTkcuRlVMTC5UV08sXG4gIENTUy5QQURESU5HLkZVTEwuRk9VUixcbiAgQ1NTLlBBRERJTkcuWS5aRVJPLFxuICBDU1MuUEFERElORy5ZLk9ORSxcbiAgQ1NTLlBBRERJTkcuWS5IQUxGLFxuICBDU1MuUEFERElORy5ZLlFVQVJURVIsXG4gIENTUy5QQURESU5HLlkuVFdPLFxuICBDU1MuUEFERElORy5ZLkZPVVIsXG4gIENTUy5QQURESU5HLlRPUC5aRVJPLFxuICBDU1MuUEFERElORy5UT1AuT05FLFxuICBDU1MuUEFERElORy5UT1AuSEFMRixcbiAgQ1NTLlBBRERJTkcuVE9QLlFVQVJURVIsXG4gIENTUy5QQURESU5HLlRPUC5UV08sXG4gIENTUy5QQURESU5HLlRPUC5GT1VSLFxuICBDU1MuUEFERElORy5YLlpFUk8sXG4gIENTUy5QQURESU5HLlguT05FLFxuICBDU1MuUEFERElORy5YLkhBTEYsXG4gIENTUy5QQURESU5HLlguUVVBUlRFUixcbiAgQ1NTLlBBRERJTkcuWC5UV08sXG4gIENTUy5QQURESU5HLlguRk9VUixcbiAgQ1NTLlBBRERJTkcuUklHSFQuWkVSTyxcbiAgQ1NTLlBBRERJTkcuUklHSFQuT05FLFxuICBDU1MuUEFERElORy5SSUdIVC5IQUxGLFxuICBDU1MuUEFERElORy5SSUdIVC5RVUFSVEVSLFxuICBDU1MuUEFERElORy5SSUdIVC5UV08sXG4gIENTUy5QQURESU5HLlJJR0hULkZPVVIsXG4gIENTUy5QQURESU5HLkJPVFRPTS5aRVJPLFxuICBDU1MuUEFERElORy5CT1RUT00uT05FLFxuICBDU1MuUEFERElORy5CT1RUT00uSEFMRixcbiAgQ1NTLlBBRERJTkcuQk9UVE9NLlFVQVJURVIsXG4gIENTUy5QQURESU5HLkJPVFRPTS5UV08sXG4gIENTUy5QQURESU5HLkJPVFRPTS5GT1VSLFxuICBDU1MuUEFERElORy5MRUZULlpFUk8sXG4gIENTUy5QQURESU5HLkxFRlQuT05FLFxuICBDU1MuUEFERElORy5MRUZULkhBTEYsXG4gIENTUy5QQURESU5HLkxFRlQuUVVBUlRFUixcbiAgQ1NTLlBBRERJTkcuTEVGVC5UV08sXG4gIENTUy5QQURESU5HLkxFRlQuRk9VUixcbiAgQ1NTLldJRFRILk1BWF9GVUxMLFxuICBDU1MuV0lEVEguWkVSTyxcbiAgQ1NTLldJRFRILkZVTEwsXG4gIENTUy5IRUlHSFQuWkVSTyxcbiAgQ1NTLkhFSUdIVC5GVUxMLFxuICBDU1MuQUxJR04uWS5NSURETEUsXG4gIENTUy5CUkVBS19XT1JELFxuICBDU1MuQ1VSU09SLk5PVF9BTExPV0VELFxuICBDU1MuQ1VSU09SLlBPSU5URVIsXG4gIENTUy5DVVJTT1IuVEVYVCxcbiAgQ1NTLkZPTlQuU0laRS5UV0VMVkUsXG4gIENTUy5GT05ULlNJWkUuRk9VUlRFRU4sXG4gIENTUy5GT05ULlNJWkUuU0lYVEVFTixcbiAgQ1NTLkZPTlQuU0laRS5UV0VOVFksXG4gIENTUy5GT05ULlNJWkUuVFdFTlRZX0ZPVVIsXG4gIENTUy5GT05ULlNJWkUuVEhJUlRZX1RXTyxcbiAgQ1NTLkZPTlQuV0VJR0hULkZPVVJfSFVORFJFRCxcbiAgQ1NTLkZPTlQuV0VJR0hULkZJVkVfSFVORFJFRCxcbiAgQ1NTLkZPTlQuV0VJR0hULlNJWF9IVU5EUkVELFxuICBDU1MuRk9OVC5XRUlHSFQuU0VWRU5fSFVORFJFRCxcbiAgQ1NTLkxJU1RfQlVMTEVUUy5PRkYsXG4gIENTUy5PQkpFQ1QuQ0VOVEVSLFxuICBDU1MuT0JKRUNULkNPTlRBSU4sXG4gIENTUy5PQkpFQ1QuQ09WRVIsXG4gIENTUy5PQkpFQ1QuU0NBTEVfRE9XTixcbiAgQ1NTLlBPSU5URVJfRVZFTlRTLk9OLFxuICBDU1MuUE9JTlRFUl9FVkVOVFMuT0ZGLFxuICBDU1MuU0NST0xMQkFSLk9GRixcbiAgQ1NTLlNIQURPVy5CT1RUT00sXG4gIENTUy5TSEFET1cuVE9QLFxuICBDU1MuU05BUC5PTixcbiAgQ1NTLlNOQVBfQUxJR04uU1RBUlQsXG4gIENTUy5BTElHTi5YLkxFRlQsXG4gIENTUy5BTElHTi5YLkNFTlRFUixcbiAgQ1NTLkFMSUdOLlguUklHSFQsXG4gIENTUy5URVhUX1RSQU5TRk9STS5MT1dFUixcbiAgQ1NTLlRFWFRfVFJBTlNGT1JNLk5PTkUsXG4gIENTUy5URVhUX1RSQU5TRk9STS5VUFBFUixcbiAgQ1NTLlVOREVSTElORS5IT1ZFUixcbiAgQ1NTLlVOREVSTElORS5PRkYsXG4gIENTUy5VTkRFUkxJTkUuT04sXG4gIENTUy5WSVNJQklMSVRZLk9OLFxuICBDU1MuVklTSUJJTElUWS5PRkYsXG4gIENTUy5XSElURVNQQUNFX1dSQVAuT0ZGLFxuICBDU1MuT1ZFUkZMT1cuWFkuQVVUTyxcbiAgQ1NTLk9WRVJGTE9XLlhZLkhJRERFTixcbiAgQ1NTLk9WRVJGTE9XLlguQVVUTyxcbiAgQ1NTLk9WRVJGTE9XLlguSElEREVOLFxuICBDU1MuT1ZFUkZMT1cuWC5TQ1JPTEwsXG4gIENTUy5PVkVSRkxPVy5ZLkFVVE8sXG4gIENTUy5PVkVSRkxPVy5ZLkhJRERFTixcbiAgQ1NTLlpfSU5ERVguT05FLFxuXSBhcyBjb25zdDtcbiIsImV4cG9ydCBjb25zdCBSRUFMTSA9IHtcbiAgQUVSTzogJ2Flcm8nLFxuICBBVFY6ICdhdHYnLFxuICBCT0FUTUFSVDogJ2JvYXRtYXJ0JyxcbiAgQ1lDTEU6ICdjeWNsZScsXG4gIEVRVUlQTUVOVDogJ2VxdWlwbWVudCcsXG4gIFBXQzogJ3B3YycsXG4gIFJWOiAncnYnLFxuICBTTk9XOiAnc25vdycsXG4gIFRSVUNLOiAndHJ1Y2snLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgUmVhbG1LZXkgPSBrZXlvZiB0eXBlb2YgUkVBTE07XG5leHBvcnQgdHlwZSBSZWFsbSA9ICh0eXBlb2YgUkVBTE0pW1JlYWxtS2V5XTtcbiIsImV4cG9ydCBjb25zdCBTSVpFID0ge1xuICBMQVJHRTogJ2xhcmdlJyxcbiAgU01BTEw6ICdzbWFsbCcsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBTaXplID0gKHR5cGVvZiBTSVpFKVtrZXlvZiB0eXBlb2YgU0laRV07XG5cbmV4cG9ydCBjb25zdCBTSVpFX0JVVFRPTiA9IHtcbiAgTEFSR0U6ICdsYXJnZScsXG4gIFNNQUxMOiAnc21hbGwnLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgU2l6ZUJ1dHRvbiA9ICh0eXBlb2YgU0laRSlba2V5b2YgdHlwZW9mIFNJWkVdO1xuIiwiY29uc3QgY2FwaXRhbGl6ZUZpcnN0ID0gKHN0cmluZzogc3RyaW5nKSA9PiB7XG4gIHJldHVybiBzdHJpbmcuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHJpbmcuc2xpY2UoMSk7XG59O1xuXG5jb25zdCBmb3JtYXRDYW1lbENhc2UgPSAoaW5wdXQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIHJldHVybiBpbnB1dCAmJiB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnXG4gICAgPyBpbnB1dFxuICAgICAgICAucmVwbGFjZSgvXltcXHNfLV0vLCAnJylcbiAgICAgICAgLnJlcGxhY2UoLyhbYS16XXsxfSkoW0EtWl17MX0pL2csICckMSAkMicpXG4gICAgICAgIC5yZXBsYWNlKC9bXFxzXy1dL2csICcgJylcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLnNwbGl0KCcgJylcbiAgICAgICAgLm1hcCgod29yZCwgaW5kZXgpID0+IChpbmRleCA9PT0gMCA/IHdvcmQgOiB3b3JkLnNsaWNlKDAsIDEpLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpKSlcbiAgICAgICAgLmpvaW4oJycpXG4gICAgOiBpbnB1dDtcbn07XG5cbmNvbnN0IGZvcm1hdEtlYmFiQ2FzZSA9IChpbnB1dDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIGlucHV0ICYmIHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZydcbiAgICA/IGlucHV0XG4gICAgICAgIC5yZXBsYWNlKC8oW2Etel17MX0pKFtBLVpdezF9KS9nLCAnJDEgJDInKVxuICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAucmVwbGFjZSgvW1xcc18tXS9nLCAnLScpXG4gICAgOiBpbnB1dDtcbn07XG5cbmNvbnN0IGZvcm1hdExhYmVsID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgbGFiZWxNYXA6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgZmFsc2U6ICdObycsXG4gICAgdHJ1ZTogJ1llcycsXG4gIH07XG4gIHJldHVybiBPYmplY3QuaGFzT3duKGxhYmVsTWFwLCB2YWx1ZSkgPyBsYWJlbE1hcFt2YWx1ZV0gOiB2YWx1ZTtcbn07XG5cbmNvbnN0IGZvcm1hdE51bWJlciA9IChpbnB1dDogbnVtYmVyIHwgc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgbGV0IG91dHB1dCA9IGlucHV0ICYmIHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicgPyBuZXcgSW50bC5OdW1iZXJGb3JtYXQoKS5mb3JtYXQoaW5wdXQpIDogU3RyaW5nKGlucHV0IHx8ICcnKTtcbiAgbGV0IGRpZ2l0cyA9IG91dHB1dDtcblxuICBpZiAoaW5wdXQgJiYgdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgIGRpZ2l0cyA9IGRpZ2l0cy5yZXBsYWNlKC9cXEQvZywgJycpO1xuICAgIGlmIChOdW1iZXIoZGlnaXRzKSkge1xuICAgICAgb3V0cHV0ID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KCkuZm9ybWF0KE51bWJlcihkaWdpdHMpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0cHV0ID0gJzAnO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59O1xuXG5jb25zdCBmb3JtYXRQYXNjYWxDYXNlID0gKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gaW5wdXQgJiYgdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJ1xuICAgID8gaW5wdXRcbiAgICAgICAgLnJlcGxhY2UoLyhbYS16XXsxfSkoW0EtWl17MX0pL2csICckMSAkMicpXG4gICAgICAgIC5yZXBsYWNlKC9bXFxzXy1dL2csICcgJylcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLnNwbGl0KCcgJylcbiAgICAgICAgLm1hcCgod29yZCkgPT4gd29yZC5zbGljZSgwLCAxKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSlcbiAgICAgICAgLmpvaW4oJycpXG4gICAgOiBpbnB1dDtcbn07XG5cbmNvbnN0IGZvcm1hdFBob25lID0gKGlucHV0OiBudW1iZXIgfCBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBsZXQgb3V0cHV0ID0gaW5wdXQgJiYgdHlwZW9mIGlucHV0ID09PSAnbnVtYmVyJyA/IFN0cmluZyhpbnB1dCkgOiBTdHJpbmcoaW5wdXQgfHwgJycpO1xuICBsZXQgZGlnaXRzID0gb3V0cHV0O1xuICBkaWdpdHMgPSBkaWdpdHMucmVwbGFjZSgvXFxEL2csICcnKTtcblxuICBzd2l0Y2ggKGRpZ2l0cy5sZW5ndGgpIHtcbiAgICBjYXNlIDc6XG4gICAgICBvdXRwdXQgPSBgJHtkaWdpdHMuc2xpY2UoMCwgMyl9LSR7ZGlnaXRzLnNsaWNlKDMpfWA7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDEwOlxuICAgICAgb3V0cHV0ID0gYCR7ZGlnaXRzLnNsaWNlKDAsIDMpfS0ke2RpZ2l0cy5zbGljZSgzLCA2KX0tJHtkaWdpdHMuc2xpY2UoNil9YDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTE6XG4gICAgICBvdXRwdXQgPSBgJHtkaWdpdHMuc2xpY2UoMCwgMSl9LSR7ZGlnaXRzLnNsaWNlKDEsIDQpfS0ke2RpZ2l0cy5zbGljZSg0LCA3KX0tJHtkaWdpdHMuc2xpY2UoNyl9YDtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBvdXRwdXQgPSBkaWdpdHM7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59O1xuXG5jb25zdCBmb3JtYXRQcmljZSA9IChpbnB1dDogbnVtYmVyIHwgc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3Qgb3V0cHV0ID0gaW5wdXQgPyBmb3JtYXROdW1iZXIoaW5wdXQpIDogU3RyaW5nKGlucHV0IHx8ICcwJyk7XG4gIHJldHVybiBgJCR7b3V0cHV0fWA7XG59O1xuXG5jb25zdCBmb3JtYXRRdW90ZXMgPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICBpZiAodmFsdWUuc3RhcnRzV2l0aCgnXCInKSAmJiB2YWx1ZS5lbmRzV2l0aCgnXCInKSkge1xuICAgIHJldHVybiB2YWx1ZS5zbGljZSgxLCAtMSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59O1xuXG5jb25zdCBmb3JtYXRTZW50ZW5jZUNhc2UgPSAoaW5wdXQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGxldCBzZW50ZW5jZUNhc2UgPSBpbnB1dDtcblxuICBpZiAoaW5wdXQgJiYgdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IGxvd2VyQ2FzZSA9IGlucHV0XG4gICAgICAucmVwbGFjZSgvKFthLXpdezF9KShbQS1aXXsxfSkvZywgJyQxICQyJylcbiAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAucmVwbGFjZSgvW1xcc18tXS9nLCAnICcpO1xuXG4gICAgc2VudGVuY2VDYXNlID0gbG93ZXJDYXNlLnNsaWNlKDAsIDEpLnRvVXBwZXJDYXNlKCkgKyBsb3dlckNhc2Uuc2xpY2UoMSk7XG4gIH1cblxuICByZXR1cm4gc2VudGVuY2VDYXNlO1xufTtcblxuY29uc3QgZm9ybWF0U25ha2VDYXNlID0gKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gaW5wdXQgJiYgdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJ1xuICAgID8gaW5wdXRcbiAgICAgICAgLnJlcGxhY2UoLyhbYS16XXsxfSkoW0EtWl17MX0pL2csICckMSAkMicpXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgIC5yZXBsYWNlKC9bXFxzXy1dL2csICdfJylcbiAgICA6IGlucHV0O1xufTtcblxuY29uc3QgZm9ybWF0VGl0bGVDYXNlID0gKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gaW5wdXQgJiYgdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJ1xuICAgID8gaW5wdXRcbiAgICAgICAgLnJlcGxhY2UoLyhbYS16XXsxfSkoW0EtWl17MX0pL2csICckMSAkMicpXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgIC5yZXBsYWNlKC9bXFxzXy1dL2csICcgJylcbiAgICAgICAgLnNwbGl0KCcgJylcbiAgICAgICAgLm1hcCgod29yZCkgPT4gd29yZC5zbGljZSgwLCAxKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSlcbiAgICAgICAgLmpvaW4oJyAnKVxuICAgIDogaW5wdXQ7XG59O1xuXG5jb25zdCBmb3JtYXRVcmxGcm9tUm9vdCA9ICh1cmw6IHN0cmluZykgPT4ge1xuICBjb25zdCB1cmxGb3JtYXR0ZWQgPSB1cmwuc3BsaXQoJy5jb20vJyk7XG5cbiAgcmV0dXJuIHVybEZvcm1hdHRlZC5sZW5ndGggPiAxID8gYC8ke3VybEZvcm1hdHRlZFsxXX1gIDogdXJsO1xufTtcblxuY29uc3QgZm9ybWF0V2VpZ2h0ID0gKGlucHV0OiBudW1iZXIgfCBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBvdXRwdXQgPSBpbnB1dCA/IGZvcm1hdE51bWJlcihpbnB1dCkgOiBTdHJpbmcoaW5wdXQgfHwgJzAnKTtcbiAgcmV0dXJuIGAke291dHB1dH0gbGJzYDtcbn07XG5cbmNvbnN0IGdldEFydGljbGUgPSAobm91bjogc3RyaW5nLCBpc1BsdXJhbCA9IGZhbHNlLCBpc0RlZmluaXRlID0gZmFsc2UpID0+IHtcbiAgY29uc3Qgdm93ZWxzID0gWydhJywgJ2UnLCAnaScsICdvJywgJ3UnXTtcbiAgY29uc3QgaXNWb3dlbExlYWRpbmcgPSB2b3dlbHMuaW5jbHVkZXMobm91bi5jaGFyQXQoMCkpO1xuXG4gIHJldHVybiBpc0RlZmluaXRlID8gJ3RoZScgOiBpc1BsdXJhbCA/ICdzb21lJyA6IGlzVm93ZWxMZWFkaW5nID8gJ2FuJyA6ICdhJztcbn07XG5cbmNvbnN0IHByaWNlVG9OdW1iZXIgPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICBpZiAoTnVtYmVyLmlzTmFOKE51bWJlcih2YWx1ZSkpKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKCckJywgJycpO1xuICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvLC9nLCAnJyk7XG4gIH1cbiAgcmV0dXJuIHBhcnNlSW50KHZhbHVlLCAxMCk7XG59O1xuXG5jb25zdCB1bmZvcm1hdFByaWNlID0gKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBvdXRwdXQgPSBpbnB1dC5yZXBsYWNlKC9cXCQvZywgJycpLnJlcGxhY2UoLywvZywgJycpO1xuICByZXR1cm4gYCR7b3V0cHV0fWA7XG59O1xuXG5leHBvcnQge1xuICBjYXBpdGFsaXplRmlyc3QsXG4gIGZvcm1hdENhbWVsQ2FzZSxcbiAgZm9ybWF0S2ViYWJDYXNlLFxuICBmb3JtYXRMYWJlbCxcbiAgZm9ybWF0TnVtYmVyLFxuICBmb3JtYXRQYXNjYWxDYXNlLFxuICBmb3JtYXRQaG9uZSxcbiAgZm9ybWF0UHJpY2UsXG4gIGZvcm1hdFF1b3RlcyxcbiAgZm9ybWF0U2VudGVuY2VDYXNlLFxuICBmb3JtYXRTbmFrZUNhc2UsXG4gIGZvcm1hdFRpdGxlQ2FzZSxcbiAgZm9ybWF0VXJsRnJvbVJvb3QsXG4gIGZvcm1hdFdlaWdodCxcbiAgZ2V0QXJ0aWNsZSxcbiAgcHJpY2VUb051bWJlcixcbiAgdW5mb3JtYXRQcmljZSxcbn07XG4iLCI8c2NyaXB0IGxhbmc9XCJ0c1wiIHNldHVwPlxuICBpbXBvcnQgeyBkZWZpbmVBc3luY0NvbXBvbmVudCwgbWFya1JhdywgcmVmLCB3YXRjaCB9IGZyb20gJ3Z1ZSc7XG5cbiAgaW1wb3J0IHsgUkVBTE0gfSBmcm9tICdAL3R5cGVzL1JlYWxtJztcbiAgaW1wb3J0IHsgU0laRSB9IGZyb20gJ0AvdHlwZXMvU2l6ZSc7XG4gIGltcG9ydCB7IENTUyB9IGZyb20gJ0AvdHlwZXMvU3R5bGVzJztcbiAgaW1wb3J0IHsgZm9ybWF0UGFzY2FsQ2FzZSB9IGZyb20gJ0AvdXRpbGl0aWVzL2Zvcm1hdCc7XG5cbiAgaW1wb3J0IHR5cGUgeyBJY29uIH0gZnJvbSAnQC90eXBlcy9JY29uJztcbiAgaW1wb3J0IHR5cGUgeyBTaXplIH0gZnJvbSAnQC90eXBlcy9TaXplJztcbiAgaW1wb3J0IHR5cGUgeyBDb21wb25lbnQgfSBmcm9tICd2dWUnO1xuXG4gIHR5cGUgUHJvcHMgPSB7XG4gICAgaWNvbjogSWNvbjtcbiAgICBzaXplPzogU2l6ZTtcbiAgfTtcblxuICBjb25zdCBwcm9wcyA9IHdpdGhEZWZhdWx0cyhkZWZpbmVQcm9wczxQcm9wcz4oKSwge1xuICAgIHNpemU6IFNJWkUuU01BTEwsXG4gIH0pO1xuXG4gIGNvbnN0IGlubmVyU1ZHID0gcmVmPENvbXBvbmVudD4oKTtcblxuICB3YXRjaChcbiAgICAoKSA9PiBwcm9wcy5pY29uLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGlkOiBzdHJpbmcgPSBwcm9wcy5pY29uO1xuICAgICAgY29uc3QgbmFtZSA9IGZvcm1hdFBhc2NhbENhc2UoaWQpO1xuICAgICAgY29uc3QgW3ByZWZpeF0gPSBpZC5zcGxpdCgnLScpO1xuICAgICAgY29uc3QgcmVhbG1Gb2xkZXIgPSBSRUFMTVtwcmVmaXg/LnRvVXBwZXJDYXNlKCkgYXMga2V5b2YgdHlwZW9mIFJFQUxNXTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGRlZmluZUFzeW5jQ29tcG9uZW50KCgpID0+IHtcbiAgICAgICAgaWYgKHJlYWxtRm9sZGVyKSB7XG4gICAgICAgICAgcmV0dXJuIGltcG9ydChgLi4vYXNzZXRzL3N2Zy9pY29ucy9yZWFsbS8ke3JlYWxtRm9sZGVyfS9JY29uJHtuYW1lfS5zdmc/Y29tcG9uZW50YCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaW1wb3J0KGAuLi9hc3NldHMvc3ZnL2ljb25zL0ljb24ke25hbWV9LnN2Zz9jb21wb25lbnRgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpbm5lclNWRy52YWx1ZSA9IG1hcmtSYXcoY29tcG9uZW50KTtcbiAgICB9LFxuICAgIHsgaW1tZWRpYXRlOiB0cnVlIH1cbiAgKTtcbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG4gIDxkaXYgOmNsYXNzPVwiWyd0aWRlLWljb24nLCBwcm9wcy5zaXplXVwiPlxuICAgIDxDb21wb25lbnRcbiAgICAgIDpjbGFzcz1cIltDU1MuRElTUExBWS5CTE9DS11cIlxuICAgICAgOmRhdGEtaWNvbj1cImljb25cIlxuICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiXG4gICAgICA6aXM9XCJpbm5lclNWR1wiXG4gICAgICB2LWlmPVwiaW5uZXJTVkdcIlxuICAgIC8+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlPlxuICAudGlkZS1pY29uIHtcbiAgICB3aWR0aDogMS41cmVtO1xuICAgIGhlaWdodDogMS41cmVtO1xuICB9XG5cbiAgLnRpZGUtaWNvbi5zbWFsbCB7XG4gICAgd2lkdGg6IDEuMjVyZW07XG4gICAgaGVpZ2h0OiAxLjI1cmVtO1xuICB9XG5cbiAgLnRpZGUtaWNvbiBzdmcge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgfVxuPC9zdHlsZT5cbiIsImltcG9ydCB0eXBlIHsgUmVhbG1LZXkgfSBmcm9tICdAL3R5cGVzL1JlYWxtJztcblxuZXhwb3J0IGNvbnN0IElDT04gPSB7XG4gIEFDQ09VTlRfQkFMQU5DRTogJ2FjY291bnQtYmFsYW5jZScsXG4gIEFDVVRFOiAnYWN1dGUnLFxuICBBREQ6ICdhZGQnLFxuICBBSV9ERVNDUklQVElPTjogJ2FpLWRlc2NyaXB0aW9uJyxcbiAgQUxJR05fU1BBQ0VfRVZFTjogJ2FsaWduLXNwYWNlLWV2ZW4nLFxuICBBUFBMRV9QQVk6ICdhcHBsZS1wYXknLFxuICBBUlJPV19CQUNLOiAnYXJyb3ctYmFjaycsXG4gIEFSUk9XX0NZQ0xFOiAnYXJyb3ctY3ljbGUnLFxuICBBUlJPV19GT1JXQVJEOiAnYXJyb3ctZm9yd2FyZCcsXG4gIEFSUk9XX1JJR0hUOiAnYXJyb3ctcmlnaHQnLFxuICBBU1NJR05NRU5UOiAnYXNzaWdubWVudCcsXG4gIEFUVEFDSF9NT05FWTogJ2F0dGFjaC1tb25leScsXG4gIEFVVE9fUkVORVc6ICdhdXRvLXJlbmV3JyxcbiAgQVdBUkRfU1RBUjogJ2F3YXJkLXN0YXInLFxuICBCRUQ6ICdiZWQnLFxuICBCT0xUOiAnYm9sdCcsXG4gIEJPT0tNQVJLOiAnYm9va21hcmsnLFxuICBCVU5LSE9VU0U6ICdidW5raG91c2UnLFxuICBDQUxFTkRBUl9NT05USDogJ2NhbGVuZGFyLW1vbnRoJyxcbiAgQ0FMTDogJ2NhbGwnLFxuICBDQUxMX1FVQUxJVFk6ICdjYWxsLXF1YWxpdHknLFxuICBDQVJfUkVOVEFMOiAnY2FyLXJlbnRhbCcsXG4gIENIRUNLOiAnY2hlY2snLFxuICBDSEVWUk9OX0xFRlQ6ICdjaGV2cm9uLWxlZnQnLFxuICBDSEVWUk9OX1JJR0hUOiAnY2hldnJvbi1yaWdodCcsXG4gIENMRUFSOiAnY2xlYXInLFxuICBDTE9TRTogJ2Nsb3NlJyxcbiAgQ09OVFJBQ1Q6ICdjb250cmFjdCcsXG4gIENSQVNIOiAnY3Jhc2gnLFxuICBEQVNIQk9BUkRfQ1VTVE9NSVpFOiAnZGFzaGJvYXJkLWN1c3RvbWl6ZScsXG4gIERFTEVURTogJ2RlbGV0ZScsXG4gIERJQU1PTkQ6ICdkaWFtb25kJyxcbiAgRElSRUNUSU9OU19CT0FUOiAnZGlyZWN0aW9ucy1ib2F0JyxcbiAgRE9NQUlOOiAnZG9tYWluJyxcbiAgRFJBRlQ6ICdkcmFmdCcsXG4gIEVESVQ6ICdlZGl0JyxcbiAgRU5HSU5FOiAnZW5naW5lJyxcbiAgRU5HSU5FRVJJTkc6ICdlbmdpbmVlcmluZycsXG4gIEVSUk9SOiAnZXJyb3InLFxuICBFWFBBTkRfQ09OVEVOVDogJ2V4cGFuZC1jb250ZW50JyxcbiAgRVhQQU5EX0xFU1M6ICdleHBhbmQtbGVzcycsXG4gIEVYUEFORF9NT1JFOiAnZXhwYW5kLW1vcmUnLFxuICBGQUNFQk9PSzogJ2ZhY2Vib29rJyxcbiAgRkFWT1JJVEU6ICdmYXZvcml0ZScsXG4gIEZBVk9SSVRFX0ZJTExFRDogJ2Zhdm9yaXRlLWZpbGxlZCcsXG4gIEZMQUc6ICdmbGFnJyxcbiAgRk9STUFUX0JPTEQ6ICdmb3JtYXQtYm9sZCcsXG4gIEZPUk1BVF9JVEFMSUM6ICdmb3JtYXQtaXRhbGljJyxcbiAgRk9STUFUX0xJU1RfQlVMTEVURUQ6ICdmb3JtYXQtbGlzdC1idWxsZXRlZCcsXG4gIEZPUlVNOiAnZm9ydW0nLFxuICBHQVM6ICdnYXMnLFxuICBHQVZFTDogJ2dhdmVsJyxcbiAgR0VBUlM6ICdnZWFycycsXG4gIEdMT0JFX0xPQ0FUSU9OX1BJTjogJ2dsb2JlLWxvY2F0aW9uLXBpbicsXG4gIEdPT0dMRTogJ2dvb2dsZScsXG4gIEdPT0dMRV9QQVk6ICdnb29nbGUtcGF5JyxcbiAgR1JJRDogJ2dyaWQnLFxuICBIQU5EU0hBS0U6ICdoYW5kc2hha2UnLFxuICBIQU5EWU1BTjogJ2hhbmR5bWFuJyxcbiAgSEVJR0hUOiAnaGVpZ2h0JyxcbiAgSEVMUDogJ2hlbHAnLFxuICBJTkZPOiAnaW5mbycsXG4gIElORk9STUFUSU9OOiAnaW5mb3JtYXRpb24nLFxuICBJTlNFUlRfVEVYVDogJ2luc2VydC10ZXh0JyxcbiAgSU5TVEFHUkFNOiAnaW5zdGFncmFtJyxcbiAgSU9TX1NIQVJFOiAnaW9zLXNoYXJlJyxcbiAgTEFZT1VUOiAnbGF5b3V0JyxcbiAgTEVWRUxMSU5HX0pBQ0s6ICdsZXZlbGxpbmctamFjaycsXG4gIExJTktFRF9JTjogJ2xpbmtlZCBpbicsXG4gIExPQ0FMX1NISVBQSU5HOiAnbG9jYWwtc2hpcHBpbmcnLFxuICBMT0NLOiAnbG9jaycsXG4gIE1BSUw6ICdtYWlsJyxcbiAgTUVOVTogJ21lbnUnLFxuICBNT05FWV9CQUc6ICdtb25leS1iYWcnLFxuICBNT1JFX0hPUklaOiAnbW9yZS1ob3JpeicsXG4gIE5PVElGSUNBVElPTlM6ICdub3RpZmljYXRpb25zJyxcbiAgT0RPTUVURVI6ICdvZG9tZXRlcicsXG4gIE9QRU5fSU5fTkVXOiAnb3Blbi1pbi1uZXcnLFxuICBQQUxFVFRFOiAncGFsZXR0ZScsXG4gIFBBWVBBTDogJ3BheXBhbCcsXG4gIFBFUlNPTjogJ3BlcnNvbicsXG4gIFBFUlNPTl9TRUFSQ0g6ICdwZXJzb24tc2VhcmNoJyxcbiAgUEhPVE9fQ0FNRVJBOiAncGhvdG8tY2FtZXJhJyxcbiAgUElOVEVSRVNUOiAncGludGVyZXN0JyxcbiAgUExBWV9BUlJPVzogJ3BsYXktYXJyb3cnLFxuICBQT0xJQ1k6ICdwb2xpY3knLFxuICBQT1dFUjogJ3Bvd2VyJyxcbiAgUE9XRVJfT0ZGOiAncG93ZXItb2ZmJyxcbiAgUFJJT1JJVFlfSElHSDogJ3ByaW9yaXR5LWhpZ2gnLFxuICBSRU1PVkU6ICdyZW1vdmUnLFxuICBSRVFVRVNUX1FVT1RFOiAncmVxdWVzdC1xdW90ZScsXG4gIFJFU0VUX1dSRU5DSDogJ3Jlc2V0LXdyZW5jaCcsXG4gIFJPQUQ6ICdyb2FkJyxcbiAgUk9VTkRFRF9DT1JORVI6ICdyb3VuZGVkLWNvcm5lcicsXG4gIFJVTEVSOiAncnVsZXInLFxuICBTQUlMSU5HOiAnc2FpbGluZycsXG4gIFNDSE9PTDogJ3NjaG9vbCcsXG4gIFNFQVJDSDogJ3NlYXJjaCcsXG4gIFNFQVRJTkc6ICdzZWF0aW5nJyxcbiAgU0VMTDogJ3NlbGwnLFxuICBTRU5TT1JTOiAnc2Vuc29ycycsXG4gIFNFVFRJTkdTOiAnc2V0dGluZ3MnLFxuICBTSEFSRTogJ3NoYXJlJyxcbiAgU0hJRUxEX0NIRUNLOiAnc2hpZWxkLWNoZWNrJyxcbiAgU0hPUFBJTkdfQ0FSVDogJ3Nob3BwaW5nLWNhcnQnLFxuICBTTEVFUFM6ICdzbGVlcHMnLFxuICBTTVM6ICdzbXMnLFxuICBTTk9XRkxBS0U6ICdzbm93Zmxha2UnLFxuICBTVEFSOiAnc3RhcicsXG4gIFNVTU1BUklaRTogJ3N1bW1hcml6ZScsXG4gIFNXQVBfSE9SSVo6ICdzd2FwLWhvcml6JyxcbiAgU1dBUF9WRVJUOiAnc3dhcC12ZXJ0JyxcbiAgVEhSRUVfRF9ST1RBVElPTjogJ3RocmVlLWQtcm90YXRpb24nLFxuICBUSFVNQl9VUDogJ3RodW1iLXVwJyxcbiAgVFJFTkRJTkdfRE9XTjogJ3RyZW5kaW5nLWRvd24nLFxuICBUUk9QSFk6ICd0cm9waHknLFxuICBUVU5FOiAndHVuZScsXG4gIFRXSVRURVI6ICd0d2l0dGVyJyxcbiAgVU1CUkVMTEE6ICd1bWJyZWxsYScsXG4gIFZFUklGSUVEOiAndmVyaWZpZWQnLFxuICBWSURFT0NBTTogJ3ZpZGVvY2FtJyxcbiAgVklFV19JTl9BUjogJ3ZpZXctaW4tYXInLFxuICBWSVNJQklMSVRZOiAndmlzaWJpbGl0eScsXG4gIFZPTFVNRV9PRkY6ICd2b2x1bWUtb2ZmJyxcbiAgVk9MVU1FX09OOiAndm9sdW1lLW9uJyxcbiAgV0FSRUhPVVNFOiAnd2FyZWhvdXNlJyxcbiAgV0FSTklORzogJ3dhcm5pbmcnLFxuICBXQVRFUjogJ3dhdGVyJyxcbiAgV0VJR0hUOiAnd2VpZ2h0JyxcbiAgV0lEVEg6ICd3aWR0aCcsXG4gIFdPUktTUEFDRV9QUkVNSVVNOiAnd29ya3NwYWNlLXByZW1pdW0nLFxuICBXUkVOQ0g6ICd3cmVuY2gnLFxuICBZT1VUVUJFOiAneW91dHViZScsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgSUNPTl9SRUFMTSA9IHtcbiAgQVRWOiB7XG4gICAgQVRWOiAnYXR2LWF0dicsXG4gICAgRFVORV9CVUdHWTogJ2F0di1kdW5lLWJ1Z2d5JyxcbiAgICBHT0xGX0NBUlQ6ICdhdHYtZ29sZi1jYXJ0JyxcbiAgICBHT19LQVJUOiAnYXR2LWdvLWthcnQnLFxuICAgIFNBTkRfUkFJTDogJ2F0di1zYW5kLXJhaWwnLFxuICAgIFNJREVfQllfU0lERTogJ2F0di1zaWRlLWJ5LXNpZGUnLFxuICAgIFRSQUlMRVI6ICdhdHYtdHJhaWxlcicsXG4gIH0sXG4gIEJPQVRNQVJUOiB7XG4gICAgUFdDOiAnYm9hdG1hcnQtcHdjJyxcbiAgICBUUkFJTEVSOiAnYm9hdG1hcnQtdHJhaWxlcicsXG4gIH0sXG4gIFJWOiB7XG4gICAgQ0xBU1NfQTogJ3J2LWNsYXNzLWEnLFxuICAgIENMQVNTX0I6ICdydi1jbGFzcy1iJyxcbiAgICBDTEFTU19DOiAncnYtY2xhc3MtYycsXG4gICAgRklGVEhfV0hFRUw6ICdydi1maWZ0aC13aGVlbCcsXG4gICAgRklTSF9IT1VTRTogJ3J2LWZpc2gtaG91c2UnLFxuICAgIFBBUktfTU9ERUw6ICdydi1wYXJrLW1vZGVsJyxcbiAgICBQT1BfVVBfQ0FNUEVSOiAncnYtcG9wLXVwLWNhbXBlcicsXG4gICAgVFJBVkVMX1RSQUlMRVI6ICdydi10cmF2ZWwtdHJhaWxlcicsXG4gICAgVFJVQ0tfQ0FNUEVSOiAncnYtdHJ1Y2stY2FtcGVyJyxcbiAgfSxcbn0gYXMgY29uc3Q7XG5cbnR5cGUgUmVhbG1LZXlzV2l0aEljb25zID0gRXh0cmFjdDxSZWFsbUtleSwga2V5b2YgdHlwZW9mIElDT05fUkVBTE0+O1xudHlwZSBSZWFsbUljb24gPSB7XG4gIFtSZWFsbUtleSBpbiBSZWFsbUtleXNXaXRoSWNvbnNdOiAodHlwZW9mIElDT05fUkVBTE0pW1JlYWxtS2V5XVtrZXlvZiAodHlwZW9mIElDT05fUkVBTE0pW1JlYWxtS2V5XV07XG59W1JlYWxtS2V5c1dpdGhJY29uc107XG5cbmV4cG9ydCB0eXBlIEdsb2JhbEljb24gPSAodHlwZW9mIElDT04pW2tleW9mIHR5cGVvZiBJQ09OXTtcbmV4cG9ydCB0eXBlIEljb24gPSBHbG9iYWxJY29uIHwgUmVhbG1JY29uO1xuIiwiPHNjcmlwdCBsYW5nPVwidHNcIiBzZXR1cD5cbiAgaW1wb3J0IFRpZGVEaXZpZGVyIGZyb20gJ0AvY29tcG9uZW50cy9UaWRlRGl2aWRlci52dWUnO1xuICBpbXBvcnQgVGlkZUljb24gZnJvbSAnQC9jb21wb25lbnRzL1RpZGVJY29uLnZ1ZSc7XG4gIGltcG9ydCB7IElDT04gfSBmcm9tICdAL3R5cGVzL0ljb24nO1xuICBpbXBvcnQgeyBTSVpFIH0gZnJvbSAnQC90eXBlcy9TaXplJztcbiAgaW1wb3J0IHsgQ1NTIH0gZnJvbSAnQC90eXBlcy9TdHlsZXMnO1xuXG4gIGNvbnN0IGVtaXQgPSBkZWZpbmVFbWl0cyhbJ3RvZ2dsZSddKTtcblxuICB0eXBlIFByb3BzID0ge1xuICAgIGhhc0JvdHRvbURpdmlkZXI/OiBib29sZWFuO1xuICAgIGhhc1RvcERpdmlkZXI/OiBib29sZWFuO1xuICAgIGlzRXhwYW5kZWQ/OiBib29sZWFuO1xuICAgIGlzT3B0aW9uYWw/OiBib29sZWFuO1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gIH07XG5cbiAgY29uc3QgcHJvcHMgPSB3aXRoRGVmYXVsdHMoZGVmaW5lUHJvcHM8UHJvcHM+KCksIHtcbiAgICBoYXNCb3R0b21EaXZpZGVyOiBmYWxzZSxcbiAgICBoYXNUb3BEaXZpZGVyOiBmYWxzZSxcbiAgICBpc0V4cGFuZGVkOiBmYWxzZSxcbiAgICBpc09wdGlvbmFsOiBmYWxzZSxcbiAgICBsYWJlbDogJycsXG4gIH0pO1xuXG4gIGNvbnN0IGhhbmRsZVRvZ2dsZUNsaWNrID0gKCkgPT4ge1xuICAgIGVtaXQoJ3RvZ2dsZScpO1xuICB9O1xuPC9zY3JpcHQ+XG5cbjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cInRpZGUtYWNjb3JkaW9uLWl0ZW1cIj5cbiAgICA8VGlkZURpdmlkZXIgdi1pZj1cInByb3BzLmhhc1RvcERpdmlkZXJcIiAvPlxuXG4gICAgPGRpdlxuICAgICAgOmNsYXNzPVwiWyd0aWRlLWFjY29yZGlvbi1oZWFkJywgQ1NTLkRJU1BMQVkuRkxFWCwgQ1NTLkFYSVMxLkJFVFdFRU4sIENTUy5QQURESU5HLlkuSEFMRiwgQ1NTLkNVUlNPUi5QT0lOVEVSXVwiXG4gICAgICBAY2xpY2s9XCJoYW5kbGVUb2dnbGVDbGlja1wiXG4gICAgPlxuICAgICAgPGRpdiA6Y2xhc3M9XCJbQ1NTLkRJU1BMQVkuRkxFWCwgQ1NTLkFYSVMyLkNFTlRFUiwgQ1NTLkdBUC5IQUxGLCBDU1MuRk9OVC5ST0xFLkxBQkVMXzFfU0VNSUJPTERdXCI+XG4gICAgICAgIDxzcGFuPnt7IHByb3BzLmxhYmVsIH19PC9zcGFuPlxuXG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgOmNsYXNzPVwiW0NTUy5GT05ULkNPTE9SLlNVUkZBQ0UuVkFSSUFOVF1cIlxuICAgICAgICAgIHYtaWY9XCJwcm9wcy5pc09wdGlvbmFsXCJcbiAgICAgICAgPlxuICAgICAgICAgIChvcHRpb25hbClcbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxUaWRlSWNvblxuICAgICAgICA6aWNvbj1cImlzRXhwYW5kZWQgPyBJQ09OLkVYUEFORF9MRVNTIDogSUNPTi5FWFBBTkRfTU9SRVwiXG4gICAgICAgIDpzaXplPVwiU0laRS5MQVJHRVwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiA6Y2xhc3M9XCJbJ3RpZGUtYWNjb3JkaW9uLWJvZHknLCBwcm9wcy5pc0V4cGFuZGVkID8gJ2V4cGFuZGVkJyA6ICdjb2xsYXBzZWQnLCBDU1MuRElTUExBWS5HUklEXVwiPlxuICAgICAgPGRpdiA6Y2xhc3M9XCJbQ1NTLk9WRVJGTE9XLlkuSElEREVOLCBDU1MuTUFSR0lOLlkuT05FLCBDU1MuRk9OVC5ST0xFLkJPRFlfMSwgQ1NTLkZPTlQuQ09MT1IuU1VSRkFDRS5ERUZBVUxUXVwiPlxuICAgICAgICA8c2xvdCAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8VGlkZURpdmlkZXIgdi1pZj1cInByb3BzLmhhc0JvdHRvbURpdmlkZXJcIiAvPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBzY29wZWQ+XG4gIC50aWRlLWFjY29yZGlvbi1ib2R5IHtcbiAgICB0cmFuc2l0aW9uOiBncmlkLXRlbXBsYXRlLXJvd3MgdmFyKC0tdGlkZS1hbmltYXRlKTtcbiAgfVxuXG4gIC50aWRlLWFjY29yZGlvbi1ib2R5LmV4cGFuZGVkIHtcbiAgICBncmlkLXRlbXBsYXRlLXJvd3M6IDFmcjtcbiAgfVxuXG4gIC50aWRlLWFjY29yZGlvbi1ib2R5LmNvbGxhcHNlZCB7XG4gICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiAwZnI7XG4gIH1cbjwvc3R5bGU+XG4iLCJleHBvcnQgY29uc3QgRUxFTUVOVCA9IHtcbiAgQlVUVE9OOiAnYnV0dG9uJyxcbiAgTElOSzogJ2EnLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IEVMRU1FTlRfVEVYVF9BU19JQ09OID0ge1xuICBCVVRUT046ICdidXR0b24nLFxuICBESVY6ICdkaXYnLFxuICBMSU5LOiAnYScsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBFbGVtZW50ID0gKHR5cGVvZiBFTEVNRU5UKVtrZXlvZiB0eXBlb2YgRUxFTUVOVF07XG5leHBvcnQgdHlwZSBFbGVtZW50VGV4dEFzSWNvbiA9ICh0eXBlb2YgRUxFTUVOVF9URVhUX0FTX0lDT04pW2tleW9mIHR5cGVvZiBFTEVNRU5UX1RFWFRfQVNfSUNPTl07XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSB2dWUvc29ydC1rZXlzICovXG5cbmV4cG9ydCBjb25zdCBQUklPUklUWSA9IHtcbiAgUFJJTUFSWTogJ3ByaW1hcnknLFxuICBTRUNPTkRBUlk6ICdzZWNvbmRhcnknLFxuICBURVJUSUFSWTogJ3RlcnRpYXJ5JyxcbiAgUVVBVEVSTkFSWTogJ3F1YXRlcm5hcnknLFxuICBGTE9BVElORzogJ2Zsb2F0aW5nJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIFByaW9yaXR5ID0gKHR5cGVvZiBQUklPUklUWSlba2V5b2YgdHlwZW9mIFBSSU9SSVRZXTtcbiIsImV4cG9ydCBjb25zdCBUQVJHRVQgPSB7XG4gIEJMQU5LOiAnX2JsYW5rJyxcbiAgU0VMRjogdW5kZWZpbmVkLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgVGFyZ2V0ID0gKHR5cGVvZiBUQVJHRVQpW2tleW9mIHR5cGVvZiBUQVJHRVRdO1xuIiwiZXhwb3J0IGNvbnN0IEFMRVJUID0ge1xuICBFUlJPUjogJ2Vycm9yJyxcbiAgSU5GTzogJ2luZm8nLFxuICBTVUNDRVNTOiAnc3VjY2VzcycsXG4gIFdBUk5JTkc6ICd3YXJuaW5nJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIEFsZXJ0ID0gKHR5cGVvZiBBTEVSVClba2V5b2YgdHlwZW9mIEFMRVJUXTtcbiIsIjxzY3JpcHQgbGFuZz1cInRzXCIgc2V0dXA+XG4gIGltcG9ydCB7IGNvbXB1dGVkIH0gZnJvbSAndnVlJztcblxuICBpbXBvcnQgVGlkZUJ1dHRvbkljb24gZnJvbSAnQC9jb21wb25lbnRzL1RpZGVCdXR0b25JY29uLnZ1ZSc7XG4gIGltcG9ydCBUaWRlSWNvbiBmcm9tICdAL2NvbXBvbmVudHMvVGlkZUljb24udnVlJztcbiAgaW1wb3J0IHsgQUxFUlQgfSBmcm9tICdAL3R5cGVzL0FsZXJ0JztcbiAgaW1wb3J0IHsgSUNPTiB9IGZyb20gJ0AvdHlwZXMvSWNvbic7XG4gIGltcG9ydCB7IFBSSU9SSVRZIH0gZnJvbSAnQC90eXBlcy9Qcmlvcml0eSc7XG4gIGltcG9ydCB7IENTUyB9IGZyb20gJ0AvdHlwZXMvU3R5bGVzJztcblxuICBpbXBvcnQgdHlwZSB7IEFsZXJ0IH0gZnJvbSAnQC90eXBlcy9BbGVydCc7XG4gIGltcG9ydCB0eXBlIHsgSWNvbiB9IGZyb20gJ0AvdHlwZXMvSWNvbic7XG5cbiAgdHlwZSBQcm9wcyA9IHtcbiAgICBoZWFkaW5nPzogc3RyaW5nO1xuICAgIGlzVG9hc3Q/OiBib29sZWFuO1xuICAgIHR5cGU/OiBBbGVydDtcbiAgfTtcblxuICBjb25zdCBwcm9wcyA9IHdpdGhEZWZhdWx0cyhkZWZpbmVQcm9wczxQcm9wcz4oKSwge1xuICAgIGhlYWRpbmc6IHVuZGVmaW5lZCxcbiAgICBpc1RvYXN0OiBmYWxzZSxcbiAgICB0eXBlOiBBTEVSVC5JTkZPLFxuICB9KTtcblxuICBjb25zdCBpY29uID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGxldCBpY29uOiBJY29uID0gSUNPTi5JTkZPO1xuXG4gICAgc3dpdGNoIChwcm9wcy50eXBlKSB7XG4gICAgICBjYXNlIEFMRVJULkVSUk9SOlxuICAgICAgICBpY29uID0gSUNPTi5FUlJPUjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgY2FzZSBBTEVSVC5JTkZPOlxuICAgICAgICBpY29uID0gSUNPTi5JTkZPO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQUxFUlQuU1VDQ0VTUzpcbiAgICAgICAgaWNvbiA9IElDT04uQ0hFQ0s7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBBTEVSVC5XQVJOSU5HOlxuICAgICAgICBpY29uID0gSUNPTi5XQVJOSU5HO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gaWNvbjtcbiAgfSk7XG48L3NjcmlwdD5cblxuPHRlbXBsYXRlPlxuICA8ZGl2XG4gICAgOmNsYXNzPVwiW1xuICAgICAgcHJvcHMudHlwZSxcbiAgICAgICd0aWRlLWFsZXJ0JyxcbiAgICAgIENTUy5ESVNQTEFZLkdSSUQsXG4gICAgICBDU1MuQVhJUzIuQ0VOVEVSLFxuICAgICAgQ1NTLkJPUkRFUi5SQURJVVMuSEFMRixcbiAgICAgIENTUy5QQURESU5HLkZVTEwuT05FLFxuICAgICAgcHJvcHMudHlwZSA9PT0gQUxFUlQuRVJST1IgJiYgQ1NTLkJHLkdMT0JBTC5TVVJGQUNFLkVSUk9SLFxuICAgICAgcHJvcHMudHlwZSA9PT0gQUxFUlQuSU5GTyAmJiBDU1MuQkcuR0xPQkFMLlNVUkZBQ0UuSU5GTyxcbiAgICAgIHByb3BzLnR5cGUgPT09IEFMRVJULlNVQ0NFU1MgJiYgQ1NTLkJHLkdMT0JBTC5TVVJGQUNFLlNVQ0NFU1MsXG4gICAgICBwcm9wcy50eXBlID09PSBBTEVSVC5XQVJOSU5HICYmIENTUy5CRy5HTE9CQUwuU1VSRkFDRS5XQVJOSU5HLFxuICAgICAgcHJvcHMuaXNUb2FzdCA/IENTUy5TSEFET1cuQk9UVE9NIDogJycsXG4gICAgXVwiXG4gID5cbiAgICA8ZGl2XG4gICAgICA6Y2xhc3M9XCJbXG4gICAgICAgICd0aWRlLWFsZXJ0LWljb24nLFxuICAgICAgICBDU1MuUEFERElORy5GVUxMLkhBTEYsXG4gICAgICAgIENTUy5CT1JERVIuUkFESVVTLkZVTEwsXG4gICAgICAgIENTUy5GT05ULkNPTE9SLlNVUkZBQ0UuSU5WRVJTRSxcbiAgICAgICAgcHJvcHMudHlwZSA9PT0gQUxFUlQuRVJST1IgJiYgQ1NTLkJHLkdMT0JBTC5QUklNQVJZLkVSUk9SLFxuICAgICAgICBwcm9wcy50eXBlID09PSBBTEVSVC5JTkZPICYmIENTUy5CRy5HTE9CQUwuUFJJTUFSWS5JTkZPLFxuICAgICAgICBwcm9wcy50eXBlID09PSBBTEVSVC5TVUNDRVNTICYmIENTUy5CRy5HTE9CQUwuUFJJTUFSWS5TVUNDRVNTLFxuICAgICAgICBwcm9wcy50eXBlID09PSBBTEVSVC5XQVJOSU5HICYmIENTUy5CRy5HTE9CQUwuUFJJTUFSWS5XQVJOSU5HLFxuICAgICAgXVwiXG4gICAgPlxuICAgICAgPFRpZGVJY29uIDppY29uPVwiaWNvblwiIC8+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IDpjbGFzcz1cIlsndGlkZS1hbGVydC1oZWFkaW5nJywgQ1NTLkRJU1BMQVkuRkxFWCwgQ1NTLkFYSVMyLkNFTlRFUl1cIj5cbiAgICAgIDxoMiA6Y2xhc3M9XCJbQ1NTLkZPTlQuUk9MRS5MQUJFTF8xX1NFTUlCT0xELCBDU1MuRk9OVC5DT0xPUi5TVVJGQUNFLkRFRkFVTFRdXCI+XG4gICAgICAgIHt7IHByb3BzLmhlYWRpbmcgfX1cbiAgICAgIDwvaDI+XG4gICAgPC9kaXY+XG5cbiAgICA8VGlkZUJ1dHRvbkljb25cbiAgICAgIDpjbGFzcz1cIlsndGlkZS1hbGVydC1jbG9zZScsIENTUy5BWElTMi5DRU5URVIsIENTUy5GT05ULkNPTE9SLlNVUkZBQ0UuREVGQVVMVF1cIlxuICAgICAgOmljb249XCJJQ09OLkNMT1NFXCJcbiAgICAgIDpwcmlvcml0eT1cIlBSSU9SSVRZLlFVQVRFUk5BUllcIlxuICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlIGFsZXJ0XCJcbiAgICAvPlxuXG4gICAgPGRpdiA6Y2xhc3M9XCJbJ3RpZGUtYWxlcnQtYm9keScsIENTUy5GT05ULlJPTEUuTEFCRUxfMSwgQ1NTLkZPTlQuQ09MT1IuU1VSRkFDRS5WQVJJQU5UXVwiPlxuICAgICAgPHNsb3QgLz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgc2NvcGVkPlxuICAudGlkZS1hbGVydCB7XG4gICAgZ3JpZC10ZW1wbGF0ZS1hcmVhczpcbiAgICAgICdpY29uIGhlYWRpbmcgY2xvc2UnXG4gICAgICAnLiBib2R5IC4nO1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogYXV0byAxZnIgYXV0bztcbiAgICBncmlkLWNvbHVtbi1nYXA6IDAuNXJlbTtcbiAgICBtYXgtd2lkdGg6IDQwcmVtO1xuICB9XG5cbiAgLnRpZGUtYWxlcnQtaWNvbiB7XG4gICAgZ3JpZC1hcmVhOiBpY29uO1xuICB9XG5cbiAgLnRpZGUtYWxlcnQtaGVhZGluZyB7XG4gICAgZ3JpZC1hcmVhOiBoZWFkaW5nO1xuICB9XG5cbiAgLnRpZGUtYWxlcnQtY2xvc2Uge1xuICAgIGdyaWQtYXJlYTogY2xvc2U7XG4gIH1cblxuICAudGlkZS1hbGVydC1ib2R5IHtcbiAgICBncmlkLWFyZWE6IGJvZHk7XG4gIH1cbjwvc3R5bGU+XG4iLCJleHBvcnQgY29uc3QgQkFER0VfVFJVU1RFRCA9IHtcbiAgWUVBUlNfMTA6ICcxMCcsXG4gIFlFQVJTXzE1OiAnMTUnLFxuICBZRUFSU181OiAnNScsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBCYWRnZVRydXN0ZWRZZWFycyA9ICh0eXBlb2YgQkFER0VfVFJVU1RFRClba2V5b2YgdHlwZW9mIEJBREdFX1RSVVNURURdO1xuIiwiPHNjcmlwdCBsYW5nPVwidHNcIiBzZXR1cD5cbiAgaW1wb3J0IHsgQ1NTIH0gZnJvbSAnQC90eXBlcy9TdHlsZXMnO1xuXG4gIGltcG9ydCB0eXBlIHsgVGFiIH0gZnJvbSAnQC90eXBlcy9UYWInO1xuXG4gIHR5cGUgUHJvcHMgPSB7XG4gICAgYWN0aXZlVGFiOiBudW1iZXI7XG4gICAgdGFiczogVGFiW107XG4gIH07XG5cbiAgY29uc3QgcHJvcHMgPSB3aXRoRGVmYXVsdHMoZGVmaW5lUHJvcHM8UHJvcHM+KCksIHtcbiAgICBhY3RpdmVUYWI6IDAsXG4gIH0pO1xuXG4gIGNvbnN0IGVtaXQgPSBkZWZpbmVFbWl0cyhbJ2NoYW5nZSddKTtcblxuICBjb25zdCBoYW5kbGVDbGljayA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgZW1pdCgnY2hhbmdlJywgaW5kZXgpO1xuICB9O1xuPC9zY3JpcHQ+XG5cbjx0ZW1wbGF0ZT5cbiAgPGRpdlxuICAgIDpjbGFzcz1cIltcbiAgICAgICd0aWRlLWJ1dHRvbi1zZWdtZW50ZWQnLFxuICAgICAgQ1NTLkJHLlNVUkZBQ0UuVkFSSUFOVCxcbiAgICAgIENTUy5ESVNQTEFZLkZMRVgsXG4gICAgICBDU1MuR0FQLlFVQVJURVIsXG4gICAgICBDU1MuQk9SREVSLlJBRElVUy5GVUxMLFxuICAgICAgQ1NTLlBBRERJTkcuRlVMTC5RVUFSVEVSLFxuICAgICAgQ1NTLk9WRVJGTE9XLlhZLkhJRERFTixcbiAgICAgIENTUy5XSURUSC5GVUxMLFxuICAgIF1cIlxuICA+XG4gICAgPGJ1dHRvblxuICAgICAgOmNsYXNzPVwiW1xuICAgICAgICAndGlkZS1idXR0b24tc2VnbWVudGVkLXRhYicsXG4gICAgICAgIGluZGV4ID09PSBhY3RpdmVUYWJcbiAgICAgICAgICA/IFtDU1MuQkcuU1VSRkFDRS5ERUZBVUxULCBDU1MuRk9OVC5DT0xPUi5TVVJGQUNFLkRFRkFVTFQsIENTUy5TSEFET1cuQk9UVE9NXVxuICAgICAgICAgIDogWydpbmFjdGl2ZScsIENTUy5GT05ULkNPTE9SLlNVUkZBQ0UuVkFSSUFOVF0sXG4gICAgICAgIENTUy5GTEVYLkdST1cuT04sXG4gICAgICAgIENTUy5CT1JERVIuRlVMTC5UV08sXG4gICAgICAgIENTUy5CT1JERVIuUkFESVVTLkZVTEwsXG4gICAgICAgIENTUy5QQURESU5HLlkuUVVBUlRFUixcbiAgICAgICAgQ1NTLldJRFRILkZVTEwsXG4gICAgICAgIENTUy5GT05ULlJPTEUuQlVUVE9OXzEsXG4gICAgICAgIENTUy5XSElURVNQQUNFX1dSQVAuT0ZGLFxuICAgICAgXVwiXG4gICAgICA6ZGF0YS10cmFjaz1cInRhYi5kYXRhVHJhY2sgfHwgdW5kZWZpbmVkXCJcbiAgICAgIDprZXk9XCJ0YWIubGFiZWxcIlxuICAgICAgQGNsaWNrPVwiaGFuZGxlQ2xpY2soaW5kZXgpXCJcbiAgICAgIHYtZm9yPVwiKHRhYiwgaW5kZXgpIGluIHByb3BzLnRhYnNcIlxuICAgID5cbiAgICAgIDxzcGFuIDpjbGFzcz1cIltDU1MuRk9OVC5ST0xFLkxBQkVMXzJfU0VNSUJPTERdXCI+XG4gICAgICAgIHt7IHRhYi5sYWJlbCB9fVxuICAgICAgPC9zcGFuPlxuXG4gICAgICA8c3BhblxuICAgICAgICA6Y2xhc3M9XCJbQ1NTLkZPTlQuUk9MRS5MQUJFTF8yX1NFTUlCT0xEXVwiXG4gICAgICAgIHYtaWY9XCJ0YWIuY291bnQgJiYgdGFiLmNvdW50ID4gMFwiXG4gICAgICA+XG4gICAgICAgICh7eyB0YWIuY291bnQgfX0pXG4gICAgICA8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIHNjb3BlZD5cbiAgLnRpZGUtYnV0dG9uLXNlZ21lbnRlZCB7XG4gICAgbWF4LXdpZHRoOiAyMy4zcmVtO1xuICB9XG5cbiAgLnRpZGUtYnV0dG9uLXNlZ21lbnRlZC10YWIge1xuICAgIGZsZXg6IDE7XG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciB2YXIoLS10aWRlLWFuaW1hdGUpO1xuICB9XG5cbiAgLmluYWN0aXZlOm5vdCg6aG92ZXIpIHtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLXRpZGUtc3VyZmFjZS12YXJpYW50KTtcbiAgfVxuXG4gIC5pbmFjdGl2ZTpob3ZlciB7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS10aWRlLWJvcmRlcik7XG4gICAgY29sb3I6IHZhcigtLXRpZGUtc3VyZmFjZS1kZWZhdWx0KTtcbiAgfVxuPC9zdHlsZT5cbiIsImV4cG9ydCBjb25zdCBUWVBFX0NBUkQgPSB7XG4gIEFDVElPTkFCTEU6ICdhY3Rpb24nLFxuICBJTkZPUk1BVElPTkFMOiAnaW5mb3JtYXRpb25hbCcsXG4gIFNFTEVDVEFCTEU6ICdzZWxlY3QnLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgQ2FyZFR5cGUgPSAodHlwZW9mIFRZUEVfQ0FSRClba2V5b2YgdHlwZW9mIFRZUEVfQ0FSRF07XG4iLCI8c2NyaXB0IGxhbmc9XCJ0c1wiIHNldHVwPlxuICBpbXBvcnQgeyBvbk1vdW50ZWQsIG9uVW5tb3VudGVkLCBvblVwZGF0ZWQsIHJlZiwgd2F0Y2ggfSBmcm9tICd2dWUnO1xuXG4gIGltcG9ydCBUaWRlQnV0dG9uSWNvbiBmcm9tICdAL2NvbXBvbmVudHMvVGlkZUJ1dHRvbkljb24udnVlJztcbiAgaW1wb3J0IHsgSUNPTiB9IGZyb20gJ0AvdHlwZXMvSWNvbic7XG4gIGltcG9ydCB7IFBSSU9SSVRZIH0gZnJvbSAnQC90eXBlcy9Qcmlvcml0eSc7XG4gIGltcG9ydCB7IENTUyB9IGZyb20gJ0AvdHlwZXMvU3R5bGVzJztcblxuICB0eXBlIFByb3BzID0ge1xuICAgIGlzRmxvYXRpbmc/OiBib29sZWFuO1xuICAgIGlzSGlkZWF3YXlCdXR0b25zPzogYm9vbGVhbjtcbiAgICBpc1RvdWNoc2NyZWVuPzogYm9vbGVhbjtcbiAgICBzdWJ0aXRsZT86IHN0cmluZztcbiAgICB0aXRsZT86IHN0cmluZztcbiAgfTtcblxuICBjb25zdCBwcm9wcyA9IHdpdGhEZWZhdWx0cyhkZWZpbmVQcm9wczxQcm9wcz4oKSwge1xuICAgIGlzRmxvYXRpbmc6IGZhbHNlLFxuICAgIGlzSGlkZWF3YXlCdXR0b25zOiB0cnVlLFxuICAgIGlzVG91Y2hzY3JlZW46IHVuZGVmaW5lZCxcbiAgICBzdWJ0aXRsZTogdW5kZWZpbmVkLFxuICAgIHRpdGxlOiB1bmRlZmluZWQsXG4gIH0pO1xuXG4gIGNvbnN0IGVtaXQgPSBkZWZpbmVFbWl0cyhbJ2NoYW5nZSddKTtcblxuICBjb25zdCBjb250ZW50UmVmID0gcmVmKCk7XG4gIGNvbnN0IGZyYW1lUmVmID0gcmVmKCk7XG5cbiAgY29uc3QgY29udGVudFJpZ2h0RWRnZSA9IHJlZigpO1xuICBjb25zdCBjb250ZW50V2lkdGggPSByZWYoKTtcbiAgY29uc3QgY3VycmVudFNsaWRlID0gcmVmKDApO1xuICBjb25zdCBmcmFtZVdpZHRoID0gcmVmKCk7XG4gIGNvbnN0IGhhc092ZXJmbG93ID0gcmVmKCk7XG4gIGNvbnN0IGlzTGFzdFNsaWRlID0gcmVmKCk7XG4gIGNvbnN0IGxhc3RQb3NpdGlvbiA9IHJlZigpO1xuICBjb25zdCBzaG93QnV0dG9ucyA9IHJlZigpO1xuXG4gIC8qKlxuICAgKiBNZWFzdXJlIHRoZSBjdXJyZW50IHNsaWRlIGJhc2VkIG9uIHRoZSBzY3JvbGxcbiAgICogcG9zaXRpb24gb2YgdGhlIGZyYW1lLiBUaGUgY3VycmVudCBzbGlkZSBpc1xuICAgKiB0aGUgc2xpZGUgdGhhdCBpcyBjbG9zZXN0IHRvIHRoZSBsZWZ0IGVkZ2Ugb2ZcbiAgICogdGhlIGZyYW1lLlxuICAgKi9cbiAgY29uc3QgbWVhc3VyZUN1cnJlbnRTbGlkZSA9ICgpID0+IHtcbiAgICAvLyBHZXQgbGVmdCBvZmZzZXQgb2YgZWFjaCBzbGlkZS5cbiAgICBjb25zdCBzbGlkZU9mZnNldHMgPSBBcnJheS5mcm9tKGNvbnRlbnRSZWYudmFsdWUuY2hpbGRyZW4pLm1hcCgoc2xpZGU6IGFueSkgPT4gc2xpZGUub2Zmc2V0TGVmdCk7XG5cbiAgICBpZiAoc2xpZGVPZmZzZXRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgLy8gR2V0IGNsb3Nlc3Qgb2Zmc2V0IHRvIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uLlxuICAgIGNvbnN0IGNsb3Nlc3RTbGlkZU9mZnNldCA9IHNsaWRlT2Zmc2V0cy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHtcbiAgICAgIHJldHVybiBNYXRoLmFicyhjdXJyIC0gZnJhbWVSZWYudmFsdWUuc2Nyb2xsTGVmdCkgPCBNYXRoLmFicyhwcmV2IC0gZnJhbWVSZWYudmFsdWUuc2Nyb2xsTGVmdCkgPyBjdXJyIDogcHJldjtcbiAgICB9KTtcblxuICAgIGN1cnJlbnRTbGlkZS52YWx1ZSA9IHNsaWRlT2Zmc2V0cy5pbmRleE9mKGNsb3Nlc3RTbGlkZU9mZnNldCk7XG4gIH07XG5cbiAgY29uc3QgbWVhc3VyZURvbSA9ICgpID0+IHtcbiAgICBjb250ZW50UmlnaHRFZGdlLnZhbHVlID0gZnJhbWVSZWYudmFsdWUuc2Nyb2xsTGVmdCArIGZyYW1lUmVmLnZhbHVlLmNsaWVudFdpZHRoO1xuICAgIGNvbnRlbnRXaWR0aC52YWx1ZSA9IGNvbnRlbnRSZWYudmFsdWUuc2Nyb2xsV2lkdGg7XG4gICAgZnJhbWVXaWR0aC52YWx1ZSA9IGZyYW1lUmVmLnZhbHVlLmNsaWVudFdpZHRoO1xuICAgIGhhc092ZXJmbG93LnZhbHVlID0gY29udGVudFdpZHRoLnZhbHVlID4gZnJhbWVXaWR0aC52YWx1ZTtcbiAgICBpc0xhc3RTbGlkZS52YWx1ZSA9IGNvbnRlbnRSaWdodEVkZ2UudmFsdWUgPT09IGNvbnRlbnRXaWR0aC52YWx1ZTtcbiAgICBsYXN0UG9zaXRpb24udmFsdWUgPSBmcmFtZVJlZi52YWx1ZS5zY3JvbGxXaWR0aCAtIGZyYW1lUmVmLnZhbHVlLmNsaWVudFdpZHRoO1xuICAgIHNob3dCdXR0b25zLnZhbHVlID0gaGFzT3ZlcmZsb3cudmFsdWUgJiYgIXByb3BzLmlzVG91Y2hzY3JlZW47XG5cbiAgICBtZWFzdXJlQ3VycmVudFNsaWRlKCk7XG4gIH07XG5cbiAgLy8gVE9ETzogZGVib3VuY2UgdGhpc1xuICBjb25zdCBoYW5kbGVTY3JvbGwgPSAoKSA9PiB7XG4gICAgbWVhc3VyZURvbSgpO1xuICB9O1xuXG4gIGNvbnN0IHNjcm9sbFRvU2xpZGUgPSAoc2xpZGVJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgZnJhbWVSZWYudmFsdWUuc2Nyb2xsVG8oe1xuICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgbGVmdDogY29udGVudFJlZi52YWx1ZS5jaGlsZHJlbltzbGlkZUluZGV4XS5vZmZzZXRMZWZ0LFxuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IHNob3dOZXh0U2xpZGUgPSAoKSA9PiB7XG4gICAgaWYgKGNvbnRlbnRSaWdodEVkZ2UudmFsdWUgPiBjb250ZW50V2lkdGgudmFsdWUpIHtcbiAgICAgIGZyYW1lUmVmLnZhbHVlLnNjcm9sbFRvKHtcbiAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgICBsZWZ0OiBjb250ZW50V2lkdGgsXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKCFpc0xhc3RTbGlkZS52YWx1ZSkge1xuICAgICAgc2Nyb2xsVG9TbGlkZShjdXJyZW50U2xpZGUudmFsdWUgKyAxKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgc2hvd1ByZXZpb3VzU2xpZGUgPSAoKSA9PiB7XG4gICAgY29uc3QgaXNGaXJzdFNsaWRlID0gY3VycmVudFNsaWRlLnZhbHVlID09PSAwO1xuXG4gICAgaWYgKCFpc0ZpcnN0U2xpZGUpIHtcbiAgICAgIHNjcm9sbFRvU2xpZGUoY3VycmVudFNsaWRlLnZhbHVlIC0gMSk7XG4gICAgfVxuICB9O1xuXG4gIG9uTW91bnRlZCgoKSA9PiB7XG4gICAgbWVhc3VyZURvbSgpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBtZWFzdXJlRG9tKTtcbiAgfSk7XG5cbiAgb25Vbm1vdW50ZWQoKCkgPT4ge1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBtZWFzdXJlRG9tKTtcbiAgfSk7XG5cbiAgb25VcGRhdGVkKCgpID0+IHtcbiAgICBtZWFzdXJlRG9tKCk7XG4gIH0pO1xuXG4gIHdhdGNoKGN1cnJlbnRTbGlkZSwgKCkgPT4ge1xuICAgIGVtaXQoJ2NoYW5nZScsIGN1cnJlbnRTbGlkZS52YWx1ZSk7XG4gIH0pO1xuPC9zY3JpcHQ+XG5cbjx0ZW1wbGF0ZT5cbiAgPHNlY3Rpb25cbiAgICA6Y2xhc3M9XCJbJ3RpZGUtY2Fyb3VzZWwnLCBDU1MuRElTUExBWS5GTEVYLCBDU1MuRkxFWC5ESVJFQ1RJT04uQ09MVU1OLCBDU1MuR0FQLlRXTywgQ1NTLldJRFRILk1BWF9GVUxMXVwiXG4gICAgcmVmPVwiY2Fyb3VzZWxSZWZcIlxuICA+XG4gICAgPHNlY3Rpb25cbiAgICAgIDpjbGFzcz1cIltDU1MuRElTUExBWS5GTEVYLCBwcm9wcy50aXRsZSA/IENTUy5BWElTMS5CRVRXRUVOIDogQ1NTLkFYSVMxLkVORCwgQ1NTLkFYSVMyLkNFTlRFUiwgQ1NTLldJRFRILkZVTExdXCJcbiAgICAgIHYtaWY9XCIhcHJvcHMuaXNGbG9hdGluZyAmJiAoc2hvd0J1dHRvbnMgfHwgcHJvcHMudGl0bGUpXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIDpjbGFzcz1cIltDU1MuRElTUExBWS5GTEVYLCBDU1MuQVhJUzIuQ0VOVEVSLCBDU1MuR0FQLk9ORV1cIlxuICAgICAgICB2LWlmPVwicHJvcHMudGl0bGUgfHwgcHJvcHMuc3VidGl0bGVcIlxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgOmNsYXNzPVwiW0NTUy5GT05ULlJPTEUuRElTUExBWV8xXVwiXG4gICAgICAgICAgdi1pZj1cInByb3BzLnRpdGxlXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHByb3BzLnRpdGxlIH19XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICA6Y2xhc3M9XCJbQ1NTLkZPTlQuUk9MRS5MQUJFTF8yLCBDU1MuRk9OVC5DT0xPUi5TVVJGQUNFLlZBUklBTlRdXCJcbiAgICAgICAgICB2LWlmPVwicHJvcHMuc3VidGl0bGVcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgcHJvcHMuc3VidGl0bGUgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICA6Y2xhc3M9XCJbQ1NTLkRJU1BMQVkuRkxFWCwgQ1NTLkFYSVMyLkNFTlRFUiwgQ1NTLkdBUC5PTkVdXCJcbiAgICAgICAgdi1pZj1cInNob3dCdXR0b25zXCJcbiAgICAgID5cbiAgICAgICAgPFRpZGVCdXR0b25JY29uXG4gICAgICAgICAgOmRpc2FibGVkPVwiY3VycmVudFNsaWRlID09PSAwXCJcbiAgICAgICAgICA6aWNvbj1cIklDT04uQ0hFVlJPTl9MRUZUXCJcbiAgICAgICAgICA6cHJpb3JpdHk9XCJQUklPUklUWS5URVJUSUFSWVwiXG4gICAgICAgICAgQGNsaWNrPVwic2hvd1ByZXZpb3VzU2xpZGVcIlxuICAgICAgICAvPlxuXG4gICAgICAgIDxUaWRlQnV0dG9uSWNvblxuICAgICAgICAgIDpkaXNhYmxlZD1cImlzTGFzdFNsaWRlXCJcbiAgICAgICAgICA6aWNvbj1cIklDT04uQ0hFVlJPTl9SSUdIVFwiXG4gICAgICAgICAgOnByaW9yaXR5PVwiUFJJT1JJVFkuVEVSVElBUllcIlxuICAgICAgICAgIEBjbGljaz1cInNob3dOZXh0U2xpZGVcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9zZWN0aW9uPlxuXG4gICAgPHNsb3QgbmFtZT1cIm1pc2NcIiAvPlxuXG4gICAgPGRpdiA6Y2xhc3M9XCJbQ1NTLlBPU0lUSU9OLlJFTEFUSVZFXVwiPlxuICAgICAgPGRpdlxuICAgICAgICA6Y2xhc3M9XCJbQ1NTLlNDUk9MTEJBUi5PRkYsIENTUy5TTkFQLk9OLCBDU1MuT1ZFUkZMT1cuWC5TQ1JPTEwsIENTUy5XSURUSC5GVUxMXVwiXG4gICAgICAgIHJlZj1cImZyYW1lUmVmXCJcbiAgICAgICAgQHNjcm9sbD1cImhhbmRsZVNjcm9sbFwiXG4gICAgICA+XG4gICAgICAgIDx1bFxuICAgICAgICAgIDpjbGFzcz1cIltDU1MuRElTUExBWS5GTEVYLCBDU1MuR0FQLk9ORSwgQ1NTLkxJU1RfQlVMTEVUUy5PRkZdXCJcbiAgICAgICAgICByZWY9XCJjb250ZW50UmVmXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzbG90IC8+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICA6Y2xhc3M9XCJbXG4gICAgICAgICAgJ3RpZGUtY2Fyb3VzZWwtYnV0dG9uLW92ZXJsYXknLFxuICAgICAgICAgIENTUy5QT1NJVElPTi5BQlNPTFVURSxcbiAgICAgICAgICBDU1MuUE9TSVRJT05JTkcuVE9QLFxuICAgICAgICAgIENTUy5ESVNQTEFZLkZMRVgsXG4gICAgICAgICAgQ1NTLkFYSVMxLkJFVFdFRU4sXG4gICAgICAgICAgQ1NTLkFYSVMyLkNFTlRFUixcbiAgICAgICAgICBDU1MuV0lEVEguRlVMTCxcbiAgICAgICAgICBDU1MuSEVJR0hULkZVTEwsXG4gICAgICAgICAgQ1NTLlBPSU5URVJfRVZFTlRTLk9GRixcbiAgICAgICAgICBwcm9wcy5pc0hpZGVhd2F5QnV0dG9ucyA/ICdoaWRlYXdheScgOiAnJyxcbiAgICAgICAgXVwiXG4gICAgICAgIHYtaWY9XCJpc0Zsb2F0aW5nICYmIHNob3dCdXR0b25zXCJcbiAgICAgID5cbiAgICAgICAgPFRpZGVCdXR0b25JY29uXG4gICAgICAgICAgOmNsYXNzPVwiW0NTUy5NQVJHSU4uTEVGVC5PTkUsIENTUy5QT0lOVEVSX0VWRU5UUy5PTl1cIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImN1cnJlbnRTbGlkZSA9PT0gMFwiXG4gICAgICAgICAgOmljb249XCJJQ09OLkNIRVZST05fTEVGVFwiXG4gICAgICAgICAgOnByaW9yaXR5PVwiUFJJT1JJVFkuUVVBVEVSTkFSWVwiXG4gICAgICAgICAgQGNsaWNrPVwic2hvd1ByZXZpb3VzU2xpZGVcIlxuICAgICAgICAvPlxuXG4gICAgICAgIDxUaWRlQnV0dG9uSWNvblxuICAgICAgICAgIDpjbGFzcz1cIltDU1MuTUFSR0lOLlJJR0hULk9ORSwgQ1NTLlBPSU5URVJfRVZFTlRTLk9OXVwiXG4gICAgICAgICAgOmRpc2FibGVkPVwiaXNMYXN0U2xpZGVcIlxuICAgICAgICAgIDppY29uPVwiSUNPTi5DSEVWUk9OX1JJR0hUXCJcbiAgICAgICAgICA6cHJpb3JpdHk9XCJQUklPUklUWS5RVUFURVJOQVJZXCJcbiAgICAgICAgICBAY2xpY2s9XCJzaG93TmV4dFNsaWRlXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L3NlY3Rpb24+XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgc2NvcGVkPlxuICAudGlkZS1jYXJvdXNlbC1idXR0b24tb3ZlcmxheS5oaWRlYXdheSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuXG4gIC50aWRlLWNhcm91c2VsOmhvdmVyIC50aWRlLWNhcm91c2VsLWJ1dHRvbi1vdmVybGF5LmhpZGVhd2F5IHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG48L3N0eWxlPlxuIiwiPHNjcmlwdCBsYW5nPVwidHNcIiBzZXR1cD5cbiAgaW1wb3J0IHsgcmVmIH0gZnJvbSAndnVlJztcblxuICBpbXBvcnQgeyBDU1MgfSBmcm9tICdAL3R5cGVzL1N0eWxlcyc7XG5cbiAgaW1wb3J0IHR5cGUgeyBTb3VyY2UgfSBmcm9tICdAL3R5cGVzL1NvdXJjZSc7XG5cbiAgdHlwZSBQcm9wcyA9IHtcbiAgICBhbHQ6IHN0cmluZztcbiAgICBoZWlnaHQ/OiBzdHJpbmc7XG4gICAgaXNMYXp5PzogYm9vbGVhbjtcbiAgICBzb3VyY2VzPzogU291cmNlW107XG4gICAgc3JjPzogc3RyaW5nO1xuICAgIHdpZHRoPzogc3RyaW5nO1xuICB9O1xuXG4gIGNvbnN0IHByb3BzID0gd2l0aERlZmF1bHRzKGRlZmluZVByb3BzPFByb3BzPigpLCB7XG4gICAgYWx0OiAnJyxcbiAgICBoZWlnaHQ6IHVuZGVmaW5lZCxcbiAgICBpc0xhenk6IHRydWUsXG4gICAgc291cmNlczogKCkgPT4gW10sXG4gICAgc3JjOiB1bmRlZmluZWQsXG4gICAgd2lkdGg6IHVuZGVmaW5lZCxcbiAgfSk7XG5cbiAgY29uc3QgcGljdHVyZSA9IHJlZigpO1xuICBjb25zdCBpbWcgPSByZWYoKTtcblxuICBjb25zdCBpbWFnZURlZmF1bHQgPSAnaHR0cHM6Ly9jZG4tc3RhdGljLnRpbGFicy5pby9tYXJrZXRwbGFjZS9jb21tb24vaW1hZ2UtY29taW5nLXNvb24uc3ZnJztcblxuICBjb25zdCBzZXRJbWFnZUZyb21EZWZhdWx0ID0gKCkgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRTcmMgPSBpbWcudmFsdWU/LmN1cnJlbnRTcmM7XG4gICAgY29uc3QgcGljdHVyZVNvdXJjZSA9IHBpY3R1cmUudmFsdWU/LnF1ZXJ5U2VsZWN0b3IoYHNvdXJjZVtzcmNzZXQ9XCIke2N1cnJlbnRTcmN9XCJdYCk7XG5cbiAgICBpZiAoY3VycmVudFNyYyAmJiBwaWN0dXJlU291cmNlKSB7XG4gICAgICBwaWN0dXJlU291cmNlLnNyY3NldCA9IGltYWdlRGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKGltZy52YWx1ZSkge1xuICAgICAgaW1nLnZhbHVlLnNyYyA9IGltYWdlRGVmYXVsdDtcbiAgICB9XG4gIH07XG48L3NjcmlwdD5cblxuPHRlbXBsYXRlPlxuICA8cGljdHVyZVxuICAgIDpjbGFzcz1cIlsndGlkZS1pbWFnZScsIENTUy5ESVNQTEFZLkJMT0NLXVwiXG4gICAgcmVmPVwicGljdHVyZVwiXG4gICAgOnN0eWxlPVwiXG4gICAgICB3aWR0aCB8fCBoZWlnaHRcbiAgICAgICAgPyB7XG4gICAgICAgICAgICB3aWR0aDogd2lkdGggfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWRcbiAgICBcIlxuICA+XG4gICAgPHNvdXJjZVxuICAgICAgOmtleT1cInNvdXJjZS5zcmNzZXRcIlxuICAgICAgOm1lZGlhPVwiYChtaW4td2lkdGg6JHtzb3VyY2UubWVkaWF9cHgpYFwiXG4gICAgICA6c3Jjc2V0PVwic291cmNlLnNyY3NldFwiXG4gICAgICB2LWZvcj1cInNvdXJjZSBpbiBwcm9wcy5zb3VyY2VzXCJcbiAgICAvPlxuXG4gICAgPGltZ1xuICAgICAgOmFsdD1cImFsdFwiXG4gICAgICA6Y2xhc3M9XCJbQ1NTLldJRFRILkZVTEwsIENTUy5IRUlHSFQuRlVMTCwgQ1NTLk9CSkVDVC5DRU5URVIsIENTUy5PQkpFQ1QuQ09WRVJdXCJcbiAgICAgIDpmZXRjaHByaW9yaXR5PVwiaXNMYXp5ID8gdW5kZWZpbmVkIDogJ2hpZ2gnXCJcbiAgICAgIDpsb2FkaW5nPVwicHJvcHMuaXNMYXp5ID8gJ2xhenknIDogJ2VhZ2VyJ1wiXG4gICAgICByZWY9XCJpbWdcIlxuICAgICAgOnNyYz1cInNyYyA/PyBpbWFnZURlZmF1bHRcIlxuICAgICAgQGVycm9yPVwic2V0SW1hZ2VGcm9tRGVmYXVsdFwiXG4gICAgLz5cbiAgPC9waWN0dXJlPlxuPC90ZW1wbGF0ZT5cbiIsIjxzY3JpcHQgbGFuZz1cInRzXCIgc2V0dXA+XG4gIGltcG9ydCB7IGNvbXB1dGVkIH0gZnJvbSAndnVlJztcblxuICBpbXBvcnQgVGlkZUljb24gZnJvbSAnQC9jb21wb25lbnRzL1RpZGVJY29uLnZ1ZSc7XG4gIGltcG9ydCB7IElDT04gfSBmcm9tICdAL3R5cGVzL0ljb24nO1xuICBpbXBvcnQgeyBTSVpFIH0gZnJvbSAnQC90eXBlcy9TaXplJztcbiAgaW1wb3J0IHsgQ1NTIH0gZnJvbSAnQC90eXBlcy9TdHlsZXMnO1xuICBpbXBvcnQgeyBmb3JtYXROdW1iZXIgfSBmcm9tICdAL3V0aWxpdGllcy9mb3JtYXQnO1xuXG4gIHR5cGUgUHJvcHMgPSB7XG4gICAgY2hlY2tlZD86IGJvb2xlYW47XG4gICAgZGF0YVRyYWNrPzogc3RyaW5nO1xuICAgIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgICBpbmRldGVybWluYXRlPzogYm9vbGVhbjtcbiAgICBpbnB1dElkPzogc3RyaW5nO1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIG51bWJlcj86IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgfTtcblxuICBjb25zdCBwcm9wcyA9IHdpdGhEZWZhdWx0cyhkZWZpbmVQcm9wczxQcm9wcz4oKSwge1xuICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIGRhdGFUcmFjazogJycsXG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIGluZGV0ZXJtaW5hdGU6IGZhbHNlLFxuICAgIGlucHV0SWQ6IHVuZGVmaW5lZCxcbiAgICBsYWJlbDogdW5kZWZpbmVkLFxuICAgIG5hbWU6IHVuZGVmaW5lZCxcbiAgICBudW1iZXI6IHVuZGVmaW5lZCxcbiAgfSk7XG5cbiAgY29uc3QgaXNDaGVja2VkID0gY29tcHV0ZWQoKCkgPT4gcHJvcHMuY2hlY2tlZCB8fCBwcm9wcy5pbmRldGVybWluYXRlKTtcbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG4gIDxkaXZcbiAgICA6Y2xhc3M9XCJbXG4gICAgICAndGlkZS1pbnB1dC1jaGVja2JveCcsXG4gICAgICBDU1MuRElTUExBWS5GTEVYLFxuICAgICAgQ1NTLkFYSVMyLkNFTlRFUixcbiAgICAgIENTUy5HQVAuSEFMRixcbiAgICAgIENTUy5GT05ULlJPTEUuQk9EWV8xLFxuICAgICAgZGlzYWJsZWQgPyBbJ2Rpc2FibGVkJywgQ1NTLlBPSU5URVJfRVZFTlRTLk9GRl0gOiBDU1MuQ1VSU09SLlBPSU5URVIsXG4gICAgXVwiXG4gID5cbiAgICA8aW5wdXRcbiAgICAgIDpjaGVja2VkPVwiaXNDaGVja2VkXCJcbiAgICAgIDpjbGFzcz1cIltDU1MuRElTUExBWS5OT05FXVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJwcm9wcy5kaXNhYmxlZFwiXG4gICAgICA6bmFtZT1cInByb3BzLm5hbWVcIlxuICAgICAgcmVmPVwiaW5wdXRcIlxuICAgICAgQGNsaWNrLnByZXZlbnRcbiAgICAgIDppZD1cInByb3BzLmlucHV0SWRcIlxuICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAvPlxuXG4gICAgPGRpdlxuICAgICAgOmNsYXNzPVwiW1xuICAgICAgICAndGlkZS1pbnB1dC1jaGVja2JveC1jdXN0b20nLFxuICAgICAgICBDU1MuUE9TSVRJT04uUkVMQVRJVkUsXG4gICAgICAgIENTUy5ESVNQTEFZLkZMRVgsXG4gICAgICAgIENTUy5BWElTMS5DRU5URVIsXG4gICAgICAgIENTUy5BWElTMi5DRU5URVIsXG4gICAgICAgIENTUy5GTEVYLlNIUklOSy5PRkYsXG4gICAgICAgIENTUy5CT1JERVIuRlVMTC5PTkUsXG4gICAgICAgIGlzQ2hlY2tlZCA/IFtDU1MuQk9SREVSLkNPTE9SLkhJR0gsIENTUy5CRy5TRUNPTkRBUlldIDogW0NTUy5CT1JERVIuQ09MT1IuREVGQVVMVCwgQ1NTLkJHLlNVUkZBQ0UuREVGQVVMVF0sXG4gICAgICAgIENTUy5CT1JERVIuUkFESVVTLlFVQVJURVIsXG4gICAgICAgIGlzQ2hlY2tlZCAmJiAnY2hlY2tlZCcsXG4gICAgICAgIGRpc2FibGVkID8gQ1NTLkNVUlNPUi5OT1RfQUxMT1dFRCA6IENTUy5DVVJTT1IuUE9JTlRFUixcbiAgICAgIF1cIlxuICAgID5cbiAgICAgIDxUaWRlSWNvblxuICAgICAgICA6Y2xhc3M9XCJbQ1NTLkZPTlQuQ09MT1IuU0VDT05EQVJZXVwiXG4gICAgICAgIDppY29uPVwicHJvcHMuaW5kZXRlcm1pbmF0ZSA/IElDT04uUkVNT1ZFIDogSUNPTi5DSEVDS1wiXG4gICAgICAgIDpzaXplPVwiU0laRS5TTUFMTFwiXG4gICAgICAgIHYtaWY9XCJpc0NoZWNrZWRcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxsYWJlbFxuICAgICAgOmNsYXNzPVwiW1xuICAgICAgICBDU1MuRElTUExBWS5GTEVYLFxuICAgICAgICBDU1MuR0FQLkhBTEYsXG4gICAgICAgIENTUy5GT05ULlJPTEUuQk9EWV8xLFxuICAgICAgICBkaXNhYmxlZCA/IENTUy5DVVJTT1IuTk9UX0FMTE9XRUQgOiBDU1MuQ1VSU09SLlBPSU5URVIsXG4gICAgICBdXCJcbiAgICAgIDpmb3I9XCJwcm9wcy5pbnB1dElkXCJcbiAgICAgIEBjbGljay5wcmV2ZW50XG4gICAgICB2LWlmPVwibGFiZWxcIlxuICAgID5cbiAgICAgIDxzcGFuPnt7IGxhYmVsIH19PC9zcGFuPlxuICAgICAgPHNwYW5cbiAgICAgICAgOmNsYXNzPVwiW0NTUy5GT05ULkNPTE9SLlNVUkZBQ0UuVkFSSUFOVF1cIlxuICAgICAgICB2LWlmPVwicHJvcHMubnVtYmVyXCJcbiAgICAgID5cbiAgICAgICAgKHt7IGZvcm1hdE51bWJlcihwcm9wcy5udW1iZXIpIH19KVxuICAgICAgPC9zcGFuPlxuICAgIDwvbGFiZWw+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIHNjb3BlZD5cbiAgLnRpZGUtaW5wdXQtY2hlY2tib3guZGlzYWJsZWQge1xuICAgIG9wYWNpdHk6IHZhcigtLXRpZGUtZGlzYWJsZWQpO1xuICB9XG5cbiAgLnRpZGUtaW5wdXQtY2hlY2tib3gtY3VzdG9tIHtcbiAgICB3aWR0aDogdmFyKC0tdGlkZS1mb250LTI4KTtcbiAgICBoZWlnaHQ6IHZhcigtLXRpZGUtZm9udC0yOCk7XG4gIH1cbjwvc3R5bGU+XG4iLCI8c2NyaXB0IGxhbmc9XCJ0c1wiIHNldHVwPlxuICBpbXBvcnQgeyByZWYsIHdhdGNoIH0gZnJvbSAndnVlJztcblxuICBpbXBvcnQgeyBDU1MgfSBmcm9tICdAL3R5cGVzL1N0eWxlcyc7XG5cbiAgdHlwZSBQcm9wcyA9IHtcbiAgICBjaGVja2VkPzogYm9vbGVhbjtcbiAgICBkYXRhVHJhY2s/OiBzdHJpbmc7XG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIGlucHV0SWQ/OiBzdHJpbmc7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gIH07XG5cbiAgY29uc3QgcHJvcHMgPSB3aXRoRGVmYXVsdHMoZGVmaW5lUHJvcHM8UHJvcHM+KCksIHtcbiAgICBjaGVja2VkOiBmYWxzZSxcbiAgICBkYXRhVHJhY2s6ICcnLFxuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBpbnB1dElkOiB1bmRlZmluZWQsXG4gICAgbGFiZWw6IHVuZGVmaW5lZCxcbiAgfSk7XG5cbiAgY29uc3QgY2hlY2tlZCA9IHJlZihwcm9wcy5jaGVja2VkKTtcblxuICB3YXRjaChcbiAgICAoKSA9PiBwcm9wcy5jaGVja2VkLFxuICAgIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcbiAgICAgIGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUgfHwgbmV3VmFsdWUgIT09IGNoZWNrZWQudmFsdWUpIHtcbiAgICAgICAgY2hlY2tlZC52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG4gIDxkaXZcbiAgICA6Y2xhc3M9XCJbXG4gICAgICAndGlkZS1pbnB1dC1yYWRpbycsXG4gICAgICBDU1MuRElTUExBWS5GTEVYLFxuICAgICAgQ1NTLkFYSVMyLkNFTlRFUixcbiAgICAgIENTUy5HQVAuSEFMRixcbiAgICAgIENTUy5QT0lOVEVSX0VWRU5UUy5PRkYsXG4gICAgICBwcm9wcy5kaXNhYmxlZCAmJiAnZGlzYWJsZWQnLFxuICAgIF1cIlxuICA+XG4gICAgPGlucHV0XG4gICAgICA6Y2hlY2tlZD1cImNoZWNrZWRcIlxuICAgICAgOmNsYXNzPVwiW0NTUy5ESVNQTEFZLk5PTkVdXCJcbiAgICAgIDppZD1cInByb3BzLmlucHV0SWRcIlxuICAgICAgbmFtZT1cIlwiXG4gICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgdmFsdWU9XCJcIlxuICAgIC8+XG5cbiAgICA8ZGl2XG4gICAgICA6Y2xhc3M9XCJbXG4gICAgICAgICd0aWRlLWlucHV0LXJhZGlvLWN1c3RvbScsXG4gICAgICAgIENTUy5QT1NJVElPTi5SRUxBVElWRSxcbiAgICAgICAgQ1NTLkRJU1BMQVkuRkxFWCxcbiAgICAgICAgQ1NTLkFYSVMxLkNFTlRFUixcbiAgICAgICAgQ1NTLkFYSVMyLkNFTlRFUixcbiAgICAgICAgQ1NTLkJPUkRFUi5GVUxMLk9ORSxcbiAgICAgICAgY2hlY2tlZCA/IENTUy5CT1JERVIuQ09MT1IuSElHSCA6IENTUy5CT1JERVIuQ09MT1IuREVGQVVMVCxcbiAgICAgICAgQ1NTLkJPUkRFUi5SQURJVVMuRlVMTCxcbiAgICAgICAgQ1NTLkJHLlNVUkZBQ0UuREVGQVVMVCxcbiAgICAgICAgQ1NTLkNVUlNPUi5QT0lOVEVSLFxuICAgICAgICBDU1MuUE9JTlRFUl9FVkVOVFMuT04sXG4gICAgICAgIGNoZWNrZWQgJiYgJ2NoZWNrZWQnLFxuICAgICAgXVwiXG4gICAgPlxuICAgICAgPGRpdiA6Y2xhc3M9XCJbJ3RpZGUtaW5wdXQtcmFkaW8tY2hlY2snLCBDU1MuQk9SREVSLlJBRElVUy5GVUxMLCBwcm9wcy5jaGVja2VkICYmIENTUy5CRy5TRUNPTkRBUlldXCIgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxsYWJlbFxuICAgICAgOmNsYXNzPVwiW0NTUy5GT05ULlJPTEUuQk9EWV8xLCBDU1MuQ1VSU09SLlBPSU5URVIsIENTUy5QT0lOVEVSX0VWRU5UUy5PTl1cIlxuICAgICAgOmZvcj1cInByb3BzLmlucHV0SWRcIlxuICAgID5cbiAgICAgIHt7IHByb3BzLmxhYmVsIH19XG4gICAgPC9sYWJlbD5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgc2NvcGVkPlxuICAudGlkZS1pbnB1dC1yYWRpby5kaXNhYmxlZCB7XG4gICAgb3BhY2l0eTogdmFyKC0tdGlkZS1kaXNhYmxlZCk7XG4gIH1cblxuICAudGlkZS1pbnB1dC1yYWRpby1jdXN0b20ge1xuICAgIHdpZHRoOiB2YXIoLS10aWRlLWZvbnQtMjgpO1xuICAgIGhlaWdodDogdmFyKC0tdGlkZS1mb250LTI4KTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXJhZGlvLWNoZWNrIHtcbiAgICB3aWR0aDogMXJlbTtcbiAgICBoZWlnaHQ6IDFyZW07XG4gIH1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBwcmljZVRvTnVtYmVyIH0gZnJvbSAnQC91dGlsaXRpZXMvZm9ybWF0JztcblxuaW1wb3J0IHR5cGUgeyBSYW5nZURhdGEgfSBmcm9tICdAL3R5cGVzL0ZhY2V0UmFuZ2UnO1xuaW1wb3J0IHR5cGUgeyBTdHJpbmdJbnB1dCB9IGZyb20gJ0AvdHlwZXMvRm9ybSc7XG5pbXBvcnQgdHlwZSB7IFNlbGVjdE9wdGlvbiB9IGZyb20gJ0AvdHlwZXMvU2VsZWN0JztcbmltcG9ydCB0eXBlIHsgVmFsaWRhdGlvbkVycm9yLCBWYWxpZGF0aW9uTGVuZ3RoLCBWYWxpZGF0aW9uUmVzdWx0LCBWYWxpZGF0b3IgfSBmcm9tICdAL3R5cGVzL1ZhbGlkYXRpb24nO1xuaW1wb3J0IHR5cGUgeyBSZWYgfSBmcm9tICd2dWUnO1xuXG5leHBvcnQgY29uc3QgZXJyb3JNZXNzYWdlRGVmYXVsdCA9ICdQbGVhc2UgZW50ZXIgYSB2YWxpZCB2YWx1ZS4nO1xuXG5leHBvcnQgY29uc3Qgbm9FcnJvciA9IHtcbiAgbWVzc2FnZTogJycsXG4gIHZhbGlkOiB0cnVlLFxufSBhcyBSZWFkb25seTxWYWxpZGF0aW9uUmVzdWx0PjtcblxuZXhwb3J0IGNvbnN0IGNoZWNrRm9ybWF0ID0gKGZvcm1hdDogUmVnRXhwKSA9PiB7XG4gIHJldHVybiAodmFsdWU6IHN0cmluZyk6IFZhbGlkYXRpb25SZXN1bHQgPT4ge1xuICAgIGxldCByZXN1bHQgPSBub0Vycm9yO1xuXG4gICAgaWYgKCF2YWx1ZS50cmltKCkubWF0Y2goZm9ybWF0KSkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2VEZWZhdWx0LFxuICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RXJyb3JNZXNzYWdlID0gKGVycm9yRnJvbVByb3BzOiBWYWxpZGF0aW9uRXJyb3IsIGVycm9yRnJvbVJlZjogVmFsaWRhdGlvbkVycm9yKSA9PiB7XG4gIC8vIGVycm9yIGluIHByb3BzIHRha2VzIHByZWNlZGVuY2Ugb3ZlciB2YWxpZGF0aW9uIGVycm9yXG4gIGlmICh0eXBlb2YgZXJyb3JGcm9tUHJvcHMgPT09ICdzdHJpbmcnICYmIGVycm9yRnJvbVByb3BzLmxlbmd0aCA+IDApIHJldHVybiBlcnJvckZyb21Qcm9wcztcblxuICByZXR1cm4gdHlwZW9mIGVycm9yRnJvbVJlZiA9PT0gJ3N0cmluZycgJiYgZXJyb3JGcm9tUmVmLmxlbmd0aCA+IDAgPyBlcnJvckZyb21SZWYgOiBlcnJvck1lc3NhZ2VEZWZhdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpZWxkSGFzRXJyb3IgPSAoZXJyb3JGcm9tUHJvcHM6IFZhbGlkYXRpb25FcnJvciwgZXJyb3JGcm9tUmVmOiBWYWxpZGF0aW9uRXJyb3IpID0+XG4gIGVycm9yRnJvbVByb3BzICE9PSBmYWxzZSB8fCBlcnJvckZyb21SZWYgIT09IGZhbHNlO1xuXG5leHBvcnQgY29uc3QgZ2V0RmllbGRMZW5ndGhJc1ZhbGlkID0gKHsgbWF4bGVuZ3RoLCBtaW5sZW5ndGgsIHJlcXVpcmVkLCB2YWx1ZSB9OiBWYWxpZGF0aW9uTGVuZ3RoKSA9PiB7XG4gIGNvbnN0IGlzRW1wdHlBbmRVbnJlcXVpcmVkID0gdmFsdWUubGVuZ3RoID09PSAwICYmICFyZXF1aXJlZDtcbiAgY29uc3QgaXNUb29Mb25nID0gbWF4bGVuZ3RoICYmIHZhbHVlLmxlbmd0aCA+IG1heGxlbmd0aDtcbiAgY29uc3QgaXNUb29TaG9ydCA9ICFpc0VtcHR5QW5kVW5yZXF1aXJlZCAmJiBtaW5sZW5ndGggJiYgdmFsdWUubGVuZ3RoIDwgbWlubGVuZ3RoO1xuXG4gIHJldHVybiAhaXNUb29TaG9ydCAmJiAhaXNUb29Mb25nO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE1heFJhbmdlSXNWYWxpZCA9ICh7IG1pbiB9OiBQaWNrPFJhbmdlRGF0YSwgJ21pbic+LCB0eXBlPzogJ3ByaWNlJykgPT4ge1xuICByZXR1cm4gKHZhbHVlOiBzdHJpbmcpOiBWYWxpZGF0aW9uUmVzdWx0ID0+IHtcbiAgICBsZXQgbmV3TWF4OiBudW1iZXIgfCBudWxsID0gdHlwZSA9PT0gJ3ByaWNlJyA/IHByaWNlVG9OdW1iZXIodmFsdWUpIDogTnVtYmVyKHZhbHVlKTtcbiAgICBuZXdNYXggPSAhaXNOYU4obmV3TWF4KSA/IG5ld01heCA6IG51bGw7XG4gICAgaWYgKG1pbiAmJiBuZXdNYXgpIHtcbiAgICAgIGlmIChuZXdNYXggPj0gbWluKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWVzc2FnZTogJycsXG4gICAgICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1lc3NhZ2U6IGBNdXN0IGJlIGdyZWF0ZXIgdGhhbiBtaW5gLFxuICAgICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5vRXJyb3I7XG4gICAgfVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE1pblJhbmdlSXNWYWxpZCA9ICh7IG1heCB9OiBQaWNrPFJhbmdlRGF0YSwgJ21heCc+LCB0eXBlPzogJ3ByaWNlJykgPT4ge1xuICByZXR1cm4gKHZhbHVlOiBzdHJpbmcpOiBWYWxpZGF0aW9uUmVzdWx0ID0+IHtcbiAgICBsZXQgbmV3TWluOiBudW1iZXIgfCBudWxsID0gdHlwZSA9PT0gJ3ByaWNlJyA/IHByaWNlVG9OdW1iZXIodmFsdWUpIDogTnVtYmVyKHZhbHVlKTtcbiAgICBuZXdNaW4gPSAhaXNOYU4obmV3TWluKSA/IG5ld01pbiA6IG51bGw7XG4gICAgaWYgKG1heCAmJiBuZXdNaW4pIHtcbiAgICAgIGlmIChuZXdNaW4gPD0gbWF4KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWVzc2FnZTogJycsXG4gICAgICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1lc3NhZ2U6IGBNdXN0IGJlIGxlc3MgdGhhbiBtYXhgLFxuICAgICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5vRXJyb3I7XG4gICAgfVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNlbGVjdE9wdGlvbnNGcm9tU3RyaW5ncyA9IChzdHJpbmdzOiBzdHJpbmdbXSkgPT5cbiAgc3RyaW5ncy5tYXAoXG4gICAgKG9wdGlvbikgPT5cbiAgICAgICh7XG4gICAgICAgIGxhYmVsOiBvcHRpb24sXG4gICAgICAgIHZhbHVlOiBvcHRpb24sXG4gICAgICB9IGFzIFNlbGVjdE9wdGlvbilcbiAgKTtcblxuZXhwb3J0IGNvbnN0IGhhbmRsZUZpZWxkVmFsaWRhdGlvbiA9ICh7XG4gIGVycm9yLFxuICBlcnJvckZyb21Qcm9wcyxcbiAgbWF4bGVuZ3RoLFxuICBtaW5sZW5ndGgsXG4gIHJlcXVpcmVkID0gZmFsc2UsXG4gIHZhbGlkYXRvcnMsXG4gIHZhbHVlLFxufToge1xuICBlcnJvcjogUmVmPFZhbGlkYXRpb25FcnJvcj47XG4gIGVycm9yRnJvbVByb3BzOiBWYWxpZGF0aW9uRXJyb3I7XG4gIG1heGxlbmd0aD86IG51bWJlcjtcbiAgbWlubGVuZ3RoPzogbnVtYmVyO1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIHZhbGlkYXRvcnM/OiBWYWxpZGF0b3JbXTtcbiAgdmFsdWU/OiBSZWY8c3RyaW5nIHwgdW5kZWZpbmVkPjtcbn0pID0+IHtcbiAgLy8gZXJyb3IgaW4gcHJvcHMgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHZhbGlkYXRpb24gZXJyb3JcblxuICBlcnJvci52YWx1ZSA9IGVycm9yRnJvbVByb3BzID8gZXJyb3JGcm9tUHJvcHMgOiBmYWxzZTtcblxuICBpZiAoIWVycm9yLnZhbHVlICYmIHZhbGlkYXRvcnMpIHtcbiAgICBjb25zdCB2YWxpZGF0aW9uID0gdmFsaWRhdGVQcm9wZXJ0eSh2YWx1ZT8udmFsdWUgfHwgJycsIHZhbGlkYXRvcnMpO1xuXG4gICAgaWYgKCF2YWxpZGF0aW9uLnZhbGlkKSB7XG4gICAgICBlcnJvci52YWx1ZSA9IHZhbGlkYXRpb24ubWVzc2FnZTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWVycm9yLnZhbHVlICYmIChtYXhsZW5ndGggfHwgbWlubGVuZ3RoKSkge1xuICAgIGNvbnN0IGxlbmd0aFZhbGlkYXRpb24gPSB2YWxpZGF0ZUxlbmd0aCh7XG4gICAgICBtYXhsZW5ndGgsXG4gICAgICBtaW5sZW5ndGgsXG4gICAgICByZXF1aXJlZCxcbiAgICAgIHZhbHVlOiB2YWx1ZT8udmFsdWUgfHwgJycsXG4gICAgfSk7XG5cbiAgICBpZiAoIWxlbmd0aFZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgIGVycm9yLnZhbHVlID0gbGVuZ3RoVmFsaWRhdGlvbi5tZXNzYWdlO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRmllbGRzRnJvbVJlZnMoZmllbGRzOiB7IFtrZXk6IHN0cmluZ106IFJlZjxTdHJpbmdJbnB1dCB8IG51bGw+IH0pIHtcbiAgbGV0IHZhbGlkID0gdHJ1ZTtcblxuICBmb3IgKGNvbnN0IGtleSBpbiBmaWVsZHMpIHtcbiAgICBpZiAoZmllbGRzW2tleV0udmFsdWU/LnJlcXVpcmVkKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGZpZWxkc1trZXldLnZhbHVlPy52YWx1ZTtcbiAgICAgIHZhbGlkID0gdmFsaWQgJiYgISF2YWx1ZSAmJiB2YWx1ZS50cmltKCkgIT09ICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGVycm9yID0gZmllbGRzW2tleV0udmFsdWU/LmVycm9yO1xuICAgIHZhbGlkID0gdmFsaWQgJiYgIWVycm9yO1xuICB9XG5cbiAgcmV0dXJuIHZhbGlkO1xufVxuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVMZW5ndGggPSAoe1xuICBtYXhsZW5ndGgsXG4gIG1pbmxlbmd0aCxcbiAgcmVxdWlyZWQgPSBmYWxzZSxcbiAgdmFsdWUsXG59OiBWYWxpZGF0aW9uTGVuZ3RoKTogVmFsaWRhdGlvblJlc3VsdCA9PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgIG1lc3NhZ2U6ICcnLFxuICAgIHZhbGlkOiB0cnVlLFxuICB9O1xuXG4gIHJlc3BvbnNlLnZhbGlkID0gZ2V0RmllbGRMZW5ndGhJc1ZhbGlkKHtcbiAgICBtYXhsZW5ndGgsXG4gICAgbWlubGVuZ3RoLFxuICAgIHJlcXVpcmVkLFxuICAgIHZhbHVlLFxuICB9KTtcblxuICBpZiAocmVzcG9uc2UudmFsaWQpIHJldHVybiByZXNwb25zZTtcblxuICByZXNwb25zZS5tZXNzYWdlID0gZXJyb3JNZXNzYWdlRGVmYXVsdDtcblxuICBpZiAobWF4bGVuZ3RoICYmIG1pbmxlbmd0aCkge1xuICAgIHJlc3BvbnNlLm1lc3NhZ2UgPSBgUGxlYXNlIGVudGVyIGEgdmFsdWUgYmV0d2VlbiAke21pbmxlbmd0aH0gYW5kICR7bWF4bGVuZ3RofSBjaGFyYWN0ZXJzIGluIGxlbmd0aC5gO1xuICB9IGVsc2UgaWYgKG1heGxlbmd0aCkge1xuICAgIHJlc3BvbnNlLm1lc3NhZ2UgPSBgUGxlYXNlIGVudGVyIGEgdmFsdWUgbm8gbW9yZSB0aGFuICR7bWF4bGVuZ3RofSBjaGFyYWN0ZXJzIGluIGxlbmd0aC5gO1xuICB9IGVsc2UgaWYgKG1pbmxlbmd0aCkge1xuICAgIHJlc3BvbnNlLm1lc3NhZ2UgPSBgUGxlYXNlIGVudGVyIGEgdmFsdWUgbm8gbGVzcyB0aGFuICR7bWlubGVuZ3RofSBjaGFyYWN0ZXJzIGluIGxlbmd0aC5gO1xuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydHkodmFsdWU6IHN0cmluZywgdmFsaWRhdG9yczogKCh2YWx1ZTogc3RyaW5nKSA9PiBWYWxpZGF0aW9uUmVzdWx0KVtdKTogVmFsaWRhdGlvblJlc3VsdCB7XG4gIGZvciAoY29uc3QgdmFsaWRhdG9yIG9mIHZhbGlkYXRvcnMpIHtcbiAgICBjb25zdCB2YWxpZGF0aW9uID0gdmFsaWRhdG9yKHZhbHVlKTtcbiAgICBpZiAoIXZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgIHJldHVybiB2YWxpZGF0aW9uO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbWVzc2FnZTogJycsXG4gICAgdmFsaWQ6IHRydWUsXG4gIH07XG59XG4iLCI8c2NyaXB0IGxhbmc9XCJ0c1wiIHNldHVwPlxuICBpbXBvcnQgeyBjb21wdXRlZCwgcmVmLCB3YXRjaCB9IGZyb20gJ3Z1ZSc7XG5cbiAgaW1wb3J0IFRpZGVJY29uIGZyb20gJ0AvY29tcG9uZW50cy9UaWRlSWNvbi52dWUnO1xuICBpbXBvcnQgeyBJQ09OIH0gZnJvbSAnQC90eXBlcy9JY29uJztcbiAgaW1wb3J0IHsgU0laRSB9IGZyb20gJ0AvdHlwZXMvU2l6ZSc7XG4gIGltcG9ydCB7IENTUyB9IGZyb20gJ0AvdHlwZXMvU3R5bGVzJztcbiAgaW1wb3J0IHsgZ2V0RXJyb3JNZXNzYWdlLCBnZXRGaWVsZEhhc0Vycm9yIH0gZnJvbSAnQC91dGlsaXRpZXMvdmFsaWRhdGlvbic7XG5cbiAgaW1wb3J0IHR5cGUgeyBTZWxlY3RGaWVsZCB9IGZyb20gJ0AvdHlwZXMvRmllbGQnO1xuICBpbXBvcnQgdHlwZSB7IFNlbGVjdE9wdGlvbiwgU2VsZWN0T3B0aW9uR3JvdXAgfSBmcm9tICdAL3R5cGVzL1NlbGVjdCc7XG5cbiAgaW50ZXJmYWNlIFByb3BzIGV4dGVuZHMgU2VsZWN0RmllbGQge1xuICAgIGlucHV0SWQ/OiBzdHJpbmc7XG4gICAgc3VwcG9ydGluZ1RleHQ/OiBzdHJpbmc7XG4gIH1cblxuICBjb25zdCBwcm9wcyA9IHdpdGhEZWZhdWx0cyhkZWZpbmVQcm9wczxQcm9wcz4oKSwge1xuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBlcnJvcjogZmFsc2UsXG4gICAgaW5wdXRJZDogdW5kZWZpbmVkLFxuICAgIGxhYmVsOiB1bmRlZmluZWQsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIHN1cHBvcnRpbmdUZXh0OiB1bmRlZmluZWQsXG4gICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgfSk7XG5cbiAgY29uc3QgZXJyb3IgPSByZWYocHJvcHMuZXJyb3IpO1xuICBjb25zdCBoYXNGb2N1cyA9IHJlZihmYWxzZSk7XG4gIGNvbnN0IGlucHV0ID0gcmVmPEhUTUxTZWxlY3RFbGVtZW50IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IHJlcXVpcmVkID0gcmVmKHByb3BzLnJlcXVpcmVkKTtcbiAgY29uc3QgdmFsdWUgPSByZWY8c3RyaW5nIHwgdW5kZWZpbmVkPihwcm9wcy52YWx1ZSk7XG5cbiAgY29uc3QgZXJyb3JNZXNzYWdlID0gY29tcHV0ZWQoKCkgPT4gZ2V0RXJyb3JNZXNzYWdlKHByb3BzLmVycm9yLCBlcnJvci52YWx1ZSkpO1xuICBjb25zdCBmb3JtYXR0ZWRMYWJlbCA9IGNvbXB1dGVkKCgpID0+IChwcm9wcy5yZXF1aXJlZCA/IGAke3Byb3BzLmxhYmVsfSAqYCA6IHByb3BzLmxhYmVsKSk7XG4gIGNvbnN0IGhhc0Vycm9yID0gY29tcHV0ZWQoKCkgPT4gKHByb3BzLnJlcXVpcmVkICYmICF2YWx1ZS52YWx1ZSkgfHwgZ2V0RmllbGRIYXNFcnJvcihlcnJvci52YWx1ZSwgcHJvcHMuZXJyb3IpKTtcbiAgY29uc3QgaGFzTWluaWxhYmVsID0gY29tcHV0ZWQoKCkgPT4gaGFzRm9jdXMudmFsdWUgfHwgIWlzRW1wdHkudmFsdWUpO1xuICBjb25zdCBpc0VtcHR5ID0gY29tcHV0ZWQoKCkgPT4gdmFsdWUudmFsdWUgPT09IHVuZGVmaW5lZCk7XG5cbiAgY29uc3QgZXhwYW5kT3B0aW9ucyA9ICgpID0+IHtcbiAgICBjb25zdCBldmVudCA9IG5ldyBNb3VzZUV2ZW50KCdtb3VzZWRvd24nKTtcbiAgICBpbnB1dD8udmFsdWU/LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUZvY3VzID0gKCkgPT4ge1xuICAgIGhhc0ZvY3VzLnZhbHVlID0gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVGb2N1c091dCA9ICgpID0+IHtcbiAgICBoYXNGb2N1cy52YWx1ZSA9IGZhbHNlO1xuICB9O1xuXG4gIHdhdGNoKFxuICAgICgpID0+IHByb3BzLnZhbHVlLFxuICAgIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcbiAgICAgIGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUgfHwgbmV3VmFsdWUgIT09IHZhbHVlLnZhbHVlKSB7XG4gICAgICAgIHZhbHVlLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICB9XG4gICAgfVxuICApO1xuXG4gIGRlZmluZUV4cG9zZSh7IGVycm9yLCB2YWx1ZSB9KTtcbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG4gIDxkaXZcbiAgICA6Y2xhc3M9XCJbXG4gICAgICAndGlkZS1pbnB1dC1zZWxlY3QnLFxuICAgICAgQ1NTLkRJU1BMQVkuRkxFWCxcbiAgICAgIENTUy5GTEVYLkRJUkVDVElPTi5DT0xVTU4sXG4gICAgICBDU1MuR0FQLlFVQVJURVIsXG4gICAgICBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLFxuICAgICAgaGFzRXJyb3IgJiYgJ2Vycm9yJyxcbiAgICBdXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgIDpjbGFzcz1cIltcbiAgICAgICAgJ3RpZGUtaW5wdXQtYm9yZGVyJyxcbiAgICAgICAgQ1NTLlBPU0lUSU9OLlJFTEFUSVZFLFxuICAgICAgICBDU1MuRElTUExBWS5GTEVYLFxuICAgICAgICBDU1MuQVhJUzIuQ0VOVEVSLFxuICAgICAgICBDU1MuR0FQLkhBTEYsXG4gICAgICAgIENTUy5CT1JERVIuUkFESVVTLkhBTEYsXG4gICAgICAgIENTUy5CRy5TVVJGQUNFLkRFRkFVTFQsXG4gICAgICAgIHByb3BzLmRpc2FibGVkID8gQ1NTLkNVUlNPUi5OT1RfQUxMT1dFRCA6ICcnLFxuICAgICAgICBDU1MuT1ZFUkZMT1cuWFkuSElEREVOLFxuICAgICAgXVwiXG4gICAgICBAY2xpY2s9XCJleHBhbmRPcHRpb25zXCJcbiAgICA+XG4gICAgICA8ZGl2IDpjbGFzcz1cIltDU1MuRElTUExBWS5GTEVYLCBDU1MuRkxFWC5ESVJFQ1RJT04uQ09MVU1OLCBDU1MuV0lEVEguRlVMTF1cIj5cbiAgICAgICAgPGxhYmVsXG4gICAgICAgICAgOmNsYXNzPVwiW1xuICAgICAgICAgICAgaGFzTWluaWxhYmVsID8gWydtaW5pbGFiZWwnLCBDU1MuRk9OVC5ST0xFLkxBQkVMXzNdIDogQ1NTLkZPTlQuUk9MRS5MQUJFTF8xLFxuICAgICAgICAgICAgQ1NTLlBPU0lUSU9OLkFCU09MVVRFLFxuICAgICAgICAgICAgQ1NTLlBPU0lUSU9OSU5HLkxFRlQsXG4gICAgICAgICAgICBDU1MuTUFSR0lOLlRPUC5IQUxGLFxuICAgICAgICAgICAgQ1NTLk1BUkdJTi5MRUZULk9ORSxcbiAgICAgICAgICAgICFoYXNFcnJvciAmJiBDU1MuRk9OVC5DT0xPUi5TVVJGQUNFLlZBUklBTlQsXG4gICAgICAgICAgICBDU1MuUE9JTlRFUl9FVkVOVFMuT0ZGLFxuICAgICAgICAgIF1cIlxuICAgICAgICAgIDpmb3I9XCJwcm9wcy5pbnB1dElkXCJcbiAgICAgICAgICB2LWlmPVwibGFiZWxcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgZm9ybWF0dGVkTGFiZWwgfX1cbiAgICAgICAgPC9sYWJlbD5cblxuICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgOmNsYXNzPVwiW1xuICAgICAgICAgICAgQ1NTLlBBRERJTkcuQk9UVE9NLkhBTEYsXG4gICAgICAgICAgICBDU1MuUEFERElORy5YLk9ORSxcbiAgICAgICAgICAgIENTUy5XSURUSC5GVUxMLFxuICAgICAgICAgICAgZGlzYWJsZWQgJiYgQ1NTLkNVUlNPUi5OT1RfQUxMT1dFRCxcbiAgICAgICAgICAgIENTUy5GT05ULlJPTEUuQk9EWV8xLFxuICAgICAgICAgIF1cIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICA6bmFtZT1cIm5hbWVcIlxuICAgICAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgICAgICA6cmVxdWlyZWQ9XCJyZXF1aXJlZFwiXG4gICAgICAgICAgQGZvY3VzPVwiaGFuZGxlRm9jdXNcIlxuICAgICAgICAgIEBmb2N1c291dD1cImhhbmRsZUZvY3VzT3V0XCJcbiAgICAgICAgICA6aWQ9XCJwcm9wcy5pbnB1dElkXCJcbiAgICAgICAgICB2LW1vZGVsPVwidmFsdWVcIlxuICAgICAgICA+XG4gICAgICAgICAgPHRlbXBsYXRlIHYtZm9yPVwib3B0Z3JvdXAgaW4gcHJvcHMub3B0Z3JvdXBzXCI+XG4gICAgICAgICAgICA8b3B0Z3JvdXBcbiAgICAgICAgICAgICAgOmNsYXNzPVwiW0NTUy5XSURUSC5GVUxMLCBDU1MuQkcuU1VSRkFDRS5ERUZBVUxUXVwiXG4gICAgICAgICAgICAgIDprZXk9XCIob3B0Z3JvdXAgYXMgU2VsZWN0T3B0aW9uR3JvdXApLmxhYmVsXCJcbiAgICAgICAgICAgICAgOmxhYmVsPVwiKG9wdGdyb3VwIGFzIFNlbGVjdE9wdGlvbkdyb3VwKS5sYWJlbFwiXG4gICAgICAgICAgICAgIHYtaWY9XCIob3B0Z3JvdXAgYXMgU2VsZWN0T3B0aW9uR3JvdXApLm9wdGlvbnNcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8b3B0aW9uXG4gICAgICAgICAgICAgICAgOmNsYXNzPVwiW0NTUy5XSURUSC5GVUxMLCBDU1MuQkcuU1VSRkFDRS5ERUZBVUxUXVwiXG4gICAgICAgICAgICAgICAgOmtleT1cIm9wdGlvbi52YWx1ZVwiXG4gICAgICAgICAgICAgICAgOnZhbHVlPVwib3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgICAgICB2LWZvcj1cIm9wdGlvbiBpbiAob3B0Z3JvdXAgYXMgU2VsZWN0T3B0aW9uR3JvdXApLm9wdGlvbnNcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgb3B0aW9uLmxhYmVsIH19XG4gICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9vcHRncm91cD5cblxuICAgICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgICA6Y2xhc3M9XCJbQ1NTLldJRFRILkZVTEwsIENTUy5CRy5TVVJGQUNFLkRFRkFVTFRdXCJcbiAgICAgICAgICAgICAgOmtleT1cIihvcHRncm91cCBhcyBTZWxlY3RPcHRpb24pLnZhbHVlXCJcbiAgICAgICAgICAgICAgOnNlbGVjdGVkPVwidmFsdWUgPT09IChvcHRncm91cCBhcyBTZWxlY3RPcHRpb24pLnZhbHVlID8gdHJ1ZSA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgIDp2YWx1ZT1cIihvcHRncm91cCBhcyBTZWxlY3RPcHRpb24pLnZhbHVlXCJcbiAgICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IChvcHRncm91cCBhcyBTZWxlY3RPcHRpb24pLmxhYmVsIH19XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgOmNsYXNzPVwiW0NTUy5XSURUSC5GVUxMLCBDU1MuQkcuU1VSRkFDRS5ERUZBVUxUXVwiXG4gICAgICAgICAgICA6a2V5PVwib3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgIDpzZWxlY3RlZD1cInZhbHVlID09PSBvcHRpb24udmFsdWUgPyB0cnVlIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICAgIDp2YWx1ZT1cIm9wdGlvbi52YWx1ZVwiXG4gICAgICAgICAgICB2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBvcHRpb24ubGFiZWwgfX1cbiAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPFRpZGVJY29uXG4gICAgICAgIDpjbGFzcz1cIltDU1MuUE9TSVRJT04uQUJTT0xVVEUsIENTUy5QT1NJVElPTklORy5SSUdIVCwgQ1NTLk1BUkdJTi5SSUdIVC5PTkUsIENTUy5QT0lOVEVSX0VWRU5UUy5PRkZdXCJcbiAgICAgICAgOmljb249XCJJQ09OLkVYUEFORF9NT1JFXCJcbiAgICAgICAgOnNpemU9XCJTSVpFLlNNQUxMXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICA6Y2xhc3M9XCJbQ1NTLkRJU1BMQVkuRkxFWCwgQ1NTLkFYSVMyLkNFTlRFUiwgQ1NTLkdBUC5RVUFSVEVSXVwiXG4gICAgICB2LWlmPVwicHJvcHMuc3VwcG9ydGluZ1RleHQgfHwgaGFzRXJyb3JcIlxuICAgID5cbiAgICAgIDxUaWRlSWNvblxuICAgICAgICA6Y2xhc3M9XCJbXVwiXG4gICAgICAgIDppY29uPVwiSUNPTi5FUlJPUlwiXG4gICAgICAgIDpzaXplPVwiU0laRS5TTUFMTFwiXG4gICAgICAgIHYtaWY9XCJoYXNFcnJvclwiXG4gICAgICAvPlxuXG4gICAgICA8ZGl2IDpjbGFzcz1cIltDU1MuRk9OVC5ST0xFLkxBQkVMXzNdXCI+XG4gICAgICAgIHt7IGhhc0Vycm9yID8gZXJyb3JNZXNzYWdlIDogcHJvcHMuc3VwcG9ydGluZ1RleHQgfX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBzY29wZWQ+XG4gIHNlbGVjdCB7XG4gICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgfVxuXG4gIGxhYmVsIHtcbiAgICBoZWlnaHQ6IDEuMTg3NXJlbTtcbiAgICB0cmFuc2l0aW9uOiBmb250LXNpemUgdmFyKC0tdGlkZS1hbmltYXRlKSwgdHJhbnNmb3JtIHZhcigtLXRpZGUtYW5pbWF0ZSk7XG4gIH1cblxuICBsYWJlbDpub3QoLm1pbmlsYWJlbCkge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIGNhbGMoOSAvIDE2ICogMXJlbSkpO1xuICB9XG5cbiAgLnRpZGUtaW5wdXQtc2VsZWN0LmRpc2FibGVkIHtcbiAgICBvcGFjaXR5OiB2YXIoLS10aWRlLWRpc2FibGVkKTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXNlbGVjdC5lcnJvciAudGlkZS1pbnB1dC1ib3JkZXIge1xuICAgIG91dGxpbmUtY29sb3I6IHZhcigtLXRpZGUtZXJyb3ItYm9yZGVyKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS10aWRlLWVycm9yLXN1cmZhY2UpO1xuICB9XG5cbiAgLnRpZGUtaW5wdXQtc2VsZWN0LmVycm9yOmZvY3VzLXdpdGhpbiAudGlkZS1pbnB1dC1ib3JkZXIge1xuICAgIG91dGxpbmUtY29sb3I6IHZhcigtLXRpZGUtZXJyb3ItYm9yZGVyKTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXNlbGVjdDpmb2N1cy13aXRoaW4gLnRpZGUtaW5wdXQtYm9yZGVyIHtcbiAgICAtLXRpZGUtaW5wdXQtb3V0bGluZS13aWR0aDogdmFyKC0tdGlkZS1ib3JkZXItd2lkdGgtMik7XG4gICAgb3V0bGluZS1jb2xvcjogdmFyKC0tdGlkZS1zdXJmYWNlLWJvcmRlci1oaWdoKTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LWJvcmRlciB7XG4gICAgLS10aWRlLWlucHV0LW91dGxpbmUtd2lkdGg6IHZhcigtLXRpZGUtYm9yZGVyLXdpZHRoLTEpO1xuICAgIG91dGxpbmU6IHZhcigtLXRpZGUtaW5wdXQtb3V0bGluZS13aWR0aCkgc29saWQgdmFyKC0tdGlkZS1ib3JkZXIpO1xuICAgIG91dGxpbmUtb2Zmc2V0OiBjYWxjKHZhcigtLXRpZGUtaW5wdXQtb3V0bGluZS13aWR0aCkgKiAtMSk7XG4gIH1cblxuICAudGlkZS1pbnB1dC1zZWxlY3QuZXJyb3Ige1xuICAgIGNvbG9yOiB2YXIoLS10aWRlLWVycm9yLXByaW1hcnkpO1xuICB9XG5cbiAgLnRpZGUtaW5wdXQtc2VsZWN0LmVycm9yIG9wdGlvbiB7XG4gICAgY29sb3I6IHZhcigtLXRpZGUtb24tc3VyZmFjZSk7XG4gIH1cblxuICBzZWxlY3Qge1xuICAgIHBhZGRpbmctdG9wOiAyN3B4O1xuICB9XG48L3N0eWxlPlxuIiwiZXhwb3J0IGNvbnN0IFRFWFRfSU5QVVRfVFlQRSA9IHtcbiAgREFURTogJ2RhdGUnLFxuICBEQVRFVElNRV9MT0NBTDogJ2RhdGV0aW1lLWxvY2FsJyxcbiAgRU1BSUw6ICdlbWFpbCcsXG4gIE1PTlRIOiAnbW9udGgnLFxuICBOVU1CRVI6ICdudW1iZXInLFxuICBQQVNTV09SRDogJ3Bhc3N3b3JkJyxcbiAgU0VBUkNIOiAnc2VhcmNoJyxcbiAgVEVMOiAndGVsJyxcbiAgVEVYVDogJ3RleHQnLFxuICBUSU1FOiAndGltZScsXG4gIFVSTDogJ3VybCcsXG4gIFdFRUs6ICd3ZWVrJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIFRleHRJbnB1dFR5cGUgPSAodHlwZW9mIFRFWFRfSU5QVVRfVFlQRSlba2V5b2YgdHlwZW9mIFRFWFRfSU5QVVRfVFlQRV07XG4iLCI8c2NyaXB0IGxhbmc9XCJ0c1wiIHNldHVwPlxuICBpbXBvcnQgeyBjb21wdXRlZCwgcmVmLCB3YXRjaCB9IGZyb20gJ3Z1ZSc7XG5cbiAgaW1wb3J0IFRpZGVJY29uIGZyb20gJ0AvY29tcG9uZW50cy9UaWRlSWNvbi52dWUnO1xuICBpbXBvcnQgeyBJQ09OIH0gZnJvbSAnQC90eXBlcy9JY29uJztcbiAgaW1wb3J0IHsgU0laRSB9IGZyb20gJ0AvdHlwZXMvU2l6ZSc7XG4gIGltcG9ydCB7IENTUyB9IGZyb20gJ0AvdHlwZXMvU3R5bGVzJztcbiAgaW1wb3J0IHsgVEVYVF9JTlBVVF9UWVBFIH0gZnJvbSAnQC90eXBlcy9UZXh0SW5wdXQnO1xuICBpbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2UsIGdldEZpZWxkSGFzRXJyb3IsIGhhbmRsZUZpZWxkVmFsaWRhdGlvbiB9IGZyb20gJ0AvdXRpbGl0aWVzL3ZhbGlkYXRpb24nO1xuXG4gIGltcG9ydCB0eXBlIHsgRm9ybVZhbHVlVHJhbnNmb3JtZXIgfSBmcm9tICdAL3R5cGVzL0Zvcm0nO1xuICBpbXBvcnQgdHlwZSB7IEljb24gfSBmcm9tICdAL3R5cGVzL0ljb24nO1xuICBpbXBvcnQgdHlwZSB7IFRleHRJbnB1dFR5cGUgfSBmcm9tICdAL3R5cGVzL1RleHRJbnB1dCc7XG4gIGltcG9ydCB0eXBlIHsgVmFsaWRhdGlvbkVycm9yLCBWYWxpZGF0b3IgfSBmcm9tICdAL3R5cGVzL1ZhbGlkYXRpb24nO1xuXG4gIHR5cGUgUHJvcHMgPSB7XG4gICAgYXV0b2NvbXBsZXRlPzogYm9vbGVhbjtcbiAgICBkYXRhVHJhY2s/OiBzdHJpbmc7XG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIGVycm9yPzogVmFsaWRhdGlvbkVycm9yO1xuICAgIGhhc0NsZWFyPzogYm9vbGVhbjtcbiAgICBpY29uTGVhZGluZz86IEljb247XG4gICAgaW5wdXRJZD86IHN0cmluZztcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIG1heGxlbmd0aD86IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICBtaW5sZW5ndGg/OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHByZWZpeD86IHN0cmluZztcbiAgICByZXF1aXJlZD86IGJvb2xlYW47XG4gICAgc3VmZml4Pzogc3RyaW5nO1xuICAgIHN1cHBvcnRpbmdUZXh0Pzogc3RyaW5nO1xuICAgIHRyYW5zZm9ybVZhbHVlPzogRm9ybVZhbHVlVHJhbnNmb3JtZXI7XG4gICAgdHlwZT86IFRleHRJbnB1dFR5cGU7XG4gICAgdmFsaWRhdG9ycz86IFZhbGlkYXRvcltdO1xuICAgIHZhbHVlPzogc3RyaW5nO1xuICB9O1xuXG4gIGNvbnN0IHByb3BzID0gd2l0aERlZmF1bHRzKGRlZmluZVByb3BzPFByb3BzPigpLCB7XG4gICAgYXV0b2NvbXBsZXRlOiBmYWxzZSxcbiAgICBkYXRhVHJhY2s6ICcnLFxuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBlcnJvcjogZmFsc2UsXG4gICAgaGFzQ2xlYXI6IGZhbHNlLFxuICAgIGljb25MZWFkaW5nOiB1bmRlZmluZWQsXG4gICAgaW5wdXRJZDogdW5kZWZpbmVkLFxuICAgIGxhYmVsOiB1bmRlZmluZWQsXG4gICAgbWF4bGVuZ3RoOiB1bmRlZmluZWQsXG4gICAgbWlubGVuZ3RoOiB1bmRlZmluZWQsXG4gICAgcHJlZml4OiB1bmRlZmluZWQsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIHN1ZmZpeDogdW5kZWZpbmVkLFxuICAgIHN1cHBvcnRpbmdUZXh0OiB1bmRlZmluZWQsXG4gICAgdHJhbnNmb3JtVmFsdWU6IHVuZGVmaW5lZCxcbiAgICB0eXBlOiBURVhUX0lOUFVUX1RZUEUuVEVYVCxcbiAgICB2YWxpZGF0b3JzOiB1bmRlZmluZWQsXG4gICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgfSk7XG5cbiAgY29uc3QgZXJyb3IgPSByZWYocHJvcHMuZXJyb3IpO1xuICBjb25zdCBoYXNGb2N1cyA9IHJlZihmYWxzZSk7XG4gIGNvbnN0IGlucHV0ID0gcmVmPEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgY29uc3Qgc2hvd1Bhc3N3b3JkID0gcmVmKGZhbHNlKTtcbiAgY29uc3QgdmFsdWUgPSByZWYocHJvcHMudmFsdWUpO1xuXG4gIGNvbnN0IGVycm9yTWVzc2FnZSA9IGNvbXB1dGVkKCgpID0+IGdldEVycm9yTWVzc2FnZShwcm9wcy5lcnJvciwgZXJyb3IudmFsdWUpKTtcbiAgY29uc3QgZm9ybWF0dGVkTGFiZWwgPSBjb21wdXRlZCgoKSA9PiAocHJvcHMucmVxdWlyZWQgJiYgcHJvcHMubGFiZWwgPyBgJHtwcm9wcy5sYWJlbH0gKmAgOiBwcm9wcy5sYWJlbCkpO1xuICBjb25zdCBoYXNDbGVhciA9IGNvbXB1dGVkKCgpID0+IHByb3BzLmhhc0NsZWFyICYmIHZhbHVlLnZhbHVlKTtcbiAgY29uc3QgaGFzRXJyb3IgPSBjb21wdXRlZChcbiAgICAoKSA9PiAocHJvcHMucmVxdWlyZWQgJiYgdmFsdWUudmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhdmFsdWUudmFsdWUpIHx8IGdldEZpZWxkSGFzRXJyb3IoZXJyb3IudmFsdWUsIHByb3BzLmVycm9yKVxuICApO1xuICBjb25zdCBoYXNNaW5pbGFiZWwgPSBjb21wdXRlZCgoKSA9PiBoYXNGb2N1cy52YWx1ZSB8fCAhaXNFbXB0eS52YWx1ZSk7XG4gIGNvbnN0IGlzRW1wdHkgPSBjb21wdXRlZCgoKSA9PiB2YWx1ZS52YWx1ZSA9PT0gJycgfHwgdmFsdWUudmFsdWUgPT09IHVuZGVmaW5lZCk7XG4gIGNvbnN0IHR5cGUgPSBjb21wdXRlZCgoKSA9PlxuICAgIHByb3BzLnR5cGUgPT09IFRFWFRfSU5QVVRfVFlQRS5QQVNTV09SRCAmJiBzaG93UGFzc3dvcmQudmFsdWUgPT09IHRydWUgPyBURVhUX0lOUFVUX1RZUEUuVEVYVCA6IHByb3BzLnR5cGVcbiAgKTtcblxuICBjb25zdCBoYW5kbGVDbGVhciA9ICgpID0+IHtcbiAgICB2YWx1ZS52YWx1ZSA9ICcnO1xuICAgIGlucHV0LnZhbHVlPy5mb2N1cygpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUZvY3VzID0gKCkgPT4ge1xuICAgIGhhc0ZvY3VzLnZhbHVlID0gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVGb2N1c091dCA9ICgpID0+IHtcbiAgICBoYXNGb2N1cy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgaWYgKCF2YWx1ZS52YWx1ZSkge1xuICAgICAgdmFsdWUudmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICBoYW5kbGVWYWxpZGF0aW9uKCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlSW5wdXQgPSAoKSA9PiB7XG4gICAgaWYgKHByb3BzLnRyYW5zZm9ybVZhbHVlKSB7XG4gICAgICBjb25zdCBkaWdpdHMgPSB2YWx1ZS52YWx1ZT8ubWF0Y2goL1xcZC9nKT8uam9pbignJykgfHwgdW5kZWZpbmVkO1xuXG4gICAgICB2YWx1ZS52YWx1ZSA9IGRpZ2l0cyA/IHByb3BzLnRyYW5zZm9ybVZhbHVlKGRpZ2l0cykgOiAnJztcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlVmFsaWRhdGlvbiA9ICgpID0+IHtcbiAgICBoYW5kbGVGaWVsZFZhbGlkYXRpb24oe1xuICAgICAgZXJyb3IsXG4gICAgICBlcnJvckZyb21Qcm9wczogcHJvcHMuZXJyb3IsXG4gICAgICBtYXhsZW5ndGg6IHByb3BzLm1heGxlbmd0aCxcbiAgICAgIG1pbmxlbmd0aDogcHJvcHMubWlubGVuZ3RoLFxuICAgICAgcmVxdWlyZWQ6IHByb3BzLnJlcXVpcmVkLFxuICAgICAgdmFsaWRhdG9yczogcHJvcHMudmFsaWRhdG9ycyxcbiAgICAgIHZhbHVlLFxuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZVZhbHVlID0gKG5ld1ZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICB2YWx1ZS52YWx1ZSA9IG5ld1ZhbHVlO1xuICB9O1xuXG4gIHdhdGNoKFxuICAgICgpID0+IHByb3BzLnZhbHVlLFxuICAgIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcbiAgICAgIGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUgfHwgbmV3VmFsdWUgIT09IHZhbHVlLnZhbHVlKSB7XG4gICAgICAgIHZhbHVlLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICB9XG4gICAgfVxuICApO1xuXG4gIGRlZmluZUV4cG9zZSh7XG4gICAgZXJyb3IsXG4gICAgcmVxdWlyZWQ6IHByb3BzLnJlcXVpcmVkLFxuICAgIHVwZGF0ZVZhbHVlLFxuICAgIHZhbHVlLFxuICB9KTtcbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG4gIDxkaXZcbiAgICA6Y2xhc3M9XCJbXG4gICAgICAndGlkZS1pbnB1dC10ZXh0JyxcbiAgICAgIENTUy5ESVNQTEFZLkZMRVgsXG4gICAgICBDU1MuRkxFWC5ESVJFQ1RJT04uQ09MVU1OLFxuICAgICAgQ1NTLkdBUC5RVUFSVEVSLFxuICAgICAgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJyxcbiAgICAgIGhhc0Vycm9yICYmICdlcnJvcicsXG4gICAgXVwiXG4gID5cbiAgICA8ZGl2XG4gICAgICA6Y2xhc3M9XCJbXG4gICAgICAgICd0aWRlLWlucHV0LWJvcmRlcicsXG4gICAgICAgIENTUy5ESVNQTEFZLkZMRVgsXG4gICAgICAgIENTUy5BWElTMi5DRU5URVIsXG4gICAgICAgIENTUy5HQVAuSEFMRixcbiAgICAgICAgQ1NTLlBPU0lUSU9OLlJFTEFUSVZFLFxuICAgICAgICBDU1MuQk9SREVSLlJBRElVUy5IQUxGLFxuICAgICAgICBDU1MuQkcuU1VSRkFDRS5ERUZBVUxULFxuICAgICAgICBoYXNDbGVhciA/IFtDU1MuUEFERElORy5SSUdIVC5IQUxGLCBDU1MuUEFERElORy5MRUZULk9ORV0gOiBbQ1NTLlBBRERJTkcuWC5PTkVdLFxuICAgICAgICBDU1MuUEFERElORy5ZLkhBTEYsXG4gICAgICAgIHByb3BzLmRpc2FibGVkID8gQ1NTLkNVUlNPUi5OT1RfQUxMT1dFRCA6IENTUy5DVVJTT1IuVEVYVCxcbiAgICAgIF1cIlxuICAgID5cbiAgICAgIDxUaWRlSWNvblxuICAgICAgICA6Y2xhc3M9XCJbQ1NTLkZPTlQuQ09MT1IuU1VSRkFDRS5WQVJJQU5UXVwiXG4gICAgICAgIDppY29uPVwicHJvcHMuaWNvbkxlYWRpbmdcIlxuICAgICAgICA6c2l6ZT1cIlNJWkUuU01BTExcIlxuICAgICAgICB2LWlmPVwicHJvcHMuaWNvbkxlYWRpbmdcIlxuICAgICAgLz5cblxuICAgICAgPGRpdiA6Y2xhc3M9XCJbQ1NTLkRJU1BMQVkuRkxFWCwgQ1NTLkFYSVMyLkNFTlRFUiwgQ1NTLkdBUC5RVUFSVEVSLCBDU1MuV0lEVEguRlVMTF1cIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIDpjbGFzcz1cIltcbiAgICAgICAgICAgICd0aWRlLWlucHV0LXRleHQtcHJlZml4JyxcbiAgICAgICAgICAgIENTUy5GT05ULlJPTEUuQk9EWV8xLFxuICAgICAgICAgICAgLFxuICAgICAgICAgICAgIWhhc0Vycm9yICYmIENTUy5GT05ULkNPTE9SLlNVUkZBQ0UuVkFSSUFOVCxcbiAgICAgICAgICAgIGhhc01pbmlsYWJlbCA/ICcnIDogJ29mZnNldCcsXG4gICAgICAgICAgXVwiXG4gICAgICAgICAgdi1pZj1cInByb3BzLnByZWZpeFwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBwcm9wcy5wcmVmaXggfX1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIDpjbGFzcz1cIltDU1MuRElTUExBWS5GTEVYLCBDU1MuRkxFWC5ESVJFQ1RJT04uQ09MVU1OLCBDU1MuV0lEVEguRlVMTF1cIlxuICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwiaW5wdXQ/LmZvY3VzKClcIlxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICA6Y2xhc3M9XCJbXG4gICAgICAgICAgICAgIGhhc01pbmlsYWJlbCA/IFsnbWluaWxhYmVsJywgQ1NTLkZPTlQuUk9MRS5MQUJFTF8zXSA6IENTUy5GT05ULlJPTEUuTEFCRUxfMSxcbiAgICAgICAgICAgICAgIWhhc0Vycm9yICYmIENTUy5GT05ULkNPTE9SLlNVUkZBQ0UuVkFSSUFOVCxcbiAgICAgICAgICAgICAgQ1NTLkNVUlNPUi5URVhULFxuICAgICAgICAgICAgICBDU1MuUE9JTlRFUl9FVkVOVFMuT0ZGLFxuICAgICAgICAgICAgXVwiXG4gICAgICAgICAgICA6Zm9yPVwicHJvcHMuaW5wdXRJZFwiXG4gICAgICAgICAgICB2LWlmPVwibGFiZWxcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IGZvcm1hdHRlZExhYmVsIH19XG4gICAgICAgICAgPC9sYWJlbD5cblxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgOmF1dG9jb21wbGV0ZT1cImF1dG9jb21wbGV0ZSA/ICdvbicgOiAnb2ZmJ1wiXG4gICAgICAgICAgICA6Y2xhc3M9XCJbQ1NTLldJRFRILkZVTEwsIGRpc2FibGVkICYmIENTUy5DVVJTT1IuTk9UX0FMTE9XRUQsIENTUy5GT05ULlJPTEUuQk9EWV8xXVwiXG4gICAgICAgICAgICA6ZGF0YS10cmFjaz1cInByb3BzLmRhdGFUcmFja1wiXG4gICAgICAgICAgICA6ZGlzYWJsZWQ9XCJwcm9wcy5kaXNhYmxlZFwiXG4gICAgICAgICAgICA6bWF4bGVuZ3RoPVwicHJvcHMubWF4bGVuZ3RoXCJcbiAgICAgICAgICAgIDptaW5sZW5ndGg9XCJwcm9wcy5taW5sZW5ndGhcIlxuICAgICAgICAgICAgOm5hbWU9XCJwcm9wcy5uYW1lXCJcbiAgICAgICAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgICAgICAgIDpyZXF1aXJlZD1cInByb3BzLnJlcXVpcmVkXCJcbiAgICAgICAgICAgIDp0eXBlPVwidHlwZVwiXG4gICAgICAgICAgICBAY2hhbmdlPVwiaGFuZGxlVmFsaWRhdGlvblwiXG4gICAgICAgICAgICBAZm9jdXM9XCJoYW5kbGVGb2N1c1wiXG4gICAgICAgICAgICBAZm9jdXNvdXQ9XCJoYW5kbGVGb2N1c091dFwiXG4gICAgICAgICAgICBAaW5wdXQ9XCJoYW5kbGVJbnB1dFwiXG4gICAgICAgICAgICA6aWQ9XCJwcm9wcy5pbnB1dElkXCJcbiAgICAgICAgICAgIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIDpjbGFzcz1cIltcbiAgICAgICAgICAgICd0aWRlLWlucHV0LXRleHQtc3VmZml4JyxcbiAgICAgICAgICAgIENTUy5GT05ULlJPTEUuQk9EWV8xLFxuICAgICAgICAgICAgIWhhc0Vycm9yICYmIENTUy5GT05ULkNPTE9SLlNVUkZBQ0UuVkFSSUFOVCxcbiAgICAgICAgICAgIGhhc01pbmlsYWJlbCA/ICcnIDogJ29mZnNldCcsXG4gICAgICAgICAgXVwiXG4gICAgICAgICAgdi1pZj1cInByb3BzLnN1ZmZpeFwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBwcm9wcy5zdWZmaXggfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPFRpZGVJY29uXG4gICAgICAgIDpjbGFzcz1cIltDU1MuUEFERElORy5ZLkhBTEYsIENTUy5QQURESU5HLkZVTEwuSEFMRiwgQ1NTLkNVUlNPUi5QT0lOVEVSXVwiXG4gICAgICAgIDppY29uPVwiSUNPTi5DTE9TRVwiXG4gICAgICAgIDpzaXplPVwiU0laRS5TTUFMTFwiXG4gICAgICAgIEBjbGljaz1cImhhbmRsZUNsZWFyXCJcbiAgICAgICAgdi1pZj1cImhhc0NsZWFyICYmIHByb3BzLnR5cGUgIT09IFRFWFRfSU5QVVRfVFlQRS5QQVNTV09SRFwiXG4gICAgICAvPlxuXG4gICAgICA8VGlkZUljb25cbiAgICAgICAgOmNsYXNzPVwiW0NTUy5QQURESU5HLlkuSEFMRiwgQ1NTLlBBRERJTkcuRlVMTC5IQUxGLCBDU1MuQ1VSU09SLlBPSU5URVJdXCJcbiAgICAgICAgOmljb249XCJJQ09OLlZJU0lCSUxJVFlcIlxuICAgICAgICA6c2l6ZT1cIlNJWkUuU01BTExcIlxuICAgICAgICBAY2xpY2s9XCJzaG93UGFzc3dvcmQgPSAhc2hvd1Bhc3N3b3JkXCJcbiAgICAgICAgdi1pZj1cInByb3BzLnR5cGUgPT09IFRFWFRfSU5QVVRfVFlQRS5QQVNTV09SRFwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgOmNsYXNzPVwiW0NTUy5ESVNQTEFZLkZMRVgsIENTUy5BWElTMi5DRU5URVIsIENTUy5HQVAuUVVBUlRFUl1cIlxuICAgICAgdi1pZj1cInByb3BzLnN1cHBvcnRpbmdUZXh0IHx8IGhhc0Vycm9yXCJcbiAgICA+XG4gICAgICA8VGlkZUljb25cbiAgICAgICAgOmNsYXNzPVwiW11cIlxuICAgICAgICA6aWNvbj1cIklDT04uRVJST1JcIlxuICAgICAgICA6c2l6ZT1cIlNJWkUuU01BTExcIlxuICAgICAgICB2LWlmPVwiaGFzRXJyb3JcIlxuICAgICAgLz5cblxuICAgICAgPGRpdiA6Y2xhc3M9XCJbQ1NTLkZPTlQuUk9MRS5MQUJFTF8zXVwiPlxuICAgICAgICB7eyBoYXNFcnJvciA/IGVycm9yTWVzc2FnZSA6IHByb3BzLnN1cHBvcnRpbmdUZXh0IH19XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgc2NvcGVkPlxuICBsYWJlbCB7XG4gICAgaGVpZ2h0OiAxLjE4NzVyZW07XG4gICAgdHJhbnNpdGlvbjogZm9udC1zaXplIHZhcigtLXRpZGUtYW5pbWF0ZSksIHRyYW5zZm9ybSB2YXIoLS10aWRlLWFuaW1hdGUpO1xuICB9XG5cbiAgbGFiZWw6bm90KC5taW5pbGFiZWwpLFxuICAudGlkZS1pbnB1dC10ZXh0LXByZWZpeDpub3QoLm9mZnNldCksXG4gIC50aWRlLWlucHV0LXRleHQtc3VmZml4Om5vdCgub2Zmc2V0KSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgY2FsYyg5IC8gMTYgKiAxcmVtKSk7XG4gIH1cblxuICAudGlkZS1pbnB1dC10ZXh0LXByZWZpeCxcbiAgLnRpZGUtaW5wdXQtdGV4dC1zdWZmaXgge1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSB2YXIoLS10aWRlLWFuaW1hdGUpO1xuICB9XG5cbiAgLnRpZGUtaW5wdXQtdGV4dC5kaXNhYmxlZCB7XG4gICAgb3BhY2l0eTogdmFyKC0tdGlkZS1kaXNhYmxlZCk7XG4gIH1cblxuICAudGlkZS1pbnB1dC10ZXh0LmVycm9yIHtcbiAgICBjb2xvcjogdmFyKC0tdGlkZS1lcnJvci1wcmltYXJ5KTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXRleHQuZXJyb3IgLnRpZGUtaW5wdXQtYm9yZGVyIHtcbiAgICBvdXRsaW5lLWNvbG9yOiB2YXIoLS10aWRlLWVycm9yLWJvcmRlcik7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGlkZS1lcnJvci1zdXJmYWNlKTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXRleHQuZXJyb3I6Zm9jdXMtd2l0aGluIC50aWRlLWlucHV0LWJvcmRlciB7XG4gICAgb3V0bGluZS1jb2xvcjogdmFyKC0tdGlkZS1lcnJvci1ib3JkZXIpO1xuICB9XG5cbiAgLnRpZGUtaW5wdXQtdGV4dDpmb2N1cy13aXRoaW4gLnRpZGUtaW5wdXQtYm9yZGVyIHtcbiAgICAtLXRpZGUtaW5wdXQtb3V0bGluZS13aWR0aDogdmFyKC0tdGlkZS1ib3JkZXItd2lkdGgtMik7XG4gICAgb3V0bGluZS1jb2xvcjogdmFyKC0tdGlkZS1zdXJmYWNlLWJvcmRlci1oaWdoKTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXRleHQgaW5wdXQge1xuICAgIG91dGxpbmU6IG5vbmU7XG4gIH1cblxuICAudGlkZS1pbnB1dC1ib3JkZXIge1xuICAgIC0tdGlkZS1pbnB1dC1vdXRsaW5lLXdpZHRoOiB2YXIoLS10aWRlLWJvcmRlci13aWR0aC0xKTtcbiAgICBvdXRsaW5lOiB2YXIoLS10aWRlLWlucHV0LW91dGxpbmUtd2lkdGgpIHNvbGlkIHZhcigtLXRpZGUtYm9yZGVyKTtcbiAgICBvdXRsaW5lLW9mZnNldDogY2FsYyh2YXIoLS10aWRlLWlucHV0LW91dGxpbmUtd2lkdGgpICogLTEpO1xuICAgIGNvbG9yOiB2YXIoLS10aWRlLXN1cmZhY2UtZm9yZWdyb3VuZCk7XG4gIH1cbjwvc3R5bGU+XG4iLCI8c2NyaXB0IGxhbmc9XCJ0c1wiIHNldHVwPlxuICBpbXBvcnQgeyBjb21wdXRlZCwgcmVmLCB3YXRjaCB9IGZyb20gJ3Z1ZSc7XG5cbiAgaW1wb3J0IFRpZGVJY29uIGZyb20gJ0AvY29tcG9uZW50cy9UaWRlSWNvbi52dWUnO1xuICBpbXBvcnQgeyBJQ09OIH0gZnJvbSAnQC90eXBlcy9JY29uJztcbiAgaW1wb3J0IHsgU0laRSB9IGZyb20gJ0AvdHlwZXMvU2l6ZSc7XG4gIGltcG9ydCB7IENTUyB9IGZyb20gJ0AvdHlwZXMvU3R5bGVzJztcbiAgaW1wb3J0IHsgZ2V0RXJyb3JNZXNzYWdlLCBnZXRGaWVsZEhhc0Vycm9yLCBoYW5kbGVGaWVsZFZhbGlkYXRpb24gfSBmcm9tICdAL3V0aWxpdGllcy92YWxpZGF0aW9uJztcblxuICBpbXBvcnQgdHlwZSB7IFZhbGlkYXRpb25FcnJvciB9IGZyb20gJ0AvdHlwZXMvVmFsaWRhdGlvbic7XG5cbiAgdHlwZSBQcm9wcyA9IHtcbiAgICBkYXRhVHJhY2s/OiBzdHJpbmc7XG4gICAgZXJyb3I/OiBWYWxpZGF0aW9uRXJyb3I7XG4gICAgaW5wdXRJZD86IHN0cmluZztcbiAgICBsYWJlbD86IHN0cmluZztcbiAgICBtYXhsZW5ndGg/OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgbWlubGVuZ3RoPzogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICAgIHJvd3M/OiBudW1iZXI7XG4gICAgc3VwcG9ydGluZ1RleHQ/OiBzdHJpbmc7XG4gICAgdmFsdWU/OiBzdHJpbmc7XG4gIH07XG5cbiAgY29uc3QgcHJvcHMgPSB3aXRoRGVmYXVsdHMoZGVmaW5lUHJvcHM8UHJvcHM+KCksIHtcbiAgICBkYXRhVHJhY2s6ICcnLFxuICAgIGVycm9yOiBmYWxzZSxcbiAgICBpbnB1dElkOiB1bmRlZmluZWQsXG4gICAgbGFiZWw6IHVuZGVmaW5lZCxcbiAgICBtYXhsZW5ndGg6IHVuZGVmaW5lZCxcbiAgICBtaW5sZW5ndGg6IHVuZGVmaW5lZCxcbiAgICBuYW1lOiB1bmRlZmluZWQsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIHJvd3M6IDgsXG4gICAgc3VwcG9ydGluZ1RleHQ6IHVuZGVmaW5lZCxcbiAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICB9KTtcblxuICBjb25zdCBlcnJvciA9IHJlZihwcm9wcy5lcnJvcik7XG4gIGNvbnN0IGhhc0ZvY3VzID0gcmVmKGZhbHNlKTtcbiAgY29uc3QgaW5wdXQgPSByZWY8SFRNTElucHV0RWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBjb25zdCB2YWx1ZSA9IHJlZihwcm9wcy52YWx1ZSk7XG5cbiAgY29uc3QgZXJyb3JNZXNzYWdlID0gY29tcHV0ZWQoKCkgPT4gZ2V0RXJyb3JNZXNzYWdlKHByb3BzLmVycm9yLCBlcnJvci52YWx1ZSkpO1xuICBjb25zdCBmb3JtYXR0ZWRMYWJlbCA9IGNvbXB1dGVkKCgpID0+IChwcm9wcy5yZXF1aXJlZCA/IGAke3Byb3BzLmxhYmVsfSAqYCA6IHByb3BzLmxhYmVsKSk7XG4gIGNvbnN0IGhhc0Vycm9yID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gKHByb3BzLnJlcXVpcmVkICYmIHZhbHVlLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgIXZhbHVlLnZhbHVlKSB8fCBnZXRGaWVsZEhhc0Vycm9yKGVycm9yLnZhbHVlLCBwcm9wcy5lcnJvcilcbiAgKTtcbiAgY29uc3QgaGFzTWluaWxhYmVsID0gY29tcHV0ZWQoKCkgPT4gaGFzRm9jdXMudmFsdWUgfHwgIWlzRW1wdHkudmFsdWUpO1xuICBjb25zdCBpc0VtcHR5ID0gY29tcHV0ZWQoKCkgPT4gdmFsdWUudmFsdWUgPT09ICcnIHx8IHZhbHVlLnZhbHVlID09PSB1bmRlZmluZWQpO1xuXG4gIGNvbnN0IGhhbmRsZUZvY3VzID0gKCkgPT4ge1xuICAgIGhhc0ZvY3VzLnZhbHVlID0gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVGb2N1c091dCA9ICgpID0+IHtcbiAgICBoYXNGb2N1cy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgaWYgKCF2YWx1ZS52YWx1ZSkge1xuICAgICAgdmFsdWUudmFsdWUgPSAnJztcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlVmFsaWRhdGlvbiA9ICgpID0+IHtcbiAgICByZXR1cm4gaGFuZGxlRmllbGRWYWxpZGF0aW9uKHtcbiAgICAgIGVycm9yLFxuICAgICAgZXJyb3JGcm9tUHJvcHM6IHByb3BzLmVycm9yLFxuICAgICAgbWF4bGVuZ3RoOiBwcm9wcy5tYXhsZW5ndGgsXG4gICAgICBtaW5sZW5ndGg6IHByb3BzLm1pbmxlbmd0aCxcbiAgICAgIHJlcXVpcmVkOiBwcm9wcy5yZXF1aXJlZCxcbiAgICAgIHZhbHVlLFxuICAgIH0pO1xuICB9O1xuXG4gIHdhdGNoKFxuICAgICgpID0+IHByb3BzLnZhbHVlLFxuICAgIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcbiAgICAgIGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUgfHwgbmV3VmFsdWUgIT09IHZhbHVlLnZhbHVlKSB7XG4gICAgICAgIHZhbHVlLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICB9XG4gICAgfVxuICApO1xuXG4gIGRlZmluZUV4cG9zZSh7XG4gICAgZXJyb3IsXG4gICAgcmVxdWlyZWQ6IHByb3BzLnJlcXVpcmVkLFxuICAgIHZhbHVlLFxuICB9KTtcbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG4gIDxkaXZcbiAgICA6Y2xhc3M9XCJbJ3RpZGUtaW5wdXQtdGV4dGFyZWEnLCBDU1MuRElTUExBWS5GTEVYLCBDU1MuRkxFWC5ESVJFQ1RJT04uQ09MVU1OLCBDU1MuR0FQLlFVQVJURVIsIGhhc0Vycm9yICYmICdlcnJvciddXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgIDpjbGFzcz1cIltcbiAgICAgICAgJ3RpZGUtaW5wdXQtdGV4dGFyZWEtZmllbGQnLFxuICAgICAgICBDU1MuR0FQLkhBTEYsXG4gICAgICAgIENTUy5QT1NJVElPTi5SRUxBVElWRSxcbiAgICAgICAgQ1NTLkJPUkRFUi5SQURJVVMuSEFMRixcbiAgICAgICAgQ1NTLlBBRERJTkcuTEVGVC5PTkUsXG4gICAgICAgIENTUy5QQURESU5HLlRPUC5IQUxGLFxuICAgICAgICBDU1MuT1ZFUkZMT1cuWFkuSElEREVOLFxuICAgICAgICBDU1MuQkcuU1VSRkFDRS5ERUZBVUxULFxuICAgICAgXVwiXG4gICAgPlxuICAgICAgPGxhYmVsXG4gICAgICAgIDpjbGFzcz1cIltcbiAgICAgICAgICBoYXNNaW5pbGFiZWwgPyBbJ21pbmlsYWJlbCcsIENTUy5GT05ULlJPTEUuTEFCRUxfM10gOiBDU1MuRk9OVC5ST0xFLkxBQkVMXzEsXG4gICAgICAgICAgIWhhc0Vycm9yICYmIENTUy5GT05ULkNPTE9SLlNVUkZBQ0UuVkFSSUFOVCxcbiAgICAgICAgICBDU1MuQ1VSU09SLlRFWFQsXG4gICAgICAgICAgQ1NTLlBPSU5URVJfRVZFTlRTLk9GRixcbiAgICAgICAgXVwiXG4gICAgICAgIDpmb3I9XCJwcm9wcy5pbnB1dElkXCJcbiAgICAgICAgcmVmPVwibGFiZWxcIlxuICAgICAgICB2LWlmPVwibGFiZWxcIlxuICAgICAgPlxuICAgICAgICB7eyBmb3JtYXR0ZWRMYWJlbCB9fVxuICAgICAgPC9sYWJlbD5cblxuICAgICAgPHRleHRhcmVhXG4gICAgICAgIDpjbGFzcz1cIltDU1MuV0lEVEguRlVMTCwgQ1NTLkZPTlQuUk9MRS5CT0RZXzFdXCJcbiAgICAgICAgOmRhdGEtdHJhY2s9XCJwcm9wcy5kYXRhVHJhY2tcIlxuICAgICAgICA6bWF4bGVuZ3RoPVwicHJvcHMubWF4bGVuZ3RoXCJcbiAgICAgICAgOm1pbmxlbmd0aD1cInByb3BzLm1pbmxlbmd0aFwiXG4gICAgICAgIDpuYW1lPVwicHJvcHMubmFtZVwiXG4gICAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgICAgOnJlcXVpcmVkPVwicHJvcHMucmVxdWlyZWRcIlxuICAgICAgICA6cm93cz1cInByb3BzLnJvd3NcIlxuICAgICAgICBAY2hhbmdlPVwiaGFuZGxlVmFsaWRhdGlvblwiXG4gICAgICAgIEBmb2N1cz1cImhhbmRsZUZvY3VzXCJcbiAgICAgICAgQGZvY3Vzb3V0PVwiaGFuZGxlRm9jdXNPdXRcIlxuICAgICAgICA6aWQ9XCJwcm9wcy5pbnB1dElkXCJcbiAgICAgICAgdi1tb2RlbD1cInZhbHVlXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICA6Y2xhc3M9XCJbQ1NTLkRJU1BMQVkuRkxFWCwgQ1NTLkFYSVMyLkNFTlRFUiwgQ1NTLkdBUC5RVUFSVEVSXVwiXG4gICAgICB2LWlmPVwicHJvcHMuc3VwcG9ydGluZ1RleHQgfHwgaGFzRXJyb3JcIlxuICAgID5cbiAgICAgIDxUaWRlSWNvblxuICAgICAgICA6aWNvbj1cIklDT04uRVJST1JcIlxuICAgICAgICA6c2l6ZT1cIlNJWkUuU01BTExcIlxuICAgICAgICB2LWlmPVwiaGFzRXJyb3JcIlxuICAgICAgLz5cblxuICAgICAgPGRpdiA6Y2xhc3M9XCJbQ1NTLkZPTlQuUk9MRS5MQUJFTF8zXVwiPlxuICAgICAgICB7eyBoYXNFcnJvciA/IGVycm9yTWVzc2FnZSA6IHByb3BzLnN1cHBvcnRpbmdUZXh0IH19XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgc2NvcGVkPlxuICB0ZXh0YXJlYSB7XG4gICAgcmVzaXplOiB2ZXJ0aWNhbDtcbiAgfVxuPC9zdHlsZT5cblxuPHN0eWxlIHNjb3BlZD5cbiAgbGFiZWwge1xuICAgIGhlaWdodDogMS4xODc1cmVtO1xuICAgIHRyYW5zaXRpb246IGZvbnQtc2l6ZSB2YXIoLS10aWRlLWFuaW1hdGUpLCB0cmFuc2Zvcm0gdmFyKC0tdGlkZS1hbmltYXRlKTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXRleHRhcmVhLmVycm9yIHtcbiAgICBjb2xvcjogdmFyKC0tdGlkZS1lcnJvci1wcmltYXJ5KTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXRleHRhcmVhLmVycm9yIC50aWRlLWlucHV0LXRleHRhcmVhLWZpZWxkIHtcbiAgICBvdXRsaW5lLWNvbG9yOiB2YXIoLS10aWRlLWVycm9yLWJvcmRlcik7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGlkZS1lcnJvci1zdXJmYWNlKTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXRleHRhcmVhLmVycm9yOmZvY3VzLXdpdGhpbiAudGlkZS1pbnB1dC10ZXh0YXJlYS1maWVsZCB7XG4gICAgb3V0bGluZS1jb2xvcjogdmFyKC0tdGlkZS1lcnJvci1ib3JkZXIpO1xuICB9XG5cbiAgLnRpZGUtaW5wdXQtdGV4dGFyZWE6Zm9jdXMtd2l0aGluIC50aWRlLWlucHV0LXRleHRhcmVhLWZpZWxkIHtcbiAgICAtLXRpZGUtaW5wdXQtb3V0bGluZS13aWR0aDogdmFyKC0tdGlkZS1ib3JkZXItd2lkdGgtMik7XG4gICAgb3V0bGluZS1jb2xvcjogdmFyKC0tdGlkZS1zdXJmYWNlLWJvcmRlci1oaWdoKTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXRleHRhcmVhIHRleHRhcmVhIHtcbiAgICBvdXRsaW5lOiBub25lO1xuICB9XG5cbiAgLnRpZGUtaW5wdXQtdGV4dGFyZWEtZmllbGQge1xuICAgIC0tdGlkZS1pbnB1dC1vdXRsaW5lLXdpZHRoOiB2YXIoLS10aWRlLWJvcmRlci13aWR0aC0xKTtcbiAgICBvdXRsaW5lOiB2YXIoLS10aWRlLWlucHV0LW91dGxpbmUtd2lkdGgpIHNvbGlkIHZhcigtLXRpZGUtYm9yZGVyKTtcbiAgICBvdXRsaW5lLW9mZnNldDogY2FsYyh2YXIoLS10aWRlLWlucHV0LW91dGxpbmUtd2lkdGgpICogLTEpO1xuICAgIGNvbG9yOiB2YXIoLS10aWRlLXN1cmZhY2UtZm9yZWdyb3VuZCk7XG4gIH1cbjwvc3R5bGU+XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSB2dWUvc29ydC1rZXlzICovXG5cbmV4cG9ydCBjb25zdCBCUkVBS1BPSU5UID0ge1xuICBTTTogJ3NtJyxcbiAgTUQ6ICdtZCcsXG4gIExHOiAnbGcnLFxuICBYTDogJ3hsJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBNRURJQSA9IHtcbiAgU006IDc2OCxcbiAgTUQ6IDk5MixcbiAgTEc6IDEyMzIsXG4gIFhMOiAxOTIwLFxufTtcblxuZXhwb3J0IHR5cGUgQnJlYWtwb2ludCA9ICh0eXBlb2YgQlJFQUtQT0lOVClba2V5b2YgdHlwZW9mIEJSRUFLUE9JTlRdO1xuZXhwb3J0IHR5cGUgTWVkaWEgPSAodHlwZW9mIE1FRElBKVtrZXlvZiB0eXBlb2YgTUVESUFdO1xuIiwiaW1wb3J0IHsgbmV4dFRpY2sgfSBmcm9tICd2dWUnO1xuXG4vKipcbiAqIERpcmVjdGx5IG1vZGlmaWVzIHRoZSBgPGJvZHk+YCBlbGVtZW50IHRvIGFwcGx5IG9yIHJlbW92ZSBzY3JvbGwgbG9jay5cbiAqIFdoZW4gYGZhbHNlYCBpcyBwcm92aWRlZCwgaXQgb25seSB1bmxvY2tzIHNjcm9sbCBpZiB0aGVyZSBhcmUgbm8gb3BlblxuICogSFRNTCBkaWFsb2cgZWxlbWVudHMuXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTY3JvbGxMb2NrID0gYXN5bmMgKGlzTG9ja2VkOiBib29sZWFuKSA9PiB7XG4gIC8vIENhbm5vdCBiZSBhcHBsaWVkIHRvIGJvZHkgdGFnIGluIG1hcmtldHBsYWNlIHJlcG8gZHVlIHRvIGRhdGEtY3NzLXNjb3BlXG4gIC8vIGNvbnN0IEJPRFlfTE9DS19DTEFTUyA9ICdib2R5LXNjcm9sbC1sb2NrJztcblxuICBjb25zdCBib2R5ID0gZG9jdW1lbnQuYm9keTtcblxuICBpZiAoaXNMb2NrZWQpIHtcbiAgICBpZiAoIWJvZHkuZGF0YXNldC5zY3JvbGxMb2NrWSkge1xuICAgICAgY29uc3Qgc2Nyb2xsWSA9IHdpbmRvdy5zY3JvbGxZO1xuXG4gICAgICBib2R5LmRhdGFzZXQuc2Nyb2xsTG9ja1kgPSBzY3JvbGxZLnRvU3RyaW5nKCk7XG4gICAgICBib2R5LnN0eWxlLnNldFByb3BlcnR5KCctLXNhdmVkLXNjcm9sbC15JywgYCR7c2Nyb2xsWX1weGApO1xuICAgICAgYm9keS5zdHlsZS5zZXRQcm9wZXJ0eSgnaW5zZXQnLCAnMCcpO1xuICAgICAgYm9keS5zdHlsZS5zZXRQcm9wZXJ0eSgnbWFyZ2luLXRvcCcsIGBjYWxjKDBweCAtIHZhcigtLXNhdmVkLXNjcm9sbC15LCAwcHgpKWApO1xuICAgICAgYm9keS5zdHlsZS5zZXRQcm9wZXJ0eSgnb3ZlcmZsb3cteScsICdzY3JvbGwnKTtcbiAgICAgIGJvZHkuc3R5bGUuc2V0UHJvcGVydHkoJ3Bvc2l0aW9uJywgJ2ZpeGVkJyk7XG5cbiAgICAgIC8vIENhbm5vdCBiZSBhcHBsaWVkIHRvIGJvZHkgdGFnIGluIG1hcmtldHBsYWNlIHJlcG8gZHVlIHRvIGRhdGEtY3NzLXNjb3BlXG4gICAgICAvLyBib2R5LmNsYXNzTGlzdC5hZGQoQk9EWV9MT0NLX0NMQVNTKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgbmV4dFRpY2soKTtcbiAgICBpZiAoIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2RpYWxvZ1tvcGVuXScpKSB7XG4gICAgICBjb25zdCBzYXZlZFNjcm9sbFkgPSBwYXJzZUludChib2R5LmRhdGFzZXQuc2Nyb2xsTG9ja1kgfHwgJzAnKTtcblxuICAgICAgLy8gQ2Fubm90IGJlIGFwcGxpZWQgdG8gYm9keSB0YWcgaW4gbWFya2V0cGxhY2UgcmVwbyBkdWUgdG8gZGF0YS1jc3Mtc2NvcGVcbiAgICAgIC8vIGJvZHkuY2xhc3NMaXN0LnJlbW92ZShCT0RZX0xPQ0tfQ0xBU1MpO1xuXG4gICAgICBib2R5LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdpbnNldCcpO1xuICAgICAgYm9keS5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnbWFyZ2luVG9wJyk7XG4gICAgICBib2R5LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdvdmVyZmxvd1knKTtcbiAgICAgIGJvZHkuc3R5bGUucmVtb3ZlUHJvcGVydHkoJ3Bvc2l0aW9uJyk7XG4gICAgICBib2R5LnN0eWxlLnJlbW92ZVByb3BlcnR5KCctLXNhdmVkLXNjcm9sbC15Jyk7XG5cbiAgICAgIHdpbmRvdy5zY3JvbGxUbyh7XG4gICAgICAgIGJlaGF2aW9yOiAnYXV0bycsXG4gICAgICAgIHRvcDogc2F2ZWRTY3JvbGxZLFxuICAgICAgfSk7XG5cbiAgICAgIGRlbGV0ZSBib2R5LmRhdGFzZXQuc2Nyb2xsTG9ja1k7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgVE9QX0xBWUVSX0lEID0gJ3RpZGVUb3BMYXllcic7XG5cbmV4cG9ydCBjb25zdCBpbml0RmF1eFRvcExheWVyID0gKCkgPT4ge1xuICBsZXQgdG9wTGF5ZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChUT1BfTEFZRVJfSUQpO1xuICBpZiAoIXRvcExheWVyKSB7XG4gICAgdG9wTGF5ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB0b3BMYXllci5pZCA9IFRPUF9MQVlFUl9JRDtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRvcExheWVyKTtcbiAgfVxuICB0b3BMYXllci5zdHlsZS5pc29sYXRpb24gPSAnaXNvbGF0ZSc7XG59O1xuIiwiPHNjcmlwdCBsYW5nPVwidHNcIiBzZXR1cD5cbiAgaW1wb3J0IHsgbmV4dFRpY2ssIG9uTW91bnRlZCwgcmVmLCB3YXRjaCB9IGZyb20gJ3Z1ZSc7XG5cbiAgaW1wb3J0IFRpZGVCdXR0b25JY29uIGZyb20gJ0AvY29tcG9uZW50cy9UaWRlQnV0dG9uSWNvbi52dWUnO1xuICBpbXBvcnQgeyBCUkVBS1BPSU5UIH0gZnJvbSAnQC90eXBlcy9CcmVha3BvaW50JztcbiAgaW1wb3J0IHsgSUNPTiB9IGZyb20gJ0AvdHlwZXMvSWNvbic7XG4gIGltcG9ydCB7IFBSSU9SSVRZIH0gZnJvbSAnQC90eXBlcy9Qcmlvcml0eSc7XG4gIGltcG9ydCB7IENTUyB9IGZyb20gJ0AvdHlwZXMvU3R5bGVzJztcbiAgaW1wb3J0IHsgc2V0U2Nyb2xsTG9jayB9IGZyb20gJ0AvdXRpbGl0aWVzL3ZpZXdwb3J0JztcblxuICBpbXBvcnQgdHlwZSB7IFJlZiB9IGZyb20gJ3Z1ZSc7XG5cbiAgdHlwZSBQcm9wcyA9IHtcbiAgICBpc0JhY2tCdXR0b24/OiBib29sZWFuO1xuICAgIGlzRGlzbWlzc2libGU/OiBib29sZWFuO1xuICAgIGlzT3BlbjogYm9vbGVhbjtcbiAgICB0aXRsZT86IHN0cmluZztcbiAgICB3aWR0aD86IHN0cmluZztcbiAgfTtcblxuICBjb25zdCBwcm9wcyA9IHdpdGhEZWZhdWx0cyhkZWZpbmVQcm9wczxQcm9wcz4oKSwge1xuICAgIGlzQmFja0J1dHRvbjogZmFsc2UsXG4gICAgaXNEaXNtaXNzaWJsZTogdHJ1ZSxcbiAgICB0aXRsZTogdW5kZWZpbmVkLFxuICAgIHdpZHRoOiB1bmRlZmluZWQsXG4gIH0pO1xuXG4gIHR5cGUgRW1pdHMgPSB7XG4gICAgKGU6ICdjbG9zZScpOiB2b2lkO1xuICAgIChlOiAnYmFjaycpOiB2b2lkO1xuICB9O1xuXG4gIGNvbnN0IGVtaXQgPSBkZWZpbmVFbWl0czxFbWl0cz4oKTtcblxuICBjb25zdCBtb2RhbENvbnRlbnQ6IFJlZjxIVE1MRGl2RWxlbWVudCB8IHVuZGVmaW5lZD4gPSByZWYoKTtcbiAgY29uc3QgbW9kYWxEaWFsb2c6IFJlZjxIVE1MRGlhbG9nRWxlbWVudCB8IHVuZGVmaW5lZD4gPSByZWYoKTtcblxuICBjb25zdCB0cmlnZ2VyTmF0aXZlRGlhbG9nT3BlbiA9ICgpID0+IHtcbiAgICBtb2RhbERpYWxvZy52YWx1ZT8uc2hvd01vZGFsKCk7XG4gIH07XG5cbiAgY29uc3QgdHJpZ2dlck5hdGl2ZURpYWxvZ0Nsb3NlID0gKCkgPT4ge1xuICAgIG1vZGFsRGlhbG9nLnZhbHVlPy5jbG9zZSgpO1xuICB9O1xuXG4gIGNvbnN0IHNjcm9sbENvbnRlbnRUb1RvcCA9ICgpID0+IHtcbiAgICBuZXh0VGljaygoKSA9PiB7XG4gICAgICBpZiAoIW1vZGFsQ29udGVudC52YWx1ZSkgcmV0dXJuO1xuICAgICAgbW9kYWxDb250ZW50LnZhbHVlLnNjcm9sbFRvcCA9IDA7XG4gICAgfSk7XG4gIH07XG5cbiAgd2F0Y2goXG4gICAgKCkgPT4gcHJvcHMuaXNPcGVuLFxuICAgIChuZXdWYWx1ZSkgPT4ge1xuICAgICAgaWYgKCFtb2RhbERpYWxvZy52YWx1ZSkgcmV0dXJuO1xuICAgICAgaWYgKG5ld1ZhbHVlKSB7XG4gICAgICAgIHRyaWdnZXJOYXRpdmVEaWFsb2dPcGVuKCk7XG4gICAgICAgIHNjcm9sbENvbnRlbnRUb1RvcCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJpZ2dlck5hdGl2ZURpYWxvZ0Nsb3NlKCk7XG4gICAgICB9XG4gICAgICBzZXRTY3JvbGxMb2NrKG5ld1ZhbHVlKTtcbiAgICB9XG4gICk7XG5cbiAgb25Nb3VudGVkKCgpID0+IHtcbiAgICBpZiAocHJvcHMuaXNPcGVuKSB7XG4gICAgICB0cmlnZ2VyTmF0aXZlRGlhbG9nT3BlbigpO1xuICAgIH1cbiAgfSk7XG48L3NjcmlwdD5cblxuPHRlbXBsYXRlPlxuICA8ZGlhbG9nXG4gICAgOmNsYXNzPVwiWyd0aWRlLW1vZGFsJywgQ1NTLkJHLklOSVRJQUwsIENTUy5IRUlHSFQuRlVMTCwgQ1NTLldJRFRILkZVTEwsIENTUy5PVkVSRkxPVy5YWS5ISURERU5dXCJcbiAgICByZWY9XCJtb2RhbERpYWxvZ1wiXG4gICAgOnN0eWxlPVwieyAnLS1tb2RhbC13aWR0aCc6IHByb3BzLndpZHRoIH1cIlxuICAgIEBjbGljay5zZWxmPVwiZW1pdCgnY2xvc2UnKVwiXG4gICAgQGNsb3NlPVwiZW1pdCgnY2xvc2UnKVwiXG4gID5cbiAgICA8ZGl2XG4gICAgICA6Y2xhc3M9XCJbXG4gICAgICAgICd0aWRlLW1vZGFsLWJvZHknLFxuICAgICAgICBDU1MuQkcuU1VSRkFDRS5ERUZBVUxULFxuICAgICAgICBDU1MuQk9SREVSLlJBRElVUy5PTkUsXG4gICAgICAgIENTUy5ESVNQTEFZLkZMRVgsXG4gICAgICAgIENTUy5GTEVYLkRJUkVDVElPTi5DT0xVTU4sXG4gICAgICAgIENTUy5PVkVSRkxPVy5YWS5ISURERU4sXG4gICAgICAgIENTUy5QT1NJVElPTi5BQlNPTFVURSxcbiAgICAgICAgQ1NTLlBPU0lUSU9OSU5HLkJPVFRPTSxcbiAgICAgICAgQ1NTLlNIQURPVy5UT1AsXG4gICAgICAgIENTUy5XSURUSC5GVUxMLFxuICAgICAgICBDU1MuV0lEVEguTUFYX0ZVTEwsXG4gICAgICAgIENTUy53aXRoQnJlYWtwb2ludChbQ1NTLlNIQURPVy5CT1RUT01dLCBCUkVBS1BPSU5ULlNNKSxcbiAgICAgIF1cIlxuICAgID5cbiAgICAgIDxoZWFkZXJcbiAgICAgICAgOmNsYXNzPVwiW1xuICAgICAgICAgICd0aWRlLW1vZGFsLWhlYWRlcicsXG4gICAgICAgICAgQ1NTLkRJU1BMQVkuRkxFWCxcbiAgICAgICAgICBDU1MuQVhJUzIuQ0VOVEVSLFxuICAgICAgICAgIENTUy5HQVAuSEFMRixcbiAgICAgICAgICBDU1MuUEFERElORy5ZLk9ORSxcbiAgICAgICAgICBDU1MuQk9SREVSLkJPVFRPTS5PTkUsXG4gICAgICAgICAgQ1NTLkJPUkRFUi5DT0xPUi5MT1csXG4gICAgICAgIF1cIlxuICAgICAgPlxuICAgICAgICA8VGlkZUJ1dHRvbkljb25cbiAgICAgICAgICA6aWNvbj1cIklDT04uQ0hFVlJPTl9MRUZUXCJcbiAgICAgICAgICA6cHJpb3JpdHk9XCJQUklPUklUWS5RVUFURVJOQVJZXCJcbiAgICAgICAgICBAY2xpY2s9XCJlbWl0KCdiYWNrJylcIlxuICAgICAgICAgIHRpdGxlPVwiQmFja1wiXG4gICAgICAgICAgdi1pZj1cImlzQmFja0J1dHRvblwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIDpjbGFzcz1cIltDU1MuRk9OVC5ST0xFLkhFQURMSU5FXzJdXCJcbiAgICAgICAgICB2LXRleHQ9XCJ0aXRsZVwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPFRpZGVCdXR0b25JY29uXG4gICAgICAgICAgOmNsYXNzPVwiW0NTUy5GTEVYLkdST1cuT0ZGLCBDU1MuRkxFWC5TSFJJTksuT0ZGLCBDU1MuTUFSR0lOLkxFRlQuQVVUT11cIlxuICAgICAgICAgIDppY29uPVwiSUNPTi5DTE9TRVwiXG4gICAgICAgICAgOnByaW9yaXR5PVwiUFJJT1JJVFkuUVVBVEVSTkFSWVwiXG4gICAgICAgICAgQGNsaWNrPVwidHJpZ2dlck5hdGl2ZURpYWxvZ0Nsb3NlXCJcbiAgICAgICAgICB2LWlmPVwiaXNEaXNtaXNzaWJsZVwiXG4gICAgICAgIC8+XG4gICAgICA8L2hlYWRlcj5cblxuICAgICAgPGRpdlxuICAgICAgICA6Y2xhc3M9XCJbXG4gICAgICAgICAgJ3RpZGUtbW9kYWwtY29udGVudCcsXG4gICAgICAgICAgQ1NTLkRJU1BMQVkuR1JJRCxcbiAgICAgICAgICBDU1MuT1ZFUkZMT1cuWS5BVVRPLFxuICAgICAgICAgIENTUy5PVkVSRkxPVy5YLkhJRERFTixcbiAgICAgICAgICBDU1MuV0lEVEguRlVMTCxcbiAgICAgICAgICBDU1MuUEFERElORy5ZLlRXTyxcbiAgICAgICAgXVwiXG4gICAgICAgIHJlZj1cIm1vZGFsQ29udGVudFwiXG4gICAgICA+XG4gICAgICAgIDxzbG90IC8+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGZvb3RlclxuICAgICAgICA6Y2xhc3M9XCJbJ3RpZGUtbW9kYWwtZm9vdGVyJywgQ1NTLkFYSVMxLkVORCwgQ1NTLkRJU1BMQVkuRkxFWCwgQ1NTLkdBUC5UV08sIENTUy5QQURESU5HLlkuT05FLCBDU1MuU0hBRE9XLlRPUF1cIlxuICAgICAgICB2LWlmPVwiJHNsb3RzLmZvb3RlclwiXG4gICAgICA+XG4gICAgICAgIDxzbG90IG5hbWU9XCJmb290ZXJcIiAvPlxuICAgICAgPC9mb290ZXI+XG4gICAgPC9kaXY+XG4gIDwvZGlhbG9nPlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIHNjb3BlZD5cbiAgLnRpZGUtbW9kYWwge1xuICAgIC0tbW9kYWwtcGFkZGluZy14OiAyMHB4O1xuICAgIG1heC13aWR0aDogdW5zZXQ7XG4gICAgbWF4LWhlaWdodDogdW5zZXQ7XG4gICAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcbiAgICBkaXNwbGF5OiBub25lO1xuICAgIHRyYW5zaXRpb246IGFsbCB2YXIoLS10aWRlLWFuaW1hdGUpIGFsbG93LWRpc2NyZXRlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTtcbiAgfVxuICAudGlkZS1tb2RhbFtvcGVuXSB7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCUpO1xuICB9XG4gIC50aWRlLW1vZGFsOjpiYWNrZHJvcCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXRpZGUtYW5pbWF0ZSkgYWxsb3ctZGlzY3JldGU7XG4gICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDBweCk7XG4gIH1cbiAgLnRpZGUtbW9kYWxbb3Blbl06OmJhY2tkcm9wIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS10aWRlLXRyYW5zcGFyZW50LTQwMCk7XG4gICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDRweCk7XG4gIH1cbiAgQHN0YXJ0aW5nLXN0eWxlIHtcbiAgICAudGlkZS1tb2RhbFtvcGVuXSB7XG4gICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpO1xuICAgIH1cbiAgICAudGlkZS1tb2RhbFtvcGVuXTo6YmFja2Ryb3Age1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNHB4KTtcbiAgICB9XG4gIH1cbiAgLnRpZGUtbW9kYWwtYm9keSB7XG4gICAgd2lkdGg6IHZhcigtLW1vZGFsLXdpZHRoLCA1NzZweCk7XG4gICAgbWF4LWhlaWdodDogY2FsYygxMDAlIC0gdmFyKC0tdGlkZS1zcGFjaW5nLTIpKTtcbiAgfVxuXG4gIC50aWRlLW1vZGFsLWhlYWRlcixcbiAgLnRpZGUtbW9kYWwtZm9vdGVyIHtcbiAgICBwYWRkaW5nLWlubGluZTogdmFyKC0tbW9kYWwtcGFkZGluZy14KTtcbiAgfVxuICAudGlkZS1tb2RhbC1jb250ZW50IHtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHZhcigtLW1vZGFsLXBhZGRpbmcteCkgMWZyIHZhcigtLW1vZGFsLXBhZGRpbmcteCk7XG4gIH1cbiAgOndoZXJlKC50aWRlLW1vZGFsLWNvbnRlbnQpOmRlZXAoPiA6d2hlcmUoKikpIHtcbiAgICBncmlkLWNvbHVtbjogMjtcbiAgfVxuXG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgIC50aWRlLW1vZGFsLWJvZHkge1xuICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xuICAgIH1cbiAgfVxuICBAbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgICAudGlkZS1tb2RhbCB7XG4gICAgICAtLW1vZGFsLXBhZGRpbmcteDogdmFyKC0tdGlkZS1zcGFjaW5nLTIpO1xuICAgIH1cbiAgICAudGlkZS1tb2RhbC1ib2R5IHtcbiAgICAgIG1heC1oZWlnaHQ6IDg1JTtcbiAgICAgIGJvdHRvbTogaW5pdGlhbDtcbiAgICB9XG4gIH1cbjwvc3R5bGU+XG4iLCI8c2NyaXB0IGxhbmc9XCJ0c1wiIHNldHVwPlxuICBpbXBvcnQgeyBjb21wdXRlZCwgcmVmIH0gZnJvbSAndnVlJztcblxuICBpbXBvcnQgVGlkZUJ1dHRvbkljb24gZnJvbSAnQC9jb21wb25lbnRzL1RpZGVCdXR0b25JY29uLnZ1ZSc7XG4gIGltcG9ydCBUaWRlQnV0dG9uUGFnaW5hdGlvbiBmcm9tICdAL2NvbXBvbmVudHMvVGlkZUJ1dHRvblBhZ2luYXRpb24udnVlJztcbiAgaW1wb3J0IHsgSUNPTiB9IGZyb20gJ0AvdHlwZXMvSWNvbic7XG4gIGltcG9ydCB7IFBSSU9SSVRZIH0gZnJvbSAnQC90eXBlcy9Qcmlvcml0eSc7XG4gIGltcG9ydCB7IENTUyB9IGZyb20gJ0AvdHlwZXMvU3R5bGVzJztcblxuICB0eXBlIFByb3BzID0ge1xuICAgIHBhZ2VDdXJyZW50PzogbnVtYmVyO1xuICAgIHBhZ2VUb3RhbD86IG51bWJlcjtcbiAgfTtcblxuICBjb25zdCBwcm9wcyA9IHdpdGhEZWZhdWx0cyhkZWZpbmVQcm9wczxQcm9wcz4oKSwge1xuICAgIHBhZ2VDdXJyZW50OiAxLFxuICAgIHBhZ2VUb3RhbDogMSxcbiAgfSk7XG5cbiAgY29uc3QgZW1pdCA9IGRlZmluZUVtaXRzKFsnY2hhbmdlJ10pO1xuXG4gIGNvbnN0IHBhZ2VDdXJyZW50ID0gcmVmKHByb3BzLnBhZ2VDdXJyZW50KTtcblxuICBjb25zdCBwYWdpbmF0aW9uQnV0dG9ucyA9IGNvbXB1dGVkKCgpID0+IG5ldyBBcnJheShwcm9wcy5wYWdlVG90YWwpLmZpbGwoJycpLm1hcCgoZW1wdHksIGluZGV4KSA9PiBpbmRleCArIDEpKTtcblxuICBjb25zdCBoYW5kbGVDbGljayA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgcGFnZUN1cnJlbnQudmFsdWUgPSBpbmRleDtcblxuICAgIGVtaXQoJ2NoYW5nZScsIGV2ZW50LCBpbmRleCk7XG4gIH07XG48L3NjcmlwdD5cblxuPHRlbXBsYXRlPlxuICA8c2VjdGlvblxuICAgIDpjbGFzcz1cIlsndGlkZS1wYWdpbmF0aW9uJywgQ1NTLkRJU1BMQVkuRkxFWCwgQ1NTLkFYSVMxLkNFTlRFUiwgQ1NTLkFYSVMyLkNFTlRFUiwgQ1NTLkdBUC5RVUFSVEVSLCBDU1MuV0lEVEguRlVMTF1cIlxuICA+XG4gICAgPFRpZGVCdXR0b25JY29uXG4gICAgICA6ZGlzYWJsZWQ9XCJwYWdlQ3VycmVudCA9PT0gMVwiXG4gICAgICA6aWNvbj1cIklDT04uQ0hFVlJPTl9MRUZUXCJcbiAgICAgIDpwcmlvcml0eT1cIlBSSU9SSVRZLlFVQVRFUk5BUllcIlxuICAgICAgQGNsaWNrPVwiaGFuZGxlQ2xpY2socGFnZUN1cnJlbnQgLSAxKVwiXG4gICAgLz5cblxuICAgIDx1bCA6Y2xhc3M9XCJbQ1NTLkRJU1BMQVkuRkxFWCwgQ1NTLkFYSVMyLkNFTlRFUiwgQ1NTLkdBUC5RVUFSVEVSLCBDU1MuTElTVF9CVUxMRVRTLk9GRl1cIj5cbiAgICAgIDxsaVxuICAgICAgICA6a2V5PVwicGFnaW5hdGlvbkJ1dHRvblwiXG4gICAgICAgIHYtZm9yPVwicGFnaW5hdGlvbkJ1dHRvbiBpbiBwYWdpbmF0aW9uQnV0dG9uc1wiXG4gICAgICA+XG4gICAgICAgIDxUaWRlQnV0dG9uUGFnaW5hdGlvblxuICAgICAgICAgIDpkaXNhYmxlZD1cInBhZ2VDdXJyZW50ID09PSBwYWdpbmF0aW9uQnV0dG9uXCJcbiAgICAgICAgICA6bGFiZWw9XCJwYWdpbmF0aW9uQnV0dG9uXCJcbiAgICAgICAgICA6cHJpb3JpdHk9XCJQUklPUklUWS5RVUFURVJOQVJZXCJcbiAgICAgICAgICBAY2xpY2s9XCJoYW5kbGVDbGljayhwYWdpbmF0aW9uQnV0dG9uKVwiXG4gICAgICAgIC8+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG5cbiAgICA8VGlkZUJ1dHRvbkljb25cbiAgICAgIDpkaXNhYmxlZD1cInBhZ2VDdXJyZW50ID09PSBwYWdpbmF0aW9uQnV0dG9uc1twYWdpbmF0aW9uQnV0dG9ucy5sZW5ndGggLSAxXVwiXG4gICAgICA6aWNvbj1cIklDT04uQ0hFVlJPTl9SSUdIVFwiXG4gICAgICA6cHJpb3JpdHk9XCJQUklPUklUWS5RVUFURVJOQVJZXCJcbiAgICAgIEBjbGljaz1cImhhbmRsZUNsaWNrKHBhZ2VDdXJyZW50ICsgMSlcIlxuICAgIC8+XG4gIDwvc2VjdGlvbj5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBzY29wZWQ+PC9zdHlsZT5cbiIsIi8qKlxuICogQ3VzdG9tIHBvc2l0aW9uaW5nIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3ZpcnR1YWwtZWxlbWVudHNcbiAqL1xuXG5jb25zdCBzaWRlcyA9IFsndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0J107XG5jb25zdCBhbGlnbm1lbnRzID0gWydzdGFydCcsICdlbmQnXTtcbmNvbnN0IHBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovc2lkZXMucmVkdWNlKChhY2MsIHNpZGUpID0+IGFjYy5jb25jYXQoc2lkZSwgc2lkZSArIFwiLVwiICsgYWxpZ25tZW50c1swXSwgc2lkZSArIFwiLVwiICsgYWxpZ25tZW50c1sxXSksIFtdKTtcbmNvbnN0IG1pbiA9IE1hdGgubWluO1xuY29uc3QgbWF4ID0gTWF0aC5tYXg7XG5jb25zdCByb3VuZCA9IE1hdGgucm91bmQ7XG5jb25zdCBmbG9vciA9IE1hdGguZmxvb3I7XG5jb25zdCBjcmVhdGVDb29yZHMgPSB2ID0+ICh7XG4gIHg6IHYsXG4gIHk6IHZcbn0pO1xuY29uc3Qgb3Bwb3NpdGVTaWRlTWFwID0ge1xuICBsZWZ0OiAncmlnaHQnLFxuICByaWdodDogJ2xlZnQnLFxuICBib3R0b206ICd0b3AnLFxuICB0b3A6ICdib3R0b20nXG59O1xuY29uc3Qgb3Bwb3NpdGVBbGlnbm1lbnRNYXAgPSB7XG4gIHN0YXJ0OiAnZW5kJyxcbiAgZW5kOiAnc3RhcnQnXG59O1xuZnVuY3Rpb24gY2xhbXAoc3RhcnQsIHZhbHVlLCBlbmQpIHtcbiAgcmV0dXJuIG1heChzdGFydCwgbWluKHZhbHVlLCBlbmQpKTtcbn1cbmZ1bmN0aW9uIGV2YWx1YXRlKHZhbHVlLCBwYXJhbSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nID8gdmFsdWUocGFyYW0pIDogdmFsdWU7XG59XG5mdW5jdGlvbiBnZXRTaWRlKHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG59XG5mdW5jdGlvbiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVsxXTtcbn1cbmZ1bmN0aW9uIGdldE9wcG9zaXRlQXhpcyhheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneCcgPyAneScgOiAneCc7XG59XG5mdW5jdGlvbiBnZXRBeGlzTGVuZ3RoKGF4aXMpIHtcbiAgcmV0dXJuIGF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbn1cbmZ1bmN0aW9uIGdldFNpZGVBeGlzKHBsYWNlbWVudCkge1xuICByZXR1cm4gWyd0b3AnLCAnYm90dG9tJ10uaW5jbHVkZXMoZ2V0U2lkZShwbGFjZW1lbnQpKSA/ICd5JyA6ICd4Jztcbn1cbmZ1bmN0aW9uIGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KSB7XG4gIHJldHVybiBnZXRPcHBvc2l0ZUF4aXMoZ2V0U2lkZUF4aXMocGxhY2VtZW50KSk7XG59XG5mdW5jdGlvbiBnZXRBbGlnbm1lbnRTaWRlcyhwbGFjZW1lbnQsIHJlY3RzLCBydGwpIHtcbiAgaWYgKHJ0bCA9PT0gdm9pZCAwKSB7XG4gICAgcnRsID0gZmFsc2U7XG4gIH1cbiAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCk7XG4gIGNvbnN0IGFsaWdubWVudEF4aXMgPSBnZXRBbGlnbm1lbnRBeGlzKHBsYWNlbWVudCk7XG4gIGNvbnN0IGxlbmd0aCA9IGdldEF4aXNMZW5ndGgoYWxpZ25tZW50QXhpcyk7XG4gIGxldCBtYWluQWxpZ25tZW50U2lkZSA9IGFsaWdubWVudEF4aXMgPT09ICd4JyA/IGFsaWdubWVudCA9PT0gKHJ0bCA/ICdlbmQnIDogJ3N0YXJ0JykgPyAncmlnaHQnIDogJ2xlZnQnIDogYWxpZ25tZW50ID09PSAnc3RhcnQnID8gJ2JvdHRvbScgOiAndG9wJztcbiAgaWYgKHJlY3RzLnJlZmVyZW5jZVtsZW5ndGhdID4gcmVjdHMuZmxvYXRpbmdbbGVuZ3RoXSkge1xuICAgIG1haW5BbGlnbm1lbnRTaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpbkFsaWdubWVudFNpZGUpO1xuICB9XG4gIHJldHVybiBbbWFpbkFsaWdubWVudFNpZGUsIGdldE9wcG9zaXRlUGxhY2VtZW50KG1haW5BbGlnbm1lbnRTaWRlKV07XG59XG5mdW5jdGlvbiBnZXRFeHBhbmRlZFBsYWNlbWVudHMocGxhY2VtZW50KSB7XG4gIGNvbnN0IG9wcG9zaXRlUGxhY2VtZW50ID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgcmV0dXJuIFtnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChwbGFjZW1lbnQpLCBvcHBvc2l0ZVBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQob3Bwb3NpdGVQbGFjZW1lbnQpXTtcbn1cbmZ1bmN0aW9uIGdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL3N0YXJ0fGVuZC9nLCBhbGlnbm1lbnQgPT4gb3Bwb3NpdGVBbGlnbm1lbnRNYXBbYWxpZ25tZW50XSk7XG59XG5mdW5jdGlvbiBnZXRTaWRlTGlzdChzaWRlLCBpc1N0YXJ0LCBydGwpIHtcbiAgY29uc3QgbHIgPSBbJ2xlZnQnLCAncmlnaHQnXTtcbiAgY29uc3QgcmwgPSBbJ3JpZ2h0JywgJ2xlZnQnXTtcbiAgY29uc3QgdGIgPSBbJ3RvcCcsICdib3R0b20nXTtcbiAgY29uc3QgYnQgPSBbJ2JvdHRvbScsICd0b3AnXTtcbiAgc3dpdGNoIChzaWRlKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgaWYgKHJ0bCkgcmV0dXJuIGlzU3RhcnQgPyBybCA6IGxyO1xuICAgICAgcmV0dXJuIGlzU3RhcnQgPyBsciA6IHJsO1xuICAgIGNhc2UgJ2xlZnQnOlxuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIHJldHVybiBpc1N0YXJ0ID8gdGIgOiBidDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFtdO1xuICB9XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzKHBsYWNlbWVudCwgZmxpcEFsaWdubWVudCwgZGlyZWN0aW9uLCBydGwpIHtcbiAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCk7XG4gIGxldCBsaXN0ID0gZ2V0U2lkZUxpc3QoZ2V0U2lkZShwbGFjZW1lbnQpLCBkaXJlY3Rpb24gPT09ICdzdGFydCcsIHJ0bCk7XG4gIGlmIChhbGlnbm1lbnQpIHtcbiAgICBsaXN0ID0gbGlzdC5tYXAoc2lkZSA9PiBzaWRlICsgXCItXCIgKyBhbGlnbm1lbnQpO1xuICAgIGlmIChmbGlwQWxpZ25tZW50KSB7XG4gICAgICBsaXN0ID0gbGlzdC5jb25jYXQobGlzdC5tYXAoZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxpc3Q7XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZywgc2lkZSA9PiBvcHBvc2l0ZVNpZGVNYXBbc2lkZV0pO1xufVxuZnVuY3Rpb24gZXhwYW5kUGFkZGluZ09iamVjdChwYWRkaW5nKSB7XG4gIHJldHVybiB7XG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBsZWZ0OiAwLFxuICAgIC4uLnBhZGRpbmdcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFBhZGRpbmdPYmplY3QocGFkZGluZykge1xuICByZXR1cm4gdHlwZW9mIHBhZGRpbmcgIT09ICdudW1iZXInID8gZXhwYW5kUGFkZGluZ09iamVjdChwYWRkaW5nKSA6IHtcbiAgICB0b3A6IHBhZGRpbmcsXG4gICAgcmlnaHQ6IHBhZGRpbmcsXG4gICAgYm90dG9tOiBwYWRkaW5nLFxuICAgIGxlZnQ6IHBhZGRpbmdcbiAgfTtcbn1cbmZ1bmN0aW9uIHJlY3RUb0NsaWVudFJlY3QocmVjdCkge1xuICBjb25zdCB7XG4gICAgeCxcbiAgICB5LFxuICAgIHdpZHRoLFxuICAgIGhlaWdodFxuICB9ID0gcmVjdDtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgdG9wOiB5LFxuICAgIGxlZnQ6IHgsXG4gICAgcmlnaHQ6IHggKyB3aWR0aCxcbiAgICBib3R0b206IHkgKyBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmV4cG9ydCB7IGFsaWdubWVudHMsIGNsYW1wLCBjcmVhdGVDb29yZHMsIGV2YWx1YXRlLCBleHBhbmRQYWRkaW5nT2JqZWN0LCBmbG9vciwgZ2V0QWxpZ25tZW50LCBnZXRBbGlnbm1lbnRBeGlzLCBnZXRBbGlnbm1lbnRTaWRlcywgZ2V0QXhpc0xlbmd0aCwgZ2V0RXhwYW5kZWRQbGFjZW1lbnRzLCBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVBeGlzLCBnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzLCBnZXRPcHBvc2l0ZVBsYWNlbWVudCwgZ2V0UGFkZGluZ09iamVjdCwgZ2V0U2lkZSwgZ2V0U2lkZUF4aXMsIG1heCwgbWluLCBwbGFjZW1lbnRzLCByZWN0VG9DbGllbnRSZWN0LCByb3VuZCwgc2lkZXMgfTtcbiIsImltcG9ydCB7IGdldFNpZGVBeGlzLCBnZXRBbGlnbm1lbnRBeGlzLCBnZXRBeGlzTGVuZ3RoLCBnZXRTaWRlLCBnZXRBbGlnbm1lbnQsIGV2YWx1YXRlLCBnZXRQYWRkaW5nT2JqZWN0LCByZWN0VG9DbGllbnRSZWN0LCBtaW4sIGNsYW1wLCBwbGFjZW1lbnRzLCBnZXRBbGlnbm1lbnRTaWRlcywgZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQsIGdldE9wcG9zaXRlUGxhY2VtZW50LCBnZXRFeHBhbmRlZFBsYWNlbWVudHMsIGdldE9wcG9zaXRlQXhpc1BsYWNlbWVudHMsIHNpZGVzLCBtYXgsIGdldE9wcG9zaXRlQXhpcyB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscyc7XG5leHBvcnQgeyByZWN0VG9DbGllbnRSZWN0IH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzJztcblxuZnVuY3Rpb24gY29tcHV0ZUNvb3Jkc0Zyb21QbGFjZW1lbnQoX3JlZiwgcGxhY2VtZW50LCBydGwpIHtcbiAgbGV0IHtcbiAgICByZWZlcmVuY2UsXG4gICAgZmxvYXRpbmdcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IHNpZGVBeGlzID0gZ2V0U2lkZUF4aXMocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25tZW50QXhpcyA9IGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25MZW5ndGggPSBnZXRBeGlzTGVuZ3RoKGFsaWdubWVudEF4aXMpO1xuICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xuICBjb25zdCBpc1ZlcnRpY2FsID0gc2lkZUF4aXMgPT09ICd5JztcbiAgY29uc3QgY29tbW9uWCA9IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoIC8gMiAtIGZsb2F0aW5nLndpZHRoIC8gMjtcbiAgY29uc3QgY29tbW9uWSA9IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodCAvIDIgLSBmbG9hdGluZy5oZWlnaHQgLyAyO1xuICBjb25zdCBjb21tb25BbGlnbiA9IHJlZmVyZW5jZVthbGlnbkxlbmd0aF0gLyAyIC0gZmxvYXRpbmdbYWxpZ25MZW5ndGhdIC8gMjtcbiAgbGV0IGNvb3JkcztcbiAgc3dpdGNoIChzaWRlKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgLSBmbG9hdGluZy5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdyaWdodCc6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbGVmdCc6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54IC0gZmxvYXRpbmcud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnlcbiAgICAgIH07XG4gIH1cbiAgc3dpdGNoIChnZXRBbGlnbm1lbnQocGxhY2VtZW50KSkge1xuICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgIGNvb3Jkc1thbGlnbm1lbnRBeGlzXSAtPSBjb21tb25BbGlnbiAqIChydGwgJiYgaXNWZXJ0aWNhbCA/IC0xIDogMSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdlbmQnOlxuICAgICAgY29vcmRzW2FsaWdubWVudEF4aXNdICs9IGNvbW1vbkFsaWduICogKHJ0bCAmJiBpc1ZlcnRpY2FsID8gLTEgOiAxKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiBjb29yZHM7XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIHRoYXQgd2lsbCBwbGFjZSB0aGUgZmxvYXRpbmcgZWxlbWVudFxuICogbmV4dCB0byBhIGdpdmVuIHJlZmVyZW5jZSBlbGVtZW50LlxuICpcbiAqIFRoaXMgZXhwb3J0IGRvZXMgbm90IGhhdmUgYW55IGBwbGF0Zm9ybWAgaW50ZXJmYWNlIGxvZ2ljLiBZb3Ugd2lsbCBuZWVkIHRvXG4gKiB3cml0ZSBvbmUgZm9yIHRoZSBwbGF0Zm9ybSB5b3UgYXJlIHVzaW5nIEZsb2F0aW5nIFVJIHdpdGguXG4gKi9cbmNvbnN0IGNvbXB1dGVQb3NpdGlvbiA9IGFzeW5jIChyZWZlcmVuY2UsIGZsb2F0aW5nLCBjb25maWcpID0+IHtcbiAgY29uc3Qge1xuICAgIHBsYWNlbWVudCA9ICdib3R0b20nLFxuICAgIHN0cmF0ZWd5ID0gJ2Fic29sdXRlJyxcbiAgICBtaWRkbGV3YXJlID0gW10sXG4gICAgcGxhdGZvcm1cbiAgfSA9IGNvbmZpZztcbiAgY29uc3QgdmFsaWRNaWRkbGV3YXJlID0gbWlkZGxld2FyZS5maWx0ZXIoQm9vbGVhbik7XG4gIGNvbnN0IHJ0bCA9IGF3YWl0IChwbGF0Zm9ybS5pc1JUTCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNSVEwoZmxvYXRpbmcpKTtcbiAgbGV0IHJlY3RzID0gYXdhaXQgcGxhdGZvcm0uZ2V0RWxlbWVudFJlY3RzKHtcbiAgICByZWZlcmVuY2UsXG4gICAgZmxvYXRpbmcsXG4gICAgc3RyYXRlZ3lcbiAgfSk7XG4gIGxldCB7XG4gICAgeCxcbiAgICB5XG4gIH0gPSBjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudChyZWN0cywgcGxhY2VtZW50LCBydGwpO1xuICBsZXQgc3RhdGVmdWxQbGFjZW1lbnQgPSBwbGFjZW1lbnQ7XG4gIGxldCBtaWRkbGV3YXJlRGF0YSA9IHt9O1xuICBsZXQgcmVzZXRDb3VudCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsaWRNaWRkbGV3YXJlLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qge1xuICAgICAgbmFtZSxcbiAgICAgIGZuXG4gICAgfSA9IHZhbGlkTWlkZGxld2FyZVtpXTtcbiAgICBjb25zdCB7XG4gICAgICB4OiBuZXh0WCxcbiAgICAgIHk6IG5leHRZLFxuICAgICAgZGF0YSxcbiAgICAgIHJlc2V0XG4gICAgfSA9IGF3YWl0IGZuKHtcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgaW5pdGlhbFBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgcGxhY2VtZW50OiBzdGF0ZWZ1bFBsYWNlbWVudCxcbiAgICAgIHN0cmF0ZWd5LFxuICAgICAgbWlkZGxld2FyZURhdGEsXG4gICAgICByZWN0cyxcbiAgICAgIHBsYXRmb3JtLFxuICAgICAgZWxlbWVudHM6IHtcbiAgICAgICAgcmVmZXJlbmNlLFxuICAgICAgICBmbG9hdGluZ1xuICAgICAgfVxuICAgIH0pO1xuICAgIHggPSBuZXh0WCAhPSBudWxsID8gbmV4dFggOiB4O1xuICAgIHkgPSBuZXh0WSAhPSBudWxsID8gbmV4dFkgOiB5O1xuICAgIG1pZGRsZXdhcmVEYXRhID0ge1xuICAgICAgLi4ubWlkZGxld2FyZURhdGEsXG4gICAgICBbbmFtZV06IHtcbiAgICAgICAgLi4ubWlkZGxld2FyZURhdGFbbmFtZV0sXG4gICAgICAgIC4uLmRhdGFcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChyZXNldCAmJiByZXNldENvdW50IDw9IDUwKSB7XG4gICAgICByZXNldENvdW50Kys7XG4gICAgICBpZiAodHlwZW9mIHJlc2V0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAocmVzZXQucGxhY2VtZW50KSB7XG4gICAgICAgICAgc3RhdGVmdWxQbGFjZW1lbnQgPSByZXNldC5wbGFjZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc2V0LnJlY3RzKSB7XG4gICAgICAgICAgcmVjdHMgPSByZXNldC5yZWN0cyA9PT0gdHJ1ZSA/IGF3YWl0IHBsYXRmb3JtLmdldEVsZW1lbnRSZWN0cyh7XG4gICAgICAgICAgICByZWZlcmVuY2UsXG4gICAgICAgICAgICBmbG9hdGluZyxcbiAgICAgICAgICAgIHN0cmF0ZWd5XG4gICAgICAgICAgfSkgOiByZXNldC5yZWN0cztcbiAgICAgICAgfVxuICAgICAgICAoe1xuICAgICAgICAgIHgsXG4gICAgICAgICAgeVxuICAgICAgICB9ID0gY29tcHV0ZUNvb3Jkc0Zyb21QbGFjZW1lbnQocmVjdHMsIHN0YXRlZnVsUGxhY2VtZW50LCBydGwpKTtcbiAgICAgIH1cbiAgICAgIGkgPSAtMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHksXG4gICAgcGxhY2VtZW50OiBzdGF0ZWZ1bFBsYWNlbWVudCxcbiAgICBzdHJhdGVneSxcbiAgICBtaWRkbGV3YXJlRGF0YVxuICB9O1xufTtcblxuLyoqXG4gKiBSZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBvZiBvdmVyZmxvdyBzaWRlIG9mZnNldHMgdGhhdCBkZXRlcm1pbmUgaG93IG11Y2ggdGhlXG4gKiBlbGVtZW50IGlzIG92ZXJmbG93aW5nIGEgZ2l2ZW4gY2xpcHBpbmcgYm91bmRhcnkgb24gZWFjaCBzaWRlLlxuICogLSBwb3NpdGl2ZSA9IG92ZXJmbG93aW5nIHRoZSBib3VuZGFyeSBieSB0aGF0IG51bWJlciBvZiBwaXhlbHNcbiAqIC0gbmVnYXRpdmUgPSBob3cgbWFueSBwaXhlbHMgbGVmdCBiZWZvcmUgaXQgd2lsbCBvdmVyZmxvd1xuICogLSAwID0gbGllcyBmbHVzaCB3aXRoIHRoZSBib3VuZGFyeVxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2RldGVjdE92ZXJmbG93XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRldGVjdE92ZXJmbG93KHN0YXRlLCBvcHRpb25zKSB7XG4gIHZhciBfYXdhaXQkcGxhdGZvcm0kaXNFbGU7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgY29uc3Qge1xuICAgIHgsXG4gICAgeSxcbiAgICBwbGF0Zm9ybSxcbiAgICByZWN0cyxcbiAgICBlbGVtZW50cyxcbiAgICBzdHJhdGVneVxuICB9ID0gc3RhdGU7XG4gIGNvbnN0IHtcbiAgICBib3VuZGFyeSA9ICdjbGlwcGluZ0FuY2VzdG9ycycsXG4gICAgcm9vdEJvdW5kYXJ5ID0gJ3ZpZXdwb3J0JyxcbiAgICBlbGVtZW50Q29udGV4dCA9ICdmbG9hdGluZycsXG4gICAgYWx0Qm91bmRhcnkgPSBmYWxzZSxcbiAgICBwYWRkaW5nID0gMFxuICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICBjb25zdCBwYWRkaW5nT2JqZWN0ID0gZ2V0UGFkZGluZ09iamVjdChwYWRkaW5nKTtcbiAgY29uc3QgYWx0Q29udGV4dCA9IGVsZW1lbnRDb250ZXh0ID09PSAnZmxvYXRpbmcnID8gJ3JlZmVyZW5jZScgOiAnZmxvYXRpbmcnO1xuICBjb25zdCBlbGVtZW50ID0gZWxlbWVudHNbYWx0Qm91bmRhcnkgPyBhbHRDb250ZXh0IDogZWxlbWVudENvbnRleHRdO1xuICBjb25zdCBjbGlwcGluZ0NsaWVudFJlY3QgPSByZWN0VG9DbGllbnRSZWN0KGF3YWl0IHBsYXRmb3JtLmdldENsaXBwaW5nUmVjdCh7XG4gICAgZWxlbWVudDogKChfYXdhaXQkcGxhdGZvcm0kaXNFbGUgPSBhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQoZWxlbWVudCkpKSAhPSBudWxsID8gX2F3YWl0JHBsYXRmb3JtJGlzRWxlIDogdHJ1ZSkgPyBlbGVtZW50IDogZWxlbWVudC5jb250ZXh0RWxlbWVudCB8fCAoYXdhaXQgKHBsYXRmb3JtLmdldERvY3VtZW50RWxlbWVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnRzLmZsb2F0aW5nKSkpLFxuICAgIGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeSxcbiAgICBzdHJhdGVneVxuICB9KSk7XG4gIGNvbnN0IHJlY3QgPSBlbGVtZW50Q29udGV4dCA9PT0gJ2Zsb2F0aW5nJyA/IHtcbiAgICB4LFxuICAgIHksXG4gICAgd2lkdGg6IHJlY3RzLmZsb2F0aW5nLndpZHRoLFxuICAgIGhlaWdodDogcmVjdHMuZmxvYXRpbmcuaGVpZ2h0XG4gIH0gOiByZWN0cy5yZWZlcmVuY2U7XG4gIGNvbnN0IG9mZnNldFBhcmVudCA9IGF3YWl0IChwbGF0Zm9ybS5nZXRPZmZzZXRQYXJlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldE9mZnNldFBhcmVudChlbGVtZW50cy5mbG9hdGluZykpO1xuICBjb25zdCBvZmZzZXRTY2FsZSA9IChhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQob2Zmc2V0UGFyZW50KSkpID8gKGF3YWl0IChwbGF0Zm9ybS5nZXRTY2FsZSA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0U2NhbGUob2Zmc2V0UGFyZW50KSkpIHx8IHtcbiAgICB4OiAxLFxuICAgIHk6IDFcbiAgfSA6IHtcbiAgICB4OiAxLFxuICAgIHk6IDFcbiAgfTtcbiAgY29uc3QgZWxlbWVudENsaWVudFJlY3QgPSByZWN0VG9DbGllbnRSZWN0KHBsYXRmb3JtLmNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0ID8gYXdhaXQgcGxhdGZvcm0uY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3Qoe1xuICAgIGVsZW1lbnRzLFxuICAgIHJlY3QsXG4gICAgb2Zmc2V0UGFyZW50LFxuICAgIHN0cmF0ZWd5XG4gIH0pIDogcmVjdCk7XG4gIHJldHVybiB7XG4gICAgdG9wOiAoY2xpcHBpbmdDbGllbnRSZWN0LnRvcCAtIGVsZW1lbnRDbGllbnRSZWN0LnRvcCArIHBhZGRpbmdPYmplY3QudG9wKSAvIG9mZnNldFNjYWxlLnksXG4gICAgYm90dG9tOiAoZWxlbWVudENsaWVudFJlY3QuYm90dG9tIC0gY2xpcHBpbmdDbGllbnRSZWN0LmJvdHRvbSArIHBhZGRpbmdPYmplY3QuYm90dG9tKSAvIG9mZnNldFNjYWxlLnksXG4gICAgbGVmdDogKGNsaXBwaW5nQ2xpZW50UmVjdC5sZWZ0IC0gZWxlbWVudENsaWVudFJlY3QubGVmdCArIHBhZGRpbmdPYmplY3QubGVmdCkgLyBvZmZzZXRTY2FsZS54LFxuICAgIHJpZ2h0OiAoZWxlbWVudENsaWVudFJlY3QucmlnaHQgLSBjbGlwcGluZ0NsaWVudFJlY3QucmlnaHQgKyBwYWRkaW5nT2JqZWN0LnJpZ2h0KSAvIG9mZnNldFNjYWxlLnhcbiAgfTtcbn1cblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIHBvc2l0aW9uIGFuIGlubmVyIGVsZW1lbnQgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgc28gdGhhdCBpdFxuICogYXBwZWFycyBjZW50ZXJlZCB0byB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXJyb3dcbiAqL1xuY29uc3QgYXJyb3cgPSBvcHRpb25zID0+ICh7XG4gIG5hbWU6ICdhcnJvdycsXG4gIG9wdGlvbnMsXG4gIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgY29uc3Qge1xuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBwbGFjZW1lbnQsXG4gICAgICByZWN0cyxcbiAgICAgIHBsYXRmb3JtLFxuICAgICAgZWxlbWVudHMsXG4gICAgICBtaWRkbGV3YXJlRGF0YVxuICAgIH0gPSBzdGF0ZTtcbiAgICAvLyBTaW5jZSBgZWxlbWVudGAgaXMgcmVxdWlyZWQsIHdlIGRvbid0IFBhcnRpYWw8PiB0aGUgdHlwZS5cbiAgICBjb25zdCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgcGFkZGluZyA9IDBcbiAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpIHx8IHt9O1xuICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgcGFkZGluZ09iamVjdCA9IGdldFBhZGRpbmdPYmplY3QocGFkZGluZyk7XG4gICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgeCxcbiAgICAgIHlcbiAgICB9O1xuICAgIGNvbnN0IGF4aXMgPSBnZXRBbGlnbm1lbnRBeGlzKHBsYWNlbWVudCk7XG4gICAgY29uc3QgbGVuZ3RoID0gZ2V0QXhpc0xlbmd0aChheGlzKTtcbiAgICBjb25zdCBhcnJvd0RpbWVuc2lvbnMgPSBhd2FpdCBwbGF0Zm9ybS5nZXREaW1lbnNpb25zKGVsZW1lbnQpO1xuICAgIGNvbnN0IGlzWUF4aXMgPSBheGlzID09PSAneSc7XG4gICAgY29uc3QgbWluUHJvcCA9IGlzWUF4aXMgPyAndG9wJyA6ICdsZWZ0JztcbiAgICBjb25zdCBtYXhQcm9wID0gaXNZQXhpcyA/ICdib3R0b20nIDogJ3JpZ2h0JztcbiAgICBjb25zdCBjbGllbnRQcm9wID0gaXNZQXhpcyA/ICdjbGllbnRIZWlnaHQnIDogJ2NsaWVudFdpZHRoJztcbiAgICBjb25zdCBlbmREaWZmID0gcmVjdHMucmVmZXJlbmNlW2xlbmd0aF0gKyByZWN0cy5yZWZlcmVuY2VbYXhpc10gLSBjb29yZHNbYXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5ndGhdO1xuICAgIGNvbnN0IHN0YXJ0RGlmZiA9IGNvb3Jkc1theGlzXSAtIHJlY3RzLnJlZmVyZW5jZVtheGlzXTtcbiAgICBjb25zdCBhcnJvd09mZnNldFBhcmVudCA9IGF3YWl0IChwbGF0Zm9ybS5nZXRPZmZzZXRQYXJlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldE9mZnNldFBhcmVudChlbGVtZW50KSk7XG4gICAgbGV0IGNsaWVudFNpemUgPSBhcnJvd09mZnNldFBhcmVudCA/IGFycm93T2Zmc2V0UGFyZW50W2NsaWVudFByb3BdIDogMDtcblxuICAgIC8vIERPTSBwbGF0Zm9ybSBjYW4gcmV0dXJuIGB3aW5kb3dgIGFzIHRoZSBgb2Zmc2V0UGFyZW50YC5cbiAgICBpZiAoIWNsaWVudFNpemUgfHwgIShhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQoYXJyb3dPZmZzZXRQYXJlbnQpKSkpIHtcbiAgICAgIGNsaWVudFNpemUgPSBlbGVtZW50cy5mbG9hdGluZ1tjbGllbnRQcm9wXSB8fCByZWN0cy5mbG9hdGluZ1tsZW5ndGhdO1xuICAgIH1cbiAgICBjb25zdCBjZW50ZXJUb1JlZmVyZW5jZSA9IGVuZERpZmYgLyAyIC0gc3RhcnREaWZmIC8gMjtcblxuICAgIC8vIElmIHRoZSBwYWRkaW5nIGlzIGxhcmdlIGVub3VnaCB0aGF0IGl0IGNhdXNlcyB0aGUgYXJyb3cgdG8gbm8gbG9uZ2VyIGJlXG4gICAgLy8gY2VudGVyZWQsIG1vZGlmeSB0aGUgcGFkZGluZyBzbyB0aGF0IGl0IGlzIGNlbnRlcmVkLlxuICAgIGNvbnN0IGxhcmdlc3RQb3NzaWJsZVBhZGRpbmcgPSBjbGllbnRTaXplIC8gMiAtIGFycm93RGltZW5zaW9uc1tsZW5ndGhdIC8gMiAtIDE7XG4gICAgY29uc3QgbWluUGFkZGluZyA9IG1pbihwYWRkaW5nT2JqZWN0W21pblByb3BdLCBsYXJnZXN0UG9zc2libGVQYWRkaW5nKTtcbiAgICBjb25zdCBtYXhQYWRkaW5nID0gbWluKHBhZGRpbmdPYmplY3RbbWF4UHJvcF0sIGxhcmdlc3RQb3NzaWJsZVBhZGRpbmcpO1xuXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBhcnJvdyBkb2Vzbid0IG92ZXJmbG93IHRoZSBmbG9hdGluZyBlbGVtZW50IGlmIHRoZSBjZW50ZXJcbiAgICAvLyBwb2ludCBpcyBvdXRzaWRlIHRoZSBmbG9hdGluZyBlbGVtZW50J3MgYm91bmRzLlxuICAgIGNvbnN0IG1pbiQxID0gbWluUGFkZGluZztcbiAgICBjb25zdCBtYXggPSBjbGllbnRTaXplIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLSBtYXhQYWRkaW5nO1xuICAgIGNvbnN0IGNlbnRlciA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLyAyICsgY2VudGVyVG9SZWZlcmVuY2U7XG4gICAgY29uc3Qgb2Zmc2V0ID0gY2xhbXAobWluJDEsIGNlbnRlciwgbWF4KTtcblxuICAgIC8vIElmIHRoZSByZWZlcmVuY2UgaXMgc21hbGwgZW5vdWdoIHRoYXQgdGhlIGFycm93J3MgcGFkZGluZyBjYXVzZXMgaXQgdG9cbiAgICAvLyB0byBwb2ludCB0byBub3RoaW5nIGZvciBhbiBhbGlnbmVkIHBsYWNlbWVudCwgYWRqdXN0IHRoZSBvZmZzZXQgb2YgdGhlXG4gICAgLy8gZmxvYXRpbmcgZWxlbWVudCBpdHNlbGYuIFRvIGVuc3VyZSBgc2hpZnQoKWAgY29udGludWVzIHRvIHRha2UgYWN0aW9uLFxuICAgIC8vIGEgc2luZ2xlIHJlc2V0IGlzIHBlcmZvcm1lZCB3aGVuIHRoaXMgaXMgdHJ1ZS5cbiAgICBjb25zdCBzaG91bGRBZGRPZmZzZXQgPSAhbWlkZGxld2FyZURhdGEuYXJyb3cgJiYgZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgIT0gbnVsbCAmJiBjZW50ZXIgIT09IG9mZnNldCAmJiByZWN0cy5yZWZlcmVuY2VbbGVuZ3RoXSAvIDIgLSAoY2VudGVyIDwgbWluJDEgPyBtaW5QYWRkaW5nIDogbWF4UGFkZGluZykgLSBhcnJvd0RpbWVuc2lvbnNbbGVuZ3RoXSAvIDIgPCAwO1xuICAgIGNvbnN0IGFsaWdubWVudE9mZnNldCA9IHNob3VsZEFkZE9mZnNldCA/IGNlbnRlciA8IG1pbiQxID8gY2VudGVyIC0gbWluJDEgOiBjZW50ZXIgLSBtYXggOiAwO1xuICAgIHJldHVybiB7XG4gICAgICBbYXhpc106IGNvb3Jkc1theGlzXSArIGFsaWdubWVudE9mZnNldCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgW2F4aXNdOiBvZmZzZXQsXG4gICAgICAgIGNlbnRlck9mZnNldDogY2VudGVyIC0gb2Zmc2V0IC0gYWxpZ25tZW50T2Zmc2V0LFxuICAgICAgICAuLi4oc2hvdWxkQWRkT2Zmc2V0ICYmIHtcbiAgICAgICAgICBhbGlnbm1lbnRPZmZzZXRcbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICByZXNldDogc2hvdWxkQWRkT2Zmc2V0XG4gICAgfTtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIGdldFBsYWNlbWVudExpc3QoYWxpZ25tZW50LCBhdXRvQWxpZ25tZW50LCBhbGxvd2VkUGxhY2VtZW50cykge1xuICBjb25zdCBhbGxvd2VkUGxhY2VtZW50c1NvcnRlZEJ5QWxpZ25tZW50ID0gYWxpZ25tZW50ID8gWy4uLmFsbG93ZWRQbGFjZW1lbnRzLmZpbHRlcihwbGFjZW1lbnQgPT4gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgPT09IGFsaWdubWVudCksIC4uLmFsbG93ZWRQbGFjZW1lbnRzLmZpbHRlcihwbGFjZW1lbnQgPT4gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgIT09IGFsaWdubWVudCldIDogYWxsb3dlZFBsYWNlbWVudHMuZmlsdGVyKHBsYWNlbWVudCA9PiBnZXRTaWRlKHBsYWNlbWVudCkgPT09IHBsYWNlbWVudCk7XG4gIHJldHVybiBhbGxvd2VkUGxhY2VtZW50c1NvcnRlZEJ5QWxpZ25tZW50LmZpbHRlcihwbGFjZW1lbnQgPT4ge1xuICAgIGlmIChhbGlnbm1lbnQpIHtcbiAgICAgIHJldHVybiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSA9PT0gYWxpZ25tZW50IHx8IChhdXRvQWxpZ25tZW50ID8gZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQocGxhY2VtZW50KSAhPT0gcGxhY2VtZW50IDogZmFsc2UpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG59XG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBjaG9vc2luZyB0aGUgcGxhY2VtZW50XG4gKiB0aGF0IGhhcyB0aGUgbW9zdCBzcGFjZSBhdmFpbGFibGUgYXV0b21hdGljYWxseSwgd2l0aG91dCBuZWVkaW5nIHRvIHNwZWNpZnkgYVxuICogcHJlZmVycmVkIHBsYWNlbWVudC4gQWx0ZXJuYXRpdmUgdG8gYGZsaXBgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9QbGFjZW1lbnRcbiAqL1xuY29uc3QgYXV0b1BsYWNlbWVudCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnYXV0b1BsYWNlbWVudCcsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRhdXRvUCwgX21pZGRsZXdhcmVEYXRhJGF1dG9QMiwgX3BsYWNlbWVudHNUaGF0Rml0T25FO1xuICAgICAgY29uc3Qge1xuICAgICAgICByZWN0cyxcbiAgICAgICAgbWlkZGxld2FyZURhdGEsXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIGVsZW1lbnRzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNyb3NzQXhpcyA9IGZhbHNlLFxuICAgICAgICBhbGlnbm1lbnQsXG4gICAgICAgIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cyxcbiAgICAgICAgYXV0b0FsaWdubWVudCA9IHRydWUsXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IHBsYWNlbWVudHMkMSA9IGFsaWdubWVudCAhPT0gdW5kZWZpbmVkIHx8IGFsbG93ZWRQbGFjZW1lbnRzID09PSBwbGFjZW1lbnRzID8gZ2V0UGxhY2VtZW50TGlzdChhbGlnbm1lbnQgfHwgbnVsbCwgYXV0b0FsaWdubWVudCwgYWxsb3dlZFBsYWNlbWVudHMpIDogYWxsb3dlZFBsYWNlbWVudHM7XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gKChfbWlkZGxld2FyZURhdGEkYXV0b1AgPSBtaWRkbGV3YXJlRGF0YS5hdXRvUGxhY2VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGF1dG9QLmluZGV4KSB8fCAwO1xuICAgICAgY29uc3QgY3VycmVudFBsYWNlbWVudCA9IHBsYWNlbWVudHMkMVtjdXJyZW50SW5kZXhdO1xuICAgICAgaWYgKGN1cnJlbnRQbGFjZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICBjb25zdCBhbGlnbm1lbnRTaWRlcyA9IGdldEFsaWdubWVudFNpZGVzKGN1cnJlbnRQbGFjZW1lbnQsIHJlY3RzLCBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSkpO1xuXG4gICAgICAvLyBNYWtlIGBjb21wdXRlQ29vcmRzYCBzdGFydCBmcm9tIHRoZSByaWdodCBwbGFjZS5cbiAgICAgIGlmIChwbGFjZW1lbnQgIT09IGN1cnJlbnRQbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnRzJDFbMF1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyZW50T3ZlcmZsb3dzID0gW292ZXJmbG93W2dldFNpZGUoY3VycmVudFBsYWNlbWVudCldLCBvdmVyZmxvd1thbGlnbm1lbnRTaWRlc1swXV0sIG92ZXJmbG93W2FsaWdubWVudFNpZGVzWzFdXV07XG4gICAgICBjb25zdCBhbGxPdmVyZmxvd3MgPSBbLi4uKCgoX21pZGRsZXdhcmVEYXRhJGF1dG9QMiA9IG1pZGRsZXdhcmVEYXRhLmF1dG9QbGFjZW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkYXV0b1AyLm92ZXJmbG93cykgfHwgW10pLCB7XG4gICAgICAgIHBsYWNlbWVudDogY3VycmVudFBsYWNlbWVudCxcbiAgICAgICAgb3ZlcmZsb3dzOiBjdXJyZW50T3ZlcmZsb3dzXG4gICAgICB9XTtcbiAgICAgIGNvbnN0IG5leHRQbGFjZW1lbnQgPSBwbGFjZW1lbnRzJDFbY3VycmVudEluZGV4ICsgMV07XG5cbiAgICAgIC8vIFRoZXJlIGFyZSBtb3JlIHBsYWNlbWVudHMgdG8gY2hlY2suXG4gICAgICBpZiAobmV4dFBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGluZGV4OiBjdXJyZW50SW5kZXggKyAxLFxuICAgICAgICAgICAgb3ZlcmZsb3dzOiBhbGxPdmVyZmxvd3NcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICBwbGFjZW1lbnQ6IG5leHRQbGFjZW1lbnRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBwbGFjZW1lbnRzU29ydGVkQnlNb3N0U3BhY2UgPSBhbGxPdmVyZmxvd3MubWFwKGQgPT4ge1xuICAgICAgICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQoZC5wbGFjZW1lbnQpO1xuICAgICAgICByZXR1cm4gW2QucGxhY2VtZW50LCBhbGlnbm1lbnQgJiYgY3Jvc3NBeGlzID9cbiAgICAgICAgLy8gQ2hlY2sgYWxvbmcgdGhlIG1haW5BeGlzIGFuZCBtYWluIGNyb3NzQXhpcyBzaWRlLlxuICAgICAgICBkLm92ZXJmbG93cy5zbGljZSgwLCAyKS5yZWR1Y2UoKGFjYywgdikgPT4gYWNjICsgdiwgMCkgOlxuICAgICAgICAvLyBDaGVjayBvbmx5IHRoZSBtYWluQXhpcy5cbiAgICAgICAgZC5vdmVyZmxvd3NbMF0sIGQub3ZlcmZsb3dzXTtcbiAgICAgIH0pLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKTtcbiAgICAgIGNvbnN0IHBsYWNlbWVudHNUaGF0Rml0T25FYWNoU2lkZSA9IHBsYWNlbWVudHNTb3J0ZWRCeU1vc3RTcGFjZS5maWx0ZXIoZCA9PiBkWzJdLnNsaWNlKDAsXG4gICAgICAvLyBBbGlnbmVkIHBsYWNlbWVudHMgc2hvdWxkIG5vdCBjaGVjayB0aGVpciBvcHBvc2l0ZSBjcm9zc0F4aXNcbiAgICAgIC8vIHNpZGUuXG4gICAgICBnZXRBbGlnbm1lbnQoZFswXSkgPyAyIDogMykuZXZlcnkodiA9PiB2IDw9IDApKTtcbiAgICAgIGNvbnN0IHJlc2V0UGxhY2VtZW50ID0gKChfcGxhY2VtZW50c1RoYXRGaXRPbkUgPSBwbGFjZW1lbnRzVGhhdEZpdE9uRWFjaFNpZGVbMF0pID09IG51bGwgPyB2b2lkIDAgOiBfcGxhY2VtZW50c1RoYXRGaXRPbkVbMF0pIHx8IHBsYWNlbWVudHNTb3J0ZWRCeU1vc3RTcGFjZVswXVswXTtcbiAgICAgIGlmIChyZXNldFBsYWNlbWVudCAhPT0gcGxhY2VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgaW5kZXg6IGN1cnJlbnRJbmRleCArIDEsXG4gICAgICAgICAgICBvdmVyZmxvd3M6IGFsbE92ZXJmbG93c1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHBsYWNlbWVudDogcmVzZXRQbGFjZW1lbnRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgZmxpcHBpbmcgdGhlIGBwbGFjZW1lbnRgXG4gKiBpbiBvcmRlciB0byBrZWVwIGl0IGluIHZpZXcgd2hlbiB0aGUgcHJlZmVycmVkIHBsYWNlbWVudChzKSB3aWxsIG92ZXJmbG93IHRoZVxuICogY2xpcHBpbmcgYm91bmRhcnkuIEFsdGVybmF0aXZlIHRvIGBhdXRvUGxhY2VtZW50YC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9mbGlwXG4gKi9cbmNvbnN0IGZsaXAgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2ZsaXAnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkYXJyb3csIF9taWRkbGV3YXJlRGF0YSRmbGlwO1xuICAgICAgY29uc3Qge1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIG1pZGRsZXdhcmVEYXRhLFxuICAgICAgICByZWN0cyxcbiAgICAgICAgaW5pdGlhbFBsYWNlbWVudCxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIGVsZW1lbnRzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1haW5BeGlzOiBjaGVja01haW5BeGlzID0gdHJ1ZSxcbiAgICAgICAgY3Jvc3NBeGlzOiBjaGVja0Nyb3NzQXhpcyA9IHRydWUsXG4gICAgICAgIGZhbGxiYWNrUGxhY2VtZW50czogc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzLFxuICAgICAgICBmYWxsYmFja1N0cmF0ZWd5ID0gJ2Jlc3RGaXQnLFxuICAgICAgICBmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uID0gJ25vbmUnLFxuICAgICAgICBmbGlwQWxpZ25tZW50ID0gdHJ1ZSxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuXG4gICAgICAvLyBJZiBhIHJlc2V0IGJ5IHRoZSBhcnJvdyB3YXMgY2F1c2VkIGR1ZSB0byBhbiBhbGlnbm1lbnQgb2Zmc2V0IGJlaW5nXG4gICAgICAvLyBhZGRlZCwgd2Ugc2hvdWxkIHNraXAgYW55IGxvZ2ljIG5vdyBzaW5jZSBgZmxpcCgpYCBoYXMgYWxyZWFkeSBkb25lIGl0c1xuICAgICAgLy8gd29yay5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mbG9hdGluZy11aS9mbG9hdGluZy11aS9pc3N1ZXMvMjU0OSNpc3N1ZWNvbW1lbnQtMTcxOTYwMTY0M1xuICAgICAgaWYgKChfbWlkZGxld2FyZURhdGEkYXJyb3cgPSBtaWRkbGV3YXJlRGF0YS5hcnJvdykgIT0gbnVsbCAmJiBfbWlkZGxld2FyZURhdGEkYXJyb3cuYWxpZ25tZW50T2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCk7XG4gICAgICBjb25zdCBpbml0aWFsU2lkZUF4aXMgPSBnZXRTaWRlQXhpcyhpbml0aWFsUGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGlzQmFzZVBsYWNlbWVudCA9IGdldFNpZGUoaW5pdGlhbFBsYWNlbWVudCkgPT09IGluaXRpYWxQbGFjZW1lbnQ7XG4gICAgICBjb25zdCBydGwgPSBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSk7XG4gICAgICBjb25zdCBmYWxsYmFja1BsYWNlbWVudHMgPSBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgfHwgKGlzQmFzZVBsYWNlbWVudCB8fCAhZmxpcEFsaWdubWVudCA/IFtnZXRPcHBvc2l0ZVBsYWNlbWVudChpbml0aWFsUGxhY2VtZW50KV0gOiBnZXRFeHBhbmRlZFBsYWNlbWVudHMoaW5pdGlhbFBsYWNlbWVudCkpO1xuICAgICAgY29uc3QgaGFzRmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbiA9IGZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24gIT09ICdub25lJztcbiAgICAgIGlmICghc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzICYmIGhhc0ZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24pIHtcbiAgICAgICAgZmFsbGJhY2tQbGFjZW1lbnRzLnB1c2goLi4uZ2V0T3Bwb3NpdGVBeGlzUGxhY2VtZW50cyhpbml0aWFsUGxhY2VtZW50LCBmbGlwQWxpZ25tZW50LCBmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uLCBydGwpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBsYWNlbWVudHMgPSBbaW5pdGlhbFBsYWNlbWVudCwgLi4uZmFsbGJhY2tQbGFjZW1lbnRzXTtcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XG4gICAgICBjb25zdCBvdmVyZmxvd3MgPSBbXTtcbiAgICAgIGxldCBvdmVyZmxvd3NEYXRhID0gKChfbWlkZGxld2FyZURhdGEkZmxpcCA9IG1pZGRsZXdhcmVEYXRhLmZsaXApID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkZmxpcC5vdmVyZmxvd3MpIHx8IFtdO1xuICAgICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgICAgb3ZlcmZsb3dzLnB1c2gob3ZlcmZsb3dbc2lkZV0pO1xuICAgICAgfVxuICAgICAgaWYgKGNoZWNrQ3Jvc3NBeGlzKSB7XG4gICAgICAgIGNvbnN0IHNpZGVzID0gZ2V0QWxpZ25tZW50U2lkZXMocGxhY2VtZW50LCByZWN0cywgcnRsKTtcbiAgICAgICAgb3ZlcmZsb3dzLnB1c2gob3ZlcmZsb3dbc2lkZXNbMF1dLCBvdmVyZmxvd1tzaWRlc1sxXV0pO1xuICAgICAgfVxuICAgICAgb3ZlcmZsb3dzRGF0YSA9IFsuLi5vdmVyZmxvd3NEYXRhLCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgb3ZlcmZsb3dzXG4gICAgICB9XTtcblxuICAgICAgLy8gT25lIG9yIG1vcmUgc2lkZXMgaXMgb3ZlcmZsb3dpbmcuXG4gICAgICBpZiAoIW92ZXJmbG93cy5ldmVyeShzaWRlID0+IHNpZGUgPD0gMCkpIHtcbiAgICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRmbGlwMiwgX292ZXJmbG93c0RhdGEkZmlsdGVyO1xuICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoKChfbWlkZGxld2FyZURhdGEkZmxpcDIgPSBtaWRkbGV3YXJlRGF0YS5mbGlwKSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGZsaXAyLmluZGV4KSB8fCAwKSArIDE7XG4gICAgICAgIGNvbnN0IG5leHRQbGFjZW1lbnQgPSBwbGFjZW1lbnRzW25leHRJbmRleF07XG4gICAgICAgIGlmIChuZXh0UGxhY2VtZW50KSB7XG4gICAgICAgICAgLy8gVHJ5IG5leHQgcGxhY2VtZW50IGFuZCByZS1ydW4gdGhlIGxpZmVjeWNsZS5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICBpbmRleDogbmV4dEluZGV4LFxuICAgICAgICAgICAgICBvdmVyZmxvd3M6IG92ZXJmbG93c0RhdGFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgICBwbGFjZW1lbnQ6IG5leHRQbGFjZW1lbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmlyc3QsIGZpbmQgdGhlIGNhbmRpZGF0ZXMgdGhhdCBmaXQgb24gdGhlIG1haW5BeGlzIHNpZGUgb2Ygb3ZlcmZsb3csXG4gICAgICAgIC8vIHRoZW4gZmluZCB0aGUgcGxhY2VtZW50IHRoYXQgZml0cyB0aGUgYmVzdCBvbiB0aGUgbWFpbiBjcm9zc0F4aXMgc2lkZS5cbiAgICAgICAgbGV0IHJlc2V0UGxhY2VtZW50ID0gKF9vdmVyZmxvd3NEYXRhJGZpbHRlciA9IG92ZXJmbG93c0RhdGEuZmlsdGVyKGQgPT4gZC5vdmVyZmxvd3NbMF0gPD0gMCkuc29ydCgoYSwgYikgPT4gYS5vdmVyZmxvd3NbMV0gLSBiLm92ZXJmbG93c1sxXSlbMF0pID09IG51bGwgPyB2b2lkIDAgOiBfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIucGxhY2VtZW50O1xuXG4gICAgICAgIC8vIE90aGVyd2lzZSBmYWxsYmFjay5cbiAgICAgICAgaWYgKCFyZXNldFBsYWNlbWVudCkge1xuICAgICAgICAgIHN3aXRjaCAoZmFsbGJhY2tTdHJhdGVneSkge1xuICAgICAgICAgICAgY2FzZSAnYmVzdEZpdCc6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgX292ZXJmbG93c0RhdGEkZmlsdGVyMjtcbiAgICAgICAgICAgICAgICBjb25zdCBwbGFjZW1lbnQgPSAoX292ZXJmbG93c0RhdGEkZmlsdGVyMiA9IG92ZXJmbG93c0RhdGEuZmlsdGVyKGQgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGhhc0ZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFNpZGVBeGlzID0gZ2V0U2lkZUF4aXMoZC5wbGFjZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFNpZGVBeGlzID09PSBpbml0aWFsU2lkZUF4aXMgfHxcbiAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgYmlhcyB0byB0aGUgYHlgIHNpZGUgYXhpcyBkdWUgdG8gaG9yaXpvbnRhbFxuICAgICAgICAgICAgICAgICAgICAvLyByZWFkaW5nIGRpcmVjdGlvbnMgZmF2b3JpbmcgZ3JlYXRlciB3aWR0aC5cbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFNpZGVBeGlzID09PSAneSc7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KS5tYXAoZCA9PiBbZC5wbGFjZW1lbnQsIGQub3ZlcmZsb3dzLmZpbHRlcihvdmVyZmxvdyA9PiBvdmVyZmxvdyA+IDApLnJlZHVjZSgoYWNjLCBvdmVyZmxvdykgPT4gYWNjICsgb3ZlcmZsb3csIDApXSkuc29ydCgoYSwgYikgPT4gYVsxXSAtIGJbMV0pWzBdKSA9PSBudWxsID8gdm9pZCAwIDogX292ZXJmbG93c0RhdGEkZmlsdGVyMlswXTtcbiAgICAgICAgICAgICAgICBpZiAocGxhY2VtZW50KSB7XG4gICAgICAgICAgICAgICAgICByZXNldFBsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2luaXRpYWxQbGFjZW1lbnQnOlxuICAgICAgICAgICAgICByZXNldFBsYWNlbWVudCA9IGluaXRpYWxQbGFjZW1lbnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocGxhY2VtZW50ICE9PSByZXNldFBsYWNlbWVudCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgICBwbGFjZW1lbnQ6IHJlc2V0UGxhY2VtZW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0KSB7XG4gIHJldHVybiB7XG4gICAgdG9wOiBvdmVyZmxvdy50b3AgLSByZWN0LmhlaWdodCxcbiAgICByaWdodDogb3ZlcmZsb3cucmlnaHQgLSByZWN0LndpZHRoLFxuICAgIGJvdHRvbTogb3ZlcmZsb3cuYm90dG9tIC0gcmVjdC5oZWlnaHQsXG4gICAgbGVmdDogb3ZlcmZsb3cubGVmdCAtIHJlY3Qud2lkdGhcbiAgfTtcbn1cbmZ1bmN0aW9uIGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChvdmVyZmxvdykge1xuICByZXR1cm4gc2lkZXMuc29tZShzaWRlID0+IG92ZXJmbG93W3NpZGVdID49IDApO1xufVxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIGhpZGUgdGhlIGZsb2F0aW5nIGVsZW1lbnQgaW4gYXBwbGljYWJsZSBzaXR1YXRpb25zLCBzdWNoIGFzXG4gKiB3aGVuIGl0IGlzIG5vdCBpbiB0aGUgc2FtZSBjbGlwcGluZyBjb250ZXh0IGFzIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9oaWRlXG4gKi9cbmNvbnN0IGhpZGUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2hpZGUnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcmVjdHNcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgc3RyYXRlZ3kgPSAncmVmZXJlbmNlSGlkZGVuJyxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgc3dpdGNoIChzdHJhdGVneSkge1xuICAgICAgICBjYXNlICdyZWZlcmVuY2VIaWRkZW4nOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgICAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zLFxuICAgICAgICAgICAgICBlbGVtZW50Q29udGV4dDogJ3JlZmVyZW5jZSdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0cy5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIHJlZmVyZW5jZUhpZGRlbk9mZnNldHM6IG9mZnNldHMsXG4gICAgICAgICAgICAgICAgcmVmZXJlbmNlSGlkZGVuOiBpc0FueVNpZGVGdWxseUNsaXBwZWQob2Zmc2V0cylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2VzY2FwZWQnOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgICAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zLFxuICAgICAgICAgICAgICBhbHRCb3VuZGFyeTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMob3ZlcmZsb3csIHJlY3RzLmZsb2F0aW5nKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBlc2NhcGVkT2Zmc2V0czogb2Zmc2V0cyxcbiAgICAgICAgICAgICAgICBlc2NhcGVkOiBpc0FueVNpZGVGdWxseUNsaXBwZWQob2Zmc2V0cylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xuXG5mdW5jdGlvbiBnZXRCb3VuZGluZ1JlY3QocmVjdHMpIHtcbiAgY29uc3QgbWluWCA9IG1pbiguLi5yZWN0cy5tYXAocmVjdCA9PiByZWN0LmxlZnQpKTtcbiAgY29uc3QgbWluWSA9IG1pbiguLi5yZWN0cy5tYXAocmVjdCA9PiByZWN0LnRvcCkpO1xuICBjb25zdCBtYXhYID0gbWF4KC4uLnJlY3RzLm1hcChyZWN0ID0+IHJlY3QucmlnaHQpKTtcbiAgY29uc3QgbWF4WSA9IG1heCguLi5yZWN0cy5tYXAocmVjdCA9PiByZWN0LmJvdHRvbSkpO1xuICByZXR1cm4ge1xuICAgIHg6IG1pblgsXG4gICAgeTogbWluWSxcbiAgICB3aWR0aDogbWF4WCAtIG1pblgsXG4gICAgaGVpZ2h0OiBtYXhZIC0gbWluWVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0UmVjdHNCeUxpbmUocmVjdHMpIHtcbiAgY29uc3Qgc29ydGVkUmVjdHMgPSByZWN0cy5zbGljZSgpLnNvcnQoKGEsIGIpID0+IGEueSAtIGIueSk7XG4gIGNvbnN0IGdyb3VwcyA9IFtdO1xuICBsZXQgcHJldlJlY3QgPSBudWxsO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNvcnRlZFJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgcmVjdCA9IHNvcnRlZFJlY3RzW2ldO1xuICAgIGlmICghcHJldlJlY3QgfHwgcmVjdC55IC0gcHJldlJlY3QueSA+IHByZXZSZWN0LmhlaWdodCAvIDIpIHtcbiAgICAgIGdyb3Vwcy5wdXNoKFtyZWN0XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdyb3Vwc1tncm91cHMubGVuZ3RoIC0gMV0ucHVzaChyZWN0KTtcbiAgICB9XG4gICAgcHJldlJlY3QgPSByZWN0O1xuICB9XG4gIHJldHVybiBncm91cHMubWFwKHJlY3QgPT4gcmVjdFRvQ2xpZW50UmVjdChnZXRCb3VuZGluZ1JlY3QocmVjdCkpKTtcbn1cbi8qKlxuICogUHJvdmlkZXMgaW1wcm92ZWQgcG9zaXRpb25pbmcgZm9yIGlubGluZSByZWZlcmVuY2UgZWxlbWVudHMgdGhhdCBjYW4gc3BhblxuICogb3ZlciBtdWx0aXBsZSBsaW5lcywgc3VjaCBhcyBoeXBlcmxpbmtzIG9yIHJhbmdlIHNlbGVjdGlvbnMuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvaW5saW5lXG4gKi9cbmNvbnN0IGlubGluZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnaW5saW5lJyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgZWxlbWVudHMsXG4gICAgICAgIHJlY3RzLFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICAgc3RyYXRlZ3lcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIC8vIEEgTW91c2VFdmVudCdzIGNsaWVudHtYLFl9IGNvb3JkcyBjYW4gYmUgdXAgdG8gMiBwaXhlbHMgb2ZmIGFcbiAgICAgIC8vIENsaWVudFJlY3QncyBib3VuZHMsIGRlc3BpdGUgdGhlIGV2ZW50IGxpc3RlbmVyIGJlaW5nIHRyaWdnZXJlZC4gQVxuICAgICAgLy8gcGFkZGluZyBvZiAyIHNlZW1zIHRvIGhhbmRsZSB0aGlzIGlzc3VlLlxuICAgICAgY29uc3Qge1xuICAgICAgICBwYWRkaW5nID0gMixcbiAgICAgICAgeCxcbiAgICAgICAgeVxuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IG5hdGl2ZUNsaWVudFJlY3RzID0gQXJyYXkuZnJvbSgoYXdhaXQgKHBsYXRmb3JtLmdldENsaWVudFJlY3RzID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5nZXRDbGllbnRSZWN0cyhlbGVtZW50cy5yZWZlcmVuY2UpKSkgfHwgW10pO1xuICAgICAgY29uc3QgY2xpZW50UmVjdHMgPSBnZXRSZWN0c0J5TGluZShuYXRpdmVDbGllbnRSZWN0cyk7XG4gICAgICBjb25zdCBmYWxsYmFjayA9IHJlY3RUb0NsaWVudFJlY3QoZ2V0Qm91bmRpbmdSZWN0KG5hdGl2ZUNsaWVudFJlY3RzKSk7XG4gICAgICBjb25zdCBwYWRkaW5nT2JqZWN0ID0gZ2V0UGFkZGluZ09iamVjdChwYWRkaW5nKTtcbiAgICAgIGZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIHtcbiAgICAgICAgLy8gVGhlcmUgYXJlIHR3byByZWN0cyBhbmQgdGhleSBhcmUgZGlzam9pbmVkLlxuICAgICAgICBpZiAoY2xpZW50UmVjdHMubGVuZ3RoID09PSAyICYmIGNsaWVudFJlY3RzWzBdLmxlZnQgPiBjbGllbnRSZWN0c1sxXS5yaWdodCAmJiB4ICE9IG51bGwgJiYgeSAhPSBudWxsKSB7XG4gICAgICAgICAgLy8gRmluZCB0aGUgZmlyc3QgcmVjdCBpbiB3aGljaCB0aGUgcG9pbnQgaXMgZnVsbHkgaW5zaWRlLlxuICAgICAgICAgIHJldHVybiBjbGllbnRSZWN0cy5maW5kKHJlY3QgPT4geCA+IHJlY3QubGVmdCAtIHBhZGRpbmdPYmplY3QubGVmdCAmJiB4IDwgcmVjdC5yaWdodCArIHBhZGRpbmdPYmplY3QucmlnaHQgJiYgeSA+IHJlY3QudG9wIC0gcGFkZGluZ09iamVjdC50b3AgJiYgeSA8IHJlY3QuYm90dG9tICsgcGFkZGluZ09iamVjdC5ib3R0b20pIHx8IGZhbGxiYWNrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlcmUgYXJlIDIgb3IgbW9yZSBjb25uZWN0ZWQgcmVjdHMuXG4gICAgICAgIGlmIChjbGllbnRSZWN0cy5sZW5ndGggPj0gMikge1xuICAgICAgICAgIGlmIChnZXRTaWRlQXhpcyhwbGFjZW1lbnQpID09PSAneScpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0UmVjdCA9IGNsaWVudFJlY3RzWzBdO1xuICAgICAgICAgICAgY29uc3QgbGFzdFJlY3QgPSBjbGllbnRSZWN0c1tjbGllbnRSZWN0cy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGNvbnN0IGlzVG9wID0gZ2V0U2lkZShwbGFjZW1lbnQpID09PSAndG9wJztcbiAgICAgICAgICAgIGNvbnN0IHRvcCA9IGZpcnN0UmVjdC50b3A7XG4gICAgICAgICAgICBjb25zdCBib3R0b20gPSBsYXN0UmVjdC5ib3R0b207XG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0gaXNUb3AgPyBmaXJzdFJlY3QubGVmdCA6IGxhc3RSZWN0LmxlZnQ7XG4gICAgICAgICAgICBjb25zdCByaWdodCA9IGlzVG9wID8gZmlyc3RSZWN0LnJpZ2h0IDogbGFzdFJlY3QucmlnaHQ7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IHJpZ2h0IC0gbGVmdDtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGJvdHRvbSAtIHRvcDtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgICAgYm90dG9tLFxuICAgICAgICAgICAgICBsZWZ0LFxuICAgICAgICAgICAgICByaWdodCxcbiAgICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgICAgeDogbGVmdCxcbiAgICAgICAgICAgICAgeTogdG9wXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBpc0xlZnRTaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpID09PSAnbGVmdCc7XG4gICAgICAgICAgY29uc3QgbWF4UmlnaHQgPSBtYXgoLi4uY2xpZW50UmVjdHMubWFwKHJlY3QgPT4gcmVjdC5yaWdodCkpO1xuICAgICAgICAgIGNvbnN0IG1pbkxlZnQgPSBtaW4oLi4uY2xpZW50UmVjdHMubWFwKHJlY3QgPT4gcmVjdC5sZWZ0KSk7XG4gICAgICAgICAgY29uc3QgbWVhc3VyZVJlY3RzID0gY2xpZW50UmVjdHMuZmlsdGVyKHJlY3QgPT4gaXNMZWZ0U2lkZSA/IHJlY3QubGVmdCA9PT0gbWluTGVmdCA6IHJlY3QucmlnaHQgPT09IG1heFJpZ2h0KTtcbiAgICAgICAgICBjb25zdCB0b3AgPSBtZWFzdXJlUmVjdHNbMF0udG9wO1xuICAgICAgICAgIGNvbnN0IGJvdHRvbSA9IG1lYXN1cmVSZWN0c1ttZWFzdXJlUmVjdHMubGVuZ3RoIC0gMV0uYm90dG9tO1xuICAgICAgICAgIGNvbnN0IGxlZnQgPSBtaW5MZWZ0O1xuICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gbWF4UmlnaHQ7XG4gICAgICAgICAgY29uc3Qgd2lkdGggPSByaWdodCAtIGxlZnQ7XG4gICAgICAgICAgY29uc3QgaGVpZ2h0ID0gYm90dG9tIC0gdG9wO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0b3AsXG4gICAgICAgICAgICBib3R0b20sXG4gICAgICAgICAgICBsZWZ0LFxuICAgICAgICAgICAgcmlnaHQsXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHg6IGxlZnQsXG4gICAgICAgICAgICB5OiB0b3BcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxsYmFjaztcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc2V0UmVjdHMgPSBhd2FpdCBwbGF0Zm9ybS5nZXRFbGVtZW50UmVjdHMoe1xuICAgICAgICByZWZlcmVuY2U6IHtcbiAgICAgICAgICBnZXRCb3VuZGluZ0NsaWVudFJlY3RcbiAgICAgICAgfSxcbiAgICAgICAgZmxvYXRpbmc6IGVsZW1lbnRzLmZsb2F0aW5nLFxuICAgICAgICBzdHJhdGVneVxuICAgICAgfSk7XG4gICAgICBpZiAocmVjdHMucmVmZXJlbmNlLnggIT09IHJlc2V0UmVjdHMucmVmZXJlbmNlLnggfHwgcmVjdHMucmVmZXJlbmNlLnkgIT09IHJlc2V0UmVjdHMucmVmZXJlbmNlLnkgfHwgcmVjdHMucmVmZXJlbmNlLndpZHRoICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS53aWR0aCB8fCByZWN0cy5yZWZlcmVuY2UuaGVpZ2h0ICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS5oZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcmVjdHM6IHJlc2V0UmVjdHNcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9O1xufTtcblxuLy8gRm9yIHR5cGUgYmFja3dhcmRzLWNvbXBhdGliaWxpdHksIHRoZSBgT2Zmc2V0T3B0aW9uc2AgdHlwZSB3YXMgYWxzb1xuLy8gRGVyaXZhYmxlLlxuXG5hc3luYyBmdW5jdGlvbiBjb252ZXJ0VmFsdWVUb0Nvb3JkcyhzdGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCB7XG4gICAgcGxhY2VtZW50LFxuICAgIHBsYXRmb3JtLFxuICAgIGVsZW1lbnRzXG4gIH0gPSBzdGF0ZTtcbiAgY29uc3QgcnRsID0gYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpO1xuICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgY29uc3QgaXNWZXJ0aWNhbCA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCkgPT09ICd5JztcbiAgY29uc3QgbWFpbkF4aXNNdWx0aSA9IFsnbGVmdCcsICd0b3AnXS5pbmNsdWRlcyhzaWRlKSA/IC0xIDogMTtcbiAgY29uc3QgY3Jvc3NBeGlzTXVsdGkgPSBydGwgJiYgaXNWZXJ0aWNhbCA/IC0xIDogMTtcbiAgY29uc3QgcmF3VmFsdWUgPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICBsZXQge1xuICAgIG1haW5BeGlzLFxuICAgIGNyb3NzQXhpcyxcbiAgICBhbGlnbm1lbnRBeGlzXG4gIH0gPSB0eXBlb2YgcmF3VmFsdWUgPT09ICdudW1iZXInID8ge1xuICAgIG1haW5BeGlzOiByYXdWYWx1ZSxcbiAgICBjcm9zc0F4aXM6IDAsXG4gICAgYWxpZ25tZW50QXhpczogbnVsbFxuICB9IDoge1xuICAgIG1haW5BeGlzOiByYXdWYWx1ZS5tYWluQXhpcyB8fCAwLFxuICAgIGNyb3NzQXhpczogcmF3VmFsdWUuY3Jvc3NBeGlzIHx8IDAsXG4gICAgYWxpZ25tZW50QXhpczogcmF3VmFsdWUuYWxpZ25tZW50QXhpc1xuICB9O1xuICBpZiAoYWxpZ25tZW50ICYmIHR5cGVvZiBhbGlnbm1lbnRBeGlzID09PSAnbnVtYmVyJykge1xuICAgIGNyb3NzQXhpcyA9IGFsaWdubWVudCA9PT0gJ2VuZCcgPyBhbGlnbm1lbnRBeGlzICogLTEgOiBhbGlnbm1lbnRBeGlzO1xuICB9XG4gIHJldHVybiBpc1ZlcnRpY2FsID8ge1xuICAgIHg6IGNyb3NzQXhpcyAqIGNyb3NzQXhpc011bHRpLFxuICAgIHk6IG1haW5BeGlzICogbWFpbkF4aXNNdWx0aVxuICB9IDoge1xuICAgIHg6IG1haW5BeGlzICogbWFpbkF4aXNNdWx0aSxcbiAgICB5OiBjcm9zc0F4aXMgKiBjcm9zc0F4aXNNdWx0aVxuICB9O1xufVxuXG4vKipcbiAqIE1vZGlmaWVzIHRoZSBwbGFjZW1lbnQgYnkgdHJhbnNsYXRpbmcgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYWxvbmcgdGhlXG4gKiBzcGVjaWZpZWQgYXhlcy5cbiAqIEEgbnVtYmVyIChzaG9ydGhhbmQgZm9yIGBtYWluQXhpc2Agb3IgZGlzdGFuY2UpLCBvciBhbiBheGVzIGNvbmZpZ3VyYXRpb25cbiAqIG9iamVjdCBtYXkgYmUgcGFzc2VkLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL29mZnNldFxuICovXG5jb25zdCBvZmZzZXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IDA7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJG9mZnNlLCBfbWlkZGxld2FyZURhdGEkYXJyb3c7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgbWlkZGxld2FyZURhdGFcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IGRpZmZDb29yZHMgPSBhd2FpdCBjb252ZXJ0VmFsdWVUb0Nvb3JkcyhzdGF0ZSwgb3B0aW9ucyk7XG5cbiAgICAgIC8vIElmIHRoZSBwbGFjZW1lbnQgaXMgdGhlIHNhbWUgYW5kIHRoZSBhcnJvdyBjYXVzZWQgYW4gYWxpZ25tZW50IG9mZnNldFxuICAgICAgLy8gdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGNoYW5nZSB0aGUgcG9zaXRpb25pbmcgY29vcmRpbmF0ZXMuXG4gICAgICBpZiAocGxhY2VtZW50ID09PSAoKF9taWRkbGV3YXJlRGF0YSRvZmZzZSA9IG1pZGRsZXdhcmVEYXRhLm9mZnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRvZmZzZS5wbGFjZW1lbnQpICYmIChfbWlkZGxld2FyZURhdGEkYXJyb3cgPSBtaWRkbGV3YXJlRGF0YS5hcnJvdykgIT0gbnVsbCAmJiBfbWlkZGxld2FyZURhdGEkYXJyb3cuYWxpZ25tZW50T2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHggKyBkaWZmQ29vcmRzLngsXG4gICAgICAgIHk6IHkgKyBkaWZmQ29vcmRzLnksXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAuLi5kaWZmQ29vcmRzLFxuICAgICAgICAgIHBsYWNlbWVudFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IHNoaWZ0aW5nIGl0IGluIG9yZGVyIHRvXG4gKiBrZWVwIGl0IGluIHZpZXcgd2hlbiBpdCB3aWxsIG92ZXJmbG93IHRoZSBjbGlwcGluZyBib3VuZGFyeS5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaGlmdFxuICovXG5jb25zdCBzaGlmdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnc2hpZnQnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgcGxhY2VtZW50XG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1haW5BeGlzOiBjaGVja01haW5BeGlzID0gdHJ1ZSxcbiAgICAgICAgY3Jvc3NBeGlzOiBjaGVja0Nyb3NzQXhpcyA9IGZhbHNlLFxuICAgICAgICBsaW1pdGVyID0ge1xuICAgICAgICAgIGZuOiBfcmVmID0+IHtcbiAgICAgICAgICAgIGxldCB7XG4gICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgIHlcbiAgICAgICAgICAgIH0gPSBfcmVmO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgeVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IGNvb3JkcyA9IHtcbiAgICAgICAgeCxcbiAgICAgICAgeVxuICAgICAgfTtcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XG4gICAgICBjb25zdCBjcm9zc0F4aXMgPSBnZXRTaWRlQXhpcyhnZXRTaWRlKHBsYWNlbWVudCkpO1xuICAgICAgY29uc3QgbWFpbkF4aXMgPSBnZXRPcHBvc2l0ZUF4aXMoY3Jvc3NBeGlzKTtcbiAgICAgIGxldCBtYWluQXhpc0Nvb3JkID0gY29vcmRzW21haW5BeGlzXTtcbiAgICAgIGxldCBjcm9zc0F4aXNDb29yZCA9IGNvb3Jkc1tjcm9zc0F4aXNdO1xuICAgICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgICAgY29uc3QgbWluU2lkZSA9IG1haW5BeGlzID09PSAneScgPyAndG9wJyA6ICdsZWZ0JztcbiAgICAgICAgY29uc3QgbWF4U2lkZSA9IG1haW5BeGlzID09PSAneScgPyAnYm90dG9tJyA6ICdyaWdodCc7XG4gICAgICAgIGNvbnN0IG1pbiA9IG1haW5BeGlzQ29vcmQgKyBvdmVyZmxvd1ttaW5TaWRlXTtcbiAgICAgICAgY29uc3QgbWF4ID0gbWFpbkF4aXNDb29yZCAtIG92ZXJmbG93W21heFNpZGVdO1xuICAgICAgICBtYWluQXhpc0Nvb3JkID0gY2xhbXAobWluLCBtYWluQXhpc0Nvb3JkLCBtYXgpO1xuICAgICAgfVxuICAgICAgaWYgKGNoZWNrQ3Jvc3NBeGlzKSB7XG4gICAgICAgIGNvbnN0IG1pblNpZGUgPSBjcm9zc0F4aXMgPT09ICd5JyA/ICd0b3AnIDogJ2xlZnQnO1xuICAgICAgICBjb25zdCBtYXhTaWRlID0gY3Jvc3NBeGlzID09PSAneScgPyAnYm90dG9tJyA6ICdyaWdodCc7XG4gICAgICAgIGNvbnN0IG1pbiA9IGNyb3NzQXhpc0Nvb3JkICsgb3ZlcmZsb3dbbWluU2lkZV07XG4gICAgICAgIGNvbnN0IG1heCA9IGNyb3NzQXhpc0Nvb3JkIC0gb3ZlcmZsb3dbbWF4U2lkZV07XG4gICAgICAgIGNyb3NzQXhpc0Nvb3JkID0gY2xhbXAobWluLCBjcm9zc0F4aXNDb29yZCwgbWF4KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxpbWl0ZWRDb29yZHMgPSBsaW1pdGVyLmZuKHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIFttYWluQXhpc106IG1haW5BeGlzQ29vcmQsXG4gICAgICAgIFtjcm9zc0F4aXNdOiBjcm9zc0F4aXNDb29yZFxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5saW1pdGVkQ29vcmRzLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgeDogbGltaXRlZENvb3Jkcy54IC0geCxcbiAgICAgICAgICB5OiBsaW1pdGVkQ29vcmRzLnkgLSB5LFxuICAgICAgICAgIGVuYWJsZWQ6IHtcbiAgICAgICAgICAgIFttYWluQXhpc106IGNoZWNrTWFpbkF4aXMsXG4gICAgICAgICAgICBbY3Jvc3NBeGlzXTogY2hlY2tDcm9zc0F4aXNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9O1xufTtcbi8qKlxuICogQnVpbHQtaW4gYGxpbWl0ZXJgIHRoYXQgd2lsbCBzdG9wIGBzaGlmdCgpYCBhdCBhIGNlcnRhaW4gcG9pbnQuXG4gKi9cbmNvbnN0IGxpbWl0U2hpZnQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgb3B0aW9ucyxcbiAgICBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIHJlY3RzLFxuICAgICAgICBtaWRkbGV3YXJlRGF0YVxuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBvZmZzZXQgPSAwLFxuICAgICAgICBtYWluQXhpczogY2hlY2tNYWluQXhpcyA9IHRydWUsXG4gICAgICAgIGNyb3NzQXhpczogY2hlY2tDcm9zc0F4aXMgPSB0cnVlXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgICB4LFxuICAgICAgICB5XG4gICAgICB9O1xuICAgICAgY29uc3QgY3Jvc3NBeGlzID0gZ2V0U2lkZUF4aXMocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IG1haW5BeGlzID0gZ2V0T3Bwb3NpdGVBeGlzKGNyb3NzQXhpcyk7XG4gICAgICBsZXQgbWFpbkF4aXNDb29yZCA9IGNvb3Jkc1ttYWluQXhpc107XG4gICAgICBsZXQgY3Jvc3NBeGlzQ29vcmQgPSBjb29yZHNbY3Jvc3NBeGlzXTtcbiAgICAgIGNvbnN0IHJhd09mZnNldCA9IGV2YWx1YXRlKG9mZnNldCwgc3RhdGUpO1xuICAgICAgY29uc3QgY29tcHV0ZWRPZmZzZXQgPSB0eXBlb2YgcmF3T2Zmc2V0ID09PSAnbnVtYmVyJyA/IHtcbiAgICAgICAgbWFpbkF4aXM6IHJhd09mZnNldCxcbiAgICAgICAgY3Jvc3NBeGlzOiAwXG4gICAgICB9IDoge1xuICAgICAgICBtYWluQXhpczogMCxcbiAgICAgICAgY3Jvc3NBeGlzOiAwLFxuICAgICAgICAuLi5yYXdPZmZzZXRcbiAgICAgIH07XG4gICAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgICBjb25zdCBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICAgICAgICBjb25zdCBsaW1pdE1pbiA9IHJlY3RzLnJlZmVyZW5jZVttYWluQXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5dICsgY29tcHV0ZWRPZmZzZXQubWFpbkF4aXM7XG4gICAgICAgIGNvbnN0IGxpbWl0TWF4ID0gcmVjdHMucmVmZXJlbmNlW21haW5BeGlzXSArIHJlY3RzLnJlZmVyZW5jZVtsZW5dIC0gY29tcHV0ZWRPZmZzZXQubWFpbkF4aXM7XG4gICAgICAgIGlmIChtYWluQXhpc0Nvb3JkIDwgbGltaXRNaW4pIHtcbiAgICAgICAgICBtYWluQXhpc0Nvb3JkID0gbGltaXRNaW47XG4gICAgICAgIH0gZWxzZSBpZiAobWFpbkF4aXNDb29yZCA+IGxpbWl0TWF4KSB7XG4gICAgICAgICAgbWFpbkF4aXNDb29yZCA9IGxpbWl0TWF4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2hlY2tDcm9zc0F4aXMpIHtcbiAgICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRvZmZzZSwgX21pZGRsZXdhcmVEYXRhJG9mZnNlMjtcbiAgICAgICAgY29uc3QgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICd3aWR0aCcgOiAnaGVpZ2h0JztcbiAgICAgICAgY29uc3QgaXNPcmlnaW5TaWRlID0gWyd0b3AnLCAnbGVmdCddLmluY2x1ZGVzKGdldFNpZGUocGxhY2VtZW50KSk7XG4gICAgICAgIGNvbnN0IGxpbWl0TWluID0gcmVjdHMucmVmZXJlbmNlW2Nyb3NzQXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5dICsgKGlzT3JpZ2luU2lkZSA/ICgoX21pZGRsZXdhcmVEYXRhJG9mZnNlID0gbWlkZGxld2FyZURhdGEub2Zmc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJG9mZnNlW2Nyb3NzQXhpc10pIHx8IDAgOiAwKSArIChpc09yaWdpblNpZGUgPyAwIDogY29tcHV0ZWRPZmZzZXQuY3Jvc3NBeGlzKTtcbiAgICAgICAgY29uc3QgbGltaXRNYXggPSByZWN0cy5yZWZlcmVuY2VbY3Jvc3NBeGlzXSArIHJlY3RzLnJlZmVyZW5jZVtsZW5dICsgKGlzT3JpZ2luU2lkZSA/IDAgOiAoKF9taWRkbGV3YXJlRGF0YSRvZmZzZTIgPSBtaWRkbGV3YXJlRGF0YS5vZmZzZXQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkb2Zmc2UyW2Nyb3NzQXhpc10pIHx8IDApIC0gKGlzT3JpZ2luU2lkZSA/IGNvbXB1dGVkT2Zmc2V0LmNyb3NzQXhpcyA6IDApO1xuICAgICAgICBpZiAoY3Jvc3NBeGlzQ29vcmQgPCBsaW1pdE1pbikge1xuICAgICAgICAgIGNyb3NzQXhpc0Nvb3JkID0gbGltaXRNaW47XG4gICAgICAgIH0gZWxzZSBpZiAoY3Jvc3NBeGlzQ29vcmQgPiBsaW1pdE1heCkge1xuICAgICAgICAgIGNyb3NzQXhpc0Nvb3JkID0gbGltaXRNYXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIFttYWluQXhpc106IG1haW5BeGlzQ29vcmQsXG4gICAgICAgIFtjcm9zc0F4aXNdOiBjcm9zc0F4aXNDb29yZFxuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdGhhdCBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgc2l6ZSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCDigJRcbiAqIGZvciBpbnN0YW5jZSwgcHJldmVudCBpdCBmcm9tIG92ZXJmbG93aW5nIHRoZSBjbGlwcGluZyBib3VuZGFyeSBvciBtYXRjaCB0aGVcbiAqIHdpZHRoIG9mIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaXplXG4gKi9cbmNvbnN0IHNpemUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3NpemUnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIHZhciBfc3RhdGUkbWlkZGxld2FyZURhdGEsIF9zdGF0ZSRtaWRkbGV3YXJlRGF0YTI7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgcmVjdHMsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgICBlbGVtZW50c1xuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBhcHBseSA9ICgpID0+IHt9LFxuICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnNcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3Qgc2lkZSA9IGdldFNpZGUocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChwbGFjZW1lbnQpO1xuICAgICAgY29uc3QgaXNZQXhpcyA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCkgPT09ICd5JztcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodFxuICAgICAgfSA9IHJlY3RzLmZsb2F0aW5nO1xuICAgICAgbGV0IGhlaWdodFNpZGU7XG4gICAgICBsZXQgd2lkdGhTaWRlO1xuICAgICAgaWYgKHNpZGUgPT09ICd0b3AnIHx8IHNpZGUgPT09ICdib3R0b20nKSB7XG4gICAgICAgIGhlaWdodFNpZGUgPSBzaWRlO1xuICAgICAgICB3aWR0aFNpZGUgPSBhbGlnbm1lbnQgPT09ICgoYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpKSA/ICdzdGFydCcgOiAnZW5kJykgPyAnbGVmdCcgOiAncmlnaHQnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2lkdGhTaWRlID0gc2lkZTtcbiAgICAgICAgaGVpZ2h0U2lkZSA9IGFsaWdubWVudCA9PT0gJ2VuZCcgPyAndG9wJyA6ICdib3R0b20nO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF4aW11bUNsaXBwaW5nSGVpZ2h0ID0gaGVpZ2h0IC0gb3ZlcmZsb3cudG9wIC0gb3ZlcmZsb3cuYm90dG9tO1xuICAgICAgY29uc3QgbWF4aW11bUNsaXBwaW5nV2lkdGggPSB3aWR0aCAtIG92ZXJmbG93LmxlZnQgLSBvdmVyZmxvdy5yaWdodDtcbiAgICAgIGNvbnN0IG92ZXJmbG93QXZhaWxhYmxlSGVpZ2h0ID0gbWluKGhlaWdodCAtIG92ZXJmbG93W2hlaWdodFNpZGVdLCBtYXhpbXVtQ2xpcHBpbmdIZWlnaHQpO1xuICAgICAgY29uc3Qgb3ZlcmZsb3dBdmFpbGFibGVXaWR0aCA9IG1pbih3aWR0aCAtIG92ZXJmbG93W3dpZHRoU2lkZV0sIG1heGltdW1DbGlwcGluZ1dpZHRoKTtcbiAgICAgIGNvbnN0IG5vU2hpZnQgPSAhc3RhdGUubWlkZGxld2FyZURhdGEuc2hpZnQ7XG4gICAgICBsZXQgYXZhaWxhYmxlSGVpZ2h0ID0gb3ZlcmZsb3dBdmFpbGFibGVIZWlnaHQ7XG4gICAgICBsZXQgYXZhaWxhYmxlV2lkdGggPSBvdmVyZmxvd0F2YWlsYWJsZVdpZHRoO1xuICAgICAgaWYgKChfc3RhdGUkbWlkZGxld2FyZURhdGEgPSBzdGF0ZS5taWRkbGV3YXJlRGF0YS5zaGlmdCkgIT0gbnVsbCAmJiBfc3RhdGUkbWlkZGxld2FyZURhdGEuZW5hYmxlZC54KSB7XG4gICAgICAgIGF2YWlsYWJsZVdpZHRoID0gbWF4aW11bUNsaXBwaW5nV2lkdGg7XG4gICAgICB9XG4gICAgICBpZiAoKF9zdGF0ZSRtaWRkbGV3YXJlRGF0YTIgPSBzdGF0ZS5taWRkbGV3YXJlRGF0YS5zaGlmdCkgIT0gbnVsbCAmJiBfc3RhdGUkbWlkZGxld2FyZURhdGEyLmVuYWJsZWQueSkge1xuICAgICAgICBhdmFpbGFibGVIZWlnaHQgPSBtYXhpbXVtQ2xpcHBpbmdIZWlnaHQ7XG4gICAgICB9XG4gICAgICBpZiAobm9TaGlmdCAmJiAhYWxpZ25tZW50KSB7XG4gICAgICAgIGNvbnN0IHhNaW4gPSBtYXgob3ZlcmZsb3cubGVmdCwgMCk7XG4gICAgICAgIGNvbnN0IHhNYXggPSBtYXgob3ZlcmZsb3cucmlnaHQsIDApO1xuICAgICAgICBjb25zdCB5TWluID0gbWF4KG92ZXJmbG93LnRvcCwgMCk7XG4gICAgICAgIGNvbnN0IHlNYXggPSBtYXgob3ZlcmZsb3cuYm90dG9tLCAwKTtcbiAgICAgICAgaWYgKGlzWUF4aXMpIHtcbiAgICAgICAgICBhdmFpbGFibGVXaWR0aCA9IHdpZHRoIC0gMiAqICh4TWluICE9PSAwIHx8IHhNYXggIT09IDAgPyB4TWluICsgeE1heCA6IG1heChvdmVyZmxvdy5sZWZ0LCBvdmVyZmxvdy5yaWdodCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF2YWlsYWJsZUhlaWdodCA9IGhlaWdodCAtIDIgKiAoeU1pbiAhPT0gMCB8fCB5TWF4ICE9PSAwID8geU1pbiArIHlNYXggOiBtYXgob3ZlcmZsb3cudG9wLCBvdmVyZmxvdy5ib3R0b20pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXdhaXQgYXBwbHkoe1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgYXZhaWxhYmxlV2lkdGgsXG4gICAgICAgIGF2YWlsYWJsZUhlaWdodFxuICAgICAgfSk7XG4gICAgICBjb25zdCBuZXh0RGltZW5zaW9ucyA9IGF3YWl0IHBsYXRmb3JtLmdldERpbWVuc2lvbnMoZWxlbWVudHMuZmxvYXRpbmcpO1xuICAgICAgaWYgKHdpZHRoICE9PSBuZXh0RGltZW5zaW9ucy53aWR0aCB8fCBoZWlnaHQgIT09IG5leHREaW1lbnNpb25zLmhlaWdodCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICByZWN0czogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnQgeyBhcnJvdywgYXV0b1BsYWNlbWVudCwgY29tcHV0ZVBvc2l0aW9uLCBkZXRlY3RPdmVyZmxvdywgZmxpcCwgaGlkZSwgaW5saW5lLCBsaW1pdFNoaWZ0LCBvZmZzZXQsIHNoaWZ0LCBzaXplIH07XG4iLCJmdW5jdGlvbiBoYXNXaW5kb3coKSB7XG4gIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcbn1cbmZ1bmN0aW9uIGdldE5vZGVOYW1lKG5vZGUpIHtcbiAgaWYgKGlzTm9kZShub2RlKSkge1xuICAgIHJldHVybiAobm9kZS5ub2RlTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgfVxuICAvLyBNb2NrZWQgbm9kZXMgaW4gdGVzdGluZyBlbnZpcm9ubWVudHMgbWF5IG5vdCBiZSBpbnN0YW5jZXMgb2YgTm9kZS4gQnlcbiAgLy8gcmV0dXJuaW5nIGAjZG9jdW1lbnRgIGFuIGluZmluaXRlIGxvb3Agd29uJ3Qgb2NjdXIuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mbG9hdGluZy11aS9mbG9hdGluZy11aS9pc3N1ZXMvMjMxN1xuICByZXR1cm4gJyNkb2N1bWVudCc7XG59XG5mdW5jdGlvbiBnZXRXaW5kb3cobm9kZSkge1xuICB2YXIgX25vZGUkb3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIChub2RlID09IG51bGwgfHwgKF9ub2RlJG93bmVyRG9jdW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbm9kZSRvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSB8fCB3aW5kb3c7XG59XG5mdW5jdGlvbiBnZXREb2N1bWVudEVsZW1lbnQobm9kZSkge1xuICB2YXIgX3JlZjtcbiAgcmV0dXJuIChfcmVmID0gKGlzTm9kZShub2RlKSA/IG5vZGUub3duZXJEb2N1bWVudCA6IG5vZGUuZG9jdW1lbnQpIHx8IHdpbmRvdy5kb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9yZWYuZG9jdW1lbnRFbGVtZW50O1xufVxuZnVuY3Rpb24gaXNOb2RlKHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgTm9kZSB8fCB2YWx1ZSBpbnN0YW5jZW9mIGdldFdpbmRvdyh2YWx1ZSkuTm9kZTtcbn1cbmZ1bmN0aW9uIGlzRWxlbWVudCh2YWx1ZSkge1xuICBpZiAoIWhhc1dpbmRvdygpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEVsZW1lbnQgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLkVsZW1lbnQ7XG59XG5mdW5jdGlvbiBpc0hUTUxFbGVtZW50KHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLkhUTUxFbGVtZW50O1xufVxuZnVuY3Rpb24gaXNTaGFkb3dSb290KHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkgfHwgdHlwZW9mIFNoYWRvd1Jvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLlNoYWRvd1Jvb3Q7XG59XG5mdW5jdGlvbiBpc092ZXJmbG93RWxlbWVudChlbGVtZW50KSB7XG4gIGNvbnN0IHtcbiAgICBvdmVyZmxvdyxcbiAgICBvdmVyZmxvd1gsXG4gICAgb3ZlcmZsb3dZLFxuICAgIGRpc3BsYXlcbiAgfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIHJldHVybiAvYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW58Y2xpcC8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCkgJiYgIVsnaW5saW5lJywgJ2NvbnRlbnRzJ10uaW5jbHVkZXMoZGlzcGxheSk7XG59XG5mdW5jdGlvbiBpc1RhYmxlRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBbJ3RhYmxlJywgJ3RkJywgJ3RoJ10uaW5jbHVkZXMoZ2V0Tm9kZU5hbWUoZWxlbWVudCkpO1xufVxuZnVuY3Rpb24gaXNUb3BMYXllcihlbGVtZW50KSB7XG4gIHJldHVybiBbJzpwb3BvdmVyLW9wZW4nLCAnOm1vZGFsJ10uc29tZShzZWxlY3RvciA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBlbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xufVxuZnVuY3Rpb24gaXNDb250YWluaW5nQmxvY2soZWxlbWVudE9yQ3NzKSB7XG4gIGNvbnN0IHdlYmtpdCA9IGlzV2ViS2l0KCk7XG4gIGNvbnN0IGNzcyA9IGlzRWxlbWVudChlbGVtZW50T3JDc3MpID8gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50T3JDc3MpIDogZWxlbWVudE9yQ3NzO1xuXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Db250YWluaW5nX2Jsb2NrI2lkZW50aWZ5aW5nX3RoZV9jb250YWluaW5nX2Jsb2NrXG4gIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdHJhbnNmb3Jtcy0yLyNpbmRpdmlkdWFsLXRyYW5zZm9ybXNcbiAgcmV0dXJuIFsndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZScsICdzY2FsZScsICdyb3RhdGUnLCAncGVyc3BlY3RpdmUnXS5zb21lKHZhbHVlID0+IGNzc1t2YWx1ZV0gPyBjc3NbdmFsdWVdICE9PSAnbm9uZScgOiBmYWxzZSkgfHwgKGNzcy5jb250YWluZXJUeXBlID8gY3NzLmNvbnRhaW5lclR5cGUgIT09ICdub3JtYWwnIDogZmFsc2UpIHx8ICF3ZWJraXQgJiYgKGNzcy5iYWNrZHJvcEZpbHRlciA/IGNzcy5iYWNrZHJvcEZpbHRlciAhPT0gJ25vbmUnIDogZmFsc2UpIHx8ICF3ZWJraXQgJiYgKGNzcy5maWx0ZXIgPyBjc3MuZmlsdGVyICE9PSAnbm9uZScgOiBmYWxzZSkgfHwgWyd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlJywgJ3NjYWxlJywgJ3JvdGF0ZScsICdwZXJzcGVjdGl2ZScsICdmaWx0ZXInXS5zb21lKHZhbHVlID0+IChjc3Mud2lsbENoYW5nZSB8fCAnJykuaW5jbHVkZXModmFsdWUpKSB8fCBbJ3BhaW50JywgJ2xheW91dCcsICdzdHJpY3QnLCAnY29udGVudCddLnNvbWUodmFsdWUgPT4gKGNzcy5jb250YWluIHx8ICcnKS5pbmNsdWRlcyh2YWx1ZSkpO1xufVxuZnVuY3Rpb24gZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHtcbiAgbGV0IGN1cnJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTtcbiAgd2hpbGUgKGlzSFRNTEVsZW1lbnQoY3VycmVudE5vZGUpICYmICFpc0xhc3RUcmF2ZXJzYWJsZU5vZGUoY3VycmVudE5vZGUpKSB7XG4gICAgaWYgKGlzQ29udGFpbmluZ0Jsb2NrKGN1cnJlbnROb2RlKSkge1xuICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgIH0gZWxzZSBpZiAoaXNUb3BMYXllcihjdXJyZW50Tm9kZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoY3VycmVudE5vZGUpO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gaXNXZWJLaXQoKSB7XG4gIGlmICh0eXBlb2YgQ1NTID09PSAndW5kZWZpbmVkJyB8fCAhQ1NTLnN1cHBvcnRzKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBDU1Muc3VwcG9ydHMoJy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyJywgJ25vbmUnKTtcbn1cbmZ1bmN0aW9uIGlzTGFzdFRyYXZlcnNhYmxlTm9kZShub2RlKSB7XG4gIHJldHVybiBbJ2h0bWwnLCAnYm9keScsICcjZG9jdW1lbnQnXS5pbmNsdWRlcyhnZXROb2RlTmFtZShub2RlKSk7XG59XG5mdW5jdGlvbiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldFdpbmRvdyhlbGVtZW50KS5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xufVxuZnVuY3Rpb24gZ2V0Tm9kZVNjcm9sbChlbGVtZW50KSB7XG4gIGlmIChpc0VsZW1lbnQoZWxlbWVudCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2Nyb2xsTGVmdDogZWxlbWVudC5zY3JvbGxMZWZ0LFxuICAgICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFRvcFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBlbGVtZW50LnNjcm9sbFgsXG4gICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFlcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFBhcmVudE5vZGUobm9kZSkge1xuICBpZiAoZ2V0Tm9kZU5hbWUobm9kZSkgPT09ICdodG1sJykge1xuICAgIHJldHVybiBub2RlO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9XG4gIC8vIFN0ZXAgaW50byB0aGUgc2hhZG93IERPTSBvZiB0aGUgcGFyZW50IG9mIGEgc2xvdHRlZCBub2RlLlxuICBub2RlLmFzc2lnbmVkU2xvdCB8fFxuICAvLyBET00gRWxlbWVudCBkZXRlY3RlZC5cbiAgbm9kZS5wYXJlbnROb2RlIHx8XG4gIC8vIFNoYWRvd1Jvb3QgZGV0ZWN0ZWQuXG4gIGlzU2hhZG93Um9vdChub2RlKSAmJiBub2RlLmhvc3QgfHxcbiAgLy8gRmFsbGJhY2suXG4gIGdldERvY3VtZW50RWxlbWVudChub2RlKTtcbiAgcmV0dXJuIGlzU2hhZG93Um9vdChyZXN1bHQpID8gcmVzdWx0Lmhvc3QgOiByZXN1bHQ7XG59XG5mdW5jdGlvbiBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3Rvcihub2RlKSB7XG4gIGNvbnN0IHBhcmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKG5vZGUpO1xuICBpZiAoaXNMYXN0VHJhdmVyc2FibGVOb2RlKHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGUub3duZXJEb2N1bWVudCA/IG5vZGUub3duZXJEb2N1bWVudC5ib2R5IDogbm9kZS5ib2R5O1xuICB9XG4gIGlmIChpc0hUTUxFbGVtZW50KHBhcmVudE5vZGUpICYmIGlzT3ZlcmZsb3dFbGVtZW50KHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIHBhcmVudE5vZGU7XG4gIH1cbiAgcmV0dXJuIGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKHBhcmVudE5vZGUpO1xufVxuZnVuY3Rpb24gZ2V0T3ZlcmZsb3dBbmNlc3RvcnMobm9kZSwgbGlzdCwgdHJhdmVyc2VJZnJhbWVzKSB7XG4gIHZhciBfbm9kZSRvd25lckRvY3VtZW50MjtcbiAgaWYgKGxpc3QgPT09IHZvaWQgMCkge1xuICAgIGxpc3QgPSBbXTtcbiAgfVxuICBpZiAodHJhdmVyc2VJZnJhbWVzID09PSB2b2lkIDApIHtcbiAgICB0cmF2ZXJzZUlmcmFtZXMgPSB0cnVlO1xuICB9XG4gIGNvbnN0IHNjcm9sbGFibGVBbmNlc3RvciA9IGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKG5vZGUpO1xuICBjb25zdCBpc0JvZHkgPSBzY3JvbGxhYmxlQW5jZXN0b3IgPT09ICgoX25vZGUkb3duZXJEb2N1bWVudDIgPSBub2RlLm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbm9kZSRvd25lckRvY3VtZW50Mi5ib2R5KTtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KHNjcm9sbGFibGVBbmNlc3Rvcik7XG4gIGlmIChpc0JvZHkpIHtcbiAgICBjb25zdCBmcmFtZUVsZW1lbnQgPSBnZXRGcmFtZUVsZW1lbnQod2luKTtcbiAgICByZXR1cm4gbGlzdC5jb25jYXQod2luLCB3aW4udmlzdWFsVmlld3BvcnQgfHwgW10sIGlzT3ZlcmZsb3dFbGVtZW50KHNjcm9sbGFibGVBbmNlc3RvcikgPyBzY3JvbGxhYmxlQW5jZXN0b3IgOiBbXSwgZnJhbWVFbGVtZW50ICYmIHRyYXZlcnNlSWZyYW1lcyA/IGdldE92ZXJmbG93QW5jZXN0b3JzKGZyYW1lRWxlbWVudCkgOiBbXSk7XG4gIH1cbiAgcmV0dXJuIGxpc3QuY29uY2F0KHNjcm9sbGFibGVBbmNlc3RvciwgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMoc2Nyb2xsYWJsZUFuY2VzdG9yLCBbXSwgdHJhdmVyc2VJZnJhbWVzKSk7XG59XG5mdW5jdGlvbiBnZXRGcmFtZUVsZW1lbnQod2luKSB7XG4gIHJldHVybiB3aW4ucGFyZW50ICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZih3aW4ucGFyZW50KSA/IHdpbi5mcmFtZUVsZW1lbnQgOiBudWxsO1xufVxuXG5leHBvcnQgeyBnZXRDb21wdXRlZFN0eWxlLCBnZXRDb250YWluaW5nQmxvY2ssIGdldERvY3VtZW50RWxlbWVudCwgZ2V0RnJhbWVFbGVtZW50LCBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3RvciwgZ2V0Tm9kZU5hbWUsIGdldE5vZGVTY3JvbGwsIGdldE92ZXJmbG93QW5jZXN0b3JzLCBnZXRQYXJlbnROb2RlLCBnZXRXaW5kb3csIGlzQ29udGFpbmluZ0Jsb2NrLCBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQsIGlzTGFzdFRyYXZlcnNhYmxlTm9kZSwgaXNOb2RlLCBpc092ZXJmbG93RWxlbWVudCwgaXNTaGFkb3dSb290LCBpc1RhYmxlRWxlbWVudCwgaXNUb3BMYXllciwgaXNXZWJLaXQgfTtcbiIsImltcG9ydCB7IHJlY3RUb0NsaWVudFJlY3QsIGRldGVjdE92ZXJmbG93IGFzIGRldGVjdE92ZXJmbG93JDEsIG9mZnNldCBhcyBvZmZzZXQkMSwgYXV0b1BsYWNlbWVudCBhcyBhdXRvUGxhY2VtZW50JDEsIHNoaWZ0IGFzIHNoaWZ0JDEsIGZsaXAgYXMgZmxpcCQxLCBzaXplIGFzIHNpemUkMSwgaGlkZSBhcyBoaWRlJDEsIGFycm93IGFzIGFycm93JDEsIGlubGluZSBhcyBpbmxpbmUkMSwgbGltaXRTaGlmdCBhcyBsaW1pdFNoaWZ0JDEsIGNvbXB1dGVQb3NpdGlvbiBhcyBjb21wdXRlUG9zaXRpb24kMSB9IGZyb20gJ0BmbG9hdGluZy11aS9jb3JlJztcbmltcG9ydCB7IHJvdW5kLCBjcmVhdGVDb29yZHMsIG1heCwgbWluLCBmbG9vciB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscyc7XG5pbXBvcnQgeyBnZXRDb21wdXRlZFN0eWxlLCBpc0hUTUxFbGVtZW50LCBpc0VsZW1lbnQsIGdldFdpbmRvdywgaXNXZWJLaXQsIGdldEZyYW1lRWxlbWVudCwgZ2V0Tm9kZVNjcm9sbCwgZ2V0RG9jdW1lbnRFbGVtZW50LCBpc1RvcExheWVyLCBnZXROb2RlTmFtZSwgaXNPdmVyZmxvd0VsZW1lbnQsIGdldE92ZXJmbG93QW5jZXN0b3JzLCBnZXRQYXJlbnROb2RlLCBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUsIGlzQ29udGFpbmluZ0Jsb2NrLCBpc1RhYmxlRWxlbWVudCwgZ2V0Q29udGFpbmluZ0Jsb2NrIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzL2RvbSc7XG5leHBvcnQgeyBnZXRPdmVyZmxvd0FuY2VzdG9ycyB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscy9kb20nO1xuXG5mdW5jdGlvbiBnZXRDc3NEaW1lbnNpb25zKGVsZW1lbnQpIHtcbiAgY29uc3QgY3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgLy8gSW4gdGVzdGluZyBlbnZpcm9ubWVudHMsIHRoZSBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBwcm9wZXJ0aWVzIGFyZSBlbXB0eVxuICAvLyBzdHJpbmdzIGZvciBTVkcgZWxlbWVudHMsIHJldHVybmluZyBOYU4uIEZhbGxiYWNrIHRvIGAwYCBpbiB0aGlzIGNhc2UuXG4gIGxldCB3aWR0aCA9IHBhcnNlRmxvYXQoY3NzLndpZHRoKSB8fCAwO1xuICBsZXQgaGVpZ2h0ID0gcGFyc2VGbG9hdChjc3MuaGVpZ2h0KSB8fCAwO1xuICBjb25zdCBoYXNPZmZzZXQgPSBpc0hUTUxFbGVtZW50KGVsZW1lbnQpO1xuICBjb25zdCBvZmZzZXRXaWR0aCA9IGhhc09mZnNldCA/IGVsZW1lbnQub2Zmc2V0V2lkdGggOiB3aWR0aDtcbiAgY29uc3Qgb2Zmc2V0SGVpZ2h0ID0gaGFzT2Zmc2V0ID8gZWxlbWVudC5vZmZzZXRIZWlnaHQgOiBoZWlnaHQ7XG4gIGNvbnN0IHNob3VsZEZhbGxiYWNrID0gcm91bmQod2lkdGgpICE9PSBvZmZzZXRXaWR0aCB8fCByb3VuZChoZWlnaHQpICE9PSBvZmZzZXRIZWlnaHQ7XG4gIGlmIChzaG91bGRGYWxsYmFjaykge1xuICAgIHdpZHRoID0gb2Zmc2V0V2lkdGg7XG4gICAgaGVpZ2h0ID0gb2Zmc2V0SGVpZ2h0O1xuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgICQ6IHNob3VsZEZhbGxiYWNrXG4gIH07XG59XG5cbmZ1bmN0aW9uIHVud3JhcEVsZW1lbnQoZWxlbWVudCkge1xuICByZXR1cm4gIWlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgOiBlbGVtZW50O1xufVxuXG5mdW5jdGlvbiBnZXRTY2FsZShlbGVtZW50KSB7XG4gIGNvbnN0IGRvbUVsZW1lbnQgPSB1bndyYXBFbGVtZW50KGVsZW1lbnQpO1xuICBpZiAoIWlzSFRNTEVsZW1lbnQoZG9tRWxlbWVudCkpIHtcbiAgICByZXR1cm4gY3JlYXRlQ29vcmRzKDEpO1xuICB9XG4gIGNvbnN0IHJlY3QgPSBkb21FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgICRcbiAgfSA9IGdldENzc0RpbWVuc2lvbnMoZG9tRWxlbWVudCk7XG4gIGxldCB4ID0gKCQgPyByb3VuZChyZWN0LndpZHRoKSA6IHJlY3Qud2lkdGgpIC8gd2lkdGg7XG4gIGxldCB5ID0gKCQgPyByb3VuZChyZWN0LmhlaWdodCkgOiByZWN0LmhlaWdodCkgLyBoZWlnaHQ7XG5cbiAgLy8gMCwgTmFOLCBvciBJbmZpbml0eSBzaG91bGQgYWx3YXlzIGZhbGxiYWNrIHRvIDEuXG5cbiAgaWYgKCF4IHx8ICFOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICB4ID0gMTtcbiAgfVxuICBpZiAoIXkgfHwgIU51bWJlci5pc0Zpbml0ZSh5KSkge1xuICAgIHkgPSAxO1xuICB9XG4gIHJldHVybiB7XG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmNvbnN0IG5vT2Zmc2V0cyA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb29yZHMoMCk7XG5mdW5jdGlvbiBnZXRWaXN1YWxPZmZzZXRzKGVsZW1lbnQpIHtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICBpZiAoIWlzV2ViS2l0KCkgfHwgIXdpbi52aXN1YWxWaWV3cG9ydCkge1xuICAgIHJldHVybiBub09mZnNldHM7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4OiB3aW4udmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdCxcbiAgICB5OiB3aW4udmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wXG4gIH07XG59XG5mdW5jdGlvbiBzaG91bGRBZGRWaXN1YWxPZmZzZXRzKGVsZW1lbnQsIGlzRml4ZWQsIGZsb2F0aW5nT2Zmc2V0UGFyZW50KSB7XG4gIGlmIChpc0ZpeGVkID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkID0gZmFsc2U7XG4gIH1cbiAgaWYgKCFmbG9hdGluZ09mZnNldFBhcmVudCB8fCBpc0ZpeGVkICYmIGZsb2F0aW5nT2Zmc2V0UGFyZW50ICE9PSBnZXRXaW5kb3coZWxlbWVudCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGlzRml4ZWQ7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBpbmNsdWRlU2NhbGUsIGlzRml4ZWRTdHJhdGVneSwgb2Zmc2V0UGFyZW50KSB7XG4gIGlmIChpbmNsdWRlU2NhbGUgPT09IHZvaWQgMCkge1xuICAgIGluY2x1ZGVTY2FsZSA9IGZhbHNlO1xuICB9XG4gIGlmIChpc0ZpeGVkU3RyYXRlZ3kgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWRTdHJhdGVneSA9IGZhbHNlO1xuICB9XG4gIGNvbnN0IGNsaWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCBkb21FbGVtZW50ID0gdW53cmFwRWxlbWVudChlbGVtZW50KTtcbiAgbGV0IHNjYWxlID0gY3JlYXRlQ29vcmRzKDEpO1xuICBpZiAoaW5jbHVkZVNjYWxlKSB7XG4gICAgaWYgKG9mZnNldFBhcmVudCkge1xuICAgICAgaWYgKGlzRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICAgIHNjYWxlID0gZ2V0U2NhbGUob2Zmc2V0UGFyZW50KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2NhbGUgPSBnZXRTY2FsZShlbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgY29uc3QgdmlzdWFsT2Zmc2V0cyA9IHNob3VsZEFkZFZpc3VhbE9mZnNldHMoZG9tRWxlbWVudCwgaXNGaXhlZFN0cmF0ZWd5LCBvZmZzZXRQYXJlbnQpID8gZ2V0VmlzdWFsT2Zmc2V0cyhkb21FbGVtZW50KSA6IGNyZWF0ZUNvb3JkcygwKTtcbiAgbGV0IHggPSAoY2xpZW50UmVjdC5sZWZ0ICsgdmlzdWFsT2Zmc2V0cy54KSAvIHNjYWxlLng7XG4gIGxldCB5ID0gKGNsaWVudFJlY3QudG9wICsgdmlzdWFsT2Zmc2V0cy55KSAvIHNjYWxlLnk7XG4gIGxldCB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGggLyBzY2FsZS54O1xuICBsZXQgaGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQgLyBzY2FsZS55O1xuICBpZiAoZG9tRWxlbWVudCkge1xuICAgIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhkb21FbGVtZW50KTtcbiAgICBjb25zdCBvZmZzZXRXaW4gPSBvZmZzZXRQYXJlbnQgJiYgaXNFbGVtZW50KG9mZnNldFBhcmVudCkgPyBnZXRXaW5kb3cob2Zmc2V0UGFyZW50KSA6IG9mZnNldFBhcmVudDtcbiAgICBsZXQgY3VycmVudFdpbiA9IHdpbjtcbiAgICBsZXQgY3VycmVudElGcmFtZSA9IGdldEZyYW1lRWxlbWVudChjdXJyZW50V2luKTtcbiAgICB3aGlsZSAoY3VycmVudElGcmFtZSAmJiBvZmZzZXRQYXJlbnQgJiYgb2Zmc2V0V2luICE9PSBjdXJyZW50V2luKSB7XG4gICAgICBjb25zdCBpZnJhbWVTY2FsZSA9IGdldFNjYWxlKGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY29uc3QgaWZyYW1lUmVjdCA9IGN1cnJlbnRJRnJhbWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY29uc3QgbGVmdCA9IGlmcmFtZVJlY3QubGVmdCArIChjdXJyZW50SUZyYW1lLmNsaWVudExlZnQgKyBwYXJzZUZsb2F0KGNzcy5wYWRkaW5nTGVmdCkpICogaWZyYW1lU2NhbGUueDtcbiAgICAgIGNvbnN0IHRvcCA9IGlmcmFtZVJlY3QudG9wICsgKGN1cnJlbnRJRnJhbWUuY2xpZW50VG9wICsgcGFyc2VGbG9hdChjc3MucGFkZGluZ1RvcCkpICogaWZyYW1lU2NhbGUueTtcbiAgICAgIHggKj0gaWZyYW1lU2NhbGUueDtcbiAgICAgIHkgKj0gaWZyYW1lU2NhbGUueTtcbiAgICAgIHdpZHRoICo9IGlmcmFtZVNjYWxlLng7XG4gICAgICBoZWlnaHQgKj0gaWZyYW1lU2NhbGUueTtcbiAgICAgIHggKz0gbGVmdDtcbiAgICAgIHkgKz0gdG9wO1xuICAgICAgY3VycmVudFdpbiA9IGdldFdpbmRvdyhjdXJyZW50SUZyYW1lKTtcbiAgICAgIGN1cnJlbnRJRnJhbWUgPSBnZXRGcmFtZUVsZW1lbnQoY3VycmVudFdpbik7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0VG9DbGllbnRSZWN0KHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH0pO1xufVxuXG4vLyBJZiA8aHRtbD4gaGFzIGEgQ1NTIHdpZHRoIGdyZWF0ZXIgdGhhbiB0aGUgdmlld3BvcnQsIHRoZW4gdGhpcyB3aWxsIGJlXG4vLyBpbmNvcnJlY3QgZm9yIFJUTC5cbmZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCwgcmVjdCkge1xuICBjb25zdCBsZWZ0U2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChlbGVtZW50KS5zY3JvbGxMZWZ0O1xuICBpZiAoIXJlY3QpIHtcbiAgICByZXR1cm4gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSkubGVmdCArIGxlZnRTY3JvbGw7XG4gIH1cbiAgcmV0dXJuIHJlY3QubGVmdCArIGxlZnRTY3JvbGw7XG59XG5cbmZ1bmN0aW9uIGdldEhUTUxPZmZzZXQoZG9jdW1lbnRFbGVtZW50LCBzY3JvbGwsIGlnbm9yZVNjcm9sbGJhclgpIHtcbiAgaWYgKGlnbm9yZVNjcm9sbGJhclggPT09IHZvaWQgMCkge1xuICAgIGlnbm9yZVNjcm9sbGJhclggPSBmYWxzZTtcbiAgfVxuICBjb25zdCBodG1sUmVjdCA9IGRvY3VtZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgeCA9IGh0bWxSZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIChpZ25vcmVTY3JvbGxiYXJYID8gMCA6XG4gIC8vIFJUTCA8Ym9keT4gc2Nyb2xsYmFyLlxuICBnZXRXaW5kb3dTY3JvbGxCYXJYKGRvY3VtZW50RWxlbWVudCwgaHRtbFJlY3QpKTtcbiAgY29uc3QgeSA9IGh0bWxSZWN0LnRvcCArIHNjcm9sbC5zY3JvbGxUb3A7XG4gIHJldHVybiB7XG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0KF9yZWYpIHtcbiAgbGV0IHtcbiAgICBlbGVtZW50cyxcbiAgICByZWN0LFxuICAgIG9mZnNldFBhcmVudCxcbiAgICBzdHJhdGVneVxuICB9ID0gX3JlZjtcbiAgY29uc3QgaXNGaXhlZCA9IHN0cmF0ZWd5ID09PSAnZml4ZWQnO1xuICBjb25zdCBkb2N1bWVudEVsZW1lbnQgPSBnZXREb2N1bWVudEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgY29uc3QgdG9wTGF5ZXIgPSBlbGVtZW50cyA/IGlzVG9wTGF5ZXIoZWxlbWVudHMuZmxvYXRpbmcpIDogZmFsc2U7XG4gIGlmIChvZmZzZXRQYXJlbnQgPT09IGRvY3VtZW50RWxlbWVudCB8fCB0b3BMYXllciAmJiBpc0ZpeGVkKSB7XG4gICAgcmV0dXJuIHJlY3Q7XG4gIH1cbiAgbGV0IHNjcm9sbCA9IHtcbiAgICBzY3JvbGxMZWZ0OiAwLFxuICAgIHNjcm9sbFRvcDogMFxuICB9O1xuICBsZXQgc2NhbGUgPSBjcmVhdGVDb29yZHMoMSk7XG4gIGNvbnN0IG9mZnNldHMgPSBjcmVhdGVDb29yZHMoMCk7XG4gIGNvbnN0IGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBpZiAoaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgfHwgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkKSB7XG4gICAgaWYgKGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgIT09ICdib2R5JyB8fCBpc092ZXJmbG93RWxlbWVudChkb2N1bWVudEVsZW1lbnQpKSB7XG4gICAgICBzY3JvbGwgPSBnZXROb2RlU2Nyb2xsKG9mZnNldFBhcmVudCk7XG4gICAgfVxuICAgIGlmIChpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCkpIHtcbiAgICAgIGNvbnN0IG9mZnNldFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qob2Zmc2V0UGFyZW50KTtcbiAgICAgIHNjYWxlID0gZ2V0U2NhbGUob2Zmc2V0UGFyZW50KTtcbiAgICAgIG9mZnNldHMueCA9IG9mZnNldFJlY3QueCArIG9mZnNldFBhcmVudC5jbGllbnRMZWZ0O1xuICAgICAgb2Zmc2V0cy55ID0gb2Zmc2V0UmVjdC55ICsgb2Zmc2V0UGFyZW50LmNsaWVudFRvcDtcbiAgICB9XG4gIH1cbiAgY29uc3QgaHRtbE9mZnNldCA9IGRvY3VtZW50RWxlbWVudCAmJiAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQgPyBnZXRIVE1MT2Zmc2V0KGRvY3VtZW50RWxlbWVudCwgc2Nyb2xsLCB0cnVlKSA6IGNyZWF0ZUNvb3JkcygwKTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogcmVjdC53aWR0aCAqIHNjYWxlLngsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodCAqIHNjYWxlLnksXG4gICAgeDogcmVjdC54ICogc2NhbGUueCAtIHNjcm9sbC5zY3JvbGxMZWZ0ICogc2NhbGUueCArIG9mZnNldHMueCArIGh0bWxPZmZzZXQueCxcbiAgICB5OiByZWN0LnkgKiBzY2FsZS55IC0gc2Nyb2xsLnNjcm9sbFRvcCAqIHNjYWxlLnkgKyBvZmZzZXRzLnkgKyBodG1sT2Zmc2V0LnlcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdHMoZWxlbWVudCkge1xuICByZXR1cm4gQXJyYXkuZnJvbShlbGVtZW50LmdldENsaWVudFJlY3RzKCkpO1xufVxuXG4vLyBHZXRzIHRoZSBlbnRpcmUgc2l6ZSBvZiB0aGUgc2Nyb2xsYWJsZSBkb2N1bWVudCBhcmVhLCBldmVuIGV4dGVuZGluZyBvdXRzaWRlXG4vLyBvZiB0aGUgYDxodG1sPmAgYW5kIGA8Ym9keT5gIHJlY3QgYm91bmRzIGlmIGhvcml6b250YWxseSBzY3JvbGxhYmxlLlxuZnVuY3Rpb24gZ2V0RG9jdW1lbnRSZWN0KGVsZW1lbnQpIHtcbiAgY29uc3QgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgY29uc3Qgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChlbGVtZW50KTtcbiAgY29uc3QgYm9keSA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5ib2R5O1xuICBjb25zdCB3aWR0aCA9IG1heChodG1sLnNjcm9sbFdpZHRoLCBodG1sLmNsaWVudFdpZHRoLCBib2R5LnNjcm9sbFdpZHRoLCBib2R5LmNsaWVudFdpZHRoKTtcbiAgY29uc3QgaGVpZ2h0ID0gbWF4KGh0bWwuc2Nyb2xsSGVpZ2h0LCBodG1sLmNsaWVudEhlaWdodCwgYm9keS5zY3JvbGxIZWlnaHQsIGJvZHkuY2xpZW50SGVpZ2h0KTtcbiAgbGV0IHggPSAtc2Nyb2xsLnNjcm9sbExlZnQgKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpO1xuICBjb25zdCB5ID0gLXNjcm9sbC5zY3JvbGxUb3A7XG4gIGlmIChnZXRDb21wdXRlZFN0eWxlKGJvZHkpLmRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICB4ICs9IG1heChodG1sLmNsaWVudFdpZHRoLCBib2R5LmNsaWVudFdpZHRoKSAtIHdpZHRoO1xuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRWaWV3cG9ydFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpIHtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICBjb25zdCBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICBjb25zdCB2aXN1YWxWaWV3cG9ydCA9IHdpbi52aXN1YWxWaWV3cG9ydDtcbiAgbGV0IHdpZHRoID0gaHRtbC5jbGllbnRXaWR0aDtcbiAgbGV0IGhlaWdodCA9IGh0bWwuY2xpZW50SGVpZ2h0O1xuICBsZXQgeCA9IDA7XG4gIGxldCB5ID0gMDtcbiAgaWYgKHZpc3VhbFZpZXdwb3J0KSB7XG4gICAgd2lkdGggPSB2aXN1YWxWaWV3cG9ydC53aWR0aDtcbiAgICBoZWlnaHQgPSB2aXN1YWxWaWV3cG9ydC5oZWlnaHQ7XG4gICAgY29uc3QgdmlzdWFsVmlld3BvcnRCYXNlZCA9IGlzV2ViS2l0KCk7XG4gICAgaWYgKCF2aXN1YWxWaWV3cG9ydEJhc2VkIHx8IHZpc3VhbFZpZXdwb3J0QmFzZWQgJiYgc3RyYXRlZ3kgPT09ICdmaXhlZCcpIHtcbiAgICAgIHggPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0O1xuICAgICAgeSA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbi8vIFJldHVybnMgdGhlIGlubmVyIGNsaWVudCByZWN0LCBzdWJ0cmFjdGluZyBzY3JvbGxiYXJzIGlmIHByZXNlbnQuXG5mdW5jdGlvbiBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICBjb25zdCBjbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHRydWUsIHN0cmF0ZWd5ID09PSAnZml4ZWQnKTtcbiAgY29uc3QgdG9wID0gY2xpZW50UmVjdC50b3AgKyBlbGVtZW50LmNsaWVudFRvcDtcbiAgY29uc3QgbGVmdCA9IGNsaWVudFJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50TGVmdDtcbiAgY29uc3Qgc2NhbGUgPSBpc0hUTUxFbGVtZW50KGVsZW1lbnQpID8gZ2V0U2NhbGUoZWxlbWVudCkgOiBjcmVhdGVDb29yZHMoMSk7XG4gIGNvbnN0IHdpZHRoID0gZWxlbWVudC5jbGllbnRXaWR0aCAqIHNjYWxlLng7XG4gIGNvbnN0IGhlaWdodCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0ICogc2NhbGUueTtcbiAgY29uc3QgeCA9IGxlZnQgKiBzY2FsZS54O1xuICBjb25zdCB5ID0gdG9wICogc2NhbGUueTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0RnJvbUNsaXBwaW5nQW5jZXN0b3IoZWxlbWVudCwgY2xpcHBpbmdBbmNlc3Rvciwgc3RyYXRlZ3kpIHtcbiAgbGV0IHJlY3Q7XG4gIGlmIChjbGlwcGluZ0FuY2VzdG9yID09PSAndmlld3BvcnQnKSB7XG4gICAgcmVjdCA9IGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSk7XG4gIH0gZWxzZSBpZiAoY2xpcHBpbmdBbmNlc3RvciA9PT0gJ2RvY3VtZW50Jykge1xuICAgIHJlY3QgPSBnZXREb2N1bWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKTtcbiAgfSBlbHNlIGlmIChpc0VsZW1lbnQoY2xpcHBpbmdBbmNlc3RvcikpIHtcbiAgICByZWN0ID0gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoY2xpcHBpbmdBbmNlc3Rvciwgc3RyYXRlZ3kpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHZpc3VhbE9mZnNldHMgPSBnZXRWaXN1YWxPZmZzZXRzKGVsZW1lbnQpO1xuICAgIHJlY3QgPSB7XG4gICAgICB4OiBjbGlwcGluZ0FuY2VzdG9yLnggLSB2aXN1YWxPZmZzZXRzLngsXG4gICAgICB5OiBjbGlwcGluZ0FuY2VzdG9yLnkgLSB2aXN1YWxPZmZzZXRzLnksXG4gICAgICB3aWR0aDogY2xpcHBpbmdBbmNlc3Rvci53aWR0aCxcbiAgICAgIGhlaWdodDogY2xpcHBpbmdBbmNlc3Rvci5oZWlnaHRcbiAgICB9O1xuICB9XG4gIHJldHVybiByZWN0VG9DbGllbnRSZWN0KHJlY3QpO1xufVxuZnVuY3Rpb24gaGFzRml4ZWRQb3NpdGlvbkFuY2VzdG9yKGVsZW1lbnQsIHN0b3BOb2RlKSB7XG4gIGNvbnN0IHBhcmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuICBpZiAocGFyZW50Tm9kZSA9PT0gc3RvcE5vZGUgfHwgIWlzRWxlbWVudChwYXJlbnROb2RlKSB8fCBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUocGFyZW50Tm9kZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGdldENvbXB1dGVkU3R5bGUocGFyZW50Tm9kZSkucG9zaXRpb24gPT09ICdmaXhlZCcgfHwgaGFzRml4ZWRQb3NpdGlvbkFuY2VzdG9yKHBhcmVudE5vZGUsIHN0b3BOb2RlKTtcbn1cblxuLy8gQSBcImNsaXBwaW5nIGFuY2VzdG9yXCIgaXMgYW4gYG92ZXJmbG93YCBlbGVtZW50IHdpdGggdGhlIGNoYXJhY3RlcmlzdGljIG9mXG4vLyBjbGlwcGluZyAob3IgaGlkaW5nKSBjaGlsZCBlbGVtZW50cy4gVGhpcyByZXR1cm5zIGFsbCBjbGlwcGluZyBhbmNlc3RvcnNcbi8vIG9mIHRoZSBnaXZlbiBlbGVtZW50IHVwIHRoZSB0cmVlLlxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdFbGVtZW50QW5jZXN0b3JzKGVsZW1lbnQsIGNhY2hlKSB7XG4gIGNvbnN0IGNhY2hlZFJlc3VsdCA9IGNhY2hlLmdldChlbGVtZW50KTtcbiAgaWYgKGNhY2hlZFJlc3VsdCkge1xuICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gIH1cbiAgbGV0IHJlc3VsdCA9IGdldE92ZXJmbG93QW5jZXN0b3JzKGVsZW1lbnQsIFtdLCBmYWxzZSkuZmlsdGVyKGVsID0+IGlzRWxlbWVudChlbCkgJiYgZ2V0Tm9kZU5hbWUoZWwpICE9PSAnYm9keScpO1xuICBsZXQgY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUgPSBudWxsO1xuICBjb25zdCBlbGVtZW50SXNGaXhlZCA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCc7XG4gIGxldCBjdXJyZW50Tm9kZSA9IGVsZW1lbnRJc0ZpeGVkID8gZ2V0UGFyZW50Tm9kZShlbGVtZW50KSA6IGVsZW1lbnQ7XG5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcbiAgd2hpbGUgKGlzRWxlbWVudChjdXJyZW50Tm9kZSkgJiYgIWlzTGFzdFRyYXZlcnNhYmxlTm9kZShjdXJyZW50Tm9kZSkpIHtcbiAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShjdXJyZW50Tm9kZSk7XG4gICAgY29uc3QgY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgPSBpc0NvbnRhaW5pbmdCbG9jayhjdXJyZW50Tm9kZSk7XG4gICAgaWYgKCFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiBjb21wdXRlZFN0eWxlLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgICBjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSA9IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHNob3VsZERyb3BDdXJyZW50Tm9kZSA9IGVsZW1lbnRJc0ZpeGVkID8gIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmICFjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSA6ICFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiBjb21wdXRlZFN0eWxlLnBvc2l0aW9uID09PSAnc3RhdGljJyAmJiAhIWN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlICYmIFsnYWJzb2x1dGUnLCAnZml4ZWQnXS5pbmNsdWRlcyhjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZS5wb3NpdGlvbikgfHwgaXNPdmVyZmxvd0VsZW1lbnQoY3VycmVudE5vZGUpICYmICFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiBoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IoZWxlbWVudCwgY3VycmVudE5vZGUpO1xuICAgIGlmIChzaG91bGREcm9wQ3VycmVudE5vZGUpIHtcbiAgICAgIC8vIERyb3Agbm9uLWNvbnRhaW5pbmcgYmxvY2tzLlxuICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcihhbmNlc3RvciA9PiBhbmNlc3RvciAhPT0gY3VycmVudE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZWNvcmQgbGFzdCBjb250YWluaW5nIGJsb2NrIGZvciBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgIGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gY29tcHV0ZWRTdHlsZTtcbiAgICB9XG4gICAgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGN1cnJlbnROb2RlKTtcbiAgfVxuICBjYWNoZS5zZXQoZWxlbWVudCwgcmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gR2V0cyB0aGUgbWF4aW11bSBhcmVhIHRoYXQgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiBkdWUgdG8gYW55IG51bWJlciBvZlxuLy8gY2xpcHBpbmcgYW5jZXN0b3JzLlxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdSZWN0KF9yZWYpIHtcbiAgbGV0IHtcbiAgICBlbGVtZW50LFxuICAgIGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeSxcbiAgICBzdHJhdGVneVxuICB9ID0gX3JlZjtcbiAgY29uc3QgZWxlbWVudENsaXBwaW5nQW5jZXN0b3JzID0gYm91bmRhcnkgPT09ICdjbGlwcGluZ0FuY2VzdG9ycycgPyBpc1RvcExheWVyKGVsZW1lbnQpID8gW10gOiBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnMoZWxlbWVudCwgdGhpcy5fYykgOiBbXS5jb25jYXQoYm91bmRhcnkpO1xuICBjb25zdCBjbGlwcGluZ0FuY2VzdG9ycyA9IFsuLi5lbGVtZW50Q2xpcHBpbmdBbmNlc3RvcnMsIHJvb3RCb3VuZGFyeV07XG4gIGNvbnN0IGZpcnN0Q2xpcHBpbmdBbmNlc3RvciA9IGNsaXBwaW5nQW5jZXN0b3JzWzBdO1xuICBjb25zdCBjbGlwcGluZ1JlY3QgPSBjbGlwcGluZ0FuY2VzdG9ycy5yZWR1Y2UoKGFjY1JlY3QsIGNsaXBwaW5nQW5jZXN0b3IpID0+IHtcbiAgICBjb25zdCByZWN0ID0gZ2V0Q2xpZW50UmVjdEZyb21DbGlwcGluZ0FuY2VzdG9yKGVsZW1lbnQsIGNsaXBwaW5nQW5jZXN0b3IsIHN0cmF0ZWd5KTtcbiAgICBhY2NSZWN0LnRvcCA9IG1heChyZWN0LnRvcCwgYWNjUmVjdC50b3ApO1xuICAgIGFjY1JlY3QucmlnaHQgPSBtaW4ocmVjdC5yaWdodCwgYWNjUmVjdC5yaWdodCk7XG4gICAgYWNjUmVjdC5ib3R0b20gPSBtaW4ocmVjdC5ib3R0b20sIGFjY1JlY3QuYm90dG9tKTtcbiAgICBhY2NSZWN0LmxlZnQgPSBtYXgocmVjdC5sZWZ0LCBhY2NSZWN0LmxlZnQpO1xuICAgIHJldHVybiBhY2NSZWN0O1xuICB9LCBnZXRDbGllbnRSZWN0RnJvbUNsaXBwaW5nQW5jZXN0b3IoZWxlbWVudCwgZmlyc3RDbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSkpO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiBjbGlwcGluZ1JlY3QucmlnaHQgLSBjbGlwcGluZ1JlY3QubGVmdCxcbiAgICBoZWlnaHQ6IGNsaXBwaW5nUmVjdC5ib3R0b20gLSBjbGlwcGluZ1JlY3QudG9wLFxuICAgIHg6IGNsaXBwaW5nUmVjdC5sZWZ0LFxuICAgIHk6IGNsaXBwaW5nUmVjdC50b3BcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RGltZW5zaW9ucyhlbGVtZW50KSB7XG4gIGNvbnN0IHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHRcbiAgfSA9IGdldENzc0RpbWVuc2lvbnMoZWxlbWVudCk7XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFJlY3RSZWxhdGl2ZVRvT2Zmc2V0UGFyZW50KGVsZW1lbnQsIG9mZnNldFBhcmVudCwgc3RyYXRlZ3kpIHtcbiAgY29uc3QgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGNvbnN0IGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBjb25zdCBpc0ZpeGVkID0gc3RyYXRlZ3kgPT09ICdmaXhlZCc7XG4gIGNvbnN0IHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgdHJ1ZSwgaXNGaXhlZCwgb2Zmc2V0UGFyZW50KTtcbiAgbGV0IHNjcm9sbCA9IHtcbiAgICBzY3JvbGxMZWZ0OiAwLFxuICAgIHNjcm9sbFRvcDogMFxuICB9O1xuICBjb25zdCBvZmZzZXRzID0gY3JlYXRlQ29vcmRzKDApO1xuICBpZiAoaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgfHwgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkKSB7XG4gICAgaWYgKGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgIT09ICdib2R5JyB8fCBpc092ZXJmbG93RWxlbWVudChkb2N1bWVudEVsZW1lbnQpKSB7XG4gICAgICBzY3JvbGwgPSBnZXROb2RlU2Nyb2xsKG9mZnNldFBhcmVudCk7XG4gICAgfVxuICAgIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCkge1xuICAgICAgY29uc3Qgb2Zmc2V0UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChvZmZzZXRQYXJlbnQsIHRydWUsIGlzRml4ZWQsIG9mZnNldFBhcmVudCk7XG4gICAgICBvZmZzZXRzLnggPSBvZmZzZXRSZWN0LnggKyBvZmZzZXRQYXJlbnQuY2xpZW50TGVmdDtcbiAgICAgIG9mZnNldHMueSA9IG9mZnNldFJlY3QueSArIG9mZnNldFBhcmVudC5jbGllbnRUb3A7XG4gICAgfSBlbHNlIGlmIChkb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIC8vIElmIHRoZSA8Ym9keT4gc2Nyb2xsYmFyIGFwcGVhcnMgb24gdGhlIGxlZnQgKGUuZy4gUlRMIHN5c3RlbXMpLiBVc2VcbiAgICAgIC8vIEZpcmVmb3ggd2l0aCBsYXlvdXQuc2Nyb2xsYmFyLnNpZGUgPSAzIGluIGFib3V0OmNvbmZpZyB0byB0ZXN0IHRoaXMuXG4gICAgICBvZmZzZXRzLnggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGRvY3VtZW50RWxlbWVudCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGh0bWxPZmZzZXQgPSBkb2N1bWVudEVsZW1lbnQgJiYgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkID8gZ2V0SFRNTE9mZnNldChkb2N1bWVudEVsZW1lbnQsIHNjcm9sbCkgOiBjcmVhdGVDb29yZHMoMCk7XG4gIGNvbnN0IHggPSByZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIG9mZnNldHMueCAtIGh0bWxPZmZzZXQueDtcbiAgY29uc3QgeSA9IHJlY3QudG9wICsgc2Nyb2xsLnNjcm9sbFRvcCAtIG9mZnNldHMueSAtIGh0bWxPZmZzZXQueTtcbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHksXG4gICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc1N0YXRpY1Bvc2l0aW9uZWQoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYyc7XG59XG5cbmZ1bmN0aW9uIGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCwgcG9seWZpbGwpIHtcbiAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAocG9seWZpbGwpIHtcbiAgICByZXR1cm4gcG9seWZpbGwoZWxlbWVudCk7XG4gIH1cbiAgbGV0IHJhd09mZnNldFBhcmVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50O1xuXG4gIC8vIEZpcmVmb3ggcmV0dXJucyB0aGUgPGh0bWw+IGVsZW1lbnQgYXMgdGhlIG9mZnNldFBhcmVudCBpZiBpdCdzIG5vbi1zdGF0aWMsXG4gIC8vIHdoaWxlIENocm9tZSBhbmQgU2FmYXJpIHJldHVybiB0aGUgPGJvZHk+IGVsZW1lbnQuIFRoZSA8Ym9keT4gZWxlbWVudCBtdXN0XG4gIC8vIGJlIHVzZWQgdG8gcGVyZm9ybSB0aGUgY29ycmVjdCBjYWxjdWxhdGlvbnMgZXZlbiBpZiB0aGUgPGh0bWw+IGVsZW1lbnQgaXNcbiAgLy8gbm9uLXN0YXRpYy5cbiAgaWYgKGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSA9PT0gcmF3T2Zmc2V0UGFyZW50KSB7XG4gICAgcmF3T2Zmc2V0UGFyZW50ID0gcmF3T2Zmc2V0UGFyZW50Lm93bmVyRG9jdW1lbnQuYm9keTtcbiAgfVxuICByZXR1cm4gcmF3T2Zmc2V0UGFyZW50O1xufVxuXG4vLyBHZXRzIHRoZSBjbG9zZXN0IGFuY2VzdG9yIHBvc2l0aW9uZWQgZWxlbWVudC4gSGFuZGxlcyBzb21lIGVkZ2UgY2FzZXMsXG4vLyBzdWNoIGFzIHRhYmxlIGFuY2VzdG9ycyBhbmQgY3Jvc3MgYnJvd3NlciBidWdzLlxuZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQsIHBvbHlmaWxsKSB7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgaWYgKGlzVG9wTGF5ZXIoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gd2luO1xuICB9XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIGxldCBzdmdPZmZzZXRQYXJlbnQgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuICAgIHdoaWxlIChzdmdPZmZzZXRQYXJlbnQgJiYgIWlzTGFzdFRyYXZlcnNhYmxlTm9kZShzdmdPZmZzZXRQYXJlbnQpKSB7XG4gICAgICBpZiAoaXNFbGVtZW50KHN2Z09mZnNldFBhcmVudCkgJiYgIWlzU3RhdGljUG9zaXRpb25lZChzdmdPZmZzZXRQYXJlbnQpKSB7XG4gICAgICAgIHJldHVybiBzdmdPZmZzZXRQYXJlbnQ7XG4gICAgICB9XG4gICAgICBzdmdPZmZzZXRQYXJlbnQgPSBnZXRQYXJlbnROb2RlKHN2Z09mZnNldFBhcmVudCk7XG4gICAgfVxuICAgIHJldHVybiB3aW47XG4gIH1cbiAgbGV0IG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCwgcG9seWZpbGwpO1xuICB3aGlsZSAob2Zmc2V0UGFyZW50ICYmIGlzVGFibGVFbGVtZW50KG9mZnNldFBhcmVudCkgJiYgaXNTdGF0aWNQb3NpdGlvbmVkKG9mZnNldFBhcmVudCkpIHtcbiAgICBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KG9mZnNldFBhcmVudCwgcG9seWZpbGwpO1xuICB9XG4gIGlmIChvZmZzZXRQYXJlbnQgJiYgaXNMYXN0VHJhdmVyc2FibGVOb2RlKG9mZnNldFBhcmVudCkgJiYgaXNTdGF0aWNQb3NpdGlvbmVkKG9mZnNldFBhcmVudCkgJiYgIWlzQ29udGFpbmluZ0Jsb2NrKG9mZnNldFBhcmVudCkpIHtcbiAgICByZXR1cm4gd2luO1xuICB9XG4gIHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHx8IHdpbjtcbn1cblxuY29uc3QgZ2V0RWxlbWVudFJlY3RzID0gYXN5bmMgZnVuY3Rpb24gKGRhdGEpIHtcbiAgY29uc3QgZ2V0T2Zmc2V0UGFyZW50Rm4gPSB0aGlzLmdldE9mZnNldFBhcmVudCB8fCBnZXRPZmZzZXRQYXJlbnQ7XG4gIGNvbnN0IGdldERpbWVuc2lvbnNGbiA9IHRoaXMuZ2V0RGltZW5zaW9ucztcbiAgY29uc3QgZmxvYXRpbmdEaW1lbnNpb25zID0gYXdhaXQgZ2V0RGltZW5zaW9uc0ZuKGRhdGEuZmxvYXRpbmcpO1xuICByZXR1cm4ge1xuICAgIHJlZmVyZW5jZTogZ2V0UmVjdFJlbGF0aXZlVG9PZmZzZXRQYXJlbnQoZGF0YS5yZWZlcmVuY2UsIGF3YWl0IGdldE9mZnNldFBhcmVudEZuKGRhdGEuZmxvYXRpbmcpLCBkYXRhLnN0cmF0ZWd5KSxcbiAgICBmbG9hdGluZzoge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDAsXG4gICAgICB3aWR0aDogZmxvYXRpbmdEaW1lbnNpb25zLndpZHRoLFxuICAgICAgaGVpZ2h0OiBmbG9hdGluZ0RpbWVuc2lvbnMuaGVpZ2h0XG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gaXNSVEwoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5kaXJlY3Rpb24gPT09ICdydGwnO1xufVxuXG5jb25zdCBwbGF0Zm9ybSA9IHtcbiAgY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3QsXG4gIGdldERvY3VtZW50RWxlbWVudCxcbiAgZ2V0Q2xpcHBpbmdSZWN0LFxuICBnZXRPZmZzZXRQYXJlbnQsXG4gIGdldEVsZW1lbnRSZWN0cyxcbiAgZ2V0Q2xpZW50UmVjdHMsXG4gIGdldERpbWVuc2lvbnMsXG4gIGdldFNjYWxlLFxuICBpc0VsZW1lbnQsXG4gIGlzUlRMXG59O1xuXG5mdW5jdGlvbiByZWN0c0FyZUVxdWFsKGEsIGIpIHtcbiAgcmV0dXJuIGEueCA9PT0gYi54ICYmIGEueSA9PT0gYi55ICYmIGEud2lkdGggPT09IGIud2lkdGggJiYgYS5oZWlnaHQgPT09IGIuaGVpZ2h0O1xufVxuXG4vLyBodHRwczovL3NhbXRob3IuYXUvMjAyMS9vYnNlcnZpbmctZG9tL1xuZnVuY3Rpb24gb2JzZXJ2ZU1vdmUoZWxlbWVudCwgb25Nb3ZlKSB7XG4gIGxldCBpbyA9IG51bGw7XG4gIGxldCB0aW1lb3V0SWQ7XG4gIGNvbnN0IHJvb3QgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgdmFyIF9pbztcbiAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAoX2lvID0gaW8pID09IG51bGwgfHwgX2lvLmRpc2Nvbm5lY3QoKTtcbiAgICBpbyA9IG51bGw7XG4gIH1cbiAgZnVuY3Rpb24gcmVmcmVzaChza2lwLCB0aHJlc2hvbGQpIHtcbiAgICBpZiAoc2tpcCA9PT0gdm9pZCAwKSB7XG4gICAgICBza2lwID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aHJlc2hvbGQgPT09IHZvaWQgMCkge1xuICAgICAgdGhyZXNob2xkID0gMTtcbiAgICB9XG4gICAgY2xlYW51cCgpO1xuICAgIGNvbnN0IGVsZW1lbnRSZWN0Rm9yUm9vdE1hcmdpbiA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3Qge1xuICAgICAgbGVmdCxcbiAgICAgIHRvcCxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0XG4gICAgfSA9IGVsZW1lbnRSZWN0Rm9yUm9vdE1hcmdpbjtcbiAgICBpZiAoIXNraXApIHtcbiAgICAgIG9uTW92ZSgpO1xuICAgIH1cbiAgICBpZiAoIXdpZHRoIHx8ICFoZWlnaHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5zZXRUb3AgPSBmbG9vcih0b3ApO1xuICAgIGNvbnN0IGluc2V0UmlnaHQgPSBmbG9vcihyb290LmNsaWVudFdpZHRoIC0gKGxlZnQgKyB3aWR0aCkpO1xuICAgIGNvbnN0IGluc2V0Qm90dG9tID0gZmxvb3Iocm9vdC5jbGllbnRIZWlnaHQgLSAodG9wICsgaGVpZ2h0KSk7XG4gICAgY29uc3QgaW5zZXRMZWZ0ID0gZmxvb3IobGVmdCk7XG4gICAgY29uc3Qgcm9vdE1hcmdpbiA9IC1pbnNldFRvcCArIFwicHggXCIgKyAtaW5zZXRSaWdodCArIFwicHggXCIgKyAtaW5zZXRCb3R0b20gKyBcInB4IFwiICsgLWluc2V0TGVmdCArIFwicHhcIjtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgcm9vdE1hcmdpbixcbiAgICAgIHRocmVzaG9sZDogbWF4KDAsIG1pbigxLCB0aHJlc2hvbGQpKSB8fCAxXG4gICAgfTtcbiAgICBsZXQgaXNGaXJzdFVwZGF0ZSA9IHRydWU7XG4gICAgZnVuY3Rpb24gaGFuZGxlT2JzZXJ2ZShlbnRyaWVzKSB7XG4gICAgICBjb25zdCByYXRpbyA9IGVudHJpZXNbMF0uaW50ZXJzZWN0aW9uUmF0aW87XG4gICAgICBpZiAocmF0aW8gIT09IHRocmVzaG9sZCkge1xuICAgICAgICBpZiAoIWlzRmlyc3RVcGRhdGUpIHtcbiAgICAgICAgICByZXR1cm4gcmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcmF0aW8pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgcmVmZXJlbmNlIGlzIGNsaXBwZWQsIHRoZSByYXRpbyBpcyAwLiBUaHJvdHRsZSB0aGUgcmVmcmVzaFxuICAgICAgICAgIC8vIHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcCBvZiB1cGRhdGVzLlxuICAgICAgICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgcmVmcmVzaChmYWxzZSwgMWUtNyk7XG4gICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVmcmVzaChmYWxzZSwgcmF0aW8pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocmF0aW8gPT09IDEgJiYgIXJlY3RzQXJlRXF1YWwoZWxlbWVudFJlY3RGb3JSb290TWFyZ2luLCBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSkge1xuICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgZXZlbiB0aG91Z2ggdGhlIHJhdGlvIGlzIHJlcG9ydGVkIGFzIDEsIHRoZVxuICAgICAgICAvLyBlbGVtZW50IGlzIG5vdCBhY3R1YWxseSBmdWxseSB3aXRoaW4gdGhlIEludGVyc2VjdGlvbk9ic2VydmVyJ3Mgcm9vdFxuICAgICAgICAvLyBhcmVhIGFueW1vcmUuIFRoaXMgY2FuIGhhcHBlbiB1bmRlciBwZXJmb3JtYW5jZSBjb25zdHJhaW50cy4gVGhpcyBtYXlcbiAgICAgICAgLy8gYmUgYSBidWcgaW4gdGhlIGJyb3dzZXIncyBJbnRlcnNlY3Rpb25PYnNlcnZlciBpbXBsZW1lbnRhdGlvbi4gVG9cbiAgICAgICAgLy8gd29yayBhcm91bmQgdGhpcywgd2UgY29tcGFyZSB0aGUgZWxlbWVudCdzIGJvdW5kaW5nIHJlY3Qgbm93IHdpdGhcbiAgICAgICAgLy8gd2hhdCBpdCB3YXMgYXQgdGhlIHRpbWUgd2UgY3JlYXRlZCB0aGUgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuIElmIHRoZXlcbiAgICAgICAgLy8gYXJlIG5vdCBlcXVhbCB0aGVuIHRoZSBlbGVtZW50IG1vdmVkLCBzbyB3ZSByZWZyZXNoLlxuICAgICAgICByZWZyZXNoKCk7XG4gICAgICB9XG4gICAgICBpc0ZpcnN0VXBkYXRlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gT2xkZXIgYnJvd3NlcnMgZG9uJ3Qgc3VwcG9ydCBhIGBkb2N1bWVudGAgYXMgdGhlIHJvb3QgYW5kIHdpbGwgdGhyb3cgYW5cbiAgICAvLyBlcnJvci5cbiAgICB0cnkge1xuICAgICAgaW8gPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoaGFuZGxlT2JzZXJ2ZSwge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAvLyBIYW5kbGUgPGlmcmFtZT5zXG4gICAgICAgIHJvb3Q6IHJvb3Qub3duZXJEb2N1bWVudFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaW8gPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoaGFuZGxlT2JzZXJ2ZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGlvLm9ic2VydmUoZWxlbWVudCk7XG4gIH1cbiAgcmVmcmVzaCh0cnVlKTtcbiAgcmV0dXJuIGNsZWFudXA7XG59XG5cbi8qKlxuICogQXV0b21hdGljYWxseSB1cGRhdGVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCB3aGVuIG5lY2Vzc2FyeS5cbiAqIFNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBmbG9hdGluZyBlbGVtZW50IGlzIG1vdW50ZWQgb24gdGhlIERPTSBvclxuICogdmlzaWJsZSBvbiB0aGUgc2NyZWVuLlxuICogQHJldHVybnMgY2xlYW51cCBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSBpbnZva2VkIHdoZW4gdGhlIGZsb2F0aW5nIGVsZW1lbnQgaXNcbiAqIHJlbW92ZWQgZnJvbSB0aGUgRE9NIG9yIGhpZGRlbiBmcm9tIHRoZSBzY3JlZW4uXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXV0b1VwZGF0ZVxuICovXG5mdW5jdGlvbiBhdXRvVXBkYXRlKHJlZmVyZW5jZSwgZmxvYXRpbmcsIHVwZGF0ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIGNvbnN0IHtcbiAgICBhbmNlc3RvclNjcm9sbCA9IHRydWUsXG4gICAgYW5jZXN0b3JSZXNpemUgPSB0cnVlLFxuICAgIGVsZW1lbnRSZXNpemUgPSB0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgPT09ICdmdW5jdGlvbicsXG4gICAgbGF5b3V0U2hpZnQgPSB0eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPT09ICdmdW5jdGlvbicsXG4gICAgYW5pbWF0aW9uRnJhbWUgPSBmYWxzZVxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgcmVmZXJlbmNlRWwgPSB1bndyYXBFbGVtZW50KHJlZmVyZW5jZSk7XG4gIGNvbnN0IGFuY2VzdG9ycyA9IGFuY2VzdG9yU2Nyb2xsIHx8IGFuY2VzdG9yUmVzaXplID8gWy4uLihyZWZlcmVuY2VFbCA/IGdldE92ZXJmbG93QW5jZXN0b3JzKHJlZmVyZW5jZUVsKSA6IFtdKSwgLi4uZ2V0T3ZlcmZsb3dBbmNlc3RvcnMoZmxvYXRpbmcpXSA6IFtdO1xuICBhbmNlc3RvcnMuZm9yRWFjaChhbmNlc3RvciA9PiB7XG4gICAgYW5jZXN0b3JTY3JvbGwgJiYgYW5jZXN0b3IuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdXBkYXRlLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlXG4gICAgfSk7XG4gICAgYW5jZXN0b3JSZXNpemUgJiYgYW5jZXN0b3IuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlKTtcbiAgfSk7XG4gIGNvbnN0IGNsZWFudXBJbyA9IHJlZmVyZW5jZUVsICYmIGxheW91dFNoaWZ0ID8gb2JzZXJ2ZU1vdmUocmVmZXJlbmNlRWwsIHVwZGF0ZSkgOiBudWxsO1xuICBsZXQgcmVvYnNlcnZlRnJhbWUgPSAtMTtcbiAgbGV0IHJlc2l6ZU9ic2VydmVyID0gbnVsbDtcbiAgaWYgKGVsZW1lbnRSZXNpemUpIHtcbiAgICByZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihfcmVmID0+IHtcbiAgICAgIGxldCBbZmlyc3RFbnRyeV0gPSBfcmVmO1xuICAgICAgaWYgKGZpcnN0RW50cnkgJiYgZmlyc3RFbnRyeS50YXJnZXQgPT09IHJlZmVyZW5jZUVsICYmIHJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICAgIC8vIFByZXZlbnQgdXBkYXRlIGxvb3BzIHdoZW4gdXNpbmcgdGhlIGBzaXplYCBtaWRkbGV3YXJlLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmxvYXRpbmctdWkvZmxvYXRpbmctdWkvaXNzdWVzLzE3NDBcbiAgICAgICAgcmVzaXplT2JzZXJ2ZXIudW5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmVvYnNlcnZlRnJhbWUpO1xuICAgICAgICByZW9ic2VydmVGcmFtZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgdmFyIF9yZXNpemVPYnNlcnZlcjtcbiAgICAgICAgICAoX3Jlc2l6ZU9ic2VydmVyID0gcmVzaXplT2JzZXJ2ZXIpID09IG51bGwgfHwgX3Jlc2l6ZU9ic2VydmVyLm9ic2VydmUoZmxvYXRpbmcpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHVwZGF0ZSgpO1xuICAgIH0pO1xuICAgIGlmIChyZWZlcmVuY2VFbCAmJiAhYW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUocmVmZXJlbmNlRWwpO1xuICAgIH1cbiAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgfVxuICBsZXQgZnJhbWVJZDtcbiAgbGV0IHByZXZSZWZSZWN0ID0gYW5pbWF0aW9uRnJhbWUgPyBnZXRCb3VuZGluZ0NsaWVudFJlY3QocmVmZXJlbmNlKSA6IG51bGw7XG4gIGlmIChhbmltYXRpb25GcmFtZSkge1xuICAgIGZyYW1lTG9vcCgpO1xuICB9XG4gIGZ1bmN0aW9uIGZyYW1lTG9vcCgpIHtcbiAgICBjb25zdCBuZXh0UmVmUmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChyZWZlcmVuY2UpO1xuICAgIGlmIChwcmV2UmVmUmVjdCAmJiAhcmVjdHNBcmVFcXVhbChwcmV2UmVmUmVjdCwgbmV4dFJlZlJlY3QpKSB7XG4gICAgICB1cGRhdGUoKTtcbiAgICB9XG4gICAgcHJldlJlZlJlY3QgPSBuZXh0UmVmUmVjdDtcbiAgICBmcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZyYW1lTG9vcCk7XG4gIH1cbiAgdXBkYXRlKCk7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgdmFyIF9yZXNpemVPYnNlcnZlcjI7XG4gICAgYW5jZXN0b3JzLmZvckVhY2goYW5jZXN0b3IgPT4ge1xuICAgICAgYW5jZXN0b3JTY3JvbGwgJiYgYW5jZXN0b3IucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdXBkYXRlKTtcbiAgICAgIGFuY2VzdG9yUmVzaXplICYmIGFuY2VzdG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZSk7XG4gICAgfSk7XG4gICAgY2xlYW51cElvID09IG51bGwgfHwgY2xlYW51cElvKCk7XG4gICAgKF9yZXNpemVPYnNlcnZlcjIgPSByZXNpemVPYnNlcnZlcikgPT0gbnVsbCB8fCBfcmVzaXplT2JzZXJ2ZXIyLmRpc2Nvbm5lY3QoKTtcbiAgICByZXNpemVPYnNlcnZlciA9IG51bGw7XG4gICAgaWYgKGFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShmcmFtZUlkKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgd2l0aCBhbiBvYmplY3Qgb2Ygb3ZlcmZsb3cgc2lkZSBvZmZzZXRzIHRoYXQgZGV0ZXJtaW5lIGhvdyBtdWNoIHRoZVxuICogZWxlbWVudCBpcyBvdmVyZmxvd2luZyBhIGdpdmVuIGNsaXBwaW5nIGJvdW5kYXJ5IG9uIGVhY2ggc2lkZS5cbiAqIC0gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgYm91bmRhcnkgYnkgdGhhdCBudW1iZXIgb2YgcGl4ZWxzXG4gKiAtIG5lZ2F0aXZlID0gaG93IG1hbnkgcGl4ZWxzIGxlZnQgYmVmb3JlIGl0IHdpbGwgb3ZlcmZsb3dcbiAqIC0gMCA9IGxpZXMgZmx1c2ggd2l0aCB0aGUgYm91bmRhcnlcbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9kZXRlY3RPdmVyZmxvd1xuICovXG5jb25zdCBkZXRlY3RPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93JDE7XG5cbi8qKlxuICogTW9kaWZpZXMgdGhlIHBsYWNlbWVudCBieSB0cmFuc2xhdGluZyB0aGUgZmxvYXRpbmcgZWxlbWVudCBhbG9uZyB0aGVcbiAqIHNwZWNpZmllZCBheGVzLlxuICogQSBudW1iZXIgKHNob3J0aGFuZCBmb3IgYG1haW5BeGlzYCBvciBkaXN0YW5jZSksIG9yIGFuIGF4ZXMgY29uZmlndXJhdGlvblxuICogb2JqZWN0IG1heSBiZSBwYXNzZWQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvb2Zmc2V0XG4gKi9cbmNvbnN0IG9mZnNldCA9IG9mZnNldCQxO1xuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBjaG9vc2luZyB0aGUgcGxhY2VtZW50XG4gKiB0aGF0IGhhcyB0aGUgbW9zdCBzcGFjZSBhdmFpbGFibGUgYXV0b21hdGljYWxseSwgd2l0aG91dCBuZWVkaW5nIHRvIHNwZWNpZnkgYVxuICogcHJlZmVycmVkIHBsYWNlbWVudC4gQWx0ZXJuYXRpdmUgdG8gYGZsaXBgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9QbGFjZW1lbnRcbiAqL1xuY29uc3QgYXV0b1BsYWNlbWVudCA9IGF1dG9QbGFjZW1lbnQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgc2hpZnRpbmcgaXQgaW4gb3JkZXIgdG9cbiAqIGtlZXAgaXQgaW4gdmlldyB3aGVuIGl0IHdpbGwgb3ZlcmZsb3cgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NoaWZ0XG4gKi9cbmNvbnN0IHNoaWZ0ID0gc2hpZnQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgZmxpcHBpbmcgdGhlIGBwbGFjZW1lbnRgXG4gKiBpbiBvcmRlciB0byBrZWVwIGl0IGluIHZpZXcgd2hlbiB0aGUgcHJlZmVycmVkIHBsYWNlbWVudChzKSB3aWxsIG92ZXJmbG93IHRoZVxuICogY2xpcHBpbmcgYm91bmRhcnkuIEFsdGVybmF0aXZlIHRvIGBhdXRvUGxhY2VtZW50YC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9mbGlwXG4gKi9cbmNvbnN0IGZsaXAgPSBmbGlwJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0aGF0IGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBzaXplIG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IOKAlFxuICogZm9yIGluc3RhbmNlLCBwcmV2ZW50IGl0IGZyb20gb3ZlcmZsb3dpbmcgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5IG9yIG1hdGNoIHRoZVxuICogd2lkdGggb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NpemVcbiAqL1xuY29uc3Qgc2l6ZSA9IHNpemUkMTtcblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIGhpZGUgdGhlIGZsb2F0aW5nIGVsZW1lbnQgaW4gYXBwbGljYWJsZSBzaXR1YXRpb25zLCBzdWNoIGFzXG4gKiB3aGVuIGl0IGlzIG5vdCBpbiB0aGUgc2FtZSBjbGlwcGluZyBjb250ZXh0IGFzIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9oaWRlXG4gKi9cbmNvbnN0IGhpZGUgPSBoaWRlJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBwb3NpdGlvbiBhbiBpbm5lciBlbGVtZW50IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IHNvIHRoYXQgaXRcbiAqIGFwcGVhcnMgY2VudGVyZWQgdG8gdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2Fycm93XG4gKi9cbmNvbnN0IGFycm93ID0gYXJyb3ckMTtcblxuLyoqXG4gKiBQcm92aWRlcyBpbXByb3ZlZCBwb3NpdGlvbmluZyBmb3IgaW5saW5lIHJlZmVyZW5jZSBlbGVtZW50cyB0aGF0IGNhbiBzcGFuXG4gKiBvdmVyIG11bHRpcGxlIGxpbmVzLCBzdWNoIGFzIGh5cGVybGlua3Mgb3IgcmFuZ2Ugc2VsZWN0aW9ucy5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9pbmxpbmVcbiAqL1xuY29uc3QgaW5saW5lID0gaW5saW5lJDE7XG5cbi8qKlxuICogQnVpbHQtaW4gYGxpbWl0ZXJgIHRoYXQgd2lsbCBzdG9wIGBzaGlmdCgpYCBhdCBhIGNlcnRhaW4gcG9pbnQuXG4gKi9cbmNvbnN0IGxpbWl0U2hpZnQgPSBsaW1pdFNoaWZ0JDE7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIHRoYXQgd2lsbCBwbGFjZSB0aGUgZmxvYXRpbmcgZWxlbWVudFxuICogbmV4dCB0byBhIGdpdmVuIHJlZmVyZW5jZSBlbGVtZW50LlxuICovXG5jb25zdCBjb21wdXRlUG9zaXRpb24gPSAocmVmZXJlbmNlLCBmbG9hdGluZywgb3B0aW9ucykgPT4ge1xuICAvLyBUaGlzIGNhY2hlcyB0aGUgZXhwZW5zaXZlIGBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnNgIGZ1bmN0aW9uIHNvIHRoYXRcbiAgLy8gbXVsdGlwbGUgbGlmZWN5Y2xlIHJlc2V0cyByZS11c2UgdGhlIHNhbWUgcmVzdWx0LiBJdCBvbmx5IGxpdmVzIGZvciBhXG4gIC8vIHNpbmdsZSBjYWxsLiBJZiBvdGhlciBmdW5jdGlvbnMgYmVjb21lIGV4cGVuc2l2ZSwgd2UgY2FuIGFkZCB0aGVtIGFzIHdlbGwuXG4gIGNvbnN0IGNhY2hlID0gbmV3IE1hcCgpO1xuICBjb25zdCBtZXJnZWRPcHRpb25zID0ge1xuICAgIHBsYXRmb3JtLFxuICAgIC4uLm9wdGlvbnNcbiAgfTtcbiAgY29uc3QgcGxhdGZvcm1XaXRoQ2FjaGUgPSB7XG4gICAgLi4ubWVyZ2VkT3B0aW9ucy5wbGF0Zm9ybSxcbiAgICBfYzogY2FjaGVcbiAgfTtcbiAgcmV0dXJuIGNvbXB1dGVQb3NpdGlvbiQxKHJlZmVyZW5jZSwgZmxvYXRpbmcsIHtcbiAgICAuLi5tZXJnZWRPcHRpb25zLFxuICAgIHBsYXRmb3JtOiBwbGF0Zm9ybVdpdGhDYWNoZVxuICB9KTtcbn07XG5cbmV4cG9ydCB7IGFycm93LCBhdXRvUGxhY2VtZW50LCBhdXRvVXBkYXRlLCBjb21wdXRlUG9zaXRpb24sIGRldGVjdE92ZXJmbG93LCBmbGlwLCBoaWRlLCBpbmxpbmUsIGxpbWl0U2hpZnQsIG9mZnNldCwgcGxhdGZvcm0sIHNoaWZ0LCBzaXplIH07XG4iLCJpbXBvcnQgeyBhcnJvdyBhcyBhcnJvdyQxLCBjb21wdXRlUG9zaXRpb24gfSBmcm9tICdAZmxvYXRpbmctdWkvZG9tJztcbmV4cG9ydCB7IGF1dG9QbGFjZW1lbnQsIGF1dG9VcGRhdGUsIGNvbXB1dGVQb3NpdGlvbiwgZGV0ZWN0T3ZlcmZsb3csIGZsaXAsIGdldE92ZXJmbG93QW5jZXN0b3JzLCBoaWRlLCBpbmxpbmUsIGxpbWl0U2hpZnQsIG9mZnNldCwgcGxhdGZvcm0sIHNoaWZ0LCBzaXplIH0gZnJvbSAnQGZsb2F0aW5nLXVpL2RvbSc7XG5pbXBvcnQgeyBpc05vZGUsIGdldE5vZGVOYW1lIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzL2RvbSc7XG5pbXBvcnQgeyB1bnJlZiwgY29tcHV0ZWQsIHJlZiwgc2hhbGxvd1JlZiwgd2F0Y2gsIGdldEN1cnJlbnRTY29wZSwgb25TY29wZURpc3Bvc2UsIHNoYWxsb3dSZWFkb25seSB9IGZyb20gJ3Z1ZS1kZW1pJztcblxuZnVuY3Rpb24gaXNDb21wb25lbnRQdWJsaWNJbnN0YW5jZSh0YXJnZXQpIHtcbiAgcmV0dXJuIHRhcmdldCAhPSBudWxsICYmIHR5cGVvZiB0YXJnZXQgPT09ICdvYmplY3QnICYmICckZWwnIGluIHRhcmdldDtcbn1cbmZ1bmN0aW9uIHVud3JhcEVsZW1lbnQodGFyZ2V0KSB7XG4gIGlmIChpc0NvbXBvbmVudFB1YmxpY0luc3RhbmNlKHRhcmdldCkpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGFyZ2V0LiRlbDtcbiAgICByZXR1cm4gaXNOb2RlKGVsZW1lbnQpICYmIGdldE5vZGVOYW1lKGVsZW1lbnQpID09PSAnI2NvbW1lbnQnID8gbnVsbCA6IGVsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gdG9WYWx1ZShzb3VyY2UpIHtcbiAgcmV0dXJuIHR5cGVvZiBzb3VyY2UgPT09ICdmdW5jdGlvbicgPyBzb3VyY2UoKSA6IHVucmVmKHNvdXJjZSk7XG59XG5cbi8qKlxuICogUG9zaXRpb25zIGFuIGlubmVyIGVsZW1lbnQgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgc3VjaCB0aGF0IGl0IGlzIGNlbnRlcmVkIHRvIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBwYXJhbSBvcHRpb25zIFRoZSBhcnJvdyBvcHRpb25zLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2Fycm93XG4gKi9cbmZ1bmN0aW9uIGFycm93KG9wdGlvbnMpIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnYXJyb3cnLFxuICAgIG9wdGlvbnMsXG4gICAgZm4oYXJncykge1xuICAgICAgY29uc3QgZWxlbWVudCA9IHVud3JhcEVsZW1lbnQodG9WYWx1ZShvcHRpb25zLmVsZW1lbnQpKTtcbiAgICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFycm93JDEoe1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBwYWRkaW5nOiBvcHRpb25zLnBhZGRpbmdcbiAgICAgIH0pLmZuKGFyZ3MpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RFBSKGVsZW1lbnQpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgY29uc3Qgd2luID0gZWxlbWVudC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdztcbiAgcmV0dXJuIHdpbi5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG59XG5cbmZ1bmN0aW9uIHJvdW5kQnlEUFIoZWxlbWVudCwgdmFsdWUpIHtcbiAgY29uc3QgZHByID0gZ2V0RFBSKGVsZW1lbnQpO1xuICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIGRwcikgLyBkcHI7XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIHRoYXQgd2lsbCBwbGFjZSB0aGUgZmxvYXRpbmcgZWxlbWVudCBuZXh0IHRvIGEgcmVmZXJlbmNlIGVsZW1lbnQgd2hlbiBpdCBpcyBnaXZlbiBhIGNlcnRhaW4gQ1NTIHBvc2l0aW9uaW5nIHN0cmF0ZWd5LlxuICogQHBhcmFtIHJlZmVyZW5jZSBUaGUgcmVmZXJlbmNlIHRlbXBsYXRlIHJlZi5cbiAqIEBwYXJhbSBmbG9hdGluZyBUaGUgZmxvYXRpbmcgdGVtcGxhdGUgcmVmLlxuICogQHBhcmFtIG9wdGlvbnMgVGhlIGZsb2F0aW5nIG9wdGlvbnMuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvdnVlXG4gKi9cbmZ1bmN0aW9uIHVzZUZsb2F0aW5nKHJlZmVyZW5jZSwgZmxvYXRpbmcsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICBjb25zdCB3aGlsZUVsZW1lbnRzTW91bnRlZE9wdGlvbiA9IG9wdGlvbnMud2hpbGVFbGVtZW50c01vdW50ZWQ7XG4gIGNvbnN0IG9wZW5PcHRpb24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgdmFyIF90b1ZhbHVlO1xuICAgIHJldHVybiAoX3RvVmFsdWUgPSB0b1ZhbHVlKG9wdGlvbnMub3BlbikpICE9IG51bGwgPyBfdG9WYWx1ZSA6IHRydWU7XG4gIH0pO1xuICBjb25zdCBtaWRkbGV3YXJlT3B0aW9uID0gY29tcHV0ZWQoKCkgPT4gdG9WYWx1ZShvcHRpb25zLm1pZGRsZXdhcmUpKTtcbiAgY29uc3QgcGxhY2VtZW50T3B0aW9uID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHZhciBfdG9WYWx1ZTI7XG4gICAgcmV0dXJuIChfdG9WYWx1ZTIgPSB0b1ZhbHVlKG9wdGlvbnMucGxhY2VtZW50KSkgIT0gbnVsbCA/IF90b1ZhbHVlMiA6ICdib3R0b20nO1xuICB9KTtcbiAgY29uc3Qgc3RyYXRlZ3lPcHRpb24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgdmFyIF90b1ZhbHVlMztcbiAgICByZXR1cm4gKF90b1ZhbHVlMyA9IHRvVmFsdWUob3B0aW9ucy5zdHJhdGVneSkpICE9IG51bGwgPyBfdG9WYWx1ZTMgOiAnYWJzb2x1dGUnO1xuICB9KTtcbiAgY29uc3QgdHJhbnNmb3JtT3B0aW9uID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHZhciBfdG9WYWx1ZTQ7XG4gICAgcmV0dXJuIChfdG9WYWx1ZTQgPSB0b1ZhbHVlKG9wdGlvbnMudHJhbnNmb3JtKSkgIT0gbnVsbCA/IF90b1ZhbHVlNCA6IHRydWU7XG4gIH0pO1xuICBjb25zdCByZWZlcmVuY2VFbGVtZW50ID0gY29tcHV0ZWQoKCkgPT4gdW53cmFwRWxlbWVudChyZWZlcmVuY2UudmFsdWUpKTtcbiAgY29uc3QgZmxvYXRpbmdFbGVtZW50ID0gY29tcHV0ZWQoKCkgPT4gdW53cmFwRWxlbWVudChmbG9hdGluZy52YWx1ZSkpO1xuICBjb25zdCB4ID0gcmVmKDApO1xuICBjb25zdCB5ID0gcmVmKDApO1xuICBjb25zdCBzdHJhdGVneSA9IHJlZihzdHJhdGVneU9wdGlvbi52YWx1ZSk7XG4gIGNvbnN0IHBsYWNlbWVudCA9IHJlZihwbGFjZW1lbnRPcHRpb24udmFsdWUpO1xuICBjb25zdCBtaWRkbGV3YXJlRGF0YSA9IHNoYWxsb3dSZWYoe30pO1xuICBjb25zdCBpc1Bvc2l0aW9uZWQgPSByZWYoZmFsc2UpO1xuICBjb25zdCBmbG9hdGluZ1N0eWxlcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBpbml0aWFsU3R5bGVzID0ge1xuICAgICAgcG9zaXRpb246IHN0cmF0ZWd5LnZhbHVlLFxuICAgICAgbGVmdDogJzAnLFxuICAgICAgdG9wOiAnMCdcbiAgICB9O1xuICAgIGlmICghZmxvYXRpbmdFbGVtZW50LnZhbHVlKSB7XG4gICAgICByZXR1cm4gaW5pdGlhbFN0eWxlcztcbiAgICB9XG4gICAgY29uc3QgeFZhbCA9IHJvdW5kQnlEUFIoZmxvYXRpbmdFbGVtZW50LnZhbHVlLCB4LnZhbHVlKTtcbiAgICBjb25zdCB5VmFsID0gcm91bmRCeURQUihmbG9hdGluZ0VsZW1lbnQudmFsdWUsIHkudmFsdWUpO1xuICAgIGlmICh0cmFuc2Zvcm1PcHRpb24udmFsdWUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmluaXRpYWxTdHlsZXMsXG4gICAgICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoXCIgKyB4VmFsICsgXCJweCwgXCIgKyB5VmFsICsgXCJweClcIixcbiAgICAgICAgLi4uKGdldERQUihmbG9hdGluZ0VsZW1lbnQudmFsdWUpID49IDEuNSAmJiB7XG4gICAgICAgICAgd2lsbENoYW5nZTogJ3RyYW5zZm9ybSdcbiAgICAgICAgfSlcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBwb3NpdGlvbjogc3RyYXRlZ3kudmFsdWUsXG4gICAgICBsZWZ0OiB4VmFsICsgXCJweFwiLFxuICAgICAgdG9wOiB5VmFsICsgXCJweFwiXG4gICAgfTtcbiAgfSk7XG4gIGxldCB3aGlsZUVsZW1lbnRzTW91bnRlZENsZWFudXA7XG4gIGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICBpZiAocmVmZXJlbmNlRWxlbWVudC52YWx1ZSA9PSBudWxsIHx8IGZsb2F0aW5nRWxlbWVudC52YWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG9wZW4gPSBvcGVuT3B0aW9uLnZhbHVlO1xuICAgIGNvbXB1dGVQb3NpdGlvbihyZWZlcmVuY2VFbGVtZW50LnZhbHVlLCBmbG9hdGluZ0VsZW1lbnQudmFsdWUsIHtcbiAgICAgIG1pZGRsZXdhcmU6IG1pZGRsZXdhcmVPcHRpb24udmFsdWUsXG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudE9wdGlvbi52YWx1ZSxcbiAgICAgIHN0cmF0ZWd5OiBzdHJhdGVneU9wdGlvbi52YWx1ZVxuICAgIH0pLnRoZW4ocG9zaXRpb24gPT4ge1xuICAgICAgeC52YWx1ZSA9IHBvc2l0aW9uLng7XG4gICAgICB5LnZhbHVlID0gcG9zaXRpb24ueTtcbiAgICAgIHN0cmF0ZWd5LnZhbHVlID0gcG9zaXRpb24uc3RyYXRlZ3k7XG4gICAgICBwbGFjZW1lbnQudmFsdWUgPSBwb3NpdGlvbi5wbGFjZW1lbnQ7XG4gICAgICBtaWRkbGV3YXJlRGF0YS52YWx1ZSA9IHBvc2l0aW9uLm1pZGRsZXdhcmVEYXRhO1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgZmxvYXRpbmcgZWxlbWVudCdzIHBvc2l0aW9uIG1heSBiZSByZWNvbXB1dGVkIHdoaWxlIGl0J3MgY2xvc2VkXG4gICAgICAgKiBidXQgc3RpbGwgbW91bnRlZCAoc3VjaCBhcyB3aGVuIHRyYW5zaXRpb25pbmcgb3V0KS4gVG8gZW5zdXJlXG4gICAgICAgKiBgaXNQb3NpdGlvbmVkYCB3aWxsIGJlIGBmYWxzZWAgaW5pdGlhbGx5IG9uIHRoZSBuZXh0IG9wZW4sIGF2b2lkXG4gICAgICAgKiBzZXR0aW5nIGl0IHRvIGB0cnVlYCB3aGVuIGBvcGVuID09PSBmYWxzZWAgKG11c3QgYmUgc3BlY2lmaWVkKS5cbiAgICAgICAqL1xuICAgICAgaXNQb3NpdGlvbmVkLnZhbHVlID0gb3BlbiAhPT0gZmFsc2U7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICBpZiAodHlwZW9mIHdoaWxlRWxlbWVudHNNb3VudGVkQ2xlYW51cCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd2hpbGVFbGVtZW50c01vdW50ZWRDbGVhbnVwKCk7XG4gICAgICB3aGlsZUVsZW1lbnRzTW91bnRlZENsZWFudXAgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGF0dGFjaCgpIHtcbiAgICBjbGVhbnVwKCk7XG4gICAgaWYgKHdoaWxlRWxlbWVudHNNb3VudGVkT3B0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHVwZGF0ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocmVmZXJlbmNlRWxlbWVudC52YWx1ZSAhPSBudWxsICYmIGZsb2F0aW5nRWxlbWVudC52YWx1ZSAhPSBudWxsKSB7XG4gICAgICB3aGlsZUVsZW1lbnRzTW91bnRlZENsZWFudXAgPSB3aGlsZUVsZW1lbnRzTW91bnRlZE9wdGlvbihyZWZlcmVuY2VFbGVtZW50LnZhbHVlLCBmbG9hdGluZ0VsZW1lbnQudmFsdWUsIHVwZGF0ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIGlmICghb3Blbk9wdGlvbi52YWx1ZSkge1xuICAgICAgaXNQb3NpdGlvbmVkLnZhbHVlID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIHdhdGNoKFttaWRkbGV3YXJlT3B0aW9uLCBwbGFjZW1lbnRPcHRpb24sIHN0cmF0ZWd5T3B0aW9uLCBvcGVuT3B0aW9uXSwgdXBkYXRlLCB7XG4gICAgZmx1c2g6ICdzeW5jJ1xuICB9KTtcbiAgd2F0Y2goW3JlZmVyZW5jZUVsZW1lbnQsIGZsb2F0aW5nRWxlbWVudF0sIGF0dGFjaCwge1xuICAgIGZsdXNoOiAnc3luYydcbiAgfSk7XG4gIHdhdGNoKG9wZW5PcHRpb24sIHJlc2V0LCB7XG4gICAgZmx1c2g6ICdzeW5jJ1xuICB9KTtcbiAgaWYgKGdldEN1cnJlbnRTY29wZSgpKSB7XG4gICAgb25TY29wZURpc3Bvc2UoY2xlYW51cCk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4OiBzaGFsbG93UmVhZG9ubHkoeCksXG4gICAgeTogc2hhbGxvd1JlYWRvbmx5KHkpLFxuICAgIHN0cmF0ZWd5OiBzaGFsbG93UmVhZG9ubHkoc3RyYXRlZ3kpLFxuICAgIHBsYWNlbWVudDogc2hhbGxvd1JlYWRvbmx5KHBsYWNlbWVudCksXG4gICAgbWlkZGxld2FyZURhdGE6IHNoYWxsb3dSZWFkb25seShtaWRkbGV3YXJlRGF0YSksXG4gICAgaXNQb3NpdGlvbmVkOiBzaGFsbG93UmVhZG9ubHkoaXNQb3NpdGlvbmVkKSxcbiAgICBmbG9hdGluZ1N0eWxlcyxcbiAgICB1cGRhdGVcbiAgfTtcbn1cblxuZXhwb3J0IHsgYXJyb3csIHVzZUZsb2F0aW5nIH07XG4iLCJleHBvcnQgY29uc3QgaXNDbGlja091dHNpZGUgPSAoZXZlbnQ6IE1vdXNlRXZlbnQsIGVsZW1lbnRzOiBIVE1MRWxlbWVudCB8IEhUTUxFbGVtZW50W10pOiBib29sZWFuID0+IHtcbiAgY29uc3QgdGFyZ2V0cyA9IEFycmF5LmlzQXJyYXkoZWxlbWVudHMpID8gZWxlbWVudHMgOiBbZWxlbWVudHNdO1xuICByZXR1cm4gIXRhcmdldHMuc29tZSgoZWwpID0+IGVsLmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSk7XG59O1xuIiwiPHNjcmlwdCBsYW5nPVwidHNcIiBzZXR1cD5cbiAgaW1wb3J0IHsgYXV0b1BsYWNlbWVudCwgYXV0b1VwZGF0ZSwgb2Zmc2V0IGFzIG9mZnNldE1pZGRsZXdhcmUsIHNoaWZ0LCB1c2VGbG9hdGluZyB9IGZyb20gJ0BmbG9hdGluZy11aS92dWUnO1xuICBpbXBvcnQgeyBjb21wdXRlZCwgb25CZWZvcmVNb3VudCwgb25Nb3VudGVkLCBvblVubW91bnRlZCwgcmVmLCB3YXRjaCwgd2F0Y2hFZmZlY3QgfSBmcm9tICd2dWUnO1xuXG4gIGltcG9ydCB7IENTUyB9IGZyb20gJ0AvdHlwZXMvU3R5bGVzJztcbiAgaW1wb3J0IHsgaXNDbGlja091dHNpZGUgfSBmcm9tICdAL3V0aWxpdGllcy9ldmVudCc7XG4gIGltcG9ydCB7IFRPUF9MQVlFUl9JRCwgaW5pdEZhdXhUb3BMYXllciB9IGZyb20gJ0AvdXRpbGl0aWVzL3ZpZXdwb3J0JztcblxuICBpbXBvcnQgdHlwZSB7IFJlZiB9IGZyb20gJ3Z1ZSc7XG5cbiAgdHlwZSBQcm9wcyA9IHtcbiAgICBhbmNob3JJZDogc3RyaW5nO1xuICAgIG9mZnNldD86IG51bWJlcjtcbiAgfTtcblxuICBjb25zdCBwcm9wcyA9IHdpdGhEZWZhdWx0cyhkZWZpbmVQcm9wczxQcm9wcz4oKSwge1xuICAgIG9mZnNldDogMTYsXG4gIH0pO1xuXG4gIGNvbnN0IGFuY2hvcjogUmVmPEhUTUxFbGVtZW50IHwgbnVsbD4gPSByZWYobnVsbCk7XG4gIGNvbnN0IGZsb2F0aW5nOiBSZWY8SFRNTEVsZW1lbnQgfCBudWxsPiA9IHJlZihudWxsKTtcbiAgY29uc3Qgcm9vdDogUmVmPEhUTUxFbGVtZW50IHwgbnVsbD4gPSByZWYobnVsbCk7XG4gIGNvbnN0IGlzSG92ZXJlZCA9IHJlZihmYWxzZSk7XG4gIGNvbnN0IGlzVG9nZ2xlZE9wZW4gPSByZWYoZmFsc2UpO1xuICBjb25zdCBtaWRkbGV3YXJlID0gcmVmKFthdXRvUGxhY2VtZW50KCksIG9mZnNldE1pZGRsZXdhcmUoeyBtYWluQXhpczogcHJvcHMub2Zmc2V0IH0pLCBzaGlmdCh7IHBhZGRpbmc6IDE2IH0pXSk7XG5cbiAgY29uc3QgaXNTaG93UG9wb3ZlciA9IGNvbXB1dGVkKCgpID0+IGlzSG92ZXJlZC52YWx1ZSB8fCBpc1RvZ2dsZWRPcGVuLnZhbHVlKTtcblxuICBjb25zdCB7IGZsb2F0aW5nU3R5bGVzIH0gPSB1c2VGbG9hdGluZyhhbmNob3IsIGZsb2F0aW5nLCB7XG4gICAgbWlkZGxld2FyZSxcbiAgICBzdHJhdGVneTogJ2ZpeGVkJyxcbiAgICB3aGlsZUVsZW1lbnRzTW91bnRlZDogYXV0b1VwZGF0ZSxcbiAgfSk7XG5cbiAgY29uc3QgaGFuZGxlUGVybWFuZW50T3BlbkJvZHlDbGljayA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgaWYgKCFhbmNob3IudmFsdWUgfHwgIWZsb2F0aW5nLnZhbHVlKSByZXR1cm47XG4gICAgaWYgKGlzQ2xpY2tPdXRzaWRlKGUsIFthbmNob3IudmFsdWUsIGZsb2F0aW5nLnZhbHVlXSkpIHtcbiAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICBpc1RvZ2dsZWRPcGVuLnZhbHVlID0gZmFsc2U7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUFuY2hvckVsZW1lbnRNb3VzZU92ZXIgPSAoKSA9PiB7XG4gICAgaXNIb3ZlcmVkLnZhbHVlID0gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVBbmNob3JFbGVtZW50TW91c2VMZWF2ZSA9ICgpID0+IHtcbiAgICBpc0hvdmVyZWQudmFsdWUgPSBmYWxzZTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVBbmNob3JFbGVtZW50Q2xpY2sgPSAoKSA9PiB7XG4gICAgaXNUb2dnbGVkT3Blbi52YWx1ZSA9IHRydWU7XG4gIH07XG5cbiAgY29uc3QgYWRkTGlzdGVuZXJzVG9BbmNob3JFbGVtZW50ID0gKCkgPT4ge1xuICAgIGlmICghYW5jaG9yLnZhbHVlKSByZXR1cm4gbnVsbDtcbiAgICBhbmNob3IudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdmVyJywgaGFuZGxlQW5jaG9yRWxlbWVudE1vdXNlT3Zlcik7XG4gICAgYW5jaG9yLnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCBoYW5kbGVBbmNob3JFbGVtZW50TW91c2VMZWF2ZSk7XG4gICAgYW5jaG9yLnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlQW5jaG9yRWxlbWVudENsaWNrKTtcbiAgfTtcblxuICBjb25zdCByZW1vdmVMaXN0ZW5lcnNGcm9tQW5jaG9yRWxlbWVudCA9ICgpID0+IHtcbiAgICBpZiAoIWFuY2hvci52YWx1ZSkgcmV0dXJuIG51bGw7XG4gICAgYW5jaG9yLnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlb3ZlcicsIGhhbmRsZUFuY2hvckVsZW1lbnRNb3VzZU92ZXIpO1xuICAgIGFuY2hvci52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgaGFuZGxlQW5jaG9yRWxlbWVudE1vdXNlTGVhdmUpO1xuICAgIGFuY2hvci52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZUFuY2hvckVsZW1lbnRDbGljayk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUGVybWFuZW50T3BlbkJvZHlLZXlkb3duID0gKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICBpc1RvZ2dsZWRPcGVuLnZhbHVlID0gZmFsc2U7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGFkZE9wZW5MaXN0ZW5lcnNUb1Jvb3QgPSAoKSA9PiB7XG4gICAgaWYgKCFyb290LnZhbHVlKSByZXR1cm47XG4gICAgcm9vdC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZVBlcm1hbmVudE9wZW5Cb2R5Q2xpY2ssIHRydWUpO1xuICAgIHJvb3QudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZVBlcm1hbmVudE9wZW5Cb2R5S2V5ZG93bik7XG4gIH07XG5cbiAgY29uc3QgcmVtb3ZlT3Blbkxpc3RlbmVyc0Zyb21Sb290ID0gKCkgPT4ge1xuICAgIGlmICghcm9vdC52YWx1ZSkgcmV0dXJuO1xuICAgIHJvb3QudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVQZXJtYW5lbnRPcGVuQm9keUNsaWNrLCB0cnVlKTtcbiAgICByb290LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVQZXJtYW5lbnRPcGVuQm9keUtleWRvd24pO1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZUFuY2hvckVsZW1lbnQgPSAoKSA9PiB7XG4gICAgYW5jaG9yLnZhbHVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJvcHMuYW5jaG9ySWQpO1xuICB9O1xuXG4gIHdhdGNoKFxuICAgICgpID0+IGlzVG9nZ2xlZE9wZW4udmFsdWUsXG4gICAgKG5ld1ZhbHVlKSA9PiB7XG4gICAgICBpZiAobmV3VmFsdWUpIHtcbiAgICAgICAgYWRkT3Blbkxpc3RlbmVyc1RvUm9vdCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVtb3ZlT3Blbkxpc3RlbmVyc0Zyb21Sb290KCk7XG4gICAgICB9XG4gICAgfVxuICApO1xuXG4gIHdhdGNoKFxuICAgICgpID0+IHByb3BzLmFuY2hvcklkLFxuICAgICgpID0+IHtcbiAgICAgIHJlbW92ZUxpc3RlbmVyc0Zyb21BbmNob3JFbGVtZW50KCk7XG4gICAgICB1cGRhdGVBbmNob3JFbGVtZW50KCk7XG4gICAgICBhZGRMaXN0ZW5lcnNUb0FuY2hvckVsZW1lbnQoKTtcbiAgICB9XG4gICk7XG5cbiAgd2F0Y2hFZmZlY3QoKCkgPT4ge1xuICAgIG1pZGRsZXdhcmUudmFsdWUgPSBbYXV0b1BsYWNlbWVudCgpLCBvZmZzZXRNaWRkbGV3YXJlKHsgbWFpbkF4aXM6IHByb3BzLm9mZnNldCB9KSwgc2hpZnQoeyBwYWRkaW5nOiAxNiB9KV07XG4gIH0pO1xuXG4gIG9uQmVmb3JlTW91bnQoKCkgPT4ge1xuICAgIGluaXRGYXV4VG9wTGF5ZXIoKTtcbiAgfSk7XG5cbiAgb25Nb3VudGVkKCgpID0+IHtcbiAgICB1cGRhdGVBbmNob3JFbGVtZW50KCk7XG4gICAgcm9vdC52YWx1ZSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICBhZGRMaXN0ZW5lcnNUb0FuY2hvckVsZW1lbnQoKTtcbiAgfSk7XG5cbiAgb25Vbm1vdW50ZWQoKCkgPT4ge1xuICAgIHJlbW92ZUxpc3RlbmVyc0Zyb21BbmNob3JFbGVtZW50KCk7XG4gIH0pO1xuPC9zY3JpcHQ+XG5cbjx0ZW1wbGF0ZT5cbiAgPFRlbGVwb3J0IDp0bz1cImAjJHtUT1BfTEFZRVJfSUR9YFwiPlxuICAgIDxUcmFuc2l0aW9uPlxuICAgICAgPGRpdlxuICAgICAgICA6Y2xhc3M9XCJbXG4gICAgICAgICAgJ3RpZGUtcG9wb3ZlcicsXG4gICAgICAgICAgQ1NTLkJHLlNVUkZBQ0UuREVGQVVMVCxcbiAgICAgICAgICBDU1MuQk9SREVSLkNPTE9SLkxPVyxcbiAgICAgICAgICBDU1MuQk9SREVSLkZVTEwuT05FLFxuICAgICAgICAgIENTUy5CT1JERVIuUkFESVVTLkhBTEYsXG4gICAgICAgICAgQ1NTLkZPTlQuUk9MRS5CT0RZXzIsXG4gICAgICAgICAgQ1NTLlBBRERJTkcuRlVMTC5PTkUsXG4gICAgICAgICAgQ1NTLlNIQURPVy5CT1RUT00sXG4gICAgICAgIF1cIlxuICAgICAgICByZWY9XCJmbG9hdGluZ1wiXG4gICAgICAgIDpzdHlsZT1cInsgLi4uZmxvYXRpbmdTdHlsZXMsIG1heFdpZHRoOiBgY2FsYygxMDAlIC0gJHtwcm9wcy5vZmZzZXQgKiAyfXB4KWAgfVwiXG4gICAgICAgIHYtc2hvdz1cImlzU2hvd1BvcG92ZXJcIlxuICAgICAgPlxuICAgICAgICA8c2xvdCAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9UcmFuc2l0aW9uPlxuICA8L1RlbGVwb3J0PlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIHNjb3BlZD5cbiAgLnYtZW50ZXItZnJvbSxcbiAgLnYtbGVhdmUtdG8ge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbiAgLnYtZW50ZXItYWN0aXZlLFxuICAudi1sZWF2ZS1hY3RpdmUge1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgdmFyKC0tdGlkZS1hbmltYXRlKTtcbiAgfVxuICAudi1lbnRlci10byxcbiAgLnYtbGVhdmUtZnJvbSB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuPC9zdHlsZT5cbiIsIjxzY3JpcHQgbGFuZz1cInRzXCIgc2V0dXA+XG4gIGltcG9ydCBUaWRlSWNvbiBmcm9tICdAL2NvbXBvbmVudHMvVGlkZUljb24udnVlJztcbiAgaW1wb3J0IHsgSUNPTiB9IGZyb20gJ0AvdHlwZXMvSWNvbic7XG4gIGltcG9ydCB7IFNJWkUgfSBmcm9tICdAL3R5cGVzL1NpemUnO1xuICBpbXBvcnQgeyBDU1MgfSBmcm9tICdAL3R5cGVzL1N0eWxlcyc7XG5cbiAgdHlwZSBQcm9wcyA9IHtcbiAgICBkaXNhYmxlZD86IGJvb2xlYW47XG4gICAgaXNBY3RpdmU/OiBib29sZWFuO1xuICB9O1xuXG4gIGNvbnN0IHByb3BzID0gd2l0aERlZmF1bHRzKGRlZmluZVByb3BzPFByb3BzPigpLCB7XG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIGlzQWN0aXZlOiBmYWxzZSxcbiAgfSk7XG5cbiAgY29uc3QgZW1pdCA9IGRlZmluZUVtaXRzKFsnY2hhbmdlJ10pO1xuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gKCkgPT4ge1xuICAgIGlmICghcHJvcHMuZGlzYWJsZWQpIHtcbiAgICAgIGVtaXQoJ2NoYW5nZScpO1xuICAgIH1cbiAgfTtcbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG4gIDxidXR0b25cbiAgICA6Y2xhc3M9XCJbXG4gICAgICAndGlkZS1zd2l0Y2gnLFxuICAgICAgcHJvcHMuaXNBY3RpdmUgPyAnYWN0aXZlJyA6ICcnLFxuICAgICAgQ1NTLkRJU1BMQVkuRkxFWCxcbiAgICAgIENTUy5BWElTMi5DRU5URVIsXG4gICAgICBDU1MuQk9SREVSLkZVTEwuT05FLFxuICAgICAgQ1NTLkJPUkRFUi5SQURJVVMuRlVMTCxcbiAgICAgIHByb3BzLmlzQWN0aXZlID8gJycgOiBDU1MuQk9SREVSLkNPTE9SLkRFRkFVTFQsXG4gICAgICBDU1MuT1ZFUkZMT1cuWFkuSElEREVOLFxuICAgICAgcHJvcHMuaXNBY3RpdmUgPyBDU1MuQkcuU0VDT05EQVJZIDogQ1NTLkJHLlNVUkZBQ0UuREVGQVVMVCxcbiAgICBdXCJcbiAgICA6ZGlzYWJsZWQ9XCJwcm9wcy5kaXNhYmxlZFwiXG4gICAgQGNsaWNrPVwiaGFuZGxlQ2xpY2tcIlxuICAgIGFyaWEtbGFiZWw9XCJTd2l0Y2hcIlxuICA+XG4gICAgPGRpdlxuICAgICAgOmNsYXNzPVwiW1xuICAgICAgICAndGlkZS1zd2l0Y2gtaW5kaWNhdG9yJyxcbiAgICAgICAgQ1NTLlBPU0lUSU9OLlJFTEFUSVZFLFxuICAgICAgICBDU1MuRElTUExBWS5GTEVYLFxuICAgICAgICBDU1MuQVhJUzEuQ0VOVEVSLFxuICAgICAgICBDU1MuQVhJUzIuQ0VOVEVSLFxuICAgICAgICBDU1MuQk9SREVSLlJBRElVUy5GVUxMLFxuICAgICAgICBwcm9wcy5pc0FjdGl2ZSA/IENTUy5CRy5TVVJGQUNFLkRFRkFVTFQgOiBDU1MuQkcuU0VDT05EQVJZLFxuICAgICAgXVwiXG4gICAgPlxuICAgICAgPFRpZGVJY29uXG4gICAgICAgIDppY29uPVwiSUNPTi5DSEVDS1wiXG4gICAgICAgIDpzaXplPVwiU0laRS5MQVJHRVwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuICA8L2J1dHRvbj5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBzY29wZWQ+XG4gIC50aWRlLXN3aXRjaCB7XG4gICAgd2lkdGg6IDY0cHg7XG4gICAgaGVpZ2h0OiAzMnB4O1xuICAgIHRyYW5zaXRpb246IHZhcigtLXRpZGUtYW5pbWF0ZSk7XG4gICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogYmFja2dyb3VuZC1jb2xvcjtcbiAgfVxuXG4gIC50aWRlLXN3aXRjaDpkaXNhYmxlZCB7XG4gICAgb3BhY2l0eTogMC4zMjtcbiAgfVxuXG4gIC50aWRlLXN3aXRjaC5hY3RpdmUge1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tdGlkZS1zZWNvbmRhcnkpO1xuICB9XG5cbiAgLnRpZGUtc3dpdGNoLmFjdGl2ZSAudGlkZS1zd2l0Y2gtaW5kaWNhdG9yIHtcbiAgICBsZWZ0OiAzNnB4O1xuICB9XG5cbiAgLnRpZGUtc3dpdGNoLWluZGljYXRvciB7XG4gICAgbGVmdDogNHB4O1xuICAgIHRyYW5zaXRpb246IHZhcigtLXRpZGUtYW5pbWF0ZSk7XG4gICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogbGVmdCwgYm9yZGVyLWNvbG9yLCBiYWNrZ3JvdW5kLWNvbG9yO1xuICB9XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgZm9ybWF0TnVtYmVyLCBmb3JtYXRQaG9uZSwgZm9ybWF0UHJpY2UgfSBmcm9tICdAL3V0aWxpdGllcy9mb3JtYXQnO1xuXG5leHBvcnQgdHlwZSBGb3JtYXR0ZWQgPSB7XG4gIFtrZXk6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVtYmVyO1xufTtcblxuZXhwb3J0IGNvbnN0IEZPUk1BVCA9IHtcbiAgTlVNQkVSOiBmb3JtYXROdW1iZXIsXG4gIFBIT05FOiBmb3JtYXRQaG9uZSxcbiAgUFJJQ0U6IGZvcm1hdFByaWNlLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IEZPUk1BVF9SRUdFWCA9IHtcbiAgYWxwaGE6IC9eW2EtekEtWl0rJC9nLFxuICBhbHBoYU51bWJlck9yRW1wdHk6IC9eJHxeW2EtejAtOV0rJC9pLFxuICBhbHBoYVNwYWNlOiAvXlthLXpBLVogXSskL2csXG4gIGVtYWlsOlxuICAgIC9eKChbXjw+KClbXFxdXFxcXC4sOzpcXHNAXCJdKyhcXC5bXjw+KClbXFxdXFxcXC4sOzpcXHNAXCJdKykqKXwoXCIuK1wiKSlAKChcXFtbMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcLlswLTldezEsM31cXC5bMC05XXsxLDN9XFxdKXwoKFthLXpBLVpcXC0wLTldK1xcLikrW2EtekEtWl17Mix9KSkkLyxcbiAgbnVtYmVyRm9ybWF0dGVkOiAvXiR8KD89LileXFwkPygoWzEtOV1bMC05XXswLDJ9KCxbMC05XXszfSkqKXwwKT8oXFwuWzAtOV17MSwyfSk/JC8sXG4gIHBob25lOiAvXig/OlxcZHszfS1cXGR7M30tXFxkezR9fFxcZHsxfS1cXGR7M30tXFxkezN9LVxcZHs0fSk/JC8sXG4gIHByaWNlOiAvKD89LileXFwkPygoWzEtOV1bMC05XXswLDJ9KCxbMC05XXszfSkqKXwwKT8oXFwuWzAtOV17MSwyfSk/JC8sXG59O1xuIiwiLyoqXG4gKiBUaGVzZSBzbGlkZXMgYXJlIHVzZWQgaW4gYm90aCB0aGUgaW5saW5lIGRldGFpbCBwYWdlIHBob3RvIHNsaWRlclxuICogYW5kIHRoZSBmdWxsc2NyZWVuIG1lZGlhIGdhbGxlcnkuXG4gKi9cblxuZXhwb3J0IGNvbnN0IE1FRElBX1NMSURFX1RZUEVTID0ge1xuICBJTUFHRToge1xuICAgIEZMT09SUExBTjogJ2Zsb29ycGxhbicsXG4gICAgSU1BR0U6ICdpbWFnZScsXG4gIH0sXG4gIFZJREVPOiAndmlkZW8nLFxuICBWUjogJ3ZyJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIE1lZGlhU2xpZGVUeXBlID1cbiAgfCAodHlwZW9mIE1FRElBX1NMSURFX1RZUEVTLklNQUdFKVtrZXlvZiB0eXBlb2YgTUVESUFfU0xJREVfVFlQRVMuSU1BR0VdXG4gIHwgdHlwZW9mIE1FRElBX1NMSURFX1RZUEVTLlZJREVPXG4gIHwgdHlwZW9mIE1FRElBX1NMSURFX1RZUEVTLlZSO1xuXG5leHBvcnQgdHlwZSBJbWFnZVNsaWRlVHlwZSA9ICh0eXBlb2YgTUVESUFfU0xJREVfVFlQRVMuSU1BR0UpW2tleW9mIHR5cGVvZiBNRURJQV9TTElERV9UWVBFUy5JTUFHRV07XG5cbnR5cGUgSW1hZ2VTbGlkZSA9IHtcbiAgaW1hZ2VVcmw6IHN0cmluZztcbiAgdHlwZTogSW1hZ2VTbGlkZVR5cGU7XG59O1xuXG5leHBvcnQgdHlwZSBWaWRlb1NsaWRlVHlwZSA9IHR5cGVvZiBNRURJQV9TTElERV9UWVBFUy5WSURFTztcblxudHlwZSBWaWRlb1NsaWRlID0ge1xuICBpbWFnZVVybDogc3RyaW5nO1xuICB0eXBlOiBWaWRlb1NsaWRlVHlwZTtcbiAgdmlkZW9Vcmw6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFZyU2xpZGVUeXBlID0gdHlwZW9mIE1FRElBX1NMSURFX1RZUEVTLlZSO1xuXG50eXBlIFZyU2xpZGUgPSB7XG4gIGltYWdlVXJsOiBzdHJpbmc7XG4gIHR5cGU6IFZyU2xpZGVUeXBlO1xuICB2clVybDogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgTGlzdGluZ01lZGlhID0gSW1hZ2VTbGlkZSB8IFZpZGVvU2xpZGUgfCBWclNsaWRlO1xuIiwiaW1wb3J0IHsgRk9STUFUX1JFR0VYIH0gZnJvbSAnQC90eXBlcy9Gb3JtYXR0ZWQnO1xuaW1wb3J0IHsgY2hlY2tGb3JtYXQgfSBmcm9tICdAL3V0aWxpdGllcy92YWxpZGF0aW9uJztcblxuZXhwb3J0IGNvbnN0IFZBTElEQVRPUiA9IHtcbiAgQUxQSEFfTlVNQkVSX0VNUFRZOiBjaGVja0Zvcm1hdChGT1JNQVRfUkVHRVguYWxwaGFOdW1iZXJPckVtcHR5KSxcbiAgQUxQSEFfU1BBQ0U6IGNoZWNrRm9ybWF0KEZPUk1BVF9SRUdFWC5hbHBoYVNwYWNlKSxcbiAgRU1BSUw6IGNoZWNrRm9ybWF0KEZPUk1BVF9SRUdFWC5lbWFpbCksXG4gIE5VTUJFUjogY2hlY2tGb3JtYXQoRk9STUFUX1JFR0VYLm51bWJlckZvcm1hdHRlZCksXG4gIFBIT05FOiBjaGVja0Zvcm1hdChGT1JNQVRfUkVHRVgucGhvbmUpLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgVmFsaWRhdGlvbkVycm9yID0gc3RyaW5nIHwgYm9vbGVhbjtcbmV4cG9ydCB0eXBlIFZhbGlkYXRpb25SZXN1bHQgPSB7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgdmFsaWQ6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBWYWxpZGF0aW9uTGVuZ3RoID0ge1xuICBtYXhsZW5ndGg/OiBudW1iZXI7XG4gIG1pbmxlbmd0aD86IG51bWJlcjtcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICB2YWx1ZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgVmFsaWRhdG9yID0gKHZhbHVlOiBzdHJpbmcpID0+IFZhbGlkYXRpb25SZXN1bHQ7XG4iXSwibmFtZXMiOlsiT1JJRU5UQVRJT04iLCJDU1MiLCJ1dGlsaXRpZXMiLCJicmVha3BvaW50IiwidXRpbGl0eSIsIlJFQUxNIiwiU0laRSIsIlNJWkVfQlVUVE9OIiwiZm9ybWF0TnVtYmVyIiwiaW5wdXQiLCJvdXRwdXQiLCJkaWdpdHMiLCJmb3JtYXRQYXNjYWxDYXNlIiwid29yZCIsImZvcm1hdFBob25lIiwiZm9ybWF0UHJpY2UiLCJpbm5lclNWRyIsInJlZiIsIndhdGNoIiwicHJvcHMiLCJpZCIsIm5hbWUiLCJwcmVmaXgiLCJyZWFsbUZvbGRlciIsImNvbXBvbmVudCIsImRlZmluZUFzeW5jQ29tcG9uZW50IiwiX192YXJpYWJsZUR5bmFtaWNJbXBvcnRSdW50aW1lSGVscGVyIiwibWFya1JhdyIsIklDT04iLCJJQ09OX1JFQUxNIiwiaGFuZGxlVG9nZ2xlQ2xpY2siLCJlbWl0IiwiRUxFTUVOVCIsIkVMRU1FTlRfVEVYVF9BU19JQ09OIiwiUFJJT1JJVFkiLCJUQVJHRVQiLCJBTEVSVCIsImljb24iLCJjb21wdXRlZCIsIkJBREdFX1RSVVNURUQiLCJoYW5kbGVDbGljayIsImluZGV4IiwiVFlQRV9DQVJEIiwiY29udGVudFJlZiIsImZyYW1lUmVmIiwiY29udGVudFJpZ2h0RWRnZSIsImNvbnRlbnRXaWR0aCIsImN1cnJlbnRTbGlkZSIsImZyYW1lV2lkdGgiLCJoYXNPdmVyZmxvdyIsImlzTGFzdFNsaWRlIiwibGFzdFBvc2l0aW9uIiwic2hvd0J1dHRvbnMiLCJtZWFzdXJlQ3VycmVudFNsaWRlIiwic2xpZGVPZmZzZXRzIiwic2xpZGUiLCJjbG9zZXN0U2xpZGVPZmZzZXQiLCJwcmV2IiwiY3VyciIsIm1lYXN1cmVEb20iLCJoYW5kbGVTY3JvbGwiLCJzY3JvbGxUb1NsaWRlIiwic2xpZGVJbmRleCIsInNob3dOZXh0U2xpZGUiLCJzaG93UHJldmlvdXNTbGlkZSIsIm9uTW91bnRlZCIsIm9uVW5tb3VudGVkIiwib25VcGRhdGVkIiwiaW1hZ2VEZWZhdWx0IiwicGljdHVyZSIsImltZyIsInNldEltYWdlRnJvbURlZmF1bHQiLCJjdXJyZW50U3JjIiwiX2EiLCJwaWN0dXJlU291cmNlIiwiX2IiLCJpc0NoZWNrZWQiLCJjaGVja2VkIiwibmV3VmFsdWUiLCJvbGRWYWx1ZSIsImVycm9yTWVzc2FnZURlZmF1bHQiLCJub0Vycm9yIiwiY2hlY2tGb3JtYXQiLCJmb3JtYXQiLCJ2YWx1ZSIsInJlc3VsdCIsImdldEVycm9yTWVzc2FnZSIsImVycm9yRnJvbVByb3BzIiwiZXJyb3JGcm9tUmVmIiwiZ2V0RmllbGRIYXNFcnJvciIsImdldEZpZWxkTGVuZ3RoSXNWYWxpZCIsIm1heGxlbmd0aCIsIm1pbmxlbmd0aCIsInJlcXVpcmVkIiwiaXNFbXB0eUFuZFVucmVxdWlyZWQiLCJpc1Rvb0xvbmciLCJoYW5kbGVGaWVsZFZhbGlkYXRpb24iLCJlcnJvciIsInZhbGlkYXRvcnMiLCJ2YWxpZGF0aW9uIiwidmFsaWRhdGVQcm9wZXJ0eSIsImxlbmd0aFZhbGlkYXRpb24iLCJ2YWxpZGF0ZUxlbmd0aCIsInJlc3BvbnNlIiwidmFsaWRhdG9yIiwiaGFzRm9jdXMiLCJlcnJvck1lc3NhZ2UiLCJmb3JtYXR0ZWRMYWJlbCIsImhhc0Vycm9yIiwiaGFzTWluaWxhYmVsIiwiaXNFbXB0eSIsImV4cGFuZE9wdGlvbnMiLCJldmVudCIsImhhbmRsZUZvY3VzIiwiaGFuZGxlRm9jdXNPdXQiLCJfX2V4cG9zZSIsIlRFWFRfSU5QVVRfVFlQRSIsInNob3dQYXNzd29yZCIsImhhc0NsZWFyIiwidHlwZSIsImhhbmRsZUNsZWFyIiwiaGFuZGxlVmFsaWRhdGlvbiIsImhhbmRsZUlucHV0IiwidXBkYXRlVmFsdWUiLCJCUkVBS1BPSU5UIiwiTUVESUEiLCJzZXRTY3JvbGxMb2NrIiwiaXNMb2NrZWQiLCJib2R5Iiwic2Nyb2xsWSIsIm5leHRUaWNrIiwic2F2ZWRTY3JvbGxZIiwiVE9QX0xBWUVSX0lEIiwiaW5pdEZhdXhUb3BMYXllciIsInRvcExheWVyIiwibW9kYWxDb250ZW50IiwibW9kYWxEaWFsb2ciLCJ0cmlnZ2VyTmF0aXZlRGlhbG9nT3BlbiIsInRyaWdnZXJOYXRpdmVEaWFsb2dDbG9zZSIsInNjcm9sbENvbnRlbnRUb1RvcCIsInBhZ2VDdXJyZW50IiwicGFnaW5hdGlvbkJ1dHRvbnMiLCJlbXB0eSIsInNpZGVzIiwiYWxpZ25tZW50cyIsInBsYWNlbWVudHMiLCJhY2MiLCJzaWRlIiwibWluIiwibWF4Iiwicm91bmQiLCJmbG9vciIsImNyZWF0ZUNvb3JkcyIsInYiLCJvcHBvc2l0ZVNpZGVNYXAiLCJvcHBvc2l0ZUFsaWdubWVudE1hcCIsImNsYW1wIiwic3RhcnQiLCJlbmQiLCJldmFsdWF0ZSIsInBhcmFtIiwiZ2V0U2lkZSIsInBsYWNlbWVudCIsImdldEFsaWdubWVudCIsImdldE9wcG9zaXRlQXhpcyIsImF4aXMiLCJnZXRBeGlzTGVuZ3RoIiwiZ2V0U2lkZUF4aXMiLCJnZXRBbGlnbm1lbnRBeGlzIiwiZ2V0QWxpZ25tZW50U2lkZXMiLCJyZWN0cyIsInJ0bCIsImFsaWdubWVudCIsImFsaWdubWVudEF4aXMiLCJsZW5ndGgiLCJtYWluQWxpZ25tZW50U2lkZSIsImdldE9wcG9zaXRlUGxhY2VtZW50IiwiZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQiLCJleHBhbmRQYWRkaW5nT2JqZWN0IiwicGFkZGluZyIsImdldFBhZGRpbmdPYmplY3QiLCJyZWN0VG9DbGllbnRSZWN0IiwicmVjdCIsIngiLCJ5Iiwid2lkdGgiLCJoZWlnaHQiLCJjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudCIsIl9yZWYiLCJyZWZlcmVuY2UiLCJmbG9hdGluZyIsInNpZGVBeGlzIiwiYWxpZ25MZW5ndGgiLCJpc1ZlcnRpY2FsIiwiY29tbW9uWCIsImNvbW1vblkiLCJjb21tb25BbGlnbiIsImNvb3JkcyIsImNvbXB1dGVQb3NpdGlvbiIsImNvbmZpZyIsInN0cmF0ZWd5IiwibWlkZGxld2FyZSIsInBsYXRmb3JtIiwidmFsaWRNaWRkbGV3YXJlIiwic3RhdGVmdWxQbGFjZW1lbnQiLCJtaWRkbGV3YXJlRGF0YSIsInJlc2V0Q291bnQiLCJpIiwiZm4iLCJuZXh0WCIsIm5leHRZIiwiZGF0YSIsInJlc2V0IiwiZGV0ZWN0T3ZlcmZsb3ciLCJzdGF0ZSIsIm9wdGlvbnMiLCJfYXdhaXQkcGxhdGZvcm0kaXNFbGUiLCJlbGVtZW50cyIsImJvdW5kYXJ5Iiwicm9vdEJvdW5kYXJ5IiwiZWxlbWVudENvbnRleHQiLCJhbHRCb3VuZGFyeSIsInBhZGRpbmdPYmplY3QiLCJlbGVtZW50IiwiY2xpcHBpbmdDbGllbnRSZWN0Iiwib2Zmc2V0UGFyZW50Iiwib2Zmc2V0U2NhbGUiLCJlbGVtZW50Q2xpZW50UmVjdCIsImdldFBsYWNlbWVudExpc3QiLCJhdXRvQWxpZ25tZW50IiwiYWxsb3dlZFBsYWNlbWVudHMiLCJhdXRvUGxhY2VtZW50IiwiX21pZGRsZXdhcmVEYXRhJGF1dG9QIiwiX21pZGRsZXdhcmVEYXRhJGF1dG9QMiIsIl9wbGFjZW1lbnRzVGhhdEZpdE9uRSIsImNyb3NzQXhpcyIsImRldGVjdE92ZXJmbG93T3B0aW9ucyIsInBsYWNlbWVudHMkMSIsIm92ZXJmbG93IiwiY3VycmVudEluZGV4IiwiY3VycmVudFBsYWNlbWVudCIsImFsaWdubWVudFNpZGVzIiwiY3VycmVudE92ZXJmbG93cyIsImFsbE92ZXJmbG93cyIsIm5leHRQbGFjZW1lbnQiLCJwbGFjZW1lbnRzU29ydGVkQnlNb3N0U3BhY2UiLCJkIiwiYSIsImIiLCJyZXNldFBsYWNlbWVudCIsImNvbnZlcnRWYWx1ZVRvQ29vcmRzIiwibWFpbkF4aXNNdWx0aSIsImNyb3NzQXhpc011bHRpIiwicmF3VmFsdWUiLCJtYWluQXhpcyIsIm9mZnNldCIsIl9taWRkbGV3YXJlRGF0YSRvZmZzZSIsIl9taWRkbGV3YXJlRGF0YSRhcnJvdyIsImRpZmZDb29yZHMiLCJzaGlmdCIsImNoZWNrTWFpbkF4aXMiLCJjaGVja0Nyb3NzQXhpcyIsImxpbWl0ZXIiLCJtYWluQXhpc0Nvb3JkIiwiY3Jvc3NBeGlzQ29vcmQiLCJtaW5TaWRlIiwibWF4U2lkZSIsImxpbWl0ZWRDb29yZHMiLCJoYXNXaW5kb3ciLCJnZXROb2RlTmFtZSIsIm5vZGUiLCJpc05vZGUiLCJnZXRXaW5kb3ciLCJfbm9kZSRvd25lckRvY3VtZW50IiwiZ2V0RG9jdW1lbnRFbGVtZW50IiwiaXNFbGVtZW50IiwiaXNIVE1MRWxlbWVudCIsImlzU2hhZG93Um9vdCIsImlzT3ZlcmZsb3dFbGVtZW50Iiwib3ZlcmZsb3dYIiwib3ZlcmZsb3dZIiwiZGlzcGxheSIsImdldENvbXB1dGVkU3R5bGUiLCJpc1RhYmxlRWxlbWVudCIsImlzVG9wTGF5ZXIiLCJzZWxlY3RvciIsImlzQ29udGFpbmluZ0Jsb2NrIiwiZWxlbWVudE9yQ3NzIiwid2Via2l0IiwiaXNXZWJLaXQiLCJjc3MiLCJnZXRDb250YWluaW5nQmxvY2siLCJjdXJyZW50Tm9kZSIsImdldFBhcmVudE5vZGUiLCJpc0xhc3RUcmF2ZXJzYWJsZU5vZGUiLCJnZXROb2RlU2Nyb2xsIiwiZ2V0TmVhcmVzdE92ZXJmbG93QW5jZXN0b3IiLCJwYXJlbnROb2RlIiwiZ2V0T3ZlcmZsb3dBbmNlc3RvcnMiLCJsaXN0IiwidHJhdmVyc2VJZnJhbWVzIiwiX25vZGUkb3duZXJEb2N1bWVudDIiLCJzY3JvbGxhYmxlQW5jZXN0b3IiLCJpc0JvZHkiLCJ3aW4iLCJmcmFtZUVsZW1lbnQiLCJnZXRGcmFtZUVsZW1lbnQiLCJnZXRDc3NEaW1lbnNpb25zIiwiaGFzT2Zmc2V0Iiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJzaG91bGRGYWxsYmFjayIsInVud3JhcEVsZW1lbnQiLCJnZXRTY2FsZSIsImRvbUVsZW1lbnQiLCIkIiwibm9PZmZzZXRzIiwiZ2V0VmlzdWFsT2Zmc2V0cyIsInNob3VsZEFkZFZpc3VhbE9mZnNldHMiLCJpc0ZpeGVkIiwiZmxvYXRpbmdPZmZzZXRQYXJlbnQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJpbmNsdWRlU2NhbGUiLCJpc0ZpeGVkU3RyYXRlZ3kiLCJjbGllbnRSZWN0Iiwic2NhbGUiLCJ2aXN1YWxPZmZzZXRzIiwib2Zmc2V0V2luIiwiY3VycmVudFdpbiIsImN1cnJlbnRJRnJhbWUiLCJpZnJhbWVTY2FsZSIsImlmcmFtZVJlY3QiLCJsZWZ0IiwidG9wIiwiZ2V0V2luZG93U2Nyb2xsQmFyWCIsImxlZnRTY3JvbGwiLCJnZXRIVE1MT2Zmc2V0IiwiZG9jdW1lbnRFbGVtZW50Iiwic2Nyb2xsIiwiaWdub3JlU2Nyb2xsYmFyWCIsImh0bWxSZWN0IiwiY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3QiLCJvZmZzZXRzIiwiaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQiLCJvZmZzZXRSZWN0IiwiaHRtbE9mZnNldCIsImdldENsaWVudFJlY3RzIiwiZ2V0RG9jdW1lbnRSZWN0IiwiaHRtbCIsImdldFZpZXdwb3J0UmVjdCIsInZpc3VhbFZpZXdwb3J0IiwidmlzdWFsVmlld3BvcnRCYXNlZCIsImdldElubmVyQm91bmRpbmdDbGllbnRSZWN0IiwiZ2V0Q2xpZW50UmVjdEZyb21DbGlwcGluZ0FuY2VzdG9yIiwiY2xpcHBpbmdBbmNlc3RvciIsImhhc0ZpeGVkUG9zaXRpb25BbmNlc3RvciIsInN0b3BOb2RlIiwiZ2V0Q2xpcHBpbmdFbGVtZW50QW5jZXN0b3JzIiwiY2FjaGUiLCJjYWNoZWRSZXN1bHQiLCJlbCIsImN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlIiwiZWxlbWVudElzRml4ZWQiLCJjb21wdXRlZFN0eWxlIiwiY3VycmVudE5vZGVJc0NvbnRhaW5pbmciLCJhbmNlc3RvciIsImdldENsaXBwaW5nUmVjdCIsImNsaXBwaW5nQW5jZXN0b3JzIiwiZmlyc3RDbGlwcGluZ0FuY2VzdG9yIiwiY2xpcHBpbmdSZWN0IiwiYWNjUmVjdCIsImdldERpbWVuc2lvbnMiLCJnZXRSZWN0UmVsYXRpdmVUb09mZnNldFBhcmVudCIsImlzU3RhdGljUG9zaXRpb25lZCIsImdldFRydWVPZmZzZXRQYXJlbnQiLCJwb2x5ZmlsbCIsInJhd09mZnNldFBhcmVudCIsImdldE9mZnNldFBhcmVudCIsInN2Z09mZnNldFBhcmVudCIsImdldEVsZW1lbnRSZWN0cyIsImdldE9mZnNldFBhcmVudEZuIiwiZ2V0RGltZW5zaW9uc0ZuIiwiZmxvYXRpbmdEaW1lbnNpb25zIiwiaXNSVEwiLCJyZWN0c0FyZUVxdWFsIiwib2JzZXJ2ZU1vdmUiLCJvbk1vdmUiLCJpbyIsInRpbWVvdXRJZCIsInJvb3QiLCJjbGVhbnVwIiwiX2lvIiwicmVmcmVzaCIsInNraXAiLCJ0aHJlc2hvbGQiLCJlbGVtZW50UmVjdEZvclJvb3RNYXJnaW4iLCJpbnNldFRvcCIsImluc2V0UmlnaHQiLCJpbnNldEJvdHRvbSIsImluc2V0TGVmdCIsImlzRmlyc3RVcGRhdGUiLCJoYW5kbGVPYnNlcnZlIiwiZW50cmllcyIsInJhdGlvIiwiYXV0b1VwZGF0ZSIsInVwZGF0ZSIsImFuY2VzdG9yU2Nyb2xsIiwiYW5jZXN0b3JSZXNpemUiLCJlbGVtZW50UmVzaXplIiwibGF5b3V0U2hpZnQiLCJhbmltYXRpb25GcmFtZSIsInJlZmVyZW5jZUVsIiwiYW5jZXN0b3JzIiwiY2xlYW51cElvIiwicmVvYnNlcnZlRnJhbWUiLCJyZXNpemVPYnNlcnZlciIsImZpcnN0RW50cnkiLCJfcmVzaXplT2JzZXJ2ZXIiLCJmcmFtZUlkIiwicHJldlJlZlJlY3QiLCJmcmFtZUxvb3AiLCJuZXh0UmVmUmVjdCIsIl9yZXNpemVPYnNlcnZlcjIiLCJvZmZzZXQkMSIsImF1dG9QbGFjZW1lbnQkMSIsInNoaWZ0JDEiLCJtZXJnZWRPcHRpb25zIiwicGxhdGZvcm1XaXRoQ2FjaGUiLCJjb21wdXRlUG9zaXRpb24kMSIsImlzQ29tcG9uZW50UHVibGljSW5zdGFuY2UiLCJ0YXJnZXQiLCJ0b1ZhbHVlIiwic291cmNlIiwidW5yZWYiLCJnZXREUFIiLCJyb3VuZEJ5RFBSIiwiZHByIiwidXNlRmxvYXRpbmciLCJ3aGlsZUVsZW1lbnRzTW91bnRlZE9wdGlvbiIsIm9wZW5PcHRpb24iLCJfdG9WYWx1ZSIsIm1pZGRsZXdhcmVPcHRpb24iLCJwbGFjZW1lbnRPcHRpb24iLCJfdG9WYWx1ZTIiLCJzdHJhdGVneU9wdGlvbiIsIl90b1ZhbHVlMyIsInRyYW5zZm9ybU9wdGlvbiIsIl90b1ZhbHVlNCIsInJlZmVyZW5jZUVsZW1lbnQiLCJmbG9hdGluZ0VsZW1lbnQiLCJzaGFsbG93UmVmIiwiaXNQb3NpdGlvbmVkIiwiZmxvYXRpbmdTdHlsZXMiLCJpbml0aWFsU3R5bGVzIiwieFZhbCIsInlWYWwiLCJ3aGlsZUVsZW1lbnRzTW91bnRlZENsZWFudXAiLCJvcGVuIiwicG9zaXRpb24iLCJhdHRhY2giLCJnZXRDdXJyZW50U2NvcGUiLCJvblNjb3BlRGlzcG9zZSIsInNoYWxsb3dSZWFkb25seSIsImlzQ2xpY2tPdXRzaWRlIiwiYW5jaG9yIiwiaXNIb3ZlcmVkIiwiaXNUb2dnbGVkT3BlbiIsIm9mZnNldE1pZGRsZXdhcmUiLCJpc1Nob3dQb3BvdmVyIiwiaGFuZGxlUGVybWFuZW50T3BlbkJvZHlDbGljayIsImUiLCJoYW5kbGVBbmNob3JFbGVtZW50TW91c2VPdmVyIiwiaGFuZGxlQW5jaG9yRWxlbWVudE1vdXNlTGVhdmUiLCJoYW5kbGVBbmNob3JFbGVtZW50Q2xpY2siLCJhZGRMaXN0ZW5lcnNUb0FuY2hvckVsZW1lbnQiLCJyZW1vdmVMaXN0ZW5lcnNGcm9tQW5jaG9yRWxlbWVudCIsImhhbmRsZVBlcm1hbmVudE9wZW5Cb2R5S2V5ZG93biIsImFkZE9wZW5MaXN0ZW5lcnNUb1Jvb3QiLCJyZW1vdmVPcGVuTGlzdGVuZXJzRnJvbVJvb3QiLCJ1cGRhdGVBbmNob3JFbGVtZW50Iiwid2F0Y2hFZmZlY3QiLCJvbkJlZm9yZU1vdW50IiwiRk9STUFUIiwiRk9STUFUX1JFR0VYIiwiTUVESUFfU0xJREVfVFlQRVMiLCJWQUxJREFUT1IiXSwibWFwcGluZ3MiOiI7QUFBTyxNQUFNQSxLQUFjO0FBQUEsRUFDekIsWUFBWTtBQUFBLEVBQ1osVUFBVTtBQUNaLEdDQ2FDLElBQU07QUFBQSxFQUNqQixnQkFBZ0IsQ0FBQ0MsR0FBcUJDLE1BQzdCRCxFQUFVLElBQUksQ0FBQ0UsTUFBWSxHQUFHRCxDQUFVLElBQUlDLENBQU8sRUFBRTtBQUFBLEVBRTlELE9BQU87QUFBQSxJQUNMLEdBQUc7QUFBQSxNQUNELFFBQVE7QUFBQSxNQUNSLE1BQU07QUFBQSxNQUNOLE9BQU87QUFBQSxJQUNUO0FBQUEsSUFDQSxHQUFHO0FBQUEsTUFDRCxTQUFTO0FBQUEsTUFDVCxRQUFRO0FBQUEsSUFDVjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLE9BQU87QUFBQSxJQUNMLFFBQVE7QUFBQSxJQUNSLFNBQVM7QUFBQSxJQUNULFFBQVE7QUFBQSxJQUNSLEtBQUs7QUFBQSxJQUNMLE9BQU87QUFBQSxFQUNUO0FBQUEsRUFDQSxPQUFPO0FBQUEsSUFDTCxRQUFRO0FBQUEsSUFDUixRQUFRO0FBQUEsSUFDUixLQUFLO0FBQUEsSUFDTCxPQUFPO0FBQUEsRUFDVDtBQUFBLEVBQ0EsSUFBSTtBQUFBLElBQ0YsUUFBUTtBQUFBLE1BQ04sU0FBUztBQUFBLFFBQ1AsT0FBTztBQUFBLFFBQ1AsTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLFFBQ1QsU0FBUztBQUFBLE1BQ1g7QUFBQSxNQUNBLFNBQVM7QUFBQSxRQUNQLE9BQU87QUFBQSxRQUNQLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxRQUNULFNBQVM7QUFBQSxNQUNYO0FBQUEsSUFDRjtBQUFBLElBQ0EsU0FBUztBQUFBLElBQ1QsTUFBTTtBQUFBLElBQ04sU0FBUztBQUFBLElBQ1QsV0FBVztBQUFBLElBQ1gsU0FBUztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsT0FBTztBQUFBLE1BQ1AsU0FBUztBQUFBLE1BQ1QsVUFBVTtBQUFBLE1BQ1YsVUFBVTtBQUFBLE1BQ1YsU0FBUztBQUFBLElBQ1g7QUFBQSxJQUNBLGFBQWE7QUFBQSxNQUNYLGFBQWE7QUFBQSxNQUNiLGFBQWE7QUFBQSxNQUNiLGVBQWU7QUFBQSxNQUNmLGNBQWM7QUFBQSxJQUNoQjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLFFBQVE7QUFBQSxJQUNOLE9BQU87QUFBQSxNQUNMLFFBQVE7QUFBQSxRQUNOLE9BQU87QUFBQSxRQUNQLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxRQUNULFNBQVM7QUFBQSxNQUNYO0FBQUEsTUFDQSxTQUFTO0FBQUEsTUFDVCxTQUFTO0FBQUEsTUFDVCxVQUFVO0FBQUEsTUFDVixNQUFNO0FBQUEsTUFDTixLQUFLO0FBQUEsTUFDTCxTQUFTO0FBQUEsSUFDWDtBQUFBLElBQ0EsUUFBUTtBQUFBLE1BQ04sTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLE1BQ1QsTUFBTTtBQUFBLE1BQ04sS0FBSztBQUFBLE1BQ0wsTUFBTTtBQUFBLElBQ1I7QUFBQSxJQUNBLFFBQVE7QUFBQSxNQUNOLE1BQU07QUFBQSxNQUNOLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxJQUNQO0FBQUEsSUFDQSxNQUFNO0FBQUEsTUFDSixNQUFNO0FBQUEsTUFD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LE1BQU07QUFBQSxNQUNOLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLE1BQU07QUFBQSxJQUNSO0FBQUEsSUFDQSxNQUFNO0FBQUEsTUFDSixNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFDVCxNQUFNO0FBQUEsTUFDTixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTCxNQUFNO0FBQUEsSUFDUjtBQUFBLElBQ0EsTUFBTTtBQUFBLE1BQ0osTUFBTTtBQUFBLE1BQ04sTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLE1BQ1QsTUFBTTtBQUFBLE1BQ04sS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsTUFBTTtBQUFBLElBQ1I7QUFBQSxJQUNBLE9BQU87QUFBQSxNQUNMLE1BQU07QUFBQSxNQUNOLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxNQUNULE1BQU07QUFBQSxNQUNOLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLE1BQU07QUFBQSxJQUNSO0FBQUEsSUFDQSxLQUFLO0FBQUEsTUFDSCxNQUFNO0FBQUEsTUFDTixNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFDVCxNQUFNO0FBQUEsTUFDTixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTCxNQUFNO0FBQUEsSUFDUjtBQUFBLElBQ0EsR0FBRztBQUFBLE1BQ0QsTUFBTTtBQUFBLE1BQ04sTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLE1BQ1QsTUFBTTtBQUFBLE1BQ04sS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsTUFBTTtBQUFBLElBQ1I7QUFBQSxJQUNBLEdBQUc7QUFBQSxNQUNELE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxNQUNULE1BQU07QUFBQSxNQUNOLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLE1BQU07QUFBQSxJQUNSO0FBQUEsRUFDRjtBQUFBLEVBQ0EsUUFBUTtBQUFBLElBQ04sUUFBUTtBQUFBLElBQ1IsU0FBUztBQUFBLElBQ1QsT0FBTztBQUFBLElBQ1AsWUFBWTtBQUFBLEVBQ2Q7QUFBQSxFQUNBLFNBQVM7QUFBQSxJQUNQLEtBQUs7QUFBQSxJQUNMLElBQUk7QUFBQSxFQUNOO0FBQUEsRUFDQSxVQUFVO0FBQUEsSUFDUixHQUFHO0FBQUEsTUFDRCxNQUFNO0FBQUEsTUFDTixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsSUFDVjtBQUFBLElBQ0EsSUFBSTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sUUFBUTtBQUFBLElBQ1Y7QUFBQSxJQUNBLEdBQUc7QUFBQSxNQUNELE1BQU07QUFBQSxNQUNOLFFBQVE7QUFBQSxJQUNWO0FBQUEsRUFDRjtBQUFBLEVBQ0EsU0FBUztBQUFBLElBQ1AsUUFBUTtBQUFBLE1BQ04sTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLE1BQ1QsTUFBTTtBQUFBLE1BQ04sS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsTUFBTTtBQUFBLElBQ1I7QUFBQSxJQUNBLE1BQU07QUFBQSxNQUNKLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxNQUNULE1BQU07QUFBQSxNQUNOLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLE1BQU07QUFBQSxJQUNSO0FBQUEsSUFDQSxNQUFNO0FBQUEsTUFDSixNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFDVCxNQUFNO0FBQUEsTUFDTixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTCxNQUFNO0FBQUEsSUFDUjtBQUFBLElBQ0EsT0FBTztBQUFBLE1BQ0wsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLE1BQ1QsTUFBTTtBQUFBLE1BQ04sS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsTUFBTTtBQUFBLElBQ1I7QUFBQSxJQUNBLEtBQUs7QUFBQSxNQUNILE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxNQUNULE1BQU07QUFBQSxNQUNOLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLE1BQU07QUFBQSxJQUNSO0FBQUEsSUFDQSxHQUFHO0FBQUEsTUFDRCxNQUFNO0FBQUEsTUFDTixTQUFT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QSxFQUFJLFlBQVksTUFDaEJBLEVBQUksV0FBVyxZQUNmQSxFQUFJLFdBQVcsYUFDZkEsRUFBSSxPQUFPLEtBQUssTUFDaEJBLEVBQUksT0FBTyxLQUFLLEtBQ2hCQSxFQUFJLE9BQU8sS0FBSyxNQUNoQkEsRUFBSSxPQUFPLEtBQUssU0FDaEJBLEVBQUksT0FBTyxLQUFLLEtBQ2hCQSxFQUFJLE9BQU8sS0FBSyxNQUNoQkEsRUFBSSxPQUFPLEVBQUUsTUFDYkEsRUFBSSxPQUFPLEVBQUUsS0FDYkEsRUFBSSxPQUFPLEVBQUUsTUFDYkEsRUFBSSxPQUFPLEVBQUUsU0FDYkEsRUFBSSxPQUFPLEVBQUUsS0FDYkEsRUFBSSxPQUFPLEVBQUUsTUFDYkEsRUFBSSxPQUFPLElBQUksTUFDZkEsRUFBSSxPQUFPLElBQUksS0FDZkEsRUFBSSxPQUFPLElBQUksTUFDZkEsRUFBSSxPQUFPLElBQUksU0FDZkEsRUFBSSxPQUFPLElBQUksS0FDZkEsRUFBSSxPQUFPLElBQUksTUFDZkEsRUFBSSxPQUFPLEVBQUUsTUFDYkEsRUFBSSxPQUFPLEVBQUUsS0FDYkEsRUFBSSxPQUFPLEVBQUUsTUFDYkEsRUFBSSxPQUFPLEVBQUUsU0FDYkEsRUFBSSxPQUFPLEVBQUUsS0FDYkEsRUFBSSxPQUFPLEVBQUUsTUFDYkEsRUFBSSxPQUFPLEVBQUUsTUFDYkEsRUFBSSxPQUFPLE1BQU0sTUFDakJBLEVBQUksT0FBTyxNQUFNLEtBQ2pCQSxFQUFJLE9BQU8sTUFBTSxNQUNqQkEsRUFBSSxPQUFPLE1BQU0sU0FDakJBLEVBQUksT0FBTyxNQUFNLEtBQ2pCQSxFQUFJLE9BQU8sTUFBTSxNQUNqQkEsRUFBSSxPQUFPLE1BQU0sTUFDakJBLEVBQUksT0FBTyxPQUFPLE1BQ2xCQSxFQUFJLE9BQU8sT0FBTyxLQUNsQkEsRUFBSSxPQUFPLE9BQU8sTUFDbEJBLEVBQUksT0FBTyxPQUFPLFNBQ2xCQSxFQUFJLE9BQU8sT0FBTyxLQUNsQkEsRUFBSSxPQUFPLE9BQU8sTUFDbEJBLEVBQUksT0FBTyxLQUFLLE1BQ2hCQSxFQUFJLE9BQU8sS0FBSyxLQUNoQkEsRUFBSSxPQUFPLEtBQUssTUFDaEJBLEVBQUksT0FBTyxLQUFLLFNBQ2hCQSxFQUFJLE9BQU8sS0FBSyxLQUNoQkEsRUFBSSxPQUFPLEtBQUssTUFDaEJBLEVBQUksT0FBTyxLQUFLLE1BQ2hCQSxFQUFJLE9BQU8sS0FBSyxLQUNoQkEsRUFBSSxPQUFPLEtBQUssS0FDaEJBLEVBQUksT0FBTyxJQUFJLEtBQ2ZBLEVBQUksT0FBTyxJQUFJLEtBQ2ZBLEVBQUksT0FBTyxNQUFNLEtBQ2pCQSxFQUFJLE9BQU8sTUFBTSxLQUNqQkEsRUFBSSxPQUFPLE9BQU8sS0FDbEJBLEVBQUksT0FBTyxPQUFPLEtBQ2xCQSxFQUFJLE9BQU8sS0FBSyxLQUNoQkEsRUFBSSxPQUFPLEtBQUssS0FDaEJBLEVBQUksT0FBTyxPQUFPLEtBQ2xCQSxFQUFJLE9BQU8sT0FBTyxNQUNsQkEsRUFBSSxPQUFPLE9BQU8sU0FDbEJBLEVBQUksT0FBTyxPQUFPLE1BQ2xCQSxFQUFJLFFBQVEsS0FBSyxNQUNqQkEsRUFBSSxRQUFRLEtBQUssS0FDakJBLEVBQUksUUFBUSxLQUFLLE1BQ2pCQSxFQUFJLFFBQVEsS0FBSyxTQUNqQkEsRUFBSSxRQUFRLEtBQUssS0FDakJBLEVBQUksUUFBUSxLQUFLLE1BQ2pCQSxFQUFJLFFBQVEsRUFBRSxNQUNkQSxFQUFJLFFBQVEsRUFBRSxLQUNkQSxFQUFJLFFBQVEsRUFBRSxNQUNkQSxFQUFJLFFBQVEsRUFBRSxTQUNkQSxFQUFJLFFBQVEsRUFBRSxLQUNkQSxFQUFJLFFBQVEsRUFBRSxNQUNkQSxFQUFJLFFBQVEsSUFBSSxNQUNoQkEsRUFBSSxRQUFRLElBQUksS0FDaEJBLEVBQUksUUFBUSxJQUFJLE1BQ2hCQSxFQUFJLFFBQVEsSUFBSSxTQUNoQkEsRUFBSSxRQUFRLElBQUksS0FDaEJBLEVBQUksUUFBUSxJQUFJLE1BQ2hCQSxFQUFJLFFBQVEsRUFBRSxNQUNkQSxFQUFJLFFBQVEsRUFBRSxLQUNkQSxFQUFJLFFBQVEsRUFBRSxNQUNkQSxFQUFJLFFBQVEsRUFBRSxTQUNkQSxFQUFJLFFBQVEsRUFBRSxLQUNkQSxFQUFJLFFBQVEsRUFBRSxNQUNkQSxFQUFJLFFBQVEsTUFBTSxNQUNsQkEsRUFBSSxRQUFRLE1BQU0sS0FDbEJBLEVBQUksUUFBUSxNQUFNLE1BQ2xCQSxFQUFJLFFBQVEsTUFBTSxTQUNsQkEsRUFBSSxRQUFRLE1BQU0sS0FDbEJBLEVBQUksUUFBUSxNQUFNLE1BQ2xCQSxFQUFJLFFBQVEsT0FBTyxNQUNuQkEsRUFBSSxRQUFRLE9BQU8sS0FDbkJBLEVBQUksUUFBUSxPQUFPLE1BQ25CQSxFQUFJLFFBQVEsT0FBTyxTQUNuQkEsRUFBSSxRQUFRLE9BQU8sS0FDbkJBLEVBQUksUUFBUSxPQUFPLE1BQ25CQSxFQUFJLFFBQVEsS0FBSyxNQUNqQkEsRUFBSSxRQUFRLEtBQUssS0FDakJBLEVBQUksUUFBUSxLQUFLLE1BQ2pCQSxFQUFJLFFBQVEsS0FBSyxTQUNqQkEsRUFBSSxRQUFRLEtBQUssS0FDakJBLEVBQUksUUFBUSxLQUFLLE1BQ2pCQSxFQUFJLE1BQU0sVUFDVkEsRUFBSSxNQUFNLE1BQ1ZBLEVBQUksTUFBTSxNQUNWQSxFQUFJLE9BQU8sTUFDWEEsRUFBSSxPQUFPLE1BQ1hBLEVBQUksTUFBTSxFQUFFLFFBQ1pBLEVBQUksWUFDSkEsRUFBSSxPQUFPLGFBQ1hBLEVBQUksT0FBTyxTQUNYQSxFQUFJLE9BQU8sTUFDWEEsRUFBSSxLQUFLLEtBQUssUUFDZEEsRUFBSSxLQUFLLEtBQUssVUFDZEEsRUFBSSxLQUFLLEtBQUssU0FDZEEsRUFBSSxLQUFLLEtBQUssUUFDZEEsRUFBSSxLQUFLLEtBQUssYUFDZEEsRUFBSSxLQUFLLEtBQUssWUFDZEEsRUFBSSxLQUFLLE9BQU8sY0FDaEJBLEVBQUksS0FBSyxPQUFPLGNBQ2hCQSxFQUFJLEtBQUssT0FBTyxhQUNoQkEsRUFBSSxLQUFLLE9BQU8sZUFDaEJBLEVBQUksYUFBYSxLQUNqQkEsRUFBSSxPQUFPLFFBQ1hBLEVBQUksT0FBTyxTQUNYQSxFQUFJLE9BQU8sT0FDWEEsRUFBSSxPQUFPLFlBQ1hBLEVBQUks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T0FBQSx3QkFBQSxHQUFBLDJDQUFBLE1BQUEsT0FBQSwrQkFBQSxHQUFBLHlDQUFBLE1BQUEsT0FBQSw2QkFBQSxHQUFBLHFDQUFBLE1BQUEsT0FBQSx5QkFBQSxHQUFBLDJDQUFBLE1BQUEsT0FBQSwrQkFBQSxHQUFBLDRDQUFBLE1BQUEsT0FBQSxnQ0FBQSxHQUFBLHFDQUFBLE1BQUEsT0FBQSx5QkFBQSxHQUFBLHFDQUFBLE1BQUEsT0FBQSx5QkFBQSxHQUFBLHdDQUFBLE1BQUEsT0FBQSw0QkFBQSxHQUFBLHFDQUFBLE1BQUEsT0FBQSx5QkFBQSxHQUFBLGtEQUFBLE1BQUEsT0FBQSxzQ0FBQSxHQUFBLHNDQUFBLE1BQUEsT0FBQSwwQkFBQSxHQUFBLHVDQUFBLE1BQUEsT0FBQSwyQkFBQSxHQUFBLDhDQUFBLE1BQUEsT0FBQSxrQ0FBQSxHQUFBLHNDQUFBLE1BQUEsT0FBQSwwQkFBQSxHQUFBLHFDQUFBLE1BQUEsT0FBQSx5QkFBQSxHQUFBLG9DQUFBLE1BQUEsT0FBQSx3QkFBQSxHQUFBLHNDQUFBLE1BQUEsT0FBQSwwQkFBQSxHQUFBLDJDQUFBLE1BQUEsT0FBQSwrQkFBQSxHQUFBLHFDQUFBLE1BQUEsT0FBQSx5QkFBQSxHQUFBLDZDQUFBLE1BQUEsT0FBQSxpQ0FBQSxHQUFBLDBDQUFBLE1BQUEsT0FBQSw4QkFBQSxHQUFBLDBDQUFBLE1BQUEsT0FBQSw4QkFBQSxHQUFBLHdDQUFBLE1BQUEsT0FBQSw0QkFBQSxHQUFBLHdDQUFBLE1BQUEsT0FBQSw0QkFBQSxHQUFBLDhDQUFBLE1BQUEsT0FBQSxrQ0FBQSxHQUFBLG9DQUFBLE1BQUEsT0FBQSx3QkFBQSxHQUFBLDBDQUFBLE1BQUEsT0FBQSw4QkFBQSxHQUFBLDRDQUFBLE1BQUEsT0FBQSxnQ0FBQSxHQUFBLGtEQUFBLE1BQUEsT0FBQSxzQ0FBQSxHQUFBLHFDQUFBLE1BQUEsT0FBQSx5QkFBQSxHQUFBLG1DQUFBLE1BQUEsT0FBQSx1QkFBQSxHQUFBLHFDQUFBLE1BQUEsT0FBQSx5QkFBQSxHQUFBLHFDQUFBLE1BQUEsT0FBQSx5QkFBQSxHQUFBLGdEQUFBLE1BQUEsT0FBQSxvQ0FBQSxHQUFBLHNDQUFBLE1BQUEsT0FBQSwwQkFBQSxHQUFBLHlDQUFBLE1BQUEsT0FBQSw2QkFBQSxHQUFBLG9DQUFBLE1BQUEsT0FBQSx3QkFBQSxHQUFBLHlDQUFBLE1BQUEsT0FBQSw2QkFBQSxHQUFBLHdDQUFBLE1BQUEsT0FBQSw0QkFBQSxHQUFBLHNDQUFBLE1BQUEsT0FBQSwwQkFBQSxHQUFBLG9DQUFBLE1BQUEsT0FBQSx3QkFBQSxHQUFBLG9DQUFBLE1BQUEsT0FBQSx3QkFBQSxHQUFBLDJDQUFBLE1BQUEsT0FBQSwrQkFBQSxHQUFBLDBDQUFBLE1BQUEsT0FBQSw4QkFBQSxHQUFBLHlDQUFBLE1BQUEsT0FBQSw2QkFBQSxHQUFBLHdDQUFBLE1BQUEsT0FBQSw0QkFBQSxHQUFBLHNDQUFBLE1BQUEsT0FBQSwwQkFBQSxHQUFBLDZDQUFBLE1BQUEsT0FBQSxpQ0FBQSxHQUFBLHdDQUFBLE1BQUEsT0FBQSw0QkFBQSxHQUFBLDZDQUFBLE1BQUEsT0FBQSxpQ0FBQSxHQUFBLG9DQUFBLE1BQUEsT0FBQSx3QkFBQSxHQUFBLG9DQUFBLE1BQUEsT0FBQSx3QkFBQSxHQUFBLG9DQUFBLE1BQUEsT0FBQSx3QkFBQSxHQUFBLHdDQUFBLE1BQUEsT0FBQSw0QkFBQSxHQUFBLHlDQUFBLE1BQUEsT0FBQSw2QkFBQSxHQUFBLDZDQUFBLE1BQUEsT0FBQSxpQ0FBQSxHQUFBLHdDQUFBLE1BQUEsT0FBQSw0QkFBQSxHQUFBLHlDQUFBLE1BQUEsT0FBQSw2QkFBQSxHQUFBLHVDQUFBLE1BQUEsT0FBQSwyQkFBQSxHQUFBLHNDQUFBLE1BQUEsT0FBQSwwQkFBQSxHQUFBLHNDQUFBLE1BQUEsT0FBQSwwQkFBQSxHQUFBLDRDQUFBLE1BQUEsT0FBQSxnQ0FBQSxHQUFBLDJDQUFBLE1BQUEsT0FBQSwrQkFBQSxHQUFBLHlDQUFBLE1BQUEsT0FBQSw2QkFBQSxHQUFBLHlDQUFBLE1BQUEsT0FBQSw2QkFBQSxHQUFBLHNDQUFBLE1BQUEsT0FBQSwwQkFBQSxHQUFBLHFDQUFBLE1BQUEsT0FBQSx5QkFBQSxHQUFBLHdDQUFBLE1BQUEsT0FBQSw0QkFBQSxHQUFBLDRDQUFBLE1BQUEsT0FBQSxnQ0FBQSxHQUFBLHNDQUFBLE1BQUEsT0FBQSwwQkFBQSxHQUFBLDRDQUFBLE1BQUEsT0FBQSxnQ0FBQSxHQUFBLDJDQUFBLE1BQUEsT0FBQSwrQkFBQSxHQUFBLG9DQUFBLE1BQUEsT0FBQSx3QkFBQSxHQUFBLDZDQUFBLE1BQUEsT0FBQSxpQ0FBQSxHQUFBLHFDQUFBLE1BQUEsT0FBQSx5QkFBQSxHQUFBLHVDQUFBLE1BQUEsT0FBQSwyQkFBQSxHQUFBLHNDQUFBLE1BQUEsT0FBQSwwQkFBQSxHQUFBLHNDQUFBLE1BQUEsT0FBQSwwQkFBQSxHQUFBLHVDQUFBLE1BQUEsT0FBQSwyQkFBQSxHQUFBLG9DQUFBLE1BQUEsT0FBQSx3QkFBQSxHQUFBLHVDQUFBLE1BQUEsT0FBQSwyQkFBQSxHQUFBLHdDQUFBLE1BQUEsT0FBQSw0QkFBQSxHQUFBLHFDQUFBLE1BQUEsT0FBQSx5QkFBQSxHQUFBLDJDQUFBLE1BQUEsT0FBQSwrQkFBQSxHQUFBLDRDQUFBLE1BQUEsT0FBQSxnQ0FBQSxHQUFBLHNDQUFBLE1BQUEsT0FBQSwwQkFBQSxHQUFBLG1DQUFBLE1BQUEsT0FBQSx1QkFBQSxHQUFBLHlDQUFBLE1BQUEsT0FBQSw2QkFBQSxHQUFBLG9DQUFBLE1BQUEsT0FBQSx3QkFBQSxHQUFBLHlDQUFBLE1BQUEsT0FBQSw2QkFBQSxHQUFBLHlDQUFBLE1BQUEsT0FBQSw2QkFBQSxHQUFBLHdDQUFBLE1BQUEsT0FBQSw0QkFBQSxHQUFBLDhDQUFBLE1BQUEsT0FBQSxrQ0FBQSxHQUFBLHVDQUFBLE1BQUEsT0FBQSwyQkFBQSxHQUFBLDRDQUFBLE1BQUEsT0FBQSxnQ0FBQSxHQUFBLHNDQUFBLE1BQUEsT0FBQSwwQkFBQSxHQUFBLG9DQUFBLE1BQUEsT0FBQSx3QkFBQSxHQUFBLHVDQUFBLE1BQUEsT0FBQSwyQkFBQSxHQUFBLHdDQUFBLE1BQUEsT0FBQSw0QkFBQSxHQUFBLHdDQUFBLE1BQUEs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YztBQUFBLE1BQ0UsTUFBTUMsRUFBTTtBQUFBLE1BQ1osTUFBTTtBQUM2QixRQUFBd2MsS0FDYkksS0FDUUw7TUFDOUI7QUFBQSxJQUFBLEdBR0ZNLEdBQVksTUFBTTtBQUNoQixNQUFBdlIsRUFBVyxRQUFRLENBQUM4QixHQUFpQixHQUFBNE8sR0FBaUIsRUFBRSxVQUFVaGMsRUFBTSxPQUFRLENBQUEsR0FBR2dQLEdBQU0sRUFBRSxTQUFTLEdBQUEsQ0FBSSxDQUFDO0FBQUEsSUFBQSxDQUMxRyxHQUVEOE4sR0FBYyxNQUFNO0FBQ0QsTUFBQTVWO0lBQUEsQ0FDbEIsR0FFRHBFLEdBQVUsTUFBTTtBQUNNLE1BQUE4WixLQUNwQjFGLEVBQUssUUFBUSxTQUFTLGlCQUNNcUY7SUFBQSxDQUM3QixHQUVEeFosR0FBWSxNQUFNO0FBQ2lCLE1BQUF5WjtJQUFBLENBQ2xDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2lCQzVHS25iLElBQWMsTUFBTTtBQUNwQixNQUFDckIsRUFBTSxZQUNUWSxFQUFLLFFBQVE7QUFBQSxJQUNmOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7c0VDZlNtYyxLQUFTO0FBQUEsRUFDcEIsUUFBUTFkO0FBQUEsRUFDUixPQUFPTTtBQUFBLEVBQ1AsT0FBT0M7QUFDVCxHQUVhb2QsS0FBZTtBQUFBLEVBQzFCLE9BQU87QUFBQSxFQUNQLG9CQUFvQjtBQUFBLEVBQ3BCLFlBQVk7QUFBQSxFQUNaLE9BQ0U7QUFBQSxFQUNGLGlCQUFpQjtBQUFBLEVBQ2pCLE9BQU87QUFBQSxFQUNQLE9BQU87QUFDVCxHQ2hCYUMsS0FBb0I7QUFBQSxFQUMvQixPQUFPO0FBQUEsSUFDTCxXQUFXO0FBQUEsSUFDWCxPQUFPO0FBQUEsRUFDVDtBQUFBLEVBQ0EsT0FBTztBQUFBLEVBQ1AsSUFBSTtBQUNOLEdDVGFDLEtBQVk7QUFBQSxFQUN2QixvQkFBb0JuWixHQUFZaVosR0FBYSxrQkFBa0I7QUFBQSxFQUMvRCxhQUFhalosR0FBWWlaLEdBQWEsVUFBVTtBQUFBLEVBQ2hELE9BQU9qWixHQUFZaVosR0FBYSxLQUFLO0FBQUEsRUFDckMsUUFBUWpaLEdBQVlpWixHQUFhLGVBQWU7QUFBQSxFQUNoRCxPQUFPalosR0FBWWlaLEdBQWEsS0FBSztBQUN2QzsiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMjksMzAsMzEsMzIsMzNdfQ==
|