genassist-chat-react 1.0.39 → 1.0.40

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.
@@ -145,7 +145,7 @@ export var GenAgentChat = function (_a) {
145
145
  serverUnavailableContactUrl: serverUnavailableContactUrl,
146
146
  serverUnavailableContactLabel: serverUnavailableContactLabel,
147
147
  onConfigLoaded: onConfigLoaded,
148
- }), messages = _1.messages, isLoading = _1.isLoading, sendMessage = _1.sendMessage, sendAudioMessage = _1.sendAudioMessage, uploadFile = _1.uploadFile, resetConversation = _1.resetConversation, startConversation = _1.startConversation, conversationId = _1.conversationId, guestToken = _1.guestToken, possibleQueries = _1.possibleQueries, isFinalized = _1.isFinalized, isAgentTyping = _1.isAgentTyping, addFeedback = _1.addFeedback, agentAvailableLanguages = _1.availableLanguages, agentId = _1.agentId, agentLiveVoiceEnabled = _1.agentLiveVoiceEnabled, agentLiveVoiceReady = _1.agentLiveVoiceReady, welcomeTitle = _1.welcomeTitle, welcomeImageUrl = _1.welcomeImageUrl, welcomeMessage = _1.welcomeMessage, inputDisclaimerHtml = _1.inputDisclaimerHtml, thinkingPhrases = _1.thinkingPhrases, thinkingDelayMs = _1.thinkingDelayMs;
148
+ }), messages = _1.messages, isLoading = _1.isLoading, sendMessage = _1.sendMessage, sendAudioMessage = _1.sendAudioMessage, uploadFile = _1.uploadFile, resetConversation = _1.resetConversation, startConversation = _1.startConversation, triggerStartForm = _1.triggerStartForm, shouldTriggerStartForm = _1.shouldTriggerStartForm, conversationId = _1.conversationId, guestToken = _1.guestToken, possibleQueries = _1.possibleQueries, isFinalized = _1.isFinalized, isAgentTyping = _1.isAgentTyping, addFeedback = _1.addFeedback, agentAvailableLanguages = _1.availableLanguages, agentId = _1.agentId, agentLiveVoiceEnabled = _1.agentLiveVoiceEnabled, agentLiveVoiceReady = _1.agentLiveVoiceReady, welcomeTitle = _1.welcomeTitle, welcomeImageUrl = _1.welcomeImageUrl, welcomeMessage = _1.welcomeMessage, inputDisclaimerHtml = _1.inputDisclaimerHtml, thinkingPhrases = _1.thinkingPhrases, thinkingDelayMs = _1.thinkingDelayMs, formNodeLocales = _1.formNodeLocales;
149
149
  var _2 = useThinkingAnimation({
150
150
  isAgentTyping: isAgentTyping,
151
151
  thinkingPhrases: thinkingPhrases,
@@ -188,6 +188,39 @@ export var GenAgentChat = function (_a) {
188
188
  var audioService = useRef(null);
189
189
  var reCaptchaTokenRef = useRef(undefined);
190
190
  var hasUserMessages = messages.some(function (message) { return message.speaker === 'customer'; });
191
+ // When a Human In The Loop node with "show_on_start" is wired directly after Start, run
192
+ // the workflow once as the conversation opens so its form appears immediately, before
193
+ // any visitor message. Fires only on a fresh conversation: no visitor messages yet and
194
+ // no form already present (a welcome message may exist; a persisted form must not
195
+ // re-trigger on reload).
196
+ var hasFormRequest = messages.some(function (m) { return m.type === 'form_request'; });
197
+ var startFormTriggeredRef = useRef(false);
198
+ useEffect(function () {
199
+ if (shouldTriggerStartForm &&
200
+ conversationId &&
201
+ !isFinalized &&
202
+ !hasUserMessages &&
203
+ !hasFormRequest &&
204
+ !startFormTriggeredRef.current) {
205
+ startFormTriggeredRef.current = true;
206
+ triggerStartForm(reCaptchaTokenRef.current);
207
+ }
208
+ }, [shouldTriggerStartForm, conversationId, isFinalized, hasUserMessages, hasFormRequest, triggerStartForm]);
209
+ // Allow a fresh trigger after a reset (new conversation id / cleared messages).
210
+ useEffect(function () {
211
+ if (!conversationId) {
212
+ startFormTriggeredRef.current = false;
213
+ }
214
+ }, [conversationId]);
215
+ // Form-submission state is keyed by message index, which is only meaningful within a
216
+ // single conversation. Clear it whenever the conversation changes so a form submitted in
217
+ // a previous conversation doesn't mark a new conversation's form (at the same index) as
218
+ // already answered — which would wrongly hide it on Start (Reset cleared it, plain Start
219
+ // did not). The reload case stays correct: it relies on isFormAnswered's transcript check.
220
+ useEffect(function () {
221
+ setSubmittedForms(new Set());
222
+ setSubmittingFormIndex(null);
223
+ }, [conversationId]);
191
224
  useEffect(function () {
192
225
  audioService.current = new AudioService({ baseUrl: baseUrl, websocketUrl: websocketUrl, apiKey: apiKey });
193
226
  }, [baseUrl, websocketUrl, apiKey]);
@@ -276,15 +309,66 @@ export var GenAgentChat = function (_a) {
276
309
  }
277
310
  });
278
311
  }); };
279
- var getFormNodeId = function (messageIndex) {
312
+ // Overlay a form schema with the selected language's strings from the locale bundle
313
+ // (keyed by node id), so a displayed form re-localizes on language switch. Falls back
314
+ // to the schema's own strings when a translation is missing.
315
+ var localizeForm = useCallback(function (schema) {
316
+ var _a, _b;
317
+ if (!schema || typeof schema !== 'object')
318
+ return schema;
319
+ var code = resolvedLanguage.toLowerCase().split('-')[0];
320
+ var slice = (_a = formNodeLocales === null || formNodeLocales === void 0 ? void 0 : formNodeLocales[code]) === null || _a === void 0 ? void 0 : _a[schema.node_id];
321
+ if (!slice)
322
+ return schema;
323
+ return __assign(__assign({}, schema), { message: (_b = slice.message) !== null && _b !== void 0 ? _b : schema.message, fields: Array.isArray(schema.fields)
324
+ ? schema.fields.map(function (f) {
325
+ var _a, _b, _c, _d;
326
+ var t = (f === null || f === void 0 ? void 0 : f.name) ? (_a = slice.fields) === null || _a === void 0 ? void 0 : _a[f.name] : undefined;
327
+ if (!t)
328
+ return f;
329
+ return __assign(__assign({}, f), { label: (_b = t.label) !== null && _b !== void 0 ? _b : f.label, placeholder: (_c = t.placeholder) !== null && _c !== void 0 ? _c : f.placeholder, description: (_d = t.description) !== null && _d !== void 0 ? _d : f.description, options: Array.isArray(f.options)
330
+ ? f.options.map(function (o) {
331
+ var _a, _b;
332
+ return (__assign(__assign({}, o), { label: (_b = (_a = t.options) === null || _a === void 0 ? void 0 : _a[String(o === null || o === void 0 ? void 0 : o.value)]) !== null && _b !== void 0 ? _b : o === null || o === void 0 ? void 0 : o.label }));
333
+ })
334
+ : f.options });
335
+ })
336
+ : schema.fields });
337
+ }, [resolvedLanguage, formNodeLocales]);
338
+ var getFormSchema = function (messageIndex) {
280
339
  var msg = messages[messageIndex];
281
340
  if ((msg === null || msg === void 0 ? void 0 : msg.type) === 'form_request' && msg.text) {
282
341
  try {
283
- return JSON.parse(msg.text).node_id;
342
+ return localizeForm(JSON.parse(msg.text));
284
343
  }
285
344
  catch ( /* skip */_a) { /* skip */ }
286
345
  }
287
- return undefined;
346
+ return null;
347
+ };
348
+ var getFormNodeId = function (messageIndex) { var _a; return (_a = getFormSchema(messageIndex)) === null || _a === void 0 ? void 0 : _a.node_id; };
349
+ // Build the human-readable customer message from the submitted form. We show each field's
350
+ // label, and for option-based fields (e.g. select) the chosen option's label instead of
351
+ // its raw value — both already in the conversation language, since the form schema is
352
+ // translated. The payload (`human_in_the_loop_from_form`) keeps the raw keys/values.
353
+ var buildFormSummary = function (formData, messageIndex) {
354
+ var _a, _b;
355
+ var fieldByName = {};
356
+ for (var _i = 0, _c = (_b = (_a = getFormSchema(messageIndex)) === null || _a === void 0 ? void 0 : _a.fields) !== null && _b !== void 0 ? _b : []; _i < _c.length; _i++) {
357
+ var f = _c[_i];
358
+ if (f && typeof f.name === 'string')
359
+ fieldByName[f.name] = f;
360
+ }
361
+ return Object.entries(formData)
362
+ .map(function (_a) {
363
+ var _b;
364
+ var key = _a[0], value = _a[1];
365
+ var field = fieldByName[key];
366
+ var label = (field === null || field === void 0 ? void 0 : field.label) || key;
367
+ var option = (_b = field === null || field === void 0 ? void 0 : field.options) === null || _b === void 0 ? void 0 : _b.find(function (o) { return o && String(o.value) === String(value); });
368
+ var display = (option === null || option === void 0 ? void 0 : option.label) || value;
369
+ return "".concat(label, ": ").concat(display);
370
+ })
371
+ .join('\n');
288
372
  };
289
373
  var handleFormSubmit = function (formData, messageIndex) { return __awaiter(void 0, void 0, void 0, function () {
290
374
  var summaryText, nodeId, error_2;
@@ -297,12 +381,7 @@ export var GenAgentChat = function (_a) {
297
381
  _a.label = 1;
298
382
  case 1:
299
383
  _a.trys.push([1, 3, 4, 5]);
300
- summaryText = Object.entries(formData)
301
- .map(function (_a) {
302
- var key = _a[0], value = _a[1];
303
- return "".concat(key, ": ").concat(value);
304
- })
305
- .join(', ');
384
+ summaryText = buildFormSummary(formData, messageIndex);
306
385
  nodeId = getFormNodeId(messageIndex);
307
386
  return [4 /*yield*/, sendMessage(summaryText, [], __assign({ human_in_the_loop_from_form: formData }, (nodeId && { human_in_the_loop_node_id: nodeId })), reCaptchaTokenRef.current)];
308
387
  case 2:
@@ -673,23 +752,35 @@ export var GenAgentChat = function (_a) {
673
752
  textAreaMaxHeightCalculated: textAreaMaxHeightCalculated,
674
753
  textColor: textColor,
675
754
  });
755
+ // A form_request is "answered" once the visitor has responded to it. Besides the
756
+ // optimistic in-session flag (`submittedForms`), we also treat it as answered when a
757
+ // later customer message exists — that survives a page reload (where `submittedForms`
758
+ // is gone), so a completed form never reappears after refresh.
759
+ var isFormAnswered = function (index) {
760
+ if (submittedForms.has(index))
761
+ return true;
762
+ for (var j = index + 1; j < messages.length; j++) {
763
+ if (messages[j].speaker === 'customer')
764
+ return true;
765
+ }
766
+ return false;
767
+ };
676
768
  var hasPendingForm = messages.some(function (msg, idx) {
677
- if (msg.type !== 'form_request' || msg.speaker !== 'agent')
678
- return false;
679
- return !submittedForms.has(idx);
769
+ return msg.type === 'form_request' && msg.speaker === 'agent' && !isFormAnswered(idx);
680
770
  });
681
771
  var pendingForm = useMemo(function () {
682
772
  for (var i = messages.length - 1; i >= 0; i--) {
683
773
  var msg = messages[i];
684
- if (msg.type === 'form_request' && msg.speaker === 'agent' && !submittedForms.has(i)) {
774
+ if (msg.type === 'form_request' && msg.speaker === 'agent' && !isFormAnswered(i)) {
685
775
  try {
686
- return { schema: JSON.parse(msg.text), index: i };
776
+ return { schema: localizeForm(JSON.parse(msg.text)), index: i };
687
777
  }
688
778
  catch ( /* skip */_a) { /* skip */ }
689
779
  }
690
780
  }
691
781
  return null;
692
- }, [messages, submittedForms]);
782
+ // eslint-disable-next-line react-hooks/exhaustive-deps
783
+ }, [messages, submittedForms, localizeForm]);
693
784
  var isSendDisabled = (inputValue.trim() === '' && attachments.length === 0) || isAgentTyping || hasPendingForm;
694
785
  var autoResizeTextArea = function () {
695
786
  var el = textAreaRef.current;
@@ -832,16 +923,19 @@ export var GenAgentChat = function (_a) {
832
923
  return messages.filter(applyMessageFilter).map(function (message, index) {
833
924
  if (message.type === 'form_request' && message.speaker === 'agent') {
834
925
  try {
835
- var formSchema = JSON.parse(message.text);
836
- var isPending = !submittedForms.has(index);
837
- return (_jsxs("div", { style: { display: 'flex', flexDirection: 'column', maxWidth: '85%', marginBottom: '8px' }, children: [_jsx("div", { style: { fontSize: '14px', color: '#000000', fontWeight: 600, marginBottom: 4 }, children: agentName || 'Agent' }), formDisplay === 'inline' && isPending ? (_jsx(DynamicFormMessage, { schema: formSchema, onSubmit: function (data) { return handleFormSubmit(data, index); }, onCancel: function () { return handleFormCancel(index); }, isSubmitting: submittingFormIndex === index, isSubmitted: false, primaryColor: primaryColor, fontFamily: fontFamily, variant: "card" })) : (_jsxs("div", { style: {
926
+ var formSchema = localizeForm(JSON.parse(message.text));
927
+ // Use the real message position (filtering can shift the map index) so the
928
+ // answered check matches the overlay/footer path and survives reload.
929
+ var originalIndex_1 = messages.indexOf(message);
930
+ var isPending = !isFormAnswered(originalIndex_1);
931
+ return (_jsxs("div", { style: { display: 'flex', flexDirection: 'column', maxWidth: '85%', marginBottom: '8px' }, children: [_jsx("div", { style: { fontSize: '14px', color: '#000000', fontWeight: 600, marginBottom: 4 }, children: agentName || 'Agent' }), formDisplay === 'inline' && isPending ? (_jsx(DynamicFormMessage, { schema: formSchema, onSubmit: function (data) { return handleFormSubmit(data, originalIndex_1); }, onCancel: function () { return handleFormCancel(originalIndex_1); }, isSubmitting: submittingFormIndex === originalIndex_1, isSubmitted: false, primaryColor: primaryColor, fontFamily: fontFamily, variant: "card" })) : (_jsx("div", { style: {
838
932
  backgroundColor: '#f3f4f6',
839
933
  borderRadius: '12px',
840
934
  padding: '10px 14px',
841
935
  fontSize: '14px',
842
936
  color: '#374151',
843
937
  fontFamily: fontFamily,
844
- }, children: [formSchema.message || 'Please fill the form below.', isPending && (_jsx("div", { style: { fontSize: '12px', color: '#6b7280', marginTop: '4px' }, children: "Fill the form below to continue." }))] }))] }, index));
938
+ }, children: formSchema.message || 'Please fill the form below.' }))] }, index));
845
939
  }
846
940
  catch (_a) {
847
941
  // Fall through to normal rendering if JSON parse fails
@@ -849,7 +943,10 @@ export var GenAgentChat = function (_a) {
849
943
  }
850
944
  var isNextSameSpeaker = index < messages.length - 1 && messages[index + 1].speaker === message.speaker;
851
945
  var isPrevSameSpeaker = index > 0 && messages[index - 1].speaker === message.speaker;
852
- var isFirstAgentMessage = index === firstAgentIndex && message.speaker === 'agent' && !hasUserMessages;
946
+ // When the agent greets on start, that greeting is a normal reply — not the
947
+ // "welcome" message — so don't give it the first-message welcome treatment
948
+ // (which would split its text into a big title + body).
949
+ var isFirstAgentMessage = index === firstAgentIndex && message.speaker === 'agent' && !hasUserMessages && !shouldTriggerStartForm;
853
950
  var displayMessage = isFirstAgentMessage && welcomeMessage
854
951
  ? __assign(__assign({}, message), { text: welcomeMessage }) : message;
855
952
  return (_jsx(ChatMessageComponent, { message: displayMessage, theme: theme, onPlayAudio: message.speaker === 'agent' ? playResponseAudio : undefined, isPlayingAudio: isPlayingAudio, isFirstMessage: isFirstAgentMessage, isNextSameSpeaker: isNextSameSpeaker, isPrevSameSpeaker: isPrevSameSpeaker, onFeedback: function (messageId, value) { return addFeedback(messageId, value); }, enableTypewriter: index === messages.length - 1 && message.speaker === 'agent', welcomeImageUrl: isFirstAgentMessage ? (welcomeImageUrl || undefined) : undefined, welcomeTitle: isFirstAgentMessage ? (welcomeTitle || undefined) : undefined, possibleQueries: isFirstAgentMessage ? possibleQueries : undefined, onQuickQuery: handleQueryClick, onQuickAction: handleQuickAction, onScheduleConfirm: handleScheduleConfirm, isLastMessage: index === messages.length - 1 && message.speaker === 'agent', translations: translations, language: resolvedLanguage, agentName: agentName, isAgentTyping: isAgentTyping, audioUrlBuilder: message.type === 'audio' && useAudio ? audioUrlBuilder : undefined, audioHeaders: message.type === 'audio' && useAudio ? audioHeaders : undefined, autoPlayAudioMessageId: autoPlayAudioMessageId }, index));
@@ -898,7 +995,7 @@ export var GenAgentChat = function (_a) {
898
995
  alignItems: 'center',
899
996
  gap: '8px',
900
997
  flexShrink: 0,
901
- }, role: "alert", children: [_jsx(AlertCircle, { size: 18, style: { flexShrink: 0 } }), _jsx("span", { children: liveVoiceNotice })] })), useFile && attachments.length > 0 && (_jsx("div", { style: { padding: '0 16px', marginBottom: '8px', display: 'flex', gap: '8px', flexWrap: 'wrap' }, children: attachments.map(function (att, index) { return (_jsx(AttachmentPreview, { file: att.file, onRemove: function () { return handleRemoveAttachment(att.file.name); }, uploading: uploadingFiles.has(att.file.name) }, index)); }) })), !conversationId || isFinalized ? (_jsx("div", { style: inputContainerStyle, children: _jsx("button", { type: "button", style: __assign(__assign({}, sendButtonStyle), { width: '100%', height: '48px', borderRadius: '16px', cursor: 'pointer', fontFamily: fontFamily, fontSize: fontSize }), onClick: handleStartConversation, disabled: isLoading, children: t('buttons.startConversation') }) })) : pendingForm && formDisplay === 'footer' ? (_jsxs("div", { style: __assign(__assign({}, inputContainerStyle), { flexDirection: 'column', borderTop: '1px solid #e5e7eb' }), children: [_jsx(DynamicFormMessage, { schema: pendingForm.schema, onSubmit: function (data) { return handleFormSubmit(data, pendingForm.index); }, onCancel: function () { return handleFormCancel(pendingForm.index); }, isSubmitting: submittingFormIndex === pendingForm.index, isSubmitted: false, primaryColor: primaryColor, fontFamily: fontFamily, variant: "footer" }), agentDisclaimerContent && (_jsx("div", { className: "ga-input-disclaimer", style: disclaimerStyle, children: agentDisclaimerContent }))] })) : liveVoiceEnabled ? (
998
+ }, role: "alert", children: [_jsx(AlertCircle, { size: 18, style: { flexShrink: 0 } }), _jsx("span", { children: liveVoiceNotice })] })), useFile && attachments.length > 0 && (_jsx("div", { style: { padding: '0 16px', marginBottom: '8px', display: 'flex', gap: '8px', flexWrap: 'wrap' }, children: attachments.map(function (att, index) { return (_jsx(AttachmentPreview, { file: att.file, onRemove: function () { return handleRemoveAttachment(att.file.name); }, uploading: uploadingFiles.has(att.file.name) }, index)); }) })), !conversationId || isFinalized ? (_jsx("div", { style: inputContainerStyle, children: _jsx("button", { type: "button", style: __assign(__assign({}, sendButtonStyle), { width: '100%', height: '48px', borderRadius: '16px', cursor: 'pointer', fontFamily: fontFamily, fontSize: fontSize }), onClick: handleStartConversation, disabled: isLoading, children: t('buttons.startConversation') }) })) : liveVoiceEnabled ? (
902
999
  // Live voice mode is voice-only: no text box, attach, or send button —
903
1000
  // the only way to talk to the agent is to start a live call.
904
1001
  _jsx("div", { style: inputContainerStyle, children: _jsxs("div", { style: { display: 'flex', flexDirection: 'column', width: '100%', minWidth: 0 }, children: [_jsxs("div", { style: inputWrapperStyle, children: [_jsx("span", { style: getLiveVoiceHintStyle(textAreaFontSize, fontFamily), children: liveVoiceReady
@@ -930,7 +1027,14 @@ export var GenAgentChat = function (_a) {
930
1027
  case 4: return [2 /*return*/];
931
1028
  }
932
1029
  });
933
- }); }, onError: handleVoiceError, theme: theme }))] }), agentDisclaimerContent && (_jsx("div", { className: "ga-input-disclaimer", style: disclaimerStyle, children: agentDisclaimerContent }))] }) }))] }), _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({}, getConfirmButtonStyle(false, themeParams)), { color: textColor }), onClick: handleCancelReset, children: t('buttons.cancel') }), _jsx("button", { style: getConfirmButtonStyle(true, themeParams), onClick: handleConfirmReset, children: t('buttons.reset') })] })] }) })] })); };
1030
+ }); }, onError: handleVoiceError, theme: theme }))] }), agentDisclaimerContent && (_jsx("div", { className: "ga-input-disclaimer", style: disclaimerStyle, children: agentDisclaimerContent }))] }) })), pendingForm && formDisplay !== 'inline' && (_jsx("div", { style: {
1031
+ position: 'absolute',
1032
+ inset: 0,
1033
+ zIndex: 30,
1034
+ display: 'flex',
1035
+ flexDirection: 'column',
1036
+ backgroundColor: backgroundColor || '#ffffff',
1037
+ }, children: _jsx(DynamicFormMessage, { schema: pendingForm.schema, onSubmit: function (data) { return handleFormSubmit(data, pendingForm.index); }, onCancel: function () { return handleFormCancel(pendingForm.index); }, isSubmitting: submittingFormIndex === pendingForm.index, isSubmitted: false, primaryColor: primaryColor, fontFamily: fontFamily, variant: "fullscreen", title: agentName || undefined }) }))] }), _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({}, getConfirmButtonStyle(false, themeParams)), { color: textColor }), onClick: handleCancelReset, children: t('buttons.cancel') }), _jsx("button", { style: getConfirmButtonStyle(true, themeParams), onClick: handleConfirmReset, children: t('buttons.reset') })] })] }) })] })); };
934
1038
  if (mode === 'floating') {
935
1039
  return (_jsxs(_Fragment, { children: [!isFloatingOpen && (_jsx(ChatBubble, { showChat: isFloatingOpen, onClick: function () { return setIsFloatingOpen(function (prev) { return !prev; }); }, primaryColor: primaryColor, style: getPositionStyles({ position: position, offsetX: offsetX, offsetY: offsetY }), chatBubbleIcon: theme === null || theme === void 0 ? void 0 : theme.chatBubbleIcon })), isFloatingOpen && (_jsx("div", { style: floatingContainerStyle, "data-genassist-container": "floating", children: renderWithReCaptcha(renderChatComponent()) }))] }));
936
1040
  }
@@ -939,4 +1043,4 @@ export var GenAgentChat = function (_a) {
939
1043
  }
940
1044
  return renderWithReCaptcha(renderChatComponent());
941
1045
  };
942
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2VuQWdlbnRDaGF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvR2VuQWdlbnRDaGF0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDckUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFakUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksSUFBSSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7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bUIsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEdBQ3ZDLENBQ1AsSUFDQSxDQUNKLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxJQUFJLEtBQUssWUFBWSxFQUFFLENBQUM7UUFDMUIsT0FBTyxDQUNMLGNBQUssS0FBSyxFQUFFLHNCQUFzQiw4QkFBMkIsWUFBWSxZQUN0RSxtQkFBbUIsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEdBQ3ZDLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLG1CQUFtQixDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztBQUNwRCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QsIHVzZU1lbW8sIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2VDb21wb25lbnQgfSBmcm9tICcuL0NoYXRNZXNzYWdlJztcbmltcG9ydCB7IEF0dGFjaG1lbnRQcmV2aWV3IH0gZnJvbSAnLi9jb21tb24vQXR0YWNobWVudFByZXZpZXcnO1xuaW1wb3J0IHsgdXNlQ2hhdCB9IGZyb20gJy4uL2hvb2tzL3VzZUNoYXQnO1xuaW1wb3J0IHsgdXNlU2Nyb2xsTWFuYWdlbWVudCB9IGZyb20gJy4uL2hvb2tzL3VzZVNjcm9sbE1hbmFnZW1lbnQnO1xuaW1wb3J0IHsgdXNlVGhpbmtpbmdBbmltYXRpb24gfSBmcm9tICcuLi9ob29rcy91c2VUaGlua2luZ0FuaW1hdGlvbic7XG5pbXBvcnQgeyB1c2VWaWV3cG9ydE1hbmFnZXIgfSBmcm9tICcuLi9ob29rcy91c2VWaWV3cG9ydE1hbmFnZXInO1xuaW1wb3J0IHsgdXNlRmlsZUF0dGFjaG1lbnRzIH0gZnJvbSAnLi4vaG9va3MvdXNlRmlsZUF0dGFjaG1lbnRzJztcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBHZW5BZ2VudENoYXRQcm9wcywgU2NoZWR1bGVJdGVtIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgVm9pY2VJbnB1dCB9IGZyb20gJy4vVm9pY2VJbnB1dCc7XG5pbXBvcnQgeyBMaXZlQ2FsbENvbnRyb2wgfSBmcm9tICcuL0xpdmVDYWxsQ29udHJvbCc7XG5pbXBvcnQgeyB1c2VMaXZlVm9pY2UgYXMgdXNlTGl2ZVZvaWNlU2Vzc2lvbiB9IGZyb20gJy4uL2hvb2tzL3VzZUxpdmVWb2ljZSc7XG5pbXBvcnQgeyBBdWRpb1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hdWRpb1NlcnZpY2UnO1xuaW1wb3J0IHsgUGFwZXJjbGlwLCBNb3JlVmVydGljYWwsIFJlZnJlc2hDdywgR2xvYmUsIFgsIEFycm93VXAsIE1heGltaXplMiwgTWluaW1pemUyLCBBbGVydENpcmNsZSB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQgeyBDaGF0QnViYmxlIH0gZnJvbSAnLi9DaGF0QnViYmxlJztcbmltcG9ydCBEeW5hbWljRm9ybU1lc3NhZ2UgZnJvbSAnLi9EeW5hbWljRm9ybU1lc3NhZ2UnO1xuaW1wb3J0IHsgTGFuZ3VhZ2VTZWxlY3RvciB9IGZyb20gJy4vTGFuZ3VhZ2VTZWxlY3Rvcic7XG5pbXBvcnQgY2hhdExvZ28gZnJvbSAnLi4vYXNzZXRzL2NoYXQtbG9nby5wbmcnO1xuXG5pbXBvcnQge1xuICByZXNvbHZlTGFuZ3VhZ2UsXG4gIG1lcmdlVHJhbnNsYXRpb25zLFxuICBnZXRUcmFuc2xhdGlvblN0cmluZyxcbiAgZ2V0VHJhbnNsYXRpb25zRm9yTGFuZ3VhZ2UsXG59IGZyb20gJy4uL3V0aWxzL2kxOG4nO1xuaW1wb3J0IHsgR29vZ2xlUmVDYXB0Y2hhLCBHb29nbGVSZUNhcHRjaGFQcm92aWRlciB9IGZyb20gJ3JlYWN0LWdvb2dsZS1yZWNhcHRjaGEtdjMnO1xuXG5pbXBvcnQge1xuICByZXNvbHZlVGhlbWUsXG4gIGhleFRvUmdiYSxcbiAgZ2V0Q29udGFpbmVyU3R5bGUsXG4gIGdldEhlYWRlclN0eWxlLFxuICBsb2dvQ29udGFpbmVyU3R5bGUsXG4gIGxvZ29TdHlsZSxcbiAgaGVhZGVyVGl0bGVDb250YWluZXJTdHlsZSxcbiAgZ2V0SGVhZGVyVGl0bGVTdHlsZSxcbiAgZ2V0SGVhZGVyU3VidGl0bGVTdHlsZSxcbiAgbWVudUJ1dHRvblN0eWxlLFxuICBnZXRNZW51UG9wdXBTdHlsZSxcbiAgZ2V0TWVudUl0ZW1TdHlsZSxcbiAgY2hhdENvbnRhaW5lclN0eWxlLFxuICBpbnB1dENvbnRhaW5lclN0eWxlLFxuICBpbnB1dFdyYXBwZXJTdHlsZSxcbiAgZ2V0VGV4dEFyZWFTdHlsZSxcbiAgZ2V0TGl2ZVZvaWNlSGludFN0eWxlLFxuICBhdHRhY2hCdXR0b25TdHlsZSxcbiAgZ2V0U2VuZEJ1dHRvblN0eWxlLFxuICBzZW5kQnV0dG9uRGlzYWJsZWRTdHlsZSxcbiAgcmlnaHRBY3Rpb25Db250YWluZXJTdHlsZSxcbiAgZ2V0UG9zc2libGVRdWVyaWVzQ29udGFpbmVyU3R5bGUsXG4gIGdldFF1ZXJ5QnV0dG9uU3R5bGUsXG4gIGdldENvbmZpcm1PdmVybGF5U3R5bGUsXG4gIGdldENvbmZpcm1EaWFsb2dTdHlsZSxcbiAgY29uZmlybUJ1dHRvbnNTdHlsZSxcbiAgZ2V0Q29uZmlybUJ1dHRvblN0eWxlLFxuICBnZXRDb250ZW50Q2FyZFN0eWxlLFxuICBnZXREaXNjbGFpbWVyU3R5bGUsXG4gIGdldFBvc2l0aW9uU3R5bGVzLFxuICBnZXRGbG9hdGluZ0NvbnRhaW5lclN0eWxlLFxuICBDU1NfS0VZRlJBTUVTLFxufSBmcm9tICcuLi9zdHlsZXMvZ2VuQWdlbnRDaGF0U3R5bGVzJztcblxuY29uc3QgU0hPV19DSEFUX0xBTkdVQUdFX1NFTEVDVE9SID0gdHJ1ZTtcblxuLyoqIE9uZSBjb21wbGV0ZWQgKG9yIGluLXByb2dyZXNzKSBsaXZlLXZvaWNlIGV4Y2hhbmdlOiB3aGF0IHRoZSB1c2VyIHNhaWQgKyB0aGUgcmVwbHkuICovXG50eXBlIExpdmVUdXJuID0geyB1c2VyOiBzdHJpbmc7IGFnZW50OiBzdHJpbmc7IGNyZWF0ZVRpbWU6IG51bWJlciB9O1xuXG4vKiogQ3VycmVudCB0aW1lIGluIGVwb2NoIHNlY29uZHMgKHRoZSB0aW1lc3RhbXAgZm9ybWF0IENoYXRNZXNzYWdlIGV4cGVjdHMpLiAqL1xuY29uc3Qgbm93U2VjID0gKCkgPT4gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCk7XG5cbmV4cG9ydCBjb25zdCBHZW5BZ2VudENoYXQ6IFJlYWN0LkZDPEdlbkFnZW50Q2hhdFByb3BzPiA9ICh7XG4gIGJhc2VVcmwsXG4gIHdlYnNvY2tldFVybCxcbiAgYXBpS2V5LFxuICB0ZW5hbnQsXG4gIG1ldGFkYXRhLFxuICB1c2VXcyA9IHRydWUsXG4gIHVzZVBvbGwgPSBmYWxzZSxcbiAgb25FcnJvcixcbiAgb25UYWtlb3ZlcixcbiAgb25GaW5hbGl6ZSxcbiAgdGhlbWUsXG4gIGhlYWRlclRpdGxlID0gJ0dlbmFzc2lzdCcsXG4gIGRlc2NyaXB0aW9uLFxuICBwbGFjZWhvbGRlcixcbiAgYWdlbnROYW1lLFxuICBsb2dvVXJsLFxuICBtb2RlID0gJ2VtYmVkZGVkJyxcbiAgb25FeGl0RnVsbHNjcmVlbixcbiAgZmxvYXRpbmdDb25maWcgPSB7fSxcbiAgbGFuZ3VhZ2UsXG4gIHRyYW5zbGF0aW9uczogY3VzdG9tVHJhbnNsYXRpb25zLFxuICByZUNhcHRjaGFLZXksXG4gIHdpZGdldCA9IGZhbHNlLFxuICB1c2VBdWRpbyA9IGZhbHNlLFxuICB1c2VGaWxlID0gZmFsc2UsXG4gIG5vQ29sb3JBbmltYXRpb24gPSBmYWxzZSxcbiAgc2hvd1dlbGNvbWVCZWZvcmVTdGFydCA9IHRydWUsXG4gIGFsbG93ZWRFeHRlbnNpb25zID0gW10sXG4gIHNlcnZlclVuYXZhaWxhYmxlTWVzc2FnZSxcbiAgc2VydmVyVW5hdmFpbGFibGVDb250YWN0VXJsLFxuICBzZXJ2ZXJVbmF2YWlsYWJsZUNvbnRhY3RMYWJlbCxcbiAgZm9ybURpc3BsYXkgPSAnZm9vdGVyJyxcbiAgb25Db25maWdMb2FkZWQsXG59KTogUmVhY3QuUmVhY3RFbGVtZW50ID0+IHtcbiAgLy8gTGFuZ3VhZ2Ugc2VsZWN0aW9uIHN0YXRlICh3aXRoIGxvY2FsU3RvcmFnZSBwZXJzaXN0ZW5jZSlcbiAgY29uc3QgW3NlbGVjdGVkTGFuZ3VhZ2UsIHNldFNlbGVjdGVkTGFuZ3VhZ2VdID0gdXNlU3RhdGU8c3RyaW5nPigoKSA9PiB7XG4gICAgaWYgKGxhbmd1YWdlKSByZXR1cm4gbGFuZ3VhZ2U7XG4gICAgY29uc3Qgc3RvcmVkID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZ2VuYXNzaXN0X2xhbmd1YWdlJykgOiBudWxsO1xuICAgIGlmIChzdG9yZWQpIHJldHVybiBzdG9yZWQ7XG4gICAgcmV0dXJuIHJlc29sdmVMYW5ndWFnZSgpO1xuICB9KTtcblxuICAvLyBTYXZlIGxhbmd1YWdlIHRvIGxvY2FsU3RvcmFnZSB3aGVuIGl0IGNoYW5nZXNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgIWxhbmd1YWdlKSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZ2VuYXNzaXN0X2xhbmd1YWdlJywgc2VsZWN0ZWRMYW5ndWFnZSk7XG4gICAgfVxuICB9LCBbc2VsZWN0ZWRMYW5ndWFnZSwgbGFuZ3VhZ2VdKTtcblxuICAvLyBTdGF0ZSBmb3IgdHJhY2tpbmcgc2VsZWN0ZWQgRkFRIHF1ZXJ5XG4gIGNvbnN0IFtzZWxlY3RlZEZhcVF1ZXJ5LCBzZXRTZWxlY3RlZEZhcVF1ZXJ5XSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIC8vIFJlc29sdmUgbGFuZ3VhZ2U6IHByb3AgPiBzZWxlY3RlZCA+IGJyb3dzZXIgPiAnZW4nXG4gIGNvbnN0IHJlc29sdmVkTGFuZ3VhZ2UgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAobGFuZ3VhZ2UpIHJldHVybiBsYW5ndWFnZTtcbiAgICByZXR1cm4gc2VsZWN0ZWRMYW5ndWFnZSB8fCByZXNvbHZlTGFuZ3VhZ2UoKSB8fCAnZW4nO1xuICB9LCBbbGFuZ3VhZ2UsIHNlbGVjdGVkTGFuZ3VhZ2VdKTtcblxuICAvLyBNZXJnZSBsYW5ndWFnZSBhbmQgRkFRIHF1ZXJ5IGludG8gbWV0YWRhdGFcbiAgY29uc3QgbWV0YWRhdGFXaXRoTGFuZ3VhZ2UgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uKG1ldGFkYXRhIHx8IHt9KSxcbiAgICAgIGxhbmd1YWdlOiByZXNvbHZlZExhbmd1YWdlLFxuICAgICAgLi4uKHNlbGVjdGVkRmFxUXVlcnkgPyB7IGZhcV9xdWVyeTogc2VsZWN0ZWRGYXFRdWVyeSB9IDoge30pLFxuICAgIH07XG4gIH0sIFttZXRhZGF0YSwgcmVzb2x2ZWRMYW5ndWFnZSwgc2VsZWN0ZWRGYXFRdWVyeV0pO1xuXG4gIC8vIEdldCB0cmFuc2xhdGlvbnMgYmFzZWQgb24gcmVzb2x2ZWQgbGFuZ3VhZ2UsIHRoZW4gbWVyZ2Ugd2l0aCBjdXN0b20gdHJhbnNsYXRpb25zXG4gIGNvbnN0IHRyYW5zbGF0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGJhc2VUcmFuc2xhdGlvbnMgPSBnZXRUcmFuc2xhdGlvbnNGb3JMYW5ndWFnZShyZXNvbHZlZExhbmd1YWdlKTtcbiAgICByZXR1cm4gbWVyZ2VUcmFuc2xhdGlvbnMoY3VzdG9tVHJhbnNsYXRpb25zLCBiYXNlVHJhbnNsYXRpb25zKTtcbiAgfSwgW3Jlc29sdmVkTGFuZ3VhZ2UsIGN1c3RvbVRyYW5zbGF0aW9uc10pO1xuXG4gIGNvbnN0IHQgPSAoa2V5OiBzdHJpbmcsIGZhbGxiYWNrPzogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICByZXR1cm4gZ2V0VHJhbnNsYXRpb25TdHJpbmcoa2V5LCB0cmFuc2xhdGlvbnMsIGZhbGxiYWNrKTtcbiAgfTtcblxuICBjb25zdCBpbnB1dFBsYWNlaG9sZGVyID0gdXNlTWVtbygoKSA9PiBwbGFjZWhvbGRlciB8fCB0KCdpbnB1dC5wbGFjZWhvbGRlcicsICdBc2sgYSBxdWVzdGlvbicpLCBbcGxhY2Vob2xkZXIsIHRyYW5zbGF0aW9uc10pO1xuICBjb25zdCBbaW5wdXRWYWx1ZSwgc2V0SW5wdXRWYWx1ZV0gPSB1c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtzaG93UmVzZXRDb25maXJtLCBzZXRTaG93UmVzZXRDb25maXJtXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3Nob3dNZW51LCBzZXRTaG93TWVudV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzaG93TGFuZ3VhZ2VEcm9wZG93biwgc2V0U2hvd0xhbmd1YWdlRHJvcGRvd25dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbaXNQbGF5aW5nQXVkaW8sIHNldElzUGxheWluZ0F1ZGlvXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2lzRmxvYXRpbmdPcGVuLCBzZXRJc0Zsb2F0aW5nT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzdWJtaXR0ZWRGb3Jtcywgc2V0U3VibWl0dGVkRm9ybXNdID0gdXNlU3RhdGU8U2V0PG51bWJlcj4+KG5ldyBTZXQoKSk7XG4gIGNvbnN0IFtzdWJtaXR0aW5nRm9ybUluZGV4LCBzZXRTdWJtaXR0aW5nRm9ybUluZGV4XSA9IHVzZVN0YXRlPG51bWJlciB8IG51bGw+KG51bGwpO1xuICBjb25zdCBtZW51UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgdGV4dEFyZWFSZWYgPSB1c2VSZWY8SFRNTFRleHRBcmVhRWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGhlYWRlclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IFtoZWFkZXJIZWlnaHQsIHNldEhlYWRlckhlaWdodF0gPSB1c2VTdGF0ZSg1Nik7XG4gIGNvbnN0IFtzaG93QmFja2xpZ2h0LCBzZXRTaG93QmFja2xpZ2h0XSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCB7XG4gICAgbWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nLFxuICAgIHNlbmRNZXNzYWdlLFxuICAgIHNlbmRBdWRpb01lc3NhZ2UsXG4gICAgdXBsb2FkRmlsZSxcbiAgICByZXNldENvbnZlcnNhdGlvbixcbiAgICBzdGFydENvbnZlcnNhdGlvbixcbiAgICBjb252ZXJzYXRpb25JZCxcbiAgICBndWVzdFRva2VuLFxuICAgIHBvc3NpYmxlUXVlcmllcyxcbiAgICBpc0ZpbmFsaXplZCxcbiAgICBpc0FnZW50VHlwaW5nLFxuICAgIGFkZEZlZWRiYWNrLFxuICAgIGF2YWlsYWJsZUxhbmd1YWdlczogYWdlbnRBdmFpbGFibGVMYW5ndWFnZXMsXG4gICAgYWdlbnRJZCxcbiAgICBhZ2VudExpdmVWb2ljZUVuYWJsZWQsXG4gICAgYWdlbnRMaXZlVm9pY2VSZWFkeSxcbiAgICB3ZWxjb21lVGl0bGUsXG4gICAgd2VsY29tZUltYWdlVXJsLFxuICAgIHdlbGNvbWVNZXNzYWdlLFxuICAgIGlucHV0RGlzY2xhaW1lckh0bWwsXG4gICAgdGhpbmtpbmdQaHJhc2VzLFxuICAgIHRoaW5raW5nRGVsYXlNcyxcbiAgfSA9IHVzZUNoYXQoe1xuICAgIGJhc2VVcmwsXG4gICAgd2Vic29ja2V0VXJsLFxuICAgIGFwaUtleSxcbiAgICB0ZW5hbnQsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhV2l0aExhbmd1YWdlLFxuICAgIHVzZVdzLFxuICAgIHVzZVBvbGwsXG4gICAgbGFuZ3VhZ2U6IHJlc29sdmVkTGFuZ3VhZ2UsXG4gICAgb25FcnJvcixcbiAgICBvblRha2VvdmVyLFxuICAgIG9uRmluYWxpemUsXG4gICAgc2VydmVyVW5hdmFpbGFibGVNZXNzYWdlLFxuICAgIHNlcnZlclVuYXZhaWxhYmxlQ29udGFjdFVybCxcbiAgICBzZXJ2ZXJVbmF2YWlsYWJsZUNvbnRhY3RMYWJlbCxcbiAgICBvbkNvbmZpZ0xvYWRlZCxcbiAgfSk7XG5cbiAgY29uc3QgeyBjdXJyZW50VGhpbmtpbmdQYXJ0cywgY3VycmVudFRoaW5raW5nUGFydEluZGV4IH0gPSB1c2VUaGlua2luZ0FuaW1hdGlvbih7XG4gICAgaXNBZ2VudFR5cGluZyxcbiAgICB0aGlua2luZ1BocmFzZXMsXG4gICAgdGhpbmtpbmdEZWxheU1zLFxuICAgIHRyYW5zbGF0aW9ucyxcbiAgfSk7XG5cbiAgY29uc3QgeyBtZXNzYWdlc0VuZFJlZiwgY2hhdENvbnRhaW5lclJlZiB9ID0gdXNlU2Nyb2xsTWFuYWdlbWVudCh7XG4gICAgbWVzc2FnZXMsXG4gICAgaXNBZ2VudFR5cGluZyxcbiAgICBjdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXgsXG4gICAgY3VycmVudFRoaW5raW5nUGFydHNMZW5ndGg6IGN1cnJlbnRUaGlua2luZ1BhcnRzLmxlbmd0aCxcbiAgICBjb252ZXJzYXRpb25JZCxcbiAgICBpc0Zsb2F0aW5nT3BlbixcbiAgICBtb2RlLFxuICB9KTtcblxuICBjb25zdCB7XG4gICAgd2luZG93V2lkdGgsXG4gICAgd2luZG93SGVpZ2h0LFxuICAgIGlzRnVsbHNjcmVlbixcbiAgICBoYW5kbGVGdWxsc2NyZWVuVG9nZ2xlLFxuICB9ID0gdXNlVmlld3BvcnRNYW5hZ2VyKHtcbiAgICBtb2RlLFxuICAgIHdpZGdldCxcbiAgICBpc0Zsb2F0aW5nT3BlbixcbiAgICBzaG93UmVzZXRDb25maXJtLFxuICAgIHNob3dMYW5ndWFnZURyb3Bkb3duLFxuICAgIHNob3dNZW51LFxuICAgIG9uRXhpdEZ1bGxzY3JlZW4sXG4gICAgc2V0U2hvd1Jlc2V0Q29uZmlybSxcbiAgICBzZXRTaG93TGFuZ3VhZ2VEcm9wZG93bixcbiAgICBzZXRTaG93TWVudSxcbiAgfSk7XG5cbiAgY29uc3Qge1xuICAgIGF0dGFjaG1lbnRzLFxuICAgIHNldEF0dGFjaG1lbnRzLFxuICAgIHVwbG9hZGluZ0ZpbGVzLFxuICAgIGZpbGVFcnJvclRvYXN0LFxuICAgIGZpbGVJbnB1dFJlZixcbiAgICBoYW5kbGVGaWxlQ2hhbmdlLFxuICAgIGhhbmRsZVJlbW92ZUF0dGFjaG1lbnQsXG4gICAgY2xlYXJBdHRhY2htZW50cyxcbiAgfSA9IHVzZUZpbGVBdHRhY2htZW50cyh7IHVwbG9hZEZpbGUsIHQgfSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobGFuZ3VhZ2UpIHJldHVybjtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYWdlbnRBdmFpbGFibGVMYW5ndWFnZXMpIHx8IGFnZW50QXZhaWxhYmxlTGFuZ3VhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBub3JtYWxpemVkID0gYWdlbnRBdmFpbGFibGVMYW5ndWFnZXMubWFwKChsYW5nKSA9PiBsYW5nLnRvTG93ZXJDYXNlKCkpO1xuICAgIGlmICghbm9ybWFsaXplZC5pbmNsdWRlcyhzZWxlY3RlZExhbmd1YWdlLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICBzZXRTZWxlY3RlZExhbmd1YWdlKG5vcm1hbGl6ZWRbMF0pO1xuICAgIH1cbiAgfSwgW2FnZW50QXZhaWxhYmxlTGFuZ3VhZ2VzLCBsYW5ndWFnZSwgc2VsZWN0ZWRMYW5ndWFnZV0pO1xuXG4gIGNvbnN0IGF1ZGlvU2VydmljZSA9IHVzZVJlZjxBdWRpb1NlcnZpY2UgfCBudWxsPihudWxsKTtcbiAgY29uc3QgcmVDYXB0Y2hhVG9rZW5SZWYgPSB1c2VSZWY8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIGNvbnN0IGhhc1VzZXJNZXNzYWdlcyA9IG1lc3NhZ2VzLnNvbWUobWVzc2FnZSA9PiBtZXNzYWdlLnNwZWFrZXIgPT09ICdjdXN0b21lcicpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYXVkaW9TZXJ2aWNlLmN1cnJlbnQgPSBuZXcgQXVkaW9TZXJ2aWNlKHsgYmFzZVVybCwgd2Vic29ja2V0VXJsLCBhcGlLZXkgfSk7XG4gIH0sIFtiYXNlVXJsLCB3ZWJzb2NrZXRVcmwsIGFwaUtleV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYXVkaW9TZXJ2aWNlLmN1cnJlbnQ/LnNldEd1ZXN0VG9rZW4oZ3Vlc3RUb2tlbiA/PyBudWxsKTtcbiAgfSwgW2d1ZXN0VG9rZW5dKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChtb2RlID09PSAnZnVsbHNjcmVlbicgJiYgIWlzRmxvYXRpbmdPcGVuKSB7XG4gICAgICBzZXRJc0Zsb2F0aW5nT3Blbih0cnVlKTtcbiAgICB9XG4gIH0sIFttb2RlLCBpc0Zsb2F0aW5nT3Blbl0pO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgdXBkYXRlSGVhZGVySGVpZ2h0ID0gKCkgPT4ge1xuICAgICAgc2V0SGVhZGVySGVpZ2h0KGhlYWRlclJlZi5jdXJyZW50Py5vZmZzZXRIZWlnaHQgfHwgNTYpO1xuICAgIH07XG4gICAgdXBkYXRlSGVhZGVySGVpZ2h0KCk7XG4gICAgY29uc3QgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gdXBkYXRlSGVhZGVySGVpZ2h0KCkpO1xuICAgIGlmIChoZWFkZXJSZWYuY3VycmVudCkge1xuICAgICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShoZWFkZXJSZWYuY3VycmVudCk7XG4gICAgfVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB1cGRhdGVIZWFkZXJIZWlnaHQpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICByZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlSGVhZGVySGVpZ2h0KTtcbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNBZ2VudFR5cGluZykge1xuICAgICAgc2V0U2hvd0JhY2tsaWdodCh0cnVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHNldFNob3dCYWNrbGlnaHQoZmFsc2UpLCA0MjApO1xuICAgIHJldHVybiAoKSA9PiBjbGVhclRpbWVvdXQodGltZXIpO1xuICB9LCBbaXNBZ2VudFR5cGluZ10pO1xuXG4gIGNvbnN0IHN1Ym1pdE1lc3NhZ2UgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKGlucHV0VmFsdWUudHJpbSgpID09PSAnJyAmJiBhdHRhY2htZW50cy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBpZiAoaXNBZ2VudFR5cGluZykgcmV0dXJuO1xuICAgIGNvbnN0IHRleHRUb1NlbmQgPSBpbnB1dFZhbHVlO1xuICAgIGNvbnN0IGZpbGVzVG9VcGxvYWQgPSBhdHRhY2htZW50cy5tYXAoYSA9PiBhLmZpbGUpO1xuXG4gICAgc2V0SW5wdXRWYWx1ZSgnJyk7XG4gICAgc2V0QXR0YWNobWVudHMoW10pO1xuICAgIGlmIChmaWxlSW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgZmlsZUlucHV0UmVmLmN1cnJlbnQudmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZXh0cmFNZXRhZGF0YTogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gICAgICBpZiAoc2VsZWN0ZWRGYXFRdWVyeSkge1xuICAgICAgICBleHRyYU1ldGFkYXRhLmZhcV9xdWVyeSA9IHNlbGVjdGVkRmFxUXVlcnk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaWxlc1RvVXBsb2FkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZXh0cmFNZXRhZGF0YS5hdHRhY2htZW50cyA9IGF0dGFjaG1lbnRzLm1hcChhID0+IGEuYXR0YWNobWVudCk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHNlbmRNZXNzYWdlKHRleHRUb1NlbmQsIGZpbGVzVG9VcGxvYWQsIGV4dHJhTWV0YWRhdGEsIHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0ZXh0QXJlYVJlZi5jdXJyZW50Py5mb2N1cygpLCAwKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gYXN5bmMgKGU6IFJlYWN0LkZvcm1FdmVudCkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBhd2FpdCBzdWJtaXRNZXNzYWdlKCk7XG4gIH07XG5cbiAgY29uc3QgZ2V0Rm9ybU5vZGVJZCA9IChtZXNzYWdlSW5kZXg6IG51bWJlcik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gICAgY29uc3QgbXNnID0gbWVzc2FnZXNbbWVzc2FnZUluZGV4XTtcbiAgICBpZiAobXNnPy50eXBlID09PSAnZm9ybV9yZXF1ZXN0JyAmJiBtc2cudGV4dCkge1xuICAgICAgdHJ5IHsgcmV0dXJuIEpTT04ucGFyc2UobXNnLnRleHQpLm5vZGVfaWQ7IH0gY2F0Y2ggeyAvKiBza2lwICovIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVGb3JtU3VibWl0ID0gYXN5bmMgKGZvcm1EYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgbWVzc2FnZUluZGV4OiBudW1iZXIpID0+IHtcbiAgICBpZiAoc3VibWl0dGluZ0Zvcm1JbmRleCAhPT0gbnVsbCB8fCBpc0FnZW50VHlwaW5nKSByZXR1cm47XG4gICAgc2V0U3VibWl0dGluZ0Zvcm1JbmRleChtZXNzYWdlSW5kZXgpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdW1tYXJ5VGV4dCA9IE9iamVjdC5lbnRyaWVzKGZvcm1EYXRhKVxuICAgICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IGAke2tleX06ICR7dmFsdWV9YClcbiAgICAgICAgLmpvaW4oJywgJyk7XG4gICAgICBjb25zdCBub2RlSWQgPSBnZXRGb3JtTm9kZUlkKG1lc3NhZ2VJbmRleCk7XG4gICAgICBhd2FpdCBzZW5kTWVzc2FnZShzdW1tYXJ5VGV4dCwgW10sIHtcbiAgICAgICAgaHVtYW5faW5fdGhlX2xvb3BfZnJvbV9mb3JtOiBmb3JtRGF0YSxcbiAgICAgICAgLi4uKG5vZGVJZCAmJiB7IGh1bWFuX2luX3RoZV9sb29wX25vZGVfaWQ6IG5vZGVJZCB9KSxcbiAgICAgIH0sIHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQpO1xuICAgICAgc2V0U3VibWl0dGVkRm9ybXMoKHByZXYpID0+IG5ldyBTZXQocHJldikuYWRkKG1lc3NhZ2VJbmRleCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0U3VibWl0dGluZ0Zvcm1JbmRleChudWxsKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlRm9ybUNhbmNlbCA9IGFzeW5jIChtZXNzYWdlSW5kZXg6IG51bWJlcikgPT4ge1xuICAgIGlmIChzdWJtaXR0aW5nRm9ybUluZGV4ICE9PSBudWxsIHx8IGlzQWdlbnRUeXBpbmcpIHJldHVybjtcbiAgICBzZXRTdWJtaXR0aW5nRm9ybUluZGV4KG1lc3NhZ2VJbmRleCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG5vZGVJZCA9IGdldEZvcm1Ob2RlSWQobWVzc2FnZUluZGV4KTtcbiAgICAgIGF3YWl0IHNlbmRNZXNzYWdlKCdTa2lwcGVkJywgW10sIHtcbiAgICAgICAgaHVtYW5faW5fdGhlX2xvb3BfZnJvbV9mb3JtOiB7fSxcbiAgICAgICAgaHVtYW5faW5fdGhlX2xvb3BfY2FuY2VsbGVkOiB0cnVlLFxuICAgICAgICAuLi4obm9kZUlkICYmIHsgaHVtYW5faW5fdGhlX2xvb3Bfbm9kZV9pZDogbm9kZUlkIH0pLFxuICAgICAgfSwgcmVDYXB0Y2hhVG9rZW5SZWYuY3VycmVudCk7XG4gICAgICBzZXRTdWJtaXR0ZWRGb3JtcygocHJldikgPT4gbmV3IFNldChwcmV2KS5hZGQobWVzc2FnZUluZGV4KSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIGlnbm9yZVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRTdWJtaXR0aW5nRm9ybUluZGV4KG51bGwpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVRdWlja0FjdGlvbiA9IGFzeW5jICh0ZXh0OiBzdHJpbmcpID0+IHtcbiAgICBpZiAoIXRleHQudHJpbSgpKSByZXR1cm47XG4gICAgaWYgKGlzQWdlbnRUeXBpbmcpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZXh0cmFNZXRhZGF0YSA9IHNlbGVjdGVkRmFxUXVlcnkgPyB7IGZhcV9xdWVyeTogc2VsZWN0ZWRGYXFRdWVyeSB9IDogdW5kZWZpbmVkO1xuICAgICAgYXdhaXQgc2VuZE1lc3NhZ2UodGV4dCwgW10sIGV4dHJhTWV0YWRhdGEsIHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBpZ25vcmUgcXVpY2sgYWN0aW9uIGVycm9ycyB0byBhdm9pZCBpbnRlcnJ1cHRpbmcgdGhlIGZsb3dcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU2NoZWR1bGVDb25maXJtID0gYXN5bmMgKHNjaGVkdWxlOiBTY2hlZHVsZUl0ZW0pID0+IHtcbiAgICBjb25zdCBzdW1tYXJ5ID0gYFNjaGVkdWxlIGNvbmZpcm1lZCB3aXRoICR7c2NoZWR1bGUucmVzdGF1cmFudHMubGVuZ3RofSByZXN0YXVyYW50c2A7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHNlbmRNZXNzYWdlKHN1bW1hcnksIFtdLCB7IGNvbmZpcm1TY2hlZHVsZTogSlNPTi5zdHJpbmdpZnkoc2NoZWR1bGUpIH0sIHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gIH07XG5cbiAgLy8gTmV1dHJhbCwgdXNlci1mYWNpbmcgbm90aWNlIHNob3duIHdoZW4gYSBsaXZlIGNhbGwgY2FuJ3Qgc3RhcnQgLyBmYWlscy4gVGhlXG4gIC8vIG1lc3NhZ2UgaXMgYWxyZWFkeSBuZXV0cmFsICh0aGUgYmFja2VuZCBuZXZlciBzZW5kcyBpbnRlcm5hbCBjb25maWcgZGV0YWlsKSwgc29cbiAgLy8gaXQncyBzYWZlIGZvciBwdWJsaWMgd2lkZ2V0cyDigJQgaXQganVzdCBhdm9pZHMgYSBjb25mdXNpbmcgc2lsZW50IGNsb3NlLlxuICBjb25zdCBbbGl2ZVZvaWNlTm90aWNlLCBzZXRMaXZlVm9pY2VOb3RpY2VdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3QgaGFuZGxlVm9pY2VFcnJvciA9IChlcnJvcjogRXJyb3IpID0+IHtcbiAgICBzZXRMaXZlVm9pY2VOb3RpY2UoZXJyb3IubWVzc2FnZSB8fCAnVm9pY2UgaXMgY3VycmVudGx5IHVuYXZhaWxhYmxlJyk7XG4gICAgaWYgKG9uRXJyb3IpIHtcbiAgICAgIG9uRXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfTtcblxuICAvLyBWb2ljZS1vbmx5IG1vZGUgaXMgZHJpdmVuIHB1cmVseSBieSB0aGUgYWdlbnQ6IGl0J3Mgb24gd2hlbiB0aGUgYWdlbnQnc1xuICAvLyB3b3JrZmxvdyBjb250YWlucyBhIFZvaWNlIEFnZW50IG5vZGUgKGF1dG8tZGV0ZWN0ZWQgYnkgdGhlIGJhY2tlbmQgYW5kXG4gIC8vIHN1cmZhY2VkIHRocm91Z2ggYGFnZW50TGl2ZVZvaWNlRW5hYmxlZGApLiBObyBpbnRlZ3JhdG9yIHByb3AgaXMgaW52b2x2ZWQuXG4gIGNvbnN0IGxpdmVWb2ljZUVuYWJsZWQgPSBhZ2VudExpdmVWb2ljZUVuYWJsZWQ7XG4gIC8vIFdoZXRoZXIgbGl2ZSB2b2ljZSBjYW4gYWN0dWFsbHkgcnVuIChhIEdlbWluaSBwcm92aWRlciB3aXRoIGEga2V5IGlzIGNvbmZpZ3VyZWQpLlxuICAvLyBXaGVuIGZhbHNlIHdlIGtlZXAgdm9pY2Utb25seSBtb2RlIGJ1dCBkaXNhYmxlIHRoZSBjYWxsIGNvbnRyb2wgd2l0aCBhIG5ldXRyYWxcbiAgLy8gbWVzc2FnZSDigJQgdGhlIHNwZWNpZmljIHJlYXNvbiBzdGF5cyBzZXJ2ZXItc2lkZSwgbmV2ZXIgc2hvd24gdG8gcHVibGljIHVzZXJzLlxuICBjb25zdCBsaXZlVm9pY2VSZWFkeSA9IGFnZW50TGl2ZVZvaWNlUmVhZHk7XG5cbiAgLy8gTGl2ZSAoY29udGludW91cykgdm9pY2UgY29udmVyc2F0aW9uIGFnYWluc3QgdGhlIGFnZW50J3MgVm9pY2UgQWdlbnQgbm9kZS5cbiAgLy8gYGxpdmVDYXB0aW9uYCBpcyB0aGUgaW4tcHJvZ3Jlc3MgdHVybiAoc3RyZWFtcyBhcyB5b3Ugc3BlYWspOyBgbGl2ZVR1cm5zYCBhcmVcbiAgLy8gY29tcGxldGVkIHR1cm5zIGtlcHQgbG9jYWxseSBzbyB0aGV5IHN0YXkgb24gc2NyZWVuIGFjcm9zcyB0dXJucy4gYGNyZWF0ZVRpbWVgXG4gIC8vIGlzIGNhcHR1cmVkIG9uY2UgcGVyIHR1cm4gc28gdGhlIGJ1YmJsZSB0aW1lc3RhbXAgZG9lc24ndCBqaXR0ZXIgb24gcmUtcmVuZGVyLlxuICBjb25zdCBbbGl2ZUNhcHRpb24sIHNldExpdmVDYXB0aW9uXSA9IHVzZVN0YXRlPExpdmVUdXJuPih7IHVzZXI6ICcnLCBhZ2VudDogJycsIGNyZWF0ZVRpbWU6IDAgfSk7XG4gIGNvbnN0IFtsaXZlVHVybnMsIHNldExpdmVUdXJuc10gPSB1c2VTdGF0ZTxMaXZlVHVybltdPihbXSk7XG4gIGNvbnN0IGxpdmVWb2ljZSA9IHVzZUxpdmVWb2ljZVNlc3Npb24oe1xuICAgIGJhc2VVcmwsXG4gICAgYXBpS2V5LFxuICAgIGd1ZXN0VG9rZW4sXG4gICAgdGVuYW50LFxuICAgIGFnZW50SWQsXG4gICAgY29udmVyc2F0aW9uSWQsXG4gICAgbGFuZ3VhZ2U6IHJlc29sdmVkTGFuZ3VhZ2UsXG4gICAgb25FcnJvcjogaGFuZGxlVm9pY2VFcnJvcixcbiAgICBvbklucHV0VHJhbnNjcmlwdDogKHRleHQpID0+XG4gICAgICBzZXRMaXZlQ2FwdGlvbigoYykgPT4gKHsgLi4uYywgdXNlcjogYy51c2VyICsgdGV4dCwgY3JlYXRlVGltZTogYy5jcmVhdGVUaW1lIHx8IG5vd1NlYygpIH0pKSxcbiAgICBvbk91dHB1dFRyYW5zY3JpcHQ6ICh0ZXh0KSA9PlxuICAgICAgc2V0TGl2ZUNhcHRpb24oKGMpID0+ICh7IC4uLmMsIGFnZW50OiBjLmFnZW50ICsgdGV4dCwgY3JlYXRlVGltZTogYy5jcmVhdGVUaW1lIHx8IG5vd1NlYygpIH0pKSxcbiAgICBvblR1cm5Db21wbGV0ZTogKHR1cm4pID0+IHtcbiAgICAgIC8vIENvbW1pdCB0aGUgZmluaXNoZWQgdHVybiBzbyBpdCBzdGF5cyB2aXNpYmxlOyBjbGVhciB0aGUgaW4tcHJvZ3Jlc3MgY2FwdGlvbi5cbiAgICAgIHNldExpdmVUdXJucygocHJldikgPT4gWy4uLnByZXYsIHsgdXNlcjogdHVybi50cmFuc2NyaXB0LCBhZ2VudDogdHVybi5yZXNwb25zZSwgY3JlYXRlVGltZTogbm93U2VjKCkgfV0pO1xuICAgICAgc2V0TGl2ZUNhcHRpb24oeyB1c2VyOiAnJywgYWdlbnQ6ICcnLCBjcmVhdGVUaW1lOiAwIH0pO1xuICAgIH0sXG4gIH0pO1xuXG4gIC8vIEZ1bGwgY29udmVyc2F0aW9uIHJlc2V0OiBuZXcgdGhyZWFkICsgY2xlYXJlZCBpbnB1dC9hdHRhY2htZW50cy9mb3JtcyBhbmQgYW55XG4gIC8vIGxpdmUtdm9pY2UgdHJhbnNjcmlwdC4gU2hhcmVkIGJ5IHRoZSByZXNldC1jb25maXJtIGRpYWxvZyBhbmQgdGhlIGVuZC1jYWxsIGJ1dHRvbi5cbiAgY29uc3QgcGVyZm9ybVJlc2V0ID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIHNldElucHV0VmFsdWUoJycpO1xuICAgIGNsZWFyQXR0YWNobWVudHMoKTtcbiAgICBhd2FpdCByZXNldENvbnZlcnNhdGlvbihyZUNhcHRjaGFUb2tlblJlZi5jdXJyZW50KTtcbiAgICBzZXRTZWxlY3RlZEZhcVF1ZXJ5KG51bGwpO1xuICAgIHNldFN1Ym1pdHRlZEZvcm1zKG5ldyBTZXQoKSk7XG4gICAgc2V0U3VibWl0dGluZ0Zvcm1JbmRleChudWxsKTtcbiAgICBzZXRMaXZlVHVybnMoW10pO1xuICB9LCBbY2xlYXJBdHRhY2htZW50cywgcmVzZXRDb252ZXJzYXRpb25dKTtcblxuICAvLyBTdGFydGluZyBhIGZyZXNoIGNhbGwgY2xlYXJzIHRoZSBwcmV2aW91cyBjYWxsJ3MgdHJhbnNjcmlwdCBidWJibGVzICsgY2FwdGlvbi5cbiAgY29uc3Qgc3RhcnRMaXZlQ2FsbCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRMaXZlVm9pY2VOb3RpY2UobnVsbCk7XG4gICAgc2V0TGl2ZUNhcHRpb24oeyB1c2VyOiAnJywgYWdlbnQ6ICcnLCBjcmVhdGVUaW1lOiAwIH0pO1xuICAgIHNldExpdmVUdXJucyhbXSk7XG4gICAgbGl2ZVZvaWNlLnN0YXJ0KCk7XG4gIH0sIFtsaXZlVm9pY2VdKTtcbiAgLy8gRW5kaW5nIGEgY2FsbCBzdG9wcyB0aGUgYXVkaW8gc3RyZWFtIGFuZCByZXNldHMgdGhlIGNvbnZlcnNhdGlvbiDigJQgc2FtZSBhcyB0aGVcbiAgLy8gXCJyZXNldCBjb252ZXJzYXRpb25cIiBhY3Rpb24g4oCUIHNvIHRoZSBuZXh0IGNhbGwgc3RhcnRzIGZyb20gYSBjbGVhbiB0aHJlYWQuXG4gIGNvbnN0IGVuZExpdmVDYWxsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGxpdmVWb2ljZS5zdG9wKCk7XG4gICAgc2V0TGl2ZUNhcHRpb24oeyB1c2VyOiAnJywgYWdlbnQ6ICcnLCBjcmVhdGVUaW1lOiAwIH0pO1xuICAgIHZvaWQgcGVyZm9ybVJlc2V0KCk7XG4gIH0sIFtsaXZlVm9pY2UsIHBlcmZvcm1SZXNldF0pO1xuXG4gIC8vIEtlZXAgdGhlIGxpdmUgdHJhbnNjcmlwdCBpbiB2aWV3IGFzIGl0IGdyb3dzICh0aGUgc2Nyb2xsIG1hbmFnZXIgb25seSByZWFjdHNcbiAgLy8gdG8gY29tbWl0dGVkIGNoYXQgbWVzc2FnZXMsIG5vdCB0aGVzZSBsb2NhbCBsaXZlIGJ1YmJsZXMpLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbGl2ZVZvaWNlLmlzQWN0aXZlKSByZXR1cm47XG4gICAgY29uc3QgZWwgPSBjaGF0Q29udGFpbmVyUmVmLmN1cnJlbnQ7XG4gICAgaWYgKGVsKSBlbC5zY3JvbGxUb3AgPSBlbC5zY3JvbGxIZWlnaHQ7XG4gIH0sIFtsaXZlQ2FwdGlvbiwgbGl2ZVR1cm5zLCBsaXZlVm9pY2UuaXNBY3RpdmUsIGNoYXRDb250YWluZXJSZWZdKTtcblxuICAvLyBSZW5kZXIgYSBzaW5nbGUgbGl2ZS12b2ljZSBidWJibGUgKGNvbW1pdHRlZCB0dXJuIG9yIHN0cmVhbWluZyBjYXB0aW9uKSBhcyBhblxuICAvLyBvcmRpbmFyeSBjaGF0IG1lc3NhZ2UsIHNvIGl0IGxvb2tzIGlkZW50aWNhbCB0byB0ZXh0LW1vZGUgYnViYmxlcy5cbiAgY29uc3QgcmVuZGVyTGl2ZUJ1YmJsZSA9IChcbiAgICBzcGVha2VyOiAnY3VzdG9tZXInIHwgJ2FnZW50JyxcbiAgICB0ZXh0OiBzdHJpbmcsXG4gICAgY3JlYXRlVGltZTogbnVtYmVyLFxuICAgIGtleT86IHN0cmluZyxcbiAgKSA9PiAoXG4gICAgPENoYXRNZXNzYWdlQ29tcG9uZW50XG4gICAgICBrZXk9e2tleX1cbiAgICAgIG1lc3NhZ2U9e3sgY3JlYXRlX3RpbWU6IGNyZWF0ZVRpbWUsIHN0YXJ0X3RpbWU6IDAsIGVuZF90aW1lOiAwLjAxLCBzcGVha2VyLCB0ZXh0IH19XG4gICAgICB0aGVtZT17dGhlbWV9XG4gICAgICBlbmFibGVUeXBld3JpdGVyPXtmYWxzZX1cbiAgICAgIHRyYW5zbGF0aW9ucz17dHJhbnNsYXRpb25zfVxuICAgICAgbGFuZ3VhZ2U9e3Jlc29sdmVkTGFuZ3VhZ2V9XG4gICAgICBhZ2VudE5hbWU9e2FnZW50TmFtZX1cbiAgICAvPlxuICApO1xuXG4gIGNvbnN0IHBsYXlSZXNwb25zZUF1ZGlvID0gYXN5bmMgKHRleHQ6IHN0cmluZykgPT4ge1xuICAgIGlmICghYXVkaW9TZXJ2aWNlLmN1cnJlbnQgfHwgaXNQbGF5aW5nQXVkaW8pIHJldHVybjtcblxuICAgIHRyeSB7XG4gICAgICBzZXRJc1BsYXlpbmdBdWRpbyh0cnVlKTtcbiAgICAgIGNvbnN0IGF1ZGlvQmxvYiA9IGF3YWl0IGF1ZGlvU2VydmljZS5jdXJyZW50LnRleHRUb1NwZWVjaCh0ZXh0KTtcbiAgICAgIGF3YWl0IGF1ZGlvU2VydmljZS5jdXJyZW50LnBsYXlBdWRpbyhhdWRpb0Jsb2IpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAob25FcnJvcikge1xuICAgICAgICBvbkVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0SXNQbGF5aW5nQXVkaW8oZmFsc2UpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBhdWRpb1VybEJ1aWxkZXIgPSB1c2VDYWxsYmFjaygobWVzc2FnZUlkOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gYCR7YmFzZVVybH0vYXBpL2NvbnZlcnNhdGlvbnMvJHtjb252ZXJzYXRpb25JZH0vbWVzc2FnZXMvJHttZXNzYWdlSWR9L2F1ZGlvYDtcbiAgfSwgW2Jhc2VVcmwsIGNvbnZlcnNhdGlvbklkXSk7XG5cbiAgY29uc3QgYXVkaW9IZWFkZXJzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgaDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGlmIChndWVzdFRva2VuKSB7XG4gICAgICBoWydBdXRob3JpemF0aW9uJ10gPSBgQmVhcmVyICR7Z3Vlc3RUb2tlbn1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBoWyd4LWFwaS1rZXknXSA9IGFwaUtleTtcbiAgICB9XG4gICAgaWYgKHRlbmFudCkgaFsneC10ZW5hbnQtaWQnXSA9IHRlbmFudDtcbiAgICByZXR1cm4gaDtcbiAgfSwgW2FwaUtleSwgdGVuYW50LCBndWVzdFRva2VuXSk7XG5cbiAgY29uc3QgW2F1dG9QbGF5QXVkaW9NZXNzYWdlSWQsIHNldEF1dG9QbGF5QXVkaW9NZXNzYWdlSWRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IHByZXZNZXNzYWdlQ291bnRSZWYgPSB1c2VSZWY8bnVtYmVyPigwKTtcbiAgY29uc3QgaW5pdGlhbExvYWREb25lUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXVzZUF1ZGlvIHx8ICFtZXNzYWdlcy5sZW5ndGgpIHJldHVybjtcbiAgICBjb25zdCBwcmV2Q291bnQgPSBwcmV2TWVzc2FnZUNvdW50UmVmLmN1cnJlbnQ7XG4gICAgcHJldk1lc3NhZ2VDb3VudFJlZi5jdXJyZW50ID0gbWVzc2FnZXMubGVuZ3RoO1xuICAgIGlmICghaW5pdGlhbExvYWREb25lUmVmLmN1cnJlbnQpIHtcbiAgICAgIGluaXRpYWxMb2FkRG9uZVJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2VzLmxlbmd0aCA8PSBwcmV2Q291bnQpIHJldHVybjtcbiAgICBjb25zdCBsYXN0ID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV07XG4gICAgaWYgKGxhc3Quc3BlYWtlciA9PT0gJ2FnZW50JyAmJiBsYXN0LnR5cGUgPT09ICdhdWRpbycgJiYgbGFzdC5tZXNzYWdlX2lkKSB7XG4gICAgICBzZXRBdXRvUGxheUF1ZGlvTWVzc2FnZUlkKGxhc3QubWVzc2FnZV9pZCk7XG4gICAgfVxuICB9LCBbbWVzc2FnZXMsIHVzZUF1ZGlvXSk7XG5cbiAgY29uc3QgaGFuZGxlUXVlcnlDbGljayA9IGFzeW5jIChxdWVyeTogc3RyaW5nKSA9PiB7XG4gICAgaWYgKGlzQWdlbnRUeXBpbmcgfHwgaXNMb2FkaW5nKSByZXR1cm47XG5cbiAgICBzZXRTZWxlY3RlZEZhcVF1ZXJ5KHF1ZXJ5KTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzZW5kTWVzc2FnZShxdWVyeSwgW10sIHsgZmFxX3F1ZXJ5OiBxdWVyeSB9LCByZUNhcHRjaGFUb2tlblJlZi5jdXJyZW50KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gaWdub3JlXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVN0YXJ0Q29udmVyc2F0aW9uID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmIChpc0xvYWRpbmcpIHJldHVybjtcblxuICAgIHNldElucHV0VmFsdWUoJycpO1xuICAgIGNsZWFyQXR0YWNobWVudHMoKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzdGFydENvbnZlcnNhdGlvbihyZUNhcHRjaGFUb2tlblJlZi5jdXJyZW50KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc3RhcnRpbmcgY29udmVyc2F0aW9uJywgZXJyb3IpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVNZW51Q2xpY2sgPSAoKSA9PiB7XG4gICAgc2V0U2hvd01lbnUocHJldiA9PiAhcHJldik7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUmVzZXRDbGljayA9ICgpID0+IHtcbiAgICBzZXRTaG93TWVudShmYWxzZSk7XG4gICAgc2V0U2hvd1Jlc2V0Q29uZmlybSh0cnVlKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVDb25maXJtUmVzZXQgPSAoKSA9PiB7XG4gICAgc2V0U2hvd1Jlc2V0Q29uZmlybShmYWxzZSk7XG4gICAgLy8gZW5kTGl2ZUNhbGwgc3RvcHMgYW55IGFjdGl2ZSBjYWxsIGFuZCBydW5zIHRoZSBmdWxsIHJlc2V0OyBoYXJtbGVzcyBpZiBub1xuICAgIC8vIGNhbGwgaXMgYWN0aXZlLCBzbyBib3RoIGVudHJ5IHBvaW50cyBzaGFyZSBvbmUgY29kZSBwYXRoLlxuICAgIGVuZExpdmVDYWxsKCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ2FuY2VsUmVzZXQgPSAoKSA9PiB7XG4gICAgc2V0U2hvd1Jlc2V0Q29uZmlybShmYWxzZSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlTGFuZ3VhZ2VDaGFuZ2UgPSAobGFuZzogc3RyaW5nKSA9PiB7XG4gICAgc2V0U2VsZWN0ZWRMYW5ndWFnZShsYW5nKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVSZUNhcHRjaGFWZXJpZnkgPSB1c2VDYWxsYmFjaygodG9rZW46IHN0cmluZykgPT4ge1xuICAgIHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQgPSB0b2tlbjtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGFsbExhbmd1YWdlcyA9IFtcbiAgICB7IGNvZGU6ICdlbicsIG5hbWU6ICdFbmdsaXNoJyB9LFxuICAgIHsgY29kZTogJ2VzJywgbmFtZTogJ0VzcGHDsW9sJyB9LFxuICAgIHsgY29kZTogJ2ZyJywgbmFtZTogJ0ZyYW7Dp2FpcycgfSxcbiAgICB7IGNvZGU6ICdkZScsIG5hbWU6ICdEZXV0c2NoJyB9LFxuICAgIHsgY29kZTogJ2l0JywgbmFtZTogJ0l0YWxpYW5vJyB9LFxuICAgIHsgY29kZTogJ3B0JywgbmFtZTogJ1BvcnR1Z3XDqnMnIH0sXG4gICAgeyBjb2RlOiAnemgnLCBuYW1lOiAn5Lit5paHJyB9LFxuICBdO1xuICBjb25zdCBhdmFpbGFibGVMYW5ndWFnZXMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhZ2VudEF2YWlsYWJsZUxhbmd1YWdlcykpIHtcbiAgICAgIGNvbnN0IGFsbG93ZWQgPSBuZXcgU2V0KFxuICAgICAgICBhZ2VudEF2YWlsYWJsZUxhbmd1YWdlcy5tYXAoKGxhbmcpID0+IGxhbmcudG9Mb3dlckNhc2UoKSksXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFsbExhbmd1YWdlcy5maWx0ZXIoKGxhbmcpID0+IGFsbG93ZWQuaGFzKGxhbmcuY29kZSkpO1xuICAgIH1cbiAgICByZXR1cm4gYWxsTGFuZ3VhZ2VzO1xuICB9LCBbYWdlbnRBdmFpbGFibGVMYW5ndWFnZXNdKTtcbiAgY29uc3QgaGFzTGFuZ3VhZ2VPcHRpb25zID0gYXZhaWxhYmxlTGFuZ3VhZ2VzLmxlbmd0aCA+IDA7XG5cbiAgLy8gUmVzb2x2ZSB0aGVtZSB2YWx1ZXNcbiAgY29uc3QgdGhlbWVQYXJhbXMgPSByZXNvbHZlVGhlbWUodGhlbWUpO1xuICBjb25zdCB7IHByaW1hcnlDb2xvciwgYmFja2dyb3VuZENvbG9yLCB0ZXh0Q29sb3IsIGZvbnRGYW1pbHksIGZvbnRTaXplIH0gPSB0aGVtZVBhcmFtcztcbiAgY29uc3QgZm9udFNpemVOdW1iZXIgPSB0eXBlb2YgZm9udFNpemUgPT09ICdzdHJpbmcnID8gcGFyc2VJbnQoZm9udFNpemUsIDEwKSA6ICh0eXBlb2YgZm9udFNpemUgPT09ICdudW1iZXInID8gZm9udFNpemUgOiAxNCk7XG5cbiAgY29uc3QgcG9zaXRpb24gPSBmbG9hdGluZ0NvbmZpZy5wb3NpdGlvbiB8fCAnYm90dG9tLXJpZ2h0JztcbiAgY29uc3Qgb2Zmc2V0ID0gZmxvYXRpbmdDb25maWcub2Zmc2V0IHx8IHsgeDogMjAsIHk6IDIwIH07XG4gIGNvbnN0IG9mZnNldFggPSBvZmZzZXQueCB8fCAyMDtcbiAgY29uc3Qgb2Zmc2V0WSA9IG9mZnNldC55IHx8IDIwO1xuXG4gIGNvbnN0IGlzRmxvYXRpbmdEb2NrZWQgPSBtb2RlID09PSAnZmxvYXRpbmcnICYmICFpc0Z1bGxzY3JlZW47XG5cbiAgLy8gQ29tcHV0ZWQgc3R5bGVzXG4gIGNvbnN0IGNvbnRhaW5lclN0eWxlID0gZ2V0Q29udGFpbmVyU3R5bGUoeyBpc0Z1bGxzY3JlZW4sIGlzRmxvYXRpbmdEb2NrZWQsIHdpbmRvd1dpZHRoLCB0OiB0aGVtZVBhcmFtcyB9KTtcbiAgY29uc3QgaGVhZGVyU3R5bGUgPSBnZXRIZWFkZXJTdHlsZSh0aGVtZVBhcmFtcyk7XG4gIGNvbnN0IGhlYWRlclRpdGxlU3R5bGUgPSBnZXRIZWFkZXJUaXRsZVN0eWxlKGZvbnRGYW1pbHkpO1xuICBjb25zdCBoZWFkZXJTdWJ0aXRsZVN0eWxlID0gZ2V0SGVhZGVyU3VidGl0bGVTdHlsZShmb250RmFtaWx5KTtcbiAgY29uc3QgbWVudVBvcHVwU3R5bGUgPSBnZXRNZW51UG9wdXBTdHlsZShiYWNrZ3JvdW5kQ29sb3IpO1xuICBjb25zdCBtZW51SXRlbVN0eWxlID0gZ2V0TWVudUl0ZW1TdHlsZSh0aGVtZVBhcmFtcyk7XG4gIGNvbnN0IGNvbnRlbnRDYXJkU3R5bGUgPSBnZXRDb250ZW50Q2FyZFN0eWxlKGJhY2tncm91bmRDb2xvcik7XG4gIGNvbnN0IHNlbmRCdXR0b25TdHlsZSA9IGdldFNlbmRCdXR0b25TdHlsZShwcmltYXJ5Q29sb3IpO1xuICBjb25zdCBwb3NzaWJsZVF1ZXJpZXNDb250YWluZXJTdHlsZSA9IGdldFBvc3NpYmxlUXVlcmllc0NvbnRhaW5lclN0eWxlKGZvbnRGYW1pbHkpO1xuICBjb25zdCBxdWVyeUJ1dHRvblN0eWxlID0gZ2V0UXVlcnlCdXR0b25TdHlsZSh0aGVtZVBhcmFtcyk7XG4gIGNvbnN0IGNvbmZpcm1PdmVybGF5U3R5bGUgPSBnZXRDb25maXJtT3ZlcmxheVN0eWxlKHNob3dSZXNldENvbmZpcm0pO1xuICBjb25zdCBjb25maXJtRGlhbG9nU3R5bGUgPSBnZXRDb25maXJtRGlhbG9nU3R5bGUodGhlbWVQYXJhbXMpO1xuICBjb25zdCBkaXNjbGFpbWVyU3R5bGUgPSBnZXREaXNjbGFpbWVyU3R5bGUoZm9udEZhbWlseSk7XG5cbiAgY29uc3QgdGV4dEFyZWFGb250U2l6ZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICh3aW5kb3dXaWR0aCA8PSA3NjgpIHtcbiAgICAgIHJldHVybiBNYXRoLm1heCgxNiwgZm9udFNpemVOdW1iZXIpICsgJ3B4JztcbiAgICB9XG4gICAgcmV0dXJuIGZvbnRTaXplO1xuICB9LCBbd2luZG93V2lkdGgsIGZvbnRTaXplLCBmb250U2l6ZU51bWJlcl0pO1xuXG4gIGNvbnN0IHRleHRBcmVhTGluZUhlaWdodCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHNpemUgPSB3aW5kb3dXaWR0aCA8PSA3NjggPyBNYXRoLm1heCgxNiwgZm9udFNpemVOdW1iZXIpIDogZm9udFNpemVOdW1iZXI7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoc2l6ZSAqIDEuNSk7XG4gIH0sIFt3aW5kb3dXaWR0aCwgZm9udFNpemVOdW1iZXJdKTtcblxuICBjb25zdCB0ZXh0QXJlYU1heEhlaWdodENhbGN1bGF0ZWQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gdGV4dEFyZWFMaW5lSGVpZ2h0ICogMztcbiAgfSwgW3RleHRBcmVhTGluZUhlaWdodF0pO1xuXG4gIGNvbnN0IHRleHRBcmVhU3R5bGUgPSBnZXRUZXh0QXJlYVN0eWxlKHtcbiAgICB0ZXh0QXJlYUZvbnRTaXplLFxuICAgIGZvbnRGYW1pbHksXG4gICAgdGV4dEFyZWFMaW5lSGVpZ2h0LFxuICAgIHRleHRBcmVhTWF4SGVpZ2h0Q2FsY3VsYXRlZCxcbiAgICB0ZXh0Q29sb3IsXG4gIH0pO1xuXG4gIGNvbnN0IGhhc1BlbmRpbmdGb3JtID0gbWVzc2FnZXMuc29tZSgobXNnLCBpZHgpID0+IHtcbiAgICBpZiAobXNnLnR5cGUgIT09ICdmb3JtX3JlcXVlc3QnIHx8IG1zZy5zcGVha2VyICE9PSAnYWdlbnQnKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICFzdWJtaXR0ZWRGb3Jtcy5oYXMoaWR4KTtcbiAgfSk7XG5cbiAgY29uc3QgcGVuZGluZ0Zvcm0gPSB1c2VNZW1vKCgpID0+IHtcbiAgICBmb3IgKGxldCBpID0gbWVzc2FnZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IG1zZyA9IG1lc3NhZ2VzW2ldO1xuICAgICAgaWYgKG1zZy50eXBlID09PSAnZm9ybV9yZXF1ZXN0JyAmJiBtc2cuc3BlYWtlciA9PT0gJ2FnZW50JyAmJiAhc3VibWl0dGVkRm9ybXMuaGFzKGkpKSB7XG4gICAgICAgIHRyeSB7IHJldHVybiB7IHNjaGVtYTogSlNPTi5wYXJzZShtc2cudGV4dCksIGluZGV4OiBpIH07IH1cbiAgICAgICAgY2F0Y2ggeyAvKiBza2lwICovIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sIFttZXNzYWdlcywgc3VibWl0dGVkRm9ybXNdKTtcblxuICBjb25zdCBpc1NlbmREaXNhYmxlZCA9IChpbnB1dFZhbHVlLnRyaW0oKSA9PT0gJycgJiYgYXR0YWNobWVudHMubGVuZ3RoID09PSAwKSB8fCBpc0FnZW50VHlwaW5nIHx8IGhhc1BlbmRpbmdGb3JtO1xuXG4gIGNvbnN0IGF1dG9SZXNpemVUZXh0QXJlYSA9ICgpID0+IHtcbiAgICBjb25zdCBlbCA9IHRleHRBcmVhUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFlbCkgcmV0dXJuO1xuICAgIGVsLnN0eWxlLmhlaWdodCA9ICdhdXRvJztcbiAgICBjb25zdCBuZXdIZWlnaHQgPSBNYXRoLm1pbihlbC5zY3JvbGxIZWlnaHQsIHRleHRBcmVhTWF4SGVpZ2h0Q2FsY3VsYXRlZCk7XG4gICAgZWwuc3R5bGUuaGVpZ2h0ID0gYCR7bmV3SGVpZ2h0fXB4YDtcbiAgICBlbC5zdHlsZS5vdmVyZmxvd1kgPSBlbC5zY3JvbGxIZWlnaHQgPiB0ZXh0QXJlYU1heEhlaWdodENhbGN1bGF0ZWQgPyAnYXV0bycgOiAnaGlkZGVuJztcbiAgfTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGF1dG9SZXNpemVUZXh0QXJlYSgpO1xuICB9LCBbaW5wdXRWYWx1ZSwgdGV4dEFyZWFNYXhIZWlnaHRDYWxjdWxhdGVkXSk7XG5cbiAgY29uc3Qgc2hvd0FnZW50RGlzY2xhaW1lciA9IEJvb2xlYW4oaW5wdXREaXNjbGFpbWVySHRtbCk7XG4gIGNvbnN0IGFnZW50RGlzY2xhaW1lckNvbnRlbnQgPSBzaG93QWdlbnREaXNjbGFpbWVyICYmIChcbiAgICA8c3BhbiBkYW5nZXJvdXNseVNldElubmVySFRNTD17eyBfX2h0bWw6IGlucHV0RGlzY2xhaW1lckh0bWwhIH19IC8+XG4gICk7XG5cbiAgY29uc3QgZmxvYXRpbmdDb250YWluZXJTdHlsZSA9IGdldEZsb2F0aW5nQ29udGFpbmVyU3R5bGUoe1xuICAgIG1vZGUsXG4gICAgaXNGdWxsc2NyZWVuLFxuICAgIHdpbmRvd1dpZHRoLFxuICAgIHdpbmRvd0hlaWdodCxcbiAgICBwb3NpdGlvbixcbiAgICBvZmZzZXRYLFxuICAgIG9mZnNldFksXG4gIH0pO1xuXG4gIGNvbnN0IHJlbmRlckxhbmd1YWdlU2VsZWN0b3IgPSAoKSA9PiB7XG4gICAgaWYgKCFTSE9XX0NIQVRfTEFOR1VBR0VfU0VMRUNUT1IpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICghaGFzTGFuZ3VhZ2VPcHRpb25zIHx8IChjb252ZXJzYXRpb25JZCAmJiAhaXNGaW5hbGl6ZWQpIHx8IG1lc3NhZ2VzLmxlbmd0aCA+IDAgfHwgaGFzVXNlck1lc3NhZ2VzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxMYW5ndWFnZVNlbGVjdG9yXG4gICAgICAgIGF2YWlsYWJsZUxhbmd1YWdlcz17YXZhaWxhYmxlTGFuZ3VhZ2VzfVxuICAgICAgICBzZWxlY3RlZExhbmd1YWdlPXtyZXNvbHZlZExhbmd1YWdlfVxuICAgICAgICBvbkxhbmd1YWdlQ2hhbmdlPXtoYW5kbGVMYW5ndWFnZUNoYW5nZX1cbiAgICAgICAgdHJhbnNsYXRpb25zPXt0cmFuc2xhdGlvbnN9XG4gICAgICAgIHRoZW1lPXt0aGVtZX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfTtcblxuICBjb25zdCByZW5kZXJXaXRoUmVDYXB0Y2hhID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFyZUNhcHRjaGFLZXkpIHtcbiAgICAgIHJldHVybiAoY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZSkgPT4gPD57Y2hpbGRyZW59PC8+O1xuICAgIH1cblxuICAgIHJldHVybiAoY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZSkgPT4gKFxuICAgICAgPEdvb2dsZVJlQ2FwdGNoYVByb3ZpZGVyIHJlQ2FwdGNoYUtleT17cmVDYXB0Y2hhS2V5IHx8ICcnfT5cbiAgICAgICAgPEdvb2dsZVJlQ2FwdGNoYVxuICAgICAgICAgIGFjdGlvbj1cImdlbmFzc2lzdF9jaGF0XCJcbiAgICAgICAgICBvblZlcmlmeT17aGFuZGxlUmVDYXB0Y2hhVmVyaWZ5fVxuICAgICAgICAgIHJlZnJlc2hSZUNhcHRjaGE9e2ZhbHNlfVxuICAgICAgICAvPlxuICAgICAgICA8PntjaGlsZHJlbn08Lz5cbiAgICAgIDwvR29vZ2xlUmVDYXB0Y2hhUHJvdmlkZXI+XG4gICAgKTtcbiAgfSwgW3JlQ2FwdGNoYUtleSwgaGFuZGxlUmVDYXB0Y2hhVmVyaWZ5XSk7XG5cbiAgY29uc3QgcmVuZGVyQ2hhdENvbXBvbmVudCA9ICgpID0+IChcbiAgICA8ZGl2IHN0eWxlPXtjb250YWluZXJTdHlsZX0gZGF0YS1nZW5hc3Npc3Qtcm9vdD1cInRydWVcIj5cbiAgICAgIDxzdHlsZT57Q1NTX0tFWUZSQU1FU308L3N0eWxlPlxuICAgICAgPGRpdiBzdHlsZT17aGVhZGVyU3R5bGV9IHJlZj17aGVhZGVyUmVmfT5cbiAgICAgICAgPGRpdiBzdHlsZT17bG9nb0NvbnRhaW5lclN0eWxlfT5cbiAgICAgICAgICA8aW1nIHNyYz17bG9nb1VybD8udHJpbSgpIHx8IGNoYXRMb2dvfSBhbHQ9XCJMb2dvXCIgc3R5bGU9e2xvZ29TdHlsZX0gLz5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXtoZWFkZXJUaXRsZUNvbnRhaW5lclN0eWxlfT5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e2hlYWRlclRpdGxlU3R5bGV9PntoZWFkZXJUaXRsZX08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e2hlYWRlclN1YnRpdGxlU3R5bGV9PlxuICAgICAgICAgICAgICB7ZGVzY3JpcHRpb24gPz8gdCgnaGVhZGVyLnN1YnRpdGxlJyl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAnOHB4JyB9fT5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBzdHlsZT17bWVudUJ1dHRvblN0eWxlfVxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlTWVudUNsaWNrfVxuICAgICAgICAgICAgdGl0bGU9e3QoJ21lbnUudGl0bGUnKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8TW9yZVZlcnRpY2FsIHNpemU9ezI0fSBjb2xvcj1cIiMxMTExMTFcIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIHttb2RlID09PSAnZmxvYXRpbmcnICYmIChcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgc3R5bGU9e21lbnVCdXR0b25TdHlsZX1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0SXNGbG9hdGluZ09wZW4oZmFsc2UpfVxuICAgICAgICAgICAgICB0aXRsZT1cIkNsb3NlIGNoYXRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8WCBzaXplPXsyNH0gY29sb3I9XCIjMTExMTExXCIgLz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICB7IW5vQ29sb3JBbmltYXRpb24gJiYgc2hvd0JhY2tsaWdodCAmJiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgICB0b3A6IE1hdGgubWF4KDAsIGhlYWRlckhlaWdodCAtIDE0KSxcbiAgICAgICAgICAgIGhlaWdodDogNDIsXG4gICAgICAgICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgICAgICAgICB6SW5kZXg6IDEsXG4gICAgICAgICAgICBvcGFjaXR5OiBpc0FnZW50VHlwaW5nID8gMSA6IDAsXG4gICAgICAgICAgICB0cmFuc2l0aW9uOiAnb3BhY2l0eSA0MjBtcyBlYXNlLWluLW91dCcsXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgICB0b3A6IDYsXG4gICAgICAgICAgICAgIGhlaWdodDogMzIsXG4gICAgICAgICAgICAgIHdpZHRoOiAnNzglJyxcbiAgICAgICAgICAgICAgZmlsdGVyOiAnYmx1cigyMnB4KScsXG4gICAgICAgICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgICAgICAgYGxpbmVhci1ncmFkaWVudCg5MGRlZywgJHtoZXhUb1JnYmEocHJpbWFyeUNvbG9yLCAwLjApfSAwJSwgJHtoZXhUb1JnYmEocHJpbWFyeUNvbG9yLCAwLjM1KX0gMTUlLCAke2hleFRvUmdiYShwcmltYXJ5Q29sb3IsIDAuNTUpfSA1MCUsICR7aGV4VG9SZ2JhKHByaW1hcnlDb2xvciwgMC4zNSl9IDg1JSwgJHtoZXhUb1JnYmEocHJpbWFyeUNvbG9yLCAwLjApfSAxMDAlKWAsXG4gICAgICAgICAgICAgIHdpbGxDaGFuZ2U6ICd0cmFuc2Zvcm0sIG9wYWNpdHknLFxuICAgICAgICAgICAgICBhbmltYXRpb246ICdnYS1iYWNrbGlnaHQtc3dlZXAyIDEuMnMgY3ViaWMtYmV6aWVyKDAuNCwwLjAsMC4yLDEpIGluZmluaXRlIGFsdGVybmF0ZSwgZ2EtYmFja2xpZ2h0LXB1bHNlIDIuNHMgZWFzZS1pbi1vdXQgaW5maW5pdGUnLFxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDE4LFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93TWVudSAmJiAoXG4gICAgICAgIDxkaXYgcmVmPXttZW51UmVmfSBzdHlsZT17bWVudVBvcHVwU3R5bGV9PlxuICAgICAgICAgIDxkaXYgc3R5bGU9e21lbnVJdGVtU3R5bGV9IG9uQ2xpY2s9e2hhbmRsZVJlc2V0Q2xpY2t9PlxuICAgICAgICAgICAgPFJlZnJlc2hDdyBzaXplPXsxNn0gLz5cbiAgICAgICAgICAgIHt0KCdtZW51LnJlc2V0Q29udmVyc2F0aW9uJyl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge21vZGUgIT09ICdmdWxsc2NyZWVuJyAmJiAoXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXttZW51SXRlbVN0eWxlfSBvbkNsaWNrPXtoYW5kbGVGdWxsc2NyZWVuVG9nZ2xlfT5cbiAgICAgICAgICAgICAge2lzRnVsbHNjcmVlbiA/IDxNaW5pbWl6ZTIgc2l6ZT17MTZ9IC8+IDogPE1heGltaXplMiBzaXplPXsxNn0gLz59XG4gICAgICAgICAgICAgIHt0KCdtZW51LmZ1bGxzY3JlZW4nKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgICAge2hhc0xhbmd1YWdlT3B0aW9ucyAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIHN0eWxlPXt7IC4uLm1lbnVJdGVtU3R5bGUsIHBvc2l0aW9uOiAncmVsYXRpdmUnLCBib3JkZXJCb3R0b206ICdub25lJyB9fVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgc2V0U2hvd0xhbmd1YWdlRHJvcGRvd24oIXNob3dMYW5ndWFnZURyb3Bkb3duKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEdsb2JlIHNpemU9ezE2fSAvPlxuICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBmbGV4OiAxIH19Pnt0KCdtZW51Lmxhbmd1YWdlJyl9PC9zcGFuPlxuICAgICAgICAgICAgICB7c2hvd0xhbmd1YWdlRHJvcGRvd24gJiYgKFxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgICAgICByaWdodDogMCxcbiAgICAgICAgICAgICAgICAgICAgdG9wOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpblRvcDogJzRweCcsXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogYmFja2dyb3VuZENvbG9yLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc4cHgnLFxuICAgICAgICAgICAgICAgICAgICBib3hTaGFkb3c6ICcwIDJweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4xKScsXG4gICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiAnMTgwcHgnLFxuICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogJzIwMHB4JyxcbiAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgICAgICAgICAgICAgICB6SW5kZXg6IDEwMDEsXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IGUuc3RvcFByb3BhZ2F0aW9uKCl9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2F2YWlsYWJsZUxhbmd1YWdlcy5tYXAoKGxhbmcsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBrZXk9e2xhbmcuY29kZX1cbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBnYXA6ICc4cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogJzEwcHggMTVweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGV4dENvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiByZXNvbHZlZExhbmd1YWdlID09PSBsYW5nLmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyAodGhlbWU/LnNlY29uZGFyeUNvbG9yIHx8ICcjZjVmNWY1JylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyQm90dG9tOiBpbmRleCA8IGF2YWlsYWJsZUxhbmd1YWdlcy5sZW5ndGggLSAxID8gJzFweCBzb2xpZCAjZjBmMGYwJyA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250RmFtaWx5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbjogJ2JhY2tncm91bmQtY29sb3IgMC4ycyBlYXNlJyxcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNvbHZlZExhbmd1YWdlICE9PSBsYW5nLmNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoZW1lPy5zZWNvbmRhcnlDb2xvciB8fCAnI2Y1ZjVmNSc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICBvbk1vdXNlTGVhdmU9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZWRMYW5ndWFnZSAhPT0gbGFuZy5jb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGUuY3VycmVudFRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAndHJhbnNwYXJlbnQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVMYW5ndWFnZUNoYW5nZShsYW5nLmNvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2hvd0xhbmd1YWdlRHJvcGRvd24oZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2hvd01lbnUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7bGFuZy5uYW1lfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuXG4gICAgICA8ZGl2IHN0eWxlPXtjb250ZW50Q2FyZFN0eWxlfT5cbiAgICAgICAgPGRpdiBzdHlsZT17Y2hhdENvbnRhaW5lclN0eWxlfSByZWY9e2NoYXRDb250YWluZXJSZWZ9PlxuICAgICAgICAgIHtyZW5kZXJMYW5ndWFnZVNlbGVjdG9yKCl9XG5cbiAgICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNob3VsZFNob3dTeW50aGV0aWNXZWxjb21lID1cbiAgICAgICAgICAgICAgc2hvd1dlbGNvbWVCZWZvcmVTdGFydCAmJlxuICAgICAgICAgICAgICAhaGFzVXNlck1lc3NhZ2VzICYmXG4gICAgICAgICAgICAgIChtZXNzYWdlcy5sZW5ndGggPT09IDAgfHwgbWVzc2FnZXNbMF0uc3BlYWtlciAhPT0gJ2FnZW50JykgJiZcbiAgICAgICAgICAgICAgKEJvb2xlYW4od2VsY29tZVRpdGxlKSB8fCBCb29sZWFuKHdlbGNvbWVJbWFnZVVybCkgfHwgQm9vbGVhbih3ZWxjb21lTWVzc2FnZSkpXG4gICAgICAgICAgICAgICYmIGNvbnZlcnNhdGlvbklkO1xuXG4gICAgICAgICAgICBpZiAoIXNob3VsZFNob3dTeW50aGV0aWNXZWxjb21lKSByZXR1cm4gbnVsbDtcblxuICAgICAgICAgICAgY29uc3Qgbm93ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCk7XG4gICAgICAgICAgICBjb25zdCBzeW50aGV0aWNXZWxjb21lOiBDaGF0TWVzc2FnZSA9IHtcbiAgICAgICAgICAgICAgY3JlYXRlX3RpbWU6IG5vdyxcbiAgICAgICAgICAgICAgc3RhcnRfdGltZTogMCxcbiAgICAgICAgICAgICAgZW5kX3RpbWU6IDAuMDEsXG4gICAgICAgICAgICAgIHNwZWFrZXI6ICdhZ2VudCcsXG4gICAgICAgICAgICAgIHRleHQ6IHdlbGNvbWVNZXNzYWdlIHx8ICcnLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPENoYXRNZXNzYWdlQ29tcG9uZW50XG4gICAgICAgICAgICAgICAga2V5PVwiX19zeW50aGV0aWNfd2VsY29tZV9fXCJcbiAgICAgICAgICAgICAgICBtZXNzYWdlPXtzeW50aGV0aWNXZWxjb21lfVxuICAgICAgICAgICAgICAgIHRoZW1lPXt0aGVtZX1cbiAgICAgICAgICAgICAgICBpc0ZpcnN0TWVzc2FnZT17dHJ1ZX1cbiAgICAgICAgICAgICAgICBpc05leHRTYW1lU3BlYWtlcj17ZmFsc2V9XG4gICAgICAgICAgICAgICAgaXNQcmV2U2FtZVNwZWFrZXI9e2ZhbHNlfVxuICAgICAgICAgICAgICAgIGVuYWJsZVR5cGV3cml0ZXI9e2ZhbHNlfVxuICAgICAgICAgICAgICAgIHdlbGNvbWVJbWFnZVVybD17d2VsY29tZUltYWdlVXJsIHx8IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICB3ZWxjb21lVGl0bGU9e3dlbGNvbWVUaXRsZSB8fCB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgcG9zc2libGVRdWVyaWVzPXtwb3NzaWJsZVF1ZXJpZXN9XG4gICAgICAgICAgICAgICAgb25RdWlja1F1ZXJ5PXtoYW5kbGVRdWVyeUNsaWNrfVxuICAgICAgICAgICAgICAgIG9uUXVpY2tBY3Rpb249e2hhbmRsZVF1aWNrQWN0aW9ufVxuICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9ucz17dHJhbnNsYXRpb25zfVxuICAgICAgICAgICAgICAgIGxhbmd1YWdlPXtyZXNvbHZlZExhbmd1YWdlfVxuICAgICAgICAgICAgICAgIGFnZW50TmFtZT17YWdlbnROYW1lfVxuICAgICAgICAgICAgICAgIGlzQWdlbnRUeXBpbmc9e2lzQWdlbnRUeXBpbmd9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pKCl9XG4gICAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdEFnZW50SW5kZXggPSBtZXNzYWdlcy5maW5kSW5kZXgobSA9PiBtLnNwZWFrZXIgPT09ICdhZ2VudCcpO1xuXG4gICAgICAgICAgICAvLyBMaXZlLXZvaWNlIHR1cm5zIGFyZSByZW5kZXJlZCBsb2NhbGx5IChiZWxvdykgdGhlIG1vbWVudCB0aGV5IGZpbmlzaC5cbiAgICAgICAgICAgIC8vIEVhY2ggaXMgYWxzbyBwZXJzaXN0ZWQgYW5kIGJyb2FkY2FzdCBiYWNrIGludG8gYG1lc3NhZ2VzYDsgc3VwcHJlc3MgdGhhdFxuICAgICAgICAgICAgLy8gY29weSBzbyBhIHR1cm4gaXNuJ3Qgc2hvd24gdHdpY2UgKGFuZCBuZXZlciBibGlua3MgYXMgdGhlIHR3byBzd2FwKS5cbiAgICAgICAgICAgIGNvbnN0IGxpdmVUdXJuS2V5cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICAgICAgZm9yIChjb25zdCB0dXJuIG9mIGxpdmVUdXJucykge1xuICAgICAgICAgICAgICBpZiAodHVybi51c2VyLnRyaW0oKSkgbGl2ZVR1cm5LZXlzLmFkZChgY3VzdG9tZXI6JHt0dXJuLnVzZXIudHJpbSgpfWApO1xuICAgICAgICAgICAgICBpZiAodHVybi5hZ2VudC50cmltKCkpIGxpdmVUdXJuS2V5cy5hZGQoYGFnZW50OiR7dHVybi5hZ2VudC50cmltKCl9YCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGFwcGx5TWVzc2FnZUZpbHRlciA9IChtZXNzYWdlOiBDaGF0TWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgICBpZiAobWVzc2FnZS50eXBlID09PSAnZmlsZScpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgaWYgKGxpdmVUdXJuS2V5cy5oYXMoYCR7bWVzc2FnZS5zcGVha2VyfTokeyhtZXNzYWdlLnRleHQgfHwgJycpLnRyaW0oKX1gKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2VzLmZpbHRlcihhcHBseU1lc3NhZ2VGaWx0ZXIpLm1hcCgobWVzc2FnZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudHlwZSA9PT0gJ2Zvcm1fcmVxdWVzdCcgJiYgbWVzc2FnZS5zcGVha2VyID09PSAnYWdlbnQnKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1TY2hlbWEgPSBKU09OLnBhcnNlKG1lc3NhZ2UudGV4dCk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpc1BlbmRpbmcgPSAhc3VibWl0dGVkRm9ybXMuaGFzKGluZGV4KTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtpbmRleH0gc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWF4V2lkdGg6ICc4NSUnLCBtYXJnaW5Cb3R0b206ICc4cHgnIH19PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFNpemU6ICcxNHB4JywgY29sb3I6ICcjMDAwMDAwJywgZm9udFdlaWdodDogNjAwLCBtYXJnaW5Cb3R0b206IDQgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7YWdlbnROYW1lIHx8ICdBZ2VudCd9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAge2Zvcm1EaXNwbGF5ID09PSAnaW5saW5lJyAmJiBpc1BlbmRpbmcgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8RHluYW1pY0Zvcm1NZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYT17Zm9ybVNjaGVtYX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25TdWJtaXQ9eyhkYXRhKSA9PiBoYW5kbGVGb3JtU3VibWl0KGRhdGEsIGluZGV4KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DYW5jZWw9eygpID0+IGhhbmRsZUZvcm1DYW5jZWwoaW5kZXgpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBpc1N1Ym1pdHRpbmc9e3N1Ym1pdHRpbmdGb3JtSW5kZXggPT09IGluZGV4fVxuICAgICAgICAgICAgICAgICAgICAgICAgICBpc1N1Ym1pdHRlZD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByaW1hcnlDb2xvcj17cHJpbWFyeUNvbG9yfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBmb250RmFtaWx5PXtmb250RmFtaWx5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiY2FyZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJyNmM2Y0ZjYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICcxMnB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogJzEwcHggMTRweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMTRweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnIzM3NDE1MScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHksXG4gICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge2Zvcm1TY2hlbWEubWVzc2FnZSB8fCAnUGxlYXNlIGZpbGwgdGhlIGZvcm0gYmVsb3cuJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAge2lzUGVuZGluZyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogJzEycHgnLCBjb2xvcjogJyM2YjcyODAnLCBtYXJnaW5Ub3A6ICc0cHgnIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsbCB0aGUgZm9ybSBiZWxvdyB0byBjb250aW51ZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBub3JtYWwgcmVuZGVyaW5nIGlmIEpTT04gcGFyc2UgZmFpbHNcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCBpc05leHRTYW1lU3BlYWtlciA9IGluZGV4IDwgbWVzc2FnZXMubGVuZ3RoIC0gMSAmJiBtZXNzYWdlc1tpbmRleCArIDFdLnNwZWFrZXIgPT09IG1lc3NhZ2Uuc3BlYWtlcjtcbiAgICAgICAgICAgICAgY29uc3QgaXNQcmV2U2FtZVNwZWFrZXIgPSBpbmRleCA+IDAgJiYgbWVzc2FnZXNbaW5kZXggLSAxXS5zcGVha2VyID09PSBtZXNzYWdlLnNwZWFrZXI7XG4gICAgICAgICAgICAgIGNvbnN0IGlzRmlyc3RBZ2VudE1lc3NhZ2UgPSBpbmRleCA9PT0gZmlyc3RBZ2VudEluZGV4ICYmIG1lc3NhZ2Uuc3BlYWtlciA9PT0gJ2FnZW50JyAmJiAhaGFzVXNlck1lc3NhZ2VzO1xuICAgICAgICAgICAgICBjb25zdCBkaXNwbGF5TWVzc2FnZSA9XG4gICAgICAgICAgICAgICAgaXNGaXJzdEFnZW50TWVzc2FnZSAmJiB3ZWxjb21lTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgPyB7IC4uLm1lc3NhZ2UsIHRleHQ6IHdlbGNvbWVNZXNzYWdlIH1cbiAgICAgICAgICAgICAgICAgIDogbWVzc2FnZTtcblxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxDaGF0TWVzc2FnZUNvbXBvbmVudFxuICAgICAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9e2Rpc3BsYXlNZXNzYWdlfVxuICAgICAgICAgICAgICAgICAgdGhlbWU9e3RoZW1lfVxuICAgICAgICAgICAgICAgICAgb25QbGF5QXVkaW89e21lc3NhZ2Uuc3BlYWtlciA9PT0gJ2FnZW50JyA/IHBsYXlSZXNwb25zZUF1ZGlvIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgaXNQbGF5aW5nQXVkaW89e2lzUGxheWluZ0F1ZGlvfVxuICAgICAgICAgICAgICAgICAgaXNGaXJzdE1lc3NhZ2U9e2lzRmlyc3RBZ2VudE1lc3NhZ2V9XG4gICAgICAgICAgICAgICAgICBpc05leHRTYW1lU3BlYWtlcj17aXNOZXh0U2FtZVNwZWFrZXJ9XG4gICAgICAgICAgICAgICAgICBpc1ByZXZTYW1lU3BlYWtlcj17aXNQcmV2U2FtZVNwZWFrZXJ9XG4gICAgICAgICAgICAgICAgICBvbkZlZWRiYWNrPXsobWVzc2FnZUlkLCB2YWx1ZSkgPT4gYWRkRmVlZGJhY2sobWVzc2FnZUlkLCB2YWx1ZSl9XG4gICAgICAgICAgICAgICAgICBlbmFibGVUeXBld3JpdGVyPXtpbmRleCA9PT0gbWVzc2FnZXMubGVuZ3RoIC0gMSAmJiBtZXNzYWdlLnNwZWFrZXIgPT09ICdhZ2VudCd9XG4gICAgICAgICAgICAgICAgICB3ZWxjb21lSW1hZ2VVcmw9e2lzRmlyc3RBZ2VudE1lc3NhZ2UgPyAod2VsY29tZUltYWdlVXJsIHx8IHVuZGVmaW5lZCkgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICB3ZWxjb21lVGl0bGU9e2lzRmlyc3RBZ2VudE1lc3NhZ2UgPyAod2VsY29tZVRpdGxlIHx8IHVuZGVmaW5lZCkgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICBwb3NzaWJsZVF1ZXJpZXM9e2lzRmlyc3RBZ2VudE1lc3NhZ2UgPyBwb3NzaWJsZVF1ZXJpZXMgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICBvblF1aWNrUXVlcnk9e2hhbmRsZVF1ZXJ5Q2xpY2t9XG4gICAgICAgICAgICAgICAgICBvblF1aWNrQWN0aW9uPXtoYW5kbGVRdWlja0FjdGlvbn1cbiAgICAgICAgICAgICAgICAgIG9uU2NoZWR1bGVDb25maXJtPXtoYW5kbGVTY2hlZHVsZUNvbmZpcm19XG4gICAgICAgICAgICAgICAgICBpc0xhc3RNZXNzYWdlPXtpbmRleCA9PT0gbWVzc2FnZXMubGVuZ3RoIC0gMSAmJiBtZXNzYWdlLnNwZWFrZXIgPT09ICdhZ2VudCd9XG4gICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbnM9e3RyYW5zbGF0aW9uc31cbiAgICAgICAgICAgICAgICAgIGxhbmd1YWdlPXtyZXNvbHZlZExhbmd1YWdlfVxuICAgICAgICAgICAgICAgICAgYWdlbnROYW1lPXthZ2VudE5hbWV9XG4gICAgICAgICAgICAgICAgICBpc0FnZW50VHlwaW5nPXtpc0FnZW50VHlwaW5nfVxuICAgICAgICAgICAgICAgICAgYXVkaW9VcmxCdWlsZGVyPXttZXNzYWdlLnR5cGUgPT09ICdhdWRpbycgJiYgdXNlQXVkaW8gPyBhdWRpb1VybEJ1aWxkZXIgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICBhdWRpb0hlYWRlcnM9e21lc3NhZ2UudHlwZSA9PT0gJ2F1ZGlvJyAmJiB1c2VBdWRpbyA/IGF1ZGlvSGVhZGVycyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgIGF1dG9QbGF5QXVkaW9NZXNzYWdlSWQ9e2F1dG9QbGF5QXVkaW9NZXNzYWdlSWR9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pKCl9XG4gICAgICAgICAge2lzQWdlbnRUeXBpbmcgJiYgY3VycmVudFRoaW5raW5nUGFydHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1heFdpZHRoOiAnODAlJyB9fT5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogJzE0cHgnLCBjb2xvcjogJyMwMDAwMDAnLCBmb250V2VpZ2h0OiA2MDAsIG1hcmdpbkJvdHRvbTogNCB9fT57YWdlbnROYW1lIHx8IHQoJ2xhYmVscy5hZ2VudCcpfTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAwLFxuICAgICAgICAgICAgICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGtleT17YCR7Y3VycmVudFRoaW5raW5nUGFydEluZGV4fS0ke2N1cnJlbnRUaGlua2luZ1BhcnRzLmpvaW4oJ3wnKX1gfVxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uOiAnZ2EtdGhpbmstY2hhbmdlIDIyMG1zIGVhc2UnLFxuICAgICAgICAgICAgICAgICAgICB3aWxsQ2hhbmdlOiAndHJhbnNmb3JtLCBvcGFjaXR5JyxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjNmI3MjgwJyxcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcxM3B4JyxcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2N1cnJlbnRUaGlua2luZ1BhcnRzW2N1cnJlbnRUaGlua2luZ1BhcnRJbmRleF0gfHwgY3VycmVudFRoaW5raW5nUGFydHNbY3VycmVudFRoaW5raW5nUGFydHMubGVuZ3RoIC0gMV19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7LyogQ29tcGxldGVkIGxpdmUtdm9pY2UgdHVybnMsIHJlbmRlcmVkIGFzIG9yZGluYXJ5IGNoYXQgYnViYmxlcyBhbmQga2VwdFxuICAgICAgICAgICAgICBpbiBsb2NhbCBzdGF0ZSBzbyB0aGV5IHN0YXkgdmlzaWJsZSBhY3Jvc3MgdHVybnMuIFRoZSBwZXJzaXN0ZWQgY29weSBvZlxuICAgICAgICAgICAgICBlYWNoIHR1cm4gaXMgZmlsdGVyZWQgb3V0IG9mIGBtZXNzYWdlc2AgYWJvdmUsIHNvIHRoZXNlIGFyZSB0aGUgc2luZ2xlXG4gICAgICAgICAgICAgIHNvdXJjZSBvZiB0cnV0aCBvbiBzY3JlZW4g4oCUIHRoZXkgbmV2ZXIgZ2V0IGhpZGRlbiwgc28gbm90aGluZyBibGlua3MuICovfVxuICAgICAgICAgIHtsaXZlVHVybnMubWFwKCh0dXJuLCBpKSA9PiAoXG4gICAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQga2V5PXtgbGl2ZS10dXJuLSR7aX1gfT5cbiAgICAgICAgICAgICAge3R1cm4udXNlci50cmltKCkgIT09ICcnICYmIHJlbmRlckxpdmVCdWJibGUoJ2N1c3RvbWVyJywgdHVybi51c2VyLCB0dXJuLmNyZWF0ZVRpbWUpfVxuICAgICAgICAgICAgICB7dHVybi5hZ2VudC50cmltKCkgIT09ICcnICYmIHJlbmRlckxpdmVCdWJibGUoJ2FnZW50JywgdHVybi5hZ2VudCwgdHVybi5jcmVhdGVUaW1lKX1cbiAgICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgKSl9XG4gICAgICAgICAgey8qIEluLXByb2dyZXNzIHR1cm46IHN0cmVhbXMgdGhlIHBhcnRpYWwgdHJhbnNjcmlwdCBsaXZlIChDaGF0TWVzc2FnZSBub3dcbiAgICAgICAgICAgICAgdHJhY2tzIGl0cyB0ZXh0IHByb3AsIHNvIHRoZXNlIHVwZGF0ZSBpbiBwbGFjZSBhcyBjaHVua3MgYXJyaXZlKS4gKi99XG4gICAgICAgICAge2xpdmVWb2ljZS5pc0FjdGl2ZSAmJiBsaXZlQ2FwdGlvbi51c2VyLnRyaW0oKSAhPT0gJycgJiZcbiAgICAgICAgICAgIHJlbmRlckxpdmVCdWJibGUoJ2N1c3RvbWVyJywgbGl2ZUNhcHRpb24udXNlciwgbGl2ZUNhcHRpb24uY3JlYXRlVGltZSwgJ19fbGl2ZV9jYXB0aW9uX3VzZXJfXycpfVxuICAgICAgICAgIHtsaXZlVm9pY2UuaXNBY3RpdmUgJiYgbGl2ZUNhcHRpb24uYWdlbnQudHJpbSgpICE9PSAnJyAmJlxuICAgICAgICAgICAgcmVuZGVyTGl2ZUJ1YmJsZSgnYWdlbnQnLCBsaXZlQ2FwdGlvbi5hZ2VudCwgbGl2ZUNhcHRpb24uY3JlYXRlVGltZSwgJ19fbGl2ZV9jYXB0aW9uX2FnZW50X18nKX1cbiAgICAgICAgICA8ZGl2IHJlZj17bWVzc2FnZXNFbmRSZWZ9IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7c2hvd1dlbGNvbWVCZWZvcmVTdGFydCAmJiAoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNob3dpbmdTeW50aGV0aWNXZWxjb21lID1cbiAgICAgICAgICAgICFoYXNVc2VyTWVzc2FnZXMgJiZcbiAgICAgICAgICAgIChtZXNzYWdlcy5sZW5ndGggPT09IDAgfHwgbWVzc2FnZXNbMF0uc3BlYWtlciAhPT0gJ2FnZW50JykgJiZcbiAgICAgICAgICAgIChCb29sZWFuKHdlbGNvbWVUaXRsZSkgfHwgQm9vbGVhbih3ZWxjb21lSW1hZ2VVcmwpIHx8IEJvb2xlYW4od2VsY29tZU1lc3NhZ2UpKTtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgcG9zc2libGVRdWVyaWVzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICFoYXNVc2VyTWVzc2FnZXMgJiZcbiAgICAgICAgICAgIChtZXNzYWdlcy5sZW5ndGggPT09IDAgfHwgbWVzc2FnZXNbMF0uc3BlYWtlciAhPT0gJ2FnZW50JykgJiZcbiAgICAgICAgICAgICFzaG93aW5nU3ludGhldGljV2VsY29tZVxuICAgICAgICAgICk7XG4gICAgICAgIH0pKCkgJiYgKFxuICAgICAgICAgIDxkaXYgc3R5bGU9e3Bvc3NpYmxlUXVlcmllc0NvbnRhaW5lclN0eWxlfT5cbiAgICAgICAgICAgIHtwb3NzaWJsZVF1ZXJpZXMubWFwKChxdWVyeSwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3F1ZXJ5QnV0dG9uU3R5bGV9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlUXVlcnlDbGljayhxdWVyeSl9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzTG9hZGluZyB8fCBpc0FnZW50VHlwaW5nfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3F1ZXJ5fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuXG4gICAgICAgIHtmaWxlRXJyb3JUb2FzdCAmJiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgbWFyZ2luOiAnMCAxNnB4IDhweCcsXG4gICAgICAgICAgICAgIHBhZGRpbmc6ICcxMHB4IDE0cHgnLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjRkZGM0UwJyxcbiAgICAgICAgICAgICAgY29sb3I6ICcjRTY1MTAwJyxcbiAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnMTJweCcsXG4gICAgICAgICAgICAgIGZvbnRTaXplLFxuICAgICAgICAgICAgICBmb250RmFtaWx5LFxuICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBnYXA6ICc4cHgnLFxuICAgICAgICAgICAgICBmbGV4U2hyaW5rOiAwLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHJvbGU9XCJhbGVydFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEFsZXJ0Q2lyY2xlIHNpemU9ezE4fSBzdHlsZT17eyBmbGV4U2hyaW5rOiAwIH19IC8+XG4gICAgICAgICAgICA8c3Bhbj57ZmlsZUVycm9yVG9hc3R9PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuXG4gICAgICAgIHtsaXZlVm9pY2VOb3RpY2UgJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIG1hcmdpbjogJzAgMTZweCA4cHgnLFxuICAgICAgICAgICAgICBwYWRkaW5nOiAnMTBweCAxNHB4JyxcbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnI0ZGRjNFMCcsXG4gICAgICAgICAgICAgIGNvbG9yOiAnI0U2NTEwMCcsXG4gICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzEycHgnLFxuICAgICAgICAgICAgICBmb250U2l6ZSxcbiAgICAgICAgICAgICAgZm9udEZhbWlseSxcbiAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgZ2FwOiAnOHB4JyxcbiAgICAgICAgICAgICAgZmxleFNocmluazogMCxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICByb2xlPVwiYWxlcnRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxBbGVydENpcmNsZSBzaXplPXsxOH0gc3R5bGU9e3sgZmxleFNocmluazogMCB9fSAvPlxuICAgICAgICAgICAgPHNwYW4+e2xpdmVWb2ljZU5vdGljZX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG5cbiAgICAgICAge3VzZUZpbGUgJiYgYXR0YWNobWVudHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBwYWRkaW5nOiAnMCAxNnB4JywgbWFyZ2luQm90dG9tOiAnOHB4JywgZGlzcGxheTogJ2ZsZXgnLCBnYXA6ICc4cHgnLCBmbGV4V3JhcDogJ3dyYXAnIH19PlxuICAgICAgICAgICAge2F0dGFjaG1lbnRzLm1hcCgoYXR0LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICA8QXR0YWNobWVudFByZXZpZXdcbiAgICAgICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgICAgIGZpbGU9e2F0dC5maWxlfVxuICAgICAgICAgICAgICAgIG9uUmVtb3ZlPXsoKSA9PiBoYW5kbGVSZW1vdmVBdHRhY2htZW50KGF0dC5maWxlLm5hbWUpfVxuICAgICAgICAgICAgICAgIHVwbG9hZGluZz17dXBsb2FkaW5nRmlsZXMuaGFzKGF0dC5maWxlLm5hbWUpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG5cbiAgICAgICAgeyFjb252ZXJzYXRpb25JZCB8fCBpc0ZpbmFsaXplZCA/IChcbiAgICAgICAgICA8ZGl2IHN0eWxlPXtpbnB1dENvbnRhaW5lclN0eWxlfT5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIHN0eWxlPXt7Li4uc2VuZEJ1dHRvblN0eWxlLCB3aWR0aDogJzEwMCUnLCBoZWlnaHQ6ICc0OHB4JywgYm9yZGVyUmFkaXVzOiAnMTZweCcsIGN1cnNvcjogJ3BvaW50ZXInLCBmb250RmFtaWx5LCBmb250U2l6ZX19XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVN0YXJ0Q29udmVyc2F0aW9ufVxuICAgICAgICAgICAgICBkaXNhYmxlZD17aXNMb2FkaW5nfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7dCgnYnV0dG9ucy5zdGFydENvbnZlcnNhdGlvbicpfVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiBwZW5kaW5nRm9ybSAmJiBmb3JtRGlzcGxheSA9PT0gJ2Zvb3RlcicgPyAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgLi4uaW5wdXRDb250YWluZXJTdHlsZSxcbiAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICAgICAgYm9yZGVyVG9wOiAnMXB4IHNvbGlkICNlNWU3ZWInLFxuICAgICAgICAgIH19PlxuICAgICAgICAgICAgPER5bmFtaWNGb3JtTWVzc2FnZVxuICAgICAgICAgICAgICBzY2hlbWE9e3BlbmRpbmdGb3JtLnNjaGVtYX1cbiAgICAgICAgICAgICAgb25TdWJtaXQ9eyhkYXRhKSA9PiBoYW5kbGVGb3JtU3VibWl0KGRhdGEsIHBlbmRpbmdGb3JtLmluZGV4KX1cbiAgICAgICAgICAgICAgb25DYW5jZWw9eygpID0+IGhhbmRsZUZvcm1DYW5jZWwocGVuZGluZ0Zvcm0uaW5kZXgpfVxuICAgICAgICAgICAgICBpc1N1Ym1pdHRpbmc9e3N1Ym1pdHRpbmdGb3JtSW5kZXggPT09IHBlbmRpbmdGb3JtLmluZGV4fVxuICAgICAgICAgICAgICBpc1N1Ym1pdHRlZD17ZmFsc2V9XG4gICAgICAgICAgICAgIHByaW1hcnlDb2xvcj17cHJpbWFyeUNvbG9yfVxuICAgICAgICAgICAgICBmb250RmFtaWx5PXtmb250RmFtaWx5fVxuICAgICAgICAgICAgICB2YXJpYW50PVwiZm9vdGVyXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB7YWdlbnREaXNjbGFpbWVyQ29udGVudCAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ2EtaW5wdXQtZGlzY2xhaW1lclwiIHN0eWxlPXtkaXNjbGFpbWVyU3R5bGV9PlxuICAgICAgICAgICAgICAgIHthZ2VudERpc2NsYWltZXJDb250ZW50fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiBsaXZlVm9pY2VFbmFibGVkID8gKFxuICAgICAgICAgIC8vIExpdmUgdm9pY2UgbW9kZSBpcyB2b2ljZS1vbmx5OiBubyB0ZXh0IGJveCwgYXR0YWNoLCBvciBzZW5kIGJ1dHRvbiDigJRcbiAgICAgICAgICAvLyB0aGUgb25seSB3YXkgdG8gdGFsayB0byB0aGUgYWdlbnQgaXMgdG8gc3RhcnQgYSBsaXZlIGNhbGwuXG4gICAgICAgICAgPGRpdiBzdHlsZT17aW5wdXRDb250YWluZXJTdHlsZX0+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHdpZHRoOiAnMTAwJScsIG1pbldpZHRoOiAwIH19PlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtpbnB1dFdyYXBwZXJTdHlsZX0+XG4gICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e2dldExpdmVWb2ljZUhpbnRTdHlsZSh0ZXh0QXJlYUZvbnRTaXplLCBmb250RmFtaWx5KX0+XG4gICAgICAgICAgICAgICAgICB7bGl2ZVZvaWNlUmVhZHlcbiAgICAgICAgICAgICAgICAgICAgPyB0KCdsaXZlVm9pY2UudGFwVG9TdGFydCcsICdUYXAgdG8gc3RhcnQgYSB2b2ljZSBjb252ZXJzYXRpb24nKVxuICAgICAgICAgICAgICAgICAgICA6IHQoJ2xpdmVWb2ljZS51bmF2YWlsYWJsZScsICdWb2ljZSBpcyBjdXJyZW50bHkgdW5hdmFpbGFibGUnKX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPExpdmVDYWxsQ29udHJvbFxuICAgICAgICAgICAgICAgICAgc3RhdHVzPXtsaXZlVm9pY2Uuc3RhdHVzfVxuICAgICAgICAgICAgICAgICAgaXNBY3RpdmU9e2xpdmVWb2ljZS5pc0FjdGl2ZX1cbiAgICAgICAgICAgICAgICAgIG9uU3RhcnQ9e3N0YXJ0TGl2ZUNhbGx9XG4gICAgICAgICAgICAgICAgICBvblN0b3A9e2VuZExpdmVDYWxsfVxuICAgICAgICAgICAgICAgICAgdGhlbWU9e3RoZW1lfVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFhZ2VudElkIHx8ICFsaXZlVm9pY2VSZWFkeX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAge2FnZW50RGlzY2xhaW1lckNvbnRlbnQgJiYgKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ2EtaW5wdXQtZGlzY2xhaW1lclwiIHN0eWxlPXtkaXNjbGFpbWVyU3R5bGV9PlxuICAgICAgICAgICAgICAgICAge2FnZW50RGlzY2xhaW1lckNvbnRlbnR9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8Zm9ybSBvblN1Ym1pdD17aGFuZGxlU3VibWl0fSBzdHlsZT17aW5wdXRDb250YWluZXJTdHlsZX0+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHdpZHRoOiAnMTAwJScsIG1pbldpZHRoOiAwIH19PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17aW5wdXRXcmFwcGVyU3R5bGV9PlxuICAgICAgICAgICAgICB7dXNlRmlsZSAmJiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXthdHRhY2hCdXR0b25TdHlsZX1cbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJBdHRhY2hcIlxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBmaWxlSW5wdXRSZWYuY3VycmVudD8uY2xpY2soKX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFBhcGVyY2xpcCBzaXplPXsyMn0gY29sb3I9XCIjNzU3NTc1XCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgICAgICAgICAgcmVmPXtmaWxlSW5wdXRSZWZ9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6ICdub25lJyB9fVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlRmlsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgYWNjZXB0PXthbGxvd2VkRXh0ZW5zaW9ucy5qb2luKCcsJykgfHwgJyovKid9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICByZWY9e3RleHRBcmVhUmVmfVxuICAgICAgICAgICAgICAgIHN0eWxlPXt0ZXh0QXJlYVN0eWxlfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImdhLXRleHRhcmVhLW5vc2JcIlxuICAgICAgICAgICAgICAgIHZhbHVlPXtpbnB1dFZhbHVlfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0SW5wdXRWYWx1ZShlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgb25LZXlEb3duPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInICYmICFlLnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChpbnB1dFZhbHVlLnRyaW0oKSAhPT0gJycgfHwgYXR0YWNobWVudHMubGVuZ3RoID4gMCkgJiYgIWlzQWdlbnRUeXBpbmcgJiYgIWhhc1BlbmRpbmdGb3JtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc3VibWl0TWVzc2FnZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17aW5wdXRQbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWNvbnZlcnNhdGlvbklkIHx8IGlzRmluYWxpemVkIHx8IGhhc1BlbmRpbmdGb3JtfVxuICAgICAgICAgICAgICAgIHJvd3M9ezF9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3JpZ2h0QWN0aW9uQ29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgICAgICAgIHshKHVzZUF1ZGlvICYmIGlucHV0VmFsdWUudHJpbSgpID09PSAnJyAmJiBhdHRhY2htZW50cy5sZW5ndGggPT09IDApICYmIChcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IC4uLnNlbmRCdXR0b25TdHlsZSwgLi4uKGlzU2VuZERpc2FibGVkID8gc2VuZEJ1dHRvbkRpc2FibGVkU3R5bGUgOiB7fSkgfX1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzU2VuZERpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8QXJyb3dVcCBzaXplPXsxOH0gc3Ryb2tlV2lkdGg9ezN9IGNvbG9yPVwiI2ZmZmZmZlwiIC8+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAge3VzZUF1ZGlvICYmIGlucHV0VmFsdWUudHJpbSgpID09PSAnJyAmJiBhdHRhY2htZW50cy5sZW5ndGggPT09IDAgJiYgKFxuICAgICAgICAgICAgICAgIDxWb2ljZUlucHV0XG4gICAgICAgICAgICAgICAgICBvbkF1ZGlvUmVhZHk9e2FzeW5jIChibG9iOiBCbG9iLCBmb3JtYXQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgIHNldElzUGxheWluZ0F1ZGlvKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHNlbmRBdWRpb01lc3NhZ2UoYmxvYiwgZm9ybWF0KTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gZXJyb3IgaGFuZGxlZCBpbnNpZGUgc2VuZEF1ZGlvTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgIHNldElzUGxheWluZ0F1ZGlvKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIG9uRXJyb3I9e2hhbmRsZVZvaWNlRXJyb3J9XG4gICAgICAgICAgICAgICAgICB0aGVtZT17dGhlbWV9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB7YWdlbnREaXNjbGFpbWVyQ29udGVudCAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ2EtaW5wdXQtZGlzY2xhaW1lclwiIHN0eWxlPXtkaXNjbGFpbWVyU3R5bGV9PlxuICAgICAgICAgICAgICAgIHthZ2VudERpc2NsYWltZXJDb250ZW50fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBzdHlsZT17Y29uZmlybU92ZXJsYXlTdHlsZX0+XG4gICAgICAgIDxkaXYgc3R5bGU9e2NvbmZpcm1EaWFsb2dTdHlsZX0+XG4gICAgICAgICAgPGgzIHN0eWxlPXt7Zm9udEZhbWlseSwgbWFyZ2luVG9wOiAwfX0+e3QoJ2RpYWxvZy5yZXNldENvbnZlcnNhdGlvbi50aXRsZScpfTwvaDM+XG4gICAgICAgICAgPHAgc3R5bGU9e3tmb250RmFtaWx5LCBmb250U2l6ZX19Pnt0KCdkaWFsb2cucmVzZXRDb252ZXJzYXRpb24ubWVzc2FnZScpfTwvcD5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXtjb25maXJtQnV0dG9uc1N0eWxlfT5cbiAgICAgICAgICAgIDxidXR0b24gc3R5bGU9e3suLi5nZXRDb25maXJtQnV0dG9uU3R5bGUoZmFsc2UsIHRoZW1lUGFyYW1zKSwgY29sb3I6IHRleHRDb2xvcn19IG9uQ2xpY2s9e2hhbmRsZUNhbmNlbFJlc2V0fT57dCgnYnV0dG9ucy5jYW5jZWwnKX08L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gc3R5bGU9e2dldENvbmZpcm1CdXR0b25TdHlsZSh0cnVlLCB0aGVtZVBhcmFtcyl9IG9uQ2xpY2s9e2hhbmRsZUNvbmZpcm1SZXNldH0+e3QoJ2J1dHRvbnMucmVzZXQnKX08L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcblxuICBpZiAobW9kZSA9PT0gJ2Zsb2F0aW5nJykge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7IWlzRmxvYXRpbmdPcGVuICYmIChcbiAgICAgICAgICA8Q2hhdEJ1YmJsZVxuICAgICAgICAgICAgc2hvd0NoYXQ9e2lzRmxvYXRpbmdPcGVufVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0SXNGbG9hdGluZ09wZW4ocHJldiA9PiAhcHJldil9XG4gICAgICAgICAgICBwcmltYXJ5Q29sb3I9e3ByaW1hcnlDb2xvcn1cbiAgICAgICAgICAgIHN0eWxlPXtnZXRQb3NpdGlvblN0eWxlcyh7IHBvc2l0aW9uLCBvZmZzZXRYLCBvZmZzZXRZIH0pfVxuICAgICAgICAgICAgY2hhdEJ1YmJsZUljb249e3RoZW1lPy5jaGF0QnViYmxlSWNvbn1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuXG4gICAgICAgIHtpc0Zsb2F0aW5nT3BlbiAmJiAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17ZmxvYXRpbmdDb250YWluZXJTdHlsZX0gZGF0YS1nZW5hc3Npc3QtY29udGFpbmVyPVwiZmxvYXRpbmdcIj5cbiAgICAgICAgICAgIHtyZW5kZXJXaXRoUmVDYXB0Y2hhKHJlbmRlckNoYXRDb21wb25lbnQoKSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgaWYgKG1vZGUgPT09ICdmdWxsc2NyZWVuJykge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHN0eWxlPXtmbG9hdGluZ0NvbnRhaW5lclN0eWxlfSBkYXRhLWdlbmFzc2lzdC1jb250YWluZXI9XCJmdWxsc2NyZWVuXCI+XG4gICAgICAgIHtyZW5kZXJXaXRoUmVDYXB0Y2hhKHJlbmRlckNoYXRDb21wb25lbnQoKSl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHJlbmRlcldpdGhSZUNhcHRjaGEocmVuZGVyQ2hhdENvbXBvbmVudCgpKTtcbn07XG4iXX0=
1046
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2VuQWdlbnRDaGF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvR2VuQWdlbnRDaGF0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDckUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFakUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksSUFBSSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7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LEtBQUssRUFBRSxzQkFBc0IsOEJBQTJCLFVBQVUsWUFDcEUsbUJBQW1CLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxHQUN2QyxDQUNQLElBQ0EsQ0FDSixDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksSUFBSSxLQUFLLFlBQVksRUFBRSxDQUFDO1FBQzFCLE9BQU8sQ0FDTCxjQUFLLEtBQUssRUFBRSxzQkFBc0IsOEJBQTJCLFlBQVksWUFDdEUsbUJBQW1CLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxHQUN2QyxDQUNQLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyxtQkFBbUIsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUM7QUFDcEQsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VSZWYsIHVzZUVmZmVjdCwgdXNlTGF5b3V0RWZmZWN0LCB1c2VNZW1vLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IENoYXRNZXNzYWdlQ29tcG9uZW50IH0gZnJvbSAnLi9DaGF0TWVzc2FnZSc7XG5pbXBvcnQgeyBBdHRhY2htZW50UHJldmlldyB9IGZyb20gJy4vY29tbW9uL0F0dGFjaG1lbnRQcmV2aWV3JztcbmltcG9ydCB7IHVzZUNoYXQgfSBmcm9tICcuLi9ob29rcy91c2VDaGF0JztcbmltcG9ydCB7IHVzZVNjcm9sbE1hbmFnZW1lbnQgfSBmcm9tICcuLi9ob29rcy91c2VTY3JvbGxNYW5hZ2VtZW50JztcbmltcG9ydCB7IHVzZVRoaW5raW5nQW5pbWF0aW9uIH0gZnJvbSAnLi4vaG9va3MvdXNlVGhpbmtpbmdBbmltYXRpb24nO1xuaW1wb3J0IHsgdXNlVmlld3BvcnRNYW5hZ2VyIH0gZnJvbSAnLi4vaG9va3MvdXNlVmlld3BvcnRNYW5hZ2VyJztcbmltcG9ydCB7IHVzZUZpbGVBdHRhY2htZW50cyB9IGZyb20gJy4uL2hvb2tzL3VzZUZpbGVBdHRhY2htZW50cyc7XG5pbXBvcnQgeyBDaGF0TWVzc2FnZSwgR2VuQWdlbnRDaGF0UHJvcHMsIFNjaGVkdWxlSXRlbSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IFZvaWNlSW5wdXQgfSBmcm9tICcuL1ZvaWNlSW5wdXQnO1xuaW1wb3J0IHsgTGl2ZUNhbGxDb250cm9sIH0gZnJvbSAnLi9MaXZlQ2FsbENvbnRyb2wnO1xuaW1wb3J0IHsgdXNlTGl2ZVZvaWNlIGFzIHVzZUxpdmVWb2ljZVNlc3Npb24gfSBmcm9tICcuLi9ob29rcy91c2VMaXZlVm9pY2UnO1xuaW1wb3J0IHsgQXVkaW9TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYXVkaW9TZXJ2aWNlJztcbmltcG9ydCB7IFBhcGVyY2xpcCwgTW9yZVZlcnRpY2FsLCBSZWZyZXNoQ3csIEdsb2JlLCBYLCBBcnJvd1VwLCBNYXhpbWl6ZTIsIE1pbmltaXplMiwgQWxlcnRDaXJjbGUgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHsgQ2hhdEJ1YmJsZSB9IGZyb20gJy4vQ2hhdEJ1YmJsZSc7XG5pbXBvcnQgRHluYW1pY0Zvcm1NZXNzYWdlIGZyb20gJy4vRHluYW1pY0Zvcm1NZXNzYWdlJztcbmltcG9ydCB7IExhbmd1YWdlU2VsZWN0b3IgfSBmcm9tICcuL0xhbmd1YWdlU2VsZWN0b3InO1xuaW1wb3J0IGNoYXRMb2dvIGZyb20gJy4uL2Fzc2V0cy9jaGF0LWxvZ28ucG5nJztcblxuaW1wb3J0IHtcbiAgcmVzb2x2ZUxhbmd1YWdlLFxuICBtZXJnZVRyYW5zbGF0aW9ucyxcbiAgZ2V0VHJhbnNsYXRpb25TdHJpbmcsXG4gIGdldFRyYW5zbGF0aW9uc0Zvckxhbmd1YWdlLFxufSBmcm9tICcuLi91dGlscy9pMThuJztcbmltcG9ydCB7IEdvb2dsZVJlQ2FwdGNoYSwgR29vZ2xlUmVDYXB0Y2hhUHJvdmlkZXIgfSBmcm9tICdyZWFjdC1nb29nbGUtcmVjYXB0Y2hhLXYzJztcblxuaW1wb3J0IHtcbiAgcmVzb2x2ZVRoZW1lLFxuICBoZXhUb1JnYmEsXG4gIGdldENvbnRhaW5lclN0eWxlLFxuICBnZXRIZWFkZXJTdHlsZSxcbiAgbG9nb0NvbnRhaW5lclN0eWxlLFxuICBsb2dvU3R5bGUsXG4gIGhlYWRlclRpdGxlQ29udGFpbmVyU3R5bGUsXG4gIGdldEhlYWRlclRpdGxlU3R5bGUsXG4gIGdldEhlYWRlclN1YnRpdGxlU3R5bGUsXG4gIG1lbnVCdXR0b25TdHlsZSxcbiAgZ2V0TWVudVBvcHVwU3R5bGUsXG4gIGdldE1lbnVJdGVtU3R5bGUsXG4gIGNoYXRDb250YWluZXJTdHlsZSxcbiAgaW5wdXRDb250YWluZXJTdHlsZSxcbiAgaW5wdXRXcmFwcGVyU3R5bGUsXG4gIGdldFRleHRBcmVhU3R5bGUsXG4gIGdldExpdmVWb2ljZUhpbnRTdHlsZSxcbiAgYXR0YWNoQnV0dG9uU3R5bGUsXG4gIGdldFNlbmRCdXR0b25TdHlsZSxcbiAgc2VuZEJ1dHRvbkRpc2FibGVkU3R5bGUsXG4gIHJpZ2h0QWN0aW9uQ29udGFpbmVyU3R5bGUsXG4gIGdldFBvc3NpYmxlUXVlcmllc0NvbnRhaW5lclN0eWxlLFxuICBnZXRRdWVyeUJ1dHRvblN0eWxlLFxuICBnZXRDb25maXJtT3ZlcmxheVN0eWxlLFxuICBnZXRDb25maXJtRGlhbG9nU3R5bGUsXG4gIGNvbmZpcm1CdXR0b25zU3R5bGUsXG4gIGdldENvbmZpcm1CdXR0b25TdHlsZSxcbiAgZ2V0Q29udGVudENhcmRTdHlsZSxcbiAgZ2V0RGlzY2xhaW1lclN0eWxlLFxuICBnZXRQb3NpdGlvblN0eWxlcyxcbiAgZ2V0RmxvYXRpbmdDb250YWluZXJTdHlsZSxcbiAgQ1NTX0tFWUZSQU1FUyxcbn0gZnJvbSAnLi4vc3R5bGVzL2dlbkFnZW50Q2hhdFN0eWxlcyc7XG5cbmNvbnN0IFNIT1dfQ0hBVF9MQU5HVUFHRV9TRUxFQ1RPUiA9IHRydWU7XG5cbi8qKiBPbmUgY29tcGxldGVkIChvciBpbi1wcm9ncmVzcykgbGl2ZS12b2ljZSBleGNoYW5nZTogd2hhdCB0aGUgdXNlciBzYWlkICsgdGhlIHJlcGx5LiAqL1xudHlwZSBMaXZlVHVybiA9IHsgdXNlcjogc3RyaW5nOyBhZ2VudDogc3RyaW5nOyBjcmVhdGVUaW1lOiBudW1iZXIgfTtcblxuLyoqIEN1cnJlbnQgdGltZSBpbiBlcG9jaCBzZWNvbmRzICh0aGUgdGltZXN0YW1wIGZvcm1hdCBDaGF0TWVzc2FnZSBleHBlY3RzKS4gKi9cbmNvbnN0IG5vd1NlYyA9ICgpID0+IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApO1xuXG5leHBvcnQgY29uc3QgR2VuQWdlbnRDaGF0OiBSZWFjdC5GQzxHZW5BZ2VudENoYXRQcm9wcz4gPSAoe1xuICBiYXNlVXJsLFxuICB3ZWJzb2NrZXRVcmwsXG4gIGFwaUtleSxcbiAgdGVuYW50LFxuICBtZXRhZGF0YSxcbiAgdXNlV3MgPSB0cnVlLFxuICB1c2VQb2xsID0gZmFsc2UsXG4gIG9uRXJyb3IsXG4gIG9uVGFrZW92ZXIsXG4gIG9uRmluYWxpemUsXG4gIHRoZW1lLFxuICBoZWFkZXJUaXRsZSA9ICdHZW5hc3Npc3QnLFxuICBkZXNjcmlwdGlvbixcbiAgcGxhY2Vob2xkZXIsXG4gIGFnZW50TmFtZSxcbiAgbG9nb1VybCxcbiAgbW9kZSA9ICdlbWJlZGRlZCcsXG4gIG9uRXhpdEZ1bGxzY3JlZW4sXG4gIGZsb2F0aW5nQ29uZmlnID0ge30sXG4gIGxhbmd1YWdlLFxuICB0cmFuc2xhdGlvbnM6IGN1c3RvbVRyYW5zbGF0aW9ucyxcbiAgcmVDYXB0Y2hhS2V5LFxuICB3aWRnZXQgPSBmYWxzZSxcbiAgdXNlQXVkaW8gPSBmYWxzZSxcbiAgdXNlRmlsZSA9IGZhbHNlLFxuICBub0NvbG9yQW5pbWF0aW9uID0gZmFsc2UsXG4gIHNob3dXZWxjb21lQmVmb3JlU3RhcnQgPSB0cnVlLFxuICBhbGxvd2VkRXh0ZW5zaW9ucyA9IFtdLFxuICBzZXJ2ZXJVbmF2YWlsYWJsZU1lc3NhZ2UsXG4gIHNlcnZlclVuYXZhaWxhYmxlQ29udGFjdFVybCxcbiAgc2VydmVyVW5hdmFpbGFibGVDb250YWN0TGFiZWwsXG4gIGZvcm1EaXNwbGF5ID0gJ2Zvb3RlcicsXG4gIG9uQ29uZmlnTG9hZGVkLFxufSk6IFJlYWN0LlJlYWN0RWxlbWVudCA9PiB7XG4gIC8vIExhbmd1YWdlIHNlbGVjdGlvbiBzdGF0ZSAod2l0aCBsb2NhbFN0b3JhZ2UgcGVyc2lzdGVuY2UpXG4gIGNvbnN0IFtzZWxlY3RlZExhbmd1YWdlLCBzZXRTZWxlY3RlZExhbmd1YWdlXSA9IHVzZVN0YXRlPHN0cmluZz4oKCkgPT4ge1xuICAgIGlmIChsYW5ndWFnZSkgcmV0dXJuIGxhbmd1YWdlO1xuICAgIGNvbnN0IHN0b3JlZCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2dlbmFzc2lzdF9sYW5ndWFnZScpIDogbnVsbDtcbiAgICBpZiAoc3RvcmVkKSByZXR1cm4gc3RvcmVkO1xuICAgIHJldHVybiByZXNvbHZlTGFuZ3VhZ2UoKTtcbiAgfSk7XG5cbiAgLy8gU2F2ZSBsYW5ndWFnZSB0byBsb2NhbFN0b3JhZ2Ugd2hlbiBpdCBjaGFuZ2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmICFsYW5ndWFnZSkge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2dlbmFzc2lzdF9sYW5ndWFnZScsIHNlbGVjdGVkTGFuZ3VhZ2UpO1xuICAgIH1cbiAgfSwgW3NlbGVjdGVkTGFuZ3VhZ2UsIGxhbmd1YWdlXSk7XG5cbiAgLy8gU3RhdGUgZm9yIHRyYWNraW5nIHNlbGVjdGVkIEZBUSBxdWVyeVxuICBjb25zdCBbc2VsZWN0ZWRGYXFRdWVyeSwgc2V0U2VsZWN0ZWRGYXFRdWVyeV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICAvLyBSZXNvbHZlIGxhbmd1YWdlOiBwcm9wID4gc2VsZWN0ZWQgPiBicm93c2VyID4gJ2VuJ1xuICBjb25zdCByZXNvbHZlZExhbmd1YWdlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGxhbmd1YWdlKSByZXR1cm4gbGFuZ3VhZ2U7XG4gICAgcmV0dXJuIHNlbGVjdGVkTGFuZ3VhZ2UgfHwgcmVzb2x2ZUxhbmd1YWdlKCkgfHwgJ2VuJztcbiAgfSwgW2xhbmd1YWdlLCBzZWxlY3RlZExhbmd1YWdlXSk7XG5cbiAgLy8gTWVyZ2UgbGFuZ3VhZ2UgYW5kIEZBUSBxdWVyeSBpbnRvIG1ldGFkYXRhXG4gIGNvbnN0IG1ldGFkYXRhV2l0aExhbmd1YWdlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLihtZXRhZGF0YSB8fCB7fSksXG4gICAgICBsYW5ndWFnZTogcmVzb2x2ZWRMYW5ndWFnZSxcbiAgICAgIC4uLihzZWxlY3RlZEZhcVF1ZXJ5ID8geyBmYXFfcXVlcnk6IHNlbGVjdGVkRmFxUXVlcnkgfSA6IHt9KSxcbiAgICB9O1xuICB9LCBbbWV0YWRhdGEsIHJlc29sdmVkTGFuZ3VhZ2UsIHNlbGVjdGVkRmFxUXVlcnldKTtcblxuICAvLyBHZXQgdHJhbnNsYXRpb25zIGJhc2VkIG9uIHJlc29sdmVkIGxhbmd1YWdlLCB0aGVuIG1lcmdlIHdpdGggY3VzdG9tIHRyYW5zbGF0aW9uc1xuICBjb25zdCB0cmFuc2xhdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBiYXNlVHJhbnNsYXRpb25zID0gZ2V0VHJhbnNsYXRpb25zRm9yTGFuZ3VhZ2UocmVzb2x2ZWRMYW5ndWFnZSk7XG4gICAgcmV0dXJuIG1lcmdlVHJhbnNsYXRpb25zKGN1c3RvbVRyYW5zbGF0aW9ucywgYmFzZVRyYW5zbGF0aW9ucyk7XG4gIH0sIFtyZXNvbHZlZExhbmd1YWdlLCBjdXN0b21UcmFuc2xhdGlvbnNdKTtcblxuICBjb25zdCB0ID0gKGtleTogc3RyaW5nLCBmYWxsYmFjaz86IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgcmV0dXJuIGdldFRyYW5zbGF0aW9uU3RyaW5nKGtleSwgdHJhbnNsYXRpb25zLCBmYWxsYmFjayk7XG4gIH07XG5cbiAgY29uc3QgaW5wdXRQbGFjZWhvbGRlciA9IHVzZU1lbW8oKCkgPT4gcGxhY2Vob2xkZXIgfHwgdCgnaW5wdXQucGxhY2Vob2xkZXInLCAnQXNrIGEgcXVlc3Rpb24nKSwgW3BsYWNlaG9sZGVyLCB0cmFuc2xhdGlvbnNdKTtcbiAgY29uc3QgW2lucHV0VmFsdWUsIHNldElucHV0VmFsdWVdID0gdXNlU3RhdGUoJycpO1xuICBjb25zdCBbc2hvd1Jlc2V0Q29uZmlybSwgc2V0U2hvd1Jlc2V0Q29uZmlybV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzaG93TWVudSwgc2V0U2hvd01lbnVdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2hvd0xhbmd1YWdlRHJvcGRvd24sIHNldFNob3dMYW5ndWFnZURyb3Bkb3duXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2lzUGxheWluZ0F1ZGlvLCBzZXRJc1BsYXlpbmdBdWRpb10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpc0Zsb2F0aW5nT3Blbiwgc2V0SXNGbG9hdGluZ09wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc3VibWl0dGVkRm9ybXMsIHNldFN1Ym1pdHRlZEZvcm1zXSA9IHVzZVN0YXRlPFNldDxudW1iZXI+PihuZXcgU2V0KCkpO1xuICBjb25zdCBbc3VibWl0dGluZ0Zvcm1JbmRleCwgc2V0U3VibWl0dGluZ0Zvcm1JbmRleF0gPSB1c2VTdGF0ZTxudW1iZXIgfCBudWxsPihudWxsKTtcbiAgY29uc3QgbWVudVJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHRleHRBcmVhUmVmID0gdXNlUmVmPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBoZWFkZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBbaGVhZGVySGVpZ2h0LCBzZXRIZWFkZXJIZWlnaHRdID0gdXNlU3RhdGUoNTYpO1xuICBjb25zdCBbc2hvd0JhY2tsaWdodCwgc2V0U2hvd0JhY2tsaWdodF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3Qge1xuICAgIG1lc3NhZ2VzLFxuICAgIGlzTG9hZGluZyxcbiAgICBzZW5kTWVzc2FnZSxcbiAgICBzZW5kQXVkaW9NZXNzYWdlLFxuICAgIHVwbG9hZEZpbGUsXG4gICAgcmVzZXRDb252ZXJzYXRpb24sXG4gICAgc3RhcnRDb252ZXJzYXRpb24sXG4gICAgdHJpZ2dlclN0YXJ0Rm9ybSxcbiAgICBzaG91bGRUcmlnZ2VyU3RhcnRGb3JtLFxuICAgIGNvbnZlcnNhdGlvbklkLFxuICAgIGd1ZXN0VG9rZW4sXG4gICAgcG9zc2libGVRdWVyaWVzLFxuICAgIGlzRmluYWxpemVkLFxuICAgIGlzQWdlbnRUeXBpbmcsXG4gICAgYWRkRmVlZGJhY2ssXG4gICAgYXZhaWxhYmxlTGFuZ3VhZ2VzOiBhZ2VudEF2YWlsYWJsZUxhbmd1YWdlcyxcbiAgICBhZ2VudElkLFxuICAgIGFnZW50TGl2ZVZvaWNlRW5hYmxlZCxcbiAgICBhZ2VudExpdmVWb2ljZVJlYWR5LFxuICAgIHdlbGNvbWVUaXRsZSxcbiAgICB3ZWxjb21lSW1hZ2VVcmwsXG4gICAgd2VsY29tZU1lc3NhZ2UsXG4gICAgaW5wdXREaXNjbGFpbWVySHRtbCxcbiAgICB0aGlua2luZ1BocmFzZXMsXG4gICAgdGhpbmtpbmdEZWxheU1zLFxuICAgIGZvcm1Ob2RlTG9jYWxlcyxcbiAgfSA9IHVzZUNoYXQoe1xuICAgIGJhc2VVcmwsXG4gICAgd2Vic29ja2V0VXJsLFxuICAgIGFwaUtleSxcbiAgICB0ZW5hbnQsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhV2l0aExhbmd1YWdlLFxuICAgIHVzZVdzLFxuICAgIHVzZVBvbGwsXG4gICAgbGFuZ3VhZ2U6IHJlc29sdmVkTGFuZ3VhZ2UsXG4gICAgb25FcnJvcixcbiAgICBvblRha2VvdmVyLFxuICAgIG9uRmluYWxpemUsXG4gICAgc2VydmVyVW5hdmFpbGFibGVNZXNzYWdlLFxuICAgIHNlcnZlclVuYXZhaWxhYmxlQ29udGFjdFVybCxcbiAgICBzZXJ2ZXJVbmF2YWlsYWJsZUNvbnRhY3RMYWJlbCxcbiAgICBvbkNvbmZpZ0xvYWRlZCxcbiAgfSk7XG5cbiAgY29uc3QgeyBjdXJyZW50VGhpbmtpbmdQYXJ0cywgY3VycmVudFRoaW5raW5nUGFydEluZGV4IH0gPSB1c2VUaGlua2luZ0FuaW1hdGlvbih7XG4gICAgaXNBZ2VudFR5cGluZyxcbiAgICB0aGlua2luZ1BocmFzZXMsXG4gICAgdGhpbmtpbmdEZWxheU1zLFxuICAgIHRyYW5zbGF0aW9ucyxcbiAgfSk7XG5cbiAgY29uc3QgeyBtZXNzYWdlc0VuZFJlZiwgY2hhdENvbnRhaW5lclJlZiB9ID0gdXNlU2Nyb2xsTWFuYWdlbWVudCh7XG4gICAgbWVzc2FnZXMsXG4gICAgaXNBZ2VudFR5cGluZyxcbiAgICBjdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXgsXG4gICAgY3VycmVudFRoaW5raW5nUGFydHNMZW5ndGg6IGN1cnJlbnRUaGlua2luZ1BhcnRzLmxlbmd0aCxcbiAgICBjb252ZXJzYXRpb25JZCxcbiAgICBpc0Zsb2F0aW5nT3BlbixcbiAgICBtb2RlLFxuICB9KTtcblxuICBjb25zdCB7XG4gICAgd2luZG93V2lkdGgsXG4gICAgd2luZG93SGVpZ2h0LFxuICAgIGlzRnVsbHNjcmVlbixcbiAgICBoYW5kbGVGdWxsc2NyZWVuVG9nZ2xlLFxuICB9ID0gdXNlVmlld3BvcnRNYW5hZ2VyKHtcbiAgICBtb2RlLFxuICAgIHdpZGdldCxcbiAgICBpc0Zsb2F0aW5nT3BlbixcbiAgICBzaG93UmVzZXRDb25maXJtLFxuICAgIHNob3dMYW5ndWFnZURyb3Bkb3duLFxuICAgIHNob3dNZW51LFxuICAgIG9uRXhpdEZ1bGxzY3JlZW4sXG4gICAgc2V0U2hvd1Jlc2V0Q29uZmlybSxcbiAgICBzZXRTaG93TGFuZ3VhZ2VEcm9wZG93bixcbiAgICBzZXRTaG93TWVudSxcbiAgfSk7XG5cbiAgY29uc3Qge1xuICAgIGF0dGFjaG1lbnRzLFxuICAgIHNldEF0dGFjaG1lbnRzLFxuICAgIHVwbG9hZGluZ0ZpbGVzLFxuICAgIGZpbGVFcnJvclRvYXN0LFxuICAgIGZpbGVJbnB1dFJlZixcbiAgICBoYW5kbGVGaWxlQ2hhbmdlLFxuICAgIGhhbmRsZVJlbW92ZUF0dGFjaG1lbnQsXG4gICAgY2xlYXJBdHRhY2htZW50cyxcbiAgfSA9IHVzZUZpbGVBdHRhY2htZW50cyh7IHVwbG9hZEZpbGUsIHQgfSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobGFuZ3VhZ2UpIHJldHVybjtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYWdlbnRBdmFpbGFibGVMYW5ndWFnZXMpIHx8IGFnZW50QXZhaWxhYmxlTGFuZ3VhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBub3JtYWxpemVkID0gYWdlbnRBdmFpbGFibGVMYW5ndWFnZXMubWFwKChsYW5nKSA9PiBsYW5nLnRvTG93ZXJDYXNlKCkpO1xuICAgIGlmICghbm9ybWFsaXplZC5pbmNsdWRlcyhzZWxlY3RlZExhbmd1YWdlLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICBzZXRTZWxlY3RlZExhbmd1YWdlKG5vcm1hbGl6ZWRbMF0pO1xuICAgIH1cbiAgfSwgW2FnZW50QXZhaWxhYmxlTGFuZ3VhZ2VzLCBsYW5ndWFnZSwgc2VsZWN0ZWRMYW5ndWFnZV0pO1xuXG4gIGNvbnN0IGF1ZGlvU2VydmljZSA9IHVzZVJlZjxBdWRpb1NlcnZpY2UgfCBudWxsPihudWxsKTtcbiAgY29uc3QgcmVDYXB0Y2hhVG9rZW5SZWYgPSB1c2VSZWY8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIGNvbnN0IGhhc1VzZXJNZXNzYWdlcyA9IG1lc3NhZ2VzLnNvbWUobWVzc2FnZSA9PiBtZXNzYWdlLnNwZWFrZXIgPT09ICdjdXN0b21lcicpO1xuXG4gIC8vIFdoZW4gYSBIdW1hbiBJbiBUaGUgTG9vcCBub2RlIHdpdGggXCJzaG93X29uX3N0YXJ0XCIgaXMgd2lyZWQgZGlyZWN0bHkgYWZ0ZXIgU3RhcnQsIHJ1blxuICAvLyB0aGUgd29ya2Zsb3cgb25jZSBhcyB0aGUgY29udmVyc2F0aW9uIG9wZW5zIHNvIGl0cyBmb3JtIGFwcGVhcnMgaW1tZWRpYXRlbHksIGJlZm9yZVxuICAvLyBhbnkgdmlzaXRvciBtZXNzYWdlLiBGaXJlcyBvbmx5IG9uIGEgZnJlc2ggY29udmVyc2F0aW9uOiBubyB2aXNpdG9yIG1lc3NhZ2VzIHlldCBhbmRcbiAgLy8gbm8gZm9ybSBhbHJlYWR5IHByZXNlbnQgKGEgd2VsY29tZSBtZXNzYWdlIG1heSBleGlzdDsgYSBwZXJzaXN0ZWQgZm9ybSBtdXN0IG5vdFxuICAvLyByZS10cmlnZ2VyIG9uIHJlbG9hZCkuXG4gIGNvbnN0IGhhc0Zvcm1SZXF1ZXN0ID0gbWVzc2FnZXMuc29tZSgobSkgPT4gbS50eXBlID09PSAnZm9ybV9yZXF1ZXN0Jyk7XG4gIGNvbnN0IHN0YXJ0Rm9ybVRyaWdnZXJlZFJlZiA9IHVzZVJlZihmYWxzZSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKFxuICAgICAgc2hvdWxkVHJpZ2dlclN0YXJ0Rm9ybSAmJlxuICAgICAgY29udmVyc2F0aW9uSWQgJiZcbiAgICAgICFpc0ZpbmFsaXplZCAmJlxuICAgICAgIWhhc1VzZXJNZXNzYWdlcyAmJlxuICAgICAgIWhhc0Zvcm1SZXF1ZXN0ICYmXG4gICAgICAhc3RhcnRGb3JtVHJpZ2dlcmVkUmVmLmN1cnJlbnRcbiAgICApIHtcbiAgICAgIHN0YXJ0Rm9ybVRyaWdnZXJlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgIHRyaWdnZXJTdGFydEZvcm0ocmVDYXB0Y2hhVG9rZW5SZWYuY3VycmVudCk7XG4gICAgfVxuICB9LCBbc2hvdWxkVHJpZ2dlclN0YXJ0Rm9ybSwgY29udmVyc2F0aW9uSWQsIGlzRmluYWxpemVkLCBoYXNVc2VyTWVzc2FnZXMsIGhhc0Zvcm1SZXF1ZXN0LCB0cmlnZ2VyU3RhcnRGb3JtXSk7XG5cbiAgLy8gQWxsb3cgYSBmcmVzaCB0cmlnZ2VyIGFmdGVyIGEgcmVzZXQgKG5ldyBjb252ZXJzYXRpb24gaWQgLyBjbGVhcmVkIG1lc3NhZ2VzKS5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWNvbnZlcnNhdGlvbklkKSB7XG4gICAgICBzdGFydEZvcm1UcmlnZ2VyZWRSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgIH1cbiAgfSwgW2NvbnZlcnNhdGlvbklkXSk7XG5cbiAgLy8gRm9ybS1zdWJtaXNzaW9uIHN0YXRlIGlzIGtleWVkIGJ5IG1lc3NhZ2UgaW5kZXgsIHdoaWNoIGlzIG9ubHkgbWVhbmluZ2Z1bCB3aXRoaW4gYVxuICAvLyBzaW5nbGUgY29udmVyc2F0aW9uLiBDbGVhciBpdCB3aGVuZXZlciB0aGUgY29udmVyc2F0aW9uIGNoYW5nZXMgc28gYSBmb3JtIHN1Ym1pdHRlZCBpblxuICAvLyBhIHByZXZpb3VzIGNvbnZlcnNhdGlvbiBkb2Vzbid0IG1hcmsgYSBuZXcgY29udmVyc2F0aW9uJ3MgZm9ybSAoYXQgdGhlIHNhbWUgaW5kZXgpIGFzXG4gIC8vIGFscmVhZHkgYW5zd2VyZWQg4oCUIHdoaWNoIHdvdWxkIHdyb25nbHkgaGlkZSBpdCBvbiBTdGFydCAoUmVzZXQgY2xlYXJlZCBpdCwgcGxhaW4gU3RhcnRcbiAgLy8gZGlkIG5vdCkuIFRoZSByZWxvYWQgY2FzZSBzdGF5cyBjb3JyZWN0OiBpdCByZWxpZXMgb24gaXNGb3JtQW5zd2VyZWQncyB0cmFuc2NyaXB0IGNoZWNrLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFN1Ym1pdHRlZEZvcm1zKG5ldyBTZXQoKSk7XG4gICAgc2V0U3VibWl0dGluZ0Zvcm1JbmRleChudWxsKTtcbiAgfSwgW2NvbnZlcnNhdGlvbklkXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBhdWRpb1NlcnZpY2UuY3VycmVudCA9IG5ldyBBdWRpb1NlcnZpY2UoeyBiYXNlVXJsLCB3ZWJzb2NrZXRVcmwsIGFwaUtleSB9KTtcbiAgfSwgW2Jhc2VVcmwsIHdlYnNvY2tldFVybCwgYXBpS2V5XSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBhdWRpb1NlcnZpY2UuY3VycmVudD8uc2V0R3Vlc3RUb2tlbihndWVzdFRva2VuID8/IG51bGwpO1xuICB9LCBbZ3Vlc3RUb2tlbl0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG1vZGUgPT09ICdmdWxsc2NyZWVuJyAmJiAhaXNGbG9hdGluZ09wZW4pIHtcbiAgICAgIHNldElzRmxvYXRpbmdPcGVuKHRydWUpO1xuICAgIH1cbiAgfSwgW21vZGUsIGlzRmxvYXRpbmdPcGVuXSk7XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCB1cGRhdGVIZWFkZXJIZWlnaHQgPSAoKSA9PiB7XG4gICAgICBzZXRIZWFkZXJIZWlnaHQoaGVhZGVyUmVmLmN1cnJlbnQ/Lm9mZnNldEhlaWdodCB8fCA1Nik7XG4gICAgfTtcbiAgICB1cGRhdGVIZWFkZXJIZWlnaHQoKTtcbiAgICBjb25zdCByZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB1cGRhdGVIZWFkZXJIZWlnaHQoKSk7XG4gICAgaWYgKGhlYWRlclJlZi5jdXJyZW50KSB7XG4gICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKGhlYWRlclJlZi5jdXJyZW50KTtcbiAgICB9XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZUhlYWRlckhlaWdodCk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB1cGRhdGVIZWFkZXJIZWlnaHQpO1xuICAgIH07XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc0FnZW50VHlwaW5nKSB7XG4gICAgICBzZXRTaG93QmFja2xpZ2h0KHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gc2V0U2hvd0JhY2tsaWdodChmYWxzZSksIDQyMCk7XG4gICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0aW1lcik7XG4gIH0sIFtpc0FnZW50VHlwaW5nXSk7XG5cbiAgY29uc3Qgc3VibWl0TWVzc2FnZSA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoaW5wdXRWYWx1ZS50cmltKCkgPT09ICcnICYmIGF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGlmIChpc0FnZW50VHlwaW5nKSByZXR1cm47XG4gICAgY29uc3QgdGV4dFRvU2VuZCA9IGlucHV0VmFsdWU7XG4gICAgY29uc3QgZmlsZXNUb1VwbG9hZCA9IGF0dGFjaG1lbnRzLm1hcChhID0+IGEuZmlsZSk7XG5cbiAgICBzZXRJbnB1dFZhbHVlKCcnKTtcbiAgICBzZXRBdHRhY2htZW50cyhbXSk7XG4gICAgaWYgKGZpbGVJbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICBmaWxlSW5wdXRSZWYuY3VycmVudC52YWx1ZSA9ICcnO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBleHRyYU1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgICAgIGlmIChzZWxlY3RlZEZhcVF1ZXJ5KSB7XG4gICAgICAgIGV4dHJhTWV0YWRhdGEuZmFxX3F1ZXJ5ID0gc2VsZWN0ZWRGYXFRdWVyeTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpbGVzVG9VcGxvYWQubGVuZ3RoID4gMCkge1xuICAgICAgICBleHRyYU1ldGFkYXRhLmF0dGFjaG1lbnRzID0gYXR0YWNobWVudHMubWFwKGEgPT4gYS5hdHRhY2htZW50KTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgc2VuZE1lc3NhZ2UodGV4dFRvU2VuZCwgZmlsZXNUb1VwbG9hZCwgZXh0cmFNZXRhZGF0YSwgcmVDYXB0Y2hhVG9rZW5SZWYuY3VycmVudCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIGlnbm9yZVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRleHRBcmVhUmVmLmN1cnJlbnQ/LmZvY3VzKCksIDApO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVTdWJtaXQgPSBhc3luYyAoZTogUmVhY3QuRm9ybUV2ZW50KSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGF3YWl0IHN1Ym1pdE1lc3NhZ2UoKTtcbiAgfTtcblxuICB0eXBlIEZvcm1TY2hlbWFGaWVsZCA9IHtcbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIGxhYmVsPzogc3RyaW5nO1xuICAgIG9wdGlvbnM/OiBBcnJheTx7IHZhbHVlPzogc3RyaW5nOyBsYWJlbD86IHN0cmluZyB9PjtcbiAgfTtcblxuICAvLyBPdmVybGF5IGEgZm9ybSBzY2hlbWEgd2l0aCB0aGUgc2VsZWN0ZWQgbGFuZ3VhZ2UncyBzdHJpbmdzIGZyb20gdGhlIGxvY2FsZSBidW5kbGVcbiAgLy8gKGtleWVkIGJ5IG5vZGUgaWQpLCBzbyBhIGRpc3BsYXllZCBmb3JtIHJlLWxvY2FsaXplcyBvbiBsYW5ndWFnZSBzd2l0Y2guIEZhbGxzIGJhY2tcbiAgLy8gdG8gdGhlIHNjaGVtYSdzIG93biBzdHJpbmdzIHdoZW4gYSB0cmFuc2xhdGlvbiBpcyBtaXNzaW5nLlxuICBjb25zdCBsb2NhbGl6ZUZvcm0gPSB1c2VDYWxsYmFjayhcbiAgICAoc2NoZW1hOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgaWYgKCFzY2hlbWEgfHwgdHlwZW9mIHNjaGVtYSAhPT0gJ29iamVjdCcpIHJldHVybiBzY2hlbWE7XG4gICAgICBjb25zdCBjb2RlID0gcmVzb2x2ZWRMYW5ndWFnZS50b0xvd2VyQ2FzZSgpLnNwbGl0KCctJylbMF07XG4gICAgICBjb25zdCBzbGljZSA9IGZvcm1Ob2RlTG9jYWxlcz8uW2NvZGVdPy5bc2NoZW1hLm5vZGVfaWRdO1xuICAgICAgaWYgKCFzbGljZSkgcmV0dXJuIHNjaGVtYTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnNjaGVtYSxcbiAgICAgICAgbWVzc2FnZTogc2xpY2UubWVzc2FnZSA/PyBzY2hlbWEubWVzc2FnZSxcbiAgICAgICAgZmllbGRzOiBBcnJheS5pc0FycmF5KHNjaGVtYS5maWVsZHMpXG4gICAgICAgICAgPyBzY2hlbWEuZmllbGRzLm1hcCgoZjogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHQgPSBmPy5uYW1lID8gc2xpY2UuZmllbGRzPy5bZi5uYW1lXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgaWYgKCF0KSByZXR1cm4gZjtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0LmxhYmVsID8/IGYubGFiZWwsXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHQucGxhY2Vob2xkZXIgPz8gZi5wbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogdC5kZXNjcmlwdGlvbiA/PyBmLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IEFycmF5LmlzQXJyYXkoZi5vcHRpb25zKVxuICAgICAgICAgICAgICAgICAgPyBmLm9wdGlvbnMubWFwKChvOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgLi4ubyxcbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdC5vcHRpb25zPy5bU3RyaW5nKG8/LnZhbHVlKV0gPz8gbz8ubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgOiBmLm9wdGlvbnMsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogc2NoZW1hLmZpZWxkcyxcbiAgICAgIH07XG4gICAgfSxcbiAgICBbcmVzb2x2ZWRMYW5ndWFnZSwgZm9ybU5vZGVMb2NhbGVzXSxcbiAgKTtcblxuICBjb25zdCBnZXRGb3JtU2NoZW1hID0gKFxuICAgIG1lc3NhZ2VJbmRleDogbnVtYmVyLFxuICApOiB7IG5vZGVfaWQ/OiBzdHJpbmc7IG1lc3NhZ2U/OiBzdHJpbmc7IGZpZWxkcz86IEZvcm1TY2hlbWFGaWVsZFtdIH0gfCBudWxsID0+IHtcbiAgICBjb25zdCBtc2cgPSBtZXNzYWdlc1ttZXNzYWdlSW5kZXhdO1xuICAgIGlmIChtc2c/LnR5cGUgPT09ICdmb3JtX3JlcXVlc3QnICYmIG1zZy50ZXh0KSB7XG4gICAgICB0cnkgeyByZXR1cm4gbG9jYWxpemVGb3JtKEpTT04ucGFyc2UobXNnLnRleHQpKTsgfSBjYXRjaCB7IC8qIHNraXAgKi8gfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICBjb25zdCBnZXRGb3JtTm9kZUlkID0gKG1lc3NhZ2VJbmRleDogbnVtYmVyKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+XG4gICAgZ2V0Rm9ybVNjaGVtYShtZXNzYWdlSW5kZXgpPy5ub2RlX2lkO1xuXG4gIC8vIEJ1aWxkIHRoZSBodW1hbi1yZWFkYWJsZSBjdXN0b21lciBtZXNzYWdlIGZyb20gdGhlIHN1Ym1pdHRlZCBmb3JtLiBXZSBzaG93IGVhY2ggZmllbGQnc1xuICAvLyBsYWJlbCwgYW5kIGZvciBvcHRpb24tYmFzZWQgZmllbGRzIChlLmcuIHNlbGVjdCkgdGhlIGNob3NlbiBvcHRpb24ncyBsYWJlbCBpbnN0ZWFkIG9mXG4gIC8vIGl0cyByYXcgdmFsdWUg4oCUIGJvdGggYWxyZWFkeSBpbiB0aGUgY29udmVyc2F0aW9uIGxhbmd1YWdlLCBzaW5jZSB0aGUgZm9ybSBzY2hlbWEgaXNcbiAgLy8gdHJhbnNsYXRlZC4gVGhlIHBheWxvYWQgKGBodW1hbl9pbl90aGVfbG9vcF9mcm9tX2Zvcm1gKSBrZWVwcyB0aGUgcmF3IGtleXMvdmFsdWVzLlxuICBjb25zdCBidWlsZEZvcm1TdW1tYXJ5ID0gKFxuICAgIGZvcm1EYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICBtZXNzYWdlSW5kZXg6IG51bWJlcixcbiAgKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCBmaWVsZEJ5TmFtZTogUmVjb3JkPHN0cmluZywgRm9ybVNjaGVtYUZpZWxkPiA9IHt9O1xuICAgIGZvciAoY29uc3QgZiBvZiBnZXRGb3JtU2NoZW1hKG1lc3NhZ2VJbmRleCk/LmZpZWxkcyA/PyBbXSkge1xuICAgICAgaWYgKGYgJiYgdHlwZW9mIGYubmFtZSA9PT0gJ3N0cmluZycpIGZpZWxkQnlOYW1lW2YubmFtZV0gPSBmO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZm9ybURhdGEpXG4gICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBmaWVsZEJ5TmFtZVtrZXldO1xuICAgICAgICBjb25zdCBsYWJlbCA9IGZpZWxkPy5sYWJlbCB8fCBrZXk7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IGZpZWxkPy5vcHRpb25zPy5maW5kKFxuICAgICAgICAgIChvKSA9PiBvICYmIFN0cmluZyhvLnZhbHVlKSA9PT0gU3RyaW5nKHZhbHVlKSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZGlzcGxheSA9IG9wdGlvbj8ubGFiZWwgfHwgdmFsdWU7XG4gICAgICAgIHJldHVybiBgJHtsYWJlbH06ICR7ZGlzcGxheX1gO1xuICAgICAgfSlcbiAgICAgIC5qb2luKCdcXG4nKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVGb3JtU3VibWl0ID0gYXN5bmMgKGZvcm1EYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgbWVzc2FnZUluZGV4OiBudW1iZXIpID0+IHtcbiAgICBpZiAoc3VibWl0dGluZ0Zvcm1JbmRleCAhPT0gbnVsbCB8fCBpc0FnZW50VHlwaW5nKSByZXR1cm47XG4gICAgc2V0U3VibWl0dGluZ0Zvcm1JbmRleChtZXNzYWdlSW5kZXgpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdW1tYXJ5VGV4dCA9IGJ1aWxkRm9ybVN1bW1hcnkoZm9ybURhdGEsIG1lc3NhZ2VJbmRleCk7XG4gICAgICBjb25zdCBub2RlSWQgPSBnZXRGb3JtTm9kZUlkKG1lc3NhZ2VJbmRleCk7XG4gICAgICBhd2FpdCBzZW5kTWVzc2FnZShzdW1tYXJ5VGV4dCwgW10sIHtcbiAgICAgICAgaHVtYW5faW5fdGhlX2xvb3BfZnJvbV9mb3JtOiBmb3JtRGF0YSxcbiAgICAgICAgLi4uKG5vZGVJZCAmJiB7IGh1bWFuX2luX3RoZV9sb29wX25vZGVfaWQ6IG5vZGVJZCB9KSxcbiAgICAgIH0sIHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQpO1xuICAgICAgc2V0U3VibWl0dGVkRm9ybXMoKHByZXYpID0+IG5ldyBTZXQocHJldikuYWRkKG1lc3NhZ2VJbmRleCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0U3VibWl0dGluZ0Zvcm1JbmRleChudWxsKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlRm9ybUNhbmNlbCA9IGFzeW5jIChtZXNzYWdlSW5kZXg6IG51bWJlcikgPT4ge1xuICAgIGlmIChzdWJtaXR0aW5nRm9ybUluZGV4ICE9PSBudWxsIHx8IGlzQWdlbnRUeXBpbmcpIHJldHVybjtcbiAgICBzZXRTdWJtaXR0aW5nRm9ybUluZGV4KG1lc3NhZ2VJbmRleCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG5vZGVJZCA9IGdldEZvcm1Ob2RlSWQobWVzc2FnZUluZGV4KTtcbiAgICAgIGF3YWl0IHNlbmRNZXNzYWdlKCdTa2lwcGVkJywgW10sIHtcbiAgICAgICAgaHVtYW5faW5fdGhlX2xvb3BfZnJvbV9mb3JtOiB7fSxcbiAgICAgICAgaHVtYW5faW5fdGhlX2xvb3BfY2FuY2VsbGVkOiB0cnVlLFxuICAgICAgICAuLi4obm9kZUlkICYmIHsgaHVtYW5faW5fdGhlX2xvb3Bfbm9kZV9pZDogbm9kZUlkIH0pLFxuICAgICAgfSwgcmVDYXB0Y2hhVG9rZW5SZWYuY3VycmVudCk7XG4gICAgICBzZXRTdWJtaXR0ZWRGb3JtcygocHJldikgPT4gbmV3IFNldChwcmV2KS5hZGQobWVzc2FnZUluZGV4KSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIGlnbm9yZVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRTdWJtaXR0aW5nRm9ybUluZGV4KG51bGwpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVRdWlja0FjdGlvbiA9IGFzeW5jICh0ZXh0OiBzdHJpbmcpID0+IHtcbiAgICBpZiAoIXRleHQudHJpbSgpKSByZXR1cm47XG4gICAgaWYgKGlzQWdlbnRUeXBpbmcpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZXh0cmFNZXRhZGF0YSA9IHNlbGVjdGVkRmFxUXVlcnkgPyB7IGZhcV9xdWVyeTogc2VsZWN0ZWRGYXFRdWVyeSB9IDogdW5kZWZpbmVkO1xuICAgICAgYXdhaXQgc2VuZE1lc3NhZ2UodGV4dCwgW10sIGV4dHJhTWV0YWRhdGEsIHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBpZ25vcmUgcXVpY2sgYWN0aW9uIGVycm9ycyB0byBhdm9pZCBpbnRlcnJ1cHRpbmcgdGhlIGZsb3dcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU2NoZWR1bGVDb25maXJtID0gYXN5bmMgKHNjaGVkdWxlOiBTY2hlZHVsZUl0ZW0pID0+IHtcbiAgICBjb25zdCBzdW1tYXJ5ID0gYFNjaGVkdWxlIGNvbmZpcm1lZCB3aXRoICR7c2NoZWR1bGUucmVzdGF1cmFudHMubGVuZ3RofSByZXN0YXVyYW50c2A7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHNlbmRNZXNzYWdlKHN1bW1hcnksIFtdLCB7IGNvbmZpcm1TY2hlZHVsZTogSlNPTi5zdHJpbmdpZnkoc2NoZWR1bGUpIH0sIHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gIH07XG5cbiAgLy8gTmV1dHJhbCwgdXNlci1mYWNpbmcgbm90aWNlIHNob3duIHdoZW4gYSBsaXZlIGNhbGwgY2FuJ3Qgc3RhcnQgLyBmYWlscy4gVGhlXG4gIC8vIG1lc3NhZ2UgaXMgYWxyZWFkeSBuZXV0cmFsICh0aGUgYmFja2VuZCBuZXZlciBzZW5kcyBpbnRlcm5hbCBjb25maWcgZGV0YWlsKSwgc29cbiAgLy8gaXQncyBzYWZlIGZvciBwdWJsaWMgd2lkZ2V0cyDigJQgaXQganVzdCBhdm9pZHMgYSBjb25mdXNpbmcgc2lsZW50IGNsb3NlLlxuICBjb25zdCBbbGl2ZVZvaWNlTm90aWNlLCBzZXRMaXZlVm9pY2VOb3RpY2VdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3QgaGFuZGxlVm9pY2VFcnJvciA9IChlcnJvcjogRXJyb3IpID0+IHtcbiAgICBzZXRMaXZlVm9pY2VOb3RpY2UoZXJyb3IubWVzc2FnZSB8fCAnVm9pY2UgaXMgY3VycmVudGx5IHVuYXZhaWxhYmxlJyk7XG4gICAgaWYgKG9uRXJyb3IpIHtcbiAgICAgIG9uRXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfTtcblxuICAvLyBWb2ljZS1vbmx5IG1vZGUgaXMgZHJpdmVuIHB1cmVseSBieSB0aGUgYWdlbnQ6IGl0J3Mgb24gd2hlbiB0aGUgYWdlbnQnc1xuICAvLyB3b3JrZmxvdyBjb250YWlucyBhIFZvaWNlIEFnZW50IG5vZGUgKGF1dG8tZGV0ZWN0ZWQgYnkgdGhlIGJhY2tlbmQgYW5kXG4gIC8vIHN1cmZhY2VkIHRocm91Z2ggYGFnZW50TGl2ZVZvaWNlRW5hYmxlZGApLiBObyBpbnRlZ3JhdG9yIHByb3AgaXMgaW52b2x2ZWQuXG4gIGNvbnN0IGxpdmVWb2ljZUVuYWJsZWQgPSBhZ2VudExpdmVWb2ljZUVuYWJsZWQ7XG4gIC8vIFdoZXRoZXIgbGl2ZSB2b2ljZSBjYW4gYWN0dWFsbHkgcnVuIChhIEdlbWluaSBwcm92aWRlciB3aXRoIGEga2V5IGlzIGNvbmZpZ3VyZWQpLlxuICAvLyBXaGVuIGZhbHNlIHdlIGtlZXAgdm9pY2Utb25seSBtb2RlIGJ1dCBkaXNhYmxlIHRoZSBjYWxsIGNvbnRyb2wgd2l0aCBhIG5ldXRyYWxcbiAgLy8gbWVzc2FnZSDigJQgdGhlIHNwZWNpZmljIHJlYXNvbiBzdGF5cyBzZXJ2ZXItc2lkZSwgbmV2ZXIgc2hvd24gdG8gcHVibGljIHVzZXJzLlxuICBjb25zdCBsaXZlVm9pY2VSZWFkeSA9IGFnZW50TGl2ZVZvaWNlUmVhZHk7XG5cbiAgLy8gTGl2ZSAoY29udGludW91cykgdm9pY2UgY29udmVyc2F0aW9uIGFnYWluc3QgdGhlIGFnZW50J3MgVm9pY2UgQWdlbnQgbm9kZS5cbiAgLy8gYGxpdmVDYXB0aW9uYCBpcyB0aGUgaW4tcHJvZ3Jlc3MgdHVybiAoc3RyZWFtcyBhcyB5b3Ugc3BlYWspOyBgbGl2ZVR1cm5zYCBhcmVcbiAgLy8gY29tcGxldGVkIHR1cm5zIGtlcHQgbG9jYWxseSBzbyB0aGV5IHN0YXkgb24gc2NyZWVuIGFjcm9zcyB0dXJucy4gYGNyZWF0ZVRpbWVgXG4gIC8vIGlzIGNhcHR1cmVkIG9uY2UgcGVyIHR1cm4gc28gdGhlIGJ1YmJsZSB0aW1lc3RhbXAgZG9lc24ndCBqaXR0ZXIgb24gcmUtcmVuZGVyLlxuICBjb25zdCBbbGl2ZUNhcHRpb24sIHNldExpdmVDYXB0aW9uXSA9IHVzZVN0YXRlPExpdmVUdXJuPih7IHVzZXI6ICcnLCBhZ2VudDogJycsIGNyZWF0ZVRpbWU6IDAgfSk7XG4gIGNvbnN0IFtsaXZlVHVybnMsIHNldExpdmVUdXJuc10gPSB1c2VTdGF0ZTxMaXZlVHVybltdPihbXSk7XG4gIGNvbnN0IGxpdmVWb2ljZSA9IHVzZUxpdmVWb2ljZVNlc3Npb24oe1xuICAgIGJhc2VVcmwsXG4gICAgYXBpS2V5LFxuICAgIGd1ZXN0VG9rZW4sXG4gICAgdGVuYW50LFxuICAgIGFnZW50SWQsXG4gICAgY29udmVyc2F0aW9uSWQsXG4gICAgbGFuZ3VhZ2U6IHJlc29sdmVkTGFuZ3VhZ2UsXG4gICAgb25FcnJvcjogaGFuZGxlVm9pY2VFcnJvcixcbiAgICBvbklucHV0VHJhbnNjcmlwdDogKHRleHQpID0+XG4gICAgICBzZXRMaXZlQ2FwdGlvbigoYykgPT4gKHsgLi4uYywgdXNlcjogYy51c2VyICsgdGV4dCwgY3JlYXRlVGltZTogYy5jcmVhdGVUaW1lIHx8IG5vd1NlYygpIH0pKSxcbiAgICBvbk91dHB1dFRyYW5zY3JpcHQ6ICh0ZXh0KSA9PlxuICAgICAgc2V0TGl2ZUNhcHRpb24oKGMpID0+ICh7IC4uLmMsIGFnZW50OiBjLmFnZW50ICsgdGV4dCwgY3JlYXRlVGltZTogYy5jcmVhdGVUaW1lIHx8IG5vd1NlYygpIH0pKSxcbiAgICBvblR1cm5Db21wbGV0ZTogKHR1cm4pID0+IHtcbiAgICAgIC8vIENvbW1pdCB0aGUgZmluaXNoZWQgdHVybiBzbyBpdCBzdGF5cyB2aXNpYmxlOyBjbGVhciB0aGUgaW4tcHJvZ3Jlc3MgY2FwdGlvbi5cbiAgICAgIHNldExpdmVUdXJucygocHJldikgPT4gWy4uLnByZXYsIHsgdXNlcjogdHVybi50cmFuc2NyaXB0LCBhZ2VudDogdHVybi5yZXNwb25zZSwgY3JlYXRlVGltZTogbm93U2VjKCkgfV0pO1xuICAgICAgc2V0TGl2ZUNhcHRpb24oeyB1c2VyOiAnJywgYWdlbnQ6ICcnLCBjcmVhdGVUaW1lOiAwIH0pO1xuICAgIH0sXG4gIH0pO1xuXG4gIC8vIEZ1bGwgY29udmVyc2F0aW9uIHJlc2V0OiBuZXcgdGhyZWFkICsgY2xlYXJlZCBpbnB1dC9hdHRhY2htZW50cy9mb3JtcyBhbmQgYW55XG4gIC8vIGxpdmUtdm9pY2UgdHJhbnNjcmlwdC4gU2hhcmVkIGJ5IHRoZSByZXNldC1jb25maXJtIGRpYWxvZyBhbmQgdGhlIGVuZC1jYWxsIGJ1dHRvbi5cbiAgY29uc3QgcGVyZm9ybVJlc2V0ID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIHNldElucHV0VmFsdWUoJycpO1xuICAgIGNsZWFyQXR0YWNobWVudHMoKTtcbiAgICBhd2FpdCByZXNldENvbnZlcnNhdGlvbihyZUNhcHRjaGFUb2tlblJlZi5jdXJyZW50KTtcbiAgICBzZXRTZWxlY3RlZEZhcVF1ZXJ5KG51bGwpO1xuICAgIHNldFN1Ym1pdHRlZEZvcm1zKG5ldyBTZXQoKSk7XG4gICAgc2V0U3VibWl0dGluZ0Zvcm1JbmRleChudWxsKTtcbiAgICBzZXRMaXZlVHVybnMoW10pO1xuICB9LCBbY2xlYXJBdHRhY2htZW50cywgcmVzZXRDb252ZXJzYXRpb25dKTtcblxuICAvLyBTdGFydGluZyBhIGZyZXNoIGNhbGwgY2xlYXJzIHRoZSBwcmV2aW91cyBjYWxsJ3MgdHJhbnNjcmlwdCBidWJibGVzICsgY2FwdGlvbi5cbiAgY29uc3Qgc3RhcnRMaXZlQ2FsbCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRMaXZlVm9pY2VOb3RpY2UobnVsbCk7XG4gICAgc2V0TGl2ZUNhcHRpb24oeyB1c2VyOiAnJywgYWdlbnQ6ICcnLCBjcmVhdGVUaW1lOiAwIH0pO1xuICAgIHNldExpdmVUdXJucyhbXSk7XG4gICAgbGl2ZVZvaWNlLnN0YXJ0KCk7XG4gIH0sIFtsaXZlVm9pY2VdKTtcbiAgLy8gRW5kaW5nIGEgY2FsbCBzdG9wcyB0aGUgYXVkaW8gc3RyZWFtIGFuZCByZXNldHMgdGhlIGNvbnZlcnNhdGlvbiDigJQgc2FtZSBhcyB0aGVcbiAgLy8gXCJyZXNldCBjb252ZXJzYXRpb25cIiBhY3Rpb24g4oCUIHNvIHRoZSBuZXh0IGNhbGwgc3RhcnRzIGZyb20gYSBjbGVhbiB0aHJlYWQuXG4gIGNvbnN0IGVuZExpdmVDYWxsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGxpdmVWb2ljZS5zdG9wKCk7XG4gICAgc2V0TGl2ZUNhcHRpb24oeyB1c2VyOiAnJywgYWdlbnQ6ICcnLCBjcmVhdGVUaW1lOiAwIH0pO1xuICAgIHZvaWQgcGVyZm9ybVJlc2V0KCk7XG4gIH0sIFtsaXZlVm9pY2UsIHBlcmZvcm1SZXNldF0pO1xuXG4gIC8vIEtlZXAgdGhlIGxpdmUgdHJhbnNjcmlwdCBpbiB2aWV3IGFzIGl0IGdyb3dzICh0aGUgc2Nyb2xsIG1hbmFnZXIgb25seSByZWFjdHNcbiAgLy8gdG8gY29tbWl0dGVkIGNoYXQgbWVzc2FnZXMsIG5vdCB0aGVzZSBsb2NhbCBsaXZlIGJ1YmJsZXMpLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbGl2ZVZvaWNlLmlzQWN0aXZlKSByZXR1cm47XG4gICAgY29uc3QgZWwgPSBjaGF0Q29udGFpbmVyUmVmLmN1cnJlbnQ7XG4gICAgaWYgKGVsKSBlbC5zY3JvbGxUb3AgPSBlbC5zY3JvbGxIZWlnaHQ7XG4gIH0sIFtsaXZlQ2FwdGlvbiwgbGl2ZVR1cm5zLCBsaXZlVm9pY2UuaXNBY3RpdmUsIGNoYXRDb250YWluZXJSZWZdKTtcblxuICAvLyBSZW5kZXIgYSBzaW5nbGUgbGl2ZS12b2ljZSBidWJibGUgKGNvbW1pdHRlZCB0dXJuIG9yIHN0cmVhbWluZyBjYXB0aW9uKSBhcyBhblxuICAvLyBvcmRpbmFyeSBjaGF0IG1lc3NhZ2UsIHNvIGl0IGxvb2tzIGlkZW50aWNhbCB0byB0ZXh0LW1vZGUgYnViYmxlcy5cbiAgY29uc3QgcmVuZGVyTGl2ZUJ1YmJsZSA9IChcbiAgICBzcGVha2VyOiAnY3VzdG9tZXInIHwgJ2FnZW50JyxcbiAgICB0ZXh0OiBzdHJpbmcsXG4gICAgY3JlYXRlVGltZTogbnVtYmVyLFxuICAgIGtleT86IHN0cmluZyxcbiAgKSA9PiAoXG4gICAgPENoYXRNZXNzYWdlQ29tcG9uZW50XG4gICAgICBrZXk9e2tleX1cbiAgICAgIG1lc3NhZ2U9e3sgY3JlYXRlX3RpbWU6IGNyZWF0ZVRpbWUsIHN0YXJ0X3RpbWU6IDAsIGVuZF90aW1lOiAwLjAxLCBzcGVha2VyLCB0ZXh0IH19XG4gICAgICB0aGVtZT17dGhlbWV9XG4gICAgICBlbmFibGVUeXBld3JpdGVyPXtmYWxzZX1cbiAgICAgIHRyYW5zbGF0aW9ucz17dHJhbnNsYXRpb25zfVxuICAgICAgbGFuZ3VhZ2U9e3Jlc29sdmVkTGFuZ3VhZ2V9XG4gICAgICBhZ2VudE5hbWU9e2FnZW50TmFtZX1cbiAgICAvPlxuICApO1xuXG4gIGNvbnN0IHBsYXlSZXNwb25zZUF1ZGlvID0gYXN5bmMgKHRleHQ6IHN0cmluZykgPT4ge1xuICAgIGlmICghYXVkaW9TZXJ2aWNlLmN1cnJlbnQgfHwgaXNQbGF5aW5nQXVkaW8pIHJldHVybjtcblxuICAgIHRyeSB7XG4gICAgICBzZXRJc1BsYXlpbmdBdWRpbyh0cnVlKTtcbiAgICAgIGNvbnN0IGF1ZGlvQmxvYiA9IGF3YWl0IGF1ZGlvU2VydmljZS5jdXJyZW50LnRleHRUb1NwZWVjaCh0ZXh0KTtcbiAgICAgIGF3YWl0IGF1ZGlvU2VydmljZS5jdXJyZW50LnBsYXlBdWRpbyhhdWRpb0Jsb2IpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAob25FcnJvcikge1xuICAgICAgICBvbkVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0SXNQbGF5aW5nQXVkaW8oZmFsc2UpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBhdWRpb1VybEJ1aWxkZXIgPSB1c2VDYWxsYmFjaygobWVzc2FnZUlkOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gYCR7YmFzZVVybH0vYXBpL2NvbnZlcnNhdGlvbnMvJHtjb252ZXJzYXRpb25JZH0vbWVzc2FnZXMvJHttZXNzYWdlSWR9L2F1ZGlvYDtcbiAgfSwgW2Jhc2VVcmwsIGNvbnZlcnNhdGlvbklkXSk7XG5cbiAgY29uc3QgYXVkaW9IZWFkZXJzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgaDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGlmIChndWVzdFRva2VuKSB7XG4gICAgICBoWydBdXRob3JpemF0aW9uJ10gPSBgQmVhcmVyICR7Z3Vlc3RUb2tlbn1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBoWyd4LWFwaS1rZXknXSA9IGFwaUtleTtcbiAgICB9XG4gICAgaWYgKHRlbmFudCkgaFsneC10ZW5hbnQtaWQnXSA9IHRlbmFudDtcbiAgICByZXR1cm4gaDtcbiAgfSwgW2FwaUtleSwgdGVuYW50LCBndWVzdFRva2VuXSk7XG5cbiAgY29uc3QgW2F1dG9QbGF5QXVkaW9NZXNzYWdlSWQsIHNldEF1dG9QbGF5QXVkaW9NZXNzYWdlSWRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IHByZXZNZXNzYWdlQ291bnRSZWYgPSB1c2VSZWY8bnVtYmVyPigwKTtcbiAgY29uc3QgaW5pdGlhbExvYWREb25lUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXVzZUF1ZGlvIHx8ICFtZXNzYWdlcy5sZW5ndGgpIHJldHVybjtcbiAgICBjb25zdCBwcmV2Q291bnQgPSBwcmV2TWVzc2FnZUNvdW50UmVmLmN1cnJlbnQ7XG4gICAgcHJldk1lc3NhZ2VDb3VudFJlZi5jdXJyZW50ID0gbWVzc2FnZXMubGVuZ3RoO1xuICAgIGlmICghaW5pdGlhbExvYWREb25lUmVmLmN1cnJlbnQpIHtcbiAgICAgIGluaXRpYWxMb2FkRG9uZVJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2VzLmxlbmd0aCA8PSBwcmV2Q291bnQpIHJldHVybjtcbiAgICBjb25zdCBsYXN0ID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV07XG4gICAgaWYgKGxhc3Quc3BlYWtlciA9PT0gJ2FnZW50JyAmJiBsYXN0LnR5cGUgPT09ICdhdWRpbycgJiYgbGFzdC5tZXNzYWdlX2lkKSB7XG4gICAgICBzZXRBdXRvUGxheUF1ZGlvTWVzc2FnZUlkKGxhc3QubWVzc2FnZV9pZCk7XG4gICAgfVxuICB9LCBbbWVzc2FnZXMsIHVzZUF1ZGlvXSk7XG5cbiAgY29uc3QgaGFuZGxlUXVlcnlDbGljayA9IGFzeW5jIChxdWVyeTogc3RyaW5nKSA9PiB7XG4gICAgaWYgKGlzQWdlbnRUeXBpbmcgfHwgaXNMb2FkaW5nKSByZXR1cm47XG5cbiAgICBzZXRTZWxlY3RlZEZhcVF1ZXJ5KHF1ZXJ5KTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzZW5kTWVzc2FnZShxdWVyeSwgW10sIHsgZmFxX3F1ZXJ5OiBxdWVyeSB9LCByZUNhcHRjaGFUb2tlblJlZi5jdXJyZW50KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gaWdub3JlXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVN0YXJ0Q29udmVyc2F0aW9uID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmIChpc0xvYWRpbmcpIHJldHVybjtcblxuICAgIHNldElucHV0VmFsdWUoJycpO1xuICAgIGNsZWFyQXR0YWNobWVudHMoKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzdGFydENvbnZlcnNhdGlvbihyZUNhcHRjaGFUb2tlblJlZi5jdXJyZW50KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc3RhcnRpbmcgY29udmVyc2F0aW9uJywgZXJyb3IpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVNZW51Q2xpY2sgPSAoKSA9PiB7XG4gICAgc2V0U2hvd01lbnUocHJldiA9PiAhcHJldik7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUmVzZXRDbGljayA9ICgpID0+IHtcbiAgICBzZXRTaG93TWVudShmYWxzZSk7XG4gICAgc2V0U2hvd1Jlc2V0Q29uZmlybSh0cnVlKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVDb25maXJtUmVzZXQgPSAoKSA9PiB7XG4gICAgc2V0U2hvd1Jlc2V0Q29uZmlybShmYWxzZSk7XG4gICAgLy8gZW5kTGl2ZUNhbGwgc3RvcHMgYW55IGFjdGl2ZSBjYWxsIGFuZCBydW5zIHRoZSBmdWxsIHJlc2V0OyBoYXJtbGVzcyBpZiBub1xuICAgIC8vIGNhbGwgaXMgYWN0aXZlLCBzbyBib3RoIGVudHJ5IHBvaW50cyBzaGFyZSBvbmUgY29kZSBwYXRoLlxuICAgIGVuZExpdmVDYWxsKCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ2FuY2VsUmVzZXQgPSAoKSA9PiB7XG4gICAgc2V0U2hvd1Jlc2V0Q29uZmlybShmYWxzZSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlTGFuZ3VhZ2VDaGFuZ2UgPSAobGFuZzogc3RyaW5nKSA9PiB7XG4gICAgc2V0U2VsZWN0ZWRMYW5ndWFnZShsYW5nKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVSZUNhcHRjaGFWZXJpZnkgPSB1c2VDYWxsYmFjaygodG9rZW46IHN0cmluZykgPT4ge1xuICAgIHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQgPSB0b2tlbjtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGFsbExhbmd1YWdlcyA9IFtcbiAgICB7IGNvZGU6ICdlbicsIG5hbWU6ICdFbmdsaXNoJyB9LFxuICAgIHsgY29kZTogJ2VzJywgbmFtZTogJ0VzcGHDsW9sJyB9LFxuICAgIHsgY29kZTogJ2ZyJywgbmFtZTogJ0ZyYW7Dp2FpcycgfSxcbiAgICB7IGNvZGU6ICdkZScsIG5hbWU6ICdEZXV0c2NoJyB9LFxuICAgIHsgY29kZTogJ2l0JywgbmFtZTogJ0l0YWxpYW5vJyB9LFxuICAgIHsgY29kZTogJ3B0JywgbmFtZTogJ1BvcnR1Z3XDqnMnIH0sXG4gICAgeyBjb2RlOiAnemgnLCBuYW1lOiAn5Lit5paHJyB9LFxuICBdO1xuICBjb25zdCBhdmFpbGFibGVMYW5ndWFnZXMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhZ2VudEF2YWlsYWJsZUxhbmd1YWdlcykpIHtcbiAgICAgIGNvbnN0IGFsbG93ZWQgPSBuZXcgU2V0KFxuICAgICAgICBhZ2VudEF2YWlsYWJsZUxhbmd1YWdlcy5tYXAoKGxhbmcpID0+IGxhbmcudG9Mb3dlckNhc2UoKSksXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFsbExhbmd1YWdlcy5maWx0ZXIoKGxhbmcpID0+IGFsbG93ZWQuaGFzKGxhbmcuY29kZSkpO1xuICAgIH1cbiAgICByZXR1cm4gYWxsTGFuZ3VhZ2VzO1xuICB9LCBbYWdlbnRBdmFpbGFibGVMYW5ndWFnZXNdKTtcbiAgY29uc3QgaGFzTGFuZ3VhZ2VPcHRpb25zID0gYXZhaWxhYmxlTGFuZ3VhZ2VzLmxlbmd0aCA+IDA7XG5cbiAgLy8gUmVzb2x2ZSB0aGVtZSB2YWx1ZXNcbiAgY29uc3QgdGhlbWVQYXJhbXMgPSByZXNvbHZlVGhlbWUodGhlbWUpO1xuICBjb25zdCB7IHByaW1hcnlDb2xvciwgYmFja2dyb3VuZENvbG9yLCB0ZXh0Q29sb3IsIGZvbnRGYW1pbHksIGZvbnRTaXplIH0gPSB0aGVtZVBhcmFtcztcbiAgY29uc3QgZm9udFNpemVOdW1iZXIgPSB0eXBlb2YgZm9udFNpemUgPT09ICdzdHJpbmcnID8gcGFyc2VJbnQoZm9udFNpemUsIDEwKSA6ICh0eXBlb2YgZm9udFNpemUgPT09ICdudW1iZXInID8gZm9udFNpemUgOiAxNCk7XG5cbiAgY29uc3QgcG9zaXRpb24gPSBmbG9hdGluZ0NvbmZpZy5wb3NpdGlvbiB8fCAnYm90dG9tLXJpZ2h0JztcbiAgY29uc3Qgb2Zmc2V0ID0gZmxvYXRpbmdDb25maWcub2Zmc2V0IHx8IHsgeDogMjAsIHk6IDIwIH07XG4gIGNvbnN0IG9mZnNldFggPSBvZmZzZXQueCB8fCAyMDtcbiAgY29uc3Qgb2Zmc2V0WSA9IG9mZnNldC55IHx8IDIwO1xuXG4gIGNvbnN0IGlzRmxvYXRpbmdEb2NrZWQgPSBtb2RlID09PSAnZmxvYXRpbmcnICYmICFpc0Z1bGxzY3JlZW47XG5cbiAgLy8gQ29tcHV0ZWQgc3R5bGVzXG4gIGNvbnN0IGNvbnRhaW5lclN0eWxlID0gZ2V0Q29udGFpbmVyU3R5bGUoeyBpc0Z1bGxzY3JlZW4sIGlzRmxvYXRpbmdEb2NrZWQsIHdpbmRvd1dpZHRoLCB0OiB0aGVtZVBhcmFtcyB9KTtcbiAgY29uc3QgaGVhZGVyU3R5bGUgPSBnZXRIZWFkZXJTdHlsZSh0aGVtZVBhcmFtcyk7XG4gIGNvbnN0IGhlYWRlclRpdGxlU3R5bGUgPSBnZXRIZWFkZXJUaXRsZVN0eWxlKGZvbnRGYW1pbHkpO1xuICBjb25zdCBoZWFkZXJTdWJ0aXRsZVN0eWxlID0gZ2V0SGVhZGVyU3VidGl0bGVTdHlsZShmb250RmFtaWx5KTtcbiAgY29uc3QgbWVudVBvcHVwU3R5bGUgPSBnZXRNZW51UG9wdXBTdHlsZShiYWNrZ3JvdW5kQ29sb3IpO1xuICBjb25zdCBtZW51SXRlbVN0eWxlID0gZ2V0TWVudUl0ZW1TdHlsZSh0aGVtZVBhcmFtcyk7XG4gIGNvbnN0IGNvbnRlbnRDYXJkU3R5bGUgPSBnZXRDb250ZW50Q2FyZFN0eWxlKGJhY2tncm91bmRDb2xvcik7XG4gIGNvbnN0IHNlbmRCdXR0b25TdHlsZSA9IGdldFNlbmRCdXR0b25TdHlsZShwcmltYXJ5Q29sb3IpO1xuICBjb25zdCBwb3NzaWJsZVF1ZXJpZXNDb250YWluZXJTdHlsZSA9IGdldFBvc3NpYmxlUXVlcmllc0NvbnRhaW5lclN0eWxlKGZvbnRGYW1pbHkpO1xuICBjb25zdCBxdWVyeUJ1dHRvblN0eWxlID0gZ2V0UXVlcnlCdXR0b25TdHlsZSh0aGVtZVBhcmFtcyk7XG4gIGNvbnN0IGNvbmZpcm1PdmVybGF5U3R5bGUgPSBnZXRDb25maXJtT3ZlcmxheVN0eWxlKHNob3dSZXNldENvbmZpcm0pO1xuICBjb25zdCBjb25maXJtRGlhbG9nU3R5bGUgPSBnZXRDb25maXJtRGlhbG9nU3R5bGUodGhlbWVQYXJhbXMpO1xuICBjb25zdCBkaXNjbGFpbWVyU3R5bGUgPSBnZXREaXNjbGFpbWVyU3R5bGUoZm9udEZhbWlseSk7XG5cbiAgY29uc3QgdGV4dEFyZWFGb250U2l6ZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICh3aW5kb3dXaWR0aCA8PSA3NjgpIHtcbiAgICAgIHJldHVybiBNYXRoLm1heCgxNiwgZm9udFNpemVOdW1iZXIpICsgJ3B4JztcbiAgICB9XG4gICAgcmV0dXJuIGZvbnRTaXplO1xuICB9LCBbd2luZG93V2lkdGgsIGZvbnRTaXplLCBmb250U2l6ZU51bWJlcl0pO1xuXG4gIGNvbnN0IHRleHRBcmVhTGluZUhlaWdodCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHNpemUgPSB3aW5kb3dXaWR0aCA8PSA3NjggPyBNYXRoLm1heCgxNiwgZm9udFNpemVOdW1iZXIpIDogZm9udFNpemVOdW1iZXI7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoc2l6ZSAqIDEuNSk7XG4gIH0sIFt3aW5kb3dXaWR0aCwgZm9udFNpemVOdW1iZXJdKTtcblxuICBjb25zdCB0ZXh0QXJlYU1heEhlaWdodENhbGN1bGF0ZWQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gdGV4dEFyZWFMaW5lSGVpZ2h0ICogMztcbiAgfSwgW3RleHRBcmVhTGluZUhlaWdodF0pO1xuXG4gIGNvbnN0IHRleHRBcmVhU3R5bGUgPSBnZXRUZXh0QXJlYVN0eWxlKHtcbiAgICB0ZXh0QXJlYUZvbnRTaXplLFxuICAgIGZvbnRGYW1pbHksXG4gICAgdGV4dEFyZWFMaW5lSGVpZ2h0LFxuICAgIHRleHRBcmVhTWF4SGVpZ2h0Q2FsY3VsYXRlZCxcbiAgICB0ZXh0Q29sb3IsXG4gIH0pO1xuXG4gIC8vIEEgZm9ybV9yZXF1ZXN0IGlzIFwiYW5zd2VyZWRcIiBvbmNlIHRoZSB2aXNpdG9yIGhhcyByZXNwb25kZWQgdG8gaXQuIEJlc2lkZXMgdGhlXG4gIC8vIG9wdGltaXN0aWMgaW4tc2Vzc2lvbiBmbGFnIChgc3VibWl0dGVkRm9ybXNgKSwgd2UgYWxzbyB0cmVhdCBpdCBhcyBhbnN3ZXJlZCB3aGVuIGFcbiAgLy8gbGF0ZXIgY3VzdG9tZXIgbWVzc2FnZSBleGlzdHMg4oCUIHRoYXQgc3Vydml2ZXMgYSBwYWdlIHJlbG9hZCAod2hlcmUgYHN1Ym1pdHRlZEZvcm1zYFxuICAvLyBpcyBnb25lKSwgc28gYSBjb21wbGV0ZWQgZm9ybSBuZXZlciByZWFwcGVhcnMgYWZ0ZXIgcmVmcmVzaC5cbiAgY29uc3QgaXNGb3JtQW5zd2VyZWQgPSAoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4gPT4ge1xuICAgIGlmIChzdWJtaXR0ZWRGb3Jtcy5oYXMoaW5kZXgpKSByZXR1cm4gdHJ1ZTtcbiAgICBmb3IgKGxldCBqID0gaW5kZXggKyAxOyBqIDwgbWVzc2FnZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGlmIChtZXNzYWdlc1tqXS5zcGVha2VyID09PSAnY3VzdG9tZXInKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIGNvbnN0IGhhc1BlbmRpbmdGb3JtID0gbWVzc2FnZXMuc29tZShcbiAgICAobXNnLCBpZHgpID0+XG4gICAgICBtc2cudHlwZSA9PT0gJ2Zvcm1fcmVxdWVzdCcgJiYgbXNnLnNwZWFrZXIgPT09ICdhZ2VudCcgJiYgIWlzRm9ybUFuc3dlcmVkKGlkeCksXG4gICk7XG5cbiAgY29uc3QgcGVuZGluZ0Zvcm0gPSB1c2VNZW1vKCgpID0+IHtcbiAgICBmb3IgKGxldCBpID0gbWVzc2FnZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IG1zZyA9IG1lc3NhZ2VzW2ldO1xuICAgICAgaWYgKG1zZy50eXBlID09PSAnZm9ybV9yZXF1ZXN0JyAmJiBtc2cuc3BlYWtlciA9PT0gJ2FnZW50JyAmJiAhaXNGb3JtQW5zd2VyZWQoaSkpIHtcbiAgICAgICAgdHJ5IHsgcmV0dXJuIHsgc2NoZW1hOiBsb2NhbGl6ZUZvcm0oSlNPTi5wYXJzZShtc2cudGV4dCkpLCBpbmRleDogaSB9OyB9XG4gICAgICAgIGNhdGNoIHsgLyogc2tpcCAqLyB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW21lc3NhZ2VzLCBzdWJtaXR0ZWRGb3JtcywgbG9jYWxpemVGb3JtXSk7XG5cbiAgY29uc3QgaXNTZW5kRGlzYWJsZWQgPSAoaW5wdXRWYWx1ZS50cmltKCkgPT09ICcnICYmIGF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gMCkgfHwgaXNBZ2VudFR5cGluZyB8fCBoYXNQZW5kaW5nRm9ybTtcblxuICBjb25zdCBhdXRvUmVzaXplVGV4dEFyZWEgPSAoKSA9PiB7XG4gICAgY29uc3QgZWwgPSB0ZXh0QXJlYVJlZi5jdXJyZW50O1xuICAgIGlmICghZWwpIHJldHVybjtcbiAgICBlbC5zdHlsZS5oZWlnaHQgPSAnYXV0byc7XG4gICAgY29uc3QgbmV3SGVpZ2h0ID0gTWF0aC5taW4oZWwuc2Nyb2xsSGVpZ2h0LCB0ZXh0QXJlYU1heEhlaWdodENhbGN1bGF0ZWQpO1xuICAgIGVsLnN0eWxlLmhlaWdodCA9IGAke25ld0hlaWdodH1weGA7XG4gICAgZWwuc3R5bGUub3ZlcmZsb3dZID0gZWwuc2Nyb2xsSGVpZ2h0ID4gdGV4dEFyZWFNYXhIZWlnaHRDYWxjdWxhdGVkID8gJ2F1dG8nIDogJ2hpZGRlbic7XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBhdXRvUmVzaXplVGV4dEFyZWEoKTtcbiAgfSwgW2lucHV0VmFsdWUsIHRleHRBcmVhTWF4SGVpZ2h0Q2FsY3VsYXRlZF0pO1xuXG4gIGNvbnN0IHNob3dBZ2VudERpc2NsYWltZXIgPSBCb29sZWFuKGlucHV0RGlzY2xhaW1lckh0bWwpO1xuICBjb25zdCBhZ2VudERpc2NsYWltZXJDb250ZW50ID0gc2hvd0FnZW50RGlzY2xhaW1lciAmJiAoXG4gICAgPHNwYW4gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3sgX19odG1sOiBpbnB1dERpc2NsYWltZXJIdG1sISB9fSAvPlxuICApO1xuXG4gIGNvbnN0IGZsb2F0aW5nQ29udGFpbmVyU3R5bGUgPSBnZXRGbG9hdGluZ0NvbnRhaW5lclN0eWxlKHtcbiAgICBtb2RlLFxuICAgIGlzRnVsbHNjcmVlbixcbiAgICB3aW5kb3dXaWR0aCxcbiAgICB3aW5kb3dIZWlnaHQsXG4gICAgcG9zaXRpb24sXG4gICAgb2Zmc2V0WCxcbiAgICBvZmZzZXRZLFxuICB9KTtcblxuICBjb25zdCByZW5kZXJMYW5ndWFnZVNlbGVjdG9yID0gKCkgPT4ge1xuICAgIGlmICghU0hPV19DSEFUX0xBTkdVQUdFX1NFTEVDVE9SKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIWhhc0xhbmd1YWdlT3B0aW9ucyB8fCAoY29udmVyc2F0aW9uSWQgJiYgIWlzRmluYWxpemVkKSB8fCBtZXNzYWdlcy5sZW5ndGggPiAwIHx8IGhhc1VzZXJNZXNzYWdlcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8TGFuZ3VhZ2VTZWxlY3RvclxuICAgICAgICBhdmFpbGFibGVMYW5ndWFnZXM9e2F2YWlsYWJsZUxhbmd1YWdlc31cbiAgICAgICAgc2VsZWN0ZWRMYW5ndWFnZT17cmVzb2x2ZWRMYW5ndWFnZX1cbiAgICAgICAgb25MYW5ndWFnZUNoYW5nZT17aGFuZGxlTGFuZ3VhZ2VDaGFuZ2V9XG4gICAgICAgIHRyYW5zbGF0aW9ucz17dHJhbnNsYXRpb25zfVxuICAgICAgICB0aGVtZT17dGhlbWV9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgcmVuZGVyV2l0aFJlQ2FwdGNoYSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghcmVDYXB0Y2hhS2V5KSB7XG4gICAgICByZXR1cm4gKGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUpID0+IDw+e2NoaWxkcmVufTwvPjtcbiAgICB9XG5cbiAgICByZXR1cm4gKGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUpID0+IChcbiAgICAgIDxHb29nbGVSZUNhcHRjaGFQcm92aWRlciByZUNhcHRjaGFLZXk9e3JlQ2FwdGNoYUtleSB8fCAnJ30+XG4gICAgICAgIDxHb29nbGVSZUNhcHRjaGFcbiAgICAgICAgICBhY3Rpb249XCJnZW5hc3Npc3RfY2hhdFwiXG4gICAgICAgICAgb25WZXJpZnk9e2hhbmRsZVJlQ2FwdGNoYVZlcmlmeX1cbiAgICAgICAgICByZWZyZXNoUmVDYXB0Y2hhPXtmYWxzZX1cbiAgICAgICAgLz5cbiAgICAgICAgPD57Y2hpbGRyZW59PC8+XG4gICAgICA8L0dvb2dsZVJlQ2FwdGNoYVByb3ZpZGVyPlxuICAgICk7XG4gIH0sIFtyZUNhcHRjaGFLZXksIGhhbmRsZVJlQ2FwdGNoYVZlcmlmeV0pO1xuXG4gIGNvbnN0IHJlbmRlckNoYXRDb21wb25lbnQgPSAoKSA9PiAoXG4gICAgPGRpdiBzdHlsZT17Y29udGFpbmVyU3R5bGV9IGRhdGEtZ2VuYXNzaXN0LXJvb3Q9XCJ0cnVlXCI+XG4gICAgICA8c3R5bGU+e0NTU19LRVlGUkFNRVN9PC9zdHlsZT5cbiAgICAgIDxkaXYgc3R5bGU9e2hlYWRlclN0eWxlfSByZWY9e2hlYWRlclJlZn0+XG4gICAgICAgIDxkaXYgc3R5bGU9e2xvZ29Db250YWluZXJTdHlsZX0+XG4gICAgICAgICAgPGltZyBzcmM9e2xvZ29Vcmw/LnRyaW0oKSB8fCBjaGF0TG9nb30gYWx0PVwiTG9nb1wiIHN0eWxlPXtsb2dvU3R5bGV9IC8+XG4gICAgICAgICAgPGRpdiBzdHlsZT17aGVhZGVyVGl0bGVDb250YWluZXJTdHlsZX0+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXtoZWFkZXJUaXRsZVN0eWxlfT57aGVhZGVyVGl0bGV9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXtoZWFkZXJTdWJ0aXRsZVN0eWxlfT5cbiAgICAgICAgICAgICAge2Rlc2NyaXB0aW9uID8/IHQoJ2hlYWRlci5zdWJ0aXRsZScpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogJzhweCcgfX0+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgc3R5bGU9e21lbnVCdXR0b25TdHlsZX1cbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZU1lbnVDbGlja31cbiAgICAgICAgICAgIHRpdGxlPXt0KCdtZW51LnRpdGxlJyl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPE1vcmVWZXJ0aWNhbCBzaXplPXsyNH0gY29sb3I9XCIjMTExMTExXCIgLz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB7bW9kZSA9PT0gJ2Zsb2F0aW5nJyAmJiAoXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHN0eWxlPXttZW51QnV0dG9uU3R5bGV9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldElzRmxvYXRpbmdPcGVuKGZhbHNlKX1cbiAgICAgICAgICAgICAgdGl0bGU9XCJDbG9zZSBjaGF0XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFggc2l6ZT17MjR9IGNvbG9yPVwiIzExMTExMVwiIC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgeyFub0NvbG9yQW5pbWF0aW9uICYmIHNob3dCYWNrbGlnaHQgJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgIHJpZ2h0OiAwLFxuICAgICAgICAgICAgdG9wOiBNYXRoLm1heCgwLCBoZWFkZXJIZWlnaHQgLSAxNCksXG4gICAgICAgICAgICBoZWlnaHQ6IDQyLFxuICAgICAgICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgICAgICAgekluZGV4OiAxLFxuICAgICAgICAgICAgb3BhY2l0eTogaXNBZ2VudFR5cGluZyA/IDEgOiAwLFxuICAgICAgICAgICAgdHJhbnNpdGlvbjogJ29wYWNpdHkgNDIwbXMgZWFzZS1pbi1vdXQnLFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgICAgdG9wOiA2LFxuICAgICAgICAgICAgICBoZWlnaHQ6IDMyLFxuICAgICAgICAgICAgICB3aWR0aDogJzc4JScsXG4gICAgICAgICAgICAgIGZpbHRlcjogJ2JsdXIoMjJweCknLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICAgICAgICAgIGBsaW5lYXItZ3JhZGllbnQoOTBkZWcsICR7aGV4VG9SZ2JhKHByaW1hcnlDb2xvciwgMC4wKX0gMCUsICR7aGV4VG9SZ2JhKHByaW1hcnlDb2xvciwgMC4zNSl9IDE1JSwgJHtoZXhUb1JnYmEocHJpbWFyeUNvbG9yLCAwLjU1KX0gNTAlLCAke2hleFRvUmdiYShwcmltYXJ5Q29sb3IsIDAuMzUpfSA4NSUsICR7aGV4VG9SZ2JhKHByaW1hcnlDb2xvciwgMC4wKX0gMTAwJSlgLFxuICAgICAgICAgICAgICB3aWxsQ2hhbmdlOiAndHJhbnNmb3JtLCBvcGFjaXR5JyxcbiAgICAgICAgICAgICAgYW5pbWF0aW9uOiAnZ2EtYmFja2xpZ2h0LXN3ZWVwMiAxLjJzIGN1YmljLWJlemllcigwLjQsMC4wLDAuMiwxKSBpbmZpbml0ZSBhbHRlcm5hdGUsIGdhLWJhY2tsaWdodC1wdWxzZSAyLjRzIGVhc2UtaW4tb3V0IGluZmluaXRlJyxcbiAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAxOCxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuXG4gICAgICB7c2hvd01lbnUgJiYgKFxuICAgICAgICA8ZGl2IHJlZj17bWVudVJlZn0gc3R5bGU9e21lbnVQb3B1cFN0eWxlfT5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXttZW51SXRlbVN0eWxlfSBvbkNsaWNrPXtoYW5kbGVSZXNldENsaWNrfT5cbiAgICAgICAgICAgIDxSZWZyZXNoQ3cgc2l6ZT17MTZ9IC8+XG4gICAgICAgICAgICB7dCgnbWVudS5yZXNldENvbnZlcnNhdGlvbicpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHttb2RlICE9PSAnZnVsbHNjcmVlbicgJiYgKFxuICAgICAgICAgICAgPGRpdiBzdHlsZT17bWVudUl0ZW1TdHlsZX0gb25DbGljaz17aGFuZGxlRnVsbHNjcmVlblRvZ2dsZX0+XG4gICAgICAgICAgICAgIHtpc0Z1bGxzY3JlZW4gPyA8TWluaW1pemUyIHNpemU9ezE2fSAvPiA6IDxNYXhpbWl6ZTIgc2l6ZT17MTZ9IC8+fVxuICAgICAgICAgICAgICB7dCgnbWVudS5mdWxsc2NyZWVuJyl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtoYXNMYW5ndWFnZU9wdGlvbnMgJiYgKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBzdHlsZT17eyAuLi5tZW51SXRlbVN0eWxlLCBwb3NpdGlvbjogJ3JlbGF0aXZlJywgYm9yZGVyQm90dG9tOiAnbm9uZScgfX1cbiAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIHNldFNob3dMYW5ndWFnZURyb3Bkb3duKCFzaG93TGFuZ3VhZ2VEcm9wZG93bik7XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxHbG9iZSBzaXplPXsxNn0gLz5cbiAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZmxleDogMSB9fT57dCgnbWVudS5sYW5ndWFnZScpfTwvc3Bhbj5cbiAgICAgICAgICAgICAge3Nob3dMYW5ndWFnZURyb3Bkb3duICYmIChcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgICAgICAgICAgIHRvcDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6ICc0cHgnLFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGJhY2tncm91bmRDb2xvcixcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnOHB4JyxcbiAgICAgICAgICAgICAgICAgICAgYm94U2hhZG93OiAnMCAycHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMSknLFxuICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogJzE4MHB4JyxcbiAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6ICcyMDBweCcsXG4gICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICAgICAgICAgICAgICAgICAgekluZGV4OiAxMDAxLFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHthdmFpbGFibGVMYW5ndWFnZXMubWFwKChsYW5nLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAga2V5PXtsYW5nLmNvZGV9XG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2FwOiAnOHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICcxMHB4IDE1cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRleHRDb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogcmVzb2x2ZWRMYW5ndWFnZSA9PT0gbGFuZy5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gKHRoZW1lPy5zZWNvbmRhcnlDb2xvciB8fCAnI2Y1ZjVmNScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckJvdHRvbTogaW5kZXggPCBhdmFpbGFibGVMYW5ndWFnZXMubGVuZ3RoIC0gMSA/ICcxcHggc29saWQgI2YwZjBmMCcgOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udEZhbWlseSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb246ICdiYWNrZ3JvdW5kLWNvbG9yIDAuMnMgZWFzZScsXG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZWRMYW5ndWFnZSAhPT0gbGFuZy5jb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGUuY3VycmVudFRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGVtZT8uc2Vjb25kYXJ5Q29sb3IgfHwgJyNmNWY1ZjUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgb25Nb3VzZUxlYXZlPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc29sdmVkTGFuZ3VhZ2UgIT09IGxhbmcuY29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBlLmN1cnJlbnRUYXJnZXQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJ3RyYW5zcGFyZW50JztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlTGFuZ3VhZ2VDaGFuZ2UobGFuZy5jb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFNob3dMYW5ndWFnZURyb3Bkb3duKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFNob3dNZW51KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge2xhbmcubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cblxuICAgICAgPGRpdiBzdHlsZT17Y29udGVudENhcmRTdHlsZX0+XG4gICAgICAgIDxkaXYgc3R5bGU9e2NoYXRDb250YWluZXJTdHlsZX0gcmVmPXtjaGF0Q29udGFpbmVyUmVmfT5cbiAgICAgICAgICB7cmVuZGVyTGFuZ3VhZ2VTZWxlY3RvcigpfVxuXG4gICAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzaG91bGRTaG93U3ludGhldGljV2VsY29tZSA9XG4gICAgICAgICAgICAgIHNob3dXZWxjb21lQmVmb3JlU3RhcnQgJiZcbiAgICAgICAgICAgICAgIWhhc1VzZXJNZXNzYWdlcyAmJlxuICAgICAgICAgICAgICAobWVzc2FnZXMubGVuZ3RoID09PSAwIHx8IG1lc3NhZ2VzWzBdLnNwZWFrZXIgIT09ICdhZ2VudCcpICYmXG4gICAgICAgICAgICAgIChCb29sZWFuKHdlbGNvbWVUaXRsZSkgfHwgQm9vbGVhbih3ZWxjb21lSW1hZ2VVcmwpIHx8IEJvb2xlYW4od2VsY29tZU1lc3NhZ2UpKVxuICAgICAgICAgICAgICAmJiBjb252ZXJzYXRpb25JZDtcblxuICAgICAgICAgICAgaWYgKCFzaG91bGRTaG93U3ludGhldGljV2VsY29tZSkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApO1xuICAgICAgICAgICAgY29uc3Qgc3ludGhldGljV2VsY29tZTogQ2hhdE1lc3NhZ2UgPSB7XG4gICAgICAgICAgICAgIGNyZWF0ZV90aW1lOiBub3csXG4gICAgICAgICAgICAgIHN0YXJ0X3RpbWU6IDAsXG4gICAgICAgICAgICAgIGVuZF90aW1lOiAwLjAxLFxuICAgICAgICAgICAgICBzcGVha2VyOiAnYWdlbnQnLFxuICAgICAgICAgICAgICB0ZXh0OiB3ZWxjb21lTWVzc2FnZSB8fCAnJyxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxDaGF0TWVzc2FnZUNvbXBvbmVudFxuICAgICAgICAgICAgICAgIGtleT1cIl9fc3ludGhldGljX3dlbGNvbWVfX1wiXG4gICAgICAgICAgICAgICAgbWVzc2FnZT17c3ludGhldGljV2VsY29tZX1cbiAgICAgICAgICAgICAgICB0aGVtZT17dGhlbWV9XG4gICAgICAgICAgICAgICAgaXNGaXJzdE1lc3NhZ2U9e3RydWV9XG4gICAgICAgICAgICAgICAgaXNOZXh0U2FtZVNwZWFrZXI9e2ZhbHNlfVxuICAgICAgICAgICAgICAgIGlzUHJldlNhbWVTcGVha2VyPXtmYWxzZX1cbiAgICAgICAgICAgICAgICBlbmFibGVUeXBld3JpdGVyPXtmYWxzZX1cbiAgICAgICAgICAgICAgICB3ZWxjb21lSW1hZ2VVcmw9e3dlbGNvbWVJbWFnZVVybCB8fCB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgd2VsY29tZVRpdGxlPXt3ZWxjb21lVGl0bGUgfHwgdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgIHBvc3NpYmxlUXVlcmllcz17cG9zc2libGVRdWVyaWVzfVxuICAgICAgICAgICAgICAgIG9uUXVpY2tRdWVyeT17aGFuZGxlUXVlcnlDbGlja31cbiAgICAgICAgICAgICAgICBvblF1aWNrQWN0aW9uPXtoYW5kbGVRdWlja0FjdGlvbn1cbiAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbnM9e3RyYW5zbGF0aW9uc31cbiAgICAgICAgICAgICAgICBsYW5ndWFnZT17cmVzb2x2ZWRMYW5ndWFnZX1cbiAgICAgICAgICAgICAgICBhZ2VudE5hbWU9e2FnZW50TmFtZX1cbiAgICAgICAgICAgICAgICBpc0FnZW50VHlwaW5nPXtpc0FnZW50VHlwaW5nfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KSgpfVxuICAgICAgICAgIHsoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RBZ2VudEluZGV4ID0gbWVzc2FnZXMuZmluZEluZGV4KG0gPT4gbS5zcGVha2VyID09PSAnYWdlbnQnKTtcblxuICAgICAgICAgICAgLy8gTGl2ZS12b2ljZSB0dXJucyBhcmUgcmVuZGVyZWQgbG9jYWxseSAoYmVsb3cpIHRoZSBtb21lbnQgdGhleSBmaW5pc2guXG4gICAgICAgICAgICAvLyBFYWNoIGlzIGFsc28gcGVyc2lzdGVkIGFuZCBicm9hZGNhc3QgYmFjayBpbnRvIGBtZXNzYWdlc2A7IHN1cHByZXNzIHRoYXRcbiAgICAgICAgICAgIC8vIGNvcHkgc28gYSB0dXJuIGlzbid0IHNob3duIHR3aWNlIChhbmQgbmV2ZXIgYmxpbmtzIGFzIHRoZSB0d28gc3dhcCkuXG4gICAgICAgICAgICBjb25zdCBsaXZlVHVybktleXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdHVybiBvZiBsaXZlVHVybnMpIHtcbiAgICAgICAgICAgICAgaWYgKHR1cm4udXNlci50cmltKCkpIGxpdmVUdXJuS2V5cy5hZGQoYGN1c3RvbWVyOiR7dHVybi51c2VyLnRyaW0oKX1gKTtcbiAgICAgICAgICAgICAgaWYgKHR1cm4uYWdlbnQudHJpbSgpKSBsaXZlVHVybktleXMuYWRkKGBhZ2VudDoke3R1cm4uYWdlbnQudHJpbSgpfWApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBhcHBseU1lc3NhZ2VGaWx0ZXIgPSAobWVzc2FnZTogQ2hhdE1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudHlwZSA9PT0gJ2ZpbGUnKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIGlmIChsaXZlVHVybktleXMuaGFzKGAke21lc3NhZ2Uuc3BlYWtlcn06JHsobWVzc2FnZS50ZXh0IHx8ICcnKS50cmltKCl9YCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBtZXNzYWdlcy5maWx0ZXIoYXBwbHlNZXNzYWdlRmlsdGVyKS5tYXAoKG1lc3NhZ2UsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChtZXNzYWdlLnR5cGUgPT09ICdmb3JtX3JlcXVlc3QnICYmIG1lc3NhZ2Uuc3BlYWtlciA9PT0gJ2FnZW50Jykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBmb3JtU2NoZW1hID0gbG9jYWxpemVGb3JtKEpTT04ucGFyc2UobWVzc2FnZS50ZXh0KSk7XG4gICAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIHJlYWwgbWVzc2FnZSBwb3NpdGlvbiAoZmlsdGVyaW5nIGNhbiBzaGlmdCB0aGUgbWFwIGluZGV4KSBzbyB0aGVcbiAgICAgICAgICAgICAgICAgIC8vIGFuc3dlcmVkIGNoZWNrIG1hdGNoZXMgdGhlIG92ZXJsYXkvZm9vdGVyIHBhdGggYW5kIHN1cnZpdmVzIHJlbG9hZC5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSW5kZXggPSBtZXNzYWdlcy5pbmRleE9mKG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgaXNQZW5kaW5nID0gIWlzRm9ybUFuc3dlcmVkKG9yaWdpbmFsSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e2luZGV4fSBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXhXaWR0aDogJzg1JScsIG1hcmdpbkJvdHRvbTogJzhweCcgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogJzE0cHgnLCBjb2xvcjogJyMwMDAwMDAnLCBmb250V2VpZ2h0OiA2MDAsIG1hcmdpbkJvdHRvbTogNCB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHthZ2VudE5hbWUgfHwgJ0FnZW50J31cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICB7Zm9ybURpc3BsYXkgPT09ICdpbmxpbmUnICYmIGlzUGVuZGluZyA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEeW5hbWljRm9ybU1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hPXtmb3JtU2NoZW1hfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvblN1Ym1pdD17KGRhdGEpID0+IGhhbmRsZUZvcm1TdWJtaXQoZGF0YSwgb3JpZ2luYWxJbmRleCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2FuY2VsPXsoKSA9PiBoYW5kbGVGb3JtQ2FuY2VsKG9yaWdpbmFsSW5kZXgpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBpc1N1Ym1pdHRpbmc9e3N1Ym1pdHRpbmdGb3JtSW5kZXggPT09IG9yaWdpbmFsSW5kZXh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzU3VibWl0dGVkPXtmYWxzZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWFyeUNvbG9yPXtwcmltYXJ5Q29sb3J9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk9e2ZvbnRGYW1pbHl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJjYXJkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnI2YzZjRmNicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzEycHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTBweCAxNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcxNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjMzc0MTUxJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udEZhbWlseSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7Zm9ybVNjaGVtYS5tZXNzYWdlIHx8ICdQbGVhc2UgZmlsbCB0aGUgZm9ybSBiZWxvdy4nfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIG5vcm1hbCByZW5kZXJpbmcgaWYgSlNPTiBwYXJzZSBmYWlsc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IGlzTmV4dFNhbWVTcGVha2VyID0gaW5kZXggPCBtZXNzYWdlcy5sZW5ndGggLSAxICYmIG1lc3NhZ2VzW2luZGV4ICsgMV0uc3BlYWtlciA9PT0gbWVzc2FnZS5zcGVha2VyO1xuICAgICAgICAgICAgICBjb25zdCBpc1ByZXZTYW1lU3BlYWtlciA9IGluZGV4ID4gMCAmJiBtZXNzYWdlc1tpbmRleCAtIDFdLnNwZWFrZXIgPT09IG1lc3NhZ2Uuc3BlYWtlcjtcbiAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgYWdlbnQgZ3JlZXRzIG9uIHN0YXJ0LCB0aGF0IGdyZWV0aW5nIGlzIGEgbm9ybWFsIHJlcGx5IOKAlCBub3QgdGhlXG4gICAgICAgICAgICAgIC8vIFwid2VsY29tZVwiIG1lc3NhZ2Ug4oCUIHNvIGRvbid0IGdpdmUgaXQgdGhlIGZpcnN0LW1lc3NhZ2Ugd2VsY29tZSB0cmVhdG1lbnRcbiAgICAgICAgICAgICAgLy8gKHdoaWNoIHdvdWxkIHNwbGl0IGl0cyB0ZXh0IGludG8gYSBiaWcgdGl0bGUgKyBib2R5KS5cbiAgICAgICAgICAgICAgY29uc3QgaXNGaXJzdEFnZW50TWVzc2FnZSA9XG4gICAgICAgICAgICAgICAgaW5kZXggPT09IGZpcnN0QWdlbnRJbmRleCAmJiBtZXNzYWdlLnNwZWFrZXIgPT09ICdhZ2VudCcgJiYgIWhhc1VzZXJNZXNzYWdlcyAmJiAhc2hvdWxkVHJpZ2dlclN0YXJ0Rm9ybTtcbiAgICAgICAgICAgICAgY29uc3QgZGlzcGxheU1lc3NhZ2UgPVxuICAgICAgICAgICAgICAgIGlzRmlyc3RBZ2VudE1lc3NhZ2UgJiYgd2VsY29tZU1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgID8geyAuLi5tZXNzYWdlLCB0ZXh0OiB3ZWxjb21lTWVzc2FnZSB9XG4gICAgICAgICAgICAgICAgICA6IG1lc3NhZ2U7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8Q2hhdE1lc3NhZ2VDb21wb25lbnRcbiAgICAgICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgICAgICBtZXNzYWdlPXtkaXNwbGF5TWVzc2FnZX1cbiAgICAgICAgICAgICAgICAgIHRoZW1lPXt0aGVtZX1cbiAgICAgICAgICAgICAgICAgIG9uUGxheUF1ZGlvPXttZXNzYWdlLnNwZWFrZXIgPT09ICdhZ2VudCcgPyBwbGF5UmVzcG9uc2VBdWRpbyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgIGlzUGxheWluZ0F1ZGlvPXtpc1BsYXlpbmdBdWRpb31cbiAgICAgICAgICAgICAgICAgIGlzRmlyc3RNZXNzYWdlPXtpc0ZpcnN0QWdlbnRNZXNzYWdlfVxuICAgICAgICAgICAgICAgICAgaXNOZXh0U2FtZVNwZWFrZXI9e2lzTmV4dFNhbWVTcGVha2VyfVxuICAgICAgICAgICAgICAgICAgaXNQcmV2U2FtZVNwZWFrZXI9e2lzUHJldlNhbWVTcGVha2VyfVxuICAgICAgICAgICAgICAgICAgb25GZWVkYmFjaz17KG1lc3NhZ2VJZCwgdmFsdWUpID0+IGFkZEZlZWRiYWNrKG1lc3NhZ2VJZCwgdmFsdWUpfVxuICAgICAgICAgICAgICAgICAgZW5hYmxlVHlwZXdyaXRlcj17aW5kZXggPT09IG1lc3NhZ2VzLmxlbmd0aCAtIDEgJiYgbWVzc2FnZS5zcGVha2VyID09PSAnYWdlbnQnfVxuICAgICAgICAgICAgICAgICAgd2VsY29tZUltYWdlVXJsPXtpc0ZpcnN0QWdlbnRNZXNzYWdlID8gKHdlbGNvbWVJbWFnZVVybCB8fCB1bmRlZmluZWQpIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgd2VsY29tZVRpdGxlPXtpc0ZpcnN0QWdlbnRNZXNzYWdlID8gKHdlbGNvbWVUaXRsZSB8fCB1bmRlZmluZWQpIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgcG9zc2libGVRdWVyaWVzPXtpc0ZpcnN0QWdlbnRNZXNzYWdlID8gcG9zc2libGVRdWVyaWVzIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgb25RdWlja1F1ZXJ5PXtoYW5kbGVRdWVyeUNsaWNrfVxuICAgICAgICAgICAgICAgICAgb25RdWlja0FjdGlvbj17aGFuZGxlUXVpY2tBY3Rpb259XG4gICAgICAgICAgICAgICAgICBvblNjaGVkdWxlQ29uZmlybT17aGFuZGxlU2NoZWR1bGVDb25maXJtfVxuICAgICAgICAgICAgICAgICAgaXNMYXN0TWVzc2FnZT17aW5kZXggPT09IG1lc3NhZ2VzLmxlbmd0aCAtIDEgJiYgbWVzc2FnZS5zcGVha2VyID09PSAnYWdlbnQnfVxuICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25zPXt0cmFuc2xhdGlvbnN9XG4gICAgICAgICAgICAgICAgICBsYW5ndWFnZT17cmVzb2x2ZWRMYW5ndWFnZX1cbiAgICAgICAgICAgICAgICAgIGFnZW50TmFtZT17YWdlbnROYW1lfVxuICAgICAgICAgICAgICAgICAgaXNBZ2VudFR5cGluZz17aXNBZ2VudFR5cGluZ31cbiAgICAgICAgICAgICAgICAgIGF1ZGlvVXJsQnVpbGRlcj17bWVzc2FnZS50eXBlID09PSAnYXVkaW8nICYmIHVzZUF1ZGlvID8gYXVkaW9VcmxCdWlsZGVyIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgYXVkaW9IZWFkZXJzPXttZXNzYWdlLnR5cGUgPT09ICdhdWRpbycgJiYgdXNlQXVkaW8gPyBhdWRpb0hlYWRlcnMgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICBhdXRvUGxheUF1ZGlvTWVzc2FnZUlkPXthdXRvUGxheUF1ZGlvTWVzc2FnZUlkfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KSgpfVxuICAgICAgICAgIHtpc0FnZW50VHlwaW5nICYmIGN1cnJlbnRUaGlua2luZ1BhcnRzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXhXaWR0aDogJzgwJScgfX0+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFNpemU6ICcxNHB4JywgY29sb3I6ICcjMDAwMDAwJywgZm9udFdlaWdodDogNjAwLCBtYXJnaW5Cb3R0b206IDQgfX0+e2FnZW50TmFtZSB8fCB0KCdsYWJlbHMuYWdlbnQnKX08L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogMCxcbiAgICAgICAgICAgICAgICBtYXhXaWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBrZXk9e2Ake2N1cnJlbnRUaGlua2luZ1BhcnRJbmRleH0tJHtjdXJyZW50VGhpbmtpbmdQYXJ0cy5qb2luKCd8Jyl9YH1cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogJ2dhLXRoaW5rLWNoYW5nZSAyMjBtcyBlYXNlJyxcbiAgICAgICAgICAgICAgICAgICAgd2lsbENoYW5nZTogJ3RyYW5zZm9ybSwgb3BhY2l0eScsXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnIzZiNzI4MCcsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMTNweCcsXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHtjdXJyZW50VGhpbmtpbmdQYXJ0c1tjdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXhdIHx8IGN1cnJlbnRUaGlua2luZ1BhcnRzW2N1cnJlbnRUaGlua2luZ1BhcnRzLmxlbmd0aCAtIDFdfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgICAgey8qIENvbXBsZXRlZCBsaXZlLXZvaWNlIHR1cm5zLCByZW5kZXJlZCBhcyBvcmRpbmFyeSBjaGF0IGJ1YmJsZXMgYW5kIGtlcHRcbiAgICAgICAgICAgICAgaW4gbG9jYWwgc3RhdGUgc28gdGhleSBzdGF5IHZpc2libGUgYWNyb3NzIHR1cm5zLiBUaGUgcGVyc2lzdGVkIGNvcHkgb2ZcbiAgICAgICAgICAgICAgZWFjaCB0dXJuIGlzIGZpbHRlcmVkIG91dCBvZiBgbWVzc2FnZXNgIGFib3ZlLCBzbyB0aGVzZSBhcmUgdGhlIHNpbmdsZVxuICAgICAgICAgICAgICBzb3VyY2Ugb2YgdHJ1dGggb24gc2NyZWVuIOKAlCB0aGV5IG5ldmVyIGdldCBoaWRkZW4sIHNvIG5vdGhpbmcgYmxpbmtzLiAqL31cbiAgICAgICAgICB7bGl2ZVR1cm5zLm1hcCgodHVybiwgaSkgPT4gKFxuICAgICAgICAgICAgPFJlYWN0LkZyYWdtZW50IGtleT17YGxpdmUtdHVybi0ke2l9YH0+XG4gICAgICAgICAgICAgIHt0dXJuLnVzZXIudHJpbSgpICE9PSAnJyAmJiByZW5kZXJMaXZlQnViYmxlKCdjdXN0b21lcicsIHR1cm4udXNlciwgdHVybi5jcmVhdGVUaW1lKX1cbiAgICAgICAgICAgICAge3R1cm4uYWdlbnQudHJpbSgpICE9PSAnJyAmJiByZW5kZXJMaXZlQnViYmxlKCdhZ2VudCcsIHR1cm4uYWdlbnQsIHR1cm4uY3JlYXRlVGltZSl9XG4gICAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICkpfVxuICAgICAgICAgIHsvKiBJbi1wcm9ncmVzcyB0dXJuOiBzdHJlYW1zIHRoZSBwYXJ0aWFsIHRyYW5zY3JpcHQgbGl2ZSAoQ2hhdE1lc3NhZ2Ugbm93XG4gICAgICAgICAgICAgIHRyYWNrcyBpdHMgdGV4dCBwcm9wLCBzbyB0aGVzZSB1cGRhdGUgaW4gcGxhY2UgYXMgY2h1bmtzIGFycml2ZSkuICovfVxuICAgICAgICAgIHtsaXZlVm9pY2UuaXNBY3RpdmUgJiYgbGl2ZUNhcHRpb24udXNlci50cmltKCkgIT09ICcnICYmXG4gICAgICAgICAgICByZW5kZXJMaXZlQnViYmxlKCdjdXN0b21lcicsIGxpdmVDYXB0aW9uLnVzZXIsIGxpdmVDYXB0aW9uLmNyZWF0ZVRpbWUsICdfX2xpdmVfY2FwdGlvbl91c2VyX18nKX1cbiAgICAgICAgICB7bGl2ZVZvaWNlLmlzQWN0aXZlICYmIGxpdmVDYXB0aW9uLmFnZW50LnRyaW0oKSAhPT0gJycgJiZcbiAgICAgICAgICAgIHJlbmRlckxpdmVCdWJibGUoJ2FnZW50JywgbGl2ZUNhcHRpb24uYWdlbnQsIGxpdmVDYXB0aW9uLmNyZWF0ZVRpbWUsICdfX2xpdmVfY2FwdGlvbl9hZ2VudF9fJyl9XG4gICAgICAgICAgPGRpdiByZWY9e21lc3NhZ2VzRW5kUmVmfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3Nob3dXZWxjb21lQmVmb3JlU3RhcnQgJiYgKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBzaG93aW5nU3ludGhldGljV2VsY29tZSA9XG4gICAgICAgICAgICAhaGFzVXNlck1lc3NhZ2VzICYmXG4gICAgICAgICAgICAobWVzc2FnZXMubGVuZ3RoID09PSAwIHx8IG1lc3NhZ2VzWzBdLnNwZWFrZXIgIT09ICdhZ2VudCcpICYmXG4gICAgICAgICAgICAoQm9vbGVhbih3ZWxjb21lVGl0bGUpIHx8IEJvb2xlYW4od2VsY29tZUltYWdlVXJsKSB8fCBCb29sZWFuKHdlbGNvbWVNZXNzYWdlKSk7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHBvc3NpYmxlUXVlcmllcy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAhaGFzVXNlck1lc3NhZ2VzICYmXG4gICAgICAgICAgICAobWVzc2FnZXMubGVuZ3RoID09PSAwIHx8IG1lc3NhZ2VzWzBdLnNwZWFrZXIgIT09ICdhZ2VudCcpICYmXG4gICAgICAgICAgICAhc2hvd2luZ1N5bnRoZXRpY1dlbGNvbWVcbiAgICAgICAgICApO1xuICAgICAgICB9KSgpICYmIChcbiAgICAgICAgICA8ZGl2IHN0eWxlPXtwb3NzaWJsZVF1ZXJpZXNDb250YWluZXJTdHlsZX0+XG4gICAgICAgICAgICB7cG9zc2libGVRdWVyaWVzLm1hcCgocXVlcnksIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgICAgIHN0eWxlPXtxdWVyeUJ1dHRvblN0eWxlfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVF1ZXJ5Q2xpY2socXVlcnkpfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc0xvYWRpbmcgfHwgaXNBZ2VudFR5cGluZ31cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtxdWVyeX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cblxuICAgICAgICB7ZmlsZUVycm9yVG9hc3QgJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIG1hcmdpbjogJzAgMTZweCA4cHgnLFxuICAgICAgICAgICAgICBwYWRkaW5nOiAnMTBweCAxNHB4JyxcbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnI0ZGRjNFMCcsXG4gICAgICAgICAgICAgIGNvbG9yOiAnI0U2NTEwMCcsXG4gICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzEycHgnLFxuICAgICAgICAgICAgICBmb250U2l6ZSxcbiAgICAgICAgICAgICAgZm9udEZhbWlseSxcbiAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgZ2FwOiAnOHB4JyxcbiAgICAgICAgICAgICAgZmxleFNocmluazogMCxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICByb2xlPVwiYWxlcnRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxBbGVydENpcmNsZSBzaXplPXsxOH0gc3R5bGU9e3sgZmxleFNocmluazogMCB9fSAvPlxuICAgICAgICAgICAgPHNwYW4+e2ZpbGVFcnJvclRvYXN0fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cblxuICAgICAgICB7bGl2ZVZvaWNlTm90aWNlICYmIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBtYXJnaW46ICcwIDE2cHggOHB4JyxcbiAgICAgICAgICAgICAgcGFkZGluZzogJzEwcHggMTRweCcsXG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJyNGRkYzRTAnLFxuICAgICAgICAgICAgICBjb2xvcjogJyNFNjUxMDAnLFxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICcxMnB4JyxcbiAgICAgICAgICAgICAgZm9udFNpemUsXG4gICAgICAgICAgICAgIGZvbnRGYW1pbHksXG4gICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgIGdhcDogJzhweCcsXG4gICAgICAgICAgICAgIGZsZXhTaHJpbms6IDAsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8QWxlcnRDaXJjbGUgc2l6ZT17MTh9IHN0eWxlPXt7IGZsZXhTaHJpbms6IDAgfX0gLz5cbiAgICAgICAgICAgIDxzcGFuPntsaXZlVm9pY2VOb3RpY2V9PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuXG4gICAgICAgIHt1c2VGaWxlICYmIGF0dGFjaG1lbnRzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgcGFkZGluZzogJzAgMTZweCcsIG1hcmdpbkJvdHRvbTogJzhweCcsIGRpc3BsYXk6ICdmbGV4JywgZ2FwOiAnOHB4JywgZmxleFdyYXA6ICd3cmFwJyB9fT5cbiAgICAgICAgICAgIHthdHRhY2htZW50cy5tYXAoKGF0dCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgPEF0dGFjaG1lbnRQcmV2aWV3XG4gICAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgICBmaWxlPXthdHQuZmlsZX1cbiAgICAgICAgICAgICAgICBvblJlbW92ZT17KCkgPT4gaGFuZGxlUmVtb3ZlQXR0YWNobWVudChhdHQuZmlsZS5uYW1lKX1cbiAgICAgICAgICAgICAgICB1cGxvYWRpbmc9e3VwbG9hZGluZ0ZpbGVzLmhhcyhhdHQuZmlsZS5uYW1lKX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuXG4gICAgICAgIHshY29udmVyc2F0aW9uSWQgfHwgaXNGaW5hbGl6ZWQgPyAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17aW5wdXRDb250YWluZXJTdHlsZX0+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBzdHlsZT17ey4uLnNlbmRCdXR0b25TdHlsZSwgd2lkdGg6ICcxMDAlJywgaGVpZ2h0OiAnNDhweCcsIGJvcmRlclJhZGl1czogJzE2cHgnLCBjdXJzb3I6ICdwb2ludGVyJywgZm9udEZhbWlseSwgZm9udFNpemV9fVxuICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTdGFydENvbnZlcnNhdGlvbn1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzTG9hZGluZ31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3QoJ2J1dHRvbnMuc3RhcnRDb252ZXJzYXRpb24nKX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogbGl2ZVZvaWNlRW5hYmxlZCA/IChcbiAgICAgICAgICAvLyBMaXZlIHZvaWNlIG1vZGUgaXMgdm9pY2Utb25seTogbm8gdGV4dCBib3gsIGF0dGFjaCwgb3Igc2VuZCBidXR0b24g4oCUXG4gICAgICAgICAgLy8gdGhlIG9ubHkgd2F5IHRvIHRhbGsgdG8gdGhlIGFnZW50IGlzIHRvIHN0YXJ0IGEgbGl2ZSBjYWxsLlxuICAgICAgICAgIDxkaXYgc3R5bGU9e2lucHV0Q29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCB3aWR0aDogJzEwMCUnLCBtaW5XaWR0aDogMCB9fT5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17aW5wdXRXcmFwcGVyU3R5bGV9PlxuICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXtnZXRMaXZlVm9pY2VIaW50U3R5bGUodGV4dEFyZWFGb250U2l6ZSwgZm9udEZhbWlseSl9PlxuICAgICAgICAgICAgICAgICAge2xpdmVWb2ljZVJlYWR5XG4gICAgICAgICAgICAgICAgICAgID8gdCgnbGl2ZVZvaWNlLnRhcFRvU3RhcnQnLCAnVGFwIHRvIHN0YXJ0IGEgdm9pY2UgY29udmVyc2F0aW9uJylcbiAgICAgICAgICAgICAgICAgICAgOiB0KCdsaXZlVm9pY2UudW5hdmFpbGFibGUnLCAnVm9pY2UgaXMgY3VycmVudGx5IHVuYXZhaWxhYmxlJyl9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxMaXZlQ2FsbENvbnRyb2xcbiAgICAgICAgICAgICAgICAgIHN0YXR1cz17bGl2ZVZvaWNlLnN0YXR1c31cbiAgICAgICAgICAgICAgICAgIGlzQWN0aXZlPXtsaXZlVm9pY2UuaXNBY3RpdmV9XG4gICAgICAgICAgICAgICAgICBvblN0YXJ0PXtzdGFydExpdmVDYWxsfVxuICAgICAgICAgICAgICAgICAgb25TdG9wPXtlbmRMaXZlQ2FsbH1cbiAgICAgICAgICAgICAgICAgIHRoZW1lPXt0aGVtZX1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshYWdlbnRJZCB8fCAhbGl2ZVZvaWNlUmVhZHl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIHthZ2VudERpc2NsYWltZXJDb250ZW50ICYmIChcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdhLWlucHV0LWRpc2NsYWltZXJcIiBzdHlsZT17ZGlzY2xhaW1lclN0eWxlfT5cbiAgICAgICAgICAgICAgICAgIHthZ2VudERpc2NsYWltZXJDb250ZW50fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPGZvcm0gb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0gc3R5bGU9e2lucHV0Q29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCB3aWR0aDogJzEwMCUnLCBtaW5XaWR0aDogMCB9fT5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e2lucHV0V3JhcHBlclN0eWxlfT5cbiAgICAgICAgICAgICAge3VzZUZpbGUgJiYgKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17YXR0YWNoQnV0dG9uU3R5bGV9XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQXR0YWNoXCJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gZmlsZUlucHV0UmVmLmN1cnJlbnQ/LmNsaWNrKCl9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxQYXBlcmNsaXAgc2l6ZT17MjJ9IGNvbG9yPVwiIzc1NzU3NVwiIC8+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgIHJlZj17ZmlsZUlucHV0UmVmfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiAnbm9uZScgfX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUZpbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGFjY2VwdD17YWxsb3dlZEV4dGVuc2lvbnMuam9pbignLCcpIHx8ICcqLyonfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICAgICAgcmVmPXt0ZXh0QXJlYVJlZn1cbiAgICAgICAgICAgICAgICBzdHlsZT17dGV4dEFyZWFTdHlsZX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJnYS10ZXh0YXJlYS1ub3NiXCJcbiAgICAgICAgICAgICAgICB2YWx1ZT17aW5wdXRWYWx1ZX1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldElucHV0VmFsdWUoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgIG9uS2V5RG93bj17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyAmJiAhZS5zaGlmdEtleSkge1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoaW5wdXRWYWx1ZS50cmltKCkgIT09ICcnIHx8IGF0dGFjaG1lbnRzLmxlbmd0aCA+IDApICYmICFpc0FnZW50VHlwaW5nICYmICFoYXNQZW5kaW5nRm9ybSkge1xuICAgICAgICAgICAgICAgICAgICAgIHN1Ym1pdE1lc3NhZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2lucHV0UGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFjb252ZXJzYXRpb25JZCB8fCBpc0ZpbmFsaXplZCB8fCBoYXNQZW5kaW5nRm9ybX1cbiAgICAgICAgICAgICAgICByb3dzPXsxfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtyaWdodEFjdGlvbkNvbnRhaW5lclN0eWxlfT5cbiAgICAgICAgICAgICAgICB7ISh1c2VBdWRpbyAmJiBpbnB1dFZhbHVlLnRyaW0oKSA9PT0gJycgJiYgYXR0YWNobWVudHMubGVuZ3RoID09PSAwKSAmJiAoXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyAuLi5zZW5kQnV0dG9uU3R5bGUsIC4uLihpc1NlbmREaXNhYmxlZCA/IHNlbmRCdXR0b25EaXNhYmxlZFN0eWxlIDoge30pIH19XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc1NlbmREaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPEFycm93VXAgc2l6ZT17MTh9IHN0cm9rZVdpZHRoPXszfSBjb2xvcj1cIiNmZmZmZmZcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIHt1c2VBdWRpbyAmJiBpbnB1dFZhbHVlLnRyaW0oKSA9PT0gJycgJiYgYXR0YWNobWVudHMubGVuZ3RoID09PSAwICYmIChcbiAgICAgICAgICAgICAgICA8Vm9pY2VJbnB1dFxuICAgICAgICAgICAgICAgICAgb25BdWRpb1JlYWR5PXthc3luYyAoYmxvYjogQmxvYiwgZm9ybWF0OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRJc1BsYXlpbmdBdWRpbyh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBzZW5kQXVkaW9NZXNzYWdlKGJsb2IsIGZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIGVycm9yIGhhbmRsZWQgaW5zaWRlIHNlbmRBdWRpb01lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRJc1BsYXlpbmdBdWRpbyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICBvbkVycm9yPXtoYW5kbGVWb2ljZUVycm9yfVxuICAgICAgICAgICAgICAgICAgdGhlbWU9e3RoZW1lfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAge2FnZW50RGlzY2xhaW1lckNvbnRlbnQgJiYgKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdhLWlucHV0LWRpc2NsYWltZXJcIiBzdHlsZT17ZGlzY2xhaW1lclN0eWxlfT5cbiAgICAgICAgICAgICAgICB7YWdlbnREaXNjbGFpbWVyQ29udGVudH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9mb3JtPlxuICAgICAgICApfVxuXG4gICAgICAgIHsvKiBGdWxsLXNjcmVlbiBmb3JtOiB3aGVuIGEgSHVtYW4gSW4gVGhlIExvb3AgZm9ybSBpcyBwZW5kaW5nLCBpdCB0YWtlcyBvdmVyIHRoZVxuICAgICAgICAgICAgd2hvbGUgY2hhdCBwYW5lbCAodGhlIG5vZGUncyBtZXNzYWdlIHNob3duIGFzIGEgaGVhZGluZyBvbiB0b3ApIGluc3RlYWQgb2YgYVxuICAgICAgICAgICAgY3JhbXBlZCBmb290ZXIuIElubGluZSBtb2RlIGtlZXBzIHJlbmRlcmluZyB0aGUgZm9ybSB3aXRoaW4gdGhlIG1lc3NhZ2UgbGlzdC4gKi99XG4gICAgICAgIHtwZW5kaW5nRm9ybSAmJiBmb3JtRGlzcGxheSAhPT0gJ2lubGluZScgJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICBpbnNldDogMCxcbiAgICAgICAgICAgICAgekluZGV4OiAzMCxcbiAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBiYWNrZ3JvdW5kQ29sb3IgfHwgJyNmZmZmZmYnLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8RHluYW1pY0Zvcm1NZXNzYWdlXG4gICAgICAgICAgICAgIHNjaGVtYT17cGVuZGluZ0Zvcm0uc2NoZW1hfVxuICAgICAgICAgICAgICBvblN1Ym1pdD17KGRhdGEpID0+IGhhbmRsZUZvcm1TdWJtaXQoZGF0YSwgcGVuZGluZ0Zvcm0uaW5kZXgpfVxuICAgICAgICAgICAgICBvbkNhbmNlbD17KCkgPT4gaGFuZGxlRm9ybUNhbmNlbChwZW5kaW5nRm9ybS5pbmRleCl9XG4gICAgICAgICAgICAgIGlzU3VibWl0dGluZz17c3VibWl0dGluZ0Zvcm1JbmRleCA9PT0gcGVuZGluZ0Zvcm0uaW5kZXh9XG4gICAgICAgICAgICAgIGlzU3VibWl0dGVkPXtmYWxzZX1cbiAgICAgICAgICAgICAgcHJpbWFyeUNvbG9yPXtwcmltYXJ5Q29sb3J9XG4gICAgICAgICAgICAgIGZvbnRGYW1pbHk9e2ZvbnRGYW1pbHl9XG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJmdWxsc2NyZWVuXCJcbiAgICAgICAgICAgICAgdGl0bGU9e2FnZW50TmFtZSB8fCB1bmRlZmluZWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgc3R5bGU9e2NvbmZpcm1PdmVybGF5U3R5bGV9PlxuICAgICAgICA8ZGl2IHN0eWxlPXtjb25maXJtRGlhbG9nU3R5bGV9PlxuICAgICAgICAgIDxoMyBzdHlsZT17e2ZvbnRGYW1pbHksIG1hcmdpblRvcDogMH19Pnt0KCdkaWFsb2cucmVzZXRDb252ZXJzYXRpb24udGl0bGUnKX08L2gzPlxuICAgICAgICAgIDxwIHN0eWxlPXt7Zm9udEZhbWlseSwgZm9udFNpemV9fT57dCgnZGlhbG9nLnJlc2V0Q29udmVyc2F0aW9uLm1lc3NhZ2UnKX08L3A+XG4gICAgICAgICAgPGRpdiBzdHlsZT17Y29uZmlybUJ1dHRvbnNTdHlsZX0+XG4gICAgICAgICAgICA8YnV0dG9uIHN0eWxlPXt7Li4uZ2V0Q29uZmlybUJ1dHRvblN0eWxlKGZhbHNlLCB0aGVtZVBhcmFtcyksIGNvbG9yOiB0ZXh0Q29sb3J9fSBvbkNsaWNrPXtoYW5kbGVDYW5jZWxSZXNldH0+e3QoJ2J1dHRvbnMuY2FuY2VsJyl9PC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIHN0eWxlPXtnZXRDb25maXJtQnV0dG9uU3R5bGUodHJ1ZSwgdGhlbWVQYXJhbXMpfSBvbkNsaWNrPXtoYW5kbGVDb25maXJtUmVzZXR9Pnt0KCdidXR0b25zLnJlc2V0Jyl9PC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG5cbiAgaWYgKG1vZGUgPT09ICdmbG9hdGluZycpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgeyFpc0Zsb2F0aW5nT3BlbiAmJiAoXG4gICAgICAgICAgPENoYXRCdWJibGVcbiAgICAgICAgICAgIHNob3dDaGF0PXtpc0Zsb2F0aW5nT3Blbn1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldElzRmxvYXRpbmdPcGVuKHByZXYgPT4gIXByZXYpfVxuICAgICAgICAgICAgcHJpbWFyeUNvbG9yPXtwcmltYXJ5Q29sb3J9XG4gICAgICAgICAgICBzdHlsZT17Z2V0UG9zaXRpb25TdHlsZXMoeyBwb3NpdGlvbiwgb2Zmc2V0WCwgb2Zmc2V0WSB9KX1cbiAgICAgICAgICAgIGNoYXRCdWJibGVJY29uPXt0aGVtZT8uY2hhdEJ1YmJsZUljb259XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cblxuICAgICAgICB7aXNGbG9hdGluZ09wZW4gJiYgKFxuICAgICAgICAgIDxkaXYgc3R5bGU9e2Zsb2F0aW5nQ29udGFpbmVyU3R5bGV9IGRhdGEtZ2VuYXNzaXN0LWNvbnRhaW5lcj1cImZsb2F0aW5nXCI+XG4gICAgICAgICAgICB7cmVuZGVyV2l0aFJlQ2FwdGNoYShyZW5kZXJDaGF0Q29tcG9uZW50KCkpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGlmIChtb2RlID09PSAnZnVsbHNjcmVlbicpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBzdHlsZT17ZmxvYXRpbmdDb250YWluZXJTdHlsZX0gZGF0YS1nZW5hc3Npc3QtY29udGFpbmVyPVwiZnVsbHNjcmVlblwiPlxuICAgICAgICB7cmVuZGVyV2l0aFJlQ2FwdGNoYShyZW5kZXJDaGF0Q29tcG9uZW50KCkpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiByZW5kZXJXaXRoUmVDYXB0Y2hhKHJlbmRlckNoYXRDb21wb25lbnQoKSk7XG59O1xuIl19