@projectcor/maia-components 2.11.56-4 → 2.11.56-6
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.
|
@@ -65,11 +65,23 @@ export var mapHitlToolNameToStreamActivity = function mapHitlToolNameToStreamAct
|
|
|
65
65
|
var normalized = normalizeHitlToolName(toolName);
|
|
66
66
|
var key = HITL_TOOL_ACTIVITY_KEYS[normalized];
|
|
67
67
|
if (key) {
|
|
68
|
+
var message = t(key);
|
|
69
|
+
console.info('[AAI:mapHitlTool] mapped', {
|
|
70
|
+
toolName: toolName,
|
|
71
|
+
normalized: normalized,
|
|
72
|
+
key: key,
|
|
73
|
+
message: message
|
|
74
|
+
});
|
|
68
75
|
return {
|
|
69
76
|
phase: 'action',
|
|
70
|
-
message:
|
|
77
|
+
message: message
|
|
71
78
|
};
|
|
72
79
|
}
|
|
80
|
+
console.info('[AAI:mapHitlTool] sin mapeo', {
|
|
81
|
+
toolName: toolName,
|
|
82
|
+
normalized: normalized,
|
|
83
|
+
useResumingFallback: options === null || options === void 0 ? void 0 : options.useResumingFallback
|
|
84
|
+
});
|
|
73
85
|
if (options !== null && options !== void 0 && options.useResumingFallback) {
|
|
74
86
|
return {
|
|
75
87
|
phase: 'action',
|
|
@@ -116,6 +128,7 @@ export var mapNodeMessageToStreamActivity = function mapNodeMessageToStreamActiv
|
|
|
116
128
|
}
|
|
117
129
|
var trimmedMessage = nodeMessage.trim();
|
|
118
130
|
if (trimmedMessage && !isGenericResumeNodeMessage(trimmedMessage) && !looksLikeRawToolName(trimmedMessage)) {
|
|
131
|
+
console.info('[AAI:mapNodeMsg] usando texto crudo del backend (no es tool name ni genérico):', trimmedMessage);
|
|
119
132
|
return {
|
|
120
133
|
phase: 'action',
|
|
121
134
|
message: trimmedMessage
|
|
@@ -161,16 +174,38 @@ export var resolveHitlNodeStreamActivity = function resolveHitlNodeStreamActivit
|
|
|
161
174
|
var pendingForThread = resolvePendingActionsForThread(context, threadId);
|
|
162
175
|
var detectedTools = detectToolsFromPendingActions(pendingForThread);
|
|
163
176
|
var trimmedNodeMessage = nodeMessage.trim();
|
|
164
|
-
var
|
|
177
|
+
var isRaw = looksLikeRawToolName(trimmedNodeMessage);
|
|
178
|
+
var isGeneric = isGenericResumeNodeMessage(trimmedNodeMessage);
|
|
179
|
+
// El backend envía frases como "Ejecutando assign_task_label..." que contienen el nombre
|
|
180
|
+
// crudo de la tool — no son mensajes legibles. Si el mensaje contiene alguno de los tools
|
|
181
|
+
// detectados, preferimos el mapeo del diccionario.
|
|
182
|
+
var nodeMessageContainsTool = detectedTools.length >= 1 && detectedTools.some(function (tool) {
|
|
183
|
+
return trimmedNodeMessage.toLowerCase().includes(tool);
|
|
184
|
+
});
|
|
185
|
+
var activityFromNodeMessage = trimmedNodeMessage && !isGeneric && !isRaw && !nodeMessageContainsTool ? {
|
|
165
186
|
phase: 'action',
|
|
166
187
|
message: trimmedNodeMessage
|
|
167
188
|
} : null;
|
|
189
|
+
console.info('[AAI:resolveHitlNode]', {
|
|
190
|
+
nodeMessage: nodeMessage,
|
|
191
|
+
trimmedNodeMessage: trimmedNodeMessage,
|
|
192
|
+
isRaw: isRaw,
|
|
193
|
+
isGeneric: isGeneric,
|
|
194
|
+
nodeMessageContainsTool: nodeMessageContainsTool,
|
|
195
|
+
detectedTools: detectedTools,
|
|
196
|
+
activityFromNodeMessage: activityFromNodeMessage,
|
|
197
|
+
hasPendingActions: pendingForThread.length,
|
|
198
|
+
threadId: threadId
|
|
199
|
+
});
|
|
168
200
|
if (detectedTools.length >= 1) {
|
|
169
201
|
if (activityFromNodeMessage) {
|
|
202
|
+
console.info('[AAI:resolveHitlNode] usando activityFromNodeMessage (texto legible del backend)');
|
|
170
203
|
return activityFromNodeMessage;
|
|
171
204
|
}
|
|
205
|
+
console.info('[AAI:resolveHitlNode] usando detectedTools[0]:', detectedTools[0]);
|
|
172
206
|
return mapHitlToolNameToStreamActivity(detectedTools[0], t, options);
|
|
173
207
|
}
|
|
208
|
+
console.info('[AAI:resolveHitlNode] sin detectedTools, delegando a mapNodeMessageToStreamActivity');
|
|
174
209
|
return mapNodeMessageToStreamActivity(nodeMessage, t, options);
|
|
175
210
|
};
|
|
176
211
|
export var resolveInitialHitlStreamActivity = function resolveInitialHitlStreamActivity(t, context) {
|
|
@@ -296,6 +331,11 @@ export var resolveStreamLoadingDisplay = function resolveStreamLoadingDisplay(pa
|
|
|
296
331
|
}
|
|
297
332
|
var trimmed = raw.trim();
|
|
298
333
|
if (trimmed && !isGenericResumeNodeMessage(trimmed)) {
|
|
334
|
+
console.info('[AAI:resolveDisplay] activeLoadings passthrough', {
|
|
335
|
+
raw: raw,
|
|
336
|
+
trimmed: trimmed,
|
|
337
|
+
looksLikeRaw: looksLikeRawToolName(trimmed)
|
|
338
|
+
});
|
|
299
339
|
return {
|
|
300
340
|
phase: 'action',
|
|
301
341
|
message: trimmed
|
|
@@ -346,4 +386,4 @@ export var resolveStreamLoadingDisplay = function resolveStreamLoadingDisplay(pa
|
|
|
346
386
|
export var isStreamingPlaceholderMessageId = function isStreamingPlaceholderMessageId(messageId) {
|
|
347
387
|
return typeof messageId === 'string' && messageId.includes('-streaming');
|
|
348
388
|
};
|
|
349
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJub3JtYWxpemVIaXRsVG9vbE5hbWUiLCJUSElOS0lOR19NRVNTQUdFX0tFWVMiLCJHRU5FUkFUSU5HX01FU1NBR0VfS0VZUyIsIlNFQVJDSF9NRVNTQUdFX0tFWVMiLCJERUVQX1NFQVJDSF9NRVNTQUdFX0tFWVMiLCJBVFRBQ0hNRU5UX01FU1NBR0VfS0VZUyIsIkFUVEFDSE1FTlRfTUVTU0FHRV9LRVlTX1BMVVJBTCIsIldSSVRJTkdfQUNUSVZJVFlfTUVTU0FHRV9LRVkiLCJISVRMX1RPT0xfQUNUSVZJVFlfS0VZUyIsImNyZWF0ZV90YXNrIiwiY2xvbmVfdGFzayIsImNyZWF0ZV90YXNrc19iYXRjaCIsImNyZWF0ZV9hZ2VudCIsImVkaXRfYWdlbnQiLCJlZGl0X3Rhc2siLCJlZGl0X3Rhc2tzX2JhdGNoIiwiZGVsZXRlX3Rhc2siLCJkZWxldGVfdGFza3NfYmF0Y2giLCJ0YXNrX2Fzc2lnbiIsInRhc2tfdW5hc3NpZ24iLCJhc3NpZ25fdGFza19sYWJlbCIsImNyZWF0ZV9sYWJlbHMiLCJlZGl0X3Byb2plY3QiLCJjcmVhdGVfY2hlY2tsaXN0X2l0ZW0iLCJ1cGRhdGVfdGFza190eXBlIiwidXBkYXRlX2VzdGltYXRlZF9ob3VycyIsInVwZGF0ZV9kZWxpdmVyYWJsZSIsImNyZWF0ZV9ob3VyIiwiY3JlYXRlX2NoZWNrbGlzdCIsImdldF90YXNrX2RhdGVfaG91cnMiLCJjb25maWd1cmVfYWdlbnRfYWNjZXNzIiwic2VuZF90YXNrX21lc3NhZ2UiLCJkZWxldGVfY2hlY2tsaXN0X2l0ZW0iLCJyZW1vdmVfdGFza190eXBlIiwicmVtb3ZlX3Rhc2tfbGFiZWwiLCJjb3VudF9kZWxpdmVyYWJsZSIsImNyZWF0ZV9yZXdvcmsiLCJ1cGRhdGVfcmV3b3JrIiwiSElUTF9UT09MX05BTUVTX0JZX1NQRUNJRklDSVRZIiwiT2JqZWN0Iiwia2V5cyIsInNvcnQiLCJhIiwiYiIsImxlbmd0aCIsImxvb2tzTGlrZVJhd1Rvb2xOYW1lIiwibWVzc2FnZSIsInRlc3QiLCJ0cmltIiwiaXNHZW5lcmljUmVzdW1lTm9kZU1lc3NhZ2UiLCJub3JtYWxpemVkIiwidG9Mb3dlckNhc2UiLCJzdGFydHNXaXRoIiwibWFwSGl0bFRvb2xOYW1lVG9TdHJlYW1BY3Rpdml0eSIsInRvb2xOYW1lIiwidCIsIm9wdGlvbnMiLCJrZXkiLCJwaGFzZSIsInVzZVJlc3VtaW5nRmFsbGJhY2siLCJyZXNvbHZlSGl0bFRvb2xGcm9tTm9kZU1lc3NhZ2UiLCJub2RlTWVzc2FnZSIsImFzVG9vbE5hbWUiLCJyZXBsYWNlIiwibWF0Y2hlZFRvb2wiLCJmaW5kIiwiaW5jbHVkZXMiLCJtYXBOb2RlTWVzc2FnZVRvU3RyZWFtQWN0aXZpdHkiLCJoaXRsVG9vbCIsInRyaW1tZWRNZXNzYWdlIiwicmVzb2x2ZVBlbmRpbmdBY3Rpb25zRm9yVGhyZWFkIiwiY29udGV4dCIsInRocmVhZElkIiwiX3JlZiIsIl9jb250ZXh0JHBlbmRpbmdBY3RpbyIsIl9jb250ZXh0JGFwcHJvdmFsIiwiX2NvbnRleHQkdGhyZWFkSWRzIiwicGVuZGluZyIsInBlbmRpbmdBY3Rpb25zIiwiYXBwcm92YWwiLCJwZW5kaW5nX2FjdGlvbnMiLCJmb3JUaHJlYWQiLCJmaWx0ZXIiLCJhY3Rpb24iLCJ0aHJlYWRfaWQiLCJ0aHJlYWRJZHMiLCJfY29udGV4dCR0aHJlYWRJZHMyIiwiZGV0ZWN0VG9vbHNGcm9tUGVuZGluZ0FjdGlvbnMiLCJhY3Rpb25zIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiU2V0IiwibWFwIiwidG9vbF9uYW1lIiwiQm9vbGVhbiIsInJlc29sdmVIaXRsTm9kZVN0cmVhbUFjdGl2aXR5IiwicGVuZGluZ0ZvclRocmVhZCIsImRldGVjdGVkVG9vbHMiLCJ0cmltbWVkTm9kZU1lc3NhZ2UiLCJhY3Rpdml0eUZyb21Ob2RlTWVzc2FnZSIsInJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5IiwiQUNUSVZJVFlfTUVTU0FHRV9ST1RBVEVfTVMiLCJST1RBVEFCTEVfUEhBU0VTIiwiZ2V0TWVzc2FnZUtleXNGb3JQaGFzZSIsImF0dGFjaG1lbnRzQ291bnQiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJnZXRTdHJlYW1BY3Rpdml0eU1lc3NhZ2VBdEluZGV4IiwiaW5kZXgiLCJjbGFtcGVkSW5kZXgiLCJNYXRoIiwibWluIiwibWF4IiwiZ2V0VGhpbmtpbmdMb2FkaW5nTWVzc2FnZSIsImdldEdlbmVyYXRpbmdMb2FkaW5nTWVzc2FnZSIsImNhbkFkdmFuY2VTdHJlYW1BY3Rpdml0eU1lc3NhZ2UiLCJjdXJyZW50SW5kZXgiLCJhZHZhbmNlU3RyZWFtQWN0aXZpdHlNZXNzYWdlIiwiYWN0aXZpdHkiLCJuZXh0SW5kZXgiLCJfb2JqZWN0U3ByZWFkIiwiY2FuUm90YXRlU3RyZWFtQWN0aXZpdHlQaGFzZSIsImdldFdyaXRpbmdTdHJlYW1BY3Rpdml0eSIsImdldEluaXRpYWxTdHJlYW1BY3Rpdml0eSIsImlzV2ViU2VhcmNoQWN0aXZlIiwiaXNEZWVwU2VhcmNoQWN0aXZlIiwiaGFzQXR0YWNobWVudHMiLCJfb3B0aW9ucyRhdHRhY2htZW50c0MiLCJyZXNvbHZlU3RyZWFtTG9hZGluZ0Rpc3BsYXkiLCJwYXJhbXMiLCJzdHJlYW1BY3Rpdml0eSIsImFjdGl2ZUtleXMiLCJhY3RpdmVMb2FkaW5ncyIsImZpcnN0S2V5IiwicmF3IiwidHJpbW1lZCIsImxvYWRpbmdNZXNzYWdlIiwid2FpdGluZ1Jlc3BvbnNlIiwiaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCIsIm1lc3NhZ2VJZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9zdHJlYW1BY3Rpdml0eU1lc3NhZ2VzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU3RyZWFtQWN0aXZpdHksIFN0cmVhbUFjdGl2aXR5UGhhc2UgfSBmcm9tICcuLi90eXBlcy9zdHJlYW1BY3Rpdml0eSdcbmltcG9ydCB0eXBlIHsgQXBwcm92YWxSZXF1ZXN0LCBQZW5kaW5nQWN0aW9uIH0gZnJvbSAnLi4vdHlwZXMvQ2hhdCdcbmltcG9ydCB7IG5vcm1hbGl6ZUhpdGxUb29sTmFtZSB9IGZyb20gJy4vaGl0bEFuYWx5dGljcydcblxudHlwZSBUcmFuc2xhdGVGbiA9IChrZXk6IHN0cmluZykgPT4gc3RyaW5nXG5cbmNvbnN0IFRISU5LSU5HX01FU1NBR0VfS0VZUyA9IFtcbiAgJ2NoYXQuYWN0aXZpdHkudGhpbmtpbmcuYW5hbHl6aW5nJyxcbiAgJ2NoYXQuYWN0aXZpdHkudGhpbmtpbmcucmV2aWV3aW5nJyxcbiAgJ2NoYXQuYWN0aXZpdHkudGhpbmtpbmcucGxhbm5pbmcnLFxuXSBhcyBjb25zdFxuXG5jb25zdCBHRU5FUkFUSU5HX01FU1NBR0VfS0VZUyA9IFtcbiAgJ2NoYXQuYWN0aXZpdHkuZ2VuZXJhdGluZy5jb25zaWRlcmluZycsXG4gICdjaGF0LmFjdGl2aXR5LmdlbmVyYXRpbmcuYWxtb3N0UmVhZHknLFxuICAnY2hhdC5hY3Rpdml0eS5nZW5lcmF0aW5nLnByZXBhcmluZycsXG5dIGFzIGNvbnN0XG5cbmNvbnN0IFNFQVJDSF9NRVNTQUdFX0tFWVMgPSBbJ2NoYXQuYWN0aXZpdHkuc2VhcmNoLnNjYW5uaW5nJywgJ2NoYXQuYWN0aXZpdHkuc2VhcmNoLnN1bW1hcml6aW5nJ10gYXMgY29uc3RcblxuY29uc3QgREVFUF9TRUFSQ0hfTUVTU0FHRV9LRVlTID0gW1xuICAnY2hhdC5hY3Rpdml0eS5kZWVwU2VhcmNoLmV4cGxvcmluZycsXG4gICdjaGF0LmFjdGl2aXR5LmRlZXBTZWFyY2guY3Jvc3NDaGVja2luZycsXG5dIGFzIGNvbnN0XG5cbmNvbnN0IEFUVEFDSE1FTlRfTUVTU0FHRV9LRVlTID0gWydjaGF0LmFjdGl2aXR5LmF0dGFjaG1lbnQucmVhZGluZycsICdjaGF0LmFjdGl2aXR5LmF0dGFjaG1lbnQuZXh0cmFjdGluZyddIGFzIGNvbnN0XG5cbmNvbnN0IEFUVEFDSE1FTlRfTUVTU0FHRV9LRVlTX1BMVVJBTCA9IFtcbiAgJ2NoYXQuYWN0aXZpdHkuYXR0YWNobWVudC5yZWFkaW5nUGx1cmFsJyxcbiAgJ2NoYXQuYWN0aXZpdHkuYXR0YWNobWVudC5leHRyYWN0aW5nUGx1cmFsJyxcbl0gYXMgY29uc3RcblxuZXhwb3J0IGNvbnN0IFdSSVRJTkdfQUNUSVZJVFlfTUVTU0FHRV9LRVkgPSAnY2hhdC5hY3Rpdml0eS53cml0aW5nLmNvbXBvc2luZycgYXMgY29uc3RcblxuLyoqIFRvb2xzIEhJVEwgLyBub2RlIFNTRSDihpIga2V5IGkxOG4gZGVsIGluZGljYWRvciBkZSBhY3RpdmlkYWQgKHRpZW1wbyBwcmVzZW50ZSBjb250aW51bykuICovXG5jb25zdCBISVRMX1RPT0xfQUNUSVZJVFlfS0VZUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgY3JlYXRlX3Rhc2s6ICdjaGF0LmFjdGl2aXR5LmNyZWF0aW5nVGFzaycsXG4gIGNsb25lX3Rhc2s6ICdjaGF0LmFjdGl2aXR5LmNyZWF0aW5nVGFzaycsXG4gIGNyZWF0ZV90YXNrc19iYXRjaDogJ2NoYXQuYWN0aXZpdHkuY3JlYXRpbmdUYXNrc0JhdGNoJyxcbiAgY3JlYXRlX2FnZW50OiAnY2hhdC5hY3Rpdml0eS5jcmVhdGluZ0FnZW50JyxcbiAgZWRpdF9hZ2VudDogJ2NoYXQuYWN0aXZpdHkuZWRpdGluZ0FnZW50JyxcbiAgZWRpdF90YXNrOiAnY2hhdC5hY3Rpdml0eS5lZGl0aW5nVGFzaycsXG4gIGVkaXRfdGFza3NfYmF0Y2g6ICdjaGF0LmFjdGl2aXR5LmVkaXRpbmdUYXNrc0JhdGNoJyxcbiAgZGVsZXRlX3Rhc2s6ICdjaGF0LmFjdGl2aXR5LmRlbGV0aW5nVGFzaycsXG4gIGRlbGV0ZV90YXNrc19iYXRjaDogJ2NoYXQuYWN0aXZpdHkuZGVsZXRpbmdUYXNrc0JhdGNoJyxcbiAgdGFza19hc3NpZ246ICdjaGF0LmFjdGl2aXR5LmFzc2lnbmluZ1VzZXInLFxuICB0YXNrX3VuYXNzaWduOiAnY2hhdC5hY3Rpdml0eS51bmFzc2lnbmluZ1VzZXInLFxuICBhc3NpZ25fdGFza19sYWJlbDogJ2NoYXQuYWN0aXZpdHkuYXNzaWduaW5nTGFiZWwnLFxuICBjcmVhdGVfbGFiZWxzOiAnY2hhdC5hY3Rpdml0eS5jcmVhdGluZ0xhYmVsJyxcbiAgZWRpdF9wcm9qZWN0OiAnY2hhdC5hY3Rpdml0eS5lZGl0aW5nUHJvamVjdCcsXG4gIGNyZWF0ZV9jaGVja2xpc3RfaXRlbTogJ2NoYXQuYWN0aXZpdHkuY3JlYXRpbmdDaGVja2xpc3RJdGVtJyxcbiAgdXBkYXRlX3Rhc2tfdHlwZTogJ2NoYXQuYWN0aXZpdHkudXBkYXRpbmdUYXNrVHlwZScsXG4gIHVwZGF0ZV9lc3RpbWF0ZWRfaG91cnM6ICdjaGF0LmFjdGl2aXR5LnVwZGF0aW5nRXN0aW1hdGVkSG91cnMnLFxuICB1cGRhdGVfZGVsaXZlcmFibGU6ICdjaGF0LmFjdGl2aXR5LnVwZGF0aW5nRGVsaXZlcmFibGUnLFxuICBjcmVhdGVfaG91cjogJ2NoYXQuYWN0aXZpdHkubG9nZ2luZ0hvdXJzJyxcbiAgY3JlYXRlX2NoZWNrbGlzdDogJ2NoYXQuYWN0aXZpdHkuY3JlYXRpbmdDaGVja2xpc3QnLFxuICBnZXRfdGFza19kYXRlX2hvdXJzOiAnY2hhdC5hY3Rpdml0eS5xdWVyeWluZ0hvdXJzJyxcbiAgY29uZmlndXJlX2FnZW50X2FjY2VzczogJ2NoYXQuYWN0aXZpdHkuY29uZmlndXJpbmdBZ2VudEFjY2VzcycsXG4gIHNlbmRfdGFza19tZXNzYWdlOiAnY2hhdC5hY3Rpdml0eS5zZW5kaW5nVGFza01lc3NhZ2UnLFxuICBkZWxldGVfY2hlY2tsaXN0X2l0ZW06ICdjaGF0LmFjdGl2aXR5LmRlbGV0aW5nQ2hlY2tsaXN0SXRlbScsXG4gIHJlbW92ZV90YXNrX3R5cGU6ICdjaGF0LmFjdGl2aXR5LnJlbW92aW5nVGFza1R5cGUnLFxuICByZW1vdmVfdGFza19sYWJlbDogJ2NoYXQuYWN0aXZpdHkucmVtb3ZpbmdMYWJlbCcsXG4gIGNvdW50X2RlbGl2ZXJhYmxlOiAnY2hhdC5hY3Rpdml0eS51cGRhdGluZ0RlbGl2ZXJhYmxlQ291bnQnLFxuICBjcmVhdGVfcmV3b3JrOiAnY2hhdC5hY3Rpdml0eS5jcmVhdGluZ1Jld29yaycsXG4gIHVwZGF0ZV9yZXdvcms6ICdjaGF0LmFjdGl2aXR5LnVwZGF0aW5nUmV3b3JrJyxcbn1cblxuY29uc3QgSElUTF9UT09MX05BTUVTX0JZX1NQRUNJRklDSVRZID0gT2JqZWN0LmtleXMoSElUTF9UT09MX0FDVElWSVRZX0tFWVMpLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGgpXG5cbi8qKlxuICogRGV0ZWN0YSBpZGVudGlmaWNhZG9yZXMgY3J1ZG9zIGRlIHRvb2wgKHNuYWtlX2Nhc2UgLyBrZWJhYi1jYXNlIHNpbiBlc3BhY2lvcykgcXVlIGVsIGJhY2tlbmRcbiAqIHB1ZWRlIGVudmlhciBjdWFuZG8gYcO6biBubyBoYXkgdHJhZHVjY2nDs24uIE5vIGRlYmVuIG1vc3RyYXJzZSBhbCB1c3VhcmlvOiBzZSB1c2EgdW4gZmFsbGJhY2tcbiAqIGdlbsOpcmljbyBoYXN0YSBxdWUgZWwgbm9tYnJlIHNlIGFncmVndWUgYWwgZGljY2lvbmFyaW8uXG4gKi9cbmNvbnN0IGxvb2tzTGlrZVJhd1Rvb2xOYW1lID0gKG1lc3NhZ2U6IHN0cmluZyk6IGJvb2xlYW4gPT4gL15bYS16MC05XSsoPzpbXy1dW2EtejAtOV0rKSskL2kudGVzdChtZXNzYWdlLnRyaW0oKSlcblxuLyoqIE1lbnNhamVzIGdlbsOpcmljb3MgZGVsIGJhY2tlbmQgY3VhbmRvIG5vIGhheSBkZXRhbGxlIGRlIHRvb2wgKGNvbnRpbnVlLXRocmVhZCkuICovXG5jb25zdCBpc0dlbmVyaWNSZXN1bWVOb2RlTWVzc2FnZSA9IChtZXNzYWdlOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IG1lc3NhZ2UudHJpbSgpLnRvTG93ZXJDYXNlKClcbiAgcmV0dXJuIChcbiAgICBub3JtYWxpemVkLnN0YXJ0c1dpdGgoJ2VqZWN1dGFuZG8gYWNjacOzbiBhcHJvYmFkYScpIHx8XG4gICAgbm9ybWFsaXplZC5zdGFydHNXaXRoKCdleGVjdXRpbmcgYXBwcm92ZWQgYWN0aW9uJykgfHxcbiAgICBub3JtYWxpemVkLnN0YXJ0c1dpdGgoJ2V4ZWN1dGFuZG8gYcOnw6NvIGFwcm92YWRhJylcbiAgKVxufVxuXG5leHBvcnQgY29uc3QgbWFwSGl0bFRvb2xOYW1lVG9TdHJlYW1BY3Rpdml0eSA9IChcbiAgdG9vbE5hbWU6IHN0cmluZyxcbiAgdDogVHJhbnNsYXRlRm4sXG4gIG9wdGlvbnM/OiB7IHVzZVJlc3VtaW5nRmFsbGJhY2s/OiBib29sZWFuIH1cbik6IFN0cmVhbUFjdGl2aXR5ID0+IHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZUhpdGxUb29sTmFtZSh0b29sTmFtZSlcbiAgY29uc3Qga2V5ID0gSElUTF9UT09MX0FDVElWSVRZX0tFWVNbbm9ybWFsaXplZF1cbiAgaWYgKGtleSkge1xuICAgIHJldHVybiB7IHBoYXNlOiAnYWN0aW9uJywgbWVzc2FnZTogdChrZXkpIH1cbiAgfVxuICBpZiAob3B0aW9ucz8udXNlUmVzdW1pbmdGYWxsYmFjaykge1xuICAgIHJldHVybiB7IHBoYXNlOiAnYWN0aW9uJywgbWVzc2FnZTogdCgnY2hhdC5hY3Rpdml0eS5yZXN1bWluZ0FjdGlvbicpIH1cbiAgfVxuICByZXR1cm4geyBwaGFzZTogJ2FjdGlvbicsIG1lc3NhZ2U6IHQoJ2NoYXQuZXhlY3V0aW5nQWN0aW9uJykgfVxufVxuXG5jb25zdCByZXNvbHZlSGl0bFRvb2xGcm9tTm9kZU1lc3NhZ2UgPSAobm9kZU1lc3NhZ2U6IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT4ge1xuICBjb25zdCBub3JtYWxpemVkID0gbm9kZU1lc3NhZ2UudG9Mb3dlckNhc2UoKS50cmltKClcbiAgaWYgKCFub3JtYWxpemVkKSByZXR1cm4gbnVsbFxuXG4gIGlmIChISVRMX1RPT0xfQUNUSVZJVFlfS0VZU1tub3JtYWxpemVkXSkge1xuICAgIHJldHVybiBub3JtYWxpemVkXG4gIH1cblxuICBjb25zdCBhc1Rvb2xOYW1lID0gbm9ybWFsaXplSGl0bFRvb2xOYW1lKG5vcm1hbGl6ZWQucmVwbGFjZSgvXFxzKy9nLCAnXycpKVxuICBpZiAoSElUTF9UT09MX0FDVElWSVRZX0tFWVNbYXNUb29sTmFtZV0pIHtcbiAgICByZXR1cm4gYXNUb29sTmFtZVxuICB9XG5cbiAgY29uc3QgbWF0Y2hlZFRvb2wgPSBISVRMX1RPT0xfTkFNRVNfQllfU1BFQ0lGSUNJVFkuZmluZCh0b29sTmFtZSA9PiBub3JtYWxpemVkLmluY2x1ZGVzKHRvb2xOYW1lKSlcbiAgcmV0dXJuIG1hdGNoZWRUb29sID8/IG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IG1hcE5vZGVNZXNzYWdlVG9TdHJlYW1BY3Rpdml0eSA9IChcbiAgbm9kZU1lc3NhZ2U6IHN0cmluZyxcbiAgdDogVHJhbnNsYXRlRm4sXG4gIG9wdGlvbnM/OiB7IHVzZVJlc3VtaW5nRmFsbGJhY2s/OiBib29sZWFuIH1cbik6IFN0cmVhbUFjdGl2aXR5ID0+IHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vZGVNZXNzYWdlLnRvTG93ZXJDYXNlKClcblxuICBjb25zdCBoaXRsVG9vbCA9IHJlc29sdmVIaXRsVG9vbEZyb21Ob2RlTWVzc2FnZShub2RlTWVzc2FnZSlcbiAgaWYgKGhpdGxUb29sKSB7XG4gICAgcmV0dXJuIG1hcEhpdGxUb29sTmFtZVRvU3RyZWFtQWN0aXZpdHkoaGl0bFRvb2wsIHQsIG9wdGlvbnMpXG4gIH1cblxuICBpZiAoXG4gICAgbm9ybWFsaXplZC5pbmNsdWRlcygncmVzcG9uc2VfZmlsZV9nZW5lcmF0aW9uJykgfHxcbiAgICBub3JtYWxpemVkLmluY2x1ZGVzKCdnZW5lcmFuZG8gYXJjaGl2bycpIHx8XG4gICAgbm9ybWFsaXplZC5pbmNsdWRlcygnZ2VuZXJhdGluZyBmaWxlJylcbiAgKSB7XG4gICAgcmV0dXJuIHsgcGhhc2U6ICdhY3Rpb24nLCBtZXNzYWdlOiB0KCdjaGF0LmFjdGl2aXR5LmdlbmVyYXRpbmdGaWxlJykgfVxuICB9XG4gIGlmIChcbiAgICBub3JtYWxpemVkLmluY2x1ZGVzKCd0YXZpbHknKSB8fFxuICAgIG5vcm1hbGl6ZWQuaW5jbHVkZXMoJ3NlYXJjaF93ZWInKSB8fFxuICAgIG5vcm1hbGl6ZWQuaW5jbHVkZXMoJ2J1c2NhbmRvIGVuIGxhIHdlYicpIHx8XG4gICAgbm9ybWFsaXplZC5pbmNsdWRlcygnc2VhcmNoaW5nIHRoZSB3ZWInKVxuICApIHtcbiAgICByZXR1cm4geyBwaGFzZTogJ3NlYXJjaCcsIG1lc3NhZ2U6IHQoU0VBUkNIX01FU1NBR0VfS0VZU1swXSkgfVxuICB9XG5cbiAgY29uc3QgdHJpbW1lZE1lc3NhZ2UgPSBub2RlTWVzc2FnZS50cmltKClcbiAgaWYgKHRyaW1tZWRNZXNzYWdlICYmICFpc0dlbmVyaWNSZXN1bWVOb2RlTWVzc2FnZSh0cmltbWVkTWVzc2FnZSkgJiYgIWxvb2tzTGlrZVJhd1Rvb2xOYW1lKHRyaW1tZWRNZXNzYWdlKSkge1xuICAgIHJldHVybiB7IHBoYXNlOiAnYWN0aW9uJywgbWVzc2FnZTogdHJpbW1lZE1lc3NhZ2UgfVxuICB9XG5cbiAgaWYgKGlzR2VuZXJpY1Jlc3VtZU5vZGVNZXNzYWdlKHRyaW1tZWRNZXNzYWdlKSB8fCBvcHRpb25zPy51c2VSZXN1bWluZ0ZhbGxiYWNrKSB7XG4gICAgcmV0dXJuIHsgcGhhc2U6ICdhY3Rpb24nLCBtZXNzYWdlOiB0KCdjaGF0LmFjdGl2aXR5LnJlc3VtaW5nQWN0aW9uJykgfVxuICB9XG4gIHJldHVybiB7IHBoYXNlOiAnYWN0aW9uJywgbWVzc2FnZTogdCgnY2hhdC5leGVjdXRpbmdBY3Rpb24nKSB9XG59XG5cbmV4cG9ydCB0eXBlIEhpdGxFeGVjdXRpb25Db250ZXh0ID0ge1xuICBtZXNzYWdlSWQ/OiBzdHJpbmdcbiAgbWVzc2FnZVRleHQ/OiBzdHJpbmdcbiAgYXBwcm92YWw/OiBBcHByb3ZhbFJlcXVlc3RcbiAgcGVuZGluZ0FjdGlvbnM/OiBQZW5kaW5nQWN0aW9uW11cbiAgdGhyZWFkSWRzPzogc3RyaW5nW11cbn1cblxuY29uc3QgcmVzb2x2ZVBlbmRpbmdBY3Rpb25zRm9yVGhyZWFkID0gKFxuICBjb250ZXh0OiBIaXRsRXhlY3V0aW9uQ29udGV4dCB8IG51bGwgfCB1bmRlZmluZWQsXG4gIHRocmVhZElkPzogc3RyaW5nXG4pOiBQZW5kaW5nQWN0aW9uW10gPT4ge1xuICBjb25zdCBwZW5kaW5nID0gY29udGV4dD8ucGVuZGluZ0FjdGlvbnMgPz8gY29udGV4dD8uYXBwcm92YWw/LnBlbmRpbmdfYWN0aW9ucyA/PyBbXVxuICBpZiAoIXBlbmRpbmcubGVuZ3RoKSByZXR1cm4gW11cblxuICBpZiAodGhyZWFkSWQpIHtcbiAgICBjb25zdCBmb3JUaHJlYWQgPSBwZW5kaW5nLmZpbHRlcihhY3Rpb24gPT4gYWN0aW9uLnRocmVhZF9pZCA9PT0gdGhyZWFkSWQpXG4gICAgaWYgKGZvclRocmVhZC5sZW5ndGgpIHJldHVybiBmb3JUaHJlYWRcbiAgfVxuXG4gIGlmIChjb250ZXh0Py50aHJlYWRJZHM/Lmxlbmd0aCkge1xuICAgIHJldHVybiBwZW5kaW5nLmZpbHRlcihhY3Rpb24gPT4gY29udGV4dC50aHJlYWRJZHM/LmluY2x1ZGVzKGFjdGlvbi50aHJlYWRfaWQpKVxuICB9XG5cbiAgcmV0dXJuIHBlbmRpbmdcbn1cblxuY29uc3QgZGV0ZWN0VG9vbHNGcm9tUGVuZGluZ0FjdGlvbnMgPSAoYWN0aW9uczogUGVuZGluZ0FjdGlvbltdKTogc3RyaW5nW10gPT4gW1xuICAuLi5uZXcgU2V0KGFjdGlvbnMubWFwKGFjdGlvbiA9PiBub3JtYWxpemVIaXRsVG9vbE5hbWUoYWN0aW9uLnRvb2xfbmFtZSkpLmZpbHRlcihCb29sZWFuKSksXG5dXG5cbi8qKiBSZXN1ZWx2ZSBpbmRpY2Fkb3IgSElUTCBwcmlvcml6YW5kbyBwZW5kaW5nX2FjdGlvbnMgZGVsIG1lbnNhamUgZGUgYXByb2JhY2nDs24gYW50ZXJpb3IuICovXG5leHBvcnQgY29uc3QgcmVzb2x2ZUhpdGxOb2RlU3RyZWFtQWN0aXZpdHkgPSAoXG4gIG5vZGVNZXNzYWdlOiBzdHJpbmcsXG4gIHQ6IFRyYW5zbGF0ZUZuLFxuICBjb250ZXh0PzogSGl0bEV4ZWN1dGlvbkNvbnRleHQgfCBudWxsLFxuICB0aHJlYWRJZD86IHN0cmluZyxcbiAgb3B0aW9ucz86IHsgdXNlUmVzdW1pbmdGYWxsYmFjaz86IGJvb2xlYW4gfVxuKTogU3RyZWFtQWN0aXZpdHkgPT4ge1xuICBjb25zdCBwZW5kaW5nRm9yVGhyZWFkID0gcmVzb2x2ZVBlbmRpbmdBY3Rpb25zRm9yVGhyZWFkKGNvbnRleHQsIHRocmVhZElkKVxuICBjb25zdCBkZXRlY3RlZFRvb2xzID0gZGV0ZWN0VG9vbHNGcm9tUGVuZGluZ0FjdGlvbnMocGVuZGluZ0ZvclRocmVhZClcblxuICBjb25zdCB0cmltbWVkTm9kZU1lc3NhZ2UgPSBub2RlTWVzc2FnZS50cmltKClcbiAgY29uc3QgYWN0aXZpdHlGcm9tTm9kZU1lc3NhZ2UgPVxuICAgIHRyaW1tZWROb2RlTWVzc2FnZSAmJiAhaXNHZW5lcmljUmVzdW1lTm9kZU1lc3NhZ2UodHJpbW1lZE5vZGVNZXNzYWdlKSAmJiAhbG9va3NMaWtlUmF3VG9vbE5hbWUodHJpbW1lZE5vZGVNZXNzYWdlKVxuICAgICAgPyB7IHBoYXNlOiAnYWN0aW9uJyBhcyBjb25zdCwgbWVzc2FnZTogdHJpbW1lZE5vZGVNZXNzYWdlIH1cbiAgICAgIDogbnVsbFxuXG4gIGlmIChkZXRlY3RlZFRvb2xzLmxlbmd0aCA+PSAxKSB7XG4gICAgaWYgKGFjdGl2aXR5RnJvbU5vZGVNZXNzYWdlKSB7XG4gICAgICByZXR1cm4gYWN0aXZpdHlGcm9tTm9kZU1lc3NhZ2VcbiAgICB9XG4gICAgcmV0dXJuIG1hcEhpdGxUb29sTmFtZVRvU3RyZWFtQWN0aXZpdHkoZGV0ZWN0ZWRUb29sc1swXSwgdCwgb3B0aW9ucylcbiAgfVxuXG4gIHJldHVybiBtYXBOb2RlTWVzc2FnZVRvU3RyZWFtQWN0aXZpdHkobm9kZU1lc3NhZ2UsIHQsIG9wdGlvbnMpXG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlSW5pdGlhbEhpdGxTdHJlYW1BY3Rpdml0eSA9IChcbiAgdDogVHJhbnNsYXRlRm4sXG4gIGNvbnRleHQ/OiBIaXRsRXhlY3V0aW9uQ29udGV4dCB8IG51bGxcbik6IFN0cmVhbUFjdGl2aXR5ID0+IHtcbiAgY29uc3QgcGVuZGluZ0FjdGlvbnMgPSByZXNvbHZlUGVuZGluZ0FjdGlvbnNGb3JUaHJlYWQoY29udGV4dClcbiAgY29uc3QgZGV0ZWN0ZWRUb29scyA9IGRldGVjdFRvb2xzRnJvbVBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zKVxuXG4gIGlmIChkZXRlY3RlZFRvb2xzLmxlbmd0aCA+PSAxKSB7XG4gICAgcmV0dXJuIG1hcEhpdGxUb29sTmFtZVRvU3RyZWFtQWN0aXZpdHkoZGV0ZWN0ZWRUb29sc1swXSwgdCwgeyB1c2VSZXN1bWluZ0ZhbGxiYWNrOiB0cnVlIH0pXG4gIH1cblxuICByZXR1cm4geyBwaGFzZTogJ3Byb2Nlc3NpbmcnLCBtZXNzYWdlOiB0KCdjaGF0LnByb2Nlc3NpbmcnKSB9XG59XG5cbmV4cG9ydCBjb25zdCBBQ1RJVklUWV9NRVNTQUdFX1JPVEFURV9NUyA9IDMyMDBcblxuY29uc3QgUk9UQVRBQkxFX1BIQVNFUzogU3RyZWFtQWN0aXZpdHlQaGFzZVtdID0gWydnZW5lcmF0aW5nJywgJ3RoaW5raW5nJywgJ3NlYXJjaCcsICdkZWVwX3NlYXJjaCcsICdhdHRhY2htZW50J11cblxuY29uc3QgZ2V0TWVzc2FnZUtleXNGb3JQaGFzZSA9IChwaGFzZTogU3RyZWFtQWN0aXZpdHlQaGFzZSwgYXR0YWNobWVudHNDb3VudCA9IDApOiByZWFkb25seSBzdHJpbmdbXSB8IG51bGwgPT4ge1xuICBzd2l0Y2ggKHBoYXNlKSB7XG4gICAgY2FzZSAnZ2VuZXJhdGluZyc6XG4gICAgICByZXR1cm4gR0VORVJBVElOR19NRVNTQUdFX0tFWVNcbiAgICBjYXNlICd0aGlua2luZyc6XG4gICAgICByZXR1cm4gVEhJTktJTkdfTUVTU0FHRV9LRVlTXG4gICAgY2FzZSAnc2VhcmNoJzpcbiAgICAgIHJldHVybiBTRUFSQ0hfTUVTU0FHRV9LRVlTXG4gICAgY2FzZSAnZGVlcF9zZWFyY2gnOlxuICAgICAgcmV0dXJuIERFRVBfU0VBUkNIX01FU1NBR0VfS0VZU1xuICAgIGNhc2UgJ2F0dGFjaG1lbnQnOlxuICAgICAgcmV0dXJuIGF0dGFjaG1lbnRzQ291bnQgPiAxID8gQVRUQUNITUVOVF9NRVNTQUdFX0tFWVNfUExVUkFMIDogQVRUQUNITUVOVF9NRVNTQUdFX0tFWVNcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGxcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZ2V0U3RyZWFtQWN0aXZpdHlNZXNzYWdlQXRJbmRleCA9IChcbiAgcGhhc2U6IFN0cmVhbUFjdGl2aXR5UGhhc2UsXG4gIGluZGV4OiBudW1iZXIsXG4gIHQ6IFRyYW5zbGF0ZUZuLFxuICBhdHRhY2htZW50c0NvdW50ID0gMFxuKTogc3RyaW5nID0+IHtcbiAgaWYgKHBoYXNlID09PSAnd3JpdGluZycpIHtcbiAgICByZXR1cm4gdChXUklUSU5HX0FDVElWSVRZX01FU1NBR0VfS0VZKVxuICB9XG5cbiAgY29uc3Qga2V5cyA9IGdldE1lc3NhZ2VLZXlzRm9yUGhhc2UocGhhc2UsIGF0dGFjaG1lbnRzQ291bnQpXG4gIGlmICgha2V5cz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBjb25zdCBjbGFtcGVkSW5kZXggPSBNYXRoLm1pbihNYXRoLm1heCgwLCBpbmRleCksIGtleXMubGVuZ3RoIC0gMSlcbiAgcmV0dXJuIHQoa2V5c1tjbGFtcGVkSW5kZXhdKVxufVxuXG5leHBvcnQgY29uc3QgZ2V0VGhpbmtpbmdMb2FkaW5nTWVzc2FnZSA9IChpbmRleDogbnVtYmVyLCB0OiBUcmFuc2xhdGVGbik6IHN0cmluZyA9PlxuICBnZXRTdHJlYW1BY3Rpdml0eU1lc3NhZ2VBdEluZGV4KCd0aGlua2luZycsIGluZGV4LCB0KVxuXG5leHBvcnQgY29uc3QgZ2V0R2VuZXJhdGluZ0xvYWRpbmdNZXNzYWdlID0gKGluZGV4OiBudW1iZXIsIHQ6IFRyYW5zbGF0ZUZuKTogc3RyaW5nID0+XG4gIGdldFN0cmVhbUFjdGl2aXR5TWVzc2FnZUF0SW5kZXgoJ2dlbmVyYXRpbmcnLCBpbmRleCwgdClcblxuZXhwb3J0IGNvbnN0IGNhbkFkdmFuY2VTdHJlYW1BY3Rpdml0eU1lc3NhZ2UgPSAocGhhc2U6IFN0cmVhbUFjdGl2aXR5UGhhc2UsIGN1cnJlbnRJbmRleDogbnVtYmVyKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IGtleXMgPSBnZXRNZXNzYWdlS2V5c0ZvclBoYXNlKHBoYXNlKVxuICBpZiAoIWtleXMpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICByZXR1cm4gY3VycmVudEluZGV4IDwga2V5cy5sZW5ndGggLSAxXG59XG5cbmV4cG9ydCBjb25zdCBhZHZhbmNlU3RyZWFtQWN0aXZpdHlNZXNzYWdlID0gKFxuICBhY3Rpdml0eTogU3RyZWFtQWN0aXZpdHksXG4gIGN1cnJlbnRJbmRleDogbnVtYmVyLFxuICB0OiBUcmFuc2xhdGVGblxuKTogeyBhY3Rpdml0eTogU3RyZWFtQWN0aXZpdHk7IG5leHRJbmRleDogbnVtYmVyIH0gfCBudWxsID0+IHtcbiAgaWYgKCFjYW5BZHZhbmNlU3RyZWFtQWN0aXZpdHlNZXNzYWdlKGFjdGl2aXR5LnBoYXNlLCBjdXJyZW50SW5kZXgpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGNvbnN0IG5leHRJbmRleCA9IGN1cnJlbnRJbmRleCArIDFcbiAgcmV0dXJuIHtcbiAgICBhY3Rpdml0eToge1xuICAgICAgcGhhc2U6IGFjdGl2aXR5LnBoYXNlLFxuICAgICAgbWVzc2FnZTogZ2V0U3RyZWFtQWN0aXZpdHlNZXNzYWdlQXRJbmRleChhY3Rpdml0eS5waGFzZSwgbmV4dEluZGV4LCB0LCBhY3Rpdml0eS5hdHRhY2htZW50c0NvdW50KSxcbiAgICAgIC4uLihhY3Rpdml0eS5hdHRhY2htZW50c0NvdW50ICE9IG51bGwgJiYgeyBhdHRhY2htZW50c0NvdW50OiBhY3Rpdml0eS5hdHRhY2htZW50c0NvdW50IH0pLFxuICAgIH0sXG4gICAgbmV4dEluZGV4LFxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBjYW5Sb3RhdGVTdHJlYW1BY3Rpdml0eVBoYXNlID0gKHBoYXNlOiBTdHJlYW1BY3Rpdml0eVBoYXNlKTogYm9vbGVhbiA9PiBST1RBVEFCTEVfUEhBU0VTLmluY2x1ZGVzKHBoYXNlKVxuXG5leHBvcnQgY29uc3QgZ2V0V3JpdGluZ1N0cmVhbUFjdGl2aXR5ID0gKHQ6IFRyYW5zbGF0ZUZuKTogU3RyZWFtQWN0aXZpdHkgPT4gKHtcbiAgcGhhc2U6ICd3cml0aW5nJyxcbiAgbWVzc2FnZTogdChXUklUSU5HX0FDVElWSVRZX01FU1NBR0VfS0VZKSxcbn0pXG5cbmV4cG9ydCBjb25zdCBnZXRJbml0aWFsU3RyZWFtQWN0aXZpdHkgPSAoXG4gIHQ6IFRyYW5zbGF0ZUZuLFxuICBvcHRpb25zOiB7XG4gICAgaXNXZWJTZWFyY2hBY3RpdmU/OiBib29sZWFuXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlPzogYm9vbGVhblxuICAgIGhhc0F0dGFjaG1lbnRzPzogYm9vbGVhblxuICAgIGF0dGFjaG1lbnRzQ291bnQ/OiBudW1iZXJcbiAgfVxuKTogU3RyZWFtQWN0aXZpdHkgPT4ge1xuICBpZiAob3B0aW9ucy5pc1dlYlNlYXJjaEFjdGl2ZSkge1xuICAgIHJldHVybiB7IHBoYXNlOiAnc2VhcmNoJywgbWVzc2FnZTogdChTRUFSQ0hfTUVTU0FHRV9LRVlTWzBdKSB9XG4gIH1cbiAgaWYgKG9wdGlvbnMuaXNEZWVwU2VhcmNoQWN0aXZlKSB7XG4gICAgcmV0dXJuIHsgcGhhc2U6ICdkZWVwX3NlYXJjaCcsIG1lc3NhZ2U6IHQoREVFUF9TRUFSQ0hfTUVTU0FHRV9LRVlTWzBdKSB9XG4gIH1cbiAgaWYgKG9wdGlvbnMuaGFzQXR0YWNobWVudHMpIHtcbiAgICBjb25zdCBhdHRhY2htZW50c0NvdW50ID0gb3B0aW9ucy5hdHRhY2htZW50c0NvdW50ID8/IDBcbiAgICByZXR1cm4ge1xuICAgICAgcGhhc2U6ICdhdHRhY2htZW50JyxcbiAgICAgIG1lc3NhZ2U6IGdldFN0cmVhbUFjdGl2aXR5TWVzc2FnZUF0SW5kZXgoJ2F0dGFjaG1lbnQnLCAwLCB0LCBhdHRhY2htZW50c0NvdW50KSxcbiAgICAgIGF0dGFjaG1lbnRzQ291bnQsXG4gICAgfVxuICB9XG4gIHJldHVybiB7IHBoYXNlOiAnZ2VuZXJhdGluZycsIG1lc3NhZ2U6IHQoR0VORVJBVElOR19NRVNTQUdFX0tFWVNbMF0pIH1cbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVTdHJlYW1Mb2FkaW5nRGlzcGxheSA9IChwYXJhbXM6IHtcbiAgc3RyZWFtQWN0aXZpdHk6IFN0cmVhbUFjdGl2aXR5IHwgbnVsbFxuICBsb2FkaW5nTWVzc2FnZTogc3RyaW5nIHwgbnVsbFxuICBhY3RpdmVMb2FkaW5nczogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICB3YWl0aW5nUmVzcG9uc2U6IGJvb2xlYW5cbiAgaXNXZWJTZWFyY2hBY3RpdmU6IGJvb2xlYW5cbiAgaXNEZWVwU2VhcmNoQWN0aXZlOiBib29sZWFuXG4gIGhhc0F0dGFjaG1lbnRzOiBib29sZWFuXG4gIGF0dGFjaG1lbnRzQ291bnQ/OiBudW1iZXJcbiAgdDogVHJhbnNsYXRlRm5cbn0pOiBTdHJlYW1BY3Rpdml0eSB8IG51bGwgPT4ge1xuICBpZiAocGFyYW1zLnN0cmVhbUFjdGl2aXR5KSB7XG4gICAgcmV0dXJuIHBhcmFtcy5zdHJlYW1BY3Rpdml0eVxuICB9XG5cbiAgY29uc3QgYWN0aXZlS2V5cyA9IE9iamVjdC5rZXlzKHBhcmFtcy5hY3RpdmVMb2FkaW5ncylcbiAgaWYgKGFjdGl2ZUtleXMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGZpcnN0S2V5ID0gYWN0aXZlS2V5c1swXVxuICAgIGNvbnN0IHJhdyA9IHBhcmFtcy5hY3RpdmVMb2FkaW5nc1tmaXJzdEtleV1cbiAgICBpZiAocmF3ICYmIHJhdyAhPT0gcGFyYW1zLnQoJ2NoYXQucHJvY2Vzc2luZycpKSB7XG4gICAgICBjb25zdCBoaXRsVG9vbCA9IHJlc29sdmVIaXRsVG9vbEZyb21Ob2RlTWVzc2FnZShyYXcpXG4gICAgICBpZiAoaGl0bFRvb2wpIHtcbiAgICAgICAgcmV0dXJuIG1hcEhpdGxUb29sTmFtZVRvU3RyZWFtQWN0aXZpdHkoaGl0bFRvb2wsIHBhcmFtcy50KVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0cmltbWVkID0gcmF3LnRyaW0oKVxuICAgICAgaWYgKHRyaW1tZWQgJiYgIWlzR2VuZXJpY1Jlc3VtZU5vZGVNZXNzYWdlKHRyaW1tZWQpKSB7XG4gICAgICAgIHJldHVybiB7IHBoYXNlOiAnYWN0aW9uJywgbWVzc2FnZTogdHJpbW1lZCB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBtYXBOb2RlTWVzc2FnZVRvU3RyZWFtQWN0aXZpdHkocmF3LCBwYXJhbXMudCwgeyB1c2VSZXN1bWluZ0ZhbGxiYWNrOiB0cnVlIH0pXG4gICAgfVxuICAgIHJldHVybiB7IHBoYXNlOiAncHJvY2Vzc2luZycsIG1lc3NhZ2U6IHBhcmFtcy50KCdjaGF0LnByb2Nlc3NpbmcnKSB9XG4gIH1cblxuICBpZiAocGFyYW1zLmxvYWRpbmdNZXNzYWdlKSB7XG4gICAgaWYgKFxuICAgICAgcGFyYW1zLmxvYWRpbmdNZXNzYWdlID09PSBwYXJhbXMudCgnY2hhdC53cml0aW5nJykgfHxcbiAgICAgIHBhcmFtcy5sb2FkaW5nTWVzc2FnZSA9PT0gcGFyYW1zLnQoV1JJVElOR19BQ1RJVklUWV9NRVNTQUdFX0tFWSlcbiAgICApIHtcbiAgICAgIHJldHVybiBnZXRXcml0aW5nU3RyZWFtQWN0aXZpdHkocGFyYW1zLnQpXG4gICAgfVxuICAgIGlmIChwYXJhbXMubG9hZGluZ01lc3NhZ2UgPT09IHBhcmFtcy50KCdjaGF0LmdlbmVyYXRpbmcnKSkge1xuICAgICAgcmV0dXJuIHsgcGhhc2U6ICdnZW5lcmF0aW5nJywgbWVzc2FnZTogcGFyYW1zLmxvYWRpbmdNZXNzYWdlIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgcGFyYW1zLmxvYWRpbmdNZXNzYWdlID09PSBwYXJhbXMudCgnY2hhdC5nZW5lcmF0aW5nV2ViU2VhcmNoJykgfHxcbiAgICAgIHBhcmFtcy5sb2FkaW5nTWVzc2FnZSA9PT0gcGFyYW1zLnQoJ2NoYXQuZ2VuZXJhdGluZ0RlZXBTZWFyY2gnKSB8fFxuICAgICAgcGFyYW1zLmxvYWRpbmdNZXNzYWdlID09PSBwYXJhbXMudCgnY2hhdC5nZW5lcmF0aW5nQXR0YWNobWVudCcpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZ2V0SW5pdGlhbFN0cmVhbUFjdGl2aXR5KHBhcmFtcy50LCB7XG4gICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBwYXJhbXMubG9hZGluZ01lc3NhZ2UgPT09IHBhcmFtcy50KCdjaGF0LmdlbmVyYXRpbmdXZWJTZWFyY2gnKSxcbiAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBwYXJhbXMubG9hZGluZ01lc3NhZ2UgPT09IHBhcmFtcy50KCdjaGF0LmdlbmVyYXRpbmdEZWVwU2VhcmNoJyksXG4gICAgICAgIGhhc0F0dGFjaG1lbnRzOiBwYXJhbXMubG9hZGluZ01lc3NhZ2UgPT09IHBhcmFtcy50KCdjaGF0LmdlbmVyYXRpbmdBdHRhY2htZW50JyksXG4gICAgICAgIGF0dGFjaG1lbnRzQ291bnQ6IHBhcmFtcy5hdHRhY2htZW50c0NvdW50LFxuICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIHsgcGhhc2U6ICdhY3Rpb24nLCBtZXNzYWdlOiBwYXJhbXMubG9hZGluZ01lc3NhZ2UgfVxuICB9XG5cbiAgaWYgKHBhcmFtcy53YWl0aW5nUmVzcG9uc2UpIHtcbiAgICByZXR1cm4gZ2V0SW5pdGlhbFN0cmVhbUFjdGl2aXR5KHBhcmFtcy50LCB7XG4gICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogcGFyYW1zLmlzV2ViU2VhcmNoQWN0aXZlLFxuICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBwYXJhbXMuaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgICAgaGFzQXR0YWNobWVudHM6IHBhcmFtcy5oYXNBdHRhY2htZW50cyxcbiAgICAgIGF0dGFjaG1lbnRzQ291bnQ6IHBhcmFtcy5hdHRhY2htZW50c0NvdW50LFxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgY29uc3QgaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCA9IChtZXNzYWdlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4gPT5cbiAgdHlwZW9mIG1lc3NhZ2VJZCA9PT0gJ3N0cmluZycgJiYgbWVzc2FnZUlkLmluY2x1ZGVzKCctc3RyZWFtaW5nJylcbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUVBLFNBQVNBLHFCQUFxQixRQUFRLGlCQUFpQjtBQUl2RCxJQUFNQyxxQkFBcUIsR0FBRyxDQUM1QixrQ0FBa0MsRUFDbEMsa0NBQWtDLEVBQ2xDLGlDQUFpQyxDQUN6QjtBQUVWLElBQU1DLHVCQUF1QixHQUFHLENBQzlCLHNDQUFzQyxFQUN0QyxzQ0FBc0MsRUFDdEMsb0NBQW9DLENBQzVCO0FBRVYsSUFBTUMsbUJBQW1CLEdBQUcsQ0FBQywrQkFBK0IsRUFBRSxrQ0FBa0MsQ0FBVTtBQUUxRyxJQUFNQyx3QkFBd0IsR0FBRyxDQUMvQixvQ0FBb0MsRUFDcEMsd0NBQXdDLENBQ2hDO0FBRVYsSUFBTUMsdUJBQXVCLEdBQUcsQ0FBQyxrQ0FBa0MsRUFBRSxxQ0FBcUMsQ0FBVTtBQUVwSCxJQUFNQyw4QkFBOEIsR0FBRyxDQUNyQyx3Q0FBd0MsRUFDeEMsMkNBQTJDLENBQ25DO0FBRVYsT0FBTyxJQUFNQyw0QkFBNEIsR0FBRyxpQ0FBMEM7O0FBRXRGO0FBQ0EsSUFBTUMsdUJBQStDLEdBQUc7RUFDdERDLFdBQVcsRUFBRSw0QkFBNEI7RUFDekNDLFVBQVUsRUFBRSw0QkFBNEI7RUFDeENDLGtCQUFrQixFQUFFLGtDQUFrQztFQUN0REMsWUFBWSxFQUFFLDZCQUE2QjtFQUMzQ0MsVUFBVSxFQUFFLDRCQUE0QjtFQUN4Q0MsU0FBUyxFQUFFLDJCQUEyQjtFQUN0Q0MsZ0JBQWdCLEVBQUUsaUNBQWlDO0VBQ25EQyxXQUFXLEVBQUUsNEJBQTRCO0VB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LGlCQUFpQixDQUFDLEVBQUU7TUFDekQsT0FBTztRQUFFRyxLQUFLLEVBQUUsWUFBWTtRQUFFWixPQUFPLEVBQUVrRixNQUFNLENBQUNPO01BQWUsQ0FBQztJQUNoRTtJQUNBLElBQ0VQLE1BQU0sQ0FBQ08sY0FBYyxLQUFLUCxNQUFNLENBQUN6RSxDQUFDLENBQUMsMEJBQTBCLENBQUMsSUFDOUR5RSxNQUFNLENBQUNPLGNBQWMsS0FBS1AsTUFBTSxDQUFDekUsQ0FBQyxDQUFDLDJCQUEyQixDQUFDLElBQy9EeUUsTUFBTSxDQUFDTyxjQUFjLEtBQUtQLE1BQU0sQ0FBQ3pFLENBQUMsQ0FBQywyQkFBMkIsQ0FBQyxFQUMvRDtNQUNBLE9BQU9tRSx3QkFBd0IsQ0FBQ00sTUFBTSxDQUFDekUsQ0FBQyxFQUFFO1FBQ3hDb0UsaUJBQWlCLEVBQUVLLE1BQU0sQ0FBQ08sY0FBYyxLQUFLUCxNQUFNLENBQUN6RSxDQUFDLENBQUMsMEJBQTBCLENBQUM7UUFDakZxRSxrQkFBa0IsRUFBRUksTUFBTSxDQUFDTyxjQUFjLEtBQUtQLE1BQU0sQ0FBQ3pFLENBQUMsQ0FBQywyQkFBMkIsQ0FBQztRQUNuRnNFLGNBQWMsRUFBRUcsTUFBTSxDQUFDTyxjQUFjLEtBQUtQLE1BQU0sQ0FBQ3pFLENBQUMsQ0FBQywyQkFBMkIsQ0FBQztRQUMvRWdELGdCQUFnQixFQUFFeUIsTUFBTSxDQUFDekI7TUFDM0IsQ0FBQyxDQUFDO0lBQ0o7SUFDQSxPQUFPO01BQUU3QyxLQUFLLEVBQUUsUUFBUTtNQUFFWixPQUFPLEVBQUVrRixNQUFNLENBQUNPO0lBQWUsQ0FBQztFQUM1RDtFQUVBLElBQUlQLE1BQU0sQ0FBQ1EsZUFBZSxFQUFFO0lBQzFCLE9BQU9kLHdCQUF3QixDQUFDTSxNQUFNLENBQUN6RSxDQUFDLEVBQUU7TUFDeENvRSxpQkFBaUIsRUFBRUssTUFBTSxDQUFDTCxpQkFBaUI7TUFDM0NDLGtCQUFrQixFQUFFSSxNQUFNLENBQUNKLGtCQUFrQjtNQUM3Q0MsY0FBYyxFQUFFRyxNQUFNLENBQUNILGNBQWM7TUFDckN0QixnQkFBZ0IsRUFBRXlCLE1BQU0sQ0FBQ3pCO0lBQzNCLENBQUMsQ0FBQztFQUNKO0VBRUEsT0FBTyxJQUFJO0FBQ2IsQ0FBQztBQUVELE9BQU8sSUFBTWtDLCtCQUErQixHQUFHLFNBQWxDQSwrQkFBK0JBLENBQUlDLFNBQTZCO0VBQUEsT0FDM0UsT0FBT0EsU0FBUyxLQUFLLFFBQVEsSUFBSUEsU0FBUyxDQUFDeEUsUUFBUSxDQUFDLFlBQVksQ0FBQztBQUFBIiwiaWdub3JlTGlzdCI6W119
|
|
389
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJub3JtYWxpemVIaXRsVG9vbE5hbWUiLCJUSElOS0lOR19NRVNTQUdFX0tFWVMiLCJHRU5FUkFUSU5HX01FU1NBR0VfS0VZUyIsIlNFQVJDSF9NRVNTQUdFX0tFWVMiLCJERUVQX1NFQVJDSF9NRVNTQUdFX0tFWVMiLCJBVFRBQ0hNRU5UX01FU1NBR0VfS0VZUyIsIkFUVEFDSE1FTlRfTUVTU0FHRV9LRVlTX1BMVVJBTCIsIldSSVRJTkdfQUNUSVZJVFlfTUVTU0FHRV9LRVkiLCJISVRMX1RPT0xfQUNUSVZJVFlfS0VZUyIsImNyZWF0ZV90YXNrIiwiY2xvbmVfdGFzayIsImNyZWF0ZV90YXNrc19iYXRjaCIsImNyZWF0ZV9hZ2VudCIsImVkaXRfYWdlbnQiLCJlZGl0X3Rhc2siLCJlZGl0X3Rhc2tzX2JhdGNoIiwiZGVsZXRlX3Rhc2siLCJkZWxldGVfdGFza3NfYmF0Y2giLCJ0YXNrX2Fzc2lnbiIsInRhc2tfdW5hc3NpZ24iLCJhc3NpZ25fdGFza19sYWJlbCIsImNyZWF0ZV9sYWJlbHMiLCJlZGl0X3Byb2plY3QiLCJjcmVhdGVfY2hlY2tsaXN0X2l0ZW0iLCJ1cGRhdGVfdGFza190eXBlIiwidXBkYXRlX2VzdGltYXRlZF9ob3VycyIsInVwZGF0ZV9kZWxpdmVyYWJsZSIsImNyZWF0ZV9ob3VyIiwiY3JlYXRlX2NoZWNrbGlzdCIsImdldF90YXNrX2RhdGVfaG91cnMiLCJjb25maWd1cmVfYWdlbnRfYWNjZXNzIiwic2VuZF90YXNrX21lc3NhZ2UiLCJkZWxldGVfY2hlY2tsaXN0X2l0ZW0iLCJyZW1vdmVfdGFza190eXBlIiwicmVtb3ZlX3Rhc2tfbGFiZWwiLCJjb3VudF9kZWxpdmVyYWJsZSIsImNyZWF0ZV9yZXdvcmsiLCJ1cGRhdGVfcmV3b3JrIiwiSElUTF9UT09MX05BTUVTX0JZX1NQRUNJRklDSVRZIiwiT2JqZWN0Iiwia2V5cyIsInNvcnQiLCJhIiwiYiIsImxlbmd0aCIsImxvb2tzTGlrZVJhd1Rvb2xOYW1lIiwibWVzc2FnZSIsInRlc3QiLCJ0cmltIiwiaXNHZW5lcmljUmVzdW1lTm9kZU1lc3NhZ2UiLCJub3JtYWxpemVkIiwidG9Mb3dlckNhc2UiLCJzdGFydHNXaXRoIiwibWFwSGl0bFRvb2xOYW1lVG9TdHJlYW1BY3Rpdml0eSIsInRvb2xOYW1lIiwidCIsIm9wdGlvbnMiLCJrZXkiLCJjb25zb2xlIiwiaW5mbyIsInBoYXNlIiwidXNlUmVzdW1pbmdGYWxsYmFjayIsInJlc29sdmVIaXRsVG9vbEZyb21Ob2RlTWVzc2FnZSIsIm5vZGVNZXNzYWdlIiwiYXNUb29sTmFtZSIsInJlcGxhY2UiLCJtYXRjaGVkVG9vbCIsImZpbmQiLCJpbmNsdWRlcyIsIm1hcE5vZGVNZXNzYWdlVG9TdHJlYW1BY3Rpdml0eSIsImhpdGxUb29sIiwidHJpbW1lZE1lc3NhZ2UiLCJyZXNvbHZlUGVuZGluZ0FjdGlvbnNGb3JUaHJlYWQiLCJjb250ZXh0IiwidGhyZWFkSWQiLCJfcmVmIiwiX2NvbnRleHQkcGVuZGluZ0FjdGlvIiwiX2NvbnRleHQkYXBwcm92YWwiLCJfY29udGV4dCR0aHJlYWRJZHMiLCJwZW5kaW5nIiwicGVuZGluZ0FjdGlvbnMiLCJhcHByb3ZhbCIsInBlbmRpbmdfYWN0aW9ucyIsImZvclRocmVhZCIsImZpbHRlciIsImFjdGlvbiIsInRocmVhZF9pZCIsInRocmVhZElkcyIsIl9jb250ZXh0JHRocmVhZElkczIiLCJkZXRlY3RUb29sc0Zyb21QZW5kaW5nQWN0aW9ucyIsImFjdGlvbnMiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJTZXQiLCJtYXAiLCJ0b29sX25hbWUiLCJCb29sZWFuIiwicmVzb2x2ZUhpdGxOb2RlU3RyZWFtQWN0aXZpdHkiLCJwZW5kaW5nRm9yVGhyZWFkIiwiZGV0ZWN0ZWRUb29scyIsInRyaW1tZWROb2RlTWVzc2FnZSIsImlzUmF3IiwiaXNHZW5lcmljIiwibm9kZU1lc3NhZ2VDb250YWluc1Rvb2wiLCJzb21lIiwidG9vbCIsImFjdGl2aXR5RnJvbU5vZGVNZXNzYWdlIiwiaGFzUGVuZGluZ0FjdGlvbnMiLCJyZXNvbHZlSW5pdGlhbEhpdGxTdHJlYW1BY3Rpdml0eSIsIkFDVElWSVRZX01FU1NBR0VfUk9UQVRFX01TIiwiUk9UQVRBQkxFX1BIQVNFUyIsImdldE1lc3NhZ2VLZXlzRm9yUGhhc2UiLCJhdHRhY2htZW50c0NvdW50IiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiZ2V0U3RyZWFtQWN0aXZpdHlNZXNzYWdlQXRJbmRleCIsImluZGV4IiwiY2xhbXBlZEluZGV4IiwiTWF0aCIsIm1pbiIsIm1heCIsImdldFRoaW5raW5nTG9hZGluZ01lc3NhZ2UiLCJnZXRHZW5lcmF0aW5nTG9hZGluZ01lc3NhZ2UiLCJjYW5BZHZhbmNlU3RyZWFtQWN0aXZpdHlNZXNzYWdlIiwiY3VycmVudEluZGV4IiwiYWR2YW5jZVN0cmVhbUFjdGl2aXR5TWVzc2FnZSIsImFjdGl2aXR5IiwibmV4dEluZGV4IiwiX29iamVjdFNwcmVhZCIsImNhblJvdGF0ZVN0cmVhbUFjdGl2aXR5UGhhc2UiLCJnZXRXcml0aW5nU3RyZWFtQWN0aXZpdHkiLCJnZXRJbml0aWFsU3RyZWFtQWN0aXZpdHkiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsImhhc0F0dGFjaG1lbnRzIiwiX29wdGlvbnMkYXR0YWNobWVudHNDIiwicmVzb2x2ZVN0cmVhbUxvYWRpbmdEaXNwbGF5IiwicGFyYW1zIiwic3RyZWFtQWN0aXZpdHkiLCJhY3RpdmVLZXlzIiwiYWN0aXZlTG9hZGluZ3MiLCJmaXJzdEtleSIsInJhdyIsInRyaW1tZWQiLCJsb29rc0xpa2VSYXciLCJsb2FkaW5nTWVzc2FnZSIsIndhaXRpbmdSZXNwb25zZSIsImlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQiLCJtZXNzYWdlSWQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvc3RyZWFtQWN0aXZpdHlNZXNzYWdlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFN0cmVhbUFjdGl2aXR5LCBTdHJlYW1BY3Rpdml0eVBoYXNlIH0gZnJvbSAnLi4vdHlwZXMvc3RyZWFtQWN0aXZpdHknXG5pbXBvcnQgdHlwZSB7IEFwcHJvdmFsUmVxdWVzdCwgUGVuZGluZ0FjdGlvbiB9IGZyb20gJy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQgeyBub3JtYWxpemVIaXRsVG9vbE5hbWUgfSBmcm9tICcuL2hpdGxBbmFseXRpY3MnXG5cbnR5cGUgVHJhbnNsYXRlRm4gPSAoa2V5OiBzdHJpbmcpID0+IHN0cmluZ1xuXG5jb25zdCBUSElOS0lOR19NRVNTQUdFX0tFWVMgPSBbXG4gICdjaGF0LmFjdGl2aXR5LnRoaW5raW5nLmFuYWx5emluZycsXG4gICdjaGF0LmFjdGl2aXR5LnRoaW5raW5nLnJldmlld2luZycsXG4gICdjaGF0LmFjdGl2aXR5LnRoaW5raW5nLnBsYW5uaW5nJyxcbl0gYXMgY29uc3RcblxuY29uc3QgR0VORVJBVElOR19NRVNTQUdFX0tFWVMgPSBbXG4gICdjaGF0LmFjdGl2aXR5LmdlbmVyYXRpbmcuY29uc2lkZXJpbmcnLFxuICAnY2hhdC5hY3Rpdml0eS5nZW5lcmF0aW5nLmFsbW9zdFJlYWR5JyxcbiAgJ2NoYXQuYWN0aXZpdHkuZ2VuZXJhdGluZy5wcmVwYXJpbmcnLFxuXSBhcyBjb25zdFxuXG5jb25zdCBTRUFSQ0hfTUVTU0FHRV9LRVlTID0gWydjaGF0LmFjdGl2aXR5LnNlYXJjaC5zY2FubmluZycsICdjaGF0LmFjdGl2aXR5LnNlYXJjaC5zdW1tYXJpemluZyddIGFzIGNvbnN0XG5cbmNvbnN0IERFRVBfU0VBUkNIX01FU1NBR0VfS0VZUyA9IFtcbiAgJ2NoYXQuYWN0aXZpdHkuZGVlcFNlYXJjaC5leHBsb3JpbmcnLFxuICAnY2hhdC5hY3Rpdml0eS5kZWVwU2VhcmNoLmNyb3NzQ2hlY2tpbmcnLFxuXSBhcyBjb25zdFxuXG5jb25zdCBBVFRBQ0hNRU5UX01FU1NBR0VfS0VZUyA9IFsnY2hhdC5hY3Rpdml0eS5hdHRhY2htZW50LnJlYWRpbmcnLCAnY2hhdC5hY3Rpdml0eS5hdHRhY2htZW50LmV4dHJhY3RpbmcnXSBhcyBjb25zdFxuXG5jb25zdCBBVFRBQ0hNRU5UX01FU1NBR0VfS0VZU19QTFVSQUwgPSBbXG4gICdjaGF0LmFjdGl2aXR5LmF0dGFjaG1lbnQucmVhZGluZ1BsdXJhbCcsXG4gICdjaGF0LmFjdGl2aXR5LmF0dGFjaG1lbnQuZXh0cmFjdGluZ1BsdXJhbCcsXG5dIGFzIGNvbnN0XG5cbmV4cG9ydCBjb25zdCBXUklUSU5HX0FDVElWSVRZX01FU1NBR0VfS0VZID0gJ2NoYXQuYWN0aXZpdHkud3JpdGluZy5jb21wb3NpbmcnIGFzIGNvbnN0XG5cbi8qKiBUb29scyBISVRMIC8gbm9kZSBTU0Ug4oaSIGtleSBpMThuIGRlbCBpbmRpY2Fkb3IgZGUgYWN0aXZpZGFkICh0aWVtcG8gcHJlc2VudGUgY29udGludW8pLiAqL1xuY29uc3QgSElUTF9UT09MX0FDVElWSVRZX0tFWVM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIGNyZWF0ZV90YXNrOiAnY2hhdC5hY3Rpdml0eS5jcmVhdGluZ1Rhc2snLFxuICBjbG9uZV90YXNrOiAnY2hhdC5hY3Rpdml0eS5jcmVhdGluZ1Rhc2snLFxuICBjcmVhdGVfdGFza3NfYmF0Y2g6ICdjaGF0LmFjdGl2aXR5LmNyZWF0aW5nVGFza3NCYXRjaCcsXG4gIGNyZWF0ZV9hZ2VudDogJ2NoYXQuYWN0aXZpdHkuY3JlYXRpbmdBZ2VudCcsXG4gIGVkaXRfYWdlbnQ6ICdjaGF0LmFjdGl2aXR5LmVkaXRpbmdBZ2VudCcsXG4gIGVkaXRfdGFzazogJ2NoYXQuYWN0aXZpdHkuZWRpdGluZ1Rhc2snLFxuICBlZGl0X3Rhc2tzX2JhdGNoOiAnY2hhdC5hY3Rpdml0eS5lZGl0aW5nVGFza3NCYXRjaCcsXG4gIGRlbGV0ZV90YXNrOiAnY2hhdC5hY3Rpdml0eS5kZWxldGluZ1Rhc2snLFxuICBkZWxldGVfdGFza3NfYmF0Y2g6ICdjaGF0LmFjdGl2aXR5LmRlbGV0aW5nVGFza3NCYXRjaCcsXG4gIHRhc2tfYXNzaWduOiAnY2hhdC5hY3Rpdml0eS5hc3NpZ25pbmdVc2VyJyxcbiAgdGFza191bmFzc2lnbjogJ2NoYXQuYWN0aXZpdHkudW5hc3NpZ25pbmdVc2VyJyxcbiAgYXNzaWduX3Rhc2tfbGFiZWw6ICdjaGF0LmFjdGl2aXR5LmFzc2lnbmluZ0xhYmVsJyxcbiAgY3JlYXRlX2xhYmVsczogJ2NoYXQuYWN0aXZpdHkuY3JlYXRpbmdMYWJlbCcsXG4gIGVkaXRfcHJvamVjdDogJ2NoYXQuYWN0aXZpdHkuZWRpdGluZ1Byb2plY3QnLFxuICBjcmVhdGVfY2hlY2tsaXN0X2l0ZW06ICdjaGF0LmFjdGl2aXR5LmNyZWF0aW5nQ2hlY2tsaXN0SXRlbScsXG4gIHVwZGF0ZV90YXNrX3R5cGU6ICdjaGF0LmFjdGl2aXR5LnVwZGF0aW5nVGFza1R5cGUnLFxuICB1cGRhdGVfZXN0aW1hdGVkX2hvdXJzOiAnY2hhdC5hY3Rpdml0eS51cGRhdGluZ0VzdGltYXRlZEhvdXJzJyxcbiAgdXBkYXRlX2RlbGl2ZXJhYmxlOiAnY2hhdC5hY3Rpdml0eS51cGRhdGluZ0RlbGl2ZXJhYmxlJyxcbiAgY3JlYXRlX2hvdXI6ICdjaGF0LmFjdGl2aXR5LmxvZ2dpbmdIb3VycycsXG4gIGNyZWF0ZV9jaGVja2xpc3Q6ICdjaGF0LmFjdGl2aXR5LmNyZWF0aW5nQ2hlY2tsaXN0JyxcbiAgZ2V0X3Rhc2tfZGF0ZV9ob3VyczogJ2NoYXQuYWN0aXZpdHkucXVlcnlpbmdIb3VycycsXG4gIGNvbmZpZ3VyZV9hZ2VudF9hY2Nlc3M6ICdjaGF0LmFjdGl2aXR5LmNvbmZpZ3VyaW5nQWdlbnRBY2Nlc3MnLFxuICBzZW5kX3Rhc2tfbWVzc2FnZTogJ2NoYXQuYWN0aXZpdHkuc2VuZGluZ1Rhc2tNZXNzYWdlJyxcbiAgZGVsZXRlX2NoZWNrbGlzdF9pdGVtOiAnY2hhdC5hY3Rpdml0eS5kZWxldGluZ0NoZWNrbGlzdEl0ZW0nLFxuICByZW1vdmVfdGFza190eXBlOiAnY2hhdC5hY3Rpdml0eS5yZW1vdmluZ1Rhc2tUeXBlJyxcbiAgcmVtb3ZlX3Rhc2tfbGFiZWw6ICdjaGF0LmFjdGl2aXR5LnJlbW92aW5nTGFiZWwnLFxuICBjb3VudF9kZWxpdmVyYWJsZTogJ2NoYXQuYWN0aXZpdHkudXBkYXRpbmdEZWxpdmVyYWJsZUNvdW50JyxcbiAgY3JlYXRlX3Jld29yazogJ2NoYXQuYWN0aXZpdHkuY3JlYXRpbmdSZXdvcmsnLFxuICB1cGRhdGVfcmV3b3JrOiAnY2hhdC5hY3Rpdml0eS51cGRhdGluZ1Jld29yaycsXG59XG5cbmNvbnN0IEhJVExfVE9PTF9OQU1FU19CWV9TUEVDSUZJQ0lUWSA9IE9iamVjdC5rZXlzKEhJVExfVE9PTF9BQ1RJVklUWV9LRVlTKS5zb3J0KChhLCBiKSA9PiBiLmxlbmd0aCAtIGEubGVuZ3RoKVxuXG4vKipcbiAqIERldGVjdGEgaWRlbnRpZmljYWRvcmVzIGNydWRvcyBkZSB0b29sIChzbmFrZV9jYXNlIC8ga2ViYWItY2FzZSBzaW4gZXNwYWNpb3MpIHF1ZSBlbCBiYWNrZW5kXG4gKiBwdWVkZSBlbnZpYXIgY3VhbmRvIGHDum4gbm8gaGF5IHRyYWR1Y2Npw7NuLiBObyBkZWJlbiBtb3N0cmFyc2UgYWwgdXN1YXJpbzogc2UgdXNhIHVuIGZhbGxiYWNrXG4gKiBnZW7DqXJpY28gaGFzdGEgcXVlIGVsIG5vbWJyZSBzZSBhZ3JlZ3VlIGFsIGRpY2Npb25hcmlvLlxuICovXG5jb25zdCBsb29rc0xpa2VSYXdUb29sTmFtZSA9IChtZXNzYWdlOiBzdHJpbmcpOiBib29sZWFuID0+IC9eW2EtejAtOV0rKD86W18tXVthLXowLTldKykrJC9pLnRlc3QobWVzc2FnZS50cmltKCkpXG5cbi8qKiBNZW5zYWplcyBnZW7DqXJpY29zIGRlbCBiYWNrZW5kIGN1YW5kbyBubyBoYXkgZGV0YWxsZSBkZSB0b29sIChjb250aW51ZS10aHJlYWQpLiAqL1xuY29uc3QgaXNHZW5lcmljUmVzdW1lTm9kZU1lc3NhZ2UgPSAobWVzc2FnZTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBtZXNzYWdlLnRyaW0oKS50b0xvd2VyQ2FzZSgpXG4gIHJldHVybiAoXG4gICAgbm9ybWFsaXplZC5zdGFydHNXaXRoKCdlamVjdXRhbmRvIGFjY2nDs24gYXByb2JhZGEnKSB8fFxuICAgIG5vcm1hbGl6ZWQuc3RhcnRzV2l0aCgnZXhlY3V0aW5nIGFwcHJvdmVkIGFjdGlvbicpIHx8XG4gICAgbm9ybWFsaXplZC5zdGFydHNXaXRoKCdleGVjdXRhbmRvIGHDp8OjbyBhcHJvdmFkYScpXG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IG1hcEhpdGxUb29sTmFtZVRvU3RyZWFtQWN0aXZpdHkgPSAoXG4gIHRvb2xOYW1lOiBzdHJpbmcsXG4gIHQ6IFRyYW5zbGF0ZUZuLFxuICBvcHRpb25zPzogeyB1c2VSZXN1bWluZ0ZhbGxiYWNrPzogYm9vbGVhbiB9XG4pOiBTdHJlYW1BY3Rpdml0eSA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVIaXRsVG9vbE5hbWUodG9vbE5hbWUpXG4gIGNvbnN0IGtleSA9IEhJVExfVE9PTF9BQ1RJVklUWV9LRVlTW25vcm1hbGl6ZWRdXG4gIGlmIChrZXkpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gdChrZXkpXG4gICAgY29uc29sZS5pbmZvKCdbQUFJOm1hcEhpdGxUb29sXSBtYXBwZWQnLCB7IHRvb2xOYW1lLCBub3JtYWxpemVkLCBrZXksIG1lc3NhZ2UgfSlcbiAgICByZXR1cm4geyBwaGFzZTogJ2FjdGlvbicsIG1lc3NhZ2UgfVxuICB9XG4gIGNvbnNvbGUuaW5mbygnW0FBSTptYXBIaXRsVG9vbF0gc2luIG1hcGVvJywge1xuICAgIHRvb2xOYW1lLFxuICAgIG5vcm1hbGl6ZWQsXG4gICAgdXNlUmVzdW1pbmdGYWxsYmFjazogb3B0aW9ucz8udXNlUmVzdW1pbmdGYWxsYmFjayxcbiAgfSlcbiAgaWYgKG9wdGlvbnM/LnVzZVJlc3VtaW5nRmFsbGJhY2spIHtcbiAgICByZXR1cm4geyBwaGFzZTogJ2FjdGlvbicsIG1lc3NhZ2U6IHQoJ2NoYXQuYWN0aXZpdHkucmVzdW1pbmdBY3Rpb24nKSB9XG4gIH1cbiAgcmV0dXJuIHsgcGhhc2U6ICdhY3Rpb24nLCBtZXNzYWdlOiB0KCdjaGF0LmV4ZWN1dGluZ0FjdGlvbicpIH1cbn1cblxuY29uc3QgcmVzb2x2ZUhpdGxUb29sRnJvbU5vZGVNZXNzYWdlID0gKG5vZGVNZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vZGVNZXNzYWdlLnRvTG93ZXJDYXNlKCkudHJpbSgpXG4gIGlmICghbm9ybWFsaXplZCkgcmV0dXJuIG51bGxcblxuICBpZiAoSElUTF9UT09MX0FDVElWSVRZX0tFWVNbbm9ybWFsaXplZF0pIHtcbiAgICByZXR1cm4gbm9ybWFsaXplZFxuICB9XG5cbiAgY29uc3QgYXNUb29sTmFtZSA9IG5vcm1hbGl6ZUhpdGxUb29sTmFtZShub3JtYWxpemVkLnJlcGxhY2UoL1xccysvZywgJ18nKSlcbiAgaWYgKEhJVExfVE9PTF9BQ1RJVklUWV9LRVlTW2FzVG9vbE5hbWVdKSB7XG4gICAgcmV0dXJuIGFzVG9vbE5hbWVcbiAgfVxuXG4gIGNvbnN0IG1hdGNoZWRUb29sID0gSElUTF9UT09MX05BTUVTX0JZX1NQRUNJRklDSVRZLmZpbmQodG9vbE5hbWUgPT4gbm9ybWFsaXplZC5pbmNsdWRlcyh0b29sTmFtZSkpXG4gIHJldHVybiBtYXRjaGVkVG9vbCA/PyBudWxsXG59XG5cbmV4cG9ydCBjb25zdCBtYXBOb2RlTWVzc2FnZVRvU3RyZWFtQWN0aXZpdHkgPSAoXG4gIG5vZGVNZXNzYWdlOiBzdHJpbmcsXG4gIHQ6IFRyYW5zbGF0ZUZuLFxuICBvcHRpb25zPzogeyB1c2VSZXN1bWluZ0ZhbGxiYWNrPzogYm9vbGVhbiB9XG4pOiBTdHJlYW1BY3Rpdml0eSA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub2RlTWVzc2FnZS50b0xvd2VyQ2FzZSgpXG5cbiAgY29uc3QgaGl0bFRvb2wgPSByZXNvbHZlSGl0bFRvb2xGcm9tTm9kZU1lc3NhZ2Uobm9kZU1lc3NhZ2UpXG4gIGlmIChoaXRsVG9vbCkge1xuICAgIHJldHVybiBtYXBIaXRsVG9vbE5hbWVUb1N0cmVhbUFjdGl2aXR5KGhpdGxUb29sLCB0LCBvcHRpb25zKVxuICB9XG5cbiAgaWYgKFxuICAgIG5vcm1hbGl6ZWQuaW5jbHVkZXMoJ3Jlc3BvbnNlX2ZpbGVfZ2VuZXJhdGlvbicpIHx8XG4gICAgbm9ybWFsaXplZC5pbmNsdWRlcygnZ2VuZXJhbmRvIGFyY2hpdm8nKSB8fFxuICAgIG5vcm1hbGl6ZWQuaW5jbHVkZXMoJ2dlbmVyYXRpbmcgZmlsZScpXG4gICkge1xuICAgIHJldHVybiB7IHBoYXNlOiAnYWN0aW9uJywgbWVzc2FnZTogdCgnY2hhdC5hY3Rpdml0eS5nZW5lcmF0aW5nRmlsZScpIH1cbiAgfVxuICBpZiAoXG4gICAgbm9ybWFsaXplZC5pbmNsdWRlcygndGF2aWx5JykgfHxcbiAgICBub3JtYWxpemVkLmluY2x1ZGVzKCdzZWFyY2hfd2ViJykgfHxcbiAgICBub3JtYWxpemVkLmluY2x1ZGVzKCdidXNjYW5kbyBlbiBsYSB3ZWInKSB8fFxuICAgIG5vcm1hbGl6ZWQuaW5jbHVkZXMoJ3NlYXJjaGluZyB0aGUgd2ViJylcbiAgKSB7XG4gICAgcmV0dXJuIHsgcGhhc2U6ICdzZWFyY2gnLCBtZXNzYWdlOiB0KFNFQVJDSF9NRVNTQUdFX0tFWVNbMF0pIH1cbiAgfVxuXG4gIGNvbnN0IHRyaW1tZWRNZXNzYWdlID0gbm9kZU1lc3NhZ2UudHJpbSgpXG4gIGlmICh0cmltbWVkTWVzc2FnZSAmJiAhaXNHZW5lcmljUmVzdW1lTm9kZU1lc3NhZ2UodHJpbW1lZE1lc3NhZ2UpICYmICFsb29rc0xpa2VSYXdUb29sTmFtZSh0cmltbWVkTWVzc2FnZSkpIHtcbiAgICBjb25zb2xlLmluZm8oJ1tBQUk6bWFwTm9kZU1zZ10gdXNhbmRvIHRleHRvIGNydWRvIGRlbCBiYWNrZW5kIChubyBlcyB0b29sIG5hbWUgbmkgZ2Vuw6lyaWNvKTonLCB0cmltbWVkTWVzc2FnZSlcbiAgICByZXR1cm4geyBwaGFzZTogJ2FjdGlvbicsIG1lc3NhZ2U6IHRyaW1tZWRNZXNzYWdlIH1cbiAgfVxuXG4gIGlmIChpc0dlbmVyaWNSZXN1bWVOb2RlTWVzc2FnZSh0cmltbWVkTWVzc2FnZSkgfHwgb3B0aW9ucz8udXNlUmVzdW1pbmdGYWxsYmFjaykge1xuICAgIHJldHVybiB7IHBoYXNlOiAnYWN0aW9uJywgbWVzc2FnZTogdCgnY2hhdC5hY3Rpdml0eS5yZXN1bWluZ0FjdGlvbicpIH1cbiAgfVxuICByZXR1cm4geyBwaGFzZTogJ2FjdGlvbicsIG1lc3NhZ2U6IHQoJ2NoYXQuZXhlY3V0aW5nQWN0aW9uJykgfVxufVxuXG5leHBvcnQgdHlwZSBIaXRsRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgbWVzc2FnZUlkPzogc3RyaW5nXG4gIG1lc3NhZ2VUZXh0Pzogc3RyaW5nXG4gIGFwcHJvdmFsPzogQXBwcm92YWxSZXF1ZXN0XG4gIHBlbmRpbmdBY3Rpb25zPzogUGVuZGluZ0FjdGlvbltdXG4gIHRocmVhZElkcz86IHN0cmluZ1tdXG59XG5cbmNvbnN0IHJlc29sdmVQZW5kaW5nQWN0aW9uc0ZvclRocmVhZCA9IChcbiAgY29udGV4dDogSGl0bEV4ZWN1dGlvbkNvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkLFxuICB0aHJlYWRJZD86IHN0cmluZ1xuKTogUGVuZGluZ0FjdGlvbltdID0+IHtcbiAgY29uc3QgcGVuZGluZyA9IGNvbnRleHQ/LnBlbmRpbmdBY3Rpb25zID8/IGNvbnRleHQ/LmFwcHJvdmFsPy5wZW5kaW5nX2FjdGlvbnMgPz8gW11cbiAgaWYgKCFwZW5kaW5nLmxlbmd0aCkgcmV0dXJuIFtdXG5cbiAgaWYgKHRocmVhZElkKSB7XG4gICAgY29uc3QgZm9yVGhyZWFkID0gcGVuZGluZy5maWx0ZXIoYWN0aW9uID0+IGFjdGlvbi50aHJlYWRfaWQgPT09IHRocmVhZElkKVxuICAgIGlmIChmb3JUaHJlYWQubGVuZ3RoKSByZXR1cm4gZm9yVGhyZWFkXG4gIH1cblxuICBpZiAoY29udGV4dD8udGhyZWFkSWRzPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gcGVuZGluZy5maWx0ZXIoYWN0aW9uID0+IGNvbnRleHQudGhyZWFkSWRzPy5pbmNsdWRlcyhhY3Rpb24udGhyZWFkX2lkKSlcbiAgfVxuXG4gIHJldHVybiBwZW5kaW5nXG59XG5cbmNvbnN0IGRldGVjdFRvb2xzRnJvbVBlbmRpbmdBY3Rpb25zID0gKGFjdGlvbnM6IFBlbmRpbmdBY3Rpb25bXSk6IHN0cmluZ1tdID0+IFtcbiAgLi4ubmV3IFNldChhY3Rpb25zLm1hcChhY3Rpb24gPT4gbm9ybWFsaXplSGl0bFRvb2xOYW1lKGFjdGlvbi50b29sX25hbWUpKS5maWx0ZXIoQm9vbGVhbikpLFxuXVxuXG4vKiogUmVzdWVsdmUgaW5kaWNhZG9yIEhJVEwgcHJpb3JpemFuZG8gcGVuZGluZ19hY3Rpb25zIGRlbCBtZW5zYWplIGRlIGFwcm9iYWNpw7NuIGFudGVyaW9yLiAqL1xuZXhwb3J0IGNvbnN0IHJlc29sdmVIaXRsTm9kZVN0cmVhbUFjdGl2aXR5ID0gKFxuICBub2RlTWVzc2FnZTogc3RyaW5nLFxuICB0OiBUcmFuc2xhdGVGbixcbiAgY29udGV4dD86IEhpdGxFeGVjdXRpb25Db250ZXh0IHwgbnVsbCxcbiAgdGhyZWFkSWQ/OiBzdHJpbmcsXG4gIG9wdGlvbnM/OiB7IHVzZVJlc3VtaW5nRmFsbGJhY2s/OiBib29sZWFuIH1cbik6IFN0cmVhbUFjdGl2aXR5ID0+IHtcbiAgY29uc3QgcGVuZGluZ0ZvclRocmVhZCA9IHJlc29sdmVQZW5kaW5nQWN0aW9uc0ZvclRocmVhZChjb250ZXh0LCB0aHJlYWRJZClcbiAgY29uc3QgZGV0ZWN0ZWRUb29scyA9IGRldGVjdFRvb2xzRnJvbVBlbmRpbmdBY3Rpb25zKHBlbmRpbmdGb3JUaHJlYWQpXG5cbiAgY29uc3QgdHJpbW1lZE5vZGVNZXNzYWdlID0gbm9kZU1lc3NhZ2UudHJpbSgpXG4gIGNvbnN0IGlzUmF3ID0gbG9va3NMaWtlUmF3VG9vbE5hbWUodHJpbW1lZE5vZGVNZXNzYWdlKVxuICBjb25zdCBpc0dlbmVyaWMgPSBpc0dlbmVyaWNSZXN1bWVOb2RlTWVzc2FnZSh0cmltbWVkTm9kZU1lc3NhZ2UpXG4gIC8vIEVsIGJhY2tlbmQgZW52w61hIGZyYXNlcyBjb21vIFwiRWplY3V0YW5kbyBhc3NpZ25fdGFza19sYWJlbC4uLlwiIHF1ZSBjb250aWVuZW4gZWwgbm9tYnJlXG4gIC8vIGNydWRvIGRlIGxhIHRvb2wg4oCUIG5vIHNvbiBtZW5zYWplcyBsZWdpYmxlcy4gU2kgZWwgbWVuc2FqZSBjb250aWVuZSBhbGd1bm8gZGUgbG9zIHRvb2xzXG4gIC8vIGRldGVjdGFkb3MsIHByZWZlcmltb3MgZWwgbWFwZW8gZGVsIGRpY2Npb25hcmlvLlxuICBjb25zdCBub2RlTWVzc2FnZUNvbnRhaW5zVG9vbCA9XG4gICAgZGV0ZWN0ZWRUb29scy5sZW5ndGggPj0gMSAmJiBkZXRlY3RlZFRvb2xzLnNvbWUodG9vbCA9PiB0cmltbWVkTm9kZU1lc3NhZ2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0b29sKSlcbiAgY29uc3QgYWN0aXZpdHlGcm9tTm9kZU1lc3NhZ2UgPVxuICAgIHRyaW1tZWROb2RlTWVzc2FnZSAmJiAhaXNHZW5lcmljICYmICFpc1JhdyAmJiAhbm9kZU1lc3NhZ2VDb250YWluc1Rvb2xcbiAgICAgID8geyBwaGFzZTogJ2FjdGlvbicgYXMgY29uc3QsIG1lc3NhZ2U6IHRyaW1tZWROb2RlTWVzc2FnZSB9XG4gICAgICA6IG51bGxcblxuICBjb25zb2xlLmluZm8oJ1tBQUk6cmVzb2x2ZUhpdGxOb2RlXScsIHtcbiAgICBub2RlTWVzc2FnZSxcbiAgICB0cmltbWVkTm9kZU1lc3NhZ2UsXG4gICAgaXNSYXcsXG4gICAgaXNHZW5lcmljLFxuICAgIG5vZGVNZXNzYWdlQ29udGFpbnNUb29sLFxuICAgIGRldGVjdGVkVG9vbHMsXG4gICAgYWN0aXZpdHlGcm9tTm9kZU1lc3NhZ2UsXG4gICAgaGFzUGVuZGluZ0FjdGlvbnM6IHBlbmRpbmdGb3JUaHJlYWQubGVuZ3RoLFxuICAgIHRocmVhZElkLFxuICB9KVxuXG4gIGlmIChkZXRlY3RlZFRvb2xzLmxlbmd0aCA+PSAxKSB7XG4gICAgaWYgKGFjdGl2aXR5RnJvbU5vZGVNZXNzYWdlKSB7XG4gICAgICBjb25zb2xlLmluZm8oJ1tBQUk6cmVzb2x2ZUhpdGxOb2RlXSB1c2FuZG8gYWN0aXZpdHlGcm9tTm9kZU1lc3NhZ2UgKHRleHRvIGxlZ2libGUgZGVsIGJhY2tlbmQpJylcbiAgICAgIHJldHVybiBhY3Rpdml0eUZyb21Ob2RlTWVzc2FnZVxuICAgIH1cbiAgICBjb25zb2xlLmluZm8oJ1tBQUk6cmVzb2x2ZUhpdGxOb2RlXSB1c2FuZG8gZGV0ZWN0ZWRUb29sc1swXTonLCBkZXRlY3RlZFRvb2xzWzBdKVxuICAgIHJldHVybiBtYXBIaXRsVG9vbE5hbWVUb1N0cmVhbUFjdGl2aXR5KGRldGVjdGVkVG9vbHNbMF0sIHQsIG9wdGlvbnMpXG4gIH1cblxuICBjb25zb2xlLmluZm8oJ1tBQUk6cmVzb2x2ZUhpdGxOb2RlXSBzaW4gZGV0ZWN0ZWRUb29scywgZGVsZWdhbmRvIGEgbWFwTm9kZU1lc3NhZ2VUb1N0cmVhbUFjdGl2aXR5JylcbiAgcmV0dXJuIG1hcE5vZGVNZXNzYWdlVG9TdHJlYW1BY3Rpdml0eShub2RlTWVzc2FnZSwgdCwgb3B0aW9ucylcbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5ID0gKFxuICB0OiBUcmFuc2xhdGVGbixcbiAgY29udGV4dD86IEhpdGxFeGVjdXRpb25Db250ZXh0IHwgbnVsbFxuKTogU3RyZWFtQWN0aXZpdHkgPT4ge1xuICBjb25zdCBwZW5kaW5nQWN0aW9ucyA9IHJlc29sdmVQZW5kaW5nQWN0aW9uc0ZvclRocmVhZChjb250ZXh0KVxuICBjb25zdCBkZXRlY3RlZFRvb2xzID0gZGV0ZWN0VG9vbHNGcm9tUGVuZGluZ0FjdGlvbnMocGVuZGluZ0FjdGlvbnMpXG5cbiAgaWYgKGRldGVjdGVkVG9vbHMubGVuZ3RoID49IDEpIHtcbiAgICByZXR1cm4gbWFwSGl0bFRvb2xOYW1lVG9TdHJlYW1BY3Rpdml0eShkZXRlY3RlZFRvb2xzWzBdLCB0LCB7IHVzZVJlc3VtaW5nRmFsbGJhY2s6IHRydWUgfSlcbiAgfVxuXG4gIHJldHVybiB7IHBoYXNlOiAncHJvY2Vzc2luZycsIG1lc3NhZ2U6IHQoJ2NoYXQucHJvY2Vzc2luZycpIH1cbn1cblxuZXhwb3J0IGNvbnN0IEFDVElWSVRZX01FU1NBR0VfUk9UQVRFX01TID0gMzIwMFxuXG5jb25zdCBST1RBVEFCTEVfUEhBU0VTOiBTdHJlYW1BY3Rpdml0eVBoYXNlW10gPSBbJ2dlbmVyYXRpbmcnLCAndGhpbmtpbmcnLCAnc2VhcmNoJywgJ2RlZXBfc2VhcmNoJywgJ2F0dGFjaG1lbnQnXVxuXG5jb25zdCBnZXRNZXNzYWdlS2V5c0ZvclBoYXNlID0gKHBoYXNlOiBTdHJlYW1BY3Rpdml0eVBoYXNlLCBhdHRhY2htZW50c0NvdW50ID0gMCk6IHJlYWRvbmx5IHN0cmluZ1tdIHwgbnVsbCA9PiB7XG4gIHN3aXRjaCAocGhhc2UpIHtcbiAgICBjYXNlICdnZW5lcmF0aW5nJzpcbiAgICAgIHJldHVybiBHRU5FUkFUSU5HX01FU1NBR0VfS0VZU1xuICAgIGNhc2UgJ3RoaW5raW5nJzpcbiAgICAgIHJldHVybiBUSElOS0lOR19NRVNTQUdFX0tFWVNcbiAgICBjYXNlICdzZWFyY2gnOlxuICAgICAgcmV0dXJuIFNFQVJDSF9NRVNTQUdFX0tFWVNcbiAgICBjYXNlICdkZWVwX3NlYXJjaCc6XG4gICAgICByZXR1cm4gREVFUF9TRUFSQ0hfTUVTU0FHRV9LRVlTXG4gICAgY2FzZSAnYXR0YWNobWVudCc6XG4gICAgICByZXR1cm4gYXR0YWNobWVudHNDb3VudCA+IDEgPyBBVFRBQ0hNRU5UX01FU1NBR0VfS0VZU19QTFVSQUwgOiBBVFRBQ0hNRU5UX01FU1NBR0VfS0VZU1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbFxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBnZXRTdHJlYW1BY3Rpdml0eU1lc3NhZ2VBdEluZGV4ID0gKFxuICBwaGFzZTogU3RyZWFtQWN0aXZpdHlQaGFzZSxcbiAgaW5kZXg6IG51bWJlcixcbiAgdDogVHJhbnNsYXRlRm4sXG4gIGF0dGFjaG1lbnRzQ291bnQgPSAwXG4pOiBzdHJpbmcgPT4ge1xuICBpZiAocGhhc2UgPT09ICd3cml0aW5nJykge1xuICAgIHJldHVybiB0KFdSSVRJTkdfQUNUSVZJVFlfTUVTU0FHRV9LRVkpXG4gIH1cblxuICBjb25zdCBrZXlzID0gZ2V0TWVzc2FnZUtleXNGb3JQaGFzZShwaGFzZSwgYXR0YWNobWVudHNDb3VudClcbiAgaWYgKCFrZXlzPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGNvbnN0IGNsYW1wZWRJbmRleCA9IE1hdGgubWluKE1hdGgubWF4KDAsIGluZGV4KSwga2V5cy5sZW5ndGggLSAxKVxuICByZXR1cm4gdChrZXlzW2NsYW1wZWRJbmRleF0pXG59XG5cbmV4cG9ydCBjb25zdCBnZXRUaGlua2luZ0xvYWRpbmdNZXNzYWdlID0gKGluZGV4OiBudW1iZXIsIHQ6IFRyYW5zbGF0ZUZuKTogc3RyaW5nID0+XG4gIGdldFN0cmVhbUFjdGl2aXR5TWVzc2FnZUF0SW5kZXgoJ3RoaW5raW5nJywgaW5kZXgsIHQpXG5cbmV4cG9ydCBjb25zdCBnZXRHZW5lcmF0aW5nTG9hZGluZ01lc3NhZ2UgPSAoaW5kZXg6IG51bWJlciwgdDogVHJhbnNsYXRlRm4pOiBzdHJpbmcgPT5cbiAgZ2V0U3RyZWFtQWN0aXZpdHlNZXNzYWdlQXRJbmRleCgnZ2VuZXJhdGluZycsIGluZGV4LCB0KVxuXG5leHBvcnQgY29uc3QgY2FuQWR2YW5jZVN0cmVhbUFjdGl2aXR5TWVzc2FnZSA9IChwaGFzZTogU3RyZWFtQWN0aXZpdHlQaGFzZSwgY3VycmVudEluZGV4OiBudW1iZXIpOiBib29sZWFuID0+IHtcbiAgY29uc3Qga2V5cyA9IGdldE1lc3NhZ2VLZXlzRm9yUGhhc2UocGhhc2UpXG4gIGlmICgha2V5cykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiBjdXJyZW50SW5kZXggPCBrZXlzLmxlbmd0aCAtIDFcbn1cblxuZXhwb3J0IGNvbnN0IGFkdmFuY2VTdHJlYW1BY3Rpdml0eU1lc3NhZ2UgPSAoXG4gIGFjdGl2aXR5OiBTdHJlYW1BY3Rpdml0eSxcbiAgY3VycmVudEluZGV4OiBudW1iZXIsXG4gIHQ6IFRyYW5zbGF0ZUZuXG4pOiB7IGFjdGl2aXR5OiBTdHJlYW1BY3Rpdml0eTsgbmV4dEluZGV4OiBudW1iZXIgfSB8IG51bGwgPT4ge1xuICBpZiAoIWNhbkFkdmFuY2VTdHJlYW1BY3Rpdml0eU1lc3NhZ2UoYWN0aXZpdHkucGhhc2UsIGN1cnJlbnRJbmRleCkpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgY29uc3QgbmV4dEluZGV4ID0gY3VycmVudEluZGV4ICsgMVxuICByZXR1cm4ge1xuICAgIGFjdGl2aXR5OiB7XG4gICAgICBwaGFzZTogYWN0aXZpdHkucGhhc2UsXG4gICAgICBtZXNzYWdlOiBnZXRTdHJlYW1BY3Rpdml0eU1lc3NhZ2VBdEluZGV4KGFjdGl2aXR5LnBoYXNlLCBuZXh0SW5kZXgsIHQsIGFjdGl2aXR5LmF0dGFjaG1lbnRzQ291bnQpLFxuICAgICAgLi4uKGFjdGl2aXR5LmF0dGFjaG1lbnRzQ291bnQgIT0gbnVsbCAmJiB7IGF0dGFjaG1lbnRzQ291bnQ6IGFjdGl2aXR5LmF0dGFjaG1lbnRzQ291bnQgfSksXG4gICAgfSxcbiAgICBuZXh0SW5kZXgsXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGNhblJvdGF0ZVN0cmVhbUFjdGl2aXR5UGhhc2UgPSAocGhhc2U6IFN0cmVhbUFjdGl2aXR5UGhhc2UpOiBib29sZWFuID0+IFJPVEFUQUJMRV9QSEFTRVMuaW5jbHVkZXMocGhhc2UpXG5cbmV4cG9ydCBjb25zdCBnZXRXcml0aW5nU3RyZWFtQWN0aXZpdHkgPSAodDogVHJhbnNsYXRlRm4pOiBTdHJlYW1BY3Rpdml0eSA9PiAoe1xuICBwaGFzZTogJ3dyaXRpbmcnLFxuICBtZXNzYWdlOiB0KFdSSVRJTkdfQUNUSVZJVFlfTUVTU0FHRV9LRVkpLFxufSlcblxuZXhwb3J0IGNvbnN0IGdldEluaXRpYWxTdHJlYW1BY3Rpdml0eSA9IChcbiAgdDogVHJhbnNsYXRlRm4sXG4gIG9wdGlvbnM6IHtcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZT86IGJvb2xlYW5cbiAgICBpc0RlZXBTZWFyY2hBY3RpdmU/OiBib29sZWFuXG4gICAgaGFzQXR0YWNobWVudHM/OiBib29sZWFuXG4gICAgYXR0YWNobWVudHNDb3VudD86IG51bWJlclxuICB9XG4pOiBTdHJlYW1BY3Rpdml0eSA9PiB7XG4gIGlmIChvcHRpb25zLmlzV2ViU2VhcmNoQWN0aXZlKSB7XG4gICAgcmV0dXJuIHsgcGhhc2U6ICdzZWFyY2gnLCBtZXNzYWdlOiB0KFNFQVJDSF9NRVNTQUdFX0tFWVNbMF0pIH1cbiAgfVxuICBpZiAob3B0aW9ucy5pc0RlZXBTZWFyY2hBY3RpdmUpIHtcbiAgICByZXR1cm4geyBwaGFzZTogJ2RlZXBfc2VhcmNoJywgbWVzc2FnZTogdChERUVQX1NFQVJDSF9NRVNTQUdFX0tFWVNbMF0pIH1cbiAgfVxuICBpZiAob3B0aW9ucy5oYXNBdHRhY2htZW50cykge1xuICAgIGNvbnN0IGF0dGFjaG1lbnRzQ291bnQgPSBvcHRpb25zLmF0dGFjaG1lbnRzQ291bnQgPz8gMFxuICAgIHJldHVybiB7XG4gICAgICBwaGFzZTogJ2F0dGFjaG1lbnQnLFxuICAgICAgbWVzc2FnZTogZ2V0U3RyZWFtQWN0aXZpdHlNZXNzYWdlQXRJbmRleCgnYXR0YWNobWVudCcsIDAsIHQsIGF0dGFjaG1lbnRzQ291bnQpLFxuICAgICAgYXR0YWNobWVudHNDb3VudCxcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgcGhhc2U6ICdnZW5lcmF0aW5nJywgbWVzc2FnZTogdChHRU5FUkFUSU5HX01FU1NBR0VfS0VZU1swXSkgfVxufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVN0cmVhbUxvYWRpbmdEaXNwbGF5ID0gKHBhcmFtczoge1xuICBzdHJlYW1BY3Rpdml0eTogU3RyZWFtQWN0aXZpdHkgfCBudWxsXG4gIGxvYWRpbmdNZXNzYWdlOiBzdHJpbmcgfCBudWxsXG4gIGFjdGl2ZUxvYWRpbmdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gIHdhaXRpbmdSZXNwb25zZTogYm9vbGVhblxuICBpc1dlYlNlYXJjaEFjdGl2ZTogYm9vbGVhblxuICBpc0RlZXBTZWFyY2hBY3RpdmU6IGJvb2xlYW5cbiAgaGFzQXR0YWNobWVudHM6IGJvb2xlYW5cbiAgYXR0YWNobWVudHNDb3VudD86IG51bWJlclxuICB0OiBUcmFuc2xhdGVGblxufSk6IFN0cmVhbUFjdGl2aXR5IHwgbnVsbCA9PiB7XG4gIGlmIChwYXJhbXMuc3RyZWFtQWN0aXZpdHkpIHtcbiAgICByZXR1cm4gcGFyYW1zLnN0cmVhbUFjdGl2aXR5XG4gIH1cblxuICBjb25zdCBhY3RpdmVLZXlzID0gT2JqZWN0LmtleXMocGFyYW1zLmFjdGl2ZUxvYWRpbmdzKVxuICBpZiAoYWN0aXZlS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgZmlyc3RLZXkgPSBhY3RpdmVLZXlzWzBdXG4gICAgY29uc3QgcmF3ID0gcGFyYW1zLmFjdGl2ZUxvYWRpbmdzW2ZpcnN0S2V5XVxuICAgIGlmIChyYXcgJiYgcmF3ICE9PSBwYXJhbXMudCgnY2hhdC5wcm9jZXNzaW5nJykpIHtcbiAgICAgIGNvbnN0IGhpdGxUb29sID0gcmVzb2x2ZUhpdGxUb29sRnJvbU5vZGVNZXNzYWdlKHJhdylcbiAgICAgIGlmIChoaXRsVG9vbCkge1xuICAgICAgICByZXR1cm4gbWFwSGl0bFRvb2xOYW1lVG9TdHJlYW1BY3Rpdml0eShoaXRsVG9vbCwgcGFyYW1zLnQpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRyaW1tZWQgPSByYXcudHJpbSgpXG4gICAgICBpZiAodHJpbW1lZCAmJiAhaXNHZW5lcmljUmVzdW1lTm9kZU1lc3NhZ2UodHJpbW1lZCkpIHtcbiAgICAgICAgY29uc29sZS5pbmZvKCdbQUFJOnJlc29sdmVEaXNwbGF5XSBhY3RpdmVMb2FkaW5ncyBwYXNzdGhyb3VnaCcsIHtcbiAgICAgICAgICByYXcsXG4gICAgICAgICAgdHJpbW1lZCxcbiAgICAgICAgICBsb29rc0xpa2VSYXc6IGxvb2tzTGlrZVJhd1Rvb2xOYW1lKHRyaW1tZWQpLFxuICAgICAgICB9KVxuICAgICAgICByZXR1cm4geyBwaGFzZTogJ2FjdGlvbicsIG1lc3NhZ2U6IHRyaW1tZWQgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWFwTm9kZU1lc3NhZ2VUb1N0cmVhbUFjdGl2aXR5KHJhdywgcGFyYW1zLnQsIHsgdXNlUmVzdW1pbmdGYWxsYmFjazogdHJ1ZSB9KVxuICAgIH1cbiAgICByZXR1cm4geyBwaGFzZTogJ3Byb2Nlc3NpbmcnLCBtZXNzYWdlOiBwYXJhbXMudCgnY2hhdC5wcm9jZXNzaW5nJykgfVxuICB9XG5cbiAgaWYgKHBhcmFtcy5sb2FkaW5nTWVzc2FnZSkge1xuICAgIGlmIChcbiAgICAgIHBhcmFtcy5sb2FkaW5nTWVzc2FnZSA9PT0gcGFyYW1zLnQoJ2NoYXQud3JpdGluZycpIHx8XG4gICAgICBwYXJhbXMubG9hZGluZ01lc3NhZ2UgPT09IHBhcmFtcy50KFdSSVRJTkdfQUNUSVZJVFlfTUVTU0FHRV9LRVkpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZ2V0V3JpdGluZ1N0cmVhbUFjdGl2aXR5KHBhcmFtcy50KVxuICAgIH1cbiAgICBpZiAocGFyYW1zLmxvYWRpbmdNZXNzYWdlID09PSBwYXJhbXMudCgnY2hhdC5nZW5lcmF0aW5nJykpIHtcbiAgICAgIHJldHVybiB7IHBoYXNlOiAnZ2VuZXJhdGluZycsIG1lc3NhZ2U6IHBhcmFtcy5sb2FkaW5nTWVzc2FnZSB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHBhcmFtcy5sb2FkaW5nTWVzc2FnZSA9PT0gcGFyYW1zLnQoJ2NoYXQuZ2VuZXJhdGluZ1dlYlNlYXJjaCcpIHx8XG4gICAgICBwYXJhbXMubG9hZGluZ01lc3NhZ2UgPT09IHBhcmFtcy50KCdjaGF0LmdlbmVyYXRpbmdEZWVwU2VhcmNoJykgfHxcbiAgICAgIHBhcmFtcy5sb2FkaW5nTWVzc2FnZSA9PT0gcGFyYW1zLnQoJ2NoYXQuZ2VuZXJhdGluZ0F0dGFjaG1lbnQnKVxuICAgICkge1xuICAgICAgcmV0dXJuIGdldEluaXRpYWxTdHJlYW1BY3Rpdml0eShwYXJhbXMudCwge1xuICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogcGFyYW1zLmxvYWRpbmdNZXNzYWdlID09PSBwYXJhbXMudCgnY2hhdC5nZW5lcmF0aW5nV2ViU2VhcmNoJyksXG4gICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogcGFyYW1zLmxvYWRpbmdNZXNzYWdlID09PSBwYXJhbXMudCgnY2hhdC5nZW5lcmF0aW5nRGVlcFNlYXJjaCcpLFxuICAgICAgICBoYXNBdHRhY2htZW50czogcGFyYW1zLmxvYWRpbmdNZXNzYWdlID09PSBwYXJhbXMudCgnY2hhdC5nZW5lcmF0aW5nQXR0YWNobWVudCcpLFxuICAgICAgICBhdHRhY2htZW50c0NvdW50OiBwYXJhbXMuYXR0YWNobWVudHNDb3VudCxcbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiB7IHBoYXNlOiAnYWN0aW9uJywgbWVzc2FnZTogcGFyYW1zLmxvYWRpbmdNZXNzYWdlIH1cbiAgfVxuXG4gIGlmIChwYXJhbXMud2FpdGluZ1Jlc3BvbnNlKSB7XG4gICAgcmV0dXJuIGdldEluaXRpYWxTdHJlYW1BY3Rpdml0eShwYXJhbXMudCwge1xuICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IHBhcmFtcy5pc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogcGFyYW1zLmlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICAgIGhhc0F0dGFjaG1lbnRzOiBwYXJhbXMuaGFzQXR0YWNobWVudHMsXG4gICAgICBhdHRhY2htZW50c0NvdW50OiBwYXJhbXMuYXR0YWNobWVudHNDb3VudCxcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQgPSAobWVzc2FnZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBib29sZWFuID0+XG4gIHR5cGVvZiBtZXNzYWdlSWQgPT09ICdzdHJpbmcnICYmIG1lc3NhZ2VJZC5pbmNsdWRlcygnLXN0cmVhbWluZycpXG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFFQSxTQUFTQSxxQkFBcUIsUUFBUSxpQkFBaUI7QUFJdkQsSUFBTUMscUJBQXFCLEdBQUcsQ0FDNUIsa0NBQWtDLEVBQ2xDLGtDQUFrQyxFQUNsQyxpQ0FBaUMsQ0FDekI7QUFFVixJQUFNQyx1QkFBdUIsR0FBRyxDQUM5QixzQ0FBc0MsRUFDdEMsc0NBQXNDLEVBQ3RDLG9DQUFvQyxDQUM1QjtBQUVWLElBQU1DLG1CQUFtQixHQUFHLENBQUMsK0JBQStCLEVBQUUsa0NBQWtDLENBQVU7QUFFMUcsSUFBTUMsd0JBQXdCLEdBQUcsQ0FDL0Isb0NBQW9DLEVBQ3BDLHdDQUF3QyxDQUNoQztBQUVWLElBQU1DLHVCQUF1QixHQUFHLENBQUMsa0NBQWtDLEVBQUUscUNBQXFDLENBQVU7QUFFcEgsSUFBTUMsOEJBQThCLEdBQUcsQ0FDckMsd0NBQXdDLEVBQ3hDLDJDQUEyQyxDQUNuQztBQUVWLE9BQU8sSUFBTUMsNEJBQTRCLEdBQUcsaUNBQTBDOztBQUV0RjtBQUNBLElBQU1DLHVCQUErQyxHQUFHO0VBQ3REQyxXQUFXLEVBQUUsNEJBQTRCO0VBQ3pDQyxVQUFVLEVBQUUsNEJBQTRCO0VBQ3hDQyxrQkFBa0IsRUFBRSxrQ0FBa0M7RUFDdERDLFlBQVksRUFBRSw2QkFBNkI7RUFDM0NDLFVBQVUsRUFBRSw0QkFBNEI7RUFDeENDLFNBQVMsRUFBRSwyQkFBMkI7RUFDdENDLGdCQUFnQixFQUFFLGlDQUFpQztFQUNuREMsV0FBVyxFQUFFLDRCQUE0QjtFQUN6Q0Msa0JBQWtCLEVBQUUsa0NBQWtDO0VBQ3REQyxXQUFXLEVBQUUsNkJBQTZCO0VBQzFDQyxhQUFhLEVBQUUsK0JBQStCO0VBQzlDQyxpQkFBaUIsRUFBRSw4QkFBOEI7RUFDakRDLGFBQWEs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
|