genassist-chat-react 1.0.30 → 1.0.31

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.
@@ -388,7 +388,7 @@ export var GenAgentChat = function (_a) {
388
388
  }
389
389
  _a.label = 1;
390
390
  case 1:
391
- _a.trys.push([1, 3, , 4]);
391
+ _a.trys.push([1, 3, 4, 5]);
392
392
  extraMetadata = {};
393
393
  if (selectedFaqQuery) {
394
394
  extraMetadata.faq_query = selectedFaqQuery;
@@ -401,11 +401,15 @@ export var GenAgentChat = function (_a) {
401
401
  case 2:
402
402
  // send message with attachments
403
403
  _a.sent();
404
- return [3 /*break*/, 4];
404
+ return [3 /*break*/, 5];
405
405
  case 3:
406
406
  error_1 = _a.sent();
407
- return [3 /*break*/, 4];
408
- case 4: return [2 /*return*/];
407
+ return [3 /*break*/, 5];
408
+ case 4:
409
+ // Refocus the input field
410
+ setTimeout(function () { var _a; return (_a = textAreaRef.current) === null || _a === void 0 ? void 0 : _a.focus(); }, 0);
411
+ return [7 /*endfinally*/];
412
+ case 5: return [2 /*return*/];
409
413
  }
410
414
  });
411
415
  }); };
@@ -920,6 +924,7 @@ export var GenAgentChat = function (_a) {
920
924
  color: '#757575',
921
925
  padding: 0,
922
926
  };
927
+ var isSendDisabled = (inputValue.trim() === '' && attachments.length === 0) || isAgentTyping;
923
928
  var sendButtonStyle = {
924
929
  backgroundColor: primaryColor,
925
930
  color: '#ffffff',
@@ -935,6 +940,11 @@ export var GenAgentChat = function (_a) {
935
940
  flexShrink: 0,
936
941
  boxShadow: '0 1px 3px rgba(0, 0, 0, 0.08)',
937
942
  };
943
+ var sendButtonDisabledStyle = {
944
+ backgroundColor: '#d1d5db',
945
+ cursor: 'not-allowed',
946
+ opacity: 0.8,
947
+ };
938
948
  var rightActionContainerStyle = {
939
949
  position: 'absolute',
940
950
  right: '4px',
@@ -1118,7 +1128,7 @@ export var GenAgentChat = function (_a) {
1118
1128
  }
1119
1129
  return function (children) { return (_jsxs(GoogleReCaptchaProvider, { reCaptchaKey: reCaptchaKey || '', children: [_jsx(GoogleReCaptcha, { action: "genassist_chat", onVerify: handleReCaptchaVerify, refreshReCaptcha: false }), _jsx(_Fragment, { children: children })] })); };
1120
1130
  }, [reCaptchaKey, handleReCaptchaVerify]);
1121
- var renderChatComponent = function () { return (_jsxs("div", { style: containerStyle, "data-genassist-root": "true", children: [_jsx("style", { children: "\n @keyframes blink { 0% { opacity: 0.2; } 20% { opacity: 1; } 100% { opacity: 0.2; } }\n /* Hide scrollbars for the expanding textarea but keep scrolling */\n .ga-textarea-nosb {\n scrollbar-width: none;\n -ms-overflow-style: none;\n max-width: 100%;\n box-sizing: border-box;\n }\n .ga-textarea-nosb::-webkit-scrollbar { width: 0; height: 0; }\n /* Prevent zoom on mobile - ensure minimum 16px font size */\n @media (max-width: 768px) {\n .ga-textarea-nosb {\n font-size: 16px !important;\n }\n }\n /* Backlight sweep under content edge (GPU-friendly).\n Wider travel to fully reach both corners. */\n @keyframes ga-backlight-sweep2 { 0% { transform: translateX(-35%); } 100% { transform: translateX(105%); } }\n @keyframes ga-backlight-pulse { 0%,100% { opacity: 0.7; } 50% { opacity: 1; } }\n @keyframes ga-think-change { 0% { opacity: 0; transform: translateY(4px); } 100% { opacity: 1; transform: translateY(0); } }\n /* Hide reCAPTCHA badge */\n /* Ensure reCAPTCHA container is always hidden */\n .grecaptcha-badge {\n display: none !important;\n visibility: hidden !important;\n position: absolute !important;\n width: 0 !important;\n height: 0 !important;\n overflow: hidden !important;\n opacity: 0 !important;\n pointer-events: none !important;\n }\n /* Support for safe area insets - handled via inline styles on input container */\n " }), _jsxs("div", { style: headerStyle, ref: headerRef, children: [_jsxs("div", { style: logoContainerStyle, children: [_jsx("img", { src: (logoUrl === null || logoUrl === void 0 ? void 0 : logoUrl.trim()) || chatLogo, alt: "Logo", style: logoStyle }), _jsxs("div", { style: headerTitleContainerStyle, children: [_jsx("div", { style: headerTitleStyle, children: headerTitle }), _jsx("div", { style: headerSubtitleStyle, children: description !== null && description !== void 0 ? description : t('header.subtitle') })] })] }), _jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '8px' }, children: [_jsx("button", { style: menuButtonStyle, onClick: handleMenuClick, title: t('menu.title'), children: _jsx(MoreVertical, { size: 24, color: "#111111" }) }), mode === 'floating' && (_jsx("button", { style: menuButtonStyle, onClick: function () { return setIsFloatingOpen(false); }, title: "Close chat", children: _jsx(X, { size: 24, color: "#111111" }) }))] })] }), !noColorAnimation && showBacklight && (_jsx("div", { style: {
1131
+ var renderChatComponent = function () { return (_jsxs("div", { style: containerStyle, "data-genassist-root": "true", children: [_jsx("style", { children: "\n @keyframes blink { 0% { opacity: 0.2; } 20% { opacity: 1; } 100% { opacity: 0.2; } }\n /* Hide scrollbars for the expanding textarea but keep scrolling */\n .ga-textarea-nosb {\n scrollbar-width: none;\n -ms-overflow-style: none;\n max-width: 100%;\n box-sizing: border-box;\n }\n .ga-textarea-nosb::-webkit-scrollbar { width: 0; height: 0; }\n /* Disclaimer links color */\n .ga-input-disclaimer a {\n color: #9ca3af !important;\n text-decoration: underline;\n }\n .ga-input-disclaimer a:hover {\n color: #6b7280 !important;\n }\n /* Prevent zoom on mobile - ensure minimum 16px font size */\n @media (max-width: 768px) {\n .ga-textarea-nosb {\n font-size: 16px !important;\n }\n }\n /* Backlight sweep under content edge (GPU-friendly).\n Wider travel to fully reach both corners. */\n @keyframes ga-backlight-sweep2 { 0% { transform: translateX(-35%); } 100% { transform: translateX(105%); } }\n @keyframes ga-backlight-pulse { 0%,100% { opacity: 0.7; } 50% { opacity: 1; } }\n @keyframes ga-think-change { 0% { opacity: 0; transform: translateY(4px); } 100% { opacity: 1; transform: translateY(0); } }\n /* Hide reCAPTCHA badge */\n /* Ensure reCAPTCHA container is always hidden */\n .grecaptcha-badge {\n display: none !important;\n visibility: hidden !important;\n position: absolute !important;\n width: 0 !important;\n height: 0 !important;\n overflow: hidden !important;\n opacity: 0 !important;\n pointer-events: none !important;\n }\n /* Support for safe area insets - handled via inline styles on input container */\n " }), _jsxs("div", { style: headerStyle, ref: headerRef, children: [_jsxs("div", { style: logoContainerStyle, children: [_jsx("img", { src: (logoUrl === null || logoUrl === void 0 ? void 0 : logoUrl.trim()) || chatLogo, alt: "Logo", style: logoStyle }), _jsxs("div", { style: headerTitleContainerStyle, children: [_jsx("div", { style: headerTitleStyle, children: headerTitle }), _jsx("div", { style: headerSubtitleStyle, children: description !== null && description !== void 0 ? description : t('header.subtitle') })] })] }), _jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '8px' }, children: [_jsx("button", { style: menuButtonStyle, onClick: handleMenuClick, title: t('menu.title'), children: _jsx(MoreVertical, { size: 24, color: "#111111" }) }), mode === 'floating' && (_jsx("button", { style: menuButtonStyle, onClick: function () { return setIsFloatingOpen(false); }, title: "Close chat", children: _jsx(X, { size: 24, color: "#111111" }) }))] })] }), !noColorAnimation && showBacklight && (_jsx("div", { style: {
1122
1132
  position: 'absolute',
1123
1133
  left: 0,
1124
1134
  right: 0,
@@ -1249,7 +1259,7 @@ export var GenAgentChat = function (_a) {
1249
1259
  submitMessage();
1250
1260
  }
1251
1261
  }
1252
- }, placeholder: inputPlaceholder, disabled: !conversationId || isFinalized || isAgentTyping, rows: 1 }), _jsx("div", { style: rightActionContainerStyle, children: useAudio && inputValue.trim() === '' && attachments.length === 0 ? (_jsx(VoiceInput, { onTranscription: function (text) { return setInputValue(text); }, onError: handleVoiceError, baseUrl: baseUrl, apiKey: apiKey, theme: theme, disabled: isAgentTyping })) : (_jsx("button", { type: "submit", style: sendButtonStyle, disabled: (inputValue.trim() === '' && attachments.length === 0) || isAgentTyping, children: _jsx(ArrowUp, { size: 18, strokeWidth: 3, color: "#ffffff" }) })) })] }), inputDisclaimer && (_jsx("div", { style: disclaimerStyle, children: inputDisclaimer }))] }) }))] }), _jsx("div", { style: confirmOverlayStyle, children: _jsxs("div", { style: confirmDialogStyle, children: [_jsx("h3", { style: { fontFamily: fontFamily, marginTop: 0 }, children: t('dialog.resetConversation.title') }), _jsx("p", { style: { fontFamily: fontFamily, fontSize: fontSize }, children: t('dialog.resetConversation.message') }), _jsxs("div", { style: confirmButtonsStyle, children: [_jsx("button", { style: __assign(__assign({}, confirmButtonStyle(false)), { color: textColor }), onClick: handleCancelReset, children: t('buttons.cancel') }), _jsx("button", { style: confirmButtonStyle(true), onClick: handleConfirmReset, children: t('buttons.reset') })] })] }) })] })); };
1262
+ }, placeholder: inputPlaceholder, disabled: !conversationId || isFinalized || isAgentTyping, rows: 1 }), _jsx("div", { style: rightActionContainerStyle, children: useAudio && inputValue.trim() === '' && attachments.length === 0 ? (_jsx(VoiceInput, { onTranscription: function (text) { return setInputValue(text); }, onError: handleVoiceError, baseUrl: baseUrl, apiKey: apiKey, theme: theme, disabled: isAgentTyping })) : (_jsx("button", { type: "submit", style: __assign(__assign({}, sendButtonStyle), (isSendDisabled ? sendButtonDisabledStyle : {})), disabled: isSendDisabled, children: _jsx(ArrowUp, { size: 18, strokeWidth: 3, color: "#ffffff" }) })) })] }), inputDisclaimer && (_jsx("div", { className: "ga-input-disclaimer", style: disclaimerStyle, children: inputDisclaimer }))] }) }))] }), _jsx("div", { style: confirmOverlayStyle, children: _jsxs("div", { style: confirmDialogStyle, children: [_jsx("h3", { style: { fontFamily: fontFamily, marginTop: 0 }, children: t('dialog.resetConversation.title') }), _jsx("p", { style: { fontFamily: fontFamily, fontSize: fontSize }, children: t('dialog.resetConversation.message') }), _jsxs("div", { style: confirmButtonsStyle, children: [_jsx("button", { style: __assign(__assign({}, confirmButtonStyle(false)), { color: textColor }), onClick: handleCancelReset, children: t('buttons.cancel') }), _jsx("button", { style: confirmButtonStyle(true), onClick: handleConfirmReset, children: t('buttons.reset') })] })] }) })] })); };
1253
1263
  if (mode === 'floating') {
1254
1264
  return (_jsxs(_Fragment, { children: [!isFloatingOpen && (_jsx(ChatBubble, { showChat: isFloatingOpen, onClick: function () { return setIsFloatingOpen(function (prev) { return !prev; }); }, primaryColor: primaryColor, style: getPositionStyles() })), isFloatingOpen && (_jsx("div", { style: floatingContainerStyle, "data-genassist-container": "floating", children: renderWithReCaptcha(renderChatComponent()) }))] }));
1255
1265
  }
@@ -1258,4 +1268,4 @@ export var GenAgentChat = function (_a) {
1258
1268
  }
1259
1269
  return renderWithReCaptcha(renderChatComponent());
1260
1270
  };
1261
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2VuQWdlbnRDaGF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvR2VuQWdlbnRDaGF0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDbEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDeEgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLFFBQVEsTUFBTSx5QkFBeUIsQ0FBQztBQUUvQywwQ0FBMEM7QUFFMUMsT0FBTyxFQUNMLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNuQiwwQkFBMEIsR0FDM0IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR3JGLE1B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QixDQUFDLFVBQUEsSUFBSSxJQUFJLE9BQUEsQ0FBQyxJQUFJLEVBQUwsQ0FBSyxDQUFDLEVBQWhDLENBQWdDLEVBQy9DLFlBQVksRUFBRSxZQUFZLEVBQzFCLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxHQUMxQixDQUNILEVBRUEsY0FBYyxJQUFJLENBQ2pCLGNBQUssS0FBSyxFQUFFLHNCQUFzQiw4QkFBMkIsVUFBVSxZQUNwRSxtQkFBbUIsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEdBQ3ZDLENBQ1AsSUFDQSxDQUNKLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxJQUFJLEtBQUssWUFBWSxFQUFFLENBQUM7UUFDMUIsT0FBTyxDQUNMLGNBQUssS0FBSyxFQUFFLHNCQUFzQiw4QkFBMkIsWUFBWSxZQUN0RSxtQkFBbUIsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEdBQ3ZDLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLG1CQUFtQixDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztBQUNwRCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QsIHVzZU1lbW8sIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2VDb21wb25lbnQgfSBmcm9tICcuL0NoYXRNZXNzYWdlJztcbmltcG9ydCB7IEF0dGFjaG1lbnRQcmV2aWV3IH0gZnJvbSAnLi9jb21tb24vQXR0YWNobWVudFByZXZpZXcnO1xuaW1wb3J0IHsgdXNlQ2hhdCB9IGZyb20gJy4uL2hvb2tzL3VzZUNoYXQnO1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIEdlbkFnZW50Q2hhdFByb3BzLCBTY2hlZHVsZUl0ZW0sIEF0dGFjaG1lbnQsIEF0dGFjaG1lbnRXaXRoRmlsZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IFZvaWNlSW5wdXQgfSBmcm9tICcuL1ZvaWNlSW5wdXQnO1xuaW1wb3J0IHsgQXVkaW9TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYXVkaW9TZXJ2aWNlJztcbmltcG9ydCB7IFBhcGVyY2xpcCwgTW9yZVZlcnRpY2FsLCBSZWZyZXNoQ3csIEdsb2JlLCBYLCBBcnJvd1VwLCBNYXhpbWl6ZTIsIE1pbmltaXplMiwgQWxlcnRDaXJjbGUgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHsgQ2hhdEJ1YmJsZSB9IGZyb20gJy4vQ2hhdEJ1YmJsZSc7XG5pbXBvcnQgeyBMYW5ndWFnZVNlbGVjdG9yIH0gZnJvbSAnLi9MYW5ndWFnZVNlbGVjdG9yJztcbmltcG9ydCBjaGF0TG9nbyBmcm9tICcuLi9hc3NldHMvY2hhdC1sb2dvLnBuZyc7XG5cbi8vIFR5cGUgZm9yIGF0dGFjaG1lbnQgd2l0aCBmaWxlIHJlZmVyZW5jZVxuXG5pbXBvcnQge1xuICByZXNvbHZlTGFuZ3VhZ2UsXG4gIG1lcmdlVHJhbnNsYXRpb25zLFxuICBnZXRUcmFuc2xhdGlvblN0cmluZyxcbiAgZ2V0VHJhbnNsYXRpb25BcnJheSxcbiAgZ2V0VHJhbnNsYXRpb25zRm9yTGFuZ3VhZ2UsXG59IGZyb20gJy4uL3V0aWxzL2kxOG4nO1xuaW1wb3J0IHsgR29vZ2xlUmVDYXB0Y2hhLCBHb29nbGVSZUNhcHRjaGFQcm92aWRlciB9IGZyb20gJ3JlYWN0LWdvb2dsZS1yZWNhcHRjaGEtdjMnO1xuXG5cbmV4cG9ydCBjb25zdCBHZW5BZ2VudENoYXQ6IFJlYWN0LkZDPEdlbkFnZW50Q2hhdFByb3BzPiA9ICh7XG4gIGJhc2VVcmwsXG4gIGFwaUtleSxcbiAgdGVuYW50LFxuICBtZXRhZGF0YSxcbiAgdXNlV3MgPSB0cnVlLFxuICB1c2VQb2xsID0gZmFsc2UsXG4gIG9uRXJyb3IsXG4gIG9uVGFrZW92ZXIsXG4gIG9uRmluYWxpemUsXG4gIHRoZW1lLFxuICBoZWFkZXJUaXRsZSA9ICdHZW5hc3Npc3QnLFxuICBkZXNjcmlwdGlvbixcbiAgcGxhY2Vob2xkZXIsXG4gIGFnZW50TmFtZSxcbiAgbG9nb1VybCxcbiAgbW9kZSA9ICdlbWJlZGRlZCcsXG4gIGZsb2F0aW5nQ29uZmlnID0ge30sXG4gIGxhbmd1YWdlLFxuICB0cmFuc2xhdGlvbnM6IGN1c3RvbVRyYW5zbGF0aW9ucyxcbiAgcmVDYXB0Y2hhS2V5LFxuICB3aWRnZXQgPSBmYWxzZSxcbiAgdXNlQXVkaW8gPSBmYWxzZSxcbiAgdXNlRmlsZSA9IGZhbHNlLFxuICBub0NvbG9yQW5pbWF0aW9uID0gZmFsc2UsXG4gIHNob3dXZWxjb21lQmVmb3JlU3RhcnQgPSB0cnVlLFxuICBhbGxvd2VkRXh0ZW5zaW9ucyA9IFtdLFxuICBzZXJ2ZXJVbmF2YWlsYWJsZU1lc3NhZ2UsXG4gIHNlcnZlclVuYXZhaWxhYmxlQ29udGFjdFVybCxcbiAgc2VydmVyVW5hdmFpbGFibGVDb250YWN0TGFiZWwsXG4gIGlucHV0RGlzY2xhaW1lciA9ICdBZ2VudCBjYW4gbWFrZSBtaXN0YWtlcy4gQ2hlY2sgaW1wb3J0YW50IGluZm8uJyxcbiAgb25Db25maWdMb2FkZWQsXG59KTogUmVhY3QuUmVhY3RFbGVtZW50ID0+IHtcbiAgLy8gTGFuZ3VhZ2Ugc2VsZWN0aW9uIHN0YXRlICh3aXRoIGxvY2FsU3RvcmFnZSBwZXJzaXN0ZW5jZSlcbiAgY29uc3QgW3NlbGVjdGVkTGFuZ3VhZ2UsIHNldFNlbGVjdGVkTGFuZ3VhZ2VdID0gdXNlU3RhdGU8c3RyaW5nPigoKSA9PiB7XG4gICAgaWYgKGxhbmd1YWdlKSByZXR1cm4gbGFuZ3VhZ2U7XG4gICAgY29uc3Qgc3RvcmVkID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZ2VuYXNzaXN0X2xhbmd1YWdlJykgOiBudWxsO1xuICAgIGlmIChzdG9yZWQpIHJldHVybiBzdG9yZWQ7XG4gICAgcmV0dXJuIHJlc29sdmVMYW5ndWFnZSgpO1xuICB9KTtcblxuICAvLyBTYXZlIGxhbmd1YWdlIHRvIGxvY2FsU3RvcmFnZSB3aGVuIGl0IGNoYW5nZXNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgIWxhbmd1YWdlKSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZ2VuYXNzaXN0X2xhbmd1YWdlJywgc2VsZWN0ZWRMYW5ndWFnZSk7XG4gICAgfVxuICB9LCBbc2VsZWN0ZWRMYW5ndWFnZSwgbGFuZ3VhZ2VdKTtcblxuICAvLyBTdGF0ZSBmb3IgdHJhY2tpbmcgc2VsZWN0ZWQgRkFRIHF1ZXJ5XG4gIGNvbnN0IFtzZWxlY3RlZEZhcVF1ZXJ5LCBzZXRTZWxlY3RlZEZhcVF1ZXJ5XSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIC8vIFJlc29sdmUgbGFuZ3VhZ2U6IHByb3AgPiBzZWxlY3RlZCA+IGJyb3dzZXIgPiAnZW4nXG4gIGNvbnN0IHJlc29sdmVkTGFuZ3VhZ2UgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAobGFuZ3VhZ2UpIHJldHVybiBsYW5ndWFnZTtcbiAgICByZXR1cm4gc2VsZWN0ZWRMYW5ndWFnZSB8fCByZXNvbHZlTGFuZ3VhZ2UoKSB8fCAnZW4nO1xuICB9LCBbbGFuZ3VhZ2UsIHNlbGVjdGVkTGFuZ3VhZ2VdKTtcblxuICAvLyBNZXJnZSBsYW5ndWFnZSBhbmQgRkFRIHF1ZXJ5IGludG8gbWV0YWRhdGFcbiAgY29uc3QgbWV0YWRhdGFXaXRoTGFuZ3VhZ2UgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uKG1ldGFkYXRhIHx8IHt9KSxcbiAgICAgIGxhbmd1YWdlOiByZXNvbHZlZExhbmd1YWdlLFxuICAgICAgLi4uKHNlbGVjdGVkRmFxUXVlcnkgPyB7IGZhcV9xdWVyeTogc2VsZWN0ZWRGYXFRdWVyeSB9IDoge30pLFxuICAgIH07XG4gIH0sIFttZXRhZGF0YSwgcmVzb2x2ZWRMYW5ndWFnZSwgc2VsZWN0ZWRGYXFRdWVyeV0pO1xuXG4gIC8vIEdldCB0cmFuc2xhdGlvbnMgYmFzZWQgb24gcmVzb2x2ZWQgbGFuZ3VhZ2UsIHRoZW4gbWVyZ2Ugd2l0aCBjdXN0b20gdHJhbnNsYXRpb25zXG4gIGNvbnN0IHRyYW5zbGF0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIC8vIEZpcnN0IGdldCBiYXNlIHRyYW5zbGF0aW9ucyBmb3IgdGhlIGxhbmd1YWdlXG4gICAgY29uc3QgYmFzZVRyYW5zbGF0aW9ucyA9IGdldFRyYW5zbGF0aW9uc0Zvckxhbmd1YWdlKHJlc29sdmVkTGFuZ3VhZ2UpO1xuICAgIC8vIFRoZW4gbWVyZ2Ugd2l0aCBhbnkgY3VzdG9tIHRyYW5zbGF0aW9ucyBwcm92aWRlZFxuICAgIHJldHVybiBtZXJnZVRyYW5zbGF0aW9ucyhjdXN0b21UcmFuc2xhdGlvbnMsIGJhc2VUcmFuc2xhdGlvbnMpO1xuICB9LCBbcmVzb2x2ZWRMYW5ndWFnZSwgY3VzdG9tVHJhbnNsYXRpb25zXSk7XG5cbiAgLy8gVHJhbnNsYXRpb24gaGVscGVyIGZ1bmN0aW9uXG4gIGNvbnN0IHQgPSAoa2V5OiBzdHJpbmcsIGZhbGxiYWNrPzogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICByZXR1cm4gZ2V0VHJhbnNsYXRpb25TdHJpbmcoa2V5LCB0cmFuc2xhdGlvbnMsIGZhbGxiYWNrKTtcbiAgfTtcblxuICAvLyBHZXQgdHJhbnNsYXRlZCBwbGFjZWhvbGRlciBvciB1c2UgcHJvdmlkZWQvZGVmYXVsdFxuICAvLyBNYWtlIGl0IHJlYWN0aXZlIHRvIGxhbmd1YWdlIGNoYW5nZXNcbiAgY29uc3QgaW5wdXRQbGFjZWhvbGRlciA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIC8vIElmIHBsYWNlaG9sZGVyIHByb3AgaXMgZXhwbGljaXRseSBwcm92aWRlZCwgdXNlIGl0XG4gICAgLy8gT3RoZXJ3aXNlLCB1c2UgdGhlIHRyYW5zbGF0aW9uIHdoaWNoIHdpbGwgdXBkYXRlIHdpdGggbGFuZ3VhZ2UgY2hhbmdlc1xuICAgIHJldHVybiBwbGFjZWhvbGRlciB8fCB0KCdpbnB1dC5wbGFjZWhvbGRlcicsICdBc2sgYSBxdWVzdGlvbicpO1xuICB9LCBbcGxhY2Vob2xkZXIsIHRyYW5zbGF0aW9uc10pO1xuICBjb25zdCBbaW5wdXRWYWx1ZSwgc2V0SW5wdXRWYWx1ZV0gPSB1c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtzaG93UmVzZXRDb25maXJtLCBzZXRTaG93UmVzZXRDb25maXJtXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3Nob3dNZW51LCBzZXRTaG93TWVudV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzaG93TGFuZ3VhZ2VEcm9wZG93biwgc2V0U2hvd0xhbmd1YWdlRHJvcGRvd25dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbaXNQbGF5aW5nQXVkaW8sIHNldElzUGxheWluZ0F1ZGlvXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2lzRmxvYXRpbmdPcGVuLCBzZXRJc0Zsb2F0aW5nT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFthdHRhY2htZW50cywgc2V0QXR0YWNobWVudHNdID0gdXNlU3RhdGU8QXR0YWNobWVudFdpdGhGaWxlW10+KFtdKTtcbiAgY29uc3QgW3VwbG9hZGluZ0ZpbGVzLCBzZXRVcGxvYWRpbmdGaWxlc10gPSB1c2VTdGF0ZTxTZXQ8c3RyaW5nPj4obmV3IFNldCgpKTtcbiAgY29uc3QgW2ZpbGVFcnJvclRvYXN0LCBzZXRGaWxlRXJyb3JUb2FzdF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgZmlsZUVycm9yVG9hc3RUaW1lb3V0UmVmID0gdXNlUmVmPFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IG1lbnVSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBmaWxlSW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHRleHRBcmVhUmVmID0gdXNlUmVmPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBoZWFkZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBbaGVhZGVySGVpZ2h0LCBzZXRIZWFkZXJIZWlnaHRdID0gdXNlU3RhdGUoNTYpO1xuICBjb25zdCBbc2hvd0JhY2tsaWdodCwgc2V0U2hvd0JhY2tsaWdodF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpc0Z1bGxzY3JlZW5Ub2dnbGVkLCBzZXRJc0Z1bGxzY3JlZW5Ub2dnbGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICAvLyBkZWZhdWx0IHRoaW5raW5nIG1lc3NhZ2VzIGlmIG5vbmUgcHJvdmlkZWQgYnkgd29ya2Zsb3dcbiAgY29uc3QgREVGQVVMVF9USElOS0lOR19NRVNTQUdFUyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gZ2V0VHJhbnNsYXRpb25BcnJheSgndGhpbmtpbmcubWVzc2FnZXMnLCB0cmFuc2xhdGlvbnMsIFtcbiAgICAgIFwiVGhpbmtpbmfigKZcIixcbiAgICAgIFwiQW5hbHl6aW5nIHlvdXIgcXVlc3Rpb27igKZcIixcbiAgICAgIFwiU2VhcmNoaW5nIGtub3dsZWRnZeKAplwiLFxuICAgICAgXCJQdWxsaW5nIHJlbGV2YW50IGluZm/igKZcIixcbiAgICAgIFwiRHJhZnRpbmcgdGhlIGFuc3dlcuKAplwiLFxuICAgICAgXCJEb3VibGXigJFjaGVja2luZyBkZXRhaWxz4oCmXCIsXG4gICAgICBcIlR5aW5nIGl0IHRvZ2V0aGVy4oCmXCIsXG4gICAgICBcIkFsbW9zdCB0aGVyZeKAplwiLFxuICAgIF0pLFxuICAgIFt0cmFuc2xhdGlvbnNdXG4gICk7XG4gIGNvbnN0IFtjdXJyZW50VGhpbmtpbmdQYXJ0cywgc2V0Q3VycmVudFRoaW5raW5nUGFydHNdID0gdXNlU3RhdGU8c3RyaW5nW10+KFtdKTtcbiAgY29uc3QgW2N1cnJlbnRUaGlua2luZ1BhcnRJbmRleCwgc2V0Q3VycmVudFRoaW5raW5nUGFydEluZGV4XSA9IHVzZVN0YXRlKDApO1xuICBjb25zdCB7XG4gICAgbWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nLFxuICAgIHNlbmRNZXNzYWdlLFxuICAgIHVwbG9hZEZpbGUsXG4gICAgcmVzZXRDb252ZXJzYXRpb24sXG4gICAgc3RhcnRDb252ZXJzYXRpb24sXG4gICAgY29ubmVjdGlvblN0YXRlLFxuICAgIGNvbnZlcnNhdGlvbklkLFxuICAgIHBvc3NpYmxlUXVlcmllcyxcbiAgICBpc0ZpbmFsaXplZCxcbiAgICBpc0FnZW50VHlwaW5nLFxuICAgIGFkZEZlZWRiYWNrLFxuICAgIHdlbGNvbWVUaXRsZSxcbiAgICB3ZWxjb21lSW1hZ2VVcmwsXG4gICAgd2VsY29tZU1lc3NhZ2UsXG4gICAgdGhpbmtpbmdQaHJhc2VzLFxuICAgIHRoaW5raW5nRGVsYXlNcyxcbiAgfSA9IHVzZUNoYXQoe1xuICAgIGJhc2VVcmwsXG4gICAgYXBpS2V5LFxuICAgIHRlbmFudCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGFXaXRoTGFuZ3VhZ2UsXG4gICAgdXNlV3MsXG4gICAgdXNlUG9sbCxcbiAgICBsYW5ndWFnZTogcmVzb2x2ZWRMYW5ndWFnZSxcbiAgICBvbkVycm9yLFxuICAgIG9uVGFrZW92ZXIsXG4gICAgb25GaW5hbGl6ZSxcbiAgICBzZXJ2ZXJVbmF2YWlsYWJsZU1lc3NhZ2UsXG4gICAgc2VydmVyVW5hdmFpbGFibGVDb250YWN0VXJsLFxuICAgIHNlcnZlclVuYXZhaWxhYmxlQ29udGFjdExhYmVsLFxuICAgIG9uQ29uZmlnTG9hZGVkLFxuICB9KTtcbiAgY29uc3QgbWVzc2FnZXNFbmRSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBhdWRpb1NlcnZpY2UgPSB1c2VSZWY8QXVkaW9TZXJ2aWNlIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IGhhc0FuY2hvcmVkSGlzdG9yeSA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IGNoYXRDb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCByZUNhcHRjaGFUb2tlblJlZiA9IHVzZVJlZjxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIGNvbnN0IGlzVXNlckF0Qm90dG9tUmVmID0gdXNlUmVmKHRydWUpO1xuXG4gIGNvbnN0IGFuY2hvckhpc3RvcnkgPSAoKSA9PiB7XG4gICAgY29uc3QgZWwgPSBjaGF0Q29udGFpbmVyUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFlbCB8fCAhbWVzc2FnZXMubGVuZ3RoIHx8IGhhc0FuY2hvcmVkSGlzdG9yeS5jdXJyZW50KSByZXR1cm47XG4gICAgaWYgKGVsLmNsaWVudEhlaWdodCA9PT0gMCkgcmV0dXJuOyAvLyBoaWRkZW4sIHdhaXQgZm9yIHZpc2liaWxpdHkvc2l6ZVxuICAgIGVsLnNjcm9sbFRvcCA9IGVsLnNjcm9sbEhlaWdodDtcbiAgICBoYXNBbmNob3JlZEhpc3RvcnkuY3VycmVudCA9IHRydWU7XG4gICAgaXNVc2VyQXRCb3R0b21SZWYuY3VycmVudCA9IHRydWU7XG4gIH07XG5cbiAgY29uc3Qgc2Nyb2xsVG9Cb3R0b20gPSAoYmVoYXZpb3I6IFNjcm9sbEJlaGF2aW9yID0gJ3Ntb290aCcsIGZvcmNlOiBib29sZWFuID0gZmFsc2UpID0+IHtcbiAgICBjb25zdCBjb250YWluZXIgPSBjaGF0Q29udGFpbmVyUmVmLmN1cnJlbnQ7XG4gICAgY29uc3QgZWwgPSBtZXNzYWdlc0VuZFJlZi5jdXJyZW50O1xuICAgIGlmICghY29udGFpbmVyIHx8ICFlbCkgcmV0dXJuO1xuXG4gICAgLy8gT25seSBzY3JvbGwgaWYgdXNlciBpcyBhdCBib3R0b20gb3IgaWYgZm9yY2VkIChlLmcuLCBmb3IgYWdlbnQgdHlwaW5nKVxuICAgIGlmICghZm9yY2UgJiYgIWlzVXNlckF0Qm90dG9tUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkb1Njcm9sbCA9ICgpID0+IHtcbiAgICAgIGNvbnRhaW5lci5zY3JvbGxUbyh7IHRvcDogY29udGFpbmVyLnNjcm9sbEhlaWdodCwgYmVoYXZpb3IgfSk7XG4gICAgICBpc1VzZXJBdEJvdHRvbVJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9O1xuICAgIGlmIChiZWhhdmlvciA9PT0gJ2F1dG8nKSB7XG4gICAgICBkb1Njcm9sbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZG9TY3JvbGwpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYXNVc2VyTWVzc2FnZXMgPSBtZXNzYWdlcy5zb21lKG1lc3NhZ2UgPT4gbWVzc2FnZS5zcGVha2VyID09PSAnY3VzdG9tZXInKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGF1ZGlvU2VydmljZS5jdXJyZW50ID0gbmV3IEF1ZGlvU2VydmljZSh7IGJhc2VVcmwsIGFwaUtleSB9KTtcbiAgfSwgW2Jhc2VVcmwsIGFwaUtleV0pO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFtZXNzYWdlcy5sZW5ndGgpIHJldHVybjtcbiAgICBpZiAoaGFzQW5jaG9yZWRIaXN0b3J5LmN1cnJlbnQpIHtcbiAgICAgIHNjcm9sbFRvQm90dG9tKCdzbW9vdGgnLCBmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFuY2hvckhpc3RvcnkoKTtcbiAgICB9XG4gIH0sIFttZXNzYWdlc10pO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc0FnZW50VHlwaW5nKSByZXR1cm47XG4gICAgLy8gRm9yY2Ugc2Nyb2xsIHdoZW4gYWdlbnQgaXMgdHlwaW5nXG4gICAgc2Nyb2xsVG9Cb3R0b20oJ2F1dG8nLCB0cnVlKTtcbiAgfSwgW2lzQWdlbnRUeXBpbmcsIGN1cnJlbnRUaGlua2luZ1BhcnRJbmRleCwgY3VycmVudFRoaW5raW5nUGFydHMubGVuZ3RoXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBoYXNBbmNob3JlZEhpc3RvcnkuY3VycmVudCA9IGZhbHNlO1xuICB9LCBbY29udmVyc2F0aW9uSWRdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoZmlsZUVycm9yVG9hc3RUaW1lb3V0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGZpbGVFcnJvclRvYXN0VGltZW91dFJlZi5jdXJyZW50KTtcbiAgICAgIH1cbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgLy8gRW5zdXJlIGNoYXQgaXMgYWx3YXlzIG9wZW4gd2hlbiBtb2RlIGlzIGZ1bGxzY3JlZW5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobW9kZSA9PT0gJ2Z1bGxzY3JlZW4nICYmICFpc0Zsb2F0aW5nT3Blbikge1xuICAgICAgc2V0SXNGbG9hdGluZ09wZW4odHJ1ZSk7XG4gICAgfVxuICB9LCBbbW9kZSwgaXNGbG9hdGluZ09wZW5dKTtcblxuICAvLyBTY3JvbGwgdG8gYm90dG9tIHdoZW4gY2hhdCBpcyByZW9wZW5lZCBpbiBmbG9hdGluZyBtb2RlXG4gIGNvbnN0IHByZXZJc0Zsb2F0aW5nT3BlblJlZiA9IHVzZVJlZihpc0Zsb2F0aW5nT3Blbik7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gT25seSB0cmlnZ2VyIHdoZW4gY2hhdCB0cmFuc2l0aW9ucyBmcm9tIGNsb3NlZCB0byBvcGVuXG4gICAgaWYgKChtb2RlID09PSAnZmxvYXRpbmcnIHx8IG1vZGUgPT09ICdmdWxsc2NyZWVuJykgJiYgaXNGbG9hdGluZ09wZW4gJiYgIXByZXZJc0Zsb2F0aW5nT3BlblJlZi5jdXJyZW50ICYmIG1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIFJlc2V0IHRoZSBhbmNob3IgZmxhZyBzbyBpdCBjYW4gc2Nyb2xsIHRvIGJvdHRvbVxuICAgICAgaGFzQW5jaG9yZWRIaXN0b3J5LmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIGlzVXNlckF0Qm90dG9tUmVmLmN1cnJlbnQgPSB0cnVlO1xuXG4gICAgICAvLyBXYWl0IGZvciBjb250YWluZXIgdG8gYmUgdmlzaWJsZSBhbmQgdGhlbiBzY3JvbGxcbiAgICAgIGNvbnN0IHNjcm9sbFdoZW5WaXNpYmxlID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSBjaGF0Q29udGFpbmVyUmVmLmN1cnJlbnQ7XG4gICAgICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHNjcm9sbFdoZW5WaXNpYmxlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBpZiBjb250YWluZXIgaXMgdmlzaWJsZVxuICAgICAgICBpZiAoY29udGFpbmVyLmNsaWVudEhlaWdodCA9PT0gMCkge1xuICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShzY3JvbGxXaGVuVmlzaWJsZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2Nyb2xsIHRvIGJvdHRvbVxuICAgICAgICBjb250YWluZXIuc2Nyb2xsVG9wID0gY29udGFpbmVyLnNjcm9sbEhlaWdodDtcbiAgICAgICAgaGFzQW5jaG9yZWRIaXN0b3J5LmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICBpc1VzZXJBdEJvdHRvbVJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgIH07XG5cbiAgICAgIC8vIFVzZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgdG8gd2FpdCBmb3IgcmVuZGVyXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc2Nyb2xsV2hlblZpc2libGUpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHByZXZJc0Zsb2F0aW5nT3BlblJlZi5jdXJyZW50ID0gaXNGbG9hdGluZ09wZW47XG4gIH0sIFtpc0Zsb2F0aW5nT3BlbiwgbW9kZV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFtZXNzYWdlcy5sZW5ndGgpIHJldHVybjtcbiAgICBjb25zdCBlbCA9IGNoYXRDb250YWluZXJSZWYuY3VycmVudDtcbiAgICBpZiAoIWVsKSByZXR1cm47XG5cbiAgICAvLyBPYnNlcnZlIHNpemUvdmlzaWJpbGl0eSBjaGFuZ2VzIHRvIGFuY2hvciBjaGF0IHZpZXcuXG4gICAgY29uc3QgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgaWYgKGlzVXNlckF0Qm90dG9tUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgYW5jaG9ySGlzdG9yeSgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUoZWwpO1xuXG4gICAgYW5jaG9ySGlzdG9yeSgpO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9O1xuICB9LCBbbWVzc2FnZXNdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGNoYXRDb250YWluZXJSZWYuY3VycmVudDtcbiAgICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuO1xuXG4gICAgY29uc3QgaXNBdEJvdHRvbSA9ICh0aHJlc2hvbGQ6IG51bWJlciA9IDEwMCk6IGJvb2xlYW4gPT4ge1xuICAgICAgaWYgKCFjb250YWluZXIpIHJldHVybiB0cnVlO1xuICAgICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBjb250YWluZXI7XG4gICAgICByZXR1cm4gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0IDw9IHRocmVzaG9sZDtcbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZVNjcm9sbCA9ICgpID0+IHtcbiAgICAgIGlzVXNlckF0Qm90dG9tUmVmLmN1cnJlbnQgPSBpc0F0Qm90dG9tKCk7XG4gICAgfTtcbiAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlU2Nyb2xsLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgaGFuZGxlU2Nyb2xsKCk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVNjcm9sbCk7XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgdXBkYXRlSGVhZGVySGVpZ2h0ID0gKCkgPT4ge1xuICAgICAgc2V0SGVhZGVySGVpZ2h0KGhlYWRlclJlZi5jdXJyZW50Py5vZmZzZXRIZWlnaHQgfHwgNTYpO1xuICAgIH07XG4gICAgdXBkYXRlSGVhZGVySGVpZ2h0KCk7XG4gICAgY29uc3QgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gdXBkYXRlSGVhZGVySGVpZ2h0KCkpO1xuICAgIGlmIChoZWFkZXJSZWYuY3VycmVudCkge1xuICAgICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShoZWFkZXJSZWYuY3VycmVudCk7XG4gICAgfVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB1cGRhdGVIZWFkZXJIZWlnaHQpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICByZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlSGVhZGVySGVpZ2h0KTtcbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgLy8gU21vb3RobHkgc2hvdy9oaWRlIHRoZSBiYWNrbGlnaHQgd2hpbGUgdGhlIGFnZW50IGlzIHR5cGluZ1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc0FnZW50VHlwaW5nKSB7XG4gICAgICBzZXRTaG93QmFja2xpZ2h0KHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0ID0gc2V0VGltZW91dCgoKSA9PiBzZXRTaG93QmFja2xpZ2h0KGZhbHNlKSwgNDIwKTsgLy8gYWxsb3cgZmFkZS1vdXRcbiAgICByZXR1cm4gKCkgPT4gY2xlYXJUaW1lb3V0KHQpO1xuICB9LCBbaXNBZ2VudFR5cGluZ10pO1xuXG4gIC8vIFNob3cgXCJ0aGlua2luZ1wiIHBocmFzZXMgd2hpbGUgYWdlbnQgaXMgdHlwaW5nXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc0FnZW50VHlwaW5nKSB7XG4gICAgICBzZXRDdXJyZW50VGhpbmtpbmdQYXJ0cyhbXSk7XG4gICAgICBzZXRDdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXgoMCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUmFuZG9tbHkgc2VsZWN0IGEgcGhyYXNlIGZyb20gdGhlIGxpc3RcbiAgICBjb25zdCBsaXN0ID0gKHRoaW5raW5nUGhyYXNlcyAmJiB0aGlua2luZ1BocmFzZXMubGVuZ3RoID4gMCkgPyB0aGlua2luZ1BocmFzZXMgOiBERUZBVUxUX1RISU5LSU5HX01FU1NBR0VTO1xuICAgIGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbGlzdC5sZW5ndGgpO1xuICAgIGNvbnN0IHNlbGVjdGVkUGhyYXNlID0gbGlzdFtyYW5kb21JbmRleF07XG5cbiAgICAvLyBTcGxpdCBieSB8IHRvIGdldCBwYXJ0cywgb3IgdXNlIHRoZSBwaHJhc2UgYXMgYSBzaW5nbGUgcGFydCBpZiBubyB8IGZvdW5kXG4gICAgY29uc3QgcGFydHMgPSBzZWxlY3RlZFBocmFzZS5pbmNsdWRlcygnfCcpXG4gICAgICA/IHNlbGVjdGVkUGhyYXNlLnNwbGl0KCd8JykubWFwKHBhcnQgPT4gcGFydC50cmltKCkpLmZpbHRlcihwYXJ0ID0+IHBhcnQubGVuZ3RoID4gMClcbiAgICAgIDogW3NlbGVjdGVkUGhyYXNlLnRyaW0oKV07XG5cbiAgICAvLyBJbml0aWFsaXplIHdpdGggZmlyc3QgcGFydFxuICAgIHNldEN1cnJlbnRUaGlua2luZ1BhcnRzKHBhcnRzKTtcbiAgICBzZXRDdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXgoMCk7XG5cbiAgICAvLyBJZiB0aGVyZSdzIG9ubHkgb25lIHBhcnQsIG5vIG5lZWQgdG8gcHJvZ3Jlc3NcbiAgICBpZiAocGFydHMubGVuZ3RoIDw9IDEpIHJldHVybjtcblxuICAgIC8vIFByb2dyZXNzIHRocm91Z2ggcGFydHMgd2l0aCBkZWxheSwgYnV0IHN0b3AgYXQgdGhlIGxhc3Qgb25lXG4gICAgY29uc3Qgcm90RGVsYXkgPSBNYXRoLm1heCgyNTAsIHRoaW5raW5nRGVsYXlNcyB8fCAxMDAwKTtcbiAgICBjb25zdCB0aW1lb3V0SWRzOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PltdID0gW107XG5cbiAgICAvLyBTZXQgdXAgdGltZW91dHMgZm9yIGVhY2ggcGFydCB0cmFuc2l0aW9uXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHNldEN1cnJlbnRUaGlua2luZ1BhcnRJbmRleChpKTtcbiAgICAgIH0sIHJvdERlbGF5ICogaSk7XG4gICAgICB0aW1lb3V0SWRzLnB1c2godGltZW91dElkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgdGltZW91dElkcy5mb3JFYWNoKGlkID0+IGNsZWFyVGltZW91dChpZCkpO1xuICAgIH07XG4gIH0sIFtpc0FnZW50VHlwaW5nLCB0aGlua2luZ1BocmFzZXMsIHRoaW5raW5nRGVsYXlNc10pO1xuXG4gIGNvbnN0IHN1Ym1pdE1lc3NhZ2UgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKGlucHV0VmFsdWUudHJpbSgpID09PSAnJyAmJiBhdHRhY2htZW50cy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBpZiAoaXNBZ2VudFR5cGluZykgcmV0dXJuOyAvLyBQcmV2ZW50IHNlbmRpbmcgd2hpbGUgYWdlbnQgaXMgdGhpbmtpbmcvdHlwaW5nXG4gICAgY29uc3QgdGV4dFRvU2VuZCA9IGlucHV0VmFsdWU7XG4gICAgLy8gTk9URVM6IHdlIGRvbid0IHVwbG9hZCBmaWxlcyBhbnltb3JlLCB3ZSBqdXN0IHNlbmQgdGhlIGNvbnRlbnQgYmxvY2tzXG4gICAgY29uc3QgZmlsZXNUb1VwbG9hZCA9IGF0dGFjaG1lbnRzLm1hcChhID0+IGEuZmlsZSk7XG4gICAgLy8gY29uc3QgZmlsZUF0dGFjaG1lbnRzID0gYXR0YWNobWVudHMubWFwKGEgPT4gYS5hdHRhY2htZW50KTtcblxuICAgIHNldElucHV0VmFsdWUoJycpO1xuICAgIHNldEF0dGFjaG1lbnRzKFtdKTtcbiAgICAvLyBSZXNldCB0aGUgZmlsZSBpbnB1dCB2YWx1ZSBzbyB0aGUgc2FtZSBmaWxlIGNhbiBiZSBzZWxlY3RlZCBhZ2FpblxuICAgIGlmIChmaWxlSW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgZmlsZUlucHV0UmVmLmN1cnJlbnQudmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gSW5jbHVkZSBGQVEgcXVlcnkgaW4gbWV0YWRhdGEgaWYgb25lIHdhcyBwcmV2aW91c2x5IHNlbGVjdGVkXG4gICAgICBjb25zdCBleHRyYU1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgICAgIGlmIChzZWxlY3RlZEZhcVF1ZXJ5KSB7XG4gICAgICAgIGV4dHJhTWV0YWRhdGEuZmFxX3F1ZXJ5ID0gc2VsZWN0ZWRGYXFRdWVyeTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpbGVzVG9VcGxvYWQubGVuZ3RoID4gMCkge1xuICAgICAgICBleHRyYU1ldGFkYXRhLmF0dGFjaG1lbnRzID0gYXR0YWNobWVudHMubWFwKGEgPT4gYS5hdHRhY2htZW50KTtcbiAgICAgIH1cblxuICAgICAgLy8gc2VuZCBtZXNzYWdlIHdpdGggYXR0YWNobWVudHNcbiAgICAgIGF3YWl0IHNlbmRNZXNzYWdlKHRleHRUb1NlbmQsIGZpbGVzVG9VcGxvYWQsIGV4dHJhTWV0YWRhdGEsIHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gYXN5bmMgKGU6IFJlYWN0LkZvcm1FdmVudCkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBhd2FpdCBzdWJtaXRNZXNzYWdlKCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUXVpY2tBY3Rpb24gPSBhc3luYyAodGV4dDogc3RyaW5nKSA9PiB7XG4gICAgaWYgKCF0ZXh0LnRyaW0oKSkgcmV0dXJuO1xuICAgIGlmIChpc0FnZW50VHlwaW5nKSByZXR1cm47IC8vIFByZXZlbnQgc2VuZGluZyB3aGlsZSBhZ2VudCBpcyB0aGlua2luZy90eXBpbmdcbiAgICB0cnkge1xuICAgICAgLy8gSW5jbHVkZSBGQVEgcXVlcnkgaW4gbWV0YWRhdGEgaWYgb25lIHdhcyBwcmV2aW91c2x5IHNlbGVjdGVkXG4gICAgICBjb25zdCBleHRyYU1ldGFkYXRhID0gc2VsZWN0ZWRGYXFRdWVyeSA/IHsgZmFxX3F1ZXJ5OiBzZWxlY3RlZEZhcVF1ZXJ5IH0gOiB1bmRlZmluZWQ7XG4gICAgICBhd2FpdCBzZW5kTWVzc2FnZSh0ZXh0LCBbXSwgZXh0cmFNZXRhZGF0YSwgcmVDYXB0Y2hhVG9rZW5SZWYuY3VycmVudCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIGlnbm9yZSBxdWljayBhY3Rpb24gZXJyb3JzIHRvIGF2b2lkIGludGVycnVwdGluZyB0aGUgZmxvd1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVTY2hlZHVsZUNvbmZpcm0gPSBhc3luYyAoc2NoZWR1bGU6IFNjaGVkdWxlSXRlbSkgPT4ge1xuICAgIGNvbnN0IHN1bW1hcnkgPSBgU2NoZWR1bGUgY29uZmlybWVkIHdpdGggJHtzY2hlZHVsZS5yZXN0YXVyYW50cy5sZW5ndGh9IHJlc3RhdXJhbnRzYDtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc2VuZE1lc3NhZ2Uoc3VtbWFyeSwgW10sIHsgY29uZmlybVNjaGVkdWxlOiBKU09OLnN0cmluZ2lmeShzY2hlZHVsZSkgfSwgcmVDYXB0Y2hhVG9rZW5SZWYuY3VycmVudCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIGlnbm9yZVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVGaWxlQ2hhbmdlID0gYXN5bmMgKGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKGUudGFyZ2V0LmZpbGVzICYmIGUudGFyZ2V0LmZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG5ld0ZpbGVzID0gQXJyYXkuZnJvbShlLnRhcmdldC5maWxlcyk7XG5cbiAgICAgIC8vIEluaXRpYWxpemUgYXR0YWNobWVudHMgd2l0aCBmaWxlcyAoYXR0YWNobWVudCByZWZlcmVuY2Ugd2lsbCBiZSBudWxsIGluaXRpYWxseSlcbiAgICAgIGNvbnN0IG5ld0F0dGFjaG1lbnRzOiBBdHRhY2htZW50V2l0aEZpbGVbXSA9IG5ld0ZpbGVzLm1hcChmaWxlID0+ICh7ZmlsZSwgYXR0YWNobWVudDogbnVsbH0pKTtcbiAgICAgIHNldEF0dGFjaG1lbnRzKHByZXYgPT4gWy4uLnByZXYsIC4uLm5ld0F0dGFjaG1lbnRzXSk7XG5cbiAgICAgIGNvbnN0IG5ld1VwbG9hZGluZ0ZpbGVzID0gbmV3IFNldCh1cGxvYWRpbmdGaWxlcyk7XG4gICAgICBuZXdGaWxlcy5mb3JFYWNoKGZpbGUgPT4gbmV3VXBsb2FkaW5nRmlsZXMuYWRkKGZpbGUubmFtZSkpO1xuICAgICAgc2V0VXBsb2FkaW5nRmlsZXMobmV3VXBsb2FkaW5nRmlsZXMpO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyBVcGxvYWQgZmlsZXMgYW5kIGdldCBhdHRhY2htZW50IHJlZmVyZW5jZXMgKHVzZSBhbGxTZXR0bGVkIHNvIG9uZSBmYWlsdXJlIGRvZXNuJ3Qgc2tpcCB0aGUgcmVzdClcbiAgICAgICAgY29uc3Qgc2V0dGxlZCA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgICAgICBuZXdGaWxlcy5tYXAoYXN5bmMgKGZpbGUpID0+ICh7IGZpbGUsIGF0dGFjaG1lbnQ6IGF3YWl0IHVwbG9hZEZpbGUoZmlsZSkgfSkpXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgZmlsZVRvQXR0YWNobWVudE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBBdHRhY2htZW50IHwgbnVsbD4oKTtcbiAgICAgICAgY29uc3QgZmFpbGVkRmlsZUtleXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgc2V0dGxlZC5mb3JFYWNoKChyZXN1bHQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgZmlsZSA9IG5ld0ZpbGVzW2luZGV4XTtcbiAgICAgICAgICBpZiAoIWZpbGUpIHJldHVybjtcbiAgICAgICAgICBjb25zdCBmaWxlS2V5ID0gYCR7ZmlsZS5uYW1lfToke2ZpbGUuc2l6ZX06JHtmaWxlLmxhc3RNb2RpZmllZH1gO1xuICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAncmVqZWN0ZWQnKSB7XG4gICAgICAgICAgICBmaWxlVG9BdHRhY2htZW50TWFwLnNldChmaWxlS2V5LCBudWxsKTtcbiAgICAgICAgICAgIGZhaWxlZEZpbGVLZXlzLmFkZChmaWxlS2V5KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgeyBhdHRhY2htZW50IH0gPSByZXN1bHQudmFsdWU7XG4gICAgICAgICAgZmlsZVRvQXR0YWNobWVudE1hcC5zZXQoZmlsZUtleSwgYXR0YWNobWVudCk7XG4gICAgICAgICAgaWYgKGF0dGFjaG1lbnQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGZhaWxlZEZpbGVLZXlzLmFkZChmaWxlS2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGhhc0ZhaWxlZFVwbG9hZHMgPSBmYWlsZWRGaWxlS2V5cy5zaXplID4gMDtcblxuICAgICAgICAvLyBVcGRhdGUgYXR0YWNobWVudHM6IHJlbW92ZSBmYWlsZWQgZmlsZXMsIHNldCBhdHRhY2htZW50IGZvciBzdWNjZXNzZnVsIG9uZXNcbiAgICAgICAgc2V0QXR0YWNobWVudHMocHJldiA9PiB7XG4gICAgICAgICAgcmV0dXJuIHByZXZcbiAgICAgICAgICAgIC5maWx0ZXIoYXR0ID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZmlsZUtleSA9IGAke2F0dC5maWxlLm5hbWV9OiR7YXR0LmZpbGUuc2l6ZX06JHthdHQuZmlsZS5sYXN0TW9kaWZpZWR9YDtcbiAgICAgICAgICAgICAgcmV0dXJuICFmYWlsZWRGaWxlS2V5cy5oYXMoZmlsZUtleSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm1hcChhdHQgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBmaWxlS2V5ID0gYCR7YXR0LmZpbGUubmFtZX06JHthdHQuZmlsZS5zaXplfToke2F0dC5maWxlLmxhc3RNb2RpZmllZH1gO1xuICAgICAgICAgICAgICBjb25zdCB1cGxvYWRlZEF0dGFjaG1lbnQgPSBmaWxlVG9BdHRhY2htZW50TWFwLmdldChmaWxlS2V5KTtcbiAgICAgICAgICAgICAgaWYgKHVwbG9hZGVkQXR0YWNobWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYXR0LCBhdHRhY2htZW50OiB1cGxvYWRlZEF0dGFjaG1lbnQgfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gYXR0O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChoYXNGYWlsZWRVcGxvYWRzKSB7XG4gICAgICAgICAgaWYgKGZpbGVFcnJvclRvYXN0VGltZW91dFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZmlsZUVycm9yVG9hc3RUaW1lb3V0UmVmLmN1cnJlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZXRGaWxlRXJyb3JUb2FzdCh0KCdmaWxlVXBsb2FkLmZpbGVUeXBlTm90U3VwcG9ydGVkJywgJ1RoaXMgZmlsZSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQuJykpO1xuICAgICAgICAgIGZpbGVFcnJvclRvYXN0VGltZW91dFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBzZXRGaWxlRXJyb3JUb2FzdChudWxsKTtcbiAgICAgICAgICAgIGZpbGVFcnJvclRvYXN0VGltZW91dFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgICB9LCA0MDAwKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gaWdub3JlXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHVwbG9hZGluZyBmaWxlJywgZXJyb3IpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgY29uc3QgZmluYWxVcGxvYWRpbmdGaWxlcyA9IG5ldyBTZXQodXBsb2FkaW5nRmlsZXMpO1xuICAgICAgICBuZXdGaWxlcy5mb3JFYWNoKGZpbGUgPT4gZmluYWxVcGxvYWRpbmdGaWxlcy5kZWxldGUoZmlsZS5uYW1lKSk7XG4gICAgICAgIHNldFVwbG9hZGluZ0ZpbGVzKGZpbmFsVXBsb2FkaW5nRmlsZXMpO1xuICAgICAgICAvLyBSZXNldCB0aGUgZmlsZSBpbnB1dCB2YWx1ZSBzbyB0aGUgc2FtZSBmaWxlIGNhbiBiZSBzZWxlY3RlZCBhZ2FpblxuICAgICAgICBpZiAoZmlsZUlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBmaWxlSW5wdXRSZWYuY3VycmVudCEudmFsdWUgPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVSZW1vdmVBdHRhY2htZW50ID0gKGZpbGVOYW1lOiBzdHJpbmcpID0+IHtcbiAgICBzZXRBdHRhY2htZW50cyhwcmV2ID0+IHByZXYuZmlsdGVyKGF0dCA9PiBhdHQuZmlsZS5uYW1lICE9PSBmaWxlTmFtZSkpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVZvaWNlRXJyb3IgPSAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgaWYgKG9uRXJyb3IpIHtcbiAgICAgIG9uRXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBwbGF5UmVzcG9uc2VBdWRpbyA9IGFzeW5jICh0ZXh0OiBzdHJpbmcpID0+IHtcbiAgICBpZiAoIWF1ZGlvU2VydmljZS5jdXJyZW50IHx8IGlzUGxheWluZ0F1ZGlvKSByZXR1cm47XG5cbiAgICB0cnkge1xuICAgICAgc2V0SXNQbGF5aW5nQXVkaW8odHJ1ZSk7XG4gICAgICBjb25zdCBhdWRpb0Jsb2IgPSBhd2FpdCBhdWRpb1NlcnZpY2UuY3VycmVudC50ZXh0VG9TcGVlY2godGV4dCk7XG4gICAgICBhd2FpdCBhdWRpb1NlcnZpY2UuY3VycmVudC5wbGF5QXVkaW8oYXVkaW9CbG9iKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKG9uRXJyb3IpIHtcbiAgICAgICAgb25FcnJvcihlcnJvciBhcyBFcnJvcik7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldElzUGxheWluZ0F1ZGlvKGZhbHNlKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUXVlcnlDbGljayA9IGFzeW5jIChxdWVyeTogc3RyaW5nKSA9PiB7XG4gICAgaWYgKGlzQWdlbnRUeXBpbmcgfHwgaXNMb2FkaW5nKSByZXR1cm47IC8vIFByZXZlbnQgc2VuZGluZyB3aGlsZSBhZ2VudCBpcyB0aGlua2luZy90eXBpbmdcblxuICAgIC8vIFN0b3JlIHRoZSBGQVEgcXVlcnkgZm9yIGFsbCBzdWJzZXF1ZW50IG1lc3NhZ2VzXG4gICAgc2V0U2VsZWN0ZWRGYXFRdWVyeShxdWVyeSk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgc2VuZE1lc3NhZ2UocXVlcnksIFtdLCB7IGZhcV9xdWVyeTogcXVlcnkgfSwgcmVDYXB0Y2hhVG9rZW5SZWYuY3VycmVudCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIGlnbm9yZVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVTdGFydENvbnZlcnNhdGlvbiA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoaXNMb2FkaW5nKSByZXR1cm47XG5cbiAgICAvLyBDbGVhciBpbnB1dCB0ZXh0IGFuZCBmaWxlIGF0dGFjaG1lbnRzIHdoZW4gc3RhcnRpbmcgYSBjb252ZXJzYXRpb25cbiAgICBzZXRJbnB1dFZhbHVlKCcnKTtcbiAgICBzZXRBdHRhY2htZW50cyhbXSk7XG4gICAgaWYgKGZpbGVJbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICBmaWxlSW5wdXRSZWYuY3VycmVudC52YWx1ZSA9ICcnO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzdGFydENvbnZlcnNhdGlvbihyZUNhcHRjaGFUb2tlblJlZi5jdXJyZW50KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc3RhcnRpbmcgY29udmVyc2F0aW9uJywgZXJyb3IpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVNZW51Q2xpY2sgPSAoKSA9PiB7XG4gICAgc2V0U2hvd01lbnUocHJldiA9PiAhcHJldik7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUmVzZXRDbGljayA9ICgpID0+IHtcbiAgICBzZXRTaG93TWVudShmYWxzZSk7XG4gICAgc2V0U2hvd1Jlc2V0Q29uZmlybSh0cnVlKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVDb25maXJtUmVzZXQgPSBhc3luYyAoKSA9PiB7XG4gICAgLy8gQ2xlYXIgaW5wdXQgdGV4dCBhbmQgZmlsZSBhdHRhY2htZW50cyB3aGVuIHJlc3RhcnRpbmdcbiAgICBzZXRJbnB1dFZhbHVlKCcnKTtcbiAgICBzZXRBdHRhY2htZW50cyhbXSk7XG4gICAgaWYgKGZpbGVJbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICBmaWxlSW5wdXRSZWYuY3VycmVudC52YWx1ZSA9ICcnO1xuICAgIH1cblxuICAgIGF3YWl0IHJlc2V0Q29udmVyc2F0aW9uKHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQpO1xuICAgIHNldFNlbGVjdGVkRmFxUXVlcnkobnVsbCk7IC8vIENsZWFyIEZBUSBxdWVyeSBvbiByZXNldFxuICAgIHNldFNob3dSZXNldENvbmZpcm0oZmFsc2UpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUNhbmNlbFJlc2V0ID0gKCkgPT4ge1xuICAgIHNldFNob3dSZXNldENvbmZpcm0oZmFsc2UpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUxhbmd1YWdlQ2hhbmdlID0gKGxhbmc6IHN0cmluZykgPT4ge1xuICAgIHNldFNlbGVjdGVkTGFuZ3VhZ2UobGFuZyk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlRnVsbHNjcmVlblRvZ2dsZSA9ICgpID0+IHtcbiAgICBzZXRJc0Z1bGxzY3JlZW5Ub2dnbGVkKHByZXYgPT4gIXByZXYpO1xuICAgIHNldFNob3dNZW51KGZhbHNlKTtcbiAgfTtcblxuICAvLyBUcmFjayB3aW5kb3cgcmVzaXplIHRvIHVwZGF0ZSBtb2JpbGUgZGV0ZWN0aW9uXG4gIGNvbnN0IFt3aW5kb3dXaWR0aCwgc2V0V2luZG93V2lkdGhdID0gdXNlU3RhdGUodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cuaW5uZXJXaWR0aCA6IDEwMjQpO1xuXG4gIC8vIEF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lIGlmIHNob3VsZCBiZSBmdWxsc2NyZWVuIChtb2JpbGUgZGV2aWNlcyBvciB3aWRnZXQgbW9kZSBvciBtYW51YWwgdG9nZ2xlIG9yIGZ1bGxzY3JlZW4gbW9kZSlcbiAgY29uc3QgaXNGdWxsc2NyZWVuID0gdXNlTWVtbygoKSA9PiB7XG4gICAgLy8gSWYgbW9kZSBpcyBmdWxsc2NyZWVuLCBhbHdheXMgZnVsbHNjcmVlblxuICAgIGlmIChtb2RlID09PSAnZnVsbHNjcmVlbicpIHJldHVybiB0cnVlO1xuICAgIC8vIElmIHdpZGdldCBwcm9wIGlzIHRydWUsIGFsd2F5cyBmdWxsc2NyZWVuXG4gICAgaWYgKHdpZGdldCkgcmV0dXJuIHRydWU7XG4gICAgLy8gSWYgbWFudWFsbHkgdG9nZ2xlZCwgdXNlIHRvZ2dsZSBzdGF0ZVxuICAgIGlmIChpc0Z1bGxzY3JlZW5Ub2dnbGVkKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBPdGhlcndpc2UsIHVzZSBtb2JpbGUgZGV0ZWN0aW9uXG4gICAgcmV0dXJuIHdpbmRvd1dpZHRoIDw9IDc2ODtcbiAgfSwgW3dpbmRvd1dpZHRoLCB3aWRnZXQsIGlzRnVsbHNjcmVlblRvZ2dsZWQsIG1vZGVdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVJlc2l6ZSA9ICgpID0+IHtcbiAgICAgIHNldFdpbmRvd1dpZHRoKHdpbmRvdy5pbm5lcldpZHRoKTtcbiAgICB9O1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVSZXNpemUpO1xuICAgIHJldHVybiAoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlUmVzaXplKTtcbiAgfSwgW10pO1xuXG4gIC8vIExvY2sgYm9keSBzY3JvbGwgd2hlbiBmdWxsc2NyZWVuIGlzIGFjdGl2ZSBvbiBtb2JpbGVcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNGdWxsc2NyZWVuICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5vdmVyZmxvdztcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSBvcmlnaW5hbFN0eWxlO1xuICAgICAgfTtcbiAgICB9XG4gIH0sIFtpc0Z1bGxzY3JlZW5dKTtcblxuICBjb25zdCBoYW5kbGVSZUNhcHRjaGFWZXJpZnkgPSB1c2VDYWxsYmFjaygodG9rZW46IHN0cmluZykgPT4ge1xuICAgIHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQgPSB0b2tlbjtcbiAgfSwgW10pO1xuXG4gIC8vIEF2YWlsYWJsZSBsYW5ndWFnZXMgKGNhbiBiZSBleHRlbmRlZClcbiAgY29uc3QgYXZhaWxhYmxlTGFuZ3VhZ2VzID0gW1xuICAgIHsgY29kZTogJ2VuJywgbmFtZTogJ0VuZ2xpc2gnIH0sXG4gICAgeyBjb2RlOiAnZXMnLCBuYW1lOiAnRXNwYcOxb2wnIH0sXG4gICAgeyBjb2RlOiAnZnInLCBuYW1lOiAnRnJhbsOnYWlzJyB9LFxuICAgIHsgY29kZTogJ2RlJywgbmFtZTogJ0RldXRzY2gnIH0sXG4gICAgeyBjb2RlOiAnaXQnLCBuYW1lOiAnSXRhbGlhbm8nIH0sXG4gICAgeyBjb2RlOiAncHQnLCBuYW1lOiAnUG9ydHVndcOqcycgfSxcbiAgXTtcblxuICBjb25zdCBwcmltYXJ5Q29sb3IgPSB0aGVtZT8ucHJpbWFyeUNvbG9yIHx8ICcjMjk2MkZGJztcbiAgY29uc3QgYmFja2dyb3VuZENvbG9yID0gdGhlbWU/LmJhY2tncm91bmRDb2xvciB8fCAnI2ZmZmZmZic7XG4gIGNvbnN0IHRleHRDb2xvciA9IHRoZW1lPy50ZXh0Q29sb3IgfHwgJyMwMDAwMDAnO1xuICBjb25zdCBmb250RmFtaWx5ID0gdGhlbWU/LmZvbnRGYW1pbHkgfHwgJ1JvYm90bywgQXJpYWwsIHNhbnMtc2VyaWYnO1xuICBjb25zdCBmb250U2l6ZSA9IHRoZW1lPy5mb250U2l6ZSB8fCAnMTRweCc7XG4gIGNvbnN0IGZvbnRTaXplTnVtYmVyID0gdHlwZW9mIGZvbnRTaXplID09PSAnc3RyaW5nJyA/IHBhcnNlSW50KGZvbnRTaXplLCAxMCkgOiAodHlwZW9mIGZvbnRTaXplID09PSAnbnVtYmVyJyA/IGZvbnRTaXplIDogMTQpO1xuICBjb25zdCBsaW5lSGVpZ2h0UHggPSBNYXRoLnJvdW5kKGZvbnRTaXplTnVtYmVyICogMS41KTtcbiAgY29uc3QgdGV4dEFyZWFNYXhIZWlnaHQgPSBsaW5lSGVpZ2h0UHggKiAzOyAvLyB1cCB0byAzIGxpbmVzXG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgaGV4IGNvbG9yIHRvIHJnYmFcbiAgY29uc3QgaGV4VG9SZ2JhID0gKGhleDogc3RyaW5nLCBhbHBoYTogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCByID0gcGFyc2VJbnQoaGV4LnNsaWNlKDEsIDMpLCAxNik7XG4gICAgY29uc3QgZyA9IHBhcnNlSW50KGhleC5zbGljZSgzLCA1KSwgMTYpO1xuICAgIGNvbnN0IGIgPSBwYXJzZUludChoZXguc2xpY2UoNSwgNyksIDE2KTtcbiAgICByZXR1cm4gYHJnYmEoJHtyfSwgJHtnfSwgJHtifSwgJHthbHBoYX0pYDtcbiAgfTtcblxuICBjb25zdCBwb3NpdGlvbiA9IGZsb2F0aW5nQ29uZmlnLnBvc2l0aW9uIHx8ICdib3R0b20tcmlnaHQnO1xuICBjb25zdCBvZmZzZXQgPSBmbG9hdGluZ0NvbmZpZy5vZmZzZXQgfHwgeyB4OiAyMCwgeTogMjAgfTtcbiAgY29uc3Qgb2Zmc2V0WCA9IG9mZnNldC54IHx8IDIwO1xuICBjb25zdCBvZmZzZXRZID0gb2Zmc2V0LnkgfHwgMjA7XG5cbiAgY29uc3QgY29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIC8vIFdoZW4gZnVsbHNjcmVlbiwgbGV0IGhlaWdodCBiZSBjYWxjdWxhdGVkIGZyb20gdG9wL2JvdHRvbSwgb3RoZXJ3aXNlIHVzZSBzcGVjaWZpZWQgaGVpZ2h0XG4gICAgaGVpZ2h0OiBpc0Z1bGxzY3JlZW4gPyB1bmRlZmluZWQgOiAnMTAwJScsXG4gICAgbWF4SGVpZ2h0OiBpc0Z1bGxzY3JlZW4gPyB1bmRlZmluZWQgOiAod2luZG93V2lkdGggPiA3NjggPyAnNzAwcHgnIDogJzYwMHB4JyksXG4gICAgd2lkdGg6IGlzRnVsbHNjcmVlbiA/ICcxMDB2dycgOiAnMTAwJScsXG4gICAgbWF4V2lkdGg6IGlzRnVsbHNjcmVlbiA/ICcxMDB2dycgOiAnNDAwcHgnLFxuICAgIGJvcmRlcjogaXNGdWxsc2NyZWVuID8gJ25vbmUnIDogJzFweCBzb2xpZCAjZTBlMGUwJyxcbiAgICBib3JkZXJSYWRpdXM6IGlzRnVsbHNjcmVlbiA/ICcwJyA6ICczMnB4JyxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZT8uc2Vjb25kYXJ5Q29sb3IgfHwgJyNmNWY1ZjUnLFxuICAgIGZvbnRGYW1pbHksXG4gICAgYm94U2hhZG93OiBpc0Z1bGxzY3JlZW4gPyAnbm9uZScgOiBcIjAgNHB4IDIwcHggcmdiYSgwLCAwLCAwLCAwLjIpXCIsXG4gICAgcG9zaXRpb246IGlzRnVsbHNjcmVlbiA/ICdmaXhlZCcgOiAncmVsYXRpdmUnLFxuICAgIHRvcDogaXNGdWxsc2NyZWVuID8gMCA6IHVuZGVmaW5lZCxcbiAgICBsZWZ0OiBpc0Z1bGxzY3JlZW4gPyAwIDogdW5kZWZpbmVkLFxuICAgIHJpZ2h0OiBpc0Z1bGxzY3JlZW4gPyAwIDogdW5kZWZpbmVkLFxuICAgIC8vIFBvc2l0aW9uIGNvbnRhaW5lciBhYm92ZSBicm93c2VyIGZvb3RlciB1c2luZyBzYWZlIGFyZWEgaW5zZXRzXG4gICAgYm90dG9tOiBpc0Z1bGxzY3JlZW4gPyAnZW52KHNhZmUtYXJlYS1pbnNldC1ib3R0b20sIDBweCknIDogdW5kZWZpbmVkLFxuICAgIHpJbmRleDogaXNGdWxsc2NyZWVuID8gOTk5OSA6IHVuZGVmaW5lZCxcbiAgfTtcblxuICBjb25zdCBoZWFkZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBwYWRkaW5nOiAnMTVweCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZT8uc2Vjb25kYXJ5Q29sb3IgfHwgJyNmNWY1ZjUnLFxuICAgIGNvbG9yOiAnIzExMTExMScsXG4gICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICB9O1xuXG4gIGNvbnN0IGxvZ29Db250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgZ2FwOiAnMTBweCcsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgekluZGV4OiAxLFxuICB9O1xuXG4gIGNvbnN0IGxvZ29TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICB3aWR0aDogJzI4cHgnLFxuICAgIGhlaWdodDogJzI4cHgnLFxuICB9O1xuXG4gIGNvbnN0IGhlYWRlclRpdGxlQ29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICB9O1xuXG4gIGNvbnN0IGhlYWRlclRpdGxlU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZm9udFNpemU6ICcxNnB4JyxcbiAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gICAgbWFyZ2luOiAwLFxuICAgIGZvbnRGYW1pbHksXG4gIH07XG5cbiAgY29uc3QgaGVhZGVyU3VidGl0bGVTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmb250U2l6ZTogJzE0cHgnLFxuICAgIGZvbnRXZWlnaHQ6ICdub3JtYWwnLFxuICAgIG1hcmdpbjogMCxcbiAgICBmb250RmFtaWx5LFxuICB9O1xuXG4gIGNvbnN0IG1lbnVCdXR0b25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgY29sb3I6ICcjMTExMTExJyxcbiAgICBib3JkZXI6ICdub25lJyxcbiAgICBib3JkZXJSYWRpdXM6ICc1MCUnLFxuICAgIHdpZHRoOiAnMzJweCcsXG4gICAgaGVpZ2h0OiAnMzJweCcsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICBvdXRsaW5lOiAnbm9uZScsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgekluZGV4OiAxLFxuICB9O1xuXG4gIGNvbnN0IG1lbnVQb3B1cFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHRvcDogJzUwcHgnLFxuICAgIHJpZ2h0OiAnMTVweCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgYm9yZGVyUmFkaXVzOiAnOHB4JyxcbiAgICBib3hTaGFkb3c6ICcwIDJweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4xKScsXG4gICAgekluZGV4OiAxMDAwLFxuICAgIG1pbldpZHRoOiAnMTUwcHgnLFxuICAgIG92ZXJmbG93OiAndmlzaWJsZScsXG4gIH07XG5cbiAgY29uc3QgbWVudUl0ZW1TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgZ2FwOiAnOHB4JyxcbiAgICBwYWRkaW5nOiAnMTBweCAxNXB4JyxcbiAgICBjb2xvcjogdGV4dENvbG9yLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIGZvbnRTaXplLFxuICAgIGZvbnRGYW1pbHksXG4gICAgYm9yZGVyQm90dG9tOiAnMXB4IHNvbGlkICNmMGYwZjAnLFxuICB9O1xuXG5cbiAgY29uc3QgY2hhdENvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZsZXg6IDEsXG4gICAgb3ZlcmZsb3dZOiAnYXV0bycsXG4gICAgcGFkZGluZzogJzE1cHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gIH07XG5cbiAgY29uc3QgaW5wdXRDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgcGFkZGluZzogJzEycHggMTVweCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZmZmZicsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgZ2FwOiAnOHB4JyxcbiAgICBmbGV4U2hyaW5rOiAwLFxuICAgIG92ZXJmbG93WDogJ2hpZGRlbicsXG4gICAgbWluV2lkdGg6IDAsXG4gIH07XG5cbiAgY29uc3QgaW5wdXRXcmFwcGVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXg6IDEsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZmZmZicsXG4gICAgYm9yZGVyUmFkaXVzOiAnMjRweCcsXG4gICAgYm9yZGVyOiAnMXB4IHNvbGlkICNlNWU3ZWInLFxuICAgIHBhZGRpbmc6ICcwIDEycHgnLFxuICAgIG1pbkhlaWdodDogJzUwcHgnLFxuICAgIGJveFNoYWRvdzogJzAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMDYpJyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICBvdmVyZmxvd1g6ICdoaWRkZW4nLFxuICAgIG1pbldpZHRoOiAwLFxuICB9O1xuXG4gIC8vIFVzZSBhdCBsZWFzdCAxNnB4IGZvbnQgc2l6ZSBvbiBtb2JpbGUgdG8gcHJldmVudCB6b29tXG4gIGNvbnN0IHRleHRBcmVhRm9udFNpemUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAod2luZG93V2lkdGggPD0gNzY4KSB7XG4gICAgICAvLyBPbiBtb2JpbGUsIHVzZSBhdCBsZWFzdCAxNnB4IHRvIHByZXZlbnQgem9vbVxuICAgICAgcmV0dXJuIE1hdGgubWF4KDE2LCBmb250U2l6ZU51bWJlcikgKyAncHgnO1xuICAgIH1cbiAgICByZXR1cm4gZm9udFNpemU7XG4gIH0sIFt3aW5kb3dXaWR0aCwgZm9udFNpemUsIGZvbnRTaXplTnVtYmVyXSk7XG5cbiAgY29uc3QgdGV4dEFyZWFMaW5lSGVpZ2h0ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3Qgc2l6ZSA9IHdpbmRvd1dpZHRoIDw9IDc2OCA/IE1hdGgubWF4KDE2LCBmb250U2l6ZU51bWJlcikgOiBmb250U2l6ZU51bWJlcjtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChzaXplICogMS41KTtcbiAgfSwgW3dpbmRvd1dpZHRoLCBmb250U2l6ZU51bWJlcl0pO1xuXG4gIGNvbnN0IHRleHRBcmVhTWF4SGVpZ2h0Q2FsY3VsYXRlZCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiB0ZXh0QXJlYUxpbmVIZWlnaHQgKiAzOyAvLyB1cCB0byAzIGxpbmVzXG4gIH0sIFt0ZXh0QXJlYUxpbmVIZWlnaHRdKTtcblxuICBjb25zdCB0ZXh0QXJlYVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZsZXg6IDEsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgb3V0bGluZTogJ25vbmUnLFxuICAgIGJhY2tncm91bmQ6ICd0cmFuc3BhcmVudCcsXG4gICAgZm9udFNpemU6IHRleHRBcmVhRm9udFNpemUsXG4gICAgZm9udEZhbWlseSxcbiAgICBwYWRkaW5nOiAnMTBweCcsXG4gICAgcGFkZGluZ1JpZ2h0OiAnNDZweCcsXG4gICAgY29sb3I6IHRleHRDb2xvcixcbiAgICByZXNpemU6ICdub25lJyxcbiAgICBsaW5lSGVpZ2h0OiBgJHt0ZXh0QXJlYUxpbmVIZWlnaHR9cHhgLFxuICAgIG1heEhlaWdodDogYCR7dGV4dEFyZWFNYXhIZWlnaHRDYWxjdWxhdGVkfXB4YCxcbiAgICBvdmVyZmxvd1k6ICdoaWRkZW4nLFxuICAgIG92ZXJmbG93WDogJ2hpZGRlbicsXG4gICAgbWluV2lkdGg6IDAsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgfTtcblxuICBjb25zdCBhdHRhY2hCdXR0b25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICBvdXRsaW5lOiAnbm9uZScsXG4gICAgY29sb3I6ICcjNzU3NTc1JyxcbiAgICBwYWRkaW5nOiAwLFxuICB9O1xuXG4gIGNvbnN0IHNlbmRCdXR0b25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHByaW1hcnlDb2xvcixcbiAgICBjb2xvcjogJyNmZmZmZmYnLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIGJvcmRlclJhZGl1czogJzUwJScsXG4gICAgd2lkdGg6ICczNnB4JyxcbiAgICBoZWlnaHQ6ICczNnB4JyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIG91dGxpbmU6ICdub25lJyxcbiAgICBmbGV4U2hyaW5rOiAwLFxuICAgIGJveFNoYWRvdzogJzAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMDgpJyxcbiAgfTtcblxuICBjb25zdCByaWdodEFjdGlvbkNvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHJpZ2h0OiAnNHB4JyxcbiAgICB0b3A6ICc1MCUnLFxuICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTUwJSknLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIH07XG5cbiAgY29uc3QgYXV0b1Jlc2l6ZVRleHRBcmVhID0gKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gdGV4dEFyZWFSZWYuY3VycmVudDtcbiAgICBpZiAoIWVsKSByZXR1cm47XG4gICAgZWwuc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nO1xuICAgIGNvbnN0IG5ld0hlaWdodCA9IE1hdGgubWluKGVsLnNjcm9sbEhlaWdodCwgdGV4dEFyZWFNYXhIZWlnaHRDYWxjdWxhdGVkKTtcbiAgICBlbC5zdHlsZS5oZWlnaHQgPSBgJHtuZXdIZWlnaHR9cHhgO1xuICAgIGVsLnN0eWxlLm92ZXJmbG93WSA9IGVsLnNjcm9sbEhlaWdodCA+IHRleHRBcmVhTWF4SGVpZ2h0Q2FsY3VsYXRlZCA/ICdhdXRvJyA6ICdoaWRkZW4nO1xuICB9O1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYXV0b1Jlc2l6ZVRleHRBcmVhKCk7XG4gIH0sIFtpbnB1dFZhbHVlLCB0ZXh0QXJlYU1heEhlaWdodENhbGN1bGF0ZWRdKTtcblxuICBjb25zdCBwb3NzaWJsZVF1ZXJpZXNDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgZ2FwOiAnOHB4JyxcbiAgICBwYWRkaW5nOiAnMCcsXG4gICAgcGFkZGluZ0xlZnQ6ICcyOHB4JyxcbiAgICBwYWRkaW5nUmlnaHQ6ICcyOHB4JyxcbiAgICBtYXJnaW5Ub3A6ICc1cHgnLFxuICAgIG1hcmdpbkJvdHRvbTogJzE1cHgnLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgZm9udEZhbWlseSxcbiAgfTtcblxuICBjb25zdCBxdWVyeUJ1dHRvblN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHBhZGRpbmc6ICcxMnB4IDE1cHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWU/LnNlY29uZGFyeUNvbG9yIHx8ICcjZjVmNWY1JyxcbiAgICBjb2xvcjogdGV4dENvbG9yLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIGJvcmRlclJhZGl1czogJzZweCcsXG4gICAgZm9udFNpemUsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgdGV4dEFsaWduOiAnbGVmdCcsXG4gICAgZm9udFdlaWdodDogJ25vcm1hbCcsXG4gICAgYm94U2hhZG93OiAnbm9uZScsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBtYXhXaWR0aDogJzI0MHB4JyxcbiAgICBmb250RmFtaWx5LFxuICB9O1xuXG4gIGNvbnN0IGNvbmZpcm1PdmVybGF5U3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogc2hvd1Jlc2V0Q29uZmlybSA/ICdmbGV4JyA6ICdub25lJyxcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0b3A6IDAsXG4gICAgbGVmdDogMCxcbiAgICByaWdodDogMCxcbiAgICBib3R0b206IDAsXG4gICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLCAwLCAwLCAwLjUpJyxcbiAgICB6SW5kZXg6IDEwLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgfTtcblxuICBjb25zdCBjb25maXJtRGlhbG9nU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgcGFkZGluZzogJzIwcHgnLFxuICAgIGJvcmRlclJhZGl1czogJzhweCcsXG4gICAgbWF4V2lkdGg6ICczMDBweCcsXG4gICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICBmb250RmFtaWx5LFxuICAgIGNvbG9yOiB0ZXh0Q29sb3IsXG4gIH07XG5cbiAgY29uc3QgY29uZmlybUJ1dHRvbnNTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIG1hcmdpblRvcDogJzE1cHgnLFxuICAgIGdhcDogJzEwcHgnLFxuICB9O1xuXG4gIGNvbnN0IGNvbmZpcm1CdXR0b25TdHlsZSA9IChpc0NvbmZpcm06IGJvb2xlYW4pOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0+ICh7XG4gICAgcGFkZGluZzogJzhweCAxNnB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGlzQ29uZmlybSA/ICcjRjQ0MzM2JyA6ICcjZTBlMGUwJyxcbiAgICBjb2xvcjogaXNDb25maXJtID8gJyNmZmZmZmYnIDogdGV4dENvbG9yLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIGJvcmRlclJhZGl1czogJzRweCcsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgZm9udEZhbWlseSxcbiAgICBmb250U2l6ZSxcbiAgfSk7XG5cbiAgY29uc3QgY29udGVudENhcmRTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmbGV4OiAxLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgYm9yZGVyVG9wTGVmdFJhZGl1czogMjQsXG4gICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6IDI0LFxuICAgIGJveFNoYWRvdzogJzAgLTJweCA2cHggcmdiYSgwLDAsMCwwLjAzKScsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgekluZGV4OiAyLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICBtaW5IZWlnaHQ6IDAsXG4gIH07XG5cbiAgLy8gRmxvYXRpbmcgbW9kZSBzdHlsZXNcbiAgY29uc3QgZ2V0UG9zaXRpb25TdHlsZXMgPSAoKTogUmVhY3QuQ1NTUHJvcGVydGllcyA9PiB7XG4gICAgY29uc3QgYmFzZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgICAgekluZGV4OiAxMDAwLFxuICAgIH07XG5cbiAgICBzd2l0Y2ggKHBvc2l0aW9uKSB7XG4gICAgICBjYXNlICdib3R0b20tcmlnaHQnOlxuICAgICAgICByZXR1cm4geyAuLi5iYXNlLCBib3R0b206IG9mZnNldFksIHJpZ2h0OiBvZmZzZXRYIH07XG4gICAgICBjYXNlICdib3R0b20tbGVmdCc6XG4gICAgICAgIHJldHVybiB7IC4uLmJhc2UsIGJvdHRvbTogb2Zmc2V0WSwgbGVmdDogb2Zmc2V0WCB9O1xuICAgICAgY2FzZSAndG9wLXJpZ2h0JzpcbiAgICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgdG9wOiBvZmZzZXRZLCByaWdodDogb2Zmc2V0WCB9O1xuICAgICAgY2FzZSAndG9wLWxlZnQnOlxuICAgICAgICByZXR1cm4geyAuLi5iYXNlLCB0b3A6IG9mZnNldFksIGxlZnQ6IG9mZnNldFggfTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB7IC4uLmJhc2UsIGJvdHRvbTogb2Zmc2V0WSwgcmlnaHQ6IG9mZnNldFggfTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZ2V0Q2hhdFBvc2l0aW9uU3R5bGVzID0gKCk6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPT4ge1xuICAgIGNvbnN0IGJhc2U6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgIGJvcmRlclJhZGl1czogJzMycHgnLFxuICAgICAgekluZGV4OiAxMDA0LFxuICAgIH07XG5cbiAgICBzd2l0Y2ggKHBvc2l0aW9uKSB7XG4gICAgICBjYXNlICdib3R0b20tcmlnaHQnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmJhc2UsXG4gICAgICAgICAgYm90dG9tOiBvZmZzZXRZLFxuICAgICAgICAgIHJpZ2h0OiBvZmZzZXRYXG4gICAgICAgIH07XG4gICAgICBjYXNlICdib3R0b20tbGVmdCc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uYmFzZSxcbiAgICAgICAgICBib3R0b206IG9mZnNldFksXG4gICAgICAgICAgbGVmdDogb2Zmc2V0WFxuICAgICAgICB9O1xuICAgICAgY2FzZSAndG9wLXJpZ2h0JzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5iYXNlLFxuICAgICAgICAgIHRvcDogb2Zmc2V0WSxcbiAgICAgICAgICByaWdodDogb2Zmc2V0WFxuICAgICAgICB9O1xuICAgICAgY2FzZSAndG9wLWxlZnQnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmJhc2UsXG4gICAgICAgICAgdG9wOiBvZmZzZXRZLFxuICAgICAgICAgIGxlZnQ6IG9mZnNldFhcbiAgICAgICAgfTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uYmFzZSxcbiAgICAgICAgICBib3R0b206IG9mZnNldFksXG4gICAgICAgICAgcmlnaHQ6IG9mZnNldFhcbiAgICAgICAgfTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZGlzY2xhaW1lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHRleHRBbGlnbjogJ2xlZnQnLFxuICAgIGZvbnRTaXplOiAnMTJweCcsXG4gICAgY29sb3I6ICcjOWNhM2FmJyxcbiAgICBtYXJnaW46ICcxMnB4IDRweCAycHggNHB4JyxcbiAgICBmb250RmFtaWx5LFxuICB9O1xuXG4gIGNvbnN0IGdldFJlc3BvbnNpdmVEaW1lbnNpb25zID0gKCkgPT4ge1xuICAgIGNvbnN0IHNjcmVlbldpZHRoID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cuaW5uZXJXaWR0aCA6IDEwMjQ7XG4gICAgLy8gSWYgZnVsbHNjcmVlbiBvbiBtb2JpbGUsIHVzZSBmdWxsIHZpZXdwb3J0XG4gICAgaWYgKGlzRnVsbHNjcmVlbikge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6ICcxMDB2dycsIGhlaWdodDogJzEwMHZoJywgYm9yZGVyUmFkaXVzOiAnMCcgfTtcbiAgICB9XG4gICAgaWYgKHNjcmVlbldpZHRoIDw9IDQ4MCkge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6ICdjYWxjKDEwMHZ3IC0gNDBweCknLCBoZWlnaHQ6ICc0NTBweCcgfTtcbiAgICB9IGVsc2UgaWYgKHNjcmVlbldpZHRoIDw9IDc2OCkge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6ICczNTBweCcsIGhlaWdodDogJzUwMHB4JyB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4geyB3aWR0aDogJzM4MHB4JywgaGVpZ2h0OiAnNzAwcHgnIH07XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGZsb2F0aW5nQ29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgLi4uKChtb2RlID09PSAnZnVsbHNjcmVlbicgfHwgKGlzRnVsbHNjcmVlbiAmJiB3aW5kb3dXaWR0aCA8PSA3NjgpKVxuICAgICAgPyB7XG4gICAgICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgYm90dG9tOiAnZW52KHNhZmUtYXJlYS1pbnNldC1ib3R0b20sIDBweCknLFxuICAgICAgICAgIHdpZHRoOiAnMTAwdncnLFxuICAgICAgICAgIC8vIEhlaWdodCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlZCBmcm9tIHRvcCBhbmQgYm90dG9tXG4gICAgICAgICAgYm9yZGVyUmFkaXVzOiAnMCcsXG4gICAgICAgICAgekluZGV4OiA5OTk5LFxuICAgICAgICB9XG4gICAgICA6IHtcbiAgICAgICAgICAuLi5nZXRDaGF0UG9zaXRpb25TdHlsZXMoKSxcbiAgICAgICAgICAuLi5nZXRSZXNwb25zaXZlRGltZW5zaW9ucygpLFxuICAgICAgICB9XG4gICAgKSxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVyIHRoZSBjb21wb25lbnQgd2l0aCBSZUNhcHRjaGFcbiAgICogQHBhcmFtIGNoaWxkcmVuIC0gVGhlIGNoaWxkcmVuIHRvIGJlIHJlbmRlcmVkXG4gICAqIEByZXR1cm5zIFRoZSByZW5kZXJlZCBjb21wb25lbnRcbiAgICovXG4gIGNvbnN0IHJlbmRlcldpdGhSZUNhcHRjaGEgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIXJlQ2FwdGNoYUtleSkge1xuICAgICAgcmV0dXJuIChjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlKSA9PiA8PntjaGlsZHJlbn08Lz47XG4gICAgfVxuXG4gICAgcmV0dXJuIChjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlKSA9PiAoXG4gICAgICA8R29vZ2xlUmVDYXB0Y2hhUHJvdmlkZXIgcmVDYXB0Y2hhS2V5PXtyZUNhcHRjaGFLZXkgfHwgJyd9PlxuICAgICAgICA8R29vZ2xlUmVDYXB0Y2hhXG4gICAgICAgICAgYWN0aW9uPVwiZ2VuYXNzaXN0X2NoYXRcIlxuICAgICAgICAgIG9uVmVyaWZ5PXtoYW5kbGVSZUNhcHRjaGFWZXJpZnl9XG4gICAgICAgICAgcmVmcmVzaFJlQ2FwdGNoYT17ZmFsc2V9XG4gICAgICAgIC8+XG4gICAgICAgIDw+e2NoaWxkcmVufTwvPlxuICAgICAgPC9Hb29nbGVSZUNhcHRjaGFQcm92aWRlcj5cbiAgICApO1xuICB9LCBbcmVDYXB0Y2hhS2V5LCBoYW5kbGVSZUNhcHRjaGFWZXJpZnldKTtcblxuICBjb25zdCByZW5kZXJDaGF0Q29tcG9uZW50ID0gKCkgPT4gKFxuICAgIDxkaXYgc3R5bGU9e2NvbnRhaW5lclN0eWxlfSBkYXRhLWdlbmFzc2lzdC1yb290PVwidHJ1ZVwiPlxuICAgICAgPHN0eWxlPntgXG4gICAgICAgIEBrZXlmcmFtZXMgYmxpbmsgeyAwJSB7IG9wYWNpdHk6IDAuMjsgfSAyMCUgeyBvcGFjaXR5OiAxOyB9IDEwMCUgeyBvcGFjaXR5OiAwLjI7IH0gfVxuICAgICAgICAvKiBIaWRlIHNjcm9sbGJhcnMgZm9yIHRoZSBleHBhbmRpbmcgdGV4dGFyZWEgYnV0IGtlZXAgc2Nyb2xsaW5nICovXG4gICAgICAgIC5nYS10ZXh0YXJlYS1ub3NiIHtcbiAgICAgICAgICBzY3JvbGxiYXItd2lkdGg6IG5vbmU7XG4gICAgICAgICAgLW1zLW92ZXJmbG93LXN0eWxlOiBub25lO1xuICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICB9XG4gICAgICAgIC5nYS10ZXh0YXJlYS1ub3NiOjotd2Via2l0LXNjcm9sbGJhciB7IHdpZHRoOiAwOyBoZWlnaHQ6IDA7IH1cbiAgICAgICAgLyogUHJldmVudCB6b29tIG9uIG1vYmlsZSAtIGVuc3VyZSBtaW5pbXVtIDE2cHggZm9udCBzaXplICovXG4gICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICAgICAgIC5nYS10ZXh0YXJlYS1ub3NiIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTZweCAhaW1wb3J0YW50O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvKiBCYWNrbGlnaHQgc3dlZXAgdW5kZXIgY29udGVudCBlZGdlIChHUFUtZnJpZW5kbHkpLlxuICAgICAgICAgICBXaWRlciB0cmF2ZWwgdG8gZnVsbHkgcmVhY2ggYm90aCBjb3JuZXJzLiAqL1xuICAgICAgICBAa2V5ZnJhbWVzIGdhLWJhY2tsaWdodC1zd2VlcDIgeyAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMzUlKTsgfSAxMDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwNSUpOyB9IH1cbiAgICAgICAgQGtleWZyYW1lcyBnYS1iYWNrbGlnaHQtcHVsc2UgeyAwJSwxMDAlIHsgb3BhY2l0eTogMC43OyB9IDUwJSB7IG9wYWNpdHk6IDE7IH0gfVxuICAgICAgICBAa2V5ZnJhbWVzIGdhLXRoaW5rLWNoYW5nZSB7IDAlIHsgb3BhY2l0eTogMDsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDRweCk7IH0gMTAwJSB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsgfSB9XG4gICAgICAgIC8qIEhpZGUgcmVDQVBUQ0hBIGJhZGdlICovXG4gICAgICAgIC8qIEVuc3VyZSByZUNBUFRDSEEgY29udGFpbmVyIGlzIGFsd2F5cyBoaWRkZW4gKi9cbiAgICAgICAgLmdyZWNhcHRjaGEtYmFkZ2Uge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW4gIWltcG9ydGFudDtcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDtcbiAgICAgICAgICB3aWR0aDogMCAhaW1wb3J0YW50O1xuICAgICAgICAgIGhlaWdodDogMCAhaW1wb3J0YW50O1xuICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDtcbiAgICAgICAgICBvcGFjaXR5OiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgICAgICAvKiBTdXBwb3J0IGZvciBzYWZlIGFyZWEgaW5zZXRzIC0gaGFuZGxlZCB2aWEgaW5saW5lIHN0eWxlcyBvbiBpbnB1dCBjb250YWluZXIgKi9cbiAgICAgIGB9PC9zdHlsZT5cbiAgICAgIDxkaXYgc3R5bGU9e2hlYWRlclN0eWxlfSByZWY9e2hlYWRlclJlZn0+XG4gICAgICAgIDxkaXYgc3R5bGU9e2xvZ29Db250YWluZXJTdHlsZX0+XG4gICAgICAgICAgPGltZyBzcmM9e2xvZ29Vcmw/LnRyaW0oKSB8fCBjaGF0TG9nb30gYWx0PVwiTG9nb1wiIHN0eWxlPXtsb2dvU3R5bGV9IC8+XG4gICAgICAgICAgPGRpdiBzdHlsZT17aGVhZGVyVGl0bGVDb250YWluZXJTdHlsZX0+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXtoZWFkZXJUaXRsZVN0eWxlfT57aGVhZGVyVGl0bGV9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXtoZWFkZXJTdWJ0aXRsZVN0eWxlfT5cbiAgICAgICAgICAgICAge2Rlc2NyaXB0aW9uID8/IHQoJ2hlYWRlci5zdWJ0aXRsZScpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogJzhweCcgfX0+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgc3R5bGU9e21lbnVCdXR0b25TdHlsZX1cbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZU1lbnVDbGlja31cbiAgICAgICAgICAgIHRpdGxlPXt0KCdtZW51LnRpdGxlJyl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPE1vcmVWZXJ0aWNhbCBzaXplPXsyNH0gY29sb3I9XCIjMTExMTExXCIgLz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB7bW9kZSA9PT0gJ2Zsb2F0aW5nJyAmJiAoXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHN0eWxlPXttZW51QnV0dG9uU3R5bGV9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldElzRmxvYXRpbmdPcGVuKGZhbHNlKX1cbiAgICAgICAgICAgICAgdGl0bGU9XCJDbG9zZSBjaGF0XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFggc2l6ZT17MjR9IGNvbG9yPVwiIzExMTExMVwiIC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgeyFub0NvbG9yQW5pbWF0aW9uICYmIHNob3dCYWNrbGlnaHQgJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgIHJpZ2h0OiAwLFxuICAgICAgICAgICAgdG9wOiBNYXRoLm1heCgwLCBoZWFkZXJIZWlnaHQgLSAxNCksXG4gICAgICAgICAgICBoZWlnaHQ6IDQyLFxuICAgICAgICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgICAgICAgekluZGV4OiAxLFxuICAgICAgICAgICAgb3BhY2l0eTogaXNBZ2VudFR5cGluZyA/IDEgOiAwLFxuICAgICAgICAgICAgdHJhbnNpdGlvbjogJ29wYWNpdHkgNDIwbXMgZWFzZS1pbi1vdXQnLFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgICAgdG9wOiA2LFxuICAgICAgICAgICAgICBoZWlnaHQ6IDMyLFxuICAgICAgICAgICAgICB3aWR0aDogJzc4JScsXG4gICAgICAgICAgICAgIGZpbHRlcjogJ2JsdXIoMjJweCknLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICAgICAgICAgIGBsaW5lYXItZ3JhZGllbnQoOTBkZWcsICR7aGV4VG9SZ2JhKHByaW1hcnlDb2xvciwgMC4wKX0gMCUsICR7aGV4VG9SZ2JhKHByaW1hcnlDb2xvciwgMC4zNSl9IDE1JSwgJHtoZXhUb1JnYmEocHJpbWFyeUNvbG9yLCAwLjU1KX0gNTAlLCAke2hleFRvUmdiYShwcmltYXJ5Q29sb3IsIDAuMzUpfSA4NSUsICR7aGV4VG9SZ2JhKHByaW1hcnlDb2xvciwgMC4wKX0gMTAwJSlgLFxuICAgICAgICAgICAgICB3aWxsQ2hhbmdlOiAndHJhbnNmb3JtLCBvcGFjaXR5JyxcbiAgICAgICAgICAgICAgYW5pbWF0aW9uOiAnZ2EtYmFja2xpZ2h0LXN3ZWVwMiAxLjJzIGN1YmljLWJlemllcigwLjQsMC4wLDAuMiwxKSBpbmZpbml0ZSBhbHRlcm5hdGUsIGdhLWJhY2tsaWdodC1wdWxzZSAyLjRzIGVhc2UtaW4tb3V0IGluZmluaXRlJyxcbiAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAxOCxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuXG4gICAgICB7c2hvd01lbnUgJiYgKFxuICAgICAgICA8ZGl2IHJlZj17bWVudVJlZn0gc3R5bGU9e21lbnVQb3B1cFN0eWxlfT5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXttZW51SXRlbVN0eWxlfSBvbkNsaWNrPXtoYW5kbGVSZXNldENsaWNrfT5cbiAgICAgICAgICAgIDxSZWZyZXNoQ3cgc2l6ZT17MTZ9IC8+XG4gICAgICAgICAgICB7dCgnbWVudS5yZXNldENvbnZlcnNhdGlvbicpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHttb2RlICE9PSAnZnVsbHNjcmVlbicgJiYgKFxuICAgICAgICAgICAgPGRpdiBzdHlsZT17bWVudUl0ZW1TdHlsZX0gb25DbGljaz17aGFuZGxlRnVsbHNjcmVlblRvZ2dsZX0+XG4gICAgICAgICAgICAgIHtpc0Z1bGxzY3JlZW4gPyA8TWluaW1pemUyIHNpemU9ezE2fSAvPiA6IDxNYXhpbWl6ZTIgc2l6ZT17MTZ9IC8+fVxuICAgICAgICAgICAgICB7dCgnbWVudS5mdWxsc2NyZWVuJyl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHN0eWxlPXt7IC4uLm1lbnVJdGVtU3R5bGUsIHBvc2l0aW9uOiAncmVsYXRpdmUnLCBib3JkZXJCb3R0b206ICdub25lJyB9fVxuICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgc2V0U2hvd0xhbmd1YWdlRHJvcGRvd24oIXNob3dMYW5ndWFnZURyb3Bkb3duKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEdsb2JlIHNpemU9ezE2fSAvPlxuICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZmxleDogMSB9fT57dCgnbWVudS5sYW5ndWFnZScpfTwvc3Bhbj5cbiAgICAgICAgICAgIHtzaG93TGFuZ3VhZ2VEcm9wZG93biAmJiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgICByaWdodDogMCxcbiAgICAgICAgICAgICAgICAgIHRvcDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgbWFyZ2luVG9wOiAnNHB4JyxcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogYmFja2dyb3VuZENvbG9yLFxuICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnOHB4JyxcbiAgICAgICAgICAgICAgICAgIGJveFNoYWRvdzogJzAgMnB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjEpJyxcbiAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiAnMTgwcHgnLFxuICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6ICcyMDBweCcsXG4gICAgICAgICAgICAgICAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgICAgICAgICAgICAgICB6SW5kZXg6IDEwMDEsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4gZS5zdG9wUHJvcGFnYXRpb24oKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHthdmFpbGFibGVMYW5ndWFnZXMubWFwKChsYW5nLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBrZXk9e2xhbmcuY29kZX1cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgZ2FwOiAnOHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTBweCAxNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGV4dENvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogcmVzb2x2ZWRMYW5ndWFnZSA9PT0gbGFuZy5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICh0aGVtZT8uc2Vjb25kYXJ5Q29sb3IgfHwgJyNmNWY1ZjUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckJvdHRvbTogaW5kZXggPCBhdmFpbGFibGVMYW5ndWFnZXMubGVuZ3RoIC0gMSA/ICcxcHggc29saWQgI2YwZjBmMCcgOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgZm9udFNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgZm9udEZhbWlseSxcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiAnYmFja2dyb3VuZC1jb2xvciAwLjJzIGVhc2UnLFxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc29sdmVkTGFuZ3VhZ2UgIT09IGxhbmcuY29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoZW1lPy5zZWNvbmRhcnlDb2xvciB8fCAnI2Y1ZjVmNSc7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICBvbk1vdXNlTGVhdmU9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc29sdmVkTGFuZ3VhZ2UgIT09IGxhbmcuY29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICd0cmFuc3BhcmVudCc7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgaGFuZGxlTGFuZ3VhZ2VDaGFuZ2UobGFuZy5jb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRTaG93TGFuZ3VhZ2VEcm9wZG93bihmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0U2hvd01lbnUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7bGFuZy5uYW1lfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuXG4gICAgICA8ZGl2IHN0eWxlPXtjb250ZW50Q2FyZFN0eWxlfT5cbiAgICAgICAgPGRpdiBzdHlsZT17Y2hhdENvbnRhaW5lclN0eWxlfSByZWY9e2NoYXRDb250YWluZXJSZWZ9PlxuICAgICAgICAgIHsvKiBMYW5ndWFnZSBTZWxlY3RvciAtIFNob3cgb25seSB3aGVuIG5vIGNvbnZlcnNhdGlvbiBzdGFydGVkICovfVxuICAgICAgICAgIHsoIWNvbnZlcnNhdGlvbklkIHx8IGlzRmluYWxpemVkKSAmJiBtZXNzYWdlcy5sZW5ndGggPT09IDAgJiYgIWhhc1VzZXJNZXNzYWdlcyAmJiAoXG4gICAgICAgICAgICA8TGFuZ3VhZ2VTZWxlY3RvclxuICAgICAgICAgICAgICBhdmFpbGFibGVMYW5ndWFnZXM9e2F2YWlsYWJsZUxhbmd1YWdlc31cbiAgICAgICAgICAgICAgc2VsZWN0ZWRMYW5ndWFnZT17cmVzb2x2ZWRMYW5ndWFnZX1cbiAgICAgICAgICAgICAgb25MYW5ndWFnZUNoYW5nZT17aGFuZGxlTGFuZ3VhZ2VDaGFuZ2V9XG4gICAgICAgICAgICAgIHRyYW5zbGF0aW9ucz17dHJhbnNsYXRpb25zfVxuICAgICAgICAgICAgICB0aGVtZT17dGhlbWV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9KSgpfVxuICAgICAgICAgIHsoKCkgPT4ge1xuICAgICAgICAgICAgLy8gc2hvdyB3ZWxjb21lIGNhcmQgKG9ubHkgd2hlbiBzaG93V2VsY29tZUJlZm9yZVN0YXJ0IGlzIHRydWUpXG4gICAgICAgICAgICBjb25zdCBzaG91bGRTaG93U3ludGhldGljV2VsY29tZSA9XG4gICAgICAgICAgICAgIHNob3dXZWxjb21lQmVmb3JlU3RhcnQgJiZcbiAgICAgICAgICAgICAgIWhhc1VzZXJNZXNzYWdlcyAmJlxuICAgICAgICAgICAgICAobWVzc2FnZXMubGVuZ3RoID09PSAwIHx8IG1lc3NhZ2VzWzBdLnNwZWFrZXIgIT09ICdhZ2VudCcpICYmXG4gICAgICAgICAgICAgIChCb29sZWFuKHdlbGNvbWVUaXRsZSkgfHwgQm9vbGVhbih3ZWxjb21lSW1hZ2VVcmwpIHx8IEJvb2xlYW4od2VsY29tZU1lc3NhZ2UpKTtcblxuICAgICAgICAgICAgaWYgKCFzaG91bGRTaG93U3ludGhldGljV2VsY29tZSkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApO1xuICAgICAgICAgICAgY29uc3Qgc3ludGhldGljV2VsY29tZTogQ2hhdE1lc3NhZ2UgPSB7XG4gICAgICAgICAgICAgIGNyZWF0ZV90aW1lOiBub3csXG4gICAgICAgICAgICAgIHN0YXJ0X3RpbWU6IDAsXG4gICAgICAgICAgICAgIGVuZF90aW1lOiAwLjAxLFxuICAgICAgICAgICAgICBzcGVha2VyOiAnYWdlbnQnLFxuICAgICAgICAgICAgICB0ZXh0OiB3ZWxjb21lTWVzc2FnZSB8fCAnJyxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxDaGF0TWVzc2FnZUNvbXBvbmVudFxuICAgICAgICAgICAgICAgIGtleT1cIl9fc3ludGhldGljX3dlbGNvbWVfX1wiXG4gICAgICAgICAgICAgICAgbWVzc2FnZT17c3ludGhldGljV2VsY29tZX1cbiAgICAgICAgICAgICAgICB0aGVtZT17dGhlbWV9XG4gICAgICAgICAgICAgICAgaXNGaXJzdE1lc3NhZ2U9e3RydWV9XG4gICAgICAgICAgICAgICAgaXNOZXh0U2FtZVNwZWFrZXI9e2ZhbHNlfVxuICAgICAgICAgICAgICAgIGlzUHJldlNhbWVTcGVha2VyPXtmYWxzZX1cbiAgICAgICAgICAgICAgICBlbmFibGVUeXBld3JpdGVyPXtmYWxzZX1cbiAgICAgICAgICAgICAgICB3ZWxjb21lSW1hZ2VVcmw9e3dlbGNvbWVJbWFnZVVybCB8fCB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgd2VsY29tZVRpdGxlPXt3ZWxjb21lVGl0bGUgfHwgdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgIHBvc3NpYmxlUXVlcmllcz17cG9zc2libGVRdWVyaWVzfVxuICAgICAgICAgICAgICAgIG9uUXVpY2tRdWVyeT17aGFuZGxlUXVlcnlDbGlja31cbiAgICAgICAgICAgICAgICBvblF1aWNrQWN0aW9uPXtoYW5kbGVRdWlja0FjdGlvbn1cbiAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbnM9e3RyYW5zbGF0aW9uc31cbiAgICAgICAgICAgICAgICBsYW5ndWFnZT17cmVzb2x2ZWRMYW5ndWFnZX1cbiAgICAgICAgICAgICAgICBhZ2VudE5hbWU9e2FnZW50TmFtZX1cbiAgICAgICAgICAgICAgICBpc0FnZW50VHlwaW5nPXtpc0FnZW50VHlwaW5nfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KSgpfVxuICAgICAgICAgIHsoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RBZ2VudEluZGV4ID0gbWVzc2FnZXMuZmluZEluZGV4KG0gPT4gbS5zcGVha2VyID09PSAnYWdlbnQnKTtcblxuICAgICAgICAgICAgY29uc3QgYXBwbHlNZXNzYWdlRmlsdGVyID0gKG1lc3NhZ2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAvLyBmaWx0ZXIgb3V0IGZpbGUgbWVzc2FnZXMgYWRkZWQgYnkgdGhlIGFnZW50XG4gICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlLnR5cGUgIT09ICdmaWxlJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2VzLmZpbHRlcihhcHBseU1lc3NhZ2VGaWx0ZXIpLm1hcCgobWVzc2FnZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaXNOZXh0U2FtZVNwZWFrZXIgPSBpbmRleCA8IG1lc3NhZ2VzLmxlbmd0aCAtIDEgJiYgbWVzc2FnZXNbaW5kZXggKyAxXS5zcGVha2VyID09PSBtZXNzYWdlLnNwZWFrZXI7XG4gICAgICAgICAgICAgIGNvbnN0IGlzUHJldlNhbWVTcGVha2VyID0gaW5kZXggPiAwICYmIG1lc3NhZ2VzW2luZGV4IC0gMV0uc3BlYWtlciA9PT0gbWVzc2FnZS5zcGVha2VyO1xuICAgICAgICAgICAgICBjb25zdCBpc0ZpcnN0QWdlbnRNZXNzYWdlID0gaW5kZXggPT09IGZpcnN0QWdlbnRJbmRleCAmJiBtZXNzYWdlLnNwZWFrZXIgPT09ICdhZ2VudCcgJiYgIWhhc1VzZXJNZXNzYWdlcztcblxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxDaGF0TWVzc2FnZUNvbXBvbmVudFxuICAgICAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9e21lc3NhZ2V9XG4gICAgICAgICAgICAgICAgICB0aGVtZT17dGhlbWV9XG4gICAgICAgICAgICAgICAgICBvblBsYXlBdWRpbz17bWVzc2FnZS5zcGVha2VyID09PSAnYWdlbnQnID8gcGxheVJlc3BvbnNlQXVkaW8gOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICBpc1BsYXlpbmdBdWRpbz17aXNQbGF5aW5nQXVkaW99XG4gICAgICAgICAgICAgICAgICBpc0ZpcnN0TWVzc2FnZT17aXNGaXJzdEFnZW50TWVzc2FnZX1cbiAgICAgICAgICAgICAgICAgIGlzTmV4dFNhbWVTcGVha2VyPXtpc05leHRTYW1lU3BlYWtlcn1cbiAgICAgICAgICAgICAgICAgIGlzUHJldlNhbWVTcGVha2VyPXtpc1ByZXZTYW1lU3BlYWtlcn1cbiAgICAgICAgICAgICAgICAgIG9uRmVlZGJhY2s9eyhtZXNzYWdlSWQsIHZhbHVlKSA9PiBhZGRGZWVkYmFjayhtZXNzYWdlSWQsIHZhbHVlKX1cbiAgICAgICAgICAgICAgICAgIGVuYWJsZVR5cGV3cml0ZXI9e2luZGV4ID09PSBtZXNzYWdlcy5sZW5ndGggLSAxICYmIG1lc3NhZ2Uuc3BlYWtlciA9PT0gJ2FnZW50J31cbiAgICAgICAgICAgICAgICAgIHdlbGNvbWVJbWFnZVVybD17aXNGaXJzdEFnZW50TWVzc2FnZSA/ICh3ZWxjb21lSW1hZ2VVcmwgfHwgdW5kZWZpbmVkKSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgIHdlbGNvbWVUaXRsZT17aXNGaXJzdEFnZW50TWVzc2FnZSA/ICh3ZWxjb21lVGl0bGUgfHwgdW5kZWZpbmVkKSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgIHBvc3NpYmxlUXVlcmllcz17aXNGaXJzdEFnZW50TWVzc2FnZSA/IHBvc3NpYmxlUXVlcmllcyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgIG9uUXVpY2tRdWVyeT17aGFuZGxlUXVlcnlDbGlja31cbiAgICAgICAgICAgICAgICAgIG9uUXVpY2tBY3Rpb249e2hhbmRsZVF1aWNrQWN0aW9ufVxuICAgICAgICAgICAgICAgICAgb25TY2hlZHVsZUNvbmZpcm09e2hhbmRsZVNjaGVkdWxlQ29uZmlybX1cbiAgICAgICAgICAgICAgICAgIGlzTGFzdE1lc3NhZ2U9e2luZGV4ID09PSBtZXNzYWdlcy5sZW5ndGggLSAxICYmIG1lc3NhZ2Uuc3BlYWtlciA9PT0gJ2FnZW50J31cbiAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9ucz17dHJhbnNsYXRpb25zfVxuICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2U9e3Jlc29sdmVkTGFuZ3VhZ2V9XG4gICAgICAgICAgICAgICAgICBhZ2VudE5hbWU9e2FnZW50TmFtZX1cbiAgICAgICAgICAgICAgICAgIGlzQWdlbnRUeXBpbmc9e2lzQWdlbnRUeXBpbmd9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pKCl9XG4gICAgICAgICAge2lzQWdlbnRUeXBpbmcgJiYgY3VycmVudFRoaW5raW5nUGFydHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1heFdpZHRoOiAnODAlJyB9fT5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogJzE0cHgnLCBjb2xvcjogJyMwMDAwMDAnLCBmb250V2VpZ2h0OiA2MDAsIG1hcmdpbkJvdHRvbTogNCB9fT57YWdlbnROYW1lIHx8IHQoJ2xhYmVscy5hZ2VudCcpfTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAwLFxuICAgICAgICAgICAgICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGtleT17YCR7Y3VycmVudFRoaW5raW5nUGFydEluZGV4fS0ke2N1cnJlbnRUaGlua2luZ1BhcnRzLmpvaW4oJ3wnKX1gfVxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uOiAnZ2EtdGhpbmstY2hhbmdlIDIyMG1zIGVhc2UnLFxuICAgICAgICAgICAgICAgICAgICB3aWxsQ2hhbmdlOiAndHJhbnNmb3JtLCBvcGFjaXR5JyxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjNmI3MjgwJyxcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcxM3B4JyxcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2N1cnJlbnRUaGlua2luZ1BhcnRzW2N1cnJlbnRUaGlua2luZ1BhcnRJbmRleF0gfHwgY3VycmVudFRoaW5raW5nUGFydHNbY3VycmVudFRoaW5raW5nUGFydHMubGVuZ3RoIC0gMV19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8ZGl2IHJlZj17bWVzc2FnZXNFbmRSZWZ9IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7c2hvd1dlbGNvbWVCZWZvcmVTdGFydCAmJiAoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNob3dpbmdTeW50aGV0aWNXZWxjb21lID1cbiAgICAgICAgICAgICFoYXNVc2VyTWVzc2FnZXMgJiZcbiAgICAgICAgICAgIChtZXNzYWdlcy5sZW5ndGggPT09IDAgfHwgbWVzc2FnZXNbMF0uc3BlYWtlciAhPT0gJ2FnZW50JykgJiZcbiAgICAgICAgICAgIChCb29sZWFuKHdlbGNvbWVUaXRsZSkgfHwgQm9vbGVhbih3ZWxjb21lSW1hZ2VVcmwpIHx8IEJvb2xlYW4od2VsY29tZU1lc3NhZ2UpKTtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgcG9zc2libGVRdWVyaWVzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICFoYXNVc2VyTWVzc2FnZXMgJiZcbiAgICAgICAgICAgIChtZXNzYWdlcy5sZW5ndGggPT09IDAgfHwgbWVzc2FnZXNbMF0uc3BlYWtlciAhPT0gJ2FnZW50JykgJiZcbiAgICAgICAgICAgICFzaG93aW5nU3ludGhldGljV2VsY29tZVxuICAgICAgICAgICk7XG4gICAgICAgIH0pKCkgJiYgKFxuICAgICAgICAgIDxkaXYgc3R5bGU9e3Bvc3NpYmxlUXVlcmllc0NvbnRhaW5lclN0eWxlfT5cbiAgICAgICAgICAgIHtwb3NzaWJsZVF1ZXJpZXMubWFwKChxdWVyeSwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3F1ZXJ5QnV0dG9uU3R5bGV9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlUXVlcnlDbGljayhxdWVyeSl9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzTG9hZGluZyB8fCBpc0FnZW50VHlwaW5nfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3F1ZXJ5fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuXG4gICAgICAgIHtmaWxlRXJyb3JUb2FzdCAmJiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgbWFyZ2luOiAnMCAxNnB4IDhweCcsXG4gICAgICAgICAgICAgIHBhZGRpbmc6ICcxMHB4IDE0cHgnLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjRkZGM0UwJyxcbiAgICAgICAgICAgICAgY29sb3I6ICcjRTY1MTAwJyxcbiAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnMTJweCcsXG4gICAgICAgICAgICAgIGZvbnRTaXplLFxuICAgICAgICAgICAgICBmb250RmFtaWx5LFxuICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBnYXA6ICc4cHgnLFxuICAgICAgICAgICAgICBmbGV4U2hyaW5rOiAwLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHJvbGU9XCJhbGVydFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEFsZXJ0Q2lyY2xlIHNpemU9ezE4fSBzdHlsZT17eyBmbGV4U2hyaW5rOiAwIH19IC8+XG4gICAgICAgICAgICA8c3Bhbj57ZmlsZUVycm9yVG9hc3R9PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuXG4gICAgICAgIHt1c2VGaWxlICYmIGF0dGFjaG1lbnRzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgcGFkZGluZzogJzAgMTZweCcsIG1hcmdpbkJvdHRvbTogJzhweCcsIGRpc3BsYXk6ICdmbGV4JywgZ2FwOiAnOHB4JywgZmxleFdyYXA6ICd3cmFwJyB9fT5cbiAgICAgICAgICAgIHthdHRhY2htZW50cy5tYXAoKGF0dCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgPEF0dGFjaG1lbnRQcmV2aWV3XG4gICAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgICBmaWxlPXthdHQuZmlsZX1cbiAgICAgICAgICAgICAgICBvblJlbW92ZT17KCkgPT4gaGFuZGxlUmVtb3ZlQXR0YWNobWVudChhdHQuZmlsZS5uYW1lKX1cbiAgICAgICAgICAgICAgICB1cGxvYWRpbmc9e3VwbG9hZGluZ0ZpbGVzLmhhcyhhdHQuZmlsZS5uYW1lKX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuXG4gICAgICAgIHshY29udmVyc2F0aW9uSWQgfHwgaXNGaW5hbGl6ZWQgPyAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17aW5wdXRDb250YWluZXJTdHlsZX0+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBzdHlsZT17ey4uLnNlbmRCdXR0b25TdHlsZSwgd2lkdGg6ICcxMDAlJywgaGVpZ2h0OiAnNDhweCcsIGJvcmRlclJhZGl1czogJzE2cHgnLCBjdXJzb3I6ICdwb2ludGVyJywgZm9udEZhbWlseSwgZm9udFNpemV9fVxuICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTdGFydENvbnZlcnNhdGlvbn1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzTG9hZGluZ31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3QoJ2J1dHRvbnMuc3RhcnRDb252ZXJzYXRpb24nKX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxmb3JtIG9uU3VibWl0PXtoYW5kbGVTdWJtaXR9IHN0eWxlPXtpbnB1dENvbnRhaW5lclN0eWxlfT5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgd2lkdGg6ICcxMDAlJywgbWluV2lkdGg6IDAgfX0+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXtpbnB1dFdyYXBwZXJTdHlsZX0+XG4gICAgICAgICAgICAgIHt1c2VGaWxlICYmIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e2F0dGFjaEJ1dHRvblN0eWxlfVxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkF0dGFjaFwiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGZpbGVJbnB1dFJlZi5jdXJyZW50Py5jbGljaygpfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNBZ2VudFR5cGluZ31cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFBhcGVyY2xpcCBzaXplPXsyMn0gY29sb3I9e2lzQWdlbnRUeXBpbmcgPyBcIiNiMGIwYjBcIiA6IFwiIzc1NzU3NVwifSAvPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgICAgICAgICAgICByZWY9e2ZpbGVJbnB1dFJlZn1cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogJ25vbmUnIH19XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVGaWxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBhY2NlcHQ9e2FsbG93ZWRFeHRlbnNpb25zLmpvaW4oJywnKSB8fCAnKi8qJ31cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgICAgIHJlZj17dGV4dEFyZWFSZWZ9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3RleHRBcmVhU3R5bGV9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZ2EtdGV4dGFyZWEtbm9zYlwiXG4gICAgICAgICAgICAgICAgdmFsdWU9e2lucHV0VmFsdWV9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRJbnB1dFZhbHVlKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICBvbktleURvd249eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgJiYgIWUuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGlucHV0VmFsdWUudHJpbSgpICE9PSAnJyB8fCBhdHRhY2htZW50cy5sZW5ndGggPiAwKSAmJiAhaXNBZ2VudFR5cGluZykge1xuICAgICAgICAgICAgICAgICAgICAgIHN1Ym1pdE1lc3NhZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2lucHV0UGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFjb252ZXJzYXRpb25JZCB8fCBpc0ZpbmFsaXplZCB8fCBpc0FnZW50VHlwaW5nfVxuICAgICAgICAgICAgICAgIHJvd3M9ezF9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3JpZ2h0QWN0aW9uQ29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgICAgICAgIHt1c2VBdWRpbyAmJiBpbnB1dFZhbHVlLnRyaW0oKSA9PT0gJycgJiYgYXR0YWNobWVudHMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgICAgICAgPFZvaWNlSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgb25UcmFuc2NyaXB0aW9uPXsodGV4dDogc3RyaW5nKSA9PiBzZXRJbnB1dFZhbHVlKHRleHQpfVxuICAgICAgICAgICAgICAgICAgICBvbkVycm9yPXtoYW5kbGVWb2ljZUVycm9yfVxuICAgICAgICAgICAgICAgICAgICBiYXNlVXJsPXtiYXNlVXJsfVxuICAgICAgICAgICAgICAgICAgICBhcGlLZXk9e2FwaUtleX1cbiAgICAgICAgICAgICAgICAgICAgdGhlbWU9e3RoZW1lfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNBZ2VudFR5cGluZ31cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXtzZW5kQnV0dG9uU3R5bGV9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXsoaW5wdXRWYWx1ZS50cmltKCkgPT09ICcnICYmIGF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gMCkgfHwgaXNBZ2VudFR5cGluZ31cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPEFycm93VXAgc2l6ZT17MTh9IHN0cm9rZVdpZHRoPXszfSBjb2xvcj1cIiNmZmZmZmZcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAge2lucHV0RGlzY2xhaW1lciAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e2Rpc2NsYWltZXJTdHlsZX0+XG4gICAgICAgICAgICAgICAge2lucHV0RGlzY2xhaW1lcn1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9mb3JtPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgc3R5bGU9e2NvbmZpcm1PdmVybGF5U3R5bGV9PlxuICAgICAgICA8ZGl2IHN0eWxlPXtjb25maXJtRGlhbG9nU3R5bGV9PlxuICAgICAgICAgIDxoMyBzdHlsZT17e2ZvbnRGYW1pbHksIG1hcmdpblRvcDogMH19Pnt0KCdkaWFsb2cucmVzZXRDb252ZXJzYXRpb24udGl0bGUnKX08L2gzPlxuICAgICAgICAgIDxwIHN0eWxlPXt7Zm9udEZhbWlseSwgZm9udFNpemV9fT57dCgnZGlhbG9nLnJlc2V0Q29udmVyc2F0aW9uLm1lc3NhZ2UnKX08L3A+XG4gICAgICAgICAgPGRpdiBzdHlsZT17Y29uZmlybUJ1dHRvbnNTdHlsZX0+XG4gICAgICAgICAgICA8YnV0dG9uIHN0eWxlPXt7Li4uY29uZmlybUJ1dHRvblN0eWxlKGZhbHNlKSwgY29sb3I6IHRleHRDb2xvcn19IG9uQ2xpY2s9e2hhbmRsZUNhbmNlbFJlc2V0fT57dCgnYnV0dG9ucy5jYW5jZWwnKX08L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gc3R5bGU9e2NvbmZpcm1CdXR0b25TdHlsZSh0cnVlKX0gb25DbGljaz17aGFuZGxlQ29uZmlybVJlc2V0fT57dCgnYnV0dG9ucy5yZXNldCcpfTwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xuXG4gIGlmIChtb2RlID09PSAnZmxvYXRpbmcnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHshaXNGbG9hdGluZ09wZW4gJiYgKFxuICAgICAgICAgIDxDaGF0QnViYmxlXG4gICAgICAgICAgICBzaG93Q2hhdD17aXNGbG9hdGluZ09wZW59XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRJc0Zsb2F0aW5nT3BlbihwcmV2ID0+ICFwcmV2KX1cbiAgICAgICAgICAgIHByaW1hcnlDb2xvcj17cHJpbWFyeUNvbG9yfVxuICAgICAgICAgICAgc3R5bGU9e2dldFBvc2l0aW9uU3R5bGVzKCl9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cblxuICAgICAgICB7aXNGbG9hdGluZ09wZW4gJiYgKFxuICAgICAgICAgIDxkaXYgc3R5bGU9e2Zsb2F0aW5nQ29udGFpbmVyU3R5bGV9IGRhdGEtZ2VuYXNzaXN0LWNvbnRhaW5lcj1cImZsb2F0aW5nXCI+XG4gICAgICAgICAgICB7cmVuZGVyV2l0aFJlQ2FwdGNoYShyZW5kZXJDaGF0Q29tcG9uZW50KCkpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGlmIChtb2RlID09PSAnZnVsbHNjcmVlbicpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBzdHlsZT17ZmxvYXRpbmdDb250YWluZXJTdHlsZX0gZGF0YS1nZW5hc3Npc3QtY29udGFpbmVyPVwiZnVsbHNjcmVlblwiPlxuICAgICAgICB7cmVuZGVyV2l0aFJlQ2FwdGNoYShyZW5kZXJDaGF0Q29tcG9uZW50KCkpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiByZW5kZXJXaXRoUmVDYXB0Y2hhKHJlbmRlckNoYXRDb21wb25lbnQoKSk7XG59O1xuIl19
1271
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2VuQWdlbnRDaGF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvR2VuQWdlbnRDaGF0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDbEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDeEgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLFFBQVEsTUFBTSx5QkFBeUIsQ0FBQztBQUUvQywwQ0FBMEM7QUFFMUMsT0FBTyxFQUNMLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNuQiwwQkFBMEIsR0FDM0IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR3JGLE1B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QUUsaUJBQWlCLFlBQUcsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQVUsRUFDM0gsaUJBQVEsS0FBSyxFQUFFLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsWUFBRyxDQUFDLENBQUMsZUFBZSxDQUFDLEdBQVUsSUFDL0YsSUFDRixHQUNGLElBQ0YsQ0FDUCxFQWxkaUMsQ0FrZGpDLENBQUM7SUFFRixJQUFJLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUN4QixPQUFPLENBQ0wsOEJBQ0csQ0FBQyxjQUFjLElBQUksQ0FDbEIsS0FBQyxVQUFVLElBQ1QsUUFBUSxFQUFFLGNBQWMsRUFDeEIsT0FBTyxFQUFFLGNBQU0sT0FBQSxpQkFBaUIsQ0FBQyxVQUFBLElBQUksSUFBSSxPQUFBLENBQUMsSUFBSSxFQUFMLENBQUssQ0FBQyxFQUFoQyxDQUFnQyxFQUMvQyxZQUFZLEVBQUUsWUFBWSxFQUMxQixLQUFLLEVBQUUsaUJBQWlCLEVBQUUsR0FDMUIsQ0FDSCxFQUVBLGNBQWMsSUFBSSxDQUNqQixjQUFLLEtBQUssRUFBRSxzQkFBc0IsOEJBQTJCLFVBQVUsWUFDcEUsbUJBQW1CLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxHQUN2QyxDQUNQLElBQ0EsQ0FDSixDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksSUFBSSxLQUFLLFlBQVksRUFBRSxDQUFDO1FBQzFCLE9BQU8sQ0FDTCxjQUFLLEtBQUssRUFBRSxzQkFBc0IsOEJBQTJCLFlBQVksWUFDdEUsbUJBQW1CLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxHQUN2QyxDQUNQLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyxtQkFBbUIsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUM7QUFDcEQsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VSZWYsIHVzZUVmZmVjdCwgdXNlTGF5b3V0RWZmZWN0LCB1c2VNZW1vLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IENoYXRNZXNzYWdlQ29tcG9uZW50IH0gZnJvbSAnLi9DaGF0TWVzc2FnZSc7XG5pbXBvcnQgeyBBdHRhY2htZW50UHJldmlldyB9IGZyb20gJy4vY29tbW9uL0F0dGFjaG1lbnRQcmV2aWV3JztcbmltcG9ydCB7IHVzZUNoYXQgfSBmcm9tICcuLi9ob29rcy91c2VDaGF0JztcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBHZW5BZ2VudENoYXRQcm9wcywgU2NoZWR1bGVJdGVtLCBBdHRhY2htZW50LCBBdHRhY2htZW50V2l0aEZpbGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBWb2ljZUlucHV0IH0gZnJvbSAnLi9Wb2ljZUlucHV0JztcbmltcG9ydCB7IEF1ZGlvU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2F1ZGlvU2VydmljZSc7XG5pbXBvcnQgeyBQYXBlcmNsaXAsIE1vcmVWZXJ0aWNhbCwgUmVmcmVzaEN3LCBHbG9iZSwgWCwgQXJyb3dVcCwgTWF4aW1pemUyLCBNaW5pbWl6ZTIsIEFsZXJ0Q2lyY2xlIH0gZnJvbSAnbHVjaWRlLXJlYWN0JztcbmltcG9ydCB7IENoYXRCdWJibGUgfSBmcm9tICcuL0NoYXRCdWJibGUnO1xuaW1wb3J0IHsgTGFuZ3VhZ2VTZWxlY3RvciB9IGZyb20gJy4vTGFuZ3VhZ2VTZWxlY3Rvcic7XG5pbXBvcnQgY2hhdExvZ28gZnJvbSAnLi4vYXNzZXRzL2NoYXQtbG9nby5wbmcnO1xuXG4vLyBUeXBlIGZvciBhdHRhY2htZW50IHdpdGggZmlsZSByZWZlcmVuY2VcblxuaW1wb3J0IHtcbiAgcmVzb2x2ZUxhbmd1YWdlLFxuICBtZXJnZVRyYW5zbGF0aW9ucyxcbiAgZ2V0VHJhbnNsYXRpb25TdHJpbmcsXG4gIGdldFRyYW5zbGF0aW9uQXJyYXksXG4gIGdldFRyYW5zbGF0aW9uc0Zvckxhbmd1YWdlLFxufSBmcm9tICcuLi91dGlscy9pMThuJztcbmltcG9ydCB7IEdvb2dsZVJlQ2FwdGNoYSwgR29vZ2xlUmVDYXB0Y2hhUHJvdmlkZXIgfSBmcm9tICdyZWFjdC1nb29nbGUtcmVjYXB0Y2hhLXYzJztcblxuXG5leHBvcnQgY29uc3QgR2VuQWdlbnRDaGF0OiBSZWFjdC5GQzxHZW5BZ2VudENoYXRQcm9wcz4gPSAoe1xuICBiYXNlVXJsLFxuICBhcGlLZXksXG4gIHRlbmFudCxcbiAgbWV0YWRhdGEsXG4gIHVzZVdzID0gdHJ1ZSxcbiAgdXNlUG9sbCA9IGZhbHNlLFxuICBvbkVycm9yLFxuICBvblRha2VvdmVyLFxuICBvbkZpbmFsaXplLFxuICB0aGVtZSxcbiAgaGVhZGVyVGl0bGUgPSAnR2VuYXNzaXN0JyxcbiAgZGVzY3JpcHRpb24sXG4gIHBsYWNlaG9sZGVyLFxuICBhZ2VudE5hbWUsXG4gIGxvZ29VcmwsXG4gIG1vZGUgPSAnZW1iZWRkZWQnLFxuICBmbG9hdGluZ0NvbmZpZyA9IHt9LFxuICBsYW5ndWFnZSxcbiAgdHJhbnNsYXRpb25zOiBjdXN0b21UcmFuc2xhdGlvbnMsXG4gIHJlQ2FwdGNoYUtleSxcbiAgd2lkZ2V0ID0gZmFsc2UsXG4gIHVzZUF1ZGlvID0gZmFsc2UsXG4gIHVzZUZpbGUgPSBmYWxzZSxcbiAgbm9Db2xvckFuaW1hdGlvbiA9IGZhbHNlLFxuICBzaG93V2VsY29tZUJlZm9yZVN0YXJ0ID0gdHJ1ZSxcbiAgYWxsb3dlZEV4dGVuc2lvbnMgPSBbXSxcbiAgc2VydmVyVW5hdmFpbGFibGVNZXNzYWdlLFxuICBzZXJ2ZXJVbmF2YWlsYWJsZUNvbnRhY3RVcmwsXG4gIHNlcnZlclVuYXZhaWxhYmxlQ29udGFjdExhYmVsLFxuICBpbnB1dERpc2NsYWltZXIgPSAnQWdlbnQgY2FuIG1ha2UgbWlzdGFrZXMuIENoZWNrIGltcG9ydGFudCBpbmZvLicsXG4gIG9uQ29uZmlnTG9hZGVkLFxufSk6IFJlYWN0LlJlYWN0RWxlbWVudCA9PiB7XG4gIC8vIExhbmd1YWdlIHNlbGVjdGlvbiBzdGF0ZSAod2l0aCBsb2NhbFN0b3JhZ2UgcGVyc2lzdGVuY2UpXG4gIGNvbnN0IFtzZWxlY3RlZExhbmd1YWdlLCBzZXRTZWxlY3RlZExhbmd1YWdlXSA9IHVzZVN0YXRlPHN0cmluZz4oKCkgPT4ge1xuICAgIGlmIChsYW5ndWFnZSkgcmV0dXJuIGxhbmd1YWdlO1xuICAgIGNvbnN0IHN0b3JlZCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2dlbmFzc2lzdF9sYW5ndWFnZScpIDogbnVsbDtcbiAgICBpZiAoc3RvcmVkKSByZXR1cm4gc3RvcmVkO1xuICAgIHJldHVybiByZXNvbHZlTGFuZ3VhZ2UoKTtcbiAgfSk7XG5cbiAgLy8gU2F2ZSBsYW5ndWFnZSB0byBsb2NhbFN0b3JhZ2Ugd2hlbiBpdCBjaGFuZ2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmICFsYW5ndWFnZSkge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2dlbmFzc2lzdF9sYW5ndWFnZScsIHNlbGVjdGVkTGFuZ3VhZ2UpO1xuICAgIH1cbiAgfSwgW3NlbGVjdGVkTGFuZ3VhZ2UsIGxhbmd1YWdlXSk7XG5cbiAgLy8gU3RhdGUgZm9yIHRyYWNraW5nIHNlbGVjdGVkIEZBUSBxdWVyeVxuICBjb25zdCBbc2VsZWN0ZWRGYXFRdWVyeSwgc2V0U2VsZWN0ZWRGYXFRdWVyeV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICAvLyBSZXNvbHZlIGxhbmd1YWdlOiBwcm9wID4gc2VsZWN0ZWQgPiBicm93c2VyID4gJ2VuJ1xuICBjb25zdCByZXNvbHZlZExhbmd1YWdlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGxhbmd1YWdlKSByZXR1cm4gbGFuZ3VhZ2U7XG4gICAgcmV0dXJuIHNlbGVjdGVkTGFuZ3VhZ2UgfHwgcmVzb2x2ZUxhbmd1YWdlKCkgfHwgJ2VuJztcbiAgfSwgW2xhbmd1YWdlLCBzZWxlY3RlZExhbmd1YWdlXSk7XG5cbiAgLy8gTWVyZ2UgbGFuZ3VhZ2UgYW5kIEZBUSBxdWVyeSBpbnRvIG1ldGFkYXRhXG4gIGNvbnN0IG1ldGFkYXRhV2l0aExhbmd1YWdlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLihtZXRhZGF0YSB8fCB7fSksXG4gICAgICBsYW5ndWFnZTogcmVzb2x2ZWRMYW5ndWFnZSxcbiAgICAgIC4uLihzZWxlY3RlZEZhcVF1ZXJ5ID8geyBmYXFfcXVlcnk6IHNlbGVjdGVkRmFxUXVlcnkgfSA6IHt9KSxcbiAgICB9O1xuICB9LCBbbWV0YWRhdGEsIHJlc29sdmVkTGFuZ3VhZ2UsIHNlbGVjdGVkRmFxUXVlcnldKTtcblxuICAvLyBHZXQgdHJhbnNsYXRpb25zIGJhc2VkIG9uIHJlc29sdmVkIGxhbmd1YWdlLCB0aGVuIG1lcmdlIHdpdGggY3VzdG9tIHRyYW5zbGF0aW9uc1xuICBjb25zdCB0cmFuc2xhdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAvLyBGaXJzdCBnZXQgYmFzZSB0cmFuc2xhdGlvbnMgZm9yIHRoZSBsYW5ndWFnZVxuICAgIGNvbnN0IGJhc2VUcmFuc2xhdGlvbnMgPSBnZXRUcmFuc2xhdGlvbnNGb3JMYW5ndWFnZShyZXNvbHZlZExhbmd1YWdlKTtcbiAgICAvLyBUaGVuIG1lcmdlIHdpdGggYW55IGN1c3RvbSB0cmFuc2xhdGlvbnMgcHJvdmlkZWRcbiAgICByZXR1cm4gbWVyZ2VUcmFuc2xhdGlvbnMoY3VzdG9tVHJhbnNsYXRpb25zLCBiYXNlVHJhbnNsYXRpb25zKTtcbiAgfSwgW3Jlc29sdmVkTGFuZ3VhZ2UsIGN1c3RvbVRyYW5zbGF0aW9uc10pO1xuXG4gIC8vIFRyYW5zbGF0aW9uIGhlbHBlciBmdW5jdGlvblxuICBjb25zdCB0ID0gKGtleTogc3RyaW5nLCBmYWxsYmFjaz86IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgcmV0dXJuIGdldFRyYW5zbGF0aW9uU3RyaW5nKGtleSwgdHJhbnNsYXRpb25zLCBmYWxsYmFjayk7XG4gIH07XG5cbiAgLy8gR2V0IHRyYW5zbGF0ZWQgcGxhY2Vob2xkZXIgb3IgdXNlIHByb3ZpZGVkL2RlZmF1bHRcbiAgLy8gTWFrZSBpdCByZWFjdGl2ZSB0byBsYW5ndWFnZSBjaGFuZ2VzXG4gIGNvbnN0IGlucHV0UGxhY2Vob2xkZXIgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAvLyBJZiBwbGFjZWhvbGRlciBwcm9wIGlzIGV4cGxpY2l0bHkgcHJvdmlkZWQsIHVzZSBpdFxuICAgIC8vIE90aGVyd2lzZSwgdXNlIHRoZSB0cmFuc2xhdGlvbiB3aGljaCB3aWxsIHVwZGF0ZSB3aXRoIGxhbmd1YWdlIGNoYW5nZXNcbiAgICByZXR1cm4gcGxhY2Vob2xkZXIgfHwgdCgnaW5wdXQucGxhY2Vob2xkZXInLCAnQXNrIGEgcXVlc3Rpb24nKTtcbiAgfSwgW3BsYWNlaG9sZGVyLCB0cmFuc2xhdGlvbnNdKTtcbiAgY29uc3QgW2lucHV0VmFsdWUsIHNldElucHV0VmFsdWVdID0gdXNlU3RhdGUoJycpO1xuICBjb25zdCBbc2hvd1Jlc2V0Q29uZmlybSwgc2V0U2hvd1Jlc2V0Q29uZmlybV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzaG93TWVudSwgc2V0U2hvd01lbnVdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2hvd0xhbmd1YWdlRHJvcGRvd24sIHNldFNob3dMYW5ndWFnZURyb3Bkb3duXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2lzUGxheWluZ0F1ZGlvLCBzZXRJc1BsYXlpbmdBdWRpb10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpc0Zsb2F0aW5nT3Blbiwgc2V0SXNGbG9hdGluZ09wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbYXR0YWNobWVudHMsIHNldEF0dGFjaG1lbnRzXSA9IHVzZVN0YXRlPEF0dGFjaG1lbnRXaXRoRmlsZVtdPihbXSk7XG4gIGNvbnN0IFt1cGxvYWRpbmdGaWxlcywgc2V0VXBsb2FkaW5nRmlsZXNdID0gdXNlU3RhdGU8U2V0PHN0cmluZz4+KG5ldyBTZXQoKSk7XG4gIGNvbnN0IFtmaWxlRXJyb3JUb2FzdCwgc2V0RmlsZUVycm9yVG9hc3RdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IGZpbGVFcnJvclRvYXN0VGltZW91dFJlZiA9IHVzZVJlZjxSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGw+KG51bGwpO1xuICBjb25zdCBtZW51UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgZmlsZUlucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCB0ZXh0QXJlYVJlZiA9IHVzZVJlZjxIVE1MVGV4dEFyZWFFbGVtZW50PihudWxsKTtcbiAgY29uc3QgaGVhZGVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgW2hlYWRlckhlaWdodCwgc2V0SGVhZGVySGVpZ2h0XSA9IHVzZVN0YXRlKDU2KTtcbiAgY29uc3QgW3Nob3dCYWNrbGlnaHQsIHNldFNob3dCYWNrbGlnaHRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbaXNGdWxsc2NyZWVuVG9nZ2xlZCwgc2V0SXNGdWxsc2NyZWVuVG9nZ2xlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgLy8gZGVmYXVsdCB0aGlua2luZyBtZXNzYWdlcyBpZiBub25lIHByb3ZpZGVkIGJ5IHdvcmtmbG93XG4gIGNvbnN0IERFRkFVTFRfVEhJTktJTkdfTUVTU0FHRVMgPSB1c2VNZW1vKFxuICAgICgpID0+IGdldFRyYW5zbGF0aW9uQXJyYXkoJ3RoaW5raW5nLm1lc3NhZ2VzJywgdHJhbnNsYXRpb25zLCBbXG4gICAgICBcIlRoaW5raW5n4oCmXCIsXG4gICAgICBcIkFuYWx5emluZyB5b3VyIHF1ZXN0aW9u4oCmXCIsXG4gICAgICBcIlNlYXJjaGluZyBrbm93bGVkZ2XigKZcIixcbiAgICAgIFwiUHVsbGluZyByZWxldmFudCBpbmZv4oCmXCIsXG4gICAgICBcIkRyYWZ0aW5nIHRoZSBhbnN3ZXLigKZcIixcbiAgICAgIFwiRG91Ymxl4oCRY2hlY2tpbmcgZGV0YWlsc+KAplwiLFxuICAgICAgXCJUeWluZyBpdCB0b2dldGhlcuKAplwiLFxuICAgICAgXCJBbG1vc3QgdGhlcmXigKZcIixcbiAgICBdKSxcbiAgICBbdHJhbnNsYXRpb25zXVxuICApO1xuICBjb25zdCBbY3VycmVudFRoaW5raW5nUGFydHMsIHNldEN1cnJlbnRUaGlua2luZ1BhcnRzXSA9IHVzZVN0YXRlPHN0cmluZ1tdPihbXSk7XG4gIGNvbnN0IFtjdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXgsIHNldEN1cnJlbnRUaGlua2luZ1BhcnRJbmRleF0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3Qge1xuICAgIG1lc3NhZ2VzLFxuICAgIGlzTG9hZGluZyxcbiAgICBzZW5kTWVzc2FnZSxcbiAgICB1cGxvYWRGaWxlLFxuICAgIHJlc2V0Q29udmVyc2F0aW9uLFxuICAgIHN0YXJ0Q29udmVyc2F0aW9uLFxuICAgIGNvbm5lY3Rpb25TdGF0ZSxcbiAgICBjb252ZXJzYXRpb25JZCxcbiAgICBwb3NzaWJsZVF1ZXJpZXMsXG4gICAgaXNGaW5hbGl6ZWQsXG4gICAgaXNBZ2VudFR5cGluZyxcbiAgICBhZGRGZWVkYmFjayxcbiAgICB3ZWxjb21lVGl0bGUsXG4gICAgd2VsY29tZUltYWdlVXJsLFxuICAgIHdlbGNvbWVNZXNzYWdlLFxuICAgIHRoaW5raW5nUGhyYXNlcyxcbiAgICB0aGlua2luZ0RlbGF5TXMsXG4gIH0gPSB1c2VDaGF0KHtcbiAgICBiYXNlVXJsLFxuICAgIGFwaUtleSxcbiAgICB0ZW5hbnQsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhV2l0aExhbmd1YWdlLFxuICAgIHVzZVdzLFxuICAgIHVzZVBvbGwsXG4gICAgbGFuZ3VhZ2U6IHJlc29sdmVkTGFuZ3VhZ2UsXG4gICAgb25FcnJvcixcbiAgICBvblRha2VvdmVyLFxuICAgIG9uRmluYWxpemUsXG4gICAgc2VydmVyVW5hdmFpbGFibGVNZXNzYWdlLFxuICAgIHNlcnZlclVuYXZhaWxhYmxlQ29udGFjdFVybCxcbiAgICBzZXJ2ZXJVbmF2YWlsYWJsZUNvbnRhY3RMYWJlbCxcbiAgICBvbkNvbmZpZ0xvYWRlZCxcbiAgfSk7XG4gIGNvbnN0IG1lc3NhZ2VzRW5kUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgYXVkaW9TZXJ2aWNlID0gdXNlUmVmPEF1ZGlvU2VydmljZSB8IG51bGw+KG51bGwpO1xuICBjb25zdCBoYXNBbmNob3JlZEhpc3RvcnkgPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBjaGF0Q29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgcmVDYXB0Y2hhVG9rZW5SZWYgPSB1c2VSZWY8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBjb25zdCBpc1VzZXJBdEJvdHRvbVJlZiA9IHVzZVJlZih0cnVlKTtcblxuICBjb25zdCBhbmNob3JIaXN0b3J5ID0gKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gY2hhdENvbnRhaW5lclJlZi5jdXJyZW50O1xuICAgIGlmICghZWwgfHwgIW1lc3NhZ2VzLmxlbmd0aCB8fCBoYXNBbmNob3JlZEhpc3RvcnkuY3VycmVudCkgcmV0dXJuO1xuICAgIGlmIChlbC5jbGllbnRIZWlnaHQgPT09IDApIHJldHVybjsgLy8gaGlkZGVuLCB3YWl0IGZvciB2aXNpYmlsaXR5L3NpemVcbiAgICBlbC5zY3JvbGxUb3AgPSBlbC5zY3JvbGxIZWlnaHQ7XG4gICAgaGFzQW5jaG9yZWRIaXN0b3J5LmN1cnJlbnQgPSB0cnVlO1xuICAgIGlzVXNlckF0Qm90dG9tUmVmLmN1cnJlbnQgPSB0cnVlO1xuICB9O1xuXG4gIGNvbnN0IHNjcm9sbFRvQm90dG9tID0gKGJlaGF2aW9yOiBTY3JvbGxCZWhhdmlvciA9ICdzbW9vdGgnLCBmb3JjZTogYm9vbGVhbiA9IGZhbHNlKSA9PiB7XG4gICAgY29uc3QgY29udGFpbmVyID0gY2hhdENvbnRhaW5lclJlZi5jdXJyZW50O1xuICAgIGNvbnN0IGVsID0gbWVzc2FnZXNFbmRSZWYuY3VycmVudDtcbiAgICBpZiAoIWNvbnRhaW5lciB8fCAhZWwpIHJldHVybjtcblxuICAgIC8vIE9ubHkgc2Nyb2xsIGlmIHVzZXIgaXMgYXQgYm90dG9tIG9yIGlmIGZvcmNlZCAoZS5nLiwgZm9yIGFnZW50IHR5cGluZylcbiAgICBpZiAoIWZvcmNlICYmICFpc1VzZXJBdEJvdHRvbVJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZG9TY3JvbGwgPSAoKSA9PiB7XG4gICAgICBjb250YWluZXIuc2Nyb2xsVG8oeyB0b3A6IGNvbnRhaW5lci5zY3JvbGxIZWlnaHQsIGJlaGF2aW9yIH0pO1xuICAgICAgaXNVc2VyQXRCb3R0b21SZWYuY3VycmVudCA9IHRydWU7XG4gICAgfTtcbiAgICBpZiAoYmVoYXZpb3IgPT09ICdhdXRvJykge1xuICAgICAgZG9TY3JvbGwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGRvU2Nyb2xsKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFzVXNlck1lc3NhZ2VzID0gbWVzc2FnZXMuc29tZShtZXNzYWdlID0+IG1lc3NhZ2Uuc3BlYWtlciA9PT0gJ2N1c3RvbWVyJyk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBhdWRpb1NlcnZpY2UuY3VycmVudCA9IG5ldyBBdWRpb1NlcnZpY2UoeyBiYXNlVXJsLCBhcGlLZXkgfSk7XG4gIH0sIFtiYXNlVXJsLCBhcGlLZXldKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbWVzc2FnZXMubGVuZ3RoKSByZXR1cm47XG4gICAgaWYgKGhhc0FuY2hvcmVkSGlzdG9yeS5jdXJyZW50KSB7XG4gICAgICBzY3JvbGxUb0JvdHRvbSgnc21vb3RoJywgZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbmNob3JIaXN0b3J5KCk7XG4gICAgfVxuICB9LCBbbWVzc2FnZXNdKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNBZ2VudFR5cGluZykgcmV0dXJuO1xuICAgIC8vIEZvcmNlIHNjcm9sbCB3aGVuIGFnZW50IGlzIHR5cGluZ1xuICAgIHNjcm9sbFRvQm90dG9tKCdhdXRvJywgdHJ1ZSk7XG4gIH0sIFtpc0FnZW50VHlwaW5nLCBjdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXgsIGN1cnJlbnRUaGlua2luZ1BhcnRzLmxlbmd0aF0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaGFzQW5jaG9yZWRIaXN0b3J5LmN1cnJlbnQgPSBmYWxzZTtcbiAgfSwgW2NvbnZlcnNhdGlvbklkXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKGZpbGVFcnJvclRvYXN0VGltZW91dFJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNsZWFyVGltZW91dChmaWxlRXJyb3JUb2FzdFRpbWVvdXRSZWYuY3VycmVudCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIC8vIEVuc3VyZSBjaGF0IGlzIGFsd2F5cyBvcGVuIHdoZW4gbW9kZSBpcyBmdWxsc2NyZWVuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG1vZGUgPT09ICdmdWxsc2NyZWVuJyAmJiAhaXNGbG9hdGluZ09wZW4pIHtcbiAgICAgIHNldElzRmxvYXRpbmdPcGVuKHRydWUpO1xuICAgIH1cbiAgfSwgW21vZGUsIGlzRmxvYXRpbmdPcGVuXSk7XG5cbiAgLy8gU2Nyb2xsIHRvIGJvdHRvbSB3aGVuIGNoYXQgaXMgcmVvcGVuZWQgaW4gZmxvYXRpbmcgbW9kZVxuICBjb25zdCBwcmV2SXNGbG9hdGluZ09wZW5SZWYgPSB1c2VSZWYoaXNGbG9hdGluZ09wZW4pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIE9ubHkgdHJpZ2dlciB3aGVuIGNoYXQgdHJhbnNpdGlvbnMgZnJvbSBjbG9zZWQgdG8gb3BlblxuICAgIGlmICgobW9kZSA9PT0gJ2Zsb2F0aW5nJyB8fCBtb2RlID09PSAnZnVsbHNjcmVlbicpICYmIGlzRmxvYXRpbmdPcGVuICYmICFwcmV2SXNGbG9hdGluZ09wZW5SZWYuY3VycmVudCAmJiBtZXNzYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBSZXNldCB0aGUgYW5jaG9yIGZsYWcgc28gaXQgY2FuIHNjcm9sbCB0byBib3R0b21cbiAgICAgIGhhc0FuY2hvcmVkSGlzdG9yeS5jdXJyZW50ID0gZmFsc2U7XG4gICAgICBpc1VzZXJBdEJvdHRvbVJlZi5jdXJyZW50ID0gdHJ1ZTtcblxuICAgICAgLy8gV2FpdCBmb3IgY29udGFpbmVyIHRvIGJlIHZpc2libGUgYW5kIHRoZW4gc2Nyb2xsXG4gICAgICBjb25zdCBzY3JvbGxXaGVuVmlzaWJsZSA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gY2hhdENvbnRhaW5lclJlZi5jdXJyZW50O1xuICAgICAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShzY3JvbGxXaGVuVmlzaWJsZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgY29udGFpbmVyIGlzIHZpc2libGVcbiAgICAgICAgaWYgKGNvbnRhaW5lci5jbGllbnRIZWlnaHQgPT09IDApIHtcbiAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc2Nyb2xsV2hlblZpc2libGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNjcm9sbCB0byBib3R0b21cbiAgICAgICAgY29udGFpbmVyLnNjcm9sbFRvcCA9IGNvbnRhaW5lci5zY3JvbGxIZWlnaHQ7XG4gICAgICAgIGhhc0FuY2hvcmVkSGlzdG9yeS5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgaXNVc2VyQXRCb3R0b21SZWYuY3VycmVudCA9IHRydWU7XG4gICAgICB9O1xuXG4gICAgICAvLyBVc2UgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHRvIHdhaXQgZm9yIHJlbmRlclxuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHNjcm9sbFdoZW5WaXNpYmxlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBwcmV2SXNGbG9hdGluZ09wZW5SZWYuY3VycmVudCA9IGlzRmxvYXRpbmdPcGVuO1xuICB9LCBbaXNGbG9hdGluZ09wZW4sIG1vZGVdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbWVzc2FnZXMubGVuZ3RoKSByZXR1cm47XG4gICAgY29uc3QgZWwgPSBjaGF0Q29udGFpbmVyUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFlbCkgcmV0dXJuO1xuXG4gICAgLy8gT2JzZXJ2ZSBzaXplL3Zpc2liaWxpdHkgY2hhbmdlcyB0byBhbmNob3IgY2hhdCB2aWV3LlxuICAgIGNvbnN0IHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgIGlmIChpc1VzZXJBdEJvdHRvbVJlZi5jdXJyZW50KSB7XG4gICAgICAgIGFuY2hvckhpc3RvcnkoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKGVsKTtcblxuICAgIGFuY2hvckhpc3RvcnkoKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICByZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgfTtcbiAgfSwgW21lc3NhZ2VzXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb250YWluZXIgPSBjaGF0Q29udGFpbmVyUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFjb250YWluZXIpIHJldHVybjtcblxuICAgIGNvbnN0IGlzQXRCb3R0b20gPSAodGhyZXNob2xkOiBudW1iZXIgPSAxMDApOiBib29sZWFuID0+IHtcbiAgICAgIGlmICghY29udGFpbmVyKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gY29udGFpbmVyO1xuICAgICAgcmV0dXJuIHNjcm9sbEhlaWdodCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodCA8PSB0aHJlc2hvbGQ7XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVTY3JvbGwgPSAoKSA9PiB7XG4gICAgICBpc1VzZXJBdEJvdHRvbVJlZi5jdXJyZW50ID0gaXNBdEJvdHRvbSgpO1xuICAgIH07XG4gICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVNjcm9sbCwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgIGhhbmRsZVNjcm9sbCgpO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVTY3JvbGwpO1xuICAgIH07XG4gIH0sIFtdKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZUhlYWRlckhlaWdodCA9ICgpID0+IHtcbiAgICAgIHNldEhlYWRlckhlaWdodChoZWFkZXJSZWYuY3VycmVudD8ub2Zmc2V0SGVpZ2h0IHx8IDU2KTtcbiAgICB9O1xuICAgIHVwZGF0ZUhlYWRlckhlaWdodCgpO1xuICAgIGNvbnN0IHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHVwZGF0ZUhlYWRlckhlaWdodCgpKTtcbiAgICBpZiAoaGVhZGVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUoaGVhZGVyUmVmLmN1cnJlbnQpO1xuICAgIH1cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlSGVhZGVySGVpZ2h0KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgcmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZUhlYWRlckhlaWdodCk7XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIC8vIFNtb290aGx5IHNob3cvaGlkZSB0aGUgYmFja2xpZ2h0IHdoaWxlIHRoZSBhZ2VudCBpcyB0eXBpbmdcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNBZ2VudFR5cGluZykge1xuICAgICAgc2V0U2hvd0JhY2tsaWdodCh0cnVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdCA9IHNldFRpbWVvdXQoKCkgPT4gc2V0U2hvd0JhY2tsaWdodChmYWxzZSksIDQyMCk7IC8vIGFsbG93IGZhZGUtb3V0XG4gICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0KTtcbiAgfSwgW2lzQWdlbnRUeXBpbmddKTtcblxuICAvLyBTaG93IFwidGhpbmtpbmdcIiBwaHJhc2VzIHdoaWxlIGFnZW50IGlzIHR5cGluZ1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNBZ2VudFR5cGluZykge1xuICAgICAgc2V0Q3VycmVudFRoaW5raW5nUGFydHMoW10pO1xuICAgICAgc2V0Q3VycmVudFRoaW5raW5nUGFydEluZGV4KDApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFJhbmRvbWx5IHNlbGVjdCBhIHBocmFzZSBmcm9tIHRoZSBsaXN0XG4gICAgY29uc3QgbGlzdCA9ICh0aGlua2luZ1BocmFzZXMgJiYgdGhpbmtpbmdQaHJhc2VzLmxlbmd0aCA+IDApID8gdGhpbmtpbmdQaHJhc2VzIDogREVGQVVMVF9USElOS0lOR19NRVNTQUdFUztcbiAgICBjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGxpc3QubGVuZ3RoKTtcbiAgICBjb25zdCBzZWxlY3RlZFBocmFzZSA9IGxpc3RbcmFuZG9tSW5kZXhdO1xuXG4gICAgLy8gU3BsaXQgYnkgfCB0byBnZXQgcGFydHMsIG9yIHVzZSB0aGUgcGhyYXNlIGFzIGEgc2luZ2xlIHBhcnQgaWYgbm8gfCBmb3VuZFxuICAgIGNvbnN0IHBhcnRzID0gc2VsZWN0ZWRQaHJhc2UuaW5jbHVkZXMoJ3wnKVxuICAgICAgPyBzZWxlY3RlZFBocmFzZS5zcGxpdCgnfCcpLm1hcChwYXJ0ID0+IHBhcnQudHJpbSgpKS5maWx0ZXIocGFydCA9PiBwYXJ0Lmxlbmd0aCA+IDApXG4gICAgICA6IFtzZWxlY3RlZFBocmFzZS50cmltKCldO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB3aXRoIGZpcnN0IHBhcnRcbiAgICBzZXRDdXJyZW50VGhpbmtpbmdQYXJ0cyhwYXJ0cyk7XG4gICAgc2V0Q3VycmVudFRoaW5raW5nUGFydEluZGV4KDApO1xuXG4gICAgLy8gSWYgdGhlcmUncyBvbmx5IG9uZSBwYXJ0LCBubyBuZWVkIHRvIHByb2dyZXNzXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA8PSAxKSByZXR1cm47XG5cbiAgICAvLyBQcm9ncmVzcyB0aHJvdWdoIHBhcnRzIHdpdGggZGVsYXksIGJ1dCBzdG9wIGF0IHRoZSBsYXN0IG9uZVxuICAgIGNvbnN0IHJvdERlbGF5ID0gTWF0aC5tYXgoMjUwLCB0aGlua2luZ0RlbGF5TXMgfHwgMTAwMCk7XG4gICAgY29uc3QgdGltZW91dElkczogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD5bXSA9IFtdO1xuXG4gICAgLy8gU2V0IHVwIHRpbWVvdXRzIGZvciBlYWNoIHBhcnQgdHJhbnNpdGlvblxuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBzZXRDdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXgoaSk7XG4gICAgICB9LCByb3REZWxheSAqIGkpO1xuICAgICAgdGltZW91dElkcy5wdXNoKHRpbWVvdXRJZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHRpbWVvdXRJZHMuZm9yRWFjaChpZCA9PiBjbGVhclRpbWVvdXQoaWQpKTtcbiAgICB9O1xuICB9LCBbaXNBZ2VudFR5cGluZywgdGhpbmtpbmdQaHJhc2VzLCB0aGlua2luZ0RlbGF5TXNdKTtcblxuICBjb25zdCBzdWJtaXRNZXNzYWdlID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmIChpbnB1dFZhbHVlLnRyaW0oKSA9PT0gJycgJiYgYXR0YWNobWVudHMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgaWYgKGlzQWdlbnRUeXBpbmcpIHJldHVybjsgLy8gUHJldmVudCBzZW5kaW5nIHdoaWxlIGFnZW50IGlzIHRoaW5raW5nL3R5cGluZ1xuICAgIGNvbnN0IHRleHRUb1NlbmQgPSBpbnB1dFZhbHVlO1xuICAgIC8vIE5PVEVTOiB3ZSBkb24ndCB1cGxvYWQgZmlsZXMgYW55bW9yZSwgd2UganVzdCBzZW5kIHRoZSBjb250ZW50IGJsb2Nrc1xuICAgIGNvbnN0IGZpbGVzVG9VcGxvYWQgPSBhdHRhY2htZW50cy5tYXAoYSA9PiBhLmZpbGUpO1xuICAgIC8vIGNvbnN0IGZpbGVBdHRhY2htZW50cyA9IGF0dGFjaG1lbnRzLm1hcChhID0+IGEuYXR0YWNobWVudCk7XG5cbiAgICBzZXRJbnB1dFZhbHVlKCcnKTtcbiAgICBzZXRBdHRhY2htZW50cyhbXSk7XG4gICAgLy8gUmVzZXQgdGhlIGZpbGUgaW5wdXQgdmFsdWUgc28gdGhlIHNhbWUgZmlsZSBjYW4gYmUgc2VsZWN0ZWQgYWdhaW5cbiAgICBpZiAoZmlsZUlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50LnZhbHVlID0gJyc7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEluY2x1ZGUgRkFRIHF1ZXJ5IGluIG1ldGFkYXRhIGlmIG9uZSB3YXMgcHJldmlvdXNseSBzZWxlY3RlZFxuICAgICAgY29uc3QgZXh0cmFNZXRhZGF0YTogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gICAgICBpZiAoc2VsZWN0ZWRGYXFRdWVyeSkge1xuICAgICAgICBleHRyYU1ldGFkYXRhLmZhcV9xdWVyeSA9IHNlbGVjdGVkRmFxUXVlcnk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaWxlc1RvVXBsb2FkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZXh0cmFNZXRhZGF0YS5hdHRhY2htZW50cyA9IGF0dGFjaG1lbnRzLm1hcChhID0+IGEuYXR0YWNobWVudCk7XG4gICAgICB9XG5cbiAgICAgIC8vIHNlbmQgbWVzc2FnZSB3aXRoIGF0dGFjaG1lbnRzXG4gICAgICBhd2FpdCBzZW5kTWVzc2FnZSh0ZXh0VG9TZW5kLCBmaWxlc1RvVXBsb2FkLCBleHRyYU1ldGFkYXRhLCByZUNhcHRjaGFUb2tlblJlZi5jdXJyZW50KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gaWdub3JlXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIFJlZm9jdXMgdGhlIGlucHV0IGZpZWxkXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRleHRBcmVhUmVmLmN1cnJlbnQ/LmZvY3VzKCksIDApO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVTdWJtaXQgPSBhc3luYyAoZTogUmVhY3QuRm9ybUV2ZW50KSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGF3YWl0IHN1Ym1pdE1lc3NhZ2UoKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVRdWlja0FjdGlvbiA9IGFzeW5jICh0ZXh0OiBzdHJpbmcpID0+IHtcbiAgICBpZiAoIXRleHQudHJpbSgpKSByZXR1cm47XG4gICAgaWYgKGlzQWdlbnRUeXBpbmcpIHJldHVybjsgLy8gUHJldmVudCBzZW5kaW5nIHdoaWxlIGFnZW50IGlzIHRoaW5raW5nL3R5cGluZ1xuICAgIHRyeSB7XG4gICAgICAvLyBJbmNsdWRlIEZBUSBxdWVyeSBpbiBtZXRhZGF0YSBpZiBvbmUgd2FzIHByZXZpb3VzbHkgc2VsZWN0ZWRcbiAgICAgIGNvbnN0IGV4dHJhTWV0YWRhdGEgPSBzZWxlY3RlZEZhcVF1ZXJ5ID8geyBmYXFfcXVlcnk6IHNlbGVjdGVkRmFxUXVlcnkgfSA6IHVuZGVmaW5lZDtcbiAgICAgIGF3YWl0IHNlbmRNZXNzYWdlKHRleHQsIFtdLCBleHRyYU1ldGFkYXRhLCByZUNhcHRjaGFUb2tlblJlZi5jdXJyZW50KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gaWdub3JlIHF1aWNrIGFjdGlvbiBlcnJvcnMgdG8gYXZvaWQgaW50ZXJydXB0aW5nIHRoZSBmbG93XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVNjaGVkdWxlQ29uZmlybSA9IGFzeW5jIChzY2hlZHVsZTogU2NoZWR1bGVJdGVtKSA9PiB7XG4gICAgY29uc3Qgc3VtbWFyeSA9IGBTY2hlZHVsZSBjb25maXJtZWQgd2l0aCAke3NjaGVkdWxlLnJlc3RhdXJhbnRzLmxlbmd0aH0gcmVzdGF1cmFudHNgO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzZW5kTWVzc2FnZShzdW1tYXJ5LCBbXSwgeyBjb25maXJtU2NoZWR1bGU6IEpTT04uc3RyaW5naWZ5KHNjaGVkdWxlKSB9LCByZUNhcHRjaGFUb2tlblJlZi5jdXJyZW50KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gaWdub3JlXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUZpbGVDaGFuZ2UgPSBhc3luYyAoZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICBpZiAoZS50YXJnZXQuZmlsZXMgJiYgZS50YXJnZXQuZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbmV3RmlsZXMgPSBBcnJheS5mcm9tKGUudGFyZ2V0LmZpbGVzKTtcblxuICAgICAgLy8gSW5pdGlhbGl6ZSBhdHRhY2htZW50cyB3aXRoIGZpbGVzIChhdHRhY2htZW50IHJlZmVyZW5jZSB3aWxsIGJlIG51bGwgaW5pdGlhbGx5KVxuICAgICAgY29uc3QgbmV3QXR0YWNobWVudHM6IEF0dGFjaG1lbnRXaXRoRmlsZVtdID0gbmV3RmlsZXMubWFwKGZpbGUgPT4gKHtmaWxlLCBhdHRhY2htZW50OiBudWxsfSkpO1xuICAgICAgc2V0QXR0YWNobWVudHMocHJldiA9PiBbLi4ucHJldiwgLi4ubmV3QXR0YWNobWVudHNdKTtcblxuICAgICAgY29uc3QgbmV3VXBsb2FkaW5nRmlsZXMgPSBuZXcgU2V0KHVwbG9hZGluZ0ZpbGVzKTtcbiAgICAgIG5ld0ZpbGVzLmZvckVhY2goZmlsZSA9PiBuZXdVcGxvYWRpbmdGaWxlcy5hZGQoZmlsZS5uYW1lKSk7XG4gICAgICBzZXRVcGxvYWRpbmdGaWxlcyhuZXdVcGxvYWRpbmdGaWxlcyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFVwbG9hZCBmaWxlcyBhbmQgZ2V0IGF0dGFjaG1lbnQgcmVmZXJlbmNlcyAodXNlIGFsbFNldHRsZWQgc28gb25lIGZhaWx1cmUgZG9lc24ndCBza2lwIHRoZSByZXN0KVxuICAgICAgICBjb25zdCBzZXR0bGVkID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgICAgIG5ld0ZpbGVzLm1hcChhc3luYyAoZmlsZSkgPT4gKHsgZmlsZSwgYXR0YWNobWVudDogYXdhaXQgdXBsb2FkRmlsZShmaWxlKSB9KSlcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBmaWxlVG9BdHRhY2htZW50TWFwID0gbmV3IE1hcDxzdHJpbmcsIEF0dGFjaG1lbnQgfCBudWxsPigpO1xuICAgICAgICBjb25zdCBmYWlsZWRGaWxlS2V5cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICBzZXR0bGVkLmZvckVhY2goKHJlc3VsdCwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBmaWxlID0gbmV3RmlsZXNbaW5kZXhdO1xuICAgICAgICAgIGlmICghZmlsZSkgcmV0dXJuO1xuICAgICAgICAgIGNvbnN0IGZpbGVLZXkgPSBgJHtmaWxlLm5hbWV9OiR7ZmlsZS5zaXplfToke2ZpbGUubGFzdE1vZGlmaWVkfWA7XG4gICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdyZWplY3RlZCcpIHtcbiAgICAgICAgICAgIGZpbGVUb0F0dGFjaG1lbnRNYXAuc2V0KGZpbGVLZXksIG51bGwpO1xuICAgICAgICAgICAgZmFpbGVkRmlsZUtleXMuYWRkKGZpbGVLZXkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB7IGF0dGFjaG1lbnQgfSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgICBmaWxlVG9BdHRhY2htZW50TWFwLnNldChmaWxlS2V5LCBhdHRhY2htZW50KTtcbiAgICAgICAgICBpZiAoYXR0YWNobWVudCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgZmFpbGVkRmlsZUtleXMuYWRkKGZpbGVLZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgaGFzRmFpbGVkVXBsb2FkcyA9IGZhaWxlZEZpbGVLZXlzLnNpemUgPiAwO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBhdHRhY2htZW50czogcmVtb3ZlIGZhaWxlZCBmaWxlcywgc2V0IGF0dGFjaG1lbnQgZm9yIHN1Y2Nlc3NmdWwgb25lc1xuICAgICAgICBzZXRBdHRhY2htZW50cyhwcmV2ID0+IHtcbiAgICAgICAgICByZXR1cm4gcHJldlxuICAgICAgICAgICAgLmZpbHRlcihhdHQgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBmaWxlS2V5ID0gYCR7YXR0LmZpbGUubmFtZX06JHthdHQuZmlsZS5zaXplfToke2F0dC5maWxlLmxhc3RNb2RpZmllZH1gO1xuICAgICAgICAgICAgICByZXR1cm4gIWZhaWxlZEZpbGVLZXlzLmhhcyhmaWxlS2V5KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAubWFwKGF0dCA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpbGVLZXkgPSBgJHthdHQuZmlsZS5uYW1lfToke2F0dC5maWxlLnNpemV9OiR7YXR0LmZpbGUubGFzdE1vZGlmaWVkfWA7XG4gICAgICAgICAgICAgIGNvbnN0IHVwbG9hZGVkQXR0YWNobWVudCA9IGZpbGVUb0F0dGFjaG1lbnRNYXAuZ2V0KGZpbGVLZXkpO1xuICAgICAgICAgICAgICBpZiAodXBsb2FkZWRBdHRhY2htZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5hdHQsIGF0dGFjaG1lbnQ6IHVwbG9hZGVkQXR0YWNobWVudCB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBhdHQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGhhc0ZhaWxlZFVwbG9hZHMpIHtcbiAgICAgICAgICBpZiAoZmlsZUVycm9yVG9hc3RUaW1lb3V0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChmaWxlRXJyb3JUb2FzdFRpbWVvdXRSZWYuY3VycmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNldEZpbGVFcnJvclRvYXN0KHQoJ2ZpbGVVcGxvYWQuZmlsZVR5cGVOb3RTdXBwb3J0ZWQnLCAnVGhpcyBmaWxlIHR5cGUgaXMgbm90IHN1cHBvcnRlZC4nKSk7XG4gICAgICAgICAgZmlsZUVycm9yVG9hc3RUaW1lb3V0UmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHNldEZpbGVFcnJvclRvYXN0KG51bGwpO1xuICAgICAgICAgICAgZmlsZUVycm9yVG9hc3RUaW1lb3V0UmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICAgIH0sIDQwMDApO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBpZ25vcmVcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdXBsb2FkaW5nIGZpbGUnLCBlcnJvcik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBjb25zdCBmaW5hbFVwbG9hZGluZ0ZpbGVzID0gbmV3IFNldCh1cGxvYWRpbmdGaWxlcyk7XG4gICAgICAgIG5ld0ZpbGVzLmZvckVhY2goZmlsZSA9PiBmaW5hbFVwbG9hZGluZ0ZpbGVzLmRlbGV0ZShmaWxlLm5hbWUpKTtcbiAgICAgICAgc2V0VXBsb2FkaW5nRmlsZXMoZmluYWxVcGxvYWRpbmdGaWxlcyk7XG4gICAgICAgIC8vIFJlc2V0IHRoZSBmaWxlIGlucHV0IHZhbHVlIHNvIHRoZSBzYW1lIGZpbGUgY2FuIGJlIHNlbGVjdGVkIGFnYWluXG4gICAgICAgIGlmIChmaWxlSW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50IS52YWx1ZSA9ICcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVJlbW92ZUF0dGFjaG1lbnQgPSAoZmlsZU5hbWU6IHN0cmluZykgPT4ge1xuICAgIHNldEF0dGFjaG1lbnRzKHByZXYgPT4gcHJldi5maWx0ZXIoYXR0ID0+IGF0dC5maWxlLm5hbWUgIT09IGZpbGVOYW1lKSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlVm9pY2VFcnJvciA9IChlcnJvcjogRXJyb3IpID0+IHtcbiAgICBpZiAob25FcnJvcikge1xuICAgICAgb25FcnJvcihlcnJvcik7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHBsYXlSZXNwb25zZUF1ZGlvID0gYXN5bmMgKHRleHQ6IHN0cmluZykgPT4ge1xuICAgIGlmICghYXVkaW9TZXJ2aWNlLmN1cnJlbnQgfHwgaXNQbGF5aW5nQXVkaW8pIHJldHVybjtcblxuICAgIHRyeSB7XG4gICAgICBzZXRJc1BsYXlpbmdBdWRpbyh0cnVlKTtcbiAgICAgIGNvbnN0IGF1ZGlvQmxvYiA9IGF3YWl0IGF1ZGlvU2VydmljZS5jdXJyZW50LnRleHRUb1NwZWVjaCh0ZXh0KTtcbiAgICAgIGF3YWl0IGF1ZGlvU2VydmljZS5jdXJyZW50LnBsYXlBdWRpbyhhdWRpb0Jsb2IpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAob25FcnJvcikge1xuICAgICAgICBvbkVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0SXNQbGF5aW5nQXVkaW8oZmFsc2UpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVRdWVyeUNsaWNrID0gYXN5bmMgKHF1ZXJ5OiBzdHJpbmcpID0+IHtcbiAgICBpZiAoaXNBZ2VudFR5cGluZyB8fCBpc0xvYWRpbmcpIHJldHVybjsgLy8gUHJldmVudCBzZW5kaW5nIHdoaWxlIGFnZW50IGlzIHRoaW5raW5nL3R5cGluZ1xuXG4gICAgLy8gU3RvcmUgdGhlIEZBUSBxdWVyeSBmb3IgYWxsIHN1YnNlcXVlbnQgbWVzc2FnZXNcbiAgICBzZXRTZWxlY3RlZEZhcVF1ZXJ5KHF1ZXJ5KTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzZW5kTWVzc2FnZShxdWVyeSwgW10sIHsgZmFxX3F1ZXJ5OiBxdWVyeSB9LCByZUNhcHRjaGFUb2tlblJlZi5jdXJyZW50KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gaWdub3JlXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVN0YXJ0Q29udmVyc2F0aW9uID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmIChpc0xvYWRpbmcpIHJldHVybjtcblxuICAgIC8vIENsZWFyIGlucHV0IHRleHQgYW5kIGZpbGUgYXR0YWNobWVudHMgd2hlbiBzdGFydGluZyBhIGNvbnZlcnNhdGlvblxuICAgIHNldElucHV0VmFsdWUoJycpO1xuICAgIHNldEF0dGFjaG1lbnRzKFtdKTtcbiAgICBpZiAoZmlsZUlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50LnZhbHVlID0gJyc7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHN0YXJ0Q29udmVyc2F0aW9uKHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzdGFydGluZyBjb252ZXJzYXRpb24nLCBlcnJvcik7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZU1lbnVDbGljayA9ICgpID0+IHtcbiAgICBzZXRTaG93TWVudShwcmV2ID0+ICFwcmV2KTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVSZXNldENsaWNrID0gKCkgPT4ge1xuICAgIHNldFNob3dNZW51KGZhbHNlKTtcbiAgICBzZXRTaG93UmVzZXRDb25maXJtKHRydWUpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUNvbmZpcm1SZXNldCA9IGFzeW5jICgpID0+IHtcbiAgICAvLyBDbGVhciBpbnB1dCB0ZXh0IGFuZCBmaWxlIGF0dGFjaG1lbnRzIHdoZW4gcmVzdGFydGluZ1xuICAgIHNldElucHV0VmFsdWUoJycpO1xuICAgIHNldEF0dGFjaG1lbnRzKFtdKTtcbiAgICBpZiAoZmlsZUlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50LnZhbHVlID0gJyc7XG4gICAgfVxuXG4gICAgYXdhaXQgcmVzZXRDb252ZXJzYXRpb24ocmVDYXB0Y2hhVG9rZW5SZWYuY3VycmVudCk7XG4gICAgc2V0U2VsZWN0ZWRGYXFRdWVyeShudWxsKTsgLy8gQ2xlYXIgRkFRIHF1ZXJ5IG9uIHJlc2V0XG4gICAgc2V0U2hvd1Jlc2V0Q29uZmlybShmYWxzZSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ2FuY2VsUmVzZXQgPSAoKSA9PiB7XG4gICAgc2V0U2hvd1Jlc2V0Q29uZmlybShmYWxzZSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlTGFuZ3VhZ2VDaGFuZ2UgPSAobGFuZzogc3RyaW5nKSA9PiB7XG4gICAgc2V0U2VsZWN0ZWRMYW5ndWFnZShsYW5nKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVGdWxsc2NyZWVuVG9nZ2xlID0gKCkgPT4ge1xuICAgIHNldElzRnVsbHNjcmVlblRvZ2dsZWQocHJldiA9PiAhcHJldik7XG4gICAgc2V0U2hvd01lbnUoZmFsc2UpO1xuICB9O1xuXG4gIC8vIFRyYWNrIHdpbmRvdyByZXNpemUgdG8gdXBkYXRlIG1vYmlsZSBkZXRlY3Rpb25cbiAgY29uc3QgW3dpbmRvd1dpZHRoLCBzZXRXaW5kb3dXaWR0aF0gPSB1c2VTdGF0ZSh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5pbm5lcldpZHRoIDogMTAyNCk7XG5cbiAgLy8gQXV0b21hdGljYWxseSBkZXRlcm1pbmUgaWYgc2hvdWxkIGJlIGZ1bGxzY3JlZW4gKG1vYmlsZSBkZXZpY2VzIG9yIHdpZGdldCBtb2RlIG9yIG1hbnVhbCB0b2dnbGUgb3IgZnVsbHNjcmVlbiBtb2RlKVxuICBjb25zdCBpc0Z1bGxzY3JlZW4gPSB1c2VNZW1vKCgpID0+IHtcbiAgICAvLyBJZiBtb2RlIGlzIGZ1bGxzY3JlZW4sIGFsd2F5cyBmdWxsc2NyZWVuXG4gICAgaWYgKG1vZGUgPT09ICdmdWxsc2NyZWVuJykgcmV0dXJuIHRydWU7XG4gICAgLy8gSWYgd2lkZ2V0IHByb3AgaXMgdHJ1ZSwgYWx3YXlzIGZ1bGxzY3JlZW5cbiAgICBpZiAod2lkZ2V0KSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBJZiBtYW51YWxseSB0b2dnbGVkLCB1c2UgdG9nZ2xlIHN0YXRlXG4gICAgaWYgKGlzRnVsbHNjcmVlblRvZ2dsZWQpIHJldHVybiB0cnVlO1xuICAgIC8vIE90aGVyd2lzZSwgdXNlIG1vYmlsZSBkZXRlY3Rpb25cbiAgICByZXR1cm4gd2luZG93V2lkdGggPD0gNzY4O1xuICB9LCBbd2luZG93V2lkdGgsIHdpZGdldCwgaXNGdWxsc2NyZWVuVG9nZ2xlZCwgbW9kZV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlUmVzaXplID0gKCkgPT4ge1xuICAgICAgc2V0V2luZG93V2lkdGgod2luZG93LmlubmVyV2lkdGgpO1xuICAgIH07XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZVJlc2l6ZSk7XG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVSZXNpemUpO1xuICB9LCBbXSk7XG5cbiAgLy8gTG9jayBib2R5IHNjcm9sbCB3aGVuIGZ1bGxzY3JlZW4gaXMgYWN0aXZlIG9uIG1vYmlsZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc0Z1bGxzY3JlZW4gJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLm92ZXJmbG93O1xuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9IG9yaWdpbmFsU3R5bGU7XG4gICAgICB9O1xuICAgIH1cbiAgfSwgW2lzRnVsbHNjcmVlbl0pO1xuXG4gIGNvbnN0IGhhbmRsZVJlQ2FwdGNoYVZlcmlmeSA9IHVzZUNhbGxiYWNrKCh0b2tlbjogc3RyaW5nKSA9PiB7XG4gICAgcmVDYXB0Y2hhVG9rZW5SZWYuY3VycmVudCA9IHRva2VuO1xuICB9LCBbXSk7XG5cbiAgLy8gQXZhaWxhYmxlIGxhbmd1YWdlcyAoY2FuIGJlIGV4dGVuZGVkKVxuICBjb25zdCBhdmFpbGFibGVMYW5ndWFnZXMgPSBbXG4gICAgeyBjb2RlOiAnZW4nLCBuYW1lOiAnRW5nbGlzaCcgfSxcbiAgICB7IGNvZGU6ICdlcycsIG5hbWU6ICdFc3Bhw7FvbCcgfSxcbiAgICB7IGNvZGU6ICdmcicsIG5hbWU6ICdGcmFuw6dhaXMnIH0sXG4gICAgeyBjb2RlOiAnZGUnLCBuYW1lOiAnRGV1dHNjaCcgfSxcbiAgICB7IGNvZGU6ICdpdCcsIG5hbWU6ICdJdGFsaWFubycgfSxcbiAgICB7IGNvZGU6ICdwdCcsIG5hbWU6ICdQb3J0dWd1w6pzJyB9LFxuICBdO1xuXG4gIGNvbnN0IHByaW1hcnlDb2xvciA9IHRoZW1lPy5wcmltYXJ5Q29sb3IgfHwgJyMyOTYyRkYnO1xuICBjb25zdCBiYWNrZ3JvdW5kQ29sb3IgPSB0aGVtZT8uYmFja2dyb3VuZENvbG9yIHx8ICcjZmZmZmZmJztcbiAgY29uc3QgdGV4dENvbG9yID0gdGhlbWU/LnRleHRDb2xvciB8fCAnIzAwMDAwMCc7XG4gIGNvbnN0IGZvbnRGYW1pbHkgPSB0aGVtZT8uZm9udEZhbWlseSB8fCAnUm9ib3RvLCBBcmlhbCwgc2Fucy1zZXJpZic7XG4gIGNvbnN0IGZvbnRTaXplID0gdGhlbWU/LmZvbnRTaXplIHx8ICcxNHB4JztcbiAgY29uc3QgZm9udFNpemVOdW1iZXIgPSB0eXBlb2YgZm9udFNpemUgPT09ICdzdHJpbmcnID8gcGFyc2VJbnQoZm9udFNpemUsIDEwKSA6ICh0eXBlb2YgZm9udFNpemUgPT09ICdudW1iZXInID8gZm9udFNpemUgOiAxNCk7XG4gIGNvbnN0IGxpbmVIZWlnaHRQeCA9IE1hdGgucm91bmQoZm9udFNpemVOdW1iZXIgKiAxLjUpO1xuICBjb25zdCB0ZXh0QXJlYU1heEhlaWdodCA9IGxpbmVIZWlnaHRQeCAqIDM7IC8vIHVwIHRvIDMgbGluZXNcblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY29udmVydCBoZXggY29sb3IgdG8gcmdiYVxuICBjb25zdCBoZXhUb1JnYmEgPSAoaGV4OiBzdHJpbmcsIGFscGhhOiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IHIgPSBwYXJzZUludChoZXguc2xpY2UoMSwgMyksIDE2KTtcbiAgICBjb25zdCBnID0gcGFyc2VJbnQoaGV4LnNsaWNlKDMsIDUpLCAxNik7XG4gICAgY29uc3QgYiA9IHBhcnNlSW50KGhleC5zbGljZSg1LCA3KSwgMTYpO1xuICAgIHJldHVybiBgcmdiYSgke3J9LCAke2d9LCAke2J9LCAke2FscGhhfSlgO1xuICB9O1xuXG4gIGNvbnN0IHBvc2l0aW9uID0gZmxvYXRpbmdDb25maWcucG9zaXRpb24gfHwgJ2JvdHRvbS1yaWdodCc7XG4gIGNvbnN0IG9mZnNldCA9IGZsb2F0aW5nQ29uZmlnLm9mZnNldCB8fCB7IHg6IDIwLCB5OiAyMCB9O1xuICBjb25zdCBvZmZzZXRYID0gb2Zmc2V0LnggfHwgMjA7XG4gIGNvbnN0IG9mZnNldFkgPSBvZmZzZXQueSB8fCAyMDtcblxuICBjb25zdCBjb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgLy8gV2hlbiBmdWxsc2NyZWVuLCBsZXQgaGVpZ2h0IGJlIGNhbGN1bGF0ZWQgZnJvbSB0b3AvYm90dG9tLCBvdGhlcndpc2UgdXNlIHNwZWNpZmllZCBoZWlnaHRcbiAgICBoZWlnaHQ6IGlzRnVsbHNjcmVlbiA/IHVuZGVmaW5lZCA6ICcxMDAlJyxcbiAgICBtYXhIZWlnaHQ6IGlzRnVsbHNjcmVlbiA/IHVuZGVmaW5lZCA6ICh3aW5kb3dXaWR0aCA+IDc2OCA/ICc3MDBweCcgOiAnNjAwcHgnKSxcbiAgICB3aWR0aDogaXNGdWxsc2NyZWVuID8gJzEwMHZ3JyA6ICcxMDAlJyxcbiAgICBtYXhXaWR0aDogaXNGdWxsc2NyZWVuID8gJzEwMHZ3JyA6ICc0MDBweCcsXG4gICAgYm9yZGVyOiBpc0Z1bGxzY3JlZW4gPyAnbm9uZScgOiAnMXB4IHNvbGlkICNlMGUwZTAnLFxuICAgIGJvcmRlclJhZGl1czogaXNGdWxsc2NyZWVuID8gJzAnIDogJzMycHgnLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lPy5zZWNvbmRhcnlDb2xvciB8fCAnI2Y1ZjVmNScsXG4gICAgZm9udEZhbWlseSxcbiAgICBib3hTaGFkb3c6IGlzRnVsbHNjcmVlbiA/ICdub25lJyA6IFwiMCA0cHggMjBweCByZ2JhKDAsIDAsIDAsIDAuMilcIixcbiAgICBwb3NpdGlvbjogaXNGdWxsc2NyZWVuID8gJ2ZpeGVkJyA6ICdyZWxhdGl2ZScsXG4gICAgdG9wOiBpc0Z1bGxzY3JlZW4gPyAwIDogdW5kZWZpbmVkLFxuICAgIGxlZnQ6IGlzRnVsbHNjcmVlbiA/IDAgOiB1bmRlZmluZWQsXG4gICAgcmlnaHQ6IGlzRnVsbHNjcmVlbiA/IDAgOiB1bmRlZmluZWQsXG4gICAgLy8gUG9zaXRpb24gY29udGFpbmVyIGFib3ZlIGJyb3dzZXIgZm9vdGVyIHVzaW5nIHNhZmUgYXJlYSBpbnNldHNcbiAgICBib3R0b206IGlzRnVsbHNjcmVlbiA/ICdlbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSwgMHB4KScgOiB1bmRlZmluZWQsXG4gICAgekluZGV4OiBpc0Z1bGxzY3JlZW4gPyA5OTk5IDogdW5kZWZpbmVkLFxuICB9O1xuXG4gIGNvbnN0IGhlYWRlclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHBhZGRpbmc6ICcxNXB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lPy5zZWNvbmRhcnlDb2xvciB8fCAnI2Y1ZjVmNScsXG4gICAgY29sb3I6ICcjMTExMTExJyxcbiAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIH07XG5cbiAgY29uc3QgbG9nb0NvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBnYXA6ICcxMHB4JyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICB6SW5kZXg6IDEsXG4gIH07XG5cbiAgY29uc3QgbG9nb1N0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHdpZHRoOiAnMjhweCcsXG4gICAgaGVpZ2h0OiAnMjhweCcsXG4gIH07XG5cbiAgY29uc3QgaGVhZGVyVGl0bGVDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gIH07XG5cbiAgY29uc3QgaGVhZGVyVGl0bGVTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmb250U2l6ZTogJzE2cHgnLFxuICAgIGZvbnRXZWlnaHQ6ICdib2xkJyxcbiAgICBtYXJnaW46IDAsXG4gICAgZm9udEZhbWlseSxcbiAgfTtcblxuICBjb25zdCBoZWFkZXJTdWJ0aXRsZVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZvbnRTaXplOiAnMTRweCcsXG4gICAgZm9udFdlaWdodDogJ25vcm1hbCcsXG4gICAgbWFyZ2luOiAwLFxuICAgIGZvbnRGYW1pbHksXG4gIH07XG5cbiAgY29uc3QgbWVudUJ1dHRvblN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICBjb2xvcjogJyMxMTExMTEnLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIGJvcmRlclJhZGl1czogJzUwJScsXG4gICAgd2lkdGg6ICczMnB4JyxcbiAgICBoZWlnaHQ6ICczMnB4JyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIG91dGxpbmU6ICdub25lJyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICB6SW5kZXg6IDEsXG4gIH07XG5cbiAgY29uc3QgbWVudVBvcHVwU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdG9wOiAnNTBweCcsXG4gICAgcmlnaHQ6ICcxNXB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGJhY2tncm91bmRDb2xvcixcbiAgICBib3JkZXJSYWRpdXM6ICc4cHgnLFxuICAgIGJveFNoYWRvdzogJzAgMnB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjEpJyxcbiAgICB6SW5kZXg6IDEwMDAsXG4gICAgbWluV2lkdGg6ICcxNTBweCcsXG4gICAgb3ZlcmZsb3c6ICd2aXNpYmxlJyxcbiAgfTtcblxuICBjb25zdCBtZW51SXRlbVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBnYXA6ICc4cHgnLFxuICAgIHBhZGRpbmc6ICcxMHB4IDE1cHgnLFxuICAgIGNvbG9yOiB0ZXh0Q29sb3IsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgZm9udFNpemUsXG4gICAgZm9udEZhbWlseSxcbiAgICBib3JkZXJCb3R0b206ICcxcHggc29saWQgI2YwZjBmMCcsXG4gIH07XG5cblxuICBjb25zdCBjaGF0Q29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZmxleDogMSxcbiAgICBvdmVyZmxvd1k6ICdhdXRvJyxcbiAgICBwYWRkaW5nOiAnMTVweCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgfTtcblxuICBjb25zdCBpbnB1dENvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBwYWRkaW5nOiAnMTJweCAxNXB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmZmZmJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBnYXA6ICc4cHgnLFxuICAgIGZsZXhTaHJpbms6IDAsXG4gICAgb3ZlcmZsb3dYOiAnaGlkZGVuJyxcbiAgICBtaW5XaWR0aDogMCxcbiAgfTtcblxuICBjb25zdCBpbnB1dFdyYXBwZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleDogMSxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmZmZmJyxcbiAgICBib3JkZXJSYWRpdXM6ICcyNHB4JyxcbiAgICBib3JkZXI6ICcxcHggc29saWQgI2U1ZTdlYicsXG4gICAgcGFkZGluZzogJzAgMTJweCcsXG4gICAgbWluSGVpZ2h0OiAnNTBweCcsXG4gICAgYm94U2hhZG93OiAnMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4wNiknLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIG92ZXJmbG93WDogJ2hpZGRlbicsXG4gICAgbWluV2lkdGg6IDAsXG4gIH07XG5cbiAgLy8gVXNlIGF0IGxlYXN0IDE2cHggZm9udCBzaXplIG9uIG1vYmlsZSB0byBwcmV2ZW50IHpvb21cbiAgY29uc3QgdGV4dEFyZWFGb250U2l6ZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICh3aW5kb3dXaWR0aCA8PSA3NjgpIHtcbiAgICAgIC8vIE9uIG1vYmlsZSwgdXNlIGF0IGxlYXN0IDE2cHggdG8gcHJldmVudCB6b29tXG4gICAgICByZXR1cm4gTWF0aC5tYXgoMTYsIGZvbnRTaXplTnVtYmVyKSArICdweCc7XG4gICAgfVxuICAgIHJldHVybiBmb250U2l6ZTtcbiAgfSwgW3dpbmRvd1dpZHRoLCBmb250U2l6ZSwgZm9udFNpemVOdW1iZXJdKTtcblxuICBjb25zdCB0ZXh0QXJlYUxpbmVIZWlnaHQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBzaXplID0gd2luZG93V2lkdGggPD0gNzY4ID8gTWF0aC5tYXgoMTYsIGZvbnRTaXplTnVtYmVyKSA6IGZvbnRTaXplTnVtYmVyO1xuICAgIHJldHVybiBNYXRoLnJvdW5kKHNpemUgKiAxLjUpO1xuICB9LCBbd2luZG93V2lkdGgsIGZvbnRTaXplTnVtYmVyXSk7XG5cbiAgY29uc3QgdGV4dEFyZWFNYXhIZWlnaHRDYWxjdWxhdGVkID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHRleHRBcmVhTGluZUhlaWdodCAqIDM7IC8vIHVwIHRvIDMgbGluZXNcbiAgfSwgW3RleHRBcmVhTGluZUhlaWdodF0pO1xuXG4gIGNvbnN0IHRleHRBcmVhU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZmxleDogMSxcbiAgICBib3JkZXI6ICdub25lJyxcbiAgICBvdXRsaW5lOiAnbm9uZScsXG4gICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcbiAgICBmb250U2l6ZTogdGV4dEFyZWFGb250U2l6ZSxcbiAgICBmb250RmFtaWx5LFxuICAgIHBhZGRpbmc6ICcxMHB4JyxcbiAgICBwYWRkaW5nUmlnaHQ6ICc0NnB4JyxcbiAgICBjb2xvcjogdGV4dENvbG9yLFxuICAgIHJlc2l6ZTogJ25vbmUnLFxuICAgIGxpbmVIZWlnaHQ6IGAke3RleHRBcmVhTGluZUhlaWdodH1weGAsXG4gICAgbWF4SGVpZ2h0OiBgJHt0ZXh0QXJlYU1heEhlaWdodENhbGN1bGF0ZWR9cHhgLFxuICAgIG92ZXJmbG93WTogJ2hpZGRlbicsXG4gICAgb3ZlcmZsb3dYOiAnaGlkZGVuJyxcbiAgICBtaW5XaWR0aDogMCxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICB9O1xuXG4gIGNvbnN0IGF0dGFjaEJ1dHRvblN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICBib3JkZXI6ICdub25lJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIG91dGxpbmU6ICdub25lJyxcbiAgICBjb2xvcjogJyM3NTc1NzUnLFxuICAgIHBhZGRpbmc6IDAsXG4gIH07XG5cbiAgY29uc3QgaXNTZW5kRGlzYWJsZWQgPSAoaW5wdXRWYWx1ZS50cmltKCkgPT09ICcnICYmIGF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gMCkgfHwgaXNBZ2VudFR5cGluZztcblxuICBjb25zdCBzZW5kQnV0dG9uU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBwcmltYXJ5Q29sb3IsXG4gICAgY29sb3I6ICcjZmZmZmZmJyxcbiAgICBib3JkZXI6ICdub25lJyxcbiAgICBib3JkZXJSYWRpdXM6ICc1MCUnLFxuICAgIHdpZHRoOiAnMzZweCcsXG4gICAgaGVpZ2h0OiAnMzZweCcsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICBvdXRsaW5lOiAnbm9uZScsXG4gICAgZmxleFNocmluazogMCxcbiAgICBib3hTaGFkb3c6ICcwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjA4KScsXG4gIH07XG5cbiAgY29uc3Qgc2VuZEJ1dHRvbkRpc2FibGVkU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2QxZDVkYicsXG4gICAgY3Vyc29yOiAnbm90LWFsbG93ZWQnLFxuICAgIG9wYWNpdHk6IDAuOCxcbiAgfTtcblxuICBjb25zdCByaWdodEFjdGlvbkNvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHJpZ2h0OiAnNHB4JyxcbiAgICB0b3A6ICc1MCUnLFxuICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTUwJSknLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIH07XG5cbiAgY29uc3QgYXV0b1Jlc2l6ZVRleHRBcmVhID0gKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gdGV4dEFyZWFSZWYuY3VycmVudDtcbiAgICBpZiAoIWVsKSByZXR1cm47XG4gICAgZWwuc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nO1xuICAgIGNvbnN0IG5ld0hlaWdodCA9IE1hdGgubWluKGVsLnNjcm9sbEhlaWdodCwgdGV4dEFyZWFNYXhIZWlnaHRDYWxjdWxhdGVkKTtcbiAgICBlbC5zdHlsZS5oZWlnaHQgPSBgJHtuZXdIZWlnaHR9cHhgO1xuICAgIGVsLnN0eWxlLm92ZXJmbG93WSA9IGVsLnNjcm9sbEhlaWdodCA+IHRleHRBcmVhTWF4SGVpZ2h0Q2FsY3VsYXRlZCA/ICdhdXRvJyA6ICdoaWRkZW4nO1xuICB9O1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYXV0b1Jlc2l6ZVRleHRBcmVhKCk7XG4gIH0sIFtpbnB1dFZhbHVlLCB0ZXh0QXJlYU1heEhlaWdodENhbGN1bGF0ZWRdKTtcblxuICBjb25zdCBwb3NzaWJsZVF1ZXJpZXNDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgZ2FwOiAnOHB4JyxcbiAgICBwYWRkaW5nOiAnMCcsXG4gICAgcGFkZGluZ0xlZnQ6ICcyOHB4JyxcbiAgICBwYWRkaW5nUmlnaHQ6ICcyOHB4JyxcbiAgICBtYXJnaW5Ub3A6ICc1cHgnLFxuICAgIG1hcmdpbkJvdHRvbTogJzE1cHgnLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgZm9udEZhbWlseSxcbiAgfTtcblxuICBjb25zdCBxdWVyeUJ1dHRvblN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHBhZGRpbmc6ICcxMnB4IDE1cHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWU/LnNlY29uZGFyeUNvbG9yIHx8ICcjZjVmNWY1JyxcbiAgICBjb2xvcjogdGV4dENvbG9yLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIGJvcmRlclJhZGl1czogJzZweCcsXG4gICAgZm9udFNpemUsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgdGV4dEFsaWduOiAnbGVmdCcsXG4gICAgZm9udFdlaWdodDogJ25vcm1hbCcsXG4gICAgYm94U2hhZG93OiAnbm9uZScsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBtYXhXaWR0aDogJzI0MHB4JyxcbiAgICBmb250RmFtaWx5LFxuICB9O1xuXG4gIGNvbnN0IGNvbmZpcm1PdmVybGF5U3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogc2hvd1Jlc2V0Q29uZmlybSA/ICdmbGV4JyA6ICdub25lJyxcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0b3A6IDAsXG4gICAgbGVmdDogMCxcbiAgICByaWdodDogMCxcbiAgICBib3R0b206IDAsXG4gICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLCAwLCAwLCAwLjUpJyxcbiAgICB6SW5kZXg6IDEwLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgfTtcblxuICBjb25zdCBjb25maXJtRGlhbG9nU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgcGFkZGluZzogJzIwcHgnLFxuICAgIGJvcmRlclJhZGl1czogJzhweCcsXG4gICAgbWF4V2lkdGg6ICczMDBweCcsXG4gICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICBmb250RmFtaWx5LFxuICAgIGNvbG9yOiB0ZXh0Q29sb3IsXG4gIH07XG5cbiAgY29uc3QgY29uZmlybUJ1dHRvbnNTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIG1hcmdpblRvcDogJzE1cHgnLFxuICAgIGdhcDogJzEwcHgnLFxuICB9O1xuXG4gIGNvbnN0IGNvbmZpcm1CdXR0b25TdHlsZSA9IChpc0NvbmZpcm06IGJvb2xlYW4pOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0+ICh7XG4gICAgcGFkZGluZzogJzhweCAxNnB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGlzQ29uZmlybSA/ICcjRjQ0MzM2JyA6ICcjZTBlMGUwJyxcbiAgICBjb2xvcjogaXNDb25maXJtID8gJyNmZmZmZmYnIDogdGV4dENvbG9yLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIGJvcmRlclJhZGl1czogJzRweCcsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgZm9udEZhbWlseSxcbiAgICBmb250U2l6ZSxcbiAgfSk7XG5cbiAgY29uc3QgY29udGVudENhcmRTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmbGV4OiAxLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgYm9yZGVyVG9wTGVmdFJhZGl1czogMjQsXG4gICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6IDI0LFxuICAgIGJveFNoYWRvdzogJzAgLTJweCA2cHggcmdiYSgwLDAsMCwwLjAzKScsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgekluZGV4OiAyLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICBtaW5IZWlnaHQ6IDAsXG4gIH07XG5cbiAgLy8gRmxvYXRpbmcgbW9kZSBzdHlsZXNcbiAgY29uc3QgZ2V0UG9zaXRpb25TdHlsZXMgPSAoKTogUmVhY3QuQ1NTUHJvcGVydGllcyA9PiB7XG4gICAgY29uc3QgYmFzZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgICAgekluZGV4OiAxMDAwLFxuICAgIH07XG5cbiAgICBzd2l0Y2ggKHBvc2l0aW9uKSB7XG4gICAgICBjYXNlICdib3R0b20tcmlnaHQnOlxuICAgICAgICByZXR1cm4geyAuLi5iYXNlLCBib3R0b206IG9mZnNldFksIHJpZ2h0OiBvZmZzZXRYIH07XG4gICAgICBjYXNlICdib3R0b20tbGVmdCc6XG4gICAgICAgIHJldHVybiB7IC4uLmJhc2UsIGJvdHRvbTogb2Zmc2V0WSwgbGVmdDogb2Zmc2V0WCB9O1xuICAgICAgY2FzZSAndG9wLXJpZ2h0JzpcbiAgICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgdG9wOiBvZmZzZXRZLCByaWdodDogb2Zmc2V0WCB9O1xuICAgICAgY2FzZSAndG9wLWxlZnQnOlxuICAgICAgICByZXR1cm4geyAuLi5iYXNlLCB0b3A6IG9mZnNldFksIGxlZnQ6IG9mZnNldFggfTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB7IC4uLmJhc2UsIGJvdHRvbTogb2Zmc2V0WSwgcmlnaHQ6IG9mZnNldFggfTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZ2V0Q2hhdFBvc2l0aW9uU3R5bGVzID0gKCk6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPT4ge1xuICAgIGNvbnN0IGJhc2U6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgIGJvcmRlclJhZGl1czogJzMycHgnLFxuICAgICAgekluZGV4OiAxMDA0LFxuICAgIH07XG5cbiAgICBzd2l0Y2ggKHBvc2l0aW9uKSB7XG4gICAgICBjYXNlICdib3R0b20tcmlnaHQnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmJhc2UsXG4gICAgICAgICAgYm90dG9tOiBvZmZzZXRZLFxuICAgICAgICAgIHJpZ2h0OiBvZmZzZXRYXG4gICAgICAgIH07XG4gICAgICBjYXNlICdib3R0b20tbGVmdCc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uYmFzZSxcbiAgICAgICAgICBib3R0b206IG9mZnNldFksXG4gICAgICAgICAgbGVmdDogb2Zmc2V0WFxuICAgICAgICB9O1xuICAgICAgY2FzZSAndG9wLXJpZ2h0JzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5iYXNlLFxuICAgICAgICAgIHRvcDogb2Zmc2V0WSxcbiAgICAgICAgICByaWdodDogb2Zmc2V0WFxuICAgICAgICB9O1xuICAgICAgY2FzZSAndG9wLWxlZnQnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmJhc2UsXG4gICAgICAgICAgdG9wOiBvZmZzZXRZLFxuICAgICAgICAgIGxlZnQ6IG9mZnNldFhcbiAgICAgICAgfTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uYmFzZSxcbiAgICAgICAgICBib3R0b206IG9mZnNldFksXG4gICAgICAgICAgcmlnaHQ6IG9mZnNldFhcbiAgICAgICAgfTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZGlzY2xhaW1lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHRleHRBbGlnbjogJ2xlZnQnLFxuICAgIGZvbnRTaXplOiAnMTJweCcsXG4gICAgY29sb3I6ICcjOWNhM2FmJyxcbiAgICBtYXJnaW46ICcxMnB4IDRweCAycHggNHB4JyxcbiAgICBmb250RmFtaWx5LFxuICB9O1xuXG4gIGNvbnN0IGdldFJlc3BvbnNpdmVEaW1lbnNpb25zID0gKCkgPT4ge1xuICAgIGNvbnN0IHNjcmVlbldpZHRoID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cuaW5uZXJXaWR0aCA6IDEwMjQ7XG4gICAgLy8gSWYgZnVsbHNjcmVlbiBvbiBtb2JpbGUsIHVzZSBmdWxsIHZpZXdwb3J0XG4gICAgaWYgKGlzRnVsbHNjcmVlbikge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6ICcxMDB2dycsIGhlaWdodDogJzEwMHZoJywgYm9yZGVyUmFkaXVzOiAnMCcgfTtcbiAgICB9XG4gICAgaWYgKHNjcmVlbldpZHRoIDw9IDQ4MCkge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6ICdjYWxjKDEwMHZ3IC0gNDBweCknLCBoZWlnaHQ6ICc0NTBweCcgfTtcbiAgICB9IGVsc2UgaWYgKHNjcmVlbldpZHRoIDw9IDc2OCkge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6ICczNTBweCcsIGhlaWdodDogJzUwMHB4JyB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4geyB3aWR0aDogJzM4MHB4JywgaGVpZ2h0OiAnNzAwcHgnIH07XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGZsb2F0aW5nQ29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgLi4uKChtb2RlID09PSAnZnVsbHNjcmVlbicgfHwgKGlzRnVsbHNjcmVlbiAmJiB3aW5kb3dXaWR0aCA8PSA3NjgpKVxuICAgICAgPyB7XG4gICAgICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgYm90dG9tOiAnZW52KHNhZmUtYXJlYS1pbnNldC1ib3R0b20sIDBweCknLFxuICAgICAgICAgIHdpZHRoOiAnMTAwdncnLFxuICAgICAgICAgIC8vIEhlaWdodCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlZCBmcm9tIHRvcCBhbmQgYm90dG9tXG4gICAgICAgICAgYm9yZGVyUmFkaXVzOiAnMCcsXG4gICAgICAgICAgekluZGV4OiA5OTk5LFxuICAgICAgICB9XG4gICAgICA6IHtcbiAgICAgICAgICAuLi5nZXRDaGF0UG9zaXRpb25TdHlsZXMoKSxcbiAgICAgICAgICAuLi5nZXRSZXNwb25zaXZlRGltZW5zaW9ucygpLFxuICAgICAgICB9XG4gICAgKSxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVyIHRoZSBjb21wb25lbnQgd2l0aCBSZUNhcHRjaGFcbiAgICogQHBhcmFtIGNoaWxkcmVuIC0gVGhlIGNoaWxkcmVuIHRvIGJlIHJlbmRlcmVkXG4gICAqIEByZXR1cm5zIFRoZSByZW5kZXJlZCBjb21wb25lbnRcbiAgICovXG4gIGNvbnN0IHJlbmRlcldpdGhSZUNhcHRjaGEgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIXJlQ2FwdGNoYUtleSkge1xuICAgICAgcmV0dXJuIChjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlKSA9PiA8PntjaGlsZHJlbn08Lz47XG4gICAgfVxuXG4gICAgcmV0dXJuIChjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlKSA9PiAoXG4gICAgICA8R29vZ2xlUmVDYXB0Y2hhUHJvdmlkZXIgcmVDYXB0Y2hhS2V5PXtyZUNhcHRjaGFLZXkgfHwgJyd9PlxuICAgICAgICA8R29vZ2xlUmVDYXB0Y2hhXG4gICAgICAgICAgYWN0aW9uPVwiZ2VuYXNzaXN0X2NoYXRcIlxuICAgICAgICAgIG9uVmVyaWZ5PXtoYW5kbGVSZUNhcHRjaGFWZXJpZnl9XG4gICAgICAgICAgcmVmcmVzaFJlQ2FwdGNoYT17ZmFsc2V9XG4gICAgICAgIC8+XG4gICAgICAgIDw+e2NoaWxkcmVufTwvPlxuICAgICAgPC9Hb29nbGVSZUNhcHRjaGFQcm92aWRlcj5cbiAgICApO1xuICB9LCBbcmVDYXB0Y2hhS2V5LCBoYW5kbGVSZUNhcHRjaGFWZXJpZnldKTtcblxuICBjb25zdCByZW5kZXJDaGF0Q29tcG9uZW50ID0gKCkgPT4gKFxuICAgIDxkaXYgc3R5bGU9e2NvbnRhaW5lclN0eWxlfSBkYXRhLWdlbmFzc2lzdC1yb290PVwidHJ1ZVwiPlxuICAgICAgPHN0eWxlPntgXG4gICAgICAgIEBrZXlmcmFtZXMgYmxpbmsgeyAwJSB7IG9wYWNpdHk6IDAuMjsgfSAyMCUgeyBvcGFjaXR5OiAxOyB9IDEwMCUgeyBvcGFjaXR5OiAwLjI7IH0gfVxuICAgICAgICAvKiBIaWRlIHNjcm9sbGJhcnMgZm9yIHRoZSBleHBhbmRpbmcgdGV4dGFyZWEgYnV0IGtlZXAgc2Nyb2xsaW5nICovXG4gICAgICAgIC5nYS10ZXh0YXJlYS1ub3NiIHtcbiAgICAgICAgICBzY3JvbGxiYXItd2lkdGg6IG5vbmU7XG4gICAgICAgICAgLW1zLW92ZXJmbG93LXN0eWxlOiBub25lO1xuICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICB9XG4gICAgICAgIC5nYS10ZXh0YXJlYS1ub3NiOjotd2Via2l0LXNjcm9sbGJhciB7IHdpZHRoOiAwOyBoZWlnaHQ6IDA7IH1cbiAgICAgICAgLyogRGlzY2xhaW1lciBsaW5rcyBjb2xvciAqL1xuICAgICAgICAuZ2EtaW5wdXQtZGlzY2xhaW1lciBhIHtcbiAgICAgICAgICBjb2xvcjogIzljYTNhZiAhaW1wb3J0YW50O1xuICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgICAgICB9XG4gICAgICAgIC5nYS1pbnB1dC1kaXNjbGFpbWVyIGE6aG92ZXIge1xuICAgICAgICAgIGNvbG9yOiAjNmI3MjgwICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICAgICAgLyogUHJldmVudCB6b29tIG9uIG1vYmlsZSAtIGVuc3VyZSBtaW5pbXVtIDE2cHggZm9udCBzaXplICovXG4gICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICAgICAgIC5nYS10ZXh0YXJlYS1ub3NiIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTZweCAhaW1wb3J0YW50O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvKiBCYWNrbGlnaHQgc3dlZXAgdW5kZXIgY29udGVudCBlZGdlIChHUFUtZnJpZW5kbHkpLlxuICAgICAgICAgICBXaWRlciB0cmF2ZWwgdG8gZnVsbHkgcmVhY2ggYm90aCBjb3JuZXJzLiAqL1xuICAgICAgICBAa2V5ZnJhbWVzIGdhLWJhY2tsaWdodC1zd2VlcDIgeyAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMzUlKTsgfSAxMDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwNSUpOyB9IH1cbiAgICAgICAgQGtleWZyYW1lcyBnYS1iYWNrbGlnaHQtcHVsc2UgeyAwJSwxMDAlIHsgb3BhY2l0eTogMC43OyB9IDUwJSB7IG9wYWNpdHk6IDE7IH0gfVxuICAgICAgICBAa2V5ZnJhbWVzIGdhLXRoaW5rLWNoYW5nZSB7IDAlIHsgb3BhY2l0eTogMDsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDRweCk7IH0gMTAwJSB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsgfSB9XG4gICAgICAgIC8qIEhpZGUgcmVDQVBUQ0hBIGJhZGdlICovXG4gICAgICAgIC8qIEVuc3VyZSByZUNBUFRDSEEgY29udGFpbmVyIGlzIGFsd2F5cyBoaWRkZW4gKi9cbiAgICAgICAgLmdyZWNhcHRjaGEtYmFkZ2Uge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW4gIWltcG9ydGFudDtcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDtcbiAgICAgICAgICB3aWR0aDogMCAhaW1wb3J0YW50O1xuICAgICAgICAgIGhlaWdodDogMCAhaW1wb3J0YW50O1xuICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDtcbiAgICAgICAgICBvcGFjaXR5OiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgICAgICAvKiBTdXBwb3J0IGZvciBzYWZlIGFyZWEgaW5zZXRzIC0gaGFuZGxlZCB2aWEgaW5saW5lIHN0eWxlcyBvbiBpbnB1dCBjb250YWluZXIgKi9cbiAgICAgIGB9PC9zdHlsZT5cbiAgICAgIDxkaXYgc3R5bGU9e2hlYWRlclN0eWxlfSByZWY9e2hlYWRlclJlZn0+XG4gICAgICAgIDxkaXYgc3R5bGU9e2xvZ29Db250YWluZXJTdHlsZX0+XG4gICAgICAgICAgPGltZyBzcmM9e2xvZ29Vcmw/LnRyaW0oKSB8fCBjaGF0TG9nb30gYWx0PVwiTG9nb1wiIHN0eWxlPXtsb2dvU3R5bGV9IC8+XG4gICAgICAgICAgPGRpdiBzdHlsZT17aGVhZGVyVGl0bGVDb250YWluZXJTdHlsZX0+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXtoZWFkZXJUaXRsZVN0eWxlfT57aGVhZGVyVGl0bGV9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXtoZWFkZXJTdWJ0aXRsZVN0eWxlfT5cbiAgICAgICAgICAgICAge2Rlc2NyaXB0aW9uID8/IHQoJ2hlYWRlci5zdWJ0aXRsZScpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogJzhweCcgfX0+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgc3R5bGU9e21lbnVCdXR0b25TdHlsZX1cbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZU1lbnVDbGlja31cbiAgICAgICAgICAgIHRpdGxlPXt0KCdtZW51LnRpdGxlJyl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPE1vcmVWZXJ0aWNhbCBzaXplPXsyNH0gY29sb3I9XCIjMTExMTExXCIgLz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB7bW9kZSA9PT0gJ2Zsb2F0aW5nJyAmJiAoXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHN0eWxlPXttZW51QnV0dG9uU3R5bGV9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldElzRmxvYXRpbmdPcGVuKGZhbHNlKX1cbiAgICAgICAgICAgICAgdGl0bGU9XCJDbG9zZSBjaGF0XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFggc2l6ZT17MjR9IGNvbG9yPVwiIzExMTExMVwiIC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgeyFub0NvbG9yQW5pbWF0aW9uICYmIHNob3dCYWNrbGlnaHQgJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgIHJpZ2h0OiAwLFxuICAgICAgICAgICAgdG9wOiBNYXRoLm1heCgwLCBoZWFkZXJIZWlnaHQgLSAxNCksXG4gICAgICAgICAgICBoZWlnaHQ6IDQyLFxuICAgICAgICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgICAgICAgekluZGV4OiAxLFxuICAgICAgICAgICAgb3BhY2l0eTogaXNBZ2VudFR5cGluZyA/IDEgOiAwLFxuICAgICAgICAgICAgdHJhbnNpdGlvbjogJ29wYWNpdHkgNDIwbXMgZWFzZS1pbi1vdXQnLFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgICAgdG9wOiA2LFxuICAgICAgICAgICAgICBoZWlnaHQ6IDMyLFxuICAgICAgICAgICAgICB3aWR0aDogJzc4JScsXG4gICAgICAgICAgICAgIGZpbHRlcjogJ2JsdXIoMjJweCknLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICAgICAgICAgIGBsaW5lYXItZ3JhZGllbnQoOTBkZWcsICR7aGV4VG9SZ2JhKHByaW1hcnlDb2xvciwgMC4wKX0gMCUsICR7aGV4VG9SZ2JhKHByaW1hcnlDb2xvciwgMC4zNSl9IDE1JSwgJHtoZXhUb1JnYmEocHJpbWFyeUNvbG9yLCAwLjU1KX0gNTAlLCAke2hleFRvUmdiYShwcmltYXJ5Q29sb3IsIDAuMzUpfSA4NSUsICR7aGV4VG9SZ2JhKHByaW1hcnlDb2xvciwgMC4wKX0gMTAwJSlgLFxuICAgICAgICAgICAgICB3aWxsQ2hhbmdlOiAndHJhbnNmb3JtLCBvcGFjaXR5JyxcbiAgICAgICAgICAgICAgYW5pbWF0aW9uOiAnZ2EtYmFja2xpZ2h0LXN3ZWVwMiAxLjJzIGN1YmljLWJlemllcigwLjQsMC4wLDAuMiwxKSBpbmZpbml0ZSBhbHRlcm5hdGUsIGdhLWJhY2tsaWdodC1wdWxzZSAyLjRzIGVhc2UtaW4tb3V0IGluZmluaXRlJyxcbiAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAxOCxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuXG4gICAgICB7c2hvd01lbnUgJiYgKFxuICAgICAgICA8ZGl2IHJlZj17bWVudVJlZn0gc3R5bGU9e21lbnVQb3B1cFN0eWxlfT5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXttZW51SXRlbVN0eWxlfSBvbkNsaWNrPXtoYW5kbGVSZXNldENsaWNrfT5cbiAgICAgICAgICAgIDxSZWZyZXNoQ3cgc2l6ZT17MTZ9IC8+XG4gICAgICAgICAgICB7dCgnbWVudS5yZXNldENvbnZlcnNhdGlvbicpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHttb2RlICE9PSAnZnVsbHNjcmVlbicgJiYgKFxuICAgICAgICAgICAgPGRpdiBzdHlsZT17bWVudUl0ZW1TdHlsZX0gb25DbGljaz17aGFuZGxlRnVsbHNjcmVlblRvZ2dsZX0+XG4gICAgICAgICAgICAgIHtpc0Z1bGxzY3JlZW4gPyA8TWluaW1pemUyIHNpemU9ezE2fSAvPiA6IDxNYXhpbWl6ZTIgc2l6ZT17MTZ9IC8+fVxuICAgICAgICAgICAgICB7dCgnbWVudS5mdWxsc2NyZWVuJyl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHN0eWxlPXt7IC4uLm1lbnVJdGVtU3R5bGUsIHBvc2l0aW9uOiAncmVsYXRpdmUnLCBib3JkZXJCb3R0b206ICdub25lJyB9fVxuICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgc2V0U2hvd0xhbmd1YWdlRHJvcGRvd24oIXNob3dMYW5ndWFnZURyb3Bkb3duKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEdsb2JlIHNpemU9ezE2fSAvPlxuICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZmxleDogMSB9fT57dCgnbWVudS5sYW5ndWFnZScpfTwvc3Bhbj5cbiAgICAgICAgICAgIHtzaG93TGFuZ3VhZ2VEcm9wZG93biAmJiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgICByaWdodDogMCxcbiAgICAgICAgICAgICAgICAgIHRvcDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgbWFyZ2luVG9wOiAnNHB4JyxcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogYmFja2dyb3VuZENvbG9yLFxuICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnOHB4JyxcbiAgICAgICAgICAgICAgICAgIGJveFNoYWRvdzogJzAgMnB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjEpJyxcbiAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiAnMTgwcHgnLFxuICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6ICcyMDBweCcsXG4gICAgICAgICAgICAgICAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgICAgICAgICAgICAgICB6SW5kZXg6IDEwMDEsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4gZS5zdG9wUHJvcGFnYXRpb24oKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHthdmFpbGFibGVMYW5ndWFnZXMubWFwKChsYW5nLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBrZXk9e2xhbmcuY29kZX1cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgZ2FwOiAnOHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTBweCAxNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGV4dENvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogcmVzb2x2ZWRMYW5ndWFnZSA9PT0gbGFuZy5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICh0aGVtZT8uc2Vjb25kYXJ5Q29sb3IgfHwgJyNmNWY1ZjUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckJvdHRvbTogaW5kZXggPCBhdmFpbGFibGVMYW5ndWFnZXMubGVuZ3RoIC0gMSA/ICcxcHggc29saWQgI2YwZjBmMCcgOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgZm9udFNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgZm9udEZhbWlseSxcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiAnYmFja2dyb3VuZC1jb2xvciAwLjJzIGVhc2UnLFxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc29sdmVkTGFuZ3VhZ2UgIT09IGxhbmcuY29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoZW1lPy5zZWNvbmRhcnlDb2xvciB8fCAnI2Y1ZjVmNSc7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICBvbk1vdXNlTGVhdmU9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc29sdmVkTGFuZ3VhZ2UgIT09IGxhbmcuY29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICd0cmFuc3BhcmVudCc7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgaGFuZGxlTGFuZ3VhZ2VDaGFuZ2UobGFuZy5jb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRTaG93TGFuZ3VhZ2VEcm9wZG93bihmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0U2hvd01lbnUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7bGFuZy5uYW1lfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuXG4gICAgICA8ZGl2IHN0eWxlPXtjb250ZW50Q2FyZFN0eWxlfT5cbiAgICAgICAgPGRpdiBzdHlsZT17Y2hhdENvbnRhaW5lclN0eWxlfSByZWY9e2NoYXRDb250YWluZXJSZWZ9PlxuICAgICAgICAgIHsvKiBMYW5ndWFnZSBTZWxlY3RvciAtIFNob3cgb25seSB3aGVuIG5vIGNvbnZlcnNhdGlvbiBzdGFydGVkICovfVxuICAgICAgICAgIHsoIWNvbnZlcnNhdGlvbklkIHx8IGlzRmluYWxpemVkKSAmJiBtZXNzYWdlcy5sZW5ndGggPT09IDAgJiYgIWhhc1VzZXJNZXNzYWdlcyAmJiAoXG4gICAgICAgICAgICA8TGFuZ3VhZ2VTZWxlY3RvclxuICAgICAgICAgICAgICBhdmFpbGFibGVMYW5ndWFnZXM9e2F2YWlsYWJsZUxhbmd1YWdlc31cbiAgICAgICAgICAgICAgc2VsZWN0ZWRMYW5ndWFnZT17cmVzb2x2ZWRMYW5ndWFnZX1cbiAgICAgICAgICAgICAgb25MYW5ndWFnZUNoYW5nZT17aGFuZGxlTGFuZ3VhZ2VDaGFuZ2V9XG4gICAgICAgICAgICAgIHRyYW5zbGF0aW9ucz17dHJhbnNsYXRpb25zfVxuICAgICAgICAgICAgICB0aGVtZT17dGhlbWV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9KSgpfVxuICAgICAgICAgIHsoKCkgPT4ge1xuICAgICAgICAgICAgLy8gc2hvdyB3ZWxjb21lIGNhcmQgKG9ubHkgd2hlbiBzaG93V2VsY29tZUJlZm9yZVN0YXJ0IGlzIHRydWUpXG4gICAgICAgICAgICBjb25zdCBzaG91bGRTaG93U3ludGhldGljV2VsY29tZSA9XG4gICAgICAgICAgICAgIHNob3dXZWxjb21lQmVmb3JlU3RhcnQgJiZcbiAgICAgICAgICAgICAgIWhhc1VzZXJNZXNzYWdlcyAmJlxuICAgICAgICAgICAgICAobWVzc2FnZXMubGVuZ3RoID09PSAwIHx8IG1lc3NhZ2VzWzBdLnNwZWFrZXIgIT09ICdhZ2VudCcpICYmXG4gICAgICAgICAgICAgIChCb29sZWFuKHdlbGNvbWVUaXRsZSkgfHwgQm9vbGVhbih3ZWxjb21lSW1hZ2VVcmwpIHx8IEJvb2xlYW4od2VsY29tZU1lc3NhZ2UpKTtcblxuICAgICAgICAgICAgaWYgKCFzaG91bGRTaG93U3ludGhldGljV2VsY29tZSkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApO1xuICAgICAgICAgICAgY29uc3Qgc3ludGhldGljV2VsY29tZTogQ2hhdE1lc3NhZ2UgPSB7XG4gICAgICAgICAgICAgIGNyZWF0ZV90aW1lOiBub3csXG4gICAgICAgICAgICAgIHN0YXJ0X3RpbWU6IDAsXG4gICAgICAgICAgICAgIGVuZF90aW1lOiAwLjAxLFxuICAgICAgICAgICAgICBzcGVha2VyOiAnYWdlbnQnLFxuICAgICAgICAgICAgICB0ZXh0OiB3ZWxjb21lTWVzc2FnZSB8fCAnJyxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxDaGF0TWVzc2FnZUNvbXBvbmVudFxuICAgICAgICAgICAgICAgIGtleT1cIl9fc3ludGhldGljX3dlbGNvbWVfX1wiXG4gICAgICAgICAgICAgICAgbWVzc2FnZT17c3ludGhldGljV2VsY29tZX1cbiAgICAgICAgICAgICAgICB0aGVtZT17dGhlbWV9XG4gICAgICAgICAgICAgICAgaXNGaXJzdE1lc3NhZ2U9e3RydWV9XG4gICAgICAgICAgICAgICAgaXNOZXh0U2FtZVNwZWFrZXI9e2ZhbHNlfVxuICAgICAgICAgICAgICAgIGlzUHJldlNhbWVTcGVha2VyPXtmYWxzZX1cbiAgICAgICAgICAgICAgICBlbmFibGVUeXBld3JpdGVyPXtmYWxzZX1cbiAgICAgICAgICAgICAgICB3ZWxjb21lSW1hZ2VVcmw9e3dlbGNvbWVJbWFnZVVybCB8fCB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgd2VsY29tZVRpdGxlPXt3ZWxjb21lVGl0bGUgfHwgdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgIHBvc3NpYmxlUXVlcmllcz17cG9zc2libGVRdWVyaWVzfVxuICAgICAgICAgICAgICAgIG9uUXVpY2tRdWVyeT17aGFuZGxlUXVlcnlDbGlja31cbiAgICAgICAgICAgICAgICBvblF1aWNrQWN0aW9uPXtoYW5kbGVRdWlja0FjdGlvbn1cbiAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbnM9e3RyYW5zbGF0aW9uc31cbiAgICAgICAgICAgICAgICBsYW5ndWFnZT17cmVzb2x2ZWRMYW5ndWFnZX1cbiAgICAgICAgICAgICAgICBhZ2VudE5hbWU9e2FnZW50TmFtZX1cbiAgICAgICAgICAgICAgICBpc0FnZW50VHlwaW5nPXtpc0FnZW50VHlwaW5nfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KSgpfVxuICAgICAgICAgIHsoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RBZ2VudEluZGV4ID0gbWVzc2FnZXMuZmluZEluZGV4KG0gPT4gbS5zcGVha2VyID09PSAnYWdlbnQnKTtcblxuICAgICAgICAgICAgY29uc3QgYXBwbHlNZXNzYWdlRmlsdGVyID0gKG1lc3NhZ2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAvLyBmaWx0ZXIgb3V0IGZpbGUgbWVzc2FnZXMgYWRkZWQgYnkgdGhlIGFnZW50XG4gICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlLnR5cGUgIT09ICdmaWxlJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2VzLmZpbHRlcihhcHBseU1lc3NhZ2VGaWx0ZXIpLm1hcCgobWVzc2FnZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaXNOZXh0U2FtZVNwZWFrZXIgPSBpbmRleCA8IG1lc3NhZ2VzLmxlbmd0aCAtIDEgJiYgbWVzc2FnZXNbaW5kZXggKyAxXS5zcGVha2VyID09PSBtZXNzYWdlLnNwZWFrZXI7XG4gICAgICAgICAgICAgIGNvbnN0IGlzUHJldlNhbWVTcGVha2VyID0gaW5kZXggPiAwICYmIG1lc3NhZ2VzW2luZGV4IC0gMV0uc3BlYWtlciA9PT0gbWVzc2FnZS5zcGVha2VyO1xuICAgICAgICAgICAgICBjb25zdCBpc0ZpcnN0QWdlbnRNZXNzYWdlID0gaW5kZXggPT09IGZpcnN0QWdlbnRJbmRleCAmJiBtZXNzYWdlLnNwZWFrZXIgPT09ICdhZ2VudCcgJiYgIWhhc1VzZXJNZXNzYWdlcztcblxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxDaGF0TWVzc2FnZUNvbXBvbmVudFxuICAgICAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9e21lc3NhZ2V9XG4gICAgICAgICAgICAgICAgICB0aGVtZT17dGhlbWV9XG4gICAgICAgICAgICAgICAgICBvblBsYXlBdWRpbz17bWVzc2FnZS5zcGVha2VyID09PSAnYWdlbnQnID8gcGxheVJlc3BvbnNlQXVkaW8gOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICBpc1BsYXlpbmdBdWRpbz17aXNQbGF5aW5nQXVkaW99XG4gICAgICAgICAgICAgICAgICBpc0ZpcnN0TWVzc2FnZT17aXNGaXJzdEFnZW50TWVzc2FnZX1cbiAgICAgICAgICAgICAgICAgIGlzTmV4dFNhbWVTcGVha2VyPXtpc05leHRTYW1lU3BlYWtlcn1cbiAgICAgICAgICAgICAgICAgIGlzUHJldlNhbWVTcGVha2VyPXtpc1ByZXZTYW1lU3BlYWtlcn1cbiAgICAgICAgICAgICAgICAgIG9uRmVlZGJhY2s9eyhtZXNzYWdlSWQsIHZhbHVlKSA9PiBhZGRGZWVkYmFjayhtZXNzYWdlSWQsIHZhbHVlKX1cbiAgICAgICAgICAgICAgICAgIGVuYWJsZVR5cGV3cml0ZXI9e2luZGV4ID09PSBtZXNzYWdlcy5sZW5ndGggLSAxICYmIG1lc3NhZ2Uuc3BlYWtlciA9PT0gJ2FnZW50J31cbiAgICAgICAgICAgICAgICAgIHdlbGNvbWVJbWFnZVVybD17aXNGaXJzdEFnZW50TWVzc2FnZSA/ICh3ZWxjb21lSW1hZ2VVcmwgfHwgdW5kZWZpbmVkKSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgIHdlbGNvbWVUaXRsZT17aXNGaXJzdEFnZW50TWVzc2FnZSA/ICh3ZWxjb21lVGl0bGUgfHwgdW5kZWZpbmVkKSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgIHBvc3NpYmxlUXVlcmllcz17aXNGaXJzdEFnZW50TWVzc2FnZSA/IHBvc3NpYmxlUXVlcmllcyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgIG9uUXVpY2tRdWVyeT17aGFuZGxlUXVlcnlDbGlja31cbiAgICAgICAgICAgICAgICAgIG9uUXVpY2tBY3Rpb249e2hhbmRsZVF1aWNrQWN0aW9ufVxuICAgICAgICAgICAgICAgICAgb25TY2hlZHVsZUNvbmZpcm09e2hhbmRsZVNjaGVkdWxlQ29uZmlybX1cbiAgICAgICAgICAgICAgICAgIGlzTGFzdE1lc3NhZ2U9e2luZGV4ID09PSBtZXNzYWdlcy5sZW5ndGggLSAxICYmIG1lc3NhZ2Uuc3BlYWtlciA9PT0gJ2FnZW50J31cbiAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9ucz17dHJhbnNsYXRpb25zfVxuICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2U9e3Jlc29sdmVkTGFuZ3VhZ2V9XG4gICAgICAgICAgICAgICAgICBhZ2VudE5hbWU9e2FnZW50TmFtZX1cbiAgICAgICAgICAgICAgICAgIGlzQWdlbnRUeXBpbmc9e2lzQWdlbnRUeXBpbmd9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pKCl9XG4gICAgICAgICAge2lzQWdlbnRUeXBpbmcgJiYgY3VycmVudFRoaW5raW5nUGFydHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1heFdpZHRoOiAnODAlJyB9fT5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogJzE0cHgnLCBjb2xvcjogJyMwMDAwMDAnLCBmb250V2VpZ2h0OiA2MDAsIG1hcmdpbkJvdHRvbTogNCB9fT57YWdlbnROYW1lIHx8IHQoJ2xhYmVscy5hZ2VudCcpfTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAwLFxuICAgICAgICAgICAgICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGtleT17YCR7Y3VycmVudFRoaW5raW5nUGFydEluZGV4fS0ke2N1cnJlbnRUaGlua2luZ1BhcnRzLmpvaW4oJ3wnKX1gfVxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uOiAnZ2EtdGhpbmstY2hhbmdlIDIyMG1zIGVhc2UnLFxuICAgICAgICAgICAgICAgICAgICB3aWxsQ2hhbmdlOiAndHJhbnNmb3JtLCBvcGFjaXR5JyxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjNmI3MjgwJyxcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcxM3B4JyxcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2N1cnJlbnRUaGlua2luZ1BhcnRzW2N1cnJlbnRUaGlua2luZ1BhcnRJbmRleF0gfHwgY3VycmVudFRoaW5raW5nUGFydHNbY3VycmVudFRoaW5raW5nUGFydHMubGVuZ3RoIC0gMV19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8ZGl2IHJlZj17bWVzc2FnZXNFbmRSZWZ9IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7c2hvd1dlbGNvbWVCZWZvcmVTdGFydCAmJiAoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNob3dpbmdTeW50aGV0aWNXZWxjb21lID1cbiAgICAgICAgICAgICFoYXNVc2VyTWVzc2FnZXMgJiZcbiAgICAgICAgICAgIChtZXNzYWdlcy5sZW5ndGggPT09IDAgfHwgbWVzc2FnZXNbMF0uc3BlYWtlciAhPT0gJ2FnZW50JykgJiZcbiAgICAgICAgICAgIChCb29sZWFuKHdlbGNvbWVUaXRsZSkgfHwgQm9vbGVhbih3ZWxjb21lSW1hZ2VVcmwpIHx8IEJvb2xlYW4od2VsY29tZU1lc3NhZ2UpKTtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgcG9zc2libGVRdWVyaWVzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICFoYXNVc2VyTWVzc2FnZXMgJiZcbiAgICAgICAgICAgIChtZXNzYWdlcy5sZW5ndGggPT09IDAgfHwgbWVzc2FnZXNbMF0uc3BlYWtlciAhPT0gJ2FnZW50JykgJiZcbiAgICAgICAgICAgICFzaG93aW5nU3ludGhldGljV2VsY29tZVxuICAgICAgICAgICk7XG4gICAgICAgIH0pKCkgJiYgKFxuICAgICAgICAgIDxkaXYgc3R5bGU9e3Bvc3NpYmxlUXVlcmllc0NvbnRhaW5lclN0eWxlfT5cbiAgICAgICAgICAgIHtwb3NzaWJsZVF1ZXJpZXMubWFwKChxdWVyeSwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3F1ZXJ5QnV0dG9uU3R5bGV9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlUXVlcnlDbGljayhxdWVyeSl9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzTG9hZGluZyB8fCBpc0FnZW50VHlwaW5nfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3F1ZXJ5fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuXG4gICAgICAgIHtmaWxlRXJyb3JUb2FzdCAmJiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgbWFyZ2luOiAnMCAxNnB4IDhweCcsXG4gICAgICAgICAgICAgIHBhZGRpbmc6ICcxMHB4IDE0cHgnLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjRkZGM0UwJyxcbiAgICAgICAgICAgICAgY29sb3I6ICcjRTY1MTAwJyxcbiAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnMTJweCcsXG4gICAgICAgICAgICAgIGZvbnRTaXplLFxuICAgICAgICAgICAgICBmb250RmFtaWx5LFxuICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBnYXA6ICc4cHgnLFxuICAgICAgICAgICAgICBmbGV4U2hyaW5rOiAwLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHJvbGU9XCJhbGVydFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEFsZXJ0Q2lyY2xlIHNpemU9ezE4fSBzdHlsZT17eyBmbGV4U2hyaW5rOiAwIH19IC8+XG4gICAgICAgICAgICA8c3Bhbj57ZmlsZUVycm9yVG9hc3R9PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuXG4gICAgICAgIHt1c2VGaWxlICYmIGF0dGFjaG1lbnRzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgcGFkZGluZzogJzAgMTZweCcsIG1hcmdpbkJvdHRvbTogJzhweCcsIGRpc3BsYXk6ICdmbGV4JywgZ2FwOiAnOHB4JywgZmxleFdyYXA6ICd3cmFwJyB9fT5cbiAgICAgICAgICAgIHthdHRhY2htZW50cy5tYXAoKGF0dCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgPEF0dGFjaG1lbnRQcmV2aWV3XG4gICAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgICBmaWxlPXthdHQuZmlsZX1cbiAgICAgICAgICAgICAgICBvblJlbW92ZT17KCkgPT4gaGFuZGxlUmVtb3ZlQXR0YWNobWVudChhdHQuZmlsZS5uYW1lKX1cbiAgICAgICAgICAgICAgICB1cGxvYWRpbmc9e3VwbG9hZGluZ0ZpbGVzLmhhcyhhdHQuZmlsZS5uYW1lKX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuXG4gICAgICAgIHshY29udmVyc2F0aW9uSWQgfHwgaXNGaW5hbGl6ZWQgPyAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17aW5wdXRDb250YWluZXJTdHlsZX0+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBzdHlsZT17ey4uLnNlbmRCdXR0b25TdHlsZSwgd2lkdGg6ICcxMDAlJywgaGVpZ2h0OiAnNDhweCcsIGJvcmRlclJhZGl1czogJzE2cHgnLCBjdXJzb3I6ICdwb2ludGVyJywgZm9udEZhbWlseSwgZm9udFNpemV9fVxuICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTdGFydENvbnZlcnNhdGlvbn1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzTG9hZGluZ31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3QoJ2J1dHRvbnMuc3RhcnRDb252ZXJzYXRpb24nKX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxmb3JtIG9uU3VibWl0PXtoYW5kbGVTdWJtaXR9IHN0eWxlPXtpbnB1dENvbnRhaW5lclN0eWxlfT5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgd2lkdGg6ICcxMDAlJywgbWluV2lkdGg6IDAgfX0+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXtpbnB1dFdyYXBwZXJTdHlsZX0+XG4gICAgICAgICAgICAgIHt1c2VGaWxlICYmIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e2F0dGFjaEJ1dHRvblN0eWxlfVxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkF0dGFjaFwiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGZpbGVJbnB1dFJlZi5jdXJyZW50Py5jbGljaygpfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNBZ2VudFR5cGluZ31cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFBhcGVyY2xpcCBzaXplPXsyMn0gY29sb3I9e2lzQWdlbnRUeXBpbmcgPyBcIiNiMGIwYjBcIiA6IFwiIzc1NzU3NVwifSAvPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgICAgICAgICAgICByZWY9e2ZpbGVJbnB1dFJlZn1cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogJ25vbmUnIH19XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVGaWxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBhY2NlcHQ9e2FsbG93ZWRFeHRlbnNpb25zLmpvaW4oJywnKSB8fCAnKi8qJ31cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgICAgIHJlZj17dGV4dEFyZWFSZWZ9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3RleHRBcmVhU3R5bGV9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZ2EtdGV4dGFyZWEtbm9zYlwiXG4gICAgICAgICAgICAgICAgdmFsdWU9e2lucHV0VmFsdWV9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRJbnB1dFZhbHVlKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICBvbktleURvd249eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgJiYgIWUuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGlucHV0VmFsdWUudHJpbSgpICE9PSAnJyB8fCBhdHRhY2htZW50cy5sZW5ndGggPiAwKSAmJiAhaXNBZ2VudFR5cGluZykge1xuICAgICAgICAgICAgICAgICAgICAgIHN1Ym1pdE1lc3NhZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2lucHV0UGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFjb252ZXJzYXRpb25JZCB8fCBpc0ZpbmFsaXplZCB8fCBpc0FnZW50VHlwaW5nfVxuICAgICAgICAgICAgICAgIHJvd3M9ezF9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3JpZ2h0QWN0aW9uQ29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgICAgICAgIHt1c2VBdWRpbyAmJiBpbnB1dFZhbHVlLnRyaW0oKSA9PT0gJycgJiYgYXR0YWNobWVudHMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgICAgICAgPFZvaWNlSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgb25UcmFuc2NyaXB0aW9uPXsodGV4dDogc3RyaW5nKSA9PiBzZXRJbnB1dFZhbHVlKHRleHQpfVxuICAgICAgICAgICAgICAgICAgICBvbkVycm9yPXtoYW5kbGVWb2ljZUVycm9yfVxuICAgICAgICAgICAgICAgICAgICBiYXNlVXJsPXtiYXNlVXJsfVxuICAgICAgICAgICAgICAgICAgICBhcGlLZXk9e2FwaUtleX1cbiAgICAgICAgICAgICAgICAgICAgdGhlbWU9e3RoZW1lfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNBZ2VudFR5cGluZ31cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IC4uLnNlbmRCdXR0b25TdHlsZSwgLi4uKGlzU2VuZERpc2FibGVkID8gc2VuZEJ1dHRvbkRpc2FibGVkU3R5bGUgOiB7fSkgfX1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzU2VuZERpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8QXJyb3dVcCBzaXplPXsxOH0gc3Ryb2tlV2lkdGg9ezN9IGNvbG9yPVwiI2ZmZmZmZlwiIC8+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB7aW5wdXREaXNjbGFpbWVyICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJnYS1pbnB1dC1kaXNjbGFpbWVyXCIgc3R5bGU9e2Rpc2NsYWltZXJTdHlsZX0+XG4gICAgICAgICAgICAgICAge2lucHV0RGlzY2xhaW1lcn1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9mb3JtPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgc3R5bGU9e2NvbmZpcm1PdmVybGF5U3R5bGV9PlxuICAgICAgICA8ZGl2IHN0eWxlPXtjb25maXJtRGlhbG9nU3R5bGV9PlxuICAgICAgICAgIDxoMyBzdHlsZT17e2ZvbnRGYW1pbHksIG1hcmdpblRvcDogMH19Pnt0KCdkaWFsb2cucmVzZXRDb252ZXJzYXRpb24udGl0bGUnKX08L2gzPlxuICAgICAgICAgIDxwIHN0eWxlPXt7Zm9udEZhbWlseSwgZm9udFNpemV9fT57dCgnZGlhbG9nLnJlc2V0Q29udmVyc2F0aW9uLm1lc3NhZ2UnKX08L3A+XG4gICAgICAgICAgPGRpdiBzdHlsZT17Y29uZmlybUJ1dHRvbnNTdHlsZX0+XG4gICAgICAgICAgICA8YnV0dG9uIHN0eWxlPXt7Li4uY29uZmlybUJ1dHRvblN0eWxlKGZhbHNlKSwgY29sb3I6IHRleHRDb2xvcn19IG9uQ2xpY2s9e2hhbmRsZUNhbmNlbFJlc2V0fT57dCgnYnV0dG9ucy5jYW5jZWwnKX08L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gc3R5bGU9e2NvbmZpcm1CdXR0b25TdHlsZSh0cnVlKX0gb25DbGljaz17aGFuZGxlQ29uZmlybVJlc2V0fT57dCgnYnV0dG9ucy5yZXNldCcpfTwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xuXG4gIGlmIChtb2RlID09PSAnZmxvYXRpbmcnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHshaXNGbG9hdGluZ09wZW4gJiYgKFxuICAgICAgICAgIDxDaGF0QnViYmxlXG4gICAgICAgICAgICBzaG93Q2hhdD17aXNGbG9hdGluZ09wZW59XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRJc0Zsb2F0aW5nT3BlbihwcmV2ID0+ICFwcmV2KX1cbiAgICAgICAgICAgIHByaW1hcnlDb2xvcj17cHJpbWFyeUNvbG9yfVxuICAgICAgICAgICAgc3R5bGU9e2dldFBvc2l0aW9uU3R5bGVzKCl9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cblxuICAgICAgICB7aXNGbG9hdGluZ09wZW4gJiYgKFxuICAgICAgICAgIDxkaXYgc3R5bGU9e2Zsb2F0aW5nQ29udGFpbmVyU3R5bGV9IGRhdGEtZ2VuYXNzaXN0LWNvbnRhaW5lcj1cImZsb2F0aW5nXCI+XG4gICAgICAgICAgICB7cmVuZGVyV2l0aFJlQ2FwdGNoYShyZW5kZXJDaGF0Q29tcG9uZW50KCkpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGlmIChtb2RlID09PSAnZnVsbHNjcmVlbicpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBzdHlsZT17ZmxvYXRpbmdDb250YWluZXJTdHlsZX0gZGF0YS1nZW5hc3Npc3QtY29udGFpbmVyPVwiZnVsbHNjcmVlblwiPlxuICAgICAgICB7cmVuZGVyV2l0aFJlQ2FwdGNoYShyZW5kZXJDaGF0Q29tcG9uZW50KCkpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiByZW5kZXJXaXRoUmVDYXB0Y2hhKHJlbmRlckNoYXRDb21wb25lbnQoKSk7XG59O1xuIl19
@@ -538,7 +538,7 @@ var ChatService = /** @class */ (function () {
538
538
  var _a;
539
539
  var err = (_a = e === null || e === void 0 ? void 0 : e.response) === null || _a === void 0 ? void 0 : _a.data;
540
540
  // Handle error when conversation is finalized
541
- if ((err === null || err === void 0 ? void 0 : err.error_key) === 'CONVERSATION_FINALIZED') {
541
+ if ((err === null || err === void 0 ? void 0 : err.error_key) === 'CONVERSATION_FINALIZED' || (err === null || err === void 0 ? void 0 : err.error_key) === 'AGENT_NOT_FOUND') {
542
542
  _this.handleConversationFinalized();
543
543
  }
544
544
  else {
@@ -905,4 +905,4 @@ var ChatService = /** @class */ (function () {
905
905
  return ChatService;
906
906
  }());
907
907
  export { ChatService };
908
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdFNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvY2hhdFNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFXMUIsT0FBTyxFQUNMLGVBQWUsRUFDZix5QkFBeUIsR0FDMUIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixNQUFNLENBQUMsSUFBTSxnQ0FBZ0MsR0FBRyxrQ0FBa0MsQ0FBQztBQUVuRjtJQStCRSxxQkFDRSxPQUFlLEVBQ2YsTUFBYyxFQUNkLFFBQThCLEVBQzlCLE1BQWUsRUFDZixRQUFpQixFQUNqQixLQUFxQixFQUNyQixPQUF3QjtRQUR4QixzQkFBQSxFQUFBLFlBQXFCO1FBQ3JCLHdCQUFBLEVBQUEsZUFBd0I7UUFsQ2xCLG1CQUFjLEdBQWtCLElBQUksQ0FBQztRQUNyQywyQkFBc0IsR0FBa0IsSUFBSSxDQUFDLENBQUMsZ0NBQWdDO1FBQzlFLGVBQVUsR0FBa0IsSUFBSSxDQUFDLENBQUMsZ0NBQWdDO1FBQ2xFLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBQzdCLGNBQVMsR0FBcUIsSUFBSSxDQUFDO1FBQ25DLG1CQUFjLEdBQTRDLElBQUksQ0FBQztRQUMvRCxvQkFBZSxHQUF3QixJQUFJLENBQUM7UUFDNUMscUJBQWdCLEdBQXdCLElBQUksQ0FBQztRQUM3QywyQkFBc0IsR0FFbkIsSUFBSSxDQUFDO1FBQ1IsdUJBQWtCLEdBQThDLElBQUksQ0FBQztRQUNyRSxtQkFBYyxHQUFHLHdCQUF3QixDQUFDO1FBQzFDLG9CQUFlLEdBQWEsRUFBRSxDQUFDO1FBQy9CLGdCQUFXLEdBQXFCLEVBQUUsQ0FBQztRQUNuQyxtQkFBYyxHQUF3QixFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3JF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QzlFLHNHQUFzRztnQkFDdEcsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDekIsQ0FBQzs7OztLQUNGO0lBRUssNkNBQXVCLEdBQTdCOzs7Z0JBQ0UsZ0ZBQWdGO2dCQUNoRixnSEFBZ0g7Z0JBQ2hILElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7b0JBQzFCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUMxQixDQUFDO2dCQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO2dCQUN4QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQzs7OztLQUN6QjtJQUdILGtCQUFDO0FBQUQsQ0FBQyxBQXo4QkQsSUF5OEJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGF4aW9zIGZyb20gXCJheGlvc1wiO1xuaW1wb3J0IHtcbiAgQ2hhdE1lc3NhZ2UsXG4gIFN0YXJ0Q29udmVyc2F0aW9uUmVzcG9uc2UsXG4gIEF0dGFjaG1lbnQsXG4gIEFnZW50VGhpbmtpbmdDb25maWcsXG4gIEFnZW50V2VsY29tZURhdGEsXG4gIEZpbGVVcGxvYWRSZXNwb25zZSxcbiAgSW5Qcm9ncmVzc1BvbGxSZXNwb25zZSxcbiAgSW5Qcm9ncmVzc1BvbGxNZXNzYWdlLFxufSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7XG4gIGNyZWF0ZVdlYlNvY2tldCxcbiAgY3JlYXRlV2ViU29ja2V0RGlhZ25vc3RpYyxcbn0gZnJvbSBcIi4uL3V0aWxzL3dlYnNvY2tldFwiO1xuZXhwb3J0IGNvbnN0IEdFTkFTU0lTVF9BR0VOVF9NRVRBREFUQV9VUERBVEVEID0gXCJnZW5hc3Npc3RfYWdlbnRfbWV0YWRhdGFfdXBkYXRlZFwiO1xuXG5leHBvcnQgY2xhc3MgQ2hhdFNlcnZpY2Uge1xuICBwcml2YXRlIGJhc2VVcmw6IHN0cmluZztcbiAgcHJpdmF0ZSBhcGlLZXk6IHN0cmluZztcbiAgcHJpdmF0ZSBtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBjb252ZXJzYXRpb25JZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY29udmVyc2F0aW9uQ3JlYXRlVGltZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7IC8vIFRyYWNrIGNvbnZlcnNhdGlvbiBzdGFydCB0aW1lXG4gIHByaXZhdGUgZ3Vlc3RUb2tlbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7IC8vIEd1ZXN0IHRva2VuIGZvciBhdXRob3JpemF0aW9uXG4gIHByaXZhdGUgaXNGaW5hbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSB3ZWJTb2NrZXQ6IFdlYlNvY2tldCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIG1lc3NhZ2VIYW5kbGVyOiAoKG1lc3NhZ2U6IENoYXRNZXNzYWdlKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHRha2VvdmVySGFuZGxlcjogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgZmluYWxpemVkSGFuZGxlcjogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY29ubmVjdGlvblN0YXRlSGFuZGxlcjpcbiAgICB8ICgoc3RhdGU6IFwiY29ubmVjdGluZ1wiIHwgXCJjb25uZWN0ZWRcIiB8IFwiZGlzY29ubmVjdGVkXCIpID0+IHZvaWQpXG4gICAgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSB3ZWxjb21lRGF0YUhhbmRsZXI6ICgoZGF0YTogQWdlbnRXZWxjb21lRGF0YSkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzdG9yYWdlS2V5QmFzZSA9IFwiZ2VuYXNzaXN0X2NvbnZlcnNhdGlvblwiO1xuICBwcml2YXRlIHBvc3NpYmxlUXVlcmllczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSB3ZWxjb21lRGF0YTogQWdlbnRXZWxjb21lRGF0YSA9IHt9O1xuICBwcml2YXRlIHRoaW5raW5nQ29uZmlnOiBBZ2VudFRoaW5raW5nQ29uZmlnID0geyBwaHJhc2VzOiBbXSwgZGVsYXlNczogMTAwMCB9O1xuICBwcml2YXRlIGNoYXRJbnB1dE1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICBwcml2YXRlIHdlbGNvbWVPYmplY3RVcmw6IHN0cmluZyB8IG51bGwgPSBudWxsOyAvLyB0byByZXZva2Ugb24gcmVzZXRcbiAgcHJpdmF0ZSB0ZW5hbnQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBhZ2VudElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgbGFuZ3VhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSB1c2VXczogYm9vbGVhbjtcbiAgcHJpdmF0ZSBzZXJ2ZXJVbmF2YWlsYWJsZU1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBzZXJ2ZXJVbmF2YWlsYWJsZUNvbnRhY3RVcmw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBzZXJ2ZXJVbmF2YWlsYWJsZUNvbnRhY3RMYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHVzZVBvbGw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBiYXNlVXJsOiBzdHJpbmcsXG4gICAgYXBpS2V5OiBzdHJpbmcsXG4gICAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIHRlbmFudD86IHN0cmluZyxcbiAgICBsYW5ndWFnZT86IHN0cmluZyxcbiAgICB1c2VXczogYm9vbGVhbiA9IHRydWUsXG4gICAgdXNlUG9sbDogYm9vbGVhbiA9IGZhbHNlXG4gICkge1xuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwuZW5kc1dpdGgoXCIvXCIpID8gYmFzZVVybC5zbGljZSgwLCAtMSkgOiBiYXNlVXJsO1xuICAgIHRoaXMuYXBpS2V5ID0gYXBpS2V5O1xuICAgIHRoaXMubWV0YWRhdGEgPSBtZXRhZGF0YTtcbiAgICB0aGlzLnRlbmFudCA9IHRlbmFudDtcbiAgICB0aGlzLmxhbmd1YWdlID0gbGFuZ3VhZ2U7XG4gICAgdGhpcy51c2VXcyA9IHVzZVdzO1xuICAgIHRoaXMudXNlUG9sbCA9IHVzZVBvbGw7XG4gICAgLy8gVHJ5IHRvIGxvYWQgYSBzYXZlZCBjb252ZXJzYXRpb24gZm9yIHRoaXMgYXBpS2V5IGZyb20gbG9jYWxTdG9yYWdlXG4gICAgdGhpcy5sb2FkU2F2ZWRDb252ZXJzYXRpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3RvcmFnZUtleSgpOiBzdHJpbmcge1xuICAgIC8vIFBvaW50ZXIgdG8gY3VycmVudCBjb252ZXJzYXRpb24gbWV0YWRhdGEgZm9yIHRoaXMgYXBpS2V5XG4gICAgcmV0dXJuIGAke3RoaXMuc3RvcmFnZUtleUJhc2V9OiR7dGhpcy5hcGlLZXl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgY29udmVyc2F0aW9uIGZpbmFsaXplZDogZW1pdCBzcGVjaWFsIG1lc3NhZ2UsIGNhbGwgZmluYWxpemVkIGhhbmRsZXIsIHBlcnNpc3Qgc3RhdGUuXG4gICAqL1xuICBwdWJsaWMgaGFuZGxlQ29udmVyc2F0aW9uRmluYWxpemVkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1lc3NhZ2VIYW5kbGVyKSB7XG4gICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpIC8gMTAwMDtcbiAgICAgIGNvbnN0IGZpbmFsaXplZE1lc3NhZ2U6IENoYXRNZXNzYWdlID0ge1xuICAgICAgICBjcmVhdGVfdGltZTogbm93LFxuICAgICAgICBzdGFydF90aW1lOiB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWVcbiAgICAgICAgICA/IG5vdyAtIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZVxuICAgICAgICAgIDogMCxcbiAgICAgICAgZW5kX3RpbWU6IHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZVxuICAgICAgICAgID8gbm93IC0gdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lICsgMC4wMVxuICAgICAgICAgIDogMC4wMSxcbiAgICAgICAgc3BlYWtlcjogXCJzcGVjaWFsXCIsXG4gICAgICAgIHRleHQ6IFwiQ29udmVyc2F0aW9uIEZpbmFsaXplZFwiLFxuICAgICAgICB0eXBlOiBcImZpbmFsaXplZFwiLFxuICAgICAgfTtcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIoZmluYWxpemVkTWVzc2FnZSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmZpbmFsaXplZEhhbmRsZXIpIHtcbiAgICAgIHRoaXMuZmluYWxpemVkSGFuZGxlcigpO1xuICAgIH1cbiAgICB0aGlzLmlzRmluYWxpemVkID0gdHJ1ZTtcbiAgICB0aGlzLnNhdmVDb252ZXJzYXRpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJzaXN0IGFnZW50X2NoYXRfaW5wdXRfbWV0YWRhdGEgdG8gbG9jYWxTdG9yYWdlIGFuZCBkaXNwYXRjaCBhIGdsb2JhbCBldmVudC5cbiAgICogQW55IGNvbnN1bWVyIChlLmcuIGNvbmZpZyBwYW5lbCkgY2FuIGxpc3RlbiBmb3IgR0VOQVNTSVNUX0FHRU5UX01FVEFEQVRBX1VQREFURURcbiAgICogb3IgcmVhZCBmcm9tIGxvY2FsU3RvcmFnZSBvbiBtb3VudDsgbm8gbmVlZCB0byBwYXNzIGNhbGxiYWNrcyBpbnRvIHRoZSBjaGF0LlxuICAgKi9cbiAgcHJpdmF0ZSBwZXJzaXN0QW5kRW1pdEFnZW50TWV0YWRhdGEobWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGtleSA9IGBnZW5hc3Npc3RfYWdlbnRfY2hhdF9pbnB1dF9tZXRhZGF0YToke3RoaXMuYXBpS2V5fWA7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KG1ldGFkYXRhKSk7XG4gICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB3aW5kb3cuZGlzcGF0Y2hFdmVudCkge1xuICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoR0VOQVNTSVNUX0FHRU5UX01FVEFEQVRBX1VQREFURUQsIHtcbiAgICAgICAgICAgIGRldGFpbDogeyBhcGlLZXk6IHRoaXMuYXBpS2V5LCBtZXRhZGF0YTogeyAuLi5tZXRhZGF0YSB9IH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGlnbm9yZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGxhbmd1YWdlIGZvciBBY2NlcHQtTGFuZ3VhZ2UgaGVhZGVyXG4gICAqL1xuICBzZXRMYW5ndWFnZShsYW5ndWFnZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy5sYW5ndWFnZSA9IGxhbmd1YWdlO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBtZXRhZGF0YSAodXNlZnVsIGZvciB1cGRhdGluZyBsYW5ndWFnZSBvciBvdGhlciBkeW5hbWljIG1ldGFkYXRhKVxuICAgKi9cbiAgc2V0TWV0YWRhdGEobWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0aGlzLm1ldGFkYXRhID0gbWV0YWRhdGE7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IGxhbmd1YWdlIGNvZGUgZm9yIEFjY2VwdC1MYW5ndWFnZSBoZWFkZXJcbiAgICogQ29udmVydHMgc2ltcGxlIGxhbmd1YWdlIGNvZGVzIChlLmcuLCBcImVuXCIsIFwiZXNcIikgdG8gcHJvcGVyIGZvcm1hdCAoZS5nLiwgXCJlbi1VUyxlbjtxPTAuOVwiKVxuICAgKiBGb2xsb3dzIEhUVFAgQWNjZXB0LUxhbmd1YWdlIGhlYWRlciBzdGFuZGFyZHNcbiAgICovXG4gIHByaXZhdGUgZm9ybWF0QWNjZXB0TGFuZ3VhZ2UobGFuZ0NvZGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFsYW5nQ29kZSkgcmV0dXJuICcnO1xuXG4gICAgLy8gTm9ybWFsaXplIGxhbmd1YWdlIGNvZGUgKGxvd2VyY2FzZSwgaGFuZGxlIGNvbW1vbiBmb3JtYXRzKVxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBsYW5nQ29kZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcblxuICAgIC8vIE1hcCBjb21tb24gbGFuZ3VhZ2UgY29kZXMgdG8gdGhlaXIgZnVsbCBsb2NhbGUgZm9ybWF0XG4gICAgY29uc3QgbGFuZ3VhZ2VNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAnZW4nOiAnZW4tVVMnLFxuICAgICAgJ2VzJzogJ2VzLUVTJyxcbiAgICAgICdmcic6ICdmci1GUicsXG4gICAgICAnZGUnOiAnZGUtREUnLFxuICAgICAgJ2l0JzogJ2l0LUlUJyxcbiAgICAgICdwdCc6ICdwdC1QVCcsXG4gICAgICAnYXInOiAnYXItU0EnLFxuICAgICAgJ3NxJzogJ3NxLUFMJyxcbiAgICB9O1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIGNvZGUgYWxyZWFkeSBoYXMgYSByZWdpb24gKGUuZy4sIFwiZW4tVVNcIiwgXCJlcy1FU1wiKVxuICAgIGNvbnN0IGhhc1JlZ2lvbiA9IG5vcm1hbGl6ZWQuaW5jbHVkZXMoJy0nKTtcblxuICAgIC8vIEdldCB0aGUgZnVsbCBsb2NhbGUgb3IgdXNlIHRoZSBwcm92aWRlZCBjb2RlIGlmIGl0IGFscmVhZHkgaGFzIGEgcmVnaW9uXG4gICAgY29uc3QgZnVsbExvY2FsZSA9IGhhc1JlZ2lvbiA/IG5vcm1hbGl6ZWQgOiAobGFuZ3VhZ2VNYXBbbm9ybWFsaXplZF0gfHwgbm9ybWFsaXplZCk7XG5cbiAgICAvLyBFeHRyYWN0IGJhc2UgbGFuZ3VhZ2UgZnJvbSB0aGUgZnVsbCBsb2NhbGUgKGUuZy4sIFwiZW5cIiBmcm9tIFwiZW4tVVNcIilcbiAgICBjb25zdCBmdWxsQmFzZUxhbmcgPSBmdWxsTG9jYWxlLnNwbGl0KCctJylbMF0udG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIEJ1aWxkIEFjY2VwdC1MYW5ndWFnZSBoZWFkZXI6IHByaW1hcnkgbG9jYWxlLCBiYXNlIGxhbmd1YWdlIHdpdGggcXVhbGl0eSwgRW5nbGlzaCBmYWxsYmFja1xuICAgIC8vIEZvcm1hdDogXCJsb2NhbGUsYmFzZS1sYW5nO3E9MC45LGVuO3E9MC44XCJcbiAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbZnVsbExvY2FsZV07XG5cbiAgICAvLyBmYWxsYmFja1xuICAgIHBhcnRzLnB1c2goYCR7ZnVsbEJhc2VMYW5nfTtxPTAuOWApO1xuXG4gICAgLy8gQWRkIEVuZ2xpc2ggYXMgZmFsbGJhY2sgaWYgbm90IGFscmVhZHkgdGhlIHByaW1hcnkgbGFuZ3VhZ2VcbiAgICBpZiAoZnVsbEJhc2VMYW5nICE9PSAnZW4nKSB7XG4gICAgICBwYXJ0cy5wdXNoKCdlbjtxPTAuOCcpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJ0cy5qb2luKCcsICcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBoZWFkZXJzIGZvciBBUEkgcmVxdWVzdHMsIGluY2x1ZGluZyBhdXRob3JpemF0aW9uIGlmIGd1ZXN0IHRva2VuIGlzIGF2YWlsYWJsZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRIZWFkZXJzKGNvbnRlbnRUeXBlOiBzdHJpbmcgPSBcImFwcGxpY2F0aW9uL2pzb25cIik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICBcIngtYXBpLWtleVwiOiB0aGlzLmFwaUtleSxcbiAgICAgIFwiQ29udGVudC1UeXBlXCI6IGNvbnRlbnRUeXBlLFxuICAgIH07XG5cbiAgICAvLyBBZGQgdGVuYW50IGhlYWRlciBpZiBwcm92aWRlZFxuICAgIGlmICh0aGlzLnRlbmFudCkge1xuICAgICAgaGVhZGVyc1tcIngtdGVuYW50LWlkXCJdID0gdGhpcy50ZW5hbnQ7XG4gICAgfVxuXG4gICAgLy8gQWRkIGF1dGhvcml6YXRpb24gaGVhZGVyIGlmIGd1ZXN0IHRva2VuIGlzIGF2YWlsYWJsZVxuICAgIGlmICh0aGlzLmd1ZXN0VG9rZW4pIHtcbiAgICAgIGhlYWRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEJlYXJlciAke3RoaXMuZ3Vlc3RUb2tlbn1gO1xuICAgIH1cblxuICAgIC8vIEFkZCBBY2NlcHQtTGFuZ3VhZ2UgaGVhZGVyIGlmIGxhbmd1YWdlIGlzIHNldFxuICAgIGlmICh0aGlzLmxhbmd1YWdlKSB7XG4gICAgICBjb25zdCBhY2NlcHRMYW5ndWFnZSA9IHRoaXMuZm9ybWF0QWNjZXB0TGFuZ3VhZ2UodGhpcy5sYW5ndWFnZSk7XG4gICAgICBpZiAoYWNjZXB0TGFuZ3VhZ2UpIHtcbiAgICAgICAgaGVhZGVyc1tcIkFjY2VwdC1MYW5ndWFnZVwiXSA9IGFjY2VwdExhbmd1YWdlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoZWFkZXJzO1xuICB9XG5cbiAgc2V0TWVzc2FnZUhhbmRsZXIoaGFuZGxlcjogKG1lc3NhZ2U6IENoYXRNZXNzYWdlKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5tZXNzYWdlSGFuZGxlciA9IGhhbmRsZXI7XG4gIH1cblxuICBzZXRUYWtlb3ZlckhhbmRsZXIoaGFuZGxlcjogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMudGFrZW92ZXJIYW5kbGVyID0gaGFuZGxlcjtcbiAgfVxuXG4gIHNldEZpbmFsaXplZEhhbmRsZXIoaGFuZGxlcjogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMuZmluYWxpemVkSGFuZGxlciA9IGhhbmRsZXI7XG4gIH1cblxuICBzZXRDb25uZWN0aW9uU3RhdGVIYW5kbGVyKFxuICAgIGhhbmRsZXI6IChzdGF0ZTogXCJjb25uZWN0aW5nXCIgfCBcImNvbm5lY3RlZFwiIHwgXCJkaXNjb25uZWN0ZWRcIikgPT4gdm9pZFxuICApIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25TdGF0ZUhhbmRsZXIgPSBoYW5kbGVyO1xuICB9XG5cbiAgc2V0V2VsY29tZURhdGFIYW5kbGVyKGhhbmRsZXI6ICgoZGF0YTogQWdlbnRXZWxjb21lRGF0YSkgPT4gdm9pZCkgfCBudWxsKSB7XG4gICAgdGhpcy53ZWxjb21lRGF0YUhhbmRsZXIgPSBoYW5kbGVyO1xuICB9XG5cbiAgc2V0U2VydmVyVW5hdmFpbGFibGVDb25maWcoXG4gICAgbWVzc2FnZT86IHN0cmluZyxcbiAgICBjb250YWN0VXJsPzogc3RyaW5nLFxuICAgIGNvbnRhY3RMYWJlbD86IHN0cmluZ1xuICApOiB2b2lkIHtcbiAgICB0aGlzLnNlcnZlclVuYXZhaWxhYmxlTWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5zZXJ2ZXJVbmF2YWlsYWJsZUNvbnRhY3RVcmwgPSBjb250YWN0VXJsO1xuICAgIHRoaXMuc2VydmVyVW5hdmFpbGFibGVDb250YWN0TGFiZWwgPSBjb250YWN0TGFiZWw7XG4gIH1cblxuICBnZXRQb3NzaWJsZVF1ZXJpZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLnBvc3NpYmxlUXVlcmllcztcbiAgfVxuXG4gIGdldFdlbGNvbWVEYXRhKCk6IEFnZW50V2VsY29tZURhdGEge1xuICAgIHJldHVybiB0aGlzLndlbGNvbWVEYXRhO1xuICB9XG5cbiAgZ2V0VGhpbmtpbmdDb25maWcoKTogQWdlbnRUaGlua2luZ0NvbmZpZyB7XG4gICAgcmV0dXJuIHRoaXMudGhpbmtpbmdDb25maWc7XG4gIH1cblxuICAvKipcbiAgICogTWV0YWRhdGEga2V5cy9kZWZhdWx0cyBmcm9tIHRoZSB3b3JrZmxvdydzIENoYXQgSW5wdXQgbm9kZSAocmV0dXJuZWQgd2hlbiBjb252ZXJzYXRpb24gc3RhcnRzKS5cbiAgICogVXNlZCB0byBzaG93IHdvcmtmbG93LWRlZmluZWQgbWV0YWRhdGEgaW4gdGhlIGNvbmZpZyBwYW5lbC5cbiAgICovXG4gIGdldENoYXRJbnB1dE1ldGFkYXRhKCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4geyAuLi50aGlzLmNoYXRJbnB1dE1ldGFkYXRhIH07XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBhIHNhdmVkIGNvbnZlcnNhdGlvbiBJRCBmcm9tIGxvY2FsU3RvcmFnZVxuICAgKi9cbiAgcHJpdmF0ZSBsb2FkU2F2ZWRDb252ZXJzYXRpb24oKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBzYXZlZENvbnZlcnNhdGlvbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuZ2V0U3RvcmFnZUtleSgpKTtcbiAgICAgIC8vIEJhY2t3YXJkLWNvbXBhdDogY2hlY2sgb2xkIHVuc2NvcGVkIGtleSBpZiBzY29wZWQgb25lIG1pc3NpbmdcbiAgICAgIGlmICghc2F2ZWRDb252ZXJzYXRpb24pIHtcbiAgICAgICAgc2F2ZWRDb252ZXJzYXRpb24gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXlCYXNlKTtcbiAgICAgIH1cbiAgICAgIGlmIChzYXZlZENvbnZlcnNhdGlvbikge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgY29udmVyc2F0aW9uSWQsXG4gICAgICAgICAgY3JlYXRlVGltZSxcbiAgICAgICAgICBpc0ZpbmFsaXplZCxcbiAgICAgICAgICBwb3NzaWJsZVF1ZXJpZXMsXG4gICAgICAgICAgd2VsY29tZURhdGEsXG4gICAgICAgICAgdGhpbmtpbmdDb25maWcsXG4gICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICBndWVzdFRva2VuLFxuICAgICAgICB9ID0gSlNPTi5wYXJzZShzYXZlZENvbnZlcnNhdGlvbik7XG4gICAgICAgIHRoaXMuY29udmVyc2F0aW9uSWQgPSBjb252ZXJzYXRpb25JZDtcbiAgICAgICAgdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lID0gY3JlYXRlVGltZTtcbiAgICAgICAgdGhpcy5pc0ZpbmFsaXplZCA9IGlzRmluYWxpemVkIHx8IGZhbHNlO1xuICAgICAgICB0aGlzLmd1ZXN0VG9rZW4gPSBndWVzdFRva2VuIHx8IG51bGw7XG4gICAgICAgIHRoaXMucG9zc2libGVRdWVyaWVzID0gQXJyYXkuaXNBcnJheShwb3NzaWJsZVF1ZXJpZXMpXG4gICAgICAgICAgPyBwb3NzaWJsZVF1ZXJpZXNcbiAgICAgICAgICA6IFtdO1xuICAgICAgICB0aGlzLndlbGNvbWVEYXRhID0gd2VsY29tZURhdGEgfHwge307XG4gICAgICAgIGlmICghdGhpcy53ZWxjb21lRGF0YS5wb3NzaWJsZVF1ZXJpZXMpIHtcbiAgICAgICAgICB0aGlzLndlbGNvbWVEYXRhLnBvc3NpYmxlUXVlcmllcyA9IHRoaXMucG9zc2libGVRdWVyaWVzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGhpbmtpbmdDb25maWcgPSB7XG4gICAgICAgICAgcGhyYXNlczogKHRoaW5raW5nQ29uZmlnICYmIHRoaW5raW5nQ29uZmlnLnBocmFzZXMpIHx8IFtdLFxuICAgICAgICAgIGRlbGF5TXM6XG4gICAgICAgICAgICB0aGlua2luZ0NvbmZpZyAmJiB0eXBlb2YgdGhpbmtpbmdDb25maWcuZGVsYXlNcyA9PT0gXCJudW1iZXJcIlxuICAgICAgICAgICAgICA/IHRoaW5raW5nQ29uZmlnLmRlbGF5TXNcbiAgICAgICAgICAgICAgOiAxMDAwLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmFnZW50SWQgPSBhZ2VudElkO1xuICAgICAgICBpZiAoIXRoaXMud2VsY29tZURhdGEuaW1hZ2VVcmwgJiYgdGhpcy5hZ2VudElkKSB7XG4gICAgICAgICAgdGhpcy5mZXRjaFdlbGNvbWVJbWFnZSh0aGlzLmFnZW50SWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLndlbGNvbWVEYXRhSGFuZGxlcikge1xuICAgICAgICAgIHRoaXMud2VsY29tZURhdGFIYW5kbGVyKHRoaXMud2VsY29tZURhdGEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIGlnbm9yZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIHRoZSBjdXJyZW50IGNvbnZlcnNhdGlvbiBJRCB0byBsb2NhbFN0b3JhZ2VcbiAgICovXG4gIHByaXZhdGUgc2F2ZUNvbnZlcnNhdGlvbigpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuY29udmVyc2F0aW9uSWQgJiYgdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lKSB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnNhdGlvbkRhdGEgPSB7XG4gICAgICAgICAgY29udmVyc2F0aW9uSWQ6IHRoaXMuY29udmVyc2F0aW9uSWQsXG4gICAgICAgICAgY3JlYXRlVGltZTogdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lLFxuICAgICAgICAgIGlzRmluYWxpemVkOiB0aGlzLmlzRmluYWxpemVkLFxuICAgICAgICAgIHBvc3NpYmxlUXVlcmllczogdGhpcy5wb3NzaWJsZVF1ZXJpZXMsXG4gICAgICAgICAgd2VsY29tZURhdGE6IHtcbiAgICAgICAgICAgIC4uLnRoaXMud2VsY29tZURhdGEsXG4gICAgICAgICAgICBpbWFnZVVybDpcbiAgICAgICAgICAgICAgdGhpcy53ZWxjb21lT2JqZWN0VXJsICYmXG4gICAgICAgICAgICAgIHRoaXMud2VsY29tZURhdGEuaW1hZ2VVcmwgJiZcbiAgICAgICAgICAgICAgdGhpcy53ZWxjb21lRGF0YS5pbWFnZVVybC5zdGFydHNXaXRoKFwiYmxvYjpcIilcbiAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICA6IHRoaXMud2VsY29tZURhdGEuaW1hZ2VVcmwgfHwgbnVsbCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaW5raW5nQ29uZmlnOiB0aGlzLnRoaW5raW5nQ29uZmlnLFxuICAgICAgICAgIGFnZW50SWQ6IHRoaXMuYWdlbnRJZCxcbiAgICAgICAgICBndWVzdFRva2VuOiB0aGlzLmd1ZXN0VG9rZW4sXG4gICAgICAgIH07XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuZ2V0U3RvcmFnZUtleSgpLCBKU09OLnN0cmluZ2lmeShjb252ZXJzYXRpb25EYXRhKSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIGlnbm9yZVxuICAgIH1cbiAgfVxuXG4gIC8vIENoZWNrIGlmIGFuIGVycm9yIGlzIGEgdG9rZW4gZXhwaXJhdGlvbiBlcnJvclxuICBwcml2YXRlIGlzVG9rZW5FeHBpcmVkRXJyb3IoZXJyb3I6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBlcnJvci5yZXNwb25zZSAmJlxuICAgICAgZXJyb3IucmVzcG9uc2Uuc3RhdHVzID09PSA0MDEgJiZcbiAgICAgIGVycm9yLnJlc3BvbnNlLmRhdGEgJiZcbiAgICAgIChlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yID09PSBcIlRva2VuIGhhcyBleHBpcmVkLlwiIHx8XG4gICAgICAgIGVycm9yLnJlc3BvbnNlLmRhdGEubWVzc2FnZSA9PT0gXCJUb2tlbiBoYXMgZXhwaXJlZC5cIiB8fFxuICAgICAgICAodHlwZW9mIGVycm9yLnJlc3BvbnNlLmRhdGEgPT09IFwic3RyaW5nXCIgJiYgZXJyb3IucmVzcG9uc2UuZGF0YS5pbmNsdWRlcyhcIlRva2VuIGhhcyBleHBpcmVkXCIpKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEludGVybmFsIGhhbmRsZXIgZm9yIHRha2VvdmVyIGV2ZW50czogZW1pdHMgYSBzcGVjaWFsIG1lc3NhZ2UgYW5kIGludm9rZXMgdGFrZW92ZXJIYW5kbGVyLlxuICAgKiBSdW5zIG9ubHkgb25jZSBwZXIgY29udmVyc2F0aW9uIChpZGVtcG90ZW50KS5cbiAgICovXG4gIHByaXZhdGUgaGFuZGxlVGFrZW92ZXIobm93PzogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgdCA9IG5vdyA/PyBEYXRlLm5vdygpIC8gMTAwMDtcbiAgICBpZiAodGhpcy5tZXNzYWdlSGFuZGxlcikge1xuICAgICAgY29uc3QgdGFrZW92ZXJNZXNzYWdlOiBDaGF0TWVzc2FnZSA9IHtcbiAgICAgICAgY3JlYXRlX3RpbWU6IHQsXG4gICAgICAgIHN0YXJ0X3RpbWU6IHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSA/IHQgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUgOiAwLFxuICAgICAgICBlbmRfdGltZTogdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lID8gdCAtIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSArIDAuMDEgOiAwLjAxLFxuICAgICAgICBzcGVha2VyOiBcInNwZWNpYWxcIixcbiAgICAgICAgdGV4dDogXCJTdXBlcnZpc29yIHRvb2sgb3ZlclwiLFxuICAgICAgICB0eXBlOiBcInRha2VvdmVyXCIsXG4gICAgICB9O1xuXG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyKHRha2VvdmVyTWVzc2FnZSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRha2VvdmVySGFuZGxlcikge1xuICAgICAgdGhpcy50YWtlb3ZlckhhbmRsZXIoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdGhlIGN1cnJlbnQgY29udmVyc2F0aW9uIGJ5IGNsZWFyaW5nIHRoZSBJRCBhbmQgd2Vic29ja2V0XG4gICAqL1xuICByZXNldENoYXRDb252ZXJzYXRpb24oKTogdm9pZCB7XG4gICAgLy8gQ2xvc2UgdGhlIGN1cnJlbnQgd2Vic29ja2V0IGNvbm5lY3Rpb24gaWYgaXQgZXhpc3RzXG4gICAgaWYgKHRoaXMud2ViU29ja2V0KSB7XG4gICAgICB0aGlzLndlYlNvY2tldC5jbG9zZSgpO1xuICAgICAgdGhpcy53ZWJTb2NrZXQgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIENsZWFyIHRoZSBjb252ZXJzYXRpb24gSURcbiAgICB0aGlzLmNvbnZlcnNhdGlvbklkID0gbnVsbDtcbiAgICB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUgPSBudWxsO1xuICAgIHRoaXMuZ3Vlc3RUb2tlbiA9IG51bGw7XG4gICAgdGhpcy5pc0ZpbmFsaXplZCA9IGZhbHNlO1xuXG4gICAgLy8gQ2xlYXIgcG9zc2libGUgcXVlcmllcyBhbmQgd29ya2Zsb3cgbWV0YWRhdGFcbiAgICB0aGlzLnBvc3NpYmxlUXVlcmllcyA9IFtdO1xuICAgIHRoaXMud2VsY29tZURhdGEgPSB7fTtcbiAgICB0aGlzLnRoaW5raW5nQ29uZmlnID0geyBwaHJhc2VzOiBbXSwgZGVsYXlNczogMTAwMCB9O1xuICAgIHRoaXMuY2hhdElucHV0TWV0YWRhdGEgPSB7fTtcbiAgICBpZiAodGhpcy53ZWxjb21lT2JqZWN0VXJsKSB7XG4gICAgICB0cnkge1xuICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHRoaXMud2VsY29tZU9iamVjdFVybCk7XG4gICAgICB9IGNhdGNoIHt9XG4gICAgICB0aGlzLndlbGNvbWVPYmplY3RVcmwgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLmFnZW50SWQgPSB1bmRlZmluZWQ7XG5cbiAgICAvLyBSZW1vdmUgZnJvbSBsb2NhbCBzdG9yYWdlXG4gICAgdHJ5IHtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuZ2V0U3RvcmFnZUtleSgpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gaWdub3JlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZXJlJ3MgYSBjdXJyZW50IGNvbnZlcnNhdGlvblxuICAgKi9cbiAgaGFzQWN0aXZlQ29udmVyc2F0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuY29udmVyc2F0aW9uSWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IGNvbnZlcnNhdGlvbiBJRFxuICAgKi9cbiAgZ2V0Q29udmVyc2F0aW9uSWQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuY29udmVyc2F0aW9uSWQ7XG4gIH1cblxuICBnZXRDb252ZXJzYXRpb25DcmVhdGVUaW1lKCk6IG51bWJlciB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWU7XG4gIH1cblxuICBpc0NvbnZlcnNhdGlvbkZpbmFsaXplZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0ZpbmFsaXplZDtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0Q29udmVyc2F0aW9uKHJlQ2FwdGNoYVRva2VuPzogc3RyaW5nIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVxdWVzdEJvZHk6IGFueSA9IHtcbiAgICAgICAgbWVzc2FnZXM6IFtdLFxuICAgICAgICByZWNvcmRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBkYXRhX3NvdXJjZV9pZDogXCIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAgICAgIH07XG5cbiAgICAgIGlmIChyZUNhcHRjaGFUb2tlbikge1xuICAgICAgICByZXF1ZXN0Qm9keS5yZWNhcHRjaGFfdG9rZW4gPSByZUNhcHRjaGFUb2tlbjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMubWV0YWRhdGEpIHtcbiAgICAgICAgcmVxdWVzdEJvZHkubWV0YWRhdGEgPSB0aGlzLm1ldGFkYXRhO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3Q8U3RhcnRDb252ZXJzYXRpb25SZXNwb25zZT4oXG4gICAgICAgIGAke3RoaXMuYmFzZVVybH0vYXBpL2NvbnZlcnNhdGlvbnMvaW4tcHJvZ3Jlc3Mvc3RhcnRgLFxuICAgICAgICByZXF1ZXN0Qm9keSxcbiAgICAgICAge1xuICAgICAgICAgIGhlYWRlcnM6IHRoaXMuZ2V0SGVhZGVycygpLFxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICB0aGlzLmNvbnZlcnNhdGlvbklkID0gcmVzcG9uc2UuZGF0YS5jb252ZXJzYXRpb25faWQ7XG4gICAgICAvLyBTdG9yZSBjb252ZXJzYXRpb24gY3JlYXRlIHRpbWUgKHVzZSBmcm9tIHJlc3BvbnNlIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGN1cnJlbnQgdGltZSlcbiAgICAgIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSA9IHJlc3BvbnNlLmRhdGEuY3JlYXRlX3RpbWVcbiAgICAgICAgPyByZXNwb25zZS5kYXRhLmNyZWF0ZV90aW1lIC8gMTAwMFxuICAgICAgICA6IERhdGUubm93KCkgLyAxMDAwO1xuICAgICAgLy8gU3RvcmUgZ3Vlc3QgdG9rZW4gaWYgcHJvdmlkZWRcbiAgICAgIHRoaXMuZ3Vlc3RUb2tlbiA9IHJlc3BvbnNlLmRhdGEuZ3Vlc3RfdG9rZW4gfHwgbnVsbDtcbiAgICAgIHRoaXMuaXNGaW5hbGl6ZWQgPSBmYWxzZTtcblxuICAgICAgLy8gU3RvcmUgcG9zc2libGUgcXVlcmllcyBpZiBhdmFpbGFibGVcbiAgICAgIGlmIChcbiAgICAgICAgcmVzcG9uc2UuZGF0YS5hZ2VudF9wb3NzaWJsZV9xdWVyaWVzICYmXG4gICAgICAgIHJlc3BvbnNlLmRhdGEuYWdlbnRfcG9zc2libGVfcXVlcmllcy5sZW5ndGggPiAwXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5wb3NzaWJsZVF1ZXJpZXMgPSByZXNwb25zZS5kYXRhLmFnZW50X3Bvc3NpYmxlX3F1ZXJpZXMuZmlsdGVyKFxuICAgICAgICAgIChxdWVyeSkgPT4gdHlwZW9mIHF1ZXJ5ID09PSBcInN0cmluZ1wiICYmIHF1ZXJ5LnRyaW0oKS5sZW5ndGggPiAwXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFueURhdGE6IGFueSA9IHJlc3BvbnNlLmRhdGEgYXMgYW55O1xuICAgICAgY29uc3QgYWdlbnRJZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gYW55RGF0YS5hZ2VudF9pZDtcbiAgICAgIHRoaXMuYWdlbnRJZCA9IGFnZW50SWQ7XG4gICAgICBjb25zdCByYXdNZXRhID0gYW55RGF0YS5hZ2VudF9jaGF0X2lucHV0X21ldGFkYXRhO1xuICAgICAgaWYgKFxuICAgICAgICByYXdNZXRhICE9IG51bGwgJiZcbiAgICAgICAgdHlwZW9mIHJhd01ldGEgPT09ICdvYmplY3QnICYmXG4gICAgICAgICFBcnJheS5pc0FycmF5KHJhd01ldGEpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5jaGF0SW5wdXRNZXRhZGF0YSA9IHsgLi4ucmF3TWV0YSB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jaGF0SW5wdXRNZXRhZGF0YSA9IHt9O1xuICAgICAgfVxuICAgICAgdGhpcy5wZXJzaXN0QW5kRW1pdEFnZW50TWV0YWRhdGEodGhpcy5jaGF0SW5wdXRNZXRhZGF0YSk7XG4gICAgICBjb25zdCB3ZWxjb21lVGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGFueURhdGEuYWdlbnRfd2VsY29tZV90aXRsZTtcbiAgICAgIGNvbnN0IHdlbGNvbWVJbWFnZVVybDogc3RyaW5nIHwgdW5kZWZpbmVkID1cbiAgICAgICAgYW55RGF0YS5hZ2VudF93ZWxjb21lX2ltYWdlX3VybDtcbiAgICAgIGNvbnN0IHRoaW5raW5nUGhyYXNlczogc3RyaW5nW10gfCB1bmRlZmluZWQgPVxuICAgICAgICBhbnlEYXRhLmFnZW50X3RoaW5raW5nX3BocmFzZXM7XG4gICAgICBjb25zdCB0aGlua2luZ0RlbGF5U2VjOiBudW1iZXIgfCB1bmRlZmluZWQgPVxuICAgICAgICBhbnlEYXRhLmFnZW50X3RoaW5raW5nX3BocmFzZV9kZWxheTtcblxuICAgICAgdGhpcy53ZWxjb21lRGF0YSA9IHtcbiAgICAgICAgdGl0bGU6IHdlbGNvbWVUaXRsZSB8fCBudWxsLFxuICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICBpbWFnZVVybDogd2VsY29tZUltYWdlVXJsIHx8IG51bGwsXG4gICAgICAgIHBvc3NpYmxlUXVlcmllczogdGhpcy5wb3NzaWJsZVF1ZXJpZXMsXG4gICAgICB9O1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlua2luZ1BocmFzZXMpICYmIHRoaW5raW5nUGhyYXNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMudGhpbmtpbmdDb25maWcucGhyYXNlcyA9IHRoaW5raW5nUGhyYXNlcztcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdGhpbmtpbmdEZWxheVNlYyA9PT0gXCJudW1iZXJcIiAmJiB0aGlua2luZ0RlbGF5U2VjID49IDApIHtcbiAgICAgICAgdGhpcy50aGlua2luZ0NvbmZpZy5kZWxheU1zID0gTWF0aC5tYXgoXG4gICAgICAgICAgMjUwLFxuICAgICAgICAgIE1hdGgucm91bmQodGhpbmtpbmdEZWxheVNlYyAqIDEwMDApXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy53ZWxjb21lRGF0YS5pbWFnZVVybCAmJiBhZ2VudElkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZmV0Y2hXZWxjb21lSW1hZ2UoYWdlbnRJZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFByb2Nlc3MgYWdlbnQgd2VsY29tZSBtZXNzYWdlIGlmIGF2YWlsYWJsZVxuICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuYWdlbnRfd2VsY29tZV9tZXNzYWdlICYmIHRoaXMubWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKSAvIDEwMDA7XG4gICAgICAgIGNvbnN0IHdlbGNvbWVNZXNzYWdlOiBDaGF0TWVzc2FnZSA9IHtcbiAgICAgICAgICBjcmVhdGVfdGltZTogbm93LFxuICAgICAgICAgIHN0YXJ0X3RpbWU6IG5vdyAtIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSwgLy8gUmVsYXRpdmUgdG8gY29udmVyc2F0aW9uIHN0YXJ0XG4gICAgICAgICAgZW5kX3RpbWU6IG5vdyAtIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSArIDAuMDEsIC8vIFJlbGF0aXZlIHRvIGNvbnZlcnNhdGlvbiBzdGFydFxuICAgICAgICAgIHNwZWFrZXI6IFwiYWdlbnRcIixcbiAgICAgICAgICB0ZXh0OiByZXNwb25zZS5kYXRhLmFnZW50X3dlbGNvbWVfbWVzc2FnZSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy53ZWxjb21lRGF0YS5tZXNzYWdlID0gcmVzcG9uc2UuZGF0YS5hZ2VudF93ZWxjb21lX21lc3NhZ2U7XG4gICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIod2VsY29tZU1lc3NhZ2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy53ZWxjb21lRGF0YUhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy53ZWxjb21lRGF0YUhhbmRsZXIodGhpcy53ZWxjb21lRGF0YSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2F2ZUNvbnZlcnNhdGlvbigpO1xuICAgICAgaWYgKHRoaXMudXNlV3MpIHtcbiAgICAgICAgdGhpcy5jb25uZWN0V2ViU29ja2V0KCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5jb252ZXJzYXRpb25faWQ7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgaWYgKHRoaXMuaXNUb2tlbkV4cGlyZWRFcnJvcihlcnJvcikpIHtcbiAgICAgICAgdGhpcy5yZXNldENoYXRDb252ZXJzYXRpb24oKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlbmRNZXNzYWdlKFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRbXSxcbiAgICBleHRyYU1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICByZUNhcHRjaGFUb2tlbj86IHN0cmluZ1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuY29udmVyc2F0aW9uSWQgfHwgIXRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29udmVyc2F0aW9uIG5vdCBzdGFydGVkXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCkgLyAxMDAwO1xuICAgIGNvbnN0IGNoYXRNZXNzYWdlOiBDaGF0TWVzc2FnZSA9IHtcbiAgICAgIGNyZWF0ZV90aW1lOiBub3csXG4gICAgICBzdGFydF90aW1lOiBub3cgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUsIC8vIFJlbGF0aXZlIHRvIGNvbnZlcnNhdGlvbiBzdGFydFxuICAgICAgZW5kX3RpbWU6IG5vdyAtIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSArIDAuMDEsIC8vIFJlbGF0aXZlIHRvIGNvbnZlcnNhdGlvbiBzdGFydFxuICAgICAgc3BlYWtlcjogXCJjdXN0b21lclwiLFxuICAgICAgdGV4dDogbWVzc2FnZSxcbiAgICAgIGF0dGFjaG1lbnRzOiBhdHRhY2htZW50cyxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMubWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIoY2hhdE1lc3NhZ2UpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXF1ZXN0Qm9keTogYW55ID0ge1xuICAgICAgICBtZXNzYWdlczogW2NoYXRNZXNzYWdlXSxcbiAgICAgICAgcmVjb3JkZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIH07XG5cbiAgICAgIGlmIChyZUNhcHRjaGFUb2tlbikge1xuICAgICAgICByZXF1ZXN0Qm9keS5yZWNhcHRjaGFfdG9rZW4gPSByZUNhcHRjaGFUb2tlbjtcbiAgICAgIH1cblxuICAgICAgLy8gSW5jbHVkZSBtZXRhZGF0YVxuICAgICAgY29uc3QgbWVyZ2VkTWV0YWRhdGEgPSB7XG4gICAgICAgIC4uLih0aGlzLm1ldGFkYXRhIHx8IHt9KSxcbiAgICAgICAgLi4uKGV4dHJhTWV0YWRhdGEgfHwge30pLFxuICAgICAgfTtcbiAgICAgIGlmIChPYmplY3Qua2V5cyhtZXJnZWRNZXRhZGF0YSkubGVuZ3RoID4gMCkge1xuICAgICAgICByZXF1ZXN0Qm9keS5tZXRhZGF0YSA9IG1lcmdlZE1ldGFkYXRhO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBhdGNoKFxuICAgICAgICBgJHt0aGlzLmJhc2VVcmx9L2FwaS9jb252ZXJzYXRpb25zL2luLXByb2dyZXNzL3VwZGF0ZS8ke3RoaXMuY29udmVyc2F0aW9uSWR9YCxcbiAgICAgICAgcmVxdWVzdEJvZHksXG4gICAgICAgIHtcbiAgICAgICAgICBoZWFkZXJzOiB0aGlzLmdldEhlYWRlcnMoKSxcbiAgICAgICAgfVxuICAgICAgKS5jYXRjaChlID0+IHtcbiAgICAgICAgY29uc3QgZXJyID0gZT8ucmVzcG9uc2U/LmRhdGE7XG4gICAgICAgIC8vIEhhbmRsZSBlcnJvciB3aGVuIGNvbnZlcnNhdGlvbiBpcyBmaW5hbGl6ZWRcbiAgICAgICAgaWYgKGVycj8uZXJyb3Jfa2V5ID09PSAnQ09OVkVSU0FUSU9OX0ZJTkFMSVpFRCcpIHtcbiAgICAgICAgICB0aGlzLmhhbmRsZUNvbnZlcnNhdGlvbkZpbmFsaXplZCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBJZiBub3QgdXNpbmcgV2ViU29ja2V0LCB0cnkgdG8gcmV0cmlldmUgdGhlIHJlc3BvbnNlIG1lc3NhZ2UgZnJvbSB0aGUgdXBkYXRlIGNvbnZlcnNhdGlvbiByZXNwb25zZVxuICAgICAgaWYgKCF0aGlzLnVzZVdzICYmIHRoaXMubWVzc2FnZUhhbmRsZXIgJiYgKCF0aGlzLnVzZVdzIHx8ICF0aGlzLnVzZVBvbGwpKSB7IC8vIHVzZVBvbGwgaXMgdHJ1ZSB3aGVuIHVzaW5nIGhlYXJ0YmVhdCBwb2xsaW5nXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2VEYXRhID0gcmVzcG9uc2U/LmRhdGEgYXMgYW55IHx8IHt9O1xuXG4gICAgICAgICAgaWYgKHJlc3BvbnNlRGF0YS5tZXNzYWdlcyAmJiBBcnJheS5pc0FycmF5KHJlc3BvbnNlRGF0YS5tZXNzYWdlcykpIHtcblxuICAgICAgICAgICAgLy8gTG9vayBmb3IgdGhlIGxhdGVzdCBhZ2VudCBtZXNzYWdlIGluIHRoZSByZXNwb25zZVxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHJlc3BvbnNlRGF0YS5tZXNzYWdlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlRGF0YSA9IHJlc3BvbnNlRGF0YS5tZXNzYWdlc1tpXTtcblxuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgbWVzc2FnZURhdGEuc3BlYWtlciA9PT0gXCJhZ2VudFwiICYmXG4gICAgICAgICAgICAgICAgbWVzc2FnZURhdGEudGV4dCAmJlxuICAgICAgICAgICAgICAgIG1lc3NhZ2VEYXRhLmNyZWF0ZV90aW1lICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICBtZXNzYWdlRGF0YS5zdGFydF90aW1lICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICBtZXNzYWdlRGF0YS5lbmRfdGltZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFnZW50TWVzc2FnZTogQ2hhdE1lc3NhZ2UgPSB7XG4gICAgICAgICAgICAgICAgICBjcmVhdGVfdGltZTogbWVzc2FnZURhdGEuY3JlYXRlX3RpbWUsXG4gICAgICAgICAgICAgICAgICBzdGFydF90aW1lOiB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWVcbiAgICAgICAgICAgICAgICAgICAgPyBtZXNzYWdlRGF0YS5zdGFydF90aW1lIC0gdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lXG4gICAgICAgICAgICAgICAgICAgIDogbWVzc2FnZURhdGEuc3RhcnRfdGltZSxcbiAgICAgICAgICAgICAgICAgIGVuZF90aW1lOiB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWVcbiAgICAgICAgICAgICAgICAgICAgPyBtZXNzYWdlRGF0YS5lbmRfdGltZSAtIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZVxuICAgICAgICAgICAgICAgICAgICA6IG1lc3NhZ2VEYXRhLmVuZF90aW1lLFxuICAgICAgICAgICAgICAgICAgc3BlYWtlcjogXCJhZ2VudFwiLFxuICAgICAgICAgICAgICAgICAgdGV4dDogbWVzc2FnZURhdGEudGV4dCxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfaWQ6IG1lc3NhZ2VEYXRhLm1lc3NhZ2VfaWQgfHwgbWVzc2FnZURhdGEuaWQsXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8vIE9ubHkgcHJvY2VzcyBpZiB0aGlzIGlzIGEgbmV3IG1lc3NhZ2Ugd2UgaGF2ZW4ndCBzZWVuIGJlZm9yZVxuICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IGVhc2lseSBjaGVjayBoZXJlLCBzbyB3ZSdsbCBsZXQgdGhlIGhhbmRsZXIgbWFuYWdlIGR1cGxpY2F0ZXNcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyKGFnZW50TWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKHBhcnNlRXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIHBhcnNlIHVwZGF0ZSBjb252ZXJzYXRpb24gcmVzcG9uc2U6XCIsIHBhcnNlRXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIHRva2VuIGV4cGlyYXRpb24gZXJyb3JcbiAgICAgIGlmICh0aGlzLmlzVG9rZW5FeHBpcmVkRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgIHRoaXMucmVzZXRDaGF0Q29udmVyc2F0aW9uKCk7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIHRoZSBhZ2VudCBpbmFjdGl2ZSBlcnJvclxuICAgICAgaWYgKFxuICAgICAgICBlcnJvci5yZXNwb25zZSAmJlxuICAgICAgICBlcnJvci5yZXNwb25zZS5kYXRhICYmXG4gICAgICAgIGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3Jfa2V5ID09PSBcIkFHRU5UX0lOQUNUSVZFXCJcbiAgICAgICkge1xuICAgICAgICAvLyBDcmVhdGUgYSBjdXN0b20gbWVzc2FnZSBmb3IgdGhlIGFnZW50IGluYWN0aXZlIGVycm9yXG4gICAgICAgIGlmICh0aGlzLm1lc3NhZ2VIYW5kbGVyKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlOiBDaGF0TWVzc2FnZSA9IHtcbiAgICAgICAgICAgIGNyZWF0ZV90aW1lOiBub3csXG4gICAgICAgICAgICBzdGFydF90aW1lOiBub3cgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUsXG4gICAgICAgICAgICBlbmRfdGltZTogbm93IC0gdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lICsgMC4wMSxcbiAgICAgICAgICAgIHNwZWFrZXI6IFwic3BlY2lhbFwiLFxuICAgICAgICAgICAgdGV4dDogdGhpcy5zZXJ2ZXJVbmF2YWlsYWJsZU1lc3NhZ2UgPz8gXCJUaGUgYWdlbnQgaXMgY3VycmVudGx5IG9mZmxpbmUsIHBsZWFzZSBjaGVjayBiYWNrIGxhdGVyLiBUaGFuayB5b3UhXCIsXG4gICAgICAgICAgICAuLi4odGhpcy5zZXJ2ZXJVbmF2YWlsYWJsZUNvbnRhY3RVcmwgJiYge1xuICAgICAgICAgICAgICBsaW5rVXJsOiB0aGlzLnNlcnZlclVuYXZhaWxhYmxlQ29udGFjdFVybCxcbiAgICAgICAgICAgICAgbGlua0xhYmVsOiB0aGlzLnNlcnZlclVuYXZhaWxhYmxlQ29udGFjdExhYmVsID8/IFwiQ29udGFjdCBzdXBwb3J0XCIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIoZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBEb24ndCB0aHJvdyB0aGUgZXJyb3Igc2luY2Ugd2UgaGFuZGxlZCBpdCB3aXRoIGEgbWVzc2FnZVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwbG9hZEZpbGUoY2hhdElkOiBzdHJpbmcsIGZpbGU6IEZpbGUpOiBQcm9taXNlPEZpbGVVcGxvYWRSZXNwb25zZSB8IG51bGw+IHtcbiAgICBpZiAoIXRoaXMuY29udmVyc2F0aW9uSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbnZlcnNhdGlvbiBub3Qgc3RhcnRlZFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGZvcm1EYXRhLmFwcGVuZChcImNoYXRfaWRcIiwgY2hhdElkKTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoXCJmaWxlXCIsIGZpbGUpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdDxGaWxlVXBsb2FkUmVzcG9uc2U+KFxuICAgICAgICBgJHt0aGlzLmJhc2VVcmx9L2FwaS9nZW5hZ2VudC9rbm93bGVkZ2UvdXBsb2FkLWNoYXQtZmlsZWAsXG4gICAgICAgIGZvcm1EYXRhLFxuICAgICAgICB7XG4gICAgICAgICAgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiKSxcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEgYXMgRmlsZVVwbG9hZFJlc3BvbnNlO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmICh0aGlzLmlzVG9rZW5FeHBpcmVkRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgIHRoaXMucmVzZXRDaGF0Q29udmVyc2F0aW9uKCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBjb25uZWN0V2ViU29ja2V0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy51c2VXcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLndlYlNvY2tldCkge1xuICAgICAgdGhpcy53ZWJTb2NrZXQuY2xvc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY29udmVyc2F0aW9uSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbnZlcnNhdGlvbiBJRCBpcyByZXF1aXJlZCBmb3IgV2ViU29ja2V0IGNvbm5lY3Rpb25cIik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29ubmVjdGlvblN0YXRlSGFuZGxlcikgdGhpcy5jb25uZWN0aW9uU3RhdGVIYW5kbGVyKFwiY29ubmVjdGluZ1wiKTtcblxuICAgIC8vIEJ1aWxkIFdlYlNvY2tldCBVUkwgd2l0aCBwcm9wZXIgYXV0aGVudGljYXRpb25cbiAgICBjb25zdCB3c0Jhc2UgPSB0aGlzLmJhc2VVcmwucmVwbGFjZShcImh0dHBcIiwgXCJ3c1wiKTtcbiAgICBjb25zdCB0b3BpY3MgPSBbXCJtZXNzYWdlXCIsIFwidGFrZW92ZXJcIiwgXCJmaW5hbGl6ZVwiXTtcbiAgICBjb25zdCB0b3BpY3NRdWVyeSA9IHRvcGljcy5tYXAoKHQpID0+IGB0b3BpY3M9JHt0fWApLmpvaW4oXCImXCIpO1xuXG4gICAgLy8gVXNlIGd1ZXN0X3Rva2VuIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0byBhcGlfa2V5XG4gICAgY29uc3QgYXV0aFBhcmFtID0gdGhpcy5ndWVzdFRva2VuXG4gICAgICA/IGBhY2Nlc3NfdG9rZW49JHtlbmNvZGVVUklDb21wb25lbnQodGhpcy5ndWVzdFRva2VuKX1gXG4gICAgICA6IGBhcGlfa2V5PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuYXBpS2V5KX1gO1xuXG4gICAgbGV0IHdzVXJsID0gYCR7d3NCYXNlfS9hcGkvY29udmVyc2F0aW9ucy93cy8ke3RoaXMuY29udmVyc2F0aW9uSWR9PyR7YXV0aFBhcmFtfSZsYW5nPWVuJiR7dG9waWNzUXVlcnl9YDtcblxuICAgIC8vIEFkZCB0ZW5hbnQgYXMgcXVlcnkgcGFyYW1ldGVyIGlmIHByb3ZpZGVkXG4gICAgaWYgKHRoaXMudGVuYW50KSB7XG4gICAgICB3c1VybCArPSBgJngtdGVuYW50LWlkPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMudGVuYW50KX1gO1xuICAgIH1cblxuICAgIC8vIFVzZSBuYXRpdmUgYnJvd3NlciBXZWJTb2NrZXQgZmFjdG9yeVxuICAgIHRoaXMud2ViU29ja2V0ID0gY3JlYXRlV2ViU29ja2V0KHdzVXJsKTtcblxuXG4gICAgdGhpcy53ZWJTb2NrZXQub25vcGVuID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY29ubmVjdGlvblN0YXRlSGFuZGxlcikgdGhpcy5jb25uZWN0aW9uU3RhdGVIYW5kbGVyKFwiY29ubmVjdGVkXCIpO1xuICAgIH07XG5cbiAgICB0aGlzLndlYlNvY2tldC5vbm1lc3NhZ2UgPSAoZXZlbnQ6IE1lc3NhZ2VFdmVudCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZXZlbnQuZGF0YSBhcyBzdHJpbmcpO1xuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IFwibWVzc2FnZVwiICYmIHRoaXMubWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhLnBheWxvYWQpKSB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlcyA9IGRhdGEucGF5bG9hZCBhcyBDaGF0TWVzc2FnZVtdO1xuICAgICAgICAgICAgLy8gQWRqdXN0IHRpbWVzdGFtcHMgdG8gYmUgcmVsYXRpdmUgdG8gY29udmVyc2F0aW9uIHN0YXJ0XG4gICAgICAgICAgICAvLyBBbHNvIG5vcm1hbGl6ZSBtZXNzYWdlX2lkIGZpZWxkIChiYWNrZW5kIG1pZ2h0IHNlbmQgJ2lkJyBpbnN0ZWFkIG9mICdtZXNzYWdlX2lkJylcbiAgICAgICAgICAgIGNvbnN0IGFkanVzdGVkTWVzc2FnZXMgPSBtZXNzYWdlc1xuICAgICAgICAgICAgICAubWFwKChtc2cpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGp1c3RlZCA9IHRoaXMuYWRqdXN0TWVzc2FnZVRpbWVzdGFtcHMobXNnKTtcbiAgICAgICAgICAgICAgICAvLyBOb3JtYWxpemU6IGlmIGJhY2tlbmQgc2VuZHMgJ2lkJywgdXNlIGl0IGFzICdtZXNzYWdlX2lkJ1xuICAgICAgICAgICAgICAgIGlmICghYWRqdXN0ZWQubWVzc2FnZV9pZCAmJiAobXNnIGFzIGFueSkuaWQpIHtcbiAgICAgICAgICAgICAgICAgIGFkanVzdGVkLm1lc3NhZ2VfaWQgPSAobXNnIGFzIGFueSkuaWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhZGp1c3RlZDtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmZpbHRlcigobXNnKSA9PiBtc2cuc3BlYWtlciAhPT0gXCJjdXN0b21lclwiKTtcbiAgICAgICAgICAgIGFkanVzdGVkTWVzc2FnZXMuZm9yRWFjaCh0aGlzLm1lc3NhZ2VIYW5kbGVyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgYWRqdXN0ZWRNZXNzYWdlID0gdGhpcy5hZGp1c3RNZXNzYWdlVGltZXN0YW1wcyhcbiAgICAgICAgICAgICAgZGF0YS5wYXlsb2FkIGFzIENoYXRNZXNzYWdlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgLy8gTm9ybWFsaXplOiBpZiBiYWNrZW5kIHNlbmRzICdpZCcsIHVzZSBpdCBhcyAnbWVzc2FnZV9pZCdcbiAgICAgICAgICAgIGlmICghYWRqdXN0ZWRNZXNzYWdlLm1lc3NhZ2VfaWQgJiYgKGRhdGEucGF5bG9hZCBhcyBhbnkpLmlkKSB7XG4gICAgICAgICAgICAgIGFkanVzdGVkTWVzc2FnZS5tZXNzYWdlX2lkID0gKGRhdGEucGF5bG9hZCBhcyBhbnkpLmlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFkanVzdGVkTWVzc2FnZS5zcGVha2VyICE9PSBcImN1c3RvbWVyXCIpIHtcbiAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlcihhZGp1c3RlZE1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgPT09IFwidGFrZW92ZXJcIikge1xuICAgICAgICAgIHRoaXMuaGFuZGxlVGFrZW92ZXIoKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgPT09IFwiZmluYWxpemVcIikge1xuICAgICAgICAgIHRoaXMuaGFuZGxlQ29udmVyc2F0aW9uRmluYWxpemVkKCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIGlnbm9yZVxuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLndlYlNvY2tldC5vbmVycm9yID0gKGVycm9yOiBFdmVudCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY29ubmVjdGlvblN0YXRlSGFuZGxlcilcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdGVIYW5kbGVyKFwiZGlzY29ubmVjdGVkXCIpO1xuXG4gICAgICAvLyBMb2cgZGlhZ25vc3RpY1xuICAgICAgY29uc3QgZGlhZ25vc3RpYyA9IGNyZWF0ZVdlYlNvY2tldERpYWdub3N0aWMoZXJyb3IsIHdzVXJsKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFtHZW5Bc3Npc3QgQ2hhdF0gJHtkaWFnbm9zdGljfWApO1xuICAgIH07XG5cbiAgICB0aGlzLndlYlNvY2tldC5vbmNsb3NlID0gKGV2ZW50OiBDbG9zZUV2ZW50KSA9PiB7XG4gICAgICBpZiAodGhpcy5jb25uZWN0aW9uU3RhdGVIYW5kbGVyKVxuICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0ZUhhbmRsZXIoXCJkaXNjb25uZWN0ZWRcIik7XG5cbiAgICAgIC8vIExvZyBkaWFnbm9zdGljXG4gICAgICBpZiAoIWV2ZW50Lndhc0NsZWFuKSB7XG4gICAgICAgIGNvbnN0IGRpYWdub3N0aWMgPSBjcmVhdGVXZWJTb2NrZXREaWFnbm9zdGljKGV2ZW50LCB3c1VybCk7XG4gICAgICAgIGNvbnNvbGUud2FybihgW0dlbkFzc2lzdCBDaGF0XSAke2RpYWdub3N0aWN9YCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGRpc2Nvbm5lY3QoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMud2ViU29ja2V0KSB7XG4gICAgICB0aGlzLndlYlNvY2tldC5jbG9zZSgpO1xuICAgICAgdGhpcy53ZWJTb2NrZXQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hXZWxjb21lSW1hZ2UoYWdlbnRJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGltYWdlUmVzcG9uc2UgPSBhd2FpdCBheGlvcy5nZXQoXG4gICAgICAgIGAke3RoaXMuYmFzZVVybH0vYXBpL2dlbmFnZW50L2FnZW50cy9jb25maWdzLyR7YWdlbnRJZH0vd2VsY29tZS1pbWFnZWAsXG4gICAgICAgIHtcbiAgICAgICAgICBoZWFkZXJzOiB0aGlzLmdldEhlYWRlcnMoKSxcbiAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICB9XG4gICAgICApO1xuICAgICAgY29uc3QgYmxvYlVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoaW1hZ2VSZXNwb25zZS5kYXRhKTtcbiAgICAgIHRoaXMud2VsY29tZU9iamVjdFVybCA9IGJsb2JVcmw7XG4gICAgICB0aGlzLndlbGNvbWVEYXRhLmltYWdlVXJsID0gYmxvYlVybDtcbiAgICAgIGlmICh0aGlzLndlbGNvbWVEYXRhSGFuZGxlcikge1xuICAgICAgICB0aGlzLndlbGNvbWVEYXRhSGFuZGxlcih0aGlzLndlbGNvbWVEYXRhKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgaWYgKHRoaXMuaXNUb2tlbkV4cGlyZWRFcnJvcihlcnIpKSB7XG4gICAgICAgIHRoaXMucmVzZXRDaGF0Q29udmVyc2F0aW9uKCk7XG4gICAgICB9XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgZmVlZGJhY2sgdG8gYSBzcGVjaWZpYyBhZ2VudCBtZXNzYWdlIGluIHRoZSBjb252ZXJzYXRpb25cbiAgYXN5bmMgYWRkRmVlZGJhY2soXG4gICAgbWVzc2FnZUlkOiBzdHJpbmcsXG4gICAgZmVlZGJhY2s6IFwiZ29vZFwiIHwgXCJiYWRcIixcbiAgICBmZWVkYmFja19tZXNzYWdlPzogc3RyaW5nXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghbWVzc2FnZUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXNzYWdlIElEIGlzIHJlcXVpcmVkIGZvciBmZWVkYmFja1wiKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gVXNlIG1lc3NhZ2UgSUQgaW4gdGhlIFVSTCBwYXRoLCBub3QgY29udmVyc2F0aW9uIElEXG4gICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmJhc2VVcmx9L2FwaS9jb252ZXJzYXRpb25zL21lc3NhZ2UvYWRkLWZlZWRiYWNrLyR7bWVzc2FnZUlkfWA7XG4gICAgICAvLyBCb2R5IHNob3VsZCBvbmx5IGNvbnRhaW4gZmVlZGJhY2sgYW5kIGZlZWRiYWNrX21lc3NhZ2UgKG5vIG1lc3NhZ2VfaWQpXG4gICAgICBjb25zdCBwYXlsb2FkOiB7XG4gICAgICAgIGZlZWRiYWNrOiBcImdvb2RcIiB8IFwiYmFkXCI7XG4gICAgICAgIGZlZWRiYWNrX21lc3NhZ2U/OiBzdHJpbmc7XG4gICAgICB9ID0ge1xuICAgICAgICBmZWVkYmFjayxcbiAgICAgIH07XG5cbiAgICAgIGlmIChmZWVkYmFja19tZXNzYWdlKSB7XG4gICAgICAgIHBheWxvYWQuZmVlZGJhY2tfbWVzc2FnZSA9IGZlZWRiYWNrX21lc3NhZ2U7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGF4aW9zLnBhdGNoKHVybCwgcGF5bG9hZCwge1xuICAgICAgICBoZWFkZXJzOiB0aGlzLmdldEhlYWRlcnMoKSxcbiAgICAgIH0pO1xuXG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgaWYgKHRoaXMuaXNUb2tlbkV4cGlyZWRFcnJvcihlcnJvcikpIHtcbiAgICAgICAgdGhpcy5yZXNldENoYXRDb252ZXJzYXRpb24oKTtcbiAgICAgIH1cbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZlZWRiYWNrIEFQSSBjYWxsIGZhaWxlZDonLCB7XG4gICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgIHJlc3BvbnNlOiBlcnJvci5yZXNwb25zZT8uZGF0YSxcbiAgICAgICAgc3RhdHVzOiBlcnJvci5yZXNwb25zZT8uc3RhdHVzLFxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvLyBIZWxwZXIgbWV0aG9kIHRvIGFkanVzdCBtZXNzYWdlIHRpbWVzdGFtcHMgcmVsYXRpdmUgdG8gY29udmVyc2F0aW9uIHN0YXJ0XG4gIHByaXZhdGUgYWRqdXN0TWVzc2FnZVRpbWVzdGFtcHMobWVzc2FnZTogQ2hhdE1lc3NhZ2UpOiBDaGF0TWVzc2FnZSB7XG4gICAgaWYgKCF0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUpIHtcbiAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5tZXNzYWdlLFxuICAgICAgc3RhcnRfdGltZTogbWVzc2FnZS5zdGFydF90aW1lIC0gdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lLFxuICAgICAgZW5kX3RpbWU6IG1lc3NhZ2UuZW5kX3RpbWUgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUsXG4gICAgfTtcbiAgfVxuXG4gIC8qKioqKioqKioqKiogSGVhcnRiZWF0IHBvbGxpbmcgKioqKioqKioqKioqL1xuICAvKipcbiAgICogUG9sbCBpbi1wcm9ncmVzcyBjb252ZXJzYXRpb24gKGhlYXJ0YmVhdCB3aGVuIFdlYlNvY2tldCBpcyBkaXNhYmxlZCkuXG4gICAqIFJldHVybnMgc3RhdHVzIGFuZCBtZXNzYWdlcyBub3JtYWxpemVkIHRvIENoYXRNZXNzYWdlW10uXG4gICAqL1xuICBhc3luYyBwb2xsSW5Qcm9ncmVzc0NvbnZlcnNhdGlvbigpOiBQcm9taXNlPHtcbiAgICBzdGF0dXM6IHN0cmluZztcbiAgICBwb2xsTWVzc2FnZXM6IEluUHJvZ3Jlc3NQb2xsTWVzc2FnZVtdO1xuICB9PiB7XG4gICAgaWYgKCF0aGlzLmNvbnZlcnNhdGlvbklkIHx8ICF0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbnZlcnNhdGlvbiBub3Qgc3RhcnRlZFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLmdldDxJblByb2dyZXNzUG9sbFJlc3BvbnNlPihcbiAgICAgIGAke3RoaXMuYmFzZVVybH0vYXBpL2NvbnZlcnNhdGlvbnMvaW4tcHJvZ3Jlc3MvcG9sbC8ke3RoaXMuY29udmVyc2F0aW9uSWR9YCxcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKCkgfVxuICAgICk7XG5cbiAgICBjb25zdCBwb2xsTWVzc2FnZXMgPSAocmVzcG9uc2UuZGF0YS5tZXNzYWdlcyB8fCBbXSkubWFwKChtKSA9PlxuICAgICAgdGhpcy5ub3JtYWxpemVQb2xsTWVzc2FnZVRvQ2hhdE1lc3NhZ2UobSlcbiAgICApO1xuXG4gICAgcmV0dXJuIHsgc3RhdHVzOiByZXNwb25zZS5kYXRhLnN0YXR1cywgcG9sbE1lc3NhZ2VzIH07XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZVBvbGxNZXNzYWdlVG9DaGF0TWVzc2FnZShtOiBJblByb2dyZXNzUG9sbE1lc3NhZ2UpOiBJblByb2dyZXNzUG9sbE1lc3NhZ2Uge1xuICAgIGxldCBjcmVhdGVUaW1lID1cbiAgICAgIHR5cGVvZiBtLmNyZWF0ZV90aW1lID09PSBcIm51bWJlclwiXG4gICAgICAgID8gbS5jcmVhdGVfdGltZVxuICAgICAgICA6IG0uY3JlYXRlX3RpbWVcbiAgICAgICAgICA/ICtuZXcgRGF0ZShtLmNyZWF0ZV90aW1lKVxuICAgICAgICAgIDogTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCk7XG5cbiAgICAvLyBOb3JtYWxpemUgdG8gc2Vjb25kczogSVNPIHN0cmluZyBnaXZlcyBtcyAoPjFlMTIpOyBpZiBzbyBjb252ZXJ0LiBPdGhlcndpc2UgYXNzdW1lIGFscmVhZHkgc2Vjb25kcy5cbiAgICBpZiAoY3JlYXRlVGltZSA+PSAxZTEyKSB7XG4gICAgICBjcmVhdGVUaW1lID0gTWF0aC5yb3VuZChjcmVhdGVUaW1lIC8gMTAwMCk7XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0VGltZSA9XG4gICAgICB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUgIT0gbnVsbFxuICAgICAgICA/IGNyZWF0ZVRpbWUgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWVcbiAgICAgICAgOiBtLnN0YXJ0X3RpbWU7XG4gICAgY29uc3QgZW5kVGltZSA9XG4gICAgICB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUgIT0gbnVsbFxuICAgICAgICA/IHN0YXJ0VGltZSArIChtLmVuZF90aW1lIC0gbS5zdGFydF90aW1lKSB8fCAwLjAxXG4gICAgICAgIDogbS5lbmRfdGltZTtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IG0uaWQsXG4gICAgICBjcmVhdGVfdGltZTogY3JlYXRlVGltZSxcbiAgICAgIHN0YXJ0X3RpbWU6IHN0YXJ0VGltZSxcbiAgICAgIGVuZF90aW1lOiBlbmRUaW1lLFxuICAgICAgc3BlYWtlcjogbS5zcGVha2VyIGFzIFwiY3VzdG9tZXJcIiB8IFwiYWdlbnRcIiB8IFwic3BlY2lhbFwiLFxuICAgICAgdGV4dDogbS50ZXh0LFxuICAgICAgdHlwZTogbS50eXBlLFxuICAgICAgZmVlZGJhY2s6IG0uZmVlZGJhY2ssXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIG5vdGlmeVRha2VvdmVyRnJvbVBvbGwoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gUG9sbCBhbHJlYWR5IGFkZHMgdGhlIFwiU3VwZXJ2aXNvciB0b29rIG92ZXJcIiBtZXNzYWdlIGZyb20gdGhlIG1lc3NhZ2UgbGlzdC5cbiAgICAvLyBPbmx5IHJ1biB0aGUgaGFuZGxlciBzbyBVSSBzdGF0ZSB1cGRhdGVzOyBkbyBub3QgY2FsbCBoYW5kbGVUYWtlb3ZlcigpIG9yIHdlIGR1cGxpY2F0ZSB0aGUgbWVzc2FnZS5cbiAgICBpZiAodGhpcy50YWtlb3ZlckhhbmRsZXIpIHtcbiAgICAgIHRoaXMudGFrZW92ZXJIYW5kbGVyKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbm90aWZ5RmluYWxpemVkRnJvbVBvbGwoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gUG9sbCBhbHJlYWR5IGFkZHMgdGhlIFwiQ29udmVyc2F0aW9uIEZpbmFsaXplZFwiIG1lc3NhZ2UgZnJvbSB0aGUgbWVzc2FnZSBsaXN0LlxuICAgIC8vIE9ubHkgdXBkYXRlIHN0YXRlIGFuZCBydW4gdGhlIGhhbmRsZXI7IGRvIG5vdCBjYWxsIGhhbmRsZUNvbnZlcnNhdGlvbkZpbmFsaXplZCgpIG9yIHdlIGR1cGxpY2F0ZSB0aGUgbWVzc2FnZS5cbiAgICBpZiAodGhpcy5maW5hbGl6ZWRIYW5kbGVyKSB7XG4gICAgICB0aGlzLmZpbmFsaXplZEhhbmRsZXIoKTtcbiAgICB9XG4gICAgdGhpcy5pc0ZpbmFsaXplZCA9IHRydWU7XG4gICAgdGhpcy5zYXZlQ29udmVyc2F0aW9uKCk7XG4gIH1cblxuICAvKioqKioqIEVuZCBvZiBIZWFydGJlYXQgcG9sbGluZyAqKioqKioqKioqKiovXG59XG4iXX0=
908
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdFNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvY2hhdFNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFXMUIsT0FBTyxFQUNMLGVBQWUsRUFDZix5QkFBeUIsR0FDMUIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixNQUFNLENBQUMsSUFBTSxnQ0FBZ0MsR0FBRyxrQ0FBa0MsQ0FBQztBQUVuRjtJQStCRSxxQkFDRSxPQUFlLEVBQ2YsTUFBYyxFQUNkLFFBQThCLEVBQzlCLE1BQWUsRUFDZixRQUFpQixFQUNqQixLQUFxQixFQUNyQixPQUF3QjtRQUR4QixzQkFBQSxFQUFBLFlBQXFCO1FBQ3JCLHdCQUFBLEVBQUEsZUFBd0I7UUFsQ2xCLG1CQUFjLEdBQWtCLElBQUksQ0FBQztRQUNyQywyQkFBc0IsR0FBa0IsSUFBSSxDQUFDLENBQUMsZ0NBQWdDO1FBQzlFLGVBQVUsR0FBa0IsSUFBSSxDQUFDLENBQUMsZ0NBQWdDO1FBQ2xFLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBQzdCLGNBQVMsR0FBcUIsSUFBSSxDQUFDO1FBQ25DLG1CQUFjLEdBQTRDLElBQUksQ0FBQztRQUMvRCxvQkFBZSxHQUF3QixJQUFJLENBQUM7UUFDNUMscUJBQWdCLEdBQXdCLElBQUksQ0FBQztRQUM3QywyQkFBc0IsR0FFbkIsSUFBSSxDQUFDO1FBQ1IsdUJBQWtCLEdBQThDLElBQUksQ0FBQztRQUNyRSxtQkFBYyxHQUFHLHdCQUF3QixDQUFDO1FBQzFDLG9CQUFlLEdBQWEsRUFBRSxDQUFDO1FBQy9CLGdCQUFXLEdBQXFCLEVBQUUsQ0FBQztRQUNuQyxtQkFBYyxHQUF3QixFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3JF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O1NBQ3JCLENBQUM7SUFDSixDQUFDO0lBRUssNENBQXNCLEdBQTVCOzs7Z0JBQ0UsOEVBQThFO2dCQUM5RSxzR0FBc0c7Z0JBQ3RHLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUN6QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3pCLENBQUM7Ozs7S0FDRjtJQUVLLDZDQUF1QixHQUE3Qjs7O2dCQUNFLGdGQUFnRjtnQkFDaEYsZ0hBQWdIO2dCQUNoSCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO29CQUMxQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDMUIsQ0FBQztnQkFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztnQkFDeEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Ozs7S0FDekI7SUFHSCxrQkFBQztBQUFELENBQUMsQUF6OEJELElBeThCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBheGlvcyBmcm9tIFwiYXhpb3NcIjtcbmltcG9ydCB7XG4gIENoYXRNZXNzYWdlLFxuICBTdGFydENvbnZlcnNhdGlvblJlc3BvbnNlLFxuICBBdHRhY2htZW50LFxuICBBZ2VudFRoaW5raW5nQ29uZmlnLFxuICBBZ2VudFdlbGNvbWVEYXRhLFxuICBGaWxlVXBsb2FkUmVzcG9uc2UsXG4gIEluUHJvZ3Jlc3NQb2xsUmVzcG9uc2UsXG4gIEluUHJvZ3Jlc3NQb2xsTWVzc2FnZSxcbn0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQge1xuICBjcmVhdGVXZWJTb2NrZXQsXG4gIGNyZWF0ZVdlYlNvY2tldERpYWdub3N0aWMsXG59IGZyb20gXCIuLi91dGlscy93ZWJzb2NrZXRcIjtcbmV4cG9ydCBjb25zdCBHRU5BU1NJU1RfQUdFTlRfTUVUQURBVEFfVVBEQVRFRCA9IFwiZ2VuYXNzaXN0X2FnZW50X21ldGFkYXRhX3VwZGF0ZWRcIjtcblxuZXhwb3J0IGNsYXNzIENoYXRTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBiYXNlVXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgYXBpS2V5OiBzdHJpbmc7XG4gIHByaXZhdGUgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgY29udmVyc2F0aW9uSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGNvbnZlcnNhdGlvbkNyZWF0ZVRpbWU6IG51bWJlciB8IG51bGwgPSBudWxsOyAvLyBUcmFjayBjb252ZXJzYXRpb24gc3RhcnQgdGltZVxuICBwcml2YXRlIGd1ZXN0VG9rZW46IHN0cmluZyB8IG51bGwgPSBudWxsOyAvLyBHdWVzdCB0b2tlbiBmb3IgYXV0aG9yaXphdGlvblxuICBwcml2YXRlIGlzRmluYWxpemVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgd2ViU29ja2V0OiBXZWJTb2NrZXQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBtZXNzYWdlSGFuZGxlcjogKChtZXNzYWdlOiBDaGF0TWVzc2FnZSkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSB0YWtlb3ZlckhhbmRsZXI6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGZpbmFsaXplZEhhbmRsZXI6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGNvbm5lY3Rpb25TdGF0ZUhhbmRsZXI6XG4gICAgfCAoKHN0YXRlOiBcImNvbm5lY3RpbmdcIiB8IFwiY29ubmVjdGVkXCIgfCBcImRpc2Nvbm5lY3RlZFwiKSA9PiB2b2lkKVxuICAgIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgd2VsY29tZURhdGFIYW5kbGVyOiAoKGRhdGE6IEFnZW50V2VsY29tZURhdGEpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc3RvcmFnZUtleUJhc2UgPSBcImdlbmFzc2lzdF9jb252ZXJzYXRpb25cIjtcbiAgcHJpdmF0ZSBwb3NzaWJsZVF1ZXJpZXM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgd2VsY29tZURhdGE6IEFnZW50V2VsY29tZURhdGEgPSB7fTtcbiAgcHJpdmF0ZSB0aGlua2luZ0NvbmZpZzogQWdlbnRUaGlua2luZ0NvbmZpZyA9IHsgcGhyYXNlczogW10sIGRlbGF5TXM6IDEwMDAgfTtcbiAgcHJpdmF0ZSBjaGF0SW5wdXRNZXRhZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgcHJpdmF0ZSB3ZWxjb21lT2JqZWN0VXJsOiBzdHJpbmcgfCBudWxsID0gbnVsbDsgLy8gdG8gcmV2b2tlIG9uIHJlc2V0XG4gIHByaXZhdGUgdGVuYW50OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgYWdlbnRJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGxhbmd1YWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgdXNlV3M6IGJvb2xlYW47XG4gIHByaXZhdGUgc2VydmVyVW5hdmFpbGFibGVNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgc2VydmVyVW5hdmFpbGFibGVDb250YWN0VXJsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgc2VydmVyVW5hdmFpbGFibGVDb250YWN0TGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSB1c2VQb2xsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgYmFzZVVybDogc3RyaW5nLFxuICAgIGFwaUtleTogc3RyaW5nLFxuICAgIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICB0ZW5hbnQ/OiBzdHJpbmcsXG4gICAgbGFuZ3VhZ2U/OiBzdHJpbmcsXG4gICAgdXNlV3M6IGJvb2xlYW4gPSB0cnVlLFxuICAgIHVzZVBvbGw6IGJvb2xlYW4gPSBmYWxzZVxuICApIHtcbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsLmVuZHNXaXRoKFwiL1wiKSA/IGJhc2VVcmwuc2xpY2UoMCwgLTEpIDogYmFzZVVybDtcbiAgICB0aGlzLmFwaUtleSA9IGFwaUtleTtcbiAgICB0aGlzLm1ldGFkYXRhID0gbWV0YWRhdGE7XG4gICAgdGhpcy50ZW5hbnQgPSB0ZW5hbnQ7XG4gICAgdGhpcy5sYW5ndWFnZSA9IGxhbmd1YWdlO1xuICAgIHRoaXMudXNlV3MgPSB1c2VXcztcbiAgICB0aGlzLnVzZVBvbGwgPSB1c2VQb2xsO1xuICAgIC8vIFRyeSB0byBsb2FkIGEgc2F2ZWQgY29udmVyc2F0aW9uIGZvciB0aGlzIGFwaUtleSBmcm9tIGxvY2FsU3RvcmFnZVxuICAgIHRoaXMubG9hZFNhdmVkQ29udmVyc2F0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIGdldFN0b3JhZ2VLZXkoKTogc3RyaW5nIHtcbiAgICAvLyBQb2ludGVyIHRvIGN1cnJlbnQgY29udmVyc2F0aW9uIG1ldGFkYXRhIGZvciB0aGlzIGFwaUtleVxuICAgIHJldHVybiBgJHt0aGlzLnN0b3JhZ2VLZXlCYXNlfToke3RoaXMuYXBpS2V5fWA7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGNvbnZlcnNhdGlvbiBmaW5hbGl6ZWQ6IGVtaXQgc3BlY2lhbCBtZXNzYWdlLCBjYWxsIGZpbmFsaXplZCBoYW5kbGVyLCBwZXJzaXN0IHN0YXRlLlxuICAgKi9cbiAgcHVibGljIGhhbmRsZUNvbnZlcnNhdGlvbkZpbmFsaXplZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tZXNzYWdlSGFuZGxlcikge1xuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKSAvIDEwMDA7XG4gICAgICBjb25zdCBmaW5hbGl6ZWRNZXNzYWdlOiBDaGF0TWVzc2FnZSA9IHtcbiAgICAgICAgY3JlYXRlX3RpbWU6IG5vdyxcbiAgICAgICAgc3RhcnRfdGltZTogdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lXG4gICAgICAgICAgPyBub3cgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWVcbiAgICAgICAgICA6IDAsXG4gICAgICAgIGVuZF90aW1lOiB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWVcbiAgICAgICAgICA/IG5vdyAtIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSArIDAuMDFcbiAgICAgICAgICA6IDAuMDEsXG4gICAgICAgIHNwZWFrZXI6IFwic3BlY2lhbFwiLFxuICAgICAgICB0ZXh0OiBcIkNvbnZlcnNhdGlvbiBGaW5hbGl6ZWRcIixcbiAgICAgICAgdHlwZTogXCJmaW5hbGl6ZWRcIixcbiAgICAgIH07XG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyKGZpbmFsaXplZE1lc3NhZ2UpO1xuICAgIH1cbiAgICBpZiAodGhpcy5maW5hbGl6ZWRIYW5kbGVyKSB7XG4gICAgICB0aGlzLmZpbmFsaXplZEhhbmRsZXIoKTtcbiAgICB9XG4gICAgdGhpcy5pc0ZpbmFsaXplZCA9IHRydWU7XG4gICAgdGhpcy5zYXZlQ29udmVyc2F0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogUGVyc2lzdCBhZ2VudF9jaGF0X2lucHV0X21ldGFkYXRhIHRvIGxvY2FsU3RvcmFnZSBhbmQgZGlzcGF0Y2ggYSBnbG9iYWwgZXZlbnQuXG4gICAqIEFueSBjb25zdW1lciAoZS5nLiBjb25maWcgcGFuZWwpIGNhbiBsaXN0ZW4gZm9yIEdFTkFTU0lTVF9BR0VOVF9NRVRBREFUQV9VUERBVEVEXG4gICAqIG9yIHJlYWQgZnJvbSBsb2NhbFN0b3JhZ2Ugb24gbW91bnQ7IG5vIG5lZWQgdG8gcGFzcyBjYWxsYmFja3MgaW50byB0aGUgY2hhdC5cbiAgICovXG4gIHByaXZhdGUgcGVyc2lzdEFuZEVtaXRBZ2VudE1ldGFkYXRhKG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBrZXkgPSBgZ2VuYXNzaXN0X2FnZW50X2NoYXRfaW5wdXRfbWV0YWRhdGE6JHt0aGlzLmFwaUtleX1gO1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeShtZXRhZGF0YSkpO1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LmRpc3BhdGNoRXZlbnQpIHtcbiAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KEdFTkFTU0lTVF9BR0VOVF9NRVRBREFUQV9VUERBVEVELCB7XG4gICAgICAgICAgICBkZXRhaWw6IHsgYXBpS2V5OiB0aGlzLmFwaUtleSwgbWV0YWRhdGE6IHsgLi4ubWV0YWRhdGEgfSB9LFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBsYW5ndWFnZSBmb3IgQWNjZXB0LUxhbmd1YWdlIGhlYWRlclxuICAgKi9cbiAgc2V0TGFuZ3VhZ2UobGFuZ3VhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRoaXMubGFuZ3VhZ2UgPSBsYW5ndWFnZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgbWV0YWRhdGEgKHVzZWZ1bCBmb3IgdXBkYXRpbmcgbGFuZ3VhZ2Ugb3Igb3RoZXIgZHluYW1pYyBtZXRhZGF0YSlcbiAgICovXG4gIHNldE1ldGFkYXRhKG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy5tZXRhZGF0YSA9IG1ldGFkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBsYW5ndWFnZSBjb2RlIGZvciBBY2NlcHQtTGFuZ3VhZ2UgaGVhZGVyXG4gICAqIENvbnZlcnRzIHNpbXBsZSBsYW5ndWFnZSBjb2RlcyAoZS5nLiwgXCJlblwiLCBcImVzXCIpIHRvIHByb3BlciBmb3JtYXQgKGUuZy4sIFwiZW4tVVMsZW47cT0wLjlcIilcbiAgICogRm9sbG93cyBIVFRQIEFjY2VwdC1MYW5ndWFnZSBoZWFkZXIgc3RhbmRhcmRzXG4gICAqL1xuICBwcml2YXRlIGZvcm1hdEFjY2VwdExhbmd1YWdlKGxhbmdDb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghbGFuZ0NvZGUpIHJldHVybiAnJztcblxuICAgIC8vIE5vcm1hbGl6ZSBsYW5ndWFnZSBjb2RlIChsb3dlcmNhc2UsIGhhbmRsZSBjb21tb24gZm9ybWF0cylcbiAgICBjb25zdCBub3JtYWxpemVkID0gbGFuZ0NvZGUudG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgICAvLyBNYXAgY29tbW9uIGxhbmd1YWdlIGNvZGVzIHRvIHRoZWlyIGZ1bGwgbG9jYWxlIGZvcm1hdFxuICAgIGNvbnN0IGxhbmd1YWdlTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgJ2VuJzogJ2VuLVVTJyxcbiAgICAgICdlcyc6ICdlcy1FUycsXG4gICAgICAnZnInOiAnZnItRlInLFxuICAgICAgJ2RlJzogJ2RlLURFJyxcbiAgICAgICdpdCc6ICdpdC1JVCcsXG4gICAgICAncHQnOiAncHQtUFQnLFxuICAgICAgJ2FyJzogJ2FyLVNBJyxcbiAgICAgICdzcSc6ICdzcS1BTCcsXG4gICAgfTtcblxuICAgIC8vIENoZWNrIGlmIHRoZSBjb2RlIGFscmVhZHkgaGFzIGEgcmVnaW9uIChlLmcuLCBcImVuLVVTXCIsIFwiZXMtRVNcIilcbiAgICBjb25zdCBoYXNSZWdpb24gPSBub3JtYWxpemVkLmluY2x1ZGVzKCctJyk7XG5cbiAgICAvLyBHZXQgdGhlIGZ1bGwgbG9jYWxlIG9yIHVzZSB0aGUgcHJvdmlkZWQgY29kZSBpZiBpdCBhbHJlYWR5IGhhcyBhIHJlZ2lvblxuICAgIGNvbnN0IGZ1bGxMb2NhbGUgPSBoYXNSZWdpb24gPyBub3JtYWxpemVkIDogKGxhbmd1YWdlTWFwW25vcm1hbGl6ZWRdIHx8IG5vcm1hbGl6ZWQpO1xuXG4gICAgLy8gRXh0cmFjdCBiYXNlIGxhbmd1YWdlIGZyb20gdGhlIGZ1bGwgbG9jYWxlIChlLmcuLCBcImVuXCIgZnJvbSBcImVuLVVTXCIpXG4gICAgY29uc3QgZnVsbEJhc2VMYW5nID0gZnVsbExvY2FsZS5zcGxpdCgnLScpWzBdLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBCdWlsZCBBY2NlcHQtTGFuZ3VhZ2UgaGVhZGVyOiBwcmltYXJ5IGxvY2FsZSwgYmFzZSBsYW5ndWFnZSB3aXRoIHF1YWxpdHksIEVuZ2xpc2ggZmFsbGJhY2tcbiAgICAvLyBGb3JtYXQ6IFwibG9jYWxlLGJhc2UtbGFuZztxPTAuOSxlbjtxPTAuOFwiXG4gICAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW2Z1bGxMb2NhbGVdO1xuXG4gICAgLy8gZmFsbGJhY2tcbiAgICBwYXJ0cy5wdXNoKGAke2Z1bGxCYXNlTGFuZ307cT0wLjlgKTtcblxuICAgIC8vIEFkZCBFbmdsaXNoIGFzIGZhbGxiYWNrIGlmIG5vdCBhbHJlYWR5IHRoZSBwcmltYXJ5IGxhbmd1YWdlXG4gICAgaWYgKGZ1bGxCYXNlTGFuZyAhPT0gJ2VuJykge1xuICAgICAgcGFydHMucHVzaCgnZW47cT0wLjgnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFydHMuam9pbignLCAnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgaGVhZGVycyBmb3IgQVBJIHJlcXVlc3RzLCBpbmNsdWRpbmcgYXV0aG9yaXphdGlvbiBpZiBndWVzdCB0b2tlbiBpcyBhdmFpbGFibGVcbiAgICovXG4gIHByaXZhdGUgZ2V0SGVhZGVycyhjb250ZW50VHlwZTogc3RyaW5nID0gXCJhcHBsaWNhdGlvbi9qc29uXCIpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgXCJ4LWFwaS1rZXlcIjogdGhpcy5hcGlLZXksXG4gICAgICBcIkNvbnRlbnQtVHlwZVwiOiBjb250ZW50VHlwZSxcbiAgICB9O1xuXG4gICAgLy8gQWRkIHRlbmFudCBoZWFkZXIgaWYgcHJvdmlkZWRcbiAgICBpZiAodGhpcy50ZW5hbnQpIHtcbiAgICAgIGhlYWRlcnNbXCJ4LXRlbmFudC1pZFwiXSA9IHRoaXMudGVuYW50O1xuICAgIH1cblxuICAgIC8vIEFkZCBhdXRob3JpemF0aW9uIGhlYWRlciBpZiBndWVzdCB0b2tlbiBpcyBhdmFpbGFibGVcbiAgICBpZiAodGhpcy5ndWVzdFRva2VuKSB7XG4gICAgICBoZWFkZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0aGlzLmd1ZXN0VG9rZW59YDtcbiAgICB9XG5cbiAgICAvLyBBZGQgQWNjZXB0LUxhbmd1YWdlIGhlYWRlciBpZiBsYW5ndWFnZSBpcyBzZXRcbiAgICBpZiAodGhpcy5sYW5ndWFnZSkge1xuICAgICAgY29uc3QgYWNjZXB0TGFuZ3VhZ2UgPSB0aGlzLmZvcm1hdEFjY2VwdExhbmd1YWdlKHRoaXMubGFuZ3VhZ2UpO1xuICAgICAgaWYgKGFjY2VwdExhbmd1YWdlKSB7XG4gICAgICAgIGhlYWRlcnNbXCJBY2NlcHQtTGFuZ3VhZ2VcIl0gPSBhY2NlcHRMYW5ndWFnZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGVhZGVycztcbiAgfVxuXG4gIHNldE1lc3NhZ2VIYW5kbGVyKGhhbmRsZXI6IChtZXNzYWdlOiBDaGF0TWVzc2FnZSkgPT4gdm9pZCkge1xuICAgIHRoaXMubWVzc2FnZUhhbmRsZXIgPSBoYW5kbGVyO1xuICB9XG5cbiAgc2V0VGFrZW92ZXJIYW5kbGVyKGhhbmRsZXI6ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLnRha2VvdmVySGFuZGxlciA9IGhhbmRsZXI7XG4gIH1cblxuICBzZXRGaW5hbGl6ZWRIYW5kbGVyKGhhbmRsZXI6ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLmZpbmFsaXplZEhhbmRsZXIgPSBoYW5kbGVyO1xuICB9XG5cbiAgc2V0Q29ubmVjdGlvblN0YXRlSGFuZGxlcihcbiAgICBoYW5kbGVyOiAoc3RhdGU6IFwiY29ubmVjdGluZ1wiIHwgXCJjb25uZWN0ZWRcIiB8IFwiZGlzY29ubmVjdGVkXCIpID0+IHZvaWRcbiAgKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uU3RhdGVIYW5kbGVyID0gaGFuZGxlcjtcbiAgfVxuXG4gIHNldFdlbGNvbWVEYXRhSGFuZGxlcihoYW5kbGVyOiAoKGRhdGE6IEFnZW50V2VsY29tZURhdGEpID0+IHZvaWQpIHwgbnVsbCkge1xuICAgIHRoaXMud2VsY29tZURhdGFIYW5kbGVyID0gaGFuZGxlcjtcbiAgfVxuXG4gIHNldFNlcnZlclVuYXZhaWxhYmxlQ29uZmlnKFxuICAgIG1lc3NhZ2U/OiBzdHJpbmcsXG4gICAgY29udGFjdFVybD86IHN0cmluZyxcbiAgICBjb250YWN0TGFiZWw/OiBzdHJpbmdcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5zZXJ2ZXJVbmF2YWlsYWJsZU1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIHRoaXMuc2VydmVyVW5hdmFpbGFibGVDb250YWN0VXJsID0gY29udGFjdFVybDtcbiAgICB0aGlzLnNlcnZlclVuYXZhaWxhYmxlQ29udGFjdExhYmVsID0gY29udGFjdExhYmVsO1xuICB9XG5cbiAgZ2V0UG9zc2libGVRdWVyaWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5wb3NzaWJsZVF1ZXJpZXM7XG4gIH1cblxuICBnZXRXZWxjb21lRGF0YSgpOiBBZ2VudFdlbGNvbWVEYXRhIHtcbiAgICByZXR1cm4gdGhpcy53ZWxjb21lRGF0YTtcbiAgfVxuXG4gIGdldFRoaW5raW5nQ29uZmlnKCk6IEFnZW50VGhpbmtpbmdDb25maWcge1xuICAgIHJldHVybiB0aGlzLnRoaW5raW5nQ29uZmlnO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGFkYXRhIGtleXMvZGVmYXVsdHMgZnJvbSB0aGUgd29ya2Zsb3cncyBDaGF0IElucHV0IG5vZGUgKHJldHVybmVkIHdoZW4gY29udmVyc2F0aW9uIHN0YXJ0cykuXG4gICAqIFVzZWQgdG8gc2hvdyB3b3JrZmxvdy1kZWZpbmVkIG1ldGFkYXRhIGluIHRoZSBjb25maWcgcGFuZWwuXG4gICAqL1xuICBnZXRDaGF0SW5wdXRNZXRhZGF0YSgpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5jaGF0SW5wdXRNZXRhZGF0YSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgYSBzYXZlZCBjb252ZXJzYXRpb24gSUQgZnJvbSBsb2NhbFN0b3JhZ2VcbiAgICovXG4gIHByaXZhdGUgbG9hZFNhdmVkQ29udmVyc2F0aW9uKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBsZXQgc2F2ZWRDb252ZXJzYXRpb24gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmdldFN0b3JhZ2VLZXkoKSk7XG4gICAgICAvLyBCYWNrd2FyZC1jb21wYXQ6IGNoZWNrIG9sZCB1bnNjb3BlZCBrZXkgaWYgc2NvcGVkIG9uZSBtaXNzaW5nXG4gICAgICBpZiAoIXNhdmVkQ29udmVyc2F0aW9uKSB7XG4gICAgICAgIHNhdmVkQ29udmVyc2F0aW9uID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlS2V5QmFzZSk7XG4gICAgICB9XG4gICAgICBpZiAoc2F2ZWRDb252ZXJzYXRpb24pIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGNvbnZlcnNhdGlvbklkLFxuICAgICAgICAgIGNyZWF0ZVRpbWUsXG4gICAgICAgICAgaXNGaW5hbGl6ZWQsXG4gICAgICAgICAgcG9zc2libGVRdWVyaWVzLFxuICAgICAgICAgIHdlbGNvbWVEYXRhLFxuICAgICAgICAgIHRoaW5raW5nQ29uZmlnLFxuICAgICAgICAgIGFnZW50SWQsXG4gICAgICAgICAgZ3Vlc3RUb2tlbixcbiAgICAgICAgfSA9IEpTT04ucGFyc2Uoc2F2ZWRDb252ZXJzYXRpb24pO1xuICAgICAgICB0aGlzLmNvbnZlcnNhdGlvbklkID0gY29udmVyc2F0aW9uSWQ7XG4gICAgICAgIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSA9IGNyZWF0ZVRpbWU7XG4gICAgICAgIHRoaXMuaXNGaW5hbGl6ZWQgPSBpc0ZpbmFsaXplZCB8fCBmYWxzZTtcbiAgICAgICAgdGhpcy5ndWVzdFRva2VuID0gZ3Vlc3RUb2tlbiB8fCBudWxsO1xuICAgICAgICB0aGlzLnBvc3NpYmxlUXVlcmllcyA9IEFycmF5LmlzQXJyYXkocG9zc2libGVRdWVyaWVzKVxuICAgICAgICAgID8gcG9zc2libGVRdWVyaWVzXG4gICAgICAgICAgOiBbXTtcbiAgICAgICAgdGhpcy53ZWxjb21lRGF0YSA9IHdlbGNvbWVEYXRhIHx8IHt9O1xuICAgICAgICBpZiAoIXRoaXMud2VsY29tZURhdGEucG9zc2libGVRdWVyaWVzKSB7XG4gICAgICAgICAgdGhpcy53ZWxjb21lRGF0YS5wb3NzaWJsZVF1ZXJpZXMgPSB0aGlzLnBvc3NpYmxlUXVlcmllcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRoaW5raW5nQ29uZmlnID0ge1xuICAgICAgICAgIHBocmFzZXM6ICh0aGlua2luZ0NvbmZpZyAmJiB0aGlua2luZ0NvbmZpZy5waHJhc2VzKSB8fCBbXSxcbiAgICAgICAgICBkZWxheU1zOlxuICAgICAgICAgICAgdGhpbmtpbmdDb25maWcgJiYgdHlwZW9mIHRoaW5raW5nQ29uZmlnLmRlbGF5TXMgPT09IFwibnVtYmVyXCJcbiAgICAgICAgICAgICAgPyB0aGlua2luZ0NvbmZpZy5kZWxheU1zXG4gICAgICAgICAgICAgIDogMTAwMCxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5hZ2VudElkID0gYWdlbnRJZDtcbiAgICAgICAgaWYgKCF0aGlzLndlbGNvbWVEYXRhLmltYWdlVXJsICYmIHRoaXMuYWdlbnRJZCkge1xuICAgICAgICAgIHRoaXMuZmV0Y2hXZWxjb21lSW1hZ2UodGhpcy5hZ2VudElkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy53ZWxjb21lRGF0YUhhbmRsZXIpIHtcbiAgICAgICAgICB0aGlzLndlbGNvbWVEYXRhSGFuZGxlcih0aGlzLndlbGNvbWVEYXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSB0aGUgY3VycmVudCBjb252ZXJzYXRpb24gSUQgdG8gbG9jYWxTdG9yYWdlXG4gICAqL1xuICBwcml2YXRlIHNhdmVDb252ZXJzYXRpb24oKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLmNvbnZlcnNhdGlvbklkICYmIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSkge1xuICAgICAgICBjb25zdCBjb252ZXJzYXRpb25EYXRhID0ge1xuICAgICAgICAgIGNvbnZlcnNhdGlvbklkOiB0aGlzLmNvbnZlcnNhdGlvbklkLFxuICAgICAgICAgIGNyZWF0ZVRpbWU6IHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSxcbiAgICAgICAgICBpc0ZpbmFsaXplZDogdGhpcy5pc0ZpbmFsaXplZCxcbiAgICAgICAgICBwb3NzaWJsZVF1ZXJpZXM6IHRoaXMucG9zc2libGVRdWVyaWVzLFxuICAgICAgICAgIHdlbGNvbWVEYXRhOiB7XG4gICAgICAgICAgICAuLi50aGlzLndlbGNvbWVEYXRhLFxuICAgICAgICAgICAgaW1hZ2VVcmw6XG4gICAgICAgICAgICAgIHRoaXMud2VsY29tZU9iamVjdFVybCAmJlxuICAgICAgICAgICAgICB0aGlzLndlbGNvbWVEYXRhLmltYWdlVXJsICYmXG4gICAgICAgICAgICAgIHRoaXMud2VsY29tZURhdGEuaW1hZ2VVcmwuc3RhcnRzV2l0aChcImJsb2I6XCIpXG4gICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgOiB0aGlzLndlbGNvbWVEYXRhLmltYWdlVXJsIHx8IG51bGwsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlua2luZ0NvbmZpZzogdGhpcy50aGlua2luZ0NvbmZpZyxcbiAgICAgICAgICBhZ2VudElkOiB0aGlzLmFnZW50SWQsXG4gICAgICAgICAgZ3Vlc3RUb2tlbjogdGhpcy5ndWVzdFRva2VuLFxuICAgICAgICB9O1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmdldFN0b3JhZ2VLZXkoKSwgSlNPTi5zdHJpbmdpZnkoY29udmVyc2F0aW9uRGF0YSkpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gIH1cblxuICAvLyBDaGVjayBpZiBhbiBlcnJvciBpcyBhIHRva2VuIGV4cGlyYXRpb24gZXJyb3JcbiAgcHJpdmF0ZSBpc1Rva2VuRXhwaXJlZEVycm9yKGVycm9yOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgZXJyb3IucmVzcG9uc2UgJiZcbiAgICAgIGVycm9yLnJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxICYmXG4gICAgICBlcnJvci5yZXNwb25zZS5kYXRhICYmXG4gICAgICAoZXJyb3IucmVzcG9uc2UuZGF0YS5lcnJvciA9PT0gXCJUb2tlbiBoYXMgZXhwaXJlZC5cIiB8fFxuICAgICAgICBlcnJvci5yZXNwb25zZS5kYXRhLm1lc3NhZ2UgPT09IFwiVG9rZW4gaGFzIGV4cGlyZWQuXCIgfHxcbiAgICAgICAgKHR5cGVvZiBlcnJvci5yZXNwb25zZS5kYXRhID09PSBcInN0cmluZ1wiICYmIGVycm9yLnJlc3BvbnNlLmRhdGEuaW5jbHVkZXMoXCJUb2tlbiBoYXMgZXhwaXJlZFwiKSkpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBoYW5kbGVyIGZvciB0YWtlb3ZlciBldmVudHM6IGVtaXRzIGEgc3BlY2lhbCBtZXNzYWdlIGFuZCBpbnZva2VzIHRha2VvdmVySGFuZGxlci5cbiAgICogUnVucyBvbmx5IG9uY2UgcGVyIGNvbnZlcnNhdGlvbiAoaWRlbXBvdGVudCkuXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZVRha2VvdmVyKG5vdz86IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHQgPSBub3cgPz8gRGF0ZS5ub3coKSAvIDEwMDA7XG4gICAgaWYgKHRoaXMubWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgIGNvbnN0IHRha2VvdmVyTWVzc2FnZTogQ2hhdE1lc3NhZ2UgPSB7XG4gICAgICAgIGNyZWF0ZV90aW1lOiB0LFxuICAgICAgICBzdGFydF90aW1lOiB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUgPyB0IC0gdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lIDogMCxcbiAgICAgICAgZW5kX3RpbWU6IHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSA/IHQgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUgKyAwLjAxIDogMC4wMSxcbiAgICAgICAgc3BlYWtlcjogXCJzcGVjaWFsXCIsXG4gICAgICAgIHRleHQ6IFwiU3VwZXJ2aXNvciB0b29rIG92ZXJcIixcbiAgICAgICAgdHlwZTogXCJ0YWtlb3ZlclwiLFxuICAgICAgfTtcblxuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlcih0YWtlb3Zlck1lc3NhZ2UpO1xuICAgIH1cbiAgICBpZiAodGhpcy50YWtlb3ZlckhhbmRsZXIpIHtcbiAgICAgIHRoaXMudGFrZW92ZXJIYW5kbGVyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBjdXJyZW50IGNvbnZlcnNhdGlvbiBieSBjbGVhcmluZyB0aGUgSUQgYW5kIHdlYnNvY2tldFxuICAgKi9cbiAgcmVzZXRDaGF0Q29udmVyc2F0aW9uKCk6IHZvaWQge1xuICAgIC8vIENsb3NlIHRoZSBjdXJyZW50IHdlYnNvY2tldCBjb25uZWN0aW9uIGlmIGl0IGV4aXN0c1xuICAgIGlmICh0aGlzLndlYlNvY2tldCkge1xuICAgICAgdGhpcy53ZWJTb2NrZXQuY2xvc2UoKTtcbiAgICAgIHRoaXMud2ViU29ja2V0ID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBDbGVhciB0aGUgY29udmVyc2F0aW9uIElEXG4gICAgdGhpcy5jb252ZXJzYXRpb25JZCA9IG51bGw7XG4gICAgdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lID0gbnVsbDtcbiAgICB0aGlzLmd1ZXN0VG9rZW4gPSBudWxsO1xuICAgIHRoaXMuaXNGaW5hbGl6ZWQgPSBmYWxzZTtcblxuICAgIC8vIENsZWFyIHBvc3NpYmxlIHF1ZXJpZXMgYW5kIHdvcmtmbG93IG1ldGFkYXRhXG4gICAgdGhpcy5wb3NzaWJsZVF1ZXJpZXMgPSBbXTtcbiAgICB0aGlzLndlbGNvbWVEYXRhID0ge307XG4gICAgdGhpcy50aGlua2luZ0NvbmZpZyA9IHsgcGhyYXNlczogW10sIGRlbGF5TXM6IDEwMDAgfTtcbiAgICB0aGlzLmNoYXRJbnB1dE1ldGFkYXRhID0ge307XG4gICAgaWYgKHRoaXMud2VsY29tZU9iamVjdFVybCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh0aGlzLndlbGNvbWVPYmplY3RVcmwpO1xuICAgICAgfSBjYXRjaCB7fVxuICAgICAgdGhpcy53ZWxjb21lT2JqZWN0VXJsID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5hZ2VudElkID0gdW5kZWZpbmVkO1xuXG4gICAgLy8gUmVtb3ZlIGZyb20gbG9jYWwgc3RvcmFnZVxuICAgIHRyeSB7XG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLmdldFN0b3JhZ2VLZXkoKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIGlnbm9yZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGVyZSdzIGEgY3VycmVudCBjb252ZXJzYXRpb25cbiAgICovXG4gIGhhc0FjdGl2ZUNvbnZlcnNhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmNvbnZlcnNhdGlvbklkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCBjb252ZXJzYXRpb24gSURcbiAgICovXG4gIGdldENvbnZlcnNhdGlvbklkKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmNvbnZlcnNhdGlvbklkO1xuICB9XG5cbiAgZ2V0Q29udmVyc2F0aW9uQ3JlYXRlVGltZSgpOiBudW1iZXIgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lO1xuICB9XG5cbiAgaXNDb252ZXJzYXRpb25GaW5hbGl6ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNGaW5hbGl6ZWQ7XG4gIH1cblxuICBhc3luYyBzdGFydENvbnZlcnNhdGlvbihyZUNhcHRjaGFUb2tlbj86IHN0cmluZyB8IHVuZGVmaW5lZCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcXVlc3RCb2R5OiBhbnkgPSB7XG4gICAgICAgIG1lc3NhZ2VzOiBbXSxcbiAgICAgICAgcmVjb3JkZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgZGF0YV9zb3VyY2VfaWQ6IFwiMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXG4gICAgICB9O1xuXG4gICAgICBpZiAocmVDYXB0Y2hhVG9rZW4pIHtcbiAgICAgICAgcmVxdWVzdEJvZHkucmVjYXB0Y2hhX3Rva2VuID0gcmVDYXB0Y2hhVG9rZW47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm1ldGFkYXRhKSB7XG4gICAgICAgIHJlcXVlc3RCb2R5Lm1ldGFkYXRhID0gdGhpcy5tZXRhZGF0YTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5wb3N0PFN0YXJ0Q29udmVyc2F0aW9uUmVzcG9uc2U+KFxuICAgICAgICBgJHt0aGlzLmJhc2VVcmx9L2FwaS9jb252ZXJzYXRpb25zL2luLXByb2dyZXNzL3N0YXJ0YCxcbiAgICAgICAgcmVxdWVzdEJvZHksXG4gICAgICAgIHtcbiAgICAgICAgICBoZWFkZXJzOiB0aGlzLmdldEhlYWRlcnMoKSxcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgdGhpcy5jb252ZXJzYXRpb25JZCA9IHJlc3BvbnNlLmRhdGEuY29udmVyc2F0aW9uX2lkO1xuICAgICAgLy8gU3RvcmUgY29udmVyc2F0aW9uIGNyZWF0ZSB0aW1lICh1c2UgZnJvbSByZXNwb25zZSBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBjdXJyZW50IHRpbWUpXG4gICAgICB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUgPSByZXNwb25zZS5kYXRhLmNyZWF0ZV90aW1lXG4gICAgICAgID8gcmVzcG9uc2UuZGF0YS5jcmVhdGVfdGltZSAvIDEwMDBcbiAgICAgICAgOiBEYXRlLm5vdygpIC8gMTAwMDtcbiAgICAgIC8vIFN0b3JlIGd1ZXN0IHRva2VuIGlmIHByb3ZpZGVkXG4gICAgICB0aGlzLmd1ZXN0VG9rZW4gPSByZXNwb25zZS5kYXRhLmd1ZXN0X3Rva2VuIHx8IG51bGw7XG4gICAgICB0aGlzLmlzRmluYWxpemVkID0gZmFsc2U7XG5cbiAgICAgIC8vIFN0b3JlIHBvc3NpYmxlIHF1ZXJpZXMgaWYgYXZhaWxhYmxlXG4gICAgICBpZiAoXG4gICAgICAgIHJlc3BvbnNlLmRhdGEuYWdlbnRfcG9zc2libGVfcXVlcmllcyAmJlxuICAgICAgICByZXNwb25zZS5kYXRhLmFnZW50X3Bvc3NpYmxlX3F1ZXJpZXMubGVuZ3RoID4gMFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMucG9zc2libGVRdWVyaWVzID0gcmVzcG9uc2UuZGF0YS5hZ2VudF9wb3NzaWJsZV9xdWVyaWVzLmZpbHRlcihcbiAgICAgICAgICAocXVlcnkpID0+IHR5cGVvZiBxdWVyeSA9PT0gXCJzdHJpbmdcIiAmJiBxdWVyeS50cmltKCkubGVuZ3RoID4gMFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhbnlEYXRhOiBhbnkgPSByZXNwb25zZS5kYXRhIGFzIGFueTtcbiAgICAgIGNvbnN0IGFnZW50SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGFueURhdGEuYWdlbnRfaWQ7XG4gICAgICB0aGlzLmFnZW50SWQgPSBhZ2VudElkO1xuICAgICAgY29uc3QgcmF3TWV0YSA9IGFueURhdGEuYWdlbnRfY2hhdF9pbnB1dF9tZXRhZGF0YTtcbiAgICAgIGlmIChcbiAgICAgICAgcmF3TWV0YSAhPSBudWxsICYmXG4gICAgICAgIHR5cGVvZiByYXdNZXRhID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAhQXJyYXkuaXNBcnJheShyYXdNZXRhKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY2hhdElucHV0TWV0YWRhdGEgPSB7IC4uLnJhd01ldGEgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2hhdElucHV0TWV0YWRhdGEgPSB7fTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGVyc2lzdEFuZEVtaXRBZ2VudE1ldGFkYXRhKHRoaXMuY2hhdElucHV0TWV0YWRhdGEpO1xuICAgICAgY29uc3Qgd2VsY29tZVRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBhbnlEYXRhLmFnZW50X3dlbGNvbWVfdGl0bGU7XG4gICAgICBjb25zdCB3ZWxjb21lSW1hZ2VVcmw6IHN0cmluZyB8IHVuZGVmaW5lZCA9XG4gICAgICAgIGFueURhdGEuYWdlbnRfd2VsY29tZV9pbWFnZV91cmw7XG4gICAgICBjb25zdCB0aGlua2luZ1BocmFzZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkID1cbiAgICAgICAgYW55RGF0YS5hZ2VudF90aGlua2luZ19waHJhc2VzO1xuICAgICAgY29uc3QgdGhpbmtpbmdEZWxheVNlYzogbnVtYmVyIHwgdW5kZWZpbmVkID1cbiAgICAgICAgYW55RGF0YS5hZ2VudF90aGlua2luZ19waHJhc2VfZGVsYXk7XG5cbiAgICAgIHRoaXMud2VsY29tZURhdGEgPSB7XG4gICAgICAgIHRpdGxlOiB3ZWxjb21lVGl0bGUgfHwgbnVsbCxcbiAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgaW1hZ2VVcmw6IHdlbGNvbWVJbWFnZVVybCB8fCBudWxsLFxuICAgICAgICBwb3NzaWJsZVF1ZXJpZXM6IHRoaXMucG9zc2libGVRdWVyaWVzLFxuICAgICAgfTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpbmtpbmdQaHJhc2VzKSAmJiB0aGlua2luZ1BocmFzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnRoaW5raW5nQ29uZmlnLnBocmFzZXMgPSB0aGlua2luZ1BocmFzZXM7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHRoaW5raW5nRGVsYXlTZWMgPT09IFwibnVtYmVyXCIgJiYgdGhpbmtpbmdEZWxheVNlYyA+PSAwKSB7XG4gICAgICAgIHRoaXMudGhpbmtpbmdDb25maWcuZGVsYXlNcyA9IE1hdGgubWF4KFxuICAgICAgICAgIDI1MCxcbiAgICAgICAgICBNYXRoLnJvdW5kKHRoaW5raW5nRGVsYXlTZWMgKiAxMDAwKVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMud2VsY29tZURhdGEuaW1hZ2VVcmwgJiYgYWdlbnRJZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmZldGNoV2VsY29tZUltYWdlKGFnZW50SWQpO1xuICAgICAgfVxuXG4gICAgICAvLyBQcm9jZXNzIGFnZW50IHdlbGNvbWUgbWVzc2FnZSBpZiBhdmFpbGFibGVcbiAgICAgIGlmIChyZXNwb25zZS5kYXRhLmFnZW50X3dlbGNvbWVfbWVzc2FnZSAmJiB0aGlzLm1lc3NhZ2VIYW5kbGVyKSB7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCkgLyAxMDAwO1xuICAgICAgICBjb25zdCB3ZWxjb21lTWVzc2FnZTogQ2hhdE1lc3NhZ2UgPSB7XG4gICAgICAgICAgY3JlYXRlX3RpbWU6IG5vdyxcbiAgICAgICAgICBzdGFydF90aW1lOiBub3cgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUsIC8vIFJlbGF0aXZlIHRvIGNvbnZlcnNhdGlvbiBzdGFydFxuICAgICAgICAgIGVuZF90aW1lOiBub3cgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUgKyAwLjAxLCAvLyBSZWxhdGl2ZSB0byBjb252ZXJzYXRpb24gc3RhcnRcbiAgICAgICAgICBzcGVha2VyOiBcImFnZW50XCIsXG4gICAgICAgICAgdGV4dDogcmVzcG9uc2UuZGF0YS5hZ2VudF93ZWxjb21lX21lc3NhZ2UsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMud2VsY29tZURhdGEubWVzc2FnZSA9IHJlc3BvbnNlLmRhdGEuYWdlbnRfd2VsY29tZV9tZXNzYWdlO1xuICAgICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyKHdlbGNvbWVNZXNzYWdlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMud2VsY29tZURhdGFIYW5kbGVyKSB7XG4gICAgICAgIHRoaXMud2VsY29tZURhdGFIYW5kbGVyKHRoaXMud2VsY29tZURhdGEpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNhdmVDb252ZXJzYXRpb24oKTtcbiAgICAgIGlmICh0aGlzLnVzZVdzKSB7XG4gICAgICAgIHRoaXMuY29ubmVjdFdlYlNvY2tldCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuY29udmVyc2F0aW9uX2lkO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmICh0aGlzLmlzVG9rZW5FeHBpcmVkRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgIHRoaXMucmVzZXRDaGF0Q29udmVyc2F0aW9uKCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzZW5kTWVzc2FnZShcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50W10sXG4gICAgZXh0cmFNZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgcmVDYXB0Y2hhVG9rZW4/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNvbnZlcnNhdGlvbklkIHx8ICF0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbnZlcnNhdGlvbiBub3Qgc3RhcnRlZFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpIC8gMTAwMDtcbiAgICBjb25zdCBjaGF0TWVzc2FnZTogQ2hhdE1lc3NhZ2UgPSB7XG4gICAgICBjcmVhdGVfdGltZTogbm93LFxuICAgICAgc3RhcnRfdGltZTogbm93IC0gdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lLCAvLyBSZWxhdGl2ZSB0byBjb252ZXJzYXRpb24gc3RhcnRcbiAgICAgIGVuZF90aW1lOiBub3cgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUgKyAwLjAxLCAvLyBSZWxhdGl2ZSB0byBjb252ZXJzYXRpb24gc3RhcnRcbiAgICAgIHNwZWFrZXI6IFwiY3VzdG9tZXJcIixcbiAgICAgIHRleHQ6IG1lc3NhZ2UsXG4gICAgICBhdHRhY2htZW50czogYXR0YWNobWVudHMsXG4gICAgfTtcblxuICAgIGlmICh0aGlzLm1lc3NhZ2VIYW5kbGVyKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyKGNoYXRNZXNzYWdlKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVxdWVzdEJvZHk6IGFueSA9IHtcbiAgICAgICAgbWVzc2FnZXM6IFtjaGF0TWVzc2FnZV0sXG4gICAgICAgIHJlY29yZGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB9O1xuXG4gICAgICBpZiAocmVDYXB0Y2hhVG9rZW4pIHtcbiAgICAgICAgcmVxdWVzdEJvZHkucmVjYXB0Y2hhX3Rva2VuID0gcmVDYXB0Y2hhVG9rZW47XG4gICAgICB9XG5cbiAgICAgIC8vIEluY2x1ZGUgbWV0YWRhdGFcbiAgICAgIGNvbnN0IG1lcmdlZE1ldGFkYXRhID0ge1xuICAgICAgICAuLi4odGhpcy5tZXRhZGF0YSB8fCB7fSksXG4gICAgICAgIC4uLihleHRyYU1ldGFkYXRhIHx8IHt9KSxcbiAgICAgIH07XG4gICAgICBpZiAoT2JqZWN0LmtleXMobWVyZ2VkTWV0YWRhdGEpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVxdWVzdEJvZHkubWV0YWRhdGEgPSBtZXJnZWRNZXRhZGF0YTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5wYXRjaChcbiAgICAgICAgYCR7dGhpcy5iYXNlVXJsfS9hcGkvY29udmVyc2F0aW9ucy9pbi1wcm9ncmVzcy91cGRhdGUvJHt0aGlzLmNvbnZlcnNhdGlvbklkfWAsXG4gICAgICAgIHJlcXVlc3RCb2R5LFxuICAgICAgICB7XG4gICAgICAgICAgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKCksXG4gICAgICAgIH1cbiAgICAgICkuY2F0Y2goZSA9PiB7XG4gICAgICAgIGNvbnN0IGVyciA9IGU/LnJlc3BvbnNlPy5kYXRhO1xuICAgICAgICAvLyBIYW5kbGUgZXJyb3Igd2hlbiBjb252ZXJzYXRpb24gaXMgZmluYWxpemVkXG4gICAgICAgIGlmIChlcnI/LmVycm9yX2tleSA9PT0gJ0NPTlZFUlNBVElPTl9GSU5BTElaRUQnIHx8IGVycj8uZXJyb3Jfa2V5ID09PSAnQUdFTlRfTk9UX0ZPVU5EJykge1xuICAgICAgICAgIHRoaXMuaGFuZGxlQ29udmVyc2F0aW9uRmluYWxpemVkKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIElmIG5vdCB1c2luZyBXZWJTb2NrZXQsIHRyeSB0byByZXRyaWV2ZSB0aGUgcmVzcG9uc2UgbWVzc2FnZSBmcm9tIHRoZSB1cGRhdGUgY29udmVyc2F0aW9uIHJlc3BvbnNlXG4gICAgICBpZiAoIXRoaXMudXNlV3MgJiYgdGhpcy5tZXNzYWdlSGFuZGxlciAmJiAoIXRoaXMudXNlV3MgfHwgIXRoaXMudXNlUG9sbCkpIHsgLy8gdXNlUG9sbCBpcyB0cnVlIHdoZW4gdXNpbmcgaGVhcnRiZWF0IHBvbGxpbmdcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSByZXNwb25zZT8uZGF0YSBhcyBhbnkgfHwge307XG5cbiAgICAgICAgICBpZiAocmVzcG9uc2VEYXRhLm1lc3NhZ2VzICYmIEFycmF5LmlzQXJyYXkocmVzcG9uc2VEYXRhLm1lc3NhZ2VzKSkge1xuXG4gICAgICAgICAgICAvLyBMb29rIGZvciB0aGUgbGF0ZXN0IGFnZW50IG1lc3NhZ2UgaW4gdGhlIHJlc3BvbnNlXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gcmVzcG9uc2VEYXRhLm1lc3NhZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2VEYXRhID0gcmVzcG9uc2VEYXRhLm1lc3NhZ2VzW2ldO1xuXG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBtZXNzYWdlRGF0YS5zcGVha2VyID09PSBcImFnZW50XCIgJiZcbiAgICAgICAgICAgICAgICBtZXNzYWdlRGF0YS50ZXh0ICYmXG4gICAgICAgICAgICAgICAgbWVzc2FnZURhdGEuY3JlYXRlX3RpbWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIG1lc3NhZ2VEYXRhLnN0YXJ0X3RpbWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIG1lc3NhZ2VEYXRhLmVuZF90aW1lICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWdlbnRNZXNzYWdlOiBDaGF0TWVzc2FnZSA9IHtcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZV90aW1lOiBtZXNzYWdlRGF0YS5jcmVhdGVfdGltZSxcbiAgICAgICAgICAgICAgICAgIHN0YXJ0X3RpbWU6IHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZVxuICAgICAgICAgICAgICAgICAgICA/IG1lc3NhZ2VEYXRhLnN0YXJ0X3RpbWUgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWVcbiAgICAgICAgICAgICAgICAgICAgOiBtZXNzYWdlRGF0YS5zdGFydF90aW1lLFxuICAgICAgICAgICAgICAgICAgZW5kX3RpbWU6IHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZVxuICAgICAgICAgICAgICAgICAgICA/IG1lc3NhZ2VEYXRhLmVuZF90aW1lIC0gdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lXG4gICAgICAgICAgICAgICAgICAgIDogbWVzc2FnZURhdGEuZW5kX3RpbWUsXG4gICAgICAgICAgICAgICAgICBzcGVha2VyOiBcImFnZW50XCIsXG4gICAgICAgICAgICAgICAgICB0ZXh0OiBtZXNzYWdlRGF0YS50ZXh0LFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZV9pZDogbWVzc2FnZURhdGEubWVzc2FnZV9pZCB8fCBtZXNzYWdlRGF0YS5pZCxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLy8gT25seSBwcm9jZXNzIGlmIHRoaXMgaXMgYSBuZXcgbWVzc2FnZSB3ZSBoYXZlbid0IHNlZW4gYmVmb3JlXG4gICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3QgZWFzaWx5IGNoZWNrIGhlcmUsIHNvIHdlJ2xsIGxldCB0aGUgaGFuZGxlciBtYW5hZ2UgZHVwbGljYXRlc1xuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIoYWdlbnRNZXNzYWdlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAocGFyc2VFcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gcGFyc2UgdXBkYXRlIGNvbnZlcnNhdGlvbiByZXNwb25zZTpcIiwgcGFyc2VFcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgdG9rZW4gZXhwaXJhdGlvbiBlcnJvclxuICAgICAgaWYgKHRoaXMuaXNUb2tlbkV4cGlyZWRFcnJvcihlcnJvcikpIHtcbiAgICAgICAgdGhpcy5yZXNldENoYXRDb252ZXJzYXRpb24oKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgdGhlIGFnZW50IGluYWN0aXZlIGVycm9yXG4gICAgICBpZiAoXG4gICAgICAgIGVycm9yLnJlc3BvbnNlICYmXG4gICAgICAgIGVycm9yLnJlc3BvbnNlLmRhdGEgJiZcbiAgICAgICAgZXJyb3IucmVzcG9uc2UuZGF0YS5lcnJvcl9rZXkgPT09IFwiQUdFTlRfSU5BQ1RJVkVcIlxuICAgICAgKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIGN1c3RvbSBtZXNzYWdlIGZvciB0aGUgYWdlbnQgaW5hY3RpdmUgZXJyb3JcbiAgICAgICAgaWYgKHRoaXMubWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2U6IENoYXRNZXNzYWdlID0ge1xuICAgICAgICAgICAgY3JlYXRlX3RpbWU6IG5vdyxcbiAgICAgICAgICAgIHN0YXJ0X3RpbWU6IG5vdyAtIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSxcbiAgICAgICAgICAgIGVuZF90aW1lOiBub3cgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUgKyAwLjAxLFxuICAgICAgICAgICAgc3BlYWtlcjogXCJzcGVjaWFsXCIsXG4gICAgICAgICAgICB0ZXh0OiB0aGlzLnNlcnZlclVuYXZhaWxhYmxlTWVzc2FnZSA/PyBcIlRoZSBhZ2VudCBpcyBjdXJyZW50bHkgb2ZmbGluZSwgcGxlYXNlIGNoZWNrIGJhY2sgbGF0ZXIuIFRoYW5rIHlvdSFcIixcbiAgICAgICAgICAgIC4uLih0aGlzLnNlcnZlclVuYXZhaWxhYmxlQ29udGFjdFVybCAmJiB7XG4gICAgICAgICAgICAgIGxpbmtVcmw6IHRoaXMuc2VydmVyVW5hdmFpbGFibGVDb250YWN0VXJsLFxuICAgICAgICAgICAgICBsaW5rTGFiZWw6IHRoaXMuc2VydmVyVW5hdmFpbGFibGVDb250YWN0TGFiZWwgPz8gXCJDb250YWN0IHN1cHBvcnRcIixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlcihlcnJvck1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIC8vIERvbid0IHRocm93IHRoZSBlcnJvciBzaW5jZSB3ZSBoYW5kbGVkIGl0IHdpdGggYSBtZXNzYWdlXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdXBsb2FkRmlsZShjaGF0SWQ6IHN0cmluZywgZmlsZTogRmlsZSk6IFByb21pc2U8RmlsZVVwbG9hZFJlc3BvbnNlIHwgbnVsbD4ge1xuICAgIGlmICghdGhpcy5jb252ZXJzYXRpb25JZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29udmVyc2F0aW9uIG5vdCBzdGFydGVkXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgZm9ybURhdGEuYXBwZW5kKFwiY2hhdF9pZFwiLCBjaGF0SWQpO1xuICAgIGZvcm1EYXRhLmFwcGVuZChcImZpbGVcIiwgZmlsZSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5wb3N0PEZpbGVVcGxvYWRSZXNwb25zZT4oXG4gICAgICAgIGAke3RoaXMuYmFzZVVybH0vYXBpL2dlbmFnZW50L2tub3dsZWRnZS91cGxvYWQtY2hhdC1maWxlYCxcbiAgICAgICAgZm9ybURhdGEsXG4gICAgICAgIHtcbiAgICAgICAgICBoZWFkZXJzOiB0aGlzLmdldEhlYWRlcnMoXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIpLFxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YSBhcyBGaWxlVXBsb2FkUmVzcG9uc2U7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgaWYgKHRoaXMuaXNUb2tlbkV4cGlyZWRFcnJvcihlcnJvcikpIHtcbiAgICAgICAgdGhpcy5yZXNldENoYXRDb252ZXJzYXRpb24oKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGNvbm5lY3RXZWJTb2NrZXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnVzZVdzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMud2ViU29ja2V0KSB7XG4gICAgICB0aGlzLndlYlNvY2tldC5jbG9zZSgpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jb252ZXJzYXRpb25JZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29udmVyc2F0aW9uIElEIGlzIHJlcXVpcmVkIGZvciBXZWJTb2NrZXQgY29ubmVjdGlvblwiKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25uZWN0aW9uU3RhdGVIYW5kbGVyKSB0aGlzLmNvbm5lY3Rpb25TdGF0ZUhhbmRsZXIoXCJjb25uZWN0aW5nXCIpO1xuXG4gICAgLy8gQnVpbGQgV2ViU29ja2V0IFVSTCB3aXRoIHByb3BlciBhdXRoZW50aWNhdGlvblxuICAgIGNvbnN0IHdzQmFzZSA9IHRoaXMuYmFzZVVybC5yZXBsYWNlKFwiaHR0cFwiLCBcIndzXCIpO1xuICAgIGNvbnN0IHRvcGljcyA9IFtcIm1lc3NhZ2VcIiwgXCJ0YWtlb3ZlclwiLCBcImZpbmFsaXplXCJdO1xuICAgIGNvbnN0IHRvcGljc1F1ZXJ5ID0gdG9waWNzLm1hcCgodCkgPT4gYHRvcGljcz0ke3R9YCkuam9pbihcIiZcIik7XG5cbiAgICAvLyBVc2UgZ3Vlc3RfdG9rZW4gaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvIGFwaV9rZXlcbiAgICBjb25zdCBhdXRoUGFyYW0gPSB0aGlzLmd1ZXN0VG9rZW5cbiAgICAgID8gYGFjY2Vzc190b2tlbj0ke2VuY29kZVVSSUNvbXBvbmVudCh0aGlzLmd1ZXN0VG9rZW4pfWBcbiAgICAgIDogYGFwaV9rZXk9JHtlbmNvZGVVUklDb21wb25lbnQodGhpcy5hcGlLZXkpfWA7XG5cbiAgICBsZXQgd3NVcmwgPSBgJHt3c0Jhc2V9L2FwaS9jb252ZXJzYXRpb25zL3dzLyR7dGhpcy5jb252ZXJzYXRpb25JZH0/JHthdXRoUGFyYW19Jmxhbmc9ZW4mJHt0b3BpY3NRdWVyeX1gO1xuXG4gICAgLy8gQWRkIHRlbmFudCBhcyBxdWVyeSBwYXJhbWV0ZXIgaWYgcHJvdmlkZWRcbiAgICBpZiAodGhpcy50ZW5hbnQpIHtcbiAgICAgIHdzVXJsICs9IGAmeC10ZW5hbnQtaWQ9JHtlbmNvZGVVUklDb21wb25lbnQodGhpcy50ZW5hbnQpfWA7XG4gICAgfVxuXG4gICAgLy8gVXNlIG5hdGl2ZSBicm93c2VyIFdlYlNvY2tldCBmYWN0b3J5XG4gICAgdGhpcy53ZWJTb2NrZXQgPSBjcmVhdGVXZWJTb2NrZXQod3NVcmwpO1xuXG5cbiAgICB0aGlzLndlYlNvY2tldC5vbm9wZW4gPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5jb25uZWN0aW9uU3RhdGVIYW5kbGVyKSB0aGlzLmNvbm5lY3Rpb25TdGF0ZUhhbmRsZXIoXCJjb25uZWN0ZWRcIik7XG4gICAgfTtcblxuICAgIHRoaXMud2ViU29ja2V0Lm9ubWVzc2FnZSA9IChldmVudDogTWVzc2FnZUV2ZW50KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShldmVudC5kYXRhIGFzIHN0cmluZyk7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gXCJtZXNzYWdlXCIgJiYgdGhpcy5tZXNzYWdlSGFuZGxlcikge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEucGF5bG9hZCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2VzID0gZGF0YS5wYXlsb2FkIGFzIENoYXRNZXNzYWdlW107XG4gICAgICAgICAgICAvLyBBZGp1c3QgdGltZXN0YW1wcyB0byBiZSByZWxhdGl2ZSB0byBjb252ZXJzYXRpb24gc3RhcnRcbiAgICAgICAgICAgIC8vIEFsc28gbm9ybWFsaXplIG1lc3NhZ2VfaWQgZmllbGQgKGJhY2tlbmQgbWlnaHQgc2VuZCAnaWQnIGluc3RlYWQgb2YgJ21lc3NhZ2VfaWQnKVxuICAgICAgICAgICAgY29uc3QgYWRqdXN0ZWRNZXNzYWdlcyA9IG1lc3NhZ2VzXG4gICAgICAgICAgICAgIC5tYXAoKG1zZykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkanVzdGVkID0gdGhpcy5hZGp1c3RNZXNzYWdlVGltZXN0YW1wcyhtc2cpO1xuICAgICAgICAgICAgICAgIC8vIE5vcm1hbGl6ZTogaWYgYmFja2VuZCBzZW5kcyAnaWQnLCB1c2UgaXQgYXMgJ21lc3NhZ2VfaWQnXG4gICAgICAgICAgICAgICAgaWYgKCFhZGp1c3RlZC5tZXNzYWdlX2lkICYmIChtc2cgYXMgYW55KS5pZCkge1xuICAgICAgICAgICAgICAgICAgYWRqdXN0ZWQubWVzc2FnZV9pZCA9IChtc2cgYXMgYW55KS5pZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkanVzdGVkO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuZmlsdGVyKChtc2cpID0+IG1zZy5zcGVha2VyICE9PSBcImN1c3RvbWVyXCIpO1xuICAgICAgICAgICAgYWRqdXN0ZWRNZXNzYWdlcy5mb3JFYWNoKHRoaXMubWVzc2FnZUhhbmRsZXIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBhZGp1c3RlZE1lc3NhZ2UgPSB0aGlzLmFkanVzdE1lc3NhZ2VUaW1lc3RhbXBzKFxuICAgICAgICAgICAgICBkYXRhLnBheWxvYWQgYXMgQ2hhdE1lc3NhZ2VcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICAvLyBOb3JtYWxpemU6IGlmIGJhY2tlbmQgc2VuZHMgJ2lkJywgdXNlIGl0IGFzICdtZXNzYWdlX2lkJ1xuICAgICAgICAgICAgaWYgKCFhZGp1c3RlZE1lc3NhZ2UubWVzc2FnZV9pZCAmJiAoZGF0YS5wYXlsb2FkIGFzIGFueSkuaWQpIHtcbiAgICAgICAgICAgICAgYWRqdXN0ZWRNZXNzYWdlLm1lc3NhZ2VfaWQgPSAoZGF0YS5wYXlsb2FkIGFzIGFueSkuaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWRqdXN0ZWRNZXNzYWdlLnNwZWFrZXIgIT09IFwiY3VzdG9tZXJcIikge1xuICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyKGFkanVzdGVkTWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gXCJ0YWtlb3ZlclwiKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVUYWtlb3ZlcigpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gXCJmaW5hbGl6ZVwiKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVDb252ZXJzYXRpb25GaW5hbGl6ZWQoKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gaWdub3JlXG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMud2ViU29ja2V0Lm9uZXJyb3IgPSAoZXJyb3I6IEV2ZW50KSA9PiB7XG4gICAgICBpZiAodGhpcy5jb25uZWN0aW9uU3RhdGVIYW5kbGVyKVxuICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0ZUhhbmRsZXIoXCJkaXNjb25uZWN0ZWRcIik7XG5cbiAgICAgIC8vIExvZyBkaWFnbm9zdGljXG4gICAgICBjb25zdCBkaWFnbm9zdGljID0gY3JlYXRlV2ViU29ja2V0RGlhZ25vc3RpYyhlcnJvciwgd3NVcmwpO1xuICAgICAgY29uc29sZS5lcnJvcihgW0dlbkFzc2lzdCBDaGF0XSAke2RpYWdub3N0aWN9YCk7XG4gICAgfTtcblxuICAgIHRoaXMud2ViU29ja2V0Lm9uY2xvc2UgPSAoZXZlbnQ6IENsb3NlRXZlbnQpID0+IHtcbiAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb25TdGF0ZUhhbmRsZXIpXG4gICAgICAgIHRoaXMuY29ubmVjdGlvblN0YXRlSGFuZGxlcihcImRpc2Nvbm5lY3RlZFwiKTtcblxuICAgICAgLy8gTG9nIGRpYWdub3N0aWNcbiAgICAgIGlmICghZXZlbnQud2FzQ2xlYW4pIHtcbiAgICAgICAgY29uc3QgZGlhZ25vc3RpYyA9IGNyZWF0ZVdlYlNvY2tldERpYWdub3N0aWMoZXZlbnQsIHdzVXJsKTtcbiAgICAgICAgY29uc29sZS53YXJuKGBbR2VuQXNzaXN0IENoYXRdICR7ZGlhZ25vc3RpY31gKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZGlzY29ubmVjdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy53ZWJTb2NrZXQpIHtcbiAgICAgIHRoaXMud2ViU29ja2V0LmNsb3NlKCk7XG4gICAgICB0aGlzLndlYlNvY2tldCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmZXRjaFdlbGNvbWVJbWFnZShhZ2VudElkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgaW1hZ2VSZXNwb25zZSA9IGF3YWl0IGF4aW9zLmdldChcbiAgICAgICAgYCR7dGhpcy5iYXNlVXJsfS9hcGkvZ2VuYWdlbnQvYWdlbnRzL2NvbmZpZ3MvJHthZ2VudElkfS93ZWxjb21lLWltYWdlYCxcbiAgICAgICAge1xuICAgICAgICAgIGhlYWRlcnM6IHRoaXMuZ2V0SGVhZGVycygpLFxuICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICBjb25zdCBibG9iVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChpbWFnZVJlc3BvbnNlLmRhdGEpO1xuICAgICAgdGhpcy53ZWxjb21lT2JqZWN0VXJsID0gYmxvYlVybDtcbiAgICAgIHRoaXMud2VsY29tZURhdGEuaW1hZ2VVcmwgPSBibG9iVXJsO1xuICAgICAgaWYgKHRoaXMud2VsY29tZURhdGFIYW5kbGVyKSB7XG4gICAgICAgIHRoaXMud2VsY29tZURhdGFIYW5kbGVyKHRoaXMud2VsY29tZURhdGEpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICBpZiAodGhpcy5pc1Rva2VuRXhwaXJlZEVycm9yKGVycikpIHtcbiAgICAgICAgdGhpcy5yZXNldENoYXRDb252ZXJzYXRpb24oKTtcbiAgICAgIH1cbiAgICAgIC8vIGlnbm9yZVxuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCBmZWVkYmFjayB0byBhIHNwZWNpZmljIGFnZW50IG1lc3NhZ2UgaW4gdGhlIGNvbnZlcnNhdGlvblxuICBhc3luYyBhZGRGZWVkYmFjayhcbiAgICBtZXNzYWdlSWQ6IHN0cmluZyxcbiAgICBmZWVkYmFjazogXCJnb29kXCIgfCBcImJhZFwiLFxuICAgIGZlZWRiYWNrX21lc3NhZ2U/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFtZXNzYWdlSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk1lc3NhZ2UgSUQgaXMgcmVxdWlyZWQgZm9yIGZlZWRiYWNrXCIpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBVc2UgbWVzc2FnZSBJRCBpbiB0aGUgVVJMIHBhdGgsIG5vdCBjb252ZXJzYXRpb24gSURcbiAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuYmFzZVVybH0vYXBpL2NvbnZlcnNhdGlvbnMvbWVzc2FnZS9hZGQtZmVlZGJhY2svJHttZXNzYWdlSWR9YDtcbiAgICAgIC8vIEJvZHkgc2hvdWxkIG9ubHkgY29udGFpbiBmZWVkYmFjayBhbmQgZmVlZGJhY2tfbWVzc2FnZSAobm8gbWVzc2FnZV9pZClcbiAgICAgIGNvbnN0IHBheWxvYWQ6IHtcbiAgICAgICAgZmVlZGJhY2s6IFwiZ29vZFwiIHwgXCJiYWRcIjtcbiAgICAgICAgZmVlZGJhY2tfbWVzc2FnZT86IHN0cmluZztcbiAgICAgIH0gPSB7XG4gICAgICAgIGZlZWRiYWNrLFxuICAgICAgfTtcblxuICAgICAgaWYgKGZlZWRiYWNrX21lc3NhZ2UpIHtcbiAgICAgICAgcGF5bG9hZC5mZWVkYmFja19tZXNzYWdlID0gZmVlZGJhY2tfbWVzc2FnZTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgYXhpb3MucGF0Y2godXJsLCBwYXlsb2FkLCB7XG4gICAgICAgIGhlYWRlcnM6IHRoaXMuZ2V0SGVhZGVycygpLFxuICAgICAgfSk7XG5cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBpZiAodGhpcy5pc1Rva2VuRXhwaXJlZEVycm9yKGVycm9yKSkge1xuICAgICAgICB0aGlzLnJlc2V0Q2hhdENvbnZlcnNhdGlvbigpO1xuICAgICAgfVxuICAgICAgY29uc29sZS5lcnJvcignRmVlZGJhY2sgQVBJIGNhbGwgZmFpbGVkOicsIHtcbiAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgcmVzcG9uc2U6IGVycm9yLnJlc3BvbnNlPy5kYXRhLFxuICAgICAgICBzdGF0dXM6IGVycm9yLnJlc3BvbnNlPy5zdGF0dXMsXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhlbHBlciBtZXRob2QgdG8gYWRqdXN0IG1lc3NhZ2UgdGltZXN0YW1wcyByZWxhdGl2ZSB0byBjb252ZXJzYXRpb24gc3RhcnRcbiAgcHJpdmF0ZSBhZGp1c3RNZXNzYWdlVGltZXN0YW1wcyhtZXNzYWdlOiBDaGF0TWVzc2FnZSk6IENoYXRNZXNzYWdlIHtcbiAgICBpZiAoIXRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSkge1xuICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm1lc3NhZ2UsXG4gICAgICBzdGFydF90aW1lOiBtZXNzYWdlLnN0YXJ0X3RpbWUgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUsXG4gICAgICBlbmRfdGltZTogbWVzc2FnZS5lbmRfdGltZSAtIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqKioqKioqKioqKiBIZWFydGJlYXQgcG9sbGluZyAqKioqKioqKioqKiovXG4gIC8qKlxuICAgKiBQb2xsIGluLXByb2dyZXNzIGNvbnZlcnNhdGlvbiAoaGVhcnRiZWF0IHdoZW4gV2ViU29ja2V0IGlzIGRpc2FibGVkKS5cbiAgICogUmV0dXJucyBzdGF0dXMgYW5kIG1lc3NhZ2VzIG5vcm1hbGl6ZWQgdG8gQ2hhdE1lc3NhZ2VbXS5cbiAgICovXG4gIGFzeW5jIHBvbGxJblByb2dyZXNzQ29udmVyc2F0aW9uKCk6IFByb21pc2U8e1xuICAgIHN0YXR1czogc3RyaW5nO1xuICAgIHBvbGxNZXNzYWdlczogSW5Qcm9ncmVzc1BvbGxNZXNzYWdlW107XG4gIH0+IHtcbiAgICBpZiAoIXRoaXMuY29udmVyc2F0aW9uSWQgfHwgIXRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29udmVyc2F0aW9uIG5vdCBzdGFydGVkXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0PEluUHJvZ3Jlc3NQb2xsUmVzcG9uc2U+KFxuICAgICAgYCR7dGhpcy5iYXNlVXJsfS9hcGkvY29udmVyc2F0aW9ucy9pbi1wcm9ncmVzcy9wb2xsLyR7dGhpcy5jb252ZXJzYXRpb25JZH1gLFxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEhlYWRlcnMoKSB9XG4gICAgKTtcblxuICAgIGNvbnN0IHBvbGxNZXNzYWdlcyA9IChyZXNwb25zZS5kYXRhLm1lc3NhZ2VzIHx8IFtdKS5tYXAoKG0pID0+XG4gICAgICB0aGlzLm5vcm1hbGl6ZVBvbGxNZXNzYWdlVG9DaGF0TWVzc2FnZShtKVxuICAgICk7XG5cbiAgICByZXR1cm4geyBzdGF0dXM6IHJlc3BvbnNlLmRhdGEuc3RhdHVzLCBwb2xsTWVzc2FnZXMgfTtcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplUG9sbE1lc3NhZ2VUb0NoYXRNZXNzYWdlKG06IEluUHJvZ3Jlc3NQb2xsTWVzc2FnZSk6IEluUHJvZ3Jlc3NQb2xsTWVzc2FnZSB7XG4gICAgbGV0IGNyZWF0ZVRpbWUgPVxuICAgICAgdHlwZW9mIG0uY3JlYXRlX3RpbWUgPT09IFwibnVtYmVyXCJcbiAgICAgICAgPyBtLmNyZWF0ZV90aW1lXG4gICAgICAgIDogbS5jcmVhdGVfdGltZVxuICAgICAgICAgID8gK25ldyBEYXRlKG0uY3JlYXRlX3RpbWUpXG4gICAgICAgICAgOiBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKTtcblxuICAgIC8vIE5vcm1hbGl6ZSB0byBzZWNvbmRzOiBJU08gc3RyaW5nIGdpdmVzIG1zICg+MWUxMik7IGlmIHNvIGNvbnZlcnQuIE90aGVyd2lzZSBhc3N1bWUgYWxyZWFkeSBzZWNvbmRzLlxuICAgIGlmIChjcmVhdGVUaW1lID49IDFlMTIpIHtcbiAgICAgIGNyZWF0ZVRpbWUgPSBNYXRoLnJvdW5kKGNyZWF0ZVRpbWUgLyAxMDAwKTtcbiAgICB9XG4gICAgY29uc3Qgc3RhcnRUaW1lID1cbiAgICAgIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSAhPSBudWxsXG4gICAgICAgID8gY3JlYXRlVGltZSAtIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZVxuICAgICAgICA6IG0uc3RhcnRfdGltZTtcbiAgICBjb25zdCBlbmRUaW1lID1cbiAgICAgIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSAhPSBudWxsXG4gICAgICAgID8gc3RhcnRUaW1lICsgKG0uZW5kX3RpbWUgLSBtLnN0YXJ0X3RpbWUpIHx8IDAuMDFcbiAgICAgICAgOiBtLmVuZF90aW1lO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogbS5pZCxcbiAgICAgIGNyZWF0ZV90aW1lOiBjcmVhdGVUaW1lLFxuICAgICAgc3RhcnRfdGltZTogc3RhcnRUaW1lLFxuICAgICAgZW5kX3RpbWU6IGVuZFRpbWUsXG4gICAgICBzcGVha2VyOiBtLnNwZWFrZXIgYXMgXCJjdXN0b21lclwiIHwgXCJhZ2VudFwiIHwgXCJzcGVjaWFsXCIsXG4gICAgICB0ZXh0OiBtLnRleHQsXG4gICAgICB0eXBlOiBtLnR5cGUsXG4gICAgICBmZWVkYmFjazogbS5mZWVkYmFjayxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgbm90aWZ5VGFrZW92ZXJGcm9tUG9sbCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBQb2xsIGFscmVhZHkgYWRkcyB0aGUgXCJTdXBlcnZpc29yIHRvb2sgb3ZlclwiIG1lc3NhZ2UgZnJvbSB0aGUgbWVzc2FnZSBsaXN0LlxuICAgIC8vIE9ubHkgcnVuIHRoZSBoYW5kbGVyIHNvIFVJIHN0YXRlIHVwZGF0ZXM7IGRvIG5vdCBjYWxsIGhhbmRsZVRha2VvdmVyKCkgb3Igd2UgZHVwbGljYXRlIHRoZSBtZXNzYWdlLlxuICAgIGlmICh0aGlzLnRha2VvdmVySGFuZGxlcikge1xuICAgICAgdGhpcy50YWtlb3ZlckhhbmRsZXIoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBub3RpZnlGaW5hbGl6ZWRGcm9tUG9sbCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBQb2xsIGFscmVhZHkgYWRkcyB0aGUgXCJDb252ZXJzYXRpb24gRmluYWxpemVkXCIgbWVzc2FnZSBmcm9tIHRoZSBtZXNzYWdlIGxpc3QuXG4gICAgLy8gT25seSB1cGRhdGUgc3RhdGUgYW5kIHJ1biB0aGUgaGFuZGxlcjsgZG8gbm90IGNhbGwgaGFuZGxlQ29udmVyc2F0aW9uRmluYWxpemVkKCkgb3Igd2UgZHVwbGljYXRlIHRoZSBtZXNzYWdlLlxuICAgIGlmICh0aGlzLmZpbmFsaXplZEhhbmRsZXIpIHtcbiAgICAgIHRoaXMuZmluYWxpemVkSGFuZGxlcigpO1xuICAgIH1cbiAgICB0aGlzLmlzRmluYWxpemVkID0gdHJ1ZTtcbiAgICB0aGlzLnNhdmVDb252ZXJzYXRpb24oKTtcbiAgfVxuXG4gIC8qKioqKiogRW5kIG9mIEhlYXJ0YmVhdCBwb2xsaW5nICoqKioqKioqKioqKi9cbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "genassist-chat-react",
3
- "version": "1.0.30",
3
+ "version": "1.0.31",
4
4
  "description": "React chat component for GenAssist",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",