genassist-chat-react 1.0.12 → 1.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/components/GenAgentChat.js +70 -13
- package/dist/hooks/useChat.js +15 -10
- package/dist/index.d.ts +4 -0
- package/dist/index.js +3 -1
- package/dist/services/chatService.d.ts +4 -0
- package/dist/services/chatService.js +81 -41
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -76,7 +76,7 @@ export var GenAgentChat = function (_a) {
|
|
|
76
76
|
var fileInputRef = useRef(null);
|
|
77
77
|
var textAreaRef = useRef(null);
|
|
78
78
|
var headerRef = useRef(null);
|
|
79
|
-
var _o = useState(
|
|
79
|
+
var _o = useState(56), headerHeight = _o[0], setHeaderHeight = _o[1];
|
|
80
80
|
var _p = useState(false), showBacklight = _p[0], setShowBacklight = _p[1];
|
|
81
81
|
// default thinking messages if none provided by workflow
|
|
82
82
|
var DEFAULT_THINKING_MESSAGES = [
|
|
@@ -102,23 +102,86 @@ export var GenAgentChat = function (_a) {
|
|
|
102
102
|
}), messages = _s.messages, isLoading = _s.isLoading, sendMessage = _s.sendMessage, uploadFile = _s.uploadFile, resetConversation = _s.resetConversation, startConversation = _s.startConversation, connectionState = _s.connectionState, conversationId = _s.conversationId, possibleQueries = _s.possibleQueries, isFinalized = _s.isFinalized, isAgentTyping = _s.isAgentTyping, addFeedback = _s.addFeedback, welcomeTitle = _s.welcomeTitle, welcomeImageUrl = _s.welcomeImageUrl, welcomeMessage = _s.welcomeMessage, thinkingPhrases = _s.thinkingPhrases, thinkingDelayMs = _s.thinkingDelayMs;
|
|
103
103
|
var messagesEndRef = useRef(null);
|
|
104
104
|
var audioService = useRef(null);
|
|
105
|
+
var hasAnchoredHistory = useRef(false);
|
|
106
|
+
var chatContainerRef = useRef(null);
|
|
107
|
+
var anchorHistory = function () {
|
|
108
|
+
var el = chatContainerRef.current;
|
|
109
|
+
if (!el || !messages.length || hasAnchoredHistory.current)
|
|
110
|
+
return;
|
|
111
|
+
if (el.clientHeight === 0)
|
|
112
|
+
return; // hidden, wait for visibility/size
|
|
113
|
+
el.scrollTop = el.scrollHeight;
|
|
114
|
+
hasAnchoredHistory.current = true;
|
|
115
|
+
};
|
|
116
|
+
var scrollToBottom = function (behavior) {
|
|
117
|
+
if (behavior === void 0) { behavior = 'smooth'; }
|
|
118
|
+
var container = chatContainerRef.current;
|
|
119
|
+
var el = messagesEndRef.current;
|
|
120
|
+
if (!container || !el)
|
|
121
|
+
return;
|
|
122
|
+
var doScroll = function () {
|
|
123
|
+
container.scrollTo({ top: container.scrollHeight, behavior: behavior });
|
|
124
|
+
};
|
|
125
|
+
if (behavior === 'auto') {
|
|
126
|
+
doScroll();
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
requestAnimationFrame(doScroll);
|
|
130
|
+
}
|
|
131
|
+
};
|
|
105
132
|
var hasUserMessages = messages.some(function (message) { return message.speaker === 'customer'; });
|
|
106
133
|
useEffect(function () {
|
|
107
134
|
audioService.current = new AudioService({ baseUrl: baseUrl, apiKey: apiKey });
|
|
108
135
|
}, [baseUrl, apiKey]);
|
|
109
136
|
useLayoutEffect(function () {
|
|
110
|
-
if (
|
|
111
|
-
|
|
137
|
+
if (!messages.length)
|
|
138
|
+
return;
|
|
139
|
+
if (hasAnchoredHistory.current) {
|
|
140
|
+
scrollToBottom('smooth');
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
anchorHistory();
|
|
112
144
|
}
|
|
113
145
|
}, [messages]);
|
|
146
|
+
useLayoutEffect(function () {
|
|
147
|
+
if (!isAgentTyping)
|
|
148
|
+
return;
|
|
149
|
+
scrollToBottom('auto');
|
|
150
|
+
}, [isAgentTyping, currentThinkingPartIndex, currentThinkingParts.length]);
|
|
151
|
+
useEffect(function () {
|
|
152
|
+
hasAnchoredHistory.current = false;
|
|
153
|
+
}, [conversationId]);
|
|
154
|
+
useEffect(function () {
|
|
155
|
+
if (!messages.length)
|
|
156
|
+
return;
|
|
157
|
+
var el = chatContainerRef.current;
|
|
158
|
+
if (!el)
|
|
159
|
+
return;
|
|
160
|
+
// Observe size/visibility changes to anchor chat view.
|
|
161
|
+
var resizeObserver = new ResizeObserver(function () {
|
|
162
|
+
anchorHistory();
|
|
163
|
+
});
|
|
164
|
+
resizeObserver.observe(el);
|
|
165
|
+
anchorHistory();
|
|
166
|
+
return function () {
|
|
167
|
+
resizeObserver.disconnect();
|
|
168
|
+
};
|
|
169
|
+
}, [messages]);
|
|
114
170
|
useLayoutEffect(function () {
|
|
115
171
|
var updateHeaderHeight = function () {
|
|
116
172
|
var _a;
|
|
117
|
-
setHeaderHeight(((_a = headerRef.current) === null || _a === void 0 ? void 0 : _a.offsetHeight) ||
|
|
173
|
+
setHeaderHeight(((_a = headerRef.current) === null || _a === void 0 ? void 0 : _a.offsetHeight) || 56);
|
|
118
174
|
};
|
|
119
175
|
updateHeaderHeight();
|
|
176
|
+
var resizeObserver = new ResizeObserver(function () { return updateHeaderHeight(); });
|
|
177
|
+
if (headerRef.current) {
|
|
178
|
+
resizeObserver.observe(headerRef.current);
|
|
179
|
+
}
|
|
120
180
|
window.addEventListener('resize', updateHeaderHeight);
|
|
121
|
-
return function () {
|
|
181
|
+
return function () {
|
|
182
|
+
resizeObserver.disconnect();
|
|
183
|
+
window.removeEventListener('resize', updateHeaderHeight);
|
|
184
|
+
};
|
|
122
185
|
}, []);
|
|
123
186
|
// Smoothly show/hide the backlight while the agent is typing
|
|
124
187
|
useEffect(function () {
|
|
@@ -187,7 +250,6 @@ export var GenAgentChat = function (_a) {
|
|
|
187
250
|
return [3 /*break*/, 4];
|
|
188
251
|
case 3:
|
|
189
252
|
error_1 = _a.sent();
|
|
190
|
-
console.error('Error sending message:', error_1);
|
|
191
253
|
return [3 /*break*/, 4];
|
|
192
254
|
case 4: return [2 /*return*/];
|
|
193
255
|
}
|
|
@@ -225,7 +287,6 @@ export var GenAgentChat = function (_a) {
|
|
|
225
287
|
return [3 /*break*/, 5];
|
|
226
288
|
case 3:
|
|
227
289
|
error_2 = _a.sent();
|
|
228
|
-
console.error("An error occurred during file upload:", error_2);
|
|
229
290
|
return [3 /*break*/, 5];
|
|
230
291
|
case 4:
|
|
231
292
|
finalUploadingFiles_1 = new Set(uploadingFiles);
|
|
@@ -240,7 +301,6 @@ export var GenAgentChat = function (_a) {
|
|
|
240
301
|
setAttachments(function (prev) { return prev.filter(function (f) { return f.name !== fileName; }); });
|
|
241
302
|
};
|
|
242
303
|
var handleVoiceError = function (error) {
|
|
243
|
-
console.error('Voice input error:', error);
|
|
244
304
|
if (onError) {
|
|
245
305
|
onError(error);
|
|
246
306
|
}
|
|
@@ -265,7 +325,6 @@ export var GenAgentChat = function (_a) {
|
|
|
265
325
|
return [3 /*break*/, 6];
|
|
266
326
|
case 4:
|
|
267
327
|
error_3 = _a.sent();
|
|
268
|
-
console.error('Error playing audio:', error_3);
|
|
269
328
|
if (onError) {
|
|
270
329
|
onError(error_3);
|
|
271
330
|
}
|
|
@@ -293,7 +352,6 @@ export var GenAgentChat = function (_a) {
|
|
|
293
352
|
return [3 /*break*/, 4];
|
|
294
353
|
case 3:
|
|
295
354
|
error_4 = _a.sent();
|
|
296
|
-
console.error('Error sending quick query:', error_4);
|
|
297
355
|
return [3 /*break*/, 4];
|
|
298
356
|
case 4: return [2 /*return*/];
|
|
299
357
|
}
|
|
@@ -315,7 +373,6 @@ export var GenAgentChat = function (_a) {
|
|
|
315
373
|
return [3 /*break*/, 4];
|
|
316
374
|
case 3:
|
|
317
375
|
error_5 = _a.sent();
|
|
318
|
-
console.error('Error starting conversation:', error_5);
|
|
319
376
|
return [3 /*break*/, 4];
|
|
320
377
|
case 4: return [2 /*return*/];
|
|
321
378
|
}
|
|
@@ -680,7 +737,7 @@ export var GenAgentChat = function (_a) {
|
|
|
680
737
|
willChange: 'transform, opacity',
|
|
681
738
|
animation: 'ga-backlight-sweep2 1.2s cubic-bezier(0.4,0.0,0.2,1) infinite alternate, ga-backlight-pulse 2.4s ease-in-out infinite',
|
|
682
739
|
borderRadius: 18,
|
|
683
|
-
} }) })), showMenu && (_jsx("div", { ref: menuRef, style: menuPopupStyle, children: _jsxs("div", { style: menuItemStyle, onClick: handleResetClick, children: [_jsx(RefreshCw, { size: 16 }), "Reset conversation"] }) })), _jsxs("div", { style: contentCardStyle, children: [_jsxs("div", { style: chatContainerStyle, children: [(function () {
|
|
740
|
+
} }) })), showMenu && (_jsx("div", { ref: menuRef, style: menuPopupStyle, children: _jsxs("div", { style: menuItemStyle, onClick: handleResetClick, children: [_jsx(RefreshCw, { size: 16 }), "Reset conversation"] }) })), _jsxs("div", { style: contentCardStyle, children: [_jsxs("div", { style: chatContainerStyle, ref: chatContainerRef, children: [(function () {
|
|
684
741
|
return null;
|
|
685
742
|
})(), (function () {
|
|
686
743
|
// show welcome card
|
|
@@ -737,4 +794,4 @@ export var GenAgentChat = function (_a) {
|
|
|
737
794
|
}
|
|
738
795
|
return renderChatComponent();
|
|
739
796
|
};
|
|
740
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2VuQWdlbnRDaGF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvR2VuQWdlbnRDaGF0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBMkIsTUFBTSxjQUFjLENBQUM7QUFDakcsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLFFBQVEsTUFBTSx5QkFBeUIsQ0FBQztBQUUvQyxNQUFNLENBQUMsSUFBTSxZQUFZLEdBQWdDLFVBQUMsRUFhekQ7UUFaQyxPQUFPLGFBQUEsRUFDUCxNQUFNLFlBQUEsRUFDTixNQUFNLFlBQUEsRUFDTixRQUFRLGNBQUEsRUFDUixPQUFPLGFBQUEsRUFDUCxVQUFVLGdCQUFBLEVBQ1YsVUFBVSxnQkFBQSxFQUNWLEtBQUssV0FBQSxFQUNMLG1CQUF5QixFQUF6QixXQUFXLG1CQUFHLFdBQVcsS0FBQSxFQUN6QixtQkFBOEIsRUFBOUIsV0FBVyxtQkFBRyxnQkFBZ0IsS0FBQSxFQUM5QixZQUFpQixFQUFqQixJQUFJLG1CQUFHLFVBQVUsS0FBQSxFQUNqQixzQkFBbUIsRUFBbkIsY0FBYyxtQkFBRyxF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QUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxrQkFBa0Isc0JBQWdCLElBQ2hGLElBQ0YsR0FDRixJQUNGLENBQ1AsRUF6UmlDLENBeVJqQyxDQUFDO0lBRUYsSUFBSSxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDeEIsT0FBTyxDQUNMLDhCQUNFLEtBQUMsVUFBVSxJQUNULFFBQVEsRUFBRSxjQUFjLEVBQ3hCLE9BQU8sRUFBRSxjQUFNLE9BQUEsaUJBQWlCLENBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxDQUFDLElBQUksRUFBTCxDQUFLLENBQUMsRUFBaEMsQ0FBZ0MsRUFDL0MsWUFBWSxFQUFFLFlBQVksRUFDMUIsS0FBSyxFQUFFLGlCQUFpQixFQUFFLEdBQzFCLEVBRUQsY0FBYyxJQUFJLENBQ2pCLGNBQUssS0FBSyxFQUFFLHNCQUFzQiw4QkFBMkIsVUFBVSxZQUNwRSxtQkFBbUIsRUFBRSxHQUNsQixDQUNQLElBQ0EsQ0FDSixDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sbUJBQW1CLEVBQUUsQ0FBQztBQUMvQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDaGF0TWVzc2FnZUNvbXBvbmVudCwgQXR0YWNobWVudFByZXZpZXcgfSBmcm9tICcuL0NoYXRNZXNzYWdlJztcbmltcG9ydCB7IHVzZUNoYXQgfSBmcm9tICcuLi9ob29rcy91c2VDaGF0JztcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBHZW5BZ2VudENoYXRQcm9wcyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IFZvaWNlSW5wdXQgfSBmcm9tICcuL1ZvaWNlSW5wdXQnO1xuaW1wb3J0IHsgQXVkaW9TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYXVkaW9TZXJ2aWNlJztcbmltcG9ydCB7IFNlbmQsIFBhcGVyY2xpcCwgTW9yZVZlcnRpY2FsLCBSZWZyZXNoQ3csIFhJY29uLCBNZXNzYWdlU3F1YXJlTW9yZX0gZnJvbSAnbHVjaWRlLXJlYWN0JztcbmltcG9ydCB7IENoYXRCdWJibGUgfSBmcm9tICcuL0NoYXRCdWJibGUnO1xuaW1wb3J0IGNoYXRMb2dvIGZyb20gJy4uL2Fzc2V0cy9jaGF0LWxvZ28ucG5nJztcblxuZXhwb3J0IGNvbnN0IEdlbkFnZW50Q2hhdDogUmVhY3QuRkM8R2VuQWdlbnRDaGF0UHJvcHM+ID0gKHtcbiAgYmFzZVVybCxcbiAgYXBpS2V5LFxuICB0ZW5hbnQsXG4gIG1ldGFkYXRhLFxuICBvbkVycm9yLFxuICBvblRha2VvdmVyLFxuICBvbkZpbmFsaXplLFxuICB0aGVtZSxcbiAgaGVhZGVyVGl0bGUgPSAnR2VuYXNzaXN0JyxcbiAgcGxhY2Vob2xkZXIgPSAnQXNrIGEgcXVlc3Rpb24nLFxuICBtb2RlID0gJ2VtYmVkZGVkJyxcbiAgZmxvYXRpbmdDb25maWcgPSB7fVxufSk6IFJlYWN0LlJlYWN0RWxlbWVudCA9PiB7XG4gIGNvbnN0IFtpbnB1dFZhbHVlLCBzZXRJbnB1dFZhbHVlXSA9IHVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW3Nob3dSZXNldENvbmZpcm0sIHNldFNob3dSZXNldENvbmZpcm1dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2hvd01lbnUsIHNldFNob3dNZW51XSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2lzUGxheWluZ0F1ZGlvLCBzZXRJc1BsYXlpbmdBdWRpb10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpc0Zsb2F0aW5nT3Blbiwgc2V0SXNGbG9hdGluZ09wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbYXR0YWNobWVudHMsIHNldEF0dGFjaG1lbnRzXSA9IHVzZVN0YXRlPEZpbGVbXT4oW10pO1xuICBjb25zdCBbdXBsb2FkaW5nRmlsZXMsIHNldFVwbG9hZGluZ0ZpbGVzXSA9IHVzZVN0YXRlPFNldDxzdHJpbmc+PihuZXcgU2V0KCkpO1xuICBjb25zdCBtZW51UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgZmlsZUlucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCB0ZXh0QXJlYVJlZiA9IHVzZVJlZjxIVE1MVGV4dEFyZWFFbGVtZW50PihudWxsKTtcbiAgY29uc3QgaGVhZGVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgW2hlYWRlckhlaWdodCwgc2V0SGVhZGVySGVpZ2h0XSA9IHVzZVN0YXRlKDApO1xuICBjb25zdCBbc2hvd0JhY2tsaWdodCwgc2V0U2hvd0JhY2tsaWdodF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgLy8gZGVmYXVsdCB0aGlua2luZyBtZXNzYWdlcyBpZiBub25lIHByb3ZpZGVkIGJ5IHdvcmtmbG93XG4gIGNvbnN0IERFRkFVTFRfVEhJTktJTkdfTUVTU0FHRVMgPSBbXG4gICAgXCJUaGlua2luZ+KAplwiLFxuICAgIFwiQW5hbHl6aW5nIHlvdXIgcXVlc3Rpb27igKZcIixcbiAgICBcIlNlYXJjaGluZyBrbm93bGVkZ2XigKZcIixcbiAgICBcIlB1bGxpbmcgcmVsZXZhbnQgaW5mb+KAplwiLFxuICAgIFwiRHJhZnRpbmcgdGhlIGFuc3dlcuKAplwiLFxuICAgIFwiRG91Ymxl4oCRY2hlY2tpbmcgZGV0YWlsc+KAplwiLFxuICAgIFwiVHlpbmcgaXQgdG9nZXRoZXLigKZcIixcbiAgICBcIkFsbW9zdCB0aGVyZeKAplwiLFxuICBdO1xuICBjb25zdCBbY3VycmVudFRoaW5raW5nUGFydHMsIHNldEN1cnJlbnRUaGlua2luZ1BhcnRzXSA9IHVzZVN0YXRlPHN0cmluZ1tdPihbXSk7XG4gIGNvbnN0IFtjdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXgsIHNldEN1cnJlbnRUaGlua2luZ1BhcnRJbmRleF0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3Qge1xuICAgIG1lc3NhZ2VzLFxuICAgIGlzTG9hZGluZyxcbiAgICBzZW5kTWVzc2FnZSxcbiAgICB1cGxvYWRGaWxlLFxuICAgIHJlc2V0Q29udmVyc2F0aW9uLFxuICAgIHN0YXJ0Q29udmVyc2F0aW9uLFxuICAgIGNvbm5lY3Rpb25TdGF0ZSxcbiAgICBjb252ZXJzYXRpb25JZCxcbiAgICBwb3NzaWJsZVF1ZXJpZXMsXG4gICAgaXNGaW5hbGl6ZWQsXG4gICAgaXNBZ2VudFR5cGluZyxcbiAgICBhZGRGZWVkYmFjayxcbiAgICB3ZWxjb21lVGl0bGUsXG4gICAgd2VsY29tZUltYWdlVXJsLFxuICAgIHdlbGNvbWVNZXNzYWdlLFxuICAgIHRoaW5raW5nUGhyYXNlcyxcbiAgICB0aGlua2luZ0RlbGF5TXMsXG4gIH0gPSB1c2VDaGF0KHtcbiAgICBiYXNlVXJsLFxuICAgIGFwaUtleSxcbiAgICB0ZW5hbnQsXG4gICAgbWV0YWRhdGEsXG4gICAgb25FcnJvcixcbiAgICBvblRha2VvdmVyLFxuICAgIG9uRmluYWxpemVcbiAgfSk7XG4gIGNvbnN0IG1lc3NhZ2VzRW5kUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgYXVkaW9TZXJ2aWNlID0gdXNlUmVmPEF1ZGlvU2VydmljZSB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IGhhc1VzZXJNZXNzYWdlcyA9IG1lc3NhZ2VzLnNvbWUobWVzc2FnZSA9PiBtZXNzYWdlLnNwZWFrZXIgPT09ICdjdXN0b21lcicpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYXVkaW9TZXJ2aWNlLmN1cnJlbnQgPSBuZXcgQXVkaW9TZXJ2aWNlKHsgYmFzZVVybCwgYXBpS2V5IH0pO1xuICB9LCBbYmFzZVVybCwgYXBpS2V5XSk7XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAobWVzc2FnZXNFbmRSZWYuY3VycmVudCkge1xuICAgICAgbWVzc2FnZXNFbmRSZWYuY3VycmVudC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgICB9XG4gIH0sIFttZXNzYWdlc10pO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgdXBkYXRlSGVhZGVySGVpZ2h0ID0gKCkgPT4ge1xuICAgICAgc2V0SGVhZGVySGVpZ2h0KGhlYWRlclJlZi5jdXJyZW50Py5vZmZzZXRIZWlnaHQgfHwgMCk7XG4gICAgfTtcbiAgICB1cGRhdGVIZWFkZXJIZWlnaHQoKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlSGVhZGVySGVpZ2h0KTtcbiAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZUhlYWRlckhlaWdodCk7XG4gIH0sIFtdKTtcblxuICAvLyBTbW9vdGhseSBzaG93L2hpZGUgdGhlIGJhY2tsaWdodCB3aGlsZSB0aGUgYWdlbnQgaXMgdHlwaW5nXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzQWdlbnRUeXBpbmcpIHtcbiAgICAgIHNldFNob3dCYWNrbGlnaHQodHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHQgPSBzZXRUaW1lb3V0KCgpID0+IHNldFNob3dCYWNrbGlnaHQoZmFsc2UpLCA0MjApOyAvLyBhbGxvdyBmYWRlLW91dFxuICAgIHJldHVybiAoKSA9PiBjbGVhclRpbWVvdXQodCk7XG4gIH0sIFtpc0FnZW50VHlwaW5nXSk7XG5cbiAgLy8gU2hvdyBcInRoaW5raW5nXCIgcGhyYXNlcyB3aGlsZSBhZ2VudCBpcyB0eXBpbmdcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzQWdlbnRUeXBpbmcpIHtcbiAgICAgIHNldEN1cnJlbnRUaGlua2luZ1BhcnRzKFtdKTtcbiAgICAgIHNldEN1cnJlbnRUaGlua2luZ1BhcnRJbmRleCgwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBSYW5kb21seSBzZWxlY3QgYSBwaHJhc2UgZnJvbSB0aGUgbGlzdFxuICAgIGNvbnN0IGxpc3QgPSAodGhpbmtpbmdQaHJhc2VzICYmIHRoaW5raW5nUGhyYXNlcy5sZW5ndGggPiAwKSA/IHRoaW5raW5nUGhyYXNlcyA6IERFRkFVTFRfVEhJTktJTkdfTUVTU0FHRVM7XG4gICAgY29uc3QgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBsaXN0Lmxlbmd0aCk7XG4gICAgY29uc3Qgc2VsZWN0ZWRQaHJhc2UgPSBsaXN0W3JhbmRvbUluZGV4XTtcblxuICAgIC8vIFNwbGl0IGJ5IHwgdG8gZ2V0IHBhcnRzLCBvciB1c2UgdGhlIHBocmFzZSBhcyBhIHNpbmdsZSBwYXJ0IGlmIG5vIHwgZm91bmRcbiAgICBjb25zdCBwYXJ0cyA9IHNlbGVjdGVkUGhyYXNlLmluY2x1ZGVzKCd8JykgXG4gICAgICA/IHNlbGVjdGVkUGhyYXNlLnNwbGl0KCd8JykubWFwKHBhcnQgPT4gcGFydC50cmltKCkpLmZpbHRlcihwYXJ0ID0+IHBhcnQubGVuZ3RoID4gMClcbiAgICAgIDogW3NlbGVjdGVkUGhyYXNlLnRyaW0oKV07XG5cbiAgICAvLyBJbml0aWFsaXplIHdpdGggZmlyc3QgcGFydFxuICAgIHNldEN1cnJlbnRUaGlua2luZ1BhcnRzKHBhcnRzKTtcbiAgICBzZXRDdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXgoMCk7XG5cbiAgICAvLyBJZiB0aGVyZSdzIG9ubHkgb25lIHBhcnQsIG5vIG5lZWQgdG8gcHJvZ3Jlc3NcbiAgICBpZiAocGFydHMubGVuZ3RoIDw9IDEpIHJldHVybjtcblxuICAgIC8vIFByb2dyZXNzIHRocm91Z2ggcGFydHMgd2l0aCBkZWxheSwgYnV0IHN0b3AgYXQgdGhlIGxhc3Qgb25lXG4gICAgY29uc3Qgcm90RGVsYXkgPSBNYXRoLm1heCgyNTAsIHRoaW5raW5nRGVsYXlNcyB8fCAxMDAwKTtcbiAgICBjb25zdCB0aW1lb3V0SWRzOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PltdID0gW107XG5cbiAgICAvLyBTZXQgdXAgdGltZW91dHMgZm9yIGVhY2ggcGFydCB0cmFuc2l0aW9uXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHNldEN1cnJlbnRUaGlua2luZ1BhcnRJbmRleChpKTtcbiAgICAgIH0sIHJvdERlbGF5ICogaSk7XG4gICAgICB0aW1lb3V0SWRzLnB1c2godGltZW91dElkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgdGltZW91dElkcy5mb3JFYWNoKGlkID0+IGNsZWFyVGltZW91dChpZCkpO1xuICAgIH07XG4gIH0sIFtpc0FnZW50VHlwaW5nLCB0aGlua2luZ1BocmFzZXMsIHRoaW5raW5nRGVsYXlNc10pO1xuXG4gIGNvbnN0IHN1Ym1pdE1lc3NhZ2UgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKGlucHV0VmFsdWUudHJpbSgpID09PSAnJyAmJiBhdHRhY2htZW50cy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCB0ZXh0VG9TZW5kID0gaW5wdXRWYWx1ZTtcbiAgICBjb25zdCBmaWxlc1RvVXBsb2FkID0gWy4uLmF0dGFjaG1lbnRzXTtcbiAgICBzZXRJbnB1dFZhbHVlKCcnKTtcbiAgICBzZXRBdHRhY2htZW50cyhbXSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHNlbmRNZXNzYWdlKHRleHRUb1NlbmQsIGZpbGVzVG9VcGxvYWQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzZW5kaW5nIG1lc3NhZ2U6JywgZXJyb3IpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVTdWJtaXQgPSBhc3luYyAoZTogUmVhY3QuRm9ybUV2ZW50KSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGF3YWl0IHN1Ym1pdE1lc3NhZ2UoKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVGaWxlQ2hhbmdlID0gYXN5bmMgKGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKGUudGFyZ2V0LmZpbGVzKSB7XG4gICAgICBjb25zdCBuZXdGaWxlcyA9IEFycmF5LmZyb20oZS50YXJnZXQuZmlsZXMpO1xuICAgICAgc2V0QXR0YWNobWVudHMocHJldiA9PiBbLi4ucHJldiwgLi4ubmV3RmlsZXNdKTtcblxuICAgICAgY29uc3QgbmV3VXBsb2FkaW5nRmlsZXMgPSBuZXcgU2V0KHVwbG9hZGluZ0ZpbGVzKTtcbiAgICAgIG5ld0ZpbGVzLmZvckVhY2goZmlsZSA9PiBuZXdVcGxvYWRpbmdGaWxlcy5hZGQoZmlsZS5uYW1lKSk7XG4gICAgICBzZXRVcGxvYWRpbmdGaWxlcyhuZXdVcGxvYWRpbmdGaWxlcyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKG5ld0ZpbGVzLm1hcChmaWxlID0+IHVwbG9hZEZpbGUoZmlsZSkpKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgZmlsZSB1cGxvYWQ6XCIsIGVycm9yKVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgY29uc3QgZmluYWxVcGxvYWRpbmdGaWxlcyA9IG5ldyBTZXQodXBsb2FkaW5nRmlsZXMpO1xuICAgICAgICBuZXdGaWxlcy5mb3JFYWNoKGZpbGUgPT4gZmluYWxVcGxvYWRpbmdGaWxlcy5kZWxldGUoZmlsZS5uYW1lKSk7XG4gICAgICAgIHNldFVwbG9hZGluZ0ZpbGVzKGZpbmFsVXBsb2FkaW5nRmlsZXMpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVSZW1vdmVBdHRhY2htZW50ID0gKGZpbGVOYW1lOiBzdHJpbmcpID0+IHtcbiAgICBzZXRBdHRhY2htZW50cyhwcmV2ID0+IHByZXYuZmlsdGVyKGYgPT4gZi5uYW1lICE9PSBmaWxlTmFtZSkpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVZvaWNlRXJyb3IgPSAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgY29uc29sZS5lcnJvcignVm9pY2UgaW5wdXQgZXJyb3I6JywgZXJyb3IpO1xuICAgIGlmIChvbkVycm9yKSB7XG4gICAgICBvbkVycm9yKGVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcGxheVJlc3BvbnNlQXVkaW8gPSBhc3luYyAodGV4dDogc3RyaW5nKSA9PiB7XG4gICAgaWYgKCFhdWRpb1NlcnZpY2UuY3VycmVudCB8fCBpc1BsYXlpbmdBdWRpbykgcmV0dXJuO1xuXG4gICAgdHJ5IHtcbiAgICAgIHNldElzUGxheWluZ0F1ZGlvKHRydWUpO1xuICAgICAgY29uc3QgYXVkaW9CbG9iID0gYXdhaXQgYXVkaW9TZXJ2aWNlLmN1cnJlbnQudGV4dFRvU3BlZWNoKHRleHQpO1xuICAgICAgYXdhaXQgYXVkaW9TZXJ2aWNlLmN1cnJlbnQucGxheUF1ZGlvKGF1ZGlvQmxvYik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBsYXlpbmcgYXVkaW86JywgZXJyb3IpO1xuICAgICAgaWYgKG9uRXJyb3IpIHtcbiAgICAgICAgb25FcnJvcihlcnJvciBhcyBFcnJvcik7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldElzUGxheWluZ0F1ZGlvKGZhbHNlKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUXVlcnlDbGljayA9IGFzeW5jIChxdWVyeTogc3RyaW5nKSA9PiB7XG4gICAgaWYgKGlzTG9hZGluZykgcmV0dXJuO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzZW5kTWVzc2FnZShxdWVyeSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNlbmRpbmcgcXVpY2sgcXVlcnk6JywgZXJyb3IpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVTdGFydENvbnZlcnNhdGlvbiA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoaXNMb2FkaW5nKSByZXR1cm47XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgc3RhcnRDb252ZXJzYXRpb24oKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc3RhcnRpbmcgY29udmVyc2F0aW9uOicsIGVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlTWVudUNsaWNrID0gKCkgPT4ge1xuICAgIHNldFNob3dNZW51KHByZXYgPT4gIXByZXYpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVJlc2V0Q2xpY2sgPSAoKSA9PiB7XG4gICAgc2V0U2hvd01lbnUoZmFsc2UpO1xuICAgIHNldFNob3dSZXNldENvbmZpcm0odHJ1ZSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ29uZmlybVJlc2V0ID0gYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHJlc2V0Q29udmVyc2F0aW9uKCk7XG4gICAgc2V0U2hvd1Jlc2V0Q29uZmlybShmYWxzZSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ2FuY2VsUmVzZXQgPSAoKSA9PiB7XG4gICAgc2V0U2hvd1Jlc2V0Q29uZmlybShmYWxzZSk7XG4gIH07XG5cbiAgY29uc3QgcHJpbWFyeUNvbG9yID0gdGhlbWU/LnByaW1hcnlDb2xvciB8fCAnIzI5NjJGRic7XG4gIGNvbnN0IGJhY2tncm91bmRDb2xvciA9IHRoZW1lPy5iYWNrZ3JvdW5kQ29sb3IgfHwgJyNmZmZmZmYnO1xuICBjb25zdCB0ZXh0Q29sb3IgPSB0aGVtZT8udGV4dENvbG9yIHx8ICcjMDAwMDAwJztcbiAgY29uc3QgZm9udEZhbWlseSA9IHRoZW1lPy5mb250RmFtaWx5IHx8ICdSb2JvdG8sIEFyaWFsLCBzYW5zLXNlcmlmJztcbiAgY29uc3QgZm9udFNpemUgPSB0aGVtZT8uZm9udFNpemUgfHwgJzE0cHgnO1xuICBjb25zdCBmb250U2l6ZU51bWJlciA9IHR5cGVvZiBmb250U2l6ZSA9PT0gJ3N0cmluZycgPyBwYXJzZUludChmb250U2l6ZSwgMTApIDogKHR5cGVvZiBmb250U2l6ZSA9PT0gJ251bWJlcicgPyBmb250U2l6ZSA6IDE0KTtcbiAgY29uc3QgbGluZUhlaWdodFB4ID0gTWF0aC5yb3VuZChmb250U2l6ZU51bWJlciAqIDEuNSk7XG4gIGNvbnN0IHRleHRBcmVhTWF4SGVpZ2h0ID0gbGluZUhlaWdodFB4ICogMzsgLy8gdXAgdG8gMyBsaW5lc1xuXG4gIGNvbnN0IHBvc2l0aW9uID0gZmxvYXRpbmdDb25maWcucG9zaXRpb24gfHwgJ2JvdHRvbS1yaWdodCc7XG4gIGNvbnN0IG9mZnNldCA9IGZsb2F0aW5nQ29uZmlnLm9mZnNldCB8fCB7IHg6IDIwLCB5OiAyMCB9O1xuICBjb25zdCBvZmZzZXRYID0gb2Zmc2V0LnggfHwgMjA7XG4gIGNvbnN0IG9mZnNldFkgPSBvZmZzZXQueSB8fCAyMDtcblxuICBjb25zdCBjb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgbWF4SGVpZ2h0OiAnNjAwcHgnLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgbWF4V2lkdGg6ICc0MDBweCcsXG4gICAgYm9yZGVyOiAnMXB4IHNvbGlkICNlMGUwZTAnLFxuICAgIGJvcmRlclJhZGl1czogJzMycHgnLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lPy5zZWNvbmRhcnlDb2xvciB8fCAnI2Y1ZjVmNScsXG4gICAgZm9udEZhbWlseSxcbiAgICBib3hTaGFkb3c6IFwiMCA0cHggMjBweCByZ2JhKDAsIDAsIDAsIDAuMilcIixcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJ1xuICB9O1xuXG4gIGNvbnN0IGhlYWRlclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHBhZGRpbmc6ICcxNXB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lPy5zZWNvbmRhcnlDb2xvciB8fCAnI2Y1ZjVmNScsXG4gICAgY29sb3I6ICcjMTExMTExJyxcbiAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIH07XG5cbiAgY29uc3QgbG9nb0NvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBnYXA6ICcxMHB4JyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICB6SW5kZXg6IDEsXG4gIH07XG5cbiAgY29uc3QgbG9nb1N0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHdpZHRoOiAnMjhweCcsXG4gICAgaGVpZ2h0OiAnMjhweCcsXG4gIH07XG5cbiAgY29uc3QgaGVhZGVyVGl0bGVDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gIH07XG5cbiAgY29uc3QgaGVhZGVyVGl0bGVTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmb250U2l6ZTogJzE2cHgnLFxuICAgIGZvbnRXZWlnaHQ6ICdib2xkJyxcbiAgICBtYXJnaW46IDAsXG4gICAgZm9udEZhbWlseSxcbiAgfTtcblxuICBjb25zdCBoZWFkZXJTdWJ0aXRsZVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZvbnRTaXplOiAnMTRweCcsXG4gICAgZm9udFdlaWdodDogJ25vcm1hbCcsXG4gICAgbWFyZ2luOiAwLFxuICAgIGZvbnRGYW1pbHksXG4gIH07XG5cbiAgY29uc3QgbWVudUJ1dHRvblN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICBjb2xvcjogJyMxMTExMTEnLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIGJvcmRlclJhZGl1czogJzUwJScsXG4gICAgd2lkdGg6ICczMnB4JyxcbiAgICBoZWlnaHQ6ICczMnB4JyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIG91dGxpbmU6ICdub25lJyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICB6SW5kZXg6IDEsXG4gIH07XG5cbiAgY29uc3QgbWVudVBvcHVwU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdG9wOiAnNTBweCcsXG4gICAgcmlnaHQ6ICcxNXB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGJhY2tncm91bmRDb2xvcixcbiAgICBib3JkZXJSYWRpdXM6ICc4cHgnLFxuICAgIGJveFNoYWRvdzogJzAgMnB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjEpJyxcbiAgICB6SW5kZXg6IDUsXG4gICAgbWluV2lkdGg6ICcxNTBweCcsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICB9O1xuXG4gIGNvbnN0IG1lbnVJdGVtU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGdhcDogJzhweCcsXG4gICAgcGFkZGluZzogJzEwcHggMTVweCcsXG4gICAgY29sb3I6IHRleHRDb2xvcixcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICBmb250U2l6ZSxcbiAgICBmb250RmFtaWx5LFxuICAgIGJvcmRlckJvdHRvbTogJzFweCBzb2xpZCAjZjBmMGYwJyxcbiAgfTtcblxuICBjb25zdCBjaGF0Q29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZmxleDogMSxcbiAgICBvdmVyZmxvd1k6ICdhdXRvJyxcbiAgICBwYWRkaW5nOiAnMTVweCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgfTtcblxuICBjb25zdCBpbnB1dENvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBwYWRkaW5nOiAnMTJweCAxNXB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmZmZmJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBnYXA6ICc4cHgnLFxuICB9O1xuXG4gIGNvbnN0IGlucHV0V3JhcHBlclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4OiAxLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNmZmZmZmYnLFxuICAgIGJvcmRlclJhZGl1czogJzI0cHgnLFxuICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZTVlN2ViJyxcbiAgICBwYWRkaW5nOiAnMCAxMnB4JyxcbiAgICBtaW5IZWlnaHQ6ICc1MHB4JyxcbiAgICBib3hTaGFkb3c6ICcwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjA2KScsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZSdcbiAgfTtcblxuICBjb25zdCB0ZXh0QXJlYVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZsZXg6IDEsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgb3V0bGluZTogJ25vbmUnLFxuICAgIGJhY2tncm91bmQ6ICd0cmFuc3BhcmVudCcsXG4gICAgZm9udFNpemUsXG4gICAgZm9udEZhbWlseSxcbiAgICBwYWRkaW5nOiAnMTBweCcsXG4gICAgcGFkZGluZ1JpZ2h0OiAnNDZweCcsXG4gICAgY29sb3I6IHRleHRDb2xvcixcbiAgICByZXNpemU6ICdub25lJyxcbiAgICBsaW5lSGVpZ2h0OiBgJHtsaW5lSGVpZ2h0UHh9cHhgLFxuICAgIG1heEhlaWdodDogYCR7dGV4dEFyZWFNYXhIZWlnaHR9cHhgLFxuICAgIG92ZXJmbG93WTogJ2hpZGRlbicsXG4gIH07XG5cbiAgY29uc3QgYXR0YWNoQnV0dG9uU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgb3V0bGluZTogJ25vbmUnLFxuICAgIGNvbG9yOiAnIzc1NzU3NScsXG4gICAgcGFkZGluZzogMCxcbiAgfTtcblxuICBjb25zdCBzZW5kQnV0dG9uU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBwcmltYXJ5Q29sb3IsXG4gICAgY29sb3I6ICcjZmZmZmZmJyxcbiAgICBib3JkZXI6ICdub25lJyxcbiAgICBib3JkZXJSYWRpdXM6ICc1MCUnLFxuICAgIHdpZHRoOiAnMzZweCcsXG4gICAgaGVpZ2h0OiAnMzZweCcsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICBvdXRsaW5lOiAnbm9uZScsXG4gICAgZmxleFNocmluazogMCxcbiAgICBib3hTaGFkb3c6ICcwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjA4KScsXG4gIH07XG5cbiAgY29uc3QgcmlnaHRBY3Rpb25Db250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICByaWdodDogJzRweCcsXG4gICAgdG9wOiAnNTAlJyxcbiAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC01MCUpJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICB9O1xuXG4gIGNvbnN0IGF1dG9SZXNpemVUZXh0QXJlYSA9ICgpID0+IHtcbiAgICBjb25zdCBlbCA9IHRleHRBcmVhUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFlbCkgcmV0dXJuO1xuICAgIGVsLnN0eWxlLmhlaWdodCA9ICdhdXRvJztcbiAgICBjb25zdCBuZXdIZWlnaHQgPSBNYXRoLm1pbihlbC5zY3JvbGxIZWlnaHQsIHRleHRBcmVhTWF4SGVpZ2h0KTtcbiAgICBlbC5zdHlsZS5oZWlnaHQgPSBgJHtuZXdIZWlnaHR9cHhgO1xuICAgIGVsLnN0eWxlLm92ZXJmbG93WSA9IGVsLnNjcm9sbEhlaWdodCA+IHRleHRBcmVhTWF4SGVpZ2h0ID8gJ2F1dG8nIDogJ2hpZGRlbic7XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBhdXRvUmVzaXplVGV4dEFyZWEoKTtcbiAgfSwgW2lucHV0VmFsdWUsIGZvbnRTaXplTnVtYmVyXSk7XG5cbiAgY29uc3QgcG9zc2libGVRdWVyaWVzQ29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIGdhcDogJzhweCcsXG4gICAgcGFkZGluZzogJzAnLFxuICAgIHBhZGRpbmdMZWZ0OiAnMjhweCcsXG4gICAgcGFkZGluZ1JpZ2h0OiAnMjhweCcsXG4gICAgbWFyZ2luVG9wOiAnNXB4JyxcbiAgICBtYXJnaW5Cb3R0b206ICcxNXB4JyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGZvbnRGYW1pbHksXG4gIH07XG5cbiAgY29uc3QgcXVlcnlCdXR0b25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBwYWRkaW5nOiAnMTJweCAxNXB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lPy5zZWNvbmRhcnlDb2xvciB8fCAnI2Y1ZjVmNScsXG4gICAgY29sb3I6IHRleHRDb2xvcixcbiAgICBib3JkZXI6ICdub25lJyxcbiAgICBib3JkZXJSYWRpdXM6ICc2cHgnLFxuICAgIGZvbnRTaXplLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIHRleHRBbGlnbjogJ2xlZnQnLFxuICAgIGZvbnRXZWlnaHQ6ICdub3JtYWwnLFxuICAgIGJveFNoYWRvdzogJ25vbmUnLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgbWF4V2lkdGg6ICcyNDBweCcsXG4gICAgZm9udEZhbWlseSxcbiAgfTtcblxuICBjb25zdCBjb25maXJtT3ZlcmxheVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6IHNob3dSZXNldENvbmZpcm0gPyAnZmxleCcgOiAnbm9uZScsXG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdG9wOiAwLFxuICAgIGxlZnQ6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgYm90dG9tOiAwLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwgMCwgMCwgMC41KScsXG4gICAgekluZGV4OiAxMCxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIH07XG5cbiAgY29uc3QgY29uZmlybURpYWxvZ1N0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGJhY2tncm91bmRDb2xvcjogYmFja2dyb3VuZENvbG9yLFxuICAgIHBhZGRpbmc6ICcyMHB4JyxcbiAgICBib3JkZXJSYWRpdXM6ICc4cHgnLFxuICAgIG1heFdpZHRoOiAnMzAwcHgnLFxuICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgZm9udEZhbWlseSxcbiAgICBjb2xvcjogdGV4dENvbG9yLFxuICB9O1xuXG4gIGNvbnN0IGNvbmZpcm1CdXR0b25zU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBtYXJnaW5Ub3A6ICcxNXB4JyxcbiAgICBnYXA6ICcxMHB4JyxcbiAgfTtcblxuICBjb25zdCBjb25maXJtQnV0dG9uU3R5bGUgPSAoaXNDb25maXJtOiBib29sZWFuKTogUmVhY3QuQ1NTUHJvcGVydGllcyA9PiAoe1xuICAgIHBhZGRpbmc6ICc4cHggMTZweCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiBpc0NvbmZpcm0gPyAnI0Y0NDMzNicgOiAnI2UwZTBlMCcsXG4gICAgY29sb3I6IGlzQ29uZmlybSA/ICcjZmZmZmZmJyA6IHRleHRDb2xvcixcbiAgICBib3JkZXI6ICdub25lJyxcbiAgICBib3JkZXJSYWRpdXM6ICc0cHgnLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIGZvbnRGYW1pbHksXG4gICAgZm9udFNpemUsXG4gIH0pO1xuXG4gIGNvbnN0IGNvbnRlbnRDYXJkU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZmxleDogMSxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgYmFja2dyb3VuZENvbG9yLFxuICAgIGJvcmRlclRvcExlZnRSYWRpdXM6IDI0LFxuICAgIGJvcmRlclRvcFJpZ2h0UmFkaXVzOiAyNCxcbiAgICBib3hTaGFkb3c6ICcwIC0ycHggNnB4IHJnYmEoMCwwLDAsMC4wMyknLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIHpJbmRleDogMixcbiAgICBvdmVyZmxvdzogJ2hpZGRlbidcbiAgfTtcblxuICAvLyBGbG9hdGluZyBtb2RlIHN0eWxlc1xuICBjb25zdCBnZXRQb3NpdGlvblN0eWxlcyA9ICgpOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0+IHtcbiAgICBjb25zdCBiYXNlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICB6SW5kZXg6IDEwMDAsXG4gICAgfTtcblxuICAgIHN3aXRjaCAocG9zaXRpb24pIHtcbiAgICAgIGNhc2UgJ2JvdHRvbS1yaWdodCc6XG4gICAgICAgIHJldHVybiB7IC4uLmJhc2UsIGJvdHRvbTogb2Zmc2V0WSwgcmlnaHQ6IG9mZnNldFggfTtcbiAgICAgIGNhc2UgJ2JvdHRvbS1sZWZ0JzpcbiAgICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgYm90dG9tOiBvZmZzZXRZLCBsZWZ0OiBvZmZzZXRYIH07XG4gICAgICBjYXNlICd0b3AtcmlnaHQnOlxuICAgICAgICByZXR1cm4geyAuLi5iYXNlLCB0b3A6IG9mZnNldFksIHJpZ2h0OiBvZmZzZXRYIH07XG4gICAgICBjYXNlICd0b3AtbGVmdCc6XG4gICAgICAgIHJldHVybiB7IC4uLmJhc2UsIHRvcDogb2Zmc2V0WSwgbGVmdDogb2Zmc2V0WCB9O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgYm90dG9tOiBvZmZzZXRZLCByaWdodDogb2Zmc2V0WCB9O1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBnZXRDaGF0UG9zaXRpb25TdHlsZXMgPSAoKTogUmVhY3QuQ1NTUHJvcGVydGllcyA9PiB7XG4gICAgY29uc3QgYmFzZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgICAgYm9yZGVyUmFkaXVzOiAnMzJweCcsXG4gICAgICB6SW5kZXg6IDk5OSxcbiAgICB9O1xuXG4gICAgc3dpdGNoIChwb3NpdGlvbikge1xuICAgICAgY2FzZSAnYm90dG9tLXJpZ2h0JzpcbiAgICAgICAgcmV0dXJuIHsgXG4gICAgICAgICAgLi4uYmFzZSwgXG4gICAgICAgICAgYm90dG9tOiBvZmZzZXRZICsgODAsXG4gICAgICAgICAgcmlnaHQ6IG9mZnNldFggXG4gICAgICAgIH07XG4gICAgICBjYXNlICdib3R0b20tbGVmdCc6XG4gICAgICAgIHJldHVybiB7IFxuICAgICAgICAgIC4uLmJhc2UsIFxuICAgICAgICAgIGJvdHRvbTogb2Zmc2V0WSArIDgwLFxuICAgICAgICAgIGxlZnQ6IG9mZnNldFggXG4gICAgICAgIH07XG4gICAgICBjYXNlICd0b3AtcmlnaHQnOlxuICAgICAgICByZXR1cm4geyBcbiAgICAgICAgICAuLi5iYXNlLCBcbiAgICAgICAgICB0b3A6IG9mZnNldFkgKyA4MCxcbiAgICAgICAgICByaWdodDogb2Zmc2V0WCBcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgJ3RvcC1sZWZ0JzpcbiAgICAgICAgcmV0dXJuIHsgXG4gICAgICAgICAgLi4uYmFzZSwgXG4gICAgICAgICAgdG9wOiBvZmZzZXRZICsgODAsXG4gICAgICAgICAgbGVmdDogb2Zmc2V0WCBcbiAgICAgICAgfTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB7IFxuICAgICAgICAgIC4uLmJhc2UsIFxuICAgICAgICAgIGJvdHRvbTogb2Zmc2V0WSArIDgwLFxuICAgICAgICAgIHJpZ2h0OiBvZmZzZXRYIFxuICAgICAgICB9O1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBnZXRSZXNwb25zaXZlRGltZW5zaW9ucyA9ICgpID0+IHtcbiAgICBjb25zdCBzY3JlZW5XaWR0aCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LmlubmVyV2lkdGggOiAxMDI0O1xuICAgIGlmIChzY3JlZW5XaWR0aCA8PSA0ODApIHtcbiAgICAgIHJldHVybiB7IHdpZHRoOiAnY2FsYygxMDB2dyAtIDQwcHgpJywgaGVpZ2h0OiAnNDUwcHgnIH07XG4gICAgfSBlbHNlIGlmIChzY3JlZW5XaWR0aCA8PSA3NjgpIHtcbiAgICAgIHJldHVybiB7IHdpZHRoOiAnMzUwcHgnLCBoZWlnaHQ6ICc1MDBweCcgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6ICczODBweCcsIGhlaWdodDogJzYwMHB4JyB9O1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBmbG9hdGluZ0NvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIC4uLmdldENoYXRQb3NpdGlvblN0eWxlcygpLFxuICAgIC4uLmdldFJlc3BvbnNpdmVEaW1lbnNpb25zKCksXG4gIH07XG5cbiAgY29uc3QgcmVuZGVyQ2hhdENvbXBvbmVudCA9ICgpID0+IChcbiAgICA8ZGl2IHN0eWxlPXtjb250YWluZXJTdHlsZX0gZGF0YS1nZW5hc3Npc3Qtcm9vdD1cInRydWVcIj5cbiAgICAgIDxzdHlsZT57YFxuICAgICAgICBAa2V5ZnJhbWVzIGJsaW5rIHsgMCUgeyBvcGFjaXR5OiAwLjI7IH0gMjAlIHsgb3BhY2l0eTogMTsgfSAxMDAlIHsgb3BhY2l0eTogMC4yOyB9IH1cbiAgICAgICAgLyogSGlkZSBzY3JvbGxiYXJzIGZvciB0aGUgZXhwYW5kaW5nIHRleHRhcmVhIGJ1dCBrZWVwIHNjcm9sbGluZyAqL1xuICAgICAgICAuZ2EtdGV4dGFyZWEtbm9zYiB7IHNjcm9sbGJhci13aWR0aDogbm9uZTsgLW1zLW92ZXJmbG93LXN0eWxlOiBub25lOyB9XG4gICAgICAgIC5nYS10ZXh0YXJlYS1ub3NiOjotd2Via2l0LXNjcm9sbGJhciB7IHdpZHRoOiAwOyBoZWlnaHQ6IDA7IH1cbiAgICAgICAgLyogQmFja2xpZ2h0IHN3ZWVwIHVuZGVyIGNvbnRlbnQgZWRnZSAoR1BVLWZyaWVuZGx5KS5cbiAgICAgICAgICAgV2lkZXIgdHJhdmVsIHRvIGZ1bGx5IHJlYWNoIGJvdGggY29ybmVycy4gKi9cbiAgICAgICAgQGtleWZyYW1lcyBnYS1iYWNrbGlnaHQtc3dlZXAyIHsgMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTM1JSk7IH0gMTAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDUlKTsgfSB9XG4gICAgICAgIEBrZXlmcmFtZXMgZ2EtYmFja2xpZ2h0LXB1bHNlIHsgMCUsMTAwJSB7IG9wYWNpdHk6IDAuNzsgfSA1MCUgeyBvcGFjaXR5OiAxOyB9IH1cbiAgICAgICAgQGtleWZyYW1lcyBnYS10aGluay1jaGFuZ2UgeyAwJSB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSg0cHgpOyB9IDEwMCUgeyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IH0gfVxuICAgICAgYH08L3N0eWxlPlxuICAgICAgPGRpdiBzdHlsZT17aGVhZGVyU3R5bGV9IHJlZj17aGVhZGVyUmVmfT5cbiAgICAgICAgPGRpdiBzdHlsZT17bG9nb0NvbnRhaW5lclN0eWxlfT5cbiAgICAgICAgICA8aW1nIHNyYz17Y2hhdExvZ299IGFsdD1cIkxvZ29cIiBzdHlsZT17bG9nb1N0eWxlfSAvPlxuICAgICAgICAgIDxkaXYgc3R5bGU9e2hlYWRlclRpdGxlQ29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17aGVhZGVyVGl0bGVTdHlsZX0+e2hlYWRlclRpdGxlfTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17aGVhZGVyU3VidGl0bGVTdHlsZX0+U3VwcG9ydDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHN0eWxlPXttZW51QnV0dG9uU3R5bGV9XG4gICAgICAgICAgb25DbGljaz17aGFuZGxlTWVudUNsaWNrfVxuICAgICAgICAgIHRpdGxlPVwiTWVudVwiXG4gICAgICAgID5cbiAgICAgICAgICA8TW9yZVZlcnRpY2FsIHNpemU9ezI0fSBjb2xvcj1cIiMxMTExMTFcIiAvPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgPC9kaXY+XG4gICAgICB7c2hvd0JhY2tsaWdodCAmJiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgICB0b3A6IE1hdGgubWF4KDAsIGhlYWRlckhlaWdodCAtIDE0KSxcbiAgICAgICAgICAgIGhlaWdodDogNDIsXG4gICAgICAgICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgICAgICAgICB6SW5kZXg6IDEsXG4gICAgICAgICAgICBvcGFjaXR5OiBpc0FnZW50VHlwaW5nID8gMSA6IDAsXG4gICAgICAgICAgICB0cmFuc2l0aW9uOiAnb3BhY2l0eSA0MjBtcyBlYXNlLWluLW91dCcsXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgICB0b3A6IDYsXG4gICAgICAgICAgICAgIGhlaWdodDogMzIsXG4gICAgICAgICAgICAgIHdpZHRoOiAnNzglJyxcbiAgICAgICAgICAgICAgZmlsdGVyOiAnYmx1cigyMnB4KScsXG4gICAgICAgICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgICAgICAgJ2xpbmVhci1ncmFkaWVudCg5MGRlZywgcmdiYSg5OSwxMDIsMjQxLDAuMCkgMCUsIHJnYmEoOTksMTAyLDI0MSwwLjM1KSAxNSUsIHJnYmEoOTksMTAyLDI0MSwwLjU1KSA1MCUsIHJnYmEoOTksMTAyLDI0MSwwLjM1KSA4NSUsIHJnYmEoOTksMTAyLDI0MSwwLjApIDEwMCUpJyxcbiAgICAgICAgICAgICAgd2lsbENoYW5nZTogJ3RyYW5zZm9ybSwgb3BhY2l0eScsXG4gICAgICAgICAgICAgIGFuaW1hdGlvbjogJ2dhLWJhY2tsaWdodC1zd2VlcDIgMS4ycyBjdWJpYy1iZXppZXIoMC40LDAuMCwwLjIsMSkgaW5maW5pdGUgYWx0ZXJuYXRlLCBnYS1iYWNrbGlnaHQtcHVsc2UgMi40cyBlYXNlLWluLW91dCBpbmZpbml0ZScsXG4gICAgICAgICAgICAgIGJvcmRlclJhZGl1czogMTgsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cblxuICAgICAge3Nob3dNZW51ICYmIChcbiAgICAgICAgPGRpdiByZWY9e21lbnVSZWZ9IHN0eWxlPXttZW51UG9wdXBTdHlsZX0+XG4gICAgICAgICAgPGRpdiBzdHlsZT17bWVudUl0ZW1TdHlsZX0gb25DbGljaz17aGFuZGxlUmVzZXRDbGlja30+XG4gICAgICAgICAgICA8UmVmcmVzaEN3IHNpemU9ezE2fSAvPlxuICAgICAgICAgICAgUmVzZXQgY29udmVyc2F0aW9uXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIFxuICAgICAgPGRpdiBzdHlsZT17Y29udGVudENhcmRTdHlsZX0+XG4gICAgICAgIDxkaXYgc3R5bGU9e2NoYXRDb250YWluZXJTdHlsZX0+XG4gICAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9KSgpfVxuICAgICAgICAgIHsoKCkgPT4ge1xuICAgICAgICAgICAgLy8gc2hvdyB3ZWxjb21lIGNhcmRcbiAgICAgICAgICAgIGNvbnN0IHNob3VsZFNob3dTeW50aGV0aWNXZWxjb21lID1cbiAgICAgICAgICAgICAgIWhhc1VzZXJNZXNzYWdlcyAmJlxuICAgICAgICAgICAgICAobWVzc2FnZXMubGVuZ3RoID09PSAwIHx8IG1lc3NhZ2VzWzBdLnNwZWFrZXIgIT09ICdhZ2VudCcpICYmXG4gICAgICAgICAgICAgIChCb29sZWFuKHdlbGNvbWVUaXRsZSkgfHwgQm9vbGVhbih3ZWxjb21lSW1hZ2VVcmwpIHx8IEJvb2xlYW4od2VsY29tZU1lc3NhZ2UpKTtcblxuICAgICAgICAgICAgaWYgKCFzaG91bGRTaG93U3ludGhldGljV2VsY29tZSkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApO1xuICAgICAgICAgICAgY29uc3Qgc3ludGhldGljV2VsY29tZTogQ2hhdE1lc3NhZ2UgPSB7XG4gICAgICAgICAgICAgIGNyZWF0ZV90aW1lOiBub3csXG4gICAgICAgICAgICAgIHN0YXJ0X3RpbWU6IDAsXG4gICAgICAgICAgICAgIGVuZF90aW1lOiAwLjAxLFxuICAgICAgICAgICAgICBzcGVha2VyOiAnYWdlbnQnLFxuICAgICAgICAgICAgICB0ZXh0OiB3ZWxjb21lTWVzc2FnZSB8fCAnJyxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxDaGF0TWVzc2FnZUNvbXBvbmVudFxuICAgICAgICAgICAgICAgIGtleT1cIl9fc3ludGhldGljX3dlbGNvbWVfX1wiXG4gICAgICAgICAgICAgICAgbWVzc2FnZT17c3ludGhldGljV2VsY29tZX1cbiAgICAgICAgICAgICAgICB0aGVtZT17dGhlbWV9XG4gICAgICAgICAgICAgICAgaXNGaXJzdE1lc3NhZ2U9e3RydWV9XG4gICAgICAgICAgICAgICAgaXNOZXh0U2FtZVNwZWFrZXI9e2ZhbHNlfVxuICAgICAgICAgICAgICAgIGlzUHJldlNhbWVTcGVha2VyPXtmYWxzZX1cbiAgICAgICAgICAgICAgICBlbmFibGVUeXBld3JpdGVyPXtmYWxzZX1cbiAgICAgICAgICAgICAgICB3ZWxjb21lSW1hZ2VVcmw9e3dlbGNvbWVJbWFnZVVybCB8fCB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgd2VsY29tZVRpdGxlPXt3ZWxjb21lVGl0bGUgfHwgdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgIHBvc3NpYmxlUXVlcmllcz17cG9zc2libGVRdWVyaWVzfVxuICAgICAgICAgICAgICAgIG9uUXVpY2tRdWVyeT17aGFuZGxlUXVlcnlDbGlja31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSkoKX1cbiAgICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0QWdlbnRJbmRleCA9IG1lc3NhZ2VzLmZpbmRJbmRleChtID0+IG0uc3BlYWtlciA9PT0gJ2FnZW50Jyk7XG4gICAgICAgICAgICByZXR1cm4gbWVzc2FnZXMubWFwKChtZXNzYWdlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBpc05leHRTYW1lU3BlYWtlciA9IGluZGV4IDwgbWVzc2FnZXMubGVuZ3RoIC0gMSAmJiBtZXNzYWdlc1tpbmRleCArIDFdLnNwZWFrZXIgPT09IG1lc3NhZ2Uuc3BlYWtlcjtcbiAgICAgICAgICAgICAgY29uc3QgaXNQcmV2U2FtZVNwZWFrZXIgPSBpbmRleCA+IDAgJiYgbWVzc2FnZXNbaW5kZXggLSAxXS5zcGVha2VyID09PSBtZXNzYWdlLnNwZWFrZXI7XG4gICAgICAgICAgICAgIGNvbnN0IGlzRmlyc3RBZ2VudE1lc3NhZ2UgPSBpbmRleCA9PT0gZmlyc3RBZ2VudEluZGV4ICYmIG1lc3NhZ2Uuc3BlYWtlciA9PT0gJ2FnZW50JyAmJiAhaGFzVXNlck1lc3NhZ2VzO1xuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxDaGF0TWVzc2FnZUNvbXBvbmVudCBcbiAgICAgICAgICAgICAgICAgIGtleT17aW5kZXh9IFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZT17bWVzc2FnZX0gXG4gICAgICAgICAgICAgICAgICB0aGVtZT17dGhlbWV9XG4gICAgICAgICAgICAgICAgICBvblBsYXlBdWRpbz17bWVzc2FnZS5zcGVha2VyID09PSAnYWdlbnQnID8gcGxheVJlc3BvbnNlQXVkaW8gOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICBpc1BsYXlpbmdBdWRpbz17aXNQbGF5aW5nQXVkaW99XG4gICAgICAgICAgICAgICAgICBpc0ZpcnN0TWVzc2FnZT17aXNGaXJzdEFnZW50TWVzc2FnZX1cbiAgICAgICAgICAgICAgICAgIGlzTmV4dFNhbWVTcGVha2VyPXtpc05leHRTYW1lU3BlYWtlcn1cbiAgICAgICAgICAgICAgICAgIGlzUHJldlNhbWVTcGVha2VyPXtpc1ByZXZTYW1lU3BlYWtlcn1cbiAgICAgICAgICAgICAgICAgIG9uRmVlZGJhY2s9eyhtZXNzYWdlSWQsIHZhbHVlKSA9PiBhZGRGZWVkYmFjayhtZXNzYWdlSWQsIHZhbHVlKX1cbiAgICAgICAgICAgICAgICAgIGVuYWJsZVR5cGV3cml0ZXI9e2luZGV4ID09PSBtZXNzYWdlcy5sZW5ndGggLSAxICYmIG1lc3NhZ2Uuc3BlYWtlciA9PT0gJ2FnZW50J31cbiAgICAgICAgICAgICAgICAgIHdlbGNvbWVJbWFnZVVybD17aXNGaXJzdEFnZW50TWVzc2FnZSA/ICh3ZWxjb21lSW1hZ2VVcmwgfHwgdW5kZWZpbmVkKSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgIHdlbGNvbWVUaXRsZT17aXNGaXJzdEFnZW50TWVzc2FnZSA/ICh3ZWxjb21lVGl0bGUgfHwgdW5kZWZpbmVkKSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgIHBvc3NpYmxlUXVlcmllcz17aXNGaXJzdEFnZW50TWVzc2FnZSA/IHBvc3NpYmxlUXVlcmllcyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgIG9uUXVpY2tRdWVyeT17aGFuZGxlUXVlcnlDbGlja31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSkoKX1cbiAgICAgICAgICB7aXNBZ2VudFR5cGluZyAmJiBjdXJyZW50VGhpbmtpbmdQYXJ0cy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWF4V2lkdGg6ICc4MCUnIH19PlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAnMTRweCcsIGNvbG9yOiAnIzAwMDAwMCcsIGZvbnRXZWlnaHQ6IDYwMCwgbWFyZ2luQm90dG9tOiA0IH19PkFnZW50PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDAsXG4gICAgICAgICAgICAgICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAga2V5PXtgJHtjdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXh9LSR7Y3VycmVudFRoaW5raW5nUGFydHMuam9pbignfCcpfWB9XG4gICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICBhbmltYXRpb246ICdnYS10aGluay1jaGFuZ2UgMjIwbXMgZWFzZScsXG4gICAgICAgICAgICAgICAgICAgIHdpbGxDaGFuZ2U6ICd0cmFuc2Zvcm0sIG9wYWNpdHknLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyM2YjcyODAnLFxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogJzEzcHgnLFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7Y3VycmVudFRoaW5raW5nUGFydHNbY3VycmVudFRoaW5raW5nUGFydEluZGV4XSB8fCBjdXJyZW50VGhpbmtpbmdQYXJ0c1tjdXJyZW50VGhpbmtpbmdQYXJ0cy5sZW5ndGggLSAxXX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICAgIDxkaXYgcmVmPXttZXNzYWdlc0VuZFJlZn0gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHsoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNob3dpbmdTeW50aGV0aWNXZWxjb21lID1cbiAgICAgICAgICAgICFoYXNVc2VyTWVzc2FnZXMgJiZcbiAgICAgICAgICAgIChtZXNzYWdlcy5sZW5ndGggPT09IDAgfHwgbWVzc2FnZXNbMF0uc3BlYWtlciAhPT0gJ2FnZW50JykgJiZcbiAgICAgICAgICAgIChCb29sZWFuKHdlbGNvbWVUaXRsZSkgfHwgQm9vbGVhbih3ZWxjb21lSW1hZ2VVcmwpIHx8IEJvb2xlYW4od2VsY29tZU1lc3NhZ2UpKTtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgcG9zc2libGVRdWVyaWVzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICFoYXNVc2VyTWVzc2FnZXMgJiZcbiAgICAgICAgICAgIChtZXNzYWdlcy5sZW5ndGggPT09IDAgfHwgbWVzc2FnZXNbMF0uc3BlYWtlciAhPT0gJ2FnZW50JykgJiZcbiAgICAgICAgICAgICFzaG93aW5nU3ludGhldGljV2VsY29tZVxuICAgICAgICAgICk7XG4gICAgICAgIH0pKCkgJiYgKFxuICAgICAgICAgIDxkaXYgc3R5bGU9e3Bvc3NpYmxlUXVlcmllc0NvbnRhaW5lclN0eWxlfT5cbiAgICAgICAgICAgIHtwb3NzaWJsZVF1ZXJpZXMubWFwKChxdWVyeSwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgICAgIHN0eWxlPXtxdWVyeUJ1dHRvblN0eWxlfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVF1ZXJ5Q2xpY2socXVlcnkpfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc0xvYWRpbmd9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7cXVlcnl9XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICAgIFxuICAgICAgICB7YXR0YWNobWVudHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBwYWRkaW5nOiAnMCAxNnB4JywgbWFyZ2luQm90dG9tOiAnOHB4JywgZGlzcGxheTogJ2ZsZXgnLCBnYXA6ICc4cHgnLCBmbGV4V3JhcDogJ3dyYXAnIH19PlxuICAgICAgICAgICAge2F0dGFjaG1lbnRzLm1hcCgoZmlsZSwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgPEF0dGFjaG1lbnRQcmV2aWV3IFxuICAgICAgICAgICAgICAgIGtleT17aW5kZXh9IFxuICAgICAgICAgICAgICAgIGZpbGU9e2ZpbGV9IFxuICAgICAgICAgICAgICAgIG9uUmVtb3ZlPXsoKSA9PiBoYW5kbGVSZW1vdmVBdHRhY2htZW50KGZpbGUubmFtZSl9XG4gICAgICAgICAgICAgICAgdXBsb2FkaW5nPXt1cGxvYWRpbmdGaWxlcy5oYXMoZmlsZS5uYW1lKX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuXG4gICAgICAgIHshY29udmVyc2F0aW9uSWQgfHwgaXNGaW5hbGl6ZWQgPyAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17aW5wdXRDb250YWluZXJTdHlsZX0+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHN0eWxlPXt7Li4uc2VuZEJ1dHRvblN0eWxlLCB3aWR0aDogJzEwMCUnLCBoZWlnaHQ6ICc0OHB4JywgYm9yZGVyUmFkaXVzOiAnMTZweCd9fVxuICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTdGFydENvbnZlcnNhdGlvbn1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzTG9hZGluZ31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgU3RhcnQgQ29udmVyc2F0aW9uXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8Zm9ybSBvblN1Ym1pdD17aGFuZGxlU3VibWl0fSBzdHlsZT17aW5wdXRDb250YWluZXJTdHlsZX0+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXtpbnB1dFdyYXBwZXJTdHlsZX0+XG4gICAgICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIFxuICAgICAgICAgICAgICAgIHN0eWxlPXthdHRhY2hCdXR0b25TdHlsZX1cbiAgICAgICAgICAgICAgICB0aXRsZT1cIkF0dGFjaFwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gZmlsZUlucHV0UmVmLmN1cnJlbnQ/LmNsaWNrKCl9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8UGFwZXJjbGlwIHNpemU9ezIyfSBjb2xvcj1cIiM3NTc1NzVcIiAvPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgcmVmPXtmaWxlSW5wdXRSZWZ9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogJ25vbmUnIH19XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUZpbGVDaGFuZ2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgICAgIHJlZj17dGV4dEFyZWFSZWZ9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3RleHRBcmVhU3R5bGV9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZ2EtdGV4dGFyZWEtbm9zYlwiXG4gICAgICAgICAgICAgICAgdmFsdWU9e2lucHV0VmFsdWV9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRJbnB1dFZhbHVlKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICBvbktleURvd249eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgJiYgIWUuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGlucHV0VmFsdWUudHJpbSgpICE9PSAnJyB8fCBhdHRhY2htZW50cy5sZW5ndGggPiAwKSAmJiBjb25uZWN0aW9uU3RhdGUgPT09ICdjb25uZWN0ZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc3VibWl0TWVzc2FnZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFjb252ZXJzYXRpb25JZCB8fCBpc0ZpbmFsaXplZH1cbiAgICAgICAgICAgICAgICByb3dzPXsxfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtyaWdodEFjdGlvbkNvbnRhaW5lclN0eWxlfT5cbiAgICAgICAgICAgICAgICB7aW5wdXRWYWx1ZS50cmltKCkgPT09ICcnICYmIGF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgICAgICAgIDxWb2ljZUlucHV0XG4gICAgICAgICAgICAgICAgICAgIG9uVHJhbnNjcmlwdGlvbj17KHRleHQ6IHN0cmluZykgPT4gc2V0SW5wdXRWYWx1ZSh0ZXh0KX1cbiAgICAgICAgICAgICAgICAgICAgb25FcnJvcj17aGFuZGxlVm9pY2VFcnJvcn1cbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybD17YmFzZVVybH1cbiAgICAgICAgICAgICAgICAgICAgYXBpS2V5PXthcGlLZXl9XG4gICAgICAgICAgICAgICAgICAgIHRoZW1lPXt0aGVtZX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIiBcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3NlbmRCdXR0b25TdHlsZX1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyhpbnB1dFZhbHVlLnRyaW0oKSA9PT0gJycgJiYgYXR0YWNobWVudHMubGVuZ3RoID09PSAwKSB8fCBjb25uZWN0aW9uU3RhdGUgIT09ICdjb25uZWN0ZWQnfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8U2VuZCBzaXplPXsxOH0gY29sb3I9XCIjZmZmZmZmXCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9mb3JtPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgc3R5bGU9e2NvbmZpcm1PdmVybGF5U3R5bGV9PlxuICAgICAgICA8ZGl2IHN0eWxlPXtjb25maXJtRGlhbG9nU3R5bGV9PlxuICAgICAgICAgIDxoMyBzdHlsZT17e2ZvbnRGYW1pbHksIG1hcmdpblRvcDogMH19PlJlc2V0IENvbnZlcnNhdGlvbjwvaDM+XG4gICAgICAgICAgPHAgc3R5bGU9e3tmb250RmFtaWx5LCBmb250U2l6ZX19PlRoaXMgd2lsbCBjbGVhciB0aGUgY3VycmVudCBjb252ZXJzYXRpb24gaGlzdG9yeSBhbmQgc3RhcnQgYSBuZXcgY29udmVyc2F0aW9uLiBBcmUgeW91IHN1cmU/PC9wPlxuICAgICAgICAgIDxkaXYgc3R5bGU9e2NvbmZpcm1CdXR0b25zU3R5bGV9PlxuICAgICAgICAgICAgPGJ1dHRvbiBzdHlsZT17ey4uLmNvbmZpcm1CdXR0b25TdHlsZShmYWxzZSksIGNvbG9yOiB0ZXh0Q29sb3J9fSBvbkNsaWNrPXtoYW5kbGVDYW5jZWxSZXNldH0+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIHN0eWxlPXtjb25maXJtQnV0dG9uU3R5bGUodHJ1ZSl9IG9uQ2xpY2s9e2hhbmRsZUNvbmZpcm1SZXNldH0+UmVzZXQ8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcblxuICBpZiAobW9kZSA9PT0gJ2Zsb2F0aW5nJykge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICA8Q2hhdEJ1YmJsZVxuICAgICAgICAgIHNob3dDaGF0PXtpc0Zsb2F0aW5nT3Blbn1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRJc0Zsb2F0aW5nT3BlbihwcmV2ID0+ICFwcmV2KX1cbiAgICAgICAgICBwcmltYXJ5Q29sb3I9e3ByaW1hcnlDb2xvcn1cbiAgICAgICAgICBzdHlsZT17Z2V0UG9zaXRpb25TdHlsZXMoKX1cbiAgICAgICAgLz5cbiAgICAgICAgXG4gICAgICAgIHtpc0Zsb2F0aW5nT3BlbiAmJiAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17ZmxvYXRpbmdDb250YWluZXJTdHlsZX0gZGF0YS1nZW5hc3Npc3QtY29udGFpbmVyPVwiZmxvYXRpbmdcIj5cbiAgICAgICAgICAgIHtyZW5kZXJDaGF0Q29tcG9uZW50KCl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHJlbmRlckNoYXRDb21wb25lbnQoKTtcbn07XG4iXX0=
|
|
797
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2VuQWdlbnRDaGF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvR2VuQWdlbnRDaGF0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFDLE9BQU8sUUFBUSxNQUFNLHlCQUF5QixDQUFDO0FBRS9DLE1BQU0sQ0FBQyxJQUFNLFlBQVksR0FBZ0MsVUFBQyxFQWF6RDtRQVpDLE9BQU8sYUFBQSxFQUNQLE1BQU0sWUFBQSxFQUNOLE1BQU0sWUFBQSxFQUNOLFFBQVEsY0FBQSxFQUNSLE9BQU8sYUFBQSxFQUNQLFVBQVUsZ0JBQUEsRUFDVixVQUFVLGdCQUFBLEVBQ1YsS0FBSyxXQUFBLEVBQ0wsbUJBQXlCLEVBQXpCLFdBQVcsbUJBQUcsV0FBVyxLQUFBLEVBQ3pCLG1CQUE4QixFQUE5QixXQUFXLG1CQUFHLGdCQUFnQixLQUFBLEVBQzlCLFlBQWlCLEVBQWpCLElBQUksbUJBQUcsVUFBVSxLQUFBLEVBQ2pCLHNCQUFtQixFQUFuQixjQUFjLG1CQUFHLEVB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RSxHQUNsQixDQUNQLElBQ0EsQ0FDSixDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sbUJBQW1CLEVBQUUsQ0FBQztBQUMvQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDaGF0TWVzc2FnZUNvbXBvbmVudCwgQXR0YWNobWVudFByZXZpZXcgfSBmcm9tICcuL0NoYXRNZXNzYWdlJztcbmltcG9ydCB7IHVzZUNoYXQgfSBmcm9tICcuLi9ob29rcy91c2VDaGF0JztcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBHZW5BZ2VudENoYXRQcm9wcyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IFZvaWNlSW5wdXQgfSBmcm9tICcuL1ZvaWNlSW5wdXQnO1xuaW1wb3J0IHsgQXVkaW9TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYXVkaW9TZXJ2aWNlJztcbmltcG9ydCB7IFNlbmQsIFBhcGVyY2xpcCwgTW9yZVZlcnRpY2FsLCBSZWZyZXNoQ3cgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHsgQ2hhdEJ1YmJsZSB9IGZyb20gJy4vQ2hhdEJ1YmJsZSc7XG5pbXBvcnQgY2hhdExvZ28gZnJvbSAnLi4vYXNzZXRzL2NoYXQtbG9nby5wbmcnO1xuXG5leHBvcnQgY29uc3QgR2VuQWdlbnRDaGF0OiBSZWFjdC5GQzxHZW5BZ2VudENoYXRQcm9wcz4gPSAoe1xuICBiYXNlVXJsLFxuICBhcGlLZXksXG4gIHRlbmFudCxcbiAgbWV0YWRhdGEsXG4gIG9uRXJyb3IsXG4gIG9uVGFrZW92ZXIsXG4gIG9uRmluYWxpemUsXG4gIHRoZW1lLFxuICBoZWFkZXJUaXRsZSA9ICdHZW5hc3Npc3QnLFxuICBwbGFjZWhvbGRlciA9ICdBc2sgYSBxdWVzdGlvbicsXG4gIG1vZGUgPSAnZW1iZWRkZWQnLFxuICBmbG9hdGluZ0NvbmZpZyA9IHt9XG59KTogUmVhY3QuUmVhY3RFbGVtZW50ID0+IHtcbiAgY29uc3QgW2lucHV0VmFsdWUsIHNldElucHV0VmFsdWVdID0gdXNlU3RhdGUoJycpO1xuICBjb25zdCBbc2hvd1Jlc2V0Q29uZmlybSwgc2V0U2hvd1Jlc2V0Q29uZmlybV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzaG93TWVudSwgc2V0U2hvd01lbnVdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbaXNQbGF5aW5nQXVkaW8sIHNldElzUGxheWluZ0F1ZGlvXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2lzRmxvYXRpbmdPcGVuLCBzZXRJc0Zsb2F0aW5nT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFthdHRhY2htZW50cywgc2V0QXR0YWNobWVudHNdID0gdXNlU3RhdGU8RmlsZVtdPihbXSk7XG4gIGNvbnN0IFt1cGxvYWRpbmdGaWxlcywgc2V0VXBsb2FkaW5nRmlsZXNdID0gdXNlU3RhdGU8U2V0PHN0cmluZz4+KG5ldyBTZXQoKSk7XG4gIGNvbnN0IG1lbnVSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBmaWxlSW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHRleHRBcmVhUmVmID0gdXNlUmVmPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBoZWFkZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBbaGVhZGVySGVpZ2h0LCBzZXRIZWFkZXJIZWlnaHRdID0gdXNlU3RhdGUoNTYpO1xuICBjb25zdCBbc2hvd0JhY2tsaWdodCwgc2V0U2hvd0JhY2tsaWdodF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgLy8gZGVmYXVsdCB0aGlua2luZyBtZXNzYWdlcyBpZiBub25lIHByb3ZpZGVkIGJ5IHdvcmtmbG93XG4gIGNvbnN0IERFRkFVTFRfVEhJTktJTkdfTUVTU0FHRVMgPSBbXG4gICAgXCJUaGlua2luZ+KAplwiLFxuICAgIFwiQW5hbHl6aW5nIHlvdXIgcXVlc3Rpb27igKZcIixcbiAgICBcIlNlYXJjaGluZyBrbm93bGVkZ2XigKZcIixcbiAgICBcIlB1bGxpbmcgcmVsZXZhbnQgaW5mb+KAplwiLFxuICAgIFwiRHJhZnRpbmcgdGhlIGFuc3dlcuKAplwiLFxuICAgIFwiRG91Ymxl4oCRY2hlY2tpbmcgZGV0YWlsc+KAplwiLFxuICAgIFwiVHlpbmcgaXQgdG9nZXRoZXLigKZcIixcbiAgICBcIkFsbW9zdCB0aGVyZeKAplwiLFxuICBdO1xuICBjb25zdCBbY3VycmVudFRoaW5raW5nUGFydHMsIHNldEN1cnJlbnRUaGlua2luZ1BhcnRzXSA9IHVzZVN0YXRlPHN0cmluZ1tdPihbXSk7XG4gIGNvbnN0IFtjdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXgsIHNldEN1cnJlbnRUaGlua2luZ1BhcnRJbmRleF0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3Qge1xuICAgIG1lc3NhZ2VzLFxuICAgIGlzTG9hZGluZyxcbiAgICBzZW5kTWVzc2FnZSxcbiAgICB1cGxvYWRGaWxlLFxuICAgIHJlc2V0Q29udmVyc2F0aW9uLFxuICAgIHN0YXJ0Q29udmVyc2F0aW9uLFxuICAgIGNvbm5lY3Rpb25TdGF0ZSxcbiAgICBjb252ZXJzYXRpb25JZCxcbiAgICBwb3NzaWJsZVF1ZXJpZXMsXG4gICAgaXNGaW5hbGl6ZWQsXG4gICAgaXNBZ2VudFR5cGluZyxcbiAgICBhZGRGZWVkYmFjayxcbiAgICB3ZWxjb21lVGl0bGUsXG4gICAgd2VsY29tZUltYWdlVXJsLFxuICAgIHdlbGNvbWVNZXNzYWdlLFxuICAgIHRoaW5raW5nUGhyYXNlcyxcbiAgICB0aGlua2luZ0RlbGF5TXMsXG4gIH0gPSB1c2VDaGF0KHtcbiAgICBiYXNlVXJsLFxuICAgIGFwaUtleSxcbiAgICB0ZW5hbnQsXG4gICAgbWV0YWRhdGEsXG4gICAgb25FcnJvcixcbiAgICBvblRha2VvdmVyLFxuICAgIG9uRmluYWxpemVcbiAgfSk7XG4gIGNvbnN0IG1lc3NhZ2VzRW5kUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgYXVkaW9TZXJ2aWNlID0gdXNlUmVmPEF1ZGlvU2VydmljZSB8IG51bGw+KG51bGwpO1xuICBjb25zdCBoYXNBbmNob3JlZEhpc3RvcnkgPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBjaGF0Q29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcblxuICBjb25zdCBhbmNob3JIaXN0b3J5ID0gKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gY2hhdENvbnRhaW5lclJlZi5jdXJyZW50O1xuICAgIGlmICghZWwgfHwgIW1lc3NhZ2VzLmxlbmd0aCB8fCBoYXNBbmNob3JlZEhpc3RvcnkuY3VycmVudCkgcmV0dXJuO1xuICAgIGlmIChlbC5jbGllbnRIZWlnaHQgPT09IDApIHJldHVybjsgLy8gaGlkZGVuLCB3YWl0IGZvciB2aXNpYmlsaXR5L3NpemVcbiAgICBlbC5zY3JvbGxUb3AgPSBlbC5zY3JvbGxIZWlnaHQ7XG4gICAgaGFzQW5jaG9yZWRIaXN0b3J5LmN1cnJlbnQgPSB0cnVlO1xuICB9O1xuXG4gIGNvbnN0IHNjcm9sbFRvQm90dG9tID0gKGJlaGF2aW9yOiBTY3JvbGxCZWhhdmlvciA9ICdzbW9vdGgnKSA9PiB7XG4gICAgY29uc3QgY29udGFpbmVyID0gY2hhdENvbnRhaW5lclJlZi5jdXJyZW50O1xuICAgIGNvbnN0IGVsID0gbWVzc2FnZXNFbmRSZWYuY3VycmVudDtcbiAgICBpZiAoIWNvbnRhaW5lciB8fCAhZWwpIHJldHVybjtcbiAgICBjb25zdCBkb1Njcm9sbCA9ICgpID0+IHtcbiAgICAgIGNvbnRhaW5lci5zY3JvbGxUbyh7IHRvcDogY29udGFpbmVyLnNjcm9sbEhlaWdodCwgYmVoYXZpb3IgfSk7XG4gICAgfTtcbiAgICBpZiAoYmVoYXZpb3IgPT09ICdhdXRvJykge1xuICAgICAgZG9TY3JvbGwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGRvU2Nyb2xsKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFzVXNlck1lc3NhZ2VzID0gbWVzc2FnZXMuc29tZShtZXNzYWdlID0+IG1lc3NhZ2Uuc3BlYWtlciA9PT0gJ2N1c3RvbWVyJyk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBhdWRpb1NlcnZpY2UuY3VycmVudCA9IG5ldyBBdWRpb1NlcnZpY2UoeyBiYXNlVXJsLCBhcGlLZXkgfSk7XG4gIH0sIFtiYXNlVXJsLCBhcGlLZXldKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbWVzc2FnZXMubGVuZ3RoKSByZXR1cm47XG4gICAgaWYgKGhhc0FuY2hvcmVkSGlzdG9yeS5jdXJyZW50KSB7XG4gICAgICBzY3JvbGxUb0JvdHRvbSgnc21vb3RoJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFuY2hvckhpc3RvcnkoKTtcbiAgICB9XG4gIH0sIFttZXNzYWdlc10pO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc0FnZW50VHlwaW5nKSByZXR1cm47XG4gICAgc2Nyb2xsVG9Cb3R0b20oJ2F1dG8nKTtcbiAgfSwgW2lzQWdlbnRUeXBpbmcsIGN1cnJlbnRUaGlua2luZ1BhcnRJbmRleCwgY3VycmVudFRoaW5raW5nUGFydHMubGVuZ3RoXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBoYXNBbmNob3JlZEhpc3RvcnkuY3VycmVudCA9IGZhbHNlO1xuICB9LCBbY29udmVyc2F0aW9uSWRdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbWVzc2FnZXMubGVuZ3RoKSByZXR1cm47XG4gICAgY29uc3QgZWwgPSBjaGF0Q29udGFpbmVyUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFlbCkgcmV0dXJuO1xuXG4gICAgLy8gT2JzZXJ2ZSBzaXplL3Zpc2liaWxpdHkgY2hhbmdlcyB0byBhbmNob3IgY2hhdCB2aWV3LlxuICAgIGNvbnN0IHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgIGFuY2hvckhpc3RvcnkoKTtcbiAgICB9KTtcbiAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKGVsKTtcblxuICAgIGFuY2hvckhpc3RvcnkoKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICByZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgfTtcbiAgfSwgW21lc3NhZ2VzXSk7XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCB1cGRhdGVIZWFkZXJIZWlnaHQgPSAoKSA9PiB7XG4gICAgICBzZXRIZWFkZXJIZWlnaHQoaGVhZGVyUmVmLmN1cnJlbnQ/Lm9mZnNldEhlaWdodCB8fCA1Nik7XG4gICAgfTtcbiAgICB1cGRhdGVIZWFkZXJIZWlnaHQoKTtcbiAgICBjb25zdCByZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB1cGRhdGVIZWFkZXJIZWlnaHQoKSk7XG4gICAgaWYgKGhlYWRlclJlZi5jdXJyZW50KSB7XG4gICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKGhlYWRlclJlZi5jdXJyZW50KTtcbiAgICB9XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZUhlYWRlckhlaWdodCk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB1cGRhdGVIZWFkZXJIZWlnaHQpO1xuICAgIH07XG4gIH0sIFtdKTtcblxuICAvLyBTbW9vdGhseSBzaG93L2hpZGUgdGhlIGJhY2tsaWdodCB3aGlsZSB0aGUgYWdlbnQgaXMgdHlwaW5nXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzQWdlbnRUeXBpbmcpIHtcbiAgICAgIHNldFNob3dCYWNrbGlnaHQodHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHQgPSBzZXRUaW1lb3V0KCgpID0+IHNldFNob3dCYWNrbGlnaHQoZmFsc2UpLCA0MjApOyAvLyBhbGxvdyBmYWRlLW91dFxuICAgIHJldHVybiAoKSA9PiBjbGVhclRpbWVvdXQodCk7XG4gIH0sIFtpc0FnZW50VHlwaW5nXSk7XG5cbiAgLy8gU2hvdyBcInRoaW5raW5nXCIgcGhyYXNlcyB3aGlsZSBhZ2VudCBpcyB0eXBpbmdcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzQWdlbnRUeXBpbmcpIHtcbiAgICAgIHNldEN1cnJlbnRUaGlua2luZ1BhcnRzKFtdKTtcbiAgICAgIHNldEN1cnJlbnRUaGlua2luZ1BhcnRJbmRleCgwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBSYW5kb21seSBzZWxlY3QgYSBwaHJhc2UgZnJvbSB0aGUgbGlzdFxuICAgIGNvbnN0IGxpc3QgPSAodGhpbmtpbmdQaHJhc2VzICYmIHRoaW5raW5nUGhyYXNlcy5sZW5ndGggPiAwKSA/IHRoaW5raW5nUGhyYXNlcyA6IERFRkFVTFRfVEhJTktJTkdfTUVTU0FHRVM7XG4gICAgY29uc3QgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBsaXN0Lmxlbmd0aCk7XG4gICAgY29uc3Qgc2VsZWN0ZWRQaHJhc2UgPSBsaXN0W3JhbmRvbUluZGV4XTtcblxuICAgIC8vIFNwbGl0IGJ5IHwgdG8gZ2V0IHBhcnRzLCBvciB1c2UgdGhlIHBocmFzZSBhcyBhIHNpbmdsZSBwYXJ0IGlmIG5vIHwgZm91bmRcbiAgICBjb25zdCBwYXJ0cyA9IHNlbGVjdGVkUGhyYXNlLmluY2x1ZGVzKCd8JykgXG4gICAgICA/IHNlbGVjdGVkUGhyYXNlLnNwbGl0KCd8JykubWFwKHBhcnQgPT4gcGFydC50cmltKCkpLmZpbHRlcihwYXJ0ID0+IHBhcnQubGVuZ3RoID4gMClcbiAgICAgIDogW3NlbGVjdGVkUGhyYXNlLnRyaW0oKV07XG5cbiAgICAvLyBJbml0aWFsaXplIHdpdGggZmlyc3QgcGFydFxuICAgIHNldEN1cnJlbnRUaGlua2luZ1BhcnRzKHBhcnRzKTtcbiAgICBzZXRDdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXgoMCk7XG5cbiAgICAvLyBJZiB0aGVyZSdzIG9ubHkgb25lIHBhcnQsIG5vIG5lZWQgdG8gcHJvZ3Jlc3NcbiAgICBpZiAocGFydHMubGVuZ3RoIDw9IDEpIHJldHVybjtcblxuICAgIC8vIFByb2dyZXNzIHRocm91Z2ggcGFydHMgd2l0aCBkZWxheSwgYnV0IHN0b3AgYXQgdGhlIGxhc3Qgb25lXG4gICAgY29uc3Qgcm90RGVsYXkgPSBNYXRoLm1heCgyNTAsIHRoaW5raW5nRGVsYXlNcyB8fCAxMDAwKTtcbiAgICBjb25zdCB0aW1lb3V0SWRzOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PltdID0gW107XG5cbiAgICAvLyBTZXQgdXAgdGltZW91dHMgZm9yIGVhY2ggcGFydCB0cmFuc2l0aW9uXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHNldEN1cnJlbnRUaGlua2luZ1BhcnRJbmRleChpKTtcbiAgICAgIH0sIHJvdERlbGF5ICogaSk7XG4gICAgICB0aW1lb3V0SWRzLnB1c2godGltZW91dElkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgdGltZW91dElkcy5mb3JFYWNoKGlkID0+IGNsZWFyVGltZW91dChpZCkpO1xuICAgIH07XG4gIH0sIFtpc0FnZW50VHlwaW5nLCB0aGlua2luZ1BocmFzZXMsIHRoaW5raW5nRGVsYXlNc10pO1xuXG4gIGNvbnN0IHN1Ym1pdE1lc3NhZ2UgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKGlucHV0VmFsdWUudHJpbSgpID09PSAnJyAmJiBhdHRhY2htZW50cy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCB0ZXh0VG9TZW5kID0gaW5wdXRWYWx1ZTtcbiAgICBjb25zdCBmaWxlc1RvVXBsb2FkID0gWy4uLmF0dGFjaG1lbnRzXTtcbiAgICBzZXRJbnB1dFZhbHVlKCcnKTtcbiAgICBzZXRBdHRhY2htZW50cyhbXSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHNlbmRNZXNzYWdlKHRleHRUb1NlbmQsIGZpbGVzVG9VcGxvYWQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gYXN5bmMgKGU6IFJlYWN0LkZvcm1FdmVudCkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBhd2FpdCBzdWJtaXRNZXNzYWdlKCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlRmlsZUNoYW5nZSA9IGFzeW5jIChlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgIGlmIChlLnRhcmdldC5maWxlcykge1xuICAgICAgY29uc3QgbmV3RmlsZXMgPSBBcnJheS5mcm9tKGUudGFyZ2V0LmZpbGVzKTtcbiAgICAgIHNldEF0dGFjaG1lbnRzKHByZXYgPT4gWy4uLnByZXYsIC4uLm5ld0ZpbGVzXSk7XG5cbiAgICAgIGNvbnN0IG5ld1VwbG9hZGluZ0ZpbGVzID0gbmV3IFNldCh1cGxvYWRpbmdGaWxlcyk7XG4gICAgICBuZXdGaWxlcy5mb3JFYWNoKGZpbGUgPT4gbmV3VXBsb2FkaW5nRmlsZXMuYWRkKGZpbGUubmFtZSkpO1xuICAgICAgc2V0VXBsb2FkaW5nRmlsZXMobmV3VXBsb2FkaW5nRmlsZXMpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChuZXdGaWxlcy5tYXAoZmlsZSA9PiB1cGxvYWRGaWxlKGZpbGUpKSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBpZ25vcmVcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGNvbnN0IGZpbmFsVXBsb2FkaW5nRmlsZXMgPSBuZXcgU2V0KHVwbG9hZGluZ0ZpbGVzKTtcbiAgICAgICAgbmV3RmlsZXMuZm9yRWFjaChmaWxlID0+IGZpbmFsVXBsb2FkaW5nRmlsZXMuZGVsZXRlKGZpbGUubmFtZSkpO1xuICAgICAgICBzZXRVcGxvYWRpbmdGaWxlcyhmaW5hbFVwbG9hZGluZ0ZpbGVzKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUmVtb3ZlQXR0YWNobWVudCA9IChmaWxlTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgc2V0QXR0YWNobWVudHMocHJldiA9PiBwcmV2LmZpbHRlcihmID0+IGYubmFtZSAhPT0gZmlsZU5hbWUpKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVWb2ljZUVycm9yID0gKGVycm9yOiBFcnJvcikgPT4ge1xuICAgIGlmIChvbkVycm9yKSB7XG4gICAgICBvbkVycm9yKGVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcGxheVJlc3BvbnNlQXVkaW8gPSBhc3luYyAodGV4dDogc3RyaW5nKSA9PiB7XG4gICAgaWYgKCFhdWRpb1NlcnZpY2UuY3VycmVudCB8fCBpc1BsYXlpbmdBdWRpbykgcmV0dXJuO1xuXG4gICAgdHJ5IHtcbiAgICAgIHNldElzUGxheWluZ0F1ZGlvKHRydWUpO1xuICAgICAgY29uc3QgYXVkaW9CbG9iID0gYXdhaXQgYXVkaW9TZXJ2aWNlLmN1cnJlbnQudGV4dFRvU3BlZWNoKHRleHQpO1xuICAgICAgYXdhaXQgYXVkaW9TZXJ2aWNlLmN1cnJlbnQucGxheUF1ZGlvKGF1ZGlvQmxvYik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChvbkVycm9yKSB7XG4gICAgICAgIG9uRXJyb3IoZXJyb3IgYXMgRXJyb3IpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRJc1BsYXlpbmdBdWRpbyhmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVF1ZXJ5Q2xpY2sgPSBhc3luYyAocXVlcnk6IHN0cmluZykgPT4ge1xuICAgIGlmIChpc0xvYWRpbmcpIHJldHVybjtcbiAgICBcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc2VuZE1lc3NhZ2UocXVlcnkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU3RhcnRDb252ZXJzYXRpb24gPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKGlzTG9hZGluZykgcmV0dXJuO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHN0YXJ0Q29udmVyc2F0aW9uKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIGlnbm9yZVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVNZW51Q2xpY2sgPSAoKSA9PiB7XG4gICAgc2V0U2hvd01lbnUocHJldiA9PiAhcHJldik7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUmVzZXRDbGljayA9ICgpID0+IHtcbiAgICBzZXRTaG93TWVudShmYWxzZSk7XG4gICAgc2V0U2hvd1Jlc2V0Q29uZmlybSh0cnVlKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVDb25maXJtUmVzZXQgPSBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgcmVzZXRDb252ZXJzYXRpb24oKTtcbiAgICBzZXRTaG93UmVzZXRDb25maXJtKGZhbHNlKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVDYW5jZWxSZXNldCA9ICgpID0+IHtcbiAgICBzZXRTaG93UmVzZXRDb25maXJtKGZhbHNlKTtcbiAgfTtcblxuICBjb25zdCBwcmltYXJ5Q29sb3IgPSB0aGVtZT8ucHJpbWFyeUNvbG9yIHx8ICcjMjk2MkZGJztcbiAgY29uc3QgYmFja2dyb3VuZENvbG9yID0gdGhlbWU/LmJhY2tncm91bmRDb2xvciB8fCAnI2ZmZmZmZic7XG4gIGNvbnN0IHRleHRDb2xvciA9IHRoZW1lPy50ZXh0Q29sb3IgfHwgJyMwMDAwMDAnO1xuICBjb25zdCBmb250RmFtaWx5ID0gdGhlbWU/LmZvbnRGYW1pbHkgfHwgJ1JvYm90bywgQXJpYWwsIHNhbnMtc2VyaWYnO1xuICBjb25zdCBmb250U2l6ZSA9IHRoZW1lPy5mb250U2l6ZSB8fCAnMTRweCc7XG4gIGNvbnN0IGZvbnRTaXplTnVtYmVyID0gdHlwZW9mIGZvbnRTaXplID09PSAnc3RyaW5nJyA/IHBhcnNlSW50KGZvbnRTaXplLCAxMCkgOiAodHlwZW9mIGZvbnRTaXplID09PSAnbnVtYmVyJyA/IGZvbnRTaXplIDogMTQpO1xuICBjb25zdCBsaW5lSGVpZ2h0UHggPSBNYXRoLnJvdW5kKGZvbnRTaXplTnVtYmVyICogMS41KTtcbiAgY29uc3QgdGV4dEFyZWFNYXhIZWlnaHQgPSBsaW5lSGVpZ2h0UHggKiAzOyAvLyB1cCB0byAzIGxpbmVzXG5cbiAgY29uc3QgcG9zaXRpb24gPSBmbG9hdGluZ0NvbmZpZy5wb3NpdGlvbiB8fCAnYm90dG9tLXJpZ2h0JztcbiAgY29uc3Qgb2Zmc2V0ID0gZmxvYXRpbmdDb25maWcub2Zmc2V0IHx8IHsgeDogMjAsIHk6IDIwIH07XG4gIGNvbnN0IG9mZnNldFggPSBvZmZzZXQueCB8fCAyMDtcbiAgY29uc3Qgb2Zmc2V0WSA9IG9mZnNldC55IHx8IDIwO1xuXG4gIGNvbnN0IGNvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICBtYXhIZWlnaHQ6ICc2MDBweCcsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBtYXhXaWR0aDogJzQwMHB4JyxcbiAgICBib3JkZXI6ICcxcHggc29saWQgI2UwZTBlMCcsXG4gICAgYm9yZGVyUmFkaXVzOiAnMzJweCcsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWU/LnNlY29uZGFyeUNvbG9yIHx8ICcjZjVmNWY1JyxcbiAgICBmb250RmFtaWx5LFxuICAgIGJveFNoYWRvdzogXCIwIDRweCAyMHB4IHJnYmEoMCwgMCwgMCwgMC4yKVwiLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnXG4gIH07XG5cbiAgY29uc3QgaGVhZGVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgcGFkZGluZzogJzE1cHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWU/LnNlY29uZGFyeUNvbG9yIHx8ICcjZjVmNWY1JyxcbiAgICBjb2xvcjogJyMxMTExMTEnLFxuICAgIGZvbnRXZWlnaHQ6ICdib2xkJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgfTtcblxuICBjb25zdCBsb2dvQ29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGdhcDogJzEwcHgnLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIHpJbmRleDogMSxcbiAgfTtcblxuICBjb25zdCBsb2dvU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgd2lkdGg6ICcyOHB4JyxcbiAgICBoZWlnaHQ6ICcyOHB4JyxcbiAgfTtcblxuICBjb25zdCBoZWFkZXJUaXRsZUNvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgfTtcblxuICBjb25zdCBoZWFkZXJUaXRsZVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZvbnRTaXplOiAnMTZweCcsXG4gICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgIG1hcmdpbjogMCxcbiAgICBmb250RmFtaWx5LFxuICB9O1xuXG4gIGNvbnN0IGhlYWRlclN1YnRpdGxlU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZm9udFNpemU6ICcxNHB4JyxcbiAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcbiAgICBtYXJnaW46IDAsXG4gICAgZm9udEZhbWlseSxcbiAgfTtcblxuICBjb25zdCBtZW51QnV0dG9uU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgIGNvbG9yOiAnIzExMTExMScsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgICB3aWR0aDogJzMycHgnLFxuICAgIGhlaWdodDogJzMycHgnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgb3V0bGluZTogJ25vbmUnLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIHpJbmRleDogMSxcbiAgfTtcblxuICBjb25zdCBtZW51UG9wdXBTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0b3A6ICc1MHB4JyxcbiAgICByaWdodDogJzE1cHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogYmFja2dyb3VuZENvbG9yLFxuICAgIGJvcmRlclJhZGl1czogJzhweCcsXG4gICAgYm94U2hhZG93OiAnMCAycHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMSknLFxuICAgIHpJbmRleDogNSxcbiAgICBtaW5XaWR0aDogJzE1MHB4JyxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gIH07XG5cbiAgY29uc3QgbWVudUl0ZW1TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgZ2FwOiAnOHB4JyxcbiAgICBwYWRkaW5nOiAnMTBweCAxNXB4JyxcbiAgICBjb2xvcjogdGV4dENvbG9yLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIGZvbnRTaXplLFxuICAgIGZvbnRGYW1pbHksXG4gICAgYm9yZGVyQm90dG9tOiAnMXB4IHNvbGlkICNmMGYwZjAnLFxuICB9O1xuXG4gIGNvbnN0IGNoYXRDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmbGV4OiAxLFxuICAgIG92ZXJmbG93WTogJ2F1dG8nLFxuICAgIHBhZGRpbmc6ICcxNXB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICB9O1xuXG4gIGNvbnN0IGlucHV0Q29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIHBhZGRpbmc6ICcxMnB4IDE1cHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNmZmZmZmYnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGdhcDogJzhweCcsXG4gIH07XG5cbiAgY29uc3QgaW5wdXRXcmFwcGVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXg6IDEsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZmZmZicsXG4gICAgYm9yZGVyUmFkaXVzOiAnMjRweCcsXG4gICAgYm9yZGVyOiAnMXB4IHNvbGlkICNlNWU3ZWInLFxuICAgIHBhZGRpbmc6ICcwIDEycHgnLFxuICAgIG1pbkhlaWdodDogJzUwcHgnLFxuICAgIGJveFNoYWRvdzogJzAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMDYpJyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJ1xuICB9O1xuXG4gIGNvbnN0IHRleHRBcmVhU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZmxleDogMSxcbiAgICBib3JkZXI6ICdub25lJyxcbiAgICBvdXRsaW5lOiAnbm9uZScsXG4gICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcbiAgICBmb250U2l6ZSxcbiAgICBmb250RmFtaWx5LFxuICAgIHBhZGRpbmc6ICcxMHB4JyxcbiAgICBwYWRkaW5nUmlnaHQ6ICc0NnB4JyxcbiAgICBjb2xvcjogdGV4dENvbG9yLFxuICAgIHJlc2l6ZTogJ25vbmUnLFxuICAgIGxpbmVIZWlnaHQ6IGAke2xpbmVIZWlnaHRQeH1weGAsXG4gICAgbWF4SGVpZ2h0OiBgJHt0ZXh0QXJlYU1heEhlaWdodH1weGAsXG4gICAgb3ZlcmZsb3dZOiAnaGlkZGVuJyxcbiAgfTtcblxuICBjb25zdCBhdHRhY2hCdXR0b25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICBvdXRsaW5lOiAnbm9uZScsXG4gICAgY29sb3I6ICcjNzU3NTc1JyxcbiAgICBwYWRkaW5nOiAwLFxuICB9O1xuXG4gIGNvbnN0IHNlbmRCdXR0b25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHByaW1hcnlDb2xvcixcbiAgICBjb2xvcjogJyNmZmZmZmYnLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIGJvcmRlclJhZGl1czogJzUwJScsXG4gICAgd2lkdGg6ICczNnB4JyxcbiAgICBoZWlnaHQ6ICczNnB4JyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIG91dGxpbmU6ICdub25lJyxcbiAgICBmbGV4U2hyaW5rOiAwLFxuICAgIGJveFNoYWRvdzogJzAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMDgpJyxcbiAgfTtcblxuICBjb25zdCByaWdodEFjdGlvbkNvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHJpZ2h0OiAnNHB4JyxcbiAgICB0b3A6ICc1MCUnLFxuICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTUwJSknLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIH07XG5cbiAgY29uc3QgYXV0b1Jlc2l6ZVRleHRBcmVhID0gKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gdGV4dEFyZWFSZWYuY3VycmVudDtcbiAgICBpZiAoIWVsKSByZXR1cm47XG4gICAgZWwuc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nO1xuICAgIGNvbnN0IG5ld0hlaWdodCA9IE1hdGgubWluKGVsLnNjcm9sbEhlaWdodCwgdGV4dEFyZWFNYXhIZWlnaHQpO1xuICAgIGVsLnN0eWxlLmhlaWdodCA9IGAke25ld0hlaWdodH1weGA7XG4gICAgZWwuc3R5bGUub3ZlcmZsb3dZID0gZWwuc2Nyb2xsSGVpZ2h0ID4gdGV4dEFyZWFNYXhIZWlnaHQgPyAnYXV0bycgOiAnaGlkZGVuJztcbiAgfTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGF1dG9SZXNpemVUZXh0QXJlYSgpO1xuICB9LCBbaW5wdXRWYWx1ZSwgZm9udFNpemVOdW1iZXJdKTtcblxuICBjb25zdCBwb3NzaWJsZVF1ZXJpZXNDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgZ2FwOiAnOHB4JyxcbiAgICBwYWRkaW5nOiAnMCcsXG4gICAgcGFkZGluZ0xlZnQ6ICcyOHB4JyxcbiAgICBwYWRkaW5nUmlnaHQ6ICcyOHB4JyxcbiAgICBtYXJnaW5Ub3A6ICc1cHgnLFxuICAgIG1hcmdpbkJvdHRvbTogJzE1cHgnLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgZm9udEZhbWlseSxcbiAgfTtcblxuICBjb25zdCBxdWVyeUJ1dHRvblN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHBhZGRpbmc6ICcxMnB4IDE1cHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWU/LnNlY29uZGFyeUNvbG9yIHx8ICcjZjVmNWY1JyxcbiAgICBjb2xvcjogdGV4dENvbG9yLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIGJvcmRlclJhZGl1czogJzZweCcsXG4gICAgZm9udFNpemUsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgdGV4dEFsaWduOiAnbGVmdCcsXG4gICAgZm9udFdlaWdodDogJ25vcm1hbCcsXG4gICAgYm94U2hhZG93OiAnbm9uZScsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBtYXhXaWR0aDogJzI0MHB4JyxcbiAgICBmb250RmFtaWx5LFxuICB9O1xuXG4gIGNvbnN0IGNvbmZpcm1PdmVybGF5U3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogc2hvd1Jlc2V0Q29uZmlybSA/ICdmbGV4JyA6ICdub25lJyxcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0b3A6IDAsXG4gICAgbGVmdDogMCxcbiAgICByaWdodDogMCxcbiAgICBib3R0b206IDAsXG4gICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLCAwLCAwLCAwLjUpJyxcbiAgICB6SW5kZXg6IDEwLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgfTtcblxuICBjb25zdCBjb25maXJtRGlhbG9nU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgcGFkZGluZzogJzIwcHgnLFxuICAgIGJvcmRlclJhZGl1czogJzhweCcsXG4gICAgbWF4V2lkdGg6ICczMDBweCcsXG4gICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICBmb250RmFtaWx5LFxuICAgIGNvbG9yOiB0ZXh0Q29sb3IsXG4gIH07XG5cbiAgY29uc3QgY29uZmlybUJ1dHRvbnNTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIG1hcmdpblRvcDogJzE1cHgnLFxuICAgIGdhcDogJzEwcHgnLFxuICB9O1xuXG4gIGNvbnN0IGNvbmZpcm1CdXR0b25TdHlsZSA9IChpc0NvbmZpcm06IGJvb2xlYW4pOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0+ICh7XG4gICAgcGFkZGluZzogJzhweCAxNnB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGlzQ29uZmlybSA/ICcjRjQ0MzM2JyA6ICcjZTBlMGUwJyxcbiAgICBjb2xvcjogaXNDb25maXJtID8gJyNmZmZmZmYnIDogdGV4dENvbG9yLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIGJvcmRlclJhZGl1czogJzRweCcsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgZm9udEZhbWlseSxcbiAgICBmb250U2l6ZSxcbiAgfSk7XG5cbiAgY29uc3QgY29udGVudENhcmRTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmbGV4OiAxLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgYm9yZGVyVG9wTGVmdFJhZGl1czogMjQsXG4gICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6IDI0LFxuICAgIGJveFNoYWRvdzogJzAgLTJweCA2cHggcmdiYSgwLDAsMCwwLjAzKScsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgekluZGV4OiAyLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJ1xuICB9O1xuXG4gIC8vIEZsb2F0aW5nIG1vZGUgc3R5bGVzXG4gIGNvbnN0IGdldFBvc2l0aW9uU3R5bGVzID0gKCk6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPT4ge1xuICAgIGNvbnN0IGJhc2U6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgIHpJbmRleDogMTAwMCxcbiAgICB9O1xuXG4gICAgc3dpdGNoIChwb3NpdGlvbikge1xuICAgICAgY2FzZSAnYm90dG9tLXJpZ2h0JzpcbiAgICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgYm90dG9tOiBvZmZzZXRZLCByaWdodDogb2Zmc2V0WCB9O1xuICAgICAgY2FzZSAnYm90dG9tLWxlZnQnOlxuICAgICAgICByZXR1cm4geyAuLi5iYXNlLCBib3R0b206IG9mZnNldFksIGxlZnQ6IG9mZnNldFggfTtcbiAgICAgIGNhc2UgJ3RvcC1yaWdodCc6XG4gICAgICAgIHJldHVybiB7IC4uLmJhc2UsIHRvcDogb2Zmc2V0WSwgcmlnaHQ6IG9mZnNldFggfTtcbiAgICAgIGNhc2UgJ3RvcC1sZWZ0JzpcbiAgICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgdG9wOiBvZmZzZXRZLCBsZWZ0OiBvZmZzZXRYIH07XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4geyAuLi5iYXNlLCBib3R0b206IG9mZnNldFksIHJpZ2h0OiBvZmZzZXRYIH07XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGdldENoYXRQb3NpdGlvblN0eWxlcyA9ICgpOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0+IHtcbiAgICBjb25zdCBiYXNlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICBib3JkZXJSYWRpdXM6ICczMnB4JyxcbiAgICAgIHpJbmRleDogOTk5LFxuICAgIH07XG5cbiAgICBzd2l0Y2ggKHBvc2l0aW9uKSB7XG4gICAgICBjYXNlICdib3R0b20tcmlnaHQnOlxuICAgICAgICByZXR1cm4geyBcbiAgICAgICAgICAuLi5iYXNlLCBcbiAgICAgICAgICBib3R0b206IG9mZnNldFkgKyA4MCxcbiAgICAgICAgICByaWdodDogb2Zmc2V0WCBcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgJ2JvdHRvbS1sZWZ0JzpcbiAgICAgICAgcmV0dXJuIHsgXG4gICAgICAgICAgLi4uYmFzZSwgXG4gICAgICAgICAgYm90dG9tOiBvZmZzZXRZICsgODAsXG4gICAgICAgICAgbGVmdDogb2Zmc2V0WCBcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgJ3RvcC1yaWdodCc6XG4gICAgICAgIHJldHVybiB7IFxuICAgICAgICAgIC4uLmJhc2UsIFxuICAgICAgICAgIHRvcDogb2Zmc2V0WSArIDgwLFxuICAgICAgICAgIHJpZ2h0OiBvZmZzZXRYIFxuICAgICAgICB9O1xuICAgICAgY2FzZSAndG9wLWxlZnQnOlxuICAgICAgICByZXR1cm4geyBcbiAgICAgICAgICAuLi5iYXNlLCBcbiAgICAgICAgICB0b3A6IG9mZnNldFkgKyA4MCxcbiAgICAgICAgICBsZWZ0OiBvZmZzZXRYIFxuICAgICAgICB9O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHsgXG4gICAgICAgICAgLi4uYmFzZSwgXG4gICAgICAgICAgYm90dG9tOiBvZmZzZXRZICsgODAsXG4gICAgICAgICAgcmlnaHQ6IG9mZnNldFggXG4gICAgICAgIH07XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGdldFJlc3BvbnNpdmVEaW1lbnNpb25zID0gKCkgPT4ge1xuICAgIGNvbnN0IHNjcmVlbldpZHRoID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cuaW5uZXJXaWR0aCA6IDEwMjQ7XG4gICAgaWYgKHNjcmVlbldpZHRoIDw9IDQ4MCkge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6ICdjYWxjKDEwMHZ3IC0gNDBweCknLCBoZWlnaHQ6ICc0NTBweCcgfTtcbiAgICB9IGVsc2UgaWYgKHNjcmVlbldpZHRoIDw9IDc2OCkge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6ICczNTBweCcsIGhlaWdodDogJzUwMHB4JyB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4geyB3aWR0aDogJzM4MHB4JywgaGVpZ2h0OiAnNjAwcHgnIH07XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGZsb2F0aW5nQ29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgLi4uZ2V0Q2hhdFBvc2l0aW9uU3R5bGVzKCksXG4gICAgLi4uZ2V0UmVzcG9uc2l2ZURpbWVuc2lvbnMoKSxcbiAgfTtcblxuICBjb25zdCByZW5kZXJDaGF0Q29tcG9uZW50ID0gKCkgPT4gKFxuICAgIDxkaXYgc3R5bGU9e2NvbnRhaW5lclN0eWxlfSBkYXRhLWdlbmFzc2lzdC1yb290PVwidHJ1ZVwiPlxuICAgICAgPHN0eWxlPntgXG4gICAgICAgIEBrZXlmcmFtZXMgYmxpbmsgeyAwJSB7IG9wYWNpdHk6IDAuMjsgfSAyMCUgeyBvcGFjaXR5OiAxOyB9IDEwMCUgeyBvcGFjaXR5OiAwLjI7IH0gfVxuICAgICAgICAvKiBIaWRlIHNjcm9sbGJhcnMgZm9yIHRoZSBleHBhbmRpbmcgdGV4dGFyZWEgYnV0IGtlZXAgc2Nyb2xsaW5nICovXG4gICAgICAgIC5nYS10ZXh0YXJlYS1ub3NiIHsgc2Nyb2xsYmFyLXdpZHRoOiBub25lOyAtbXMtb3ZlcmZsb3ctc3R5bGU6IG5vbmU7IH1cbiAgICAgICAgLmdhLXRleHRhcmVhLW5vc2I6Oi13ZWJraXQtc2Nyb2xsYmFyIHsgd2lkdGg6IDA7IGhlaWdodDogMDsgfVxuICAgICAgICAvKiBCYWNrbGlnaHQgc3dlZXAgdW5kZXIgY29udGVudCBlZGdlIChHUFUtZnJpZW5kbHkpLlxuICAgICAgICAgICBXaWRlciB0cmF2ZWwgdG8gZnVsbHkgcmVhY2ggYm90aCBjb3JuZXJzLiAqL1xuICAgICAgICBAa2V5ZnJhbWVzIGdhLWJhY2tsaWdodC1zd2VlcDIgeyAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMzUlKTsgfSAxMDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwNSUpOyB9IH1cbiAgICAgICAgQGtleWZyYW1lcyBnYS1iYWNrbGlnaHQtcHVsc2UgeyAwJSwxMDAlIHsgb3BhY2l0eTogMC43OyB9IDUwJSB7IG9wYWNpdHk6IDE7IH0gfVxuICAgICAgICBAa2V5ZnJhbWVzIGdhLXRoaW5rLWNoYW5nZSB7IDAlIHsgb3BhY2l0eTogMDsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDRweCk7IH0gMTAwJSB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsgfSB9XG4gICAgICBgfTwvc3R5bGU+XG4gICAgICA8ZGl2IHN0eWxlPXtoZWFkZXJTdHlsZX0gcmVmPXtoZWFkZXJSZWZ9PlxuICAgICAgICA8ZGl2IHN0eWxlPXtsb2dvQ29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgIDxpbWcgc3JjPXtjaGF0TG9nb30gYWx0PVwiTG9nb1wiIHN0eWxlPXtsb2dvU3R5bGV9IC8+XG4gICAgICAgICAgPGRpdiBzdHlsZT17aGVhZGVyVGl0bGVDb250YWluZXJTdHlsZX0+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXtoZWFkZXJUaXRsZVN0eWxlfT57aGVhZGVyVGl0bGV9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXtoZWFkZXJTdWJ0aXRsZVN0eWxlfT5TdXBwb3J0PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgc3R5bGU9e21lbnVCdXR0b25TdHlsZX1cbiAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVNZW51Q2xpY2t9XG4gICAgICAgICAgdGl0bGU9XCJNZW51XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxNb3JlVmVydGljYWwgc2l6ZT17MjR9IGNvbG9yPVwiIzExMTExMVwiIC8+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICA8L2Rpdj5cbiAgICAgIHtzaG93QmFja2xpZ2h0ICYmIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICByaWdodDogMCxcbiAgICAgICAgICAgIHRvcDogTWF0aC5tYXgoMCwgaGVhZGVySGVpZ2h0IC0gMTQpLFxuICAgICAgICAgICAgaGVpZ2h0OiA0MixcbiAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICAgICAgICAgIHpJbmRleDogMSxcbiAgICAgICAgICAgIG9wYWNpdHk6IGlzQWdlbnRUeXBpbmcgPyAxIDogMCxcbiAgICAgICAgICAgIHRyYW5zaXRpb246ICdvcGFjaXR5IDQyMG1zIGVhc2UtaW4tb3V0JyxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICAgIHRvcDogNixcbiAgICAgICAgICAgICAgaGVpZ2h0OiAzMixcbiAgICAgICAgICAgICAgd2lkdGg6ICc3OCUnLFxuICAgICAgICAgICAgICBmaWx0ZXI6ICdibHVyKDIycHgpJyxcbiAgICAgICAgICAgICAgYmFja2dyb3VuZDpcbiAgICAgICAgICAgICAgICAnbGluZWFyLWdyYWRpZW50KDkwZGVnLCByZ2JhKDk5LDEwMiwyNDEsMC4wKSAwJSwgcmdiYSg5OSwxMDIsMjQxLDAuMzUpIDE1JSwgcmdiYSg5OSwxMDIsMjQxLDAuNTUpIDUwJSwgcmdiYSg5OSwxMDIsMjQxLDAuMzUpIDg1JSwgcmdiYSg5OSwxMDIsMjQxLDAuMCkgMTAwJSknLFxuICAgICAgICAgICAgICB3aWxsQ2hhbmdlOiAndHJhbnNmb3JtLCBvcGFjaXR5JyxcbiAgICAgICAgICAgICAgYW5pbWF0aW9uOiAnZ2EtYmFja2xpZ2h0LXN3ZWVwMiAxLjJzIGN1YmljLWJlemllcigwLjQsMC4wLDAuMiwxKSBpbmZpbml0ZSBhbHRlcm5hdGUsIGdhLWJhY2tsaWdodC1wdWxzZSAyLjRzIGVhc2UtaW4tb3V0IGluZmluaXRlJyxcbiAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAxOCxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuXG4gICAgICB7c2hvd01lbnUgJiYgKFxuICAgICAgICA8ZGl2IHJlZj17bWVudVJlZn0gc3R5bGU9e21lbnVQb3B1cFN0eWxlfT5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXttZW51SXRlbVN0eWxlfSBvbkNsaWNrPXtoYW5kbGVSZXNldENsaWNrfT5cbiAgICAgICAgICAgIDxSZWZyZXNoQ3cgc2l6ZT17MTZ9IC8+XG4gICAgICAgICAgICBSZXNldCBjb252ZXJzYXRpb25cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAgXG4gICAgICA8ZGl2IHN0eWxlPXtjb250ZW50Q2FyZFN0eWxlfT5cbiAgICAgICAgPGRpdiBzdHlsZT17Y2hhdENvbnRhaW5lclN0eWxlfSByZWY9e2NoYXRDb250YWluZXJSZWZ9PlxuICAgICAgICAgIHsoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfSkoKX1cbiAgICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICAgIC8vIHNob3cgd2VsY29tZSBjYXJkXG4gICAgICAgICAgICBjb25zdCBzaG91bGRTaG93U3ludGhldGljV2VsY29tZSA9XG4gICAgICAgICAgICAgICFoYXNVc2VyTWVzc2FnZXMgJiZcbiAgICAgICAgICAgICAgKG1lc3NhZ2VzLmxlbmd0aCA9PT0gMCB8fCBtZXNzYWdlc1swXS5zcGVha2VyICE9PSAnYWdlbnQnKSAmJlxuICAgICAgICAgICAgICAoQm9vbGVhbih3ZWxjb21lVGl0bGUpIHx8IEJvb2xlYW4od2VsY29tZUltYWdlVXJsKSB8fCBCb29sZWFuKHdlbGNvbWVNZXNzYWdlKSk7XG5cbiAgICAgICAgICAgIGlmICghc2hvdWxkU2hvd1N5bnRoZXRpY1dlbGNvbWUpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICBjb25zdCBub3cgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKTtcbiAgICAgICAgICAgIGNvbnN0IHN5bnRoZXRpY1dlbGNvbWU6IENoYXRNZXNzYWdlID0ge1xuICAgICAgICAgICAgICBjcmVhdGVfdGltZTogbm93LFxuICAgICAgICAgICAgICBzdGFydF90aW1lOiAwLFxuICAgICAgICAgICAgICBlbmRfdGltZTogMC4wMSxcbiAgICAgICAgICAgICAgc3BlYWtlcjogJ2FnZW50JyxcbiAgICAgICAgICAgICAgdGV4dDogd2VsY29tZU1lc3NhZ2UgfHwgJycsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8Q2hhdE1lc3NhZ2VDb21wb25lbnRcbiAgICAgICAgICAgICAgICBrZXk9XCJfX3N5bnRoZXRpY193ZWxjb21lX19cIlxuICAgICAgICAgICAgICAgIG1lc3NhZ2U9e3N5bnRoZXRpY1dlbGNvbWV9XG4gICAgICAgICAgICAgICAgdGhlbWU9e3RoZW1lfVxuICAgICAgICAgICAgICAgIGlzRmlyc3RNZXNzYWdlPXt0cnVlfVxuICAgICAgICAgICAgICAgIGlzTmV4dFNhbWVTcGVha2VyPXtmYWxzZX1cbiAgICAgICAgICAgICAgICBpc1ByZXZTYW1lU3BlYWtlcj17ZmFsc2V9XG4gICAgICAgICAgICAgICAgZW5hYmxlVHlwZXdyaXRlcj17ZmFsc2V9XG4gICAgICAgICAgICAgICAgd2VsY29tZUltYWdlVXJsPXt3ZWxjb21lSW1hZ2VVcmwgfHwgdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgIHdlbGNvbWVUaXRsZT17d2VsY29tZVRpdGxlIHx8IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICBwb3NzaWJsZVF1ZXJpZXM9e3Bvc3NpYmxlUXVlcmllc31cbiAgICAgICAgICAgICAgICBvblF1aWNrUXVlcnk9e2hhbmRsZVF1ZXJ5Q2xpY2t9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pKCl9XG4gICAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdEFnZW50SW5kZXggPSBtZXNzYWdlcy5maW5kSW5kZXgobSA9PiBtLnNwZWFrZXIgPT09ICdhZ2VudCcpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2VzLm1hcCgobWVzc2FnZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaXNOZXh0U2FtZVNwZWFrZXIgPSBpbmRleCA8IG1lc3NhZ2VzLmxlbmd0aCAtIDEgJiYgbWVzc2FnZXNbaW5kZXggKyAxXS5zcGVha2VyID09PSBtZXNzYWdlLnNwZWFrZXI7XG4gICAgICAgICAgICAgIGNvbnN0IGlzUHJldlNhbWVTcGVha2VyID0gaW5kZXggPiAwICYmIG1lc3NhZ2VzW2luZGV4IC0gMV0uc3BlYWtlciA9PT0gbWVzc2FnZS5zcGVha2VyO1xuICAgICAgICAgICAgICBjb25zdCBpc0ZpcnN0QWdlbnRNZXNzYWdlID0gaW5kZXggPT09IGZpcnN0QWdlbnRJbmRleCAmJiBtZXNzYWdlLnNwZWFrZXIgPT09ICdhZ2VudCcgJiYgIWhhc1VzZXJNZXNzYWdlcztcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8Q2hhdE1lc3NhZ2VDb21wb25lbnQgXG4gICAgICAgICAgICAgICAgICBrZXk9e2luZGV4fSBcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9e21lc3NhZ2V9IFxuICAgICAgICAgICAgICAgICAgdGhlbWU9e3RoZW1lfVxuICAgICAgICAgICAgICAgICAgb25QbGF5QXVkaW89e21lc3NhZ2Uuc3BlYWtlciA9PT0gJ2FnZW50JyA/IHBsYXlSZXNwb25zZUF1ZGlvIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgaXNQbGF5aW5nQXVkaW89e2lzUGxheWluZ0F1ZGlvfVxuICAgICAgICAgICAgICAgICAgaXNGaXJzdE1lc3NhZ2U9e2lzRmlyc3RBZ2VudE1lc3NhZ2V9XG4gICAgICAgICAgICAgICAgICBpc05leHRTYW1lU3BlYWtlcj17aXNOZXh0U2FtZVNwZWFrZXJ9XG4gICAgICAgICAgICAgICAgICBpc1ByZXZTYW1lU3BlYWtlcj17aXNQcmV2U2FtZVNwZWFrZXJ9XG4gICAgICAgICAgICAgICAgICBvbkZlZWRiYWNrPXsobWVzc2FnZUlkLCB2YWx1ZSkgPT4gYWRkRmVlZGJhY2sobWVzc2FnZUlkLCB2YWx1ZSl9XG4gICAgICAgICAgICAgICAgICBlbmFibGVUeXBld3JpdGVyPXtpbmRleCA9PT0gbWVzc2FnZXMubGVuZ3RoIC0gMSAmJiBtZXNzYWdlLnNwZWFrZXIgPT09ICdhZ2VudCd9XG4gICAgICAgICAgICAgICAgICB3ZWxjb21lSW1hZ2VVcmw9e2lzRmlyc3RBZ2VudE1lc3NhZ2UgPyAod2VsY29tZUltYWdlVXJsIHx8IHVuZGVmaW5lZCkgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICB3ZWxjb21lVGl0bGU9e2lzRmlyc3RBZ2VudE1lc3NhZ2UgPyAod2VsY29tZVRpdGxlIHx8IHVuZGVmaW5lZCkgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICBwb3NzaWJsZVF1ZXJpZXM9e2lzRmlyc3RBZ2VudE1lc3NhZ2UgPyBwb3NzaWJsZVF1ZXJpZXMgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICBvblF1aWNrUXVlcnk9e2hhbmRsZVF1ZXJ5Q2xpY2t9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pKCl9XG4gICAgICAgICAge2lzQWdlbnRUeXBpbmcgJiYgY3VycmVudFRoaW5raW5nUGFydHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1heFdpZHRoOiAnODAlJyB9fT5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogJzE0cHgnLCBjb2xvcjogJyMwMDAwMDAnLCBmb250V2VpZ2h0OiA2MDAsIG1hcmdpbkJvdHRvbTogNCB9fT5BZ2VudDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAwLFxuICAgICAgICAgICAgICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGtleT17YCR7Y3VycmVudFRoaW5raW5nUGFydEluZGV4fS0ke2N1cnJlbnRUaGlua2luZ1BhcnRzLmpvaW4oJ3wnKX1gfVxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uOiAnZ2EtdGhpbmstY2hhbmdlIDIyMG1zIGVhc2UnLFxuICAgICAgICAgICAgICAgICAgICB3aWxsQ2hhbmdlOiAndHJhbnNmb3JtLCBvcGFjaXR5JyxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjNmI3MjgwJyxcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcxM3B4JyxcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2N1cnJlbnRUaGlua2luZ1BhcnRzW2N1cnJlbnRUaGlua2luZ1BhcnRJbmRleF0gfHwgY3VycmVudFRoaW5raW5nUGFydHNbY3VycmVudFRoaW5raW5nUGFydHMubGVuZ3RoIC0gMV19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8ZGl2IHJlZj17bWVzc2FnZXNFbmRSZWZ9IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBzaG93aW5nU3ludGhldGljV2VsY29tZSA9XG4gICAgICAgICAgICAhaGFzVXNlck1lc3NhZ2VzICYmXG4gICAgICAgICAgICAobWVzc2FnZXMubGVuZ3RoID09PSAwIHx8IG1lc3NhZ2VzWzBdLnNwZWFrZXIgIT09ICdhZ2VudCcpICYmXG4gICAgICAgICAgICAoQm9vbGVhbih3ZWxjb21lVGl0bGUpIHx8IEJvb2xlYW4od2VsY29tZUltYWdlVXJsKSB8fCBCb29sZWFuKHdlbGNvbWVNZXNzYWdlKSk7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHBvc3NpYmxlUXVlcmllcy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAhaGFzVXNlck1lc3NhZ2VzICYmXG4gICAgICAgICAgICAobWVzc2FnZXMubGVuZ3RoID09PSAwIHx8IG1lc3NhZ2VzWzBdLnNwZWFrZXIgIT09ICdhZ2VudCcpICYmXG4gICAgICAgICAgICAhc2hvd2luZ1N5bnRoZXRpY1dlbGNvbWVcbiAgICAgICAgICApO1xuICAgICAgICB9KSgpICYmIChcbiAgICAgICAgICA8ZGl2IHN0eWxlPXtwb3NzaWJsZVF1ZXJpZXNDb250YWluZXJTdHlsZX0+XG4gICAgICAgICAgICB7cG9zc2libGVRdWVyaWVzLm1hcCgocXVlcnksIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgICBzdHlsZT17cXVlcnlCdXR0b25TdHlsZX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVRdWVyeUNsaWNrKHF1ZXJ5KX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNMb2FkaW5nfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3F1ZXJ5fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgICBcbiAgICAgICAge2F0dGFjaG1lbnRzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgcGFkZGluZzogJzAgMTZweCcsIG1hcmdpbkJvdHRvbTogJzhweCcsIGRpc3BsYXk6ICdmbGV4JywgZ2FwOiAnOHB4JywgZmxleFdyYXA6ICd3cmFwJyB9fT5cbiAgICAgICAgICAgIHthdHRhY2htZW50cy5tYXAoKGZpbGUsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgIDxBdHRhY2htZW50UHJldmlldyBcbiAgICAgICAgICAgICAgICBrZXk9e2luZGV4fSBcbiAgICAgICAgICAgICAgICBmaWxlPXtmaWxlfSBcbiAgICAgICAgICAgICAgICBvblJlbW92ZT17KCkgPT4gaGFuZGxlUmVtb3ZlQXR0YWNobWVudChmaWxlLm5hbWUpfVxuICAgICAgICAgICAgICAgIHVwbG9hZGluZz17dXBsb2FkaW5nRmlsZXMuaGFzKGZpbGUubmFtZSl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cblxuICAgICAgICB7IWNvbnZlcnNhdGlvbklkIHx8IGlzRmluYWxpemVkID8gKFxuICAgICAgICAgIDxkaXYgc3R5bGU9e2lucHV0Q29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBzdHlsZT17ey4uLnNlbmRCdXR0b25TdHlsZSwgd2lkdGg6ICcxMDAlJywgaGVpZ2h0OiAnNDhweCcsIGJvcmRlclJhZGl1czogJzE2cHgnfX1cbiAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU3RhcnRDb252ZXJzYXRpb259XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtpc0xvYWRpbmd9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFN0YXJ0IENvbnZlcnNhdGlvblxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPGZvcm0gb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0gc3R5bGU9e2lucHV0Q29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17aW5wdXRXcmFwcGVyU3R5bGV9PlxuICAgICAgICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBcbiAgICAgICAgICAgICAgICBzdHlsZT17YXR0YWNoQnV0dG9uU3R5bGV9XG4gICAgICAgICAgICAgICAgdGl0bGU9XCJBdHRhY2hcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGZpbGVJbnB1dFJlZi5jdXJyZW50Py5jbGljaygpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFBhcGVyY2xpcCBzaXplPXsyMn0gY29sb3I9XCIjNzU3NTc1XCIgLz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgICAgICAgIHJlZj17ZmlsZUlucHV0UmVmfVxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6ICdub25lJyB9fVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVGaWxlQ2hhbmdlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICByZWY9e3RleHRBcmVhUmVmfVxuICAgICAgICAgICAgICAgIHN0eWxlPXt0ZXh0QXJlYVN0eWxlfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImdhLXRleHRhcmVhLW5vc2JcIlxuICAgICAgICAgICAgICAgIHZhbHVlPXtpbnB1dFZhbHVlfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0SW5wdXRWYWx1ZShlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgb25LZXlEb3duPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInICYmICFlLnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChpbnB1dFZhbHVlLnRyaW0oKSAhPT0gJycgfHwgYXR0YWNobWVudHMubGVuZ3RoID4gMCkgJiYgY29ubmVjdGlvblN0YXRlID09PSAnY29ubmVjdGVkJykge1xuICAgICAgICAgICAgICAgICAgICAgIHN1Ym1pdE1lc3NhZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXshY29udmVyc2F0aW9uSWQgfHwgaXNGaW5hbGl6ZWR9XG4gICAgICAgICAgICAgICAgcm93cz17MX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17cmlnaHRBY3Rpb25Db250YWluZXJTdHlsZX0+XG4gICAgICAgICAgICAgICAge2lucHV0VmFsdWUudHJpbSgpID09PSAnJyAmJiBhdHRhY2htZW50cy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICAgICAgICA8Vm9pY2VJbnB1dFxuICAgICAgICAgICAgICAgICAgICBvblRyYW5zY3JpcHRpb249eyh0ZXh0OiBzdHJpbmcpID0+IHNldElucHV0VmFsdWUodGV4dCl9XG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3I9e2hhbmRsZVZvaWNlRXJyb3J9XG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmw9e2Jhc2VVcmx9XG4gICAgICAgICAgICAgICAgICAgIGFwaUtleT17YXBpS2V5fVxuICAgICAgICAgICAgICAgICAgICB0aGVtZT17dGhlbWV9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCIgXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXtzZW5kQnV0dG9uU3R5bGV9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXsoaW5wdXRWYWx1ZS50cmltKCkgPT09ICcnICYmIGF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gMCkgfHwgY29ubmVjdGlvblN0YXRlICE9PSAnY29ubmVjdGVkJ31cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFNlbmQgc2l6ZT17MTh9IGNvbG9yPVwiI2ZmZmZmZlwiIC8+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IHN0eWxlPXtjb25maXJtT3ZlcmxheVN0eWxlfT5cbiAgICAgICAgPGRpdiBzdHlsZT17Y29uZmlybURpYWxvZ1N0eWxlfT5cbiAgICAgICAgICA8aDMgc3R5bGU9e3tmb250RmFtaWx5LCBtYXJnaW5Ub3A6IDB9fT5SZXNldCBDb252ZXJzYXRpb248L2gzPlxuICAgICAgICAgIDxwIHN0eWxlPXt7Zm9udEZhbWlseSwgZm9udFNpemV9fT5UaGlzIHdpbGwgY2xlYXIgdGhlIGN1cnJlbnQgY29udmVyc2F0aW9uIGhpc3RvcnkgYW5kIHN0YXJ0IGEgbmV3IGNvbnZlcnNhdGlvbi4gQXJlIHlvdSBzdXJlPzwvcD5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXtjb25maXJtQnV0dG9uc1N0eWxlfT5cbiAgICAgICAgICAgIDxidXR0b24gc3R5bGU9e3suLi5jb25maXJtQnV0dG9uU3R5bGUoZmFsc2UpLCBjb2xvcjogdGV4dENvbG9yfX0gb25DbGljaz17aGFuZGxlQ2FuY2VsUmVzZXR9PkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBzdHlsZT17Y29uZmlybUJ1dHRvblN0eWxlKHRydWUpfSBvbkNsaWNrPXtoYW5kbGVDb25maXJtUmVzZXR9PlJlc2V0PC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG5cbiAgaWYgKG1vZGUgPT09ICdmbG9hdGluZycpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPENoYXRCdWJibGVcbiAgICAgICAgICBzaG93Q2hhdD17aXNGbG9hdGluZ09wZW59XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0SXNGbG9hdGluZ09wZW4ocHJldiA9PiAhcHJldil9XG4gICAgICAgICAgcHJpbWFyeUNvbG9yPXtwcmltYXJ5Q29sb3J9XG4gICAgICAgICAgc3R5bGU9e2dldFBvc2l0aW9uU3R5bGVzKCl9XG4gICAgICAgIC8+XG4gICAgICAgIFxuICAgICAgICB7aXNGbG9hdGluZ09wZW4gJiYgKFxuICAgICAgICAgIDxkaXYgc3R5bGU9e2Zsb2F0aW5nQ29udGFpbmVyU3R5bGV9IGRhdGEtZ2VuYXNzaXN0LWNvbnRhaW5lcj1cImZsb2F0aW5nXCI+XG4gICAgICAgICAgICB7cmVuZGVyQ2hhdENvbXBvbmVudCgpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiByZW5kZXJDaGF0Q29tcG9uZW50KCk7XG59O1xuIl19
|