galadrim-feedback 0.0.56 → 0.0.57

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs.js CHANGED
@@ -8787,38 +8787,10 @@ const SideBar = () => {
8787
8787
  return reactDom.createPortal(jsxRuntime.jsx("div", { id: "feedback-sidebar", className: `fixed top-0 transition-all w-[320px] h-screen z-[10000000] bg-gray-feedback-800 text-white px-3 py-4 ${isCollapsed ? "right-[-320px]" : "right-0"}`, children: jsxRuntime.jsxs("div", { className: "flex h-full w-full items-center flex-col", children: [jsxRuntime.jsxs("div", { className: "w-full flex flex-row justify-between items-center", children: [jsxRuntime.jsx("img", { src: img, className: "z-10" }), jsxRuntime.jsx(CloseButton, { onClick: closeFeedbackOverlay, size: "large" })] }), isConnected ? jsxRuntime.jsx(ConnectedPanel, {}) : jsxRuntime.jsx(ConnectionPanel, {}), jsxRuntime.jsx(CollapseButton, { isCollapsed: isCollapsed, setIsCollapsed: setIsCollapsed })] }) }), document.body);
8788
8788
  };
8789
8789
 
8790
- function styleInject(css, ref) {
8791
- if (ref === void 0) ref = {};
8792
- var insertAt = ref.insertAt;
8793
- if (typeof document === 'undefined') {
8794
- return;
8795
- }
8796
- var head = document.head || document.getElementsByTagName('head')[0];
8797
- var style = document.createElement('style');
8798
- style.type = 'text/css';
8799
- if (insertAt === 'top') {
8800
- if (head.firstChild) {
8801
- head.insertBefore(style, head.firstChild);
8802
- } else {
8803
- head.appendChild(style);
8804
- }
8805
- } else {
8806
- head.appendChild(style);
8807
- }
8808
- if (style.styleSheet) {
8809
- style.styleSheet.cssText = css;
8810
- } else {
8811
- style.appendChild(document.createTextNode(css));
8812
- }
8813
- }
8814
-
8815
- var css_248z = "*, ::before, ::after {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(0 133 255 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n --tw-contain-size: ;\n --tw-contain-layout: ;\n --tw-contain-paint: ;\n --tw-contain-style: ;\n}\n\n::backdrop {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(0 133 255 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n --tw-contain-size: ;\n --tw-contain-layout: ;\n --tw-contain-paint: ;\n --tw-contain-style: ;\n}/*\n! tailwindcss v3.4.13 | MIT License | https://tailwindcss.com\n*//*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n border-style: solid; /* 2 */\n border-color: #e5e7eb; /* 2 */\n}\n\n::before,\n::after {\n --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n6. Use the user's configured `sans` font-variation-settings by default.\n7. Disable tap highlights on iOS\n*/\n\nhtml,\n:host {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n -moz-tab-size: 4; /* 3 */\n -o-tab-size: 4;\n tab-size: 4; /* 3 */\n font-family: ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"; /* 4 */\n font-feature-settings: normal; /* 5 */\n font-variation-settings: normal; /* 6 */\n -webkit-tap-highlight-color: transparent; /* 7 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n margin: 0; /* 1 */\n line-height: inherit; /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n color: inherit;\n text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/*\n1. Use the user's configured `mono` font-family by default.\n2. Use the user's configured `mono` font-feature-settings by default.\n3. Use the user's configured `mono` font-variation-settings by default.\n4. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace; /* 1 */\n font-feature-settings: normal; /* 2 */\n font-variation-settings: normal; /* 3 */\n font-size: 1em; /* 4 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-feature-settings: inherit; /* 1 */\n font-variation-settings: inherit; /* 1 */\n font-size: 100%; /* 1 */\n font-weight: inherit; /* 1 */\n line-height: inherit; /* 1 */\n letter-spacing: inherit; /* 1 */\n color: inherit; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\ninput:where([type='button']),\ninput:where([type='reset']),\ninput:where([type='submit']) {\n -webkit-appearance: button; /* 1 */\n background-color: transparent; /* 2 */\n background-image: none; /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\n\nfieldset {\n margin: 0;\n padding: 0;\n}\n\nlegend {\n padding: 0;\n}\n\nol,\nul,\nmenu {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n/*\nReset default styling for dialogs.\n*/\ndialog {\n padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role=\"button\"] {\n cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n:disabled {\n cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n[hidden] {\n display: none;\n}\n.fixed {\n position: fixed;\n}\n.absolute {\n position: absolute;\n}\n.relative {\n position: relative;\n}\n.bottom-\\[2px\\] {\n bottom: 2px;\n}\n.left-\\[-32px\\] {\n left: -32px;\n}\n.right-0 {\n right: 0px;\n}\n.right-2 {\n right: 0.5rem;\n}\n.right-\\[-320px\\] {\n right: -320px;\n}\n.top-0 {\n top: 0px;\n}\n.top-8 {\n top: 2rem;\n}\n.z-10 {\n z-index: 10;\n}\n.z-20 {\n z-index: 20;\n}\n.z-\\[10000000\\] {\n z-index: 10000000;\n}\n.m-1 {\n margin: 0.25rem;\n}\n.m-3 {\n margin: 0.75rem;\n}\n.mb-12 {\n margin-bottom: 3rem;\n}\n.mb-3 {\n margin-bottom: 0.75rem;\n}\n.mb-4 {\n margin-bottom: 1rem;\n}\n.mb-\\[6px\\] {\n margin-bottom: 6px;\n}\n.mt-1 {\n margin-top: 0.25rem;\n}\n.mt-2 {\n margin-top: 0.5rem;\n}\n.mt-4 {\n margin-top: 1rem;\n}\n.line-clamp-2 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n}\n.flex {\n display: flex;\n}\n.h-10 {\n height: 2.5rem;\n}\n.h-16 {\n height: 4rem;\n}\n.h-4 {\n height: 1rem;\n}\n.h-5 {\n height: 1.25rem;\n}\n.h-6 {\n height: 1.5rem;\n}\n.h-\\[43px\\] {\n height: 43px;\n}\n.h-full {\n height: 100%;\n}\n.h-screen {\n height: 100vh;\n}\n.max-h-\\[220px\\] {\n max-height: 220px;\n}\n.max-h-\\[calc\\(100vh-72px\\)\\] {\n max-height: calc(100vh - 72px);\n}\n.w-10 {\n width: 2.5rem;\n}\n.w-16 {\n width: 4rem;\n}\n.w-4 {\n width: 1rem;\n}\n.w-5 {\n width: 1.25rem;\n}\n.w-6 {\n width: 1.5rem;\n}\n.w-\\[240px\\] {\n width: 240px;\n}\n.w-\\[320px\\] {\n width: 320px;\n}\n.w-\\[400px\\] {\n width: 400px;\n}\n.w-full {\n width: 100%;\n}\n.w-min {\n width: -moz-min-content;\n width: min-content;\n}\n.flex-1 {\n flex: 1 1 0%;\n}\n.flex-shrink-0 {\n flex-shrink: 0;\n}\n.cursor-pointer {\n cursor: pointer;\n}\n.resize {\n resize: both;\n}\n.flex-row {\n flex-direction: row;\n}\n.flex-col {\n flex-direction: column;\n}\n.items-start {\n align-items: flex-start;\n}\n.items-center {\n align-items: center;\n}\n.items-baseline {\n align-items: baseline;\n}\n.items-stretch {\n align-items: stretch;\n}\n.justify-start {\n justify-content: flex-start;\n}\n.justify-center {\n justify-content: center;\n}\n.justify-between {\n justify-content: space-between;\n}\n.gap-1 {\n gap: 0.25rem;\n}\n.gap-2 {\n gap: 0.5rem;\n}\n.gap-3 {\n gap: 0.75rem;\n}\n.gap-4 {\n gap: 1rem;\n}\n.overflow-hidden {\n overflow: hidden;\n}\n.overflow-y-auto {\n overflow-y: auto;\n}\n.overflow-x-hidden {\n overflow-x: hidden;\n}\n.whitespace-nowrap {\n white-space: nowrap;\n}\n.rounded {\n border-radius: 0.25rem;\n}\n.rounded-\\[12px\\] {\n border-radius: 12px;\n}\n.rounded-full {\n border-radius: 9999px;\n}\n.rounded-lg {\n border-radius: 0.5rem;\n}\n.border {\n border-width: 1px;\n}\n.border-none {\n border-style: none;\n}\n.border-gray-feedback-400 {\n --tw-border-opacity: 1;\n border-color: rgb(164 167 174 / var(--tw-border-opacity));\n}\n.border-gray-feedback-500 {\n --tw-border-opacity: 1;\n border-color: rgb(113 118 128 / var(--tw-border-opacity));\n}\n.bg-blue-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(0 133 255 / var(--tw-bg-opacity));\n}\n.bg-gray-feedback-700 {\n --tw-bg-opacity: 1;\n background-color: rgb(65 70 81 / var(--tw-bg-opacity));\n}\n.bg-gray-feedback-750 {\n --tw-bg-opacity: 1;\n background-color: rgb(52 61 75 / var(--tw-bg-opacity));\n}\n.bg-gray-feedback-800 {\n --tw-bg-opacity: 1;\n background-color: rgb(37 43 55 / var(--tw-bg-opacity));\n}\n.bg-primary-feedback-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(2 106 208 / var(--tw-bg-opacity));\n}\n.bg-white {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity));\n}\n.p-2 {\n padding: 0.5rem;\n}\n.p-3 {\n padding: 0.75rem;\n}\n.p-8 {\n padding: 2rem;\n}\n.px-2 {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.px-3 {\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n}\n.px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n.py-1 {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n}\n.py-2 {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n.py-4 {\n padding-top: 1rem;\n padding-bottom: 1rem;\n}\n.pr-6 {\n padding-right: 1.5rem;\n}\n.pt-4 {\n padding-top: 1rem;\n}\n.pt-8 {\n padding-top: 2rem;\n}\n.text-center {\n text-align: center;\n}\n.text-3xl {\n font-size: 1.875rem;\n line-height: 2.25rem;\n}\n.text-\\[10px\\] {\n font-size: 10px;\n}\n.text-\\[14px\\] {\n font-size: 14px;\n}\n.text-\\[16px\\] {\n font-size: 16px;\n}\n.text-base {\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.text-xs {\n font-size: 0.75rem;\n line-height: 1rem;\n}\n.font-bold {\n font-weight: 700;\n}\n.font-medium {\n font-weight: 500;\n}\n.font-semibold {\n font-weight: 600;\n}\n.leading-5 {\n line-height: 1.25rem;\n}\n.leading-\\[12px\\] {\n line-height: 12px;\n}\n.text-black {\n --tw-text-opacity: 1;\n color: rgb(0 0 0 / var(--tw-text-opacity));\n}\n.text-gray-feedback-200 {\n --tw-text-opacity: 1;\n color: rgb(233 234 235 / var(--tw-text-opacity));\n}\n.text-gray-feedback-300 {\n --tw-text-opacity: 1;\n color: rgb(213 215 218 / var(--tw-text-opacity));\n}\n.text-gray-feedback-400 {\n --tw-text-opacity: 1;\n color: rgb(164 167 174 / var(--tw-text-opacity));\n}\n.text-gray-feedback-900 {\n --tw-text-opacity: 1;\n color: rgb(24 29 39 / var(--tw-text-opacity));\n}\n.text-primary-feedback-400 {\n --tw-text-opacity: 1;\n color: rgb(46 153 255 / var(--tw-text-opacity));\n}\n.text-red-500 {\n --tw-text-opacity: 1;\n color: rgb(255 36 98 / var(--tw-text-opacity));\n}\n.text-white {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n.opacity-50 {\n opacity: 0.5;\n}\n.opacity-60 {\n opacity: 0.6;\n}\n.outline-none {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.filter {\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.transition {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-all {\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.ease-in-out {\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n/* Define Arial Variable Font */\n@font-face {\n font-family: \"Kumbh Sans\";\n font-weight: 100 900; /* This specifies the weight range for the variable font */\n font-style: normal;\n src: url(\"./assets/fonts/KumbhSans.ttf\") format(\"truetype\");\n}\n\nbody.comment-cursor,\nbody.comment-cursor\n *:not(#feedback-sidebar):not(#feedback-sidebar *):not(.feedback-item):not(\n .feedback-item *\n ):not(.comment-container *) {\n cursor: url(\"./assets/icons/comment.svg\") 0 24, auto !important;\n}\n\nbody.comment-cursor #feedback-sidebar,\nbody.comment-cursor .comment-container div {\n cursor: auto !important;\n}\n\n.scrollbar-hide {\n -ms-overflow-style: none;\n scrollbar-width: none;\n}\n.scrollbar-hide::-webkit-scrollbar {\n display: none;\n}\n\n.scrollbar-dark {\n scrollbar-color: #717680 #343d4b;\n scrollbar-width: thin;\n}\n.comment-icon {\n fill: #343d4b;\n animation: iconOpening 0.3s ease forwards;\n background-color: #0085ff;\n border-radius: 50% 50% 50% 4px;\n}\n\n@keyframes iconOpening {\n from {\n width: 24px;\n height: 24px;\n }\n to {\n width: 48px;\n height: 48px;\n }\n}\n\n.comment-container {\n position: relative;\n display: flex;\n flex-direction: row;\n align-items: start;\n min-height: 48px;\n width: 348px;\n gap: 8px;\n}\n\n.comment-input-container-opening {\n animation: containerOpening 0.3s ease-in-out;\n}\n\n@keyframes containerOpening {\n from {\n transform: scale(0); /* Initial state */\n }\n to {\n transform: scale(1); /* Final state */\n }\n}\n\n.comment-input-container {\n border-radius: 8px;\n min-height: 64px;\n flex-grow: 1;\n}\n\n.comment-input-container-empty {\n display: flex;\n align-items: center;\n gap: 8px;\n border-radius: 8px;\n min-height: 48px;\n flex-grow: 1;\n}\n\ntextarea {\n resize: none !important;\n overflow: hidden;\n}\n\n.comment-input {\n flex-grow: 1;\n font-size: 14px;\n line-height: 16px;\n padding: 4px 14px;\n border-radius: 8px;\n outline: none;\n color: #fff;\n background-color: transparent;\n}\n\n.comment-input-filled {\n width: 100%;\n min-height: 60px;\n padding: 14px 14px;\n}\n\n.comment-input::-moz-placeholder {\n color: #fff;\n}\n\n.comment-input::placeholder {\n color: #fff;\n}\n\n.buttons-container {\n border-top: 1px solid #475467;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: flex-end;\n}\n\n.button-send {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.send-icon {\n color: #fff;\n}\n\n.send-icon-active {\n color: #0085ff;\n}\n\n.feedback-item {\n display: flex;\n align-items: start;\n gap: 12px;\n width: 48px;\n height: auto;\n max-height: 48px;\n background-color: #343d4b;\n border-radius: 24px 24px 24px 4px;\n overflow: hidden;\n cursor: pointer !important;\n transition: all 0.25s ease-in-out;\n}\n\n.feedback-item:hover:not(.feedback-item.selected) {\n width: 264px;\n max-height: 96px;\n}\n\n.feedback-item.selected {\n width: 264px;\n max-height: 400px;\n border-radius: 24px;\n}\n\n.kumbh-regular {\n font-family: \"Arial\", sans-serif;\n font-weight: 400;\n font-style: normal;\n}\n\n.kumbh-medium {\n font-family: \"Arial\", sans-serif;\n font-weight: 500;\n font-style: normal;\n}\n\n.kumbh-semibold {\n font-family: \"Arial\", sans-serif;\n font-weight: 600;\n font-style: normal;\n}\n\n.kumbh-bold {\n font-family: \"Arial\", sans-serif;\n font-weight: 700;\n font-style: normal;\n}\n\n.placeholder\\:text-gray-feedback-300::-moz-placeholder {\n --tw-text-opacity: 1;\n color: rgb(213 215 218 / var(--tw-text-opacity));\n}\n\n.placeholder\\:text-gray-feedback-300::placeholder {\n --tw-text-opacity: 1;\n color: rgb(213 215 218 / var(--tw-text-opacity));\n}\n\n.hover\\:bg-gray-feedback-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(65 70 81 / var(--tw-bg-opacity));\n}\n\n.hover\\:bg-primary-feedback-400:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(46 153 255 / var(--tw-bg-opacity));\n}\n\n.hover\\:bg-opacity-80:hover {\n --tw-bg-opacity: 0.8;\n}\n\n.hover\\:opacity-100:hover {\n opacity: 1;\n}\n\n.disabled\\:bg-blue-100:disabled {\n --tw-bg-opacity: 1;\n background-color: rgb(235 245 255 / var(--tw-bg-opacity));\n}\n\n.disabled\\:text-blue-300:disabled {\n --tw-text-opacity: 1;\n color: rgb(147 197 253 / var(--tw-text-opacity));\n}\n";
8816
- styleInject(css_248z);
8817
-
8818
8790
  const queryClient = new QueryClient();
8819
8791
  function FeedbackRoot(props) {
8820
8792
  return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsx(QueryClientProvider, { client: queryClient, children: jsxRuntime.jsxs(FeedbackProvider, Object.assign({}, props, { children: [jsxRuntime.jsx(FeedbackInput, {}), jsxRuntime.jsx(SideBar, {}), jsxRuntime.jsx(OpenFeedbackButton, {}), jsxRuntime.jsx(FeedbackPins, {})] })) }) }));
8821
8793
  }
8822
8794
 
8823
8795
  module.exports = FeedbackRoot;
8824
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzLmpzIiwic291cmNlcyI6WyIuLi9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3F1ZXJ5LWNvcmUvYnVpbGQvbW9kZXJuL3N1YnNjcmliYWJsZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9yb2xsdXAtcGx1Z2luLW5vZGUtcG9seWZpbGxzL3BvbHlmaWxscy9nbG9iYWwuanMiLCIuLi9ub2RlX21vZHVsZXMvcm9sbHVwLXBsdWdpbi1ub2RlLXBvbHlmaWxscy9wb2x5ZmlsbHMvcHJvY2Vzcy1lczYuanMiLCIuLi9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3F1ZXJ5LWNvcmUvYnVpbGQvbW9kZXJuL3V0aWxzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9xdWVyeS1jb3JlL2J1aWxkL21vZGVybi9mb2N1c01hbmFnZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3F1ZXJ5LWNvcmUvYnVpbGQvbW9kZXJuL29ubGluZU1hbmFnZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3F1ZXJ5LWNvcmUvYnVpbGQvbW9kZXJuL3RoZW5hYmxlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9xdWVyeS1jb3JlL2J1aWxkL21vZGVybi9yZXRyeWVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9xdWVyeS1jb3JlL2J1aWxkL21vZGVybi9ub3RpZnlNYW5hZ2VyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9xdWVyeS1jb3JlL2J1aWxkL21vZGVybi9yZW1vdmFibGUuanMiLCIuLi9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3F1ZXJ5LWNvcmUvYnVpbGQvbW9kZXJuL3F1ZXJ5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9xdWVyeS1jb3JlL2J1aWxkL21vZGVybi9xdWVyeUNhY2hlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9xdWVyeS1jb3JlL2J1aWxkL21vZGVybi9tdXRhdGlvbi5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcXVlcnktY29yZS9idWlsZC9tb2Rlcm4vbXV0YXRpb25DYWNoZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcXVlcnktY29yZS9idWlsZC9tb2Rlcm4vaW5maW5pdGVRdWVyeUJlaGF2aW9yLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9xdWVyeS1jb3JlL2J1aWxkL21vZGVybi9xdWVyeUNsaWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcXVlcnktY29yZS9idWlsZC9tb2Rlcm4vcXVlcnlPYnNlcnZlci5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcXVlcnktY29yZS9idWlsZC9tb2Rlcm4vbXV0YXRpb25PYnNlcnZlci5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcmVhY3QtcXVlcnkvYnVpbGQvbW9kZXJuL1F1ZXJ5Q2xpZW50UHJvdmlkZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5L2J1aWxkL21vZGVybi9pc1Jlc3RvcmluZy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcmVhY3QtcXVlcnkvYnVpbGQvbW9kZXJuL1F1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9yZWFjdC1xdWVyeS9idWlsZC9tb2Rlcm4vdXRpbHMuanMiLCIuLi9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5L2J1aWxkL21vZGVybi9lcnJvckJvdW5kYXJ5VXRpbHMuanMiLCIuLi9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5L2J1aWxkL21vZGVybi9zdXNwZW5zZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcmVhY3QtcXVlcnkvYnVpbGQvbW9kZXJuL3VzZUJhc2VRdWVyeS5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcmVhY3QtcXVlcnkvYnVpbGQvbW9kZXJuL3VzZVF1ZXJ5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9yZWFjdC1xdWVyeS9idWlsZC9tb2Rlcm4vdXNlTXV0YXRpb24uanMiLCIuLi8uLi9saWJzL2JhY2tlbmQtY2xpZW50L2Jhc2UudHMiLCIuLi8uLi9saWJzL2JhY2tlbmQtY2xpZW50L2NvbW1vbi50cyIsIi4uLy4uL2xpYnMvYmFja2VuZC1jbGllbnQvYXBpLnRzIiwiLi4vLi4vbGlicy9iYWNrZW5kLWNsaWVudC9jb25maWd1cmF0aW9uLnRzIiwiLi4vLi4vc3JjL3NlcnZpY2VzL2FwaS50cyIsIi4uLy4uL3NyYy9zZXJ2aWNlcy9mZWVkYmFjay50cyIsIi4uLy4uL3NyYy9zZXJ2aWNlcy91c2VyLnRzIiwiLi4vLi4vc3JjL2NvbnRleHRzL0ZlZWRiYWNrQ29udGV4dC50c3giLCIuLi8uLi9zcmMvY29tcG9uZW50cy9hdG9tcy9idXR0b25zL0J1dHRvbi50c3giLCIuLi9zcmMvYXNzZXRzL2ljb25zL2VkaXQtMDQuc3ZnIiwiLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvYnV0dG9ucy9PcGVuRmVlZGJhY2tCdXR0b24udHN4IiwiLi4vLi4vc3JjL3V0aWxzL2dldEluaXRpYWxzLnRzIiwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiLCIuLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvZmVlZGJhY2tzL2l0ZW0vRmVlZGJhY2tJdGVtSG92ZXJlZC50c3giLCIuLi9zcmMvYXNzZXRzL2ljb25zL2Nsb3NlLnN2ZyIsIi4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL2J1dHRvbnMvQ2xvc2VCdXR0b24udHN4IiwiLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL3JlcGxpZXMvUmVwbHlJdGVtLnRzeCIsIi4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9mZWVkYmFja3Mvc2hhcmVkL0ZlZWRiYWNrVGV4dEFyZWEudHN4IiwiLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL2ZlZWRiYWNrcy9tZW51L01lbnVJdGVtLnRzeCIsIi4uL3NyYy9hc3NldHMvaWNvbnMvZG90cy1ob3Jpem9udGFsLnN2ZyIsIi4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9mZWVkYmFja3MvbWVudS9NZW51QnV0dG9uLnRzeCIsIi4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9mZWVkYmFja3MvaXRlbS9GZWVkYmFja0l0ZW1TZWxlY3RlZC50c3giLCIuLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvZmVlZGJhY2tzL3NoYXJlZC9GZWVkYmFja1Bvc2l0aW9uZXIudHN4IiwiLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL2ZlZWRiYWNrcy9pdGVtL0ZlZWRiYWNrUGluLnRzeCIsIi4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9mZWVkYmFja3MvZ3JvdXAvRmVlZGJhY2tQaW5zLnRzeCIsIi4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL2ljb25zL0NvbW1lbnRJY29uLnRzeCIsIi4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9mZWVkYmFja3MvaXRlbS9GZWVkYmFja0lucHV0LnRzeCIsIi4uL3NyYy9hc3NldHMvaWNvbnMvY2hldnJvbi1sZWZ0LnN2ZyIsIi4uL3NyYy9hc3NldHMvaWNvbnMvY2hldnJvbi1yaWdodC5zdmciLCIuLi8uLi9zcmMvY29tcG9uZW50cy9hdG9tcy9idXR0b25zL0NvbGxhcHNlQnV0dG9uLnRzeCIsIi4uL3NyYy9hc3NldHMvaWNvbnMvbG9nLW91dC0wMi5zdmciLCIuLi8uLi9zcmMvc2VydmljZXMvYXV0aC50cyIsIi4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9Db25uZWN0ZWRVc2VyLnRzeCIsIi4uL3NyYy9hc3NldHMvaWNvbnMvc2VhcmNoLnN2ZyIsIi4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL2lucHV0cy9TZWFyY2hJbnB1dC50c3giLCIuLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvZmVlZGJhY2tzL2l0ZW0vRmVlZGJhY2tMaXN0SXRlbS50c3giLCIuLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvZmVlZGJhY2tzL2dyb3VwL0ZlZWRiYWNrTGlzdC50c3giLCIuLi8uLi9zcmMvY29tcG9uZW50cy9vcmdhbmlzbXMvQ29ubmVjdGVkUGFuZWwudHN4IiwiLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvaW5wdXRzL0lucHV0LnRzeCIsIi4uL3NyYy9hc3NldHMvaWNvbnMvbG9nby1mZWVkYmFjay1kYXJrLnN2ZyIsIi4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9mb3Jtcy9TaWduVXBGb3JtLnRzeCIsIi4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9mb3Jtcy9TaWduSW5Gb3JtLnRzeCIsIi4uLy4uL3NyYy9jb21wb25lbnRzL29yZ2FuaXNtcy9Db25uZWN0aW9uLnRzeCIsIi4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL21vZGFscy9Nb2RhbC50c3giLCIuLi8uLi9zcmMvY29tcG9uZW50cy9hdG9tcy9tb2RhbHMvQ29ubmVjdGlvbk1vZGFsLnRzeCIsIi4uLy4uL3NyYy9jb21wb25lbnRzL29yZ2FuaXNtcy9Db25uZWN0aW9uUGFuZWwudHN4IiwiLi4vc3JjL2Fzc2V0cy9pY29ucy9sb2dvLWZlZWRiYWNrLWxpZ2h0LnN2ZyIsIi4uLy4uL3NyYy9jb21wb25lbnRzL29yZ2FuaXNtcy9TaWRlQmFyLnRzeCIsIi4uL25vZGVfbW9kdWxlcy9zdHlsZS1pbmplY3QvZGlzdC9zdHlsZS1pbmplY3QuZXMuanMiLCIuLi8uLi9zcmMvaW5kZXgudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIHNyYy9zdWJzY3JpYmFibGUudHNcbnZhciBTdWJzY3JpYmFibGUgPSBjbGFzcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMubGlzdGVuZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcbiAgICB0aGlzLnN1YnNjcmliZSA9IHRoaXMuc3Vic2NyaWJlLmJpbmQodGhpcyk7XG4gIH1cbiAgc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgdGhpcy5saXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTtcbiAgICB0aGlzLm9uU3Vic2NyaWJlKCk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHRoaXMubGlzdGVuZXJzLmRlbGV0ZShsaXN0ZW5lcik7XG4gICAgICB0aGlzLm9uVW5zdWJzY3JpYmUoKTtcbiAgICB9O1xuICB9XG4gIGhhc0xpc3RlbmVycygpIHtcbiAgICByZXR1cm4gdGhpcy5saXN0ZW5lcnMuc2l6ZSA+IDA7XG4gIH1cbiAgb25TdWJzY3JpYmUoKSB7XG4gIH1cbiAgb25VbnN1YnNjcmliZSgpIHtcbiAgfVxufTtcbmV4cG9ydCB7XG4gIFN1YnNjcmliYWJsZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN1YnNjcmliYWJsZS5qcy5tYXAiLCJleHBvcnQgZGVmYXVsdCAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6XG4gIHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6XG4gIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSk7IiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG4vLyBiYXNlZCBvZmYgaHR0cHM6Ly9naXRodWIuY29tL2RlZnVuY3R6b21iaWUvbm9kZS1wcm9jZXNzL2Jsb2IvbWFzdGVyL2Jyb3dzZXIuanNcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG52YXIgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbmlmICh0eXBlb2YgZ2xvYmFsLnNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbn1cbmlmICh0eXBlb2YgZ2xvYmFsLmNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbn1cblxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuZnVuY3Rpb24gbmV4dFRpY2soZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn1cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG52YXIgdGl0bGUgPSAnYnJvd3Nlcic7XG52YXIgcGxhdGZvcm0gPSAnYnJvd3Nlcic7XG52YXIgYnJvd3NlciA9IHRydWU7XG52YXIgZW52ID0ge307XG52YXIgYXJndiA9IFtdO1xudmFyIHZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnZhciB2ZXJzaW9ucyA9IHt9O1xudmFyIHJlbGVhc2UgPSB7fTtcbnZhciBjb25maWcgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnZhciBvbiA9IG5vb3A7XG52YXIgYWRkTGlzdGVuZXIgPSBub29wO1xudmFyIG9uY2UgPSBub29wO1xudmFyIG9mZiA9IG5vb3A7XG52YXIgcmVtb3ZlTGlzdGVuZXIgPSBub29wO1xudmFyIHJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG52YXIgZW1pdCA9IG5vb3A7XG5cbmZ1bmN0aW9uIGJpbmRpbmcobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn1cblxuZnVuY3Rpb24gY3dkICgpIHsgcmV0dXJuICcvJyB9XG5mdW5jdGlvbiBjaGRpciAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn1mdW5jdGlvbiB1bWFzaygpIHsgcmV0dXJuIDA7IH1cblxuLy8gZnJvbSBodHRwczovL2dpdGh1Yi5jb20va3VtYXZpcy9icm93c2VyLXByb2Nlc3MtaHJ0aW1lL2Jsb2IvbWFzdGVyL2luZGV4LmpzXG52YXIgcGVyZm9ybWFuY2UgPSBnbG9iYWwucGVyZm9ybWFuY2UgfHwge307XG52YXIgcGVyZm9ybWFuY2VOb3cgPVxuICBwZXJmb3JtYW5jZS5ub3cgICAgICAgIHx8XG4gIHBlcmZvcm1hbmNlLm1vek5vdyAgICAgfHxcbiAgcGVyZm9ybWFuY2UubXNOb3cgICAgICB8fFxuICBwZXJmb3JtYW5jZS5vTm93ICAgICAgIHx8XG4gIHBlcmZvcm1hbmNlLndlYmtpdE5vdyAgfHxcbiAgZnVuY3Rpb24oKXsgcmV0dXJuIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgfTtcblxuLy8gZ2VuZXJhdGUgdGltZXN0YW1wIG9yIGRlbHRhXG4vLyBzZWUgaHR0cDovL25vZGVqcy5vcmcvYXBpL3Byb2Nlc3MuaHRtbCNwcm9jZXNzX3Byb2Nlc3NfaHJ0aW1lXG5mdW5jdGlvbiBocnRpbWUocHJldmlvdXNUaW1lc3RhbXApe1xuICB2YXIgY2xvY2t0aW1lID0gcGVyZm9ybWFuY2VOb3cuY2FsbChwZXJmb3JtYW5jZSkqMWUtMztcbiAgdmFyIHNlY29uZHMgPSBNYXRoLmZsb29yKGNsb2NrdGltZSk7XG4gIHZhciBuYW5vc2Vjb25kcyA9IE1hdGguZmxvb3IoKGNsb2NrdGltZSUxKSoxZTkpO1xuICBpZiAocHJldmlvdXNUaW1lc3RhbXApIHtcbiAgICBzZWNvbmRzID0gc2Vjb25kcyAtIHByZXZpb3VzVGltZXN0YW1wWzBdO1xuICAgIG5hbm9zZWNvbmRzID0gbmFub3NlY29uZHMgLSBwcmV2aW91c1RpbWVzdGFtcFsxXTtcbiAgICBpZiAobmFub3NlY29uZHM8MCkge1xuICAgICAgc2Vjb25kcy0tO1xuICAgICAgbmFub3NlY29uZHMgKz0gMWU5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gW3NlY29uZHMsbmFub3NlY29uZHNdXG59XG5cbnZhciBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpO1xuZnVuY3Rpb24gdXB0aW1lKCkge1xuICB2YXIgY3VycmVudFRpbWUgPSBuZXcgRGF0ZSgpO1xuICB2YXIgZGlmID0gY3VycmVudFRpbWUgLSBzdGFydFRpbWU7XG4gIHJldHVybiBkaWYgLyAxMDAwO1xufVxuXG52YXIgYnJvd3NlciQxID0ge1xuICBuZXh0VGljazogbmV4dFRpY2ssXG4gIHRpdGxlOiB0aXRsZSxcbiAgYnJvd3NlcjogYnJvd3NlcixcbiAgZW52OiBlbnYsXG4gIGFyZ3Y6IGFyZ3YsXG4gIHZlcnNpb246IHZlcnNpb24sXG4gIHZlcnNpb25zOiB2ZXJzaW9ucyxcbiAgb246IG9uLFxuICBhZGRMaXN0ZW5lcjogYWRkTGlzdGVuZXIsXG4gIG9uY2U6IG9uY2UsXG4gIG9mZjogb2ZmLFxuICByZW1vdmVMaXN0ZW5lcjogcmVtb3ZlTGlzdGVuZXIsXG4gIHJlbW92ZUFsbExpc3RlbmVyczogcmVtb3ZlQWxsTGlzdGVuZXJzLFxuICBlbWl0OiBlbWl0LFxuICBiaW5kaW5nOiBiaW5kaW5nLFxuICBjd2Q6IGN3ZCxcbiAgY2hkaXI6IGNoZGlyLFxuICB1bWFzazogdW1hc2ssXG4gIGhydGltZTogaHJ0aW1lLFxuICBwbGF0Zm9ybTogcGxhdGZvcm0sXG4gIHJlbGVhc2U6IHJlbGVhc2UsXG4gIGNvbmZpZzogY29uZmlnLFxuICB1cHRpbWU6IHVwdGltZVxufTtcblxuZXhwb3J0IGRlZmF1bHQgYnJvd3NlciQxO1xuZXhwb3J0IHsgYWRkTGlzdGVuZXIsIGFyZ3YsIGJpbmRpbmcsIGJyb3dzZXIsIGNoZGlyLCBjb25maWcsIGN3ZCwgZW1pdCwgZW52LCBocnRpbWUsIG5leHRUaWNrLCBvZmYsIG9uLCBvbmNlLCBwbGF0Zm9ybSwgcmVsZWFzZSwgcmVtb3ZlQWxsTGlzdGVuZXJzLCByZW1vdmVMaXN0ZW5lciwgdGl0bGUsIHVtYXNrLCB1cHRpbWUsIHZlcnNpb24sIHZlcnNpb25zIH07XG4iLCIvLyBzcmMvdXRpbHMudHNcbnZhciBpc1NlcnZlciA9IHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIgfHwgXCJEZW5vXCIgaW4gZ2xvYmFsVGhpcztcbmZ1bmN0aW9uIG5vb3AoKSB7XG59XG5mdW5jdGlvbiBmdW5jdGlvbmFsVXBkYXRlKHVwZGF0ZXIsIGlucHV0KSB7XG4gIHJldHVybiB0eXBlb2YgdXBkYXRlciA9PT0gXCJmdW5jdGlvblwiID8gdXBkYXRlcihpbnB1dCkgOiB1cGRhdGVyO1xufVxuZnVuY3Rpb24gaXNWYWxpZFRpbWVvdXQodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiAmJiB2YWx1ZSA+PSAwICYmIHZhbHVlICE9PSBJbmZpbml0eTtcbn1cbmZ1bmN0aW9uIHRpbWVVbnRpbFN0YWxlKHVwZGF0ZWRBdCwgc3RhbGVUaW1lKSB7XG4gIHJldHVybiBNYXRoLm1heCh1cGRhdGVkQXQgKyAoc3RhbGVUaW1lIHx8IDApIC0gRGF0ZS5ub3coKSwgMCk7XG59XG5mdW5jdGlvbiByZXNvbHZlU3RhbGVUaW1lKHN0YWxlVGltZSwgcXVlcnkpIHtcbiAgcmV0dXJuIHR5cGVvZiBzdGFsZVRpbWUgPT09IFwiZnVuY3Rpb25cIiA/IHN0YWxlVGltZShxdWVyeSkgOiBzdGFsZVRpbWU7XG59XG5mdW5jdGlvbiByZXNvbHZlRW5hYmxlZChlbmFibGVkLCBxdWVyeSkge1xuICByZXR1cm4gdHlwZW9mIGVuYWJsZWQgPT09IFwiZnVuY3Rpb25cIiA/IGVuYWJsZWQocXVlcnkpIDogZW5hYmxlZDtcbn1cbmZ1bmN0aW9uIG1hdGNoUXVlcnkoZmlsdGVycywgcXVlcnkpIHtcbiAgY29uc3Qge1xuICAgIHR5cGUgPSBcImFsbFwiLFxuICAgIGV4YWN0LFxuICAgIGZldGNoU3RhdHVzLFxuICAgIHByZWRpY2F0ZSxcbiAgICBxdWVyeUtleSxcbiAgICBzdGFsZVxuICB9ID0gZmlsdGVycztcbiAgaWYgKHF1ZXJ5S2V5KSB7XG4gICAgaWYgKGV4YWN0KSB7XG4gICAgICBpZiAocXVlcnkucXVlcnlIYXNoICE9PSBoYXNoUXVlcnlLZXlCeU9wdGlvbnMocXVlcnlLZXksIHF1ZXJ5Lm9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFwYXJ0aWFsTWF0Y2hLZXkocXVlcnkucXVlcnlLZXksIHF1ZXJ5S2V5KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICBpZiAodHlwZSAhPT0gXCJhbGxcIikge1xuICAgIGNvbnN0IGlzQWN0aXZlID0gcXVlcnkuaXNBY3RpdmUoKTtcbiAgICBpZiAodHlwZSA9PT0gXCJhY3RpdmVcIiAmJiAhaXNBY3RpdmUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09IFwiaW5hY3RpdmVcIiAmJiBpc0FjdGl2ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIHN0YWxlID09PSBcImJvb2xlYW5cIiAmJiBxdWVyeS5pc1N0YWxlKCkgIT09IHN0YWxlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChmZXRjaFN0YXR1cyAmJiBmZXRjaFN0YXR1cyAhPT0gcXVlcnkuc3RhdGUuZmV0Y2hTdGF0dXMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHByZWRpY2F0ZSAmJiAhcHJlZGljYXRlKHF1ZXJ5KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIG1hdGNoTXV0YXRpb24oZmlsdGVycywgbXV0YXRpb24pIHtcbiAgY29uc3QgeyBleGFjdCwgc3RhdHVzLCBwcmVkaWNhdGUsIG11dGF0aW9uS2V5IH0gPSBmaWx0ZXJzO1xuICBpZiAobXV0YXRpb25LZXkpIHtcbiAgICBpZiAoIW11dGF0aW9uLm9wdGlvbnMubXV0YXRpb25LZXkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGV4YWN0KSB7XG4gICAgICBpZiAoaGFzaEtleShtdXRhdGlvbi5vcHRpb25zLm11dGF0aW9uS2V5KSAhPT0gaGFzaEtleShtdXRhdGlvbktleSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXBhcnRpYWxNYXRjaEtleShtdXRhdGlvbi5vcHRpb25zLm11dGF0aW9uS2V5LCBtdXRhdGlvbktleSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgaWYgKHN0YXR1cyAmJiBtdXRhdGlvbi5zdGF0ZS5zdGF0dXMgIT09IHN0YXR1cykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAocHJlZGljYXRlICYmICFwcmVkaWNhdGUobXV0YXRpb24pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gaGFzaFF1ZXJ5S2V5QnlPcHRpb25zKHF1ZXJ5S2V5LCBvcHRpb25zKSB7XG4gIGNvbnN0IGhhc2hGbiA9IG9wdGlvbnM/LnF1ZXJ5S2V5SGFzaEZuIHx8IGhhc2hLZXk7XG4gIHJldHVybiBoYXNoRm4ocXVlcnlLZXkpO1xufVxuZnVuY3Rpb24gaGFzaEtleShxdWVyeUtleSkge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoXG4gICAgcXVlcnlLZXksXG4gICAgKF8sIHZhbCkgPT4gaXNQbGFpbk9iamVjdCh2YWwpID8gT2JqZWN0LmtleXModmFsKS5zb3J0KCkucmVkdWNlKChyZXN1bHQsIGtleSkgPT4ge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWxba2V5XTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwge30pIDogdmFsXG4gICk7XG59XG5mdW5jdGlvbiBwYXJ0aWFsTWF0Y2hLZXkoYSwgYikge1xuICBpZiAoYSA9PT0gYikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmICh0eXBlb2YgYSAhPT0gdHlwZW9mIGIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGEgJiYgYiAmJiB0eXBlb2YgYSA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgYiA9PT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiAhT2JqZWN0LmtleXMoYikuc29tZSgoa2V5KSA9PiAhcGFydGlhbE1hdGNoS2V5KGFba2V5XSwgYltrZXldKSk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gcmVwbGFjZUVxdWFsRGVlcChhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIGE7XG4gIH1cbiAgY29uc3QgYXJyYXkgPSBpc1BsYWluQXJyYXkoYSkgJiYgaXNQbGFpbkFycmF5KGIpO1xuICBpZiAoYXJyYXkgfHwgaXNQbGFpbk9iamVjdChhKSAmJiBpc1BsYWluT2JqZWN0KGIpKSB7XG4gICAgY29uc3QgYUl0ZW1zID0gYXJyYXkgPyBhIDogT2JqZWN0LmtleXMoYSk7XG4gICAgY29uc3QgYVNpemUgPSBhSXRlbXMubGVuZ3RoO1xuICAgIGNvbnN0IGJJdGVtcyA9IGFycmF5ID8gYiA6IE9iamVjdC5rZXlzKGIpO1xuICAgIGNvbnN0IGJTaXplID0gYkl0ZW1zLmxlbmd0aDtcbiAgICBjb25zdCBjb3B5ID0gYXJyYXkgPyBbXSA6IHt9O1xuICAgIGxldCBlcXVhbEl0ZW1zID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJTaXplOyBpKyspIHtcbiAgICAgIGNvbnN0IGtleSA9IGFycmF5ID8gaSA6IGJJdGVtc1tpXTtcbiAgICAgIGlmICgoIWFycmF5ICYmIGFJdGVtcy5pbmNsdWRlcyhrZXkpIHx8IGFycmF5KSAmJiBhW2tleV0gPT09IHZvaWQgMCAmJiBiW2tleV0gPT09IHZvaWQgMCkge1xuICAgICAgICBjb3B5W2tleV0gPSB2b2lkIDA7XG4gICAgICAgIGVxdWFsSXRlbXMrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvcHlba2V5XSA9IHJlcGxhY2VFcXVhbERlZXAoYVtrZXldLCBiW2tleV0pO1xuICAgICAgICBpZiAoY29weVtrZXldID09PSBhW2tleV0gJiYgYVtrZXldICE9PSB2b2lkIDApIHtcbiAgICAgICAgICBlcXVhbEl0ZW1zKys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFTaXplID09PSBiU2l6ZSAmJiBlcXVhbEl0ZW1zID09PSBhU2l6ZSA/IGEgOiBjb3B5O1xuICB9XG4gIHJldHVybiBiO1xufVxuZnVuY3Rpb24gc2hhbGxvd0VxdWFsT2JqZWN0cyhhLCBiKSB7XG4gIGlmICghYiB8fCBPYmplY3Qua2V5cyhhKS5sZW5ndGggIT09IE9iamVjdC5rZXlzKGIpLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBmb3IgKGNvbnN0IGtleSBpbiBhKSB7XG4gICAgaWYgKGFba2V5XSAhPT0gYltrZXldKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gaXNQbGFpbkFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGg7XG59XG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KG8pIHtcbiAgaWYgKCFoYXNPYmplY3RQcm90b3R5cGUobykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgY3RvciA9IG8uY29uc3RydWN0b3I7XG4gIGlmIChjdG9yID09PSB2b2lkIDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb25zdCBwcm90ID0gY3Rvci5wcm90b3R5cGU7XG4gIGlmICghaGFzT2JqZWN0UHJvdG90eXBlKHByb3QpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICghcHJvdC5oYXNPd25Qcm9wZXJ0eShcImlzUHJvdG90eXBlT2ZcIikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZihvKSAhPT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGhhc09iamVjdFByb3RvdHlwZShvKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykgPT09IFwiW29iamVjdCBPYmplY3RdXCI7XG59XG5mdW5jdGlvbiBzbGVlcCh0aW1lb3V0KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZW91dCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gcmVwbGFjZURhdGEocHJldkRhdGEsIGRhdGEsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zLnN0cnVjdHVyYWxTaGFyaW5nID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5zdHJ1Y3R1cmFsU2hhcmluZyhwcmV2RGF0YSwgZGF0YSk7XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5zdHJ1Y3R1cmFsU2hhcmluZyAhPT0gZmFsc2UpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gcmVwbGFjZUVxdWFsRGVlcChwcmV2RGF0YSwgZGF0YSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIGBTdHJ1Y3R1cmFsIHNoYXJpbmcgcmVxdWlyZXMgZGF0YSB0byBiZSBKU09OIHNlcmlhbGl6YWJsZS4gVG8gZml4IHRoaXMsIHR1cm4gb2ZmIHN0cnVjdHVyYWxTaGFyaW5nIG9yIHJldHVybiBKU09OLXNlcmlhbGl6YWJsZSBkYXRhIGZyb20geW91ciBxdWVyeUZuLiBbJHtvcHRpb25zLnF1ZXJ5SGFzaH1dOiAke2Vycm9yfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcGxhY2VFcXVhbERlZXAocHJldkRhdGEsIGRhdGEpO1xuICB9XG4gIHJldHVybiBkYXRhO1xufVxuZnVuY3Rpb24ga2VlcFByZXZpb3VzRGF0YShwcmV2aW91c0RhdGEpIHtcbiAgcmV0dXJuIHByZXZpb3VzRGF0YTtcbn1cbmZ1bmN0aW9uIGFkZFRvRW5kKGl0ZW1zLCBpdGVtLCBtYXggPSAwKSB7XG4gIGNvbnN0IG5ld0l0ZW1zID0gWy4uLml0ZW1zLCBpdGVtXTtcbiAgcmV0dXJuIG1heCAmJiBuZXdJdGVtcy5sZW5ndGggPiBtYXggPyBuZXdJdGVtcy5zbGljZSgxKSA6IG5ld0l0ZW1zO1xufVxuZnVuY3Rpb24gYWRkVG9TdGFydChpdGVtcywgaXRlbSwgbWF4ID0gMCkge1xuICBjb25zdCBuZXdJdGVtcyA9IFtpdGVtLCAuLi5pdGVtc107XG4gIHJldHVybiBtYXggJiYgbmV3SXRlbXMubGVuZ3RoID4gbWF4ID8gbmV3SXRlbXMuc2xpY2UoMCwgLTEpIDogbmV3SXRlbXM7XG59XG52YXIgc2tpcFRva2VuID0gU3ltYm9sKCk7XG5mdW5jdGlvbiBlbnN1cmVRdWVyeUZuKG9wdGlvbnMsIGZldGNoT3B0aW9ucykge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgaWYgKG9wdGlvbnMucXVlcnlGbiA9PT0gc2tpcFRva2VuKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgQXR0ZW1wdGVkIHRvIGludm9rZSBxdWVyeUZuIHdoZW4gc2V0IHRvIHNraXBUb2tlbi4gVGhpcyBpcyBsaWtlbHkgYSBjb25maWd1cmF0aW9uIGVycm9yLiBRdWVyeSBoYXNoOiAnJHtvcHRpb25zLnF1ZXJ5SGFzaH0nYFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFvcHRpb25zLnF1ZXJ5Rm4gJiYgZmV0Y2hPcHRpb25zPy5pbml0aWFsUHJvbWlzZSkge1xuICAgIHJldHVybiAoKSA9PiBmZXRjaE9wdGlvbnMuaW5pdGlhbFByb21pc2U7XG4gIH1cbiAgaWYgKCFvcHRpb25zLnF1ZXJ5Rm4gfHwgb3B0aW9ucy5xdWVyeUZuID09PSBza2lwVG9rZW4pIHtcbiAgICByZXR1cm4gKCkgPT4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBNaXNzaW5nIHF1ZXJ5Rm46ICcke29wdGlvbnMucXVlcnlIYXNofSdgKSk7XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnMucXVlcnlGbjtcbn1cbmV4cG9ydCB7XG4gIGFkZFRvRW5kLFxuICBhZGRUb1N0YXJ0LFxuICBlbnN1cmVRdWVyeUZuLFxuICBmdW5jdGlvbmFsVXBkYXRlLFxuICBoYXNoS2V5LFxuICBoYXNoUXVlcnlLZXlCeU9wdGlvbnMsXG4gIGlzUGxhaW5BcnJheSxcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNTZXJ2ZXIsXG4gIGlzVmFsaWRUaW1lb3V0LFxuICBrZWVwUHJldmlvdXNEYXRhLFxuICBtYXRjaE11dGF0aW9uLFxuICBtYXRjaFF1ZXJ5LFxuICBub29wLFxuICBwYXJ0aWFsTWF0Y2hLZXksXG4gIHJlcGxhY2VEYXRhLFxuICByZXBsYWNlRXF1YWxEZWVwLFxuICByZXNvbHZlRW5hYmxlZCxcbiAgcmVzb2x2ZVN0YWxlVGltZSxcbiAgc2hhbGxvd0VxdWFsT2JqZWN0cyxcbiAgc2tpcFRva2VuLFxuICBzbGVlcCxcbiAgdGltZVVudGlsU3RhbGVcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlscy5qcy5tYXAiLCIvLyBzcmMvZm9jdXNNYW5hZ2VyLnRzXG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tIFwiLi9zdWJzY3JpYmFibGUuanNcIjtcbmltcG9ydCB7IGlzU2VydmVyIH0gZnJvbSBcIi4vdXRpbHMuanNcIjtcbnZhciBGb2N1c01hbmFnZXIgPSBjbGFzcyBleHRlbmRzIFN1YnNjcmliYWJsZSB7XG4gICNmb2N1c2VkO1xuICAjY2xlYW51cDtcbiAgI3NldHVwO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuI3NldHVwID0gKG9uRm9jdXMpID0+IHtcbiAgICAgIGlmICghaXNTZXJ2ZXIgJiYgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgY29uc3QgbGlzdGVuZXIgPSAoKSA9PiBvbkZvY3VzKCk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLCBsaXN0ZW5lcik7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfTtcbiAgfVxuICBvblN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMuI2NsZWFudXApIHtcbiAgICAgIHRoaXMuc2V0RXZlbnRMaXN0ZW5lcih0aGlzLiNzZXR1cCk7XG4gICAgfVxuICB9XG4gIG9uVW5zdWJzY3JpYmUoKSB7XG4gICAgaWYgKCF0aGlzLmhhc0xpc3RlbmVycygpKSB7XG4gICAgICB0aGlzLiNjbGVhbnVwPy4oKTtcbiAgICAgIHRoaXMuI2NsZWFudXAgPSB2b2lkIDA7XG4gICAgfVxuICB9XG4gIHNldEV2ZW50TGlzdGVuZXIoc2V0dXApIHtcbiAgICB0aGlzLiNzZXR1cCA9IHNldHVwO1xuICAgIHRoaXMuI2NsZWFudXA/LigpO1xuICAgIHRoaXMuI2NsZWFudXAgPSBzZXR1cCgoZm9jdXNlZCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBmb2N1c2VkID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICB0aGlzLnNldEZvY3VzZWQoZm9jdXNlZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9uRm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBzZXRGb2N1c2VkKGZvY3VzZWQpIHtcbiAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy4jZm9jdXNlZCAhPT0gZm9jdXNlZDtcbiAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgdGhpcy4jZm9jdXNlZCA9IGZvY3VzZWQ7XG4gICAgICB0aGlzLm9uRm9jdXMoKTtcbiAgICB9XG4gIH1cbiAgb25Gb2N1cygpIHtcbiAgICBjb25zdCBpc0ZvY3VzZWQgPSB0aGlzLmlzRm9jdXNlZCgpO1xuICAgIHRoaXMubGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiB7XG4gICAgICBsaXN0ZW5lcihpc0ZvY3VzZWQpO1xuICAgIH0pO1xuICB9XG4gIGlzRm9jdXNlZCgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuI2ZvY3VzZWQgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICByZXR1cm4gdGhpcy4jZm9jdXNlZDtcbiAgICB9XG4gICAgcmV0dXJuIGdsb2JhbFRoaXMuZG9jdW1lbnQ/LnZpc2liaWxpdHlTdGF0ZSAhPT0gXCJoaWRkZW5cIjtcbiAgfVxufTtcbnZhciBmb2N1c01hbmFnZXIgPSBuZXcgRm9jdXNNYW5hZ2VyKCk7XG5leHBvcnQge1xuICBGb2N1c01hbmFnZXIsXG4gIGZvY3VzTWFuYWdlclxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZvY3VzTWFuYWdlci5qcy5tYXAiLCIvLyBzcmMvb25saW5lTWFuYWdlci50c1xuaW1wb3J0IHsgU3Vic2NyaWJhYmxlIH0gZnJvbSBcIi4vc3Vic2NyaWJhYmxlLmpzXCI7XG5pbXBvcnQgeyBpc1NlcnZlciB9IGZyb20gXCIuL3V0aWxzLmpzXCI7XG52YXIgT25saW5lTWFuYWdlciA9IGNsYXNzIGV4dGVuZHMgU3Vic2NyaWJhYmxlIHtcbiAgI29ubGluZSA9IHRydWU7XG4gICNjbGVhbnVwO1xuICAjc2V0dXA7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy4jc2V0dXAgPSAob25PbmxpbmUpID0+IHtcbiAgICAgIGlmICghaXNTZXJ2ZXIgJiYgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgY29uc3Qgb25saW5lTGlzdGVuZXIgPSAoKSA9PiBvbk9ubGluZSh0cnVlKTtcbiAgICAgICAgY29uc3Qgb2ZmbGluZUxpc3RlbmVyID0gKCkgPT4gb25PbmxpbmUoZmFsc2UpO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCBvbmxpbmVMaXN0ZW5lciwgZmFsc2UpO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgb2ZmbGluZUxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgb25saW5lTGlzdGVuZXIpO1xuICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCBvZmZsaW5lTGlzdGVuZXIpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH07XG4gIH1cbiAgb25TdWJzY3JpYmUoKSB7XG4gICAgaWYgKCF0aGlzLiNjbGVhbnVwKSB7XG4gICAgICB0aGlzLnNldEV2ZW50TGlzdGVuZXIodGhpcy4jc2V0dXApO1xuICAgIH1cbiAgfVxuICBvblVuc3Vic2NyaWJlKCkge1xuICAgIGlmICghdGhpcy5oYXNMaXN0ZW5lcnMoKSkge1xuICAgICAgdGhpcy4jY2xlYW51cD8uKCk7XG4gICAgICB0aGlzLiNjbGVhbnVwID0gdm9pZCAwO1xuICAgIH1cbiAgfVxuICBzZXRFdmVudExpc3RlbmVyKHNldHVwKSB7XG4gICAgdGhpcy4jc2V0dXAgPSBzZXR1cDtcbiAgICB0aGlzLiNjbGVhbnVwPy4oKTtcbiAgICB0aGlzLiNjbGVhbnVwID0gc2V0dXAodGhpcy5zZXRPbmxpbmUuYmluZCh0aGlzKSk7XG4gIH1cbiAgc2V0T25saW5lKG9ubGluZSkge1xuICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLiNvbmxpbmUgIT09IG9ubGluZTtcbiAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgdGhpcy4jb25saW5lID0gb25saW5lO1xuICAgICAgdGhpcy5saXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IHtcbiAgICAgICAgbGlzdGVuZXIob25saW5lKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBpc09ubGluZSgpIHtcbiAgICByZXR1cm4gdGhpcy4jb25saW5lO1xuICB9XG59O1xudmFyIG9ubGluZU1hbmFnZXIgPSBuZXcgT25saW5lTWFuYWdlcigpO1xuZXhwb3J0IHtcbiAgT25saW5lTWFuYWdlcixcbiAgb25saW5lTWFuYWdlclxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9ubGluZU1hbmFnZXIuanMubWFwIiwiLy8gc3JjL3RoZW5hYmxlLnRzXG5mdW5jdGlvbiBwZW5kaW5nVGhlbmFibGUoKSB7XG4gIGxldCByZXNvbHZlO1xuICBsZXQgcmVqZWN0O1xuICBjb25zdCB0aGVuYWJsZSA9IG5ldyBQcm9taXNlKChfcmVzb2x2ZSwgX3JlamVjdCkgPT4ge1xuICAgIHJlc29sdmUgPSBfcmVzb2x2ZTtcbiAgICByZWplY3QgPSBfcmVqZWN0O1xuICB9KTtcbiAgdGhlbmFibGUuc3RhdHVzID0gXCJwZW5kaW5nXCI7XG4gIHRoZW5hYmxlLmNhdGNoKCgpID0+IHtcbiAgfSk7XG4gIGZ1bmN0aW9uIGZpbmFsaXplKGRhdGEpIHtcbiAgICBPYmplY3QuYXNzaWduKHRoZW5hYmxlLCBkYXRhKTtcbiAgICBkZWxldGUgdGhlbmFibGUucmVzb2x2ZTtcbiAgICBkZWxldGUgdGhlbmFibGUucmVqZWN0O1xuICB9XG4gIHRoZW5hYmxlLnJlc29sdmUgPSAodmFsdWUpID0+IHtcbiAgICBmaW5hbGl6ZSh7XG4gICAgICBzdGF0dXM6IFwiZnVsZmlsbGVkXCIsXG4gICAgICB2YWx1ZVxuICAgIH0pO1xuICAgIHJlc29sdmUodmFsdWUpO1xuICB9O1xuICB0aGVuYWJsZS5yZWplY3QgPSAocmVhc29uKSA9PiB7XG4gICAgZmluYWxpemUoe1xuICAgICAgc3RhdHVzOiBcInJlamVjdGVkXCIsXG4gICAgICByZWFzb25cbiAgICB9KTtcbiAgICByZWplY3QocmVhc29uKTtcbiAgfTtcbiAgcmV0dXJuIHRoZW5hYmxlO1xufVxuZXhwb3J0IHtcbiAgcGVuZGluZ1RoZW5hYmxlXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGhlbmFibGUuanMubWFwIiwiLy8gc3JjL3JldHJ5ZXIudHNcbmltcG9ydCB7IGZvY3VzTWFuYWdlciB9IGZyb20gXCIuL2ZvY3VzTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgb25saW5lTWFuYWdlciB9IGZyb20gXCIuL29ubGluZU1hbmFnZXIuanNcIjtcbmltcG9ydCB7IHBlbmRpbmdUaGVuYWJsZSB9IGZyb20gXCIuL3RoZW5hYmxlLmpzXCI7XG5pbXBvcnQgeyBpc1NlcnZlciwgc2xlZXAgfSBmcm9tIFwiLi91dGlscy5qc1wiO1xuZnVuY3Rpb24gZGVmYXVsdFJldHJ5RGVsYXkoZmFpbHVyZUNvdW50KSB7XG4gIHJldHVybiBNYXRoLm1pbigxZTMgKiAyICoqIGZhaWx1cmVDb3VudCwgM2U0KTtcbn1cbmZ1bmN0aW9uIGNhbkZldGNoKG5ldHdvcmtNb2RlKSB7XG4gIHJldHVybiAobmV0d29ya01vZGUgPz8gXCJvbmxpbmVcIikgPT09IFwib25saW5lXCIgPyBvbmxpbmVNYW5hZ2VyLmlzT25saW5lKCkgOiB0cnVlO1xufVxudmFyIENhbmNlbGxlZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICBzdXBlcihcIkNhbmNlbGxlZEVycm9yXCIpO1xuICAgIHRoaXMucmV2ZXJ0ID0gb3B0aW9ucz8ucmV2ZXJ0O1xuICAgIHRoaXMuc2lsZW50ID0gb3B0aW9ucz8uc2lsZW50O1xuICB9XG59O1xuZnVuY3Rpb24gaXNDYW5jZWxsZWRFcnJvcih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBDYW5jZWxsZWRFcnJvcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVJldHJ5ZXIoY29uZmlnKSB7XG4gIGxldCBpc1JldHJ5Q2FuY2VsbGVkID0gZmFsc2U7XG4gIGxldCBmYWlsdXJlQ291bnQgPSAwO1xuICBsZXQgaXNSZXNvbHZlZCA9IGZhbHNlO1xuICBsZXQgY29udGludWVGbjtcbiAgY29uc3QgdGhlbmFibGUgPSBwZW5kaW5nVGhlbmFibGUoKTtcbiAgY29uc3QgY2FuY2VsID0gKGNhbmNlbE9wdGlvbnMpID0+IHtcbiAgICBpZiAoIWlzUmVzb2x2ZWQpIHtcbiAgICAgIHJlamVjdChuZXcgQ2FuY2VsbGVkRXJyb3IoY2FuY2VsT3B0aW9ucykpO1xuICAgICAgY29uZmlnLmFib3J0Py4oKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGNhbmNlbFJldHJ5ID0gKCkgPT4ge1xuICAgIGlzUmV0cnlDYW5jZWxsZWQgPSB0cnVlO1xuICB9O1xuICBjb25zdCBjb250aW51ZVJldHJ5ID0gKCkgPT4ge1xuICAgIGlzUmV0cnlDYW5jZWxsZWQgPSBmYWxzZTtcbiAgfTtcbiAgY29uc3QgY2FuQ29udGludWUgPSAoKSA9PiBmb2N1c01hbmFnZXIuaXNGb2N1c2VkKCkgJiYgKGNvbmZpZy5uZXR3b3JrTW9kZSA9PT0gXCJhbHdheXNcIiB8fCBvbmxpbmVNYW5hZ2VyLmlzT25saW5lKCkpICYmIGNvbmZpZy5jYW5SdW4oKTtcbiAgY29uc3QgY2FuU3RhcnQgPSAoKSA9PiBjYW5GZXRjaChjb25maWcubmV0d29ya01vZGUpICYmIGNvbmZpZy5jYW5SdW4oKTtcbiAgY29uc3QgcmVzb2x2ZSA9ICh2YWx1ZSkgPT4ge1xuICAgIGlmICghaXNSZXNvbHZlZCkge1xuICAgICAgaXNSZXNvbHZlZCA9IHRydWU7XG4gICAgICBjb25maWcub25TdWNjZXNzPy4odmFsdWUpO1xuICAgICAgY29udGludWVGbj8uKCk7XG4gICAgICB0aGVuYWJsZS5yZXNvbHZlKHZhbHVlKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHJlamVjdCA9ICh2YWx1ZSkgPT4ge1xuICAgIGlmICghaXNSZXNvbHZlZCkge1xuICAgICAgaXNSZXNvbHZlZCA9IHRydWU7XG4gICAgICBjb25maWcub25FcnJvcj8uKHZhbHVlKTtcbiAgICAgIGNvbnRpbnVlRm4/LigpO1xuICAgICAgdGhlbmFibGUucmVqZWN0KHZhbHVlKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHBhdXNlID0gKCkgPT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgoY29udGludWVSZXNvbHZlKSA9PiB7XG4gICAgICBjb250aW51ZUZuID0gKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmIChpc1Jlc29sdmVkIHx8IGNhbkNvbnRpbnVlKCkpIHtcbiAgICAgICAgICBjb250aW51ZVJlc29sdmUodmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uZmlnLm9uUGF1c2U/LigpO1xuICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgY29udGludWVGbiA9IHZvaWQgMDtcbiAgICAgIGlmICghaXNSZXNvbHZlZCkge1xuICAgICAgICBjb25maWcub25Db250aW51ZT8uKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IHJ1biA9ICgpID0+IHtcbiAgICBpZiAoaXNSZXNvbHZlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgcHJvbWlzZU9yVmFsdWU7XG4gICAgY29uc3QgaW5pdGlhbFByb21pc2UgPSBmYWlsdXJlQ291bnQgPT09IDAgPyBjb25maWcuaW5pdGlhbFByb21pc2UgOiB2b2lkIDA7XG4gICAgdHJ5IHtcbiAgICAgIHByb21pc2VPclZhbHVlID0gaW5pdGlhbFByb21pc2UgPz8gY29uZmlnLmZuKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHByb21pc2VPclZhbHVlID0gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgICBQcm9taXNlLnJlc29sdmUocHJvbWlzZU9yVmFsdWUpLnRoZW4ocmVzb2x2ZSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICBpZiAoaXNSZXNvbHZlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCByZXRyeSA9IGNvbmZpZy5yZXRyeSA/PyAoaXNTZXJ2ZXIgPyAwIDogMyk7XG4gICAgICBjb25zdCByZXRyeURlbGF5ID0gY29uZmlnLnJldHJ5RGVsYXkgPz8gZGVmYXVsdFJldHJ5RGVsYXk7XG4gICAgICBjb25zdCBkZWxheSA9IHR5cGVvZiByZXRyeURlbGF5ID09PSBcImZ1bmN0aW9uXCIgPyByZXRyeURlbGF5KGZhaWx1cmVDb3VudCwgZXJyb3IpIDogcmV0cnlEZWxheTtcbiAgICAgIGNvbnN0IHNob3VsZFJldHJ5ID0gcmV0cnkgPT09IHRydWUgfHwgdHlwZW9mIHJldHJ5ID09PSBcIm51bWJlclwiICYmIGZhaWx1cmVDb3VudCA8IHJldHJ5IHx8IHR5cGVvZiByZXRyeSA9PT0gXCJmdW5jdGlvblwiICYmIHJldHJ5KGZhaWx1cmVDb3VudCwgZXJyb3IpO1xuICAgICAgaWYgKGlzUmV0cnlDYW5jZWxsZWQgfHwgIXNob3VsZFJldHJ5KSB7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGZhaWx1cmVDb3VudCsrO1xuICAgICAgY29uZmlnLm9uRmFpbD8uKGZhaWx1cmVDb3VudCwgZXJyb3IpO1xuICAgICAgc2xlZXAoZGVsYXkpLnRoZW4oKCkgPT4ge1xuICAgICAgICByZXR1cm4gY2FuQ29udGludWUoKSA/IHZvaWQgMCA6IHBhdXNlKCk7XG4gICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKGlzUmV0cnlDYW5jZWxsZWQpIHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJ1bigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBwcm9taXNlOiB0aGVuYWJsZSxcbiAgICBjYW5jZWwsXG4gICAgY29udGludWU6ICgpID0+IHtcbiAgICAgIGNvbnRpbnVlRm4/LigpO1xuICAgICAgcmV0dXJuIHRoZW5hYmxlO1xuICAgIH0sXG4gICAgY2FuY2VsUmV0cnksXG4gICAgY29udGludWVSZXRyeSxcbiAgICBjYW5TdGFydCxcbiAgICBzdGFydDogKCkgPT4ge1xuICAgICAgaWYgKGNhblN0YXJ0KCkpIHtcbiAgICAgICAgcnVuKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXVzZSgpLnRoZW4ocnVuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGVuYWJsZTtcbiAgICB9XG4gIH07XG59XG5leHBvcnQge1xuICBDYW5jZWxsZWRFcnJvcixcbiAgY2FuRmV0Y2gsXG4gIGNyZWF0ZVJldHJ5ZXIsXG4gIGlzQ2FuY2VsbGVkRXJyb3Jcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXRyeWVyLmpzLm1hcCIsIi8vIHNyYy9ub3RpZnlNYW5hZ2VyLnRzXG5mdW5jdGlvbiBjcmVhdGVOb3RpZnlNYW5hZ2VyKCkge1xuICBsZXQgcXVldWUgPSBbXTtcbiAgbGV0IHRyYW5zYWN0aW9ucyA9IDA7XG4gIGxldCBub3RpZnlGbiA9IChjYWxsYmFjaykgPT4ge1xuICAgIGNhbGxiYWNrKCk7XG4gIH07XG4gIGxldCBiYXRjaE5vdGlmeUZuID0gKGNhbGxiYWNrKSA9PiB7XG4gICAgY2FsbGJhY2soKTtcbiAgfTtcbiAgbGV0IHNjaGVkdWxlRm4gPSAoY2IpID0+IHNldFRpbWVvdXQoY2IsIDApO1xuICBjb25zdCBzY2hlZHVsZSA9IChjYWxsYmFjaykgPT4ge1xuICAgIGlmICh0cmFuc2FjdGlvbnMpIHtcbiAgICAgIHF1ZXVlLnB1c2goY2FsbGJhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBzY2hlZHVsZUZuKCgpID0+IHtcbiAgICAgICAgbm90aWZ5Rm4oY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuICBjb25zdCBmbHVzaCA9ICgpID0+IHtcbiAgICBjb25zdCBvcmlnaW5hbFF1ZXVlID0gcXVldWU7XG4gICAgcXVldWUgPSBbXTtcbiAgICBpZiAob3JpZ2luYWxRdWV1ZS5sZW5ndGgpIHtcbiAgICAgIHNjaGVkdWxlRm4oKCkgPT4ge1xuICAgICAgICBiYXRjaE5vdGlmeUZuKCgpID0+IHtcbiAgICAgICAgICBvcmlnaW5hbFF1ZXVlLmZvckVhY2goKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICBub3RpZnlGbihjYWxsYmFjayk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuICByZXR1cm4ge1xuICAgIGJhdGNoOiAoY2FsbGJhY2spID0+IHtcbiAgICAgIGxldCByZXN1bHQ7XG4gICAgICB0cmFuc2FjdGlvbnMrKztcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0cmFuc2FjdGlvbnMtLTtcbiAgICAgICAgaWYgKCF0cmFuc2FjdGlvbnMpIHtcbiAgICAgICAgICBmbHVzaCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQWxsIGNhbGxzIHRvIHRoZSB3cmFwcGVkIGZ1bmN0aW9uIHdpbGwgYmUgYmF0Y2hlZC5cbiAgICAgKi9cbiAgICBiYXRjaENhbGxzOiAoY2FsbGJhY2spID0+IHtcbiAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgICBzY2hlZHVsZSgoKSA9PiB7XG4gICAgICAgICAgY2FsbGJhY2soLi4uYXJncyk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9LFxuICAgIHNjaGVkdWxlLFxuICAgIC8qKlxuICAgICAqIFVzZSB0aGlzIG1ldGhvZCB0byBzZXQgYSBjdXN0b20gbm90aWZ5IGZ1bmN0aW9uLlxuICAgICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gZm9yIGV4YW1wbGUgd3JhcCBub3RpZmljYXRpb25zIHdpdGggYFJlYWN0LmFjdGAgd2hpbGUgcnVubmluZyB0ZXN0cy5cbiAgICAgKi9cbiAgICBzZXROb3RpZnlGdW5jdGlvbjogKGZuKSA9PiB7XG4gICAgICBub3RpZnlGbiA9IGZuO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogVXNlIHRoaXMgbWV0aG9kIHRvIHNldCBhIGN1c3RvbSBmdW5jdGlvbiB0byBiYXRjaCBub3RpZmljYXRpb25zIHRvZ2V0aGVyIGludG8gYSBzaW5nbGUgdGljay5cbiAgICAgKiBCeSBkZWZhdWx0IFJlYWN0IFF1ZXJ5IHdpbGwgdXNlIHRoZSBiYXRjaCBmdW5jdGlvbiBwcm92aWRlZCBieSBSZWFjdERPTSBvciBSZWFjdCBOYXRpdmUuXG4gICAgICovXG4gICAgc2V0QmF0Y2hOb3RpZnlGdW5jdGlvbjogKGZuKSA9PiB7XG4gICAgICBiYXRjaE5vdGlmeUZuID0gZm47XG4gICAgfSxcbiAgICBzZXRTY2hlZHVsZXI6IChmbikgPT4ge1xuICAgICAgc2NoZWR1bGVGbiA9IGZuO1xuICAgIH1cbiAgfTtcbn1cbnZhciBub3RpZnlNYW5hZ2VyID0gY3JlYXRlTm90aWZ5TWFuYWdlcigpO1xuZXhwb3J0IHtcbiAgY3JlYXRlTm90aWZ5TWFuYWdlcixcbiAgbm90aWZ5TWFuYWdlclxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5vdGlmeU1hbmFnZXIuanMubWFwIiwiLy8gc3JjL3JlbW92YWJsZS50c1xuaW1wb3J0IHsgaXNTZXJ2ZXIsIGlzVmFsaWRUaW1lb3V0IH0gZnJvbSBcIi4vdXRpbHMuanNcIjtcbnZhciBSZW1vdmFibGUgPSBjbGFzcyB7XG4gICNnY1RpbWVvdXQ7XG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5jbGVhckdjVGltZW91dCgpO1xuICB9XG4gIHNjaGVkdWxlR2MoKSB7XG4gICAgdGhpcy5jbGVhckdjVGltZW91dCgpO1xuICAgIGlmIChpc1ZhbGlkVGltZW91dCh0aGlzLmdjVGltZSkpIHtcbiAgICAgIHRoaXMuI2djVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLm9wdGlvbmFsUmVtb3ZlKCk7XG4gICAgICB9LCB0aGlzLmdjVGltZSk7XG4gICAgfVxuICB9XG4gIHVwZGF0ZUdjVGltZShuZXdHY1RpbWUpIHtcbiAgICB0aGlzLmdjVGltZSA9IE1hdGgubWF4KFxuICAgICAgdGhpcy5nY1RpbWUgfHwgMCxcbiAgICAgIG5ld0djVGltZSA/PyAoaXNTZXJ2ZXIgPyBJbmZpbml0eSA6IDUgKiA2MCAqIDFlMylcbiAgICApO1xuICB9XG4gIGNsZWFyR2NUaW1lb3V0KCkge1xuICAgIGlmICh0aGlzLiNnY1RpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLiNnY1RpbWVvdXQpO1xuICAgICAgdGhpcy4jZ2NUaW1lb3V0ID0gdm9pZCAwO1xuICAgIH1cbiAgfVxufTtcbmV4cG9ydCB7XG4gIFJlbW92YWJsZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlbW92YWJsZS5qcy5tYXAiLCIvLyBzcmMvcXVlcnkudHNcbmltcG9ydCB7XG4gIGVuc3VyZVF1ZXJ5Rm4sXG4gIG5vb3AsXG4gIHJlcGxhY2VEYXRhLFxuICByZXNvbHZlRW5hYmxlZCxcbiAgc2tpcFRva2VuLFxuICB0aW1lVW50aWxTdGFsZVxufSBmcm9tIFwiLi91dGlscy5qc1wiO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gXCIuL25vdGlmeU1hbmFnZXIuanNcIjtcbmltcG9ydCB7IGNhbkZldGNoLCBjcmVhdGVSZXRyeWVyLCBpc0NhbmNlbGxlZEVycm9yIH0gZnJvbSBcIi4vcmV0cnllci5qc1wiO1xuaW1wb3J0IHsgUmVtb3ZhYmxlIH0gZnJvbSBcIi4vcmVtb3ZhYmxlLmpzXCI7XG52YXIgUXVlcnkgPSBjbGFzcyBleHRlbmRzIFJlbW92YWJsZSB7XG4gICNpbml0aWFsU3RhdGU7XG4gICNyZXZlcnRTdGF0ZTtcbiAgI2NhY2hlO1xuICAjcmV0cnllcjtcbiAgI2RlZmF1bHRPcHRpb25zO1xuICAjYWJvcnRTaWduYWxDb25zdW1lZDtcbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLiNhYm9ydFNpZ25hbENvbnN1bWVkID0gZmFsc2U7XG4gICAgdGhpcy4jZGVmYXVsdE9wdGlvbnMgPSBjb25maWcuZGVmYXVsdE9wdGlvbnM7XG4gICAgdGhpcy5zZXRPcHRpb25zKGNvbmZpZy5vcHRpb25zKTtcbiAgICB0aGlzLm9ic2VydmVycyA9IFtdO1xuICAgIHRoaXMuI2NhY2hlID0gY29uZmlnLmNhY2hlO1xuICAgIHRoaXMucXVlcnlLZXkgPSBjb25maWcucXVlcnlLZXk7XG4gICAgdGhpcy5xdWVyeUhhc2ggPSBjb25maWcucXVlcnlIYXNoO1xuICAgIHRoaXMuI2luaXRpYWxTdGF0ZSA9IGdldERlZmF1bHRTdGF0ZSh0aGlzLm9wdGlvbnMpO1xuICAgIHRoaXMuc3RhdGUgPSBjb25maWcuc3RhdGUgPz8gdGhpcy4jaW5pdGlhbFN0YXRlO1xuICAgIHRoaXMuc2NoZWR1bGVHYygpO1xuICB9XG4gIGdldCBtZXRhKCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubWV0YTtcbiAgfVxuICBnZXQgcHJvbWlzZSgpIHtcbiAgICByZXR1cm4gdGhpcy4jcmV0cnllcj8ucHJvbWlzZTtcbiAgfVxuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSB7IC4uLnRoaXMuI2RlZmF1bHRPcHRpb25zLCAuLi5vcHRpb25zIH07XG4gICAgdGhpcy51cGRhdGVHY1RpbWUodGhpcy5vcHRpb25zLmdjVGltZSk7XG4gIH1cbiAgb3B0aW9uYWxSZW1vdmUoKSB7XG4gICAgaWYgKCF0aGlzLm9ic2VydmVycy5sZW5ndGggJiYgdGhpcy5zdGF0ZS5mZXRjaFN0YXR1cyA9PT0gXCJpZGxlXCIpIHtcbiAgICAgIHRoaXMuI2NhY2hlLnJlbW92ZSh0aGlzKTtcbiAgICB9XG4gIH1cbiAgc2V0RGF0YShuZXdEYXRhLCBvcHRpb25zKSB7XG4gICAgY29uc3QgZGF0YSA9IHJlcGxhY2VEYXRhKHRoaXMuc3RhdGUuZGF0YSwgbmV3RGF0YSwgdGhpcy5vcHRpb25zKTtcbiAgICB0aGlzLiNkaXNwYXRjaCh7XG4gICAgICBkYXRhLFxuICAgICAgdHlwZTogXCJzdWNjZXNzXCIsXG4gICAgICBkYXRhVXBkYXRlZEF0OiBvcHRpb25zPy51cGRhdGVkQXQsXG4gICAgICBtYW51YWw6IG9wdGlvbnM/Lm1hbnVhbFxuICAgIH0pO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIHNldFN0YXRlKHN0YXRlLCBzZXRTdGF0ZU9wdGlvbnMpIHtcbiAgICB0aGlzLiNkaXNwYXRjaCh7IHR5cGU6IFwic2V0U3RhdGVcIiwgc3RhdGUsIHNldFN0YXRlT3B0aW9ucyB9KTtcbiAgfVxuICBjYW5jZWwob3B0aW9ucykge1xuICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLiNyZXRyeWVyPy5wcm9taXNlO1xuICAgIHRoaXMuI3JldHJ5ZXI/LmNhbmNlbChvcHRpb25zKTtcbiAgICByZXR1cm4gcHJvbWlzZSA/IHByb21pc2UudGhlbihub29wKS5jYXRjaChub29wKSA6IFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG4gIGRlc3Ryb3koKSB7XG4gICAgc3VwZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuY2FuY2VsKHsgc2lsZW50OiB0cnVlIH0pO1xuICB9XG4gIHJlc2V0KCkge1xuICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIHRoaXMuc2V0U3RhdGUodGhpcy4jaW5pdGlhbFN0YXRlKTtcbiAgfVxuICBpc0FjdGl2ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vYnNlcnZlcnMuc29tZShcbiAgICAgIChvYnNlcnZlcikgPT4gcmVzb2x2ZUVuYWJsZWQob2JzZXJ2ZXIub3B0aW9ucy5lbmFibGVkLCB0aGlzKSAhPT0gZmFsc2VcbiAgICApO1xuICB9XG4gIGlzRGlzYWJsZWQoKSB7XG4gICAgaWYgKHRoaXMuZ2V0T2JzZXJ2ZXJzQ291bnQoKSA+IDApIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc0FjdGl2ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnF1ZXJ5Rm4gPT09IHNraXBUb2tlbiB8fCB0aGlzLnN0YXRlLmRhdGFVcGRhdGVDb3VudCArIHRoaXMuc3RhdGUuZXJyb3JVcGRhdGVDb3VudCA9PT0gMDtcbiAgfVxuICBpc1N0YWxlKCkge1xuICAgIGlmICh0aGlzLnN0YXRlLmlzSW52YWxpZGF0ZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5nZXRPYnNlcnZlcnNDb3VudCgpID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMub2JzZXJ2ZXJzLnNvbWUoXG4gICAgICAgIChvYnNlcnZlcikgPT4gb2JzZXJ2ZXIuZ2V0Q3VycmVudFJlc3VsdCgpLmlzU3RhbGVcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN0YXRlLmRhdGEgPT09IHZvaWQgMDtcbiAgfVxuICBpc1N0YWxlQnlUaW1lKHN0YWxlVGltZSA9IDApIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5pc0ludmFsaWRhdGVkIHx8IHRoaXMuc3RhdGUuZGF0YSA9PT0gdm9pZCAwIHx8ICF0aW1lVW50aWxTdGFsZSh0aGlzLnN0YXRlLmRhdGFVcGRhdGVkQXQsIHN0YWxlVGltZSk7XG4gIH1cbiAgb25Gb2N1cygpIHtcbiAgICBjb25zdCBvYnNlcnZlciA9IHRoaXMub2JzZXJ2ZXJzLmZpbmQoKHgpID0+IHguc2hvdWxkRmV0Y2hPbldpbmRvd0ZvY3VzKCkpO1xuICAgIG9ic2VydmVyPy5yZWZldGNoKHsgY2FuY2VsUmVmZXRjaDogZmFsc2UgfSk7XG4gICAgdGhpcy4jcmV0cnllcj8uY29udGludWUoKTtcbiAgfVxuICBvbk9ubGluZSgpIHtcbiAgICBjb25zdCBvYnNlcnZlciA9IHRoaXMub2JzZXJ2ZXJzLmZpbmQoKHgpID0+IHguc2hvdWxkRmV0Y2hPblJlY29ubmVjdCgpKTtcbiAgICBvYnNlcnZlcj8ucmVmZXRjaCh7IGNhbmNlbFJlZmV0Y2g6IGZhbHNlIH0pO1xuICAgIHRoaXMuI3JldHJ5ZXI/LmNvbnRpbnVlKCk7XG4gIH1cbiAgYWRkT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcbiAgICBpZiAoIXRoaXMub2JzZXJ2ZXJzLmluY2x1ZGVzKG9ic2VydmVyKSkge1xuICAgICAgdGhpcy5vYnNlcnZlcnMucHVzaChvYnNlcnZlcik7XG4gICAgICB0aGlzLmNsZWFyR2NUaW1lb3V0KCk7XG4gICAgICB0aGlzLiNjYWNoZS5ub3RpZnkoeyB0eXBlOiBcIm9ic2VydmVyQWRkZWRcIiwgcXVlcnk6IHRoaXMsIG9ic2VydmVyIH0pO1xuICAgIH1cbiAgfVxuICByZW1vdmVPYnNlcnZlcihvYnNlcnZlcikge1xuICAgIGlmICh0aGlzLm9ic2VydmVycy5pbmNsdWRlcyhvYnNlcnZlcikpIHtcbiAgICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5vYnNlcnZlcnMuZmlsdGVyKCh4KSA9PiB4ICE9PSBvYnNlcnZlcik7XG4gICAgICBpZiAoIXRoaXMub2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICBpZiAodGhpcy4jcmV0cnllcikge1xuICAgICAgICAgIGlmICh0aGlzLiNhYm9ydFNpZ25hbENvbnN1bWVkKSB7XG4gICAgICAgICAgICB0aGlzLiNyZXRyeWVyLmNhbmNlbCh7IHJldmVydDogdHJ1ZSB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4jcmV0cnllci5jYW5jZWxSZXRyeSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNjaGVkdWxlR2MoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuI2NhY2hlLm5vdGlmeSh7IHR5cGU6IFwib2JzZXJ2ZXJSZW1vdmVkXCIsIHF1ZXJ5OiB0aGlzLCBvYnNlcnZlciB9KTtcbiAgICB9XG4gIH1cbiAgZ2V0T2JzZXJ2ZXJzQ291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMub2JzZXJ2ZXJzLmxlbmd0aDtcbiAgfVxuICBpbnZhbGlkYXRlKCkge1xuICAgIGlmICghdGhpcy5zdGF0ZS5pc0ludmFsaWRhdGVkKSB7XG4gICAgICB0aGlzLiNkaXNwYXRjaCh7IHR5cGU6IFwiaW52YWxpZGF0ZVwiIH0pO1xuICAgIH1cbiAgfVxuICBmZXRjaChvcHRpb25zLCBmZXRjaE9wdGlvbnMpIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5mZXRjaFN0YXR1cyAhPT0gXCJpZGxlXCIpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmRhdGEgIT09IHZvaWQgMCAmJiBmZXRjaE9wdGlvbnM/LmNhbmNlbFJlZmV0Y2gpIHtcbiAgICAgICAgdGhpcy5jYW5jZWwoeyBzaWxlbnQ6IHRydWUgfSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuI3JldHJ5ZXIpIHtcbiAgICAgICAgdGhpcy4jcmV0cnllci5jb250aW51ZVJldHJ5KCk7XG4gICAgICAgIHJldHVybiB0aGlzLiNyZXRyeWVyLnByb21pc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5vcHRpb25zLnF1ZXJ5Rm4pIHtcbiAgICAgIGNvbnN0IG9ic2VydmVyID0gdGhpcy5vYnNlcnZlcnMuZmluZCgoeCkgPT4geC5vcHRpb25zLnF1ZXJ5Rm4pO1xuICAgICAgaWYgKG9ic2VydmVyKSB7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9ucyhvYnNlcnZlci5vcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMub3B0aW9ucy5xdWVyeUtleSkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBgQXMgb2YgdjQsIHF1ZXJ5S2V5IG5lZWRzIHRvIGJlIGFuIEFycmF5LiBJZiB5b3UgYXJlIHVzaW5nIGEgc3RyaW5nIGxpa2UgJ3JlcG9EYXRhJywgcGxlYXNlIGNoYW5nZSBpdCB0byBhbiBBcnJheSwgZS5nLiBbJ3JlcG9EYXRhJ11gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBjb25zdCBhZGRTaWduYWxQcm9wZXJ0eSA9IChvYmplY3QpID0+IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIFwic2lnbmFsXCIsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy4jYWJvcnRTaWduYWxDb25zdW1lZCA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuIGFib3J0Q29udHJvbGxlci5zaWduYWw7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZmV0Y2hGbiA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHF1ZXJ5Rm4gPSBlbnN1cmVRdWVyeUZuKHRoaXMub3B0aW9ucywgZmV0Y2hPcHRpb25zKTtcbiAgICAgIGNvbnN0IHF1ZXJ5Rm5Db250ZXh0ID0ge1xuICAgICAgICBxdWVyeUtleTogdGhpcy5xdWVyeUtleSxcbiAgICAgICAgbWV0YTogdGhpcy5tZXRhXG4gICAgICB9O1xuICAgICAgYWRkU2lnbmFsUHJvcGVydHkocXVlcnlGbkNvbnRleHQpO1xuICAgICAgdGhpcy4jYWJvcnRTaWduYWxDb25zdW1lZCA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5wZXJzaXN0ZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5wZXJzaXN0ZXIoXG4gICAgICAgICAgcXVlcnlGbixcbiAgICAgICAgICBxdWVyeUZuQ29udGV4dCxcbiAgICAgICAgICB0aGlzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcXVlcnlGbihxdWVyeUZuQ29udGV4dCk7XG4gICAgfTtcbiAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgZmV0Y2hPcHRpb25zLFxuICAgICAgb3B0aW9uczogdGhpcy5vcHRpb25zLFxuICAgICAgcXVlcnlLZXk6IHRoaXMucXVlcnlLZXksXG4gICAgICBzdGF0ZTogdGhpcy5zdGF0ZSxcbiAgICAgIGZldGNoRm5cbiAgICB9O1xuICAgIGFkZFNpZ25hbFByb3BlcnR5KGNvbnRleHQpO1xuICAgIHRoaXMub3B0aW9ucy5iZWhhdmlvcj8ub25GZXRjaChcbiAgICAgIGNvbnRleHQsXG4gICAgICB0aGlzXG4gICAgKTtcbiAgICB0aGlzLiNyZXZlcnRTdGF0ZSA9IHRoaXMuc3RhdGU7XG4gICAgaWYgKHRoaXMuc3RhdGUuZmV0Y2hTdGF0dXMgPT09IFwiaWRsZVwiIHx8IHRoaXMuc3RhdGUuZmV0Y2hNZXRhICE9PSBjb250ZXh0LmZldGNoT3B0aW9ucz8ubWV0YSkge1xuICAgICAgdGhpcy4jZGlzcGF0Y2goeyB0eXBlOiBcImZldGNoXCIsIG1ldGE6IGNvbnRleHQuZmV0Y2hPcHRpb25zPy5tZXRhIH0pO1xuICAgIH1cbiAgICBjb25zdCBvbkVycm9yID0gKGVycm9yKSA9PiB7XG4gICAgICBpZiAoIShpc0NhbmNlbGxlZEVycm9yKGVycm9yKSAmJiBlcnJvci5zaWxlbnQpKSB7XG4gICAgICAgIHRoaXMuI2Rpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiBcImVycm9yXCIsXG4gICAgICAgICAgZXJyb3JcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQ2FuY2VsbGVkRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgIHRoaXMuI2NhY2hlLmNvbmZpZy5vbkVycm9yPy4oXG4gICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgdGhpc1xuICAgICAgICApO1xuICAgICAgICB0aGlzLiNjYWNoZS5jb25maWcub25TZXR0bGVkPy4oXG4gICAgICAgICAgdGhpcy5zdGF0ZS5kYXRhLFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICAgIHRoaXNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2NoZWR1bGVHYygpO1xuICAgIH07XG4gICAgdGhpcy4jcmV0cnllciA9IGNyZWF0ZVJldHJ5ZXIoe1xuICAgICAgaW5pdGlhbFByb21pc2U6IGZldGNoT3B0aW9ucz8uaW5pdGlhbFByb21pc2UsXG4gICAgICBmbjogY29udGV4dC5mZXRjaEZuLFxuICAgICAgYWJvcnQ6IGFib3J0Q29udHJvbGxlci5hYm9ydC5iaW5kKGFib3J0Q29udHJvbGxlciksXG4gICAgICBvblN1Y2Nlc3M6IChkYXRhKSA9PiB7XG4gICAgICAgIGlmIChkYXRhID09PSB2b2lkIDApIHtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBgUXVlcnkgZGF0YSBjYW5ub3QgYmUgdW5kZWZpbmVkLiBQbGVhc2UgbWFrZSBzdXJlIHRvIHJldHVybiBhIHZhbHVlIG90aGVyIHRoYW4gdW5kZWZpbmVkIGZyb20geW91ciBxdWVyeSBmdW5jdGlvbi4gQWZmZWN0ZWQgcXVlcnkga2V5OiAke3RoaXMucXVlcnlIYXNofWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9uRXJyb3IobmV3IEVycm9yKGAke3RoaXMucXVlcnlIYXNofSBkYXRhIGlzIHVuZGVmaW5lZGApKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLnNldERhdGEoZGF0YSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgb25FcnJvcihlcnJvcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2NhY2hlLmNvbmZpZy5vblN1Y2Nlc3M/LihkYXRhLCB0aGlzKTtcbiAgICAgICAgdGhpcy4jY2FjaGUuY29uZmlnLm9uU2V0dGxlZD8uKFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgdGhpcy5zdGF0ZS5lcnJvcixcbiAgICAgICAgICB0aGlzXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVHYygpO1xuICAgICAgfSxcbiAgICAgIG9uRXJyb3IsXG4gICAgICBvbkZhaWw6IChmYWlsdXJlQ291bnQsIGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMuI2Rpc3BhdGNoKHsgdHlwZTogXCJmYWlsZWRcIiwgZmFpbHVyZUNvdW50LCBlcnJvciB9KTtcbiAgICAgIH0sXG4gICAgICBvblBhdXNlOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuI2Rpc3BhdGNoKHsgdHlwZTogXCJwYXVzZVwiIH0pO1xuICAgICAgfSxcbiAgICAgIG9uQ29udGludWU6ICgpID0+IHtcbiAgICAgICAgdGhpcy4jZGlzcGF0Y2goeyB0eXBlOiBcImNvbnRpbnVlXCIgfSk7XG4gICAgICB9LFxuICAgICAgcmV0cnk6IGNvbnRleHQub3B0aW9ucy5yZXRyeSxcbiAgICAgIHJldHJ5RGVsYXk6IGNvbnRleHQub3B0aW9ucy5yZXRyeURlbGF5LFxuICAgICAgbmV0d29ya01vZGU6IGNvbnRleHQub3B0aW9ucy5uZXR3b3JrTW9kZSxcbiAgICAgIGNhblJ1bjogKCkgPT4gdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLiNyZXRyeWVyLnN0YXJ0KCk7XG4gIH1cbiAgI2Rpc3BhdGNoKGFjdGlvbikge1xuICAgIGNvbnN0IHJlZHVjZXIgPSAoc3RhdGUpID0+IHtcbiAgICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICAgICAgY2FzZSBcImZhaWxlZFwiOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIGZldGNoRmFpbHVyZUNvdW50OiBhY3Rpb24uZmFpbHVyZUNvdW50LFxuICAgICAgICAgICAgZmV0Y2hGYWlsdXJlUmVhc29uOiBhY3Rpb24uZXJyb3JcbiAgICAgICAgICB9O1xuICAgICAgICBjYXNlIFwicGF1c2VcIjpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICBmZXRjaFN0YXR1czogXCJwYXVzZWRcIlxuICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgXCJjb250aW51ZVwiOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIGZldGNoU3RhdHVzOiBcImZldGNoaW5nXCJcbiAgICAgICAgICB9O1xuICAgICAgICBjYXNlIFwiZmV0Y2hcIjpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICAuLi5mZXRjaFN0YXRlKHN0YXRlLmRhdGEsIHRoaXMub3B0aW9ucyksXG4gICAgICAgICAgICBmZXRjaE1ldGE6IGFjdGlvbi5tZXRhID8/IG51bGxcbiAgICAgICAgICB9O1xuICAgICAgICBjYXNlIFwic3VjY2Vzc1wiOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIGRhdGE6IGFjdGlvbi5kYXRhLFxuICAgICAgICAgICAgZGF0YVVwZGF0ZUNvdW50OiBzdGF0ZS5kYXRhVXBkYXRlQ291bnQgKyAxLFxuICAgICAgICAgICAgZGF0YVVwZGF0ZWRBdDogYWN0aW9uLmRhdGFVcGRhdGVkQXQgPz8gRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgaXNJbnZhbGlkYXRlZDogZmFsc2UsXG4gICAgICAgICAgICBzdGF0dXM6IFwic3VjY2Vzc1wiLFxuICAgICAgICAgICAgLi4uIWFjdGlvbi5tYW51YWwgJiYge1xuICAgICAgICAgICAgICBmZXRjaFN0YXR1czogXCJpZGxlXCIsXG4gICAgICAgICAgICAgIGZldGNoRmFpbHVyZUNvdW50OiAwLFxuICAgICAgICAgICAgICBmZXRjaEZhaWx1cmVSZWFzb246IG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICBjYXNlIFwiZXJyb3JcIjpcbiAgICAgICAgICBjb25zdCBlcnJvciA9IGFjdGlvbi5lcnJvcjtcbiAgICAgICAgICBpZiAoaXNDYW5jZWxsZWRFcnJvcihlcnJvcikgJiYgZXJyb3IucmV2ZXJ0ICYmIHRoaXMuI3JldmVydFN0YXRlKSB7XG4gICAgICAgICAgICByZXR1cm4geyAuLi50aGlzLiNyZXZlcnRTdGF0ZSwgZmV0Y2hTdGF0dXM6IFwiaWRsZVwiIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgZXJyb3JVcGRhdGVDb3VudDogc3RhdGUuZXJyb3JVcGRhdGVDb3VudCArIDEsXG4gICAgICAgICAgICBlcnJvclVwZGF0ZWRBdDogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIGZldGNoRmFpbHVyZUNvdW50OiBzdGF0ZS5mZXRjaEZhaWx1cmVDb3VudCArIDEsXG4gICAgICAgICAgICBmZXRjaEZhaWx1cmVSZWFzb246IGVycm9yLFxuICAgICAgICAgICAgZmV0Y2hTdGF0dXM6IFwiaWRsZVwiLFxuICAgICAgICAgICAgc3RhdHVzOiBcImVycm9yXCJcbiAgICAgICAgICB9O1xuICAgICAgICBjYXNlIFwiaW52YWxpZGF0ZVwiOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIGlzSW52YWxpZGF0ZWQ6IHRydWVcbiAgICAgICAgICB9O1xuICAgICAgICBjYXNlIFwic2V0U3RhdGVcIjpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICAuLi5hY3Rpb24uc3RhdGVcbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5zdGF0ZSA9IHJlZHVjZXIodGhpcy5zdGF0ZSk7XG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLm9ic2VydmVycy5mb3JFYWNoKChvYnNlcnZlcikgPT4ge1xuICAgICAgICBvYnNlcnZlci5vblF1ZXJ5VXBkYXRlKCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuI2NhY2hlLm5vdGlmeSh7IHF1ZXJ5OiB0aGlzLCB0eXBlOiBcInVwZGF0ZWRcIiwgYWN0aW9uIH0pO1xuICAgIH0pO1xuICB9XG59O1xuZnVuY3Rpb24gZmV0Y2hTdGF0ZShkYXRhLCBvcHRpb25zKSB7XG4gIHJldHVybiB7XG4gICAgZmV0Y2hGYWlsdXJlQ291bnQ6IDAsXG4gICAgZmV0Y2hGYWlsdXJlUmVhc29uOiBudWxsLFxuICAgIGZldGNoU3RhdHVzOiBjYW5GZXRjaChvcHRpb25zLm5ldHdvcmtNb2RlKSA/IFwiZmV0Y2hpbmdcIiA6IFwicGF1c2VkXCIsXG4gICAgLi4uZGF0YSA9PT0gdm9pZCAwICYmIHtcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgc3RhdHVzOiBcInBlbmRpbmdcIlxuICAgIH1cbiAgfTtcbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRTdGF0ZShvcHRpb25zKSB7XG4gIGNvbnN0IGRhdGEgPSB0eXBlb2Ygb3B0aW9ucy5pbml0aWFsRGF0YSA9PT0gXCJmdW5jdGlvblwiID8gb3B0aW9ucy5pbml0aWFsRGF0YSgpIDogb3B0aW9ucy5pbml0aWFsRGF0YTtcbiAgY29uc3QgaGFzRGF0YSA9IGRhdGEgIT09IHZvaWQgMDtcbiAgY29uc3QgaW5pdGlhbERhdGFVcGRhdGVkQXQgPSBoYXNEYXRhID8gdHlwZW9mIG9wdGlvbnMuaW5pdGlhbERhdGFVcGRhdGVkQXQgPT09IFwiZnVuY3Rpb25cIiA/IG9wdGlvbnMuaW5pdGlhbERhdGFVcGRhdGVkQXQoKSA6IG9wdGlvbnMuaW5pdGlhbERhdGFVcGRhdGVkQXQgOiAwO1xuICByZXR1cm4ge1xuICAgIGRhdGEsXG4gICAgZGF0YVVwZGF0ZUNvdW50OiAwLFxuICAgIGRhdGFVcGRhdGVkQXQ6IGhhc0RhdGEgPyBpbml0aWFsRGF0YVVwZGF0ZWRBdCA/PyBEYXRlLm5vdygpIDogMCxcbiAgICBlcnJvcjogbnVsbCxcbiAgICBlcnJvclVwZGF0ZUNvdW50OiAwLFxuICAgIGVycm9yVXBkYXRlZEF0OiAwLFxuICAgIGZldGNoRmFpbHVyZUNvdW50OiAwLFxuICAgIGZldGNoRmFpbHVyZVJlYXNvbjogbnVsbCxcbiAgICBmZXRjaE1ldGE6IG51bGwsXG4gICAgaXNJbnZhbGlkYXRlZDogZmFsc2UsXG4gICAgc3RhdHVzOiBoYXNEYXRhID8gXCJzdWNjZXNzXCIgOiBcInBlbmRpbmdcIixcbiAgICBmZXRjaFN0YXR1czogXCJpZGxlXCJcbiAgfTtcbn1cbmV4cG9ydCB7XG4gIFF1ZXJ5LFxuICBmZXRjaFN0YXRlXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cXVlcnkuanMubWFwIiwiLy8gc3JjL3F1ZXJ5Q2FjaGUudHNcbmltcG9ydCB7IGhhc2hRdWVyeUtleUJ5T3B0aW9ucywgbWF0Y2hRdWVyeSB9IGZyb20gXCIuL3V0aWxzLmpzXCI7XG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCIuL3F1ZXJ5LmpzXCI7XG5pbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSBcIi4vbm90aWZ5TWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgU3Vic2NyaWJhYmxlIH0gZnJvbSBcIi4vc3Vic2NyaWJhYmxlLmpzXCI7XG52YXIgUXVlcnlDYWNoZSA9IGNsYXNzIGV4dGVuZHMgU3Vic2NyaWJhYmxlIHtcbiAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIHRoaXMuI3F1ZXJpZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICB9XG4gICNxdWVyaWVzO1xuICBidWlsZChjbGllbnQsIG9wdGlvbnMsIHN0YXRlKSB7XG4gICAgY29uc3QgcXVlcnlLZXkgPSBvcHRpb25zLnF1ZXJ5S2V5O1xuICAgIGNvbnN0IHF1ZXJ5SGFzaCA9IG9wdGlvbnMucXVlcnlIYXNoID8/IGhhc2hRdWVyeUtleUJ5T3B0aW9ucyhxdWVyeUtleSwgb3B0aW9ucyk7XG4gICAgbGV0IHF1ZXJ5ID0gdGhpcy5nZXQocXVlcnlIYXNoKTtcbiAgICBpZiAoIXF1ZXJ5KSB7XG4gICAgICBxdWVyeSA9IG5ldyBRdWVyeSh7XG4gICAgICAgIGNhY2hlOiB0aGlzLFxuICAgICAgICBxdWVyeUtleSxcbiAgICAgICAgcXVlcnlIYXNoLFxuICAgICAgICBvcHRpb25zOiBjbGllbnQuZGVmYXVsdFF1ZXJ5T3B0aW9ucyhvcHRpb25zKSxcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIGRlZmF1bHRPcHRpb25zOiBjbGllbnQuZ2V0UXVlcnlEZWZhdWx0cyhxdWVyeUtleSlcbiAgICAgIH0pO1xuICAgICAgdGhpcy5hZGQocXVlcnkpO1xuICAgIH1cbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cbiAgYWRkKHF1ZXJ5KSB7XG4gICAgaWYgKCF0aGlzLiNxdWVyaWVzLmhhcyhxdWVyeS5xdWVyeUhhc2gpKSB7XG4gICAgICB0aGlzLiNxdWVyaWVzLnNldChxdWVyeS5xdWVyeUhhc2gsIHF1ZXJ5KTtcbiAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogXCJhZGRlZFwiLFxuICAgICAgICBxdWVyeVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJlbW92ZShxdWVyeSkge1xuICAgIGNvbnN0IHF1ZXJ5SW5NYXAgPSB0aGlzLiNxdWVyaWVzLmdldChxdWVyeS5xdWVyeUhhc2gpO1xuICAgIGlmIChxdWVyeUluTWFwKSB7XG4gICAgICBxdWVyeS5kZXN0cm95KCk7XG4gICAgICBpZiAocXVlcnlJbk1hcCA9PT0gcXVlcnkpIHtcbiAgICAgICAgdGhpcy4jcXVlcmllcy5kZWxldGUocXVlcnkucXVlcnlIYXNoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubm90aWZ5KHsgdHlwZTogXCJyZW1vdmVkXCIsIHF1ZXJ5IH0pO1xuICAgIH1cbiAgfVxuICBjbGVhcigpIHtcbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKCgpID0+IHtcbiAgICAgIHRoaXMuZ2V0QWxsKCkuZm9yRWFjaCgocXVlcnkpID0+IHtcbiAgICAgICAgdGhpcy5yZW1vdmUocXVlcnkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgZ2V0KHF1ZXJ5SGFzaCkge1xuICAgIHJldHVybiB0aGlzLiNxdWVyaWVzLmdldChxdWVyeUhhc2gpO1xuICB9XG4gIGdldEFsbCgpIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuI3F1ZXJpZXMudmFsdWVzKCldO1xuICB9XG4gIGZpbmQoZmlsdGVycykge1xuICAgIGNvbnN0IGRlZmF1bHRlZEZpbHRlcnMgPSB7IGV4YWN0OiB0cnVlLCAuLi5maWx0ZXJzIH07XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWxsKCkuZmluZChcbiAgICAgIChxdWVyeSkgPT4gbWF0Y2hRdWVyeShkZWZhdWx0ZWRGaWx0ZXJzLCBxdWVyeSlcbiAgICApO1xuICB9XG4gIGZpbmRBbGwoZmlsdGVycyA9IHt9KSB7XG4gICAgY29uc3QgcXVlcmllcyA9IHRoaXMuZ2V0QWxsKCk7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGZpbHRlcnMpLmxlbmd0aCA+IDAgPyBxdWVyaWVzLmZpbHRlcigocXVlcnkpID0+IG1hdGNoUXVlcnkoZmlsdGVycywgcXVlcnkpKSA6IHF1ZXJpZXM7XG4gIH1cbiAgbm90aWZ5KGV2ZW50KSB7XG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLmxpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lcikgPT4ge1xuICAgICAgICBsaXN0ZW5lcihldmVudCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBvbkZvY3VzKCkge1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5nZXRBbGwoKS5mb3JFYWNoKChxdWVyeSkgPT4ge1xuICAgICAgICBxdWVyeS5vbkZvY3VzKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBvbk9ubGluZSgpIHtcbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKCgpID0+IHtcbiAgICAgIHRoaXMuZ2V0QWxsKCkuZm9yRWFjaCgocXVlcnkpID0+IHtcbiAgICAgICAgcXVlcnkub25PbmxpbmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59O1xuZXhwb3J0IHtcbiAgUXVlcnlDYWNoZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXF1ZXJ5Q2FjaGUuanMubWFwIiwiLy8gc3JjL211dGF0aW9uLnRzXG5pbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSBcIi4vbm90aWZ5TWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgUmVtb3ZhYmxlIH0gZnJvbSBcIi4vcmVtb3ZhYmxlLmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVSZXRyeWVyIH0gZnJvbSBcIi4vcmV0cnllci5qc1wiO1xudmFyIE11dGF0aW9uID0gY2xhc3MgZXh0ZW5kcyBSZW1vdmFibGUge1xuICAjb2JzZXJ2ZXJzO1xuICAjbXV0YXRpb25DYWNoZTtcbiAgI3JldHJ5ZXI7XG4gIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5tdXRhdGlvbklkID0gY29uZmlnLm11dGF0aW9uSWQ7XG4gICAgdGhpcy4jbXV0YXRpb25DYWNoZSA9IGNvbmZpZy5tdXRhdGlvbkNhY2hlO1xuICAgIHRoaXMuI29ic2VydmVycyA9IFtdO1xuICAgIHRoaXMuc3RhdGUgPSBjb25maWcuc3RhdGUgfHwgZ2V0RGVmYXVsdFN0YXRlKCk7XG4gICAgdGhpcy5zZXRPcHRpb25zKGNvbmZpZy5vcHRpb25zKTtcbiAgICB0aGlzLnNjaGVkdWxlR2MoKTtcbiAgfVxuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMudXBkYXRlR2NUaW1lKHRoaXMub3B0aW9ucy5nY1RpbWUpO1xuICB9XG4gIGdldCBtZXRhKCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubWV0YTtcbiAgfVxuICBhZGRPYnNlcnZlcihvYnNlcnZlcikge1xuICAgIGlmICghdGhpcy4jb2JzZXJ2ZXJzLmluY2x1ZGVzKG9ic2VydmVyKSkge1xuICAgICAgdGhpcy4jb2JzZXJ2ZXJzLnB1c2gob2JzZXJ2ZXIpO1xuICAgICAgdGhpcy5jbGVhckdjVGltZW91dCgpO1xuICAgICAgdGhpcy4jbXV0YXRpb25DYWNoZS5ub3RpZnkoe1xuICAgICAgICB0eXBlOiBcIm9ic2VydmVyQWRkZWRcIixcbiAgICAgICAgbXV0YXRpb246IHRoaXMsXG4gICAgICAgIG9ic2VydmVyXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmVtb3ZlT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcbiAgICB0aGlzLiNvYnNlcnZlcnMgPSB0aGlzLiNvYnNlcnZlcnMuZmlsdGVyKCh4KSA9PiB4ICE9PSBvYnNlcnZlcik7XG4gICAgdGhpcy5zY2hlZHVsZUdjKCk7XG4gICAgdGhpcy4jbXV0YXRpb25DYWNoZS5ub3RpZnkoe1xuICAgICAgdHlwZTogXCJvYnNlcnZlclJlbW92ZWRcIixcbiAgICAgIG11dGF0aW9uOiB0aGlzLFxuICAgICAgb2JzZXJ2ZXJcbiAgICB9KTtcbiAgfVxuICBvcHRpb25hbFJlbW92ZSgpIHtcbiAgICBpZiAoIXRoaXMuI29ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLnN0YXR1cyA9PT0gXCJwZW5kaW5nXCIpIHtcbiAgICAgICAgdGhpcy5zY2hlZHVsZUdjKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiNtdXRhdGlvbkNhY2hlLnJlbW92ZSh0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29udGludWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuI3JldHJ5ZXI/LmNvbnRpbnVlKCkgPz8gLy8gY29udGludWluZyBhIG11dGF0aW9uIGFzc3VtZXMgdGhhdCB2YXJpYWJsZXMgYXJlIHNldCwgbXV0YXRpb24gbXVzdCBoYXZlIGJlZW4gZGVoeWRyYXRlZCBiZWZvcmVcbiAgICB0aGlzLmV4ZWN1dGUodGhpcy5zdGF0ZS52YXJpYWJsZXMpO1xuICB9XG4gIGFzeW5jIGV4ZWN1dGUodmFyaWFibGVzKSB7XG4gICAgdGhpcy4jcmV0cnllciA9IGNyZWF0ZVJldHJ5ZXIoe1xuICAgICAgZm46ICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMubXV0YXRpb25Gbikge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBtdXRhdGlvbkZuIGZvdW5kXCIpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLm11dGF0aW9uRm4odmFyaWFibGVzKTtcbiAgICAgIH0sXG4gICAgICBvbkZhaWw6IChmYWlsdXJlQ291bnQsIGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMuI2Rpc3BhdGNoKHsgdHlwZTogXCJmYWlsZWRcIiwgZmFpbHVyZUNvdW50LCBlcnJvciB9KTtcbiAgICAgIH0sXG4gICAgICBvblBhdXNlOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuI2Rpc3BhdGNoKHsgdHlwZTogXCJwYXVzZVwiIH0pO1xuICAgICAgfSxcbiAgICAgIG9uQ29udGludWU6ICgpID0+IHtcbiAgICAgICAgdGhpcy4jZGlzcGF0Y2goeyB0eXBlOiBcImNvbnRpbnVlXCIgfSk7XG4gICAgICB9LFxuICAgICAgcmV0cnk6IHRoaXMub3B0aW9ucy5yZXRyeSA/PyAwLFxuICAgICAgcmV0cnlEZWxheTogdGhpcy5vcHRpb25zLnJldHJ5RGVsYXksXG4gICAgICBuZXR3b3JrTW9kZTogdGhpcy5vcHRpb25zLm5ldHdvcmtNb2RlLFxuICAgICAgY2FuUnVuOiAoKSA9PiB0aGlzLiNtdXRhdGlvbkNhY2hlLmNhblJ1bih0aGlzKVxuICAgIH0pO1xuICAgIGNvbnN0IHJlc3RvcmVkID0gdGhpcy5zdGF0ZS5zdGF0dXMgPT09IFwicGVuZGluZ1wiO1xuICAgIGNvbnN0IGlzUGF1c2VkID0gIXRoaXMuI3JldHJ5ZXIuY2FuU3RhcnQoKTtcbiAgICB0cnkge1xuICAgICAgaWYgKCFyZXN0b3JlZCkge1xuICAgICAgICB0aGlzLiNkaXNwYXRjaCh7IHR5cGU6IFwicGVuZGluZ1wiLCB2YXJpYWJsZXMsIGlzUGF1c2VkIH0pO1xuICAgICAgICBhd2FpdCB0aGlzLiNtdXRhdGlvbkNhY2hlLmNvbmZpZy5vbk11dGF0ZT8uKFxuICAgICAgICAgIHZhcmlhYmxlcyxcbiAgICAgICAgICB0aGlzXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBhd2FpdCB0aGlzLm9wdGlvbnMub25NdXRhdGU/Lih2YXJpYWJsZXMpO1xuICAgICAgICBpZiAoY29udGV4dCAhPT0gdGhpcy5zdGF0ZS5jb250ZXh0KSB7XG4gICAgICAgICAgdGhpcy4jZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogXCJwZW5kaW5nXCIsXG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgdmFyaWFibGVzLFxuICAgICAgICAgICAgaXNQYXVzZWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuI3JldHJ5ZXIuc3RhcnQoKTtcbiAgICAgIGF3YWl0IHRoaXMuI211dGF0aW9uQ2FjaGUuY29uZmlnLm9uU3VjY2Vzcz8uKFxuICAgICAgICBkYXRhLFxuICAgICAgICB2YXJpYWJsZXMsXG4gICAgICAgIHRoaXMuc3RhdGUuY29udGV4dCxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICAgIGF3YWl0IHRoaXMub3B0aW9ucy5vblN1Y2Nlc3M/LihkYXRhLCB2YXJpYWJsZXMsIHRoaXMuc3RhdGUuY29udGV4dCk7XG4gICAgICBhd2FpdCB0aGlzLiNtdXRhdGlvbkNhY2hlLmNvbmZpZy5vblNldHRsZWQ/LihcbiAgICAgICAgZGF0YSxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgdGhpcy5zdGF0ZS52YXJpYWJsZXMsXG4gICAgICAgIHRoaXMuc3RhdGUuY29udGV4dCxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICAgIGF3YWl0IHRoaXMub3B0aW9ucy5vblNldHRsZWQ/LihkYXRhLCBudWxsLCB2YXJpYWJsZXMsIHRoaXMuc3RhdGUuY29udGV4dCk7XG4gICAgICB0aGlzLiNkaXNwYXRjaCh7IHR5cGU6IFwic3VjY2Vzc1wiLCBkYXRhIH0pO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuI211dGF0aW9uQ2FjaGUuY29uZmlnLm9uRXJyb3I/LihcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgICB2YXJpYWJsZXMsXG4gICAgICAgICAgdGhpcy5zdGF0ZS5jb250ZXh0LFxuICAgICAgICAgIHRoaXNcbiAgICAgICAgKTtcbiAgICAgICAgYXdhaXQgdGhpcy5vcHRpb25zLm9uRXJyb3I/LihcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgICB2YXJpYWJsZXMsXG4gICAgICAgICAgdGhpcy5zdGF0ZS5jb250ZXh0XG4gICAgICAgICk7XG4gICAgICAgIGF3YWl0IHRoaXMuI211dGF0aW9uQ2FjaGUuY29uZmlnLm9uU2V0dGxlZD8uKFxuICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgICB0aGlzLnN0YXRlLnZhcmlhYmxlcyxcbiAgICAgICAgICB0aGlzLnN0YXRlLmNvbnRleHQsXG4gICAgICAgICAgdGhpc1xuICAgICAgICApO1xuICAgICAgICBhd2FpdCB0aGlzLm9wdGlvbnMub25TZXR0bGVkPy4oXG4gICAgICAgICAgdm9pZCAwLFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICAgIHZhcmlhYmxlcyxcbiAgICAgICAgICB0aGlzLnN0YXRlLmNvbnRleHRcbiAgICAgICAgKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLiNkaXNwYXRjaCh7IHR5cGU6IFwiZXJyb3JcIiwgZXJyb3IgfSk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuI211dGF0aW9uQ2FjaGUucnVuTmV4dCh0aGlzKTtcbiAgICB9XG4gIH1cbiAgI2Rpc3BhdGNoKGFjdGlvbikge1xuICAgIGNvbnN0IHJlZHVjZXIgPSAoc3RhdGUpID0+IHtcbiAgICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICAgICAgY2FzZSBcImZhaWxlZFwiOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIGZhaWx1cmVDb3VudDogYWN0aW9uLmZhaWx1cmVDb3VudCxcbiAgICAgICAgICAgIGZhaWx1cmVSZWFzb246IGFjdGlvbi5lcnJvclxuICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgXCJwYXVzZVwiOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIGlzUGF1c2VkOiB0cnVlXG4gICAgICAgICAgfTtcbiAgICAgICAgY2FzZSBcImNvbnRpbnVlXCI6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgaXNQYXVzZWQ6IGZhbHNlXG4gICAgICAgICAgfTtcbiAgICAgICAgY2FzZSBcInBlbmRpbmdcIjpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICBjb250ZXh0OiBhY3Rpb24uY29udGV4dCxcbiAgICAgICAgICAgIGRhdGE6IHZvaWQgMCxcbiAgICAgICAgICAgIGZhaWx1cmVDb3VudDogMCxcbiAgICAgICAgICAgIGZhaWx1cmVSZWFzb246IG51bGwsXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgIGlzUGF1c2VkOiBhY3Rpb24uaXNQYXVzZWQsXG4gICAgICAgICAgICBzdGF0dXM6IFwicGVuZGluZ1wiLFxuICAgICAgICAgICAgdmFyaWFibGVzOiBhY3Rpb24udmFyaWFibGVzLFxuICAgICAgICAgICAgc3VibWl0dGVkQXQ6IERhdGUubm93KClcbiAgICAgICAgICB9O1xuICAgICAgICBjYXNlIFwic3VjY2Vzc1wiOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIGRhdGE6IGFjdGlvbi5kYXRhLFxuICAgICAgICAgICAgZmFpbHVyZUNvdW50OiAwLFxuICAgICAgICAgICAgZmFpbHVyZVJlYXNvbjogbnVsbCxcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgc3RhdHVzOiBcInN1Y2Nlc3NcIixcbiAgICAgICAgICAgIGlzUGF1c2VkOiBmYWxzZVxuICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgXCJlcnJvclwiOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIGRhdGE6IHZvaWQgMCxcbiAgICAgICAgICAgIGVycm9yOiBhY3Rpb24uZXJyb3IsXG4gICAgICAgICAgICBmYWlsdXJlQ291bnQ6IHN0YXRlLmZhaWx1cmVDb3VudCArIDEsXG4gICAgICAgICAgICBmYWlsdXJlUmVhc29uOiBhY3Rpb24uZXJyb3IsXG4gICAgICAgICAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBzdGF0dXM6IFwiZXJyb3JcIlxuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnN0YXRlID0gcmVkdWNlcih0aGlzLnN0YXRlKTtcbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKCgpID0+IHtcbiAgICAgIHRoaXMuI29ic2VydmVycy5mb3JFYWNoKChvYnNlcnZlcikgPT4ge1xuICAgICAgICBvYnNlcnZlci5vbk11dGF0aW9uVXBkYXRlKGFjdGlvbik7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuI211dGF0aW9uQ2FjaGUubm90aWZ5KHtcbiAgICAgICAgbXV0YXRpb246IHRoaXMsXG4gICAgICAgIHR5cGU6IFwidXBkYXRlZFwiLFxuICAgICAgICBhY3Rpb25cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59O1xuZnVuY3Rpb24gZ2V0RGVmYXVsdFN0YXRlKCkge1xuICByZXR1cm4ge1xuICAgIGNvbnRleHQ6IHZvaWQgMCxcbiAgICBkYXRhOiB2b2lkIDAsXG4gICAgZXJyb3I6IG51bGwsXG4gICAgZmFpbHVyZUNvdW50OiAwLFxuICAgIGZhaWx1cmVSZWFzb246IG51bGwsXG4gICAgaXNQYXVzZWQ6IGZhbHNlLFxuICAgIHN0YXR1czogXCJpZGxlXCIsXG4gICAgdmFyaWFibGVzOiB2b2lkIDAsXG4gICAgc3VibWl0dGVkQXQ6IDBcbiAgfTtcbn1cbmV4cG9ydCB7XG4gIE11dGF0aW9uLFxuICBnZXREZWZhdWx0U3RhdGVcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tdXRhdGlvbi5qcy5tYXAiLCIvLyBzcmMvbXV0YXRpb25DYWNoZS50c1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gXCIuL25vdGlmeU1hbmFnZXIuanNcIjtcbmltcG9ydCB7IE11dGF0aW9uIH0gZnJvbSBcIi4vbXV0YXRpb24uanNcIjtcbmltcG9ydCB7IG1hdGNoTXV0YXRpb24sIG5vb3AgfSBmcm9tIFwiLi91dGlscy5qc1wiO1xuaW1wb3J0IHsgU3Vic2NyaWJhYmxlIH0gZnJvbSBcIi4vc3Vic2NyaWJhYmxlLmpzXCI7XG52YXIgTXV0YXRpb25DYWNoZSA9IGNsYXNzIGV4dGVuZHMgU3Vic2NyaWJhYmxlIHtcbiAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIHRoaXMuI211dGF0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG4gICAgdGhpcy4jc2NvcGVzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICB0aGlzLiNtdXRhdGlvbklkID0gMDtcbiAgfVxuICAjbXV0YXRpb25zO1xuICAjc2NvcGVzO1xuICAjbXV0YXRpb25JZDtcbiAgYnVpbGQoY2xpZW50LCBvcHRpb25zLCBzdGF0ZSkge1xuICAgIGNvbnN0IG11dGF0aW9uID0gbmV3IE11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uQ2FjaGU6IHRoaXMsXG4gICAgICBtdXRhdGlvbklkOiArK3RoaXMuI211dGF0aW9uSWQsXG4gICAgICBvcHRpb25zOiBjbGllbnQuZGVmYXVsdE11dGF0aW9uT3B0aW9ucyhvcHRpb25zKSxcbiAgICAgIHN0YXRlXG4gICAgfSk7XG4gICAgdGhpcy5hZGQobXV0YXRpb24pO1xuICAgIHJldHVybiBtdXRhdGlvbjtcbiAgfVxuICBhZGQobXV0YXRpb24pIHtcbiAgICB0aGlzLiNtdXRhdGlvbnMuYWRkKG11dGF0aW9uKTtcbiAgICBjb25zdCBzY29wZSA9IHNjb3BlRm9yKG11dGF0aW9uKTtcbiAgICBpZiAodHlwZW9mIHNjb3BlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBjb25zdCBzY29wZWRNdXRhdGlvbnMgPSB0aGlzLiNzY29wZXMuZ2V0KHNjb3BlKTtcbiAgICAgIGlmIChzY29wZWRNdXRhdGlvbnMpIHtcbiAgICAgICAgc2NvcGVkTXV0YXRpb25zLnB1c2gobXV0YXRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4jc2NvcGVzLnNldChzY29wZSwgW211dGF0aW9uXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMubm90aWZ5KHsgdHlwZTogXCJhZGRlZFwiLCBtdXRhdGlvbiB9KTtcbiAgfVxuICByZW1vdmUobXV0YXRpb24pIHtcbiAgICBpZiAodGhpcy4jbXV0YXRpb25zLmRlbGV0ZShtdXRhdGlvbikpIHtcbiAgICAgIGNvbnN0IHNjb3BlID0gc2NvcGVGb3IobXV0YXRpb24pO1xuICAgICAgaWYgKHR5cGVvZiBzY29wZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBjb25zdCBzY29wZWRNdXRhdGlvbnMgPSB0aGlzLiNzY29wZXMuZ2V0KHNjb3BlKTtcbiAgICAgICAgaWYgKHNjb3BlZE11dGF0aW9ucykge1xuICAgICAgICAgIGlmIChzY29wZWRNdXRhdGlvbnMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBzY29wZWRNdXRhdGlvbnMuaW5kZXhPZihtdXRhdGlvbik7XG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIHNjb3BlZE11dGF0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoc2NvcGVkTXV0YXRpb25zWzBdID09PSBtdXRhdGlvbikge1xuICAgICAgICAgICAgdGhpcy4jc2NvcGVzLmRlbGV0ZShzY29wZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMubm90aWZ5KHsgdHlwZTogXCJyZW1vdmVkXCIsIG11dGF0aW9uIH0pO1xuICB9XG4gIGNhblJ1bihtdXRhdGlvbikge1xuICAgIGNvbnN0IHNjb3BlID0gc2NvcGVGb3IobXV0YXRpb24pO1xuICAgIGlmICh0eXBlb2Ygc2NvcGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGNvbnN0IG11dGF0aW9uc1dpdGhTYW1lU2NvcGUgPSB0aGlzLiNzY29wZXMuZ2V0KHNjb3BlKTtcbiAgICAgIGNvbnN0IGZpcnN0UGVuZGluZ011dGF0aW9uID0gbXV0YXRpb25zV2l0aFNhbWVTY29wZT8uZmluZChcbiAgICAgICAgKG0pID0+IG0uc3RhdGUuc3RhdHVzID09PSBcInBlbmRpbmdcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiAhZmlyc3RQZW5kaW5nTXV0YXRpb24gfHwgZmlyc3RQZW5kaW5nTXV0YXRpb24gPT09IG11dGF0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcnVuTmV4dChtdXRhdGlvbikge1xuICAgIGNvbnN0IHNjb3BlID0gc2NvcGVGb3IobXV0YXRpb24pO1xuICAgIGlmICh0eXBlb2Ygc2NvcGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGNvbnN0IGZvdW5kTXV0YXRpb24gPSB0aGlzLiNzY29wZXMuZ2V0KHNjb3BlKT8uZmluZCgobSkgPT4gbSAhPT0gbXV0YXRpb24gJiYgbS5zdGF0ZS5pc1BhdXNlZCk7XG4gICAgICByZXR1cm4gZm91bmRNdXRhdGlvbj8uY29udGludWUoKSA/PyBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgfVxuICBjbGVhcigpIHtcbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKCgpID0+IHtcbiAgICAgIHRoaXMuI211dGF0aW9ucy5mb3JFYWNoKChtdXRhdGlvbikgPT4ge1xuICAgICAgICB0aGlzLm5vdGlmeSh7IHR5cGU6IFwicmVtb3ZlZFwiLCBtdXRhdGlvbiB9KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy4jbXV0YXRpb25zLmNsZWFyKCk7XG4gICAgICB0aGlzLiNzY29wZXMuY2xlYXIoKTtcbiAgICB9KTtcbiAgfVxuICBnZXRBbGwoKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy4jbXV0YXRpb25zKTtcbiAgfVxuICBmaW5kKGZpbHRlcnMpIHtcbiAgICBjb25zdCBkZWZhdWx0ZWRGaWx0ZXJzID0geyBleGFjdDogdHJ1ZSwgLi4uZmlsdGVycyB9O1xuICAgIHJldHVybiB0aGlzLmdldEFsbCgpLmZpbmQoXG4gICAgICAobXV0YXRpb24pID0+IG1hdGNoTXV0YXRpb24oZGVmYXVsdGVkRmlsdGVycywgbXV0YXRpb24pXG4gICAgKTtcbiAgfVxuICBmaW5kQWxsKGZpbHRlcnMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLmdldEFsbCgpLmZpbHRlcigobXV0YXRpb24pID0+IG1hdGNoTXV0YXRpb24oZmlsdGVycywgbXV0YXRpb24pKTtcbiAgfVxuICBub3RpZnkoZXZlbnQpIHtcbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKCgpID0+IHtcbiAgICAgIHRoaXMubGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiB7XG4gICAgICAgIGxpc3RlbmVyKGV2ZW50KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIHJlc3VtZVBhdXNlZE11dGF0aW9ucygpIHtcbiAgICBjb25zdCBwYXVzZWRNdXRhdGlvbnMgPSB0aGlzLmdldEFsbCgpLmZpbHRlcigoeCkgPT4geC5zdGF0ZS5pc1BhdXNlZCk7XG4gICAgcmV0dXJuIG5vdGlmeU1hbmFnZXIuYmF0Y2goXG4gICAgICAoKSA9PiBQcm9taXNlLmFsbChcbiAgICAgICAgcGF1c2VkTXV0YXRpb25zLm1hcCgobXV0YXRpb24pID0+IG11dGF0aW9uLmNvbnRpbnVlKCkuY2F0Y2gobm9vcCkpXG4gICAgICApXG4gICAgKTtcbiAgfVxufTtcbmZ1bmN0aW9uIHNjb3BlRm9yKG11dGF0aW9uKSB7XG4gIHJldHVybiBtdXRhdGlvbi5vcHRpb25zLnNjb3BlPy5pZDtcbn1cbmV4cG9ydCB7XG4gIE11dGF0aW9uQ2FjaGVcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tdXRhdGlvbkNhY2hlLmpzLm1hcCIsIi8vIHNyYy9pbmZpbml0ZVF1ZXJ5QmVoYXZpb3IudHNcbmltcG9ydCB7IGFkZFRvRW5kLCBhZGRUb1N0YXJ0LCBlbnN1cmVRdWVyeUZuIH0gZnJvbSBcIi4vdXRpbHMuanNcIjtcbmZ1bmN0aW9uIGluZmluaXRlUXVlcnlCZWhhdmlvcihwYWdlcykge1xuICByZXR1cm4ge1xuICAgIG9uRmV0Y2g6IChjb250ZXh0LCBxdWVyeSkgPT4ge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IGNvbnRleHQub3B0aW9ucztcbiAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGNvbnRleHQuZmV0Y2hPcHRpb25zPy5tZXRhPy5mZXRjaE1vcmU/LmRpcmVjdGlvbjtcbiAgICAgIGNvbnN0IG9sZFBhZ2VzID0gY29udGV4dC5zdGF0ZS5kYXRhPy5wYWdlcyB8fCBbXTtcbiAgICAgIGNvbnN0IG9sZFBhZ2VQYXJhbXMgPSBjb250ZXh0LnN0YXRlLmRhdGE/LnBhZ2VQYXJhbXMgfHwgW107XG4gICAgICBsZXQgcmVzdWx0ID0geyBwYWdlczogW10sIHBhZ2VQYXJhbXM6IFtdIH07XG4gICAgICBsZXQgY3VycmVudFBhZ2UgPSAwO1xuICAgICAgY29uc3QgZmV0Y2hGbiA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgbGV0IGNhbmNlbGxlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBhZGRTaWduYWxQcm9wZXJ0eSA9IChvYmplY3QpID0+IHtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBcInNpZ25hbFwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChjb250ZXh0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5zaWduYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHF1ZXJ5Rm4gPSBlbnN1cmVRdWVyeUZuKGNvbnRleHQub3B0aW9ucywgY29udGV4dC5mZXRjaE9wdGlvbnMpO1xuICAgICAgICBjb25zdCBmZXRjaFBhZ2UgPSBhc3luYyAoZGF0YSwgcGFyYW0sIHByZXZpb3VzKSA9PiB7XG4gICAgICAgICAgaWYgKGNhbmNlbGxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwYXJhbSA9PSBudWxsICYmIGRhdGEucGFnZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBxdWVyeUZuQ29udGV4dCA9IHtcbiAgICAgICAgICAgIHF1ZXJ5S2V5OiBjb250ZXh0LnF1ZXJ5S2V5LFxuICAgICAgICAgICAgcGFnZVBhcmFtOiBwYXJhbSxcbiAgICAgICAgICAgIGRpcmVjdGlvbjogcHJldmlvdXMgPyBcImJhY2t3YXJkXCIgOiBcImZvcndhcmRcIixcbiAgICAgICAgICAgIG1ldGE6IGNvbnRleHQub3B0aW9ucy5tZXRhXG4gICAgICAgICAgfTtcbiAgICAgICAgICBhZGRTaWduYWxQcm9wZXJ0eShxdWVyeUZuQ29udGV4dCk7XG4gICAgICAgICAgY29uc3QgcGFnZSA9IGF3YWl0IHF1ZXJ5Rm4oXG4gICAgICAgICAgICBxdWVyeUZuQ29udGV4dFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgeyBtYXhQYWdlcyB9ID0gY29udGV4dC5vcHRpb25zO1xuICAgICAgICAgIGNvbnN0IGFkZFRvID0gcHJldmlvdXMgPyBhZGRUb1N0YXJ0IDogYWRkVG9FbmQ7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBhZ2VzOiBhZGRUbyhkYXRhLnBhZ2VzLCBwYWdlLCBtYXhQYWdlcyksXG4gICAgICAgICAgICBwYWdlUGFyYW1zOiBhZGRUbyhkYXRhLnBhZ2VQYXJhbXMsIHBhcmFtLCBtYXhQYWdlcylcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICBpZiAoZGlyZWN0aW9uICYmIG9sZFBhZ2VzLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IHByZXZpb3VzID0gZGlyZWN0aW9uID09PSBcImJhY2t3YXJkXCI7XG4gICAgICAgICAgY29uc3QgcGFnZVBhcmFtRm4gPSBwcmV2aW91cyA/IGdldFByZXZpb3VzUGFnZVBhcmFtIDogZ2V0TmV4dFBhZ2VQYXJhbTtcbiAgICAgICAgICBjb25zdCBvbGREYXRhID0ge1xuICAgICAgICAgICAgcGFnZXM6IG9sZFBhZ2VzLFxuICAgICAgICAgICAgcGFnZVBhcmFtczogb2xkUGFnZVBhcmFtc1xuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgcGFyYW0gPSBwYWdlUGFyYW1GbihvcHRpb25zLCBvbGREYXRhKTtcbiAgICAgICAgICByZXN1bHQgPSBhd2FpdCBmZXRjaFBhZ2Uob2xkRGF0YSwgcGFyYW0sIHByZXZpb3VzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCByZW1haW5pbmdQYWdlcyA9IHBhZ2VzID8/IG9sZFBhZ2VzLmxlbmd0aDtcbiAgICAgICAgICBkbyB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbSA9IGN1cnJlbnRQYWdlID09PSAwID8gb2xkUGFnZVBhcmFtc1swXSA/PyBvcHRpb25zLmluaXRpYWxQYWdlUGFyYW0gOiBnZXROZXh0UGFnZVBhcmFtKG9wdGlvbnMsIHJlc3VsdCk7XG4gICAgICAgICAgICBpZiAoY3VycmVudFBhZ2UgPiAwICYmIHBhcmFtID09IG51bGwpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQgPSBhd2FpdCBmZXRjaFBhZ2UocmVzdWx0LCBwYXJhbSk7XG4gICAgICAgICAgICBjdXJyZW50UGFnZSsrO1xuICAgICAgICAgIH0gd2hpbGUgKGN1cnJlbnRQYWdlIDwgcmVtYWluaW5nUGFnZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9O1xuICAgICAgaWYgKGNvbnRleHQub3B0aW9ucy5wZXJzaXN0ZXIpIHtcbiAgICAgICAgY29udGV4dC5mZXRjaEZuID0gKCkgPT4ge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0Lm9wdGlvbnMucGVyc2lzdGVyPy4oXG4gICAgICAgICAgICBmZXRjaEZuLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBxdWVyeUtleTogY29udGV4dC5xdWVyeUtleSxcbiAgICAgICAgICAgICAgbWV0YTogY29udGV4dC5vcHRpb25zLm1ldGEsXG4gICAgICAgICAgICAgIHNpZ25hbDogY29udGV4dC5zaWduYWxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBxdWVyeVxuICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZXh0LmZldGNoRm4gPSBmZXRjaEZuO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cbmZ1bmN0aW9uIGdldE5leHRQYWdlUGFyYW0ob3B0aW9ucywgeyBwYWdlcywgcGFnZVBhcmFtcyB9KSB7XG4gIGNvbnN0IGxhc3RJbmRleCA9IHBhZ2VzLmxlbmd0aCAtIDE7XG4gIHJldHVybiBwYWdlcy5sZW5ndGggPiAwID8gb3B0aW9ucy5nZXROZXh0UGFnZVBhcmFtKFxuICAgIHBhZ2VzW2xhc3RJbmRleF0sXG4gICAgcGFnZXMsXG4gICAgcGFnZVBhcmFtc1tsYXN0SW5kZXhdLFxuICAgIHBhZ2VQYXJhbXNcbiAgKSA6IHZvaWQgMDtcbn1cbmZ1bmN0aW9uIGdldFByZXZpb3VzUGFnZVBhcmFtKG9wdGlvbnMsIHsgcGFnZXMsIHBhZ2VQYXJhbXMgfSkge1xuICByZXR1cm4gcGFnZXMubGVuZ3RoID4gMCA/IG9wdGlvbnMuZ2V0UHJldmlvdXNQYWdlUGFyYW0/LihwYWdlc1swXSwgcGFnZXMsIHBhZ2VQYXJhbXNbMF0sIHBhZ2VQYXJhbXMpIDogdm9pZCAwO1xufVxuZnVuY3Rpb24gaGFzTmV4dFBhZ2Uob3B0aW9ucywgZGF0YSkge1xuICBpZiAoIWRhdGEpXG4gICAgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gZ2V0TmV4dFBhZ2VQYXJhbShvcHRpb25zLCBkYXRhKSAhPSBudWxsO1xufVxuZnVuY3Rpb24gaGFzUHJldmlvdXNQYWdlKG9wdGlvbnMsIGRhdGEpIHtcbiAgaWYgKCFkYXRhIHx8ICFvcHRpb25zLmdldFByZXZpb3VzUGFnZVBhcmFtKVxuICAgIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGdldFByZXZpb3VzUGFnZVBhcmFtKG9wdGlvbnMsIGRhdGEpICE9IG51bGw7XG59XG5leHBvcnQge1xuICBoYXNOZXh0UGFnZSxcbiAgaGFzUHJldmlvdXNQYWdlLFxuICBpbmZpbml0ZVF1ZXJ5QmVoYXZpb3Jcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmZpbml0ZVF1ZXJ5QmVoYXZpb3IuanMubWFwIiwiLy8gc3JjL3F1ZXJ5Q2xpZW50LnRzXG5pbXBvcnQge1xuICBmdW5jdGlvbmFsVXBkYXRlLFxuICBoYXNoS2V5LFxuICBoYXNoUXVlcnlLZXlCeU9wdGlvbnMsXG4gIG5vb3AsXG4gIHBhcnRpYWxNYXRjaEtleSxcbiAgcmVzb2x2ZVN0YWxlVGltZSxcbiAgc2tpcFRva2VuXG59IGZyb20gXCIuL3V0aWxzLmpzXCI7XG5pbXBvcnQgeyBRdWVyeUNhY2hlIH0gZnJvbSBcIi4vcXVlcnlDYWNoZS5qc1wiO1xuaW1wb3J0IHsgTXV0YXRpb25DYWNoZSB9IGZyb20gXCIuL211dGF0aW9uQ2FjaGUuanNcIjtcbmltcG9ydCB7IGZvY3VzTWFuYWdlciB9IGZyb20gXCIuL2ZvY3VzTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgb25saW5lTWFuYWdlciB9IGZyb20gXCIuL29ubGluZU1hbmFnZXIuanNcIjtcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tIFwiLi9ub3RpZnlNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBpbmZpbml0ZVF1ZXJ5QmVoYXZpb3IgfSBmcm9tIFwiLi9pbmZpbml0ZVF1ZXJ5QmVoYXZpb3IuanNcIjtcbnZhciBRdWVyeUNsaWVudCA9IGNsYXNzIHtcbiAgI3F1ZXJ5Q2FjaGU7XG4gICNtdXRhdGlvbkNhY2hlO1xuICAjZGVmYXVsdE9wdGlvbnM7XG4gICNxdWVyeURlZmF1bHRzO1xuICAjbXV0YXRpb25EZWZhdWx0cztcbiAgI21vdW50Q291bnQ7XG4gICN1bnN1YnNjcmliZUZvY3VzO1xuICAjdW5zdWJzY3JpYmVPbmxpbmU7XG4gIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgdGhpcy4jcXVlcnlDYWNoZSA9IGNvbmZpZy5xdWVyeUNhY2hlIHx8IG5ldyBRdWVyeUNhY2hlKCk7XG4gICAgdGhpcy4jbXV0YXRpb25DYWNoZSA9IGNvbmZpZy5tdXRhdGlvbkNhY2hlIHx8IG5ldyBNdXRhdGlvbkNhY2hlKCk7XG4gICAgdGhpcy4jZGVmYXVsdE9wdGlvbnMgPSBjb25maWcuZGVmYXVsdE9wdGlvbnMgfHwge307XG4gICAgdGhpcy4jcXVlcnlEZWZhdWx0cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gICAgdGhpcy4jbXV0YXRpb25EZWZhdWx0cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gICAgdGhpcy4jbW91bnRDb3VudCA9IDA7XG4gIH1cbiAgbW91bnQoKSB7XG4gICAgdGhpcy4jbW91bnRDb3VudCsrO1xuICAgIGlmICh0aGlzLiNtb3VudENvdW50ICE9PSAxKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuI3Vuc3Vic2NyaWJlRm9jdXMgPSBmb2N1c01hbmFnZXIuc3Vic2NyaWJlKGFzeW5jIChmb2N1c2VkKSA9PiB7XG4gICAgICBpZiAoZm9jdXNlZCkge1xuICAgICAgICBhd2FpdCB0aGlzLnJlc3VtZVBhdXNlZE11dGF0aW9ucygpO1xuICAgICAgICB0aGlzLiNxdWVyeUNhY2hlLm9uRm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLiN1bnN1YnNjcmliZU9ubGluZSA9IG9ubGluZU1hbmFnZXIuc3Vic2NyaWJlKGFzeW5jIChvbmxpbmUpID0+IHtcbiAgICAgIGlmIChvbmxpbmUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZXN1bWVQYXVzZWRNdXRhdGlvbnMoKTtcbiAgICAgICAgdGhpcy4jcXVlcnlDYWNoZS5vbk9ubGluZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHVubW91bnQoKSB7XG4gICAgdGhpcy4jbW91bnRDb3VudC0tO1xuICAgIGlmICh0aGlzLiNtb3VudENvdW50ICE9PSAwKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuI3Vuc3Vic2NyaWJlRm9jdXM/LigpO1xuICAgIHRoaXMuI3Vuc3Vic2NyaWJlRm9jdXMgPSB2b2lkIDA7XG4gICAgdGhpcy4jdW5zdWJzY3JpYmVPbmxpbmU/LigpO1xuICAgIHRoaXMuI3Vuc3Vic2NyaWJlT25saW5lID0gdm9pZCAwO1xuICB9XG4gIGlzRmV0Y2hpbmcoZmlsdGVycykge1xuICAgIHJldHVybiB0aGlzLiNxdWVyeUNhY2hlLmZpbmRBbGwoeyAuLi5maWx0ZXJzLCBmZXRjaFN0YXR1czogXCJmZXRjaGluZ1wiIH0pLmxlbmd0aDtcbiAgfVxuICBpc011dGF0aW5nKGZpbHRlcnMpIHtcbiAgICByZXR1cm4gdGhpcy4jbXV0YXRpb25DYWNoZS5maW5kQWxsKHsgLi4uZmlsdGVycywgc3RhdHVzOiBcInBlbmRpbmdcIiB9KS5sZW5ndGg7XG4gIH1cbiAgZ2V0UXVlcnlEYXRhKHF1ZXJ5S2V5KSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZGVmYXVsdFF1ZXJ5T3B0aW9ucyh7IHF1ZXJ5S2V5IH0pO1xuICAgIHJldHVybiB0aGlzLiNxdWVyeUNhY2hlLmdldChvcHRpb25zLnF1ZXJ5SGFzaCk/LnN0YXRlLmRhdGE7XG4gIH1cbiAgZW5zdXJlUXVlcnlEYXRhKG9wdGlvbnMpIHtcbiAgICBjb25zdCBkZWZhdWx0ZWRPcHRpb25zID0gdGhpcy5kZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpO1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy4jcXVlcnlDYWNoZS5idWlsZCh0aGlzLCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgICBjb25zdCBjYWNoZWREYXRhID0gcXVlcnkuc3RhdGUuZGF0YTtcbiAgICBpZiAoY2FjaGVkRGF0YSA9PT0gdm9pZCAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5mZXRjaFF1ZXJ5KG9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5yZXZhbGlkYXRlSWZTdGFsZSAmJiBxdWVyeS5pc1N0YWxlQnlUaW1lKHJlc29sdmVTdGFsZVRpbWUoZGVmYXVsdGVkT3B0aW9ucy5zdGFsZVRpbWUsIHF1ZXJ5KSkpIHtcbiAgICAgIHZvaWQgdGhpcy5wcmVmZXRjaFF1ZXJ5KGRlZmF1bHRlZE9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNhY2hlZERhdGEpO1xuICB9XG4gIGdldFF1ZXJpZXNEYXRhKGZpbHRlcnMpIHtcbiAgICByZXR1cm4gdGhpcy4jcXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLm1hcCgoeyBxdWVyeUtleSwgc3RhdGUgfSkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHN0YXRlLmRhdGE7XG4gICAgICByZXR1cm4gW3F1ZXJ5S2V5LCBkYXRhXTtcbiAgICB9KTtcbiAgfVxuICBzZXRRdWVyeURhdGEocXVlcnlLZXksIHVwZGF0ZXIsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBkZWZhdWx0ZWRPcHRpb25zID0gdGhpcy5kZWZhdWx0UXVlcnlPcHRpb25zKHsgcXVlcnlLZXkgfSk7XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLiNxdWVyeUNhY2hlLmdldChcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMucXVlcnlIYXNoXG4gICAgKTtcbiAgICBjb25zdCBwcmV2RGF0YSA9IHF1ZXJ5Py5zdGF0ZS5kYXRhO1xuICAgIGNvbnN0IGRhdGEgPSBmdW5jdGlvbmFsVXBkYXRlKHVwZGF0ZXIsIHByZXZEYXRhKTtcbiAgICBpZiAoZGF0YSA9PT0gdm9pZCAwKSB7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy4jcXVlcnlDYWNoZS5idWlsZCh0aGlzLCBkZWZhdWx0ZWRPcHRpb25zKS5zZXREYXRhKGRhdGEsIHsgLi4ub3B0aW9ucywgbWFudWFsOiB0cnVlIH0pO1xuICB9XG4gIHNldFF1ZXJpZXNEYXRhKGZpbHRlcnMsIHVwZGF0ZXIsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbm90aWZ5TWFuYWdlci5iYXRjaChcbiAgICAgICgpID0+IHRoaXMuI3F1ZXJ5Q2FjaGUuZmluZEFsbChmaWx0ZXJzKS5tYXAoKHsgcXVlcnlLZXkgfSkgPT4gW1xuICAgICAgICBxdWVyeUtleSxcbiAgICAgICAgdGhpcy5zZXRRdWVyeURhdGEocXVlcnlLZXksIHVwZGF0ZXIsIG9wdGlvbnMpXG4gICAgICBdKVxuICAgICk7XG4gIH1cbiAgZ2V0UXVlcnlTdGF0ZShxdWVyeUtleSkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmRlZmF1bHRRdWVyeU9wdGlvbnMoeyBxdWVyeUtleSB9KTtcbiAgICByZXR1cm4gdGhpcy4jcXVlcnlDYWNoZS5nZXQoXG4gICAgICBvcHRpb25zLnF1ZXJ5SGFzaFxuICAgICk/LnN0YXRlO1xuICB9XG4gIHJlbW92ZVF1ZXJpZXMoZmlsdGVycykge1xuICAgIGNvbnN0IHF1ZXJ5Q2FjaGUgPSB0aGlzLiNxdWVyeUNhY2hlO1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goKCkgPT4ge1xuICAgICAgcXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLmZvckVhY2goKHF1ZXJ5KSA9PiB7XG4gICAgICAgIHF1ZXJ5Q2FjaGUucmVtb3ZlKHF1ZXJ5KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIHJlc2V0UXVlcmllcyhmaWx0ZXJzLCBvcHRpb25zKSB7XG4gICAgY29uc3QgcXVlcnlDYWNoZSA9IHRoaXMuI3F1ZXJ5Q2FjaGU7XG4gICAgY29uc3QgcmVmZXRjaEZpbHRlcnMgPSB7XG4gICAgICB0eXBlOiBcImFjdGl2ZVwiLFxuICAgICAgLi4uZmlsdGVyc1xuICAgIH07XG4gICAgcmV0dXJuIG5vdGlmeU1hbmFnZXIuYmF0Y2goKCkgPT4ge1xuICAgICAgcXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLmZvckVhY2goKHF1ZXJ5KSA9PiB7XG4gICAgICAgIHF1ZXJ5LnJlc2V0KCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0aGlzLnJlZmV0Y2hRdWVyaWVzKHJlZmV0Y2hGaWx0ZXJzLCBvcHRpb25zKTtcbiAgICB9KTtcbiAgfVxuICBjYW5jZWxRdWVyaWVzKGZpbHRlcnMsIGNhbmNlbE9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IGRlZmF1bHRlZENhbmNlbE9wdGlvbnMgPSB7IHJldmVydDogdHJ1ZSwgLi4uY2FuY2VsT3B0aW9ucyB9O1xuICAgIGNvbnN0IHByb21pc2VzID0gbm90aWZ5TWFuYWdlci5iYXRjaChcbiAgICAgICgpID0+IHRoaXMuI3F1ZXJ5Q2FjaGUuZmluZEFsbChmaWx0ZXJzKS5tYXAoKHF1ZXJ5KSA9PiBxdWVyeS5jYW5jZWwoZGVmYXVsdGVkQ2FuY2VsT3B0aW9ucykpXG4gICAgKTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4obm9vcCkuY2F0Y2gobm9vcCk7XG4gIH1cbiAgaW52YWxpZGF0ZVF1ZXJpZXMoZmlsdGVycywgb3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIG5vdGlmeU1hbmFnZXIuYmF0Y2goKCkgPT4ge1xuICAgICAgdGhpcy4jcXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLmZvckVhY2goKHF1ZXJ5KSA9PiB7XG4gICAgICAgIHF1ZXJ5LmludmFsaWRhdGUoKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGZpbHRlcnM/LnJlZmV0Y2hUeXBlID09PSBcIm5vbmVcIikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICB9XG4gICAgICBjb25zdCByZWZldGNoRmlsdGVycyA9IHtcbiAgICAgICAgLi4uZmlsdGVycyxcbiAgICAgICAgdHlwZTogZmlsdGVycz8ucmVmZXRjaFR5cGUgPz8gZmlsdGVycz8udHlwZSA/PyBcImFjdGl2ZVwiXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHRoaXMucmVmZXRjaFF1ZXJpZXMocmVmZXRjaEZpbHRlcnMsIG9wdGlvbnMpO1xuICAgIH0pO1xuICB9XG4gIHJlZmV0Y2hRdWVyaWVzKGZpbHRlcnMsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IGZldGNoT3B0aW9ucyA9IHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBjYW5jZWxSZWZldGNoOiBvcHRpb25zLmNhbmNlbFJlZmV0Y2ggPz8gdHJ1ZVxuICAgIH07XG4gICAgY29uc3QgcHJvbWlzZXMgPSBub3RpZnlNYW5hZ2VyLmJhdGNoKFxuICAgICAgKCkgPT4gdGhpcy4jcXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLmZpbHRlcigocXVlcnkpID0+ICFxdWVyeS5pc0Rpc2FibGVkKCkpLm1hcCgocXVlcnkpID0+IHtcbiAgICAgICAgbGV0IHByb21pc2UgPSBxdWVyeS5mZXRjaCh2b2lkIDAsIGZldGNoT3B0aW9ucyk7XG4gICAgICAgIGlmICghZmV0Y2hPcHRpb25zLnRocm93T25FcnJvcikge1xuICAgICAgICAgIHByb21pc2UgPSBwcm9taXNlLmNhdGNoKG5vb3ApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBxdWVyeS5zdGF0ZS5mZXRjaFN0YXR1cyA9PT0gXCJwYXVzZWRcIiA/IFByb21pc2UucmVzb2x2ZSgpIDogcHJvbWlzZTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4obm9vcCk7XG4gIH1cbiAgZmV0Y2hRdWVyeShvcHRpb25zKSB7XG4gICAgY29uc3QgZGVmYXVsdGVkT3B0aW9ucyA9IHRoaXMuZGVmYXVsdFF1ZXJ5T3B0aW9ucyhvcHRpb25zKTtcbiAgICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5yZXRyeSA9PT0gdm9pZCAwKSB7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLnJldHJ5ID0gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy4jcXVlcnlDYWNoZS5idWlsZCh0aGlzLCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgICByZXR1cm4gcXVlcnkuaXNTdGFsZUJ5VGltZShcbiAgICAgIHJlc29sdmVTdGFsZVRpbWUoZGVmYXVsdGVkT3B0aW9ucy5zdGFsZVRpbWUsIHF1ZXJ5KVxuICAgICkgPyBxdWVyeS5mZXRjaChkZWZhdWx0ZWRPcHRpb25zKSA6IFByb21pc2UucmVzb2x2ZShxdWVyeS5zdGF0ZS5kYXRhKTtcbiAgfVxuICBwcmVmZXRjaFF1ZXJ5KG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5mZXRjaFF1ZXJ5KG9wdGlvbnMpLnRoZW4obm9vcCkuY2F0Y2gobm9vcCk7XG4gIH1cbiAgZmV0Y2hJbmZpbml0ZVF1ZXJ5KG9wdGlvbnMpIHtcbiAgICBvcHRpb25zLmJlaGF2aW9yID0gaW5maW5pdGVRdWVyeUJlaGF2aW9yKG9wdGlvbnMucGFnZXMpO1xuICAgIHJldHVybiB0aGlzLmZldGNoUXVlcnkob3B0aW9ucyk7XG4gIH1cbiAgcHJlZmV0Y2hJbmZpbml0ZVF1ZXJ5KG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5mZXRjaEluZmluaXRlUXVlcnkob3B0aW9ucykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfVxuICBlbnN1cmVJbmZpbml0ZVF1ZXJ5RGF0YShvcHRpb25zKSB7XG4gICAgb3B0aW9ucy5iZWhhdmlvciA9IGluZmluaXRlUXVlcnlCZWhhdmlvcihvcHRpb25zLnBhZ2VzKTtcbiAgICByZXR1cm4gdGhpcy5lbnN1cmVRdWVyeURhdGEob3B0aW9ucyk7XG4gIH1cbiAgcmVzdW1lUGF1c2VkTXV0YXRpb25zKCkge1xuICAgIGlmIChvbmxpbmVNYW5hZ2VyLmlzT25saW5lKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLiNtdXRhdGlvbkNhY2hlLnJlc3VtZVBhdXNlZE11dGF0aW9ucygpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cbiAgZ2V0UXVlcnlDYWNoZSgpIHtcbiAgICByZXR1cm4gdGhpcy4jcXVlcnlDYWNoZTtcbiAgfVxuICBnZXRNdXRhdGlvbkNhY2hlKCkge1xuICAgIHJldHVybiB0aGlzLiNtdXRhdGlvbkNhY2hlO1xuICB9XG4gIGdldERlZmF1bHRPcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLiNkZWZhdWx0T3B0aW9ucztcbiAgfVxuICBzZXREZWZhdWx0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy4jZGVmYXVsdE9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG4gIHNldFF1ZXJ5RGVmYXVsdHMocXVlcnlLZXksIG9wdGlvbnMpIHtcbiAgICB0aGlzLiNxdWVyeURlZmF1bHRzLnNldChoYXNoS2V5KHF1ZXJ5S2V5KSwge1xuICAgICAgcXVlcnlLZXksXG4gICAgICBkZWZhdWx0T3B0aW9uczogb3B0aW9uc1xuICAgIH0pO1xuICB9XG4gIGdldFF1ZXJ5RGVmYXVsdHMocXVlcnlLZXkpIHtcbiAgICBjb25zdCBkZWZhdWx0cyA9IFsuLi50aGlzLiNxdWVyeURlZmF1bHRzLnZhbHVlcygpXTtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBkZWZhdWx0cy5mb3JFYWNoKChxdWVyeURlZmF1bHQpID0+IHtcbiAgICAgIGlmIChwYXJ0aWFsTWF0Y2hLZXkocXVlcnlLZXksIHF1ZXJ5RGVmYXVsdC5xdWVyeUtleSkpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihyZXN1bHQsIHF1ZXJ5RGVmYXVsdC5kZWZhdWx0T3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBzZXRNdXRhdGlvbkRlZmF1bHRzKG11dGF0aW9uS2V5LCBvcHRpb25zKSB7XG4gICAgdGhpcy4jbXV0YXRpb25EZWZhdWx0cy5zZXQoaGFzaEtleShtdXRhdGlvbktleSksIHtcbiAgICAgIG11dGF0aW9uS2V5LFxuICAgICAgZGVmYXVsdE9wdGlvbnM6IG9wdGlvbnNcbiAgICB9KTtcbiAgfVxuICBnZXRNdXRhdGlvbkRlZmF1bHRzKG11dGF0aW9uS2V5KSB7XG4gICAgY29uc3QgZGVmYXVsdHMgPSBbLi4udGhpcy4jbXV0YXRpb25EZWZhdWx0cy52YWx1ZXMoKV07XG4gICAgbGV0IHJlc3VsdCA9IHt9O1xuICAgIGRlZmF1bHRzLmZvckVhY2goKHF1ZXJ5RGVmYXVsdCkgPT4ge1xuICAgICAgaWYgKHBhcnRpYWxNYXRjaEtleShtdXRhdGlvbktleSwgcXVlcnlEZWZhdWx0Lm11dGF0aW9uS2V5KSkge1xuICAgICAgICByZXN1bHQgPSB7IC4uLnJlc3VsdCwgLi4ucXVlcnlEZWZhdWx0LmRlZmF1bHRPcHRpb25zIH07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBkZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5fZGVmYXVsdGVkKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG4gICAgY29uc3QgZGVmYXVsdGVkT3B0aW9ucyA9IHtcbiAgICAgIC4uLnRoaXMuI2RlZmF1bHRPcHRpb25zLnF1ZXJpZXMsXG4gICAgICAuLi50aGlzLmdldFF1ZXJ5RGVmYXVsdHMob3B0aW9ucy5xdWVyeUtleSksXG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgX2RlZmF1bHRlZDogdHJ1ZVxuICAgIH07XG4gICAgaWYgKCFkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5SGFzaCkge1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5xdWVyeUhhc2ggPSBoYXNoUXVlcnlLZXlCeU9wdGlvbnMoXG4gICAgICAgIGRlZmF1bHRlZE9wdGlvbnMucXVlcnlLZXksXG4gICAgICAgIGRlZmF1bHRlZE9wdGlvbnNcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChkZWZhdWx0ZWRPcHRpb25zLnJlZmV0Y2hPblJlY29ubmVjdCA9PT0gdm9pZCAwKSB7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLnJlZmV0Y2hPblJlY29ubmVjdCA9IGRlZmF1bHRlZE9wdGlvbnMubmV0d29ya01vZGUgIT09IFwiYWx3YXlzXCI7XG4gICAgfVxuICAgIGlmIChkZWZhdWx0ZWRPcHRpb25zLnRocm93T25FcnJvciA9PT0gdm9pZCAwKSB7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLnRocm93T25FcnJvciA9ICEhZGVmYXVsdGVkT3B0aW9ucy5zdXNwZW5zZTtcbiAgICB9XG4gICAgaWYgKCFkZWZhdWx0ZWRPcHRpb25zLm5ldHdvcmtNb2RlICYmIGRlZmF1bHRlZE9wdGlvbnMucGVyc2lzdGVyKSB7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLm5ldHdvcmtNb2RlID0gXCJvZmZsaW5lRmlyc3RcIjtcbiAgICB9XG4gICAgaWYgKGRlZmF1bHRlZE9wdGlvbnMucXVlcnlGbiA9PT0gc2tpcFRva2VuKSB7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLmVuYWJsZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGRlZmF1bHRlZE9wdGlvbnM7XG4gIH1cbiAgZGVmYXVsdE11dGF0aW9uT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnM/Ll9kZWZhdWx0ZWQpIHtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy4jZGVmYXVsdE9wdGlvbnMubXV0YXRpb25zLFxuICAgICAgLi4ub3B0aW9ucz8ubXV0YXRpb25LZXkgJiYgdGhpcy5nZXRNdXRhdGlvbkRlZmF1bHRzKG9wdGlvbnMubXV0YXRpb25LZXkpLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIF9kZWZhdWx0ZWQ6IHRydWVcbiAgICB9O1xuICB9XG4gIGNsZWFyKCkge1xuICAgIHRoaXMuI3F1ZXJ5Q2FjaGUuY2xlYXIoKTtcbiAgICB0aGlzLiNtdXRhdGlvbkNhY2hlLmNsZWFyKCk7XG4gIH1cbn07XG5leHBvcnQge1xuICBRdWVyeUNsaWVudFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXF1ZXJ5Q2xpZW50LmpzLm1hcCIsIi8vIHNyYy9xdWVyeU9ic2VydmVyLnRzXG5pbXBvcnQgeyBmb2N1c01hbmFnZXIgfSBmcm9tIFwiLi9mb2N1c01hbmFnZXIuanNcIjtcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tIFwiLi9ub3RpZnlNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBmZXRjaFN0YXRlIH0gZnJvbSBcIi4vcXVlcnkuanNcIjtcbmltcG9ydCB7IFN1YnNjcmliYWJsZSB9IGZyb20gXCIuL3N1YnNjcmliYWJsZS5qc1wiO1xuaW1wb3J0IHsgcGVuZGluZ1RoZW5hYmxlIH0gZnJvbSBcIi4vdGhlbmFibGUuanNcIjtcbmltcG9ydCB7XG4gIGlzU2VydmVyLFxuICBpc1ZhbGlkVGltZW91dCxcbiAgbm9vcCxcbiAgcmVwbGFjZURhdGEsXG4gIHJlc29sdmVFbmFibGVkLFxuICByZXNvbHZlU3RhbGVUaW1lLFxuICBzaGFsbG93RXF1YWxPYmplY3RzLFxuICB0aW1lVW50aWxTdGFsZVxufSBmcm9tIFwiLi91dGlscy5qc1wiO1xudmFyIFF1ZXJ5T2JzZXJ2ZXIgPSBjbGFzcyBleHRlbmRzIFN1YnNjcmliYWJsZSB7XG4gIGNvbnN0cnVjdG9yKGNsaWVudCwgb3B0aW9ucykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLiNjbGllbnQgPSBjbGllbnQ7XG4gICAgdGhpcy4jc2VsZWN0RXJyb3IgPSBudWxsO1xuICAgIHRoaXMuI2N1cnJlbnRUaGVuYWJsZSA9IHBlbmRpbmdUaGVuYWJsZSgpO1xuICAgIGlmICghdGhpcy5vcHRpb25zLmV4cGVyaW1lbnRhbF9wcmVmZXRjaEluUmVuZGVyKSB7XG4gICAgICB0aGlzLiNjdXJyZW50VGhlbmFibGUucmVqZWN0KFxuICAgICAgICBuZXcgRXJyb3IoXCJleHBlcmltZW50YWxfcHJlZmV0Y2hJblJlbmRlciBmZWF0dXJlIGZsYWcgaXMgbm90IGVuYWJsZWRcIilcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuYmluZE1ldGhvZHMoKTtcbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cbiAgI2NsaWVudDtcbiAgI2N1cnJlbnRRdWVyeSA9IHZvaWQgMDtcbiAgI2N1cnJlbnRRdWVyeUluaXRpYWxTdGF0ZSA9IHZvaWQgMDtcbiAgI2N1cnJlbnRSZXN1bHQgPSB2b2lkIDA7XG4gICNjdXJyZW50UmVzdWx0U3RhdGU7XG4gICNjdXJyZW50UmVzdWx0T3B0aW9ucztcbiAgI2N1cnJlbnRUaGVuYWJsZTtcbiAgI3NlbGVjdEVycm9yO1xuICAjc2VsZWN0Rm47XG4gICNzZWxlY3RSZXN1bHQ7XG4gIC8vIFRoaXMgcHJvcGVydHkga2VlcHMgdHJhY2sgb2YgdGhlIGxhc3QgcXVlcnkgd2l0aCBkZWZpbmVkIGRhdGEuXG4gIC8vIEl0IHdpbGwgYmUgdXNlZCB0byBwYXNzIHRoZSBwcmV2aW91cyBkYXRhIGFuZCBxdWVyeSB0byB0aGUgcGxhY2Vob2xkZXIgZnVuY3Rpb24gYmV0d2VlbiByZW5kZXJzLlxuICAjbGFzdFF1ZXJ5V2l0aERlZmluZWREYXRhO1xuICAjc3RhbGVUaW1lb3V0SWQ7XG4gICNyZWZldGNoSW50ZXJ2YWxJZDtcbiAgI2N1cnJlbnRSZWZldGNoSW50ZXJ2YWw7XG4gICN0cmFja2VkUHJvcHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuICBiaW5kTWV0aG9kcygpIHtcbiAgICB0aGlzLnJlZmV0Y2ggPSB0aGlzLnJlZmV0Y2guYmluZCh0aGlzKTtcbiAgfVxuICBvblN1YnNjcmliZSgpIHtcbiAgICBpZiAodGhpcy5saXN0ZW5lcnMuc2l6ZSA9PT0gMSkge1xuICAgICAgdGhpcy4jY3VycmVudFF1ZXJ5LmFkZE9ic2VydmVyKHRoaXMpO1xuICAgICAgaWYgKHNob3VsZEZldGNoT25Nb3VudCh0aGlzLiNjdXJyZW50UXVlcnksIHRoaXMub3B0aW9ucykpIHtcbiAgICAgICAgdGhpcy4jZXhlY3V0ZUZldGNoKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnVwZGF0ZVJlc3VsdCgpO1xuICAgICAgfVxuICAgICAgdGhpcy4jdXBkYXRlVGltZXJzKCk7XG4gICAgfVxuICB9XG4gIG9uVW5zdWJzY3JpYmUoKSB7XG4gICAgaWYgKCF0aGlzLmhhc0xpc3RlbmVycygpKSB7XG4gICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB9XG4gIH1cbiAgc2hvdWxkRmV0Y2hPblJlY29ubmVjdCgpIHtcbiAgICByZXR1cm4gc2hvdWxkRmV0Y2hPbihcbiAgICAgIHRoaXMuI2N1cnJlbnRRdWVyeSxcbiAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgIHRoaXMub3B0aW9ucy5yZWZldGNoT25SZWNvbm5lY3RcbiAgICApO1xuICB9XG4gIHNob3VsZEZldGNoT25XaW5kb3dGb2N1cygpIHtcbiAgICByZXR1cm4gc2hvdWxkRmV0Y2hPbihcbiAgICAgIHRoaXMuI2N1cnJlbnRRdWVyeSxcbiAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgIHRoaXMub3B0aW9ucy5yZWZldGNoT25XaW5kb3dGb2N1c1xuICAgICk7XG4gIH1cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmxpc3RlbmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG4gICAgdGhpcy4jY2xlYXJTdGFsZVRpbWVvdXQoKTtcbiAgICB0aGlzLiNjbGVhclJlZmV0Y2hJbnRlcnZhbCgpO1xuICAgIHRoaXMuI2N1cnJlbnRRdWVyeS5yZW1vdmVPYnNlcnZlcih0aGlzKTtcbiAgfVxuICBzZXRPcHRpb25zKG9wdGlvbnMsIG5vdGlmeU9wdGlvbnMpIHtcbiAgICBjb25zdCBwcmV2T3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICBjb25zdCBwcmV2UXVlcnkgPSB0aGlzLiNjdXJyZW50UXVlcnk7XG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy4jY2xpZW50LmRlZmF1bHRRdWVyeU9wdGlvbnMob3B0aW9ucyk7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVkICE9PSB2b2lkIDAgJiYgdHlwZW9mIHRoaXMub3B0aW9ucy5lbmFibGVkICE9PSBcImJvb2xlYW5cIiAmJiB0eXBlb2YgdGhpcy5vcHRpb25zLmVuYWJsZWQgIT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgcmVzb2x2ZUVuYWJsZWQodGhpcy5vcHRpb25zLmVuYWJsZWQsIHRoaXMuI2N1cnJlbnRRdWVyeSkgIT09IFwiYm9vbGVhblwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiRXhwZWN0ZWQgZW5hYmxlZCB0byBiZSBhIGJvb2xlYW4gb3IgYSBjYWxsYmFjayB0aGF0IHJldHVybnMgYSBib29sZWFuXCJcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuI3VwZGF0ZVF1ZXJ5KCk7XG4gICAgdGhpcy4jY3VycmVudFF1ZXJ5LnNldE9wdGlvbnModGhpcy5vcHRpb25zKTtcbiAgICBpZiAocHJldk9wdGlvbnMuX2RlZmF1bHRlZCAmJiAhc2hhbGxvd0VxdWFsT2JqZWN0cyh0aGlzLm9wdGlvbnMsIHByZXZPcHRpb25zKSkge1xuICAgICAgdGhpcy4jY2xpZW50LmdldFF1ZXJ5Q2FjaGUoKS5ub3RpZnkoe1xuICAgICAgICB0eXBlOiBcIm9ic2VydmVyT3B0aW9uc1VwZGF0ZWRcIixcbiAgICAgICAgcXVlcnk6IHRoaXMuI2N1cnJlbnRRdWVyeSxcbiAgICAgICAgb2JzZXJ2ZXI6IHRoaXNcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBtb3VudGVkID0gdGhpcy5oYXNMaXN0ZW5lcnMoKTtcbiAgICBpZiAobW91bnRlZCAmJiBzaG91bGRGZXRjaE9wdGlvbmFsbHkoXG4gICAgICB0aGlzLiNjdXJyZW50UXVlcnksXG4gICAgICBwcmV2UXVlcnksXG4gICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICBwcmV2T3B0aW9uc1xuICAgICkpIHtcbiAgICAgIHRoaXMuI2V4ZWN1dGVGZXRjaCgpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVJlc3VsdChub3RpZnlPcHRpb25zKTtcbiAgICBpZiAobW91bnRlZCAmJiAodGhpcy4jY3VycmVudFF1ZXJ5ICE9PSBwcmV2UXVlcnkgfHwgcmVzb2x2ZUVuYWJsZWQodGhpcy5vcHRpb25zLmVuYWJsZWQsIHRoaXMuI2N1cnJlbnRRdWVyeSkgIT09IHJlc29sdmVFbmFibGVkKHByZXZPcHRpb25zLmVuYWJsZWQsIHRoaXMuI2N1cnJlbnRRdWVyeSkgfHwgcmVzb2x2ZVN0YWxlVGltZSh0aGlzLm9wdGlvbnMuc3RhbGVUaW1lLCB0aGlzLiNjdXJyZW50UXVlcnkpICE9PSByZXNvbHZlU3RhbGVUaW1lKHByZXZPcHRpb25zLnN0YWxlVGltZSwgdGhpcy4jY3VycmVudFF1ZXJ5KSkpIHtcbiAgICAgIHRoaXMuI3VwZGF0ZVN0YWxlVGltZW91dCgpO1xuICAgIH1cbiAgICBjb25zdCBuZXh0UmVmZXRjaEludGVydmFsID0gdGhpcy4jY29tcHV0ZVJlZmV0Y2hJbnRlcnZhbCgpO1xuICAgIGlmIChtb3VudGVkICYmICh0aGlzLiNjdXJyZW50UXVlcnkgIT09IHByZXZRdWVyeSB8fCByZXNvbHZlRW5hYmxlZCh0aGlzLm9wdGlvbnMuZW5hYmxlZCwgdGhpcy4jY3VycmVudFF1ZXJ5KSAhPT0gcmVzb2x2ZUVuYWJsZWQocHJldk9wdGlvbnMuZW5hYmxlZCwgdGhpcy4jY3VycmVudFF1ZXJ5KSB8fCBuZXh0UmVmZXRjaEludGVydmFsICE9PSB0aGlzLiNjdXJyZW50UmVmZXRjaEludGVydmFsKSkge1xuICAgICAgdGhpcy4jdXBkYXRlUmVmZXRjaEludGVydmFsKG5leHRSZWZldGNoSW50ZXJ2YWwpO1xuICAgIH1cbiAgfVxuICBnZXRPcHRpbWlzdGljUmVzdWx0KG9wdGlvbnMpIHtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuI2NsaWVudC5nZXRRdWVyeUNhY2hlKCkuYnVpbGQodGhpcy4jY2xpZW50LCBvcHRpb25zKTtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmNyZWF0ZVJlc3VsdChxdWVyeSwgb3B0aW9ucyk7XG4gICAgaWYgKHNob3VsZEFzc2lnbk9ic2VydmVyQ3VycmVudFByb3BlcnRpZXModGhpcywgcmVzdWx0KSkge1xuICAgICAgdGhpcy4jY3VycmVudFJlc3VsdCA9IHJlc3VsdDtcbiAgICAgIHRoaXMuI2N1cnJlbnRSZXN1bHRPcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgdGhpcy4jY3VycmVudFJlc3VsdFN0YXRlID0gdGhpcy4jY3VycmVudFF1ZXJ5LnN0YXRlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGdldEN1cnJlbnRSZXN1bHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2N1cnJlbnRSZXN1bHQ7XG4gIH1cbiAgdHJhY2tSZXN1bHQocmVzdWx0LCBvblByb3BUcmFja2VkKSB7XG4gICAgY29uc3QgdHJhY2tlZFJlc3VsdCA9IHt9O1xuICAgIE9iamVjdC5rZXlzKHJlc3VsdCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodHJhY2tlZFJlc3VsdCwga2V5LCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICAgIHRoaXMudHJhY2tQcm9wKGtleSk7XG4gICAgICAgICAgb25Qcm9wVHJhY2tlZD8uKGtleSk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdFtrZXldO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gdHJhY2tlZFJlc3VsdDtcbiAgfVxuICB0cmFja1Byb3Aoa2V5KSB7XG4gICAgdGhpcy4jdHJhY2tlZFByb3BzLmFkZChrZXkpO1xuICB9XG4gIGdldEN1cnJlbnRRdWVyeSgpIHtcbiAgICByZXR1cm4gdGhpcy4jY3VycmVudFF1ZXJ5O1xuICB9XG4gIHJlZmV0Y2goeyAuLi5vcHRpb25zIH0gPSB7fSkge1xuICAgIHJldHVybiB0aGlzLmZldGNoKHtcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9KTtcbiAgfVxuICBmZXRjaE9wdGltaXN0aWMob3B0aW9ucykge1xuICAgIGNvbnN0IGRlZmF1bHRlZE9wdGlvbnMgPSB0aGlzLiNjbGllbnQuZGVmYXVsdFF1ZXJ5T3B0aW9ucyhvcHRpb25zKTtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuI2NsaWVudC5nZXRRdWVyeUNhY2hlKCkuYnVpbGQodGhpcy4jY2xpZW50LCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgICByZXR1cm4gcXVlcnkuZmV0Y2goKS50aGVuKCgpID0+IHRoaXMuY3JlYXRlUmVzdWx0KHF1ZXJ5LCBkZWZhdWx0ZWRPcHRpb25zKSk7XG4gIH1cbiAgZmV0Y2goZmV0Y2hPcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMuI2V4ZWN1dGVGZXRjaCh7XG4gICAgICAuLi5mZXRjaE9wdGlvbnMsXG4gICAgICBjYW5jZWxSZWZldGNoOiBmZXRjaE9wdGlvbnMuY2FuY2VsUmVmZXRjaCA/PyB0cnVlXG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVJlc3VsdCgpO1xuICAgICAgcmV0dXJuIHRoaXMuI2N1cnJlbnRSZXN1bHQ7XG4gICAgfSk7XG4gIH1cbiAgI2V4ZWN1dGVGZXRjaChmZXRjaE9wdGlvbnMpIHtcbiAgICB0aGlzLiN1cGRhdGVRdWVyeSgpO1xuICAgIGxldCBwcm9taXNlID0gdGhpcy4jY3VycmVudFF1ZXJ5LmZldGNoKFxuICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgZmV0Y2hPcHRpb25zXG4gICAgKTtcbiAgICBpZiAoIWZldGNoT3B0aW9ucz8udGhyb3dPbkVycm9yKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS5jYXRjaChub29wKTtcbiAgICB9XG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cbiAgI3VwZGF0ZVN0YWxlVGltZW91dCgpIHtcbiAgICB0aGlzLiNjbGVhclN0YWxlVGltZW91dCgpO1xuICAgIGNvbnN0IHN0YWxlVGltZSA9IHJlc29sdmVTdGFsZVRpbWUoXG4gICAgICB0aGlzLm9wdGlvbnMuc3RhbGVUaW1lLFxuICAgICAgdGhpcy4jY3VycmVudFF1ZXJ5XG4gICAgKTtcbiAgICBpZiAoaXNTZXJ2ZXIgfHwgdGhpcy4jY3VycmVudFJlc3VsdC5pc1N0YWxlIHx8ICFpc1ZhbGlkVGltZW91dChzdGFsZVRpbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRpbWUgPSB0aW1lVW50aWxTdGFsZSh0aGlzLiNjdXJyZW50UmVzdWx0LmRhdGFVcGRhdGVkQXQsIHN0YWxlVGltZSk7XG4gICAgY29uc3QgdGltZW91dCA9IHRpbWUgKyAxO1xuICAgIHRoaXMuI3N0YWxlVGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuI2N1cnJlbnRSZXN1bHQuaXNTdGFsZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZVJlc3VsdCgpO1xuICAgICAgfVxuICAgIH0sIHRpbWVvdXQpO1xuICB9XG4gICNjb21wdXRlUmVmZXRjaEludGVydmFsKCkge1xuICAgIHJldHVybiAodHlwZW9mIHRoaXMub3B0aW9ucy5yZWZldGNoSW50ZXJ2YWwgPT09IFwiZnVuY3Rpb25cIiA/IHRoaXMub3B0aW9ucy5yZWZldGNoSW50ZXJ2YWwodGhpcy4jY3VycmVudFF1ZXJ5KSA6IHRoaXMub3B0aW9ucy5yZWZldGNoSW50ZXJ2YWwpID8/IGZhbHNlO1xuICB9XG4gICN1cGRhdGVSZWZldGNoSW50ZXJ2YWwobmV4dEludGVydmFsKSB7XG4gICAgdGhpcy4jY2xlYXJSZWZldGNoSW50ZXJ2YWwoKTtcbiAgICB0aGlzLiNjdXJyZW50UmVmZXRjaEludGVydmFsID0gbmV4dEludGVydmFsO1xuICAgIGlmIChpc1NlcnZlciB8fCByZXNvbHZlRW5hYmxlZCh0aGlzLm9wdGlvbnMuZW5hYmxlZCwgdGhpcy4jY3VycmVudFF1ZXJ5KSA9PT0gZmFsc2UgfHwgIWlzVmFsaWRUaW1lb3V0KHRoaXMuI2N1cnJlbnRSZWZldGNoSW50ZXJ2YWwpIHx8IHRoaXMuI2N1cnJlbnRSZWZldGNoSW50ZXJ2YWwgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy4jcmVmZXRjaEludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLnJlZmV0Y2hJbnRlcnZhbEluQmFja2dyb3VuZCB8fCBmb2N1c01hbmFnZXIuaXNGb2N1c2VkKCkpIHtcbiAgICAgICAgdGhpcy4jZXhlY3V0ZUZldGNoKCk7XG4gICAgICB9XG4gICAgfSwgdGhpcy4jY3VycmVudFJlZmV0Y2hJbnRlcnZhbCk7XG4gIH1cbiAgI3VwZGF0ZVRpbWVycygpIHtcbiAgICB0aGlzLiN1cGRhdGVTdGFsZVRpbWVvdXQoKTtcbiAgICB0aGlzLiN1cGRhdGVSZWZldGNoSW50ZXJ2YWwodGhpcy4jY29tcHV0ZVJlZmV0Y2hJbnRlcnZhbCgpKTtcbiAgfVxuICAjY2xlYXJTdGFsZVRpbWVvdXQoKSB7XG4gICAgaWYgKHRoaXMuI3N0YWxlVGltZW91dElkKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy4jc3RhbGVUaW1lb3V0SWQpO1xuICAgICAgdGhpcy4jc3RhbGVUaW1lb3V0SWQgPSB2b2lkIDA7XG4gICAgfVxuICB9XG4gICNjbGVhclJlZmV0Y2hJbnRlcnZhbCgpIHtcbiAgICBpZiAodGhpcy4jcmVmZXRjaEludGVydmFsSWQpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy4jcmVmZXRjaEludGVydmFsSWQpO1xuICAgICAgdGhpcy4jcmVmZXRjaEludGVydmFsSWQgPSB2b2lkIDA7XG4gICAgfVxuICB9XG4gIGNyZWF0ZVJlc3VsdChxdWVyeSwgb3B0aW9ucykge1xuICAgIGNvbnN0IHByZXZRdWVyeSA9IHRoaXMuI2N1cnJlbnRRdWVyeTtcbiAgICBjb25zdCBwcmV2T3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICBjb25zdCBwcmV2UmVzdWx0ID0gdGhpcy4jY3VycmVudFJlc3VsdDtcbiAgICBjb25zdCBwcmV2UmVzdWx0U3RhdGUgPSB0aGlzLiNjdXJyZW50UmVzdWx0U3RhdGU7XG4gICAgY29uc3QgcHJldlJlc3VsdE9wdGlvbnMgPSB0aGlzLiNjdXJyZW50UmVzdWx0T3B0aW9ucztcbiAgICBjb25zdCBxdWVyeUNoYW5nZSA9IHF1ZXJ5ICE9PSBwcmV2UXVlcnk7XG4gICAgY29uc3QgcXVlcnlJbml0aWFsU3RhdGUgPSBxdWVyeUNoYW5nZSA/IHF1ZXJ5LnN0YXRlIDogdGhpcy4jY3VycmVudFF1ZXJ5SW5pdGlhbFN0YXRlO1xuICAgIGNvbnN0IHsgc3RhdGUgfSA9IHF1ZXJ5O1xuICAgIGxldCBuZXdTdGF0ZSA9IHsgLi4uc3RhdGUgfTtcbiAgICBsZXQgaXNQbGFjZWhvbGRlckRhdGEgPSBmYWxzZTtcbiAgICBsZXQgZGF0YTtcbiAgICBpZiAob3B0aW9ucy5fb3B0aW1pc3RpY1Jlc3VsdHMpIHtcbiAgICAgIGNvbnN0IG1vdW50ZWQgPSB0aGlzLmhhc0xpc3RlbmVycygpO1xuICAgICAgY29uc3QgZmV0Y2hPbk1vdW50ID0gIW1vdW50ZWQgJiYgc2hvdWxkRmV0Y2hPbk1vdW50KHF1ZXJ5LCBvcHRpb25zKTtcbiAgICAgIGNvbnN0IGZldGNoT3B0aW9uYWxseSA9IG1vdW50ZWQgJiYgc2hvdWxkRmV0Y2hPcHRpb25hbGx5KHF1ZXJ5LCBwcmV2UXVlcnksIG9wdGlvbnMsIHByZXZPcHRpb25zKTtcbiAgICAgIGlmIChmZXRjaE9uTW91bnQgfHwgZmV0Y2hPcHRpb25hbGx5KSB7XG4gICAgICAgIG5ld1N0YXRlID0ge1xuICAgICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICAgIC4uLmZldGNoU3RhdGUoc3RhdGUuZGF0YSwgcXVlcnkub3B0aW9ucylcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLl9vcHRpbWlzdGljUmVzdWx0cyA9PT0gXCJpc1Jlc3RvcmluZ1wiKSB7XG4gICAgICAgIG5ld1N0YXRlLmZldGNoU3RhdHVzID0gXCJpZGxlXCI7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCB7IGVycm9yLCBlcnJvclVwZGF0ZWRBdCwgc3RhdHVzIH0gPSBuZXdTdGF0ZTtcbiAgICBpZiAob3B0aW9ucy5zZWxlY3QgJiYgbmV3U3RhdGUuZGF0YSAhPT0gdm9pZCAwKSB7XG4gICAgICBpZiAocHJldlJlc3VsdCAmJiBuZXdTdGF0ZS5kYXRhID09PSBwcmV2UmVzdWx0U3RhdGU/LmRhdGEgJiYgb3B0aW9ucy5zZWxlY3QgPT09IHRoaXMuI3NlbGVjdEZuKSB7XG4gICAgICAgIGRhdGEgPSB0aGlzLiNzZWxlY3RSZXN1bHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMuI3NlbGVjdEZuID0gb3B0aW9ucy5zZWxlY3Q7XG4gICAgICAgICAgZGF0YSA9IG9wdGlvbnMuc2VsZWN0KG5ld1N0YXRlLmRhdGEpO1xuICAgICAgICAgIGRhdGEgPSByZXBsYWNlRGF0YShwcmV2UmVzdWx0Py5kYXRhLCBkYXRhLCBvcHRpb25zKTtcbiAgICAgICAgICB0aGlzLiNzZWxlY3RSZXN1bHQgPSBkYXRhO1xuICAgICAgICAgIHRoaXMuI3NlbGVjdEVycm9yID0gbnVsbDtcbiAgICAgICAgfSBjYXRjaCAoc2VsZWN0RXJyb3IpIHtcbiAgICAgICAgICB0aGlzLiNzZWxlY3RFcnJvciA9IHNlbGVjdEVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEgPSBuZXdTdGF0ZS5kYXRhO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5wbGFjZWhvbGRlckRhdGEgIT09IHZvaWQgMCAmJiBkYXRhID09PSB2b2lkIDAgJiYgc3RhdHVzID09PSBcInBlbmRpbmdcIikge1xuICAgICAgbGV0IHBsYWNlaG9sZGVyRGF0YTtcbiAgICAgIGlmIChwcmV2UmVzdWx0Py5pc1BsYWNlaG9sZGVyRGF0YSAmJiBvcHRpb25zLnBsYWNlaG9sZGVyRGF0YSA9PT0gcHJldlJlc3VsdE9wdGlvbnM/LnBsYWNlaG9sZGVyRGF0YSkge1xuICAgICAgICBwbGFjZWhvbGRlckRhdGEgPSBwcmV2UmVzdWx0LmRhdGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwbGFjZWhvbGRlckRhdGEgPSB0eXBlb2Ygb3B0aW9ucy5wbGFjZWhvbGRlckRhdGEgPT09IFwiZnVuY3Rpb25cIiA/IG9wdGlvbnMucGxhY2Vob2xkZXJEYXRhKFxuICAgICAgICAgIHRoaXMuI2xhc3RRdWVyeVdpdGhEZWZpbmVkRGF0YT8uc3RhdGUuZGF0YSxcbiAgICAgICAgICB0aGlzLiNsYXN0UXVlcnlXaXRoRGVmaW5lZERhdGFcbiAgICAgICAgKSA6IG9wdGlvbnMucGxhY2Vob2xkZXJEYXRhO1xuICAgICAgICBpZiAob3B0aW9ucy5zZWxlY3QgJiYgcGxhY2Vob2xkZXJEYXRhICE9PSB2b2lkIDApIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcGxhY2Vob2xkZXJEYXRhID0gb3B0aW9ucy5zZWxlY3QocGxhY2Vob2xkZXJEYXRhKTtcbiAgICAgICAgICAgIHRoaXMuI3NlbGVjdEVycm9yID0gbnVsbDtcbiAgICAgICAgICB9IGNhdGNoIChzZWxlY3RFcnJvcikge1xuICAgICAgICAgICAgdGhpcy4jc2VsZWN0RXJyb3IgPSBzZWxlY3RFcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwbGFjZWhvbGRlckRhdGEgIT09IHZvaWQgMCkge1xuICAgICAgICBzdGF0dXMgPSBcInN1Y2Nlc3NcIjtcbiAgICAgICAgZGF0YSA9IHJlcGxhY2VEYXRhKFxuICAgICAgICAgIHByZXZSZXN1bHQ/LmRhdGEsXG4gICAgICAgICAgcGxhY2Vob2xkZXJEYXRhLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgKTtcbiAgICAgICAgaXNQbGFjZWhvbGRlckRhdGEgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy4jc2VsZWN0RXJyb3IpIHtcbiAgICAgIGVycm9yID0gdGhpcy4jc2VsZWN0RXJyb3I7XG4gICAgICBkYXRhID0gdGhpcy4jc2VsZWN0UmVzdWx0O1xuICAgICAgZXJyb3JVcGRhdGVkQXQgPSBEYXRlLm5vdygpO1xuICAgICAgc3RhdHVzID0gXCJlcnJvclwiO1xuICAgIH1cbiAgICBjb25zdCBpc0ZldGNoaW5nID0gbmV3U3RhdGUuZmV0Y2hTdGF0dXMgPT09IFwiZmV0Y2hpbmdcIjtcbiAgICBjb25zdCBpc1BlbmRpbmcgPSBzdGF0dXMgPT09IFwicGVuZGluZ1wiO1xuICAgIGNvbnN0IGlzRXJyb3IgPSBzdGF0dXMgPT09IFwiZXJyb3JcIjtcbiAgICBjb25zdCBpc0xvYWRpbmcgPSBpc1BlbmRpbmcgJiYgaXNGZXRjaGluZztcbiAgICBjb25zdCBoYXNEYXRhID0gZGF0YSAhPT0gdm9pZCAwO1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1cyxcbiAgICAgIGZldGNoU3RhdHVzOiBuZXdTdGF0ZS5mZXRjaFN0YXR1cyxcbiAgICAgIGlzUGVuZGluZyxcbiAgICAgIGlzU3VjY2Vzczogc3RhdHVzID09PSBcInN1Y2Nlc3NcIixcbiAgICAgIGlzRXJyb3IsXG4gICAgICBpc0luaXRpYWxMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgICBpc0xvYWRpbmcsXG4gICAgICBkYXRhLFxuICAgICAgZGF0YVVwZGF0ZWRBdDogbmV3U3RhdGUuZGF0YVVwZGF0ZWRBdCxcbiAgICAgIGVycm9yLFxuICAgICAgZXJyb3JVcGRhdGVkQXQsXG4gICAgICBmYWlsdXJlQ291bnQ6IG5ld1N0YXRlLmZldGNoRmFpbHVyZUNvdW50LFxuICAgICAgZmFpbHVyZVJlYXNvbjogbmV3U3RhdGUuZmV0Y2hGYWlsdXJlUmVhc29uLFxuICAgICAgZXJyb3JVcGRhdGVDb3VudDogbmV3U3RhdGUuZXJyb3JVcGRhdGVDb3VudCxcbiAgICAgIGlzRmV0Y2hlZDogbmV3U3RhdGUuZGF0YVVwZGF0ZUNvdW50ID4gMCB8fCBuZXdTdGF0ZS5lcnJvclVwZGF0ZUNvdW50ID4gMCxcbiAgICAgIGlzRmV0Y2hlZEFmdGVyTW91bnQ6IG5ld1N0YXRlLmRhdGFVcGRhdGVDb3VudCA+IHF1ZXJ5SW5pdGlhbFN0YXRlLmRhdGFVcGRhdGVDb3VudCB8fCBuZXdTdGF0ZS5lcnJvclVwZGF0ZUNvdW50ID4gcXVlcnlJbml0aWFsU3RhdGUuZXJyb3JVcGRhdGVDb3VudCxcbiAgICAgIGlzRmV0Y2hpbmcsXG4gICAgICBpc1JlZmV0Y2hpbmc6IGlzRmV0Y2hpbmcgJiYgIWlzUGVuZGluZyxcbiAgICAgIGlzTG9hZGluZ0Vycm9yOiBpc0Vycm9yICYmICFoYXNEYXRhLFxuICAgICAgaXNQYXVzZWQ6IG5ld1N0YXRlLmZldGNoU3RhdHVzID09PSBcInBhdXNlZFwiLFxuICAgICAgaXNQbGFjZWhvbGRlckRhdGEsXG4gICAgICBpc1JlZmV0Y2hFcnJvcjogaXNFcnJvciAmJiBoYXNEYXRhLFxuICAgICAgaXNTdGFsZTogaXNTdGFsZShxdWVyeSwgb3B0aW9ucyksXG4gICAgICByZWZldGNoOiB0aGlzLnJlZmV0Y2gsXG4gICAgICBwcm9taXNlOiB0aGlzLiNjdXJyZW50VGhlbmFibGVcbiAgICB9O1xuICAgIGNvbnN0IG5leHRSZXN1bHQgPSByZXN1bHQ7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5leHBlcmltZW50YWxfcHJlZmV0Y2hJblJlbmRlcikge1xuICAgICAgY29uc3QgZmluYWxpemVUaGVuYWJsZUlmUG9zc2libGUgPSAodGhlbmFibGUpID0+IHtcbiAgICAgICAgaWYgKG5leHRSZXN1bHQuc3RhdHVzID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgICB0aGVuYWJsZS5yZWplY3QobmV4dFJlc3VsdC5lcnJvcik7XG4gICAgICAgIH0gZWxzZSBpZiAobmV4dFJlc3VsdC5kYXRhICE9PSB2b2lkIDApIHtcbiAgICAgICAgICB0aGVuYWJsZS5yZXNvbHZlKG5leHRSZXN1bHQuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCByZWNyZWF0ZVRoZW5hYmxlID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBwZW5kaW5nID0gdGhpcy4jY3VycmVudFRoZW5hYmxlID0gbmV4dFJlc3VsdC5wcm9taXNlID0gcGVuZGluZ1RoZW5hYmxlKCk7XG4gICAgICAgIGZpbmFsaXplVGhlbmFibGVJZlBvc3NpYmxlKHBlbmRpbmcpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHByZXZUaGVuYWJsZSA9IHRoaXMuI2N1cnJlbnRUaGVuYWJsZTtcbiAgICAgIHN3aXRjaCAocHJldlRoZW5hYmxlLnN0YXR1cykge1xuICAgICAgICBjYXNlIFwicGVuZGluZ1wiOlxuICAgICAgICAgIGlmIChxdWVyeS5xdWVyeUhhc2ggPT09IHByZXZRdWVyeS5xdWVyeUhhc2gpIHtcbiAgICAgICAgICAgIGZpbmFsaXplVGhlbmFibGVJZlBvc3NpYmxlKHByZXZUaGVuYWJsZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiZnVsZmlsbGVkXCI6XG4gICAgICAgICAgaWYgKG5leHRSZXN1bHQuc3RhdHVzID09PSBcImVycm9yXCIgfHwgbmV4dFJlc3VsdC5kYXRhICE9PSBwcmV2VGhlbmFibGUudmFsdWUpIHtcbiAgICAgICAgICAgIHJlY3JlYXRlVGhlbmFibGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJyZWplY3RlZFwiOlxuICAgICAgICAgIGlmIChuZXh0UmVzdWx0LnN0YXR1cyAhPT0gXCJlcnJvclwiIHx8IG5leHRSZXN1bHQuZXJyb3IgIT09IHByZXZUaGVuYWJsZS5yZWFzb24pIHtcbiAgICAgICAgICAgIHJlY3JlYXRlVGhlbmFibGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXh0UmVzdWx0O1xuICB9XG4gIHVwZGF0ZVJlc3VsdChub3RpZnlPcHRpb25zKSB7XG4gICAgY29uc3QgcHJldlJlc3VsdCA9IHRoaXMuI2N1cnJlbnRSZXN1bHQ7XG4gICAgY29uc3QgbmV4dFJlc3VsdCA9IHRoaXMuY3JlYXRlUmVzdWx0KHRoaXMuI2N1cnJlbnRRdWVyeSwgdGhpcy5vcHRpb25zKTtcbiAgICB0aGlzLiNjdXJyZW50UmVzdWx0U3RhdGUgPSB0aGlzLiNjdXJyZW50UXVlcnkuc3RhdGU7XG4gICAgdGhpcy4jY3VycmVudFJlc3VsdE9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgaWYgKHRoaXMuI2N1cnJlbnRSZXN1bHRTdGF0ZS5kYXRhICE9PSB2b2lkIDApIHtcbiAgICAgIHRoaXMuI2xhc3RRdWVyeVdpdGhEZWZpbmVkRGF0YSA9IHRoaXMuI2N1cnJlbnRRdWVyeTtcbiAgICB9XG4gICAgaWYgKHNoYWxsb3dFcXVhbE9iamVjdHMobmV4dFJlc3VsdCwgcHJldlJlc3VsdCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy4jY3VycmVudFJlc3VsdCA9IG5leHRSZXN1bHQ7XG4gICAgY29uc3QgZGVmYXVsdE5vdGlmeU9wdGlvbnMgPSB7fTtcbiAgICBjb25zdCBzaG91bGROb3RpZnlMaXN0ZW5lcnMgPSAoKSA9PiB7XG4gICAgICBpZiAoIXByZXZSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCB7IG5vdGlmeU9uQ2hhbmdlUHJvcHMgfSA9IHRoaXMub3B0aW9ucztcbiAgICAgIGNvbnN0IG5vdGlmeU9uQ2hhbmdlUHJvcHNWYWx1ZSA9IHR5cGVvZiBub3RpZnlPbkNoYW5nZVByb3BzID09PSBcImZ1bmN0aW9uXCIgPyBub3RpZnlPbkNoYW5nZVByb3BzKCkgOiBub3RpZnlPbkNoYW5nZVByb3BzO1xuICAgICAgaWYgKG5vdGlmeU9uQ2hhbmdlUHJvcHNWYWx1ZSA9PT0gXCJhbGxcIiB8fCAhbm90aWZ5T25DaGFuZ2VQcm9wc1ZhbHVlICYmICF0aGlzLiN0cmFja2VkUHJvcHMuc2l6ZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGluY2x1ZGVkUHJvcHMgPSBuZXcgU2V0KFxuICAgICAgICBub3RpZnlPbkNoYW5nZVByb3BzVmFsdWUgPz8gdGhpcy4jdHJhY2tlZFByb3BzXG4gICAgICApO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy50aHJvd09uRXJyb3IpIHtcbiAgICAgICAgaW5jbHVkZWRQcm9wcy5hZGQoXCJlcnJvclwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLiNjdXJyZW50UmVzdWx0KS5zb21lKChrZXkpID0+IHtcbiAgICAgICAgY29uc3QgdHlwZWRLZXkgPSBrZXk7XG4gICAgICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLiNjdXJyZW50UmVzdWx0W3R5cGVkS2V5XSAhPT0gcHJldlJlc3VsdFt0eXBlZEtleV07XG4gICAgICAgIHJldHVybiBjaGFuZ2VkICYmIGluY2x1ZGVkUHJvcHMuaGFzKHR5cGVkS2V5KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgaWYgKG5vdGlmeU9wdGlvbnM/Lmxpc3RlbmVycyAhPT0gZmFsc2UgJiYgc2hvdWxkTm90aWZ5TGlzdGVuZXJzKCkpIHtcbiAgICAgIGRlZmF1bHROb3RpZnlPcHRpb25zLmxpc3RlbmVycyA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuI25vdGlmeSh7IC4uLmRlZmF1bHROb3RpZnlPcHRpb25zLCAuLi5ub3RpZnlPcHRpb25zIH0pO1xuICB9XG4gICN1cGRhdGVRdWVyeSgpIHtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuI2NsaWVudC5nZXRRdWVyeUNhY2hlKCkuYnVpbGQodGhpcy4jY2xpZW50LCB0aGlzLm9wdGlvbnMpO1xuICAgIGlmIChxdWVyeSA9PT0gdGhpcy4jY3VycmVudFF1ZXJ5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHByZXZRdWVyeSA9IHRoaXMuI2N1cnJlbnRRdWVyeTtcbiAgICB0aGlzLiNjdXJyZW50UXVlcnkgPSBxdWVyeTtcbiAgICB0aGlzLiNjdXJyZW50UXVlcnlJbml0aWFsU3RhdGUgPSBxdWVyeS5zdGF0ZTtcbiAgICBpZiAodGhpcy5oYXNMaXN0ZW5lcnMoKSkge1xuICAgICAgcHJldlF1ZXJ5Py5yZW1vdmVPYnNlcnZlcih0aGlzKTtcbiAgICAgIHF1ZXJ5LmFkZE9ic2VydmVyKHRoaXMpO1xuICAgIH1cbiAgfVxuICBvblF1ZXJ5VXBkYXRlKCkge1xuICAgIHRoaXMudXBkYXRlUmVzdWx0KCk7XG4gICAgaWYgKHRoaXMuaGFzTGlzdGVuZXJzKCkpIHtcbiAgICAgIHRoaXMuI3VwZGF0ZVRpbWVycygpO1xuICAgIH1cbiAgfVxuICAjbm90aWZ5KG5vdGlmeU9wdGlvbnMpIHtcbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKCgpID0+IHtcbiAgICAgIGlmIChub3RpZnlPcHRpb25zLmxpc3RlbmVycykge1xuICAgICAgICB0aGlzLmxpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lcikgPT4ge1xuICAgICAgICAgIGxpc3RlbmVyKHRoaXMuI2N1cnJlbnRSZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuI2NsaWVudC5nZXRRdWVyeUNhY2hlKCkubm90aWZ5KHtcbiAgICAgICAgcXVlcnk6IHRoaXMuI2N1cnJlbnRRdWVyeSxcbiAgICAgICAgdHlwZTogXCJvYnNlcnZlclJlc3VsdHNVcGRhdGVkXCJcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59O1xuZnVuY3Rpb24gc2hvdWxkTG9hZE9uTW91bnQocXVlcnksIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHJlc29sdmVFbmFibGVkKG9wdGlvbnMuZW5hYmxlZCwgcXVlcnkpICE9PSBmYWxzZSAmJiBxdWVyeS5zdGF0ZS5kYXRhID09PSB2b2lkIDAgJiYgIShxdWVyeS5zdGF0ZS5zdGF0dXMgPT09IFwiZXJyb3JcIiAmJiBvcHRpb25zLnJldHJ5T25Nb3VudCA9PT0gZmFsc2UpO1xufVxuZnVuY3Rpb24gc2hvdWxkRmV0Y2hPbk1vdW50KHF1ZXJ5LCBvcHRpb25zKSB7XG4gIHJldHVybiBzaG91bGRMb2FkT25Nb3VudChxdWVyeSwgb3B0aW9ucykgfHwgcXVlcnkuc3RhdGUuZGF0YSAhPT0gdm9pZCAwICYmIHNob3VsZEZldGNoT24ocXVlcnksIG9wdGlvbnMsIG9wdGlvbnMucmVmZXRjaE9uTW91bnQpO1xufVxuZnVuY3Rpb24gc2hvdWxkRmV0Y2hPbihxdWVyeSwgb3B0aW9ucywgZmllbGQpIHtcbiAgaWYgKHJlc29sdmVFbmFibGVkKG9wdGlvbnMuZW5hYmxlZCwgcXVlcnkpICE9PSBmYWxzZSkge1xuICAgIGNvbnN0IHZhbHVlID0gdHlwZW9mIGZpZWxkID09PSBcImZ1bmN0aW9uXCIgPyBmaWVsZChxdWVyeSkgOiBmaWVsZDtcbiAgICByZXR1cm4gdmFsdWUgPT09IFwiYWx3YXlzXCIgfHwgdmFsdWUgIT09IGZhbHNlICYmIGlzU3RhbGUocXVlcnksIG9wdGlvbnMpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIHNob3VsZEZldGNoT3B0aW9uYWxseShxdWVyeSwgcHJldlF1ZXJ5LCBvcHRpb25zLCBwcmV2T3B0aW9ucykge1xuICByZXR1cm4gKHF1ZXJ5ICE9PSBwcmV2UXVlcnkgfHwgcmVzb2x2ZUVuYWJsZWQocHJldk9wdGlvbnMuZW5hYmxlZCwgcXVlcnkpID09PSBmYWxzZSkgJiYgKCFvcHRpb25zLnN1c3BlbnNlIHx8IHF1ZXJ5LnN0YXRlLnN0YXR1cyAhPT0gXCJlcnJvclwiKSAmJiBpc1N0YWxlKHF1ZXJ5LCBvcHRpb25zKTtcbn1cbmZ1bmN0aW9uIGlzU3RhbGUocXVlcnksIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHJlc29sdmVFbmFibGVkKG9wdGlvbnMuZW5hYmxlZCwgcXVlcnkpICE9PSBmYWxzZSAmJiBxdWVyeS5pc1N0YWxlQnlUaW1lKHJlc29sdmVTdGFsZVRpbWUob3B0aW9ucy5zdGFsZVRpbWUsIHF1ZXJ5KSk7XG59XG5mdW5jdGlvbiBzaG91bGRBc3NpZ25PYnNlcnZlckN1cnJlbnRQcm9wZXJ0aWVzKG9ic2VydmVyLCBvcHRpbWlzdGljUmVzdWx0KSB7XG4gIGlmICghc2hhbGxvd0VxdWFsT2JqZWN0cyhvYnNlcnZlci5nZXRDdXJyZW50UmVzdWx0KCksIG9wdGltaXN0aWNSZXN1bHQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0IHtcbiAgUXVlcnlPYnNlcnZlclxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXF1ZXJ5T2JzZXJ2ZXIuanMubWFwIiwiLy8gc3JjL211dGF0aW9uT2JzZXJ2ZXIudHNcbmltcG9ydCB7IGdldERlZmF1bHRTdGF0ZSB9IGZyb20gXCIuL211dGF0aW9uLmpzXCI7XG5pbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSBcIi4vbm90aWZ5TWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgU3Vic2NyaWJhYmxlIH0gZnJvbSBcIi4vc3Vic2NyaWJhYmxlLmpzXCI7XG5pbXBvcnQgeyBoYXNoS2V5LCBzaGFsbG93RXF1YWxPYmplY3RzIH0gZnJvbSBcIi4vdXRpbHMuanNcIjtcbnZhciBNdXRhdGlvbk9ic2VydmVyID0gY2xhc3MgZXh0ZW5kcyBTdWJzY3JpYmFibGUge1xuICAjY2xpZW50O1xuICAjY3VycmVudFJlc3VsdCA9IHZvaWQgMDtcbiAgI2N1cnJlbnRNdXRhdGlvbjtcbiAgI211dGF0ZU9wdGlvbnM7XG4gIGNvbnN0cnVjdG9yKGNsaWVudCwgb3B0aW9ucykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy4jY2xpZW50ID0gY2xpZW50O1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICB0aGlzLmJpbmRNZXRob2RzKCk7XG4gICAgdGhpcy4jdXBkYXRlUmVzdWx0KCk7XG4gIH1cbiAgYmluZE1ldGhvZHMoKSB7XG4gICAgdGhpcy5tdXRhdGUgPSB0aGlzLm11dGF0ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMucmVzZXQgPSB0aGlzLnJlc2V0LmJpbmQodGhpcyk7XG4gIH1cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgY29uc3QgcHJldk9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy4jY2xpZW50LmRlZmF1bHRNdXRhdGlvbk9wdGlvbnMob3B0aW9ucyk7XG4gICAgaWYgKCFzaGFsbG93RXF1YWxPYmplY3RzKHRoaXMub3B0aW9ucywgcHJldk9wdGlvbnMpKSB7XG4gICAgICB0aGlzLiNjbGllbnQuZ2V0TXV0YXRpb25DYWNoZSgpLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6IFwib2JzZXJ2ZXJPcHRpb25zVXBkYXRlZFwiLFxuICAgICAgICBtdXRhdGlvbjogdGhpcy4jY3VycmVudE11dGF0aW9uLFxuICAgICAgICBvYnNlcnZlcjogdGhpc1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChwcmV2T3B0aW9ucz8ubXV0YXRpb25LZXkgJiYgdGhpcy5vcHRpb25zLm11dGF0aW9uS2V5ICYmIGhhc2hLZXkocHJldk9wdGlvbnMubXV0YXRpb25LZXkpICE9PSBoYXNoS2V5KHRoaXMub3B0aW9ucy5tdXRhdGlvbktleSkpIHtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuI2N1cnJlbnRNdXRhdGlvbj8uc3RhdGUuc3RhdHVzID09PSBcInBlbmRpbmdcIikge1xuICAgICAgdGhpcy4jY3VycmVudE11dGF0aW9uLnNldE9wdGlvbnModGhpcy5vcHRpb25zKTtcbiAgICB9XG4gIH1cbiAgb25VbnN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKCkpIHtcbiAgICAgIHRoaXMuI2N1cnJlbnRNdXRhdGlvbj8ucmVtb3ZlT2JzZXJ2ZXIodGhpcyk7XG4gICAgfVxuICB9XG4gIG9uTXV0YXRpb25VcGRhdGUoYWN0aW9uKSB7XG4gICAgdGhpcy4jdXBkYXRlUmVzdWx0KCk7XG4gICAgdGhpcy4jbm90aWZ5KGFjdGlvbik7XG4gIH1cbiAgZ2V0Q3VycmVudFJlc3VsdCgpIHtcbiAgICByZXR1cm4gdGhpcy4jY3VycmVudFJlc3VsdDtcbiAgfVxuICByZXNldCgpIHtcbiAgICB0aGlzLiNjdXJyZW50TXV0YXRpb24/LnJlbW92ZU9ic2VydmVyKHRoaXMpO1xuICAgIHRoaXMuI2N1cnJlbnRNdXRhdGlvbiA9IHZvaWQgMDtcbiAgICB0aGlzLiN1cGRhdGVSZXN1bHQoKTtcbiAgICB0aGlzLiNub3RpZnkoKTtcbiAgfVxuICBtdXRhdGUodmFyaWFibGVzLCBvcHRpb25zKSB7XG4gICAgdGhpcy4jbXV0YXRlT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy4jY3VycmVudE11dGF0aW9uPy5yZW1vdmVPYnNlcnZlcih0aGlzKTtcbiAgICB0aGlzLiNjdXJyZW50TXV0YXRpb24gPSB0aGlzLiNjbGllbnQuZ2V0TXV0YXRpb25DYWNoZSgpLmJ1aWxkKHRoaXMuI2NsaWVudCwgdGhpcy5vcHRpb25zKTtcbiAgICB0aGlzLiNjdXJyZW50TXV0YXRpb24uYWRkT2JzZXJ2ZXIodGhpcyk7XG4gICAgcmV0dXJuIHRoaXMuI2N1cnJlbnRNdXRhdGlvbi5leGVjdXRlKHZhcmlhYmxlcyk7XG4gIH1cbiAgI3VwZGF0ZVJlc3VsdCgpIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuI2N1cnJlbnRNdXRhdGlvbj8uc3RhdGUgPz8gZ2V0RGVmYXVsdFN0YXRlKCk7XG4gICAgdGhpcy4jY3VycmVudFJlc3VsdCA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgaXNQZW5kaW5nOiBzdGF0ZS5zdGF0dXMgPT09IFwicGVuZGluZ1wiLFxuICAgICAgaXNTdWNjZXNzOiBzdGF0ZS5zdGF0dXMgPT09IFwic3VjY2Vzc1wiLFxuICAgICAgaXNFcnJvcjogc3RhdGUuc3RhdHVzID09PSBcImVycm9yXCIsXG4gICAgICBpc0lkbGU6IHN0YXRlLnN0YXR1cyA9PT0gXCJpZGxlXCIsXG4gICAgICBtdXRhdGU6IHRoaXMubXV0YXRlLFxuICAgICAgcmVzZXQ6IHRoaXMucmVzZXRcbiAgICB9O1xuICB9XG4gICNub3RpZnkoYWN0aW9uKSB7XG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy4jbXV0YXRlT3B0aW9ucyAmJiB0aGlzLmhhc0xpc3RlbmVycygpKSB7XG4gICAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IHRoaXMuI2N1cnJlbnRSZXN1bHQudmFyaWFibGVzO1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy4jY3VycmVudFJlc3VsdC5jb250ZXh0O1xuICAgICAgICBpZiAoYWN0aW9uPy50eXBlID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgIHRoaXMuI211dGF0ZU9wdGlvbnMub25TdWNjZXNzPy4oYWN0aW9uLmRhdGEsIHZhcmlhYmxlcywgY29udGV4dCk7XG4gICAgICAgICAgdGhpcy4jbXV0YXRlT3B0aW9ucy5vblNldHRsZWQ/LihhY3Rpb24uZGF0YSwgbnVsbCwgdmFyaWFibGVzLCBjb250ZXh0KTtcbiAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24/LnR5cGUgPT09IFwiZXJyb3JcIikge1xuICAgICAgICAgIHRoaXMuI211dGF0ZU9wdGlvbnMub25FcnJvcj8uKGFjdGlvbi5lcnJvciwgdmFyaWFibGVzLCBjb250ZXh0KTtcbiAgICAgICAgICB0aGlzLiNtdXRhdGVPcHRpb25zLm9uU2V0dGxlZD8uKFxuICAgICAgICAgICAgdm9pZCAwLFxuICAgICAgICAgICAgYWN0aW9uLmVycm9yLFxuICAgICAgICAgICAgdmFyaWFibGVzLFxuICAgICAgICAgICAgY29udGV4dFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMubGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiB7XG4gICAgICAgIGxpc3RlbmVyKHRoaXMuI2N1cnJlbnRSZXN1bHQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn07XG5leHBvcnQge1xuICBNdXRhdGlvbk9ic2VydmVyXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bXV0YXRpb25PYnNlcnZlci5qcy5tYXAiLCJcInVzZSBjbGllbnRcIjtcblxuLy8gc3JjL1F1ZXJ5Q2xpZW50UHJvdmlkZXIudHN4XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IGpzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xudmFyIFF1ZXJ5Q2xpZW50Q29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQoXG4gIHZvaWQgMFxuKTtcbnZhciB1c2VRdWVyeUNsaWVudCA9IChxdWVyeUNsaWVudCkgPT4ge1xuICBjb25zdCBjbGllbnQgPSBSZWFjdC51c2VDb250ZXh0KFF1ZXJ5Q2xpZW50Q29udGV4dCk7XG4gIGlmIChxdWVyeUNsaWVudCkge1xuICAgIHJldHVybiBxdWVyeUNsaWVudDtcbiAgfVxuICBpZiAoIWNsaWVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFF1ZXJ5Q2xpZW50IHNldCwgdXNlIFF1ZXJ5Q2xpZW50UHJvdmlkZXIgdG8gc2V0IG9uZVwiKTtcbiAgfVxuICByZXR1cm4gY2xpZW50O1xufTtcbnZhciBRdWVyeUNsaWVudFByb3ZpZGVyID0gKHtcbiAgY2xpZW50LFxuICBjaGlsZHJlblxufSkgPT4ge1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNsaWVudC5tb3VudCgpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbGllbnQudW5tb3VudCgpO1xuICAgIH07XG4gIH0sIFtjbGllbnRdKTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goUXVlcnlDbGllbnRDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBjbGllbnQsIGNoaWxkcmVuIH0pO1xufTtcbmV4cG9ydCB7XG4gIFF1ZXJ5Q2xpZW50Q29udGV4dCxcbiAgUXVlcnlDbGllbnRQcm92aWRlcixcbiAgdXNlUXVlcnlDbGllbnRcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1RdWVyeUNsaWVudFByb3ZpZGVyLmpzLm1hcCIsIlwidXNlIGNsaWVudFwiO1xuXG4vLyBzcmMvaXNSZXN0b3JpbmcudHNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xudmFyIElzUmVzdG9yaW5nQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQoZmFsc2UpO1xudmFyIHVzZUlzUmVzdG9yaW5nID0gKCkgPT4gUmVhY3QudXNlQ29udGV4dChJc1Jlc3RvcmluZ0NvbnRleHQpO1xudmFyIElzUmVzdG9yaW5nUHJvdmlkZXIgPSBJc1Jlc3RvcmluZ0NvbnRleHQuUHJvdmlkZXI7XG5leHBvcnQge1xuICBJc1Jlc3RvcmluZ1Byb3ZpZGVyLFxuICB1c2VJc1Jlc3RvcmluZ1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzUmVzdG9yaW5nLmpzLm1hcCIsIlwidXNlIGNsaWVudFwiO1xuXG4vLyBzcmMvUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkudHN4XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IGpzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZnVuY3Rpb24gY3JlYXRlVmFsdWUoKSB7XG4gIGxldCBpc1Jlc2V0ID0gZmFsc2U7XG4gIHJldHVybiB7XG4gICAgY2xlYXJSZXNldDogKCkgPT4ge1xuICAgICAgaXNSZXNldCA9IGZhbHNlO1xuICAgIH0sXG4gICAgcmVzZXQ6ICgpID0+IHtcbiAgICAgIGlzUmVzZXQgPSB0cnVlO1xuICAgIH0sXG4gICAgaXNSZXNldDogKCkgPT4ge1xuICAgICAgcmV0dXJuIGlzUmVzZXQ7XG4gICAgfVxuICB9O1xufVxudmFyIFF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5Q29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQoY3JlYXRlVmFsdWUoKSk7XG52YXIgdXNlUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkgPSAoKSA9PiBSZWFjdC51c2VDb250ZXh0KFF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5Q29udGV4dCk7XG52YXIgUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkgPSAoe1xuICBjaGlsZHJlblxufSkgPT4ge1xuICBjb25zdCBbdmFsdWVdID0gUmVhY3QudXNlU3RhdGUoKCkgPT4gY3JlYXRlVmFsdWUoKSk7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5Q29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZSwgY2hpbGRyZW46IHR5cGVvZiBjaGlsZHJlbiA9PT0gXCJmdW5jdGlvblwiID8gY2hpbGRyZW4odmFsdWUpIDogY2hpbGRyZW4gfSk7XG59O1xuZXhwb3J0IHtcbiAgUXVlcnlFcnJvclJlc2V0Qm91bmRhcnksXG4gIHVzZVF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UXVlcnlFcnJvclJlc2V0Qm91bmRhcnkuanMubWFwIiwiLy8gc3JjL3V0aWxzLnRzXG5mdW5jdGlvbiBzaG91bGRUaHJvd0Vycm9yKHRocm93RXJyb3IsIHBhcmFtcykge1xuICBpZiAodHlwZW9mIHRocm93RXJyb3IgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiB0aHJvd0Vycm9yKC4uLnBhcmFtcyk7XG4gIH1cbiAgcmV0dXJuICEhdGhyb3dFcnJvcjtcbn1cbmZ1bmN0aW9uIG5vb3AoKSB7XG59XG5leHBvcnQge1xuICBub29wLFxuICBzaG91bGRUaHJvd0Vycm9yXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwiXCJ1c2UgY2xpZW50XCI7XG5cbi8vIHNyYy9lcnJvckJvdW5kYXJ5VXRpbHMudHNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgc2hvdWxkVGhyb3dFcnJvciB9IGZyb20gXCIuL3V0aWxzLmpzXCI7XG52YXIgZW5zdXJlUHJldmVudEVycm9yQm91bmRhcnlSZXRyeSA9IChvcHRpb25zLCBlcnJvclJlc2V0Qm91bmRhcnkpID0+IHtcbiAgaWYgKG9wdGlvbnMuc3VzcGVuc2UgfHwgb3B0aW9ucy50aHJvd09uRXJyb3IgfHwgb3B0aW9ucy5leHBlcmltZW50YWxfcHJlZmV0Y2hJblJlbmRlcikge1xuICAgIGlmICghZXJyb3JSZXNldEJvdW5kYXJ5LmlzUmVzZXQoKSkge1xuICAgICAgb3B0aW9ucy5yZXRyeU9uTW91bnQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbn07XG52YXIgdXNlQ2xlYXJSZXNldEVycm9yQm91bmRhcnkgPSAoZXJyb3JSZXNldEJvdW5kYXJ5KSA9PiB7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZXJyb3JSZXNldEJvdW5kYXJ5LmNsZWFyUmVzZXQoKTtcbiAgfSwgW2Vycm9yUmVzZXRCb3VuZGFyeV0pO1xufTtcbnZhciBnZXRIYXNFcnJvciA9ICh7XG4gIHJlc3VsdCxcbiAgZXJyb3JSZXNldEJvdW5kYXJ5LFxuICB0aHJvd09uRXJyb3IsXG4gIHF1ZXJ5XG59KSA9PiB7XG4gIHJldHVybiByZXN1bHQuaXNFcnJvciAmJiAhZXJyb3JSZXNldEJvdW5kYXJ5LmlzUmVzZXQoKSAmJiAhcmVzdWx0LmlzRmV0Y2hpbmcgJiYgcXVlcnkgJiYgc2hvdWxkVGhyb3dFcnJvcih0aHJvd09uRXJyb3IsIFtyZXN1bHQuZXJyb3IsIHF1ZXJ5XSk7XG59O1xuZXhwb3J0IHtcbiAgZW5zdXJlUHJldmVudEVycm9yQm91bmRhcnlSZXRyeSxcbiAgZ2V0SGFzRXJyb3IsXG4gIHVzZUNsZWFyUmVzZXRFcnJvckJvdW5kYXJ5XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXJyb3JCb3VuZGFyeVV0aWxzLmpzLm1hcCIsIi8vIHNyYy9zdXNwZW5zZS50c1xudmFyIGRlZmF1bHRUaHJvd09uRXJyb3IgPSAoX2Vycm9yLCBxdWVyeSkgPT4gcXVlcnkuc3RhdGUuZGF0YSA9PT0gdm9pZCAwO1xudmFyIGVuc3VyZVN1c3BlbnNlVGltZXJzID0gKGRlZmF1bHRlZE9wdGlvbnMpID0+IHtcbiAgY29uc3Qgb3JpZ2luYWxTdGFsZVRpbWUgPSBkZWZhdWx0ZWRPcHRpb25zLnN0YWxlVGltZTtcbiAgaWYgKGRlZmF1bHRlZE9wdGlvbnMuc3VzcGVuc2UpIHtcbiAgICBkZWZhdWx0ZWRPcHRpb25zLnN0YWxlVGltZSA9IHR5cGVvZiBvcmlnaW5hbFN0YWxlVGltZSA9PT0gXCJmdW5jdGlvblwiID8gKC4uLmFyZ3MpID0+IE1hdGgubWF4KG9yaWdpbmFsU3RhbGVUaW1lKC4uLmFyZ3MpLCAxZTMpIDogTWF0aC5tYXgob3JpZ2luYWxTdGFsZVRpbWUgPz8gMWUzLCAxZTMpO1xuICAgIGlmICh0eXBlb2YgZGVmYXVsdGVkT3B0aW9ucy5nY1RpbWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMuZ2NUaW1lID0gTWF0aC5tYXgoZGVmYXVsdGVkT3B0aW9ucy5nY1RpbWUsIDFlMyk7XG4gICAgfVxuICB9XG59O1xudmFyIHdpbGxGZXRjaCA9IChyZXN1bHQsIGlzUmVzdG9yaW5nKSA9PiByZXN1bHQuaXNMb2FkaW5nICYmIHJlc3VsdC5pc0ZldGNoaW5nICYmICFpc1Jlc3RvcmluZztcbnZhciBzaG91bGRTdXNwZW5kID0gKGRlZmF1bHRlZE9wdGlvbnMsIHJlc3VsdCkgPT4gZGVmYXVsdGVkT3B0aW9ucz8uc3VzcGVuc2UgJiYgcmVzdWx0LmlzUGVuZGluZztcbnZhciBmZXRjaE9wdGltaXN0aWMgPSAoZGVmYXVsdGVkT3B0aW9ucywgb2JzZXJ2ZXIsIGVycm9yUmVzZXRCb3VuZGFyeSkgPT4gb2JzZXJ2ZXIuZmV0Y2hPcHRpbWlzdGljKGRlZmF1bHRlZE9wdGlvbnMpLmNhdGNoKCgpID0+IHtcbiAgZXJyb3JSZXNldEJvdW5kYXJ5LmNsZWFyUmVzZXQoKTtcbn0pO1xuZXhwb3J0IHtcbiAgZGVmYXVsdFRocm93T25FcnJvcixcbiAgZW5zdXJlU3VzcGVuc2VUaW1lcnMsXG4gIGZldGNoT3B0aW1pc3RpYyxcbiAgc2hvdWxkU3VzcGVuZCxcbiAgd2lsbEZldGNoXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3VzcGVuc2UuanMubWFwIiwiXCJ1c2UgY2xpZW50XCI7XG5cbi8vIHNyYy91c2VCYXNlUXVlcnkudHNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgaXNTZXJ2ZXIsIG5vdGlmeU1hbmFnZXIgfSBmcm9tIFwiQHRhbnN0YWNrL3F1ZXJ5LWNvcmVcIjtcbmltcG9ydCB7IHVzZVF1ZXJ5Q2xpZW50IH0gZnJvbSBcIi4vUXVlcnlDbGllbnRQcm92aWRlci5qc1wiO1xuaW1wb3J0IHsgdXNlUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkgfSBmcm9tIFwiLi9RdWVyeUVycm9yUmVzZXRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHtcbiAgZW5zdXJlUHJldmVudEVycm9yQm91bmRhcnlSZXRyeSxcbiAgZ2V0SGFzRXJyb3IsXG4gIHVzZUNsZWFyUmVzZXRFcnJvckJvdW5kYXJ5XG59IGZyb20gXCIuL2Vycm9yQm91bmRhcnlVdGlscy5qc1wiO1xuaW1wb3J0IHsgdXNlSXNSZXN0b3JpbmcgfSBmcm9tIFwiLi9pc1Jlc3RvcmluZy5qc1wiO1xuaW1wb3J0IHtcbiAgZW5zdXJlU3VzcGVuc2VUaW1lcnMsXG4gIGZldGNoT3B0aW1pc3RpYyxcbiAgc2hvdWxkU3VzcGVuZCxcbiAgd2lsbEZldGNoXG59IGZyb20gXCIuL3N1c3BlbnNlLmpzXCI7XG5pbXBvcnQgeyBub29wIH0gZnJvbSBcIi4vdXRpbHMuanNcIjtcbmZ1bmN0aW9uIHVzZUJhc2VRdWVyeShvcHRpb25zLCBPYnNlcnZlciwgcXVlcnlDbGllbnQpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KG9wdGlvbnMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdCYWQgYXJndW1lbnQgdHlwZS4gU3RhcnRpbmcgd2l0aCB2NSwgb25seSB0aGUgXCJPYmplY3RcIiBmb3JtIGlzIGFsbG93ZWQgd2hlbiBjYWxsaW5nIHF1ZXJ5IHJlbGF0ZWQgZnVuY3Rpb25zLiBQbGVhc2UgdXNlIHRoZSBlcnJvciBzdGFjayB0byBmaW5kIHRoZSBjdWxwcml0IGNhbGwuIE1vcmUgaW5mbyBoZXJlOiBodHRwczovL3RhbnN0YWNrLmNvbS9xdWVyeS9sYXRlc3QvZG9jcy9yZWFjdC9ndWlkZXMvbWlncmF0aW5nLXRvLXY1I3N1cHBvcnRzLWEtc2luZ2xlLXNpZ25hdHVyZS1vbmUtb2JqZWN0J1xuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgY2xpZW50ID0gdXNlUXVlcnlDbGllbnQocXVlcnlDbGllbnQpO1xuICBjb25zdCBpc1Jlc3RvcmluZyA9IHVzZUlzUmVzdG9yaW5nKCk7XG4gIGNvbnN0IGVycm9yUmVzZXRCb3VuZGFyeSA9IHVzZVF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5KCk7XG4gIGNvbnN0IGRlZmF1bHRlZE9wdGlvbnMgPSBjbGllbnQuZGVmYXVsdFF1ZXJ5T3B0aW9ucyhvcHRpb25zKTtcbiAgY2xpZW50LmdldERlZmF1bHRPcHRpb25zKCkucXVlcmllcz8uX2V4cGVyaW1lbnRhbF9iZWZvcmVRdWVyeT8uKFxuICAgIGRlZmF1bHRlZE9wdGlvbnNcbiAgKTtcbiAgZGVmYXVsdGVkT3B0aW9ucy5fb3B0aW1pc3RpY1Jlc3VsdHMgPSBpc1Jlc3RvcmluZyA/IFwiaXNSZXN0b3JpbmdcIiA6IFwib3B0aW1pc3RpY1wiO1xuICBlbnN1cmVTdXNwZW5zZVRpbWVycyhkZWZhdWx0ZWRPcHRpb25zKTtcbiAgZW5zdXJlUHJldmVudEVycm9yQm91bmRhcnlSZXRyeShkZWZhdWx0ZWRPcHRpb25zLCBlcnJvclJlc2V0Qm91bmRhcnkpO1xuICB1c2VDbGVhclJlc2V0RXJyb3JCb3VuZGFyeShlcnJvclJlc2V0Qm91bmRhcnkpO1xuICBjb25zdCBpc05ld0NhY2hlRW50cnkgPSAhY2xpZW50LmdldFF1ZXJ5Q2FjaGUoKS5nZXQoZGVmYXVsdGVkT3B0aW9ucy5xdWVyeUhhc2gpO1xuICBjb25zdCBbb2JzZXJ2ZXJdID0gUmVhY3QudXNlU3RhdGUoXG4gICAgKCkgPT4gbmV3IE9ic2VydmVyKFxuICAgICAgY2xpZW50LFxuICAgICAgZGVmYXVsdGVkT3B0aW9uc1xuICAgIClcbiAgKTtcbiAgY29uc3QgcmVzdWx0ID0gb2JzZXJ2ZXIuZ2V0T3B0aW1pc3RpY1Jlc3VsdChkZWZhdWx0ZWRPcHRpb25zKTtcbiAgY29uc3Qgc2hvdWxkU3Vic2NyaWJlID0gIWlzUmVzdG9yaW5nICYmIG9wdGlvbnMuc3Vic2NyaWJlZCAhPT0gZmFsc2U7XG4gIFJlYWN0LnVzZVN5bmNFeHRlcm5hbFN0b3JlKFxuICAgIFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgICAgKG9uU3RvcmVDaGFuZ2UpID0+IHtcbiAgICAgICAgY29uc3QgdW5zdWJzY3JpYmUgPSBzaG91bGRTdWJzY3JpYmUgPyBvYnNlcnZlci5zdWJzY3JpYmUobm90aWZ5TWFuYWdlci5iYXRjaENhbGxzKG9uU3RvcmVDaGFuZ2UpKSA6IG5vb3A7XG4gICAgICAgIG9ic2VydmVyLnVwZGF0ZVJlc3VsdCgpO1xuICAgICAgICByZXR1cm4gdW5zdWJzY3JpYmU7XG4gICAgICB9LFxuICAgICAgW29ic2VydmVyLCBzaG91bGRTdWJzY3JpYmVdXG4gICAgKSxcbiAgICAoKSA9PiBvYnNlcnZlci5nZXRDdXJyZW50UmVzdWx0KCksXG4gICAgKCkgPT4gb2JzZXJ2ZXIuZ2V0Q3VycmVudFJlc3VsdCgpXG4gICk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgb2JzZXJ2ZXIuc2V0T3B0aW9ucyhkZWZhdWx0ZWRPcHRpb25zLCB7IGxpc3RlbmVyczogZmFsc2UgfSk7XG4gIH0sIFtkZWZhdWx0ZWRPcHRpb25zLCBvYnNlcnZlcl0pO1xuICBpZiAoc2hvdWxkU3VzcGVuZChkZWZhdWx0ZWRPcHRpb25zLCByZXN1bHQpKSB7XG4gICAgdGhyb3cgZmV0Y2hPcHRpbWlzdGljKGRlZmF1bHRlZE9wdGlvbnMsIG9ic2VydmVyLCBlcnJvclJlc2V0Qm91bmRhcnkpO1xuICB9XG4gIGlmIChnZXRIYXNFcnJvcih7XG4gICAgcmVzdWx0LFxuICAgIGVycm9yUmVzZXRCb3VuZGFyeSxcbiAgICB0aHJvd09uRXJyb3I6IGRlZmF1bHRlZE9wdGlvbnMudGhyb3dPbkVycm9yLFxuICAgIHF1ZXJ5OiBjbGllbnQuZ2V0UXVlcnlDYWNoZSgpLmdldChkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5SGFzaClcbiAgfSkpIHtcbiAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gIH1cbiAgO1xuICBjbGllbnQuZ2V0RGVmYXVsdE9wdGlvbnMoKS5xdWVyaWVzPy5fZXhwZXJpbWVudGFsX2FmdGVyUXVlcnk/LihcbiAgICBkZWZhdWx0ZWRPcHRpb25zLFxuICAgIHJlc3VsdFxuICApO1xuICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5leHBlcmltZW50YWxfcHJlZmV0Y2hJblJlbmRlciAmJiAhaXNTZXJ2ZXIgJiYgd2lsbEZldGNoKHJlc3VsdCwgaXNSZXN0b3JpbmcpKSB7XG4gICAgY29uc3QgcHJvbWlzZSA9IGlzTmV3Q2FjaGVFbnRyeSA/IChcbiAgICAgIC8vIEZldGNoIGltbWVkaWF0ZWx5IG9uIHJlbmRlciBpbiBvcmRlciB0byBlbnN1cmUgYC5wcm9taXNlYCBpcyByZXNvbHZlZCBldmVuIGlmIHRoZSBjb21wb25lbnQgaXMgdW5tb3VudGVkXG4gICAgICBmZXRjaE9wdGltaXN0aWMoZGVmYXVsdGVkT3B0aW9ucywgb2JzZXJ2ZXIsIGVycm9yUmVzZXRCb3VuZGFyeSlcbiAgICApIDogKFxuICAgICAgLy8gc3Vic2NyaWJlIHRvIHRoZSBcImNhY2hlIHByb21pc2VcIiBzbyB0aGF0IHdlIGNhbiBmaW5hbGl6ZSB0aGUgY3VycmVudFRoZW5hYmxlIG9uY2UgZGF0YSBjb21lcyBpblxuICAgICAgY2xpZW50LmdldFF1ZXJ5Q2FjaGUoKS5nZXQoZGVmYXVsdGVkT3B0aW9ucy5xdWVyeUhhc2gpPy5wcm9taXNlXG4gICAgKTtcbiAgICBwcm9taXNlPy5jYXRjaChub29wKS5maW5hbGx5KCgpID0+IHtcbiAgICAgIG9ic2VydmVyLnVwZGF0ZVJlc3VsdCgpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiAhZGVmYXVsdGVkT3B0aW9ucy5ub3RpZnlPbkNoYW5nZVByb3BzID8gb2JzZXJ2ZXIudHJhY2tSZXN1bHQocmVzdWx0KSA6IHJlc3VsdDtcbn1cbmV4cG9ydCB7XG4gIHVzZUJhc2VRdWVyeVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZUJhc2VRdWVyeS5qcy5tYXAiLCJcInVzZSBjbGllbnRcIjtcblxuLy8gc3JjL3VzZVF1ZXJ5LnRzXG5pbXBvcnQgeyBRdWVyeU9ic2VydmVyIH0gZnJvbSBcIkB0YW5zdGFjay9xdWVyeS1jb3JlXCI7XG5pbXBvcnQgeyB1c2VCYXNlUXVlcnkgfSBmcm9tIFwiLi91c2VCYXNlUXVlcnkuanNcIjtcbmZ1bmN0aW9uIHVzZVF1ZXJ5KG9wdGlvbnMsIHF1ZXJ5Q2xpZW50KSB7XG4gIHJldHVybiB1c2VCYXNlUXVlcnkob3B0aW9ucywgUXVlcnlPYnNlcnZlciwgcXVlcnlDbGllbnQpO1xufVxuZXhwb3J0IHtcbiAgdXNlUXVlcnlcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VRdWVyeS5qcy5tYXAiLCJcInVzZSBjbGllbnRcIjtcblxuLy8gc3JjL3VzZU11dGF0aW9uLnRzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IE11dGF0aW9uT2JzZXJ2ZXIsIG5vdGlmeU1hbmFnZXIgfSBmcm9tIFwiQHRhbnN0YWNrL3F1ZXJ5LWNvcmVcIjtcbmltcG9ydCB7IHVzZVF1ZXJ5Q2xpZW50IH0gZnJvbSBcIi4vUXVlcnlDbGllbnRQcm92aWRlci5qc1wiO1xuaW1wb3J0IHsgbm9vcCwgc2hvdWxkVGhyb3dFcnJvciB9IGZyb20gXCIuL3V0aWxzLmpzXCI7XG5mdW5jdGlvbiB1c2VNdXRhdGlvbihvcHRpb25zLCBxdWVyeUNsaWVudCkge1xuICBjb25zdCBjbGllbnQgPSB1c2VRdWVyeUNsaWVudChxdWVyeUNsaWVudCk7XG4gIGNvbnN0IFtvYnNlcnZlcl0gPSBSZWFjdC51c2VTdGF0ZShcbiAgICAoKSA9PiBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgIGNsaWVudCxcbiAgICAgIG9wdGlvbnNcbiAgICApXG4gICk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgb2JzZXJ2ZXIuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgfSwgW29ic2VydmVyLCBvcHRpb25zXSk7XG4gIGNvbnN0IHJlc3VsdCA9IFJlYWN0LnVzZVN5bmNFeHRlcm5hbFN0b3JlKFxuICAgIFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgICAgKG9uU3RvcmVDaGFuZ2UpID0+IG9ic2VydmVyLnN1YnNjcmliZShub3RpZnlNYW5hZ2VyLmJhdGNoQ2FsbHMob25TdG9yZUNoYW5nZSkpLFxuICAgICAgW29ic2VydmVyXVxuICAgICksXG4gICAgKCkgPT4gb2JzZXJ2ZXIuZ2V0Q3VycmVudFJlc3VsdCgpLFxuICAgICgpID0+IG9ic2VydmVyLmdldEN1cnJlbnRSZXN1bHQoKVxuICApO1xuICBjb25zdCBtdXRhdGUgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAodmFyaWFibGVzLCBtdXRhdGVPcHRpb25zKSA9PiB7XG4gICAgICBvYnNlcnZlci5tdXRhdGUodmFyaWFibGVzLCBtdXRhdGVPcHRpb25zKS5jYXRjaChub29wKTtcbiAgICB9LFxuICAgIFtvYnNlcnZlcl1cbiAgKTtcbiAgaWYgKHJlc3VsdC5lcnJvciAmJiBzaG91bGRUaHJvd0Vycm9yKG9ic2VydmVyLm9wdGlvbnMudGhyb3dPbkVycm9yLCBbcmVzdWx0LmVycm9yXSkpIHtcbiAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gIH1cbiAgcmV0dXJuIHsgLi4ucmVzdWx0LCBtdXRhdGUsIG11dGF0ZUFzeW5jOiByZXN1bHQubXV0YXRlIH07XG59XG5leHBvcnQge1xuICB1c2VNdXRhdGlvblxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZU11dGF0aW9uLmpzLm1hcCIsIi8qIHRzbGludDpkaXNhYmxlICovXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLyoqXG4gKiBHYWxhZHJpbSBGZWVkYmFjayBBUElcbiAqIEFQSSBmb3IgR2FsYWRyaW0gRmVlZGJhY2ssIGEgZmVlZGJhY2sgcGxhdGZvcm0gZm9yIEdhbGFkcmltIHByb2plY3RzLlxuICpcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjBcbiAqIFxuICpcbiAqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG4gKiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cbiAqL1xuXG5cbmltcG9ydCB0eXBlIHsgQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vY29uZmlndXJhdGlvbic7XG4vLyBTb21lIGltcG9ydHMgbm90IHVzZWQgZGVwZW5kaW5nIG9uIHRlbXBsYXRlIGNvbmRpdGlvbnNcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB0eXBlIHsgQXhpb3NQcm9taXNlLCBBeGlvc0luc3RhbmNlLCBSYXdBeGlvc1JlcXVlc3RDb25maWcgfSBmcm9tICdheGlvcyc7XG5pbXBvcnQgZ2xvYmFsQXhpb3MgZnJvbSAnYXhpb3MnO1xuXG5leHBvcnQgY29uc3QgQkFTRV9QQVRIID0gXCJodHRwOi8vbG9jYWxob3N0XCIucmVwbGFjZSgvXFwvKyQvLCBcIlwiKTtcblxuLyoqXG4gKlxuICogQGV4cG9ydFxuICovXG5leHBvcnQgY29uc3QgQ09MTEVDVElPTl9GT1JNQVRTID0ge1xuICAgIGNzdjogXCIsXCIsXG4gICAgc3N2OiBcIiBcIixcbiAgICB0c3Y6IFwiXFx0XCIsXG4gICAgcGlwZXM6IFwifFwiLFxufTtcblxuLyoqXG4gKlxuICogQGV4cG9ydFxuICogQGludGVyZmFjZSBSZXF1ZXN0QXJnc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RBcmdzIHtcbiAgICB1cmw6IHN0cmluZztcbiAgICBvcHRpb25zOiBSYXdBeGlvc1JlcXVlc3RDb25maWc7XG59XG5cbi8qKlxuICpcbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBCYXNlQVBJXG4gKi9cbmV4cG9ydCBjbGFzcyBCYXNlQVBJIHtcbiAgICBwcm90ZWN0ZWQgY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGNvbmZpZ3VyYXRpb24/OiBDb25maWd1cmF0aW9uLCBwcm90ZWN0ZWQgYmFzZVBhdGg6IHN0cmluZyA9IEJBU0VfUEFUSCwgcHJvdGVjdGVkIGF4aW9zOiBBeGlvc0luc3RhbmNlID0gZ2xvYmFsQXhpb3MpIHtcbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgICAgICB0aGlzLmJhc2VQYXRoID0gY29uZmlndXJhdGlvbi5iYXNlUGF0aCA/PyBiYXNlUGF0aDtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBSZXF1aXJlZEVycm9yXG4gKiBAZXh0ZW5kcyB7RXJyb3J9XG4gKi9cbmV4cG9ydCBjbGFzcyBSZXF1aXJlZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBmaWVsZDogc3RyaW5nLCBtc2c/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIobXNnKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJSZXF1aXJlZEVycm9yXCJcbiAgICB9XG59XG5cbmludGVyZmFjZSBTZXJ2ZXJNYXAge1xuICAgIFtrZXk6IHN0cmluZ106IHtcbiAgICAgICAgdXJsOiBzdHJpbmcsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gICAgfVtdO1xufVxuXG4vKipcbiAqXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBvcGVyYXRpb25TZXJ2ZXJNYXA6IFNlcnZlck1hcCA9IHtcbn1cbiIsIi8qIHRzbGludDpkaXNhYmxlICovXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLyoqXG4gKiBHYWxhZHJpbSBGZWVkYmFjayBBUElcbiAqIEFQSSBmb3IgR2FsYWRyaW0gRmVlZGJhY2ssIGEgZmVlZGJhY2sgcGxhdGZvcm0gZm9yIEdhbGFkcmltIHByb2plY3RzLlxuICpcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjBcbiAqIFxuICpcbiAqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG4gKiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cbiAqL1xuXG5cbmltcG9ydCB0eXBlIHsgQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuL2NvbmZpZ3VyYXRpb25cIjtcbmltcG9ydCB0eXBlIHsgUmVxdWVzdEFyZ3MgfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgdHlwZSB7IEF4aW9zSW5zdGFuY2UsIEF4aW9zUmVzcG9uc2UgfSBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBSZXF1aXJlZEVycm9yIH0gZnJvbSBcIi4vYmFzZVwiO1xuXG4vKipcbiAqXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBEVU1NWV9CQVNFX1VSTCA9ICdodHRwczovL2V4YW1wbGUuY29tJ1xuXG4vKipcbiAqXG4gKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICogQGV4cG9ydFxuICovXG5leHBvcnQgY29uc3QgYXNzZXJ0UGFyYW1FeGlzdHMgPSBmdW5jdGlvbiAoZnVuY3Rpb25OYW1lOiBzdHJpbmcsIHBhcmFtTmFtZTogc3RyaW5nLCBwYXJhbVZhbHVlOiB1bmtub3duKSB7XG4gICAgaWYgKHBhcmFtVmFsdWUgPT09IG51bGwgfHwgcGFyYW1WYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBSZXF1aXJlZEVycm9yKHBhcmFtTmFtZSwgYFJlcXVpcmVkIHBhcmFtZXRlciAke3BhcmFtTmFtZX0gd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyAke2Z1bmN0aW9uTmFtZX0uYCk7XG4gICAgfVxufVxuXG4vKipcbiAqXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBzZXRBcGlLZXlUb09iamVjdCA9IGFzeW5jIGZ1bmN0aW9uIChvYmplY3Q6IGFueSwga2V5UGFyYW1OYW1lOiBzdHJpbmcsIGNvbmZpZ3VyYXRpb24/OiBDb25maWd1cmF0aW9uKSB7XG4gICAgaWYgKGNvbmZpZ3VyYXRpb24gJiYgY29uZmlndXJhdGlvbi5hcGlLZXkpIHtcbiAgICAgICAgY29uc3QgbG9jYWxWYXJBcGlLZXlWYWx1ZSA9IHR5cGVvZiBjb25maWd1cmF0aW9uLmFwaUtleSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgPyBhd2FpdCBjb25maWd1cmF0aW9uLmFwaUtleShrZXlQYXJhbU5hbWUpXG4gICAgICAgICAgICA6IGF3YWl0IGNvbmZpZ3VyYXRpb24uYXBpS2V5O1xuICAgICAgICBvYmplY3Rba2V5UGFyYW1OYW1lXSA9IGxvY2FsVmFyQXBpS2V5VmFsdWU7XG4gICAgfVxufVxuXG4vKipcbiAqXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBzZXRCYXNpY0F1dGhUb09iamVjdCA9IGZ1bmN0aW9uIChvYmplY3Q6IGFueSwgY29uZmlndXJhdGlvbj86IENvbmZpZ3VyYXRpb24pIHtcbiAgICBpZiAoY29uZmlndXJhdGlvbiAmJiAoY29uZmlndXJhdGlvbi51c2VybmFtZSB8fCBjb25maWd1cmF0aW9uLnBhc3N3b3JkKSkge1xuICAgICAgICBvYmplY3RbXCJhdXRoXCJdID0geyB1c2VybmFtZTogY29uZmlndXJhdGlvbi51c2VybmFtZSwgcGFzc3dvcmQ6IGNvbmZpZ3VyYXRpb24ucGFzc3dvcmQgfTtcbiAgICB9XG59XG5cbi8qKlxuICpcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEJlYXJlckF1dGhUb09iamVjdCA9IGFzeW5jIGZ1bmN0aW9uIChvYmplY3Q6IGFueSwgY29uZmlndXJhdGlvbj86IENvbmZpZ3VyYXRpb24pIHtcbiAgICBpZiAoY29uZmlndXJhdGlvbiAmJiBjb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKSB7XG4gICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gdHlwZW9mIGNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW4gPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgID8gYXdhaXQgY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbigpXG4gICAgICAgICAgICA6IGF3YWl0IGNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG4gICAgICAgIG9iamVjdFtcIkF1dGhvcml6YXRpb25cIl0gPSBcIkJlYXJlciBcIiArIGFjY2Vzc1Rva2VuO1xuICAgIH1cbn1cblxuLyoqXG4gKlxuICogQGV4cG9ydFxuICovXG5leHBvcnQgY29uc3Qgc2V0T0F1dGhUb09iamVjdCA9IGFzeW5jIGZ1bmN0aW9uIChvYmplY3Q6IGFueSwgbmFtZTogc3RyaW5nLCBzY29wZXM6IHN0cmluZ1tdLCBjb25maWd1cmF0aW9uPzogQ29uZmlndXJhdGlvbikge1xuICAgIGlmIChjb25maWd1cmF0aW9uICYmIGNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgY29uc3QgbG9jYWxWYXJBY2Nlc3NUb2tlblZhbHVlID0gdHlwZW9mIGNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW4gPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgID8gYXdhaXQgY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbihuYW1lLCBzY29wZXMpXG4gICAgICAgICAgICA6IGF3YWl0IGNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG4gICAgICAgIG9iamVjdFtcIkF1dGhvcml6YXRpb25cIl0gPSBcIkJlYXJlciBcIiArIGxvY2FsVmFyQWNjZXNzVG9rZW5WYWx1ZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHNldEZsYXR0ZW5lZFF1ZXJ5UGFyYW1zKHVybFNlYXJjaFBhcmFtczogVVJMU2VhcmNoUGFyYW1zLCBwYXJhbWV0ZXI6IGFueSwga2V5OiBzdHJpbmcgPSBcIlwiKTogdm9pZCB7XG4gICAgaWYgKHBhcmFtZXRlciA9PSBudWxsKSByZXR1cm47XG4gICAgaWYgKHR5cGVvZiBwYXJhbWV0ZXIgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGFyYW1ldGVyKSkge1xuICAgICAgICAgICAgKHBhcmFtZXRlciBhcyBhbnlbXSkuZm9yRWFjaChpdGVtID0+IHNldEZsYXR0ZW5lZFF1ZXJ5UGFyYW1zKHVybFNlYXJjaFBhcmFtcywgaXRlbSwga2V5KSk7XG4gICAgICAgIH0gXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMocGFyYW1ldGVyKS5mb3JFYWNoKGN1cnJlbnRLZXkgPT4gXG4gICAgICAgICAgICAgICAgc2V0RmxhdHRlbmVkUXVlcnlQYXJhbXModXJsU2VhcmNoUGFyYW1zLCBwYXJhbWV0ZXJbY3VycmVudEtleV0sIGAke2tleX0ke2tleSAhPT0gJycgPyAnLicgOiAnJ30ke2N1cnJlbnRLZXl9YClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9IFxuICAgIGVsc2Uge1xuICAgICAgICBpZiAodXJsU2VhcmNoUGFyYW1zLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICB1cmxTZWFyY2hQYXJhbXMuYXBwZW5kKGtleSwgcGFyYW1ldGVyKTtcbiAgICAgICAgfSBcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB1cmxTZWFyY2hQYXJhbXMuc2V0KGtleSwgcGFyYW1ldGVyKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKlxuICogQGV4cG9ydFxuICovXG5leHBvcnQgY29uc3Qgc2V0U2VhcmNoUGFyYW1zID0gZnVuY3Rpb24gKHVybDogVVJMLCAuLi5vYmplY3RzOiBhbnlbXSkge1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXModXJsLnNlYXJjaCk7XG4gICAgc2V0RmxhdHRlbmVkUXVlcnlQYXJhbXMoc2VhcmNoUGFyYW1zLCBvYmplY3RzKTtcbiAgICB1cmwuc2VhcmNoID0gc2VhcmNoUGFyYW1zLnRvU3RyaW5nKCk7XG59XG5cbi8qKlxuICpcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNvbnN0IHNlcmlhbGl6ZURhdGFJZk5lZWRlZCA9IGZ1bmN0aW9uICh2YWx1ZTogYW55LCByZXF1ZXN0T3B0aW9uczogYW55LCBjb25maWd1cmF0aW9uPzogQ29uZmlndXJhdGlvbikge1xuICAgIGNvbnN0IG5vblN0cmluZyA9IHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZyc7XG4gICAgY29uc3QgbmVlZHNTZXJpYWxpemF0aW9uID0gbm9uU3RyaW5nICYmIGNvbmZpZ3VyYXRpb24gJiYgY29uZmlndXJhdGlvbi5pc0pzb25NaW1lXG4gICAgICAgID8gY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKHJlcXVlc3RPcHRpb25zLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddKVxuICAgICAgICA6IG5vblN0cmluZztcbiAgICByZXR1cm4gbmVlZHNTZXJpYWxpemF0aW9uXG4gICAgICAgID8gSlNPTi5zdHJpbmdpZnkodmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pXG4gICAgICAgIDogKHZhbHVlIHx8IFwiXCIpO1xufVxuXG4vKipcbiAqXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCB0b1BhdGhTdHJpbmcgPSBmdW5jdGlvbiAodXJsOiBVUkwpIHtcbiAgICByZXR1cm4gdXJsLnBhdGhuYW1lICsgdXJsLnNlYXJjaCArIHVybC5oYXNoXG59XG5cbi8qKlxuICpcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVJlcXVlc3RGdW5jdGlvbiA9IGZ1bmN0aW9uIChheGlvc0FyZ3M6IFJlcXVlc3RBcmdzLCBnbG9iYWxBeGlvczogQXhpb3NJbnN0YW5jZSwgQkFTRV9QQVRIOiBzdHJpbmcsIGNvbmZpZ3VyYXRpb24/OiBDb25maWd1cmF0aW9uKSB7XG4gICAgcmV0dXJuIDxUID0gdW5rbm93biwgUiA9IEF4aW9zUmVzcG9uc2U8VD4+KGF4aW9zOiBBeGlvc0luc3RhbmNlID0gZ2xvYmFsQXhpb3MsIGJhc2VQYXRoOiBzdHJpbmcgPSBCQVNFX1BBVEgpID0+IHtcbiAgICAgICAgY29uc3QgYXhpb3NSZXF1ZXN0QXJncyA9IHsuLi5heGlvc0FyZ3Mub3B0aW9ucywgdXJsOiAoYXhpb3MuZGVmYXVsdHMuYmFzZVVSTCA/ICcnIDogY29uZmlndXJhdGlvbj8uYmFzZVBhdGggPz8gYmFzZVBhdGgpICsgYXhpb3NBcmdzLnVybH07XG4gICAgICAgIHJldHVybiBheGlvcy5yZXF1ZXN0PFQsIFI+KGF4aW9zUmVxdWVzdEFyZ3MpO1xuICAgIH07XG59XG4iLCIvKiB0c2xpbnQ6ZGlzYWJsZSAqL1xuLyogZXNsaW50LWRpc2FibGUgKi9cbi8qKlxuICogR2FsYWRyaW0gRmVlZGJhY2sgQVBJXG4gKiBBUEkgZm9yIEdhbGFkcmltIEZlZWRiYWNrLCBhIGZlZWRiYWNrIHBsYXRmb3JtIGZvciBHYWxhZHJpbSBwcm9qZWN0cy5cbiAqXG4gKiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4wXG4gKiBcbiAqXG4gKiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuICogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG4gKiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG4gKi9cblxuXG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYXRpb24gfSBmcm9tICcuL2NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHR5cGUgeyBBeGlvc1Byb21pc2UsIEF4aW9zSW5zdGFuY2UsIFJhd0F4aW9zUmVxdWVzdENvbmZpZyB9IGZyb20gJ2F4aW9zJztcbmltcG9ydCBnbG9iYWxBeGlvcyBmcm9tICdheGlvcyc7XG4vLyBTb21lIGltcG9ydHMgbm90IHVzZWQgZGVwZW5kaW5nIG9uIHRlbXBsYXRlIGNvbmRpdGlvbnNcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IERVTU1ZX0JBU0VfVVJMLCBhc3NlcnRQYXJhbUV4aXN0cywgc2V0QXBpS2V5VG9PYmplY3QsIHNldEJhc2ljQXV0aFRvT2JqZWN0LCBzZXRCZWFyZXJBdXRoVG9PYmplY3QsIHNldE9BdXRoVG9PYmplY3QsIHNldFNlYXJjaFBhcmFtcywgc2VyaWFsaXplRGF0YUlmTmVlZGVkLCB0b1BhdGhTdHJpbmcsIGNyZWF0ZVJlcXVlc3RGdW5jdGlvbiB9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB0eXBlIHsgUmVxdWVzdEFyZ3MgfSBmcm9tICcuL2Jhc2UnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgQkFTRV9QQVRILCBDT0xMRUNUSU9OX0ZPUk1BVFMsIEJhc2VBUEksIFJlcXVpcmVkRXJyb3IsIG9wZXJhdGlvblNlcnZlck1hcCB9IGZyb20gJy4vYmFzZSc7XG5cbi8qKlxuICogXG4gKiBAZXhwb3J0XG4gKiBAaW50ZXJmYWNlIENvbGxhYm9yYXRpb25zUmVzcG9uc2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2xsYWJvcmF0aW9uc1Jlc3BvbnNlIHtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBDb2xsYWJvcmF0aW9uc1Jlc3BvbnNlXG4gICAgICovXG4gICAgJ3VzZXJJZCc6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBDb2xsYWJvcmF0aW9uc1Jlc3BvbnNlXG4gICAgICovXG4gICAgJ3Byb2plY3RJZCc6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7UHJvamVjdFJlc3BvbnNlfVxuICAgICAqIEBtZW1iZXJvZiBDb2xsYWJvcmF0aW9uc1Jlc3BvbnNlXG4gICAgICovXG4gICAgJ3Byb2plY3QnOiBQcm9qZWN0UmVzcG9uc2U7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgQ29sbGFib3JhdGlvbnNSZXNwb25zZVxuICAgICAqL1xuICAgICdyb2xlJzogc3RyaW5nO1xufVxuLyoqXG4gKiBcbiAqIEBleHBvcnRcbiAqIEBpbnRlcmZhY2UgRmVlZGJhY2tDcmVhdGVEdG9cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGZWVkYmFja0NyZWF0ZUR0byB7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tDcmVhdGVEdG9cbiAgICAgKi9cbiAgICAnZWxlbWVudElkJzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrQ3JlYXRlRHRvXG4gICAgICovXG4gICAgJ2VsZW1lbnRJbmRleCc6IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBGZWVkYmFja0NyZWF0ZUR0b1xuICAgICAqL1xuICAgICdlbGVtZW50V2lkdGgnOiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tDcmVhdGVEdG9cbiAgICAgKi9cbiAgICAnZWxlbWVudEhlaWdodCc6IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBGZWVkYmFja0NyZWF0ZUR0b1xuICAgICAqL1xuICAgICd4JzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrQ3JlYXRlRHRvXG4gICAgICovXG4gICAgJ3knOiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tDcmVhdGVEdG9cbiAgICAgKi9cbiAgICAnY29tbWVudCc6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBGZWVkYmFja0NyZWF0ZUR0b1xuICAgICAqL1xuICAgICdwYXRoJzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrQ3JlYXRlRHRvXG4gICAgICovXG4gICAgJ3Byb2plY3RJZCc6IHN0cmluZztcbn1cbi8qKlxuICogXG4gKiBAZXhwb3J0XG4gKiBAaW50ZXJmYWNlIEZlZWRiYWNrUmVzcG9uc2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGZWVkYmFja1Jlc3BvbnNlIHtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBGZWVkYmFja1Jlc3BvbnNlXG4gICAgICovXG4gICAgJ2lkJzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrUmVzcG9uc2VcbiAgICAgKi9cbiAgICAnY3JlYXRlZEF0Jzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrUmVzcG9uc2VcbiAgICAgKi9cbiAgICAndXBkYXRlZEF0Jzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrUmVzcG9uc2VcbiAgICAgKi9cbiAgICAnZWxlbWVudElkJzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrUmVzcG9uc2VcbiAgICAgKi9cbiAgICAnZWxlbWVudEluZGV4JzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrUmVzcG9uc2VcbiAgICAgKi9cbiAgICAnZWxlbWVudFdpZHRoJzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrUmVzcG9uc2VcbiAgICAgKi9cbiAgICAnZWxlbWVudEhlaWdodCc6IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBGZWVkYmFja1Jlc3BvbnNlXG4gICAgICovXG4gICAgJ3gnOiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tSZXNwb25zZVxuICAgICAqL1xuICAgICd5JzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBGZWVkYmFja1Jlc3BvbnNlXG4gICAgICovXG4gICAgJ2lzUmVzb2x2ZWQnOiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrUmVzcG9uc2VcbiAgICAgKi9cbiAgICAnY29tbWVudCc6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBGZWVkYmFja1Jlc3BvbnNlXG4gICAgICovXG4gICAgJ3BhdGgnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge0FycmF5PFJlcGx5UmVzcG9uc2U+fVxuICAgICAqIEBtZW1iZXJvZiBGZWVkYmFja1Jlc3BvbnNlXG4gICAgICovXG4gICAgJ3JlcGxpZXMnOiBBcnJheTxSZXBseVJlc3BvbnNlPjtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7VXNlclN1bW1hcnlSZXNwb25zZX1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tSZXNwb25zZVxuICAgICAqL1xuICAgICd1c2VyJzogVXNlclN1bW1hcnlSZXNwb25zZTtcbn1cbi8qKlxuICogXG4gKiBAZXhwb3J0XG4gKiBAaW50ZXJmYWNlIEZlZWRiYWNrVXBkYXRlRHRvXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmVlZGJhY2tVcGRhdGVEdG8ge1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrVXBkYXRlRHRvXG4gICAgICovXG4gICAgJ2VsZW1lbnRJZCc/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tVcGRhdGVEdG9cbiAgICAgKi9cbiAgICAnZWxlbWVudEluZGV4Jz86IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBGZWVkYmFja1VwZGF0ZUR0b1xuICAgICAqL1xuICAgICdlbGVtZW50V2lkdGgnPzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrVXBkYXRlRHRvXG4gICAgICovXG4gICAgJ2VsZW1lbnRIZWlnaHQnPzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrVXBkYXRlRHRvXG4gICAgICovXG4gICAgJ3gnPzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrVXBkYXRlRHRvXG4gICAgICovXG4gICAgJ3knPzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrVXBkYXRlRHRvXG4gICAgICovXG4gICAgJ2NvbW1lbnQnPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrVXBkYXRlRHRvXG4gICAgICovXG4gICAgJ3BhdGgnPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrVXBkYXRlRHRvXG4gICAgICovXG4gICAgJ3Byb2plY3RJZCc/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrVXBkYXRlRHRvXG4gICAgICovXG4gICAgJ2lzUmVzb2x2ZWQnOiBib29sZWFuO1xufVxuLyoqXG4gKiBcbiAqIEBleHBvcnRcbiAqIEBpbnRlcmZhY2UgUHJvamVjdFJlc3BvbnNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvamVjdFJlc3BvbnNlIHtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBQcm9qZWN0UmVzcG9uc2VcbiAgICAgKi9cbiAgICAnaWQnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgUHJvamVjdFJlc3BvbnNlXG4gICAgICovXG4gICAgJ25hbWUnOiBzdHJpbmc7XG59XG4vKipcbiAqIFxuICogQGV4cG9ydFxuICogQGludGVyZmFjZSBSZXBseVJlc3BvbnNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVwbHlSZXNwb25zZSB7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgUmVwbHlSZXNwb25zZVxuICAgICAqL1xuICAgICdpZCc6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBSZXBseVJlc3BvbnNlXG4gICAgICovXG4gICAgJ2NyZWF0ZWRBdCc6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBSZXBseVJlc3BvbnNlXG4gICAgICovXG4gICAgJ3VwZGF0ZWRBdCc6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBSZXBseVJlc3BvbnNlXG4gICAgICovXG4gICAgJ2ZlZWRiYWNrSWQnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgUmVwbHlSZXNwb25zZVxuICAgICAqL1xuICAgICd1c2VySWQnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgUmVwbHlSZXNwb25zZVxuICAgICAqL1xuICAgICdjb21tZW50Jzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtVc2VyU3VtbWFyeVJlc3BvbnNlfVxuICAgICAqIEBtZW1iZXJvZiBSZXBseVJlc3BvbnNlXG4gICAgICovXG4gICAgJ3VzZXInOiBVc2VyU3VtbWFyeVJlc3BvbnNlO1xufVxuLyoqXG4gKiBcbiAqIEBleHBvcnRcbiAqIEBpbnRlcmZhY2UgU2lnbkluRHRvXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbkluRHRvIHtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBTaWduSW5EdG9cbiAgICAgKi9cbiAgICAnZW1haWwnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgU2lnbkluRHRvXG4gICAgICovXG4gICAgJ3Bhc3N3b3JkJzogc3RyaW5nO1xufVxuLyoqXG4gKiBcbiAqIEBleHBvcnRcbiAqIEBpbnRlcmZhY2UgU2lnbkluUmVzcG9uc2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTaWduSW5SZXNwb25zZSB7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgU2lnbkluUmVzcG9uc2VcbiAgICAgKi9cbiAgICAnYWNjZXNzVG9rZW4nOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgU2lnbkluUmVzcG9uc2VcbiAgICAgKi9cbiAgICAncmVmcmVzaFRva2VuJzogc3RyaW5nO1xufVxuLyoqXG4gKiBcbiAqIEBleHBvcnRcbiAqIEBpbnRlcmZhY2UgU2lnblVwRHRvXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2lnblVwRHRvIHtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBTaWduVXBEdG9cbiAgICAgKi9cbiAgICAnZW1haWwnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgU2lnblVwRHRvXG4gICAgICovXG4gICAgJ3Bhc3N3b3JkJzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFNpZ25VcER0b1xuICAgICAqL1xuICAgICdmaXJzdE5hbWUnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgU2lnblVwRHRvXG4gICAgICovXG4gICAgJ2xhc3ROYW1lJzogc3RyaW5nO1xufVxuLyoqXG4gKiBcbiAqIEBleHBvcnRcbiAqIEBpbnRlcmZhY2UgU2lnblVwUmVzcG9uc2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTaWduVXBSZXNwb25zZSB7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgU2lnblVwUmVzcG9uc2VcbiAgICAgKi9cbiAgICAnYWNjZXNzVG9rZW4nOiBzdHJpbmc7XG59XG4vKipcbiAqIFxuICogQGV4cG9ydFxuICogQGludGVyZmFjZSBVc2VyU3VtbWFyeVJlc3BvbnNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclN1bW1hcnlSZXNwb25zZSB7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgVXNlclN1bW1hcnlSZXNwb25zZVxuICAgICAqL1xuICAgICdpZCc6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBVc2VyU3VtbWFyeVJlc3BvbnNlXG4gICAgICovXG4gICAgJ2VtYWlsJzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFVzZXJTdW1tYXJ5UmVzcG9uc2VcbiAgICAgKi9cbiAgICAnZmlyc3ROYW1lJzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFVzZXJTdW1tYXJ5UmVzcG9uc2VcbiAgICAgKi9cbiAgICAnbGFzdE5hbWUnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgVXNlclN1bW1hcnlSZXNwb25zZVxuICAgICAqL1xuICAgICdmdWxsTmFtZSc6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBVc2VyU3VtbWFyeVJlc3BvbnNlXG4gICAgICovXG4gICAgJ2F2YXRhclVybCc6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7QXJyYXk8Q29sbGFib3JhdGlvbnNSZXNwb25zZT59XG4gICAgICogQG1lbWJlcm9mIFVzZXJTdW1tYXJ5UmVzcG9uc2VcbiAgICAgKi9cbiAgICAnY29sbGFib3JhdGlvbnMnOiBBcnJheTxDb2xsYWJvcmF0aW9uc1Jlc3BvbnNlPjtcbn1cblxuLyoqXG4gKiBBcHBBcGkgLSBheGlvcyBwYXJhbWV0ZXIgY3JlYXRvclxuICogQGV4cG9ydFxuICovXG5leHBvcnQgY29uc3QgQXBwQXBpQXhpb3NQYXJhbUNyZWF0b3IgPSBmdW5jdGlvbiAoY29uZmlndXJhdGlvbj86IENvbmZpZ3VyYXRpb24pIHtcbiAgICByZXR1cm4ge1xuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBhcHBDb250cm9sbGVyR2V0SGVsbG86IGFzeW5jIChvcHRpb25zOiBSYXdBeGlvc1JlcXVlc3RDb25maWcgPSB7fSk6IFByb21pc2U8UmVxdWVzdEFyZ3M+ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUGF0aCA9IGAvYDtcbiAgICAgICAgICAgIC8vIHVzZSBkdW1teSBiYXNlIFVSTCBzdHJpbmcgYmVjYXVzZSB0aGUgVVJMIGNvbnN0cnVjdG9yIG9ubHkgYWNjZXB0cyBhYnNvbHV0ZSBVUkxzLlxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJVcmxPYmogPSBuZXcgVVJMKGxvY2FsVmFyUGF0aCwgRFVNTVlfQkFTRV9VUkwpO1xuICAgICAgICAgICAgbGV0IGJhc2VPcHRpb25zO1xuICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgICAgICBiYXNlT3B0aW9ucyA9IGNvbmZpZ3VyYXRpb24uYmFzZU9wdGlvbnM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMgPSB7IG1ldGhvZDogJ0dFVCcsIC4uLmJhc2VPcHRpb25zLCAuLi5vcHRpb25zfTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFySGVhZGVyUGFyYW1ldGVyID0ge30gYXMgYW55O1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJRdWVyeVBhcmFtZXRlciA9IHt9IGFzIGFueTtcblxuXG4gICAgXG4gICAgICAgICAgICBzZXRTZWFyY2hQYXJhbXMobG9jYWxWYXJVcmxPYmosIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXIpO1xuICAgICAgICAgICAgbGV0IGhlYWRlcnNGcm9tQmFzZU9wdGlvbnMgPSBiYXNlT3B0aW9ucyAmJiBiYXNlT3B0aW9ucy5oZWFkZXJzID8gYmFzZU9wdGlvbnMuaGVhZGVycyA6IHt9O1xuICAgICAgICAgICAgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID0gey4uLmxvY2FsVmFySGVhZGVyUGFyYW1ldGVyLCAuLi5oZWFkZXJzRnJvbUJhc2VPcHRpb25zLCAuLi5vcHRpb25zLmhlYWRlcnN9O1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHVybDogdG9QYXRoU3RyaW5nKGxvY2FsVmFyVXJsT2JqKSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBsb2NhbFZhclJlcXVlc3RPcHRpb25zLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcEFwaSAtIGZ1bmN0aW9uYWwgcHJvZ3JhbW1pbmcgaW50ZXJmYWNlXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBBcHBBcGlGcCA9IGZ1bmN0aW9uKGNvbmZpZ3VyYXRpb24/OiBDb25maWd1cmF0aW9uKSB7XG4gICAgY29uc3QgbG9jYWxWYXJBeGlvc1BhcmFtQ3JlYXRvciA9IEFwcEFwaUF4aW9zUGFyYW1DcmVhdG9yKGNvbmZpZ3VyYXRpb24pXG4gICAgcmV0dXJuIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgYXN5bmMgYXBwQ29udHJvbGxlckdldEhlbGxvKG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpOiBQcm9taXNlPChheGlvcz86IEF4aW9zSW5zdGFuY2UsIGJhc2VQYXRoPzogc3RyaW5nKSA9PiBBeGlvc1Byb21pc2U8dm9pZD4+IHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyQXhpb3NBcmdzID0gYXdhaXQgbG9jYWxWYXJBeGlvc1BhcmFtQ3JlYXRvci5hcHBDb250cm9sbGVyR2V0SGVsbG8ob3B0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckluZGV4ID0gY29uZmlndXJhdGlvbj8uc2VydmVySW5kZXggPz8gMDtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyT3BlcmF0aW9uU2VydmVyQmFzZVBhdGggPSBvcGVyYXRpb25TZXJ2ZXJNYXBbJ0FwcEFwaS5hcHBDb250cm9sbGVyR2V0SGVsbG8nXT8uW2xvY2FsVmFyT3BlcmF0aW9uU2VydmVySW5kZXhdPy51cmw7XG4gICAgICAgICAgICByZXR1cm4gKGF4aW9zLCBiYXNlUGF0aCkgPT4gY3JlYXRlUmVxdWVzdEZ1bmN0aW9uKGxvY2FsVmFyQXhpb3NBcmdzLCBnbG9iYWxBeGlvcywgQkFTRV9QQVRILCBjb25maWd1cmF0aW9uKShheGlvcywgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJCYXNlUGF0aCB8fCBiYXNlUGF0aCk7XG4gICAgICAgIH0sXG4gICAgfVxufTtcblxuLyoqXG4gKiBBcHBBcGkgLSBmYWN0b3J5IGludGVyZmFjZVxuICogQGV4cG9ydFxuICovXG5leHBvcnQgY29uc3QgQXBwQXBpRmFjdG9yeSA9IGZ1bmN0aW9uIChjb25maWd1cmF0aW9uPzogQ29uZmlndXJhdGlvbiwgYmFzZVBhdGg/OiBzdHJpbmcsIGF4aW9zPzogQXhpb3NJbnN0YW5jZSkge1xuICAgIGNvbnN0IGxvY2FsVmFyRnAgPSBBcHBBcGlGcChjb25maWd1cmF0aW9uKVxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIGFwcENvbnRyb2xsZXJHZXRIZWxsbyhvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKTogQXhpb3NQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbFZhckZwLmFwcENvbnRyb2xsZXJHZXRIZWxsbyhvcHRpb25zKS50aGVuKChyZXF1ZXN0KSA9PiByZXF1ZXN0KGF4aW9zLCBiYXNlUGF0aCkpO1xuICAgICAgICB9LFxuICAgIH07XG59O1xuXG4vKipcbiAqIEFwcEFwaSAtIG9iamVjdC1vcmllbnRlZCBpbnRlcmZhY2VcbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBBcHBBcGlcbiAqIEBleHRlbmRzIHtCYXNlQVBJfVxuICovXG5leHBvcnQgY2xhc3MgQXBwQXBpIGV4dGVuZHMgQmFzZUFQSSB7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAqIEBtZW1iZXJvZiBBcHBBcGlcbiAgICAgKi9cbiAgICBwdWJsaWMgYXBwQ29udHJvbGxlckdldEhlbGxvKG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpIHtcbiAgICAgICAgcmV0dXJuIEFwcEFwaUZwKHRoaXMuY29uZmlndXJhdGlvbikuYXBwQ29udHJvbGxlckdldEhlbGxvKG9wdGlvbnMpLnRoZW4oKHJlcXVlc3QpID0+IHJlcXVlc3QodGhpcy5heGlvcywgdGhpcy5iYXNlUGF0aCkpO1xuICAgIH1cbn1cblxuXG5cbi8qKlxuICogQXV0aEFwaSAtIGF4aW9zIHBhcmFtZXRlciBjcmVhdG9yXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBBdXRoQXBpQXhpb3NQYXJhbUNyZWF0b3IgPSBmdW5jdGlvbiAoY29uZmlndXJhdGlvbj86IENvbmZpZ3VyYXRpb24pIHtcbiAgICByZXR1cm4ge1xuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZWRpcmVjdFVybCBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIGF1dGhDb250cm9sbGVyR2l0aHViQ2FsbGJhY2s6IGFzeW5jIChyZWRpcmVjdFVybDogc3RyaW5nLCBvcHRpb25zOiBSYXdBeGlvc1JlcXVlc3RDb25maWcgPSB7fSk6IFByb21pc2U8UmVxdWVzdEFyZ3M+ID0+IHtcbiAgICAgICAgICAgIC8vIHZlcmlmeSByZXF1aXJlZCBwYXJhbWV0ZXIgJ3JlZGlyZWN0VXJsJyBpcyBub3QgbnVsbCBvciB1bmRlZmluZWRcbiAgICAgICAgICAgIGFzc2VydFBhcmFtRXhpc3RzKCdhdXRoQ29udHJvbGxlckdpdGh1YkNhbGxiYWNrJywgJ3JlZGlyZWN0VXJsJywgcmVkaXJlY3RVcmwpXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclBhdGggPSBgL2F1dGgvZ2l0aHViL2NhbGxiYWNrYDtcbiAgICAgICAgICAgIC8vIHVzZSBkdW1teSBiYXNlIFVSTCBzdHJpbmcgYmVjYXVzZSB0aGUgVVJMIGNvbnN0cnVjdG9yIG9ubHkgYWNjZXB0cyBhYnNvbHV0ZSBVUkxzLlxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJVcmxPYmogPSBuZXcgVVJMKGxvY2FsVmFyUGF0aCwgRFVNTVlfQkFTRV9VUkwpO1xuICAgICAgICAgICAgbGV0IGJhc2VPcHRpb25zO1xuICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgICAgICBiYXNlT3B0aW9ucyA9IGNvbmZpZ3VyYXRpb24uYmFzZU9wdGlvbnM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMgPSB7IG1ldGhvZDogJ0dFVCcsIC4uLmJhc2VPcHRpb25zLCAuLi5vcHRpb25zfTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFySGVhZGVyUGFyYW1ldGVyID0ge30gYXMgYW55O1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJRdWVyeVBhcmFtZXRlciA9IHt9IGFzIGFueTtcblxuICAgICAgICAgICAgaWYgKHJlZGlyZWN0VXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyWydyZWRpcmVjdFVybCddID0gcmVkaXJlY3RVcmw7XG4gICAgICAgICAgICB9XG5cblxuICAgIFxuICAgICAgICAgICAgc2V0U2VhcmNoUGFyYW1zKGxvY2FsVmFyVXJsT2JqLCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyKTtcbiAgICAgICAgICAgIGxldCBoZWFkZXJzRnJvbUJhc2VPcHRpb25zID0gYmFzZU9wdGlvbnMgJiYgYmFzZU9wdGlvbnMuaGVhZGVycyA/IGJhc2VPcHRpb25zLmhlYWRlcnMgOiB7fTtcbiAgICAgICAgICAgIGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9IHsuLi5sb2NhbFZhckhlYWRlclBhcmFtZXRlciwgLi4uaGVhZGVyc0Zyb21CYXNlT3B0aW9ucywgLi4ub3B0aW9ucy5oZWFkZXJzfTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB1cmw6IHRvUGF0aFN0cmluZyhsb2NhbFZhclVybE9iaiksXG4gICAgICAgICAgICAgICAgb3B0aW9uczogbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIGF1dGhDb250cm9sbGVyR2l0aHViTG9naW46IGFzeW5jIChvcHRpb25zOiBSYXdBeGlvc1JlcXVlc3RDb25maWcgPSB7fSk6IFByb21pc2U8UmVxdWVzdEFyZ3M+ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUGF0aCA9IGAvYXV0aC9naXRodWJgO1xuICAgICAgICAgICAgLy8gdXNlIGR1bW15IGJhc2UgVVJMIHN0cmluZyBiZWNhdXNlIHRoZSBVUkwgY29uc3RydWN0b3Igb25seSBhY2NlcHRzIGFic29sdXRlIFVSTHMuXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclVybE9iaiA9IG5ldyBVUkwobG9jYWxWYXJQYXRoLCBEVU1NWV9CQVNFX1VSTCk7XG4gICAgICAgICAgICBsZXQgYmFzZU9wdGlvbnM7XG4gICAgICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgICAgIGJhc2VPcHRpb25zID0gY29uZmlndXJhdGlvbi5iYXNlT3B0aW9ucztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucyA9IHsgbWV0aG9kOiAnR0VUJywgLi4uYmFzZU9wdGlvbnMsIC4uLm9wdGlvbnN9O1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyID0ge30gYXMgYW55O1xuXG5cbiAgICBcbiAgICAgICAgICAgIHNldFNlYXJjaFBhcmFtcyhsb2NhbFZhclVybE9iaiwgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcik7XG4gICAgICAgICAgICBsZXQgaGVhZGVyc0Zyb21CYXNlT3B0aW9ucyA9IGJhc2VPcHRpb25zICYmIGJhc2VPcHRpb25zLmhlYWRlcnMgPyBiYXNlT3B0aW9ucy5oZWFkZXJzIDoge307XG4gICAgICAgICAgICBsb2NhbFZhclJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPSB7Li4ubG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIsIC4uLmhlYWRlcnNGcm9tQmFzZU9wdGlvbnMsIC4uLm9wdGlvbnMuaGVhZGVyc307XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdXJsOiB0b1BhdGhTdHJpbmcobG9jYWxWYXJVcmxPYmopLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7U2lnbkluRHRvfSBzaWduSW5EdG8gXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBhdXRoQ29udHJvbGxlclNpZ25JbjogYXN5bmMgKHNpZ25JbkR0bzogU2lnbkluRHRvLCBvcHRpb25zOiBSYXdBeGlvc1JlcXVlc3RDb25maWcgPSB7fSk6IFByb21pc2U8UmVxdWVzdEFyZ3M+ID0+IHtcbiAgICAgICAgICAgIC8vIHZlcmlmeSByZXF1aXJlZCBwYXJhbWV0ZXIgJ3NpZ25JbkR0bycgaXMgbm90IG51bGwgb3IgdW5kZWZpbmVkXG4gICAgICAgICAgICBhc3NlcnRQYXJhbUV4aXN0cygnYXV0aENvbnRyb2xsZXJTaWduSW4nLCAnc2lnbkluRHRvJywgc2lnbkluRHRvKVxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJQYXRoID0gYC9hdXRoL3NpZ25pbmA7XG4gICAgICAgICAgICAvLyB1c2UgZHVtbXkgYmFzZSBVUkwgc3RyaW5nIGJlY2F1c2UgdGhlIFVSTCBjb25zdHJ1Y3RvciBvbmx5IGFjY2VwdHMgYWJzb2x1dGUgVVJMcy5cbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyVXJsT2JqID0gbmV3IFVSTChsb2NhbFZhclBhdGgsIERVTU1ZX0JBU0VfVVJMKTtcbiAgICAgICAgICAgIGxldCBiYXNlT3B0aW9ucztcbiAgICAgICAgICAgIGlmIChjb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgYmFzZU9wdGlvbnMgPSBjb25maWd1cmF0aW9uLmJhc2VPcHRpb25zO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclJlcXVlc3RPcHRpb25zID0geyBtZXRob2Q6ICdQT1NUJywgLi4uYmFzZU9wdGlvbnMsIC4uLm9wdGlvbnN9O1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyID0ge30gYXMgYW55O1xuXG5cbiAgICBcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVyUGFyYW1ldGVyWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29uJztcblxuICAgICAgICAgICAgc2V0U2VhcmNoUGFyYW1zKGxvY2FsVmFyVXJsT2JqLCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyKTtcbiAgICAgICAgICAgIGxldCBoZWFkZXJzRnJvbUJhc2VPcHRpb25zID0gYmFzZU9wdGlvbnMgJiYgYmFzZU9wdGlvbnMuaGVhZGVycyA/IGJhc2VPcHRpb25zLmhlYWRlcnMgOiB7fTtcbiAgICAgICAgICAgIGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9IHsuLi5sb2NhbFZhckhlYWRlclBhcmFtZXRlciwgLi4uaGVhZGVyc0Zyb21CYXNlT3B0aW9ucywgLi4ub3B0aW9ucy5oZWFkZXJzfTtcbiAgICAgICAgICAgIGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMuZGF0YSA9IHNlcmlhbGl6ZURhdGFJZk5lZWRlZChzaWduSW5EdG8sIGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMsIGNvbmZpZ3VyYXRpb24pXG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdXJsOiB0b1BhdGhTdHJpbmcobG9jYWxWYXJVcmxPYmopLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7U2lnblVwRHRvfSBzaWduVXBEdG8gXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBhdXRoQ29udHJvbGxlclNpZ25VcDogYXN5bmMgKHNpZ25VcER0bzogU2lnblVwRHRvLCBvcHRpb25zOiBSYXdBeGlvc1JlcXVlc3RDb25maWcgPSB7fSk6IFByb21pc2U8UmVxdWVzdEFyZ3M+ID0+IHtcbiAgICAgICAgICAgIC8vIHZlcmlmeSByZXF1aXJlZCBwYXJhbWV0ZXIgJ3NpZ25VcER0bycgaXMgbm90IG51bGwgb3IgdW5kZWZpbmVkXG4gICAgICAgICAgICBhc3NlcnRQYXJhbUV4aXN0cygnYXV0aENvbnRyb2xsZXJTaWduVXAnLCAnc2lnblVwRHRvJywgc2lnblVwRHRvKVxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJQYXRoID0gYC9hdXRoL3NpZ251cGA7XG4gICAgICAgICAgICAvLyB1c2UgZHVtbXkgYmFzZSBVUkwgc3RyaW5nIGJlY2F1c2UgdGhlIFVSTCBjb25zdHJ1Y3RvciBvbmx5IGFjY2VwdHMgYWJzb2x1dGUgVVJMcy5cbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyVXJsT2JqID0gbmV3IFVSTChsb2NhbFZhclBhdGgsIERVTU1ZX0JBU0VfVVJMKTtcbiAgICAgICAgICAgIGxldCBiYXNlT3B0aW9ucztcbiAgICAgICAgICAgIGlmIChjb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgYmFzZU9wdGlvbnMgPSBjb25maWd1cmF0aW9uLmJhc2VPcHRpb25zO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclJlcXVlc3RPcHRpb25zID0geyBtZXRob2Q6ICdQT1NUJywgLi4uYmFzZU9wdGlvbnMsIC4uLm9wdGlvbnN9O1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyID0ge30gYXMgYW55O1xuXG5cbiAgICBcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVyUGFyYW1ldGVyWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29uJztcblxuICAgICAgICAgICAgc2V0U2VhcmNoUGFyYW1zKGxvY2FsVmFyVXJsT2JqLCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyKTtcbiAgICAgICAgICAgIGxldCBoZWFkZXJzRnJvbUJhc2VPcHRpb25zID0gYmFzZU9wdGlvbnMgJiYgYmFzZU9wdGlvbnMuaGVhZGVycyA/IGJhc2VPcHRpb25zLmhlYWRlcnMgOiB7fTtcbiAgICAgICAgICAgIGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9IHsuLi5sb2NhbFZhckhlYWRlclBhcmFtZXRlciwgLi4uaGVhZGVyc0Zyb21CYXNlT3B0aW9ucywgLi4ub3B0aW9ucy5oZWFkZXJzfTtcbiAgICAgICAgICAgIGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMuZGF0YSA9IHNlcmlhbGl6ZURhdGFJZk5lZWRlZChzaWduVXBEdG8sIGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMsIGNvbmZpZ3VyYXRpb24pXG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdXJsOiB0b1BhdGhTdHJpbmcobG9jYWxWYXJVcmxPYmopLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgIH1cbn07XG5cbi8qKlxuICogQXV0aEFwaSAtIGZ1bmN0aW9uYWwgcHJvZ3JhbW1pbmcgaW50ZXJmYWNlXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBBdXRoQXBpRnAgPSBmdW5jdGlvbihjb25maWd1cmF0aW9uPzogQ29uZmlndXJhdGlvbikge1xuICAgIGNvbnN0IGxvY2FsVmFyQXhpb3NQYXJhbUNyZWF0b3IgPSBBdXRoQXBpQXhpb3NQYXJhbUNyZWF0b3IoY29uZmlndXJhdGlvbilcbiAgICByZXR1cm4ge1xuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZWRpcmVjdFVybCBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIGFzeW5jIGF1dGhDb250cm9sbGVyR2l0aHViQ2FsbGJhY2socmVkaXJlY3RVcmw6IHN0cmluZywgb3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IFByb21pc2U8KGF4aW9zPzogQXhpb3NJbnN0YW5jZSwgYmFzZVBhdGg/OiBzdHJpbmcpID0+IEF4aW9zUHJvbWlzZTx2b2lkPj4ge1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJBeGlvc0FyZ3MgPSBhd2FpdCBsb2NhbFZhckF4aW9zUGFyYW1DcmVhdG9yLmF1dGhDb250cm9sbGVyR2l0aHViQ2FsbGJhY2socmVkaXJlY3RVcmwsIG9wdGlvbnMpO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJJbmRleCA9IGNvbmZpZ3VyYXRpb24/LnNlcnZlckluZGV4ID8/IDA7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckJhc2VQYXRoID0gb3BlcmF0aW9uU2VydmVyTWFwWydBdXRoQXBpLmF1dGhDb250cm9sbGVyR2l0aHViQ2FsbGJhY2snXT8uW2xvY2FsVmFyT3BlcmF0aW9uU2VydmVySW5kZXhdPy51cmw7XG4gICAgICAgICAgICByZXR1cm4gKGF4aW9zLCBiYXNlUGF0aCkgPT4gY3JlYXRlUmVxdWVzdEZ1bmN0aW9uKGxvY2FsVmFyQXhpb3NBcmdzLCBnbG9iYWxBeGlvcywgQkFTRV9QQVRILCBjb25maWd1cmF0aW9uKShheGlvcywgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJCYXNlUGF0aCB8fCBiYXNlUGF0aCk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIGFzeW5jIGF1dGhDb250cm9sbGVyR2l0aHViTG9naW4ob3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IFByb21pc2U8KGF4aW9zPzogQXhpb3NJbnN0YW5jZSwgYmFzZVBhdGg/OiBzdHJpbmcpID0+IEF4aW9zUHJvbWlzZTx2b2lkPj4ge1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJBeGlvc0FyZ3MgPSBhd2FpdCBsb2NhbFZhckF4aW9zUGFyYW1DcmVhdG9yLmF1dGhDb250cm9sbGVyR2l0aHViTG9naW4ob3B0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckluZGV4ID0gY29uZmlndXJhdGlvbj8uc2VydmVySW5kZXggPz8gMDtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyT3BlcmF0aW9uU2VydmVyQmFzZVBhdGggPSBvcGVyYXRpb25TZXJ2ZXJNYXBbJ0F1dGhBcGkuYXV0aENvbnRyb2xsZXJHaXRodWJMb2dpbiddPy5bbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJJbmRleF0/LnVybDtcbiAgICAgICAgICAgIHJldHVybiAoYXhpb3MsIGJhc2VQYXRoKSA9PiBjcmVhdGVSZXF1ZXN0RnVuY3Rpb24obG9jYWxWYXJBeGlvc0FyZ3MsIGdsb2JhbEF4aW9zLCBCQVNFX1BBVEgsIGNvbmZpZ3VyYXRpb24pKGF4aW9zLCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckJhc2VQYXRoIHx8IGJhc2VQYXRoKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0ge1NpZ25JbkR0b30gc2lnbkluRHRvIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgYXN5bmMgYXV0aENvbnRyb2xsZXJTaWduSW4oc2lnbkluRHRvOiBTaWduSW5EdG8sIG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpOiBQcm9taXNlPChheGlvcz86IEF4aW9zSW5zdGFuY2UsIGJhc2VQYXRoPzogc3RyaW5nKSA9PiBBeGlvc1Byb21pc2U8U2lnbkluUmVzcG9uc2U+PiB7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhckF4aW9zQXJncyA9IGF3YWl0IGxvY2FsVmFyQXhpb3NQYXJhbUNyZWF0b3IuYXV0aENvbnRyb2xsZXJTaWduSW4oc2lnbkluRHRvLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyT3BlcmF0aW9uU2VydmVySW5kZXggPSBjb25maWd1cmF0aW9uPy5zZXJ2ZXJJbmRleCA/PyAwO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJCYXNlUGF0aCA9IG9wZXJhdGlvblNlcnZlck1hcFsnQXV0aEFwaS5hdXRoQ29udHJvbGxlclNpZ25JbiddPy5bbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJJbmRleF0/LnVybDtcbiAgICAgICAgICAgIHJldHVybiAoYXhpb3MsIGJhc2VQYXRoKSA9PiBjcmVhdGVSZXF1ZXN0RnVuY3Rpb24obG9jYWxWYXJBeGlvc0FyZ3MsIGdsb2JhbEF4aW9zLCBCQVNFX1BBVEgsIGNvbmZpZ3VyYXRpb24pKGF4aW9zLCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckJhc2VQYXRoIHx8IGJhc2VQYXRoKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0ge1NpZ25VcER0b30gc2lnblVwRHRvIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgYXN5bmMgYXV0aENvbnRyb2xsZXJTaWduVXAoc2lnblVwRHRvOiBTaWduVXBEdG8sIG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpOiBQcm9taXNlPChheGlvcz86IEF4aW9zSW5zdGFuY2UsIGJhc2VQYXRoPzogc3RyaW5nKSA9PiBBeGlvc1Byb21pc2U8U2lnblVwUmVzcG9uc2U+PiB7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhckF4aW9zQXJncyA9IGF3YWl0IGxvY2FsVmFyQXhpb3NQYXJhbUNyZWF0b3IuYXV0aENvbnRyb2xsZXJTaWduVXAoc2lnblVwRHRvLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyT3BlcmF0aW9uU2VydmVySW5kZXggPSBjb25maWd1cmF0aW9uPy5zZXJ2ZXJJbmRleCA/PyAwO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJCYXNlUGF0aCA9IG9wZXJhdGlvblNlcnZlck1hcFsnQXV0aEFwaS5hdXRoQ29udHJvbGxlclNpZ25VcCddPy5bbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJJbmRleF0/LnVybDtcbiAgICAgICAgICAgIHJldHVybiAoYXhpb3MsIGJhc2VQYXRoKSA9PiBjcmVhdGVSZXF1ZXN0RnVuY3Rpb24obG9jYWxWYXJBeGlvc0FyZ3MsIGdsb2JhbEF4aW9zLCBCQVNFX1BBVEgsIGNvbmZpZ3VyYXRpb24pKGF4aW9zLCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckJhc2VQYXRoIHx8IGJhc2VQYXRoKTtcbiAgICAgICAgfSxcbiAgICB9XG59O1xuXG4vKipcbiAqIEF1dGhBcGkgLSBmYWN0b3J5IGludGVyZmFjZVxuICogQGV4cG9ydFxuICovXG5leHBvcnQgY29uc3QgQXV0aEFwaUZhY3RvcnkgPSBmdW5jdGlvbiAoY29uZmlndXJhdGlvbj86IENvbmZpZ3VyYXRpb24sIGJhc2VQYXRoPzogc3RyaW5nLCBheGlvcz86IEF4aW9zSW5zdGFuY2UpIHtcbiAgICBjb25zdCBsb2NhbFZhckZwID0gQXV0aEFwaUZwKGNvbmZpZ3VyYXRpb24pXG4gICAgcmV0dXJuIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmVkaXJlY3RVcmwgXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBhdXRoQ29udHJvbGxlckdpdGh1YkNhbGxiYWNrKHJlZGlyZWN0VXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpOiBBeGlvc1Byb21pc2U8dm9pZD4ge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsVmFyRnAuYXV0aENvbnRyb2xsZXJHaXRodWJDYWxsYmFjayhyZWRpcmVjdFVybCwgb3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdChheGlvcywgYmFzZVBhdGgpKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgYXV0aENvbnRyb2xsZXJHaXRodWJMb2dpbihvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKTogQXhpb3NQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbFZhckZwLmF1dGhDb250cm9sbGVyR2l0aHViTG9naW4ob3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdChheGlvcywgYmFzZVBhdGgpKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0ge1NpZ25JbkR0b30gc2lnbkluRHRvIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgYXV0aENvbnRyb2xsZXJTaWduSW4oc2lnbkluRHRvOiBTaWduSW5EdG8sIG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpOiBBeGlvc1Byb21pc2U8U2lnbkluUmVzcG9uc2U+IHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbFZhckZwLmF1dGhDb250cm9sbGVyU2lnbkluKHNpZ25JbkR0bywgb3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdChheGlvcywgYmFzZVBhdGgpKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0ge1NpZ25VcER0b30gc2lnblVwRHRvIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgYXV0aENvbnRyb2xsZXJTaWduVXAoc2lnblVwRHRvOiBTaWduVXBEdG8sIG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpOiBBeGlvc1Byb21pc2U8U2lnblVwUmVzcG9uc2U+IHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbFZhckZwLmF1dGhDb250cm9sbGVyU2lnblVwKHNpZ25VcER0bywgb3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdChheGlvcywgYmFzZVBhdGgpKTtcbiAgICAgICAgfSxcbiAgICB9O1xufTtcblxuLyoqXG4gKiBBdXRoQXBpIC0gb2JqZWN0LW9yaWVudGVkIGludGVyZmFjZVxuICogQGV4cG9ydFxuICogQGNsYXNzIEF1dGhBcGlcbiAqIEBleHRlbmRzIHtCYXNlQVBJfVxuICovXG5leHBvcnQgY2xhc3MgQXV0aEFwaSBleHRlbmRzIEJhc2VBUEkge1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZWRpcmVjdFVybCBcbiAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICogQG1lbWJlcm9mIEF1dGhBcGlcbiAgICAgKi9cbiAgICBwdWJsaWMgYXV0aENvbnRyb2xsZXJHaXRodWJDYWxsYmFjayhyZWRpcmVjdFVybDogc3RyaW5nLCBvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKSB7XG4gICAgICAgIHJldHVybiBBdXRoQXBpRnAodGhpcy5jb25maWd1cmF0aW9uKS5hdXRoQ29udHJvbGxlckdpdGh1YkNhbGxiYWNrKHJlZGlyZWN0VXJsLCBvcHRpb25zKS50aGVuKChyZXF1ZXN0KSA9PiByZXF1ZXN0KHRoaXMuYXhpb3MsIHRoaXMuYmFzZVBhdGgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICogQG1lbWJlcm9mIEF1dGhBcGlcbiAgICAgKi9cbiAgICBwdWJsaWMgYXV0aENvbnRyb2xsZXJHaXRodWJMb2dpbihvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKSB7XG4gICAgICAgIHJldHVybiBBdXRoQXBpRnAodGhpcy5jb25maWd1cmF0aW9uKS5hdXRoQ29udHJvbGxlckdpdGh1YkxvZ2luKG9wdGlvbnMpLnRoZW4oKHJlcXVlc3QpID0+IHJlcXVlc3QodGhpcy5heGlvcywgdGhpcy5iYXNlUGF0aCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB7U2lnbkluRHRvfSBzaWduSW5EdG8gXG4gICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAqIEBtZW1iZXJvZiBBdXRoQXBpXG4gICAgICovXG4gICAgcHVibGljIGF1dGhDb250cm9sbGVyU2lnbkluKHNpZ25JbkR0bzogU2lnbkluRHRvLCBvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKSB7XG4gICAgICAgIHJldHVybiBBdXRoQXBpRnAodGhpcy5jb25maWd1cmF0aW9uKS5hdXRoQ29udHJvbGxlclNpZ25JbihzaWduSW5EdG8sIG9wdGlvbnMpLnRoZW4oKHJlcXVlc3QpID0+IHJlcXVlc3QodGhpcy5heGlvcywgdGhpcy5iYXNlUGF0aCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB7U2lnblVwRHRvfSBzaWduVXBEdG8gXG4gICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAqIEBtZW1iZXJvZiBBdXRoQXBpXG4gICAgICovXG4gICAgcHVibGljIGF1dGhDb250cm9sbGVyU2lnblVwKHNpZ25VcER0bzogU2lnblVwRHRvLCBvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKSB7XG4gICAgICAgIHJldHVybiBBdXRoQXBpRnAodGhpcy5jb25maWd1cmF0aW9uKS5hdXRoQ29udHJvbGxlclNpZ25VcChzaWduVXBEdG8sIG9wdGlvbnMpLnRoZW4oKHJlcXVlc3QpID0+IHJlcXVlc3QodGhpcy5heGlvcywgdGhpcy5iYXNlUGF0aCkpO1xuICAgIH1cbn1cblxuXG5cbi8qKlxuICogRmVlZGJhY2tBcGkgLSBheGlvcyBwYXJhbWV0ZXIgY3JlYXRvclxuICogQGV4cG9ydFxuICovXG5leHBvcnQgY29uc3QgRmVlZGJhY2tBcGlBeGlvc1BhcmFtQ3JlYXRvciA9IGZ1bmN0aW9uIChjb25maWd1cmF0aW9uPzogQ29uZmlndXJhdGlvbikge1xuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHtGZWVkYmFja0NyZWF0ZUR0b30gZmVlZGJhY2tDcmVhdGVEdG8gXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBmZWVkYmFja0NvbnRyb2xsZXJDcmVhdGU6IGFzeW5jIChmZWVkYmFja0NyZWF0ZUR0bzogRmVlZGJhY2tDcmVhdGVEdG8sIG9wdGlvbnM6IFJhd0F4aW9zUmVxdWVzdENvbmZpZyA9IHt9KTogUHJvbWlzZTxSZXF1ZXN0QXJncz4gPT4ge1xuICAgICAgICAgICAgLy8gdmVyaWZ5IHJlcXVpcmVkIHBhcmFtZXRlciAnZmVlZGJhY2tDcmVhdGVEdG8nIGlzIG5vdCBudWxsIG9yIHVuZGVmaW5lZFxuICAgICAgICAgICAgYXNzZXJ0UGFyYW1FeGlzdHMoJ2ZlZWRiYWNrQ29udHJvbGxlckNyZWF0ZScsICdmZWVkYmFja0NyZWF0ZUR0bycsIGZlZWRiYWNrQ3JlYXRlRHRvKVxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJQYXRoID0gYC9mZWVkYmFja2A7XG4gICAgICAgICAgICAvLyB1c2UgZHVtbXkgYmFzZSBVUkwgc3RyaW5nIGJlY2F1c2UgdGhlIFVSTCBjb25zdHJ1Y3RvciBvbmx5IGFjY2VwdHMgYWJzb2x1dGUgVVJMcy5cbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyVXJsT2JqID0gbmV3IFVSTChsb2NhbFZhclBhdGgsIERVTU1ZX0JBU0VfVVJMKTtcbiAgICAgICAgICAgIGxldCBiYXNlT3B0aW9ucztcbiAgICAgICAgICAgIGlmIChjb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgYmFzZU9wdGlvbnMgPSBjb25maWd1cmF0aW9uLmJhc2VPcHRpb25zO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclJlcXVlc3RPcHRpb25zID0geyBtZXRob2Q6ICdQT1NUJywgLi4uYmFzZU9wdGlvbnMsIC4uLm9wdGlvbnN9O1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyID0ge30gYXMgYW55O1xuXG5cbiAgICBcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVyUGFyYW1ldGVyWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29uJztcblxuICAgICAgICAgICAgc2V0U2VhcmNoUGFyYW1zKGxvY2FsVmFyVXJsT2JqLCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyKTtcbiAgICAgICAgICAgIGxldCBoZWFkZXJzRnJvbUJhc2VPcHRpb25zID0gYmFzZU9wdGlvbnMgJiYgYmFzZU9wdGlvbnMuaGVhZGVycyA/IGJhc2VPcHRpb25zLmhlYWRlcnMgOiB7fTtcbiAgICAgICAgICAgIGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9IHsuLi5sb2NhbFZhckhlYWRlclBhcmFtZXRlciwgLi4uaGVhZGVyc0Zyb21CYXNlT3B0aW9ucywgLi4ub3B0aW9ucy5oZWFkZXJzfTtcbiAgICAgICAgICAgIGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMuZGF0YSA9IHNlcmlhbGl6ZURhdGFJZk5lZWRlZChmZWVkYmFja0NyZWF0ZUR0bywgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucywgY29uZmlndXJhdGlvbilcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB1cmw6IHRvUGF0aFN0cmluZyhsb2NhbFZhclVybE9iaiksXG4gICAgICAgICAgICAgICAgb3B0aW9uczogbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFxuICAgICAgICAgKiBAcGFyYW0ge29iamVjdH0gYm9keSBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIGZlZWRiYWNrQ29udHJvbGxlckNyZWF0ZVJlcGx5OiBhc3luYyAoaWQ6IHN0cmluZywgYm9keTogb2JqZWN0LCBvcHRpb25zOiBSYXdBeGlvc1JlcXVlc3RDb25maWcgPSB7fSk6IFByb21pc2U8UmVxdWVzdEFyZ3M+ID0+IHtcbiAgICAgICAgICAgIC8vIHZlcmlmeSByZXF1aXJlZCBwYXJhbWV0ZXIgJ2lkJyBpcyBub3QgbnVsbCBvciB1bmRlZmluZWRcbiAgICAgICAgICAgIGFzc2VydFBhcmFtRXhpc3RzKCdmZWVkYmFja0NvbnRyb2xsZXJDcmVhdGVSZXBseScsICdpZCcsIGlkKVxuICAgICAgICAgICAgLy8gdmVyaWZ5IHJlcXVpcmVkIHBhcmFtZXRlciAnYm9keScgaXMgbm90IG51bGwgb3IgdW5kZWZpbmVkXG4gICAgICAgICAgICBhc3NlcnRQYXJhbUV4aXN0cygnZmVlZGJhY2tDb250cm9sbGVyQ3JlYXRlUmVwbHknLCAnYm9keScsIGJvZHkpXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclBhdGggPSBgL2ZlZWRiYWNrL3tpZH0vcmVwbGllc2BcbiAgICAgICAgICAgICAgICAucmVwbGFjZShgeyR7XCJpZFwifX1gLCBlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKGlkKSkpO1xuICAgICAgICAgICAgLy8gdXNlIGR1bW15IGJhc2UgVVJMIHN0cmluZyBiZWNhdXNlIHRoZSBVUkwgY29uc3RydWN0b3Igb25seSBhY2NlcHRzIGFic29sdXRlIFVSTHMuXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclVybE9iaiA9IG5ldyBVUkwobG9jYWxWYXJQYXRoLCBEVU1NWV9CQVNFX1VSTCk7XG4gICAgICAgICAgICBsZXQgYmFzZU9wdGlvbnM7XG4gICAgICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgICAgIGJhc2VPcHRpb25zID0gY29uZmlndXJhdGlvbi5iYXNlT3B0aW9ucztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucyA9IHsgbWV0aG9kOiAnUE9TVCcsIC4uLmJhc2VPcHRpb25zLCAuLi5vcHRpb25zfTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFySGVhZGVyUGFyYW1ldGVyID0ge30gYXMgYW55O1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJRdWVyeVBhcmFtZXRlciA9IHt9IGFzIGFueTtcblxuXG4gICAgXG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlclBhcmFtZXRlclsnQ29udGVudC1UeXBlJ10gPSAnYXBwbGljYXRpb24vanNvbic7XG5cbiAgICAgICAgICAgIHNldFNlYXJjaFBhcmFtcyhsb2NhbFZhclVybE9iaiwgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcik7XG4gICAgICAgICAgICBsZXQgaGVhZGVyc0Zyb21CYXNlT3B0aW9ucyA9IGJhc2VPcHRpb25zICYmIGJhc2VPcHRpb25zLmhlYWRlcnMgPyBiYXNlT3B0aW9ucy5oZWFkZXJzIDoge307XG4gICAgICAgICAgICBsb2NhbFZhclJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPSB7Li4ubG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIsIC4uLmhlYWRlcnNGcm9tQmFzZU9wdGlvbnMsIC4uLm9wdGlvbnMuaGVhZGVyc307XG4gICAgICAgICAgICBsb2NhbFZhclJlcXVlc3RPcHRpb25zLmRhdGEgPSBzZXJpYWxpemVEYXRhSWZOZWVkZWQoYm9keSwgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucywgY29uZmlndXJhdGlvbilcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB1cmw6IHRvUGF0aFN0cmluZyhsb2NhbFZhclVybE9iaiksXG4gICAgICAgICAgICAgICAgb3B0aW9uczogbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgZmVlZGJhY2tDb250cm9sbGVyRGVsZXRlOiBhc3luYyAoaWQ6IHN0cmluZywgb3B0aW9uczogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnID0ge30pOiBQcm9taXNlPFJlcXVlc3RBcmdzPiA9PiB7XG4gICAgICAgICAgICAvLyB2ZXJpZnkgcmVxdWlyZWQgcGFyYW1ldGVyICdpZCcgaXMgbm90IG51bGwgb3IgdW5kZWZpbmVkXG4gICAgICAgICAgICBhc3NlcnRQYXJhbUV4aXN0cygnZmVlZGJhY2tDb250cm9sbGVyRGVsZXRlJywgJ2lkJywgaWQpXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclBhdGggPSBgL2ZlZWRiYWNrL3tpZH1gXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoYHske1wiaWRcIn19YCwgZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyhpZCkpKTtcbiAgICAgICAgICAgIC8vIHVzZSBkdW1teSBiYXNlIFVSTCBzdHJpbmcgYmVjYXVzZSB0aGUgVVJMIGNvbnN0cnVjdG9yIG9ubHkgYWNjZXB0cyBhYnNvbHV0ZSBVUkxzLlxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJVcmxPYmogPSBuZXcgVVJMKGxvY2FsVmFyUGF0aCwgRFVNTVlfQkFTRV9VUkwpO1xuICAgICAgICAgICAgbGV0IGJhc2VPcHRpb25zO1xuICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgICAgICBiYXNlT3B0aW9ucyA9IGNvbmZpZ3VyYXRpb24uYmFzZU9wdGlvbnM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMgPSB7IG1ldGhvZDogJ0RFTEVURScsIC4uLmJhc2VPcHRpb25zLCAuLi5vcHRpb25zfTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFySGVhZGVyUGFyYW1ldGVyID0ge30gYXMgYW55O1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJRdWVyeVBhcmFtZXRlciA9IHt9IGFzIGFueTtcblxuXG4gICAgXG4gICAgICAgICAgICBzZXRTZWFyY2hQYXJhbXMobG9jYWxWYXJVcmxPYmosIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXIpO1xuICAgICAgICAgICAgbGV0IGhlYWRlcnNGcm9tQmFzZU9wdGlvbnMgPSBiYXNlT3B0aW9ucyAmJiBiYXNlT3B0aW9ucy5oZWFkZXJzID8gYmFzZU9wdGlvbnMuaGVhZGVycyA6IHt9O1xuICAgICAgICAgICAgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID0gey4uLmxvY2FsVmFySGVhZGVyUGFyYW1ldGVyLCAuLi5oZWFkZXJzRnJvbUJhc2VPcHRpb25zLCAuLi5vcHRpb25zLmhlYWRlcnN9O1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHVybDogdG9QYXRoU3RyaW5nKGxvY2FsVmFyVXJsT2JqKSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBsb2NhbFZhclJlcXVlc3RPcHRpb25zLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvamVjdElkIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgZmVlZGJhY2tDb250cm9sbGVyRmluZEZlZWRiYWNrQnlQcm9qZWN0SWQ6IGFzeW5jIChwcm9qZWN0SWQ6IHN0cmluZywgb3B0aW9uczogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnID0ge30pOiBQcm9taXNlPFJlcXVlc3RBcmdzPiA9PiB7XG4gICAgICAgICAgICAvLyB2ZXJpZnkgcmVxdWlyZWQgcGFyYW1ldGVyICdwcm9qZWN0SWQnIGlzIG5vdCBudWxsIG9yIHVuZGVmaW5lZFxuICAgICAgICAgICAgYXNzZXJ0UGFyYW1FeGlzdHMoJ2ZlZWRiYWNrQ29udHJvbGxlckZpbmRGZWVkYmFja0J5UHJvamVjdElkJywgJ3Byb2plY3RJZCcsIHByb2plY3RJZClcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUGF0aCA9IGAvZmVlZGJhY2sve3Byb2plY3RJZH1gXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoYHske1wicHJvamVjdElkXCJ9fWAsIGVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcocHJvamVjdElkKSkpO1xuICAgICAgICAgICAgLy8gdXNlIGR1bW15IGJhc2UgVVJMIHN0cmluZyBiZWNhdXNlIHRoZSBVUkwgY29uc3RydWN0b3Igb25seSBhY2NlcHRzIGFic29sdXRlIFVSTHMuXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclVybE9iaiA9IG5ldyBVUkwobG9jYWxWYXJQYXRoLCBEVU1NWV9CQVNFX1VSTCk7XG4gICAgICAgICAgICBsZXQgYmFzZU9wdGlvbnM7XG4gICAgICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgICAgIGJhc2VPcHRpb25zID0gY29uZmlndXJhdGlvbi5iYXNlT3B0aW9ucztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucyA9IHsgbWV0aG9kOiAnR0VUJywgLi4uYmFzZU9wdGlvbnMsIC4uLm9wdGlvbnN9O1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyID0ge30gYXMgYW55O1xuXG5cbiAgICBcbiAgICAgICAgICAgIHNldFNlYXJjaFBhcmFtcyhsb2NhbFZhclVybE9iaiwgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcik7XG4gICAgICAgICAgICBsZXQgaGVhZGVyc0Zyb21CYXNlT3B0aW9ucyA9IGJhc2VPcHRpb25zICYmIGJhc2VPcHRpb25zLmhlYWRlcnMgPyBiYXNlT3B0aW9ucy5oZWFkZXJzIDoge307XG4gICAgICAgICAgICBsb2NhbFZhclJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPSB7Li4ubG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIsIC4uLmhlYWRlcnNGcm9tQmFzZU9wdGlvbnMsIC4uLm9wdGlvbnMuaGVhZGVyc307XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdXJsOiB0b1BhdGhTdHJpbmcobG9jYWxWYXJVcmxPYmopLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBcbiAgICAgICAgICogQHBhcmFtIHtGZWVkYmFja1VwZGF0ZUR0b30gZmVlZGJhY2tVcGRhdGVEdG8gXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBmZWVkYmFja0NvbnRyb2xsZXJVcGRhdGU6IGFzeW5jIChpZDogc3RyaW5nLCBmZWVkYmFja1VwZGF0ZUR0bzogRmVlZGJhY2tVcGRhdGVEdG8sIG9wdGlvbnM6IFJhd0F4aW9zUmVxdWVzdENvbmZpZyA9IHt9KTogUHJvbWlzZTxSZXF1ZXN0QXJncz4gPT4ge1xuICAgICAgICAgICAgLy8gdmVyaWZ5IHJlcXVpcmVkIHBhcmFtZXRlciAnaWQnIGlzIG5vdCBudWxsIG9yIHVuZGVmaW5lZFxuICAgICAgICAgICAgYXNzZXJ0UGFyYW1FeGlzdHMoJ2ZlZWRiYWNrQ29udHJvbGxlclVwZGF0ZScsICdpZCcsIGlkKVxuICAgICAgICAgICAgLy8gdmVyaWZ5IHJlcXVpcmVkIHBhcmFtZXRlciAnZmVlZGJhY2tVcGRhdGVEdG8nIGlzIG5vdCBudWxsIG9yIHVuZGVmaW5lZFxuICAgICAgICAgICAgYXNzZXJ0UGFyYW1FeGlzdHMoJ2ZlZWRiYWNrQ29udHJvbGxlclVwZGF0ZScsICdmZWVkYmFja1VwZGF0ZUR0bycsIGZlZWRiYWNrVXBkYXRlRHRvKVxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJQYXRoID0gYC9mZWVkYmFjay97aWR9YFxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKGB7JHtcImlkXCJ9fWAsIGVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoaWQpKSk7XG4gICAgICAgICAgICAvLyB1c2UgZHVtbXkgYmFzZSBVUkwgc3RyaW5nIGJlY2F1c2UgdGhlIFVSTCBjb25zdHJ1Y3RvciBvbmx5IGFjY2VwdHMgYWJzb2x1dGUgVVJMcy5cbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyVXJsT2JqID0gbmV3IFVSTChsb2NhbFZhclBhdGgsIERVTU1ZX0JBU0VfVVJMKTtcbiAgICAgICAgICAgIGxldCBiYXNlT3B0aW9ucztcbiAgICAgICAgICAgIGlmIChjb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgYmFzZU9wdGlvbnMgPSBjb25maWd1cmF0aW9uLmJhc2VPcHRpb25zO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclJlcXVlc3RPcHRpb25zID0geyBtZXRob2Q6ICdQQVRDSCcsIC4uLmJhc2VPcHRpb25zLCAuLi5vcHRpb25zfTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFySGVhZGVyUGFyYW1ldGVyID0ge30gYXMgYW55O1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJRdWVyeVBhcmFtZXRlciA9IHt9IGFzIGFueTtcblxuXG4gICAgXG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlclBhcmFtZXRlclsnQ29udGVudC1UeXBlJ10gPSAnYXBwbGljYXRpb24vanNvbic7XG5cbiAgICAgICAgICAgIHNldFNlYXJjaFBhcmFtcyhsb2NhbFZhclVybE9iaiwgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcik7XG4gICAgICAgICAgICBsZXQgaGVhZGVyc0Zyb21CYXNlT3B0aW9ucyA9IGJhc2VPcHRpb25zICYmIGJhc2VPcHRpb25zLmhlYWRlcnMgPyBiYXNlT3B0aW9ucy5oZWFkZXJzIDoge307XG4gICAgICAgICAgICBsb2NhbFZhclJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPSB7Li4ubG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIsIC4uLmhlYWRlcnNGcm9tQmFzZU9wdGlvbnMsIC4uLm9wdGlvbnMuaGVhZGVyc307XG4gICAgICAgICAgICBsb2NhbFZhclJlcXVlc3RPcHRpb25zLmRhdGEgPSBzZXJpYWxpemVEYXRhSWZOZWVkZWQoZmVlZGJhY2tVcGRhdGVEdG8sIGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMsIGNvbmZpZ3VyYXRpb24pXG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdXJsOiB0b1BhdGhTdHJpbmcobG9jYWxWYXJVcmxPYmopLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgIH1cbn07XG5cbi8qKlxuICogRmVlZGJhY2tBcGkgLSBmdW5jdGlvbmFsIHByb2dyYW1taW5nIGludGVyZmFjZVxuICogQGV4cG9ydFxuICovXG5leHBvcnQgY29uc3QgRmVlZGJhY2tBcGlGcCA9IGZ1bmN0aW9uKGNvbmZpZ3VyYXRpb24/OiBDb25maWd1cmF0aW9uKSB7XG4gICAgY29uc3QgbG9jYWxWYXJBeGlvc1BhcmFtQ3JlYXRvciA9IEZlZWRiYWNrQXBpQXhpb3NQYXJhbUNyZWF0b3IoY29uZmlndXJhdGlvbilcbiAgICByZXR1cm4ge1xuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7RmVlZGJhY2tDcmVhdGVEdG99IGZlZWRiYWNrQ3JlYXRlRHRvIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgYXN5bmMgZmVlZGJhY2tDb250cm9sbGVyQ3JlYXRlKGZlZWRiYWNrQ3JlYXRlRHRvOiBGZWVkYmFja0NyZWF0ZUR0bywgb3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IFByb21pc2U8KGF4aW9zPzogQXhpb3NJbnN0YW5jZSwgYmFzZVBhdGg/OiBzdHJpbmcpID0+IEF4aW9zUHJvbWlzZTx2b2lkPj4ge1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJBeGlvc0FyZ3MgPSBhd2FpdCBsb2NhbFZhckF4aW9zUGFyYW1DcmVhdG9yLmZlZWRiYWNrQ29udHJvbGxlckNyZWF0ZShmZWVkYmFja0NyZWF0ZUR0bywgb3B0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckluZGV4ID0gY29uZmlndXJhdGlvbj8uc2VydmVySW5kZXggPz8gMDtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyT3BlcmF0aW9uU2VydmVyQmFzZVBhdGggPSBvcGVyYXRpb25TZXJ2ZXJNYXBbJ0ZlZWRiYWNrQXBpLmZlZWRiYWNrQ29udHJvbGxlckNyZWF0ZSddPy5bbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJJbmRleF0/LnVybDtcbiAgICAgICAgICAgIHJldHVybiAoYXhpb3MsIGJhc2VQYXRoKSA9PiBjcmVhdGVSZXF1ZXN0RnVuY3Rpb24obG9jYWxWYXJBeGlvc0FyZ3MsIGdsb2JhbEF4aW9zLCBCQVNFX1BBVEgsIGNvbmZpZ3VyYXRpb24pKGF4aW9zLCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckJhc2VQYXRoIHx8IGJhc2VQYXRoKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgXG4gICAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5IFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgYXN5bmMgZmVlZGJhY2tDb250cm9sbGVyQ3JlYXRlUmVwbHkoaWQ6IHN0cmluZywgYm9keTogb2JqZWN0LCBvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKTogUHJvbWlzZTwoYXhpb3M/OiBBeGlvc0luc3RhbmNlLCBiYXNlUGF0aD86IHN0cmluZykgPT4gQXhpb3NQcm9taXNlPHZvaWQ+PiB7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhckF4aW9zQXJncyA9IGF3YWl0IGxvY2FsVmFyQXhpb3NQYXJhbUNyZWF0b3IuZmVlZGJhY2tDb250cm9sbGVyQ3JlYXRlUmVwbHkoaWQsIGJvZHksIG9wdGlvbnMpO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJJbmRleCA9IGNvbmZpZ3VyYXRpb24/LnNlcnZlckluZGV4ID8/IDA7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckJhc2VQYXRoID0gb3BlcmF0aW9uU2VydmVyTWFwWydGZWVkYmFja0FwaS5mZWVkYmFja0NvbnRyb2xsZXJDcmVhdGVSZXBseSddPy5bbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJJbmRleF0/LnVybDtcbiAgICAgICAgICAgIHJldHVybiAoYXhpb3MsIGJhc2VQYXRoKSA9PiBjcmVhdGVSZXF1ZXN0RnVuY3Rpb24obG9jYWxWYXJBeGlvc0FyZ3MsIGdsb2JhbEF4aW9zLCBCQVNFX1BBVEgsIGNvbmZpZ3VyYXRpb24pKGF4aW9zLCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckJhc2VQYXRoIHx8IGJhc2VQYXRoKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBhc3luYyBmZWVkYmFja0NvbnRyb2xsZXJEZWxldGUoaWQ6IHN0cmluZywgb3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IFByb21pc2U8KGF4aW9zPzogQXhpb3NJbnN0YW5jZSwgYmFzZVBhdGg/OiBzdHJpbmcpID0+IEF4aW9zUHJvbWlzZTx2b2lkPj4ge1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJBeGlvc0FyZ3MgPSBhd2FpdCBsb2NhbFZhckF4aW9zUGFyYW1DcmVhdG9yLmZlZWRiYWNrQ29udHJvbGxlckRlbGV0ZShpZCwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckluZGV4ID0gY29uZmlndXJhdGlvbj8uc2VydmVySW5kZXggPz8gMDtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyT3BlcmF0aW9uU2VydmVyQmFzZVBhdGggPSBvcGVyYXRpb25TZXJ2ZXJNYXBbJ0ZlZWRiYWNrQXBpLmZlZWRiYWNrQ29udHJvbGxlckRlbGV0ZSddPy5bbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJJbmRleF0/LnVybDtcbiAgICAgICAgICAgIHJldHVybiAoYXhpb3MsIGJhc2VQYXRoKSA9PiBjcmVhdGVSZXF1ZXN0RnVuY3Rpb24obG9jYWxWYXJBeGlvc0FyZ3MsIGdsb2JhbEF4aW9zLCBCQVNFX1BBVEgsIGNvbmZpZ3VyYXRpb24pKGF4aW9zLCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckJhc2VQYXRoIHx8IGJhc2VQYXRoKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvamVjdElkIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgYXN5bmMgZmVlZGJhY2tDb250cm9sbGVyRmluZEZlZWRiYWNrQnlQcm9qZWN0SWQocHJvamVjdElkOiBzdHJpbmcsIG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpOiBQcm9taXNlPChheGlvcz86IEF4aW9zSW5zdGFuY2UsIGJhc2VQYXRoPzogc3RyaW5nKSA9PiBBeGlvc1Byb21pc2U8QXJyYXk8RmVlZGJhY2tSZXNwb25zZT4+PiB7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhckF4aW9zQXJncyA9IGF3YWl0IGxvY2FsVmFyQXhpb3NQYXJhbUNyZWF0b3IuZmVlZGJhY2tDb250cm9sbGVyRmluZEZlZWRiYWNrQnlQcm9qZWN0SWQocHJvamVjdElkLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyT3BlcmF0aW9uU2VydmVySW5kZXggPSBjb25maWd1cmF0aW9uPy5zZXJ2ZXJJbmRleCA/PyAwO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJCYXNlUGF0aCA9IG9wZXJhdGlvblNlcnZlck1hcFsnRmVlZGJhY2tBcGkuZmVlZGJhY2tDb250cm9sbGVyRmluZEZlZWRiYWNrQnlQcm9qZWN0SWQnXT8uW2xvY2FsVmFyT3BlcmF0aW9uU2VydmVySW5kZXhdPy51cmw7XG4gICAgICAgICAgICByZXR1cm4gKGF4aW9zLCBiYXNlUGF0aCkgPT4gY3JlYXRlUmVxdWVzdEZ1bmN0aW9uKGxvY2FsVmFyQXhpb3NBcmdzLCBnbG9iYWxBeGlvcywgQkFTRV9QQVRILCBjb25maWd1cmF0aW9uKShheGlvcywgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJCYXNlUGF0aCB8fCBiYXNlUGF0aCk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFxuICAgICAgICAgKiBAcGFyYW0ge0ZlZWRiYWNrVXBkYXRlRHRvfSBmZWVkYmFja1VwZGF0ZUR0byBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIGFzeW5jIGZlZWRiYWNrQ29udHJvbGxlclVwZGF0ZShpZDogc3RyaW5nLCBmZWVkYmFja1VwZGF0ZUR0bzogRmVlZGJhY2tVcGRhdGVEdG8sIG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpOiBQcm9taXNlPChheGlvcz86IEF4aW9zSW5zdGFuY2UsIGJhc2VQYXRoPzogc3RyaW5nKSA9PiBBeGlvc1Byb21pc2U8dm9pZD4+IHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyQXhpb3NBcmdzID0gYXdhaXQgbG9jYWxWYXJBeGlvc1BhcmFtQ3JlYXRvci5mZWVkYmFja0NvbnRyb2xsZXJVcGRhdGUoaWQsIGZlZWRiYWNrVXBkYXRlRHRvLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyT3BlcmF0aW9uU2VydmVySW5kZXggPSBjb25maWd1cmF0aW9uPy5zZXJ2ZXJJbmRleCA/PyAwO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJCYXNlUGF0aCA9IG9wZXJhdGlvblNlcnZlck1hcFsnRmVlZGJhY2tBcGkuZmVlZGJhY2tDb250cm9sbGVyVXBkYXRlJ10/Lltsb2NhbFZhck9wZXJhdGlvblNlcnZlckluZGV4XT8udXJsO1xuICAgICAgICAgICAgcmV0dXJuIChheGlvcywgYmFzZVBhdGgpID0+IGNyZWF0ZVJlcXVlc3RGdW5jdGlvbihsb2NhbFZhckF4aW9zQXJncywgZ2xvYmFsQXhpb3MsIEJBU0VfUEFUSCwgY29uZmlndXJhdGlvbikoYXhpb3MsIGxvY2FsVmFyT3BlcmF0aW9uU2VydmVyQmFzZVBhdGggfHwgYmFzZVBhdGgpO1xuICAgICAgICB9LFxuICAgIH1cbn07XG5cbi8qKlxuICogRmVlZGJhY2tBcGkgLSBmYWN0b3J5IGludGVyZmFjZVxuICogQGV4cG9ydFxuICovXG5leHBvcnQgY29uc3QgRmVlZGJhY2tBcGlGYWN0b3J5ID0gZnVuY3Rpb24gKGNvbmZpZ3VyYXRpb24/OiBDb25maWd1cmF0aW9uLCBiYXNlUGF0aD86IHN0cmluZywgYXhpb3M/OiBBeGlvc0luc3RhbmNlKSB7XG4gICAgY29uc3QgbG9jYWxWYXJGcCA9IEZlZWRiYWNrQXBpRnAoY29uZmlndXJhdGlvbilcbiAgICByZXR1cm4ge1xuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7RmVlZGJhY2tDcmVhdGVEdG99IGZlZWRiYWNrQ3JlYXRlRHRvIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgZmVlZGJhY2tDb250cm9sbGVyQ3JlYXRlKGZlZWRiYWNrQ3JlYXRlRHRvOiBGZWVkYmFja0NyZWF0ZUR0bywgb3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IEF4aW9zUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxWYXJGcC5mZWVkYmFja0NvbnRyb2xsZXJDcmVhdGUoZmVlZGJhY2tDcmVhdGVEdG8sIG9wdGlvbnMpLnRoZW4oKHJlcXVlc3QpID0+IHJlcXVlc3QoYXhpb3MsIGJhc2VQYXRoKSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFxuICAgICAgICAgKiBAcGFyYW0ge29iamVjdH0gYm9keSBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIGZlZWRiYWNrQ29udHJvbGxlckNyZWF0ZVJlcGx5KGlkOiBzdHJpbmcsIGJvZHk6IG9iamVjdCwgb3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IEF4aW9zUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxWYXJGcC5mZWVkYmFja0NvbnRyb2xsZXJDcmVhdGVSZXBseShpZCwgYm9keSwgb3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdChheGlvcywgYmFzZVBhdGgpKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBmZWVkYmFja0NvbnRyb2xsZXJEZWxldGUoaWQ6IHN0cmluZywgb3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IEF4aW9zUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxWYXJGcC5mZWVkYmFja0NvbnRyb2xsZXJEZWxldGUoaWQsIG9wdGlvbnMpLnRoZW4oKHJlcXVlc3QpID0+IHJlcXVlc3QoYXhpb3MsIGJhc2VQYXRoKSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb2plY3RJZCBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIGZlZWRiYWNrQ29udHJvbGxlckZpbmRGZWVkYmFja0J5UHJvamVjdElkKHByb2plY3RJZDogc3RyaW5nLCBvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKTogQXhpb3NQcm9taXNlPEFycmF5PEZlZWRiYWNrUmVzcG9uc2U+PiB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxWYXJGcC5mZWVkYmFja0NvbnRyb2xsZXJGaW5kRmVlZGJhY2tCeVByb2plY3RJZChwcm9qZWN0SWQsIG9wdGlvbnMpLnRoZW4oKHJlcXVlc3QpID0+IHJlcXVlc3QoYXhpb3MsIGJhc2VQYXRoKSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFxuICAgICAgICAgKiBAcGFyYW0ge0ZlZWRiYWNrVXBkYXRlRHRvfSBmZWVkYmFja1VwZGF0ZUR0byBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIGZlZWRiYWNrQ29udHJvbGxlclVwZGF0ZShpZDogc3RyaW5nLCBmZWVkYmFja1VwZGF0ZUR0bzogRmVlZGJhY2tVcGRhdGVEdG8sIG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpOiBBeGlvc1Byb21pc2U8dm9pZD4ge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsVmFyRnAuZmVlZGJhY2tDb250cm9sbGVyVXBkYXRlKGlkLCBmZWVkYmFja1VwZGF0ZUR0bywgb3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdChheGlvcywgYmFzZVBhdGgpKTtcbiAgICAgICAgfSxcbiAgICB9O1xufTtcblxuLyoqXG4gKiBGZWVkYmFja0FwaSAtIG9iamVjdC1vcmllbnRlZCBpbnRlcmZhY2VcbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBGZWVkYmFja0FwaVxuICogQGV4dGVuZHMge0Jhc2VBUEl9XG4gKi9cbmV4cG9ydCBjbGFzcyBGZWVkYmFja0FwaSBleHRlbmRzIEJhc2VBUEkge1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB7RmVlZGJhY2tDcmVhdGVEdG99IGZlZWRiYWNrQ3JlYXRlRHRvIFxuICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tBcGlcbiAgICAgKi9cbiAgICBwdWJsaWMgZmVlZGJhY2tDb250cm9sbGVyQ3JlYXRlKGZlZWRiYWNrQ3JlYXRlRHRvOiBGZWVkYmFja0NyZWF0ZUR0bywgb3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZykge1xuICAgICAgICByZXR1cm4gRmVlZGJhY2tBcGlGcCh0aGlzLmNvbmZpZ3VyYXRpb24pLmZlZWRiYWNrQ29udHJvbGxlckNyZWF0ZShmZWVkYmFja0NyZWF0ZUR0bywgb3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdCh0aGlzLmF4aW9zLCB0aGlzLmJhc2VQYXRoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5IFxuICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tBcGlcbiAgICAgKi9cbiAgICBwdWJsaWMgZmVlZGJhY2tDb250cm9sbGVyQ3JlYXRlUmVwbHkoaWQ6IHN0cmluZywgYm9keTogb2JqZWN0LCBvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKSB7XG4gICAgICAgIHJldHVybiBGZWVkYmFja0FwaUZwKHRoaXMuY29uZmlndXJhdGlvbikuZmVlZGJhY2tDb250cm9sbGVyQ3JlYXRlUmVwbHkoaWQsIGJvZHksIG9wdGlvbnMpLnRoZW4oKHJlcXVlc3QpID0+IHJlcXVlc3QodGhpcy5heGlvcywgdGhpcy5iYXNlUGF0aCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBcbiAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrQXBpXG4gICAgICovXG4gICAgcHVibGljIGZlZWRiYWNrQ29udHJvbGxlckRlbGV0ZShpZDogc3RyaW5nLCBvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKSB7XG4gICAgICAgIHJldHVybiBGZWVkYmFja0FwaUZwKHRoaXMuY29uZmlndXJhdGlvbikuZmVlZGJhY2tDb250cm9sbGVyRGVsZXRlKGlkLCBvcHRpb25zKS50aGVuKChyZXF1ZXN0KSA9PiByZXF1ZXN0KHRoaXMuYXhpb3MsIHRoaXMuYmFzZVBhdGgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvamVjdElkIFxuICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tBcGlcbiAgICAgKi9cbiAgICBwdWJsaWMgZmVlZGJhY2tDb250cm9sbGVyRmluZEZlZWRiYWNrQnlQcm9qZWN0SWQocHJvamVjdElkOiBzdHJpbmcsIG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpIHtcbiAgICAgICAgcmV0dXJuIEZlZWRiYWNrQXBpRnAodGhpcy5jb25maWd1cmF0aW9uKS5mZWVkYmFja0NvbnRyb2xsZXJGaW5kRmVlZGJhY2tCeVByb2plY3RJZChwcm9qZWN0SWQsIG9wdGlvbnMpLnRoZW4oKHJlcXVlc3QpID0+IHJlcXVlc3QodGhpcy5heGlvcywgdGhpcy5iYXNlUGF0aCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBcbiAgICAgKiBAcGFyYW0ge0ZlZWRiYWNrVXBkYXRlRHRvfSBmZWVkYmFja1VwZGF0ZUR0byBcbiAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrQXBpXG4gICAgICovXG4gICAgcHVibGljIGZlZWRiYWNrQ29udHJvbGxlclVwZGF0ZShpZDogc3RyaW5nLCBmZWVkYmFja1VwZGF0ZUR0bzogRmVlZGJhY2tVcGRhdGVEdG8sIG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpIHtcbiAgICAgICAgcmV0dXJuIEZlZWRiYWNrQXBpRnAodGhpcy5jb25maWd1cmF0aW9uKS5mZWVkYmFja0NvbnRyb2xsZXJVcGRhdGUoaWQsIGZlZWRiYWNrVXBkYXRlRHRvLCBvcHRpb25zKS50aGVuKChyZXF1ZXN0KSA9PiByZXF1ZXN0KHRoaXMuYXhpb3MsIHRoaXMuYmFzZVBhdGgpKTtcbiAgICB9XG59XG5cblxuXG4vKipcbiAqIFVzZXJBcGkgLSBheGlvcyBwYXJhbWV0ZXIgY3JlYXRvclxuICogQGV4cG9ydFxuICovXG5leHBvcnQgY29uc3QgVXNlckFwaUF4aW9zUGFyYW1DcmVhdG9yID0gZnVuY3Rpb24gKGNvbmZpZ3VyYXRpb24/OiBDb25maWd1cmF0aW9uKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgdXNlckNvbnRyb2xsZXJHZXRNZTogYXN5bmMgKG9wdGlvbnM6IFJhd0F4aW9zUmVxdWVzdENvbmZpZyA9IHt9KTogUHJvbWlzZTxSZXF1ZXN0QXJncz4gPT4ge1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJQYXRoID0gYC91c2VyL21lYDtcbiAgICAgICAgICAgIC8vIHVzZSBkdW1teSBiYXNlIFVSTCBzdHJpbmcgYmVjYXVzZSB0aGUgVVJMIGNvbnN0cnVjdG9yIG9ubHkgYWNjZXB0cyBhYnNvbHV0ZSBVUkxzLlxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJVcmxPYmogPSBuZXcgVVJMKGxvY2FsVmFyUGF0aCwgRFVNTVlfQkFTRV9VUkwpO1xuICAgICAgICAgICAgbGV0IGJhc2VPcHRpb25zO1xuICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgICAgICBiYXNlT3B0aW9ucyA9IGNvbmZpZ3VyYXRpb24uYmFzZU9wdGlvbnM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMgPSB7IG1ldGhvZDogJ0dFVCcsIC4uLmJhc2VPcHRpb25zLCAuLi5vcHRpb25zfTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFySGVhZGVyUGFyYW1ldGVyID0ge30gYXMgYW55O1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJRdWVyeVBhcmFtZXRlciA9IHt9IGFzIGFueTtcblxuICAgICAgICAgICAgLy8gYXV0aGVudGljYXRpb24gYmVhcmVyIHJlcXVpcmVkXG4gICAgICAgICAgICAvLyBodHRwIGJlYXJlciBhdXRoZW50aWNhdGlvbiByZXF1aXJlZFxuICAgICAgICAgICAgYXdhaXQgc2V0QmVhcmVyQXV0aFRvT2JqZWN0KGxvY2FsVmFySGVhZGVyUGFyYW1ldGVyLCBjb25maWd1cmF0aW9uKVxuXG5cbiAgICBcbiAgICAgICAgICAgIHNldFNlYXJjaFBhcmFtcyhsb2NhbFZhclVybE9iaiwgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcik7XG4gICAgICAgICAgICBsZXQgaGVhZGVyc0Zyb21CYXNlT3B0aW9ucyA9IGJhc2VPcHRpb25zICYmIGJhc2VPcHRpb25zLmhlYWRlcnMgPyBiYXNlT3B0aW9ucy5oZWFkZXJzIDoge307XG4gICAgICAgICAgICBsb2NhbFZhclJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPSB7Li4ubG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIsIC4uLmhlYWRlcnNGcm9tQmFzZU9wdGlvbnMsIC4uLm9wdGlvbnMuaGVhZGVyc307XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdXJsOiB0b1BhdGhTdHJpbmcobG9jYWxWYXJVcmxPYmopLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgIH1cbn07XG5cbi8qKlxuICogVXNlckFwaSAtIGZ1bmN0aW9uYWwgcHJvZ3JhbW1pbmcgaW50ZXJmYWNlXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBVc2VyQXBpRnAgPSBmdW5jdGlvbihjb25maWd1cmF0aW9uPzogQ29uZmlndXJhdGlvbikge1xuICAgIGNvbnN0IGxvY2FsVmFyQXhpb3NQYXJhbUNyZWF0b3IgPSBVc2VyQXBpQXhpb3NQYXJhbUNyZWF0b3IoY29uZmlndXJhdGlvbilcbiAgICByZXR1cm4ge1xuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBhc3luYyB1c2VyQ29udHJvbGxlckdldE1lKG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpOiBQcm9taXNlPChheGlvcz86IEF4aW9zSW5zdGFuY2UsIGJhc2VQYXRoPzogc3RyaW5nKSA9PiBBeGlvc1Byb21pc2U8VXNlclN1bW1hcnlSZXNwb25zZT4+IHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyQXhpb3NBcmdzID0gYXdhaXQgbG9jYWxWYXJBeGlvc1BhcmFtQ3JlYXRvci51c2VyQ29udHJvbGxlckdldE1lKG9wdGlvbnMpO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJJbmRleCA9IGNvbmZpZ3VyYXRpb24/LnNlcnZlckluZGV4ID8/IDA7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckJhc2VQYXRoID0gb3BlcmF0aW9uU2VydmVyTWFwWydVc2VyQXBpLnVzZXJDb250cm9sbGVyR2V0TWUnXT8uW2xvY2FsVmFyT3BlcmF0aW9uU2VydmVySW5kZXhdPy51cmw7XG4gICAgICAgICAgICByZXR1cm4gKGF4aW9zLCBiYXNlUGF0aCkgPT4gY3JlYXRlUmVxdWVzdEZ1bmN0aW9uKGxvY2FsVmFyQXhpb3NBcmdzLCBnbG9iYWxBeGlvcywgQkFTRV9QQVRILCBjb25maWd1cmF0aW9uKShheGlvcywgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJCYXNlUGF0aCB8fCBiYXNlUGF0aCk7XG4gICAgICAgIH0sXG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VyQXBpIC0gZmFjdG9yeSBpbnRlcmZhY2VcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNvbnN0IFVzZXJBcGlGYWN0b3J5ID0gZnVuY3Rpb24gKGNvbmZpZ3VyYXRpb24/OiBDb25maWd1cmF0aW9uLCBiYXNlUGF0aD86IHN0cmluZywgYXhpb3M/OiBBeGlvc0luc3RhbmNlKSB7XG4gICAgY29uc3QgbG9jYWxWYXJGcCA9IFVzZXJBcGlGcChjb25maWd1cmF0aW9uKVxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIHVzZXJDb250cm9sbGVyR2V0TWUob3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IEF4aW9zUHJvbWlzZTxVc2VyU3VtbWFyeVJlc3BvbnNlPiB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxWYXJGcC51c2VyQ29udHJvbGxlckdldE1lKG9wdGlvbnMpLnRoZW4oKHJlcXVlc3QpID0+IHJlcXVlc3QoYXhpb3MsIGJhc2VQYXRoKSk7XG4gICAgICAgIH0sXG4gICAgfTtcbn07XG5cbi8qKlxuICogVXNlckFwaSAtIG9iamVjdC1vcmllbnRlZCBpbnRlcmZhY2VcbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBVc2VyQXBpXG4gKiBAZXh0ZW5kcyB7QmFzZUFQSX1cbiAqL1xuZXhwb3J0IGNsYXNzIFVzZXJBcGkgZXh0ZW5kcyBCYXNlQVBJIHtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICogQG1lbWJlcm9mIFVzZXJBcGlcbiAgICAgKi9cbiAgICBwdWJsaWMgdXNlckNvbnRyb2xsZXJHZXRNZShvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKSB7XG4gICAgICAgIHJldHVybiBVc2VyQXBpRnAodGhpcy5jb25maWd1cmF0aW9uKS51c2VyQ29udHJvbGxlckdldE1lKG9wdGlvbnMpLnRoZW4oKHJlcXVlc3QpID0+IHJlcXVlc3QodGhpcy5heGlvcywgdGhpcy5iYXNlUGF0aCkpO1xuICAgIH1cbn1cblxuXG5cbiIsIi8qIHRzbGludDpkaXNhYmxlICovXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLyoqXG4gKiBHYWxhZHJpbSBGZWVkYmFjayBBUElcbiAqIEFQSSBmb3IgR2FsYWRyaW0gRmVlZGJhY2ssIGEgZmVlZGJhY2sgcGxhdGZvcm0gZm9yIEdhbGFkcmltIHByb2plY3RzLlxuICpcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjBcbiAqIFxuICpcbiAqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG4gKiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cbiAqL1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlndXJhdGlvblBhcmFtZXRlcnMge1xuICAgIGFwaUtleT86IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPiB8ICgobmFtZTogc3RyaW5nKSA9PiBzdHJpbmcpIHwgKChuYW1lOiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nPik7XG4gICAgdXNlcm5hbWU/OiBzdHJpbmc7XG4gICAgcGFzc3dvcmQ/OiBzdHJpbmc7XG4gICAgYWNjZXNzVG9rZW4/OiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz4gfCAoKG5hbWU/OiBzdHJpbmcsIHNjb3Blcz86IHN0cmluZ1tdKSA9PiBzdHJpbmcpIHwgKChuYW1lPzogc3RyaW5nLCBzY29wZXM/OiBzdHJpbmdbXSkgPT4gUHJvbWlzZTxzdHJpbmc+KTtcbiAgICBiYXNlUGF0aD86IHN0cmluZztcbiAgICBzZXJ2ZXJJbmRleD86IG51bWJlcjtcbiAgICBiYXNlT3B0aW9ucz86IGFueTtcbiAgICBmb3JtRGF0YUN0b3I/OiBuZXcgKCkgPT4gYW55O1xufVxuXG5leHBvcnQgY2xhc3MgQ29uZmlndXJhdGlvbiB7XG4gICAgLyoqXG4gICAgICogcGFyYW1ldGVyIGZvciBhcGlLZXkgc2VjdXJpdHlcbiAgICAgKiBAcGFyYW0gbmFtZSBzZWN1cml0eSBuYW1lXG4gICAgICogQG1lbWJlcm9mIENvbmZpZ3VyYXRpb25cbiAgICAgKi9cbiAgICBhcGlLZXk/OiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz4gfCAoKG5hbWU6IHN0cmluZykgPT4gc3RyaW5nKSB8ICgobmFtZTogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZz4pO1xuICAgIC8qKlxuICAgICAqIHBhcmFtZXRlciBmb3IgYmFzaWMgc2VjdXJpdHlcbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIENvbmZpZ3VyYXRpb25cbiAgICAgKi9cbiAgICB1c2VybmFtZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBwYXJhbWV0ZXIgZm9yIGJhc2ljIHNlY3VyaXR5XG4gICAgICpcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBDb25maWd1cmF0aW9uXG4gICAgICovXG4gICAgcGFzc3dvcmQ/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogcGFyYW1ldGVyIGZvciBvYXV0aDIgc2VjdXJpdHlcbiAgICAgKiBAcGFyYW0gbmFtZSBzZWN1cml0eSBuYW1lXG4gICAgICogQHBhcmFtIHNjb3BlcyBvYXV0aDIgc2NvcGVcbiAgICAgKiBAbWVtYmVyb2YgQ29uZmlndXJhdGlvblxuICAgICAqL1xuICAgIGFjY2Vzc1Rva2VuPzogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+IHwgKChuYW1lPzogc3RyaW5nLCBzY29wZXM/OiBzdHJpbmdbXSkgPT4gc3RyaW5nKSB8ICgobmFtZT86IHN0cmluZywgc2NvcGVzPzogc3RyaW5nW10pID0+IFByb21pc2U8c3RyaW5nPik7XG4gICAgLyoqXG4gICAgICogb3ZlcnJpZGUgYmFzZSBwYXRoXG4gICAgICpcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBDb25maWd1cmF0aW9uXG4gICAgICovXG4gICAgYmFzZVBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogb3ZlcnJpZGUgc2VydmVyIGluZGV4XG4gICAgICpcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBDb25maWd1cmF0aW9uXG4gICAgICovXG4gICAgc2VydmVySW5kZXg/OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogYmFzZSBvcHRpb25zIGZvciBheGlvcyBjYWxsc1xuICAgICAqXG4gICAgICogQHR5cGUge2FueX1cbiAgICAgKiBAbWVtYmVyb2YgQ29uZmlndXJhdGlvblxuICAgICAqL1xuICAgIGJhc2VPcHRpb25zPzogYW55O1xuICAgIC8qKlxuICAgICAqIFRoZSBGb3JtRGF0YSBjb25zdHJ1Y3RvciB0aGF0IHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgbXVsdGlwYXJ0IGZvcm0gZGF0YVxuICAgICAqIHJlcXVlc3RzLiBZb3UgY2FuIGluamVjdCB0aGlzIGhlcmUgc28gdGhhdCBleGVjdXRpb24gZW52aXJvbm1lbnRzIHRoYXRcbiAgICAgKiBkbyBub3Qgc3VwcG9ydCB0aGUgRm9ybURhdGEgY2xhc3MgY2FuIHN0aWxsIHJ1biB0aGUgZ2VuZXJhdGVkIGNsaWVudC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtuZXcgKCkgPT4gRm9ybURhdGF9XG4gICAgICovXG4gICAgZm9ybURhdGFDdG9yPzogbmV3ICgpID0+IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKHBhcmFtOiBDb25maWd1cmF0aW9uUGFyYW1ldGVycyA9IHt9KSB7XG4gICAgICAgIHRoaXMuYXBpS2V5ID0gcGFyYW0uYXBpS2V5O1xuICAgICAgICB0aGlzLnVzZXJuYW1lID0gcGFyYW0udXNlcm5hbWU7XG4gICAgICAgIHRoaXMucGFzc3dvcmQgPSBwYXJhbS5wYXNzd29yZDtcbiAgICAgICAgdGhpcy5hY2Nlc3NUb2tlbiA9IHBhcmFtLmFjY2Vzc1Rva2VuO1xuICAgICAgICB0aGlzLmJhc2VQYXRoID0gcGFyYW0uYmFzZVBhdGg7XG4gICAgICAgIHRoaXMuc2VydmVySW5kZXggPSBwYXJhbS5zZXJ2ZXJJbmRleDtcbiAgICAgICAgdGhpcy5iYXNlT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAuLi5wYXJhbS5iYXNlT3B0aW9ucz8uaGVhZGVycyxcbiAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6IFwiT3BlbkFQSS1HZW5lcmF0b3IvdHlwZXNjcmlwdC1heGlvc1wiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLi4ucGFyYW0uYmFzZU9wdGlvbnNcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5mb3JtRGF0YUN0b3IgPSBwYXJhbS5mb3JtRGF0YUN0b3I7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdGhlIGdpdmVuIE1JTUUgaXMgYSBKU09OIE1JTUUuXG4gICAgICogSlNPTiBNSU1FIGV4YW1wbGVzOlxuICAgICAqICAgYXBwbGljYXRpb24vanNvblxuICAgICAqICAgYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD1VVEY4XG4gICAgICogICBBUFBMSUNBVElPTi9KU09OXG4gICAgICogICBhcHBsaWNhdGlvbi92bmQuY29tcGFueStqc29uXG4gICAgICogQHBhcmFtIG1pbWUgLSBNSU1FIChNdWx0aXB1cnBvc2UgSW50ZXJuZXQgTWFpbCBFeHRlbnNpb25zKVxuICAgICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgZ2l2ZW4gTUlNRSBpcyBKU09OLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcHVibGljIGlzSnNvbk1pbWUobWltZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGpzb25NaW1lOiBSZWdFeHAgPSBuZXcgUmVnRXhwKCdeKGFwcGxpY2F0aW9uXFwvanNvbnxbXjsvIFxcdF0rXFwvW147LyBcXHRdK1srXWpzb24pWyBcXHRdKig7LiopPyQnLCAnaScpO1xuICAgICAgICByZXR1cm4gbWltZSAhPT0gbnVsbCAmJiAoanNvbk1pbWUudGVzdChtaW1lKSB8fCBtaW1lLnRvTG93ZXJDYXNlKCkgPT09ICdhcHBsaWNhdGlvbi9qc29uLXBhdGNoK2pzb24nKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSBcImF4aW9zXCI7XG5pbXBvcnQge1xuICBBdXRoQXBpLFxuICBDb25maWd1cmF0aW9uLFxuICBGZWVkYmFja0FwaSxcbiAgVXNlckFwaSxcbn0gZnJvbSBcIi4uLy4uL2xpYnMvYmFja2VuZC1jbGllbnRcIjtcblxuY29uc3QgYXBpVXJsID0gXCJodHRwOi8vZWMyLTEzLTM4LTIxNC0xOTEuZXUtd2VzdC0zLmNvbXB1dGUuYW1hem9uYXdzLmNvbToxNDc4XCI7XG5cbmNvbnN0IGNvbmZpZ3VyYXRpb24gPSBuZXcgQ29uZmlndXJhdGlvbih7XG4gIGJhc2VQYXRoOiBhcGlVcmwsXG59KTtcblxuY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSh7XG4gIGJhc2VVUkw6IGFwaVVybCxcbn0pO1xuXG5jb25zdCBhcGkgPSB7XG4gIHVzZXI6IG5ldyBVc2VyQXBpKGNvbmZpZ3VyYXRpb24sIGFwaVVybCwgYXhpb3NJbnN0YW5jZSksXG4gIGZlZWRiYWNrOiBuZXcgRmVlZGJhY2tBcGkoY29uZmlndXJhdGlvbiwgYXBpVXJsLCBheGlvc0luc3RhbmNlKSxcbiAgYXV0aDogbmV3IEF1dGhBcGkoY29uZmlndXJhdGlvbiwgYXBpVXJsLCBheGlvc0luc3RhbmNlKSxcbn07XG5cbmF4aW9zSW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKFxuICBhc3luYyAoY29uZmlnKSA9PiB7XG4gICAgY29uc3QgdG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImdhbGFkcmltRmVlZGJhY2tUb2tlblwiKTtcbiAgICBpZiAodG9rZW4gJiYgY29uZmlnLmhlYWRlcnMpIHtcbiAgICAgIGNvbmZpZy5oZWFkZXJzLkF1dGhvcml6YXRpb24gPSBgQmVhcmVyICR7dG9rZW59YDtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIGF4aW9zSW5zdGFuY2UuZGVmYXVsdHMuaGVhZGVycy5jb21tb24uQXV0aG9yaXphdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfSxcbiAgKGVycm9yKSA9PiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgfVxuKTtcblxuZXhwb3J0IGRlZmF1bHQgYXBpO1xuIiwiaW1wb3J0IHsgdXNlTXV0YXRpb24sIHVzZVF1ZXJ5LCB1c2VRdWVyeUNsaWVudCB9IGZyb20gXCJAdGFuc3RhY2svcmVhY3QtcXVlcnlcIjtcbmltcG9ydCBhcGkgZnJvbSBcIi4vYXBpXCI7XG5pbXBvcnQge1xuICBGZWVkYmFja0NyZWF0ZUR0byxcbiAgRmVlZGJhY2tSZXNwb25zZSxcbiAgRmVlZGJhY2tVcGRhdGVEdG8sXG59IGZyb20gXCIuLi8uLi9saWJzL2JhY2tlbmQtY2xpZW50XCI7XG5cbmV4cG9ydCBjb25zdCBmZXRjaEZlZWRiYWNrcyA9IGFzeW5jIChwcm9qZWN0SWQ/OiBzdHJpbmcpID0+IHtcbiAgaWYgKCFwcm9qZWN0SWQpIHJldHVybiBbXTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9XG4gICAgICBhd2FpdCBhcGkuZmVlZGJhY2suZmVlZGJhY2tDb250cm9sbGVyRmluZEZlZWRiYWNrQnlQcm9qZWN0SWQocHJvamVjdElkKTtcbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlRmVlZGJhY2sgPSBhc3luYyAoZmVlZGJhY2s6IEZlZWRiYWNrQ3JlYXRlRHRvKSA9PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpLmZlZWRiYWNrLmZlZWRiYWNrQ29udHJvbGxlckNyZWF0ZShmZWVkYmFjayk7XG4gIHJldHVybiByZXNwb25zZS5kYXRhO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVJlcGx5ID0gYXN5bmMgKGZlZWRiYWNrSWQ6IHN0cmluZywgY29tbWVudDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpLmZlZWRiYWNrLmZlZWRiYWNrQ29udHJvbGxlckNyZWF0ZVJlcGx5KFxuICAgIGZlZWRiYWNrSWQsXG4gICAge1xuICAgICAgY29tbWVudCxcbiAgICB9XG4gICk7XG4gIHJldHVybiByZXNwb25zZS5kYXRhO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUZlZWRiYWNrID0gYXN5bmMgKHtcbiAgZmVlZGJhY2tJZCxcbiAgcGF5bG9hZCxcbn06IHtcbiAgZmVlZGJhY2tJZDogc3RyaW5nO1xuICBwYXlsb2FkOiBGZWVkYmFja1VwZGF0ZUR0bztcbn0pID0+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGkuZmVlZGJhY2suZmVlZGJhY2tDb250cm9sbGVyVXBkYXRlKGZlZWRiYWNrSWQsIHtcbiAgICAuLi5wYXlsb2FkLFxuICB9KTtcbiAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlRmVlZGJhY2sgPSBhc3luYyAoZmVlZGJhY2s6IEZlZWRiYWNrUmVzcG9uc2UpID0+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGkuZmVlZGJhY2suZmVlZGJhY2tDb250cm9sbGVyRGVsZXRlKGZlZWRiYWNrLmlkKTtcbiAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgdXNlRmVlZGJhY2tzID0gKHByb2plY3RJZD86IHN0cmluZykgPT4ge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBbXCJmZWVkYmFja3NcIl0sXG4gICAgcXVlcnlGbjogKCkgPT4gZmV0Y2hGZWVkYmFja3MocHJvamVjdElkKSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXNlQ3JlYXRlRmVlZGJhY2sgPSAoKSA9PiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBjcmVhdGVGZWVkYmFjayxcbiAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwiRmVlZGJhY2sgY3JlYXRlZFwiKTtcblxuICAgICAgcmV0dXJuIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IFtcImZlZWRiYWNrc1wiXSB9KTtcbiAgICB9LFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VDcmVhdGVSZXBseSA9IChmZWVkYmFja0lkOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IChjb21tZW50OiBzdHJpbmcpID0+IGNyZWF0ZVJlcGx5KGZlZWRiYWNrSWQsIGNvbW1lbnQpLFxuICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgcmV0dXJuIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IFtcImZlZWRiYWNrc1wiXSB9KTtcbiAgICB9LFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VVcGRhdGVGZWVkYmFjayA9ICgpID0+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IHVwZGF0ZUZlZWRiYWNrLFxuICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgcmV0dXJuIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IFtcImZlZWRiYWNrc1wiXSB9KTtcbiAgICB9LFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VEZWxldGVGZWVkYmFjayA9ICgpID0+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGRlbGV0ZUZlZWRiYWNrLFxuICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgcmV0dXJuIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IFtcImZlZWRiYWNrc1wiXSB9KTtcbiAgICB9LFxuICB9KTtcbn07XG4iLCJpbXBvcnQgeyB1c2VRdWVyeSB9IGZyb20gXCJAdGFuc3RhY2svcmVhY3QtcXVlcnlcIjtcbmltcG9ydCBhcGkgZnJvbSBcIi4vYXBpXCI7XG5cbmV4cG9ydCBjb25zdCBmZXRjaE1lID0gYXN5bmMgKCkgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpLnVzZXIudXNlckNvbnRyb2xsZXJHZXRNZSgpO1xuICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHVzZU1lID0gKCkgPT4ge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBbXCJtZVwiXSxcbiAgICBxdWVyeUZuOiBmZXRjaE1lLFxuICB9KTtcbn07XG4iLCJpbXBvcnQgUmVhY3QsIHtcbiAgY3JlYXRlQ29udGV4dCxcbiAgRGlzcGF0Y2gsXG4gIHVzZUNhbGxiYWNrLFxuICB1c2VDb250ZXh0LFxuICB1c2VFZmZlY3QsXG4gIHVzZVN0YXRlLFxufSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEZlZWRiYWNrQ3JlYXRlRHRvLCBGZWVkYmFja1Jlc3BvbnNlIH0gZnJvbSBcIi4uLy4uL2xpYnMvYmFja2VuZC1jbGllbnRcIjtcbmltcG9ydCB7IHVzZUZlZWRiYWNrcyB9IGZyb20gXCIuLi9zZXJ2aWNlcy9mZWVkYmFja1wiO1xuaW1wb3J0IHsgdXNlTWUgfSBmcm9tIFwiLi4vc2VydmljZXMvdXNlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZlZWRiYWNrU3RhdGUge1xuICByb290RGlyOiBzdHJpbmc7XG4gIHByb2plY3RJZDogc3RyaW5nO1xuICBpc09wZW46IGJvb2xlYW47XG4gIGZlZWRiYWNrcz86IEZlZWRiYWNrUmVzcG9uc2VbXTtcbiAgbmV3RmVlZGJhY2s6IEZlZWRiYWNrQ3JlYXRlRHRvIHwgbnVsbDtcbiAgbmV3RmVlZGJhY2tSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudCB8IG51bGw+O1xuICBzZWxlY3RlZEZlZWRiYWNrOiBGZWVkYmFja1Jlc3BvbnNlIHwgbnVsbDtcbiAgc2V0U2VsZWN0ZWRGZWVkYmFjazogRGlzcGF0Y2g8UmVhY3QuU2V0U3RhdGVBY3Rpb248RmVlZGJhY2tSZXNwb25zZSB8IG51bGw+PjtcbiAgcmVzZXRGZWVkYmFjazogKCkgPT4gdm9pZDtcbiAgb3BlbkZlZWRiYWNrT3ZlcmxheTogKCkgPT4gdm9pZDtcbiAgY2xvc2VGZWVkYmFja092ZXJsYXk6ICgpID0+IHZvaWQ7XG4gIGFjdGl2YXRlRmVlZGJhY2tNb2RlOiAoKSA9PiB2b2lkO1xuICBkZWFjdGl2YXRlRmVlZGJhY2tNb2RlOiAoKSA9PiB2b2lkO1xuICBuYXZpZ2F0ZTogKHBhdGg6IHN0cmluZykgPT4gdm9pZDtcbn1cblxuLy8gQ3JlYXRlIHRoZSBjb250ZXh0XG5jb25zdCBGZWVkYmFja0NvbnRleHQgPSBjcmVhdGVDb250ZXh0KHtcbiAgcm9vdERpcjogXCJcIixcbiAgcHJvamVjdElkOiBcIlwiLFxuICBpc09wZW46IGZhbHNlLFxuICBmZWVkYmFja3M6IFtdIGFzIEZlZWRiYWNrUmVzcG9uc2VbXSB8IHVuZGVmaW5lZCxcbiAgbmV3RmVlZGJhY2s6IG51bGwgYXMgRmVlZGJhY2tDcmVhdGVEdG8gfCBudWxsLFxuICBuZXdGZWVkYmFja1JlZjogUmVhY3QuY3JlYXRlUmVmPEhUTUxEaXZFbGVtZW50IHwgbnVsbD4oKSxcbiAgc2VsZWN0ZWRGZWVkYmFjazoge30gYXMgRmVlZGJhY2tSZXNwb25zZSB8IG51bGwsXG4gIHNldFNlbGVjdGVkRmVlZGJhY2s6IHt9IGFzIERpc3BhdGNoPFxuICAgIFJlYWN0LlNldFN0YXRlQWN0aW9uPEZlZWRiYWNrUmVzcG9uc2UgfCBudWxsPlxuICA+LFxuICByZXNldEZlZWRiYWNrOiAoKSA9PiB7fSxcbiAgYWN0aXZhdGVGZWVkYmFja01vZGU6ICgpID0+IHt9LFxuICBkZWFjdGl2YXRlRmVlZGJhY2tNb2RlOiAoKSA9PiB7fSxcbiAgb3BlbkZlZWRiYWNrT3ZlcmxheTogKCkgPT4ge30sXG4gIGNsb3NlRmVlZGJhY2tPdmVybGF5OiAoKSA9PiB7fSxcbiAgbmF2aWdhdGU6IChwYXRoOiBzdHJpbmcpID0+IHtcbiAgICB2b2lkIHBhdGg7XG4gICAgcmV0dXJuO1xuICB9LFxufSk7XG5cbi8vIFByb3ZpZGVyIGNvbXBvbmVudFxuZXhwb3J0IGNvbnN0IEZlZWRiYWNrUHJvdmlkZXIgPSAoe1xuICByb290RGlyLFxuICBwcm9qZWN0SWQsXG4gIG5hdmlnYXRlLFxuICBjaGlsZHJlbixcbn06IHtcbiAgcm9vdERpcjogc3RyaW5nO1xuICBwcm9qZWN0SWQ6IHN0cmluZztcbiAgbmF2aWdhdGU6IChwYXRoOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG59KSA9PiB7XG4gIGNvbnN0IFtpc09wZW4sIHNldElzT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtuZXdGZWVkYmFjaywgc2V0TmV3RmVlZGJhY2tdID0gdXNlU3RhdGU8RmVlZGJhY2tDcmVhdGVEdG8gfCBudWxsPihcbiAgICBudWxsXG4gICk7XG4gIGNvbnN0IG5ld0ZlZWRiYWNrUmVmID0gUmVhY3QudXNlUmVmPEhUTUxEaXZFbGVtZW50IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtzZWxlY3RlZEZlZWRiYWNrLCBzZXRTZWxlY3RlZEZlZWRiYWNrXSA9XG4gICAgdXNlU3RhdGU8RmVlZGJhY2tSZXNwb25zZSB8IG51bGw+KG51bGwpO1xuICBjb25zdCB7IGRhdGE6IGZlZWRiYWNrcyB9ID0gdXNlRmVlZGJhY2tzKHByb2plY3RJZCk7XG4gIGNvbnN0IHsgZGF0YTogbWUgfSA9IHVzZU1lKCk7XG5cbiAgY29uc3QgaXNDb25uZWN0ZWQgPSAhIW1lO1xuXG4gIGNvbnN0IGlzQ29sbGFib3JhdG9yID0gbWU/LmNvbGxhYm9yYXRpb25zLmZpbmQoXG4gICAgKGNvbGxhYm9yYXRpb24pID0+IGNvbGxhYm9yYXRpb24ucHJvamVjdC5pZCA9PT0gcHJvamVjdElkXG4gICk7XG5cbiAgY29uc3Qgb3BlbkZlZWRiYWNrT3ZlcmxheSA9ICgpID0+IHtcbiAgICBzZXRJc09wZW4odHJ1ZSk7XG4gIH07XG5cbiAgY29uc3QgY2xvc2VGZWVkYmFja092ZXJsYXkgPSAoKSA9PiB7XG4gICAgc2V0SXNPcGVuKGZhbHNlKTtcbiAgfTtcblxuICBjb25zdCByZXNldEZlZWRiYWNrID0gKCkgPT4ge1xuICAgIHNldE5ld0ZlZWRiYWNrKG51bGwpO1xuICAgIGFjdGl2YXRlRmVlZGJhY2tNb2RlKCk7XG4gIH07XG5cbiAgY29uc3QgY3JlYXRlRmVlZGJhY2sgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBjb25zdCBlbGVtZW50SWQgPSB0YXJnZXQ/LmRhdGFzZXQucGF0aCB8fCBcIlwiO1xuICAgICAgY29uc3QgYWxsRWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PihcbiAgICAgICAgYFtkYXRhLXBhdGg9XCIke2VsZW1lbnRJZH1cIl1gXG4gICAgICApO1xuXG4gICAgICBjb25zdCBhcnJBbGxFbGVtZW50cyA9IEFycmF5LmZyb20oYWxsRWxlbWVudHMpO1xuXG4gICAgICBjb25zdCBlbGVtZW50SW5kZXggPSBhcnJBbGxFbGVtZW50cy5pbmRleE9mKHRhcmdldCk7XG5cbiAgICAgIGNvbnN0IHggPSBlLm9mZnNldFg7XG4gICAgICBjb25zdCB5ID0gZS5vZmZzZXRZO1xuICAgICAgY29uc3QgZWxlbWVudFdpZHRoID0gdGFyZ2V0Py5jbGllbnRXaWR0aCB8fCAwO1xuICAgICAgY29uc3QgZWxlbWVudEhlaWdodCA9IHRhcmdldD8uY2xpZW50SGVpZ2h0IHx8IDA7XG5cbiAgICAgIHNldE5ld0ZlZWRiYWNrKHtcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgZWxlbWVudFdpZHRoLFxuICAgICAgICBlbGVtZW50SGVpZ2h0LFxuICAgICAgICBjb21tZW50OiBcIlwiLFxuICAgICAgICBwYXRoOiB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUsXG4gICAgICAgIGVsZW1lbnRJZCxcbiAgICAgICAgZWxlbWVudEluZGV4LFxuICAgICAgICBwcm9qZWN0SWQsXG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtwcm9qZWN0SWRdXG4gICk7XG5cbiAgY29uc3QgaXNTaWRlQmFyT3JGZWVkYmFja0l0ZW0gPSB1c2VDYWxsYmFjaygodGFyZ2V0OiBIVE1MRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IHNpZGViYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImZlZWRiYWNrLXNpZGViYXJcIik7XG5cbiAgICBpZiAoIXNpZGViYXIgfHwgc2lkZWJhci5jb250YWlucyh0YXJnZXQgYXMgTm9kZSkpIHJldHVybiB0cnVlO1xuXG4gICAgY29uc3QgZmVlZGJhY2tFbGVtZW50cyA9IGRvY3VtZW50XG4gICAgICAucXVlcnlTZWxlY3RvckFsbDxIVE1MRWxlbWVudD4oYC5mZWVkYmFjay1pdGVtYClcbiAgICAgIC52YWx1ZXMoKTtcblxuICAgIGZvciAoY29uc3QgZmVlZGJhY2tFbGVtZW50IG9mIGZlZWRiYWNrRWxlbWVudHMpIHtcbiAgICAgIGlmIChmZWVkYmFja0VsZW1lbnQuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LCBbXSk7XG5cbiAgY29uc3Qgc2hvdWxkQ3JlYXRlRmVlZGJhY2sgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBpZiAobmV3RmVlZGJhY2tSZWYuY3VycmVudCkge1xuICAgICAgICBpZiAoIW5ld0ZlZWRiYWNrUmVmLmN1cnJlbnQuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgICAgIHNldE5ld0ZlZWRiYWNrKG51bGwpO1xuICAgICAgICAgIGlmIChpc1NpZGVCYXJPckZlZWRiYWNrSXRlbSh0YXJnZXQpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gIWlzU2lkZUJhck9yRmVlZGJhY2tJdGVtKHRhcmdldCk7XG4gICAgfSxcbiAgICBbaXNTaWRlQmFyT3JGZWVkYmFja0l0ZW1dXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlTmV3RmVlZGJhY2sgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgaWYgKCFzaG91bGRDcmVhdGVGZWVkYmFjayhlKSkgcmV0dXJuO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgc2V0U2VsZWN0ZWRGZWVkYmFjayhudWxsKTtcbiAgICAgIGNyZWF0ZUZlZWRiYWNrKGUpO1xuXG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaGFuZGxlTmV3RmVlZGJhY2spO1xuICAgIH0sXG4gICAgW3Nob3VsZENyZWF0ZUZlZWRiYWNrLCBjcmVhdGVGZWVkYmFja11cbiAgKTtcblxuICBjb25zdCBhY3RpdmF0ZUZlZWRiYWNrTW9kZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoXCJjb21tZW50LWN1cnNvclwiKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaGFuZGxlTmV3RmVlZGJhY2ssIHRydWUpO1xuICB9LCBbaGFuZGxlTmV3RmVlZGJhY2tdKTtcblxuICBjb25zdCBkZWFjdGl2YXRlRmVlZGJhY2tNb2RlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVOZXdGZWVkYmFjaywgdHJ1ZSk7XG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKFwiY29tbWVudC1jdXJzb3JcIik7XG4gIH0sIFtoYW5kbGVOZXdGZWVkYmFja10pO1xuXG4gIGNvbnN0IGhhbmRsZUVzY2FwZVByZXNzID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSBcIkVzY2FwZVwiKSB7XG4gICAgICAgIGlmIChuZXdGZWVkYmFjaykge1xuICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVOZXdGZWVkYmFjayk7XG4gICAgICAgICAgc2V0TmV3RmVlZGJhY2sobnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVhY3RpdmF0ZUZlZWRiYWNrTW9kZSgpO1xuICAgICAgICAgIHNldElzT3BlbihmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtuZXdGZWVkYmFjaywgZGVhY3RpdmF0ZUZlZWRiYWNrTW9kZSwgaGFuZGxlTmV3RmVlZGJhY2tdXG4gICk7XG4gIGNvbnN0IHJlbW92ZVF1ZXJ5UGFyYW0gPSAobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcblxuICAgIHBhcmFtcy5kZWxldGUobmFtZSk7XG4gICAgY29uc3QgbmV3VXJsID0gYCR7d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lfSR7XG4gICAgICBwYXJhbXMudG9TdHJpbmcoKSA/IFwiP1wiIDogXCJcIlxuICAgIH0ke3BhcmFtcy50b1N0cmluZygpfWA7XG4gICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsIFwiXCIsIG5ld1VybCk7XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgaGFuZGxlRXNjYXBlUHJlc3MpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgaGFuZGxlRXNjYXBlUHJlc3MpO1xuICAgIH07XG4gIH0sIFtoYW5kbGVFc2NhcGVQcmVzc10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcblxuICAgIGNvbnN0IGdhbGFkcmltRmVlZGJhY2tUb2tlbiA9IHBhcmFtcy5nZXQoXCJnYWxhZHJpbUZlZWRiYWNrVG9rZW5cIik7XG4gICAgaWYgKGdhbGFkcmltRmVlZGJhY2tUb2tlbikge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJnYWxhZHJpbUZlZWRiYWNrVG9rZW5cIiwgZ2FsYWRyaW1GZWVkYmFja1Rva2VuKTtcbiAgICAgIHJlbW92ZVF1ZXJ5UGFyYW0oXCJnYWxhZHJpbUZlZWRiYWNrVG9rZW5cIik7XG4gICAgfVxuICB9LCBbZmVlZGJhY2tzLCBhY3RpdmF0ZUZlZWRiYWNrTW9kZV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzT3BlbiAmJiBpc0Nvbm5lY3RlZCAmJiBpc0NvbGxhYm9yYXRvcikgYWN0aXZhdGVGZWVkYmFja01vZGUoKTtcbiAgICBlbHNlIGRlYWN0aXZhdGVGZWVkYmFja01vZGUoKTtcbiAgfSwgW1xuICAgIGlzT3BlbixcbiAgICBpc0Nvbm5lY3RlZCxcbiAgICBpc0NvbGxhYm9yYXRvcixcbiAgICBhY3RpdmF0ZUZlZWRiYWNrTW9kZSxcbiAgICBkZWFjdGl2YXRlRmVlZGJhY2tNb2RlLFxuICBdKTtcblxuICBjb25zdCB2YWx1ZSA9IHtcbiAgICByb290RGlyLFxuICAgIHByb2plY3RJZCxcbiAgICBpc09wZW4sXG4gICAgZmVlZGJhY2tzLFxuICAgIG5ld0ZlZWRiYWNrLFxuICAgIG5ld0ZlZWRiYWNrUmVmLFxuICAgIHNlbGVjdGVkRmVlZGJhY2ssXG4gICAgc2V0U2VsZWN0ZWRGZWVkYmFjayxcbiAgICByZXNldEZlZWRiYWNrLFxuICAgIGFjdGl2YXRlRmVlZGJhY2tNb2RlLFxuICAgIGRlYWN0aXZhdGVGZWVkYmFja01vZGUsXG4gICAgb3BlbkZlZWRiYWNrT3ZlcmxheSxcbiAgICBjbG9zZUZlZWRiYWNrT3ZlcmxheSxcbiAgICBuYXZpZ2F0ZSxcbiAgfTtcbiAgcmV0dXJuIChcbiAgICA8RmVlZGJhY2tDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt2YWx1ZX0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9GZWVkYmFja0NvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgdXNlRmVlZGJhY2tDb250ZXh0ID0gKCkgPT4gdXNlQ29udGV4dChGZWVkYmFja0NvbnRleHQpO1xuIiwiZXhwb3J0IGNvbnN0IEJ1dHRvbiA9ICh7XG4gIHRleHQsXG4gIG9uQ2xpY2ssXG4gIGljb25QYXRoLFxuICBzaXplLFxufToge1xuICBvbkNsaWNrOiAoZTogUmVhY3QuTW91c2VFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHZvaWQ7XG4gIHRleHQ/OiBzdHJpbmc7XG4gIGljb25QYXRoPzogc3RyaW5nO1xuICBzaXplPzogXCJzbWFsbFwiIHwgXCJtZWRpdW1cIiB8IFwibGFyZ2VcIjtcbn0pID0+IHtcbiAgY29uc3QgcGFkZGluZyA9IGdldFBhZGRpbmcoc2l6ZSk7XG4gIGNvbnN0IGZvbnRTaXplID0gc2l6ZSA9PT0gXCJzbWFsbFwiID8gXCJ0ZXh0LXhzXCIgOiBcInRleHQtc21cIjtcbiAgY29uc3QgYm9yZGVyUmFkaXVzID0gc2l6ZSA9PT0gXCJzbWFsbFwiID8gXCJyb3VuZGVkLWxnXCIgOiBcInJvdW5kZWQtWzEycHhdXCI7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIGNsYXNzTmFtZT17YGZsZXgtc2hyaW5rLTAgZmxleCBmbGV4LXJvdyBpdGVtcy1jZW50ZXIgIGdhcC0yICR7cGFkZGluZ30gJHtib3JkZXJSYWRpdXN9IGJnLWJsdWUtNTAwIGhvdmVyOmJnLW9wYWNpdHktODBgfVxuICAgID5cbiAgICAgIHtpY29uUGF0aCAmJiA8aW1nIHNyYz17aWNvblBhdGh9IGNsYXNzTmFtZT1cInctNiBoLTZcIiAvPn1cbiAgICAgIHt0ZXh0ICYmIDxzcGFuIGNsYXNzTmFtZT17YCR7Zm9udFNpemV9IGZvbnQtc2VtaWJvbGRgfT57dGV4dH08L3NwYW4+fVxuICAgIDwvYnV0dG9uPlxuICApO1xufTtcblxuY29uc3QgZ2V0UGFkZGluZyA9IChzaXplPzogXCJzbWFsbFwiIHwgXCJtZWRpdW1cIiB8IFwibGFyZ2VcIikgPT4ge1xuICBzd2l0Y2ggKHNpemUpIHtcbiAgICBjYXNlIFwic21hbGxcIjpcbiAgICAgIHJldHVybiBcInB4LTMgcHktMlwiO1xuICAgIGNhc2UgXCJtZWRpdW1cIjpcbiAgICAgIHJldHVybiBcInAtM1wiO1xuICAgIGNhc2UgXCJsYXJnZVwiOlxuICAgICAgcmV0dXJuIFwicC0zXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBcInAtM1wiO1xuICB9XG59O1xuIiwidmFyIGltZyA9IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMjAnIGhlaWdodD0nMjAnIHZpZXdCb3g9JzAgMCAyMCAyMCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSUzY3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xOC4wNjIzIDE0LjM4NDlDMTguNDAyIDE0LjY5NTUgMTguNDI1NiAxNS4yMjI2IDE4LjExNTEgMTUuNTYyM0wxNy4yODE3IDE2LjQ3NEMxNi42OTA0IDE3LjEyMDYgMTUuODcxNSAxNy41IDE1LjAwMDEgMTcuNUMxNC4xMjkxIDE3LjUgMTMuMzEwNSAxNy4xMjEgMTIuNzE5MiAxNi40NzQ2QzEyLjQyNiAxNi4xNTUyIDEyLjA0NTcgMTUuOTkxNyAxMS42NjY5IDE1Ljk5MTdDMTEuMjg3OCAxNS45OTE3IDEwLjkwNzQgMTYuMTU1NCAxMC42MTQxIDE2LjQ3NTFDMTAuMzAyOSAxNi44MTQyIDkuNzc1NzcgMTYuODM2OSA5LjQzNjY0IDE2LjUyNTdDOS4wOTc1MiAxNi4yMTQ2IDkuMDc0ODQgMTUuNjg3NCA5LjM4NTk4IDE1LjM0ODNDOS45Nzc5MiAxNC43MDMxIDEwLjc5NjIgMTQuMzI1IDExLjY2NjkgMTQuMzI1QzEyLjUzNzUgMTQuMzI1IDEzLjM1NTggMTQuNzAzMSAxMy45NDc3IDE1LjM0ODNMMTMuOTQ4NyAxNS4zNDk0QzE0LjI0MTQgMTUuNjY5NSAxNC42MjE1IDE1LjgzMzMgMTUuMDAwMSAxNS44MzMzQzE1LjM3ODggMTUuODMzMyAxNS43NTg4IDE1LjY2OTUgMTYuMDUxNSAxNS4zNDk0VjE1LjM0OTRMMTYuODg1IDE0LjQzNzdDMTcuMTk1NSAxNC4wOTggMTcuNzIyNiAxNC4wNzQ0IDE4LjA2MjMgMTQuMzg0OVonIGZpbGw9J3doaXRlJy8lM2UlM2NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTMuMTYwOCAyLjMyNzRDMTQuMTc2NiAxLjMxMTYgMTUuODIzNSAxLjMxMTYgMTYuODM5MyAyLjMyNzRDMTcuODU1MSAzLjM0MzE5IDE3Ljg1NTEgNC45OTAxMSAxNi44MzkzIDYuMDA1OTFMNi4zNzAzNyAxNi40NzQ5QzYuMzUzODcgMTYuNDkxNCA2LjMzNzUzIDE2LjUwNzcgNi4zMjEzMSAxNi41MjRDNi4wODE3NyAxNi43NjQgNS44NzA1NyAxNi45NzU2IDUuNjE1OTYgMTcuMTMxNkM1LjM5MjI4IDE3LjI2ODcgNS4xNDg0MSAxNy4zNjk3IDQuODkzMzIgMTcuNDMwOUM0LjYwMjk1IDE3LjUwMDYgNC4zMDM5OSAxNy41MDAzIDMuOTY0OTEgMTcuNUMzLjk0MTk2IDE3LjUgMy45MTg4MyAxNy41IDMuODk1NSAxNy41SDIuNTAwMDRDMi4wMzk4MSAxNy41IDEuNjY2NzEgMTcuMTI2OSAxLjY2NjcxIDE2LjY2NjdWMTUuMjcxMkMxLjY2NjcxIDE1LjI0NzkgMS42NjY2OSAxNS4yMjQ4IDEuNjY2NjcgMTUuMjAxOEMxLjY2NjM1IDE0Ljg2MjcgMS42NjYwNyAxNC41NjM4IDEuNzM1NzkgMTQuMjczNEMxLjc5NzAzIDE0LjAxODMgMS44OTgwNCAxMy43NzQ0IDIuMDM1MTEgMTMuNTUwOEMyLjE5MTE0IDEzLjI5NjEgMi40MDI3MyAxMy4wODQ5IDIuNjQyNzIgMTIuODQ1NEMyLjY1ODk3IDEyLjgyOTIgMi42NzUzNCAxMi44MTI4IDIuNjkxODQgMTIuNzk2M0wxMy4xNjA4IDIuMzI3NFonIGZpbGw9J3doaXRlJy8lM2UlM2Mvc3ZnJTNlXCI7XG4gIGV4cG9ydCBkZWZhdWx0IGltZzsiLCJpbXBvcnQgeyB1c2VGZWVkYmFja0NvbnRleHQgfSBmcm9tIFwiLi4vLi4vLi4vY29udGV4dHMvRmVlZGJhY2tDb250ZXh0XCI7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi9CdXR0b25cIjtcbmltcG9ydCBFZGl0IGZyb20gXCIuLi8uLi8uLi9hc3NldHMvaWNvbnMvZWRpdC0wNC5zdmdcIjtcblxuZXhwb3J0IGNvbnN0IE9wZW5GZWVkYmFja0J1dHRvbiA9ICgpID0+IHtcbiAgY29uc3QgeyBpc09wZW4sIG9wZW5GZWVkYmFja092ZXJsYXkgfSA9IHVzZUZlZWRiYWNrQ29udGV4dCgpO1xuXG4gIGlmIChpc09wZW4pIHJldHVybiBudWxsO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgcG9zaXRpb246IFwiZml4ZWRcIixcbiAgICAgICAgdG9wOiBcImNhbGMoMTAwdmggLSA3MnB4KVwiLFxuICAgICAgICBsZWZ0OiBcImNhbGMoMTAwdncgLSA3MnB4KVwiLFxuICAgICAgICB6SW5kZXg6IDEwMDAwMDAsXG4gICAgICB9fVxuICAgID5cbiAgICAgIDxCdXR0b24gaWNvblBhdGg9e0VkaXR9IG9uQ2xpY2s9e29wZW5GZWVkYmFja092ZXJsYXl9IHNpemU9XCJtZWRpdW1cIiAvPlxuICAgIDwvZGl2PlxuICApO1xufTtcbiIsImV4cG9ydCBjb25zdCBnZXRJbml0aWFscyA9ICh1c2VyOiB7XG4gIGZ1bGxOYW1lPzogc3RyaW5nO1xuICBmaXJzdE5hbWU/OiBzdHJpbmc7XG4gIGxhc3ROYW1lPzogc3RyaW5nO1xufSkgPT4ge1xuICBpZiAodXNlci5mdWxsTmFtZSkge1xuICAgIGNvbnN0IGZ1bGxOYW1lID0gdXNlci5mdWxsTmFtZS5zcGxpdChcIiBcIik7XG4gICAgcmV0dXJuIGZ1bGxOYW1lWzBdLmNoYXJBdCgwKSArIGZ1bGxOYW1lWzFdLmNoYXJBdCgwKTtcbiAgfVxuICBpZiAoIXVzZXIuZmlyc3ROYW1lIHx8ICF1c2VyLmxhc3ROYW1lKSByZXR1cm4gXCJcIjtcbiAgY29uc3QgZmlyc3ROYW1lID0gdXNlci5maXJzdE5hbWUuY2hhckF0KDApO1xuICBjb25zdCBsYXN0TmFtZSA9IHVzZXIubGFzdE5hbWUuY2hhckF0KDApO1xuXG4gIHJldHVybiBgJHtmaXJzdE5hbWUudG9VcHBlckNhc2UoKX0ke2xhc3ROYW1lLnRvVXBwZXJDYXNlKCl9YDtcbn07XG4iLCIvLyEgbW9tZW50LmpzXG4vLyEgdmVyc2lvbiA6IDIuMzAuMVxuLy8hIGF1dGhvcnMgOiBUaW0gV29vZCwgSXNrcmVuIENoZXJuZXYsIE1vbWVudC5qcyBjb250cmlidXRvcnNcbi8vISBsaWNlbnNlIDogTUlUXG4vLyEgbW9tZW50anMuY29tXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcbiAgICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuICAgIGdsb2JhbC5tb21lbnQgPSBmYWN0b3J5KClcbn0odGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIGhvb2tDYWxsYmFjaztcblxuICAgIGZ1bmN0aW9uIGhvb2tzKCkge1xuICAgICAgICByZXR1cm4gaG9va0NhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyBkb25lIHRvIHJlZ2lzdGVyIHRoZSBtZXRob2QgY2FsbGVkIHdpdGggbW9tZW50KClcbiAgICAvLyB3aXRob3V0IGNyZWF0aW5nIGNpcmN1bGFyIGRlcGVuZGVuY2llcy5cbiAgICBmdW5jdGlvbiBzZXRIb29rQ2FsbGJhY2soY2FsbGJhY2spIHtcbiAgICAgICAgaG9va0NhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBcnJheShpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBBcnJheSB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzT2JqZWN0KGlucHV0KSB7XG4gICAgICAgIC8vIElFOCB3aWxsIHRyZWF0IHVuZGVmaW5lZCBhbmQgbnVsbCBhcyBvYmplY3QgaWYgaXQgd2Fzbid0IGZvclxuICAgICAgICAvLyBpbnB1dCAhPSBudWxsXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpbnB1dCAhPSBudWxsICYmXG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBPYmplY3RdJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhc093blByb3AoYSwgYikge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsIGIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzT2JqZWN0RW1wdHkob2JqKSB7XG4gICAgICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikubGVuZ3RoID09PSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGs7XG4gICAgICAgICAgICBmb3IgKGsgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc093blByb3Aob2JqLCBrKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1VuZGVmaW5lZChpbnB1dCkge1xuICAgICAgICByZXR1cm4gaW5wdXQgPT09IHZvaWQgMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc051bWJlcihpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdHlwZW9mIGlucHV0ID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgTnVtYmVyXSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0RhdGUoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlucHV0IGluc3RhbmNlb2YgRGF0ZSB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgRGF0ZV0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFwKGFyciwgZm4pIHtcbiAgICAgICAgdmFyIHJlcyA9IFtdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGFyckxlbiA9IGFyci5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcnJMZW47ICsraSkge1xuICAgICAgICAgICAgcmVzLnB1c2goZm4oYXJyW2ldLCBpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHRlbmQoYSwgYikge1xuICAgICAgICBmb3IgKHZhciBpIGluIGIpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGIsIGkpKSB7XG4gICAgICAgICAgICAgICAgYVtpXSA9IGJbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzT3duUHJvcChiLCAndG9TdHJpbmcnKSkge1xuICAgICAgICAgICAgYS50b1N0cmluZyA9IGIudG9TdHJpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzT3duUHJvcChiLCAndmFsdWVPZicpKSB7XG4gICAgICAgICAgICBhLnZhbHVlT2YgPSBiLnZhbHVlT2Y7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsT3JVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QsIHRydWUpLnV0YygpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlZmF1bHRQYXJzaW5nRmxhZ3MoKSB7XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gZGVlcCBjbG9uZSB0aGlzIG9iamVjdC5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVtcHR5OiBmYWxzZSxcbiAgICAgICAgICAgIHVudXNlZFRva2VuczogW10sXG4gICAgICAgICAgICB1bnVzZWRJbnB1dDogW10sXG4gICAgICAgICAgICBvdmVyZmxvdzogLTIsXG4gICAgICAgICAgICBjaGFyc0xlZnRPdmVyOiAwLFxuICAgICAgICAgICAgbnVsbElucHV0OiBmYWxzZSxcbiAgICAgICAgICAgIGludmFsaWRFcmE6IG51bGwsXG4gICAgICAgICAgICBpbnZhbGlkTW9udGg6IG51bGwsXG4gICAgICAgICAgICBpbnZhbGlkRm9ybWF0OiBmYWxzZSxcbiAgICAgICAgICAgIHVzZXJJbnZhbGlkYXRlZDogZmFsc2UsXG4gICAgICAgICAgICBpc286IGZhbHNlLFxuICAgICAgICAgICAgcGFyc2VkRGF0ZVBhcnRzOiBbXSxcbiAgICAgICAgICAgIGVyYTogbnVsbCxcbiAgICAgICAgICAgIG1lcmlkaWVtOiBudWxsLFxuICAgICAgICAgICAgcmZjMjgyMjogZmFsc2UsXG4gICAgICAgICAgICB3ZWVrZGF5TWlzbWF0Y2g6IGZhbHNlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFBhcnNpbmdGbGFncyhtKSB7XG4gICAgICAgIGlmIChtLl9wZiA9PSBudWxsKSB7XG4gICAgICAgICAgICBtLl9wZiA9IGRlZmF1bHRQYXJzaW5nRmxhZ3MoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbS5fcGY7XG4gICAgfVxuXG4gICAgdmFyIHNvbWU7XG4gICAgaWYgKEFycmF5LnByb3RvdHlwZS5zb21lKSB7XG4gICAgICAgIHNvbWUgPSBBcnJheS5wcm90b3R5cGUuc29tZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzb21lID0gZnVuY3Rpb24gKGZ1bikge1xuICAgICAgICAgICAgdmFyIHQgPSBPYmplY3QodGhpcyksXG4gICAgICAgICAgICAgICAgbGVuID0gdC5sZW5ndGggPj4+IDAsXG4gICAgICAgICAgICAgICAgaTtcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgaW4gdCAmJiBmdW4uY2FsbCh0aGlzLCB0W2ldLCBpLCB0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1ZhbGlkKG0pIHtcbiAgICAgICAgdmFyIGZsYWdzID0gbnVsbCxcbiAgICAgICAgICAgIHBhcnNlZFBhcnRzID0gZmFsc2UsXG4gICAgICAgICAgICBpc05vd1ZhbGlkID0gbS5fZCAmJiAhaXNOYU4obS5fZC5nZXRUaW1lKCkpO1xuICAgICAgICBpZiAoaXNOb3dWYWxpZCkge1xuICAgICAgICAgICAgZmxhZ3MgPSBnZXRQYXJzaW5nRmxhZ3MobSk7XG4gICAgICAgICAgICBwYXJzZWRQYXJ0cyA9IHNvbWUuY2FsbChmbGFncy5wYXJzZWREYXRlUGFydHMsIGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgIT0gbnVsbDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXNOb3dWYWxpZCA9XG4gICAgICAgICAgICAgICAgZmxhZ3Mub3ZlcmZsb3cgPCAwICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLmVtcHR5ICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRFcmEgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZE1vbnRoICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRXZWVrZGF5ICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLndlZWtkYXlNaXNtYXRjaCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5udWxsSW5wdXQgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZEZvcm1hdCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy51c2VySW52YWxpZGF0ZWQgJiZcbiAgICAgICAgICAgICAgICAoIWZsYWdzLm1lcmlkaWVtIHx8IChmbGFncy5tZXJpZGllbSAmJiBwYXJzZWRQYXJ0cykpO1xuICAgICAgICAgICAgaWYgKG0uX3N0cmljdCkge1xuICAgICAgICAgICAgICAgIGlzTm93VmFsaWQgPVxuICAgICAgICAgICAgICAgICAgICBpc05vd1ZhbGlkICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmNoYXJzTGVmdE92ZXIgPT09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MudW51c2VkVG9rZW5zLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy5iaWdIb3VyID09PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE9iamVjdC5pc0Zyb3plbiA9PSBudWxsIHx8ICFPYmplY3QuaXNGcm96ZW4obSkpIHtcbiAgICAgICAgICAgIG0uX2lzVmFsaWQgPSBpc05vd1ZhbGlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzTm93VmFsaWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG0uX2lzVmFsaWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW52YWxpZChmbGFncykge1xuICAgICAgICB2YXIgbSA9IGNyZWF0ZVVUQyhOYU4pO1xuICAgICAgICBpZiAoZmxhZ3MgIT0gbnVsbCkge1xuICAgICAgICAgICAgZXh0ZW5kKGdldFBhcnNpbmdGbGFncyhtKSwgZmxhZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLnVzZXJJbnZhbGlkYXRlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICAvLyBQbHVnaW5zIHRoYXQgYWRkIHByb3BlcnRpZXMgc2hvdWxkIGFsc28gYWRkIHRoZSBrZXkgaGVyZSAobnVsbCB2YWx1ZSksXG4gICAgLy8gc28gd2UgY2FuIHByb3Blcmx5IGNsb25lIG91cnNlbHZlcy5cbiAgICB2YXIgbW9tZW50UHJvcGVydGllcyA9IChob29rcy5tb21lbnRQcm9wZXJ0aWVzID0gW10pLFxuICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiBjb3B5Q29uZmlnKHRvLCBmcm9tKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgcHJvcCxcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIG1vbWVudFByb3BlcnRpZXNMZW4gPSBtb21lbnRQcm9wZXJ0aWVzLmxlbmd0aDtcblxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2lzQU1vbWVudE9iamVjdCkpIHtcbiAgICAgICAgICAgIHRvLl9pc0FNb21lbnRPYmplY3QgPSBmcm9tLl9pc0FNb21lbnRPYmplY3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9pKSkge1xuICAgICAgICAgICAgdG8uX2kgPSBmcm9tLl9pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fZikpIHtcbiAgICAgICAgICAgIHRvLl9mID0gZnJvbS5fZjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2wpKSB7XG4gICAgICAgICAgICB0by5fbCA9IGZyb20uX2w7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9zdHJpY3QpKSB7XG4gICAgICAgICAgICB0by5fc3RyaWN0ID0gZnJvbS5fc3RyaWN0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fdHptKSkge1xuICAgICAgICAgICAgdG8uX3R6bSA9IGZyb20uX3R6bTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2lzVVRDKSkge1xuICAgICAgICAgICAgdG8uX2lzVVRDID0gZnJvbS5faXNVVEM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9vZmZzZXQpKSB7XG4gICAgICAgICAgICB0by5fb2Zmc2V0ID0gZnJvbS5fb2Zmc2V0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fcGYpKSB7XG4gICAgICAgICAgICB0by5fcGYgPSBnZXRQYXJzaW5nRmxhZ3MoZnJvbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9sb2NhbGUpKSB7XG4gICAgICAgICAgICB0by5fbG9jYWxlID0gZnJvbS5fbG9jYWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vbWVudFByb3BlcnRpZXNMZW4gPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbW9tZW50UHJvcGVydGllc0xlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcHJvcCA9IG1vbWVudFByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICAgICAgdmFsID0gZnJvbVtwcm9wXTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9bcHJvcF0gPSB2YWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRvO1xuICAgIH1cblxuICAgIC8vIE1vbWVudCBwcm90b3R5cGUgb2JqZWN0XG4gICAgZnVuY3Rpb24gTW9tZW50KGNvbmZpZykge1xuICAgICAgICBjb3B5Q29uZmlnKHRoaXMsIGNvbmZpZyk7XG4gICAgICAgIHRoaXMuX2QgPSBuZXcgRGF0ZShjb25maWcuX2QgIT0gbnVsbCA/IGNvbmZpZy5fZC5nZXRUaW1lKCkgOiBOYU4pO1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICB0aGlzLl9kID0gbmV3IERhdGUoTmFOKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBQcmV2ZW50IGluZmluaXRlIGxvb3AgaW4gY2FzZSB1cGRhdGVPZmZzZXQgY3JlYXRlcyBuZXcgbW9tZW50XG4gICAgICAgIC8vIG9iamVjdHMuXG4gICAgICAgIGlmICh1cGRhdGVJblByb2dyZXNzID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdXBkYXRlSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcyk7XG4gICAgICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc01vbWVudChvYmopIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIG9iaiBpbnN0YW5jZW9mIE1vbWVudCB8fCAob2JqICE9IG51bGwgJiYgb2JqLl9pc0FNb21lbnRPYmplY3QgIT0gbnVsbClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3YXJuKG1zZykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBob29rcy5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MgPT09IGZhbHNlICYmXG4gICAgICAgICAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIGNvbnNvbGUud2FyblxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignRGVwcmVjYXRpb24gd2FybmluZzogJyArIG1zZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXByZWNhdGUobXNnLCBmbikge1xuICAgICAgICB2YXIgZmlyc3RUaW1lID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gZXh0ZW5kKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChob29rcy5kZXByZWNhdGlvbkhhbmRsZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlcihudWxsLCBtc2cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpcnN0VGltZSkge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgICAgICAgICAgICAgIGFyZyxcbiAgICAgICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICBhcmdMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcmdMZW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBhcmcgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbaV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgKz0gJ1xcblsnICsgaSArICddICc7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGtleSBpbiBhcmd1bWVudHNbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChhcmd1bWVudHNbMF0sIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnICs9IGtleSArICc6ICcgKyBhcmd1bWVudHNbMF1ba2V5XSArICcsICc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJnLnNsaWNlKDAsIC0yKTsgLy8gUmVtb3ZlIHRyYWlsaW5nIGNvbW1hIGFuZCBzcGFjZVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChhcmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgICAgICAgICBtc2cgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbkFyZ3VtZW50czogJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzKS5qb2luKCcnKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRXJyb3IoKS5zdGFja1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZmlyc3RUaW1lID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgZm4pO1xuICAgIH1cblxuICAgIHZhciBkZXByZWNhdGlvbnMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZVNpbXBsZShuYW1lLCBtc2cpIHtcbiAgICAgICAgaWYgKGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciAhPSBudWxsKSB7XG4gICAgICAgICAgICBob29rcy5kZXByZWNhdGlvbkhhbmRsZXIobmFtZSwgbXNnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRlcHJlY2F0aW9uc1tuYW1lXSkge1xuICAgICAgICAgICAgd2Fybihtc2cpO1xuICAgICAgICAgICAgZGVwcmVjYXRpb25zW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhvb2tzLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyA9IGZhbHNlO1xuICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciA9IG51bGw7XG5cbiAgICBmdW5jdGlvbiBpc0Z1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAodHlwZW9mIEZ1bmN0aW9uICE9PSAndW5kZWZpbmVkJyAmJiBpbnB1dCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldChjb25maWcpIHtcbiAgICAgICAgdmFyIHByb3AsIGk7XG4gICAgICAgIGZvciAoaSBpbiBjb25maWcpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGNvbmZpZywgaSkpIHtcbiAgICAgICAgICAgICAgICBwcm9wID0gY29uZmlnW2ldO1xuICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbaV0gPSBwcm9wO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbJ18nICsgaV0gPSBwcm9wO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XG4gICAgICAgIC8vIExlbmllbnQgb3JkaW5hbCBwYXJzaW5nIGFjY2VwdHMganVzdCBhIG51bWJlciBpbiBhZGRpdGlvbiB0b1xuICAgICAgICAvLyBudW1iZXIgKyAocG9zc2libHkpIHN0dWZmIGNvbWluZyBmcm9tIF9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlLlxuICAgICAgICAvLyBUT0RPOiBSZW1vdmUgXCJvcmRpbmFsUGFyc2VcIiBmYWxsYmFjayBpbiBuZXh0IG1ham9yIHJlbGVhc2UuXG4gICAgICAgIHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICh0aGlzLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlLnNvdXJjZSB8fCB0aGlzLl9vcmRpbmFsUGFyc2Uuc291cmNlKSArXG4gICAgICAgICAgICAgICAgJ3wnICtcbiAgICAgICAgICAgICAgICAvXFxkezEsMn0vLnNvdXJjZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNoaWxkQ29uZmlnKSB7XG4gICAgICAgIHZhciByZXMgPSBleHRlbmQoe30sIHBhcmVudENvbmZpZyksXG4gICAgICAgICAgICBwcm9wO1xuICAgICAgICBmb3IgKHByb3AgaW4gY2hpbGRDb25maWcpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGNoaWxkQ29uZmlnLCBwcm9wKSkge1xuICAgICAgICAgICAgICAgIGlmIChpc09iamVjdChwYXJlbnRDb25maWdbcHJvcF0pICYmIGlzT2JqZWN0KGNoaWxkQ29uZmlnW3Byb3BdKSkge1xuICAgICAgICAgICAgICAgICAgICByZXNbcHJvcF0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJlc1twcm9wXSwgcGFyZW50Q29uZmlnW3Byb3BdKTtcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJlc1twcm9wXSwgY2hpbGRDb25maWdbcHJvcF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRDb25maWdbcHJvcF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXNbcHJvcF0gPSBjaGlsZENvbmZpZ1twcm9wXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmVzW3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKHByb3AgaW4gcGFyZW50Q29uZmlnKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgaGFzT3duUHJvcChwYXJlbnRDb25maWcsIHByb3ApICYmXG4gICAgICAgICAgICAgICAgIWhhc093blByb3AoY2hpbGRDb25maWcsIHByb3ApICYmXG4gICAgICAgICAgICAgICAgaXNPYmplY3QocGFyZW50Q29uZmlnW3Byb3BdKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIGNoYW5nZXMgdG8gcHJvcGVydGllcyBkb24ndCBtb2RpZnkgcGFyZW50IGNvbmZpZ1xuICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IGV4dGVuZCh7fSwgcmVzW3Byb3BdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIExvY2FsZShjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnNldChjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGtleXM7XG5cbiAgICBpZiAoT2JqZWN0LmtleXMpIHtcbiAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGtleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgICAgICByZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoaSBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChvYmosIGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRDYWxlbmRhciA9IHtcbiAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW1RvbW9ycm93IGF0XSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYXRdIExUJyxcbiAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdbTGFzdF0gZGRkZCBbYXRdIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gY2FsZW5kYXIoa2V5LCBtb20sIG5vdykge1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fY2FsZW5kYXJba2V5XSB8fCB0aGlzLl9jYWxlbmRhclsnc2FtZUVsc2UnXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24ob3V0cHV0KSA/IG91dHB1dC5jYWxsKG1vbSwgbm93KSA6IG91dHB1dDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB6ZXJvRmlsbChudW1iZXIsIHRhcmdldExlbmd0aCwgZm9yY2VTaWduKSB7XG4gICAgICAgIHZhciBhYnNOdW1iZXIgPSAnJyArIE1hdGguYWJzKG51bWJlciksXG4gICAgICAgICAgICB6ZXJvc1RvRmlsbCA9IHRhcmdldExlbmd0aCAtIGFic051bWJlci5sZW5ndGgsXG4gICAgICAgICAgICBzaWduID0gbnVtYmVyID49IDA7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoc2lnbiA/IChmb3JjZVNpZ24gPyAnKycgOiAnJykgOiAnLScpICtcbiAgICAgICAgICAgIE1hdGgucG93KDEwLCBNYXRoLm1heCgwLCB6ZXJvc1RvRmlsbCkpLnRvU3RyaW5nKCkuc3Vic3RyKDEpICtcbiAgICAgICAgICAgIGFic051bWJlclxuICAgICAgICApO1xuICAgIH1cblxuICAgIHZhciBmb3JtYXR0aW5nVG9rZW5zID1cbiAgICAgICAgICAgIC8oXFxbW15cXFtdKlxcXSl8KFxcXFwpPyhbSGhdbW0oc3MpP3xNb3xNTT9NP00/fERvfERERG98REQ/RD9EP3xkZGQ/ZD98ZG8/fHdbb3x3XT98V1tvfFddP3xRbz98TnsxLDV9fFlZWVlZWXxZWVlZWXxZWVlZfFlZfHl7Miw0fXx5bz98Z2coZ2dnPyk/fEdHKEdHRz8pP3xlfEV8YXxBfGhoP3xISD98a2s/fG1tP3xzcz98U3sxLDl9fHh8WHx6ej98Wlo/fC4pL2csXG4gICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2VucyA9IC8oXFxbW15cXFtdKlxcXSl8KFxcXFwpPyhMVFN8TFR8TEw/TD9MP3xsezEsNH0pL2csXG4gICAgICAgIGZvcm1hdEZ1bmN0aW9ucyA9IHt9LFxuICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9ucyA9IHt9O1xuXG4gICAgLy8gdG9rZW46ICAgICdNJ1xuICAgIC8vIHBhZGRlZDogICBbJ01NJywgMl1cbiAgICAvLyBvcmRpbmFsOiAgJ01vJ1xuICAgIC8vIGNhbGxiYWNrOiBmdW5jdGlvbiAoKSB7IHRoaXMubW9udGgoKSArIDEgfVxuICAgIGZ1bmN0aW9uIGFkZEZvcm1hdFRva2VuKHRva2VuLCBwYWRkZWQsIG9yZGluYWwsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBmdW5jID0gY2FsbGJhY2s7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBmdW5jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2NhbGxiYWNrXSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW3Rva2VuXSA9IGZ1bmM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhZGRlZCkge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbcGFkZGVkWzBdXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gemVyb0ZpbGwoZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCBwYWRkZWRbMV0sIHBhZGRlZFsyXSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcmRpbmFsKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1tvcmRpbmFsXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkub3JkaW5hbChcbiAgICAgICAgICAgICAgICAgICAgZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLFxuICAgICAgICAgICAgICAgICAgICB0b2tlblxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVtb3ZlRm9ybWF0dGluZ1Rva2VucyhpbnB1dCkge1xuICAgICAgICBpZiAoaW5wdXQubWF0Y2goL1xcW1tcXHNcXFNdLykpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dC5yZXBsYWNlKC9eXFxbfFxcXSQvZywgJycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnB1dC5yZXBsYWNlKC9cXFxcL2csICcnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlRm9ybWF0RnVuY3Rpb24oZm9ybWF0KSB7XG4gICAgICAgIHZhciBhcnJheSA9IGZvcm1hdC5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBsZW5ndGg7XG5cbiAgICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXRUb2tlbkZ1bmN0aW9uc1thcnJheVtpXV0pIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IGZvcm1hdFRva2VuRnVuY3Rpb25zW2FycmF5W2ldXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSByZW1vdmVGb3JtYXR0aW5nVG9rZW5zKGFycmF5W2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobW9tKSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0ID0gJycsXG4gICAgICAgICAgICAgICAgaTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSBpc0Z1bmN0aW9uKGFycmF5W2ldKVxuICAgICAgICAgICAgICAgICAgICA/IGFycmF5W2ldLmNhbGwobW9tLCBmb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgIDogYXJyYXlbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIGZvcm1hdCBkYXRlIHVzaW5nIG5hdGl2ZSBkYXRlIG9iamVjdFxuICAgIGZ1bmN0aW9uIGZvcm1hdE1vbWVudChtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG0ubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXQgPSBleHBhbmRGb3JtYXQoZm9ybWF0LCBtLmxvY2FsZURhdGEoKSk7XG4gICAgICAgIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdID1cbiAgICAgICAgICAgIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdIHx8IG1ha2VGb3JtYXRGdW5jdGlvbihmb3JtYXQpO1xuXG4gICAgICAgIHJldHVybiBmb3JtYXRGdW5jdGlvbnNbZm9ybWF0XShtKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHBhbmRGb3JtYXQoZm9ybWF0LCBsb2NhbGUpIHtcbiAgICAgICAgdmFyIGkgPSA1O1xuXG4gICAgICAgIGZ1bmN0aW9uIHJlcGxhY2VMb25nRGF0ZUZvcm1hdFRva2VucyhpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS5sb25nRGF0ZUZvcm1hdChpbnB1dCkgfHwgaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMubGFzdEluZGV4ID0gMDtcbiAgICAgICAgd2hpbGUgKGkgPj0gMCAmJiBsb2NhbEZvcm1hdHRpbmdUb2tlbnMudGVzdChmb3JtYXQpKSB7XG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZShcbiAgICAgICAgICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMsXG4gICAgICAgICAgICAgICAgcmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbG9jYWxGb3JtYXR0aW5nVG9rZW5zLmxhc3RJbmRleCA9IDA7XG4gICAgICAgICAgICBpIC09IDE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9uZ0RhdGVGb3JtYXQgPSB7XG4gICAgICAgIExUUzogJ2g6bW06c3MgQScsXG4gICAgICAgIExUOiAnaDptbSBBJyxcbiAgICAgICAgTDogJ01NL0REL1lZWVknLFxuICAgICAgICBMTDogJ01NTU0gRCwgWVlZWScsXG4gICAgICAgIExMTDogJ01NTU0gRCwgWVlZWSBoOm1tIEEnLFxuICAgICAgICBMTExMOiAnZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQScsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGxvbmdEYXRlRm9ybWF0KGtleSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0gdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5XSxcbiAgICAgICAgICAgIGZvcm1hdFVwcGVyID0gdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5LnRvVXBwZXJDYXNlKCldO1xuXG4gICAgICAgIGlmIChmb3JtYXQgfHwgIWZvcm1hdFVwcGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5XSA9IGZvcm1hdFVwcGVyXG4gICAgICAgICAgICAubWF0Y2goZm9ybWF0dGluZ1Rva2VucylcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHRvaykge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnTU1NTScgfHxcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnTU0nIHx8XG4gICAgICAgICAgICAgICAgICAgIHRvayA9PT0gJ0REJyB8fFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdkZGRkJ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdG9rO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKCcnKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5XTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdEludmFsaWREYXRlID0gJ0ludmFsaWQgZGF0ZSc7XG5cbiAgICBmdW5jdGlvbiBpbnZhbGlkRGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludmFsaWREYXRlO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0T3JkaW5hbCA9ICclZCcsXG4gICAgICAgIGRlZmF1bHREYXlPZk1vbnRoT3JkaW5hbFBhcnNlID0gL1xcZHsxLDJ9LztcblxuICAgIGZ1bmN0aW9uIG9yZGluYWwobnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcmRpbmFsLnJlcGxhY2UoJyVkJywgbnVtYmVyKTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdFJlbGF0aXZlVGltZSA9IHtcbiAgICAgICAgZnV0dXJlOiAnaW4gJXMnLFxuICAgICAgICBwYXN0OiAnJXMgYWdvJyxcbiAgICAgICAgczogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICBzczogJyVkIHNlY29uZHMnLFxuICAgICAgICBtOiAnYSBtaW51dGUnLFxuICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICBoOiAnYW4gaG91cicsXG4gICAgICAgIGhoOiAnJWQgaG91cnMnLFxuICAgICAgICBkOiAnYSBkYXknLFxuICAgICAgICBkZDogJyVkIGRheXMnLFxuICAgICAgICB3OiAnYSB3ZWVrJyxcbiAgICAgICAgd3c6ICclZCB3ZWVrcycsXG4gICAgICAgIE06ICdhIG1vbnRoJyxcbiAgICAgICAgTU06ICclZCBtb250aHMnLFxuICAgICAgICB5OiAnYSB5ZWFyJyxcbiAgICAgICAgeXk6ICclZCB5ZWFycycsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHJlbGF0aXZlVGltZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIG91dHB1dCA9IHRoaXMuX3JlbGF0aXZlVGltZVtzdHJpbmddO1xuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihvdXRwdXQpXG4gICAgICAgICAgICA/IG91dHB1dChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpXG4gICAgICAgICAgICA6IG91dHB1dC5yZXBsYWNlKC8lZC9pLCBudW1iZXIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhc3RGdXR1cmUoZGlmZiwgb3V0cHV0KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB0aGlzLl9yZWxhdGl2ZVRpbWVbZGlmZiA+IDAgPyAnZnV0dXJlJyA6ICdwYXN0J107XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKGZvcm1hdCkgPyBmb3JtYXQob3V0cHV0KSA6IGZvcm1hdC5yZXBsYWNlKC8lcy9pLCBvdXRwdXQpO1xuICAgIH1cblxuICAgIHZhciBhbGlhc2VzID0ge1xuICAgICAgICBEOiAnZGF0ZScsXG4gICAgICAgIGRhdGVzOiAnZGF0ZScsXG4gICAgICAgIGRhdGU6ICdkYXRlJyxcbiAgICAgICAgZDogJ2RheScsXG4gICAgICAgIGRheXM6ICdkYXknLFxuICAgICAgICBkYXk6ICdkYXknLFxuICAgICAgICBlOiAnd2Vla2RheScsXG4gICAgICAgIHdlZWtkYXlzOiAnd2Vla2RheScsXG4gICAgICAgIHdlZWtkYXk6ICd3ZWVrZGF5JyxcbiAgICAgICAgRTogJ2lzb1dlZWtkYXknLFxuICAgICAgICBpc293ZWVrZGF5czogJ2lzb1dlZWtkYXknLFxuICAgICAgICBpc293ZWVrZGF5OiAnaXNvV2Vla2RheScsXG4gICAgICAgIERERDogJ2RheU9mWWVhcicsXG4gICAgICAgIGRheW9meWVhcnM6ICdkYXlPZlllYXInLFxuICAgICAgICBkYXlvZnllYXI6ICdkYXlPZlllYXInLFxuICAgICAgICBoOiAnaG91cicsXG4gICAgICAgIGhvdXJzOiAnaG91cicsXG4gICAgICAgIGhvdXI6ICdob3VyJyxcbiAgICAgICAgbXM6ICdtaWxsaXNlY29uZCcsXG4gICAgICAgIG1pbGxpc2Vjb25kczogJ21pbGxpc2Vjb25kJyxcbiAgICAgICAgbWlsbGlzZWNvbmQ6ICdtaWxsaXNlY29uZCcsXG4gICAgICAgIG06ICdtaW51dGUnLFxuICAgICAgICBtaW51dGVzOiAnbWludXRlJyxcbiAgICAgICAgbWludXRlOiAnbWludXRlJyxcbiAgICAgICAgTTogJ21vbnRoJyxcbiAgICAgICAgbW9udGhzOiAnbW9udGgnLFxuICAgICAgICBtb250aDogJ21vbnRoJyxcbiAgICAgICAgUTogJ3F1YXJ0ZXInLFxuICAgICAgICBxdWFydGVyczogJ3F1YXJ0ZXInLFxuICAgICAgICBxdWFydGVyOiAncXVhcnRlcicsXG4gICAgICAgIHM6ICdzZWNvbmQnLFxuICAgICAgICBzZWNvbmRzOiAnc2Vjb25kJyxcbiAgICAgICAgc2Vjb25kOiAnc2Vjb25kJyxcbiAgICAgICAgZ2c6ICd3ZWVrWWVhcicsXG4gICAgICAgIHdlZWt5ZWFyczogJ3dlZWtZZWFyJyxcbiAgICAgICAgd2Vla3llYXI6ICd3ZWVrWWVhcicsXG4gICAgICAgIEdHOiAnaXNvV2Vla1llYXInLFxuICAgICAgICBpc293ZWVreWVhcnM6ICdpc29XZWVrWWVhcicsXG4gICAgICAgIGlzb3dlZWt5ZWFyOiAnaXNvV2Vla1llYXInLFxuICAgICAgICB3OiAnd2VlaycsXG4gICAgICAgIHdlZWtzOiAnd2VlaycsXG4gICAgICAgIHdlZWs6ICd3ZWVrJyxcbiAgICAgICAgVzogJ2lzb1dlZWsnLFxuICAgICAgICBpc293ZWVrczogJ2lzb1dlZWsnLFxuICAgICAgICBpc293ZWVrOiAnaXNvV2VlaycsXG4gICAgICAgIHk6ICd5ZWFyJyxcbiAgICAgICAgeWVhcnM6ICd5ZWFyJyxcbiAgICAgICAgeWVhcjogJ3llYXInLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBub3JtYWxpemVVbml0cyh1bml0cykge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHVuaXRzID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyBhbGlhc2VzW3VuaXRzXSB8fCBhbGlhc2VzW3VuaXRzLnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBub3JtYWxpemVPYmplY3RVbml0cyhpbnB1dE9iamVjdCkge1xuICAgICAgICB2YXIgbm9ybWFsaXplZElucHV0ID0ge30sXG4gICAgICAgICAgICBub3JtYWxpemVkUHJvcCxcbiAgICAgICAgICAgIHByb3A7XG5cbiAgICAgICAgZm9yIChwcm9wIGluIGlucHV0T2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcChpbnB1dE9iamVjdCwgcHJvcCkpIHtcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkUHJvcCA9IG5vcm1hbGl6ZVVuaXRzKHByb3ApO1xuICAgICAgICAgICAgICAgIGlmIChub3JtYWxpemVkUHJvcCkge1xuICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkSW5wdXRbbm9ybWFsaXplZFByb3BdID0gaW5wdXRPYmplY3RbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRJbnB1dDtcbiAgICB9XG5cbiAgICB2YXIgcHJpb3JpdGllcyA9IHtcbiAgICAgICAgZGF0ZTogOSxcbiAgICAgICAgZGF5OiAxMSxcbiAgICAgICAgd2Vla2RheTogMTEsXG4gICAgICAgIGlzb1dlZWtkYXk6IDExLFxuICAgICAgICBkYXlPZlllYXI6IDQsXG4gICAgICAgIGhvdXI6IDEzLFxuICAgICAgICBtaWxsaXNlY29uZDogMTYsXG4gICAgICAgIG1pbnV0ZTogMTQsXG4gICAgICAgIG1vbnRoOiA4LFxuICAgICAgICBxdWFydGVyOiA3LFxuICAgICAgICBzZWNvbmQ6IDE1LFxuICAgICAgICB3ZWVrWWVhcjogMSxcbiAgICAgICAgaXNvV2Vla1llYXI6IDEsXG4gICAgICAgIHdlZWs6IDUsXG4gICAgICAgIGlzb1dlZWs6IDUsXG4gICAgICAgIHllYXI6IDEsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGdldFByaW9yaXRpemVkVW5pdHModW5pdHNPYmopIHtcbiAgICAgICAgdmFyIHVuaXRzID0gW10sXG4gICAgICAgICAgICB1O1xuICAgICAgICBmb3IgKHUgaW4gdW5pdHNPYmopIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKHVuaXRzT2JqLCB1KSkge1xuICAgICAgICAgICAgICAgIHVuaXRzLnB1c2goeyB1bml0OiB1LCBwcmlvcml0eTogcHJpb3JpdGllc1t1XSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB1bml0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdW5pdHM7XG4gICAgfVxuXG4gICAgdmFyIG1hdGNoMSA9IC9cXGQvLCAvLyAgICAgICAwIC0gOVxuICAgICAgICBtYXRjaDIgPSAvXFxkXFxkLywgLy8gICAgICAwMCAtIDk5XG4gICAgICAgIG1hdGNoMyA9IC9cXGR7M30vLCAvLyAgICAgMDAwIC0gOTk5XG4gICAgICAgIG1hdGNoNCA9IC9cXGR7NH0vLCAvLyAgICAwMDAwIC0gOTk5OVxuICAgICAgICBtYXRjaDYgPSAvWystXT9cXGR7Nn0vLCAvLyAtOTk5OTk5IC0gOTk5OTk5XG4gICAgICAgIG1hdGNoMXRvMiA9IC9cXGRcXGQ/LywgLy8gICAgICAgMCAtIDk5XG4gICAgICAgIG1hdGNoM3RvNCA9IC9cXGRcXGRcXGRcXGQ/LywgLy8gICAgIDk5OSAtIDk5OTlcbiAgICAgICAgbWF0Y2g1dG82ID0gL1xcZFxcZFxcZFxcZFxcZFxcZD8vLCAvLyAgIDk5OTk5IC0gOTk5OTk5XG4gICAgICAgIG1hdGNoMXRvMyA9IC9cXGR7MSwzfS8sIC8vICAgICAgIDAgLSA5OTlcbiAgICAgICAgbWF0Y2gxdG80ID0gL1xcZHsxLDR9LywgLy8gICAgICAgMCAtIDk5OTlcbiAgICAgICAgbWF0Y2gxdG82ID0gL1srLV0/XFxkezEsNn0vLCAvLyAtOTk5OTk5IC0gOTk5OTk5XG4gICAgICAgIG1hdGNoVW5zaWduZWQgPSAvXFxkKy8sIC8vICAgICAgIDAgLSBpbmZcbiAgICAgICAgbWF0Y2hTaWduZWQgPSAvWystXT9cXGQrLywgLy8gICAgLWluZiAtIGluZlxuICAgICAgICBtYXRjaE9mZnNldCA9IC9afFsrLV1cXGRcXGQ6P1xcZFxcZC9naSwgLy8gKzAwOjAwIC0wMDowMCArMDAwMCAtMDAwMCBvciBaXG4gICAgICAgIG1hdGNoU2hvcnRPZmZzZXQgPSAvWnxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy9naSwgLy8gKzAwIC0wMCArMDA6MDAgLTAwOjAwICswMDAwIC0wMDAwIG9yIFpcbiAgICAgICAgbWF0Y2hUaW1lc3RhbXAgPSAvWystXT9cXGQrKFxcLlxcZHsxLDN9KT8vLCAvLyAxMjM0NTY3ODkgMTIzNDU2Nzg5LjEyM1xuICAgICAgICAvLyBhbnkgd29yZCAob3IgdHdvKSBjaGFyYWN0ZXJzIG9yIG51bWJlcnMgaW5jbHVkaW5nIHR3by90aHJlZSB3b3JkIG1vbnRoIGluIGFyYWJpYy5cbiAgICAgICAgLy8gaW5jbHVkZXMgc2NvdHRpc2ggZ2FlbGljIHR3byB3b3JkIGFuZCBoeXBoZW5hdGVkIG1vbnRoc1xuICAgICAgICBtYXRjaFdvcmQgPVxuICAgICAgICAgICAgL1swLTldezAsMjU2fVsnYS16XFx1MDBBMC1cXHUwNUZGXFx1MDcwMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRjA3XFx1RkYxMC1cXHVGRkVGXXsxLDI1Nn18W1xcdTA2MDAtXFx1MDZGRlxcL117MSwyNTZ9KFxccyo/W1xcdTA2MDAtXFx1MDZGRl17MSwyNTZ9KXsxLDJ9L2ksXG4gICAgICAgIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8gPSAvXlsxLTldXFxkPy8sIC8vICAgICAgICAgMS05OVxuICAgICAgICBtYXRjaDF0bzJIYXNaZXJvID0gL14oWzEtOV1cXGR8XFxkKS8sIC8vICAgICAgICAgICAwLTk5XG4gICAgICAgIHJlZ2V4ZXM7XG5cbiAgICByZWdleGVzID0ge307XG5cbiAgICBmdW5jdGlvbiBhZGRSZWdleFRva2VuKHRva2VuLCByZWdleCwgc3RyaWN0UmVnZXgpIHtcbiAgICAgICAgcmVnZXhlc1t0b2tlbl0gPSBpc0Z1bmN0aW9uKHJlZ2V4KVxuICAgICAgICAgICAgPyByZWdleFxuICAgICAgICAgICAgOiBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZURhdGEpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpc1N0cmljdCAmJiBzdHJpY3RSZWdleCA/IHN0cmljdFJlZ2V4IDogcmVnZXg7XG4gICAgICAgICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyc2VSZWdleEZvclRva2VuKHRva2VuLCBjb25maWcpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHJlZ2V4ZXMsIHRva2VuKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAodW5lc2NhcGVGb3JtYXQodG9rZW4pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZWdleGVzW3Rva2VuXShjb25maWcuX3N0cmljdCwgY29uZmlnLl9sb2NhbGUpO1xuICAgIH1cblxuICAgIC8vIENvZGUgZnJvbSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzM1NjE0OTMvaXMtdGhlcmUtYS1yZWdleHAtZXNjYXBlLWZ1bmN0aW9uLWluLWphdmFzY3JpcHRcbiAgICBmdW5jdGlvbiB1bmVzY2FwZUZvcm1hdChzKSB7XG4gICAgICAgIHJldHVybiByZWdleEVzY2FwZShcbiAgICAgICAgICAgIHNcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgnXFxcXCcsICcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAvXFxcXChcXFspfFxcXFwoXFxdKXxcXFsoW15cXF1cXFtdKilcXF18XFxcXCguKS9nLFxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAobWF0Y2hlZCwgcDEsIHAyLCBwMywgcDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwMSB8fCBwMiB8fCBwMyB8fCBwNDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWdleEVzY2FwZShzKSB7XG4gICAgICAgIHJldHVybiBzLnJlcGxhY2UoL1stXFwvXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFic0Zsb29yKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgLy8gLTAgLT4gMFxuICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbChudW1iZXIpIHx8IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9JbnQoYXJndW1lbnRGb3JDb2VyY2lvbikge1xuICAgICAgICB2YXIgY29lcmNlZE51bWJlciA9ICthcmd1bWVudEZvckNvZXJjaW9uLFxuICAgICAgICAgICAgdmFsdWUgPSAwO1xuXG4gICAgICAgIGlmIChjb2VyY2VkTnVtYmVyICE9PSAwICYmIGlzRmluaXRlKGNvZXJjZWROdW1iZXIpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGFic0Zsb29yKGNvZXJjZWROdW1iZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHZhciB0b2tlbnMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFBhcnNlVG9rZW4odG9rZW4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgZnVuYyA9IGNhbGxiYWNrLFxuICAgICAgICAgICAgdG9rZW5MZW47XG4gICAgICAgIGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0b2tlbiA9IFt0b2tlbl07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTnVtYmVyKGNhbGxiYWNrKSkge1xuICAgICAgICAgICAgZnVuYyA9IGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgICAgICAgICBhcnJheVtjYWxsYmFja10gPSB0b0ludChpbnB1dCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHRva2VuTGVuID0gdG9rZW4ubGVuZ3RoO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG9rZW5MZW47IGkrKykge1xuICAgICAgICAgICAgdG9rZW5zW3Rva2VuW2ldXSA9IGZ1bmM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRXZWVrUGFyc2VUb2tlbih0b2tlbiwgY2FsbGJhY2spIHtcbiAgICAgICAgYWRkUGFyc2VUb2tlbih0b2tlbiwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgY29uZmlnLl93ID0gY29uZmlnLl93IHx8IHt9O1xuICAgICAgICAgICAgY2FsbGJhY2soaW5wdXQsIGNvbmZpZy5fdywgY29uZmlnLCB0b2tlbik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFRpbWVUb0FycmF5RnJvbVRva2VuKHRva2VuLCBpbnB1dCwgY29uZmlnKSB7XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsICYmIGhhc093blByb3AodG9rZW5zLCB0b2tlbikpIHtcbiAgICAgICAgICAgIHRva2Vuc1t0b2tlbl0oaW5wdXQsIGNvbmZpZy5fYSwgY29uZmlnLCB0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0xlYXBZZWFyKHllYXIpIHtcbiAgICAgICAgcmV0dXJuICh5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwKSB8fCB5ZWFyICUgNDAwID09PSAwO1xuICAgIH1cblxuICAgIHZhciBZRUFSID0gMCxcbiAgICAgICAgTU9OVEggPSAxLFxuICAgICAgICBEQVRFID0gMixcbiAgICAgICAgSE9VUiA9IDMsXG4gICAgICAgIE1JTlVURSA9IDQsXG4gICAgICAgIFNFQ09ORCA9IDUsXG4gICAgICAgIE1JTExJU0VDT05EID0gNixcbiAgICAgICAgV0VFSyA9IDcsXG4gICAgICAgIFdFRUtEQVkgPSA4O1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1knLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB5ID0gdGhpcy55ZWFyKCk7XG4gICAgICAgIHJldHVybiB5IDw9IDk5OTkgPyB6ZXJvRmlsbCh5LCA0KSA6ICcrJyArIHk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueWVhcigpICUgMTAwO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZJywgNF0sIDAsICd5ZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZWScsIDVdLCAwLCAneWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVlZWVlZJywgNiwgdHJ1ZV0sIDAsICd5ZWFyJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdZJywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZWVknLCBtYXRjaDF0bzQsIG1hdGNoNCk7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWVknLCBtYXRjaDF0bzYsIG1hdGNoNik7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWVlZJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ1lZWVlZJywgJ1lZWVlZWSddLCBZRUFSKTtcbiAgICBhZGRQYXJzZVRva2VuKCdZWVlZJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtZRUFSXSA9XG4gICAgICAgICAgICBpbnB1dC5sZW5ndGggPT09IDIgPyBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCkgOiB0b0ludChpbnB1dCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignWVknLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID0gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1knLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID0gcGFyc2VJbnQoaW5wdXQsIDEwKTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIGZ1bmN0aW9uIGRheXNJblllYXIoeWVhcikge1xuICAgICAgICByZXR1cm4gaXNMZWFwWWVhcih5ZWFyKSA/IDM2NiA6IDM2NTtcbiAgICB9XG5cbiAgICAvLyBIT09LU1xuXG4gICAgaG9va3MucGFyc2VUd29EaWdpdFllYXIgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHRvSW50KGlucHV0KSArICh0b0ludChpbnB1dCkgPiA2OCA/IDE5MDAgOiAyMDAwKTtcbiAgICB9O1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldFllYXIgPSBtYWtlR2V0U2V0KCdGdWxsWWVhcicsIHRydWUpO1xuXG4gICAgZnVuY3Rpb24gZ2V0SXNMZWFwWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIGlzTGVhcFllYXIodGhpcy55ZWFyKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VHZXRTZXQodW5pdCwga2VlcFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBzZXQkMSh0aGlzLCB1bml0LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIGtlZXBUaW1lKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldCh0aGlzLCB1bml0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXQobW9tLCB1bml0KSB7XG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkID0gbW9tLl9kLFxuICAgICAgICAgICAgaXNVVEMgPSBtb20uX2lzVVRDO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdCkge1xuICAgICAgICAgICAgY2FzZSAnTWlsbGlzZWNvbmRzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNVVEMgPyBkLmdldFVUQ01pbGxpc2Vjb25kcygpIDogZC5nZXRNaWxsaXNlY29uZHMoKTtcbiAgICAgICAgICAgIGNhc2UgJ1NlY29uZHMnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDU2Vjb25kcygpIDogZC5nZXRTZWNvbmRzKCk7XG4gICAgICAgICAgICBjYXNlICdNaW51dGVzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNVVEMgPyBkLmdldFVUQ01pbnV0ZXMoKSA6IGQuZ2V0TWludXRlcygpO1xuICAgICAgICAgICAgY2FzZSAnSG91cnMnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDSG91cnMoKSA6IGQuZ2V0SG91cnMoKTtcbiAgICAgICAgICAgIGNhc2UgJ0RhdGUnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDRGF0ZSgpIDogZC5nZXREYXRlKCk7XG4gICAgICAgICAgICBjYXNlICdEYXknOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDRGF5KCkgOiBkLmdldERheSgpO1xuICAgICAgICAgICAgY2FzZSAnTW9udGgnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDTW9udGgoKSA6IGQuZ2V0TW9udGgoKTtcbiAgICAgICAgICAgIGNhc2UgJ0Z1bGxZZWFyJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNVVEMgPyBkLmdldFVUQ0Z1bGxZZWFyKCkgOiBkLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBOYU47IC8vIEp1c3QgaW4gY2FzZVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0JDEobW9tLCB1bml0LCB2YWx1ZSkge1xuICAgICAgICB2YXIgZCwgaXNVVEMsIHllYXIsIG1vbnRoLCBkYXRlO1xuXG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSB8fCBpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGQgPSBtb20uX2Q7XG4gICAgICAgIGlzVVRDID0gbW9tLl9pc1VUQztcblxuICAgICAgICBzd2l0Y2ggKHVuaXQpIHtcbiAgICAgICAgICAgIGNhc2UgJ01pbGxpc2Vjb25kcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDXG4gICAgICAgICAgICAgICAgICAgID8gZC5zZXRVVENNaWxsaXNlY29uZHModmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIDogZC5zZXRNaWxsaXNlY29uZHModmFsdWUpKTtcbiAgICAgICAgICAgIGNhc2UgJ1NlY29uZHMnOlxuICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDU2Vjb25kcyh2YWx1ZSkgOiBkLnNldFNlY29uZHModmFsdWUpKTtcbiAgICAgICAgICAgIGNhc2UgJ01pbnV0ZXMnOlxuICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDTWludXRlcyh2YWx1ZSkgOiBkLnNldE1pbnV0ZXModmFsdWUpKTtcbiAgICAgICAgICAgIGNhc2UgJ0hvdXJzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCAoaXNVVEMgPyBkLnNldFVUQ0hvdXJzKHZhbHVlKSA6IGQuc2V0SG91cnModmFsdWUpKTtcbiAgICAgICAgICAgIGNhc2UgJ0RhdGUnOlxuICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDRGF0ZSh2YWx1ZSkgOiBkLnNldERhdGUodmFsdWUpKTtcbiAgICAgICAgICAgIC8vIGNhc2UgJ0RheSc6IC8vIE5vdCByZWFsXG4gICAgICAgICAgICAvLyAgICByZXR1cm4gdm9pZCAoaXNVVEMgPyBkLnNldFVUQ0RheSh2YWx1ZSkgOiBkLnNldERheSh2YWx1ZSkpO1xuICAgICAgICAgICAgLy8gY2FzZSAnTW9udGgnOiAvLyBOb3QgdXNlZCBiZWNhdXNlIHdlIG5lZWQgdG8gcGFzcyB0d28gdmFyaWFibGVzXG4gICAgICAgICAgICAvLyAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENNb250aCh2YWx1ZSkgOiBkLnNldE1vbnRoKHZhbHVlKSk7XG4gICAgICAgICAgICBjYXNlICdGdWxsWWVhcic6XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIFNlZSBiZWxvdyAuLi5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBKdXN0IGluIGNhc2VcbiAgICAgICAgfVxuXG4gICAgICAgIHllYXIgPSB2YWx1ZTtcbiAgICAgICAgbW9udGggPSBtb20ubW9udGgoKTtcbiAgICAgICAgZGF0ZSA9IG1vbS5kYXRlKCk7XG4gICAgICAgIGRhdGUgPSBkYXRlID09PSAyOSAmJiBtb250aCA9PT0gMSAmJiAhaXNMZWFwWWVhcih5ZWFyKSA/IDI4IDogZGF0ZTtcbiAgICAgICAgdm9pZCAoaXNVVENcbiAgICAgICAgICAgID8gZC5zZXRVVENGdWxsWWVhcih5ZWFyLCBtb250aCwgZGF0ZSlcbiAgICAgICAgICAgIDogZC5zZXRGdWxsWWVhcih5ZWFyLCBtb250aCwgZGF0ZSkpO1xuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIHN0cmluZ0dldCh1bml0cykge1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odGhpc1t1bml0c10pKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpc1t1bml0c10oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdHJpbmdTZXQodW5pdHMsIHZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdW5pdHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZU9iamVjdFVuaXRzKHVuaXRzKTtcbiAgICAgICAgICAgIHZhciBwcmlvcml0aXplZCA9IGdldFByaW9yaXRpemVkVW5pdHModW5pdHMpLFxuICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgcHJpb3JpdGl6ZWRMZW4gPSBwcmlvcml0aXplZC5sZW5ndGg7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJpb3JpdGl6ZWRMZW47IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXNbcHJpb3JpdGl6ZWRbaV0udW5pdF0odW5pdHNbcHJpb3JpdGl6ZWRbaV0udW5pdF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbih0aGlzW3VuaXRzXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1t1bml0c10odmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vZChuLCB4KSB7XG4gICAgICAgIHJldHVybiAoKG4gJSB4KSArIHgpICUgeDtcbiAgICB9XG5cbiAgICB2YXIgaW5kZXhPZjtcblxuICAgIGlmIChBcnJheS5wcm90b3R5cGUuaW5kZXhPZikge1xuICAgICAgICBpbmRleE9mID0gQXJyYXkucHJvdG90eXBlLmluZGV4T2Y7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaW5kZXhPZiA9IGZ1bmN0aW9uIChvKSB7XG4gICAgICAgICAgICAvLyBJIGtub3dcbiAgICAgICAgICAgIHZhciBpO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpc1tpXSA9PT0gbykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGF5c0luTW9udGgoeWVhciwgbW9udGgpIHtcbiAgICAgICAgaWYgKGlzTmFOKHllYXIpIHx8IGlzTmFOKG1vbnRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbW9kTW9udGggPSBtb2QobW9udGgsIDEyKTtcbiAgICAgICAgeWVhciArPSAobW9udGggLSBtb2RNb250aCkgLyAxMjtcbiAgICAgICAgcmV0dXJuIG1vZE1vbnRoID09PSAxXG4gICAgICAgICAgICA/IGlzTGVhcFllYXIoeWVhcilcbiAgICAgICAgICAgICAgICA/IDI5XG4gICAgICAgICAgICAgICAgOiAyOFxuICAgICAgICAgICAgOiAzMSAtICgobW9kTW9udGggJSA3KSAlIDIpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNJywgWydNTScsIDJdLCAnTW8nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vbnRoKCkgKyAxO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ01NTScsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRoc1Nob3J0KHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTU1NTScsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRocyh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignTScsIG1hdGNoMXRvMiwgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignTU0nLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignTU1NJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5tb250aHNTaG9ydFJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcbiAgICBhZGRSZWdleFRva2VuKCdNTU1NJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5tb250aHNSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnTScsICdNTSddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01PTlRIXSA9IHRvSW50KGlucHV0KSAtIDE7XG4gICAgfSk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnTU1NJywgJ01NTU0nXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgbW9udGggPSBjb25maWcuX2xvY2FsZS5tb250aHNQYXJzZShpbnB1dCwgdG9rZW4sIGNvbmZpZy5fc3RyaWN0KTtcbiAgICAgICAgLy8gaWYgd2UgZGlkbid0IGZpbmQgYSBtb250aCBuYW1lLCBtYXJrIHRoZSBkYXRlIGFzIGludmFsaWQuXG4gICAgICAgIGlmIChtb250aCAhPSBudWxsKSB7XG4gICAgICAgICAgICBhcnJheVtNT05USF0gPSBtb250aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmludmFsaWRNb250aCA9IGlucHV0O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBMT0NBTEVTXG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZU1vbnRocyA9XG4gICAgICAgICAgICAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQgPVxuICAgICAgICAgICAgJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdCgnXycpLFxuICAgICAgICBNT05USFNfSU5fRk9STUFUID0gL0Rbb0RdPyhcXFtbXlxcW1xcXV0qXFxdfFxccykrTU1NTT8vLFxuICAgICAgICBkZWZhdWx0TW9udGhzU2hvcnRSZWdleCA9IG1hdGNoV29yZCxcbiAgICAgICAgZGVmYXVsdE1vbnRoc1JlZ2V4ID0gbWF0Y2hXb3JkO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzKG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRocylcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21vbnRoc1xuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzWydzdGFuZGFsb25lJ107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzKVxuICAgICAgICAgICAgPyB0aGlzLl9tb250aHNbbS5tb250aCgpXVxuICAgICAgICAgICAgOiB0aGlzLl9tb250aHNbXG4gICAgICAgICAgICAgICAgICAodGhpcy5fbW9udGhzLmlzRm9ybWF0IHx8IE1PTlRIU19JTl9GT1JNQVQpLnRlc3QoZm9ybWF0KVxuICAgICAgICAgICAgICAgICAgICAgID8gJ2Zvcm1hdCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgICAgICBdW20ubW9udGgoKV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzU2hvcnQobSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzU2hvcnQpXG4gICAgICAgICAgICAgICAgPyB0aGlzLl9tb250aHNTaG9ydFxuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzU2hvcnRbJ3N0YW5kYWxvbmUnXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHNTaG9ydClcbiAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU2hvcnRbbS5tb250aCgpXVxuICAgICAgICAgICAgOiB0aGlzLl9tb250aHNTaG9ydFtcbiAgICAgICAgICAgICAgICAgIE1PTlRIU19JTl9GT1JNQVQudGVzdChmb3JtYXQpID8gJ2Zvcm1hdCcgOiAnc3RhbmRhbG9uZSdcbiAgICAgICAgICAgICAgXVttLm1vbnRoKCldO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZVN0cmljdFBhcnNlKG1vbnRoTmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBpaSxcbiAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgIGxsYyA9IG1vbnRoTmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoIXRoaXMuX21vbnRoc1BhcnNlKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIG5vdCB1c2VkXG4gICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7ICsraSkge1xuICAgICAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0gPSB0aGlzLm1vbnRoc1Nob3J0KFxuICAgICAgICAgICAgICAgICAgICBtb20sXG4gICAgICAgICAgICAgICAgICAgICcnXG4gICAgICAgICAgICAgICAgKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSA9IHRoaXMubW9udGhzKG1vbSwgJycpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnTU1NJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnTU1NJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1vbnRoc1BhcnNlKG1vbnRoTmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksIG1vbSwgcmVnZXg7XG5cbiAgICAgICAgaWYgKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVTdHJpY3RQYXJzZS5jYWxsKHRoaXMsIG1vbnRoTmFtZSwgZm9ybWF0LCBzdHJpY3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9tb250aHNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fbW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVE9ETzogYWRkIHNvcnRpbmdcbiAgICAgICAgLy8gU29ydGluZyBtYWtlcyBzdXJlIGlmIG9uZSBtb250aCAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlclxuICAgICAgICAvLyBzZWUgc29ydGluZyBpbiBjb21wdXRlTW9udGhzUGFyc2VcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICBpZiAoc3RyaWN0ICYmICF0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLm1vbnRocyhtb20sICcnKS5yZXBsYWNlKCcuJywgJycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnJykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0cmljdCAmJiAhdGhpcy5fbW9udGhzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICByZWdleCA9XG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMubW9udGhzKG1vbSwgJycpICsgJ3xeJyArIHRoaXMubW9udGhzU2hvcnQobW9tLCAnJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKHJlZ2V4LnJlcGxhY2UoJy4nLCAnJyksICdpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0ZXN0IHRoZSByZWdleFxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ01NTU0nICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ01NTScgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJpY3QgJiYgdGhpcy5fbW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBzZXRNb250aChtb20sIHZhbHVlKSB7XG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gTm8gb3BcbiAgICAgICAgICAgIHJldHVybiBtb207XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKC9eXFxkKyQvLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0b0ludCh2YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gbW9tLmxvY2FsZURhdGEoKS5tb250aHNQYXJzZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogQW5vdGhlciBzaWxlbnQgZmFpbHVyZT9cbiAgICAgICAgICAgICAgICBpZiAoIWlzTnVtYmVyKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtb250aCA9IHZhbHVlLFxuICAgICAgICAgICAgZGF0ZSA9IG1vbS5kYXRlKCk7XG5cbiAgICAgICAgZGF0ZSA9IGRhdGUgPCAyOSA/IGRhdGUgOiBNYXRoLm1pbihkYXRlLCBkYXlzSW5Nb250aChtb20ueWVhcigpLCBtb250aCkpO1xuICAgICAgICB2b2lkIChtb20uX2lzVVRDXG4gICAgICAgICAgICA/IG1vbS5fZC5zZXRVVENNb250aChtb250aCwgZGF0ZSlcbiAgICAgICAgICAgIDogbW9tLl9kLnNldE1vbnRoKG1vbnRoLCBkYXRlKSk7XG4gICAgICAgIHJldHVybiBtb207XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0TW9udGgodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNldE1vbnRoKHRoaXMsIHZhbHVlKTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGdldCh0aGlzLCAnTW9udGgnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERheXNJbk1vbnRoKCkge1xuICAgICAgICByZXR1cm4gZGF5c0luTW9udGgodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9udGhzU2hvcnRSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVNb250aHNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzU2hvcnRSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRSZWdleCA9IGRlZmF1bHRNb250aHNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVNb250aHNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzUmVnZXggPSBkZWZhdWx0TW9udGhzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4XG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVNb250aHNQYXJzZSgpIHtcbiAgICAgICAgZnVuY3Rpb24gY21wTGVuUmV2KGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNob3J0UGllY2VzID0gW10sXG4gICAgICAgICAgICBsb25nUGllY2VzID0gW10sXG4gICAgICAgICAgICBtaXhlZFBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgIHNob3J0UCxcbiAgICAgICAgICAgIGxvbmdQO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgIHNob3J0UCA9IHJlZ2V4RXNjYXBlKHRoaXMubW9udGhzU2hvcnQobW9tLCAnJykpO1xuICAgICAgICAgICAgbG9uZ1AgPSByZWdleEVzY2FwZSh0aGlzLm1vbnRocyhtb20sICcnKSk7XG4gICAgICAgICAgICBzaG9ydFBpZWNlcy5wdXNoKHNob3J0UCk7XG4gICAgICAgICAgICBsb25nUGllY2VzLnB1c2gobG9uZ1ApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChsb25nUCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHNob3J0UCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU29ydGluZyBtYWtlcyBzdXJlIGlmIG9uZSBtb250aCAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlciBpdFxuICAgICAgICAvLyB3aWxsIG1hdGNoIHRoZSBsb25nZXIgcGllY2UuXG4gICAgICAgIHNob3J0UGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbG9uZ1BpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIG1peGVkUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcblxuICAgICAgICB0aGlzLl9tb250aHNSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG1peGVkUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRSZWdleCA9IHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICB0aGlzLl9tb250aHNTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgbG9uZ1BpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgc2hvcnRQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRGF0ZSh5LCBtLCBkLCBoLCBNLCBzLCBtcykge1xuICAgICAgICAvLyBjYW4ndCBqdXN0IGFwcGx5KCkgdG8gY3JlYXRlIGEgZGF0ZTpcbiAgICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xLzE4MTM0OFxuICAgICAgICB2YXIgZGF0ZTtcbiAgICAgICAgLy8gdGhlIGRhdGUgY29uc3RydWN0b3IgcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSh5ICsgNDAwLCBtLCBkLCBoLCBNLCBzLCBtcyk7XG4gICAgICAgICAgICBpZiAoaXNGaW5pdGUoZGF0ZS5nZXRGdWxsWWVhcigpKSkge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RnVsbFllYXIoeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoeSwgbSwgZCwgaCwgTSwgcywgbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlVVRDRGF0ZSh5KSB7XG4gICAgICAgIHZhciBkYXRlLCBhcmdzO1xuICAgICAgICAvLyB0aGUgRGF0ZS5VVEMgZnVuY3Rpb24gcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgYXJnc1swXSA9IHkgKyA0MDA7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCwgYXJncykpO1xuICAgICAgICAgICAgaWYgKGlzRmluaXRlKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSkpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KG51bGwsIGFyZ3VtZW50cykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQtb2YtZmlyc3Qtd2VlayAtIHN0YXJ0LW9mLXllYXJcbiAgICBmdW5jdGlvbiBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIC8vIGZpcnN0LXdlZWsgZGF5IC0tIHdoaWNoIGphbnVhcnkgaXMgYWx3YXlzIGluIHRoZSBmaXJzdCB3ZWVrICg0IGZvciBpc28sIDEgZm9yIG90aGVyKVxuICAgICAgICAgICAgZndkID0gNyArIGRvdyAtIGRveSxcbiAgICAgICAgICAgIC8vIGZpcnN0LXdlZWsgZGF5IGxvY2FsIHdlZWtkYXkgLS0gd2hpY2ggbG9jYWwgd2Vla2RheSBpcyBmd2RcbiAgICAgICAgICAgIGZ3ZGx3ID0gKDcgKyBjcmVhdGVVVENEYXRlKHllYXIsIDAsIGZ3ZCkuZ2V0VVRDRGF5KCkgLSBkb3cpICUgNztcblxuICAgICAgICByZXR1cm4gLWZ3ZGx3ICsgZndkIC0gMTtcbiAgICB9XG5cbiAgICAvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlI0NhbGN1bGF0aW5nX2FfZGF0ZV9naXZlbl90aGVfeWVhci4yQ193ZWVrX251bWJlcl9hbmRfd2Vla2RheVxuICAgIGZ1bmN0aW9uIGRheU9mWWVhckZyb21XZWVrcyh5ZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgbG9jYWxXZWVrZGF5ID0gKDcgKyB3ZWVrZGF5IC0gZG93KSAlIDcsXG4gICAgICAgICAgICB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KHllYXIsIGRvdywgZG95KSxcbiAgICAgICAgICAgIGRheU9mWWVhciA9IDEgKyA3ICogKHdlZWsgLSAxKSArIGxvY2FsV2Vla2RheSArIHdlZWtPZmZzZXQsXG4gICAgICAgICAgICByZXNZZWFyLFxuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyO1xuXG4gICAgICAgIGlmIChkYXlPZlllYXIgPD0gMCkge1xuICAgICAgICAgICAgcmVzWWVhciA9IHllYXIgLSAxO1xuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyID0gZGF5c0luWWVhcihyZXNZZWFyKSArIGRheU9mWWVhcjtcbiAgICAgICAgfSBlbHNlIGlmIChkYXlPZlllYXIgPiBkYXlzSW5ZZWFyKHllYXIpKSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhciArIDE7XG4gICAgICAgICAgICByZXNEYXlPZlllYXIgPSBkYXlPZlllYXIgLSBkYXlzSW5ZZWFyKHllYXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzWWVhciA9IHllYXI7XG4gICAgICAgICAgICByZXNEYXlPZlllYXIgPSBkYXlPZlllYXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeWVhcjogcmVzWWVhcixcbiAgICAgICAgICAgIGRheU9mWWVhcjogcmVzRGF5T2ZZZWFyLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtPZlllYXIobW9tLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldChtb20ueWVhcigpLCBkb3csIGRveSksXG4gICAgICAgICAgICB3ZWVrID0gTWF0aC5mbG9vcigobW9tLmRheU9mWWVhcigpIC0gd2Vla09mZnNldCAtIDEpIC8gNykgKyAxLFxuICAgICAgICAgICAgcmVzV2VlayxcbiAgICAgICAgICAgIHJlc1llYXI7XG5cbiAgICAgICAgaWYgKHdlZWsgPCAxKSB7XG4gICAgICAgICAgICByZXNZZWFyID0gbW9tLnllYXIoKSAtIDE7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlayArIHdlZWtzSW5ZZWFyKHJlc1llYXIsIGRvdywgZG95KTtcbiAgICAgICAgfSBlbHNlIGlmICh3ZWVrID4gd2Vla3NJblllYXIobW9tLnllYXIoKSwgZG93LCBkb3kpKSB7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlayAtIHdlZWtzSW5ZZWFyKG1vbS55ZWFyKCksIGRvdywgZG95KTtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpO1xuICAgICAgICAgICAgcmVzV2VlayA9IHdlZWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgd2VlazogcmVzV2VlayxcbiAgICAgICAgICAgIHllYXI6IHJlc1llYXIsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla3NJblllYXIoeWVhciwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpLFxuICAgICAgICAgICAgd2Vla09mZnNldE5leHQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciArIDEsIGRvdywgZG95KTtcbiAgICAgICAgcmV0dXJuIChkYXlzSW5ZZWFyKHllYXIpIC0gd2Vla09mZnNldCArIHdlZWtPZmZzZXROZXh0KSAvIDc7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3cnLCBbJ3d3JywgMl0sICd3bycsICd3ZWVrJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ1cnLCBbJ1dXJywgMl0sICdXbycsICdpc29XZWVrJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCd3JywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJOb0xlYWRpbmdaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCd3dycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdXJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJOb0xlYWRpbmdaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdXVycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFxuICAgICAgICBbJ3cnLCAnd3cnLCAnVycsICdXVyddLFxuICAgICAgICBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgICAgIHdlZWtbdG9rZW4uc3Vic3RyKDAsIDEpXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICAvLyBMT0NBTEVTXG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrKG1vbSkge1xuICAgICAgICByZXR1cm4gd2Vla09mWWVhcihtb20sIHRoaXMuX3dlZWsuZG93LCB0aGlzLl93ZWVrLmRveSkud2VlaztcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZVdlZWsgPSB7XG4gICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVGaXJzdERheU9mV2VlaygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWsuZG93O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZUZpcnN0RGF5T2ZZZWFyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2Vlay5kb3k7XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2VlayhpbnB1dCkge1xuICAgICAgICB2YXIgd2VlayA9IHRoaXMubG9jYWxlRGF0YSgpLndlZWsodGhpcyk7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2VlayA6IHRoaXMuYWRkKChpbnB1dCAtIHdlZWspICogNywgJ2QnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRJU09XZWVrKGlucHV0KSB7XG4gICAgICAgIHZhciB3ZWVrID0gd2Vla09mWWVhcih0aGlzLCAxLCA0KS53ZWVrO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWsgOiB0aGlzLmFkZCgoaW5wdXQgLSB3ZWVrKSAqIDcsICdkJyk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2QnLCAwLCAnZG8nLCAnZGF5Jyk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c01pbih0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzU2hvcnQodGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZGRkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXModGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdlJywgMCwgMCwgJ3dlZWtkYXknKTtcbiAgICBhZGRGb3JtYXRUb2tlbignRScsIDAsIDAsICdpc29XZWVrZGF5Jyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdkJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdlJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdFJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdkZCcsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNNaW5SZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignZGRkJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1Nob3J0UmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2RkZGQnLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzUmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydkZCcsICdkZGQnLCAnZGRkZCddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgdmFyIHdlZWtkYXkgPSBjb25maWcuX2xvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0LCB0b2tlbiwgY29uZmlnLl9zdHJpY3QpO1xuICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZ2V0IGEgd2Vla2RheSBuYW1lLCBtYXJrIHRoZSBkYXRlIGFzIGludmFsaWRcbiAgICAgICAgaWYgKHdlZWtkYXkgIT0gbnVsbCkge1xuICAgICAgICAgICAgd2Vlay5kID0gd2Vla2RheTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmludmFsaWRXZWVrZGF5ID0gaW5wdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZCcsICdlJywgJ0UnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW5dID0gdG9JbnQoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgZnVuY3Rpb24gcGFyc2VXZWVrZGF5KGlucHV0LCBsb2NhbGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNOYU4oaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQoaW5wdXQsIDEwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlucHV0ID0gbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQpO1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VJc29XZWVrZGF5KGlucHV0LCBsb2NhbGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCkgJSA3IHx8IDc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzTmFOKGlucHV0KSA/IG51bGwgOiBpbnB1dDtcbiAgICB9XG5cbiAgICAvLyBMT0NBTEVTXG4gICAgZnVuY3Rpb24gc2hpZnRXZWVrZGF5cyh3cywgbikge1xuICAgICAgICByZXR1cm4gd3Muc2xpY2UobiwgNykuY29uY2F0KHdzLnNsaWNlKDAsIG4pKTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZVdlZWtkYXlzID1cbiAgICAgICAgICAgICdTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheScuc3BsaXQoJ18nKSxcbiAgICAgICAgZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQgPSAnU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Jy5zcGxpdCgnXycpLFxuICAgICAgICBkZWZhdWx0TG9jYWxlV2Vla2RheXNNaW4gPSAnU3VfTW9fVHVfV2VfVGhfRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGRlZmF1bHRXZWVrZGF5c1JlZ2V4ID0gbWF0Y2hXb3JkLFxuICAgICAgICBkZWZhdWx0V2Vla2RheXNTaG9ydFJlZ2V4ID0gbWF0Y2hXb3JkLFxuICAgICAgICBkZWZhdWx0V2Vla2RheXNNaW5SZWdleCA9IG1hdGNoV29yZDtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzKG0sIGZvcm1hdCkge1xuICAgICAgICB2YXIgd2Vla2RheXMgPSBpc0FycmF5KHRoaXMuX3dlZWtkYXlzKVxuICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c1xuICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c1tcbiAgICAgICAgICAgICAgICAgIG0gJiYgbSAhPT0gdHJ1ZSAmJiB0aGlzLl93ZWVrZGF5cy5pc0Zvcm1hdC50ZXN0KGZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgICA/ICdmb3JtYXQnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnc3RhbmRhbG9uZSdcbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIG0gPT09IHRydWVcbiAgICAgICAgICAgID8gc2hpZnRXZWVrZGF5cyh3ZWVrZGF5cywgdGhpcy5fd2Vlay5kb3cpXG4gICAgICAgICAgICA6IG1cbiAgICAgICAgICAgICAgPyB3ZWVrZGF5c1ttLmRheSgpXVxuICAgICAgICAgICAgICA6IHdlZWtkYXlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzU2hvcnQobSkge1xuICAgICAgICByZXR1cm4gbSA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyBzaGlmdFdlZWtkYXlzKHRoaXMuX3dlZWtkYXlzU2hvcnQsIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiBtXG4gICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNTaG9ydFttLmRheSgpXVxuICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzU2hvcnQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNNaW4obSkge1xuICAgICAgICByZXR1cm4gbSA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyBzaGlmdFdlZWtkYXlzKHRoaXMuX3dlZWtkYXlzTWluLCB0aGlzLl93ZWVrLmRvdylcbiAgICAgICAgICAgIDogbVxuICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzTWluW20uZGF5KCldXG4gICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNNaW47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlU3RyaWN0UGFyc2UkMSh3ZWVrZGF5TmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBpaSxcbiAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgIGxsYyA9IHdlZWtkYXlOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlID0gW107XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyArK2kpIHtcbiAgICAgICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIDFdKS5kYXkoaSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXNNaW4oXG4gICAgICAgICAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICApLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5c1Nob3J0KFxuICAgICAgICAgICAgICAgICAgICBtb20sXG4gICAgICAgICAgICAgICAgICAgICcnXG4gICAgICAgICAgICAgICAgKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzKG1vbSwgJycpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnZGRkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gJ2RkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ2RkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gJ2RkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c1BhcnNlKHdlZWtkYXlOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSwgbW9tLCByZWdleDtcblxuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlU3RyaWN0UGFyc2UkMS5jYWxsKHRoaXMsIHdlZWtkYXlOYW1lLCBmb3JtYXQsIHN0cmljdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX3dlZWtkYXlzUGFyc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuXG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIDFdKS5kYXkoaSk7XG4gICAgICAgICAgICBpZiAoc3RyaWN0ICYmICF0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy53ZWVrZGF5cyhtb20sICcnKS5yZXBsYWNlKCcuJywgJ1xcXFwuPycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKS5yZXBsYWNlKCcuJywgJ1xcXFwuPycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3dlZWtkYXlzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICByZWdleCA9XG4gICAgICAgICAgICAgICAgICAgICdeJyArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2Vla2RheXMobW9tLCAnJykgK1xuICAgICAgICAgICAgICAgICAgICAnfF4nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpICtcbiAgICAgICAgICAgICAgICAgICAgJ3xeJyArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2Vla2RheXNNaW4obW9tLCAnJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAocmVnZXgucmVwbGFjZSgnLicsICcnKSwgJ2knKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRlc3QgdGhlIHJlZ2V4XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnZGRkZCcgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ2RkZCcgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdkZCcgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCAmJiB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXREYXlPZldlZWsoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRheSA9IGdldCh0aGlzLCAnRGF5Jyk7XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpbnB1dCA9IHBhcnNlV2Vla2RheShpbnB1dCwgdGhpcy5sb2NhbGVEYXRhKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkKGlucHV0IC0gZGF5LCAnZCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGRheTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldExvY2FsZURheU9mV2VlayhpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdlZWtkYXkgPSAodGhpcy5kYXkoKSArIDcgLSB0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3cpICUgNztcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB3ZWVrZGF5IDogdGhpcy5hZGQoaW5wdXQgLSB3ZWVrZGF5LCAnZCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldElTT0RheU9mV2VlayhpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiZWhhdmVzIHRoZSBzYW1lIGFzIG1vbWVudCNkYXkgZXhjZXB0XG4gICAgICAgIC8vIGFzIGEgZ2V0dGVyLCByZXR1cm5zIDcgaW5zdGVhZCBvZiAwICgxLTcgcmFuZ2UgaW5zdGVhZCBvZiAwLTYpXG4gICAgICAgIC8vIGFzIGEgc2V0dGVyLCBzdW5kYXkgc2hvdWxkIGJlbG9uZyB0byB0aGUgcHJldmlvdXMgd2Vlay5cblxuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIHdlZWtkYXkgPSBwYXJzZUlzb1dlZWtkYXkoaW5wdXQsIHRoaXMubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRheSh0aGlzLmRheSgpICUgNyA/IHdlZWtkYXkgOiB3ZWVrZGF5IC0gNyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXkoKSB8fCA3O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla2RheXNSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNSZWdleCA9IGRlZmF1bHRXZWVrZGF5c1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrZGF5c1Nob3J0UmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZVdlZWtkYXlzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1Nob3J0UmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleCA9IGRlZmF1bHRXZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4ICYmIGlzU3RyaWN0XG4gICAgICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtkYXlzTWluUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZVdlZWtkYXlzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNNaW5SZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzTWluUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzTWluUmVnZXggPSBkZWZhdWx0V2Vla2RheXNNaW5SZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4ICYmIGlzU3RyaWN0XG4gICAgICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4XG4gICAgICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZVdlZWtkYXlzUGFyc2UoKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNtcExlblJldihhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYi5sZW5ndGggLSBhLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtaW5QaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIHNob3J0UGllY2VzID0gW10sXG4gICAgICAgICAgICBsb25nUGllY2VzID0gW10sXG4gICAgICAgICAgICBtaXhlZFBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgIG1pbnAsXG4gICAgICAgICAgICBzaG9ydHAsXG4gICAgICAgICAgICBsb25ncDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIDFdKS5kYXkoaSk7XG4gICAgICAgICAgICBtaW5wID0gcmVnZXhFc2NhcGUodGhpcy53ZWVrZGF5c01pbihtb20sICcnKSk7XG4gICAgICAgICAgICBzaG9ydHAgPSByZWdleEVzY2FwZSh0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykpO1xuICAgICAgICAgICAgbG9uZ3AgPSByZWdleEVzY2FwZSh0aGlzLndlZWtkYXlzKG1vbSwgJycpKTtcbiAgICAgICAgICAgIG1pblBpZWNlcy5wdXNoKG1pbnApO1xuICAgICAgICAgICAgc2hvcnRQaWVjZXMucHVzaChzaG9ydHApO1xuICAgICAgICAgICAgbG9uZ1BpZWNlcy5wdXNoKGxvbmdwKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gobWlucCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHNob3J0cCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGxvbmdwKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIHdlZWtkYXkgKG9yIGFiYnIpIGlzIGEgcHJlZml4IG9mIGFub3RoZXIgaXRcbiAgICAgICAgLy8gd2lsbCBtYXRjaCB0aGUgbG9uZ2VyIHBpZWNlLlxuICAgICAgICBtaW5QaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBzaG9ydFBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIGxvbmdQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBtaXhlZFBpZWNlcy5zb3J0KGNtcExlblJldik7XG5cbiAgICAgICAgdGhpcy5fd2Vla2RheXNSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG1peGVkUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4ID0gdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5SZWdleCA9IHRoaXMuX3dlZWtkYXlzUmVnZXg7XG5cbiAgICAgICAgdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgbG9uZ1BpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBzaG9ydFBpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgbWluUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGZ1bmN0aW9uIGhGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhvdXJzKCkgJSAxMiB8fCAxMjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBrRm9ybWF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ob3VycygpIHx8IDI0O1xuICAgIH1cblxuICAgIGFkZEZvcm1hdFRva2VuKCdIJywgWydISCcsIDJdLCAwLCAnaG91cicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdoJywgWydoaCcsIDJdLCAwLCBoRm9ybWF0KTtcbiAgICBhZGRGb3JtYXRUb2tlbignaycsIFsna2snLCAyXSwgMCwga0Zvcm1hdCk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignaG1tJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJycgKyBoRm9ybWF0LmFwcGx5KHRoaXMpICsgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2htbXNzJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgJycgK1xuICAgICAgICAgICAgaEZvcm1hdC5hcHBseSh0aGlzKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMikgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5zZWNvbmRzKCksIDIpXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignSG1tJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJycgKyB0aGlzLmhvdXJzKCkgKyB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMik7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignSG1tc3MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAnJyArXG4gICAgICAgICAgICB0aGlzLmhvdXJzKCkgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMuc2Vjb25kcygpLCAyKVxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gbWVyaWRpZW0odG9rZW4sIGxvd2VyY2FzZSkge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbih0b2tlbiwgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1lcmlkaWVtKFxuICAgICAgICAgICAgICAgIHRoaXMuaG91cnMoKSxcbiAgICAgICAgICAgICAgICB0aGlzLm1pbnV0ZXMoKSxcbiAgICAgICAgICAgICAgICBsb3dlcmNhc2VcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG1lcmlkaWVtKCdhJywgdHJ1ZSk7XG4gICAgbWVyaWRpZW0oJ0EnLCBmYWxzZSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBmdW5jdGlvbiBtYXRjaE1lcmlkaWVtKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5fbWVyaWRpZW1QYXJzZTtcbiAgICB9XG5cbiAgICBhZGRSZWdleFRva2VuKCdhJywgbWF0Y2hNZXJpZGllbSk7XG4gICAgYWRkUmVnZXhUb2tlbignQScsIG1hdGNoTWVyaWRpZW0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0gnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMkhhc1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2gnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2snLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0hIJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2hoJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2trJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuXG4gICAgYWRkUmVnZXhUb2tlbignaG1tJywgbWF0Y2gzdG80KTtcbiAgICBhZGRSZWdleFRva2VuKCdobW1zcycsIG1hdGNoNXRvNik7XG4gICAgYWRkUmVnZXhUb2tlbignSG1tJywgbWF0Y2gzdG80KTtcbiAgICBhZGRSZWdleFRva2VuKCdIbW1zcycsIG1hdGNoNXRvNik7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnSCcsICdISCddLCBIT1VSKTtcbiAgICBhZGRQYXJzZVRva2VuKFsnaycsICdrayddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIGtJbnB1dCA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSBrSW5wdXQgPT09IDI0ID8gMCA6IGtJbnB1dDtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKFsnYScsICdBJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2lzUG0gPSBjb25maWcuX2xvY2FsZS5pc1BNKGlucHV0KTtcbiAgICAgICAgY29uZmlnLl9tZXJpZGllbSA9IGlucHV0O1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oWydoJywgJ2hoJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHRydWU7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignaG1tJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBwb3MgPSBpbnB1dC5sZW5ndGggLSAyO1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0LnN1YnN0cigwLCBwb3MpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MpKTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHRydWU7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignaG1tc3MnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvczEgPSBpbnB1dC5sZW5ndGggLSA0LFxuICAgICAgICAgICAgcG9zMiA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvczEpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MxLCAyKSk7XG4gICAgICAgIGFycmF5W1NFQ09ORF0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMikpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdIbW0nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvcyA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvcykpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvcykpO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0htbXNzJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBwb3MxID0gaW5wdXQubGVuZ3RoIC0gNCxcbiAgICAgICAgICAgIHBvczIgPSBpbnB1dC5sZW5ndGggLSAyO1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0LnN1YnN0cigwLCBwb3MxKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMSwgMikpO1xuICAgICAgICBhcnJheVtTRUNPTkRdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczIpKTtcbiAgICB9KTtcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUlzUE0oaW5wdXQpIHtcbiAgICAgICAgLy8gSUU4IFF1aXJrcyBNb2RlICYgSUU3IFN0YW5kYXJkcyBNb2RlIGRvIG5vdCBhbGxvdyBhY2Nlc3Npbmcgc3RyaW5ncyBsaWtlIGFycmF5c1xuICAgICAgICAvLyBVc2luZyBjaGFyQXQgc2hvdWxkIGJlIG1vcmUgY29tcGF0aWJsZS5cbiAgICAgICAgcmV0dXJuIChpbnB1dCArICcnKS50b0xvd2VyQ2FzZSgpLmNoYXJBdCgwKSA9PT0gJ3AnO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlTWVyaWRpZW1QYXJzZSA9IC9bYXBdXFwuP20/XFwuPy9pLFxuICAgICAgICAvLyBTZXR0aW5nIHRoZSBob3VyIHNob3VsZCBrZWVwIHRoZSB0aW1lLCBiZWNhdXNlIHRoZSB1c2VyIGV4cGxpY2l0bHlcbiAgICAgICAgLy8gc3BlY2lmaWVkIHdoaWNoIGhvdXIgdGhleSB3YW50LiBTbyB0cnlpbmcgdG8gbWFpbnRhaW4gdGhlIHNhbWUgaG91ciAoaW5cbiAgICAgICAgLy8gYSBuZXcgdGltZXpvbmUpIG1ha2VzIHNlbnNlLiBBZGRpbmcvc3VidHJhY3RpbmcgaG91cnMgZG9lcyBub3QgZm9sbG93XG4gICAgICAgIC8vIHRoaXMgcnVsZS5cbiAgICAgICAgZ2V0U2V0SG91ciA9IG1ha2VHZXRTZXQoJ0hvdXJzJywgdHJ1ZSk7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNZXJpZGllbShob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICBpZiAoaG91cnMgPiAxMSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAncG0nIDogJ1BNJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ2FtJyA6ICdBTSc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYmFzZUNvbmZpZyA9IHtcbiAgICAgICAgY2FsZW5kYXI6IGRlZmF1bHRDYWxlbmRhcixcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IGRlZmF1bHRMb25nRGF0ZUZvcm1hdCxcbiAgICAgICAgaW52YWxpZERhdGU6IGRlZmF1bHRJbnZhbGlkRGF0ZSxcbiAgICAgICAgb3JkaW5hbDogZGVmYXVsdE9yZGluYWwsXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IGRlZmF1bHREYXlPZk1vbnRoT3JkaW5hbFBhcnNlLFxuICAgICAgICByZWxhdGl2ZVRpbWU6IGRlZmF1bHRSZWxhdGl2ZVRpbWUsXG5cbiAgICAgICAgbW9udGhzOiBkZWZhdWx0TG9jYWxlTW9udGhzLFxuICAgICAgICBtb250aHNTaG9ydDogZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0LFxuXG4gICAgICAgIHdlZWs6IGRlZmF1bHRMb2NhbGVXZWVrLFxuXG4gICAgICAgIHdlZWtkYXlzOiBkZWZhdWx0TG9jYWxlV2Vla2RheXMsXG4gICAgICAgIHdlZWtkYXlzTWluOiBkZWZhdWx0TG9jYWxlV2Vla2RheXNNaW4sXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6IGRlZmF1bHRMb2NhbGVXZWVrZGF5c1Nob3J0LFxuXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IGRlZmF1bHRMb2NhbGVNZXJpZGllbVBhcnNlLFxuICAgIH07XG5cbiAgICAvLyBpbnRlcm5hbCBzdG9yYWdlIGZvciBsb2NhbGUgY29uZmlnIGZpbGVzXG4gICAgdmFyIGxvY2FsZXMgPSB7fSxcbiAgICAgICAgbG9jYWxlRmFtaWxpZXMgPSB7fSxcbiAgICAgICAgZ2xvYmFsTG9jYWxlO1xuXG4gICAgZnVuY3Rpb24gY29tbW9uUHJlZml4KGFycjEsIGFycjIpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBtaW5sID0gTWF0aC5taW4oYXJyMS5sZW5ndGgsIGFycjIubGVuZ3RoKTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IG1pbmw7IGkgKz0gMSkge1xuICAgICAgICAgICAgaWYgKGFycjFbaV0gIT09IGFycjJbaV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWlubDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBub3JtYWxpemVMb2NhbGUoa2V5KSB7XG4gICAgICAgIHJldHVybiBrZXkgPyBrZXkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCdfJywgJy0nKSA6IGtleTtcbiAgICB9XG5cbiAgICAvLyBwaWNrIHRoZSBsb2NhbGUgZnJvbSB0aGUgYXJyYXlcbiAgICAvLyB0cnkgWydlbi1hdScsICdlbi1nYiddIGFzICdlbi1hdScsICdlbi1nYicsICdlbicsIGFzIGluIG1vdmUgdGhyb3VnaCB0aGUgbGlzdCB0cnlpbmcgZWFjaFxuICAgIC8vIHN1YnN0cmluZyBmcm9tIG1vc3Qgc3BlY2lmaWMgdG8gbGVhc3QsIGJ1dCBtb3ZlIHRvIHRoZSBuZXh0IGFycmF5IGl0ZW0gaWYgaXQncyBhIG1vcmUgc3BlY2lmaWMgdmFyaWFudCB0aGFuIHRoZSBjdXJyZW50IHJvb3RcbiAgICBmdW5jdGlvbiBjaG9vc2VMb2NhbGUobmFtZXMpIHtcbiAgICAgICAgdmFyIGkgPSAwLFxuICAgICAgICAgICAgaixcbiAgICAgICAgICAgIG5leHQsXG4gICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICBzcGxpdDtcblxuICAgICAgICB3aGlsZSAoaSA8IG5hbWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgc3BsaXQgPSBub3JtYWxpemVMb2NhbGUobmFtZXNbaV0pLnNwbGl0KCctJyk7XG4gICAgICAgICAgICBqID0gc3BsaXQubGVuZ3RoO1xuICAgICAgICAgICAgbmV4dCA9IG5vcm1hbGl6ZUxvY2FsZShuYW1lc1tpICsgMV0pO1xuICAgICAgICAgICAgbmV4dCA9IG5leHQgPyBuZXh0LnNwbGl0KCctJykgOiBudWxsO1xuICAgICAgICAgICAgd2hpbGUgKGogPiAwKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxlID0gbG9hZExvY2FsZShzcGxpdC5zbGljZSgwLCBqKS5qb2luKCctJykpO1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBuZXh0ICYmXG4gICAgICAgICAgICAgICAgICAgIG5leHQubGVuZ3RoID49IGogJiZcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uUHJlZml4KHNwbGl0LCBuZXh0KSA+PSBqIC0gMVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAvL3RoZSBuZXh0IGFycmF5IGl0ZW0gaXMgYmV0dGVyIHRoYW4gYSBzaGFsbG93ZXIgc3Vic3RyaW5nIG9mIHRoaXMgb25lXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBqLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0xvY2FsZU5hbWVTYW5lKG5hbWUpIHtcbiAgICAgICAgLy8gUHJldmVudCBuYW1lcyB0aGF0IGxvb2sgbGlrZSBmaWxlc3lzdGVtIHBhdGhzLCBpLmUgY29udGFpbiAnLycgb3IgJ1xcJ1xuICAgICAgICAvLyBFbnN1cmUgbmFtZSBpcyBhdmFpbGFibGUgYW5kIGZ1bmN0aW9uIHJldHVybnMgYm9vbGVhblxuICAgICAgICByZXR1cm4gISEobmFtZSAmJiBuYW1lLm1hdGNoKCdeW14vXFxcXFxcXFxdKiQnKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9hZExvY2FsZShuYW1lKSB7XG4gICAgICAgIHZhciBvbGRMb2NhbGUgPSBudWxsLFxuICAgICAgICAgICAgYWxpYXNlZFJlcXVpcmU7XG4gICAgICAgIC8vIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIHJlZ2lzdGVyIGFuZCBsb2FkIGFsbCB0aGUgbG9jYWxlcyBpbiBOb2RlXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIG1vZHVsZSAmJlxuICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgJiZcbiAgICAgICAgICAgIGlzTG9jYWxlTmFtZVNhbmUobmFtZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIG9sZExvY2FsZSA9IGdsb2JhbExvY2FsZS5fYWJicjtcbiAgICAgICAgICAgICAgICBhbGlhc2VkUmVxdWlyZSA9IHJlcXVpcmU7XG4gICAgICAgICAgICAgICAgYWxpYXNlZFJlcXVpcmUoJy4vbG9jYWxlLycgKyBuYW1lKTtcbiAgICAgICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUob2xkTG9jYWxlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBtYXJrIGFzIG5vdCBmb3VuZCB0byBhdm9pZCByZXBlYXRpbmcgZXhwZW5zaXZlIGZpbGUgcmVxdWlyZSBjYWxsIGNhdXNpbmcgaGlnaCBDUFVcbiAgICAgICAgICAgICAgICAvLyB3aGVuIHRyeWluZyB0byBmaW5kIGVuLVVTLCBlbl9VUywgZW4tdXMgZm9yIGV2ZXJ5IGZvcm1hdCBjYWxsXG4gICAgICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IG51bGw7IC8vIG51bGwgbWVhbnMgbm90IGZvdW5kXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvY2FsZXNbbmFtZV07XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGxvYWQgbG9jYWxlIGFuZCB0aGVuIHNldCB0aGUgZ2xvYmFsIGxvY2FsZS4gIElmXG4gICAgLy8gbm8gYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4sIGl0IHdpbGwgc2ltcGx5IHJldHVybiB0aGUgY3VycmVudCBnbG9iYWxcbiAgICAvLyBsb2NhbGUga2V5LlxuICAgIGZ1bmN0aW9uIGdldFNldEdsb2JhbExvY2FsZShrZXksIHZhbHVlcykge1xuICAgICAgICB2YXIgZGF0YTtcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZ2V0TG9jYWxlKGtleSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkZWZpbmVMb2NhbGUoa2V5LCB2YWx1ZXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIC8vIG1vbWVudC5kdXJhdGlvbi5fbG9jYWxlID0gbW9tZW50Ll9sb2NhbGUgPSBkYXRhO1xuICAgICAgICAgICAgICAgIGdsb2JhbExvY2FsZSA9IGRhdGE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uc29sZS53YXJuKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vd2FybiB1c2VyIGlmIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGJ1dCB0aGUgbG9jYWxlIGNvdWxkIG5vdCBiZSBzZXRcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0xvY2FsZSAnICsga2V5ICsgJyBub3QgZm91bmQuIERpZCB5b3UgZm9yZ2V0IHRvIGxvYWQgaXQ/J1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBnbG9iYWxMb2NhbGUuX2FiYnI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVmaW5lTG9jYWxlKG5hbWUsIGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlLFxuICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGJhc2VDb25maWc7XG4gICAgICAgICAgICBjb25maWcuYWJiciA9IG5hbWU7XG4gICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZGVwcmVjYXRlU2ltcGxlKFxuICAgICAgICAgICAgICAgICAgICAnZGVmaW5lTG9jYWxlT3ZlcnJpZGUnLFxuICAgICAgICAgICAgICAgICAgICAndXNlIG1vbWVudC51cGRhdGVMb2NhbGUobG9jYWxlTmFtZSwgY29uZmlnKSB0byBjaGFuZ2UgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnYW4gZXhpc3RpbmcgbG9jYWxlLiBtb21lbnQuZGVmaW5lTG9jYWxlKGxvY2FsZU5hbWUsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbmZpZykgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgY3JlYXRpbmcgYSBuZXcgbG9jYWxlICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1NlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RlZmluZS1sb2NhbGUvIGZvciBtb3JlIGluZm8uJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlc1tuYW1lXS5fY29uZmlnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb25maWcucGFyZW50TG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlc1tjb25maWcucGFyZW50TG9jYWxlXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGxvY2FsZXNbY29uZmlnLnBhcmVudExvY2FsZV0uX2NvbmZpZztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKGNvbmZpZy5wYXJlbnRMb2NhbGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGxvY2FsZS5fY29uZmlnO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2NhbGVGYW1pbGllc1tjb25maWcucGFyZW50TG9jYWxlXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGVGYW1pbGllc1tjb25maWcucGFyZW50TG9jYWxlXS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZzogY29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBuZXcgTG9jYWxlKG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNvbmZpZykpO1xuXG4gICAgICAgICAgICBpZiAobG9jYWxlRmFtaWxpZXNbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICBsb2NhbGVGYW1pbGllc1tuYW1lXS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmluZUxvY2FsZSh4Lm5hbWUsIHguY29uZmlnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gYmFja3dhcmRzIGNvbXBhdCBmb3Igbm93OiBhbHNvIHNldCB0aGUgbG9jYWxlXG4gICAgICAgICAgICAvLyBtYWtlIHN1cmUgd2Ugc2V0IHRoZSBsb2NhbGUgQUZURVIgYWxsIGNoaWxkIGxvY2FsZXMgaGF2ZSBiZWVuXG4gICAgICAgICAgICAvLyBjcmVhdGVkLCBzbyB3ZSB3b24ndCBlbmQgdXAgd2l0aCB0aGUgY2hpbGQgbG9jYWxlIHNldC5cbiAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShuYW1lKTtcblxuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZXNbbmFtZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB1c2VmdWwgZm9yIHRlc3RpbmdcbiAgICAgICAgICAgIGRlbGV0ZSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVMb2NhbGUobmFtZSwgY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSxcbiAgICAgICAgICAgICAgICB0bXBMb2NhbGUsXG4gICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gYmFzZUNvbmZpZztcblxuICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCAmJiBsb2NhbGVzW25hbWVdLnBhcmVudExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIGNoaWxkIGxvY2FsZSBpbi1wbGFjZSB0byBhdm9pZCBtZW1vcnktbGVha3NcbiAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdLnNldChtZXJnZUNvbmZpZ3MobG9jYWxlc1tuYW1lXS5fY29uZmlnLCBjb25maWcpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gTUVSR0VcbiAgICAgICAgICAgICAgICB0bXBMb2NhbGUgPSBsb2FkTG9jYWxlKG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICh0bXBMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSB0bXBMb2NhbGUuX2NvbmZpZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uZmlnID0gbWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY29uZmlnKTtcbiAgICAgICAgICAgICAgICBpZiAodG1wTG9jYWxlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlTG9jYWxlIGlzIGNhbGxlZCBmb3IgY3JlYXRpbmcgYSBuZXcgbG9jYWxlXG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCBhYmJyIHNvIGl0IHdpbGwgaGF2ZSBhIG5hbWUgKGdldHRlcnMgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgIC8vIHVuZGVmaW5lZCBvdGhlcndpc2UpLlxuICAgICAgICAgICAgICAgICAgICBjb25maWcuYWJiciA9IG5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxvY2FsZSA9IG5ldyBMb2NhbGUoY29uZmlnKTtcbiAgICAgICAgICAgICAgICBsb2NhbGUucGFyZW50TG9jYWxlID0gbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbG9jYWxlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiYWNrd2FyZHMgY29tcGF0IGZvciBub3c6IGFsc28gc2V0IHRoZSBsb2NhbGVcbiAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShuYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHBhc3MgbnVsbCBmb3IgY29uZmlnIHRvIHVudXBkYXRlLCB1c2VmdWwgZm9yIHRlc3RzXG4gICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0ucGFyZW50TG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IGxvY2FsZXNbbmFtZV0ucGFyZW50TG9jYWxlO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gZ2V0U2V0R2xvYmFsTG9jYWxlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICB9XG5cbiAgICAvLyByZXR1cm5zIGxvY2FsZSBkYXRhXG4gICAgZnVuY3Rpb24gZ2V0TG9jYWxlKGtleSkge1xuICAgICAgICB2YXIgbG9jYWxlO1xuXG4gICAgICAgIGlmIChrZXkgJiYga2V5Ll9sb2NhbGUgJiYga2V5Ll9sb2NhbGUuX2FiYnIpIHtcbiAgICAgICAgICAgIGtleSA9IGtleS5fbG9jYWxlLl9hYmJyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBnbG9iYWxMb2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzQXJyYXkoa2V5KSkge1xuICAgICAgICAgICAgLy9zaG9ydC1jaXJjdWl0IGV2ZXJ5dGhpbmcgZWxzZVxuICAgICAgICAgICAgbG9jYWxlID0gbG9hZExvY2FsZShrZXkpO1xuICAgICAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBrZXkgPSBba2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjaG9vc2VMb2NhbGUoa2V5KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TG9jYWxlcygpIHtcbiAgICAgICAgcmV0dXJuIGtleXMobG9jYWxlcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tPdmVyZmxvdyhtKSB7XG4gICAgICAgIHZhciBvdmVyZmxvdyxcbiAgICAgICAgICAgIGEgPSBtLl9hO1xuXG4gICAgICAgIGlmIChhICYmIGdldFBhcnNpbmdGbGFncyhtKS5vdmVyZmxvdyA9PT0gLTIpIHtcbiAgICAgICAgICAgIG92ZXJmbG93ID1cbiAgICAgICAgICAgICAgICBhW01PTlRIXSA8IDAgfHwgYVtNT05USF0gPiAxMVxuICAgICAgICAgICAgICAgICAgICA/IE1PTlRIXG4gICAgICAgICAgICAgICAgICAgIDogYVtEQVRFXSA8IDEgfHwgYVtEQVRFXSA+IGRheXNJbk1vbnRoKGFbWUVBUl0sIGFbTU9OVEhdKVxuICAgICAgICAgICAgICAgICAgICAgID8gREFURVxuICAgICAgICAgICAgICAgICAgICAgIDogYVtIT1VSXSA8IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYVtIT1VSXSA+IDI0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIChhW0hPVVJdID09PSAyNCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFbTUlOVVRFXSAhPT0gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFbU0VDT05EXSAhPT0gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFbTUlMTElTRUNPTkRdICE9PSAwKSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gSE9VUlxuICAgICAgICAgICAgICAgICAgICAgICAgOiBhW01JTlVURV0gPCAwIHx8IGFbTUlOVVRFXSA+IDU5XG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gTUlOVVRFXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogYVtTRUNPTkRdIDwgMCB8fCBhW1NFQ09ORF0gPiA1OVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gU0VDT05EXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhW01JTExJU0VDT05EXSA8IDAgfHwgYVtNSUxMSVNFQ09ORF0gPiA5OTlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTUlMTElTRUNPTkRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLTE7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93RGF5T2ZZZWFyICYmXG4gICAgICAgICAgICAgICAgKG92ZXJmbG93IDwgWUVBUiB8fCBvdmVyZmxvdyA+IERBVEUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdyA9IERBVEU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZ2V0UGFyc2luZ0ZsYWdzKG0pLl9vdmVyZmxvd1dlZWtzICYmIG92ZXJmbG93ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gV0VFSztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93V2Vla2RheSAmJiBvdmVyZmxvdyA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdyA9IFdFRUtEQVk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhtKS5vdmVyZmxvdyA9IG92ZXJmbG93O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgLy8gaXNvIDg2MDEgcmVnZXhcbiAgICAvLyAwMDAwLTAwLTAwIDAwMDAtVzAwIG9yIDAwMDAtVzAwLTAgKyBUICsgMDAgb3IgMDA6MDAgb3IgMDA6MDA6MDAgb3IgMDA6MDA6MDAuMDAwICsgKzAwOjAwIG9yICswMDAwIG9yICswMClcbiAgICB2YXIgZXh0ZW5kZWRJc29SZWdleCA9XG4gICAgICAgICAgICAvXlxccyooKD86WystXVxcZHs2fXxcXGR7NH0pLSg/OlxcZFxcZC1cXGRcXGR8V1xcZFxcZC1cXGR8V1xcZFxcZHxcXGRcXGRcXGR8XFxkXFxkKSkoPzooVHwgKShcXGRcXGQoPzo6XFxkXFxkKD86OlxcZFxcZCg/OlsuLF1cXGQrKT8pPyk/KShbKy1dXFxkXFxkKD86Oj9cXGRcXGQpP3xcXHMqWik/KT8kLyxcbiAgICAgICAgYmFzaWNJc29SZWdleCA9XG4gICAgICAgICAgICAvXlxccyooKD86WystXVxcZHs2fXxcXGR7NH0pKD86XFxkXFxkXFxkXFxkfFdcXGRcXGRcXGR8V1xcZFxcZHxcXGRcXGRcXGR8XFxkXFxkfCkpKD86KFR8ICkoXFxkXFxkKD86XFxkXFxkKD86XFxkXFxkKD86Wy4sXVxcZCspPyk/KT8pKFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/fFxccypaKT8pPyQvLFxuICAgICAgICB0elJlZ2V4ID0gL1p8WystXVxcZFxcZCg/Ojo/XFxkXFxkKT8vLFxuICAgICAgICBpc29EYXRlcyA9IFtcbiAgICAgICAgICAgIFsnWVlZWVlZLU1NLUREJywgL1srLV1cXGR7Nn0tXFxkXFxkLVxcZFxcZC9dLFxuICAgICAgICAgICAgWydZWVlZLU1NLUREJywgL1xcZHs0fS1cXGRcXGQtXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0dHR0ctW1ddV1ctRScsIC9cXGR7NH0tV1xcZFxcZC1cXGQvXSxcbiAgICAgICAgICAgIFsnR0dHRy1bV11XVycsIC9cXGR7NH0tV1xcZFxcZC8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWS1EREQnLCAvXFxkezR9LVxcZHszfS9dLFxuICAgICAgICAgICAgWydZWVlZLU1NJywgL1xcZHs0fS1cXGRcXGQvLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ1lZWVlZWU1NREQnLCAvWystXVxcZHsxMH0vXSxcbiAgICAgICAgICAgIFsnWVlZWU1NREQnLCAvXFxkezh9L10sXG4gICAgICAgICAgICBbJ0dHR0dbV11XV0UnLCAvXFxkezR9V1xcZHszfS9dLFxuICAgICAgICAgICAgWydHR0dHW1ddV1cnLCAvXFxkezR9V1xcZHsyfS8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWURERCcsIC9cXGR7N30vXSxcbiAgICAgICAgICAgIFsnWVlZWU1NJywgL1xcZHs2fS8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWScsIC9cXGR7NH0vLCBmYWxzZV0sXG4gICAgICAgIF0sXG4gICAgICAgIC8vIGlzbyB0aW1lIGZvcm1hdHMgYW5kIHJlZ2V4ZXNcbiAgICAgICAgaXNvVGltZXMgPSBbXG4gICAgICAgICAgICBbJ0hIOm1tOnNzLlNTU1MnLCAvXFxkXFxkOlxcZFxcZDpcXGRcXGRcXC5cXGQrL10sXG4gICAgICAgICAgICBbJ0hIOm1tOnNzLFNTU1MnLCAvXFxkXFxkOlxcZFxcZDpcXGRcXGQsXFxkKy9dLFxuICAgICAgICAgICAgWydISDptbTpzcycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZC9dLFxuICAgICAgICAgICAgWydISDptbScsIC9cXGRcXGQ6XFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIbW1zcy5TU1NTJywgL1xcZFxcZFxcZFxcZFxcZFxcZFxcLlxcZCsvXSxcbiAgICAgICAgICAgIFsnSEhtbXNzLFNTU1MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkLFxcZCsvXSxcbiAgICAgICAgICAgIFsnSEhtbXNzJywgL1xcZFxcZFxcZFxcZFxcZFxcZC9dLFxuICAgICAgICAgICAgWydISG1tJywgL1xcZFxcZFxcZFxcZC9dLFxuICAgICAgICAgICAgWydISCcsIC9cXGRcXGQvXSxcbiAgICAgICAgXSxcbiAgICAgICAgYXNwTmV0SnNvblJlZ2V4ID0gL15cXC8/RGF0ZVxcKCgtP1xcZCspL2ksXG4gICAgICAgIC8vIFJGQyAyODIyIHJlZ2V4OiBGb3IgZGV0YWlscyBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzI4MjIjc2VjdGlvbi0zLjNcbiAgICAgICAgcmZjMjgyMiA9XG4gICAgICAgICAgICAvXig/OihNb258VHVlfFdlZHxUaHV8RnJpfFNhdHxTdW4pLD9cXHMpPyhcXGR7MSwyfSlcXHMoSmFufEZlYnxNYXJ8QXByfE1heXxKdW58SnVsfEF1Z3xTZXB8T2N0fE5vdnxEZWMpXFxzKFxcZHsyLDR9KVxccyhcXGRcXGQpOihcXGRcXGQpKD86OihcXGRcXGQpKT9cXHMoPzooVVR8R01UfFtFQ01QXVtTRF1UKXwoW1p6XSl8KFsrLV1cXGR7NH0pKSQvLFxuICAgICAgICBvYnNPZmZzZXRzID0ge1xuICAgICAgICAgICAgVVQ6IDAsXG4gICAgICAgICAgICBHTVQ6IDAsXG4gICAgICAgICAgICBFRFQ6IC00ICogNjAsXG4gICAgICAgICAgICBFU1Q6IC01ICogNjAsXG4gICAgICAgICAgICBDRFQ6IC01ICogNjAsXG4gICAgICAgICAgICBDU1Q6IC02ICogNjAsXG4gICAgICAgICAgICBNRFQ6IC02ICogNjAsXG4gICAgICAgICAgICBNU1Q6IC03ICogNjAsXG4gICAgICAgICAgICBQRFQ6IC03ICogNjAsXG4gICAgICAgICAgICBQU1Q6IC04ICogNjAsXG4gICAgICAgIH07XG5cbiAgICAvLyBkYXRlIGZyb20gaXNvIGZvcm1hdFxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21JU08oY29uZmlnKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIHN0cmluZyA9IGNvbmZpZy5faSxcbiAgICAgICAgICAgIG1hdGNoID0gZXh0ZW5kZWRJc29SZWdleC5leGVjKHN0cmluZykgfHwgYmFzaWNJc29SZWdleC5leGVjKHN0cmluZyksXG4gICAgICAgICAgICBhbGxvd1RpbWUsXG4gICAgICAgICAgICBkYXRlRm9ybWF0LFxuICAgICAgICAgICAgdGltZUZvcm1hdCxcbiAgICAgICAgICAgIHR6Rm9ybWF0LFxuICAgICAgICAgICAgaXNvRGF0ZXNMZW4gPSBpc29EYXRlcy5sZW5ndGgsXG4gICAgICAgICAgICBpc29UaW1lc0xlbiA9IGlzb1RpbWVzLmxlbmd0aDtcblxuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmlzbyA9IHRydWU7XG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gaXNvRGF0ZXNMZW47IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNvRGF0ZXNbaV1bMV0uZXhlYyhtYXRjaFsxXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZUZvcm1hdCA9IGlzb0RhdGVzW2ldWzBdO1xuICAgICAgICAgICAgICAgICAgICBhbGxvd1RpbWUgPSBpc29EYXRlc1tpXVsyXSAhPT0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRlRm9ybWF0ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbM10pIHtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gaXNvVGltZXNMZW47IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzb1RpbWVzW2ldWzFdLmV4ZWMobWF0Y2hbM10pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXRjaFsyXSBzaG91bGQgYmUgJ1QnIG9yIHNwYWNlXG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lRm9ybWF0ID0gKG1hdGNoWzJdIHx8ICcgJykgKyBpc29UaW1lc1tpXVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aW1lRm9ybWF0ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWFsbG93VGltZSAmJiB0aW1lRm9ybWF0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbNF0pIHtcbiAgICAgICAgICAgICAgICBpZiAodHpSZWdleC5leGVjKG1hdGNoWzRdKSkge1xuICAgICAgICAgICAgICAgICAgICB0ekZvcm1hdCA9ICdaJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbmZpZy5fZiA9IGRhdGVGb3JtYXQgKyAodGltZUZvcm1hdCB8fCAnJykgKyAodHpGb3JtYXQgfHwgJycpO1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHRyYWN0RnJvbVJGQzI4MjJTdHJpbmdzKFxuICAgICAgICB5ZWFyU3RyLFxuICAgICAgICBtb250aFN0cixcbiAgICAgICAgZGF5U3RyLFxuICAgICAgICBob3VyU3RyLFxuICAgICAgICBtaW51dGVTdHIsXG4gICAgICAgIHNlY29uZFN0clxuICAgICkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW1xuICAgICAgICAgICAgdW50cnVuY2F0ZVllYXIoeWVhclN0ciksXG4gICAgICAgICAgICBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQuaW5kZXhPZihtb250aFN0ciksXG4gICAgICAgICAgICBwYXJzZUludChkYXlTdHIsIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGhvdXJTdHIsIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KG1pbnV0ZVN0ciwgMTApLFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmIChzZWNvbmRTdHIpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHBhcnNlSW50KHNlY29uZFN0ciwgMTApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdW50cnVuY2F0ZVllYXIoeWVhclN0cikge1xuICAgICAgICB2YXIgeWVhciA9IHBhcnNlSW50KHllYXJTdHIsIDEwKTtcbiAgICAgICAgaWYgKHllYXIgPD0gNDkpIHtcbiAgICAgICAgICAgIHJldHVybiAyMDAwICsgeWVhcjtcbiAgICAgICAgfSBlbHNlIGlmICh5ZWFyIDw9IDk5OSkge1xuICAgICAgICAgICAgcmV0dXJuIDE5MDAgKyB5ZWFyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB5ZWFyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByZXByb2Nlc3NSRkMyODIyKHMpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGNvbW1lbnRzIGFuZCBmb2xkaW5nIHdoaXRlc3BhY2UgYW5kIHJlcGxhY2UgbXVsdGlwbGUtc3BhY2VzIHdpdGggYSBzaW5nbGUgc3BhY2VcbiAgICAgICAgcmV0dXJuIHNcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXChbXigpXSpcXCl8W1xcblxcdF0vZywgJyAnKVxuICAgICAgICAgICAgLnJlcGxhY2UoLyhcXHNcXHMrKS9nLCAnICcpXG4gICAgICAgICAgICAucmVwbGFjZSgvXlxcc1xccyovLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXHNcXHMqJC8sICcnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja1dlZWtkYXkod2Vla2RheVN0ciwgcGFyc2VkSW5wdXQsIGNvbmZpZykge1xuICAgICAgICBpZiAod2Vla2RheVN0cikge1xuICAgICAgICAgICAgLy8gVE9ETzogUmVwbGFjZSB0aGUgdmFuaWxsYSBKUyBEYXRlIG9iamVjdCB3aXRoIGFuIGluZGVwZW5kZW50IGRheS1vZi13ZWVrIGNoZWNrLlxuICAgICAgICAgICAgdmFyIHdlZWtkYXlQcm92aWRlZCA9IGRlZmF1bHRMb2NhbGVXZWVrZGF5c1Nob3J0LmluZGV4T2Yod2Vla2RheVN0ciksXG4gICAgICAgICAgICAgICAgd2Vla2RheUFjdHVhbCA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRJbnB1dFswXSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkSW5wdXRbMV0sXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZElucHV0WzJdXG4gICAgICAgICAgICAgICAgKS5nZXREYXkoKTtcbiAgICAgICAgICAgIGlmICh3ZWVrZGF5UHJvdmlkZWQgIT09IHdlZWtkYXlBY3R1YWwpIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS53ZWVrZGF5TWlzbWF0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYWxjdWxhdGVPZmZzZXQob2JzT2Zmc2V0LCBtaWxpdGFyeU9mZnNldCwgbnVtT2Zmc2V0KSB7XG4gICAgICAgIGlmIChvYnNPZmZzZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBvYnNPZmZzZXRzW29ic09mZnNldF07XG4gICAgICAgIH0gZWxzZSBpZiAobWlsaXRhcnlPZmZzZXQpIHtcbiAgICAgICAgICAgIC8vIHRoZSBvbmx5IGFsbG93ZWQgbWlsaXRhcnkgdHogaXMgWlxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaG0gPSBwYXJzZUludChudW1PZmZzZXQsIDEwKSxcbiAgICAgICAgICAgICAgICBtID0gaG0gJSAxMDAsXG4gICAgICAgICAgICAgICAgaCA9IChobSAtIG0pIC8gMTAwO1xuICAgICAgICAgICAgcmV0dXJuIGggKiA2MCArIG07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkYXRlIGFuZCB0aW1lIGZyb20gcmVmIDI4MjIgZm9ybWF0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVJGQzI4MjIoY29uZmlnKSB7XG4gICAgICAgIHZhciBtYXRjaCA9IHJmYzI4MjIuZXhlYyhwcmVwcm9jZXNzUkZDMjgyMihjb25maWcuX2kpKSxcbiAgICAgICAgICAgIHBhcnNlZEFycmF5O1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIHBhcnNlZEFycmF5ID0gZXh0cmFjdEZyb21SRkMyODIyU3RyaW5ncyhcbiAgICAgICAgICAgICAgICBtYXRjaFs0XSxcbiAgICAgICAgICAgICAgICBtYXRjaFszXSxcbiAgICAgICAgICAgICAgICBtYXRjaFsyXSxcbiAgICAgICAgICAgICAgICBtYXRjaFs1XSxcbiAgICAgICAgICAgICAgICBtYXRjaFs2XSxcbiAgICAgICAgICAgICAgICBtYXRjaFs3XVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICghY2hlY2tXZWVrZGF5KG1hdGNoWzFdLCBwYXJzZWRBcnJheSwgY29uZmlnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uZmlnLl9hID0gcGFyc2VkQXJyYXk7XG4gICAgICAgICAgICBjb25maWcuX3R6bSA9IGNhbGN1bGF0ZU9mZnNldChtYXRjaFs4XSwgbWF0Y2hbOV0sIG1hdGNoWzEwXSk7XG5cbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IGNyZWF0ZVVUQ0RhdGUuYXBwbHkobnVsbCwgY29uZmlnLl9hKTtcbiAgICAgICAgICAgIGNvbmZpZy5fZC5zZXRVVENNaW51dGVzKGNvbmZpZy5fZC5nZXRVVENNaW51dGVzKCkgLSBjb25maWcuX3R6bSk7XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnJmYzI4MjIgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkYXRlIGZyb20gMSkgQVNQLk5FVCwgMikgSVNPLCAzKSBSRkMgMjgyMiBmb3JtYXRzLCBvciA0KSBvcHRpb25hbCBmYWxsYmFjayBpZiBwYXJzaW5nIGlzbid0IHN0cmljdFxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmcoY29uZmlnKSB7XG4gICAgICAgIHZhciBtYXRjaGVkID0gYXNwTmV0SnNvblJlZ2V4LmV4ZWMoY29uZmlnLl9pKTtcbiAgICAgICAgaWYgKG1hdGNoZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKCttYXRjaGVkWzFdKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZ0Zyb21JU08oY29uZmlnKTtcbiAgICAgICAgaWYgKGNvbmZpZy5faXNWYWxpZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBjb25maWcuX2lzVmFsaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWdGcm9tUkZDMjgyMihjb25maWcpO1xuICAgICAgICBpZiAoY29uZmlnLl9pc1ZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5faXNWYWxpZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuX3N0cmljdCkge1xuICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBGaW5hbCBhdHRlbXB0LCB1c2UgSW5wdXQgRmFsbGJhY2tcbiAgICAgICAgICAgIGhvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ3ZhbHVlIHByb3ZpZGVkIGlzIG5vdCBpbiBhIHJlY29nbml6ZWQgUkZDMjgyMiBvciBJU08gZm9ybWF0LiBtb21lbnQgY29uc3RydWN0aW9uIGZhbGxzIGJhY2sgdG8ganMgRGF0ZSgpLCAnICtcbiAgICAgICAgICAgICd3aGljaCBpcyBub3QgcmVsaWFibGUgYWNyb3NzIGFsbCBicm93c2VycyBhbmQgdmVyc2lvbnMuIE5vbiBSRkMyODIyL0lTTyBkYXRlIGZvcm1hdHMgYXJlICcgK1xuICAgICAgICAgICAgJ2Rpc2NvdXJhZ2VkLiBQbGVhc2UgcmVmZXIgdG8gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9qcy1kYXRlLyBmb3IgbW9yZSBpbmZvLicsXG4gICAgICAgIGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGNvbmZpZy5faSArIChjb25maWcuX3VzZVVUQyA/ICcgVVRDJyA6ICcnKSk7XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gUGljayB0aGUgZmlyc3QgZGVmaW5lZCBvZiB0d28gb3IgdGhyZWUgYXJndW1lbnRzLlxuICAgIGZ1bmN0aW9uIGRlZmF1bHRzKGEsIGIsIGMpIHtcbiAgICAgICAgaWYgKGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGIgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3VycmVudERhdGVBcnJheShjb25maWcpIHtcbiAgICAgICAgLy8gaG9va3MgaXMgYWN0dWFsbHkgdGhlIGV4cG9ydGVkIG1vbWVudCBvYmplY3RcbiAgICAgICAgdmFyIG5vd1ZhbHVlID0gbmV3IERhdGUoaG9va3Mubm93KCkpO1xuICAgICAgICBpZiAoY29uZmlnLl91c2VVVEMpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgbm93VmFsdWUuZ2V0VVRDRnVsbFllYXIoKSxcbiAgICAgICAgICAgICAgICBub3dWYWx1ZS5nZXRVVENNb250aCgpLFxuICAgICAgICAgICAgICAgIG5vd1ZhbHVlLmdldFVUQ0RhdGUoKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtub3dWYWx1ZS5nZXRGdWxsWWVhcigpLCBub3dWYWx1ZS5nZXRNb250aCgpLCBub3dWYWx1ZS5nZXREYXRlKCldO1xuICAgIH1cblxuICAgIC8vIGNvbnZlcnQgYW4gYXJyYXkgdG8gYSBkYXRlLlxuICAgIC8vIHRoZSBhcnJheSBzaG91bGQgbWlycm9yIHRoZSBwYXJhbWV0ZXJzIGJlbG93XG4gICAgLy8gbm90ZTogYWxsIHZhbHVlcyBwYXN0IHRoZSB5ZWFyIGFyZSBvcHRpb25hbCBhbmQgd2lsbCBkZWZhdWx0IHRvIHRoZSBsb3dlc3QgcG9zc2libGUgdmFsdWUuXG4gICAgLy8gW3llYXIsIG1vbnRoLCBkYXkgLCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmRdXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUFycmF5KGNvbmZpZykge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBpbnB1dCA9IFtdLFxuICAgICAgICAgICAgY3VycmVudERhdGUsXG4gICAgICAgICAgICBleHBlY3RlZFdlZWtkYXksXG4gICAgICAgICAgICB5ZWFyVG9Vc2U7XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudERhdGUgPSBjdXJyZW50RGF0ZUFycmF5KGNvbmZpZyk7XG5cbiAgICAgICAgLy9jb21wdXRlIGRheSBvZiB0aGUgeWVhciBmcm9tIHdlZWtzIGFuZCB3ZWVrZGF5c1xuICAgICAgICBpZiAoY29uZmlnLl93ICYmIGNvbmZpZy5fYVtEQVRFXSA9PSBudWxsICYmIGNvbmZpZy5fYVtNT05USF0gPT0gbnVsbCkge1xuICAgICAgICAgICAgZGF5T2ZZZWFyRnJvbVdlZWtJbmZvKGNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICAvL2lmIHRoZSBkYXkgb2YgdGhlIHllYXIgaXMgc2V0LCBmaWd1cmUgb3V0IHdoYXQgaXQgaXNcbiAgICAgICAgaWYgKGNvbmZpZy5fZGF5T2ZZZWFyICE9IG51bGwpIHtcbiAgICAgICAgICAgIHllYXJUb1VzZSA9IGRlZmF1bHRzKGNvbmZpZy5fYVtZRUFSXSwgY3VycmVudERhdGVbWUVBUl0pO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPiBkYXlzSW5ZZWFyKHllYXJUb1VzZSkgfHxcbiAgICAgICAgICAgICAgICBjb25maWcuX2RheU9mWWVhciA9PT0gMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuX292ZXJmbG93RGF5T2ZZZWFyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGF0ZSA9IGNyZWF0ZVVUQ0RhdGUoeWVhclRvVXNlLCAwLCBjb25maWcuX2RheU9mWWVhcik7XG4gICAgICAgICAgICBjb25maWcuX2FbTU9OVEhdID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgICAgICAgICAgY29uZmlnLl9hW0RBVEVdID0gZGF0ZS5nZXRVVENEYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWZhdWx0IHRvIGN1cnJlbnQgZGF0ZS5cbiAgICAgICAgLy8gKiBpZiBubyB5ZWFyLCBtb250aCwgZGF5IG9mIG1vbnRoIGFyZSBnaXZlbiwgZGVmYXVsdCB0byB0b2RheVxuICAgICAgICAvLyAqIGlmIGRheSBvZiBtb250aCBpcyBnaXZlbiwgZGVmYXVsdCBtb250aCBhbmQgeWVhclxuICAgICAgICAvLyAqIGlmIG1vbnRoIGlzIGdpdmVuLCBkZWZhdWx0IG9ubHkgeWVhclxuICAgICAgICAvLyAqIGlmIHllYXIgaXMgZ2l2ZW4sIGRvbid0IGRlZmF1bHQgYW55dGhpbmdcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDMgJiYgY29uZmlnLl9hW2ldID09IG51bGw7ICsraSkge1xuICAgICAgICAgICAgY29uZmlnLl9hW2ldID0gaW5wdXRbaV0gPSBjdXJyZW50RGF0ZVtpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFplcm8gb3V0IHdoYXRldmVyIHdhcyBub3QgZGVmYXVsdGVkLCBpbmNsdWRpbmcgdGltZVxuICAgICAgICBmb3IgKDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgY29uZmlnLl9hW2ldID0gaW5wdXRbaV0gPVxuICAgICAgICAgICAgICAgIGNvbmZpZy5fYVtpXSA9PSBudWxsID8gKGkgPT09IDIgPyAxIDogMCkgOiBjb25maWcuX2FbaV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBmb3IgMjQ6MDA6MDAuMDAwXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9PT0gMjQgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtNSU5VVEVdID09PSAwICYmXG4gICAgICAgICAgICBjb25maWcuX2FbU0VDT05EXSA9PT0gMCAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW01JTExJU0VDT05EXSA9PT0gMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbmZpZy5fbmV4dERheSA9IHRydWU7XG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnLl9kID0gKGNvbmZpZy5fdXNlVVRDID8gY3JlYXRlVVRDRGF0ZSA6IGNyZWF0ZURhdGUpLmFwcGx5KFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIGlucHV0XG4gICAgICAgICk7XG4gICAgICAgIGV4cGVjdGVkV2Vla2RheSA9IGNvbmZpZy5fdXNlVVRDXG4gICAgICAgICAgICA/IGNvbmZpZy5fZC5nZXRVVENEYXkoKVxuICAgICAgICAgICAgOiBjb25maWcuX2QuZ2V0RGF5KCk7XG5cbiAgICAgICAgLy8gQXBwbHkgdGltZXpvbmUgb2Zmc2V0IGZyb20gaW5wdXQuIFRoZSBhY3R1YWwgdXRjT2Zmc2V0IGNhbiBiZSBjaGFuZ2VkXG4gICAgICAgIC8vIHdpdGggcGFyc2Vab25lLlxuICAgICAgICBpZiAoY29uZmlnLl90em0gIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9kLnNldFVUQ01pbnV0ZXMoY29uZmlnLl9kLmdldFVUQ01pbnV0ZXMoKSAtIGNvbmZpZy5fdHptKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuX25leHREYXkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IDI0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2hlY2sgZm9yIG1pc21hdGNoaW5nIGRheSBvZiB3ZWVrXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbmZpZy5fdyAmJlxuICAgICAgICAgICAgdHlwZW9mIGNvbmZpZy5fdy5kICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgY29uZmlnLl93LmQgIT09IGV4cGVjdGVkV2Vla2RheVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLndlZWtkYXlNaXNtYXRjaCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlPZlllYXJGcm9tV2Vla0luZm8oY29uZmlnKSB7XG4gICAgICAgIHZhciB3LCB3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3ksIHRlbXAsIHdlZWtkYXlPdmVyZmxvdywgY3VyV2VlaztcblxuICAgICAgICB3ID0gY29uZmlnLl93O1xuICAgICAgICBpZiAody5HRyAhPSBudWxsIHx8IHcuVyAhPSBudWxsIHx8IHcuRSAhPSBudWxsKSB7XG4gICAgICAgICAgICBkb3cgPSAxO1xuICAgICAgICAgICAgZG95ID0gNDtcblxuICAgICAgICAgICAgLy8gVE9ETzogV2UgbmVlZCB0byB0YWtlIHRoZSBjdXJyZW50IGlzb1dlZWtZZWFyLCBidXQgdGhhdCBkZXBlbmRzIG9uXG4gICAgICAgICAgICAvLyBob3cgd2UgaW50ZXJwcmV0IG5vdyAobG9jYWwsIHV0YywgZml4ZWQgb2Zmc2V0KS4gU28gY3JlYXRlXG4gICAgICAgICAgICAvLyBhIG5vdyB2ZXJzaW9uIG9mIGN1cnJlbnQgY29uZmlnICh0YWtlIGxvY2FsL3V0Yy9vZmZzZXQgZmxhZ3MsIGFuZFxuICAgICAgICAgICAgLy8gY3JlYXRlIG5vdykuXG4gICAgICAgICAgICB3ZWVrWWVhciA9IGRlZmF1bHRzKFxuICAgICAgICAgICAgICAgIHcuR0csXG4gICAgICAgICAgICAgICAgY29uZmlnLl9hW1lFQVJdLFxuICAgICAgICAgICAgICAgIHdlZWtPZlllYXIoY3JlYXRlTG9jYWwoKSwgMSwgNCkueWVhclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHdlZWsgPSBkZWZhdWx0cyh3LlcsIDEpO1xuICAgICAgICAgICAgd2Vla2RheSA9IGRlZmF1bHRzKHcuRSwgMSk7XG4gICAgICAgICAgICBpZiAod2Vla2RheSA8IDEgfHwgd2Vla2RheSA+IDcpIHtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5T3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZG93ID0gY29uZmlnLl9sb2NhbGUuX3dlZWsuZG93O1xuICAgICAgICAgICAgZG95ID0gY29uZmlnLl9sb2NhbGUuX3dlZWsuZG95O1xuXG4gICAgICAgICAgICBjdXJXZWVrID0gd2Vla09mWWVhcihjcmVhdGVMb2NhbCgpLCBkb3csIGRveSk7XG5cbiAgICAgICAgICAgIHdlZWtZZWFyID0gZGVmYXVsdHMody5nZywgY29uZmlnLl9hW1lFQVJdLCBjdXJXZWVrLnllYXIpO1xuXG4gICAgICAgICAgICAvLyBEZWZhdWx0IHRvIGN1cnJlbnQgd2Vlay5cbiAgICAgICAgICAgIHdlZWsgPSBkZWZhdWx0cyh3LncsIGN1cldlZWsud2Vlayk7XG5cbiAgICAgICAgICAgIGlmICh3LmQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIHdlZWtkYXkgLS0gbG93IGRheSBudW1iZXJzIGFyZSBjb25zaWRlcmVkIG5leHQgd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSB3LmQ7XG4gICAgICAgICAgICAgICAgaWYgKHdlZWtkYXkgPCAwIHx8IHdlZWtkYXkgPiA2KSB7XG4gICAgICAgICAgICAgICAgICAgIHdlZWtkYXlPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh3LmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIGxvY2FsIHdlZWtkYXkgLS0gY291bnRpbmcgc3RhcnRzIGZyb20gYmVnaW5uaW5nIG9mIHdlZWtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5ID0gdy5lICsgZG93O1xuICAgICAgICAgICAgICAgIGlmICh3LmUgPCAwIHx8IHcuZSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgdG8gYmVnaW5uaW5nIG9mIHdlZWtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5ID0gZG93O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh3ZWVrIDwgMSB8fCB3ZWVrID4gd2Vla3NJblllYXIod2Vla1llYXIsIGRvdywgZG95KSkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuX292ZXJmbG93V2Vla3MgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHdlZWtkYXlPdmVyZmxvdyAhPSBudWxsKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dXZWVrZGF5ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRlbXAgPSBkYXlPZlllYXJGcm9tV2Vla3Mod2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtZRUFSXSA9IHRlbXAueWVhcjtcbiAgICAgICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID0gdGVtcC5kYXlPZlllYXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjb25zdGFudCB0aGF0IHJlZmVycyB0byB0aGUgSVNPIHN0YW5kYXJkXG4gICAgaG9va3MuSVNPXzg2MDEgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIC8vIGNvbnN0YW50IHRoYXQgcmVmZXJzIHRvIHRoZSBSRkMgMjgyMiBmb3JtXG4gICAgaG9va3MuUkZDXzI4MjIgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIC8vIGRhdGUgZnJvbSBzdHJpbmcgYW5kIGZvcm1hdCBzdHJpbmdcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZykge1xuICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgdG8gYW5vdGhlciBwYXJ0IG9mIHRoZSBjcmVhdGlvbiBmbG93IHRvIHByZXZlbnQgY2lyY3VsYXIgZGVwc1xuICAgICAgICBpZiAoY29uZmlnLl9mID09PSBob29rcy5JU09fODYwMSkge1xuICAgICAgICAgICAgY29uZmlnRnJvbUlTTyhjb25maWcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWcuX2YgPT09IGhvb2tzLlJGQ18yODIyKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tUkZDMjgyMihjb25maWcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbmZpZy5fYSA9IFtdO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lbXB0eSA9IHRydWU7XG5cbiAgICAgICAgLy8gVGhpcyBhcnJheSBpcyB1c2VkIHRvIG1ha2UgYSBEYXRlLCBlaXRoZXIgd2l0aCBgbmV3IERhdGVgIG9yIGBEYXRlLlVUQ2BcbiAgICAgICAgdmFyIHN0cmluZyA9ICcnICsgY29uZmlnLl9pLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIHBhcnNlZElucHV0LFxuICAgICAgICAgICAgdG9rZW5zLFxuICAgICAgICAgICAgdG9rZW4sXG4gICAgICAgICAgICBza2lwcGVkLFxuICAgICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICAgIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGggPSAwLFxuICAgICAgICAgICAgZXJhLFxuICAgICAgICAgICAgdG9rZW5MZW47XG5cbiAgICAgICAgdG9rZW5zID1cbiAgICAgICAgICAgIGV4cGFuZEZvcm1hdChjb25maWcuX2YsIGNvbmZpZy5fbG9jYWxlKS5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKSB8fCBbXTtcbiAgICAgICAgdG9rZW5MZW4gPSB0b2tlbnMubGVuZ3RoO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG9rZW5MZW47IGkrKykge1xuICAgICAgICAgICAgdG9rZW4gPSB0b2tlbnNbaV07XG4gICAgICAgICAgICBwYXJzZWRJbnB1dCA9IChzdHJpbmcubWF0Y2goZ2V0UGFyc2VSZWdleEZvclRva2VuKHRva2VuLCBjb25maWcpKSB8fFxuICAgICAgICAgICAgICAgIFtdKVswXTtcbiAgICAgICAgICAgIGlmIChwYXJzZWRJbnB1dCkge1xuICAgICAgICAgICAgICAgIHNraXBwZWQgPSBzdHJpbmcuc3Vic3RyKDAsIHN0cmluZy5pbmRleE9mKHBhcnNlZElucHV0KSk7XG4gICAgICAgICAgICAgICAgaWYgKHNraXBwZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRJbnB1dC5wdXNoKHNraXBwZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc2xpY2UoXG4gICAgICAgICAgICAgICAgICAgIHN0cmluZy5pbmRleE9mKHBhcnNlZElucHV0KSArIHBhcnNlZElucHV0Lmxlbmd0aFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdG90YWxQYXJzZWRJbnB1dExlbmd0aCArPSBwYXJzZWRJbnB1dC5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBkb24ndCBwYXJzZSBpZiBpdCdzIG5vdCBhIGtub3duIHRva2VuXG4gICAgICAgICAgICBpZiAoZm9ybWF0VG9rZW5GdW5jdGlvbnNbdG9rZW5dKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVtcHR5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkVG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhZGRUaW1lVG9BcnJheUZyb21Ub2tlbih0b2tlbiwgcGFyc2VkSW5wdXQsIGNvbmZpZyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5fc3RyaWN0ICYmICFwYXJzZWRJbnB1dCkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZFRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFkZCByZW1haW5pbmcgdW5wYXJzZWQgaW5wdXQgbGVuZ3RoIHRvIHRoZSBzdHJpbmdcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuY2hhcnNMZWZ0T3ZlciA9XG4gICAgICAgICAgICBzdHJpbmdMZW5ndGggLSB0b3RhbFBhcnNlZElucHV0TGVuZ3RoO1xuICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZElucHV0LnB1c2goc3RyaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNsZWFyIF8xMmggZmxhZyBpZiBob3VyIGlzIDw9IDEyXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA8PSAxMiAmJlxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9PT0gdHJ1ZSAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID4gMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5wYXJzZWREYXRlUGFydHMgPSBjb25maWcuX2Euc2xpY2UoMCk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLm1lcmlkaWVtID0gY29uZmlnLl9tZXJpZGllbTtcbiAgICAgICAgLy8gaGFuZGxlIG1lcmlkaWVtXG4gICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IG1lcmlkaWVtRml4V3JhcChcbiAgICAgICAgICAgIGNvbmZpZy5fbG9jYWxlLFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdLFxuICAgICAgICAgICAgY29uZmlnLl9tZXJpZGllbVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIGhhbmRsZSBlcmFcbiAgICAgICAgZXJhID0gZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZXJhO1xuICAgICAgICBpZiAoZXJhICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbWUVBUl0gPSBjb25maWcuX2xvY2FsZS5lcmFzQ29udmVydFllYXIoZXJhLCBjb25maWcuX2FbWUVBUl0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnRnJvbUFycmF5KGNvbmZpZyk7XG4gICAgICAgIGNoZWNrT3ZlcmZsb3coY29uZmlnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtZXJpZGllbUZpeFdyYXAobG9jYWxlLCBob3VyLCBtZXJpZGllbSkge1xuICAgICAgICB2YXIgaXNQbTtcblxuICAgICAgICBpZiAobWVyaWRpZW0gPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gbm90aGluZyB0byBkb1xuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsZS5tZXJpZGllbUhvdXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS5tZXJpZGllbUhvdXIoaG91ciwgbWVyaWRpZW0pO1xuICAgICAgICB9IGVsc2UgaWYgKGxvY2FsZS5pc1BNICE9IG51bGwpIHtcbiAgICAgICAgICAgIC8vIEZhbGxiYWNrXG4gICAgICAgICAgICBpc1BtID0gbG9jYWxlLmlzUE0obWVyaWRpZW0pO1xuICAgICAgICAgICAgaWYgKGlzUG0gJiYgaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNQbSAmJiBob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIG5vdCBzdXBwb3NlZCB0byBoYXBwZW5cbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGF0ZSBmcm9tIHN0cmluZyBhbmQgYXJyYXkgb2YgZm9ybWF0IHN0cmluZ3NcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tU3RyaW5nQW5kQXJyYXkoY29uZmlnKSB7XG4gICAgICAgIHZhciB0ZW1wQ29uZmlnLFxuICAgICAgICAgICAgYmVzdE1vbWVudCxcbiAgICAgICAgICAgIHNjb3JlVG9CZWF0LFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZSxcbiAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQsXG4gICAgICAgICAgICBiZXN0Rm9ybWF0SXNWYWxpZCA9IGZhbHNlLFxuICAgICAgICAgICAgY29uZmlnZkxlbiA9IGNvbmZpZy5fZi5sZW5ndGg7XG5cbiAgICAgICAgaWYgKGNvbmZpZ2ZMZW4gPT09IDApIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmludmFsaWRGb3JtYXQgPSB0cnVlO1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoTmFOKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb25maWdmTGVuOyBpKyspIHtcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZSA9IDA7XG4gICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICB0ZW1wQ29uZmlnID0gY29weUNvbmZpZyh7fSwgY29uZmlnKTtcbiAgICAgICAgICAgIGlmIChjb25maWcuX3VzZVVUQyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGVtcENvbmZpZy5fdXNlVVRDID0gY29uZmlnLl91c2VVVEM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZW1wQ29uZmlnLl9mID0gY29uZmlnLl9mW2ldO1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdCh0ZW1wQ29uZmlnKTtcblxuICAgICAgICAgICAgaWYgKGlzVmFsaWQodGVtcENvbmZpZykpIHtcbiAgICAgICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW55IGlucHV0IHRoYXQgd2FzIG5vdCBwYXJzZWQgYWRkIGEgcGVuYWx0eSBmb3IgdGhhdCBmb3JtYXRcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZSArPSBnZXRQYXJzaW5nRmxhZ3ModGVtcENvbmZpZykuY2hhcnNMZWZ0T3ZlcjtcblxuICAgICAgICAgICAgLy9vciB0b2tlbnNcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZSArPSBnZXRQYXJzaW5nRmxhZ3ModGVtcENvbmZpZykudW51c2VkVG9rZW5zLmxlbmd0aCAqIDEwO1xuXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3ModGVtcENvbmZpZykuc2NvcmUgPSBjdXJyZW50U2NvcmU7XG5cbiAgICAgICAgICAgIGlmICghYmVzdEZvcm1hdElzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID09IG51bGwgfHxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3JlIDwgc2NvcmVUb0JlYXQgfHxcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRGb3JtYXRGb3VuZFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBzY29yZVRvQmVhdCA9IGN1cnJlbnRTY29yZTtcbiAgICAgICAgICAgICAgICAgICAgYmVzdE1vbWVudCA9IHRlbXBDb25maWc7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZEZvcm1hdEZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiZXN0Rm9ybWF0SXNWYWxpZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U2NvcmUgPCBzY29yZVRvQmVhdCkge1xuICAgICAgICAgICAgICAgICAgICBzY29yZVRvQmVhdCA9IGN1cnJlbnRTY29yZTtcbiAgICAgICAgICAgICAgICAgICAgYmVzdE1vbWVudCA9IHRlbXBDb25maWc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZXh0ZW5kKGNvbmZpZywgYmVzdE1vbWVudCB8fCB0ZW1wQ29uZmlnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb25maWdGcm9tT2JqZWN0KGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnLl9kKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaSA9IG5vcm1hbGl6ZU9iamVjdFVuaXRzKGNvbmZpZy5faSksXG4gICAgICAgICAgICBkYXlPckRhdGUgPSBpLmRheSA9PT0gdW5kZWZpbmVkID8gaS5kYXRlIDogaS5kYXk7XG4gICAgICAgIGNvbmZpZy5fYSA9IG1hcChcbiAgICAgICAgICAgIFtpLnllYXIsIGkubW9udGgsIGRheU9yRGF0ZSwgaS5ob3VyLCBpLm1pbnV0ZSwgaS5zZWNvbmQsIGkubWlsbGlzZWNvbmRdLFxuICAgICAgICAgICAgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmogJiYgcGFyc2VJbnQob2JqLCAxMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgY29uZmlnRnJvbUFycmF5KGNvbmZpZyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRnJvbUNvbmZpZyhjb25maWcpIHtcbiAgICAgICAgdmFyIHJlcyA9IG5ldyBNb21lbnQoY2hlY2tPdmVyZmxvdyhwcmVwYXJlQ29uZmlnKGNvbmZpZykpKTtcbiAgICAgICAgaWYgKHJlcy5fbmV4dERheSkge1xuICAgICAgICAgICAgLy8gQWRkaW5nIGlzIHNtYXJ0IGVub3VnaCBhcm91bmQgRFNUXG4gICAgICAgICAgICByZXMuYWRkKDEsICdkJyk7XG4gICAgICAgICAgICByZXMuX25leHREYXkgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByZXBhcmVDb25maWcoY29uZmlnKSB7XG4gICAgICAgIHZhciBpbnB1dCA9IGNvbmZpZy5faSxcbiAgICAgICAgICAgIGZvcm1hdCA9IGNvbmZpZy5fZjtcblxuICAgICAgICBjb25maWcuX2xvY2FsZSA9IGNvbmZpZy5fbG9jYWxlIHx8IGdldExvY2FsZShjb25maWcuX2wpO1xuXG4gICAgICAgIGlmIChpbnB1dCA9PT0gbnVsbCB8fCAoZm9ybWF0ID09PSB1bmRlZmluZWQgJiYgaW5wdXQgPT09ICcnKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoeyBudWxsSW5wdXQ6IHRydWUgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uZmlnLl9pID0gaW5wdXQgPSBjb25maWcuX2xvY2FsZS5wcmVwYXJzZShpbnB1dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNNb21lbnQoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1vbWVudChjaGVja092ZXJmbG93KGlucHV0KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEYXRlKGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gaW5wdXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheShmb3JtYXQpKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kQXJyYXkoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21JbnB1dChjb25maWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc1ZhbGlkKGNvbmZpZykpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21JbnB1dChjb25maWcpIHtcbiAgICAgICAgdmFyIGlucHV0ID0gY29uZmlnLl9pO1xuICAgICAgICBpZiAoaXNVbmRlZmluZWQoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShob29rcy5ub3coKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEYXRlKGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoaW5wdXQudmFsdWVPZigpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nKGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYSA9IG1hcChpbnB1dC5zbGljZSgwKSwgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUludChvYmosIDEwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uZmlnRnJvbUFycmF5KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tT2JqZWN0KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXIoaW5wdXQpKSB7XG4gICAgICAgICAgICAvLyBmcm9tIG1pbGxpc2Vjb25kc1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoaW5wdXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsT3JVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QsIGlzVVRDKSB7XG4gICAgICAgIHZhciBjID0ge307XG5cbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gdHJ1ZSB8fCBmb3JtYXQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBzdHJpY3QgPSBmb3JtYXQ7XG4gICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobG9jYWxlID09PSB0cnVlIHx8IGxvY2FsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHN0cmljdCA9IGxvY2FsZTtcbiAgICAgICAgICAgIGxvY2FsZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIChpc09iamVjdChpbnB1dCkgJiYgaXNPYmplY3RFbXB0eShpbnB1dCkpIHx8XG4gICAgICAgICAgICAoaXNBcnJheShpbnB1dCkgJiYgaW5wdXQubGVuZ3RoID09PSAwKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGlucHV0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8vIG9iamVjdCBjb25zdHJ1Y3Rpb24gbXVzdCBiZSBkb25lIHRoaXMgd2F5LlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMTQyM1xuICAgICAgICBjLl9pc0FNb21lbnRPYmplY3QgPSB0cnVlO1xuICAgICAgICBjLl91c2VVVEMgPSBjLl9pc1VUQyA9IGlzVVRDO1xuICAgICAgICBjLl9sID0gbG9jYWxlO1xuICAgICAgICBjLl9pID0gaW5wdXQ7XG4gICAgICAgIGMuX2YgPSBmb3JtYXQ7XG4gICAgICAgIGMuX3N0cmljdCA9IHN0cmljdDtcblxuICAgICAgICByZXR1cm4gY3JlYXRlRnJvbUNvbmZpZyhjKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVMb2NhbChpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgZmFsc2UpO1xuICAgIH1cblxuICAgIHZhciBwcm90b3R5cGVNaW4gPSBkZXByZWNhdGUoXG4gICAgICAgICAgICAnbW9tZW50KCkubWluIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWF4IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvbWluLW1heC8nLFxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBvdGhlciA9IGNyZWF0ZUxvY2FsLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNWYWxpZCgpICYmIG90aGVyLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXIgPCB0aGlzID8gdGhpcyA6IG90aGVyO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbnZhbGlkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICBwcm90b3R5cGVNYXggPSBkZXByZWNhdGUoXG4gICAgICAgICAgICAnbW9tZW50KCkubWF4IGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWluIGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvbWluLW1heC8nLFxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBvdGhlciA9IGNyZWF0ZUxvY2FsLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNWYWxpZCgpICYmIG90aGVyLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXIgPiB0aGlzID8gdGhpcyA6IG90aGVyO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbnZhbGlkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgLy8gUGljayBhIG1vbWVudCBtIGZyb20gbW9tZW50cyBzbyB0aGF0IG1bZm5dKG90aGVyKSBpcyB0cnVlIGZvciBhbGxcbiAgICAvLyBvdGhlci4gVGhpcyByZWxpZXMgb24gdGhlIGZ1bmN0aW9uIGZuIHRvIGJlIHRyYW5zaXRpdmUuXG4gICAgLy9cbiAgICAvLyBtb21lbnRzIHNob3VsZCBlaXRoZXIgYmUgYW4gYXJyYXkgb2YgbW9tZW50IG9iamVjdHMgb3IgYW4gYXJyYXksIHdob3NlXG4gICAgLy8gZmlyc3QgZWxlbWVudCBpcyBhbiBhcnJheSBvZiBtb21lbnQgb2JqZWN0cy5cbiAgICBmdW5jdGlvbiBwaWNrQnkoZm4sIG1vbWVudHMpIHtcbiAgICAgICAgdmFyIHJlcywgaTtcbiAgICAgICAgaWYgKG1vbWVudHMubGVuZ3RoID09PSAxICYmIGlzQXJyYXkobW9tZW50c1swXSkpIHtcbiAgICAgICAgICAgIG1vbWVudHMgPSBtb21lbnRzWzBdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbW9tZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVMb2NhbCgpO1xuICAgICAgICB9XG4gICAgICAgIHJlcyA9IG1vbWVudHNbMF07XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBtb21lbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBpZiAoIW1vbWVudHNbaV0uaXNWYWxpZCgpIHx8IG1vbWVudHNbaV1bZm5dKHJlcykpIHtcbiAgICAgICAgICAgICAgICByZXMgPSBtb21lbnRzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogVXNlIFtdLnNvcnQgaW5zdGVhZD9cbiAgICBmdW5jdGlvbiBtaW4oKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuXG4gICAgICAgIHJldHVybiBwaWNrQnkoJ2lzQmVmb3JlJywgYXJncyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF4KCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcblxuICAgICAgICByZXR1cm4gcGlja0J5KCdpc0FmdGVyJywgYXJncyk7XG4gICAgfVxuXG4gICAgdmFyIG5vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93ID8gRGF0ZS5ub3coKSA6ICtuZXcgRGF0ZSgpO1xuICAgIH07XG5cbiAgICB2YXIgb3JkZXJpbmcgPSBbXG4gICAgICAgICd5ZWFyJyxcbiAgICAgICAgJ3F1YXJ0ZXInLFxuICAgICAgICAnbW9udGgnLFxuICAgICAgICAnd2VlaycsXG4gICAgICAgICdkYXknLFxuICAgICAgICAnaG91cicsXG4gICAgICAgICdtaW51dGUnLFxuICAgICAgICAnc2Vjb25kJyxcbiAgICAgICAgJ21pbGxpc2Vjb25kJyxcbiAgICBdO1xuXG4gICAgZnVuY3Rpb24gaXNEdXJhdGlvblZhbGlkKG0pIHtcbiAgICAgICAgdmFyIGtleSxcbiAgICAgICAgICAgIHVuaXRIYXNEZWNpbWFsID0gZmFsc2UsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgb3JkZXJMZW4gPSBvcmRlcmluZy5sZW5ndGg7XG4gICAgICAgIGZvciAoa2V5IGluIG0pIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBoYXNPd25Qcm9wKG0sIGtleSkgJiZcbiAgICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgICAgICBpbmRleE9mLmNhbGwob3JkZXJpbmcsIGtleSkgIT09IC0xICYmXG4gICAgICAgICAgICAgICAgICAgIChtW2tleV0gPT0gbnVsbCB8fCAhaXNOYU4obVtrZXldKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgb3JkZXJMZW47ICsraSkge1xuICAgICAgICAgICAgaWYgKG1bb3JkZXJpbmdbaV1dKSB7XG4gICAgICAgICAgICAgICAgaWYgKHVuaXRIYXNEZWNpbWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gb25seSBhbGxvdyBub24taW50ZWdlcnMgZm9yIHNtYWxsZXN0IHVuaXRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlRmxvYXQobVtvcmRlcmluZ1tpXV0pICE9PSB0b0ludChtW29yZGVyaW5nW2ldXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdW5pdEhhc0RlY2ltYWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWQkMSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVmFsaWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW52YWxpZCQxKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oTmFOKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBEdXJhdGlvbihkdXJhdGlvbikge1xuICAgICAgICB2YXIgbm9ybWFsaXplZElucHV0ID0gbm9ybWFsaXplT2JqZWN0VW5pdHMoZHVyYXRpb24pLFxuICAgICAgICAgICAgeWVhcnMgPSBub3JtYWxpemVkSW5wdXQueWVhciB8fCAwLFxuICAgICAgICAgICAgcXVhcnRlcnMgPSBub3JtYWxpemVkSW5wdXQucXVhcnRlciB8fCAwLFxuICAgICAgICAgICAgbW9udGhzID0gbm9ybWFsaXplZElucHV0Lm1vbnRoIHx8IDAsXG4gICAgICAgICAgICB3ZWVrcyA9IG5vcm1hbGl6ZWRJbnB1dC53ZWVrIHx8IG5vcm1hbGl6ZWRJbnB1dC5pc29XZWVrIHx8IDAsXG4gICAgICAgICAgICBkYXlzID0gbm9ybWFsaXplZElucHV0LmRheSB8fCAwLFxuICAgICAgICAgICAgaG91cnMgPSBub3JtYWxpemVkSW5wdXQuaG91ciB8fCAwLFxuICAgICAgICAgICAgbWludXRlcyA9IG5vcm1hbGl6ZWRJbnB1dC5taW51dGUgfHwgMCxcbiAgICAgICAgICAgIHNlY29uZHMgPSBub3JtYWxpemVkSW5wdXQuc2Vjb25kIHx8IDAsXG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgPSBub3JtYWxpemVkSW5wdXQubWlsbGlzZWNvbmQgfHwgMDtcblxuICAgICAgICB0aGlzLl9pc1ZhbGlkID0gaXNEdXJhdGlvblZhbGlkKG5vcm1hbGl6ZWRJbnB1dCk7XG5cbiAgICAgICAgLy8gcmVwcmVzZW50YXRpb24gZm9yIGRhdGVBZGRSZW1vdmVcbiAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzID1cbiAgICAgICAgICAgICttaWxsaXNlY29uZHMgK1xuICAgICAgICAgICAgc2Vjb25kcyAqIDFlMyArIC8vIDEwMDBcbiAgICAgICAgICAgIG1pbnV0ZXMgKiA2ZTQgKyAvLyAxMDAwICogNjBcbiAgICAgICAgICAgIGhvdXJzICogMTAwMCAqIDYwICogNjA7IC8vdXNpbmcgMTAwMCAqIDYwICogNjAgaW5zdGVhZCBvZiAzNmU1IHRvIGF2b2lkIGZsb2F0aW5nIHBvaW50IHJvdW5kaW5nIGVycm9ycyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMjk3OFxuICAgICAgICAvLyBCZWNhdXNlIG9mIGRhdGVBZGRSZW1vdmUgdHJlYXRzIDI0IGhvdXJzIGFzIGRpZmZlcmVudCBmcm9tIGFcbiAgICAgICAgLy8gZGF5IHdoZW4gd29ya2luZyBhcm91bmQgRFNULCB3ZSBuZWVkIHRvIHN0b3JlIHRoZW0gc2VwYXJhdGVseVxuICAgICAgICB0aGlzLl9kYXlzID0gK2RheXMgKyB3ZWVrcyAqIDc7XG4gICAgICAgIC8vIEl0IGlzIGltcG9zc2libGUgdG8gdHJhbnNsYXRlIG1vbnRocyBpbnRvIGRheXMgd2l0aG91dCBrbm93aW5nXG4gICAgICAgIC8vIHdoaWNoIG1vbnRocyB5b3UgYXJlIGFyZSB0YWxraW5nIGFib3V0LCBzbyB3ZSBoYXZlIHRvIHN0b3JlXG4gICAgICAgIC8vIGl0IHNlcGFyYXRlbHkuXG4gICAgICAgIHRoaXMuX21vbnRocyA9ICttb250aHMgKyBxdWFydGVycyAqIDMgKyB5ZWFycyAqIDEyO1xuXG4gICAgICAgIHRoaXMuX2RhdGEgPSB7fTtcblxuICAgICAgICB0aGlzLl9sb2NhbGUgPSBnZXRMb2NhbGUoKTtcblxuICAgICAgICB0aGlzLl9idWJibGUoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0R1cmF0aW9uKG9iaikge1xuICAgICAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgRHVyYXRpb247XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzUm91bmQobnVtYmVyKSB7XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCgtMSAqIG51bWJlcikgKiAtMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjb21wYXJlIHR3byBhcnJheXMsIHJldHVybiB0aGUgbnVtYmVyIG9mIGRpZmZlcmVuY2VzXG4gICAgZnVuY3Rpb24gY29tcGFyZUFycmF5cyhhcnJheTEsIGFycmF5MiwgZG9udENvbnZlcnQpIHtcbiAgICAgICAgdmFyIGxlbiA9IE1hdGgubWluKGFycmF5MS5sZW5ndGgsIGFycmF5Mi5sZW5ndGgpLFxuICAgICAgICAgICAgbGVuZ3RoRGlmZiA9IE1hdGguYWJzKGFycmF5MS5sZW5ndGggLSBhcnJheTIubGVuZ3RoKSxcbiAgICAgICAgICAgIGRpZmZzID0gMCxcbiAgICAgICAgICAgIGk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChkb250Q29udmVydCAmJiBhcnJheTFbaV0gIT09IGFycmF5MltpXSkgfHxcbiAgICAgICAgICAgICAgICAoIWRvbnRDb252ZXJ0ICYmIHRvSW50KGFycmF5MVtpXSkgIT09IHRvSW50KGFycmF5MltpXSkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBkaWZmcysrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkaWZmcyArIGxlbmd0aERpZmY7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgZnVuY3Rpb24gb2Zmc2V0KHRva2VuLCBzZXBhcmF0b3IpIHtcbiAgICAgICAgYWRkRm9ybWF0VG9rZW4odG9rZW4sIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLnV0Y09mZnNldCgpLFxuICAgICAgICAgICAgICAgIHNpZ24gPSAnKyc7XG4gICAgICAgICAgICBpZiAob2Zmc2V0IDwgMCkge1xuICAgICAgICAgICAgICAgIG9mZnNldCA9IC1vZmZzZXQ7XG4gICAgICAgICAgICAgICAgc2lnbiA9ICctJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgc2lnbiArXG4gICAgICAgICAgICAgICAgemVyb0ZpbGwofn4ob2Zmc2V0IC8gNjApLCAyKSArXG4gICAgICAgICAgICAgICAgc2VwYXJhdG9yICtcbiAgICAgICAgICAgICAgICB6ZXJvRmlsbCh+fm9mZnNldCAlIDYwLCAyKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb2Zmc2V0KCdaJywgJzonKTtcbiAgICBvZmZzZXQoJ1paJywgJycpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignWicsIG1hdGNoU2hvcnRPZmZzZXQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1paJywgbWF0Y2hTaG9ydE9mZnNldCk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ1onLCAnWlonXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fdXNlVVRDID0gdHJ1ZTtcbiAgICAgICAgY29uZmlnLl90em0gPSBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoU2hvcnRPZmZzZXQsIGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIHRpbWV6b25lIGNodW5rZXJcbiAgICAvLyAnKzEwOjAwJyA+IFsnMTAnLCAgJzAwJ11cbiAgICAvLyAnLTE1MzAnICA+IFsnLTE1JywgJzMwJ11cbiAgICB2YXIgY2h1bmtPZmZzZXQgPSAvKFtcXCtcXC1dfFxcZFxcZCkvZ2k7XG5cbiAgICBmdW5jdGlvbiBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoZXIsIHN0cmluZykge1xuICAgICAgICB2YXIgbWF0Y2hlcyA9IChzdHJpbmcgfHwgJycpLm1hdGNoKG1hdGNoZXIpLFxuICAgICAgICAgICAgY2h1bmssXG4gICAgICAgICAgICBwYXJ0cyxcbiAgICAgICAgICAgIG1pbnV0ZXM7XG5cbiAgICAgICAgaWYgKG1hdGNoZXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY2h1bmsgPSBtYXRjaGVzW21hdGNoZXMubGVuZ3RoIC0gMV0gfHwgW107XG4gICAgICAgIHBhcnRzID0gKGNodW5rICsgJycpLm1hdGNoKGNodW5rT2Zmc2V0KSB8fCBbJy0nLCAwLCAwXTtcbiAgICAgICAgbWludXRlcyA9ICsocGFydHNbMV0gKiA2MCkgKyB0b0ludChwYXJ0c1syXSk7XG5cbiAgICAgICAgcmV0dXJuIG1pbnV0ZXMgPT09IDAgPyAwIDogcGFydHNbMF0gPT09ICcrJyA/IG1pbnV0ZXMgOiAtbWludXRlcztcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYSBtb21lbnQgZnJvbSBpbnB1dCwgdGhhdCBpcyBsb2NhbC91dGMvem9uZSBlcXVpdmFsZW50IHRvIG1vZGVsLlxuICAgIGZ1bmN0aW9uIGNsb25lV2l0aE9mZnNldChpbnB1dCwgbW9kZWwpIHtcbiAgICAgICAgdmFyIHJlcywgZGlmZjtcbiAgICAgICAgaWYgKG1vZGVsLl9pc1VUQykge1xuICAgICAgICAgICAgcmVzID0gbW9kZWwuY2xvbmUoKTtcbiAgICAgICAgICAgIGRpZmYgPVxuICAgICAgICAgICAgICAgIChpc01vbWVudChpbnB1dCkgfHwgaXNEYXRlKGlucHV0KVxuICAgICAgICAgICAgICAgICAgICA/IGlucHV0LnZhbHVlT2YoKVxuICAgICAgICAgICAgICAgICAgICA6IGNyZWF0ZUxvY2FsKGlucHV0KS52YWx1ZU9mKCkpIC0gcmVzLnZhbHVlT2YoKTtcbiAgICAgICAgICAgIC8vIFVzZSBsb3ctbGV2ZWwgYXBpLCBiZWNhdXNlIHRoaXMgZm4gaXMgbG93LWxldmVsIGFwaS5cbiAgICAgICAgICAgIHJlcy5fZC5zZXRUaW1lKHJlcy5fZC52YWx1ZU9mKCkgKyBkaWZmKTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldChyZXMsIGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwoaW5wdXQpLmxvY2FsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXREYXRlT2Zmc2V0KG0pIHtcbiAgICAgICAgLy8gT24gRmlyZWZveC4yNCBEYXRlI2dldFRpbWV6b25lT2Zmc2V0IHJldHVybnMgYSBmbG9hdGluZyBwb2ludC5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvcHVsbC8xODcxXG4gICAgICAgIHJldHVybiAtTWF0aC5yb3VuZChtLl9kLmdldFRpbWV6b25lT2Zmc2V0KCkpO1xuICAgIH1cblxuICAgIC8vIEhPT0tTXG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIGEgbW9tZW50IGlzIG11dGF0ZWQuXG4gICAgLy8gSXQgaXMgaW50ZW5kZWQgdG8ga2VlcCB0aGUgb2Zmc2V0IGluIHN5bmMgd2l0aCB0aGUgdGltZXpvbmUuXG4gICAgaG9va3MudXBkYXRlT2Zmc2V0ID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICAvLyBrZWVwTG9jYWxUaW1lID0gdHJ1ZSBtZWFucyBvbmx5IGNoYW5nZSB0aGUgdGltZXpvbmUsIHdpdGhvdXRcbiAgICAvLyBhZmZlY3RpbmcgdGhlIGxvY2FsIGhvdXIuIFNvIDU6MzE6MjYgKzAzMDAgLS1bdXRjT2Zmc2V0KDIsIHRydWUpXS0tPlxuICAgIC8vIDU6MzE6MjYgKzAyMDAgSXQgaXMgcG9zc2libGUgdGhhdCA1OjMxOjI2IGRvZXNuJ3QgZXhpc3Qgd2l0aCBvZmZzZXRcbiAgICAvLyArMDIwMCwgc28gd2UgYWRqdXN0IHRoZSB0aW1lIGFzIG5lZWRlZCwgdG8gYmUgdmFsaWQuXG4gICAgLy9cbiAgICAvLyBLZWVwaW5nIHRoZSB0aW1lIGFjdHVhbGx5IGFkZHMvc3VidHJhY3RzIChvbmUgaG91cilcbiAgICAvLyBmcm9tIHRoZSBhY3R1YWwgcmVwcmVzZW50ZWQgdGltZS4gVGhhdCBpcyB3aHkgd2UgY2FsbCB1cGRhdGVPZmZzZXRcbiAgICAvLyBhIHNlY29uZCB0aW1lLiBJbiBjYXNlIGl0IHdhbnRzIHVzIHRvIGNoYW5nZSB0aGUgb2Zmc2V0IGFnYWluXG4gICAgLy8gX2NoYW5nZUluUHJvZ3Jlc3MgPT0gdHJ1ZSBjYXNlLCB0aGVuIHdlIGhhdmUgdG8gYWRqdXN0LCBiZWNhdXNlXG4gICAgLy8gdGhlcmUgaXMgbm8gc3VjaCB0aW1lIGluIHRoZSBnaXZlbiB0aW1lem9uZS5cbiAgICBmdW5jdGlvbiBnZXRTZXRPZmZzZXQoaW5wdXQsIGtlZXBMb2NhbFRpbWUsIGtlZXBNaW51dGVzKSB7XG4gICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLl9vZmZzZXQgfHwgMCxcbiAgICAgICAgICAgIGxvY2FsQWRqdXN0O1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoU2hvcnRPZmZzZXQsIGlucHV0KTtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChNYXRoLmFicyhpbnB1dCkgPCAxNiAmJiAha2VlcE1pbnV0ZXMpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IGlucHV0ICogNjA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzVVRDICYmIGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgICAgICAgICBsb2NhbEFkanVzdCA9IGdldERhdGVPZmZzZXQodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9vZmZzZXQgPSBpbnB1dDtcbiAgICAgICAgICAgIHRoaXMuX2lzVVRDID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChsb2NhbEFkanVzdCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGQobG9jYWxBZGp1c3QsICdtJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob2Zmc2V0ICE9PSBpbnB1dCkge1xuICAgICAgICAgICAgICAgIGlmICgha2VlcExvY2FsVGltZSB8fCB0aGlzLl9jaGFuZ2VJblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZFN1YnRyYWN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUR1cmF0aW9uKGlucHV0IC0gb2Zmc2V0LCAnbScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VJblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyA/IG9mZnNldCA6IGdldERhdGVPZmZzZXQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRab25lKGlucHV0LCBrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gLWlucHV0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldChpbnB1dCwga2VlcExvY2FsVGltZSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIC10aGlzLnV0Y09mZnNldCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0T2Zmc2V0VG9VVEMoa2VlcExvY2FsVGltZSkge1xuICAgICAgICByZXR1cm4gdGhpcy51dGNPZmZzZXQoMCwga2VlcExvY2FsVGltZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0T2Zmc2V0VG9Mb2NhbChrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIGlmICh0aGlzLl9pc1VUQykge1xuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoMCwga2VlcExvY2FsVGltZSk7XG4gICAgICAgICAgICB0aGlzLl9pc1VUQyA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoa2VlcExvY2FsVGltZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3VidHJhY3QoZ2V0RGF0ZU9mZnNldCh0aGlzKSwgJ20nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb1BhcnNlZE9mZnNldCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3R6bSAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCh0aGlzLl90em0sIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5faSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhciB0Wm9uZSA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hPZmZzZXQsIHRoaXMuX2kpO1xuICAgICAgICAgICAgaWYgKHRab25lICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnV0Y09mZnNldCh0Wm9uZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KDAsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhc0FsaWduZWRIb3VyT2Zmc2V0KGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpbnB1dCA9IGlucHV0ID8gY3JlYXRlTG9jYWwoaW5wdXQpLnV0Y09mZnNldCgpIDogMDtcblxuICAgICAgICByZXR1cm4gKHRoaXMudXRjT2Zmc2V0KCkgLSBpbnB1dCkgJSA2MCA9PT0gMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0RheWxpZ2h0U2F2aW5nVGltZSgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KCkgPiB0aGlzLmNsb25lKCkubW9udGgoMCkudXRjT2Zmc2V0KCkgfHxcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KCkgPiB0aGlzLmNsb25lKCkubW9udGgoNSkudXRjT2Zmc2V0KClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0RheWxpZ2h0U2F2aW5nVGltZVNoaWZ0ZWQoKSB7XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQodGhpcy5faXNEU1RTaGlmdGVkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzRFNUU2hpZnRlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjID0ge30sXG4gICAgICAgICAgICBvdGhlcjtcblxuICAgICAgICBjb3B5Q29uZmlnKGMsIHRoaXMpO1xuICAgICAgICBjID0gcHJlcGFyZUNvbmZpZyhjKTtcblxuICAgICAgICBpZiAoYy5fYSkge1xuICAgICAgICAgICAgb3RoZXIgPSBjLl9pc1VUQyA/IGNyZWF0ZVVUQyhjLl9hKSA6IGNyZWF0ZUxvY2FsKGMuX2EpO1xuICAgICAgICAgICAgdGhpcy5faXNEU1RTaGlmdGVkID1cbiAgICAgICAgICAgICAgICB0aGlzLmlzVmFsaWQoKSAmJiBjb21wYXJlQXJyYXlzKGMuX2EsIG90aGVyLnRvQXJyYXkoKSkgPiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faXNEU1RTaGlmdGVkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTG9jYWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/ICF0aGlzLl9pc1VUQyA6IGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVXRjT2Zmc2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLl9pc1VUQyA6IGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVXRjKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLl9pc1VUQyAmJiB0aGlzLl9vZmZzZXQgPT09IDAgOiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBBU1AuTkVUIGpzb24gZGF0ZSBmb3JtYXQgcmVnZXhcbiAgICB2YXIgYXNwTmV0UmVnZXggPSAvXigtfFxcKyk/KD86KFxcZCopWy4gXSk/KFxcZCspOihcXGQrKSg/OjooXFxkKykoXFwuXFxkKik/KT8kLyxcbiAgICAgICAgLy8gZnJvbSBodHRwOi8vZG9jcy5jbG9zdXJlLWxpYnJhcnkuZ29vZ2xlY29kZS5jb20vZ2l0L2Nsb3N1cmVfZ29vZ19kYXRlX2RhdGUuanMuc291cmNlLmh0bWxcbiAgICAgICAgLy8gc29tZXdoYXQgbW9yZSBpbiBsaW5lIHdpdGggNC40LjMuMiAyMDA0IHNwZWMsIGJ1dCBhbGxvd3MgZGVjaW1hbCBhbnl3aGVyZVxuICAgICAgICAvLyBhbmQgZnVydGhlciBtb2RpZmllZCB0byBhbGxvdyBmb3Igc3RyaW5ncyBjb250YWluaW5nIGJvdGggd2VlayBhbmQgZGF5XG4gICAgICAgIGlzb1JlZ2V4ID1cbiAgICAgICAgICAgIC9eKC18XFwrKT9QKD86KFstK10/WzAtOSwuXSopWSk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopVyk/KD86KFstK10/WzAtOSwuXSopRCk/KD86VCg/OihbLStdP1swLTksLl0qKUgpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVMpPyk/JC87XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEdXJhdGlvbihpbnB1dCwga2V5KSB7XG4gICAgICAgIHZhciBkdXJhdGlvbiA9IGlucHV0LFxuICAgICAgICAgICAgLy8gbWF0Y2hpbmcgYWdhaW5zdCByZWdleHAgaXMgZXhwZW5zaXZlLCBkbyBpdCBvbiBkZW1hbmRcbiAgICAgICAgICAgIG1hdGNoID0gbnVsbCxcbiAgICAgICAgICAgIHNpZ24sXG4gICAgICAgICAgICByZXQsXG4gICAgICAgICAgICBkaWZmUmVzO1xuXG4gICAgICAgIGlmIChpc0R1cmF0aW9uKGlucHV0KSkge1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgbXM6IGlucHV0Ll9taWxsaXNlY29uZHMsXG4gICAgICAgICAgICAgICAgZDogaW5wdXQuX2RheXMsXG4gICAgICAgICAgICAgICAgTTogaW5wdXQuX21vbnRocyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXIoaW5wdXQpIHx8ICFpc05hTigraW5wdXQpKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uW2tleV0gPSAraW5wdXQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uLm1pbGxpc2Vjb25kcyA9ICtpbnB1dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICgobWF0Y2ggPSBhc3BOZXRSZWdleC5leGVjKGlucHV0KSkpIHtcbiAgICAgICAgICAgIHNpZ24gPSBtYXRjaFsxXSA9PT0gJy0nID8gLTEgOiAxO1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgeTogMCxcbiAgICAgICAgICAgICAgICBkOiB0b0ludChtYXRjaFtEQVRFXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIGg6IHRvSW50KG1hdGNoW0hPVVJdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgbTogdG9JbnQobWF0Y2hbTUlOVVRFXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIHM6IHRvSW50KG1hdGNoW1NFQ09ORF0pICogc2lnbixcbiAgICAgICAgICAgICAgICBtczogdG9JbnQoYWJzUm91bmQobWF0Y2hbTUlMTElTRUNPTkRdICogMTAwMCkpICogc2lnbiwgLy8gdGhlIG1pbGxpc2Vjb25kIGRlY2ltYWwgcG9pbnQgaXMgaW5jbHVkZWQgaW4gdGhlIG1hdGNoXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKChtYXRjaCA9IGlzb1JlZ2V4LmV4ZWMoaW5wdXQpKSkge1xuICAgICAgICAgICAgc2lnbiA9IG1hdGNoWzFdID09PSAnLScgPyAtMSA6IDE7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICB5OiBwYXJzZUlzbyhtYXRjaFsyXSwgc2lnbiksXG4gICAgICAgICAgICAgICAgTTogcGFyc2VJc28obWF0Y2hbM10sIHNpZ24pLFxuICAgICAgICAgICAgICAgIHc6IHBhcnNlSXNvKG1hdGNoWzRdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBkOiBwYXJzZUlzbyhtYXRjaFs1XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgaDogcGFyc2VJc28obWF0Y2hbNl0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIG06IHBhcnNlSXNvKG1hdGNoWzddLCBzaWduKSxcbiAgICAgICAgICAgICAgICBzOiBwYXJzZUlzbyhtYXRjaFs4XSwgc2lnbiksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGR1cmF0aW9uID09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIGNoZWNrcyBmb3IgbnVsbCBvciB1bmRlZmluZWRcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge307XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgZHVyYXRpb24gPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAoJ2Zyb20nIGluIGR1cmF0aW9uIHx8ICd0bycgaW4gZHVyYXRpb24pXG4gICAgICAgICkge1xuICAgICAgICAgICAgZGlmZlJlcyA9IG1vbWVudHNEaWZmZXJlbmNlKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUxvY2FsKGR1cmF0aW9uLmZyb20pLFxuICAgICAgICAgICAgICAgIGNyZWF0ZUxvY2FsKGR1cmF0aW9uLnRvKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgICAgIGR1cmF0aW9uLm1zID0gZGlmZlJlcy5taWxsaXNlY29uZHM7XG4gICAgICAgICAgICBkdXJhdGlvbi5NID0gZGlmZlJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXQgPSBuZXcgRHVyYXRpb24oZHVyYXRpb24pO1xuXG4gICAgICAgIGlmIChpc0R1cmF0aW9uKGlucHV0KSAmJiBoYXNPd25Qcm9wKGlucHV0LCAnX2xvY2FsZScpKSB7XG4gICAgICAgICAgICByZXQuX2xvY2FsZSA9IGlucHV0Ll9sb2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNEdXJhdGlvbihpbnB1dCkgJiYgaGFzT3duUHJvcChpbnB1dCwgJ19pc1ZhbGlkJykpIHtcbiAgICAgICAgICAgIHJldC5faXNWYWxpZCA9IGlucHV0Ll9pc1ZhbGlkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG5cbiAgICBjcmVhdGVEdXJhdGlvbi5mbiA9IER1cmF0aW9uLnByb3RvdHlwZTtcbiAgICBjcmVhdGVEdXJhdGlvbi5pbnZhbGlkID0gY3JlYXRlSW52YWxpZCQxO1xuXG4gICAgZnVuY3Rpb24gcGFyc2VJc28oaW5wLCBzaWduKSB7XG4gICAgICAgIC8vIFdlJ2Qgbm9ybWFsbHkgdXNlIH5+aW5wIGZvciB0aGlzLCBidXQgdW5mb3J0dW5hdGVseSBpdCBhbHNvXG4gICAgICAgIC8vIGNvbnZlcnRzIGZsb2F0cyB0byBpbnRzLlxuICAgICAgICAvLyBpbnAgbWF5IGJlIHVuZGVmaW5lZCwgc28gY2FyZWZ1bCBjYWxsaW5nIHJlcGxhY2Ugb24gaXQuXG4gICAgICAgIHZhciByZXMgPSBpbnAgJiYgcGFyc2VGbG9hdChpbnAucmVwbGFjZSgnLCcsICcuJykpO1xuICAgICAgICAvLyBhcHBseSBzaWduIHdoaWxlIHdlJ3JlIGF0IGl0XG4gICAgICAgIHJldHVybiAoaXNOYU4ocmVzKSA/IDAgOiByZXMpICogc2lnbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlKGJhc2UsIG90aGVyKSB7XG4gICAgICAgIHZhciByZXMgPSB7fTtcblxuICAgICAgICByZXMubW9udGhzID1cbiAgICAgICAgICAgIG90aGVyLm1vbnRoKCkgLSBiYXNlLm1vbnRoKCkgKyAob3RoZXIueWVhcigpIC0gYmFzZS55ZWFyKCkpICogMTI7XG4gICAgICAgIGlmIChiYXNlLmNsb25lKCkuYWRkKHJlcy5tb250aHMsICdNJykuaXNBZnRlcihvdGhlcikpIHtcbiAgICAgICAgICAgIC0tcmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcy5taWxsaXNlY29uZHMgPSArb3RoZXIgLSArYmFzZS5jbG9uZSgpLmFkZChyZXMubW9udGhzLCAnTScpO1xuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlcztcbiAgICAgICAgaWYgKCEoYmFzZS5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgbWlsbGlzZWNvbmRzOiAwLCBtb250aHM6IDAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIG90aGVyID0gY2xvbmVXaXRoT2Zmc2V0KG90aGVyLCBiYXNlKTtcbiAgICAgICAgaWYgKGJhc2UuaXNCZWZvcmUob3RoZXIpKSB7XG4gICAgICAgICAgICByZXMgPSBwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlKGJhc2UsIG90aGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcyA9IHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2Uob3RoZXIsIGJhc2UpO1xuICAgICAgICAgICAgcmVzLm1pbGxpc2Vjb25kcyA9IC1yZXMubWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgcmVzLm1vbnRocyA9IC1yZXMubW9udGhzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvLyBUT0RPOiByZW1vdmUgJ25hbWUnIGFyZyBhZnRlciBkZXByZWNhdGlvbiBpcyByZW1vdmVkXG4gICAgZnVuY3Rpb24gY3JlYXRlQWRkZXIoZGlyZWN0aW9uLCBuYW1lKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHZhciBkdXIsIHRtcDtcbiAgICAgICAgICAgIC8vaW52ZXJ0IHRoZSBhcmd1bWVudHMsIGJ1dCBjb21wbGFpbiBhYm91dCBpdFxuICAgICAgICAgICAgaWYgKHBlcmlvZCAhPT0gbnVsbCAmJiAhaXNOYU4oK3BlcmlvZCkpIHtcbiAgICAgICAgICAgICAgICBkZXByZWNhdGVTaW1wbGUoXG4gICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICdtb21lbnQoKS4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJyhwZXJpb2QsIG51bWJlcikgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBtb21lbnQoKS4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJyhudW1iZXIsIHBlcmlvZCkuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1NlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2FkZC1pbnZlcnRlZC1wYXJhbS8gZm9yIG1vcmUgaW5mby4nXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0bXAgPSB2YWw7XG4gICAgICAgICAgICAgICAgdmFsID0gcGVyaW9kO1xuICAgICAgICAgICAgICAgIHBlcmlvZCA9IHRtcDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZHVyID0gY3JlYXRlRHVyYXRpb24odmFsLCBwZXJpb2QpO1xuICAgICAgICAgICAgYWRkU3VidHJhY3QodGhpcywgZHVyLCBkaXJlY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkU3VidHJhY3QobW9tLCBkdXJhdGlvbiwgaXNBZGRpbmcsIHVwZGF0ZU9mZnNldCkge1xuICAgICAgICB2YXIgbWlsbGlzZWNvbmRzID0gZHVyYXRpb24uX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGRheXMgPSBhYnNSb3VuZChkdXJhdGlvbi5fZGF5cyksXG4gICAgICAgICAgICBtb250aHMgPSBhYnNSb3VuZChkdXJhdGlvbi5fbW9udGhzKTtcblxuICAgICAgICBpZiAoIW1vbS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIC8vIE5vIG9wXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB1cGRhdGVPZmZzZXQgPSB1cGRhdGVPZmZzZXQgPT0gbnVsbCA/IHRydWUgOiB1cGRhdGVPZmZzZXQ7XG5cbiAgICAgICAgaWYgKG1vbnRocykge1xuICAgICAgICAgICAgc2V0TW9udGgobW9tLCBnZXQobW9tLCAnTW9udGgnKSArIG1vbnRocyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF5cykge1xuICAgICAgICAgICAgc2V0JDEobW9tLCAnRGF0ZScsIGdldChtb20sICdEYXRlJykgKyBkYXlzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtaWxsaXNlY29uZHMpIHtcbiAgICAgICAgICAgIG1vbS5fZC5zZXRUaW1lKG1vbS5fZC52YWx1ZU9mKCkgKyBtaWxsaXNlY29uZHMgKiBpc0FkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVwZGF0ZU9mZnNldCkge1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KG1vbSwgZGF5cyB8fCBtb250aHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGFkZCA9IGNyZWF0ZUFkZGVyKDEsICdhZGQnKSxcbiAgICAgICAgc3VidHJhY3QgPSBjcmVhdGVBZGRlcigtMSwgJ3N1YnRyYWN0Jyk7XG5cbiAgICBmdW5jdGlvbiBpc1N0cmluZyhpbnB1dCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyB8fCBpbnB1dCBpbnN0YW5jZW9mIFN0cmluZztcbiAgICB9XG5cbiAgICAvLyB0eXBlIE1vbWVudElucHV0ID0gTW9tZW50IHwgRGF0ZSB8IHN0cmluZyB8IG51bWJlciB8IChudW1iZXIgfCBzdHJpbmcpW10gfCBNb21lbnRJbnB1dE9iamVjdCB8IHZvaWQ7IC8vIG51bGwgfCB1bmRlZmluZWRcbiAgICBmdW5jdGlvbiBpc01vbWVudElucHV0KGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpc01vbWVudChpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzRGF0ZShpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzU3RyaW5nKGlucHV0KSB8fFxuICAgICAgICAgICAgaXNOdW1iZXIoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc051bWJlck9yU3RyaW5nQXJyYXkoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc01vbWVudElucHV0T2JqZWN0KGlucHV0KSB8fFxuICAgICAgICAgICAgaW5wdXQgPT09IG51bGwgfHxcbiAgICAgICAgICAgIGlucHV0ID09PSB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc01vbWVudElucHV0T2JqZWN0KGlucHV0KSB7XG4gICAgICAgIHZhciBvYmplY3RUZXN0ID0gaXNPYmplY3QoaW5wdXQpICYmICFpc09iamVjdEVtcHR5KGlucHV0KSxcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICAgICAgICAneWVhcnMnLFxuICAgICAgICAgICAgICAgICd5ZWFyJyxcbiAgICAgICAgICAgICAgICAneScsXG4gICAgICAgICAgICAgICAgJ21vbnRocycsXG4gICAgICAgICAgICAgICAgJ21vbnRoJyxcbiAgICAgICAgICAgICAgICAnTScsXG4gICAgICAgICAgICAgICAgJ2RheXMnLFxuICAgICAgICAgICAgICAgICdkYXknLFxuICAgICAgICAgICAgICAgICdkJyxcbiAgICAgICAgICAgICAgICAnZGF0ZXMnLFxuICAgICAgICAgICAgICAgICdkYXRlJyxcbiAgICAgICAgICAgICAgICAnRCcsXG4gICAgICAgICAgICAgICAgJ2hvdXJzJyxcbiAgICAgICAgICAgICAgICAnaG91cicsXG4gICAgICAgICAgICAgICAgJ2gnLFxuICAgICAgICAgICAgICAgICdtaW51dGVzJyxcbiAgICAgICAgICAgICAgICAnbWludXRlJyxcbiAgICAgICAgICAgICAgICAnbScsXG4gICAgICAgICAgICAgICAgJ3NlY29uZHMnLFxuICAgICAgICAgICAgICAgICdzZWNvbmQnLFxuICAgICAgICAgICAgICAgICdzJyxcbiAgICAgICAgICAgICAgICAnbWlsbGlzZWNvbmRzJyxcbiAgICAgICAgICAgICAgICAnbWlsbGlzZWNvbmQnLFxuICAgICAgICAgICAgICAgICdtcycsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIHByb3BlcnR5LFxuICAgICAgICAgICAgcHJvcGVydHlMZW4gPSBwcm9wZXJ0aWVzLmxlbmd0aDtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJvcGVydHlMZW47IGkgKz0gMSkge1xuICAgICAgICAgICAgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldO1xuICAgICAgICAgICAgcHJvcGVydHlUZXN0ID0gcHJvcGVydHlUZXN0IHx8IGhhc093blByb3AoaW5wdXQsIHByb3BlcnR5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvYmplY3RUZXN0ICYmIHByb3BlcnR5VGVzdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc051bWJlck9yU3RyaW5nQXJyYXkoaW5wdXQpIHtcbiAgICAgICAgdmFyIGFycmF5VGVzdCA9IGlzQXJyYXkoaW5wdXQpLFxuICAgICAgICAgICAgZGF0YVR5cGVUZXN0ID0gZmFsc2U7XG4gICAgICAgIGlmIChhcnJheVRlc3QpIHtcbiAgICAgICAgICAgIGRhdGFUeXBlVGVzdCA9XG4gICAgICAgICAgICAgICAgaW5wdXQuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhaXNOdW1iZXIoaXRlbSkgJiYgaXNTdHJpbmcoaW5wdXQpO1xuICAgICAgICAgICAgICAgIH0pLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJyYXlUZXN0ICYmIGRhdGFUeXBlVGVzdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0NhbGVuZGFyU3BlYyhpbnB1dCkge1xuICAgICAgICB2YXIgb2JqZWN0VGVzdCA9IGlzT2JqZWN0KGlucHV0KSAmJiAhaXNPYmplY3RFbXB0eShpbnB1dCksXG4gICAgICAgICAgICBwcm9wZXJ0eVRlc3QgPSBmYWxzZSxcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSBbXG4gICAgICAgICAgICAgICAgJ3NhbWVEYXknLFxuICAgICAgICAgICAgICAgICduZXh0RGF5JyxcbiAgICAgICAgICAgICAgICAnbGFzdERheScsXG4gICAgICAgICAgICAgICAgJ25leHRXZWVrJyxcbiAgICAgICAgICAgICAgICAnbGFzdFdlZWsnLFxuICAgICAgICAgICAgICAgICdzYW1lRWxzZScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIHByb3BlcnR5O1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICBwcm9wZXJ0eVRlc3QgPSBwcm9wZXJ0eVRlc3QgfHwgaGFzT3duUHJvcChpbnB1dCwgcHJvcGVydHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9iamVjdFRlc3QgJiYgcHJvcGVydHlUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldENhbGVuZGFyRm9ybWF0KG15TW9tZW50LCBub3cpIHtcbiAgICAgICAgdmFyIGRpZmYgPSBteU1vbWVudC5kaWZmKG5vdywgJ2RheXMnLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIGRpZmYgPCAtNlxuICAgICAgICAgICAgPyAnc2FtZUVsc2UnXG4gICAgICAgICAgICA6IGRpZmYgPCAtMVxuICAgICAgICAgICAgICA/ICdsYXN0V2VlaydcbiAgICAgICAgICAgICAgOiBkaWZmIDwgMFxuICAgICAgICAgICAgICAgID8gJ2xhc3REYXknXG4gICAgICAgICAgICAgICAgOiBkaWZmIDwgMVxuICAgICAgICAgICAgICAgICAgPyAnc2FtZURheSdcbiAgICAgICAgICAgICAgICAgIDogZGlmZiA8IDJcbiAgICAgICAgICAgICAgICAgICAgPyAnbmV4dERheSdcbiAgICAgICAgICAgICAgICAgICAgOiBkaWZmIDwgN1xuICAgICAgICAgICAgICAgICAgICAgID8gJ25leHRXZWVrJ1xuICAgICAgICAgICAgICAgICAgICAgIDogJ3NhbWVFbHNlJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYWxlbmRhciQxKHRpbWUsIGZvcm1hdHMpIHtcbiAgICAgICAgLy8gU3VwcG9ydCBmb3Igc2luZ2xlIHBhcmFtZXRlciwgZm9ybWF0cyBvbmx5IG92ZXJsb2FkIHRvIHRoZSBjYWxlbmRhciBmdW5jdGlvblxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgaWYgKCFhcmd1bWVudHNbMF0pIHtcbiAgICAgICAgICAgICAgICB0aW1lID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGZvcm1hdHMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzTW9tZW50SW5wdXQoYXJndW1lbnRzWzBdKSkge1xuICAgICAgICAgICAgICAgIHRpbWUgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNDYWxlbmRhclNwZWMoYXJndW1lbnRzWzBdKSkge1xuICAgICAgICAgICAgICAgIGZvcm1hdHMgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgdGltZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBXZSB3YW50IHRvIGNvbXBhcmUgdGhlIHN0YXJ0IG9mIHRvZGF5LCB2cyB0aGlzLlxuICAgICAgICAvLyBHZXR0aW5nIHN0YXJ0LW9mLXRvZGF5IGRlcGVuZHMgb24gd2hldGhlciB3ZSdyZSBsb2NhbC91dGMvb2Zmc2V0IG9yIG5vdC5cbiAgICAgICAgdmFyIG5vdyA9IHRpbWUgfHwgY3JlYXRlTG9jYWwoKSxcbiAgICAgICAgICAgIHNvZCA9IGNsb25lV2l0aE9mZnNldChub3csIHRoaXMpLnN0YXJ0T2YoJ2RheScpLFxuICAgICAgICAgICAgZm9ybWF0ID0gaG9va3MuY2FsZW5kYXJGb3JtYXQodGhpcywgc29kKSB8fCAnc2FtZUVsc2UnLFxuICAgICAgICAgICAgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICBmb3JtYXRzICYmXG4gICAgICAgICAgICAgICAgKGlzRnVuY3Rpb24oZm9ybWF0c1tmb3JtYXRdKVxuICAgICAgICAgICAgICAgICAgICA/IGZvcm1hdHNbZm9ybWF0XS5jYWxsKHRoaXMsIG5vdylcbiAgICAgICAgICAgICAgICAgICAgOiBmb3JtYXRzW2Zvcm1hdF0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdChcbiAgICAgICAgICAgIG91dHB1dCB8fCB0aGlzLmxvY2FsZURhdGEoKS5jYWxlbmRhcihmb3JtYXQsIHRoaXMsIGNyZWF0ZUxvY2FsKG5vdykpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xvbmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgTW9tZW50KHRoaXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQWZ0ZXIoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHZhciBsb2NhbElucHV0ID0gaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBjcmVhdGVMb2NhbChpbnB1dCk7XG4gICAgICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsSW5wdXQuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpIHx8ICdtaWxsaXNlY29uZCc7XG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21pbGxpc2Vjb25kJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpID4gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxJbnB1dC52YWx1ZU9mKCkgPCB0aGlzLmNsb25lKCkuc3RhcnRPZih1bml0cykudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNCZWZvcmUoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHZhciBsb2NhbElucHV0ID0gaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBjcmVhdGVMb2NhbChpbnB1dCk7XG4gICAgICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsSW5wdXQuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpIHx8ICdtaWxsaXNlY29uZCc7XG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21pbGxpc2Vjb25kJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpIDwgbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmVuZE9mKHVuaXRzKS52YWx1ZU9mKCkgPCBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQmV0d2Vlbihmcm9tLCB0bywgdW5pdHMsIGluY2x1c2l2aXR5KSB7XG4gICAgICAgIHZhciBsb2NhbEZyb20gPSBpc01vbWVudChmcm9tKSA/IGZyb20gOiBjcmVhdGVMb2NhbChmcm9tKSxcbiAgICAgICAgICAgIGxvY2FsVG8gPSBpc01vbWVudCh0bykgPyB0byA6IGNyZWF0ZUxvY2FsKHRvKTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxGcm9tLmlzVmFsaWQoKSAmJiBsb2NhbFRvLmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpbmNsdXNpdml0eSA9IGluY2x1c2l2aXR5IHx8ICcoKSc7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoaW5jbHVzaXZpdHlbMF0gPT09ICcoJ1xuICAgICAgICAgICAgICAgID8gdGhpcy5pc0FmdGVyKGxvY2FsRnJvbSwgdW5pdHMpXG4gICAgICAgICAgICAgICAgOiAhdGhpcy5pc0JlZm9yZShsb2NhbEZyb20sIHVuaXRzKSkgJiZcbiAgICAgICAgICAgIChpbmNsdXNpdml0eVsxXSA9PT0gJyknXG4gICAgICAgICAgICAgICAgPyB0aGlzLmlzQmVmb3JlKGxvY2FsVG8sIHVuaXRzKVxuICAgICAgICAgICAgICAgIDogIXRoaXMuaXNBZnRlcihsb2NhbFRvLCB1bml0cykpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNTYW1lKGlucHV0LCB1bml0cykge1xuICAgICAgICB2YXIgbG9jYWxJbnB1dCA9IGlzTW9tZW50KGlucHV0KSA/IGlucHV0IDogY3JlYXRlTG9jYWwoaW5wdXQpLFxuICAgICAgICAgICAgaW5wdXRNcztcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPT09IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5wdXRNcyA9IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB0aGlzLmNsb25lKCkuc3RhcnRPZih1bml0cykudmFsdWVPZigpIDw9IGlucHV0TXMgJiZcbiAgICAgICAgICAgICAgICBpbnB1dE1zIDw9IHRoaXMuY2xvbmUoKS5lbmRPZih1bml0cykudmFsdWVPZigpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNTYW1lT3JBZnRlcihpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTYW1lKGlucHV0LCB1bml0cykgfHwgdGhpcy5pc0FmdGVyKGlucHV0LCB1bml0cyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNTYW1lT3JCZWZvcmUoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU2FtZShpbnB1dCwgdW5pdHMpIHx8IHRoaXMuaXNCZWZvcmUoaW5wdXQsIHVuaXRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkaWZmKGlucHV0LCB1bml0cywgYXNGbG9hdCkge1xuICAgICAgICB2YXIgdGhhdCwgem9uZURlbHRhLCBvdXRwdXQ7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoYXQgPSBjbG9uZVdpdGhPZmZzZXQoaW5wdXQsIHRoaXMpO1xuXG4gICAgICAgIGlmICghdGhhdC5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICB6b25lRGVsdGEgPSAodGhhdC51dGNPZmZzZXQoKSAtIHRoaXMudXRjT2Zmc2V0KCkpICogNmU0O1xuXG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IG1vbnRoRGlmZih0aGlzLCB0aGF0KSAvIDEyO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IG1vbnRoRGlmZih0aGlzLCB0aGF0KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IG1vbnRoRGlmZih0aGlzLCB0aGF0KSAvIDM7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyAxZTM7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDBcbiAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDZlNDtcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMCAqIDYwXG4gICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gMzZlNTtcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMCAqIDYwICogNjBcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0IC0gem9uZURlbHRhKSAvIDg2NGU1O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjAgKiA2MCAqIDI0LCBuZWdhdGUgZHN0XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQgLSB6b25lRGVsdGEpIC8gNjA0OGU1O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjAgKiA2MCAqIDI0ICogNywgbmVnYXRlIGRzdFxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSB0aGlzIC0gdGhhdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhc0Zsb2F0ID8gb3V0cHV0IDogYWJzRmxvb3Iob3V0cHV0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aERpZmYoYSwgYikge1xuICAgICAgICBpZiAoYS5kYXRlKCkgPCBiLmRhdGUoKSkge1xuICAgICAgICAgICAgLy8gZW5kLW9mLW1vbnRoIGNhbGN1bGF0aW9ucyB3b3JrIGNvcnJlY3Qgd2hlbiB0aGUgc3RhcnQgbW9udGggaGFzIG1vcmVcbiAgICAgICAgICAgIC8vIGRheXMgdGhhbiB0aGUgZW5kIG1vbnRoLlxuICAgICAgICAgICAgcmV0dXJuIC1tb250aERpZmYoYiwgYSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZGlmZmVyZW5jZSBpbiBtb250aHNcbiAgICAgICAgdmFyIHdob2xlTW9udGhEaWZmID0gKGIueWVhcigpIC0gYS55ZWFyKCkpICogMTIgKyAoYi5tb250aCgpIC0gYS5tb250aCgpKSxcbiAgICAgICAgICAgIC8vIGIgaXMgaW4gKGFuY2hvciAtIDEgbW9udGgsIGFuY2hvciArIDEgbW9udGgpXG4gICAgICAgICAgICBhbmNob3IgPSBhLmNsb25lKCkuYWRkKHdob2xlTW9udGhEaWZmLCAnbW9udGhzJyksXG4gICAgICAgICAgICBhbmNob3IyLFxuICAgICAgICAgICAgYWRqdXN0O1xuXG4gICAgICAgIGlmIChiIC0gYW5jaG9yIDwgMCkge1xuICAgICAgICAgICAgYW5jaG9yMiA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYgLSAxLCAnbW9udGhzJyk7XG4gICAgICAgICAgICAvLyBsaW5lYXIgYWNyb3NzIHRoZSBtb250aFxuICAgICAgICAgICAgYWRqdXN0ID0gKGIgLSBhbmNob3IpIC8gKGFuY2hvciAtIGFuY2hvcjIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYW5jaG9yMiA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYgKyAxLCAnbW9udGhzJyk7XG4gICAgICAgICAgICAvLyBsaW5lYXIgYWNyb3NzIHRoZSBtb250aFxuICAgICAgICAgICAgYWRqdXN0ID0gKGIgLSBhbmNob3IpIC8gKGFuY2hvcjIgLSBhbmNob3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9jaGVjayBmb3IgbmVnYXRpdmUgemVybywgcmV0dXJuIHplcm8gaWYgbmVnYXRpdmUgemVyb1xuICAgICAgICByZXR1cm4gLSh3aG9sZU1vbnRoRGlmZiArIGFkanVzdCkgfHwgMDtcbiAgICB9XG5cbiAgICBob29rcy5kZWZhdWx0Rm9ybWF0ID0gJ1lZWVktTU0tRERUSEg6bW06c3NaJztcbiAgICBob29rcy5kZWZhdWx0Rm9ybWF0VXRjID0gJ1lZWVktTU0tRERUSEg6bW06c3NbWl0nO1xuXG4gICAgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkubG9jYWxlKCdlbicpLmZvcm1hdCgnZGRkIE1NTSBERCBZWVlZIEhIOm1tOnNzIFtHTVRdWlonKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0lTT1N0cmluZyhrZWVwT2Zmc2V0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHZhciB1dGMgPSBrZWVwT2Zmc2V0ICE9PSB0cnVlLFxuICAgICAgICAgICAgbSA9IHV0YyA/IHRoaXMuY2xvbmUoKS51dGMoKSA6IHRoaXM7XG4gICAgICAgIGlmIChtLnllYXIoKSA8IDAgfHwgbS55ZWFyKCkgPiA5OTk5KSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0TW9tZW50KFxuICAgICAgICAgICAgICAgIG0sXG4gICAgICAgICAgICAgICAgdXRjXG4gICAgICAgICAgICAgICAgICAgID8gJ1lZWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXSdcbiAgICAgICAgICAgICAgICAgICAgOiAnWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTWidcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcpKSB7XG4gICAgICAgICAgICAvLyBuYXRpdmUgaW1wbGVtZW50YXRpb24gaXMgfjUweCBmYXN0ZXIsIHVzZSBpdCB3aGVuIHdlIGNhblxuICAgICAgICAgICAgaWYgKHV0Yykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRvRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSArIHRoaXMudXRjT2Zmc2V0KCkgKiA2MCAqIDEwMDApXG4gICAgICAgICAgICAgICAgICAgIC50b0lTT1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdaJywgZm9ybWF0TW9tZW50KG0sICdaJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JtYXRNb21lbnQoXG4gICAgICAgICAgICBtLFxuICAgICAgICAgICAgdXRjID8gJ1lZWVktTU0tRERbVF1ISDptbTpzcy5TU1NbWl0nIDogJ1lZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIGh1bWFuIHJlYWRhYmxlIHJlcHJlc2VudGF0aW9uIG9mIGEgbW9tZW50IHRoYXQgY2FuXG4gICAgICogYWxzbyBiZSBldmFsdWF0ZWQgdG8gZ2V0IGEgbmV3IG1vbWVudCB3aGljaCBpcyB0aGUgc2FtZVxuICAgICAqXG4gICAgICogQGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2Rpc3QvbGF0ZXN0L2RvY3MvYXBpL3V0aWwuaHRtbCN1dGlsX2N1c3RvbV9pbnNwZWN0X2Z1bmN0aW9uX29uX29iamVjdHNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbnNwZWN0KCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ21vbWVudC5pbnZhbGlkKC8qICcgKyB0aGlzLl9pICsgJyAqLyknO1xuICAgICAgICB9XG4gICAgICAgIHZhciBmdW5jID0gJ21vbWVudCcsXG4gICAgICAgICAgICB6b25lID0gJycsXG4gICAgICAgICAgICBwcmVmaXgsXG4gICAgICAgICAgICB5ZWFyLFxuICAgICAgICAgICAgZGF0ZXRpbWUsXG4gICAgICAgICAgICBzdWZmaXg7XG4gICAgICAgIGlmICghdGhpcy5pc0xvY2FsKCkpIHtcbiAgICAgICAgICAgIGZ1bmMgPSB0aGlzLnV0Y09mZnNldCgpID09PSAwID8gJ21vbWVudC51dGMnIDogJ21vbWVudC5wYXJzZVpvbmUnO1xuICAgICAgICAgICAgem9uZSA9ICdaJztcbiAgICAgICAgfVxuICAgICAgICBwcmVmaXggPSAnWycgKyBmdW5jICsgJyhcIl0nO1xuICAgICAgICB5ZWFyID0gMCA8PSB0aGlzLnllYXIoKSAmJiB0aGlzLnllYXIoKSA8PSA5OTk5ID8gJ1lZWVknIDogJ1lZWVlZWSc7XG4gICAgICAgIGRhdGV0aW1lID0gJy1NTS1ERFtUXUhIOm1tOnNzLlNTUyc7XG4gICAgICAgIHN1ZmZpeCA9IHpvbmUgKyAnW1wiKV0nO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdChwcmVmaXggKyB5ZWFyICsgZGF0ZXRpbWUgKyBzdWZmaXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZvcm1hdChpbnB1dFN0cmluZykge1xuICAgICAgICBpZiAoIWlucHV0U3RyaW5nKSB7XG4gICAgICAgICAgICBpbnB1dFN0cmluZyA9IHRoaXMuaXNVdGMoKVxuICAgICAgICAgICAgICAgID8gaG9va3MuZGVmYXVsdEZvcm1hdFV0Y1xuICAgICAgICAgICAgICAgIDogaG9va3MuZGVmYXVsdEZvcm1hdDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgb3V0cHV0ID0gZm9ybWF0TW9tZW50KHRoaXMsIGlucHV0U3RyaW5nKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLnBvc3Rmb3JtYXQob3V0cHV0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmcm9tKHRpbWUsIHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkKCkgJiZcbiAgICAgICAgICAgICgoaXNNb21lbnQodGltZSkgJiYgdGltZS5pc1ZhbGlkKCkpIHx8IGNyZWF0ZUxvY2FsKHRpbWUpLmlzVmFsaWQoKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oeyB0bzogdGhpcywgZnJvbTogdGltZSB9KVxuICAgICAgICAgICAgICAgIC5sb2NhbGUodGhpcy5sb2NhbGUoKSlcbiAgICAgICAgICAgICAgICAuaHVtYW5pemUoIXdpdGhvdXRTdWZmaXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmcm9tTm93KHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJvbShjcmVhdGVMb2NhbCgpLCB3aXRob3V0U3VmZml4KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0byh0aW1lLCB3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZCgpICYmXG4gICAgICAgICAgICAoKGlzTW9tZW50KHRpbWUpICYmIHRpbWUuaXNWYWxpZCgpKSB8fCBjcmVhdGVMb2NhbCh0aW1lKS5pc1ZhbGlkKCkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKHsgZnJvbTogdGhpcywgdG86IHRpbWUgfSlcbiAgICAgICAgICAgICAgICAubG9jYWxlKHRoaXMubG9jYWxlKCkpXG4gICAgICAgICAgICAgICAgLmh1bWFuaXplKCF3aXRob3V0U3VmZml4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9Ob3cod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy50byhjcmVhdGVMb2NhbCgpLCB3aXRob3V0U3VmZml4KTtcbiAgICB9XG5cbiAgICAvLyBJZiBwYXNzZWQgYSBsb2NhbGUga2V5LCBpdCB3aWxsIHNldCB0aGUgbG9jYWxlIGZvciB0aGlzXG4gICAgLy8gaW5zdGFuY2UuICBPdGhlcndpc2UsIGl0IHdpbGwgcmV0dXJuIHRoZSBsb2NhbGUgY29uZmlndXJhdGlvblxuICAgIC8vIHZhcmlhYmxlcyBmb3IgdGhpcyBpbnN0YW5jZS5cbiAgICBmdW5jdGlvbiBsb2NhbGUoa2V5KSB7XG4gICAgICAgIHZhciBuZXdMb2NhbGVEYXRhO1xuXG4gICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsZS5fYWJicjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld0xvY2FsZURhdGEgPSBnZXRMb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIGlmIChuZXdMb2NhbGVEYXRhICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2NhbGUgPSBuZXdMb2NhbGVEYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbGFuZyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudCgpLmxhbmcoKSBpcyBkZXByZWNhdGVkLiBJbnN0ZWFkLCB1c2UgbW9tZW50KCkubG9jYWxlRGF0YSgpIHRvIGdldCB0aGUgbGFuZ3VhZ2UgY29uZmlndXJhdGlvbi4gVXNlIG1vbWVudCgpLmxvY2FsZSgpIHRvIGNoYW5nZSBsYW5ndWFnZXMuJyxcbiAgICAgICAgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVEYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlO1xuICAgIH1cblxuICAgIHZhciBNU19QRVJfU0VDT05EID0gMTAwMCxcbiAgICAgICAgTVNfUEVSX01JTlVURSA9IDYwICogTVNfUEVSX1NFQ09ORCxcbiAgICAgICAgTVNfUEVSX0hPVVIgPSA2MCAqIE1TX1BFUl9NSU5VVEUsXG4gICAgICAgIE1TX1BFUl80MDBfWUVBUlMgPSAoMzY1ICogNDAwICsgOTcpICogMjQgKiBNU19QRVJfSE9VUjtcblxuICAgIC8vIGFjdHVhbCBtb2R1bG8gLSBoYW5kbGVzIG5lZ2F0aXZlIG51bWJlcnMgKGZvciBkYXRlcyBiZWZvcmUgMTk3MCk6XG4gICAgZnVuY3Rpb24gbW9kJDEoZGl2aWRlbmQsIGRpdmlzb3IpIHtcbiAgICAgICAgcmV0dXJuICgoZGl2aWRlbmQgJSBkaXZpc29yKSArIGRpdmlzb3IpICUgZGl2aXNvcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbFN0YXJ0T2ZEYXRlKHksIG0sIGQpIHtcbiAgICAgICAgLy8gdGhlIGRhdGUgY29uc3RydWN0b3IgcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh5ICsgNDAwLCBtLCBkKSAtIE1TX1BFUl80MDBfWUVBUlM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoeSwgbSwgZCkudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXRjU3RhcnRPZkRhdGUoeSwgbSwgZCkge1xuICAgICAgICAvLyBEYXRlLlVUQyByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgcmV0dXJuIERhdGUuVVRDKHkgKyA0MDAsIG0sIGQpIC0gTVNfUEVSXzQwMF9ZRUFSUztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBEYXRlLlVUQyh5LCBtLCBkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0YXJ0T2YodW5pdHMpIHtcbiAgICAgICAgdmFyIHRpbWUsIHN0YXJ0T2ZEYXRlO1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgaWYgKHVuaXRzID09PSB1bmRlZmluZWQgfHwgdW5pdHMgPT09ICdtaWxsaXNlY29uZCcgfHwgIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXJ0T2ZEYXRlID0gdGhpcy5faXNVVEMgPyB1dGNTdGFydE9mRGF0ZSA6IGxvY2FsU3RhcnRPZkRhdGU7XG5cbiAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCAwLCAxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSAtICh0aGlzLm1vbnRoKCkgJSAzKSxcbiAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtIHRoaXMud2Vla2RheSgpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2lzb1dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSAodGhpcy5pc29XZWVrZGF5KCkgLSAxKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIHRoaXMuZGF0ZSgpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lIC09IG1vZCQxKFxuICAgICAgICAgICAgICAgICAgICB0aW1lICsgKHRoaXMuX2lzVVRDID8gMCA6IHRoaXMudXRjT2Zmc2V0KCkgKiBNU19QRVJfTUlOVVRFKSxcbiAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSAtPSBtb2QkMSh0aW1lLCBNU19QRVJfTUlOVVRFKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgLT0gbW9kJDEodGltZSwgTVNfUEVSX1NFQ09ORCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kLnNldFRpbWUodGltZSk7XG4gICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW5kT2YodW5pdHMpIHtcbiAgICAgICAgdmFyIHRpbWUsIHN0YXJ0T2ZEYXRlO1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgaWYgKHVuaXRzID09PSB1bmRlZmluZWQgfHwgdW5pdHMgPT09ICdtaWxsaXNlY29uZCcgfHwgIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXJ0T2ZEYXRlID0gdGhpcy5faXNVVEMgPyB1dGNTdGFydE9mRGF0ZSA6IGxvY2FsU3RhcnRPZkRhdGU7XG5cbiAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpICsgMSwgMCwgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgdGltZSA9XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCkgLSAodGhpcy5tb250aCgpICUgMykgKyAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICApIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSArIDEsIDEpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPVxuICAgICAgICAgICAgICAgICAgICBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSB0aGlzLndlZWtkYXkoKSArIDdcbiAgICAgICAgICAgICAgICAgICAgKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdpc29XZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID1cbiAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gKHRoaXMuaXNvV2Vla2RheSgpIC0gMSkgKyA3XG4gICAgICAgICAgICAgICAgICAgICkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCB0aGlzLmRhdGUoKSArIDEpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9XG4gICAgICAgICAgICAgICAgICAgIE1TX1BFUl9IT1VSIC1cbiAgICAgICAgICAgICAgICAgICAgbW9kJDEoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lICsgKHRoaXMuX2lzVVRDID8gMCA6IHRoaXMudXRjT2Zmc2V0KCkgKiBNU19QRVJfTUlOVVRFKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIE1TX1BFUl9IT1VSXG4gICAgICAgICAgICAgICAgICAgICkgLVxuICAgICAgICAgICAgICAgICAgICAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSArPSBNU19QRVJfTUlOVVRFIC0gbW9kJDEodGltZSwgTVNfUEVSX01JTlVURSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSArPSBNU19QRVJfU0VDT05EIC0gbW9kJDEodGltZSwgTVNfUEVSX1NFQ09ORCkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZC5zZXRUaW1lKHRpbWUpO1xuICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbHVlT2YoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kLnZhbHVlT2YoKSAtICh0aGlzLl9vZmZzZXQgfHwgMCkgKiA2MDAwMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bml4KCkge1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih0aGlzLnZhbHVlT2YoKSAvIDEwMDApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvRGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0FycmF5KCkge1xuICAgICAgICB2YXIgbSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBtLnllYXIoKSxcbiAgICAgICAgICAgIG0ubW9udGgoKSxcbiAgICAgICAgICAgIG0uZGF0ZSgpLFxuICAgICAgICAgICAgbS5ob3VyKCksXG4gICAgICAgICAgICBtLm1pbnV0ZSgpLFxuICAgICAgICAgICAgbS5zZWNvbmQoKSxcbiAgICAgICAgICAgIG0ubWlsbGlzZWNvbmQoKSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b09iamVjdCgpIHtcbiAgICAgICAgdmFyIG0gPSB0aGlzO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeWVhcnM6IG0ueWVhcigpLFxuICAgICAgICAgICAgbW9udGhzOiBtLm1vbnRoKCksXG4gICAgICAgICAgICBkYXRlOiBtLmRhdGUoKSxcbiAgICAgICAgICAgIGhvdXJzOiBtLmhvdXJzKCksXG4gICAgICAgICAgICBtaW51dGVzOiBtLm1pbnV0ZXMoKSxcbiAgICAgICAgICAgIHNlY29uZHM6IG0uc2Vjb25kcygpLFxuICAgICAgICAgICAgbWlsbGlzZWNvbmRzOiBtLm1pbGxpc2Vjb25kcygpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICAgICAgLy8gbmV3IERhdGUoTmFOKS50b0pTT04oKSA9PT0gbnVsbFxuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLnRvSVNPU3RyaW5nKCkgOiBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWQkMigpIHtcbiAgICAgICAgcmV0dXJuIGlzVmFsaWQodGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2luZ0ZsYWdzKCkge1xuICAgICAgICByZXR1cm4gZXh0ZW5kKHt9LCBnZXRQYXJzaW5nRmxhZ3ModGhpcykpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGludmFsaWRBdCgpIHtcbiAgICAgICAgcmV0dXJuIGdldFBhcnNpbmdGbGFncyh0aGlzKS5vdmVyZmxvdztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGlvbkRhdGEoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbnB1dDogdGhpcy5faSxcbiAgICAgICAgICAgIGZvcm1hdDogdGhpcy5fZixcbiAgICAgICAgICAgIGxvY2FsZTogdGhpcy5fbG9jYWxlLFxuICAgICAgICAgICAgaXNVVEM6IHRoaXMuX2lzVVRDLFxuICAgICAgICAgICAgc3RyaWN0OiB0aGlzLl9zdHJpY3QsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ04nLCAwLCAwLCAnZXJhQWJicicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdOTicsIDAsIDAsICdlcmFBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OTicsIDAsIDAsICdlcmFBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OTk4nLCAwLCAwLCAnZXJhTmFtZScpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdOTk5OTicsIDAsIDAsICdlcmFOYXJyb3cnKTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCd5JywgWyd5JywgMV0sICd5bycsICdlcmFZZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3l5JywgMl0sIDAsICdlcmFZZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3l5eScsIDNdLCAwLCAnZXJhWWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd5JywgWyd5eXl5JywgNF0sIDAsICdlcmFZZWFyJyk7XG5cbiAgICBhZGRSZWdleFRva2VuKCdOJywgbWF0Y2hFcmFBYmJyKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTicsIG1hdGNoRXJhQWJicik7XG4gICAgYWRkUmVnZXhUb2tlbignTk5OJywgbWF0Y2hFcmFBYmJyKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTk5OJywgbWF0Y2hFcmFOYW1lKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTk5OTicsIG1hdGNoRXJhTmFycm93KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oXG4gICAgICAgIFsnTicsICdOTicsICdOTk4nLCAnTk5OTicsICdOTk5OTiddLFxuICAgICAgICBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgICAgICB2YXIgZXJhID0gY29uZmlnLl9sb2NhbGUuZXJhc1BhcnNlKGlucHV0LCB0b2tlbiwgY29uZmlnLl9zdHJpY3QpO1xuICAgICAgICAgICAgaWYgKGVyYSkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVyYSA9IGVyYTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZEVyYSA9IGlucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3knLCBtYXRjaFVuc2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCd5eScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3l5eScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3l5eXknLCBtYXRjaFVuc2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCd5bycsIG1hdGNoRXJhWWVhck9yZGluYWwpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ3knLCAneXknLCAneXl5JywgJ3l5eXknXSwgWUVBUik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ3lvJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgdmFyIG1hdGNoO1xuICAgICAgICBpZiAoY29uZmlnLl9sb2NhbGUuX2VyYVllYXJPcmRpbmFsUmVnZXgpIHtcbiAgICAgICAgICAgIG1hdGNoID0gaW5wdXQubWF0Y2goY29uZmlnLl9sb2NhbGUuX2VyYVllYXJPcmRpbmFsUmVnZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fbG9jYWxlLmVyYVllYXJPcmRpbmFsUGFyc2UpIHtcbiAgICAgICAgICAgIGFycmF5W1lFQVJdID0gY29uZmlnLl9sb2NhbGUuZXJhWWVhck9yZGluYWxQYXJzZShpbnB1dCwgbWF0Y2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXJyYXlbWUVBUl0gPSBwYXJzZUludChpbnB1dCwgMTApO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVFcmFzKG0sIGZvcm1hdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMuX2VyYXMgfHwgZ2V0TG9jYWxlKCdlbicpLl9lcmFzO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICAgICAgICAgIGRhdGUgPSBob29rcyhlcmFzW2ldLnNpbmNlKS5zdGFydE9mKCdkYXknKTtcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS5zaW5jZSA9IGRhdGUudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgICAgICAgICAgICAgIGVyYXNbaV0udW50aWwgPSArSW5maW5pdHk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IGhvb2tzKGVyYXNbaV0udW50aWwpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS51bnRpbCA9IGRhdGUudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXJhcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVFcmFzUGFyc2UoZXJhTmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMuZXJhcygpLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGFiYnIsXG4gICAgICAgICAgICBuYXJyb3c7XG4gICAgICAgIGVyYU5hbWUgPSBlcmFOYW1lLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICBuYW1lID0gZXJhc1tpXS5uYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICBhYmJyID0gZXJhc1tpXS5hYmJyLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICBuYXJyb3cgPSBlcmFzW2ldLm5hcnJvdy50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAgICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTic6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk5OJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhYmJyID09PSBlcmFOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTk5OJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSBlcmFOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTk5OTic6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFycm93ID09PSBlcmFOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFtuYW1lLCBhYmJyLCBuYXJyb3ddLmluZGV4T2YoZXJhTmFtZSkgPj0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlRXJhc0NvbnZlcnRZZWFyKGVyYSwgeWVhcikge1xuICAgICAgICB2YXIgZGlyID0gZXJhLnNpbmNlIDw9IGVyYS51bnRpbCA/ICsxIDogLTE7XG4gICAgICAgIGlmICh5ZWFyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBob29rcyhlcmEuc2luY2UpLnllYXIoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBob29rcyhlcmEuc2luY2UpLnllYXIoKSArICh5ZWFyIC0gZXJhLm9mZnNldCkgKiBkaXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFOYW1lKCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5uYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYU5hcnJvdygpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICB2YWwgPSB0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuXG4gICAgICAgICAgICBpZiAoZXJhc1tpXS5zaW5jZSA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0udW50aWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5uYXJyb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5uYXJyb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RXJhQWJicigpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICB2YWwgPSB0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuXG4gICAgICAgICAgICBpZiAoZXJhc1tpXS5zaW5jZSA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0udW50aWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5hYmJyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVyYXNbaV0udW50aWwgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnNpbmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0uYWJicjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFZZWFyKCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBkaXIsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIGRpciA9IGVyYXNbaV0uc2luY2UgPD0gZXJhc1tpXS51bnRpbCA/ICsxIDogLTE7XG5cbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAoZXJhc1tpXS5zaW5jZSA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0udW50aWwpIHx8XG4gICAgICAgICAgICAgICAgKGVyYXNbaV0udW50aWwgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnNpbmNlKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMueWVhcigpIC0gaG9va3MoZXJhc1tpXS5zaW5jZSkueWVhcigpKSAqIGRpciArXG4gICAgICAgICAgICAgICAgICAgIGVyYXNbaV0ub2Zmc2V0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnllYXIoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlcmFzTmFtZVJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNOYW1lUmVnZXgnKSkge1xuICAgICAgICAgICAgY29tcHV0ZUVyYXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1N0cmljdCA/IHRoaXMuX2VyYXNOYW1lUmVnZXggOiB0aGlzLl9lcmFzUmVnZXg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXJhc0FiYnJSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19lcmFzQWJiclJlZ2V4JykpIHtcbiAgICAgICAgICAgIGNvbXB1dGVFcmFzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNTdHJpY3QgPyB0aGlzLl9lcmFzQWJiclJlZ2V4IDogdGhpcy5fZXJhc1JlZ2V4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVyYXNOYXJyb3dSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19lcmFzTmFycm93UmVnZXgnKSkge1xuICAgICAgICAgICAgY29tcHV0ZUVyYXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1N0cmljdCA/IHRoaXMuX2VyYXNOYXJyb3dSZWdleCA6IHRoaXMuX2VyYXNSZWdleDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYUFiYnIoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLmVyYXNBYmJyUmVnZXgoaXNTdHJpY3QpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoRXJhTmFtZShpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc05hbWVSZWdleChpc1N0cmljdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFOYXJyb3coaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLmVyYXNOYXJyb3dSZWdleChpc1N0cmljdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFZZWFyT3JkaW5hbChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuX2VyYVllYXJPcmRpbmFsUmVnZXggfHwgbWF0Y2hVbnNpZ25lZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlRXJhc1BhcnNlKCkge1xuICAgICAgICB2YXIgYWJiclBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbmFtZVBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbmFycm93UGllY2VzID0gW10sXG4gICAgICAgICAgICBtaXhlZFBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBlcmFzTmFtZSxcbiAgICAgICAgICAgIGVyYXNBYmJyLFxuICAgICAgICAgICAgZXJhc05hcnJvdyxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmVyYXMoKTtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIGVyYXNOYW1lID0gcmVnZXhFc2NhcGUoZXJhc1tpXS5uYW1lKTtcbiAgICAgICAgICAgIGVyYXNBYmJyID0gcmVnZXhFc2NhcGUoZXJhc1tpXS5hYmJyKTtcbiAgICAgICAgICAgIGVyYXNOYXJyb3cgPSByZWdleEVzY2FwZShlcmFzW2ldLm5hcnJvdyk7XG5cbiAgICAgICAgICAgIG5hbWVQaWVjZXMucHVzaChlcmFzTmFtZSk7XG4gICAgICAgICAgICBhYmJyUGllY2VzLnB1c2goZXJhc0FiYnIpO1xuICAgICAgICAgICAgbmFycm93UGllY2VzLnB1c2goZXJhc05hcnJvdyk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGVyYXNOYW1lKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goZXJhc0FiYnIpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChlcmFzTmFycm93KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2VyYXNSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG1peGVkUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fZXJhc05hbWVSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG5hbWVQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9lcmFzQWJiclJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgYWJiclBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX2VyYXNOYXJyb3dSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgbmFycm93UGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnZ2cnLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy53ZWVrWWVhcigpICUgMTAwO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydHRycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzb1dlZWtZZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBhZGRXZWVrWWVhckZvcm1hdFRva2VuKHRva2VuLCBnZXR0ZXIpIHtcbiAgICAgICAgYWRkRm9ybWF0VG9rZW4oMCwgW3Rva2VuLCB0b2tlbi5sZW5ndGhdLCAwLCBnZXR0ZXIpO1xuICAgIH1cblxuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ2dnZ2cnLCAnd2Vla1llYXInKTtcbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdnZ2dnZycsICd3ZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ0dHR0cnLCAnaXNvV2Vla1llYXInKTtcbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdHR0dHRycsICdpc29XZWVrWWVhcicpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignRycsIG1hdGNoU2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCdnJywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHR0cnLCBtYXRjaDF0bzQsIG1hdGNoNCk7XG4gICAgYWRkUmVnZXhUb2tlbignZ2dnZycsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdHR0dHRycsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcbiAgICBhZGRSZWdleFRva2VuKCdnZ2dnZycsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFxuICAgICAgICBbJ2dnZ2cnLCAnZ2dnZ2cnLCAnR0dHRycsICdHR0dHRyddLFxuICAgICAgICBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgICAgIHdlZWtbdG9rZW4uc3Vic3RyKDAsIDIpXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2dnJywgJ0dHJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB3ZWVrW3Rva2VuXSA9IGhvb2tzLnBhcnNlVHdvRGlnaXRZZWFyKGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWtZZWFyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBnZXRTZXRXZWVrWWVhckhlbHBlci5jYWxsKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgdGhpcy53ZWVrKCksXG4gICAgICAgICAgICB0aGlzLndlZWtkYXkoKSArIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdyxcbiAgICAgICAgICAgIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdyxcbiAgICAgICAgICAgIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRveVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldElTT1dlZWtZZWFyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBnZXRTZXRXZWVrWWVhckhlbHBlci5jYWxsKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgdGhpcy5pc29XZWVrKCksXG4gICAgICAgICAgICB0aGlzLmlzb1dlZWtkYXkoKSxcbiAgICAgICAgICAgIDEsXG4gICAgICAgICAgICA0XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SVNPV2Vla3NJblllYXIoKSB7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLnllYXIoKSwgMSwgNCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SVNPV2Vla3NJbklTT1dlZWtZZWFyKCkge1xuICAgICAgICByZXR1cm4gd2Vla3NJblllYXIodGhpcy5pc29XZWVrWWVhcigpLCAxLCA0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRXZWVrc0luWWVhcigpIHtcbiAgICAgICAgdmFyIHdlZWtJbmZvID0gdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWs7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLnllYXIoKSwgd2Vla0luZm8uZG93LCB3ZWVrSW5mby5kb3kpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFdlZWtzSW5XZWVrWWVhcigpIHtcbiAgICAgICAgdmFyIHdlZWtJbmZvID0gdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWs7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLndlZWtZZWFyKCksIHdlZWtJbmZvLmRvdywgd2Vla0luZm8uZG95KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRXZWVrWWVhckhlbHBlcihpbnB1dCwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIHdlZWtzVGFyZ2V0O1xuICAgICAgICBpZiAoaW5wdXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHdlZWtPZlllYXIodGhpcywgZG93LCBkb3kpLnllYXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3ZWVrc1RhcmdldCA9IHdlZWtzSW5ZZWFyKGlucHV0LCBkb3csIGRveSk7XG4gICAgICAgICAgICBpZiAod2VlayA+IHdlZWtzVGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgd2VlayA9IHdlZWtzVGFyZ2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNldFdlZWtBbGwuY2FsbCh0aGlzLCBpbnB1dCwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0V2Vla0FsbCh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIGRheU9mWWVhckRhdGEgPSBkYXlPZlllYXJGcm9tV2Vla3Mod2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSxcbiAgICAgICAgICAgIGRhdGUgPSBjcmVhdGVVVENEYXRlKGRheU9mWWVhckRhdGEueWVhciwgMCwgZGF5T2ZZZWFyRGF0YS5kYXlPZlllYXIpO1xuXG4gICAgICAgIHRoaXMueWVhcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkpO1xuICAgICAgICB0aGlzLm1vbnRoKGRhdGUuZ2V0VVRDTW9udGgoKSk7XG4gICAgICAgIHRoaXMuZGF0ZShkYXRlLmdldFVUQ0RhdGUoKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdRJywgMCwgJ1FvJywgJ3F1YXJ0ZXInKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1EnLCBtYXRjaDEpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1EnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01PTlRIXSA9ICh0b0ludChpbnB1dCkgLSAxKSAqIDM7XG4gICAgfSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRRdWFydGVyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsXG4gICAgICAgICAgICA/IE1hdGguY2VpbCgodGhpcy5tb250aCgpICsgMSkgLyAzKVxuICAgICAgICAgICAgOiB0aGlzLm1vbnRoKChpbnB1dCAtIDEpICogMyArICh0aGlzLm1vbnRoKCkgJSAzKSk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0QnLCBbJ0REJywgMl0sICdEbycsICdkYXRlJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdEJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJOb0xlYWRpbmdaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdERCcsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdEbycsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSBcIm9yZGluYWxQYXJzZVwiIGZhbGxiYWNrIGluIG5leHQgbWFqb3IgcmVsZWFzZS5cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0XG4gICAgICAgICAgICA/IGxvY2FsZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZSB8fCBsb2NhbGUuX29yZGluYWxQYXJzZVxuICAgICAgICAgICAgOiBsb2NhbGUuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50O1xuICAgIH0pO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ0QnLCAnREQnXSwgREFURSk7XG4gICAgYWRkUGFyc2VUb2tlbignRG8nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W0RBVEVdID0gdG9JbnQoaW5wdXQubWF0Y2gobWF0Y2gxdG8yKVswXSk7XG4gICAgfSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0RGF5T2ZNb250aCA9IG1ha2VHZXRTZXQoJ0RhdGUnLCB0cnVlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdEREQnLCBbJ0REREQnLCAzXSwgJ0RERG8nLCAnZGF5T2ZZZWFyJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdEREQnLCBtYXRjaDF0bzMpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0REREQnLCBtYXRjaDMpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydEREQnLCAnRERERCddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPSB0b0ludChpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXREYXlPZlllYXIoaW5wdXQpIHtcbiAgICAgICAgdmFyIGRheU9mWWVhciA9XG4gICAgICAgICAgICBNYXRoLnJvdW5kKFxuICAgICAgICAgICAgICAgICh0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykgLSB0aGlzLmNsb25lKCkuc3RhcnRPZigneWVhcicpKSAvIDg2NGU1XG4gICAgICAgICAgICApICsgMTtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyBkYXlPZlllYXIgOiB0aGlzLmFkZChpbnB1dCAtIGRheU9mWWVhciwgJ2QnKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignbScsIFsnbW0nLCAyXSwgMCwgJ21pbnV0ZScpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignbScsIG1hdGNoMXRvMiwgbWF0Y2gxdG8ySGFzWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignbW0nLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ20nLCAnbW0nXSwgTUlOVVRFKTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXRNaW51dGUgPSBtYWtlR2V0U2V0KCdNaW51dGVzJywgZmFsc2UpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3MnLCBbJ3NzJywgMl0sIDAsICdzZWNvbmQnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3MnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMkhhc1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3NzJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydzJywgJ3NzJ10sIFNFQ09ORCk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0U2Vjb25kID0gbWFrZUdldFNldCgnU2Vjb25kcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdTJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gfn4odGhpcy5taWxsaXNlY29uZCgpIC8gMTAwKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1MnLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gfn4odGhpcy5taWxsaXNlY29uZCgpIC8gMTApO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1MnLCAzXSwgMCwgJ21pbGxpc2Vjb25kJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTJywgNF0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1MnLCA1XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTJywgNl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTJywgN10sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTU1MnLCA4XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTU1NTJywgOV0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDAwMDA7XG4gICAgfSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdTJywgbWF0Y2gxdG8zLCBtYXRjaDEpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1NTJywgbWF0Y2gxdG8zLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1NTUycsIG1hdGNoMXRvMywgbWF0Y2gzKTtcblxuICAgIHZhciB0b2tlbiwgZ2V0U2V0TWlsbGlzZWNvbmQ7XG4gICAgZm9yICh0b2tlbiA9ICdTU1NTJzsgdG9rZW4ubGVuZ3RoIDw9IDk7IHRva2VuICs9ICdTJykge1xuICAgICAgICBhZGRSZWdleFRva2VuKHRva2VuLCBtYXRjaFVuc2lnbmVkKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZU1zKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtNSUxMSVNFQ09ORF0gPSB0b0ludCgoJzAuJyArIGlucHV0KSAqIDEwMDApO1xuICAgIH1cblxuICAgIGZvciAodG9rZW4gPSAnUyc7IHRva2VuLmxlbmd0aCA8PSA5OyB0b2tlbiArPSAnUycpIHtcbiAgICAgICAgYWRkUGFyc2VUb2tlbih0b2tlbiwgcGFyc2VNcyk7XG4gICAgfVxuXG4gICAgZ2V0U2V0TWlsbGlzZWNvbmQgPSBtYWtlR2V0U2V0KCdNaWxsaXNlY29uZHMnLCBmYWxzZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigneicsIDAsIDAsICd6b25lQWJicicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd6eicsIDAsIDAsICd6b25lTmFtZScpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0Wm9uZUFiYnIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyA/ICdVVEMnIDogJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Wm9uZU5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyA/ICdDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZScgOiAnJztcbiAgICB9XG5cbiAgICB2YXIgcHJvdG8gPSBNb21lbnQucHJvdG90eXBlO1xuXG4gICAgcHJvdG8uYWRkID0gYWRkO1xuICAgIHByb3RvLmNhbGVuZGFyID0gY2FsZW5kYXIkMTtcbiAgICBwcm90by5jbG9uZSA9IGNsb25lO1xuICAgIHByb3RvLmRpZmYgPSBkaWZmO1xuICAgIHByb3RvLmVuZE9mID0gZW5kT2Y7XG4gICAgcHJvdG8uZm9ybWF0ID0gZm9ybWF0O1xuICAgIHByb3RvLmZyb20gPSBmcm9tO1xuICAgIHByb3RvLmZyb21Ob3cgPSBmcm9tTm93O1xuICAgIHByb3RvLnRvID0gdG87XG4gICAgcHJvdG8udG9Ob3cgPSB0b05vdztcbiAgICBwcm90by5nZXQgPSBzdHJpbmdHZXQ7XG4gICAgcHJvdG8uaW52YWxpZEF0ID0gaW52YWxpZEF0O1xuICAgIHByb3RvLmlzQWZ0ZXIgPSBpc0FmdGVyO1xuICAgIHByb3RvLmlzQmVmb3JlID0gaXNCZWZvcmU7XG4gICAgcHJvdG8uaXNCZXR3ZWVuID0gaXNCZXR3ZWVuO1xuICAgIHByb3RvLmlzU2FtZSA9IGlzU2FtZTtcbiAgICBwcm90by5pc1NhbWVPckFmdGVyID0gaXNTYW1lT3JBZnRlcjtcbiAgICBwcm90by5pc1NhbWVPckJlZm9yZSA9IGlzU2FtZU9yQmVmb3JlO1xuICAgIHByb3RvLmlzVmFsaWQgPSBpc1ZhbGlkJDI7XG4gICAgcHJvdG8ubGFuZyA9IGxhbmc7XG4gICAgcHJvdG8ubG9jYWxlID0gbG9jYWxlO1xuICAgIHByb3RvLmxvY2FsZURhdGEgPSBsb2NhbGVEYXRhO1xuICAgIHByb3RvLm1heCA9IHByb3RvdHlwZU1heDtcbiAgICBwcm90by5taW4gPSBwcm90b3R5cGVNaW47XG4gICAgcHJvdG8ucGFyc2luZ0ZsYWdzID0gcGFyc2luZ0ZsYWdzO1xuICAgIHByb3RvLnNldCA9IHN0cmluZ1NldDtcbiAgICBwcm90by5zdGFydE9mID0gc3RhcnRPZjtcbiAgICBwcm90by5zdWJ0cmFjdCA9IHN1YnRyYWN0O1xuICAgIHByb3RvLnRvQXJyYXkgPSB0b0FycmF5O1xuICAgIHByb3RvLnRvT2JqZWN0ID0gdG9PYmplY3Q7XG4gICAgcHJvdG8udG9EYXRlID0gdG9EYXRlO1xuICAgIHByb3RvLnRvSVNPU3RyaW5nID0gdG9JU09TdHJpbmc7XG4gICAgcHJvdG8uaW5zcGVjdCA9IGluc3BlY3Q7XG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC5mb3IgIT0gbnVsbCkge1xuICAgICAgICBwcm90b1tTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAnTW9tZW50PCcgKyB0aGlzLmZvcm1hdCgpICsgJz4nO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBwcm90by50b0pTT04gPSB0b0pTT047XG4gICAgcHJvdG8udG9TdHJpbmcgPSB0b1N0cmluZztcbiAgICBwcm90by51bml4ID0gdW5peDtcbiAgICBwcm90by52YWx1ZU9mID0gdmFsdWVPZjtcbiAgICBwcm90by5jcmVhdGlvbkRhdGEgPSBjcmVhdGlvbkRhdGE7XG4gICAgcHJvdG8uZXJhTmFtZSA9IGdldEVyYU5hbWU7XG4gICAgcHJvdG8uZXJhTmFycm93ID0gZ2V0RXJhTmFycm93O1xuICAgIHByb3RvLmVyYUFiYnIgPSBnZXRFcmFBYmJyO1xuICAgIHByb3RvLmVyYVllYXIgPSBnZXRFcmFZZWFyO1xuICAgIHByb3RvLnllYXIgPSBnZXRTZXRZZWFyO1xuICAgIHByb3RvLmlzTGVhcFllYXIgPSBnZXRJc0xlYXBZZWFyO1xuICAgIHByb3RvLndlZWtZZWFyID0gZ2V0U2V0V2Vla1llYXI7XG4gICAgcHJvdG8uaXNvV2Vla1llYXIgPSBnZXRTZXRJU09XZWVrWWVhcjtcbiAgICBwcm90by5xdWFydGVyID0gcHJvdG8ucXVhcnRlcnMgPSBnZXRTZXRRdWFydGVyO1xuICAgIHByb3RvLm1vbnRoID0gZ2V0U2V0TW9udGg7XG4gICAgcHJvdG8uZGF5c0luTW9udGggPSBnZXREYXlzSW5Nb250aDtcbiAgICBwcm90by53ZWVrID0gcHJvdG8ud2Vla3MgPSBnZXRTZXRXZWVrO1xuICAgIHByb3RvLmlzb1dlZWsgPSBwcm90by5pc29XZWVrcyA9IGdldFNldElTT1dlZWs7XG4gICAgcHJvdG8ud2Vla3NJblllYXIgPSBnZXRXZWVrc0luWWVhcjtcbiAgICBwcm90by53ZWVrc0luV2Vla1llYXIgPSBnZXRXZWVrc0luV2Vla1llYXI7XG4gICAgcHJvdG8uaXNvV2Vla3NJblllYXIgPSBnZXRJU09XZWVrc0luWWVhcjtcbiAgICBwcm90by5pc29XZWVrc0luSVNPV2Vla1llYXIgPSBnZXRJU09XZWVrc0luSVNPV2Vla1llYXI7XG4gICAgcHJvdG8uZGF0ZSA9IGdldFNldERheU9mTW9udGg7XG4gICAgcHJvdG8uZGF5ID0gcHJvdG8uZGF5cyA9IGdldFNldERheU9mV2VlaztcbiAgICBwcm90by53ZWVrZGF5ID0gZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrO1xuICAgIHByb3RvLmlzb1dlZWtkYXkgPSBnZXRTZXRJU09EYXlPZldlZWs7XG4gICAgcHJvdG8uZGF5T2ZZZWFyID0gZ2V0U2V0RGF5T2ZZZWFyO1xuICAgIHByb3RvLmhvdXIgPSBwcm90by5ob3VycyA9IGdldFNldEhvdXI7XG4gICAgcHJvdG8ubWludXRlID0gcHJvdG8ubWludXRlcyA9IGdldFNldE1pbnV0ZTtcbiAgICBwcm90by5zZWNvbmQgPSBwcm90by5zZWNvbmRzID0gZ2V0U2V0U2Vjb25kO1xuICAgIHByb3RvLm1pbGxpc2Vjb25kID0gcHJvdG8ubWlsbGlzZWNvbmRzID0gZ2V0U2V0TWlsbGlzZWNvbmQ7XG4gICAgcHJvdG8udXRjT2Zmc2V0ID0gZ2V0U2V0T2Zmc2V0O1xuICAgIHByb3RvLnV0YyA9IHNldE9mZnNldFRvVVRDO1xuICAgIHByb3RvLmxvY2FsID0gc2V0T2Zmc2V0VG9Mb2NhbDtcbiAgICBwcm90by5wYXJzZVpvbmUgPSBzZXRPZmZzZXRUb1BhcnNlZE9mZnNldDtcbiAgICBwcm90by5oYXNBbGlnbmVkSG91ck9mZnNldCA9IGhhc0FsaWduZWRIb3VyT2Zmc2V0O1xuICAgIHByb3RvLmlzRFNUID0gaXNEYXlsaWdodFNhdmluZ1RpbWU7XG4gICAgcHJvdG8uaXNMb2NhbCA9IGlzTG9jYWw7XG4gICAgcHJvdG8uaXNVdGNPZmZzZXQgPSBpc1V0Y09mZnNldDtcbiAgICBwcm90by5pc1V0YyA9IGlzVXRjO1xuICAgIHByb3RvLmlzVVRDID0gaXNVdGM7XG4gICAgcHJvdG8uem9uZUFiYnIgPSBnZXRab25lQWJicjtcbiAgICBwcm90by56b25lTmFtZSA9IGdldFpvbmVOYW1lO1xuICAgIHByb3RvLmRhdGVzID0gZGVwcmVjYXRlKFxuICAgICAgICAnZGF0ZXMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIGRhdGUgaW5zdGVhZC4nLFxuICAgICAgICBnZXRTZXREYXlPZk1vbnRoXG4gICAgKTtcbiAgICBwcm90by5tb250aHMgPSBkZXByZWNhdGUoXG4gICAgICAgICdtb250aHMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbnRoIGluc3RlYWQnLFxuICAgICAgICBnZXRTZXRNb250aFxuICAgICk7XG4gICAgcHJvdG8ueWVhcnMgPSBkZXByZWNhdGUoXG4gICAgICAgICd5ZWFycyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgeWVhciBpbnN0ZWFkJyxcbiAgICAgICAgZ2V0U2V0WWVhclxuICAgICk7XG4gICAgcHJvdG8uem9uZSA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudCgpLnpvbmUgaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudCgpLnV0Y09mZnNldCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL3pvbmUvJyxcbiAgICAgICAgZ2V0U2V0Wm9uZVxuICAgICk7XG4gICAgcHJvdG8uaXNEU1RTaGlmdGVkID0gZGVwcmVjYXRlKFxuICAgICAgICAnaXNEU1RTaGlmdGVkIGlzIGRlcHJlY2F0ZWQuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RzdC1zaGlmdGVkLyBmb3IgbW9yZSBpbmZvcm1hdGlvbicsXG4gICAgICAgIGlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZFxuICAgICk7XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVbml4KGlucHV0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbChpbnB1dCAqIDEwMDApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUluWm9uZSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsLmFwcGx5KG51bGwsIGFyZ3VtZW50cykucGFyc2Vab25lKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlUGFyc2VQb3N0Rm9ybWF0KHN0cmluZykge1xuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgIH1cblxuICAgIHZhciBwcm90byQxID0gTG9jYWxlLnByb3RvdHlwZTtcblxuICAgIHByb3RvJDEuY2FsZW5kYXIgPSBjYWxlbmRhcjtcbiAgICBwcm90byQxLmxvbmdEYXRlRm9ybWF0ID0gbG9uZ0RhdGVGb3JtYXQ7XG4gICAgcHJvdG8kMS5pbnZhbGlkRGF0ZSA9IGludmFsaWREYXRlO1xuICAgIHByb3RvJDEub3JkaW5hbCA9IG9yZGluYWw7XG4gICAgcHJvdG8kMS5wcmVwYXJzZSA9IHByZVBhcnNlUG9zdEZvcm1hdDtcbiAgICBwcm90byQxLnBvc3Rmb3JtYXQgPSBwcmVQYXJzZVBvc3RGb3JtYXQ7XG4gICAgcHJvdG8kMS5yZWxhdGl2ZVRpbWUgPSByZWxhdGl2ZVRpbWU7XG4gICAgcHJvdG8kMS5wYXN0RnV0dXJlID0gcGFzdEZ1dHVyZTtcbiAgICBwcm90byQxLnNldCA9IHNldDtcbiAgICBwcm90byQxLmVyYXMgPSBsb2NhbGVFcmFzO1xuICAgIHByb3RvJDEuZXJhc1BhcnNlID0gbG9jYWxlRXJhc1BhcnNlO1xuICAgIHByb3RvJDEuZXJhc0NvbnZlcnRZZWFyID0gbG9jYWxlRXJhc0NvbnZlcnRZZWFyO1xuICAgIHByb3RvJDEuZXJhc0FiYnJSZWdleCA9IGVyYXNBYmJyUmVnZXg7XG4gICAgcHJvdG8kMS5lcmFzTmFtZVJlZ2V4ID0gZXJhc05hbWVSZWdleDtcbiAgICBwcm90byQxLmVyYXNOYXJyb3dSZWdleCA9IGVyYXNOYXJyb3dSZWdleDtcblxuICAgIHByb3RvJDEubW9udGhzID0gbG9jYWxlTW9udGhzO1xuICAgIHByb3RvJDEubW9udGhzU2hvcnQgPSBsb2NhbGVNb250aHNTaG9ydDtcbiAgICBwcm90byQxLm1vbnRoc1BhcnNlID0gbG9jYWxlTW9udGhzUGFyc2U7XG4gICAgcHJvdG8kMS5tb250aHNSZWdleCA9IG1vbnRoc1JlZ2V4O1xuICAgIHByb3RvJDEubW9udGhzU2hvcnRSZWdleCA9IG1vbnRoc1Nob3J0UmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrID0gbG9jYWxlV2VlaztcbiAgICBwcm90byQxLmZpcnN0RGF5T2ZZZWFyID0gbG9jYWxlRmlyc3REYXlPZlllYXI7XG4gICAgcHJvdG8kMS5maXJzdERheU9mV2VlayA9IGxvY2FsZUZpcnN0RGF5T2ZXZWVrO1xuXG4gICAgcHJvdG8kMS53ZWVrZGF5cyA9IGxvY2FsZVdlZWtkYXlzO1xuICAgIHByb3RvJDEud2Vla2RheXNNaW4gPSBsb2NhbGVXZWVrZGF5c01pbjtcbiAgICBwcm90byQxLndlZWtkYXlzU2hvcnQgPSBsb2NhbGVXZWVrZGF5c1Nob3J0O1xuICAgIHByb3RvJDEud2Vla2RheXNQYXJzZSA9IGxvY2FsZVdlZWtkYXlzUGFyc2U7XG5cbiAgICBwcm90byQxLndlZWtkYXlzUmVnZXggPSB3ZWVrZGF5c1JlZ2V4O1xuICAgIHByb3RvJDEud2Vla2RheXNTaG9ydFJlZ2V4ID0gd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgIHByb3RvJDEud2Vla2RheXNNaW5SZWdleCA9IHdlZWtkYXlzTWluUmVnZXg7XG5cbiAgICBwcm90byQxLmlzUE0gPSBsb2NhbGVJc1BNO1xuICAgIHByb3RvJDEubWVyaWRpZW0gPSBsb2NhbGVNZXJpZGllbTtcblxuICAgIGZ1bmN0aW9uIGdldCQxKGZvcm1hdCwgaW5kZXgsIGZpZWxkLCBzZXR0ZXIpIHtcbiAgICAgICAgdmFyIGxvY2FsZSA9IGdldExvY2FsZSgpLFxuICAgICAgICAgICAgdXRjID0gY3JlYXRlVVRDKCkuc2V0KHNldHRlciwgaW5kZXgpO1xuICAgICAgICByZXR1cm4gbG9jYWxlW2ZpZWxkXSh1dGMsIGZvcm1hdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRoc0ltcGwoZm9ybWF0LCBpbmRleCwgZmllbGQpIHtcbiAgICAgICAgaWYgKGlzTnVtYmVyKGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuXG4gICAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0JDEoZm9ybWF0LCBpbmRleCwgZmllbGQsICdtb250aCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBvdXQgPSBbXTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIG91dFtpXSA9IGdldCQxKGZvcm1hdCwgaSwgZmllbGQsICdtb250aCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgLy8gKClcbiAgICAvLyAoNSlcbiAgICAvLyAoZm10LCA1KVxuICAgIC8vIChmbXQpXG4gICAgLy8gKHRydWUpXG4gICAgLy8gKHRydWUsIDUpXG4gICAgLy8gKHRydWUsIGZtdCwgNSlcbiAgICAvLyAodHJ1ZSwgZm10KVxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCBmaWVsZCkge1xuICAgICAgICBpZiAodHlwZW9mIGxvY2FsZVNvcnRlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9ybWF0ID0gbG9jYWxlU29ydGVkO1xuICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICBsb2NhbGVTb3J0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGlzTnVtYmVyKGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2NhbGUgPSBnZXRMb2NhbGUoKSxcbiAgICAgICAgICAgIHNoaWZ0ID0gbG9jYWxlU29ydGVkID8gbG9jYWxlLl93ZWVrLmRvdyA6IDAsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgb3V0ID0gW107XG5cbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQkMShmb3JtYXQsIChpbmRleCArIHNoaWZ0KSAlIDcsIGZpZWxkLCAnZGF5Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBvdXRbaV0gPSBnZXQkMShmb3JtYXQsIChpICsgc2hpZnQpICUgNywgZmllbGQsICdkYXknKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RNb250aHMoZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdE1vbnRoc0ltcGwoZm9ybWF0LCBpbmRleCwgJ21vbnRocycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RNb250aHNTaG9ydChmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCAnbW9udGhzU2hvcnQnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXMobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzU2hvcnQobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzU2hvcnQnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXNNaW4obG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzTWluJyk7XG4gICAgfVxuXG4gICAgZ2V0U2V0R2xvYmFsTG9jYWxlKCdlbicsIHtcbiAgICAgICAgZXJhczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNpbmNlOiAnMDAwMS0wMS0wMScsXG4gICAgICAgICAgICAgICAgdW50aWw6ICtJbmZpbml0eSxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IDEsXG4gICAgICAgICAgICAgICAgbmFtZTogJ0Fubm8gRG9taW5pJyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICdBRCcsXG4gICAgICAgICAgICAgICAgYWJicjogJ0FEJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcwMDAwLTEyLTMxJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogLUluZmluaXR5LFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnQmVmb3JlIENocmlzdCcsXG4gICAgICAgICAgICAgICAgbmFycm93OiAnQkMnLFxuICAgICAgICAgICAgICAgIGFiYnI6ICdCQycsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0odGh8c3R8bmR8cmQpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgICAgICB0b0ludCgobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAndGgnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAncmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICd0aCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gU2lkZSBlZmZlY3QgaW1wb3J0c1xuXG4gICAgaG9va3MubGFuZyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudC5sYW5nIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlIGluc3RlYWQuJyxcbiAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlXG4gICAgKTtcbiAgICBob29rcy5sYW5nRGF0YSA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudC5sYW5nRGF0YSBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZURhdGEgaW5zdGVhZC4nLFxuICAgICAgICBnZXRMb2NhbGVcbiAgICApO1xuXG4gICAgdmFyIG1hdGhBYnMgPSBNYXRoLmFicztcblxuICAgIGZ1bmN0aW9uIGFicygpIHtcbiAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXG4gICAgICAgIHRoaXMuX21pbGxpc2Vjb25kcyA9IG1hdGhBYnModGhpcy5fbWlsbGlzZWNvbmRzKTtcbiAgICAgICAgdGhpcy5fZGF5cyA9IG1hdGhBYnModGhpcy5fZGF5cyk7XG4gICAgICAgIHRoaXMuX21vbnRocyA9IG1hdGhBYnModGhpcy5fbW9udGhzKTtcblxuICAgICAgICBkYXRhLm1pbGxpc2Vjb25kcyA9IG1hdGhBYnMoZGF0YS5taWxsaXNlY29uZHMpO1xuICAgICAgICBkYXRhLnNlY29uZHMgPSBtYXRoQWJzKGRhdGEuc2Vjb25kcyk7XG4gICAgICAgIGRhdGEubWludXRlcyA9IG1hdGhBYnMoZGF0YS5taW51dGVzKTtcbiAgICAgICAgZGF0YS5ob3VycyA9IG1hdGhBYnMoZGF0YS5ob3Vycyk7XG4gICAgICAgIGRhdGEubW9udGhzID0gbWF0aEFicyhkYXRhLm1vbnRocyk7XG4gICAgICAgIGRhdGEueWVhcnMgPSBtYXRoQWJzKGRhdGEueWVhcnMpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFN1YnRyYWN0JDEoZHVyYXRpb24sIGlucHV0LCB2YWx1ZSwgZGlyZWN0aW9uKSB7XG4gICAgICAgIHZhciBvdGhlciA9IGNyZWF0ZUR1cmF0aW9uKGlucHV0LCB2YWx1ZSk7XG5cbiAgICAgICAgZHVyYXRpb24uX21pbGxpc2Vjb25kcyArPSBkaXJlY3Rpb24gKiBvdGhlci5fbWlsbGlzZWNvbmRzO1xuICAgICAgICBkdXJhdGlvbi5fZGF5cyArPSBkaXJlY3Rpb24gKiBvdGhlci5fZGF5cztcbiAgICAgICAgZHVyYXRpb24uX21vbnRocyArPSBkaXJlY3Rpb24gKiBvdGhlci5fbW9udGhzO1xuXG4gICAgICAgIHJldHVybiBkdXJhdGlvbi5fYnViYmxlKCk7XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydHMgb25seSAyLjAtc3R5bGUgYWRkKDEsICdzJykgb3IgYWRkKGR1cmF0aW9uKVxuICAgIGZ1bmN0aW9uIGFkZCQxKGlucHV0LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYWRkU3VidHJhY3QkMSh0aGlzLCBpbnB1dCwgdmFsdWUsIDEpO1xuICAgIH1cblxuICAgIC8vIHN1cHBvcnRzIG9ubHkgMi4wLXN0eWxlIHN1YnRyYWN0KDEsICdzJykgb3Igc3VidHJhY3QoZHVyYXRpb24pXG4gICAgZnVuY3Rpb24gc3VidHJhY3QkMShpbnB1dCwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGFkZFN1YnRyYWN0JDEodGhpcywgaW5wdXQsIHZhbHVlLCAtMSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzQ2VpbChudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bWJlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWJibGUoKSB7XG4gICAgICAgIHZhciBtaWxsaXNlY29uZHMgPSB0aGlzLl9taWxsaXNlY29uZHMsXG4gICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyxcbiAgICAgICAgICAgIG1vbnRocyA9IHRoaXMuX21vbnRocyxcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLl9kYXRhLFxuICAgICAgICAgICAgc2Vjb25kcyxcbiAgICAgICAgICAgIG1pbnV0ZXMsXG4gICAgICAgICAgICBob3VycyxcbiAgICAgICAgICAgIHllYXJzLFxuICAgICAgICAgICAgbW9udGhzRnJvbURheXM7XG5cbiAgICAgICAgLy8gaWYgd2UgaGF2ZSBhIG1peCBvZiBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgdmFsdWVzLCBidWJibGUgZG93biBmaXJzdFxuICAgICAgICAvLyBjaGVjazogaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvaXNzdWVzLzIxNjZcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAobWlsbGlzZWNvbmRzID49IDAgJiYgZGF5cyA+PSAwICYmIG1vbnRocyA+PSAwKSB8fFxuICAgICAgICAgICAgICAgIChtaWxsaXNlY29uZHMgPD0gMCAmJiBkYXlzIDw9IDAgJiYgbW9udGhzIDw9IDApXG4gICAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgICAgbWlsbGlzZWNvbmRzICs9IGFic0NlaWwobW9udGhzVG9EYXlzKG1vbnRocykgKyBkYXlzKSAqIDg2NGU1O1xuICAgICAgICAgICAgZGF5cyA9IDA7XG4gICAgICAgICAgICBtb250aHMgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGJ1YmJsZXMgdXAgdmFsdWVzLCBzZWUgdGhlIHRlc3RzIGZvclxuICAgICAgICAvLyBleGFtcGxlcyBvZiB3aGF0IHRoYXQgbWVhbnMuXG4gICAgICAgIGRhdGEubWlsbGlzZWNvbmRzID0gbWlsbGlzZWNvbmRzICUgMTAwMDtcblxuICAgICAgICBzZWNvbmRzID0gYWJzRmxvb3IobWlsbGlzZWNvbmRzIC8gMTAwMCk7XG4gICAgICAgIGRhdGEuc2Vjb25kcyA9IHNlY29uZHMgJSA2MDtcblxuICAgICAgICBtaW51dGVzID0gYWJzRmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICAgICAgZGF0YS5taW51dGVzID0gbWludXRlcyAlIDYwO1xuXG4gICAgICAgIGhvdXJzID0gYWJzRmxvb3IobWludXRlcyAvIDYwKTtcbiAgICAgICAgZGF0YS5ob3VycyA9IGhvdXJzICUgMjQ7XG5cbiAgICAgICAgZGF5cyArPSBhYnNGbG9vcihob3VycyAvIDI0KTtcblxuICAgICAgICAvLyBjb252ZXJ0IGRheXMgdG8gbW9udGhzXG4gICAgICAgIG1vbnRoc0Zyb21EYXlzID0gYWJzRmxvb3IoZGF5c1RvTW9udGhzKGRheXMpKTtcbiAgICAgICAgbW9udGhzICs9IG1vbnRoc0Zyb21EYXlzO1xuICAgICAgICBkYXlzIC09IGFic0NlaWwobW9udGhzVG9EYXlzKG1vbnRoc0Zyb21EYXlzKSk7XG5cbiAgICAgICAgLy8gMTIgbW9udGhzIC0+IDEgeWVhclxuICAgICAgICB5ZWFycyA9IGFic0Zsb29yKG1vbnRocyAvIDEyKTtcbiAgICAgICAgbW9udGhzICU9IDEyO1xuXG4gICAgICAgIGRhdGEuZGF5cyA9IGRheXM7XG4gICAgICAgIGRhdGEubW9udGhzID0gbW9udGhzO1xuICAgICAgICBkYXRhLnllYXJzID0geWVhcnM7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGF5c1RvTW9udGhzKGRheXMpIHtcbiAgICAgICAgLy8gNDAwIHllYXJzIGhhdmUgMTQ2MDk3IGRheXMgKHRha2luZyBpbnRvIGFjY291bnQgbGVhcCB5ZWFyIHJ1bGVzKVxuICAgICAgICAvLyA0MDAgeWVhcnMgaGF2ZSAxMiBtb250aHMgPT09IDQ4MDBcbiAgICAgICAgcmV0dXJuIChkYXlzICogNDgwMCkgLyAxNDYwOTc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9udGhzVG9EYXlzKG1vbnRocykge1xuICAgICAgICAvLyB0aGUgcmV2ZXJzZSBvZiBkYXlzVG9Nb250aHNcbiAgICAgICAgcmV0dXJuIChtb250aHMgKiAxNDYwOTcpIC8gNDgwMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcyh1bml0cykge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkYXlzLFxuICAgICAgICAgICAgbW9udGhzLFxuICAgICAgICAgICAgbWlsbGlzZWNvbmRzID0gdGhpcy5fbWlsbGlzZWNvbmRzO1xuXG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuXG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21vbnRoJyB8fCB1bml0cyA9PT0gJ3F1YXJ0ZXInIHx8IHVuaXRzID09PSAneWVhcicpIHtcbiAgICAgICAgICAgIGRheXMgPSB0aGlzLl9kYXlzICsgbWlsbGlzZWNvbmRzIC8gODY0ZTU7XG4gICAgICAgICAgICBtb250aHMgPSB0aGlzLl9tb250aHMgKyBkYXlzVG9Nb250aHMoZGF5cyk7XG4gICAgICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzIC8gMztcbiAgICAgICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRocyAvIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaGFuZGxlIG1pbGxpc2Vjb25kcyBzZXBhcmF0ZWx5IGJlY2F1c2Ugb2YgZmxvYXRpbmcgcG9pbnQgbWF0aCBlcnJvcnMgKGlzc3VlICMxODY3KVxuICAgICAgICAgICAgZGF5cyA9IHRoaXMuX2RheXMgKyBNYXRoLnJvdW5kKG1vbnRoc1RvRGF5cyh0aGlzLl9tb250aHMpKTtcbiAgICAgICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgLyA3ICsgbWlsbGlzZWNvbmRzIC8gNjA0OGU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICsgbWlsbGlzZWNvbmRzIC8gODY0ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICogMjQgKyBtaWxsaXNlY29uZHMgLyAzNmU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICogMTQ0MCArIG1pbGxpc2Vjb25kcyAvIDZlNDtcbiAgICAgICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyAqIDg2NDAwICsgbWlsbGlzZWNvbmRzIC8gMTAwMDtcbiAgICAgICAgICAgICAgICAvLyBNYXRoLmZsb29yIHByZXZlbnRzIGZsb2F0aW5nIHBvaW50IG1hdGggZXJyb3JzIGhlcmVcbiAgICAgICAgICAgICAgICBjYXNlICdtaWxsaXNlY29uZCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKGRheXMgKiA4NjRlNSkgKyBtaWxsaXNlY29uZHM7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHVuaXQgJyArIHVuaXRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VBcyhhbGlhcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXMoYWxpYXMpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciBhc01pbGxpc2Vjb25kcyA9IG1ha2VBcygnbXMnKSxcbiAgICAgICAgYXNTZWNvbmRzID0gbWFrZUFzKCdzJyksXG4gICAgICAgIGFzTWludXRlcyA9IG1ha2VBcygnbScpLFxuICAgICAgICBhc0hvdXJzID0gbWFrZUFzKCdoJyksXG4gICAgICAgIGFzRGF5cyA9IG1ha2VBcygnZCcpLFxuICAgICAgICBhc1dlZWtzID0gbWFrZUFzKCd3JyksXG4gICAgICAgIGFzTW9udGhzID0gbWFrZUFzKCdNJyksXG4gICAgICAgIGFzUXVhcnRlcnMgPSBtYWtlQXMoJ1EnKSxcbiAgICAgICAgYXNZZWFycyA9IG1ha2VBcygneScpLFxuICAgICAgICB2YWx1ZU9mJDEgPSBhc01pbGxpc2Vjb25kcztcblxuICAgIGZ1bmN0aW9uIGNsb25lJDEoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXQkMih1bml0cykge1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpc1t1bml0cyArICdzJ10oKSA6IE5hTjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlR2V0dGVyKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2RhdGFbbmFtZV0gOiBOYU47XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIG1pbGxpc2Vjb25kcyA9IG1ha2VHZXR0ZXIoJ21pbGxpc2Vjb25kcycpLFxuICAgICAgICBzZWNvbmRzID0gbWFrZUdldHRlcignc2Vjb25kcycpLFxuICAgICAgICBtaW51dGVzID0gbWFrZUdldHRlcignbWludXRlcycpLFxuICAgICAgICBob3VycyA9IG1ha2VHZXR0ZXIoJ2hvdXJzJyksXG4gICAgICAgIGRheXMgPSBtYWtlR2V0dGVyKCdkYXlzJyksXG4gICAgICAgIG1vbnRocyA9IG1ha2VHZXR0ZXIoJ21vbnRocycpLFxuICAgICAgICB5ZWFycyA9IG1ha2VHZXR0ZXIoJ3llYXJzJyk7XG5cbiAgICBmdW5jdGlvbiB3ZWVrcygpIHtcbiAgICAgICAgcmV0dXJuIGFic0Zsb29yKHRoaXMuZGF5cygpIC8gNyk7XG4gICAgfVxuXG4gICAgdmFyIHJvdW5kID0gTWF0aC5yb3VuZCxcbiAgICAgICAgdGhyZXNob2xkcyA9IHtcbiAgICAgICAgICAgIHNzOiA0NCwgLy8gYSBmZXcgc2Vjb25kcyB0byBzZWNvbmRzXG4gICAgICAgICAgICBzOiA0NSwgLy8gc2Vjb25kcyB0byBtaW51dGVcbiAgICAgICAgICAgIG06IDQ1LCAvLyBtaW51dGVzIHRvIGhvdXJcbiAgICAgICAgICAgIGg6IDIyLCAvLyBob3VycyB0byBkYXlcbiAgICAgICAgICAgIGQ6IDI2LCAvLyBkYXlzIHRvIG1vbnRoL3dlZWtcbiAgICAgICAgICAgIHc6IG51bGwsIC8vIHdlZWtzIHRvIG1vbnRoXG4gICAgICAgICAgICBNOiAxMSwgLy8gbW9udGhzIHRvIHllYXJcbiAgICAgICAgfTtcblxuICAgIC8vIGhlbHBlciBmdW5jdGlvbiBmb3IgbW9tZW50LmZuLmZyb20sIG1vbWVudC5mbi5mcm9tTm93LCBhbmQgbW9tZW50LmR1cmF0aW9uLmZuLmh1bWFuaXplXG4gICAgZnVuY3Rpb24gc3Vic3RpdHV0ZVRpbWVBZ28oc3RyaW5nLCBudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGlzRnV0dXJlLCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5yZWxhdGl2ZVRpbWUobnVtYmVyIHx8IDEsICEhd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lJDEocG9zTmVnRHVyYXRpb24sIHdpdGhvdXRTdWZmaXgsIHRocmVzaG9sZHMsIGxvY2FsZSkge1xuICAgICAgICB2YXIgZHVyYXRpb24gPSBjcmVhdGVEdXJhdGlvbihwb3NOZWdEdXJhdGlvbikuYWJzKCksXG4gICAgICAgICAgICBzZWNvbmRzID0gcm91bmQoZHVyYXRpb24uYXMoJ3MnKSksXG4gICAgICAgICAgICBtaW51dGVzID0gcm91bmQoZHVyYXRpb24uYXMoJ20nKSksXG4gICAgICAgICAgICBob3VycyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdoJykpLFxuICAgICAgICAgICAgZGF5cyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdkJykpLFxuICAgICAgICAgICAgbW9udGhzID0gcm91bmQoZHVyYXRpb24uYXMoJ00nKSksXG4gICAgICAgICAgICB3ZWVrcyA9IHJvdW5kKGR1cmF0aW9uLmFzKCd3JykpLFxuICAgICAgICAgICAgeWVhcnMgPSByb3VuZChkdXJhdGlvbi5hcygneScpKSxcbiAgICAgICAgICAgIGEgPVxuICAgICAgICAgICAgICAgIChzZWNvbmRzIDw9IHRocmVzaG9sZHMuc3MgJiYgWydzJywgc2Vjb25kc10pIHx8XG4gICAgICAgICAgICAgICAgKHNlY29uZHMgPCB0aHJlc2hvbGRzLnMgJiYgWydzcycsIHNlY29uZHNdKSB8fFxuICAgICAgICAgICAgICAgIChtaW51dGVzIDw9IDEgJiYgWydtJ10pIHx8XG4gICAgICAgICAgICAgICAgKG1pbnV0ZXMgPCB0aHJlc2hvbGRzLm0gJiYgWydtbScsIG1pbnV0ZXNdKSB8fFxuICAgICAgICAgICAgICAgIChob3VycyA8PSAxICYmIFsnaCddKSB8fFxuICAgICAgICAgICAgICAgIChob3VycyA8IHRocmVzaG9sZHMuaCAmJiBbJ2hoJywgaG91cnNdKSB8fFxuICAgICAgICAgICAgICAgIChkYXlzIDw9IDEgJiYgWydkJ10pIHx8XG4gICAgICAgICAgICAgICAgKGRheXMgPCB0aHJlc2hvbGRzLmQgJiYgWydkZCcsIGRheXNdKTtcblxuICAgICAgICBpZiAodGhyZXNob2xkcy53ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGEgPVxuICAgICAgICAgICAgICAgIGEgfHxcbiAgICAgICAgICAgICAgICAod2Vla3MgPD0gMSAmJiBbJ3cnXSkgfHxcbiAgICAgICAgICAgICAgICAod2Vla3MgPCB0aHJlc2hvbGRzLncgJiYgWyd3dycsIHdlZWtzXSk7XG4gICAgICAgIH1cbiAgICAgICAgYSA9IGEgfHxcbiAgICAgICAgICAgIChtb250aHMgPD0gMSAmJiBbJ00nXSkgfHxcbiAgICAgICAgICAgIChtb250aHMgPCB0aHJlc2hvbGRzLk0gJiYgWydNTScsIG1vbnRoc10pIHx8XG4gICAgICAgICAgICAoeWVhcnMgPD0gMSAmJiBbJ3knXSkgfHwgWyd5eScsIHllYXJzXTtcblxuICAgICAgICBhWzJdID0gd2l0aG91dFN1ZmZpeDtcbiAgICAgICAgYVszXSA9ICtwb3NOZWdEdXJhdGlvbiA+IDA7XG4gICAgICAgIGFbNF0gPSBsb2NhbGU7XG4gICAgICAgIHJldHVybiBzdWJzdGl0dXRlVGltZUFnby5hcHBseShudWxsLCBhKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IHRoZSByb3VuZGluZyBmdW5jdGlvbiBmb3IgcmVsYXRpdmUgdGltZSBzdHJpbmdzXG4gICAgZnVuY3Rpb24gZ2V0U2V0UmVsYXRpdmVUaW1lUm91bmRpbmcocm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICBpZiAocm91bmRpbmdGdW5jdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcm91bmQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiByb3VuZGluZ0Z1bmN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByb3VuZCA9IHJvdW5kaW5nRnVuY3Rpb247XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIHNldCBhIHRocmVzaG9sZCBmb3IgcmVsYXRpdmUgdGltZSBzdHJpbmdzXG4gICAgZnVuY3Rpb24gZ2V0U2V0UmVsYXRpdmVUaW1lVGhyZXNob2xkKHRocmVzaG9sZCwgbGltaXQpIHtcbiAgICAgICAgaWYgKHRocmVzaG9sZHNbdGhyZXNob2xkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbWl0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJlc2hvbGRzW3RocmVzaG9sZF07XG4gICAgICAgIH1cbiAgICAgICAgdGhyZXNob2xkc1t0aHJlc2hvbGRdID0gbGltaXQ7XG4gICAgICAgIGlmICh0aHJlc2hvbGQgPT09ICdzJykge1xuICAgICAgICAgICAgdGhyZXNob2xkcy5zcyA9IGxpbWl0IC0gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBodW1hbml6ZShhcmdXaXRoU3VmZml4LCBhcmdUaHJlc2hvbGRzKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdpdGhTdWZmaXggPSBmYWxzZSxcbiAgICAgICAgICAgIHRoID0gdGhyZXNob2xkcyxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgIG91dHB1dDtcblxuICAgICAgICBpZiAodHlwZW9mIGFyZ1dpdGhTdWZmaXggPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBhcmdUaHJlc2hvbGRzID0gYXJnV2l0aFN1ZmZpeDtcbiAgICAgICAgICAgIGFyZ1dpdGhTdWZmaXggPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFyZ1dpdGhTdWZmaXggPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgd2l0aFN1ZmZpeCA9IGFyZ1dpdGhTdWZmaXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhcmdUaHJlc2hvbGRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdGggPSBPYmplY3QuYXNzaWduKHt9LCB0aHJlc2hvbGRzLCBhcmdUaHJlc2hvbGRzKTtcbiAgICAgICAgICAgIGlmIChhcmdUaHJlc2hvbGRzLnMgIT0gbnVsbCAmJiBhcmdUaHJlc2hvbGRzLnNzID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aC5zcyA9IGFyZ1RocmVzaG9sZHMucyAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhbGUgPSB0aGlzLmxvY2FsZURhdGEoKTtcbiAgICAgICAgb3V0cHV0ID0gcmVsYXRpdmVUaW1lJDEodGhpcywgIXdpdGhTdWZmaXgsIHRoLCBsb2NhbGUpO1xuXG4gICAgICAgIGlmICh3aXRoU3VmZml4KSB7XG4gICAgICAgICAgICBvdXRwdXQgPSBsb2NhbGUucGFzdEZ1dHVyZSgrdGhpcywgb3V0cHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsb2NhbGUucG9zdGZvcm1hdChvdXRwdXQpO1xuICAgIH1cblxuICAgIHZhciBhYnMkMSA9IE1hdGguYWJzO1xuXG4gICAgZnVuY3Rpb24gc2lnbih4KSB7XG4gICAgICAgIHJldHVybiAoeCA+IDApIC0gKHggPCAwKSB8fCAreDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0lTT1N0cmluZyQxKCkge1xuICAgICAgICAvLyBmb3IgSVNPIHN0cmluZ3Mgd2UgZG8gbm90IHVzZSB0aGUgbm9ybWFsIGJ1YmJsaW5nIHJ1bGVzOlxuICAgICAgICAvLyAgKiBtaWxsaXNlY29uZHMgYnViYmxlIHVwIHVudGlsIHRoZXkgYmVjb21lIGhvdXJzXG4gICAgICAgIC8vICAqIGRheXMgZG8gbm90IGJ1YmJsZSBhdCBhbGxcbiAgICAgICAgLy8gICogbW9udGhzIGJ1YmJsZSB1cCB1bnRpbCB0aGV5IGJlY29tZSB5ZWFyc1xuICAgICAgICAvLyBUaGlzIGlzIGJlY2F1c2UgdGhlcmUgaXMgbm8gY29udGV4dC1mcmVlIGNvbnZlcnNpb24gYmV0d2VlbiBob3VycyBhbmQgZGF5c1xuICAgICAgICAvLyAodGhpbmsgb2YgY2xvY2sgY2hhbmdlcylcbiAgICAgICAgLy8gYW5kIGFsc28gbm90IGJldHdlZW4gZGF5cyBhbmQgbW9udGhzICgyOC0zMSBkYXlzIHBlciBtb250aClcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2Vjb25kcyA9IGFicyQxKHRoaXMuX21pbGxpc2Vjb25kcykgLyAxMDAwLFxuICAgICAgICAgICAgZGF5cyA9IGFicyQxKHRoaXMuX2RheXMpLFxuICAgICAgICAgICAgbW9udGhzID0gYWJzJDEodGhpcy5fbW9udGhzKSxcbiAgICAgICAgICAgIG1pbnV0ZXMsXG4gICAgICAgICAgICBob3VycyxcbiAgICAgICAgICAgIHllYXJzLFxuICAgICAgICAgICAgcyxcbiAgICAgICAgICAgIHRvdGFsID0gdGhpcy5hc1NlY29uZHMoKSxcbiAgICAgICAgICAgIHRvdGFsU2lnbixcbiAgICAgICAgICAgIHltU2lnbixcbiAgICAgICAgICAgIGRheXNTaWduLFxuICAgICAgICAgICAgaG1zU2lnbjtcblxuICAgICAgICBpZiAoIXRvdGFsKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIHRoZSBzYW1lIGFzIEMjJ3MgKE5vZGEpIGFuZCBweXRob24gKGlzb2RhdGUpLi4uXG4gICAgICAgICAgICAvLyBidXQgbm90IG90aGVyIEpTIChnb29nLmRhdGUpXG4gICAgICAgICAgICByZXR1cm4gJ1AwRCc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAzNjAwIHNlY29uZHMgLT4gNjAgbWludXRlcyAtPiAxIGhvdXJcbiAgICAgICAgbWludXRlcyA9IGFic0Zsb29yKHNlY29uZHMgLyA2MCk7XG4gICAgICAgIGhvdXJzID0gYWJzRmxvb3IobWludXRlcyAvIDYwKTtcbiAgICAgICAgc2Vjb25kcyAlPSA2MDtcbiAgICAgICAgbWludXRlcyAlPSA2MDtcblxuICAgICAgICAvLyAxMiBtb250aHMgLT4gMSB5ZWFyXG4gICAgICAgIHllYXJzID0gYWJzRmxvb3IobW9udGhzIC8gMTIpO1xuICAgICAgICBtb250aHMgJT0gMTI7XG5cbiAgICAgICAgLy8gaW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2RvcmRpbGxlL21vbWVudC1pc29kdXJhdGlvbi9ibG9iL21hc3Rlci9tb21lbnQuaXNvZHVyYXRpb24uanNcbiAgICAgICAgcyA9IHNlY29uZHMgPyBzZWNvbmRzLnRvRml4ZWQoMykucmVwbGFjZSgvXFwuPzArJC8sICcnKSA6ICcnO1xuXG4gICAgICAgIHRvdGFsU2lnbiA9IHRvdGFsIDwgMCA/ICctJyA6ICcnO1xuICAgICAgICB5bVNpZ24gPSBzaWduKHRoaXMuX21vbnRocykgIT09IHNpZ24odG90YWwpID8gJy0nIDogJyc7XG4gICAgICAgIGRheXNTaWduID0gc2lnbih0aGlzLl9kYXlzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcbiAgICAgICAgaG1zU2lnbiA9IHNpZ24odGhpcy5fbWlsbGlzZWNvbmRzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdG90YWxTaWduICtcbiAgICAgICAgICAgICdQJyArXG4gICAgICAgICAgICAoeWVhcnMgPyB5bVNpZ24gKyB5ZWFycyArICdZJyA6ICcnKSArXG4gICAgICAgICAgICAobW9udGhzID8geW1TaWduICsgbW9udGhzICsgJ00nIDogJycpICtcbiAgICAgICAgICAgIChkYXlzID8gZGF5c1NpZ24gKyBkYXlzICsgJ0QnIDogJycpICtcbiAgICAgICAgICAgIChob3VycyB8fCBtaW51dGVzIHx8IHNlY29uZHMgPyAnVCcgOiAnJykgK1xuICAgICAgICAgICAgKGhvdXJzID8gaG1zU2lnbiArIGhvdXJzICsgJ0gnIDogJycpICtcbiAgICAgICAgICAgIChtaW51dGVzID8gaG1zU2lnbiArIG1pbnV0ZXMgKyAnTScgOiAnJykgK1xuICAgICAgICAgICAgKHNlY29uZHMgPyBobXNTaWduICsgcyArICdTJyA6ICcnKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHZhciBwcm90byQyID0gRHVyYXRpb24ucHJvdG90eXBlO1xuXG4gICAgcHJvdG8kMi5pc1ZhbGlkID0gaXNWYWxpZCQxO1xuICAgIHByb3RvJDIuYWJzID0gYWJzO1xuICAgIHByb3RvJDIuYWRkID0gYWRkJDE7XG4gICAgcHJvdG8kMi5zdWJ0cmFjdCA9IHN1YnRyYWN0JDE7XG4gICAgcHJvdG8kMi5hcyA9IGFzO1xuICAgIHByb3RvJDIuYXNNaWxsaXNlY29uZHMgPSBhc01pbGxpc2Vjb25kcztcbiAgICBwcm90byQyLmFzU2Vjb25kcyA9IGFzU2Vjb25kcztcbiAgICBwcm90byQyLmFzTWludXRlcyA9IGFzTWludXRlcztcbiAgICBwcm90byQyLmFzSG91cnMgPSBhc0hvdXJzO1xuICAgIHByb3RvJDIuYXNEYXlzID0gYXNEYXlzO1xuICAgIHByb3RvJDIuYXNXZWVrcyA9IGFzV2Vla3M7XG4gICAgcHJvdG8kMi5hc01vbnRocyA9IGFzTW9udGhzO1xuICAgIHByb3RvJDIuYXNRdWFydGVycyA9IGFzUXVhcnRlcnM7XG4gICAgcHJvdG8kMi5hc1llYXJzID0gYXNZZWFycztcbiAgICBwcm90byQyLnZhbHVlT2YgPSB2YWx1ZU9mJDE7XG4gICAgcHJvdG8kMi5fYnViYmxlID0gYnViYmxlO1xuICAgIHByb3RvJDIuY2xvbmUgPSBjbG9uZSQxO1xuICAgIHByb3RvJDIuZ2V0ID0gZ2V0JDI7XG4gICAgcHJvdG8kMi5taWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHM7XG4gICAgcHJvdG8kMi5zZWNvbmRzID0gc2Vjb25kcztcbiAgICBwcm90byQyLm1pbnV0ZXMgPSBtaW51dGVzO1xuICAgIHByb3RvJDIuaG91cnMgPSBob3VycztcbiAgICBwcm90byQyLmRheXMgPSBkYXlzO1xuICAgIHByb3RvJDIud2Vla3MgPSB3ZWVrcztcbiAgICBwcm90byQyLm1vbnRocyA9IG1vbnRocztcbiAgICBwcm90byQyLnllYXJzID0geWVhcnM7XG4gICAgcHJvdG8kMi5odW1hbml6ZSA9IGh1bWFuaXplO1xuICAgIHByb3RvJDIudG9JU09TdHJpbmcgPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIudG9TdHJpbmcgPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIudG9KU09OID0gdG9JU09TdHJpbmckMTtcbiAgICBwcm90byQyLmxvY2FsZSA9IGxvY2FsZTtcbiAgICBwcm90byQyLmxvY2FsZURhdGEgPSBsb2NhbGVEYXRhO1xuXG4gICAgcHJvdG8kMi50b0lzb1N0cmluZyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ3RvSXNvU3RyaW5nKCkgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB0b0lTT1N0cmluZygpIGluc3RlYWQgKG5vdGljZSB0aGUgY2FwaXRhbHMpJyxcbiAgICAgICAgdG9JU09TdHJpbmckMVxuICAgICk7XG4gICAgcHJvdG8kMi5sYW5nID0gbGFuZztcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdYJywgMCwgMCwgJ3VuaXgnKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneCcsIDAsIDAsICd2YWx1ZU9mJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCd4JywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1gnLCBtYXRjaFRpbWVzdGFtcCk7XG4gICAgYWRkUGFyc2VUb2tlbignWCcsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShwYXJzZUZsb2F0KGlucHV0KSAqIDEwMDApO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ3gnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUodG9JbnQoaW5wdXQpKTtcbiAgICB9KTtcblxuICAgIC8vISBtb21lbnQuanNcblxuICAgIGhvb2tzLnZlcnNpb24gPSAnMi4zMC4xJztcblxuICAgIHNldEhvb2tDYWxsYmFjayhjcmVhdGVMb2NhbCk7XG5cbiAgICBob29rcy5mbiA9IHByb3RvO1xuICAgIGhvb2tzLm1pbiA9IG1pbjtcbiAgICBob29rcy5tYXggPSBtYXg7XG4gICAgaG9va3Mubm93ID0gbm93O1xuICAgIGhvb2tzLnV0YyA9IGNyZWF0ZVVUQztcbiAgICBob29rcy51bml4ID0gY3JlYXRlVW5peDtcbiAgICBob29rcy5tb250aHMgPSBsaXN0TW9udGhzO1xuICAgIGhvb2tzLmlzRGF0ZSA9IGlzRGF0ZTtcbiAgICBob29rcy5sb2NhbGUgPSBnZXRTZXRHbG9iYWxMb2NhbGU7XG4gICAgaG9va3MuaW52YWxpZCA9IGNyZWF0ZUludmFsaWQ7XG4gICAgaG9va3MuZHVyYXRpb24gPSBjcmVhdGVEdXJhdGlvbjtcbiAgICBob29rcy5pc01vbWVudCA9IGlzTW9tZW50O1xuICAgIGhvb2tzLndlZWtkYXlzID0gbGlzdFdlZWtkYXlzO1xuICAgIGhvb2tzLnBhcnNlWm9uZSA9IGNyZWF0ZUluWm9uZTtcbiAgICBob29rcy5sb2NhbGVEYXRhID0gZ2V0TG9jYWxlO1xuICAgIGhvb2tzLmlzRHVyYXRpb24gPSBpc0R1cmF0aW9uO1xuICAgIGhvb2tzLm1vbnRoc1Nob3J0ID0gbGlzdE1vbnRoc1Nob3J0O1xuICAgIGhvb2tzLndlZWtkYXlzTWluID0gbGlzdFdlZWtkYXlzTWluO1xuICAgIGhvb2tzLmRlZmluZUxvY2FsZSA9IGRlZmluZUxvY2FsZTtcbiAgICBob29rcy51cGRhdGVMb2NhbGUgPSB1cGRhdGVMb2NhbGU7XG4gICAgaG9va3MubG9jYWxlcyA9IGxpc3RMb2NhbGVzO1xuICAgIGhvb2tzLndlZWtkYXlzU2hvcnQgPSBsaXN0V2Vla2RheXNTaG9ydDtcbiAgICBob29rcy5ub3JtYWxpemVVbml0cyA9IG5vcm1hbGl6ZVVuaXRzO1xuICAgIGhvb2tzLnJlbGF0aXZlVGltZVJvdW5kaW5nID0gZ2V0U2V0UmVsYXRpdmVUaW1lUm91bmRpbmc7XG4gICAgaG9va3MucmVsYXRpdmVUaW1lVGhyZXNob2xkID0gZ2V0U2V0UmVsYXRpdmVUaW1lVGhyZXNob2xkO1xuICAgIGhvb2tzLmNhbGVuZGFyRm9ybWF0ID0gZ2V0Q2FsZW5kYXJGb3JtYXQ7XG4gICAgaG9va3MucHJvdG90eXBlID0gcHJvdG87XG5cbiAgICAvLyBjdXJyZW50bHkgSFRNTDUgaW5wdXQgdHlwZSBvbmx5IHN1cHBvcnRzIDI0LWhvdXIgZm9ybWF0c1xuICAgIGhvb2tzLkhUTUw1X0ZNVCA9IHtcbiAgICAgICAgREFURVRJTUVfTE9DQUw6ICdZWVlZLU1NLUREVEhIOm1tJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIC8+XG4gICAgICAgIERBVEVUSU1FX0xPQ0FMX1NFQ09ORFM6ICdZWVlZLU1NLUREVEhIOm1tOnNzJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIHN0ZXA9XCIxXCIgLz5cbiAgICAgICAgREFURVRJTUVfTE9DQUxfTVM6ICdZWVlZLU1NLUREVEhIOm1tOnNzLlNTUycsIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIiBzdGVwPVwiMC4wMDFcIiAvPlxuICAgICAgICBEQVRFOiAnWVlZWS1NTS1ERCcsIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIC8+XG4gICAgICAgIFRJTUU6ICdISDptbScsIC8vIDxpbnB1dCB0eXBlPVwidGltZVwiIC8+XG4gICAgICAgIFRJTUVfU0VDT05EUzogJ0hIOm1tOnNzJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgc3RlcD1cIjFcIiAvPlxuICAgICAgICBUSU1FX01TOiAnSEg6bW06c3MuU1NTJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgc3RlcD1cIjAuMDAxXCIgLz5cbiAgICAgICAgV0VFSzogJ0dHR0ctW1ddV1cnLCAvLyA8aW5wdXQgdHlwZT1cIndlZWtcIiAvPlxuICAgICAgICBNT05USDogJ1lZWVktTU0nLCAvLyA8aW5wdXQgdHlwZT1cIm1vbnRoXCIgLz5cbiAgICB9O1xuXG4gICAgcmV0dXJuIGhvb2tzO1xuXG59KSkpO1xuIiwiaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50XCI7XG5pbXBvcnQgeyBGZWVkYmFja1Jlc3BvbnNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2xpYnMvYmFja2VuZC1jbGllbnRcIjtcblxuZXhwb3J0IGNvbnN0IEZlZWRiYWNrSXRlbUhvdmVyZWQgPSAoe1xuICBmZWVkYmFjayxcbn06IHtcbiAgZmVlZGJhY2s6IEZlZWRiYWNrUmVzcG9uc2U7XG59KSA9PiB7XG4gIGNvbnN0IHsgdXNlciwgY3JlYXRlZEF0LCBjb21tZW50IH0gPSBmZWVkYmFjaztcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwicC0zXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtYmFzZWxpbmUgZ2FwLTIgei0xMFwiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJrdW1iaC1tZWRpdW0gdGV4dC1zbSB0ZXh0LWdyYXktZmVlZGJhY2stMjAwIHdoaXRlc3BhY2Utbm93cmFwIHotMTBcIj5cbiAgICAgICAgICB7dXNlcj8uZnVsbE5hbWUgfHwgYCR7dXNlcj8uZmlyc3ROYW1lfSAke3VzZXI/Lmxhc3ROYW1lfWB9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwia3VtYmgtcmVndWxhciB0ZXh0LVsxMHB4XSBsZWFkaW5nLVsxMnB4XSB0ZXh0LWdyYXktZmVlZGJhY2stMzAwIHdoaXRlc3BhY2Utbm93cmFwXCI+XG4gICAgICAgICAge21vbWVudChjcmVhdGVkQXQpLmZyb21Ob3coKX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTEgb3ZlcmZsb3ctaGlkZGVuIHctWzI0MHB4XVwiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJrdW1iaC1yZWd1bGFyIHRleHQtWzE2cHhdIGxlYWRpbmctNSB0ZXh0LXdoaXRlIGxpbmUtY2xhbXAtMlwiPlxuICAgICAgICAgIHtjb21tZW50fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iLCJ2YXIgaW1nID0gXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPScyNCcgaGVpZ2h0PScyNScgdmlld0JveD0nMCAwIDI0IDI1JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlJTNjcGF0aCBkPSdNMTguNzA3MSA3LjIwNzExQzE5LjA5NzYgNi44MTY1OCAxOS4wOTc2IDYuMTgzNDIgMTguNzA3MSA1Ljc5Mjg5QzE4LjMxNjYgNS40MDIzNyAxNy42ODM0IDUuNDAyMzcgMTcuMjkyOSA1Ljc5Mjg5TDEyIDExLjA4NThMNi43MDcxMSA1Ljc5Mjg5QzYuMzE2NTggNS40MDIzNyA1LjY4MzQyIDUuNDAyMzcgNS4yOTI4OSA1Ljc5Mjg5QzQuOTAyMzcgNi4xODM0MiA0LjkwMjM3IDYuODE2NTggNS4yOTI4OSA3LjIwNzExTDEwLjU4NTggMTIuNUw1LjI5Mjg5IDE3Ljc5MjlDNC45MDIzNyAxOC4xODM0IDQuOTAyMzcgMTguODE2NiA1LjI5Mjg5IDE5LjIwNzFDNS42ODM0MiAxOS41OTc2IDYuMzE2NTggMTkuNTk3NiA2LjcwNzExIDE5LjIwNzFMMTIgMTMuOTE0MkwxNy4yOTI5IDE5LjIwNzFDMTcuNjgzNCAxOS41OTc2IDE4LjMxNjYgMTkuNTk3NiAxOC43MDcxIDE5LjIwNzFDMTkuMDk3NiAxOC44MTY2IDE5LjA5NzYgMTguMTgzNCAxOC43MDcxIDE3Ljc5MjlMMTMuNDE0MiAxMi41TDE4LjcwNzEgNy4yMDcxMVonIGZpbGw9J3doaXRlJy8lM2UlM2Mvc3ZnJTNlXCI7XG4gIGV4cG9ydCBkZWZhdWx0IGltZzsiLCJpbXBvcnQgQ2xvc2UgZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9pY29ucy9jbG9zZS5zdmdcIjtcblxuZXhwb3J0IGNvbnN0IENsb3NlQnV0dG9uID0gKHtcbiAgc2l6ZSxcbiAgb25DbGljayxcbn06IHtcbiAgc2l6ZTogXCJzbWFsbFwiIHwgXCJsYXJnZVwiO1xuICBvbkNsaWNrOiAoKSA9PiB2b2lkO1xufSkgPT4ge1xuICBjb25zdCBzaXplQ2xhc3MgPSBzaXplID09PSBcInNtYWxsXCIgPyBcInctNSBoLTVcIiA6IFwidy02IGgtNlwiO1xuXG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgb25DbGljaygpO1xuICAgICAgfX1cbiAgICA+XG4gICAgICA8aW1nIHNyYz17Q2xvc2V9IGNsYXNzTmFtZT17c2l6ZUNsYXNzfSAvPlxuICAgIDwvYnV0dG9uPlxuICApO1xufTtcbiIsImltcG9ydCBtb21lbnQgZnJvbSBcIm1vbWVudFwiO1xuaW1wb3J0IHtcbiAgRmVlZGJhY2tSZXNwb25zZSxcbiAgUmVwbHlSZXNwb25zZSxcbn0gZnJvbSBcIi4uLy4uLy4uLy4uL2xpYnMvYmFja2VuZC1jbGllbnRcIjtcblxuZXhwb3J0IGNvbnN0IFJlcGx5SXRlbSA9ICh7XG4gIHJlcGx5LFxufToge1xuICByZXBseTogUmVwbHlSZXNwb25zZSB8IEZlZWRiYWNrUmVzcG9uc2U7XG59KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGZsZXgtYmFzZWxpbmUgZ2FwLTJcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwia3VtYmgtbWVkaXVtIHRleHQtc20gdGV4dC1ncmF5LWZlZWRiYWNrLTIwMCB3aGl0ZXNwYWNlLW5vd3JhcCB6LTEwXCI+XG4gICAgICAgICAge3JlcGx5LnVzZXIuZmlyc3ROYW1lfSB7cmVwbHkudXNlci5sYXN0TmFtZX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJrdW1iaC1yZWd1bGFyIHRleHQtWzEwcHhdIGxlYWRpbmctWzEycHhdIHRleHQtZ3JheS1mZWVkYmFjay0zMDAgd2hpdGVzcGFjZS1ub3dyYXBcIj5cbiAgICAgICAgICB7bW9tZW50KHJlcGx5LmNyZWF0ZWRBdCkuZnJvbU5vdygpfVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImt1bWJoLXJlZ3VsYXIgdGV4dC1bMTRweF0gbGVhZGluZy01IHRleHQtd2hpdGVcIj5cbiAgICAgICAge3JlcGx5LmNvbW1lbnR9XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIiwiaW1wb3J0IHsgQ2hhbmdlRXZlbnQsIEtleWJvYXJkRXZlbnQsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuXG5leHBvcnQgY29uc3QgRmVlZGJhY2tUZXh0QXJlYSA9ICh7XG4gIHZhbHVlLFxuICBzZXRWYWx1ZSxcbiAgb25TdWJtaXQsXG4gIGhhbmRsZVJlc2l6ZSxcbiAgaXNBbmltYXRlZCxcbiAgaXNEYXJrLFxufToge1xuICB2YWx1ZTogc3RyaW5nO1xuICBzZXRWYWx1ZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uU3VibWl0OiAodmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgaGFuZGxlUmVzaXplPzogKCkgPT4gdm9pZDtcbiAgaXNBbmltYXRlZD86IGJvb2xlYW47XG4gIGlzRGFyaz86IGJvb2xlYW47XG59KSA9PiB7XG4gIGNvbnN0IHRleHRhcmVhUmVmID0gdXNlUmVmPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KG51bGwpO1xuXG4gIGNvbnN0IFtpc09wZW5pbmcsIHNldElzT3BlbmluZ10gPSB1c2VTdGF0ZShpc0FuaW1hdGVkKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc0FuaW1hdGVkKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGV4dGFyZWFSZWYuY3VycmVudD8uZm9jdXMoKTtcbiAgICAgICAgc2V0SXNPcGVuaW5nKGZhbHNlKTtcbiAgICAgIH0sIDMwMCk7XG4gICAgfVxuICB9LCBbaXNBbmltYXRlZF0pO1xuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IChldmVudDogQ2hhbmdlRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudD4pID0+IHtcbiAgICBzZXRWYWx1ZShldmVudC50YXJnZXQudmFsdWUpO1xuXG4gICAgaWYgKHRleHRhcmVhUmVmLmN1cnJlbnQpIHtcbiAgICAgIGlmIChldmVudC50YXJnZXQudmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICB0ZXh0YXJlYVJlZi5jdXJyZW50LnN0eWxlLmhlaWdodCA9IFwiYXV0b1wiOyAvLyBSZXNldCBoZWlnaHQgdG8gY2FsY3VsYXRlIHNjcm9sbEhlaWdodFxuICAgICAgICB0ZXh0YXJlYVJlZi5jdXJyZW50LnN0eWxlLmhlaWdodCA9IGAke3RleHRhcmVhUmVmLmN1cnJlbnQuc2Nyb2xsSGVpZ2h0fXB4YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRleHRhcmVhUmVmLmN1cnJlbnQuc3R5bGUuaGVpZ2h0ID0gXCIyOXB4XCI7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChoYW5kbGVSZXNpemUpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBoYW5kbGVSZXNpemUoKTtcbiAgICAgIH0sIDEwMCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudD4pID0+IHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSBcIkVudGVyXCIgJiYgIWV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaGFuZGxlU3VibWl0KCk7XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09IFwiRW50ZXJcIiAmJiBldmVudC5zaGlmdEtleSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gKCkgPT4ge1xuICAgIG9uU3VibWl0KHZhbHVlKTtcbiAgICBzZXRWYWx1ZShcIlwiKTtcbiAgICBpZiAoIXRleHRhcmVhUmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICB0ZXh0YXJlYVJlZi5jdXJyZW50LnN0eWxlLmhlaWdodCA9IFwiMjlweFwiO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtgXG4gICAgICAgICR7XG4gICAgICAgICAgdmFsdWUubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyBcImNvbW1lbnQtaW5wdXQtY29udGFpbmVyXCJcbiAgICAgICAgICAgIDogXCJjb21tZW50LWlucHV0LWNvbnRhaW5lci1lbXB0eVwiXG4gICAgICAgIH0gICR7aXNPcGVuaW5nID8gXCJjb21tZW50LWlucHV0LWNvbnRhaW5lci1vcGVuaW5nXCIgOiBcIlwifSAgJHtcbiAgICAgICAgaXNEYXJrID8gXCJiZy1ncmF5LWZlZWRiYWNrLTc1MFwiIDogXCJiZy1ncmF5LWZlZWRiYWNrLTcwMFwiXG4gICAgICB9YH1cbiAgICA+XG4gICAgICA8dGV4dGFyZWFcbiAgICAgICAgcmVmPXt0ZXh0YXJlYVJlZn1cbiAgICAgICAgY2xhc3NOYW1lPXtgY29tbWVudC1pbnB1dCAke1xuICAgICAgICAgIHZhbHVlLmxlbmd0aCA+IDAgPyBcImNvbW1lbnQtaW5wdXQtZmlsbGVkXCIgOiBcIlwiXG4gICAgICAgIH1gfVxuICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgICAgcGxhY2Vob2xkZXI9XCJBam91dGVyIHVuIGNvbW1lbnRhaXJlXCJcbiAgICAgICAgcm93cz17MX1cbiAgICAgIC8+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7dmFsdWUubGVuZ3RoID4gMCA/IFwiYnV0dG9ucy1jb250YWluZXJcIiA6IFwiXCJ9YH0+XG4gICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwiYnV0dG9uLXNlbmRcIiBvbkNsaWNrPXtoYW5kbGVTdWJtaXR9PlxuICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgIGZpbGw9e3ZhbHVlLmxlbmd0aCA+IDAgPyBcIiMwMDg1RkZcIiA6IFwiI2ZmZlwifVxuICAgICAgICAgICAgaGVpZ2h0PVwiMTZcIlxuICAgICAgICAgICAgd2lkdGg9XCIxNlwiXG4gICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcbiAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTUuOTY0LjY4NmEuNS41IDAgMCAwLS42NS0uNjVMLjc2NyA1Ljg1NUguNzY2bC0uNDUyLjE4YS41LjUgMCAwIDAtLjA4Mi44ODdsLjQxLjI2LjAwMS4wMDIgNC45OTUgMy4xNzggMy4xNzggNC45OTUuMDAyLjAwMi4yNi40MWEuNS41IDAgMCAwIC44ODYtLjA4M2w2LTE1Wm0tMS44MzMgMS44OUw2LjYzNyAxMC4wN2wtLjIxNS0uMzM4YS41LjUgMCAwIDAtLjE1NC0uMTU0bC0uMzM4LS4yMTUgNy40OTQtNy40OTQgMS4xNzgtLjQ3MS0uNDcgMS4xNzhaXCIgLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iLCJleHBvcnQgY29uc3QgTWVudUl0ZW0gPSAoe1xuICBsYWJlbCxcbiAgb25DbGljayxcbn06IHtcbiAgbGFiZWw6IHN0cmluZztcbiAgb25DbGljazogKCkgPT4gdm9pZDtcbn0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICBjbGFzc05hbWU9XCJ6LTEgbS0xIHB4LTIgcHktMSBob3ZlcjpiZy1wcmltYXJ5LWZlZWRiYWNrLTQwMCBob3ZlcjpvcGFjaXR5LTEwMCByb3VuZGVkLWxnXCJcbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPVwia3VtYmgtcmVndWxhciB0ZXh0LXNtIHRleHQtd2hpdGVcIj57bGFiZWx9PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICApO1xufTtcbiIsInZhciBpbWcgPSBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzI1JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjUgMjQnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UlM2NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTAuMzMzNSAxMkMxMC4zMzM1IDEwLjg5NTQgMTEuMjI4OSAxMCAxMi4zMzM1IDEwQzEzLjQzODEgMTAgMTQuMzMzNSAxMC44OTU0IDE0LjMzMzUgMTJDMTQuMzMzNSAxMy4xMDQ2IDEzLjQzODEgMTQgMTIuMzMzNSAxNEMxMS4yMjg5IDE0IDEwLjMzMzUgMTMuMTA0NiAxMC4zMzM1IDEyWicgZmlsbD0nd2hpdGUnLyUzZSUzY3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNy4zMzM1IDEyQzE3LjMzMzUgMTAuODk1NCAxOC4yMjg5IDEwIDE5LjMzMzUgMTBDMjAuNDM4MSAxMCAyMS4zMzM1IDEwLjg5NTQgMjEuMzMzNSAxMkMyMS4zMzM1IDEzLjEwNDYgMjAuNDM4MSAxNCAxOS4zMzM1IDE0QzE4LjIyODkgMTQgMTcuMzMzNSAxMy4xMDQ2IDE3LjMzMzUgMTJaJyBmaWxsPSd3aGl0ZScvJTNlJTNjcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTMuMzMzNSAxMkMzLjMzMzUgMTAuODk1NCA0LjIyODkzIDEwIDUuMzMzNSAxMEM2LjQzODA3IDEwIDcuMzMzNSAxMC44OTU0IDcuMzMzNSAxMkM3LjMzMzUgMTMuMTA0NiA2LjQzODA3IDE0IDUuMzMzNSAxNEM0LjIyODkzIDE0IDMuMzMzNSAxMy4xMDQ2IDMuMzMzNSAxMlonIGZpbGw9J3doaXRlJy8lM2UlM2Mvc3ZnJTNlXCI7XG4gIGV4cG9ydCBkZWZhdWx0IGltZzsiLCJpbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tIFwiLi9NZW51SXRlbVwiO1xuaW1wb3J0IHsgdXNlRmVlZGJhY2tDb250ZXh0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbnRleHRzL0ZlZWRiYWNrQ29udGV4dFwiO1xuaW1wb3J0IHtcbiAgdXNlRGVsZXRlRmVlZGJhY2ssXG4gIHVzZVVwZGF0ZUZlZWRiYWNrLFxufSBmcm9tIFwiLi4vLi4vLi4vLi4vc2VydmljZXMvZmVlZGJhY2tcIjtcbmltcG9ydCB7IEZlZWRiYWNrUmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbGlicy9iYWNrZW5kLWNsaWVudFwiO1xuaW1wb3J0IERvdHNIb3Jpem9udGFsIGZyb20gXCIuLi8uLi8uLi8uLi9hc3NldHMvaWNvbnMvZG90cy1ob3Jpem9udGFsLnN2Z1wiO1xuXG5leHBvcnQgY29uc3QgTWVudUJ1dHRvbiA9ICh7XG4gIGZlZWRiYWNrLFxuICBzZXRJc0hvdmVyZWQsXG59OiB7XG4gIGZlZWRiYWNrOiBGZWVkYmFja1Jlc3BvbnNlO1xuICBzZXRJc0hvdmVyZWQ6IChpc0hvdmVyZWQ6IGJvb2xlYW4pID0+IHZvaWQ7XG59KSA9PiB7XG4gIGNvbnN0IFtpc09wZW4sIHNldElzT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHsgcm9vdERpciwgc2V0U2VsZWN0ZWRGZWVkYmFjayB9ID0gdXNlRmVlZGJhY2tDb250ZXh0KCk7XG4gIGNvbnN0IHsgbXV0YXRlOiBkZWxldGVGZWVkYmFjayB9ID0gdXNlRGVsZXRlRmVlZGJhY2soKTtcbiAgY29uc3QgeyBtdXRhdGU6IHVwZGF0ZUZlZWRiYWNrIH0gPSB1c2VVcGRhdGVGZWVkYmFjaygpO1xuXG4gIGNvbnN0IHBhdGggPSBgdnNjb2RlOi8vZmlsZSR7cm9vdERpciArIGZlZWRiYWNrLmVsZW1lbnRJZH1gO1xuXG4gIGNvbnN0IGhhbmRsZVJlc29sdmVGZWVkYmFjayA9ICgpID0+IHtcbiAgICB1cGRhdGVGZWVkYmFjayhcbiAgICAgIHtcbiAgICAgICAgZmVlZGJhY2tJZDogZmVlZGJhY2suaWQsXG4gICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICBpc1Jlc29sdmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgc2V0SXNPcGVuKGZhbHNlKTtcbiAgICAgICAgICBzZXRJc0hvdmVyZWQoZmFsc2UpO1xuICAgICAgICAgIHNldFNlbGVjdGVkRmVlZGJhY2sobnVsbCk7XG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8aW1nXG4gICAgICAgIHNyYz17RG90c0hvcml6b250YWx9XG4gICAgICAgIGNsYXNzTmFtZT1cInctNCBoLTRcIlxuICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRJc09wZW4oKG8pID0+ICFvKX1cbiAgICAgIC8+XG4gICAgICB7aXNPcGVuICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSB0b3AtOCByaWdodC0yIHotMTEgZmxleCBmbGV4LWNvbCAgIGJnLWdyYXktZmVlZGJhY2stODAwIHJvdW5kZWQtbGdcIj5cbiAgICAgICAgICA8TWVudUl0ZW1cbiAgICAgICAgICAgIGxhYmVsPVwiT3V2cmlyIGRhbnMgVlNjb2RlXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgd2luZG93Lm9wZW4ocGF0aCwgXCJfYmxhbmtcIik7XG4gICAgICAgICAgICAgIHNldElzT3BlbihmYWxzZSk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPE1lbnVJdGVtIGxhYmVsPVwiUsOpc29sdVwiIG9uQ2xpY2s9e2hhbmRsZVJlc29sdmVGZWVkYmFja30gLz5cbiAgICAgICAgICA8TWVudUl0ZW1cbiAgICAgICAgICAgIGxhYmVsPVwiU3VwcHJpbWVyXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgZGVsZXRlRmVlZGJhY2soZmVlZGJhY2ssIHtcbiAgICAgICAgICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNldElzT3BlbihmYWxzZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8Lz5cbiAgKTtcbn07XG4iLCJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZUZlZWRiYWNrQ29udGV4dCB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb250ZXh0cy9GZWVkYmFja0NvbnRleHRcIjtcbmltcG9ydCB7IHVzZUNyZWF0ZVJlcGx5IH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NlcnZpY2VzL2ZlZWRiYWNrXCI7XG5pbXBvcnQgeyBDbG9zZUJ1dHRvbiB9IGZyb20gXCIuLi8uLi8uLi9hdG9tcy9idXR0b25zL0Nsb3NlQnV0dG9uXCI7XG5pbXBvcnQgeyBSZXBseUl0ZW0gfSBmcm9tIFwiLi4vLi4vcmVwbGllcy9SZXBseUl0ZW1cIjtcbmltcG9ydCB7IEZlZWRiYWNrVGV4dEFyZWEgfSBmcm9tIFwiLi4vc2hhcmVkL0ZlZWRiYWNrVGV4dEFyZWFcIjtcbmltcG9ydCB7IE1lbnVCdXR0b24gfSBmcm9tIFwiLi4vbWVudS9NZW51QnV0dG9uXCI7XG5pbXBvcnQgeyBGZWVkYmFja1Jlc3BvbnNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2xpYnMvYmFja2VuZC1jbGllbnRcIjtcblxuZXhwb3J0IGNvbnN0IEZlZWRiYWNrSXRlbVNlbGVjdGVkID0gKHtcbiAgZmVlZGJhY2ssXG4gIHNldEZlZWRiYWNrSGVpZ2h0LFxuICBzZXRJc0hvdmVyZWQsXG59OiB7XG4gIGZlZWRiYWNrOiBGZWVkYmFja1Jlc3BvbnNlO1xuICBzZXRGZWVkYmFja0hlaWdodDogKGhlaWdodDogbnVtYmVyKSA9PiB2b2lkO1xuICBzZXRJc0hvdmVyZWQ6IChpc0hvdmVyZWQ6IGJvb2xlYW4pID0+IHZvaWQ7XG59KSA9PiB7XG4gIGNvbnN0IFtyZXBseSwgc2V0UmVwbHldID0gdXNlU3RhdGUoXCJcIik7XG5cbiAgY29uc3QgZmVlZGJhY2tSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKTtcblxuICBjb25zdCB7IG11dGF0ZTogY3JlYXRlUmVwbHkgfSA9IHVzZUNyZWF0ZVJlcGx5KGZlZWRiYWNrLmlkKTtcbiAgY29uc3QgeyBzZXRTZWxlY3RlZEZlZWRiYWNrIH0gPSB1c2VGZWVkYmFja0NvbnRleHQoKTtcblxuICBjb25zdCBoYW5kbGVSZXNpemUgPSAoKSA9PiB7XG4gICAgaWYgKCFmZWVkYmFja1JlZi5jdXJyZW50KSByZXR1cm47XG4gICAgc2V0RmVlZGJhY2tIZWlnaHQoZmVlZGJhY2tSZWYuY3VycmVudC5jbGllbnRIZWlnaHQpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9ICgpID0+IHtcbiAgICBjcmVhdGVSZXBseShyZXBseSk7XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZmVlZGJhY2tSZWYuY3VycmVudCkge1xuICAgICAgc2V0RmVlZGJhY2tIZWlnaHQoZmVlZGJhY2tSZWYuY3VycmVudC5jbGllbnRIZWlnaHQpO1xuICAgIH1cbiAgfSwgW2ZlZWRiYWNrLCBzZXRGZWVkYmFja0hlaWdodF0pO1xuXG4gIGNvbnN0IGhhbmRsZUNsb3NlID0gKCkgPT4ge1xuICAgIHNldElzSG92ZXJlZChmYWxzZSk7XG4gICAgc2V0U2VsZWN0ZWRGZWVkYmFjayhudWxsKTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgcmVmPXtmZWVkYmFja1JlZn0gY2xhc3NOYW1lPVwidy1mdWxsXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBwLTMgIHJlbGF0aXZlIHotMjBcIj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwia3VtYmgtbWVkaXVtIHRleHQtc20gdGV4dC13aGl0ZVwiPkNvbW1lbnRhaXJlPC9zcGFuPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZ2FwLTEgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgPE1lbnVCdXR0b24gZmVlZGJhY2s9e2ZlZWRiYWNrfSBzZXRJc0hvdmVyZWQ9e3NldElzSG92ZXJlZH0gLz5cbiAgICAgICAgICA8Q2xvc2VCdXR0b24gb25DbGljaz17aGFuZGxlQ2xvc2V9IHNpemU9XCJzbWFsbFwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAtM1wiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgb3ZlcmZsb3cteS1hdXRvIG92ZXJmbG93LXgtaGlkZGVuIG1heC1oLVsyMjBweF0gc2Nyb2xsYmFyLWRhcmsgZ2FwLTIgcC0zXCI+XG4gICAgICAgICAge1tmZWVkYmFjaywgLi4uZmVlZGJhY2sucmVwbGllc10ubWFwKChyZXBseSkgPT4gKFxuICAgICAgICAgICAgPFJlcGx5SXRlbSBrZXk9e3JlcGx5LmlkfSByZXBseT17cmVwbHl9IC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm0tM1wiPlxuICAgICAgICAgIDxGZWVkYmFja1RleHRBcmVhXG4gICAgICAgICAgICB2YWx1ZT17cmVwbHl9XG4gICAgICAgICAgICBzZXRWYWx1ZT17c2V0UmVwbHl9XG4gICAgICAgICAgICBvblN1Ym1pdD17aGFuZGxlU3VibWl0fVxuICAgICAgICAgICAgaGFuZGxlUmVzaXplPXtoYW5kbGVSZXNpemV9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iLCJpbXBvcnQgeyBmb3J3YXJkUmVmLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IGNyZWF0ZVBvcnRhbCB9IGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7XG4gIEZlZWRiYWNrQ3JlYXRlRHRvLFxuICBGZWVkYmFja1Jlc3BvbnNlLFxufSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbGlicy9iYWNrZW5kLWNsaWVudFwiO1xuXG5jb25zdCBGRUVEQkFDS19JTlBVVF9XSURUSCA9IDM0ODtcbmNvbnN0IEZFRURCQUNLX0lURU1fV0lEVEggPSAyNTQ7XG5jb25zdCBNQVJHSU4gPSAyNDtcbmNvbnN0IElDT05fV0lEVEggPSA0ODtcblxuZXhwb3J0IGNvbnN0IEZlZWRiYWNrUG9zaXRpb25lciA9IGZvcndhcmRSZWY8XG4gIEhUTUxEaXZFbGVtZW50IHwgbnVsbCxcbiAge1xuICAgIGZlZWRiYWNrOiBGZWVkYmFja1Jlc3BvbnNlIHwgRmVlZGJhY2tDcmVhdGVEdG87XG4gICAgaXNFZGl0aW5nPzogYm9vbGVhbjtcbiAgICBpc1NlbGVjdGVkPzogYm9vbGVhbjtcbiAgICBpc0hvdmVyZWQ/OiBib29sZWFuO1xuICAgIGZlZWRiYWNrSGVpZ2h0PzogbnVtYmVyO1xuICAgIHNldFNob3VsZFJldmVyc2U/OiAoc2hvdWxkUmV2ZXJzZTogYm9vbGVhbikgPT4gdm9pZDtcbiAgICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICB9XG4+KFxuICAoXG4gICAge1xuICAgICAgZmVlZGJhY2ssXG4gICAgICBmZWVkYmFja0hlaWdodCA9IDAsXG4gICAgICBpc0VkaXRpbmcsXG4gICAgICBpc1NlbGVjdGVkLFxuICAgICAgaXNIb3ZlcmVkLFxuICAgICAgc2V0U2hvdWxkUmV2ZXJzZSxcbiAgICAgIGNoaWxkcmVuLFxuICAgIH0sXG4gICAgcmVmXG4gICkgPT4ge1xuICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSB1c2VSZWY8SFRNTEVsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgICBjb25zdCBbcG9zaXRpb24sIHNldFBvc2l0aW9uXSA9IHVzZVN0YXRlKHtcbiAgICAgIGJvdHRvbTogd2luZG93LmlubmVySGVpZ2h0LFxuICAgICAgbGVmdDogMCxcbiAgICB9KTtcbiAgICBjb25zdCBbaXNJbml0aWFsaXplZCwgc2V0SXNJbml0aWFsaXplZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgaGFuZGxlUmVzaXplID0gKCkgPT4ge1xuICAgICAgICBpZiAoIXRhcmdldEVsZW1lbnQgfHwgIXRhcmdldEVsZW1lbnQuY3VycmVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaW1lbnNpb25zID0gdGFyZ2V0RWxlbWVudC5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIGNvbnN0IHsgYm90dG9tLCBsZWZ0LCBpc092ZXJmbG93aW5nWCB9ID0gZ2V0UG9zaXRpb25JbmZvcyh7XG4gICAgICAgICAgZmVlZGJhY2ssXG4gICAgICAgICAgZmVlZGJhY2tIZWlnaHQsXG4gICAgICAgICAgaXNTZWxlY3RlZCxcbiAgICAgICAgICBpc0hvdmVyZWQsXG4gICAgICAgICAgaXNFZGl0aW5nLFxuICAgICAgICAgIGRpbWVuc2lvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNldFBvc2l0aW9uKHtcbiAgICAgICAgICBib3R0b20sXG4gICAgICAgICAgbGVmdCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHNldFNob3VsZFJldmVyc2UpIHNldFNob3VsZFJldmVyc2UoaXNPdmVyZmxvd2luZ1gpO1xuICAgICAgICBzZXRJc0luaXRpYWxpemVkKHRydWUpO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgZWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PihcbiAgICAgICAgYFtkYXRhLXBhdGg9XCIke2ZlZWRiYWNrLmVsZW1lbnRJZH1cIl1gXG4gICAgICApO1xuICAgICAgY29uc3QgZWxlbWVudCA9IGVsZW1lbnRzW2ZlZWRiYWNrLmVsZW1lbnRJbmRleF07XG5cbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIHRhcmdldEVsZW1lbnQuY3VycmVudCA9IGVsZW1lbnQ7XG4gICAgICAgIGhhbmRsZVJlc2l6ZSgpO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBoYW5kbGVSZXNpemUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBoYW5kbGVSZXNpemUpO1xuICAgICAgfTtcbiAgICB9LCBbXG4gICAgICBpc1NlbGVjdGVkLFxuICAgICAgaXNFZGl0aW5nLFxuICAgICAgaXNIb3ZlcmVkLFxuICAgICAgZmVlZGJhY2ssXG4gICAgICBzZXRTaG91bGRSZXZlcnNlLFxuICAgICAgZmVlZGJhY2tIZWlnaHQsXG4gICAgXSk7XG5cbiAgICBpZiAoIXRhcmdldEVsZW1lbnQgfHwgIXRhcmdldEVsZW1lbnQuY3VycmVudCB8fCAhaXNJbml0aWFsaXplZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNyZWF0ZVBvcnRhbChcbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXtyZWZ9XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgICAgICBib3R0b206IHBvc2l0aW9uLmJvdHRvbSxcbiAgICAgICAgICBsZWZ0OiBwb3NpdGlvbi5sZWZ0LFxuICAgICAgICAgIHRyYW5zaXRpb246IFwiYWxsIDAuMjVzIGVhc2UtaW4tb3V0XCIsXG4gICAgICAgICAgekluZGV4OiBpc1NlbGVjdGVkIHx8IGlzSG92ZXJlZCA/IDEwMDAwMDEgOiAxMDAwMDAwLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L2Rpdj4sXG4gICAgICBkb2N1bWVudC5ib2R5XG4gICAgKTtcbiAgfVxuKTtcblxuY29uc3QgZ2V0UG9zaXRpb25JbmZvcyA9ICh7XG4gIGZlZWRiYWNrLFxuICBkaW1lbnNpb25zLFxuICBmZWVkYmFja0hlaWdodCxcbiAgaXNTZWxlY3RlZCxcbiAgaXNIb3ZlcmVkLFxuICBpc0VkaXRpbmcsXG59OiB7XG4gIGZlZWRiYWNrOiBGZWVkYmFja1Jlc3BvbnNlIHwgRmVlZGJhY2tDcmVhdGVEdG87XG4gIGRpbWVuc2lvbnM6IERPTVJlY3Q7XG4gIGZlZWRiYWNrSGVpZ2h0OiBudW1iZXI7XG4gIGlzU2VsZWN0ZWQ/OiBib29sZWFuO1xuICBpc0hvdmVyZWQ/OiBib29sZWFuO1xuICBpc0VkaXRpbmc/OiBib29sZWFuO1xufSkgPT4ge1xuICBjb25zdCB0YXJnZXRXaWR0aCA9IGRpbWVuc2lvbnMud2lkdGggfHwgMDtcbiAgY29uc3QgdGFyZ2V0SGVpZ2h0ID0gZGltZW5zaW9ucy5oZWlnaHQgfHwgMDtcblxuICBjb25zdCB3aWR0aFJhdGlvID0gZmVlZGJhY2suZWxlbWVudFdpZHRoXG4gICAgPyBmZWVkYmFjay5lbGVtZW50V2lkdGggLyB0YXJnZXRXaWR0aFxuICAgIDogMTtcbiAgY29uc3QgaGVpZ2h0UmF0aW8gPSBmZWVkYmFjay5lbGVtZW50SGVpZ2h0XG4gICAgPyBmZWVkYmFjay5lbGVtZW50SGVpZ2h0IC8gdGFyZ2V0SGVpZ2h0XG4gICAgOiAxO1xuXG4gIGNvbnN0IHJlZmVyZW5jZVBvc2l0aW9uTGVmdCA9XG4gICAgZmVlZGJhY2sueCAvIHdpZHRoUmF0aW8gKyBkaW1lbnNpb25zLmxlZnQgKyB3aW5kb3cuc2Nyb2xsWDtcbiAgY29uc3QgcmVmZXJlbmNlUG9zaXRpb25Cb3R0b20gPVxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgLVxuICAgIChmZWVkYmFjay55IC8gaGVpZ2h0UmF0aW8gKyBkaW1lbnNpb25zLnRvcCArIHdpbmRvdy5zY3JvbGxZKTtcblxuICBjb25zdCBmZWVkYmFja1dpZHRoID0gaXNFZGl0aW5nID8gRkVFREJBQ0tfSU5QVVRfV0lEVEggOiBGRUVEQkFDS19JVEVNX1dJRFRIO1xuXG4gIGNvbnN0IGlzT3ZlcmZsb3dpbmdYID1cbiAgICByZWZlcmVuY2VQb3NpdGlvbkxlZnQgKyBmZWVkYmFja1dpZHRoICsgTUFSR0lOID5cbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7XG5cbiAgY29uc3QgaXNPdmVyZmxvd2luZ1kgPVxuICAgIHJlZmVyZW5jZVBvc2l0aW9uQm90dG9tICsgZmVlZGJhY2tIZWlnaHQgPlxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG5cbiAgY29uc3Qgb2Zmc2V0RWRpdGluZyA9IGlzRWRpdGluZyA/IEZFRURCQUNLX0lOUFVUX1dJRFRIIC0gSUNPTl9XSURUSCA6IDA7XG4gIGNvbnN0IG9mZnNldEFjdGl2ZSA9XG4gICAgaXNIb3ZlcmVkIHx8IGlzU2VsZWN0ZWQgPyBGRUVEQkFDS19JVEVNX1dJRFRIIC0gSUNPTl9XSURUSCA6IDA7XG5cbiAgY29uc3QgcG9zaXRpb25Cb3R0b20gPVxuICAgIGlzT3ZlcmZsb3dpbmdZICYmIGlzU2VsZWN0ZWRcbiAgICAgID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCAtIGZlZWRiYWNrSGVpZ2h0IC0gTUFSR0lOXG4gICAgICA6IHJlZmVyZW5jZVBvc2l0aW9uQm90dG9tO1xuXG4gIGNvbnN0IHBvc2l0aW9uTGVmdCA9IGlzT3ZlcmZsb3dpbmdYXG4gICAgPyByZWZlcmVuY2VQb3NpdGlvbkxlZnQgLSBvZmZzZXRFZGl0aW5nIC0gb2Zmc2V0QWN0aXZlXG4gICAgOiByZWZlcmVuY2VQb3NpdGlvbkxlZnQ7XG5cbiAgcmV0dXJuIHtcbiAgICBib3R0b206IHBvc2l0aW9uQm90dG9tLFxuICAgIGxlZnQ6IHBvc2l0aW9uTGVmdCxcbiAgICBpc092ZXJmbG93aW5nWCxcbiAgfTtcbn07XG4iLCJpbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlRmVlZGJhY2tDb250ZXh0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbnRleHRzL0ZlZWRiYWNrQ29udGV4dFwiO1xuaW1wb3J0IHsgZ2V0SW5pdGlhbHMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vdXRpbHMvZ2V0SW5pdGlhbHNcIjtcbmltcG9ydCB7IEZlZWRiYWNrSXRlbUhvdmVyZWQgfSBmcm9tIFwiLi9GZWVkYmFja0l0ZW1Ib3ZlcmVkXCI7XG5pbXBvcnQgeyBGZWVkYmFja0l0ZW1TZWxlY3RlZCB9IGZyb20gXCIuL0ZlZWRiYWNrSXRlbVNlbGVjdGVkXCI7XG5pbXBvcnQgeyBGZWVkYmFja1Bvc2l0aW9uZXIgfSBmcm9tIFwiLi4vc2hhcmVkL0ZlZWRiYWNrUG9zaXRpb25lclwiO1xuaW1wb3J0IHsgRmVlZGJhY2tSZXNwb25zZSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9saWJzL2JhY2tlbmQtY2xpZW50XCI7XG5cbmV4cG9ydCBjb25zdCBGZWVkYmFja1BpbiA9ICh7IGZlZWRiYWNrIH06IHsgZmVlZGJhY2s6IEZlZWRiYWNrUmVzcG9uc2UgfSkgPT4ge1xuICBjb25zdCBbaXNIb3ZlcmVkLCBzZXRJc0hvdmVyZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbZmVlZGJhY2tIZWlnaHQsIHNldEZlZWRiYWNrSGVpZ2h0XSA9IHVzZVN0YXRlKDApO1xuICBjb25zdCB7IHNlbGVjdGVkRmVlZGJhY2ssIHNldFNlbGVjdGVkRmVlZGJhY2sgfSA9IHVzZUZlZWRiYWNrQ29udGV4dCgpO1xuXG4gIGNvbnN0IGluaXRpYWxzID0gZ2V0SW5pdGlhbHMoZmVlZGJhY2sudXNlcik7XG5cbiAgY29uc3QgaXNTZWxlY3RlZCA9IHNlbGVjdGVkRmVlZGJhY2sgJiYgZmVlZGJhY2suaWQgPT09IHNlbGVjdGVkRmVlZGJhY2suaWQ7XG5cbiAgcmV0dXJuIChcbiAgICA8RmVlZGJhY2tQb3NpdGlvbmVyXG4gICAgICBmZWVkYmFjaz17ZmVlZGJhY2t9XG4gICAgICBpc1NlbGVjdGVkPXshIWlzU2VsZWN0ZWR9XG4gICAgICBpc0hvdmVyZWQ9e2lzSG92ZXJlZH1cbiAgICAgIGZlZWRiYWNrSGVpZ2h0PXtpc0hvdmVyZWQgJiYgIWlzU2VsZWN0ZWQgPyA5NiA6IGZlZWRiYWNrSGVpZ2h0fVxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgb25Nb3VzZUVudGVyPXsoKSA9PiBzZXRJc0hvdmVyZWQodHJ1ZSl9XG4gICAgICAgIG9uTW91c2VMZWF2ZT17KCkgPT4gc2V0SXNIb3ZlcmVkKGZhbHNlKX1cbiAgICAgICAgb25DbGljaz17KCkgPT4gc2V0U2VsZWN0ZWRGZWVkYmFjayhmZWVkYmFjayl9XG4gICAgICAgIGNsYXNzTmFtZT17YGZlZWRiYWNrLWl0ZW0gJHtpc1NlbGVjdGVkICYmIFwic2VsZWN0ZWRcIn0gJHtcbiAgICAgICAgICBmZWVkYmFjay5pc1Jlc29sdmVkICYmICFpc0hvdmVyZWQgJiYgIWlzU2VsZWN0ZWQgJiYgXCJvcGFjaXR5LTUwXCJcbiAgICAgICAgfWB9XG4gICAgICA+XG4gICAgICAgIHtpc1NlbGVjdGVkID8gKFxuICAgICAgICAgIDxGZWVkYmFja0l0ZW1TZWxlY3RlZFxuICAgICAgICAgICAgZmVlZGJhY2s9e2ZlZWRiYWNrfVxuICAgICAgICAgICAgc2V0RmVlZGJhY2tIZWlnaHQ9e3NldEZlZWRiYWNrSGVpZ2h0fVxuICAgICAgICAgICAgc2V0SXNIb3ZlcmVkPXtzZXRJc0hvdmVyZWR9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSA6IGlzSG92ZXJlZCA/IChcbiAgICAgICAgICA8RmVlZGJhY2tJdGVtSG92ZXJlZCBmZWVkYmFjaz17ZmVlZGJhY2t9IC8+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtc2hyaW5rLTAganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHctNiBoLTYgbS0zXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXdoaXRlIGZvbnQtbWVkaXVtXCI+e2luaXRpYWxzfTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvRmVlZGJhY2tQb3NpdGlvbmVyPlxuICApO1xufTtcbiIsImltcG9ydCB7IHVzZUZlZWRiYWNrQ29udGV4dCB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb250ZXh0cy9GZWVkYmFja0NvbnRleHRcIjtcbmltcG9ydCB7IEZlZWRiYWNrUGluIH0gZnJvbSBcIi4uL2l0ZW0vRmVlZGJhY2tQaW5cIjtcblxuZXhwb3J0IGNvbnN0IEZlZWRiYWNrUGlucyA9ICgpID0+IHtcbiAgY29uc3QgeyBpc09wZW4sIGZlZWRiYWNrcyB9ID0gdXNlRmVlZGJhY2tDb250ZXh0KCk7XG5cbiAgaWYgKCFpc09wZW4gfHwgIWZlZWRiYWNrcykgcmV0dXJuIG51bGw7XG5cbiAgcmV0dXJuIGZlZWRiYWNrc1xuICAgIC5maWx0ZXIoKGZlZWRiYWNrKSA9PiBmZWVkYmFjay5wYXRoID09PSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUpXG4gICAgLm1hcCgoZmVlZGJhY2spID0+IDxGZWVkYmFja1BpbiBrZXk9e2ZlZWRiYWNrLmlkfSBmZWVkYmFjaz17ZmVlZGJhY2t9IC8+KTtcbn07XG4iLCJleHBvcnQgY29uc3QgQ29tbWVudEljb24gPSAoKSA9PiB7XG4gIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17YGNvbW1lbnQtaWNvbmB9PjwvZGl2Pjtcbn07XG4iLCJpbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlRmVlZGJhY2tDb250ZXh0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbnRleHRzL0ZlZWRiYWNrQ29udGV4dFwiO1xuaW1wb3J0IHsgdXNlQ3JlYXRlRmVlZGJhY2sgfSBmcm9tIFwiLi4vLi4vLi4vLi4vc2VydmljZXMvZmVlZGJhY2tcIjtcbmltcG9ydCB7IENvbW1lbnRJY29uIH0gZnJvbSBcIi4uLy4uLy4uL2F0b21zL2ljb25zL0NvbW1lbnRJY29uXCI7XG5pbXBvcnQgeyBGZWVkYmFja1Bvc2l0aW9uZXIgfSBmcm9tIFwiLi4vc2hhcmVkL0ZlZWRiYWNrUG9zaXRpb25lclwiO1xuaW1wb3J0IHsgRmVlZGJhY2tUZXh0QXJlYSB9IGZyb20gXCIuLi9zaGFyZWQvRmVlZGJhY2tUZXh0QXJlYVwiO1xuXG5leHBvcnQgY29uc3QgRmVlZGJhY2tJbnB1dCA9ICgpID0+IHtcbiAgY29uc3QgeyBuZXdGZWVkYmFjaywgcmVzZXRGZWVkYmFjaywgbmV3RmVlZGJhY2tSZWYgfSA9IHVzZUZlZWRiYWNrQ29udGV4dCgpO1xuICBjb25zdCBbY29tbWVudCwgc2V0Q29tbWVudF0gPSB1c2VTdGF0ZShuZXdGZWVkYmFjaz8uY29tbWVudCB8fCBcIlwiKTtcbiAgY29uc3QgW3Nob3VsZFJldmVyc2UsIHNldFNob3VsZFJldmVyc2VdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IHsgbXV0YXRlOiBjcmVhdGVGZWVkYmFjayB9ID0gdXNlQ3JlYXRlRmVlZGJhY2soKTtcblxuICBjb25zdCBoYW5kbGVTdWJtaXQgPSAoKSA9PiB7XG4gICAgaWYgKCFuZXdGZWVkYmFjaykgcmV0dXJuO1xuICAgIGNyZWF0ZUZlZWRiYWNrKHtcbiAgICAgIC4uLm5ld0ZlZWRiYWNrLFxuICAgICAgeDogbmV3RmVlZGJhY2sueCxcbiAgICAgIHk6IG5ld0ZlZWRiYWNrLnksXG4gICAgICBjb21tZW50LFxuICAgIH0pO1xuICAgIHJlc2V0RmVlZGJhY2soKTtcbiAgfTtcblxuICBpZiAoIW5ld0ZlZWRiYWNrKSByZXR1cm4gbnVsbDtcblxuICByZXR1cm4gKFxuICAgIDxGZWVkYmFja1Bvc2l0aW9uZXJcbiAgICAgIHJlZj17bmV3RmVlZGJhY2tSZWZ9XG4gICAgICBmZWVkYmFjaz17bmV3RmVlZGJhY2t9XG4gICAgICBzZXRTaG91bGRSZXZlcnNlPXtzZXRTaG91bGRSZXZlcnNlfVxuICAgICAgaXNFZGl0aW5nPXt0cnVlfVxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPVwiY29tbWVudC1jb250YWluZXJcIlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGZsZXhEaXJlY3Rpb246IHNob3VsZFJldmVyc2UgPyBcInJvdy1yZXZlcnNlXCIgOiBcInJvd1wiLFxuICAgICAgICAgIGFsaWduSXRlbXM6IGNvbW1lbnQubGVuZ3RoID4gMCA/IFwiZmxleC1zdGFydFwiIDogXCJmbGV4LWVuZFwiLFxuICAgICAgICAgIHRvcDogY29tbWVudC5sZW5ndGggPiAwID8gXCI1MXB4XCIgOiBcIjBweFwiLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8Q29tbWVudEljb24gLz5cbiAgICAgICAgPEZlZWRiYWNrVGV4dEFyZWFcbiAgICAgICAgICB2YWx1ZT17Y29tbWVudH1cbiAgICAgICAgICBzZXRWYWx1ZT17c2V0Q29tbWVudH1cbiAgICAgICAgICBvblN1Ym1pdD17aGFuZGxlU3VibWl0fVxuICAgICAgICAgIGlzQW5pbWF0ZWRcbiAgICAgICAgICBpc0RhcmtcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvRmVlZGJhY2tQb3NpdGlvbmVyPlxuICApO1xufTtcbiIsInZhciBpbWcgPSBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UlM2NwYXRoIGQ9J00xNSAxOEw5IDEyTDE1IDYnIHN0cm9rZT0nJTIzRTZGMkZGJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNlJTNjL3N2ZyUzZVwiO1xuICBleHBvcnQgZGVmYXVsdCBpbWc7IiwidmFyIGltZyA9IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSUzY3BhdGggZD0nTTkgMThMMTUgMTJMOSA2JyBzdHJva2U9JyUyM0U2RjJGRicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLyUzZSUzYy9zdmclM2VcIjtcbiAgZXhwb3J0IGRlZmF1bHQgaW1nOyIsImltcG9ydCBDaGV2cm9uTGVmdCBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2ljb25zL2NoZXZyb24tbGVmdC5zdmdcIjtcbmltcG9ydCBDaGV2cm9uUmlnaHQgZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9pY29ucy9jaGV2cm9uLXJpZ2h0LnN2Z1wiO1xuXG5leHBvcnQgY29uc3QgQ29sbGFwc2VCdXR0b24gPSAoe1xuICBpc0NvbGxhcHNlZCxcbiAgc2V0SXNDb2xsYXBzZWQsXG59OiB7XG4gIGlzQ29sbGFwc2VkOiBib29sZWFuO1xuICBzZXRJc0NvbGxhcHNlZDogUmVhY3QuRGlzcGF0Y2g8UmVhY3QuU2V0U3RhdGVBY3Rpb248Ym9vbGVhbj4+O1xufSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHNldElzQ29sbGFwc2VkKChjKSA9PiAhYyk7XG4gICAgICB9fVxuICAgICAgY2xhc3NOYW1lPVwiaC0xNiB3LTE2IHJvdW5kZWQtZnVsbCBhYnNvbHV0ZSBsZWZ0LVstMzJweF0gYm90dG9tLVsycHhdIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHByLTYgYmctZ3JheS1mZWVkYmFjay04MDBcIlxuICAgID5cbiAgICAgIDxpbWcgc3JjPXtpc0NvbGxhcHNlZCA/IENoZXZyb25MZWZ0IDogQ2hldnJvblJpZ2h0fSAvPlxuICAgIDwvZGl2PlxuICApO1xufTtcbiIsInZhciBpbWcgPSBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UlM2NwYXRoIGQ9J00xNiAxN0wyMSAxMk0yMSAxMkwxNiA3TTIxIDEySDlNMTIgMTdDMTIgMTcuOTMgMTIgMTguMzk1IDExLjg5NzggMTguNzc2NUMxMS42MjA0IDE5LjgxMTcgMTAuODExNyAyMC42MjA0IDkuNzc2NDYgMjAuODk3OEM5LjM5NDk2IDIxIDguOTI5OTcgMjEgOCAyMUg3LjVDNi4xMDIxOCAyMSA1LjQwMzI2IDIxIDQuODUxOTUgMjAuNzcxNkM0LjExNjg3IDIwLjQ2NzIgMy41MzI4NCAxOS44ODMxIDMuMjI4MzYgMTkuMTQ4MUMzIDE4LjU5NjcgMyAxNy44OTc4IDMgMTYuNVY3LjVDMyA2LjEwMjE3IDMgNS40MDMyNiAzLjIyODM2IDQuODUxOTVDMy41MzI4NCA0LjExNjg3IDQuMTE2ODcgMy41MzI4NCA0Ljg1MTk1IDMuMjI4MzZDNS40MDMyNiAzIDYuMTAyMTggMyA3LjUgM0g4QzguOTI5OTcgMyA5LjM5NDk2IDMgOS43NzY0NiAzLjEwMjIyQzEwLjgxMTcgMy4zNzk2MiAxMS42MjA0IDQuMTg4MjcgMTEuODk3OCA1LjIyMzU0QzEyIDUuNjA1MDQgMTIgNi4wNzAwMyAxMiA3JyBzdHJva2U9J3doaXRlJyBzdHJva2Utd2lkdGg9JzEnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNlJTNjL3N2ZyUzZVwiO1xuICBleHBvcnQgZGVmYXVsdCBpbWc7IiwiaW1wb3J0IHsgdXNlTXV0YXRpb24sIHVzZVF1ZXJ5Q2xpZW50IH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1xdWVyeVwiO1xuaW1wb3J0IGFwaSBmcm9tIFwiLi9hcGlcIjtcbmltcG9ydCB7IFNpZ25JbkR0bywgU2lnblVwRHRvIH0gZnJvbSBcIi4uLy4uL2xpYnMvYmFja2VuZC1jbGllbnRcIjtcblxuZXhwb3J0IGNvbnN0IHNpZ25JbiA9IGFzeW5jIChwYXlsb2FkOiBTaWduSW5EdG8pID0+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGkuYXV0aC5hdXRoQ29udHJvbGxlclNpZ25JbihwYXlsb2FkKTtcbiAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJnYWxhZHJpbUZlZWRiYWNrVG9rZW5cIiwgcmVzcG9uc2UuZGF0YS5hY2Nlc3NUb2tlbik7XG4gIHJldHVybiByZXNwb25zZS5kYXRhO1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25VcCA9IGFzeW5jIChwYXlsb2FkOiBTaWduVXBEdG8pID0+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGkuYXV0aC5hdXRoQ29udHJvbGxlclNpZ25VcChwYXlsb2FkKTtcbiAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJnYWxhZHJpbUZlZWRiYWNrVG9rZW5cIiwgcmVzcG9uc2UuZGF0YS5hY2Nlc3NUb2tlbik7XG4gIHJldHVybiByZXNwb25zZS5kYXRhO1xufTtcblxuZXhwb3J0IGNvbnN0IGxvZ291dCA9IGFzeW5jICgpID0+IHtcbiAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJnYWxhZHJpbUZlZWRiYWNrVG9rZW5cIik7XG59O1xuXG5leHBvcnQgY29uc3QgdXNlU2lnbkluID0gKCkgPT4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25Gbjogc2lnbkluLFxuICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgcmV0dXJuIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKCk7XG4gICAgfSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXNlU2lnblVwID0gKCkgPT4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25Gbjogc2lnblVwLFxuICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgcmV0dXJuIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKCk7XG4gICAgfSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXNlTG9nb3V0ID0gKCkgPT4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogbG9nb3V0LFxuICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgcmV0dXJuIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKCk7XG4gICAgfSxcbiAgfSk7XG59O1xuIiwiaW1wb3J0IExvZ291dEljb24gZnJvbSBcIi4uLy4uL2Fzc2V0cy9pY29ucy9sb2ctb3V0LTAyLnN2Z1wiO1xuaW1wb3J0IHsgdXNlTG9nb3V0IH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2F1dGhcIjtcbmltcG9ydCB7IHVzZU1lIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3VzZXJcIjtcblxuZXhwb3J0IGNvbnN0IENvbm5lY3RlZFVzZXIgPSAoKSA9PiB7XG4gIGNvbnN0IHsgZGF0YTogbWUgfSA9IHVzZU1lKCk7XG4gIGNvbnN0IHsgbXV0YXRlOiBsb2dvdXQgfSA9IHVzZUxvZ291dCgpO1xuXG4gIGNvbnN0IGhhbmRsZUxvZ291dCA9ICgpID0+IHtcbiAgICBsb2dvdXQoKTtcbiAgfTtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1yb3cgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiB0ZXh0LWdyYXktZmVlZGJhY2stMjAwIHotMTAgcC0yIHB0LTRcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxwIGNsYXNzTmFtZT1cImt1bWJoLW1lZGl1bSB0ZXh0LXNtIHRleHQtZ3JheS1mZWVkYmFjay0zMDBcIj5cbiAgICAgICAgICB7bWU/LmZ1bGxOYW1lIHx8IGAke21lPy5maXJzdE5hbWV9ICR7bWU/Lmxhc3ROYW1lfWB9XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHAgY2xhc3NOYW1lPVwia3VtYmgtcmVndWxhciB0ZXh0LXhzIGxlYWRpbmctWzEycHhdIHRleHQtZ3JheS1mZWVkYmFjay0zMDBcIj5cbiAgICAgICAgICB7bWU/LmVtYWlsfVxuICAgICAgICA8L3A+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxpbWcgb25DbGljaz17aGFuZGxlTG9nb3V0fSBzcmM9e0xvZ291dEljb259IGNsYXNzTmFtZT1cImN1cnNvci1wb2ludGVyXCIgLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iLCJ2YXIgaW1nID0gXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPScyMCcgaGVpZ2h0PScyMCcgdmlld0JveD0nMCAwIDIwIDIwJyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlJTNjcGF0aCBkPSdNMTcuNSAxNy41TDEzLjg3NSAxMy44NzVNMTUuODMzMyA5LjE2NjY3QzE1LjgzMzMgMTIuODQ4NiAxMi44NDg2IDE1LjgzMzMgOS4xNjY2NyAxNS44MzMzQzUuNDg0NzcgMTUuODMzMyAyLjUgMTIuODQ4NiAyLjUgOS4xNjY2N0MyLjUgNS40ODQ3NyA1LjQ4NDc3IDIuNSA5LjE2NjY3IDIuNUMxMi44NDg2IDIuNSAxNS44MzMzIDUuNDg0NzcgMTUuODMzMyA5LjE2NjY3Wicgc3Ryb2tlPSd3aGl0ZScgc3Ryb2tlLXdpZHRoPScxLjY2NjY3JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLyUzZSUzYy9zdmclM2VcIjtcbiAgZXhwb3J0IGRlZmF1bHQgaW1nOyIsImltcG9ydCBTZWFyY2ggZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9pY29ucy9zZWFyY2guc3ZnXCI7XG5cbmV4cG9ydCBjb25zdCBTZWFyY2hJbnB1dCA9ICh7XG4gIHZhbHVlLFxuICBzZXRWYWx1ZSxcbn06IHtcbiAgdmFsdWU6IHN0cmluZztcbiAgc2V0VmFsdWU6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xufSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsIGJnLWdyYXktZmVlZGJhY2stNzAwIGJvcmRlci1ncmF5LWZlZWRiYWNrLTUwMCByb3VuZGVkLWxnIHB4LTMgcHktMiBmbGV4IGZsZXgtcm93IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgPGltZyBzcmM9e1NlYXJjaH0gY2xhc3NOYW1lPVwidy02IGgtNlwiIC8+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT17XCJ0ZXh0XCJ9XG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRWYWx1ZShlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBiZy1ncmF5LWZlZWRiYWNrLTcwMCBvdXRsaW5lLW5vbmUgYm9yZGVyLW5vbmUgdGV4dC13aGl0ZVwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApO1xufTtcbiIsImltcG9ydCBtb21lbnQgZnJvbSBcIm1vbWVudFwiO1xuaW1wb3J0IHsgdXNlRmVlZGJhY2tDb250ZXh0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbnRleHRzL0ZlZWRiYWNrQ29udGV4dFwiO1xuaW1wb3J0IHsgRmVlZGJhY2tSZXNwb25zZSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9saWJzL2JhY2tlbmQtY2xpZW50XCI7XG5cbmV4cG9ydCBjb25zdCBGZWVkYmFja0xpc3RJdGVtID0gKHtcbiAgZmVlZGJhY2ssXG59OiB7XG4gIGZlZWRiYWNrOiBGZWVkYmFja1Jlc3BvbnNlO1xufSkgPT4ge1xuICBjb25zdCB7IHVzZXIsIGNyZWF0ZWRBdCwgY29tbWVudCwgcGF0aCwgcmVwbGllcywgaXNSZXNvbHZlZCB9ID0gZmVlZGJhY2s7XG4gIGNvbnN0IHsgc2VsZWN0ZWRGZWVkYmFjaywgc2V0U2VsZWN0ZWRGZWVkYmFjaywgbmF2aWdhdGUgfSA9XG4gICAgdXNlRmVlZGJhY2tDb250ZXh0KCk7XG5cbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSBhc3luYyAoKSA9PiB7XG4gICAgc2V0U2VsZWN0ZWRGZWVkYmFjayhmZWVkYmFjayk7XG4gICAgbmF2aWdhdGUoZmVlZGJhY2sucGF0aCk7XG4gIH07XG5cbiAgY29uc3QgcmVwbGllc0NvdW50ID0gcmVwbGllcy5sZW5ndGg7XG5cbiAgY29uc3QgaXNTZWxlY3RlZCA9IHNlbGVjdGVkRmVlZGJhY2sgJiYgZmVlZGJhY2suaWQgPT09IHNlbGVjdGVkRmVlZGJhY2suaWQ7XG5cbiAgY29uc3QgaXNTZWxlY3RlZENsYXNzID0gaXNTZWxlY3RlZFxuICAgID8gXCJiZy1wcmltYXJ5LWZlZWRiYWNrLTYwMFwiXG4gICAgOiBcIiBob3ZlcjpiZy1ncmF5LWZlZWRiYWNrLTcwMFwiO1xuXG4gIGNvbnN0IHRleHRDb2xvckNsYXNzID0gaXNTZWxlY3RlZFxuICAgID8gXCJ0ZXh0LXdoaXRlXCJcbiAgICA6IFwidGV4dC1wcmltYXJ5LWZlZWRiYWNrLTQwMFwiO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtgZmxleCBmbGV4LWNvbCBpdGVtcy1zdGFydCByb3VuZGVkLWxnICR7aXNTZWxlY3RlZENsYXNzfSBwLTIgJHtcbiAgICAgICAgaXNSZXNvbHZlZCA/IFwib3BhY2l0eS02MFwiIDogXCJcIlxuICAgICAgfWB9XG4gICAgICBvbkNsaWNrPXtoYW5kbGVDbGlja31cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1yb3cgaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImt1bWJoLW1lZGl1bSB0ZXh0LXNtIHRleHQtZ3JheS1mZWVkYmFjay0yMDBcIj5cbiAgICAgICAgICB7dXNlcj8uZnVsbE5hbWUgfHwgYCR7dXNlcj8uZmlyc3ROYW1lfSAke3VzZXI/Lmxhc3ROYW1lfWB9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwia3VtYmgtcmVndWxhciB0ZXh0LVsxMHB4XSBsZWFkaW5nLVsxMnB4XSB0ZXh0LWdyYXktZmVlZGJhY2stMzAwXCI+XG4gICAgICAgICAge21vbWVudChjcmVhdGVkQXQpLmZyb21Ob3coKX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJrdW1iaC1yZWd1bGFyIHRleHQteHMgdGV4dC13aGl0ZVwiPntwYXRofTwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm10LTIga3VtYmgtcmVndWxhciB0ZXh0LWJhc2UgdGV4dC13aGl0ZVwiPntjb21tZW50fTwvc3Bhbj5cbiAgICAgIHtyZXBsaWVzQ291bnQgPiAwICYmIChcbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtgbXQtMiBrdW1iaC1yZWd1bGFyIHRleHQteHMgJHt0ZXh0Q29sb3JDbGFzc31gfT5cbiAgICAgICAgICB7cmVwbGllc0NvdW50fSByw6lwb25zZXtyZXBsaWVzQ291bnQgPiAxID8gXCJzXCIgOiBcIlwifVxuICAgICAgICA8L3NwYW4+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufTtcbiIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VGZWVkYmFja0NvbnRleHQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29udGV4dHMvRmVlZGJhY2tDb250ZXh0XCI7XG5pbXBvcnQgeyBTZWFyY2hJbnB1dCB9IGZyb20gXCIuLi8uLi8uLi9hdG9tcy9pbnB1dHMvU2VhcmNoSW5wdXRcIjtcbmltcG9ydCB7IEZlZWRiYWNrTGlzdEl0ZW0gfSBmcm9tIFwiLi4vaXRlbS9GZWVkYmFja0xpc3RJdGVtXCI7XG5cbmV4cG9ydCBjb25zdCBGZWVkYmFja0xpc3QgPSAoKSA9PiB7XG4gIGNvbnN0IHsgZmVlZGJhY2tzIH0gPSB1c2VGZWVkYmFja0NvbnRleHQoKTtcbiAgY29uc3QgW3NlYXJjaCwgc2V0U2VhcmNoXSA9IHVzZVN0YXRlKFwiXCIpO1xuXG4gIGNvbnN0IGZpbHRlcmVkRmVlZGJhY2tzID0gZmVlZGJhY2tzPy5maWx0ZXIoXG4gICAgKGZlZWRiYWNrKSA9PlxuICAgICAgIXNlYXJjaCB8fFxuICAgICAgZmVlZGJhY2sucGF0aC5pbmNsdWRlcyhzZWFyY2gpIHx8XG4gICAgICBmZWVkYmFjay5jb21tZW50LmluY2x1ZGVzKHNlYXJjaClcbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsICBmbGV4IGZsZXgtY29sICBwdC04IG92ZXJmbG93LWhpZGRlbiB6LTEwXCI+XG4gICAgICA8U2VhcmNoSW5wdXQgdmFsdWU9e3NlYXJjaH0gc2V0VmFsdWU9e3NldFNlYXJjaH0gLz5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiIGZsZXggZmxleC1jb2wgZ2FwLTQgbXQtNCBvdmVyZmxvdy15LWF1dG8gc2Nyb2xsYmFyLWhpZGVcIj5cbiAgICAgICAge2ZpbHRlcmVkRmVlZGJhY2tzICYmXG4gICAgICAgICAgZmlsdGVyZWRGZWVkYmFja3MubWFwKChmZWVkYmFjaykgPT4gKFxuICAgICAgICAgICAgPEZlZWRiYWNrTGlzdEl0ZW0ga2V5PXtmZWVkYmFjay5pZH0gZmVlZGJhY2s9e2ZlZWRiYWNrfSAvPlxuICAgICAgICAgICkpfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIiwiaW1wb3J0IHsgdXNlRmVlZGJhY2tDb250ZXh0IH0gZnJvbSBcIi4uLy4uL2NvbnRleHRzL0ZlZWRiYWNrQ29udGV4dFwiO1xuaW1wb3J0IHsgdXNlTWUgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvdXNlclwiO1xuaW1wb3J0IHsgQ29ubmVjdGVkVXNlciB9IGZyb20gXCIuLi9tb2xlY3VsZXMvQ29ubmVjdGVkVXNlclwiO1xuaW1wb3J0IHsgRmVlZGJhY2tMaXN0IH0gZnJvbSBcIi4uL21vbGVjdWxlcy9mZWVkYmFja3MvZ3JvdXAvRmVlZGJhY2tMaXN0XCI7XG5cbmV4cG9ydCBjb25zdCBDb25uZWN0ZWRQYW5lbCA9ICgpID0+IHtcbiAgY29uc3QgeyBkYXRhOiBtZSB9ID0gdXNlTWUoKTtcbiAgY29uc3QgeyBwcm9qZWN0SWQgfSA9IHVzZUZlZWRiYWNrQ29udGV4dCgpO1xuXG4gIGNvbnN0IGlzQ29sbGFib3JhdG9yID0gbWU/LmNvbGxhYm9yYXRpb25zLmZpbmQoXG4gICAgKGNvbGxhYm9yYXRpb24pID0+IGNvbGxhYm9yYXRpb24ucHJvamVjdC5pZCA9PT0gcHJvamVjdElkXG4gICk7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgZmxleC0xIGZsZXggZmxleC1jb2wgaXRlbXMtc3RyZXRjaCBqdXN0aWZ5LWJldHdlZW4gbWF4LWgtW2NhbGMoMTAwdmgtNzJweCldXCI+XG4gICAgICB7aXNDb2xsYWJvcmF0b3IgPyAoXG4gICAgICAgIDxGZWVkYmFja0xpc3QgLz5cbiAgICAgICkgOiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC00XCI+XG4gICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1jZW50ZXIgdGV4dC1ncmF5LWZlZWRiYWNrLTIwMCB0ZXh0LXNtXCI+XG4gICAgICAgICAgICBWb3VzIG4nYXZleiBhY3R1ZWxsZW1lbnQgcGFzIGxlcyBkcm9pdHMgc3VyIGNlIHByb2pldCwgdmV1aWxsZXpcbiAgICAgICAgICAgIGNvbnRhY3RlciB2b3RyZSBwcm9kdWN0IG1hbmFnZXJcbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIDxDb25uZWN0ZWRVc2VyIC8+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIiwiZXhwb3J0IGNvbnN0IElucHV0ID0gKHtcbiAgbGFiZWwsXG4gIHBsYWNlaG9sZGVyLFxuICB0eXBlLFxuICB2YWx1ZSxcbiAgc2V0VmFsdWUsXG59OiB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgc2V0VmFsdWU6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xufSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbFwiPlxuICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImt1bWJoLW1lZGl1bSB0ZXh0LXNtIHRleHQtZ3JheS1mZWVkYmFjay00MDAgbWItWzZweF1cIj5cbiAgICAgICAge2xhYmVsfVxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPXt0eXBlfVxuICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRWYWx1ZShlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCByb3VuZGVkIHRleHQtYmxhY2sgYm9yZGVyIGJvcmRlci1ncmF5LWZlZWRiYWNrLTQwMCBweS0yIHB4LTMgbWItNCBwbGFjZWhvbGRlcjp0ZXh0LWdyYXktZmVlZGJhY2stMzAwXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIiwidmFyIGltZyA9IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMTI3JyBoZWlnaHQ9JzQzJyB2aWV3Qm94PScwIDAgMTI3IDQzJyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlJTNjcGF0aCBkPSdNNy40ODY3MyA4LjA3NzY3QzguNDkxMTEgOC4wNzc2NyA5LjQxODYyIDguMjUzNzIgMTAuMjY5MyA4LjYwNTgyQzExLjEzMDIgOC45NDc1NyAxMS44ODM0IDkuNDM0MyAxMi41MjkxIDEwLjA2NkwxMi42MzY3IDguMzg4MzVIMTYuODE4MlYyMi4xMDQ5QzE2LjgxODIgMjQuMDkzMiAxNi40NDQxIDI1LjgyNzggMTUuNjk2IDI3LjMwODdDMTQuOTU4MSAyOC43ODk2IDEzLjkxNzggMjkuOTM5MiAxMi41NzUyIDMwLjc1NzNDMTEuMjQyOSAzMS41ODU4IDkuNjc0ODQgMzIgNy44NzEwNSAzMkM2Ljg3NjkyIDMyIDUuODIxMyAzMS44NjAyIDQuNzA0MTkgMzEuNTgwNkMzLjU4NzA3IDMxLjMwMSAyLjQ0NDMzIDMwLjg2NiAxLjI3NTk3IDMwLjI3NTdMMi42MTM0NCAyNi41NjMxQzMuMTI1ODcgMjYuOTk4MSAzLjg0MzI5IDI3LjM2NTcgNC43NjU2OCAyNy42NjZDNS42ODgwNyAyNy45NzY3IDYuNTc0NTkgMjguMTMyIDcuNDI1MjMgMjguMTMyQzguOTUyMyAyOC4xMzIgMTAuMTYxNyAyNy42MTQyIDExLjA1MzMgMjYuNTc4NkMxMS45NDQ5IDI1LjU1MzQgMTIuMzkwOCAyNC4xNjU3IDEyLjM5MDggMjIuNDE1NVYyMi4zODQ1QzExLjc0NTEgMjIuOTY0NCAxMS4wMDcyIDIzLjQyMDEgMTAuMTc3IDIzLjc1MTVDOS4zNDY4OCAyNC4wNzI1IDguNDUwMTEgMjQuMjMzIDcuNDg2NzMgMjQuMjMzQzYuMDUxOSAyNC4yMzMgNC43NjU2OCAyMy44ODYxIDMuNjI4MDYgMjMuMTkyMkMyLjUwMDcgMjIuNDg4IDEuNjE0MTggMjEuNTMwMSAwLjk2ODUwOSAyMC4zMTg0QzAuMzIyODM2IDE5LjA5NjQgMCAxNy43MDg3IDAgMTYuMTU1M0MwIDE0LjYwMTkgMC4zMjI4MzYgMTMuMjE5NCAwLjk2ODUwOSAxMi4wMDc4QzEuNjE0MTggMTAuNzg1OCAyLjUwMDcgOS44Mjc4MyAzLjYyODA2IDkuMTMzOThDNC43NjU2OCA4LjQyOTc3IDYuMDUxOSA4LjA3NzY3IDcuNDg2NzMgOC4wNzc2N1pNOC40ODU5OCAyMC4zNDk1QzkuNjEzMzUgMjAuMzQ5NSAxMC41NDYgMTkuOTUwOCAxMS4yODM5IDE5LjE1MzRDMTIuMDIxOCAxOC4zNTYgMTIuMzkwOCAxNy4zNTY2IDEyLjM5MDggMTYuMTU1M0MxMi4zOTA4IDE0Ljk1NCAxMi4wMjE4IDEzLjk1NDcgMTEuMjgzOSAxMy4xNTczQzEwLjU0NiAxMi4zNTk5IDkuNjEzMzUgMTEuOTYxMiA4LjQ4NTk4IDExLjk2MTJDNy4zNTg2MiAxMS45NjEyIDYuNDI1OTggMTIuMzU5OSA1LjY4ODA3IDEzLjE1NzNDNC45NTAxNiAxMy45NTQ3IDQuNTgxMiAxNC45NTQgNC41ODEyIDE2LjE1NTNDNC41ODEyIDE3LjM1NjYgNC45NTAxNiAxOC4zNTYgNS42ODgwNyAxOS4xNTM0QzYuNDI1OTggMTkuOTUwOCA3LjM1ODYyIDIwLjM0OTUgOC40ODU5OCAyMC4zNDk1WicgZmlsbD0nJTIzMDEwQzFFJy8lM2UlM2NwYXRoIGQ9J00xOC45MTkxIDE5LjY1MDVDMTguOTE5MSAxOC42MTQ5IDE5LjIxMTIgMTcuNjg4IDE5Ljc5NTQgMTYuODY5OUMyMC4zODk4IDE2LjA1MTggMjEuMjA0NiAxNS40MDQ1IDIyLjIzOTcgMTQuOTI4MkMyMy4yNzQ4IDE0LjQ1MTggMjQuNDU4NiAxNC4yMTM2IDI1Ljc5MDkgMTQuMjEzNkMyNi4yMTExIDE0LjIxMzYgMjYuNjUxOCAxNC4yMzk1IDI3LjExMyAxNC4yOTEzQzI3LjU4NDQgMTQuMzQzIDI4LjA1NTkgMTQuNDEwNCAyOC41MjczIDE0LjQ5MzJDMjguMTg5MSAxMi44MDUyIDI2Ljk3NDYgMTEuOTYxMiAyNC44ODM5IDExLjk2MTJDMjMuNjQzOCAxMS45NjEyIDIyLjM5ODYgMTIuNDMyNCAyMS4xNDgyIDEzLjM3NDhMMTkuNjI2MyA5LjZDMjAuNjkyMSA5LjA4MjIgMjEuNzQyNiA4LjY5OTAzIDIyLjc3NzggOC40NTA0OUMyMy44MTI5IDguMjAxOTQgMjQuNzk2OCA4LjA3NzY3IDI1LjcyOTQgOC4wNzc2N0MyNy4yMTU1IDguMDc3NjcgMjguNTAxNyA4LjM2MjQ2IDI5LjU4ODEgOC45MzIwNEMzMC42ODQ3IDkuNDkxMjYgMzEuNTM1MyAxMC4yODg3IDMyLjE0IDExLjMyNDNDMzIuNzQ0NyAxMi4zNDk1IDMzLjA0NyAxMy41NTYgMzMuMDQ3IDE0Ljk0MzdWMjMuOTIyM0gyOS4zMjY3TDI5LjAzNDYgMjIuMjYwMkMyOC40NjA3IDIyLjg3MTIgMjcuNzU4NyAyMy4zNTI3IDI2LjkyODUgMjMuNzA0OUMyNi4xMDg2IDI0LjA1NyAyNS4yMDY3IDI0LjIzMyAyNC4yMjI5IDI0LjIzM0MyMi42NjUgMjQuMjMzIDIxLjM4OTEgMjMuODA4NCAyMC4zOTQ5IDIyLjk1OTJDMTkuNDExMSAyMi4xMSAxOC45MTkxIDIxLjAwNzEgMTguOTE5MSAxOS42NTA1Wk0yMy4zNDY2IDE4LjYyNTJDMjMuMzQ2NiAxOS4xNDMgMjMuNTQxMyAxOS41NjI1IDIzLjkzMDggMTkuODgzNUMyNC4zMzA1IDIwLjE5NDIgMjQuODUzMSAyMC4zNDk1IDI1LjQ5ODggMjAuMzQ5NUMyNi4zODAyIDIwLjM0OTUgMjcuMTE4MSAyMC4wODAzIDI3LjcxMjYgMTkuNTQxN0MyOC4zMTcyIDE5LjAwMzIgMjguNjE5NiAxOC4zNDA1IDI4LjYxOTYgMTcuNTUzNFYxNy4yNDI3QzI4LjI0MDQgMTcuMTE4NCAyNy44MzA0IDE3LjAyMDEgMjcuMzg5NyAxNi45NDc2QzI2Ljk1OTMgMTYuODc1MSAyNi41MzM5IDE2LjgzODggMjYuMTEzNyAxNi44Mzg4QzI1LjI0MjYgMTYuODM4OCAyNC41NjExIDE2Ljk5NDIgMjQuMDY5MSAxNy4zMDQ5QzIzLjU4NzQgMTcuNjE1NSAyMy4zNDY2IDE4LjA1NTcgMjMuMzQ2NiAxOC42MjUyWicgZmlsbD0nJTIzMDEwQzFFJy8lM2UlM2NwYXRoIGQ9J00zOS43NzUyIDBWMjMuOTIyM0gzNS4zNDc4VjBIMzkuNzc1MlonIGZpbGw9JyUyMzAxMEMxRScvJTNlJTNjcGF0aCBkPSdNNDEuODc2MSAxOS42NTA1QzQxLjg3NjEgMTguNjE0OSA0Mi4xNjgyIDE3LjY4OCA0Mi43NTI0IDE2Ljg2OTlDNDMuMzQ2OCAxNi4wNTE4IDQ0LjE2MTYgMTUuNDA0NSA0NS4xOTY3IDE0LjkyODJDNDYuMjMxOSAxNC40NTE4IDQ3LjQxNTYgMTQuMjEzNiA0OC43NDc5IDE0LjIxMzZDNDkuMTY4MSAxNC4yMTM2IDQ5LjYwODggMTQuMjM5NSA1MC4wNyAxNC4yOTEzQzUwLjU0MTUgMTQuMzQzIDUxLjAxMjkgMTQuNDEwNCA1MS40ODQzIDE0LjQ5MzJDNTEuMTQ2MSAxMi44MDUyIDQ5LjkzMTcgMTEuOTYxMiA0Ny44NDA5IDExLjk2MTJDNDYuNjAwOCAxMS45NjEyIDQ1LjM1NTYgMTIuNDMyNCA0NC4xMDUyIDEzLjM3NDhMNDIuNTgzMyA5LjZDNDMuNjQ5MiA5LjA4MjIgNDQuNjk5NyA4LjY5OTAzIDQ1LjczNDggOC40NTA0OUM0Ni43Njk5IDguMjAxOTQgNDcuNzUzOCA4LjA3NzY3IDQ4LjY4NjQgOC4wNzc2N0M1MC4xNzI1IDguMDc3NjcgNTEuNDU4NyA4LjM2MjQ2IDUyLjU0NTEgOC45MzIwNEM1My42NDE3IDkuNDkxMjYgNTQuNDkyNCAxMC4yODg3IDU1LjA5NyAxMS4zMjQzQzU1LjcwMTcgMTIuMzQ5NSA1Ni4wMDQxIDEzLjU1NiA1Ni4wMDQxIDE0Ljk0MzdWMjMuOTIyM0g1Mi4yODM4TDUxLjk5MTcgMjIuMjYwMkM1MS40MTc3IDIyLjg3MTIgNTAuNzE1NyAyMy4zNTI3IDQ5Ljg4NTUgMjMuNzA0OUM0OS4wNjU2IDI0LjA1NyA0OC4xNjM3IDI0LjIzMyA0Ny4xNzk5IDI0LjIzM0M0NS42MjIxIDI0LjIzMyA0NC4zNDYxIDIzLjgwODQgNDMuMzUxOSAyMi45NTkyQzQyLjM2ODEgMjIuMTEgNDEuODc2MSAyMS4wMDcxIDQxLjg3NjEgMTkuNjUwNVpNNDYuMzAzNiAxOC42MjUyQzQ2LjMwMzYgMTkuMTQzIDQ2LjQ5ODMgMTkuNTYyNSA0Ni44ODc4IDE5Ljg4MzVDNDcuMjg3NSAyMC4xOTQyIDQ3LjgxMDIgMjAuMzQ5NSA0OC40NTU4IDIwLjM0OTVDNDkuMzM3MiAyMC4zNDk1IDUwLjA3NTEgMjAuMDgwMyA1MC42Njk2IDE5LjU0MTdDNTEuMjc0MiAxOS4wMDMyIDUxLjU3NjYgMTguMzQwNSA1MS41NzY2IDE3LjU1MzRWMTcuMjQyN0M1MS4xOTc0IDE3LjExODQgNTAuNzg3NCAxNy4wMjAxIDUwLjM0NjcgMTYuOTQ3NkM0OS45MTYzIDE2Ljg3NTEgNDkuNDkxIDE2LjgzODggNDkuMDcwOCAxNi44Mzg4QzQ4LjE5OTYgMTYuODM4OCA0Ny41MTgxIDE2Ljk5NDIgNDcuMDI2MSAxNy4zMDQ5QzQ2LjU0NDQgMTcuNjE1NSA0Ni4zMDM2IDE4LjA1NTcgNDYuMzAzNiAxOC42MjUyWicgZmlsbD0nJTIzMDEwQzFFJy8lM2UlM2NwYXRoIGQ9J001Ny4yMjg3IDE2LjE1NTNDNTcuMjI4NyAxNC42MDE5IDU3LjU1MTUgMTMuMjE5NCA1OC4xOTcyIDEyLjAwNzhDNTguODQyOCAxMC43ODU4IDU5LjcyOTQgOS44Mjc4MyA2MC44NTY3IDkuMTMzOThDNjEuOTk0MyA4LjQyOTc3IDYzLjI4MDYgOC4wNzc2NyA2NC43MTU0IDguMDc3NjdDNjUuNjc4OCA4LjA3NzY3IDY2LjU3NTUgOC4yNDMzNyA2Ny40MDU3IDguNTc0NzZDNjguMjM1OCA4Ljg5NTc5IDY4Ljk3MzggOS4zNDYyOCA2OS42MTk0IDkuOTI2MjFWMC42MjEzNTlINzQuMDQ2OVYyMy45MjIzSDY5Ljg2NTRMNjkuNzU3OCAyMi4yNDQ3QzY5LjExMjEgMjIuODc2NCA2OC4zNTg4IDIzLjM2ODMgNjcuNDk3OSAyMy43MjA0QzY2LjY0NzMgMjQuMDYyMSA2NS43MTk4IDI0LjIzMyA2NC43MTU0IDI0LjIzM0M2My4yODA2IDI0LjIzMyA2MS45OTQzIDIzLjg4NjEgNjAuODU2NyAyMy4xOTIyQzU5LjcyOTQgMjIuNDg4IDU4Ljg0MjggMjEuNTMwMSA1OC4xOTcyIDIwLjMxODRDNTcuNTUxNSAxOS4wOTY0IDU3LjIyODcgMTcuNzA4NyA1Ny4yMjg3IDE2LjE1NTNaTTYxLjgwOTkgMTYuMTU1M0M2MS44MDk5IDE3LjM1NjYgNjIuMTc4OCAxOC4zNTYgNjIuOTE2NyAxOS4xNTM0QzYzLjY1NDYgMTkuOTUwOCA2NC41ODczIDIwLjM0OTUgNjUuNzE0NiAyMC4zNDk1QzY2Ljg0MiAyMC4zNDk1IDY3Ljc3NDYgMTkuOTUwOCA2OC41MTI2IDE5LjE1MzRDNjkuMjUwNSAxOC4zNTYgNjkuNjE5NCAxNy4zNTY2IDY5LjYxOTQgMTYuMTU1M0M2OS42MTk0IDE0Ljk1NCA2OS4yNTA1IDEzLjk1NDcgNjguNTEyNiAxMy4xNTczQzY3Ljc3NDYgMTIuMzU5OSA2Ni44NDIgMTEuOTYxMiA2NS43MTQ2IDExLjk2MTJDNjQuNTg3MyAxMS45NjEyIDYzLjY1NDYgMTIuMzU5OSA2Mi45MTY3IDEzLjE1NzNDNjIuMTc4OCAxMy45NTQ3IDYxLjgwOTkgMTQuOTU0IDYxLjgwOTkgMTYuMTU1M1onIGZpbGw9JyUyMzAxMEMxRScvJTNlJTNjcGF0aCBkPSdNNzYuNjM5NyAyMy45MjIzVjguMzg4MzVIODAuNTEzOEw4MC43MjkgMTAuNjA5N0M4MS44NDYxIDguOTIxNjggODMuMzgzNCA4LjA3NzY3IDg1LjM0MDkgOC4wNzc2N0M4Ni4wMDcxIDguMDc3NjcgODYuNjkzOCA4LjE4MTIzIDg3LjQwMDkgOC4zODgzNUw4Ni43ODYgMTIuMjU2M0M4Ni4xOTE2IDEyLjA1OTUgODUuNjA3NCAxMS45NjEyIDg1LjAzMzUgMTEuOTYxMkM4My44NDQ2IDExLjk2MTIgODIuODg2MyAxMi40MDY1IDgyLjE1ODcgMTMuMjk3MUM4MS40MzEgMTQuMTc3MyA4MS4wNjcyIDE1LjQzNTYgODEuMDY3MiAxNy4wNzE4VjIzLjkyMjNINzYuNjM5N1onIGZpbGw9JyUyMzAxMEMxRScvJTNlJTNjcGF0aCBkPSdNODcuMTk1OCAzLjEwNjhDODcuMTk1OCAyLjM2MTE2IDg3LjQyMTMgMS43NjA1MiA4Ny44NzIzIDEuMzA0ODVDODguMzIzMiAwLjg0OTE5MSA4OC45MTc2IDAuNjIxMzU5IDg5LjY1NTUgMC42MjEzNTlDOTAuMzkzNSAwLjYyMTM1OSA5MC45ODc5IDAuODQ5MTkxIDkxLjQzODggMS4zMDQ4NUM5MS44ODk4IDEuNzYwNTIgOTIuMTE1MiAyLjM2MTE2IDkyLjExNTIgMy4xMDY4QzkyLjExNTIgMy44NTI0MyA5MS44ODk4IDQuNDUzMDcgOTEuNDM4OCA0LjkwODc0QzkwLjk4NzkgNS4zNjQ0IDkwLjM5MzUgNS41OTIyMyA4OS42NTU1IDUuNTkyMjNDODguOTE3NiA1LjU5MjIzIDg4LjMyMzIgNS4zNjQ0IDg3Ljg3MjMgNC45MDg3NEM4Ny40MjEzIDQuNDUzMDcgODcuMTk1OCAzLjg1MjQzIDg3LjE5NTggMy4xMDY4Wk04Ny40NDE4IDIzLjkyMjNWOC4zODgzNUg5MS44NjkzVjIzLjkyMjNIODcuNDQxOFonIGZpbGw9JyUyMzAxMEMxRScvJTNlJTNjcGF0aCBkPSdNOTguNjQzNiAyMy45MjIzSDk0LjIxNjFWOC4zODgzNUg5OC4zOTc2TDk4LjUwNTIgMTAuMDM1Qzk5LjU5MTYgOC43MzAxIDEwMS4wNjIgOC4wNzc2NyAxMDIuOTE3IDguMDc3NjdDMTA1LjI4NSA4LjA3NzY3IDEwNi45NiA5LjA5NzczIDEwNy45NDQgMTEuMTM3OUMxMDguNDU3IDEwLjE1NCAxMDkuMTQ5IDkuMzk4MDYgMTEwLjAyIDguODY5OUMxMTAuODkxIDguMzQxNzUgMTExLjkxNiA4LjA3NzY3IDExMy4wOTQgOC4wNzc2N0MxMTQuOTYgOC4wNzc2NyAxMTYuNDEgOC43NDA0NSAxMTcuNDQ1IDEwLjA2NkMxMTguNDggMTEuMzgxMiAxMTguOTk4IDEzLjIxNDIgMTE4Ljk5OCAxNS41NjVWMjMuOTIyM0gxMTQuNTdWMTUuNTY1QzExNC41NyAxNC4zNjM4IDExNC4yODggMTMuNDYyOCAxMTMuNzI1IDEyLjg2MjFDMTEzLjE3MSAxMi4yNjE1IDExMi41IDExLjk2MTIgMTExLjcxMSAxMS45NjEyQzExMC45MTEgMTEuOTYxMiAxMTAuMjMgMTIuMjcxOCAxMDkuNjY2IDEyLjg5MzJDMTA5LjEwMiAxMy41MTQ2IDEwOC44MjEgMTQuNDQxNCAxMDguODIxIDE1LjY3MzhWMjMuOTIyM0gxMDQuMzkzVjE1LjU2NUMxMDQuMzkzIDE0LjM2MzggMTA0LjExMSAxMy40NjI4IDEwMy41NDggMTIuODYyMUMxMDIuOTk0IDEyLjI2MTUgMTAyLjMyMyAxMS45NjEyIDEwMS41MzQgMTEuOTYxMkMxMDAuNzM0IDExLjk2MTIgMTAwLjA1MyAxMi4yNzE4IDk5LjQ4OTEgMTIuODkzMkM5OC45MjU0IDEzLjUxNDYgOTguNjQzNiAxNC40NDE0IDk4LjY0MzYgMTUuNjczOFYyMy45MjIzWicgZmlsbD0nJTIzMDEwQzFFJy8lM2UlM2NwYXRoIGQ9J00xMjEuMjgzIDIxLjc0NzZDMTIxLjI4MyAyMS4wMDE5IDEyMS41MDggMjAuNDAxMyAxMjEuOTU5IDE5Ljk0NTZDMTIyLjQxIDE5LjQ5IDEyMy4wMDUgMTkuMjYyMSAxMjMuNzQzIDE5LjI2MjFDMTI0LjQ4MSAxOS4yNjIxIDEyNS4wNzUgMTkuNDkgMTI1LjUyNiAxOS45NDU2QzEyNS45NzcgMjAuNDAxMyAxMjYuMjAyIDIxLjAwMTkgMTI2LjIwMiAyMS43NDc2QzEyNi4yMDIgMjIuNDkzMiAxMjUuOTc3IDIzLjA5MzkgMTI1LjUyNiAyMy41NDk1QzEyNS4wNzUgMjQuMDA1MiAxMjQuNDgxIDI0LjIzMyAxMjMuNzQzIDI0LjIzM0MxMjMuMDA1IDI0LjIzMyAxMjIuNDEgMjQuMDA1MiAxMjEuOTU5IDIzLjU0OTVDMTIxLjUwOCAyMy4wOTM5IDEyMS4yODMgMjIuNDkzMiAxMjEuMjgzIDIxLjc0NzZaJyBmaWxsPSclMjMwMTBDMUUnLyUzZSUzY3BhdGggZD0nTTQ4LjgzNCA0MFYyOS43NDYxSDU1LjI0NjFWMzEuNTg1SDUwLjkzOTVWMzMuOTE2SDU0Ljk2NThWMzUuNzYxN0g1MC45Mzk1VjQwSDQ4LjgzNFpNNjMuMTQxNiAzOS4yMzQ0QzYyLjI5MzkgMzkuODM1OSA2MS4zNjY1IDQwLjEzNjcgNjAuMzU5NCA0MC4xMzY3QzU5LjYxMiA0MC4xMzY3IDU4LjkzOTggMzkuOTc3MiA1OC4zNDI4IDM5LjY1ODJDNTcuNzUwMyAzOS4zMzQ2IDU3LjI4MDkgMzguODk3MSA1Ni45MzQ2IDM4LjM0NTdDNTYuNTkyOCAzNy43OTQzIDU2LjQyMTkgMzcuMTcyMiA1Ni40MjE5IDM2LjQ3OTVDNTYuNDIxOSAzNS44MTg3IDU2LjU3NjggMzUuMjI4NSA1Ni44ODY3IDM0LjcwOUM1Ny4yMDEyIDM0LjE4OTUgNTcuNjI3MyAzMy43NzkzIDU4LjE2NSAzMy40Nzg1QzU4LjcwMjggMzMuMTc3NyA1OS4zMTM1IDMzLjAyNzMgNTkuOTk3MSAzMy4wMjczQzYwLjcwMzUgMzMuMDI3MyA2MS4zMjU1IDMzLjE5MzcgNjEuODYzMyAzMy41MjY0QzYyLjQwMSAzMy44NTQ1IDYyLjgyMDMgMzQuMzE0OCA2My4xMjExIDM0LjkwNzJDNjMuNDIxOSAzNS40OTUxIDYzLjU3MjMgMzYuMTc2NCA2My41NzIzIDM2Ljk1MTJWMzcuMTY5OUg1OC41MzQyQzU4LjYxNjIgMzcuNDM4OCA1OC43NDg0IDM3LjY3NTggNTguOTMwNyAzNy44ODA5QzU5LjExNzUgMzguMDgxNCA1OS4zNDk5IDM4LjI0MDkgNTkuNjI3OSAzOC4zNTk0QzU5LjkxMDUgMzguNDc3OSA2MC4yMzE4IDM4LjUzNzEgNjAuNTkxOCAzOC41MzcxQzYxLjI4OTEgMzguNTM3MSA2MS45Mzg1IDM4LjMxMTUgNjIuNTQgMzcuODYwNEw2My4xNDE2IDM5LjIzNDRaTTU4LjQ0NTMgMzYuMTcxOUg2MS43NjA3QzYxLjcyNDMgMzUuODc1NyA2MS42MzA5IDM1LjYxNTkgNjEuNDgwNSAzNS4zOTI2QzYxLjMzNDYgMzUuMTY0NyA2MS4xNDEgMzQuOTg3IDYwLjg5OTQgMzQuODU5NEM2MC42NjI0IDM0LjczMTggNjAuMzk1OCAzNC42NjggNjAuMDk5NiAzNC42NjhDNTkuNzk4OCAzNC42NjggNTkuNTI5OSAzNC43MzQgNTkuMjkzIDM0Ljg2NjJDNTkuMDYwNSAzNC45OTg0IDU4Ljg3MTQgMzUuMTc2MSA1OC43MjU2IDM1LjM5OTRDNTguNTc5OCAzNS42MjI3IDU4LjQ4NjMgMzUuODgwMiA1OC40NDUzIDM2LjE3MTlaTTcxLjExMjMgMzkuMjM0NEM3MC4yNjQ2IDM5LjgzNTkgNjkuMzM3MiA0MC4xMzY3IDY4LjMzMDEgNDAuMTM2N0M2Ny41ODI3IDQwLjEzNjcgNjYuOTEwNSAzOS45NzcyIDY2LjMxMzUgMzkuNjU4MkM2NS43MjEgMzkuMzM0NiA2NS4yNTE2IDM4Ljg5NzEgNjQuOTA1MyAzOC4zNDU3QzY0LjU2MzUgMzcuNzk0MyA2NC4zOTI2IDM3LjE3MjIgNjQuMzkyNiAzNi40Nzk1QzY0LjM5MjYgMzUuODE4NyA2NC41NDc1IDM1LjIyODUgNjQuODU3NCAzNC43MDlDNjUuMTcxOSAzNC4xODk1IDY1LjU5OCAzMy43NzkzIDY2LjEzNTcgMzMuNDc4NUM2Ni42NzM1IDMzLjE3NzcgNjcuMjg0MiAzMy4wMjczIDY3Ljk2NzggMzMuMDI3M0M2OC42NzQyIDMzLjAyNzMgNjkuMjk2MiAzMy4xOTM3IDY5LjgzNCAzMy41MjY0QzcwLjM3MTcgMzMuODU0NSA3MC43OTEgMzQuMzE0OCA3MS4wOTE4IDM0LjkwNzJDNzEuMzkyNiAzNS40OTUxIDcxLjU0MyAzNi4xNzY0IDcxLjU0MyAzNi45NTEyVjM3LjE2OTlINjYuNTA0OUM2Ni41ODY5IDM3LjQzODggNjYuNzE5MSAzNy42NzU4IDY2LjkwMTQgMzcuODgwOUM2Ny4wODgyIDM4LjA4MTQgNjcuMzIwNiAzOC4yNDA5IDY3LjU5ODYgMzguMzU5NEM2Ny44ODEyIDM4LjQ3NzkgNjguMjAyNSAzOC41MzcxIDY4LjU2MjUgMzguNTM3MUM2OS4yNTk4IDM4LjUzNzEgNjkuOTA5MiAzOC4zMTE1IDcwLjUxMDcgMzcuODYwNEw3MS4xMTIzIDM5LjIzNDRaTTY2LjQxNiAzNi4xNzE5SDY5LjczMTRDNjkuNjk1IDM1Ljg3NTcgNjkuNjAxNiAzNS42MTU5IDY5LjQ1MTIgMzUuMzkyNkM2OS4zMDUzIDM1LjE2NDcgNjkuMTExNyAzNC45ODcgNjguODcwMSAzNC44NTk0QzY4LjYzMzEgMzQuNzMxOCA2OC4zNjY1IDM0LjY2OCA2OC4wNzAzIDM0LjY2OEM2Ny43Njk1IDM0LjY2OCA2Ny41MDA3IDM0LjczNCA2Ny4yNjM3IDM0Ljg2NjJDNjcuMDMxMiAzNC45OTg0IDY2Ljg0MjEgMzUuMTc2MSA2Ni42OTYzIDM1LjM5OTRDNjYuNTUwNSAzNS42MjI3IDY2LjQ1NyAzNS44ODAyIDY2LjQxNiAzNi4xNzE5Wk03OS44MjgxIDQwSDc4LjEwNTVMNzguMDAyOSAzOS4wNzAzQzc3LjcxMTMgMzkuMzk4NCA3Ny4zNjA0IDM5LjY1ODIgNzYuOTUwMiAzOS44NDk2Qzc2LjU0NDYgNDAuMDQxIDc2LjEwMDMgNDAuMTM2NyA3NS42MTcyIDQwLjEzNjdDNzQuOTkyOCA0MC4xMzY3IDc0LjQzNDYgMzkuOTg0IDczLjk0MjQgMzkuNjc4N0M3My40NTQ4IDM5LjM2ODggNzMuMDY5NyAzOC45NDUgNzIuNzg3MSAzOC40MDcyQzcyLjUwNDYgMzcuODY5NSA3Mi4zNjMzIDM3LjI2MTEgNzIuMzYzMyAzNi41ODJDNzIuMzYzMyAzNS44OTg0IDcyLjUwNDYgMzUuMjkgNzIuNzg3MSAzNC43NTY4QzczLjA2OTcgMzQuMjE5MSA3My40NTQ4IDMzLjc5NzUgNzMuOTQyNCAzMy40OTIyQzc0LjQzNDYgMzMuMTgyMyA3NC45OTI4IDMzLjAyNzMgNzUuNjE3MiAzMy4wMjczQzc2LjA2MzggMzMuMDI3MyA3Ni40Nzg1IDMzLjEwOTQgNzYuODYxMyAzMy4yNzM0Qzc3LjI0ODcgMzMuNDMyOSA3Ny41ODM3IDMzLjY1NjIgNzcuODY2MiAzMy45NDM0VjI5Ljc0NjFINzkuODI4MVY0MFpNNzYuMTIzIDM4LjM3OTlDNzYuNDQ2NiAzOC4zNzk5IDc2LjczODMgMzguMzA3IDc2Ljk5OCAzOC4xNjExQzc3LjI2MjQgMzguMDE1MyA3Ny40NzIgMzcuODE3MSA3Ny42MjcgMzcuNTY2NEM3Ny43ODY1IDM3LjMxMTIgNzcuODY2MiAzNy4wMjE4IDc3Ljg2NjIgMzYuNjk4MlYzNi40NTIxQzc3Ljg2NjIgMzYuMTI4NiA3Ny43ODY1IDM1Ljg0MTUgNzcuNjI3IDM1LjU5MDhDNzcuNDcyIDM1LjM0MDIgNzcuMjYyNCAzNS4xNDQyIDc2Ljk5OCAzNS4wMDI5Qzc2LjczODMgMzQuODU3MSA3Ni40NDY2IDM0Ljc4NDIgNzYuMTIzIDM0Ljc4NDJDNzUuNzkwNCAzNC43ODQyIDc1LjQ5MTkgMzQuODYxNyA3NS4yMjc1IDM1LjAxNjZDNzQuOTYzMiAzNS4xNzE1IDc0Ljc1MzYgMzUuMzg1NyA3NC41OTg2IDM1LjY1OTJDNzQuNDQ4MiAzNS45MjgxIDc0LjM3MyAzNi4yMzU3IDc0LjM3MyAzNi41ODJDNzQuMzczIDM2LjkyMzggNzQuNDQ4MiAzNy4yMzE0IDc0LjU5ODYgMzcuNTA0OUM3NC43NTM2IDM3Ljc3MzggNzQuOTYzMiAzNy45ODggNzUuMjI3NSAzOC4xNDc1Qzc1LjQ5MTkgMzguMzAyNCA3NS43OTA0IDM4LjM3OTkgNzYuMTIzIDM4LjM3OTlaTTgzLjIxODggNDBIODEuNDk2MVYyOS43NDYxSDgzLjQ1OFYzMy45NDM0QzgzLjc0NTEgMzMuNjU2MiA4NC4wNzc4IDMzLjQzMjkgODQuNDU2MSAzMy4yNzM0Qzg0LjgzODkgMzMuMTA5NCA4NS4yNTM2IDMzLjAyNzMgODUuNzAwMiAzMy4wMjczQzg2LjMyOTEgMzMuMDI3MyA4Ni44ODc0IDMzLjE4MjMgODcuMzc1IDMzLjQ5MjJDODcuODYyNiAzMy43OTc1IDg4LjI0NzcgMzQuMjE5MSA4OC41MzAzIDM0Ljc1NjhDODguODEyOCAzNS4yOSA4OC45NTQxIDM1Ljg5ODQgODguOTU0MSAzNi41ODJDODguOTU0MSAzNy4yNjExIDg4LjgxMjggMzcuODY5NSA4OC41MzAzIDM4LjQwNzJDODguMjQ3NyAzOC45NDUgODcuODYyNiAzOS4zNjg4IDg3LjM3NSAzOS42Nzg3Qzg2Ljg4NzQgMzkuOTg0IDg2LjMyOTEgNDAuMTM2NyA4NS43MDAyIDQwLjEzNjdDODUuMjE3MSA0MC4xMzY3IDg0Ljc3MDUgNDAuMDQzMyA4NC4zNjA0IDM5Ljg1NjRDODMuOTU0OCAzOS42NjUgODMuNjA2MSAzOS40MDMgODMuMzE0NSAzOS4wNzAzTDgzLjIxODggNDBaTTg1LjIwMTIgMzguMzc5OUM4NS41MzM5IDM4LjM3OTkgODUuODMwMSAzOC4zMDI0IDg2LjA4OTggMzguMTQ3NUM4Ni4zNTQyIDM3Ljk5MjUgODYuNTYxNSAzNy43NzgzIDg2LjcxMTkgMzcuNTA0OUM4Ni44NjY5IDM3LjIzMTQgODYuOTQ0MyAzNi45MjE1IDg2Ljk0NDMgMzYuNTc1MkM4Ni45NDQzIDM2LjIzMzQgODYuODY2OSAzNS45MjgxIDg2LjcxMTkgMzUuNjU5MkM4Ni41NjE1IDM1LjM4NTcgODYuMzU0MiAzNS4xNzE1IDg2LjA4OTggMzUuMDE2NkM4NS44MzAxIDM0Ljg2MTcgODUuNTMzOSAzNC43ODQyIDg1LjIwMTIgMzQuNzg0MkM4NC44ODY3IDM0Ljc4NDIgODQuNTk5NiAzNC44NTQ4IDg0LjMzOTggMzQuOTk2MUM4NC4wODQ2IDM1LjEzNzQgODMuODc5NiAzNS4zMzExIDgzLjcyNDYgMzUuNTc3MUM4My41Njk3IDM1LjgyMzIgODMuNDgwOCAzNi4xMDU4IDgzLjQ1OCAzNi40MjQ4VjM2LjcyNTZDODMuNDgwOCAzNy4wNDQ2IDgzLjU2OTcgMzcuMzI5NCA4My43MjQ2IDM3LjU4MDFDODMuODc5NiAzNy44MjYyIDg0LjA4NDYgMzguMDIyMSA4NC4zMzk4IDM4LjE2OEM4NC41OTUxIDM4LjMwOTIgODQuODgyMiAzOC4zNzk5IDg1LjIwMTIgMzguMzc5OVpNOTYuMzAyNyA0MEg5NC41OTM4TDk0LjQ5MTIgMzkuMTg2NUM5NC4yNDA2IDM5LjQ4NzMgOTMuOTMwNyAzOS43MjIgOTMuNTYxNSAzOS44OTA2QzkzLjE5MjQgNDAuMDU0NyA5Mi43ODY4IDQwLjEzNjcgOTIuMzQ0NyA0MC4xMzY3QzkxLjg2NjIgNDAuMTM2NyA5MS40NDAxIDQwLjA0NTYgOTEuMDY2NCAzOS44NjMzQzkwLjY5MjcgMzkuNjc2NCA5MC4zOTg4IDM5LjQyMTIgOTAuMTg0NiAzOS4wOTc3Qzg5Ljk3MDQgMzguNzY5NSA4OS44NjMzIDM4LjM5ODEgODkuODYzMyAzNy45ODM0Qzg5Ljg2MzMgMzcuNTQ1OSA4OS45Nzk1IDM3LjE2MDggOTAuMjExOSAzNi44MjgxQzkwLjQ0NDMgMzYuNDk1NCA5MC43NjMzIDM2LjIzNTcgOTEuMTY4OSAzNi4wNDg4QzkxLjU3OTEgMzUuODU3NCA5Mi4wNDM5IDM1Ljc2MTcgOTIuNTYzNSAzNS43NjE3QzkyLjg2ODggMzUuNzYxNyA5My4xNzQyIDM1Ljc5NTkgOTMuNDc5NSAzNS44NjQzQzkzLjc4OTQgMzUuOTMyNiA5NC4wNzY1IDM2LjAyODMgOTQuMzQwOCAzNi4xNTE0VjM1Ljk3MzZDOTQuMzQwOCAzNS43MDAyIDk0LjI2MzMgMzUuNDY1NSA5NC4xMDg0IDM1LjI2OTVDOTMuOTU4IDM1LjA2OSA5My43NDg0IDM0LjkxNDEgOTMuNDc5NSAzNC44MDQ3QzkzLjIxNTIgMzQuNjk1MyA5Mi45MTg5IDM0LjY0MDYgOTIuNTkwOCAzNC42NDA2QzkyLjI3NjQgMzQuNjQwNiA5MS45NjQyIDM0LjY5MDggOTEuNjU0MyAzNC43OTFDOTEuMzQ5IDM0Ljg5MTMgOTEuMDY2NCAzNS4wNDE3IDkwLjgwNjYgMzUuMjQyMkw5MC4yNzM0IDMzLjc0NTFDOTAuNzMzNyAzMy41MDgxIDkxLjE5ODYgMzMuMzMwNCA5MS42NjggMzMuMjExOUM5Mi4xNDE5IDMzLjA4ODkgOTIuNTk5OSAzMy4wMjczIDkzLjA0MiAzMy4wMjczQzkzLjcwNzQgMzMuMDI3MyA5NC4yODM5IDMzLjE1OTUgOTQuNzcxNSAzMy40MjM4Qzk1LjI1OTEgMzMuNjgzNiA5NS42MzUxIDM0LjA1MjcgOTUuODk5NCAzNC41MzEyQzk2LjE2ODMgMzUuMDA1MiA5Ni4zMDI3IDM1LjU2OCA5Ni4zMDI3IDM2LjIxOTdWNDBaTTkyLjc3NTQgMzguNjI2QzkzLjAzNTIgMzguNjI2IDkzLjI4MzUgMzguNTY5IDkzLjUyMDUgMzguNDU1MUM5My43NTc1IDM4LjM0MTEgOTMuOTQ4OSAzOC4xODYyIDk0LjA5NDcgMzcuOTkwMkM5NC4yNDUxIDM3Ljc5NDMgOTQuMzI0OSAzNy41Nzc4IDk0LjMzNCAzNy4zNDA4VjM3LjI5M0M5NC4xMzM1IDM3LjE1NjIgOTMuOTEwMiAzNy4wNTE0IDkzLjY2NDEgMzYuOTc4NUM5My40MjI1IDM2LjkwMSA5My4xNzY0IDM2Ljg2MjMgOTIuOTI1OCAzNi44NjIzQzkyLjU1MjEgMzYuODYyMyA5Mi4yNDY3IDM2Ljk0NDMgOTIuMDA5OCAzNy4xMDg0QzkxLjc3MjggMzcuMjcyNSA5MS42NTQzIDM3LjQ4NDQgOTEuNjU0MyAzNy43NDQxQzkxLjY1NDMgMzcuOTEyOCA5MS43MDIxIDM4LjA2NTQgOTEuNzk3OSAzOC4yMDIxQzkxLjg5ODEgMzguMzM0MyA5Mi4wMzI2IDM4LjQzOTEgOTIuMjAxMiAzOC41MTY2QzkyLjM2OTggMzguNTg5NSA5Mi41NjEyIDM4LjYyNiA5Mi43NzU0IDM4LjYyNlpNMTAzLjg5MSAzOC45MTMxQzEwMy41NTggMzkuMjk1OSAxMDMuMTUgMzkuNTk2NyAxMDIuNjY3IDM5LjgxNTRDMTAyLjE4NCA0MC4wMjk2IDEwMS42NTMgNDAuMTM2NyAxMDEuMDc0IDQwLjEzNjdDMTAwLjM3MiA0MC4xMzY3IDk5Ljc0MzUgMzkuOTg0IDk5LjE4NzUgMzkuNjc4N0M5OC42MzYxIDM5LjM2ODggOTguMjAwOCAzOC45NDUgOTcuODgxOCAzOC40MDcyQzk3LjU2NzQgMzcuODY5NSA5Ny40MTAyIDM3LjI2MTEgOTcuNDEwMiAzNi41ODJDOTcuNDEwMiAzNS44OTg0IDk3LjU2NzQgMzUuMjkgOTcuODgxOCAzNC43NTY4Qzk4LjIwMDggMzQuMjE5MSA5OC42MzYxIDMzLjc5NzUgOTkuMTg3NSAzMy40OTIyQzk5Ljc0MzUgMzMuMTgyMyAxMDAuMzcyIDMzLjAyNzMgMTAxLjA3NCAzMy4wMjczQzEwMS42NDggMzMuMDI3MyAxMDIuMTc3IDMzLjEzNDQgMTAyLjY2IDMzLjM0ODZDMTAzLjE0MyAzMy41NjI4IDEwMy41NTEgMzMuODU5IDEwMy44ODQgMzQuMjM3M0wxMDIuNzI5IDM1LjQ0NzNDMTAyLjU1MSAzNS4yNDIyIDEwMi4zMjUgMzUuMDgyNyAxMDIuMDUyIDM0Ljk2ODhDMTAxLjc4MyAzNC44NTAzIDEwMS41IDM0Ljc5MSAxMDEuMjA0IDM0Ljc5MUMxMDAuODYyIDM0Ljc5MSAxMDAuNTU3IDM0Ljg2ODUgMTAwLjI4OCAzNS4wMjM0QzEwMC4wMTkgMzUuMTczOCA5OS44MDczIDM1LjM4MzUgOTkuNjUyMyAzNS42NTIzQzk5LjQ5NzQgMzUuOTE2NyA5OS40MTk5IDM2LjIyMiA5OS40MTk5IDM2LjU2ODRDOTkuNDE5OSAzNi45MTkzIDk5LjQ5NzQgMzcuMjMxNCA5OS42NTIzIDM3LjUwNDlDOTkuODA3MyAzNy43NzgzIDEwMC4wMTkgMzcuOTkyNSAxMDAuMjg4IDM4LjE0NzVDMTAwLjU1NyAzOC4yOTc5IDEwMC44NjIgMzguMzczIDEwMS4yMDQgMzguMzczQzEwMS41IDM4LjM3MyAxMDEuNzg1IDM4LjMxNjEgMTAyLjA1OSAzOC4yMDIxQzEwMi4zMzIgMzguMDgzNyAxMDIuNTU1IDM3LjkyMTkgMTAyLjcyOSAzNy43MTY4TDEwMy44OTEgMzguOTEzMVpNMTA3LjA1NiA0MEgxMDUuMDk0VjI5Ljc0NjFIMTA3LjA1NlYzNi4wNDg4TDEwNy43MjYgMzUuMjQyMkwxMDkuNjk0IDMzLjE2NDFIMTEyLjE0OEwxMDkuMjU3IDM2LjIwNjFMMTEyLjQ5IDQwSDEwOS45NTRMMTA3LjkxIDM3LjQzNjVMMTA3LjA1NiAzOC4yMTU4VjQwWicgZmlsbD0nJTIzMDA4NUZGJy8lM2UlM2Mvc3ZnJTNlXCI7XG4gIGV4cG9ydCBkZWZhdWx0IGltZzsiLCJpbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlU2lnblVwIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL2F1dGhcIjtcbmltcG9ydCB7IElucHV0IH0gZnJvbSBcIi4uLy4uL2F0b21zL2lucHV0cy9JbnB1dFwiO1xuaW1wb3J0IExvZ29GZWVkYmFja0RhcmsgZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9pY29ucy9sb2dvLWZlZWRiYWNrLWRhcmsuc3ZnXCI7XG5cbmV4cG9ydCBjb25zdCBTaWduVXBGb3JtID0gKHtcbiAgY2xvc2VNb2RhbCxcbiAgc2V0SXNTaWduaW5nVXAsXG59OiB7XG4gIGNsb3NlTW9kYWw6ICgpID0+IHZvaWQ7XG4gIHNldElzU2lnbmluZ1VwOiAoaXNTaWduaW5nVXA6IGJvb2xlYW4pID0+IHZvaWQ7XG59KSA9PiB7XG4gIGNvbnN0IFtmaXJzdE5hbWUsIHNldEZpcnN0TmFtZV0gPSB1c2VTdGF0ZShcIlwiKTtcbiAgY29uc3QgW2xhc3ROYW1lLCBzZXRMYXN0TmFtZV0gPSB1c2VTdGF0ZShcIlwiKTtcbiAgY29uc3QgW2VtYWlsLCBzZXRFbWFpbF0gPSB1c2VTdGF0ZShcIlwiKTtcbiAgY29uc3QgW3Bhc3N3b3JkLCBzZXRQYXNzd29yZF0gPSB1c2VTdGF0ZShcIlwiKTtcblxuICBjb25zdCB7IG11dGF0ZTogc2lnblVwIH0gPSB1c2VTaWduVXAoKTtcblxuICBjb25zdCBoYW5kbGVTaWduVXAgPSAoKSA9PiB7XG4gICAgc2lnblVwKFxuICAgICAgeyBmaXJzdE5hbWUsIGxhc3ROYW1lLCBlbWFpbCwgcGFzc3dvcmQgfSxcbiAgICAgIHtcbiAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgY2xvc2VNb2RhbCgpO1xuICAgICAgICB9LFxuICAgICAgICBvbkVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICApO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgei0xMCBmbGV4IGZsZXgtY29sIGp1c3RpZnktc3RhcnRcIj5cbiAgICAgIDxpbWcgc3JjPXtMb2dvRmVlZGJhY2tEYXJrfSBjbGFzc05hbWU9XCJtYi0xMiBoLVs0M3B4XSB3LW1pblwiIC8+XG4gICAgICA8aDEgY2xhc3NOYW1lPVwia3VtYmgtc2VtaWJvbGQgdGV4dC0zeGwgdGV4dC1ncmF5LWZlZWRiYWNrLTkwMCBtYi0zXCI+XG4gICAgICAgIEluc2NyaXB0aW9uXG4gICAgICA8L2gxPlxuXG4gICAgICA8SW5wdXRcbiAgICAgICAgbGFiZWw9XCJQcsOpbm9tXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJQcsOpbm9tXCJcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICB2YWx1ZT17Zmlyc3ROYW1lfVxuICAgICAgICBzZXRWYWx1ZT17c2V0Rmlyc3ROYW1lfVxuICAgICAgLz5cbiAgICAgIDxJbnB1dFxuICAgICAgICBsYWJlbD1cIk5vbVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiTm9tXCJcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICB2YWx1ZT17bGFzdE5hbWV9XG4gICAgICAgIHNldFZhbHVlPXtzZXRMYXN0TmFtZX1cbiAgICAgIC8+XG4gICAgICA8SW5wdXRcbiAgICAgICAgbGFiZWw9XCJFLW1haWxcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIkUtbWFpbFwiXG4gICAgICAgIHR5cGU9XCJlbWFpbFwiXG4gICAgICAgIHZhbHVlPXtlbWFpbH1cbiAgICAgICAgc2V0VmFsdWU9e3NldEVtYWlsfVxuICAgICAgLz5cbiAgICAgIDxJbnB1dFxuICAgICAgICBsYWJlbD1cIk1vdCBkZSBwYXNzZVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiTW90IGRlIHBhc3NlXCJcbiAgICAgICAgdHlwZT1cInBhc3N3b3JkXCJcbiAgICAgICAgdmFsdWU9e3Bhc3N3b3JkfVxuICAgICAgICBzZXRWYWx1ZT17c2V0UGFzc3dvcmR9XG4gICAgICAvPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBvbkNsaWNrPXtoYW5kbGVTaWduVXB9XG4gICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBweC00IHB5LTIgYmctYmx1ZS01MDAga3VtYmgtbWVkaXVtIHRleHQtd2hpdGUgcm91bmRlZC1sZyBtdC0yICBkaXNhYmxlZDpiZy1ibHVlLTEwMCBkaXNhYmxlZDp0ZXh0LWJsdWUtMzAwXCJcbiAgICAgID5cbiAgICAgICAgUydpbnNjcmlyZVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHNldElzU2lnbmluZ1VwKGZhbHNlKX1cbiAgICAgICAgY2xhc3NOYW1lPVwiZm9udC1ib2xkIHRleHQtY2VudGVyIHRleHQtYmxhY2sgdGV4dC1zbSBtdC0yXCJcbiAgICAgID5cbiAgICAgICAgU2UgY29ubmVjdGVyXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VTaWduSW4gfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvYXV0aFwiO1xuaW1wb3J0IHsgSW5wdXQgfSBmcm9tIFwiLi4vLi4vYXRvbXMvaW5wdXRzL0lucHV0XCI7XG5pbXBvcnQgTG9nb0ZlZWRiYWNrRGFyayBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2ljb25zL2xvZ28tZmVlZGJhY2stZGFyay5zdmdcIjtcblxuY29uc3QgU2lnbkluRm9ybSA9ICh7XG4gIHNldElzU2lnbmluZ1VwLFxuICBjbG9zZU1vZGFsLFxufToge1xuICBzZXRJc1NpZ25pbmdVcDogKGlzU2lnbmluZ1VwOiBib29sZWFuKSA9PiB2b2lkO1xuICBjbG9zZU1vZGFsOiAoKSA9PiB2b2lkO1xufSkgPT4ge1xuICBjb25zdCBbZW1haWwsIHNldEVtYWlsXSA9IFJlYWN0LnVzZVN0YXRlKFwiXCIpO1xuICBjb25zdCBbcGFzc3dvcmQsIHNldFBhc3N3b3JkXSA9IFJlYWN0LnVzZVN0YXRlKFwiXCIpO1xuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IFJlYWN0LnVzZVN0YXRlKFwiXCIpO1xuICBjb25zdCB7IG11dGF0ZTogc2lnbkluIH0gPSB1c2VTaWduSW4oKTtcblxuICBjb25zdCBoYW5kbGVMb2dpbiA9ICgpID0+IHtcbiAgICBzaWduSW4oXG4gICAgICB7IGVtYWlsLCBwYXNzd29yZCB9LFxuICAgICAge1xuICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICBjbG9zZU1vZGFsKCk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uRXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IubWVzc2FnZSk7XG4gICAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2UgPT09IFwiTmV0d29yayBFcnJvclwiKSB7XG4gICAgICAgICAgICBzZXRFcnJvcihcIlVuZSBlcnJldXIgcsOpc2VhdSBlc3Qgc3VydmVudWVcIik7XG4gICAgICAgICAgfSBlbHNlIGlmIChlcnJvci5tZXNzYWdlID09PSBcIkludmFsaWQgY3JlZGVudGlhbHNcIikge1xuICAgICAgICAgICAgc2V0RXJyb3IoXCJFbWFpbCBvdSBtb3QgZGUgcGFzc2UgaW52YWxpZGVcIik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNldEVycm9yKFwiVW5lIGVycmV1ciBlc3Qgc3VydmVudWVcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfVxuICAgICk7XG4gIH07XG5cbiAgLy8gY29uc3QgaGFuZGxlR2l0aHViTG9naW4gPSAoKSA9PiB7XG4gIC8vICAgY29uc3QgY3VycmVudFVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAvLyAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYGh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9hdXRoL2dpdGh1Yj9yZWRpcmVjdFVybD0ke2VuY29kZVVSSUNvbXBvbmVudChcbiAgLy8gICAgIGN1cnJlbnRVcmxcbiAgLy8gICApfWA7XG4gIC8vIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCB6LTEwIGZsZXggZmxleC1jb2wganVzdGlmeS1zdGFydFwiPlxuICAgICAgPGltZyBzcmM9e0xvZ29GZWVkYmFja0Rhcmt9IGNsYXNzTmFtZT1cIm1iLTEyIGgtWzQzcHhdIHctbWluXCIgLz5cbiAgICAgIDxoMSBjbGFzc05hbWU9XCJrdW1iaC1zZW1pYm9sZCB0ZXh0LTN4bCB0ZXh0LWdyYXktZmVlZGJhY2stOTAwIG1iLTNcIj5cbiAgICAgICAgQ29ubmV4aW9uXG4gICAgICA8L2gxPlxuICAgICAgPElucHV0XG4gICAgICAgIGxhYmVsPVwiRW1haWxcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIkVtYWlsXCJcbiAgICAgICAgdHlwZT1cImVtYWlsXCJcbiAgICAgICAgdmFsdWU9e2VtYWlsfVxuICAgICAgICBzZXRWYWx1ZT17c2V0RW1haWx9XG4gICAgICAvPlxuICAgICAgPElucHV0XG4gICAgICAgIGxhYmVsPVwiTW90IGRlIHBhc3NlXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJNb3QgZGUgcGFzc2VcIlxuICAgICAgICB0eXBlPVwicGFzc3dvcmRcIlxuICAgICAgICB2YWx1ZT17cGFzc3dvcmR9XG4gICAgICAgIHNldFZhbHVlPXtzZXRQYXNzd29yZH1cbiAgICAgIC8+XG4gICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXJlZC01MDAgdGV4dC14cyBoLTQgdGV4dC1jZW50ZXJcIj57ZXJyb3J9PC9wPlxuXG4gICAgICA8YnV0dG9uXG4gICAgICAgIG9uQ2xpY2s9e2hhbmRsZUxvZ2lufVxuICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgcHgtNCBweS0yIGJnLWJsdWUtNTAwIGt1bWJoLW1lZGl1bSB0ZXh0LXdoaXRlIHJvdW5kZWQtbGcgbXQtMiAgZGlzYWJsZWQ6YmctYmx1ZS0xMDAgZGlzYWJsZWQ6dGV4dC1ibHVlLTMwMFwiXG4gICAgICA+XG4gICAgICAgIFNlIGNvbm5lY3RlclxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHNldElzU2lnbmluZ1VwKHRydWUpfVxuICAgICAgICBjbGFzc05hbWU9XCJmb250LWJvbGQgdGV4dC1jZW50ZXIgdGV4dC1ibGFjayB0ZXh0LXNtIG10LTJcIlxuICAgICAgPlxuICAgICAgICBTJ2luc2NyaXJlXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNpZ25JbkZvcm07XG4iLCJpbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU2lnblVwRm9ybSB9IGZyb20gXCIuLi9tb2xlY3VsZXMvZm9ybXMvU2lnblVwRm9ybVwiO1xuaW1wb3J0IFNpZ25JbkZvcm0gZnJvbSBcIi4uL21vbGVjdWxlcy9mb3Jtcy9TaWduSW5Gb3JtXCI7XG5cbmV4cG9ydCBjb25zdCBDb25uZWN0aW9uID0gKHsgY2xvc2VNb2RhbCB9OiB7IGNsb3NlTW9kYWw6ICgpID0+IHZvaWQgfSkgPT4ge1xuICBjb25zdCBbaXNTaWduaW5nVXAsIHNldElzU2lnbmluZ1VwXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwicC04XCI+XG4gICAgICB7aXNTaWduaW5nVXAgPyAoXG4gICAgICAgIDxTaWduVXBGb3JtIGNsb3NlTW9kYWw9e2Nsb3NlTW9kYWx9IHNldElzU2lnbmluZ1VwPXtzZXRJc1NpZ25pbmdVcH0gLz5cbiAgICAgICkgOiAoXG4gICAgICAgIDxTaWduSW5Gb3JtIHNldElzU2lnbmluZ1VwPXtzZXRJc1NpZ25pbmdVcH0gY2xvc2VNb2RhbD17Y2xvc2VNb2RhbH0gLz5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIiwiaW1wb3J0IHsgdXNlUmVmIH0gZnJvbSBcInJlYWN0XCI7XG5cbmV4cG9ydCBjb25zdCBNb2RhbCA9ICh7XG4gIGlzVmlzaWJsZSxcbiAgY2xvc2VNb2RhbCxcbiAgbGltaXRXaWR0aCA9IHRydWUsXG4gIGNoaWxkcmVuLFxufToge1xuICBpc1Zpc2libGU6IGJvb2xlYW47XG4gIGNsb3NlTW9kYWw/OiAoKSA9PiB2b2lkO1xuICBsaW1pdFdpZHRoPzogYm9vbGVhbjtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbn0pID0+IHtcbiAgY29uc3QgcmVzaXppbmcgPSB1c2VSZWYoZmFsc2UpO1xuXG4gIGlmICghaXNWaXNpYmxlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qgd2lkdGggPSBsaW1pdFdpZHRoID8gXCJ3LVs0MDBweF1cIiA6IFwiXCI7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPVwibW9kYWxcIlxuICAgICAgb25Nb3VzZURvd249eyhlKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAodGFyZ2V0LnRhZ05hbWUgPT09IFwiVEVYVEFSRUFcIikge1xuICAgICAgICAgIHJlc2l6aW5nLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9fVxuICAgICAgb25Nb3VzZVVwPXsoKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHJlc2l6aW5nLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgfSwgMTAwKTtcbiAgICAgIH19XG4gICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICBpZiAoY2xvc2VNb2RhbCAmJiBlLnRhcmdldCA9PT0gZS5jdXJyZW50VGFyZ2V0ICYmICFyZXNpemluZy5jdXJyZW50KSB7XG4gICAgICAgICAgY2xvc2VNb2RhbCgpO1xuICAgICAgICB9XG4gICAgICB9fVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHt3aWR0aH0gYmctd2hpdGUgcm91bmRlZC1sZ2B9PntjaGlsZHJlbn08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iLCJpbXBvcnQgeyBDb25uZWN0aW9uIH0gZnJvbSBcIi4uLy4uL29yZ2FuaXNtcy9Db25uZWN0aW9uXCI7XG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gXCIuL01vZGFsXCI7XG5cbmV4cG9ydCBjb25zdCBDb25uZWN0aW9uTW9kYWwgPSAoe1xuICBpc1Zpc2libGUsXG4gIGNsb3NlTW9kYWwsXG59OiB7XG4gIGlzVmlzaWJsZTogYm9vbGVhbjtcbiAgY2xvc2VNb2RhbDogKCkgPT4gdm9pZDtcbn0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8TW9kYWwgaXNWaXNpYmxlPXtpc1Zpc2libGV9IGNsb3NlTW9kYWw9e2Nsb3NlTW9kYWx9PlxuICAgICAgPENvbm5lY3Rpb24gY2xvc2VNb2RhbD17Y2xvc2VNb2RhbH0gLz5cbiAgICA8L01vZGFsPlxuICApO1xufTtcbiIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi4vYXRvbXMvYnV0dG9ucy9CdXR0b25cIjtcbmltcG9ydCB7IENvbm5lY3Rpb25Nb2RhbCB9IGZyb20gXCIuLi9hdG9tcy9tb2RhbHMvQ29ubmVjdGlvbk1vZGFsXCI7XG5cbmV4cG9ydCBjb25zdCBDb25uZWN0aW9uUGFuZWwgPSAoKSA9PiB7XG4gIGNvbnN0IFtjb25uZWN0aW9uTW9kYWxPcGVuLCBzZXRDb25uZWN0aW9uTW9kYWxPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtNFwiPlxuICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlciB0ZXh0LWdyYXktZmVlZGJhY2stMjAwIHRleHQtc21cIj5cbiAgICAgICAgICBDb25uZWN0ZXogdm91cyBwb3VyIGFjY8OpZGVyIGF1eCBjb21tZW50YWlyZXNcbiAgICAgICAgPC9wPlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgdGV4dD1cIlNlIGNvbm5lY3RlclwiXG4gICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0Q29ubmVjdGlvbk1vZGFsT3Blbih0cnVlKX1cbiAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8Q29ubmVjdGlvbk1vZGFsXG4gICAgICAgIGlzVmlzaWJsZT17Y29ubmVjdGlvbk1vZGFsT3Blbn1cbiAgICAgICAgY2xvc2VNb2RhbD17KCkgPT4gc2V0Q29ubmVjdGlvbk1vZGFsT3BlbihmYWxzZSl9XG4gICAgICAvPlxuICAgIDwvPlxuICApO1xufTtcbiIsInZhciBpbWcgPSBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzEyNycgaGVpZ2h0PSc0Mycgdmlld0JveD0nMCAwIDEyNyA0MycgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSUzY3BhdGggZD0nTTcuNDg2NzMgOC4wNzc2N0M4LjQ5MTExIDguMDc3NjcgOS40MTg2MiA4LjI1MzcyIDEwLjI2OTMgOC42MDU4MkMxMS4xMzAyIDguOTQ3NTcgMTEuODgzNCA5LjQzNDMgMTIuNTI5MSAxMC4wNjZMMTIuNjM2NyA4LjM4ODM1SDE2LjgxODJWMjIuMTA0OUMxNi44MTgyIDI0LjA5MzIgMTYuNDQ0MSAyNS44Mjc4IDE1LjY5NiAyNy4zMDg3QzE0Ljk1ODEgMjguNzg5NiAxMy45MTc4IDI5LjkzOTIgMTIuNTc1MiAzMC43NTczQzExLjI0MjkgMzEuNTg1OCA5LjY3NDg0IDMyIDcuODcxMDUgMzJDNi44NzY5MiAzMiA1LjgyMTMgMzEuODYwMiA0LjcwNDE5IDMxLjU4MDZDMy41ODcwNyAzMS4zMDEgMi40NDQzMyAzMC44NjYgMS4yNzU5NyAzMC4yNzU3TDIuNjEzNDQgMjYuNTYzMUMzLjEyNTg3IDI2Ljk5ODEgMy44NDMyOSAyNy4zNjU3IDQuNzY1NjggMjcuNjY2QzUuNjg4MDcgMjcuOTc2NyA2LjU3NDU5IDI4LjEzMiA3LjQyNTIzIDI4LjEzMkM4Ljk1MjMgMjguMTMyIDEwLjE2MTcgMjcuNjE0MiAxMS4wNTMzIDI2LjU3ODZDMTEuOTQ0OSAyNS41NTM0IDEyLjM5MDggMjQuMTY1NyAxMi4zOTA4IDIyLjQxNTVWMjIuMzg0NUMxMS43NDUxIDIyLjk2NDQgMTEuMDA3MiAyMy40MjAxIDEwLjE3NyAyMy43NTE1QzkuMzQ2ODggMjQuMDcyNSA4LjQ1MDExIDI0LjIzMyA3LjQ4NjczIDI0LjIzM0M2LjA1MTkgMjQuMjMzIDQuNzY1NjggMjMuODg2MSAzLjYyODA2IDIzLjE5MjJDMi41MDA3IDIyLjQ4OCAxLjYxNDE4IDIxLjUzMDEgMC45Njg1MDkgMjAuMzE4NEMwLjMyMjgzNiAxOS4wOTY0IDAgMTcuNzA4NyAwIDE2LjE1NTNDMCAxNC42MDE5IDAuMzIyODM2IDEzLjIxOTQgMC45Njg1MDkgMTIuMDA3OEMxLjYxNDE4IDEwLjc4NTggMi41MDA3IDkuODI3ODMgMy42MjgwNiA5LjEzMzk4QzQuNzY1NjggOC40Mjk3NyA2LjA1MTkgOC4wNzc2NyA3LjQ4NjczIDguMDc3NjdaTTguNDg1OTggMjAuMzQ5NUM5LjYxMzM1IDIwLjM0OTUgMTAuNTQ2IDE5Ljk1MDggMTEuMjgzOSAxOS4xNTM0QzEyLjAyMTggMTguMzU2IDEyLjM5MDggMTcuMzU2NiAxMi4zOTA4IDE2LjE1NTNDMTIuMzkwOCAxNC45NTQgMTIuMDIxOCAxMy45NTQ3IDExLjI4MzkgMTMuMTU3M0MxMC41NDYgMTIuMzU5OSA5LjYxMzM1IDExLjk2MTIgOC40ODU5OCAxMS45NjEyQzcuMzU4NjIgMTEuOTYxMiA2LjQyNTk4IDEyLjM1OTkgNS42ODgwNyAxMy4xNTczQzQuOTUwMTYgMTMuOTU0NyA0LjU4MTIgMTQuOTU0IDQuNTgxMiAxNi4xNTUzQzQuNTgxMiAxNy4zNTY2IDQuOTUwMTYgMTguMzU2IDUuNjg4MDcgMTkuMTUzNEM2LjQyNTk4IDE5Ljk1MDggNy4zNTg2MiAyMC4zNDk1IDguNDg1OTggMjAuMzQ5NVonIGZpbGw9J3doaXRlJy8lM2UlM2NwYXRoIGQ9J00xOC45MTkxIDE5LjY1MDVDMTguOTE5MSAxOC42MTQ5IDE5LjIxMTIgMTcuNjg4IDE5Ljc5NTQgMTYuODY5OUMyMC4zODk4IDE2LjA1MTggMjEuMjA0NiAxNS40MDQ1IDIyLjIzOTcgMTQuOTI4MkMyMy4yNzQ4IDE0LjQ1MTggMjQuNDU4NiAxNC4yMTM2IDI1Ljc5MDkgMTQuMjEzNkMyNi4yMTExIDE0LjIxMzYgMjYuNjUxOCAxNC4yMzk1IDI3LjExMyAxNC4yOTEzQzI3LjU4NDQgMTQuMzQzIDI4LjA1NTkgMTQuNDEwNCAyOC41MjczIDE0LjQ5MzJDMjguMTg5MSAxMi44MDUyIDI2Ljk3NDYgMTEuOTYxMiAyNC44ODM5IDExLjk2MTJDMjMuNjQzOCAxMS45NjEyIDIyLjM5ODYgMTIuNDMyNCAyMS4xNDgyIDEzLjM3NDhMMTkuNjI2MyA5LjZDMjAuNjkyMSA5LjA4MjIgMjEuNzQyNiA4LjY5OTAzIDIyLjc3NzggOC40NTA0OUMyMy44MTI5IDguMjAxOTQgMjQuNzk2OCA4LjA3NzY3IDI1LjcyOTQgOC4wNzc2N0MyNy4yMTU1IDguMDc3NjcgMjguNTAxNyA4LjM2MjQ2IDI5LjU4ODEgOC45MzIwNEMzMC42ODQ3IDkuNDkxMjYgMzEuNTM1MyAxMC4yODg3IDMyLjE0IDExLjMyNDNDMzIuNzQ0NyAxMi4zNDk1IDMzLjA0NyAxMy41NTYgMzMuMDQ3IDE0Ljk0MzdWMjMuOTIyM0gyOS4zMjY3TDI5LjAzNDYgMjIuMjYwMkMyOC40NjA3IDIyLjg3MTIgMjcuNzU4NyAyMy4zNTI3IDI2LjkyODUgMjMuNzA0OUMyNi4xMDg2IDI0LjA1NyAyNS4yMDY3IDI0LjIzMyAyNC4yMjI5IDI0LjIzM0MyMi42NjUgMjQuMjMzIDIxLjM4OTEgMjMuODA4NCAyMC4zOTQ5IDIyLjk1OTJDMTkuNDExMSAyMi4xMSAxOC45MTkxIDIxLjAwNzEgMTguOTE5MSAxOS42NTA1Wk0yMy4zNDY2IDE4LjYyNTJDMjMuMzQ2NiAxOS4xNDMgMjMuNTQxMyAxOS41NjI1IDIzLjkzMDggMTkuODgzNUMyNC4zMzA1IDIwLjE5NDIgMjQuODUzMSAyMC4zNDk1IDI1LjQ5ODggMjAuMzQ5NUMyNi4zODAyIDIwLjM0OTUgMjcuMTE4MSAyMC4wODAzIDI3LjcxMjYgMTkuNTQxN0MyOC4zMTcyIDE5LjAwMzIgMjguNjE5NiAxOC4zNDA1IDI4LjYxOTYgMTcuNTUzNFYxNy4yNDI3QzI4LjI0MDQgMTcuMTE4NCAyNy44MzA0IDE3LjAyMDEgMjcuMzg5NyAxNi45NDc2QzI2Ljk1OTMgMTYuODc1MSAyNi41MzM5IDE2LjgzODggMjYuMTEzNyAxNi44Mzg4QzI1LjI0MjYgMTYuODM4OCAyNC41NjExIDE2Ljk5NDIgMjQuMDY5MSAxNy4zMDQ5QzIzLjU4NzQgMTcuNjE1NSAyMy4zNDY2IDE4LjA1NTcgMjMuMzQ2NiAxOC42MjUyWicgZmlsbD0nd2hpdGUnLyUzZSUzY3BhdGggZD0nTTM5Ljc3NTIgMFYyMy45MjIzSDM1LjM0NzhWMEgzOS43NzUyWicgZmlsbD0nd2hpdGUnLyUzZSUzY3BhdGggZD0nTTQxLjg3NjEgMTkuNjUwNUM0MS44NzYxIDE4LjYxNDkgNDIuMTY4MiAxNy42ODggNDIuNzUyNCAxNi44Njk5QzQzLjM0NjggMTYuMDUxOCA0NC4xNjE2IDE1LjQwNDUgNDUuMTk2NyAxNC45MjgyQzQ2LjIzMTkgMTQuNDUxOCA0Ny40MTU2IDE0LjIxMzYgNDguNzQ3OSAxNC4yMTM2QzQ5LjE2ODEgMTQuMjEzNiA0OS42MDg4IDE0LjIzOTUgNTAuMDcgMTQuMjkxM0M1MC41NDE1IDE0LjM0MyA1MS4wMTI5IDE0LjQxMDQgNTEuNDg0MyAxNC40OTMyQzUxLjE0NjEgMTIuODA1MiA0OS45MzE3IDExLjk2MTIgNDcuODQwOSAxMS45NjEyQzQ2LjYwMDggMTEuOTYxMiA0NS4zNTU2IDEyLjQzMjQgNDQuMTA1MiAxMy4zNzQ4TDQyLjU4MzMgOS42QzQzLjY0OTIgOS4wODIyIDQ0LjY5OTcgOC42OTkwMyA0NS43MzQ4IDguNDUwNDlDNDYuNzY5OSA4LjIwMTk0IDQ3Ljc1MzggOC4wNzc2NyA0OC42ODY0IDguMDc3NjdDNTAuMTcyNSA4LjA3NzY3IDUxLjQ1ODcgOC4zNjI0NiA1Mi41NDUxIDguOTMyMDRDNTMuNjQxNyA5LjQ5MTI2IDU0LjQ5MjQgMTAuMjg4NyA1NS4wOTcgMTEuMzI0M0M1NS43MDE3IDEyLjM0OTUgNTYuMDA0MSAxMy41NTYgNTYuMDA0MSAxNC45NDM3VjIzLjkyMjNINTIuMjgzOEw1MS45OTE3IDIyLjI2MDJDNTEuNDE3NyAyMi44NzEyIDUwLjcxNTcgMjMuMzUyNyA0OS44ODU1IDIzLjcwNDlDNDkuMDY1NiAyNC4wNTcgNDguMTYzNyAyNC4yMzMgNDcuMTc5OSAyNC4yMzNDNDUuNjIyMSAyNC4yMzMgNDQuMzQ2MSAyMy44MDg0IDQzLjM1MTkgMjIuOTU5MkM0Mi4zNjgxIDIyLjExIDQxLjg3NjEgMjEuMDA3MSA0MS44NzYxIDE5LjY1MDVaTTQ2LjMwMzYgMTguNjI1MkM0Ni4zMDM2IDE5LjE0MyA0Ni40OTgzIDE5LjU2MjUgNDYuODg3OCAxOS44ODM1QzQ3LjI4NzUgMjAuMTk0MiA0Ny44MTAyIDIwLjM0OTUgNDguNDU1OCAyMC4zNDk1QzQ5LjMzNzIgMjAuMzQ5NSA1MC4wNzUxIDIwLjA4MDMgNTAuNjY5NiAxOS41NDE3QzUxLjI3NDIgMTkuMDAzMiA1MS41NzY2IDE4LjM0MDUgNTEuNTc2NiAxNy41NTM0VjE3LjI0MjdDNTEuMTk3NCAxNy4xMTg0IDUwLjc4NzQgMTcuMDIwMSA1MC4zNDY3IDE2Ljk0NzZDNDkuOTE2MyAxNi44NzUxIDQ5LjQ5MSAxNi44Mzg4IDQ5LjA3MDggMTYuODM4OEM0OC4xOTk2IDE2LjgzODggNDcuNTE4MSAxNi45OTQyIDQ3LjAyNjEgMTcuMzA0OUM0Ni41NDQ0IDE3LjYxNTUgNDYuMzAzNiAxOC4wNTU3IDQ2LjMwMzYgMTguNjI1MlonIGZpbGw9J3doaXRlJy8lM2UlM2NwYXRoIGQ9J001Ny4yMjg3IDE2LjE1NTNDNTcuMjI4NyAxNC42MDE5IDU3LjU1MTUgMTMuMjE5NCA1OC4xOTcyIDEyLjAwNzhDNTguODQyOCAxMC43ODU4IDU5LjcyOTQgOS44Mjc4MyA2MC44NTY3IDkuMTMzOThDNjEuOTk0MyA4LjQyOTc3IDYzLjI4MDYgOC4wNzc2NyA2NC43MTU0IDguMDc3NjdDNjUuNjc4OCA4LjA3NzY3IDY2LjU3NTUgOC4yNDMzNyA2Ny40MDU3IDguNTc0NzZDNjguMjM1OCA4Ljg5NTc5IDY4Ljk3MzggOS4zNDYyOCA2OS42MTk0IDkuOTI2MjFWMC42MjEzNTlINzQuMDQ2OVYyMy45MjIzSDY5Ljg2NTRMNjkuNzU3OCAyMi4yNDQ3QzY5LjExMjEgMjIuODc2NCA2OC4zNTg4IDIzLjM2ODMgNjcuNDk3OSAyMy43MjA0QzY2LjY0NzMgMjQuMDYyMSA2NS43MTk4IDI0LjIzMyA2NC43MTU0IDI0LjIzM0M2My4yODA2IDI0LjIzMyA2MS45OTQzIDIzLjg4NjEgNjAuODU2NyAyMy4xOTIyQzU5LjcyOTQgMjIuNDg4IDU4Ljg0MjggMjEuNTMwMSA1OC4xOTcyIDIwLjMxODRDNTcuNTUxNSAxOS4wOTY0IDU3LjIyODcgMTcuNzA4NyA1Ny4yMjg3IDE2LjE1NTNaTTYxLjgwOTkgMTYuMTU1M0M2MS44MDk5IDE3LjM1NjYgNjIuMTc4OCAxOC4zNTYgNjIuOTE2NyAxOS4xNTM0QzYzLjY1NDYgMTkuOTUwOCA2NC41ODczIDIwLjM0OTUgNjUuNzE0NiAyMC4zNDk1QzY2Ljg0MiAyMC4zNDk1IDY3Ljc3NDYgMTkuOTUwOCA2OC41MTI2IDE5LjE1MzRDNjkuMjUwNSAxOC4zNTYgNjkuNjE5NCAxNy4zNTY2IDY5LjYxOTQgMTYuMTU1M0M2OS42MTk0IDE0Ljk1NCA2OS4yNTA1IDEzLjk1NDcgNjguNTEyNiAxMy4xNTczQzY3Ljc3NDYgMTIuMzU5OSA2Ni44NDIgMTEuOTYxMiA2NS43MTQ2IDExLjk2MTJDNjQuNTg3MyAxMS45NjEyIDYzLjY1NDYgMTIuMzU5OSA2Mi45MTY3IDEzLjE1NzNDNjIuMTc4OCAxMy45NTQ3IDYxLjgwOTkgMTQuOTU0IDYxLjgwOTkgMTYuMTU1M1onIGZpbGw9J3doaXRlJy8lM2UlM2NwYXRoIGQ9J003Ni42Mzk3IDIzLjkyMjNWOC4zODgzNUg4MC41MTM4TDgwLjcyOSAxMC42MDk3QzgxLjg0NjEgOC45MjE2OCA4My4zODM0IDguMDc3NjcgODUuMzQwOSA4LjA3NzY3Qzg2LjAwNzEgOC4wNzc2NyA4Ni42OTM4IDguMTgxMjMgODcuNDAwOSA4LjM4ODM1TDg2Ljc4NiAxMi4yNTYzQzg2LjE5MTYgMTIuMDU5NSA4NS42MDc0IDExLjk2MTIgODUuMDMzNSAxMS45NjEyQzgzLjg0NDYgMTEuOTYxMiA4Mi44ODYzIDEyLjQwNjUgODIuMTU4NyAxMy4yOTcxQzgxLjQzMSAxNC4xNzczIDgxLjA2NzIgMTUuNDM1NiA4MS4wNjcyIDE3LjA3MThWMjMuOTIyM0g3Ni42Mzk3WicgZmlsbD0nd2hpdGUnLyUzZSUzY3BhdGggZD0nTTg3LjE5NTggMy4xMDY4Qzg3LjE5NTggMi4zNjExNiA4Ny40MjEzIDEuNzYwNTIgODcuODcyMyAxLjMwNDg1Qzg4LjMyMzIgMC44NDkxOTEgODguOTE3NiAwLjYyMTM1OSA4OS42NTU1IDAuNjIxMzU5QzkwLjM5MzUgMC42MjEzNTkgOTAuOTg3OSAwLjg0OTE5MSA5MS40Mzg4IDEuMzA0ODVDOTEuODg5OCAxLjc2MDUyIDkyLjExNTIgMi4zNjExNiA5Mi4xMTUyIDMuMTA2OEM5Mi4xMTUyIDMuODUyNDMgOTEuODg5OCA0LjQ1MzA3IDkxLjQzODggNC45MDg3NEM5MC45ODc5IDUuMzY0NCA5MC4zOTM1IDUuNTkyMjMgODkuNjU1NSA1LjU5MjIzQzg4LjkxNzYgNS41OTIyMyA4OC4zMjMyIDUuMzY0NCA4Ny44NzIzIDQuOTA4NzRDODcuNDIxMyA0LjQ1MzA3IDg3LjE5NTggMy44NTI0MyA4Ny4xOTU4IDMuMTA2OFpNODcuNDQxOCAyMy45MjIzVjguMzg4MzVIOTEuODY5M1YyMy45MjIzSDg3LjQ0MThaJyBmaWxsPSd3aGl0ZScvJTNlJTNjcGF0aCBkPSdNOTguNjQzNiAyMy45MjIzSDk0LjIxNjFWOC4zODgzNUg5OC4zOTc2TDk4LjUwNTIgMTAuMDM1Qzk5LjU5MTYgOC43MzAxIDEwMS4wNjIgOC4wNzc2NyAxMDIuOTE3IDguMDc3NjdDMTA1LjI4NSA4LjA3NzY3IDEwNi45NiA5LjA5NzczIDEwNy45NDQgMTEuMTM3OUMxMDguNDU3IDEwLjE1NCAxMDkuMTQ5IDkuMzk4MDYgMTEwLjAyIDguODY5OUMxMTAuODkxIDguMzQxNzUgMTExLjkxNiA4LjA3NzY3IDExMy4wOTQgOC4wNzc2N0MxMTQuOTYgOC4wNzc2NyAxMTYuNDEgOC43NDA0NSAxMTcuNDQ1IDEwLjA2NkMxMTguNDggMTEuMzgxMiAxMTguOTk4IDEzLjIxNDIgMTE4Ljk5OCAxNS41NjVWMjMuOTIyM0gxMTQuNTdWMTUuNTY1QzExNC41NyAxNC4zNjM4IDExNC4yODggMTMuNDYyOCAxMTMuNzI1IDEyLjg2MjFDMTEzLjE3MSAxMi4yNjE1IDExMi41IDExLjk2MTIgMTExLjcxMSAxMS45NjEyQzExMC45MTEgMTEuOTYxMiAxMTAuMjMgMTIuMjcxOCAxMDkuNjY2IDEyLjg5MzJDMTA5LjEwMiAxMy41MTQ2IDEwOC44MjEgMTQuNDQxNCAxMDguODIxIDE1LjY3MzhWMjMuOTIyM0gxMDQuMzkzVjE1LjU2NUMxMDQuMzkzIDE0LjM2MzggMTA0LjExMSAxMy40NjI4IDEwMy41NDggMTIuODYyMUMxMDIuOTk0IDEyLjI2MTUgMTAyLjMyMyAxMS45NjEyIDEwMS41MzQgMTEuOTYxMkMxMDAuNzM0IDExLjk2MTIgMTAwLjA1MyAxMi4yNzE4IDk5LjQ4OTEgMTIuODkzMkM5OC45MjU0IDEzLjUxNDYgOTguNjQzNiAxNC40NDE0IDk4LjY0MzYgMTUuNjczOFYyMy45MjIzWicgZmlsbD0nd2hpdGUnLyUzZSUzY3BhdGggZD0nTTEyMS4yODMgMjEuNzQ3NkMxMjEuMjgzIDIxLjAwMTkgMTIxLjUwOCAyMC40MDEzIDEyMS45NTkgMTkuOTQ1NkMxMjIuNDEgMTkuNDkgMTIzLjAwNSAxOS4yNjIxIDEyMy43NDMgMTkuMjYyMUMxMjQuNDgxIDE5LjI2MjEgMTI1LjA3NSAxOS40OSAxMjUuNTI2IDE5Ljk0NTZDMTI1Ljk3NyAyMC40MDEzIDEyNi4yMDIgMjEuMDAxOSAxMjYuMjAyIDIxLjc0NzZDMTI2LjIwMiAyMi40OTMyIDEyNS45NzcgMjMuMDkzOSAxMjUuNTI2IDIzLjU0OTVDMTI1LjA3NSAyNC4wMDUyIDEyNC40ODEgMjQuMjMzIDEyMy43NDMgMjQuMjMzQzEyMy4wMDUgMjQuMjMzIDEyMi40MSAyNC4wMDUyIDEyMS45NTkgMjMuNTQ5NUMxMjEuNTA4IDIzLjA5MzkgMTIxLjI4MyAyMi40OTMyIDEyMS4yODMgMjEuNzQ3NlonIGZpbGw9J3doaXRlJy8lM2UlM2NwYXRoIGQ9J000OC44MzQgNDBWMjkuNzQ2MUg1NS4yNDYxVjMxLjU4NUg1MC45Mzk1VjMzLjkxNkg1NC45NjU4VjM1Ljc2MTdINTAuOTM5NVY0MEg0OC44MzRaTTYzLjE0MTYgMzkuMjM0NEM2Mi4yOTM5IDM5LjgzNTkgNjEuMzY2NSA0MC4xMzY3IDYwLjM1OTQgNDAuMTM2N0M1OS42MTIgNDAuMTM2NyA1OC45Mzk4IDM5Ljk3NzIgNTguMzQyOCAzOS42NTgyQzU3Ljc1MDMgMzkuMzM0NiA1Ny4yODA5IDM4Ljg5NzEgNTYuOTM0NiAzOC4zNDU3QzU2LjU5MjggMzcuNzk0MyA1Ni40MjE5IDM3LjE3MjIgNTYuNDIxOSAzNi40Nzk1QzU2LjQyMTkgMzUuODE4NyA1Ni41NzY4IDM1LjIyODUgNTYuODg2NyAzNC43MDlDNTcuMjAxMiAzNC4xODk1IDU3LjYyNzMgMzMuNzc5MyA1OC4xNjUgMzMuNDc4NUM1OC43MDI4IDMzLjE3NzcgNTkuMzEzNSAzMy4wMjczIDU5Ljk5NzEgMzMuMDI3M0M2MC43MDM1IDMzLjAyNzMgNjEuMzI1NSAzMy4xOTM3IDYxLjg2MzMgMzMuNTI2NEM2Mi40MDEgMzMuODU0NSA2Mi44MjAzIDM0LjMxNDggNjMuMTIxMSAzNC45MDcyQzYzLjQyMTkgMzUuNDk1MSA2My41NzIzIDM2LjE3NjQgNjMuNTcyMyAzNi45NTEyVjM3LjE2OTlINTguNTM0MkM1OC42MTYyIDM3LjQzODggNTguNzQ4NCAzNy42NzU4IDU4LjkzMDcgMzcuODgwOUM1OS4xMTc1IDM4LjA4MTQgNTkuMzQ5OSAzOC4yNDA5IDU5LjYyNzkgMzguMzU5NEM1OS45MTA1IDM4LjQ3NzkgNjAuMjMxOCAzOC41MzcxIDYwLjU5MTggMzguNTM3MUM2MS4yODkxIDM4LjUzNzEgNjEuOTM4NSAzOC4zMTE1IDYyLjU0IDM3Ljg2MDRMNjMuMTQxNiAzOS4yMzQ0Wk01OC40NDUzIDM2LjE3MTlINjEuNzYwN0M2MS43MjQzIDM1Ljg3NTcgNjEuNjMwOSAzNS42MTU5IDYxLjQ4MDUgMzUuMzkyNkM2MS4zMzQ2IDM1LjE2NDcgNjEuMTQxIDM0Ljk4NyA2MC44OTk0IDM0Ljg1OTRDNjAuNjYyNCAzNC43MzE4IDYwLjM5NTggMzQuNjY4IDYwLjA5OTYgMzQuNjY4QzU5Ljc5ODggMzQuNjY4IDU5LjUyOTkgMzQuNzM0IDU5LjI5MyAzNC44NjYyQzU5LjA2MDUgMzQuOTk4NCA1OC44NzE0IDM1LjE3NjEgNTguNzI1NiAzNS4zOTk0QzU4LjU3OTggMzUuNjIyNyA1OC40ODYzIDM1Ljg4MDIgNTguNDQ1MyAzNi4xNzE5Wk03MS4xMTIzIDM5LjIzNDRDNzAuMjY0NiAzOS44MzU5IDY5LjMzNzIgNDAuMTM2NyA2OC4zMzAxIDQwLjEzNjdDNjcuNTgyNyA0MC4xMzY3IDY2LjkxMDUgMzkuOTc3MiA2Ni4zMTM1IDM5LjY1ODJDNjUuNzIxIDM5LjMzNDYgNjUuMjUxNiAzOC44OTcxIDY0LjkwNTMgMzguMzQ1N0M2NC41NjM1IDM3Ljc5NDMgNjQuMzkyNiAzNy4xNzIyIDY0LjM5MjYgMzYuNDc5NUM2NC4zOTI2IDM1LjgxODcgNjQuNTQ3NSAzNS4yMjg1IDY0Ljg1NzQgMzQuNzA5QzY1LjE3MTkgMzQuMTg5NSA2NS41OTggMzMuNzc5MyA2Ni4xMzU3IDMzLjQ3ODVDNjYuNjczNSAzMy4xNzc3IDY3LjI4NDIgMzMuMDI3MyA2Ny45Njc4IDMzLjAyNzNDNjguNjc0MiAzMy4wMjczIDY5LjI5NjIgMzMuMTkzNyA2OS44MzQgMzMuNTI2NEM3MC4zNzE3IDMzLjg1NDUgNzAuNzkxIDM0LjMxNDggNzEuMDkxOCAzNC45MDcyQzcxLjM5MjYgMzUuNDk1MSA3MS41NDMgMzYuMTc2NCA3MS41NDMgMzYuOTUxMlYzNy4xNjk5SDY2LjUwNDlDNjYuNTg2OSAzNy40Mzg4IDY2LjcxOTEgMzcuNjc1OCA2Ni45MDE0IDM3Ljg4MDlDNjcuMDg4MiAzOC4wODE0IDY3LjMyMDYgMzguMjQwOSA2Ny41OTg2IDM4LjM1OTRDNjcuODgxMiAzOC40Nzc5IDY4LjIwMjUgMzguNTM3MSA2OC41NjI1IDM4LjUzNzFDNjkuMjU5OCAzOC41MzcxIDY5LjkwOTIgMzguMzExNSA3MC41MTA3IDM3Ljg2MDRMNzEuMTEyMyAzOS4yMzQ0Wk02Ni40MTYgMzYuMTcxOUg2OS43MzE0QzY5LjY5NSAzNS44NzU3IDY5LjYwMTYgMzUuNjE1OSA2OS40NTEyIDM1LjM5MjZDNjkuMzA1MyAzNS4xNjQ3IDY5LjExMTcgMzQuOTg3IDY4Ljg3MDEgMzQuODU5NEM2OC42MzMxIDM0LjczMTggNjguMzY2NSAzNC42NjggNjguMDcwMyAzNC42NjhDNjcuNzY5NSAzNC42NjggNjcuNTAwNyAzNC43MzQgNjcuMjYzNyAzNC44NjYyQzY3LjAzMTIgMzQuOTk4NCA2Ni44NDIxIDM1LjE3NjEgNjYuNjk2MyAzNS4zOTk0QzY2LjU1MDUgMzUuNjIyNyA2Ni40NTcgMzUuODgwMiA2Ni40MTYgMzYuMTcxOVpNNzkuODI4MSA0MEg3OC4xMDU1TDc4LjAwMjkgMzkuMDcwM0M3Ny43MTEzIDM5LjM5ODQgNzcuMzYwNCAzOS42NTgyIDc2Ljk1MDIgMzkuODQ5NkM3Ni41NDQ2IDQwLjA0MSA3Ni4xMDAzIDQwLjEzNjcgNzUuNjE3MiA0MC4xMzY3Qzc0Ljk5MjggNDAuMTM2NyA3NC40MzQ2IDM5Ljk4NCA3My45NDI0IDM5LjY3ODdDNzMuNDU0OCAzOS4zNjg4IDczLjA2OTcgMzguOTQ1IDcyLjc4NzEgMzguNDA3MkM3Mi41MDQ2IDM3Ljg2OTUgNzIuMzYzMyAzNy4yNjExIDcyLjM2MzMgMzYuNTgyQzcyLjM2MzMgMzUuODk4NCA3Mi41MDQ2IDM1LjI5IDcyLjc4NzEgMzQuNzU2OEM3My4wNjk3IDM0LjIxOTEgNzMuNDU0OCAzMy43OTc1IDczLjk0MjQgMzMuNDkyMkM3NC40MzQ2IDMzLjE4MjMgNzQuOTkyOCAzMy4wMjczIDc1LjYxNzIgMzMuMDI3M0M3Ni4wNjM4IDMzLjAyNzMgNzYuNDc4NSAzMy4xMDk0IDc2Ljg2MTMgMzMuMjczNEM3Ny4yNDg3IDMzLjQzMjkgNzcuNTgzNyAzMy42NTYyIDc3Ljg2NjIgMzMuOTQzNFYyOS43NDYxSDc5LjgyODFWNDBaTTc2LjEyMyAzOC4zNzk5Qzc2LjQ0NjYgMzguMzc5OSA3Ni43MzgzIDM4LjMwNyA3Ni45OTggMzguMTYxMUM3Ny4yNjI0IDM4LjAxNTMgNzcuNDcyIDM3LjgxNzEgNzcuNjI3IDM3LjU2NjRDNzcuNzg2NSAzNy4zMTEyIDc3Ljg2NjIgMzcuMDIxOCA3Ny44NjYyIDM2LjY5ODJWMzYuNDUyMUM3Ny44NjYyIDM2LjEyODYgNzcuNzg2NSAzNS44NDE1IDc3LjYyNyAzNS41OTA4Qzc3LjQ3MiAzNS4zNDAyIDc3LjI2MjQgMzUuMTQ0MiA3Ni45OTggMzUuMDAyOUM3Ni43MzgzIDM0Ljg1NzEgNzYuNDQ2NiAzNC43ODQyIDc2LjEyMyAzNC43ODQyQzc1Ljc5MDQgMzQuNzg0MiA3NS40OTE5IDM0Ljg2MTcgNzUuMjI3NSAzNS4wMTY2Qzc0Ljk2MzIgMzUuMTcxNSA3NC43NTM2IDM1LjM4NTcgNzQuNTk4NiAzNS42NTkyQzc0LjQ0ODIgMzUuOTI4MSA3NC4zNzMgMzYuMjM1NyA3NC4zNzMgMzYuNTgyQzc0LjM3MyAzNi45MjM4IDc0LjQ0ODIgMzcuMjMxNCA3NC41OTg2IDM3LjUwNDlDNzQuNzUzNiAzNy43NzM4IDc0Ljk2MzIgMzcuOTg4IDc1LjIyNzUgMzguMTQ3NUM3NS40OTE5IDM4LjMwMjQgNzUuNzkwNCAzOC4zNzk5IDc2LjEyMyAzOC4zNzk5Wk04My4yMTg4IDQwSDgxLjQ5NjFWMjkuNzQ2MUg4My40NThWMzMuOTQzNEM4My43NDUxIDMzLjY1NjIgODQuMDc3OCAzMy40MzI5IDg0LjQ1NjEgMzMuMjczNEM4NC44Mzg5IDMzLjEwOTQgODUuMjUzNiAzMy4wMjczIDg1LjcwMDIgMzMuMDI3M0M4Ni4zMjkxIDMzLjAyNzMgODYuODg3NCAzMy4xODIzIDg3LjM3NSAzMy40OTIyQzg3Ljg2MjYgMzMuNzk3NSA4OC4yNDc3IDM0LjIxOTEgODguNTMwMyAzNC43NTY4Qzg4LjgxMjggMzUuMjkgODguOTU0MSAzNS44OTg0IDg4Ljk1NDEgMzYuNTgyQzg4Ljk1NDEgMzcuMjYxMSA4OC44MTI4IDM3Ljg2OTUgODguNTMwMyAzOC40MDcyQzg4LjI0NzcgMzguOTQ1IDg3Ljg2MjYgMzkuMzY4OCA4Ny4zNzUgMzkuNjc4N0M4Ni44ODc0IDM5Ljk4NCA4Ni4zMjkxIDQwLjEzNjcgODUuNzAwMiA0MC4xMzY3Qzg1LjIxNzEgNDAuMTM2NyA4NC43NzA1IDQwLjA0MzMgODQuMzYwNCAzOS44NTY0QzgzLjk1NDggMzkuNjY1IDgzLjYwNjEgMzkuNDAzIDgzLjMxNDUgMzkuMDcwM0w4My4yMTg4IDQwWk04NS4yMDEyIDM4LjM3OTlDODUuNTMzOSAzOC4zNzk5IDg1LjgzMDEgMzguMzAyNCA4Ni4wODk4IDM4LjE0NzVDODYuMzU0MiAzNy45OTI1IDg2LjU2MTUgMzcuNzc4MyA4Ni43MTE5IDM3LjUwNDlDODYuODY2OSAzNy4yMzE0IDg2Ljk0NDMgMzYuOTIxNSA4Ni45NDQzIDM2LjU3NTJDODYuOTQ0MyAzNi4yMzM0IDg2Ljg2NjkgMzUuOTI4MSA4Ni43MTE5IDM1LjY1OTJDODYuNTYxNSAzNS4zODU3IDg2LjM1NDIgMzUuMTcxNSA4Ni4wODk4IDM1LjAxNjZDODUuODMwMSAzNC44NjE3IDg1LjUzMzkgMzQuNzg0MiA4NS4yMDEyIDM0Ljc4NDJDODQuODg2NyAzNC43ODQyIDg0LjU5OTYgMzQuODU0OCA4NC4zMzk4IDM0Ljk5NjFDODQuMDg0NiAzNS4xMzc0IDgzLjg3OTYgMzUuMzMxMSA4My43MjQ2IDM1LjU3NzFDODMuNTY5NyAzNS44MjMyIDgzLjQ4MDggMzYuMTA1OCA4My40NTggMzYuNDI0OFYzNi43MjU2QzgzLjQ4MDggMzcuMDQ0NiA4My41Njk3IDM3LjMyOTQgODMuNzI0NiAzNy41ODAxQzgzLjg3OTYgMzcuODI2MiA4NC4wODQ2IDM4LjAyMjEgODQuMzM5OCAzOC4xNjhDODQuNTk1MSAzOC4zMDkyIDg0Ljg4MjIgMzguMzc5OSA4NS4yMDEyIDM4LjM3OTlaTTk2LjMwMjcgNDBIOTQuNTkzOEw5NC40OTEyIDM5LjE4NjVDOTQuMjQwNiAzOS40ODczIDkzLjkzMDcgMzkuNzIyIDkzLjU2MTUgMzkuODkwNkM5My4xOTI0IDQwLjA1NDcgOTIuNzg2OCA0MC4xMzY3IDkyLjM0NDcgNDAuMTM2N0M5MS44NjYyIDQwLjEzNjcgOTEuNDQwMSA0MC4wNDU2IDkxLjA2NjQgMzkuODYzM0M5MC42OTI3IDM5LjY3NjQgOTAuMzk4OCAzOS40MjEyIDkwLjE4NDYgMzkuMDk3N0M4OS45NzA0IDM4Ljc2OTUgODkuODYzMyAzOC4zOTgxIDg5Ljg2MzMgMzcuOTgzNEM4OS44NjMzIDM3LjU0NTkgODkuOTc5NSAzNy4xNjA4IDkwLjIxMTkgMzYuODI4MUM5MC40NDQzIDM2LjQ5NTQgOTAuNzYzMyAzNi4yMzU3IDkxLjE2ODkgMzYuMDQ4OEM5MS41NzkxIDM1Ljg1NzQgOTIuMDQzOSAzNS43NjE3IDkyLjU2MzUgMzUuNzYxN0M5Mi44Njg4IDM1Ljc2MTcgOTMuMTc0MiAzNS43OTU5IDkzLjQ3OTUgMzUuODY0M0M5My43ODk0IDM1LjkzMjYgOTQuMDc2NSAzNi4wMjgzIDk0LjM0MDggMzYuMTUxNFYzNS45NzM2Qzk0LjM0MDggMzUuNzAwMiA5NC4yNjMzIDM1LjQ2NTUgOTQuMTA4NCAzNS4yNjk1QzkzLjk1OCAzNS4wNjkgOTMuNzQ4NCAzNC45MTQxIDkzLjQ3OTUgMzQuODA0N0M5My4yMTUyIDM0LjY5NTMgOTIuOTE4OSAzNC42NDA2IDkyLjU5MDggMzQuNjQwNkM5Mi4yNzY0IDM0LjY0MDYgOTEuOTY0MiAzNC42OTA4IDkxLjY1NDMgMzQuNzkxQzkxLjM0OSAzNC44OTEzIDkxLjA2NjQgMzUuMDQxNyA5MC44MDY2IDM1LjI0MjJMOTAuMjczNCAzMy43NDUxQzkwLjczMzcgMzMuNTA4MSA5MS4xOTg2IDMzLjMzMDQgOTEuNjY4IDMzLjIxMTlDOTIuMTQxOSAzMy4wODg5IDkyLjU5OTkgMzMuMDI3MyA5My4wNDIgMzMuMDI3M0M5My43MDc0IDMzLjAyNzMgOTQuMjgzOSAzMy4xNTk1IDk0Ljc3MTUgMzMuNDIzOEM5NS4yNTkxIDMzLjY4MzYgOTUuNjM1MSAzNC4wNTI3IDk1Ljg5OTQgMzQuNTMxMkM5Ni4xNjgzIDM1LjAwNTIgOTYuMzAyNyAzNS41NjggOTYuMzAyNyAzNi4yMTk3VjQwWk05Mi43NzU0IDM4LjYyNkM5My4wMzUyIDM4LjYyNiA5My4yODM1IDM4LjU2OSA5My41MjA1IDM4LjQ1NTFDOTMuNzU3NSAzOC4zNDExIDkzLjk0ODkgMzguMTg2MiA5NC4wOTQ3IDM3Ljk5MDJDOTQuMjQ1MSAzNy43OTQzIDk0LjMyNDkgMzcuNTc3OCA5NC4zMzQgMzcuMzQwOFYzNy4yOTNDOTQuMTMzNSAzNy4xNTYyIDkzLjkxMDIgMzcuMDUxNCA5My42NjQxIDM2Ljk3ODVDOTMuNDIyNSAzNi45MDEgOTMuMTc2NCAzNi44NjIzIDkyLjkyNTggMzYuODYyM0M5Mi41NTIxIDM2Ljg2MjMgOTIuMjQ2NyAzNi45NDQzIDkyLjAwOTggMzcuMTA4NEM5MS43NzI4IDM3LjI3MjUgOTEuNjU0MyAzNy40ODQ0IDkxLjY1NDMgMzcuNzQ0MUM5MS42NTQzIDM3LjkxMjggOTEuNzAyMSAzOC4wNjU0IDkxLjc5NzkgMzguMjAyMUM5MS44OTgxIDM4LjMzNDMgOTIuMDMyNiAzOC40MzkxIDkyLjIwMTIgMzguNTE2NkM5Mi4zNjk4IDM4LjU4OTUgOTIuNTYxMiAzOC42MjYgOTIuNzc1NCAzOC42MjZaTTEwMy44OTEgMzguOTEzMUMxMDMuNTU4IDM5LjI5NTkgMTAzLjE1IDM5LjU5NjcgMTAyLjY2NyAzOS44MTU0QzEwMi4xODQgNDAuMDI5NiAxMDEuNjUzIDQwLjEzNjcgMTAxLjA3NCA0MC4xMzY3QzEwMC4zNzIgNDAuMTM2NyA5OS43NDM1IDM5Ljk4NCA5OS4xODc1IDM5LjY3ODdDOTguNjM2MSAzOS4zNjg4IDk4LjIwMDggMzguOTQ1IDk3Ljg4MTggMzguNDA3MkM5Ny41Njc0IDM3Ljg2OTUgOTcuNDEwMiAzNy4yNjExIDk3LjQxMDIgMzYuNTgyQzk3LjQxMDIgMzUuODk4NCA5Ny41Njc0IDM1LjI5IDk3Ljg4MTggMzQuNzU2OEM5OC4yMDA4IDM0LjIxOTEgOTguNjM2MSAzMy43OTc1IDk5LjE4NzUgMzMuNDkyMkM5OS43NDM1IDMzLjE4MjMgMTAwLjM3MiAzMy4wMjczIDEwMS4wNzQgMzMuMDI3M0MxMDEuNjQ4IDMzLjAyNzMgMTAyLjE3NyAzMy4xMzQ0IDEwMi42NiAzMy4zNDg2QzEwMy4xNDMgMzMuNTYyOCAxMDMuNTUxIDMzLjg1OSAxMDMuODg0IDM0LjIzNzNMMTAyLjcyOSAzNS40NDczQzEwMi41NTEgMzUuMjQyMiAxMDIuMzI1IDM1LjA4MjcgMTAyLjA1MiAzNC45Njg4QzEwMS43ODMgMzQuODUwMyAxMDEuNSAzNC43OTEgMTAxLjIwNCAzNC43OTFDMTAwLjg2MiAzNC43OTEgMTAwLjU1NyAzNC44Njg1IDEwMC4yODggMzUuMDIzNEMxMDAuMDE5IDM1LjE3MzggOTkuODA3MyAzNS4zODM1IDk5LjY1MjMgMzUuNjUyM0M5OS40OTc0IDM1LjkxNjcgOTkuNDE5OSAzNi4yMjIgOTkuNDE5OSAzNi41Njg0Qzk5LjQxOTkgMzYuOTE5MyA5OS40OTc0IDM3LjIzMTQgOTkuNjUyMyAzNy41MDQ5Qzk5LjgwNzMgMzcuNzc4MyAxMDAuMDE5IDM3Ljk5MjUgMTAwLjI4OCAzOC4xNDc1QzEwMC41NTcgMzguMjk3OSAxMDAuODYyIDM4LjM3MyAxMDEuMjA0IDM4LjM3M0MxMDEuNSAzOC4zNzMgMTAxLjc4NSAzOC4zMTYxIDEwMi4wNTkgMzguMjAyMUMxMDIuMzMyIDM4LjA4MzcgMTAyLjU1NSAzNy45MjE5IDEwMi43MjkgMzcuNzE2OEwxMDMuODkxIDM4LjkxMzFaTTEwNy4wNTYgNDBIMTA1LjA5NFYyOS43NDYxSDEwNy4wNTZWMzYuMDQ4OEwxMDcuNzI2IDM1LjI0MjJMMTA5LjY5NCAzMy4xNjQxSDExMi4xNDhMMTA5LjI1NyAzNi4yMDYxTDExMi40OSA0MEgxMDkuOTU0TDEwNy45MSAzNy40MzY1TDEwNy4wNTYgMzguMjE1OFY0MFonIGZpbGw9JyUyMzAwODVGRicvJTNlJTNjL3N2ZyUzZVwiO1xuICBleHBvcnQgZGVmYXVsdCBpbWc7IiwiaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IGNyZWF0ZVBvcnRhbCB9IGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7IHVzZUZlZWRiYWNrQ29udGV4dCB9IGZyb20gXCIuLi8uLi9jb250ZXh0cy9GZWVkYmFja0NvbnRleHRcIjtcbmltcG9ydCB7IHVzZU1lIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3VzZXJcIjtcbmltcG9ydCB7IENsb3NlQnV0dG9uIH0gZnJvbSBcIi4uL2F0b21zL2J1dHRvbnMvQ2xvc2VCdXR0b25cIjtcbmltcG9ydCB7IENvbGxhcHNlQnV0dG9uIH0gZnJvbSBcIi4uL2F0b21zL2J1dHRvbnMvQ29sbGFwc2VCdXR0b25cIjtcbmltcG9ydCB7IENvbm5lY3RlZFBhbmVsIH0gZnJvbSBcIi4vQ29ubmVjdGVkUGFuZWxcIjtcbmltcG9ydCB7IENvbm5lY3Rpb25QYW5lbCB9IGZyb20gXCIuL0Nvbm5lY3Rpb25QYW5lbFwiO1xuaW1wb3J0IExvZ29GZWVkYmFja0xpZ2h0IGZyb20gXCIuLi8uLi9hc3NldHMvaWNvbnMvbG9nby1mZWVkYmFjay1saWdodC5zdmdcIjtcblxuZXhwb3J0IGNvbnN0IFNpZGVCYXIgPSAoKSA9PiB7XG4gIGNvbnN0IFtpc0NvbGxhcHNlZCwgc2V0SXNDb2xsYXBzZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCB7IGRhdGE6IG1lIH0gPSB1c2VNZSgpO1xuXG4gIGNvbnN0IHsgaXNPcGVuLCBjbG9zZUZlZWRiYWNrT3ZlcmxheSB9ID0gdXNlRmVlZGJhY2tDb250ZXh0KCk7XG5cbiAgY29uc3QgaXNDb25uZWN0ZWQgPSAhIW1lO1xuXG4gIGlmICghaXNPcGVuKSByZXR1cm4gbnVsbDtcblxuICByZXR1cm4gY3JlYXRlUG9ydGFsKFxuICAgIDxkaXZcbiAgICAgIGlkPVwiZmVlZGJhY2stc2lkZWJhclwiXG4gICAgICBjbGFzc05hbWU9e2BmaXhlZCB0b3AtMCB0cmFuc2l0aW9uLWFsbCB3LVszMjBweF0gaC1zY3JlZW4gei1bMTAwMDAwMDBdIGJnLWdyYXktZmVlZGJhY2stODAwIHRleHQtd2hpdGUgcHgtMyBweS00ICR7XG4gICAgICAgIGlzQ29sbGFwc2VkID8gXCJyaWdodC1bLTMyMHB4XVwiIDogXCJyaWdodC0wXCJcbiAgICAgIH1gfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLWZ1bGwgdy1mdWxsICBpdGVtcy1jZW50ZXIgZmxleC1jb2xcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgPGltZyBzcmM9e0xvZ29GZWVkYmFja0xpZ2h0fSBjbGFzc05hbWU9XCJ6LTEwXCIgLz5cbiAgICAgICAgICA8Q2xvc2VCdXR0b24gb25DbGljaz17Y2xvc2VGZWVkYmFja092ZXJsYXl9IHNpemU9XCJsYXJnZVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7aXNDb25uZWN0ZWQgPyA8Q29ubmVjdGVkUGFuZWwgLz4gOiA8Q29ubmVjdGlvblBhbmVsIC8+fVxuICAgICAgICA8Q29sbGFwc2VCdXR0b25cbiAgICAgICAgICBpc0NvbGxhcHNlZD17aXNDb2xsYXBzZWR9XG4gICAgICAgICAgc2V0SXNDb2xsYXBzZWQ9e3NldElzQ29sbGFwc2VkfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+LFxuICAgIGRvY3VtZW50LmJvZHlcbiAgKTtcbn07XG4iLCJmdW5jdGlvbiBzdHlsZUluamVjdChjc3MsIHJlZikge1xuICBpZiAoIHJlZiA9PT0gdm9pZCAwICkgcmVmID0ge307XG4gIHZhciBpbnNlcnRBdCA9IHJlZi5pbnNlcnRBdDtcblxuICBpZiAoIWNzcyB8fCB0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7IHJldHVybjsgfVxuXG4gIHZhciBoZWFkID0gZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuICB2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICBzdHlsZS50eXBlID0gJ3RleHQvY3NzJztcblxuICBpZiAoaW5zZXJ0QXQgPT09ICd0b3AnKSB7XG4gICAgaWYgKGhlYWQuZmlyc3RDaGlsZCkge1xuICAgICAgaGVhZC5pbnNlcnRCZWZvcmUoc3R5bGUsIGhlYWQuZmlyc3RDaGlsZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgfVxuXG4gIGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0eWxlSW5qZWN0O1xuIiwiaW1wb3J0IHsgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIgfSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBPcGVuRmVlZGJhY2tCdXR0b24gfSBmcm9tIFwiLi9jb21wb25lbnRzL2F0b21zL2J1dHRvbnMvT3BlbkZlZWRiYWNrQnV0dG9uXCI7XG5pbXBvcnQgeyBGZWVkYmFja1BpbnMgfSBmcm9tIFwiLi9jb21wb25lbnRzL21vbGVjdWxlcy9mZWVkYmFja3MvZ3JvdXAvRmVlZGJhY2tQaW5zXCI7XG5pbXBvcnQgeyBGZWVkYmFja0lucHV0IH0gZnJvbSBcIi4vY29tcG9uZW50cy9tb2xlY3VsZXMvZmVlZGJhY2tzL2l0ZW0vRmVlZGJhY2tJbnB1dFwiO1xuaW1wb3J0IHsgU2lkZUJhciB9IGZyb20gXCIuL2NvbXBvbmVudHMvb3JnYW5pc21zL1NpZGVCYXJcIjtcbmltcG9ydCB7IEZlZWRiYWNrUHJvdmlkZXIgfSBmcm9tIFwiLi9jb250ZXh0cy9GZWVkYmFja0NvbnRleHRcIjtcbmltcG9ydCBcIi4vaW5kZXguY3NzXCI7XG5pbXBvcnQgdHlwZSB7IEZlZWRiYWNrUm9vdFByb3BzIH0gZnJvbSBcIi4uL2luZGV4LmQudHNcIjtcblxuY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcblxuZnVuY3Rpb24gRmVlZGJhY2tSb290KHByb3BzOiBGZWVkYmFja1Jvb3RQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgPEZlZWRiYWNrUHJvdmlkZXIgey4uLnByb3BzfT5cbiAgICAgICAgICA8RmVlZGJhY2tJbnB1dCAvPlxuICAgICAgICAgIDxTaWRlQmFyIC8+XG4gICAgICAgICAgPE9wZW5GZWVkYmFja0J1dHRvbiAvPlxuICAgICAgICAgIDxGZWVkYmFja1BpbnMgLz5cbiAgICAgICAgPC9GZWVkYmFja1Byb3ZpZGVyPlxuICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgIDwvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBGZWVkYmFja1Jvb3Q7XG4iXSwibmFtZXMiOlsiU3Vic2NyaWJhYmxlIiwiY29uc3RydWN0b3IiLCJsaXN0ZW5lcnMiLCJTZXQiLCJzdWJzY3JpYmUiLCJiaW5kIiwibGlzdGVuZXIiLCJhZGQiLCJvblN1YnNjcmliZSIsImRlbGV0ZSIsIm9uVW5zdWJzY3JpYmUiLCJoYXNMaXN0ZW5lcnMiLCJzaXplIiwiZ2xvYmFsIiwic2VsZiIsIndpbmRvdyIsIkl0ZW0iLCJmdW4iLCJhcnJheSIsIl9jIiwicHJvdG90eXBlIiwicnVuIiwiYXBwbHkiLCJlbnYiLCJwZXJmb3JtYW5jZSIsIm5vdyIsIm1vek5vdyIsIm1zTm93Iiwib05vdyIsIndlYmtpdE5vdyIsIkRhdGUiLCJnZXRUaW1lIiwiYnJvd3NlciQxIiwibmV4dFRpY2siLCIkUmVmcmVzaFJlZyQiLCJpc1NlcnZlciIsImdsb2JhbFRoaXMiLCJub29wIiwiZnVuY3Rpb25hbFVwZGF0ZSIsInVwZGF0ZXIiLCJpbnB1dCIsImlzVmFsaWRUaW1lb3V0IiwidmFsdWUiLCJJbmZpbml0eSIsInRpbWVVbnRpbFN0YWxlIiwidXBkYXRlZEF0Iiwic3RhbGVUaW1lIiwiTWF0aCIsIm1heCIsInJlc29sdmVTdGFsZVRpbWUiLCJxdWVyeSIsInJlc29sdmVFbmFibGVkIiwiZW5hYmxlZCIsIm1hdGNoUXVlcnkiLCJmaWx0ZXJzIiwidHlwZSIsImV4YWN0IiwiZmV0Y2hTdGF0dXMiLCJwcmVkaWNhdGUiLCJxdWVyeUtleSIsInN0YWxlIiwicXVlcnlIYXNoIiwiaGFzaFF1ZXJ5S2V5QnlPcHRpb25zIiwib3B0aW9ucyIsInBhcnRpYWxNYXRjaEtleSIsImlzQWN0aXZlIiwiaXNTdGFsZSIsInN0YXRlIiwibWF0Y2hNdXRhdGlvbiIsIm11dGF0aW9uIiwic3RhdHVzIiwibXV0YXRpb25LZXkiLCJoYXNoS2V5IiwiaGFzaEZuIiwicXVlcnlLZXlIYXNoRm4iLCJKU09OIiwic3RyaW5naWZ5IiwiXyIsInZhbCIsImlzUGxhaW5PYmplY3QiLCJPYmplY3QiLCJrZXlzIiwic29ydCIsInJlZHVjZSIsInJlc3VsdCIsImtleSIsImEiLCJiIiwic29tZSIsInJlcGxhY2VFcXVhbERlZXAiLCJpc1BsYWluQXJyYXkiLCJhSXRlbXMiLCJhU2l6ZSIsImxlbmd0aCIsImJJdGVtcyIsImJTaXplIiwiY29weSIsImVxdWFsSXRlbXMiLCJpIiwiaW5jbHVkZXMiLCJzaGFsbG93RXF1YWxPYmplY3RzIiwiQXJyYXkiLCJpc0FycmF5IiwibyIsImhhc09iamVjdFByb3RvdHlwZSIsImN0b3IiLCJwcm90IiwiaGFzT3duUHJvcGVydHkiLCJnZXRQcm90b3R5cGVPZiIsInRvU3RyaW5nIiwiY2FsbCIsInNsZWVwIiwidGltZW91dCIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0VGltZW91dCIsInJlcGxhY2VEYXRhIiwicHJldkRhdGEiLCJkYXRhIiwic3RydWN0dXJhbFNoYXJpbmciLCJwcm9jZXNzIiwiTk9ERV9FTlYiLCJlcnJvciIsImNvbnNvbGUiLCJhZGRUb0VuZCIsIml0ZW1zIiwiaXRlbSIsIm5ld0l0ZW1zIiwic2xpY2UiLCJhZGRUb1N0YXJ0Iiwic2tpcFRva2VuIiwiU3ltYm9sIiwiZW5zdXJlUXVlcnlGbiIsImZldGNoT3B0aW9ucyIsInF1ZXJ5Rm4iLCJpbml0aWFsUHJvbWlzZSIsInJlamVjdCIsIkVycm9yIiwiRm9jdXNNYW5hZ2VyIiwib25Gb2N1cyIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwic2V0RXZlbnRMaXN0ZW5lciIsInNldHVwIiwiZm9jdXNlZCIsInNldEZvY3VzZWQiLCJjaGFuZ2VkIiwiaXNGb2N1c2VkIiwiZm9yRWFjaCIsImRvY3VtZW50IiwidmlzaWJpbGl0eVN0YXRlIiwiZm9jdXNNYW5hZ2VyIiwiT25saW5lTWFuYWdlciIsIm9uT25saW5lIiwib25saW5lTGlzdGVuZXIiLCJvZmZsaW5lTGlzdGVuZXIiLCJzZXRPbmxpbmUiLCJvbmxpbmUiLCJpc09ubGluZSIsIm9ubGluZU1hbmFnZXIiLCJwZW5kaW5nVGhlbmFibGUiLCJ0aGVuYWJsZSIsIl9yZXNvbHZlIiwiX3JlamVjdCIsImNhdGNoIiwiZmluYWxpemUiLCJhc3NpZ24iLCJyZWFzb24iLCJkZWZhdWx0UmV0cnlEZWxheSIsImZhaWx1cmVDb3VudCIsIm1pbiIsImNhbkZldGNoIiwibmV0d29ya01vZGUiLCJDYW5jZWxsZWRFcnJvciIsInJldmVydCIsInNpbGVudCIsImlzQ2FuY2VsbGVkRXJyb3IiLCJjcmVhdGVSZXRyeWVyIiwiY29uZmlnIiwiaXNSZXRyeUNhbmNlbGxlZCIsImlzUmVzb2x2ZWQiLCJjb250aW51ZUZuIiwiY2FuY2VsIiwiY2FuY2VsT3B0aW9ucyIsImFib3J0IiwiY2FuY2VsUmV0cnkiLCJjb250aW51ZVJldHJ5IiwiY2FuQ29udGludWUiLCJjYW5SdW4iLCJjYW5TdGFydCIsIm9uU3VjY2VzcyIsIm9uRXJyb3IiLCJwYXVzZSIsImNvbnRpbnVlUmVzb2x2ZSIsIm9uUGF1c2UiLCJ0aGVuIiwib25Db250aW51ZSIsInByb21pc2VPclZhbHVlIiwiZm4iLCJyZXRyeSIsInJldHJ5RGVsYXkiLCJkZWxheSIsInNob3VsZFJldHJ5Iiwib25GYWlsIiwicHJvbWlzZSIsImNvbnRpbnVlIiwic3RhcnQiLCJjcmVhdGVOb3RpZnlNYW5hZ2VyIiwicXVldWUiLCJ0cmFuc2FjdGlvbnMiLCJub3RpZnlGbiIsImNhbGxiYWNrIiwiYmF0Y2hOb3RpZnlGbiIsInNjaGVkdWxlRm4iLCJjYiIsInNjaGVkdWxlIiwicHVzaCIsImZsdXNoIiwib3JpZ2luYWxRdWV1ZSIsImJhdGNoIiwiYmF0Y2hDYWxscyIsImFyZ3MiLCJzZXROb3RpZnlGdW5jdGlvbiIsInNldEJhdGNoTm90aWZ5RnVuY3Rpb24iLCJzZXRTY2hlZHVsZXIiLCJub3RpZnlNYW5hZ2VyIiwiUmVtb3ZhYmxlIiwiZGVzdHJveSIsImNsZWFyR2NUaW1lb3V0Iiwic2NoZWR1bGVHYyIsImdjVGltZSIsIm9wdGlvbmFsUmVtb3ZlIiwidXBkYXRlR2NUaW1lIiwibmV3R2NUaW1lIiwiY2xlYXJUaW1lb3V0IiwiUXVlcnkiLCJkZWZhdWx0T3B0aW9ucyIsInNldE9wdGlvbnMiLCJvYnNlcnZlcnMiLCJjYWNoZSIsImdldERlZmF1bHRTdGF0ZSIsIm1ldGEiLCJyZW1vdmUiLCJzZXREYXRhIiwibmV3RGF0YSIsImRhdGFVcGRhdGVkQXQiLCJtYW51YWwiLCJzZXRTdGF0ZSIsInNldFN0YXRlT3B0aW9ucyIsInJlc2V0Iiwib2JzZXJ2ZXIiLCJpc0Rpc2FibGVkIiwiZ2V0T2JzZXJ2ZXJzQ291bnQiLCJkYXRhVXBkYXRlQ291bnQiLCJlcnJvclVwZGF0ZUNvdW50IiwiaXNJbnZhbGlkYXRlZCIsImdldEN1cnJlbnRSZXN1bHQiLCJpc1N0YWxlQnlUaW1lIiwiZmluZCIsIngiLCJzaG91bGRGZXRjaE9uV2luZG93Rm9jdXMiLCJyZWZldGNoIiwiY2FuY2VsUmVmZXRjaCIsInNob3VsZEZldGNoT25SZWNvbm5lY3QiLCJhZGRPYnNlcnZlciIsIm5vdGlmeSIsInJlbW92ZU9ic2VydmVyIiwiZmlsdGVyIiwiaW52YWxpZGF0ZSIsImZldGNoIiwiYWJvcnRDb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwiYWRkU2lnbmFsUHJvcGVydHkiLCJvYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJzaWduYWwiLCJmZXRjaEZuIiwicXVlcnlGbkNvbnRleHQiLCJwZXJzaXN0ZXIiLCJjb250ZXh0IiwiYmVoYXZpb3IiLCJvbkZldGNoIiwiZmV0Y2hNZXRhIiwib25TZXR0bGVkIiwiI2Rpc3BhdGNoIiwiYWN0aW9uIiwicmVkdWNlciIsImZldGNoRmFpbHVyZUNvdW50IiwiZmV0Y2hGYWlsdXJlUmVhc29uIiwiZmV0Y2hTdGF0ZSIsImVycm9yVXBkYXRlZEF0Iiwib25RdWVyeVVwZGF0ZSIsImluaXRpYWxEYXRhIiwiaGFzRGF0YSIsImluaXRpYWxEYXRhVXBkYXRlZEF0IiwiUXVlcnlDYWNoZSIsIk1hcCIsImJ1aWxkIiwiY2xpZW50IiwiZGVmYXVsdFF1ZXJ5T3B0aW9ucyIsImdldFF1ZXJ5RGVmYXVsdHMiLCJoYXMiLCJzZXQiLCJxdWVyeUluTWFwIiwiY2xlYXIiLCJnZXRBbGwiLCJ2YWx1ZXMiLCJkZWZhdWx0ZWRGaWx0ZXJzIiwiZmluZEFsbCIsInF1ZXJpZXMiLCJldmVudCIsIk11dGF0aW9uIiwibXV0YXRpb25JZCIsIm11dGF0aW9uQ2FjaGUiLCJleGVjdXRlIiwidmFyaWFibGVzIiwibXV0YXRpb25GbiIsInJlc3RvcmVkIiwiaXNQYXVzZWQiLCJvbk11dGF0ZSIsInJ1bk5leHQiLCJmYWlsdXJlUmVhc29uIiwic3VibWl0dGVkQXQiLCJvbk11dGF0aW9uVXBkYXRlIiwiTXV0YXRpb25DYWNoZSIsImRlZmF1bHRNdXRhdGlvbk9wdGlvbnMiLCJzY29wZSIsInNjb3BlRm9yIiwic2NvcGVkTXV0YXRpb25zIiwiaW5kZXgiLCJpbmRleE9mIiwic3BsaWNlIiwibXV0YXRpb25zV2l0aFNhbWVTY29wZSIsImZpcnN0UGVuZGluZ011dGF0aW9uIiwibSIsImZvdW5kTXV0YXRpb24iLCJmcm9tIiwicmVzdW1lUGF1c2VkTXV0YXRpb25zIiwicGF1c2VkTXV0YXRpb25zIiwiYWxsIiwibWFwIiwiaWQiLCJpbmZpbml0ZVF1ZXJ5QmVoYXZpb3IiLCJwYWdlcyIsImRpcmVjdGlvbiIsImZldGNoTW9yZSIsIm9sZFBhZ2VzIiwib2xkUGFnZVBhcmFtcyIsInBhZ2VQYXJhbXMiLCJjdXJyZW50UGFnZSIsImNhbmNlbGxlZCIsImFib3J0ZWQiLCJmZXRjaFBhZ2UiLCJwYXJhbSIsInByZXZpb3VzIiwicGFnZVBhcmFtIiwicGFnZSIsIm1heFBhZ2VzIiwiYWRkVG8iLCJwYWdlUGFyYW1GbiIsImdldFByZXZpb3VzUGFnZVBhcmFtIiwiZ2V0TmV4dFBhZ2VQYXJhbSIsIm9sZERhdGEiLCJyZW1haW5pbmdQYWdlcyIsImluaXRpYWxQYWdlUGFyYW0iLCJsYXN0SW5kZXgiLCJRdWVyeUNsaWVudCIsInF1ZXJ5Q2FjaGUiLCJtb3VudCIsInVubW91bnQiLCJpc0ZldGNoaW5nIiwiaXNNdXRhdGluZyIsImdldFF1ZXJ5RGF0YSIsImVuc3VyZVF1ZXJ5RGF0YSIsImRlZmF1bHRlZE9wdGlvbnMiLCJjYWNoZWREYXRhIiwiZmV0Y2hRdWVyeSIsInJldmFsaWRhdGVJZlN0YWxlIiwicHJlZmV0Y2hRdWVyeSIsImdldFF1ZXJpZXNEYXRhIiwic2V0UXVlcnlEYXRhIiwic2V0UXVlcmllc0RhdGEiLCJnZXRRdWVyeVN0YXRlIiwicmVtb3ZlUXVlcmllcyIsInJlc2V0UXVlcmllcyIsInJlZmV0Y2hGaWx0ZXJzIiwicmVmZXRjaFF1ZXJpZXMiLCJjYW5jZWxRdWVyaWVzIiwiZGVmYXVsdGVkQ2FuY2VsT3B0aW9ucyIsInByb21pc2VzIiwiaW52YWxpZGF0ZVF1ZXJpZXMiLCJyZWZldGNoVHlwZSIsInRocm93T25FcnJvciIsImZldGNoSW5maW5pdGVRdWVyeSIsInByZWZldGNoSW5maW5pdGVRdWVyeSIsImVuc3VyZUluZmluaXRlUXVlcnlEYXRhIiwiZ2V0UXVlcnlDYWNoZSIsImdldE11dGF0aW9uQ2FjaGUiLCJnZXREZWZhdWx0T3B0aW9ucyIsInNldERlZmF1bHRPcHRpb25zIiwic2V0UXVlcnlEZWZhdWx0cyIsImRlZmF1bHRzIiwicXVlcnlEZWZhdWx0Iiwic2V0TXV0YXRpb25EZWZhdWx0cyIsImdldE11dGF0aW9uRGVmYXVsdHMiLCJfZGVmYXVsdGVkIiwicmVmZXRjaE9uUmVjb25uZWN0Iiwic3VzcGVuc2UiLCJtdXRhdGlvbnMiLCJRdWVyeU9ic2VydmVyIiwiZXhwZXJpbWVudGFsX3ByZWZldGNoSW5SZW5kZXIiLCJiaW5kTWV0aG9kcyIsInNob3VsZEZldGNoT25Nb3VudCIsInVwZGF0ZVJlc3VsdCIsInNob3VsZEZldGNoT24iLCJyZWZldGNoT25XaW5kb3dGb2N1cyIsIm5vdGlmeU9wdGlvbnMiLCJwcmV2T3B0aW9ucyIsInByZXZRdWVyeSIsIm1vdW50ZWQiLCJzaG91bGRGZXRjaE9wdGlvbmFsbHkiLCJuZXh0UmVmZXRjaEludGVydmFsIiwiZ2V0T3B0aW1pc3RpY1Jlc3VsdCIsImNyZWF0ZVJlc3VsdCIsInNob3VsZEFzc2lnbk9ic2VydmVyQ3VycmVudFByb3BlcnRpZXMiLCJ0cmFja1Jlc3VsdCIsIm9uUHJvcFRyYWNrZWQiLCJ0cmFja2VkUmVzdWx0IiwiY29uZmlndXJhYmxlIiwidHJhY2tQcm9wIiwiZ2V0Q3VycmVudFF1ZXJ5IiwiZmV0Y2hPcHRpbWlzdGljIiwiI2V4ZWN1dGVGZXRjaCIsIiN1cGRhdGVTdGFsZVRpbWVvdXQiLCJ0aW1lIiwiI2NvbXB1dGVSZWZldGNoSW50ZXJ2YWwiLCJyZWZldGNoSW50ZXJ2YWwiLCIjdXBkYXRlUmVmZXRjaEludGVydmFsIiwibmV4dEludGVydmFsIiwic2V0SW50ZXJ2YWwiLCJyZWZldGNoSW50ZXJ2YWxJbkJhY2tncm91bmQiLCIjdXBkYXRlVGltZXJzIiwiI2NsZWFyU3RhbGVUaW1lb3V0IiwiI2NsZWFyUmVmZXRjaEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsInByZXZSZXN1bHQiLCJwcmV2UmVzdWx0U3RhdGUiLCJwcmV2UmVzdWx0T3B0aW9ucyIsInF1ZXJ5Q2hhbmdlIiwicXVlcnlJbml0aWFsU3RhdGUiLCJuZXdTdGF0ZSIsImlzUGxhY2Vob2xkZXJEYXRhIiwiX29wdGltaXN0aWNSZXN1bHRzIiwiZmV0Y2hPbk1vdW50IiwiZmV0Y2hPcHRpb25hbGx5Iiwic2VsZWN0Iiwic2VsZWN0RXJyb3IiLCJwbGFjZWhvbGRlckRhdGEiLCJpc1BlbmRpbmciLCJpc0Vycm9yIiwiaXNMb2FkaW5nIiwiaXNTdWNjZXNzIiwiaXNJbml0aWFsTG9hZGluZyIsImlzRmV0Y2hlZCIsImlzRmV0Y2hlZEFmdGVyTW91bnQiLCJpc1JlZmV0Y2hpbmciLCJpc0xvYWRpbmdFcnJvciIsImlzUmVmZXRjaEVycm9yIiwibmV4dFJlc3VsdCIsImZpbmFsaXplVGhlbmFibGVJZlBvc3NpYmxlIiwicmVjcmVhdGVUaGVuYWJsZSIsInBlbmRpbmciLCJwcmV2VGhlbmFibGUiLCJkZWZhdWx0Tm90aWZ5T3B0aW9ucyIsInNob3VsZE5vdGlmeUxpc3RlbmVycyIsIm5vdGlmeU9uQ2hhbmdlUHJvcHMiLCJub3RpZnlPbkNoYW5nZVByb3BzVmFsdWUiLCJpbmNsdWRlZFByb3BzIiwidHlwZWRLZXkiLCIjdXBkYXRlUXVlcnkiLCIjbm90aWZ5Iiwic2hvdWxkTG9hZE9uTW91bnQiLCJyZXRyeU9uTW91bnQiLCJyZWZldGNoT25Nb3VudCIsImZpZWxkIiwib3B0aW1pc3RpY1Jlc3VsdCIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJtdXRhdGUiLCIjdXBkYXRlUmVzdWx0IiwiaXNJZGxlIiwiUXVlcnlDbGllbnRDb250ZXh0IiwiUmVhY3QiLCJjcmVhdGVDb250ZXh0IiwidXNlUXVlcnlDbGllbnQiLCJxdWVyeUNsaWVudCIsIl9zIiwidXNlQ29udGV4dCIsIlF1ZXJ5Q2xpZW50UHJvdmlkZXIiLCJjaGlsZHJlbiIsIl9zMiIsInVzZUVmZmVjdCIsImpzeCIsIlByb3ZpZGVyIiwiSXNSZXN0b3JpbmdDb250ZXh0IiwidXNlSXNSZXN0b3JpbmciLCJjcmVhdGVWYWx1ZSIsImlzUmVzZXQiLCJjbGVhclJlc2V0IiwiUXVlcnlFcnJvclJlc2V0Qm91bmRhcnlDb250ZXh0IiwidXNlUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkiLCJRdWVyeUVycm9yUmVzZXRCb3VuZGFyeSIsInVzZVN0YXRlIiwic2hvdWxkVGhyb3dFcnJvciIsInRocm93RXJyb3IiLCJwYXJhbXMiLCJlbnN1cmVQcmV2ZW50RXJyb3JCb3VuZGFyeVJldHJ5IiwiZXJyb3JSZXNldEJvdW5kYXJ5IiwidXNlQ2xlYXJSZXNldEVycm9yQm91bmRhcnkiLCJnZXRIYXNFcnJvciIsImVuc3VyZVN1c3BlbnNlVGltZXJzIiwib3JpZ2luYWxTdGFsZVRpbWUiLCJ3aWxsRmV0Y2giLCJpc1Jlc3RvcmluZyIsInNob3VsZFN1c3BlbmQiLCJ1c2VCYXNlUXVlcnkiLCJPYnNlcnZlciIsIl9leHBlcmltZW50YWxfYmVmb3JlUXVlcnkiLCJpc05ld0NhY2hlRW50cnkiLCJzaG91bGRTdWJzY3JpYmUiLCJzdWJzY3JpYmVkIiwidXNlU3luY0V4dGVybmFsU3RvcmUiLCJ1c2VDYWxsYmFjayIsIm9uU3RvcmVDaGFuZ2UiLCJ1bnN1YnNjcmliZSIsIl9leHBlcmltZW50YWxfYWZ0ZXJRdWVyeSIsImZpbmFsbHkiLCJ1c2VRdWVyeSIsInVzZU11dGF0aW9uIiwibXV0YXRlT3B0aW9ucyIsIm11dGF0ZUFzeW5jIiwiYXhpb3MiLCJfanN4IiwiX2pzeHMiLCJpbWciLCJFZGl0IiwiZmFjdG9yeSIsIm1vZHVsZSIsInRoaXMiLCJob29rQ2FsbGJhY2siLCJob29rcyIsImFyZ3VtZW50cyIsInNldEhvb2tDYWxsYmFjayIsImlzT2JqZWN0IiwiaGFzT3duUHJvcCIsImlzT2JqZWN0RW1wdHkiLCJvYmoiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiayIsImlzVW5kZWZpbmVkIiwiaXNOdW1iZXIiLCJpc0RhdGUiLCJhcnIiLCJyZXMiLCJhcnJMZW4iLCJleHRlbmQiLCJ2YWx1ZU9mIiwiY3JlYXRlVVRDIiwiZm9ybWF0IiwibG9jYWxlIiwic3RyaWN0IiwiY3JlYXRlTG9jYWxPclVUQyIsInV0YyIsImRlZmF1bHRQYXJzaW5nRmxhZ3MiLCJlbXB0eSIsInVudXNlZFRva2VucyIsInVudXNlZElucHV0Iiwib3ZlcmZsb3ciLCJjaGFyc0xlZnRPdmVyIiwibnVsbElucHV0IiwiaW52YWxpZEVyYSIsImludmFsaWRNb250aCIsImludmFsaWRGb3JtYXQiLCJ1c2VySW52YWxpZGF0ZWQiLCJpc28iLCJwYXJzZWREYXRlUGFydHMiLCJlcmEiLCJtZXJpZGllbSIsInJmYzI4MjIiLCJ3ZWVrZGF5TWlzbWF0Y2giLCJnZXRQYXJzaW5nRmxhZ3MiLCJfcGYiLCJ0IiwibGVuIiwiaXNWYWxpZCIsImZsYWdzIiwicGFyc2VkUGFydHMiLCJpc05vd1ZhbGlkIiwiX2QiLCJpc05hTiIsImludmFsaWRXZWVrZGF5IiwiX3N0cmljdCIsImJpZ0hvdXIiLCJ1bmRlZmluZWQiLCJpc0Zyb3plbiIsIl9pc1ZhbGlkIiwiY3JlYXRlSW52YWxpZCIsIk5hTiIsIm1vbWVudFByb3BlcnRpZXMiLCJ1cGRhdGVJblByb2dyZXNzIiwiY29weUNvbmZpZyIsInRvIiwicHJvcCIsIm1vbWVudFByb3BlcnRpZXNMZW4iLCJfaXNBTW9tZW50T2JqZWN0IiwiX2kiLCJfZiIsIl9sIiwiX3R6bSIsIl9pc1VUQyIsIl9vZmZzZXQiLCJfbG9jYWxlIiwiTW9tZW50IiwidXBkYXRlT2Zmc2V0IiwiaXNNb21lbnQiLCJ3YXJuIiwibXNnIiwic3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzIiwiZGVwcmVjYXRlIiwiZmlyc3RUaW1lIiwiZGVwcmVjYXRpb25IYW5kbGVyIiwiYXJnIiwiYXJnTGVuIiwiam9pbiIsInN0YWNrIiwiZGVwcmVjYXRpb25zIiwiZGVwcmVjYXRlU2ltcGxlIiwibmFtZSIsImlzRnVuY3Rpb24iLCJGdW5jdGlvbiIsIl9jb25maWciLCJfZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQiLCJSZWdFeHAiLCJfZGF5T2ZNb250aE9yZGluYWxQYXJzZSIsInNvdXJjZSIsIl9vcmRpbmFsUGFyc2UiLCJtZXJnZUNvbmZpZ3MiLCJwYXJlbnRDb25maWciLCJjaGlsZENvbmZpZyIsIkxvY2FsZSIsImRlZmF1bHRDYWxlbmRhciIsInNhbWVEYXkiLCJuZXh0RGF5IiwibmV4dFdlZWsiLCJsYXN0RGF5IiwibGFzdFdlZWsiLCJzYW1lRWxzZSIsImNhbGVuZGFyIiwibW9tIiwib3V0cHV0IiwiX2NhbGVuZGFyIiwiemVyb0ZpbGwiLCJudW1iZXIiLCJ0YXJnZXRMZW5ndGgiLCJmb3JjZVNpZ24iLCJhYnNOdW1iZXIiLCJhYnMiLCJ6ZXJvc1RvRmlsbCIsInNpZ24iLCJwb3ciLCJzdWJzdHIiLCJmb3JtYXR0aW5nVG9rZW5zIiwibG9jYWxGb3JtYXR0aW5nVG9rZW5zIiwiZm9ybWF0RnVuY3Rpb25zIiwiZm9ybWF0VG9rZW5GdW5jdGlvbnMiLCJhZGRGb3JtYXRUb2tlbiIsInRva2VuIiwicGFkZGVkIiwib3JkaW5hbCIsImZ1bmMiLCJsb2NhbGVEYXRhIiwicmVtb3ZlRm9ybWF0dGluZ1Rva2VucyIsIm1hdGNoIiwicmVwbGFjZSIsIm1ha2VGb3JtYXRGdW5jdGlvbiIsImZvcm1hdE1vbWVudCIsImludmFsaWREYXRlIiwiZXhwYW5kRm9ybWF0IiwicmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zIiwibG9uZ0RhdGVGb3JtYXQiLCJ0ZXN0IiwiZGVmYXVsdExvbmdEYXRlRm9ybWF0IiwiTFRTIiwiTFQiLCJMIiwiTEwiLCJMTEwiLCJMTExMIiwiX2xvbmdEYXRlRm9ybWF0IiwiZm9ybWF0VXBwZXIiLCJ0b1VwcGVyQ2FzZSIsInRvayIsImRlZmF1bHRJbnZhbGlkRGF0ZSIsIl9pbnZhbGlkRGF0ZSIsImRlZmF1bHRPcmRpbmFsIiwiZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UiLCJfb3JkaW5hbCIsImRlZmF1bHRSZWxhdGl2ZVRpbWUiLCJmdXR1cmUiLCJwYXN0IiwicyIsInNzIiwibW0iLCJoIiwiaGgiLCJkIiwiZGQiLCJ3Iiwid3ciLCJNIiwiTU0iLCJ5IiwieXkiLCJyZWxhdGl2ZVRpbWUiLCJ3aXRob3V0U3VmZml4Iiwic3RyaW5nIiwiaXNGdXR1cmUiLCJfcmVsYXRpdmVUaW1lIiwicGFzdEZ1dHVyZSIsImRpZmYiLCJhbGlhc2VzIiwiRCIsImRhdGVzIiwiZGF0ZSIsImRheXMiLCJkYXkiLCJlIiwid2Vla2RheXMiLCJ3ZWVrZGF5IiwiRSIsImlzb3dlZWtkYXlzIiwiaXNvd2Vla2RheSIsIkRERCIsImRheW9meWVhcnMiLCJkYXlvZnllYXIiLCJob3VycyIsImhvdXIiLCJtcyIsIm1pbGxpc2Vjb25kcyIsIm1pbGxpc2Vjb25kIiwibWludXRlcyIsIm1pbnV0ZSIsIm1vbnRocyIsIm1vbnRoIiwiUSIsInF1YXJ0ZXJzIiwicXVhcnRlciIsInNlY29uZHMiLCJzZWNvbmQiLCJnZyIsIndlZWt5ZWFycyIsIndlZWt5ZWFyIiwiR0ciLCJpc293ZWVreWVhcnMiLCJpc293ZWVreWVhciIsIndlZWtzIiwid2VlayIsIlciLCJpc293ZWVrcyIsImlzb3dlZWsiLCJ5ZWFycyIsInllYXIiLCJub3JtYWxpemVVbml0cyIsInVuaXRzIiwidG9Mb3dlckNhc2UiLCJub3JtYWxpemVPYmplY3RVbml0cyIsImlucHV0T2JqZWN0Iiwibm9ybWFsaXplZElucHV0Iiwibm9ybWFsaXplZFByb3AiLCJwcmlvcml0aWVzIiwiaXNvV2Vla2RheSIsImRheU9mWWVhciIsIndlZWtZZWFyIiwiaXNvV2Vla1llYXIiLCJpc29XZWVrIiwiZ2V0UHJpb3JpdGl6ZWRVbml0cyIsInVuaXRzT2JqIiwidSIsInVuaXQiLCJwcmlvcml0eSIsIm1hdGNoMSIsIm1hdGNoMiIsIm1hdGNoMyIsIm1hdGNoNCIsIm1hdGNoNiIsIm1hdGNoMXRvMiIsIm1hdGNoM3RvNCIsIm1hdGNoNXRvNiIsIm1hdGNoMXRvMyIsIm1hdGNoMXRvNCIsIm1hdGNoMXRvNiIsIm1hdGNoVW5zaWduZWQiLCJtYXRjaFNpZ25lZCIsIm1hdGNoT2Zmc2V0IiwibWF0Y2hTaG9ydE9mZnNldCIsIm1hdGNoVGltZXN0YW1wIiwibWF0Y2hXb3JkIiwibWF0Y2gxdG8yTm9MZWFkaW5nWmVybyIsIm1hdGNoMXRvMkhhc1plcm8iLCJyZWdleGVzIiwiYWRkUmVnZXhUb2tlbiIsInJlZ2V4Iiwic3RyaWN0UmVnZXgiLCJpc1N0cmljdCIsImdldFBhcnNlUmVnZXhGb3JUb2tlbiIsInVuZXNjYXBlRm9ybWF0IiwicmVnZXhFc2NhcGUiLCJtYXRjaGVkIiwicDEiLCJwMiIsInAzIiwicDQiLCJhYnNGbG9vciIsImNlaWwiLCJmbG9vciIsInRvSW50IiwiYXJndW1lbnRGb3JDb2VyY2lvbiIsImNvZXJjZWROdW1iZXIiLCJpc0Zpbml0ZSIsInRva2VucyIsImFkZFBhcnNlVG9rZW4iLCJ0b2tlbkxlbiIsImFkZFdlZWtQYXJzZVRva2VuIiwiX3ciLCJhZGRUaW1lVG9BcnJheUZyb21Ub2tlbiIsIl9hIiwiaXNMZWFwWWVhciIsIllFQVIiLCJNT05USCIsIkRBVEUiLCJIT1VSIiwiTUlOVVRFIiwiU0VDT05EIiwiTUlMTElTRUNPTkQiLCJXRUVLIiwiV0VFS0RBWSIsInBhcnNlVHdvRGlnaXRZZWFyIiwicGFyc2VJbnQiLCJkYXlzSW5ZZWFyIiwiZ2V0U2V0WWVhciIsIm1ha2VHZXRTZXQiLCJnZXRJc0xlYXBZZWFyIiwia2VlcFRpbWUiLCJzZXQkMSIsImlzVVRDIiwiZ2V0VVRDTWlsbGlzZWNvbmRzIiwiZ2V0TWlsbGlzZWNvbmRzIiwiZ2V0VVRDU2Vjb25kcyIsImdldFNlY29uZHMiLCJnZXRVVENNaW51dGVzIiwiZ2V0TWludXRlcyIsImdldFVUQ0hvdXJzIiwiZ2V0SG91cnMiLCJnZXRVVENEYXRlIiwiZ2V0RGF0ZSIsImdldFVUQ0RheSIsImdldERheSIsImdldFVUQ01vbnRoIiwiZ2V0TW9udGgiLCJnZXRVVENGdWxsWWVhciIsImdldEZ1bGxZZWFyIiwic2V0VVRDTWlsbGlzZWNvbmRzIiwic2V0TWlsbGlzZWNvbmRzIiwic2V0VVRDU2Vjb25kcyIsInNldFNlY29uZHMiLCJzZXRVVENNaW51dGVzIiwic2V0TWludXRlcyIsInNldFVUQ0hvdXJzIiwic2V0SG91cnMiLCJzZXRVVENEYXRlIiwic2V0RGF0ZSIsInNldFVUQ0Z1bGxZZWFyIiwic2V0RnVsbFllYXIiLCJzdHJpbmdHZXQiLCJzdHJpbmdTZXQiLCJwcmlvcml0aXplZCIsInByaW9yaXRpemVkTGVuIiwibW9kIiwibiIsImRheXNJbk1vbnRoIiwibW9kTW9udGgiLCJtb250aHNTaG9ydCIsIm1vbnRoc1Nob3J0UmVnZXgiLCJtb250aHNSZWdleCIsIm1vbnRoc1BhcnNlIiwiZGVmYXVsdExvY2FsZU1vbnRocyIsInNwbGl0IiwiZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0IiwiTU9OVEhTX0lOX0ZPUk1BVCIsImRlZmF1bHRNb250aHNTaG9ydFJlZ2V4IiwiZGVmYXVsdE1vbnRoc1JlZ2V4IiwibG9jYWxlTW9udGhzIiwiX21vbnRocyIsImlzRm9ybWF0IiwibG9jYWxlTW9udGhzU2hvcnQiLCJfbW9udGhzU2hvcnQiLCJoYW5kbGVTdHJpY3RQYXJzZSIsIm1vbnRoTmFtZSIsImlpIiwibGxjIiwidG9Mb2NhbGVMb3dlckNhc2UiLCJfbW9udGhzUGFyc2UiLCJfbG9uZ01vbnRoc1BhcnNlIiwiX3Nob3J0TW9udGhzUGFyc2UiLCJsb2NhbGVNb250aHNQYXJzZSIsIl9tb250aHNQYXJzZUV4YWN0Iiwic2V0TW9udGgiLCJzZXRVVENNb250aCIsImdldFNldE1vbnRoIiwiZ2V0RGF5c0luTW9udGgiLCJjb21wdXRlTW9udGhzUGFyc2UiLCJfbW9udGhzU2hvcnRTdHJpY3RSZWdleCIsIl9tb250aHNTaG9ydFJlZ2V4IiwiX21vbnRoc1N0cmljdFJlZ2V4IiwiX21vbnRoc1JlZ2V4IiwiY21wTGVuUmV2Iiwic2hvcnRQaWVjZXMiLCJsb25nUGllY2VzIiwibWl4ZWRQaWVjZXMiLCJzaG9ydFAiLCJsb25nUCIsImNyZWF0ZURhdGUiLCJjcmVhdGVVVENEYXRlIiwiVVRDIiwiZmlyc3RXZWVrT2Zmc2V0IiwiZG93IiwiZG95IiwiZndkIiwiZndkbHciLCJkYXlPZlllYXJGcm9tV2Vla3MiLCJsb2NhbFdlZWtkYXkiLCJ3ZWVrT2Zmc2V0IiwicmVzWWVhciIsInJlc0RheU9mWWVhciIsIndlZWtPZlllYXIiLCJyZXNXZWVrIiwid2Vla3NJblllYXIiLCJ3ZWVrT2Zmc2V0TmV4dCIsImxvY2FsZVdlZWsiLCJfd2VlayIsImRlZmF1bHRMb2NhbGVXZWVrIiwibG9jYWxlRmlyc3REYXlPZldlZWsiLCJsb2NhbGVGaXJzdERheU9mWWVhciIsImdldFNldFdlZWsiLCJnZXRTZXRJU09XZWVrIiwid2Vla2RheXNNaW4iLCJ3ZWVrZGF5c1Nob3J0Iiwid2Vla2RheXNNaW5SZWdleCIsIndlZWtkYXlzU2hvcnRSZWdleCIsIndlZWtkYXlzUmVnZXgiLCJ3ZWVrZGF5c1BhcnNlIiwicGFyc2VXZWVrZGF5IiwicGFyc2VJc29XZWVrZGF5Iiwic2hpZnRXZWVrZGF5cyIsIndzIiwiY29uY2F0IiwiZGVmYXVsdExvY2FsZVdlZWtkYXlzIiwiZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQiLCJkZWZhdWx0TG9jYWxlV2Vla2RheXNNaW4iLCJkZWZhdWx0V2Vla2RheXNSZWdleCIsImRlZmF1bHRXZWVrZGF5c1Nob3J0UmVnZXgiLCJkZWZhdWx0V2Vla2RheXNNaW5SZWdleCIsImxvY2FsZVdlZWtkYXlzIiwiX3dlZWtkYXlzIiwibG9jYWxlV2Vla2RheXNTaG9ydCIsIl93ZWVrZGF5c1Nob3J0IiwibG9jYWxlV2Vla2RheXNNaW4iLCJfd2Vla2RheXNNaW4iLCJoYW5kbGVTdHJpY3RQYXJzZSQxIiwid2Vla2RheU5hbWUiLCJfd2Vla2RheXNQYXJzZSIsIl9zaG9ydFdlZWtkYXlzUGFyc2UiLCJfbWluV2Vla2RheXNQYXJzZSIsImxvY2FsZVdlZWtkYXlzUGFyc2UiLCJfd2Vla2RheXNQYXJzZUV4YWN0IiwiX2Z1bGxXZWVrZGF5c1BhcnNlIiwiZ2V0U2V0RGF5T2ZXZWVrIiwiZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrIiwiZ2V0U2V0SVNPRGF5T2ZXZWVrIiwiY29tcHV0ZVdlZWtkYXlzUGFyc2UiLCJfd2Vla2RheXNTdHJpY3RSZWdleCIsIl93ZWVrZGF5c1JlZ2V4IiwiX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCIsIl93ZWVrZGF5c1Nob3J0UmVnZXgiLCJfd2Vla2RheXNNaW5TdHJpY3RSZWdleCIsIl93ZWVrZGF5c01pblJlZ2V4IiwibWluUGllY2VzIiwibWlucCIsInNob3J0cCIsImxvbmdwIiwiaEZvcm1hdCIsImtGb3JtYXQiLCJsb3dlcmNhc2UiLCJtYXRjaE1lcmlkaWVtIiwiX21lcmlkaWVtUGFyc2UiLCJrSW5wdXQiLCJfaXNQbSIsImlzUE0iLCJfbWVyaWRpZW0iLCJwb3MiLCJwb3MxIiwicG9zMiIsImxvY2FsZUlzUE0iLCJjaGFyQXQiLCJkZWZhdWx0TG9jYWxlTWVyaWRpZW1QYXJzZSIsImdldFNldEhvdXIiLCJsb2NhbGVNZXJpZGllbSIsImlzTG93ZXIiLCJiYXNlQ29uZmlnIiwiZGF5T2ZNb250aE9yZGluYWxQYXJzZSIsIm1lcmlkaWVtUGFyc2UiLCJsb2NhbGVzIiwibG9jYWxlRmFtaWxpZXMiLCJnbG9iYWxMb2NhbGUiLCJjb21tb25QcmVmaXgiLCJhcnIxIiwiYXJyMiIsIm1pbmwiLCJub3JtYWxpemVMb2NhbGUiLCJjaG9vc2VMb2NhbGUiLCJuYW1lcyIsImoiLCJuZXh0IiwibG9hZExvY2FsZSIsImlzTG9jYWxlTmFtZVNhbmUiLCJvbGRMb2NhbGUiLCJhbGlhc2VkUmVxdWlyZSIsImV4cG9ydHMiLCJfYWJiciIsInJlcXVpcmUiLCJnZXRTZXRHbG9iYWxMb2NhbGUiLCJnZXRMb2NhbGUiLCJkZWZpbmVMb2NhbGUiLCJhYmJyIiwicGFyZW50TG9jYWxlIiwidXBkYXRlTG9jYWxlIiwidG1wTG9jYWxlIiwibGlzdExvY2FsZXMiLCJjaGVja092ZXJmbG93IiwiX292ZXJmbG93RGF5T2ZZZWFyIiwiX292ZXJmbG93V2Vla3MiLCJfb3ZlcmZsb3dXZWVrZGF5IiwiZXh0ZW5kZWRJc29SZWdleCIsImJhc2ljSXNvUmVnZXgiLCJ0elJlZ2V4IiwiaXNvRGF0ZXMiLCJpc29UaW1lcyIsImFzcE5ldEpzb25SZWdleCIsIm9ic09mZnNldHMiLCJVVCIsIkdNVCIsIkVEVCIsIkVTVCIsIkNEVCIsIkNTVCIsIk1EVCIsIk1TVCIsIlBEVCIsIlBTVCIsImNvbmZpZ0Zyb21JU08iLCJsIiwiZXhlYyIsImFsbG93VGltZSIsImRhdGVGb3JtYXQiLCJ0aW1lRm9ybWF0IiwidHpGb3JtYXQiLCJpc29EYXRlc0xlbiIsImlzb1RpbWVzTGVuIiwiY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdCIsImV4dHJhY3RGcm9tUkZDMjgyMlN0cmluZ3MiLCJ5ZWFyU3RyIiwibW9udGhTdHIiLCJkYXlTdHIiLCJob3VyU3RyIiwibWludXRlU3RyIiwic2Vjb25kU3RyIiwidW50cnVuY2F0ZVllYXIiLCJwcmVwcm9jZXNzUkZDMjgyMiIsImNoZWNrV2Vla2RheSIsIndlZWtkYXlTdHIiLCJwYXJzZWRJbnB1dCIsIndlZWtkYXlQcm92aWRlZCIsIndlZWtkYXlBY3R1YWwiLCJjYWxjdWxhdGVPZmZzZXQiLCJvYnNPZmZzZXQiLCJtaWxpdGFyeU9mZnNldCIsIm51bU9mZnNldCIsImhtIiwiY29uZmlnRnJvbVJGQzI4MjIiLCJwYXJzZWRBcnJheSIsImNvbmZpZ0Zyb21TdHJpbmciLCJjcmVhdGVGcm9tSW5wdXRGYWxsYmFjayIsIl91c2VVVEMiLCJjIiwiY3VycmVudERhdGVBcnJheSIsIm5vd1ZhbHVlIiwiY29uZmlnRnJvbUFycmF5IiwiY3VycmVudERhdGUiLCJleHBlY3RlZFdlZWtkYXkiLCJ5ZWFyVG9Vc2UiLCJkYXlPZlllYXJGcm9tV2Vla0luZm8iLCJfZGF5T2ZZZWFyIiwiX25leHREYXkiLCJ0ZW1wIiwid2Vla2RheU92ZXJmbG93IiwiY3VyV2VlayIsImNyZWF0ZUxvY2FsIiwiSVNPXzg2MDEiLCJSRkNfMjgyMiIsInNraXBwZWQiLCJzdHJpbmdMZW5ndGgiLCJ0b3RhbFBhcnNlZElucHV0TGVuZ3RoIiwibWVyaWRpZW1GaXhXcmFwIiwiZXJhc0NvbnZlcnRZZWFyIiwiaXNQbSIsIm1lcmlkaWVtSG91ciIsImNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheSIsInRlbXBDb25maWciLCJiZXN0TW9tZW50Iiwic2NvcmVUb0JlYXQiLCJjdXJyZW50U2NvcmUiLCJ2YWxpZEZvcm1hdEZvdW5kIiwiYmVzdEZvcm1hdElzVmFsaWQiLCJjb25maWdmTGVuIiwic2NvcmUiLCJjb25maWdGcm9tT2JqZWN0IiwiZGF5T3JEYXRlIiwiY3JlYXRlRnJvbUNvbmZpZyIsInByZXBhcmVDb25maWciLCJwcmVwYXJzZSIsImNvbmZpZ0Zyb21JbnB1dCIsInByb3RvdHlwZU1pbiIsIm90aGVyIiwicHJvdG90eXBlTWF4IiwicGlja0J5IiwibW9tZW50cyIsIm9yZGVyaW5nIiwiaXNEdXJhdGlvblZhbGlkIiwidW5pdEhhc0RlY2ltYWwiLCJvcmRlckxlbiIsInBhcnNlRmxvYXQiLCJpc1ZhbGlkJDEiLCJjcmVhdGVJbnZhbGlkJDEiLCJjcmVhdGVEdXJhdGlvbiIsIkR1cmF0aW9uIiwiZHVyYXRpb24iLCJfbWlsbGlzZWNvbmRzIiwiX2RheXMiLCJfZGF0YSIsIl9idWJibGUiLCJpc0R1cmF0aW9uIiwiYWJzUm91bmQiLCJyb3VuZCIsImNvbXBhcmVBcnJheXMiLCJhcnJheTEiLCJhcnJheTIiLCJkb250Q29udmVydCIsImxlbmd0aERpZmYiLCJkaWZmcyIsIm9mZnNldCIsInNlcGFyYXRvciIsInV0Y09mZnNldCIsIm9mZnNldEZyb21TdHJpbmciLCJjaHVua09mZnNldCIsIm1hdGNoZXIiLCJtYXRjaGVzIiwiY2h1bmsiLCJwYXJ0cyIsImNsb25lV2l0aE9mZnNldCIsIm1vZGVsIiwiY2xvbmUiLCJzZXRUaW1lIiwibG9jYWwiLCJnZXREYXRlT2Zmc2V0IiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJnZXRTZXRPZmZzZXQiLCJrZWVwTG9jYWxUaW1lIiwia2VlcE1pbnV0ZXMiLCJsb2NhbEFkanVzdCIsIl9jaGFuZ2VJblByb2dyZXNzIiwiYWRkU3VidHJhY3QiLCJnZXRTZXRab25lIiwic2V0T2Zmc2V0VG9VVEMiLCJzZXRPZmZzZXRUb0xvY2FsIiwic3VidHJhY3QiLCJzZXRPZmZzZXRUb1BhcnNlZE9mZnNldCIsInRab25lIiwiaGFzQWxpZ25lZEhvdXJPZmZzZXQiLCJpc0RheWxpZ2h0U2F2aW5nVGltZSIsImlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZCIsIl9pc0RTVFNoaWZ0ZWQiLCJ0b0FycmF5IiwiaXNMb2NhbCIsImlzVXRjT2Zmc2V0IiwiaXNVdGMiLCJhc3BOZXRSZWdleCIsImlzb1JlZ2V4IiwicmV0IiwiZGlmZlJlcyIsInBhcnNlSXNvIiwibW9tZW50c0RpZmZlcmVuY2UiLCJpbnZhbGlkIiwiaW5wIiwicG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZSIsImJhc2UiLCJpc0FmdGVyIiwiaXNCZWZvcmUiLCJjcmVhdGVBZGRlciIsInBlcmlvZCIsImR1ciIsInRtcCIsImlzQWRkaW5nIiwiaXNTdHJpbmciLCJTdHJpbmciLCJpc01vbWVudElucHV0IiwiaXNOdW1iZXJPclN0cmluZ0FycmF5IiwiaXNNb21lbnRJbnB1dE9iamVjdCIsIm9iamVjdFRlc3QiLCJwcm9wZXJ0eVRlc3QiLCJwcm9wZXJ0aWVzIiwicHJvcGVydHkiLCJwcm9wZXJ0eUxlbiIsImFycmF5VGVzdCIsImRhdGFUeXBlVGVzdCIsImlzQ2FsZW5kYXJTcGVjIiwiZ2V0Q2FsZW5kYXJGb3JtYXQiLCJteU1vbWVudCIsImNhbGVuZGFyJDEiLCJmb3JtYXRzIiwic29kIiwic3RhcnRPZiIsImNhbGVuZGFyRm9ybWF0IiwibG9jYWxJbnB1dCIsImVuZE9mIiwiaXNCZXR3ZWVuIiwiaW5jbHVzaXZpdHkiLCJsb2NhbEZyb20iLCJsb2NhbFRvIiwiaXNTYW1lIiwiaW5wdXRNcyIsImlzU2FtZU9yQWZ0ZXIiLCJpc1NhbWVPckJlZm9yZSIsImFzRmxvYXQiLCJ0aGF0Iiwiem9uZURlbHRhIiwibW9udGhEaWZmIiwid2hvbGVNb250aERpZmYiLCJhbmNob3IiLCJhbmNob3IyIiwiYWRqdXN0IiwiZGVmYXVsdEZvcm1hdCIsImRlZmF1bHRGb3JtYXRVdGMiLCJ0b0lTT1N0cmluZyIsImtlZXBPZmZzZXQiLCJ0b0RhdGUiLCJpbnNwZWN0Iiwiem9uZSIsInByZWZpeCIsImRhdGV0aW1lIiwic3VmZml4IiwiaW5wdXRTdHJpbmciLCJwb3N0Zm9ybWF0IiwiaHVtYW5pemUiLCJmcm9tTm93IiwidG9Ob3ciLCJuZXdMb2NhbGVEYXRhIiwibGFuZyIsIk1TX1BFUl9TRUNPTkQiLCJNU19QRVJfTUlOVVRFIiwiTVNfUEVSX0hPVVIiLCJNU19QRVJfNDAwX1lFQVJTIiwibW9kJDEiLCJkaXZpZGVuZCIsImRpdmlzb3IiLCJsb2NhbFN0YXJ0T2ZEYXRlIiwidXRjU3RhcnRPZkRhdGUiLCJzdGFydE9mRGF0ZSIsInVuaXgiLCJ0b09iamVjdCIsInRvSlNPTiIsImlzVmFsaWQkMiIsInBhcnNpbmdGbGFncyIsImludmFsaWRBdCIsImNyZWF0aW9uRGF0YSIsIm1hdGNoRXJhQWJiciIsIm1hdGNoRXJhTmFtZSIsIm1hdGNoRXJhTmFycm93IiwiZXJhc1BhcnNlIiwibWF0Y2hFcmFZZWFyT3JkaW5hbCIsIl9lcmFZZWFyT3JkaW5hbFJlZ2V4IiwiZXJhWWVhck9yZGluYWxQYXJzZSIsImxvY2FsZUVyYXMiLCJlcmFzIiwiX2VyYXMiLCJzaW5jZSIsInVudGlsIiwibG9jYWxlRXJhc1BhcnNlIiwiZXJhTmFtZSIsIm5hcnJvdyIsImxvY2FsZUVyYXNDb252ZXJ0WWVhciIsImRpciIsImdldEVyYU5hbWUiLCJnZXRFcmFOYXJyb3ciLCJnZXRFcmFBYmJyIiwiZ2V0RXJhWWVhciIsImVyYXNOYW1lUmVnZXgiLCJjb21wdXRlRXJhc1BhcnNlIiwiX2VyYXNOYW1lUmVnZXgiLCJfZXJhc1JlZ2V4IiwiZXJhc0FiYnJSZWdleCIsIl9lcmFzQWJiclJlZ2V4IiwiZXJhc05hcnJvd1JlZ2V4IiwiX2VyYXNOYXJyb3dSZWdleCIsImFiYnJQaWVjZXMiLCJuYW1lUGllY2VzIiwibmFycm93UGllY2VzIiwiZXJhc05hbWUiLCJlcmFzQWJiciIsImVyYXNOYXJyb3ciLCJhZGRXZWVrWWVhckZvcm1hdFRva2VuIiwiZ2V0dGVyIiwiZ2V0U2V0V2Vla1llYXIiLCJnZXRTZXRXZWVrWWVhckhlbHBlciIsImdldFNldElTT1dlZWtZZWFyIiwiZ2V0SVNPV2Vla3NJblllYXIiLCJnZXRJU09XZWVrc0luSVNPV2Vla1llYXIiLCJnZXRXZWVrc0luWWVhciIsIndlZWtJbmZvIiwiZ2V0V2Vla3NJbldlZWtZZWFyIiwid2Vla3NUYXJnZXQiLCJzZXRXZWVrQWxsIiwiZGF5T2ZZZWFyRGF0YSIsImdldFNldFF1YXJ0ZXIiLCJnZXRTZXREYXlPZk1vbnRoIiwiZ2V0U2V0RGF5T2ZZZWFyIiwiZ2V0U2V0TWludXRlIiwiZ2V0U2V0U2Vjb25kIiwiZ2V0U2V0TWlsbGlzZWNvbmQiLCJwYXJzZU1zIiwiZ2V0Wm9uZUFiYnIiLCJnZXRab25lTmFtZSIsInByb3RvIiwiZm9yIiwiZXJhTmFycm93IiwiZXJhQWJiciIsImVyYVllYXIiLCJpc29XZWVrcyIsIndlZWtzSW5XZWVrWWVhciIsImlzb1dlZWtzSW5ZZWFyIiwiaXNvV2Vla3NJbklTT1dlZWtZZWFyIiwicGFyc2Vab25lIiwiaXNEU1QiLCJ6b25lQWJiciIsInpvbmVOYW1lIiwiaXNEU1RTaGlmdGVkIiwiY3JlYXRlVW5peCIsImNyZWF0ZUluWm9uZSIsInByZVBhcnNlUG9zdEZvcm1hdCIsInByb3RvJDEiLCJmaXJzdERheU9mWWVhciIsImZpcnN0RGF5T2ZXZWVrIiwiZ2V0JDEiLCJzZXR0ZXIiLCJsaXN0TW9udGhzSW1wbCIsIm91dCIsImxpc3RXZWVrZGF5c0ltcGwiLCJsb2NhbGVTb3J0ZWQiLCJzaGlmdCIsImxpc3RNb250aHMiLCJsaXN0TW9udGhzU2hvcnQiLCJsaXN0V2Vla2RheXMiLCJsaXN0V2Vla2RheXNTaG9ydCIsImxpc3RXZWVrZGF5c01pbiIsImxhbmdEYXRhIiwibWF0aEFicyIsImFkZFN1YnRyYWN0JDEiLCJhZGQkMSIsInN1YnRyYWN0JDEiLCJhYnNDZWlsIiwiYnViYmxlIiwibW9udGhzRnJvbURheXMiLCJtb250aHNUb0RheXMiLCJkYXlzVG9Nb250aHMiLCJhcyIsIm1ha2VBcyIsImFsaWFzIiwiYXNNaWxsaXNlY29uZHMiLCJhc1NlY29uZHMiLCJhc01pbnV0ZXMiLCJhc0hvdXJzIiwiYXNEYXlzIiwiYXNXZWVrcyIsImFzTW9udGhzIiwiYXNRdWFydGVycyIsImFzWWVhcnMiLCJ2YWx1ZU9mJDEiLCJjbG9uZSQxIiwiZ2V0JDIiLCJtYWtlR2V0dGVyIiwidGhyZXNob2xkcyIsInN1YnN0aXR1dGVUaW1lQWdvIiwicmVsYXRpdmVUaW1lJDEiLCJwb3NOZWdEdXJhdGlvbiIsImdldFNldFJlbGF0aXZlVGltZVJvdW5kaW5nIiwicm91bmRpbmdGdW5jdGlvbiIsImdldFNldFJlbGF0aXZlVGltZVRocmVzaG9sZCIsInRocmVzaG9sZCIsImxpbWl0IiwiYXJnV2l0aFN1ZmZpeCIsImFyZ1RocmVzaG9sZHMiLCJ3aXRoU3VmZml4IiwidGgiLCJhYnMkMSIsInRvSVNPU3RyaW5nJDEiLCJ0b3RhbCIsInRvdGFsU2lnbiIsInltU2lnbiIsImRheXNTaWduIiwiaG1zU2lnbiIsInRvRml4ZWQiLCJwcm90byQyIiwidG9Jc29TdHJpbmciLCJ2ZXJzaW9uIiwicmVsYXRpdmVUaW1lUm91bmRpbmciLCJyZWxhdGl2ZVRpbWVUaHJlc2hvbGQiLCJIVE1MNV9GTVQiLCJEQVRFVElNRV9MT0NBTCIsIkRBVEVUSU1FX0xPQ0FMX1NFQ09ORFMiLCJEQVRFVElNRV9MT0NBTF9NUyIsIlRJTUUiLCJUSU1FX1NFQ09ORFMiLCJUSU1FX01TIiwiQ2xvc2UiLCJ1c2VSZWYiLCJEb3RzSG9yaXpvbnRhbCIsImZvcndhcmRSZWYiLCJjcmVhdGVQb3J0YWwiLCJDaGV2cm9uTGVmdCIsIkNoZXZyb25SaWdodCIsIkxvZ291dEljb24iLCJTZWFyY2giLCJMb2dvRmVlZGJhY2tEYXJrIiwiX0ZyYWdtZW50IiwiTG9nb0ZlZWRiYWNrTGlnaHQiLCJzdHlsZUluamVjdCIsImNzcyIsInJlZiIsImluc2VydEF0IiwiaGVhZCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwic3R5bGUiLCJjcmVhdGVFbGVtZW50IiwiZmlyc3RDaGlsZCIsImluc2VydEJlZm9yZSIsImFwcGVuZENoaWxkIiwic3R5bGVTaGVldCIsImNzc1RleHQiLCJjcmVhdGVUZXh0Tm9kZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU8s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QUFDSyxVQUFVLENBQUNDLE9BQU8sR0FBR1gsR0FBRztBQUNoQyxHQUFDLE1BQU07SUFDTEssS0FBSyxDQUFDSSxXQUFXLENBQUNweUMsUUFBUSxDQUFDdXlDLGNBQWMsQ0FBQ1osR0FBRyxDQUFDLENBQUM7QUFDakQ7QUFDRjs7Ozs7QUNoQkEsTUFBTSxXQUFXLEdBQUcsSUFBSSxXQUFXLEVBQUU7QUFFckMsU0FBUyxZQUFZLENBQUMsS0FBd0IsRUFBQTtBQUM1QyxJQUFBLFFBQ0VqNUIsY0FBQSxDQUFBODRCLG1CQUFBLEVBQUEsRUFBQSxRQUFBLEVBQ0U5NEIsY0FBQyxDQUFBLG1CQUFtQixJQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUEsUUFBQSxFQUN0Q0MsZUFBQyxDQUFBLGdCQUFnQixFQUFLLE1BQUEsQ0FBQSxNQUFBLENBQUEsRUFBQSxFQUFBLEtBQUssZUFDekJELGNBQUMsQ0FBQSxhQUFhLEVBQUcsRUFBQSxDQUFBLEVBQ2pCQSxjQUFDLENBQUEsT0FBTyxFQUFHLEVBQUEsQ0FBQSxFQUNYQSxlQUFDLGtCQUFrQixFQUFBLEVBQUEsQ0FBRyxFQUN0QkEsY0FBQSxDQUFDLFlBQVksRUFBRyxFQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FDQyxFQUNDLENBQUEsRUFBQSxDQUNyQjtBQUVQOzs7OyIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDM5LDc1XX0=
8796
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzLmpzIiwic291cmNlcyI6WyIuLi9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3F1ZXJ5LWNvcmUvYnVpbGQvbW9kZXJuL3N1YnNjcmliYWJsZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9yb2xsdXAtcGx1Z2luLW5vZGUtcG9seWZpbGxzL3BvbHlmaWxscy9nbG9iYWwuanMiLCIuLi9ub2RlX21vZHVsZXMvcm9sbHVwLXBsdWdpbi1ub2RlLXBvbHlmaWxscy9wb2x5ZmlsbHMvcHJvY2Vzcy1lczYuanMiLCIuLi9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3F1ZXJ5LWNvcmUvYnVpbGQvbW9kZXJuL3V0aWxzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9xdWVyeS1jb3JlL2J1aWxkL21vZGVybi9mb2N1c01hbmFnZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3F1ZXJ5LWNvcmUvYnVpbGQvbW9kZXJuL29ubGluZU1hbmFnZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3F1ZXJ5LWNvcmUvYnVpbGQvbW9kZXJuL3RoZW5hYmxlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9xdWVyeS1jb3JlL2J1aWxkL21vZGVybi9yZXRyeWVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9xdWVyeS1jb3JlL2J1aWxkL21vZGVybi9ub3RpZnlNYW5hZ2VyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9xdWVyeS1jb3JlL2J1aWxkL21vZGVybi9yZW1vdmFibGUuanMiLCIuLi9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3F1ZXJ5LWNvcmUvYnVpbGQvbW9kZXJuL3F1ZXJ5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9xdWVyeS1jb3JlL2J1aWxkL21vZGVybi9xdWVyeUNhY2hlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9xdWVyeS1jb3JlL2J1aWxkL21vZGVybi9tdXRhdGlvbi5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcXVlcnktY29yZS9idWlsZC9tb2Rlcm4vbXV0YXRpb25DYWNoZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcXVlcnktY29yZS9idWlsZC9tb2Rlcm4vaW5maW5pdGVRdWVyeUJlaGF2aW9yLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9xdWVyeS1jb3JlL2J1aWxkL21vZGVybi9xdWVyeUNsaWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcXVlcnktY29yZS9idWlsZC9tb2Rlcm4vcXVlcnlPYnNlcnZlci5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcXVlcnktY29yZS9idWlsZC9tb2Rlcm4vbXV0YXRpb25PYnNlcnZlci5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcmVhY3QtcXVlcnkvYnVpbGQvbW9kZXJuL1F1ZXJ5Q2xpZW50UHJvdmlkZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5L2J1aWxkL21vZGVybi9pc1Jlc3RvcmluZy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcmVhY3QtcXVlcnkvYnVpbGQvbW9kZXJuL1F1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9yZWFjdC1xdWVyeS9idWlsZC9tb2Rlcm4vdXRpbHMuanMiLCIuLi9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5L2J1aWxkL21vZGVybi9lcnJvckJvdW5kYXJ5VXRpbHMuanMiLCIuLi9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5L2J1aWxkL21vZGVybi9zdXNwZW5zZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcmVhY3QtcXVlcnkvYnVpbGQvbW9kZXJuL3VzZUJhc2VRdWVyeS5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcmVhY3QtcXVlcnkvYnVpbGQvbW9kZXJuL3VzZVF1ZXJ5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9yZWFjdC1xdWVyeS9idWlsZC9tb2Rlcm4vdXNlTXV0YXRpb24uanMiLCIuLi8uLi9saWJzL2JhY2tlbmQtY2xpZW50L2Jhc2UudHMiLCIuLi8uLi9saWJzL2JhY2tlbmQtY2xpZW50L2NvbW1vbi50cyIsIi4uLy4uL2xpYnMvYmFja2VuZC1jbGllbnQvYXBpLnRzIiwiLi4vLi4vbGlicy9iYWNrZW5kLWNsaWVudC9jb25maWd1cmF0aW9uLnRzIiwiLi4vLi4vc3JjL3NlcnZpY2VzL2FwaS50cyIsIi4uLy4uL3NyYy9zZXJ2aWNlcy9mZWVkYmFjay50cyIsIi4uLy4uL3NyYy9zZXJ2aWNlcy91c2VyLnRzIiwiLi4vLi4vc3JjL2NvbnRleHRzL0ZlZWRiYWNrQ29udGV4dC50c3giLCIuLi8uLi9zcmMvY29tcG9uZW50cy9hdG9tcy9idXR0b25zL0J1dHRvbi50c3giLCIuLi9zcmMvYXNzZXRzL2ljb25zL2VkaXQtMDQuc3ZnIiwiLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvYnV0dG9ucy9PcGVuRmVlZGJhY2tCdXR0b24udHN4IiwiLi4vLi4vc3JjL3V0aWxzL2dldEluaXRpYWxzLnRzIiwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiLCIuLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvZmVlZGJhY2tzL2l0ZW0vRmVlZGJhY2tJdGVtSG92ZXJlZC50c3giLCIuLi9zcmMvYXNzZXRzL2ljb25zL2Nsb3NlLnN2ZyIsIi4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL2J1dHRvbnMvQ2xvc2VCdXR0b24udHN4IiwiLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL3JlcGxpZXMvUmVwbHlJdGVtLnRzeCIsIi4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9mZWVkYmFja3Mvc2hhcmVkL0ZlZWRiYWNrVGV4dEFyZWEudHN4IiwiLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL2ZlZWRiYWNrcy9tZW51L01lbnVJdGVtLnRzeCIsIi4uL3NyYy9hc3NldHMvaWNvbnMvZG90cy1ob3Jpem9udGFsLnN2ZyIsIi4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9mZWVkYmFja3MvbWVudS9NZW51QnV0dG9uLnRzeCIsIi4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9mZWVkYmFja3MvaXRlbS9GZWVkYmFja0l0ZW1TZWxlY3RlZC50c3giLCIuLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvZmVlZGJhY2tzL3NoYXJlZC9GZWVkYmFja1Bvc2l0aW9uZXIudHN4IiwiLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL2ZlZWRiYWNrcy9pdGVtL0ZlZWRiYWNrUGluLnRzeCIsIi4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9mZWVkYmFja3MvZ3JvdXAvRmVlZGJhY2tQaW5zLnRzeCIsIi4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL2ljb25zL0NvbW1lbnRJY29uLnRzeCIsIi4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9mZWVkYmFja3MvaXRlbS9GZWVkYmFja0lucHV0LnRzeCIsIi4uL3NyYy9hc3NldHMvaWNvbnMvY2hldnJvbi1sZWZ0LnN2ZyIsIi4uL3NyYy9hc3NldHMvaWNvbnMvY2hldnJvbi1yaWdodC5zdmciLCIuLi8uLi9zcmMvY29tcG9uZW50cy9hdG9tcy9idXR0b25zL0NvbGxhcHNlQnV0dG9uLnRzeCIsIi4uL3NyYy9hc3NldHMvaWNvbnMvbG9nLW91dC0wMi5zdmciLCIuLi8uLi9zcmMvc2VydmljZXMvYXV0aC50cyIsIi4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9Db25uZWN0ZWRVc2VyLnRzeCIsIi4uL3NyYy9hc3NldHMvaWNvbnMvc2VhcmNoLnN2ZyIsIi4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL2lucHV0cy9TZWFyY2hJbnB1dC50c3giLCIuLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvZmVlZGJhY2tzL2l0ZW0vRmVlZGJhY2tMaXN0SXRlbS50c3giLCIuLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvZmVlZGJhY2tzL2dyb3VwL0ZlZWRiYWNrTGlzdC50c3giLCIuLi8uLi9zcmMvY29tcG9uZW50cy9vcmdhbmlzbXMvQ29ubmVjdGVkUGFuZWwudHN4IiwiLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvaW5wdXRzL0lucHV0LnRzeCIsIi4uL3NyYy9hc3NldHMvaWNvbnMvbG9nby1mZWVkYmFjay1kYXJrLnN2ZyIsIi4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9mb3Jtcy9TaWduVXBGb3JtLnRzeCIsIi4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9mb3Jtcy9TaWduSW5Gb3JtLnRzeCIsIi4uLy4uL3NyYy9jb21wb25lbnRzL29yZ2FuaXNtcy9Db25uZWN0aW9uLnRzeCIsIi4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL21vZGFscy9Nb2RhbC50c3giLCIuLi8uLi9zcmMvY29tcG9uZW50cy9hdG9tcy9tb2RhbHMvQ29ubmVjdGlvbk1vZGFsLnRzeCIsIi4uLy4uL3NyYy9jb21wb25lbnRzL29yZ2FuaXNtcy9Db25uZWN0aW9uUGFuZWwudHN4IiwiLi4vc3JjL2Fzc2V0cy9pY29ucy9sb2dvLWZlZWRiYWNrLWxpZ2h0LnN2ZyIsIi4uLy4uL3NyYy9jb21wb25lbnRzL29yZ2FuaXNtcy9TaWRlQmFyLnRzeCIsIi4uLy4uL3NyYy9pbmRleC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gc3JjL3N1YnNjcmliYWJsZS50c1xudmFyIFN1YnNjcmliYWJsZSA9IGNsYXNzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5saXN0ZW5lcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuICAgIHRoaXMuc3Vic2NyaWJlID0gdGhpcy5zdWJzY3JpYmUuYmluZCh0aGlzKTtcbiAgfVxuICBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICB0aGlzLmxpc3RlbmVycy5hZGQobGlzdGVuZXIpO1xuICAgIHRoaXMub25TdWJzY3JpYmUoKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgdGhpcy5saXN0ZW5lcnMuZGVsZXRlKGxpc3RlbmVyKTtcbiAgICAgIHRoaXMub25VbnN1YnNjcmliZSgpO1xuICAgIH07XG4gIH1cbiAgaGFzTGlzdGVuZXJzKCkge1xuICAgIHJldHVybiB0aGlzLmxpc3RlbmVycy5zaXplID4gMDtcbiAgfVxuICBvblN1YnNjcmliZSgpIHtcbiAgfVxuICBvblVuc3Vic2NyaWJlKCkge1xuICB9XG59O1xuZXhwb3J0IHtcbiAgU3Vic2NyaWJhYmxlXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3Vic2NyaWJhYmxlLmpzLm1hcCIsImV4cG9ydCBkZWZhdWx0ICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDpcbiAgdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDpcbiAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHt9KTsiLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbi8vIGJhc2VkIG9mZiBodHRwczovL2dpdGh1Yi5jb20vZGVmdW5jdHpvbWJpZS9ub2RlLXByb2Nlc3MvYmxvYi9tYXN0ZXIvYnJvd3Nlci5qc1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbnZhciBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuaWYgKHR5cGVvZiBnbG9iYWwuc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xufVxuaWYgKHR5cGVvZiBnbG9iYWwuY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xufVxuXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5mdW5jdGlvbiBuZXh0VGljayhmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufVxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnZhciB0aXRsZSA9ICdicm93c2VyJztcbnZhciBwbGF0Zm9ybSA9ICdicm93c2VyJztcbnZhciBicm93c2VyID0gdHJ1ZTtcbnZhciBlbnYgPSB7fTtcbnZhciBhcmd2ID0gW107XG52YXIgdmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xudmFyIHZlcnNpb25zID0ge307XG52YXIgcmVsZWFzZSA9IHt9O1xudmFyIGNvbmZpZyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxudmFyIG9uID0gbm9vcDtcbnZhciBhZGRMaXN0ZW5lciA9IG5vb3A7XG52YXIgb25jZSA9IG5vb3A7XG52YXIgb2ZmID0gbm9vcDtcbnZhciByZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG52YXIgcmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnZhciBlbWl0ID0gbm9vcDtcblxuZnVuY3Rpb24gYmluZGluZyhuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufVxuXG5mdW5jdGlvbiBjd2QgKCkgeyByZXR1cm4gJy8nIH1cbmZ1bmN0aW9uIGNoZGlyIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufWZ1bmN0aW9uIHVtYXNrKCkgeyByZXR1cm4gMDsgfVxuXG4vLyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9rdW1hdmlzL2Jyb3dzZXItcHJvY2Vzcy1ocnRpbWUvYmxvYi9tYXN0ZXIvaW5kZXguanNcbnZhciBwZXJmb3JtYW5jZSA9IGdsb2JhbC5wZXJmb3JtYW5jZSB8fCB7fTtcbnZhciBwZXJmb3JtYW5jZU5vdyA9XG4gIHBlcmZvcm1hbmNlLm5vdyAgICAgICAgfHxcbiAgcGVyZm9ybWFuY2UubW96Tm93ICAgICB8fFxuICBwZXJmb3JtYW5jZS5tc05vdyAgICAgIHx8XG4gIHBlcmZvcm1hbmNlLm9Ob3cgICAgICAgfHxcbiAgcGVyZm9ybWFuY2Uud2Via2l0Tm93ICB8fFxuICBmdW5jdGlvbigpeyByZXR1cm4gKG5ldyBEYXRlKCkpLmdldFRpbWUoKSB9O1xuXG4vLyBnZW5lcmF0ZSB0aW1lc3RhbXAgb3IgZGVsdGFcbi8vIHNlZSBodHRwOi8vbm9kZWpzLm9yZy9hcGkvcHJvY2Vzcy5odG1sI3Byb2Nlc3NfcHJvY2Vzc19ocnRpbWVcbmZ1bmN0aW9uIGhydGltZShwcmV2aW91c1RpbWVzdGFtcCl7XG4gIHZhciBjbG9ja3RpbWUgPSBwZXJmb3JtYW5jZU5vdy5jYWxsKHBlcmZvcm1hbmNlKSoxZS0zO1xuICB2YXIgc2Vjb25kcyA9IE1hdGguZmxvb3IoY2xvY2t0aW1lKTtcbiAgdmFyIG5hbm9zZWNvbmRzID0gTWF0aC5mbG9vcigoY2xvY2t0aW1lJTEpKjFlOSk7XG4gIGlmIChwcmV2aW91c1RpbWVzdGFtcCkge1xuICAgIHNlY29uZHMgPSBzZWNvbmRzIC0gcHJldmlvdXNUaW1lc3RhbXBbMF07XG4gICAgbmFub3NlY29uZHMgPSBuYW5vc2Vjb25kcyAtIHByZXZpb3VzVGltZXN0YW1wWzFdO1xuICAgIGlmIChuYW5vc2Vjb25kczwwKSB7XG4gICAgICBzZWNvbmRzLS07XG4gICAgICBuYW5vc2Vjb25kcyArPSAxZTk7XG4gICAgfVxuICB9XG4gIHJldHVybiBbc2Vjb25kcyxuYW5vc2Vjb25kc11cbn1cblxudmFyIHN0YXJ0VGltZSA9IG5ldyBEYXRlKCk7XG5mdW5jdGlvbiB1cHRpbWUoKSB7XG4gIHZhciBjdXJyZW50VGltZSA9IG5ldyBEYXRlKCk7XG4gIHZhciBkaWYgPSBjdXJyZW50VGltZSAtIHN0YXJ0VGltZTtcbiAgcmV0dXJuIGRpZiAvIDEwMDA7XG59XG5cbnZhciBicm93c2VyJDEgPSB7XG4gIG5leHRUaWNrOiBuZXh0VGljayxcbiAgdGl0bGU6IHRpdGxlLFxuICBicm93c2VyOiBicm93c2VyLFxuICBlbnY6IGVudixcbiAgYXJndjogYXJndixcbiAgdmVyc2lvbjogdmVyc2lvbixcbiAgdmVyc2lvbnM6IHZlcnNpb25zLFxuICBvbjogb24sXG4gIGFkZExpc3RlbmVyOiBhZGRMaXN0ZW5lcixcbiAgb25jZTogb25jZSxcbiAgb2ZmOiBvZmYsXG4gIHJlbW92ZUxpc3RlbmVyOiByZW1vdmVMaXN0ZW5lcixcbiAgcmVtb3ZlQWxsTGlzdGVuZXJzOiByZW1vdmVBbGxMaXN0ZW5lcnMsXG4gIGVtaXQ6IGVtaXQsXG4gIGJpbmRpbmc6IGJpbmRpbmcsXG4gIGN3ZDogY3dkLFxuICBjaGRpcjogY2hkaXIsXG4gIHVtYXNrOiB1bWFzayxcbiAgaHJ0aW1lOiBocnRpbWUsXG4gIHBsYXRmb3JtOiBwbGF0Zm9ybSxcbiAgcmVsZWFzZTogcmVsZWFzZSxcbiAgY29uZmlnOiBjb25maWcsXG4gIHVwdGltZTogdXB0aW1lXG59O1xuXG5leHBvcnQgZGVmYXVsdCBicm93c2VyJDE7XG5leHBvcnQgeyBhZGRMaXN0ZW5lciwgYXJndiwgYmluZGluZywgYnJvd3NlciwgY2hkaXIsIGNvbmZpZywgY3dkLCBlbWl0LCBlbnYsIGhydGltZSwgbmV4dFRpY2ssIG9mZiwgb24sIG9uY2UsIHBsYXRmb3JtLCByZWxlYXNlLCByZW1vdmVBbGxMaXN0ZW5lcnMsIHJlbW92ZUxpc3RlbmVyLCB0aXRsZSwgdW1hc2ssIHVwdGltZSwgdmVyc2lvbiwgdmVyc2lvbnMgfTtcbiIsIi8vIHNyYy91dGlscy50c1xudmFyIGlzU2VydmVyID0gdHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIiB8fCBcIkRlbm9cIiBpbiBnbG9iYWxUaGlzO1xuZnVuY3Rpb24gbm9vcCgpIHtcbn1cbmZ1bmN0aW9uIGZ1bmN0aW9uYWxVcGRhdGUodXBkYXRlciwgaW5wdXQpIHtcbiAgcmV0dXJuIHR5cGVvZiB1cGRhdGVyID09PSBcImZ1bmN0aW9uXCIgPyB1cGRhdGVyKGlucHV0KSA6IHVwZGF0ZXI7XG59XG5mdW5jdGlvbiBpc1ZhbGlkVGltZW91dCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiICYmIHZhbHVlID49IDAgJiYgdmFsdWUgIT09IEluZmluaXR5O1xufVxuZnVuY3Rpb24gdGltZVVudGlsU3RhbGUodXBkYXRlZEF0LCBzdGFsZVRpbWUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KHVwZGF0ZWRBdCArIChzdGFsZVRpbWUgfHwgMCkgLSBEYXRlLm5vdygpLCAwKTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVTdGFsZVRpbWUoc3RhbGVUaW1lLCBxdWVyeSkge1xuICByZXR1cm4gdHlwZW9mIHN0YWxlVGltZSA9PT0gXCJmdW5jdGlvblwiID8gc3RhbGVUaW1lKHF1ZXJ5KSA6IHN0YWxlVGltZTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVFbmFibGVkKGVuYWJsZWQsIHF1ZXJ5KSB7XG4gIHJldHVybiB0eXBlb2YgZW5hYmxlZCA9PT0gXCJmdW5jdGlvblwiID8gZW5hYmxlZChxdWVyeSkgOiBlbmFibGVkO1xufVxuZnVuY3Rpb24gbWF0Y2hRdWVyeShmaWx0ZXJzLCBxdWVyeSkge1xuICBjb25zdCB7XG4gICAgdHlwZSA9IFwiYWxsXCIsXG4gICAgZXhhY3QsXG4gICAgZmV0Y2hTdGF0dXMsXG4gICAgcHJlZGljYXRlLFxuICAgIHF1ZXJ5S2V5LFxuICAgIHN0YWxlXG4gIH0gPSBmaWx0ZXJzO1xuICBpZiAocXVlcnlLZXkpIHtcbiAgICBpZiAoZXhhY3QpIHtcbiAgICAgIGlmIChxdWVyeS5xdWVyeUhhc2ggIT09IGhhc2hRdWVyeUtleUJ5T3B0aW9ucyhxdWVyeUtleSwgcXVlcnkub3B0aW9ucykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXBhcnRpYWxNYXRjaEtleShxdWVyeS5xdWVyeUtleSwgcXVlcnlLZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIGlmICh0eXBlICE9PSBcImFsbFwiKSB7XG4gICAgY29uc3QgaXNBY3RpdmUgPSBxdWVyeS5pc0FjdGl2ZSgpO1xuICAgIGlmICh0eXBlID09PSBcImFjdGl2ZVwiICYmICFpc0FjdGl2ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gXCJpbmFjdGl2ZVwiICYmIGlzQWN0aXZlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIGlmICh0eXBlb2Ygc3RhbGUgPT09IFwiYm9vbGVhblwiICYmIHF1ZXJ5LmlzU3RhbGUoKSAhPT0gc3RhbGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGZldGNoU3RhdHVzICYmIGZldGNoU3RhdHVzICE9PSBxdWVyeS5zdGF0ZS5mZXRjaFN0YXR1cykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAocHJlZGljYXRlICYmICFwcmVkaWNhdGUocXVlcnkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gbWF0Y2hNdXRhdGlvbihmaWx0ZXJzLCBtdXRhdGlvbikge1xuICBjb25zdCB7IGV4YWN0LCBzdGF0dXMsIHByZWRpY2F0ZSwgbXV0YXRpb25LZXkgfSA9IGZpbHRlcnM7XG4gIGlmIChtdXRhdGlvbktleSkge1xuICAgIGlmICghbXV0YXRpb24ub3B0aW9ucy5tdXRhdGlvbktleSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZXhhY3QpIHtcbiAgICAgIGlmIChoYXNoS2V5KG11dGF0aW9uLm9wdGlvbnMubXV0YXRpb25LZXkpICE9PSBoYXNoS2V5KG11dGF0aW9uS2V5KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghcGFydGlhbE1hdGNoS2V5KG11dGF0aW9uLm9wdGlvbnMubXV0YXRpb25LZXksIG11dGF0aW9uS2V5KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICBpZiAoc3RhdHVzICYmIG11dGF0aW9uLnN0YXRlLnN0YXR1cyAhPT0gc3RhdHVzKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChwcmVkaWNhdGUgJiYgIXByZWRpY2F0ZShtdXRhdGlvbikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBoYXNoUXVlcnlLZXlCeU9wdGlvbnMocXVlcnlLZXksIG9wdGlvbnMpIHtcbiAgY29uc3QgaGFzaEZuID0gb3B0aW9ucz8ucXVlcnlLZXlIYXNoRm4gfHwgaGFzaEtleTtcbiAgcmV0dXJuIGhhc2hGbihxdWVyeUtleSk7XG59XG5mdW5jdGlvbiBoYXNoS2V5KHF1ZXJ5S2V5KSB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShcbiAgICBxdWVyeUtleSxcbiAgICAoXywgdmFsKSA9PiBpc1BsYWluT2JqZWN0KHZhbCkgPyBPYmplY3Qua2V5cyh2YWwpLnNvcnQoKS5yZWR1Y2UoKHJlc3VsdCwga2V5KSA9PiB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbFtrZXldO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCB7fSkgOiB2YWxcbiAgKTtcbn1cbmZ1bmN0aW9uIHBhcnRpYWxNYXRjaEtleShhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHR5cGVvZiBhICE9PSB0eXBlb2YgYikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoYSAmJiBiICYmIHR5cGVvZiBhID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBiID09PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuICFPYmplY3Qua2V5cyhiKS5zb21lKChrZXkpID0+ICFwYXJ0aWFsTWF0Y2hLZXkoYVtrZXldLCBiW2tleV0pKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiByZXBsYWNlRXF1YWxEZWVwKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHtcbiAgICByZXR1cm4gYTtcbiAgfVxuICBjb25zdCBhcnJheSA9IGlzUGxhaW5BcnJheShhKSAmJiBpc1BsYWluQXJyYXkoYik7XG4gIGlmIChhcnJheSB8fCBpc1BsYWluT2JqZWN0KGEpICYmIGlzUGxhaW5PYmplY3QoYikpIHtcbiAgICBjb25zdCBhSXRlbXMgPSBhcnJheSA/IGEgOiBPYmplY3Qua2V5cyhhKTtcbiAgICBjb25zdCBhU2l6ZSA9IGFJdGVtcy5sZW5ndGg7XG4gICAgY29uc3QgYkl0ZW1zID0gYXJyYXkgPyBiIDogT2JqZWN0LmtleXMoYik7XG4gICAgY29uc3QgYlNpemUgPSBiSXRlbXMubGVuZ3RoO1xuICAgIGNvbnN0IGNvcHkgPSBhcnJheSA/IFtdIDoge307XG4gICAgbGV0IGVxdWFsSXRlbXMgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYlNpemU7IGkrKykge1xuICAgICAgY29uc3Qga2V5ID0gYXJyYXkgPyBpIDogYkl0ZW1zW2ldO1xuICAgICAgaWYgKCghYXJyYXkgJiYgYUl0ZW1zLmluY2x1ZGVzKGtleSkgfHwgYXJyYXkpICYmIGFba2V5XSA9PT0gdm9pZCAwICYmIGJba2V5XSA9PT0gdm9pZCAwKSB7XG4gICAgICAgIGNvcHlba2V5XSA9IHZvaWQgMDtcbiAgICAgICAgZXF1YWxJdGVtcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29weVtrZXldID0gcmVwbGFjZUVxdWFsRGVlcChhW2tleV0sIGJba2V5XSk7XG4gICAgICAgIGlmIChjb3B5W2tleV0gPT09IGFba2V5XSAmJiBhW2tleV0gIT09IHZvaWQgMCkge1xuICAgICAgICAgIGVxdWFsSXRlbXMrKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYVNpemUgPT09IGJTaXplICYmIGVxdWFsSXRlbXMgPT09IGFTaXplID8gYSA6IGNvcHk7XG4gIH1cbiAgcmV0dXJuIGI7XG59XG5mdW5jdGlvbiBzaGFsbG93RXF1YWxPYmplY3RzKGEsIGIpIHtcbiAgaWYgKCFiIHx8IE9iamVjdC5rZXlzKGEpLmxlbmd0aCAhPT0gT2JqZWN0LmtleXMoYikubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGZvciAoY29uc3Qga2V5IGluIGEpIHtcbiAgICBpZiAoYVtrZXldICE9PSBiW2tleV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBpc1BsYWluQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aDtcbn1cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3Qobykge1xuICBpZiAoIWhhc09iamVjdFByb3RvdHlwZShvKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBjdG9yID0gby5jb25zdHJ1Y3RvcjtcbiAgaWYgKGN0b3IgPT09IHZvaWQgMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IHByb3QgPSBjdG9yLnByb3RvdHlwZTtcbiAgaWYgKCFoYXNPYmplY3RQcm90b3R5cGUocHJvdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKCFwcm90Lmhhc093blByb3BlcnR5KFwiaXNQcm90b3R5cGVPZlwiKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pICE9PSBPYmplY3QucHJvdG90eXBlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gaGFzT2JqZWN0UHJvdG90eXBlKG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKSA9PT0gXCJbb2JqZWN0IE9iamVjdF1cIjtcbn1cbmZ1bmN0aW9uIHNsZWVwKHRpbWVvdXQpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0KTtcbiAgfSk7XG59XG5mdW5jdGlvbiByZXBsYWNlRGF0YShwcmV2RGF0YSwgZGF0YSwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIG9wdGlvbnMuc3RydWN0dXJhbFNoYXJpbmcgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiBvcHRpb25zLnN0cnVjdHVyYWxTaGFyaW5nKHByZXZEYXRhLCBkYXRhKTtcbiAgfSBlbHNlIGlmIChvcHRpb25zLnN0cnVjdHVyYWxTaGFyaW5nICE9PSBmYWxzZSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiByZXBsYWNlRXF1YWxEZWVwKHByZXZEYXRhLCBkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgYFN0cnVjdHVyYWwgc2hhcmluZyByZXF1aXJlcyBkYXRhIHRvIGJlIEpTT04gc2VyaWFsaXphYmxlLiBUbyBmaXggdGhpcywgdHVybiBvZmYgc3RydWN0dXJhbFNoYXJpbmcgb3IgcmV0dXJuIEpTT04tc2VyaWFsaXphYmxlIGRhdGEgZnJvbSB5b3VyIHF1ZXJ5Rm4uIFske29wdGlvbnMucXVlcnlIYXNofV06ICR7ZXJyb3J9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVwbGFjZUVxdWFsRGVlcChwcmV2RGF0YSwgZGF0YSk7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5mdW5jdGlvbiBrZWVwUHJldmlvdXNEYXRhKHByZXZpb3VzRGF0YSkge1xuICByZXR1cm4gcHJldmlvdXNEYXRhO1xufVxuZnVuY3Rpb24gYWRkVG9FbmQoaXRlbXMsIGl0ZW0sIG1heCA9IDApIHtcbiAgY29uc3QgbmV3SXRlbXMgPSBbLi4uaXRlbXMsIGl0ZW1dO1xuICByZXR1cm4gbWF4ICYmIG5ld0l0ZW1zLmxlbmd0aCA+IG1heCA/IG5ld0l0ZW1zLnNsaWNlKDEpIDogbmV3SXRlbXM7XG59XG5mdW5jdGlvbiBhZGRUb1N0YXJ0KGl0ZW1zLCBpdGVtLCBtYXggPSAwKSB7XG4gIGNvbnN0IG5ld0l0ZW1zID0gW2l0ZW0sIC4uLml0ZW1zXTtcbiAgcmV0dXJuIG1heCAmJiBuZXdJdGVtcy5sZW5ndGggPiBtYXggPyBuZXdJdGVtcy5zbGljZSgwLCAtMSkgOiBuZXdJdGVtcztcbn1cbnZhciBza2lwVG9rZW4gPSBTeW1ib2woKTtcbmZ1bmN0aW9uIGVuc3VyZVF1ZXJ5Rm4ob3B0aW9ucywgZmV0Y2hPcHRpb25zKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICBpZiAob3B0aW9ucy5xdWVyeUZuID09PSBza2lwVG9rZW4pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBBdHRlbXB0ZWQgdG8gaW52b2tlIHF1ZXJ5Rm4gd2hlbiBzZXQgdG8gc2tpcFRva2VuLiBUaGlzIGlzIGxpa2VseSBhIGNvbmZpZ3VyYXRpb24gZXJyb3IuIFF1ZXJ5IGhhc2g6ICcke29wdGlvbnMucXVlcnlIYXNofSdgXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBpZiAoIW9wdGlvbnMucXVlcnlGbiAmJiBmZXRjaE9wdGlvbnM/LmluaXRpYWxQcm9taXNlKSB7XG4gICAgcmV0dXJuICgpID0+IGZldGNoT3B0aW9ucy5pbml0aWFsUHJvbWlzZTtcbiAgfVxuICBpZiAoIW9wdGlvbnMucXVlcnlGbiB8fCBvcHRpb25zLnF1ZXJ5Rm4gPT09IHNraXBUb2tlbikge1xuICAgIHJldHVybiAoKSA9PiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYE1pc3NpbmcgcXVlcnlGbjogJyR7b3B0aW9ucy5xdWVyeUhhc2h9J2ApKTtcbiAgfVxuICByZXR1cm4gb3B0aW9ucy5xdWVyeUZuO1xufVxuZXhwb3J0IHtcbiAgYWRkVG9FbmQsXG4gIGFkZFRvU3RhcnQsXG4gIGVuc3VyZVF1ZXJ5Rm4sXG4gIGZ1bmN0aW9uYWxVcGRhdGUsXG4gIGhhc2hLZXksXG4gIGhhc2hRdWVyeUtleUJ5T3B0aW9ucyxcbiAgaXNQbGFpbkFycmF5LFxuICBpc1BsYWluT2JqZWN0LFxuICBpc1NlcnZlcixcbiAgaXNWYWxpZFRpbWVvdXQsXG4gIGtlZXBQcmV2aW91c0RhdGEsXG4gIG1hdGNoTXV0YXRpb24sXG4gIG1hdGNoUXVlcnksXG4gIG5vb3AsXG4gIHBhcnRpYWxNYXRjaEtleSxcbiAgcmVwbGFjZURhdGEsXG4gIHJlcGxhY2VFcXVhbERlZXAsXG4gIHJlc29sdmVFbmFibGVkLFxuICByZXNvbHZlU3RhbGVUaW1lLFxuICBzaGFsbG93RXF1YWxPYmplY3RzLFxuICBza2lwVG9rZW4sXG4gIHNsZWVwLFxuICB0aW1lVW50aWxTdGFsZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsIi8vIHNyYy9mb2N1c01hbmFnZXIudHNcbmltcG9ydCB7IFN1YnNjcmliYWJsZSB9IGZyb20gXCIuL3N1YnNjcmliYWJsZS5qc1wiO1xuaW1wb3J0IHsgaXNTZXJ2ZXIgfSBmcm9tIFwiLi91dGlscy5qc1wiO1xudmFyIEZvY3VzTWFuYWdlciA9IGNsYXNzIGV4dGVuZHMgU3Vic2NyaWJhYmxlIHtcbiAgI2ZvY3VzZWQ7XG4gICNjbGVhbnVwO1xuICAjc2V0dXA7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy4jc2V0dXAgPSAob25Gb2N1cykgPT4ge1xuICAgICAgaWYgKCFpc1NlcnZlciAmJiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICBjb25zdCBsaXN0ZW5lciA9ICgpID0+IG9uRm9jdXMoKTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsIGxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsIGxpc3RlbmVyKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9O1xuICB9XG4gIG9uU3Vic2NyaWJlKCkge1xuICAgIGlmICghdGhpcy4jY2xlYW51cCkge1xuICAgICAgdGhpcy5zZXRFdmVudExpc3RlbmVyKHRoaXMuI3NldHVwKTtcbiAgICB9XG4gIH1cbiAgb25VbnN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKCkpIHtcbiAgICAgIHRoaXMuI2NsZWFudXA/LigpO1xuICAgICAgdGhpcy4jY2xlYW51cCA9IHZvaWQgMDtcbiAgICB9XG4gIH1cbiAgc2V0RXZlbnRMaXN0ZW5lcihzZXR1cCkge1xuICAgIHRoaXMuI3NldHVwID0gc2V0dXA7XG4gICAgdGhpcy4jY2xlYW51cD8uKCk7XG4gICAgdGhpcy4jY2xlYW51cCA9IHNldHVwKChmb2N1c2VkKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGZvY3VzZWQgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIHRoaXMuc2V0Rm9jdXNlZChmb2N1c2VkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub25Gb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHNldEZvY3VzZWQoZm9jdXNlZCkge1xuICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLiNmb2N1c2VkICE9PSBmb2N1c2VkO1xuICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICB0aGlzLiNmb2N1c2VkID0gZm9jdXNlZDtcbiAgICAgIHRoaXMub25Gb2N1cygpO1xuICAgIH1cbiAgfVxuICBvbkZvY3VzKCkge1xuICAgIGNvbnN0IGlzRm9jdXNlZCA9IHRoaXMuaXNGb2N1c2VkKCk7XG4gICAgdGhpcy5saXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IHtcbiAgICAgIGxpc3RlbmVyKGlzRm9jdXNlZCk7XG4gICAgfSk7XG4gIH1cbiAgaXNGb2N1c2VkKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy4jZm9jdXNlZCA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLiNmb2N1c2VkO1xuICAgIH1cbiAgICByZXR1cm4gZ2xvYmFsVGhpcy5kb2N1bWVudD8udmlzaWJpbGl0eVN0YXRlICE9PSBcImhpZGRlblwiO1xuICB9XG59O1xudmFyIGZvY3VzTWFuYWdlciA9IG5ldyBGb2N1c01hbmFnZXIoKTtcbmV4cG9ydCB7XG4gIEZvY3VzTWFuYWdlcixcbiAgZm9jdXNNYW5hZ2VyXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Zm9jdXNNYW5hZ2VyLmpzLm1hcCIsIi8vIHNyYy9vbmxpbmVNYW5hZ2VyLnRzXG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tIFwiLi9zdWJzY3JpYmFibGUuanNcIjtcbmltcG9ydCB7IGlzU2VydmVyIH0gZnJvbSBcIi4vdXRpbHMuanNcIjtcbnZhciBPbmxpbmVNYW5hZ2VyID0gY2xhc3MgZXh0ZW5kcyBTdWJzY3JpYmFibGUge1xuICAjb25saW5lID0gdHJ1ZTtcbiAgI2NsZWFudXA7XG4gICNzZXR1cDtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLiNzZXR1cCA9IChvbk9ubGluZSkgPT4ge1xuICAgICAgaWYgKCFpc1NlcnZlciAmJiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICBjb25zdCBvbmxpbmVMaXN0ZW5lciA9ICgpID0+IG9uT25saW5lKHRydWUpO1xuICAgICAgICBjb25zdCBvZmZsaW5lTGlzdGVuZXIgPSAoKSA9PiBvbk9ubGluZShmYWxzZSk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwib25saW5lXCIsIG9ubGluZUxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCBvZmZsaW5lTGlzdGVuZXIsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCBvbmxpbmVMaXN0ZW5lcik7XG4gICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIG9mZmxpbmVMaXN0ZW5lcik7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfTtcbiAgfVxuICBvblN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMuI2NsZWFudXApIHtcbiAgICAgIHRoaXMuc2V0RXZlbnRMaXN0ZW5lcih0aGlzLiNzZXR1cCk7XG4gICAgfVxuICB9XG4gIG9uVW5zdWJzY3JpYmUoKSB7XG4gICAgaWYgKCF0aGlzLmhhc0xpc3RlbmVycygpKSB7XG4gICAgICB0aGlzLiNjbGVhbnVwPy4oKTtcbiAgICAgIHRoaXMuI2NsZWFudXAgPSB2b2lkIDA7XG4gICAgfVxuICB9XG4gIHNldEV2ZW50TGlzdGVuZXIoc2V0dXApIHtcbiAgICB0aGlzLiNzZXR1cCA9IHNldHVwO1xuICAgIHRoaXMuI2NsZWFudXA/LigpO1xuICAgIHRoaXMuI2NsZWFudXAgPSBzZXR1cCh0aGlzLnNldE9ubGluZS5iaW5kKHRoaXMpKTtcbiAgfVxuICBzZXRPbmxpbmUob25saW5lKSB7XG4gICAgY29uc3QgY2hhbmdlZCA9IHRoaXMuI29ubGluZSAhPT0gb25saW5lO1xuICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICB0aGlzLiNvbmxpbmUgPSBvbmxpbmU7XG4gICAgICB0aGlzLmxpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lcikgPT4ge1xuICAgICAgICBsaXN0ZW5lcihvbmxpbmUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGlzT25saW5lKCkge1xuICAgIHJldHVybiB0aGlzLiNvbmxpbmU7XG4gIH1cbn07XG52YXIgb25saW5lTWFuYWdlciA9IG5ldyBPbmxpbmVNYW5hZ2VyKCk7XG5leHBvcnQge1xuICBPbmxpbmVNYW5hZ2VyLFxuICBvbmxpbmVNYW5hZ2VyXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b25saW5lTWFuYWdlci5qcy5tYXAiLCIvLyBzcmMvdGhlbmFibGUudHNcbmZ1bmN0aW9uIHBlbmRpbmdUaGVuYWJsZSgpIHtcbiAgbGV0IHJlc29sdmU7XG4gIGxldCByZWplY3Q7XG4gIGNvbnN0IHRoZW5hYmxlID0gbmV3IFByb21pc2UoKF9yZXNvbHZlLCBfcmVqZWN0KSA9PiB7XG4gICAgcmVzb2x2ZSA9IF9yZXNvbHZlO1xuICAgIHJlamVjdCA9IF9yZWplY3Q7XG4gIH0pO1xuICB0aGVuYWJsZS5zdGF0dXMgPSBcInBlbmRpbmdcIjtcbiAgdGhlbmFibGUuY2F0Y2goKCkgPT4ge1xuICB9KTtcbiAgZnVuY3Rpb24gZmluYWxpemUoZGF0YSkge1xuICAgIE9iamVjdC5hc3NpZ24odGhlbmFibGUsIGRhdGEpO1xuICAgIGRlbGV0ZSB0aGVuYWJsZS5yZXNvbHZlO1xuICAgIGRlbGV0ZSB0aGVuYWJsZS5yZWplY3Q7XG4gIH1cbiAgdGhlbmFibGUucmVzb2x2ZSA9ICh2YWx1ZSkgPT4ge1xuICAgIGZpbmFsaXplKHtcbiAgICAgIHN0YXR1czogXCJmdWxmaWxsZWRcIixcbiAgICAgIHZhbHVlXG4gICAgfSk7XG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG4gIH07XG4gIHRoZW5hYmxlLnJlamVjdCA9IChyZWFzb24pID0+IHtcbiAgICBmaW5hbGl6ZSh7XG4gICAgICBzdGF0dXM6IFwicmVqZWN0ZWRcIixcbiAgICAgIHJlYXNvblxuICAgIH0pO1xuICAgIHJlamVjdChyZWFzb24pO1xuICB9O1xuICByZXR1cm4gdGhlbmFibGU7XG59XG5leHBvcnQge1xuICBwZW5kaW5nVGhlbmFibGVcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aGVuYWJsZS5qcy5tYXAiLCIvLyBzcmMvcmV0cnllci50c1xuaW1wb3J0IHsgZm9jdXNNYW5hZ2VyIH0gZnJvbSBcIi4vZm9jdXNNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBvbmxpbmVNYW5hZ2VyIH0gZnJvbSBcIi4vb25saW5lTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgcGVuZGluZ1RoZW5hYmxlIH0gZnJvbSBcIi4vdGhlbmFibGUuanNcIjtcbmltcG9ydCB7IGlzU2VydmVyLCBzbGVlcCB9IGZyb20gXCIuL3V0aWxzLmpzXCI7XG5mdW5jdGlvbiBkZWZhdWx0UmV0cnlEZWxheShmYWlsdXJlQ291bnQpIHtcbiAgcmV0dXJuIE1hdGgubWluKDFlMyAqIDIgKiogZmFpbHVyZUNvdW50LCAzZTQpO1xufVxuZnVuY3Rpb24gY2FuRmV0Y2gobmV0d29ya01vZGUpIHtcbiAgcmV0dXJuIChuZXR3b3JrTW9kZSA/PyBcIm9ubGluZVwiKSA9PT0gXCJvbmxpbmVcIiA/IG9ubGluZU1hbmFnZXIuaXNPbmxpbmUoKSA6IHRydWU7XG59XG52YXIgQ2FuY2VsbGVkRXJyb3IgPSBjbGFzcyBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIHN1cGVyKFwiQ2FuY2VsbGVkRXJyb3JcIik7XG4gICAgdGhpcy5yZXZlcnQgPSBvcHRpb25zPy5yZXZlcnQ7XG4gICAgdGhpcy5zaWxlbnQgPSBvcHRpb25zPy5zaWxlbnQ7XG4gIH1cbn07XG5mdW5jdGlvbiBpc0NhbmNlbGxlZEVycm9yKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIENhbmNlbGxlZEVycm9yO1xufVxuZnVuY3Rpb24gY3JlYXRlUmV0cnllcihjb25maWcpIHtcbiAgbGV0IGlzUmV0cnlDYW5jZWxsZWQgPSBmYWxzZTtcbiAgbGV0IGZhaWx1cmVDb3VudCA9IDA7XG4gIGxldCBpc1Jlc29sdmVkID0gZmFsc2U7XG4gIGxldCBjb250aW51ZUZuO1xuICBjb25zdCB0aGVuYWJsZSA9IHBlbmRpbmdUaGVuYWJsZSgpO1xuICBjb25zdCBjYW5jZWwgPSAoY2FuY2VsT3B0aW9ucykgPT4ge1xuICAgIGlmICghaXNSZXNvbHZlZCkge1xuICAgICAgcmVqZWN0KG5ldyBDYW5jZWxsZWRFcnJvcihjYW5jZWxPcHRpb25zKSk7XG4gICAgICBjb25maWcuYWJvcnQ/LigpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgY2FuY2VsUmV0cnkgPSAoKSA9PiB7XG4gICAgaXNSZXRyeUNhbmNlbGxlZCA9IHRydWU7XG4gIH07XG4gIGNvbnN0IGNvbnRpbnVlUmV0cnkgPSAoKSA9PiB7XG4gICAgaXNSZXRyeUNhbmNlbGxlZCA9IGZhbHNlO1xuICB9O1xuICBjb25zdCBjYW5Db250aW51ZSA9ICgpID0+IGZvY3VzTWFuYWdlci5pc0ZvY3VzZWQoKSAmJiAoY29uZmlnLm5ldHdvcmtNb2RlID09PSBcImFsd2F5c1wiIHx8IG9ubGluZU1hbmFnZXIuaXNPbmxpbmUoKSkgJiYgY29uZmlnLmNhblJ1bigpO1xuICBjb25zdCBjYW5TdGFydCA9ICgpID0+IGNhbkZldGNoKGNvbmZpZy5uZXR3b3JrTW9kZSkgJiYgY29uZmlnLmNhblJ1bigpO1xuICBjb25zdCByZXNvbHZlID0gKHZhbHVlKSA9PiB7XG4gICAgaWYgKCFpc1Jlc29sdmVkKSB7XG4gICAgICBpc1Jlc29sdmVkID0gdHJ1ZTtcbiAgICAgIGNvbmZpZy5vblN1Y2Nlc3M/Lih2YWx1ZSk7XG4gICAgICBjb250aW51ZUZuPy4oKTtcbiAgICAgIHRoZW5hYmxlLnJlc29sdmUodmFsdWUpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgcmVqZWN0ID0gKHZhbHVlKSA9PiB7XG4gICAgaWYgKCFpc1Jlc29sdmVkKSB7XG4gICAgICBpc1Jlc29sdmVkID0gdHJ1ZTtcbiAgICAgIGNvbmZpZy5vbkVycm9yPy4odmFsdWUpO1xuICAgICAgY29udGludWVGbj8uKCk7XG4gICAgICB0aGVuYWJsZS5yZWplY3QodmFsdWUpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgcGF1c2UgPSAoKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChjb250aW51ZVJlc29sdmUpID0+IHtcbiAgICAgIGNvbnRpbnVlRm4gPSAodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKGlzUmVzb2x2ZWQgfHwgY2FuQ29udGludWUoKSkge1xuICAgICAgICAgIGNvbnRpbnVlUmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25maWcub25QYXVzZT8uKCk7XG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICBjb250aW51ZUZuID0gdm9pZCAwO1xuICAgICAgaWYgKCFpc1Jlc29sdmVkKSB7XG4gICAgICAgIGNvbmZpZy5vbkNvbnRpbnVlPy4oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgY29uc3QgcnVuID0gKCkgPT4ge1xuICAgIGlmIChpc1Jlc29sdmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBwcm9taXNlT3JWYWx1ZTtcbiAgICBjb25zdCBpbml0aWFsUHJvbWlzZSA9IGZhaWx1cmVDb3VudCA9PT0gMCA/IGNvbmZpZy5pbml0aWFsUHJvbWlzZSA6IHZvaWQgMDtcbiAgICB0cnkge1xuICAgICAgcHJvbWlzZU9yVmFsdWUgPSBpbml0aWFsUHJvbWlzZSA/PyBjb25maWcuZm4oKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcHJvbWlzZU9yVmFsdWUgPSBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfVxuICAgIFByb21pc2UucmVzb2x2ZShwcm9taXNlT3JWYWx1ZSkudGhlbihyZXNvbHZlKS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIGlmIChpc1Jlc29sdmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJldHJ5ID0gY29uZmlnLnJldHJ5ID8/IChpc1NlcnZlciA/IDAgOiAzKTtcbiAgICAgIGNvbnN0IHJldHJ5RGVsYXkgPSBjb25maWcucmV0cnlEZWxheSA/PyBkZWZhdWx0UmV0cnlEZWxheTtcbiAgICAgIGNvbnN0IGRlbGF5ID0gdHlwZW9mIHJldHJ5RGVsYXkgPT09IFwiZnVuY3Rpb25cIiA/IHJldHJ5RGVsYXkoZmFpbHVyZUNvdW50LCBlcnJvcikgOiByZXRyeURlbGF5O1xuICAgICAgY29uc3Qgc2hvdWxkUmV0cnkgPSByZXRyeSA9PT0gdHJ1ZSB8fCB0eXBlb2YgcmV0cnkgPT09IFwibnVtYmVyXCIgJiYgZmFpbHVyZUNvdW50IDwgcmV0cnkgfHwgdHlwZW9mIHJldHJ5ID09PSBcImZ1bmN0aW9uXCIgJiYgcmV0cnkoZmFpbHVyZUNvdW50LCBlcnJvcik7XG4gICAgICBpZiAoaXNSZXRyeUNhbmNlbGxlZCB8fCAhc2hvdWxkUmV0cnkpIHtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZmFpbHVyZUNvdW50Kys7XG4gICAgICBjb25maWcub25GYWlsPy4oZmFpbHVyZUNvdW50LCBlcnJvcik7XG4gICAgICBzbGVlcChkZWxheSkudGhlbigoKSA9PiB7XG4gICAgICAgIHJldHVybiBjYW5Db250aW51ZSgpID8gdm9pZCAwIDogcGF1c2UoKTtcbiAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAoaXNSZXRyeUNhbmNlbGxlZCkge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcnVuKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIHByb21pc2U6IHRoZW5hYmxlLFxuICAgIGNhbmNlbCxcbiAgICBjb250aW51ZTogKCkgPT4ge1xuICAgICAgY29udGludWVGbj8uKCk7XG4gICAgICByZXR1cm4gdGhlbmFibGU7XG4gICAgfSxcbiAgICBjYW5jZWxSZXRyeSxcbiAgICBjb250aW51ZVJldHJ5LFxuICAgIGNhblN0YXJ0LFxuICAgIHN0YXJ0OiAoKSA9PiB7XG4gICAgICBpZiAoY2FuU3RhcnQoKSkge1xuICAgICAgICBydW4oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhdXNlKCkudGhlbihydW4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoZW5hYmxlO1xuICAgIH1cbiAgfTtcbn1cbmV4cG9ydCB7XG4gIENhbmNlbGxlZEVycm9yLFxuICBjYW5GZXRjaCxcbiAgY3JlYXRlUmV0cnllcixcbiAgaXNDYW5jZWxsZWRFcnJvclxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJldHJ5ZXIuanMubWFwIiwiLy8gc3JjL25vdGlmeU1hbmFnZXIudHNcbmZ1bmN0aW9uIGNyZWF0ZU5vdGlmeU1hbmFnZXIoKSB7XG4gIGxldCBxdWV1ZSA9IFtdO1xuICBsZXQgdHJhbnNhY3Rpb25zID0gMDtcbiAgbGV0IG5vdGlmeUZuID0gKGNhbGxiYWNrKSA9PiB7XG4gICAgY2FsbGJhY2soKTtcbiAgfTtcbiAgbGV0IGJhdGNoTm90aWZ5Rm4gPSAoY2FsbGJhY2spID0+IHtcbiAgICBjYWxsYmFjaygpO1xuICB9O1xuICBsZXQgc2NoZWR1bGVGbiA9IChjYikgPT4gc2V0VGltZW91dChjYiwgMCk7XG4gIGNvbnN0IHNjaGVkdWxlID0gKGNhbGxiYWNrKSA9PiB7XG4gICAgaWYgKHRyYW5zYWN0aW9ucykge1xuICAgICAgcXVldWUucHVzaChjYWxsYmFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNjaGVkdWxlRm4oKCkgPT4ge1xuICAgICAgICBub3RpZnlGbihjYWxsYmFjayk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGZsdXNoID0gKCkgPT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsUXVldWUgPSBxdWV1ZTtcbiAgICBxdWV1ZSA9IFtdO1xuICAgIGlmIChvcmlnaW5hbFF1ZXVlLmxlbmd0aCkge1xuICAgICAgc2NoZWR1bGVGbigoKSA9PiB7XG4gICAgICAgIGJhdGNoTm90aWZ5Rm4oKCkgPT4ge1xuICAgICAgICAgIG9yaWdpbmFsUXVldWUuZm9yRWFjaCgoY2FsbGJhY2spID0+IHtcbiAgICAgICAgICAgIG5vdGlmeUZuKGNhbGxiYWNrKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG4gIHJldHVybiB7XG4gICAgYmF0Y2g6IChjYWxsYmFjaykgPT4ge1xuICAgICAgbGV0IHJlc3VsdDtcbiAgICAgIHRyYW5zYWN0aW9ucysrO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2soKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRyYW5zYWN0aW9ucy0tO1xuICAgICAgICBpZiAoIXRyYW5zYWN0aW9ucykge1xuICAgICAgICAgIGZsdXNoKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBBbGwgY2FsbHMgdG8gdGhlIHdyYXBwZWQgZnVuY3Rpb24gd2lsbCBiZSBiYXRjaGVkLlxuICAgICAqL1xuICAgIGJhdGNoQ2FsbHM6IChjYWxsYmFjaykgPT4ge1xuICAgICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgICAgIHNjaGVkdWxlKCgpID0+IHtcbiAgICAgICAgICBjYWxsYmFjayguLi5hcmdzKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0sXG4gICAgc2NoZWR1bGUsXG4gICAgLyoqXG4gICAgICogVXNlIHRoaXMgbWV0aG9kIHRvIHNldCBhIGN1c3RvbSBub3RpZnkgZnVuY3Rpb24uXG4gICAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBmb3IgZXhhbXBsZSB3cmFwIG5vdGlmaWNhdGlvbnMgd2l0aCBgUmVhY3QuYWN0YCB3aGlsZSBydW5uaW5nIHRlc3RzLlxuICAgICAqL1xuICAgIHNldE5vdGlmeUZ1bmN0aW9uOiAoZm4pID0+IHtcbiAgICAgIG5vdGlmeUZuID0gZm47XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBVc2UgdGhpcyBtZXRob2QgdG8gc2V0IGEgY3VzdG9tIGZ1bmN0aW9uIHRvIGJhdGNoIG5vdGlmaWNhdGlvbnMgdG9nZXRoZXIgaW50byBhIHNpbmdsZSB0aWNrLlxuICAgICAqIEJ5IGRlZmF1bHQgUmVhY3QgUXVlcnkgd2lsbCB1c2UgdGhlIGJhdGNoIGZ1bmN0aW9uIHByb3ZpZGVkIGJ5IFJlYWN0RE9NIG9yIFJlYWN0IE5hdGl2ZS5cbiAgICAgKi9cbiAgICBzZXRCYXRjaE5vdGlmeUZ1bmN0aW9uOiAoZm4pID0+IHtcbiAgICAgIGJhdGNoTm90aWZ5Rm4gPSBmbjtcbiAgICB9LFxuICAgIHNldFNjaGVkdWxlcjogKGZuKSA9PiB7XG4gICAgICBzY2hlZHVsZUZuID0gZm47XG4gICAgfVxuICB9O1xufVxudmFyIG5vdGlmeU1hbmFnZXIgPSBjcmVhdGVOb3RpZnlNYW5hZ2VyKCk7XG5leHBvcnQge1xuICBjcmVhdGVOb3RpZnlNYW5hZ2VyLFxuICBub3RpZnlNYW5hZ2VyXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bm90aWZ5TWFuYWdlci5qcy5tYXAiLCIvLyBzcmMvcmVtb3ZhYmxlLnRzXG5pbXBvcnQgeyBpc1NlcnZlciwgaXNWYWxpZFRpbWVvdXQgfSBmcm9tIFwiLi91dGlscy5qc1wiO1xudmFyIFJlbW92YWJsZSA9IGNsYXNzIHtcbiAgI2djVGltZW91dDtcbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmNsZWFyR2NUaW1lb3V0KCk7XG4gIH1cbiAgc2NoZWR1bGVHYygpIHtcbiAgICB0aGlzLmNsZWFyR2NUaW1lb3V0KCk7XG4gICAgaWYgKGlzVmFsaWRUaW1lb3V0KHRoaXMuZ2NUaW1lKSkge1xuICAgICAgdGhpcy4jZ2NUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMub3B0aW9uYWxSZW1vdmUoKTtcbiAgICAgIH0sIHRoaXMuZ2NUaW1lKTtcbiAgICB9XG4gIH1cbiAgdXBkYXRlR2NUaW1lKG5ld0djVGltZSkge1xuICAgIHRoaXMuZ2NUaW1lID0gTWF0aC5tYXgoXG4gICAgICB0aGlzLmdjVGltZSB8fCAwLFxuICAgICAgbmV3R2NUaW1lID8/IChpc1NlcnZlciA/IEluZmluaXR5IDogNSAqIDYwICogMWUzKVxuICAgICk7XG4gIH1cbiAgY2xlYXJHY1RpbWVvdXQoKSB7XG4gICAgaWYgKHRoaXMuI2djVGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuI2djVGltZW91dCk7XG4gICAgICB0aGlzLiNnY1RpbWVvdXQgPSB2b2lkIDA7XG4gICAgfVxuICB9XG59O1xuZXhwb3J0IHtcbiAgUmVtb3ZhYmxlXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVtb3ZhYmxlLmpzLm1hcCIsIi8vIHNyYy9xdWVyeS50c1xuaW1wb3J0IHtcbiAgZW5zdXJlUXVlcnlGbixcbiAgbm9vcCxcbiAgcmVwbGFjZURhdGEsXG4gIHJlc29sdmVFbmFibGVkLFxuICBza2lwVG9rZW4sXG4gIHRpbWVVbnRpbFN0YWxlXG59IGZyb20gXCIuL3V0aWxzLmpzXCI7XG5pbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSBcIi4vbm90aWZ5TWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgY2FuRmV0Y2gsIGNyZWF0ZVJldHJ5ZXIsIGlzQ2FuY2VsbGVkRXJyb3IgfSBmcm9tIFwiLi9yZXRyeWVyLmpzXCI7XG5pbXBvcnQgeyBSZW1vdmFibGUgfSBmcm9tIFwiLi9yZW1vdmFibGUuanNcIjtcbnZhciBRdWVyeSA9IGNsYXNzIGV4dGVuZHMgUmVtb3ZhYmxlIHtcbiAgI2luaXRpYWxTdGF0ZTtcbiAgI3JldmVydFN0YXRlO1xuICAjY2FjaGU7XG4gICNyZXRyeWVyO1xuICAjZGVmYXVsdE9wdGlvbnM7XG4gICNhYm9ydFNpZ25hbENvbnN1bWVkO1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuI2Fib3J0U2lnbmFsQ29uc3VtZWQgPSBmYWxzZTtcbiAgICB0aGlzLiNkZWZhdWx0T3B0aW9ucyA9IGNvbmZpZy5kZWZhdWx0T3B0aW9ucztcbiAgICB0aGlzLnNldE9wdGlvbnMoY29uZmlnLm9wdGlvbnMpO1xuICAgIHRoaXMub2JzZXJ2ZXJzID0gW107XG4gICAgdGhpcy4jY2FjaGUgPSBjb25maWcuY2FjaGU7XG4gICAgdGhpcy5xdWVyeUtleSA9IGNvbmZpZy5xdWVyeUtleTtcbiAgICB0aGlzLnF1ZXJ5SGFzaCA9IGNvbmZpZy5xdWVyeUhhc2g7XG4gICAgdGhpcy4jaW5pdGlhbFN0YXRlID0gZ2V0RGVmYXVsdFN0YXRlKHRoaXMub3B0aW9ucyk7XG4gICAgdGhpcy5zdGF0ZSA9IGNvbmZpZy5zdGF0ZSA/PyB0aGlzLiNpbml0aWFsU3RhdGU7XG4gICAgdGhpcy5zY2hlZHVsZUdjKCk7XG4gIH1cbiAgZ2V0IG1ldGEoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5tZXRhO1xuICB9XG4gIGdldCBwcm9taXNlKCkge1xuICAgIHJldHVybiB0aGlzLiNyZXRyeWVyPy5wcm9taXNlO1xuICB9XG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IHsgLi4udGhpcy4jZGVmYXVsdE9wdGlvbnMsIC4uLm9wdGlvbnMgfTtcbiAgICB0aGlzLnVwZGF0ZUdjVGltZSh0aGlzLm9wdGlvbnMuZ2NUaW1lKTtcbiAgfVxuICBvcHRpb25hbFJlbW92ZSgpIHtcbiAgICBpZiAoIXRoaXMub2JzZXJ2ZXJzLmxlbmd0aCAmJiB0aGlzLnN0YXRlLmZldGNoU3RhdHVzID09PSBcImlkbGVcIikge1xuICAgICAgdGhpcy4jY2FjaGUucmVtb3ZlKHRoaXMpO1xuICAgIH1cbiAgfVxuICBzZXREYXRhKG5ld0RhdGEsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBkYXRhID0gcmVwbGFjZURhdGEodGhpcy5zdGF0ZS5kYXRhLCBuZXdEYXRhLCB0aGlzLm9wdGlvbnMpO1xuICAgIHRoaXMuI2Rpc3BhdGNoKHtcbiAgICAgIGRhdGEsXG4gICAgICB0eXBlOiBcInN1Y2Nlc3NcIixcbiAgICAgIGRhdGFVcGRhdGVkQXQ6IG9wdGlvbnM/LnVwZGF0ZWRBdCxcbiAgICAgIG1hbnVhbDogb3B0aW9ucz8ubWFudWFsXG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgc2V0U3RhdGUoc3RhdGUsIHNldFN0YXRlT3B0aW9ucykge1xuICAgIHRoaXMuI2Rpc3BhdGNoKHsgdHlwZTogXCJzZXRTdGF0ZVwiLCBzdGF0ZSwgc2V0U3RhdGVPcHRpb25zIH0pO1xuICB9XG4gIGNhbmNlbChvcHRpb25zKSB7XG4gICAgY29uc3QgcHJvbWlzZSA9IHRoaXMuI3JldHJ5ZXI/LnByb21pc2U7XG4gICAgdGhpcy4jcmV0cnllcj8uY2FuY2VsKG9wdGlvbnMpO1xuICAgIHJldHVybiBwcm9taXNlID8gcHJvbWlzZS50aGVuKG5vb3ApLmNhdGNoKG5vb3ApIDogUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cbiAgZGVzdHJveSgpIHtcbiAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgdGhpcy5jYW5jZWwoeyBzaWxlbnQ6IHRydWUgfSk7XG4gIH1cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5kZXN0cm95KCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh0aGlzLiNpbml0aWFsU3RhdGUpO1xuICB9XG4gIGlzQWN0aXZlKCkge1xuICAgIHJldHVybiB0aGlzLm9ic2VydmVycy5zb21lKFxuICAgICAgKG9ic2VydmVyKSA9PiByZXNvbHZlRW5hYmxlZChvYnNlcnZlci5vcHRpb25zLmVuYWJsZWQsIHRoaXMpICE9PSBmYWxzZVxuICAgICk7XG4gIH1cbiAgaXNEaXNhYmxlZCgpIHtcbiAgICBpZiAodGhpcy5nZXRPYnNlcnZlcnNDb3VudCgpID4gMCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlzQWN0aXZlKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMucXVlcnlGbiA9PT0gc2tpcFRva2VuIHx8IHRoaXMuc3RhdGUuZGF0YVVwZGF0ZUNvdW50ICsgdGhpcy5zdGF0ZS5lcnJvclVwZGF0ZUNvdW50ID09PSAwO1xuICB9XG4gIGlzU3RhbGUoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUuaXNJbnZhbGlkYXRlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLmdldE9ic2VydmVyc0NvdW50KCkgPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5vYnNlcnZlcnMuc29tZShcbiAgICAgICAgKG9ic2VydmVyKSA9PiBvYnNlcnZlci5nZXRDdXJyZW50UmVzdWx0KCkuaXNTdGFsZVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuZGF0YSA9PT0gdm9pZCAwO1xuICB9XG4gIGlzU3RhbGVCeVRpbWUoc3RhbGVUaW1lID0gMCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmlzSW52YWxpZGF0ZWQgfHwgdGhpcy5zdGF0ZS5kYXRhID09PSB2b2lkIDAgfHwgIXRpbWVVbnRpbFN0YWxlKHRoaXMuc3RhdGUuZGF0YVVwZGF0ZWRBdCwgc3RhbGVUaW1lKTtcbiAgfVxuICBvbkZvY3VzKCkge1xuICAgIGNvbnN0IG9ic2VydmVyID0gdGhpcy5vYnNlcnZlcnMuZmluZCgoeCkgPT4geC5zaG91bGRGZXRjaE9uV2luZG93Rm9jdXMoKSk7XG4gICAgb2JzZXJ2ZXI/LnJlZmV0Y2goeyBjYW5jZWxSZWZldGNoOiBmYWxzZSB9KTtcbiAgICB0aGlzLiNyZXRyeWVyPy5jb250aW51ZSgpO1xuICB9XG4gIG9uT25saW5lKCkge1xuICAgIGNvbnN0IG9ic2VydmVyID0gdGhpcy5vYnNlcnZlcnMuZmluZCgoeCkgPT4geC5zaG91bGRGZXRjaE9uUmVjb25uZWN0KCkpO1xuICAgIG9ic2VydmVyPy5yZWZldGNoKHsgY2FuY2VsUmVmZXRjaDogZmFsc2UgfSk7XG4gICAgdGhpcy4jcmV0cnllcj8uY29udGludWUoKTtcbiAgfVxuICBhZGRPYnNlcnZlcihvYnNlcnZlcikge1xuICAgIGlmICghdGhpcy5vYnNlcnZlcnMuaW5jbHVkZXMob2JzZXJ2ZXIpKSB7XG4gICAgICB0aGlzLm9ic2VydmVycy5wdXNoKG9ic2VydmVyKTtcbiAgICAgIHRoaXMuY2xlYXJHY1RpbWVvdXQoKTtcbiAgICAgIHRoaXMuI2NhY2hlLm5vdGlmeSh7IHR5cGU6IFwib2JzZXJ2ZXJBZGRlZFwiLCBxdWVyeTogdGhpcywgb2JzZXJ2ZXIgfSk7XG4gICAgfVxuICB9XG4gIHJlbW92ZU9ic2VydmVyKG9ic2VydmVyKSB7XG4gICAgaWYgKHRoaXMub2JzZXJ2ZXJzLmluY2x1ZGVzKG9ic2VydmVyKSkge1xuICAgICAgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLm9ic2VydmVycy5maWx0ZXIoKHgpID0+IHggIT09IG9ic2VydmVyKTtcbiAgICAgIGlmICghdGhpcy5vYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgIGlmICh0aGlzLiNyZXRyeWVyKSB7XG4gICAgICAgICAgaWYgKHRoaXMuI2Fib3J0U2lnbmFsQ29uc3VtZWQpIHtcbiAgICAgICAgICAgIHRoaXMuI3JldHJ5ZXIuY2FuY2VsKHsgcmV2ZXJ0OiB0cnVlIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiNyZXRyeWVyLmNhbmNlbFJldHJ5KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2NoZWR1bGVHYygpO1xuICAgICAgfVxuICAgICAgdGhpcy4jY2FjaGUubm90aWZ5KHsgdHlwZTogXCJvYnNlcnZlclJlbW92ZWRcIiwgcXVlcnk6IHRoaXMsIG9ic2VydmVyIH0pO1xuICAgIH1cbiAgfVxuICBnZXRPYnNlcnZlcnNDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5vYnNlcnZlcnMubGVuZ3RoO1xuICB9XG4gIGludmFsaWRhdGUoKSB7XG4gICAgaWYgKCF0aGlzLnN0YXRlLmlzSW52YWxpZGF0ZWQpIHtcbiAgICAgIHRoaXMuI2Rpc3BhdGNoKHsgdHlwZTogXCJpbnZhbGlkYXRlXCIgfSk7XG4gICAgfVxuICB9XG4gIGZldGNoKG9wdGlvbnMsIGZldGNoT3B0aW9ucykge1xuICAgIGlmICh0aGlzLnN0YXRlLmZldGNoU3RhdHVzICE9PSBcImlkbGVcIikge1xuICAgICAgaWYgKHRoaXMuc3RhdGUuZGF0YSAhPT0gdm9pZCAwICYmIGZldGNoT3B0aW9ucz8uY2FuY2VsUmVmZXRjaCkge1xuICAgICAgICB0aGlzLmNhbmNlbCh7IHNpbGVudDogdHJ1ZSB9KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy4jcmV0cnllcikge1xuICAgICAgICB0aGlzLiNyZXRyeWVyLmNvbnRpbnVlUmV0cnkoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3JldHJ5ZXIucHJvbWlzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMucXVlcnlGbikge1xuICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSB0aGlzLm9ic2VydmVycy5maW5kKCh4KSA9PiB4Lm9wdGlvbnMucXVlcnlGbik7XG4gICAgICBpZiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb25zKG9ic2VydmVyLm9wdGlvbnMpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5vcHRpb25zLnF1ZXJ5S2V5KSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIGBBcyBvZiB2NCwgcXVlcnlLZXkgbmVlZHMgdG8gYmUgYW4gQXJyYXkuIElmIHlvdSBhcmUgdXNpbmcgYSBzdHJpbmcgbGlrZSAncmVwb0RhdGEnLCBwbGVhc2UgY2hhbmdlIGl0IHRvIGFuIEFycmF5LCBlLmcuIFsncmVwb0RhdGEnXWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIGNvbnN0IGFkZFNpZ25hbFByb3BlcnR5ID0gKG9iamVjdCkgPT4ge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgXCJzaWduYWxcIiwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLiNhYm9ydFNpZ25hbENvbnN1bWVkID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gYWJvcnRDb250cm9sbGVyLnNpZ25hbDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBmZXRjaEZuID0gKCkgPT4ge1xuICAgICAgY29uc3QgcXVlcnlGbiA9IGVuc3VyZVF1ZXJ5Rm4odGhpcy5vcHRpb25zLCBmZXRjaE9wdGlvbnMpO1xuICAgICAgY29uc3QgcXVlcnlGbkNvbnRleHQgPSB7XG4gICAgICAgIHF1ZXJ5S2V5OiB0aGlzLnF1ZXJ5S2V5LFxuICAgICAgICBtZXRhOiB0aGlzLm1ldGFcbiAgICAgIH07XG4gICAgICBhZGRTaWduYWxQcm9wZXJ0eShxdWVyeUZuQ29udGV4dCk7XG4gICAgICB0aGlzLiNhYm9ydFNpZ25hbENvbnN1bWVkID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLnBlcnNpc3Rlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnBlcnNpc3RlcihcbiAgICAgICAgICBxdWVyeUZuLFxuICAgICAgICAgIHF1ZXJ5Rm5Db250ZXh0LFxuICAgICAgICAgIHRoaXNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBxdWVyeUZuKHF1ZXJ5Rm5Db250ZXh0KTtcbiAgICB9O1xuICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICBmZXRjaE9wdGlvbnMsXG4gICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnMsXG4gICAgICBxdWVyeUtleTogdGhpcy5xdWVyeUtleSxcbiAgICAgIHN0YXRlOiB0aGlzLnN0YXRlLFxuICAgICAgZmV0Y2hGblxuICAgIH07XG4gICAgYWRkU2lnbmFsUHJvcGVydHkoY29udGV4dCk7XG4gICAgdGhpcy5vcHRpb25zLmJlaGF2aW9yPy5vbkZldGNoKFxuICAgICAgY29udGV4dCxcbiAgICAgIHRoaXNcbiAgICApO1xuICAgIHRoaXMuI3JldmVydFN0YXRlID0gdGhpcy5zdGF0ZTtcbiAgICBpZiAodGhpcy5zdGF0ZS5mZXRjaFN0YXR1cyA9PT0gXCJpZGxlXCIgfHwgdGhpcy5zdGF0ZS5mZXRjaE1ldGEgIT09IGNvbnRleHQuZmV0Y2hPcHRpb25zPy5tZXRhKSB7XG4gICAgICB0aGlzLiNkaXNwYXRjaCh7IHR5cGU6IFwiZmV0Y2hcIiwgbWV0YTogY29udGV4dC5mZXRjaE9wdGlvbnM/Lm1ldGEgfSk7XG4gICAgfVxuICAgIGNvbnN0IG9uRXJyb3IgPSAoZXJyb3IpID0+IHtcbiAgICAgIGlmICghKGlzQ2FuY2VsbGVkRXJyb3IoZXJyb3IpICYmIGVycm9yLnNpbGVudCkpIHtcbiAgICAgICAgdGhpcy4jZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IFwiZXJyb3JcIixcbiAgICAgICAgICBlcnJvclxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNDYW5jZWxsZWRFcnJvcihlcnJvcikpIHtcbiAgICAgICAgdGhpcy4jY2FjaGUuY29uZmlnLm9uRXJyb3I/LihcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgICB0aGlzXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuI2NhY2hlLmNvbmZpZy5vblNldHRsZWQ/LihcbiAgICAgICAgICB0aGlzLnN0YXRlLmRhdGEsXG4gICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgdGhpc1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhpcy5zY2hlZHVsZUdjKCk7XG4gICAgfTtcbiAgICB0aGlzLiNyZXRyeWVyID0gY3JlYXRlUmV0cnllcih7XG4gICAgICBpbml0aWFsUHJvbWlzZTogZmV0Y2hPcHRpb25zPy5pbml0aWFsUHJvbWlzZSxcbiAgICAgIGZuOiBjb250ZXh0LmZldGNoRm4sXG4gICAgICBhYm9ydDogYWJvcnRDb250cm9sbGVyLmFib3J0LmJpbmQoYWJvcnRDb250cm9sbGVyKSxcbiAgICAgIG9uU3VjY2VzczogKGRhdGEpID0+IHtcbiAgICAgICAgaWYgKGRhdGEgPT09IHZvaWQgMCkge1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIGBRdWVyeSBkYXRhIGNhbm5vdCBiZSB1bmRlZmluZWQuIFBsZWFzZSBtYWtlIHN1cmUgdG8gcmV0dXJuIGEgdmFsdWUgb3RoZXIgdGhhbiB1bmRlZmluZWQgZnJvbSB5b3VyIHF1ZXJ5IGZ1bmN0aW9uLiBBZmZlY3RlZCBxdWVyeSBrZXk6ICR7dGhpcy5xdWVyeUhhc2h9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb25FcnJvcihuZXcgRXJyb3IoYCR7dGhpcy5xdWVyeUhhc2h9IGRhdGEgaXMgdW5kZWZpbmVkYCkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMuc2V0RGF0YShkYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBvbkVycm9yKGVycm9yKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jY2FjaGUuY29uZmlnLm9uU3VjY2Vzcz8uKGRhdGEsIHRoaXMpO1xuICAgICAgICB0aGlzLiNjYWNoZS5jb25maWcub25TZXR0bGVkPy4oXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICB0aGlzLnN0YXRlLmVycm9yLFxuICAgICAgICAgIHRoaXNcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zY2hlZHVsZUdjKCk7XG4gICAgICB9LFxuICAgICAgb25FcnJvcixcbiAgICAgIG9uRmFpbDogKGZhaWx1cmVDb3VudCwgZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy4jZGlzcGF0Y2goeyB0eXBlOiBcImZhaWxlZFwiLCBmYWlsdXJlQ291bnQsIGVycm9yIH0pO1xuICAgICAgfSxcbiAgICAgIG9uUGF1c2U6ICgpID0+IHtcbiAgICAgICAgdGhpcy4jZGlzcGF0Y2goeyB0eXBlOiBcInBhdXNlXCIgfSk7XG4gICAgICB9LFxuICAgICAgb25Db250aW51ZTogKCkgPT4ge1xuICAgICAgICB0aGlzLiNkaXNwYXRjaCh7IHR5cGU6IFwiY29udGludWVcIiB9KTtcbiAgICAgIH0sXG4gICAgICByZXRyeTogY29udGV4dC5vcHRpb25zLnJldHJ5LFxuICAgICAgcmV0cnlEZWxheTogY29udGV4dC5vcHRpb25zLnJldHJ5RGVsYXksXG4gICAgICBuZXR3b3JrTW9kZTogY29udGV4dC5vcHRpb25zLm5ldHdvcmtNb2RlLFxuICAgICAgY2FuUnVuOiAoKSA9PiB0cnVlXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuI3JldHJ5ZXIuc3RhcnQoKTtcbiAgfVxuICAjZGlzcGF0Y2goYWN0aW9uKSB7XG4gICAgY29uc3QgcmVkdWNlciA9IChzdGF0ZSkgPT4ge1xuICAgICAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgICAgICBjYXNlIFwiZmFpbGVkXCI6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgZmV0Y2hGYWlsdXJlQ291bnQ6IGFjdGlvbi5mYWlsdXJlQ291bnQsXG4gICAgICAgICAgICBmZXRjaEZhaWx1cmVSZWFzb246IGFjdGlvbi5lcnJvclxuICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgXCJwYXVzZVwiOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIGZldGNoU3RhdHVzOiBcInBhdXNlZFwiXG4gICAgICAgICAgfTtcbiAgICAgICAgY2FzZSBcImNvbnRpbnVlXCI6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgZmV0Y2hTdGF0dXM6IFwiZmV0Y2hpbmdcIlxuICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgXCJmZXRjaFwiOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIC4uLmZldGNoU3RhdGUoc3RhdGUuZGF0YSwgdGhpcy5vcHRpb25zKSxcbiAgICAgICAgICAgIGZldGNoTWV0YTogYWN0aW9uLm1ldGEgPz8gbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgXCJzdWNjZXNzXCI6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgZGF0YTogYWN0aW9uLmRhdGEsXG4gICAgICAgICAgICBkYXRhVXBkYXRlQ291bnQ6IHN0YXRlLmRhdGFVcGRhdGVDb3VudCArIDEsXG4gICAgICAgICAgICBkYXRhVXBkYXRlZEF0OiBhY3Rpb24uZGF0YVVwZGF0ZWRBdCA/PyBEYXRlLm5vdygpLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICBpc0ludmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHN0YXR1czogXCJzdWNjZXNzXCIsXG4gICAgICAgICAgICAuLi4hYWN0aW9uLm1hbnVhbCAmJiB7XG4gICAgICAgICAgICAgIGZldGNoU3RhdHVzOiBcImlkbGVcIixcbiAgICAgICAgICAgICAgZmV0Y2hGYWlsdXJlQ291bnQ6IDAsXG4gICAgICAgICAgICAgIGZldGNoRmFpbHVyZVJlYXNvbjogbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgXCJlcnJvclwiOlxuICAgICAgICAgIGNvbnN0IGVycm9yID0gYWN0aW9uLmVycm9yO1xuICAgICAgICAgIGlmIChpc0NhbmNlbGxlZEVycm9yKGVycm9yKSAmJiBlcnJvci5yZXZlcnQgJiYgdGhpcy4jcmV2ZXJ0U3RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7IC4uLnRoaXMuI3JldmVydFN0YXRlLCBmZXRjaFN0YXR1czogXCJpZGxlXCIgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICBlcnJvclVwZGF0ZUNvdW50OiBzdGF0ZS5lcnJvclVwZGF0ZUNvdW50ICsgMSxcbiAgICAgICAgICAgIGVycm9yVXBkYXRlZEF0OiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgZmV0Y2hGYWlsdXJlQ291bnQ6IHN0YXRlLmZldGNoRmFpbHVyZUNvdW50ICsgMSxcbiAgICAgICAgICAgIGZldGNoRmFpbHVyZVJlYXNvbjogZXJyb3IsXG4gICAgICAgICAgICBmZXRjaFN0YXR1czogXCJpZGxlXCIsXG4gICAgICAgICAgICBzdGF0dXM6IFwiZXJyb3JcIlxuICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgXCJpbnZhbGlkYXRlXCI6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgaXNJbnZhbGlkYXRlZDogdHJ1ZVxuICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgXCJzZXRTdGF0ZVwiOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIC4uLmFjdGlvbi5zdGF0ZVxuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnN0YXRlID0gcmVkdWNlcih0aGlzLnN0YXRlKTtcbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKCgpID0+IHtcbiAgICAgIHRoaXMub2JzZXJ2ZXJzLmZvckVhY2goKG9ic2VydmVyKSA9PiB7XG4gICAgICAgIG9ic2VydmVyLm9uUXVlcnlVcGRhdGUoKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy4jY2FjaGUubm90aWZ5KHsgcXVlcnk6IHRoaXMsIHR5cGU6IFwidXBkYXRlZFwiLCBhY3Rpb24gfSk7XG4gICAgfSk7XG4gIH1cbn07XG5mdW5jdGlvbiBmZXRjaFN0YXRlKGRhdGEsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHtcbiAgICBmZXRjaEZhaWx1cmVDb3VudDogMCxcbiAgICBmZXRjaEZhaWx1cmVSZWFzb246IG51bGwsXG4gICAgZmV0Y2hTdGF0dXM6IGNhbkZldGNoKG9wdGlvbnMubmV0d29ya01vZGUpID8gXCJmZXRjaGluZ1wiIDogXCJwYXVzZWRcIixcbiAgICAuLi5kYXRhID09PSB2b2lkIDAgJiYge1xuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICBzdGF0dXM6IFwicGVuZGluZ1wiXG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdFN0YXRlKG9wdGlvbnMpIHtcbiAgY29uc3QgZGF0YSA9IHR5cGVvZiBvcHRpb25zLmluaXRpYWxEYXRhID09PSBcImZ1bmN0aW9uXCIgPyBvcHRpb25zLmluaXRpYWxEYXRhKCkgOiBvcHRpb25zLmluaXRpYWxEYXRhO1xuICBjb25zdCBoYXNEYXRhID0gZGF0YSAhPT0gdm9pZCAwO1xuICBjb25zdCBpbml0aWFsRGF0YVVwZGF0ZWRBdCA9IGhhc0RhdGEgPyB0eXBlb2Ygb3B0aW9ucy5pbml0aWFsRGF0YVVwZGF0ZWRBdCA9PT0gXCJmdW5jdGlvblwiID8gb3B0aW9ucy5pbml0aWFsRGF0YVVwZGF0ZWRBdCgpIDogb3B0aW9ucy5pbml0aWFsRGF0YVVwZGF0ZWRBdCA6IDA7XG4gIHJldHVybiB7XG4gICAgZGF0YSxcbiAgICBkYXRhVXBkYXRlQ291bnQ6IDAsXG4gICAgZGF0YVVwZGF0ZWRBdDogaGFzRGF0YSA/IGluaXRpYWxEYXRhVXBkYXRlZEF0ID8/IERhdGUubm93KCkgOiAwLFxuICAgIGVycm9yOiBudWxsLFxuICAgIGVycm9yVXBkYXRlQ291bnQ6IDAsXG4gICAgZXJyb3JVcGRhdGVkQXQ6IDAsXG4gICAgZmV0Y2hGYWlsdXJlQ291bnQ6IDAsXG4gICAgZmV0Y2hGYWlsdXJlUmVhc29uOiBudWxsLFxuICAgIGZldGNoTWV0YTogbnVsbCxcbiAgICBpc0ludmFsaWRhdGVkOiBmYWxzZSxcbiAgICBzdGF0dXM6IGhhc0RhdGEgPyBcInN1Y2Nlc3NcIiA6IFwicGVuZGluZ1wiLFxuICAgIGZldGNoU3RhdHVzOiBcImlkbGVcIlxuICB9O1xufVxuZXhwb3J0IHtcbiAgUXVlcnksXG4gIGZldGNoU3RhdGVcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1xdWVyeS5qcy5tYXAiLCIvLyBzcmMvcXVlcnlDYWNoZS50c1xuaW1wb3J0IHsgaGFzaFF1ZXJ5S2V5QnlPcHRpb25zLCBtYXRjaFF1ZXJ5IH0gZnJvbSBcIi4vdXRpbHMuanNcIjtcbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIi4vcXVlcnkuanNcIjtcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tIFwiLi9ub3RpZnlNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tIFwiLi9zdWJzY3JpYmFibGUuanNcIjtcbnZhciBRdWVyeUNhY2hlID0gY2xhc3MgZXh0ZW5kcyBTdWJzY3JpYmFibGUge1xuICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy4jcXVlcmllcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIH1cbiAgI3F1ZXJpZXM7XG4gIGJ1aWxkKGNsaWVudCwgb3B0aW9ucywgc3RhdGUpIHtcbiAgICBjb25zdCBxdWVyeUtleSA9IG9wdGlvbnMucXVlcnlLZXk7XG4gICAgY29uc3QgcXVlcnlIYXNoID0gb3B0aW9ucy5xdWVyeUhhc2ggPz8gaGFzaFF1ZXJ5S2V5QnlPcHRpb25zKHF1ZXJ5S2V5LCBvcHRpb25zKTtcbiAgICBsZXQgcXVlcnkgPSB0aGlzLmdldChxdWVyeUhhc2gpO1xuICAgIGlmICghcXVlcnkpIHtcbiAgICAgIHF1ZXJ5ID0gbmV3IFF1ZXJ5KHtcbiAgICAgICAgY2FjaGU6IHRoaXMsXG4gICAgICAgIHF1ZXJ5S2V5LFxuICAgICAgICBxdWVyeUhhc2gsXG4gICAgICAgIG9wdGlvbnM6IGNsaWVudC5kZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpLFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgZGVmYXVsdE9wdGlvbnM6IGNsaWVudC5nZXRRdWVyeURlZmF1bHRzKHF1ZXJ5S2V5KVxuICAgICAgfSk7XG4gICAgICB0aGlzLmFkZChxdWVyeSk7XG4gICAgfVxuICAgIHJldHVybiBxdWVyeTtcbiAgfVxuICBhZGQocXVlcnkpIHtcbiAgICBpZiAoIXRoaXMuI3F1ZXJpZXMuaGFzKHF1ZXJ5LnF1ZXJ5SGFzaCkpIHtcbiAgICAgIHRoaXMuI3F1ZXJpZXMuc2V0KHF1ZXJ5LnF1ZXJ5SGFzaCwgcXVlcnkpO1xuICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiBcImFkZGVkXCIsXG4gICAgICAgIHF1ZXJ5XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmVtb3ZlKHF1ZXJ5KSB7XG4gICAgY29uc3QgcXVlcnlJbk1hcCA9IHRoaXMuI3F1ZXJpZXMuZ2V0KHF1ZXJ5LnF1ZXJ5SGFzaCk7XG4gICAgaWYgKHF1ZXJ5SW5NYXApIHtcbiAgICAgIHF1ZXJ5LmRlc3Ryb3koKTtcbiAgICAgIGlmIChxdWVyeUluTWFwID09PSBxdWVyeSkge1xuICAgICAgICB0aGlzLiNxdWVyaWVzLmRlbGV0ZShxdWVyeS5xdWVyeUhhc2gpO1xuICAgICAgfVxuICAgICAgdGhpcy5ub3RpZnkoeyB0eXBlOiBcInJlbW92ZWRcIiwgcXVlcnkgfSk7XG4gICAgfVxuICB9XG4gIGNsZWFyKCkge1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5nZXRBbGwoKS5mb3JFYWNoKChxdWVyeSkgPT4ge1xuICAgICAgICB0aGlzLnJlbW92ZShxdWVyeSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBnZXQocXVlcnlIYXNoKSB7XG4gICAgcmV0dXJuIHRoaXMuI3F1ZXJpZXMuZ2V0KHF1ZXJ5SGFzaCk7XG4gIH1cbiAgZ2V0QWxsKCkge1xuICAgIHJldHVybiBbLi4udGhpcy4jcXVlcmllcy52YWx1ZXMoKV07XG4gIH1cbiAgZmluZChmaWx0ZXJzKSB7XG4gICAgY29uc3QgZGVmYXVsdGVkRmlsdGVycyA9IHsgZXhhY3Q6IHRydWUsIC4uLmZpbHRlcnMgfTtcbiAgICByZXR1cm4gdGhpcy5nZXRBbGwoKS5maW5kKFxuICAgICAgKHF1ZXJ5KSA9PiBtYXRjaFF1ZXJ5KGRlZmF1bHRlZEZpbHRlcnMsIHF1ZXJ5KVxuICAgICk7XG4gIH1cbiAgZmluZEFsbChmaWx0ZXJzID0ge30pIHtcbiAgICBjb25zdCBxdWVyaWVzID0gdGhpcy5nZXRBbGwoKTtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZmlsdGVycykubGVuZ3RoID4gMCA/IHF1ZXJpZXMuZmlsdGVyKChxdWVyeSkgPT4gbWF0Y2hRdWVyeShmaWx0ZXJzLCBxdWVyeSkpIDogcXVlcmllcztcbiAgfVxuICBub3RpZnkoZXZlbnQpIHtcbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKCgpID0+IHtcbiAgICAgIHRoaXMubGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiB7XG4gICAgICAgIGxpc3RlbmVyKGV2ZW50KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIG9uRm9jdXMoKSB7XG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLmdldEFsbCgpLmZvckVhY2goKHF1ZXJ5KSA9PiB7XG4gICAgICAgIHF1ZXJ5Lm9uRm9jdXMoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIG9uT25saW5lKCkge1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5nZXRBbGwoKS5mb3JFYWNoKChxdWVyeSkgPT4ge1xuICAgICAgICBxdWVyeS5vbk9ubGluZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn07XG5leHBvcnQge1xuICBRdWVyeUNhY2hlXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cXVlcnlDYWNoZS5qcy5tYXAiLCIvLyBzcmMvbXV0YXRpb24udHNcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tIFwiLi9ub3RpZnlNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBSZW1vdmFibGUgfSBmcm9tIFwiLi9yZW1vdmFibGUuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVJldHJ5ZXIgfSBmcm9tIFwiLi9yZXRyeWVyLmpzXCI7XG52YXIgTXV0YXRpb24gPSBjbGFzcyBleHRlbmRzIFJlbW92YWJsZSB7XG4gICNvYnNlcnZlcnM7XG4gICNtdXRhdGlvbkNhY2hlO1xuICAjcmV0cnllcjtcbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm11dGF0aW9uSWQgPSBjb25maWcubXV0YXRpb25JZDtcbiAgICB0aGlzLiNtdXRhdGlvbkNhY2hlID0gY29uZmlnLm11dGF0aW9uQ2FjaGU7XG4gICAgdGhpcy4jb2JzZXJ2ZXJzID0gW107XG4gICAgdGhpcy5zdGF0ZSA9IGNvbmZpZy5zdGF0ZSB8fCBnZXREZWZhdWx0U3RhdGUoKTtcbiAgICB0aGlzLnNldE9wdGlvbnMoY29uZmlnLm9wdGlvbnMpO1xuICAgIHRoaXMuc2NoZWR1bGVHYygpO1xuICB9XG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy51cGRhdGVHY1RpbWUodGhpcy5vcHRpb25zLmdjVGltZSk7XG4gIH1cbiAgZ2V0IG1ldGEoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5tZXRhO1xuICB9XG4gIGFkZE9ic2VydmVyKG9ic2VydmVyKSB7XG4gICAgaWYgKCF0aGlzLiNvYnNlcnZlcnMuaW5jbHVkZXMob2JzZXJ2ZXIpKSB7XG4gICAgICB0aGlzLiNvYnNlcnZlcnMucHVzaChvYnNlcnZlcik7XG4gICAgICB0aGlzLmNsZWFyR2NUaW1lb3V0KCk7XG4gICAgICB0aGlzLiNtdXRhdGlvbkNhY2hlLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6IFwib2JzZXJ2ZXJBZGRlZFwiLFxuICAgICAgICBtdXRhdGlvbjogdGhpcyxcbiAgICAgICAgb2JzZXJ2ZXJcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZW1vdmVPYnNlcnZlcihvYnNlcnZlcikge1xuICAgIHRoaXMuI29ic2VydmVycyA9IHRoaXMuI29ic2VydmVycy5maWx0ZXIoKHgpID0+IHggIT09IG9ic2VydmVyKTtcbiAgICB0aGlzLnNjaGVkdWxlR2MoKTtcbiAgICB0aGlzLiNtdXRhdGlvbkNhY2hlLm5vdGlmeSh7XG4gICAgICB0eXBlOiBcIm9ic2VydmVyUmVtb3ZlZFwiLFxuICAgICAgbXV0YXRpb246IHRoaXMsXG4gICAgICBvYnNlcnZlclxuICAgIH0pO1xuICB9XG4gIG9wdGlvbmFsUmVtb3ZlKCkge1xuICAgIGlmICghdGhpcy4jb2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMuc3RhdGUuc3RhdHVzID09PSBcInBlbmRpbmdcIikge1xuICAgICAgICB0aGlzLnNjaGVkdWxlR2MoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuI211dGF0aW9uQ2FjaGUucmVtb3ZlKHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb250aW51ZSgpIHtcbiAgICByZXR1cm4gdGhpcy4jcmV0cnllcj8uY29udGludWUoKSA/PyAvLyBjb250aW51aW5nIGEgbXV0YXRpb24gYXNzdW1lcyB0aGF0IHZhcmlhYmxlcyBhcmUgc2V0LCBtdXRhdGlvbiBtdXN0IGhhdmUgYmVlbiBkZWh5ZHJhdGVkIGJlZm9yZVxuICAgIHRoaXMuZXhlY3V0ZSh0aGlzLnN0YXRlLnZhcmlhYmxlcyk7XG4gIH1cbiAgYXN5bmMgZXhlY3V0ZSh2YXJpYWJsZXMpIHtcbiAgICB0aGlzLiNyZXRyeWVyID0gY3JlYXRlUmV0cnllcih7XG4gICAgICBmbjogKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5tdXRhdGlvbkZuKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIG11dGF0aW9uRm4gZm91bmRcIikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMubXV0YXRpb25Gbih2YXJpYWJsZXMpO1xuICAgICAgfSxcbiAgICAgIG9uRmFpbDogKGZhaWx1cmVDb3VudCwgZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy4jZGlzcGF0Y2goeyB0eXBlOiBcImZhaWxlZFwiLCBmYWlsdXJlQ291bnQsIGVycm9yIH0pO1xuICAgICAgfSxcbiAgICAgIG9uUGF1c2U6ICgpID0+IHtcbiAgICAgICAgdGhpcy4jZGlzcGF0Y2goeyB0eXBlOiBcInBhdXNlXCIgfSk7XG4gICAgICB9LFxuICAgICAgb25Db250aW51ZTogKCkgPT4ge1xuICAgICAgICB0aGlzLiNkaXNwYXRjaCh7IHR5cGU6IFwiY29udGludWVcIiB9KTtcbiAgICAgIH0sXG4gICAgICByZXRyeTogdGhpcy5vcHRpb25zLnJldHJ5ID8/IDAsXG4gICAgICByZXRyeURlbGF5OiB0aGlzLm9wdGlvbnMucmV0cnlEZWxheSxcbiAgICAgIG5ldHdvcmtNb2RlOiB0aGlzLm9wdGlvbnMubmV0d29ya01vZGUsXG4gICAgICBjYW5SdW46ICgpID0+IHRoaXMuI211dGF0aW9uQ2FjaGUuY2FuUnVuKHRoaXMpXG4gICAgfSk7XG4gICAgY29uc3QgcmVzdG9yZWQgPSB0aGlzLnN0YXRlLnN0YXR1cyA9PT0gXCJwZW5kaW5nXCI7XG4gICAgY29uc3QgaXNQYXVzZWQgPSAhdGhpcy4jcmV0cnllci5jYW5TdGFydCgpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoIXJlc3RvcmVkKSB7XG4gICAgICAgIHRoaXMuI2Rpc3BhdGNoKHsgdHlwZTogXCJwZW5kaW5nXCIsIHZhcmlhYmxlcywgaXNQYXVzZWQgfSk7XG4gICAgICAgIGF3YWl0IHRoaXMuI211dGF0aW9uQ2FjaGUuY29uZmlnLm9uTXV0YXRlPy4oXG4gICAgICAgICAgdmFyaWFibGVzLFxuICAgICAgICAgIHRoaXNcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGF3YWl0IHRoaXMub3B0aW9ucy5vbk11dGF0ZT8uKHZhcmlhYmxlcyk7XG4gICAgICAgIGlmIChjb250ZXh0ICE9PSB0aGlzLnN0YXRlLmNvbnRleHQpIHtcbiAgICAgICAgICB0aGlzLiNkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiBcInBlbmRpbmdcIixcbiAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICB2YXJpYWJsZXMsXG4gICAgICAgICAgICBpc1BhdXNlZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy4jcmV0cnllci5zdGFydCgpO1xuICAgICAgYXdhaXQgdGhpcy4jbXV0YXRpb25DYWNoZS5jb25maWcub25TdWNjZXNzPy4oXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHZhcmlhYmxlcyxcbiAgICAgICAgdGhpcy5zdGF0ZS5jb250ZXh0LFxuICAgICAgICB0aGlzXG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5vcHRpb25zLm9uU3VjY2Vzcz8uKGRhdGEsIHZhcmlhYmxlcywgdGhpcy5zdGF0ZS5jb250ZXh0KTtcbiAgICAgIGF3YWl0IHRoaXMuI211dGF0aW9uQ2FjaGUuY29uZmlnLm9uU2V0dGxlZD8uKFxuICAgICAgICBkYXRhLFxuICAgICAgICBudWxsLFxuICAgICAgICB0aGlzLnN0YXRlLnZhcmlhYmxlcyxcbiAgICAgICAgdGhpcy5zdGF0ZS5jb250ZXh0LFxuICAgICAgICB0aGlzXG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5vcHRpb25zLm9uU2V0dGxlZD8uKGRhdGEsIG51bGwsIHZhcmlhYmxlcywgdGhpcy5zdGF0ZS5jb250ZXh0KTtcbiAgICAgIHRoaXMuI2Rpc3BhdGNoKHsgdHlwZTogXCJzdWNjZXNzXCIsIGRhdGEgfSk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy4jbXV0YXRpb25DYWNoZS5jb25maWcub25FcnJvcj8uKFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICAgIHZhcmlhYmxlcyxcbiAgICAgICAgICB0aGlzLnN0YXRlLmNvbnRleHQsXG4gICAgICAgICAgdGhpc1xuICAgICAgICApO1xuICAgICAgICBhd2FpdCB0aGlzLm9wdGlvbnMub25FcnJvcj8uKFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICAgIHZhcmlhYmxlcyxcbiAgICAgICAgICB0aGlzLnN0YXRlLmNvbnRleHRcbiAgICAgICAgKTtcbiAgICAgICAgYXdhaXQgdGhpcy4jbXV0YXRpb25DYWNoZS5jb25maWcub25TZXR0bGVkPy4oXG4gICAgICAgICAgdm9pZCAwLFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICAgIHRoaXMuc3RhdGUudmFyaWFibGVzLFxuICAgICAgICAgIHRoaXMuc3RhdGUuY29udGV4dCxcbiAgICAgICAgICB0aGlzXG4gICAgICAgICk7XG4gICAgICAgIGF3YWl0IHRoaXMub3B0aW9ucy5vblNldHRsZWQ/LihcbiAgICAgICAgICB2b2lkIDAsXG4gICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgdmFyaWFibGVzLFxuICAgICAgICAgIHRoaXMuc3RhdGUuY29udGV4dFxuICAgICAgICApO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuI2Rpc3BhdGNoKHsgdHlwZTogXCJlcnJvclwiLCBlcnJvciB9KTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy4jbXV0YXRpb25DYWNoZS5ydW5OZXh0KHRoaXMpO1xuICAgIH1cbiAgfVxuICAjZGlzcGF0Y2goYWN0aW9uKSB7XG4gICAgY29uc3QgcmVkdWNlciA9IChzdGF0ZSkgPT4ge1xuICAgICAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgICAgICBjYXNlIFwiZmFpbGVkXCI6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgZmFpbHVyZUNvdW50OiBhY3Rpb24uZmFpbHVyZUNvdW50LFxuICAgICAgICAgICAgZmFpbHVyZVJlYXNvbjogYWN0aW9uLmVycm9yXG4gICAgICAgICAgfTtcbiAgICAgICAgY2FzZSBcInBhdXNlXCI6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgaXNQYXVzZWQ6IHRydWVcbiAgICAgICAgICB9O1xuICAgICAgICBjYXNlIFwiY29udGludWVcIjpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICBpc1BhdXNlZDogZmFsc2VcbiAgICAgICAgICB9O1xuICAgICAgICBjYXNlIFwicGVuZGluZ1wiOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIGNvbnRleHQ6IGFjdGlvbi5jb250ZXh0LFxuICAgICAgICAgICAgZGF0YTogdm9pZCAwLFxuICAgICAgICAgICAgZmFpbHVyZUNvdW50OiAwLFxuICAgICAgICAgICAgZmFpbHVyZVJlYXNvbjogbnVsbCxcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgaXNQYXVzZWQ6IGFjdGlvbi5pc1BhdXNlZCxcbiAgICAgICAgICAgIHN0YXR1czogXCJwZW5kaW5nXCIsXG4gICAgICAgICAgICB2YXJpYWJsZXM6IGFjdGlvbi52YXJpYWJsZXMsXG4gICAgICAgICAgICBzdWJtaXR0ZWRBdDogRGF0ZS5ub3coKVxuICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgXCJzdWNjZXNzXCI6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgZGF0YTogYWN0aW9uLmRhdGEsXG4gICAgICAgICAgICBmYWlsdXJlQ291bnQ6IDAsXG4gICAgICAgICAgICBmYWlsdXJlUmVhc29uOiBudWxsLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICBzdGF0dXM6IFwic3VjY2Vzc1wiLFxuICAgICAgICAgICAgaXNQYXVzZWQ6IGZhbHNlXG4gICAgICAgICAgfTtcbiAgICAgICAgY2FzZSBcImVycm9yXCI6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgZGF0YTogdm9pZCAwLFxuICAgICAgICAgICAgZXJyb3I6IGFjdGlvbi5lcnJvcixcbiAgICAgICAgICAgIGZhaWx1cmVDb3VudDogc3RhdGUuZmFpbHVyZUNvdW50ICsgMSxcbiAgICAgICAgICAgIGZhaWx1cmVSZWFzb246IGFjdGlvbi5lcnJvcixcbiAgICAgICAgICAgIGlzUGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICAgIHN0YXR1czogXCJlcnJvclwiXG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuc3RhdGUgPSByZWR1Y2VyKHRoaXMuc3RhdGUpO1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goKCkgPT4ge1xuICAgICAgdGhpcy4jb2JzZXJ2ZXJzLmZvckVhY2goKG9ic2VydmVyKSA9PiB7XG4gICAgICAgIG9ic2VydmVyLm9uTXV0YXRpb25VcGRhdGUoYWN0aW9uKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy4jbXV0YXRpb25DYWNoZS5ub3RpZnkoe1xuICAgICAgICBtdXRhdGlvbjogdGhpcyxcbiAgICAgICAgdHlwZTogXCJ1cGRhdGVkXCIsXG4gICAgICAgIGFjdGlvblxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn07XG5mdW5jdGlvbiBnZXREZWZhdWx0U3RhdGUoKSB7XG4gIHJldHVybiB7XG4gICAgY29udGV4dDogdm9pZCAwLFxuICAgIGRhdGE6IHZvaWQgMCxcbiAgICBlcnJvcjogbnVsbCxcbiAgICBmYWlsdXJlQ291bnQ6IDAsXG4gICAgZmFpbHVyZVJlYXNvbjogbnVsbCxcbiAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgc3RhdHVzOiBcImlkbGVcIixcbiAgICB2YXJpYWJsZXM6IHZvaWQgMCxcbiAgICBzdWJtaXR0ZWRBdDogMFxuICB9O1xufVxuZXhwb3J0IHtcbiAgTXV0YXRpb24sXG4gIGdldERlZmF1bHRTdGF0ZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW11dGF0aW9uLmpzLm1hcCIsIi8vIHNyYy9tdXRhdGlvbkNhY2hlLnRzXG5pbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSBcIi4vbm90aWZ5TWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgTXV0YXRpb24gfSBmcm9tIFwiLi9tdXRhdGlvbi5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hNdXRhdGlvbiwgbm9vcCB9IGZyb20gXCIuL3V0aWxzLmpzXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tIFwiLi9zdWJzY3JpYmFibGUuanNcIjtcbnZhciBNdXRhdGlvbkNhY2hlID0gY2xhc3MgZXh0ZW5kcyBTdWJzY3JpYmFibGUge1xuICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy4jbXV0YXRpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcbiAgICB0aGlzLiNzY29wZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICAgIHRoaXMuI211dGF0aW9uSWQgPSAwO1xuICB9XG4gICNtdXRhdGlvbnM7XG4gICNzY29wZXM7XG4gICNtdXRhdGlvbklkO1xuICBidWlsZChjbGllbnQsIG9wdGlvbnMsIHN0YXRlKSB7XG4gICAgY29uc3QgbXV0YXRpb24gPSBuZXcgTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb25DYWNoZTogdGhpcyxcbiAgICAgIG11dGF0aW9uSWQ6ICsrdGhpcy4jbXV0YXRpb25JZCxcbiAgICAgIG9wdGlvbnM6IGNsaWVudC5kZWZhdWx0TXV0YXRpb25PcHRpb25zKG9wdGlvbnMpLFxuICAgICAgc3RhdGVcbiAgICB9KTtcbiAgICB0aGlzLmFkZChtdXRhdGlvbik7XG4gICAgcmV0dXJuIG11dGF0aW9uO1xuICB9XG4gIGFkZChtdXRhdGlvbikge1xuICAgIHRoaXMuI211dGF0aW9ucy5hZGQobXV0YXRpb24pO1xuICAgIGNvbnN0IHNjb3BlID0gc2NvcGVGb3IobXV0YXRpb24pO1xuICAgIGlmICh0eXBlb2Ygc2NvcGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGNvbnN0IHNjb3BlZE11dGF0aW9ucyA9IHRoaXMuI3Njb3Blcy5nZXQoc2NvcGUpO1xuICAgICAgaWYgKHNjb3BlZE11dGF0aW9ucykge1xuICAgICAgICBzY29wZWRNdXRhdGlvbnMucHVzaChtdXRhdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiNzY29wZXMuc2V0KHNjb3BlLCBbbXV0YXRpb25dKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5ub3RpZnkoeyB0eXBlOiBcImFkZGVkXCIsIG11dGF0aW9uIH0pO1xuICB9XG4gIHJlbW92ZShtdXRhdGlvbikge1xuICAgIGlmICh0aGlzLiNtdXRhdGlvbnMuZGVsZXRlKG11dGF0aW9uKSkge1xuICAgICAgY29uc3Qgc2NvcGUgPSBzY29wZUZvcihtdXRhdGlvbik7XG4gICAgICBpZiAodHlwZW9mIHNjb3BlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGNvbnN0IHNjb3BlZE11dGF0aW9ucyA9IHRoaXMuI3Njb3Blcy5nZXQoc2NvcGUpO1xuICAgICAgICBpZiAoc2NvcGVkTXV0YXRpb25zKSB7XG4gICAgICAgICAgaWYgKHNjb3BlZE11dGF0aW9ucy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHNjb3BlZE11dGF0aW9ucy5pbmRleE9mKG11dGF0aW9uKTtcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgc2NvcGVkTXV0YXRpb25zLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChzY29wZWRNdXRhdGlvbnNbMF0gPT09IG11dGF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLiNzY29wZXMuZGVsZXRlKHNjb3BlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5ub3RpZnkoeyB0eXBlOiBcInJlbW92ZWRcIiwgbXV0YXRpb24gfSk7XG4gIH1cbiAgY2FuUnVuKG11dGF0aW9uKSB7XG4gICAgY29uc3Qgc2NvcGUgPSBzY29wZUZvcihtdXRhdGlvbik7XG4gICAgaWYgKHR5cGVvZiBzY29wZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgY29uc3QgbXV0YXRpb25zV2l0aFNhbWVTY29wZSA9IHRoaXMuI3Njb3Blcy5nZXQoc2NvcGUpO1xuICAgICAgY29uc3QgZmlyc3RQZW5kaW5nTXV0YXRpb24gPSBtdXRhdGlvbnNXaXRoU2FtZVNjb3BlPy5maW5kKFxuICAgICAgICAobSkgPT4gbS5zdGF0ZS5zdGF0dXMgPT09IFwicGVuZGluZ1wiXG4gICAgICApO1xuICAgICAgcmV0dXJuICFmaXJzdFBlbmRpbmdNdXRhdGlvbiB8fCBmaXJzdFBlbmRpbmdNdXRhdGlvbiA9PT0gbXV0YXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICBydW5OZXh0KG11dGF0aW9uKSB7XG4gICAgY29uc3Qgc2NvcGUgPSBzY29wZUZvcihtdXRhdGlvbik7XG4gICAgaWYgKHR5cGVvZiBzY29wZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgY29uc3QgZm91bmRNdXRhdGlvbiA9IHRoaXMuI3Njb3Blcy5nZXQoc2NvcGUpPy5maW5kKChtKSA9PiBtICE9PSBtdXRhdGlvbiAmJiBtLnN0YXRlLmlzUGF1c2VkKTtcbiAgICAgIHJldHVybiBmb3VuZE11dGF0aW9uPy5jb250aW51ZSgpID8/IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICB9XG4gIGNsZWFyKCkge1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goKCkgPT4ge1xuICAgICAgdGhpcy4jbXV0YXRpb25zLmZvckVhY2goKG11dGF0aW9uKSA9PiB7XG4gICAgICAgIHRoaXMubm90aWZ5KHsgdHlwZTogXCJyZW1vdmVkXCIsIG11dGF0aW9uIH0pO1xuICAgICAgfSk7XG4gICAgICB0aGlzLiNtdXRhdGlvbnMuY2xlYXIoKTtcbiAgICAgIHRoaXMuI3Njb3Blcy5jbGVhcigpO1xuICAgIH0pO1xuICB9XG4gIGdldEFsbCgpIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLiNtdXRhdGlvbnMpO1xuICB9XG4gIGZpbmQoZmlsdGVycykge1xuICAgIGNvbnN0IGRlZmF1bHRlZEZpbHRlcnMgPSB7IGV4YWN0OiB0cnVlLCAuLi5maWx0ZXJzIH07XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWxsKCkuZmluZChcbiAgICAgIChtdXRhdGlvbikgPT4gbWF0Y2hNdXRhdGlvbihkZWZhdWx0ZWRGaWx0ZXJzLCBtdXRhdGlvbilcbiAgICApO1xuICB9XG4gIGZpbmRBbGwoZmlsdGVycyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWxsKCkuZmlsdGVyKChtdXRhdGlvbikgPT4gbWF0Y2hNdXRhdGlvbihmaWx0ZXJzLCBtdXRhdGlvbikpO1xuICB9XG4gIG5vdGlmeShldmVudCkge1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5saXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IHtcbiAgICAgICAgbGlzdGVuZXIoZXZlbnQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgcmVzdW1lUGF1c2VkTXV0YXRpb25zKCkge1xuICAgIGNvbnN0IHBhdXNlZE11dGF0aW9ucyA9IHRoaXMuZ2V0QWxsKCkuZmlsdGVyKCh4KSA9PiB4LnN0YXRlLmlzUGF1c2VkKTtcbiAgICByZXR1cm4gbm90aWZ5TWFuYWdlci5iYXRjaChcbiAgICAgICgpID0+IFByb21pc2UuYWxsKFxuICAgICAgICBwYXVzZWRNdXRhdGlvbnMubWFwKChtdXRhdGlvbikgPT4gbXV0YXRpb24uY29udGludWUoKS5jYXRjaChub29wKSlcbiAgICAgIClcbiAgICApO1xuICB9XG59O1xuZnVuY3Rpb24gc2NvcGVGb3IobXV0YXRpb24pIHtcbiAgcmV0dXJuIG11dGF0aW9uLm9wdGlvbnMuc2NvcGU/LmlkO1xufVxuZXhwb3J0IHtcbiAgTXV0YXRpb25DYWNoZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW11dGF0aW9uQ2FjaGUuanMubWFwIiwiLy8gc3JjL2luZmluaXRlUXVlcnlCZWhhdmlvci50c1xuaW1wb3J0IHsgYWRkVG9FbmQsIGFkZFRvU3RhcnQsIGVuc3VyZVF1ZXJ5Rm4gfSBmcm9tIFwiLi91dGlscy5qc1wiO1xuZnVuY3Rpb24gaW5maW5pdGVRdWVyeUJlaGF2aW9yKHBhZ2VzKSB7XG4gIHJldHVybiB7XG4gICAgb25GZXRjaDogKGNvbnRleHQsIHF1ZXJ5KSA9PiB7XG4gICAgICBjb25zdCBvcHRpb25zID0gY29udGV4dC5vcHRpb25zO1xuICAgICAgY29uc3QgZGlyZWN0aW9uID0gY29udGV4dC5mZXRjaE9wdGlvbnM/Lm1ldGE/LmZldGNoTW9yZT8uZGlyZWN0aW9uO1xuICAgICAgY29uc3Qgb2xkUGFnZXMgPSBjb250ZXh0LnN0YXRlLmRhdGE/LnBhZ2VzIHx8IFtdO1xuICAgICAgY29uc3Qgb2xkUGFnZVBhcmFtcyA9IGNvbnRleHQuc3RhdGUuZGF0YT8ucGFnZVBhcmFtcyB8fCBbXTtcbiAgICAgIGxldCByZXN1bHQgPSB7IHBhZ2VzOiBbXSwgcGFnZVBhcmFtczogW10gfTtcbiAgICAgIGxldCBjdXJyZW50UGFnZSA9IDA7XG4gICAgICBjb25zdCBmZXRjaEZuID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGFkZFNpZ25hbFByb3BlcnR5ID0gKG9iamVjdCkgPT4ge1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIFwic2lnbmFsXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGNvbnRleHQuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICBjYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LnNpZ25hbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcXVlcnlGbiA9IGVuc3VyZVF1ZXJ5Rm4oY29udGV4dC5vcHRpb25zLCBjb250ZXh0LmZldGNoT3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGZldGNoUGFnZSA9IGFzeW5jIChkYXRhLCBwYXJhbSwgcHJldmlvdXMpID0+IHtcbiAgICAgICAgICBpZiAoY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHBhcmFtID09IG51bGwgJiYgZGF0YS5wYWdlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHF1ZXJ5Rm5Db250ZXh0ID0ge1xuICAgICAgICAgICAgcXVlcnlLZXk6IGNvbnRleHQucXVlcnlLZXksXG4gICAgICAgICAgICBwYWdlUGFyYW06IHBhcmFtLFxuICAgICAgICAgICAgZGlyZWN0aW9uOiBwcmV2aW91cyA/IFwiYmFja3dhcmRcIiA6IFwiZm9yd2FyZFwiLFxuICAgICAgICAgICAgbWV0YTogY29udGV4dC5vcHRpb25zLm1ldGFcbiAgICAgICAgICB9O1xuICAgICAgICAgIGFkZFNpZ25hbFByb3BlcnR5KHF1ZXJ5Rm5Db250ZXh0KTtcbiAgICAgICAgICBjb25zdCBwYWdlID0gYXdhaXQgcXVlcnlGbihcbiAgICAgICAgICAgIHF1ZXJ5Rm5Db250ZXh0XG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB7IG1heFBhZ2VzIH0gPSBjb250ZXh0Lm9wdGlvbnM7XG4gICAgICAgICAgY29uc3QgYWRkVG8gPSBwcmV2aW91cyA/IGFkZFRvU3RhcnQgOiBhZGRUb0VuZDtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcGFnZXM6IGFkZFRvKGRhdGEucGFnZXMsIHBhZ2UsIG1heFBhZ2VzKSxcbiAgICAgICAgICAgIHBhZ2VQYXJhbXM6IGFkZFRvKGRhdGEucGFnZVBhcmFtcywgcGFyYW0sIG1heFBhZ2VzKVxuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICAgIGlmIChkaXJlY3Rpb24gJiYgb2xkUGFnZXMubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgcHJldmlvdXMgPSBkaXJlY3Rpb24gPT09IFwiYmFja3dhcmRcIjtcbiAgICAgICAgICBjb25zdCBwYWdlUGFyYW1GbiA9IHByZXZpb3VzID8gZ2V0UHJldmlvdXNQYWdlUGFyYW0gOiBnZXROZXh0UGFnZVBhcmFtO1xuICAgICAgICAgIGNvbnN0IG9sZERhdGEgPSB7XG4gICAgICAgICAgICBwYWdlczogb2xkUGFnZXMsXG4gICAgICAgICAgICBwYWdlUGFyYW1zOiBvbGRQYWdlUGFyYW1zXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBwYXJhbSA9IHBhZ2VQYXJhbUZuKG9wdGlvbnMsIG9sZERhdGEpO1xuICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGZldGNoUGFnZShvbGREYXRhLCBwYXJhbSwgcHJldmlvdXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHJlbWFpbmluZ1BhZ2VzID0gcGFnZXMgPz8gb2xkUGFnZXMubGVuZ3RoO1xuICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtID0gY3VycmVudFBhZ2UgPT09IDAgPyBvbGRQYWdlUGFyYW1zWzBdID8/IG9wdGlvbnMuaW5pdGlhbFBhZ2VQYXJhbSA6IGdldE5leHRQYWdlUGFyYW0ob3B0aW9ucywgcmVzdWx0KTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UGFnZSA+IDAgJiYgcGFyYW0gPT0gbnVsbCkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGZldGNoUGFnZShyZXN1bHQsIHBhcmFtKTtcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlKys7XG4gICAgICAgICAgfSB3aGlsZSAoY3VycmVudFBhZ2UgPCByZW1haW5pbmdQYWdlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH07XG4gICAgICBpZiAoY29udGV4dC5vcHRpb25zLnBlcnNpc3Rlcikge1xuICAgICAgICBjb250ZXh0LmZldGNoRm4gPSAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQub3B0aW9ucy5wZXJzaXN0ZXI/LihcbiAgICAgICAgICAgIGZldGNoRm4sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHF1ZXJ5S2V5OiBjb250ZXh0LnF1ZXJ5S2V5LFxuICAgICAgICAgICAgICBtZXRhOiBjb250ZXh0Lm9wdGlvbnMubWV0YSxcbiAgICAgICAgICAgICAgc2lnbmFsOiBjb250ZXh0LnNpZ25hbFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHF1ZXJ5XG4gICAgICAgICAgKTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQuZmV0Y2hGbiA9IGZldGNoRm47XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0TmV4dFBhZ2VQYXJhbShvcHRpb25zLCB7IHBhZ2VzLCBwYWdlUGFyYW1zIH0pIHtcbiAgY29uc3QgbGFzdEluZGV4ID0gcGFnZXMubGVuZ3RoIC0gMTtcbiAgcmV0dXJuIHBhZ2VzLmxlbmd0aCA+IDAgPyBvcHRpb25zLmdldE5leHRQYWdlUGFyYW0oXG4gICAgcGFnZXNbbGFzdEluZGV4XSxcbiAgICBwYWdlcyxcbiAgICBwYWdlUGFyYW1zW2xhc3RJbmRleF0sXG4gICAgcGFnZVBhcmFtc1xuICApIDogdm9pZCAwO1xufVxuZnVuY3Rpb24gZ2V0UHJldmlvdXNQYWdlUGFyYW0ob3B0aW9ucywgeyBwYWdlcywgcGFnZVBhcmFtcyB9KSB7XG4gIHJldHVybiBwYWdlcy5sZW5ndGggPiAwID8gb3B0aW9ucy5nZXRQcmV2aW91c1BhZ2VQYXJhbT8uKHBhZ2VzWzBdLCBwYWdlcywgcGFnZVBhcmFtc1swXSwgcGFnZVBhcmFtcykgOiB2b2lkIDA7XG59XG5mdW5jdGlvbiBoYXNOZXh0UGFnZShvcHRpb25zLCBkYXRhKSB7XG4gIGlmICghZGF0YSlcbiAgICByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBnZXROZXh0UGFnZVBhcmFtKG9wdGlvbnMsIGRhdGEpICE9IG51bGw7XG59XG5mdW5jdGlvbiBoYXNQcmV2aW91c1BhZ2Uob3B0aW9ucywgZGF0YSkge1xuICBpZiAoIWRhdGEgfHwgIW9wdGlvbnMuZ2V0UHJldmlvdXNQYWdlUGFyYW0pXG4gICAgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gZ2V0UHJldmlvdXNQYWdlUGFyYW0ob3B0aW9ucywgZGF0YSkgIT0gbnVsbDtcbn1cbmV4cG9ydCB7XG4gIGhhc05leHRQYWdlLFxuICBoYXNQcmV2aW91c1BhZ2UsXG4gIGluZmluaXRlUXVlcnlCZWhhdmlvclxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZmluaXRlUXVlcnlCZWhhdmlvci5qcy5tYXAiLCIvLyBzcmMvcXVlcnlDbGllbnQudHNcbmltcG9ydCB7XG4gIGZ1bmN0aW9uYWxVcGRhdGUsXG4gIGhhc2hLZXksXG4gIGhhc2hRdWVyeUtleUJ5T3B0aW9ucyxcbiAgbm9vcCxcbiAgcGFydGlhbE1hdGNoS2V5LFxuICByZXNvbHZlU3RhbGVUaW1lLFxuICBza2lwVG9rZW5cbn0gZnJvbSBcIi4vdXRpbHMuanNcIjtcbmltcG9ydCB7IFF1ZXJ5Q2FjaGUgfSBmcm9tIFwiLi9xdWVyeUNhY2hlLmpzXCI7XG5pbXBvcnQgeyBNdXRhdGlvbkNhY2hlIH0gZnJvbSBcIi4vbXV0YXRpb25DYWNoZS5qc1wiO1xuaW1wb3J0IHsgZm9jdXNNYW5hZ2VyIH0gZnJvbSBcIi4vZm9jdXNNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBvbmxpbmVNYW5hZ2VyIH0gZnJvbSBcIi4vb25saW5lTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gXCIuL25vdGlmeU1hbmFnZXIuanNcIjtcbmltcG9ydCB7IGluZmluaXRlUXVlcnlCZWhhdmlvciB9IGZyb20gXCIuL2luZmluaXRlUXVlcnlCZWhhdmlvci5qc1wiO1xudmFyIFF1ZXJ5Q2xpZW50ID0gY2xhc3Mge1xuICAjcXVlcnlDYWNoZTtcbiAgI211dGF0aW9uQ2FjaGU7XG4gICNkZWZhdWx0T3B0aW9ucztcbiAgI3F1ZXJ5RGVmYXVsdHM7XG4gICNtdXRhdGlvbkRlZmF1bHRzO1xuICAjbW91bnRDb3VudDtcbiAgI3Vuc3Vic2NyaWJlRm9jdXM7XG4gICN1bnN1YnNjcmliZU9ubGluZTtcbiAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICB0aGlzLiNxdWVyeUNhY2hlID0gY29uZmlnLnF1ZXJ5Q2FjaGUgfHwgbmV3IFF1ZXJ5Q2FjaGUoKTtcbiAgICB0aGlzLiNtdXRhdGlvbkNhY2hlID0gY29uZmlnLm11dGF0aW9uQ2FjaGUgfHwgbmV3IE11dGF0aW9uQ2FjaGUoKTtcbiAgICB0aGlzLiNkZWZhdWx0T3B0aW9ucyA9IGNvbmZpZy5kZWZhdWx0T3B0aW9ucyB8fCB7fTtcbiAgICB0aGlzLiNxdWVyeURlZmF1bHRzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICB0aGlzLiNtdXRhdGlvbkRlZmF1bHRzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICB0aGlzLiNtb3VudENvdW50ID0gMDtcbiAgfVxuICBtb3VudCgpIHtcbiAgICB0aGlzLiNtb3VudENvdW50Kys7XG4gICAgaWYgKHRoaXMuI21vdW50Q291bnQgIT09IDEpXG4gICAgICByZXR1cm47XG4gICAgdGhpcy4jdW5zdWJzY3JpYmVGb2N1cyA9IGZvY3VzTWFuYWdlci5zdWJzY3JpYmUoYXN5bmMgKGZvY3VzZWQpID0+IHtcbiAgICAgIGlmIChmb2N1c2VkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVzdW1lUGF1c2VkTXV0YXRpb25zKCk7XG4gICAgICAgIHRoaXMuI3F1ZXJ5Q2FjaGUub25Gb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuI3Vuc3Vic2NyaWJlT25saW5lID0gb25saW5lTWFuYWdlci5zdWJzY3JpYmUoYXN5bmMgKG9ubGluZSkgPT4ge1xuICAgICAgaWYgKG9ubGluZSkge1xuICAgICAgICBhd2FpdCB0aGlzLnJlc3VtZVBhdXNlZE11dGF0aW9ucygpO1xuICAgICAgICB0aGlzLiNxdWVyeUNhY2hlLm9uT25saW5lKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgdW5tb3VudCgpIHtcbiAgICB0aGlzLiNtb3VudENvdW50LS07XG4gICAgaWYgKHRoaXMuI21vdW50Q291bnQgIT09IDApXG4gICAgICByZXR1cm47XG4gICAgdGhpcy4jdW5zdWJzY3JpYmVGb2N1cz8uKCk7XG4gICAgdGhpcy4jdW5zdWJzY3JpYmVGb2N1cyA9IHZvaWQgMDtcbiAgICB0aGlzLiN1bnN1YnNjcmliZU9ubGluZT8uKCk7XG4gICAgdGhpcy4jdW5zdWJzY3JpYmVPbmxpbmUgPSB2b2lkIDA7XG4gIH1cbiAgaXNGZXRjaGluZyhmaWx0ZXJzKSB7XG4gICAgcmV0dXJuIHRoaXMuI3F1ZXJ5Q2FjaGUuZmluZEFsbCh7IC4uLmZpbHRlcnMsIGZldGNoU3RhdHVzOiBcImZldGNoaW5nXCIgfSkubGVuZ3RoO1xuICB9XG4gIGlzTXV0YXRpbmcoZmlsdGVycykge1xuICAgIHJldHVybiB0aGlzLiNtdXRhdGlvbkNhY2hlLmZpbmRBbGwoeyAuLi5maWx0ZXJzLCBzdGF0dXM6IFwicGVuZGluZ1wiIH0pLmxlbmd0aDtcbiAgfVxuICBnZXRRdWVyeURhdGEocXVlcnlLZXkpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5kZWZhdWx0UXVlcnlPcHRpb25zKHsgcXVlcnlLZXkgfSk7XG4gICAgcmV0dXJuIHRoaXMuI3F1ZXJ5Q2FjaGUuZ2V0KG9wdGlvbnMucXVlcnlIYXNoKT8uc3RhdGUuZGF0YTtcbiAgfVxuICBlbnN1cmVRdWVyeURhdGEob3B0aW9ucykge1xuICAgIGNvbnN0IGRlZmF1bHRlZE9wdGlvbnMgPSB0aGlzLmRlZmF1bHRRdWVyeU9wdGlvbnMob3B0aW9ucyk7XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLiNxdWVyeUNhY2hlLmJ1aWxkKHRoaXMsIGRlZmF1bHRlZE9wdGlvbnMpO1xuICAgIGNvbnN0IGNhY2hlZERhdGEgPSBxdWVyeS5zdGF0ZS5kYXRhO1xuICAgIGlmIChjYWNoZWREYXRhID09PSB2b2lkIDApIHtcbiAgICAgIHJldHVybiB0aGlzLmZldGNoUXVlcnkob3B0aW9ucyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnJldmFsaWRhdGVJZlN0YWxlICYmIHF1ZXJ5LmlzU3RhbGVCeVRpbWUocmVzb2x2ZVN0YWxlVGltZShkZWZhdWx0ZWRPcHRpb25zLnN0YWxlVGltZSwgcXVlcnkpKSkge1xuICAgICAgdm9pZCB0aGlzLnByZWZldGNoUXVlcnkoZGVmYXVsdGVkT3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY2FjaGVkRGF0YSk7XG4gIH1cbiAgZ2V0UXVlcmllc0RhdGEoZmlsdGVycykge1xuICAgIHJldHVybiB0aGlzLiNxdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykubWFwKCh7IHF1ZXJ5S2V5LCBzdGF0ZSB9KSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gc3RhdGUuZGF0YTtcbiAgICAgIHJldHVybiBbcXVlcnlLZXksIGRhdGFdO1xuICAgIH0pO1xuICB9XG4gIHNldFF1ZXJ5RGF0YShxdWVyeUtleSwgdXBkYXRlciwgb3B0aW9ucykge1xuICAgIGNvbnN0IGRlZmF1bHRlZE9wdGlvbnMgPSB0aGlzLmRlZmF1bHRRdWVyeU9wdGlvbnMoeyBxdWVyeUtleSB9KTtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuI3F1ZXJ5Q2FjaGUuZ2V0KFxuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5xdWVyeUhhc2hcbiAgICApO1xuICAgIGNvbnN0IHByZXZEYXRhID0gcXVlcnk/LnN0YXRlLmRhdGE7XG4gICAgY29uc3QgZGF0YSA9IGZ1bmN0aW9uYWxVcGRhdGUodXBkYXRlciwgcHJldkRhdGEpO1xuICAgIGlmIChkYXRhID09PSB2b2lkIDApIHtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLiNxdWVyeUNhY2hlLmJ1aWxkKHRoaXMsIGRlZmF1bHRlZE9wdGlvbnMpLnNldERhdGEoZGF0YSwgeyAuLi5vcHRpb25zLCBtYW51YWw6IHRydWUgfSk7XG4gIH1cbiAgc2V0UXVlcmllc0RhdGEoZmlsdGVycywgdXBkYXRlciwgb3B0aW9ucykge1xuICAgIHJldHVybiBub3RpZnlNYW5hZ2VyLmJhdGNoKFxuICAgICAgKCkgPT4gdGhpcy4jcXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLm1hcCgoeyBxdWVyeUtleSB9KSA9PiBbXG4gICAgICAgIHF1ZXJ5S2V5LFxuICAgICAgICB0aGlzLnNldFF1ZXJ5RGF0YShxdWVyeUtleSwgdXBkYXRlciwgb3B0aW9ucylcbiAgICAgIF0pXG4gICAgKTtcbiAgfVxuICBnZXRRdWVyeVN0YXRlKHF1ZXJ5S2V5KSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZGVmYXVsdFF1ZXJ5T3B0aW9ucyh7IHF1ZXJ5S2V5IH0pO1xuICAgIHJldHVybiB0aGlzLiNxdWVyeUNhY2hlLmdldChcbiAgICAgIG9wdGlvbnMucXVlcnlIYXNoXG4gICAgKT8uc3RhdGU7XG4gIH1cbiAgcmVtb3ZlUXVlcmllcyhmaWx0ZXJzKSB7XG4gICAgY29uc3QgcXVlcnlDYWNoZSA9IHRoaXMuI3F1ZXJ5Q2FjaGU7XG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaCgoKSA9PiB7XG4gICAgICBxdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykuZm9yRWFjaCgocXVlcnkpID0+IHtcbiAgICAgICAgcXVlcnlDYWNoZS5yZW1vdmUocXVlcnkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgcmVzZXRRdWVyaWVzKGZpbHRlcnMsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBxdWVyeUNhY2hlID0gdGhpcy4jcXVlcnlDYWNoZTtcbiAgICBjb25zdCByZWZldGNoRmlsdGVycyA9IHtcbiAgICAgIHR5cGU6IFwiYWN0aXZlXCIsXG4gICAgICAuLi5maWx0ZXJzXG4gICAgfTtcbiAgICByZXR1cm4gbm90aWZ5TWFuYWdlci5iYXRjaCgoKSA9PiB7XG4gICAgICBxdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykuZm9yRWFjaCgocXVlcnkpID0+IHtcbiAgICAgICAgcXVlcnkucmVzZXQoKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRoaXMucmVmZXRjaFF1ZXJpZXMocmVmZXRjaEZpbHRlcnMsIG9wdGlvbnMpO1xuICAgIH0pO1xuICB9XG4gIGNhbmNlbFF1ZXJpZXMoZmlsdGVycywgY2FuY2VsT3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgZGVmYXVsdGVkQ2FuY2VsT3B0aW9ucyA9IHsgcmV2ZXJ0OiB0cnVlLCAuLi5jYW5jZWxPcHRpb25zIH07XG4gICAgY29uc3QgcHJvbWlzZXMgPSBub3RpZnlNYW5hZ2VyLmJhdGNoKFxuICAgICAgKCkgPT4gdGhpcy4jcXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLm1hcCgocXVlcnkpID0+IHF1ZXJ5LmNhbmNlbChkZWZhdWx0ZWRDYW5jZWxPcHRpb25zKSlcbiAgICApO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfVxuICBpbnZhbGlkYXRlUXVlcmllcyhmaWx0ZXJzLCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gbm90aWZ5TWFuYWdlci5iYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLiNxdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykuZm9yRWFjaCgocXVlcnkpID0+IHtcbiAgICAgICAgcXVlcnkuaW52YWxpZGF0ZSgpO1xuICAgICAgfSk7XG4gICAgICBpZiAoZmlsdGVycz8ucmVmZXRjaFR5cGUgPT09IFwibm9uZVwiKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlZmV0Y2hGaWx0ZXJzID0ge1xuICAgICAgICAuLi5maWx0ZXJzLFxuICAgICAgICB0eXBlOiBmaWx0ZXJzPy5yZWZldGNoVHlwZSA/PyBmaWx0ZXJzPy50eXBlID8/IFwiYWN0aXZlXCJcbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcy5yZWZldGNoUXVlcmllcyhyZWZldGNoRmlsdGVycywgb3B0aW9ucyk7XG4gICAgfSk7XG4gIH1cbiAgcmVmZXRjaFF1ZXJpZXMoZmlsdGVycywgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgZmV0Y2hPcHRpb25zID0ge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGNhbmNlbFJlZmV0Y2g6IG9wdGlvbnMuY2FuY2VsUmVmZXRjaCA/PyB0cnVlXG4gICAgfTtcbiAgICBjb25zdCBwcm9taXNlcyA9IG5vdGlmeU1hbmFnZXIuYmF0Y2goXG4gICAgICAoKSA9PiB0aGlzLiNxdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykuZmlsdGVyKChxdWVyeSkgPT4gIXF1ZXJ5LmlzRGlzYWJsZWQoKSkubWFwKChxdWVyeSkgPT4ge1xuICAgICAgICBsZXQgcHJvbWlzZSA9IHF1ZXJ5LmZldGNoKHZvaWQgMCwgZmV0Y2hPcHRpb25zKTtcbiAgICAgICAgaWYgKCFmZXRjaE9wdGlvbnMudGhyb3dPbkVycm9yKSB7XG4gICAgICAgICAgcHJvbWlzZSA9IHByb21pc2UuY2F0Y2gobm9vcCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHF1ZXJ5LnN0YXRlLmZldGNoU3RhdHVzID09PSBcInBhdXNlZFwiID8gUHJvbWlzZS5yZXNvbHZlKCkgOiBwcm9taXNlO1xuICAgICAgfSlcbiAgICApO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihub29wKTtcbiAgfVxuICBmZXRjaFF1ZXJ5KG9wdGlvbnMpIHtcbiAgICBjb25zdCBkZWZhdWx0ZWRPcHRpb25zID0gdGhpcy5kZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpO1xuICAgIGlmIChkZWZhdWx0ZWRPcHRpb25zLnJldHJ5ID09PSB2b2lkIDApIHtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMucmV0cnkgPSBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLiNxdWVyeUNhY2hlLmJ1aWxkKHRoaXMsIGRlZmF1bHRlZE9wdGlvbnMpO1xuICAgIHJldHVybiBxdWVyeS5pc1N0YWxlQnlUaW1lKFxuICAgICAgcmVzb2x2ZVN0YWxlVGltZShkZWZhdWx0ZWRPcHRpb25zLnN0YWxlVGltZSwgcXVlcnkpXG4gICAgKSA/IHF1ZXJ5LmZldGNoKGRlZmF1bHRlZE9wdGlvbnMpIDogUHJvbWlzZS5yZXNvbHZlKHF1ZXJ5LnN0YXRlLmRhdGEpO1xuICB9XG4gIHByZWZldGNoUXVlcnkob3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmZldGNoUXVlcnkob3B0aW9ucykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfVxuICBmZXRjaEluZmluaXRlUXVlcnkob3B0aW9ucykge1xuICAgIG9wdGlvbnMuYmVoYXZpb3IgPSBpbmZpbml0ZVF1ZXJ5QmVoYXZpb3Iob3B0aW9ucy5wYWdlcyk7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2hRdWVyeShvcHRpb25zKTtcbiAgfVxuICBwcmVmZXRjaEluZmluaXRlUXVlcnkob3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmZldGNoSW5maW5pdGVRdWVyeShvcHRpb25zKS50aGVuKG5vb3ApLmNhdGNoKG5vb3ApO1xuICB9XG4gIGVuc3VyZUluZmluaXRlUXVlcnlEYXRhKG9wdGlvbnMpIHtcbiAgICBvcHRpb25zLmJlaGF2aW9yID0gaW5maW5pdGVRdWVyeUJlaGF2aW9yKG9wdGlvbnMucGFnZXMpO1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVF1ZXJ5RGF0YShvcHRpb25zKTtcbiAgfVxuICByZXN1bWVQYXVzZWRNdXRhdGlvbnMoKSB7XG4gICAgaWYgKG9ubGluZU1hbmFnZXIuaXNPbmxpbmUoKSkge1xuICAgICAgcmV0dXJuIHRoaXMuI211dGF0aW9uQ2FjaGUucmVzdW1lUGF1c2VkTXV0YXRpb25zKCk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuICBnZXRRdWVyeUNhY2hlKCkge1xuICAgIHJldHVybiB0aGlzLiNxdWVyeUNhY2hlO1xuICB9XG4gIGdldE11dGF0aW9uQ2FjaGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuI211dGF0aW9uQ2FjaGU7XG4gIH1cbiAgZ2V0RGVmYXVsdE9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2RlZmF1bHRPcHRpb25zO1xuICB9XG4gIHNldERlZmF1bHRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICB0aGlzLiNkZWZhdWx0T3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cbiAgc2V0UXVlcnlEZWZhdWx0cyhxdWVyeUtleSwgb3B0aW9ucykge1xuICAgIHRoaXMuI3F1ZXJ5RGVmYXVsdHMuc2V0KGhhc2hLZXkocXVlcnlLZXkpLCB7XG4gICAgICBxdWVyeUtleSxcbiAgICAgIGRlZmF1bHRPcHRpb25zOiBvcHRpb25zXG4gICAgfSk7XG4gIH1cbiAgZ2V0UXVlcnlEZWZhdWx0cyhxdWVyeUtleSkge1xuICAgIGNvbnN0IGRlZmF1bHRzID0gWy4uLnRoaXMuI3F1ZXJ5RGVmYXVsdHMudmFsdWVzKCldO1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGRlZmF1bHRzLmZvckVhY2goKHF1ZXJ5RGVmYXVsdCkgPT4ge1xuICAgICAgaWYgKHBhcnRpYWxNYXRjaEtleShxdWVyeUtleSwgcXVlcnlEZWZhdWx0LnF1ZXJ5S2V5KSkge1xuICAgICAgICBPYmplY3QuYXNzaWduKHJlc3VsdCwgcXVlcnlEZWZhdWx0LmRlZmF1bHRPcHRpb25zKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHNldE11dGF0aW9uRGVmYXVsdHMobXV0YXRpb25LZXksIG9wdGlvbnMpIHtcbiAgICB0aGlzLiNtdXRhdGlvbkRlZmF1bHRzLnNldChoYXNoS2V5KG11dGF0aW9uS2V5KSwge1xuICAgICAgbXV0YXRpb25LZXksXG4gICAgICBkZWZhdWx0T3B0aW9uczogb3B0aW9uc1xuICAgIH0pO1xuICB9XG4gIGdldE11dGF0aW9uRGVmYXVsdHMobXV0YXRpb25LZXkpIHtcbiAgICBjb25zdCBkZWZhdWx0cyA9IFsuLi50aGlzLiNtdXRhdGlvbkRlZmF1bHRzLnZhbHVlcygpXTtcbiAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgZGVmYXVsdHMuZm9yRWFjaCgocXVlcnlEZWZhdWx0KSA9PiB7XG4gICAgICBpZiAocGFydGlhbE1hdGNoS2V5KG11dGF0aW9uS2V5LCBxdWVyeURlZmF1bHQubXV0YXRpb25LZXkpKSB7XG4gICAgICAgIHJlc3VsdCA9IHsgLi4ucmVzdWx0LCAuLi5xdWVyeURlZmF1bHQuZGVmYXVsdE9wdGlvbnMgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGRlZmF1bHRRdWVyeU9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLl9kZWZhdWx0ZWQpIHtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cbiAgICBjb25zdCBkZWZhdWx0ZWRPcHRpb25zID0ge1xuICAgICAgLi4udGhpcy4jZGVmYXVsdE9wdGlvbnMucXVlcmllcyxcbiAgICAgIC4uLnRoaXMuZ2V0UXVlcnlEZWZhdWx0cyhvcHRpb25zLnF1ZXJ5S2V5KSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBfZGVmYXVsdGVkOiB0cnVlXG4gICAgfTtcbiAgICBpZiAoIWRlZmF1bHRlZE9wdGlvbnMucXVlcnlIYXNoKSB7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5SGFzaCA9IGhhc2hRdWVyeUtleUJ5T3B0aW9ucyhcbiAgICAgICAgZGVmYXVsdGVkT3B0aW9ucy5xdWVyeUtleSxcbiAgICAgICAgZGVmYXVsdGVkT3B0aW9uc1xuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGRlZmF1bHRlZE9wdGlvbnMucmVmZXRjaE9uUmVjb25uZWN0ID09PSB2b2lkIDApIHtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMucmVmZXRjaE9uUmVjb25uZWN0ID0gZGVmYXVsdGVkT3B0aW9ucy5uZXR3b3JrTW9kZSAhPT0gXCJhbHdheXNcIjtcbiAgICB9XG4gICAgaWYgKGRlZmF1bHRlZE9wdGlvbnMudGhyb3dPbkVycm9yID09PSB2b2lkIDApIHtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMudGhyb3dPbkVycm9yID0gISFkZWZhdWx0ZWRPcHRpb25zLnN1c3BlbnNlO1xuICAgIH1cbiAgICBpZiAoIWRlZmF1bHRlZE9wdGlvbnMubmV0d29ya01vZGUgJiYgZGVmYXVsdGVkT3B0aW9ucy5wZXJzaXN0ZXIpIHtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMubmV0d29ya01vZGUgPSBcIm9mZmxpbmVGaXJzdFwiO1xuICAgIH1cbiAgICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5xdWVyeUZuID09PSBza2lwVG9rZW4pIHtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMuZW5hYmxlZCA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZGVmYXVsdGVkT3B0aW9ucztcbiAgfVxuICBkZWZhdWx0TXV0YXRpb25PcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucz8uX2RlZmF1bHRlZCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLiNkZWZhdWx0T3B0aW9ucy5tdXRhdGlvbnMsXG4gICAgICAuLi5vcHRpb25zPy5tdXRhdGlvbktleSAmJiB0aGlzLmdldE11dGF0aW9uRGVmYXVsdHMob3B0aW9ucy5tdXRhdGlvbktleSksXG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgX2RlZmF1bHRlZDogdHJ1ZVxuICAgIH07XG4gIH1cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy4jcXVlcnlDYWNoZS5jbGVhcigpO1xuICAgIHRoaXMuI211dGF0aW9uQ2FjaGUuY2xlYXIoKTtcbiAgfVxufTtcbmV4cG9ydCB7XG4gIFF1ZXJ5Q2xpZW50XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cXVlcnlDbGllbnQuanMubWFwIiwiLy8gc3JjL3F1ZXJ5T2JzZXJ2ZXIudHNcbmltcG9ydCB7IGZvY3VzTWFuYWdlciB9IGZyb20gXCIuL2ZvY3VzTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gXCIuL25vdGlmeU1hbmFnZXIuanNcIjtcbmltcG9ydCB7IGZldGNoU3RhdGUgfSBmcm9tIFwiLi9xdWVyeS5qc1wiO1xuaW1wb3J0IHsgU3Vic2NyaWJhYmxlIH0gZnJvbSBcIi4vc3Vic2NyaWJhYmxlLmpzXCI7XG5pbXBvcnQgeyBwZW5kaW5nVGhlbmFibGUgfSBmcm9tIFwiLi90aGVuYWJsZS5qc1wiO1xuaW1wb3J0IHtcbiAgaXNTZXJ2ZXIsXG4gIGlzVmFsaWRUaW1lb3V0LFxuICBub29wLFxuICByZXBsYWNlRGF0YSxcbiAgcmVzb2x2ZUVuYWJsZWQsXG4gIHJlc29sdmVTdGFsZVRpbWUsXG4gIHNoYWxsb3dFcXVhbE9iamVjdHMsXG4gIHRpbWVVbnRpbFN0YWxlXG59IGZyb20gXCIuL3V0aWxzLmpzXCI7XG52YXIgUXVlcnlPYnNlcnZlciA9IGNsYXNzIGV4dGVuZHMgU3Vic2NyaWJhYmxlIHtcbiAgY29uc3RydWN0b3IoY2xpZW50LCBvcHRpb25zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuI2NsaWVudCA9IGNsaWVudDtcbiAgICB0aGlzLiNzZWxlY3RFcnJvciA9IG51bGw7XG4gICAgdGhpcy4jY3VycmVudFRoZW5hYmxlID0gcGVuZGluZ1RoZW5hYmxlKCk7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuZXhwZXJpbWVudGFsX3ByZWZldGNoSW5SZW5kZXIpIHtcbiAgICAgIHRoaXMuI2N1cnJlbnRUaGVuYWJsZS5yZWplY3QoXG4gICAgICAgIG5ldyBFcnJvcihcImV4cGVyaW1lbnRhbF9wcmVmZXRjaEluUmVuZGVyIGZlYXR1cmUgZmxhZyBpcyBub3QgZW5hYmxlZFwiKVxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5iaW5kTWV0aG9kcygpO1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgfVxuICAjY2xpZW50O1xuICAjY3VycmVudFF1ZXJ5ID0gdm9pZCAwO1xuICAjY3VycmVudFF1ZXJ5SW5pdGlhbFN0YXRlID0gdm9pZCAwO1xuICAjY3VycmVudFJlc3VsdCA9IHZvaWQgMDtcbiAgI2N1cnJlbnRSZXN1bHRTdGF0ZTtcbiAgI2N1cnJlbnRSZXN1bHRPcHRpb25zO1xuICAjY3VycmVudFRoZW5hYmxlO1xuICAjc2VsZWN0RXJyb3I7XG4gICNzZWxlY3RGbjtcbiAgI3NlbGVjdFJlc3VsdDtcbiAgLy8gVGhpcyBwcm9wZXJ0eSBrZWVwcyB0cmFjayBvZiB0aGUgbGFzdCBxdWVyeSB3aXRoIGRlZmluZWQgZGF0YS5cbiAgLy8gSXQgd2lsbCBiZSB1c2VkIHRvIHBhc3MgdGhlIHByZXZpb3VzIGRhdGEgYW5kIHF1ZXJ5IHRvIHRoZSBwbGFjZWhvbGRlciBmdW5jdGlvbiBiZXR3ZWVuIHJlbmRlcnMuXG4gICNsYXN0UXVlcnlXaXRoRGVmaW5lZERhdGE7XG4gICNzdGFsZVRpbWVvdXRJZDtcbiAgI3JlZmV0Y2hJbnRlcnZhbElkO1xuICAjY3VycmVudFJlZmV0Y2hJbnRlcnZhbDtcbiAgI3RyYWNrZWRQcm9wcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG4gIGJpbmRNZXRob2RzKCkge1xuICAgIHRoaXMucmVmZXRjaCA9IHRoaXMucmVmZXRjaC5iaW5kKHRoaXMpO1xuICB9XG4gIG9uU3Vic2NyaWJlKCkge1xuICAgIGlmICh0aGlzLmxpc3RlbmVycy5zaXplID09PSAxKSB7XG4gICAgICB0aGlzLiNjdXJyZW50UXVlcnkuYWRkT2JzZXJ2ZXIodGhpcyk7XG4gICAgICBpZiAoc2hvdWxkRmV0Y2hPbk1vdW50KHRoaXMuI2N1cnJlbnRRdWVyeSwgdGhpcy5vcHRpb25zKSkge1xuICAgICAgICB0aGlzLiNleGVjdXRlRmV0Y2goKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudXBkYXRlUmVzdWx0KCk7XG4gICAgICB9XG4gICAgICB0aGlzLiN1cGRhdGVUaW1lcnMoKTtcbiAgICB9XG4gIH1cbiAgb25VbnN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKCkpIHtcbiAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIH1cbiAgfVxuICBzaG91bGRGZXRjaE9uUmVjb25uZWN0KCkge1xuICAgIHJldHVybiBzaG91bGRGZXRjaE9uKFxuICAgICAgdGhpcy4jY3VycmVudFF1ZXJ5LFxuICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgdGhpcy5vcHRpb25zLnJlZmV0Y2hPblJlY29ubmVjdFxuICAgICk7XG4gIH1cbiAgc2hvdWxkRmV0Y2hPbldpbmRvd0ZvY3VzKCkge1xuICAgIHJldHVybiBzaG91bGRGZXRjaE9uKFxuICAgICAgdGhpcy4jY3VycmVudFF1ZXJ5LFxuICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgdGhpcy5vcHRpb25zLnJlZmV0Y2hPbldpbmRvd0ZvY3VzXG4gICAgKTtcbiAgfVxuICBkZXN0cm95KCkge1xuICAgIHRoaXMubGlzdGVuZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcbiAgICB0aGlzLiNjbGVhclN0YWxlVGltZW91dCgpO1xuICAgIHRoaXMuI2NsZWFyUmVmZXRjaEludGVydmFsKCk7XG4gICAgdGhpcy4jY3VycmVudFF1ZXJ5LnJlbW92ZU9ic2VydmVyKHRoaXMpO1xuICB9XG4gIHNldE9wdGlvbnMob3B0aW9ucywgbm90aWZ5T3B0aW9ucykge1xuICAgIGNvbnN0IHByZXZPcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIGNvbnN0IHByZXZRdWVyeSA9IHRoaXMuI2N1cnJlbnRRdWVyeTtcbiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLiNjbGllbnQuZGVmYXVsdFF1ZXJ5T3B0aW9ucyhvcHRpb25zKTtcbiAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZWQgIT09IHZvaWQgMCAmJiB0eXBlb2YgdGhpcy5vcHRpb25zLmVuYWJsZWQgIT09IFwiYm9vbGVhblwiICYmIHR5cGVvZiB0aGlzLm9wdGlvbnMuZW5hYmxlZCAhPT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiByZXNvbHZlRW5hYmxlZCh0aGlzLm9wdGlvbnMuZW5hYmxlZCwgdGhpcy4jY3VycmVudFF1ZXJ5KSAhPT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJFeHBlY3RlZCBlbmFibGVkIHRvIGJlIGEgYm9vbGVhbiBvciBhIGNhbGxiYWNrIHRoYXQgcmV0dXJucyBhIGJvb2xlYW5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy4jdXBkYXRlUXVlcnkoKTtcbiAgICB0aGlzLiNjdXJyZW50UXVlcnkuc2V0T3B0aW9ucyh0aGlzLm9wdGlvbnMpO1xuICAgIGlmIChwcmV2T3B0aW9ucy5fZGVmYXVsdGVkICYmICFzaGFsbG93RXF1YWxPYmplY3RzKHRoaXMub3B0aW9ucywgcHJldk9wdGlvbnMpKSB7XG4gICAgICB0aGlzLiNjbGllbnQuZ2V0UXVlcnlDYWNoZSgpLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6IFwib2JzZXJ2ZXJPcHRpb25zVXBkYXRlZFwiLFxuICAgICAgICBxdWVyeTogdGhpcy4jY3VycmVudFF1ZXJ5LFxuICAgICAgICBvYnNlcnZlcjogdGhpc1xuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IG1vdW50ZWQgPSB0aGlzLmhhc0xpc3RlbmVycygpO1xuICAgIGlmIChtb3VudGVkICYmIHNob3VsZEZldGNoT3B0aW9uYWxseShcbiAgICAgIHRoaXMuI2N1cnJlbnRRdWVyeSxcbiAgICAgIHByZXZRdWVyeSxcbiAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgIHByZXZPcHRpb25zXG4gICAgKSkge1xuICAgICAgdGhpcy4jZXhlY3V0ZUZldGNoKCk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlUmVzdWx0KG5vdGlmeU9wdGlvbnMpO1xuICAgIGlmIChtb3VudGVkICYmICh0aGlzLiNjdXJyZW50UXVlcnkgIT09IHByZXZRdWVyeSB8fCByZXNvbHZlRW5hYmxlZCh0aGlzLm9wdGlvbnMuZW5hYmxlZCwgdGhpcy4jY3VycmVudFF1ZXJ5KSAhPT0gcmVzb2x2ZUVuYWJsZWQocHJldk9wdGlvbnMuZW5hYmxlZCwgdGhpcy4jY3VycmVudFF1ZXJ5KSB8fCByZXNvbHZlU3RhbGVUaW1lKHRoaXMub3B0aW9ucy5zdGFsZVRpbWUsIHRoaXMuI2N1cnJlbnRRdWVyeSkgIT09IHJlc29sdmVTdGFsZVRpbWUocHJldk9wdGlvbnMuc3RhbGVUaW1lLCB0aGlzLiNjdXJyZW50UXVlcnkpKSkge1xuICAgICAgdGhpcy4jdXBkYXRlU3RhbGVUaW1lb3V0KCk7XG4gICAgfVxuICAgIGNvbnN0IG5leHRSZWZldGNoSW50ZXJ2YWwgPSB0aGlzLiNjb21wdXRlUmVmZXRjaEludGVydmFsKCk7XG4gICAgaWYgKG1vdW50ZWQgJiYgKHRoaXMuI2N1cnJlbnRRdWVyeSAhPT0gcHJldlF1ZXJ5IHx8IHJlc29sdmVFbmFibGVkKHRoaXMub3B0aW9ucy5lbmFibGVkLCB0aGlzLiNjdXJyZW50UXVlcnkpICE9PSByZXNvbHZlRW5hYmxlZChwcmV2T3B0aW9ucy5lbmFibGVkLCB0aGlzLiNjdXJyZW50UXVlcnkpIHx8IG5leHRSZWZldGNoSW50ZXJ2YWwgIT09IHRoaXMuI2N1cnJlbnRSZWZldGNoSW50ZXJ2YWwpKSB7XG4gICAgICB0aGlzLiN1cGRhdGVSZWZldGNoSW50ZXJ2YWwobmV4dFJlZmV0Y2hJbnRlcnZhbCk7XG4gICAgfVxuICB9XG4gIGdldE9wdGltaXN0aWNSZXN1bHQob3B0aW9ucykge1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy4jY2xpZW50LmdldFF1ZXJ5Q2FjaGUoKS5idWlsZCh0aGlzLiNjbGllbnQsIG9wdGlvbnMpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuY3JlYXRlUmVzdWx0KHF1ZXJ5LCBvcHRpb25zKTtcbiAgICBpZiAoc2hvdWxkQXNzaWduT2JzZXJ2ZXJDdXJyZW50UHJvcGVydGllcyh0aGlzLCByZXN1bHQpKSB7XG4gICAgICB0aGlzLiNjdXJyZW50UmVzdWx0ID0gcmVzdWx0O1xuICAgICAgdGhpcy4jY3VycmVudFJlc3VsdE9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICB0aGlzLiNjdXJyZW50UmVzdWx0U3RhdGUgPSB0aGlzLiNjdXJyZW50UXVlcnkuc3RhdGU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgZ2V0Q3VycmVudFJlc3VsdCgpIHtcbiAgICByZXR1cm4gdGhpcy4jY3VycmVudFJlc3VsdDtcbiAgfVxuICB0cmFja1Jlc3VsdChyZXN1bHQsIG9uUHJvcFRyYWNrZWQpIHtcbiAgICBjb25zdCB0cmFja2VkUmVzdWx0ID0ge307XG4gICAgT2JqZWN0LmtleXMocmVzdWx0KS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0cmFja2VkUmVzdWx0LCBrZXksIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy50cmFja1Byb3Aoa2V5KTtcbiAgICAgICAgICBvblByb3BUcmFja2VkPy4oa2V5KTtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0W2tleV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiB0cmFja2VkUmVzdWx0O1xuICB9XG4gIHRyYWNrUHJvcChrZXkpIHtcbiAgICB0aGlzLiN0cmFja2VkUHJvcHMuYWRkKGtleSk7XG4gIH1cbiAgZ2V0Q3VycmVudFF1ZXJ5KCkge1xuICAgIHJldHVybiB0aGlzLiNjdXJyZW50UXVlcnk7XG4gIH1cbiAgcmVmZXRjaCh7IC4uLm9wdGlvbnMgfSA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2goe1xuICAgICAgLi4ub3B0aW9uc1xuICAgIH0pO1xuICB9XG4gIGZldGNoT3B0aW1pc3RpYyhvcHRpb25zKSB7XG4gICAgY29uc3QgZGVmYXVsdGVkT3B0aW9ucyA9IHRoaXMuI2NsaWVudC5kZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpO1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy4jY2xpZW50LmdldFF1ZXJ5Q2FjaGUoKS5idWlsZCh0aGlzLiNjbGllbnQsIGRlZmF1bHRlZE9wdGlvbnMpO1xuICAgIHJldHVybiBxdWVyeS5mZXRjaCgpLnRoZW4oKCkgPT4gdGhpcy5jcmVhdGVSZXN1bHQocXVlcnksIGRlZmF1bHRlZE9wdGlvbnMpKTtcbiAgfVxuICBmZXRjaChmZXRjaE9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy4jZXhlY3V0ZUZldGNoKHtcbiAgICAgIC4uLmZldGNoT3B0aW9ucyxcbiAgICAgIGNhbmNlbFJlZmV0Y2g6IGZldGNoT3B0aW9ucy5jYW5jZWxSZWZldGNoID8/IHRydWVcbiAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlUmVzdWx0KCk7XG4gICAgICByZXR1cm4gdGhpcy4jY3VycmVudFJlc3VsdDtcbiAgICB9KTtcbiAgfVxuICAjZXhlY3V0ZUZldGNoKGZldGNoT3B0aW9ucykge1xuICAgIHRoaXMuI3VwZGF0ZVF1ZXJ5KCk7XG4gICAgbGV0IHByb21pc2UgPSB0aGlzLiNjdXJyZW50UXVlcnkuZmV0Y2goXG4gICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICBmZXRjaE9wdGlvbnNcbiAgICApO1xuICAgIGlmICghZmV0Y2hPcHRpb25zPy50aHJvd09uRXJyb3IpIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLmNhdGNoKG5vb3ApO1xuICAgIH1cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuICAjdXBkYXRlU3RhbGVUaW1lb3V0KCkge1xuICAgIHRoaXMuI2NsZWFyU3RhbGVUaW1lb3V0KCk7XG4gICAgY29uc3Qgc3RhbGVUaW1lID0gcmVzb2x2ZVN0YWxlVGltZShcbiAgICAgIHRoaXMub3B0aW9ucy5zdGFsZVRpbWUsXG4gICAgICB0aGlzLiNjdXJyZW50UXVlcnlcbiAgICApO1xuICAgIGlmIChpc1NlcnZlciB8fCB0aGlzLiNjdXJyZW50UmVzdWx0LmlzU3RhbGUgfHwgIWlzVmFsaWRUaW1lb3V0KHN0YWxlVGltZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGltZSA9IHRpbWVVbnRpbFN0YWxlKHRoaXMuI2N1cnJlbnRSZXN1bHQuZGF0YVVwZGF0ZWRBdCwgc3RhbGVUaW1lKTtcbiAgICBjb25zdCB0aW1lb3V0ID0gdGltZSArIDE7XG4gICAgdGhpcy4jc3RhbGVUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy4jY3VycmVudFJlc3VsdC5pc1N0YWxlKSB7XG4gICAgICAgIHRoaXMudXBkYXRlUmVzdWx0KCk7XG4gICAgICB9XG4gICAgfSwgdGltZW91dCk7XG4gIH1cbiAgI2NvbXB1dGVSZWZldGNoSW50ZXJ2YWwoKSB7XG4gICAgcmV0dXJuICh0eXBlb2YgdGhpcy5vcHRpb25zLnJlZmV0Y2hJbnRlcnZhbCA9PT0gXCJmdW5jdGlvblwiID8gdGhpcy5vcHRpb25zLnJlZmV0Y2hJbnRlcnZhbCh0aGlzLiNjdXJyZW50UXVlcnkpIDogdGhpcy5vcHRpb25zLnJlZmV0Y2hJbnRlcnZhbCkgPz8gZmFsc2U7XG4gIH1cbiAgI3VwZGF0ZVJlZmV0Y2hJbnRlcnZhbChuZXh0SW50ZXJ2YWwpIHtcbiAgICB0aGlzLiNjbGVhclJlZmV0Y2hJbnRlcnZhbCgpO1xuICAgIHRoaXMuI2N1cnJlbnRSZWZldGNoSW50ZXJ2YWwgPSBuZXh0SW50ZXJ2YWw7XG4gICAgaWYgKGlzU2VydmVyIHx8IHJlc29sdmVFbmFibGVkKHRoaXMub3B0aW9ucy5lbmFibGVkLCB0aGlzLiNjdXJyZW50UXVlcnkpID09PSBmYWxzZSB8fCAhaXNWYWxpZFRpbWVvdXQodGhpcy4jY3VycmVudFJlZmV0Y2hJbnRlcnZhbCkgfHwgdGhpcy4jY3VycmVudFJlZmV0Y2hJbnRlcnZhbCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLiNyZWZldGNoSW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVmZXRjaEludGVydmFsSW5CYWNrZ3JvdW5kIHx8IGZvY3VzTWFuYWdlci5pc0ZvY3VzZWQoKSkge1xuICAgICAgICB0aGlzLiNleGVjdXRlRmV0Y2goKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLiNjdXJyZW50UmVmZXRjaEludGVydmFsKTtcbiAgfVxuICAjdXBkYXRlVGltZXJzKCkge1xuICAgIHRoaXMuI3VwZGF0ZVN0YWxlVGltZW91dCgpO1xuICAgIHRoaXMuI3VwZGF0ZVJlZmV0Y2hJbnRlcnZhbCh0aGlzLiNjb21wdXRlUmVmZXRjaEludGVydmFsKCkpO1xuICB9XG4gICNjbGVhclN0YWxlVGltZW91dCgpIHtcbiAgICBpZiAodGhpcy4jc3RhbGVUaW1lb3V0SWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLiNzdGFsZVRpbWVvdXRJZCk7XG4gICAgICB0aGlzLiNzdGFsZVRpbWVvdXRJZCA9IHZvaWQgMDtcbiAgICB9XG4gIH1cbiAgI2NsZWFyUmVmZXRjaEludGVydmFsKCkge1xuICAgIGlmICh0aGlzLiNyZWZldGNoSW50ZXJ2YWxJZCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLiNyZWZldGNoSW50ZXJ2YWxJZCk7XG4gICAgICB0aGlzLiNyZWZldGNoSW50ZXJ2YWxJZCA9IHZvaWQgMDtcbiAgICB9XG4gIH1cbiAgY3JlYXRlUmVzdWx0KHF1ZXJ5LCBvcHRpb25zKSB7XG4gICAgY29uc3QgcHJldlF1ZXJ5ID0gdGhpcy4jY3VycmVudFF1ZXJ5O1xuICAgIGNvbnN0IHByZXZPcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIGNvbnN0IHByZXZSZXN1bHQgPSB0aGlzLiNjdXJyZW50UmVzdWx0O1xuICAgIGNvbnN0IHByZXZSZXN1bHRTdGF0ZSA9IHRoaXMuI2N1cnJlbnRSZXN1bHRTdGF0ZTtcbiAgICBjb25zdCBwcmV2UmVzdWx0T3B0aW9ucyA9IHRoaXMuI2N1cnJlbnRSZXN1bHRPcHRpb25zO1xuICAgIGNvbnN0IHF1ZXJ5Q2hhbmdlID0gcXVlcnkgIT09IHByZXZRdWVyeTtcbiAgICBjb25zdCBxdWVyeUluaXRpYWxTdGF0ZSA9IHF1ZXJ5Q2hhbmdlID8gcXVlcnkuc3RhdGUgOiB0aGlzLiNjdXJyZW50UXVlcnlJbml0aWFsU3RhdGU7XG4gICAgY29uc3QgeyBzdGF0ZSB9ID0gcXVlcnk7XG4gICAgbGV0IG5ld1N0YXRlID0geyAuLi5zdGF0ZSB9O1xuICAgIGxldCBpc1BsYWNlaG9sZGVyRGF0YSA9IGZhbHNlO1xuICAgIGxldCBkYXRhO1xuICAgIGlmIChvcHRpb25zLl9vcHRpbWlzdGljUmVzdWx0cykge1xuICAgICAgY29uc3QgbW91bnRlZCA9IHRoaXMuaGFzTGlzdGVuZXJzKCk7XG4gICAgICBjb25zdCBmZXRjaE9uTW91bnQgPSAhbW91bnRlZCAmJiBzaG91bGRGZXRjaE9uTW91bnQocXVlcnksIG9wdGlvbnMpO1xuICAgICAgY29uc3QgZmV0Y2hPcHRpb25hbGx5ID0gbW91bnRlZCAmJiBzaG91bGRGZXRjaE9wdGlvbmFsbHkocXVlcnksIHByZXZRdWVyeSwgb3B0aW9ucywgcHJldk9wdGlvbnMpO1xuICAgICAgaWYgKGZldGNoT25Nb3VudCB8fCBmZXRjaE9wdGlvbmFsbHkpIHtcbiAgICAgICAgbmV3U3RhdGUgPSB7XG4gICAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgICAgLi4uZmV0Y2hTdGF0ZShzdGF0ZS5kYXRhLCBxdWVyeS5vcHRpb25zKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMuX29wdGltaXN0aWNSZXN1bHRzID09PSBcImlzUmVzdG9yaW5nXCIpIHtcbiAgICAgICAgbmV3U3RhdGUuZmV0Y2hTdGF0dXMgPSBcImlkbGVcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IHsgZXJyb3IsIGVycm9yVXBkYXRlZEF0LCBzdGF0dXMgfSA9IG5ld1N0YXRlO1xuICAgIGlmIChvcHRpb25zLnNlbGVjdCAmJiBuZXdTdGF0ZS5kYXRhICE9PSB2b2lkIDApIHtcbiAgICAgIGlmIChwcmV2UmVzdWx0ICYmIG5ld1N0YXRlLmRhdGEgPT09IHByZXZSZXN1bHRTdGF0ZT8uZGF0YSAmJiBvcHRpb25zLnNlbGVjdCA9PT0gdGhpcy4jc2VsZWN0Rm4pIHtcbiAgICAgICAgZGF0YSA9IHRoaXMuI3NlbGVjdFJlc3VsdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy4jc2VsZWN0Rm4gPSBvcHRpb25zLnNlbGVjdDtcbiAgICAgICAgICBkYXRhID0gb3B0aW9ucy5zZWxlY3QobmV3U3RhdGUuZGF0YSk7XG4gICAgICAgICAgZGF0YSA9IHJlcGxhY2VEYXRhKHByZXZSZXN1bHQ/LmRhdGEsIGRhdGEsIG9wdGlvbnMpO1xuICAgICAgICAgIHRoaXMuI3NlbGVjdFJlc3VsdCA9IGRhdGE7XG4gICAgICAgICAgdGhpcy4jc2VsZWN0RXJyb3IgPSBudWxsO1xuICAgICAgICB9IGNhdGNoIChzZWxlY3RFcnJvcikge1xuICAgICAgICAgIHRoaXMuI3NlbGVjdEVycm9yID0gc2VsZWN0RXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YSA9IG5ld1N0YXRlLmRhdGE7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnBsYWNlaG9sZGVyRGF0YSAhPT0gdm9pZCAwICYmIGRhdGEgPT09IHZvaWQgMCAmJiBzdGF0dXMgPT09IFwicGVuZGluZ1wiKSB7XG4gICAgICBsZXQgcGxhY2Vob2xkZXJEYXRhO1xuICAgICAgaWYgKHByZXZSZXN1bHQ/LmlzUGxhY2Vob2xkZXJEYXRhICYmIG9wdGlvbnMucGxhY2Vob2xkZXJEYXRhID09PSBwcmV2UmVzdWx0T3B0aW9ucz8ucGxhY2Vob2xkZXJEYXRhKSB7XG4gICAgICAgIHBsYWNlaG9sZGVyRGF0YSA9IHByZXZSZXN1bHQuZGF0YTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBsYWNlaG9sZGVyRGF0YSA9IHR5cGVvZiBvcHRpb25zLnBsYWNlaG9sZGVyRGF0YSA9PT0gXCJmdW5jdGlvblwiID8gb3B0aW9ucy5wbGFjZWhvbGRlckRhdGEoXG4gICAgICAgICAgdGhpcy4jbGFzdFF1ZXJ5V2l0aERlZmluZWREYXRhPy5zdGF0ZS5kYXRhLFxuICAgICAgICAgIHRoaXMuI2xhc3RRdWVyeVdpdGhEZWZpbmVkRGF0YVxuICAgICAgICApIDogb3B0aW9ucy5wbGFjZWhvbGRlckRhdGE7XG4gICAgICAgIGlmIChvcHRpb25zLnNlbGVjdCAmJiBwbGFjZWhvbGRlckRhdGEgIT09IHZvaWQgMCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwbGFjZWhvbGRlckRhdGEgPSBvcHRpb25zLnNlbGVjdChwbGFjZWhvbGRlckRhdGEpO1xuICAgICAgICAgICAgdGhpcy4jc2VsZWN0RXJyb3IgPSBudWxsO1xuICAgICAgICAgIH0gY2F0Y2ggKHNlbGVjdEVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLiNzZWxlY3RFcnJvciA9IHNlbGVjdEVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHBsYWNlaG9sZGVyRGF0YSAhPT0gdm9pZCAwKSB7XG4gICAgICAgIHN0YXR1cyA9IFwic3VjY2Vzc1wiO1xuICAgICAgICBkYXRhID0gcmVwbGFjZURhdGEoXG4gICAgICAgICAgcHJldlJlc3VsdD8uZGF0YSxcbiAgICAgICAgICBwbGFjZWhvbGRlckRhdGEsXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICApO1xuICAgICAgICBpc1BsYWNlaG9sZGVyRGF0YSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLiNzZWxlY3RFcnJvcikge1xuICAgICAgZXJyb3IgPSB0aGlzLiNzZWxlY3RFcnJvcjtcbiAgICAgIGRhdGEgPSB0aGlzLiNzZWxlY3RSZXN1bHQ7XG4gICAgICBlcnJvclVwZGF0ZWRBdCA9IERhdGUubm93KCk7XG4gICAgICBzdGF0dXMgPSBcImVycm9yXCI7XG4gICAgfVxuICAgIGNvbnN0IGlzRmV0Y2hpbmcgPSBuZXdTdGF0ZS5mZXRjaFN0YXR1cyA9PT0gXCJmZXRjaGluZ1wiO1xuICAgIGNvbnN0IGlzUGVuZGluZyA9IHN0YXR1cyA9PT0gXCJwZW5kaW5nXCI7XG4gICAgY29uc3QgaXNFcnJvciA9IHN0YXR1cyA9PT0gXCJlcnJvclwiO1xuICAgIGNvbnN0IGlzTG9hZGluZyA9IGlzUGVuZGluZyAmJiBpc0ZldGNoaW5nO1xuICAgIGNvbnN0IGhhc0RhdGEgPSBkYXRhICE9PSB2b2lkIDA7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzLFxuICAgICAgZmV0Y2hTdGF0dXM6IG5ld1N0YXRlLmZldGNoU3RhdHVzLFxuICAgICAgaXNQZW5kaW5nLFxuICAgICAgaXNTdWNjZXNzOiBzdGF0dXMgPT09IFwic3VjY2Vzc1wiLFxuICAgICAgaXNFcnJvcixcbiAgICAgIGlzSW5pdGlhbExvYWRpbmc6IGlzTG9hZGluZyxcbiAgICAgIGlzTG9hZGluZyxcbiAgICAgIGRhdGEsXG4gICAgICBkYXRhVXBkYXRlZEF0OiBuZXdTdGF0ZS5kYXRhVXBkYXRlZEF0LFxuICAgICAgZXJyb3IsXG4gICAgICBlcnJvclVwZGF0ZWRBdCxcbiAgICAgIGZhaWx1cmVDb3VudDogbmV3U3RhdGUuZmV0Y2hGYWlsdXJlQ291bnQsXG4gICAgICBmYWlsdXJlUmVhc29uOiBuZXdTdGF0ZS5mZXRjaEZhaWx1cmVSZWFzb24sXG4gICAgICBlcnJvclVwZGF0ZUNvdW50OiBuZXdTdGF0ZS5lcnJvclVwZGF0ZUNvdW50LFxuICAgICAgaXNGZXRjaGVkOiBuZXdTdGF0ZS5kYXRhVXBkYXRlQ291bnQgPiAwIHx8IG5ld1N0YXRlLmVycm9yVXBkYXRlQ291bnQgPiAwLFxuICAgICAgaXNGZXRjaGVkQWZ0ZXJNb3VudDogbmV3U3RhdGUuZGF0YVVwZGF0ZUNvdW50ID4gcXVlcnlJbml0aWFsU3RhdGUuZGF0YVVwZGF0ZUNvdW50IHx8IG5ld1N0YXRlLmVycm9yVXBkYXRlQ291bnQgPiBxdWVyeUluaXRpYWxTdGF0ZS5lcnJvclVwZGF0ZUNvdW50LFxuICAgICAgaXNGZXRjaGluZyxcbiAgICAgIGlzUmVmZXRjaGluZzogaXNGZXRjaGluZyAmJiAhaXNQZW5kaW5nLFxuICAgICAgaXNMb2FkaW5nRXJyb3I6IGlzRXJyb3IgJiYgIWhhc0RhdGEsXG4gICAgICBpc1BhdXNlZDogbmV3U3RhdGUuZmV0Y2hTdGF0dXMgPT09IFwicGF1c2VkXCIsXG4gICAgICBpc1BsYWNlaG9sZGVyRGF0YSxcbiAgICAgIGlzUmVmZXRjaEVycm9yOiBpc0Vycm9yICYmIGhhc0RhdGEsXG4gICAgICBpc1N0YWxlOiBpc1N0YWxlKHF1ZXJ5LCBvcHRpb25zKSxcbiAgICAgIHJlZmV0Y2g6IHRoaXMucmVmZXRjaCxcbiAgICAgIHByb21pc2U6IHRoaXMuI2N1cnJlbnRUaGVuYWJsZVxuICAgIH07XG4gICAgY29uc3QgbmV4dFJlc3VsdCA9IHJlc3VsdDtcbiAgICBpZiAodGhpcy5vcHRpb25zLmV4cGVyaW1lbnRhbF9wcmVmZXRjaEluUmVuZGVyKSB7XG4gICAgICBjb25zdCBmaW5hbGl6ZVRoZW5hYmxlSWZQb3NzaWJsZSA9ICh0aGVuYWJsZSkgPT4ge1xuICAgICAgICBpZiAobmV4dFJlc3VsdC5zdGF0dXMgPT09IFwiZXJyb3JcIikge1xuICAgICAgICAgIHRoZW5hYmxlLnJlamVjdChuZXh0UmVzdWx0LmVycm9yKTtcbiAgICAgICAgfSBlbHNlIGlmIChuZXh0UmVzdWx0LmRhdGEgIT09IHZvaWQgMCkge1xuICAgICAgICAgIHRoZW5hYmxlLnJlc29sdmUobmV4dFJlc3VsdC5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlY3JlYXRlVGhlbmFibGUgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBlbmRpbmcgPSB0aGlzLiNjdXJyZW50VGhlbmFibGUgPSBuZXh0UmVzdWx0LnByb21pc2UgPSBwZW5kaW5nVGhlbmFibGUoKTtcbiAgICAgICAgZmluYWxpemVUaGVuYWJsZUlmUG9zc2libGUocGVuZGluZyk7XG4gICAgICB9O1xuICAgICAgY29uc3QgcHJldlRoZW5hYmxlID0gdGhpcy4jY3VycmVudFRoZW5hYmxlO1xuICAgICAgc3dpdGNoIChwcmV2VGhlbmFibGUuc3RhdHVzKSB7XG4gICAgICAgIGNhc2UgXCJwZW5kaW5nXCI6XG4gICAgICAgICAgaWYgKHF1ZXJ5LnF1ZXJ5SGFzaCA9PT0gcHJldlF1ZXJ5LnF1ZXJ5SGFzaCkge1xuICAgICAgICAgICAgZmluYWxpemVUaGVuYWJsZUlmUG9zc2libGUocHJldlRoZW5hYmxlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJmdWxmaWxsZWRcIjpcbiAgICAgICAgICBpZiAobmV4dFJlc3VsdC5zdGF0dXMgPT09IFwiZXJyb3JcIiB8fCBuZXh0UmVzdWx0LmRhdGEgIT09IHByZXZUaGVuYWJsZS52YWx1ZSkge1xuICAgICAgICAgICAgcmVjcmVhdGVUaGVuYWJsZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInJlamVjdGVkXCI6XG4gICAgICAgICAgaWYgKG5leHRSZXN1bHQuc3RhdHVzICE9PSBcImVycm9yXCIgfHwgbmV4dFJlc3VsdC5lcnJvciAhPT0gcHJldlRoZW5hYmxlLnJlYXNvbikge1xuICAgICAgICAgICAgcmVjcmVhdGVUaGVuYWJsZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5leHRSZXN1bHQ7XG4gIH1cbiAgdXBkYXRlUmVzdWx0KG5vdGlmeU9wdGlvbnMpIHtcbiAgICBjb25zdCBwcmV2UmVzdWx0ID0gdGhpcy4jY3VycmVudFJlc3VsdDtcbiAgICBjb25zdCBuZXh0UmVzdWx0ID0gdGhpcy5jcmVhdGVSZXN1bHQodGhpcy4jY3VycmVudFF1ZXJ5LCB0aGlzLm9wdGlvbnMpO1xuICAgIHRoaXMuI2N1cnJlbnRSZXN1bHRTdGF0ZSA9IHRoaXMuI2N1cnJlbnRRdWVyeS5zdGF0ZTtcbiAgICB0aGlzLiNjdXJyZW50UmVzdWx0T3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICBpZiAodGhpcy4jY3VycmVudFJlc3VsdFN0YXRlLmRhdGEgIT09IHZvaWQgMCkge1xuICAgICAgdGhpcy4jbGFzdFF1ZXJ5V2l0aERlZmluZWREYXRhID0gdGhpcy4jY3VycmVudFF1ZXJ5O1xuICAgIH1cbiAgICBpZiAoc2hhbGxvd0VxdWFsT2JqZWN0cyhuZXh0UmVzdWx0LCBwcmV2UmVzdWx0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLiNjdXJyZW50UmVzdWx0ID0gbmV4dFJlc3VsdDtcbiAgICBjb25zdCBkZWZhdWx0Tm90aWZ5T3B0aW9ucyA9IHt9O1xuICAgIGNvbnN0IHNob3VsZE5vdGlmeUxpc3RlbmVycyA9ICgpID0+IHtcbiAgICAgIGlmICghcHJldlJlc3VsdCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgbm90aWZ5T25DaGFuZ2VQcm9wcyB9ID0gdGhpcy5vcHRpb25zO1xuICAgICAgY29uc3Qgbm90aWZ5T25DaGFuZ2VQcm9wc1ZhbHVlID0gdHlwZW9mIG5vdGlmeU9uQ2hhbmdlUHJvcHMgPT09IFwiZnVuY3Rpb25cIiA/IG5vdGlmeU9uQ2hhbmdlUHJvcHMoKSA6IG5vdGlmeU9uQ2hhbmdlUHJvcHM7XG4gICAgICBpZiAobm90aWZ5T25DaGFuZ2VQcm9wc1ZhbHVlID09PSBcImFsbFwiIHx8ICFub3RpZnlPbkNoYW5nZVByb3BzVmFsdWUgJiYgIXRoaXMuI3RyYWNrZWRQcm9wcy5zaXplKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgaW5jbHVkZWRQcm9wcyA9IG5ldyBTZXQoXG4gICAgICAgIG5vdGlmeU9uQ2hhbmdlUHJvcHNWYWx1ZSA/PyB0aGlzLiN0cmFja2VkUHJvcHNcbiAgICAgICk7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLnRocm93T25FcnJvcikge1xuICAgICAgICBpbmNsdWRlZFByb3BzLmFkZChcImVycm9yXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuI2N1cnJlbnRSZXN1bHQpLnNvbWUoKGtleSkgPT4ge1xuICAgICAgICBjb25zdCB0eXBlZEtleSA9IGtleTtcbiAgICAgICAgY29uc3QgY2hhbmdlZCA9IHRoaXMuI2N1cnJlbnRSZXN1bHRbdHlwZWRLZXldICE9PSBwcmV2UmVzdWx0W3R5cGVkS2V5XTtcbiAgICAgICAgcmV0dXJuIGNoYW5nZWQgJiYgaW5jbHVkZWRQcm9wcy5oYXModHlwZWRLZXkpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBpZiAobm90aWZ5T3B0aW9ucz8ubGlzdGVuZXJzICE9PSBmYWxzZSAmJiBzaG91bGROb3RpZnlMaXN0ZW5lcnMoKSkge1xuICAgICAgZGVmYXVsdE5vdGlmeU9wdGlvbnMubGlzdGVuZXJzID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy4jbm90aWZ5KHsgLi4uZGVmYXVsdE5vdGlmeU9wdGlvbnMsIC4uLm5vdGlmeU9wdGlvbnMgfSk7XG4gIH1cbiAgI3VwZGF0ZVF1ZXJ5KCkge1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy4jY2xpZW50LmdldFF1ZXJ5Q2FjaGUoKS5idWlsZCh0aGlzLiNjbGllbnQsIHRoaXMub3B0aW9ucyk7XG4gICAgaWYgKHF1ZXJ5ID09PSB0aGlzLiNjdXJyZW50UXVlcnkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcHJldlF1ZXJ5ID0gdGhpcy4jY3VycmVudFF1ZXJ5O1xuICAgIHRoaXMuI2N1cnJlbnRRdWVyeSA9IHF1ZXJ5O1xuICAgIHRoaXMuI2N1cnJlbnRRdWVyeUluaXRpYWxTdGF0ZSA9IHF1ZXJ5LnN0YXRlO1xuICAgIGlmICh0aGlzLmhhc0xpc3RlbmVycygpKSB7XG4gICAgICBwcmV2UXVlcnk/LnJlbW92ZU9ic2VydmVyKHRoaXMpO1xuICAgICAgcXVlcnkuYWRkT2JzZXJ2ZXIodGhpcyk7XG4gICAgfVxuICB9XG4gIG9uUXVlcnlVcGRhdGUoKSB7XG4gICAgdGhpcy51cGRhdGVSZXN1bHQoKTtcbiAgICBpZiAodGhpcy5oYXNMaXN0ZW5lcnMoKSkge1xuICAgICAgdGhpcy4jdXBkYXRlVGltZXJzKCk7XG4gICAgfVxuICB9XG4gICNub3RpZnkobm90aWZ5T3B0aW9ucykge1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goKCkgPT4ge1xuICAgICAgaWYgKG5vdGlmeU9wdGlvbnMubGlzdGVuZXJzKSB7XG4gICAgICAgIHRoaXMubGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiB7XG4gICAgICAgICAgbGlzdGVuZXIodGhpcy4jY3VycmVudFJlc3VsdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy4jY2xpZW50LmdldFF1ZXJ5Q2FjaGUoKS5ub3RpZnkoe1xuICAgICAgICBxdWVyeTogdGhpcy4jY3VycmVudFF1ZXJ5LFxuICAgICAgICB0eXBlOiBcIm9ic2VydmVyUmVzdWx0c1VwZGF0ZWRcIlxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn07XG5mdW5jdGlvbiBzaG91bGRMb2FkT25Nb3VudChxdWVyeSwgb3B0aW9ucykge1xuICByZXR1cm4gcmVzb2x2ZUVuYWJsZWQob3B0aW9ucy5lbmFibGVkLCBxdWVyeSkgIT09IGZhbHNlICYmIHF1ZXJ5LnN0YXRlLmRhdGEgPT09IHZvaWQgMCAmJiAhKHF1ZXJ5LnN0YXRlLnN0YXR1cyA9PT0gXCJlcnJvclwiICYmIG9wdGlvbnMucmV0cnlPbk1vdW50ID09PSBmYWxzZSk7XG59XG5mdW5jdGlvbiBzaG91bGRGZXRjaE9uTW91bnQocXVlcnksIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHNob3VsZExvYWRPbk1vdW50KHF1ZXJ5LCBvcHRpb25zKSB8fCBxdWVyeS5zdGF0ZS5kYXRhICE9PSB2b2lkIDAgJiYgc2hvdWxkRmV0Y2hPbihxdWVyeSwgb3B0aW9ucywgb3B0aW9ucy5yZWZldGNoT25Nb3VudCk7XG59XG5mdW5jdGlvbiBzaG91bGRGZXRjaE9uKHF1ZXJ5LCBvcHRpb25zLCBmaWVsZCkge1xuICBpZiAocmVzb2x2ZUVuYWJsZWQob3B0aW9ucy5lbmFibGVkLCBxdWVyeSkgIT09IGZhbHNlKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0eXBlb2YgZmllbGQgPT09IFwiZnVuY3Rpb25cIiA/IGZpZWxkKHF1ZXJ5KSA6IGZpZWxkO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gXCJhbHdheXNcIiB8fCB2YWx1ZSAhPT0gZmFsc2UgJiYgaXNTdGFsZShxdWVyeSwgb3B0aW9ucyk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gc2hvdWxkRmV0Y2hPcHRpb25hbGx5KHF1ZXJ5LCBwcmV2UXVlcnksIG9wdGlvbnMsIHByZXZPcHRpb25zKSB7XG4gIHJldHVybiAocXVlcnkgIT09IHByZXZRdWVyeSB8fCByZXNvbHZlRW5hYmxlZChwcmV2T3B0aW9ucy5lbmFibGVkLCBxdWVyeSkgPT09IGZhbHNlKSAmJiAoIW9wdGlvbnMuc3VzcGVuc2UgfHwgcXVlcnkuc3RhdGUuc3RhdHVzICE9PSBcImVycm9yXCIpICYmIGlzU3RhbGUocXVlcnksIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gaXNTdGFsZShxdWVyeSwgb3B0aW9ucykge1xuICByZXR1cm4gcmVzb2x2ZUVuYWJsZWQob3B0aW9ucy5lbmFibGVkLCBxdWVyeSkgIT09IGZhbHNlICYmIHF1ZXJ5LmlzU3RhbGVCeVRpbWUocmVzb2x2ZVN0YWxlVGltZShvcHRpb25zLnN0YWxlVGltZSwgcXVlcnkpKTtcbn1cbmZ1bmN0aW9uIHNob3VsZEFzc2lnbk9ic2VydmVyQ3VycmVudFByb3BlcnRpZXMob2JzZXJ2ZXIsIG9wdGltaXN0aWNSZXN1bHQpIHtcbiAgaWYgKCFzaGFsbG93RXF1YWxPYmplY3RzKG9ic2VydmVyLmdldEN1cnJlbnRSZXN1bHQoKSwgb3B0aW1pc3RpY1Jlc3VsdCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnQge1xuICBRdWVyeU9ic2VydmVyXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cXVlcnlPYnNlcnZlci5qcy5tYXAiLCIvLyBzcmMvbXV0YXRpb25PYnNlcnZlci50c1xuaW1wb3J0IHsgZ2V0RGVmYXVsdFN0YXRlIH0gZnJvbSBcIi4vbXV0YXRpb24uanNcIjtcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tIFwiLi9ub3RpZnlNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tIFwiLi9zdWJzY3JpYmFibGUuanNcIjtcbmltcG9ydCB7IGhhc2hLZXksIHNoYWxsb3dFcXVhbE9iamVjdHMgfSBmcm9tIFwiLi91dGlscy5qc1wiO1xudmFyIE11dGF0aW9uT2JzZXJ2ZXIgPSBjbGFzcyBleHRlbmRzIFN1YnNjcmliYWJsZSB7XG4gICNjbGllbnQ7XG4gICNjdXJyZW50UmVzdWx0ID0gdm9pZCAwO1xuICAjY3VycmVudE11dGF0aW9uO1xuICAjbXV0YXRlT3B0aW9ucztcbiAgY29uc3RydWN0b3IoY2xpZW50LCBvcHRpb25zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLiNjbGllbnQgPSBjbGllbnQ7XG4gICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICAgIHRoaXMuYmluZE1ldGhvZHMoKTtcbiAgICB0aGlzLiN1cGRhdGVSZXN1bHQoKTtcbiAgfVxuICBiaW5kTWV0aG9kcygpIHtcbiAgICB0aGlzLm11dGF0ZSA9IHRoaXMubXV0YXRlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5yZXNldCA9IHRoaXMucmVzZXQuYmluZCh0aGlzKTtcbiAgfVxuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBjb25zdCBwcmV2T3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLiNjbGllbnQuZGVmYXVsdE11dGF0aW9uT3B0aW9ucyhvcHRpb25zKTtcbiAgICBpZiAoIXNoYWxsb3dFcXVhbE9iamVjdHModGhpcy5vcHRpb25zLCBwcmV2T3B0aW9ucykpIHtcbiAgICAgIHRoaXMuI2NsaWVudC5nZXRNdXRhdGlvbkNhY2hlKCkubm90aWZ5KHtcbiAgICAgICAgdHlwZTogXCJvYnNlcnZlck9wdGlvbnNVcGRhdGVkXCIsXG4gICAgICAgIG11dGF0aW9uOiB0aGlzLiNjdXJyZW50TXV0YXRpb24sXG4gICAgICAgIG9ic2VydmVyOiB0aGlzXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHByZXZPcHRpb25zPy5tdXRhdGlvbktleSAmJiB0aGlzLm9wdGlvbnMubXV0YXRpb25LZXkgJiYgaGFzaEtleShwcmV2T3B0aW9ucy5tdXRhdGlvbktleSkgIT09IGhhc2hLZXkodGhpcy5vcHRpb25zLm11dGF0aW9uS2V5KSkge1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy4jY3VycmVudE11dGF0aW9uPy5zdGF0ZS5zdGF0dXMgPT09IFwicGVuZGluZ1wiKSB7XG4gICAgICB0aGlzLiNjdXJyZW50TXV0YXRpb24uc2V0T3B0aW9ucyh0aGlzLm9wdGlvbnMpO1xuICAgIH1cbiAgfVxuICBvblVuc3Vic2NyaWJlKCkge1xuICAgIGlmICghdGhpcy5oYXNMaXN0ZW5lcnMoKSkge1xuICAgICAgdGhpcy4jY3VycmVudE11dGF0aW9uPy5yZW1vdmVPYnNlcnZlcih0aGlzKTtcbiAgICB9XG4gIH1cbiAgb25NdXRhdGlvblVwZGF0ZShhY3Rpb24pIHtcbiAgICB0aGlzLiN1cGRhdGVSZXN1bHQoKTtcbiAgICB0aGlzLiNub3RpZnkoYWN0aW9uKTtcbiAgfVxuICBnZXRDdXJyZW50UmVzdWx0KCkge1xuICAgIHJldHVybiB0aGlzLiNjdXJyZW50UmVzdWx0O1xuICB9XG4gIHJlc2V0KCkge1xuICAgIHRoaXMuI2N1cnJlbnRNdXRhdGlvbj8ucmVtb3ZlT2JzZXJ2ZXIodGhpcyk7XG4gICAgdGhpcy4jY3VycmVudE11dGF0aW9uID0gdm9pZCAwO1xuICAgIHRoaXMuI3VwZGF0ZVJlc3VsdCgpO1xuICAgIHRoaXMuI25vdGlmeSgpO1xuICB9XG4gIG11dGF0ZSh2YXJpYWJsZXMsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiNtdXRhdGVPcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLiNjdXJyZW50TXV0YXRpb24/LnJlbW92ZU9ic2VydmVyKHRoaXMpO1xuICAgIHRoaXMuI2N1cnJlbnRNdXRhdGlvbiA9IHRoaXMuI2NsaWVudC5nZXRNdXRhdGlvbkNhY2hlKCkuYnVpbGQodGhpcy4jY2xpZW50LCB0aGlzLm9wdGlvbnMpO1xuICAgIHRoaXMuI2N1cnJlbnRNdXRhdGlvbi5hZGRPYnNlcnZlcih0aGlzKTtcbiAgICByZXR1cm4gdGhpcy4jY3VycmVudE11dGF0aW9uLmV4ZWN1dGUodmFyaWFibGVzKTtcbiAgfVxuICAjdXBkYXRlUmVzdWx0KCkge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy4jY3VycmVudE11dGF0aW9uPy5zdGF0ZSA/PyBnZXREZWZhdWx0U3RhdGUoKTtcbiAgICB0aGlzLiNjdXJyZW50UmVzdWx0ID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBpc1BlbmRpbmc6IHN0YXRlLnN0YXR1cyA9PT0gXCJwZW5kaW5nXCIsXG4gICAgICBpc1N1Y2Nlc3M6IHN0YXRlLnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIsXG4gICAgICBpc0Vycm9yOiBzdGF0ZS5zdGF0dXMgPT09IFwiZXJyb3JcIixcbiAgICAgIGlzSWRsZTogc3RhdGUuc3RhdHVzID09PSBcImlkbGVcIixcbiAgICAgIG11dGF0ZTogdGhpcy5tdXRhdGUsXG4gICAgICByZXNldDogdGhpcy5yZXNldFxuICAgIH07XG4gIH1cbiAgI25vdGlmeShhY3Rpb24pIHtcbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLiNtdXRhdGVPcHRpb25zICYmIHRoaXMuaGFzTGlzdGVuZXJzKCkpIHtcbiAgICAgICAgY29uc3QgdmFyaWFibGVzID0gdGhpcy4jY3VycmVudFJlc3VsdC52YXJpYWJsZXM7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLiNjdXJyZW50UmVzdWx0LmNvbnRleHQ7XG4gICAgICAgIGlmIChhY3Rpb24/LnR5cGUgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgdGhpcy4jbXV0YXRlT3B0aW9ucy5vblN1Y2Nlc3M/LihhY3Rpb24uZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KTtcbiAgICAgICAgICB0aGlzLiNtdXRhdGVPcHRpb25zLm9uU2V0dGxlZD8uKGFjdGlvbi5kYXRhLCBudWxsLCB2YXJpYWJsZXMsIGNvbnRleHQpO1xuICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbj8udHlwZSA9PT0gXCJlcnJvclwiKSB7XG4gICAgICAgICAgdGhpcy4jbXV0YXRlT3B0aW9ucy5vbkVycm9yPy4oYWN0aW9uLmVycm9yLCB2YXJpYWJsZXMsIGNvbnRleHQpO1xuICAgICAgICAgIHRoaXMuI211dGF0ZU9wdGlvbnMub25TZXR0bGVkPy4oXG4gICAgICAgICAgICB2b2lkIDAsXG4gICAgICAgICAgICBhY3Rpb24uZXJyb3IsXG4gICAgICAgICAgICB2YXJpYWJsZXMsXG4gICAgICAgICAgICBjb250ZXh0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5saXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IHtcbiAgICAgICAgbGlzdGVuZXIodGhpcy4jY3VycmVudFJlc3VsdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufTtcbmV4cG9ydCB7XG4gIE11dGF0aW9uT2JzZXJ2ZXJcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tdXRhdGlvbk9ic2VydmVyLmpzLm1hcCIsIlwidXNlIGNsaWVudFwiO1xuXG4vLyBzcmMvUXVlcnlDbGllbnRQcm92aWRlci50c3hcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsganN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG52YXIgUXVlcnlDbGllbnRDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dChcbiAgdm9pZCAwXG4pO1xudmFyIHVzZVF1ZXJ5Q2xpZW50ID0gKHF1ZXJ5Q2xpZW50KSA9PiB7XG4gIGNvbnN0IGNsaWVudCA9IFJlYWN0LnVzZUNvbnRleHQoUXVlcnlDbGllbnRDb250ZXh0KTtcbiAgaWYgKHF1ZXJ5Q2xpZW50KSB7XG4gICAgcmV0dXJuIHF1ZXJ5Q2xpZW50O1xuICB9XG4gIGlmICghY2xpZW50KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUXVlcnlDbGllbnQgc2V0LCB1c2UgUXVlcnlDbGllbnRQcm92aWRlciB0byBzZXQgb25lXCIpO1xuICB9XG4gIHJldHVybiBjbGllbnQ7XG59O1xudmFyIFF1ZXJ5Q2xpZW50UHJvdmlkZXIgPSAoe1xuICBjbGllbnQsXG4gIGNoaWxkcmVuXG59KSA9PiB7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY2xpZW50Lm1vdW50KCk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNsaWVudC51bm1vdW50KCk7XG4gICAgfTtcbiAgfSwgW2NsaWVudF0pO1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChRdWVyeUNsaWVudENvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IGNsaWVudCwgY2hpbGRyZW4gfSk7XG59O1xuZXhwb3J0IHtcbiAgUXVlcnlDbGllbnRDb250ZXh0LFxuICBRdWVyeUNsaWVudFByb3ZpZGVyLFxuICB1c2VRdWVyeUNsaWVudFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVF1ZXJ5Q2xpZW50UHJvdmlkZXIuanMubWFwIiwiXCJ1c2UgY2xpZW50XCI7XG5cbi8vIHNyYy9pc1Jlc3RvcmluZy50c1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG52YXIgSXNSZXN0b3JpbmdDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dChmYWxzZSk7XG52YXIgdXNlSXNSZXN0b3JpbmcgPSAoKSA9PiBSZWFjdC51c2VDb250ZXh0KElzUmVzdG9yaW5nQ29udGV4dCk7XG52YXIgSXNSZXN0b3JpbmdQcm92aWRlciA9IElzUmVzdG9yaW5nQ29udGV4dC5Qcm92aWRlcjtcbmV4cG9ydCB7XG4gIElzUmVzdG9yaW5nUHJvdmlkZXIsXG4gIHVzZUlzUmVzdG9yaW5nXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNSZXN0b3JpbmcuanMubWFwIiwiXCJ1c2UgY2xpZW50XCI7XG5cbi8vIHNyYy9RdWVyeUVycm9yUmVzZXRCb3VuZGFyeS50c3hcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsganN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBjcmVhdGVWYWx1ZSgpIHtcbiAgbGV0IGlzUmVzZXQgPSBmYWxzZTtcbiAgcmV0dXJuIHtcbiAgICBjbGVhclJlc2V0OiAoKSA9PiB7XG4gICAgICBpc1Jlc2V0ID0gZmFsc2U7XG4gICAgfSxcbiAgICByZXNldDogKCkgPT4ge1xuICAgICAgaXNSZXNldCA9IHRydWU7XG4gICAgfSxcbiAgICBpc1Jlc2V0OiAoKSA9PiB7XG4gICAgICByZXR1cm4gaXNSZXNldDtcbiAgICB9XG4gIH07XG59XG52YXIgUXVlcnlFcnJvclJlc2V0Qm91bmRhcnlDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dChjcmVhdGVWYWx1ZSgpKTtcbnZhciB1c2VRdWVyeUVycm9yUmVzZXRCb3VuZGFyeSA9ICgpID0+IFJlYWN0LnVzZUNvbnRleHQoUXVlcnlFcnJvclJlc2V0Qm91bmRhcnlDb250ZXh0KTtcbnZhciBRdWVyeUVycm9yUmVzZXRCb3VuZGFyeSA9ICh7XG4gIGNoaWxkcmVuXG59KSA9PiB7XG4gIGNvbnN0IFt2YWx1ZV0gPSBSZWFjdC51c2VTdGF0ZSgoKSA9PiBjcmVhdGVWYWx1ZSgpKTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goUXVlcnlFcnJvclJlc2V0Qm91bmRhcnlDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlLCBjaGlsZHJlbjogdHlwZW9mIGNoaWxkcmVuID09PSBcImZ1bmN0aW9uXCIgPyBjaGlsZHJlbih2YWx1ZSkgOiBjaGlsZHJlbiB9KTtcbn07XG5leHBvcnQge1xuICBRdWVyeUVycm9yUmVzZXRCb3VuZGFyeSxcbiAgdXNlUXVlcnlFcnJvclJlc2V0Qm91bmRhcnlcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1RdWVyeUVycm9yUmVzZXRCb3VuZGFyeS5qcy5tYXAiLCIvLyBzcmMvdXRpbHMudHNcbmZ1bmN0aW9uIHNob3VsZFRocm93RXJyb3IodGhyb3dFcnJvciwgcGFyYW1zKSB7XG4gIGlmICh0eXBlb2YgdGhyb3dFcnJvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIHRocm93RXJyb3IoLi4ucGFyYW1zKTtcbiAgfVxuICByZXR1cm4gISF0aHJvd0Vycm9yO1xufVxuZnVuY3Rpb24gbm9vcCgpIHtcbn1cbmV4cG9ydCB7XG4gIG5vb3AsXG4gIHNob3VsZFRocm93RXJyb3Jcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlscy5qcy5tYXAiLCJcInVzZSBjbGllbnRcIjtcblxuLy8gc3JjL2Vycm9yQm91bmRhcnlVdGlscy50c1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBzaG91bGRUaHJvd0Vycm9yIH0gZnJvbSBcIi4vdXRpbHMuanNcIjtcbnZhciBlbnN1cmVQcmV2ZW50RXJyb3JCb3VuZGFyeVJldHJ5ID0gKG9wdGlvbnMsIGVycm9yUmVzZXRCb3VuZGFyeSkgPT4ge1xuICBpZiAob3B0aW9ucy5zdXNwZW5zZSB8fCBvcHRpb25zLnRocm93T25FcnJvciB8fCBvcHRpb25zLmV4cGVyaW1lbnRhbF9wcmVmZXRjaEluUmVuZGVyKSB7XG4gICAgaWYgKCFlcnJvclJlc2V0Qm91bmRhcnkuaXNSZXNldCgpKSB7XG4gICAgICBvcHRpb25zLnJldHJ5T25Nb3VudCA9IGZhbHNlO1xuICAgIH1cbiAgfVxufTtcbnZhciB1c2VDbGVhclJlc2V0RXJyb3JCb3VuZGFyeSA9IChlcnJvclJlc2V0Qm91bmRhcnkpID0+IHtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBlcnJvclJlc2V0Qm91bmRhcnkuY2xlYXJSZXNldCgpO1xuICB9LCBbZXJyb3JSZXNldEJvdW5kYXJ5XSk7XG59O1xudmFyIGdldEhhc0Vycm9yID0gKHtcbiAgcmVzdWx0LFxuICBlcnJvclJlc2V0Qm91bmRhcnksXG4gIHRocm93T25FcnJvcixcbiAgcXVlcnlcbn0pID0+IHtcbiAgcmV0dXJuIHJlc3VsdC5pc0Vycm9yICYmICFlcnJvclJlc2V0Qm91bmRhcnkuaXNSZXNldCgpICYmICFyZXN1bHQuaXNGZXRjaGluZyAmJiBxdWVyeSAmJiBzaG91bGRUaHJvd0Vycm9yKHRocm93T25FcnJvciwgW3Jlc3VsdC5lcnJvciwgcXVlcnldKTtcbn07XG5leHBvcnQge1xuICBlbnN1cmVQcmV2ZW50RXJyb3JCb3VuZGFyeVJldHJ5LFxuICBnZXRIYXNFcnJvcixcbiAgdXNlQ2xlYXJSZXNldEVycm9yQm91bmRhcnlcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lcnJvckJvdW5kYXJ5VXRpbHMuanMubWFwIiwiLy8gc3JjL3N1c3BlbnNlLnRzXG52YXIgZGVmYXVsdFRocm93T25FcnJvciA9IChfZXJyb3IsIHF1ZXJ5KSA9PiBxdWVyeS5zdGF0ZS5kYXRhID09PSB2b2lkIDA7XG52YXIgZW5zdXJlU3VzcGVuc2VUaW1lcnMgPSAoZGVmYXVsdGVkT3B0aW9ucykgPT4ge1xuICBjb25zdCBvcmlnaW5hbFN0YWxlVGltZSA9IGRlZmF1bHRlZE9wdGlvbnMuc3RhbGVUaW1lO1xuICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5zdXNwZW5zZSkge1xuICAgIGRlZmF1bHRlZE9wdGlvbnMuc3RhbGVUaW1lID0gdHlwZW9mIG9yaWdpbmFsU3RhbGVUaW1lID09PSBcImZ1bmN0aW9uXCIgPyAoLi4uYXJncykgPT4gTWF0aC5tYXgob3JpZ2luYWxTdGFsZVRpbWUoLi4uYXJncyksIDFlMykgOiBNYXRoLm1heChvcmlnaW5hbFN0YWxlVGltZSA/PyAxZTMsIDFlMyk7XG4gICAgaWYgKHR5cGVvZiBkZWZhdWx0ZWRPcHRpb25zLmdjVGltZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5nY1RpbWUgPSBNYXRoLm1heChkZWZhdWx0ZWRPcHRpb25zLmdjVGltZSwgMWUzKTtcbiAgICB9XG4gIH1cbn07XG52YXIgd2lsbEZldGNoID0gKHJlc3VsdCwgaXNSZXN0b3JpbmcpID0+IHJlc3VsdC5pc0xvYWRpbmcgJiYgcmVzdWx0LmlzRmV0Y2hpbmcgJiYgIWlzUmVzdG9yaW5nO1xudmFyIHNob3VsZFN1c3BlbmQgPSAoZGVmYXVsdGVkT3B0aW9ucywgcmVzdWx0KSA9PiBkZWZhdWx0ZWRPcHRpb25zPy5zdXNwZW5zZSAmJiByZXN1bHQuaXNQZW5kaW5nO1xudmFyIGZldGNoT3B0aW1pc3RpYyA9IChkZWZhdWx0ZWRPcHRpb25zLCBvYnNlcnZlciwgZXJyb3JSZXNldEJvdW5kYXJ5KSA9PiBvYnNlcnZlci5mZXRjaE9wdGltaXN0aWMoZGVmYXVsdGVkT3B0aW9ucykuY2F0Y2goKCkgPT4ge1xuICBlcnJvclJlc2V0Qm91bmRhcnkuY2xlYXJSZXNldCgpO1xufSk7XG5leHBvcnQge1xuICBkZWZhdWx0VGhyb3dPbkVycm9yLFxuICBlbnN1cmVTdXNwZW5zZVRpbWVycyxcbiAgZmV0Y2hPcHRpbWlzdGljLFxuICBzaG91bGRTdXNwZW5kLFxuICB3aWxsRmV0Y2hcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdXNwZW5zZS5qcy5tYXAiLCJcInVzZSBjbGllbnRcIjtcblxuLy8gc3JjL3VzZUJhc2VRdWVyeS50c1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBpc1NlcnZlciwgbm90aWZ5TWFuYWdlciB9IGZyb20gXCJAdGFuc3RhY2svcXVlcnktY29yZVwiO1xuaW1wb3J0IHsgdXNlUXVlcnlDbGllbnQgfSBmcm9tIFwiLi9RdWVyeUNsaWVudFByb3ZpZGVyLmpzXCI7XG5pbXBvcnQgeyB1c2VRdWVyeUVycm9yUmVzZXRCb3VuZGFyeSB9IGZyb20gXCIuL1F1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQge1xuICBlbnN1cmVQcmV2ZW50RXJyb3JCb3VuZGFyeVJldHJ5LFxuICBnZXRIYXNFcnJvcixcbiAgdXNlQ2xlYXJSZXNldEVycm9yQm91bmRhcnlcbn0gZnJvbSBcIi4vZXJyb3JCb3VuZGFyeVV0aWxzLmpzXCI7XG5pbXBvcnQgeyB1c2VJc1Jlc3RvcmluZyB9IGZyb20gXCIuL2lzUmVzdG9yaW5nLmpzXCI7XG5pbXBvcnQge1xuICBlbnN1cmVTdXNwZW5zZVRpbWVycyxcbiAgZmV0Y2hPcHRpbWlzdGljLFxuICBzaG91bGRTdXNwZW5kLFxuICB3aWxsRmV0Y2hcbn0gZnJvbSBcIi4vc3VzcGVuc2UuanNcIjtcbmltcG9ydCB7IG5vb3AgfSBmcm9tIFwiLi91dGlscy5qc1wiO1xuZnVuY3Rpb24gdXNlQmFzZVF1ZXJ5KG9wdGlvbnMsIE9ic2VydmVyLCBxdWVyeUNsaWVudCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0JhZCBhcmd1bWVudCB0eXBlLiBTdGFydGluZyB3aXRoIHY1LCBvbmx5IHRoZSBcIk9iamVjdFwiIGZvcm0gaXMgYWxsb3dlZCB3aGVuIGNhbGxpbmcgcXVlcnkgcmVsYXRlZCBmdW5jdGlvbnMuIFBsZWFzZSB1c2UgdGhlIGVycm9yIHN0YWNrIHRvIGZpbmQgdGhlIGN1bHByaXQgY2FsbC4gTW9yZSBpbmZvIGhlcmU6IGh0dHBzOi8vdGFuc3RhY2suY29tL3F1ZXJ5L2xhdGVzdC9kb2NzL3JlYWN0L2d1aWRlcy9taWdyYXRpbmctdG8tdjUjc3VwcG9ydHMtYS1zaW5nbGUtc2lnbmF0dXJlLW9uZS1vYmplY3QnXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBjb25zdCBjbGllbnQgPSB1c2VRdWVyeUNsaWVudChxdWVyeUNsaWVudCk7XG4gIGNvbnN0IGlzUmVzdG9yaW5nID0gdXNlSXNSZXN0b3JpbmcoKTtcbiAgY29uc3QgZXJyb3JSZXNldEJvdW5kYXJ5ID0gdXNlUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkoKTtcbiAgY29uc3QgZGVmYXVsdGVkT3B0aW9ucyA9IGNsaWVudC5kZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpO1xuICBjbGllbnQuZ2V0RGVmYXVsdE9wdGlvbnMoKS5xdWVyaWVzPy5fZXhwZXJpbWVudGFsX2JlZm9yZVF1ZXJ5Py4oXG4gICAgZGVmYXVsdGVkT3B0aW9uc1xuICApO1xuICBkZWZhdWx0ZWRPcHRpb25zLl9vcHRpbWlzdGljUmVzdWx0cyA9IGlzUmVzdG9yaW5nID8gXCJpc1Jlc3RvcmluZ1wiIDogXCJvcHRpbWlzdGljXCI7XG4gIGVuc3VyZVN1c3BlbnNlVGltZXJzKGRlZmF1bHRlZE9wdGlvbnMpO1xuICBlbnN1cmVQcmV2ZW50RXJyb3JCb3VuZGFyeVJldHJ5KGRlZmF1bHRlZE9wdGlvbnMsIGVycm9yUmVzZXRCb3VuZGFyeSk7XG4gIHVzZUNsZWFyUmVzZXRFcnJvckJvdW5kYXJ5KGVycm9yUmVzZXRCb3VuZGFyeSk7XG4gIGNvbnN0IGlzTmV3Q2FjaGVFbnRyeSA9ICFjbGllbnQuZ2V0UXVlcnlDYWNoZSgpLmdldChkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5SGFzaCk7XG4gIGNvbnN0IFtvYnNlcnZlcl0gPSBSZWFjdC51c2VTdGF0ZShcbiAgICAoKSA9PiBuZXcgT2JzZXJ2ZXIoXG4gICAgICBjbGllbnQsXG4gICAgICBkZWZhdWx0ZWRPcHRpb25zXG4gICAgKVxuICApO1xuICBjb25zdCByZXN1bHQgPSBvYnNlcnZlci5nZXRPcHRpbWlzdGljUmVzdWx0KGRlZmF1bHRlZE9wdGlvbnMpO1xuICBjb25zdCBzaG91bGRTdWJzY3JpYmUgPSAhaXNSZXN0b3JpbmcgJiYgb3B0aW9ucy5zdWJzY3JpYmVkICE9PSBmYWxzZTtcbiAgUmVhY3QudXNlU3luY0V4dGVybmFsU3RvcmUoXG4gICAgUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgICAob25TdG9yZUNoYW5nZSkgPT4ge1xuICAgICAgICBjb25zdCB1bnN1YnNjcmliZSA9IHNob3VsZFN1YnNjcmliZSA/IG9ic2VydmVyLnN1YnNjcmliZShub3RpZnlNYW5hZ2VyLmJhdGNoQ2FsbHMob25TdG9yZUNoYW5nZSkpIDogbm9vcDtcbiAgICAgICAgb2JzZXJ2ZXIudXBkYXRlUmVzdWx0KCk7XG4gICAgICAgIHJldHVybiB1bnN1YnNjcmliZTtcbiAgICAgIH0sXG4gICAgICBbb2JzZXJ2ZXIsIHNob3VsZFN1YnNjcmliZV1cbiAgICApLFxuICAgICgpID0+IG9ic2VydmVyLmdldEN1cnJlbnRSZXN1bHQoKSxcbiAgICAoKSA9PiBvYnNlcnZlci5nZXRDdXJyZW50UmVzdWx0KClcbiAgKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBvYnNlcnZlci5zZXRPcHRpb25zKGRlZmF1bHRlZE9wdGlvbnMsIHsgbGlzdGVuZXJzOiBmYWxzZSB9KTtcbiAgfSwgW2RlZmF1bHRlZE9wdGlvbnMsIG9ic2VydmVyXSk7XG4gIGlmIChzaG91bGRTdXNwZW5kKGRlZmF1bHRlZE9wdGlvbnMsIHJlc3VsdCkpIHtcbiAgICB0aHJvdyBmZXRjaE9wdGltaXN0aWMoZGVmYXVsdGVkT3B0aW9ucywgb2JzZXJ2ZXIsIGVycm9yUmVzZXRCb3VuZGFyeSk7XG4gIH1cbiAgaWYgKGdldEhhc0Vycm9yKHtcbiAgICByZXN1bHQsXG4gICAgZXJyb3JSZXNldEJvdW5kYXJ5LFxuICAgIHRocm93T25FcnJvcjogZGVmYXVsdGVkT3B0aW9ucy50aHJvd09uRXJyb3IsXG4gICAgcXVlcnk6IGNsaWVudC5nZXRRdWVyeUNhY2hlKCkuZ2V0KGRlZmF1bHRlZE9wdGlvbnMucXVlcnlIYXNoKVxuICB9KSkge1xuICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgfVxuICA7XG4gIGNsaWVudC5nZXREZWZhdWx0T3B0aW9ucygpLnF1ZXJpZXM/Ll9leHBlcmltZW50YWxfYWZ0ZXJRdWVyeT8uKFxuICAgIGRlZmF1bHRlZE9wdGlvbnMsXG4gICAgcmVzdWx0XG4gICk7XG4gIGlmIChkZWZhdWx0ZWRPcHRpb25zLmV4cGVyaW1lbnRhbF9wcmVmZXRjaEluUmVuZGVyICYmICFpc1NlcnZlciAmJiB3aWxsRmV0Y2gocmVzdWx0LCBpc1Jlc3RvcmluZykpIHtcbiAgICBjb25zdCBwcm9taXNlID0gaXNOZXdDYWNoZUVudHJ5ID8gKFxuICAgICAgLy8gRmV0Y2ggaW1tZWRpYXRlbHkgb24gcmVuZGVyIGluIG9yZGVyIHRvIGVuc3VyZSBgLnByb21pc2VgIGlzIHJlc29sdmVkIGV2ZW4gaWYgdGhlIGNvbXBvbmVudCBpcyB1bm1vdW50ZWRcbiAgICAgIGZldGNoT3B0aW1pc3RpYyhkZWZhdWx0ZWRPcHRpb25zLCBvYnNlcnZlciwgZXJyb3JSZXNldEJvdW5kYXJ5KVxuICAgICkgOiAoXG4gICAgICAvLyBzdWJzY3JpYmUgdG8gdGhlIFwiY2FjaGUgcHJvbWlzZVwiIHNvIHRoYXQgd2UgY2FuIGZpbmFsaXplIHRoZSBjdXJyZW50VGhlbmFibGUgb25jZSBkYXRhIGNvbWVzIGluXG4gICAgICBjbGllbnQuZ2V0UXVlcnlDYWNoZSgpLmdldChkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5SGFzaCk/LnByb21pc2VcbiAgICApO1xuICAgIHByb21pc2U/LmNhdGNoKG5vb3ApLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgb2JzZXJ2ZXIudXBkYXRlUmVzdWx0KCk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuICFkZWZhdWx0ZWRPcHRpb25zLm5vdGlmeU9uQ2hhbmdlUHJvcHMgPyBvYnNlcnZlci50cmFja1Jlc3VsdChyZXN1bHQpIDogcmVzdWx0O1xufVxuZXhwb3J0IHtcbiAgdXNlQmFzZVF1ZXJ5XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlQmFzZVF1ZXJ5LmpzLm1hcCIsIlwidXNlIGNsaWVudFwiO1xuXG4vLyBzcmMvdXNlUXVlcnkudHNcbmltcG9ydCB7IFF1ZXJ5T2JzZXJ2ZXIgfSBmcm9tIFwiQHRhbnN0YWNrL3F1ZXJ5LWNvcmVcIjtcbmltcG9ydCB7IHVzZUJhc2VRdWVyeSB9IGZyb20gXCIuL3VzZUJhc2VRdWVyeS5qc1wiO1xuZnVuY3Rpb24gdXNlUXVlcnkob3B0aW9ucywgcXVlcnlDbGllbnQpIHtcbiAgcmV0dXJuIHVzZUJhc2VRdWVyeShvcHRpb25zLCBRdWVyeU9ic2VydmVyLCBxdWVyeUNsaWVudCk7XG59XG5leHBvcnQge1xuICB1c2VRdWVyeVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZVF1ZXJ5LmpzLm1hcCIsIlwidXNlIGNsaWVudFwiO1xuXG4vLyBzcmMvdXNlTXV0YXRpb24udHNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgTXV0YXRpb25PYnNlcnZlciwgbm90aWZ5TWFuYWdlciB9IGZyb20gXCJAdGFuc3RhY2svcXVlcnktY29yZVwiO1xuaW1wb3J0IHsgdXNlUXVlcnlDbGllbnQgfSBmcm9tIFwiLi9RdWVyeUNsaWVudFByb3ZpZGVyLmpzXCI7XG5pbXBvcnQgeyBub29wLCBzaG91bGRUaHJvd0Vycm9yIH0gZnJvbSBcIi4vdXRpbHMuanNcIjtcbmZ1bmN0aW9uIHVzZU11dGF0aW9uKG9wdGlvbnMsIHF1ZXJ5Q2xpZW50KSB7XG4gIGNvbnN0IGNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KHF1ZXJ5Q2xpZW50KTtcbiAgY29uc3QgW29ic2VydmVyXSA9IFJlYWN0LnVzZVN0YXRlKFxuICAgICgpID0+IG5ldyBNdXRhdGlvbk9ic2VydmVyKFxuICAgICAgY2xpZW50LFxuICAgICAgb3B0aW9uc1xuICAgIClcbiAgKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBvYnNlcnZlci5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICB9LCBbb2JzZXJ2ZXIsIG9wdGlvbnNdKTtcbiAgY29uc3QgcmVzdWx0ID0gUmVhY3QudXNlU3luY0V4dGVybmFsU3RvcmUoXG4gICAgUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgICAob25TdG9yZUNoYW5nZSkgPT4gb2JzZXJ2ZXIuc3Vic2NyaWJlKG5vdGlmeU1hbmFnZXIuYmF0Y2hDYWxscyhvblN0b3JlQ2hhbmdlKSksXG4gICAgICBbb2JzZXJ2ZXJdXG4gICAgKSxcbiAgICAoKSA9PiBvYnNlcnZlci5nZXRDdXJyZW50UmVzdWx0KCksXG4gICAgKCkgPT4gb2JzZXJ2ZXIuZ2V0Q3VycmVudFJlc3VsdCgpXG4gICk7XG4gIGNvbnN0IG11dGF0ZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgICh2YXJpYWJsZXMsIG11dGF0ZU9wdGlvbnMpID0+IHtcbiAgICAgIG9ic2VydmVyLm11dGF0ZSh2YXJpYWJsZXMsIG11dGF0ZU9wdGlvbnMpLmNhdGNoKG5vb3ApO1xuICAgIH0sXG4gICAgW29ic2VydmVyXVxuICApO1xuICBpZiAocmVzdWx0LmVycm9yICYmIHNob3VsZFRocm93RXJyb3Iob2JzZXJ2ZXIub3B0aW9ucy50aHJvd09uRXJyb3IsIFtyZXN1bHQuZXJyb3JdKSkge1xuICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgfVxuICByZXR1cm4geyAuLi5yZXN1bHQsIG11dGF0ZSwgbXV0YXRlQXN5bmM6IHJlc3VsdC5tdXRhdGUgfTtcbn1cbmV4cG9ydCB7XG4gIHVzZU11dGF0aW9uXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlTXV0YXRpb24uanMubWFwIiwiLyogdHNsaW50OmRpc2FibGUgKi9cbi8qIGVzbGludC1kaXNhYmxlICovXG4vKipcbiAqIEdhbGFkcmltIEZlZWRiYWNrIEFQSVxuICogQVBJIGZvciBHYWxhZHJpbSBGZWVkYmFjaywgYSBmZWVkYmFjayBwbGF0Zm9ybSBmb3IgR2FsYWRyaW0gcHJvamVjdHMuXG4gKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMFxuICogXG4gKlxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cbiAqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuICogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuICovXG5cblxuaW1wb3J0IHR5cGUgeyBDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9jb25maWd1cmF0aW9uJztcbi8vIFNvbWUgaW1wb3J0cyBub3QgdXNlZCBkZXBlbmRpbmcgb24gdGVtcGxhdGUgY29uZGl0aW9uc1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHR5cGUgeyBBeGlvc1Byb21pc2UsIEF4aW9zSW5zdGFuY2UsIFJhd0F4aW9zUmVxdWVzdENvbmZpZyB9IGZyb20gJ2F4aW9zJztcbmltcG9ydCBnbG9iYWxBeGlvcyBmcm9tICdheGlvcyc7XG5cbmV4cG9ydCBjb25zdCBCQVNFX1BBVEggPSBcImh0dHA6Ly9sb2NhbGhvc3RcIi5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpO1xuXG4vKipcbiAqXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBDT0xMRUNUSU9OX0ZPUk1BVFMgPSB7XG4gICAgY3N2OiBcIixcIixcbiAgICBzc3Y6IFwiIFwiLFxuICAgIHRzdjogXCJcXHRcIixcbiAgICBwaXBlczogXCJ8XCIsXG59O1xuXG4vKipcbiAqXG4gKiBAZXhwb3J0XG4gKiBAaW50ZXJmYWNlIFJlcXVlc3RBcmdzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVxdWVzdEFyZ3Mge1xuICAgIHVybDogc3RyaW5nO1xuICAgIG9wdGlvbnM6IFJhd0F4aW9zUmVxdWVzdENvbmZpZztcbn1cblxuLyoqXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIEJhc2VBUElcbiAqL1xuZXhwb3J0IGNsYXNzIEJhc2VBUEkge1xuICAgIHByb3RlY3RlZCBjb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoY29uZmlndXJhdGlvbj86IENvbmZpZ3VyYXRpb24sIHByb3RlY3RlZCBiYXNlUGF0aDogc3RyaW5nID0gQkFTRV9QQVRILCBwcm90ZWN0ZWQgYXhpb3M6IEF4aW9zSW5zdGFuY2UgPSBnbG9iYWxBeGlvcykge1xuICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgICAgIHRoaXMuYmFzZVBhdGggPSBjb25maWd1cmF0aW9uLmJhc2VQYXRoID8/IGJhc2VQYXRoO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIFJlcXVpcmVkRXJyb3JcbiAqIEBleHRlbmRzIHtFcnJvcn1cbiAqL1xuZXhwb3J0IGNsYXNzIFJlcXVpcmVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IocHVibGljIGZpZWxkOiBzdHJpbmcsIG1zZz86IHN0cmluZykge1xuICAgICAgICBzdXBlcihtc2cpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlJlcXVpcmVkRXJyb3JcIlxuICAgIH1cbn1cblxuaW50ZXJmYWNlIFNlcnZlck1hcCB7XG4gICAgW2tleTogc3RyaW5nXToge1xuICAgICAgICB1cmw6IHN0cmluZyxcbiAgICAgICAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgICB9W107XG59XG5cbi8qKlxuICpcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNvbnN0IG9wZXJhdGlvblNlcnZlck1hcDogU2VydmVyTWFwID0ge1xufVxuIiwiLyogdHNsaW50OmRpc2FibGUgKi9cbi8qIGVzbGludC1kaXNhYmxlICovXG4vKipcbiAqIEdhbGFkcmltIEZlZWRiYWNrIEFQSVxuICogQVBJIGZvciBHYWxhZHJpbSBGZWVkYmFjaywgYSBmZWVkYmFjayBwbGF0Zm9ybSBmb3IgR2FsYWRyaW0gcHJvamVjdHMuXG4gKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMFxuICogXG4gKlxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cbiAqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuICogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuICovXG5cblxuaW1wb3J0IHR5cGUgeyBDb25maWd1cmF0aW9uIH0gZnJvbSBcIi4vY29uZmlndXJhdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0QXJncyB9IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB0eXBlIHsgQXhpb3NJbnN0YW5jZSwgQXhpb3NSZXNwb25zZSB9IGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IFJlcXVpcmVkRXJyb3IgfSBmcm9tIFwiLi9iYXNlXCI7XG5cbi8qKlxuICpcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNvbnN0IERVTU1ZX0JBU0VfVVJMID0gJ2h0dHBzOi8vZXhhbXBsZS5jb20nXG5cbi8qKlxuICpcbiAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBhc3NlcnRQYXJhbUV4aXN0cyA9IGZ1bmN0aW9uIChmdW5jdGlvbk5hbWU6IHN0cmluZywgcGFyYW1OYW1lOiBzdHJpbmcsIHBhcmFtVmFsdWU6IHVua25vd24pIHtcbiAgICBpZiAocGFyYW1WYWx1ZSA9PT0gbnVsbCB8fCBwYXJhbVZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlcXVpcmVkRXJyb3IocGFyYW1OYW1lLCBgUmVxdWlyZWQgcGFyYW1ldGVyICR7cGFyYW1OYW1lfSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nICR7ZnVuY3Rpb25OYW1lfS5gKTtcbiAgICB9XG59XG5cbi8qKlxuICpcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEFwaUtleVRvT2JqZWN0ID0gYXN5bmMgZnVuY3Rpb24gKG9iamVjdDogYW55LCBrZXlQYXJhbU5hbWU6IHN0cmluZywgY29uZmlndXJhdGlvbj86IENvbmZpZ3VyYXRpb24pIHtcbiAgICBpZiAoY29uZmlndXJhdGlvbiAmJiBjb25maWd1cmF0aW9uLmFwaUtleSkge1xuICAgICAgICBjb25zdCBsb2NhbFZhckFwaUtleVZhbHVlID0gdHlwZW9mIGNvbmZpZ3VyYXRpb24uYXBpS2V5ID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IGF3YWl0IGNvbmZpZ3VyYXRpb24uYXBpS2V5KGtleVBhcmFtTmFtZSlcbiAgICAgICAgICAgIDogYXdhaXQgY29uZmlndXJhdGlvbi5hcGlLZXk7XG4gICAgICAgIG9iamVjdFtrZXlQYXJhbU5hbWVdID0gbG9jYWxWYXJBcGlLZXlWYWx1ZTtcbiAgICB9XG59XG5cbi8qKlxuICpcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEJhc2ljQXV0aFRvT2JqZWN0ID0gZnVuY3Rpb24gKG9iamVjdDogYW55LCBjb25maWd1cmF0aW9uPzogQ29uZmlndXJhdGlvbikge1xuICAgIGlmIChjb25maWd1cmF0aW9uICYmIChjb25maWd1cmF0aW9uLnVzZXJuYW1lIHx8IGNvbmZpZ3VyYXRpb24ucGFzc3dvcmQpKSB7XG4gICAgICAgIG9iamVjdFtcImF1dGhcIl0gPSB7IHVzZXJuYW1lOiBjb25maWd1cmF0aW9uLnVzZXJuYW1lLCBwYXNzd29yZDogY29uZmlndXJhdGlvbi5wYXNzd29yZCB9O1xuICAgIH1cbn1cblxuLyoqXG4gKlxuICogQGV4cG9ydFxuICovXG5leHBvcnQgY29uc3Qgc2V0QmVhcmVyQXV0aFRvT2JqZWN0ID0gYXN5bmMgZnVuY3Rpb24gKG9iamVjdDogYW55LCBjb25maWd1cmF0aW9uPzogQ29uZmlndXJhdGlvbikge1xuICAgIGlmIChjb25maWd1cmF0aW9uICYmIGNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSB0eXBlb2YgY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbiA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgPyBhd2FpdCBjb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKClcbiAgICAgICAgICAgIDogYXdhaXQgY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbjtcbiAgICAgICAgb2JqZWN0W1wiQXV0aG9yaXphdGlvblwiXSA9IFwiQmVhcmVyIFwiICsgYWNjZXNzVG9rZW47XG4gICAgfVxufVxuXG4vKipcbiAqXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBzZXRPQXV0aFRvT2JqZWN0ID0gYXN5bmMgZnVuY3Rpb24gKG9iamVjdDogYW55LCBuYW1lOiBzdHJpbmcsIHNjb3Blczogc3RyaW5nW10sIGNvbmZpZ3VyYXRpb24/OiBDb25maWd1cmF0aW9uKSB7XG4gICAgaWYgKGNvbmZpZ3VyYXRpb24gJiYgY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbikge1xuICAgICAgICBjb25zdCBsb2NhbFZhckFjY2Vzc1Rva2VuVmFsdWUgPSB0eXBlb2YgY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbiA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgPyBhd2FpdCBjb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKG5hbWUsIHNjb3BlcylcbiAgICAgICAgICAgIDogYXdhaXQgY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbjtcbiAgICAgICAgb2JqZWN0W1wiQXV0aG9yaXphdGlvblwiXSA9IFwiQmVhcmVyIFwiICsgbG9jYWxWYXJBY2Nlc3NUb2tlblZhbHVlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gc2V0RmxhdHRlbmVkUXVlcnlQYXJhbXModXJsU2VhcmNoUGFyYW1zOiBVUkxTZWFyY2hQYXJhbXMsIHBhcmFtZXRlcjogYW55LCBrZXk6IHN0cmluZyA9IFwiXCIpOiB2b2lkIHtcbiAgICBpZiAocGFyYW1ldGVyID09IG51bGwpIHJldHVybjtcbiAgICBpZiAodHlwZW9mIHBhcmFtZXRlciA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJhbWV0ZXIpKSB7XG4gICAgICAgICAgICAocGFyYW1ldGVyIGFzIGFueVtdKS5mb3JFYWNoKGl0ZW0gPT4gc2V0RmxhdHRlbmVkUXVlcnlQYXJhbXModXJsU2VhcmNoUGFyYW1zLCBpdGVtLCBrZXkpKTtcbiAgICAgICAgfSBcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhwYXJhbWV0ZXIpLmZvckVhY2goY3VycmVudEtleSA9PiBcbiAgICAgICAgICAgICAgICBzZXRGbGF0dGVuZWRRdWVyeVBhcmFtcyh1cmxTZWFyY2hQYXJhbXMsIHBhcmFtZXRlcltjdXJyZW50S2V5XSwgYCR7a2V5fSR7a2V5ICE9PSAnJyA/ICcuJyA6ICcnfSR7Y3VycmVudEtleX1gKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH0gXG4gICAgZWxzZSB7XG4gICAgICAgIGlmICh1cmxTZWFyY2hQYXJhbXMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIHVybFNlYXJjaFBhcmFtcy5hcHBlbmQoa2V5LCBwYXJhbWV0ZXIpO1xuICAgICAgICB9IFxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHVybFNlYXJjaFBhcmFtcy5zZXQoa2V5LCBwYXJhbWV0ZXIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTZWFyY2hQYXJhbXMgPSBmdW5jdGlvbiAodXJsOiBVUkwsIC4uLm9iamVjdHM6IGFueVtdKSB7XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh1cmwuc2VhcmNoKTtcbiAgICBzZXRGbGF0dGVuZWRRdWVyeVBhcmFtcyhzZWFyY2hQYXJhbXMsIG9iamVjdHMpO1xuICAgIHVybC5zZWFyY2ggPSBzZWFyY2hQYXJhbXMudG9TdHJpbmcoKTtcbn1cblxuLyoqXG4gKlxuICogQGV4cG9ydFxuICovXG5leHBvcnQgY29uc3Qgc2VyaWFsaXplRGF0YUlmTmVlZGVkID0gZnVuY3Rpb24gKHZhbHVlOiBhbnksIHJlcXVlc3RPcHRpb25zOiBhbnksIGNvbmZpZ3VyYXRpb24/OiBDb25maWd1cmF0aW9uKSB7XG4gICAgY29uc3Qgbm9uU3RyaW5nID0gdHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJztcbiAgICBjb25zdCBuZWVkc1NlcmlhbGl6YXRpb24gPSBub25TdHJpbmcgJiYgY29uZmlndXJhdGlvbiAmJiBjb25maWd1cmF0aW9uLmlzSnNvbk1pbWVcbiAgICAgICAgPyBjb25maWd1cmF0aW9uLmlzSnNvbk1pbWUocmVxdWVzdE9wdGlvbnMuaGVhZGVyc1snQ29udGVudC1UeXBlJ10pXG4gICAgICAgIDogbm9uU3RyaW5nO1xuICAgIHJldHVybiBuZWVkc1NlcmlhbGl6YXRpb25cbiAgICAgICAgPyBKU09OLnN0cmluZ2lmeSh2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7fSlcbiAgICAgICAgOiAodmFsdWUgfHwgXCJcIik7XG59XG5cbi8qKlxuICpcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNvbnN0IHRvUGF0aFN0cmluZyA9IGZ1bmN0aW9uICh1cmw6IFVSTCkge1xuICAgIHJldHVybiB1cmwucGF0aG5hbWUgKyB1cmwuc2VhcmNoICsgdXJsLmhhc2hcbn1cblxuLyoqXG4gKlxuICogQGV4cG9ydFxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlUmVxdWVzdEZ1bmN0aW9uID0gZnVuY3Rpb24gKGF4aW9zQXJnczogUmVxdWVzdEFyZ3MsIGdsb2JhbEF4aW9zOiBBeGlvc0luc3RhbmNlLCBCQVNFX1BBVEg6IHN0cmluZywgY29uZmlndXJhdGlvbj86IENvbmZpZ3VyYXRpb24pIHtcbiAgICByZXR1cm4gPFQgPSB1bmtub3duLCBSID0gQXhpb3NSZXNwb25zZTxUPj4oYXhpb3M6IEF4aW9zSW5zdGFuY2UgPSBnbG9iYWxBeGlvcywgYmFzZVBhdGg6IHN0cmluZyA9IEJBU0VfUEFUSCkgPT4ge1xuICAgICAgICBjb25zdCBheGlvc1JlcXVlc3RBcmdzID0gey4uLmF4aW9zQXJncy5vcHRpb25zLCB1cmw6IChheGlvcy5kZWZhdWx0cy5iYXNlVVJMID8gJycgOiBjb25maWd1cmF0aW9uPy5iYXNlUGF0aCA/PyBiYXNlUGF0aCkgKyBheGlvc0FyZ3MudXJsfTtcbiAgICAgICAgcmV0dXJuIGF4aW9zLnJlcXVlc3Q8VCwgUj4oYXhpb3NSZXF1ZXN0QXJncyk7XG4gICAgfTtcbn1cbiIsIi8qIHRzbGludDpkaXNhYmxlICovXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLyoqXG4gKiBHYWxhZHJpbSBGZWVkYmFjayBBUElcbiAqIEFQSSBmb3IgR2FsYWRyaW0gRmVlZGJhY2ssIGEgZmVlZGJhY2sgcGxhdGZvcm0gZm9yIEdhbGFkcmltIHByb2plY3RzLlxuICpcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjBcbiAqIFxuICpcbiAqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG4gKiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cbiAqL1xuXG5cbmltcG9ydCB0eXBlIHsgQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vY29uZmlndXJhdGlvbic7XG5pbXBvcnQgdHlwZSB7IEF4aW9zUHJvbWlzZSwgQXhpb3NJbnN0YW5jZSwgUmF3QXhpb3NSZXF1ZXN0Q29uZmlnIH0gZnJvbSAnYXhpb3MnO1xuaW1wb3J0IGdsb2JhbEF4aW9zIGZyb20gJ2F4aW9zJztcbi8vIFNvbWUgaW1wb3J0cyBub3QgdXNlZCBkZXBlbmRpbmcgb24gdGVtcGxhdGUgY29uZGl0aW9uc1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRFVNTVlfQkFTRV9VUkwsIGFzc2VydFBhcmFtRXhpc3RzLCBzZXRBcGlLZXlUb09iamVjdCwgc2V0QmFzaWNBdXRoVG9PYmplY3QsIHNldEJlYXJlckF1dGhUb09iamVjdCwgc2V0T0F1dGhUb09iamVjdCwgc2V0U2VhcmNoUGFyYW1zLCBzZXJpYWxpemVEYXRhSWZOZWVkZWQsIHRvUGF0aFN0cmluZywgY3JlYXRlUmVxdWVzdEZ1bmN0aW9uIH0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0QXJncyB9IGZyb20gJy4vYmFzZSc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBCQVNFX1BBVEgsIENPTExFQ1RJT05fRk9STUFUUywgQmFzZUFQSSwgUmVxdWlyZWRFcnJvciwgb3BlcmF0aW9uU2VydmVyTWFwIH0gZnJvbSAnLi9iYXNlJztcblxuLyoqXG4gKiBcbiAqIEBleHBvcnRcbiAqIEBpbnRlcmZhY2UgQ29sbGFib3JhdGlvbnNSZXNwb25zZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbGxhYm9yYXRpb25zUmVzcG9uc2Uge1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIENvbGxhYm9yYXRpb25zUmVzcG9uc2VcbiAgICAgKi9cbiAgICAndXNlcklkJzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIENvbGxhYm9yYXRpb25zUmVzcG9uc2VcbiAgICAgKi9cbiAgICAncHJvamVjdElkJzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtQcm9qZWN0UmVzcG9uc2V9XG4gICAgICogQG1lbWJlcm9mIENvbGxhYm9yYXRpb25zUmVzcG9uc2VcbiAgICAgKi9cbiAgICAncHJvamVjdCc6IFByb2plY3RSZXNwb25zZTtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBDb2xsYWJvcmF0aW9uc1Jlc3BvbnNlXG4gICAgICovXG4gICAgJ3JvbGUnOiBzdHJpbmc7XG59XG4vKipcbiAqIFxuICogQGV4cG9ydFxuICogQGludGVyZmFjZSBGZWVkYmFja0NyZWF0ZUR0b1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZlZWRiYWNrQ3JlYXRlRHRvIHtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBGZWVkYmFja0NyZWF0ZUR0b1xuICAgICAqL1xuICAgICdlbGVtZW50SWQnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tDcmVhdGVEdG9cbiAgICAgKi9cbiAgICAnZWxlbWVudEluZGV4JzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrQ3JlYXRlRHRvXG4gICAgICovXG4gICAgJ2VsZW1lbnRXaWR0aCc6IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBGZWVkYmFja0NyZWF0ZUR0b1xuICAgICAqL1xuICAgICdlbGVtZW50SGVpZ2h0JzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrQ3JlYXRlRHRvXG4gICAgICovXG4gICAgJ3gnOiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tDcmVhdGVEdG9cbiAgICAgKi9cbiAgICAneSc6IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBGZWVkYmFja0NyZWF0ZUR0b1xuICAgICAqL1xuICAgICdjb21tZW50Jzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrQ3JlYXRlRHRvXG4gICAgICovXG4gICAgJ3BhdGgnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tDcmVhdGVEdG9cbiAgICAgKi9cbiAgICAncHJvamVjdElkJzogc3RyaW5nO1xufVxuLyoqXG4gKiBcbiAqIEBleHBvcnRcbiAqIEBpbnRlcmZhY2UgRmVlZGJhY2tSZXNwb25zZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZlZWRiYWNrUmVzcG9uc2Uge1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrUmVzcG9uc2VcbiAgICAgKi9cbiAgICAnaWQnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tSZXNwb25zZVxuICAgICAqL1xuICAgICdjcmVhdGVkQXQnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tSZXNwb25zZVxuICAgICAqL1xuICAgICd1cGRhdGVkQXQnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tSZXNwb25zZVxuICAgICAqL1xuICAgICdlbGVtZW50SWQnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tSZXNwb25zZVxuICAgICAqL1xuICAgICdlbGVtZW50SW5kZXgnOiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tSZXNwb25zZVxuICAgICAqL1xuICAgICdlbGVtZW50V2lkdGgnOiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tSZXNwb25zZVxuICAgICAqL1xuICAgICdlbGVtZW50SGVpZ2h0JzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrUmVzcG9uc2VcbiAgICAgKi9cbiAgICAneCc6IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBGZWVkYmFja1Jlc3BvbnNlXG4gICAgICovXG4gICAgJ3knOiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrUmVzcG9uc2VcbiAgICAgKi9cbiAgICAnaXNSZXNvbHZlZCc6IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tSZXNwb25zZVxuICAgICAqL1xuICAgICdjb21tZW50Jzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrUmVzcG9uc2VcbiAgICAgKi9cbiAgICAncGF0aCc6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7QXJyYXk8UmVwbHlSZXNwb25zZT59XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrUmVzcG9uc2VcbiAgICAgKi9cbiAgICAncmVwbGllcyc6IEFycmF5PFJlcGx5UmVzcG9uc2U+O1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtVc2VyU3VtbWFyeVJlc3BvbnNlfVxuICAgICAqIEBtZW1iZXJvZiBGZWVkYmFja1Jlc3BvbnNlXG4gICAgICovXG4gICAgJ3VzZXInOiBVc2VyU3VtbWFyeVJlc3BvbnNlO1xufVxuLyoqXG4gKiBcbiAqIEBleHBvcnRcbiAqIEBpbnRlcmZhY2UgRmVlZGJhY2tVcGRhdGVEdG9cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGZWVkYmFja1VwZGF0ZUR0byB7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tVcGRhdGVEdG9cbiAgICAgKi9cbiAgICAnZWxlbWVudElkJz86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBGZWVkYmFja1VwZGF0ZUR0b1xuICAgICAqL1xuICAgICdlbGVtZW50SW5kZXgnPzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrVXBkYXRlRHRvXG4gICAgICovXG4gICAgJ2VsZW1lbnRXaWR0aCc/OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tVcGRhdGVEdG9cbiAgICAgKi9cbiAgICAnZWxlbWVudEhlaWdodCc/OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tVcGRhdGVEdG9cbiAgICAgKi9cbiAgICAneCc/OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tVcGRhdGVEdG9cbiAgICAgKi9cbiAgICAneSc/OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tVcGRhdGVEdG9cbiAgICAgKi9cbiAgICAnY29tbWVudCc/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tVcGRhdGVEdG9cbiAgICAgKi9cbiAgICAncGF0aCc/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tVcGRhdGVEdG9cbiAgICAgKi9cbiAgICAncHJvamVjdElkJz86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tVcGRhdGVEdG9cbiAgICAgKi9cbiAgICAnaXNSZXNvbHZlZCc6IGJvb2xlYW47XG59XG4vKipcbiAqIFxuICogQGV4cG9ydFxuICogQGludGVyZmFjZSBQcm9qZWN0UmVzcG9uc2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm9qZWN0UmVzcG9uc2Uge1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFByb2plY3RSZXNwb25zZVxuICAgICAqL1xuICAgICdpZCc6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBQcm9qZWN0UmVzcG9uc2VcbiAgICAgKi9cbiAgICAnbmFtZSc6IHN0cmluZztcbn1cbi8qKlxuICogXG4gKiBAZXhwb3J0XG4gKiBAaW50ZXJmYWNlIFJlcGx5UmVzcG9uc2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBseVJlc3BvbnNlIHtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBSZXBseVJlc3BvbnNlXG4gICAgICovXG4gICAgJ2lkJzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFJlcGx5UmVzcG9uc2VcbiAgICAgKi9cbiAgICAnY3JlYXRlZEF0Jzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFJlcGx5UmVzcG9uc2VcbiAgICAgKi9cbiAgICAndXBkYXRlZEF0Jzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFJlcGx5UmVzcG9uc2VcbiAgICAgKi9cbiAgICAnZmVlZGJhY2tJZCc6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBSZXBseVJlc3BvbnNlXG4gICAgICovXG4gICAgJ3VzZXJJZCc6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBSZXBseVJlc3BvbnNlXG4gICAgICovXG4gICAgJ2NvbW1lbnQnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge1VzZXJTdW1tYXJ5UmVzcG9uc2V9XG4gICAgICogQG1lbWJlcm9mIFJlcGx5UmVzcG9uc2VcbiAgICAgKi9cbiAgICAndXNlcic6IFVzZXJTdW1tYXJ5UmVzcG9uc2U7XG59XG4vKipcbiAqIFxuICogQGV4cG9ydFxuICogQGludGVyZmFjZSBTaWduSW5EdG9cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTaWduSW5EdG8ge1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFNpZ25JbkR0b1xuICAgICAqL1xuICAgICdlbWFpbCc6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBTaWduSW5EdG9cbiAgICAgKi9cbiAgICAncGFzc3dvcmQnOiBzdHJpbmc7XG59XG4vKipcbiAqIFxuICogQGV4cG9ydFxuICogQGludGVyZmFjZSBTaWduSW5SZXNwb25zZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25JblJlc3BvbnNlIHtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBTaWduSW5SZXNwb25zZVxuICAgICAqL1xuICAgICdhY2Nlc3NUb2tlbic6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBTaWduSW5SZXNwb25zZVxuICAgICAqL1xuICAgICdyZWZyZXNoVG9rZW4nOiBzdHJpbmc7XG59XG4vKipcbiAqIFxuICogQGV4cG9ydFxuICogQGludGVyZmFjZSBTaWduVXBEdG9cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTaWduVXBEdG8ge1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFNpZ25VcER0b1xuICAgICAqL1xuICAgICdlbWFpbCc6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBTaWduVXBEdG9cbiAgICAgKi9cbiAgICAncGFzc3dvcmQnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgU2lnblVwRHRvXG4gICAgICovXG4gICAgJ2ZpcnN0TmFtZSc6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBTaWduVXBEdG9cbiAgICAgKi9cbiAgICAnbGFzdE5hbWUnOiBzdHJpbmc7XG59XG4vKipcbiAqIFxuICogQGV4cG9ydFxuICogQGludGVyZmFjZSBTaWduVXBSZXNwb25zZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25VcFJlc3BvbnNlIHtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBTaWduVXBSZXNwb25zZVxuICAgICAqL1xuICAgICdhY2Nlc3NUb2tlbic6IHN0cmluZztcbn1cbi8qKlxuICogXG4gKiBAZXhwb3J0XG4gKiBAaW50ZXJmYWNlIFVzZXJTdW1tYXJ5UmVzcG9uc2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyU3VtbWFyeVJlc3BvbnNlIHtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBVc2VyU3VtbWFyeVJlc3BvbnNlXG4gICAgICovXG4gICAgJ2lkJzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFVzZXJTdW1tYXJ5UmVzcG9uc2VcbiAgICAgKi9cbiAgICAnZW1haWwnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgVXNlclN1bW1hcnlSZXNwb25zZVxuICAgICAqL1xuICAgICdmaXJzdE5hbWUnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgVXNlclN1bW1hcnlSZXNwb25zZVxuICAgICAqL1xuICAgICdsYXN0TmFtZSc6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBVc2VyU3VtbWFyeVJlc3BvbnNlXG4gICAgICovXG4gICAgJ2Z1bGxOYW1lJzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFVzZXJTdW1tYXJ5UmVzcG9uc2VcbiAgICAgKi9cbiAgICAnYXZhdGFyVXJsJzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtBcnJheTxDb2xsYWJvcmF0aW9uc1Jlc3BvbnNlPn1cbiAgICAgKiBAbWVtYmVyb2YgVXNlclN1bW1hcnlSZXNwb25zZVxuICAgICAqL1xuICAgICdjb2xsYWJvcmF0aW9ucyc6IEFycmF5PENvbGxhYm9yYXRpb25zUmVzcG9uc2U+O1xufVxuXG4vKipcbiAqIEFwcEFwaSAtIGF4aW9zIHBhcmFtZXRlciBjcmVhdG9yXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBBcHBBcGlBeGlvc1BhcmFtQ3JlYXRvciA9IGZ1bmN0aW9uIChjb25maWd1cmF0aW9uPzogQ29uZmlndXJhdGlvbikge1xuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIGFwcENvbnRyb2xsZXJHZXRIZWxsbzogYXN5bmMgKG9wdGlvbnM6IFJhd0F4aW9zUmVxdWVzdENvbmZpZyA9IHt9KTogUHJvbWlzZTxSZXF1ZXN0QXJncz4gPT4ge1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJQYXRoID0gYC9gO1xuICAgICAgICAgICAgLy8gdXNlIGR1bW15IGJhc2UgVVJMIHN0cmluZyBiZWNhdXNlIHRoZSBVUkwgY29uc3RydWN0b3Igb25seSBhY2NlcHRzIGFic29sdXRlIFVSTHMuXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclVybE9iaiA9IG5ldyBVUkwobG9jYWxWYXJQYXRoLCBEVU1NWV9CQVNFX1VSTCk7XG4gICAgICAgICAgICBsZXQgYmFzZU9wdGlvbnM7XG4gICAgICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgICAgIGJhc2VPcHRpb25zID0gY29uZmlndXJhdGlvbi5iYXNlT3B0aW9ucztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucyA9IHsgbWV0aG9kOiAnR0VUJywgLi4uYmFzZU9wdGlvbnMsIC4uLm9wdGlvbnN9O1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyID0ge30gYXMgYW55O1xuXG5cbiAgICBcbiAgICAgICAgICAgIHNldFNlYXJjaFBhcmFtcyhsb2NhbFZhclVybE9iaiwgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcik7XG4gICAgICAgICAgICBsZXQgaGVhZGVyc0Zyb21CYXNlT3B0aW9ucyA9IGJhc2VPcHRpb25zICYmIGJhc2VPcHRpb25zLmhlYWRlcnMgPyBiYXNlT3B0aW9ucy5oZWFkZXJzIDoge307XG4gICAgICAgICAgICBsb2NhbFZhclJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPSB7Li4ubG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIsIC4uLmhlYWRlcnNGcm9tQmFzZU9wdGlvbnMsIC4uLm9wdGlvbnMuaGVhZGVyc307XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdXJsOiB0b1BhdGhTdHJpbmcobG9jYWxWYXJVcmxPYmopLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgIH1cbn07XG5cbi8qKlxuICogQXBwQXBpIC0gZnVuY3Rpb25hbCBwcm9ncmFtbWluZyBpbnRlcmZhY2VcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNvbnN0IEFwcEFwaUZwID0gZnVuY3Rpb24oY29uZmlndXJhdGlvbj86IENvbmZpZ3VyYXRpb24pIHtcbiAgICBjb25zdCBsb2NhbFZhckF4aW9zUGFyYW1DcmVhdG9yID0gQXBwQXBpQXhpb3NQYXJhbUNyZWF0b3IoY29uZmlndXJhdGlvbilcbiAgICByZXR1cm4ge1xuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBhc3luYyBhcHBDb250cm9sbGVyR2V0SGVsbG8ob3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IFByb21pc2U8KGF4aW9zPzogQXhpb3NJbnN0YW5jZSwgYmFzZVBhdGg/OiBzdHJpbmcpID0+IEF4aW9zUHJvbWlzZTx2b2lkPj4ge1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJBeGlvc0FyZ3MgPSBhd2FpdCBsb2NhbFZhckF4aW9zUGFyYW1DcmVhdG9yLmFwcENvbnRyb2xsZXJHZXRIZWxsbyhvcHRpb25zKTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyT3BlcmF0aW9uU2VydmVySW5kZXggPSBjb25maWd1cmF0aW9uPy5zZXJ2ZXJJbmRleCA/PyAwO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJCYXNlUGF0aCA9IG9wZXJhdGlvblNlcnZlck1hcFsnQXBwQXBpLmFwcENvbnRyb2xsZXJHZXRIZWxsbyddPy5bbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJJbmRleF0/LnVybDtcbiAgICAgICAgICAgIHJldHVybiAoYXhpb3MsIGJhc2VQYXRoKSA9PiBjcmVhdGVSZXF1ZXN0RnVuY3Rpb24obG9jYWxWYXJBeGlvc0FyZ3MsIGdsb2JhbEF4aW9zLCBCQVNFX1BBVEgsIGNvbmZpZ3VyYXRpb24pKGF4aW9zLCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckJhc2VQYXRoIHx8IGJhc2VQYXRoKTtcbiAgICAgICAgfSxcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcEFwaSAtIGZhY3RvcnkgaW50ZXJmYWNlXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBBcHBBcGlGYWN0b3J5ID0gZnVuY3Rpb24gKGNvbmZpZ3VyYXRpb24/OiBDb25maWd1cmF0aW9uLCBiYXNlUGF0aD86IHN0cmluZywgYXhpb3M/OiBBeGlvc0luc3RhbmNlKSB7XG4gICAgY29uc3QgbG9jYWxWYXJGcCA9IEFwcEFwaUZwKGNvbmZpZ3VyYXRpb24pXG4gICAgcmV0dXJuIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgYXBwQ29udHJvbGxlckdldEhlbGxvKG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpOiBBeGlvc1Byb21pc2U8dm9pZD4ge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsVmFyRnAuYXBwQ29udHJvbGxlckdldEhlbGxvKG9wdGlvbnMpLnRoZW4oKHJlcXVlc3QpID0+IHJlcXVlc3QoYXhpb3MsIGJhc2VQYXRoKSk7XG4gICAgICAgIH0sXG4gICAgfTtcbn07XG5cbi8qKlxuICogQXBwQXBpIC0gb2JqZWN0LW9yaWVudGVkIGludGVyZmFjZVxuICogQGV4cG9ydFxuICogQGNsYXNzIEFwcEFwaVxuICogQGV4dGVuZHMge0Jhc2VBUEl9XG4gKi9cbmV4cG9ydCBjbGFzcyBBcHBBcGkgZXh0ZW5kcyBCYXNlQVBJIHtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICogQG1lbWJlcm9mIEFwcEFwaVxuICAgICAqL1xuICAgIHB1YmxpYyBhcHBDb250cm9sbGVyR2V0SGVsbG8ob3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZykge1xuICAgICAgICByZXR1cm4gQXBwQXBpRnAodGhpcy5jb25maWd1cmF0aW9uKS5hcHBDb250cm9sbGVyR2V0SGVsbG8ob3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdCh0aGlzLmF4aW9zLCB0aGlzLmJhc2VQYXRoKSk7XG4gICAgfVxufVxuXG5cblxuLyoqXG4gKiBBdXRoQXBpIC0gYXhpb3MgcGFyYW1ldGVyIGNyZWF0b3JcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNvbnN0IEF1dGhBcGlBeGlvc1BhcmFtQ3JlYXRvciA9IGZ1bmN0aW9uIChjb25maWd1cmF0aW9uPzogQ29uZmlndXJhdGlvbikge1xuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlZGlyZWN0VXJsIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgYXV0aENvbnRyb2xsZXJHaXRodWJDYWxsYmFjazogYXN5bmMgKHJlZGlyZWN0VXJsOiBzdHJpbmcsIG9wdGlvbnM6IFJhd0F4aW9zUmVxdWVzdENvbmZpZyA9IHt9KTogUHJvbWlzZTxSZXF1ZXN0QXJncz4gPT4ge1xuICAgICAgICAgICAgLy8gdmVyaWZ5IHJlcXVpcmVkIHBhcmFtZXRlciAncmVkaXJlY3RVcmwnIGlzIG5vdCBudWxsIG9yIHVuZGVmaW5lZFxuICAgICAgICAgICAgYXNzZXJ0UGFyYW1FeGlzdHMoJ2F1dGhDb250cm9sbGVyR2l0aHViQ2FsbGJhY2snLCAncmVkaXJlY3RVcmwnLCByZWRpcmVjdFVybClcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUGF0aCA9IGAvYXV0aC9naXRodWIvY2FsbGJhY2tgO1xuICAgICAgICAgICAgLy8gdXNlIGR1bW15IGJhc2UgVVJMIHN0cmluZyBiZWNhdXNlIHRoZSBVUkwgY29uc3RydWN0b3Igb25seSBhY2NlcHRzIGFic29sdXRlIFVSTHMuXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclVybE9iaiA9IG5ldyBVUkwobG9jYWxWYXJQYXRoLCBEVU1NWV9CQVNFX1VSTCk7XG4gICAgICAgICAgICBsZXQgYmFzZU9wdGlvbnM7XG4gICAgICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgICAgIGJhc2VPcHRpb25zID0gY29uZmlndXJhdGlvbi5iYXNlT3B0aW9ucztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucyA9IHsgbWV0aG9kOiAnR0VUJywgLi4uYmFzZU9wdGlvbnMsIC4uLm9wdGlvbnN9O1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyID0ge30gYXMgYW55O1xuXG4gICAgICAgICAgICBpZiAocmVkaXJlY3RVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJbJ3JlZGlyZWN0VXJsJ10gPSByZWRpcmVjdFVybDtcbiAgICAgICAgICAgIH1cblxuXG4gICAgXG4gICAgICAgICAgICBzZXRTZWFyY2hQYXJhbXMobG9jYWxWYXJVcmxPYmosIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXIpO1xuICAgICAgICAgICAgbGV0IGhlYWRlcnNGcm9tQmFzZU9wdGlvbnMgPSBiYXNlT3B0aW9ucyAmJiBiYXNlT3B0aW9ucy5oZWFkZXJzID8gYmFzZU9wdGlvbnMuaGVhZGVycyA6IHt9O1xuICAgICAgICAgICAgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID0gey4uLmxvY2FsVmFySGVhZGVyUGFyYW1ldGVyLCAuLi5oZWFkZXJzRnJvbUJhc2VPcHRpb25zLCAuLi5vcHRpb25zLmhlYWRlcnN9O1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHVybDogdG9QYXRoU3RyaW5nKGxvY2FsVmFyVXJsT2JqKSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBsb2NhbFZhclJlcXVlc3RPcHRpb25zLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgYXV0aENvbnRyb2xsZXJHaXRodWJMb2dpbjogYXN5bmMgKG9wdGlvbnM6IFJhd0F4aW9zUmVxdWVzdENvbmZpZyA9IHt9KTogUHJvbWlzZTxSZXF1ZXN0QXJncz4gPT4ge1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJQYXRoID0gYC9hdXRoL2dpdGh1YmA7XG4gICAgICAgICAgICAvLyB1c2UgZHVtbXkgYmFzZSBVUkwgc3RyaW5nIGJlY2F1c2UgdGhlIFVSTCBjb25zdHJ1Y3RvciBvbmx5IGFjY2VwdHMgYWJzb2x1dGUgVVJMcy5cbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyVXJsT2JqID0gbmV3IFVSTChsb2NhbFZhclBhdGgsIERVTU1ZX0JBU0VfVVJMKTtcbiAgICAgICAgICAgIGxldCBiYXNlT3B0aW9ucztcbiAgICAgICAgICAgIGlmIChjb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgYmFzZU9wdGlvbnMgPSBjb25maWd1cmF0aW9uLmJhc2VPcHRpb25zO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclJlcXVlc3RPcHRpb25zID0geyBtZXRob2Q6ICdHRVQnLCAuLi5iYXNlT3B0aW9ucywgLi4ub3B0aW9uc307XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhckhlYWRlclBhcmFtZXRlciA9IHt9IGFzIGFueTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG5cblxuICAgIFxuICAgICAgICAgICAgc2V0U2VhcmNoUGFyYW1zKGxvY2FsVmFyVXJsT2JqLCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyKTtcbiAgICAgICAgICAgIGxldCBoZWFkZXJzRnJvbUJhc2VPcHRpb25zID0gYmFzZU9wdGlvbnMgJiYgYmFzZU9wdGlvbnMuaGVhZGVycyA/IGJhc2VPcHRpb25zLmhlYWRlcnMgOiB7fTtcbiAgICAgICAgICAgIGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9IHsuLi5sb2NhbFZhckhlYWRlclBhcmFtZXRlciwgLi4uaGVhZGVyc0Zyb21CYXNlT3B0aW9ucywgLi4ub3B0aW9ucy5oZWFkZXJzfTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB1cmw6IHRvUGF0aFN0cmluZyhsb2NhbFZhclVybE9iaiksXG4gICAgICAgICAgICAgICAgb3B0aW9uczogbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHtTaWduSW5EdG99IHNpZ25JbkR0byBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIGF1dGhDb250cm9sbGVyU2lnbkluOiBhc3luYyAoc2lnbkluRHRvOiBTaWduSW5EdG8sIG9wdGlvbnM6IFJhd0F4aW9zUmVxdWVzdENvbmZpZyA9IHt9KTogUHJvbWlzZTxSZXF1ZXN0QXJncz4gPT4ge1xuICAgICAgICAgICAgLy8gdmVyaWZ5IHJlcXVpcmVkIHBhcmFtZXRlciAnc2lnbkluRHRvJyBpcyBub3QgbnVsbCBvciB1bmRlZmluZWRcbiAgICAgICAgICAgIGFzc2VydFBhcmFtRXhpc3RzKCdhdXRoQ29udHJvbGxlclNpZ25JbicsICdzaWduSW5EdG8nLCBzaWduSW5EdG8pXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclBhdGggPSBgL2F1dGgvc2lnbmluYDtcbiAgICAgICAgICAgIC8vIHVzZSBkdW1teSBiYXNlIFVSTCBzdHJpbmcgYmVjYXVzZSB0aGUgVVJMIGNvbnN0cnVjdG9yIG9ubHkgYWNjZXB0cyBhYnNvbHV0ZSBVUkxzLlxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJVcmxPYmogPSBuZXcgVVJMKGxvY2FsVmFyUGF0aCwgRFVNTVlfQkFTRV9VUkwpO1xuICAgICAgICAgICAgbGV0IGJhc2VPcHRpb25zO1xuICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgICAgICBiYXNlT3B0aW9ucyA9IGNvbmZpZ3VyYXRpb24uYmFzZU9wdGlvbnM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMgPSB7IG1ldGhvZDogJ1BPU1QnLCAuLi5iYXNlT3B0aW9ucywgLi4ub3B0aW9uc307XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhckhlYWRlclBhcmFtZXRlciA9IHt9IGFzIGFueTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG5cblxuICAgIFxuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXJbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xuXG4gICAgICAgICAgICBzZXRTZWFyY2hQYXJhbXMobG9jYWxWYXJVcmxPYmosIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXIpO1xuICAgICAgICAgICAgbGV0IGhlYWRlcnNGcm9tQmFzZU9wdGlvbnMgPSBiYXNlT3B0aW9ucyAmJiBiYXNlT3B0aW9ucy5oZWFkZXJzID8gYmFzZU9wdGlvbnMuaGVhZGVycyA6IHt9O1xuICAgICAgICAgICAgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID0gey4uLmxvY2FsVmFySGVhZGVyUGFyYW1ldGVyLCAuLi5oZWFkZXJzRnJvbUJhc2VPcHRpb25zLCAuLi5vcHRpb25zLmhlYWRlcnN9O1xuICAgICAgICAgICAgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucy5kYXRhID0gc2VyaWFsaXplRGF0YUlmTmVlZGVkKHNpZ25JbkR0bywgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucywgY29uZmlndXJhdGlvbilcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB1cmw6IHRvUGF0aFN0cmluZyhsb2NhbFZhclVybE9iaiksXG4gICAgICAgICAgICAgICAgb3B0aW9uczogbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHtTaWduVXBEdG99IHNpZ25VcER0byBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIGF1dGhDb250cm9sbGVyU2lnblVwOiBhc3luYyAoc2lnblVwRHRvOiBTaWduVXBEdG8sIG9wdGlvbnM6IFJhd0F4aW9zUmVxdWVzdENvbmZpZyA9IHt9KTogUHJvbWlzZTxSZXF1ZXN0QXJncz4gPT4ge1xuICAgICAgICAgICAgLy8gdmVyaWZ5IHJlcXVpcmVkIHBhcmFtZXRlciAnc2lnblVwRHRvJyBpcyBub3QgbnVsbCBvciB1bmRlZmluZWRcbiAgICAgICAgICAgIGFzc2VydFBhcmFtRXhpc3RzKCdhdXRoQ29udHJvbGxlclNpZ25VcCcsICdzaWduVXBEdG8nLCBzaWduVXBEdG8pXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclBhdGggPSBgL2F1dGgvc2lnbnVwYDtcbiAgICAgICAgICAgIC8vIHVzZSBkdW1teSBiYXNlIFVSTCBzdHJpbmcgYmVjYXVzZSB0aGUgVVJMIGNvbnN0cnVjdG9yIG9ubHkgYWNjZXB0cyBhYnNvbHV0ZSBVUkxzLlxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJVcmxPYmogPSBuZXcgVVJMKGxvY2FsVmFyUGF0aCwgRFVNTVlfQkFTRV9VUkwpO1xuICAgICAgICAgICAgbGV0IGJhc2VPcHRpb25zO1xuICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgICAgICBiYXNlT3B0aW9ucyA9IGNvbmZpZ3VyYXRpb24uYmFzZU9wdGlvbnM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMgPSB7IG1ldGhvZDogJ1BPU1QnLCAuLi5iYXNlT3B0aW9ucywgLi4ub3B0aW9uc307XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhckhlYWRlclBhcmFtZXRlciA9IHt9IGFzIGFueTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG5cblxuICAgIFxuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXJbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xuXG4gICAgICAgICAgICBzZXRTZWFyY2hQYXJhbXMobG9jYWxWYXJVcmxPYmosIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXIpO1xuICAgICAgICAgICAgbGV0IGhlYWRlcnNGcm9tQmFzZU9wdGlvbnMgPSBiYXNlT3B0aW9ucyAmJiBiYXNlT3B0aW9ucy5oZWFkZXJzID8gYmFzZU9wdGlvbnMuaGVhZGVycyA6IHt9O1xuICAgICAgICAgICAgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID0gey4uLmxvY2FsVmFySGVhZGVyUGFyYW1ldGVyLCAuLi5oZWFkZXJzRnJvbUJhc2VPcHRpb25zLCAuLi5vcHRpb25zLmhlYWRlcnN9O1xuICAgICAgICAgICAgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucy5kYXRhID0gc2VyaWFsaXplRGF0YUlmTmVlZGVkKHNpZ25VcER0bywgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucywgY29uZmlndXJhdGlvbilcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB1cmw6IHRvUGF0aFN0cmluZyhsb2NhbFZhclVybE9iaiksXG4gICAgICAgICAgICAgICAgb3B0aW9uczogbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgfVxufTtcblxuLyoqXG4gKiBBdXRoQXBpIC0gZnVuY3Rpb25hbCBwcm9ncmFtbWluZyBpbnRlcmZhY2VcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNvbnN0IEF1dGhBcGlGcCA9IGZ1bmN0aW9uKGNvbmZpZ3VyYXRpb24/OiBDb25maWd1cmF0aW9uKSB7XG4gICAgY29uc3QgbG9jYWxWYXJBeGlvc1BhcmFtQ3JlYXRvciA9IEF1dGhBcGlBeGlvc1BhcmFtQ3JlYXRvcihjb25maWd1cmF0aW9uKVxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlZGlyZWN0VXJsIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgYXN5bmMgYXV0aENvbnRyb2xsZXJHaXRodWJDYWxsYmFjayhyZWRpcmVjdFVybDogc3RyaW5nLCBvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKTogUHJvbWlzZTwoYXhpb3M/OiBBeGlvc0luc3RhbmNlLCBiYXNlUGF0aD86IHN0cmluZykgPT4gQXhpb3NQcm9taXNlPHZvaWQ+PiB7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhckF4aW9zQXJncyA9IGF3YWl0IGxvY2FsVmFyQXhpb3NQYXJhbUNyZWF0b3IuYXV0aENvbnRyb2xsZXJHaXRodWJDYWxsYmFjayhyZWRpcmVjdFVybCwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckluZGV4ID0gY29uZmlndXJhdGlvbj8uc2VydmVySW5kZXggPz8gMDtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyT3BlcmF0aW9uU2VydmVyQmFzZVBhdGggPSBvcGVyYXRpb25TZXJ2ZXJNYXBbJ0F1dGhBcGkuYXV0aENvbnRyb2xsZXJHaXRodWJDYWxsYmFjayddPy5bbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJJbmRleF0/LnVybDtcbiAgICAgICAgICAgIHJldHVybiAoYXhpb3MsIGJhc2VQYXRoKSA9PiBjcmVhdGVSZXF1ZXN0RnVuY3Rpb24obG9jYWxWYXJBeGlvc0FyZ3MsIGdsb2JhbEF4aW9zLCBCQVNFX1BBVEgsIGNvbmZpZ3VyYXRpb24pKGF4aW9zLCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckJhc2VQYXRoIHx8IGJhc2VQYXRoKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgYXN5bmMgYXV0aENvbnRyb2xsZXJHaXRodWJMb2dpbihvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKTogUHJvbWlzZTwoYXhpb3M/OiBBeGlvc0luc3RhbmNlLCBiYXNlUGF0aD86IHN0cmluZykgPT4gQXhpb3NQcm9taXNlPHZvaWQ+PiB7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhckF4aW9zQXJncyA9IGF3YWl0IGxvY2FsVmFyQXhpb3NQYXJhbUNyZWF0b3IuYXV0aENvbnRyb2xsZXJHaXRodWJMb2dpbihvcHRpb25zKTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyT3BlcmF0aW9uU2VydmVySW5kZXggPSBjb25maWd1cmF0aW9uPy5zZXJ2ZXJJbmRleCA/PyAwO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJCYXNlUGF0aCA9IG9wZXJhdGlvblNlcnZlck1hcFsnQXV0aEFwaS5hdXRoQ29udHJvbGxlckdpdGh1YkxvZ2luJ10/Lltsb2NhbFZhck9wZXJhdGlvblNlcnZlckluZGV4XT8udXJsO1xuICAgICAgICAgICAgcmV0dXJuIChheGlvcywgYmFzZVBhdGgpID0+IGNyZWF0ZVJlcXVlc3RGdW5jdGlvbihsb2NhbFZhckF4aW9zQXJncywgZ2xvYmFsQXhpb3MsIEJBU0VfUEFUSCwgY29uZmlndXJhdGlvbikoYXhpb3MsIGxvY2FsVmFyT3BlcmF0aW9uU2VydmVyQmFzZVBhdGggfHwgYmFzZVBhdGgpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7U2lnbkluRHRvfSBzaWduSW5EdG8gXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBhc3luYyBhdXRoQ29udHJvbGxlclNpZ25JbihzaWduSW5EdG86IFNpZ25JbkR0bywgb3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IFByb21pc2U8KGF4aW9zPzogQXhpb3NJbnN0YW5jZSwgYmFzZVBhdGg/OiBzdHJpbmcpID0+IEF4aW9zUHJvbWlzZTxTaWduSW5SZXNwb25zZT4+IHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyQXhpb3NBcmdzID0gYXdhaXQgbG9jYWxWYXJBeGlvc1BhcmFtQ3JlYXRvci5hdXRoQ29udHJvbGxlclNpZ25JbihzaWduSW5EdG8sIG9wdGlvbnMpO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJJbmRleCA9IGNvbmZpZ3VyYXRpb24/LnNlcnZlckluZGV4ID8/IDA7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckJhc2VQYXRoID0gb3BlcmF0aW9uU2VydmVyTWFwWydBdXRoQXBpLmF1dGhDb250cm9sbGVyU2lnbkluJ10/Lltsb2NhbFZhck9wZXJhdGlvblNlcnZlckluZGV4XT8udXJsO1xuICAgICAgICAgICAgcmV0dXJuIChheGlvcywgYmFzZVBhdGgpID0+IGNyZWF0ZVJlcXVlc3RGdW5jdGlvbihsb2NhbFZhckF4aW9zQXJncywgZ2xvYmFsQXhpb3MsIEJBU0VfUEFUSCwgY29uZmlndXJhdGlvbikoYXhpb3MsIGxvY2FsVmFyT3BlcmF0aW9uU2VydmVyQmFzZVBhdGggfHwgYmFzZVBhdGgpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7U2lnblVwRHRvfSBzaWduVXBEdG8gXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBhc3luYyBhdXRoQ29udHJvbGxlclNpZ25VcChzaWduVXBEdG86IFNpZ25VcER0bywgb3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IFByb21pc2U8KGF4aW9zPzogQXhpb3NJbnN0YW5jZSwgYmFzZVBhdGg/OiBzdHJpbmcpID0+IEF4aW9zUHJvbWlzZTxTaWduVXBSZXNwb25zZT4+IHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyQXhpb3NBcmdzID0gYXdhaXQgbG9jYWxWYXJBeGlvc1BhcmFtQ3JlYXRvci5hdXRoQ29udHJvbGxlclNpZ25VcChzaWduVXBEdG8sIG9wdGlvbnMpO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJJbmRleCA9IGNvbmZpZ3VyYXRpb24/LnNlcnZlckluZGV4ID8/IDA7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckJhc2VQYXRoID0gb3BlcmF0aW9uU2VydmVyTWFwWydBdXRoQXBpLmF1dGhDb250cm9sbGVyU2lnblVwJ10/Lltsb2NhbFZhck9wZXJhdGlvblNlcnZlckluZGV4XT8udXJsO1xuICAgICAgICAgICAgcmV0dXJuIChheGlvcywgYmFzZVBhdGgpID0+IGNyZWF0ZVJlcXVlc3RGdW5jdGlvbihsb2NhbFZhckF4aW9zQXJncywgZ2xvYmFsQXhpb3MsIEJBU0VfUEFUSCwgY29uZmlndXJhdGlvbikoYXhpb3MsIGxvY2FsVmFyT3BlcmF0aW9uU2VydmVyQmFzZVBhdGggfHwgYmFzZVBhdGgpO1xuICAgICAgICB9LFxuICAgIH1cbn07XG5cbi8qKlxuICogQXV0aEFwaSAtIGZhY3RvcnkgaW50ZXJmYWNlXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBBdXRoQXBpRmFjdG9yeSA9IGZ1bmN0aW9uIChjb25maWd1cmF0aW9uPzogQ29uZmlndXJhdGlvbiwgYmFzZVBhdGg/OiBzdHJpbmcsIGF4aW9zPzogQXhpb3NJbnN0YW5jZSkge1xuICAgIGNvbnN0IGxvY2FsVmFyRnAgPSBBdXRoQXBpRnAoY29uZmlndXJhdGlvbilcbiAgICByZXR1cm4ge1xuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZWRpcmVjdFVybCBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIGF1dGhDb250cm9sbGVyR2l0aHViQ2FsbGJhY2socmVkaXJlY3RVcmw6IHN0cmluZywgb3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IEF4aW9zUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxWYXJGcC5hdXRoQ29udHJvbGxlckdpdGh1YkNhbGxiYWNrKHJlZGlyZWN0VXJsLCBvcHRpb25zKS50aGVuKChyZXF1ZXN0KSA9PiByZXF1ZXN0KGF4aW9zLCBiYXNlUGF0aCkpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBhdXRoQ29udHJvbGxlckdpdGh1YkxvZ2luKG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpOiBBeGlvc1Byb21pc2U8dm9pZD4ge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsVmFyRnAuYXV0aENvbnRyb2xsZXJHaXRodWJMb2dpbihvcHRpb25zKS50aGVuKChyZXF1ZXN0KSA9PiByZXF1ZXN0KGF4aW9zLCBiYXNlUGF0aCkpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7U2lnbkluRHRvfSBzaWduSW5EdG8gXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBhdXRoQ29udHJvbGxlclNpZ25JbihzaWduSW5EdG86IFNpZ25JbkR0bywgb3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IEF4aW9zUHJvbWlzZTxTaWduSW5SZXNwb25zZT4ge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsVmFyRnAuYXV0aENvbnRyb2xsZXJTaWduSW4oc2lnbkluRHRvLCBvcHRpb25zKS50aGVuKChyZXF1ZXN0KSA9PiByZXF1ZXN0KGF4aW9zLCBiYXNlUGF0aCkpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7U2lnblVwRHRvfSBzaWduVXBEdG8gXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBhdXRoQ29udHJvbGxlclNpZ25VcChzaWduVXBEdG86IFNpZ25VcER0bywgb3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IEF4aW9zUHJvbWlzZTxTaWduVXBSZXNwb25zZT4ge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsVmFyRnAuYXV0aENvbnRyb2xsZXJTaWduVXAoc2lnblVwRHRvLCBvcHRpb25zKS50aGVuKChyZXF1ZXN0KSA9PiByZXF1ZXN0KGF4aW9zLCBiYXNlUGF0aCkpO1xuICAgICAgICB9LFxuICAgIH07XG59O1xuXG4vKipcbiAqIEF1dGhBcGkgLSBvYmplY3Qtb3JpZW50ZWQgaW50ZXJmYWNlXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgQXV0aEFwaVxuICogQGV4dGVuZHMge0Jhc2VBUEl9XG4gKi9cbmV4cG9ydCBjbGFzcyBBdXRoQXBpIGV4dGVuZHMgQmFzZUFQSSB7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHJlZGlyZWN0VXJsIFxuICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgKiBAbWVtYmVyb2YgQXV0aEFwaVxuICAgICAqL1xuICAgIHB1YmxpYyBhdXRoQ29udHJvbGxlckdpdGh1YkNhbGxiYWNrKHJlZGlyZWN0VXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpIHtcbiAgICAgICAgcmV0dXJuIEF1dGhBcGlGcCh0aGlzLmNvbmZpZ3VyYXRpb24pLmF1dGhDb250cm9sbGVyR2l0aHViQ2FsbGJhY2socmVkaXJlY3RVcmwsIG9wdGlvbnMpLnRoZW4oKHJlcXVlc3QpID0+IHJlcXVlc3QodGhpcy5heGlvcywgdGhpcy5iYXNlUGF0aCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgKiBAbWVtYmVyb2YgQXV0aEFwaVxuICAgICAqL1xuICAgIHB1YmxpYyBhdXRoQ29udHJvbGxlckdpdGh1YkxvZ2luKG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpIHtcbiAgICAgICAgcmV0dXJuIEF1dGhBcGlGcCh0aGlzLmNvbmZpZ3VyYXRpb24pLmF1dGhDb250cm9sbGVyR2l0aHViTG9naW4ob3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdCh0aGlzLmF4aW9zLCB0aGlzLmJhc2VQYXRoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHBhcmFtIHtTaWduSW5EdG99IHNpZ25JbkR0byBcbiAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICogQG1lbWJlcm9mIEF1dGhBcGlcbiAgICAgKi9cbiAgICBwdWJsaWMgYXV0aENvbnRyb2xsZXJTaWduSW4oc2lnbkluRHRvOiBTaWduSW5EdG8sIG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpIHtcbiAgICAgICAgcmV0dXJuIEF1dGhBcGlGcCh0aGlzLmNvbmZpZ3VyYXRpb24pLmF1dGhDb250cm9sbGVyU2lnbkluKHNpZ25JbkR0bywgb3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdCh0aGlzLmF4aW9zLCB0aGlzLmJhc2VQYXRoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHBhcmFtIHtTaWduVXBEdG99IHNpZ25VcER0byBcbiAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICogQG1lbWJlcm9mIEF1dGhBcGlcbiAgICAgKi9cbiAgICBwdWJsaWMgYXV0aENvbnRyb2xsZXJTaWduVXAoc2lnblVwRHRvOiBTaWduVXBEdG8sIG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpIHtcbiAgICAgICAgcmV0dXJuIEF1dGhBcGlGcCh0aGlzLmNvbmZpZ3VyYXRpb24pLmF1dGhDb250cm9sbGVyU2lnblVwKHNpZ25VcER0bywgb3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdCh0aGlzLmF4aW9zLCB0aGlzLmJhc2VQYXRoKSk7XG4gICAgfVxufVxuXG5cblxuLyoqXG4gKiBGZWVkYmFja0FwaSAtIGF4aW9zIHBhcmFtZXRlciBjcmVhdG9yXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBGZWVkYmFja0FwaUF4aW9zUGFyYW1DcmVhdG9yID0gZnVuY3Rpb24gKGNvbmZpZ3VyYXRpb24/OiBDb25maWd1cmF0aW9uKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0ge0ZlZWRiYWNrQ3JlYXRlRHRvfSBmZWVkYmFja0NyZWF0ZUR0byBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIGZlZWRiYWNrQ29udHJvbGxlckNyZWF0ZTogYXN5bmMgKGZlZWRiYWNrQ3JlYXRlRHRvOiBGZWVkYmFja0NyZWF0ZUR0bywgb3B0aW9uczogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnID0ge30pOiBQcm9taXNlPFJlcXVlc3RBcmdzPiA9PiB7XG4gICAgICAgICAgICAvLyB2ZXJpZnkgcmVxdWlyZWQgcGFyYW1ldGVyICdmZWVkYmFja0NyZWF0ZUR0bycgaXMgbm90IG51bGwgb3IgdW5kZWZpbmVkXG4gICAgICAgICAgICBhc3NlcnRQYXJhbUV4aXN0cygnZmVlZGJhY2tDb250cm9sbGVyQ3JlYXRlJywgJ2ZlZWRiYWNrQ3JlYXRlRHRvJywgZmVlZGJhY2tDcmVhdGVEdG8pXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclBhdGggPSBgL2ZlZWRiYWNrYDtcbiAgICAgICAgICAgIC8vIHVzZSBkdW1teSBiYXNlIFVSTCBzdHJpbmcgYmVjYXVzZSB0aGUgVVJMIGNvbnN0cnVjdG9yIG9ubHkgYWNjZXB0cyBhYnNvbHV0ZSBVUkxzLlxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJVcmxPYmogPSBuZXcgVVJMKGxvY2FsVmFyUGF0aCwgRFVNTVlfQkFTRV9VUkwpO1xuICAgICAgICAgICAgbGV0IGJhc2VPcHRpb25zO1xuICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgICAgICBiYXNlT3B0aW9ucyA9IGNvbmZpZ3VyYXRpb24uYmFzZU9wdGlvbnM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMgPSB7IG1ldGhvZDogJ1BPU1QnLCAuLi5iYXNlT3B0aW9ucywgLi4ub3B0aW9uc307XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhckhlYWRlclBhcmFtZXRlciA9IHt9IGFzIGFueTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG5cblxuICAgIFxuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXJbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xuXG4gICAgICAgICAgICBzZXRTZWFyY2hQYXJhbXMobG9jYWxWYXJVcmxPYmosIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXIpO1xuICAgICAgICAgICAgbGV0IGhlYWRlcnNGcm9tQmFzZU9wdGlvbnMgPSBiYXNlT3B0aW9ucyAmJiBiYXNlT3B0aW9ucy5oZWFkZXJzID8gYmFzZU9wdGlvbnMuaGVhZGVycyA6IHt9O1xuICAgICAgICAgICAgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID0gey4uLmxvY2FsVmFySGVhZGVyUGFyYW1ldGVyLCAuLi5oZWFkZXJzRnJvbUJhc2VPcHRpb25zLCAuLi5vcHRpb25zLmhlYWRlcnN9O1xuICAgICAgICAgICAgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucy5kYXRhID0gc2VyaWFsaXplRGF0YUlmTmVlZGVkKGZlZWRiYWNrQ3JlYXRlRHRvLCBsb2NhbFZhclJlcXVlc3RPcHRpb25zLCBjb25maWd1cmF0aW9uKVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHVybDogdG9QYXRoU3RyaW5nKGxvY2FsVmFyVXJsT2JqKSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBsb2NhbFZhclJlcXVlc3RPcHRpb25zLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgXG4gICAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5IFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgZmVlZGJhY2tDb250cm9sbGVyQ3JlYXRlUmVwbHk6IGFzeW5jIChpZDogc3RyaW5nLCBib2R5OiBvYmplY3QsIG9wdGlvbnM6IFJhd0F4aW9zUmVxdWVzdENvbmZpZyA9IHt9KTogUHJvbWlzZTxSZXF1ZXN0QXJncz4gPT4ge1xuICAgICAgICAgICAgLy8gdmVyaWZ5IHJlcXVpcmVkIHBhcmFtZXRlciAnaWQnIGlzIG5vdCBudWxsIG9yIHVuZGVmaW5lZFxuICAgICAgICAgICAgYXNzZXJ0UGFyYW1FeGlzdHMoJ2ZlZWRiYWNrQ29udHJvbGxlckNyZWF0ZVJlcGx5JywgJ2lkJywgaWQpXG4gICAgICAgICAgICAvLyB2ZXJpZnkgcmVxdWlyZWQgcGFyYW1ldGVyICdib2R5JyBpcyBub3QgbnVsbCBvciB1bmRlZmluZWRcbiAgICAgICAgICAgIGFzc2VydFBhcmFtRXhpc3RzKCdmZWVkYmFja0NvbnRyb2xsZXJDcmVhdGVSZXBseScsICdib2R5JywgYm9keSlcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUGF0aCA9IGAvZmVlZGJhY2sve2lkfS9yZXBsaWVzYFxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKGB7JHtcImlkXCJ9fWAsIGVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoaWQpKSk7XG4gICAgICAgICAgICAvLyB1c2UgZHVtbXkgYmFzZSBVUkwgc3RyaW5nIGJlY2F1c2UgdGhlIFVSTCBjb25zdHJ1Y3RvciBvbmx5IGFjY2VwdHMgYWJzb2x1dGUgVVJMcy5cbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyVXJsT2JqID0gbmV3IFVSTChsb2NhbFZhclBhdGgsIERVTU1ZX0JBU0VfVVJMKTtcbiAgICAgICAgICAgIGxldCBiYXNlT3B0aW9ucztcbiAgICAgICAgICAgIGlmIChjb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgYmFzZU9wdGlvbnMgPSBjb25maWd1cmF0aW9uLmJhc2VPcHRpb25zO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclJlcXVlc3RPcHRpb25zID0geyBtZXRob2Q6ICdQT1NUJywgLi4uYmFzZU9wdGlvbnMsIC4uLm9wdGlvbnN9O1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyID0ge30gYXMgYW55O1xuXG5cbiAgICBcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVyUGFyYW1ldGVyWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29uJztcblxuICAgICAgICAgICAgc2V0U2VhcmNoUGFyYW1zKGxvY2FsVmFyVXJsT2JqLCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyKTtcbiAgICAgICAgICAgIGxldCBoZWFkZXJzRnJvbUJhc2VPcHRpb25zID0gYmFzZU9wdGlvbnMgJiYgYmFzZU9wdGlvbnMuaGVhZGVycyA/IGJhc2VPcHRpb25zLmhlYWRlcnMgOiB7fTtcbiAgICAgICAgICAgIGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9IHsuLi5sb2NhbFZhckhlYWRlclBhcmFtZXRlciwgLi4uaGVhZGVyc0Zyb21CYXNlT3B0aW9ucywgLi4ub3B0aW9ucy5oZWFkZXJzfTtcbiAgICAgICAgICAgIGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMuZGF0YSA9IHNlcmlhbGl6ZURhdGFJZk5lZWRlZChib2R5LCBsb2NhbFZhclJlcXVlc3RPcHRpb25zLCBjb25maWd1cmF0aW9uKVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHVybDogdG9QYXRoU3RyaW5nKGxvY2FsVmFyVXJsT2JqKSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBsb2NhbFZhclJlcXVlc3RPcHRpb25zLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBmZWVkYmFja0NvbnRyb2xsZXJEZWxldGU6IGFzeW5jIChpZDogc3RyaW5nLCBvcHRpb25zOiBSYXdBeGlvc1JlcXVlc3RDb25maWcgPSB7fSk6IFByb21pc2U8UmVxdWVzdEFyZ3M+ID0+IHtcbiAgICAgICAgICAgIC8vIHZlcmlmeSByZXF1aXJlZCBwYXJhbWV0ZXIgJ2lkJyBpcyBub3QgbnVsbCBvciB1bmRlZmluZWRcbiAgICAgICAgICAgIGFzc2VydFBhcmFtRXhpc3RzKCdmZWVkYmFja0NvbnRyb2xsZXJEZWxldGUnLCAnaWQnLCBpZClcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUGF0aCA9IGAvZmVlZGJhY2sve2lkfWBcbiAgICAgICAgICAgICAgICAucmVwbGFjZShgeyR7XCJpZFwifX1gLCBlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKGlkKSkpO1xuICAgICAgICAgICAgLy8gdXNlIGR1bW15IGJhc2UgVVJMIHN0cmluZyBiZWNhdXNlIHRoZSBVUkwgY29uc3RydWN0b3Igb25seSBhY2NlcHRzIGFic29sdXRlIFVSTHMuXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclVybE9iaiA9IG5ldyBVUkwobG9jYWxWYXJQYXRoLCBEVU1NWV9CQVNFX1VSTCk7XG4gICAgICAgICAgICBsZXQgYmFzZU9wdGlvbnM7XG4gICAgICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgICAgIGJhc2VPcHRpb25zID0gY29uZmlndXJhdGlvbi5iYXNlT3B0aW9ucztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucyA9IHsgbWV0aG9kOiAnREVMRVRFJywgLi4uYmFzZU9wdGlvbnMsIC4uLm9wdGlvbnN9O1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyID0ge30gYXMgYW55O1xuXG5cbiAgICBcbiAgICAgICAgICAgIHNldFNlYXJjaFBhcmFtcyhsb2NhbFZhclVybE9iaiwgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcik7XG4gICAgICAgICAgICBsZXQgaGVhZGVyc0Zyb21CYXNlT3B0aW9ucyA9IGJhc2VPcHRpb25zICYmIGJhc2VPcHRpb25zLmhlYWRlcnMgPyBiYXNlT3B0aW9ucy5oZWFkZXJzIDoge307XG4gICAgICAgICAgICBsb2NhbFZhclJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPSB7Li4ubG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIsIC4uLmhlYWRlcnNGcm9tQmFzZU9wdGlvbnMsIC4uLm9wdGlvbnMuaGVhZGVyc307XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdXJsOiB0b1BhdGhTdHJpbmcobG9jYWxWYXJVcmxPYmopLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9qZWN0SWQgXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBmZWVkYmFja0NvbnRyb2xsZXJGaW5kRmVlZGJhY2tCeVByb2plY3RJZDogYXN5bmMgKHByb2plY3RJZDogc3RyaW5nLCBvcHRpb25zOiBSYXdBeGlvc1JlcXVlc3RDb25maWcgPSB7fSk6IFByb21pc2U8UmVxdWVzdEFyZ3M+ID0+IHtcbiAgICAgICAgICAgIC8vIHZlcmlmeSByZXF1aXJlZCBwYXJhbWV0ZXIgJ3Byb2plY3RJZCcgaXMgbm90IG51bGwgb3IgdW5kZWZpbmVkXG4gICAgICAgICAgICBhc3NlcnRQYXJhbUV4aXN0cygnZmVlZGJhY2tDb250cm9sbGVyRmluZEZlZWRiYWNrQnlQcm9qZWN0SWQnLCAncHJvamVjdElkJywgcHJvamVjdElkKVxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJQYXRoID0gYC9mZWVkYmFjay97cHJvamVjdElkfWBcbiAgICAgICAgICAgICAgICAucmVwbGFjZShgeyR7XCJwcm9qZWN0SWRcIn19YCwgZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyhwcm9qZWN0SWQpKSk7XG4gICAgICAgICAgICAvLyB1c2UgZHVtbXkgYmFzZSBVUkwgc3RyaW5nIGJlY2F1c2UgdGhlIFVSTCBjb25zdHJ1Y3RvciBvbmx5IGFjY2VwdHMgYWJzb2x1dGUgVVJMcy5cbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyVXJsT2JqID0gbmV3IFVSTChsb2NhbFZhclBhdGgsIERVTU1ZX0JBU0VfVVJMKTtcbiAgICAgICAgICAgIGxldCBiYXNlT3B0aW9ucztcbiAgICAgICAgICAgIGlmIChjb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgYmFzZU9wdGlvbnMgPSBjb25maWd1cmF0aW9uLmJhc2VPcHRpb25zO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclJlcXVlc3RPcHRpb25zID0geyBtZXRob2Q6ICdHRVQnLCAuLi5iYXNlT3B0aW9ucywgLi4ub3B0aW9uc307XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhckhlYWRlclBhcmFtZXRlciA9IHt9IGFzIGFueTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG5cblxuICAgIFxuICAgICAgICAgICAgc2V0U2VhcmNoUGFyYW1zKGxvY2FsVmFyVXJsT2JqLCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyKTtcbiAgICAgICAgICAgIGxldCBoZWFkZXJzRnJvbUJhc2VPcHRpb25zID0gYmFzZU9wdGlvbnMgJiYgYmFzZU9wdGlvbnMuaGVhZGVycyA/IGJhc2VPcHRpb25zLmhlYWRlcnMgOiB7fTtcbiAgICAgICAgICAgIGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9IHsuLi5sb2NhbFZhckhlYWRlclBhcmFtZXRlciwgLi4uaGVhZGVyc0Zyb21CYXNlT3B0aW9ucywgLi4ub3B0aW9ucy5oZWFkZXJzfTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB1cmw6IHRvUGF0aFN0cmluZyhsb2NhbFZhclVybE9iaiksXG4gICAgICAgICAgICAgICAgb3B0aW9uczogbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFxuICAgICAgICAgKiBAcGFyYW0ge0ZlZWRiYWNrVXBkYXRlRHRvfSBmZWVkYmFja1VwZGF0ZUR0byBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIGZlZWRiYWNrQ29udHJvbGxlclVwZGF0ZTogYXN5bmMgKGlkOiBzdHJpbmcsIGZlZWRiYWNrVXBkYXRlRHRvOiBGZWVkYmFja1VwZGF0ZUR0bywgb3B0aW9uczogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnID0ge30pOiBQcm9taXNlPFJlcXVlc3RBcmdzPiA9PiB7XG4gICAgICAgICAgICAvLyB2ZXJpZnkgcmVxdWlyZWQgcGFyYW1ldGVyICdpZCcgaXMgbm90IG51bGwgb3IgdW5kZWZpbmVkXG4gICAgICAgICAgICBhc3NlcnRQYXJhbUV4aXN0cygnZmVlZGJhY2tDb250cm9sbGVyVXBkYXRlJywgJ2lkJywgaWQpXG4gICAgICAgICAgICAvLyB2ZXJpZnkgcmVxdWlyZWQgcGFyYW1ldGVyICdmZWVkYmFja1VwZGF0ZUR0bycgaXMgbm90IG51bGwgb3IgdW5kZWZpbmVkXG4gICAgICAgICAgICBhc3NlcnRQYXJhbUV4aXN0cygnZmVlZGJhY2tDb250cm9sbGVyVXBkYXRlJywgJ2ZlZWRiYWNrVXBkYXRlRHRvJywgZmVlZGJhY2tVcGRhdGVEdG8pXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclBhdGggPSBgL2ZlZWRiYWNrL3tpZH1gXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoYHske1wiaWRcIn19YCwgZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyhpZCkpKTtcbiAgICAgICAgICAgIC8vIHVzZSBkdW1teSBiYXNlIFVSTCBzdHJpbmcgYmVjYXVzZSB0aGUgVVJMIGNvbnN0cnVjdG9yIG9ubHkgYWNjZXB0cyBhYnNvbHV0ZSBVUkxzLlxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJVcmxPYmogPSBuZXcgVVJMKGxvY2FsVmFyUGF0aCwgRFVNTVlfQkFTRV9VUkwpO1xuICAgICAgICAgICAgbGV0IGJhc2VPcHRpb25zO1xuICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgICAgICBiYXNlT3B0aW9ucyA9IGNvbmZpZ3VyYXRpb24uYmFzZU9wdGlvbnM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMgPSB7IG1ldGhvZDogJ1BBVENIJywgLi4uYmFzZU9wdGlvbnMsIC4uLm9wdGlvbnN9O1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyID0ge30gYXMgYW55O1xuXG5cbiAgICBcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVyUGFyYW1ldGVyWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29uJztcblxuICAgICAgICAgICAgc2V0U2VhcmNoUGFyYW1zKGxvY2FsVmFyVXJsT2JqLCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyKTtcbiAgICAgICAgICAgIGxldCBoZWFkZXJzRnJvbUJhc2VPcHRpb25zID0gYmFzZU9wdGlvbnMgJiYgYmFzZU9wdGlvbnMuaGVhZGVycyA/IGJhc2VPcHRpb25zLmhlYWRlcnMgOiB7fTtcbiAgICAgICAgICAgIGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9IHsuLi5sb2NhbFZhckhlYWRlclBhcmFtZXRlciwgLi4uaGVhZGVyc0Zyb21CYXNlT3B0aW9ucywgLi4ub3B0aW9ucy5oZWFkZXJzfTtcbiAgICAgICAgICAgIGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMuZGF0YSA9IHNlcmlhbGl6ZURhdGFJZk5lZWRlZChmZWVkYmFja1VwZGF0ZUR0bywgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucywgY29uZmlndXJhdGlvbilcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB1cmw6IHRvUGF0aFN0cmluZyhsb2NhbFZhclVybE9iaiksXG4gICAgICAgICAgICAgICAgb3B0aW9uczogbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgfVxufTtcblxuLyoqXG4gKiBGZWVkYmFja0FwaSAtIGZ1bmN0aW9uYWwgcHJvZ3JhbW1pbmcgaW50ZXJmYWNlXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBGZWVkYmFja0FwaUZwID0gZnVuY3Rpb24oY29uZmlndXJhdGlvbj86IENvbmZpZ3VyYXRpb24pIHtcbiAgICBjb25zdCBsb2NhbFZhckF4aW9zUGFyYW1DcmVhdG9yID0gRmVlZGJhY2tBcGlBeGlvc1BhcmFtQ3JlYXRvcihjb25maWd1cmF0aW9uKVxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHtGZWVkYmFja0NyZWF0ZUR0b30gZmVlZGJhY2tDcmVhdGVEdG8gXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBhc3luYyBmZWVkYmFja0NvbnRyb2xsZXJDcmVhdGUoZmVlZGJhY2tDcmVhdGVEdG86IEZlZWRiYWNrQ3JlYXRlRHRvLCBvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKTogUHJvbWlzZTwoYXhpb3M/OiBBeGlvc0luc3RhbmNlLCBiYXNlUGF0aD86IHN0cmluZykgPT4gQXhpb3NQcm9taXNlPHZvaWQ+PiB7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhckF4aW9zQXJncyA9IGF3YWl0IGxvY2FsVmFyQXhpb3NQYXJhbUNyZWF0b3IuZmVlZGJhY2tDb250cm9sbGVyQ3JlYXRlKGZlZWRiYWNrQ3JlYXRlRHRvLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyT3BlcmF0aW9uU2VydmVySW5kZXggPSBjb25maWd1cmF0aW9uPy5zZXJ2ZXJJbmRleCA/PyAwO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJCYXNlUGF0aCA9IG9wZXJhdGlvblNlcnZlck1hcFsnRmVlZGJhY2tBcGkuZmVlZGJhY2tDb250cm9sbGVyQ3JlYXRlJ10/Lltsb2NhbFZhck9wZXJhdGlvblNlcnZlckluZGV4XT8udXJsO1xuICAgICAgICAgICAgcmV0dXJuIChheGlvcywgYmFzZVBhdGgpID0+IGNyZWF0ZVJlcXVlc3RGdW5jdGlvbihsb2NhbFZhckF4aW9zQXJncywgZ2xvYmFsQXhpb3MsIEJBU0VfUEFUSCwgY29uZmlndXJhdGlvbikoYXhpb3MsIGxvY2FsVmFyT3BlcmF0aW9uU2VydmVyQmFzZVBhdGggfHwgYmFzZVBhdGgpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBcbiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IGJvZHkgXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBhc3luYyBmZWVkYmFja0NvbnRyb2xsZXJDcmVhdGVSZXBseShpZDogc3RyaW5nLCBib2R5OiBvYmplY3QsIG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpOiBQcm9taXNlPChheGlvcz86IEF4aW9zSW5zdGFuY2UsIGJhc2VQYXRoPzogc3RyaW5nKSA9PiBBeGlvc1Byb21pc2U8dm9pZD4+IHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyQXhpb3NBcmdzID0gYXdhaXQgbG9jYWxWYXJBeGlvc1BhcmFtQ3JlYXRvci5mZWVkYmFja0NvbnRyb2xsZXJDcmVhdGVSZXBseShpZCwgYm9keSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckluZGV4ID0gY29uZmlndXJhdGlvbj8uc2VydmVySW5kZXggPz8gMDtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyT3BlcmF0aW9uU2VydmVyQmFzZVBhdGggPSBvcGVyYXRpb25TZXJ2ZXJNYXBbJ0ZlZWRiYWNrQXBpLmZlZWRiYWNrQ29udHJvbGxlckNyZWF0ZVJlcGx5J10/Lltsb2NhbFZhck9wZXJhdGlvblNlcnZlckluZGV4XT8udXJsO1xuICAgICAgICAgICAgcmV0dXJuIChheGlvcywgYmFzZVBhdGgpID0+IGNyZWF0ZVJlcXVlc3RGdW5jdGlvbihsb2NhbFZhckF4aW9zQXJncywgZ2xvYmFsQXhpb3MsIEJBU0VfUEFUSCwgY29uZmlndXJhdGlvbikoYXhpb3MsIGxvY2FsVmFyT3BlcmF0aW9uU2VydmVyQmFzZVBhdGggfHwgYmFzZVBhdGgpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIGFzeW5jIGZlZWRiYWNrQ29udHJvbGxlckRlbGV0ZShpZDogc3RyaW5nLCBvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKTogUHJvbWlzZTwoYXhpb3M/OiBBeGlvc0luc3RhbmNlLCBiYXNlUGF0aD86IHN0cmluZykgPT4gQXhpb3NQcm9taXNlPHZvaWQ+PiB7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhckF4aW9zQXJncyA9IGF3YWl0IGxvY2FsVmFyQXhpb3NQYXJhbUNyZWF0b3IuZmVlZGJhY2tDb250cm9sbGVyRGVsZXRlKGlkLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyT3BlcmF0aW9uU2VydmVySW5kZXggPSBjb25maWd1cmF0aW9uPy5zZXJ2ZXJJbmRleCA/PyAwO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJCYXNlUGF0aCA9IG9wZXJhdGlvblNlcnZlck1hcFsnRmVlZGJhY2tBcGkuZmVlZGJhY2tDb250cm9sbGVyRGVsZXRlJ10/Lltsb2NhbFZhck9wZXJhdGlvblNlcnZlckluZGV4XT8udXJsO1xuICAgICAgICAgICAgcmV0dXJuIChheGlvcywgYmFzZVBhdGgpID0+IGNyZWF0ZVJlcXVlc3RGdW5jdGlvbihsb2NhbFZhckF4aW9zQXJncywgZ2xvYmFsQXhpb3MsIEJBU0VfUEFUSCwgY29uZmlndXJhdGlvbikoYXhpb3MsIGxvY2FsVmFyT3BlcmF0aW9uU2VydmVyQmFzZVBhdGggfHwgYmFzZVBhdGgpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9qZWN0SWQgXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBhc3luYyBmZWVkYmFja0NvbnRyb2xsZXJGaW5kRmVlZGJhY2tCeVByb2plY3RJZChwcm9qZWN0SWQ6IHN0cmluZywgb3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IFByb21pc2U8KGF4aW9zPzogQXhpb3NJbnN0YW5jZSwgYmFzZVBhdGg/OiBzdHJpbmcpID0+IEF4aW9zUHJvbWlzZTxBcnJheTxGZWVkYmFja1Jlc3BvbnNlPj4+IHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyQXhpb3NBcmdzID0gYXdhaXQgbG9jYWxWYXJBeGlvc1BhcmFtQ3JlYXRvci5mZWVkYmFja0NvbnRyb2xsZXJGaW5kRmVlZGJhY2tCeVByb2plY3RJZChwcm9qZWN0SWQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJJbmRleCA9IGNvbmZpZ3VyYXRpb24/LnNlcnZlckluZGV4ID8/IDA7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckJhc2VQYXRoID0gb3BlcmF0aW9uU2VydmVyTWFwWydGZWVkYmFja0FwaS5mZWVkYmFja0NvbnRyb2xsZXJGaW5kRmVlZGJhY2tCeVByb2plY3RJZCddPy5bbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJJbmRleF0/LnVybDtcbiAgICAgICAgICAgIHJldHVybiAoYXhpb3MsIGJhc2VQYXRoKSA9PiBjcmVhdGVSZXF1ZXN0RnVuY3Rpb24obG9jYWxWYXJBeGlvc0FyZ3MsIGdsb2JhbEF4aW9zLCBCQVNFX1BBVEgsIGNvbmZpZ3VyYXRpb24pKGF4aW9zLCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckJhc2VQYXRoIHx8IGJhc2VQYXRoKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgXG4gICAgICAgICAqIEBwYXJhbSB7RmVlZGJhY2tVcGRhdGVEdG99IGZlZWRiYWNrVXBkYXRlRHRvIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgYXN5bmMgZmVlZGJhY2tDb250cm9sbGVyVXBkYXRlKGlkOiBzdHJpbmcsIGZlZWRiYWNrVXBkYXRlRHRvOiBGZWVkYmFja1VwZGF0ZUR0bywgb3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IFByb21pc2U8KGF4aW9zPzogQXhpb3NJbnN0YW5jZSwgYmFzZVBhdGg/OiBzdHJpbmcpID0+IEF4aW9zUHJvbWlzZTx2b2lkPj4ge1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJBeGlvc0FyZ3MgPSBhd2FpdCBsb2NhbFZhckF4aW9zUGFyYW1DcmVhdG9yLmZlZWRiYWNrQ29udHJvbGxlclVwZGF0ZShpZCwgZmVlZGJhY2tVcGRhdGVEdG8sIG9wdGlvbnMpO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJJbmRleCA9IGNvbmZpZ3VyYXRpb24/LnNlcnZlckluZGV4ID8/IDA7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckJhc2VQYXRoID0gb3BlcmF0aW9uU2VydmVyTWFwWydGZWVkYmFja0FwaS5mZWVkYmFja0NvbnRyb2xsZXJVcGRhdGUnXT8uW2xvY2FsVmFyT3BlcmF0aW9uU2VydmVySW5kZXhdPy51cmw7XG4gICAgICAgICAgICByZXR1cm4gKGF4aW9zLCBiYXNlUGF0aCkgPT4gY3JlYXRlUmVxdWVzdEZ1bmN0aW9uKGxvY2FsVmFyQXhpb3NBcmdzLCBnbG9iYWxBeGlvcywgQkFTRV9QQVRILCBjb25maWd1cmF0aW9uKShheGlvcywgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJCYXNlUGF0aCB8fCBiYXNlUGF0aCk7XG4gICAgICAgIH0sXG4gICAgfVxufTtcblxuLyoqXG4gKiBGZWVkYmFja0FwaSAtIGZhY3RvcnkgaW50ZXJmYWNlXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBGZWVkYmFja0FwaUZhY3RvcnkgPSBmdW5jdGlvbiAoY29uZmlndXJhdGlvbj86IENvbmZpZ3VyYXRpb24sIGJhc2VQYXRoPzogc3RyaW5nLCBheGlvcz86IEF4aW9zSW5zdGFuY2UpIHtcbiAgICBjb25zdCBsb2NhbFZhckZwID0gRmVlZGJhY2tBcGlGcChjb25maWd1cmF0aW9uKVxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHtGZWVkYmFja0NyZWF0ZUR0b30gZmVlZGJhY2tDcmVhdGVEdG8gXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBmZWVkYmFja0NvbnRyb2xsZXJDcmVhdGUoZmVlZGJhY2tDcmVhdGVEdG86IEZlZWRiYWNrQ3JlYXRlRHRvLCBvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKTogQXhpb3NQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbFZhckZwLmZlZWRiYWNrQ29udHJvbGxlckNyZWF0ZShmZWVkYmFja0NyZWF0ZUR0bywgb3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdChheGlvcywgYmFzZVBhdGgpKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgXG4gICAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5IFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgZmVlZGJhY2tDb250cm9sbGVyQ3JlYXRlUmVwbHkoaWQ6IHN0cmluZywgYm9keTogb2JqZWN0LCBvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKTogQXhpb3NQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbFZhckZwLmZlZWRiYWNrQ29udHJvbGxlckNyZWF0ZVJlcGx5KGlkLCBib2R5LCBvcHRpb25zKS50aGVuKChyZXF1ZXN0KSA9PiByZXF1ZXN0KGF4aW9zLCBiYXNlUGF0aCkpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIGZlZWRiYWNrQ29udHJvbGxlckRlbGV0ZShpZDogc3RyaW5nLCBvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKTogQXhpb3NQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbFZhckZwLmZlZWRiYWNrQ29udHJvbGxlckRlbGV0ZShpZCwgb3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdChheGlvcywgYmFzZVBhdGgpKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvamVjdElkIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgZmVlZGJhY2tDb250cm9sbGVyRmluZEZlZWRiYWNrQnlQcm9qZWN0SWQocHJvamVjdElkOiBzdHJpbmcsIG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpOiBBeGlvc1Byb21pc2U8QXJyYXk8RmVlZGJhY2tSZXNwb25zZT4+IHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbFZhckZwLmZlZWRiYWNrQ29udHJvbGxlckZpbmRGZWVkYmFja0J5UHJvamVjdElkKHByb2plY3RJZCwgb3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdChheGlvcywgYmFzZVBhdGgpKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgXG4gICAgICAgICAqIEBwYXJhbSB7RmVlZGJhY2tVcGRhdGVEdG99IGZlZWRiYWNrVXBkYXRlRHRvIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgZmVlZGJhY2tDb250cm9sbGVyVXBkYXRlKGlkOiBzdHJpbmcsIGZlZWRiYWNrVXBkYXRlRHRvOiBGZWVkYmFja1VwZGF0ZUR0bywgb3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IEF4aW9zUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxWYXJGcC5mZWVkYmFja0NvbnRyb2xsZXJVcGRhdGUoaWQsIGZlZWRiYWNrVXBkYXRlRHRvLCBvcHRpb25zKS50aGVuKChyZXF1ZXN0KSA9PiByZXF1ZXN0KGF4aW9zLCBiYXNlUGF0aCkpO1xuICAgICAgICB9LFxuICAgIH07XG59O1xuXG4vKipcbiAqIEZlZWRiYWNrQXBpIC0gb2JqZWN0LW9yaWVudGVkIGludGVyZmFjZVxuICogQGV4cG9ydFxuICogQGNsYXNzIEZlZWRiYWNrQXBpXG4gKiBAZXh0ZW5kcyB7QmFzZUFQSX1cbiAqL1xuZXhwb3J0IGNsYXNzIEZlZWRiYWNrQXBpIGV4dGVuZHMgQmFzZUFQSSB7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHBhcmFtIHtGZWVkYmFja0NyZWF0ZUR0b30gZmVlZGJhY2tDcmVhdGVEdG8gXG4gICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAqIEBtZW1iZXJvZiBGZWVkYmFja0FwaVxuICAgICAqL1xuICAgIHB1YmxpYyBmZWVkYmFja0NvbnRyb2xsZXJDcmVhdGUoZmVlZGJhY2tDcmVhdGVEdG86IEZlZWRiYWNrQ3JlYXRlRHRvLCBvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKSB7XG4gICAgICAgIHJldHVybiBGZWVkYmFja0FwaUZwKHRoaXMuY29uZmlndXJhdGlvbikuZmVlZGJhY2tDb250cm9sbGVyQ3JlYXRlKGZlZWRiYWNrQ3JlYXRlRHRvLCBvcHRpb25zKS50aGVuKChyZXF1ZXN0KSA9PiByZXF1ZXN0KHRoaXMuYXhpb3MsIHRoaXMuYmFzZVBhdGgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGJvZHkgXG4gICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAqIEBtZW1iZXJvZiBGZWVkYmFja0FwaVxuICAgICAqL1xuICAgIHB1YmxpYyBmZWVkYmFja0NvbnRyb2xsZXJDcmVhdGVSZXBseShpZDogc3RyaW5nLCBib2R5OiBvYmplY3QsIG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpIHtcbiAgICAgICAgcmV0dXJuIEZlZWRiYWNrQXBpRnAodGhpcy5jb25maWd1cmF0aW9uKS5mZWVkYmFja0NvbnRyb2xsZXJDcmVhdGVSZXBseShpZCwgYm9keSwgb3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdCh0aGlzLmF4aW9zLCB0aGlzLmJhc2VQYXRoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFxuICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tBcGlcbiAgICAgKi9cbiAgICBwdWJsaWMgZmVlZGJhY2tDb250cm9sbGVyRGVsZXRlKGlkOiBzdHJpbmcsIG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpIHtcbiAgICAgICAgcmV0dXJuIEZlZWRiYWNrQXBpRnAodGhpcy5jb25maWd1cmF0aW9uKS5mZWVkYmFja0NvbnRyb2xsZXJEZWxldGUoaWQsIG9wdGlvbnMpLnRoZW4oKHJlcXVlc3QpID0+IHJlcXVlc3QodGhpcy5heGlvcywgdGhpcy5iYXNlUGF0aCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9qZWN0SWQgXG4gICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAqIEBtZW1iZXJvZiBGZWVkYmFja0FwaVxuICAgICAqL1xuICAgIHB1YmxpYyBmZWVkYmFja0NvbnRyb2xsZXJGaW5kRmVlZGJhY2tCeVByb2plY3RJZChwcm9qZWN0SWQ6IHN0cmluZywgb3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZykge1xuICAgICAgICByZXR1cm4gRmVlZGJhY2tBcGlGcCh0aGlzLmNvbmZpZ3VyYXRpb24pLmZlZWRiYWNrQ29udHJvbGxlckZpbmRGZWVkYmFja0J5UHJvamVjdElkKHByb2plY3RJZCwgb3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdCh0aGlzLmF4aW9zLCB0aGlzLmJhc2VQYXRoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFxuICAgICAqIEBwYXJhbSB7RmVlZGJhY2tVcGRhdGVEdG99IGZlZWRiYWNrVXBkYXRlRHRvIFxuICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tBcGlcbiAgICAgKi9cbiAgICBwdWJsaWMgZmVlZGJhY2tDb250cm9sbGVyVXBkYXRlKGlkOiBzdHJpbmcsIGZlZWRiYWNrVXBkYXRlRHRvOiBGZWVkYmFja1VwZGF0ZUR0bywgb3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZykge1xuICAgICAgICByZXR1cm4gRmVlZGJhY2tBcGlGcCh0aGlzLmNvbmZpZ3VyYXRpb24pLmZlZWRiYWNrQ29udHJvbGxlclVwZGF0ZShpZCwgZmVlZGJhY2tVcGRhdGVEdG8sIG9wdGlvbnMpLnRoZW4oKHJlcXVlc3QpID0+IHJlcXVlc3QodGhpcy5heGlvcywgdGhpcy5iYXNlUGF0aCkpO1xuICAgIH1cbn1cblxuXG5cbi8qKlxuICogVXNlckFwaSAtIGF4aW9zIHBhcmFtZXRlciBjcmVhdG9yXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBVc2VyQXBpQXhpb3NQYXJhbUNyZWF0b3IgPSBmdW5jdGlvbiAoY29uZmlndXJhdGlvbj86IENvbmZpZ3VyYXRpb24pIHtcbiAgICByZXR1cm4ge1xuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICB1c2VyQ29udHJvbGxlckdldE1lOiBhc3luYyAob3B0aW9uczogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnID0ge30pOiBQcm9taXNlPFJlcXVlc3RBcmdzPiA9PiB7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclBhdGggPSBgL3VzZXIvbWVgO1xuICAgICAgICAgICAgLy8gdXNlIGR1bW15IGJhc2UgVVJMIHN0cmluZyBiZWNhdXNlIHRoZSBVUkwgY29uc3RydWN0b3Igb25seSBhY2NlcHRzIGFic29sdXRlIFVSTHMuXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclVybE9iaiA9IG5ldyBVUkwobG9jYWxWYXJQYXRoLCBEVU1NWV9CQVNFX1VSTCk7XG4gICAgICAgICAgICBsZXQgYmFzZU9wdGlvbnM7XG4gICAgICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgICAgIGJhc2VPcHRpb25zID0gY29uZmlndXJhdGlvbi5iYXNlT3B0aW9ucztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucyA9IHsgbWV0aG9kOiAnR0VUJywgLi4uYmFzZU9wdGlvbnMsIC4uLm9wdGlvbnN9O1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyID0ge30gYXMgYW55O1xuXG4gICAgICAgICAgICAvLyBhdXRoZW50aWNhdGlvbiBiZWFyZXIgcmVxdWlyZWRcbiAgICAgICAgICAgIC8vIGh0dHAgYmVhcmVyIGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkXG4gICAgICAgICAgICBhd2FpdCBzZXRCZWFyZXJBdXRoVG9PYmplY3QobG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIsIGNvbmZpZ3VyYXRpb24pXG5cblxuICAgIFxuICAgICAgICAgICAgc2V0U2VhcmNoUGFyYW1zKGxvY2FsVmFyVXJsT2JqLCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyKTtcbiAgICAgICAgICAgIGxldCBoZWFkZXJzRnJvbUJhc2VPcHRpb25zID0gYmFzZU9wdGlvbnMgJiYgYmFzZU9wdGlvbnMuaGVhZGVycyA/IGJhc2VPcHRpb25zLmhlYWRlcnMgOiB7fTtcbiAgICAgICAgICAgIGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9IHsuLi5sb2NhbFZhckhlYWRlclBhcmFtZXRlciwgLi4uaGVhZGVyc0Zyb21CYXNlT3B0aW9ucywgLi4ub3B0aW9ucy5oZWFkZXJzfTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB1cmw6IHRvUGF0aFN0cmluZyhsb2NhbFZhclVybE9iaiksXG4gICAgICAgICAgICAgICAgb3B0aW9uczogbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VyQXBpIC0gZnVuY3Rpb25hbCBwcm9ncmFtbWluZyBpbnRlcmZhY2VcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNvbnN0IFVzZXJBcGlGcCA9IGZ1bmN0aW9uKGNvbmZpZ3VyYXRpb24/OiBDb25maWd1cmF0aW9uKSB7XG4gICAgY29uc3QgbG9jYWxWYXJBeGlvc1BhcmFtQ3JlYXRvciA9IFVzZXJBcGlBeGlvc1BhcmFtQ3JlYXRvcihjb25maWd1cmF0aW9uKVxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIGFzeW5jIHVzZXJDb250cm9sbGVyR2V0TWUob3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IFByb21pc2U8KGF4aW9zPzogQXhpb3NJbnN0YW5jZSwgYmFzZVBhdGg/OiBzdHJpbmcpID0+IEF4aW9zUHJvbWlzZTxVc2VyU3VtbWFyeVJlc3BvbnNlPj4ge1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJBeGlvc0FyZ3MgPSBhd2FpdCBsb2NhbFZhckF4aW9zUGFyYW1DcmVhdG9yLnVzZXJDb250cm9sbGVyR2V0TWUob3B0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckluZGV4ID0gY29uZmlndXJhdGlvbj8uc2VydmVySW5kZXggPz8gMDtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyT3BlcmF0aW9uU2VydmVyQmFzZVBhdGggPSBvcGVyYXRpb25TZXJ2ZXJNYXBbJ1VzZXJBcGkudXNlckNvbnRyb2xsZXJHZXRNZSddPy5bbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJJbmRleF0/LnVybDtcbiAgICAgICAgICAgIHJldHVybiAoYXhpb3MsIGJhc2VQYXRoKSA9PiBjcmVhdGVSZXF1ZXN0RnVuY3Rpb24obG9jYWxWYXJBeGlvc0FyZ3MsIGdsb2JhbEF4aW9zLCBCQVNFX1BBVEgsIGNvbmZpZ3VyYXRpb24pKGF4aW9zLCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckJhc2VQYXRoIHx8IGJhc2VQYXRoKTtcbiAgICAgICAgfSxcbiAgICB9XG59O1xuXG4vKipcbiAqIFVzZXJBcGkgLSBmYWN0b3J5IGludGVyZmFjZVxuICogQGV4cG9ydFxuICovXG5leHBvcnQgY29uc3QgVXNlckFwaUZhY3RvcnkgPSBmdW5jdGlvbiAoY29uZmlndXJhdGlvbj86IENvbmZpZ3VyYXRpb24sIGJhc2VQYXRoPzogc3RyaW5nLCBheGlvcz86IEF4aW9zSW5zdGFuY2UpIHtcbiAgICBjb25zdCBsb2NhbFZhckZwID0gVXNlckFwaUZwKGNvbmZpZ3VyYXRpb24pXG4gICAgcmV0dXJuIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgdXNlckNvbnRyb2xsZXJHZXRNZShvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKTogQXhpb3NQcm9taXNlPFVzZXJTdW1tYXJ5UmVzcG9uc2U+IHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbFZhckZwLnVzZXJDb250cm9sbGVyR2V0TWUob3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdChheGlvcywgYmFzZVBhdGgpKTtcbiAgICAgICAgfSxcbiAgICB9O1xufTtcblxuLyoqXG4gKiBVc2VyQXBpIC0gb2JqZWN0LW9yaWVudGVkIGludGVyZmFjZVxuICogQGV4cG9ydFxuICogQGNsYXNzIFVzZXJBcGlcbiAqIEBleHRlbmRzIHtCYXNlQVBJfVxuICovXG5leHBvcnQgY2xhc3MgVXNlckFwaSBleHRlbmRzIEJhc2VBUEkge1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgKiBAbWVtYmVyb2YgVXNlckFwaVxuICAgICAqL1xuICAgIHB1YmxpYyB1c2VyQ29udHJvbGxlckdldE1lKG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpIHtcbiAgICAgICAgcmV0dXJuIFVzZXJBcGlGcCh0aGlzLmNvbmZpZ3VyYXRpb24pLnVzZXJDb250cm9sbGVyR2V0TWUob3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdCh0aGlzLmF4aW9zLCB0aGlzLmJhc2VQYXRoKSk7XG4gICAgfVxufVxuXG5cblxuIiwiLyogdHNsaW50OmRpc2FibGUgKi9cbi8qIGVzbGludC1kaXNhYmxlICovXG4vKipcbiAqIEdhbGFkcmltIEZlZWRiYWNrIEFQSVxuICogQVBJIGZvciBHYWxhZHJpbSBGZWVkYmFjaywgYSBmZWVkYmFjayBwbGF0Zm9ybSBmb3IgR2FsYWRyaW0gcHJvamVjdHMuXG4gKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMFxuICogXG4gKlxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cbiAqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuICogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuICovXG5cblxuZXhwb3J0IGludGVyZmFjZSBDb25maWd1cmF0aW9uUGFyYW1ldGVycyB7XG4gICAgYXBpS2V5Pzogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+IHwgKChuYW1lOiBzdHJpbmcpID0+IHN0cmluZykgfCAoKG5hbWU6IHN0cmluZykgPT4gUHJvbWlzZTxzdHJpbmc+KTtcbiAgICB1c2VybmFtZT86IHN0cmluZztcbiAgICBwYXNzd29yZD86IHN0cmluZztcbiAgICBhY2Nlc3NUb2tlbj86IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPiB8ICgobmFtZT86IHN0cmluZywgc2NvcGVzPzogc3RyaW5nW10pID0+IHN0cmluZykgfCAoKG5hbWU/OiBzdHJpbmcsIHNjb3Blcz86IHN0cmluZ1tdKSA9PiBQcm9taXNlPHN0cmluZz4pO1xuICAgIGJhc2VQYXRoPzogc3RyaW5nO1xuICAgIHNlcnZlckluZGV4PzogbnVtYmVyO1xuICAgIGJhc2VPcHRpb25zPzogYW55O1xuICAgIGZvcm1EYXRhQ3Rvcj86IG5ldyAoKSA9PiBhbnk7XG59XG5cbmV4cG9ydCBjbGFzcyBDb25maWd1cmF0aW9uIHtcbiAgICAvKipcbiAgICAgKiBwYXJhbWV0ZXIgZm9yIGFwaUtleSBzZWN1cml0eVxuICAgICAqIEBwYXJhbSBuYW1lIHNlY3VyaXR5IG5hbWVcbiAgICAgKiBAbWVtYmVyb2YgQ29uZmlndXJhdGlvblxuICAgICAqL1xuICAgIGFwaUtleT86IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPiB8ICgobmFtZTogc3RyaW5nKSA9PiBzdHJpbmcpIHwgKChuYW1lOiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nPik7XG4gICAgLyoqXG4gICAgICogcGFyYW1ldGVyIGZvciBiYXNpYyBzZWN1cml0eVxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgQ29uZmlndXJhdGlvblxuICAgICAqL1xuICAgIHVzZXJuYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIHBhcmFtZXRlciBmb3IgYmFzaWMgc2VjdXJpdHlcbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIENvbmZpZ3VyYXRpb25cbiAgICAgKi9cbiAgICBwYXNzd29yZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBwYXJhbWV0ZXIgZm9yIG9hdXRoMiBzZWN1cml0eVxuICAgICAqIEBwYXJhbSBuYW1lIHNlY3VyaXR5IG5hbWVcbiAgICAgKiBAcGFyYW0gc2NvcGVzIG9hdXRoMiBzY29wZVxuICAgICAqIEBtZW1iZXJvZiBDb25maWd1cmF0aW9uXG4gICAgICovXG4gICAgYWNjZXNzVG9rZW4/OiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz4gfCAoKG5hbWU/OiBzdHJpbmcsIHNjb3Blcz86IHN0cmluZ1tdKSA9PiBzdHJpbmcpIHwgKChuYW1lPzogc3RyaW5nLCBzY29wZXM/OiBzdHJpbmdbXSkgPT4gUHJvbWlzZTxzdHJpbmc+KTtcbiAgICAvKipcbiAgICAgKiBvdmVycmlkZSBiYXNlIHBhdGhcbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIENvbmZpZ3VyYXRpb25cbiAgICAgKi9cbiAgICBiYXNlUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBvdmVycmlkZSBzZXJ2ZXIgaW5kZXhcbiAgICAgKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIENvbmZpZ3VyYXRpb25cbiAgICAgKi9cbiAgICBzZXJ2ZXJJbmRleD86IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBiYXNlIG9wdGlvbnMgZm9yIGF4aW9zIGNhbGxzXG4gICAgICpcbiAgICAgKiBAdHlwZSB7YW55fVxuICAgICAqIEBtZW1iZXJvZiBDb25maWd1cmF0aW9uXG4gICAgICovXG4gICAgYmFzZU9wdGlvbnM/OiBhbnk7XG4gICAgLyoqXG4gICAgICogVGhlIEZvcm1EYXRhIGNvbnN0cnVjdG9yIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGNyZWF0ZSBtdWx0aXBhcnQgZm9ybSBkYXRhXG4gICAgICogcmVxdWVzdHMuIFlvdSBjYW4gaW5qZWN0IHRoaXMgaGVyZSBzbyB0aGF0IGV4ZWN1dGlvbiBlbnZpcm9ubWVudHMgdGhhdFxuICAgICAqIGRvIG5vdCBzdXBwb3J0IHRoZSBGb3JtRGF0YSBjbGFzcyBjYW4gc3RpbGwgcnVuIHRoZSBnZW5lcmF0ZWQgY2xpZW50LlxuICAgICAqXG4gICAgICogQHR5cGUge25ldyAoKSA9PiBGb3JtRGF0YX1cbiAgICAgKi9cbiAgICBmb3JtRGF0YUN0b3I/OiBuZXcgKCkgPT4gYW55O1xuXG4gICAgY29uc3RydWN0b3IocGFyYW06IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzID0ge30pIHtcbiAgICAgICAgdGhpcy5hcGlLZXkgPSBwYXJhbS5hcGlLZXk7XG4gICAgICAgIHRoaXMudXNlcm5hbWUgPSBwYXJhbS51c2VybmFtZTtcbiAgICAgICAgdGhpcy5wYXNzd29yZCA9IHBhcmFtLnBhc3N3b3JkO1xuICAgICAgICB0aGlzLmFjY2Vzc1Rva2VuID0gcGFyYW0uYWNjZXNzVG9rZW47XG4gICAgICAgIHRoaXMuYmFzZVBhdGggPSBwYXJhbS5iYXNlUGF0aDtcbiAgICAgICAgdGhpcy5zZXJ2ZXJJbmRleCA9IHBhcmFtLnNlcnZlckluZGV4O1xuICAgICAgICB0aGlzLmJhc2VPcHRpb25zID0ge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIC4uLnBhcmFtLmJhc2VPcHRpb25zPy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzogXCJPcGVuQVBJLUdlbmVyYXRvci90eXBlc2NyaXB0LWF4aW9zXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAuLi5wYXJhbS5iYXNlT3B0aW9uc1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmZvcm1EYXRhQ3RvciA9IHBhcmFtLmZvcm1EYXRhQ3RvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiB0aGUgZ2l2ZW4gTUlNRSBpcyBhIEpTT04gTUlNRS5cbiAgICAgKiBKU09OIE1JTUUgZXhhbXBsZXM6XG4gICAgICogICBhcHBsaWNhdGlvbi9qc29uXG4gICAgICogICBhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PVVURjhcbiAgICAgKiAgIEFQUExJQ0FUSU9OL0pTT05cbiAgICAgKiAgIGFwcGxpY2F0aW9uL3ZuZC5jb21wYW55K2pzb25cbiAgICAgKiBAcGFyYW0gbWltZSAtIE1JTUUgKE11bHRpcHVycG9zZSBJbnRlcm5ldCBNYWlsIEV4dGVuc2lvbnMpXG4gICAgICogQHJldHVybiBUcnVlIGlmIHRoZSBnaXZlbiBNSU1FIGlzIEpTT04sIGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNKc29uTWltZShtaW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QganNvbk1pbWU6IFJlZ0V4cCA9IG5ldyBSZWdFeHAoJ14oYXBwbGljYXRpb25cXC9qc29ufFteOy8gXFx0XStcXC9bXjsvIFxcdF0rWytdanNvbilbIFxcdF0qKDsuKik/JCcsICdpJyk7XG4gICAgICAgIHJldHVybiBtaW1lICE9PSBudWxsICYmIChqc29uTWltZS50ZXN0KG1pbWUpIHx8IG1pbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24tcGF0Y2granNvbicpO1xuICAgIH1cbn1cbiIsImltcG9ydCBheGlvcyBmcm9tIFwiYXhpb3NcIjtcbmltcG9ydCB7XG4gIEF1dGhBcGksXG4gIENvbmZpZ3VyYXRpb24sXG4gIEZlZWRiYWNrQXBpLFxuICBVc2VyQXBpLFxufSBmcm9tIFwiLi4vLi4vbGlicy9iYWNrZW5kLWNsaWVudFwiO1xuXG5jb25zdCBhcGlVcmwgPSBcImh0dHA6Ly9lYzItMTMtMzgtMjE0LTE5MS5ldS13ZXN0LTMuY29tcHV0ZS5hbWF6b25hd3MuY29tOjE0NzhcIjtcblxuY29uc3QgY29uZmlndXJhdGlvbiA9IG5ldyBDb25maWd1cmF0aW9uKHtcbiAgYmFzZVBhdGg6IGFwaVVybCxcbn0pO1xuXG5jb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKHtcbiAgYmFzZVVSTDogYXBpVXJsLFxufSk7XG5cbmNvbnN0IGFwaSA9IHtcbiAgdXNlcjogbmV3IFVzZXJBcGkoY29uZmlndXJhdGlvbiwgYXBpVXJsLCBheGlvc0luc3RhbmNlKSxcbiAgZmVlZGJhY2s6IG5ldyBGZWVkYmFja0FwaShjb25maWd1cmF0aW9uLCBhcGlVcmwsIGF4aW9zSW5zdGFuY2UpLFxuICBhdXRoOiBuZXcgQXV0aEFwaShjb25maWd1cmF0aW9uLCBhcGlVcmwsIGF4aW9zSW5zdGFuY2UpLFxufTtcblxuYXhpb3NJbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoXG4gIGFzeW5jIChjb25maWcpID0+IHtcbiAgICBjb25zdCB0b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiZ2FsYWRyaW1GZWVkYmFja1Rva2VuXCIpO1xuICAgIGlmICh0b2tlbiAmJiBjb25maWcuaGVhZGVycykge1xuICAgICAgY29uZmlnLmhlYWRlcnMuQXV0aG9yaXphdGlvbiA9IGBCZWFyZXIgJHt0b2tlbn1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgYXhpb3NJbnN0YW5jZS5kZWZhdWx0cy5oZWFkZXJzLmNvbW1vbi5BdXRob3JpemF0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gY29uZmlnO1xuICB9LFxuICAoZXJyb3IpID0+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICB9XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBhcGk7XG4iLCJpbXBvcnQgeyB1c2VNdXRhdGlvbiwgdXNlUXVlcnksIHVzZVF1ZXJ5Q2xpZW50IH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1xdWVyeVwiO1xuaW1wb3J0IGFwaSBmcm9tIFwiLi9hcGlcIjtcbmltcG9ydCB7XG4gIEZlZWRiYWNrQ3JlYXRlRHRvLFxuICBGZWVkYmFja1Jlc3BvbnNlLFxuICBGZWVkYmFja1VwZGF0ZUR0byxcbn0gZnJvbSBcIi4uLy4uL2xpYnMvYmFja2VuZC1jbGllbnRcIjtcblxuZXhwb3J0IGNvbnN0IGZldGNoRmVlZGJhY2tzID0gYXN5bmMgKHByb2plY3RJZD86IHN0cmluZykgPT4ge1xuICBpZiAoIXByb2plY3RJZCkgcmV0dXJuIFtdO1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID1cbiAgICAgIGF3YWl0IGFwaS5mZWVkYmFjay5mZWVkYmFja0NvbnRyb2xsZXJGaW5kRmVlZGJhY2tCeVByb2plY3RJZChwcm9qZWN0SWQpO1xuICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gW107XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVGZWVkYmFjayA9IGFzeW5jIChmZWVkYmFjazogRmVlZGJhY2tDcmVhdGVEdG8pID0+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGkuZmVlZGJhY2suZmVlZGJhY2tDb250cm9sbGVyQ3JlYXRlKGZlZWRiYWNrKTtcbiAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUmVwbHkgPSBhc3luYyAoZmVlZGJhY2tJZDogc3RyaW5nLCBjb21tZW50OiBzdHJpbmcpID0+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGkuZmVlZGJhY2suZmVlZGJhY2tDb250cm9sbGVyQ3JlYXRlUmVwbHkoXG4gICAgZmVlZGJhY2tJZCxcbiAgICB7XG4gICAgICBjb21tZW50LFxuICAgIH1cbiAgKTtcbiAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlRmVlZGJhY2sgPSBhc3luYyAoe1xuICBmZWVkYmFja0lkLFxuICBwYXlsb2FkLFxufToge1xuICBmZWVkYmFja0lkOiBzdHJpbmc7XG4gIHBheWxvYWQ6IEZlZWRiYWNrVXBkYXRlRHRvO1xufSkgPT4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaS5mZWVkYmFjay5mZWVkYmFja0NvbnRyb2xsZXJVcGRhdGUoZmVlZGJhY2tJZCwge1xuICAgIC4uLnBheWxvYWQsXG4gIH0pO1xuICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVGZWVkYmFjayA9IGFzeW5jIChmZWVkYmFjazogRmVlZGJhY2tSZXNwb25zZSkgPT4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaS5mZWVkYmFjay5mZWVkYmFja0NvbnRyb2xsZXJEZWxldGUoZmVlZGJhY2suaWQpO1xuICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VGZWVkYmFja3MgPSAocHJvamVjdElkPzogc3RyaW5nKSA9PiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IFtcImZlZWRiYWNrc1wiXSxcbiAgICBxdWVyeUZuOiAoKSA9PiBmZXRjaEZlZWRiYWNrcyhwcm9qZWN0SWQpLFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VDcmVhdGVGZWVkYmFjayA9ICgpID0+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGNyZWF0ZUZlZWRiYWNrLFxuICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJGZWVkYmFjayBjcmVhdGVkXCIpO1xuXG4gICAgICByZXR1cm4gcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogW1wiZmVlZGJhY2tzXCJdIH0pO1xuICAgIH0sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZUNyZWF0ZVJlcGx5ID0gKGZlZWRiYWNrSWQ6IHN0cmluZykgPT4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogKGNvbW1lbnQ6IHN0cmluZykgPT4gY3JlYXRlUmVwbHkoZmVlZGJhY2tJZCwgY29tbWVudCksXG4gICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICByZXR1cm4gcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogW1wiZmVlZGJhY2tzXCJdIH0pO1xuICAgIH0sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZVVwZGF0ZUZlZWRiYWNrID0gKCkgPT4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogdXBkYXRlRmVlZGJhY2ssXG4gICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICByZXR1cm4gcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogW1wiZmVlZGJhY2tzXCJdIH0pO1xuICAgIH0sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZURlbGV0ZUZlZWRiYWNrID0gKCkgPT4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogZGVsZXRlRmVlZGJhY2ssXG4gICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICByZXR1cm4gcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogW1wiZmVlZGJhY2tzXCJdIH0pO1xuICAgIH0sXG4gIH0pO1xufTtcbiIsImltcG9ydCB7IHVzZVF1ZXJ5IH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1xdWVyeVwiO1xuaW1wb3J0IGFwaSBmcm9tIFwiLi9hcGlcIjtcblxuZXhwb3J0IGNvbnN0IGZldGNoTWUgPSBhc3luYyAoKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGkudXNlci51c2VyQ29udHJvbGxlckdldE1lKCk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgdXNlTWUgPSAoKSA9PiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IFtcIm1lXCJdLFxuICAgIHF1ZXJ5Rm46IGZldGNoTWUsXG4gIH0pO1xufTtcbiIsImltcG9ydCBSZWFjdCwge1xuICBjcmVhdGVDb250ZXh0LFxuICBEaXNwYXRjaCxcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUNvbnRleHQsXG4gIHVzZUVmZmVjdCxcbiAgdXNlU3RhdGUsXG59IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRmVlZGJhY2tDcmVhdGVEdG8sIEZlZWRiYWNrUmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vbGlicy9iYWNrZW5kLWNsaWVudFwiO1xuaW1wb3J0IHsgdXNlRmVlZGJhY2tzIH0gZnJvbSBcIi4uL3NlcnZpY2VzL2ZlZWRiYWNrXCI7XG5pbXBvcnQgeyB1c2VNZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy91c2VyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmVlZGJhY2tTdGF0ZSB7XG4gIHJvb3REaXI6IHN0cmluZztcbiAgcHJvamVjdElkOiBzdHJpbmc7XG4gIGlzT3BlbjogYm9vbGVhbjtcbiAgZmVlZGJhY2tzPzogRmVlZGJhY2tSZXNwb25zZVtdO1xuICBuZXdGZWVkYmFjazogRmVlZGJhY2tDcmVhdGVEdG8gfCBudWxsO1xuICBuZXdGZWVkYmFja1JlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50IHwgbnVsbD47XG4gIHNlbGVjdGVkRmVlZGJhY2s6IEZlZWRiYWNrUmVzcG9uc2UgfCBudWxsO1xuICBzZXRTZWxlY3RlZEZlZWRiYWNrOiBEaXNwYXRjaDxSZWFjdC5TZXRTdGF0ZUFjdGlvbjxGZWVkYmFja1Jlc3BvbnNlIHwgbnVsbD4+O1xuICByZXNldEZlZWRiYWNrOiAoKSA9PiB2b2lkO1xuICBvcGVuRmVlZGJhY2tPdmVybGF5OiAoKSA9PiB2b2lkO1xuICBjbG9zZUZlZWRiYWNrT3ZlcmxheTogKCkgPT4gdm9pZDtcbiAgYWN0aXZhdGVGZWVkYmFja01vZGU6ICgpID0+IHZvaWQ7XG4gIGRlYWN0aXZhdGVGZWVkYmFja01vZGU6ICgpID0+IHZvaWQ7XG4gIG5hdmlnYXRlOiAocGF0aDogc3RyaW5nKSA9PiB2b2lkO1xufVxuXG4vLyBDcmVhdGUgdGhlIGNvbnRleHRcbmNvbnN0IEZlZWRiYWNrQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICByb290RGlyOiBcIlwiLFxuICBwcm9qZWN0SWQ6IFwiXCIsXG4gIGlzT3BlbjogZmFsc2UsXG4gIGZlZWRiYWNrczogW10gYXMgRmVlZGJhY2tSZXNwb25zZVtdIHwgdW5kZWZpbmVkLFxuICBuZXdGZWVkYmFjazogbnVsbCBhcyBGZWVkYmFja0NyZWF0ZUR0byB8IG51bGwsXG4gIG5ld0ZlZWRiYWNrUmVmOiBSZWFjdC5jcmVhdGVSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPigpLFxuICBzZWxlY3RlZEZlZWRiYWNrOiB7fSBhcyBGZWVkYmFja1Jlc3BvbnNlIHwgbnVsbCxcbiAgc2V0U2VsZWN0ZWRGZWVkYmFjazoge30gYXMgRGlzcGF0Y2g8XG4gICAgUmVhY3QuU2V0U3RhdGVBY3Rpb248RmVlZGJhY2tSZXNwb25zZSB8IG51bGw+XG4gID4sXG4gIHJlc2V0RmVlZGJhY2s6ICgpID0+IHt9LFxuICBhY3RpdmF0ZUZlZWRiYWNrTW9kZTogKCkgPT4ge30sXG4gIGRlYWN0aXZhdGVGZWVkYmFja01vZGU6ICgpID0+IHt9LFxuICBvcGVuRmVlZGJhY2tPdmVybGF5OiAoKSA9PiB7fSxcbiAgY2xvc2VGZWVkYmFja092ZXJsYXk6ICgpID0+IHt9LFxuICBuYXZpZ2F0ZTogKHBhdGg6IHN0cmluZykgPT4ge1xuICAgIHZvaWQgcGF0aDtcbiAgICByZXR1cm47XG4gIH0sXG59KTtcblxuLy8gUHJvdmlkZXIgY29tcG9uZW50XG5leHBvcnQgY29uc3QgRmVlZGJhY2tQcm92aWRlciA9ICh7XG4gIHJvb3REaXIsXG4gIHByb2plY3RJZCxcbiAgbmF2aWdhdGUsXG4gIGNoaWxkcmVuLFxufToge1xuICByb290RGlyOiBzdHJpbmc7XG4gIHByb2plY3RJZDogc3RyaW5nO1xuICBuYXZpZ2F0ZTogKHBhdGg6IHN0cmluZykgPT4gdm9pZDtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbn0pID0+IHtcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW25ld0ZlZWRiYWNrLCBzZXROZXdGZWVkYmFja10gPSB1c2VTdGF0ZTxGZWVkYmFja0NyZWF0ZUR0byB8IG51bGw+KFxuICAgIG51bGxcbiAgKTtcbiAgY29uc3QgbmV3RmVlZGJhY2tSZWYgPSBSZWFjdC51c2VSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW3NlbGVjdGVkRmVlZGJhY2ssIHNldFNlbGVjdGVkRmVlZGJhY2tdID1cbiAgICB1c2VTdGF0ZTxGZWVkYmFja1Jlc3BvbnNlIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IHsgZGF0YTogZmVlZGJhY2tzIH0gPSB1c2VGZWVkYmFja3MocHJvamVjdElkKTtcbiAgY29uc3QgeyBkYXRhOiBtZSB9ID0gdXNlTWUoKTtcblxuICBjb25zdCBpc0Nvbm5lY3RlZCA9ICEhbWU7XG5cbiAgY29uc3QgaXNDb2xsYWJvcmF0b3IgPSBtZT8uY29sbGFib3JhdGlvbnMuZmluZChcbiAgICAoY29sbGFib3JhdGlvbikgPT4gY29sbGFib3JhdGlvbi5wcm9qZWN0LmlkID09PSBwcm9qZWN0SWRcbiAgKTtcblxuICBjb25zdCBvcGVuRmVlZGJhY2tPdmVybGF5ID0gKCkgPT4ge1xuICAgIHNldElzT3Blbih0cnVlKTtcbiAgfTtcblxuICBjb25zdCBjbG9zZUZlZWRiYWNrT3ZlcmxheSA9ICgpID0+IHtcbiAgICBzZXRJc09wZW4oZmFsc2UpO1xuICB9O1xuXG4gIGNvbnN0IHJlc2V0RmVlZGJhY2sgPSAoKSA9PiB7XG4gICAgc2V0TmV3RmVlZGJhY2sobnVsbCk7XG4gICAgYWN0aXZhdGVGZWVkYmFja01vZGUoKTtcbiAgfTtcblxuICBjb25zdCBjcmVhdGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGNvbnN0IGVsZW1lbnRJZCA9IHRhcmdldD8uZGF0YXNldC5wYXRoIHx8IFwiXCI7XG4gICAgICBjb25zdCBhbGxFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KFxuICAgICAgICBgW2RhdGEtcGF0aD1cIiR7ZWxlbWVudElkfVwiXWBcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGFyckFsbEVsZW1lbnRzID0gQXJyYXkuZnJvbShhbGxFbGVtZW50cyk7XG5cbiAgICAgIGNvbnN0IGVsZW1lbnRJbmRleCA9IGFyckFsbEVsZW1lbnRzLmluZGV4T2YodGFyZ2V0KTtcblxuICAgICAgY29uc3QgeCA9IGUub2Zmc2V0WDtcbiAgICAgIGNvbnN0IHkgPSBlLm9mZnNldFk7XG4gICAgICBjb25zdCBlbGVtZW50V2lkdGggPSB0YXJnZXQ/LmNsaWVudFdpZHRoIHx8IDA7XG4gICAgICBjb25zdCBlbGVtZW50SGVpZ2h0ID0gdGFyZ2V0Py5jbGllbnRIZWlnaHQgfHwgMDtcblxuICAgICAgc2V0TmV3RmVlZGJhY2soe1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBlbGVtZW50V2lkdGgsXG4gICAgICAgIGVsZW1lbnRIZWlnaHQsXG4gICAgICAgIGNvbW1lbnQ6IFwiXCIsXG4gICAgICAgIHBhdGg6IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSxcbiAgICAgICAgZWxlbWVudElkLFxuICAgICAgICBlbGVtZW50SW5kZXgsXG4gICAgICAgIHByb2plY3RJZCxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW3Byb2plY3RJZF1cbiAgKTtcblxuICBjb25zdCBpc1NpZGVCYXJPckZlZWRiYWNrSXRlbSA9IHVzZUNhbGxiYWNrKCh0YXJnZXQ6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgY29uc3Qgc2lkZWJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZmVlZGJhY2stc2lkZWJhclwiKTtcblxuICAgIGlmICghc2lkZWJhciB8fCBzaWRlYmFyLmNvbnRhaW5zKHRhcmdldCBhcyBOb2RlKSkgcmV0dXJuIHRydWU7XG5cbiAgICBjb25zdCBmZWVkYmFja0VsZW1lbnRzID0gZG9jdW1lbnRcbiAgICAgIC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PihgLmZlZWRiYWNrLWl0ZW1gKVxuICAgICAgLnZhbHVlcygpO1xuXG4gICAgZm9yIChjb25zdCBmZWVkYmFja0VsZW1lbnQgb2YgZmVlZGJhY2tFbGVtZW50cykge1xuICAgICAgaWYgKGZlZWRiYWNrRWxlbWVudC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sIFtdKTtcblxuICBjb25zdCBzaG91bGRDcmVhdGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGlmIChuZXdGZWVkYmFja1JlZi5jdXJyZW50KSB7XG4gICAgICAgIGlmICghbmV3RmVlZGJhY2tSZWYuY3VycmVudC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICAgICAgc2V0TmV3RmVlZGJhY2sobnVsbCk7XG4gICAgICAgICAgaWYgKGlzU2lkZUJhck9yRmVlZGJhY2tJdGVtKHRhcmdldCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhaXNTaWRlQmFyT3JGZWVkYmFja0l0ZW0odGFyZ2V0KTtcbiAgICB9LFxuICAgIFtpc1NpZGVCYXJPckZlZWRiYWNrSXRlbV1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVOZXdGZWVkYmFjayA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBpZiAoIXNob3VsZENyZWF0ZUZlZWRiYWNrKGUpKSByZXR1cm47XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBzZXRTZWxlY3RlZEZlZWRiYWNrKG51bGwpO1xuICAgICAgY3JlYXRlRmVlZGJhY2soZSk7XG5cbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVOZXdGZWVkYmFjayk7XG4gICAgfSxcbiAgICBbc2hvdWxkQ3JlYXRlRmVlZGJhY2ssIGNyZWF0ZUZlZWRiYWNrXVxuICApO1xuXG4gIGNvbnN0IGFjdGl2YXRlRmVlZGJhY2tNb2RlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChcImNvbW1lbnQtY3Vyc29yXCIpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVOZXdGZWVkYmFjaywgdHJ1ZSk7XG4gIH0sIFtoYW5kbGVOZXdGZWVkYmFja10pO1xuXG4gIGNvbnN0IGRlYWN0aXZhdGVGZWVkYmFja01vZGUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZU5ld0ZlZWRiYWNrLCB0cnVlKTtcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoXCJjb21tZW50LWN1cnNvclwiKTtcbiAgfSwgW2hhbmRsZU5ld0ZlZWRiYWNrXSk7XG5cbiAgY29uc3QgaGFuZGxlRXNjYXBlUHJlc3MgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIpIHtcbiAgICAgICAgaWYgKG5ld0ZlZWRiYWNrKSB7XG4gICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZU5ld0ZlZWRiYWNrKTtcbiAgICAgICAgICBzZXROZXdGZWVkYmFjayhudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWFjdGl2YXRlRmVlZGJhY2tNb2RlKCk7XG4gICAgICAgICAgc2V0SXNPcGVuKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW25ld0ZlZWRiYWNrLCBkZWFjdGl2YXRlRmVlZGJhY2tNb2RlLCBoYW5kbGVOZXdGZWVkYmFja11cbiAgKTtcbiAgY29uc3QgcmVtb3ZlUXVlcnlQYXJhbSA9IChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuXG4gICAgcGFyYW1zLmRlbGV0ZShuYW1lKTtcbiAgICBjb25zdCBuZXdVcmwgPSBgJHt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWV9JHtcbiAgICAgIHBhcmFtcy50b1N0cmluZygpID8gXCI/XCIgOiBcIlwiXG4gICAgfSR7cGFyYW1zLnRvU3RyaW5nKCl9YDtcbiAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwgXCJcIiwgbmV3VXJsKTtcbiAgfTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBoYW5kbGVFc2NhcGVQcmVzcyk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBoYW5kbGVFc2NhcGVQcmVzcyk7XG4gICAgfTtcbiAgfSwgW2hhbmRsZUVzY2FwZVByZXNzXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuXG4gICAgY29uc3QgZ2FsYWRyaW1GZWVkYmFja1Rva2VuID0gcGFyYW1zLmdldChcImdhbGFkcmltRmVlZGJhY2tUb2tlblwiKTtcbiAgICBpZiAoZ2FsYWRyaW1GZWVkYmFja1Rva2VuKSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImdhbGFkcmltRmVlZGJhY2tUb2tlblwiLCBnYWxhZHJpbUZlZWRiYWNrVG9rZW4pO1xuICAgICAgcmVtb3ZlUXVlcnlQYXJhbShcImdhbGFkcmltRmVlZGJhY2tUb2tlblwiKTtcbiAgICB9XG4gIH0sIFtmZWVkYmFja3MsIGFjdGl2YXRlRmVlZGJhY2tNb2RlXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNPcGVuICYmIGlzQ29ubmVjdGVkICYmIGlzQ29sbGFib3JhdG9yKSBhY3RpdmF0ZUZlZWRiYWNrTW9kZSgpO1xuICAgIGVsc2UgZGVhY3RpdmF0ZUZlZWRiYWNrTW9kZSgpO1xuICB9LCBbXG4gICAgaXNPcGVuLFxuICAgIGlzQ29ubmVjdGVkLFxuICAgIGlzQ29sbGFib3JhdG9yLFxuICAgIGFjdGl2YXRlRmVlZGJhY2tNb2RlLFxuICAgIGRlYWN0aXZhdGVGZWVkYmFja01vZGUsXG4gIF0pO1xuXG4gIGNvbnN0IHZhbHVlID0ge1xuICAgIHJvb3REaXIsXG4gICAgcHJvamVjdElkLFxuICAgIGlzT3BlbixcbiAgICBmZWVkYmFja3MsXG4gICAgbmV3RmVlZGJhY2ssXG4gICAgbmV3RmVlZGJhY2tSZWYsXG4gICAgc2VsZWN0ZWRGZWVkYmFjayxcbiAgICBzZXRTZWxlY3RlZEZlZWRiYWNrLFxuICAgIHJlc2V0RmVlZGJhY2ssXG4gICAgYWN0aXZhdGVGZWVkYmFja01vZGUsXG4gICAgZGVhY3RpdmF0ZUZlZWRiYWNrTW9kZSxcbiAgICBvcGVuRmVlZGJhY2tPdmVybGF5LFxuICAgIGNsb3NlRmVlZGJhY2tPdmVybGF5LFxuICAgIG5hdmlnYXRlLFxuICB9O1xuICByZXR1cm4gKFxuICAgIDxGZWVkYmFja0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3ZhbHVlfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L0ZlZWRiYWNrQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VGZWVkYmFja0NvbnRleHQgPSAoKSA9PiB1c2VDb250ZXh0KEZlZWRiYWNrQ29udGV4dCk7XG4iLCJleHBvcnQgY29uc3QgQnV0dG9uID0gKHtcbiAgdGV4dCxcbiAgb25DbGljayxcbiAgaWNvblBhdGgsXG4gIHNpemUsXG59OiB7XG4gIG9uQ2xpY2s6IChlOiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4gdm9pZDtcbiAgdGV4dD86IHN0cmluZztcbiAgaWNvblBhdGg/OiBzdHJpbmc7XG4gIHNpemU/OiBcInNtYWxsXCIgfCBcIm1lZGl1bVwiIHwgXCJsYXJnZVwiO1xufSkgPT4ge1xuICBjb25zdCBwYWRkaW5nID0gZ2V0UGFkZGluZyhzaXplKTtcbiAgY29uc3QgZm9udFNpemUgPSBzaXplID09PSBcInNtYWxsXCIgPyBcInRleHQteHNcIiA6IFwidGV4dC1zbVwiO1xuICBjb25zdCBib3JkZXJSYWRpdXMgPSBzaXplID09PSBcInNtYWxsXCIgPyBcInJvdW5kZWQtbGdcIiA6IFwicm91bmRlZC1bMTJweF1cIjtcbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgY2xhc3NOYW1lPXtgZmxleC1zaHJpbmstMCBmbGV4IGZsZXgtcm93IGl0ZW1zLWNlbnRlciAgZ2FwLTIgJHtwYWRkaW5nfSAke2JvcmRlclJhZGl1c30gYmctYmx1ZS01MDAgaG92ZXI6Ymctb3BhY2l0eS04MGB9XG4gICAgPlxuICAgICAge2ljb25QYXRoICYmIDxpbWcgc3JjPXtpY29uUGF0aH0gY2xhc3NOYW1lPVwidy02IGgtNlwiIC8+fVxuICAgICAge3RleHQgJiYgPHNwYW4gY2xhc3NOYW1lPXtgJHtmb250U2l6ZX0gZm9udC1zZW1pYm9sZGB9Pnt0ZXh0fTwvc3Bhbj59XG4gICAgPC9idXR0b24+XG4gICk7XG59O1xuXG5jb25zdCBnZXRQYWRkaW5nID0gKHNpemU/OiBcInNtYWxsXCIgfCBcIm1lZGl1bVwiIHwgXCJsYXJnZVwiKSA9PiB7XG4gIHN3aXRjaCAoc2l6ZSkge1xuICAgIGNhc2UgXCJzbWFsbFwiOlxuICAgICAgcmV0dXJuIFwicHgtMyBweS0yXCI7XG4gICAgY2FzZSBcIm1lZGl1bVwiOlxuICAgICAgcmV0dXJuIFwicC0zXCI7XG4gICAgY2FzZSBcImxhcmdlXCI6XG4gICAgICByZXR1cm4gXCJwLTNcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFwicC0zXCI7XG4gIH1cbn07XG4iLCJ2YXIgaW1nID0gXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPScyMCcgaGVpZ2h0PScyMCcgdmlld0JveD0nMCAwIDIwIDIwJyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlJTNjcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE4LjA2MjMgMTQuMzg0OUMxOC40MDIgMTQuNjk1NSAxOC40MjU2IDE1LjIyMjYgMTguMTE1MSAxNS41NjIzTDE3LjI4MTcgMTYuNDc0QzE2LjY5MDQgMTcuMTIwNiAxNS44NzE1IDE3LjUgMTUuMDAwMSAxNy41QzE0LjEyOTEgMTcuNSAxMy4zMTA1IDE3LjEyMSAxMi43MTkyIDE2LjQ3NDZDMTIuNDI2IDE2LjE1NTIgMTIuMDQ1NyAxNS45OTE3IDExLjY2NjkgMTUuOTkxN0MxMS4yODc4IDE1Ljk5MTcgMTAuOTA3NCAxNi4xNTU0IDEwLjYxNDEgMTYuNDc1MUMxMC4zMDI5IDE2LjgxNDIgOS43NzU3NyAxNi44MzY5IDkuNDM2NjQgMTYuNTI1N0M5LjA5NzUyIDE2LjIxNDYgOS4wNzQ4NCAxNS42ODc0IDkuMzg1OTggMTUuMzQ4M0M5Ljk3NzkyIDE0LjcwMzEgMTAuNzk2MiAxNC4zMjUgMTEuNjY2OSAxNC4zMjVDMTIuNTM3NSAxNC4zMjUgMTMuMzU1OCAxNC43MDMxIDEzLjk0NzcgMTUuMzQ4M0wxMy45NDg3IDE1LjM0OTRDMTQuMjQxNCAxNS42Njk1IDE0LjYyMTUgMTUuODMzMyAxNS4wMDAxIDE1LjgzMzNDMTUuMzc4OCAxNS44MzMzIDE1Ljc1ODggMTUuNjY5NSAxNi4wNTE1IDE1LjM0OTRWMTUuMzQ5NEwxNi44ODUgMTQuNDM3N0MxNy4xOTU1IDE0LjA5OCAxNy43MjI2IDE0LjA3NDQgMTguMDYyMyAxNC4zODQ5WicgZmlsbD0nd2hpdGUnLyUzZSUzY3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMy4xNjA4IDIuMzI3NEMxNC4xNzY2IDEuMzExNiAxNS44MjM1IDEuMzExNiAxNi44MzkzIDIuMzI3NEMxNy44NTUxIDMuMzQzMTkgMTcuODU1MSA0Ljk5MDExIDE2LjgzOTMgNi4wMDU5MUw2LjM3MDM3IDE2LjQ3NDlDNi4zNTM4NyAxNi40OTE0IDYuMzM3NTMgMTYuNTA3NyA2LjMyMTMxIDE2LjUyNEM2LjA4MTc3IDE2Ljc2NCA1Ljg3MDU3IDE2Ljk3NTYgNS42MTU5NiAxNy4xMzE2QzUuMzkyMjggMTcuMjY4NyA1LjE0ODQxIDE3LjM2OTcgNC44OTMzMiAxNy40MzA5QzQuNjAyOTUgMTcuNTAwNiA0LjMwMzk5IDE3LjUwMDMgMy45NjQ5MSAxNy41QzMuOTQxOTYgMTcuNSAzLjkxODgzIDE3LjUgMy44OTU1IDE3LjVIMi41MDAwNEMyLjAzOTgxIDE3LjUgMS42NjY3MSAxNy4xMjY5IDEuNjY2NzEgMTYuNjY2N1YxNS4yNzEyQzEuNjY2NzEgMTUuMjQ3OSAxLjY2NjY5IDE1LjIyNDggMS42NjY2NyAxNS4yMDE4QzEuNjY2MzUgMTQuODYyNyAxLjY2NjA3IDE0LjU2MzggMS43MzU3OSAxNC4yNzM0QzEuNzk3MDMgMTQuMDE4MyAxLjg5ODA0IDEzLjc3NDQgMi4wMzUxMSAxMy41NTA4QzIuMTkxMTQgMTMuMjk2MSAyLjQwMjczIDEzLjA4NDkgMi42NDI3MiAxMi44NDU0QzIuNjU4OTcgMTIuODI5MiAyLjY3NTM0IDEyLjgxMjggMi42OTE4NCAxMi43OTYzTDEzLjE2MDggMi4zMjc0WicgZmlsbD0nd2hpdGUnLyUzZSUzYy9zdmclM2VcIjtcbiAgZXhwb3J0IGRlZmF1bHQgaW1nOyIsImltcG9ydCB7IHVzZUZlZWRiYWNrQ29udGV4dCB9IGZyb20gXCIuLi8uLi8uLi9jb250ZXh0cy9GZWVkYmFja0NvbnRleHRcIjtcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuL0J1dHRvblwiO1xuaW1wb3J0IEVkaXQgZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9pY29ucy9lZGl0LTA0LnN2Z1wiO1xuXG5leHBvcnQgY29uc3QgT3BlbkZlZWRiYWNrQnV0dG9uID0gKCkgPT4ge1xuICBjb25zdCB7IGlzT3Blbiwgb3BlbkZlZWRiYWNrT3ZlcmxheSB9ID0gdXNlRmVlZGJhY2tDb250ZXh0KCk7XG5cbiAgaWYgKGlzT3BlbikgcmV0dXJuIG51bGw7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBzdHlsZT17e1xuICAgICAgICBwb3NpdGlvbjogXCJmaXhlZFwiLFxuICAgICAgICB0b3A6IFwiY2FsYygxMDB2aCAtIDcycHgpXCIsXG4gICAgICAgIGxlZnQ6IFwiY2FsYygxMDB2dyAtIDcycHgpXCIsXG4gICAgICAgIHpJbmRleDogMTAwMDAwMCxcbiAgICAgIH19XG4gICAgPlxuICAgICAgPEJ1dHRvbiBpY29uUGF0aD17RWRpdH0gb25DbGljaz17b3BlbkZlZWRiYWNrT3ZlcmxheX0gc2l6ZT1cIm1lZGl1bVwiIC8+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIiwiZXhwb3J0IGNvbnN0IGdldEluaXRpYWxzID0gKHVzZXI6IHtcbiAgZnVsbE5hbWU/OiBzdHJpbmc7XG4gIGZpcnN0TmFtZT86IHN0cmluZztcbiAgbGFzdE5hbWU/OiBzdHJpbmc7XG59KSA9PiB7XG4gIGlmICh1c2VyLmZ1bGxOYW1lKSB7XG4gICAgY29uc3QgZnVsbE5hbWUgPSB1c2VyLmZ1bGxOYW1lLnNwbGl0KFwiIFwiKTtcbiAgICByZXR1cm4gZnVsbE5hbWVbMF0uY2hhckF0KDApICsgZnVsbE5hbWVbMV0uY2hhckF0KDApO1xuICB9XG4gIGlmICghdXNlci5maXJzdE5hbWUgfHwgIXVzZXIubGFzdE5hbWUpIHJldHVybiBcIlwiO1xuICBjb25zdCBmaXJzdE5hbWUgPSB1c2VyLmZpcnN0TmFtZS5jaGFyQXQoMCk7XG4gIGNvbnN0IGxhc3ROYW1lID0gdXNlci5sYXN0TmFtZS5jaGFyQXQoMCk7XG5cbiAgcmV0dXJuIGAke2ZpcnN0TmFtZS50b1VwcGVyQ2FzZSgpfSR7bGFzdE5hbWUudG9VcHBlckNhc2UoKX1gO1xufTtcbiIsIi8vISBtb21lbnQuanNcbi8vISB2ZXJzaW9uIDogMi4zMC4xXG4vLyEgYXV0aG9ycyA6IFRpbSBXb29kLCBJc2tyZW4gQ2hlcm5ldiwgTW9tZW50LmpzIGNvbnRyaWJ1dG9yc1xuLy8hIGxpY2Vuc2UgOiBNSVRcbi8vISBtb21lbnRqcy5jb21cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gICAgZ2xvYmFsLm1vbWVudCA9IGZhY3RvcnkoKVxufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgaG9va0NhbGxiYWNrO1xuXG4gICAgZnVuY3Rpb24gaG9va3MoKSB7XG4gICAgICAgIHJldHVybiBob29rQ2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIGRvbmUgdG8gcmVnaXN0ZXIgdGhlIG1ldGhvZCBjYWxsZWQgd2l0aCBtb21lbnQoKVxuICAgIC8vIHdpdGhvdXQgY3JlYXRpbmcgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLlxuICAgIGZ1bmN0aW9uIHNldEhvb2tDYWxsYmFjayhjYWxsYmFjaykge1xuICAgICAgICBob29rQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FycmF5KGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIEFycmF5IHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBBcnJheV0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPYmplY3QoaW5wdXQpIHtcbiAgICAgICAgLy8gSUU4IHdpbGwgdHJlYXQgdW5kZWZpbmVkIGFuZCBudWxsIGFzIG9iamVjdCBpZiBpdCB3YXNuJ3QgZm9yXG4gICAgICAgIC8vIGlucHV0ICE9IG51bGxcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlucHV0ICE9IG51bGwgJiZcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IE9iamVjdF0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzT3duUHJvcChhLCBiKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSwgYik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPYmplY3RFbXB0eShvYmopIHtcbiAgICAgICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5sZW5ndGggPT09IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaztcbiAgICAgICAgICAgIGZvciAoayBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChvYmosIGspKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVW5kZWZpbmVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PT0gdm9pZCAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTnVtYmVyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBOdW1iZXJdJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF0ZShpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBEYXRlXSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXAoYXJyLCBmbikge1xuICAgICAgICB2YXIgcmVzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgYXJyTGVuID0gYXJyLmxlbmd0aDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyckxlbjsgKytpKSB7XG4gICAgICAgICAgICByZXMucHVzaChmbihhcnJbaV0sIGkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dGVuZChhLCBiKSB7XG4gICAgICAgIGZvciAodmFyIGkgaW4gYikge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoYiwgaSkpIHtcbiAgICAgICAgICAgICAgICBhW2ldID0gYltpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNPd25Qcm9wKGIsICd0b1N0cmluZycpKSB7XG4gICAgICAgICAgICBhLnRvU3RyaW5nID0gYi50b1N0cmluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNPd25Qcm9wKGIsICd2YWx1ZU9mJykpIHtcbiAgICAgICAgICAgIGEudmFsdWVPZiA9IGIudmFsdWVPZjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgdHJ1ZSkudXRjKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVmYXVsdFBhcnNpbmdGbGFncygpIHtcbiAgICAgICAgLy8gV2UgbmVlZCB0byBkZWVwIGNsb25lIHRoaXMgb2JqZWN0LlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZW1wdHk6IGZhbHNlLFxuICAgICAgICAgICAgdW51c2VkVG9rZW5zOiBbXSxcbiAgICAgICAgICAgIHVudXNlZElucHV0OiBbXSxcbiAgICAgICAgICAgIG92ZXJmbG93OiAtMixcbiAgICAgICAgICAgIGNoYXJzTGVmdE92ZXI6IDAsXG4gICAgICAgICAgICBudWxsSW5wdXQ6IGZhbHNlLFxuICAgICAgICAgICAgaW52YWxpZEVyYTogbnVsbCxcbiAgICAgICAgICAgIGludmFsaWRNb250aDogbnVsbCxcbiAgICAgICAgICAgIGludmFsaWRGb3JtYXQ6IGZhbHNlLFxuICAgICAgICAgICAgdXNlckludmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGlzbzogZmFsc2UsXG4gICAgICAgICAgICBwYXJzZWREYXRlUGFydHM6IFtdLFxuICAgICAgICAgICAgZXJhOiBudWxsLFxuICAgICAgICAgICAgbWVyaWRpZW06IG51bGwsXG4gICAgICAgICAgICByZmMyODIyOiBmYWxzZSxcbiAgICAgICAgICAgIHdlZWtkYXlNaXNtYXRjaDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyc2luZ0ZsYWdzKG0pIHtcbiAgICAgICAgaWYgKG0uX3BmID09IG51bGwpIHtcbiAgICAgICAgICAgIG0uX3BmID0gZGVmYXVsdFBhcnNpbmdGbGFncygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtLl9wZjtcbiAgICB9XG5cbiAgICB2YXIgc29tZTtcbiAgICBpZiAoQXJyYXkucHJvdG90eXBlLnNvbWUpIHtcbiAgICAgICAgc29tZSA9IEFycmF5LnByb3RvdHlwZS5zb21lO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHNvbWUgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgICAgICAgICB2YXIgdCA9IE9iamVjdCh0aGlzKSxcbiAgICAgICAgICAgICAgICBsZW4gPSB0Lmxlbmd0aCA+Pj4gMCxcbiAgICAgICAgICAgICAgICBpO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaSBpbiB0ICYmIGZ1bi5jYWxsKHRoaXMsIHRbaV0sIGksIHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWQobSkge1xuICAgICAgICB2YXIgZmxhZ3MgPSBudWxsLFxuICAgICAgICAgICAgcGFyc2VkUGFydHMgPSBmYWxzZSxcbiAgICAgICAgICAgIGlzTm93VmFsaWQgPSBtLl9kICYmICFpc05hTihtLl9kLmdldFRpbWUoKSk7XG4gICAgICAgIGlmIChpc05vd1ZhbGlkKSB7XG4gICAgICAgICAgICBmbGFncyA9IGdldFBhcnNpbmdGbGFncyhtKTtcbiAgICAgICAgICAgIHBhcnNlZFBhcnRzID0gc29tZS5jYWxsKGZsYWdzLnBhcnNlZERhdGVQYXJ0cywgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaSAhPSBudWxsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpc05vd1ZhbGlkID1cbiAgICAgICAgICAgICAgICBmbGFncy5vdmVyZmxvdyA8IDAgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuZW1wdHkgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZEVyYSAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkTW9udGggJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZFdlZWtkYXkgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3Mud2Vla2RheU1pc21hdGNoICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLm51bGxJbnB1dCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkRm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLnVzZXJJbnZhbGlkYXRlZCAmJlxuICAgICAgICAgICAgICAgICghZmxhZ3MubWVyaWRpZW0gfHwgKGZsYWdzLm1lcmlkaWVtICYmIHBhcnNlZFBhcnRzKSk7XG4gICAgICAgICAgICBpZiAobS5fc3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgaXNOb3dWYWxpZCA9XG4gICAgICAgICAgICAgICAgICAgIGlzTm93VmFsaWQgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuY2hhcnNMZWZ0T3ZlciA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy51bnVzZWRUb2tlbnMubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmJpZ0hvdXIgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoT2JqZWN0LmlzRnJvemVuID09IG51bGwgfHwgIU9iamVjdC5pc0Zyb3plbihtKSkge1xuICAgICAgICAgICAgbS5faXNWYWxpZCA9IGlzTm93VmFsaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaXNOb3dWYWxpZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbS5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkKGZsYWdzKSB7XG4gICAgICAgIHZhciBtID0gY3JlYXRlVVRDKE5hTik7XG4gICAgICAgIGlmIChmbGFncyAhPSBudWxsKSB7XG4gICAgICAgICAgICBleHRlbmQoZ2V0UGFyc2luZ0ZsYWdzKG0pLCBmbGFncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MobSkudXNlckludmFsaWRhdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIC8vIFBsdWdpbnMgdGhhdCBhZGQgcHJvcGVydGllcyBzaG91bGQgYWxzbyBhZGQgdGhlIGtleSBoZXJlIChudWxsIHZhbHVlKSxcbiAgICAvLyBzbyB3ZSBjYW4gcHJvcGVybHkgY2xvbmUgb3Vyc2VsdmVzLlxuICAgIHZhciBtb21lbnRQcm9wZXJ0aWVzID0gKGhvb2tzLm1vbWVudFByb3BlcnRpZXMgPSBbXSksXG4gICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGNvcHlDb25maWcodG8sIGZyb20pIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBwcm9wLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgbW9tZW50UHJvcGVydGllc0xlbiA9IG1vbWVudFByb3BlcnRpZXMubGVuZ3RoO1xuXG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faXNBTW9tZW50T2JqZWN0KSkge1xuICAgICAgICAgICAgdG8uX2lzQU1vbWVudE9iamVjdCA9IGZyb20uX2lzQU1vbWVudE9iamVjdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2kpKSB7XG4gICAgICAgICAgICB0by5faSA9IGZyb20uX2k7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9mKSkge1xuICAgICAgICAgICAgdG8uX2YgPSBmcm9tLl9mO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fbCkpIHtcbiAgICAgICAgICAgIHRvLl9sID0gZnJvbS5fbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX3N0cmljdCkpIHtcbiAgICAgICAgICAgIHRvLl9zdHJpY3QgPSBmcm9tLl9zdHJpY3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl90em0pKSB7XG4gICAgICAgICAgICB0by5fdHptID0gZnJvbS5fdHptO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faXNVVEMpKSB7XG4gICAgICAgICAgICB0by5faXNVVEMgPSBmcm9tLl9pc1VUQztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX29mZnNldCkpIHtcbiAgICAgICAgICAgIHRvLl9vZmZzZXQgPSBmcm9tLl9vZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9wZikpIHtcbiAgICAgICAgICAgIHRvLl9wZiA9IGdldFBhcnNpbmdGbGFncyhmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2xvY2FsZSkpIHtcbiAgICAgICAgICAgIHRvLl9sb2NhbGUgPSBmcm9tLl9sb2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9tZW50UHJvcGVydGllc0xlbiA+IDApIHtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtb21lbnRQcm9wZXJ0aWVzTGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwcm9wID0gbW9tZW50UHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgICAgICB2YWwgPSBmcm9tW3Byb3BdO1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQodmFsKSkge1xuICAgICAgICAgICAgICAgICAgICB0b1twcm9wXSA9IHZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdG87XG4gICAgfVxuXG4gICAgLy8gTW9tZW50IHByb3RvdHlwZSBvYmplY3RcbiAgICBmdW5jdGlvbiBNb21lbnQoY29uZmlnKSB7XG4gICAgICAgIGNvcHlDb25maWcodGhpcywgY29uZmlnKTtcbiAgICAgICAgdGhpcy5fZCA9IG5ldyBEYXRlKGNvbmZpZy5fZCAhPSBudWxsID8gY29uZmlnLl9kLmdldFRpbWUoKSA6IE5hTik7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2QgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFByZXZlbnQgaW5maW5pdGUgbG9vcCBpbiBjYXNlIHVwZGF0ZU9mZnNldCBjcmVhdGVzIG5ldyBtb21lbnRcbiAgICAgICAgLy8gb2JqZWN0cy5cbiAgICAgICAgaWYgKHVwZGF0ZUluUHJvZ3Jlc3MgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTW9tZW50KG9iaikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgb2JqIGluc3RhbmNlb2YgTW9tZW50IHx8IChvYmogIT0gbnVsbCAmJiBvYmouX2lzQU1vbWVudE9iamVjdCAhPSBudWxsKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdhcm4obXNnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGhvb2tzLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyA9PT0gZmFsc2UgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgY29uc29sZS53YXJuXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEZXByZWNhdGlvbiB3YXJuaW5nOiAnICsgbXNnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZShtc2csIGZuKSB7XG4gICAgICAgIHZhciBmaXJzdFRpbWUgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiBleHRlbmQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyKG51bGwsIG1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlyc3RUaW1lKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgICAgICAgICAgICAgYXJnLFxuICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgIGFyZ0xlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyZ0xlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZyA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1tpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyArPSAnXFxuWycgKyBpICsgJ10gJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoa2V5IGluIGFyZ3VtZW50c1swXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGFyZ3VtZW50c1swXSwga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcgKz0ga2V5ICsgJzogJyArIGFyZ3VtZW50c1swXVtrZXldICsgJywgJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmcuc2xpY2UoMCwgLTIpOyAvLyBSZW1vdmUgdHJhaWxpbmcgY29tbWEgYW5kIHNwYWNlXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGFyZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAgICAgICAgIG1zZyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXFxuQXJndW1lbnRzOiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpLmpvaW4oJycpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBFcnJvcigpLnN0YWNrXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBmaXJzdFRpbWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBmbik7XG4gICAgfVxuXG4gICAgdmFyIGRlcHJlY2F0aW9ucyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gZGVwcmVjYXRlU2ltcGxlKG5hbWUsIG1zZykge1xuICAgICAgICBpZiAoaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyICE9IG51bGwpIHtcbiAgICAgICAgICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlcihuYW1lLCBtc2cpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGVwcmVjYXRpb25zW25hbWVdKSB7XG4gICAgICAgICAgICB3YXJuKG1zZyk7XG4gICAgICAgICAgICBkZXByZWNhdGlvbnNbbmFtZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaG9va3Muc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzID0gZmFsc2U7XG4gICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyID0gbnVsbDtcblxuICAgIGZ1bmN0aW9uIGlzRnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICh0eXBlb2YgRnVuY3Rpb24gIT09ICd1bmRlZmluZWQnICYmIGlucHV0IGluc3RhbmNlb2YgRnVuY3Rpb24pIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBGdW5jdGlvbl0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0KGNvbmZpZykge1xuICAgICAgICB2YXIgcHJvcCwgaTtcbiAgICAgICAgZm9yIChpIGluIGNvbmZpZykge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoY29uZmlnLCBpKSkge1xuICAgICAgICAgICAgICAgIHByb3AgPSBjb25maWdbaV07XG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1tpXSA9IHByb3A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1snXycgKyBpXSA9IHByb3A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgLy8gTGVuaWVudCBvcmRpbmFsIHBhcnNpbmcgYWNjZXB0cyBqdXN0IGEgbnVtYmVyIGluIGFkZGl0aW9uIHRvXG4gICAgICAgIC8vIG51bWJlciArIChwb3NzaWJseSkgc3R1ZmYgY29taW5nIGZyb20gX2RheU9mTW9udGhPcmRpbmFsUGFyc2UuXG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSBcIm9yZGluYWxQYXJzZVwiIGZhbGxiYWNrIGluIG5leHQgbWFqb3IgcmVsZWFzZS5cbiAgICAgICAgdGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQgPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgKHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2Uuc291cmNlIHx8IHRoaXMuX29yZGluYWxQYXJzZS5zb3VyY2UpICtcbiAgICAgICAgICAgICAgICAnfCcgK1xuICAgICAgICAgICAgICAgIC9cXGR7MSwyfS8uc291cmNlXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY2hpbGRDb25maWcpIHtcbiAgICAgICAgdmFyIHJlcyA9IGV4dGVuZCh7fSwgcGFyZW50Q29uZmlnKSxcbiAgICAgICAgICAgIHByb3A7XG4gICAgICAgIGZvciAocHJvcCBpbiBjaGlsZENvbmZpZykge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoY2hpbGRDb25maWcsIHByb3ApKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KHBhcmVudENvbmZpZ1twcm9wXSkgJiYgaXNPYmplY3QoY2hpbGRDb25maWdbcHJvcF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBwYXJlbnRDb25maWdbcHJvcF0pO1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBjaGlsZENvbmZpZ1twcm9wXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZENvbmZpZ1twcm9wXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IGNoaWxkQ29uZmlnW3Byb3BdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZXNbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAocHJvcCBpbiBwYXJlbnRDb25maWcpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBoYXNPd25Qcm9wKHBhcmVudENvbmZpZywgcHJvcCkgJiZcbiAgICAgICAgICAgICAgICAhaGFzT3duUHJvcChjaGlsZENvbmZpZywgcHJvcCkgJiZcbiAgICAgICAgICAgICAgICBpc09iamVjdChwYXJlbnRDb25maWdbcHJvcF0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgY2hhbmdlcyB0byBwcm9wZXJ0aWVzIGRvbid0IG1vZGlmeSBwYXJlbnQgY29uZmlnXG4gICAgICAgICAgICAgICAgcmVzW3Byb3BdID0gZXh0ZW5kKHt9LCByZXNbcHJvcF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gTG9jYWxlKGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5cztcblxuICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAga2V5cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHZhciBpLFxuICAgICAgICAgICAgICAgIHJlcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChpIGluIG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKG9iaiwgaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdENhbGVuZGFyID0ge1xuICAgICAgICBzYW1lRGF5OiAnW1RvZGF5IGF0XSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICBsYXN0RGF5OiAnW1llc3RlcmRheSBhdF0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjYWxlbmRhcihrZXksIG1vbSwgbm93KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9jYWxlbmRhcltrZXldIHx8IHRoaXMuX2NhbGVuZGFyWydzYW1lRWxzZSddO1xuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihvdXRwdXQpID8gb3V0cHV0LmNhbGwobW9tLCBub3cpIDogb3V0cHV0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHplcm9GaWxsKG51bWJlciwgdGFyZ2V0TGVuZ3RoLCBmb3JjZVNpZ24pIHtcbiAgICAgICAgdmFyIGFic051bWJlciA9ICcnICsgTWF0aC5hYnMobnVtYmVyKSxcbiAgICAgICAgICAgIHplcm9zVG9GaWxsID0gdGFyZ2V0TGVuZ3RoIC0gYWJzTnVtYmVyLmxlbmd0aCxcbiAgICAgICAgICAgIHNpZ24gPSBudW1iZXIgPj0gMDtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChzaWduID8gKGZvcmNlU2lnbiA/ICcrJyA6ICcnKSA6ICctJykgK1xuICAgICAgICAgICAgTWF0aC5wb3coMTAsIE1hdGgubWF4KDAsIHplcm9zVG9GaWxsKSkudG9TdHJpbmcoKS5zdWJzdHIoMSkgK1xuICAgICAgICAgICAgYWJzTnVtYmVyXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIGZvcm1hdHRpbmdUb2tlbnMgPVxuICAgICAgICAgICAgLyhcXFtbXlxcW10qXFxdKXwoXFxcXCk/KFtIaF1tbShzcyk/fE1vfE1NP00/TT98RG98REREb3xERD9EP0Q/fGRkZD9kP3xkbz98d1tvfHddP3xXW298V10/fFFvP3xOezEsNX18WVlZWVlZfFlZWVlZfFlZWVl8WVl8eXsyLDR9fHlvP3xnZyhnZ2c/KT98R0coR0dHPyk/fGV8RXxhfEF8aGg/fEhIP3xraz98bW0/fHNzP3xTezEsOX18eHxYfHp6P3xaWj98LikvZyxcbiAgICAgICAgbG9jYWxGb3JtYXR0aW5nVG9rZW5zID0gLyhcXFtbXlxcW10qXFxdKXwoXFxcXCk/KExUU3xMVHxMTD9MP0w/fGx7MSw0fSkvZyxcbiAgICAgICAgZm9ybWF0RnVuY3Rpb25zID0ge30sXG4gICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zID0ge307XG5cbiAgICAvLyB0b2tlbjogICAgJ00nXG4gICAgLy8gcGFkZGVkOiAgIFsnTU0nLCAyXVxuICAgIC8vIG9yZGluYWw6ICAnTW8nXG4gICAgLy8gY2FsbGJhY2s6IGZ1bmN0aW9uICgpIHsgdGhpcy5tb250aCgpICsgMSB9XG4gICAgZnVuY3Rpb24gYWRkRm9ybWF0VG9rZW4odG9rZW4sIHBhZGRlZCwgb3JkaW5hbCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZ1bmMgPSBjYWxsYmFjaztcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGJhY2tdKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbdG9rZW5dID0gZnVuYztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFkZGVkKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1twYWRkZWRbMF1dID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB6ZXJvRmlsbChmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHBhZGRlZFsxXSwgcGFkZGVkWzJdKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9yZGluYWwpIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW29yZGluYWxdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5vcmRpbmFsKFxuICAgICAgICAgICAgICAgICAgICBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgICAgICAgICAgICAgIHRva2VuXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdmVGb3JtYXR0aW5nVG9rZW5zKGlucHV0KSB7XG4gICAgICAgIGlmIChpbnB1dC5tYXRjaCgvXFxbW1xcc1xcU10vKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL15cXFt8XFxdJC9nLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL1xcXFwvZywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VGb3JtYXRGdW5jdGlvbihmb3JtYXQpIHtcbiAgICAgICAgdmFyIGFycmF5ID0gZm9ybWF0Lm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGxlbmd0aDtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGZvcm1hdFRva2VuRnVuY3Rpb25zW2FycmF5W2ldXSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gZm9ybWF0VG9rZW5GdW5jdGlvbnNbYXJyYXlbaV1dO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHJlbW92ZUZvcm1hdHRpbmdUb2tlbnMoYXJyYXlbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtb20pIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSAnJyxcbiAgICAgICAgICAgICAgICBpO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IGlzRnVuY3Rpb24oYXJyYXlbaV0pXG4gICAgICAgICAgICAgICAgICAgID8gYXJyYXlbaV0uY2FsbChtb20sIGZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgOiBhcnJheVtpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gZm9ybWF0IGRhdGUgdXNpbmcgbmF0aXZlIGRhdGUgb2JqZWN0XG4gICAgZnVuY3Rpb24gZm9ybWF0TW9tZW50KG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbS5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcm1hdCA9IGV4cGFuZEZvcm1hdChmb3JtYXQsIG0ubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gPVxuICAgICAgICAgICAgZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gfHwgbWFrZUZvcm1hdEZ1bmN0aW9uKGZvcm1hdCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdKG0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4cGFuZEZvcm1hdChmb3JtYXQsIGxvY2FsZSkge1xuICAgICAgICB2YXIgaSA9IDU7XG5cbiAgICAgICAgZnVuY3Rpb24gcmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLmxvbmdEYXRlRm9ybWF0KGlucHV0KSB8fCBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy5sYXN0SW5kZXggPSAwO1xuICAgICAgICB3aGlsZSAoaSA+PSAwICYmIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2VucyxcbiAgICAgICAgICAgICAgICByZXBsYWNlTG9uZ0RhdGVGb3JtYXRUb2tlbnNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgIGkgLT0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb25nRGF0ZUZvcm1hdCA9IHtcbiAgICAgICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICAgICAgTFQ6ICdoOm1tIEEnLFxuICAgICAgICBMOiAnTU0vREQvWVlZWScsXG4gICAgICAgIExMOiAnTU1NTSBELCBZWVlZJyxcbiAgICAgICAgTExMOiAnTU1NTSBELCBZWVlZIGg6bW0gQScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gbG9uZ0RhdGVGb3JtYXQoa2V5KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldLFxuICAgICAgICAgICAgZm9ybWF0VXBwZXIgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXkudG9VcHBlckNhc2UoKV07XG5cbiAgICAgICAgaWYgKGZvcm1hdCB8fCAhZm9ybWF0VXBwZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldID0gZm9ybWF0VXBwZXJcbiAgICAgICAgICAgIC5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKVxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAodG9rKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdNTU1NJyB8fFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdNTScgfHxcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnREQnIHx8XG4gICAgICAgICAgICAgICAgICAgIHRvayA9PT0gJ2RkZGQnXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2suc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0b2s7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0SW52YWxpZERhdGUgPSAnSW52YWxpZCBkYXRlJztcblxuICAgIGZ1bmN0aW9uIGludmFsaWREYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52YWxpZERhdGU7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRPcmRpbmFsID0gJyVkJyxcbiAgICAgICAgZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UgPSAvXFxkezEsMn0vO1xuXG4gICAgZnVuY3Rpb24gb3JkaW5hbChudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29yZGluYWwucmVwbGFjZSgnJWQnLCBudW1iZXIpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0UmVsYXRpdmVUaW1lID0ge1xuICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICBzOiAnYSBmZXcgc2Vjb25kcycsXG4gICAgICAgIHNzOiAnJWQgc2Vjb25kcycsXG4gICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgIG1tOiAnJWQgbWludXRlcycsXG4gICAgICAgIGg6ICdhbiBob3VyJyxcbiAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgIGQ6ICdhIGRheScsXG4gICAgICAgIGRkOiAnJWQgZGF5cycsXG4gICAgICAgIHc6ICdhIHdlZWsnLFxuICAgICAgICB3dzogJyVkIHdlZWtzJyxcbiAgICAgICAgTTogJ2EgbW9udGgnLFxuICAgICAgICBNTTogJyVkIG1vbnRocycsXG4gICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICB5eTogJyVkIHllYXJzJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fcmVsYXRpdmVUaW1lW3N0cmluZ107XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKG91dHB1dClcbiAgICAgICAgICAgID8gb3V0cHV0KG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSlcbiAgICAgICAgICAgIDogb3V0cHV0LnJlcGxhY2UoLyVkL2ksIG51bWJlcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFzdEZ1dHVyZShkaWZmLCBvdXRwdXQpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHRoaXMuX3JlbGF0aXZlVGltZVtkaWZmID4gMCA/ICdmdXR1cmUnIDogJ3Bhc3QnXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oZm9ybWF0KSA/IGZvcm1hdChvdXRwdXQpIDogZm9ybWF0LnJlcGxhY2UoLyVzL2ksIG91dHB1dCk7XG4gICAgfVxuXG4gICAgdmFyIGFsaWFzZXMgPSB7XG4gICAgICAgIEQ6ICdkYXRlJyxcbiAgICAgICAgZGF0ZXM6ICdkYXRlJyxcbiAgICAgICAgZGF0ZTogJ2RhdGUnLFxuICAgICAgICBkOiAnZGF5JyxcbiAgICAgICAgZGF5czogJ2RheScsXG4gICAgICAgIGRheTogJ2RheScsXG4gICAgICAgIGU6ICd3ZWVrZGF5JyxcbiAgICAgICAgd2Vla2RheXM6ICd3ZWVrZGF5JyxcbiAgICAgICAgd2Vla2RheTogJ3dlZWtkYXknLFxuICAgICAgICBFOiAnaXNvV2Vla2RheScsXG4gICAgICAgIGlzb3dlZWtkYXlzOiAnaXNvV2Vla2RheScsXG4gICAgICAgIGlzb3dlZWtkYXk6ICdpc29XZWVrZGF5JyxcbiAgICAgICAgREREOiAnZGF5T2ZZZWFyJyxcbiAgICAgICAgZGF5b2Z5ZWFyczogJ2RheU9mWWVhcicsXG4gICAgICAgIGRheW9meWVhcjogJ2RheU9mWWVhcicsXG4gICAgICAgIGg6ICdob3VyJyxcbiAgICAgICAgaG91cnM6ICdob3VyJyxcbiAgICAgICAgaG91cjogJ2hvdXInLFxuICAgICAgICBtczogJ21pbGxpc2Vjb25kJyxcbiAgICAgICAgbWlsbGlzZWNvbmRzOiAnbWlsbGlzZWNvbmQnLFxuICAgICAgICBtaWxsaXNlY29uZDogJ21pbGxpc2Vjb25kJyxcbiAgICAgICAgbTogJ21pbnV0ZScsXG4gICAgICAgIG1pbnV0ZXM6ICdtaW51dGUnLFxuICAgICAgICBtaW51dGU6ICdtaW51dGUnLFxuICAgICAgICBNOiAnbW9udGgnLFxuICAgICAgICBtb250aHM6ICdtb250aCcsXG4gICAgICAgIG1vbnRoOiAnbW9udGgnLFxuICAgICAgICBROiAncXVhcnRlcicsXG4gICAgICAgIHF1YXJ0ZXJzOiAncXVhcnRlcicsXG4gICAgICAgIHF1YXJ0ZXI6ICdxdWFydGVyJyxcbiAgICAgICAgczogJ3NlY29uZCcsXG4gICAgICAgIHNlY29uZHM6ICdzZWNvbmQnLFxuICAgICAgICBzZWNvbmQ6ICdzZWNvbmQnLFxuICAgICAgICBnZzogJ3dlZWtZZWFyJyxcbiAgICAgICAgd2Vla3llYXJzOiAnd2Vla1llYXInLFxuICAgICAgICB3ZWVreWVhcjogJ3dlZWtZZWFyJyxcbiAgICAgICAgR0c6ICdpc29XZWVrWWVhcicsXG4gICAgICAgIGlzb3dlZWt5ZWFyczogJ2lzb1dlZWtZZWFyJyxcbiAgICAgICAgaXNvd2Vla3llYXI6ICdpc29XZWVrWWVhcicsXG4gICAgICAgIHc6ICd3ZWVrJyxcbiAgICAgICAgd2Vla3M6ICd3ZWVrJyxcbiAgICAgICAgd2VlazogJ3dlZWsnLFxuICAgICAgICBXOiAnaXNvV2VlaycsXG4gICAgICAgIGlzb3dlZWtzOiAnaXNvV2VlaycsXG4gICAgICAgIGlzb3dlZWs6ICdpc29XZWVrJyxcbiAgICAgICAgeTogJ3llYXInLFxuICAgICAgICB5ZWFyczogJ3llYXInLFxuICAgICAgICB5ZWFyOiAneWVhcicsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdW5pdHMgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IGFsaWFzZXNbdW5pdHNdIHx8IGFsaWFzZXNbdW5pdHMudG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZU9iamVjdFVuaXRzKGlucHV0T2JqZWN0KSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkSW5wdXQgPSB7fSxcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wLFxuICAgICAgICAgICAgcHJvcDtcblxuICAgICAgICBmb3IgKHByb3AgaW4gaW5wdXRPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGlucHV0T2JqZWN0LCBwcm9wKSkge1xuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wID0gbm9ybWFsaXplVW5pdHMocHJvcCk7XG4gICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRQcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRJbnB1dFtub3JtYWxpemVkUHJvcF0gPSBpbnB1dE9iamVjdFtwcm9wXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9ybWFsaXplZElucHV0O1xuICAgIH1cblxuICAgIHZhciBwcmlvcml0aWVzID0ge1xuICAgICAgICBkYXRlOiA5LFxuICAgICAgICBkYXk6IDExLFxuICAgICAgICB3ZWVrZGF5OiAxMSxcbiAgICAgICAgaXNvV2Vla2RheTogMTEsXG4gICAgICAgIGRheU9mWWVhcjogNCxcbiAgICAgICAgaG91cjogMTMsXG4gICAgICAgIG1pbGxpc2Vjb25kOiAxNixcbiAgICAgICAgbWludXRlOiAxNCxcbiAgICAgICAgbW9udGg6IDgsXG4gICAgICAgIHF1YXJ0ZXI6IDcsXG4gICAgICAgIHNlY29uZDogMTUsXG4gICAgICAgIHdlZWtZZWFyOiAxLFxuICAgICAgICBpc29XZWVrWWVhcjogMSxcbiAgICAgICAgd2VlazogNSxcbiAgICAgICAgaXNvV2VlazogNSxcbiAgICAgICAgeWVhcjogMSxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gZ2V0UHJpb3JpdGl6ZWRVbml0cyh1bml0c09iaikge1xuICAgICAgICB2YXIgdW5pdHMgPSBbXSxcbiAgICAgICAgICAgIHU7XG4gICAgICAgIGZvciAodSBpbiB1bml0c09iaikge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AodW5pdHNPYmosIHUpKSB7XG4gICAgICAgICAgICAgICAgdW5pdHMucHVzaCh7IHVuaXQ6IHUsIHByaW9yaXR5OiBwcmlvcml0aWVzW3VdIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHVuaXRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB1bml0cztcbiAgICB9XG5cbiAgICB2YXIgbWF0Y2gxID0gL1xcZC8sIC8vICAgICAgIDAgLSA5XG4gICAgICAgIG1hdGNoMiA9IC9cXGRcXGQvLCAvLyAgICAgIDAwIC0gOTlcbiAgICAgICAgbWF0Y2gzID0gL1xcZHszfS8sIC8vICAgICAwMDAgLSA5OTlcbiAgICAgICAgbWF0Y2g0ID0gL1xcZHs0fS8sIC8vICAgIDAwMDAgLSA5OTk5XG4gICAgICAgIG1hdGNoNiA9IC9bKy1dP1xcZHs2fS8sIC8vIC05OTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2gxdG8yID0gL1xcZFxcZD8vLCAvLyAgICAgICAwIC0gOTlcbiAgICAgICAgbWF0Y2gzdG80ID0gL1xcZFxcZFxcZFxcZD8vLCAvLyAgICAgOTk5IC0gOTk5OVxuICAgICAgICBtYXRjaDV0bzYgPSAvXFxkXFxkXFxkXFxkXFxkXFxkPy8sIC8vICAgOTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2gxdG8zID0gL1xcZHsxLDN9LywgLy8gICAgICAgMCAtIDk5OVxuICAgICAgICBtYXRjaDF0bzQgPSAvXFxkezEsNH0vLCAvLyAgICAgICAwIC0gOTk5OVxuICAgICAgICBtYXRjaDF0bzYgPSAvWystXT9cXGR7MSw2fS8sIC8vIC05OTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2hVbnNpZ25lZCA9IC9cXGQrLywgLy8gICAgICAgMCAtIGluZlxuICAgICAgICBtYXRjaFNpZ25lZCA9IC9bKy1dP1xcZCsvLCAvLyAgICAtaW5mIC0gaW5mXG4gICAgICAgIG1hdGNoT2Zmc2V0ID0gL1p8WystXVxcZFxcZDo/XFxkXFxkL2dpLCAvLyArMDA6MDAgLTAwOjAwICswMDAwIC0wMDAwIG9yIFpcbiAgICAgICAgbWF0Y2hTaG9ydE9mZnNldCA9IC9afFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/L2dpLCAvLyArMDAgLTAwICswMDowMCAtMDA6MDAgKzAwMDAgLTAwMDAgb3IgWlxuICAgICAgICBtYXRjaFRpbWVzdGFtcCA9IC9bKy1dP1xcZCsoXFwuXFxkezEsM30pPy8sIC8vIDEyMzQ1Njc4OSAxMjM0NTY3ODkuMTIzXG4gICAgICAgIC8vIGFueSB3b3JkIChvciB0d28pIGNoYXJhY3RlcnMgb3IgbnVtYmVycyBpbmNsdWRpbmcgdHdvL3RocmVlIHdvcmQgbW9udGggaW4gYXJhYmljLlxuICAgICAgICAvLyBpbmNsdWRlcyBzY290dGlzaCBnYWVsaWMgdHdvIHdvcmQgYW5kIGh5cGhlbmF0ZWQgbW9udGhzXG4gICAgICAgIG1hdGNoV29yZCA9XG4gICAgICAgICAgICAvWzAtOV17MCwyNTZ9WydhLXpcXHUwMEEwLVxcdTA1RkZcXHUwNzAwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGMDdcXHVGRjEwLVxcdUZGRUZdezEsMjU2fXxbXFx1MDYwMC1cXHUwNkZGXFwvXXsxLDI1Nn0oXFxzKj9bXFx1MDYwMC1cXHUwNkZGXXsxLDI1Nn0pezEsMn0vaSxcbiAgICAgICAgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyA9IC9eWzEtOV1cXGQ/LywgLy8gICAgICAgICAxLTk5XG4gICAgICAgIG1hdGNoMXRvMkhhc1plcm8gPSAvXihbMS05XVxcZHxcXGQpLywgLy8gICAgICAgICAgIDAtOTlcbiAgICAgICAgcmVnZXhlcztcblxuICAgIHJlZ2V4ZXMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFJlZ2V4VG9rZW4odG9rZW4sIHJlZ2V4LCBzdHJpY3RSZWdleCkge1xuICAgICAgICByZWdleGVzW3Rva2VuXSA9IGlzRnVuY3Rpb24ocmVnZXgpXG4gICAgICAgICAgICA/IHJlZ2V4XG4gICAgICAgICAgICA6IGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlRGF0YSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzU3RyaWN0ICYmIHN0cmljdFJlZ2V4ID8gc3RyaWN0UmVnZXggOiByZWdleDtcbiAgICAgICAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4odG9rZW4sIGNvbmZpZykge1xuICAgICAgICBpZiAoIWhhc093blByb3AocmVnZXhlcywgdG9rZW4pKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cCh1bmVzY2FwZUZvcm1hdCh0b2tlbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlZ2V4ZXNbdG9rZW5dKGNvbmZpZy5fc3RyaWN0LCBjb25maWcuX2xvY2FsZSk7XG4gICAgfVxuXG4gICAgLy8gQ29kZSBmcm9tIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzU2MTQ5My9pcy10aGVyZS1hLXJlZ2V4cC1lc2NhcGUtZnVuY3Rpb24taW4tamF2YXNjcmlwdFxuICAgIGZ1bmN0aW9uIHVuZXNjYXBlRm9ybWF0KHMpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2V4RXNjYXBlKFxuICAgICAgICAgICAgc1xuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdcXFxcJywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgIC9cXFxcKFxcWyl8XFxcXChcXF0pfFxcWyhbXlxcXVxcW10qKVxcXXxcXFxcKC4pL2csXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChtYXRjaGVkLCBwMSwgcDIsIHAzLCBwNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAxIHx8IHAyIHx8IHAzIHx8IHA0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlZ2V4RXNjYXBlKHMpIHtcbiAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvWy1cXC9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzRmxvb3IobnVtYmVyKSB7XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICAvLyAtMCAtPiAwXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG51bWJlcikgfHwgMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0ludChhcmd1bWVudEZvckNvZXJjaW9uKSB7XG4gICAgICAgIHZhciBjb2VyY2VkTnVtYmVyID0gK2FyZ3VtZW50Rm9yQ29lcmNpb24sXG4gICAgICAgICAgICB2YWx1ZSA9IDA7XG5cbiAgICAgICAgaWYgKGNvZXJjZWROdW1iZXIgIT09IDAgJiYgaXNGaW5pdGUoY29lcmNlZE51bWJlcikpIHtcbiAgICAgICAgICAgIHZhbHVlID0gYWJzRmxvb3IoY29lcmNlZE51bWJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgdmFyIHRva2VucyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gYWRkUGFyc2VUb2tlbih0b2tlbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBmdW5jID0gY2FsbGJhY2ssXG4gICAgICAgICAgICB0b2tlbkxlbjtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRva2VuID0gW3Rva2VuXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOdW1iZXIoY2FsbGJhY2spKSB7XG4gICAgICAgICAgICBmdW5jID0gZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2NhbGxiYWNrXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdG9rZW5MZW4gPSB0b2tlbi5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b2tlbkxlbjsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbnNbdG9rZW5baV1dID0gZnVuYztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFdlZWtQYXJzZVRva2VuKHRva2VuLCBjYWxsYmFjaykge1xuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgICAgICBjb25maWcuX3cgPSBjb25maWcuX3cgfHwge307XG4gICAgICAgICAgICBjYWxsYmFjayhpbnB1dCwgY29uZmlnLl93LCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4odG9rZW4sIGlucHV0LCBjb25maWcpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwgJiYgaGFzT3duUHJvcCh0b2tlbnMsIHRva2VuKSkge1xuICAgICAgICAgICAgdG9rZW5zW3Rva2VuXShpbnB1dCwgY29uZmlnLl9hLCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTGVhcFllYXIoeWVhcikge1xuICAgICAgICByZXR1cm4gKHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDApIHx8IHllYXIgJSA0MDAgPT09IDA7XG4gICAgfVxuXG4gICAgdmFyIFlFQVIgPSAwLFxuICAgICAgICBNT05USCA9IDEsXG4gICAgICAgIERBVEUgPSAyLFxuICAgICAgICBIT1VSID0gMyxcbiAgICAgICAgTUlOVVRFID0gNCxcbiAgICAgICAgU0VDT05EID0gNSxcbiAgICAgICAgTUlMTElTRUNPTkQgPSA2LFxuICAgICAgICBXRUVLID0gNyxcbiAgICAgICAgV0VFS0RBWSA9IDg7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignWScsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHkgPSB0aGlzLnllYXIoKTtcbiAgICAgICAgcmV0dXJuIHkgPD0gOTk5OSA/IHplcm9GaWxsKHksIDQpIDogJysnICsgeTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVknLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy55ZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVknLCA0XSwgMCwgJ3llYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVlZJywgNV0sIDAsICd5ZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZWVknLCA2LCB0cnVlXSwgMCwgJ3llYXInKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1knLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignWVknLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWScsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZWScsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZWVknLCBtYXRjaDF0bzYsIG1hdGNoNik7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnWVlZWVknLCAnWVlZWVlZJ10sIFlFQVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1lZWVknLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID1cbiAgICAgICAgICAgIGlucHV0Lmxlbmd0aCA9PT0gMiA/IGhvb2tzLnBhcnNlVHdvRGlnaXRZZWFyKGlucHV0KSA6IHRvSW50KGlucHV0KTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdZWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPSBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPSBwYXJzZUludChpbnB1dCwgMTApO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgZnVuY3Rpb24gZGF5c0luWWVhcih5ZWFyKSB7XG4gICAgICAgIHJldHVybiBpc0xlYXBZZWFyKHllYXIpID8gMzY2IDogMzY1O1xuICAgIH1cblxuICAgIC8vIEhPT0tTXG5cbiAgICBob29rcy5wYXJzZVR3b0RpZ2l0WWVhciA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICByZXR1cm4gdG9JbnQoaW5wdXQpICsgKHRvSW50KGlucHV0KSA+IDY4ID8gMTkwMCA6IDIwMDApO1xuICAgIH07XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0WWVhciA9IG1ha2VHZXRTZXQoJ0Z1bGxZZWFyJywgdHJ1ZSk7XG5cbiAgICBmdW5jdGlvbiBnZXRJc0xlYXBZZWFyKCkge1xuICAgICAgICByZXR1cm4gaXNMZWFwWWVhcih0aGlzLnllYXIoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUdldFNldCh1bml0LCBrZWVwVGltZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHNldCQxKHRoaXMsIHVuaXQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywga2VlcFRpbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsIHVuaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldChtb20sIHVuaXQpIHtcbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGQgPSBtb20uX2QsXG4gICAgICAgICAgICBpc1VUQyA9IG1vbS5faXNVVEM7XG5cbiAgICAgICAgc3dpdGNoICh1bml0KSB7XG4gICAgICAgICAgICBjYXNlICdNaWxsaXNlY29uZHMnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCkgOiBkLmdldE1pbGxpc2Vjb25kcygpO1xuICAgICAgICAgICAgY2FzZSAnU2Vjb25kcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENTZWNvbmRzKCkgOiBkLmdldFNlY29uZHMoKTtcbiAgICAgICAgICAgIGNhc2UgJ01pbnV0ZXMnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDTWludXRlcygpIDogZC5nZXRNaW51dGVzKCk7XG4gICAgICAgICAgICBjYXNlICdIb3Vycyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENIb3VycygpIDogZC5nZXRIb3VycygpO1xuICAgICAgICAgICAgY2FzZSAnRGF0ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENEYXRlKCkgOiBkLmdldERhdGUoKTtcbiAgICAgICAgICAgIGNhc2UgJ0RheSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENEYXkoKSA6IGQuZ2V0RGF5KCk7XG4gICAgICAgICAgICBjYXNlICdNb250aCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENNb250aCgpIDogZC5nZXRNb250aCgpO1xuICAgICAgICAgICAgY2FzZSAnRnVsbFllYXInOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDRnVsbFllYXIoKSA6IGQuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsgLy8gSnVzdCBpbiBjYXNlXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXQkMShtb20sIHVuaXQsIHZhbHVlKSB7XG4gICAgICAgIHZhciBkLCBpc1VUQywgeWVhciwgbW9udGgsIGRhdGU7XG5cbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpIHx8IGlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZCA9IG1vbS5fZDtcbiAgICAgICAgaXNVVEMgPSBtb20uX2lzVVRDO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdCkge1xuICAgICAgICAgICAgY2FzZSAnTWlsbGlzZWNvbmRzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCAoaXNVVENcbiAgICAgICAgICAgICAgICAgICAgPyBkLnNldFVUQ01pbGxpc2Vjb25kcyh2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgOiBkLnNldE1pbGxpc2Vjb25kcyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnU2Vjb25kcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENTZWNvbmRzKHZhbHVlKSA6IGQuc2V0U2Vjb25kcyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnTWludXRlcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENNaW51dGVzKHZhbHVlKSA6IGQuc2V0TWludXRlcyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnSG91cnMnOlxuICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDSG91cnModmFsdWUpIDogZC5zZXRIb3Vycyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnRGF0ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENEYXRlKHZhbHVlKSA6IGQuc2V0RGF0ZSh2YWx1ZSkpO1xuICAgICAgICAgICAgLy8gY2FzZSAnRGF5JzogLy8gTm90IHJlYWxcbiAgICAgICAgICAgIC8vICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDRGF5KHZhbHVlKSA6IGQuc2V0RGF5KHZhbHVlKSk7XG4gICAgICAgICAgICAvLyBjYXNlICdNb250aCc6IC8vIE5vdCB1c2VkIGJlY2F1c2Ugd2UgbmVlZCB0byBwYXNzIHR3byB2YXJpYWJsZXNcbiAgICAgICAgICAgIC8vICAgICByZXR1cm4gdm9pZCAoaXNVVEMgPyBkLnNldFVUQ01vbnRoKHZhbHVlKSA6IGQuc2V0TW9udGgodmFsdWUpKTtcbiAgICAgICAgICAgIGNhc2UgJ0Z1bGxZZWFyJzpcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gU2VlIGJlbG93IC4uLlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm47IC8vIEp1c3QgaW4gY2FzZVxuICAgICAgICB9XG5cbiAgICAgICAgeWVhciA9IHZhbHVlO1xuICAgICAgICBtb250aCA9IG1vbS5tb250aCgpO1xuICAgICAgICBkYXRlID0gbW9tLmRhdGUoKTtcbiAgICAgICAgZGF0ZSA9IGRhdGUgPT09IDI5ICYmIG1vbnRoID09PSAxICYmICFpc0xlYXBZZWFyKHllYXIpID8gMjggOiBkYXRlO1xuICAgICAgICB2b2lkIChpc1VUQ1xuICAgICAgICAgICAgPyBkLnNldFVUQ0Z1bGxZZWFyKHllYXIsIG1vbnRoLCBkYXRlKVxuICAgICAgICAgICAgOiBkLnNldEZ1bGxZZWFyKHllYXIsIG1vbnRoLCBkYXRlKSk7XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gc3RyaW5nR2V0KHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih0aGlzW3VuaXRzXSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0cmluZ1NldCh1bml0cywgdmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB1bml0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHVuaXRzID0gbm9ybWFsaXplT2JqZWN0VW5pdHModW5pdHMpO1xuICAgICAgICAgICAgdmFyIHByaW9yaXRpemVkID0gZ2V0UHJpb3JpdGl6ZWRVbml0cyh1bml0cyksXG4gICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICBwcmlvcml0aXplZExlbiA9IHByaW9yaXRpemVkLmxlbmd0aDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcmlvcml0aXplZExlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpc1twcmlvcml0aXplZFtpXS51bml0XSh1bml0c1twcmlvcml0aXplZFtpXS51bml0XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHRoaXNbdW5pdHNdKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9kKG4sIHgpIHtcbiAgICAgICAgcmV0dXJuICgobiAlIHgpICsgeCkgJSB4O1xuICAgIH1cblxuICAgIHZhciBpbmRleE9mO1xuXG4gICAgaWYgKEFycmF5LnByb3RvdHlwZS5pbmRleE9mKSB7XG4gICAgICAgIGluZGV4T2YgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZjtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpbmRleE9mID0gZnVuY3Rpb24gKG8pIHtcbiAgICAgICAgICAgIC8vIEkga25vd1xuICAgICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzW2ldID09PSBvKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlzSW5Nb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgICBpZiAoaXNOYU4oeWVhcikgfHwgaXNOYU4obW9udGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBtb2RNb250aCA9IG1vZChtb250aCwgMTIpO1xuICAgICAgICB5ZWFyICs9IChtb250aCAtIG1vZE1vbnRoKSAvIDEyO1xuICAgICAgICByZXR1cm4gbW9kTW9udGggPT09IDFcbiAgICAgICAgICAgID8gaXNMZWFwWWVhcih5ZWFyKVxuICAgICAgICAgICAgICAgID8gMjlcbiAgICAgICAgICAgICAgICA6IDI4XG4gICAgICAgICAgICA6IDMxIC0gKChtb2RNb250aCAlIDcpICUgMik7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ00nLCBbJ01NJywgMl0sICdNbycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9udGgoKSArIDE7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTU1NJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzU2hvcnQodGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNTU1NJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdNJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJOb0xlYWRpbmdaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdNTScsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdNTU0nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLm1vbnRoc1Nob3J0UmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NTU0nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLm1vbnRoc1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydNJywgJ01NJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTU9OVEhdID0gdG9JbnQoaW5wdXQpIC0gMTtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydNTU0nLCAnTU1NTSddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHZhciBtb250aCA9IGNvbmZpZy5fbG9jYWxlLm1vbnRoc1BhcnNlKGlucHV0LCB0b2tlbiwgY29uZmlnLl9zdHJpY3QpO1xuICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZmluZCBhIG1vbnRoIG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZC5cbiAgICAgICAgaWYgKG1vbnRoICE9IG51bGwpIHtcbiAgICAgICAgICAgIGFycmF5W01PTlRIXSA9IG1vbnRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZE1vbnRoID0gaW5wdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIHZhciBkZWZhdWx0TG9jYWxlTW9udGhzID1cbiAgICAgICAgICAgICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydCA9XG4gICAgICAgICAgICAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIE1PTlRIU19JTl9GT1JNQVQgPSAvRFtvRF0/KFxcW1teXFxbXFxdXSpcXF18XFxzKStNTU1NPy8sXG4gICAgICAgIGRlZmF1bHRNb250aHNTaG9ydFJlZ2V4ID0gbWF0Y2hXb3JkLFxuICAgICAgICBkZWZhdWx0TW9udGhzUmVnZXggPSBtYXRjaFdvcmQ7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHMobSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzKVxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzXG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNbJ3N0YW5kYWxvbmUnXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHMpXG4gICAgICAgICAgICA/IHRoaXMuX21vbnRoc1ttLm1vbnRoKCldXG4gICAgICAgICAgICA6IHRoaXMuX21vbnRoc1tcbiAgICAgICAgICAgICAgICAgICh0aGlzLl9tb250aHMuaXNGb3JtYXQgfHwgTU9OVEhTX0lOX0ZPUk1BVCkudGVzdChmb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgICAgPyAnZm9ybWF0J1xuICAgICAgICAgICAgICAgICAgICAgIDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgICAgIF1bbS5tb250aCgpXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHNTaG9ydChtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHNTaG9ydClcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21vbnRoc1Nob3J0XG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNTaG9ydFsnc3RhbmRhbG9uZSddO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRoc1Nob3J0KVxuICAgICAgICAgICAgPyB0aGlzLl9tb250aHNTaG9ydFttLm1vbnRoKCldXG4gICAgICAgICAgICA6IHRoaXMuX21vbnRoc1Nob3J0W1xuICAgICAgICAgICAgICAgICAgTU9OVEhTX0lOX0ZPUk1BVC50ZXN0KGZvcm1hdCkgPyAnZm9ybWF0JyA6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgICAgICBdW20ubW9udGgoKV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlU3RyaWN0UGFyc2UobW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGlpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbGxjID0gbW9udGhOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghdGhpcy5fbW9udGhzUGFyc2UpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IHVzZWRcbiAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgKytpKSB7XG4gICAgICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXSA9IHRoaXMubW9udGhzU2hvcnQoXG4gICAgICAgICAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICApLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldID0gdGhpcy5tb250aHMobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdNTU0nKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdNTU0nKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzUGFyc2UobW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSwgbW9tLCByZWdleDtcblxuICAgICAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVN0cmljdFBhcnNlLmNhbGwodGhpcywgbW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX21vbnRoc1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlID0gW107XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPOiBhZGQgc29ydGluZ1xuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIG1vbnRoIChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyXG4gICAgICAgIC8vIHNlZSBzb3J0aW5nIGluIGNvbXB1dGVNb250aHNQYXJzZVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgIXRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMubW9udGhzKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnJykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMubW9udGhzU2hvcnQobW9tLCAnJykucmVwbGFjZSgnLicsICcnKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RyaWN0ICYmICF0aGlzLl9tb250aHNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHJlZ2V4ID1cbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy5tb250aHMobW9tLCAnJykgKyAnfF4nICsgdGhpcy5tb250aHNTaG9ydChtb20sICcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAocmVnZXgucmVwbGFjZSgnLicsICcnKSwgJ2knKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRlc3QgdGhlIHJlZ2V4XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnTU1NTScgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnTU1NJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCAmJiB0aGlzLl9tb250aHNQYXJzZVtpXS50ZXN0KG1vbnRoTmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIHNldE1vbnRoKG1vbSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAvLyBObyBvcFxuICAgICAgICAgICAgcmV0dXJuIG1vbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoL15cXGQrJC8udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRvSW50KHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBtb20ubG9jYWxlRGF0YSgpLm1vbnRoc1BhcnNlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBBbm90aGVyIHNpbGVudCBmYWlsdXJlP1xuICAgICAgICAgICAgICAgIGlmICghaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb207XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1vbnRoID0gdmFsdWUsXG4gICAgICAgICAgICBkYXRlID0gbW9tLmRhdGUoKTtcblxuICAgICAgICBkYXRlID0gZGF0ZSA8IDI5ID8gZGF0ZSA6IE1hdGgubWluKGRhdGUsIGRheXNJbk1vbnRoKG1vbS55ZWFyKCksIG1vbnRoKSk7XG4gICAgICAgIHZvaWQgKG1vbS5faXNVVENcbiAgICAgICAgICAgID8gbW9tLl9kLnNldFVUQ01vbnRoKG1vbnRoLCBkYXRlKVxuICAgICAgICAgICAgOiBtb20uX2Quc2V0TW9udGgobW9udGgsIGRhdGUpKTtcbiAgICAgICAgcmV0dXJuIG1vbTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRNb250aCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgc2V0TW9udGgodGhpcywgdmFsdWUpO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsICdNb250aCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RGF5c0luTW9udGgoKSB7XG4gICAgICAgIHJldHVybiBkYXlzSW5Nb250aCh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNTaG9ydFJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNTaG9ydFJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gZGVmYXVsdE1vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzU2hvcnRSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoc1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNSZWdleCA9IGRlZmF1bHRNb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZU1vbnRoc1BhcnNlKCkge1xuICAgICAgICBmdW5jdGlvbiBjbXBMZW5SZXYoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGIubGVuZ3RoIC0gYS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2hvcnRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGxvbmdQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgc2hvcnRQLFxuICAgICAgICAgICAgbG9uZ1A7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICAgICAgc2hvcnRQID0gcmVnZXhFc2NhcGUodGhpcy5tb250aHNTaG9ydChtb20sICcnKSk7XG4gICAgICAgICAgICBsb25nUCA9IHJlZ2V4RXNjYXBlKHRoaXMubW9udGhzKG1vbSwgJycpKTtcbiAgICAgICAgICAgIHNob3J0UGllY2VzLnB1c2goc2hvcnRQKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXMucHVzaChsb25nUCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGxvbmdQKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goc2hvcnRQKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIG1vbnRoIChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyIGl0XG4gICAgICAgIC8vIHdpbGwgbWF0Y2ggdGhlIGxvbmdlciBwaWVjZS5cbiAgICAgICAgc2hvcnRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBsb25nUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbWl4ZWRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuXG4gICAgICAgIHRoaXMuX21vbnRoc1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gdGhpcy5fbW9udGhzUmVnZXg7XG4gICAgICAgIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBzaG9ydFBpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEYXRlKHksIG0sIGQsIGgsIE0sIHMsIG1zKSB7XG4gICAgICAgIC8vIGNhbid0IGp1c3QgYXBwbHkoKSB0byBjcmVhdGUgYSBkYXRlOlxuICAgICAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3EvMTgxMzQ4XG4gICAgICAgIHZhciBkYXRlO1xuICAgICAgICAvLyB0aGUgZGF0ZSBjb25zdHJ1Y3RvciByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKHkgKyA0MDAsIG0sIGQsIGgsIE0sIHMsIG1zKTtcbiAgICAgICAgICAgIGlmIChpc0Zpbml0ZShkYXRlLmdldEZ1bGxZZWFyKCkpKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXRGdWxsWWVhcih5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSh5LCBtLCBkLCBoLCBNLCBzLCBtcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVVENEYXRlKHkpIHtcbiAgICAgICAgdmFyIGRhdGUsIGFyZ3M7XG4gICAgICAgIC8vIHRoZSBEYXRlLlVUQyBmdW5jdGlvbiByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICBhcmdzWzBdID0geSArIDQwMDtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLCBhcmdzKSk7XG4gICAgICAgICAgICBpZiAoaXNGaW5pdGUoZGF0ZS5nZXRVVENGdWxsWWVhcigpKSkge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCwgYXJndW1lbnRzKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICAvLyBzdGFydC1vZi1maXJzdC13ZWVrIC0gc3RhcnQtb2YteWVhclxuICAgIGZ1bmN0aW9uIGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgLy8gZmlyc3Qtd2VlayBkYXkgLS0gd2hpY2ggamFudWFyeSBpcyBhbHdheXMgaW4gdGhlIGZpcnN0IHdlZWsgKDQgZm9yIGlzbywgMSBmb3Igb3RoZXIpXG4gICAgICAgICAgICBmd2QgPSA3ICsgZG93IC0gZG95LFxuICAgICAgICAgICAgLy8gZmlyc3Qtd2VlayBkYXkgbG9jYWwgd2Vla2RheSAtLSB3aGljaCBsb2NhbCB3ZWVrZGF5IGlzIGZ3ZFxuICAgICAgICAgICAgZndkbHcgPSAoNyArIGNyZWF0ZVVUQ0RhdGUoeWVhciwgMCwgZndkKS5nZXRVVENEYXkoKSAtIGRvdykgJSA3O1xuXG4gICAgICAgIHJldHVybiAtZndkbHcgKyBmd2QgLSAxO1xuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGUjQ2FsY3VsYXRpbmdfYV9kYXRlX2dpdmVuX3RoZV95ZWFyLjJDX3dlZWtfbnVtYmVyX2FuZF93ZWVrZGF5XG4gICAgZnVuY3Rpb24gZGF5T2ZZZWFyRnJvbVdlZWtzKHllYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSB7XG4gICAgICAgIHZhciBsb2NhbFdlZWtkYXkgPSAoNyArIHdlZWtkYXkgLSBkb3cpICUgNyxcbiAgICAgICAgICAgIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpLFxuICAgICAgICAgICAgZGF5T2ZZZWFyID0gMSArIDcgKiAod2VlayAtIDEpICsgbG9jYWxXZWVrZGF5ICsgd2Vla09mZnNldCxcbiAgICAgICAgICAgIHJlc1llYXIsXG4gICAgICAgICAgICByZXNEYXlPZlllYXI7XG5cbiAgICAgICAgaWYgKGRheU9mWWVhciA8PSAwKSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhciAtIDE7XG4gICAgICAgICAgICByZXNEYXlPZlllYXIgPSBkYXlzSW5ZZWFyKHJlc1llYXIpICsgZGF5T2ZZZWFyO1xuICAgICAgICB9IGVsc2UgaWYgKGRheU9mWWVhciA+IGRheXNJblllYXIoeWVhcikpIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSB5ZWFyICsgMTtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheU9mWWVhciAtIGRheXNJblllYXIoeWVhcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhcjtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheU9mWWVhcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyOiByZXNZZWFyLFxuICAgICAgICAgICAgZGF5T2ZZZWFyOiByZXNEYXlPZlllYXIsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla09mWWVhcihtb20sIGRvdywgZG95KSB7XG4gICAgICAgIHZhciB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KG1vbS55ZWFyKCksIGRvdywgZG95KSxcbiAgICAgICAgICAgIHdlZWsgPSBNYXRoLmZsb29yKChtb20uZGF5T2ZZZWFyKCkgLSB3ZWVrT2Zmc2V0IC0gMSkgLyA3KSArIDEsXG4gICAgICAgICAgICByZXNXZWVrLFxuICAgICAgICAgICAgcmVzWWVhcjtcblxuICAgICAgICBpZiAod2VlayA8IDEpIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpIC0gMTtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrICsgd2Vla3NJblllYXIocmVzWWVhciwgZG93LCBkb3kpO1xuICAgICAgICB9IGVsc2UgaWYgKHdlZWsgPiB3ZWVrc0luWWVhcihtb20ueWVhcigpLCBkb3csIGRveSkpIHtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrIC0gd2Vla3NJblllYXIobW9tLnllYXIoKSwgZG93LCBkb3kpO1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCkgKyAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCk7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB3ZWVrOiByZXNXZWVrLFxuICAgICAgICAgICAgeWVhcjogcmVzWWVhcixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrc0luWWVhcih5ZWFyLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSksXG4gICAgICAgICAgICB3ZWVrT2Zmc2V0TmV4dCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyICsgMSwgZG93LCBkb3kpO1xuICAgICAgICByZXR1cm4gKGRheXNJblllYXIoeWVhcikgLSB3ZWVrT2Zmc2V0ICsgd2Vla09mZnNldE5leHQpIC8gNztcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigndycsIFsnd3cnLCAyXSwgJ3dvJywgJ3dlZWsnKTtcbiAgICBhZGRGb3JtYXRUb2tlbignVycsIFsnV1cnLCAyXSwgJ1dvJywgJ2lzb1dlZWsnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3cnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3d3JywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1cnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1dXJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oXG4gICAgICAgIFsndycsICd3dycsICdXJywgJ1dXJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMSldID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWsobW9tKSB7XG4gICAgICAgIHJldHVybiB3ZWVrT2ZZZWFyKG1vbSwgdGhpcy5fd2Vlay5kb3csIHRoaXMuX3dlZWsuZG95KS53ZWVrO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2VlayA9IHtcbiAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUZpcnN0RGF5T2ZXZWVrKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2Vlay5kb3c7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlRmlyc3REYXlPZlllYXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl93ZWVrLmRveTtcbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRXZWVrKGlucHV0KSB7XG4gICAgICAgIHZhciB3ZWVrID0gdGhpcy5sb2NhbGVEYXRhKCkud2Vlayh0aGlzKTtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB3ZWVrIDogdGhpcy5hZGQoKGlucHV0IC0gd2VlaykgKiA3LCAnZCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldElTT1dlZWsoaW5wdXQpIHtcbiAgICAgICAgdmFyIHdlZWsgPSB3ZWVrT2ZZZWFyKHRoaXMsIDEsIDQpLndlZWs7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2VlayA6IHRoaXMuYWRkKChpbnB1dCAtIHdlZWspICogNywgJ2QnKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignZCcsIDAsICdkbycsICdkYXknKTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzTWluKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGRkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNTaG9ydCh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5cyh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2UnLCAwLCAwLCAnd2Vla2RheScpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdFJywgMCwgMCwgJ2lzb1dlZWtkYXknKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2QnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2UnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0UnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2RkJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c01pblJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcbiAgICBhZGRSZWdleFRva2VuKCdkZGQnLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignZGRkZCcsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2RkJywgJ2RkZCcsICdkZGRkJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgd2Vla2RheSA9IGNvbmZpZy5fbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgIC8vIGlmIHdlIGRpZG4ndCBnZXQgYSB3ZWVrZGF5IG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZFxuICAgICAgICBpZiAod2Vla2RheSAhPSBudWxsKSB7XG4gICAgICAgICAgICB3ZWVrLmQgPSB3ZWVrZGF5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZFdlZWtkYXkgPSBpbnB1dDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydkJywgJ2UnLCAnRSddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgd2Vla1t0b2tlbl0gPSB0b0ludChpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICBmdW5jdGlvbiBwYXJzZVdlZWtkYXkoaW5wdXQsIGxvY2FsZSkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc05hTihpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludChpbnB1dCwgMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5wdXQgPSBsb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCk7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUlzb1dlZWtkYXkoaW5wdXQsIGxvY2FsZSkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0KSAlIDcgfHwgNztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNOYU4oaW5wdXQpID8gbnVsbCA6IGlucHV0O1xuICAgIH1cblxuICAgIC8vIExPQ0FMRVNcbiAgICBmdW5jdGlvbiBzaGlmdFdlZWtkYXlzKHdzLCBuKSB7XG4gICAgICAgIHJldHVybiB3cy5zbGljZShuLCA3KS5jb25jYXQod3Muc2xpY2UoMCwgbikpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2Vla2RheXMgPVxuICAgICAgICAgICAgJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdCgnXycpLFxuICAgICAgICBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydCA9ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyksXG4gICAgICAgIGRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbiA9ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgZGVmYXVsdFdlZWtkYXlzUmVnZXggPSBtYXRjaFdvcmQsXG4gICAgICAgIGRlZmF1bHRXZWVrZGF5c1Nob3J0UmVnZXggPSBtYXRjaFdvcmQsXG4gICAgICAgIGRlZmF1bHRXZWVrZGF5c01pblJlZ2V4ID0gbWF0Y2hXb3JkO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXMobSwgZm9ybWF0KSB7XG4gICAgICAgIHZhciB3ZWVrZGF5cyA9IGlzQXJyYXkodGhpcy5fd2Vla2RheXMpXG4gICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzXG4gICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzW1xuICAgICAgICAgICAgICAgICAgbSAmJiBtICE9PSB0cnVlICYmIHRoaXMuX3dlZWtkYXlzLmlzRm9ybWF0LnRlc3QoZm9ybWF0KVxuICAgICAgICAgICAgICAgICAgICAgID8gJ2Zvcm1hdCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgICAgICBdO1xuICAgICAgICByZXR1cm4gbSA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyBzaGlmdFdlZWtkYXlzKHdlZWtkYXlzLCB0aGlzLl93ZWVrLmRvdylcbiAgICAgICAgICAgIDogbVxuICAgICAgICAgICAgICA/IHdlZWtkYXlzW20uZGF5KCldXG4gICAgICAgICAgICAgIDogd2Vla2RheXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNTaG9ydChtKSB7XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXModGhpcy5fd2Vla2RheXNTaG9ydCwgdGhpcy5fd2Vlay5kb3cpXG4gICAgICAgICAgICA6IG1cbiAgICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c1Nob3J0W20uZGF5KCldXG4gICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNTaG9ydDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c01pbihtKSB7XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXModGhpcy5fd2Vla2RheXNNaW4sIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiBtXG4gICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNNaW5bbS5kYXkoKV1cbiAgICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c01pbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVTdHJpY3RQYXJzZSQxKHdlZWtkYXlOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGlpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbGxjID0gd2Vla2RheU5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCF0aGlzLl93ZWVrZGF5c1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2UgPSBbXTtcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7ICsraSkge1xuICAgICAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5c01pbihcbiAgICAgICAgICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzU2hvcnQoXG4gICAgICAgICAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICApLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXMobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdkZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAnZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnZGRkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAnZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzUGFyc2Uod2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLCBtb20sIHJlZ2V4O1xuXG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVTdHJpY3RQYXJzZSQxLmNhbGwodGhpcywgd2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG5cbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgIXRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLndlZWtkYXlzKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMud2Vla2RheXNNaW4obW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHJlZ2V4ID1cbiAgICAgICAgICAgICAgICAgICAgJ14nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5cyhtb20sICcnKSArXG4gICAgICAgICAgICAgICAgICAgICd8XicgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykgK1xuICAgICAgICAgICAgICAgICAgICAnfF4nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5c01pbihtb20sICcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChyZWdleC5yZXBsYWNlKCcuJywgJycpLCAnaScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGVzdCB0aGUgcmVnZXhcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdkZGRkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnZGRkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ2RkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyaWN0ICYmIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldERheU9mV2VlayhpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZGF5ID0gZ2V0KHRoaXMsICdEYXknKTtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlucHV0ID0gcGFyc2VXZWVrZGF5KGlucHV0LCB0aGlzLmxvY2FsZURhdGEoKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hZGQoaW5wdXQgLSBkYXksICdkJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZGF5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd2Vla2RheSA9ICh0aGlzLmRheSgpICsgNyAtIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdykgJSA3O1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWtkYXkgOiB0aGlzLmFkZChpbnB1dCAtIHdlZWtkYXksICdkJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPRGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGJlaGF2ZXMgdGhlIHNhbWUgYXMgbW9tZW50I2RheSBleGNlcHRcbiAgICAgICAgLy8gYXMgYSBnZXR0ZXIsIHJldHVybnMgNyBpbnN0ZWFkIG9mIDAgKDEtNyByYW5nZSBpbnN0ZWFkIG9mIDAtNilcbiAgICAgICAgLy8gYXMgYSBzZXR0ZXIsIHN1bmRheSBzaG91bGQgYmVsb25nIHRvIHRoZSBwcmV2aW91cyB3ZWVrLlxuXG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgd2Vla2RheSA9IHBhcnNlSXNvV2Vla2RheShpbnB1dCwgdGhpcy5sb2NhbGVEYXRhKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF5KHRoaXMuZGF5KCkgJSA3ID8gd2Vla2RheSA6IHdlZWtkYXkgLSA3KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRheSgpIHx8IDc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrZGF5c1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzU2hvcnRSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla2RheXNNaW5SZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNNaW5SZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5SZWdleCA9IGRlZmF1bHRXZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlV2Vla2RheXNQYXJzZSgpIHtcbiAgICAgICAgZnVuY3Rpb24gY21wTGVuUmV2KGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1pblBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgc2hvcnRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGxvbmdQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbWlucCxcbiAgICAgICAgICAgIHNob3J0cCxcbiAgICAgICAgICAgIGxvbmdwO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgIG1pbnAgPSByZWdleEVzY2FwZSh0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpKTtcbiAgICAgICAgICAgIHNob3J0cCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKSk7XG4gICAgICAgICAgICBsb25ncCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXMobW9tLCAnJykpO1xuICAgICAgICAgICAgbWluUGllY2VzLnB1c2gobWlucCk7XG4gICAgICAgICAgICBzaG9ydFBpZWNlcy5wdXNoKHNob3J0cCk7XG4gICAgICAgICAgICBsb25nUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChtaW5wKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goc2hvcnRwKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgd2Vla2RheSAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlciBpdFxuICAgICAgICAvLyB3aWxsIG1hdGNoIHRoZSBsb25nZXIgcGllY2UuXG4gICAgICAgIG1pblBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIHNob3J0UGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbG9uZ1BpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIG1peGVkUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcblxuICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXggPSB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblJlZ2V4ID0gdGhpcy5fd2Vla2RheXNSZWdleDtcblxuICAgICAgICB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIHNob3J0UGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBtaW5QaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgZnVuY3Rpb24gaEZvcm1hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaG91cnMoKSAlIDEyIHx8IDEyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGtGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhvdXJzKCkgfHwgMjQ7XG4gICAgfVxuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0gnLCBbJ0hIJywgMl0sIDAsICdob3VyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ2gnLCBbJ2hoJywgMl0sIDAsIGhGb3JtYXQpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdrJywgWydraycsIDJdLCAwLCBrRm9ybWF0KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdobW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIGhGb3JtYXQuYXBwbHkodGhpcykgKyB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMik7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignaG1tc3MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAnJyArXG4gICAgICAgICAgICBoRm9ybWF0LmFwcGx5KHRoaXMpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLnNlY29uZHMoKSwgMilcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIHRoaXMuaG91cnMoKSArIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW1zcycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICcnICtcbiAgICAgICAgICAgIHRoaXMuaG91cnMoKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMikgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5zZWNvbmRzKCksIDIpXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBtZXJpZGllbSh0b2tlbiwgbG93ZXJjYXNlKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKHRva2VuLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubWVyaWRpZW0oXG4gICAgICAgICAgICAgICAgdGhpcy5ob3VycygpLFxuICAgICAgICAgICAgICAgIHRoaXMubWludXRlcygpLFxuICAgICAgICAgICAgICAgIGxvd2VyY2FzZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbWVyaWRpZW0oJ2EnLCB0cnVlKTtcbiAgICBtZXJpZGllbSgnQScsIGZhbHNlKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGZ1bmN0aW9uIG1hdGNoTWVyaWRpZW0oaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLl9tZXJpZGllbVBhcnNlO1xuICAgIH1cblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2EnLCBtYXRjaE1lcmlkaWVtKTtcbiAgICBhZGRSZWdleFRva2VuKCdBJywgbWF0Y2hNZXJpZGllbSk7XG4gICAgYWRkUmVnZXhUb2tlbignSCcsIG1hdGNoMXRvMiwgbWF0Y2gxdG8ySGFzWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignaCcsIG1hdGNoMXRvMiwgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignaycsIG1hdGNoMXRvMiwgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignSEgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignaGgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbigna2snLCBtYXRjaDF0bzIsIG1hdGNoMik7XG5cbiAgICBhZGRSZWdleFRva2VuKCdobW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2htbXNzJywgbWF0Y2g1dG82KTtcbiAgICBhZGRSZWdleFRva2VuKCdIbW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0htbXNzJywgbWF0Y2g1dG82KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydIJywgJ0hIJ10sIEhPVVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydrJywgJ2trJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIga0lucHV0ID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBhcnJheVtIT1VSXSA9IGtJbnB1dCA9PT0gMjQgPyAwIDoga0lucHV0O1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oWydhJywgJ0EnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5faXNQbSA9IGNvbmZpZy5fbG9jYWxlLmlzUE0oaW5wdXQpO1xuICAgICAgICBjb25maWcuX21lcmlkaWVtID0gaW5wdXQ7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ2gnLCAnaGgnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW0nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvcyA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvcykpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvcykpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW1zcycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zMSA9IGlucHV0Lmxlbmd0aCAtIDQsXG4gICAgICAgICAgICBwb3MyID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zMSkpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczEsIDIpKTtcbiAgICAgICAgYXJyYXlbU0VDT05EXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MyKSk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0htbScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zKSk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignSG1tc3MnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvczEgPSBpbnB1dC5sZW5ndGggLSA0LFxuICAgICAgICAgICAgcG9zMiA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvczEpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MxLCAyKSk7XG4gICAgICAgIGFycmF5W1NFQ09ORF0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMikpO1xuICAgIH0pO1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlSXNQTShpbnB1dCkge1xuICAgICAgICAvLyBJRTggUXVpcmtzIE1vZGUgJiBJRTcgU3RhbmRhcmRzIE1vZGUgZG8gbm90IGFsbG93IGFjY2Vzc2luZyBzdHJpbmdzIGxpa2UgYXJyYXlzXG4gICAgICAgIC8vIFVzaW5nIGNoYXJBdCBzaG91bGQgYmUgbW9yZSBjb21wYXRpYmxlLlxuICAgICAgICByZXR1cm4gKGlucHV0ICsgJycpLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApID09PSAncCc7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVNZXJpZGllbVBhcnNlID0gL1thcF1cXC4/bT9cXC4/L2ksXG4gICAgICAgIC8vIFNldHRpbmcgdGhlIGhvdXIgc2hvdWxkIGtlZXAgdGhlIHRpbWUsIGJlY2F1c2UgdGhlIHVzZXIgZXhwbGljaXRseVxuICAgICAgICAvLyBzcGVjaWZpZWQgd2hpY2ggaG91ciB0aGV5IHdhbnQuIFNvIHRyeWluZyB0byBtYWludGFpbiB0aGUgc2FtZSBob3VyIChpblxuICAgICAgICAvLyBhIG5ldyB0aW1lem9uZSkgbWFrZXMgc2Vuc2UuIEFkZGluZy9zdWJ0cmFjdGluZyBob3VycyBkb2VzIG5vdCBmb2xsb3dcbiAgICAgICAgLy8gdGhpcyBydWxlLlxuICAgICAgICBnZXRTZXRIb3VyID0gbWFrZUdldFNldCgnSG91cnMnLCB0cnVlKTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1lcmlkaWVtKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VycyA+IDExKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdwbScgOiAnUE0nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnYW0nIDogJ0FNJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBiYXNlQ29uZmlnID0ge1xuICAgICAgICBjYWxlbmRhcjogZGVmYXVsdENhbGVuZGFyLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDogZGVmYXVsdExvbmdEYXRlRm9ybWF0LFxuICAgICAgICBpbnZhbGlkRGF0ZTogZGVmYXVsdEludmFsaWREYXRlLFxuICAgICAgICBvcmRpbmFsOiBkZWZhdWx0T3JkaW5hbCxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UsXG4gICAgICAgIHJlbGF0aXZlVGltZTogZGVmYXVsdFJlbGF0aXZlVGltZSxcblxuICAgICAgICBtb250aHM6IGRlZmF1bHRMb2NhbGVNb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQsXG5cbiAgICAgICAgd2VlazogZGVmYXVsdExvY2FsZVdlZWssXG5cbiAgICAgICAgd2Vla2RheXM6IGRlZmF1bHRMb2NhbGVXZWVrZGF5cyxcbiAgICAgICAgd2Vla2RheXNNaW46IGRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbixcbiAgICAgICAgd2Vla2RheXNTaG9ydDogZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQsXG5cbiAgICAgICAgbWVyaWRpZW1QYXJzZTogZGVmYXVsdExvY2FsZU1lcmlkaWVtUGFyc2UsXG4gICAgfTtcblxuICAgIC8vIGludGVybmFsIHN0b3JhZ2UgZm9yIGxvY2FsZSBjb25maWcgZmlsZXNcbiAgICB2YXIgbG9jYWxlcyA9IHt9LFxuICAgICAgICBsb2NhbGVGYW1pbGllcyA9IHt9LFxuICAgICAgICBnbG9iYWxMb2NhbGU7XG5cbiAgICBmdW5jdGlvbiBjb21tb25QcmVmaXgoYXJyMSwgYXJyMikge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIG1pbmwgPSBNYXRoLm1pbihhcnIxLmxlbmd0aCwgYXJyMi5sZW5ndGgpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbWlubDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpZiAoYXJyMVtpXSAhPT0gYXJyMltpXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW5sO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZUxvY2FsZShrZXkpIHtcbiAgICAgICAgcmV0dXJuIGtleSA/IGtleS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ18nLCAnLScpIDoga2V5O1xuICAgIH1cblxuICAgIC8vIHBpY2sgdGhlIGxvY2FsZSBmcm9tIHRoZSBhcnJheVxuICAgIC8vIHRyeSBbJ2VuLWF1JywgJ2VuLWdiJ10gYXMgJ2VuLWF1JywgJ2VuLWdiJywgJ2VuJywgYXMgaW4gbW92ZSB0aHJvdWdoIHRoZSBsaXN0IHRyeWluZyBlYWNoXG4gICAgLy8gc3Vic3RyaW5nIGZyb20gbW9zdCBzcGVjaWZpYyB0byBsZWFzdCwgYnV0IG1vdmUgdG8gdGhlIG5leHQgYXJyYXkgaXRlbSBpZiBpdCdzIGEgbW9yZSBzcGVjaWZpYyB2YXJpYW50IHRoYW4gdGhlIGN1cnJlbnQgcm9vdFxuICAgIGZ1bmN0aW9uIGNob29zZUxvY2FsZShuYW1lcykge1xuICAgICAgICB2YXIgaSA9IDAsXG4gICAgICAgICAgICBqLFxuICAgICAgICAgICAgbmV4dCxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgIHNwbGl0O1xuXG4gICAgICAgIHdoaWxlIChpIDwgbmFtZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBzcGxpdCA9IG5vcm1hbGl6ZUxvY2FsZShuYW1lc1tpXSkuc3BsaXQoJy0nKTtcbiAgICAgICAgICAgIGogPSBzcGxpdC5sZW5ndGg7XG4gICAgICAgICAgICBuZXh0ID0gbm9ybWFsaXplTG9jYWxlKG5hbWVzW2kgKyAxXSk7XG4gICAgICAgICAgICBuZXh0ID0gbmV4dCA/IG5leHQuc3BsaXQoJy0nKSA6IG51bGw7XG4gICAgICAgICAgICB3aGlsZSAoaiA+IDApIHtcbiAgICAgICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKHNwbGl0LnNsaWNlKDAsIGopLmpvaW4oJy0nKSk7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIG5leHQgJiZcbiAgICAgICAgICAgICAgICAgICAgbmV4dC5sZW5ndGggPj0gaiAmJlxuICAgICAgICAgICAgICAgICAgICBjb21tb25QcmVmaXgoc3BsaXQsIG5leHQpID49IGogLSAxXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vdGhlIG5leHQgYXJyYXkgaXRlbSBpcyBiZXR0ZXIgdGhhbiBhIHNoYWxsb3dlciBzdWJzdHJpbmcgb2YgdGhpcyBvbmVcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGotLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTG9jYWxlTmFtZVNhbmUobmFtZSkge1xuICAgICAgICAvLyBQcmV2ZW50IG5hbWVzIHRoYXQgbG9vayBsaWtlIGZpbGVzeXN0ZW0gcGF0aHMsIGkuZSBjb250YWluICcvJyBvciAnXFwnXG4gICAgICAgIC8vIEVuc3VyZSBuYW1lIGlzIGF2YWlsYWJsZSBhbmQgZnVuY3Rpb24gcmV0dXJucyBib29sZWFuXG4gICAgICAgIHJldHVybiAhIShuYW1lICYmIG5hbWUubWF0Y2goJ15bXi9cXFxcXFxcXF0qJCcpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2FkTG9jYWxlKG5hbWUpIHtcbiAgICAgICAgdmFyIG9sZExvY2FsZSA9IG51bGwsXG4gICAgICAgICAgICBhbGlhc2VkUmVxdWlyZTtcbiAgICAgICAgLy8gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gcmVnaXN0ZXIgYW5kIGxvYWQgYWxsIHRoZSBsb2NhbGVzIGluIE5vZGVcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgbW9kdWxlICYmXG4gICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyAmJlxuICAgICAgICAgICAgaXNMb2NhbGVOYW1lU2FuZShuYW1lKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgb2xkTG9jYWxlID0gZ2xvYmFsTG9jYWxlLl9hYmJyO1xuICAgICAgICAgICAgICAgIGFsaWFzZWRSZXF1aXJlID0gcmVxdWlyZTtcbiAgICAgICAgICAgICAgICBhbGlhc2VkUmVxdWlyZSgnLi9sb2NhbGUvJyArIG5hbWUpO1xuICAgICAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShvbGRMb2NhbGUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIG1hcmsgYXMgbm90IGZvdW5kIHRvIGF2b2lkIHJlcGVhdGluZyBleHBlbnNpdmUgZmlsZSByZXF1aXJlIGNhbGwgY2F1c2luZyBoaWdoIENQVVxuICAgICAgICAgICAgICAgIC8vIHdoZW4gdHJ5aW5nIHRvIGZpbmQgZW4tVVMsIGVuX1VTLCBlbi11cyBmb3IgZXZlcnkgZm9ybWF0IGNhbGxcbiAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbnVsbDsgLy8gbnVsbCBtZWFucyBub3QgZm91bmRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgbG9hZCBsb2NhbGUgYW5kIHRoZW4gc2V0IHRoZSBnbG9iYWwgbG9jYWxlLiAgSWZcbiAgICAvLyBubyBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiwgaXQgd2lsbCBzaW1wbHkgcmV0dXJuIHRoZSBjdXJyZW50IGdsb2JhbFxuICAgIC8vIGxvY2FsZSBrZXkuXG4gICAgZnVuY3Rpb24gZ2V0U2V0R2xvYmFsTG9jYWxlKGtleSwgdmFsdWVzKSB7XG4gICAgICAgIHZhciBkYXRhO1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQodmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBnZXRMb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRlZmluZUxvY2FsZShrZXksIHZhbHVlcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgLy8gbW9tZW50LmR1cmF0aW9uLl9sb2NhbGUgPSBtb21lbnQuX2xvY2FsZSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgZ2xvYmFsTG9jYWxlID0gZGF0YTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlLndhcm4pIHtcbiAgICAgICAgICAgICAgICAgICAgLy93YXJuIHVzZXIgaWYgYXJndW1lbnRzIGFyZSBwYXNzZWQgYnV0IHRoZSBsb2NhbGUgY291bGQgbm90IGJlIHNldFxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgICAgICAgICAnTG9jYWxlICcgKyBrZXkgKyAnIG5vdCBmb3VuZC4gRGlkIHlvdSBmb3JnZXQgdG8gbG9hZCBpdD8nXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZS5fYWJicjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWZpbmVMb2NhbGUobmFtZSwgY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUsXG4gICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gYmFzZUNvbmZpZztcbiAgICAgICAgICAgIGNvbmZpZy5hYmJyID0gbmFtZTtcbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBkZXByZWNhdGVTaW1wbGUoXG4gICAgICAgICAgICAgICAgICAgICdkZWZpbmVMb2NhbGVPdmVycmlkZScsXG4gICAgICAgICAgICAgICAgICAgICd1c2UgbW9tZW50LnVwZGF0ZUxvY2FsZShsb2NhbGVOYW1lLCBjb25maWcpIHRvIGNoYW5nZSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdhbiBleGlzdGluZyBsb2NhbGUuIG1vbWVudC5kZWZpbmVMb2NhbGUobG9jYWxlTmFtZSwgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnY29uZmlnKSBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGUgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZGVmaW5lLWxvY2FsZS8gZm9yIG1vcmUgaW5mby4nXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGVzW25hbWVdLl9jb25maWc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlc1tjb25maWcucGFyZW50TG9jYWxlXS5fY29uZmlnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZSA9IGxvYWRMb2NhbGUoY29uZmlnLnBhcmVudExvY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlLl9jb25maWc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IG5ldyBMb2NhbGUobWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY29uZmlnKSk7XG5cbiAgICAgICAgICAgIGlmIChsb2NhbGVGYW1pbGllc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW25hbWVdLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5lTG9jYWxlKHgubmFtZSwgeC5jb25maWcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiYWNrd2FyZHMgY29tcGF0IGZvciBub3c6IGFsc28gc2V0IHRoZSBsb2NhbGVcbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGxvY2FsZSBBRlRFUiBhbGwgY2hpbGQgbG9jYWxlcyBoYXZlIGJlZW5cbiAgICAgICAgICAgIC8vIGNyZWF0ZWQsIHNvIHdlIHdvbid0IGVuZCB1cCB3aXRoIHRoZSBjaGlsZCBsb2NhbGUgc2V0LlxuICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHVzZWZ1bCBmb3IgdGVzdGluZ1xuICAgICAgICAgICAgZGVsZXRlIGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUxvY2FsZShuYW1lLCBjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlLFxuICAgICAgICAgICAgICAgIHRtcExvY2FsZSxcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBiYXNlQ29uZmlnO1xuXG4gICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsICYmIGxvY2FsZXNbbmFtZV0ucGFyZW50TG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgZXhpc3RpbmcgY2hpbGQgbG9jYWxlIGluLXBsYWNlIHRvIGF2b2lkIG1lbW9yeS1sZWFrc1xuICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0uc2V0KG1lcmdlQ29uZmlncyhsb2NhbGVzW25hbWVdLl9jb25maWcsIGNvbmZpZykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBNRVJHRVxuICAgICAgICAgICAgICAgIHRtcExvY2FsZSA9IGxvYWRMb2NhbGUobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRtcExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IHRtcExvY2FsZS5fY29uZmlnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25maWcgPSBtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjb25maWcpO1xuICAgICAgICAgICAgICAgIGlmICh0bXBMb2NhbGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGVMb2NhbGUgaXMgY2FsbGVkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGFiYnIgc28gaXQgd2lsbCBoYXZlIGEgbmFtZSAoZ2V0dGVycyByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgLy8gdW5kZWZpbmVkIG90aGVyd2lzZSkuXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5hYmJyID0gbmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbG9jYWxlID0gbmV3IExvY2FsZShjb25maWcpO1xuICAgICAgICAgICAgICAgIGxvY2FsZS5wYXJlbnRMb2NhbGUgPSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBsb2NhbGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJhY2t3YXJkcyBjb21wYXQgZm9yIG5vdzogYWxzbyBzZXQgdGhlIGxvY2FsZVxuICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcGFzcyBudWxsIGZvciBjb25maWcgdG8gdW51cGRhdGUsIHVzZWZ1bCBmb3IgdGVzdHNcbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSBnZXRTZXRHbG9iYWxMb2NhbGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgIH1cblxuICAgIC8vIHJldHVybnMgbG9jYWxlIGRhdGFcbiAgICBmdW5jdGlvbiBnZXRMb2NhbGUoa2V5KSB7XG4gICAgICAgIHZhciBsb2NhbGU7XG5cbiAgICAgICAgaWYgKGtleSAmJiBrZXkuX2xvY2FsZSAmJiBrZXkuX2xvY2FsZS5fYWJicikge1xuICAgICAgICAgICAga2V5ID0ga2V5Ll9sb2NhbGUuX2FiYnI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNBcnJheShrZXkpKSB7XG4gICAgICAgICAgICAvL3Nob3J0LWNpcmN1aXQgZXZlcnl0aGluZyBlbHNlXG4gICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKGtleSk7XG4gICAgICAgICAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGtleSA9IFtrZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNob29zZUxvY2FsZShrZXkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RMb2NhbGVzKCkge1xuICAgICAgICByZXR1cm4ga2V5cyhsb2NhbGVzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja092ZXJmbG93KG0pIHtcbiAgICAgICAgdmFyIG92ZXJmbG93LFxuICAgICAgICAgICAgYSA9IG0uX2E7XG5cbiAgICAgICAgaWYgKGEgJiYgZ2V0UGFyc2luZ0ZsYWdzKG0pLm92ZXJmbG93ID09PSAtMikge1xuICAgICAgICAgICAgb3ZlcmZsb3cgPVxuICAgICAgICAgICAgICAgIGFbTU9OVEhdIDwgMCB8fCBhW01PTlRIXSA+IDExXG4gICAgICAgICAgICAgICAgICAgID8gTU9OVEhcbiAgICAgICAgICAgICAgICAgICAgOiBhW0RBVEVdIDwgMSB8fCBhW0RBVEVdID4gZGF5c0luTW9udGgoYVtZRUFSXSwgYVtNT05USF0pXG4gICAgICAgICAgICAgICAgICAgICAgPyBEQVRFXG4gICAgICAgICAgICAgICAgICAgICAgOiBhW0hPVVJdIDwgMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhW0hPVVJdID4gMjQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGFbSE9VUl0gPT09IDI0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYVtNSU5VVEVdICE9PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtTRUNPTkRdICE9PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtNSUxMSVNFQ09ORF0gIT09IDApKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBIT1VSXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGFbTUlOVVRFXSA8IDAgfHwgYVtNSU5VVEVdID4gNTlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNSU5VVEVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhW1NFQ09ORF0gPCAwIHx8IGFbU0VDT05EXSA+IDU5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBTRUNPTkRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFbTUlMTElTRUNPTkRdIDwgMCB8fCBhW01JTExJU0VDT05EXSA+IDk5OVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNSUxMSVNFQ09ORFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAtMTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dEYXlPZlllYXIgJiZcbiAgICAgICAgICAgICAgICAob3ZlcmZsb3cgPCBZRUFSIHx8IG92ZXJmbG93ID4gREFURSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gREFURTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93V2Vla3MgJiYgb3ZlcmZsb3cgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cgPSBXRUVLO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dXZWVrZGF5ICYmIG92ZXJmbG93ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gV0VFS0RBWTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLm92ZXJmbG93ID0gb3ZlcmZsb3c7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICAvLyBpc28gODYwMSByZWdleFxuICAgIC8vIDAwMDAtMDAtMDAgMDAwMC1XMDAgb3IgMDAwMC1XMDAtMCArIFQgKyAwMCBvciAwMDowMCBvciAwMDowMDowMCBvciAwMDowMDowMC4wMDAgKyArMDA6MDAgb3IgKzAwMDAgb3IgKzAwKVxuICAgIHZhciBleHRlbmRlZElzb1JlZ2V4ID1cbiAgICAgICAgICAgIC9eXFxzKigoPzpbKy1dXFxkezZ9fFxcZHs0fSktKD86XFxkXFxkLVxcZFxcZHxXXFxkXFxkLVxcZHxXXFxkXFxkfFxcZFxcZFxcZHxcXGRcXGQpKSg/OihUfCApKFxcZFxcZCg/OjpcXGRcXGQoPzo6XFxkXFxkKD86Wy4sXVxcZCspPyk/KT8pKFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/fFxccypaKT8pPyQvLFxuICAgICAgICBiYXNpY0lzb1JlZ2V4ID1cbiAgICAgICAgICAgIC9eXFxzKigoPzpbKy1dXFxkezZ9fFxcZHs0fSkoPzpcXGRcXGRcXGRcXGR8V1xcZFxcZFxcZHxXXFxkXFxkfFxcZFxcZFxcZHxcXGRcXGR8KSkoPzooVHwgKShcXGRcXGQoPzpcXGRcXGQoPzpcXGRcXGQoPzpbLixdXFxkKyk/KT8pPykoWystXVxcZFxcZCg/Ojo/XFxkXFxkKT98XFxzKlopPyk/JC8sXG4gICAgICAgIHR6UmVnZXggPSAvWnxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy8sXG4gICAgICAgIGlzb0RhdGVzID0gW1xuICAgICAgICAgICAgWydZWVlZWVktTU0tREQnLCAvWystXVxcZHs2fS1cXGRcXGQtXFxkXFxkL10sXG4gICAgICAgICAgICBbJ1lZWVktTU0tREQnLCAvXFxkezR9LVxcZFxcZC1cXGRcXGQvXSxcbiAgICAgICAgICAgIFsnR0dHRy1bV11XVy1FJywgL1xcZHs0fS1XXFxkXFxkLVxcZC9dLFxuICAgICAgICAgICAgWydHR0dHLVtXXVdXJywgL1xcZHs0fS1XXFxkXFxkLywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZLURERCcsIC9cXGR7NH0tXFxkezN9L10sXG4gICAgICAgICAgICBbJ1lZWVktTU0nLCAvXFxkezR9LVxcZFxcZC8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWVlZTU1ERCcsIC9bKy1dXFxkezEwfS9dLFxuICAgICAgICAgICAgWydZWVlZTU1ERCcsIC9cXGR7OH0vXSxcbiAgICAgICAgICAgIFsnR0dHR1tXXVdXRScsIC9cXGR7NH1XXFxkezN9L10sXG4gICAgICAgICAgICBbJ0dHR0dbV11XVycsIC9cXGR7NH1XXFxkezJ9LywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZREREJywgL1xcZHs3fS9dLFxuICAgICAgICAgICAgWydZWVlZTU0nLCAvXFxkezZ9LywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZJywgL1xcZHs0fS8sIGZhbHNlXSxcbiAgICAgICAgXSxcbiAgICAgICAgLy8gaXNvIHRpbWUgZm9ybWF0cyBhbmQgcmVnZXhlc1xuICAgICAgICBpc29UaW1lcyA9IFtcbiAgICAgICAgICAgIFsnSEg6bW06c3MuU1NTUycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZFxcLlxcZCsvXSxcbiAgICAgICAgICAgIFsnSEg6bW06c3MsU1NTUycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZCxcXGQrL10sXG4gICAgICAgICAgICBbJ0hIOm1tOnNzJywgL1xcZFxcZDpcXGRcXGQ6XFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIOm1tJywgL1xcZFxcZDpcXGRcXGQvXSxcbiAgICAgICAgICAgIFsnSEhtbXNzLlNTU1MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkXFwuXFxkKy9dLFxuICAgICAgICAgICAgWydISG1tc3MsU1NTUycsIC9cXGRcXGRcXGRcXGRcXGRcXGQsXFxkKy9dLFxuICAgICAgICAgICAgWydISG1tc3MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIbW0nLCAvXFxkXFxkXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIJywgL1xcZFxcZC9dLFxuICAgICAgICBdLFxuICAgICAgICBhc3BOZXRKc29uUmVnZXggPSAvXlxcLz9EYXRlXFwoKC0/XFxkKykvaSxcbiAgICAgICAgLy8gUkZDIDI4MjIgcmVnZXg6IEZvciBkZXRhaWxzIHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjgyMiNzZWN0aW9uLTMuM1xuICAgICAgICByZmMyODIyID1cbiAgICAgICAgICAgIC9eKD86KE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksP1xccyk/KFxcZHsxLDJ9KVxccyhKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylcXHMoXFxkezIsNH0pXFxzKFxcZFxcZCk6KFxcZFxcZCkoPzo6KFxcZFxcZCkpP1xccyg/OihVVHxHTVR8W0VDTVBdW1NEXVQpfChbWnpdKXwoWystXVxcZHs0fSkpJC8sXG4gICAgICAgIG9ic09mZnNldHMgPSB7XG4gICAgICAgICAgICBVVDogMCxcbiAgICAgICAgICAgIEdNVDogMCxcbiAgICAgICAgICAgIEVEVDogLTQgKiA2MCxcbiAgICAgICAgICAgIEVTVDogLTUgKiA2MCxcbiAgICAgICAgICAgIENEVDogLTUgKiA2MCxcbiAgICAgICAgICAgIENTVDogLTYgKiA2MCxcbiAgICAgICAgICAgIE1EVDogLTYgKiA2MCxcbiAgICAgICAgICAgIE1TVDogLTcgKiA2MCxcbiAgICAgICAgICAgIFBEVDogLTcgKiA2MCxcbiAgICAgICAgICAgIFBTVDogLTggKiA2MCxcbiAgICAgICAgfTtcblxuICAgIC8vIGRhdGUgZnJvbSBpc28gZm9ybWF0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlTTyhjb25maWcpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgc3RyaW5nID0gY29uZmlnLl9pLFxuICAgICAgICAgICAgbWF0Y2ggPSBleHRlbmRlZElzb1JlZ2V4LmV4ZWMoc3RyaW5nKSB8fCBiYXNpY0lzb1JlZ2V4LmV4ZWMoc3RyaW5nKSxcbiAgICAgICAgICAgIGFsbG93VGltZSxcbiAgICAgICAgICAgIGRhdGVGb3JtYXQsXG4gICAgICAgICAgICB0aW1lRm9ybWF0LFxuICAgICAgICAgICAgdHpGb3JtYXQsXG4gICAgICAgICAgICBpc29EYXRlc0xlbiA9IGlzb0RhdGVzLmxlbmd0aCxcbiAgICAgICAgICAgIGlzb1RpbWVzTGVuID0gaXNvVGltZXMubGVuZ3RoO1xuXG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaXNvID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29EYXRlc0xlbjsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpc29EYXRlc1tpXVsxXS5leGVjKG1hdGNoWzFdKSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRlRm9ybWF0ID0gaXNvRGF0ZXNbaV1bMF07XG4gICAgICAgICAgICAgICAgICAgIGFsbG93VGltZSA9IGlzb0RhdGVzW2ldWzJdICE9PSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFszXSkge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29UaW1lc0xlbjsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNvVGltZXNbaV1bMV0uZXhlYyhtYXRjaFszXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoWzJdIHNob3VsZCBiZSAnVCcgb3Igc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVGb3JtYXQgPSAobWF0Y2hbMl0gfHwgJyAnKSArIGlzb1RpbWVzW2ldWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYWxsb3dUaW1lICYmIHRpbWVGb3JtYXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFs0XSkge1xuICAgICAgICAgICAgICAgIGlmICh0elJlZ2V4LmV4ZWMobWF0Y2hbNF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHR6Rm9ybWF0ID0gJ1onO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uZmlnLl9mID0gZGF0ZUZvcm1hdCArICh0aW1lRm9ybWF0IHx8ICcnKSArICh0ekZvcm1hdCB8fCAnJyk7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dHJhY3RGcm9tUkZDMjgyMlN0cmluZ3MoXG4gICAgICAgIHllYXJTdHIsXG4gICAgICAgIG1vbnRoU3RyLFxuICAgICAgICBkYXlTdHIsXG4gICAgICAgIGhvdXJTdHIsXG4gICAgICAgIG1pbnV0ZVN0cixcbiAgICAgICAgc2Vjb25kU3RyXG4gICAgKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXG4gICAgICAgICAgICB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSxcbiAgICAgICAgICAgIGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydC5pbmRleE9mKG1vbnRoU3RyKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGRheVN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQoaG91clN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQobWludXRlU3RyLCAxMCksXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKHNlY29uZFN0cikge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gocGFyc2VJbnQoc2Vjb25kU3RyLCAxMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSB7XG4gICAgICAgIHZhciB5ZWFyID0gcGFyc2VJbnQoeWVhclN0ciwgMTApO1xuICAgICAgICBpZiAoeWVhciA8PSA0OSkge1xuICAgICAgICAgICAgcmV0dXJuIDIwMDAgKyB5ZWFyO1xuICAgICAgICB9IGVsc2UgaWYgKHllYXIgPD0gOTk5KSB7XG4gICAgICAgICAgICByZXR1cm4gMTkwMCArIHllYXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHllYXI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcHJvY2Vzc1JGQzI4MjIocykge1xuICAgICAgICAvLyBSZW1vdmUgY29tbWVudHMgYW5kIGZvbGRpbmcgd2hpdGVzcGFjZSBhbmQgcmVwbGFjZSBtdWx0aXBsZS1zcGFjZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuICAgICAgICByZXR1cm4gc1xuICAgICAgICAgICAgLnJlcGxhY2UoL1xcKFteKCldKlxcKXxbXFxuXFx0XS9nLCAnICcpXG4gICAgICAgICAgICAucmVwbGFjZSgvKFxcc1xccyspL2csICcgJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eXFxzXFxzKi8sICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcc1xccyokLywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrV2Vla2RheSh3ZWVrZGF5U3RyLCBwYXJzZWRJbnB1dCwgY29uZmlnKSB7XG4gICAgICAgIGlmICh3ZWVrZGF5U3RyKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBSZXBsYWNlIHRoZSB2YW5pbGxhIEpTIERhdGUgb2JqZWN0IHdpdGggYW4gaW5kZXBlbmRlbnQgZGF5LW9mLXdlZWsgY2hlY2suXG4gICAgICAgICAgICB2YXIgd2Vla2RheVByb3ZpZGVkID0gZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQuaW5kZXhPZih3ZWVrZGF5U3RyKSxcbiAgICAgICAgICAgICAgICB3ZWVrZGF5QWN0dWFsID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZElucHV0WzBdLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRJbnB1dFsxXSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkSW5wdXRbMl1cbiAgICAgICAgICAgICAgICApLmdldERheSgpO1xuICAgICAgICAgICAgaWYgKHdlZWtkYXlQcm92aWRlZCAhPT0gd2Vla2RheUFjdHVhbCkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLndlZWtkYXlNaXNtYXRjaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZU9mZnNldChvYnNPZmZzZXQsIG1pbGl0YXJ5T2Zmc2V0LCBudW1PZmZzZXQpIHtcbiAgICAgICAgaWYgKG9ic09mZnNldCkge1xuICAgICAgICAgICAgcmV0dXJuIG9ic09mZnNldHNbb2JzT2Zmc2V0XTtcbiAgICAgICAgfSBlbHNlIGlmIChtaWxpdGFyeU9mZnNldCkge1xuICAgICAgICAgICAgLy8gdGhlIG9ubHkgYWxsb3dlZCBtaWxpdGFyeSB0eiBpcyBaXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBobSA9IHBhcnNlSW50KG51bU9mZnNldCwgMTApLFxuICAgICAgICAgICAgICAgIG0gPSBobSAlIDEwMCxcbiAgICAgICAgICAgICAgICBoID0gKGhtIC0gbSkgLyAxMDA7XG4gICAgICAgICAgICByZXR1cm4gaCAqIDYwICsgbTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgYW5kIHRpbWUgZnJvbSByZWYgMjgyMiBmb3JtYXRcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tUkZDMjgyMihjb25maWcpIHtcbiAgICAgICAgdmFyIG1hdGNoID0gcmZjMjgyMi5leGVjKHByZXByb2Nlc3NSRkMyODIyKGNvbmZpZy5faSkpLFxuICAgICAgICAgICAgcGFyc2VkQXJyYXk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgcGFyc2VkQXJyYXkgPSBleHRyYWN0RnJvbVJGQzI4MjJTdHJpbmdzKFxuICAgICAgICAgICAgICAgIG1hdGNoWzRdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzNdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzJdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzVdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzZdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzddXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKCFjaGVja1dlZWtkYXkobWF0Y2hbMV0sIHBhcnNlZEFycmF5LCBjb25maWcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25maWcuX2EgPSBwYXJzZWRBcnJheTtcbiAgICAgICAgICAgIGNvbmZpZy5fdHptID0gY2FsY3VsYXRlT2Zmc2V0KG1hdGNoWzhdLCBtYXRjaFs5XSwgbWF0Y2hbMTBdKTtcblxuICAgICAgICAgICAgY29uZmlnLl9kID0gY3JlYXRlVVRDRGF0ZS5hcHBseShudWxsLCBjb25maWcuX2EpO1xuICAgICAgICAgICAgY29uZmlnLl9kLnNldFVUQ01pbnV0ZXMoY29uZmlnLl9kLmdldFVUQ01pbnV0ZXMoKSAtIGNvbmZpZy5fdHptKTtcblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykucmZjMjgyMiA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgZnJvbSAxKSBBU1AuTkVULCAyKSBJU08sIDMpIFJGQyAyODIyIGZvcm1hdHMsIG9yIDQpIG9wdGlvbmFsIGZhbGxiYWNrIGlmIHBhcnNpbmcgaXNuJ3Qgc3RyaWN0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZyhjb25maWcpIHtcbiAgICAgICAgdmFyIG1hdGNoZWQgPSBhc3BOZXRKc29uUmVnZXguZXhlYyhjb25maWcuX2kpO1xuICAgICAgICBpZiAobWF0Y2hlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoK21hdGNoZWRbMV0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnRnJvbUlTTyhjb25maWcpO1xuICAgICAgICBpZiAoY29uZmlnLl9pc1ZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5faXNWYWxpZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZyk7XG4gICAgICAgIGlmIChjb25maWcuX2lzVmFsaWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBkZWxldGUgY29uZmlnLl9pc1ZhbGlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fc3RyaWN0KSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZpbmFsIGF0dGVtcHQsIHVzZSBJbnB1dCBGYWxsYmFja1xuICAgICAgICAgICAgaG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrID0gZGVwcmVjYXRlKFxuICAgICAgICAndmFsdWUgcHJvdmlkZWQgaXMgbm90IGluIGEgcmVjb2duaXplZCBSRkMyODIyIG9yIElTTyBmb3JtYXQuIG1vbWVudCBjb25zdHJ1Y3Rpb24gZmFsbHMgYmFjayB0byBqcyBEYXRlKCksICcgK1xuICAgICAgICAgICAgJ3doaWNoIGlzIG5vdCByZWxpYWJsZSBhY3Jvc3MgYWxsIGJyb3dzZXJzIGFuZCB2ZXJzaW9ucy4gTm9uIFJGQzI4MjIvSVNPIGRhdGUgZm9ybWF0cyBhcmUgJyArXG4gICAgICAgICAgICAnZGlzY291cmFnZWQuIFBsZWFzZSByZWZlciB0byBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2pzLWRhdGUvIGZvciBtb3JlIGluZm8uJyxcbiAgICAgICAgZnVuY3Rpb24gKGNvbmZpZykge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoY29uZmlnLl9pICsgKGNvbmZpZy5fdXNlVVRDID8gJyBVVEMnIDogJycpKTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBQaWNrIHRoZSBmaXJzdCBkZWZpbmVkIG9mIHR3byBvciB0aHJlZSBhcmd1bWVudHMuXG4gICAgZnVuY3Rpb24gZGVmYXVsdHMoYSwgYiwgYykge1xuICAgICAgICBpZiAoYSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYiAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjdXJyZW50RGF0ZUFycmF5KGNvbmZpZykge1xuICAgICAgICAvLyBob29rcyBpcyBhY3R1YWxseSB0aGUgZXhwb3J0ZWQgbW9tZW50IG9iamVjdFxuICAgICAgICB2YXIgbm93VmFsdWUgPSBuZXcgRGF0ZShob29rcy5ub3coKSk7XG4gICAgICAgIGlmIChjb25maWcuX3VzZVVUQykge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBub3dWYWx1ZS5nZXRVVENGdWxsWWVhcigpLFxuICAgICAgICAgICAgICAgIG5vd1ZhbHVlLmdldFVUQ01vbnRoKCksXG4gICAgICAgICAgICAgICAgbm93VmFsdWUuZ2V0VVRDRGF0ZSgpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW25vd1ZhbHVlLmdldEZ1bGxZZWFyKCksIG5vd1ZhbHVlLmdldE1vbnRoKCksIG5vd1ZhbHVlLmdldERhdGUoKV07XG4gICAgfVxuXG4gICAgLy8gY29udmVydCBhbiBhcnJheSB0byBhIGRhdGUuXG4gICAgLy8gdGhlIGFycmF5IHNob3VsZCBtaXJyb3IgdGhlIHBhcmFtZXRlcnMgYmVsb3dcbiAgICAvLyBub3RlOiBhbGwgdmFsdWVzIHBhc3QgdGhlIHllYXIgYXJlIG9wdGlvbmFsIGFuZCB3aWxsIGRlZmF1bHQgdG8gdGhlIGxvd2VzdCBwb3NzaWJsZSB2YWx1ZS5cbiAgICAvLyBbeWVhciwgbW9udGgsIGRheSAsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZF1cbiAgICBmdW5jdGlvbiBjb25maWdGcm9tQXJyYXkoY29uZmlnKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIGlucHV0ID0gW10sXG4gICAgICAgICAgICBjdXJyZW50RGF0ZSxcbiAgICAgICAgICAgIGV4cGVjdGVkV2Vla2RheSxcbiAgICAgICAgICAgIHllYXJUb1VzZTtcblxuICAgICAgICBpZiAoY29uZmlnLl9kKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50RGF0ZSA9IGN1cnJlbnREYXRlQXJyYXkoY29uZmlnKTtcblxuICAgICAgICAvL2NvbXB1dGUgZGF5IG9mIHRoZSB5ZWFyIGZyb20gd2Vla3MgYW5kIHdlZWtkYXlzXG4gICAgICAgIGlmIChjb25maWcuX3cgJiYgY29uZmlnLl9hW0RBVEVdID09IG51bGwgJiYgY29uZmlnLl9hW01PTlRIXSA9PSBudWxsKSB7XG4gICAgICAgICAgICBkYXlPZlllYXJGcm9tV2Vla0luZm8oY29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vaWYgdGhlIGRheSBvZiB0aGUgeWVhciBpcyBzZXQsIGZpZ3VyZSBvdXQgd2hhdCBpdCBpc1xuICAgICAgICBpZiAoY29uZmlnLl9kYXlPZlllYXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgeWVhclRvVXNlID0gZGVmYXVsdHMoY29uZmlnLl9hW1lFQVJdLCBjdXJyZW50RGF0ZVtZRUFSXSk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBjb25maWcuX2RheU9mWWVhciA+IGRheXNJblllYXIoeWVhclRvVXNlKSB8fFxuICAgICAgICAgICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID09PSAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dEYXlPZlllYXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkYXRlID0gY3JlYXRlVVRDRGF0ZSh5ZWFyVG9Vc2UsIDAsIGNvbmZpZy5fZGF5T2ZZZWFyKTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtNT05USF0gPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgICAgICAgICBjb25maWcuX2FbREFURV0gPSBkYXRlLmdldFVUQ0RhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERlZmF1bHQgdG8gY3VycmVudCBkYXRlLlxuICAgICAgICAvLyAqIGlmIG5vIHllYXIsIG1vbnRoLCBkYXkgb2YgbW9udGggYXJlIGdpdmVuLCBkZWZhdWx0IHRvIHRvZGF5XG4gICAgICAgIC8vICogaWYgZGF5IG9mIG1vbnRoIGlzIGdpdmVuLCBkZWZhdWx0IG1vbnRoIGFuZCB5ZWFyXG4gICAgICAgIC8vICogaWYgbW9udGggaXMgZ2l2ZW4sIGRlZmF1bHQgb25seSB5ZWFyXG4gICAgICAgIC8vICogaWYgeWVhciBpcyBnaXZlbiwgZG9uJ3QgZGVmYXVsdCBhbnl0aGluZ1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMyAmJiBjb25maWcuX2FbaV0gPT0gbnVsbDsgKytpKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbaV0gPSBpbnB1dFtpXSA9IGN1cnJlbnREYXRlW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gWmVybyBvdXQgd2hhdGV2ZXIgd2FzIG5vdCBkZWZhdWx0ZWQsIGluY2x1ZGluZyB0aW1lXG4gICAgICAgIGZvciAoOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbaV0gPSBpbnB1dFtpXSA9XG4gICAgICAgICAgICAgICAgY29uZmlnLl9hW2ldID09IG51bGwgPyAoaSA9PT0gMiA/IDEgOiAwKSA6IGNvbmZpZy5fYVtpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGZvciAyNDowMDowMC4wMDBcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID09PSAyNCAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW01JTlVURV0gPT09IDAgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtTRUNPTkRdID09PSAwICYmXG4gICAgICAgICAgICBjb25maWcuX2FbTUlMTElTRUNPTkRdID09PSAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uZmlnLl9uZXh0RGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWcuX2QgPSAoY29uZmlnLl91c2VVVEMgPyBjcmVhdGVVVENEYXRlIDogY3JlYXRlRGF0ZSkuYXBwbHkoXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgaW5wdXRcbiAgICAgICAgKTtcbiAgICAgICAgZXhwZWN0ZWRXZWVrZGF5ID0gY29uZmlnLl91c2VVVENcbiAgICAgICAgICAgID8gY29uZmlnLl9kLmdldFVUQ0RheSgpXG4gICAgICAgICAgICA6IGNvbmZpZy5fZC5nZXREYXkoKTtcblxuICAgICAgICAvLyBBcHBseSB0aW1lem9uZSBvZmZzZXQgZnJvbSBpbnB1dC4gVGhlIGFjdHVhbCB1dGNPZmZzZXQgY2FuIGJlIGNoYW5nZWRcbiAgICAgICAgLy8gd2l0aCBwYXJzZVpvbmUuXG4gICAgICAgIGlmIChjb25maWcuX3R6bSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25maWcuX2Quc2V0VVRDTWludXRlcyhjb25maWcuX2QuZ2V0VVRDTWludXRlcygpIC0gY29uZmlnLl90em0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fbmV4dERheSkge1xuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gMjQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjaGVjayBmb3IgbWlzbWF0Y2hpbmcgZGF5IG9mIHdlZWtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl93ICYmXG4gICAgICAgICAgICB0eXBlb2YgY29uZmlnLl93LmQgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICBjb25maWcuX3cuZCAhPT0gZXhwZWN0ZWRXZWVrZGF5XG4gICAgICAgICkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykud2Vla2RheU1pc21hdGNoID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRheU9mWWVhckZyb21XZWVrSW5mbyhjb25maWcpIHtcbiAgICAgICAgdmFyIHcsIHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSwgdGVtcCwgd2Vla2RheU92ZXJmbG93LCBjdXJXZWVrO1xuXG4gICAgICAgIHcgPSBjb25maWcuX3c7XG4gICAgICAgIGlmICh3LkdHICE9IG51bGwgfHwgdy5XICE9IG51bGwgfHwgdy5FICE9IG51bGwpIHtcbiAgICAgICAgICAgIGRvdyA9IDE7XG4gICAgICAgICAgICBkb3kgPSA0O1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBXZSBuZWVkIHRvIHRha2UgdGhlIGN1cnJlbnQgaXNvV2Vla1llYXIsIGJ1dCB0aGF0IGRlcGVuZHMgb25cbiAgICAgICAgICAgIC8vIGhvdyB3ZSBpbnRlcnByZXQgbm93IChsb2NhbCwgdXRjLCBmaXhlZCBvZmZzZXQpLiBTbyBjcmVhdGVcbiAgICAgICAgICAgIC8vIGEgbm93IHZlcnNpb24gb2YgY3VycmVudCBjb25maWcgKHRha2UgbG9jYWwvdXRjL29mZnNldCBmbGFncywgYW5kXG4gICAgICAgICAgICAvLyBjcmVhdGUgbm93KS5cbiAgICAgICAgICAgIHdlZWtZZWFyID0gZGVmYXVsdHMoXG4gICAgICAgICAgICAgICAgdy5HRyxcbiAgICAgICAgICAgICAgICBjb25maWcuX2FbWUVBUl0sXG4gICAgICAgICAgICAgICAgd2Vla09mWWVhcihjcmVhdGVMb2NhbCgpLCAxLCA0KS55ZWFyXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcuVywgMSk7XG4gICAgICAgICAgICB3ZWVrZGF5ID0gZGVmYXVsdHMody5FLCAxKTtcbiAgICAgICAgICAgIGlmICh3ZWVrZGF5IDwgMSB8fCB3ZWVrZGF5ID4gNykge1xuICAgICAgICAgICAgICAgIHdlZWtkYXlPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb3cgPSBjb25maWcuX2xvY2FsZS5fd2Vlay5kb3c7XG4gICAgICAgICAgICBkb3kgPSBjb25maWcuX2xvY2FsZS5fd2Vlay5kb3k7XG5cbiAgICAgICAgICAgIGN1cldlZWsgPSB3ZWVrT2ZZZWFyKGNyZWF0ZUxvY2FsKCksIGRvdywgZG95KTtcblxuICAgICAgICAgICAgd2Vla1llYXIgPSBkZWZhdWx0cyh3LmdnLCBjb25maWcuX2FbWUVBUl0sIGN1cldlZWsueWVhcik7XG5cbiAgICAgICAgICAgIC8vIERlZmF1bHQgdG8gY3VycmVudCB3ZWVrLlxuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcudywgY3VyV2Vlay53ZWVrKTtcblxuICAgICAgICAgICAgaWYgKHcuZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gd2Vla2RheSAtLSBsb3cgZGF5IG51bWJlcnMgYXJlIGNvbnNpZGVyZWQgbmV4dCB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IHcuZDtcbiAgICAgICAgICAgICAgICBpZiAod2Vla2RheSA8IDAgfHwgd2Vla2RheSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHcuZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gbG9jYWwgd2Vla2RheSAtLSBjb3VudGluZyBzdGFydHMgZnJvbSBiZWdpbm5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSB3LmUgKyBkb3c7XG4gICAgICAgICAgICAgICAgaWYgKHcuZSA8IDAgfHwgdy5lID4gNikge1xuICAgICAgICAgICAgICAgICAgICB3ZWVrZGF5T3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB0byBiZWdpbm5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSBkb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdlZWsgPCAxIHx8IHdlZWsgPiB3ZWVrc0luWWVhcih3ZWVrWWVhciwgZG93LCBkb3kpKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dXZWVrcyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAod2Vla2RheU92ZXJmbG93ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd1dlZWtkYXkgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGVtcCA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpO1xuICAgICAgICAgICAgY29uZmlnLl9hW1lFQVJdID0gdGVtcC55ZWFyO1xuICAgICAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPSB0ZW1wLmRheU9mWWVhcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbnN0YW50IHRoYXQgcmVmZXJzIHRvIHRoZSBJU08gc3RhbmRhcmRcbiAgICBob29rcy5JU09fODYwMSA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gY29uc3RhbnQgdGhhdCByZWZlcnMgdG8gdGhlIFJGQyAyODIyIGZvcm1cbiAgICBob29rcy5SRkNfMjgyMiA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gZGF0ZSBmcm9tIHN0cmluZyBhbmQgZm9ybWF0IHN0cmluZ1xuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKSB7XG4gICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyB0byBhbm90aGVyIHBhcnQgb2YgdGhlIGNyZWF0aW9uIGZsb3cgdG8gcHJldmVudCBjaXJjdWxhciBkZXBzXG4gICAgICAgIGlmIChjb25maWcuX2YgPT09IGhvb2tzLklTT184NjAxKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tSVNPKGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZy5fZiA9PT0gaG9va3MuUkZDXzI4MjIpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uZmlnLl9hID0gW107XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVtcHR5ID0gdHJ1ZTtcblxuICAgICAgICAvLyBUaGlzIGFycmF5IGlzIHVzZWQgdG8gbWFrZSBhIERhdGUsIGVpdGhlciB3aXRoIGBuZXcgRGF0ZWAgb3IgYERhdGUuVVRDYFxuICAgICAgICB2YXIgc3RyaW5nID0gJycgKyBjb25maWcuX2ksXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcGFyc2VkSW5wdXQsXG4gICAgICAgICAgICB0b2tlbnMsXG4gICAgICAgICAgICB0b2tlbixcbiAgICAgICAgICAgIHNraXBwZWQsXG4gICAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgICAgdG90YWxQYXJzZWRJbnB1dExlbmd0aCA9IDAsXG4gICAgICAgICAgICBlcmEsXG4gICAgICAgICAgICB0b2tlbkxlbjtcblxuICAgICAgICB0b2tlbnMgPVxuICAgICAgICAgICAgZXhwYW5kRm9ybWF0KGNvbmZpZy5fZiwgY29uZmlnLl9sb2NhbGUpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpIHx8IFtdO1xuICAgICAgICB0b2tlbkxlbiA9IHRva2Vucy5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b2tlbkxlbjsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTtcbiAgICAgICAgICAgIHBhcnNlZElucHV0ID0gKHN0cmluZy5tYXRjaChnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4odG9rZW4sIGNvbmZpZykpIHx8XG4gICAgICAgICAgICAgICAgW10pWzBdO1xuICAgICAgICAgICAgaWYgKHBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgc2tpcHBlZCA9IHN0cmluZy5zdWJzdHIoMCwgc3RyaW5nLmluZGV4T2YocGFyc2VkSW5wdXQpKTtcbiAgICAgICAgICAgICAgICBpZiAoc2tpcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZElucHV0LnB1c2goc2tpcHBlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zbGljZShcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nLmluZGV4T2YocGFyc2VkSW5wdXQpICsgcGFyc2VkSW5wdXQubGVuZ3RoXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0b3RhbFBhcnNlZElucHV0TGVuZ3RoICs9IHBhcnNlZElucHV0Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGRvbid0IHBhcnNlIGlmIGl0J3Mgbm90IGEga25vd24gdG9rZW5cbiAgICAgICAgICAgIGlmIChmb3JtYXRUb2tlbkZ1bmN0aW9uc1t0b2tlbl0pIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZW1wdHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRUb2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZFRpbWVUb0FycmF5RnJvbVRva2VuKHRva2VuLCBwYXJzZWRJbnB1dCwgY29uZmlnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLl9zdHJpY3QgJiYgIXBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkVG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRkIHJlbWFpbmluZyB1bnBhcnNlZCBpbnB1dCBsZW5ndGggdG8gdGhlIHN0cmluZ1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5jaGFyc0xlZnRPdmVyID1cbiAgICAgICAgICAgIHN0cmluZ0xlbmd0aCAtIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGg7XG4gICAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkSW5wdXQucHVzaChzdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2xlYXIgXzEyaCBmbGFnIGlmIGhvdXIgaXMgPD0gMTJcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdIDw9IDEyICYmXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID09PSB0cnVlICYmXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPiAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnBhcnNlZERhdGVQYXJ0cyA9IGNvbmZpZy5fYS5zbGljZSgwKTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykubWVyaWRpZW0gPSBjb25maWcuX21lcmlkaWVtO1xuICAgICAgICAvLyBoYW5kbGUgbWVyaWRpZW1cbiAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gbWVyaWRpZW1GaXhXcmFwKFxuICAgICAgICAgICAgY29uZmlnLl9sb2NhbGUsXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0sXG4gICAgICAgICAgICBjb25maWcuX21lcmlkaWVtXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gaGFuZGxlIGVyYVxuICAgICAgICBlcmEgPSBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lcmE7XG4gICAgICAgIGlmIChlcmEgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtZRUFSXSA9IGNvbmZpZy5fbG9jYWxlLmVyYXNDb252ZXJ0WWVhcihlcmEsIGNvbmZpZy5fYVtZRUFSXSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICAgICAgY2hlY2tPdmVyZmxvdyhjb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmlkaWVtRml4V3JhcChsb2NhbGUsIGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgIHZhciBpc1BtO1xuXG4gICAgICAgIGlmIChtZXJpZGllbSA9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvXG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxlLm1lcmlkaWVtSG91ciAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLm1lcmlkaWVtSG91cihob3VyLCBtZXJpZGllbSk7XG4gICAgICAgIH0gZWxzZSBpZiAobG9jYWxlLmlzUE0gIT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gRmFsbGJhY2tcbiAgICAgICAgICAgIGlzUG0gPSBsb2NhbGUuaXNQTShtZXJpZGllbSk7XG4gICAgICAgICAgICBpZiAoaXNQbSAmJiBob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc1BtICYmIGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IHN1cHBvc2VkIHRvIGhhcHBlblxuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkYXRlIGZyb20gc3RyaW5nIGFuZCBhcnJheSBvZiBmb3JtYXQgc3RyaW5nc1xuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpIHtcbiAgICAgICAgdmFyIHRlbXBDb25maWcsXG4gICAgICAgICAgICBiZXN0TW9tZW50LFxuICAgICAgICAgICAgc2NvcmVUb0JlYXQsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgY3VycmVudFNjb3JlLFxuICAgICAgICAgICAgdmFsaWRGb3JtYXRGb3VuZCxcbiAgICAgICAgICAgIGJlc3RGb3JtYXRJc1ZhbGlkID0gZmFsc2UsXG4gICAgICAgICAgICBjb25maWdmTGVuID0gY29uZmlnLl9mLmxlbmd0aDtcblxuICAgICAgICBpZiAoY29uZmlnZkxlbiA9PT0gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZEZvcm1hdCA9IHRydWU7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbmZpZ2ZMZW47IGkrKykge1xuICAgICAgICAgICAgY3VycmVudFNjb3JlID0gMDtcbiAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRlbXBDb25maWcgPSBjb3B5Q29uZmlnKHt9LCBjb25maWcpO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5fdXNlVVRDICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0ZW1wQ29uZmlnLl91c2VVVEMgPSBjb25maWcuX3VzZVVUQztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlbXBDb25maWcuX2YgPSBjb25maWcuX2ZbaV07XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KHRlbXBDb25maWcpO1xuXG4gICAgICAgICAgICBpZiAoaXNWYWxpZCh0ZW1wQ29uZmlnKSkge1xuICAgICAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbnkgaW5wdXQgdGhhdCB3YXMgbm90IHBhcnNlZCBhZGQgYSBwZW5hbHR5IGZvciB0aGF0IGZvcm1hdFxuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5jaGFyc0xlZnRPdmVyO1xuXG4gICAgICAgICAgICAvL29yIHRva2Vuc1xuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS51bnVzZWRUb2tlbnMubGVuZ3RoICogMTA7XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5zY29yZSA9IGN1cnJlbnRTY29yZTtcblxuICAgICAgICAgICAgaWYgKCFiZXN0Rm9ybWF0SXNWYWxpZCkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgc2NvcmVUb0JlYXQgPT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcmUgPCBzY29yZVRvQmVhdCB8fFxuICAgICAgICAgICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID0gY3VycmVudFNjb3JlO1xuICAgICAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkRm9ybWF0Rm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RGb3JtYXRJc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTY29yZSA8IHNjb3JlVG9CZWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID0gY3VycmVudFNjb3JlO1xuICAgICAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBleHRlbmQoY29uZmlnLCBiZXN0TW9tZW50IHx8IHRlbXBDb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcuX2QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpID0gbm9ybWFsaXplT2JqZWN0VW5pdHMoY29uZmlnLl9pKSxcbiAgICAgICAgICAgIGRheU9yRGF0ZSA9IGkuZGF5ID09PSB1bmRlZmluZWQgPyBpLmRhdGUgOiBpLmRheTtcbiAgICAgICAgY29uZmlnLl9hID0gbWFwKFxuICAgICAgICAgICAgW2kueWVhciwgaS5tb250aCwgZGF5T3JEYXRlLCBpLmhvdXIsIGkubWludXRlLCBpLnNlY29uZCwgaS5taWxsaXNlY29uZF0sXG4gICAgICAgICAgICBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiBwYXJzZUludChvYmosIDEwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVGcm9tQ29uZmlnKGNvbmZpZykge1xuICAgICAgICB2YXIgcmVzID0gbmV3IE1vbWVudChjaGVja092ZXJmbG93KHByZXBhcmVDb25maWcoY29uZmlnKSkpO1xuICAgICAgICBpZiAocmVzLl9uZXh0RGF5KSB7XG4gICAgICAgICAgICAvLyBBZGRpbmcgaXMgc21hcnQgZW5vdWdoIGFyb3VuZCBEU1RcbiAgICAgICAgICAgIHJlcy5hZGQoMSwgJ2QnKTtcbiAgICAgICAgICAgIHJlcy5fbmV4dERheSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcGFyZUNvbmZpZyhjb25maWcpIHtcbiAgICAgICAgdmFyIGlucHV0ID0gY29uZmlnLl9pLFxuICAgICAgICAgICAgZm9ybWF0ID0gY29uZmlnLl9mO1xuXG4gICAgICAgIGNvbmZpZy5fbG9jYWxlID0gY29uZmlnLl9sb2NhbGUgfHwgZ2V0TG9jYWxlKGNvbmZpZy5fbCk7XG5cbiAgICAgICAgaWYgKGlucHV0ID09PSBudWxsIHx8IChmb3JtYXQgPT09IHVuZGVmaW5lZCAmJiBpbnB1dCA9PT0gJycpKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlSW52YWxpZCh7IG51bGxJbnB1dDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25maWcuX2kgPSBpbnB1dCA9IGNvbmZpZy5fbG9jYWxlLnByZXBhcnNlKGlucHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc01vbWVudChpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9tZW50KGNoZWNrT3ZlcmZsb3coaW5wdXQpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBpbnB1dDtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCkge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnRnJvbUlucHV0KGNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzVmFsaWQoY29uZmlnKSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlucHV0KGNvbmZpZykge1xuICAgICAgICB2YXIgaW5wdXQgPSBjb25maWcuX2k7XG4gICAgICAgIGlmIChpc1VuZGVmaW5lZChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGhvb2tzLm5vdygpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dC52YWx1ZU9mKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmcoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9hID0gbWFwKGlucHV0LnNsaWNlKDApLCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KG9iaiwgMTApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkpIHtcbiAgICAgICAgICAgIC8vIGZyb20gbWlsbGlzZWNvbmRzXG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgaXNVVEMpIHtcbiAgICAgICAgdmFyIGMgPSB7fTtcblxuICAgICAgICBpZiAoZm9ybWF0ID09PSB0cnVlIHx8IGZvcm1hdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHN0cmljdCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsb2NhbGUgPT09IHRydWUgfHwgbG9jYWxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgc3RyaWN0ID0gbG9jYWxlO1xuICAgICAgICAgICAgbG9jYWxlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGlzT2JqZWN0KGlucHV0KSAmJiBpc09iamVjdEVtcHR5KGlucHV0KSkgfHxcbiAgICAgICAgICAgIChpc0FycmF5KGlucHV0KSAmJiBpbnB1dC5sZW5ndGggPT09IDApXG4gICAgICAgICkge1xuICAgICAgICAgICAgaW5wdXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiBtdXN0IGJlIGRvbmUgdGhpcyB3YXkuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8xNDIzXG4gICAgICAgIGMuX2lzQU1vbWVudE9iamVjdCA9IHRydWU7XG4gICAgICAgIGMuX3VzZVVUQyA9IGMuX2lzVVRDID0gaXNVVEM7XG4gICAgICAgIGMuX2wgPSBsb2NhbGU7XG4gICAgICAgIGMuX2kgPSBpbnB1dDtcbiAgICAgICAgYy5fZiA9IGZvcm1hdDtcbiAgICAgICAgYy5fc3RyaWN0ID0gc3RyaWN0O1xuXG4gICAgICAgIHJldHVybiBjcmVhdGVGcm9tQ29uZmlnKGMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbE9yVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvdHlwZU1pbiA9IGRlcHJlY2F0ZShcbiAgICAgICAgICAgICdtb21lbnQoKS5taW4gaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5tYXggaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA8IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIHByb3RvdHlwZU1heCA9IGRlcHJlY2F0ZShcbiAgICAgICAgICAgICdtb21lbnQoKS5tYXggaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5taW4gaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA+IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAvLyBQaWNrIGEgbW9tZW50IG0gZnJvbSBtb21lbnRzIHNvIHRoYXQgbVtmbl0ob3RoZXIpIGlzIHRydWUgZm9yIGFsbFxuICAgIC8vIG90aGVyLiBUaGlzIHJlbGllcyBvbiB0aGUgZnVuY3Rpb24gZm4gdG8gYmUgdHJhbnNpdGl2ZS5cbiAgICAvL1xuICAgIC8vIG1vbWVudHMgc2hvdWxkIGVpdGhlciBiZSBhbiBhcnJheSBvZiBtb21lbnQgb2JqZWN0cyBvciBhbiBhcnJheSwgd2hvc2VcbiAgICAvLyBmaXJzdCBlbGVtZW50IGlzIGFuIGFycmF5IG9mIG1vbWVudCBvYmplY3RzLlxuICAgIGZ1bmN0aW9uIHBpY2tCeShmbiwgbW9tZW50cykge1xuICAgICAgICB2YXIgcmVzLCBpO1xuICAgICAgICBpZiAobW9tZW50cy5sZW5ndGggPT09IDEgJiYgaXNBcnJheShtb21lbnRzWzBdKSkge1xuICAgICAgICAgICAgbW9tZW50cyA9IG1vbWVudHNbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtb21lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzID0gbW9tZW50c1swXTtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IG1vbWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGlmICghbW9tZW50c1tpXS5pc1ZhbGlkKCkgfHwgbW9tZW50c1tpXVtmbl0ocmVzKSkge1xuICAgICAgICAgICAgICAgIHJlcyA9IG1vbWVudHNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBVc2UgW10uc29ydCBpbnN0ZWFkP1xuICAgIGZ1bmN0aW9uIG1pbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG5cbiAgICAgICAgcmV0dXJuIHBpY2tCeSgnaXNCZWZvcmUnLCBhcmdzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXgoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuXG4gICAgICAgIHJldHVybiBwaWNrQnkoJ2lzQWZ0ZXInLCBhcmdzKTtcbiAgICB9XG5cbiAgICB2YXIgbm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gRGF0ZS5ub3cgPyBEYXRlLm5vdygpIDogK25ldyBEYXRlKCk7XG4gICAgfTtcblxuICAgIHZhciBvcmRlcmluZyA9IFtcbiAgICAgICAgJ3llYXInLFxuICAgICAgICAncXVhcnRlcicsXG4gICAgICAgICdtb250aCcsXG4gICAgICAgICd3ZWVrJyxcbiAgICAgICAgJ2RheScsXG4gICAgICAgICdob3VyJyxcbiAgICAgICAgJ21pbnV0ZScsXG4gICAgICAgICdzZWNvbmQnLFxuICAgICAgICAnbWlsbGlzZWNvbmQnLFxuICAgIF07XG5cbiAgICBmdW5jdGlvbiBpc0R1cmF0aW9uVmFsaWQobSkge1xuICAgICAgICB2YXIga2V5LFxuICAgICAgICAgICAgdW5pdEhhc0RlY2ltYWwgPSBmYWxzZSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBvcmRlckxlbiA9IG9yZGVyaW5nLmxlbmd0aDtcbiAgICAgICAgZm9yIChrZXkgaW4gbSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGhhc093blByb3AobSwga2V5KSAmJlxuICAgICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgICAgIGluZGV4T2YuY2FsbChvcmRlcmluZywga2V5KSAhPT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgKG1ba2V5XSA9PSBudWxsIHx8ICFpc05hTihtW2tleV0pKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBvcmRlckxlbjsgKytpKSB7XG4gICAgICAgICAgICBpZiAobVtvcmRlcmluZ1tpXV0pIHtcbiAgICAgICAgICAgICAgICBpZiAodW5pdEhhc0RlY2ltYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBvbmx5IGFsbG93IG5vbi1pbnRlZ2VycyBmb3Igc21hbGxlc3QgdW5pdFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocGFyc2VGbG9hdChtW29yZGVyaW5nW2ldXSkgIT09IHRvSW50KG1bb3JkZXJpbmdbaV1dKSkge1xuICAgICAgICAgICAgICAgICAgICB1bml0SGFzRGVjaW1hbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQxKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkJDEoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbihOYU4pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIER1cmF0aW9uKGR1cmF0aW9uKSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkSW5wdXQgPSBub3JtYWxpemVPYmplY3RVbml0cyhkdXJhdGlvbiksXG4gICAgICAgICAgICB5ZWFycyA9IG5vcm1hbGl6ZWRJbnB1dC55ZWFyIHx8IDAsXG4gICAgICAgICAgICBxdWFydGVycyA9IG5vcm1hbGl6ZWRJbnB1dC5xdWFydGVyIHx8IDAsXG4gICAgICAgICAgICBtb250aHMgPSBub3JtYWxpemVkSW5wdXQubW9udGggfHwgMCxcbiAgICAgICAgICAgIHdlZWtzID0gbm9ybWFsaXplZElucHV0LndlZWsgfHwgbm9ybWFsaXplZElucHV0Lmlzb1dlZWsgfHwgMCxcbiAgICAgICAgICAgIGRheXMgPSBub3JtYWxpemVkSW5wdXQuZGF5IHx8IDAsXG4gICAgICAgICAgICBob3VycyA9IG5vcm1hbGl6ZWRJbnB1dC5ob3VyIHx8IDAsXG4gICAgICAgICAgICBtaW51dGVzID0gbm9ybWFsaXplZElucHV0Lm1pbnV0ZSB8fCAwLFxuICAgICAgICAgICAgc2Vjb25kcyA9IG5vcm1hbGl6ZWRJbnB1dC5zZWNvbmQgfHwgMCxcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kcyA9IG5vcm1hbGl6ZWRJbnB1dC5taWxsaXNlY29uZCB8fCAwO1xuXG4gICAgICAgIHRoaXMuX2lzVmFsaWQgPSBpc0R1cmF0aW9uVmFsaWQobm9ybWFsaXplZElucHV0KTtcblxuICAgICAgICAvLyByZXByZXNlbnRhdGlvbiBmb3IgZGF0ZUFkZFJlbW92ZVxuICAgICAgICB0aGlzLl9taWxsaXNlY29uZHMgPVxuICAgICAgICAgICAgK21pbGxpc2Vjb25kcyArXG4gICAgICAgICAgICBzZWNvbmRzICogMWUzICsgLy8gMTAwMFxuICAgICAgICAgICAgbWludXRlcyAqIDZlNCArIC8vIDEwMDAgKiA2MFxuICAgICAgICAgICAgaG91cnMgKiAxMDAwICogNjAgKiA2MDsgLy91c2luZyAxMDAwICogNjAgKiA2MCBpbnN0ZWFkIG9mIDM2ZTUgdG8gYXZvaWQgZmxvYXRpbmcgcG9pbnQgcm91bmRpbmcgZXJyb3JzIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8yOTc4XG4gICAgICAgIC8vIEJlY2F1c2Ugb2YgZGF0ZUFkZFJlbW92ZSB0cmVhdHMgMjQgaG91cnMgYXMgZGlmZmVyZW50IGZyb20gYVxuICAgICAgICAvLyBkYXkgd2hlbiB3b3JraW5nIGFyb3VuZCBEU1QsIHdlIG5lZWQgdG8gc3RvcmUgdGhlbSBzZXBhcmF0ZWx5XG4gICAgICAgIHRoaXMuX2RheXMgPSArZGF5cyArIHdlZWtzICogNztcbiAgICAgICAgLy8gSXQgaXMgaW1wb3NzaWJsZSB0byB0cmFuc2xhdGUgbW9udGhzIGludG8gZGF5cyB3aXRob3V0IGtub3dpbmdcbiAgICAgICAgLy8gd2hpY2ggbW9udGhzIHlvdSBhcmUgYXJlIHRhbGtpbmcgYWJvdXQsIHNvIHdlIGhhdmUgdG8gc3RvcmVcbiAgICAgICAgLy8gaXQgc2VwYXJhdGVseS5cbiAgICAgICAgdGhpcy5fbW9udGhzID0gK21vbnRocyArIHF1YXJ0ZXJzICogMyArIHllYXJzICogMTI7XG5cbiAgICAgICAgdGhpcy5fZGF0YSA9IHt9O1xuXG4gICAgICAgIHRoaXMuX2xvY2FsZSA9IGdldExvY2FsZSgpO1xuXG4gICAgICAgIHRoaXMuX2J1YmJsZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRHVyYXRpb24ob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBEdXJhdGlvbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNSb3VuZChudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKC0xICogbnVtYmVyKSAqIC0xO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbXBhcmUgdHdvIGFycmF5cywgcmV0dXJuIHRoZSBudW1iZXIgb2YgZGlmZmVyZW5jZXNcbiAgICBmdW5jdGlvbiBjb21wYXJlQXJyYXlzKGFycmF5MSwgYXJyYXkyLCBkb250Q29udmVydCkge1xuICAgICAgICB2YXIgbGVuID0gTWF0aC5taW4oYXJyYXkxLmxlbmd0aCwgYXJyYXkyLmxlbmd0aCksXG4gICAgICAgICAgICBsZW5ndGhEaWZmID0gTWF0aC5hYnMoYXJyYXkxLmxlbmd0aCAtIGFycmF5Mi5sZW5ndGgpLFxuICAgICAgICAgICAgZGlmZnMgPSAwLFxuICAgICAgICAgICAgaTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKGRvbnRDb252ZXJ0ICYmIGFycmF5MVtpXSAhPT0gYXJyYXkyW2ldKSB8fFxuICAgICAgICAgICAgICAgICghZG9udENvbnZlcnQgJiYgdG9JbnQoYXJyYXkxW2ldKSAhPT0gdG9JbnQoYXJyYXkyW2ldKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGRpZmZzKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRpZmZzICsgbGVuZ3RoRGlmZjtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBmdW5jdGlvbiBvZmZzZXQodG9rZW4sIHNlcGFyYXRvcikge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbih0b2tlbiwgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMudXRjT2Zmc2V0KCksXG4gICAgICAgICAgICAgICAgc2lnbiA9ICcrJztcbiAgICAgICAgICAgIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gLW9mZnNldDtcbiAgICAgICAgICAgICAgICBzaWduID0gJy0nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBzaWduICtcbiAgICAgICAgICAgICAgICB6ZXJvRmlsbCh+fihvZmZzZXQgLyA2MCksIDIpICtcbiAgICAgICAgICAgICAgICBzZXBhcmF0b3IgK1xuICAgICAgICAgICAgICAgIHplcm9GaWxsKH5+b2Zmc2V0ICUgNjAsIDIpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvZmZzZXQoJ1onLCAnOicpO1xuICAgIG9mZnNldCgnWlonLCAnJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdaJywgbWF0Y2hTaG9ydE9mZnNldCk7XG4gICAgYWRkUmVnZXhUb2tlbignWlonLCBtYXRjaFNob3J0T2Zmc2V0KTtcbiAgICBhZGRQYXJzZVRva2VuKFsnWicsICdaWiddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl91c2VVVEMgPSB0cnVlO1xuICAgICAgICBjb25maWcuX3R6bSA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hTaG9ydE9mZnNldCwgaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgLy8gdGltZXpvbmUgY2h1bmtlclxuICAgIC8vICcrMTA6MDAnID4gWycxMCcsICAnMDAnXVxuICAgIC8vICctMTUzMCcgID4gWyctMTUnLCAnMzAnXVxuICAgIHZhciBjaHVua09mZnNldCA9IC8oW1xcK1xcLV18XFxkXFxkKS9naTtcblxuICAgIGZ1bmN0aW9uIG9mZnNldEZyb21TdHJpbmcobWF0Y2hlciwgc3RyaW5nKSB7XG4gICAgICAgIHZhciBtYXRjaGVzID0gKHN0cmluZyB8fCAnJykubWF0Y2gobWF0Y2hlciksXG4gICAgICAgICAgICBjaHVuayxcbiAgICAgICAgICAgIHBhcnRzLFxuICAgICAgICAgICAgbWludXRlcztcblxuICAgICAgICBpZiAobWF0Y2hlcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjaHVuayA9IG1hdGNoZXNbbWF0Y2hlcy5sZW5ndGggLSAxXSB8fCBbXTtcbiAgICAgICAgcGFydHMgPSAoY2h1bmsgKyAnJykubWF0Y2goY2h1bmtPZmZzZXQpIHx8IFsnLScsIDAsIDBdO1xuICAgICAgICBtaW51dGVzID0gKyhwYXJ0c1sxXSAqIDYwKSArIHRvSW50KHBhcnRzWzJdKTtcblxuICAgICAgICByZXR1cm4gbWludXRlcyA9PT0gMCA/IDAgOiBwYXJ0c1swXSA9PT0gJysnID8gbWludXRlcyA6IC1taW51dGVzO1xuICAgIH1cblxuICAgIC8vIFJldHVybiBhIG1vbWVudCBmcm9tIGlucHV0LCB0aGF0IGlzIGxvY2FsL3V0Yy96b25lIGVxdWl2YWxlbnQgdG8gbW9kZWwuXG4gICAgZnVuY3Rpb24gY2xvbmVXaXRoT2Zmc2V0KGlucHV0LCBtb2RlbCkge1xuICAgICAgICB2YXIgcmVzLCBkaWZmO1xuICAgICAgICBpZiAobW9kZWwuX2lzVVRDKSB7XG4gICAgICAgICAgICByZXMgPSBtb2RlbC5jbG9uZSgpO1xuICAgICAgICAgICAgZGlmZiA9XG4gICAgICAgICAgICAgICAgKGlzTW9tZW50KGlucHV0KSB8fCBpc0RhdGUoaW5wdXQpXG4gICAgICAgICAgICAgICAgICAgID8gaW5wdXQudmFsdWVPZigpXG4gICAgICAgICAgICAgICAgICAgIDogY3JlYXRlTG9jYWwoaW5wdXQpLnZhbHVlT2YoKSkgLSByZXMudmFsdWVPZigpO1xuICAgICAgICAgICAgLy8gVXNlIGxvdy1sZXZlbCBhcGksIGJlY2F1c2UgdGhpcyBmbiBpcyBsb3ctbGV2ZWwgYXBpLlxuICAgICAgICAgICAgcmVzLl9kLnNldFRpbWUocmVzLl9kLnZhbHVlT2YoKSArIGRpZmYpO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHJlcywgZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVMb2NhbChpbnB1dCkubG9jYWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERhdGVPZmZzZXQobSkge1xuICAgICAgICAvLyBPbiBGaXJlZm94LjI0IERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyBhIGZsb2F0aW5nIHBvaW50LlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9wdWxsLzE4NzFcbiAgICAgICAgcmV0dXJuIC1NYXRoLnJvdW5kKG0uX2QuZ2V0VGltZXpvbmVPZmZzZXQoKSk7XG4gICAgfVxuXG4gICAgLy8gSE9PS1NcblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgYSBtb21lbnQgaXMgbXV0YXRlZC5cbiAgICAvLyBJdCBpcyBpbnRlbmRlZCB0byBrZWVwIHRoZSBvZmZzZXQgaW4gc3luYyB3aXRoIHRoZSB0aW1lem9uZS5cbiAgICBob29rcy51cGRhdGVPZmZzZXQgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIC8vIGtlZXBMb2NhbFRpbWUgPSB0cnVlIG1lYW5zIG9ubHkgY2hhbmdlIHRoZSB0aW1lem9uZSwgd2l0aG91dFxuICAgIC8vIGFmZmVjdGluZyB0aGUgbG9jYWwgaG91ci4gU28gNTozMToyNiArMDMwMCAtLVt1dGNPZmZzZXQoMiwgdHJ1ZSldLS0+XG4gICAgLy8gNTozMToyNiArMDIwMCBJdCBpcyBwb3NzaWJsZSB0aGF0IDU6MzE6MjYgZG9lc24ndCBleGlzdCB3aXRoIG9mZnNldFxuICAgIC8vICswMjAwLCBzbyB3ZSBhZGp1c3QgdGhlIHRpbWUgYXMgbmVlZGVkLCB0byBiZSB2YWxpZC5cbiAgICAvL1xuICAgIC8vIEtlZXBpbmcgdGhlIHRpbWUgYWN0dWFsbHkgYWRkcy9zdWJ0cmFjdHMgKG9uZSBob3VyKVxuICAgIC8vIGZyb20gdGhlIGFjdHVhbCByZXByZXNlbnRlZCB0aW1lLiBUaGF0IGlzIHdoeSB3ZSBjYWxsIHVwZGF0ZU9mZnNldFxuICAgIC8vIGEgc2Vjb25kIHRpbWUuIEluIGNhc2UgaXQgd2FudHMgdXMgdG8gY2hhbmdlIHRoZSBvZmZzZXQgYWdhaW5cbiAgICAvLyBfY2hhbmdlSW5Qcm9ncmVzcyA9PSB0cnVlIGNhc2UsIHRoZW4gd2UgaGF2ZSB0byBhZGp1c3QsIGJlY2F1c2VcbiAgICAvLyB0aGVyZSBpcyBubyBzdWNoIHRpbWUgaW4gdGhlIGdpdmVuIHRpbWV6b25lLlxuICAgIGZ1bmN0aW9uIGdldFNldE9mZnNldChpbnB1dCwga2VlcExvY2FsVGltZSwga2VlcE1pbnV0ZXMpIHtcbiAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuX29mZnNldCB8fCAwLFxuICAgICAgICAgICAgbG9jYWxBZGp1c3Q7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hTaG9ydE9mZnNldCwgaW5wdXQpO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGlucHV0KSA8IDE2ICYmICFrZWVwTWludXRlcykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gaW5wdXQgKiA2MDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5faXNVVEMgJiYga2VlcExvY2FsVGltZSkge1xuICAgICAgICAgICAgICAgIGxvY2FsQWRqdXN0ID0gZ2V0RGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX29mZnNldCA9IGlucHV0O1xuICAgICAgICAgICAgdGhpcy5faXNVVEMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGxvY2FsQWRqdXN0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZChsb2NhbEFkanVzdCwgJ20nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvZmZzZXQgIT09IGlucHV0KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFrZWVwTG9jYWxUaW1lIHx8IHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkU3VidHJhY3QoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRHVyYXRpb24oaW5wdXQgLSBvZmZzZXQsICdtJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9jaGFuZ2VJblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gb2Zmc2V0IDogZ2V0RGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFpvbmUoaW5wdXQsIGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSAtaW5wdXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KGlucHV0LCBrZWVwTG9jYWxUaW1lKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gLXRoaXMudXRjT2Zmc2V0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb1VUQyhrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb0xvY2FsKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzVVRDKSB7XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcbiAgICAgICAgICAgIHRoaXMuX2lzVVRDID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJ0cmFjdChnZXREYXRlT2Zmc2V0KHRoaXMpLCAnbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldE9mZnNldFRvUGFyc2VkT2Zmc2V0KCkge1xuICAgICAgICBpZiAodGhpcy5fdHptICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KHRoaXMuX3R6bSwgZmFsc2UsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLl9pID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdmFyIHRab25lID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaE9mZnNldCwgdGhpcy5faSk7XG4gICAgICAgICAgICBpZiAodFpvbmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KHRab25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoMCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzQWxpZ25lZEhvdXJPZmZzZXQoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlucHV0ID0gaW5wdXQgPyBjcmVhdGVMb2NhbChpbnB1dCkudXRjT2Zmc2V0KCkgOiAwO1xuXG4gICAgICAgIHJldHVybiAodGhpcy51dGNPZmZzZXQoKSAtIGlucHV0KSAlIDYwID09PSAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCgwKS51dGNPZmZzZXQoKSB8fFxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCg1KS51dGNPZmZzZXQoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZCgpIHtcbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZCh0aGlzLl9pc0RTVFNoaWZ0ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGMgPSB7fSxcbiAgICAgICAgICAgIG90aGVyO1xuXG4gICAgICAgIGNvcHlDb25maWcoYywgdGhpcyk7XG4gICAgICAgIGMgPSBwcmVwYXJlQ29uZmlnKGMpO1xuXG4gICAgICAgIGlmIChjLl9hKSB7XG4gICAgICAgICAgICBvdGhlciA9IGMuX2lzVVRDID8gY3JlYXRlVVRDKGMuX2EpIDogY3JlYXRlTG9jYWwoYy5fYSk7XG4gICAgICAgICAgICB0aGlzLl9pc0RTVFNoaWZ0ZWQgPVxuICAgICAgICAgICAgICAgIHRoaXMuaXNWYWxpZCgpICYmIGNvbXBhcmVBcnJheXMoYy5fYSwgb3RoZXIudG9BcnJheSgpKSA+IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9pc0RTVFNoaWZ0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNMb2NhbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gIXRoaXMuX2lzVVRDIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVdGNPZmZzZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVdGMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDICYmIHRoaXMuX29mZnNldCA9PT0gMCA6IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEFTUC5ORVQganNvbiBkYXRlIGZvcm1hdCByZWdleFxuICAgIHZhciBhc3BOZXRSZWdleCA9IC9eKC18XFwrKT8oPzooXFxkKilbLiBdKT8oXFxkKyk6KFxcZCspKD86OihcXGQrKShcXC5cXGQqKT8pPyQvLFxuICAgICAgICAvLyBmcm9tIGh0dHA6Ly9kb2NzLmNsb3N1cmUtbGlicmFyeS5nb29nbGVjb2RlLmNvbS9naXQvY2xvc3VyZV9nb29nX2RhdGVfZGF0ZS5qcy5zb3VyY2UuaHRtbFxuICAgICAgICAvLyBzb21ld2hhdCBtb3JlIGluIGxpbmUgd2l0aCA0LjQuMy4yIDIwMDQgc3BlYywgYnV0IGFsbG93cyBkZWNpbWFsIGFueXdoZXJlXG4gICAgICAgIC8vIGFuZCBmdXJ0aGVyIG1vZGlmaWVkIHRvIGFsbG93IGZvciBzdHJpbmdzIGNvbnRhaW5pbmcgYm90aCB3ZWVrIGFuZCBkYXlcbiAgICAgICAgaXNvUmVnZXggPVxuICAgICAgICAgICAgL14oLXxcXCspP1AoPzooWy0rXT9bMC05LC5dKilZKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilXKT8oPzooWy0rXT9bMC05LC5dKilEKT8oPzpUKD86KFstK10/WzAtOSwuXSopSCk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopUyk/KT8kLztcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUR1cmF0aW9uKGlucHV0LCBrZXkpIHtcbiAgICAgICAgdmFyIGR1cmF0aW9uID0gaW5wdXQsXG4gICAgICAgICAgICAvLyBtYXRjaGluZyBhZ2FpbnN0IHJlZ2V4cCBpcyBleHBlbnNpdmUsIGRvIGl0IG9uIGRlbWFuZFxuICAgICAgICAgICAgbWF0Y2ggPSBudWxsLFxuICAgICAgICAgICAgc2lnbixcbiAgICAgICAgICAgIHJldCxcbiAgICAgICAgICAgIGRpZmZSZXM7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBtczogaW5wdXQuX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgICAgICBkOiBpbnB1dC5fZGF5cyxcbiAgICAgICAgICAgICAgICBNOiBpbnB1dC5fbW9udGhzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkgfHwgIWlzTmFOKCtpbnB1dCkpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge307XG4gICAgICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb25ba2V5XSA9ICtpbnB1dDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb24ubWlsbGlzZWNvbmRzID0gK2lucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKChtYXRjaCA9IGFzcE5ldFJlZ2V4LmV4ZWMoaW5wdXQpKSkge1xuICAgICAgICAgICAgc2lnbiA9IG1hdGNoWzFdID09PSAnLScgPyAtMSA6IDE7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICB5OiAwLFxuICAgICAgICAgICAgICAgIGQ6IHRvSW50KG1hdGNoW0RBVEVdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgaDogdG9JbnQobWF0Y2hbSE9VUl0pICogc2lnbixcbiAgICAgICAgICAgICAgICBtOiB0b0ludChtYXRjaFtNSU5VVEVdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgczogdG9JbnQobWF0Y2hbU0VDT05EXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIG1zOiB0b0ludChhYnNSb3VuZChtYXRjaFtNSUxMSVNFQ09ORF0gKiAxMDAwKSkgKiBzaWduLCAvLyB0aGUgbWlsbGlzZWNvbmQgZGVjaW1hbCBwb2ludCBpcyBpbmNsdWRlZCBpbiB0aGUgbWF0Y2hcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoKG1hdGNoID0gaXNvUmVnZXguZXhlYyhpbnB1dCkpKSB7XG4gICAgICAgICAgICBzaWduID0gbWF0Y2hbMV0gPT09ICctJyA/IC0xIDogMTtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge1xuICAgICAgICAgICAgICAgIHk6IHBhcnNlSXNvKG1hdGNoWzJdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBNOiBwYXJzZUlzbyhtYXRjaFszXSwgc2lnbiksXG4gICAgICAgICAgICAgICAgdzogcGFyc2VJc28obWF0Y2hbNF0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIGQ6IHBhcnNlSXNvKG1hdGNoWzVdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBoOiBwYXJzZUlzbyhtYXRjaFs2XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgbTogcGFyc2VJc28obWF0Y2hbN10sIHNpZ24pLFxuICAgICAgICAgICAgICAgIHM6IHBhcnNlSXNvKG1hdGNoWzhdLCBzaWduKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoZHVyYXRpb24gPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gY2hlY2tzIGZvciBudWxsIG9yIHVuZGVmaW5lZFxuICAgICAgICAgICAgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBkdXJhdGlvbiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICgnZnJvbScgaW4gZHVyYXRpb24gfHwgJ3RvJyBpbiBkdXJhdGlvbilcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBkaWZmUmVzID0gbW9tZW50c0RpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgY3JlYXRlTG9jYWwoZHVyYXRpb24uZnJvbSksXG4gICAgICAgICAgICAgICAgY3JlYXRlTG9jYWwoZHVyYXRpb24udG8pXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICAgICAgZHVyYXRpb24ubXMgPSBkaWZmUmVzLm1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgIGR1cmF0aW9uLk0gPSBkaWZmUmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldCA9IG5ldyBEdXJhdGlvbihkdXJhdGlvbik7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpICYmIGhhc093blByb3AoaW5wdXQsICdfbG9jYWxlJykpIHtcbiAgICAgICAgICAgIHJldC5fbG9jYWxlID0gaW5wdXQuX2xvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0R1cmF0aW9uKGlucHV0KSAmJiBoYXNPd25Qcm9wKGlucHV0LCAnX2lzVmFsaWQnKSkge1xuICAgICAgICAgICAgcmV0Ll9pc1ZhbGlkID0gaW5wdXQuX2lzVmFsaWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIGNyZWF0ZUR1cmF0aW9uLmZuID0gRHVyYXRpb24ucHJvdG90eXBlO1xuICAgIGNyZWF0ZUR1cmF0aW9uLmludmFsaWQgPSBjcmVhdGVJbnZhbGlkJDE7XG5cbiAgICBmdW5jdGlvbiBwYXJzZUlzbyhpbnAsIHNpZ24pIHtcbiAgICAgICAgLy8gV2UnZCBub3JtYWxseSB1c2Ugfn5pbnAgZm9yIHRoaXMsIGJ1dCB1bmZvcnR1bmF0ZWx5IGl0IGFsc29cbiAgICAgICAgLy8gY29udmVydHMgZmxvYXRzIHRvIGludHMuXG4gICAgICAgIC8vIGlucCBtYXkgYmUgdW5kZWZpbmVkLCBzbyBjYXJlZnVsIGNhbGxpbmcgcmVwbGFjZSBvbiBpdC5cbiAgICAgICAgdmFyIHJlcyA9IGlucCAmJiBwYXJzZUZsb2F0KGlucC5yZXBsYWNlKCcsJywgJy4nKSk7XG4gICAgICAgIC8vIGFwcGx5IHNpZ24gd2hpbGUgd2UncmUgYXQgaXRcbiAgICAgICAgcmV0dXJuIChpc05hTihyZXMpID8gMCA6IHJlcykgKiBzaWduO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlcyA9IHt9O1xuXG4gICAgICAgIHJlcy5tb250aHMgPVxuICAgICAgICAgICAgb3RoZXIubW9udGgoKSAtIGJhc2UubW9udGgoKSArIChvdGhlci55ZWFyKCkgLSBiYXNlLnllYXIoKSkgKiAxMjtcbiAgICAgICAgaWYgKGJhc2UuY2xvbmUoKS5hZGQocmVzLm1vbnRocywgJ00nKS5pc0FmdGVyKG90aGVyKSkge1xuICAgICAgICAgICAgLS1yZXMubW9udGhzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzLm1pbGxpc2Vjb25kcyA9ICtvdGhlciAtICtiYXNlLmNsb25lKCkuYWRkKHJlcy5tb250aHMsICdNJyk7XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb21lbnRzRGlmZmVyZW5jZShiYXNlLCBvdGhlcikge1xuICAgICAgICB2YXIgcmVzO1xuICAgICAgICBpZiAoIShiYXNlLmlzVmFsaWQoKSAmJiBvdGhlci5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBtaWxsaXNlY29uZHM6IDAsIG1vbnRoczogMCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgb3RoZXIgPSBjbG9uZVdpdGhPZmZzZXQob3RoZXIsIGJhc2UpO1xuICAgICAgICBpZiAoYmFzZS5pc0JlZm9yZShvdGhlcikpIHtcbiAgICAgICAgICAgIHJlcyA9IHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzID0gcG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShvdGhlciwgYmFzZSk7XG4gICAgICAgICAgICByZXMubWlsbGlzZWNvbmRzID0gLXJlcy5taWxsaXNlY29uZHM7XG4gICAgICAgICAgICByZXMubW9udGhzID0gLXJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8vIFRPRE86IHJlbW92ZSAnbmFtZScgYXJnIGFmdGVyIGRlcHJlY2F0aW9uIGlzIHJlbW92ZWRcbiAgICBmdW5jdGlvbiBjcmVhdGVBZGRlcihkaXJlY3Rpb24sIG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWwsIHBlcmlvZCkge1xuICAgICAgICAgICAgdmFyIGR1ciwgdG1wO1xuICAgICAgICAgICAgLy9pbnZlcnQgdGhlIGFyZ3VtZW50cywgYnV0IGNvbXBsYWluIGFib3V0IGl0XG4gICAgICAgICAgICBpZiAocGVyaW9kICE9PSBudWxsICYmICFpc05hTigrcGVyaW9kKSkge1xuICAgICAgICAgICAgICAgIGRlcHJlY2F0ZVNpbXBsZShcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgJ21vbWVudCgpLicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKHBlcmlvZCwgbnVtYmVyKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIG1vbWVudCgpLicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKG51bWJlciwgcGVyaW9kKS4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvYWRkLWludmVydGVkLXBhcmFtLyBmb3IgbW9yZSBpbmZvLidcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRtcCA9IHZhbDtcbiAgICAgICAgICAgICAgICB2YWwgPSBwZXJpb2Q7XG4gICAgICAgICAgICAgICAgcGVyaW9kID0gdG1wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkdXIgPSBjcmVhdGVEdXJhdGlvbih2YWwsIHBlcmlvZCk7XG4gICAgICAgICAgICBhZGRTdWJ0cmFjdCh0aGlzLCBkdXIsIGRpcmVjdGlvbik7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRTdWJ0cmFjdChtb20sIGR1cmF0aW9uLCBpc0FkZGluZywgdXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgIHZhciBtaWxsaXNlY29uZHMgPSBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgZGF5cyA9IGFic1JvdW5kKGR1cmF0aW9uLl9kYXlzKSxcbiAgICAgICAgICAgIG1vbnRocyA9IGFic1JvdW5kKGR1cmF0aW9uLl9tb250aHMpO1xuXG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gTm8gb3BcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHVwZGF0ZU9mZnNldCA9IHVwZGF0ZU9mZnNldCA9PSBudWxsID8gdHJ1ZSA6IHVwZGF0ZU9mZnNldDtcblxuICAgICAgICBpZiAobW9udGhzKSB7XG4gICAgICAgICAgICBzZXRNb250aChtb20sIGdldChtb20sICdNb250aCcpICsgbW9udGhzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXlzKSB7XG4gICAgICAgICAgICBzZXQkMShtb20sICdEYXRlJywgZ2V0KG1vbSwgJ0RhdGUnKSArIGRheXMgKiBpc0FkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbGxpc2Vjb25kcykge1xuICAgICAgICAgICAgbW9tLl9kLnNldFRpbWUobW9tLl9kLnZhbHVlT2YoKSArIG1pbGxpc2Vjb25kcyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQobW9tLCBkYXlzIHx8IG1vbnRocyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYWRkID0gY3JlYXRlQWRkZXIoMSwgJ2FkZCcpLFxuICAgICAgICBzdWJ0cmFjdCA9IGNyZWF0ZUFkZGVyKC0xLCAnc3VidHJhY3QnKTtcblxuICAgIGZ1bmN0aW9uIGlzU3RyaW5nKGlucHV0KSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnIHx8IGlucHV0IGluc3RhbmNlb2YgU3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHR5cGUgTW9tZW50SW5wdXQgPSBNb21lbnQgfCBEYXRlIHwgc3RyaW5nIHwgbnVtYmVyIHwgKG51bWJlciB8IHN0cmluZylbXSB8IE1vbWVudElucHV0T2JqZWN0IHwgdm9pZDsgLy8gbnVsbCB8IHVuZGVmaW5lZFxuICAgIGZ1bmN0aW9uIGlzTW9tZW50SW5wdXQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlzTW9tZW50KGlucHV0KSB8fFxuICAgICAgICAgICAgaXNEYXRlKGlucHV0KSB8fFxuICAgICAgICAgICAgaXNTdHJpbmcoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc051bWJlcihpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzTnVtYmVyT3JTdHJpbmdBcnJheShpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzTW9tZW50SW5wdXRPYmplY3QoaW5wdXQpIHx8XG4gICAgICAgICAgICBpbnB1dCA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgaW5wdXQgPT09IHVuZGVmaW5lZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTW9tZW50SW5wdXRPYmplY3QoaW5wdXQpIHtcbiAgICAgICAgdmFyIG9iamVjdFRlc3QgPSBpc09iamVjdChpbnB1dCkgJiYgIWlzT2JqZWN0RW1wdHkoaW5wdXQpLFxuICAgICAgICAgICAgcHJvcGVydHlUZXN0ID0gZmFsc2UsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgICAgICAgICAgICd5ZWFycycsXG4gICAgICAgICAgICAgICAgJ3llYXInLFxuICAgICAgICAgICAgICAgICd5JyxcbiAgICAgICAgICAgICAgICAnbW9udGhzJyxcbiAgICAgICAgICAgICAgICAnbW9udGgnLFxuICAgICAgICAgICAgICAgICdNJyxcbiAgICAgICAgICAgICAgICAnZGF5cycsXG4gICAgICAgICAgICAgICAgJ2RheScsXG4gICAgICAgICAgICAgICAgJ2QnLFxuICAgICAgICAgICAgICAgICdkYXRlcycsXG4gICAgICAgICAgICAgICAgJ2RhdGUnLFxuICAgICAgICAgICAgICAgICdEJyxcbiAgICAgICAgICAgICAgICAnaG91cnMnLFxuICAgICAgICAgICAgICAgICdob3VyJyxcbiAgICAgICAgICAgICAgICAnaCcsXG4gICAgICAgICAgICAgICAgJ21pbnV0ZXMnLFxuICAgICAgICAgICAgICAgICdtaW51dGUnLFxuICAgICAgICAgICAgICAgICdtJyxcbiAgICAgICAgICAgICAgICAnc2Vjb25kcycsXG4gICAgICAgICAgICAgICAgJ3NlY29uZCcsXG4gICAgICAgICAgICAgICAgJ3MnLFxuICAgICAgICAgICAgICAgICdtaWxsaXNlY29uZHMnLFxuICAgICAgICAgICAgICAgICdtaWxsaXNlY29uZCcsXG4gICAgICAgICAgICAgICAgJ21zJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICBwcm9wZXJ0eUxlbiA9IHByb3BlcnRpZXMubGVuZ3RoO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcm9wZXJ0eUxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICBwcm9wZXJ0eVRlc3QgPSBwcm9wZXJ0eVRlc3QgfHwgaGFzT3duUHJvcChpbnB1dCwgcHJvcGVydHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9iamVjdFRlc3QgJiYgcHJvcGVydHlUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTnVtYmVyT3JTdHJpbmdBcnJheShpbnB1dCkge1xuICAgICAgICB2YXIgYXJyYXlUZXN0ID0gaXNBcnJheShpbnB1dCksXG4gICAgICAgICAgICBkYXRhVHlwZVRlc3QgPSBmYWxzZTtcbiAgICAgICAgaWYgKGFycmF5VGVzdCkge1xuICAgICAgICAgICAgZGF0YVR5cGVUZXN0ID1cbiAgICAgICAgICAgICAgICBpbnB1dC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFpc051bWJlcihpdGVtKSAmJiBpc1N0cmluZyhpbnB1dCk7XG4gICAgICAgICAgICAgICAgfSkubGVuZ3RoID09PSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheVRlc3QgJiYgZGF0YVR5cGVUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQ2FsZW5kYXJTcGVjKGlucHV0KSB7XG4gICAgICAgIHZhciBvYmplY3RUZXN0ID0gaXNPYmplY3QoaW5wdXQpICYmICFpc09iamVjdEVtcHR5KGlucHV0KSxcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICAgICAgICAnc2FtZURheScsXG4gICAgICAgICAgICAgICAgJ25leHREYXknLFxuICAgICAgICAgICAgICAgICdsYXN0RGF5JyxcbiAgICAgICAgICAgICAgICAnbmV4dFdlZWsnLFxuICAgICAgICAgICAgICAgICdsYXN0V2VlaycsXG4gICAgICAgICAgICAgICAgJ3NhbWVFbHNlJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcHJvcGVydHk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IHByb3BlcnR5VGVzdCB8fCBoYXNPd25Qcm9wKGlucHV0LCBwcm9wZXJ0eSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2JqZWN0VGVzdCAmJiBwcm9wZXJ0eVRlc3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Q2FsZW5kYXJGb3JtYXQobXlNb21lbnQsIG5vdykge1xuICAgICAgICB2YXIgZGlmZiA9IG15TW9tZW50LmRpZmYobm93LCAnZGF5cycsIHRydWUpO1xuICAgICAgICByZXR1cm4gZGlmZiA8IC02XG4gICAgICAgICAgICA/ICdzYW1lRWxzZSdcbiAgICAgICAgICAgIDogZGlmZiA8IC0xXG4gICAgICAgICAgICAgID8gJ2xhc3RXZWVrJ1xuICAgICAgICAgICAgICA6IGRpZmYgPCAwXG4gICAgICAgICAgICAgICAgPyAnbGFzdERheSdcbiAgICAgICAgICAgICAgICA6IGRpZmYgPCAxXG4gICAgICAgICAgICAgICAgICA/ICdzYW1lRGF5J1xuICAgICAgICAgICAgICAgICAgOiBkaWZmIDwgMlxuICAgICAgICAgICAgICAgICAgICA/ICduZXh0RGF5J1xuICAgICAgICAgICAgICAgICAgICA6IGRpZmYgPCA3XG4gICAgICAgICAgICAgICAgICAgICAgPyAnbmV4dFdlZWsnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnc2FtZUVsc2UnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGVuZGFyJDEodGltZSwgZm9ybWF0cykge1xuICAgICAgICAvLyBTdXBwb3J0IGZvciBzaW5nbGUgcGFyYW1ldGVyLCBmb3JtYXRzIG9ubHkgb3ZlcmxvYWQgdG8gdGhlIGNhbGVuZGFyIGZ1bmN0aW9uXG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBpZiAoIWFyZ3VtZW50c1swXSkge1xuICAgICAgICAgICAgICAgIHRpbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNNb21lbnRJbnB1dChhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgdGltZSA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICBmb3JtYXRzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0NhbGVuZGFyU3BlYyhhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICB0aW1lID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFdlIHdhbnQgdG8gY29tcGFyZSB0aGUgc3RhcnQgb2YgdG9kYXksIHZzIHRoaXMuXG4gICAgICAgIC8vIEdldHRpbmcgc3RhcnQtb2YtdG9kYXkgZGVwZW5kcyBvbiB3aGV0aGVyIHdlJ3JlIGxvY2FsL3V0Yy9vZmZzZXQgb3Igbm90LlxuICAgICAgICB2YXIgbm93ID0gdGltZSB8fCBjcmVhdGVMb2NhbCgpLFxuICAgICAgICAgICAgc29kID0gY2xvbmVXaXRoT2Zmc2V0KG5vdywgdGhpcykuc3RhcnRPZignZGF5JyksXG4gICAgICAgICAgICBmb3JtYXQgPSBob29rcy5jYWxlbmRhckZvcm1hdCh0aGlzLCBzb2QpIHx8ICdzYW1lRWxzZScsXG4gICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgIGZvcm1hdHMgJiZcbiAgICAgICAgICAgICAgICAoaXNGdW5jdGlvbihmb3JtYXRzW2Zvcm1hdF0pXG4gICAgICAgICAgICAgICAgICAgID8gZm9ybWF0c1tmb3JtYXRdLmNhbGwodGhpcywgbm93KVxuICAgICAgICAgICAgICAgICAgICA6IGZvcm1hdHNbZm9ybWF0XSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KFxuICAgICAgICAgICAgb3V0cHV0IHx8IHRoaXMubG9jYWxlRGF0YSgpLmNhbGVuZGFyKGZvcm1hdCwgdGhpcywgY3JlYXRlTG9jYWwobm93KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNb21lbnQodGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBZnRlcihpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPiBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbElucHV0LnZhbHVlT2YoKSA8IHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0JlZm9yZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPCBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkuZW5kT2YodW5pdHMpLnZhbHVlT2YoKSA8IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNCZXR3ZWVuKGZyb20sIHRvLCB1bml0cywgaW5jbHVzaXZpdHkpIHtcbiAgICAgICAgdmFyIGxvY2FsRnJvbSA9IGlzTW9tZW50KGZyb20pID8gZnJvbSA6IGNyZWF0ZUxvY2FsKGZyb20pLFxuICAgICAgICAgICAgbG9jYWxUbyA9IGlzTW9tZW50KHRvKSA/IHRvIDogY3JlYXRlTG9jYWwodG8pO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbEZyb20uaXNWYWxpZCgpICYmIGxvY2FsVG8uaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGluY2x1c2l2aXR5ID0gaW5jbHVzaXZpdHkgfHwgJygpJztcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChpbmNsdXNpdml0eVswXSA9PT0gJygnXG4gICAgICAgICAgICAgICAgPyB0aGlzLmlzQWZ0ZXIobG9jYWxGcm9tLCB1bml0cylcbiAgICAgICAgICAgICAgICA6ICF0aGlzLmlzQmVmb3JlKGxvY2FsRnJvbSwgdW5pdHMpKSAmJlxuICAgICAgICAgICAgKGluY2x1c2l2aXR5WzFdID09PSAnKSdcbiAgICAgICAgICAgICAgICA/IHRoaXMuaXNCZWZvcmUobG9jYWxUbywgdW5pdHMpXG4gICAgICAgICAgICAgICAgOiAhdGhpcy5pc0FmdGVyKGxvY2FsVG8sIHVuaXRzKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWUoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHZhciBsb2NhbElucHV0ID0gaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBjcmVhdGVMb2NhbChpbnB1dCksXG4gICAgICAgICAgICBpbnB1dE1zO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbElucHV0LmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB8fCAnbWlsbGlzZWNvbmQnO1xuICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA9PT0gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnB1dE1zID0gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCkgPD0gaW5wdXRNcyAmJlxuICAgICAgICAgICAgICAgIGlucHV0TXMgPD0gdGhpcy5jbG9uZSgpLmVuZE9mKHVuaXRzKS52YWx1ZU9mKClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckFmdGVyKGlucHV0LCB1bml0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NhbWUoaW5wdXQsIHVuaXRzKSB8fCB0aGlzLmlzQWZ0ZXIoaW5wdXQsIHVuaXRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckJlZm9yZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTYW1lKGlucHV0LCB1bml0cykgfHwgdGhpcy5pc0JlZm9yZShpbnB1dCwgdW5pdHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRpZmYoaW5wdXQsIHVuaXRzLCBhc0Zsb2F0KSB7XG4gICAgICAgIHZhciB0aGF0LCB6b25lRGVsdGEsIG91dHB1dDtcblxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhhdCA9IGNsb25lV2l0aE9mZnNldChpbnB1dCwgdGhpcyk7XG5cbiAgICAgICAgaWYgKCF0aGF0LmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHpvbmVEZWx0YSA9ICh0aGF0LnV0Y09mZnNldCgpIC0gdGhpcy51dGNPZmZzZXQoKSkgKiA2ZTQ7XG5cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG5cbiAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMTI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDFlMztcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMFxuICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gNmU0O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjBcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyAzNmU1O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjAgKiA2MFxuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQgLSB6b25lRGVsdGEpIC8gODY0ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQsIG5lZ2F0ZSBkc3RcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCAtIHpvbmVEZWx0YSkgLyA2MDQ4ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQgKiA3LCBuZWdhdGUgZHN0XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IHRoaXMgLSB0aGF0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzRmxvYXQgPyBvdXRwdXQgOiBhYnNGbG9vcihvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoRGlmZihhLCBiKSB7XG4gICAgICAgIGlmIChhLmRhdGUoKSA8IGIuZGF0ZSgpKSB7XG4gICAgICAgICAgICAvLyBlbmQtb2YtbW9udGggY2FsY3VsYXRpb25zIHdvcmsgY29ycmVjdCB3aGVuIHRoZSBzdGFydCBtb250aCBoYXMgbW9yZVxuICAgICAgICAgICAgLy8gZGF5cyB0aGFuIHRoZSBlbmQgbW9udGguXG4gICAgICAgICAgICByZXR1cm4gLW1vbnRoRGlmZihiLCBhKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBkaWZmZXJlbmNlIGluIG1vbnRoc1xuICAgICAgICB2YXIgd2hvbGVNb250aERpZmYgPSAoYi55ZWFyKCkgLSBhLnllYXIoKSkgKiAxMiArIChiLm1vbnRoKCkgLSBhLm1vbnRoKCkpLFxuICAgICAgICAgICAgLy8gYiBpcyBpbiAoYW5jaG9yIC0gMSBtb250aCwgYW5jaG9yICsgMSBtb250aClcbiAgICAgICAgICAgIGFuY2hvciA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYsICdtb250aHMnKSxcbiAgICAgICAgICAgIGFuY2hvcjIsXG4gICAgICAgICAgICBhZGp1c3Q7XG5cbiAgICAgICAgaWYgKGIgLSBhbmNob3IgPCAwKSB7XG4gICAgICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiAtIDEsICdtb250aHMnKTtcbiAgICAgICAgICAgIC8vIGxpbmVhciBhY3Jvc3MgdGhlIG1vbnRoXG4gICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yIC0gYW5jaG9yMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiArIDEsICdtb250aHMnKTtcbiAgICAgICAgICAgIC8vIGxpbmVhciBhY3Jvc3MgdGhlIG1vbnRoXG4gICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yMiAtIGFuY2hvcik7XG4gICAgICAgIH1cblxuICAgICAgICAvL2NoZWNrIGZvciBuZWdhdGl2ZSB6ZXJvLCByZXR1cm4gemVybyBpZiBuZWdhdGl2ZSB6ZXJvXG4gICAgICAgIHJldHVybiAtKHdob2xlTW9udGhEaWZmICsgYWRqdXN0KSB8fCAwO1xuICAgIH1cblxuICAgIGhvb2tzLmRlZmF1bHRGb3JtYXQgPSAnWVlZWS1NTS1ERFRISDptbTpzc1onO1xuICAgIGhvb2tzLmRlZmF1bHRGb3JtYXRVdGMgPSAnWVlZWS1NTS1ERFRISDptbTpzc1taXSc7XG5cbiAgICBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5sb2NhbGUoJ2VuJykuZm9ybWF0KCdkZGQgTU1NIEREIFlZWVkgSEg6bW06c3MgW0dNVF1aWicpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nKGtlZXBPZmZzZXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHV0YyA9IGtlZXBPZmZzZXQgIT09IHRydWUsXG4gICAgICAgICAgICBtID0gdXRjID8gdGhpcy5jbG9uZSgpLnV0YygpIDogdGhpcztcbiAgICAgICAgaWYgKG0ueWVhcigpIDwgMCB8fCBtLnllYXIoKSA+IDk5OTkpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRNb21lbnQoXG4gICAgICAgICAgICAgICAgbSxcbiAgICAgICAgICAgICAgICB1dGNcbiAgICAgICAgICAgICAgICAgICAgPyAnWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdJ1xuICAgICAgICAgICAgICAgICAgICA6ICdZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNGdW5jdGlvbihEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZykpIHtcbiAgICAgICAgICAgIC8vIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiBpcyB+NTB4IGZhc3RlciwgdXNlIGl0IHdoZW4gd2UgY2FuXG4gICAgICAgICAgICBpZiAodXRjKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9EYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpICsgdGhpcy51dGNPZmZzZXQoKSAqIDYwICogMTAwMClcbiAgICAgICAgICAgICAgICAgICAgLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1onLCBmb3JtYXRNb21lbnQobSwgJ1onKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1hdE1vbWVudChcbiAgICAgICAgICAgIG0sXG4gICAgICAgICAgICB1dGMgPyAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXScgOiAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1onXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgaHVtYW4gcmVhZGFibGUgcmVwcmVzZW50YXRpb24gb2YgYSBtb21lbnQgdGhhdCBjYW5cbiAgICAgKiBhbHNvIGJlIGV2YWx1YXRlZCB0byBnZXQgYSBuZXcgbW9tZW50IHdoaWNoIGlzIHRoZSBzYW1lXG4gICAgICpcbiAgICAgKiBAbGluayBodHRwczovL25vZGVqcy5vcmcvZGlzdC9sYXRlc3QvZG9jcy9hcGkvdXRpbC5odG1sI3V0aWxfY3VzdG9tX2luc3BlY3RfZnVuY3Rpb25fb25fb2JqZWN0c1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluc3BlY3QoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAnbW9tZW50LmludmFsaWQoLyogJyArIHRoaXMuX2kgKyAnICovKSc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGZ1bmMgPSAnbW9tZW50JyxcbiAgICAgICAgICAgIHpvbmUgPSAnJyxcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgIHllYXIsXG4gICAgICAgICAgICBkYXRldGltZSxcbiAgICAgICAgICAgIHN1ZmZpeDtcbiAgICAgICAgaWYgKCF0aGlzLmlzTG9jYWwoKSkge1xuICAgICAgICAgICAgZnVuYyA9IHRoaXMudXRjT2Zmc2V0KCkgPT09IDAgPyAnbW9tZW50LnV0YycgOiAnbW9tZW50LnBhcnNlWm9uZSc7XG4gICAgICAgICAgICB6b25lID0gJ1onO1xuICAgICAgICB9XG4gICAgICAgIHByZWZpeCA9ICdbJyArIGZ1bmMgKyAnKFwiXSc7XG4gICAgICAgIHllYXIgPSAwIDw9IHRoaXMueWVhcigpICYmIHRoaXMueWVhcigpIDw9IDk5OTkgPyAnWVlZWScgOiAnWVlZWVlZJztcbiAgICAgICAgZGF0ZXRpbWUgPSAnLU1NLUREW1RdSEg6bW06c3MuU1NTJztcbiAgICAgICAgc3VmZml4ID0gem9uZSArICdbXCIpXSc7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KHByZWZpeCArIHllYXIgKyBkYXRldGltZSArIHN1ZmZpeCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZm9ybWF0KGlucHV0U3RyaW5nKSB7XG4gICAgICAgIGlmICghaW5wdXRTdHJpbmcpIHtcbiAgICAgICAgICAgIGlucHV0U3RyaW5nID0gdGhpcy5pc1V0YygpXG4gICAgICAgICAgICAgICAgPyBob29rcy5kZWZhdWx0Rm9ybWF0VXRjXG4gICAgICAgICAgICAgICAgOiBob29rcy5kZWZhdWx0Rm9ybWF0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBvdXRwdXQgPSBmb3JtYXRNb21lbnQodGhpcywgaW5wdXRTdHJpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkucG9zdGZvcm1hdChvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb20odGltZSwgd2l0aG91dFN1ZmZpeCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWQoKSAmJlxuICAgICAgICAgICAgKChpc01vbWVudCh0aW1lKSAmJiB0aW1lLmlzVmFsaWQoKSkgfHwgY3JlYXRlTG9jYWwodGltZSkuaXNWYWxpZCgpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih7IHRvOiB0aGlzLCBmcm9tOiB0aW1lIH0pXG4gICAgICAgICAgICAgICAgLmxvY2FsZSh0aGlzLmxvY2FsZSgpKVxuICAgICAgICAgICAgICAgIC5odW1hbml6ZSghd2l0aG91dFN1ZmZpeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb21Ob3cod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvKHRpbWUsIHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkKCkgJiZcbiAgICAgICAgICAgICgoaXNNb21lbnQodGltZSkgJiYgdGltZS5pc1ZhbGlkKCkpIHx8IGNyZWF0ZUxvY2FsKHRpbWUpLmlzVmFsaWQoKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oeyBmcm9tOiB0aGlzLCB0bzogdGltZSB9KVxuICAgICAgICAgICAgICAgIC5sb2NhbGUodGhpcy5sb2NhbGUoKSlcbiAgICAgICAgICAgICAgICAuaHVtYW5pemUoIXdpdGhvdXRTdWZmaXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b05vdyh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIC8vIElmIHBhc3NlZCBhIGxvY2FsZSBrZXksIGl0IHdpbGwgc2V0IHRoZSBsb2NhbGUgZm9yIHRoaXNcbiAgICAvLyBpbnN0YW5jZS4gIE90aGVyd2lzZSwgaXQgd2lsbCByZXR1cm4gdGhlIGxvY2FsZSBjb25maWd1cmF0aW9uXG4gICAgLy8gdmFyaWFibGVzIGZvciB0aGlzIGluc3RhbmNlLlxuICAgIGZ1bmN0aW9uIGxvY2FsZShrZXkpIHtcbiAgICAgICAgdmFyIG5ld0xvY2FsZURhdGE7XG5cbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlLl9hYmJyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3TG9jYWxlRGF0YSA9IGdldExvY2FsZShrZXkpO1xuICAgICAgICAgICAgaWYgKG5ld0xvY2FsZURhdGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvY2FsZSA9IG5ld0xvY2FsZURhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsYW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkubGFuZygpIGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQsIHVzZSBtb21lbnQoKS5sb2NhbGVEYXRhKCkgdG8gZ2V0IHRoZSBsYW5ndWFnZSBjb25maWd1cmF0aW9uLiBVc2UgbW9tZW50KCkubG9jYWxlKCkgdG8gY2hhbmdlIGxhbmd1YWdlcy4nLFxuICAgICAgICBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZURhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGU7XG4gICAgfVxuXG4gICAgdmFyIE1TX1BFUl9TRUNPTkQgPSAxMDAwLFxuICAgICAgICBNU19QRVJfTUlOVVRFID0gNjAgKiBNU19QRVJfU0VDT05ELFxuICAgICAgICBNU19QRVJfSE9VUiA9IDYwICogTVNfUEVSX01JTlVURSxcbiAgICAgICAgTVNfUEVSXzQwMF9ZRUFSUyA9ICgzNjUgKiA0MDAgKyA5NykgKiAyNCAqIE1TX1BFUl9IT1VSO1xuXG4gICAgLy8gYWN0dWFsIG1vZHVsbyAtIGhhbmRsZXMgbmVnYXRpdmUgbnVtYmVycyAoZm9yIGRhdGVzIGJlZm9yZSAxOTcwKTpcbiAgICBmdW5jdGlvbiBtb2QkMShkaXZpZGVuZCwgZGl2aXNvcikge1xuICAgICAgICByZXR1cm4gKChkaXZpZGVuZCAlIGRpdmlzb3IpICsgZGl2aXNvcikgJSBkaXZpc29yO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsU3RhcnRPZkRhdGUoeSwgbSwgZCkge1xuICAgICAgICAvLyB0aGUgZGF0ZSBjb25zdHJ1Y3RvciByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHkgKyA0MDAsIG0sIGQpIC0gTVNfUEVSXzQwMF9ZRUFSUztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh5LCBtLCBkKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1dGNTdGFydE9mRGF0ZSh5LCBtLCBkKSB7XG4gICAgICAgIC8vIERhdGUuVVRDIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICByZXR1cm4gRGF0ZS5VVEMoeSArIDQwMCwgbSwgZCkgLSBNU19QRVJfNDAwX1lFQVJTO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIERhdGUuVVRDKHksIG0sIGQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnRPZih1bml0cykge1xuICAgICAgICB2YXIgdGltZSwgc3RhcnRPZkRhdGU7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAodW5pdHMgPT09IHVuZGVmaW5lZCB8fCB1bml0cyA9PT0gJ21pbGxpc2Vjb25kJyB8fCAhdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIDAsIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpIC0gKHRoaXMubW9udGgoKSAlIDMpLFxuICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gdGhpcy53ZWVrZGF5KClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaXNvV2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtICh0aGlzLmlzb1dlZWtkYXkoKSAtIDEpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgdGhpcy5kYXRlKCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgLT0gbW9kJDEoXG4gICAgICAgICAgICAgICAgICAgIHRpbWUgKyAodGhpcy5faXNVVEMgPyAwIDogdGhpcy51dGNPZmZzZXQoKSAqIE1TX1BFUl9NSU5VVEUpLFxuICAgICAgICAgICAgICAgICAgICBNU19QRVJfSE9VUlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lIC09IG1vZCQxKHRpbWUsIE1TX1BFUl9NSU5VVEUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSAtPSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Quc2V0VGltZSh0aW1lKTtcbiAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbmRPZih1bml0cykge1xuICAgICAgICB2YXIgdGltZSwgc3RhcnRPZkRhdGU7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAodW5pdHMgPT09IHVuZGVmaW5lZCB8fCB1bml0cyA9PT0gJ21pbGxpc2Vjb25kJyB8fCAhdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCkgKyAxLCAwLCAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICB0aW1lID1cbiAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSAtICh0aGlzLm1vbnRoKCkgJSAzKSArIDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpICsgMSwgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtIHRoaXMud2Vla2RheSgpICsgN1xuICAgICAgICAgICAgICAgICAgICApIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2lzb1dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPVxuICAgICAgICAgICAgICAgICAgICBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSAodGhpcy5pc29XZWVrZGF5KCkgLSAxKSArIDdcbiAgICAgICAgICAgICAgICAgICAgKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIHRoaXMuZGF0ZSgpICsgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgKz1cbiAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVIgLVxuICAgICAgICAgICAgICAgICAgICBtb2QkMShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUgKyAodGhpcy5faXNVVEMgPyAwIDogdGhpcy51dGNPZmZzZXQoKSAqIE1TX1BFUl9NSU5VVEUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVJcbiAgICAgICAgICAgICAgICAgICAgKSAtXG4gICAgICAgICAgICAgICAgICAgIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9NSU5VVEUgLSBtb2QkMSh0aW1lLCBNU19QRVJfTUlOVVRFKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9TRUNPTkQgLSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kLnNldFRpbWUodGltZSk7XG4gICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsdWVPZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2QudmFsdWVPZigpIC0gKHRoaXMuX29mZnNldCB8fCAwKSAqIDYwMDAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVuaXgoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigpIC8gMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9EYXRlKCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvQXJyYXkoKSB7XG4gICAgICAgIHZhciBtID0gdGhpcztcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG0ueWVhcigpLFxuICAgICAgICAgICAgbS5tb250aCgpLFxuICAgICAgICAgICAgbS5kYXRlKCksXG4gICAgICAgICAgICBtLmhvdXIoKSxcbiAgICAgICAgICAgIG0ubWludXRlKCksXG4gICAgICAgICAgICBtLnNlY29uZCgpLFxuICAgICAgICAgICAgbS5taWxsaXNlY29uZCgpLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvT2JqZWN0KCkge1xuICAgICAgICB2YXIgbSA9IHRoaXM7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyczogbS55ZWFyKCksXG4gICAgICAgICAgICBtb250aHM6IG0ubW9udGgoKSxcbiAgICAgICAgICAgIGRhdGU6IG0uZGF0ZSgpLFxuICAgICAgICAgICAgaG91cnM6IG0uaG91cnMoKSxcbiAgICAgICAgICAgIG1pbnV0ZXM6IG0ubWludXRlcygpLFxuICAgICAgICAgICAgc2Vjb25kczogbS5zZWNvbmRzKCksXG4gICAgICAgICAgICBtaWxsaXNlY29uZHM6IG0ubWlsbGlzZWNvbmRzKCksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAvLyBuZXcgRGF0ZShOYU4pLnRvSlNPTigpID09PSBudWxsXG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMudG9JU09TdHJpbmcoKSA6IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQyKCkge1xuICAgICAgICByZXR1cm4gaXNWYWxpZCh0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzaW5nRmxhZ3MoKSB7XG4gICAgICAgIHJldHVybiBleHRlbmQoe30sIGdldFBhcnNpbmdGbGFncyh0aGlzKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW52YWxpZEF0KCkge1xuICAgICAgICByZXR1cm4gZ2V0UGFyc2luZ0ZsYWdzKHRoaXMpLm92ZXJmbG93O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0aW9uRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlucHV0OiB0aGlzLl9pLFxuICAgICAgICAgICAgZm9ybWF0OiB0aGlzLl9mLFxuICAgICAgICAgICAgbG9jYWxlOiB0aGlzLl9sb2NhbGUsXG4gICAgICAgICAgICBpc1VUQzogdGhpcy5faXNVVEMsXG4gICAgICAgICAgICBzdHJpY3Q6IHRoaXMuX3N0cmljdCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTicsIDAsIDAsICdlcmFBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OTicsIDAsIDAsICdlcmFOYW1lJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OTk5OJywgMCwgMCwgJ2VyYU5hcnJvdycpO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3knLCAxXSwgJ3lvJywgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXknLCAyXSwgMCwgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXl5JywgM10sIDAsICdlcmFZZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3l5eXknLCA0XSwgMCwgJ2VyYVllYXInKTtcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ04nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OJywgbWF0Y2hFcmFBYmJyKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTk4nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTk4nLCBtYXRjaEVyYU5hbWUpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTk5OJywgbWF0Y2hFcmFOYXJyb3cpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihcbiAgICAgICAgWydOJywgJ05OJywgJ05OTicsICdOTk5OJywgJ05OTk5OJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgICAgIHZhciBlcmEgPSBjb25maWcuX2xvY2FsZS5lcmFzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgICAgICBpZiAoZXJhKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZXJhID0gZXJhO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkRXJhID0gaW5wdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgYWRkUmVnZXhUb2tlbigneScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3l5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneXl5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneXl5eScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3lvJywgbWF0Y2hFcmFZZWFyT3JkaW5hbCk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsneScsICd5eScsICd5eXknLCAneXl5eSddLCBZRUFSKTtcbiAgICBhZGRQYXJzZVRva2VuKFsneW8nXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgbWF0Y2g7XG4gICAgICAgIGlmIChjb25maWcuX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCkge1xuICAgICAgICAgICAgbWF0Y2ggPSBpbnB1dC5tYXRjaChjb25maWcuX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLl9sb2NhbGUuZXJhWWVhck9yZGluYWxQYXJzZSkge1xuICAgICAgICAgICAgYXJyYXlbWUVBUl0gPSBjb25maWcuX2xvY2FsZS5lcmFZZWFyT3JkaW5hbFBhcnNlKGlucHV0LCBtYXRjaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcnJheVtZRUFSXSA9IHBhcnNlSW50KGlucHV0LCAxMCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUVyYXMobSwgZm9ybWF0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5fZXJhcyB8fCBnZXRMb2NhbGUoJ2VuJykuX2VyYXM7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IGhvb2tzKGVyYXNbaV0uc2luY2UpLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLnNpbmNlID0gZGF0ZS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS51bnRpbCA9ICtJbmZpbml0eTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgICAgICAgICBkYXRlID0gaG9va3MoZXJhc1tpXS51bnRpbCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLnVudGlsID0gZGF0ZS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcmFzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZUVyYXNQYXJzZShlcmFOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5lcmFzKCksXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgYWJicixcbiAgICAgICAgICAgIG5hcnJvdztcbiAgICAgICAgZXJhTmFtZSA9IGVyYU5hbWUudG9VcHBlckNhc2UoKTtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIG5hbWUgPSBlcmFzW2ldLm5hbWUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIGFiYnIgPSBlcmFzW2ldLmFiYnIudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIG5hcnJvdyA9IGVyYXNbaV0ubmFycm93LnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdOJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk4nOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTk4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFiYnIgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OTk4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OTk5OJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYXJyb3cgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoW25hbWUsIGFiYnIsIG5hcnJvd10uaW5kZXhPZihlcmFOYW1lKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVFcmFzQ29udmVydFllYXIoZXJhLCB5ZWFyKSB7XG4gICAgICAgIHZhciBkaXIgPSBlcmEuc2luY2UgPD0gZXJhLnVudGlsID8gKzEgOiAtMTtcbiAgICAgICAgaWYgKHllYXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGhvb2tzKGVyYS5zaW5jZSkueWVhcigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGhvb2tzKGVyYS5zaW5jZSkueWVhcigpICsgKHllYXIgLSBlcmEub2Zmc2V0KSAqIGRpcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYU5hbWUoKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKGVyYXNbaV0uc2luY2UgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0ubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RXJhTmFycm93KCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hcnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hcnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFBYmJyKCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLmFiYnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5hYmJyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYVllYXIoKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGRpcixcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgZGlyID0gZXJhc1tpXS5zaW5jZSA8PSBlcmFzW2ldLnVudGlsID8gKzEgOiAtMTtcblxuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkgfHxcbiAgICAgICAgICAgICAgICAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAodGhpcy55ZWFyKCkgLSBob29rcyhlcmFzW2ldLnNpbmNlKS55ZWFyKCkpICogZGlyICtcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS5vZmZzZXRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMueWVhcigpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVyYXNOYW1lUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfZXJhc05hbWVSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID8gdGhpcy5fZXJhc05hbWVSZWdleCA6IHRoaXMuX2VyYXNSZWdleDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlcmFzQWJiclJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNBYmJyUmVnZXgnKSkge1xuICAgICAgICAgICAgY29tcHV0ZUVyYXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1N0cmljdCA/IHRoaXMuX2VyYXNBYmJyUmVnZXggOiB0aGlzLl9lcmFzUmVnZXg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXJhc05hcnJvd1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNOYXJyb3dSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID8gdGhpcy5fZXJhc05hcnJvd1JlZ2V4IDogdGhpcy5fZXJhc1JlZ2V4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoRXJhQWJicihpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc0FiYnJSZWdleChpc1N0cmljdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFOYW1lKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5lcmFzTmFtZVJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYU5hcnJvdyhpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc05hcnJvd1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYVllYXJPcmRpbmFsKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCB8fCBtYXRjaFVuc2lnbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVFcmFzUGFyc2UoKSB7XG4gICAgICAgIHZhciBhYmJyUGllY2VzID0gW10sXG4gICAgICAgICAgICBuYW1lUGllY2VzID0gW10sXG4gICAgICAgICAgICBuYXJyb3dQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGVyYXNOYW1lLFxuICAgICAgICAgICAgZXJhc0FiYnIsXG4gICAgICAgICAgICBlcmFzTmFycm93LFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMuZXJhcygpO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgZXJhc05hbWUgPSByZWdleEVzY2FwZShlcmFzW2ldLm5hbWUpO1xuICAgICAgICAgICAgZXJhc0FiYnIgPSByZWdleEVzY2FwZShlcmFzW2ldLmFiYnIpO1xuICAgICAgICAgICAgZXJhc05hcnJvdyA9IHJlZ2V4RXNjYXBlKGVyYXNbaV0ubmFycm93KTtcblxuICAgICAgICAgICAgbmFtZVBpZWNlcy5wdXNoKGVyYXNOYW1lKTtcbiAgICAgICAgICAgIGFiYnJQaWVjZXMucHVzaChlcmFzQWJicik7XG4gICAgICAgICAgICBuYXJyb3dQaWVjZXMucHVzaChlcmFzTmFycm93KTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goZXJhc05hbWUpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChlcmFzQWJicik7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGVyYXNOYXJyb3cpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZXJhc1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9lcmFzTmFtZVJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbmFtZVBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX2VyYXNBYmJyUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBhYmJyUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fZXJhc05hcnJvd1JlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBuYXJyb3dQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydnZycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndlZWtZZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ0dHJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNvV2Vla1llYXIoKSAlIDEwMDtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4odG9rZW4sIGdldHRlcikge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbigwLCBbdG9rZW4sIHRva2VuLmxlbmd0aF0sIDAsIGdldHRlcik7XG4gICAgfVxuXG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignZ2dnZycsICd3ZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ2dnZ2dnJywgJ3dlZWtZZWFyJyk7XG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignR0dHRycsICdpc29XZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ0dHR0dHJywgJ2lzb1dlZWtZZWFyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdHJywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2cnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignR0cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignZ2cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignR0dHRycsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdnZ2dnJywgbWF0Y2gxdG80LCBtYXRjaDQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHR0dHJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnZ2dnJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oXG4gICAgICAgIFsnZ2dnZycsICdnZ2dnZycsICdHR0dHJywgJ0dHR0dHJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMildID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZ2cnLCAnR0cnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW5dID0gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2Vla1llYXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICB0aGlzLndlZWsoKSxcbiAgICAgICAgICAgIHRoaXMud2Vla2RheSgpICsgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG95XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPV2Vla1llYXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICB0aGlzLmlzb1dlZWsoKSxcbiAgICAgICAgICAgIHRoaXMuaXNvV2Vla2RheSgpLFxuICAgICAgICAgICAgMSxcbiAgICAgICAgICAgIDRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJU09XZWVrc0luWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCAxLCA0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJU09XZWVrc0luSVNPV2Vla1llYXIoKSB7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLmlzb1dlZWtZZWFyKCksIDEsIDQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFdlZWtzSW5ZZWFyKCkge1xuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCB3ZWVrSW5mby5kb3csIHdlZWtJbmZvLmRveSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0V2Vla3NJbldlZWtZZWFyKCkge1xuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMud2Vla1llYXIoKSwgd2Vla0luZm8uZG93LCB3ZWVrSW5mby5kb3kpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWtZZWFySGVscGVyKGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla3NUYXJnZXQ7XG4gICAgICAgIGlmIChpbnB1dCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gd2Vla09mWWVhcih0aGlzLCBkb3csIGRveSkueWVhcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdlZWtzVGFyZ2V0ID0gd2Vla3NJblllYXIoaW5wdXQsIGRvdywgZG95KTtcbiAgICAgICAgICAgIGlmICh3ZWVrID4gd2Vla3NUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICB3ZWVrID0gd2Vla3NUYXJnZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2V0V2Vla0FsbC5jYWxsKHRoaXMsIGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRXZWVrQWxsKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgZGF5T2ZZZWFyRGF0YSA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpLFxuICAgICAgICAgICAgZGF0ZSA9IGNyZWF0ZVVUQ0RhdGUoZGF5T2ZZZWFyRGF0YS55ZWFyLCAwLCBkYXlPZlllYXJEYXRhLmRheU9mWWVhcik7XG5cbiAgICAgICAgdGhpcy55ZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSk7XG4gICAgICAgIHRoaXMubW9udGgoZGF0ZS5nZXRVVENNb250aCgpKTtcbiAgICAgICAgdGhpcy5kYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1EnLCAwLCAnUW8nLCAncXVhcnRlcicpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignUScsIG1hdGNoMSk7XG4gICAgYWRkUGFyc2VUb2tlbignUScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTU9OVEhdID0gKHRvSW50KGlucHV0KSAtIDEpICogMztcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldFF1YXJ0ZXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGxcbiAgICAgICAgICAgID8gTWF0aC5jZWlsKCh0aGlzLm1vbnRoKCkgKyAxKSAvIDMpXG4gICAgICAgICAgICA6IHRoaXMubW9udGgoKGlucHV0IC0gMSkgKiAzICsgKHRoaXMubW9udGgoKSAlIDMpKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignRCcsIFsnREQnLCAyXSwgJ0RvJywgJ2RhdGUnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0QnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0REJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0RvJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgLy8gVE9ETzogUmVtb3ZlIFwib3JkaW5hbFBhcnNlXCIgZmFsbGJhY2sgaW4gbmV4dCBtYWpvciByZWxlYXNlLlxuICAgICAgICByZXR1cm4gaXNTdHJpY3RcbiAgICAgICAgICAgID8gbG9jYWxlLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlIHx8IGxvY2FsZS5fb3JkaW5hbFBhcnNlXG4gICAgICAgICAgICA6IGxvY2FsZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQ7XG4gICAgfSk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnRCcsICdERCddLCBEQVRFKTtcbiAgICBhZGRQYXJzZVRva2VuKCdEbycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbREFURV0gPSB0b0ludChpbnB1dC5tYXRjaChtYXRjaDF0bzIpWzBdKTtcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXREYXlPZk1vbnRoID0gbWFrZUdldFNldCgnRGF0ZScsIHRydWUpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0RERCcsIFsnRERERCcsIDNdLCAnREREbycsICdkYXlPZlllYXInKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0RERCcsIG1hdGNoMXRvMyk7XG4gICAgYWRkUmVnZXhUb2tlbignRERERCcsIG1hdGNoMyk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ0RERCcsICdEREREJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2RheU9mWWVhciA9IHRvSW50KGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldERheU9mWWVhcihpbnB1dCkge1xuICAgICAgICB2YXIgZGF5T2ZZZWFyID1cbiAgICAgICAgICAgIE1hdGgucm91bmQoXG4gICAgICAgICAgICAgICAgKHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKSAtIHRoaXMuY2xvbmUoKS5zdGFydE9mKCd5ZWFyJykpIC8gODY0ZTVcbiAgICAgICAgICAgICkgKyAxO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IGRheU9mWWVhciA6IHRoaXMuYWRkKGlucHV0IC0gZGF5T2ZZZWFyLCAnZCcpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdtJywgWydtbScsIDJdLCAwLCAnbWludXRlJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdtJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJIYXNaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdtbScsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRQYXJzZVRva2VuKFsnbScsICdtbSddLCBNSU5VVEUpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldE1pbnV0ZSA9IG1ha2VHZXRTZXQoJ01pbnV0ZXMnLCBmYWxzZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigncycsIFsnc3MnLCAyXSwgMCwgJ3NlY29uZCcpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbigncycsIG1hdGNoMXRvMiwgbWF0Y2gxdG8ySGFzWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignc3MnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ3MnLCAnc3MnXSwgU0VDT05EKTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXRTZWNvbmQgPSBtYWtlR2V0U2V0KCdTZWNvbmRzJywgZmFsc2UpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB+fih0aGlzLm1pbGxpc2Vjb25kKCkgLyAxMDApO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTUycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB+fih0aGlzLm1pbGxpc2Vjb25kKCkgLyAxMCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTUycsIDNdLCAwLCAnbWlsbGlzZWNvbmQnKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1MnLCA0XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTUycsIDVdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1MnLCA2XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1MnLCA3XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTUycsIDhdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTU1MnLCA5XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDAwMDtcbiAgICB9KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1MnLCBtYXRjaDF0bzMsIG1hdGNoMSk7XG4gICAgYWRkUmVnZXhUb2tlbignU1MnLCBtYXRjaDF0bzMsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignU1NTJywgbWF0Y2gxdG8zLCBtYXRjaDMpO1xuXG4gICAgdmFyIHRva2VuLCBnZXRTZXRNaWxsaXNlY29uZDtcbiAgICBmb3IgKHRva2VuID0gJ1NTU1MnOyB0b2tlbi5sZW5ndGggPD0gOTsgdG9rZW4gKz0gJ1MnKSB7XG4gICAgICAgIGFkZFJlZ2V4VG9rZW4odG9rZW4sIG1hdGNoVW5zaWduZWQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlTXMoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01JTExJU0VDT05EXSA9IHRvSW50KCgnMC4nICsgaW5wdXQpICogMTAwMCk7XG4gICAgfVxuXG4gICAgZm9yICh0b2tlbiA9ICdTJzsgdG9rZW4ubGVuZ3RoIDw9IDk7IHRva2VuICs9ICdTJykge1xuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBwYXJzZU1zKTtcbiAgICB9XG5cbiAgICBnZXRTZXRNaWxsaXNlY29uZCA9IG1ha2VHZXRTZXQoJ01pbGxpc2Vjb25kcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCd6JywgMCwgMCwgJ3pvbmVBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3p6JywgMCwgMCwgJ3pvbmVOYW1lJyk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRab25lQWJicigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gJ1VUQycgOiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRab25lTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gJ0Nvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lJyA6ICcnO1xuICAgIH1cblxuICAgIHZhciBwcm90byA9IE1vbWVudC5wcm90b3R5cGU7XG5cbiAgICBwcm90by5hZGQgPSBhZGQ7XG4gICAgcHJvdG8uY2FsZW5kYXIgPSBjYWxlbmRhciQxO1xuICAgIHByb3RvLmNsb25lID0gY2xvbmU7XG4gICAgcHJvdG8uZGlmZiA9IGRpZmY7XG4gICAgcHJvdG8uZW5kT2YgPSBlbmRPZjtcbiAgICBwcm90by5mb3JtYXQgPSBmb3JtYXQ7XG4gICAgcHJvdG8uZnJvbSA9IGZyb207XG4gICAgcHJvdG8uZnJvbU5vdyA9IGZyb21Ob3c7XG4gICAgcHJvdG8udG8gPSB0bztcbiAgICBwcm90by50b05vdyA9IHRvTm93O1xuICAgIHByb3RvLmdldCA9IHN0cmluZ0dldDtcbiAgICBwcm90by5pbnZhbGlkQXQgPSBpbnZhbGlkQXQ7XG4gICAgcHJvdG8uaXNBZnRlciA9IGlzQWZ0ZXI7XG4gICAgcHJvdG8uaXNCZWZvcmUgPSBpc0JlZm9yZTtcbiAgICBwcm90by5pc0JldHdlZW4gPSBpc0JldHdlZW47XG4gICAgcHJvdG8uaXNTYW1lID0gaXNTYW1lO1xuICAgIHByb3RvLmlzU2FtZU9yQWZ0ZXIgPSBpc1NhbWVPckFmdGVyO1xuICAgIHByb3RvLmlzU2FtZU9yQmVmb3JlID0gaXNTYW1lT3JCZWZvcmU7XG4gICAgcHJvdG8uaXNWYWxpZCA9IGlzVmFsaWQkMjtcbiAgICBwcm90by5sYW5nID0gbGFuZztcbiAgICBwcm90by5sb2NhbGUgPSBsb2NhbGU7XG4gICAgcHJvdG8ubG9jYWxlRGF0YSA9IGxvY2FsZURhdGE7XG4gICAgcHJvdG8ubWF4ID0gcHJvdG90eXBlTWF4O1xuICAgIHByb3RvLm1pbiA9IHByb3RvdHlwZU1pbjtcbiAgICBwcm90by5wYXJzaW5nRmxhZ3MgPSBwYXJzaW5nRmxhZ3M7XG4gICAgcHJvdG8uc2V0ID0gc3RyaW5nU2V0O1xuICAgIHByb3RvLnN0YXJ0T2YgPSBzdGFydE9mO1xuICAgIHByb3RvLnN1YnRyYWN0ID0gc3VidHJhY3Q7XG4gICAgcHJvdG8udG9BcnJheSA9IHRvQXJyYXk7XG4gICAgcHJvdG8udG9PYmplY3QgPSB0b09iamVjdDtcbiAgICBwcm90by50b0RhdGUgPSB0b0RhdGU7XG4gICAgcHJvdG8udG9JU09TdHJpbmcgPSB0b0lTT1N0cmluZztcbiAgICBwcm90by5pbnNwZWN0ID0gaW5zcGVjdDtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLmZvciAhPSBudWxsKSB7XG4gICAgICAgIHByb3RvW1N5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJyldID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICdNb21lbnQ8JyArIHRoaXMuZm9ybWF0KCkgKyAnPic7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHByb3RvLnRvSlNPTiA9IHRvSlNPTjtcbiAgICBwcm90by50b1N0cmluZyA9IHRvU3RyaW5nO1xuICAgIHByb3RvLnVuaXggPSB1bml4O1xuICAgIHByb3RvLnZhbHVlT2YgPSB2YWx1ZU9mO1xuICAgIHByb3RvLmNyZWF0aW9uRGF0YSA9IGNyZWF0aW9uRGF0YTtcbiAgICBwcm90by5lcmFOYW1lID0gZ2V0RXJhTmFtZTtcbiAgICBwcm90by5lcmFOYXJyb3cgPSBnZXRFcmFOYXJyb3c7XG4gICAgcHJvdG8uZXJhQWJiciA9IGdldEVyYUFiYnI7XG4gICAgcHJvdG8uZXJhWWVhciA9IGdldEVyYVllYXI7XG4gICAgcHJvdG8ueWVhciA9IGdldFNldFllYXI7XG4gICAgcHJvdG8uaXNMZWFwWWVhciA9IGdldElzTGVhcFllYXI7XG4gICAgcHJvdG8ud2Vla1llYXIgPSBnZXRTZXRXZWVrWWVhcjtcbiAgICBwcm90by5pc29XZWVrWWVhciA9IGdldFNldElTT1dlZWtZZWFyO1xuICAgIHByb3RvLnF1YXJ0ZXIgPSBwcm90by5xdWFydGVycyA9IGdldFNldFF1YXJ0ZXI7XG4gICAgcHJvdG8ubW9udGggPSBnZXRTZXRNb250aDtcbiAgICBwcm90by5kYXlzSW5Nb250aCA9IGdldERheXNJbk1vbnRoO1xuICAgIHByb3RvLndlZWsgPSBwcm90by53ZWVrcyA9IGdldFNldFdlZWs7XG4gICAgcHJvdG8uaXNvV2VlayA9IHByb3RvLmlzb1dlZWtzID0gZ2V0U2V0SVNPV2VlaztcbiAgICBwcm90by53ZWVrc0luWWVhciA9IGdldFdlZWtzSW5ZZWFyO1xuICAgIHByb3RvLndlZWtzSW5XZWVrWWVhciA9IGdldFdlZWtzSW5XZWVrWWVhcjtcbiAgICBwcm90by5pc29XZWVrc0luWWVhciA9IGdldElTT1dlZWtzSW5ZZWFyO1xuICAgIHByb3RvLmlzb1dlZWtzSW5JU09XZWVrWWVhciA9IGdldElTT1dlZWtzSW5JU09XZWVrWWVhcjtcbiAgICBwcm90by5kYXRlID0gZ2V0U2V0RGF5T2ZNb250aDtcbiAgICBwcm90by5kYXkgPSBwcm90by5kYXlzID0gZ2V0U2V0RGF5T2ZXZWVrO1xuICAgIHByb3RvLndlZWtkYXkgPSBnZXRTZXRMb2NhbGVEYXlPZldlZWs7XG4gICAgcHJvdG8uaXNvV2Vla2RheSA9IGdldFNldElTT0RheU9mV2VlaztcbiAgICBwcm90by5kYXlPZlllYXIgPSBnZXRTZXREYXlPZlllYXI7XG4gICAgcHJvdG8uaG91ciA9IHByb3RvLmhvdXJzID0gZ2V0U2V0SG91cjtcbiAgICBwcm90by5taW51dGUgPSBwcm90by5taW51dGVzID0gZ2V0U2V0TWludXRlO1xuICAgIHByb3RvLnNlY29uZCA9IHByb3RvLnNlY29uZHMgPSBnZXRTZXRTZWNvbmQ7XG4gICAgcHJvdG8ubWlsbGlzZWNvbmQgPSBwcm90by5taWxsaXNlY29uZHMgPSBnZXRTZXRNaWxsaXNlY29uZDtcbiAgICBwcm90by51dGNPZmZzZXQgPSBnZXRTZXRPZmZzZXQ7XG4gICAgcHJvdG8udXRjID0gc2V0T2Zmc2V0VG9VVEM7XG4gICAgcHJvdG8ubG9jYWwgPSBzZXRPZmZzZXRUb0xvY2FsO1xuICAgIHByb3RvLnBhcnNlWm9uZSA9IHNldE9mZnNldFRvUGFyc2VkT2Zmc2V0O1xuICAgIHByb3RvLmhhc0FsaWduZWRIb3VyT2Zmc2V0ID0gaGFzQWxpZ25lZEhvdXJPZmZzZXQ7XG4gICAgcHJvdG8uaXNEU1QgPSBpc0RheWxpZ2h0U2F2aW5nVGltZTtcbiAgICBwcm90by5pc0xvY2FsID0gaXNMb2NhbDtcbiAgICBwcm90by5pc1V0Y09mZnNldCA9IGlzVXRjT2Zmc2V0O1xuICAgIHByb3RvLmlzVXRjID0gaXNVdGM7XG4gICAgcHJvdG8uaXNVVEMgPSBpc1V0YztcbiAgICBwcm90by56b25lQWJiciA9IGdldFpvbmVBYmJyO1xuICAgIHByb3RvLnpvbmVOYW1lID0gZ2V0Wm9uZU5hbWU7XG4gICAgcHJvdG8uZGF0ZXMgPSBkZXByZWNhdGUoXG4gICAgICAgICdkYXRlcyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgZGF0ZSBpbnN0ZWFkLicsXG4gICAgICAgIGdldFNldERheU9mTW9udGhcbiAgICApO1xuICAgIHByb3RvLm1vbnRocyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbnRocyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgbW9udGggaW5zdGVhZCcsXG4gICAgICAgIGdldFNldE1vbnRoXG4gICAgKTtcbiAgICBwcm90by55ZWFycyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ3llYXJzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSB5ZWFyIGluc3RlYWQnLFxuICAgICAgICBnZXRTZXRZZWFyXG4gICAgKTtcbiAgICBwcm90by56b25lID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkuem9uZSBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50KCkudXRjT2Zmc2V0IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3Mvem9uZS8nLFxuICAgICAgICBnZXRTZXRab25lXG4gICAgKTtcbiAgICBwcm90by5pc0RTVFNoaWZ0ZWQgPSBkZXByZWNhdGUoXG4gICAgICAgICdpc0RTVFNoaWZ0ZWQgaXMgZGVwcmVjYXRlZC4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZHN0LXNoaWZ0ZWQvIGZvciBtb3JlIGluZm9ybWF0aW9uJyxcbiAgICAgICAgaXNEYXlsaWdodFNhdmluZ1RpbWVTaGlmdGVkXG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVuaXgoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKGlucHV0ICogMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW5ab25lKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5wYXJzZVpvbmUoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVQYXJzZVBvc3RGb3JtYXQoc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDEgPSBMb2NhbGUucHJvdG90eXBlO1xuXG4gICAgcHJvdG8kMS5jYWxlbmRhciA9IGNhbGVuZGFyO1xuICAgIHByb3RvJDEubG9uZ0RhdGVGb3JtYXQgPSBsb25nRGF0ZUZvcm1hdDtcbiAgICBwcm90byQxLmludmFsaWREYXRlID0gaW52YWxpZERhdGU7XG4gICAgcHJvdG8kMS5vcmRpbmFsID0gb3JkaW5hbDtcbiAgICBwcm90byQxLnByZXBhcnNlID0gcHJlUGFyc2VQb3N0Rm9ybWF0O1xuICAgIHByb3RvJDEucG9zdGZvcm1hdCA9IHByZVBhcnNlUG9zdEZvcm1hdDtcbiAgICBwcm90byQxLnJlbGF0aXZlVGltZSA9IHJlbGF0aXZlVGltZTtcbiAgICBwcm90byQxLnBhc3RGdXR1cmUgPSBwYXN0RnV0dXJlO1xuICAgIHByb3RvJDEuc2V0ID0gc2V0O1xuICAgIHByb3RvJDEuZXJhcyA9IGxvY2FsZUVyYXM7XG4gICAgcHJvdG8kMS5lcmFzUGFyc2UgPSBsb2NhbGVFcmFzUGFyc2U7XG4gICAgcHJvdG8kMS5lcmFzQ29udmVydFllYXIgPSBsb2NhbGVFcmFzQ29udmVydFllYXI7XG4gICAgcHJvdG8kMS5lcmFzQWJiclJlZ2V4ID0gZXJhc0FiYnJSZWdleDtcbiAgICBwcm90byQxLmVyYXNOYW1lUmVnZXggPSBlcmFzTmFtZVJlZ2V4O1xuICAgIHByb3RvJDEuZXJhc05hcnJvd1JlZ2V4ID0gZXJhc05hcnJvd1JlZ2V4O1xuXG4gICAgcHJvdG8kMS5tb250aHMgPSBsb2NhbGVNb250aHM7XG4gICAgcHJvdG8kMS5tb250aHNTaG9ydCA9IGxvY2FsZU1vbnRoc1Nob3J0O1xuICAgIHByb3RvJDEubW9udGhzUGFyc2UgPSBsb2NhbGVNb250aHNQYXJzZTtcbiAgICBwcm90byQxLm1vbnRoc1JlZ2V4ID0gbW9udGhzUmVnZXg7XG4gICAgcHJvdG8kMS5tb250aHNTaG9ydFJlZ2V4ID0gbW9udGhzU2hvcnRSZWdleDtcbiAgICBwcm90byQxLndlZWsgPSBsb2NhbGVXZWVrO1xuICAgIHByb3RvJDEuZmlyc3REYXlPZlllYXIgPSBsb2NhbGVGaXJzdERheU9mWWVhcjtcbiAgICBwcm90byQxLmZpcnN0RGF5T2ZXZWVrID0gbG9jYWxlRmlyc3REYXlPZldlZWs7XG5cbiAgICBwcm90byQxLndlZWtkYXlzID0gbG9jYWxlV2Vla2RheXM7XG4gICAgcHJvdG8kMS53ZWVrZGF5c01pbiA9IGxvY2FsZVdlZWtkYXlzTWluO1xuICAgIHByb3RvJDEud2Vla2RheXNTaG9ydCA9IGxvY2FsZVdlZWtkYXlzU2hvcnQ7XG4gICAgcHJvdG8kMS53ZWVrZGF5c1BhcnNlID0gbG9jYWxlV2Vla2RheXNQYXJzZTtcblxuICAgIHByb3RvJDEud2Vla2RheXNSZWdleCA9IHdlZWtkYXlzUmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrZGF5c1Nob3J0UmVnZXggPSB3ZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrZGF5c01pblJlZ2V4ID0gd2Vla2RheXNNaW5SZWdleDtcblxuICAgIHByb3RvJDEuaXNQTSA9IGxvY2FsZUlzUE07XG4gICAgcHJvdG8kMS5tZXJpZGllbSA9IGxvY2FsZU1lcmlkaWVtO1xuXG4gICAgZnVuY3Rpb24gZ2V0JDEoZm9ybWF0LCBpbmRleCwgZmllbGQsIHNldHRlcikge1xuICAgICAgICB2YXIgbG9jYWxlID0gZ2V0TG9jYWxlKCksXG4gICAgICAgICAgICB1dGMgPSBjcmVhdGVVVEMoKS5zZXQoc2V0dGVyLCBpbmRleCk7XG4gICAgICAgIHJldHVybiBsb2NhbGVbZmllbGRdKHV0YywgZm9ybWF0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCBmaWVsZCkge1xuICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG5cbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQkMShmb3JtYXQsIGluZGV4LCBmaWVsZCwgJ21vbnRoJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIG91dCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgb3V0W2ldID0gZ2V0JDEoZm9ybWF0LCBpLCBmaWVsZCwgJ21vbnRoJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG5cbiAgICAvLyAoKVxuICAgIC8vICg1KVxuICAgIC8vIChmbXQsIDUpXG4gICAgLy8gKGZtdClcbiAgICAvLyAodHJ1ZSlcbiAgICAvLyAodHJ1ZSwgNSlcbiAgICAvLyAodHJ1ZSwgZm10LCA1KVxuICAgIC8vICh0cnVlLCBmbXQpXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzSW1wbChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgsIGZpZWxkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbG9jYWxlU29ydGVkID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIGlmIChpc051bWJlcihmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3JtYXQgPSBsb2NhbGVTb3J0ZWQ7XG4gICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGxvY2FsZVNvcnRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxvY2FsZSA9IGdldExvY2FsZSgpLFxuICAgICAgICAgICAgc2hpZnQgPSBsb2NhbGVTb3J0ZWQgPyBsb2NhbGUuX3dlZWsuZG93IDogMCxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBvdXQgPSBbXTtcblxuICAgICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldCQxKGZvcm1hdCwgKGluZGV4ICsgc2hpZnQpICUgNywgZmllbGQsICdkYXknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIG91dFtpXSA9IGdldCQxKGZvcm1hdCwgKGkgKyBzaGlmdCkgJSA3LCBmaWVsZCwgJ2RheScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRocyhmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCAnbW9udGhzJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRoc1Nob3J0KGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RNb250aHNJbXBsKGZvcm1hdCwgaW5kZXgsICdtb250aHNTaG9ydCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5cyhsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXMnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXNTaG9ydChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNTaG9ydCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c01pbihsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNNaW4nKTtcbiAgICB9XG5cbiAgICBnZXRTZXRHbG9iYWxMb2NhbGUoJ2VuJywge1xuICAgICAgICBlcmFzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcwMDAxLTAxLTAxJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogK0luZmluaXR5LFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnQW5ubyBEb21pbmknLFxuICAgICAgICAgICAgICAgIG5hcnJvdzogJ0FEJyxcbiAgICAgICAgICAgICAgICBhYmJyOiAnQUQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzaW5jZTogJzAwMDAtMTItMzEnLFxuICAgICAgICAgICAgICAgIHVudGlsOiAtSW5maW5pdHksXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAxLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdCZWZvcmUgQ2hyaXN0JyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICdCQycsXG4gICAgICAgICAgICAgICAgYWJicjogJ0JDJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSh0aHxzdHxuZHxyZCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIHRvSW50KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdzdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBTaWRlIGVmZmVjdCBpbXBvcnRzXG5cbiAgICBob29rcy5sYW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50LmxhbmcgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGUgaW5zdGVhZC4nLFxuICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGVcbiAgICApO1xuICAgIGhvb2tzLmxhbmdEYXRhID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50LmxhbmdEYXRhIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlRGF0YSBpbnN0ZWFkLicsXG4gICAgICAgIGdldExvY2FsZVxuICAgICk7XG5cbiAgICB2YXIgbWF0aEFicyA9IE1hdGguYWJzO1xuXG4gICAgZnVuY3Rpb24gYWJzKCkge1xuICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cbiAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzID0gbWF0aEFicyh0aGlzLl9taWxsaXNlY29uZHMpO1xuICAgICAgICB0aGlzLl9kYXlzID0gbWF0aEFicyh0aGlzLl9kYXlzKTtcbiAgICAgICAgdGhpcy5fbW9udGhzID0gbWF0aEFicyh0aGlzLl9tb250aHMpO1xuXG4gICAgICAgIGRhdGEubWlsbGlzZWNvbmRzID0gbWF0aEFicyhkYXRhLm1pbGxpc2Vjb25kcyk7XG4gICAgICAgIGRhdGEuc2Vjb25kcyA9IG1hdGhBYnMoZGF0YS5zZWNvbmRzKTtcbiAgICAgICAgZGF0YS5taW51dGVzID0gbWF0aEFicyhkYXRhLm1pbnV0ZXMpO1xuICAgICAgICBkYXRhLmhvdXJzID0gbWF0aEFicyhkYXRhLmhvdXJzKTtcbiAgICAgICAgZGF0YS5tb250aHMgPSBtYXRoQWJzKGRhdGEubW9udGhzKTtcbiAgICAgICAgZGF0YS55ZWFycyA9IG1hdGhBYnMoZGF0YS55ZWFycyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkU3VidHJhY3QkMShkdXJhdGlvbiwgaW5wdXQsIHZhbHVlLCBkaXJlY3Rpb24pIHtcbiAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlRHVyYXRpb24oaW5wdXQsIHZhbHVlKTtcblxuICAgICAgICBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9taWxsaXNlY29uZHM7XG4gICAgICAgIGR1cmF0aW9uLl9kYXlzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9kYXlzO1xuICAgICAgICBkdXJhdGlvbi5fbW9udGhzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9tb250aHM7XG5cbiAgICAgICAgcmV0dXJuIGR1cmF0aW9uLl9idWJibGUoKTtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0cyBvbmx5IDIuMC1zdHlsZSBhZGQoMSwgJ3MnKSBvciBhZGQoZHVyYXRpb24pXG4gICAgZnVuY3Rpb24gYWRkJDEoaW5wdXQsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBhZGRTdWJ0cmFjdCQxKHRoaXMsIGlucHV0LCB2YWx1ZSwgMSk7XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydHMgb25seSAyLjAtc3R5bGUgc3VidHJhY3QoMSwgJ3MnKSBvciBzdWJ0cmFjdChkdXJhdGlvbilcbiAgICBmdW5jdGlvbiBzdWJ0cmFjdCQxKGlucHV0LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYWRkU3VidHJhY3QkMSh0aGlzLCBpbnB1dCwgdmFsdWUsIC0xKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNDZWlsKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1YmJsZSgpIHtcbiAgICAgICAgdmFyIG1pbGxpc2Vjb25kcyA9IHRoaXMuX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGRheXMgPSB0aGlzLl9kYXlzLFxuICAgICAgICAgICAgbW9udGhzID0gdGhpcy5fbW9udGhzLFxuICAgICAgICAgICAgZGF0YSA9IHRoaXMuX2RhdGEsXG4gICAgICAgICAgICBzZWNvbmRzLFxuICAgICAgICAgICAgbWludXRlcyxcbiAgICAgICAgICAgIGhvdXJzLFxuICAgICAgICAgICAgeWVhcnMsXG4gICAgICAgICAgICBtb250aHNGcm9tRGF5cztcblxuICAgICAgICAvLyBpZiB3ZSBoYXZlIGEgbWl4IG9mIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB2YWx1ZXMsIGJ1YmJsZSBkb3duIGZpcnN0XG4gICAgICAgIC8vIGNoZWNrOiBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMjE2NlxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgIChtaWxsaXNlY29uZHMgPj0gMCAmJiBkYXlzID49IDAgJiYgbW9udGhzID49IDApIHx8XG4gICAgICAgICAgICAgICAgKG1pbGxpc2Vjb25kcyA8PSAwICYmIGRheXMgPD0gMCAmJiBtb250aHMgPD0gMClcbiAgICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgKz0gYWJzQ2VpbChtb250aHNUb0RheXMobW9udGhzKSArIGRheXMpICogODY0ZTU7XG4gICAgICAgICAgICBkYXlzID0gMDtcbiAgICAgICAgICAgIG1vbnRocyA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYnViYmxlcyB1cCB2YWx1ZXMsIHNlZSB0aGUgdGVzdHMgZm9yXG4gICAgICAgIC8vIGV4YW1wbGVzIG9mIHdoYXQgdGhhdCBtZWFucy5cbiAgICAgICAgZGF0YS5taWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHMgJSAxMDAwO1xuXG4gICAgICAgIHNlY29uZHMgPSBhYnNGbG9vcihtaWxsaXNlY29uZHMgLyAxMDAwKTtcbiAgICAgICAgZGF0YS5zZWNvbmRzID0gc2Vjb25kcyAlIDYwO1xuXG4gICAgICAgIG1pbnV0ZXMgPSBhYnNGbG9vcihzZWNvbmRzIC8gNjApO1xuICAgICAgICBkYXRhLm1pbnV0ZXMgPSBtaW51dGVzICUgNjA7XG5cbiAgICAgICAgaG91cnMgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBkYXRhLmhvdXJzID0gaG91cnMgJSAyNDtcblxuICAgICAgICBkYXlzICs9IGFic0Zsb29yKGhvdXJzIC8gMjQpO1xuXG4gICAgICAgIC8vIGNvbnZlcnQgZGF5cyB0byBtb250aHNcbiAgICAgICAgbW9udGhzRnJvbURheXMgPSBhYnNGbG9vcihkYXlzVG9Nb250aHMoZGF5cykpO1xuICAgICAgICBtb250aHMgKz0gbW9udGhzRnJvbURheXM7XG4gICAgICAgIGRheXMgLT0gYWJzQ2VpbChtb250aHNUb0RheXMobW9udGhzRnJvbURheXMpKTtcblxuICAgICAgICAvLyAxMiBtb250aHMgLT4gMSB5ZWFyXG4gICAgICAgIHllYXJzID0gYWJzRmxvb3IobW9udGhzIC8gMTIpO1xuICAgICAgICBtb250aHMgJT0gMTI7XG5cbiAgICAgICAgZGF0YS5kYXlzID0gZGF5cztcbiAgICAgICAgZGF0YS5tb250aHMgPSBtb250aHM7XG4gICAgICAgIGRhdGEueWVhcnMgPSB5ZWFycztcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlzVG9Nb250aHMoZGF5cykge1xuICAgICAgICAvLyA0MDAgeWVhcnMgaGF2ZSAxNDYwOTcgZGF5cyAodGFraW5nIGludG8gYWNjb3VudCBsZWFwIHllYXIgcnVsZXMpXG4gICAgICAgIC8vIDQwMCB5ZWFycyBoYXZlIDEyIG1vbnRocyA9PT0gNDgwMFxuICAgICAgICByZXR1cm4gKGRheXMgKiA0ODAwKSAvIDE0NjA5NztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNUb0RheXMobW9udGhzKSB7XG4gICAgICAgIC8vIHRoZSByZXZlcnNlIG9mIGRheXNUb01vbnRoc1xuICAgICAgICByZXR1cm4gKG1vbnRocyAqIDE0NjA5NykgLyA0ODAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFzKHVuaXRzKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRheXMsXG4gICAgICAgICAgICBtb250aHMsXG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgPSB0aGlzLl9taWxsaXNlY29uZHM7XG5cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG5cbiAgICAgICAgaWYgKHVuaXRzID09PSAnbW9udGgnIHx8IHVuaXRzID09PSAncXVhcnRlcicgfHwgdW5pdHMgPT09ICd5ZWFyJykge1xuICAgICAgICAgICAgZGF5cyA9IHRoaXMuX2RheXMgKyBtaWxsaXNlY29uZHMgLyA4NjRlNTtcbiAgICAgICAgICAgIG1vbnRocyA9IHRoaXMuX21vbnRocyArIGRheXNUb01vbnRocyhkYXlzKTtcbiAgICAgICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb250aHM7XG4gICAgICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb250aHMgLyAzO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzIC8gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBoYW5kbGUgbWlsbGlzZWNvbmRzIHNlcGFyYXRlbHkgYmVjYXVzZSBvZiBmbG9hdGluZyBwb2ludCBtYXRoIGVycm9ycyAoaXNzdWUgIzE4NjcpXG4gICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyArIE1hdGgucm91bmQobW9udGhzVG9EYXlzKHRoaXMuX21vbnRocykpO1xuICAgICAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyAvIDcgKyBtaWxsaXNlY29uZHMgLyA2MDQ4ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKyBtaWxsaXNlY29uZHMgLyA4NjRlNTtcbiAgICAgICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKiAyNCArIG1pbGxpc2Vjb25kcyAvIDM2ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKiAxNDQwICsgbWlsbGlzZWNvbmRzIC8gNmU0O1xuICAgICAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICogODY0MDAgKyBtaWxsaXNlY29uZHMgLyAxMDAwO1xuICAgICAgICAgICAgICAgIC8vIE1hdGguZmxvb3IgcHJldmVudHMgZmxvYXRpbmcgcG9pbnQgbWF0aCBlcnJvcnMgaGVyZVxuICAgICAgICAgICAgICAgIGNhc2UgJ21pbGxpc2Vjb25kJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoZGF5cyAqIDg2NGU1KSArIG1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gdW5pdCAnICsgdW5pdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUFzKGFsaWFzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcyhhbGlhcyk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGFzTWlsbGlzZWNvbmRzID0gbWFrZUFzKCdtcycpLFxuICAgICAgICBhc1NlY29uZHMgPSBtYWtlQXMoJ3MnKSxcbiAgICAgICAgYXNNaW51dGVzID0gbWFrZUFzKCdtJyksXG4gICAgICAgIGFzSG91cnMgPSBtYWtlQXMoJ2gnKSxcbiAgICAgICAgYXNEYXlzID0gbWFrZUFzKCdkJyksXG4gICAgICAgIGFzV2Vla3MgPSBtYWtlQXMoJ3cnKSxcbiAgICAgICAgYXNNb250aHMgPSBtYWtlQXMoJ00nKSxcbiAgICAgICAgYXNRdWFydGVycyA9IG1ha2VBcygnUScpLFxuICAgICAgICBhc1llYXJzID0gbWFrZUFzKCd5JyksXG4gICAgICAgIHZhbHVlT2YkMSA9IGFzTWlsbGlzZWNvbmRzO1xuXG4gICAgZnVuY3Rpb24gY2xvbmUkMSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKHRoaXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldCQyKHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzW3VuaXRzICsgJ3MnXSgpIDogTmFOO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VHZXR0ZXIobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5fZGF0YVtuYW1lXSA6IE5hTjtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgbWlsbGlzZWNvbmRzID0gbWFrZUdldHRlcignbWlsbGlzZWNvbmRzJyksXG4gICAgICAgIHNlY29uZHMgPSBtYWtlR2V0dGVyKCdzZWNvbmRzJyksXG4gICAgICAgIG1pbnV0ZXMgPSBtYWtlR2V0dGVyKCdtaW51dGVzJyksXG4gICAgICAgIGhvdXJzID0gbWFrZUdldHRlcignaG91cnMnKSxcbiAgICAgICAgZGF5cyA9IG1ha2VHZXR0ZXIoJ2RheXMnKSxcbiAgICAgICAgbW9udGhzID0gbWFrZUdldHRlcignbW9udGhzJyksXG4gICAgICAgIHllYXJzID0gbWFrZUdldHRlcigneWVhcnMnKTtcblxuICAgIGZ1bmN0aW9uIHdlZWtzKCkge1xuICAgICAgICByZXR1cm4gYWJzRmxvb3IodGhpcy5kYXlzKCkgLyA3KTtcbiAgICB9XG5cbiAgICB2YXIgcm91bmQgPSBNYXRoLnJvdW5kLFxuICAgICAgICB0aHJlc2hvbGRzID0ge1xuICAgICAgICAgICAgc3M6IDQ0LCAvLyBhIGZldyBzZWNvbmRzIHRvIHNlY29uZHNcbiAgICAgICAgICAgIHM6IDQ1LCAvLyBzZWNvbmRzIHRvIG1pbnV0ZVxuICAgICAgICAgICAgbTogNDUsIC8vIG1pbnV0ZXMgdG8gaG91clxuICAgICAgICAgICAgaDogMjIsIC8vIGhvdXJzIHRvIGRheVxuICAgICAgICAgICAgZDogMjYsIC8vIGRheXMgdG8gbW9udGgvd2Vla1xuICAgICAgICAgICAgdzogbnVsbCwgLy8gd2Vla3MgdG8gbW9udGhcbiAgICAgICAgICAgIE06IDExLCAvLyBtb250aHMgdG8geWVhclxuICAgICAgICB9O1xuXG4gICAgLy8gaGVscGVyIGZ1bmN0aW9uIGZvciBtb21lbnQuZm4uZnJvbSwgbW9tZW50LmZuLmZyb21Ob3csIGFuZCBtb21lbnQuZHVyYXRpb24uZm4uaHVtYW5pemVcbiAgICBmdW5jdGlvbiBzdWJzdGl0dXRlVGltZUFnbyhzdHJpbmcsIG51bWJlciwgd2l0aG91dFN1ZmZpeCwgaXNGdXR1cmUsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLnJlbGF0aXZlVGltZShudW1iZXIgfHwgMSwgISF3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWUkMShwb3NOZWdEdXJhdGlvbiwgd2l0aG91dFN1ZmZpeCwgdGhyZXNob2xkcywgbG9jYWxlKSB7XG4gICAgICAgIHZhciBkdXJhdGlvbiA9IGNyZWF0ZUR1cmF0aW9uKHBvc05lZ0R1cmF0aW9uKS5hYnMoKSxcbiAgICAgICAgICAgIHNlY29uZHMgPSByb3VuZChkdXJhdGlvbi5hcygncycpKSxcbiAgICAgICAgICAgIG1pbnV0ZXMgPSByb3VuZChkdXJhdGlvbi5hcygnbScpKSxcbiAgICAgICAgICAgIGhvdXJzID0gcm91bmQoZHVyYXRpb24uYXMoJ2gnKSksXG4gICAgICAgICAgICBkYXlzID0gcm91bmQoZHVyYXRpb24uYXMoJ2QnKSksXG4gICAgICAgICAgICBtb250aHMgPSByb3VuZChkdXJhdGlvbi5hcygnTScpKSxcbiAgICAgICAgICAgIHdlZWtzID0gcm91bmQoZHVyYXRpb24uYXMoJ3cnKSksXG4gICAgICAgICAgICB5ZWFycyA9IHJvdW5kKGR1cmF0aW9uLmFzKCd5JykpLFxuICAgICAgICAgICAgYSA9XG4gICAgICAgICAgICAgICAgKHNlY29uZHMgPD0gdGhyZXNob2xkcy5zcyAmJiBbJ3MnLCBzZWNvbmRzXSkgfHxcbiAgICAgICAgICAgICAgICAoc2Vjb25kcyA8IHRocmVzaG9sZHMucyAmJiBbJ3NzJywgc2Vjb25kc10pIHx8XG4gICAgICAgICAgICAgICAgKG1pbnV0ZXMgPD0gMSAmJiBbJ20nXSkgfHxcbiAgICAgICAgICAgICAgICAobWludXRlcyA8IHRocmVzaG9sZHMubSAmJiBbJ21tJywgbWludXRlc10pIHx8XG4gICAgICAgICAgICAgICAgKGhvdXJzIDw9IDEgJiYgWydoJ10pIHx8XG4gICAgICAgICAgICAgICAgKGhvdXJzIDwgdGhyZXNob2xkcy5oICYmIFsnaGgnLCBob3Vyc10pIHx8XG4gICAgICAgICAgICAgICAgKGRheXMgPD0gMSAmJiBbJ2QnXSkgfHxcbiAgICAgICAgICAgICAgICAoZGF5cyA8IHRocmVzaG9sZHMuZCAmJiBbJ2RkJywgZGF5c10pO1xuXG4gICAgICAgIGlmICh0aHJlc2hvbGRzLncgIT0gbnVsbCkge1xuICAgICAgICAgICAgYSA9XG4gICAgICAgICAgICAgICAgYSB8fFxuICAgICAgICAgICAgICAgICh3ZWVrcyA8PSAxICYmIFsndyddKSB8fFxuICAgICAgICAgICAgICAgICh3ZWVrcyA8IHRocmVzaG9sZHMudyAmJiBbJ3d3Jywgd2Vla3NdKTtcbiAgICAgICAgfVxuICAgICAgICBhID0gYSB8fFxuICAgICAgICAgICAgKG1vbnRocyA8PSAxICYmIFsnTSddKSB8fFxuICAgICAgICAgICAgKG1vbnRocyA8IHRocmVzaG9sZHMuTSAmJiBbJ01NJywgbW9udGhzXSkgfHxcbiAgICAgICAgICAgICh5ZWFycyA8PSAxICYmIFsneSddKSB8fCBbJ3l5JywgeWVhcnNdO1xuXG4gICAgICAgIGFbMl0gPSB3aXRob3V0U3VmZml4O1xuICAgICAgICBhWzNdID0gK3Bvc05lZ0R1cmF0aW9uID4gMDtcbiAgICAgICAgYVs0XSA9IGxvY2FsZTtcbiAgICAgICAgcmV0dXJuIHN1YnN0aXR1dGVUaW1lQWdvLmFwcGx5KG51bGwsIGEpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byBzZXQgdGhlIHJvdW5kaW5nIGZ1bmN0aW9uIGZvciByZWxhdGl2ZSB0aW1lIHN0cmluZ3NcbiAgICBmdW5jdGlvbiBnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZyhyb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgIGlmIChyb3VuZGluZ0Z1bmN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByb3VuZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHJvdW5kaW5nRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJvdW5kID0gcm91bmRpbmdGdW5jdGlvbjtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IGEgdGhyZXNob2xkIGZvciByZWxhdGl2ZSB0aW1lIHN0cmluZ3NcbiAgICBmdW5jdGlvbiBnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQodGhyZXNob2xkLCBsaW1pdCkge1xuICAgICAgICBpZiAodGhyZXNob2xkc1t0aHJlc2hvbGRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGltaXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRocmVzaG9sZHNbdGhyZXNob2xkXTtcbiAgICAgICAgfVxuICAgICAgICB0aHJlc2hvbGRzW3RocmVzaG9sZF0gPSBsaW1pdDtcbiAgICAgICAgaWYgKHRocmVzaG9sZCA9PT0gJ3MnKSB7XG4gICAgICAgICAgICB0aHJlc2hvbGRzLnNzID0gbGltaXQgLSAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGh1bWFuaXplKGFyZ1dpdGhTdWZmaXgsIGFyZ1RocmVzaG9sZHMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgd2l0aFN1ZmZpeCA9IGZhbHNlLFxuICAgICAgICAgICAgdGggPSB0aHJlc2hvbGRzLFxuICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgb3V0cHV0O1xuXG4gICAgICAgIGlmICh0eXBlb2YgYXJnV2l0aFN1ZmZpeCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGFyZ1RocmVzaG9sZHMgPSBhcmdXaXRoU3VmZml4O1xuICAgICAgICAgICAgYXJnV2l0aFN1ZmZpeCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYXJnV2l0aFN1ZmZpeCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICB3aXRoU3VmZml4ID0gYXJnV2l0aFN1ZmZpeDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFyZ1RocmVzaG9sZHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aCA9IE9iamVjdC5hc3NpZ24oe30sIHRocmVzaG9sZHMsIGFyZ1RocmVzaG9sZHMpO1xuICAgICAgICAgICAgaWYgKGFyZ1RocmVzaG9sZHMucyAhPSBudWxsICYmIGFyZ1RocmVzaG9sZHMuc3MgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoLnNzID0gYXJnVGhyZXNob2xkcy5zIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FsZSA9IHRoaXMubG9jYWxlRGF0YSgpO1xuICAgICAgICBvdXRwdXQgPSByZWxhdGl2ZVRpbWUkMSh0aGlzLCAhd2l0aFN1ZmZpeCwgdGgsIGxvY2FsZSk7XG5cbiAgICAgICAgaWYgKHdpdGhTdWZmaXgpIHtcbiAgICAgICAgICAgIG91dHB1dCA9IGxvY2FsZS5wYXN0RnV0dXJlKCt0aGlzLCBvdXRwdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxvY2FsZS5wb3N0Zm9ybWF0KG91dHB1dCk7XG4gICAgfVxuXG4gICAgdmFyIGFicyQxID0gTWF0aC5hYnM7XG5cbiAgICBmdW5jdGlvbiBzaWduKHgpIHtcbiAgICAgICAgcmV0dXJuICh4ID4gMCkgLSAoeCA8IDApIHx8ICt4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nJDEoKSB7XG4gICAgICAgIC8vIGZvciBJU08gc3RyaW5ncyB3ZSBkbyBub3QgdXNlIHRoZSBub3JtYWwgYnViYmxpbmcgcnVsZXM6XG4gICAgICAgIC8vICAqIG1pbGxpc2Vjb25kcyBidWJibGUgdXAgdW50aWwgdGhleSBiZWNvbWUgaG91cnNcbiAgICAgICAgLy8gICogZGF5cyBkbyBub3QgYnViYmxlIGF0IGFsbFxuICAgICAgICAvLyAgKiBtb250aHMgYnViYmxlIHVwIHVudGlsIHRoZXkgYmVjb21lIHllYXJzXG4gICAgICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB0aGVyZSBpcyBubyBjb250ZXh0LWZyZWUgY29udmVyc2lvbiBiZXR3ZWVuIGhvdXJzIGFuZCBkYXlzXG4gICAgICAgIC8vICh0aGluayBvZiBjbG9jayBjaGFuZ2VzKVxuICAgICAgICAvLyBhbmQgYWxzbyBub3QgYmV0d2VlbiBkYXlzIGFuZCBtb250aHMgKDI4LTMxIGRheXMgcGVyIG1vbnRoKVxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzZWNvbmRzID0gYWJzJDEodGhpcy5fbWlsbGlzZWNvbmRzKSAvIDEwMDAsXG4gICAgICAgICAgICBkYXlzID0gYWJzJDEodGhpcy5fZGF5cyksXG4gICAgICAgICAgICBtb250aHMgPSBhYnMkMSh0aGlzLl9tb250aHMpLFxuICAgICAgICAgICAgbWludXRlcyxcbiAgICAgICAgICAgIGhvdXJzLFxuICAgICAgICAgICAgeWVhcnMsXG4gICAgICAgICAgICBzLFxuICAgICAgICAgICAgdG90YWwgPSB0aGlzLmFzU2Vjb25kcygpLFxuICAgICAgICAgICAgdG90YWxTaWduLFxuICAgICAgICAgICAgeW1TaWduLFxuICAgICAgICAgICAgZGF5c1NpZ24sXG4gICAgICAgICAgICBobXNTaWduO1xuXG4gICAgICAgIGlmICghdG90YWwpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIHNhbWUgYXMgQyMncyAoTm9kYSkgYW5kIHB5dGhvbiAoaXNvZGF0ZSkuLi5cbiAgICAgICAgICAgIC8vIGJ1dCBub3Qgb3RoZXIgSlMgKGdvb2cuZGF0ZSlcbiAgICAgICAgICAgIHJldHVybiAnUDBEJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDM2MDAgc2Vjb25kcyAtPiA2MCBtaW51dGVzIC0+IDEgaG91clxuICAgICAgICBtaW51dGVzID0gYWJzRmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICAgICAgaG91cnMgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBzZWNvbmRzICU9IDYwO1xuICAgICAgICBtaW51dGVzICU9IDYwO1xuXG4gICAgICAgIC8vIDEyIG1vbnRocyAtPiAxIHllYXJcbiAgICAgICAgeWVhcnMgPSBhYnNGbG9vcihtb250aHMgLyAxMik7XG4gICAgICAgIG1vbnRocyAlPSAxMjtcblxuICAgICAgICAvLyBpbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZG9yZGlsbGUvbW9tZW50LWlzb2R1cmF0aW9uL2Jsb2IvbWFzdGVyL21vbWVudC5pc29kdXJhdGlvbi5qc1xuICAgICAgICBzID0gc2Vjb25kcyA/IHNlY29uZHMudG9GaXhlZCgzKS5yZXBsYWNlKC9cXC4/MCskLywgJycpIDogJyc7XG5cbiAgICAgICAgdG90YWxTaWduID0gdG90YWwgPCAwID8gJy0nIDogJyc7XG4gICAgICAgIHltU2lnbiA9IHNpZ24odGhpcy5fbW9udGhzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcbiAgICAgICAgZGF5c1NpZ24gPSBzaWduKHRoaXMuX2RheXMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuICAgICAgICBobXNTaWduID0gc2lnbih0aGlzLl9taWxsaXNlY29uZHMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0b3RhbFNpZ24gK1xuICAgICAgICAgICAgJ1AnICtcbiAgICAgICAgICAgICh5ZWFycyA/IHltU2lnbiArIHllYXJzICsgJ1knIDogJycpICtcbiAgICAgICAgICAgIChtb250aHMgPyB5bVNpZ24gKyBtb250aHMgKyAnTScgOiAnJykgK1xuICAgICAgICAgICAgKGRheXMgPyBkYXlzU2lnbiArIGRheXMgKyAnRCcgOiAnJykgK1xuICAgICAgICAgICAgKGhvdXJzIHx8IG1pbnV0ZXMgfHwgc2Vjb25kcyA/ICdUJyA6ICcnKSArXG4gICAgICAgICAgICAoaG91cnMgPyBobXNTaWduICsgaG91cnMgKyAnSCcgOiAnJykgK1xuICAgICAgICAgICAgKG1pbnV0ZXMgPyBobXNTaWduICsgbWludXRlcyArICdNJyA6ICcnKSArXG4gICAgICAgICAgICAoc2Vjb25kcyA/IGhtc1NpZ24gKyBzICsgJ1MnIDogJycpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDIgPSBEdXJhdGlvbi5wcm90b3R5cGU7XG5cbiAgICBwcm90byQyLmlzVmFsaWQgPSBpc1ZhbGlkJDE7XG4gICAgcHJvdG8kMi5hYnMgPSBhYnM7XG4gICAgcHJvdG8kMi5hZGQgPSBhZGQkMTtcbiAgICBwcm90byQyLnN1YnRyYWN0ID0gc3VidHJhY3QkMTtcbiAgICBwcm90byQyLmFzID0gYXM7XG4gICAgcHJvdG8kMi5hc01pbGxpc2Vjb25kcyA9IGFzTWlsbGlzZWNvbmRzO1xuICAgIHByb3RvJDIuYXNTZWNvbmRzID0gYXNTZWNvbmRzO1xuICAgIHByb3RvJDIuYXNNaW51dGVzID0gYXNNaW51dGVzO1xuICAgIHByb3RvJDIuYXNIb3VycyA9IGFzSG91cnM7XG4gICAgcHJvdG8kMi5hc0RheXMgPSBhc0RheXM7XG4gICAgcHJvdG8kMi5hc1dlZWtzID0gYXNXZWVrcztcbiAgICBwcm90byQyLmFzTW9udGhzID0gYXNNb250aHM7XG4gICAgcHJvdG8kMi5hc1F1YXJ0ZXJzID0gYXNRdWFydGVycztcbiAgICBwcm90byQyLmFzWWVhcnMgPSBhc1llYXJzO1xuICAgIHByb3RvJDIudmFsdWVPZiA9IHZhbHVlT2YkMTtcbiAgICBwcm90byQyLl9idWJibGUgPSBidWJibGU7XG4gICAgcHJvdG8kMi5jbG9uZSA9IGNsb25lJDE7XG4gICAgcHJvdG8kMi5nZXQgPSBnZXQkMjtcbiAgICBwcm90byQyLm1pbGxpc2Vjb25kcyA9IG1pbGxpc2Vjb25kcztcbiAgICBwcm90byQyLnNlY29uZHMgPSBzZWNvbmRzO1xuICAgIHByb3RvJDIubWludXRlcyA9IG1pbnV0ZXM7XG4gICAgcHJvdG8kMi5ob3VycyA9IGhvdXJzO1xuICAgIHByb3RvJDIuZGF5cyA9IGRheXM7XG4gICAgcHJvdG8kMi53ZWVrcyA9IHdlZWtzO1xuICAgIHByb3RvJDIubW9udGhzID0gbW9udGhzO1xuICAgIHByb3RvJDIueWVhcnMgPSB5ZWFycztcbiAgICBwcm90byQyLmh1bWFuaXplID0gaHVtYW5pemU7XG4gICAgcHJvdG8kMi50b0lTT1N0cmluZyA9IHRvSVNPU3RyaW5nJDE7XG4gICAgcHJvdG8kMi50b1N0cmluZyA9IHRvSVNPU3RyaW5nJDE7XG4gICAgcHJvdG8kMi50b0pTT04gPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIubG9jYWxlID0gbG9jYWxlO1xuICAgIHByb3RvJDIubG9jYWxlRGF0YSA9IGxvY2FsZURhdGE7XG5cbiAgICBwcm90byQyLnRvSXNvU3RyaW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAndG9Jc29TdHJpbmcoKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHRvSVNPU3RyaW5nKCkgaW5zdGVhZCAobm90aWNlIHRoZSBjYXBpdGFscyknLFxuICAgICAgICB0b0lTT1N0cmluZyQxXG4gICAgKTtcbiAgICBwcm90byQyLmxhbmcgPSBsYW5nO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1gnLCAwLCAwLCAndW5peCcpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd4JywgMCwgMCwgJ3ZhbHVlT2YnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3gnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignWCcsIG1hdGNoVGltZXN0YW1wKTtcbiAgICBhZGRQYXJzZVRva2VuKCdYJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKHBhcnNlRmxvYXQoaW5wdXQpICogMTAwMCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbigneCcsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZSh0b0ludChpbnB1dCkpO1xuICAgIH0pO1xuXG4gICAgLy8hIG1vbWVudC5qc1xuXG4gICAgaG9va3MudmVyc2lvbiA9ICcyLjMwLjEnO1xuXG4gICAgc2V0SG9va0NhbGxiYWNrKGNyZWF0ZUxvY2FsKTtcblxuICAgIGhvb2tzLmZuID0gcHJvdG87XG4gICAgaG9va3MubWluID0gbWluO1xuICAgIGhvb2tzLm1heCA9IG1heDtcbiAgICBob29rcy5ub3cgPSBub3c7XG4gICAgaG9va3MudXRjID0gY3JlYXRlVVRDO1xuICAgIGhvb2tzLnVuaXggPSBjcmVhdGVVbml4O1xuICAgIGhvb2tzLm1vbnRocyA9IGxpc3RNb250aHM7XG4gICAgaG9va3MuaXNEYXRlID0gaXNEYXRlO1xuICAgIGhvb2tzLmxvY2FsZSA9IGdldFNldEdsb2JhbExvY2FsZTtcbiAgICBob29rcy5pbnZhbGlkID0gY3JlYXRlSW52YWxpZDtcbiAgICBob29rcy5kdXJhdGlvbiA9IGNyZWF0ZUR1cmF0aW9uO1xuICAgIGhvb2tzLmlzTW9tZW50ID0gaXNNb21lbnQ7XG4gICAgaG9va3Mud2Vla2RheXMgPSBsaXN0V2Vla2RheXM7XG4gICAgaG9va3MucGFyc2Vab25lID0gY3JlYXRlSW5ab25lO1xuICAgIGhvb2tzLmxvY2FsZURhdGEgPSBnZXRMb2NhbGU7XG4gICAgaG9va3MuaXNEdXJhdGlvbiA9IGlzRHVyYXRpb247XG4gICAgaG9va3MubW9udGhzU2hvcnQgPSBsaXN0TW9udGhzU2hvcnQ7XG4gICAgaG9va3Mud2Vla2RheXNNaW4gPSBsaXN0V2Vla2RheXNNaW47XG4gICAgaG9va3MuZGVmaW5lTG9jYWxlID0gZGVmaW5lTG9jYWxlO1xuICAgIGhvb2tzLnVwZGF0ZUxvY2FsZSA9IHVwZGF0ZUxvY2FsZTtcbiAgICBob29rcy5sb2NhbGVzID0gbGlzdExvY2FsZXM7XG4gICAgaG9va3Mud2Vla2RheXNTaG9ydCA9IGxpc3RXZWVrZGF5c1Nob3J0O1xuICAgIGhvb2tzLm5vcm1hbGl6ZVVuaXRzID0gbm9ybWFsaXplVW5pdHM7XG4gICAgaG9va3MucmVsYXRpdmVUaW1lUm91bmRpbmcgPSBnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZztcbiAgICBob29rcy5yZWxhdGl2ZVRpbWVUaHJlc2hvbGQgPSBnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQ7XG4gICAgaG9va3MuY2FsZW5kYXJGb3JtYXQgPSBnZXRDYWxlbmRhckZvcm1hdDtcbiAgICBob29rcy5wcm90b3R5cGUgPSBwcm90bztcblxuICAgIC8vIGN1cnJlbnRseSBIVE1MNSBpbnB1dCB0eXBlIG9ubHkgc3VwcG9ydHMgMjQtaG91ciBmb3JtYXRzXG4gICAgaG9va3MuSFRNTDVfRk1UID0ge1xuICAgICAgICBEQVRFVElNRV9MT0NBTDogJ1lZWVktTU0tRERUSEg6bW0nLCAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgLz5cbiAgICAgICAgREFURVRJTUVfTE9DQUxfU0VDT05EUzogJ1lZWVktTU0tRERUSEg6bW06c3MnLCAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgc3RlcD1cIjFcIiAvPlxuICAgICAgICBEQVRFVElNRV9MT0NBTF9NUzogJ1lZWVktTU0tRERUSEg6bW06c3MuU1NTJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIHN0ZXA9XCIwLjAwMVwiIC8+XG4gICAgICAgIERBVEU6ICdZWVlZLU1NLUREJywgLy8gPGlucHV0IHR5cGU9XCJkYXRlXCIgLz5cbiAgICAgICAgVElNRTogJ0hIOm1tJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgLz5cbiAgICAgICAgVElNRV9TRUNPTkRTOiAnSEg6bW06c3MnLCAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiBzdGVwPVwiMVwiIC8+XG4gICAgICAgIFRJTUVfTVM6ICdISDptbTpzcy5TU1MnLCAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiBzdGVwPVwiMC4wMDFcIiAvPlxuICAgICAgICBXRUVLOiAnR0dHRy1bV11XVycsIC8vIDxpbnB1dCB0eXBlPVwid2Vla1wiIC8+XG4gICAgICAgIE1PTlRIOiAnWVlZWS1NTScsIC8vIDxpbnB1dCB0eXBlPVwibW9udGhcIiAvPlxuICAgIH07XG5cbiAgICByZXR1cm4gaG9va3M7XG5cbn0pKSk7XG4iLCJpbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcbmltcG9ydCB7IEZlZWRiYWNrUmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbGlicy9iYWNrZW5kLWNsaWVudFwiO1xuXG5leHBvcnQgY29uc3QgRmVlZGJhY2tJdGVtSG92ZXJlZCA9ICh7XG4gIGZlZWRiYWNrLFxufToge1xuICBmZWVkYmFjazogRmVlZGJhY2tSZXNwb25zZTtcbn0pID0+IHtcbiAgY29uc3QgeyB1c2VyLCBjcmVhdGVkQXQsIGNvbW1lbnQgfSA9IGZlZWRiYWNrO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJwLTNcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1iYXNlbGluZSBnYXAtMiB6LTEwXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImt1bWJoLW1lZGl1bSB0ZXh0LXNtIHRleHQtZ3JheS1mZWVkYmFjay0yMDAgd2hpdGVzcGFjZS1ub3dyYXAgei0xMFwiPlxuICAgICAgICAgIHt1c2VyPy5mdWxsTmFtZSB8fCBgJHt1c2VyPy5maXJzdE5hbWV9ICR7dXNlcj8ubGFzdE5hbWV9YH1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJrdW1iaC1yZWd1bGFyIHRleHQtWzEwcHhdIGxlYWRpbmctWzEycHhdIHRleHQtZ3JheS1mZWVkYmFjay0zMDAgd2hpdGVzcGFjZS1ub3dyYXBcIj5cbiAgICAgICAgICB7bW9tZW50KGNyZWF0ZWRBdCkuZnJvbU5vdygpfVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMSBvdmVyZmxvdy1oaWRkZW4gdy1bMjQwcHhdXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImt1bWJoLXJlZ3VsYXIgdGV4dC1bMTZweF0gbGVhZGluZy01IHRleHQtd2hpdGUgbGluZS1jbGFtcC0yXCI+XG4gICAgICAgICAge2NvbW1lbnR9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufTtcbiIsInZhciBpbWcgPSBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzI0JyBoZWlnaHQ9JzI1JyB2aWV3Qm94PScwIDAgMjQgMjUnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UlM2NwYXRoIGQ9J00xOC43MDcxIDcuMjA3MTFDMTkuMDk3NiA2LjgxNjU4IDE5LjA5NzYgNi4xODM0MiAxOC43MDcxIDUuNzkyODlDMTguMzE2NiA1LjQwMjM3IDE3LjY4MzQgNS40MDIzNyAxNy4yOTI5IDUuNzkyODlMMTIgMTEuMDg1OEw2LjcwNzExIDUuNzkyODlDNi4zMTY1OCA1LjQwMjM3IDUuNjgzNDIgNS40MDIzNyA1LjI5Mjg5IDUuNzkyODlDNC45MDIzNyA2LjE4MzQyIDQuOTAyMzcgNi44MTY1OCA1LjI5Mjg5IDcuMjA3MTFMMTAuNTg1OCAxMi41TDUuMjkyODkgMTcuNzkyOUM0LjkwMjM3IDE4LjE4MzQgNC45MDIzNyAxOC44MTY2IDUuMjkyODkgMTkuMjA3MUM1LjY4MzQyIDE5LjU5NzYgNi4zMTY1OCAxOS41OTc2IDYuNzA3MTEgMTkuMjA3MUwxMiAxMy45MTQyTDE3LjI5MjkgMTkuMjA3MUMxNy42ODM0IDE5LjU5NzYgMTguMzE2NiAxOS41OTc2IDE4LjcwNzEgMTkuMjA3MUMxOS4wOTc2IDE4LjgxNjYgMTkuMDk3NiAxOC4xODM0IDE4LjcwNzEgMTcuNzkyOUwxMy40MTQyIDEyLjVMMTguNzA3MSA3LjIwNzExWicgZmlsbD0nd2hpdGUnLyUzZSUzYy9zdmclM2VcIjtcbiAgZXhwb3J0IGRlZmF1bHQgaW1nOyIsImltcG9ydCBDbG9zZSBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2ljb25zL2Nsb3NlLnN2Z1wiO1xuXG5leHBvcnQgY29uc3QgQ2xvc2VCdXR0b24gPSAoe1xuICBzaXplLFxuICBvbkNsaWNrLFxufToge1xuICBzaXplOiBcInNtYWxsXCIgfCBcImxhcmdlXCI7XG4gIG9uQ2xpY2s6ICgpID0+IHZvaWQ7XG59KSA9PiB7XG4gIGNvbnN0IHNpemVDbGFzcyA9IHNpemUgPT09IFwic21hbGxcIiA/IFwidy01IGgtNVwiIDogXCJ3LTYgaC02XCI7XG5cbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBvbkNsaWNrKCk7XG4gICAgICB9fVxuICAgID5cbiAgICAgIDxpbWcgc3JjPXtDbG9zZX0gY2xhc3NOYW1lPXtzaXplQ2xhc3N9IC8+XG4gICAgPC9idXR0b24+XG4gICk7XG59O1xuIiwiaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50XCI7XG5pbXBvcnQge1xuICBGZWVkYmFja1Jlc3BvbnNlLFxuICBSZXBseVJlc3BvbnNlLFxufSBmcm9tIFwiLi4vLi4vLi4vLi4vbGlicy9iYWNrZW5kLWNsaWVudFwiO1xuXG5leHBvcnQgY29uc3QgUmVwbHlJdGVtID0gKHtcbiAgcmVwbHksXG59OiB7XG4gIHJlcGx5OiBSZXBseVJlc3BvbnNlIHwgRmVlZGJhY2tSZXNwb25zZTtcbn0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZmxleC1iYXNlbGluZSBnYXAtMlwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJrdW1iaC1tZWRpdW0gdGV4dC1zbSB0ZXh0LWdyYXktZmVlZGJhY2stMjAwIHdoaXRlc3BhY2Utbm93cmFwIHotMTBcIj5cbiAgICAgICAgICB7cmVwbHkudXNlci5maXJzdE5hbWV9IHtyZXBseS51c2VyLmxhc3ROYW1lfVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImt1bWJoLXJlZ3VsYXIgdGV4dC1bMTBweF0gbGVhZGluZy1bMTJweF0gdGV4dC1ncmF5LWZlZWRiYWNrLTMwMCB3aGl0ZXNwYWNlLW5vd3JhcFwiPlxuICAgICAgICAgIHttb21lbnQocmVwbHkuY3JlYXRlZEF0KS5mcm9tTm93KCl9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPVwia3VtYmgtcmVndWxhciB0ZXh0LVsxNHB4XSBsZWFkaW5nLTUgdGV4dC13aGl0ZVwiPlxuICAgICAgICB7cmVwbHkuY29tbWVudH1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iLCJpbXBvcnQgeyBDaGFuZ2VFdmVudCwgS2V5Ym9hcmRFdmVudCwgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmV4cG9ydCBjb25zdCBGZWVkYmFja1RleHRBcmVhID0gKHtcbiAgdmFsdWUsXG4gIHNldFZhbHVlLFxuICBvblN1Ym1pdCxcbiAgaGFuZGxlUmVzaXplLFxuICBpc0FuaW1hdGVkLFxuICBpc0RhcmssXG59OiB7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIHNldFZhbHVlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgb25TdWJtaXQ6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICBoYW5kbGVSZXNpemU/OiAoKSA9PiB2b2lkO1xuICBpc0FuaW1hdGVkPzogYm9vbGVhbjtcbiAgaXNEYXJrPzogYm9vbGVhbjtcbn0pID0+IHtcbiAgY29uc3QgdGV4dGFyZWFSZWYgPSB1c2VSZWY8SFRNTFRleHRBcmVhRWxlbWVudD4obnVsbCk7XG5cbiAgY29uc3QgW2lzT3BlbmluZywgc2V0SXNPcGVuaW5nXSA9IHVzZVN0YXRlKGlzQW5pbWF0ZWQpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzQW5pbWF0ZWQpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0ZXh0YXJlYVJlZi5jdXJyZW50Py5mb2N1cygpO1xuICAgICAgICBzZXRJc09wZW5pbmcoZmFsc2UpO1xuICAgICAgfSwgMzAwKTtcbiAgICB9XG4gIH0sIFtpc0FuaW1hdGVkXSk7XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKGV2ZW50OiBDaGFuZ2VFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4ge1xuICAgIHNldFZhbHVlKGV2ZW50LnRhcmdldC52YWx1ZSk7XG5cbiAgICBpZiAodGV4dGFyZWFSZWYuY3VycmVudCkge1xuICAgICAgaWYgKGV2ZW50LnRhcmdldC52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRleHRhcmVhUmVmLmN1cnJlbnQuc3R5bGUuaGVpZ2h0ID0gXCJhdXRvXCI7IC8vIFJlc2V0IGhlaWdodCB0byBjYWxjdWxhdGUgc2Nyb2xsSGVpZ2h0XG4gICAgICAgIHRleHRhcmVhUmVmLmN1cnJlbnQuc3R5bGUuaGVpZ2h0ID0gYCR7dGV4dGFyZWFSZWYuY3VycmVudC5zY3JvbGxIZWlnaHR9cHhgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dGFyZWFSZWYuY3VycmVudC5zdHlsZS5oZWlnaHQgPSBcIjI5cHhcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhhbmRsZVJlc2l6ZSkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGhhbmRsZVJlc2l6ZSgpO1xuICAgICAgfSwgMTAwKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4ge1xuICAgIGlmIChldmVudC5rZXkgPT09IFwiRW50ZXJcIiAmJiAhZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBoYW5kbGVTdWJtaXQoKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gXCJFbnRlclwiICYmIGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVTdWJtaXQgPSAoKSA9PiB7XG4gICAgb25TdWJtaXQodmFsdWUpO1xuICAgIHNldFZhbHVlKFwiXCIpO1xuICAgIGlmICghdGV4dGFyZWFSZWYuY3VycmVudCkgcmV0dXJuO1xuICAgIHRleHRhcmVhUmVmLmN1cnJlbnQuc3R5bGUuaGVpZ2h0ID0gXCIyOXB4XCI7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2BcbiAgICAgICAgJHtcbiAgICAgICAgICB2YWx1ZS5sZW5ndGggPiAwXG4gICAgICAgICAgICA/IFwiY29tbWVudC1pbnB1dC1jb250YWluZXJcIlxuICAgICAgICAgICAgOiBcImNvbW1lbnQtaW5wdXQtY29udGFpbmVyLWVtcHR5XCJcbiAgICAgICAgfSAgJHtpc09wZW5pbmcgPyBcImNvbW1lbnQtaW5wdXQtY29udGFpbmVyLW9wZW5pbmdcIiA6IFwiXCJ9ICAke1xuICAgICAgICBpc0RhcmsgPyBcImJnLWdyYXktZmVlZGJhY2stNzUwXCIgOiBcImJnLWdyYXktZmVlZGJhY2stNzAwXCJcbiAgICAgIH1gfVxuICAgID5cbiAgICAgIDx0ZXh0YXJlYVxuICAgICAgICByZWY9e3RleHRhcmVhUmVmfVxuICAgICAgICBjbGFzc05hbWU9e2Bjb21tZW50LWlucHV0ICR7XG4gICAgICAgICAgdmFsdWUubGVuZ3RoID4gMCA/IFwiY29tbWVudC1pbnB1dC1maWxsZWRcIiA6IFwiXCJcbiAgICAgICAgfWB9XG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgICBwbGFjZWhvbGRlcj1cIkFqb3V0ZXIgdW4gY29tbWVudGFpcmVcIlxuICAgICAgICByb3dzPXsxfVxuICAgICAgLz5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHt2YWx1ZS5sZW5ndGggPiAwID8gXCJidXR0b25zLWNvbnRhaW5lclwiIDogXCJcIn1gfT5cbiAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJidXR0b24tc2VuZFwiIG9uQ2xpY2s9e2hhbmRsZVN1Ym1pdH0+XG4gICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgZmlsbD17dmFsdWUubGVuZ3RoID4gMCA/IFwiIzAwODVGRlwiIDogXCIjZmZmXCJ9XG4gICAgICAgICAgICBoZWlnaHQ9XCIxNlwiXG4gICAgICAgICAgICB3aWR0aD1cIjE2XCJcbiAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxuICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHBhdGggZD1cIk0xNS45NjQuNjg2YS41LjUgMCAwIDAtLjY1LS42NUwuNzY3IDUuODU1SC43NjZsLS40NTIuMThhLjUuNSAwIDAgMC0uMDgyLjg4N2wuNDEuMjYuMDAxLjAwMiA0Ljk5NSAzLjE3OCAzLjE3OCA0Ljk5NS4wMDIuMDAyLjI2LjQxYS41LjUgMCAwIDAgLjg4Ni0uMDgzbDYtMTVabS0xLjgzMyAxLjg5TDYuNjM3IDEwLjA3bC0uMjE1LS4zMzhhLjUuNSAwIDAgMC0uMTU0LS4xNTRsLS4zMzgtLjIxNSA3LjQ5NC03LjQ5NCAxLjE3OC0uNDcxLS40NyAxLjE3OFpcIiAvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufTtcbiIsImV4cG9ydCBjb25zdCBNZW51SXRlbSA9ICh7XG4gIGxhYmVsLFxuICBvbkNsaWNrLFxufToge1xuICBsYWJlbDogc3RyaW5nO1xuICBvbkNsaWNrOiAoKSA9PiB2b2lkO1xufSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzTmFtZT1cInotMSBtLTEgcHgtMiBweS0xIGhvdmVyOmJnLXByaW1hcnktZmVlZGJhY2stNDAwIGhvdmVyOm9wYWNpdHktMTAwIHJvdW5kZWQtbGdcIlxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICA+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJrdW1iaC1yZWd1bGFyIHRleHQtc20gdGV4dC13aGl0ZVwiPntsYWJlbH08L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICk7XG59O1xuIiwidmFyIGltZyA9IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMjUnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNSAyNCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSUzY3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMC4zMzM1IDEyQzEwLjMzMzUgMTAuODk1NCAxMS4yMjg5IDEwIDEyLjMzMzUgMTBDMTMuNDM4MSAxMCAxNC4zMzM1IDEwLjg5NTQgMTQuMzMzNSAxMkMxNC4zMzM1IDEzLjEwNDYgMTMuNDM4MSAxNCAxMi4zMzM1IDE0QzExLjIyODkgMTQgMTAuMzMzNSAxMy4xMDQ2IDEwLjMzMzUgMTJaJyBmaWxsPSd3aGl0ZScvJTNlJTNjcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE3LjMzMzUgMTJDMTcuMzMzNSAxMC44OTU0IDE4LjIyODkgMTAgMTkuMzMzNSAxMEMyMC40MzgxIDEwIDIxLjMzMzUgMTAuODk1NCAyMS4zMzM1IDEyQzIxLjMzMzUgMTMuMTA0NiAyMC40MzgxIDE0IDE5LjMzMzUgMTRDMTguMjI4OSAxNCAxNy4zMzM1IDEzLjEwNDYgMTcuMzMzNSAxMlonIGZpbGw9J3doaXRlJy8lM2UlM2NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMy4zMzM1IDEyQzMuMzMzNSAxMC44OTU0IDQuMjI4OTMgMTAgNS4zMzM1IDEwQzYuNDM4MDcgMTAgNy4zMzM1IDEwLjg5NTQgNy4zMzM1IDEyQzcuMzMzNSAxMy4xMDQ2IDYuNDM4MDcgMTQgNS4zMzM1IDE0QzQuMjI4OTMgMTQgMy4zMzM1IDEzLjEwNDYgMy4zMzM1IDEyWicgZmlsbD0nd2hpdGUnLyUzZSUzYy9zdmclM2VcIjtcbiAgZXhwb3J0IGRlZmF1bHQgaW1nOyIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gXCIuL01lbnVJdGVtXCI7XG5pbXBvcnQgeyB1c2VGZWVkYmFja0NvbnRleHQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29udGV4dHMvRmVlZGJhY2tDb250ZXh0XCI7XG5pbXBvcnQge1xuICB1c2VEZWxldGVGZWVkYmFjayxcbiAgdXNlVXBkYXRlRmVlZGJhY2ssXG59IGZyb20gXCIuLi8uLi8uLi8uLi9zZXJ2aWNlcy9mZWVkYmFja1wiO1xuaW1wb3J0IHsgRmVlZGJhY2tSZXNwb25zZSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9saWJzL2JhY2tlbmQtY2xpZW50XCI7XG5pbXBvcnQgRG90c0hvcml6b250YWwgZnJvbSBcIi4uLy4uLy4uLy4uL2Fzc2V0cy9pY29ucy9kb3RzLWhvcml6b250YWwuc3ZnXCI7XG5cbmV4cG9ydCBjb25zdCBNZW51QnV0dG9uID0gKHtcbiAgZmVlZGJhY2ssXG4gIHNldElzSG92ZXJlZCxcbn06IHtcbiAgZmVlZGJhY2s6IEZlZWRiYWNrUmVzcG9uc2U7XG4gIHNldElzSG92ZXJlZDogKGlzSG92ZXJlZDogYm9vbGVhbikgPT4gdm9pZDtcbn0pID0+IHtcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgeyByb290RGlyLCBzZXRTZWxlY3RlZEZlZWRiYWNrIH0gPSB1c2VGZWVkYmFja0NvbnRleHQoKTtcbiAgY29uc3QgeyBtdXRhdGU6IGRlbGV0ZUZlZWRiYWNrIH0gPSB1c2VEZWxldGVGZWVkYmFjaygpO1xuICBjb25zdCB7IG11dGF0ZTogdXBkYXRlRmVlZGJhY2sgfSA9IHVzZVVwZGF0ZUZlZWRiYWNrKCk7XG5cbiAgY29uc3QgcGF0aCA9IGB2c2NvZGU6Ly9maWxlJHtyb290RGlyICsgZmVlZGJhY2suZWxlbWVudElkfWA7XG5cbiAgY29uc3QgaGFuZGxlUmVzb2x2ZUZlZWRiYWNrID0gKCkgPT4ge1xuICAgIHVwZGF0ZUZlZWRiYWNrKFxuICAgICAge1xuICAgICAgICBmZWVkYmFja0lkOiBmZWVkYmFjay5pZCxcbiAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgIGlzUmVzb2x2ZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICBzZXRJc09wZW4oZmFsc2UpO1xuICAgICAgICAgIHNldElzSG92ZXJlZChmYWxzZSk7XG4gICAgICAgICAgc2V0U2VsZWN0ZWRGZWVkYmFjayhudWxsKTtcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICApO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxpbWdcbiAgICAgICAgc3JjPXtEb3RzSG9yaXpvbnRhbH1cbiAgICAgICAgY2xhc3NOYW1lPVwidy00IGgtNFwiXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHNldElzT3BlbigobykgPT4gIW8pfVxuICAgICAgLz5cbiAgICAgIHtpc09wZW4gJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIHRvcC04IHJpZ2h0LTIgei0xMSBmbGV4IGZsZXgtY29sICAgYmctZ3JheS1mZWVkYmFjay04MDAgcm91bmRlZC1sZ1wiPlxuICAgICAgICAgIDxNZW51SXRlbVxuICAgICAgICAgICAgbGFiZWw9XCJPdXZyaXIgZGFucyBWU2NvZGVcIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICB3aW5kb3cub3BlbihwYXRoLCBcIl9ibGFua1wiKTtcbiAgICAgICAgICAgICAgc2V0SXNPcGVuKGZhbHNlKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8TWVudUl0ZW0gbGFiZWw9XCJSw6lzb2x1XCIgb25DbGljaz17aGFuZGxlUmVzb2x2ZUZlZWRiYWNrfSAvPlxuICAgICAgICAgIDxNZW51SXRlbVxuICAgICAgICAgICAgbGFiZWw9XCJTdXBwcmltZXJcIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICBkZWxldGVGZWVkYmFjayhmZWVkYmFjaywge1xuICAgICAgICAgICAgICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2V0SXNPcGVuKGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvPlxuICApO1xufTtcbiIsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlRmVlZGJhY2tDb250ZXh0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbnRleHRzL0ZlZWRiYWNrQ29udGV4dFwiO1xuaW1wb3J0IHsgdXNlQ3JlYXRlUmVwbHkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vc2VydmljZXMvZmVlZGJhY2tcIjtcbmltcG9ydCB7IENsb3NlQnV0dG9uIH0gZnJvbSBcIi4uLy4uLy4uL2F0b21zL2J1dHRvbnMvQ2xvc2VCdXR0b25cIjtcbmltcG9ydCB7IFJlcGx5SXRlbSB9IGZyb20gXCIuLi8uLi9yZXBsaWVzL1JlcGx5SXRlbVwiO1xuaW1wb3J0IHsgRmVlZGJhY2tUZXh0QXJlYSB9IGZyb20gXCIuLi9zaGFyZWQvRmVlZGJhY2tUZXh0QXJlYVwiO1xuaW1wb3J0IHsgTWVudUJ1dHRvbiB9IGZyb20gXCIuLi9tZW51L01lbnVCdXR0b25cIjtcbmltcG9ydCB7IEZlZWRiYWNrUmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbGlicy9iYWNrZW5kLWNsaWVudFwiO1xuXG5leHBvcnQgY29uc3QgRmVlZGJhY2tJdGVtU2VsZWN0ZWQgPSAoe1xuICBmZWVkYmFjayxcbiAgc2V0RmVlZGJhY2tIZWlnaHQsXG4gIHNldElzSG92ZXJlZCxcbn06IHtcbiAgZmVlZGJhY2s6IEZlZWRiYWNrUmVzcG9uc2U7XG4gIHNldEZlZWRiYWNrSGVpZ2h0OiAoaGVpZ2h0OiBudW1iZXIpID0+IHZvaWQ7XG4gIHNldElzSG92ZXJlZDogKGlzSG92ZXJlZDogYm9vbGVhbikgPT4gdm9pZDtcbn0pID0+IHtcbiAgY29uc3QgW3JlcGx5LCBzZXRSZXBseV0gPSB1c2VTdGF0ZShcIlwiKTtcblxuICBjb25zdCBmZWVkYmFja1JlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IHsgbXV0YXRlOiBjcmVhdGVSZXBseSB9ID0gdXNlQ3JlYXRlUmVwbHkoZmVlZGJhY2suaWQpO1xuICBjb25zdCB7IHNldFNlbGVjdGVkRmVlZGJhY2sgfSA9IHVzZUZlZWRiYWNrQ29udGV4dCgpO1xuXG4gIGNvbnN0IGhhbmRsZVJlc2l6ZSA9ICgpID0+IHtcbiAgICBpZiAoIWZlZWRiYWNrUmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICBzZXRGZWVkYmFja0hlaWdodChmZWVkYmFja1JlZi5jdXJyZW50LmNsaWVudEhlaWdodCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gKCkgPT4ge1xuICAgIGNyZWF0ZVJlcGx5KHJlcGx5KTtcbiAgfTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChmZWVkYmFja1JlZi5jdXJyZW50KSB7XG4gICAgICBzZXRGZWVkYmFja0hlaWdodChmZWVkYmFja1JlZi5jdXJyZW50LmNsaWVudEhlaWdodCk7XG4gICAgfVxuICB9LCBbZmVlZGJhY2ssIHNldEZlZWRiYWNrSGVpZ2h0XSk7XG5cbiAgY29uc3QgaGFuZGxlQ2xvc2UgPSAoKSA9PiB7XG4gICAgc2V0SXNIb3ZlcmVkKGZhbHNlKTtcbiAgICBzZXRTZWxlY3RlZEZlZWRiYWNrKG51bGwpO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e2ZlZWRiYWNrUmVmfSBjbGFzc05hbWU9XCJ3LWZ1bGxcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIHAtMyAgcmVsYXRpdmUgei0yMFwiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJrdW1iaC1tZWRpdW0gdGV4dC1zbSB0ZXh0LXdoaXRlXCI+Q29tbWVudGFpcmU8L3NwYW4+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBnYXAtMSBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8TWVudUJ1dHRvbiBmZWVkYmFjaz17ZmVlZGJhY2t9IHNldElzSG92ZXJlZD17c2V0SXNIb3ZlcmVkfSAvPlxuICAgICAgICAgIDxDbG9zZUJ1dHRvbiBvbkNsaWNrPXtoYW5kbGVDbG9zZX0gc2l6ZT1cInNtYWxsXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBvdmVyZmxvdy15LWF1dG8gb3ZlcmZsb3cteC1oaWRkZW4gbWF4LWgtWzIyMHB4XSBzY3JvbGxiYXItZGFyayBnYXAtMiBwLTNcIj5cbiAgICAgICAgICB7W2ZlZWRiYWNrLCAuLi5mZWVkYmFjay5yZXBsaWVzXS5tYXAoKHJlcGx5KSA9PiAoXG4gICAgICAgICAgICA8UmVwbHlJdGVtIGtleT17cmVwbHkuaWR9IHJlcGx5PXtyZXBseX0gLz5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibS0zXCI+XG4gICAgICAgICAgPEZlZWRiYWNrVGV4dEFyZWFcbiAgICAgICAgICAgIHZhbHVlPXtyZXBseX1cbiAgICAgICAgICAgIHNldFZhbHVlPXtzZXRSZXBseX1cbiAgICAgICAgICAgIG9uU3VibWl0PXtoYW5kbGVTdWJtaXR9XG4gICAgICAgICAgICBoYW5kbGVSZXNpemU9e2hhbmRsZVJlc2l6ZX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufTtcbiIsImltcG9ydCB7IGZvcndhcmRSZWYsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHtcbiAgRmVlZGJhY2tDcmVhdGVEdG8sXG4gIEZlZWRiYWNrUmVzcG9uc2UsXG59IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9saWJzL2JhY2tlbmQtY2xpZW50XCI7XG5cbmNvbnN0IEZFRURCQUNLX0lOUFVUX1dJRFRIID0gMzQ4O1xuY29uc3QgRkVFREJBQ0tfSVRFTV9XSURUSCA9IDI1NDtcbmNvbnN0IE1BUkdJTiA9IDI0O1xuY29uc3QgSUNPTl9XSURUSCA9IDQ4O1xuXG5leHBvcnQgY29uc3QgRmVlZGJhY2tQb3NpdGlvbmVyID0gZm9yd2FyZFJlZjxcbiAgSFRNTERpdkVsZW1lbnQgfCBudWxsLFxuICB7XG4gICAgZmVlZGJhY2s6IEZlZWRiYWNrUmVzcG9uc2UgfCBGZWVkYmFja0NyZWF0ZUR0bztcbiAgICBpc0VkaXRpbmc/OiBib29sZWFuO1xuICAgIGlzU2VsZWN0ZWQ/OiBib29sZWFuO1xuICAgIGlzSG92ZXJlZD86IGJvb2xlYW47XG4gICAgZmVlZGJhY2tIZWlnaHQ/OiBudW1iZXI7XG4gICAgc2V0U2hvdWxkUmV2ZXJzZT86IChzaG91bGRSZXZlcnNlOiBib29sZWFuKSA9PiB2b2lkO1xuICAgIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIH1cbj4oXG4gIChcbiAgICB7XG4gICAgICBmZWVkYmFjayxcbiAgICAgIGZlZWRiYWNrSGVpZ2h0ID0gMCxcbiAgICAgIGlzRWRpdGluZyxcbiAgICAgIGlzU2VsZWN0ZWQsXG4gICAgICBpc0hvdmVyZWQsXG4gICAgICBzZXRTaG91bGRSZXZlcnNlLFxuICAgICAgY2hpbGRyZW4sXG4gICAgfSxcbiAgICByZWZcbiAgKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IHVzZVJlZjxIVE1MRWxlbWVudCB8IG51bGw+KG51bGwpO1xuICAgIGNvbnN0IFtwb3NpdGlvbiwgc2V0UG9zaXRpb25dID0gdXNlU3RhdGUoe1xuICAgICAgYm90dG9tOiB3aW5kb3cuaW5uZXJIZWlnaHQsXG4gICAgICBsZWZ0OiAwLFxuICAgIH0pO1xuICAgIGNvbnN0IFtpc0luaXRpYWxpemVkLCBzZXRJc0luaXRpYWxpemVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVSZXNpemUgPSAoKSA9PiB7XG4gICAgICAgIGlmICghdGFyZ2V0RWxlbWVudCB8fCAhdGFyZ2V0RWxlbWVudC5jdXJyZW50KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB0YXJnZXRFbGVtZW50LmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgY29uc3QgeyBib3R0b20sIGxlZnQsIGlzT3ZlcmZsb3dpbmdYIH0gPSBnZXRQb3NpdGlvbkluZm9zKHtcbiAgICAgICAgICBmZWVkYmFjayxcbiAgICAgICAgICBmZWVkYmFja0hlaWdodCxcbiAgICAgICAgICBpc1NlbGVjdGVkLFxuICAgICAgICAgIGlzSG92ZXJlZCxcbiAgICAgICAgICBpc0VkaXRpbmcsXG4gICAgICAgICAgZGltZW5zaW9ucyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2V0UG9zaXRpb24oe1xuICAgICAgICAgIGJvdHRvbSxcbiAgICAgICAgICBsZWZ0LFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoc2V0U2hvdWxkUmV2ZXJzZSkgc2V0U2hvdWxkUmV2ZXJzZShpc092ZXJmbG93aW5nWCk7XG4gICAgICAgIHNldElzSW5pdGlhbGl6ZWQodHJ1ZSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBlbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KFxuICAgICAgICBgW2RhdGEtcGF0aD1cIiR7ZmVlZGJhY2suZWxlbWVudElkfVwiXWBcbiAgICAgICk7XG4gICAgICBjb25zdCBlbGVtZW50ID0gZWxlbWVudHNbZmVlZGJhY2suZWxlbWVudEluZGV4XTtcblxuICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgdGFyZ2V0RWxlbWVudC5jdXJyZW50ID0gZWxlbWVudDtcbiAgICAgICAgaGFuZGxlUmVzaXplKCk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIGhhbmRsZVJlc2l6ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIGhhbmRsZVJlc2l6ZSk7XG4gICAgICB9O1xuICAgIH0sIFtcbiAgICAgIGlzU2VsZWN0ZWQsXG4gICAgICBpc0VkaXRpbmcsXG4gICAgICBpc0hvdmVyZWQsXG4gICAgICBmZWVkYmFjayxcbiAgICAgIHNldFNob3VsZFJldmVyc2UsXG4gICAgICBmZWVkYmFja0hlaWdodCxcbiAgICBdKTtcblxuICAgIGlmICghdGFyZ2V0RWxlbWVudCB8fCAhdGFyZ2V0RWxlbWVudC5jdXJyZW50IHx8ICFpc0luaXRpYWxpemVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY3JlYXRlUG9ydGFsKFxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3JlZn1cbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgICAgICAgIGJvdHRvbTogcG9zaXRpb24uYm90dG9tLFxuICAgICAgICAgIGxlZnQ6IHBvc2l0aW9uLmxlZnQsXG4gICAgICAgICAgdHJhbnNpdGlvbjogXCJhbGwgMC4yNXMgZWFzZS1pbi1vdXRcIixcbiAgICAgICAgICB6SW5kZXg6IGlzU2VsZWN0ZWQgfHwgaXNIb3ZlcmVkID8gMTAwMDAwMSA6IDEwMDAwMDAsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvZGl2PixcbiAgICAgIGRvY3VtZW50LmJvZHlcbiAgICApO1xuICB9XG4pO1xuXG5jb25zdCBnZXRQb3NpdGlvbkluZm9zID0gKHtcbiAgZmVlZGJhY2ssXG4gIGRpbWVuc2lvbnMsXG4gIGZlZWRiYWNrSGVpZ2h0LFxuICBpc1NlbGVjdGVkLFxuICBpc0hvdmVyZWQsXG4gIGlzRWRpdGluZyxcbn06IHtcbiAgZmVlZGJhY2s6IEZlZWRiYWNrUmVzcG9uc2UgfCBGZWVkYmFja0NyZWF0ZUR0bztcbiAgZGltZW5zaW9uczogRE9NUmVjdDtcbiAgZmVlZGJhY2tIZWlnaHQ6IG51bWJlcjtcbiAgaXNTZWxlY3RlZD86IGJvb2xlYW47XG4gIGlzSG92ZXJlZD86IGJvb2xlYW47XG4gIGlzRWRpdGluZz86IGJvb2xlYW47XG59KSA9PiB7XG4gIGNvbnN0IHRhcmdldFdpZHRoID0gZGltZW5zaW9ucy53aWR0aCB8fCAwO1xuICBjb25zdCB0YXJnZXRIZWlnaHQgPSBkaW1lbnNpb25zLmhlaWdodCB8fCAwO1xuXG4gIGNvbnN0IHdpZHRoUmF0aW8gPSBmZWVkYmFjay5lbGVtZW50V2lkdGhcbiAgICA/IGZlZWRiYWNrLmVsZW1lbnRXaWR0aCAvIHRhcmdldFdpZHRoXG4gICAgOiAxO1xuICBjb25zdCBoZWlnaHRSYXRpbyA9IGZlZWRiYWNrLmVsZW1lbnRIZWlnaHRcbiAgICA/IGZlZWRiYWNrLmVsZW1lbnRIZWlnaHQgLyB0YXJnZXRIZWlnaHRcbiAgICA6IDE7XG5cbiAgY29uc3QgcmVmZXJlbmNlUG9zaXRpb25MZWZ0ID1cbiAgICBmZWVkYmFjay54IC8gd2lkdGhSYXRpbyArIGRpbWVuc2lvbnMubGVmdCArIHdpbmRvdy5zY3JvbGxYO1xuICBjb25zdCByZWZlcmVuY2VQb3NpdGlvbkJvdHRvbSA9XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCAtXG4gICAgKGZlZWRiYWNrLnkgLyBoZWlnaHRSYXRpbyArIGRpbWVuc2lvbnMudG9wICsgd2luZG93LnNjcm9sbFkpO1xuXG4gIGNvbnN0IGZlZWRiYWNrV2lkdGggPSBpc0VkaXRpbmcgPyBGRUVEQkFDS19JTlBVVF9XSURUSCA6IEZFRURCQUNLX0lURU1fV0lEVEg7XG5cbiAgY29uc3QgaXNPdmVyZmxvd2luZ1ggPVxuICAgIHJlZmVyZW5jZVBvc2l0aW9uTGVmdCArIGZlZWRiYWNrV2lkdGggKyBNQVJHSU4gPlxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcblxuICBjb25zdCBpc092ZXJmbG93aW5nWSA9XG4gICAgcmVmZXJlbmNlUG9zaXRpb25Cb3R0b20gKyBmZWVkYmFja0hlaWdodCA+XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcblxuICBjb25zdCBvZmZzZXRFZGl0aW5nID0gaXNFZGl0aW5nID8gRkVFREJBQ0tfSU5QVVRfV0lEVEggLSBJQ09OX1dJRFRIIDogMDtcbiAgY29uc3Qgb2Zmc2V0QWN0aXZlID1cbiAgICBpc0hvdmVyZWQgfHwgaXNTZWxlY3RlZCA/IEZFRURCQUNLX0lURU1fV0lEVEggLSBJQ09OX1dJRFRIIDogMDtcblxuICBjb25zdCBwb3NpdGlvbkJvdHRvbSA9XG4gICAgaXNPdmVyZmxvd2luZ1kgJiYgaXNTZWxlY3RlZFxuICAgICAgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0IC0gZmVlZGJhY2tIZWlnaHQgLSBNQVJHSU5cbiAgICAgIDogcmVmZXJlbmNlUG9zaXRpb25Cb3R0b207XG5cbiAgY29uc3QgcG9zaXRpb25MZWZ0ID0gaXNPdmVyZmxvd2luZ1hcbiAgICA/IHJlZmVyZW5jZVBvc2l0aW9uTGVmdCAtIG9mZnNldEVkaXRpbmcgLSBvZmZzZXRBY3RpdmVcbiAgICA6IHJlZmVyZW5jZVBvc2l0aW9uTGVmdDtcblxuICByZXR1cm4ge1xuICAgIGJvdHRvbTogcG9zaXRpb25Cb3R0b20sXG4gICAgbGVmdDogcG9zaXRpb25MZWZ0LFxuICAgIGlzT3ZlcmZsb3dpbmdYLFxuICB9O1xufTtcbiIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VGZWVkYmFja0NvbnRleHQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29udGV4dHMvRmVlZGJhY2tDb250ZXh0XCI7XG5pbXBvcnQgeyBnZXRJbml0aWFscyB9IGZyb20gXCIuLi8uLi8uLi8uLi91dGlscy9nZXRJbml0aWFsc1wiO1xuaW1wb3J0IHsgRmVlZGJhY2tJdGVtSG92ZXJlZCB9IGZyb20gXCIuL0ZlZWRiYWNrSXRlbUhvdmVyZWRcIjtcbmltcG9ydCB7IEZlZWRiYWNrSXRlbVNlbGVjdGVkIH0gZnJvbSBcIi4vRmVlZGJhY2tJdGVtU2VsZWN0ZWRcIjtcbmltcG9ydCB7IEZlZWRiYWNrUG9zaXRpb25lciB9IGZyb20gXCIuLi9zaGFyZWQvRmVlZGJhY2tQb3NpdGlvbmVyXCI7XG5pbXBvcnQgeyBGZWVkYmFja1Jlc3BvbnNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2xpYnMvYmFja2VuZC1jbGllbnRcIjtcblxuZXhwb3J0IGNvbnN0IEZlZWRiYWNrUGluID0gKHsgZmVlZGJhY2sgfTogeyBmZWVkYmFjazogRmVlZGJhY2tSZXNwb25zZSB9KSA9PiB7XG4gIGNvbnN0IFtpc0hvdmVyZWQsIHNldElzSG92ZXJlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtmZWVkYmFja0hlaWdodCwgc2V0RmVlZGJhY2tIZWlnaHRdID0gdXNlU3RhdGUoMCk7XG4gIGNvbnN0IHsgc2VsZWN0ZWRGZWVkYmFjaywgc2V0U2VsZWN0ZWRGZWVkYmFjayB9ID0gdXNlRmVlZGJhY2tDb250ZXh0KCk7XG5cbiAgY29uc3QgaW5pdGlhbHMgPSBnZXRJbml0aWFscyhmZWVkYmFjay51c2VyKTtcblxuICBjb25zdCBpc1NlbGVjdGVkID0gc2VsZWN0ZWRGZWVkYmFjayAmJiBmZWVkYmFjay5pZCA9PT0gc2VsZWN0ZWRGZWVkYmFjay5pZDtcblxuICByZXR1cm4gKFxuICAgIDxGZWVkYmFja1Bvc2l0aW9uZXJcbiAgICAgIGZlZWRiYWNrPXtmZWVkYmFja31cbiAgICAgIGlzU2VsZWN0ZWQ9eyEhaXNTZWxlY3RlZH1cbiAgICAgIGlzSG92ZXJlZD17aXNIb3ZlcmVkfVxuICAgICAgZmVlZGJhY2tIZWlnaHQ9e2lzSG92ZXJlZCAmJiAhaXNTZWxlY3RlZCA/IDk2IDogZmVlZGJhY2tIZWlnaHR9XG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHNldElzSG92ZXJlZCh0cnVlKX1cbiAgICAgICAgb25Nb3VzZUxlYXZlPXsoKSA9PiBzZXRJc0hvdmVyZWQoZmFsc2UpfVxuICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTZWxlY3RlZEZlZWRiYWNrKGZlZWRiYWNrKX1cbiAgICAgICAgY2xhc3NOYW1lPXtgZmVlZGJhY2staXRlbSAke2lzU2VsZWN0ZWQgJiYgXCJzZWxlY3RlZFwifSAke1xuICAgICAgICAgIGZlZWRiYWNrLmlzUmVzb2x2ZWQgJiYgIWlzSG92ZXJlZCAmJiAhaXNTZWxlY3RlZCAmJiBcIm9wYWNpdHktNTBcIlxuICAgICAgICB9YH1cbiAgICAgID5cbiAgICAgICAge2lzU2VsZWN0ZWQgPyAoXG4gICAgICAgICAgPEZlZWRiYWNrSXRlbVNlbGVjdGVkXG4gICAgICAgICAgICBmZWVkYmFjaz17ZmVlZGJhY2t9XG4gICAgICAgICAgICBzZXRGZWVkYmFja0hlaWdodD17c2V0RmVlZGJhY2tIZWlnaHR9XG4gICAgICAgICAgICBzZXRJc0hvdmVyZWQ9e3NldElzSG92ZXJlZH1cbiAgICAgICAgICAvPlxuICAgICAgICApIDogaXNIb3ZlcmVkID8gKFxuICAgICAgICAgIDxGZWVkYmFja0l0ZW1Ib3ZlcmVkIGZlZWRiYWNrPXtmZWVkYmFja30gLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1zaHJpbmstMCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgdy02IGgtNiBtLTNcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtd2hpdGUgZm9udC1tZWRpdW1cIj57aW5pdGlhbHN9PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgPC9GZWVkYmFja1Bvc2l0aW9uZXI+XG4gICk7XG59O1xuIiwiaW1wb3J0IHsgdXNlRmVlZGJhY2tDb250ZXh0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbnRleHRzL0ZlZWRiYWNrQ29udGV4dFwiO1xuaW1wb3J0IHsgRmVlZGJhY2tQaW4gfSBmcm9tIFwiLi4vaXRlbS9GZWVkYmFja1BpblwiO1xuXG5leHBvcnQgY29uc3QgRmVlZGJhY2tQaW5zID0gKCkgPT4ge1xuICBjb25zdCB7IGlzT3BlbiwgZmVlZGJhY2tzIH0gPSB1c2VGZWVkYmFja0NvbnRleHQoKTtcblxuICBpZiAoIWlzT3BlbiB8fCAhZmVlZGJhY2tzKSByZXR1cm4gbnVsbDtcblxuICByZXR1cm4gZmVlZGJhY2tzXG4gICAgLmZpbHRlcigoZmVlZGJhY2spID0+IGZlZWRiYWNrLnBhdGggPT09IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSlcbiAgICAubWFwKChmZWVkYmFjaykgPT4gPEZlZWRiYWNrUGluIGtleT17ZmVlZGJhY2suaWR9IGZlZWRiYWNrPXtmZWVkYmFja30gLz4pO1xufTtcbiIsImV4cG9ydCBjb25zdCBDb21tZW50SWNvbiA9ICgpID0+IHtcbiAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXtgY29tbWVudC1pY29uYH0+PC9kaXY+O1xufTtcbiIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VGZWVkYmFja0NvbnRleHQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29udGV4dHMvRmVlZGJhY2tDb250ZXh0XCI7XG5pbXBvcnQgeyB1c2VDcmVhdGVGZWVkYmFjayB9IGZyb20gXCIuLi8uLi8uLi8uLi9zZXJ2aWNlcy9mZWVkYmFja1wiO1xuaW1wb3J0IHsgQ29tbWVudEljb24gfSBmcm9tIFwiLi4vLi4vLi4vYXRvbXMvaWNvbnMvQ29tbWVudEljb25cIjtcbmltcG9ydCB7IEZlZWRiYWNrUG9zaXRpb25lciB9IGZyb20gXCIuLi9zaGFyZWQvRmVlZGJhY2tQb3NpdGlvbmVyXCI7XG5pbXBvcnQgeyBGZWVkYmFja1RleHRBcmVhIH0gZnJvbSBcIi4uL3NoYXJlZC9GZWVkYmFja1RleHRBcmVhXCI7XG5cbmV4cG9ydCBjb25zdCBGZWVkYmFja0lucHV0ID0gKCkgPT4ge1xuICBjb25zdCB7IG5ld0ZlZWRiYWNrLCByZXNldEZlZWRiYWNrLCBuZXdGZWVkYmFja1JlZiB9ID0gdXNlRmVlZGJhY2tDb250ZXh0KCk7XG4gIGNvbnN0IFtjb21tZW50LCBzZXRDb21tZW50XSA9IHVzZVN0YXRlKG5ld0ZlZWRiYWNrPy5jb21tZW50IHx8IFwiXCIpO1xuICBjb25zdCBbc2hvdWxkUmV2ZXJzZSwgc2V0U2hvdWxkUmV2ZXJzZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3QgeyBtdXRhdGU6IGNyZWF0ZUZlZWRiYWNrIH0gPSB1c2VDcmVhdGVGZWVkYmFjaygpO1xuXG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9ICgpID0+IHtcbiAgICBpZiAoIW5ld0ZlZWRiYWNrKSByZXR1cm47XG4gICAgY3JlYXRlRmVlZGJhY2soe1xuICAgICAgLi4ubmV3RmVlZGJhY2ssXG4gICAgICB4OiBuZXdGZWVkYmFjay54LFxuICAgICAgeTogbmV3RmVlZGJhY2sueSxcbiAgICAgIGNvbW1lbnQsXG4gICAgfSk7XG4gICAgcmVzZXRGZWVkYmFjaygpO1xuICB9O1xuXG4gIGlmICghbmV3RmVlZGJhY2spIHJldHVybiBudWxsO1xuXG4gIHJldHVybiAoXG4gICAgPEZlZWRiYWNrUG9zaXRpb25lclxuICAgICAgcmVmPXtuZXdGZWVkYmFja1JlZn1cbiAgICAgIGZlZWRiYWNrPXtuZXdGZWVkYmFja31cbiAgICAgIHNldFNob3VsZFJldmVyc2U9e3NldFNob3VsZFJldmVyc2V9XG4gICAgICBpc0VkaXRpbmc9e3RydWV9XG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9XCJjb21tZW50LWNvbnRhaW5lclwiXG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgZmxleERpcmVjdGlvbjogc2hvdWxkUmV2ZXJzZSA/IFwicm93LXJldmVyc2VcIiA6IFwicm93XCIsXG4gICAgICAgICAgYWxpZ25JdGVtczogY29tbWVudC5sZW5ndGggPiAwID8gXCJmbGV4LXN0YXJ0XCIgOiBcImZsZXgtZW5kXCIsXG4gICAgICAgICAgdG9wOiBjb21tZW50Lmxlbmd0aCA+IDAgPyBcIjUxcHhcIiA6IFwiMHB4XCIsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxDb21tZW50SWNvbiAvPlxuICAgICAgICA8RmVlZGJhY2tUZXh0QXJlYVxuICAgICAgICAgIHZhbHVlPXtjb21tZW50fVxuICAgICAgICAgIHNldFZhbHVlPXtzZXRDb21tZW50fVxuICAgICAgICAgIG9uU3VibWl0PXtoYW5kbGVTdWJtaXR9XG4gICAgICAgICAgaXNBbmltYXRlZFxuICAgICAgICAgIGlzRGFya1xuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9GZWVkYmFja1Bvc2l0aW9uZXI+XG4gICk7XG59O1xuIiwidmFyIGltZyA9IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSUzY3BhdGggZD0nTTE1IDE4TDkgMTJMMTUgNicgc3Ryb2tlPSclMjNFNkYyRkYnIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM2UlM2Mvc3ZnJTNlXCI7XG4gIGV4cG9ydCBkZWZhdWx0IGltZzsiLCJ2YXIgaW1nID0gXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlJTNjcGF0aCBkPSdNOSAxOEwxNSAxMkw5IDYnIHN0cm9rZT0nJTIzRTZGMkZGJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNlJTNjL3N2ZyUzZVwiO1xuICBleHBvcnQgZGVmYXVsdCBpbWc7IiwiaW1wb3J0IENoZXZyb25MZWZ0IGZyb20gXCIuLi8uLi8uLi9hc3NldHMvaWNvbnMvY2hldnJvbi1sZWZ0LnN2Z1wiO1xuaW1wb3J0IENoZXZyb25SaWdodCBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2ljb25zL2NoZXZyb24tcmlnaHQuc3ZnXCI7XG5cbmV4cG9ydCBjb25zdCBDb2xsYXBzZUJ1dHRvbiA9ICh7XG4gIGlzQ29sbGFwc2VkLFxuICBzZXRJc0NvbGxhcHNlZCxcbn06IHtcbiAgaXNDb2xsYXBzZWQ6IGJvb2xlYW47XG4gIHNldElzQ29sbGFwc2VkOiBSZWFjdC5EaXNwYXRjaDxSZWFjdC5TZXRTdGF0ZUFjdGlvbjxib29sZWFuPj47XG59KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgc2V0SXNDb2xsYXBzZWQoKGMpID0+ICFjKTtcbiAgICAgIH19XG4gICAgICBjbGFzc05hbWU9XCJoLTE2IHctMTYgcm91bmRlZC1mdWxsIGFic29sdXRlIGxlZnQtWy0zMnB4XSBib3R0b20tWzJweF0gZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgcHItNiBiZy1ncmF5LWZlZWRiYWNrLTgwMFwiXG4gICAgPlxuICAgICAgPGltZyBzcmM9e2lzQ29sbGFwc2VkID8gQ2hldnJvbkxlZnQgOiBDaGV2cm9uUmlnaHR9IC8+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIiwidmFyIGltZyA9IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSUzY3BhdGggZD0nTTE2IDE3TDIxIDEyTTIxIDEyTDE2IDdNMjEgMTJIOU0xMiAxN0MxMiAxNy45MyAxMiAxOC4zOTUgMTEuODk3OCAxOC43NzY1QzExLjYyMDQgMTkuODExNyAxMC44MTE3IDIwLjYyMDQgOS43NzY0NiAyMC44OTc4QzkuMzk0OTYgMjEgOC45Mjk5NyAyMSA4IDIxSDcuNUM2LjEwMjE4IDIxIDUuNDAzMjYgMjEgNC44NTE5NSAyMC43NzE2QzQuMTE2ODcgMjAuNDY3MiAzLjUzMjg0IDE5Ljg4MzEgMy4yMjgzNiAxOS4xNDgxQzMgMTguNTk2NyAzIDE3Ljg5NzggMyAxNi41VjcuNUMzIDYuMTAyMTcgMyA1LjQwMzI2IDMuMjI4MzYgNC44NTE5NUMzLjUzMjg0IDQuMTE2ODcgNC4xMTY4NyAzLjUzMjg0IDQuODUxOTUgMy4yMjgzNkM1LjQwMzI2IDMgNi4xMDIxOCAzIDcuNSAzSDhDOC45Mjk5NyAzIDkuMzk0OTYgMyA5Ljc3NjQ2IDMuMTAyMjJDMTAuODExNyAzLjM3OTYyIDExLjYyMDQgNC4xODgyNyAxMS44OTc4IDUuMjIzNTRDMTIgNS42MDUwNCAxMiA2LjA3MDAzIDEyIDcnIHN0cm9rZT0nd2hpdGUnIHN0cm9rZS13aWR0aD0nMScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM2UlM2Mvc3ZnJTNlXCI7XG4gIGV4cG9ydCBkZWZhdWx0IGltZzsiLCJpbXBvcnQgeyB1c2VNdXRhdGlvbiwgdXNlUXVlcnlDbGllbnQgfSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgYXBpIGZyb20gXCIuL2FwaVwiO1xuaW1wb3J0IHsgU2lnbkluRHRvLCBTaWduVXBEdG8gfSBmcm9tIFwiLi4vLi4vbGlicy9iYWNrZW5kLWNsaWVudFwiO1xuXG5leHBvcnQgY29uc3Qgc2lnbkluID0gYXN5bmMgKHBheWxvYWQ6IFNpZ25JbkR0bykgPT4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaS5hdXRoLmF1dGhDb250cm9sbGVyU2lnbkluKHBheWxvYWQpO1xuICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImdhbGFkcmltRmVlZGJhY2tUb2tlblwiLCByZXNwb25zZS5kYXRhLmFjY2Vzc1Rva2VuKTtcbiAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnblVwID0gYXN5bmMgKHBheWxvYWQ6IFNpZ25VcER0bykgPT4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaS5hdXRoLmF1dGhDb250cm9sbGVyU2lnblVwKHBheWxvYWQpO1xuICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImdhbGFkcmltRmVlZGJhY2tUb2tlblwiLCByZXNwb25zZS5kYXRhLmFjY2Vzc1Rva2VuKTtcbiAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgbG9nb3V0ID0gYXN5bmMgKCkgPT4ge1xuICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImdhbGFkcmltRmVlZGJhY2tUb2tlblwiKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VTaWduSW4gPSAoKSA9PiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBzaWduSW4sXG4gICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICByZXR1cm4gcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoKTtcbiAgICB9LFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VTaWduVXAgPSAoKSA9PiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBzaWduVXAsXG4gICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICByZXR1cm4gcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoKTtcbiAgICB9LFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VMb2dvdXQgPSAoKSA9PiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBsb2dvdXQsXG4gICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICByZXR1cm4gcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoKTtcbiAgICB9LFxuICB9KTtcbn07XG4iLCJpbXBvcnQgTG9nb3V0SWNvbiBmcm9tIFwiLi4vLi4vYXNzZXRzL2ljb25zL2xvZy1vdXQtMDIuc3ZnXCI7XG5pbXBvcnQgeyB1c2VMb2dvdXQgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvYXV0aFwiO1xuaW1wb3J0IHsgdXNlTWUgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvdXNlclwiO1xuXG5leHBvcnQgY29uc3QgQ29ubmVjdGVkVXNlciA9ICgpID0+IHtcbiAgY29uc3QgeyBkYXRhOiBtZSB9ID0gdXNlTWUoKTtcbiAgY29uc3QgeyBtdXRhdGU6IGxvZ291dCB9ID0gdXNlTG9nb3V0KCk7XG5cbiAgY29uc3QgaGFuZGxlTG9nb3V0ID0gKCkgPT4ge1xuICAgIGxvZ291dCgpO1xuICB9O1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXJvdyBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHRleHQtZ3JheS1mZWVkYmFjay0yMDAgei0xMCBwLTIgcHQtNFwiPlxuICAgICAgPGRpdj5cbiAgICAgICAgPHAgY2xhc3NOYW1lPVwia3VtYmgtbWVkaXVtIHRleHQtc20gdGV4dC1ncmF5LWZlZWRiYWNrLTMwMFwiPlxuICAgICAgICAgIHttZT8uZnVsbE5hbWUgfHwgYCR7bWU/LmZpcnN0TmFtZX0gJHttZT8ubGFzdE5hbWV9YH1cbiAgICAgICAgPC9wPlxuICAgICAgICA8cCBjbGFzc05hbWU9XCJrdW1iaC1yZWd1bGFyIHRleHQteHMgbGVhZGluZy1bMTJweF0gdGV4dC1ncmF5LWZlZWRiYWNrLTMwMFwiPlxuICAgICAgICAgIHttZT8uZW1haWx9XG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGltZyBvbkNsaWNrPXtoYW5kbGVMb2dvdXR9IHNyYz17TG9nb3V0SWNvbn0gY2xhc3NOYW1lPVwiY3Vyc29yLXBvaW50ZXJcIiAvPlxuICAgIDwvZGl2PlxuICApO1xufTtcbiIsInZhciBpbWcgPSBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzIwJyBoZWlnaHQ9JzIwJyB2aWV3Qm94PScwIDAgMjAgMjAnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UlM2NwYXRoIGQ9J00xNy41IDE3LjVMMTMuODc1IDEzLjg3NU0xNS44MzMzIDkuMTY2NjdDMTUuODMzMyAxMi44NDg2IDEyLjg0ODYgMTUuODMzMyA5LjE2NjY3IDE1LjgzMzNDNS40ODQ3NyAxNS44MzMzIDIuNSAxMi44NDg2IDIuNSA5LjE2NjY3QzIuNSA1LjQ4NDc3IDUuNDg0NzcgMi41IDkuMTY2NjcgMi41QzEyLjg0ODYgMi41IDE1LjgzMzMgNS40ODQ3NyAxNS44MzMzIDkuMTY2NjdaJyBzdHJva2U9J3doaXRlJyBzdHJva2Utd2lkdGg9JzEuNjY2NjcnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNlJTNjL3N2ZyUzZVwiO1xuICBleHBvcnQgZGVmYXVsdCBpbWc7IiwiaW1wb3J0IFNlYXJjaCBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2ljb25zL3NlYXJjaC5zdmdcIjtcblxuZXhwb3J0IGNvbnN0IFNlYXJjaElucHV0ID0gKHtcbiAgdmFsdWUsXG4gIHNldFZhbHVlLFxufToge1xuICB2YWx1ZTogc3RyaW5nO1xuICBzZXRWYWx1ZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG59KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgYmctZ3JheS1mZWVkYmFjay03MDAgYm9yZGVyLWdyYXktZmVlZGJhY2stNTAwIHJvdW5kZWQtbGcgcHgtMyBweS0yIGZsZXggZmxleC1yb3cgaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICA8aW1nIHNyYz17U2VhcmNofSBjbGFzc05hbWU9XCJ3LTYgaC02XCIgLz5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPXtcInRleHRcIn1cbiAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldFZhbHVlKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGJnLWdyYXktZmVlZGJhY2stNzAwIG91dGxpbmUtbm9uZSBib3JkZXItbm9uZSB0ZXh0LXdoaXRlXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIiwiaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50XCI7XG5pbXBvcnQgeyB1c2VGZWVkYmFja0NvbnRleHQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29udGV4dHMvRmVlZGJhY2tDb250ZXh0XCI7XG5pbXBvcnQgeyBGZWVkYmFja1Jlc3BvbnNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2xpYnMvYmFja2VuZC1jbGllbnRcIjtcblxuZXhwb3J0IGNvbnN0IEZlZWRiYWNrTGlzdEl0ZW0gPSAoe1xuICBmZWVkYmFjayxcbn06IHtcbiAgZmVlZGJhY2s6IEZlZWRiYWNrUmVzcG9uc2U7XG59KSA9PiB7XG4gIGNvbnN0IHsgdXNlciwgY3JlYXRlZEF0LCBjb21tZW50LCBwYXRoLCByZXBsaWVzLCBpc1Jlc29sdmVkIH0gPSBmZWVkYmFjaztcbiAgY29uc3QgeyBzZWxlY3RlZEZlZWRiYWNrLCBzZXRTZWxlY3RlZEZlZWRiYWNrLCBuYXZpZ2F0ZSB9ID1cbiAgICB1c2VGZWVkYmFja0NvbnRleHQoKTtcblxuICBjb25zdCBoYW5kbGVDbGljayA9IGFzeW5jICgpID0+IHtcbiAgICBzZXRTZWxlY3RlZEZlZWRiYWNrKGZlZWRiYWNrKTtcbiAgICBuYXZpZ2F0ZShmZWVkYmFjay5wYXRoKTtcbiAgfTtcblxuICBjb25zdCByZXBsaWVzQ291bnQgPSByZXBsaWVzLmxlbmd0aDtcblxuICBjb25zdCBpc1NlbGVjdGVkID0gc2VsZWN0ZWRGZWVkYmFjayAmJiBmZWVkYmFjay5pZCA9PT0gc2VsZWN0ZWRGZWVkYmFjay5pZDtcblxuICBjb25zdCBpc1NlbGVjdGVkQ2xhc3MgPSBpc1NlbGVjdGVkXG4gICAgPyBcImJnLXByaW1hcnktZmVlZGJhY2stNjAwXCJcbiAgICA6IFwiIGhvdmVyOmJnLWdyYXktZmVlZGJhY2stNzAwXCI7XG5cbiAgY29uc3QgdGV4dENvbG9yQ2xhc3MgPSBpc1NlbGVjdGVkXG4gICAgPyBcInRleHQtd2hpdGVcIlxuICAgIDogXCJ0ZXh0LXByaW1hcnktZmVlZGJhY2stNDAwXCI7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2BmbGV4IGZsZXgtY29sIGl0ZW1zLXN0YXJ0IHJvdW5kZWQtbGcgJHtpc1NlbGVjdGVkQ2xhc3N9IHAtMiAke1xuICAgICAgICBpc1Jlc29sdmVkID8gXCJvcGFjaXR5LTYwXCIgOiBcIlwiXG4gICAgICB9YH1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXJvdyBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwia3VtYmgtbWVkaXVtIHRleHQtc20gdGV4dC1ncmF5LWZlZWRiYWNrLTIwMFwiPlxuICAgICAgICAgIHt1c2VyPy5mdWxsTmFtZSB8fCBgJHt1c2VyPy5maXJzdE5hbWV9ICR7dXNlcj8ubGFzdE5hbWV9YH1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJrdW1iaC1yZWd1bGFyIHRleHQtWzEwcHhdIGxlYWRpbmctWzEycHhdIHRleHQtZ3JheS1mZWVkYmFjay0zMDBcIj5cbiAgICAgICAgICB7bW9tZW50KGNyZWF0ZWRBdCkuZnJvbU5vdygpfVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImt1bWJoLXJlZ3VsYXIgdGV4dC14cyB0ZXh0LXdoaXRlXCI+e3BhdGh9PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibXQtMiBrdW1iaC1yZWd1bGFyIHRleHQtYmFzZSB0ZXh0LXdoaXRlXCI+e2NvbW1lbnR9PC9zcGFuPlxuICAgICAge3JlcGxpZXNDb3VudCA+IDAgJiYgKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2BtdC0yIGt1bWJoLXJlZ3VsYXIgdGV4dC14cyAke3RleHRDb2xvckNsYXNzfWB9PlxuICAgICAgICAgIHtyZXBsaWVzQ291bnR9IHLDqXBvbnNle3JlcGxpZXNDb3VudCA+IDEgPyBcInNcIiA6IFwiXCJ9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIiwiaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZUZlZWRiYWNrQ29udGV4dCB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb250ZXh0cy9GZWVkYmFja0NvbnRleHRcIjtcbmltcG9ydCB7IFNlYXJjaElucHV0IH0gZnJvbSBcIi4uLy4uLy4uL2F0b21zL2lucHV0cy9TZWFyY2hJbnB1dFwiO1xuaW1wb3J0IHsgRmVlZGJhY2tMaXN0SXRlbSB9IGZyb20gXCIuLi9pdGVtL0ZlZWRiYWNrTGlzdEl0ZW1cIjtcblxuZXhwb3J0IGNvbnN0IEZlZWRiYWNrTGlzdCA9ICgpID0+IHtcbiAgY29uc3QgeyBmZWVkYmFja3MgfSA9IHVzZUZlZWRiYWNrQ29udGV4dCgpO1xuICBjb25zdCBbc2VhcmNoLCBzZXRTZWFyY2hdID0gdXNlU3RhdGUoXCJcIik7XG5cbiAgY29uc3QgZmlsdGVyZWRGZWVkYmFja3MgPSBmZWVkYmFja3M/LmZpbHRlcihcbiAgICAoZmVlZGJhY2spID0+XG4gICAgICAhc2VhcmNoIHx8XG4gICAgICBmZWVkYmFjay5wYXRoLmluY2x1ZGVzKHNlYXJjaCkgfHxcbiAgICAgIGZlZWRiYWNrLmNvbW1lbnQuaW5jbHVkZXMoc2VhcmNoKVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgIGZsZXggZmxleC1jb2wgIHB0LTggb3ZlcmZsb3ctaGlkZGVuIHotMTBcIj5cbiAgICAgIDxTZWFyY2hJbnB1dCB2YWx1ZT17c2VhcmNofSBzZXRWYWx1ZT17c2V0U2VhcmNofSAvPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCIgZmxleCBmbGV4LWNvbCBnYXAtNCBtdC00IG92ZXJmbG93LXktYXV0byBzY3JvbGxiYXItaGlkZVwiPlxuICAgICAgICB7ZmlsdGVyZWRGZWVkYmFja3MgJiZcbiAgICAgICAgICBmaWx0ZXJlZEZlZWRiYWNrcy5tYXAoKGZlZWRiYWNrKSA9PiAoXG4gICAgICAgICAgICA8RmVlZGJhY2tMaXN0SXRlbSBrZXk9e2ZlZWRiYWNrLmlkfSBmZWVkYmFjaz17ZmVlZGJhY2t9IC8+XG4gICAgICAgICAgKSl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iLCJpbXBvcnQgeyB1c2VGZWVkYmFja0NvbnRleHQgfSBmcm9tIFwiLi4vLi4vY29udGV4dHMvRmVlZGJhY2tDb250ZXh0XCI7XG5pbXBvcnQgeyB1c2VNZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy91c2VyXCI7XG5pbXBvcnQgeyBDb25uZWN0ZWRVc2VyIH0gZnJvbSBcIi4uL21vbGVjdWxlcy9Db25uZWN0ZWRVc2VyXCI7XG5pbXBvcnQgeyBGZWVkYmFja0xpc3QgfSBmcm9tIFwiLi4vbW9sZWN1bGVzL2ZlZWRiYWNrcy9ncm91cC9GZWVkYmFja0xpc3RcIjtcblxuZXhwb3J0IGNvbnN0IENvbm5lY3RlZFBhbmVsID0gKCkgPT4ge1xuICBjb25zdCB7IGRhdGE6IG1lIH0gPSB1c2VNZSgpO1xuICBjb25zdCB7IHByb2plY3RJZCB9ID0gdXNlRmVlZGJhY2tDb250ZXh0KCk7XG5cbiAgY29uc3QgaXNDb2xsYWJvcmF0b3IgPSBtZT8uY29sbGFib3JhdGlvbnMuZmluZChcbiAgICAoY29sbGFib3JhdGlvbikgPT4gY29sbGFib3JhdGlvbi5wcm9qZWN0LmlkID09PSBwcm9qZWN0SWRcbiAgKTtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBmbGV4LTEgZmxleCBmbGV4LWNvbCBpdGVtcy1zdHJldGNoIGp1c3RpZnktYmV0d2VlbiBtYXgtaC1bY2FsYygxMDB2aC03MnB4KV1cIj5cbiAgICAgIHtpc0NvbGxhYm9yYXRvciA/IChcbiAgICAgICAgPEZlZWRiYWNrTGlzdCAvPlxuICAgICAgKSA6IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTRcIj5cbiAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlciB0ZXh0LWdyYXktZmVlZGJhY2stMjAwIHRleHQtc21cIj5cbiAgICAgICAgICAgIFZvdXMgbidhdmV6IGFjdHVlbGxlbWVudCBwYXMgbGVzIGRyb2l0cyBzdXIgY2UgcHJvamV0LCB2ZXVpbGxlelxuICAgICAgICAgICAgY29udGFjdGVyIHZvdHJlIHByb2R1Y3QgbWFuYWdlclxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAgPENvbm5lY3RlZFVzZXIgLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iLCJleHBvcnQgY29uc3QgSW5wdXQgPSAoe1xuICBsYWJlbCxcbiAgcGxhY2Vob2xkZXIsXG4gIHR5cGUsXG4gIHZhbHVlLFxuICBzZXRWYWx1ZSxcbn06IHtcbiAgbGFiZWw6IHN0cmluZztcbiAgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBzZXRWYWx1ZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG59KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sXCI+XG4gICAgICA8bGFiZWwgY2xhc3NOYW1lPVwia3VtYmgtbWVkaXVtIHRleHQtc20gdGV4dC1ncmF5LWZlZWRiYWNrLTQwMCBtYi1bNnB4XVwiPlxuICAgICAgICB7bGFiZWx9XG4gICAgICA8L2xhYmVsPlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9e3R5cGV9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldFZhbHVlKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHJvdW5kZWQgdGV4dC1ibGFjayBib3JkZXIgYm9yZGVyLWdyYXktZmVlZGJhY2stNDAwIHB5LTIgcHgtMyBtYi00IHBsYWNlaG9sZGVyOnRleHQtZ3JheS1mZWVkYmFjay0zMDBcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iLCJ2YXIgaW1nID0gXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPScxMjcnIGhlaWdodD0nNDMnIHZpZXdCb3g9JzAgMCAxMjcgNDMnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UlM2NwYXRoIGQ9J003LjQ4NjczIDguMDc3NjdDOC40OTExMSA4LjA3NzY3IDkuNDE4NjIgOC4yNTM3MiAxMC4yNjkzIDguNjA1ODJDMTEuMTMwMiA4Ljk0NzU3IDExLjg4MzQgOS40MzQzIDEyLjUyOTEgMTAuMDY2TDEyLjYzNjcgOC4zODgzNUgxNi44MTgyVjIyLjEwNDlDMTYuODE4MiAyNC4wOTMyIDE2LjQ0NDEgMjUuODI3OCAxNS42OTYgMjcuMzA4N0MxNC45NTgxIDI4Ljc4OTYgMTMuOTE3OCAyOS45MzkyIDEyLjU3NTIgMzAuNzU3M0MxMS4yNDI5IDMxLjU4NTggOS42NzQ4NCAzMiA3Ljg3MTA1IDMyQzYuODc2OTIgMzIgNS44MjEzIDMxLjg2MDIgNC43MDQxOSAzMS41ODA2QzMuNTg3MDcgMzEuMzAxIDIuNDQ0MzMgMzAuODY2IDEuMjc1OTcgMzAuMjc1N0wyLjYxMzQ0IDI2LjU2MzFDMy4xMjU4NyAyNi45OTgxIDMuODQzMjkgMjcuMzY1NyA0Ljc2NTY4IDI3LjY2NkM1LjY4ODA3IDI3Ljk3NjcgNi41NzQ1OSAyOC4xMzIgNy40MjUyMyAyOC4xMzJDOC45NTIzIDI4LjEzMiAxMC4xNjE3IDI3LjYxNDIgMTEuMDUzMyAyNi41Nzg2QzExLjk0NDkgMjUuNTUzNCAxMi4zOTA4IDI0LjE2NTcgMTIuMzkwOCAyMi40MTU1VjIyLjM4NDVDMTEuNzQ1MSAyMi45NjQ0IDExLjAwNzIgMjMuNDIwMSAxMC4xNzcgMjMuNzUxNUM5LjM0Njg4IDI0LjA3MjUgOC40NTAxMSAyNC4yMzMgNy40ODY3MyAyNC4yMzNDNi4wNTE5IDI0LjIzMyA0Ljc2NTY4IDIzLjg4NjEgMy42MjgwNiAyMy4xOTIyQzIuNTAwNyAyMi40ODggMS42MTQxOCAyMS41MzAxIDAuOTY4NTA5IDIwLjMxODRDMC4zMjI4MzYgMTkuMDk2NCAwIDE3LjcwODcgMCAxNi4xNTUzQzAgMTQuNjAxOSAwLjMyMjgzNiAxMy4yMTk0IDAuOTY4NTA5IDEyLjAwNzhDMS42MTQxOCAxMC43ODU4IDIuNTAwNyA5LjgyNzgzIDMuNjI4MDYgOS4xMzM5OEM0Ljc2NTY4IDguNDI5NzcgNi4wNTE5IDguMDc3NjcgNy40ODY3MyA4LjA3NzY3Wk04LjQ4NTk4IDIwLjM0OTVDOS42MTMzNSAyMC4zNDk1IDEwLjU0NiAxOS45NTA4IDExLjI4MzkgMTkuMTUzNEMxMi4wMjE4IDE4LjM1NiAxMi4zOTA4IDE3LjM1NjYgMTIuMzkwOCAxNi4xNTUzQzEyLjM5MDggMTQuOTU0IDEyLjAyMTggMTMuOTU0NyAxMS4yODM5IDEzLjE1NzNDMTAuNTQ2IDEyLjM1OTkgOS42MTMzNSAxMS45NjEyIDguNDg1OTggMTEuOTYxMkM3LjM1ODYyIDExLjk2MTIgNi40MjU5OCAxMi4zNTk5IDUuNjg4MDcgMTMuMTU3M0M0Ljk1MDE2IDEzLjk1NDcgNC41ODEyIDE0Ljk1NCA0LjU4MTIgMTYuMTU1M0M0LjU4MTIgMTcuMzU2NiA0Ljk1MDE2IDE4LjM1NiA1LjY4ODA3IDE5LjE1MzRDNi40MjU5OCAxOS45NTA4IDcuMzU4NjIgMjAuMzQ5NSA4LjQ4NTk4IDIwLjM0OTVaJyBmaWxsPSclMjMwMTBDMUUnLyUzZSUzY3BhdGggZD0nTTE4LjkxOTEgMTkuNjUwNUMxOC45MTkxIDE4LjYxNDkgMTkuMjExMiAxNy42ODggMTkuNzk1NCAxNi44Njk5QzIwLjM4OTggMTYuMDUxOCAyMS4yMDQ2IDE1LjQwNDUgMjIuMjM5NyAxNC45MjgyQzIzLjI3NDggMTQuNDUxOCAyNC40NTg2IDE0LjIxMzYgMjUuNzkwOSAxNC4yMTM2QzI2LjIxMTEgMTQuMjEzNiAyNi42NTE4IDE0LjIzOTUgMjcuMTEzIDE0LjI5MTNDMjcuNTg0NCAxNC4zNDMgMjguMDU1OSAxNC40MTA0IDI4LjUyNzMgMTQuNDkzMkMyOC4xODkxIDEyLjgwNTIgMjYuOTc0NiAxMS45NjEyIDI0Ljg4MzkgMTEuOTYxMkMyMy42NDM4IDExLjk2MTIgMjIuMzk4NiAxMi40MzI0IDIxLjE0ODIgMTMuMzc0OEwxOS42MjYzIDkuNkMyMC42OTIxIDkuMDgyMiAyMS43NDI2IDguNjk5MDMgMjIuNzc3OCA4LjQ1MDQ5QzIzLjgxMjkgOC4yMDE5NCAyNC43OTY4IDguMDc3NjcgMjUuNzI5NCA4LjA3NzY3QzI3LjIxNTUgOC4wNzc2NyAyOC41MDE3IDguMzYyNDYgMjkuNTg4MSA4LjkzMjA0QzMwLjY4NDcgOS40OTEyNiAzMS41MzUzIDEwLjI4ODcgMzIuMTQgMTEuMzI0M0MzMi43NDQ3IDEyLjM0OTUgMzMuMDQ3IDEzLjU1NiAzMy4wNDcgMTQuOTQzN1YyMy45MjIzSDI5LjMyNjdMMjkuMDM0NiAyMi4yNjAyQzI4LjQ2MDcgMjIuODcxMiAyNy43NTg3IDIzLjM1MjcgMjYuOTI4NSAyMy43MDQ5QzI2LjEwODYgMjQuMDU3IDI1LjIwNjcgMjQuMjMzIDI0LjIyMjkgMjQuMjMzQzIyLjY2NSAyNC4yMzMgMjEuMzg5MSAyMy44MDg0IDIwLjM5NDkgMjIuOTU5MkMxOS40MTExIDIyLjExIDE4LjkxOTEgMjEuMDA3MSAxOC45MTkxIDE5LjY1MDVaTTIzLjM0NjYgMTguNjI1MkMyMy4zNDY2IDE5LjE0MyAyMy41NDEzIDE5LjU2MjUgMjMuOTMwOCAxOS44ODM1QzI0LjMzMDUgMjAuMTk0MiAyNC44NTMxIDIwLjM0OTUgMjUuNDk4OCAyMC4zNDk1QzI2LjM4MDIgMjAuMzQ5NSAyNy4xMTgxIDIwLjA4MDMgMjcuNzEyNiAxOS41NDE3QzI4LjMxNzIgMTkuMDAzMiAyOC42MTk2IDE4LjM0MDUgMjguNjE5NiAxNy41NTM0VjE3LjI0MjdDMjguMjQwNCAxNy4xMTg0IDI3LjgzMDQgMTcuMDIwMSAyNy4zODk3IDE2Ljk0NzZDMjYuOTU5MyAxNi44NzUxIDI2LjUzMzkgMTYuODM4OCAyNi4xMTM3IDE2LjgzODhDMjUuMjQyNiAxNi44Mzg4IDI0LjU2MTEgMTYuOTk0MiAyNC4wNjkxIDE3LjMwNDlDMjMuNTg3NCAxNy42MTU1IDIzLjM0NjYgMTguMDU1NyAyMy4zNDY2IDE4LjYyNTJaJyBmaWxsPSclMjMwMTBDMUUnLyUzZSUzY3BhdGggZD0nTTM5Ljc3NTIgMFYyMy45MjIzSDM1LjM0NzhWMEgzOS43NzUyWicgZmlsbD0nJTIzMDEwQzFFJy8lM2UlM2NwYXRoIGQ9J000MS44NzYxIDE5LjY1MDVDNDEuODc2MSAxOC42MTQ5IDQyLjE2ODIgMTcuNjg4IDQyLjc1MjQgMTYuODY5OUM0My4zNDY4IDE2LjA1MTggNDQuMTYxNiAxNS40MDQ1IDQ1LjE5NjcgMTQuOTI4MkM0Ni4yMzE5IDE0LjQ1MTggNDcuNDE1NiAxNC4yMTM2IDQ4Ljc0NzkgMTQuMjEzNkM0OS4xNjgxIDE0LjIxMzYgNDkuNjA4OCAxNC4yMzk1IDUwLjA3IDE0LjI5MTNDNTAuNTQxNSAxNC4zNDMgNTEuMDEyOSAxNC40MTA0IDUxLjQ4NDMgMTQuNDkzMkM1MS4xNDYxIDEyLjgwNTIgNDkuOTMxNyAxMS45NjEyIDQ3Ljg0MDkgMTEuOTYxMkM0Ni42MDA4IDExLjk2MTIgNDUuMzU1NiAxMi40MzI0IDQ0LjEwNTIgMTMuMzc0OEw0Mi41ODMzIDkuNkM0My42NDkyIDkuMDgyMiA0NC42OTk3IDguNjk5MDMgNDUuNzM0OCA4LjQ1MDQ5QzQ2Ljc2OTkgOC4yMDE5NCA0Ny43NTM4IDguMDc3NjcgNDguNjg2NCA4LjA3NzY3QzUwLjE3MjUgOC4wNzc2NyA1MS40NTg3IDguMzYyNDYgNTIuNTQ1MSA4LjkzMjA0QzUzLjY0MTcgOS40OTEyNiA1NC40OTI0IDEwLjI4ODcgNTUuMDk3IDExLjMyNDNDNTUuNzAxNyAxMi4zNDk1IDU2LjAwNDEgMTMuNTU2IDU2LjAwNDEgMTQuOTQzN1YyMy45MjIzSDUyLjI4MzhMNTEuOTkxNyAyMi4yNjAyQzUxLjQxNzcgMjIuODcxMiA1MC43MTU3IDIzLjM1MjcgNDkuODg1NSAyMy43MDQ5QzQ5LjA2NTYgMjQuMDU3IDQ4LjE2MzcgMjQuMjMzIDQ3LjE3OTkgMjQuMjMzQzQ1LjYyMjEgMjQuMjMzIDQ0LjM0NjEgMjMuODA4NCA0My4zNTE5IDIyLjk1OTJDNDIuMzY4MSAyMi4xMSA0MS44NzYxIDIxLjAwNzEgNDEuODc2MSAxOS42NTA1Wk00Ni4zMDM2IDE4LjYyNTJDNDYuMzAzNiAxOS4xNDMgNDYuNDk4MyAxOS41NjI1IDQ2Ljg4NzggMTkuODgzNUM0Ny4yODc1IDIwLjE5NDIgNDcuODEwMiAyMC4zNDk1IDQ4LjQ1NTggMjAuMzQ5NUM0OS4zMzcyIDIwLjM0OTUgNTAuMDc1MSAyMC4wODAzIDUwLjY2OTYgMTkuNTQxN0M1MS4yNzQyIDE5LjAwMzIgNTEuNTc2NiAxOC4zNDA1IDUxLjU3NjYgMTcuNTUzNFYxNy4yNDI3QzUxLjE5NzQgMTcuMTE4NCA1MC43ODc0IDE3LjAyMDEgNTAuMzQ2NyAxNi45NDc2QzQ5LjkxNjMgMTYuODc1MSA0OS40OTEgMTYuODM4OCA0OS4wNzA4IDE2LjgzODhDNDguMTk5NiAxNi44Mzg4IDQ3LjUxODEgMTYuOTk0MiA0Ny4wMjYxIDE3LjMwNDlDNDYuNTQ0NCAxNy42MTU1IDQ2LjMwMzYgMTguMDU1NyA0Ni4zMDM2IDE4LjYyNTJaJyBmaWxsPSclMjMwMTBDMUUnLyUzZSUzY3BhdGggZD0nTTU3LjIyODcgMTYuMTU1M0M1Ny4yMjg3IDE0LjYwMTkgNTcuNTUxNSAxMy4yMTk0IDU4LjE5NzIgMTIuMDA3OEM1OC44NDI4IDEwLjc4NTggNTkuNzI5NCA5LjgyNzgzIDYwLjg1NjcgOS4xMzM5OEM2MS45OTQzIDguNDI5NzcgNjMuMjgwNiA4LjA3NzY3IDY0LjcxNTQgOC4wNzc2N0M2NS42Nzg4IDguMDc3NjcgNjYuNTc1NSA4LjI0MzM3IDY3LjQwNTcgOC41NzQ3NkM2OC4yMzU4IDguODk1NzkgNjguOTczOCA5LjM0NjI4IDY5LjYxOTQgOS45MjYyMVYwLjYyMTM1OUg3NC4wNDY5VjIzLjkyMjNINjkuODY1NEw2OS43NTc4IDIyLjI0NDdDNjkuMTEyMSAyMi44NzY0IDY4LjM1ODggMjMuMzY4MyA2Ny40OTc5IDIzLjcyMDRDNjYuNjQ3MyAyNC4wNjIxIDY1LjcxOTggMjQuMjMzIDY0LjcxNTQgMjQuMjMzQzYzLjI4MDYgMjQuMjMzIDYxLjk5NDMgMjMuODg2MSA2MC44NTY3IDIzLjE5MjJDNTkuNzI5NCAyMi40ODggNTguODQyOCAyMS41MzAxIDU4LjE5NzIgMjAuMzE4NEM1Ny41NTE1IDE5LjA5NjQgNTcuMjI4NyAxNy43MDg3IDU3LjIyODcgMTYuMTU1M1pNNjEuODA5OSAxNi4xNTUzQzYxLjgwOTkgMTcuMzU2NiA2Mi4xNzg4IDE4LjM1NiA2Mi45MTY3IDE5LjE1MzRDNjMuNjU0NiAxOS45NTA4IDY0LjU4NzMgMjAuMzQ5NSA2NS43MTQ2IDIwLjM0OTVDNjYuODQyIDIwLjM0OTUgNjcuNzc0NiAxOS45NTA4IDY4LjUxMjYgMTkuMTUzNEM2OS4yNTA1IDE4LjM1NiA2OS42MTk0IDE3LjM1NjYgNjkuNjE5NCAxNi4xNTUzQzY5LjYxOTQgMTQuOTU0IDY5LjI1MDUgMTMuOTU0NyA2OC41MTI2IDEzLjE1NzNDNjcuNzc0NiAxMi4zNTk5IDY2Ljg0MiAxMS45NjEyIDY1LjcxNDYgMTEuOTYxMkM2NC41ODczIDExLjk2MTIgNjMuNjU0NiAxMi4zNTk5IDYyLjkxNjcgMTMuMTU3M0M2Mi4xNzg4IDEzLjk1NDcgNjEuODA5OSAxNC45NTQgNjEuODA5OSAxNi4xNTUzWicgZmlsbD0nJTIzMDEwQzFFJy8lM2UlM2NwYXRoIGQ9J003Ni42Mzk3IDIzLjkyMjNWOC4zODgzNUg4MC41MTM4TDgwLjcyOSAxMC42MDk3QzgxLjg0NjEgOC45MjE2OCA4My4zODM0IDguMDc3NjcgODUuMzQwOSA4LjA3NzY3Qzg2LjAwNzEgOC4wNzc2NyA4Ni42OTM4IDguMTgxMjMgODcuNDAwOSA4LjM4ODM1TDg2Ljc4NiAxMi4yNTYzQzg2LjE5MTYgMTIuMDU5NSA4NS42MDc0IDExLjk2MTIgODUuMDMzNSAxMS45NjEyQzgzLjg0NDYgMTEuOTYxMiA4Mi44ODYzIDEyLjQwNjUgODIuMTU4NyAxMy4yOTcxQzgxLjQzMSAxNC4xNzczIDgxLjA2NzIgMTUuNDM1NiA4MS4wNjcyIDE3LjA3MThWMjMuOTIyM0g3Ni42Mzk3WicgZmlsbD0nJTIzMDEwQzFFJy8lM2UlM2NwYXRoIGQ9J004Ny4xOTU4IDMuMTA2OEM4Ny4xOTU4IDIuMzYxMTYgODcuNDIxMyAxLjc2MDUyIDg3Ljg3MjMgMS4zMDQ4NUM4OC4zMjMyIDAuODQ5MTkxIDg4LjkxNzYgMC42MjEzNTkgODkuNjU1NSAwLjYyMTM1OUM5MC4zOTM1IDAuNjIxMzU5IDkwLjk4NzkgMC44NDkxOTEgOTEuNDM4OCAxLjMwNDg1QzkxLjg4OTggMS43NjA1MiA5Mi4xMTUyIDIuMzYxMTYgOTIuMTE1MiAzLjEwNjhDOTIuMTE1MiAzLjg1MjQzIDkxLjg4OTggNC40NTMwNyA5MS40Mzg4IDQuOTA4NzRDOTAuOTg3OSA1LjM2NDQgOTAuMzkzNSA1LjU5MjIzIDg5LjY1NTUgNS41OTIyM0M4OC45MTc2IDUuNTkyMjMgODguMzIzMiA1LjM2NDQgODcuODcyMyA0LjkwODc0Qzg3LjQyMTMgNC40NTMwNyA4Ny4xOTU4IDMuODUyNDMgODcuMTk1OCAzLjEwNjhaTTg3LjQ0MTggMjMuOTIyM1Y4LjM4ODM1SDkxLjg2OTNWMjMuOTIyM0g4Ny40NDE4WicgZmlsbD0nJTIzMDEwQzFFJy8lM2UlM2NwYXRoIGQ9J005OC42NDM2IDIzLjkyMjNIOTQuMjE2MVY4LjM4ODM1SDk4LjM5NzZMOTguNTA1MiAxMC4wMzVDOTkuNTkxNiA4LjczMDEgMTAxLjA2MiA4LjA3NzY3IDEwMi45MTcgOC4wNzc2N0MxMDUuMjg1IDguMDc3NjcgMTA2Ljk2IDkuMDk3NzMgMTA3Ljk0NCAxMS4xMzc5QzEwOC40NTcgMTAuMTU0IDEwOS4xNDkgOS4zOTgwNiAxMTAuMDIgOC44Njk5QzExMC44OTEgOC4zNDE3NSAxMTEuOTE2IDguMDc3NjcgMTEzLjA5NCA4LjA3NzY3QzExNC45NiA4LjA3NzY3IDExNi40MSA4Ljc0MDQ1IDExNy40NDUgMTAuMDY2QzExOC40OCAxMS4zODEyIDExOC45OTggMTMuMjE0MiAxMTguOTk4IDE1LjU2NVYyMy45MjIzSDExNC41N1YxNS41NjVDMTE0LjU3IDE0LjM2MzggMTE0LjI4OCAxMy40NjI4IDExMy43MjUgMTIuODYyMUMxMTMuMTcxIDEyLjI2MTUgMTEyLjUgMTEuOTYxMiAxMTEuNzExIDExLjk2MTJDMTEwLjkxMSAxMS45NjEyIDExMC4yMyAxMi4yNzE4IDEwOS42NjYgMTIuODkzMkMxMDkuMTAyIDEzLjUxNDYgMTA4LjgyMSAxNC40NDE0IDEwOC44MjEgMTUuNjczOFYyMy45MjIzSDEwNC4zOTNWMTUuNTY1QzEwNC4zOTMgMTQuMzYzOCAxMDQuMTExIDEzLjQ2MjggMTAzLjU0OCAxMi44NjIxQzEwMi45OTQgMTIuMjYxNSAxMDIuMzIzIDExLjk2MTIgMTAxLjUzNCAxMS45NjEyQzEwMC43MzQgMTEuOTYxMiAxMDAuMDUzIDEyLjI3MTggOTkuNDg5MSAxMi44OTMyQzk4LjkyNTQgMTMuNTE0NiA5OC42NDM2IDE0LjQ0MTQgOTguNjQzNiAxNS42NzM4VjIzLjkyMjNaJyBmaWxsPSclMjMwMTBDMUUnLyUzZSUzY3BhdGggZD0nTTEyMS4yODMgMjEuNzQ3NkMxMjEuMjgzIDIxLjAwMTkgMTIxLjUwOCAyMC40MDEzIDEyMS45NTkgMTkuOTQ1NkMxMjIuNDEgMTkuNDkgMTIzLjAwNSAxOS4yNjIxIDEyMy43NDMgMTkuMjYyMUMxMjQuNDgxIDE5LjI2MjEgMTI1LjA3NSAxOS40OSAxMjUuNTI2IDE5Ljk0NTZDMTI1Ljk3NyAyMC40MDEzIDEyNi4yMDIgMjEuMDAxOSAxMjYuMjAyIDIxLjc0NzZDMTI2LjIwMiAyMi40OTMyIDEyNS45NzcgMjMuMDkzOSAxMjUuNTI2IDIzLjU0OTVDMTI1LjA3NSAyNC4wMDUyIDEyNC40ODEgMjQuMjMzIDEyMy43NDMgMjQuMjMzQzEyMy4wMDUgMjQuMjMzIDEyMi40MSAyNC4wMDUyIDEyMS45NTkgMjMuNTQ5NUMxMjEuNTA4IDIzLjA5MzkgMTIxLjI4MyAyMi40OTMyIDEyMS4yODMgMjEuNzQ3NlonIGZpbGw9JyUyMzAxMEMxRScvJTNlJTNjcGF0aCBkPSdNNDguODM0IDQwVjI5Ljc0NjFINTUuMjQ2MVYzMS41ODVINTAuOTM5NVYzMy45MTZINTQuOTY1OFYzNS43NjE3SDUwLjkzOTVWNDBINDguODM0Wk02My4xNDE2IDM5LjIzNDRDNjIuMjkzOSAzOS44MzU5IDYxLjM2NjUgNDAuMTM2NyA2MC4zNTk0IDQwLjEzNjdDNTkuNjEyIDQwLjEzNjcgNTguOTM5OCAzOS45NzcyIDU4LjM0MjggMzkuNjU4MkM1Ny43NTAzIDM5LjMzNDYgNTcuMjgwOSAzOC44OTcxIDU2LjkzNDYgMzguMzQ1N0M1Ni41OTI4IDM3Ljc5NDMgNTYuNDIxOSAzNy4xNzIyIDU2LjQyMTkgMzYuNDc5NUM1Ni40MjE5IDM1LjgxODcgNTYuNTc2OCAzNS4yMjg1IDU2Ljg4NjcgMzQuNzA5QzU3LjIwMTIgMzQuMTg5NSA1Ny42MjczIDMzLjc3OTMgNTguMTY1IDMzLjQ3ODVDNTguNzAyOCAzMy4xNzc3IDU5LjMxMzUgMzMuMDI3MyA1OS45OTcxIDMzLjAyNzNDNjAuNzAzNSAzMy4wMjczIDYxLjMyNTUgMzMuMTkzNyA2MS44NjMzIDMzLjUyNjRDNjIuNDAxIDMzLjg1NDUgNjIuODIwMyAzNC4zMTQ4IDYzLjEyMTEgMzQuOTA3MkM2My40MjE5IDM1LjQ5NTEgNjMuNTcyMyAzNi4xNzY0IDYzLjU3MjMgMzYuOTUxMlYzNy4xNjk5SDU4LjUzNDJDNTguNjE2MiAzNy40Mzg4IDU4Ljc0ODQgMzcuNjc1OCA1OC45MzA3IDM3Ljg4MDlDNTkuMTE3NSAzOC4wODE0IDU5LjM0OTkgMzguMjQwOSA1OS42Mjc5IDM4LjM1OTRDNTkuOTEwNSAzOC40Nzc5IDYwLjIzMTggMzguNTM3MSA2MC41OTE4IDM4LjUzNzFDNjEuMjg5MSAzOC41MzcxIDYxLjkzODUgMzguMzExNSA2Mi41NCAzNy44NjA0TDYzLjE0MTYgMzkuMjM0NFpNNTguNDQ1MyAzNi4xNzE5SDYxLjc2MDdDNjEuNzI0MyAzNS44NzU3IDYxLjYzMDkgMzUuNjE1OSA2MS40ODA1IDM1LjM5MjZDNjEuMzM0NiAzNS4xNjQ3IDYxLjE0MSAzNC45ODcgNjAuODk5NCAzNC44NTk0QzYwLjY2MjQgMzQuNzMxOCA2MC4zOTU4IDM0LjY2OCA2MC4wOTk2IDM0LjY2OEM1OS43OTg4IDM0LjY2OCA1OS41Mjk5IDM0LjczNCA1OS4yOTMgMzQuODY2MkM1OS4wNjA1IDM0Ljk5ODQgNTguODcxNCAzNS4xNzYxIDU4LjcyNTYgMzUuMzk5NEM1OC41Nzk4IDM1LjYyMjcgNTguNDg2MyAzNS44ODAyIDU4LjQ0NTMgMzYuMTcxOVpNNzEuMTEyMyAzOS4yMzQ0QzcwLjI2NDYgMzkuODM1OSA2OS4zMzcyIDQwLjEzNjcgNjguMzMwMSA0MC4xMzY3QzY3LjU4MjcgNDAuMTM2NyA2Ni45MTA1IDM5Ljk3NzIgNjYuMzEzNSAzOS42NTgyQzY1LjcyMSAzOS4zMzQ2IDY1LjI1MTYgMzguODk3MSA2NC45MDUzIDM4LjM0NTdDNjQuNTYzNSAzNy43OTQzIDY0LjM5MjYgMzcuMTcyMiA2NC4zOTI2IDM2LjQ3OTVDNjQuMzkyNiAzNS44MTg3IDY0LjU0NzUgMzUuMjI4NSA2NC44NTc0IDM0LjcwOUM2NS4xNzE5IDM0LjE4OTUgNjUuNTk4IDMzLjc3OTMgNjYuMTM1NyAzMy40Nzg1QzY2LjY3MzUgMzMuMTc3NyA2Ny4yODQyIDMzLjAyNzMgNjcuOTY3OCAzMy4wMjczQzY4LjY3NDIgMzMuMDI3MyA2OS4yOTYyIDMzLjE5MzcgNjkuODM0IDMzLjUyNjRDNzAuMzcxNyAzMy44NTQ1IDcwLjc5MSAzNC4zMTQ4IDcxLjA5MTggMzQuOTA3MkM3MS4zOTI2IDM1LjQ5NTEgNzEuNTQzIDM2LjE3NjQgNzEuNTQzIDM2Ljk1MTJWMzcuMTY5OUg2Ni41MDQ5QzY2LjU4NjkgMzcuNDM4OCA2Ni43MTkxIDM3LjY3NTggNjYuOTAxNCAzNy44ODA5QzY3LjA4ODIgMzguMDgxNCA2Ny4zMjA2IDM4LjI0MDkgNjcuNTk4NiAzOC4zNTk0QzY3Ljg4MTIgMzguNDc3OSA2OC4yMDI1IDM4LjUzNzEgNjguNTYyNSAzOC41MzcxQzY5LjI1OTggMzguNTM3MSA2OS45MDkyIDM4LjMxMTUgNzAuNTEwNyAzNy44NjA0TDcxLjExMjMgMzkuMjM0NFpNNjYuNDE2IDM2LjE3MTlINjkuNzMxNEM2OS42OTUgMzUuODc1NyA2OS42MDE2IDM1LjYxNTkgNjkuNDUxMiAzNS4zOTI2QzY5LjMwNTMgMzUuMTY0NyA2OS4xMTE3IDM0Ljk4NyA2OC44NzAxIDM0Ljg1OTRDNjguNjMzMSAzNC43MzE4IDY4LjM2NjUgMzQuNjY4IDY4LjA3MDMgMzQuNjY4QzY3Ljc2OTUgMzQuNjY4IDY3LjUwMDcgMzQuNzM0IDY3LjI2MzcgMzQuODY2MkM2Ny4wMzEyIDM0Ljk5ODQgNjYuODQyMSAzNS4xNzYxIDY2LjY5NjMgMzUuMzk5NEM2Ni41NTA1IDM1LjYyMjcgNjYuNDU3IDM1Ljg4MDIgNjYuNDE2IDM2LjE3MTlaTTc5LjgyODEgNDBINzguMTA1NUw3OC4wMDI5IDM5LjA3MDNDNzcuNzExMyAzOS4zOTg0IDc3LjM2MDQgMzkuNjU4MiA3Ni45NTAyIDM5Ljg0OTZDNzYuNTQ0NiA0MC4wNDEgNzYuMTAwMyA0MC4xMzY3IDc1LjYxNzIgNDAuMTM2N0M3NC45OTI4IDQwLjEzNjcgNzQuNDM0NiAzOS45ODQgNzMuOTQyNCAzOS42Nzg3QzczLjQ1NDggMzkuMzY4OCA3My4wNjk3IDM4Ljk0NSA3Mi43ODcxIDM4LjQwNzJDNzIuNTA0NiAzNy44Njk1IDcyLjM2MzMgMzcuMjYxMSA3Mi4zNjMzIDM2LjU4MkM3Mi4zNjMzIDM1Ljg5ODQgNzIuNTA0NiAzNS4yOSA3Mi43ODcxIDM0Ljc1NjhDNzMuMDY5NyAzNC4yMTkxIDczLjQ1NDggMzMuNzk3NSA3My45NDI0IDMzLjQ5MjJDNzQuNDM0NiAzMy4xODIzIDc0Ljk5MjggMzMuMDI3MyA3NS42MTcyIDMzLjAyNzNDNzYuMDYzOCAzMy4wMjczIDc2LjQ3ODUgMzMuMTA5NCA3Ni44NjEzIDMzLjI3MzRDNzcuMjQ4NyAzMy40MzI5IDc3LjU4MzcgMzMuNjU2MiA3Ny44NjYyIDMzLjk0MzRWMjkuNzQ2MUg3OS44MjgxVjQwWk03Ni4xMjMgMzguMzc5OUM3Ni40NDY2IDM4LjM3OTkgNzYuNzM4MyAzOC4zMDcgNzYuOTk4IDM4LjE2MTFDNzcuMjYyNCAzOC4wMTUzIDc3LjQ3MiAzNy44MTcxIDc3LjYyNyAzNy41NjY0Qzc3Ljc4NjUgMzcuMzExMiA3Ny44NjYyIDM3LjAyMTggNzcuODY2MiAzNi42OTgyVjM2LjQ1MjFDNzcuODY2MiAzNi4xMjg2IDc3Ljc4NjUgMzUuODQxNSA3Ny42MjcgMzUuNTkwOEM3Ny40NzIgMzUuMzQwMiA3Ny4yNjI0IDM1LjE0NDIgNzYuOTk4IDM1LjAwMjlDNzYuNzM4MyAzNC44NTcxIDc2LjQ0NjYgMzQuNzg0MiA3Ni4xMjMgMzQuNzg0MkM3NS43OTA0IDM0Ljc4NDIgNzUuNDkxOSAzNC44NjE3IDc1LjIyNzUgMzUuMDE2NkM3NC45NjMyIDM1LjE3MTUgNzQuNzUzNiAzNS4zODU3IDc0LjU5ODYgMzUuNjU5MkM3NC40NDgyIDM1LjkyODEgNzQuMzczIDM2LjIzNTcgNzQuMzczIDM2LjU4MkM3NC4zNzMgMzYuOTIzOCA3NC40NDgyIDM3LjIzMTQgNzQuNTk4NiAzNy41MDQ5Qzc0Ljc1MzYgMzcuNzczOCA3NC45NjMyIDM3Ljk4OCA3NS4yMjc1IDM4LjE0NzVDNzUuNDkxOSAzOC4zMDI0IDc1Ljc5MDQgMzguMzc5OSA3Ni4xMjMgMzguMzc5OVpNODMuMjE4OCA0MEg4MS40OTYxVjI5Ljc0NjFIODMuNDU4VjMzLjk0MzRDODMuNzQ1MSAzMy42NTYyIDg0LjA3NzggMzMuNDMyOSA4NC40NTYxIDMzLjI3MzRDODQuODM4OSAzMy4xMDk0IDg1LjI1MzYgMzMuMDI3MyA4NS43MDAyIDMzLjAyNzNDODYuMzI5MSAzMy4wMjczIDg2Ljg4NzQgMzMuMTgyMyA4Ny4zNzUgMzMuNDkyMkM4Ny44NjI2IDMzLjc5NzUgODguMjQ3NyAzNC4yMTkxIDg4LjUzMDMgMzQuNzU2OEM4OC44MTI4IDM1LjI5IDg4Ljk1NDEgMzUuODk4NCA4OC45NTQxIDM2LjU4MkM4OC45NTQxIDM3LjI2MTEgODguODEyOCAzNy44Njk1IDg4LjUzMDMgMzguNDA3MkM4OC4yNDc3IDM4Ljk0NSA4Ny44NjI2IDM5LjM2ODggODcuMzc1IDM5LjY3ODdDODYuODg3NCAzOS45ODQgODYuMzI5MSA0MC4xMzY3IDg1LjcwMDIgNDAuMTM2N0M4NS4yMTcxIDQwLjEzNjcgODQuNzcwNSA0MC4wNDMzIDg0LjM2MDQgMzkuODU2NEM4My45NTQ4IDM5LjY2NSA4My42MDYxIDM5LjQwMyA4My4zMTQ1IDM5LjA3MDNMODMuMjE4OCA0MFpNODUuMjAxMiAzOC4zNzk5Qzg1LjUzMzkgMzguMzc5OSA4NS44MzAxIDM4LjMwMjQgODYuMDg5OCAzOC4xNDc1Qzg2LjM1NDIgMzcuOTkyNSA4Ni41NjE1IDM3Ljc3ODMgODYuNzExOSAzNy41MDQ5Qzg2Ljg2NjkgMzcuMjMxNCA4Ni45NDQzIDM2LjkyMTUgODYuOTQ0MyAzNi41NzUyQzg2Ljk0NDMgMzYuMjMzNCA4Ni44NjY5IDM1LjkyODEgODYuNzExOSAzNS42NTkyQzg2LjU2MTUgMzUuMzg1NyA4Ni4zNTQyIDM1LjE3MTUgODYuMDg5OCAzNS4wMTY2Qzg1LjgzMDEgMzQuODYxNyA4NS41MzM5IDM0Ljc4NDIgODUuMjAxMiAzNC43ODQyQzg0Ljg4NjcgMzQuNzg0MiA4NC41OTk2IDM0Ljg1NDggODQuMzM5OCAzNC45OTYxQzg0LjA4NDYgMzUuMTM3NCA4My44Nzk2IDM1LjMzMTEgODMuNzI0NiAzNS41NzcxQzgzLjU2OTcgMzUuODIzMiA4My40ODA4IDM2LjEwNTggODMuNDU4IDM2LjQyNDhWMzYuNzI1NkM4My40ODA4IDM3LjA0NDYgODMuNTY5NyAzNy4zMjk0IDgzLjcyNDYgMzcuNTgwMUM4My44Nzk2IDM3LjgyNjIgODQuMDg0NiAzOC4wMjIxIDg0LjMzOTggMzguMTY4Qzg0LjU5NTEgMzguMzA5MiA4NC44ODIyIDM4LjM3OTkgODUuMjAxMiAzOC4zNzk5Wk05Ni4zMDI3IDQwSDk0LjU5MzhMOTQuNDkxMiAzOS4xODY1Qzk0LjI0MDYgMzkuNDg3MyA5My45MzA3IDM5LjcyMiA5My41NjE1IDM5Ljg5MDZDOTMuMTkyNCA0MC4wNTQ3IDkyLjc4NjggNDAuMTM2NyA5Mi4zNDQ3IDQwLjEzNjdDOTEuODY2MiA0MC4xMzY3IDkxLjQ0MDEgNDAuMDQ1NiA5MS4wNjY0IDM5Ljg2MzNDOTAuNjkyNyAzOS42NzY0IDkwLjM5ODggMzkuNDIxMiA5MC4xODQ2IDM5LjA5NzdDODkuOTcwNCAzOC43Njk1IDg5Ljg2MzMgMzguMzk4MSA4OS44NjMzIDM3Ljk4MzRDODkuODYzMyAzNy41NDU5IDg5Ljk3OTUgMzcuMTYwOCA5MC4yMTE5IDM2LjgyODFDOTAuNDQ0MyAzNi40OTU0IDkwLjc2MzMgMzYuMjM1NyA5MS4xNjg5IDM2LjA0ODhDOTEuNTc5MSAzNS44NTc0IDkyLjA0MzkgMzUuNzYxNyA5Mi41NjM1IDM1Ljc2MTdDOTIuODY4OCAzNS43NjE3IDkzLjE3NDIgMzUuNzk1OSA5My40Nzk1IDM1Ljg2NDNDOTMuNzg5NCAzNS45MzI2IDk0LjA3NjUgMzYuMDI4MyA5NC4zNDA4IDM2LjE1MTRWMzUuOTczNkM5NC4zNDA4IDM1LjcwMDIgOTQuMjYzMyAzNS40NjU1IDk0LjEwODQgMzUuMjY5NUM5My45NTggMzUuMDY5IDkzLjc0ODQgMzQuOTE0MSA5My40Nzk1IDM0LjgwNDdDOTMuMjE1MiAzNC42OTUzIDkyLjkxODkgMzQuNjQwNiA5Mi41OTA4IDM0LjY0MDZDOTIuMjc2NCAzNC42NDA2IDkxLjk2NDIgMzQuNjkwOCA5MS42NTQzIDM0Ljc5MUM5MS4zNDkgMzQuODkxMyA5MS4wNjY0IDM1LjA0MTcgOTAuODA2NiAzNS4yNDIyTDkwLjI3MzQgMzMuNzQ1MUM5MC43MzM3IDMzLjUwODEgOTEuMTk4NiAzMy4zMzA0IDkxLjY2OCAzMy4yMTE5QzkyLjE0MTkgMzMuMDg4OSA5Mi41OTk5IDMzLjAyNzMgOTMuMDQyIDMzLjAyNzNDOTMuNzA3NCAzMy4wMjczIDk0LjI4MzkgMzMuMTU5NSA5NC43NzE1IDMzLjQyMzhDOTUuMjU5MSAzMy42ODM2IDk1LjYzNTEgMzQuMDUyNyA5NS44OTk0IDM0LjUzMTJDOTYuMTY4MyAzNS4wMDUyIDk2LjMwMjcgMzUuNTY4IDk2LjMwMjcgMzYuMjE5N1Y0MFpNOTIuNzc1NCAzOC42MjZDOTMuMDM1MiAzOC42MjYgOTMuMjgzNSAzOC41NjkgOTMuNTIwNSAzOC40NTUxQzkzLjc1NzUgMzguMzQxMSA5My45NDg5IDM4LjE4NjIgOTQuMDk0NyAzNy45OTAyQzk0LjI0NTEgMzcuNzk0MyA5NC4zMjQ5IDM3LjU3NzggOTQuMzM0IDM3LjM0MDhWMzcuMjkzQzk0LjEzMzUgMzcuMTU2MiA5My45MTAyIDM3LjA1MTQgOTMuNjY0MSAzNi45Nzg1QzkzLjQyMjUgMzYuOTAxIDkzLjE3NjQgMzYuODYyMyA5Mi45MjU4IDM2Ljg2MjNDOTIuNTUyMSAzNi44NjIzIDkyLjI0NjcgMzYuOTQ0MyA5Mi4wMDk4IDM3LjEwODRDOTEuNzcyOCAzNy4yNzI1IDkxLjY1NDMgMzcuNDg0NCA5MS42NTQzIDM3Ljc0NDFDOTEuNjU0MyAzNy45MTI4IDkxLjcwMjEgMzguMDY1NCA5MS43OTc5IDM4LjIwMjFDOTEuODk4MSAzOC4zMzQzIDkyLjAzMjYgMzguNDM5MSA5Mi4yMDEyIDM4LjUxNjZDOTIuMzY5OCAzOC41ODk1IDkyLjU2MTIgMzguNjI2IDkyLjc3NTQgMzguNjI2Wk0xMDMuODkxIDM4LjkxMzFDMTAzLjU1OCAzOS4yOTU5IDEwMy4xNSAzOS41OTY3IDEwMi42NjcgMzkuODE1NEMxMDIuMTg0IDQwLjAyOTYgMTAxLjY1MyA0MC4xMzY3IDEwMS4wNzQgNDAuMTM2N0MxMDAuMzcyIDQwLjEzNjcgOTkuNzQzNSAzOS45ODQgOTkuMTg3NSAzOS42Nzg3Qzk4LjYzNjEgMzkuMzY4OCA5OC4yMDA4IDM4Ljk0NSA5Ny44ODE4IDM4LjQwNzJDOTcuNTY3NCAzNy44Njk1IDk3LjQxMDIgMzcuMjYxMSA5Ny40MTAyIDM2LjU4MkM5Ny40MTAyIDM1Ljg5ODQgOTcuNTY3NCAzNS4yOSA5Ny44ODE4IDM0Ljc1NjhDOTguMjAwOCAzNC4yMTkxIDk4LjYzNjEgMzMuNzk3NSA5OS4xODc1IDMzLjQ5MjJDOTkuNzQzNSAzMy4xODIzIDEwMC4zNzIgMzMuMDI3MyAxMDEuMDc0IDMzLjAyNzNDMTAxLjY0OCAzMy4wMjczIDEwMi4xNzcgMzMuMTM0NCAxMDIuNjYgMzMuMzQ4NkMxMDMuMTQzIDMzLjU2MjggMTAzLjU1MSAzMy44NTkgMTAzLjg4NCAzNC4yMzczTDEwMi43MjkgMzUuNDQ3M0MxMDIuNTUxIDM1LjI0MjIgMTAyLjMyNSAzNS4wODI3IDEwMi4wNTIgMzQuOTY4OEMxMDEuNzgzIDM0Ljg1MDMgMTAxLjUgMzQuNzkxIDEwMS4yMDQgMzQuNzkxQzEwMC44NjIgMzQuNzkxIDEwMC41NTcgMzQuODY4NSAxMDAuMjg4IDM1LjAyMzRDMTAwLjAxOSAzNS4xNzM4IDk5LjgwNzMgMzUuMzgzNSA5OS42NTIzIDM1LjY1MjNDOTkuNDk3NCAzNS45MTY3IDk5LjQxOTkgMzYuMjIyIDk5LjQxOTkgMzYuNTY4NEM5OS40MTk5IDM2LjkxOTMgOTkuNDk3NCAzNy4yMzE0IDk5LjY1MjMgMzcuNTA0OUM5OS44MDczIDM3Ljc3ODMgMTAwLjAxOSAzNy45OTI1IDEwMC4yODggMzguMTQ3NUMxMDAuNTU3IDM4LjI5NzkgMTAwLjg2MiAzOC4zNzMgMTAxLjIwNCAzOC4zNzNDMTAxLjUgMzguMzczIDEwMS43ODUgMzguMzE2MSAxMDIuMDU5IDM4LjIwMjFDMTAyLjMzMiAzOC4wODM3IDEwMi41NTUgMzcuOTIxOSAxMDIuNzI5IDM3LjcxNjhMMTAzLjg5MSAzOC45MTMxWk0xMDcuMDU2IDQwSDEwNS4wOTRWMjkuNzQ2MUgxMDcuMDU2VjM2LjA0ODhMMTA3LjcyNiAzNS4yNDIyTDEwOS42OTQgMzMuMTY0MUgxMTIuMTQ4TDEwOS4yNTcgMzYuMjA2MUwxMTIuNDkgNDBIMTA5Ljk1NEwxMDcuOTEgMzcuNDM2NUwxMDcuMDU2IDM4LjIxNThWNDBaJyBmaWxsPSclMjMwMDg1RkYnLyUzZSUzYy9zdmclM2VcIjtcbiAgZXhwb3J0IGRlZmF1bHQgaW1nOyIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VTaWduVXAgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvYXV0aFwiO1xuaW1wb3J0IHsgSW5wdXQgfSBmcm9tIFwiLi4vLi4vYXRvbXMvaW5wdXRzL0lucHV0XCI7XG5pbXBvcnQgTG9nb0ZlZWRiYWNrRGFyayBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2ljb25zL2xvZ28tZmVlZGJhY2stZGFyay5zdmdcIjtcblxuZXhwb3J0IGNvbnN0IFNpZ25VcEZvcm0gPSAoe1xuICBjbG9zZU1vZGFsLFxuICBzZXRJc1NpZ25pbmdVcCxcbn06IHtcbiAgY2xvc2VNb2RhbDogKCkgPT4gdm9pZDtcbiAgc2V0SXNTaWduaW5nVXA6IChpc1NpZ25pbmdVcDogYm9vbGVhbikgPT4gdm9pZDtcbn0pID0+IHtcbiAgY29uc3QgW2ZpcnN0TmFtZSwgc2V0Rmlyc3ROYW1lXSA9IHVzZVN0YXRlKFwiXCIpO1xuICBjb25zdCBbbGFzdE5hbWUsIHNldExhc3ROYW1lXSA9IHVzZVN0YXRlKFwiXCIpO1xuICBjb25zdCBbZW1haWwsIHNldEVtYWlsXSA9IHVzZVN0YXRlKFwiXCIpO1xuICBjb25zdCBbcGFzc3dvcmQsIHNldFBhc3N3b3JkXSA9IHVzZVN0YXRlKFwiXCIpO1xuXG4gIGNvbnN0IHsgbXV0YXRlOiBzaWduVXAgfSA9IHVzZVNpZ25VcCgpO1xuXG4gIGNvbnN0IGhhbmRsZVNpZ25VcCA9ICgpID0+IHtcbiAgICBzaWduVXAoXG4gICAgICB7IGZpcnN0TmFtZSwgbGFzdE5hbWUsIGVtYWlsLCBwYXNzd29yZCB9LFxuICAgICAge1xuICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICBjbG9zZU1vZGFsKCk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uRXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICB9LFxuICAgICAgfVxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCB6LTEwIGZsZXggZmxleC1jb2wganVzdGlmeS1zdGFydFwiPlxuICAgICAgPGltZyBzcmM9e0xvZ29GZWVkYmFja0Rhcmt9IGNsYXNzTmFtZT1cIm1iLTEyIGgtWzQzcHhdIHctbWluXCIgLz5cbiAgICAgIDxoMSBjbGFzc05hbWU9XCJrdW1iaC1zZW1pYm9sZCB0ZXh0LTN4bCB0ZXh0LWdyYXktZmVlZGJhY2stOTAwIG1iLTNcIj5cbiAgICAgICAgSW5zY3JpcHRpb25cbiAgICAgIDwvaDE+XG5cbiAgICAgIDxJbnB1dFxuICAgICAgICBsYWJlbD1cIlByw6lub21cIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIlByw6lub21cIlxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIHZhbHVlPXtmaXJzdE5hbWV9XG4gICAgICAgIHNldFZhbHVlPXtzZXRGaXJzdE5hbWV9XG4gICAgICAvPlxuICAgICAgPElucHV0XG4gICAgICAgIGxhYmVsPVwiTm9tXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJOb21cIlxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIHZhbHVlPXtsYXN0TmFtZX1cbiAgICAgICAgc2V0VmFsdWU9e3NldExhc3ROYW1lfVxuICAgICAgLz5cbiAgICAgIDxJbnB1dFxuICAgICAgICBsYWJlbD1cIkUtbWFpbFwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiRS1tYWlsXCJcbiAgICAgICAgdHlwZT1cImVtYWlsXCJcbiAgICAgICAgdmFsdWU9e2VtYWlsfVxuICAgICAgICBzZXRWYWx1ZT17c2V0RW1haWx9XG4gICAgICAvPlxuICAgICAgPElucHV0XG4gICAgICAgIGxhYmVsPVwiTW90IGRlIHBhc3NlXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJNb3QgZGUgcGFzc2VcIlxuICAgICAgICB0eXBlPVwicGFzc3dvcmRcIlxuICAgICAgICB2YWx1ZT17cGFzc3dvcmR9XG4gICAgICAgIHNldFZhbHVlPXtzZXRQYXNzd29yZH1cbiAgICAgIC8+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG9uQ2xpY2s9e2hhbmRsZVNpZ25VcH1cbiAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHB4LTQgcHktMiBiZy1ibHVlLTUwMCBrdW1iaC1tZWRpdW0gdGV4dC13aGl0ZSByb3VuZGVkLWxnIG10LTIgIGRpc2FibGVkOmJnLWJsdWUtMTAwIGRpc2FibGVkOnRleHQtYmx1ZS0zMDBcIlxuICAgICAgPlxuICAgICAgICBTJ2luc2NyaXJlXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgb25DbGljaz17KCkgPT4gc2V0SXNTaWduaW5nVXAoZmFsc2UpfVxuICAgICAgICBjbGFzc05hbWU9XCJmb250LWJvbGQgdGV4dC1jZW50ZXIgdGV4dC1ibGFjayB0ZXh0LXNtIG10LTJcIlxuICAgICAgPlxuICAgICAgICBTZSBjb25uZWN0ZXJcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICApO1xufTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVNpZ25JbiB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9hdXRoXCI7XG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gXCIuLi8uLi9hdG9tcy9pbnB1dHMvSW5wdXRcIjtcbmltcG9ydCBMb2dvRmVlZGJhY2tEYXJrIGZyb20gXCIuLi8uLi8uLi9hc3NldHMvaWNvbnMvbG9nby1mZWVkYmFjay1kYXJrLnN2Z1wiO1xuXG5jb25zdCBTaWduSW5Gb3JtID0gKHtcbiAgc2V0SXNTaWduaW5nVXAsXG4gIGNsb3NlTW9kYWwsXG59OiB7XG4gIHNldElzU2lnbmluZ1VwOiAoaXNTaWduaW5nVXA6IGJvb2xlYW4pID0+IHZvaWQ7XG4gIGNsb3NlTW9kYWw6ICgpID0+IHZvaWQ7XG59KSA9PiB7XG4gIGNvbnN0IFtlbWFpbCwgc2V0RW1haWxdID0gUmVhY3QudXNlU3RhdGUoXCJcIik7XG4gIGNvbnN0IFtwYXNzd29yZCwgc2V0UGFzc3dvcmRdID0gUmVhY3QudXNlU3RhdGUoXCJcIik7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gUmVhY3QudXNlU3RhdGUoXCJcIik7XG4gIGNvbnN0IHsgbXV0YXRlOiBzaWduSW4gfSA9IHVzZVNpZ25JbigpO1xuXG4gIGNvbnN0IGhhbmRsZUxvZ2luID0gKCkgPT4ge1xuICAgIHNpZ25JbihcbiAgICAgIHsgZW1haWwsIHBhc3N3b3JkIH0sXG4gICAgICB7XG4gICAgICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgIGNsb3NlTW9kYWwoKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25FcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgICBpZiAoZXJyb3IubWVzc2FnZSA9PT0gXCJOZXR3b3JrIEVycm9yXCIpIHtcbiAgICAgICAgICAgIHNldEVycm9yKFwiVW5lIGVycmV1ciByw6lzZWF1IGVzdCBzdXJ2ZW51ZVwiKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yLm1lc3NhZ2UgPT09IFwiSW52YWxpZCBjcmVkZW50aWFsc1wiKSB7XG4gICAgICAgICAgICBzZXRFcnJvcihcIkVtYWlsIG91IG1vdCBkZSBwYXNzZSBpbnZhbGlkZVwiKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0RXJyb3IoXCJVbmUgZXJyZXVyIGVzdCBzdXJ2ZW51ZVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgKTtcbiAgfTtcblxuICAvLyBjb25zdCBoYW5kbGVHaXRodWJMb2dpbiA9ICgpID0+IHtcbiAgLy8gICBjb25zdCBjdXJyZW50VXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gIC8vICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBgaHR0cDovL2xvY2FsaG9zdDozMDAwL2F1dGgvZ2l0aHViP3JlZGlyZWN0VXJsPSR7ZW5jb2RlVVJJQ29tcG9uZW50KFxuICAvLyAgICAgY3VycmVudFVybFxuICAvLyAgICl9YDtcbiAgLy8gfTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsIHotMTAgZmxleCBmbGV4LWNvbCBqdXN0aWZ5LXN0YXJ0XCI+XG4gICAgICA8aW1nIHNyYz17TG9nb0ZlZWRiYWNrRGFya30gY2xhc3NOYW1lPVwibWItMTIgaC1bNDNweF0gdy1taW5cIiAvPlxuICAgICAgPGgxIGNsYXNzTmFtZT1cImt1bWJoLXNlbWlib2xkIHRleHQtM3hsIHRleHQtZ3JheS1mZWVkYmFjay05MDAgbWItM1wiPlxuICAgICAgICBDb25uZXhpb25cbiAgICAgIDwvaDE+XG4gICAgICA8SW5wdXRcbiAgICAgICAgbGFiZWw9XCJFbWFpbFwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiRW1haWxcIlxuICAgICAgICB0eXBlPVwiZW1haWxcIlxuICAgICAgICB2YWx1ZT17ZW1haWx9XG4gICAgICAgIHNldFZhbHVlPXtzZXRFbWFpbH1cbiAgICAgIC8+XG4gICAgICA8SW5wdXRcbiAgICAgICAgbGFiZWw9XCJNb3QgZGUgcGFzc2VcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIk1vdCBkZSBwYXNzZVwiXG4gICAgICAgIHR5cGU9XCJwYXNzd29yZFwiXG4gICAgICAgIHZhbHVlPXtwYXNzd29yZH1cbiAgICAgICAgc2V0VmFsdWU9e3NldFBhc3N3b3JkfVxuICAgICAgLz5cbiAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtcmVkLTUwMCB0ZXh0LXhzIGgtNCB0ZXh0LWNlbnRlclwiPntlcnJvcn08L3A+XG5cbiAgICAgIDxidXR0b25cbiAgICAgICAgb25DbGljaz17aGFuZGxlTG9naW59XG4gICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBweC00IHB5LTIgYmctYmx1ZS01MDAga3VtYmgtbWVkaXVtIHRleHQtd2hpdGUgcm91bmRlZC1sZyBtdC0yICBkaXNhYmxlZDpiZy1ibHVlLTEwMCBkaXNhYmxlZDp0ZXh0LWJsdWUtMzAwXCJcbiAgICAgID5cbiAgICAgICAgU2UgY29ubmVjdGVyXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgb25DbGljaz17KCkgPT4gc2V0SXNTaWduaW5nVXAodHJ1ZSl9XG4gICAgICAgIGNsYXNzTmFtZT1cImZvbnQtYm9sZCB0ZXh0LWNlbnRlciB0ZXh0LWJsYWNrIHRleHQtc20gbXQtMlwiXG4gICAgICA+XG4gICAgICAgIFMnaW5zY3JpcmVcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2lnbkluRm9ybTtcbiIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTaWduVXBGb3JtIH0gZnJvbSBcIi4uL21vbGVjdWxlcy9mb3Jtcy9TaWduVXBGb3JtXCI7XG5pbXBvcnQgU2lnbkluRm9ybSBmcm9tIFwiLi4vbW9sZWN1bGVzL2Zvcm1zL1NpZ25JbkZvcm1cIjtcblxuZXhwb3J0IGNvbnN0IENvbm5lY3Rpb24gPSAoeyBjbG9zZU1vZGFsIH06IHsgY2xvc2VNb2RhbDogKCkgPT4gdm9pZCB9KSA9PiB7XG4gIGNvbnN0IFtpc1NpZ25pbmdVcCwgc2V0SXNTaWduaW5nVXBdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJwLThcIj5cbiAgICAgIHtpc1NpZ25pbmdVcCA/IChcbiAgICAgICAgPFNpZ25VcEZvcm0gY2xvc2VNb2RhbD17Y2xvc2VNb2RhbH0gc2V0SXNTaWduaW5nVXA9e3NldElzU2lnbmluZ1VwfSAvPlxuICAgICAgKSA6IChcbiAgICAgICAgPFNpZ25JbkZvcm0gc2V0SXNTaWduaW5nVXA9e3NldElzU2lnbmluZ1VwfSBjbG9zZU1vZGFsPXtjbG9zZU1vZGFsfSAvPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iLCJpbXBvcnQgeyB1c2VSZWYgfSBmcm9tIFwicmVhY3RcIjtcblxuZXhwb3J0IGNvbnN0IE1vZGFsID0gKHtcbiAgaXNWaXNpYmxlLFxuICBjbG9zZU1vZGFsLFxuICBsaW1pdFdpZHRoID0gdHJ1ZSxcbiAgY2hpbGRyZW4sXG59OiB7XG4gIGlzVmlzaWJsZTogYm9vbGVhbjtcbiAgY2xvc2VNb2RhbD86ICgpID0+IHZvaWQ7XG4gIGxpbWl0V2lkdGg/OiBib29sZWFuO1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xufSkgPT4ge1xuICBjb25zdCByZXNpemluZyA9IHVzZVJlZihmYWxzZSk7XG5cbiAgaWYgKCFpc1Zpc2libGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCB3aWR0aCA9IGxpbWl0V2lkdGggPyBcInctWzQwMHB4XVwiIDogXCJcIjtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9XCJtb2RhbFwiXG4gICAgICBvbk1vdXNlRG93bj17KGUpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmICh0YXJnZXQudGFnTmFtZSA9PT0gXCJURVhUQVJFQVwiKSB7XG4gICAgICAgICAgcmVzaXppbmcuY3VycmVudCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH19XG4gICAgICBvbk1vdXNlVXA9eygpID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgcmVzaXppbmcuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICB9LCAxMDApO1xuICAgICAgfX1cbiAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgIGlmIChjbG9zZU1vZGFsICYmIGUudGFyZ2V0ID09PSBlLmN1cnJlbnRUYXJnZXQgJiYgIXJlc2l6aW5nLmN1cnJlbnQpIHtcbiAgICAgICAgICBjbG9zZU1vZGFsKCk7XG4gICAgICAgIH1cbiAgICAgIH19XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3dpZHRofSBiZy13aGl0ZSByb3VuZGVkLWxnYH0+e2NoaWxkcmVufTwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufTtcbiIsImltcG9ydCB7IENvbm5lY3Rpb24gfSBmcm9tIFwiLi4vLi4vb3JnYW5pc21zL0Nvbm5lY3Rpb25cIjtcbmltcG9ydCB7IE1vZGFsIH0gZnJvbSBcIi4vTW9kYWxcIjtcblxuZXhwb3J0IGNvbnN0IENvbm5lY3Rpb25Nb2RhbCA9ICh7XG4gIGlzVmlzaWJsZSxcbiAgY2xvc2VNb2RhbCxcbn06IHtcbiAgaXNWaXNpYmxlOiBib29sZWFuO1xuICBjbG9zZU1vZGFsOiAoKSA9PiB2b2lkO1xufSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxNb2RhbCBpc1Zpc2libGU9e2lzVmlzaWJsZX0gY2xvc2VNb2RhbD17Y2xvc2VNb2RhbH0+XG4gICAgICA8Q29ubmVjdGlvbiBjbG9zZU1vZGFsPXtjbG9zZU1vZGFsfSAvPlxuICAgIDwvTW9kYWw+XG4gICk7XG59O1xuIiwiaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuLi9hdG9tcy9idXR0b25zL0J1dHRvblwiO1xuaW1wb3J0IHsgQ29ubmVjdGlvbk1vZGFsIH0gZnJvbSBcIi4uL2F0b21zL21vZGFscy9Db25uZWN0aW9uTW9kYWxcIjtcblxuZXhwb3J0IGNvbnN0IENvbm5lY3Rpb25QYW5lbCA9ICgpID0+IHtcbiAgY29uc3QgW2Nvbm5lY3Rpb25Nb2RhbE9wZW4sIHNldENvbm5lY3Rpb25Nb2RhbE9wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC00XCI+XG4gICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtY2VudGVyIHRleHQtZ3JheS1mZWVkYmFjay0yMDAgdGV4dC1zbVwiPlxuICAgICAgICAgIENvbm5lY3RleiB2b3VzIHBvdXIgYWNjw6lkZXIgYXV4IGNvbW1lbnRhaXJlc1xuICAgICAgICA8L3A+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICB0ZXh0PVwiU2UgY29ubmVjdGVyXCJcbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRDb25uZWN0aW9uTW9kYWxPcGVuKHRydWUpfVxuICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxDb25uZWN0aW9uTW9kYWxcbiAgICAgICAgaXNWaXNpYmxlPXtjb25uZWN0aW9uTW9kYWxPcGVufVxuICAgICAgICBjbG9zZU1vZGFsPXsoKSA9PiBzZXRDb25uZWN0aW9uTW9kYWxPcGVuKGZhbHNlKX1cbiAgICAgIC8+XG4gICAgPC8+XG4gICk7XG59O1xuIiwidmFyIGltZyA9IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMTI3JyBoZWlnaHQ9JzQzJyB2aWV3Qm94PScwIDAgMTI3IDQzJyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlJTNjcGF0aCBkPSdNNy40ODY3MyA4LjA3NzY3QzguNDkxMTEgOC4wNzc2NyA5LjQxODYyIDguMjUzNzIgMTAuMjY5MyA4LjYwNTgyQzExLjEzMDIgOC45NDc1NyAxMS44ODM0IDkuNDM0MyAxMi41MjkxIDEwLjA2NkwxMi42MzY3IDguMzg4MzVIMTYuODE4MlYyMi4xMDQ5QzE2LjgxODIgMjQuMDkzMiAxNi40NDQxIDI1LjgyNzggMTUuNjk2IDI3LjMwODdDMTQuOTU4MSAyOC43ODk2IDEzLjkxNzggMjkuOTM5MiAxMi41NzUyIDMwLjc1NzNDMTEuMjQyOSAzMS41ODU4IDkuNjc0ODQgMzIgNy44NzEwNSAzMkM2Ljg3NjkyIDMyIDUuODIxMyAzMS44NjAyIDQuNzA0MTkgMzEuNTgwNkMzLjU4NzA3IDMxLjMwMSAyLjQ0NDMzIDMwLjg2NiAxLjI3NTk3IDMwLjI3NTdMMi42MTM0NCAyNi41NjMxQzMuMTI1ODcgMjYuOTk4MSAzLjg0MzI5IDI3LjM2NTcgNC43NjU2OCAyNy42NjZDNS42ODgwNyAyNy45NzY3IDYuNTc0NTkgMjguMTMyIDcuNDI1MjMgMjguMTMyQzguOTUyMyAyOC4xMzIgMTAuMTYxNyAyNy42MTQyIDExLjA1MzMgMjYuNTc4NkMxMS45NDQ5IDI1LjU1MzQgMTIuMzkwOCAyNC4xNjU3IDEyLjM5MDggMjIuNDE1NVYyMi4zODQ1QzExLjc0NTEgMjIuOTY0NCAxMS4wMDcyIDIzLjQyMDEgMTAuMTc3IDIzLjc1MTVDOS4zNDY4OCAyNC4wNzI1IDguNDUwMTEgMjQuMjMzIDcuNDg2NzMgMjQuMjMzQzYuMDUxOSAyNC4yMzMgNC43NjU2OCAyMy44ODYxIDMuNjI4MDYgMjMuMTkyMkMyLjUwMDcgMjIuNDg4IDEuNjE0MTggMjEuNTMwMSAwLjk2ODUwOSAyMC4zMTg0QzAuMzIyODM2IDE5LjA5NjQgMCAxNy43MDg3IDAgMTYuMTU1M0MwIDE0LjYwMTkgMC4zMjI4MzYgMTMuMjE5NCAwLjk2ODUwOSAxMi4wMDc4QzEuNjE0MTggMTAuNzg1OCAyLjUwMDcgOS44Mjc4MyAzLjYyODA2IDkuMTMzOThDNC43NjU2OCA4LjQyOTc3IDYuMDUxOSA4LjA3NzY3IDcuNDg2NzMgOC4wNzc2N1pNOC40ODU5OCAyMC4zNDk1QzkuNjEzMzUgMjAuMzQ5NSAxMC41NDYgMTkuOTUwOCAxMS4yODM5IDE5LjE1MzRDMTIuMDIxOCAxOC4zNTYgMTIuMzkwOCAxNy4zNTY2IDEyLjM5MDggMTYuMTU1M0MxMi4zOTA4IDE0Ljk1NCAxMi4wMjE4IDEzLjk1NDcgMTEuMjgzOSAxMy4xNTczQzEwLjU0NiAxMi4zNTk5IDkuNjEzMzUgMTEuOTYxMiA4LjQ4NTk4IDExLjk2MTJDNy4zNTg2MiAxMS45NjEyIDYuNDI1OTggMTIuMzU5OSA1LjY4ODA3IDEzLjE1NzNDNC45NTAxNiAxMy45NTQ3IDQuNTgxMiAxNC45NTQgNC41ODEyIDE2LjE1NTNDNC41ODEyIDE3LjM1NjYgNC45NTAxNiAxOC4zNTYgNS42ODgwNyAxOS4xNTM0QzYuNDI1OTggMTkuOTUwOCA3LjM1ODYyIDIwLjM0OTUgOC40ODU5OCAyMC4zNDk1WicgZmlsbD0nd2hpdGUnLyUzZSUzY3BhdGggZD0nTTE4LjkxOTEgMTkuNjUwNUMxOC45MTkxIDE4LjYxNDkgMTkuMjExMiAxNy42ODggMTkuNzk1NCAxNi44Njk5QzIwLjM4OTggMTYuMDUxOCAyMS4yMDQ2IDE1LjQwNDUgMjIuMjM5NyAxNC45MjgyQzIzLjI3NDggMTQuNDUxOCAyNC40NTg2IDE0LjIxMzYgMjUuNzkwOSAxNC4yMTM2QzI2LjIxMTEgMTQuMjEzNiAyNi42NTE4IDE0LjIzOTUgMjcuMTEzIDE0LjI5MTNDMjcuNTg0NCAxNC4zNDMgMjguMDU1OSAxNC40MTA0IDI4LjUyNzMgMTQuNDkzMkMyOC4xODkxIDEyLjgwNTIgMjYuOTc0NiAxMS45NjEyIDI0Ljg4MzkgMTEuOTYxMkMyMy42NDM4IDExLjk2MTIgMjIuMzk4NiAxMi40MzI0IDIxLjE0ODIgMTMuMzc0OEwxOS42MjYzIDkuNkMyMC42OTIxIDkuMDgyMiAyMS43NDI2IDguNjk5MDMgMjIuNzc3OCA4LjQ1MDQ5QzIzLjgxMjkgOC4yMDE5NCAyNC43OTY4IDguMDc3NjcgMjUuNzI5NCA4LjA3NzY3QzI3LjIxNTUgOC4wNzc2NyAyOC41MDE3IDguMzYyNDYgMjkuNTg4MSA4LjkzMjA0QzMwLjY4NDcgOS40OTEyNiAzMS41MzUzIDEwLjI4ODcgMzIuMTQgMTEuMzI0M0MzMi43NDQ3IDEyLjM0OTUgMzMuMDQ3IDEzLjU1NiAzMy4wNDcgMTQuOTQzN1YyMy45MjIzSDI5LjMyNjdMMjkuMDM0NiAyMi4yNjAyQzI4LjQ2MDcgMjIuODcxMiAyNy43NTg3IDIzLjM1MjcgMjYuOTI4NSAyMy43MDQ5QzI2LjEwODYgMjQuMDU3IDI1LjIwNjcgMjQuMjMzIDI0LjIyMjkgMjQuMjMzQzIyLjY2NSAyNC4yMzMgMjEuMzg5MSAyMy44MDg0IDIwLjM5NDkgMjIuOTU5MkMxOS40MTExIDIyLjExIDE4LjkxOTEgMjEuMDA3MSAxOC45MTkxIDE5LjY1MDVaTTIzLjM0NjYgMTguNjI1MkMyMy4zNDY2IDE5LjE0MyAyMy41NDEzIDE5LjU2MjUgMjMuOTMwOCAxOS44ODM1QzI0LjMzMDUgMjAuMTk0MiAyNC44NTMxIDIwLjM0OTUgMjUuNDk4OCAyMC4zNDk1QzI2LjM4MDIgMjAuMzQ5NSAyNy4xMTgxIDIwLjA4MDMgMjcuNzEyNiAxOS41NDE3QzI4LjMxNzIgMTkuMDAzMiAyOC42MTk2IDE4LjM0MDUgMjguNjE5NiAxNy41NTM0VjE3LjI0MjdDMjguMjQwNCAxNy4xMTg0IDI3LjgzMDQgMTcuMDIwMSAyNy4zODk3IDE2Ljk0NzZDMjYuOTU5MyAxNi44NzUxIDI2LjUzMzkgMTYuODM4OCAyNi4xMTM3IDE2LjgzODhDMjUuMjQyNiAxNi44Mzg4IDI0LjU2MTEgMTYuOTk0MiAyNC4wNjkxIDE3LjMwNDlDMjMuNTg3NCAxNy42MTU1IDIzLjM0NjYgMTguMDU1NyAyMy4zNDY2IDE4LjYyNTJaJyBmaWxsPSd3aGl0ZScvJTNlJTNjcGF0aCBkPSdNMzkuNzc1MiAwVjIzLjkyMjNIMzUuMzQ3OFYwSDM5Ljc3NTJaJyBmaWxsPSd3aGl0ZScvJTNlJTNjcGF0aCBkPSdNNDEuODc2MSAxOS42NTA1QzQxLjg3NjEgMTguNjE0OSA0Mi4xNjgyIDE3LjY4OCA0Mi43NTI0IDE2Ljg2OTlDNDMuMzQ2OCAxNi4wNTE4IDQ0LjE2MTYgMTUuNDA0NSA0NS4xOTY3IDE0LjkyODJDNDYuMjMxOSAxNC40NTE4IDQ3LjQxNTYgMTQuMjEzNiA0OC43NDc5IDE0LjIxMzZDNDkuMTY4MSAxNC4yMTM2IDQ5LjYwODggMTQuMjM5NSA1MC4wNyAxNC4yOTEzQzUwLjU0MTUgMTQuMzQzIDUxLjAxMjkgMTQuNDEwNCA1MS40ODQzIDE0LjQ5MzJDNTEuMTQ2MSAxMi44MDUyIDQ5LjkzMTcgMTEuOTYxMiA0Ny44NDA5IDExLjk2MTJDNDYuNjAwOCAxMS45NjEyIDQ1LjM1NTYgMTIuNDMyNCA0NC4xMDUyIDEzLjM3NDhMNDIuNTgzMyA5LjZDNDMuNjQ5MiA5LjA4MjIgNDQuNjk5NyA4LjY5OTAzIDQ1LjczNDggOC40NTA0OUM0Ni43Njk5IDguMjAxOTQgNDcuNzUzOCA4LjA3NzY3IDQ4LjY4NjQgOC4wNzc2N0M1MC4xNzI1IDguMDc3NjcgNTEuNDU4NyA4LjM2MjQ2IDUyLjU0NTEgOC45MzIwNEM1My42NDE3IDkuNDkxMjYgNTQuNDkyNCAxMC4yODg3IDU1LjA5NyAxMS4zMjQzQzU1LjcwMTcgMTIuMzQ5NSA1Ni4wMDQxIDEzLjU1NiA1Ni4wMDQxIDE0Ljk0MzdWMjMuOTIyM0g1Mi4yODM4TDUxLjk5MTcgMjIuMjYwMkM1MS40MTc3IDIyLjg3MTIgNTAuNzE1NyAyMy4zNTI3IDQ5Ljg4NTUgMjMuNzA0OUM0OS4wNjU2IDI0LjA1NyA0OC4xNjM3IDI0LjIzMyA0Ny4xNzk5IDI0LjIzM0M0NS42MjIxIDI0LjIzMyA0NC4zNDYxIDIzLjgwODQgNDMuMzUxOSAyMi45NTkyQzQyLjM2ODEgMjIuMTEgNDEuODc2MSAyMS4wMDcxIDQxLjg3NjEgMTkuNjUwNVpNNDYuMzAzNiAxOC42MjUyQzQ2LjMwMzYgMTkuMTQzIDQ2LjQ5ODMgMTkuNTYyNSA0Ni44ODc4IDE5Ljg4MzVDNDcuMjg3NSAyMC4xOTQyIDQ3LjgxMDIgMjAuMzQ5NSA0OC40NTU4IDIwLjM0OTVDNDkuMzM3MiAyMC4zNDk1IDUwLjA3NTEgMjAuMDgwMyA1MC42Njk2IDE5LjU0MTdDNTEuMjc0MiAxOS4wMDMyIDUxLjU3NjYgMTguMzQwNSA1MS41NzY2IDE3LjU1MzRWMTcuMjQyN0M1MS4xOTc0IDE3LjExODQgNTAuNzg3NCAxNy4wMjAxIDUwLjM0NjcgMTYuOTQ3NkM0OS45MTYzIDE2Ljg3NTEgNDkuNDkxIDE2LjgzODggNDkuMDcwOCAxNi44Mzg4QzQ4LjE5OTYgMTYuODM4OCA0Ny41MTgxIDE2Ljk5NDIgNDcuMDI2MSAxNy4zMDQ5QzQ2LjU0NDQgMTcuNjE1NSA0Ni4zMDM2IDE4LjA1NTcgNDYuMzAzNiAxOC42MjUyWicgZmlsbD0nd2hpdGUnLyUzZSUzY3BhdGggZD0nTTU3LjIyODcgMTYuMTU1M0M1Ny4yMjg3IDE0LjYwMTkgNTcuNTUxNSAxMy4yMTk0IDU4LjE5NzIgMTIuMDA3OEM1OC44NDI4IDEwLjc4NTggNTkuNzI5NCA5LjgyNzgzIDYwLjg1NjcgOS4xMzM5OEM2MS45OTQzIDguNDI5NzcgNjMuMjgwNiA4LjA3NzY3IDY0LjcxNTQgOC4wNzc2N0M2NS42Nzg4IDguMDc3NjcgNjYuNTc1NSA4LjI0MzM3IDY3LjQwNTcgOC41NzQ3NkM2OC4yMzU4IDguODk1NzkgNjguOTczOCA5LjM0NjI4IDY5LjYxOTQgOS45MjYyMVYwLjYyMTM1OUg3NC4wNDY5VjIzLjkyMjNINjkuODY1NEw2OS43NTc4IDIyLjI0NDdDNjkuMTEyMSAyMi44NzY0IDY4LjM1ODggMjMuMzY4MyA2Ny40OTc5IDIzLjcyMDRDNjYuNjQ3MyAyNC4wNjIxIDY1LjcxOTggMjQuMjMzIDY0LjcxNTQgMjQuMjMzQzYzLjI4MDYgMjQuMjMzIDYxLjk5NDMgMjMuODg2MSA2MC44NTY3IDIzLjE5MjJDNTkuNzI5NCAyMi40ODggNTguODQyOCAyMS41MzAxIDU4LjE5NzIgMjAuMzE4NEM1Ny41NTE1IDE5LjA5NjQgNTcuMjI4NyAxNy43MDg3IDU3LjIyODcgMTYuMTU1M1pNNjEuODA5OSAxNi4xNTUzQzYxLjgwOTkgMTcuMzU2NiA2Mi4xNzg4IDE4LjM1NiA2Mi45MTY3IDE5LjE1MzRDNjMuNjU0NiAxOS45NTA4IDY0LjU4NzMgMjAuMzQ5NSA2NS43MTQ2IDIwLjM0OTVDNjYuODQyIDIwLjM0OTUgNjcuNzc0NiAxOS45NTA4IDY4LjUxMjYgMTkuMTUzNEM2OS4yNTA1IDE4LjM1NiA2OS42MTk0IDE3LjM1NjYgNjkuNjE5NCAxNi4xNTUzQzY5LjYxOTQgMTQuOTU0IDY5LjI1MDUgMTMuOTU0NyA2OC41MTI2IDEzLjE1NzNDNjcuNzc0NiAxMi4zNTk5IDY2Ljg0MiAxMS45NjEyIDY1LjcxNDYgMTEuOTYxMkM2NC41ODczIDExLjk2MTIgNjMuNjU0NiAxMi4zNTk5IDYyLjkxNjcgMTMuMTU3M0M2Mi4xNzg4IDEzLjk1NDcgNjEuODA5OSAxNC45NTQgNjEuODA5OSAxNi4xNTUzWicgZmlsbD0nd2hpdGUnLyUzZSUzY3BhdGggZD0nTTc2LjYzOTcgMjMuOTIyM1Y4LjM4ODM1SDgwLjUxMzhMODAuNzI5IDEwLjYwOTdDODEuODQ2MSA4LjkyMTY4IDgzLjM4MzQgOC4wNzc2NyA4NS4zNDA5IDguMDc3NjdDODYuMDA3MSA4LjA3NzY3IDg2LjY5MzggOC4xODEyMyA4Ny40MDA5IDguMzg4MzVMODYuNzg2IDEyLjI1NjNDODYuMTkxNiAxMi4wNTk1IDg1LjYwNzQgMTEuOTYxMiA4NS4wMzM1IDExLjk2MTJDODMuODQ0NiAxMS45NjEyIDgyLjg4NjMgMTIuNDA2NSA4Mi4xNTg3IDEzLjI5NzFDODEuNDMxIDE0LjE3NzMgODEuMDY3MiAxNS40MzU2IDgxLjA2NzIgMTcuMDcxOFYyMy45MjIzSDc2LjYzOTdaJyBmaWxsPSd3aGl0ZScvJTNlJTNjcGF0aCBkPSdNODcuMTk1OCAzLjEwNjhDODcuMTk1OCAyLjM2MTE2IDg3LjQyMTMgMS43NjA1MiA4Ny44NzIzIDEuMzA0ODVDODguMzIzMiAwLjg0OTE5MSA4OC45MTc2IDAuNjIxMzU5IDg5LjY1NTUgMC42MjEzNTlDOTAuMzkzNSAwLjYyMTM1OSA5MC45ODc5IDAuODQ5MTkxIDkxLjQzODggMS4zMDQ4NUM5MS44ODk4IDEuNzYwNTIgOTIuMTE1MiAyLjM2MTE2IDkyLjExNTIgMy4xMDY4QzkyLjExNTIgMy44NTI0MyA5MS44ODk4IDQuNDUzMDcgOTEuNDM4OCA0LjkwODc0QzkwLjk4NzkgNS4zNjQ0IDkwLjM5MzUgNS41OTIyMyA4OS42NTU1IDUuNTkyMjNDODguOTE3NiA1LjU5MjIzIDg4LjMyMzIgNS4zNjQ0IDg3Ljg3MjMgNC45MDg3NEM4Ny40MjEzIDQuNDUzMDcgODcuMTk1OCAzLjg1MjQzIDg3LjE5NTggMy4xMDY4Wk04Ny40NDE4IDIzLjkyMjNWOC4zODgzNUg5MS44NjkzVjIzLjkyMjNIODcuNDQxOFonIGZpbGw9J3doaXRlJy8lM2UlM2NwYXRoIGQ9J005OC42NDM2IDIzLjkyMjNIOTQuMjE2MVY4LjM4ODM1SDk4LjM5NzZMOTguNTA1MiAxMC4wMzVDOTkuNTkxNiA4LjczMDEgMTAxLjA2MiA4LjA3NzY3IDEwMi45MTcgOC4wNzc2N0MxMDUuMjg1IDguMDc3NjcgMTA2Ljk2IDkuMDk3NzMgMTA3Ljk0NCAxMS4xMzc5QzEwOC40NTcgMTAuMTU0IDEwOS4xNDkgOS4zOTgwNiAxMTAuMDIgOC44Njk5QzExMC44OTEgOC4zNDE3NSAxMTEuOTE2IDguMDc3NjcgMTEzLjA5NCA4LjA3NzY3QzExNC45NiA4LjA3NzY3IDExNi40MSA4Ljc0MDQ1IDExNy40NDUgMTAuMDY2QzExOC40OCAxMS4zODEyIDExOC45OTggMTMuMjE0MiAxMTguOTk4IDE1LjU2NVYyMy45MjIzSDExNC41N1YxNS41NjVDMTE0LjU3IDE0LjM2MzggMTE0LjI4OCAxMy40NjI4IDExMy43MjUgMTIuODYyMUMxMTMuMTcxIDEyLjI2MTUgMTEyLjUgMTEuOTYxMiAxMTEuNzExIDExLjk2MTJDMTEwLjkxMSAxMS45NjEyIDExMC4yMyAxMi4yNzE4IDEwOS42NjYgMTIuODkzMkMxMDkuMTAyIDEzLjUxNDYgMTA4LjgyMSAxNC40NDE0IDEwOC44MjEgMTUuNjczOFYyMy45MjIzSDEwNC4zOTNWMTUuNTY1QzEwNC4zOTMgMTQuMzYzOCAxMDQuMTExIDEzLjQ2MjggMTAzLjU0OCAxMi44NjIxQzEwMi45OTQgMTIuMjYxNSAxMDIuMzIzIDExLjk2MTIgMTAxLjUzNCAxMS45NjEyQzEwMC43MzQgMTEuOTYxMiAxMDAuMDUzIDEyLjI3MTggOTkuNDg5MSAxMi44OTMyQzk4LjkyNTQgMTMuNTE0NiA5OC42NDM2IDE0LjQ0MTQgOTguNjQzNiAxNS42NzM4VjIzLjkyMjNaJyBmaWxsPSd3aGl0ZScvJTNlJTNjcGF0aCBkPSdNMTIxLjI4MyAyMS43NDc2QzEyMS4yODMgMjEuMDAxOSAxMjEuNTA4IDIwLjQwMTMgMTIxLjk1OSAxOS45NDU2QzEyMi40MSAxOS40OSAxMjMuMDA1IDE5LjI2MjEgMTIzLjc0MyAxOS4yNjIxQzEyNC40ODEgMTkuMjYyMSAxMjUuMDc1IDE5LjQ5IDEyNS41MjYgMTkuOTQ1NkMxMjUuOTc3IDIwLjQwMTMgMTI2LjIwMiAyMS4wMDE5IDEyNi4yMDIgMjEuNzQ3NkMxMjYuMjAyIDIyLjQ5MzIgMTI1Ljk3NyAyMy4wOTM5IDEyNS41MjYgMjMuNTQ5NUMxMjUuMDc1IDI0LjAwNTIgMTI0LjQ4MSAyNC4yMzMgMTIzLjc0MyAyNC4yMzNDMTIzLjAwNSAyNC4yMzMgMTIyLjQxIDI0LjAwNTIgMTIxLjk1OSAyMy41NDk1QzEyMS41MDggMjMuMDkzOSAxMjEuMjgzIDIyLjQ5MzIgMTIxLjI4MyAyMS43NDc2WicgZmlsbD0nd2hpdGUnLyUzZSUzY3BhdGggZD0nTTQ4LjgzNCA0MFYyOS43NDYxSDU1LjI0NjFWMzEuNTg1SDUwLjkzOTVWMzMuOTE2SDU0Ljk2NThWMzUuNzYxN0g1MC45Mzk1VjQwSDQ4LjgzNFpNNjMuMTQxNiAzOS4yMzQ0QzYyLjI5MzkgMzkuODM1OSA2MS4zNjY1IDQwLjEzNjcgNjAuMzU5NCA0MC4xMzY3QzU5LjYxMiA0MC4xMzY3IDU4LjkzOTggMzkuOTc3MiA1OC4zNDI4IDM5LjY1ODJDNTcuNzUwMyAzOS4zMzQ2IDU3LjI4MDkgMzguODk3MSA1Ni45MzQ2IDM4LjM0NTdDNTYuNTkyOCAzNy43OTQzIDU2LjQyMTkgMzcuMTcyMiA1Ni40MjE5IDM2LjQ3OTVDNTYuNDIxOSAzNS44MTg3IDU2LjU3NjggMzUuMjI4NSA1Ni44ODY3IDM0LjcwOUM1Ny4yMDEyIDM0LjE4OTUgNTcuNjI3MyAzMy43NzkzIDU4LjE2NSAzMy40Nzg1QzU4LjcwMjggMzMuMTc3NyA1OS4zMTM1IDMzLjAyNzMgNTkuOTk3MSAzMy4wMjczQzYwLjcwMzUgMzMuMDI3MyA2MS4zMjU1IDMzLjE5MzcgNjEuODYzMyAzMy41MjY0QzYyLjQwMSAzMy44NTQ1IDYyLjgyMDMgMzQuMzE0OCA2My4xMjExIDM0LjkwNzJDNjMuNDIxOSAzNS40OTUxIDYzLjU3MjMgMzYuMTc2NCA2My41NzIzIDM2Ljk1MTJWMzcuMTY5OUg1OC41MzQyQzU4LjYxNjIgMzcuNDM4OCA1OC43NDg0IDM3LjY3NTggNTguOTMwNyAzNy44ODA5QzU5LjExNzUgMzguMDgxNCA1OS4zNDk5IDM4LjI0MDkgNTkuNjI3OSAzOC4zNTk0QzU5LjkxMDUgMzguNDc3OSA2MC4yMzE4IDM4LjUzNzEgNjAuNTkxOCAzOC41MzcxQzYxLjI4OTEgMzguNTM3MSA2MS45Mzg1IDM4LjMxMTUgNjIuNTQgMzcuODYwNEw2My4xNDE2IDM5LjIzNDRaTTU4LjQ0NTMgMzYuMTcxOUg2MS43NjA3QzYxLjcyNDMgMzUuODc1NyA2MS42MzA5IDM1LjYxNTkgNjEuNDgwNSAzNS4zOTI2QzYxLjMzNDYgMzUuMTY0NyA2MS4xNDEgMzQuOTg3IDYwLjg5OTQgMzQuODU5NEM2MC42NjI0IDM0LjczMTggNjAuMzk1OCAzNC42NjggNjAuMDk5NiAzNC42NjhDNTkuNzk4OCAzNC42NjggNTkuNTI5OSAzNC43MzQgNTkuMjkzIDM0Ljg2NjJDNTkuMDYwNSAzNC45OTg0IDU4Ljg3MTQgMzUuMTc2MSA1OC43MjU2IDM1LjM5OTRDNTguNTc5OCAzNS42MjI3IDU4LjQ4NjMgMzUuODgwMiA1OC40NDUzIDM2LjE3MTlaTTcxLjExMjMgMzkuMjM0NEM3MC4yNjQ2IDM5LjgzNTkgNjkuMzM3MiA0MC4xMzY3IDY4LjMzMDEgNDAuMTM2N0M2Ny41ODI3IDQwLjEzNjcgNjYuOTEwNSAzOS45NzcyIDY2LjMxMzUgMzkuNjU4MkM2NS43MjEgMzkuMzM0NiA2NS4yNTE2IDM4Ljg5NzEgNjQuOTA1MyAzOC4zNDU3QzY0LjU2MzUgMzcuNzk0MyA2NC4zOTI2IDM3LjE3MjIgNjQuMzkyNiAzNi40Nzk1QzY0LjM5MjYgMzUuODE4NyA2NC41NDc1IDM1LjIyODUgNjQuODU3NCAzNC43MDlDNjUuMTcxOSAzNC4xODk1IDY1LjU5OCAzMy43NzkzIDY2LjEzNTcgMzMuNDc4NUM2Ni42NzM1IDMzLjE3NzcgNjcuMjg0MiAzMy4wMjczIDY3Ljk2NzggMzMuMDI3M0M2OC42NzQyIDMzLjAyNzMgNjkuMjk2MiAzMy4xOTM3IDY5LjgzNCAzMy41MjY0QzcwLjM3MTcgMzMuODU0NSA3MC43OTEgMzQuMzE0OCA3MS4wOTE4IDM0LjkwNzJDNzEuMzkyNiAzNS40OTUxIDcxLjU0MyAzNi4xNzY0IDcxLjU0MyAzNi45NTEyVjM3LjE2OTlINjYuNTA0OUM2Ni41ODY5IDM3LjQzODggNjYuNzE5MSAzNy42NzU4IDY2LjkwMTQgMzcuODgwOUM2Ny4wODgyIDM4LjA4MTQgNjcuMzIwNiAzOC4yNDA5IDY3LjU5ODYgMzguMzU5NEM2Ny44ODEyIDM4LjQ3NzkgNjguMjAyNSAzOC41MzcxIDY4LjU2MjUgMzguNTM3MUM2OS4yNTk4IDM4LjUzNzEgNjkuOTA5MiAzOC4zMTE1IDcwLjUxMDcgMzcuODYwNEw3MS4xMTIzIDM5LjIzNDRaTTY2LjQxNiAzNi4xNzE5SDY5LjczMTRDNjkuNjk1IDM1Ljg3NTcgNjkuNjAxNiAzNS42MTU5IDY5LjQ1MTIgMzUuMzkyNkM2OS4zMDUzIDM1LjE2NDcgNjkuMTExNyAzNC45ODcgNjguODcwMSAzNC44NTk0QzY4LjYzMzEgMzQuNzMxOCA2OC4zNjY1IDM0LjY2OCA2OC4wNzAzIDM0LjY2OEM2Ny43Njk1IDM0LjY2OCA2Ny41MDA3IDM0LjczNCA2Ny4yNjM3IDM0Ljg2NjJDNjcuMDMxMiAzNC45OTg0IDY2Ljg0MjEgMzUuMTc2MSA2Ni42OTYzIDM1LjM5OTRDNjYuNTUwNSAzNS42MjI3IDY2LjQ1NyAzNS44ODAyIDY2LjQxNiAzNi4xNzE5Wk03OS44MjgxIDQwSDc4LjEwNTVMNzguMDAyOSAzOS4wNzAzQzc3LjcxMTMgMzkuMzk4NCA3Ny4zNjA0IDM5LjY1ODIgNzYuOTUwMiAzOS44NDk2Qzc2LjU0NDYgNDAuMDQxIDc2LjEwMDMgNDAuMTM2NyA3NS42MTcyIDQwLjEzNjdDNzQuOTkyOCA0MC4xMzY3IDc0LjQzNDYgMzkuOTg0IDczLjk0MjQgMzkuNjc4N0M3My40NTQ4IDM5LjM2ODggNzMuMDY5NyAzOC45NDUgNzIuNzg3MSAzOC40MDcyQzcyLjUwNDYgMzcuODY5NSA3Mi4zNjMzIDM3LjI2MTEgNzIuMzYzMyAzNi41ODJDNzIuMzYzMyAzNS44OTg0IDcyLjUwNDYgMzUuMjkgNzIuNzg3MSAzNC43NTY4QzczLjA2OTcgMzQuMjE5MSA3My40NTQ4IDMzLjc5NzUgNzMuOTQyNCAzMy40OTIyQzc0LjQzNDYgMzMuMTgyMyA3NC45OTI4IDMzLjAyNzMgNzUuNjE3MiAzMy4wMjczQzc2LjA2MzggMzMuMDI3MyA3Ni40Nzg1IDMzLjEwOTQgNzYuODYxMyAzMy4yNzM0Qzc3LjI0ODcgMzMuNDMyOSA3Ny41ODM3IDMzLjY1NjIgNzcuODY2MiAzMy45NDM0VjI5Ljc0NjFINzkuODI4MVY0MFpNNzYuMTIzIDM4LjM3OTlDNzYuNDQ2NiAzOC4zNzk5IDc2LjczODMgMzguMzA3IDc2Ljk5OCAzOC4xNjExQzc3LjI2MjQgMzguMDE1MyA3Ny40NzIgMzcuODE3MSA3Ny42MjcgMzcuNTY2NEM3Ny43ODY1IDM3LjMxMTIgNzcuODY2MiAzNy4wMjE4IDc3Ljg2NjIgMzYuNjk4MlYzNi40NTIxQzc3Ljg2NjIgMzYuMTI4NiA3Ny43ODY1IDM1Ljg0MTUgNzcuNjI3IDM1LjU5MDhDNzcuNDcyIDM1LjM0MDIgNzcuMjYyNCAzNS4xNDQyIDc2Ljk5OCAzNS4wMDI5Qzc2LjczODMgMzQuODU3MSA3Ni40NDY2IDM0Ljc4NDIgNzYuMTIzIDM0Ljc4NDJDNzUuNzkwNCAzNC43ODQyIDc1LjQ5MTkgMzQuODYxNyA3NS4yMjc1IDM1LjAxNjZDNzQuOTYzMiAzNS4xNzE1IDc0Ljc1MzYgMzUuMzg1NyA3NC41OTg2IDM1LjY1OTJDNzQuNDQ4MiAzNS45MjgxIDc0LjM3MyAzNi4yMzU3IDc0LjM3MyAzNi41ODJDNzQuMzczIDM2LjkyMzggNzQuNDQ4MiAzNy4yMzE0IDc0LjU5ODYgMzcuNTA0OUM3NC43NTM2IDM3Ljc3MzggNzQuOTYzMiAzNy45ODggNzUuMjI3NSAzOC4xNDc1Qzc1LjQ5MTkgMzguMzAyNCA3NS43OTA0IDM4LjM3OTkgNzYuMTIzIDM4LjM3OTlaTTgzLjIxODggNDBIODEuNDk2MVYyOS43NDYxSDgzLjQ1OFYzMy45NDM0QzgzLjc0NTEgMzMuNjU2MiA4NC4wNzc4IDMzLjQzMjkgODQuNDU2MSAzMy4yNzM0Qzg0LjgzODkgMzMuMTA5NCA4NS4yNTM2IDMzLjAyNzMgODUuNzAwMiAzMy4wMjczQzg2LjMyOTEgMzMuMDI3MyA4Ni44ODc0IDMzLjE4MjMgODcuMzc1IDMzLjQ5MjJDODcuODYyNiAzMy43OTc1IDg4LjI0NzcgMzQuMjE5MSA4OC41MzAzIDM0Ljc1NjhDODguODEyOCAzNS4yOSA4OC45NTQxIDM1Ljg5ODQgODguOTU0MSAzNi41ODJDODguOTU0MSAzNy4yNjExIDg4LjgxMjggMzcuODY5NSA4OC41MzAzIDM4LjQwNzJDODguMjQ3NyAzOC45NDUgODcuODYyNiAzOS4zNjg4IDg3LjM3NSAzOS42Nzg3Qzg2Ljg4NzQgMzkuOTg0IDg2LjMyOTEgNDAuMTM2NyA4NS43MDAyIDQwLjEzNjdDODUuMjE3MSA0MC4xMzY3IDg0Ljc3MDUgNDAuMDQzMyA4NC4zNjA0IDM5Ljg1NjRDODMuOTU0OCAzOS42NjUgODMuNjA2MSAzOS40MDMgODMuMzE0NSAzOS4wNzAzTDgzLjIxODggNDBaTTg1LjIwMTIgMzguMzc5OUM4NS41MzM5IDM4LjM3OTkgODUuODMwMSAzOC4zMDI0IDg2LjA4OTggMzguMTQ3NUM4Ni4zNTQyIDM3Ljk5MjUgODYuNTYxNSAzNy43NzgzIDg2LjcxMTkgMzcuNTA0OUM4Ni44NjY5IDM3LjIzMTQgODYuOTQ0MyAzNi45MjE1IDg2Ljk0NDMgMzYuNTc1MkM4Ni45NDQzIDM2LjIzMzQgODYuODY2OSAzNS45MjgxIDg2LjcxMTkgMzUuNjU5MkM4Ni41NjE1IDM1LjM4NTcgODYuMzU0MiAzNS4xNzE1IDg2LjA4OTggMzUuMDE2NkM4NS44MzAxIDM0Ljg2MTcgODUuNTMzOSAzNC43ODQyIDg1LjIwMTIgMzQuNzg0MkM4NC44ODY3IDM0Ljc4NDIgODQuNTk5NiAzNC44NTQ4IDg0LjMzOTggMzQuOTk2MUM4NC4wODQ2IDM1LjEzNzQgODMuODc5NiAzNS4zMzExIDgzLjcyNDYgMzUuNTc3MUM4My41Njk3IDM1LjgyMzIgODMuNDgwOCAzNi4xMDU4IDgzLjQ1OCAzNi40MjQ4VjM2LjcyNTZDODMuNDgwOCAzNy4wNDQ2IDgzLjU2OTcgMzcuMzI5NCA4My43MjQ2IDM3LjU4MDFDODMuODc5NiAzNy44MjYyIDg0LjA4NDYgMzguMDIyMSA4NC4zMzk4IDM4LjE2OEM4NC41OTUxIDM4LjMwOTIgODQuODgyMiAzOC4zNzk5IDg1LjIwMTIgMzguMzc5OVpNOTYuMzAyNyA0MEg5NC41OTM4TDk0LjQ5MTIgMzkuMTg2NUM5NC4yNDA2IDM5LjQ4NzMgOTMuOTMwNyAzOS43MjIgOTMuNTYxNSAzOS44OTA2QzkzLjE5MjQgNDAuMDU0NyA5Mi43ODY4IDQwLjEzNjcgOTIuMzQ0NyA0MC4xMzY3QzkxLjg2NjIgNDAuMTM2NyA5MS40NDAxIDQwLjA0NTYgOTEuMDY2NCAzOS44NjMzQzkwLjY5MjcgMzkuNjc2NCA5MC4zOTg4IDM5LjQyMTIgOTAuMTg0NiAzOS4wOTc3Qzg5Ljk3MDQgMzguNzY5NSA4OS44NjMzIDM4LjM5ODEgODkuODYzMyAzNy45ODM0Qzg5Ljg2MzMgMzcuNTQ1OSA4OS45Nzk1IDM3LjE2MDggOTAuMjExOSAzNi44MjgxQzkwLjQ0NDMgMzYuNDk1NCA5MC43NjMzIDM2LjIzNTcgOTEuMTY4OSAzNi4wNDg4QzkxLjU3OTEgMzUuODU3NCA5Mi4wNDM5IDM1Ljc2MTcgOTIuNTYzNSAzNS43NjE3QzkyLjg2ODggMzUuNzYxNyA5My4xNzQyIDM1Ljc5NTkgOTMuNDc5NSAzNS44NjQzQzkzLjc4OTQgMzUuOTMyNiA5NC4wNzY1IDM2LjAyODMgOTQuMzQwOCAzNi4xNTE0VjM1Ljk3MzZDOTQuMzQwOCAzNS43MDAyIDk0LjI2MzMgMzUuNDY1NSA5NC4xMDg0IDM1LjI2OTVDOTMuOTU4IDM1LjA2OSA5My43NDg0IDM0LjkxNDEgOTMuNDc5NSAzNC44MDQ3QzkzLjIxNTIgMzQuNjk1MyA5Mi45MTg5IDM0LjY0MDYgOTIuNTkwOCAzNC42NDA2QzkyLjI3NjQgMzQuNjQwNiA5MS45NjQyIDM0LjY5MDggOTEuNjU0MyAzNC43OTFDOTEuMzQ5IDM0Ljg5MTMgOTEuMDY2NCAzNS4wNDE3IDkwLjgwNjYgMzUuMjQyMkw5MC4yNzM0IDMzLjc0NTFDOTAuNzMzNyAzMy41MDgxIDkxLjE5ODYgMzMuMzMwNCA5MS42NjggMzMuMjExOUM5Mi4xNDE5IDMzLjA4ODkgOTIuNTk5OSAzMy4wMjczIDkzLjA0MiAzMy4wMjczQzkzLjcwNzQgMzMuMDI3MyA5NC4yODM5IDMzLjE1OTUgOTQuNzcxNSAzMy40MjM4Qzk1LjI1OTEgMzMuNjgzNiA5NS42MzUxIDM0LjA1MjcgOTUuODk5NCAzNC41MzEyQzk2LjE2ODMgMzUuMDA1MiA5Ni4zMDI3IDM1LjU2OCA5Ni4zMDI3IDM2LjIxOTdWNDBaTTkyLjc3NTQgMzguNjI2QzkzLjAzNTIgMzguNjI2IDkzLjI4MzUgMzguNTY5IDkzLjUyMDUgMzguNDU1MUM5My43NTc1IDM4LjM0MTEgOTMuOTQ4OSAzOC4xODYyIDk0LjA5NDcgMzcuOTkwMkM5NC4yNDUxIDM3Ljc5NDMgOTQuMzI0OSAzNy41Nzc4IDk0LjMzNCAzNy4zNDA4VjM3LjI5M0M5NC4xMzM1IDM3LjE1NjIgOTMuOTEwMiAzNy4wNTE0IDkzLjY2NDEgMzYuOTc4NUM5My40MjI1IDM2LjkwMSA5My4xNzY0IDM2Ljg2MjMgOTIuOTI1OCAzNi44NjIzQzkyLjU1MjEgMzYuODYyMyA5Mi4yNDY3IDM2Ljk0NDMgOTIuMDA5OCAzNy4xMDg0QzkxLjc3MjggMzcuMjcyNSA5MS42NTQzIDM3LjQ4NDQgOTEuNjU0MyAzNy43NDQxQzkxLjY1NDMgMzcuOTEyOCA5MS43MDIxIDM4LjA2NTQgOTEuNzk3OSAzOC4yMDIxQzkxLjg5ODEgMzguMzM0MyA5Mi4wMzI2IDM4LjQzOTEgOTIuMjAxMiAzOC41MTY2QzkyLjM2OTggMzguNTg5NSA5Mi41NjEyIDM4LjYyNiA5Mi43NzU0IDM4LjYyNlpNMTAzLjg5MSAzOC45MTMxQzEwMy41NTggMzkuMjk1OSAxMDMuMTUgMzkuNTk2NyAxMDIuNjY3IDM5LjgxNTRDMTAyLjE4NCA0MC4wMjk2IDEwMS42NTMgNDAuMTM2NyAxMDEuMDc0IDQwLjEzNjdDMTAwLjM3MiA0MC4xMzY3IDk5Ljc0MzUgMzkuOTg0IDk5LjE4NzUgMzkuNjc4N0M5OC42MzYxIDM5LjM2ODggOTguMjAwOCAzOC45NDUgOTcuODgxOCAzOC40MDcyQzk3LjU2NzQgMzcuODY5NSA5Ny40MTAyIDM3LjI2MTEgOTcuNDEwMiAzNi41ODJDOTcuNDEwMiAzNS44OTg0IDk3LjU2NzQgMzUuMjkgOTcuODgxOCAzNC43NTY4Qzk4LjIwMDggMzQuMjE5MSA5OC42MzYxIDMzLjc5NzUgOTkuMTg3NSAzMy40OTIyQzk5Ljc0MzUgMzMuMTgyMyAxMDAuMzcyIDMzLjAyNzMgMTAxLjA3NCAzMy4wMjczQzEwMS42NDggMzMuMDI3MyAxMDIuMTc3IDMzLjEzNDQgMTAyLjY2IDMzLjM0ODZDMTAzLjE0MyAzMy41NjI4IDEwMy41NTEgMzMuODU5IDEwMy44ODQgMzQuMjM3M0wxMDIuNzI5IDM1LjQ0NzNDMTAyLjU1MSAzNS4yNDIyIDEwMi4zMjUgMzUuMDgyNyAxMDIuMDUyIDM0Ljk2ODhDMTAxLjc4MyAzNC44NTAzIDEwMS41IDM0Ljc5MSAxMDEuMjA0IDM0Ljc5MUMxMDAuODYyIDM0Ljc5MSAxMDAuNTU3IDM0Ljg2ODUgMTAwLjI4OCAzNS4wMjM0QzEwMC4wMTkgMzUuMTczOCA5OS44MDczIDM1LjM4MzUgOTkuNjUyMyAzNS42NTIzQzk5LjQ5NzQgMzUuOTE2NyA5OS40MTk5IDM2LjIyMiA5OS40MTk5IDM2LjU2ODRDOTkuNDE5OSAzNi45MTkzIDk5LjQ5NzQgMzcuMjMxNCA5OS42NTIzIDM3LjUwNDlDOTkuODA3MyAzNy43NzgzIDEwMC4wMTkgMzcuOTkyNSAxMDAuMjg4IDM4LjE0NzVDMTAwLjU1NyAzOC4yOTc5IDEwMC44NjIgMzguMzczIDEwMS4yMDQgMzguMzczQzEwMS41IDM4LjM3MyAxMDEuNzg1IDM4LjMxNjEgMTAyLjA1OSAzOC4yMDIxQzEwMi4zMzIgMzguMDgzNyAxMDIuNTU1IDM3LjkyMTkgMTAyLjcyOSAzNy43MTY4TDEwMy44OTEgMzguOTEzMVpNMTA3LjA1NiA0MEgxMDUuMDk0VjI5Ljc0NjFIMTA3LjA1NlYzNi4wNDg4TDEwNy43MjYgMzUuMjQyMkwxMDkuNjk0IDMzLjE2NDFIMTEyLjE0OEwxMDkuMjU3IDM2LjIwNjFMMTEyLjQ5IDQwSDEwOS45NTRMMTA3LjkxIDM3LjQzNjVMMTA3LjA1NiAzOC4yMTU4VjQwWicgZmlsbD0nJTIzMDA4NUZGJy8lM2UlM2Mvc3ZnJTNlXCI7XG4gIGV4cG9ydCBkZWZhdWx0IGltZzsiLCJpbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHsgdXNlRmVlZGJhY2tDb250ZXh0IH0gZnJvbSBcIi4uLy4uL2NvbnRleHRzL0ZlZWRiYWNrQ29udGV4dFwiO1xuaW1wb3J0IHsgdXNlTWUgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvdXNlclwiO1xuaW1wb3J0IHsgQ2xvc2VCdXR0b24gfSBmcm9tIFwiLi4vYXRvbXMvYnV0dG9ucy9DbG9zZUJ1dHRvblwiO1xuaW1wb3J0IHsgQ29sbGFwc2VCdXR0b24gfSBmcm9tIFwiLi4vYXRvbXMvYnV0dG9ucy9Db2xsYXBzZUJ1dHRvblwiO1xuaW1wb3J0IHsgQ29ubmVjdGVkUGFuZWwgfSBmcm9tIFwiLi9Db25uZWN0ZWRQYW5lbFwiO1xuaW1wb3J0IHsgQ29ubmVjdGlvblBhbmVsIH0gZnJvbSBcIi4vQ29ubmVjdGlvblBhbmVsXCI7XG5pbXBvcnQgTG9nb0ZlZWRiYWNrTGlnaHQgZnJvbSBcIi4uLy4uL2Fzc2V0cy9pY29ucy9sb2dvLWZlZWRiYWNrLWxpZ2h0LnN2Z1wiO1xuXG5leHBvcnQgY29uc3QgU2lkZUJhciA9ICgpID0+IHtcbiAgY29uc3QgW2lzQ29sbGFwc2VkLCBzZXRJc0NvbGxhcHNlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHsgZGF0YTogbWUgfSA9IHVzZU1lKCk7XG5cbiAgY29uc3QgeyBpc09wZW4sIGNsb3NlRmVlZGJhY2tPdmVybGF5IH0gPSB1c2VGZWVkYmFja0NvbnRleHQoKTtcblxuICBjb25zdCBpc0Nvbm5lY3RlZCA9ICEhbWU7XG5cbiAgaWYgKCFpc09wZW4pIHJldHVybiBudWxsO1xuXG4gIHJldHVybiBjcmVhdGVQb3J0YWwoXG4gICAgPGRpdlxuICAgICAgaWQ9XCJmZWVkYmFjay1zaWRlYmFyXCJcbiAgICAgIGNsYXNzTmFtZT17YGZpeGVkIHRvcC0wIHRyYW5zaXRpb24tYWxsIHctWzMyMHB4XSBoLXNjcmVlbiB6LVsxMDAwMDAwMF0gYmctZ3JheS1mZWVkYmFjay04MDAgdGV4dC13aGl0ZSBweC0zIHB5LTQgJHtcbiAgICAgICAgaXNDb2xsYXBzZWQgPyBcInJpZ2h0LVstMzIwcHhdXCIgOiBcInJpZ2h0LTBcIlxuICAgICAgfWB9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtZnVsbCB3LWZ1bGwgIGl0ZW1zLWNlbnRlciBmbGV4LWNvbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBmbGV4IGZsZXgtcm93IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8aW1nIHNyYz17TG9nb0ZlZWRiYWNrTGlnaHR9IGNsYXNzTmFtZT1cInotMTBcIiAvPlxuICAgICAgICAgIDxDbG9zZUJ1dHRvbiBvbkNsaWNrPXtjbG9zZUZlZWRiYWNrT3ZlcmxheX0gc2l6ZT1cImxhcmdlXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtpc0Nvbm5lY3RlZCA/IDxDb25uZWN0ZWRQYW5lbCAvPiA6IDxDb25uZWN0aW9uUGFuZWwgLz59XG4gICAgICAgIDxDb2xsYXBzZUJ1dHRvblxuICAgICAgICAgIGlzQ29sbGFwc2VkPXtpc0NvbGxhcHNlZH1cbiAgICAgICAgICBzZXRJc0NvbGxhcHNlZD17c2V0SXNDb2xsYXBzZWR9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4sXG4gICAgZG9jdW1lbnQuYm9keVxuICApO1xufTtcbiIsImltcG9ydCB7IFF1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyIH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHsgT3BlbkZlZWRiYWNrQnV0dG9uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hdG9tcy9idXR0b25zL09wZW5GZWVkYmFja0J1dHRvblwiO1xuaW1wb3J0IHsgRmVlZGJhY2tQaW5zIH0gZnJvbSBcIi4vY29tcG9uZW50cy9tb2xlY3VsZXMvZmVlZGJhY2tzL2dyb3VwL0ZlZWRiYWNrUGluc1wiO1xuaW1wb3J0IHsgRmVlZGJhY2tJbnB1dCB9IGZyb20gXCIuL2NvbXBvbmVudHMvbW9sZWN1bGVzL2ZlZWRiYWNrcy9pdGVtL0ZlZWRiYWNrSW5wdXRcIjtcbmltcG9ydCB7IFNpZGVCYXIgfSBmcm9tIFwiLi9jb21wb25lbnRzL29yZ2FuaXNtcy9TaWRlQmFyXCI7XG5pbXBvcnQgeyBGZWVkYmFja1Byb3ZpZGVyIH0gZnJvbSBcIi4vY29udGV4dHMvRmVlZGJhY2tDb250ZXh0XCI7XG5pbXBvcnQgXCIuL2luZGV4LmNzc1wiO1xuaW1wb3J0IHR5cGUgeyBGZWVkYmFja1Jvb3RQcm9wcyB9IGZyb20gXCIuLi9pbmRleC5kLnRzXCI7XG5cbmNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG5cbmZ1bmN0aW9uIEZlZWRiYWNrUm9vdChwcm9wczogRmVlZGJhY2tSb290UHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxGZWVkYmFja1Byb3ZpZGVyIHsuLi5wcm9wc30+XG4gICAgICAgICAgPEZlZWRiYWNrSW5wdXQgLz5cbiAgICAgICAgICA8U2lkZUJhciAvPlxuICAgICAgICAgIDxPcGVuRmVlZGJhY2tCdXR0b24gLz5cbiAgICAgICAgICA8RmVlZGJhY2tQaW5zIC8+XG4gICAgICAgIDwvRmVlZGJhY2tQcm92aWRlcj5cbiAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRmVlZGJhY2tSb290O1xuIl0sIm5hbWVzIjpbIlN1YnNjcmliYWJsZSIsImNvbnN0cnVjdG9yIiwibGlzdGVuZXJzIiwiU2V0Iiwic3Vic2NyaWJlIiwiYmluZCIsImxpc3RlbmVyIiwiYWRkIiwib25TdWJzY3JpYmUiLCJkZWxldGUiLCJvblVuc3Vic2NyaWJlIiwiaGFzTGlzdGVuZXJzIiwic2l6ZSIsImdsb2JhbCIsInNlbGYiLCJ3aW5kb3ciLCJJdGVtIiwiZnVuIiwiYXJyYXkiLCJfYyIsInByb3RvdHlwZSIsInJ1biIsImFwcGx5IiwiZW52IiwicGVyZm9ybWFuY2UiLCJub3ciLCJtb3pOb3ciLCJtc05vdyIsIm9Ob3ciLCJ3ZWJraXROb3ciLCJEYXRlIiwiZ2V0VGltZSIsImJyb3dzZXIkMSIsIm5leHRUaWNrIiwiJFJlZnJlc2hSZWckIiwiaXNTZXJ2ZXIiLCJnbG9iYWxUaGlzIiwibm9vcCIsImZ1bmN0aW9uYWxVcGRhdGUiLCJ1cGRhdGVyIiwiaW5wdXQiLCJpc1ZhbGlkVGltZW91dCIsInZhbHVlIiwiSW5maW5pdHkiLCJ0aW1lVW50aWxTdGFsZSIsInVwZGF0ZWRBdCIsInN0YWxlVGltZSIsIk1hdGgiLCJtYXgiLCJyZXNvbHZlU3RhbGVUaW1lIiwicXVlcnkiLCJyZXNvbHZlRW5hYmxlZCIsImVuYWJsZWQiLCJtYXRjaFF1ZXJ5IiwiZmlsdGVycyIsInR5cGUiLCJleGFjdCIsImZldGNoU3RhdHVzIiwicHJlZGljYXRlIiwicXVlcnlLZXkiLCJzdGFsZSIsInF1ZXJ5SGFzaCIsImhhc2hRdWVyeUtleUJ5T3B0aW9ucyIsIm9wdGlvbnMiLCJwYXJ0aWFsTWF0Y2hLZXkiLCJpc0FjdGl2ZSIsImlzU3RhbGUiLCJzdGF0ZSIsIm1hdGNoTXV0YXRpb24iLCJtdXRhdGlvbiIsInN0YXR1cyIsIm11dGF0aW9uS2V5IiwiaGFzaEtleSIsImhhc2hGbiIsInF1ZXJ5S2V5SGFzaEZuIiwiSlNPTiIsInN0cmluZ2lmeSIsIl8iLCJ2YWwiLCJpc1BsYWluT2JqZWN0IiwiT2JqZWN0Iiwia2V5cyIsInNvcnQiLCJyZWR1Y2UiLCJyZXN1bHQiLCJrZXkiLCJhIiwiYiIsInNvbWUiLCJyZXBsYWNlRXF1YWxEZWVwIiwiaXNQbGFpbkFycmF5IiwiYUl0ZW1zIiwiYVNpemUiLCJsZW5ndGgiLCJiSXRlbXMiLCJiU2l6ZSIsImNvcHkiLCJlcXVhbEl0ZW1zIiwiaSIsImluY2x1ZGVzIiwic2hhbGxvd0VxdWFsT2JqZWN0cyIsIkFycmF5IiwiaXNBcnJheSIsIm8iLCJoYXNPYmplY3RQcm90b3R5cGUiLCJjdG9yIiwicHJvdCIsImhhc093blByb3BlcnR5IiwiZ2V0UHJvdG90eXBlT2YiLCJ0b1N0cmluZyIsImNhbGwiLCJzbGVlcCIsInRpbWVvdXQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInNldFRpbWVvdXQiLCJyZXBsYWNlRGF0YSIsInByZXZEYXRhIiwiZGF0YSIsInN0cnVjdHVyYWxTaGFyaW5nIiwicHJvY2VzcyIsIk5PREVfRU5WIiwiZXJyb3IiLCJjb25zb2xlIiwiYWRkVG9FbmQiLCJpdGVtcyIsIml0ZW0iLCJuZXdJdGVtcyIsInNsaWNlIiwiYWRkVG9TdGFydCIsInNraXBUb2tlbiIsIlN5bWJvbCIsImVuc3VyZVF1ZXJ5Rm4iLCJmZXRjaE9wdGlvbnMiLCJxdWVyeUZuIiwiaW5pdGlhbFByb21pc2UiLCJyZWplY3QiLCJFcnJvciIsIkZvY3VzTWFuYWdlciIsIm9uRm9jdXMiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInNldEV2ZW50TGlzdGVuZXIiLCJzZXR1cCIsImZvY3VzZWQiLCJzZXRGb2N1c2VkIiwiY2hhbmdlZCIsImlzRm9jdXNlZCIsImZvckVhY2giLCJkb2N1bWVudCIsInZpc2liaWxpdHlTdGF0ZSIsImZvY3VzTWFuYWdlciIsIk9ubGluZU1hbmFnZXIiLCJvbk9ubGluZSIsIm9ubGluZUxpc3RlbmVyIiwib2ZmbGluZUxpc3RlbmVyIiwic2V0T25saW5lIiwib25saW5lIiwiaXNPbmxpbmUiLCJvbmxpbmVNYW5hZ2VyIiwicGVuZGluZ1RoZW5hYmxlIiwidGhlbmFibGUiLCJfcmVzb2x2ZSIsIl9yZWplY3QiLCJjYXRjaCIsImZpbmFsaXplIiwiYXNzaWduIiwicmVhc29uIiwiZGVmYXVsdFJldHJ5RGVsYXkiLCJmYWlsdXJlQ291bnQiLCJtaW4iLCJjYW5GZXRjaCIsIm5ldHdvcmtNb2RlIiwiQ2FuY2VsbGVkRXJyb3IiLCJyZXZlcnQiLCJzaWxlbnQiLCJpc0NhbmNlbGxlZEVycm9yIiwiY3JlYXRlUmV0cnllciIsImNvbmZpZyIsImlzUmV0cnlDYW5jZWxsZWQiLCJpc1Jlc29sdmVkIiwiY29udGludWVGbiIsImNhbmNlbCIsImNhbmNlbE9wdGlvbnMiLCJhYm9ydCIsImNhbmNlbFJldHJ5IiwiY29udGludWVSZXRyeSIsImNhbkNvbnRpbnVlIiwiY2FuUnVuIiwiY2FuU3RhcnQiLCJvblN1Y2Nlc3MiLCJvbkVycm9yIiwicGF1c2UiLCJjb250aW51ZVJlc29sdmUiLCJvblBhdXNlIiwidGhlbiIsIm9uQ29udGludWUiLCJwcm9taXNlT3JWYWx1ZSIsImZuIiwicmV0cnkiLCJyZXRyeURlbGF5IiwiZGVsYXkiLCJzaG91bGRSZXRyeSIsIm9uRmFpbCIsInByb21pc2UiLCJjb250aW51ZSIsInN0YXJ0IiwiY3JlYXRlTm90aWZ5TWFuYWdlciIsInF1ZXVlIiwidHJhbnNhY3Rpb25zIiwibm90aWZ5Rm4iLCJjYWxsYmFjayIsImJhdGNoTm90aWZ5Rm4iLCJzY2hlZHVsZUZuIiwiY2IiLCJzY2hlZHVsZSIsInB1c2giLCJmbHVzaCIsIm9yaWdpbmFsUXVldWUiLCJiYXRjaCIsImJhdGNoQ2FsbHMiLCJhcmdzIiwic2V0Tm90aWZ5RnVuY3Rpb24iLCJzZXRCYXRjaE5vdGlmeUZ1bmN0aW9uIiwic2V0U2NoZWR1bGVyIiwibm90aWZ5TWFuYWdlciIsIlJlbW92YWJsZSIsImRlc3Ryb3kiLCJjbGVhckdjVGltZW91dCIsInNjaGVkdWxlR2MiLCJnY1RpbWUiLCJvcHRpb25hbFJlbW92ZSIsInVwZGF0ZUdjVGltZSIsIm5ld0djVGltZSIsImNsZWFyVGltZW91dCIsIlF1ZXJ5IiwiZGVmYXVsdE9wdGlvbnMiLCJzZXRPcHRpb25zIiwib2JzZXJ2ZXJzIiwiY2FjaGUiLCJnZXREZWZhdWx0U3RhdGUiLCJtZXRhIiwicmVtb3ZlIiwic2V0RGF0YSIsIm5ld0RhdGEiLCJkYXRhVXBkYXRlZEF0IiwibWFudWFsIiwic2V0U3RhdGUiLCJzZXRTdGF0ZU9wdGlvbnMiLCJyZXNldCIsIm9ic2VydmVyIiwiaXNEaXNhYmxlZCIsImdldE9ic2VydmVyc0NvdW50IiwiZGF0YVVwZGF0ZUNvdW50IiwiZXJyb3JVcGRhdGVDb3VudCIsImlzSW52YWxpZGF0ZWQiLCJnZXRDdXJyZW50UmVzdWx0IiwiaXNTdGFsZUJ5VGltZSIsImZpbmQiLCJ4Iiwic2hvdWxkRmV0Y2hPbldpbmRvd0ZvY3VzIiwicmVmZXRjaCIsImNhbmNlbFJlZmV0Y2giLCJzaG91bGRGZXRjaE9uUmVjb25uZWN0IiwiYWRkT2JzZXJ2ZXIiLCJub3RpZnkiLCJyZW1vdmVPYnNlcnZlciIsImZpbHRlciIsImludmFsaWRhdGUiLCJmZXRjaCIsImFib3J0Q29udHJvbGxlciIsIkFib3J0Q29udHJvbGxlciIsImFkZFNpZ25hbFByb3BlcnR5Iiwib2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0Iiwic2lnbmFsIiwiZmV0Y2hGbiIsInF1ZXJ5Rm5Db250ZXh0IiwicGVyc2lzdGVyIiwiY29udGV4dCIsImJlaGF2aW9yIiwib25GZXRjaCIsImZldGNoTWV0YSIsIm9uU2V0dGxlZCIsIiNkaXNwYXRjaCIsImFjdGlvbiIsInJlZHVjZXIiLCJmZXRjaEZhaWx1cmVDb3VudCIsImZldGNoRmFpbHVyZVJlYXNvbiIsImZldGNoU3RhdGUiLCJlcnJvclVwZGF0ZWRBdCIsIm9uUXVlcnlVcGRhdGUiLCJpbml0aWFsRGF0YSIsImhhc0RhdGEiLCJpbml0aWFsRGF0YVVwZGF0ZWRBdCIsIlF1ZXJ5Q2FjaGUiLCJNYXAiLCJidWlsZCIsImNsaWVudCIsImRlZmF1bHRRdWVyeU9wdGlvbnMiLCJnZXRRdWVyeURlZmF1bHRzIiwiaGFzIiwic2V0IiwicXVlcnlJbk1hcCIsImNsZWFyIiwiZ2V0QWxsIiwidmFsdWVzIiwiZGVmYXVsdGVkRmlsdGVycyIsImZpbmRBbGwiLCJxdWVyaWVzIiwiZXZlbnQiLCJNdXRhdGlvbiIsIm11dGF0aW9uSWQiLCJtdXRhdGlvbkNhY2hlIiwiZXhlY3V0ZSIsInZhcmlhYmxlcyIsIm11dGF0aW9uRm4iLCJyZXN0b3JlZCIsImlzUGF1c2VkIiwib25NdXRhdGUiLCJydW5OZXh0IiwiZmFpbHVyZVJlYXNvbiIsInN1Ym1pdHRlZEF0Iiwib25NdXRhdGlvblVwZGF0ZSIsIk11dGF0aW9uQ2FjaGUiLCJkZWZhdWx0TXV0YXRpb25PcHRpb25zIiwic2NvcGUiLCJzY29wZUZvciIsInNjb3BlZE11dGF0aW9ucyIsImluZGV4IiwiaW5kZXhPZiIsInNwbGljZSIsIm11dGF0aW9uc1dpdGhTYW1lU2NvcGUiLCJmaXJzdFBlbmRpbmdNdXRhdGlvbiIsIm0iLCJmb3VuZE11dGF0aW9uIiwiZnJvbSIsInJlc3VtZVBhdXNlZE11dGF0aW9ucyIsInBhdXNlZE11dGF0aW9ucyIsImFsbCIsIm1hcCIsImlkIiwiaW5maW5pdGVRdWVyeUJlaGF2aW9yIiwicGFnZXMiLCJkaXJlY3Rpb24iLCJmZXRjaE1vcmUiLCJvbGRQYWdlcyIsIm9sZFBhZ2VQYXJhbXMiLCJwYWdlUGFyYW1zIiwiY3VycmVudFBhZ2UiLCJjYW5jZWxsZWQiLCJhYm9ydGVkIiwiZmV0Y2hQYWdlIiwicGFyYW0iLCJwcmV2aW91cyIsInBhZ2VQYXJhbSIsInBhZ2UiLCJtYXhQYWdlcyIsImFkZFRvIiwicGFnZVBhcmFtRm4iLCJnZXRQcmV2aW91c1BhZ2VQYXJhbSIsImdldE5leHRQYWdlUGFyYW0iLCJvbGREYXRhIiwicmVtYWluaW5nUGFnZXMiLCJpbml0aWFsUGFnZVBhcmFtIiwibGFzdEluZGV4IiwiUXVlcnlDbGllbnQiLCJxdWVyeUNhY2hlIiwibW91bnQiLCJ1bm1vdW50IiwiaXNGZXRjaGluZyIsImlzTXV0YXRpbmciLCJnZXRRdWVyeURhdGEiLCJlbnN1cmVRdWVyeURhdGEiLCJkZWZhdWx0ZWRPcHRpb25zIiwiY2FjaGVkRGF0YSIsImZldGNoUXVlcnkiLCJyZXZhbGlkYXRlSWZTdGFsZSIsInByZWZldGNoUXVlcnkiLCJnZXRRdWVyaWVzRGF0YSIsInNldFF1ZXJ5RGF0YSIsInNldFF1ZXJpZXNEYXRhIiwiZ2V0UXVlcnlTdGF0ZSIsInJlbW92ZVF1ZXJpZXMiLCJyZXNldFF1ZXJpZXMiLCJyZWZldGNoRmlsdGVycyIsInJlZmV0Y2hRdWVyaWVzIiwiY2FuY2VsUXVlcmllcyIsImRlZmF1bHRlZENhbmNlbE9wdGlvbnMiLCJwcm9taXNlcyIsImludmFsaWRhdGVRdWVyaWVzIiwicmVmZXRjaFR5cGUiLCJ0aHJvd09uRXJyb3IiLCJmZXRjaEluZmluaXRlUXVlcnkiLCJwcmVmZXRjaEluZmluaXRlUXVlcnkiLCJlbnN1cmVJbmZpbml0ZVF1ZXJ5RGF0YSIsImdldFF1ZXJ5Q2FjaGUiLCJnZXRNdXRhdGlvbkNhY2hlIiwiZ2V0RGVmYXVsdE9wdGlvbnMiLCJzZXREZWZhdWx0T3B0aW9ucyIsInNldFF1ZXJ5RGVmYXVsdHMiLCJkZWZhdWx0cyIsInF1ZXJ5RGVmYXVsdCIsInNldE11dGF0aW9uRGVmYXVsdHMiLCJnZXRNdXRhdGlvbkRlZmF1bHRzIiwiX2RlZmF1bHRlZCIsInJlZmV0Y2hPblJlY29ubmVjdCIsInN1c3BlbnNlIiwibXV0YXRpb25zIiwiUXVlcnlPYnNlcnZlciIsImV4cGVyaW1lbnRhbF9wcmVmZXRjaEluUmVuZGVyIiwiYmluZE1ldGhvZHMiLCJzaG91bGRGZXRjaE9uTW91bnQiLCJ1cGRhdGVSZXN1bHQiLCJzaG91bGRGZXRjaE9uIiwicmVmZXRjaE9uV2luZG93Rm9jdXMiLCJub3RpZnlPcHRpb25zIiwicHJldk9wdGlvbnMiLCJwcmV2UXVlcnkiLCJtb3VudGVkIiwic2hvdWxkRmV0Y2hPcHRpb25hbGx5IiwibmV4dFJlZmV0Y2hJbnRlcnZhbCIsImdldE9wdGltaXN0aWNSZXN1bHQiLCJjcmVhdGVSZXN1bHQiLCJzaG91bGRBc3NpZ25PYnNlcnZlckN1cnJlbnRQcm9wZXJ0aWVzIiwidHJhY2tSZXN1bHQiLCJvblByb3BUcmFja2VkIiwidHJhY2tlZFJlc3VsdCIsImNvbmZpZ3VyYWJsZSIsInRyYWNrUHJvcCIsImdldEN1cnJlbnRRdWVyeSIsImZldGNoT3B0aW1pc3RpYyIsIiNleGVjdXRlRmV0Y2giLCIjdXBkYXRlU3RhbGVUaW1lb3V0IiwidGltZSIsIiNjb21wdXRlUmVmZXRjaEludGVydmFsIiwicmVmZXRjaEludGVydmFsIiwiI3VwZGF0ZVJlZmV0Y2hJbnRlcnZhbCIsIm5leHRJbnRlcnZhbCIsInNldEludGVydmFsIiwicmVmZXRjaEludGVydmFsSW5CYWNrZ3JvdW5kIiwiI3VwZGF0ZVRpbWVycyIsIiNjbGVhclN0YWxlVGltZW91dCIsIiNjbGVhclJlZmV0Y2hJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJwcmV2UmVzdWx0IiwicHJldlJlc3VsdFN0YXRlIiwicHJldlJlc3VsdE9wdGlvbnMiLCJxdWVyeUNoYW5nZSIsInF1ZXJ5SW5pdGlhbFN0YXRlIiwibmV3U3RhdGUiLCJpc1BsYWNlaG9sZGVyRGF0YSIsIl9vcHRpbWlzdGljUmVzdWx0cyIsImZldGNoT25Nb3VudCIsImZldGNoT3B0aW9uYWxseSIsInNlbGVjdCIsInNlbGVjdEVycm9yIiwicGxhY2Vob2xkZXJEYXRhIiwiaXNQZW5kaW5nIiwiaXNFcnJvciIsImlzTG9hZGluZyIsImlzU3VjY2VzcyIsImlzSW5pdGlhbExvYWRpbmciLCJpc0ZldGNoZWQiLCJpc0ZldGNoZWRBZnRlck1vdW50IiwiaXNSZWZldGNoaW5nIiwiaXNMb2FkaW5nRXJyb3IiLCJpc1JlZmV0Y2hFcnJvciIsIm5leHRSZXN1bHQiLCJmaW5hbGl6ZVRoZW5hYmxlSWZQb3NzaWJsZSIsInJlY3JlYXRlVGhlbmFibGUiLCJwZW5kaW5nIiwicHJldlRoZW5hYmxlIiwiZGVmYXVsdE5vdGlmeU9wdGlvbnMiLCJzaG91bGROb3RpZnlMaXN0ZW5lcnMiLCJub3RpZnlPbkNoYW5nZVByb3BzIiwibm90aWZ5T25DaGFuZ2VQcm9wc1ZhbHVlIiwiaW5jbHVkZWRQcm9wcyIsInR5cGVkS2V5IiwiI3VwZGF0ZVF1ZXJ5IiwiI25vdGlmeSIsInNob3VsZExvYWRPbk1vdW50IiwicmV0cnlPbk1vdW50IiwicmVmZXRjaE9uTW91bnQiLCJmaWVsZCIsIm9wdGltaXN0aWNSZXN1bHQiLCJNdXRhdGlvbk9ic2VydmVyIiwibXV0YXRlIiwiI3VwZGF0ZVJlc3VsdCIsImlzSWRsZSIsIlF1ZXJ5Q2xpZW50Q29udGV4dCIsIlJlYWN0IiwiY3JlYXRlQ29udGV4dCIsInVzZVF1ZXJ5Q2xpZW50IiwicXVlcnlDbGllbnQiLCJfcyIsInVzZUNvbnRleHQiLCJRdWVyeUNsaWVudFByb3ZpZGVyIiwiY2hpbGRyZW4iLCJfczIiLCJ1c2VFZmZlY3QiLCJqc3giLCJQcm92aWRlciIsIklzUmVzdG9yaW5nQ29udGV4dCIsInVzZUlzUmVzdG9yaW5nIiwiY3JlYXRlVmFsdWUiLCJpc1Jlc2V0IiwiY2xlYXJSZXNldCIsIlF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5Q29udGV4dCIsInVzZVF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5IiwiUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkiLCJ1c2VTdGF0ZSIsInNob3VsZFRocm93RXJyb3IiLCJ0aHJvd0Vycm9yIiwicGFyYW1zIiwiZW5zdXJlUHJldmVudEVycm9yQm91bmRhcnlSZXRyeSIsImVycm9yUmVzZXRCb3VuZGFyeSIsInVzZUNsZWFyUmVzZXRFcnJvckJvdW5kYXJ5IiwiZ2V0SGFzRXJyb3IiLCJlbnN1cmVTdXNwZW5zZVRpbWVycyIsIm9yaWdpbmFsU3RhbGVUaW1lIiwid2lsbEZldGNoIiwiaXNSZXN0b3JpbmciLCJzaG91bGRTdXNwZW5kIiwidXNlQmFzZVF1ZXJ5IiwiT2JzZXJ2ZXIiLCJfZXhwZXJpbWVudGFsX2JlZm9yZVF1ZXJ5IiwiaXNOZXdDYWNoZUVudHJ5Iiwic2hvdWxkU3Vic2NyaWJlIiwic3Vic2NyaWJlZCIsInVzZVN5bmNFeHRlcm5hbFN0b3JlIiwidXNlQ2FsbGJhY2siLCJvblN0b3JlQ2hhbmdlIiwidW5zdWJzY3JpYmUiLCJfZXhwZXJpbWVudGFsX2FmdGVyUXVlcnkiLCJmaW5hbGx5IiwidXNlUXVlcnkiLCJ1c2VNdXRhdGlvbiIsIm11dGF0ZU9wdGlvbnMiLCJtdXRhdGVBc3luYyIsImF4aW9zIiwiX2pzeCIsIl9qc3hzIiwiaW1nIiwiRWRpdCIsImZhY3RvcnkiLCJtb2R1bGUiLCJ0aGlzIiwiaG9va0NhbGxiYWNrIiwiaG9va3MiLCJhcmd1bWVudHMiLCJzZXRIb29rQ2FsbGJhY2siLCJpc09iamVjdCIsImhhc093blByb3AiLCJpc09iamVjdEVtcHR5Iiwib2JqIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImsiLCJpc1VuZGVmaW5lZCIsImlzTnVtYmVyIiwiaXNEYXRlIiwiYXJyIiwicmVzIiwiYXJyTGVuIiwiZXh0ZW5kIiwidmFsdWVPZiIsImNyZWF0ZVVUQyIsImZvcm1hdCIsImxvY2FsZSIsInN0cmljdCIsImNyZWF0ZUxvY2FsT3JVVEMiLCJ1dGMiLCJkZWZhdWx0UGFyc2luZ0ZsYWdzIiwiZW1wdHkiLCJ1bnVzZWRUb2tlbnMiLCJ1bnVzZWRJbnB1dCIsIm92ZXJmbG93IiwiY2hhcnNMZWZ0T3ZlciIsIm51bGxJbnB1dCIsImludmFsaWRFcmEiLCJpbnZhbGlkTW9udGgiLCJpbnZhbGlkRm9ybWF0IiwidXNlckludmFsaWRhdGVkIiwiaXNvIiwicGFyc2VkRGF0ZVBhcnRzIiwiZXJhIiwibWVyaWRpZW0iLCJyZmMyODIyIiwid2Vla2RheU1pc21hdGNoIiwiZ2V0UGFyc2luZ0ZsYWdzIiwiX3BmIiwidCIsImxlbiIsImlzVmFsaWQiLCJmbGFncyIsInBhcnNlZFBhcnRzIiwiaXNOb3dWYWxpZCIsIl9kIiwiaXNOYU4iLCJpbnZhbGlkV2Vla2RheSIsIl9zdHJpY3QiLCJiaWdIb3VyIiwidW5kZWZpbmVkIiwiaXNGcm96ZW4iLCJfaXNWYWxpZCIsImNyZWF0ZUludmFsaWQiLCJOYU4iLCJtb21lbnRQcm9wZXJ0aWVzIiwidXBkYXRlSW5Qcm9ncmVzcyIsImNvcHlDb25maWciLCJ0byIsInByb3AiLCJtb21lbnRQcm9wZXJ0aWVzTGVuIiwiX2lzQU1vbWVudE9iamVjdCIsIl9pIiwiX2YiLCJfbCIsIl90em0iLCJfaXNVVEMiLCJfb2Zmc2V0IiwiX2xvY2FsZSIsIk1vbWVudCIsInVwZGF0ZU9mZnNldCIsImlzTW9tZW50Iiwid2FybiIsIm1zZyIsInN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyIsImRlcHJlY2F0ZSIsImZpcnN0VGltZSIsImRlcHJlY2F0aW9uSGFuZGxlciIsImFyZyIsImFyZ0xlbiIsImpvaW4iLCJzdGFjayIsImRlcHJlY2F0aW9ucyIsImRlcHJlY2F0ZVNpbXBsZSIsIm5hbWUiLCJpc0Z1bmN0aW9uIiwiRnVuY3Rpb24iLCJfY29uZmlnIiwiX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50IiwiUmVnRXhwIiwiX2RheU9mTW9udGhPcmRpbmFsUGFyc2UiLCJzb3VyY2UiLCJfb3JkaW5hbFBhcnNlIiwibWVyZ2VDb25maWdzIiwicGFyZW50Q29uZmlnIiwiY2hpbGRDb25maWciLCJMb2NhbGUiLCJkZWZhdWx0Q2FsZW5kYXIiLCJzYW1lRGF5IiwibmV4dERheSIsIm5leHRXZWVrIiwibGFzdERheSIsImxhc3RXZWVrIiwic2FtZUVsc2UiLCJjYWxlbmRhciIsIm1vbSIsIm91dHB1dCIsIl9jYWxlbmRhciIsInplcm9GaWxsIiwibnVtYmVyIiwidGFyZ2V0TGVuZ3RoIiwiZm9yY2VTaWduIiwiYWJzTnVtYmVyIiwiYWJzIiwiemVyb3NUb0ZpbGwiLCJzaWduIiwicG93Iiwic3Vic3RyIiwiZm9ybWF0dGluZ1Rva2VucyIsImxvY2FsRm9ybWF0dGluZ1Rva2VucyIsImZvcm1hdEZ1bmN0aW9ucyIsImZvcm1hdFRva2VuRnVuY3Rpb25zIiwiYWRkRm9ybWF0VG9rZW4iLCJ0b2tlbiIsInBhZGRlZCIsIm9yZGluYWwiLCJmdW5jIiwibG9jYWxlRGF0YSIsInJlbW92ZUZvcm1hdHRpbmdUb2tlbnMiLCJtYXRjaCIsInJlcGxhY2UiLCJtYWtlRm9ybWF0RnVuY3Rpb24iLCJmb3JtYXRNb21lbnQiLCJpbnZhbGlkRGF0ZSIsImV4cGFuZEZvcm1hdCIsInJlcGxhY2VMb25nRGF0ZUZvcm1hdFRva2VucyIsImxvbmdEYXRlRm9ybWF0IiwidGVzdCIsImRlZmF1bHRMb25nRGF0ZUZvcm1hdCIsIkxUUyIsIkxUIiwiTCIsIkxMIiwiTExMIiwiTExMTCIsIl9sb25nRGF0ZUZvcm1hdCIsImZvcm1hdFVwcGVyIiwidG9VcHBlckNhc2UiLCJ0b2siLCJkZWZhdWx0SW52YWxpZERhdGUiLCJfaW52YWxpZERhdGUiLCJkZWZhdWx0T3JkaW5hbCIsImRlZmF1bHREYXlPZk1vbnRoT3JkaW5hbFBhcnNlIiwiX29yZGluYWwiLCJkZWZhdWx0UmVsYXRpdmVUaW1lIiwiZnV0dXJlIiwicGFzdCIsInMiLCJzcyIsIm1tIiwiaCIsImhoIiwiZCIsImRkIiwidyIsInd3IiwiTSIsIk1NIiwieSIsInl5IiwicmVsYXRpdmVUaW1lIiwid2l0aG91dFN1ZmZpeCIsInN0cmluZyIsImlzRnV0dXJlIiwiX3JlbGF0aXZlVGltZSIsInBhc3RGdXR1cmUiLCJkaWZmIiwiYWxpYXNlcyIsIkQiLCJkYXRlcyIsImRhdGUiLCJkYXlzIiwiZGF5IiwiZSIsIndlZWtkYXlzIiwid2Vla2RheSIsIkUiLCJpc293ZWVrZGF5cyIsImlzb3dlZWtkYXkiLCJEREQiLCJkYXlvZnllYXJzIiwiZGF5b2Z5ZWFyIiwiaG91cnMiLCJob3VyIiwibXMiLCJtaWxsaXNlY29uZHMiLCJtaWxsaXNlY29uZCIsIm1pbnV0ZXMiLCJtaW51dGUiLCJtb250aHMiLCJtb250aCIsIlEiLCJxdWFydGVycyIsInF1YXJ0ZXIiLCJzZWNvbmRzIiwic2Vjb25kIiwiZ2ciLCJ3ZWVreWVhcnMiLCJ3ZWVreWVhciIsIkdHIiwiaXNvd2Vla3llYXJzIiwiaXNvd2Vla3llYXIiLCJ3ZWVrcyIsIndlZWsiLCJXIiwiaXNvd2Vla3MiLCJpc293ZWVrIiwieWVhcnMiLCJ5ZWFyIiwibm9ybWFsaXplVW5pdHMiLCJ1bml0cyIsInRvTG93ZXJDYXNlIiwibm9ybWFsaXplT2JqZWN0VW5pdHMiLCJpbnB1dE9iamVjdCIsIm5vcm1hbGl6ZWRJbnB1dCIsIm5vcm1hbGl6ZWRQcm9wIiwicHJpb3JpdGllcyIsImlzb1dlZWtkYXkiLCJkYXlPZlllYXIiLCJ3ZWVrWWVhciIsImlzb1dlZWtZZWFyIiwiaXNvV2VlayIsImdldFByaW9yaXRpemVkVW5pdHMiLCJ1bml0c09iaiIsInUiLCJ1bml0IiwicHJpb3JpdHkiLCJtYXRjaDEiLCJtYXRjaDIiLCJtYXRjaDMiLCJtYXRjaDQiLCJtYXRjaDYiLCJtYXRjaDF0bzIiLCJtYXRjaDN0bzQiLCJtYXRjaDV0bzYiLCJtYXRjaDF0bzMiLCJtYXRjaDF0bzQiLCJtYXRjaDF0bzYiLCJtYXRjaFVuc2lnbmVkIiwibWF0Y2hTaWduZWQiLCJtYXRjaE9mZnNldCIsIm1hdGNoU2hvcnRPZmZzZXQiLCJtYXRjaFRpbWVzdGFtcCIsIm1hdGNoV29yZCIsIm1hdGNoMXRvMk5vTGVhZGluZ1plcm8iLCJtYXRjaDF0bzJIYXNaZXJvIiwicmVnZXhlcyIsImFkZFJlZ2V4VG9rZW4iLCJyZWdleCIsInN0cmljdFJlZ2V4IiwiaXNTdHJpY3QiLCJnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4iLCJ1bmVzY2FwZUZvcm1hdCIsInJlZ2V4RXNjYXBlIiwibWF0Y2hlZCIsInAxIiwicDIiLCJwMyIsInA0IiwiYWJzRmxvb3IiLCJjZWlsIiwiZmxvb3IiLCJ0b0ludCIsImFyZ3VtZW50Rm9yQ29lcmNpb24iLCJjb2VyY2VkTnVtYmVyIiwiaXNGaW5pdGUiLCJ0b2tlbnMiLCJhZGRQYXJzZVRva2VuIiwidG9rZW5MZW4iLCJhZGRXZWVrUGFyc2VUb2tlbiIsIl93IiwiYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4iLCJfYSIsImlzTGVhcFllYXIiLCJZRUFSIiwiTU9OVEgiLCJEQVRFIiwiSE9VUiIsIk1JTlVURSIsIlNFQ09ORCIsIk1JTExJU0VDT05EIiwiV0VFSyIsIldFRUtEQVkiLCJwYXJzZVR3b0RpZ2l0WWVhciIsInBhcnNlSW50IiwiZGF5c0luWWVhciIsImdldFNldFllYXIiLCJtYWtlR2V0U2V0IiwiZ2V0SXNMZWFwWWVhciIsImtlZXBUaW1lIiwic2V0JDEiLCJpc1VUQyIsImdldFVUQ01pbGxpc2Vjb25kcyIsImdldE1pbGxpc2Vjb25kcyIsImdldFVUQ1NlY29uZHMiLCJnZXRTZWNvbmRzIiwiZ2V0VVRDTWludXRlcyIsImdldE1pbnV0ZXMiLCJnZXRVVENIb3VycyIsImdldEhvdXJzIiwiZ2V0VVRDRGF0ZSIsImdldERhdGUiLCJnZXRVVENEYXkiLCJnZXREYXkiLCJnZXRVVENNb250aCIsImdldE1vbnRoIiwiZ2V0VVRDRnVsbFllYXIiLCJnZXRGdWxsWWVhciIsInNldFVUQ01pbGxpc2Vjb25kcyIsInNldE1pbGxpc2Vjb25kcyIsInNldFVUQ1NlY29uZHMiLCJzZXRTZWNvbmRzIiwic2V0VVRDTWludXRlcyIsInNldE1pbnV0ZXMiLCJzZXRVVENIb3VycyIsInNldEhvdXJzIiwic2V0VVRDRGF0ZSIsInNldERhdGUiLCJzZXRVVENGdWxsWWVhciIsInNldEZ1bGxZZWFyIiwic3RyaW5nR2V0Iiwic3RyaW5nU2V0IiwicHJpb3JpdGl6ZWQiLCJwcmlvcml0aXplZExlbiIsIm1vZCIsIm4iLCJkYXlzSW5Nb250aCIsIm1vZE1vbnRoIiwibW9udGhzU2hvcnQiLCJtb250aHNTaG9ydFJlZ2V4IiwibW9udGhzUmVnZXgiLCJtb250aHNQYXJzZSIsImRlZmF1bHRMb2NhbGVNb250aHMiLCJzcGxpdCIsImRlZmF1bHRMb2NhbGVNb250aHNTaG9ydCIsIk1PTlRIU19JTl9GT1JNQVQiLCJkZWZhdWx0TW9udGhzU2hvcnRSZWdleCIsImRlZmF1bHRNb250aHNSZWdleCIsImxvY2FsZU1vbnRocyIsIl9tb250aHMiLCJpc0Zvcm1hdCIsImxvY2FsZU1vbnRoc1Nob3J0IiwiX21vbnRoc1Nob3J0IiwiaGFuZGxlU3RyaWN0UGFyc2UiLCJtb250aE5hbWUiLCJpaSIsImxsYyIsInRvTG9jYWxlTG93ZXJDYXNlIiwiX21vbnRoc1BhcnNlIiwiX2xvbmdNb250aHNQYXJzZSIsIl9zaG9ydE1vbnRoc1BhcnNlIiwibG9jYWxlTW9udGhzUGFyc2UiLCJfbW9udGhzUGFyc2VFeGFjdCIsInNldE1vbnRoIiwic2V0VVRDTW9udGgiLCJnZXRTZXRNb250aCIsImdldERheXNJbk1vbnRoIiwiY29tcHV0ZU1vbnRoc1BhcnNlIiwiX21vbnRoc1Nob3J0U3RyaWN0UmVnZXgiLCJfbW9udGhzU2hvcnRSZWdleCIsIl9tb250aHNTdHJpY3RSZWdleCIsIl9tb250aHNSZWdleCIsImNtcExlblJldiIsInNob3J0UGllY2VzIiwibG9uZ1BpZWNlcyIsIm1peGVkUGllY2VzIiwic2hvcnRQIiwibG9uZ1AiLCJjcmVhdGVEYXRlIiwiY3JlYXRlVVRDRGF0ZSIsIlVUQyIsImZpcnN0V2Vla09mZnNldCIsImRvdyIsImRveSIsImZ3ZCIsImZ3ZGx3IiwiZGF5T2ZZZWFyRnJvbVdlZWtzIiwibG9jYWxXZWVrZGF5Iiwid2Vla09mZnNldCIsInJlc1llYXIiLCJyZXNEYXlPZlllYXIiLCJ3ZWVrT2ZZZWFyIiwicmVzV2VlayIsIndlZWtzSW5ZZWFyIiwid2Vla09mZnNldE5leHQiLCJsb2NhbGVXZWVrIiwiX3dlZWsiLCJkZWZhdWx0TG9jYWxlV2VlayIsImxvY2FsZUZpcnN0RGF5T2ZXZWVrIiwibG9jYWxlRmlyc3REYXlPZlllYXIiLCJnZXRTZXRXZWVrIiwiZ2V0U2V0SVNPV2VlayIsIndlZWtkYXlzTWluIiwid2Vla2RheXNTaG9ydCIsIndlZWtkYXlzTWluUmVnZXgiLCJ3ZWVrZGF5c1Nob3J0UmVnZXgiLCJ3ZWVrZGF5c1JlZ2V4Iiwid2Vla2RheXNQYXJzZSIsInBhcnNlV2Vla2RheSIsInBhcnNlSXNvV2Vla2RheSIsInNoaWZ0V2Vla2RheXMiLCJ3cyIsImNvbmNhdCIsImRlZmF1bHRMb2NhbGVXZWVrZGF5cyIsImRlZmF1bHRMb2NhbGVXZWVrZGF5c1Nob3J0IiwiZGVmYXVsdExvY2FsZVdlZWtkYXlzTWluIiwiZGVmYXVsdFdlZWtkYXlzUmVnZXgiLCJkZWZhdWx0V2Vla2RheXNTaG9ydFJlZ2V4IiwiZGVmYXVsdFdlZWtkYXlzTWluUmVnZXgiLCJsb2NhbGVXZWVrZGF5cyIsIl93ZWVrZGF5cyIsImxvY2FsZVdlZWtkYXlzU2hvcnQiLCJfd2Vla2RheXNTaG9ydCIsImxvY2FsZVdlZWtkYXlzTWluIiwiX3dlZWtkYXlzTWluIiwiaGFuZGxlU3RyaWN0UGFyc2UkMSIsIndlZWtkYXlOYW1lIiwiX3dlZWtkYXlzUGFyc2UiLCJfc2hvcnRXZWVrZGF5c1BhcnNlIiwiX21pbldlZWtkYXlzUGFyc2UiLCJsb2NhbGVXZWVrZGF5c1BhcnNlIiwiX3dlZWtkYXlzUGFyc2VFeGFjdCIsIl9mdWxsV2Vla2RheXNQYXJzZSIsImdldFNldERheU9mV2VlayIsImdldFNldExvY2FsZURheU9mV2VlayIsImdldFNldElTT0RheU9mV2VlayIsImNvbXB1dGVXZWVrZGF5c1BhcnNlIiwiX3dlZWtkYXlzU3RyaWN0UmVnZXgiLCJfd2Vla2RheXNSZWdleCIsIl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXgiLCJfd2Vla2RheXNTaG9ydFJlZ2V4IiwiX3dlZWtkYXlzTWluU3RyaWN0UmVnZXgiLCJfd2Vla2RheXNNaW5SZWdleCIsIm1pblBpZWNlcyIsIm1pbnAiLCJzaG9ydHAiLCJsb25ncCIsImhGb3JtYXQiLCJrRm9ybWF0IiwibG93ZXJjYXNlIiwibWF0Y2hNZXJpZGllbSIsIl9tZXJpZGllbVBhcnNlIiwia0lucHV0IiwiX2lzUG0iLCJpc1BNIiwiX21lcmlkaWVtIiwicG9zIiwicG9zMSIsInBvczIiLCJsb2NhbGVJc1BNIiwiY2hhckF0IiwiZGVmYXVsdExvY2FsZU1lcmlkaWVtUGFyc2UiLCJnZXRTZXRIb3VyIiwibG9jYWxlTWVyaWRpZW0iLCJpc0xvd2VyIiwiYmFzZUNvbmZpZyIsImRheU9mTW9udGhPcmRpbmFsUGFyc2UiLCJtZXJpZGllbVBhcnNlIiwibG9jYWxlcyIsImxvY2FsZUZhbWlsaWVzIiwiZ2xvYmFsTG9jYWxlIiwiY29tbW9uUHJlZml4IiwiYXJyMSIsImFycjIiLCJtaW5sIiwibm9ybWFsaXplTG9jYWxlIiwiY2hvb3NlTG9jYWxlIiwibmFtZXMiLCJqIiwibmV4dCIsImxvYWRMb2NhbGUiLCJpc0xvY2FsZU5hbWVTYW5lIiwib2xkTG9jYWxlIiwiYWxpYXNlZFJlcXVpcmUiLCJleHBvcnRzIiwiX2FiYnIiLCJyZXF1aXJlIiwiZ2V0U2V0R2xvYmFsTG9jYWxlIiwiZ2V0TG9jYWxlIiwiZGVmaW5lTG9jYWxlIiwiYWJiciIsInBhcmVudExvY2FsZSIsInVwZGF0ZUxvY2FsZSIsInRtcExvY2FsZSIsImxpc3RMb2NhbGVzIiwiY2hlY2tPdmVyZmxvdyIsIl9vdmVyZmxvd0RheU9mWWVhciIsIl9vdmVyZmxvd1dlZWtzIiwiX292ZXJmbG93V2Vla2RheSIsImV4dGVuZGVkSXNvUmVnZXgiLCJiYXNpY0lzb1JlZ2V4IiwidHpSZWdleCIsImlzb0RhdGVzIiwiaXNvVGltZXMiLCJhc3BOZXRKc29uUmVnZXgiLCJvYnNPZmZzZXRzIiwiVVQiLCJHTVQiLCJFRFQiLCJFU1QiLCJDRFQiLCJDU1QiLCJNRFQiLCJNU1QiLCJQRFQiLCJQU1QiLCJjb25maWdGcm9tSVNPIiwibCIsImV4ZWMiLCJhbGxvd1RpbWUiLCJkYXRlRm9ybWF0IiwidGltZUZvcm1hdCIsInR6Rm9ybWF0IiwiaXNvRGF0ZXNMZW4iLCJpc29UaW1lc0xlbiIsImNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQiLCJleHRyYWN0RnJvbVJGQzI4MjJTdHJpbmdzIiwieWVhclN0ciIsIm1vbnRoU3RyIiwiZGF5U3RyIiwiaG91clN0ciIsIm1pbnV0ZVN0ciIsInNlY29uZFN0ciIsInVudHJ1bmNhdGVZZWFyIiwicHJlcHJvY2Vzc1JGQzI4MjIiLCJjaGVja1dlZWtkYXkiLCJ3ZWVrZGF5U3RyIiwicGFyc2VkSW5wdXQiLCJ3ZWVrZGF5UHJvdmlkZWQiLCJ3ZWVrZGF5QWN0dWFsIiwiY2FsY3VsYXRlT2Zmc2V0Iiwib2JzT2Zmc2V0IiwibWlsaXRhcnlPZmZzZXQiLCJudW1PZmZzZXQiLCJobSIsImNvbmZpZ0Zyb21SRkMyODIyIiwicGFyc2VkQXJyYXkiLCJjb25maWdGcm9tU3RyaW5nIiwiY3JlYXRlRnJvbUlucHV0RmFsbGJhY2siLCJfdXNlVVRDIiwiYyIsImN1cnJlbnREYXRlQXJyYXkiLCJub3dWYWx1ZSIsImNvbmZpZ0Zyb21BcnJheSIsImN1cnJlbnREYXRlIiwiZXhwZWN0ZWRXZWVrZGF5IiwieWVhclRvVXNlIiwiZGF5T2ZZZWFyRnJvbVdlZWtJbmZvIiwiX2RheU9mWWVhciIsIl9uZXh0RGF5IiwidGVtcCIsIndlZWtkYXlPdmVyZmxvdyIsImN1cldlZWsiLCJjcmVhdGVMb2NhbCIsIklTT184NjAxIiwiUkZDXzI4MjIiLCJza2lwcGVkIiwic3RyaW5nTGVuZ3RoIiwidG90YWxQYXJzZWRJbnB1dExlbmd0aCIsIm1lcmlkaWVtRml4V3JhcCIsImVyYXNDb252ZXJ0WWVhciIsImlzUG0iLCJtZXJpZGllbUhvdXIiLCJjb25maWdGcm9tU3RyaW5nQW5kQXJyYXkiLCJ0ZW1wQ29uZmlnIiwiYmVzdE1vbWVudCIsInNjb3JlVG9CZWF0IiwiY3VycmVudFNjb3JlIiwidmFsaWRGb3JtYXRGb3VuZCIsImJlc3RGb3JtYXRJc1ZhbGlkIiwiY29uZmlnZkxlbiIsInNjb3JlIiwiY29uZmlnRnJvbU9iamVjdCIsImRheU9yRGF0ZSIsImNyZWF0ZUZyb21Db25maWciLCJwcmVwYXJlQ29uZmlnIiwicHJlcGFyc2UiLCJjb25maWdGcm9tSW5wdXQiLCJwcm90b3R5cGVNaW4iLCJvdGhlciIsInByb3RvdHlwZU1heCIsInBpY2tCeSIsIm1vbWVudHMiLCJvcmRlcmluZyIsImlzRHVyYXRpb25WYWxpZCIsInVuaXRIYXNEZWNpbWFsIiwib3JkZXJMZW4iLCJwYXJzZUZsb2F0IiwiaXNWYWxpZCQxIiwiY3JlYXRlSW52YWxpZCQxIiwiY3JlYXRlRHVyYXRpb24iLCJEdXJhdGlvbiIsImR1cmF0aW9uIiwiX21pbGxpc2Vjb25kcyIsIl9kYXlzIiwiX2RhdGEiLCJfYnViYmxlIiwiaXNEdXJhdGlvbiIsImFic1JvdW5kIiwicm91bmQiLCJjb21wYXJlQXJyYXlzIiwiYXJyYXkxIiwiYXJyYXkyIiwiZG9udENvbnZlcnQiLCJsZW5ndGhEaWZmIiwiZGlmZnMiLCJvZmZzZXQiLCJzZXBhcmF0b3IiLCJ1dGNPZmZzZXQiLCJvZmZzZXRGcm9tU3RyaW5nIiwiY2h1bmtPZmZzZXQiLCJtYXRjaGVyIiwibWF0Y2hlcyIsImNodW5rIiwicGFydHMiLCJjbG9uZVdpdGhPZmZzZXQiLCJtb2RlbCIsImNsb25lIiwic2V0VGltZSIsImxvY2FsIiwiZ2V0RGF0ZU9mZnNldCIsImdldFRpbWV6b25lT2Zmc2V0IiwiZ2V0U2V0T2Zmc2V0Iiwia2VlcExvY2FsVGltZSIsImtlZXBNaW51dGVzIiwibG9jYWxBZGp1c3QiLCJfY2hhbmdlSW5Qcm9ncmVzcyIsImFkZFN1YnRyYWN0IiwiZ2V0U2V0Wm9uZSIsInNldE9mZnNldFRvVVRDIiwic2V0T2Zmc2V0VG9Mb2NhbCIsInN1YnRyYWN0Iiwic2V0T2Zmc2V0VG9QYXJzZWRPZmZzZXQiLCJ0Wm9uZSIsImhhc0FsaWduZWRIb3VyT2Zmc2V0IiwiaXNEYXlsaWdodFNhdmluZ1RpbWUiLCJpc0RheWxpZ2h0U2F2aW5nVGltZVNoaWZ0ZWQiLCJfaXNEU1RTaGlmdGVkIiwidG9BcnJheSIsImlzTG9jYWwiLCJpc1V0Y09mZnNldCIsImlzVXRjIiwiYXNwTmV0UmVnZXgiLCJpc29SZWdleCIsInJldCIsImRpZmZSZXMiLCJwYXJzZUlzbyIsIm1vbWVudHNEaWZmZXJlbmNlIiwiaW52YWxpZCIsImlucCIsInBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UiLCJiYXNlIiwiaXNBZnRlciIsImlzQmVmb3JlIiwiY3JlYXRlQWRkZXIiLCJwZXJpb2QiLCJkdXIiLCJ0bXAiLCJpc0FkZGluZyIsImlzU3RyaW5nIiwiU3RyaW5nIiwiaXNNb21lbnRJbnB1dCIsImlzTnVtYmVyT3JTdHJpbmdBcnJheSIsImlzTW9tZW50SW5wdXRPYmplY3QiLCJvYmplY3RUZXN0IiwicHJvcGVydHlUZXN0IiwicHJvcGVydGllcyIsInByb3BlcnR5IiwicHJvcGVydHlMZW4iLCJhcnJheVRlc3QiLCJkYXRhVHlwZVRlc3QiLCJpc0NhbGVuZGFyU3BlYyIsImdldENhbGVuZGFyRm9ybWF0IiwibXlNb21lbnQiLCJjYWxlbmRhciQxIiwiZm9ybWF0cyIsInNvZCIsInN0YXJ0T2YiLCJjYWxlbmRhckZvcm1hdCIsImxvY2FsSW5wdXQiLCJlbmRPZiIsImlzQmV0d2VlbiIsImluY2x1c2l2aXR5IiwibG9jYWxGcm9tIiwibG9jYWxUbyIsImlzU2FtZSIsImlucHV0TXMiLCJpc1NhbWVPckFmdGVyIiwiaXNTYW1lT3JCZWZvcmUiLCJhc0Zsb2F0IiwidGhhdCIsInpvbmVEZWx0YSIsIm1vbnRoRGlmZiIsIndob2xlTW9udGhEaWZmIiwiYW5jaG9yIiwiYW5jaG9yMiIsImFkanVzdCIsImRlZmF1bHRGb3JtYXQiLCJkZWZhdWx0Rm9ybWF0VXRjIiwidG9JU09TdHJpbmciLCJrZWVwT2Zmc2V0IiwidG9EYXRlIiwiaW5zcGVjdCIsInpvbmUiLCJwcmVmaXgiLCJkYXRldGltZSIsInN1ZmZpeCIsImlucHV0U3RyaW5nIiwicG9zdGZvcm1hdCIsImh1bWFuaXplIiwiZnJvbU5vdyIsInRvTm93IiwibmV3TG9jYWxlRGF0YSIsImxhbmciLCJNU19QRVJfU0VDT05EIiwiTVNfUEVSX01JTlVURSIsIk1TX1BFUl9IT1VSIiwiTVNfUEVSXzQwMF9ZRUFSUyIsIm1vZCQxIiwiZGl2aWRlbmQiLCJkaXZpc29yIiwibG9jYWxTdGFydE9mRGF0ZSIsInV0Y1N0YXJ0T2ZEYXRlIiwic3RhcnRPZkRhdGUiLCJ1bml4IiwidG9PYmplY3QiLCJ0b0pTT04iLCJpc1ZhbGlkJDIiLCJwYXJzaW5nRmxhZ3MiLCJpbnZhbGlkQXQiLCJjcmVhdGlvbkRhdGEiLCJtYXRjaEVyYUFiYnIiLCJtYXRjaEVyYU5hbWUiLCJtYXRjaEVyYU5hcnJvdyIsImVyYXNQYXJzZSIsIm1hdGNoRXJhWWVhck9yZGluYWwiLCJfZXJhWWVhck9yZGluYWxSZWdleCIsImVyYVllYXJPcmRpbmFsUGFyc2UiLCJsb2NhbGVFcmFzIiwiZXJhcyIsIl9lcmFzIiwic2luY2UiLCJ1bnRpbCIsImxvY2FsZUVyYXNQYXJzZSIsImVyYU5hbWUiLCJuYXJyb3ciLCJsb2NhbGVFcmFzQ29udmVydFllYXIiLCJkaXIiLCJnZXRFcmFOYW1lIiwiZ2V0RXJhTmFycm93IiwiZ2V0RXJhQWJiciIsImdldEVyYVllYXIiLCJlcmFzTmFtZVJlZ2V4IiwiY29tcHV0ZUVyYXNQYXJzZSIsIl9lcmFzTmFtZVJlZ2V4IiwiX2VyYXNSZWdleCIsImVyYXNBYmJyUmVnZXgiLCJfZXJhc0FiYnJSZWdleCIsImVyYXNOYXJyb3dSZWdleCIsIl9lcmFzTmFycm93UmVnZXgiLCJhYmJyUGllY2VzIiwibmFtZVBpZWNlcyIsIm5hcnJvd1BpZWNlcyIsImVyYXNOYW1lIiwiZXJhc0FiYnIiLCJlcmFzTmFycm93IiwiYWRkV2Vla1llYXJGb3JtYXRUb2tlbiIsImdldHRlciIsImdldFNldFdlZWtZZWFyIiwiZ2V0U2V0V2Vla1llYXJIZWxwZXIiLCJnZXRTZXRJU09XZWVrWWVhciIsImdldElTT1dlZWtzSW5ZZWFyIiwiZ2V0SVNPV2Vla3NJbklTT1dlZWtZZWFyIiwiZ2V0V2Vla3NJblllYXIiLCJ3ZWVrSW5mbyIsImdldFdlZWtzSW5XZWVrWWVhciIsIndlZWtzVGFyZ2V0Iiwic2V0V2Vla0FsbCIsImRheU9mWWVhckRhdGEiLCJnZXRTZXRRdWFydGVyIiwiZ2V0U2V0RGF5T2ZNb250aCIsImdldFNldERheU9mWWVhciIsImdldFNldE1pbnV0ZSIsImdldFNldFNlY29uZCIsImdldFNldE1pbGxpc2Vjb25kIiwicGFyc2VNcyIsImdldFpvbmVBYmJyIiwiZ2V0Wm9uZU5hbWUiLCJwcm90byIsImZvciIsImVyYU5hcnJvdyIsImVyYUFiYnIiLCJlcmFZZWFyIiwiaXNvV2Vla3MiLCJ3ZWVrc0luV2Vla1llYXIiLCJpc29XZWVrc0luWWVhciIsImlzb1dlZWtzSW5JU09XZWVrWWVhciIsInBhcnNlWm9uZSIsImlzRFNUIiwiem9uZUFiYnIiLCJ6b25lTmFtZSIsImlzRFNUU2hpZnRlZCIsImNyZWF0ZVVuaXgiLCJjcmVhdGVJblpvbmUiLCJwcmVQYXJzZVBvc3RGb3JtYXQiLCJwcm90byQxIiwiZmlyc3REYXlPZlllYXIiLCJmaXJzdERheU9mV2VlayIsImdldCQxIiwic2V0dGVyIiwibGlzdE1vbnRoc0ltcGwiLCJvdXQiLCJsaXN0V2Vla2RheXNJbXBsIiwibG9jYWxlU29ydGVkIiwic2hpZnQiLCJsaXN0TW9udGhzIiwibGlzdE1vbnRoc1Nob3J0IiwibGlzdFdlZWtkYXlzIiwibGlzdFdlZWtkYXlzU2hvcnQiLCJsaXN0V2Vla2RheXNNaW4iLCJsYW5nRGF0YSIsIm1hdGhBYnMiLCJhZGRTdWJ0cmFjdCQxIiwiYWRkJDEiLCJzdWJ0cmFjdCQxIiwiYWJzQ2VpbCIsImJ1YmJsZSIsIm1vbnRoc0Zyb21EYXlzIiwibW9udGhzVG9EYXlzIiwiZGF5c1RvTW9udGhzIiwiYXMiLCJtYWtlQXMiLCJhbGlhcyIsImFzTWlsbGlzZWNvbmRzIiwiYXNTZWNvbmRzIiwiYXNNaW51dGVzIiwiYXNIb3VycyIsImFzRGF5cyIsImFzV2Vla3MiLCJhc01vbnRocyIsImFzUXVhcnRlcnMiLCJhc1llYXJzIiwidmFsdWVPZiQxIiwiY2xvbmUkMSIsImdldCQyIiwibWFrZUdldHRlciIsInRocmVzaG9sZHMiLCJzdWJzdGl0dXRlVGltZUFnbyIsInJlbGF0aXZlVGltZSQxIiwicG9zTmVnRHVyYXRpb24iLCJnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZyIsInJvdW5kaW5nRnVuY3Rpb24iLCJnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQiLCJ0aHJlc2hvbGQiLCJsaW1pdCIsImFyZ1dpdGhTdWZmaXgiLCJhcmdUaHJlc2hvbGRzIiwid2l0aFN1ZmZpeCIsInRoIiwiYWJzJDEiLCJ0b0lTT1N0cmluZyQxIiwidG90YWwiLCJ0b3RhbFNpZ24iLCJ5bVNpZ24iLCJkYXlzU2lnbiIsImhtc1NpZ24iLCJ0b0ZpeGVkIiwicHJvdG8kMiIsInRvSXNvU3RyaW5nIiwidmVyc2lvbiIsInJlbGF0aXZlVGltZVJvdW5kaW5nIiwicmVsYXRpdmVUaW1lVGhyZXNob2xkIiwiSFRNTDVfRk1UIiwiREFURVRJTUVfTE9DQUwiLCJEQVRFVElNRV9MT0NBTF9TRUNPTkRTIiwiREFURVRJTUVfTE9DQUxfTVMiLCJUSU1FIiwiVElNRV9TRUNPTkRTIiwiVElNRV9NUyIsIkNsb3NlIiwidXNlUmVmIiwiRG90c0hvcml6b250YWwiLCJmb3J3YXJkUmVmIiwiY3JlYXRlUG9ydGFsIiwiQ2hldnJvbkxlZnQiLCJDaGV2cm9uUmlnaHQiLCJMb2dvdXRJY29uIiwiU2VhcmNoIiwiTG9nb0ZlZWRiYWNrRGFyayIsIl9GcmFnbWVudCIsIkxvZ29GZWVkYmFja0xpZ2h0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTyxJQUFNQSxZQUFBLEdBQU4sTUFBK0M7QUFH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R0FBR0EsY0FBQSxDQUFDLGVBQWUsRUFBQSxFQUFBLENBQUcsRUFDdkRBLGNBQUMsQ0FBQSxjQUFjLElBQ2IsV0FBVyxFQUFFLFdBQVcsRUFDeEIsY0FBYyxFQUFFLGNBQWMsRUFBQSxDQUM5QixJQUNFLEVBQ0YsQ0FBQSxFQUNOLFFBQVEsQ0FBQyxJQUFJLENBQ2Q7QUFDSCxDQUFDOztBQ2hDRCxNQUFNLFdBQVcsR0FBRyxJQUFJLFdBQVcsRUFBRTtBQUVyQyxTQUFTLFlBQVksQ0FBQyxLQUF3QixFQUFBO0FBQzVDLElBQUEsUUFDRUEsY0FBQSxDQUFBODRCLG1CQUFBLEVBQUEsRUFBQSxRQUFBLEVBQ0U5NEIsY0FBQyxDQUFBLG1CQUFtQixJQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUEsUUFBQSxFQUN0Q0MsZUFBQyxDQUFBLGdCQUFnQixFQUFLLE1BQUEsQ0FBQSxNQUFBLENBQUEsRUFBQSxFQUFBLEtBQUssZUFDekJELGNBQUMsQ0FBQSxhQUFhLEVBQUcsRUFBQSxDQUFBLEVBQ2pCQSxjQUFDLENBQUEsT0FBTyxFQUFHLEVBQUEsQ0FBQSxFQUNYQSxlQUFDLGtCQUFrQixFQUFBLEVBQUEsQ0FBRyxFQUN0QkEsY0FBQSxDQUFDLFlBQVksRUFBRyxFQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FDQyxFQUNDLENBQUEsRUFBQSxDQUNyQjtBQUVQOzs7OyIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDM5XX0=