/******/ (() => { // webpackBootstrap /******/ "use strict"; /******/ var __webpack_modules__ = ({ /***/ 294: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ DU: () => (/* binding */ webinarsAtom), /* harmony export */ SI: () => (/* binding */ webinarCTADialogPropsAtom), /* harmony export */ mm: () => (/* binding */ webinarLeadFormDialogPropsAtom), /* harmony export */ ps: () => (/* binding */ webinarsErrorAtom), /* harmony export */ pv: () => (/* binding */ combinedFormPropsAtom), /* harmony export */ xL: () => (/* binding */ webinarsLoadingAtom) /* harmony export */ }); /* unused harmony exports webinarListDialogPropsAtom, upcomingWebinarsDialogPropsAtom, upcomingFpuWebinarsDialogPropsAtom */ /* harmony import */ var jotai__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2035); /* harmony import */ var jotai_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4929); const webinarsAtom = (0,jotai__WEBPACK_IMPORTED_MODULE_0__/* .atom */ .eU)([]); const webinarsLoadingAtom = (0,jotai__WEBPACK_IMPORTED_MODULE_0__/* .atom */ .eU)(false); const webinarsErrorAtom = (0,jotai__WEBPACK_IMPORTED_MODULE_0__/* .atom */ .eU)(null); const webinarListDialogPropsAtom = (0,jotai__WEBPACK_IMPORTED_MODULE_0__/* .atom */ .eU)(window._WEBINAR_LIST_REQUEST || undefined); const upcomingWebinarsDialogPropsAtom = (0,jotai__WEBPACK_IMPORTED_MODULE_0__/* .atom */ .eU)(Array.isArray(window._UPCOMING_WEBINARS_REQUEST) ? window._UPCOMING_WEBINARS_REQUEST : []); const upcomingFpuWebinarsDialogPropsAtom = (0,jotai__WEBPACK_IMPORTED_MODULE_0__/* .atom */ .eU)(Array.isArray(window._UPCOMING_WEBINARS_REQUEST) ? window._UPCOMING_WEBINARS_REQUEST : []); const webinarCTADialogPropsAtom = (0,jotai__WEBPACK_IMPORTED_MODULE_0__/* .atom */ .eU)(window._WEBINAR_PAGE_CTA_REQUEST || undefined); const webinarLeadFormDialogPropsAtom = (0,jotai__WEBPACK_IMPORTED_MODULE_0__/* .atom */ .eU)(window._WEBINAR_LEAD_FORM_REQUEST || undefined); function findUpcomingWebinarByTopic(webinars, filterTopic) { return webinars.find((w) => w.filterTopic === filterTopic); } const combinedFormPropsAtom = (0,jotai_utils__WEBPACK_IMPORTED_MODULE_1__/* .atomFamily */ .Iz)((filterTopic) => (0,jotai__WEBPACK_IMPORTED_MODULE_0__/* .atom */ .eU)((get) => { const listProps = get(webinarListDialogPropsAtom); const ctaProps = get(webinarCTADialogPropsAtom); const leadFormProps = get(webinarLeadFormDialogPropsAtom); const upcomingWebinarsProps = findUpcomingWebinarByTopic(get(upcomingWebinarsDialogPropsAtom), filterTopic); return { showPhoneNumber: leadFormProps?.showPhoneNumber ?? ctaProps?.showPhoneNumber ?? listProps?.showPhoneNumber ?? upcomingWebinarsProps?.showPhoneNumber ?? false, requirePhoneNumber: leadFormProps?.requirePhoneNumber ?? ctaProps?.requirePhoneNumber ?? listProps?.requirePhoneNumber ?? upcomingWebinarsProps?.requirePhoneNumber ?? false, showEmailOptIn: leadFormProps?.showEmailOptIn ?? ctaProps?.showEmailOptIn ?? listProps?.showEmailOptIn ?? upcomingWebinarsProps?.showEmailOptIn ?? false, showSmsOptIn: leadFormProps?.showSmsOptIn ?? ctaProps?.showSmsOptIn ?? listProps?.showSmsOptIn ?? upcomingWebinarsProps?.showSmsOptIn ?? false, buttonQuantity: ctaProps?.buttonQuantity ?? 2, buttonAppearance: ctaProps?.buttonAppearance ?? 'primary', onDarkCanvas: ctaProps?.onDarkCanvas ?? false, showRecording: ctaProps?.showRecording ?? listProps?.showRecording ?? false, filterOptions: ctaProps?.filterOptions ?? '' }; })); /***/ }), /***/ 4506: /***/ ((__unused_webpack_module, __unused_webpack___webpack_exports__, __webpack_require__) => { // EXTERNAL MODULE: ./node_modules/react/jsx-runtime.js var jsx_runtime = __webpack_require__(4848); // EXTERNAL MODULE: ./node_modules/react-dom/client.js var client = __webpack_require__(5338); // EXTERNAL MODULE: ./node_modules/react/index.js var react = __webpack_require__(6540); // EXTERNAL MODULE: ./node_modules/jotai/esm/react.mjs var esm_react = __webpack_require__(4843); // EXTERNAL MODULE: ./node_modules/@ramsey-design-system/button/dist/Button.esm.js + 1 modules var Button_esm = __webpack_require__(9438); // EXTERNAL MODULE: ./node_modules/@ramsey-design-system/heading/dist/Heading.esm.js var Heading_esm = __webpack_require__(1266); // EXTERNAL MODULE: ./node_modules/@ramsey-design-system/dialog/dist/Dialog.esm.js + 1 modules var Dialog_esm = __webpack_require__(2911); ;// ./src/rplus-forms/shared/components/Dialog.tsx const DIALOG_PADDING = (/* unused pure expression or super */ null && (['sm', 'md', 'lg', 'none'])); const DIALOG_WIDTH = (/* unused pure expression or super */ null && (['sm', 'md', 'lg'])); /** * * RDS Dialog component requires a triggerRef prop to be passed in. * This is a wrapper to make the triggerRef optiobal. */ function Dialog({ children, className, onClose, open = false, padding = 'md', portalMount, triggerRef, width = 'md' }) { if (!open) { return null; // Do not render anything if `open` is false } return ((0,jsx_runtime.jsx)(Dialog_esm/* default */.A, { "data-testid": "rds-dialog", onClose: onClose, open: open, padding: padding, portalMount: portalMount, width: width, triggerRef: triggerRef || null, className: `[&_.rds-Dialog-overlay]:bg-white [&_.rds-Dialog-overlay]:bg-opacity-30 [&_.rds-Dialog-overlay]:backdrop-blur-[8px] ${className ?? ''}`, children: children })); } Dialog.Title = Dialog_esm/* default */.A.Title; Dialog.Description = Dialog_esm/* default */.A.Description; /* harmony default export */ const components_Dialog = (Dialog); // EXTERNAL MODULE: ./src/rplus-forms/modules/WebinarLeadForm/WebinarLeadForm.tsx + 4 modules var WebinarLeadForm = __webpack_require__(902); ;// ./src/rplus-forms/modules/UpcomingWebinarList/WebinarDialog.tsx // RDS // Components function WebinarDialog({ onClose, isOpen, webinarId, webinarName, webinarTopic, webinarTime }) { const handleClose = () => { onClose(); }; const isRecording = !webinarId; const dialogTitle = webinarName ?? webinarTopic; return ((0,jsx_runtime.jsx)(components_Dialog, { open: isOpen, onClose: handleClose, width: "md", className: "[&_.rds-Dialog-content]:max-w-[600px] [&_.rds-Dialog-content]:p-3 [&_.rds-Dialog-content]:md:p-5", children: (0,jsx_runtime.jsxs)("div", { "data-testid": "webinar-dialog", className: "flex flex-col items-center", children: [(0,jsx_runtime.jsxs)(Heading_esm/* default */.A, { level: "2", size: "medium", className: "text-blue-80 text-center !mb-2", "data-testid": "dialog-title", children: [dialogTitle, isRecording ? ((0,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [(0,jsx_runtime.jsx)("br", {}), (0,jsx_runtime.jsx)("span", { children: "Recording" })] })) : null, (0,jsx_runtime.jsx)("br", {}), webinarTime] }), (0,jsx_runtime.jsx)(WebinarLeadForm/* default */.A, { webinarId: webinarId, webinarTopic: webinarTopic })] }) })); } // EXTERNAL MODULE: ./node_modules/date-fns-tz/dist/esm/index.js + 50 modules var esm = __webpack_require__(7971); ;// ./src/rplus-forms/shared/utils/formatDate.ts const formatDate = (dateString, timeZone) => { try { const date = new Date(dateString); const zonedDate = (0,esm/* toZonedTime */.L_)(date, timeZone); const formatDate = (0,esm/* format */.GP)(zonedDate, 'MMM d, h aa z', { timeZone }); // Manually remove D from CDT const formattedDate = formatDate.replace(/\bC[DS]T\b/, 'CT'); return formattedDate; } catch (error) { console.error('Error formatting date:', error); return 'Invalid Date'; } }; const formatShortDate = (dateString) => { try { const date = new Date(dateString); return format(date, 'MMM d'); } catch (error) { console.error('Error formatting date:', error); return 'Invalid Date'; } }; // EXTERNAL MODULE: ./node_modules/classnames/index.js var classnames = __webpack_require__(6942); var classnames_default = /*#__PURE__*/__webpack_require__.n(classnames); // EXTERNAL MODULE: ./node_modules/@tanstack/react-query/build/modern/useQuery.js + 6 modules var useQuery = __webpack_require__(3930); // EXTERNAL MODULE: ./src/rplus-forms/shared/application.ts var application = __webpack_require__(659); // EXTERNAL MODULE: ./src/rplus-forms/shared/utils/constants.ts var constants = __webpack_require__(7202); // EXTERNAL MODULE: ./src/rplus-forms/shared/stores/webinarAtoms.ts var webinarAtoms = __webpack_require__(294); ;// ./src/rplus-forms/shared/hooks/useWebinars.ts function useWebinars() { const setWebinars = (0,esm_react/* useSetAtom */.Xr)(webinarAtoms/* webinarsAtom */.DU); const setLoading = (0,esm_react/* useSetAtom */.Xr)(webinarAtoms/* webinarsLoadingAtom */.xL); const setError = (0,esm_react/* useSetAtom */.Xr)(webinarAtoms/* webinarsErrorAtom */.ps); const upcomingWebinars = (0,useQuery/* useQuery */.I)({ queryKey: ['webinars'], queryFn: async () => { const response = await fetch(`${application/* applicationConfig */.L.magnoliaFormsWebUrl}${constants/* PATHS */.R.API.UPCOMING_WEBINARS}`, { method: 'GET', headers: { 'Content-Type': 'application/json' } }); if (!response.ok) { throw new Error('Failed to fetch webinars'); } return response.json(); }, staleTime: 5 * 60 * 1000, // 5 minutes gcTime: 10 * 60 * 1000 // 10 minutes }); (0,react.useEffect)(() => { setWebinars(upcomingWebinars.data || []); setLoading(upcomingWebinars.isLoading); setError(upcomingWebinars.error); }, [ upcomingWebinars.data, upcomingWebinars.isLoading, upcomingWebinars.error, setWebinars, setLoading, setError ]); return upcomingWebinars; } ;// ./src/rplus-forms/modules/WebinarPageCTA/WebinarPageCTA.tsx // Components // Utils // Hooks // Atoms function WebinarPageCTA() { const { refetch } = useWebinars(); const webinars = (0,esm_react/* useAtomValue */.md)(webinarAtoms/* webinarsAtom */.DU); const loading = (0,esm_react/* useAtomValue */.md)(webinarAtoms/* webinarsLoadingAtom */.xL); const error = (0,esm_react/* useAtomValue */.md)(webinarAtoms/* webinarsErrorAtom */.ps); const [ctaDialogProps, setCTADialogProps] = (0,esm_react/* useAtom */.fp)(webinarAtoms/* webinarCTADialogPropsAtom */.SI); const webinarTitle = ctaDialogProps?.webinarName || ctaDialogProps?.filterOptions; const buttonQuantity = ctaDialogProps?.buttonQuantity ?? 2; const buttonAppearance = ctaDialogProps?.buttonAppearance ?? 'primary'; const onDarkCanvas = ctaDialogProps?.onDarkCanvas ?? false; const buttonText = ctaDialogProps?.buttonText ?? 'Watch Recording'; const showRecording = ctaDialogProps?.showRecording ?? false; const filterTopic = ctaDialogProps?.filterOptions ?? null; const [dialogOpen, setDialogOpen] = (0,react.useState)(false); const [selectedWebinar, setSelectedWebinar] = (0,react.useState)({ id: '', name: null, topic: null, time: null }); const filteredWebinars = filterTopic ? webinars.filter((webinar) => webinar.topic.toLowerCase() === filterTopic.toLowerCase()) : webinars; const openDialog = (id, name, topic, time) => { setSelectedWebinar({ id: id || '', name, topic, time }); setDialogOpen(true); }; const closeDialog = () => { setDialogOpen(false); }; (0,react.useEffect)(() => { const hasNoAtomWebinars = !webinars || webinars.length === 0; if (hasNoAtomWebinars && !loading && !error) { console.log('Triggering automatic refetch...'); refetch(); } }, [webinars, loading, error]); (0,react.useEffect)(() => { if (window._WEBINAR_PAGE_CTA_REQUEST && !ctaDialogProps) { setCTADialogProps(window._WEBINAR_PAGE_CTA_REQUEST); } }, [ctaDialogProps, setCTADialogProps]); if (loading) { return (0,jsx_runtime.jsx)("div", { children: "Loading..." }); } if (error) { return (0,jsx_runtime.jsx)("div", { className: "mb-4 text-center text-red-500", children: error.message }); } return ((0,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [(0,jsx_runtime.jsxs)("div", { "data-testid": "webinar-button-grid", className: `mx-auto grid gap-1 max-w-[12.5rem] grid-cols-1 ${classnames_default()(buttonQuantity > 3 ? 'md:grid-cols-3 sm:max-w-xl' : 'md:grid-cols-2 sm:max-w-md')}`, children: [filteredWebinars.length > 0 ? (filteredWebinars.slice(0, buttonQuantity).map((webinar) => { const formattedDate = webinar.start_time ? formatDate(webinar.start_time, 'America/Chicago') : 'Invalid Date'; return ((0,jsx_runtime.jsx)(Button_esm/* default */.A, { isOnDarkCanvas: onDarkCanvas, size: "large", appearance: buttonAppearance, onClick: () => { openDialog(webinar.id, webinarTitle, webinar.topic, formattedDate); }, disabled: formattedDate === 'Invalid Date', children: formattedDate }, webinar.id)); })) : ((0,jsx_runtime.jsx)(Button_esm/* default */.A, { size: "large", disabled: true, children: "Coming Soon" })), showRecording && ((0,jsx_runtime.jsx)(Button_esm/* default */.A, { size: "large", className: `whitespace-nowrap md:whitespace-break-spaces lg:whitespace-nowrap`, isOnDarkCanvas: onDarkCanvas, onClick: () => { openDialog('', webinarTitle, filterTopic, ''); }, children: buttonText || 'Watch Recording' }))] }), (0,jsx_runtime.jsx)(WebinarDialog, { isOpen: dialogOpen, onClose: closeDialog, webinarId: selectedWebinar.id, webinarName: webinarTitle, webinarTopic: selectedWebinar.topic, webinarTime: selectedWebinar.time })] })); } /* harmony default export */ const WebinarPageCTA_WebinarPageCTA = (WebinarPageCTA); // EXTERNAL MODULE: ./node_modules/@tanstack/react-query/build/modern/QueryClientProvider.js var QueryClientProvider = __webpack_require__(7665); // EXTERNAL MODULE: ./src/rplus-forms/shared/config/sharedQueryClient.ts var sharedQueryClient = __webpack_require__(5288); ;// ./src/rplus-forms/modules/WebinarPageCTA/index.tsx const rootElement = document.getElementById('webinar-page-cta-root'); const root = (0,client.createRoot)(rootElement); root.render((0,jsx_runtime.jsx)(QueryClientProvider/* QueryClientProvider */.Ht, { client: sharedQueryClient/* sharedQueryClient */.T, children: (0,jsx_runtime.jsx)(WebinarPageCTA_WebinarPageCTA, {}) })); /***/ }), /***/ 6540: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { if (true) { module.exports = __webpack_require__(9869); } else // removed by dead control flow {} /***/ }) /******/ }); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ // no module.id needed /******/ // no module.loaded needed /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = __webpack_modules__; /******/ /************************************************************************/ /******/ /* webpack/runtime/chunk loaded */ /******/ (() => { /******/ var deferred = []; /******/ __webpack_require__.O = (result, chunkIds, fn, priority) => { /******/ if(chunkIds) { /******/ priority = priority || 0; /******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1]; /******/ deferred[i] = [chunkIds, fn, priority]; /******/ return; /******/ } /******/ var notFulfilled = Infinity; /******/ for (var i = 0; i < deferred.length; i++) { /******/ var [chunkIds, fn, priority] = deferred[i]; /******/ var fulfilled = true; /******/ for (var j = 0; j < chunkIds.length; j++) { /******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) { /******/ chunkIds.splice(j--, 1); /******/ } else { /******/ fulfilled = false; /******/ if(priority < notFulfilled) notFulfilled = priority; /******/ } /******/ } /******/ if(fulfilled) { /******/ deferred.splice(i--, 1) /******/ var r = fn(); /******/ if (r !== undefined) result = r; /******/ } /******/ } /******/ return result; /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/compat get default export */ /******/ (() => { /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = (module) => { /******/ var getter = module && module.__esModule ? /******/ () => (module['default']) : /******/ () => (module); /******/ __webpack_require__.d(getter, { a: getter }); /******/ return getter; /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/define property getters */ /******/ (() => { /******/ // define getter functions for harmony exports /******/ __webpack_require__.d = (exports, definition) => { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ (() => { /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) /******/ })(); /******/ /******/ /* webpack/runtime/jsonp chunk loading */ /******/ (() => { /******/ // no baseURI /******/ /******/ // object to store loaded and loading chunks /******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched /******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded /******/ var installedChunks = { /******/ 112: 0, /******/ 886: 0 /******/ }; /******/ /******/ // no chunk on demand loading /******/ /******/ // no prefetching /******/ /******/ // no preloaded /******/ /******/ // no HMR /******/ /******/ // no HMR manifest /******/ /******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); /******/ /******/ // install a JSONP callback for chunk loading /******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { /******/ var [chunkIds, moreModules, runtime] = data; /******/ // add "moreModules" to the modules object, /******/ // then flag all "chunkIds" as loaded and fire callback /******/ var moduleId, chunkId, i = 0; /******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { /******/ for(moduleId in moreModules) { /******/ if(__webpack_require__.o(moreModules, moduleId)) { /******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; /******/ } /******/ } /******/ if(runtime) var result = runtime(__webpack_require__); /******/ } /******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); /******/ for(;i < chunkIds.length; i++) { /******/ chunkId = chunkIds[i]; /******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { /******/ installedChunks[chunkId][0](); /******/ } /******/ installedChunks[chunkId] = 0; /******/ } /******/ return __webpack_require__.O(result); /******/ } /******/ /******/ var chunkLoadingGlobal = self["webpackChunkramsey_plus_forms"] = self["webpackChunkramsey_plus_forms"] || []; /******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); /******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); /******/ })(); /******/ /******/ /* webpack/runtime/nonce */ /******/ (() => { /******/ __webpack_require__.nc = undefined; /******/ })(); /******/ /************************************************************************/ /******/ /******/ // startup /******/ // Load entry module and return exports /******/ // This entry module depends on other loaded chunks and execution need to be delayed /******/ var __webpack_exports__ = __webpack_require__.O(undefined, [279,749,428,266,950,468,780,886,377], () => (__webpack_require__(4506))) /******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); /******/ /******/ })() ; //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QkFBK0Isd0NBQXdDO1dBQ3ZFO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsaUJBQWlCLHFCQUFxQjtXQUN0QztXQUNBO1dBQ0Esa0JBQWtCLHFCQUFxQjtXQUN2QztXQUNBO1dBQ0EsS0FBSztXQUNMO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxFOzs7OztXQzNCQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsaUNBQWlDLFdBQVc7V0FDNUM7V0FDQSxFOzs7OztXQ1BBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EseUNBQXlDLHdDQUF3QztXQUNqRjtXQUNBO1dBQ0EsRTs7Ozs7V0NQQSx3Rjs7Ozs7V0NBQTs7V0FFQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTs7V0FFQTs7V0FFQTs7V0FFQTs7V0FFQTs7V0FFQTs7V0FFQTs7V0FFQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxNQUFNLHFCQUFxQjtXQUMzQjtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBOztXQUVBO1dBQ0E7V0FDQSw0Rzs7Ozs7V0NqREEsbUM7Ozs7O1VFQUE7VUFDQTtVQUNBO1VBQ0E7VUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JhbXNleS1wbHVzLWZvcm1zLy4vc3JjL3JwbHVzLWZvcm1zL3NoYXJlZC9zdG9yZXMvd2ViaW5hckF0b21zLnRzIiwid2VicGFjazovL3JhbXNleS1wbHVzLWZvcm1zLy4vc3JjL3JwbHVzLWZvcm1zL3NoYXJlZC9jb21wb25lbnRzL0RpYWxvZy50c3giLCJ3ZWJwYWNrOi8vcmFtc2V5LXBsdXMtZm9ybXMvLi9zcmMvcnBsdXMtZm9ybXMvbW9kdWxlcy9VcGNvbWluZ1dlYmluYXJMaXN0L1dlYmluYXJEaWFsb2cudHN4Iiwid2VicGFjazovL3JhbXNleS1wbHVzLWZvcm1zLy4vc3JjL3JwbHVzLWZvcm1zL3NoYXJlZC91dGlscy9mb3JtYXREYXRlLnRzIiwid2VicGFjazovL3JhbXNleS1wbHVzLWZvcm1zLy4vc3JjL3JwbHVzLWZvcm1zL3NoYXJlZC9ob29rcy91c2VXZWJpbmFycy50cyIsIndlYnBhY2s6Ly9yYW1zZXktcGx1cy1mb3Jtcy8uL3NyYy9ycGx1cy1mb3Jtcy9tb2R1bGVzL1dlYmluYXJQYWdlQ1RBL1dlYmluYXJQYWdlQ1RBLnRzeCIsIndlYnBhY2s6Ly9yYW1zZXktcGx1cy1mb3Jtcy8uL3NyYy9ycGx1cy1mb3Jtcy9tb2R1bGVzL1dlYmluYXJQYWdlQ1RBL2luZGV4LnRzeCIsIndlYnBhY2s6Ly9yYW1zZXktcGx1cy1mb3Jtcy8uL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIsIndlYnBhY2s6Ly9yYW1zZXktcGx1cy1mb3Jtcy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9yYW1zZXktcGx1cy1mb3Jtcy93ZWJwYWNrL3J1bnRpbWUvY2h1bmsgbG9hZGVkIiwid2VicGFjazovL3JhbXNleS1wbHVzLWZvcm1zL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL3JhbXNleS1wbHVzLWZvcm1zL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9yYW1zZXktcGx1cy1mb3Jtcy93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL3JhbXNleS1wbHVzLWZvcm1zL3dlYnBhY2svcnVudGltZS9qc29ucCBjaHVuayBsb2FkaW5nIiwid2VicGFjazovL3JhbXNleS1wbHVzLWZvcm1zL3dlYnBhY2svcnVudGltZS9ub25jZSIsIndlYnBhY2s6Ly9yYW1zZXktcGx1cy1mb3Jtcy93ZWJwYWNrL2JlZm9yZS1zdGFydHVwIiwid2VicGFjazovL3JhbXNleS1wbHVzLWZvcm1zL3dlYnBhY2svc3RhcnR1cCIsIndlYnBhY2s6Ly9yYW1zZXktcGx1cy1mb3Jtcy93ZWJwYWNrL2FmdGVyLXN0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXRvbSB9IGZyb20gJ2pvdGFpJztcbmltcG9ydCB7IGF0b21GYW1pbHkgfSBmcm9tICdqb3RhaS91dGlscyc7XG5pbXBvcnQgdHlwZSB7IFdlYmluYXIgfSBmcm9tICcuLi90eXBlcy93ZWJpbmFyVHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBXZWJpbmFyTGlzdERpYWxvZ1Byb3BzIH0gZnJvbSAnLi4vLi4vbW9kdWxlcy9VcGNvbWluZ1dlYmluYXJMaXN0L3R5cGVzJztcbmltcG9ydCB7IFVwY29taW5nV2ViaW5hcnNEaWFsb2dQcm9wc1R5cGUgfSBmcm9tICcuLi8uLi9tb2R1bGVzL1VwY29taW5nV2ViaW5hcnMvdHlwZXMnO1xuaW1wb3J0IHsgVXBjb21pbmdGcHVXZWJpbmFyc0RpYWxvZ1Byb3BzVHlwZSB9IGZyb20gJy4uLy4uL21vZHVsZXMvVXBjb21pbmdGcHVXZWJpbmFycy90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IFdlYmluYXJDVEFEaWFsb2dQcm9wcyB9IGZyb20gJy4uLy4uL21vZHVsZXMvV2ViaW5hclBhZ2VDVEEvdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBXZWJpbmFyRGlhbG9nUHJvcHMgfSBmcm9tICcuLi8uLi9tb2R1bGVzL1dlYmluYXJMZWFkRm9ybS90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCB3ZWJpbmFyc0F0b20gPSBhdG9tPFdlYmluYXJbXT4oW10pO1xuZXhwb3J0IGNvbnN0IHdlYmluYXJzTG9hZGluZ0F0b20gPSBhdG9tPGJvb2xlYW4+KGZhbHNlKTtcbmV4cG9ydCBjb25zdCB3ZWJpbmFyc0Vycm9yQXRvbSA9IGF0b208RXJyb3IgfCBudWxsPihudWxsKTtcblxuZXhwb3J0IGNvbnN0IHdlYmluYXJMaXN0RGlhbG9nUHJvcHNBdG9tID0gYXRvbTxcbiAgV2ViaW5hckxpc3REaWFsb2dQcm9wcyB8IHVuZGVmaW5lZFxuPih3aW5kb3cuX1dFQklOQVJfTElTVF9SRVFVRVNUIHx8IHVuZGVmaW5lZCk7XG5cbmV4cG9ydCBjb25zdCB1cGNvbWluZ1dlYmluYXJzRGlhbG9nUHJvcHNBdG9tID0gYXRvbTxcbiAgVXBjb21pbmdXZWJpbmFyc0RpYWxvZ1Byb3BzVHlwZVtdXG4+KFxuICBBcnJheS5pc0FycmF5KHdpbmRvdy5fVVBDT01JTkdfV0VCSU5BUlNfUkVRVUVTVClcbiAgICA/IHdpbmRvdy5fVVBDT01JTkdfV0VCSU5BUlNfUkVRVUVTVFxuICAgIDogW11cbik7XG5cbmV4cG9ydCBjb25zdCB1cGNvbWluZ0ZwdVdlYmluYXJzRGlhbG9nUHJvcHNBdG9tID0gYXRvbTxcbiAgVXBjb21pbmdGcHVXZWJpbmFyc0RpYWxvZ1Byb3BzVHlwZVtdXG4+KFxuICBBcnJheS5pc0FycmF5KHdpbmRvdy5fVVBDT01JTkdfV0VCSU5BUlNfUkVRVUVTVClcbiAgICA/IHdpbmRvdy5fVVBDT01JTkdfV0VCSU5BUlNfUkVRVUVTVFxuICAgIDogW11cbik7XG5cbmV4cG9ydCBjb25zdCB3ZWJpbmFyQ1RBRGlhbG9nUHJvcHNBdG9tID0gYXRvbTxcbiAgV2ViaW5hckNUQURpYWxvZ1Byb3BzIHwgdW5kZWZpbmVkXG4+KHdpbmRvdy5fV0VCSU5BUl9QQUdFX0NUQV9SRVFVRVNUIHx8IHVuZGVmaW5lZCk7XG5cbmV4cG9ydCBjb25zdCB3ZWJpbmFyTGVhZEZvcm1EaWFsb2dQcm9wc0F0b20gPSBhdG9tPFxuICBXZWJpbmFyRGlhbG9nUHJvcHMgfCB1bmRlZmluZWRcbj4od2luZG93Ll9XRUJJTkFSX0xFQURfRk9STV9SRVFVRVNUIHx8IHVuZGVmaW5lZCk7XG5cbmZ1bmN0aW9uIGZpbmRVcGNvbWluZ1dlYmluYXJCeVRvcGljKFxuICB3ZWJpbmFyczogVXBjb21pbmdXZWJpbmFyc0RpYWxvZ1Byb3BzVHlwZVtdLFxuICBmaWx0ZXJUb3BpYzogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBVcGNvbWluZ1dlYmluYXJzRGlhbG9nUHJvcHNUeXBlIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHdlYmluYXJzLmZpbmQoKHcpID0+IHcuZmlsdGVyVG9waWMgPT09IGZpbHRlclRvcGljKTtcbn1cblxuZXhwb3J0IGNvbnN0IGNvbWJpbmVkRm9ybVByb3BzQXRvbSA9IGF0b21GYW1pbHkoKGZpbHRlclRvcGljPzogc3RyaW5nKSA9PlxuICBhdG9tKChnZXQpID0+IHtcbiAgICBjb25zdCBsaXN0UHJvcHMgPSBnZXQod2ViaW5hckxpc3REaWFsb2dQcm9wc0F0b20pO1xuICAgIGNvbnN0IGN0YVByb3BzID0gZ2V0KHdlYmluYXJDVEFEaWFsb2dQcm9wc0F0b20pO1xuICAgIGNvbnN0IGxlYWRGb3JtUHJvcHMgPSBnZXQod2ViaW5hckxlYWRGb3JtRGlhbG9nUHJvcHNBdG9tKTtcbiAgICBjb25zdCB1cGNvbWluZ1dlYmluYXJzUHJvcHMgPSBmaW5kVXBjb21pbmdXZWJpbmFyQnlUb3BpYyhcbiAgICAgIGdldCh1cGNvbWluZ1dlYmluYXJzRGlhbG9nUHJvcHNBdG9tKSxcbiAgICAgIGZpbHRlclRvcGljXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzaG93UGhvbmVOdW1iZXI6XG4gICAgICAgIGxlYWRGb3JtUHJvcHM/LnNob3dQaG9uZU51bWJlciA/P1xuICAgICAgICBjdGFQcm9wcz8uc2hvd1Bob25lTnVtYmVyID8/XG4gICAgICAgIGxpc3RQcm9wcz8uc2hvd1Bob25lTnVtYmVyID8/XG4gICAgICAgIHVwY29taW5nV2ViaW5hcnNQcm9wcz8uc2hvd1Bob25lTnVtYmVyID8/XG4gICAgICAgIGZhbHNlLFxuICAgICAgcmVxdWlyZVBob25lTnVtYmVyOlxuICAgICAgICBsZWFkRm9ybVByb3BzPy5yZXF1aXJlUGhvbmVOdW1iZXIgPz9cbiAgICAgICAgY3RhUHJvcHM/LnJlcXVpcmVQaG9uZU51bWJlciA/P1xuICAgICAgICBsaXN0UHJvcHM/LnJlcXVpcmVQaG9uZU51bWJlciA/P1xuICAgICAgICB1cGNvbWluZ1dlYmluYXJzUHJvcHM/LnJlcXVpcmVQaG9uZU51bWJlciA/P1xuICAgICAgICBmYWxzZSxcbiAgICAgIHNob3dFbWFpbE9wdEluOlxuICAgICAgICBsZWFkRm9ybVByb3BzPy5zaG93RW1haWxPcHRJbiA/P1xuICAgICAgICBjdGFQcm9wcz8uc2hvd0VtYWlsT3B0SW4gPz9cbiAgICAgICAgbGlzdFByb3BzPy5zaG93RW1haWxPcHRJbiA/P1xuICAgICAgICB1cGNvbWluZ1dlYmluYXJzUHJvcHM/LnNob3dFbWFpbE9wdEluID8/XG4gICAgICAgIGZhbHNlLFxuICAgICAgc2hvd1Ntc09wdEluOlxuICAgICAgICBsZWFkRm9ybVByb3BzPy5zaG93U21zT3B0SW4gPz9cbiAgICAgICAgY3RhUHJvcHM/LnNob3dTbXNPcHRJbiA/P1xuICAgICAgICBsaXN0UHJvcHM/LnNob3dTbXNPcHRJbiA/P1xuICAgICAgICB1cGNvbWluZ1dlYmluYXJzUHJvcHM/LnNob3dTbXNPcHRJbiA/P1xuICAgICAgICBmYWxzZSxcbiAgICAgIGJ1dHRvblF1YW50aXR5OiBjdGFQcm9wcz8uYnV0dG9uUXVhbnRpdHkgPz8gMixcbiAgICAgIGJ1dHRvbkFwcGVhcmFuY2U6IGN0YVByb3BzPy5idXR0b25BcHBlYXJhbmNlID8/ICdwcmltYXJ5JyxcbiAgICAgIG9uRGFya0NhbnZhczogY3RhUHJvcHM/Lm9uRGFya0NhbnZhcyA/PyBmYWxzZSxcbiAgICAgIHNob3dSZWNvcmRpbmc6XG4gICAgICAgIGN0YVByb3BzPy5zaG93UmVjb3JkaW5nID8/IGxpc3RQcm9wcz8uc2hvd1JlY29yZGluZyA/PyBmYWxzZSxcbiAgICAgIGZpbHRlck9wdGlvbnM6IGN0YVByb3BzPy5maWx0ZXJPcHRpb25zID8/ICcnXG4gICAgfTtcbiAgfSlcbik7XG4iLCJpbXBvcnQgeyBIVE1MQXR0cmlidXRlcywgTXV0YWJsZVJlZk9iamVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSRFNEaWFsb2cgZnJvbSAnQHJhbXNleS1kZXNpZ24tc3lzdGVtL2RpYWxvZyc7XG5cbmNvbnN0IERJQUxPR19QQURESU5HID0gWydzbScsICdtZCcsICdsZycsICdub25lJ10gYXMgY29uc3Q7XG50eXBlIFBhZGRpbmcgPSAodHlwZW9mIERJQUxPR19QQURESU5HKVtudW1iZXJdO1xuXG5jb25zdCBESUFMT0dfV0lEVEggPSBbJ3NtJywgJ21kJywgJ2xnJ10gYXMgY29uc3Q7XG50eXBlIFdpZHRoID0gKHR5cGVvZiBESUFMT0dfV0lEVEgpW251bWJlcl07XG5cbnR5cGUgRGlhbG9nUHJvcHMgPSBIVE1MQXR0cmlidXRlczxIVE1MRGl2RWxlbWVudD4gJiB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIG9uQ2xvc2U6ICgpID0+IHZvaWQ7XG4gIG9wZW4/OiBib29sZWFuO1xuICBwYWRkaW5nPzogUGFkZGluZztcbiAgcG9ydGFsTW91bnQ/OiBIVE1MRWxlbWVudDtcbiAgdHJpZ2dlclJlZj86IE11dGFibGVSZWZPYmplY3Q8YW55PjtcbiAgd2lkdGg/OiBXaWR0aDtcbn07XG5cbi8qKlxuICpcbiAqIFJEUyBEaWFsb2cgY29tcG9uZW50IHJlcXVpcmVzIGEgdHJpZ2dlclJlZiBwcm9wIHRvIGJlIHBhc3NlZCBpbi5cbiAqIFRoaXMgaXMgYSB3cmFwcGVyIHRvIG1ha2UgdGhlIHRyaWdnZXJSZWYgb3B0aW9iYWwuXG4gKi9cbmZ1bmN0aW9uIERpYWxvZyh7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIG9uQ2xvc2UsXG4gIG9wZW4gPSBmYWxzZSxcbiAgcGFkZGluZyA9ICdtZCcsXG4gIHBvcnRhbE1vdW50LFxuICB0cmlnZ2VyUmVmLFxuICB3aWR0aCA9ICdtZCdcbn06IERpYWxvZ1Byb3BzKSB7XG4gIGlmICghb3Blbikge1xuICAgIHJldHVybiBudWxsOyAvLyBEbyBub3QgcmVuZGVyIGFueXRoaW5nIGlmIGBvcGVuYCBpcyBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8UkRTRGlhbG9nXG4gICAgICBkYXRhLXRlc3RpZD1cInJkcy1kaWFsb2dcIlxuICAgICAgb25DbG9zZT17b25DbG9zZX1cbiAgICAgIG9wZW49e29wZW59XG4gICAgICBwYWRkaW5nPXtwYWRkaW5nfVxuICAgICAgcG9ydGFsTW91bnQ9e3BvcnRhbE1vdW50fVxuICAgICAgd2lkdGg9e3dpZHRofVxuICAgICAgdHJpZ2dlclJlZj17dHJpZ2dlclJlZiB8fCAobnVsbCBhcyB1bmtub3duIGFzIFJlYWN0LlJlZk9iamVjdDxhbnk+KX1cbiAgICAgIGNsYXNzTmFtZT17YFsmXy5yZHMtRGlhbG9nLW92ZXJsYXldOmJnLXdoaXRlIFsmXy5yZHMtRGlhbG9nLW92ZXJsYXldOmJnLW9wYWNpdHktMzAgWyZfLnJkcy1EaWFsb2ctb3ZlcmxheV06YmFja2Ryb3AtYmx1ci1bOHB4XSAke1xuICAgICAgICBjbGFzc05hbWUgPz8gJydcbiAgICAgIH1gfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L1JEU0RpYWxvZz5cbiAgKTtcbn1cblxuRGlhbG9nLlRpdGxlID0gUkRTRGlhbG9nLlRpdGxlO1xuRGlhbG9nLkRlc2NyaXB0aW9uID0gUkRTRGlhbG9nLkRlc2NyaXB0aW9uO1xuXG5leHBvcnQgZGVmYXVsdCBEaWFsb2c7XG4iLCIvLyBSRFNcbmltcG9ydCBIZWFkaW5nIGZyb20gJ0ByYW1zZXktZGVzaWduLXN5c3RlbS9oZWFkaW5nJztcblxuLy8gQ29tcG9uZW50c1xuaW1wb3J0IERpYWxvZyBmcm9tICcuLi8uLi9zaGFyZWQvY29tcG9uZW50cy9EaWFsb2cnO1xuaW1wb3J0IFdlYmluYXJMZWFkRm9ybSBmcm9tICcuLi9XZWJpbmFyTGVhZEZvcm0vV2ViaW5hckxlYWRGb3JtJztcblxuaW50ZXJmYWNlIFdlYmluYXJEaWFsb2dQcm9wcyB7XG4gIHJlYWRvbmx5IGlzT3BlbjogYm9vbGVhbjtcbiAgcmVhZG9ubHkgd2ViaW5hcklkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSB3ZWJpbmFyVG9waWM6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IHdlYmluYXJOYW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgcmVhZG9ubHkgd2ViaW5hclRpbWU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IG9uQ2xvc2U6ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFdlYmluYXJEaWFsb2coe1xuICBvbkNsb3NlLFxuICBpc09wZW4sXG4gIHdlYmluYXJJZCxcbiAgd2ViaW5hck5hbWUsXG4gIHdlYmluYXJUb3BpYyxcbiAgd2ViaW5hclRpbWVcbn06IFdlYmluYXJEaWFsb2dQcm9wcykge1xuICBjb25zdCBoYW5kbGVDbG9zZSA9ICgpID0+IHtcbiAgICBvbkNsb3NlKCk7XG4gIH07XG5cbiAgY29uc3QgaXNSZWNvcmRpbmcgPSAhd2ViaW5hcklkO1xuXG4gIGNvbnN0IGRpYWxvZ1RpdGxlID0gd2ViaW5hck5hbWUgPz8gd2ViaW5hclRvcGljO1xuXG4gIHJldHVybiAoXG4gICAgPERpYWxvZ1xuICAgICAgb3Blbj17aXNPcGVufVxuICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2V9XG4gICAgICB3aWR0aD1cIm1kXCJcbiAgICAgIGNsYXNzTmFtZT1cIlsmXy5yZHMtRGlhbG9nLWNvbnRlbnRdOm1heC13LVs2MDBweF0gWyZfLnJkcy1EaWFsb2ctY29udGVudF06cC0zIFsmXy5yZHMtRGlhbG9nLWNvbnRlbnRdOm1kOnAtNVwiXG4gICAgPlxuICAgICAgPGRpdiBkYXRhLXRlc3RpZD1cIndlYmluYXItZGlhbG9nXCIgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgPEhlYWRpbmdcbiAgICAgICAgICBsZXZlbD1cIjJcIlxuICAgICAgICAgIHNpemU9XCJtZWRpdW1cIlxuICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtYmx1ZS04MCB0ZXh0LWNlbnRlciAhbWItMlwiXG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJkaWFsb2ctdGl0bGVcIlxuICAgICAgICA+XG4gICAgICAgICAge2RpYWxvZ1RpdGxlfVxuICAgICAgICAgIHtpc1JlY29yZGluZyA/IChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAgICA8c3Bhbj5SZWNvcmRpbmc8L3NwYW4+XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICB7d2ViaW5hclRpbWV9XG4gICAgICAgIDwvSGVhZGluZz5cbiAgICAgICAgPFdlYmluYXJMZWFkRm9ybSB3ZWJpbmFySWQ9e3dlYmluYXJJZH0gd2ViaW5hclRvcGljPXt3ZWJpbmFyVG9waWN9IC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L0RpYWxvZz5cbiAgKTtcbn1cbiIsImltcG9ydCB7IGZvcm1hdCwgdG9ab25lZFRpbWUgfSBmcm9tICdkYXRlLWZucy10eic7XG5cbmNvbnN0IGZvcm1hdERhdGUgPSAoZGF0ZVN0cmluZzogc3RyaW5nLCB0aW1lWm9uZTogc3RyaW5nKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGRhdGVTdHJpbmcpO1xuICAgIGNvbnN0IHpvbmVkRGF0ZSA9IHRvWm9uZWRUaW1lKGRhdGUsIHRpbWVab25lKTtcblxuICAgIGNvbnN0IGZvcm1hdERhdGUgPSBmb3JtYXQoem9uZWREYXRlLCAnTU1NIGQsIGggYWEgeicsIHsgdGltZVpvbmUgfSk7XG5cbiAgICAvLyBNYW51YWxseSByZW1vdmUgRCBmcm9tIENEVFxuICAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSBmb3JtYXREYXRlLnJlcGxhY2UoL1xcYkNbRFNdVFxcYi8sICdDVCcpO1xuXG4gICAgcmV0dXJuIGZvcm1hdHRlZERhdGU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcignRXJyb3IgZm9ybWF0dGluZyBkYXRlOicsIGVycm9yKTtcbiAgICByZXR1cm4gJ0ludmFsaWQgRGF0ZSc7XG4gIH1cbn07XG5cbmNvbnN0IGZvcm1hdFNob3J0RGF0ZSA9IChkYXRlU3RyaW5nOiBzdHJpbmcpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoZGF0ZVN0cmluZyk7XG5cbiAgICByZXR1cm4gZm9ybWF0KGRhdGUsICdNTU0gZCcpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZvcm1hdHRpbmcgZGF0ZTonLCBlcnJvcik7XG4gICAgcmV0dXJuICdJbnZhbGlkIERhdGUnO1xuICB9XG59O1xuXG5leHBvcnQgeyBmb3JtYXREYXRlLCBmb3JtYXRTaG9ydERhdGUgfTtcbiIsImltcG9ydCB7IHVzZVF1ZXJ5IH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5JztcbmltcG9ydCB7IHVzZVNldEF0b20gfSBmcm9tICdqb3RhaSc7XG5pbXBvcnQgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBhcHBsaWNhdGlvbkNvbmZpZyB9IGZyb20gJy4uLy4uL3NoYXJlZC9hcHBsaWNhdGlvbic7XG5pbXBvcnQgeyBQQVRIUyB9IGZyb20gJy4uLy4uL3NoYXJlZC91dGlscy9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgd2ViaW5hcnNBdG9tLFxuICB3ZWJpbmFyc0xvYWRpbmdBdG9tLFxuICB3ZWJpbmFyc0Vycm9yQXRvbVxufSBmcm9tICcuLi8uLi9zaGFyZWQvc3RvcmVzL3dlYmluYXJBdG9tcyc7XG5pbXBvcnQgdHlwZSB7IFdlYmluYXIgfSBmcm9tICcuLi8uLi9zaGFyZWQvdHlwZXMvd2ViaW5hclR5cGVzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlV2ViaW5hcnMoKSB7XG4gIGNvbnN0IHNldFdlYmluYXJzID0gdXNlU2V0QXRvbSh3ZWJpbmFyc0F0b20pO1xuICBjb25zdCBzZXRMb2FkaW5nID0gdXNlU2V0QXRvbSh3ZWJpbmFyc0xvYWRpbmdBdG9tKTtcbiAgY29uc3Qgc2V0RXJyb3IgPSB1c2VTZXRBdG9tKHdlYmluYXJzRXJyb3JBdG9tKTtcblxuICBjb25zdCB1cGNvbWluZ1dlYmluYXJzID0gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBbJ3dlYmluYXJzJ10sXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8V2ViaW5hcltdPiA9PiB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFxuICAgICAgICBgJHthcHBsaWNhdGlvbkNvbmZpZy5tYWdub2xpYUZvcm1zV2ViVXJsfSR7UEFUSFMuQVBJLlVQQ09NSU5HX1dFQklOQVJTfWAsXG4gICAgICAgIHtcbiAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggd2ViaW5hcnMnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbiAgICB9LFxuICAgIHN0YWxlVGltZTogNSAqIDYwICogMTAwMCwgLy8gNSBtaW51dGVzXG4gICAgZ2NUaW1lOiAxMCAqIDYwICogMTAwMCAvLyAxMCBtaW51dGVzXG4gIH0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0V2ViaW5hcnModXBjb21pbmdXZWJpbmFycy5kYXRhIHx8IFtdKTtcbiAgICBzZXRMb2FkaW5nKHVwY29taW5nV2ViaW5hcnMuaXNMb2FkaW5nKTtcbiAgICBzZXRFcnJvcih1cGNvbWluZ1dlYmluYXJzLmVycm9yKTtcbiAgfSwgW1xuICAgIHVwY29taW5nV2ViaW5hcnMuZGF0YSxcbiAgICB1cGNvbWluZ1dlYmluYXJzLmlzTG9hZGluZyxcbiAgICB1cGNvbWluZ1dlYmluYXJzLmVycm9yLFxuICAgIHNldFdlYmluYXJzLFxuICAgIHNldExvYWRpbmcsXG4gICAgc2V0RXJyb3JcbiAgXSk7XG5cbiAgcmV0dXJuIHVwY29taW5nV2ViaW5hcnM7XG59XG4iLCJpbXBvcnQgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlQXRvbSwgdXNlQXRvbVZhbHVlIH0gZnJvbSAnam90YWknO1xuXG4vLyBDb21wb25lbnRzXG5pbXBvcnQgQnV0dG9uIGZyb20gJ0ByYW1zZXktZGVzaWduLXN5c3RlbS9idXR0b24nO1xuaW1wb3J0IFdlYmluYXJEaWFsb2cgZnJvbSAnLi4vVXBjb21pbmdXZWJpbmFyTGlzdC9XZWJpbmFyRGlhbG9nJztcblxuLy8gVXRpbHNcbmltcG9ydCB7IGZvcm1hdERhdGUgfSBmcm9tICcuLi8uLi9zaGFyZWQvdXRpbHMvZm9ybWF0RGF0ZSc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcblxuLy8gSG9va3NcbmltcG9ydCB1c2VXZWJpbmFycyBmcm9tICcuLi8uLi9zaGFyZWQvaG9va3MvdXNlV2ViaW5hcnMnO1xuXG4vLyBBdG9tc1xuaW1wb3J0IHtcbiAgd2ViaW5hcnNBdG9tLFxuICB3ZWJpbmFyc0xvYWRpbmdBdG9tLFxuICB3ZWJpbmFyc0Vycm9yQXRvbSxcbiAgd2ViaW5hckNUQURpYWxvZ1Byb3BzQXRvbVxufSBmcm9tICcuLi8uLi9zaGFyZWQvc3RvcmVzL3dlYmluYXJBdG9tcyc7XG5cbmZ1bmN0aW9uIFdlYmluYXJQYWdlQ1RBKCkge1xuICBjb25zdCB7IHJlZmV0Y2ggfSA9IHVzZVdlYmluYXJzKCk7XG5cbiAgY29uc3Qgd2ViaW5hcnMgPSB1c2VBdG9tVmFsdWUod2ViaW5hcnNBdG9tKTtcbiAgY29uc3QgbG9hZGluZyA9IHVzZUF0b21WYWx1ZSh3ZWJpbmFyc0xvYWRpbmdBdG9tKTtcbiAgY29uc3QgZXJyb3IgPSB1c2VBdG9tVmFsdWUod2ViaW5hcnNFcnJvckF0b20pO1xuXG4gIGNvbnN0IFtjdGFEaWFsb2dQcm9wcywgc2V0Q1RBRGlhbG9nUHJvcHNdID0gdXNlQXRvbShcbiAgICB3ZWJpbmFyQ1RBRGlhbG9nUHJvcHNBdG9tXG4gICk7XG5cbiAgY29uc3Qgd2ViaW5hclRpdGxlID1cbiAgICBjdGFEaWFsb2dQcm9wcz8ud2ViaW5hck5hbWUgfHwgY3RhRGlhbG9nUHJvcHM/LmZpbHRlck9wdGlvbnM7XG4gIGNvbnN0IGJ1dHRvblF1YW50aXR5ID0gY3RhRGlhbG9nUHJvcHM/LmJ1dHRvblF1YW50aXR5ID8/IDI7XG4gIGNvbnN0IGJ1dHRvbkFwcGVhcmFuY2UgPSBjdGFEaWFsb2dQcm9wcz8uYnV0dG9uQXBwZWFyYW5jZSA/PyAncHJpbWFyeSc7XG4gIGNvbnN0IG9uRGFya0NhbnZhcyA9IGN0YURpYWxvZ1Byb3BzPy5vbkRhcmtDYW52YXMgPz8gZmFsc2U7XG4gIGNvbnN0IGJ1dHRvblRleHQgPSBjdGFEaWFsb2dQcm9wcz8uYnV0dG9uVGV4dCA/PyAnV2F0Y2ggUmVjb3JkaW5nJztcbiAgY29uc3Qgc2hvd1JlY29yZGluZyA9IGN0YURpYWxvZ1Byb3BzPy5zaG93UmVjb3JkaW5nID8/IGZhbHNlO1xuICBjb25zdCBmaWx0ZXJUb3BpYyA9IGN0YURpYWxvZ1Byb3BzPy5maWx0ZXJPcHRpb25zID8/IG51bGw7XG5cbiAgY29uc3QgW2RpYWxvZ09wZW4sIHNldERpYWxvZ09wZW5dID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuICBjb25zdCBbc2VsZWN0ZWRXZWJpbmFyLCBzZXRTZWxlY3RlZFdlYmluYXJdID0gdXNlU3RhdGU8e1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbDtcbiAgICB0b3BpYzogc3RyaW5nIHwgbnVsbDtcbiAgICB0aW1lOiBzdHJpbmcgfCBudWxsO1xuICB9Pih7IGlkOiAnJywgbmFtZTogbnVsbCwgdG9waWM6IG51bGwsIHRpbWU6IG51bGwgfSk7XG5cbiAgY29uc3QgZmlsdGVyZWRXZWJpbmFycyA9IGZpbHRlclRvcGljXG4gICAgPyB3ZWJpbmFycy5maWx0ZXIoXG4gICAgICAgICh3ZWJpbmFyKSA9PiB3ZWJpbmFyLnRvcGljLnRvTG93ZXJDYXNlKCkgPT09IGZpbHRlclRvcGljLnRvTG93ZXJDYXNlKClcbiAgICAgIClcbiAgICA6IHdlYmluYXJzO1xuXG4gIGNvbnN0IG9wZW5EaWFsb2cgPSAoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsLFxuICAgIHRvcGljOiBzdHJpbmcgfCBudWxsLFxuICAgIHRpbWU6IHN0cmluZyB8IG51bGxcbiAgKSA9PiB7XG4gICAgc2V0U2VsZWN0ZWRXZWJpbmFyKHsgaWQ6IGlkIHx8ICcnLCBuYW1lLCB0b3BpYywgdGltZSB9KTtcbiAgICBzZXREaWFsb2dPcGVuKHRydWUpO1xuICB9O1xuXG4gIGNvbnN0IGNsb3NlRGlhbG9nID0gKCkgPT4ge1xuICAgIHNldERpYWxvZ09wZW4oZmFsc2UpO1xuICB9O1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFzTm9BdG9tV2ViaW5hcnMgPSAhd2ViaW5hcnMgfHwgd2ViaW5hcnMubGVuZ3RoID09PSAwO1xuXG4gICAgaWYgKGhhc05vQXRvbVdlYmluYXJzICYmICFsb2FkaW5nICYmICFlcnJvcikge1xuICAgICAgY29uc29sZS5sb2coJ1RyaWdnZXJpbmcgYXV0b21hdGljIHJlZmV0Y2guLi4nKTtcbiAgICAgIHJlZmV0Y2goKTtcbiAgICB9XG4gIH0sIFt3ZWJpbmFycywgbG9hZGluZywgZXJyb3JdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh3aW5kb3cuX1dFQklOQVJfUEFHRV9DVEFfUkVRVUVTVCAmJiAhY3RhRGlhbG9nUHJvcHMpIHtcbiAgICAgIHNldENUQURpYWxvZ1Byb3BzKHdpbmRvdy5fV0VCSU5BUl9QQUdFX0NUQV9SRVFVRVNUKTtcbiAgICB9XG4gIH0sIFtjdGFEaWFsb2dQcm9wcywgc2V0Q1RBRGlhbG9nUHJvcHNdKTtcblxuICBpZiAobG9hZGluZykge1xuICAgIHJldHVybiA8ZGl2PkxvYWRpbmcuLi48L2Rpdj47XG4gIH1cblxuICBpZiAoZXJyb3IpIHtcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJtYi00IHRleHQtY2VudGVyIHRleHQtcmVkLTUwMFwiPntlcnJvci5tZXNzYWdlfTwvZGl2PjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxkaXZcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJ3ZWJpbmFyLWJ1dHRvbi1ncmlkXCJcbiAgICAgICAgY2xhc3NOYW1lPXtgbXgtYXV0byBncmlkIGdhcC0xIG1heC13LVsxMi41cmVtXSBncmlkLWNvbHMtMSAke2NsYXNzTmFtZXMoYnV0dG9uUXVhbnRpdHkgPiAzID8gJ21kOmdyaWQtY29scy0zIHNtOm1heC13LXhsJyA6ICdtZDpncmlkLWNvbHMtMiBzbTptYXgtdy1tZCcpfWB9XG4gICAgICA+XG4gICAgICAgIHtmaWx0ZXJlZFdlYmluYXJzLmxlbmd0aCA+IDAgPyAoXG4gICAgICAgICAgZmlsdGVyZWRXZWJpbmFycy5zbGljZSgwLCBidXR0b25RdWFudGl0eSkubWFwKCh3ZWJpbmFyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWREYXRlID0gd2ViaW5hci5zdGFydF90aW1lXG4gICAgICAgICAgICAgID8gZm9ybWF0RGF0ZSh3ZWJpbmFyLnN0YXJ0X3RpbWUsICdBbWVyaWNhL0NoaWNhZ28nKVxuICAgICAgICAgICAgICA6ICdJbnZhbGlkIERhdGUnO1xuXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAga2V5PXt3ZWJpbmFyLmlkfVxuICAgICAgICAgICAgICAgIGlzT25EYXJrQ2FudmFzPXtvbkRhcmtDYW52YXN9XG4gICAgICAgICAgICAgICAgc2l6ZT1cImxhcmdlXCJcbiAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPXtidXR0b25BcHBlYXJhbmNlfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIG9wZW5EaWFsb2coXG4gICAgICAgICAgICAgICAgICAgIHdlYmluYXIuaWQsXG4gICAgICAgICAgICAgICAgICAgIHdlYmluYXJUaXRsZSxcbiAgICAgICAgICAgICAgICAgICAgd2ViaW5hci50b3BpYyxcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkRGF0ZVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtmb3JtYXR0ZWREYXRlID09PSAnSW52YWxpZCBEYXRlJ31cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtmb3JtYXR0ZWREYXRlfVxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8QnV0dG9uIHNpemU9XCJsYXJnZVwiIGRpc2FibGVkPlxuICAgICAgICAgICAgQ29taW5nIFNvb25cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgKX1cbiAgICAgICAge3Nob3dSZWNvcmRpbmcgJiYgKFxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHNpemU9XCJsYXJnZVwiXG4gICAgICAgICAgICBjbGFzc05hbWU9e2B3aGl0ZXNwYWNlLW5vd3JhcCBtZDp3aGl0ZXNwYWNlLWJyZWFrLXNwYWNlcyBsZzp3aGl0ZXNwYWNlLW5vd3JhcGB9XG4gICAgICAgICAgICBpc09uRGFya0NhbnZhcz17b25EYXJrQ2FudmFzfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICBvcGVuRGlhbG9nKCcnLCB3ZWJpbmFyVGl0bGUsIGZpbHRlclRvcGljLCAnJyk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtidXR0b25UZXh0IHx8ICdXYXRjaCBSZWNvcmRpbmcnfVxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICA8V2ViaW5hckRpYWxvZ1xuICAgICAgICBpc09wZW49e2RpYWxvZ09wZW59XG4gICAgICAgIG9uQ2xvc2U9e2Nsb3NlRGlhbG9nfVxuICAgICAgICB3ZWJpbmFySWQ9e3NlbGVjdGVkV2ViaW5hci5pZH1cbiAgICAgICAgd2ViaW5hck5hbWU9e3dlYmluYXJUaXRsZX1cbiAgICAgICAgd2ViaW5hclRvcGljPXtzZWxlY3RlZFdlYmluYXIudG9waWN9XG4gICAgICAgIHdlYmluYXJUaW1lPXtzZWxlY3RlZFdlYmluYXIudGltZX1cbiAgICAgIC8+XG4gICAgPC8+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFdlYmluYXJQYWdlQ1RBO1xuIiwiaW1wb3J0IHsgY3JlYXRlUm9vdCB9IGZyb20gJ3JlYWN0LWRvbS9jbGllbnQnO1xuaW1wb3J0ICcuLi8uLi8uLi9jc3MvZ2xvYmFsLmNzcyc7XG5pbXBvcnQgV2ViaW5hclBhZ2VDVEEgZnJvbSAnLi9XZWJpbmFyUGFnZUNUQSc7XG5pbXBvcnQgeyBRdWVyeUNsaWVudFByb3ZpZGVyIH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5JztcbmltcG9ydCB7IHNoYXJlZFF1ZXJ5Q2xpZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2NvbmZpZy9zaGFyZWRRdWVyeUNsaWVudCc7XG5cbmNvbnN0IHJvb3RFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dlYmluYXItcGFnZS1jdGEtcm9vdCcpO1xuY29uc3Qgcm9vdCA9IGNyZWF0ZVJvb3Qocm9vdEVsZW1lbnQhKTtcblxucm9vdC5yZW5kZXIoXG4gIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17c2hhcmVkUXVlcnlDbGllbnR9PlxuICAgIDxXZWJpbmFyUGFnZUNUQSAvPlxuICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LnByb2R1Y3Rpb24uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4vLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuX193ZWJwYWNrX3JlcXVpcmVfXy5tID0gX193ZWJwYWNrX21vZHVsZXNfXztcblxuIiwidmFyIGRlZmVycmVkID0gW107XG5fX3dlYnBhY2tfcmVxdWlyZV9fLk8gPSAocmVzdWx0LCBjaHVua0lkcywgZm4sIHByaW9yaXR5KSA9PiB7XG5cdGlmKGNodW5rSWRzKSB7XG5cdFx0cHJpb3JpdHkgPSBwcmlvcml0eSB8fCAwO1xuXHRcdGZvcih2YXIgaSA9IGRlZmVycmVkLmxlbmd0aDsgaSA+IDAgJiYgZGVmZXJyZWRbaSAtIDFdWzJdID4gcHJpb3JpdHk7IGktLSkgZGVmZXJyZWRbaV0gPSBkZWZlcnJlZFtpIC0gMV07XG5cdFx0ZGVmZXJyZWRbaV0gPSBbY2h1bmtJZHMsIGZuLCBwcmlvcml0eV07XG5cdFx0cmV0dXJuO1xuXHR9XG5cdHZhciBub3RGdWxmaWxsZWQgPSBJbmZpbml0eTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBkZWZlcnJlZC5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBbY2h1bmtJZHMsIGZuLCBwcmlvcml0eV0gPSBkZWZlcnJlZFtpXTtcblx0XHR2YXIgZnVsZmlsbGVkID0gdHJ1ZTtcblx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGNodW5rSWRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRpZiAoKHByaW9yaXR5ICYgMSA9PT0gMCB8fCBub3RGdWxmaWxsZWQgPj0gcHJpb3JpdHkpICYmIE9iamVjdC5rZXlzKF9fd2VicGFja19yZXF1aXJlX18uTykuZXZlcnkoKGtleSkgPT4gKF9fd2VicGFja19yZXF1aXJlX18uT1trZXldKGNodW5rSWRzW2pdKSkpKSB7XG5cdFx0XHRcdGNodW5rSWRzLnNwbGljZShqLS0sIDEpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZnVsZmlsbGVkID0gZmFsc2U7XG5cdFx0XHRcdGlmKHByaW9yaXR5IDwgbm90RnVsZmlsbGVkKSBub3RGdWxmaWxsZWQgPSBwcmlvcml0eTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYoZnVsZmlsbGVkKSB7XG5cdFx0XHRkZWZlcnJlZC5zcGxpY2UoaS0tLCAxKVxuXHRcdFx0dmFyIHIgPSBmbigpO1xuXHRcdFx0aWYgKHIgIT09IHVuZGVmaW5lZCkgcmVzdWx0ID0gcjtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07IiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gbm8gYmFzZVVSSVxuXG4vLyBvYmplY3QgdG8gc3RvcmUgbG9hZGVkIGFuZCBsb2FkaW5nIGNodW5rc1xuLy8gdW5kZWZpbmVkID0gY2h1bmsgbm90IGxvYWRlZCwgbnVsbCA9IGNodW5rIHByZWxvYWRlZC9wcmVmZXRjaGVkXG4vLyBbcmVzb2x2ZSwgcmVqZWN0LCBQcm9taXNlXSA9IGNodW5rIGxvYWRpbmcsIDAgPSBjaHVuayBsb2FkZWRcbnZhciBpbnN0YWxsZWRDaHVua3MgPSB7XG5cdDExMjogMCxcblx0ODg2OiAwXG59O1xuXG4vLyBubyBjaHVuayBvbiBkZW1hbmQgbG9hZGluZ1xuXG4vLyBubyBwcmVmZXRjaGluZ1xuXG4vLyBubyBwcmVsb2FkZWRcblxuLy8gbm8gSE1SXG5cbi8vIG5vIEhNUiBtYW5pZmVzdFxuXG5fX3dlYnBhY2tfcmVxdWlyZV9fLk8uaiA9IChjaHVua0lkKSA9PiAoaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdID09PSAwKTtcblxuLy8gaW5zdGFsbCBhIEpTT05QIGNhbGxiYWNrIGZvciBjaHVuayBsb2FkaW5nXG52YXIgd2VicGFja0pzb25wQ2FsbGJhY2sgPSAocGFyZW50Q2h1bmtMb2FkaW5nRnVuY3Rpb24sIGRhdGEpID0+IHtcblx0dmFyIFtjaHVua0lkcywgbW9yZU1vZHVsZXMsIHJ1bnRpbWVdID0gZGF0YTtcblx0Ly8gYWRkIFwibW9yZU1vZHVsZXNcIiB0byB0aGUgbW9kdWxlcyBvYmplY3QsXG5cdC8vIHRoZW4gZmxhZyBhbGwgXCJjaHVua0lkc1wiIGFzIGxvYWRlZCBhbmQgZmlyZSBjYWxsYmFja1xuXHR2YXIgbW9kdWxlSWQsIGNodW5rSWQsIGkgPSAwO1xuXHRpZihjaHVua0lkcy5zb21lKChpZCkgPT4gKGluc3RhbGxlZENodW5rc1tpZF0gIT09IDApKSkge1xuXHRcdGZvcihtb2R1bGVJZCBpbiBtb3JlTW9kdWxlcykge1xuXHRcdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1vcmVNb2R1bGVzLCBtb2R1bGVJZCkpIHtcblx0XHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tW21vZHVsZUlkXSA9IG1vcmVNb2R1bGVzW21vZHVsZUlkXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYocnVudGltZSkgdmFyIHJlc3VsdCA9IHJ1bnRpbWUoX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cdH1cblx0aWYocGFyZW50Q2h1bmtMb2FkaW5nRnVuY3Rpb24pIHBhcmVudENodW5rTG9hZGluZ0Z1bmN0aW9uKGRhdGEpO1xuXHRmb3IoO2kgPCBjaHVua0lkcy5sZW5ndGg7IGkrKykge1xuXHRcdGNodW5rSWQgPSBjaHVua0lkc1tpXTtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oaW5zdGFsbGVkQ2h1bmtzLCBjaHVua0lkKSAmJiBpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0pIHtcblx0XHRcdGluc3RhbGxlZENodW5rc1tjaHVua0lkXVswXSgpO1xuXHRcdH1cblx0XHRpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0gPSAwO1xuXHR9XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fLk8ocmVzdWx0KTtcbn1cblxudmFyIGNodW5rTG9hZGluZ0dsb2JhbCA9IHNlbGZbXCJ3ZWJwYWNrQ2h1bmtyYW1zZXlfcGx1c19mb3Jtc1wiXSA9IHNlbGZbXCJ3ZWJwYWNrQ2h1bmtyYW1zZXlfcGx1c19mb3Jtc1wiXSB8fCBbXTtcbmNodW5rTG9hZGluZ0dsb2JhbC5mb3JFYWNoKHdlYnBhY2tKc29ucENhbGxiYWNrLmJpbmQobnVsbCwgMCkpO1xuY2h1bmtMb2FkaW5nR2xvYmFsLnB1c2ggPSB3ZWJwYWNrSnNvbnBDYWxsYmFjay5iaW5kKG51bGwsIGNodW5rTG9hZGluZ0dsb2JhbC5wdXNoLmJpbmQoY2h1bmtMb2FkaW5nR2xvYmFsKSk7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5uYyA9IHVuZGVmaW5lZDsiLCIiLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGRlcGVuZHMgb24gb3RoZXIgbG9hZGVkIGNodW5rcyBhbmQgZXhlY3V0aW9uIG5lZWQgdG8gYmUgZGVsYXllZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fLk8odW5kZWZpbmVkLCBbMjc5LDc0OSw0MjgsMjY2LDk1MCw0NjgsNzgwLDg4NiwzNzddLCAoKSA9PiAoX193ZWJwYWNrX3JlcXVpcmVfXyg0NTA2KSkpXG5fX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXy5PKF9fd2VicGFja19leHBvcnRzX18pO1xuIiwiIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==