@projectcor/maia-components 2.11.52-3 → 2.11.53-0
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/lib/App.js +1 -1
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.js +83 -0
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.styles.js +21 -0
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.utils.js +7 -0
- package/lib/components/atoms/AgentActivityIndicator/index.js +2 -0
- package/lib/components/atoms/index.js +2 -1
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +18 -9
- package/lib/hooks/useChatManager/useChatManager.js +84 -35
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +176 -80
- package/lib/lang/br/index.js +56 -2
- package/lib/lang/en/index.js +56 -2
- package/lib/lang/es/index.js +56 -2
- package/lib/lang/fr/index.js +55 -1
- package/lib/types/streamActivity.js +2 -0
- package/lib/utils/sseStreamContent.js +17 -0
- package/lib/utils/streamActivityMessages.js +256 -0
- package/package.json +1 -1
|
@@ -28,7 +28,9 @@ import { useTabTaskDefault } from '../useTabTaskDefault';
|
|
|
28
28
|
import { TASK_URL_REGEX_PATTERN } from '../../constants/taskUrls';
|
|
29
29
|
import { fetchAgentDetail } from '../../services/maia/Agents/fetchAgentDetail';
|
|
30
30
|
import { buildHitlActionTypeList, getHitlAnalyticsAgentType } from '../../utils/hitlAnalytics';
|
|
31
|
+
import { getThinkingLoadingMessage, getWritingStreamActivity, mapNodeMessageToStreamActivity } from '../../utils/streamActivityMessages';
|
|
31
32
|
import { streamingStore } from '../useStreamingMessage';
|
|
33
|
+
import { isCompleteLikeSsePayload, mergeStreamChunk } from '../../utils/sseStreamContent';
|
|
32
34
|
var normalizeSendMessageArgs = function normalizeSendMessageArgs(attachmentsOrOptions) {
|
|
33
35
|
var _options$attachments;
|
|
34
36
|
if (Array.isArray(attachmentsOrOptions)) {
|
|
@@ -223,24 +225,41 @@ var processSSEStream = /*#__PURE__*/function () {
|
|
|
223
225
|
var eventType = parsed.eventType,
|
|
224
226
|
data = parsed.data;
|
|
225
227
|
var eventData = data;
|
|
226
|
-
if (eventType === '
|
|
227
|
-
|
|
228
|
-
|
|
228
|
+
if (eventType === 'thinking') {
|
|
229
|
+
callbacks.onThinking();
|
|
230
|
+
} else if (eventType === 'token') {
|
|
231
|
+
var content = typeof eventData.content === 'string' ? eventData.content : '';
|
|
232
|
+
accumulatedContent = mergeStreamChunk(accumulatedContent, content);
|
|
229
233
|
callbacks.onToken(accumulatedContent);
|
|
234
|
+
} else if (eventType === 'content') {
|
|
235
|
+
var _content = typeof eventData.content === 'string' ? eventData.content : '';
|
|
236
|
+
accumulatedContent = mergeStreamChunk(accumulatedContent, _content);
|
|
237
|
+
callbacks.onToken(accumulatedContent);
|
|
238
|
+
if (isCompleteLikeSsePayload(eventData)) {
|
|
239
|
+
var _eventData$agent_id;
|
|
240
|
+
var finalContent = _content || accumulatedContent;
|
|
241
|
+
var sources = eventData.sources || null;
|
|
242
|
+
var memorySessionId = eventData.memory_session_id || '';
|
|
243
|
+
var attachments = Array.isArray(eventData.attachments) ? eventData.attachments : null;
|
|
244
|
+
var suggestions = Array.isArray(eventData.suggest_reply) ? eventData.suggest_reply : Array.isArray(eventData.suggestions) ? eventData.suggestions : null;
|
|
245
|
+
var agentIdRaw = (_eventData$agent_id = eventData.agent_id) !== null && _eventData$agent_id !== void 0 ? _eventData$agent_id : eventData.agentId;
|
|
246
|
+
var completedAgentId = agentIdRaw != null && String(agentIdRaw).trim() !== '' ? String(agentIdRaw).trim() : null;
|
|
247
|
+
callbacks.onComplete(finalContent, sources, memorySessionId, threadId, attachments, suggestions, completedAgentId);
|
|
248
|
+
}
|
|
230
249
|
} else if (eventType === 'node') {
|
|
231
250
|
if (eventData.message && typeof eventData.message === 'string') {
|
|
232
251
|
callbacks.onNode(eventData.message, threadId);
|
|
233
252
|
}
|
|
234
253
|
} else if (eventType === 'complete') {
|
|
235
|
-
var _eventData$
|
|
236
|
-
var
|
|
237
|
-
var
|
|
238
|
-
var
|
|
239
|
-
var
|
|
240
|
-
var
|
|
241
|
-
var
|
|
242
|
-
var
|
|
243
|
-
callbacks.onComplete(
|
|
254
|
+
var _eventData$agent_id2;
|
|
255
|
+
var _finalContent = eventData.content || accumulatedContent;
|
|
256
|
+
var _sources = eventData.sources || null;
|
|
257
|
+
var _memorySessionId = eventData.memory_session_id || '';
|
|
258
|
+
var _attachments = Array.isArray(eventData.attachments) ? eventData.attachments : null;
|
|
259
|
+
var _suggestions = Array.isArray(eventData.suggest_reply) ? eventData.suggest_reply : Array.isArray(eventData.suggestions) ? eventData.suggestions : null;
|
|
260
|
+
var _agentIdRaw = (_eventData$agent_id2 = eventData.agent_id) !== null && _eventData$agent_id2 !== void 0 ? _eventData$agent_id2 : eventData.agentId;
|
|
261
|
+
var _completedAgentId = _agentIdRaw != null && String(_agentIdRaw).trim() !== '' ? String(_agentIdRaw).trim() : null;
|
|
262
|
+
callbacks.onComplete(_finalContent, _sources, _memorySessionId, threadId, _attachments, _suggestions, _completedAgentId);
|
|
244
263
|
} else if (eventType === 'approval_required') {
|
|
245
264
|
var _callbacks$onApproval;
|
|
246
265
|
(_callbacks$onApproval = callbacks.onApprovalRequired) === null || _callbacks$onApproval === void 0 || _callbacks$onApproval.call(callbacks, eventData, accumulatedContent, threadId);
|
|
@@ -351,6 +370,9 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
351
370
|
var abortStreamSilentlyRef = useRef(function () {
|
|
352
371
|
return undefined;
|
|
353
372
|
});
|
|
373
|
+
var clearStreamUiRef = useRef(function () {
|
|
374
|
+
return undefined;
|
|
375
|
+
});
|
|
354
376
|
var _useState = useState({}),
|
|
355
377
|
_useState2 = _slicedToArray(_useState, 2),
|
|
356
378
|
activeLoadings = _useState2[0],
|
|
@@ -459,6 +481,7 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
459
481
|
}, [messages, client, loadingMessages, setClient]);
|
|
460
482
|
var handleStreamError = useCallback(function (errorMessage, errorRawMessage) {
|
|
461
483
|
var _errorRawMessage$matc, _errorRawMessage$matc2;
|
|
484
|
+
clearStreamUiRef.current();
|
|
462
485
|
var tempMessageId = "answer-".concat(currentMessageId.current, "-streaming");
|
|
463
486
|
streamingStore.clear();
|
|
464
487
|
streamingPlaceholderIdRef.current = null;
|
|
@@ -702,6 +725,7 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
702
725
|
};
|
|
703
726
|
}(), [addMessage, removeMessage, project, getTabTaskDefault, event, agent]);
|
|
704
727
|
var handleStreamStop = useCallback(function () {
|
|
728
|
+
clearStreamUiRef.current();
|
|
705
729
|
var tempMessageId = "answer-".concat(currentMessageId.current, "-streaming");
|
|
706
730
|
streamingStore.clear();
|
|
707
731
|
streamingPlaceholderIdRef.current = null;
|
|
@@ -773,17 +797,23 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
773
797
|
waitingResponse = _useOrchestratorStrea.isLoading,
|
|
774
798
|
isWriting = _useOrchestratorStrea.isWriting,
|
|
775
799
|
loadingMessage = _useOrchestratorStrea.loadingMessage,
|
|
800
|
+
streamActivity = _useOrchestratorStrea.streamActivity,
|
|
801
|
+
updateStreamActivity = _useOrchestratorStrea.updateStreamActivity,
|
|
776
802
|
stopStreaming = _useOrchestratorStrea.stopStreaming,
|
|
777
803
|
abortStreamSilently = _useOrchestratorStrea.abortStreamSilently;
|
|
778
804
|
|
|
779
805
|
// Mantenemos el setter más reciente en una ref para que pueda usarse desde
|
|
780
806
|
// efectos definidos antes en el archivo (cambio de chat, reset, etc.).
|
|
781
807
|
abortStreamSilentlyRef.current = abortStreamSilently;
|
|
808
|
+
clearStreamUiRef.current = function () {
|
|
809
|
+
updateStreamActivity(null);
|
|
810
|
+
setActiveLoadings({});
|
|
811
|
+
};
|
|
782
812
|
var currentProject = project;
|
|
783
813
|
var sendMessage = useCallback(/*#__PURE__*/function () {
|
|
784
814
|
var _ref8 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(message, attachmentsOrOptions, faqId, agentSuggestionId, mentions, fuaId, scId) {
|
|
785
815
|
var _messagesRef$current, _project$client;
|
|
786
|
-
var _normalizeSendMessage, attachments, options, effectiveMentions, contextMessage, payloadFuaId, payloadScId, displayMessage, newMessageId, lastMessageWithProject, currentAgentFromMessages, finalMessage, _options$projectChang, history, contextProjectId, lastMessageProjectId, projectToRequest, parsed, projects, payloadFaqId, payloadAgentSuggestionId, payloadData;
|
|
816
|
+
var _normalizeSendMessage, attachments, options, effectiveMentions, contextMessage, payloadFuaId, payloadScId, displayMessage, newMessageId, lastMessageWithProject, currentAgentFromMessages, streamingPlaceholderId, finalMessage, _options$projectChang, history, contextProjectId, lastMessageProjectId, projectToRequest, parsed, projects, payloadFaqId, payloadAgentSuggestionId, payloadData;
|
|
787
817
|
return _regeneratorRuntime.wrap(function (_context3) {
|
|
788
818
|
while (1) switch (_context3.prev = _context3.next) {
|
|
789
819
|
case 0:
|
|
@@ -828,6 +858,19 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
828
858
|
contextMessage: contextMessage
|
|
829
859
|
} : {}));
|
|
830
860
|
currentMessageId.current = uuidv4();
|
|
861
|
+
streamingPlaceholderId = "answer-".concat(currentMessageId.current, "-streaming");
|
|
862
|
+
streamingPlaceholderIdRef.current = streamingPlaceholderId;
|
|
863
|
+
activeStreamChatIdRef.current = currentChatId.current;
|
|
864
|
+
addMessage({
|
|
865
|
+
id: streamingPlaceholderId,
|
|
866
|
+
message: '',
|
|
867
|
+
date: new Date(),
|
|
868
|
+
user: {
|
|
869
|
+
id: 'assistant',
|
|
870
|
+
name: (agent === null || agent === void 0 ? void 0 : agent.name) || 'Assistant'
|
|
871
|
+
},
|
|
872
|
+
role: ChatHistoryRole.ASSISTANT
|
|
873
|
+
});
|
|
831
874
|
finalMessage = message;
|
|
832
875
|
if (message === t('qa.items.rentabilidad_proyecto')) {
|
|
833
876
|
finalMessage = "FAQ: ".concat(t('qa.items.rentabilidad_proyecto'), " - Tipo de rentabilidad: ").concat(((_options$projectChang = options.projectChanged) === null || _options$projectChang === void 0 ? void 0 : _options$projectChang.incomeType) || (project === null || project === void 0 ? void 0 : project.incomeType));
|
|
@@ -1039,6 +1082,10 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
1039
1082
|
setActiveLoadings(function (prev) {
|
|
1040
1083
|
return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, loadingKey, t('chat.processing')));
|
|
1041
1084
|
});
|
|
1085
|
+
updateStreamActivity({
|
|
1086
|
+
phase: 'processing',
|
|
1087
|
+
message: t('chat.processing')
|
|
1088
|
+
});
|
|
1042
1089
|
_context5.prev = 3;
|
|
1043
1090
|
_context5.next = 4;
|
|
1044
1091
|
return maia.Orchestrator.continueThread({
|
|
@@ -1057,26 +1104,33 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
1057
1104
|
break;
|
|
1058
1105
|
}
|
|
1059
1106
|
handleStreamError();
|
|
1060
|
-
setActiveLoadings(function (prev) {
|
|
1061
|
-
var newLoadings = _objectSpread({}, prev);
|
|
1062
|
-
delete newLoadings[loadingKey];
|
|
1063
|
-
return newLoadings;
|
|
1064
|
-
});
|
|
1065
1107
|
return _context5.abrupt("return");
|
|
1066
1108
|
case 5:
|
|
1067
1109
|
_context5.next = 6;
|
|
1068
1110
|
return processSSEStream(response, loadingKey, {
|
|
1111
|
+
onThinking: function onThinking() {
|
|
1112
|
+
var activity = {
|
|
1113
|
+
phase: 'thinking',
|
|
1114
|
+
message: getThinkingLoadingMessage(0, t)
|
|
1115
|
+
};
|
|
1116
|
+
updateStreamActivity(activity);
|
|
1117
|
+
},
|
|
1069
1118
|
onToken: function onToken(content) {
|
|
1119
|
+
updateStreamActivity(getWritingStreamActivity(t));
|
|
1070
1120
|
handleStreamUpdate(content, null, '');
|
|
1071
1121
|
},
|
|
1072
1122
|
onNode: function onNode(message, currentThreadId) {
|
|
1073
|
-
var
|
|
1123
|
+
var nodeActivity = mapNodeMessageToStreamActivity(message, t, {
|
|
1124
|
+
useResumingFallback: true
|
|
1125
|
+
});
|
|
1126
|
+
updateStreamActivity(nodeActivity);
|
|
1074
1127
|
setActiveLoadings(function (prev) {
|
|
1075
|
-
return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, currentThreadId,
|
|
1128
|
+
return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, currentThreadId, message));
|
|
1076
1129
|
});
|
|
1077
1130
|
},
|
|
1078
1131
|
onComplete: function onComplete(finalContent, sources, memorySessionId, currentThreadId, attachments, suggestions, agentId) {
|
|
1079
1132
|
handleStreamFinish(finalContent, sources, memorySessionId, attachments, suggestions, agentId);
|
|
1133
|
+
updateStreamActivity(null);
|
|
1080
1134
|
setActiveLoadings(function (prev) {
|
|
1081
1135
|
var newLoadings = _objectSpread({}, prev);
|
|
1082
1136
|
delete newLoadings[currentThreadId];
|
|
@@ -1085,6 +1139,7 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
1085
1139
|
},
|
|
1086
1140
|
onApprovalRequired: function onApprovalRequired(approvalPayload, accumulatedContent, currentThreadId) {
|
|
1087
1141
|
// New HITL interruption detected after resume (chained actions)
|
|
1142
|
+
updateStreamActivity(null);
|
|
1088
1143
|
setActiveLoadings(function (prev) {
|
|
1089
1144
|
var newLoadings = _objectSpread({}, prev);
|
|
1090
1145
|
delete newLoadings[currentThreadId];
|
|
@@ -1092,14 +1147,8 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
1092
1147
|
});
|
|
1093
1148
|
handleApprovalRequired(approvalPayload, accumulatedContent);
|
|
1094
1149
|
},
|
|
1095
|
-
onError: function onError(
|
|
1096
|
-
console.error('SSE Error:', error);
|
|
1150
|
+
onError: function onError() {
|
|
1097
1151
|
handleStreamError();
|
|
1098
|
-
setActiveLoadings(function (prev) {
|
|
1099
|
-
var newLoadings = _objectSpread({}, prev);
|
|
1100
|
-
delete newLoadings[currentThreadId];
|
|
1101
|
-
return newLoadings;
|
|
1102
|
-
});
|
|
1103
1152
|
}
|
|
1104
1153
|
});
|
|
1105
1154
|
case 6:
|
|
@@ -1109,21 +1158,20 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
1109
1158
|
_context5.prev = 7;
|
|
1110
1159
|
_t = _context5["catch"](3);
|
|
1111
1160
|
handleStreamError();
|
|
1112
|
-
setActiveLoadings(function (prev) {
|
|
1113
|
-
var newLoadings = _objectSpread({}, prev);
|
|
1114
|
-
delete newLoadings[loadingKey];
|
|
1115
|
-
return newLoadings;
|
|
1116
|
-
});
|
|
1117
1161
|
case 8:
|
|
1162
|
+
_context5.prev = 8;
|
|
1163
|
+
isProcessingRef.current = false;
|
|
1164
|
+
return _context5.finish(8);
|
|
1165
|
+
case 9:
|
|
1118
1166
|
case "end":
|
|
1119
1167
|
return _context5.stop();
|
|
1120
1168
|
}
|
|
1121
|
-
}, _callee5, null, [[3, 7]]);
|
|
1169
|
+
}, _callee5, null, [[3, 7, 8, 9]]);
|
|
1122
1170
|
}));
|
|
1123
1171
|
return function (_x17, _x18, _x19) {
|
|
1124
1172
|
return _ref0.apply(this, arguments);
|
|
1125
1173
|
};
|
|
1126
|
-
}(), [authUser, agent, addMessage, handleStreamError, handleStreamUpdate, handleStreamFinish, handleApprovalRequired]);
|
|
1174
|
+
}(), [authUser, agent, addMessage, handleStreamError, handleStreamUpdate, handleStreamFinish, handleApprovalRequired, updateStreamActivity, t]);
|
|
1127
1175
|
var initializeChat = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee6() {
|
|
1128
1176
|
var _userInitialMessage$m, _userInitialMessage$a, _project$client2, _project$client3, hasInitialMessage, hasInitialAttachments, hasInitialFaq, hasInitialFua, hasInitialSc, history;
|
|
1129
1177
|
return _regeneratorRuntime.wrap(function (_context6) {
|
|
@@ -1238,6 +1286,7 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
1238
1286
|
waitingResponse: waitingResponse,
|
|
1239
1287
|
isWriting: isWriting,
|
|
1240
1288
|
loadingMessage: loadingMessage,
|
|
1289
|
+
streamActivity: streamActivity,
|
|
1241
1290
|
activeLoadings: activeLoadings,
|
|
1242
1291
|
currentProject: currentProject,
|
|
1243
1292
|
currentChatId: currentChatId.current,
|
|
@@ -1253,4 +1302,4 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
1253
1302
|
isDisabled: waitingResponse || loadingMessages
|
|
1254
1303
|
};
|
|
1255
1304
|
};
|
|
1256
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwidjQiLCJ1dWlkdjQiLCJ1c2VDaGF0TWVzc2FnZXMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJ1c2VUIiwidXNlVXNlciIsInVzZUdsb2JhbENvbnRleHQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsIm1haWEiLCJGZWVkYmFjayIsIkNoYXRIaXN0b3J5Um9sZSIsImJ1aWxkQ29udGV4dE1lc3NhZ2UiLCJmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5IiwidXNlUHJvamVjdHMiLCJ1c2VUYWJUYXNrRGVmYXVsdCIsIlRBU0tfVVJMX1JFR0VYX1BBVFRFUk4iLCJmZXRjaEFnZW50RGV0YWlsIiwiYnVpbGRIaXRsQWN0aW9uVHlwZUxpc3QiLCJnZXRIaXRsQW5hbHl0aWNzQWdlbnRUeXBlIiwic3RyZWFtaW5nU3RvcmUiLCJub3JtYWxpemVTZW5kTWVzc2FnZUFyZ3MiLCJhdHRhY2htZW50c09yT3B0aW9ucyIsIl9vcHRpb25zJGF0dGFjaG1lbnRzIiwiQXJyYXkiLCJpc0FycmF5IiwiYXR0YWNobWVudHMiLCJvcHRpb25zIiwibm9ybWFsaXplQXNzaXN0YW50QXR0YWNobWVudHMiLCJyYXdBdHRhY2htZW50cyIsImZpbHRlciIsImF0dGFjaG1lbnQiLCJfdHlwZW9mIiwibWFwIiwiaW5kZXgiLCJuYW1lIiwidHJpbSIsImNvbmNhdCIsInR5cGUiLCJtaW1lVHlwZSIsIm1pbWVfdHlwZSIsImZ1bGxGaWxlTmFtZSIsImluY2x1ZGVzIiwibnVtZXJpY1NpemUiLCJzaXplIiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJmaWxlIiwiRmlsZSIsImlkIiwidXJsX29yaWdpbmFsIiwidW5kZWZpbmVkIiwidXJsX3RodW1ibmFpbCIsInVybF9maWxlIiwicm9sZSIsImV4dHJhY3RUYXNrSWRzRnJvbVBlbmRpbmdBY3Rpb25zQXJncyIsInBlbmRpbmdBY3Rpb25zIiwiaWRzIiwicHVzaElkIiwicmF3IiwibiIsInBhcnNlSW50IiwiU3RyaW5nIiwiaXNOYU4iLCJwdXNoIiwiZm9yRWFjaCIsImFjdGlvbiIsIl9yZWMkdGFza19pZCIsImFyZ3MiLCJ0b29sX2FyZ3MiLCJyZWMiLCJ0YXNrX2lkIiwidGFza19pZHMiLCJ0YXNrcyIsInQiLCJfdHJlYyR0YXNrX2lkIiwidHJlYyIsImV4dHJhY3RUYXNrSWRzRnJvbURlbGV0ZVBlbmRpbmdBY3Rpb25zIiwidG9vbF9uYW1lIiwiX3JlYyR0YXNrX2lkMiIsImxpc3QiLCJ0aWQiLCJleHRyYWN0QWdlbnRJZEZyb21FZGl0QWdlbnRQZW5kaW5nQWN0aW9ucyIsIl9yZWMkYWdlbnRfaWQiLCJlZGl0QWN0aW9uIiwiZmluZCIsImEiLCJ0b0xvd2VyQ2FzZSIsImFnZW50X2lkIiwiYWdlbnRJZCIsImV4dHJhY3RBZ2VudElkRnJvbVBlbmRpbmdBY3Rpb25zQnlUb29sTmFtZSIsInRvb2xOYW1lIiwiX3JlZiIsIl9yZWMkYWdlbnRfaWQyIiwiZXh0cmFjdFRhc2tJZHNGcm9tQXNzaXN0YW50RGVsZXRpb25UZXh0IiwidGV4dCIsImxhYmVsZWQiLCJtYXRjaCIsImJvbGQiLCJ1c2VTdGFibGVDYWxsYmFja3MiLCJhdXRoVXNlciIsImN1cnJlbnRVc2VyIiwidG9TdHJpbmciLCJmaXJzdE5hbWUiLCJhdmF0YXIiLCJwaWN0dXJlIiwiY3VycmVudCIsInBhcnNlU1NFTGluZSIsImxpbmUiLCJfbGluZSRzcGxpdCIsInNwbGl0IiwiX2xpbmUkc3BsaXQyIiwiX3NsaWNlZFRvQXJyYXkiLCJldmVudExpbmUiLCJkYXRhTGluZSIsImV2ZW50VHlwZSIsInJlcGxhY2UiLCJkYXRhU3RyIiwiZGF0YSIsIkpTT04iLCJwYXJzZSIsInBhcnNlRXJyb3IiLCJjb25zb2xlIiwiZXJyb3IiLCJwcm9jZXNzU1NFU3RyZWFtIiwiX3JlZjIiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsInJlc3BvbnNlIiwidGhyZWFkSWQiLCJjYWxsYmFja3MiLCJfcmVzcG9uc2UkYm9keSIsInJlYWRlciIsImRlY29kZXIiLCJidWZmZXIiLCJhY2N1bXVsYXRlZENvbnRlbnQiLCJpc1N0cmVhbUNvbXBsZXRlIiwiaGFuZGxlTGluZSIsIl95aWVsZCRyZWFkZXIkcmVhZCIsImRvbmUiLCJ2YWx1ZSIsImxpbmVzIiwiaSIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiX2hhbmRsZUxpbmUiLCJwYXJzZWQiLCJldmVudERhdGEiLCJjb250ZW50Iiwib25Ub2tlbiIsIm1lc3NhZ2UiLCJvbk5vZGUiLCJfZXZlbnREYXRhJGFnZW50X2lkIiwiZmluYWxDb250ZW50Iiwic291cmNlcyIsIm1lbW9yeVNlc3Npb25JZCIsIm1lbW9yeV9zZXNzaW9uX2lkIiwic3VnZ2VzdGlvbnMiLCJzdWdnZXN0X3JlcGx5IiwiYWdlbnRJZFJhdyIsImNvbXBsZXRlZEFnZW50SWQiLCJvbkNvbXBsZXRlIiwiX2NhbGxiYWNrcyRvbkFwcHJvdmFsIiwib25BcHByb3ZhbFJlcXVpcmVkIiwiY2FsbCIsIm9uRXJyb3IiLCJib2R5IiwiZ2V0UmVhZGVyIiwiRXJyb3IiLCJUZXh0RGVjb2RlciIsInJlYWQiLCJzZW50IiwiYWJydXB0IiwiZGVjb2RlIiwic3RyZWFtIiwicG9wIiwibGVuZ3RoIiwic3RvcCIsIl94IiwiX3gyIiwiX3gzIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJ1c2VDaGF0TWFuYWdlciIsIl9yZWYzIiwiaW5pdGlhbENoYXRJZCIsImNoYXRJZCIsInVzZXJJbml0aWFsTWVzc2FnZSIsIl9yZWYzJGFnZW50cyIsImFnZW50cyIsIl91c2VUIiwiX3VzZUdsb2JhbENvbnRleHQiLCJwcm9qZWN0Iiwic2V0UHJvamVjdCIsImNsaWVudCIsInNldENsaWVudCIsInRhc2siLCJhZ2VudCIsImlzV2ViU2VhcmNoQWN0aXZlIiwiaXNEZWVwU2VhcmNoQWN0aXZlIiwiY2hpcHNQcm9qZWN0Iiwic2V0Q2hpcHNQcm9qZWN0IiwiZXZlbnQiLCJfdXNlUHJvamVjdHMiLCJmZXRjaFByb2plY3RzIiwiX3VzZVN0YWJsZUNhbGxiYWNrcyIsIl91c2VUYWJUYXNrRGVmYXVsdCIsImdldFRhYlRhc2tEZWZhdWx0IiwiY3VycmVudE1lc3NhZ2VJZCIsImN1cnJlbnRVc2VyUXVlc3Rpb24iLCJjdXJyZW50Q2hhdElkIiwicmVwb3J0ZWRFdmVudCIsIm1lc3NhZ2VzUmVmIiwibGFzdE1hbnVhbEFwcHJvdmFsUmVmIiwiaXNQcm9jZXNzaW5nUmVmIiwiZmlyc3RUaW1lUmVmIiwic3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZiIsImFjdGl2ZVN0cmVhbUNoYXRJZFJlZiIsImFib3J0U3RyZWFtU2lsZW50bHlSZWYiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiYWN0aXZlTG9hZGluZ3MiLCJzZXRBY3RpdmVMb2FkaW5ncyIsImlzV2ViU2VhcmNoQWN0aXZlUmVmIiwiaXNEZWVwU2VhcmNoQWN0aXZlUmVmIiwiX3VzZUNoYXRNZXNzYWdlcyIsImxvYWRpbmdNZXNzYWdlcyIsIm1lc3NhZ2VzIiwiaXNMb2FkaW5nTW9yZU1lc3NhZ2VzIiwibG9hZE1lc3NhZ2VzIiwiYWRkTWVzc2FnZSIsInJlbW92ZU1lc3NhZ2UiLCJoYW5kbGVTY3JvbGwiLCJjdXN0b21FdmVudCIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwiZG9jdW1lbnQiLCJkaXNwYXRjaEV2ZW50IiwiY2xlYXIiLCJsYXN0TXNnV2l0aFByb2plY3QiLCJtc2ciLCJwcm9qZWN0SWQiLCJhdCIsIl9yZWY0IiwicHJvamVjdE5hbWUiLCJ0aGVuIiwicHJvamVjdHMiLCJmb3VuZCIsInAiLCJfZm91bmQkY2xpZW50IiwiY2xpZW50TmFtZSIsImxhc3RNc2dXaXRoQ2xpZW50IiwiY2xpZW50SWQiLCJfcmVmNSIsIm1zZ0NsaWVudElkIiwibXNnQ2xpZW50TmFtZSIsImhhbmRsZVN0cmVhbUVycm9yIiwiZXJyb3JNZXNzYWdlIiwiZXJyb3JSYXdNZXNzYWdlIiwiX2Vycm9yUmF3TWVzc2FnZSRtYXRjIiwiX2Vycm9yUmF3TWVzc2FnZSRtYXRjMiIsInRlbXBNZXNzYWdlSWQiLCJ1c2VkIiwiaXNFcnJvciIsImRhdGUiLCJEYXRlIiwidXNlciIsIkFTU0lTVEFOVCIsImhhbmRsZVN0cmVhbVVwZGF0ZSIsInN0YXJ0Iiwic2V0VGV4dCIsImhhbmRsZVN0cmVhbUZpbmlzaCIsIl9yZWY2IiwiX2NhbGxlZTIiLCJfcHJldmlvdXNNZXNzYWdlJGFwcHIiLCJfd2luZG93JHRhc2tQYW5lbCIsIl9jcmVhdGVBZ2VudEZvbGxvd1VwIiwiX2VkaXRBZ2VudEZvbGxvd1VwIiwidGFza1VybFJlZ2V4IiwibWF0Y2hlcyIsImNvbnRlbnRUb0FkZCIsInByZXZpb3VzTWVzc2FnZSIsImhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UiLCJUQVNLX0NSRUFUSU9OX1RPT0xTIiwiVEFTS19FRElUX1RPT0xTIiwiVEFTS19ERUxFVEVfVE9PTFMiLCJ3YXNUYXNrQ3JlYXRpb24iLCJ3YXNUYXNrRWRpdCIsIndhc1Rhc2tEZWxldGUiLCJ3YXNDcmVhdGVBZ2VudEFwcHJvdmVkIiwid2FzQ29uZmlndXJlQWdlbnRBY2Nlc3NBcHByb3ZlZCIsImNyZWF0ZUFnZW50Rm9sbG93VXAiLCJjb25maWd1cmVkQWdlbnRJZCIsIndhc0VkaXRBZ2VudEFwcHJvdmVkIiwiZWRpdEFnZW50Rm9sbG93VXAiLCJmcm9tU3RyZWFtIiwiZnJvbUFyZ3MiLCJyZXNvbHZlZEFnZW50SWQiLCJ0YXNrSWRzRnJvbVVybHMiLCJ0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsIiwidGFza0lkc0Zyb21EZWxldGlvblRleHQiLCJ0YXNrSWRzRm9yRGFzaGJvYXJkIiwic2hvdWxkU3luY0Rhc2hib2FyZCIsInRhc2tJZHMiLCJ0YWIiLCJ0YWJTZWdtZW50IiwibGFzdFByb2plY3RNZXNzYWdlIiwiY29udGV4dFByb2plY3RJZFJhdyIsImNvbnRleHRQcm9qZWN0SWQiLCJwYXRoTWF0Y2giLCJyb3V0ZVByb2plY3RJZCIsImlzT25Qcm9qZWN0Um91dGUiLCJfd2luZG93JG5ld1Byb2plY3REYXMiLCJfd2luZG93JG5ld1Byb2plY3REYXMyIiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzMyIsIl93aW5kb3ckbmV3UHJvamVjdERhczQiLCJfd2luZG93JG5ld1Byb2plY3REYXM1IiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzNiIsIm9wZW5UYXNrUGFuZWxJZCIsIm1hbnVhbEFwcHJvdmFsIiwibWFudWFsV2FzVGFza0VkaXQiLCJtYW51YWxXYXNUYXNrRGVsZXRlIiwiX21hbnVhbEFwcHJvdmFsJHRvb2xBIiwibWFudWFsUHNldWRvQWN0aW9uIiwiYWZmZWN0ZWRUYXNrSWRzIiwiX3dpbmRvdyR0YXNrUGFuZWwyIiwiX3dpbmRvdyR0YXNrUGFuZWwyJHJlIiwiX2NvbnRleHQyIiwiUmVnRXhwIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwibWF0Y2hBbGwiLCJtIiwiYXBwcm92YWwiLCJwZW5kaW5nX2FjdGlvbnMiLCJzb21lIiwiYXBwcm92YWxTdGF0dXMiLCJ3aW5kb3ciLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTIiwiYWlDaGF0SGl0bE9wdGlvbiIsIl9vYmplY3RTcHJlYWQiLCJhZ2VudF90eXBlIiwiYWN0aW9uX3R5cGUiLCJkZWNpc2lvbiIsIm9wdGlvbiIsImNyZWF0ZWRfYWdlbnRfaWQiLCJ1cmwiLCJsb2NhdGlvbiIsInBhdGhuYW1lIiwibmV3UHJvamVjdERhc2hib2FyZCIsImFkZEV4aXN0aW5nVGFza1RvRGFzaGJvYXJkIiwiZWRpdEV4aXN0aW5nVGFza0luRGFzaGJvYXJkIiwiZGVsZXRlRXhpc3RpbmdUYXNrRnJvbURhc2hib2FyZCIsInRhc2tQYW5lbCIsInRhc2tJZCIsInRvb2xBcmdzIiwicmVmZXRjaFRhc2siLCJjaGF0QWdlbnQiLCJlcnIiLCJfeDQiLCJfeDUiLCJfeDYiLCJfeDciLCJfeDgiLCJfeDkiLCJoYW5kbGVTdHJlYW1TdG9wIiwiaXNGcm9udGVuZENhbmNlbGxlZCIsInNldFRpbWVvdXQiLCJoYW5kbGVBcHByb3ZhbFJlcXVpcmVkIiwibWFudWFsX2FwcHJvdmFsX2RldGVjdGVkIiwiX2FwcHJvdmFsJHBlbmRpbmdfYWN0IiwiX3JlZjciLCJfdG9vbF9uYW1lIiwiX3Rvb2xfYXJncyIsImZpcnN0QWN0aW9uIiwib3JpZ2luYWxfdGhyZWFkX2lkIiwiX3VzZU9yY2hlc3RyYXRvclN0cmVhIiwib25TdHJlYW1VcGRhdGUiLCJvbkZpbmlzaFN0cmVhbSIsIm9uU3RvcCIsImFza01haWEiLCJ3YWl0aW5nUmVzcG9uc2UiLCJpc0xvYWRpbmciLCJpc1dyaXRpbmciLCJsb2FkaW5nTWVzc2FnZSIsInN0b3BTdHJlYW1pbmciLCJhYm9ydFN0cmVhbVNpbGVudGx5IiwiY3VycmVudFByb2plY3QiLCJzZW5kTWVzc2FnZSIsIl9yZWY4IiwiX2NhbGxlZTMiLCJmYXFJZCIsImFnZW50U3VnZ2VzdGlvbklkIiwibWVudGlvbnMiLCJmdWFJZCIsInNjSWQiLCJfbWVzc2FnZXNSZWYkY3VycmVudCIsIl9wcm9qZWN0JGNsaWVudCIsIl9ub3JtYWxpemVTZW5kTWVzc2FnZSIsImVmZmVjdGl2ZU1lbnRpb25zIiwiY29udGV4dE1lc3NhZ2UiLCJwYXlsb2FkRnVhSWQiLCJwYXlsb2FkU2NJZCIsImRpc3BsYXlNZXNzYWdlIiwibmV3TWVzc2FnZUlkIiwibGFzdE1lc3NhZ2VXaXRoUHJvamVjdCIsImN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyIsImZpbmFsTWVzc2FnZSIsIl9vcHRpb25zJHByb2plY3RDaGFuZyIsImhpc3RvcnkiLCJsYXN0TWVzc2FnZVByb2plY3RJZCIsInByb2plY3RUb1JlcXVlc3QiLCJwYXlsb2FkRmFxSWQiLCJwYXlsb2FkQWdlbnRTdWdnZXN0aW9uSWQiLCJwYXlsb2FkRGF0YSIsIl9jb250ZXh0MyIsInBtQWlUeXBlZFRleHQiLCJVU0VSIiwicHJvamVjdENoYW5nZWQiLCJpbmNvbWVUeXBlIiwiaGlzdG9yeU1lc3NhZ2UiLCJsYW5nIiwidXNlcklkIiwibGFzdE5hbWUiLCJjb21wYW55SWQiLCJjb21wYW55X2lkIiwibWVzc2FnZUlkIiwiYWdlbnROYW1lIiwiZmVlSWQiLCJ0YXNrTmFtZSIsImVudGl0eSIsImFnZW50RW50aXR5IiwiX3gwIiwiX3gxIiwiX3gxMCIsIl94MTEiLCJfeDEyIiwiX3gxMyIsIl94MTQiLCJjaGFuZ2VQcm9qZWN0IiwiaGFuZGxlRmVlZGJhY2siLCJfcmVmOSIsIl9jYWxsZWU0IiwiZmVlZGJhY2tQcm9wIiwiY2hhdE1lc3NhZ2VJZCIsIl9jb250ZXh0NCIsIkNoYXRzIiwid2FzSGVscGZ1bENoYXQiLCJUSFVNQlNfVVAiLCJ3YXNIZWxwZnVsIiwiX3gxNSIsIl94MTYiLCJoYW5kbGVBcHByb3ZhbERlY2lzaW9uIiwiX3JlZjAiLCJfY2FsbGVlNSIsInRocmVhZElkcyIsImVkaXRlZEFjdGlvbnMiLCJtZXNzYWdlV2l0aEFwcHJvdmFsIiwibG9hZGluZ0tleSIsImV4aXN0aW5nTWVzc2FnZSIsIm5ld1N0YXR1cyIsIl90IiwiX2NvbnRleHQ1IiwiX20kYXBwcm92YWwiLCJ0aHJlYWRfaWQiLCJfZGVmaW5lUHJvcGVydHkiLCJPcmNoZXN0cmF0b3IiLCJjb250aW51ZVRocmVhZCIsInNlc3Npb25JZCIsInNlc3Npb25faWQiLCJvayIsIm5ld0xvYWRpbmdzIiwiY3VycmVudFRocmVhZElkIiwiZGlzcGxheU1zZyIsImFwcHJvdmFsUGF5bG9hZCIsIl94MTciLCJfeDE4IiwiX3gxOSIsImluaXRpYWxpemVDaGF0IiwiX2NhbGxlZTYiLCJfdXNlckluaXRpYWxNZXNzYWdlJG0iLCJfdXNlckluaXRpYWxNZXNzYWdlJGEiLCJfcHJvamVjdCRjbGllbnQyIiwiX3Byb2plY3QkY2xpZW50MyIsImhhc0luaXRpYWxNZXNzYWdlIiwiaGFzSW5pdGlhbEF0dGFjaG1lbnRzIiwiaGFzSW5pdGlhbEZhcSIsImhhc0luaXRpYWxGdWEiLCJoYXNJbml0aWFsU2MiLCJfY29udGV4dDYiLCJCb29sZWFuIiwicmVzZXRDaGF0Iiwic3RvcEdlbmVyYXRpb24iLCJpc0Rpc2FibGVkIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL3VzZUNoYXRNYW5hZ2VyL3VzZUNoYXRNYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHJhZGl4ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGVkLW9wdGlvbmFsLWNoYWluICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlUmVmLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJ1xuaW1wb3J0IHsgdXNlQ2hhdE1lc3NhZ2VzIH0gZnJvbSAnLi4vdXNlQ2hhdE1lc3NhZ2VzJ1xuaW1wb3J0IHsgdXNlT3JjaGVzdHJhdG9yU3RyZWFtIH0gZnJvbSAnLi4vdXNlT3JjaGVzdHJhdG9yU3RyZWFtJ1xuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uL3VzZVQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IFNlbmRNZXNzYWdlT3B0aW9ucywgVXNlQ2hhdE1hbmFnZXJQcm9wcyB9IGZyb20gJy4vdXNlQ2hhdE1hbmFnZXIuaW50ZXJmYWNlJ1xuaW1wb3J0IHsgdXNlVXNlciwgQ09SVXNlciB9IGZyb20gJy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi91c2VFdmVudCdcbmltcG9ydCBtYWlhIGZyb20gJy4uLy4uL3NlcnZpY2VzL21haWEnXG5pbXBvcnQgeyBGZWVkYmFjayB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9sZWN1bGVzL01lc3NhZ2VGZWVkYmFjay9NZXNzYWdlRmVlZGJhY2snXG5pbXBvcnQgeyBDaGF0TWVzc2FnZSwgQ2hhdE1lc3NhZ2VVc2VyLCBDaGF0SGlzdG9yeVJvbGUsIEFwcHJvdmFsUmVxdWVzdCwgUGVuZGluZ0FjdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQgeyBDb250ZXh0TWVudGlvbiwgQ29udGV4dE1lc3NhZ2UsIGJ1aWxkQ29udGV4dE1lc3NhZ2UgfSBmcm9tICcuLi8uLi90eXBlcy9jb250ZXh0TWVudGlvbidcbmltcG9ydCB7IGZvcm1hdFF1aWNrQWN0aW9uTWVzc2FnZUZvckRpc3BsYXkgfSBmcm9tICcuLi8uLi91dGlscy9mb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2UnXG5cbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi8uLi90eXBlcy9Qcm9qZWN0J1xuaW1wb3J0IHsgdXNlUHJvamVjdHMgfSBmcm9tICcuLi91c2VQcm9qZWN0cydcbmltcG9ydCB7IHVzZVRhYlRhc2tEZWZhdWx0IH0gZnJvbSAnLi4vdXNlVGFiVGFza0RlZmF1bHQnXG5pbXBvcnQgeyBUQVNLX1VSTF9SRUdFWF9QQVRURVJOIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3Rhc2tVcmxzJ1xuaW1wb3J0IHsgZmV0Y2hBZ2VudERldGFpbCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21haWEvQWdlbnRzL2ZldGNoQWdlbnREZXRhaWwnXG5pbXBvcnQgeyBidWlsZEhpdGxBY3Rpb25UeXBlTGlzdCwgZ2V0SGl0bEFuYWx5dGljc0FnZW50VHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2hpdGxBbmFseXRpY3MnXG5pbXBvcnQgeyBzdHJlYW1pbmdTdG9yZSB9IGZyb20gJy4uL3VzZVN0cmVhbWluZ01lc3NhZ2UnXG5cbnR5cGUgQXR0YWNobWVudHNPck9wdGlvbnMgPSBBdHRhY2htZW50RmlsZVtdIHwgU2VuZE1lc3NhZ2VPcHRpb25zXG5cbmNvbnN0IG5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyA9IChhdHRhY2htZW50c09yT3B0aW9ucz86IEF0dGFjaG1lbnRzT3JPcHRpb25zKSA9PiB7XG4gIGlmIChBcnJheS5pc0FycmF5KGF0dGFjaG1lbnRzT3JPcHRpb25zKSkge1xuICAgIHJldHVybiB7IGF0dGFjaG1lbnRzOiBhdHRhY2htZW50c09yT3B0aW9ucywgb3B0aW9uczoge30gYXMgU2VuZE1lc3NhZ2VPcHRpb25zIH1cbiAgfVxuXG4gIGNvbnN0IG9wdGlvbnM6IFNlbmRNZXNzYWdlT3B0aW9ucyA9IGF0dGFjaG1lbnRzT3JPcHRpb25zID8/IHt9XG4gIHJldHVybiB7IGF0dGFjaG1lbnRzOiBvcHRpb25zLmF0dGFjaG1lbnRzID8/IFtdLCBvcHRpb25zIH1cbn1cblxuY29uc3Qgbm9ybWFsaXplQXNzaXN0YW50QXR0YWNobWVudHMgPSAocmF3QXR0YWNobWVudHM6IHVua25vd24pOiBBdHRhY2htZW50RmlsZVtdID0+IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJhd0F0dGFjaG1lbnRzKSkge1xuICAgIHJldHVybiBbXVxuICB9XG5cbiAgcmV0dXJuIHJhd0F0dGFjaG1lbnRzXG4gICAgLmZpbHRlcigoYXR0YWNobWVudCk6IGF0dGFjaG1lbnQgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4gISFhdHRhY2htZW50ICYmIHR5cGVvZiBhdHRhY2htZW50ID09PSAnb2JqZWN0JylcbiAgICAubWFwKChhdHRhY2htZW50LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbmFtZSA9XG4gICAgICAgIHR5cGVvZiBhdHRhY2htZW50Lm5hbWUgPT09ICdzdHJpbmcnICYmIGF0dGFjaG1lbnQubmFtZS50cmltKCkgPyBhdHRhY2htZW50Lm5hbWUudHJpbSgpIDogYGZpbGUtJHtpbmRleCArIDF9YFxuICAgICAgY29uc3QgdHlwZSA9IHR5cGVvZiBhdHRhY2htZW50LnR5cGUgPT09ICdzdHJpbmcnICYmIGF0dGFjaG1lbnQudHlwZS50cmltKCkgPyBhdHRhY2htZW50LnR5cGUudHJpbSgpIDogJ3BkZidcbiAgICAgIGNvbnN0IG1pbWVUeXBlID0gdHlwZW9mIGF0dGFjaG1lbnQubWltZV90eXBlID09PSAnc3RyaW5nJyA/IGF0dGFjaG1lbnQubWltZV90eXBlIDogJydcbiAgICAgIGNvbnN0IGZ1bGxGaWxlTmFtZSA9IG5hbWUuaW5jbHVkZXMoJy4nKSA/IG5hbWUgOiBgJHtuYW1lfS4ke3R5cGV9YFxuICAgICAgY29uc3QgbnVtZXJpY1NpemUgPVxuICAgICAgICB0eXBlb2YgYXR0YWNobWVudC5zaXplID09PSAnbnVtYmVyJ1xuICAgICAgICAgID8gYXR0YWNobWVudC5zaXplXG4gICAgICAgICAgOiBOdW1iZXIuaXNGaW5pdGUoTnVtYmVyKGF0dGFjaG1lbnQuc2l6ZSkpXG4gICAgICAgICAgICA/IE51bWJlcihhdHRhY2htZW50LnNpemUpXG4gICAgICAgICAgICA6IDBcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmlsZTogbmV3IEZpbGUoW10sIGZ1bGxGaWxlTmFtZSwgeyB0eXBlOiBtaW1lVHlwZSB9KSxcbiAgICAgICAgaWQ6XG4gICAgICAgICAgdHlwZW9mIGF0dGFjaG1lbnQuaWQgPT09ICdzdHJpbmcnICYmIGF0dGFjaG1lbnQuaWQudHJpbSgpXG4gICAgICAgICAgICA/IGF0dGFjaG1lbnQuaWRcbiAgICAgICAgICAgIDogYGFzc2lzdGFudC1maWxlLSR7aW5kZXh9LSR7ZnVsbEZpbGVOYW1lfWAsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHNpemU6IG51bWVyaWNTaXplLFxuICAgICAgICB0eXBlLFxuICAgICAgICB1cmxfb3JpZ2luYWw6IHR5cGVvZiBhdHRhY2htZW50LnVybF9vcmlnaW5hbCA9PT0gJ3N0cmluZycgPyBhdHRhY2htZW50LnVybF9vcmlnaW5hbCA6IHVuZGVmaW5lZCxcbiAgICAgICAgdXJsX3RodW1ibmFpbDogdHlwZW9mIGF0dGFjaG1lbnQudXJsX3RodW1ibmFpbCA9PT0gJ3N0cmluZycgPyBhdHRhY2htZW50LnVybF90aHVtYm5haWwgOiB1bmRlZmluZWQsXG4gICAgICAgIHVybF9maWxlOiB0eXBlb2YgYXR0YWNobWVudC51cmxfZmlsZSA9PT0gJ3N0cmluZycgPyBhdHRhY2htZW50LnVybF9maWxlIDogdW5kZWZpbmVkLFxuICAgICAgICByb2xlOiBhdHRhY2htZW50LnJvbGUgPT09ICdhc3Npc3RhbnQnID8gJ2Fzc2lzdGFudCcgOiAndXNlcicsXG4gICAgICB9XG4gICAgfSlcbn1cblxuLyoqIEV4dHJhZSB0YXNrX2lkcyBkZSBsb3MgdG9vbF9hcmdzIGRlIHBlbmRpbmdfYWN0aW9ucywgY3VicmllbmRvIGxhcyBmb3JtYXMgY29tdW5lczpcbiAqICAtIGB7IHRhc2tfaWQgfWAgbyBgeyBpZCB9YFxuICogIC0gYHsgdGFza19pZHM6IFtdIH1gXG4gKiAgLSBgeyB0YXNrczogW3sgdGFza19pZHxpZCB9LCAuLi5dIH1gXG4gKiAgw5p0aWwgcGFyYSB0b29scyBkZSBlZGl0L2Fzc2lnbi9kZWxldGUgY3VhbmRvIGxhIHJlc3B1ZXN0YSBkZWwgTExNIG5vIGluY2x1eWUgVVJMcyAvdGFza3MvLi4uL2RldGFpbC4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RUYXNrSWRzRnJvbVBlbmRpbmdBY3Rpb25zQXJncyhwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdKTogbnVtYmVyW10ge1xuICBjb25zdCBpZHM6IG51bWJlcltdID0gW11cbiAgY29uc3QgcHVzaElkID0gKHJhdzogdW5rbm93bikgPT4ge1xuICAgIGlmIChyYXcgPT0gbnVsbCkgcmV0dXJuXG4gICAgY29uc3QgbiA9IHBhcnNlSW50KFN0cmluZyhyYXcpLCAxMClcbiAgICBpZiAoIU51bWJlci5pc05hTihuKSkgaWRzLnB1c2gobilcbiAgfVxuICBwZW5kaW5nQWN0aW9ucy5mb3JFYWNoKGFjdGlvbiA9PiB7XG4gICAgaWYgKCFhY3Rpb24gfHwgdHlwZW9mIGFjdGlvbiAhPT0gJ29iamVjdCcpIHJldHVyblxuICAgIGNvbnN0IGFyZ3MgPSBhY3Rpb24udG9vbF9hcmdzXG4gICAgaWYgKCEoYXJncyAmJiB0eXBlb2YgYXJncyA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoYXJncykpKSByZXR1cm5cbiAgICBjb25zdCByZWMgPSBhcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgcHVzaElkKHJlYy50YXNrX2lkID8/IHJlYy5pZClcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZWMudGFza19pZHMpKSB7XG4gICAgICByZWMudGFza19pZHMuZm9yRWFjaChwdXNoSWQpXG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KHJlYy50YXNrcykpIHtcbiAgICAgIHJlYy50YXNrcy5mb3JFYWNoKHQgPT4ge1xuICAgICAgICBpZiAodCAmJiB0eXBlb2YgdCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodCkpIHtcbiAgICAgICAgICBjb25zdCB0cmVjID0gdCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICAgICAgIHB1c2hJZCh0cmVjLnRhc2tfaWQgPz8gdHJlYy5pZClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH0pXG4gIHJldHVybiBpZHNcbn1cblxuLyoqIHRhc2tfaWQgLyB0YXNrX2lkcyBlbiBwZW5kaW5nX2FjdGlvbnMgZGUgZGVsZXRlXyogKGxhIHJlc3B1ZXN0YSBwdWVkZSBubyBpbmNsdWlyIFVSTHMgL3Rhc2tzL+KApi9kZXRhaWwpLiAqL1xuZnVuY3Rpb24gZXh0cmFjdFRhc2tJZHNGcm9tRGVsZXRlUGVuZGluZ0FjdGlvbnMocGVuZGluZ0FjdGlvbnM6IFBlbmRpbmdBY3Rpb25bXSk6IG51bWJlcltdIHtcbiAgY29uc3QgaWRzOiBudW1iZXJbXSA9IFtdXG4gIHBlbmRpbmdBY3Rpb25zLmZvckVhY2goYWN0aW9uID0+IHtcbiAgICBpZiAoIWFjdGlvbiB8fCB0eXBlb2YgYWN0aW9uICE9PSAnb2JqZWN0JykgcmV0dXJuXG4gICAgY29uc3QgYXJncyA9IGFjdGlvbi50b29sX2FyZ3NcbiAgICBpZiAoIShhcmdzICYmIHR5cGVvZiBhcmdzID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShhcmdzKSkpIHJldHVyblxuICAgIGNvbnN0IHJlYyA9IGFyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICBpZiAoYWN0aW9uLnRvb2xfbmFtZSA9PT0gJ2RlbGV0ZV90YXNrJykge1xuICAgICAgY29uc3QgcmF3ID0gcmVjLnRhc2tfaWQgPz8gcmVjLmlkXG4gICAgICBpZiAocmF3ICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgbiA9IHBhcnNlSW50KFN0cmluZyhyYXcpLCAxMClcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4obikpIGlkcy5wdXNoKG4pXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhY3Rpb24udG9vbF9uYW1lID09PSAnZGVsZXRlX3Rhc2tzX2JhdGNoJykge1xuICAgICAgY29uc3QgbGlzdCA9IHJlYy50YXNrX2lkc1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobGlzdCkpIHtcbiAgICAgICAgbGlzdC5mb3JFYWNoKHRpZCA9PiB7XG4gICAgICAgICAgY29uc3QgbiA9IHBhcnNlSW50KFN0cmluZyh0aWQpLCAxMClcbiAgICAgICAgICBpZiAoIU51bWJlci5pc05hTihuKSkgaWRzLnB1c2gobilcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0pXG4gIHJldHVybiBpZHNcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEFnZW50SWRGcm9tRWRpdEFnZW50UGVuZGluZ0FjdGlvbnMocGVuZGluZ0FjdGlvbnM6IFBlbmRpbmdBY3Rpb25bXSk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBlZGl0QWN0aW9uID0gcGVuZGluZ0FjdGlvbnMuZmluZChhID0+IChhLnRvb2xfbmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gJ2VkaXRfYWdlbnQnKVxuICBpZiAoXG4gICAgIWVkaXRBY3Rpb24gfHxcbiAgICAhZWRpdEFjdGlvbi50b29sX2FyZ3MgfHxcbiAgICB0eXBlb2YgZWRpdEFjdGlvbi50b29sX2FyZ3MgIT09ICdvYmplY3QnIHx8XG4gICAgQXJyYXkuaXNBcnJheShlZGl0QWN0aW9uLnRvb2xfYXJncylcbiAgKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBjb25zdCByZWMgPSBlZGl0QWN0aW9uLnRvb2xfYXJncyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICBjb25zdCByYXcgPSByZWMuYWdlbnRfaWQgPz8gcmVjLmFnZW50SWRcbiAgcmV0dXJuIHJhdyAhPSBudWxsID8gU3RyaW5nKHJhdykgOiBudWxsXG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RBZ2VudElkRnJvbVBlbmRpbmdBY3Rpb25zQnlUb29sTmFtZShwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdLCB0b29sTmFtZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGFjdGlvbiA9IHBlbmRpbmdBY3Rpb25zLmZpbmQoYSA9PiAoYS50b29sX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09IHRvb2xOYW1lLnRvTG93ZXJDYXNlKCkpXG4gIGlmICghYWN0aW9uIHx8ICFhY3Rpb24udG9vbF9hcmdzIHx8IHR5cGVvZiBhY3Rpb24udG9vbF9hcmdzICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KGFjdGlvbi50b29sX2FyZ3MpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBjb25zdCByZWMgPSBhY3Rpb24udG9vbF9hcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIGNvbnN0IHJhdyA9IHJlYy5hZ2VudF9pZCA/PyByZWMuYWdlbnRJZCA/PyByZWMuaWRcbiAgcmV0dXJuIHJhdyAhPSBudWxsID8gU3RyaW5nKHJhdykgOiBudWxsXG59XG5cbi8qKiDDmmx0aW1vIHJlY3Vyc28gc2kgbm8gaGF5IGxpbmtzIG5pIHRvb2xfYXJncyBwYXJzZWFibGVzIChwLiBlai4gXCJJRCAqKjc1OTcxMDYqKlwiKS4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RUYXNrSWRzRnJvbUFzc2lzdGFudERlbGV0aW9uVGV4dCh0ZXh0OiBzdHJpbmcpOiBudW1iZXJbXSB7XG4gIGNvbnN0IGxhYmVsZWQgPSB0ZXh0Lm1hdGNoKC9cXGJJRFxccypcXCpcXCooXFxkKylcXCpcXCovaSlcbiAgaWYgKGxhYmVsZWQpIHtcbiAgICBjb25zdCBuID0gcGFyc2VJbnQobGFiZWxlZFsxXSwgMTApXG4gICAgcmV0dXJuIE51bWJlci5pc05hTihuKSA/IFtdIDogW25dXG4gIH1cbiAgY29uc3QgYm9sZCA9IHRleHQubWF0Y2goL1xcKlxcKihcXGR7NSx9KVxcKlxcKi8pXG4gIGlmIChib2xkKSB7XG4gICAgY29uc3QgbiA9IHBhcnNlSW50KGJvbGRbMV0sIDEwKVxuICAgIHJldHVybiBOdW1iZXIuaXNOYU4obikgPyBbXSA6IFtuXVxuICB9XG4gIHJldHVybiBbXVxufVxuXG5jb25zdCB1c2VTdGFibGVDYWxsYmFja3MgPSAoYXV0aFVzZXI6IENPUlVzZXIpID0+IHtcbiAgY29uc3QgY3VycmVudFVzZXIgPSB1c2VSZWY8Q2hhdE1lc3NhZ2VVc2VyPih7XG4gICAgaWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgbmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgIGF2YXRhcjogYXV0aFVzZXIucGljdHVyZSxcbiAgfSlcblxuICBpZiAoXG4gICAgY3VycmVudFVzZXIuY3VycmVudC5pZCAhPT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSB8fFxuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQubmFtZSAhPT0gYXV0aFVzZXIuZmlyc3ROYW1lIHx8XG4gICAgY3VycmVudFVzZXIuY3VycmVudC5hdmF0YXIgIT09IGF1dGhVc2VyLnBpY3R1cmVcbiAgKSB7XG4gICAgY3VycmVudFVzZXIuY3VycmVudCA9IHtcbiAgICAgIGlkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgbmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgYXZhdGFyOiBhdXRoVXNlci5waWN0dXJlLFxuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGN1cnJlbnRVc2VyOiBjdXJyZW50VXNlci5jdXJyZW50LFxuICB9XG59XG5cbmNvbnN0IHBhcnNlU1NFTGluZSA9IChsaW5lOiBzdHJpbmcpOiB7IGV2ZW50VHlwZTogc3RyaW5nOyBkYXRhOiB1bmtub3duIH0gfCBudWxsID0+IHtcbiAgaWYgKCFsaW5lLnRyaW0oKSkgcmV0dXJuIG51bGxcblxuICBjb25zdCBbZXZlbnRMaW5lLCBkYXRhTGluZV0gPSBsaW5lLnNwbGl0KCdcXG4nKVxuICBpZiAoIWV2ZW50TGluZSB8fCAhZGF0YUxpbmUpIHJldHVybiBudWxsXG5cbiAgY29uc3QgZXZlbnRUeXBlID0gZXZlbnRMaW5lLnJlcGxhY2UoJ2V2ZW50OiAnLCAnJykudHJpbSgpXG4gIGNvbnN0IGRhdGFTdHIgPSBkYXRhTGluZS5yZXBsYWNlKCdkYXRhOiAnLCAnJykudHJpbSgpXG5cbiAgdHJ5IHtcbiAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShkYXRhU3RyKVxuICAgIHJldHVybiB7IGV2ZW50VHlwZSwgZGF0YSB9XG4gIH0gY2F0Y2ggKHBhcnNlRXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIFNTRSBkYXRhOicsIHBhcnNlRXJyb3IsIGRhdGFTdHIpXG4gICAgcmV0dXJuIG51bGxcbiAgfVxufVxuXG5jb25zdCBwcm9jZXNzU1NFU3RyZWFtID0gYXN5bmMgKFxuICByZXNwb25zZTogUmVzcG9uc2UsXG4gIHRocmVhZElkOiBzdHJpbmcsXG4gIGNhbGxiYWNrczoge1xuICAgIG9uVG9rZW46IChjb250ZW50OiBzdHJpbmcpID0+IHZvaWRcbiAgICBvbk5vZGU6IChtZXNzYWdlOiBzdHJpbmcsIHRocmVhZElkOiBzdHJpbmcpID0+IHZvaWRcbiAgICBvbkNvbXBsZXRlOiAoXG4gICAgICBmaW5hbENvbnRlbnQ6IHN0cmluZyxcbiAgICAgIHNvdXJjZXM6IGFueSxcbiAgICAgIG1lbW9yeVNlc3Npb25JZDogc3RyaW5nLFxuICAgICAgY3VycmVudFRocmVhZElkOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50cz86IGFueVtdIHwgbnVsbCxcbiAgICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10gfCBudWxsLFxuICAgICAgYWdlbnRJZD86IHN0cmluZyB8IG51bGxcbiAgICApID0+IHZvaWRcbiAgICBvbkVycm9yOiAoZXJyb3I6IGFueSwgdGhyZWFkSWQ6IHN0cmluZykgPT4gdm9pZFxuICAgIG9uQXBwcm92YWxSZXF1aXJlZD86IChhcHByb3ZhbDogYW55LCBhY2N1bXVsYXRlZENvbnRlbnQ6IHN0cmluZywgY3VycmVudFRocmVhZElkOiBzdHJpbmcpID0+IHZvaWRcbiAgfVxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLmJvZHk/LmdldFJlYWRlcigpXG4gIGlmICghcmVhZGVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyByZWFkZXIgYXZhaWxhYmxlJylcbiAgfVxuXG4gIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKVxuICBsZXQgYnVmZmVyID0gJydcbiAgbGV0IGFjY3VtdWxhdGVkQ29udGVudCA9ICcnXG4gIGxldCBpc1N0cmVhbUNvbXBsZXRlID0gZmFsc2VcblxuICBmdW5jdGlvbiBoYW5kbGVMaW5lKGxpbmU6IHN0cmluZykge1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlU1NFTGluZShsaW5lKVxuICAgIGlmICghcGFyc2VkKSByZXR1cm5cblxuICAgIGNvbnN0IHsgZXZlbnRUeXBlLCBkYXRhIH0gPSBwYXJzZWRcbiAgICBjb25zdCBldmVudERhdGEgPSBkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG5cbiAgICBpZiAoZXZlbnRUeXBlID09PSAndG9rZW4nKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gZXZlbnREYXRhLmNvbnRlbnQgYXMgc3RyaW5nXG4gICAgICBhY2N1bXVsYXRlZENvbnRlbnQgKz0gY29udGVudFxuICAgICAgY2FsbGJhY2tzLm9uVG9rZW4oYWNjdW11bGF0ZWRDb250ZW50KVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnbm9kZScpIHtcbiAgICAgIGlmIChldmVudERhdGEubWVzc2FnZSAmJiB0eXBlb2YgZXZlbnREYXRhLm1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNhbGxiYWNrcy5vbk5vZGUoZXZlbnREYXRhLm1lc3NhZ2UsIHRocmVhZElkKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnY29tcGxldGUnKSB7XG4gICAgICBjb25zdCBmaW5hbENvbnRlbnQgPSAoZXZlbnREYXRhLmNvbnRlbnQgYXMgc3RyaW5nKSB8fCBhY2N1bXVsYXRlZENvbnRlbnRcbiAgICAgIGNvbnN0IHNvdXJjZXMgPSAoZXZlbnREYXRhLnNvdXJjZXMgYXMgdW5rbm93bikgfHwgbnVsbFxuICAgICAgY29uc3QgbWVtb3J5U2Vzc2lvbklkID0gKGV2ZW50RGF0YS5tZW1vcnlfc2Vzc2lvbl9pZCBhcyBzdHJpbmcpIHx8ICcnXG4gICAgICBjb25zdCBhdHRhY2htZW50cyA9IEFycmF5LmlzQXJyYXkoZXZlbnREYXRhLmF0dGFjaG1lbnRzKSA/IGV2ZW50RGF0YS5hdHRhY2htZW50cyA6IG51bGxcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zID0gQXJyYXkuaXNBcnJheShldmVudERhdGEuc3VnZ2VzdF9yZXBseSlcbiAgICAgICAgPyAoZXZlbnREYXRhLnN1Z2dlc3RfcmVwbHkgYXMgc3RyaW5nW10pXG4gICAgICAgIDogQXJyYXkuaXNBcnJheShldmVudERhdGEuc3VnZ2VzdGlvbnMpXG4gICAgICAgICAgPyAoZXZlbnREYXRhLnN1Z2dlc3Rpb25zIGFzIHN0cmluZ1tdKVxuICAgICAgICAgIDogbnVsbFxuICAgICAgY29uc3QgYWdlbnRJZFJhdyA9IGV2ZW50RGF0YS5hZ2VudF9pZCA/PyBldmVudERhdGEuYWdlbnRJZFxuICAgICAgY29uc3QgY29tcGxldGVkQWdlbnRJZCA9IGFnZW50SWRSYXcgIT0gbnVsbCAmJiBTdHJpbmcoYWdlbnRJZFJhdykudHJpbSgpICE9PSAnJyA/IFN0cmluZyhhZ2VudElkUmF3KS50cmltKCkgOiBudWxsXG4gICAgICBjYWxsYmFja3Mub25Db21wbGV0ZShmaW5hbENvbnRlbnQsIHNvdXJjZXMsIG1lbW9yeVNlc3Npb25JZCwgdGhyZWFkSWQsIGF0dGFjaG1lbnRzLCBzdWdnZXN0aW9ucywgY29tcGxldGVkQWdlbnRJZClcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ2FwcHJvdmFsX3JlcXVpcmVkJykge1xuICAgICAgY2FsbGJhY2tzLm9uQXBwcm92YWxSZXF1aXJlZD8uKGV2ZW50RGF0YSwgYWNjdW11bGF0ZWRDb250ZW50LCB0aHJlYWRJZClcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgY2FsbGJhY2tzLm9uRXJyb3IoZXZlbnREYXRhLmVycm9yLCB0aHJlYWRJZClcbiAgICB9XG4gIH1cblxuICB3aGlsZSAoIWlzU3RyZWFtQ29tcGxldGUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXdhaXQtaW4tbG9vcFxuICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcbiAgICBpZiAoZG9uZSkge1xuICAgICAgaXNTdHJlYW1Db21wbGV0ZSA9IHRydWVcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgYnVmZmVyICs9IGRlY29kZXIuZGVjb2RlKHZhbHVlLCB7IHN0cmVhbTogdHJ1ZSB9KVxuICAgIGNvbnN0IGxpbmVzID0gYnVmZmVyLnNwbGl0KCdcXG5cXG4nKVxuICAgIGJ1ZmZlciA9IGxpbmVzLnBvcCgpIHx8ICcnXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBoYW5kbGVMaW5lKGxpbmVzW2ldKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgdXNlQ2hhdE1hbmFnZXIgPSAoe1xuICBjaGF0SWQ6IGluaXRpYWxDaGF0SWQsXG4gIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgb25FcnJvcixcbiAgYWdlbnRzID0gW10sXG59OiBVc2VDaGF0TWFuYWdlclByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IGF1dGhVc2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IHtcbiAgICBwcm9qZWN0LFxuICAgIHNldFByb2plY3QsXG4gICAgY2xpZW50LFxuICAgIHNldENsaWVudCxcbiAgICB0YXNrLFxuICAgIGFnZW50LFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBjaGlwc1Byb2plY3QsXG4gICAgc2V0Q2hpcHNQcm9qZWN0LFxuICB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IGV2ZW50ID0gdXNlRXZlbnQoKVxuICBjb25zdCB7IGZldGNoUHJvamVjdHMgfSA9IHVzZVByb2plY3RzKClcbiAgY29uc3QgeyBjdXJyZW50VXNlciB9ID0gdXNlU3RhYmxlQ2FsbGJhY2tzKGF1dGhVc2VyKVxuICBjb25zdCB7IGdldFRhYlRhc2tEZWZhdWx0IH0gPSB1c2VUYWJUYXNrRGVmYXVsdCgpXG4gIGNvbnN0IGN1cnJlbnRNZXNzYWdlSWQgPSB1c2VSZWYodXVpZHY0KCkpXG4gIGNvbnN0IGN1cnJlbnRVc2VyUXVlc3Rpb24gPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgY3VycmVudENoYXRJZCA9IHVzZVJlZihpbml0aWFsQ2hhdElkIHx8IHV1aWR2NCgpKVxuICBjb25zdCByZXBvcnRlZEV2ZW50ID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBtZXNzYWdlc1JlZiA9IHVzZVJlZjxDaGF0TWVzc2FnZVtdPihbXSlcbiAgLyoqXG4gICAqIEd1YXJkYSBpbmZvIGRlbCDDumx0aW1vIGFwcHJvdmFsIG1hbnVhbCAoY3VhbmRvIGVsIHVzdWFyaW8gdGlwZWEgXCJzaVwiL1wibm9cIiBlbiBsdWdhclxuICAgKiBkZSBjbGlja2VhciBlbCBib3TDs24pLiBFbiBtYW51YWwgYXBwcm92YWwsIGBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkYCByZXRvcm5hIGVhcmx5XG4gICAqIHNpbiBhZ3JlZ2FyIHVuIG1lbnNhamUgY29uIGBhcHByb3ZhbGAsIGFzw60gcXVlIGxhIGzDs2dpY2EgZGUgcmVmZXRjaCBlbiBgb25TdHJlYW1GaW5pc2hgXG4gICAqIG5vIGxvIGRldGVjdGEgdsOtYSBgcHJldmlvdXNNZXNzYWdlLmFwcHJvdmFsYC4gTG8gZ3VhcmRhbW9zIGFjw6EgcGFyYSBjb25zdW1pcmxvIGRlc3B1w6lzLlxuICAgKi9cbiAgY29uc3QgbGFzdE1hbnVhbEFwcHJvdmFsUmVmID0gdXNlUmVmPHtcbiAgICB0b29sTmFtZTogc3RyaW5nXG4gICAgdG9vbEFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbFxuICB9IHwgbnVsbD4obnVsbClcbiAgY29uc3QgaXNQcm9jZXNzaW5nUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBmaXJzdFRpbWVSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIC8qKiBJZCBkZWwgcGxhY2Vob2xkZXIgZGVsIG1lbnNhamUgZW4gc3RyZWFtaW5nIGFjdGl2byAoc2kgaGF5KS4gKi9cbiAgY29uc3Qgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICAvKipcbiAgICogQ2hhdCBhbCBxdWUgcGVydGVuZWNlIGVsIHN0cmVhbSBhY3R1YWxtZW50ZSBhY3Rpdm8uIFNpIGNhbWJpYSBlbCBjaGF0XG4gICAqIG1pZW50cmFzIHVuIHN0cmVhbSBlc3TDoSBlbiB2dWVsbywgZGVzY2FydGFtb3MgbG9zIHRva2VucyByZXNpZHVhbGVzXG4gICAqIHF1ZSBwdWVkYW4gbGxlZ2FyIGFudGVzIGRlIHF1ZSBlbCBhYm9ydCBzZSBjb21wbGV0ZS5cbiAgICovXG4gIGNvbnN0IGFjdGl2ZVN0cmVhbUNoYXRJZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICAvKiogU2V0dGVyIGluZGlyZWN0byBwYXJhIGFib3J0YXIgZWwgc3RyZWFtIGFudGVzIGRlIHF1ZSBlbCBob29rIGRlXG4gICAqIG9ycXVlc3RhZG9yIGVzdMOpIGluaWNpYWxpemFkbyAoc2UgbGlua2VhIG3DoXMgYWJham8pLiAqL1xuICBjb25zdCBhYm9ydFN0cmVhbVNpbGVudGx5UmVmID0gdXNlUmVmPCgpID0+IHZvaWQ+KCgpID0+IHVuZGVmaW5lZClcbiAgY29uc3QgW2FjdGl2ZUxvYWRpbmdzLCBzZXRBY3RpdmVMb2FkaW5nc10gPSB1c2VTdGF0ZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pih7fSlcblxuICBjb25zdCBpc1dlYlNlYXJjaEFjdGl2ZVJlZiA9IHVzZVJlZihpc1dlYlNlYXJjaEFjdGl2ZSlcbiAgY29uc3QgaXNEZWVwU2VhcmNoQWN0aXZlUmVmID0gdXNlUmVmKGlzRGVlcFNlYXJjaEFjdGl2ZSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQgPSBpc1dlYlNlYXJjaEFjdGl2ZVxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50ID0gaXNEZWVwU2VhcmNoQWN0aXZlXG4gIH0sIFtpc1dlYlNlYXJjaEFjdGl2ZSwgaXNEZWVwU2VhcmNoQWN0aXZlXSlcblxuICBjb25zdCB7IGxvYWRpbmdNZXNzYWdlcywgbWVzc2FnZXMsIGlzTG9hZGluZ01vcmVNZXNzYWdlcywgbG9hZE1lc3NhZ2VzLCBhZGRNZXNzYWdlLCByZW1vdmVNZXNzYWdlLCBoYW5kbGVTY3JvbGwgfSA9XG4gICAgdXNlQ2hhdE1lc3NhZ2VzKHtcbiAgICAgIGNoYXRJZDogaW5pdGlhbENoYXRJZCB8fCBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICBjdXJyZW50VXNlcixcbiAgICAgIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgICAgIG9uRXJyb3IsXG4gICAgICBhZ2VudHMsXG4gICAgfSlcblxuICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gbWVzc2FnZXNcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdjaGF0LWxvYWRpbmctbWVzc2FnZXMtY2hhbmdlZCcsIHtcbiAgICAgIGRldGFpbDogeyBsb2FkaW5nTWVzc2FnZXMgfSxcbiAgICB9KVxuICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpXG4gIH0sIFtsb2FkaW5nTWVzc2FnZXNdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGluaXRpYWxDaGF0SWQgJiYgaW5pdGlhbENoYXRJZCAhPT0gY3VycmVudENoYXRJZC5jdXJyZW50KSB7XG4gICAgICAvLyBTaSBoYXkgdW4gc3RyZWFtIGVuIGN1cnNvLCBhYm9ydGFybG8gc2lsZW5jaW9zYW1lbnRlIHBhcmEgcXVlIGxvc1xuICAgICAgLy8gdG9rZW5zIHJlc2lkdWFsZXMgbm8gc2UgZXNjcmliYW4gZW4gZWwgY2hhdCBudWV2by5cbiAgICAgIGFib3J0U3RyZWFtU2lsZW50bHlSZWYuY3VycmVudCgpXG5cbiAgICAgIC8vIExpbXBpYXIgY29udGV4dG8gZ2xvYmFsIGFsIGNhbWJpYXIgZGUgY29udmVyc2FjacOzblxuICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuXG4gICAgICBjdXJyZW50Q2hhdElkLmN1cnJlbnQgPSBpbml0aWFsQ2hhdElkXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgc3RyZWFtaW5nU3RvcmUuY2xlYXIoKVxuXG4gICAgICBsb2FkTWVzc2FnZXMoKVxuICAgIH1cbiAgfSwgW2luaXRpYWxDaGF0SWQsIHByb2plY3QsIHNldFByb2plY3QsIHNldENsaWVudCwgc2V0Q2hpcHNQcm9qZWN0LCBsb2FkTWVzc2FnZXNdKVxuXG4gIC8vIFNpbmNyb25pemFyIGNoaXBzUHJvamVjdCBjdWFuZG8gaGF5IG1lbnNhamVzIGNvbiBwcm9qZWN0SWQgcGVybyBjaGlwc1Byb2plY3Qgbm8gc2UgaGEgc2V0ZWFkb1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjaGlwc1Byb2plY3QgfHwgbG9hZGluZ01lc3NhZ2VzKSByZXR1cm5cbiAgICBjb25zdCBsYXN0TXNnV2l0aFByb2plY3QgPSBtZXNzYWdlcy5maWx0ZXIobXNnID0+IG1zZy5wcm9qZWN0SWQpLmF0KC0xKVxuICAgIGNvbnN0IHsgcHJvamVjdElkLCBwcm9qZWN0TmFtZSB9ID0gbGFzdE1zZ1dpdGhQcm9qZWN0IHx8IHt9XG4gICAgaWYgKCFwcm9qZWN0SWQpIHJldHVyblxuXG4gICAgZmV0Y2hQcm9qZWN0cyhwcm9qZWN0SWQpLnRoZW4ocHJvamVjdHMgPT4ge1xuICAgICAgY29uc3QgZm91bmQgPSBwcm9qZWN0cz8uZmluZChwID0+IE51bWJlcihwLmlkKSA9PT0gTnVtYmVyKHByb2plY3RJZCkpXG4gICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KHtcbiAgICAgICAgICBwcm9qZWN0TmFtZTogZm91bmQubmFtZSxcbiAgICAgICAgICBjbGllbnROYW1lOiBmb3VuZC5jbGllbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgICAgcHJvamVjdElkOiBTdHJpbmcoZm91bmQuaWQpLFxuICAgICAgICB9KVxuICAgICAgICBzZXRQcm9qZWN0KGZvdW5kKVxuICAgICAgfSBlbHNlIGlmIChwcm9qZWN0TmFtZSkge1xuICAgICAgICBzZXRDaGlwc1Byb2plY3Qoe1xuICAgICAgICAgIHByb2plY3ROYW1lLFxuICAgICAgICAgIGNsaWVudE5hbWU6ICcnLFxuICAgICAgICAgIHByb2plY3RJZDogU3RyaW5nKHByb2plY3RJZCksXG4gICAgICAgIH0pXG4gICAgICAgIHNldFByb2plY3QoeyBpZDogTnVtYmVyKHByb2plY3RJZCksIG5hbWU6IHByb2plY3ROYW1lIH0pXG4gICAgICB9XG4gICAgfSlcbiAgfSwgW21lc3NhZ2VzLCBjaGlwc1Byb2plY3QsIGxvYWRpbmdNZXNzYWdlcywgZmV0Y2hQcm9qZWN0cywgc2V0Q2hpcHNQcm9qZWN0LCBzZXRQcm9qZWN0XSlcblxuICAvLyBTaW5jcm9uaXphciBjbGllbnQgY3VhbmRvIGhheSBtZW5zYWplcyBjb24gY2xpZW50SWQgcGVybyBjbGllbnQgbm8gc2UgaGEgc2V0ZWFkb1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjbGllbnQgfHwgbG9hZGluZ01lc3NhZ2VzKSByZXR1cm5cbiAgICBjb25zdCBsYXN0TXNnV2l0aENsaWVudCA9IG1lc3NhZ2VzLmZpbHRlcihtc2cgPT4gbXNnLmNsaWVudElkICE9IG51bGwgJiYgbXNnLmNsaWVudE5hbWUpLmF0KC0xKVxuICAgIGNvbnN0IHsgY2xpZW50SWQ6IG1zZ0NsaWVudElkLCBjbGllbnROYW1lOiBtc2dDbGllbnROYW1lIH0gPSBsYXN0TXNnV2l0aENsaWVudCB8fCB7fVxuICAgIGlmIChtc2dDbGllbnRJZCA9PSBudWxsIHx8ICFtc2dDbGllbnROYW1lKSByZXR1cm5cblxuICAgIHNldENsaWVudD8uKHsgaWQ6IE51bWJlcihtc2dDbGllbnRJZCksIG5hbWU6IG1zZ0NsaWVudE5hbWUgfSlcbiAgfSwgW21lc3NhZ2VzLCBjbGllbnQsIGxvYWRpbmdNZXNzYWdlcywgc2V0Q2xpZW50XSlcblxuICBjb25zdCBoYW5kbGVTdHJlYW1FcnJvciA9IHVzZUNhbGxiYWNrKFxuICAgIChlcnJvck1lc3NhZ2U/OiBzdHJpbmcsIGVycm9yUmF3TWVzc2FnZT86IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcbiAgICAgIHN0cmVhbWluZ1N0b3JlLmNsZWFyKClcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmVtb3ZlTWVzc2FnZSh0ZW1wTWVzc2FnZUlkKVxuXG4gICAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgICAgZXJyb3JNZXNzYWdlID09PSBcIkFjY2VzcyBkZW5pZWQ6IFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoaXMgYWdlbnRcIlxuICAgICAgICAgID8gdCgnY2hhdC5lcnJvckFjY2Vzc0RlbmllZCcpXG4gICAgICAgICAgOiBlcnJvck1lc3NhZ2UgPT09ICdpbnZhbGlkX3JlcXVlc3RfZXJyb3InICYmIGVycm9yUmF3TWVzc2FnZT8uaW5jbHVkZXMoJ3Byb21wdCBpcyB0b28gbG9uZycpXG4gICAgICAgICAgICA/IHQoJ2NoYXQuZXJyb3JQcm9tcHRUb29Mb25nJywgeyB1c2VkOiBlcnJvclJhd01lc3NhZ2UubWF0Y2goLyhcXGQrKSB0b2tlbnMvKT8uWzFdID8/ICcnIH0pXG4gICAgICAgICAgICA6IHQoJ2NoYXQuZXJyb3InKVxuXG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9YCxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgaXNFcnJvcjogdHJ1ZSxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2UsIHRdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1VcGRhdGUgPSB1c2VDYWxsYmFjayhcbiAgICAoY29udGVudDogc3RyaW5nLCBzb3VyY2VzOiBhbnksIG1lbW9yeVNlc3Npb25JZDogc3RyaW5nKSA9PiB7XG4gICAgICAvLyBTaSBlbCBjaGF0IGNhbWJpw7MgbWllbnRyYXMgZWwgc3RyZWFtIGVzdGFiYSBlbiB2dWVsbywgZGVzY2FydGFyIGVsXG4gICAgICAvLyB0b2tlbiByZXNpZHVhbDogbm8gZGViZSBwaW50YXJzZSBlbiBlbCBudWV2byBjaGF0LlxuICAgICAgaWYgKGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ICE9IG51bGwgJiYgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgIT09IGN1cnJlbnRDaGF0SWQuY3VycmVudCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcblxuICAgICAgLy8gUHJpbWVyYSBsbGFtYWRhIGRlIGVzdGUgc3RyZWFtOiBpbnNlcnRhbW9zIGVsIHBsYWNlaG9sZGVyIGVuIGVsXG4gICAgICAvLyBhcnJheSBkZSBgbWVzc2FnZXNgIHVuYSDDum5pY2EgdmV6LiBMYXMgbGxhbWFkYXMgc3Vic2lndWllbnRlcyB5YSBub1xuICAgICAgLy8gdG9jYW4gYG1lc3NhZ2VzYDsgZWwgdGV4dG8gdml2ZSBlbiBlbCBzdHJlYW1pbmdTdG9yZSAoZXh0ZXJubyksIHBvclxuICAgICAgLy8gbG8gcXVlIFJlYWN0IG5vIHJlLXJlbmRlcml6YSBlbCDDoXJib2wgY29tcGxldG8gZW4gY2FkYSB0b2tlbi5cbiAgICAgIGlmIChzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgIT09IHRlbXBNZXNzYWdlSWQpIHtcbiAgICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gdGVtcE1lc3NhZ2VJZFxuICAgICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IGN1cnJlbnRDaGF0SWQuY3VycmVudFxuICAgICAgICBzdHJlYW1pbmdTdG9yZS5zdGFydCh0ZW1wTWVzc2FnZUlkKVxuICAgICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgICBpZDogdGVtcE1lc3NhZ2VJZCxcbiAgICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgICAgc291cmNlcyxcbiAgICAgICAgICBtZW1vcnlTZXNzaW9uSWQsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIHN0cmVhbWluZ1N0b3JlLnNldFRleHQodGVtcE1lc3NhZ2VJZCwgY29udGVudClcbiAgICB9LFxuICAgIFthZGRNZXNzYWdlXVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtRmluaXNoID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKFxuICAgICAgY29udGVudDogc3RyaW5nLFxuICAgICAgc291cmNlczogYW55LFxuICAgICAgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgICByYXdBdHRhY2htZW50cz86IGFueVtdIHwgbnVsbCxcbiAgICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10gfCBudWxsLFxuICAgICAgY29tcGxldGVkQWdlbnRJZD86IHN0cmluZyB8IG51bGxcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IHRlbXBNZXNzYWdlSWQgPSBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fS1zdHJlYW1pbmdgXG4gICAgICBzdHJlYW1pbmdTdG9yZS5jbGVhcigpXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIHJlbW92ZU1lc3NhZ2UodGVtcE1lc3NhZ2VJZClcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gbm9ybWFsaXplQXNzaXN0YW50QXR0YWNobWVudHMocmF3QXR0YWNobWVudHMpXG5cbiAgICAgIC8vIERldGVjdGFyIHRvZGFzIGxhcyBVUkxzIGRlIHRhcmVhcyAoLi4uL3Rhc2tzLzEyMy9kZXRhaWx8bWVzc2FnZXxtZXNzYWdlc3xmaWxlc3xoaXN0b3J5fGhvdXJzKVxuICAgICAgY29uc3QgdGFza1VybFJlZ2V4ID0gbmV3IFJlZ0V4cChUQVNLX1VSTF9SRUdFWF9QQVRURVJOLCAnZycpXG4gICAgICBjb25zdCBtYXRjaGVzID0gWy4uLmNvbnRlbnQubWF0Y2hBbGwodGFza1VybFJlZ2V4KV1cblxuICAgICAgbGV0IGNvbnRlbnRUb0FkZCA9IGNvbnRlbnRcbiAgICAgIGNvbnN0IHByZXZpb3VzTWVzc2FnZSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmlsdGVyKG0gPT4gbS5pZCAhPT0gdGVtcE1lc3NhZ2VJZCkuYXQoLTEpXG4gICAgICBjb25zdCBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlID0gcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbCAhPSBudWxsXG4gICAgICBjb25zdCBUQVNLX0NSRUFUSU9OX1RPT0xTID0gWydjcmVhdGVfdGFzaycsICdjcmVhdGVfdGFza3NfYmF0Y2gnLCAnY2xvbmVfdGFzayddXG4gICAgICBjb25zdCBUQVNLX0VESVRfVE9PTFMgPSBbXG4gICAgICAgICdlZGl0X3Rhc2snLFxuICAgICAgICAnZWRpdF90YXNrc19iYXRjaCcsXG4gICAgICAgICd0YXNrX2Fzc2lnbicsXG4gICAgICAgICd0YXNrX3VuYXNzaWduJyxcbiAgICAgICAgJ3VwZGF0ZV90YXNrX3R5cGUnLFxuICAgICAgICAndXBkYXRlX2VzdGltYXRlZF9ob3VycycsXG4gICAgICAgICdhc3NpZ25fdGFza19sYWJlbCcsXG4gICAgICBdXG4gICAgICBjb25zdCBUQVNLX0RFTEVURV9UT09MUyA9IFsnZGVsZXRlX3Rhc2snLCAnZGVsZXRlX3Rhc2tzX2JhdGNoJ11cbiAgICAgIGNvbnN0IHBlbmRpbmdBY3Rpb25zID0gcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zIHx8IFtdXG4gICAgICBjb25zdCB3YXNUYXNrQ3JlYXRpb24gPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBUQVNLX0NSRUFUSU9OX1RPT0xTLmluY2x1ZGVzKGFjdGlvbi50b29sX25hbWUpKVxuICAgICAgY29uc3Qgd2FzVGFza0VkaXQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBUQVNLX0VESVRfVE9PTFMuaW5jbHVkZXMoYWN0aW9uLnRvb2xfbmFtZSkpXG4gICAgICBjb25zdCB3YXNUYXNrRGVsZXRlID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gVEFTS19ERUxFVEVfVE9PTFMuaW5jbHVkZXMoYWN0aW9uLnRvb2xfbmFtZSkpXG4gICAgICBjb25zdCB3YXNDcmVhdGVBZ2VudEFwcHJvdmVkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsU3RhdHVzID09PSAnYXBwcm92ZWQnICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBhY3Rpb24udG9vbF9uYW1lID09PSAnY3JlYXRlX2FnZW50JylcbiAgICAgIGNvbnN0IHdhc0NvbmZpZ3VyZUFnZW50QWNjZXNzQXBwcm92ZWQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWxTdGF0dXMgPT09ICdhcHByb3ZlZCcgJiZcbiAgICAgICAgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IChhY3Rpb24udG9vbF9uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAnY29uZmlndXJlX2FnZW50X2FjY2VzcycpXG4gICAgICBsZXQgY3JlYXRlQWdlbnRGb2xsb3dVcDogeyBhZ2VudElkOiBzdHJpbmcgfSB8IHVuZGVmaW5lZFxuICAgICAgaWYgKHdhc0NyZWF0ZUFnZW50QXBwcm92ZWQgJiYgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgJiYgY29tcGxldGVkQWdlbnRJZD8udHJpbSgpKSB7XG4gICAgICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAgPSB7IGFnZW50SWQ6IGNvbXBsZXRlZEFnZW50SWQudHJpbSgpIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHdhc0NvbmZpZ3VyZUFnZW50QWNjZXNzQXBwcm92ZWQgJiZcbiAgICAgICAgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgJiZcbiAgICAgICAgKGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKSB8fFxuICAgICAgICAgIGV4dHJhY3RBZ2VudElkRnJvbVBlbmRpbmdBY3Rpb25zQnlUb29sTmFtZShwZW5kaW5nQWN0aW9ucywgJ2NvbmZpZ3VyZV9hZ2VudF9hY2Nlc3MnKSlcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjb25maWd1cmVkQWdlbnRJZCA9XG4gICAgICAgICAgY29tcGxldGVkQWdlbnRJZD8udHJpbSgpIHx8XG4gICAgICAgICAgZXh0cmFjdEFnZW50SWRGcm9tUGVuZGluZ0FjdGlvbnNCeVRvb2xOYW1lKHBlbmRpbmdBY3Rpb25zLCAnY29uZmlndXJlX2FnZW50X2FjY2VzcycpXG4gICAgICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAgPSB7XG4gICAgICAgICAgYWdlbnRJZDogY29uZmlndXJlZEFnZW50SWQgYXMgc3RyaW5nLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh3YXNDcmVhdGVBZ2VudEFwcHJvdmVkKSB7XG4gICAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRIaXRsT3B0aW9uLCB7XG4gICAgICAgICAgYWdlbnRfdHlwZTogZ2V0SGl0bEFuYWx5dGljc0FnZW50VHlwZShhZ2VudCksXG4gICAgICAgICAgYWN0aW9uX3R5cGU6IGJ1aWxkSGl0bEFjdGlvblR5cGVMaXN0KHBlbmRpbmdBY3Rpb25zKSxcbiAgICAgICAgICBkZWNpc2lvbjogJ2FjY2VwdCcsXG4gICAgICAgICAgb3B0aW9uOiAnY3JlYXRlX2FnZW50JyxcbiAgICAgICAgICAuLi4oY29tcGxldGVkQWdlbnRJZD8udHJpbSgpID8geyBjcmVhdGVkX2FnZW50X2lkOiBjb21wbGV0ZWRBZ2VudElkLnRyaW0oKSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCB3YXNFZGl0QWdlbnRBcHByb3ZlZCA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbFN0YXR1cyA9PT0gJ2FwcHJvdmVkJyAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gKGFjdGlvbi50b29sX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICdlZGl0X2FnZW50JylcblxuICAgICAgbGV0IGVkaXRBZ2VudEZvbGxvd1VwOiB7IGFnZW50SWQ6IHN0cmluZyB9IHwgdW5kZWZpbmVkXG4gICAgICBpZiAod2FzRWRpdEFnZW50QXBwcm92ZWQpIHtcbiAgICAgICAgY29uc3QgZnJvbVN0cmVhbSA9IGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKVxuICAgICAgICBjb25zdCBmcm9tQXJncyA9IGV4dHJhY3RBZ2VudElkRnJvbUVkaXRBZ2VudFBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zKVxuICAgICAgICBjb25zdCByZXNvbHZlZEFnZW50SWQgPSBmcm9tU3RyZWFtIHx8IGZyb21BcmdzXG4gICAgICAgIGlmIChyZXNvbHZlZEFnZW50SWQpIHtcbiAgICAgICAgICBlZGl0QWdlbnRGb2xsb3dVcCA9IHsgYWdlbnRJZDogcmVzb2x2ZWRBZ2VudElkIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0YXNrSWRzRnJvbVVybHMgPSBtYXRjaGVzLm1hcChtYXRjaCA9PiBwYXJzZUludChtYXRjaFsxXSwgMTApKVxuICAgICAgY29uc3QgdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbCA9IGV4dHJhY3RUYXNrSWRzRnJvbURlbGV0ZVBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zKVxuICAgICAgY29uc3QgdGFza0lkc0Zyb21EZWxldGlvblRleHQgPVxuICAgICAgICB3YXNUYXNrRGVsZXRlICYmIHRhc2tJZHNGcm9tVXJscy5sZW5ndGggPT09IDAgJiYgdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbC5sZW5ndGggPT09IDBcbiAgICAgICAgICA/IGV4dHJhY3RUYXNrSWRzRnJvbUFzc2lzdGFudERlbGV0aW9uVGV4dChjb250ZW50KVxuICAgICAgICAgIDogW11cbiAgICAgIGNvbnN0IHRhc2tJZHNGb3JEYXNoYm9hcmQgPVxuICAgICAgICB0YXNrSWRzRnJvbVVybHMubGVuZ3RoID4gMFxuICAgICAgICAgID8gdGFza0lkc0Zyb21VcmxzXG4gICAgICAgICAgOiB0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbFxuICAgICAgICAgICAgOiB0YXNrSWRzRnJvbURlbGV0aW9uVGV4dFxuXG4gICAgICBjb25zdCBzaG91bGRTeW5jRGFzaGJvYXJkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICAod2FzVGFza0NyZWF0aW9uIHx8IHdhc1Rhc2tFZGl0IHx8IHdhc1Rhc2tEZWxldGUpICYmXG4gICAgICAgIHRhc2tJZHNGb3JEYXNoYm9hcmQubGVuZ3RoID4gMFxuXG4gICAgICBpZiAoc2hvdWxkU3luY0Rhc2hib2FyZCkge1xuICAgICAgICBjb25zdCB0YXNrSWRzID0gdGFza0lkc0ZvckRhc2hib2FyZFxuICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgdGFiID0gYXdhaXQgZ2V0VGFiVGFza0RlZmF1bHQodGFza0lkc1swXSlcbiAgICAgICAgICBjb25zdCB0YWJTZWdtZW50ID0gdGFiID8gYC8ke3RhYn1gIDogJy9kZXRhaWwnXG4gICAgICAgICAgY29udGVudFRvQWRkID0gY29udGVudC5yZXBsYWNlKHRhc2tVcmxSZWdleCwgdXJsID0+XG4gICAgICAgICAgICB1cmwucmVwbGFjZSgvXFwvKGRldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpKD89JHxcXD8pLywgdGFiU2VnbWVudClcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXN0UHJvamVjdE1lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG4gICAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWRSYXcgPSBwcm9qZWN0Py5pZCB8fCBsYXN0UHJvamVjdE1lc3NhZ2U/LnByb2plY3RJZFxuICAgICAgICBjb25zdCBjb250ZXh0UHJvamVjdElkID0gY29udGV4dFByb2plY3RJZFJhdyA/IHBhcnNlSW50KFN0cmluZyhjb250ZXh0UHJvamVjdElkUmF3KSwgMTApIDogbnVsbFxuICAgICAgICBjb25zdCBwYXRoTWF0Y2ggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUubWF0Y2goL15cXC9wcm9qZWN0c1xcLyhcXGQrKVxcLy8pXG4gICAgICAgIGNvbnN0IHJvdXRlUHJvamVjdElkID0gcGF0aE1hdGNoID8gcGFyc2VJbnQocGF0aE1hdGNoWzFdLCAxMCkgOiBudWxsXG4gICAgICAgIGNvbnN0IGlzT25Qcm9qZWN0Um91dGUgPSBjb250ZXh0UHJvamVjdElkICYmIHJvdXRlUHJvamVjdElkICYmIGNvbnRleHRQcm9qZWN0SWQgPT09IHJvdXRlUHJvamVjdElkXG5cbiAgICAgICAgaWYgKGlzT25Qcm9qZWN0Um91dGUpIHtcbiAgICAgICAgICBpZiAod2FzVGFza0NyZWF0aW9uKSB7XG4gICAgICAgICAgICB3aW5kb3cubmV3UHJvamVjdERhc2hib2FyZD8uYWRkRXhpc3RpbmdUYXNrVG9EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0VkaXQpIHtcbiAgICAgICAgICAgIHdpbmRvdy5uZXdQcm9qZWN0RGFzaGJvYXJkPy5lZGl0RXhpc3RpbmdUYXNrSW5EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0RlbGV0ZSkge1xuICAgICAgICAgICAgd2luZG93Lm5ld1Byb2plY3REYXNoYm9hcmQ/LmRlbGV0ZUV4aXN0aW5nVGFza0Zyb21EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBSZWZldGNoIGRlbCB0YXNrIHBhbmVsIHNpIGVzdMOhIGFiaWVydG8geSBsYSB0b29sIGFwcm9iYWRhIGVkaXTDsy9ib3Jyw7MgZXNhIHRhcmVhLlxuICAgICAgLy8gQ3VicmUgbG9zIGRvcyBmbHVqb3MgZGUgYXBwcm92YWw6XG4gICAgICAvLyAgIDEpIEFwcHJvdmFsIHBvciBib3TDs24g4oaSIGBwcmV2aW91c01lc3NhZ2UuYXBwcm92YWwucGVuZGluZ19hY3Rpb25zYCAodsOtYSBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlKVxuICAgICAgLy8gICAyKSBNYW51YWwgYXBwcm92YWwgKHVzdWFyaW8gdGlwZWEgXCJzaVwiL1wibm9cIikg4oaSIGBsYXN0TWFudWFsQXBwcm92YWxSZWYuY3VycmVudGBcbiAgICAgIGNvbnN0IG9wZW5UYXNrUGFuZWxJZCA9IHdpbmRvdy50YXNrUGFuZWw/LnRhc2tJZFxuICAgICAgY29uc3QgbWFudWFsQXBwcm92YWwgPSBsYXN0TWFudWFsQXBwcm92YWxSZWYuY3VycmVudFxuICAgICAgbGFzdE1hbnVhbEFwcHJvdmFsUmVmLmN1cnJlbnQgPSBudWxsIC8vIGNvbnN1bWlyIHVuYSBzb2xhIHZlelxuICAgICAgY29uc3QgbWFudWFsV2FzVGFza0VkaXQgPSAhIW1hbnVhbEFwcHJvdmFsICYmIFRBU0tfRURJVF9UT09MUy5pbmNsdWRlcyhtYW51YWxBcHByb3ZhbC50b29sTmFtZSlcbiAgICAgIGNvbnN0IG1hbnVhbFdhc1Rhc2tEZWxldGUgPSAhIW1hbnVhbEFwcHJvdmFsICYmIFRBU0tfREVMRVRFX1RPT0xTLmluY2x1ZGVzKG1hbnVhbEFwcHJvdmFsLnRvb2xOYW1lKVxuXG4gICAgICBpZiAob3BlblRhc2tQYW5lbElkICYmICh3YXNUYXNrRWRpdCB8fCB3YXNUYXNrRGVsZXRlIHx8IG1hbnVhbFdhc1Rhc2tFZGl0IHx8IG1hbnVhbFdhc1Rhc2tEZWxldGUpKSB7XG4gICAgICAgIGNvbnN0IG1hbnVhbFBzZXVkb0FjdGlvbjogUGVuZGluZ0FjdGlvbiB8IG51bGwgPSBtYW51YWxBcHByb3ZhbFxuICAgICAgICAgID8gKHsgdG9vbF9uYW1lOiBtYW51YWxBcHByb3ZhbC50b29sTmFtZSwgdG9vbF9hcmdzOiBtYW51YWxBcHByb3ZhbC50b29sQXJncyA/PyB7fSB9IGFzIFBlbmRpbmdBY3Rpb24pXG4gICAgICAgICAgOiBudWxsXG4gICAgICAgIGNvbnN0IGFmZmVjdGVkVGFza0lkcyA9IFtcbiAgICAgICAgICAuLi5leHRyYWN0VGFza0lkc0Zyb21QZW5kaW5nQWN0aW9uc0FyZ3MocGVuZGluZ0FjdGlvbnMpLFxuICAgICAgICAgIC4uLnRhc2tJZHNGcm9tVXJscyxcbiAgICAgICAgICAuLi50YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsLFxuICAgICAgICAgIC4uLihtYW51YWxQc2V1ZG9BY3Rpb24gPyBleHRyYWN0VGFza0lkc0Zyb21QZW5kaW5nQWN0aW9uc0FyZ3MoW21hbnVhbFBzZXVkb0FjdGlvbl0pIDogW10pLFxuICAgICAgICBdLm1hcChTdHJpbmcpXG4gICAgICAgIGlmIChhZmZlY3RlZFRhc2tJZHMuaW5jbHVkZXMoU3RyaW5nKG9wZW5UYXNrUGFuZWxJZCkpKSB7XG4gICAgICAgICAgd2luZG93LnRhc2tQYW5lbD8ucmVmZXRjaFRhc2s/LigpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgYW5zd2VyLSR7bWVtb3J5U2Vzc2lvbklkfWAsXG4gICAgICAgIG1lc3NhZ2U6IGNvbnRlbnRUb0FkZCxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgIHNvdXJjZXMsXG4gICAgICAgIC4uLihhdHRhY2htZW50cy5sZW5ndGggPiAwID8geyBhdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICBtZW1vcnlTZXNzaW9uSWQsXG4gICAgICAgIHN1Z2dlc3Rpb25zOiBzdWdnZXN0aW9ucyB8fCBbXSxcbiAgICAgICAgLi4uKGNyZWF0ZUFnZW50Rm9sbG93VXAgPyB7IGNyZWF0ZUFnZW50Rm9sbG93VXAgfSA6IHt9KSxcbiAgICAgIH0pXG5cbiAgICAgIGlmIChjcmVhdGVBZ2VudEZvbGxvd1VwPy5hZ2VudElkKSB7XG4gICAgICAgIGZldGNoQWdlbnREZXRhaWwoY3JlYXRlQWdlbnRGb2xsb3dVcC5hZ2VudElkKVxuICAgICAgICAgIC50aGVuKGNoYXRBZ2VudCA9PiB7XG4gICAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ21haWEtbWVyZ2UtY3JlYXRlZC1hZ2VudC1pbnRvLWxpc3QnLCB7XG4gICAgICAgICAgICAgICAgZGV0YWlsOiB7IGFnZW50OiBjaGF0QWdlbnQgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignW3VzZUNoYXRNYW5hZ2VyXSBObyBzZSBwdWRvIGHDsWFkaXIgZWwgYWdlbnRlIHJlY2nDqW4gY3JlYWRvIGFsIGxpc3RhZG8nLCBlcnIpXG4gICAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKGVkaXRBZ2VudEZvbGxvd1VwPy5hZ2VudElkKSB7XG4gICAgICAgIGZldGNoQWdlbnREZXRhaWwoZWRpdEFnZW50Rm9sbG93VXAuYWdlbnRJZClcbiAgICAgICAgICAudGhlbihjaGF0QWdlbnQgPT4ge1xuICAgICAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdtYWlhLXN5bmMtZWRpdGVkLWFnZW50LWZyb20tY2hhdCcsIHtcbiAgICAgICAgICAgICAgICBkZXRhaWw6IHsgYWdlbnQ6IGNoYXRBZ2VudCB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbdXNlQ2hhdE1hbmFnZXJdIE5vIHNlIHB1ZG8gcmVmcmVzY2FyIGVsIGFnZW50ZSBlZGl0YWRvJywgZXJyKVxuICAgICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIGlmIChmaXJzdFRpbWVSZWYuY3VycmVudCkge1xuICAgICAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgncmVmZXRjaC1zZXNzaW9uJylcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudClcbiAgICAgICAgZmlyc3RUaW1lUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgfVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2UsIHByb2plY3QsIGdldFRhYlRhc2tEZWZhdWx0LCBldmVudCwgYWdlbnRdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1TdG9wID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHRlbXBNZXNzYWdlSWQgPSBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fS1zdHJlYW1pbmdgXG4gICAgc3RyZWFtaW5nU3RvcmUuY2xlYXIoKVxuICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICByZW1vdmVNZXNzYWdlKHRlbXBNZXNzYWdlSWQpXG5cbiAgICBhZGRNZXNzYWdlKHtcbiAgICAgIGlkOiBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fS1jYW5jZWxsZWRgLFxuICAgICAgbWVzc2FnZTogdCgnY2hhdC5jYW5jZWxsZWQnKSxcbiAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkOiB0cnVlLFxuICAgIH0pXG4gICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ3JlZmV0Y2gtc2Vzc2lvbicpXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KVxuICAgIH0sIDUwMClcbiAgfSwgW2FkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2UsIHRdKVxuXG4gIGNvbnN0IGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQgPSB1c2VDYWxsYmFjayhcbiAgICAoYXBwcm92YWw6IEFwcHJvdmFsUmVxdWVzdCwgYWNjdW11bGF0ZWRDb250ZW50OiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHRlbXBNZXNzYWdlSWQgPSBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fS1zdHJlYW1pbmdgXG4gICAgICBzdHJlYW1pbmdTdG9yZS5jbGVhcigpXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIHJlbW92ZU1lc3NhZ2UodGVtcE1lc3NhZ2VJZClcblxuICAgICAgaWYgKGFwcHJvdmFsLm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCkge1xuICAgICAgICAvLyBQZXJzaXN0aW1vcyBpbmZvIHBhcmEgcXVlIG9uU3RyZWFtRmluaXNoIHB1ZWRhIGRldGVjdGFyIGVsIG1hbnVhbCBhcHByb3ZhbFxuICAgICAgICAvLyB5IGRpc3BhcmFyIGVsIHJlZmV0Y2ggZGVsIHRhc2sgcGFuZWwgc2kgbGEgdG9vbCBhcHJvYmFkYSBlZGl0w7MgZXNhIHRhcmVhLlxuICAgICAgICBjb25zdCBmaXJzdEFjdGlvbiA9IGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucz8uWzBdXG4gICAgICAgIGNvbnN0IHRvb2xOYW1lID0gKGFwcHJvdmFsIGFzIHsgdG9vbF9uYW1lPzogc3RyaW5nIH0pLnRvb2xfbmFtZSA/PyBmaXJzdEFjdGlvbj8udG9vbF9uYW1lID8/ICcnXG4gICAgICAgIGNvbnN0IHRvb2xBcmdzID1cbiAgICAgICAgICAoKGFwcHJvdmFsIGFzIHsgdG9vbF9hcmdzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfSkudG9vbF9hcmdzID8/XG4gICAgICAgICAgICAoZmlyc3RBY3Rpb24/LnRvb2xfYXJncyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCkpIHx8XG4gICAgICAgICAgbnVsbFxuICAgICAgICBpZiAodG9vbE5hbWUpIHtcbiAgICAgICAgICBsYXN0TWFudWFsQXBwcm92YWxSZWYuY3VycmVudCA9IHsgdG9vbE5hbWUsIHRvb2xBcmdzIH1cbiAgICAgICAgfVxuICAgICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBBZGQgYSBtZXNzYWdlIHdpdGggdGhlIGFwcHJvdmFsIHJlcXVlc3RcbiAgICAgIGFkZE1lc3NhZ2Uoe1xuICAgICAgICBpZDogYGFwcHJvdmFsLSR7YXBwcm92YWwub3JpZ2luYWxfdGhyZWFkX2lkfWAsXG4gICAgICAgIG1lc3NhZ2U6IGFjY3VtdWxhdGVkQ29udGVudCB8fCAnJyxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgIGFwcHJvdmFsLFxuICAgICAgICBhcHByb3ZhbFN0YXR1czogJ3BlbmRpbmcnLFxuICAgICAgfSlcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICB9LFxuICAgIFthZGRNZXNzYWdlLCByZW1vdmVNZXNzYWdlXVxuICApXG5cbiAgY29uc3Qge1xuICAgIGFza01haWEsXG4gICAgaXNMb2FkaW5nOiB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIHN0b3BTdHJlYW1pbmcsXG4gICAgYWJvcnRTdHJlYW1TaWxlbnRseSxcbiAgfSA9IHVzZU9yY2hlc3RyYXRvclN0cmVhbSh7XG4gICAgb25FcnJvcjogaGFuZGxlU3RyZWFtRXJyb3IsXG4gICAgb25TdHJlYW1VcGRhdGU6IGhhbmRsZVN0cmVhbVVwZGF0ZSxcbiAgICBvbkZpbmlzaFN0cmVhbTogaGFuZGxlU3RyZWFtRmluaXNoLFxuICAgIG9uU3RvcDogaGFuZGxlU3RyZWFtU3RvcCxcbiAgICBvbkFwcHJvdmFsUmVxdWlyZWQ6IGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQsXG4gIH0pXG5cbiAgLy8gTWFudGVuZW1vcyBlbCBzZXR0ZXIgbcOhcyByZWNpZW50ZSBlbiB1bmEgcmVmIHBhcmEgcXVlIHB1ZWRhIHVzYXJzZSBkZXNkZVxuICAvLyBlZmVjdG9zIGRlZmluaWRvcyBhbnRlcyBlbiBlbCBhcmNoaXZvIChjYW1iaW8gZGUgY2hhdCwgcmVzZXQsIGV0Yy4pLlxuICBhYm9ydFN0cmVhbVNpbGVudGx5UmVmLmN1cnJlbnQgPSBhYm9ydFN0cmVhbVNpbGVudGx5XG5cbiAgY29uc3QgY3VycmVudFByb2plY3QgPSBwcm9qZWN0XG5cbiAgY29uc3Qgc2VuZE1lc3NhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50c09yT3B0aW9ucz86IEF0dGFjaG1lbnRGaWxlW10gfCBTZW5kTWVzc2FnZU9wdGlvbnMsXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nXG4gICAgKSA9PiB7XG4gICAgICBpZiAoaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgfHwgd2FpdGluZ1Jlc3BvbnNlIHx8IGxvYWRpbmdNZXNzYWdlcykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBhdHRhY2htZW50cywgb3B0aW9ucyB9ID0gbm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzKGF0dGFjaG1lbnRzT3JPcHRpb25zKVxuICAgICAgLy8gTGFzIG1lbnRpb25zIHB1ZWRlbiB2ZW5pciB2w61hIDV0byBwYXLDoW1ldHJvIChjYWxsIHBvc2l0aW9uYWwgZGVzZGUgZWwgZm9vdGVyKVxuICAgICAgLy8gbyB2w61hIFNlbmRNZXNzYWdlT3B0aW9ucyAoY2FsbCBwcm9ncmFtw6F0aWNvKS4gRWwgcGFyw6FtZXRybyBleHBsw61jaXRvIGdhbmEuXG4gICAgICBjb25zdCBlZmZlY3RpdmVNZW50aW9ucyA9IG1lbnRpb25zID8/IG9wdGlvbnMubWVudGlvbnNcbiAgICAgIGNvbnN0IGNvbnRleHRNZXNzYWdlOiBDb250ZXh0TWVzc2FnZSB8IHVuZGVmaW5lZCA9IGJ1aWxkQ29udGV4dE1lc3NhZ2UoZWZmZWN0aXZlTWVudGlvbnMpXG4gICAgICBjb25zdCBwYXlsb2FkRnVhSWQgPSBmdWFJZCA/PyBvcHRpb25zLmZ1YUlkXG4gICAgICBjb25zdCBwYXlsb2FkU2NJZCA9IHNjSWQgPz8gb3B0aW9ucy5zY0lkXG4gICAgICBjb25zdCBkaXNwbGF5TWVzc2FnZSA9IGZvcm1hdFF1aWNrQWN0aW9uTWVzc2FnZUZvckRpc3BsYXkobWVzc2FnZSwge1xuICAgICAgICBmdWFJZDogcGF5bG9hZEZ1YUlkLFxuICAgICAgICBzY0lkOiBwYXlsb2FkU2NJZCxcbiAgICAgIH0pXG5cbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgY29uc3QgbmV3TWVzc2FnZUlkID0gdXVpZHY0KClcbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IG5ld01lc3NhZ2VJZFxuICAgICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbWVzc2FnZVxuXG4gICAgICBpZiAoIXJlcG9ydGVkRXZlbnQuY3VycmVudCkge1xuICAgICAgICBldmVudChFVkVOVFMucG1BaVR5cGVkVGV4dClcbiAgICAgICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICAvLyBWZXJpZmljYXIgc2kgZWwgY29udGV4dG8gZ2xvYmFsIGVzdMOhIGRlc2FjdHVhbGl6YWRvXG4gICAgICBjb25zdCBsYXN0TWVzc2FnZVdpdGhQcm9qZWN0ID0gbWVzc2FnZXNSZWYuY3VycmVudC5maWx0ZXIobXNnID0+IG1zZy5wcm9qZWN0SWQpLmF0KC0xKVxuXG4gICAgICBjb25zdCBjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMgPSBtZXNzYWdlc1JlZi5jdXJyZW50Py5bbWVzc2FnZXNSZWYuY3VycmVudC5sZW5ndGggLSAxXT8uYWdlbnRJZFxuXG4gICAgICAvLyBObyBhZ3JlZ2FyIHByb2plY3RJZCBhbCBtZW5zYWplIGRlbCB1c3VhcmlvIC0gc2UgZGV0ZXJtaW5hcsOhIGRlc3B1w6lzXG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IGBxdWVzdGlvbi0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH1gLFxuICAgICAgICBtZXNzYWdlOiBkaXNwbGF5TWVzc2FnZSxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogY3VycmVudFVzZXIsXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5VU0VSLFxuICAgICAgICBzb3VyY2VzOiBhdHRhY2htZW50cyxcbiAgICAgICAgLi4uKGNvbnRleHRNZXNzYWdlID8geyBjb250ZXh0TWVzc2FnZSB9IDoge30pLFxuICAgICAgfSlcblxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICAgIGxldCBmaW5hbE1lc3NhZ2UgPSBtZXNzYWdlXG5cbiAgICAgIGlmIChtZXNzYWdlID09PSB0KCdxYS5pdGVtcy5yZW50YWJpbGlkYWRfcHJveWVjdG8nKSkge1xuICAgICAgICBmaW5hbE1lc3NhZ2UgPSBgRkFROiAke3QoJ3FhLml0ZW1zLnJlbnRhYmlsaWRhZF9wcm95ZWN0bycpfSAtIFRpcG8gZGUgcmVudGFiaWxpZGFkOiAke1xuICAgICAgICAgIG9wdGlvbnMucHJvamVjdENoYW5nZWQ/LmluY29tZVR5cGUgfHwgcHJvamVjdD8uaW5jb21lVHlwZVxuICAgICAgICB9YFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoaXN0b3J5ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAoaGlzdG9yeU1lc3NhZ2UgPT4gKHtcbiAgICAgICAgY29udGVudDogaGlzdG9yeU1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgcm9sZTogaGlzdG9yeU1lc3NhZ2UudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSA/IENoYXRIaXN0b3J5Um9sZS5VU0VSIDogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH0pKVxuXG4gICAgICAvLyBWZXJpZmljYXIgY29uc2lzdGVuY2lhIGVudHJlIGNvbnRleHRvIGdsb2JhbCB5IMO6bHRpbW8gbWVuc2FqZVxuICAgICAgY29uc3QgY29udGV4dFByb2plY3RJZCA9IHByb2plY3Q/LmlkXG4gICAgICBjb25zdCBsYXN0TWVzc2FnZVByb2plY3RJZCA9IGxhc3RNZXNzYWdlV2l0aFByb2plY3Q/LnByb2plY3RJZFxuXG4gICAgICBsZXQgcHJvamVjdFRvUmVxdWVzdDogbnVtYmVyIHwgbnVsbCA9IG51bGxcblxuICAgICAgLy8gU2kgaGF5IMO6bHRpbW8gbWVuc2FqZSBjb24gcHJvamVjdElkLCB1c2FybG8gKG3DoXMgY29uZmlhYmxlKVxuICAgICAgaWYgKGxhc3RNZXNzYWdlUHJvamVjdElkICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gTnVtYmVyKGxhc3RNZXNzYWdlUHJvamVjdElkKVxuICAgICAgICBwcm9qZWN0VG9SZXF1ZXN0ID0gTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkgPyBwYXJzZWQgOiBudWxsXG4gICAgICB9XG4gICAgICAvLyBTaSBubyBoYXkgw7psdGltbyBtZW5zYWplLCB1c2FyIGVsIGNvbnRleHRvIGdsb2JhbFxuICAgICAgZWxzZSBpZiAoY29udGV4dFByb2plY3RJZCAhPSBudWxsKSB7XG4gICAgICAgIHByb2plY3RUb1JlcXVlc3QgPSBjb250ZXh0UHJvamVjdElkXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByb2plY3RzID0gYXdhaXQgZmV0Y2hQcm9qZWN0cyhbcHJvamVjdFRvUmVxdWVzdF0pXG5cbiAgICAgIGNvbnN0IHBheWxvYWRGYXFJZCA9IGZhcUlkID8/IG9wdGlvbnMuZmFxSWRcbiAgICAgIGNvbnN0IHBheWxvYWRBZ2VudFN1Z2dlc3Rpb25JZCA9IGFnZW50U3VnZ2VzdGlvbklkID8/IG9wdGlvbnMuYWdlbnRTdWdnZXN0aW9uSWRcblxuICAgICAgY29uc3QgcGF5bG9hZERhdGEgPSB7XG4gICAgICAgIG1lc3NhZ2U6IGZpbmFsTWVzc2FnZSxcbiAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0VG9SZXF1ZXN0LFxuICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICB1c2VySWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgIGZpcnN0TmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgICBsYXN0TmFtZTogYXV0aFVzZXIubGFzdE5hbWUsXG4gICAgICAgIGNvbXBhbnlJZDogYXV0aFVzZXIuY29tcGFueV9pZC50b1N0cmluZygpLFxuICAgICAgICBjaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgICAgbWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG4gICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgIGFnZW50SWQ6IGN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyB8fCBhZ2VudD8uaWQhLFxuICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgLi4uKHByb2plY3Q/LmZlZUlkICE9IG51bGwgPyB7IGZlZUlkOiBOdW1iZXIocHJvamVjdC5mZWVJZCkgfSA6IHt9KSxcbiAgICAgICAgLi4uKGNsaWVudD8uaWRcbiAgICAgICAgICA/IHsgY2xpZW50SWQ6IGNsaWVudC5pZCwgLi4uKGNsaWVudC5uYW1lID8geyBjbGllbnROYW1lOiBjbGllbnQubmFtZSB9IDoge30pIH1cbiAgICAgICAgICA6IHByb2plY3Q/LmNsaWVudElkICE9IG51bGxcbiAgICAgICAgICAgID8geyBjbGllbnRJZDogTnVtYmVyKHByb2plY3QuY2xpZW50SWQpIH1cbiAgICAgICAgICAgIDogcHJvamVjdD8uY2xpZW50Py5pZFxuICAgICAgICAgICAgICA/IHsgY2xpZW50SWQ6IHByb2plY3QuY2xpZW50LmlkLCAuLi4ocHJvamVjdC5jbGllbnQubmFtZSA/IHsgY2xpZW50TmFtZTogcHJvamVjdC5jbGllbnQubmFtZSB9IDoge30pIH1cbiAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgIC4uLihwcm9qZWN0cz8ubGVuZ3RoID8geyBwcm9qZWN0TmFtZTogcHJvamVjdHNbMF0ubmFtZSB9IDoge30pLFxuICAgICAgICAuLi4odGFzaz8uaWQgIT0gbnVsbCA/IHsgdGFza0lkOiBOdW1iZXIodGFzay5pZCksIC4uLih0YXNrLm5hbWUgPyB7IHRhc2tOYW1lOiB0YXNrLm5hbWUgfSA6IHt9KSB9IDoge30pLFxuICAgICAgICAuLi4oYXR0YWNobWVudHMubGVuZ3RoID4gMCA/IHsgYXR0YWNobWVudHMgfSA6IHt9KSxcbiAgICAgICAgLi4uKHBheWxvYWRGYXFJZCA/IHsgZmFxSWQ6IHBheWxvYWRGYXFJZCB9IDoge30pLFxuICAgICAgICAuLi4ocGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkID8geyBhZ2VudFN1Z2dlc3Rpb25JZDogcGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkIH0gOiB7fSksXG4gICAgICAgIC4uLihwYXlsb2FkRnVhSWQgPyB7IGZ1YUlkOiBwYXlsb2FkRnVhSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHBheWxvYWRTY0lkID8geyBzY0lkOiBwYXlsb2FkU2NJZCB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnQ/LmVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eTogYWdlbnQuZW50aXR5IH0gOiB7fSksXG4gICAgICAgIC4uLihjb250ZXh0TWVzc2FnZSA/IHsgY29udGV4dE1lc3NhZ2UgfSA6IHt9KSxcbiAgICAgIH1cblxuICAgICAgYXNrTWFpYShwYXlsb2FkRGF0YSlcbiAgICB9LFxuICAgIFtcbiAgICAgIGFkZE1lc3NhZ2UsXG4gICAgICBldmVudCxcbiAgICAgIGFza01haWEsXG4gICAgICBwcm9qZWN0LFxuICAgICAgY2xpZW50LFxuICAgICAgYXV0aFVzZXIsXG4gICAgICBhZ2VudCxcbiAgICAgIHQsXG4gICAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBdXG4gIClcblxuICBjb25zdCBjaGFuZ2VQcm9qZWN0ID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogUHJvamVjdCkgPT4ge1xuICAgICAgaWYgKCFjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQpIHJldHVyblxuXG4gICAgICBpZiAob3B0aW9uLmlkICE9PSBwcm9qZWN0Py5pZCkge1xuICAgICAgICBzZXRQcm9qZWN0KG9wdGlvbilcbiAgICAgIH1cblxuICAgICAgaWYgKHByb2plY3QgJiYgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGhpc3RvcnkgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgICAgcm9sZTogaGlzdG9yeU1lc3NhZ2UudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSA/IENoYXRIaXN0b3J5Um9sZS5VU0VSIDogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgfSkpXG5cbiAgICAgICAgYXNrTWFpYSh7XG4gICAgICAgICAgbWVzc2FnZTogY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50LFxuICAgICAgICAgIGhpc3RvcnksXG4gICAgICAgICAgcHJvamVjdElkOiBvcHRpb24uaWQsXG4gICAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgICB1c2VySWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgZmlyc3ROYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICAgICAgbGFzdE5hbWU6IGF1dGhVc2VyLmxhc3ROYW1lLFxuICAgICAgICAgIGNvbXBhbnlJZDogYXV0aFVzZXIuY29tcGFueV9pZC50b1N0cmluZygpLFxuICAgICAgICAgIGNoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkIHx8ICcnLFxuICAgICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgICAgLi4uKG9wdGlvbj8uZmVlSWQgIT0gbnVsbCA/IHsgZmVlSWQ6IE51bWJlcihvcHRpb24uZmVlSWQpIH0gOiB7fSksXG4gICAgICAgICAgLi4uKG9wdGlvbj8uY2xpZW50SWQgIT0gbnVsbCA/IHsgY2xpZW50SWQ6IE51bWJlcihvcHRpb24uY2xpZW50SWQpIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGFnZW50Py5lbnRpdHkgIT0gbnVsbCA/IHsgYWdlbnRFbnRpdHk6IGFnZW50LmVudGl0eSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgW3Byb2plY3QsIHNldFByb2plY3QsIGFza01haWEsIGF1dGhVc2VyLCBpc1dlYlNlYXJjaEFjdGl2ZSwgYWdlbnRdXG4gIClcblxuICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKGFzeW5jIChmZWVkYmFja1Byb3A6IEZlZWRiYWNrLCBjaGF0TWVzc2FnZUlkOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuQ2hhdHMud2FzSGVscGZ1bENoYXQoY2hhdE1lc3NhZ2VJZCwgZmVlZGJhY2tQcm9wID09PSBGZWVkYmFjay5USFVNQlNfVVApXG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAobWVzc2FnZSA9PiB7XG4gICAgICAgIGlmIChtZXNzYWdlLmlkID09PSBjaGF0TWVzc2FnZUlkICYmIG1lc3NhZ2Uucm9sZSA9PT0gJ2Fzc2lzdGFudCcpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi5tZXNzYWdlLCB3YXNIZWxwZnVsOiBmZWVkYmFja1Byb3AgPT09IEZlZWRiYWNrLlRIVU1CU19VUCB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VcbiAgICAgIH0pXG4gICAgfVxuICB9LCBbXSlcblxuICBjb25zdCBoYW5kbGVBcHByb3ZhbERlY2lzaW9uID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKFxuICAgICAgdGhyZWFkSWRzOiBzdHJpbmdbXSxcbiAgICAgIGRlY2lzaW9uOiAnYXBwcm92ZScgfCAncmVqZWN0JyxcbiAgICAgIGVkaXRlZEFjdGlvbnM/OiBBcnJheTx7IHRvb2xfbmFtZTogc3RyaW5nOyBhcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9PlxuICAgICkgPT4ge1xuICAgICAgaWYgKCF0aHJlYWRJZHM/Lmxlbmd0aCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyB0aHJlYWRfaWRzIHByb3ZpZGVkIGZvciBhcHByb3ZhbCBkZWNpc2lvbicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBCdXNjYXIgZWwgbWVuc2FqZSBxdWUgY29udGllbmUgYWxndW5vIGRlIGVzdG9zIHRocmVhZElkcyBlbiBzdXMgcGVuZGluZ19hY3Rpb25zXG4gICAgICBjb25zdCBtZXNzYWdlV2l0aEFwcHJvdmFsID0gbWVzc2FnZXNSZWYuY3VycmVudC5maW5kKG0gPT5cbiAgICAgICAgbS5hcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zPy5zb21lKGFjdGlvbiA9PiB0aHJlYWRJZHMuaW5jbHVkZXMoYWN0aW9uLnRocmVhZF9pZCkpXG4gICAgICApXG5cbiAgICAgIGlmICghbWVzc2FnZVdpdGhBcHByb3ZhbCB8fCAhbWVzc2FnZVdpdGhBcHByb3ZhbC5hcHByb3ZhbCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyBzZSBlbmNvbnRyw7MgbWVuc2FqZSBjb24gYXBwcm92YWwgcGFyYSB0aHJlYWRfaWRzOicsIHRocmVhZElkcylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgYXBwcm92YWwgfSA9IG1lc3NhZ2VXaXRoQXBwcm92YWxcbiAgICAgIGNvbnN0IG1lc3NhZ2VJZCA9IG1lc3NhZ2VXaXRoQXBwcm92YWwuaWRcbiAgICAgIC8vIFVzZSBmaXJzdCB0aHJlYWRJZCBhcyB0aGUgbG9hZGluZyBrZXlcbiAgICAgIGNvbnN0IGxvYWRpbmdLZXkgPSB0aHJlYWRJZHNbMF1cbiAgICAgIC8vIFVwZGF0ZSBtZXNzYWdlIHN0YXR1cyBpbW1lZGlhdGVseVxuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKG1lc3NhZ2UgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZS5pZCA9PT0gbWVzc2FnZUlkKSB7XG4gICAgICAgICAgY29uc3QgbmV3U3RhdHVzID0gZGVjaXNpb24gPT09ICdhcHByb3ZlJyA/ICdhcHByb3ZlZCcgOiAncmVqZWN0ZWQnXG4gICAgICAgICAgcmV0dXJuIHsgLi4ubWVzc2FnZSwgYXBwcm92YWxTdGF0dXM6IG5ld1N0YXR1cyB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VcbiAgICAgIH0pXG5cbiAgICAgIC8vIFRyaWdnZXIgcmUtcmVuZGVyXG4gICAgICBjb25zdCBleGlzdGluZ01lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbmQobSA9PiBtLmlkID09PSBtZXNzYWdlSWQpXG4gICAgICBpZiAoZXhpc3RpbmdNZXNzYWdlKSB7XG4gICAgICAgIGNvbnN0IG5ld1N0YXR1cyA9IGRlY2lzaW9uID09PSAnYXBwcm92ZScgPyAnYXBwcm92ZWQnIDogJ3JlamVjdGVkJ1xuICAgICAgICBhZGRNZXNzYWdlKHsgLi4uZXhpc3RpbmdNZXNzYWdlLCBhcHByb3ZhbFN0YXR1czogbmV3U3RhdHVzIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIENhbGwgY29udGludWUtdGhyZWFkIGVuZHBvaW50IHdpdGggQUxMIHRocmVhZF9pZHMgaW4gYSBzaW5nbGUgcmVxdWVzdFxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuXG4gICAgICAvLyBBZGQgbG9hZGluZ1xuICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiAoe1xuICAgICAgICAuLi5wcmV2LFxuICAgICAgICBbbG9hZGluZ0tleV06IHQoJ2NoYXQucHJvY2Vzc2luZycpLFxuICAgICAgfSkpXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbWFpYS5PcmNoZXN0cmF0b3IuY29udGludWVUaHJlYWQoe1xuICAgICAgICAgIHRocmVhZElkcywgLy8gU2VuZCBhbGwgYWN0aW9uIHRocmVhZF9pZHMgYXQgb25jZVxuICAgICAgICAgIHNlc3Npb25JZDogYXBwcm92YWwuc2Vzc2lvbl9pZCxcbiAgICAgICAgICBkZWNpc2lvbjogZWRpdGVkQWN0aW9ucyA/ICdlZGl0JyA6IGRlY2lzaW9uLFxuICAgICAgICAgIGVkaXRlZEFjdGlvbnMsXG4gICAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkIHx8ICcnLFxuICAgICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgIGhhbmRsZVN0cmVhbUVycm9yKClcbiAgICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0xvYWRpbmdzID0geyAuLi5wcmV2IH1cbiAgICAgICAgICAgIGRlbGV0ZSBuZXdMb2FkaW5nc1tsb2FkaW5nS2V5XVxuICAgICAgICAgICAgcmV0dXJuIG5ld0xvYWRpbmdzXG4gICAgICAgICAgfSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3MgU1NFIHN0cmVhbVxuICAgICAgICBhd2FpdCBwcm9jZXNzU1NFU3RyZWFtKHJlc3BvbnNlLCBsb2FkaW5nS2V5LCB7XG4gICAgICAgICAgb25Ub2tlbjogKGNvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgaGFuZGxlU3RyZWFtVXBkYXRlKGNvbnRlbnQsIG51bGwsICcnKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25Ob2RlOiAobWVzc2FnZTogc3RyaW5nLCBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGlzcGxheU1zZyA9XG4gICAgICAgICAgICAgIG1lc3NhZ2UuaW5jbHVkZXMoJ2NyZWF0ZV90YXNrJykgfHwgbWVzc2FnZS5pbmNsdWRlcygnY2xvbmVfdGFzaycpID8gbWVzc2FnZSA6IHQoJ2NoYXQuZXhlY3V0aW5nQWN0aW9uJylcbiAgICAgICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4gKHtcbiAgICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgICAgW2N1cnJlbnRUaHJlYWRJZF06IGRpc3BsYXlNc2csXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uQ29tcGxldGU6IChcbiAgICAgICAgICAgIGZpbmFsQ29udGVudDogc3RyaW5nLFxuICAgICAgICAgICAgc291cmNlczogYW55LFxuICAgICAgICAgICAgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgICAgICAgICBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZyxcbiAgICAgICAgICAgIGF0dGFjaG1lbnRzPzogYW55W10gfCBudWxsLFxuICAgICAgICAgICAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGwsXG4gICAgICAgICAgICBhZ2VudElkPzogc3RyaW5nIHwgbnVsbFxuICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgaGFuZGxlU3RyZWFtRmluaXNoKGZpbmFsQ29udGVudCwgc291cmNlcywgbWVtb3J5U2Vzc2lvbklkLCBhdHRhY2htZW50cywgc3VnZ2VzdGlvbnMsIGFnZW50SWQpXG4gICAgICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbmV3TG9hZGluZ3MgPSB7IC4uLnByZXYgfVxuICAgICAgICAgICAgICBkZWxldGUgbmV3TG9hZGluZ3NbY3VycmVudFRocmVhZElkXVxuICAgICAgICAgICAgICByZXR1cm4gbmV3TG9hZGluZ3NcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkFwcHJvdmFsUmVxdWlyZWQ6IChhcHByb3ZhbFBheWxvYWQ6IGFueSwgYWNjdW11bGF0ZWRDb250ZW50OiBzdHJpbmcsIGN1cnJlbnRUaHJlYWRJZDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAvLyBOZXcgSElUTCBpbnRlcnJ1cHRpb24gZGV0ZWN0ZWQgYWZ0ZXIgcmVzdW1lIChjaGFpbmVkIGFjdGlvbnMpXG4gICAgICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbmV3TG9hZGluZ3MgPSB7IC4uLnByZXYgfVxuICAgICAgICAgICAgICBkZWxldGUgbmV3TG9hZGluZ3NbY3VycmVudFRocmVhZElkXVxuICAgICAgICAgICAgICByZXR1cm4gbmV3TG9hZGluZ3NcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkKGFwcHJvdmFsUGF5bG9hZCBhcyBBcHByb3ZhbFJlcXVlc3QsIGFjY3VtdWxhdGVkQ29udGVudClcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uRXJyb3I6IChlcnJvcjogYW55LCBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignU1NFIEVycm9yOicsIGVycm9yKVxuICAgICAgICAgICAgaGFuZGxlU3RyZWFtRXJyb3IoKVxuICAgICAgICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG5ld0xvYWRpbmdzID0geyAuLi5wcmV2IH1cbiAgICAgICAgICAgICAgZGVsZXRlIG5ld0xvYWRpbmdzW2N1cnJlbnRUaHJlYWRJZF1cbiAgICAgICAgICAgICAgcmV0dXJuIG5ld0xvYWRpbmdzXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBoYW5kbGVTdHJlYW1FcnJvcigpXG4gICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld0xvYWRpbmdzID0geyAuLi5wcmV2IH1cbiAgICAgICAgICBkZWxldGUgbmV3TG9hZGluZ3NbbG9hZGluZ0tleV1cbiAgICAgICAgICByZXR1cm4gbmV3TG9hZGluZ3NcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFthdXRoVXNlciwgYWdlbnQsIGFkZE1lc3NhZ2UsIGhhbmRsZVN0cmVhbUVycm9yLCBoYW5kbGVTdHJlYW1VcGRhdGUsIGhhbmRsZVN0cmVhbUZpbmlzaCwgaGFuZGxlQXBwcm92YWxSZXF1aXJlZF1cbiAgKVxuXG4gIGNvbnN0IGluaXRpYWxpemVDaGF0ID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmICghZmlyc3RUaW1lUmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpcnN0VGltZVJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAoaW5pdGlhbENoYXRJZCkge1xuICAgICAgYXdhaXQgbG9hZE1lc3NhZ2VzKClcbiAgICB9IGVsc2UgaWYgKHVzZXJJbml0aWFsTWVzc2FnZSkge1xuICAgICAgY29uc3QgaGFzSW5pdGlhbE1lc3NhZ2UgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlPy50cmltKCkpXG4gICAgICBjb25zdCBoYXNJbml0aWFsQXR0YWNobWVudHMgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cz8ubGVuZ3RoKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbEZhcSA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLmZhcUlkKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbEZ1YSA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLmZ1YUlkKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbFNjID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2Uuc2NJZClcblxuICAgICAgaWYgKCFoYXNJbml0aWFsTWVzc2FnZSAmJiAhaGFzSW5pdGlhbEF0dGFjaG1lbnRzICYmICFoYXNJbml0aWFsRmFxICYmICFoYXNJbml0aWFsRnVhICYmICFoYXNJbml0aWFsU2MpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhpc3RvcnkgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICBjb250ZW50OiBoaXN0b3J5TWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICByb2xlOiBoaXN0b3J5TWVzc2FnZS51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpID8gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgfSkpXG5cbiAgICAgIGFza01haWEoe1xuICAgICAgICBtZXNzYWdlOiB1c2VySW5pdGlhbE1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0Py5pZCB8fCBudWxsLFxuICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICB1c2VySWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgIGZpcnN0TmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgICBsYXN0TmFtZTogYXV0aFVzZXIubGFzdE5hbWUsXG4gICAgICAgIGNvbXBhbnlJZDogYXV0aFVzZXIuY29tcGFueV9pZC50b1N0cmluZygpLFxuICAgICAgICBjaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgICAgbWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG4gICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUhLFxuICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQhLFxuICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgLi4uKHByb2plY3Q/LmZlZUlkICE9IG51bGwgPyB7IGZlZUlkOiBOdW1iZXIocHJvamVjdC5mZWVJZCkgfSA6IHt9KSxcbiAgICAgICAgLi4uKGNsaWVudD8uaWRcbiAgICAgICAgICA/IHsgY2xpZW50SWQ6IGNsaWVudC5pZCB9XG4gICAgICAgICAgOiBwcm9qZWN0Py5jbGllbnRJZCAhPSBudWxsXG4gICAgICAgICAgICA/IHsgY2xpZW50SWQ6IE51bWJlcihwcm9qZWN0LmNsaWVudElkKSB9XG4gICAgICAgICAgICA6IHByb2plY3Q/LmNsaWVudD8uaWRcbiAgICAgICAgICAgICAgPyB7IGNsaWVudElkOiBwcm9qZWN0LmNsaWVudC5pZCB9XG4gICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4ocHJvamVjdD8ubmFtZSA/IHsgcHJvamVjdE5hbWU6IHByb2plY3QubmFtZSB9IDoge30pLFxuICAgICAgICAuLi4ocHJvamVjdD8uY2xpZW50Py5uYW1lXG4gICAgICAgICAgPyB7IGNsaWVudE5hbWU6IHByb2plY3QuY2xpZW50Lm5hbWUgfVxuICAgICAgICAgIDogY2xpZW50Py5uYW1lXG4gICAgICAgICAgICA/IHsgY2xpZW50TmFtZTogY2xpZW50Lm5hbWUgfVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICAgIC4uLih0YXNrPy5pZCAhPSBudWxsID8geyB0YXNrSWQ6IE51bWJlcih0YXNrLmlkKSwgLi4uKHRhc2submFtZSA/IHsgdGFza05hbWU6IHRhc2submFtZSB9IDoge30pIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuYXR0YWNobWVudHMgPyB7IGF0dGFjaG1lbnRzOiB1c2VySW5pdGlhbE1lc3NhZ2UuYXR0YWNobWVudHMgfSA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5mYXFJZCA/IHsgZmFxSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5mYXFJZCB9IDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmFnZW50U3VnZ2VzdGlvbklkID8geyBhZ2VudFN1Z2dlc3Rpb25JZDogdXNlckluaXRpYWxNZXNzYWdlLmFnZW50U3VnZ2VzdGlvbklkIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuZnVhSWQgPyB7IGZ1YUlkOiB1c2VySW5pdGlhbE1lc3NhZ2UuZnVhSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5zY0lkID8geyBzY0lkOiB1c2VySW5pdGlhbE1lc3NhZ2Uuc2NJZCB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnQ/LmVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eTogYWdlbnQuZW50aXR5IH0gOiB7fSksXG4gICAgICAgIC4uLihidWlsZENvbnRleHRNZXNzYWdlKHVzZXJJbml0aWFsTWVzc2FnZS5tZW50aW9ucylcbiAgICAgICAgICA/IHsgY29udGV4dE1lc3NhZ2U6IGJ1aWxkQ29udGV4dE1lc3NhZ2UodXNlckluaXRpYWxNZXNzYWdlLm1lbnRpb25zKSB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICB9KVxuICAgIH1cbiAgfSwgW1xuICAgIGluaXRpYWxDaGF0SWQsXG4gICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgIHByb2plY3QsXG4gICAgY2xpZW50LFxuICAgIGF1dGhVc2VyLFxuICAgIGFnZW50LFxuICAgIGFza01haWEsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICBdKVxuXG4gIGNvbnN0IHJlc2V0Q2hhdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBhYm9ydFN0cmVhbVNpbGVudGx5UmVmLmN1cnJlbnQoKVxuICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbnVsbFxuICAgIGN1cnJlbnRDaGF0SWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgc3RyZWFtaW5nU3RvcmUuY2xlYXIoKVxuICB9LCBbXSlcblxuICBjb25zdCBzdG9wR2VuZXJhdGlvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzdG9wU3RyZWFtaW5nKClcbiAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gIH0sIFtzdG9wU3RyZWFtaW5nXSlcblxuICByZXR1cm4ge1xuICAgIG1lc3NhZ2VzLFxuICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsXG4gICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV3JpdGluZyxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBhY3RpdmVMb2FkaW5ncyxcbiAgICBjdXJyZW50UHJvamVjdCxcbiAgICBjdXJyZW50Q2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgY3VycmVudE1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuXG4gICAgc2VuZE1lc3NhZ2UsXG4gICAgY2hhbmdlUHJvamVjdCxcbiAgICBoYW5kbGVGZWVkYmFjayxcbiAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uLFxuICAgIGhhbmRsZVNjcm9sbCxcbiAgICBpbml0aWFsaXplQ2hhdCxcbiAgICByZXNldENoYXQsXG4gICAgc3RvcEdlbmVyYXRpb24sXG5cbiAgICBpc0Rpc2FibGVkOiB3YWl0aW5nUmVzcG9uc2UgfHwgbG9hZGluZ01lc3NhZ2VzLFxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxXQUFXLEVBQUVDLE1BQU0sRUFBRUMsU0FBUyxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUNoRSxTQUFTQyxFQUFFLElBQUlDLE1BQU0sUUFBUSxNQUFNO0FBQ25DLFNBQVNDLGVBQWUsUUFBUSxvQkFBb0I7QUFDcEQsU0FBU0MscUJBQXFCLFFBQVEsMEJBQTBCO0FBQ2hFLFNBQVNDLElBQUksUUFBUSxTQUFTO0FBRzlCLFNBQVNDLE9BQU8sUUFBaUIsd0JBQXdCO0FBQ3pELFNBQVNDLGdCQUFnQixRQUFRLDhCQUE4QjtBQUMvRCxTQUFTQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSxhQUFhO0FBQzlDLE9BQU9DLElBQUksTUFBTSxxQkFBcUI7QUFDdEMsU0FBU0MsUUFBUSxRQUFRLDREQUE0RDtBQUNyRixTQUF1Q0MsZUFBZSxRQUF3QyxrQkFBa0I7QUFDaEgsU0FBeUNDLG1CQUFtQixRQUFRLDRCQUE0QjtBQUNoRyxTQUFTQyxrQ0FBa0MsUUFBUSxzQ0FBc0M7QUFHekYsU0FBU0MsV0FBVyxRQUFRLGdCQUFnQjtBQUM1QyxTQUFTQyxpQkFBaUIsUUFBUSxzQkFBc0I7QUFDeEQsU0FBU0Msc0JBQXNCLFFBQVEsMEJBQTBCO0FBQ2pFLFNBQVNDLGdCQUFnQixRQUFRLDZDQUE2QztBQUM5RSxTQUFTQyx1QkFBdUIsRUFBRUMseUJBQXlCLFFBQVEsMkJBQTJCO0FBQzlGLFNBQVNDLGNBQWMsUUFBUSx3QkFBd0I7QUFJdkQsSUFBTUMsd0JBQXdCLEdBQUcsU0FBM0JBLHdCQUF3QkEsQ0FBSUMsb0JBQTJDLEVBQUs7RUFBQSxJQUFBQyxvQkFBQTtFQUNoRixJQUFJQyxLQUFLLENBQUNDLE9BQU8sQ0FBQ0gsb0JBQW9CLENBQUMsRUFBRTtJQUN2QyxPQUFPO01BQUVJLFdBQVcsRUFBRUosb0JBQW9CO01BQUVLLE9BQU8sRUFBRSxDQUFDO0lBQXdCLENBQUM7RUFDakY7RUFFQSxJQUFNQSxPQUEyQixHQUFHTCxvQkFBb0IsYUFBcEJBLG9CQUFvQixjQUFwQkEsb0JBQW9CLEdBQUksQ0FBQyxDQUFDO0VBQzlELE9BQU87SUFBRUksV0FBVyxHQUFBSCxvQkFBQSxHQUFFSSxPQUFPLENBQUNELFdBQVcsY0FBQUgsb0JBQUEsY0FBQUEsb0JBQUEsR0FBSSxFQUFFO0lBQUVJLE9BQU8sRUFBUEE7RUFBUSxDQUFDO0FBQzVELENBQUM7QUFFRCxJQUFNQyw2QkFBNkIsR0FBRyxTQUFoQ0EsNkJBQTZCQSxDQUFJQyxjQUF1QixFQUF1QjtFQUNuRixJQUFJLENBQUNMLEtBQUssQ0FBQ0MsT0FBTyxDQUFDSSxjQUFjLENBQUMsRUFBRTtJQUNsQyxPQUFPLEVBQUU7RUFDWDtFQUVBLE9BQU9BLGNBQWMsQ0FDbEJDLE1BQU0sQ0FBQyxVQUFDQyxVQUFVO0lBQUEsT0FBNEMsQ0FBQyxDQUFDQSxVQUFVLElBQUlDLE9BQUEsQ0FBT0QsVUFBVSxNQUFLLFFBQVE7RUFBQSxFQUFDLENBQzdHRSxHQUFHLENBQUMsVUFBQ0YsVUFBVSxFQUFFRyxLQUFLLEVBQUs7SUFDMUIsSUFBTUMsSUFBSSxHQUNSLE9BQU9KLFVBQVUsQ0FBQ0ksSUFBSSxLQUFLLFFBQVEsSUFBSUosVUFBVSxDQUFDSSxJQUFJLENBQUNDLElBQUksQ0FBQyxDQUFDLEdBQUdMLFVBQVUsQ0FBQ0ksSUFBSSxDQUFDQyxJQUFJLENBQUMsQ0FBQyxXQUFBQyxNQUFBLENBQVdILEtBQUssR0FBRyxDQUFDLENBQUU7SUFDOUcsSUFBTUksSUFBSSxHQUFHLE9BQU9QLFVBQVUsQ0FBQ08sSUFBSSxLQUFLLFFBQVEsSUFBSVAsVUFBVSxDQUFDTyxJQUFJLENBQUNGLElBQUksQ0FBQyxDQUFDLEdBQUdMLFVBQVUsQ0FBQ08sSUFBSSxDQUFDRixJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUs7SUFDM0csSUFBTUcsUUFBUSxHQUFHLE9BQU9SLFVBQVUsQ0FBQ1MsU0FBUyxLQUFLLFFBQVEsR0FBR1QsVUFBVSxDQUFDUyxTQUFTLEdBQUcsRUFBRTtJQUNyRixJQUFNQyxZQUFZLEdBQUdOLElBQUksQ0FBQ08sUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHUCxJQUFJLE1BQUFFLE1BQUEsQ0FBTUYsSUFBSSxPQUFBRSxNQUFBLENBQUlDLElBQUksQ0FBRTtJQUNsRSxJQUFNSyxXQUFXLEdBQ2YsT0FBT1osVUFBVSxDQUFDYSxJQUFJLEtBQUssUUFBUSxHQUMvQmIsVUFBVSxDQUFDYSxJQUFJLEdBQ2ZDLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDRCxNQUFNLENBQUNkLFVBQVUsQ0FBQ2EsSUFBSSxDQUFDLENBQUMsR0FDdENDLE1BQU0sQ0FBQ2QsVUFBVSxDQUFDYSxJQUFJLENBQUMsR0FDdkIsQ0FBQztJQUVULE9BQU87TUFDTEcsSUFBSSxFQUFFLElBQUlDLElBQUksQ0FBQyxFQUFFLEVBQUVQLFlBQVksRUFBRTtRQUFFSCxJQUFJLEVBQUVDO01BQVMsQ0FBQyxDQUFDO01BQ3BEVSxFQUFFLEVBQ0EsT0FBT2xCLFVBQVUsQ0FBQ2tCLEVBQUUsS0FBSyxRQUFRLElBQUlsQixVQUFVLENBQUNrQixFQUFFLENBQUNiLElBQUksQ0FBQyxDQUFDLEdBQ3JETCxVQUFVLENBQUNrQixFQUFFLHFCQUFBWixNQUFBLENBQ0tILEtBQUssT0FBQUcsTUFBQSxDQUFJSSxZQUFZLENBQUU7TUFDL0NOLElBQUksRUFBSkEsSUFBSTtNQUNKUyxJQUFJLEVBQUVELFdBQVc7TUFDakJMLElBQUksRUFBSkEsSUFBSTtNQUNKWSxZQUFZLEVBQUUsT0FBT25CLFVBQVUsQ0FBQ21CLFlBQVksS0FBSyxRQUFRLEdBQUduQixVQUFVLENBQUNtQixZQUFZLEdBQUdDLFNBQVM7TUFDL0ZDLGFBQWEsRUFBRSxPQUFPckIsVUFBVSxDQUFDcUIsYUFBYSxLQUFLLFFBQVEsR0FBR3JCLFVBQVUsQ0FBQ3FCLGFBQWEsR0FBR0QsU0FBUztNQUNsR0UsUUFBUSxFQUFFLE9BQU90QixVQUFVLENBQUNzQixRQUFRLEtBQUssUUFBUSxHQUFHdEIsVUFBVSxDQUFDc0IsUUFBUSxHQUFHRixTQUFTO01BQ25GRyxJQUFJLEVBQUV2QixVQUFVLENBQUN1QixJQUFJLEtBQUssV0FBVyxHQUFHLFdBQVcsR0FBRztJQUN4RCxDQUFDO0VBQ0gsQ0FBQyxDQUFDO0FBQ04sQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0Msb0NBQW9DQSxDQUFDQyxjQUErQixFQUFZO0VBQ3ZGLElBQU1DLEdBQWEsR0FBRyxFQUFFO0VBQ3hCLElBQU1DLE1BQU0sR0FBRyxTQUFUQSxNQUFNQSxDQUFJQyxHQUFZLEVBQUs7SUFDL0IsSUFBSUEsR0FBRyxJQUFJLElBQUksRUFBRTtJQUNqQixJQUFNQyxDQUFDLEdBQUdDLFFBQVEsQ0FBQ0MsTUFBTSxDQUFDSCxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDbkMsSUFBSSxDQUFDZCxNQUFNLENBQUNrQixLQUFLLENBQUNILENBQUMsQ0FBQyxFQUFFSCxHQUFHLENBQUNPLElBQUksQ0FBQ0osQ0FBQyxDQUFDO0VBQ25DLENBQUM7RUFDREosY0FBYyxDQUFDUyxPQUFPLENBQUMsVUFBQUMsTUFBTSxFQUFJO0lBQUEsSUFBQUMsWUFBQTtJQUMvQixJQUFJLENBQUNELE1BQU0sSUFBSWxDLE9BQUEsQ0FBT2tDLE1BQU0sTUFBSyxRQUFRLEVBQUU7SUFDM0MsSUFBTUUsSUFBSSxHQUFHRixNQUFNLENBQUNHLFNBQVM7SUFDN0IsSUFBSSxFQUFFRCxJQUFJLElBQUlwQyxPQUFBLENBQU9vQyxJQUFJLE1BQUssUUFBUSxJQUFJLENBQUM1QyxLQUFLLENBQUNDLE9BQU8sQ0FBQzJDLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDakUsSUFBTUUsR0FBRyxHQUFHRixJQUErQjtJQUMzQ1YsTUFBTSxFQUFBUyxZQUFBLEdBQUNHLEdBQUcsQ0FBQ0MsT0FBTyxjQUFBSixZQUFBLGNBQUFBLFlBQUEsR0FBSUcsR0FBRyxDQUFDckIsRUFBRSxDQUFDO0lBQzdCLElBQUl6QixLQUFLLENBQUNDLE9BQU8sQ0FBQzZDLEdBQUcsQ0FBQ0UsUUFBUSxDQUFDLEVBQUU7TUFDL0JGLEdBQUcsQ0FBQ0UsUUFBUSxDQUFDUCxPQUFPLENBQUNQLE1BQU0sQ0FBQztJQUM5QjtJQUNBLElBQUlsQyxLQUFLLENBQUNDLE9BQU8sQ0FBQzZDLEdBQUcsQ0FBQ0csS0FBSyxDQUFDLEVBQUU7TUFDNUJILEdBQUcsQ0FBQ0csS0FBSyxDQUFDUixPQUFPLENBQUMsVUFBQVMsQ0FBQyxFQUFJO1FBQ3JCLElBQUlBLENBQUMsSUFBSTFDLE9BQUEsQ0FBTzBDLENBQUMsTUFBSyxRQUFRLElBQUksQ0FBQ2xELEtBQUssQ0FBQ0MsT0FBTyxDQUFDaUQsQ0FBQyxDQUFDLEVBQUU7VUFBQSxJQUFBQyxhQUFBO1VBQ25ELElBQU1DLElBQUksR0FBR0YsQ0FBNEI7VUFDekNoQixNQUFNLEVBQUFpQixhQUFBLEdBQUNDLElBQUksQ0FBQ0wsT0FBTyxjQUFBSSxhQUFBLGNBQUFBLGFBQUEsR0FBSUMsSUFBSSxDQUFDM0IsRUFBRSxDQUFDO1FBQ2pDO01BQ0YsQ0FBQyxDQUFDO0lBQ0o7RUFDRixDQUFDLENBQUM7RUFDRixPQUFPUSxHQUFHO0FBQ1o7O0FBRUE7QUFDQSxTQUFTb0Isc0NBQXNDQSxDQUFDckIsY0FBK0IsRUFBWTtFQUN6RixJQUFNQyxHQUFhLEdBQUcsRUFBRTtFQUN4QkQsY0FBYyxDQUFDUyxPQUFPLENBQUMsVUFBQUMsTUFBTSxFQUFJO0lBQy9CLElBQUksQ0FBQ0EsTUFBTSxJQUFJbEMsT0FBQSxDQUFPa0MsTUFBTSxNQUFLLFFBQVEsRUFBRTtJQUMzQyxJQUFNRSxJQUFJLEdBQUdGLE1BQU0sQ0FBQ0csU0FBUztJQUM3QixJQUFJLEVBQUVELElBQUksSUFBSXBDLE9BQUEsQ0FBT29DLElBQUksTUFBSyxRQUFRLElBQUksQ0FBQzVDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDMkMsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUNqRSxJQUFNRSxHQUFHLEdBQUdGLElBQStCO0lBQzNDLElBQUlGLE1BQU0sQ0FBQ1ksU0FBUyxLQUFLLGFBQWEsRUFBRTtNQUFBLElBQUFDLGFBQUE7TUFDdEMsSUFBTXBCLEdBQUcsSUFBQW9CLGFBQUEsR0FBR1QsR0FBRyxDQUFDQyxPQUFPLGNBQUFRLGFBQUEsY0FBQUEsYUFBQSxHQUFJVCxHQUFHLENBQUNyQixFQUFFO01BQ2pDLElBQUlVLEdBQUcsSUFBSSxJQUFJLEVBQUU7UUFDZixJQUFNQyxDQUFDLEdBQUdDLFFBQVEsQ0FBQ0MsTUFBTSxDQUFDSCxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDZCxNQUFNLENBQUNrQixLQUFLLENBQUNILENBQUMsQ0FBQyxFQUFFSCxHQUFHLENBQUNPLElBQUksQ0FBQ0osQ0FBQyxDQUFDO01BQ25DO0lBQ0Y7SUFDQSxJQUFJTSxNQUFNLENBQUNZLFNBQVMsS0FBSyxvQkFBb0IsRUFBRTtNQUM3QyxJQUFNRSxJQUFJLEdBQUdWLEdBQUcsQ0FBQ0UsUUFBUTtNQUN6QixJQUFJaEQsS0FBSyxDQUFDQyxPQUFPLENBQUN1RCxJQUFJLENBQUMsRUFBRTtRQUN2QkEsSUFBSSxDQUFDZixPQUFPLENBQUMsVUFBQWdCLEdBQUcsRUFBSTtVQUNsQixJQUFNckIsQ0FBQyxHQUFHQyxRQUFRLENBQUNDLE1BQU0sQ0FBQ21CLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztVQUNuQyxJQUFJLENBQUNwQyxNQUFNLENBQUNrQixLQUFLLENBQUNILENBQUMsQ0FBQyxFQUFFSCxHQUFHLENBQUNPLElBQUksQ0FBQ0osQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQztNQUNKO0lBQ0Y7RUFDRixDQUFDLENBQUM7RUFDRixPQUFPSCxHQUFHO0FBQ1o7QUFFQSxTQUFTeUIseUNBQXlDQSxDQUFDMUIsY0FBK0IsRUFBaUI7RUFBQSxJQUFBMkIsYUFBQTtFQUNqRyxJQUFNQyxVQUFVLEdBQUc1QixjQUFjLENBQUM2QixJQUFJLENBQUMsVUFBQUMsQ0FBQztJQUFBLE9BQUksQ0FBQ0EsQ0FBQyxDQUFDUixTQUFTLElBQUksRUFBRSxFQUFFUyxXQUFXLENBQUMsQ0FBQyxLQUFLLFlBQVk7RUFBQSxFQUFDO0VBQy9GLElBQ0UsQ0FBQ0gsVUFBVSxJQUNYLENBQUNBLFVBQVUsQ0FBQ2YsU0FBUyxJQUNyQnJDLE9BQUEsQ0FBT29ELFVBQVUsQ0FBQ2YsU0FBUyxNQUFLLFFBQVEsSUFDeEM3QyxLQUFLLENBQUNDLE9BQU8sQ0FBQzJELFVBQVUsQ0FBQ2YsU0FBUyxDQUFDLEVBQ25DO0lBQ0EsT0FBTyxJQUFJO0VBQ2I7RUFDQSxJQUFNQyxHQUFHLEdBQUdjLFVBQVUsQ0FBQ2YsU0FBb0M7RUFDM0QsSUFBTVYsR0FBRyxJQUFBd0IsYUFBQSxHQUFHYixHQUFHLENBQUNrQixRQUFRLGNBQUFMLGFBQUEsY0FBQUEsYUFBQSxHQUFJYixHQUFHLENBQUNtQixPQUFPO0VBQ3ZDLE9BQU85QixHQUFHLElBQUksSUFBSSxHQUFHRyxNQUFNLENBQUNILEdBQUcsQ0FBQyxHQUFHLElBQUk7QUFDekM7QUFFQSxTQUFTK0IsMENBQTBDQSxDQUFDbEMsY0FBK0IsRUFBRW1DLFFBQWdCLEVBQWlCO0VBQUEsSUFBQUMsSUFBQSxFQUFBQyxjQUFBO0VBQ3BILElBQU0zQixNQUFNLEdBQUdWLGNBQWMsQ0FBQzZCLElBQUksQ0FBQyxVQUFBQyxDQUFDO0lBQUEsT0FBSSxDQUFDQSxDQUFDLENBQUNSLFNBQVMsSUFBSSxFQUFFLEVBQUVTLFdBQVcsQ0FBQyxDQUFDLEtBQUtJLFFBQVEsQ0FBQ0osV0FBVyxDQUFDLENBQUM7RUFBQSxFQUFDO0VBQ3JHLElBQUksQ0FBQ3JCLE1BQU0sSUFBSSxDQUFDQSxNQUFNLENBQUNHLFNBQVMsSUFBSXJDLE9BQUEsQ0FBT2tDLE1BQU0sQ0FBQ0csU0FBUyxNQUFLLFFBQVEsSUFBSTdDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDeUMsTUFBTSxDQUFDRyxTQUFTLENBQUMsRUFBRTtJQUMzRyxPQUFPLElBQUk7RUFDYjtFQUNBLElBQU1DLEdBQUcsR0FBR0osTUFBTSxDQUFDRyxTQUFvQztFQUN2RCxJQUFNVixHQUFHLElBQUFpQyxJQUFBLElBQUFDLGNBQUEsR0FBR3ZCLEdBQUcsQ0FBQ2tCLFFBQVEsY0FBQUssY0FBQSxjQUFBQSxjQUFBLEdBQUl2QixHQUFHLENBQUNtQixPQUFPLGNBQUFHLElBQUEsY0FBQUEsSUFBQSxHQUFJdEIsR0FBRyxDQUFDckIsRUFBRTtFQUNqRCxPQUFPVSxHQUFHLElBQUksSUFBSSxHQUFHRyxNQUFNLENBQUNILEdBQUcsQ0FBQyxHQUFHLElBQUk7QUFDekM7O0FBRUE7QUFDQSxTQUFTbUMsdUNBQXVDQSxDQUFDQyxJQUFZLEVBQVk7RUFDdkUsSUFBTUMsT0FBTyxHQUFHRCxJQUFJLENBQUNFLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQztFQUNuRCxJQUFJRCxPQUFPLEVBQUU7SUFDWCxJQUFNcEMsQ0FBQyxHQUFHQyxRQUFRLENBQUNtQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ2xDLE9BQU9uRCxNQUFNLENBQUNrQixLQUFLLENBQUNILENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDQSxDQUFDLENBQUM7RUFDbkM7RUFDQSxJQUFNc0MsSUFBSSxHQUFHSCxJQUFJLENBQUNFLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztFQUMzQyxJQUFJQyxJQUFJLEVBQUU7SUFDUixJQUFNdEMsRUFBQyxHQUFHQyxRQUFRLENBQUNxQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQy9CLE9BQU9yRCxNQUFNLENBQUNrQixLQUFLLENBQUNILEVBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDQSxFQUFDLENBQUM7RUFDbkM7RUFDQSxPQUFPLEVBQUU7QUFDWDtBQUVBLElBQU11QyxrQkFBa0IsR0FBRyxTQUFyQkEsa0JBQWtCQSxDQUFJQyxRQUFpQixFQUFLO0VBQ2hELElBQU1DLFdBQVcsR0FBR3hHLE1BQU0sQ0FBa0I7SUFDMUNvRCxFQUFFLEVBQUVtRCxRQUFRLENBQUNuRCxFQUFFLENBQUNxRCxRQUFRLENBQUMsQ0FBQztJQUMxQm5FLElBQUksRUFBRWlFLFFBQVEsQ0FBQ0csU0FBUztJQUN4QkMsTUFBTSxFQUFFSixRQUFRLENBQUNLO0VBQ25CLENBQUMsQ0FBQztFQUVGLElBQ0VKLFdBQVcsQ0FBQ0ssT0FBTyxDQUFDekQsRUFBRSxLQUFLbUQsUUFBUSxDQUFDbkQsRUFBRSxDQUFDcUQsUUFBUSxDQUFDLENBQUMsSUFDakRELFdBQVcsQ0FBQ0ssT0FBTyxDQUFDdkUsSUFBSSxLQUFLaUUsUUFBUSxDQUFDRyxTQUFTLElBQy9DRixXQUFXLENBQUNLLE9BQU8sQ0FBQ0YsTUFBTSxLQUFLSixRQUFRLENBQUNLLE9BQU8sRUFDL0M7SUFDQUosV0FBVyxDQUFDSyxPQUFPLEdBQUc7TUFDcEJ6RCxFQUFFLEVBQUVtRCxRQUFRLENBQUNuRCxFQUFFLENBQUNxRCxRQUFRLENBQUMsQ0FBQztNQUMxQm5FLElBQUksRUFBRWlFLFFBQVEsQ0FBQ0csU0FBUztNQUN4QkMsTUFBTSxFQUFFSixRQUFRLENBQUNLO0lBQ25CLENBQUM7RUFDSDtFQUNBLE9BQU87SUFDTEosV0FBVyxFQUFFQSxXQUFXLENBQUNLO0VBQzNCLENBQUM7QUFDSCxDQUFDO0FBRUQsSUFBTUMsWUFBWSxHQUFHLFNBQWZBLFlBQVlBLENBQUlDLElBQVksRUFBa0Q7RUFDbEYsSUFBSSxDQUFDQSxJQUFJLENBQUN4RSxJQUFJLENBQUMsQ0FBQyxFQUFFLE9BQU8sSUFBSTtFQUU3QixJQUFBeUUsV0FBQSxHQUE4QkQsSUFBSSxDQUFDRSxLQUFLLENBQUMsSUFBSSxDQUFDO0lBQUFDLFlBQUEsR0FBQUMsY0FBQSxDQUFBSCxXQUFBO0lBQXZDSSxTQUFTLEdBQUFGLFlBQUE7SUFBRUcsUUFBUSxHQUFBSCxZQUFBO0VBQzFCLElBQUksQ0FBQ0UsU0FBUyxJQUFJLENBQUNDLFFBQVEsRUFBRSxPQUFPLElBQUk7RUFFeEMsSUFBTUMsU0FBUyxHQUFHRixTQUFTLENBQUNHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUNoRixJQUFJLENBQUMsQ0FBQztFQUN6RCxJQUFNaUYsT0FBTyxHQUFHSCxRQUFRLENBQUNFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUNoRixJQUFJLENBQUMsQ0FBQztFQUVyRCxJQUFJO0lBQ0YsSUFBTWtGLElBQUksR0FBR0MsSUFBSSxDQUFDQyxLQUFLLENBQUNILE9BQU8sQ0FBQztJQUNoQyxPQUFPO01BQUVGLFNBQVMsRUFBVEEsU0FBUztNQUFFRyxJQUFJLEVBQUpBO0lBQUssQ0FBQztFQUM1QixDQUFDLENBQUMsT0FBT0csVUFBVSxFQUFFO0lBQ25CQyxPQUFPLENBQUNDLEtBQUssQ0FBQyx5QkFBeUIsRUFBRUYsVUFBVSxFQUFFSixPQUFPLENBQUM7SUFDN0QsT0FBTyxJQUFJO0VBQ2I7QUFDRixDQUFDO0FBRUQsSUFBTU8sZ0JBQWdCO0VBQUEsSUFBQUMsS0FBQSxHQUFBQyxpQkFBQSxjQUFBQyxtQkFBQSxDQUFBQyxJQUFBLENBQUcsU0FBQUMsUUFDdkJDLFFBQWtCLEVBQ2xCQyxRQUFnQixFQUNoQkMsU0FjQztJQUFBLElBQUFDLGNBQUE7SUFBQSxJQUFBQyxNQUFBLEVBQUFDLE9BQUEsRUFBQUMsTUFBQSxFQUFBQyxrQkFBQSxFQUFBQyxnQkFBQSxFQVlRQyxVQUFVLEVBQUFDLGtCQUFBLEVBQUFDLElBQUEsRUFBQUMsS0FBQSxFQUFBQyxLQUFBLEVBQUFDLENBQUE7SUFBQSxPQUFBakIsbUJBQUEsQ0FBQWtCLElBQUEsV0FBQUMsUUFBQTtNQUFBLGtCQUFBQSxRQUFBLENBQUFDLElBQUEsR0FBQUQsUUFBQSxDQUFBRSxJQUFBO1FBQUE7VUFBVlQsVUFBVSxZQUFBVSxZQUFDekMsSUFBWSxFQUFFO1lBQ2hDLElBQU0wQyxNQUFNLEdBQUczQyxZQUFZLENBQUNDLElBQUksQ0FBQztZQUNqQyxJQUFJLENBQUMwQyxNQUFNLEVBQUU7WUFFYixJQUFRbkMsU0FBUyxHQUFXbUMsTUFBTSxDQUExQm5DLFNBQVM7Y0FBRUcsSUFBSSxHQUFLZ0MsTUFBTSxDQUFmaEMsSUFBSTtZQUN2QixJQUFNaUMsU0FBUyxHQUFHakMsSUFBK0I7WUFFakQsSUFBSUgsU0FBUyxLQUFLLE9BQU8sRUFBRTtjQUN6QixJQUFNcUMsT0FBTyxHQUFHRCxTQUFTLENBQUNDLE9BQWlCO2NBQzNDZixrQkFBa0IsSUFBSWUsT0FBTztjQUM3QnBCLFNBQVMsQ0FBQ3FCLE9BQU8sQ0FBQ2hCLGtCQUFrQixDQUFDO1lBQ3ZDLENBQUMsTUFBTSxJQUFJdEIsU0FBUyxLQUFLLE1BQU0sRUFBRTtjQUMvQixJQUFJb0MsU0FBUyxDQUFDRyxPQUFPLElBQUksT0FBT0gsU0FBUyxDQUFDRyxPQUFPLEtBQUssUUFBUSxFQUFFO2dCQUM5RHRCLFNBQVMsQ0FBQ3VCLE1BQU0sQ0FBQ0osU0FBUyxDQUFDRyxPQUFPLEVBQUV2QixRQUFRLENBQUM7Y0FDL0M7WUFDRixDQUFDLE1BQU0sSUFBSWhCLFNBQVMsS0FBSyxVQUFVLEVBQUU7Y0FBQSxJQUFBeUMsbUJBQUE7Y0FDbkMsSUFBTUMsWUFBWSxHQUFJTixTQUFTLENBQUNDLE9BQU8sSUFBZWYsa0JBQWtCO2NBQ3hFLElBQU1xQixPQUFPLEdBQUlQLFNBQVMsQ0FBQ08sT0FBTyxJQUFnQixJQUFJO2NBQ3RELElBQU1DLGVBQWUsR0FBSVIsU0FBUyxDQUFDUyxpQkFBaUIsSUFBZSxFQUFFO2NBQ3JFLElBQU10SSxXQUFXLEdBQUdGLEtBQUssQ0FBQ0MsT0FBTyxDQUFDOEgsU0FBUyxDQUFDN0gsV0FBVyxDQUFDLEdBQUc2SCxTQUFTLENBQUM3SCxXQUFXLEdBQUcsSUFBSTtjQUN2RixJQUFNdUksV0FBVyxHQUFHekksS0FBSyxDQUFDQyxPQUFPLENBQUM4SCxTQUFTLENBQUNXLGFBQWEsQ0FBQyxHQUNyRFgsU0FBUyxDQUFDVyxhQUFhLEdBQ3hCMUksS0FBSyxDQUFDQyxPQUFPLENBQUM4SCxTQUFTLENBQUNVLFdBQVcsQ0FBQyxHQUNqQ1YsU0FBUyxDQUFDVSxXQUFXLEdBQ3RCLElBQUk7Y0FDVixJQUFNRSxVQUFVLElBQUFQLG1CQUFBLEdBQUdMLFNBQVMsQ0FBQy9ELFFBQVEsY0FBQW9FLG1CQUFBLGNBQUFBLG1CQUFBLEdBQUlMLFNBQVMsQ0FBQzlELE9BQU87Y0FDMUQsSUFBTTJFLGdCQUFnQixHQUFHRCxVQUFVLElBQUksSUFBSSxJQUFJckcsTUFBTSxDQUFDcUcsVUFBVSxDQUFDLENBQUMvSCxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRzBCLE1BQU0sQ0FBQ3FHLFVBQVUsQ0FBQyxDQUFDL0gsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJO2NBQ2xIZ0csU0FBUyxDQUFDaUMsVUFBVSxDQUFDUixZQUFZLEVBQUVDLE9BQU8sRUFBRUMsZUFBZSxFQUFFNUIsUUFBUSxFQUFFekcsV0FBVyxFQUFFdUksV0FBVyxFQUFFRyxnQkFBZ0IsQ0FBQztZQUNwSCxDQUFDLE1BQU0sSUFBSWpELFNBQVMsS0FBSyxtQkFBbUIsRUFBRTtjQUFBLElBQUFtRCxxQkFBQTtjQUM1QyxDQUFBQSxxQkFBQSxHQUFBbEMsU0FBUyxDQUFDbUMsa0JBQWtCLGNBQUFELHFCQUFBLGVBQTVCQSxxQkFBQSxDQUFBRSxJQUFBLENBQUFwQyxTQUFTLEVBQXNCbUIsU0FBUyxFQUFFZCxrQkFBa0IsRUFBRU4sUUFBUSxDQUFDO1lBQ3pFLENBQUMsTUFBTSxJQUFJaEIsU0FBUyxLQUFLLE9BQU8sRUFBRTtjQUNoQ2lCLFNBQVMsQ0FBQ3FDLE9BQU8sQ0FBQ2xCLFNBQVMsQ0FBQzVCLEtBQUssRUFBRVEsUUFBUSxDQUFDO1lBQzlDO1VBQ0YsQ0FBQztVQTNDS0csTUFBTSxJQUFBRCxjQUFBLEdBQUdILFFBQVEsQ0FBQ3dDLElBQUksY0FBQXJDLGNBQUEsdUJBQWJBLGNBQUEsQ0FBZXNDLFNBQVMsQ0FBQyxDQUFDO1VBQUEsSUFDcENyQyxNQUFNO1lBQUFZLFFBQUEsQ0FBQUUsSUFBQTtZQUFBO1VBQUE7VUFBQSxNQUNILElBQUl3QixLQUFLLENBQUMscUJBQXFCLENBQUM7UUFBQTtVQUdsQ3JDLE9BQU8sR0FBRyxJQUFJc0MsV0FBVyxDQUFDLENBQUM7VUFDN0JyQyxNQUFNLEdBQUcsRUFBRTtVQUNYQyxrQkFBa0IsR0FBRyxFQUFFO1VBQ3ZCQyxnQkFBZ0IsR0FBRyxLQUFLO1FBQUE7VUFBQSxJQXFDcEJBLGdCQUFnQjtZQUFBUSxRQUFBLENBQUFFLElBQUE7WUFBQTtVQUFBO1VBQUFGLFFBQUEsQ0FBQUUsSUFBQTtVQUFBLE9BRVFkLE1BQU0sQ0FBQ3dDLElBQUksQ0FBQyxDQUFDO1FBQUE7VUFBQWxDLGtCQUFBLEdBQUFNLFFBQUEsQ0FBQTZCLElBQUE7VUFBbkNsQyxJQUFJLEdBQUFELGtCQUFBLENBQUpDLElBQUk7VUFBRUMsS0FBSyxHQUFBRixrQkFBQSxDQUFMRSxLQUFLO1VBQUEsS0FDZkQsSUFBSTtZQUFBSyxRQUFBLENBQUFFLElBQUE7WUFBQTtVQUFBO1VBQ05WLGdCQUFnQixHQUFHLElBQUk7VUFBQSxPQUFBUSxRQUFBLENBQUE4QixNQUFBO1FBQUE7VUFJekJ4QyxNQUFNLElBQUlELE9BQU8sQ0FBQzBDLE1BQU0sQ0FBQ25DLEtBQUssRUFBRTtZQUFFb0MsTUFBTSxFQUFFO1VBQUssQ0FBQyxDQUFDO1VBQzNDbkMsS0FBSyxHQUFHUCxNQUFNLENBQUMxQixLQUFLLENBQUMsTUFBTSxDQUFDO1VBQ2xDMEIsTUFBTSxHQUFHTyxLQUFLLENBQUNvQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUU7VUFFMUIsS0FBU25DLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR0QsS0FBSyxDQUFDcUMsTUFBTSxFQUFFcEMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN4Q0wsVUFBVSxDQUFDSSxLQUFLLENBQUNDLENBQUMsQ0FBQyxDQUFDO1VBQ3RCO1VBQUNFLFFBQUEsQ0FBQUUsSUFBQTtVQUFBO1FBQUE7UUFBQTtVQUFBLE9BQUFGLFFBQUEsQ0FBQW1DLElBQUE7TUFBQTtJQUFBLEdBQUFwRCxPQUFBO0VBQUEsQ0FFSjtFQUFBLGdCQWhGS0wsZ0JBQWdCQSxDQUFBMEQsRUFBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUE7SUFBQSxPQUFBM0QsS0FBQSxDQUFBNEQsS0FBQSxPQUFBQyxTQUFBO0VBQUE7QUFBQSxHQWdGckI7QUFFRCxPQUFPLElBQU1DLGNBQWMsR0FBRyxTQUFqQkEsY0FBY0EsQ0FBQUMsS0FBQSxFQUtBO0VBQUEsSUFKakJDLGFBQWEsR0FBQUQsS0FBQSxDQUFyQkUsTUFBTTtJQUNOQyxrQkFBa0IsR0FBQUgsS0FBQSxDQUFsQkcsa0JBQWtCO0lBQ2xCdEIsT0FBTyxHQUFBbUIsS0FBQSxDQUFQbkIsT0FBTztJQUFBdUIsWUFBQSxHQUFBSixLQUFBLENBQ1BLLE1BQU07SUFBTkEsTUFBTSxHQUFBRCxZQUFBLGNBQUcsRUFBRSxHQUFBQSxZQUFBO0VBRVgsSUFBQUUsS0FBQSxHQUFjOUwsSUFBSSxDQUFDLENBQUM7SUFBWnNFLENBQUMsR0FBQXdILEtBQUEsQ0FBRHhILENBQUM7RUFDVCxJQUFNMEIsUUFBUSxHQUFHL0YsT0FBTyxDQUFDLENBQUM7RUFDMUIsSUFBQThMLGlCQUFBLEdBV0k3TCxnQkFBZ0IsQ0FBQyxDQUFDO0lBVnBCOEwsT0FBTyxHQUFBRCxpQkFBQSxDQUFQQyxPQUFPO0lBQ1BDLFVBQVUsR0FBQUYsaUJBQUEsQ0FBVkUsVUFBVTtJQUNWQyxNQUFNLEdBQUFILGlCQUFBLENBQU5HLE1BQU07SUFDTkMsU0FBUyxHQUFBSixpQkFBQSxDQUFUSSxTQUFTO0lBQ1RDLElBQUksR0FBQUwsaUJBQUEsQ0FBSkssSUFBSTtJQUNKQyxLQUFLLEdBQUFOLGlCQUFBLENBQUxNLEtBQUs7SUFDTEMsaUJBQWlCLEdBQUFQLGlCQUFBLENBQWpCTyxpQkFBaUI7SUFDakJDLGtCQUFrQixHQUFBUixpQkFBQSxDQUFsQlEsa0JBQWtCO0lBQ2xCQyxZQUFZLEdBQUFULGlCQUFBLENBQVpTLFlBQVk7SUFDWkMsZUFBZSxHQUFBVixpQkFBQSxDQUFmVSxlQUFlO0VBRWpCLElBQU1DLEtBQUssR0FBR3RNLFFBQVEsQ0FBQyxDQUFDO0VBQ3hCLElBQUF1TSxZQUFBLEdBQTBCak0sV0FBVyxDQUFDLENBQUM7SUFBL0JrTSxhQUFhLEdBQUFELFlBQUEsQ0FBYkMsYUFBYTtFQUNyQixJQUFBQyxtQkFBQSxHQUF3QjlHLGtCQUFrQixDQUFDQyxRQUFRLENBQUM7SUFBNUNDLFdBQVcsR0FBQTRHLG1CQUFBLENBQVg1RyxXQUFXO0VBQ25CLElBQUE2RyxrQkFBQSxHQUE4Qm5NLGlCQUFpQixDQUFDLENBQUM7SUFBekNvTSxpQkFBaUIsR0FBQUQsa0JBQUEsQ0FBakJDLGlCQUFpQjtFQUN6QixJQUFNQyxnQkFBZ0IsR0FBR3ZOLE1BQU0sQ0FBQ0ksTUFBTSxDQUFDLENBQUMsQ0FBQztFQUN6QyxJQUFNb04sbUJBQW1CLEdBQUd4TixNQUFNLENBQWdCLElBQUksQ0FBQztFQUN2RCxJQUFNeU4sYUFBYSxHQUFHek4sTUFBTSxDQUFDZ00sYUFBYSxJQUFJNUwsTUFBTSxDQUFDLENBQUMsQ0FBQztFQUN2RCxJQUFNc04sYUFBYSxHQUFHMU4sTUFBTSxDQUFDLEtBQUssQ0FBQztFQUNuQyxJQUFNMk4sV0FBVyxHQUFHM04sTUFBTSxDQUFnQixFQUFFLENBQUM7RUFDN0M7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0UsSUFBTTROLHFCQUFxQixHQUFHNU4sTUFBTSxDQUcxQixJQUFJLENBQUM7RUFDZixJQUFNNk4sZUFBZSxHQUFHN04sTUFBTSxDQUFDLEtBQUssQ0FBQztFQUNyQyxJQUFNOE4sWUFBWSxHQUFHOU4sTUFBTSxDQUFDLEtBQUssQ0FBQztFQUNsQztFQUNBLElBQU0rTix5QkFBeUIsR0FBRy9OLE1BQU0sQ0FBZ0IsSUFBSSxDQUFDO0VBQzdEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7RUFDRSxJQUFNZ08scUJBQXFCLEdBQUdoTyxNQUFNLENBQWdCLElBQUksQ0FBQztFQUN6RDtBQUNGO0VBQ0UsSUFBTWlPLHNCQUFzQixHQUFHak8sTUFBTSxDQUFhO0lBQUEsT0FBTXNELFNBQVM7RUFBQSxFQUFDO0VBQ2xFLElBQUE0SyxTQUFBLEdBQTRDaE8sUUFBUSxDQUF5QixDQUFDLENBQUMsQ0FBQztJQUFBaU8sVUFBQSxHQUFBaEgsY0FBQSxDQUFBK0csU0FBQTtJQUF6RUUsY0FBYyxHQUFBRCxVQUFBO0lBQUVFLGlCQUFpQixHQUFBRixVQUFBO0VBRXhDLElBQU1HLG9CQUFvQixHQUFHdE8sTUFBTSxDQUFDNk0saUJBQWlCLENBQUM7RUFDdEQsSUFBTTBCLHFCQUFxQixHQUFHdk8sTUFBTSxDQUFDOE0sa0JBQWtCLENBQUM7RUFFeEQ3TSxTQUFTLENBQUMsWUFBTTtJQUNkcU8sb0JBQW9CLENBQUN6SCxPQUFPLEdBQUdnRyxpQkFBaUI7SUFDaEQwQixxQkFBcUIsQ0FBQzFILE9BQU8sR0FBR2lHLGtCQUFrQjtFQUNwRCxDQUFDLEVBQUUsQ0FBQ0QsaUJBQWlCLEVBQUVDLGtCQUFrQixDQUFDLENBQUM7RUFFM0MsSUFBQTBCLGdCQUFBLEdBQ0VuTyxlQUFlLENBQUM7TUFDZDRMLE1BQU0sRUFBRUQsYUFBYSxJQUFJeUIsYUFBYSxDQUFDNUcsT0FBTztNQUM5Q0wsV0FBVyxFQUFYQSxXQUFXO01BQ1gwRixrQkFBa0IsRUFBbEJBLGtCQUFrQjtNQUNsQnRCLE9BQU8sRUFBUEEsT0FBTztNQUNQd0IsTUFBTSxFQUFOQTtJQUNGLENBQUMsQ0FBQztJQVBJcUMsZUFBZSxHQUFBRCxnQkFBQSxDQUFmQyxlQUFlO0lBQUVDLFFBQVEsR0FBQUYsZ0JBQUEsQ0FBUkUsUUFBUTtJQUFFQyxxQkFBcUIsR0FBQUgsZ0JBQUEsQ0FBckJHLHFCQUFxQjtJQUFFQyxZQUFZLEdBQUFKLGdCQUFBLENBQVpJLFlBQVk7SUFBRUMsVUFBVSxHQUFBTCxnQkFBQSxDQUFWSyxVQUFVO0lBQUVDLGFBQWEsR0FBQU4sZ0JBQUEsQ0FBYk0sYUFBYTtJQUFFQyxZQUFZLEdBQUFQLGdCQUFBLENBQVpPLFlBQVk7RUFTL0dwQixXQUFXLENBQUM5RyxPQUFPLEdBQUc2SCxRQUFRO0VBRTlCek8sU0FBUyxDQUFDLFlBQU07SUFDZCxJQUFNK08sV0FBVyxHQUFHLElBQUlDLFdBQVcsQ0FBQywrQkFBK0IsRUFBRTtNQUNuRUMsTUFBTSxFQUFFO1FBQUVULGVBQWUsRUFBZkE7TUFBZ0I7SUFDNUIsQ0FBQyxDQUFDO0lBQ0ZVLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDSixXQUFXLENBQUM7RUFDckMsQ0FBQyxFQUFFLENBQUNQLGVBQWUsQ0FBQyxDQUFDO0VBRXJCeE8sU0FBUyxDQUFDLFlBQU07SUFDZCxJQUFJK0wsYUFBYSxJQUFJQSxhQUFhLEtBQUt5QixhQUFhLENBQUM1RyxPQUFPLEVBQUU7TUFDNUQ7TUFDQTtNQUNBb0gsc0JBQXNCLENBQUNwSCxPQUFPLENBQUMsQ0FBQzs7TUFFaEM7TUFDQTJGLFVBQVUsQ0FBQyxJQUFJLENBQUM7TUFDaEJFLFNBQVMsYUFBVEEsU0FBUyxlQUFUQSxTQUFTLENBQUcsSUFBSSxDQUFDO01BQ2pCTSxlQUFlLENBQUMsSUFBSSxDQUFDO01BRXJCUyxhQUFhLENBQUM1RyxPQUFPLEdBQUdtRixhQUFhO01BQ3JDdUIsZ0JBQWdCLENBQUMxRyxPQUFPLEdBQUd6RyxNQUFNLENBQUMsQ0FBQztNQUNuQ29OLG1CQUFtQixDQUFDM0csT0FBTyxHQUFHLElBQUk7TUFDbEM2RyxhQUFhLENBQUM3RyxPQUFPLEdBQUcsS0FBSztNQUM3QmdILGVBQWUsQ0FBQ2hILE9BQU8sR0FBRyxLQUFLO01BQy9Ca0gseUJBQXlCLENBQUNsSCxPQUFPLEdBQUcsSUFBSTtNQUN4Q21ILHFCQUFxQixDQUFDbkgsT0FBTyxHQUFHLElBQUk7TUFDcEN0RixjQUFjLENBQUM4TixLQUFLLENBQUMsQ0FBQztNQUV0QlQsWUFBWSxDQUFDLENBQUM7SUFDaEI7RUFDRixDQUFDLEVBQUUsQ0FBQzVDLGFBQWEsRUFBRU8sT0FBTyxFQUFFQyxVQUFVLEVBQUVFLFNBQVMsRUFBRU0sZUFBZSxFQUFFNEIsWUFBWSxDQUFDLENBQUM7O0VBRWxGO0VBQ0EzTyxTQUFTLENBQUMsWUFBTTtJQUNkLElBQUk4TSxZQUFZLElBQUkwQixlQUFlLEVBQUU7SUFDckMsSUFBTWEsa0JBQWtCLEdBQUdaLFFBQVEsQ0FBQ3pNLE1BQU0sQ0FBQyxVQUFBc04sR0FBRztNQUFBLE9BQUlBLEdBQUcsQ0FBQ0MsU0FBUztJQUFBLEVBQUMsQ0FBQ0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLElBQUFDLEtBQUEsR0FBbUNKLGtCQUFrQixJQUFJLENBQUMsQ0FBQztNQUFuREUsU0FBUyxHQUFBRSxLQUFBLENBQVRGLFNBQVM7TUFBRUcsV0FBVyxHQUFBRCxLQUFBLENBQVhDLFdBQVc7SUFDOUIsSUFBSSxDQUFDSCxTQUFTLEVBQUU7SUFFaEJyQyxhQUFhLENBQUNxQyxTQUFTLENBQUMsQ0FBQ0ksSUFBSSxDQUFDLFVBQUFDLFFBQVEsRUFBSTtNQUN4QyxJQUFNQyxLQUFLLEdBQUdELFFBQVEsYUFBUkEsUUFBUSx1QkFBUkEsUUFBUSxDQUFFckssSUFBSSxDQUFDLFVBQUF1SyxDQUFDO1FBQUEsT0FBSS9NLE1BQU0sQ0FBQytNLENBQUMsQ0FBQzNNLEVBQUUsQ0FBQyxLQUFLSixNQUFNLENBQUN3TSxTQUFTLENBQUM7TUFBQSxFQUFDO01BQ3JFLElBQUlNLEtBQUssRUFBRTtRQUFBLElBQUFFLGFBQUE7UUFDVGhELGVBQWUsQ0FBQztVQUNkMkMsV0FBVyxFQUFFRyxLQUFLLENBQUN4TixJQUFJO1VBQ3ZCMk4sVUFBVSxFQUFFLEVBQUFELGFBQUEsR0FBQUYsS0FBSyxDQUFDckQsTUFBTSxjQUFBdUQsYUFBQSx1QkFBWkEsYUFBQSxDQUFjMU4sSUFBSSxLQUFJLEVBQUU7VUFDcENrTixTQUFTLEVBQUV2TCxNQUFNLENBQUM2TCxLQUFLLENBQUMxTSxFQUFFO1FBQzVCLENBQUMsQ0FBQztRQUNGb0osVUFBVSxDQUFDc0QsS0FBSyxDQUFDO01BQ25CLENBQUMsTUFBTSxJQUFJSCxXQUFXLEVBQUU7UUFDdEIzQyxlQUFlLENBQUM7VUFDZDJDLFdBQVcsRUFBWEEsV0FBVztVQUNYTSxVQUFVLEVBQUUsRUFBRTtVQUNkVCxTQUFTLEVBQUV2TCxNQUFNLENBQUN1TCxTQUFTO1FBQzdCLENBQUMsQ0FBQztRQUNGaEQsVUFBVSxDQUFDO1VBQUVwSixFQUFFLEVBQUVKLE1BQU0sQ0FBQ3dNLFNBQVMsQ0FBQztVQUFFbE4sSUFBSSxFQUFFcU47UUFBWSxDQUFDLENBQUM7TUFDMUQ7SUFDRixDQUFDLENBQUM7RUFDSixDQUFDLEVBQUUsQ0FBQ2pCLFFBQVEsRUFBRTNCLFlBQVksRUFBRTBCLGVBQWUsRUFBRXRCLGFBQWEsRUFBRUgsZUFBZSxFQUFFUixVQUFVLENBQUMsQ0FBQzs7RUFFekY7RUFDQXZNLFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBSXdNLE1BQU0sSUFBSWdDLGVBQWUsRUFBRTtJQUMvQixJQUFNeUIsaUJBQWlCLEdBQUd4QixRQUFRLENBQUN6TSxNQUFNLENBQUMsVUFBQXNOLEdBQUc7TUFBQSxPQUFJQSxHQUFHLENBQUNZLFFBQVEsSUFBSSxJQUFJLElBQUlaLEdBQUcsQ0FBQ1UsVUFBVTtJQUFBLEVBQUMsQ0FBQ1IsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9GLElBQUFXLEtBQUEsR0FBNkRGLGlCQUFpQixJQUFJLENBQUMsQ0FBQztNQUFsRUcsV0FBVyxHQUFBRCxLQUFBLENBQXJCRCxRQUFRO01BQTJCRyxhQUFhLEdBQUFGLEtBQUEsQ0FBekJILFVBQVU7SUFDekMsSUFBSUksV0FBVyxJQUFJLElBQUksSUFBSSxDQUFDQyxhQUFhLEVBQUU7SUFFM0M1RCxTQUFTLGFBQVRBLFNBQVMsZUFBVEEsU0FBUyxDQUFHO01BQUV0SixFQUFFLEVBQUVKLE1BQU0sQ0FBQ3FOLFdBQVcsQ0FBQztNQUFFL04sSUFBSSxFQUFFZ087SUFBYyxDQUFDLENBQUM7RUFDL0QsQ0FBQyxFQUFFLENBQUM1QixRQUFRLEVBQUVqQyxNQUFNLEVBQUVnQyxlQUFlLEVBQUUvQixTQUFTLENBQUMsQ0FBQztFQUVsRCxJQUFNNkQsaUJBQWlCLEdBQUd4USxXQUFXLENBQ25DLFVBQUN5USxZQUFxQixFQUFFQyxlQUF3QixFQUFLO0lBQUEsSUFBQUMscUJBQUEsRUFBQUMsc0JBQUE7SUFDbkQsSUFBTUMsYUFBYSxhQUFBcE8sTUFBQSxDQUFhK0ssZ0JBQWdCLENBQUMxRyxPQUFPLGVBQVk7SUFDcEV0RixjQUFjLENBQUM4TixLQUFLLENBQUMsQ0FBQztJQUN0QnRCLHlCQUF5QixDQUFDbEgsT0FBTyxHQUFHLElBQUk7SUFDeENtSCxxQkFBcUIsQ0FBQ25ILE9BQU8sR0FBRyxJQUFJO0lBQ3BDaUksYUFBYSxDQUFDOEIsYUFBYSxDQUFDO0lBRTVCLElBQU0vRyxPQUFPLEdBQ1gyRyxZQUFZLEtBQUssK0RBQStELEdBQzVFM0wsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLEdBQzNCMkwsWUFBWSxLQUFLLHVCQUF1QixJQUFJQyxlQUFlLGFBQWZBLGVBQWUsZUFBZkEsZUFBZSxDQUFFNU4sUUFBUSxDQUFDLG9CQUFvQixDQUFDLEdBQ3pGZ0MsQ0FBQyxDQUFDLHlCQUF5QixFQUFFO01BQUVnTSxJQUFJLEdBQUFILHFCQUFBLElBQUFDLHNCQUFBLEdBQUVGLGVBQWUsQ0FBQ3JLLEtBQUssQ0FBQyxjQUFjLENBQUMsY0FBQXVLLHNCQUFBLHVCQUFyQ0Esc0JBQUEsQ0FBd0MsQ0FBQyxDQUFDLGNBQUFELHFCQUFBLGNBQUFBLHFCQUFBLEdBQUk7SUFBRyxDQUFDLENBQUMsR0FDeEY3TCxDQUFDLENBQUMsWUFBWSxDQUFDO0lBRXZCZ0ssVUFBVSxDQUFDO01BQ1R6TCxFQUFFLFlBQUFaLE1BQUEsQ0FBWStLLGdCQUFnQixDQUFDMUcsT0FBTyxDQUFFO01BQ3hDZ0QsT0FBTyxFQUFQQSxPQUFPO01BQ1BpSCxPQUFPLEVBQUUsSUFBSTtNQUNiQyxJQUFJLEVBQUUsSUFBSUMsSUFBSSxDQUFDLENBQUM7TUFDaEJDLElBQUksRUFBRTtRQUFFN04sRUFBRSxFQUFFLFdBQVc7UUFBRWQsSUFBSSxFQUFFO01BQVksQ0FBQztNQUM1Q21CLElBQUksRUFBRTNDLGVBQWUsQ0FBQ29RO0lBQ3hCLENBQUMsQ0FBQztJQUNGckQsZUFBZSxDQUFDaEgsT0FBTyxHQUFHLEtBQUs7RUFDakMsQ0FBQyxFQUNELENBQUNnSSxVQUFVLEVBQUVDLGFBQWEsRUFBRWpLLENBQUMsQ0FDL0IsQ0FBQztFQUVELElBQU1zTSxrQkFBa0IsR0FBR3BSLFdBQVcsQ0FDcEMsVUFBQzRKLE9BQWUsRUFBRU0sT0FBWSxFQUFFQyxlQUF1QixFQUFLO0lBQzFEO0lBQ0E7SUFDQSxJQUFJOEQscUJBQXFCLENBQUNuSCxPQUFPLElBQUksSUFBSSxJQUFJbUgscUJBQXFCLENBQUNuSCxPQUFPLEtBQUs0RyxhQUFhLENBQUM1RyxPQUFPLEVBQUU7TUFDcEc7SUFDRjtJQUVBLElBQU0rSixhQUFhLGFBQUFwTyxNQUFBLENBQWErSyxnQkFBZ0IsQ0FBQzFHLE9BQU8sZUFBWTs7SUFFcEU7SUFDQTtJQUNBO0lBQ0E7SUFDQSxJQUFJa0gseUJBQXlCLENBQUNsSCxPQUFPLEtBQUsrSixhQUFhLEVBQUU7TUFDdkQ3Qyx5QkFBeUIsQ0FBQ2xILE9BQU8sR0FBRytKLGFBQWE7TUFDakQ1QyxxQkFBcUIsQ0FBQ25ILE9BQU8sR0FBRzRHLGFBQWEsQ0FBQzVHLE9BQU87TUFDckR0RixjQUFjLENBQUM2UCxLQUFLLENBQUNSLGFBQWEsQ0FBQztNQUNuQy9CLFVBQVUsQ0FBQztRQUNUekwsRUFBRSxFQUFFd04sYUFBYTtRQUNqQi9HLE9BQU8sRUFBRSxFQUFFO1FBQ1hrSCxJQUFJLEVBQUUsSUFBSUMsSUFBSSxDQUFDLENBQUM7UUFDaEJDLElBQUksRUFBRTtVQUFFN04sRUFBRSxFQUFFLFdBQVc7VUFBRWQsSUFBSSxFQUFFO1FBQVksQ0FBQztRQUM1Q21CLElBQUksRUFBRTNDLGVBQWUsQ0FBQ29RLFNBQVM7UUFDL0JqSCxPQUFPLEVBQVBBLE9BQU87UUFDUEMsZUFBZSxFQUFmQTtNQUNGLENBQUMsQ0FBQztJQUNKO0lBRUEzSSxjQUFjLENBQUM4UCxPQUFPLENBQUNULGFBQWEsRUFBRWpILE9BQU8sQ0FBQztFQUNoRCxDQUFDLEVBQ0QsQ0FBQ2tGLFVBQVUsQ0FDYixDQUFDO0VBRUQsSUFBTXlDLGtCQUFrQixHQUFHdlIsV0FBVztJQUFBLElBQUF3UixLQUFBLEdBQUF0SixpQkFBQSxjQUFBQyxtQkFBQSxDQUFBQyxJQUFBLENBQ3BDLFNBQUFxSixTQUNFN0gsT0FBZSxFQUNmTSxPQUFZLEVBQ1pDLGVBQXVCLEVBQ3ZCbEksY0FBNkIsRUFDN0JvSSxXQUE2QixFQUM3QkcsZ0JBQWdDO01BQUEsSUFBQWtILHFCQUFBLEVBQUFDLGlCQUFBLEVBQUFDLG9CQUFBLEVBQUFDLGtCQUFBO01BQUEsSUFBQWhCLGFBQUEsRUFBQS9PLFdBQUEsRUFBQWdRLFlBQUEsRUFBQUMsT0FBQSxFQUFBQyxZQUFBLEVBQUFDLGVBQUEsRUFBQUMsNEJBQUEsRUFBQUMsbUJBQUEsRUFBQUMsZUFBQSxFQUFBQyxpQkFBQSxFQUFBek8sY0FBQSxFQUFBME8sZUFBQSxFQUFBQyxXQUFBLEVBQUFDLGFBQUEsRUFBQUMsc0JBQUEsRUFBQUMsK0JBQUEsRUFBQUMsbUJBQUEsRUFBQUMsaUJBQUEsRUFBQUMsb0JBQUEsRUFBQUMsaUJBQUEsRUFBQUMsVUFBQSxFQUFBQyxRQUFBLEVBQUFDLGVBQUEsRUFBQUMsZUFBQSxFQUFBQyx5QkFBQSxFQUFBQyx1QkFBQSxFQUFBQyxtQkFBQSxFQUFBQyxtQkFBQSxFQUFBQyxPQUFBLEVBQUFDLEdBQUEsRUFBQUMsVUFBQSxFQUFBQyxrQkFBQSxFQUFBQyxtQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxTQUFBLEVBQUFDLGNBQUEsRUFBQUMsZ0JBQUEsRUFBQUMscUJBQUEsRUFBQUMsc0JBQUEsRUFBQUMsc0JBQUEsRUFBQUMsc0JBQUEsRUFBQUMsc0JBQUEsRUFBQUMsc0JBQUEsRUFBQUMsZUFBQSxFQUFBQyxjQUFBLEVBQUFDLGlCQUFBLEVBQUFDLG1CQUFBLEVBQUFDLHFCQUFBLEVBQUFDLGtCQUFBLEVBQUFDLGVBQUEsRUFBQUMsa0JBQUEsRUFBQUMscUJBQUEsRUFBQTdGLFdBQUE7TUFBQSxPQUFBOUcsbUJBQUEsQ0FBQWtCLElBQUEsV0FBQTBMLFNBQUE7UUFBQSxrQkFBQUEsU0FBQSxDQUFBeEwsSUFBQSxHQUFBd0wsU0FBQSxDQUFBdkwsSUFBQTtVQUFBO1lBRTFCcUgsYUFBYSxhQUFBcE8sTUFBQSxDQUFhK0ssZ0JBQWdCLENBQUMxRyxPQUFPO1lBQ3hEdEYsY0FBYyxDQUFDOE4sS0FBSyxDQUFDLENBQUM7WUFDdEJ0Qix5QkFBeUIsQ0FBQ2xILE9BQU8sR0FBRyxJQUFJO1lBQ3hDbUgscUJBQXFCLENBQUNuSCxPQUFPLEdBQUcsSUFBSTtZQUNwQ2lJLGFBQWEsQ0FBQzhCLGFBQWEsQ0FBQztZQUN0Qi9PLFdBQVcsR0FBR0UsNkJBQTZCLENBQUNDLGNBQWMsQ0FBQyxFQUVqRTtZQUNNNlAsWUFBWSxHQUFHLElBQUlrRCxNQUFNLENBQUM1VCxzQkFBc0IsRUFBRSxHQUFHLENBQUM7WUFDdEQyUSxPQUFPLEdBQUFrRCxrQkFBQSxDQUFPckwsT0FBTyxDQUFDc0wsUUFBUSxDQUFDcEQsWUFBWSxDQUFDO1lBRTlDRSxZQUFZLEdBQUdwSSxPQUFPO1lBQ3BCcUksZUFBZSxHQUFHckUsV0FBVyxDQUFDOUcsT0FBTyxDQUFDNUUsTUFBTSxDQUFDLFVBQUFpVCxDQUFDO2NBQUEsT0FBSUEsQ0FBQyxDQUFDOVIsRUFBRSxLQUFLd04sYUFBYTtZQUFBLEVBQUMsQ0FBQ25CLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoRndDLDRCQUE0QixHQUFHLENBQUFELGVBQWUsYUFBZkEsZUFBZSx1QkFBZkEsZUFBZSxDQUFFbUQsUUFBUSxLQUFJLElBQUk7WUFDaEVqRCxtQkFBbUIsR0FBRyxDQUFDLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxZQUFZLENBQUM7WUFDekVDLGVBQWUsR0FBRyxDQUN0QixXQUFXLEVBQ1gsa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixlQUFlLEVBQ2Ysa0JBQWtCLEVBQ2xCLHdCQUF3QixFQUN4QixtQkFBbUIsQ0FDcEI7WUFDS0MsaUJBQWlCLEdBQUcsQ0FBQyxhQUFhLEVBQUUsb0JBQW9CLENBQUM7WUFDekR6TyxjQUFjLEdBQUcsQ0FBQXFPLGVBQWUsYUFBZkEsZUFBZSxnQkFBQVAscUJBQUEsR0FBZk8sZUFBZSxDQUFFbUQsUUFBUSxjQUFBMUQscUJBQUEsdUJBQXpCQSxxQkFBQSxDQUEyQjJELGVBQWUsS0FBSSxFQUFFO1lBQ2pFL0MsZUFBZSxHQUNuQkosNEJBQTRCLElBQzVCdE8sY0FBYyxDQUFDMFIsSUFBSSxDQUFDLFVBQUNoUixNQUFXO2NBQUEsT0FBSzZOLG1CQUFtQixDQUFDclAsUUFBUSxDQUFDd0IsTUFBTSxDQUFDWSxTQUFTLENBQUM7WUFBQSxFQUFDO1lBQ2hGcU4sV0FBVyxHQUNmTCw0QkFBNEIsSUFBSXRPLGNBQWMsQ0FBQzBSLElBQUksQ0FBQyxVQUFDaFIsTUFBVztjQUFBLE9BQUs4TixlQUFlLENBQUN0UCxRQUFRLENBQUN3QixNQUFNLENBQUNZLFNBQVMsQ0FBQztZQUFBLEVBQUM7WUFDNUdzTixhQUFhLEdBQ2pCTiw0QkFBNEIsSUFDNUJ0TyxjQUFjLENBQUMwUixJQUFJLENBQUMsVUFBQ2hSLE1BQVc7Y0FBQSxPQUFLK04saUJBQWlCLENBQUN2UCxRQUFRLENBQUN3QixNQUFNLENBQUNZLFNBQVMsQ0FBQztZQUFBLEVBQUM7WUFDOUV1TixzQkFBc0IsR0FDMUJQLDRCQUE0QixJQUM1QixDQUFBRCxlQUFlLGFBQWZBLGVBQWUsdUJBQWZBLGVBQWUsQ0FBRXNELGNBQWMsTUFBSyxVQUFVLElBQzlDM1IsY0FBYyxDQUFDMFIsSUFBSSxDQUFDLFVBQUNoUixNQUFXO2NBQUEsT0FBS0EsTUFBTSxDQUFDWSxTQUFTLEtBQUssY0FBYztZQUFBLEVBQUM7WUFDckV3TiwrQkFBK0IsR0FDbkNSLDRCQUE0QixJQUM1QixDQUFBRCxlQUFlLGFBQWZBLGVBQWUsdUJBQWZBLGVBQWUsQ0FBRXNELGNBQWMsTUFBSyxVQUFVLElBQzlDM1IsY0FBYyxDQUFDMFIsSUFBSSxDQUFDLFVBQUNoUixNQUFXO2NBQUEsT0FBSyxDQUFDQSxNQUFNLENBQUNZLFNBQVMsSUFBSSxFQUFFLEVBQUVTLFdBQVcsQ0FBQyxDQUFDLEtBQUssd0JBQXdCO1lBQUEsRUFBQztZQUUzRyxJQUFJOE0sc0JBQXNCLElBQUkrQyxNQUFNLENBQUNDLHdDQUF3QyxJQUFJakwsZ0JBQWdCLGFBQWhCQSxnQkFBZ0IsZUFBaEJBLGdCQUFnQixDQUFFaEksSUFBSSxDQUFDLENBQUMsRUFBRTtjQUN6R21RLG1CQUFtQixHQUFHO2dCQUFFOU0sT0FBTyxFQUFFMkUsZ0JBQWdCLENBQUNoSSxJQUFJLENBQUM7Y0FBRSxDQUFDO1lBQzVELENBQUMsTUFBTSxJQUNMa1EsK0JBQStCLElBQy9COEMsTUFBTSxDQUFDQyx3Q0FBd0MsS0FDOUNqTCxnQkFBZ0IsYUFBaEJBLGdCQUFnQixlQUFoQkEsZ0JBQWdCLENBQUVoSSxJQUFJLENBQUMsQ0FBQyxJQUN2QnNELDBDQUEwQyxDQUFDbEMsY0FBYyxFQUFFLHdCQUF3QixDQUFDLENBQUMsRUFDdkY7Y0FDTWdQLGlCQUFpQixHQUNyQixDQUFBcEksZ0JBQWdCLGFBQWhCQSxnQkFBZ0IsdUJBQWhCQSxnQkFBZ0IsQ0FBRWhJLElBQUksQ0FBQyxDQUFDLEtBQ3hCc0QsMENBQTBDLENBQUNsQyxjQUFjLEVBQUUsd0JBQXdCLENBQUM7Y0FDdEYrTyxtQkFBbUIsR0FBRztnQkFDcEI5TSxPQUFPLEVBQUUrTTtjQUNYLENBQUM7WUFDSDtZQUVBLElBQUlILHNCQUFzQixFQUFFO2NBQzFCdkYsS0FBSyxDQUFDdk0sTUFBTSxDQUFDK1UsZ0JBQWdCLEVBQUFDLGFBQUE7Z0JBQzNCQyxVQUFVLEVBQUVyVSx5QkFBeUIsQ0FBQ3NMLEtBQUssQ0FBQztnQkFDNUNnSixXQUFXLEVBQUV2VSx1QkFBdUIsQ0FBQ3NDLGNBQWMsQ0FBQztnQkFDcERrUyxRQUFRLEVBQUUsUUFBUTtnQkFDbEJDLE1BQU0sRUFBRTtjQUFjLEdBQ2xCdkwsZ0JBQWdCLGFBQWhCQSxnQkFBZ0IsZUFBaEJBLGdCQUFnQixDQUFFaEksSUFBSSxDQUFDLENBQUMsR0FBRztnQkFBRXdULGdCQUFnQixFQUFFeEwsZ0JBQWdCLENBQUNoSSxJQUFJLENBQUM7Y0FBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQ2xGLENBQUM7WUFDSjtZQUVNcVEsb0JBQW9CLEdBQ3hCWCw0QkFBNEIsSUFDNUIsQ0FBQUQsZUFBZSxhQUFmQSxlQUFlLHVCQUFmQSxlQUFlLENBQUVzRCxjQUFjLE1BQUssVUFBVSxJQUM5QzNSLGNBQWMsQ0FBQzBSLElBQUksQ0FBQyxVQUFDaFIsTUFBVztjQUFBLE9BQUssQ0FBQ0EsTUFBTSxDQUFDWSxTQUFTLElBQUksRUFBRSxFQUFFUyxXQUFXLENBQUMsQ0FBQyxLQUFLLFlBQVk7WUFBQSxFQUFDO1lBRy9GLElBQUlrTixvQkFBb0IsRUFBRTtjQUNsQkUsVUFBVSxHQUFHdkksZ0JBQWdCLGFBQWhCQSxnQkFBZ0IsdUJBQWhCQSxnQkFBZ0IsQ0FBRWhJLElBQUksQ0FBQyxDQUFDO2NBQ3JDd1EsUUFBUSxHQUFHMU4seUNBQXlDLENBQUMxQixjQUFjLENBQUM7Y0FDcEVxUCxlQUFlLEdBQUdGLFVBQVUsSUFBSUMsUUFBUTtjQUM5QyxJQUFJQyxlQUFlLEVBQUU7Z0JBQ25CSCxpQkFBaUIsR0FBRztrQkFBRWpOLE9BQU8sRUFBRW9OO2dCQUFnQixDQUFDO2NBQ2xEO1lBQ0Y7WUFFTUMsZUFBZSxHQUFHbkIsT0FBTyxDQUFDMVAsR0FBRyxDQUFDLFVBQUFnRSxLQUFLO2NBQUEsT0FBSXBDLFFBQVEsQ0FBQ29DLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7WUFBQSxFQUFDO1lBQzlEOE0seUJBQXlCLEdBQUdsTyxzQ0FBc0MsQ0FBQ3JCLGNBQWMsQ0FBQztZQUNsRndQLHVCQUF1QixHQUMzQlosYUFBYSxJQUFJVSxlQUFlLENBQUMxSCxNQUFNLEtBQUssQ0FBQyxJQUFJMkgseUJBQXlCLENBQUMzSCxNQUFNLEtBQUssQ0FBQyxHQUNuRnRGLHVDQUF1QyxDQUFDMEQsT0FBTyxDQUFDLEdBQ2hELEVBQUU7WUFDRnlKLG1CQUFtQixHQUN2QkgsZUFBZSxDQUFDMUgsTUFBTSxHQUFHLENBQUMsR0FDdEIwSCxlQUFlLEdBQ2ZDLHlCQUF5QixDQUFDM0gsTUFBTSxHQUFHLENBQUMsR0FDbEMySCx5QkFBeUIsR0FDekJDLHVCQUF1QjtZQUV6QkUsbUJBQW1CLEdBQ3ZCcEIsNEJBQTRCLEtBQzNCSSxlQUFlLElBQUlDLFdBQVcsSUFBSUMsYUFBYSxDQUFDLElBQ2pEYSxtQkFBbUIsQ0FBQzdILE1BQU0sR0FBRyxDQUFDO1lBQUEsS0FFNUI4SCxtQkFBbUI7Y0FBQXlCLFNBQUEsQ0FBQXZMLElBQUE7Y0FBQTtZQUFBO1lBQ2YrSixPQUFPLEdBQUdGLG1CQUFtQjtZQUFBLE1BQy9CdEIsT0FBTyxDQUFDdkcsTUFBTSxHQUFHLENBQUM7Y0FBQXVKLFNBQUEsQ0FBQXZMLElBQUE7Y0FBQTtZQUFBO1lBQUF1TCxTQUFBLENBQUF2TCxJQUFBO1lBQUEsT0FDRitELGlCQUFpQixDQUFDZ0csT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQUE7WUFBekNDLEdBQUcsR0FBQXVCLFNBQUEsQ0FBQTVKLElBQUE7WUFDSHNJLFVBQVUsR0FBR0QsR0FBRyxPQUFBL1EsTUFBQSxDQUFPK1EsR0FBRyxJQUFLLFNBQVM7WUFDOUN4QixZQUFZLEdBQUdwSSxPQUFPLENBQUNwQyxPQUFPLENBQUNzSyxZQUFZLEVBQUUsVUFBQW1FLEdBQUc7Y0FBQSxPQUM5Q0EsR0FBRyxDQUFDek8sT0FBTyxDQUFDLHlEQUF5RCxFQUFFaU0sVUFBVSxDQUFDO1lBQUEsQ0FDcEYsQ0FBQztVQUFBO1lBR0dDLGtCQUFrQixHQUFHOUYsV0FBVyxDQUFDOUcsT0FBTyxDQUFDNUUsTUFBTSxDQUFDLFVBQUFzTixHQUFHO2NBQUEsT0FBSUEsR0FBRyxDQUFDQyxTQUFTO1lBQUEsRUFBQyxDQUFDQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUVpRSxtQkFBbUIsR0FBRyxDQUFBbkgsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUVuSixFQUFFLE1BQUlxUSxrQkFBa0IsYUFBbEJBLGtCQUFrQix1QkFBbEJBLGtCQUFrQixDQUFFakUsU0FBUztZQUNsRW1FLGdCQUFnQixHQUFHRCxtQkFBbUIsR0FBRzFQLFFBQVEsQ0FBQ0MsTUFBTSxDQUFDeVAsbUJBQW1CLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJO1lBQ3pGRSxTQUFTLEdBQUcyQixNQUFNLENBQUNVLFFBQVEsQ0FBQ0MsUUFBUSxDQUFDOVAsS0FBSyxDQUFDLHNCQUFzQixDQUFDO1lBQ2xFeU4sY0FBYyxHQUFHRCxTQUFTLEdBQUc1UCxRQUFRLENBQUM0UCxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSTtZQUM5REUsZ0JBQWdCLEdBQUdILGdCQUFnQixJQUFJRSxjQUFjLElBQUlGLGdCQUFnQixLQUFLRSxjQUFjO1lBRWxHLElBQUlDLGdCQUFnQixFQUFFO2NBQ3BCLElBQUl6QixlQUFlLEVBQUU7Z0JBQ25CLENBQUEwQixxQkFBQSxHQUFBd0IsTUFBTSxDQUFDWSxtQkFBbUIsY0FBQXBDLHFCQUFBLGdCQUFBQyxzQkFBQSxHQUExQkQscUJBQUEsQ0FBNEJxQywwQkFBMEIsY0FBQXBDLHNCQUFBLGVBQXREQSxzQkFBQSxDQUFBckosSUFBQSxDQUFBb0oscUJBQUEsRUFBeURULE9BQU8sQ0FBQztjQUNuRSxDQUFDLE1BQU0sSUFBSWhCLFdBQVcsRUFBRTtnQkFDdEIsQ0FBQTJCLHNCQUFBLEdBQUFzQixNQUFNLENBQUNZLG1CQUFtQixjQUFBbEMsc0JBQUEsZ0JBQUFDLHNCQUFBLEdBQTFCRCxzQkFBQSxDQUE0Qm9DLDJCQUEyQixjQUFBbkMsc0JBQUEsZUFBdkRBLHNCQUFBLENBQUF2SixJQUFBLENBQUFzSixzQkFBQSxFQUEwRFgsT0FBTyxDQUFDO2NBQ3BFLENBQUMsTUFBTSxJQUFJZixhQUFhLEVBQUU7Z0JBQ3hCLENBQUE0QixzQkFBQSxHQUFBb0IsTUFBTSxDQUFDWSxtQkFBbUIsY0FBQWhDLHNCQUFBLGdCQUFBQyxzQkFBQSxHQUExQkQsc0JBQUEsQ0FBNEJtQywrQkFBK0IsY0FBQWxDLHNCQUFBLGVBQTNEQSxzQkFBQSxDQUFBekosSUFBQSxDQUFBd0osc0JBQUEsRUFBOERiLE9BQU8sQ0FBQztjQUN4RTtZQUNGO1VBQUM7WUFHSDtZQUNBO1lBQ0E7WUFDQTtZQUNNZSxlQUFlLElBQUEzQyxpQkFBQSxHQUFHNkQsTUFBTSxDQUFDZ0IsU0FBUyxjQUFBN0UsaUJBQUEsdUJBQWhCQSxpQkFBQSxDQUFrQjhFLE1BQU07WUFDMUNsQyxjQUFjLEdBQUcxRyxxQkFBcUIsQ0FBQy9HLE9BQU87WUFDcEQrRyxxQkFBcUIsQ0FBQy9HLE9BQU8sR0FBRyxJQUFJLEVBQUM7WUFDL0IwTixpQkFBaUIsR0FBRyxDQUFDLENBQUNELGNBQWMsSUFBSW5DLGVBQWUsQ0FBQ3RQLFFBQVEsQ0FBQ3lSLGNBQWMsQ0FBQ3hPLFFBQVEsQ0FBQztZQUN6RjBPLG1CQUFtQixHQUFHLENBQUMsQ0FBQ0YsY0FBYyxJQUFJbEMsaUJBQWlCLENBQUN2UCxRQUFRLENBQUN5UixjQUFjLENBQUN4TyxRQUFRLENBQUM7WUFFbkcsSUFBSXVPLGVBQWUsS0FBSy9CLFdBQVcsSUFBSUMsYUFBYSxJQUFJZ0MsaUJBQWlCLElBQUlDLG1CQUFtQixDQUFDLEVBQUU7Y0FDM0ZFLGtCQUF3QyxHQUFHSixjQUFjLEdBQzFEO2dCQUFFclAsU0FBUyxFQUFFcVAsY0FBYyxDQUFDeE8sUUFBUTtnQkFBRXRCLFNBQVMsR0FBQWlRLHFCQUFBLEdBQUVILGNBQWMsQ0FBQ21DLFFBQVEsY0FBQWhDLHFCQUFBLGNBQUFBLHFCQUFBLEdBQUksQ0FBQztjQUFFLENBQUMsR0FDakYsSUFBSTtjQUNGRSxlQUFlLEdBQUcsR0FBQW5TLE1BQUEsQ0FBQXdTLGtCQUFBLENBQ25CdFIsb0NBQW9DLENBQUNDLGNBQWMsQ0FBQyxHQUFBcVIsa0JBQUEsQ0FDcEQvQixlQUFlLEdBQUErQixrQkFBQSxDQUNmOUIseUJBQXlCLEdBQUE4QixrQkFBQSxDQUN4Qk4sa0JBQWtCLEdBQUdoUixvQ0FBb0MsQ0FBQyxDQUFDZ1Isa0JBQWtCLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FDeEZ0UyxHQUFHLENBQUM2QixNQUFNLENBQUM7Y0FDYixJQUFJMFEsZUFBZSxDQUFDOVIsUUFBUSxDQUFDb0IsTUFBTSxDQUFDb1EsZUFBZSxDQUFDLENBQUMsRUFBRTtnQkFDckQsQ0FBQU8sa0JBQUEsR0FBQVcsTUFBTSxDQUFDZ0IsU0FBUyxjQUFBM0Isa0JBQUEsZ0JBQUFDLHFCQUFBLEdBQWhCRCxrQkFBQSxDQUFrQjhCLFdBQVcsY0FBQTdCLHFCQUFBLGVBQTdCQSxxQkFBQSxDQUFBbEssSUFBQSxDQUFBaUssa0JBQWdDLENBQUM7Y0FDbkM7WUFDRjtZQUVBL0YsVUFBVSxDQUFBNkcsYUFBQSxDQUFBQSxhQUFBO2NBQ1J0UyxFQUFFLFlBQUFaLE1BQUEsQ0FBWTBILGVBQWUsQ0FBRTtjQUMvQkwsT0FBTyxFQUFFa0ksWUFBWTtjQUNyQmhCLElBQUksRUFBRSxJQUFJQyxJQUFJLENBQUMsQ0FBQztjQUNoQkMsSUFBSSxFQUFFO2dCQUFFN04sRUFBRSxFQUFFLFdBQVc7Z0JBQUVkLElBQUksRUFBRTtjQUFZLENBQUM7Y0FDNUNtQixJQUFJLEVBQUUzQyxlQUFlLENBQUNvUSxTQUFTO2NBQy9CakgsT0FBTyxFQUFQQTtZQUFPLEdBQ0hwSSxXQUFXLENBQUMwSixNQUFNLEdBQUcsQ0FBQyxHQUFHO2NBQUUxSixXQUFXLEVBQVhBO1lBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztjQUNqRHFJLGVBQWUsRUFBZkEsZUFBZTtjQUNmRSxXQUFXLEVBQUVBLFdBQVcsSUFBSTtZQUFFLEdBQzFCc0ksbUJBQW1CLEdBQUc7Y0FBRUEsbUJBQW1CLEVBQW5CQTtZQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQ3ZELENBQUM7WUFFRixLQUFBZixvQkFBQSxHQUFJZSxtQkFBbUIsY0FBQWYsb0JBQUEsZUFBbkJBLG9CQUFBLENBQXFCL0wsT0FBTyxFQUFFO2NBQ2hDeEUsZ0JBQWdCLENBQUNzUixtQkFBbUIsQ0FBQzlNLE9BQU8sQ0FBQyxDQUMxQ2dLLElBQUksQ0FBQyxVQUFBK0csU0FBUyxFQUFJO2dCQUNqQnhILFFBQVEsQ0FBQ0MsYUFBYSxDQUNwQixJQUFJSCxXQUFXLENBQUMsb0NBQW9DLEVBQUU7a0JBQ3BEQyxNQUFNLEVBQUU7b0JBQUV0QyxLQUFLLEVBQUUrSjtrQkFBVTtnQkFDN0IsQ0FBQyxDQUNILENBQUM7Y0FDSCxDQUFDLENBQUMsU0FDSSxDQUFDLFVBQUFDLEdBQUcsRUFBSTtnQkFDWi9PLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDLHVFQUF1RSxFQUFFOE8sR0FBRyxDQUFDO2NBQzdGLENBQUMsQ0FBQztZQUNOO1lBRUEsS0FBQWhGLGtCQUFBLEdBQUlpQixpQkFBaUIsY0FBQWpCLGtCQUFBLGVBQWpCQSxrQkFBQSxDQUFtQmhNLE9BQU8sRUFBRTtjQUM5QnhFLGdCQUFnQixDQUFDeVIsaUJBQWlCLENBQUNqTixPQUFPLENBQUMsQ0FDeENnSyxJQUFJLENBQUMsVUFBQStHLFNBQVMsRUFBSTtnQkFDakJ4SCxRQUFRLENBQUNDLGFBQWEsQ0FDcEIsSUFBSUgsV0FBVyxDQUFDLGtDQUFrQyxFQUFFO2tCQUNsREMsTUFBTSxFQUFFO29CQUFFdEMsS0FBSyxFQUFFK0o7a0JBQVU7Z0JBQzdCLENBQUMsQ0FDSCxDQUFDO2NBQ0gsQ0FBQyxDQUFDLFNBQ0ksQ0FBQyxVQUFBQyxHQUFHLEVBQUk7Z0JBQ1ovTyxPQUFPLENBQUNDLEtBQUssQ0FBQyx5REFBeUQsRUFBRThPLEdBQUcsQ0FBQztjQUMvRSxDQUFDLENBQUM7WUFDTjtZQUVBL0ksZUFBZSxDQUFDaEgsT0FBTyxHQUFHLEtBQUs7WUFDL0IsSUFBSWlILFlBQVksQ0FBQ2pILE9BQU8sRUFBRTtjQUNsQm1JLFdBQVcsR0FBRyxJQUFJQyxXQUFXLENBQUMsaUJBQWlCLENBQUM7Y0FDdERFLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDSixXQUFXLENBQUM7Y0FDbkNsQixZQUFZLENBQUNqSCxPQUFPLEdBQUcsS0FBSztZQUM5QjtVQUFDO1VBQUE7WUFBQSxPQUFBaU8sU0FBQSxDQUFBdEosSUFBQTtRQUFBO01BQUEsR0FBQWdHLFFBQUE7SUFBQSxDQUNGO0lBQUEsaUJBQUFxRixHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQTtNQUFBLE9BQUEzRixLQUFBLENBQUEzRixLQUFBLE9BQUFDLFNBQUE7SUFBQTtFQUFBLEtBQ0QsQ0FBQ2dELFVBQVUsRUFBRUMsYUFBYSxFQUFFdkMsT0FBTyxFQUFFZSxpQkFBaUIsRUFBRUwsS0FBSyxFQUFFTCxLQUFLLENBQ3RFLENBQUM7RUFFRCxJQUFNdUssZ0JBQWdCLEdBQUdwWCxXQUFXLENBQUMsWUFBTTtJQUN6QyxJQUFNNlEsYUFBYSxhQUFBcE8sTUFBQSxDQUFhK0ssZ0JBQWdCLENBQUMxRyxPQUFPLGVBQVk7SUFDcEV0RixjQUFjLENBQUM4TixLQUFLLENBQUMsQ0FBQztJQUN0QnRCLHlCQUF5QixDQUFDbEgsT0FBTyxHQUFHLElBQUk7SUFDeENtSCxxQkFBcUIsQ0FBQ25ILE9BQU8sR0FBRyxJQUFJO0lBQ3BDaUksYUFBYSxDQUFDOEIsYUFBYSxDQUFDO0lBRTVCL0IsVUFBVSxDQUFDO01BQ1R6TCxFQUFFLFlBQUFaLE1BQUEsQ0FBWStLLGdCQUFnQixDQUFDMUcsT0FBTyxlQUFZO01BQ2xEZ0QsT0FBTyxFQUFFaEYsQ0FBQyxDQUFDLGdCQUFnQixDQUFDO01BQzVCa00sSUFBSSxFQUFFLElBQUlDLElBQUksQ0FBQyxDQUFDO01BQ2hCQyxJQUFJLEVBQUU7UUFBRTdOLEVBQUUsRUFBRSxXQUFXO1FBQUVkLElBQUksRUFBRTtNQUFZLENBQUM7TUFDNUNtQixJQUFJLEVBQUUzQyxlQUFlLENBQUNvUSxTQUFTO01BQy9Ca0csbUJBQW1CLEVBQUU7SUFDdkIsQ0FBQyxDQUFDO0lBQ0Z2SixlQUFlLENBQUNoSCxPQUFPLEdBQUcsS0FBSztJQUMvQndRLFVBQVUsQ0FBQyxZQUFNO01BQ2YsSUFBTXJJLFdBQVcsR0FBRyxJQUFJQyxXQUFXLENBQUMsaUJBQWlCLENBQUM7TUFDdERFLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDSixXQUFXLENBQUM7SUFDckMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztFQUNULENBQUMsRUFBRSxDQUFDSCxVQUFVLEVBQUVDLGFBQWEsRUFBRWpLLENBQUMsQ0FBQyxDQUFDO0VBRWxDLElBQU15UyxzQkFBc0IsR0FBR3ZYLFdBQVcsQ0FDeEMsVUFBQ29WLFFBQXlCLEVBQUV2TSxrQkFBMEIsRUFBSztJQUN6RCxJQUFNZ0ksYUFBYSxhQUFBcE8sTUFBQSxDQUFhK0ssZ0JBQWdCLENBQUMxRyxPQUFPLGVBQVk7SUFDcEV0RixjQUFjLENBQUM4TixLQUFLLENBQUMsQ0FBQztJQUN0QnRCLHlCQUF5QixDQUFDbEgsT0FBTyxHQUFHLElBQUk7SUFDeENtSCxxQkFBcUIsQ0FBQ25ILE9BQU8sR0FBRyxJQUFJO0lBQ3BDaUksYUFBYSxDQUFDOEIsYUFBYSxDQUFDO0lBRTVCLElBQUl1RSxRQUFRLENBQUNvQyx3QkFBd0IsRUFBRTtNQUFBLElBQUFDLHFCQUFBLEVBQUFDLEtBQUEsRUFBQUMsVUFBQSxFQUFBQyxVQUFBO01BQ3JDO01BQ0E7TUFDQSxJQUFNQyxXQUFXLElBQUFKLHFCQUFBLEdBQUdyQyxRQUFRLENBQUNDLGVBQWUsY0FBQW9DLHFCQUFBLHVCQUF4QkEscUJBQUEsQ0FBMkIsQ0FBQyxDQUFDO01BQ2pELElBQU0xUixRQUFRLElBQUEyUixLQUFBLElBQUFDLFVBQUEsR0FBSXZDLFFBQVEsQ0FBNEJsUSxTQUFTLGNBQUF5UyxVQUFBLGNBQUFBLFVBQUEsR0FBSUUsV0FBVyxhQUFYQSxXQUFXLHVCQUFYQSxXQUFXLENBQUUzUyxTQUFTLGNBQUF3UyxLQUFBLGNBQUFBLEtBQUEsR0FBSSxFQUFFO01BQy9GLElBQU1oQixRQUFRLEdBQ1osRUFBQWtCLFVBQUEsR0FBRXhDLFFBQVEsQ0FBNkMzUSxTQUFTLGNBQUFtVCxVQUFBLGNBQUFBLFVBQUEsR0FDN0RDLFdBQVcsYUFBWEEsV0FBVyx1QkFBWEEsV0FBVyxDQUFFcFQsU0FBUyxLQUN6QixJQUFJO01BQ04sSUFBSXNCLFFBQVEsRUFBRTtRQUNaOEgscUJBQXFCLENBQUMvRyxPQUFPLEdBQUc7VUFBRWYsUUFBUSxFQUFSQSxRQUFRO1VBQUUyUSxRQUFRLEVBQVJBO1FBQVMsQ0FBQztNQUN4RDtNQUNBNUksZUFBZSxDQUFDaEgsT0FBTyxHQUFHLEtBQUs7TUFDL0I7SUFDRjs7SUFFQTtJQUNBZ0ksVUFBVSxDQUFDO01BQ1R6TCxFQUFFLGNBQUFaLE1BQUEsQ0FBYzJTLFFBQVEsQ0FBQzBDLGtCQUFrQixDQUFFO01BQzdDaE8sT0FBTyxFQUFFakIsa0JBQWtCLElBQUksRUFBRTtNQUNqQ21JLElBQUksRUFBRSxJQUFJQyxJQUFJLENBQUMsQ0FBQztNQUNoQkMsSUFBSSxFQUFFO1FBQUU3TixFQUFFLEVBQUUsV0FBVztRQUFFZCxJQUFJLEVBQUU7TUFBWSxDQUFDO01BQzVDbUIsSUFBSSxFQUFFM0MsZUFBZSxDQUFDb1EsU0FBUztNQUMvQmlFLFFBQVEsRUFBUkEsUUFBUTtNQUNSRyxjQUFjLEVBQUU7SUFDbEIsQ0FBQyxDQUFDO0lBQ0Z6SCxlQUFlLENBQUNoSCxPQUFPLEdBQUcsS0FBSztFQUNqQyxDQUFDLEVBQ0QsQ0FBQ2dJLFVBQVUsRUFBRUMsYUFBYSxDQUM1QixDQUFDO0VBRUQsSUFBQWdKLHFCQUFBLEdBT0l4WCxxQkFBcUIsQ0FBQztNQUN4QnNLLE9BQU8sRUFBRTJGLGlCQUFpQjtNQUMxQndILGNBQWMsRUFBRTVHLGtCQUFrQjtNQUNsQzZHLGNBQWMsRUFBRTFHLGtCQUFrQjtNQUNsQzJHLE1BQU0sRUFBRWQsZ0JBQWdCO01BQ3hCek0sa0JBQWtCLEVBQUU0TTtJQUN0QixDQUFDLENBQUM7SUFaQVksT0FBTyxHQUFBSixxQkFBQSxDQUFQSSxPQUFPO0lBQ0lDLGVBQWUsR0FBQUwscUJBQUEsQ0FBMUJNLFNBQVM7SUFDVEMsU0FBUyxHQUFBUCxxQkFBQSxDQUFUTyxTQUFTO0lBQ1RDLGNBQWMsR0FBQVIscUJBQUEsQ0FBZFEsY0FBYztJQUNkQyxhQUFhLEdBQUFULHFCQUFBLENBQWJTLGFBQWE7SUFDYkMsbUJBQW1CLEdBQUFWLHFCQUFBLENBQW5CVSxtQkFBbUI7O0VBU3JCO0VBQ0E7RUFDQXZLLHNCQUFzQixDQUFDcEgsT0FBTyxHQUFHMlIsbUJBQW1CO0VBRXBELElBQU1DLGNBQWMsR0FBR2xNLE9BQU87RUFFOUIsSUFBTW1NLFdBQVcsR0FBRzNZLFdBQVc7SUFBQSxJQUFBNFksS0FBQSxHQUFBMVEsaUJBQUEsY0FBQUMsbUJBQUEsQ0FBQUMsSUFBQSxDQUM3QixTQUFBeVEsU0FDRS9PLE9BQWUsRUFDZnBJLG9CQUE0RCxFQUM1RG9YLEtBQWMsRUFDZEMsaUJBQTBCLEVBQzFCQyxRQUEyQixFQUMzQkMsS0FBYyxFQUNkQyxJQUFhO01BQUEsSUFBQUMsb0JBQUEsRUFBQUMsZUFBQTtNQUFBLElBQUFDLHFCQUFBLEVBQUF2WCxXQUFBLEVBQUFDLE9BQUEsRUFBQXVYLGlCQUFBLEVBQUFDLGNBQUEsRUFBQUMsWUFBQSxFQUFBQyxXQUFBLEVBQUFDLGNBQUEsRUFBQUMsWUFBQSxFQUFBQyxzQkFBQSxFQUFBQyx3QkFBQSxFQUFBQyxZQUFBLEVBQUFDLHFCQUFBLEVBQUFDLE9BQUEsRUFBQXBHLGdCQUFBLEVBQUFxRyxvQkFBQSxFQUFBQyxnQkFBQSxFQUFBeFEsTUFBQSxFQUFBb0csUUFBQSxFQUFBcUssWUFBQSxFQUFBQyx3QkFBQSxFQUFBQyxXQUFBO01BQUEsT0FBQWxTLG1CQUFBLENBQUFrQixJQUFBLFdBQUFpUixTQUFBO1FBQUEsa0JBQUFBLFNBQUEsQ0FBQS9RLElBQUEsR0FBQStRLFNBQUEsQ0FBQTlRLElBQUE7VUFBQTtZQUFBLE1BRVRzRSxlQUFlLENBQUNoSCxPQUFPLElBQUlzUixlQUFlLElBQUkxSixlQUFlO2NBQUE0TCxTQUFBLENBQUE5USxJQUFBO2NBQUE7WUFBQTtZQUFBLE9BQUE4USxTQUFBLENBQUFsUCxNQUFBO1VBQUE7WUFBQWlPLHFCQUFBLEdBSWhDNVgsd0JBQXdCLENBQUNDLG9CQUFvQixDQUFDLEVBQXZFSSxXQUFXLEdBQUF1WCxxQkFBQSxDQUFYdlgsV0FBVyxFQUFFQyxPQUFPLEdBQUFzWCxxQkFBQSxDQUFQdFgsT0FBTyxFQUM1QjtZQUNBO1lBQ011WCxpQkFBaUIsR0FBR04sUUFBUSxhQUFSQSxRQUFRLGNBQVJBLFFBQVEsR0FBSWpYLE9BQU8sQ0FBQ2lYLFFBQVE7WUFDaERPLGNBQTBDLEdBQUd2WSxtQkFBbUIsQ0FBQ3NZLGlCQUFpQixDQUFDO1lBQ25GRSxZQUFZLEdBQUdQLEtBQUssYUFBTEEsS0FBSyxjQUFMQSxLQUFLLEdBQUlsWCxPQUFPLENBQUNrWCxLQUFLO1lBQ3JDUSxXQUFXLEdBQUdQLElBQUksYUFBSkEsSUFBSSxjQUFKQSxJQUFJLEdBQUluWCxPQUFPLENBQUNtWCxJQUFJO1lBQ2xDUSxjQUFjLEdBQUd6WSxrQ0FBa0MsQ0FBQzZJLE9BQU8sRUFBRTtjQUNqRW1QLEtBQUssRUFBRU8sWUFBWTtjQUNuQk4sSUFBSSxFQUFFTztZQUNSLENBQUMsQ0FBQztZQUVGM0wsZUFBZSxDQUFDaEgsT0FBTyxHQUFHLElBQUk7WUFDeEI2UyxZQUFZLEdBQUd0WixNQUFNLENBQUMsQ0FBQztZQUM3Qm1OLGdCQUFnQixDQUFDMUcsT0FBTyxHQUFHNlMsWUFBWTtZQUN2Q2xNLG1CQUFtQixDQUFDM0csT0FBTyxHQUFHZ0QsT0FBTztZQUVyQyxJQUFJLENBQUM2RCxhQUFhLENBQUM3RyxPQUFPLEVBQUU7Y0FDMUJvRyxLQUFLLENBQUN2TSxNQUFNLENBQUM0WixhQUFhLENBQUM7Y0FDM0I1TSxhQUFhLENBQUM3RyxPQUFPLEdBQUcsSUFBSTtZQUM5Qjs7WUFFQTtZQUNNOFMsc0JBQXNCLEdBQUdoTSxXQUFXLENBQUM5RyxPQUFPLENBQUM1RSxNQUFNLENBQUMsVUFBQXNOLEdBQUc7Y0FBQSxPQUFJQSxHQUFHLENBQUNDLFNBQVM7WUFBQSxFQUFDLENBQUNDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVoRm1LLHdCQUF3QixJQUFBVixvQkFBQSxHQUFHdkwsV0FBVyxDQUFDOUcsT0FBTyxjQUFBcVMsb0JBQUEsZ0JBQUFBLG9CQUFBLEdBQW5CQSxvQkFBQSxDQUFzQnZMLFdBQVcsQ0FBQzlHLE9BQU8sQ0FBQzBFLE1BQU0sR0FBRyxDQUFDLENBQUMsY0FBQTJOLG9CQUFBLHVCQUFyREEsb0JBQUEsQ0FBdUR0VCxPQUFPLEVBRS9GO1lBQ0FpSixVQUFVLENBQUE2RyxhQUFBO2NBQ1J0UyxFQUFFLGNBQUFaLE1BQUEsQ0FBYytLLGdCQUFnQixDQUFDMUcsT0FBTyxDQUFFO2NBQzFDZ0QsT0FBTyxFQUFFNFAsY0FBYztjQUN2QjFJLElBQUksRUFBRSxJQUFJQyxJQUFJLENBQUMsQ0FBQztjQUNoQkMsSUFBSSxFQUFFekssV0FBVztjQUNqQi9DLElBQUksRUFBRTNDLGVBQWUsQ0FBQ3laLElBQUk7Y0FDMUJ0USxPQUFPLEVBQUVwSTtZQUFXLEdBQ2hCeVgsY0FBYyxHQUFHO2NBQUVBLGNBQWMsRUFBZEE7WUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQzdDLENBQUM7WUFFRi9MLGdCQUFnQixDQUFDMUcsT0FBTyxHQUFHekcsTUFBTSxDQUFDLENBQUM7WUFDL0J5WixZQUFZLEdBQUdoUSxPQUFPO1lBRTFCLElBQUlBLE9BQU8sS0FBS2hGLENBQUMsQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUFFO2NBQ25EZ1YsWUFBWSxXQUFBclgsTUFBQSxDQUFXcUMsQ0FBQyxDQUFDLGdDQUFnQyxDQUFDLCtCQUFBckMsTUFBQSxDQUN4RCxFQUFBc1gscUJBQUEsR0FBQWhZLE9BQU8sQ0FBQzBZLGNBQWMsY0FBQVYscUJBQUEsdUJBQXRCQSxxQkFBQSxDQUF3QlcsVUFBVSxNQUFJbE8sT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUVrTyxVQUFVLEVBQ3pEO1lBQ0o7WUFFTVYsT0FBTyxHQUFHcE0sV0FBVyxDQUFDOUcsT0FBTyxDQUFDekUsR0FBRyxDQUFDLFVBQUFzWSxjQUFjO2NBQUEsT0FBSztnQkFDekQvUSxPQUFPLEVBQUUrUSxjQUFjLENBQUM3USxPQUFPO2dCQUMvQnBHLElBQUksRUFBRWlYLGNBQWMsQ0FBQ3pKLElBQUksQ0FBQzdOLEVBQUUsS0FBS21ELFFBQVEsQ0FBQ25ELEVBQUUsQ0FBQ3FELFFBQVEsQ0FBQyxDQUFDLEdBQUczRixlQUFlLENBQUN5WixJQUFJLEdBQUd6WixlQUFlLENBQUNvUTtjQUNuRyxDQUFDO1lBQUEsQ0FBQyxDQUFDLEVBRUg7WUFDTXlDLGdCQUFnQixHQUFHcEgsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUVuSixFQUFFO1lBQzlCNFcsb0JBQW9CLEdBQUdMLHNCQUFzQixhQUF0QkEsc0JBQXNCLHVCQUF0QkEsc0JBQXNCLENBQUVuSyxTQUFTO1lBRTFEeUssZ0JBQStCLEdBQUcsSUFBSSxFQUUxQztZQUNBLElBQUlELG9CQUFvQixJQUFJLElBQUksRUFBRTtjQUMxQnZRLE1BQU0sR0FBR3pHLE1BQU0sQ0FBQ2dYLG9CQUFvQixDQUFDO2NBQzNDQyxnQkFBZ0IsR0FBR2pYLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDd0csTUFBTSxDQUFDLEdBQUdBLE1BQU0sR0FBRyxJQUFJO1lBQzVEO1lBQ0E7WUFBQSxLQUNLLElBQUlrSyxnQkFBZ0IsSUFBSSxJQUFJLEVBQUU7Y0FDakNzRyxnQkFBZ0IsR0FBR3RHLGdCQUFnQjtZQUNyQztZQUFDMEcsU0FBQSxDQUFBOVEsSUFBQTtZQUFBLE9BRXNCNEQsYUFBYSxDQUFDLENBQUM4TSxnQkFBZ0IsQ0FBQyxDQUFDO1VBQUE7WUFBbERwSyxRQUFRLEdBQUF3SyxTQUFBLENBQUFuUCxJQUFBO1lBRVJnUCxZQUFZLEdBQUdyQixLQUFLLGFBQUxBLEtBQUssY0FBTEEsS0FBSyxHQUFJL1csT0FBTyxDQUFDK1csS0FBSztZQUNyQ3NCLHdCQUF3QixHQUFHckIsaUJBQWlCLGFBQWpCQSxpQkFBaUIsY0FBakJBLGlCQUFpQixHQUFJaFgsT0FBTyxDQUFDZ1gsaUJBQWlCO1lBRXpFc0IsV0FBVyxHQUFBMUUsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBO2NBQ2Y3TCxPQUFPLEVBQUVnUSxZQUFZO2NBQ3JCRSxPQUFPLEVBQVBBLE9BQU87Y0FDUHZLLFNBQVMsRUFBRXlLLGdCQUFnQjtjQUMzQlUsSUFBSSxFQUFFcFUsUUFBUSxDQUFDb1UsSUFBSTtjQUNuQkMsTUFBTSxFQUFFclUsUUFBUSxDQUFDbkQsRUFBRSxDQUFDcUQsUUFBUSxDQUFDLENBQUM7Y0FDOUJDLFNBQVMsRUFBRUgsUUFBUSxDQUFDRyxTQUFTO2NBQzdCbVUsUUFBUSxFQUFFdFUsUUFBUSxDQUFDc1UsUUFBUTtjQUMzQkMsU0FBUyxFQUFFdlUsUUFBUSxDQUFDd1UsVUFBVSxDQUFDdFUsUUFBUSxDQUFDLENBQUM7Y0FDekN3RixNQUFNLEVBQUV3QixhQUFhLENBQUM1RyxPQUFPO2NBQzdCbVUsU0FBUyxFQUFFek4sZ0JBQWdCLENBQUMxRyxPQUFPO2NBQ25Db1UsU0FBUyxFQUFFLENBQUFyTyxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRXRLLElBQUksS0FBSSxFQUFFO2NBQzVCc0QsT0FBTyxFQUFFZ1Usd0JBQXdCLEtBQUloTixLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRXhKLEVBQUUsQ0FBQztjQUMvQ3lKLGlCQUFpQixFQUFFeUIsb0JBQW9CLENBQUN6SCxPQUFPO2NBQy9DaUcsa0JBQWtCLEVBQUV5QixxQkFBcUIsQ0FBQzFIO1lBQU8sR0FDN0MsQ0FBQTBGLE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFMk8sS0FBSyxLQUFJLElBQUksR0FBRztjQUFFQSxLQUFLLEVBQUVsWSxNQUFNLENBQUN1SixPQUFPLENBQUMyTyxLQUFLO1lBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUM5RHpPLE1BQU0sYUFBTkEsTUFBTSxlQUFOQSxNQUFNLENBQUVySixFQUFFLEdBQUFzUyxhQUFBO2NBQ1J2RixRQUFRLEVBQUUxRCxNQUFNLENBQUNySjtZQUFFLEdBQU1xSixNQUFNLENBQUNuSyxJQUFJLEdBQUc7Y0FBRTJOLFVBQVUsRUFBRXhELE1BQU0sQ0FBQ25LO1lBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUN6RSxDQUFBaUssT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUU0RCxRQUFRLEtBQUksSUFBSSxHQUN2QjtjQUFFQSxRQUFRLEVBQUVuTixNQUFNLENBQUN1SixPQUFPLENBQUM0RCxRQUFRO1lBQUUsQ0FBQyxHQUN0QzVELE9BQU8sYUFBUEEsT0FBTyxnQkFBQTRNLGVBQUEsR0FBUDVNLE9BQU8sQ0FBRUUsTUFBTSxjQUFBME0sZUFBQSxlQUFmQSxlQUFBLENBQWlCL1YsRUFBRSxHQUFBc1MsYUFBQTtjQUNmdkYsUUFBUSxFQUFFNUQsT0FBTyxDQUFDRSxNQUFNLENBQUNySjtZQUFFLEdBQU1tSixPQUFPLENBQUNFLE1BQU0sQ0FBQ25LLElBQUksR0FBRztjQUFFMk4sVUFBVSxFQUFFMUQsT0FBTyxDQUFDRSxNQUFNLENBQUNuSztZQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFDakcsQ0FBQyxDQUFDLEdBQ051TixRQUFRLGFBQVJBLFFBQVEsZUFBUkEsUUFBUSxDQUFFdEUsTUFBTSxHQUFHO2NBQUVvRSxXQUFXLEVBQUVFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ3ZOO1lBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUN6RCxDQUFBcUssSUFBSSxhQUFKQSxJQUFJLHVCQUFKQSxJQUFJLENBQUV2SixFQUFFLEtBQUksSUFBSSxHQUFBc1MsYUFBQTtjQUFLYyxNQUFNLEVBQUV4VCxNQUFNLENBQUMySixJQUFJLENBQUN2SixFQUFFO1lBQUMsR0FBTXVKLElBQUksQ0FBQ3JLLElBQUksR0FBRztjQUFFNlksUUFBUSxFQUFFeE8sSUFBSSxDQUFDcks7WUFBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQU0sQ0FBQyxDQUFDLEdBQ2xHVCxXQUFXLENBQUMwSixNQUFNLEdBQUcsQ0FBQyxHQUFHO2NBQUUxSixXQUFXLEVBQVhBO1lBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUM3Q3FZLFlBQVksR0FBRztjQUFFckIsS0FBSyxFQUFFcUI7WUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQzNDQyx3QkFBd0IsR0FBRztjQUFFckIsaUJBQWlCLEVBQUVxQjtZQUF5QixDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQy9FWixZQUFZLEdBQUc7Y0FBRVAsS0FBSyxFQUFFTztZQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDM0NDLFdBQVcsR0FBRztjQUFFUCxJQUFJLEVBQUVPO1lBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUN4QyxDQUFBNU0sS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUV3TyxNQUFNLEtBQUksSUFBSSxHQUFHO2NBQUVDLFdBQVcsRUFBRXpPLEtBQUssQ0FBQ3dPO1lBQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUMxRDlCLGNBQWMsR0FBRztjQUFFQSxjQUFjLEVBQWRBO1lBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUc5Q3BCLE9BQU8sQ0FBQ2tDLFdBQVcsQ0FBQztVQUFBO1VBQUE7WUFBQSxPQUFBQyxTQUFBLENBQUE3TyxJQUFBO1FBQUE7TUFBQSxHQUFBb04sUUFBQTtJQUFBLENBQ3JCO0lBQUEsaUJBQUEwQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBO01BQUEsT0FBQWpELEtBQUEsQ0FBQS9NLEtBQUEsT0FBQUMsU0FBQTtJQUFBO0VBQUEsS0FDRCxDQUNFZ0QsVUFBVSxFQUNWNUIsS0FBSyxFQUNMaUwsT0FBTyxFQUNQM0wsT0FBTyxFQUNQRSxNQUFNLEVBQ05sRyxRQUFRLEVBQ1JxRyxLQUFLLEVBQ0wvSCxDQUFDLEVBQ0RzVCxlQUFlLEVBQ2YxSixlQUFlLEVBQ2Y1QixpQkFBaUIsRUFDakJDLGtCQUFrQixDQUV0QixDQUFDO0VBRUQsSUFBTStPLGFBQWEsR0FBRzliLFdBQVcsQ0FDL0IsVUFBQytWLE1BQWUsRUFBSztJQUNuQixJQUFJLENBQUN0SSxtQkFBbUIsQ0FBQzNHLE9BQU8sRUFBRTtJQUVsQyxJQUFJaVAsTUFBTSxDQUFDMVMsRUFBRSxNQUFLbUosT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUVuSixFQUFFLEdBQUU7TUFDN0JvSixVQUFVLENBQUNzSixNQUFNLENBQUM7SUFDcEI7SUFFQSxJQUFJdkosT0FBTyxJQUFJaUIsbUJBQW1CLENBQUMzRyxPQUFPLEVBQUU7TUFDMUMsSUFBTWtULE9BQU8sR0FBR3BNLFdBQVcsQ0FBQzlHLE9BQU8sQ0FBQ3pFLEdBQUcsQ0FBQyxVQUFBc1ksY0FBYztRQUFBLE9BQUs7VUFDekQvUSxPQUFPLEVBQUUrUSxjQUFjLENBQUM3USxPQUFPO1VBQy9CcEcsSUFBSSxFQUFFaVgsY0FBYyxDQUFDekosSUFBSSxDQUFDN04sRUFBRSxLQUFLbUQsUUFBUSxDQUFDbkQsRUFBRSxDQUFDcUQsUUFBUSxDQUFDLENBQUMsR0FBRzNGLGVBQWUsQ0FBQ3laLElBQUksR0FBR3paLGVBQWUsQ0FBQ29RO1FBQ25HLENBQUM7TUFBQSxDQUFDLENBQUM7TUFFSGdILE9BQU8sQ0FBQXhDLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBO1FBQ0w3TCxPQUFPLEVBQUUyRCxtQkFBbUIsQ0FBQzNHLE9BQU87UUFDcENrVCxPQUFPLEVBQVBBLE9BQU87UUFDUHZLLFNBQVMsRUFBRXNHLE1BQU0sQ0FBQzFTLEVBQUU7UUFDcEJ1WCxJQUFJLEVBQUVwVSxRQUFRLENBQUNvVSxJQUFJO1FBQ25CQyxNQUFNLEVBQUVyVSxRQUFRLENBQUNuRCxFQUFFLENBQUNxRCxRQUFRLENBQUMsQ0FBQztRQUM5QkMsU0FBUyxFQUFFSCxRQUFRLENBQUNHLFNBQVM7UUFDN0JtVSxRQUFRLEVBQUV0VSxRQUFRLENBQUNzVSxRQUFRO1FBQzNCQyxTQUFTLEVBQUV2VSxRQUFRLENBQUN3VSxVQUFVLENBQUN0VSxRQUFRLENBQUMsQ0FBQztRQUN6Q3dGLE1BQU0sRUFBRXdCLGFBQWEsQ0FBQzVHLE9BQU87UUFDN0JtVSxTQUFTLEVBQUV6TixnQkFBZ0IsQ0FBQzFHLE9BQU87UUFDbkNvVSxTQUFTLEVBQUUsQ0FBQXJPLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFdEssSUFBSSxLQUFJLEVBQUU7UUFDNUJzRCxPQUFPLEVBQUUsQ0FBQWdILEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFeEosRUFBRSxLQUFJLEVBQUU7UUFDeEJ5SixpQkFBaUIsRUFBRXlCLG9CQUFvQixDQUFDekgsT0FBTztRQUMvQ2lHLGtCQUFrQixFQUFFeUIscUJBQXFCLENBQUMxSDtNQUFPLEdBQzdDLENBQUFpUCxNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBRW9GLEtBQUssS0FBSSxJQUFJLEdBQUc7UUFBRUEsS0FBSyxFQUFFbFksTUFBTSxDQUFDOFMsTUFBTSxDQUFDb0YsS0FBSztNQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDNUQsQ0FBQXBGLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFM0YsUUFBUSxLQUFJLElBQUksR0FBRztRQUFFQSxRQUFRLEVBQUVuTixNQUFNLENBQUM4UyxNQUFNLENBQUMzRixRQUFRO01BQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUNyRSxDQUFBdkQsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUV3TyxNQUFNLEtBQUksSUFBSSxHQUFHO1FBQUVDLFdBQVcsRUFBRXpPLEtBQUssQ0FBQ3dPO01BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUMvRCxDQUFDO0lBQ0o7RUFDRixDQUFDLEVBQ0QsQ0FBQzdPLE9BQU8sRUFBRUMsVUFBVSxFQUFFMEwsT0FBTyxFQUFFM1IsUUFBUSxFQUFFc0csaUJBQWlCLEVBQUVELEtBQUssQ0FDbkUsQ0FBQztFQUVELElBQU1rUCxjQUFjLEdBQUcvYixXQUFXO0lBQUEsSUFBQWdjLEtBQUEsR0FBQTlULGlCQUFBLGNBQUFDLG1CQUFBLENBQUFDLElBQUEsQ0FBQyxTQUFBNlQsU0FBT0MsWUFBc0IsRUFBRUMsYUFBcUI7TUFBQSxJQUFBN1QsUUFBQTtNQUFBLE9BQUFILG1CQUFBLENBQUFrQixJQUFBLFdBQUErUyxTQUFBO1FBQUEsa0JBQUFBLFNBQUEsQ0FBQTdTLElBQUEsR0FBQTZTLFNBQUEsQ0FBQTVTLElBQUE7VUFBQTtZQUFBNFMsU0FBQSxDQUFBNVMsSUFBQTtZQUFBLE9BQzlEM0ksSUFBSSxDQUFDd2IsS0FBSyxDQUFDQyxjQUFjLENBQUNILGFBQWEsRUFBRUQsWUFBWSxLQUFLcGIsUUFBUSxDQUFDeWIsU0FBUyxDQUFDO1VBQUE7WUFBOUZqVSxRQUFRLEdBQUE4VCxTQUFBLENBQUFqUixJQUFBO1lBQ2QsSUFBSTdDLFFBQVEsRUFBRTtjQUNac0YsV0FBVyxDQUFDOUcsT0FBTyxHQUFHOEcsV0FBVyxDQUFDOUcsT0FBTyxDQUFDekUsR0FBRyxDQUFDLFVBQUF5SCxPQUFPLEVBQUk7Z0JBQ3ZELElBQUlBLE9BQU8sQ0FBQ3pHLEVBQUUsS0FBSzhZLGFBQWEsSUFBSXJTLE9BQU8sQ0FBQ3BHLElBQUksS0FBSyxXQUFXLEVBQUU7a0JBQ2hFLE9BQUFpUyxhQUFBLENBQUFBLGFBQUEsS0FBWTdMLE9BQU87b0JBQUUwUyxVQUFVLEVBQUVOLFlBQVksS0FBS3BiLFFBQVEsQ0FBQ3liO2tCQUFTO2dCQUN0RTtnQkFDQSxPQUFPelMsT0FBTztjQUNoQixDQUFDLENBQUM7WUFDSjtVQUFDO1VBQUE7WUFBQSxPQUFBc1MsU0FBQSxDQUFBM1EsSUFBQTtRQUFBO01BQUEsR0FBQXdRLFFBQUE7SUFBQSxDQUNGO0lBQUEsaUJBQUFRLElBQUEsRUFBQUMsSUFBQTtNQUFBLE9BQUFWLEtBQUEsQ0FBQW5RLEtBQUEsT0FBQUMsU0FBQTtJQUFBO0VBQUEsS0FBRSxFQUFFLENBQUM7RUFFTixJQUFNNlEsc0JBQXNCLEdBQUczYyxXQUFXO0lBQUEsSUFBQTRjLEtBQUEsR0FBQTFVLGlCQUFBLGNBQUFDLG1CQUFBLENBQUFDLElBQUEsQ0FDeEMsU0FBQXlVLFNBQ0VDLFNBQW1CLEVBQ25CaEgsUUFBOEIsRUFDOUJpSCxhQUEyRTtNQUFBLElBQUFDLG1CQUFBLEVBQUE1SCxRQUFBLEVBQUE2RixTQUFBLEVBQUFnQyxVQUFBLEVBQUFDLGVBQUEsRUFBQUMsU0FBQSxFQUFBN1UsUUFBQSxFQUFBOFUsRUFBQTtNQUFBLE9BQUFqVixtQkFBQSxDQUFBa0IsSUFBQSxXQUFBZ1UsU0FBQTtRQUFBLGtCQUFBQSxTQUFBLENBQUE5VCxJQUFBLEdBQUE4VCxTQUFBLENBQUE3VCxJQUFBO1VBQUE7WUFBQSxJQUV0RXNULFNBQVMsYUFBVEEsU0FBUyxlQUFUQSxTQUFTLENBQUV0UixNQUFNO2NBQUE2UixTQUFBLENBQUE3VCxJQUFBO2NBQUE7WUFBQTtZQUNwQjFCLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDLDhDQUE4QyxDQUFDO1lBQUEsT0FBQXNWLFNBQUEsQ0FBQWpTLE1BQUE7VUFBQTtZQUkvRDtZQUNNNFIsbUJBQW1CLEdBQUdwUCxXQUFXLENBQUM5RyxPQUFPLENBQUNyQixJQUFJLENBQUMsVUFBQTBQLENBQUM7Y0FBQSxJQUFBbUksV0FBQTtjQUFBLFFBQUFBLFdBQUEsR0FDcERuSSxDQUFDLENBQUNDLFFBQVEsY0FBQWtJLFdBQUEsZ0JBQUFBLFdBQUEsR0FBVkEsV0FBQSxDQUFZakksZUFBZSxjQUFBaUksV0FBQSx1QkFBM0JBLFdBQUEsQ0FBNkJoSSxJQUFJLENBQUMsVUFBQWhSLE1BQU07Z0JBQUEsT0FBSXdZLFNBQVMsQ0FBQ2hhLFFBQVEsQ0FBQ3dCLE1BQU0sQ0FBQ2laLFNBQVMsQ0FBQztjQUFBLEVBQUM7WUFBQSxDQUNuRixDQUFDO1lBQUEsTUFFRyxDQUFDUCxtQkFBbUIsSUFBSSxDQUFDQSxtQkFBbUIsQ0FBQzVILFFBQVE7Y0FBQWlJLFNBQUEsQ0FBQTdULElBQUE7Y0FBQTtZQUFBO1lBQ3ZEMUIsT0FBTyxDQUFDQyxLQUFLLENBQUMsc0RBQXNELEVBQUUrVSxTQUFTLENBQUM7WUFBQSxPQUFBTyxTQUFBLENBQUFqUyxNQUFBO1VBQUE7WUFJMUVnSyxRQUFRLEdBQUs0SCxtQkFBbUIsQ0FBaEM1SCxRQUFRO1lBQ1Y2RixTQUFTLEdBQUcrQixtQkFBbUIsQ0FBQzNaLEVBQUUsRUFDeEM7WUFDTTRaLFVBQVUsR0FBR0gsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUMvQjtZQUNBbFAsV0FBVyxDQUFDOUcsT0FBTyxHQUFHOEcsV0FBVyxDQUFDOUcsT0FBTyxDQUFDekUsR0FBRyxDQUFDLFVBQUF5SCxPQUFPLEVBQUk7Y0FDdkQsSUFBSUEsT0FBTyxDQUFDekcsRUFBRSxLQUFLNFgsU0FBUyxFQUFFO2dCQUM1QixJQUFNa0MsU0FBUyxHQUFHckgsUUFBUSxLQUFLLFNBQVMsR0FBRyxVQUFVLEdBQUcsVUFBVTtnQkFDbEUsT0FBQUgsYUFBQSxDQUFBQSxhQUFBLEtBQVk3TCxPQUFPO2tCQUFFeUwsY0FBYyxFQUFFNEg7Z0JBQVM7Y0FDaEQ7Y0FDQSxPQUFPclQsT0FBTztZQUNoQixDQUFDLENBQUM7O1lBRUY7WUFDTW9ULGVBQWUsR0FBR3RQLFdBQVcsQ0FBQzlHLE9BQU8sQ0FBQ3JCLElBQUksQ0FBQyxVQUFBMFAsQ0FBQztjQUFBLE9BQUlBLENBQUMsQ0FBQzlSLEVBQUUsS0FBSzRYLFNBQVM7WUFBQSxFQUFDO1lBQ3pFLElBQUlpQyxlQUFlLEVBQUU7Y0FDYkMsU0FBUyxHQUFHckgsUUFBUSxLQUFLLFNBQVMsR0FBRyxVQUFVLEdBQUcsVUFBVTtjQUNsRWhILFVBQVUsQ0FBQTZHLGFBQUEsQ0FBQUEsYUFBQSxLQUFNdUgsZUFBZTtnQkFBRTNILGNBQWMsRUFBRTRIO2NBQVMsRUFBRSxDQUFDO1lBQy9EOztZQUVBO1lBQ0FyUCxlQUFlLENBQUNoSCxPQUFPLEdBQUcsSUFBSTtZQUM5QjBHLGdCQUFnQixDQUFDMUcsT0FBTyxHQUFHekcsTUFBTSxDQUFDLENBQUM7O1lBRW5DO1lBQ0FpTyxpQkFBaUIsQ0FBQyxVQUFBL0UsSUFBSTtjQUFBLE9BQUFvTSxhQUFBLENBQUFBLGFBQUEsS0FDakJwTSxJQUFJLE9BQUFpVSxlQUFBLEtBQ05QLFVBQVUsRUFBR25ZLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztZQUFBLENBQ2xDLENBQUM7WUFBQXVZLFNBQUEsQ0FBQTlULElBQUE7WUFBQThULFNBQUEsQ0FBQTdULElBQUE7WUFBQSxPQUdzQjNJLElBQUksQ0FBQzRjLFlBQVksQ0FBQ0MsY0FBYyxDQUFDO2NBQ3REWixTQUFTLEVBQVRBLFNBQVM7Y0FBRTtjQUNYYSxTQUFTLEVBQUV2SSxRQUFRLENBQUN3SSxVQUFVO2NBQzlCOUgsUUFBUSxFQUFFaUgsYUFBYSxHQUFHLE1BQU0sR0FBR2pILFFBQVE7Y0FDM0NpSCxhQUFhLEVBQWJBLGFBQWE7Y0FDYmxYLE9BQU8sRUFBRSxDQUFBZ0gsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUV4SixFQUFFLEtBQUksRUFBRTtjQUN4QnVYLElBQUksRUFBRXBVLFFBQVEsQ0FBQ29VO1lBQ2pCLENBQUMsQ0FBQztVQUFBO1lBUEl0UyxRQUFRLEdBQUErVSxTQUFBLENBQUFsUyxJQUFBO1lBQUEsSUFTVDdDLFFBQVEsQ0FBQ3VWLEVBQUU7Y0FBQVIsU0FBQSxDQUFBN1QsSUFBQTtjQUFBO1lBQUE7WUFDZGdILGlCQUFpQixDQUFDLENBQUM7WUFDbkJsQyxpQkFBaUIsQ0FBQyxVQUFBL0UsSUFBSSxFQUFJO2NBQ3hCLElBQU11VSxXQUFXLEdBQUFuSSxhQUFBLEtBQVFwTSxJQUFJLENBQUU7Y0FDL0IsT0FBT3VVLFdBQVcsQ0FBQ2IsVUFBVSxDQUFDO2NBQzlCLE9BQU9hLFdBQVc7WUFDcEIsQ0FBQyxDQUFDO1lBQUEsT0FBQVQsU0FBQSxDQUFBalMsTUFBQTtVQUFBO1lBQUFpUyxTQUFBLENBQUE3VCxJQUFBO1lBQUEsT0FLRXhCLGdCQUFnQixDQUFDTSxRQUFRLEVBQUUyVSxVQUFVLEVBQUU7Y0FDM0NwVCxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBR0QsT0FBZSxFQUFLO2dCQUM1QndILGtCQUFrQixDQUFDeEgsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7Y0FDdkMsQ0FBQztjQUNERyxNQUFNLEVBQUUsU0FBUkEsTUFBTUEsQ0FBR0QsT0FBZSxFQUFFaVUsZUFBdUIsRUFBSztnQkFDcEQsSUFBTUMsVUFBVSxHQUNkbFUsT0FBTyxDQUFDaEgsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJZ0gsT0FBTyxDQUFDaEgsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHZ0gsT0FBTyxHQUFHaEYsQ0FBQyxDQUFDLHNCQUFzQixDQUFDO2dCQUN6R3dKLGlCQUFpQixDQUFDLFVBQUEvRSxJQUFJO2tCQUFBLE9BQUFvTSxhQUFBLENBQUFBLGFBQUEsS0FDakJwTSxJQUFJLE9BQUFpVSxlQUFBLEtBQ05PLGVBQWUsRUFBR0MsVUFBVTtnQkFBQSxDQUM3QixDQUFDO2NBQ0wsQ0FBQztjQUNEdlQsVUFBVSxFQUFFLFNBQVpBLFVBQVVBLENBQ1JSLFlBQW9CLEVBQ3BCQyxPQUFZLEVBQ1pDLGVBQXVCLEVBQ3ZCNFQsZUFBdUIsRUFDdkJqYyxXQUEwQixFQUMxQnVJLFdBQTZCLEVBQzdCeEUsT0FBdUIsRUFDcEI7Z0JBQ0gwTCxrQkFBa0IsQ0FBQ3RILFlBQVksRUFBRUMsT0FBTyxFQUFFQyxlQUFlLEVBQUVySSxXQUFXLEVBQUV1SSxXQUFXLEVBQUV4RSxPQUFPLENBQUM7Z0JBQzdGeUksaUJBQWlCLENBQUMsVUFBQS9FLElBQUksRUFBSTtrQkFDeEIsSUFBTXVVLFdBQVcsR0FBQW5JLGFBQUEsS0FBUXBNLElBQUksQ0FBRTtrQkFDL0IsT0FBT3VVLFdBQVcsQ0FBQ0MsZUFBZSxDQUFDO2tCQUNuQyxPQUFPRCxXQUFXO2dCQUNwQixDQUFDLENBQUM7Y0FDSixDQUFDO2NBQ0RuVCxrQkFBa0IsRUFBRSxTQUFwQkEsa0JBQWtCQSxDQUFHc1QsZUFBb0IsRUFBRXBWLGtCQUEwQixFQUFFa1YsZUFBdUIsRUFBSztnQkFDakc7Z0JBQ0F6UCxpQkFBaUIsQ0FBQyxVQUFBL0UsSUFBSSxFQUFJO2tCQUN4QixJQUFNdVUsV0FBVyxHQUFBbkksYUFBQSxLQUFRcE0sSUFBSSxDQUFFO2tCQUMvQixPQUFPdVUsV0FBVyxDQUFDQyxlQUFlLENBQUM7a0JBQ25DLE9BQU9ELFdBQVc7Z0JBQ3BCLENBQUMsQ0FBQztnQkFDRnZHLHNCQUFzQixDQUFDMEcsZUFBZSxFQUFxQnBWLGtCQUFrQixDQUFDO2NBQ2hGLENBQUM7Y0FDRGdDLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFHOUMsS0FBVSxFQUFFZ1csZUFBdUIsRUFBSztnQkFDaERqVyxPQUFPLENBQUNDLEtBQUssQ0FBQyxZQUFZLEVBQUVBLEtBQUssQ0FBQztnQkFDbEN5SSxpQkFBaUIsQ0FBQyxDQUFDO2dCQUNuQmxDLGlCQUFpQixDQUFDLFVBQUEvRSxJQUFJLEVBQUk7a0JBQ3hCLElBQU11VSxXQUFXLEdBQUFuSSxhQUFBLEtBQVFwTSxJQUFJLENBQUU7a0JBQy9CLE9BQU91VSxXQUFXLENBQUNDLGVBQWUsQ0FBQztrQkFDbkMsT0FBT0QsV0FBVztnQkFDcEIsQ0FBQyxDQUFDO2NBQ0o7WUFDRixDQUFDLENBQUM7VUFBQTtZQUFBVCxTQUFBLENBQUE3VCxJQUFBO1lBQUE7VUFBQTtZQUFBNlQsU0FBQSxDQUFBOVQsSUFBQTtZQUFBNlQsRUFBQSxHQUFBQyxTQUFBO1lBRUY3TSxpQkFBaUIsQ0FBQyxDQUFDO1lBQ25CbEMsaUJBQWlCLENBQUMsVUFBQS9FLElBQUksRUFBSTtjQUN4QixJQUFNdVUsV0FBVyxHQUFBbkksYUFBQSxLQUFRcE0sSUFBSSxDQUFFO2NBQy9CLE9BQU91VSxXQUFXLENBQUNiLFVBQVUsQ0FBQztjQUM5QixPQUFPYSxXQUFXO1lBQ3BCLENBQUMsQ0FBQztVQUFBO1VBQUE7WUFBQSxPQUFBVCxTQUFBLENBQUE1UixJQUFBO1FBQUE7TUFBQSxHQUFBb1IsUUFBQTtJQUFBLENBRUw7SUFBQSxpQkFBQXFCLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBO01BQUEsT0FBQXhCLEtBQUEsQ0FBQS9RLEtBQUEsT0FBQUMsU0FBQTtJQUFBO0VBQUEsS0FDRCxDQUFDdEYsUUFBUSxFQUFFcUcsS0FBSyxFQUFFaUMsVUFBVSxFQUFFMEIsaUJBQWlCLEVBQUVZLGtCQUFrQixFQUFFRyxrQkFBa0IsRUFBRWdHLHNCQUFzQixDQUNqSCxDQUFDO0VBRUQsSUFBTThHLGNBQWMsR0FBR3JlLFdBQVcsY0FBQWtJLGlCQUFBLGNBQUFDLG1CQUFBLENBQUFDLElBQUEsQ0FBQyxTQUFBa1csU0FBQTtJQUFBLElBQUFDLHFCQUFBLEVBQUFDLHFCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGlCQUFBLEVBQUFDLHFCQUFBLEVBQUFDLGFBQUEsRUFBQUMsYUFBQSxFQUFBQyxZQUFBLEVBQUEvRSxPQUFBO0lBQUEsT0FBQTdSLG1CQUFBLENBQUFrQixJQUFBLFdBQUEyVixTQUFBO01BQUEsa0JBQUFBLFNBQUEsQ0FBQXpWLElBQUEsR0FBQXlWLFNBQUEsQ0FBQXhWLElBQUE7UUFBQTtVQUNqQyxJQUFJLENBQUN1RSxZQUFZLENBQUNqSCxPQUFPLEVBQUU7WUFDekJpSCxZQUFZLENBQUNqSCxPQUFPLEdBQUcsSUFBSTtVQUM3QjtVQUFDLEtBQ0dtRixhQUFhO1lBQUErUyxTQUFBLENBQUF4VixJQUFBO1lBQUE7VUFBQTtVQUFBd1YsU0FBQSxDQUFBeFYsSUFBQTtVQUFBLE9BQ1RxRixZQUFZLENBQUMsQ0FBQztRQUFBO1VBQUFtUSxTQUFBLENBQUF4VixJQUFBO1VBQUE7UUFBQTtVQUFBLEtBQ1gyQyxrQkFBa0I7WUFBQTZTLFNBQUEsQ0FBQXhWLElBQUE7WUFBQTtVQUFBO1VBQ3JCbVYsaUJBQWlCLEdBQUdNLE9BQU8sRUFBQVYscUJBQUEsR0FBQ3BTLGtCQUFrQixDQUFDckMsT0FBTyxjQUFBeVUscUJBQUEsdUJBQTFCQSxxQkFBQSxDQUE0Qi9iLElBQUksQ0FBQyxDQUFDLENBQUM7VUFDL0RvYyxxQkFBcUIsR0FBR0ssT0FBTyxFQUFBVCxxQkFBQSxHQUFDclMsa0JBQWtCLENBQUNySyxXQUFXLGNBQUEwYyxxQkFBQSx1QkFBOUJBLHFCQUFBLENBQWdDaFQsTUFBTSxDQUFDO1VBQ3ZFcVQsYUFBYSxHQUFHSSxPQUFPLENBQUM5UyxrQkFBa0IsQ0FBQzJNLEtBQUssQ0FBQztVQUNqRGdHLGFBQWEsR0FBR0csT0FBTyxDQUFDOVMsa0JBQWtCLENBQUM4TSxLQUFLLENBQUM7VUFDakQ4RixZQUFZLEdBQUdFLE9BQU8sQ0FBQzlTLGtCQUFrQixDQUFDK00sSUFBSSxDQUFDO1VBQUEsTUFFakQsQ0FBQ3lGLGlCQUFpQixJQUFJLENBQUNDLHFCQUFxQixJQUFJLENBQUNDLGFBQWEsSUFBSSxDQUFDQyxhQUFhLElBQUksQ0FBQ0MsWUFBWTtZQUFBQyxTQUFBLENBQUF4VixJQUFBO1lBQUE7VUFBQTtVQUFBLE9BQUF3VixTQUFBLENBQUE1VCxNQUFBO1FBQUE7VUFJL0Y0TyxPQUFPLEdBQUdwTSxXQUFXLENBQUM5RyxPQUFPLENBQUN6RSxHQUFHLENBQUMsVUFBQXNZLGNBQWM7WUFBQSxPQUFLO2NBQ3pEL1EsT0FBTyxFQUFFK1EsY0FBYyxDQUFDN1EsT0FBTztjQUMvQnBHLElBQUksRUFBRWlYLGNBQWMsQ0FBQ3pKLElBQUksQ0FBQzdOLEVBQUUsS0FBS21ELFFBQVEsQ0FBQ25ELEVBQUUsQ0FBQ3FELFFBQVEsQ0FBQyxDQUFDLEdBQUczRixlQUFlLENBQUN5WixJQUFJLEdBQUd6WixlQUFlLENBQUNvUTtZQUNuRyxDQUFDO1VBQUEsQ0FBQyxDQUFDO1VBRUhnSCxPQUFPLENBQUF4QyxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQTtZQUNMN0wsT0FBTyxFQUFFcUMsa0JBQWtCLENBQUNyQyxPQUFPO1lBQ25Da1EsT0FBTyxFQUFQQSxPQUFPO1lBQ1B2SyxTQUFTLEVBQUUsQ0FBQWpELE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFbkosRUFBRSxLQUFJLElBQUk7WUFDOUJ1WCxJQUFJLEVBQUVwVSxRQUFRLENBQUNvVSxJQUFJO1lBQ25CQyxNQUFNLEVBQUVyVSxRQUFRLENBQUNuRCxFQUFFLENBQUNxRCxRQUFRLENBQUMsQ0FBQztZQUM5QkMsU0FBUyxFQUFFSCxRQUFRLENBQUNHLFNBQVM7WUFDN0JtVSxRQUFRLEVBQUV0VSxRQUFRLENBQUNzVSxRQUFRO1lBQzNCQyxTQUFTLEVBQUV2VSxRQUFRLENBQUN3VSxVQUFVLENBQUN0VSxRQUFRLENBQUMsQ0FBQztZQUN6Q3dGLE1BQU0sRUFBRXdCLGFBQWEsQ0FBQzVHLE9BQU87WUFDN0JtVSxTQUFTLEVBQUV6TixnQkFBZ0IsQ0FBQzFHLE9BQU87WUFDbkNvVSxTQUFTLEVBQUVyTyxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRXRLLElBQUs7WUFDdkJzRCxPQUFPLEVBQUVnSCxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRXhKLEVBQUc7WUFDbkJ5SixpQkFBaUIsRUFBRXlCLG9CQUFvQixDQUFDekgsT0FBTztZQUMvQ2lHLGtCQUFrQixFQUFFeUIscUJBQXFCLENBQUMxSDtVQUFPLEdBQzdDLENBQUEwRixPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRTJPLEtBQUssS0FBSSxJQUFJLEdBQUc7WUFBRUEsS0FBSyxFQUFFbFksTUFBTSxDQUFDdUosT0FBTyxDQUFDMk8sS0FBSztVQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDOUR6TyxNQUFNLGFBQU5BLE1BQU0sZUFBTkEsTUFBTSxDQUFFckosRUFBRSxHQUNWO1lBQUUrTSxRQUFRLEVBQUUxRCxNQUFNLENBQUNySjtVQUFHLENBQUMsR0FDdkIsQ0FBQW1KLE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFNEQsUUFBUSxLQUFJLElBQUksR0FDdkI7WUFBRUEsUUFBUSxFQUFFbk4sTUFBTSxDQUFDdUosT0FBTyxDQUFDNEQsUUFBUTtVQUFFLENBQUMsR0FDdEM1RCxPQUFPLGFBQVBBLE9BQU8sZ0JBQUFpUyxnQkFBQSxHQUFQalMsT0FBTyxDQUFFRSxNQUFNLGNBQUErUixnQkFBQSxlQUFmQSxnQkFBQSxDQUFpQnBiLEVBQUUsR0FDakI7WUFBRStNLFFBQVEsRUFBRTVELE9BQU8sQ0FBQ0UsTUFBTSxDQUFDcko7VUFBRyxDQUFDLEdBQy9CLENBQUMsQ0FBQyxHQUNObUosT0FBTyxhQUFQQSxPQUFPLGVBQVBBLE9BQU8sQ0FBRWpLLElBQUksR0FBRztZQUFFcU4sV0FBVyxFQUFFcEQsT0FBTyxDQUFDaks7VUFBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQ2xEaUssT0FBTyxhQUFQQSxPQUFPLGdCQUFBa1MsZ0JBQUEsR0FBUGxTLE9BQU8sQ0FBRUUsTUFBTSxjQUFBZ1MsZ0JBQUEsZUFBZkEsZ0JBQUEsQ0FBaUJuYyxJQUFJLEdBQ3JCO1lBQUUyTixVQUFVLEVBQUUxRCxPQUFPLENBQUNFLE1BQU0sQ0FBQ25LO1VBQUssQ0FBQyxHQUNuQ21LLE1BQU0sYUFBTkEsTUFBTSxlQUFOQSxNQUFNLENBQUVuSyxJQUFJLEdBQ1Y7WUFBRTJOLFVBQVUsRUFBRXhELE1BQU0sQ0FBQ25LO1VBQUssQ0FBQyxHQUMzQixDQUFDLENBQUMsR0FDSixDQUFBcUssSUFBSSxhQUFKQSxJQUFJLHVCQUFKQSxJQUFJLENBQUV2SixFQUFFLEtBQUksSUFBSSxHQUFBc1MsYUFBQTtZQUFLYyxNQUFNLEVBQUV4VCxNQUFNLENBQUMySixJQUFJLENBQUN2SixFQUFFO1VBQUMsR0FBTXVKLElBQUksQ0FBQ3JLLElBQUksR0FBRztZQUFFNlksUUFBUSxFQUFFeE8sSUFBSSxDQUFDcks7VUFBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQU0sQ0FBQyxDQUFDLEdBQ2xHNEosa0JBQWtCLENBQUNySyxXQUFXLEdBQUc7WUFBRUEsV0FBVyxFQUFFcUssa0JBQWtCLENBQUNySztVQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDckZxSyxrQkFBa0IsQ0FBQzJNLEtBQUssR0FBRztZQUFFQSxLQUFLLEVBQUUzTSxrQkFBa0IsQ0FBQzJNO1VBQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUNuRTNNLGtCQUFrQixDQUFDNE0saUJBQWlCLEdBQUc7WUFBRUEsaUJBQWlCLEVBQUU1TSxrQkFBa0IsQ0FBQzRNO1VBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDdkc1TSxrQkFBa0IsQ0FBQzhNLEtBQUssR0FBRztZQUFFQSxLQUFLLEVBQUU5TSxrQkFBa0IsQ0FBQzhNO1VBQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUNuRTlNLGtCQUFrQixDQUFDK00sSUFBSSxHQUFHO1lBQUVBLElBQUksRUFBRS9NLGtCQUFrQixDQUFDK007VUFBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQ2hFLENBQUFyTSxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRXdPLE1BQU0sS0FBSSxJQUFJLEdBQUc7WUFBRUMsV0FBVyxFQUFFek8sS0FBSyxDQUFDd087VUFBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQzFEcmEsbUJBQW1CLENBQUNtTCxrQkFBa0IsQ0FBQzZNLFFBQVEsQ0FBQyxHQUNoRDtZQUFFTyxjQUFjLEVBQUV2WSxtQkFBbUIsQ0FBQ21MLGtCQUFrQixDQUFDNk0sUUFBUTtVQUFFLENBQUMsR0FDcEUsQ0FBQyxDQUFDLENBQ1AsQ0FBQztRQUFBO1FBQUE7VUFBQSxPQUFBZ0csU0FBQSxDQUFBdlQsSUFBQTtNQUFBO0lBQUEsR0FBQTZTLFFBQUE7RUFBQSxDQUVMLElBQUUsQ0FDRHJTLGFBQWEsRUFDYkUsa0JBQWtCLEVBQ2xCSyxPQUFPLEVBQ1BFLE1BQU0sRUFDTmxHLFFBQVEsRUFDUnFHLEtBQUssRUFDTHNMLE9BQU8sRUFDUHJMLGlCQUFpQixFQUNqQkMsa0JBQWtCLENBQ25CLENBQUM7RUFFRixJQUFNbVMsU0FBUyxHQUFHbGYsV0FBVyxDQUFDLFlBQU07SUFDbENrTyxzQkFBc0IsQ0FBQ3BILE9BQU8sQ0FBQyxDQUFDO0lBQ2hDMEcsZ0JBQWdCLENBQUMxRyxPQUFPLEdBQUd6RyxNQUFNLENBQUMsQ0FBQztJQUNuQ29OLG1CQUFtQixDQUFDM0csT0FBTyxHQUFHLElBQUk7SUFDbEM0RyxhQUFhLENBQUM1RyxPQUFPLEdBQUd6RyxNQUFNLENBQUMsQ0FBQztJQUNoQ3NOLGFBQWEsQ0FBQzdHLE9BQU8sR0FBRyxLQUFLO0lBQzdCa0gseUJBQXlCLENBQUNsSCxPQUFPLEdBQUcsSUFBSTtJQUN4Q21ILHFCQUFxQixDQUFDbkgsT0FBTyxHQUFHLElBQUk7SUFDcEN0RixjQUFjLENBQUM4TixLQUFLLENBQUMsQ0FBQztFQUN4QixDQUFDLEVBQUUsRUFBRSxDQUFDO0VBRU4sSUFBTTZQLGNBQWMsR0FBR25mLFdBQVcsQ0FBQyxZQUFNO0lBQ3ZDd1ksYUFBYSxDQUFDLENBQUM7SUFDZjFLLGVBQWUsQ0FBQ2hILE9BQU8sR0FBRyxLQUFLO0VBQ2pDLENBQUMsRUFBRSxDQUFDMFIsYUFBYSxDQUFDLENBQUM7RUFFbkIsT0FBTztJQUNMN0osUUFBUSxFQUFSQSxRQUFRO0lBQ1JELGVBQWUsRUFBZkEsZUFBZTtJQUNmRSxxQkFBcUIsRUFBckJBLHFCQUFxQjtJQUNyQndKLGVBQWUsRUFBZkEsZUFBZTtJQUNmRSxTQUFTLEVBQVRBLFNBQVM7SUFDVEMsY0FBYyxFQUFkQSxjQUFjO0lBQ2RsSyxjQUFjLEVBQWRBLGNBQWM7SUFDZHFLLGNBQWMsRUFBZEEsY0FBYztJQUNkaEwsYUFBYSxFQUFFQSxhQUFhLENBQUM1RyxPQUFPO0lBQ3BDMEcsZ0JBQWdCLEVBQUVBLGdCQUFnQixDQUFDMUcsT0FBTztJQUUxQzZSLFdBQVcsRUFBWEEsV0FBVztJQUNYbUQsYUFBYSxFQUFiQSxhQUFhO0lBQ2JDLGNBQWMsRUFBZEEsY0FBYztJQUNkWSxzQkFBc0IsRUFBdEJBLHNCQUFzQjtJQUN0QjNOLFlBQVksRUFBWkEsWUFBWTtJQUNacVAsY0FBYyxFQUFkQSxjQUFjO0lBQ2RhLFNBQVMsRUFBVEEsU0FBUztJQUNUQyxjQUFjLEVBQWRBLGNBQWM7SUFFZEMsVUFBVSxFQUFFaEgsZUFBZSxJQUFJMUo7RUFDakMsQ0FBQztBQUNILENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
1305
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwidjQiLCJ1dWlkdjQiLCJ1c2VDaGF0TWVzc2FnZXMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJ1c2VUIiwidXNlVXNlciIsInVzZUdsb2JhbENvbnRleHQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsIm1haWEiLCJGZWVkYmFjayIsIkNoYXRIaXN0b3J5Um9sZSIsImJ1aWxkQ29udGV4dE1lc3NhZ2UiLCJmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5IiwidXNlUHJvamVjdHMiLCJ1c2VUYWJUYXNrRGVmYXVsdCIsIlRBU0tfVVJMX1JFR0VYX1BBVFRFUk4iLCJmZXRjaEFnZW50RGV0YWlsIiwiYnVpbGRIaXRsQWN0aW9uVHlwZUxpc3QiLCJnZXRIaXRsQW5hbHl0aWNzQWdlbnRUeXBlIiwiZ2V0VGhpbmtpbmdMb2FkaW5nTWVzc2FnZSIsImdldFdyaXRpbmdTdHJlYW1BY3Rpdml0eSIsIm1hcE5vZGVNZXNzYWdlVG9TdHJlYW1BY3Rpdml0eSIsInN0cmVhbWluZ1N0b3JlIiwiaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkIiwibWVyZ2VTdHJlYW1DaHVuayIsIm5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyIsImF0dGFjaG1lbnRzT3JPcHRpb25zIiwiX29wdGlvbnMkYXR0YWNobWVudHMiLCJBcnJheSIsImlzQXJyYXkiLCJhdHRhY2htZW50cyIsIm9wdGlvbnMiLCJub3JtYWxpemVBc3Npc3RhbnRBdHRhY2htZW50cyIsInJhd0F0dGFjaG1lbnRzIiwiZmlsdGVyIiwiYXR0YWNobWVudCIsIl90eXBlb2YiLCJtYXAiLCJpbmRleCIsIm5hbWUiLCJ0cmltIiwiY29uY2F0IiwidHlwZSIsIm1pbWVUeXBlIiwibWltZV90eXBlIiwiZnVsbEZpbGVOYW1lIiwiaW5jbHVkZXMiLCJudW1lcmljU2l6ZSIsInNpemUiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsImZpbGUiLCJGaWxlIiwiaWQiLCJ1cmxfb3JpZ2luYWwiLCJ1bmRlZmluZWQiLCJ1cmxfdGh1bWJuYWlsIiwidXJsX2ZpbGUiLCJyb2xlIiwiZXh0cmFjdFRhc2tJZHNGcm9tUGVuZGluZ0FjdGlvbnNBcmdzIiwicGVuZGluZ0FjdGlvbnMiLCJpZHMiLCJwdXNoSWQiLCJyYXciLCJuIiwicGFyc2VJbnQiLCJTdHJpbmciLCJpc05hTiIsInB1c2giLCJmb3JFYWNoIiwiYWN0aW9uIiwiX3JlYyR0YXNrX2lkIiwiYXJncyIsInRvb2xfYXJncyIsInJlYyIsInRhc2tfaWQiLCJ0YXNrX2lkcyIsInRhc2tzIiwidCIsIl90cmVjJHRhc2tfaWQiLCJ0cmVjIiwiZXh0cmFjdFRhc2tJZHNGcm9tRGVsZXRlUGVuZGluZ0FjdGlvbnMiLCJ0b29sX25hbWUiLCJfcmVjJHRhc2tfaWQyIiwibGlzdCIsInRpZCIsImV4dHJhY3RBZ2VudElkRnJvbUVkaXRBZ2VudFBlbmRpbmdBY3Rpb25zIiwiX3JlYyRhZ2VudF9pZCIsImVkaXRBY3Rpb24iLCJmaW5kIiwiYSIsInRvTG93ZXJDYXNlIiwiYWdlbnRfaWQiLCJhZ2VudElkIiwiZXh0cmFjdEFnZW50SWRGcm9tUGVuZGluZ0FjdGlvbnNCeVRvb2xOYW1lIiwidG9vbE5hbWUiLCJfcmVmIiwiX3JlYyRhZ2VudF9pZDIiLCJleHRyYWN0VGFza0lkc0Zyb21Bc3Npc3RhbnREZWxldGlvblRleHQiLCJ0ZXh0IiwibGFiZWxlZCIsIm1hdGNoIiwiYm9sZCIsInVzZVN0YWJsZUNhbGxiYWNrcyIsImF1dGhVc2VyIiwiY3VycmVudFVzZXIiLCJ0b1N0cmluZyIsImZpcnN0TmFtZSIsImF2YXRhciIsInBpY3R1cmUiLCJjdXJyZW50IiwicGFyc2VTU0VMaW5lIiwibGluZSIsIl9saW5lJHNwbGl0Iiwic3BsaXQiLCJfbGluZSRzcGxpdDIiLCJfc2xpY2VkVG9BcnJheSIsImV2ZW50TGluZSIsImRhdGFMaW5lIiwiZXZlbnRUeXBlIiwicmVwbGFjZSIsImRhdGFTdHIiLCJkYXRhIiwiSlNPTiIsInBhcnNlIiwicGFyc2VFcnJvciIsImNvbnNvbGUiLCJlcnJvciIsInByb2Nlc3NTU0VTdHJlYW0iLCJfcmVmMiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwicmVzcG9uc2UiLCJ0aHJlYWRJZCIsImNhbGxiYWNrcyIsIl9yZXNwb25zZSRib2R5IiwicmVhZGVyIiwiZGVjb2RlciIsImJ1ZmZlciIsImFjY3VtdWxhdGVkQ29udGVudCIsImlzU3RyZWFtQ29tcGxldGUiLCJoYW5kbGVMaW5lIiwiX3lpZWxkJHJlYWRlciRyZWFkIiwiZG9uZSIsInZhbHVlIiwibGluZXMiLCJpIiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJfaGFuZGxlTGluZSIsInBhcnNlZCIsImV2ZW50RGF0YSIsIm9uVGhpbmtpbmciLCJjb250ZW50Iiwib25Ub2tlbiIsIl9ldmVudERhdGEkYWdlbnRfaWQiLCJmaW5hbENvbnRlbnQiLCJzb3VyY2VzIiwibWVtb3J5U2Vzc2lvbklkIiwibWVtb3J5X3Nlc3Npb25faWQiLCJzdWdnZXN0aW9ucyIsInN1Z2dlc3RfcmVwbHkiLCJhZ2VudElkUmF3IiwiY29tcGxldGVkQWdlbnRJZCIsIm9uQ29tcGxldGUiLCJtZXNzYWdlIiwib25Ob2RlIiwiX2V2ZW50RGF0YSRhZ2VudF9pZDIiLCJfY2FsbGJhY2tzJG9uQXBwcm92YWwiLCJvbkFwcHJvdmFsUmVxdWlyZWQiLCJjYWxsIiwib25FcnJvciIsImJvZHkiLCJnZXRSZWFkZXIiLCJFcnJvciIsIlRleHREZWNvZGVyIiwicmVhZCIsInNlbnQiLCJhYnJ1cHQiLCJkZWNvZGUiLCJzdHJlYW0iLCJwb3AiLCJsZW5ndGgiLCJzdG9wIiwiX3giLCJfeDIiLCJfeDMiLCJhcHBseSIsImFyZ3VtZW50cyIsInVzZUNoYXRNYW5hZ2VyIiwiX3JlZjMiLCJpbml0aWFsQ2hhdElkIiwiY2hhdElkIiwidXNlckluaXRpYWxNZXNzYWdlIiwiX3JlZjMkYWdlbnRzIiwiYWdlbnRzIiwiX3VzZVQiLCJfdXNlR2xvYmFsQ29udGV4dCIsInByb2plY3QiLCJzZXRQcm9qZWN0IiwiY2xpZW50Iiwic2V0Q2xpZW50IiwidGFzayIsImFnZW50IiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJpc0RlZXBTZWFyY2hBY3RpdmUiLCJjaGlwc1Byb2plY3QiLCJzZXRDaGlwc1Byb2plY3QiLCJldmVudCIsIl91c2VQcm9qZWN0cyIsImZldGNoUHJvamVjdHMiLCJfdXNlU3RhYmxlQ2FsbGJhY2tzIiwiX3VzZVRhYlRhc2tEZWZhdWx0IiwiZ2V0VGFiVGFza0RlZmF1bHQiLCJjdXJyZW50TWVzc2FnZUlkIiwiY3VycmVudFVzZXJRdWVzdGlvbiIsImN1cnJlbnRDaGF0SWQiLCJyZXBvcnRlZEV2ZW50IiwibWVzc2FnZXNSZWYiLCJsYXN0TWFudWFsQXBwcm92YWxSZWYiLCJpc1Byb2Nlc3NpbmdSZWYiLCJmaXJzdFRpbWVSZWYiLCJzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmIiwiYWN0aXZlU3RyZWFtQ2hhdElkUmVmIiwiYWJvcnRTdHJlYW1TaWxlbnRseVJlZiIsImNsZWFyU3RyZWFtVWlSZWYiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiYWN0aXZlTG9hZGluZ3MiLCJzZXRBY3RpdmVMb2FkaW5ncyIsImlzV2ViU2VhcmNoQWN0aXZlUmVmIiwiaXNEZWVwU2VhcmNoQWN0aXZlUmVmIiwiX3VzZUNoYXRNZXNzYWdlcyIsImxvYWRpbmdNZXNzYWdlcyIsIm1lc3NhZ2VzIiwiaXNMb2FkaW5nTW9yZU1lc3NhZ2VzIiwibG9hZE1lc3NhZ2VzIiwiYWRkTWVzc2FnZSIsInJlbW92ZU1lc3NhZ2UiLCJoYW5kbGVTY3JvbGwiLCJjdXN0b21FdmVudCIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwiZG9jdW1lbnQiLCJkaXNwYXRjaEV2ZW50IiwiY2xlYXIiLCJsYXN0TXNnV2l0aFByb2plY3QiLCJtc2ciLCJwcm9qZWN0SWQiLCJhdCIsIl9yZWY0IiwicHJvamVjdE5hbWUiLCJ0aGVuIiwicHJvamVjdHMiLCJmb3VuZCIsInAiLCJfZm91bmQkY2xpZW50IiwiY2xpZW50TmFtZSIsImxhc3RNc2dXaXRoQ2xpZW50IiwiY2xpZW50SWQiLCJfcmVmNSIsIm1zZ0NsaWVudElkIiwibXNnQ2xpZW50TmFtZSIsImhhbmRsZVN0cmVhbUVycm9yIiwiZXJyb3JNZXNzYWdlIiwiZXJyb3JSYXdNZXNzYWdlIiwiX2Vycm9yUmF3TWVzc2FnZSRtYXRjIiwiX2Vycm9yUmF3TWVzc2FnZSRtYXRjMiIsInRlbXBNZXNzYWdlSWQiLCJ1c2VkIiwiaXNFcnJvciIsImRhdGUiLCJEYXRlIiwidXNlciIsIkFTU0lTVEFOVCIsImhhbmRsZVN0cmVhbVVwZGF0ZSIsInN0YXJ0Iiwic2V0VGV4dCIsImhhbmRsZVN0cmVhbUZpbmlzaCIsIl9yZWY2IiwiX2NhbGxlZTIiLCJfcHJldmlvdXNNZXNzYWdlJGFwcHIiLCJfd2luZG93JHRhc2tQYW5lbCIsIl9jcmVhdGVBZ2VudEZvbGxvd1VwIiwiX2VkaXRBZ2VudEZvbGxvd1VwIiwidGFza1VybFJlZ2V4IiwibWF0Y2hlcyIsImNvbnRlbnRUb0FkZCIsInByZXZpb3VzTWVzc2FnZSIsImhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UiLCJUQVNLX0NSRUFUSU9OX1RPT0xTIiwiVEFTS19FRElUX1RPT0xTIiwiVEFTS19ERUxFVEVfVE9PTFMiLCJ3YXNUYXNrQ3JlYXRpb24iLCJ3YXNUYXNrRWRpdCIsIndhc1Rhc2tEZWxldGUiLCJ3YXNDcmVhdGVBZ2VudEFwcHJvdmVkIiwid2FzQ29uZmlndXJlQWdlbnRBY2Nlc3NBcHByb3ZlZCIsImNyZWF0ZUFnZW50Rm9sbG93VXAiLCJjb25maWd1cmVkQWdlbnRJZCIsIndhc0VkaXRBZ2VudEFwcHJvdmVkIiwiZWRpdEFnZW50Rm9sbG93VXAiLCJmcm9tU3RyZWFtIiwiZnJvbUFyZ3MiLCJyZXNvbHZlZEFnZW50SWQiLCJ0YXNrSWRzRnJvbVVybHMiLCJ0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsIiwidGFza0lkc0Zyb21EZWxldGlvblRleHQiLCJ0YXNrSWRzRm9yRGFzaGJvYXJkIiwic2hvdWxkU3luY0Rhc2hib2FyZCIsInRhc2tJZHMiLCJ0YWIiLCJ0YWJTZWdtZW50IiwibGFzdFByb2plY3RNZXNzYWdlIiwiY29udGV4dFByb2plY3RJZFJhdyIsImNvbnRleHRQcm9qZWN0SWQiLCJwYXRoTWF0Y2giLCJyb3V0ZVByb2plY3RJZCIsImlzT25Qcm9qZWN0Um91dGUiLCJfd2luZG93JG5ld1Byb2plY3REYXMiLCJfd2luZG93JG5ld1Byb2plY3REYXMyIiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzMyIsIl93aW5kb3ckbmV3UHJvamVjdERhczQiLCJfd2luZG93JG5ld1Byb2plY3REYXM1IiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzNiIsIm9wZW5UYXNrUGFuZWxJZCIsIm1hbnVhbEFwcHJvdmFsIiwibWFudWFsV2FzVGFza0VkaXQiLCJtYW51YWxXYXNUYXNrRGVsZXRlIiwiX21hbnVhbEFwcHJvdmFsJHRvb2xBIiwibWFudWFsUHNldWRvQWN0aW9uIiwiYWZmZWN0ZWRUYXNrSWRzIiwiX3dpbmRvdyR0YXNrUGFuZWwyIiwiX3dpbmRvdyR0YXNrUGFuZWwyJHJlIiwiX2NvbnRleHQyIiwiUmVnRXhwIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwibWF0Y2hBbGwiLCJtIiwiYXBwcm92YWwiLCJwZW5kaW5nX2FjdGlvbnMiLCJzb21lIiwiYXBwcm92YWxTdGF0dXMiLCJ3aW5kb3ciLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTIiwiYWlDaGF0SGl0bE9wdGlvbiIsIl9vYmplY3RTcHJlYWQiLCJhZ2VudF90eXBlIiwiYWN0aW9uX3R5cGUiLCJkZWNpc2lvbiIsIm9wdGlvbiIsImNyZWF0ZWRfYWdlbnRfaWQiLCJ1cmwiLCJsb2NhdGlvbiIsInBhdGhuYW1lIiwibmV3UHJvamVjdERhc2hib2FyZCIsImFkZEV4aXN0aW5nVGFza1RvRGFzaGJvYXJkIiwiZWRpdEV4aXN0aW5nVGFza0luRGFzaGJvYXJkIiwiZGVsZXRlRXhpc3RpbmdUYXNrRnJvbURhc2hib2FyZCIsInRhc2tQYW5lbCIsInRhc2tJZCIsInRvb2xBcmdzIiwicmVmZXRjaFRhc2siLCJjaGF0QWdlbnQiLCJlcnIiLCJfeDQiLCJfeDUiLCJfeDYiLCJfeDciLCJfeDgiLCJfeDkiLCJoYW5kbGVTdHJlYW1TdG9wIiwiaXNGcm9udGVuZENhbmNlbGxlZCIsInNldFRpbWVvdXQiLCJoYW5kbGVBcHByb3ZhbFJlcXVpcmVkIiwibWFudWFsX2FwcHJvdmFsX2RldGVjdGVkIiwiX2FwcHJvdmFsJHBlbmRpbmdfYWN0IiwiX3JlZjciLCJfdG9vbF9uYW1lIiwiX3Rvb2xfYXJncyIsImZpcnN0QWN0aW9uIiwib3JpZ2luYWxfdGhyZWFkX2lkIiwiX3VzZU9yY2hlc3RyYXRvclN0cmVhIiwib25TdHJlYW1VcGRhdGUiLCJvbkZpbmlzaFN0cmVhbSIsIm9uU3RvcCIsImFza01haWEiLCJ3YWl0aW5nUmVzcG9uc2UiLCJpc0xvYWRpbmciLCJpc1dyaXRpbmciLCJsb2FkaW5nTWVzc2FnZSIsInN0cmVhbUFjdGl2aXR5IiwidXBkYXRlU3RyZWFtQWN0aXZpdHkiLCJzdG9wU3RyZWFtaW5nIiwiYWJvcnRTdHJlYW1TaWxlbnRseSIsImN1cnJlbnRQcm9qZWN0Iiwic2VuZE1lc3NhZ2UiLCJfcmVmOCIsIl9jYWxsZWUzIiwiZmFxSWQiLCJhZ2VudFN1Z2dlc3Rpb25JZCIsIm1lbnRpb25zIiwiZnVhSWQiLCJzY0lkIiwiX21lc3NhZ2VzUmVmJGN1cnJlbnQiLCJfcHJvamVjdCRjbGllbnQiLCJfbm9ybWFsaXplU2VuZE1lc3NhZ2UiLCJlZmZlY3RpdmVNZW50aW9ucyIsImNvbnRleHRNZXNzYWdlIiwicGF5bG9hZEZ1YUlkIiwicGF5bG9hZFNjSWQiLCJkaXNwbGF5TWVzc2FnZSIsIm5ld01lc3NhZ2VJZCIsImxhc3RNZXNzYWdlV2l0aFByb2plY3QiLCJjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMiLCJzdHJlYW1pbmdQbGFjZWhvbGRlcklkIiwiZmluYWxNZXNzYWdlIiwiX29wdGlvbnMkcHJvamVjdENoYW5nIiwiaGlzdG9yeSIsImxhc3RNZXNzYWdlUHJvamVjdElkIiwicHJvamVjdFRvUmVxdWVzdCIsInBheWxvYWRGYXFJZCIsInBheWxvYWRBZ2VudFN1Z2dlc3Rpb25JZCIsInBheWxvYWREYXRhIiwiX2NvbnRleHQzIiwicG1BaVR5cGVkVGV4dCIsIlVTRVIiLCJwcm9qZWN0Q2hhbmdlZCIsImluY29tZVR5cGUiLCJoaXN0b3J5TWVzc2FnZSIsImxhbmciLCJ1c2VySWQiLCJsYXN0TmFtZSIsImNvbXBhbnlJZCIsImNvbXBhbnlfaWQiLCJtZXNzYWdlSWQiLCJhZ2VudE5hbWUiLCJmZWVJZCIsInRhc2tOYW1lIiwiZW50aXR5IiwiYWdlbnRFbnRpdHkiLCJfeDAiLCJfeDEiLCJfeDEwIiwiX3gxMSIsIl94MTIiLCJfeDEzIiwiX3gxNCIsImNoYW5nZVByb2plY3QiLCJoYW5kbGVGZWVkYmFjayIsIl9yZWY5IiwiX2NhbGxlZTQiLCJmZWVkYmFja1Byb3AiLCJjaGF0TWVzc2FnZUlkIiwiX2NvbnRleHQ0IiwiQ2hhdHMiLCJ3YXNIZWxwZnVsQ2hhdCIsIlRIVU1CU19VUCIsIndhc0hlbHBmdWwiLCJfeDE1IiwiX3gxNiIsImhhbmRsZUFwcHJvdmFsRGVjaXNpb24iLCJfcmVmMCIsIl9jYWxsZWU1IiwidGhyZWFkSWRzIiwiZWRpdGVkQWN0aW9ucyIsIm1lc3NhZ2VXaXRoQXBwcm92YWwiLCJsb2FkaW5nS2V5IiwiZXhpc3RpbmdNZXNzYWdlIiwibmV3U3RhdHVzIiwiX3QiLCJfY29udGV4dDUiLCJfbSRhcHByb3ZhbCIsInRocmVhZF9pZCIsIl9kZWZpbmVQcm9wZXJ0eSIsInBoYXNlIiwiT3JjaGVzdHJhdG9yIiwiY29udGludWVUaHJlYWQiLCJzZXNzaW9uSWQiLCJzZXNzaW9uX2lkIiwib2siLCJhY3Rpdml0eSIsImN1cnJlbnRUaHJlYWRJZCIsIm5vZGVBY3Rpdml0eSIsInVzZVJlc3VtaW5nRmFsbGJhY2siLCJuZXdMb2FkaW5ncyIsImFwcHJvdmFsUGF5bG9hZCIsImZpbmlzaCIsIl94MTciLCJfeDE4IiwiX3gxOSIsImluaXRpYWxpemVDaGF0IiwiX2NhbGxlZTYiLCJfdXNlckluaXRpYWxNZXNzYWdlJG0iLCJfdXNlckluaXRpYWxNZXNzYWdlJGEiLCJfcHJvamVjdCRjbGllbnQyIiwiX3Byb2plY3QkY2xpZW50MyIsImhhc0luaXRpYWxNZXNzYWdlIiwiaGFzSW5pdGlhbEF0dGFjaG1lbnRzIiwiaGFzSW5pdGlhbEZhcSIsImhhc0luaXRpYWxGdWEiLCJoYXNJbml0aWFsU2MiLCJfY29udGV4dDYiLCJCb29sZWFuIiwicmVzZXRDaGF0Iiwic3RvcEdlbmVyYXRpb24iLCJpc0Rpc2FibGVkIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL3VzZUNoYXRNYW5hZ2VyL3VzZUNoYXRNYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHJhZGl4ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGVkLW9wdGlvbmFsLWNoYWluICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlUmVmLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJ1xuaW1wb3J0IHsgdXNlQ2hhdE1lc3NhZ2VzIH0gZnJvbSAnLi4vdXNlQ2hhdE1lc3NhZ2VzJ1xuaW1wb3J0IHsgdXNlT3JjaGVzdHJhdG9yU3RyZWFtIH0gZnJvbSAnLi4vdXNlT3JjaGVzdHJhdG9yU3RyZWFtJ1xuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uL3VzZVQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IFNlbmRNZXNzYWdlT3B0aW9ucywgVXNlQ2hhdE1hbmFnZXJQcm9wcyB9IGZyb20gJy4vdXNlQ2hhdE1hbmFnZXIuaW50ZXJmYWNlJ1xuaW1wb3J0IHsgdXNlVXNlciwgQ09SVXNlciB9IGZyb20gJy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi91c2VFdmVudCdcbmltcG9ydCBtYWlhIGZyb20gJy4uLy4uL3NlcnZpY2VzL21haWEnXG5pbXBvcnQgeyBGZWVkYmFjayB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9sZWN1bGVzL01lc3NhZ2VGZWVkYmFjay9NZXNzYWdlRmVlZGJhY2snXG5pbXBvcnQgeyBDaGF0TWVzc2FnZSwgQ2hhdE1lc3NhZ2VVc2VyLCBDaGF0SGlzdG9yeVJvbGUsIEFwcHJvdmFsUmVxdWVzdCwgUGVuZGluZ0FjdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQgeyBDb250ZXh0TWVudGlvbiwgQ29udGV4dE1lc3NhZ2UsIGJ1aWxkQ29udGV4dE1lc3NhZ2UgfSBmcm9tICcuLi8uLi90eXBlcy9jb250ZXh0TWVudGlvbidcbmltcG9ydCB7IGZvcm1hdFF1aWNrQWN0aW9uTWVzc2FnZUZvckRpc3BsYXkgfSBmcm9tICcuLi8uLi91dGlscy9mb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2UnXG5cbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi8uLi90eXBlcy9Qcm9qZWN0J1xuaW1wb3J0IHsgdXNlUHJvamVjdHMgfSBmcm9tICcuLi91c2VQcm9qZWN0cydcbmltcG9ydCB7IHVzZVRhYlRhc2tEZWZhdWx0IH0gZnJvbSAnLi4vdXNlVGFiVGFza0RlZmF1bHQnXG5pbXBvcnQgeyBUQVNLX1VSTF9SRUdFWF9QQVRURVJOIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3Rhc2tVcmxzJ1xuaW1wb3J0IHsgZmV0Y2hBZ2VudERldGFpbCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21haWEvQWdlbnRzL2ZldGNoQWdlbnREZXRhaWwnXG5pbXBvcnQgeyBidWlsZEhpdGxBY3Rpb25UeXBlTGlzdCwgZ2V0SGl0bEFuYWx5dGljc0FnZW50VHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2hpdGxBbmFseXRpY3MnXG5pbXBvcnQgdHlwZSB7IFN0cmVhbUFjdGl2aXR5IH0gZnJvbSAnLi4vLi4vdHlwZXMvc3RyZWFtQWN0aXZpdHknXG5pbXBvcnQge1xuICBnZXRUaGlua2luZ0xvYWRpbmdNZXNzYWdlLFxuICBnZXRXcml0aW5nU3RyZWFtQWN0aXZpdHksXG4gIG1hcE5vZGVNZXNzYWdlVG9TdHJlYW1BY3Rpdml0eSxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvc3RyZWFtQWN0aXZpdHlNZXNzYWdlcydcbmltcG9ydCB7IHN0cmVhbWluZ1N0b3JlIH0gZnJvbSAnLi4vdXNlU3RyZWFtaW5nTWVzc2FnZSdcbmltcG9ydCB7IGlzQ29tcGxldGVMaWtlU3NlUGF5bG9hZCwgbWVyZ2VTdHJlYW1DaHVuayB9IGZyb20gJy4uLy4uL3V0aWxzL3NzZVN0cmVhbUNvbnRlbnQnXG5cbnR5cGUgQXR0YWNobWVudHNPck9wdGlvbnMgPSBBdHRhY2htZW50RmlsZVtdIHwgU2VuZE1lc3NhZ2VPcHRpb25zXG5cbmNvbnN0IG5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyA9IChhdHRhY2htZW50c09yT3B0aW9ucz86IEF0dGFjaG1lbnRzT3JPcHRpb25zKSA9PiB7XG4gIGlmIChBcnJheS5pc0FycmF5KGF0dGFjaG1lbnRzT3JPcHRpb25zKSkge1xuICAgIHJldHVybiB7IGF0dGFjaG1lbnRzOiBhdHRhY2htZW50c09yT3B0aW9ucywgb3B0aW9uczoge30gYXMgU2VuZE1lc3NhZ2VPcHRpb25zIH1cbiAgfVxuXG4gIGNvbnN0IG9wdGlvbnM6IFNlbmRNZXNzYWdlT3B0aW9ucyA9IGF0dGFjaG1lbnRzT3JPcHRpb25zID8/IHt9XG4gIHJldHVybiB7IGF0dGFjaG1lbnRzOiBvcHRpb25zLmF0dGFjaG1lbnRzID8/IFtdLCBvcHRpb25zIH1cbn1cblxuY29uc3Qgbm9ybWFsaXplQXNzaXN0YW50QXR0YWNobWVudHMgPSAocmF3QXR0YWNobWVudHM6IHVua25vd24pOiBBdHRhY2htZW50RmlsZVtdID0+IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJhd0F0dGFjaG1lbnRzKSkge1xuICAgIHJldHVybiBbXVxuICB9XG5cbiAgcmV0dXJuIHJhd0F0dGFjaG1lbnRzXG4gICAgLmZpbHRlcigoYXR0YWNobWVudCk6IGF0dGFjaG1lbnQgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4gISFhdHRhY2htZW50ICYmIHR5cGVvZiBhdHRhY2htZW50ID09PSAnb2JqZWN0JylcbiAgICAubWFwKChhdHRhY2htZW50LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbmFtZSA9XG4gICAgICAgIHR5cGVvZiBhdHRhY2htZW50Lm5hbWUgPT09ICdzdHJpbmcnICYmIGF0dGFjaG1lbnQubmFtZS50cmltKCkgPyBhdHRhY2htZW50Lm5hbWUudHJpbSgpIDogYGZpbGUtJHtpbmRleCArIDF9YFxuICAgICAgY29uc3QgdHlwZSA9IHR5cGVvZiBhdHRhY2htZW50LnR5cGUgPT09ICdzdHJpbmcnICYmIGF0dGFjaG1lbnQudHlwZS50cmltKCkgPyBhdHRhY2htZW50LnR5cGUudHJpbSgpIDogJ3BkZidcbiAgICAgIGNvbnN0IG1pbWVUeXBlID0gdHlwZW9mIGF0dGFjaG1lbnQubWltZV90eXBlID09PSAnc3RyaW5nJyA/IGF0dGFjaG1lbnQubWltZV90eXBlIDogJydcbiAgICAgIGNvbnN0IGZ1bGxGaWxlTmFtZSA9IG5hbWUuaW5jbHVkZXMoJy4nKSA/IG5hbWUgOiBgJHtuYW1lfS4ke3R5cGV9YFxuICAgICAgY29uc3QgbnVtZXJpY1NpemUgPVxuICAgICAgICB0eXBlb2YgYXR0YWNobWVudC5zaXplID09PSAnbnVtYmVyJ1xuICAgICAgICAgID8gYXR0YWNobWVudC5zaXplXG4gICAgICAgICAgOiBOdW1iZXIuaXNGaW5pdGUoTnVtYmVyKGF0dGFjaG1lbnQuc2l6ZSkpXG4gICAgICAgICAgICA/IE51bWJlcihhdHRhY2htZW50LnNpemUpXG4gICAgICAgICAgICA6IDBcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmlsZTogbmV3IEZpbGUoW10sIGZ1bGxGaWxlTmFtZSwgeyB0eXBlOiBtaW1lVHlwZSB9KSxcbiAgICAgICAgaWQ6XG4gICAgICAgICAgdHlwZW9mIGF0dGFjaG1lbnQuaWQgPT09ICdzdHJpbmcnICYmIGF0dGFjaG1lbnQuaWQudHJpbSgpXG4gICAgICAgICAgICA/IGF0dGFjaG1lbnQuaWRcbiAgICAgICAgICAgIDogYGFzc2lzdGFudC1maWxlLSR7aW5kZXh9LSR7ZnVsbEZpbGVOYW1lfWAsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHNpemU6IG51bWVyaWNTaXplLFxuICAgICAgICB0eXBlLFxuICAgICAgICB1cmxfb3JpZ2luYWw6IHR5cGVvZiBhdHRhY2htZW50LnVybF9vcmlnaW5hbCA9PT0gJ3N0cmluZycgPyBhdHRhY2htZW50LnVybF9vcmlnaW5hbCA6IHVuZGVmaW5lZCxcbiAgICAgICAgdXJsX3RodW1ibmFpbDogdHlwZW9mIGF0dGFjaG1lbnQudXJsX3RodW1ibmFpbCA9PT0gJ3N0cmluZycgPyBhdHRhY2htZW50LnVybF90aHVtYm5haWwgOiB1bmRlZmluZWQsXG4gICAgICAgIHVybF9maWxlOiB0eXBlb2YgYXR0YWNobWVudC51cmxfZmlsZSA9PT0gJ3N0cmluZycgPyBhdHRhY2htZW50LnVybF9maWxlIDogdW5kZWZpbmVkLFxuICAgICAgICByb2xlOiBhdHRhY2htZW50LnJvbGUgPT09ICdhc3Npc3RhbnQnID8gJ2Fzc2lzdGFudCcgOiAndXNlcicsXG4gICAgICB9XG4gICAgfSlcbn1cblxuLyoqIEV4dHJhZSB0YXNrX2lkcyBkZSBsb3MgdG9vbF9hcmdzIGRlIHBlbmRpbmdfYWN0aW9ucywgY3VicmllbmRvIGxhcyBmb3JtYXMgY29tdW5lczpcbiAqICAtIGB7IHRhc2tfaWQgfWAgbyBgeyBpZCB9YFxuICogIC0gYHsgdGFza19pZHM6IFtdIH1gXG4gKiAgLSBgeyB0YXNrczogW3sgdGFza19pZHxpZCB9LCAuLi5dIH1gXG4gKiAgw5p0aWwgcGFyYSB0b29scyBkZSBlZGl0L2Fzc2lnbi9kZWxldGUgY3VhbmRvIGxhIHJlc3B1ZXN0YSBkZWwgTExNIG5vIGluY2x1eWUgVVJMcyAvdGFza3MvLi4uL2RldGFpbC4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RUYXNrSWRzRnJvbVBlbmRpbmdBY3Rpb25zQXJncyhwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdKTogbnVtYmVyW10ge1xuICBjb25zdCBpZHM6IG51bWJlcltdID0gW11cbiAgY29uc3QgcHVzaElkID0gKHJhdzogdW5rbm93bikgPT4ge1xuICAgIGlmIChyYXcgPT0gbnVsbCkgcmV0dXJuXG4gICAgY29uc3QgbiA9IHBhcnNlSW50KFN0cmluZyhyYXcpLCAxMClcbiAgICBpZiAoIU51bWJlci5pc05hTihuKSkgaWRzLnB1c2gobilcbiAgfVxuICBwZW5kaW5nQWN0aW9ucy5mb3JFYWNoKGFjdGlvbiA9PiB7XG4gICAgaWYgKCFhY3Rpb24gfHwgdHlwZW9mIGFjdGlvbiAhPT0gJ29iamVjdCcpIHJldHVyblxuICAgIGNvbnN0IGFyZ3MgPSBhY3Rpb24udG9vbF9hcmdzXG4gICAgaWYgKCEoYXJncyAmJiB0eXBlb2YgYXJncyA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoYXJncykpKSByZXR1cm5cbiAgICBjb25zdCByZWMgPSBhcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgcHVzaElkKHJlYy50YXNrX2lkID8/IHJlYy5pZClcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZWMudGFza19pZHMpKSB7XG4gICAgICByZWMudGFza19pZHMuZm9yRWFjaChwdXNoSWQpXG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KHJlYy50YXNrcykpIHtcbiAgICAgIHJlYy50YXNrcy5mb3JFYWNoKHQgPT4ge1xuICAgICAgICBpZiAodCAmJiB0eXBlb2YgdCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodCkpIHtcbiAgICAgICAgICBjb25zdCB0cmVjID0gdCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICAgICAgIHB1c2hJZCh0cmVjLnRhc2tfaWQgPz8gdHJlYy5pZClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH0pXG4gIHJldHVybiBpZHNcbn1cblxuLyoqIHRhc2tfaWQgLyB0YXNrX2lkcyBlbiBwZW5kaW5nX2FjdGlvbnMgZGUgZGVsZXRlXyogKGxhIHJlc3B1ZXN0YSBwdWVkZSBubyBpbmNsdWlyIFVSTHMgL3Rhc2tzL+KApi9kZXRhaWwpLiAqL1xuZnVuY3Rpb24gZXh0cmFjdFRhc2tJZHNGcm9tRGVsZXRlUGVuZGluZ0FjdGlvbnMocGVuZGluZ0FjdGlvbnM6IFBlbmRpbmdBY3Rpb25bXSk6IG51bWJlcltdIHtcbiAgY29uc3QgaWRzOiBudW1iZXJbXSA9IFtdXG4gIHBlbmRpbmdBY3Rpb25zLmZvckVhY2goYWN0aW9uID0+IHtcbiAgICBpZiAoIWFjdGlvbiB8fCB0eXBlb2YgYWN0aW9uICE9PSAnb2JqZWN0JykgcmV0dXJuXG4gICAgY29uc3QgYXJncyA9IGFjdGlvbi50b29sX2FyZ3NcbiAgICBpZiAoIShhcmdzICYmIHR5cGVvZiBhcmdzID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShhcmdzKSkpIHJldHVyblxuICAgIGNvbnN0IHJlYyA9IGFyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICBpZiAoYWN0aW9uLnRvb2xfbmFtZSA9PT0gJ2RlbGV0ZV90YXNrJykge1xuICAgICAgY29uc3QgcmF3ID0gcmVjLnRhc2tfaWQgPz8gcmVjLmlkXG4gICAgICBpZiAocmF3ICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgbiA9IHBhcnNlSW50KFN0cmluZyhyYXcpLCAxMClcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4obikpIGlkcy5wdXNoKG4pXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhY3Rpb24udG9vbF9uYW1lID09PSAnZGVsZXRlX3Rhc2tzX2JhdGNoJykge1xuICAgICAgY29uc3QgbGlzdCA9IHJlYy50YXNrX2lkc1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobGlzdCkpIHtcbiAgICAgICAgbGlzdC5mb3JFYWNoKHRpZCA9PiB7XG4gICAgICAgICAgY29uc3QgbiA9IHBhcnNlSW50KFN0cmluZyh0aWQpLCAxMClcbiAgICAgICAgICBpZiAoIU51bWJlci5pc05hTihuKSkgaWRzLnB1c2gobilcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0pXG4gIHJldHVybiBpZHNcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEFnZW50SWRGcm9tRWRpdEFnZW50UGVuZGluZ0FjdGlvbnMocGVuZGluZ0FjdGlvbnM6IFBlbmRpbmdBY3Rpb25bXSk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBlZGl0QWN0aW9uID0gcGVuZGluZ0FjdGlvbnMuZmluZChhID0+IChhLnRvb2xfbmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gJ2VkaXRfYWdlbnQnKVxuICBpZiAoXG4gICAgIWVkaXRBY3Rpb24gfHxcbiAgICAhZWRpdEFjdGlvbi50b29sX2FyZ3MgfHxcbiAgICB0eXBlb2YgZWRpdEFjdGlvbi50b29sX2FyZ3MgIT09ICdvYmplY3QnIHx8XG4gICAgQXJyYXkuaXNBcnJheShlZGl0QWN0aW9uLnRvb2xfYXJncylcbiAgKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBjb25zdCByZWMgPSBlZGl0QWN0aW9uLnRvb2xfYXJncyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICBjb25zdCByYXcgPSByZWMuYWdlbnRfaWQgPz8gcmVjLmFnZW50SWRcbiAgcmV0dXJuIHJhdyAhPSBudWxsID8gU3RyaW5nKHJhdykgOiBudWxsXG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RBZ2VudElkRnJvbVBlbmRpbmdBY3Rpb25zQnlUb29sTmFtZShwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdLCB0b29sTmFtZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGFjdGlvbiA9IHBlbmRpbmdBY3Rpb25zLmZpbmQoYSA9PiAoYS50b29sX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09IHRvb2xOYW1lLnRvTG93ZXJDYXNlKCkpXG4gIGlmICghYWN0aW9uIHx8ICFhY3Rpb24udG9vbF9hcmdzIHx8IHR5cGVvZiBhY3Rpb24udG9vbF9hcmdzICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KGFjdGlvbi50b29sX2FyZ3MpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBjb25zdCByZWMgPSBhY3Rpb24udG9vbF9hcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIGNvbnN0IHJhdyA9IHJlYy5hZ2VudF9pZCA/PyByZWMuYWdlbnRJZCA/PyByZWMuaWRcbiAgcmV0dXJuIHJhdyAhPSBudWxsID8gU3RyaW5nKHJhdykgOiBudWxsXG59XG5cbi8qKiDDmmx0aW1vIHJlY3Vyc28gc2kgbm8gaGF5IGxpbmtzIG5pIHRvb2xfYXJncyBwYXJzZWFibGVzIChwLiBlai4gXCJJRCAqKjc1OTcxMDYqKlwiKS4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RUYXNrSWRzRnJvbUFzc2lzdGFudERlbGV0aW9uVGV4dCh0ZXh0OiBzdHJpbmcpOiBudW1iZXJbXSB7XG4gIGNvbnN0IGxhYmVsZWQgPSB0ZXh0Lm1hdGNoKC9cXGJJRFxccypcXCpcXCooXFxkKylcXCpcXCovaSlcbiAgaWYgKGxhYmVsZWQpIHtcbiAgICBjb25zdCBuID0gcGFyc2VJbnQobGFiZWxlZFsxXSwgMTApXG4gICAgcmV0dXJuIE51bWJlci5pc05hTihuKSA/IFtdIDogW25dXG4gIH1cbiAgY29uc3QgYm9sZCA9IHRleHQubWF0Y2goL1xcKlxcKihcXGR7NSx9KVxcKlxcKi8pXG4gIGlmIChib2xkKSB7XG4gICAgY29uc3QgbiA9IHBhcnNlSW50KGJvbGRbMV0sIDEwKVxuICAgIHJldHVybiBOdW1iZXIuaXNOYU4obikgPyBbXSA6IFtuXVxuICB9XG4gIHJldHVybiBbXVxufVxuXG5jb25zdCB1c2VTdGFibGVDYWxsYmFja3MgPSAoYXV0aFVzZXI6IENPUlVzZXIpID0+IHtcbiAgY29uc3QgY3VycmVudFVzZXIgPSB1c2VSZWY8Q2hhdE1lc3NhZ2VVc2VyPih7XG4gICAgaWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgbmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgIGF2YXRhcjogYXV0aFVzZXIucGljdHVyZSxcbiAgfSlcblxuICBpZiAoXG4gICAgY3VycmVudFVzZXIuY3VycmVudC5pZCAhPT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSB8fFxuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQubmFtZSAhPT0gYXV0aFVzZXIuZmlyc3ROYW1lIHx8XG4gICAgY3VycmVudFVzZXIuY3VycmVudC5hdmF0YXIgIT09IGF1dGhVc2VyLnBpY3R1cmVcbiAgKSB7XG4gICAgY3VycmVudFVzZXIuY3VycmVudCA9IHtcbiAgICAgIGlkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgbmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgYXZhdGFyOiBhdXRoVXNlci5waWN0dXJlLFxuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGN1cnJlbnRVc2VyOiBjdXJyZW50VXNlci5jdXJyZW50LFxuICB9XG59XG5cbmNvbnN0IHBhcnNlU1NFTGluZSA9IChsaW5lOiBzdHJpbmcpOiB7IGV2ZW50VHlwZTogc3RyaW5nOyBkYXRhOiB1bmtub3duIH0gfCBudWxsID0+IHtcbiAgaWYgKCFsaW5lLnRyaW0oKSkgcmV0dXJuIG51bGxcblxuICBjb25zdCBbZXZlbnRMaW5lLCBkYXRhTGluZV0gPSBsaW5lLnNwbGl0KCdcXG4nKVxuICBpZiAoIWV2ZW50TGluZSB8fCAhZGF0YUxpbmUpIHJldHVybiBudWxsXG5cbiAgY29uc3QgZXZlbnRUeXBlID0gZXZlbnRMaW5lLnJlcGxhY2UoJ2V2ZW50OiAnLCAnJykudHJpbSgpXG4gIGNvbnN0IGRhdGFTdHIgPSBkYXRhTGluZS5yZXBsYWNlKCdkYXRhOiAnLCAnJykudHJpbSgpXG5cbiAgdHJ5IHtcbiAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShkYXRhU3RyKVxuICAgIHJldHVybiB7IGV2ZW50VHlwZSwgZGF0YSB9XG4gIH0gY2F0Y2ggKHBhcnNlRXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIFNTRSBkYXRhOicsIHBhcnNlRXJyb3IsIGRhdGFTdHIpXG4gICAgcmV0dXJuIG51bGxcbiAgfVxufVxuXG5jb25zdCBwcm9jZXNzU1NFU3RyZWFtID0gYXN5bmMgKFxuICByZXNwb25zZTogUmVzcG9uc2UsXG4gIHRocmVhZElkOiBzdHJpbmcsXG4gIGNhbGxiYWNrczoge1xuICAgIG9uVGhpbmtpbmc6ICgpID0+IHZvaWRcbiAgICBvblRva2VuOiAoY29udGVudDogc3RyaW5nKSA9PiB2b2lkXG4gICAgb25Ob2RlOiAobWVzc2FnZTogc3RyaW5nLCB0aHJlYWRJZDogc3RyaW5nKSA9PiB2b2lkXG4gICAgb25Db21wbGV0ZTogKFxuICAgICAgZmluYWxDb250ZW50OiBzdHJpbmcsXG4gICAgICBzb3VyY2VzOiBhbnksXG4gICAgICBtZW1vcnlTZXNzaW9uSWQ6IHN0cmluZyxcbiAgICAgIGN1cnJlbnRUaHJlYWRJZDogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHM/OiBhbnlbXSB8IG51bGwsXG4gICAgICBzdWdnZXN0aW9ucz86IHN0cmluZ1tdIHwgbnVsbCxcbiAgICAgIGFnZW50SWQ/OiBzdHJpbmcgfCBudWxsXG4gICAgKSA9PiB2b2lkXG4gICAgb25FcnJvcjogKGVycm9yOiBhbnksIHRocmVhZElkOiBzdHJpbmcpID0+IHZvaWRcbiAgICBvbkFwcHJvdmFsUmVxdWlyZWQ/OiAoYXBwcm92YWw6IGFueSwgYWNjdW11bGF0ZWRDb250ZW50OiBzdHJpbmcsIGN1cnJlbnRUaHJlYWRJZDogc3RyaW5nKSA9PiB2b2lkXG4gIH1cbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5Py5nZXRSZWFkZXIoKVxuICBpZiAoIXJlYWRlcikge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gcmVhZGVyIGF2YWlsYWJsZScpXG4gIH1cblxuICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKClcbiAgbGV0IGJ1ZmZlciA9ICcnXG4gIGxldCBhY2N1bXVsYXRlZENvbnRlbnQgPSAnJ1xuICBsZXQgaXNTdHJlYW1Db21wbGV0ZSA9IGZhbHNlXG5cbiAgZnVuY3Rpb24gaGFuZGxlTGluZShsaW5lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZVNTRUxpbmUobGluZSlcbiAgICBpZiAoIXBhcnNlZCkgcmV0dXJuXG5cbiAgICBjb25zdCB7IGV2ZW50VHlwZSwgZGF0YSB9ID0gcGFyc2VkXG4gICAgY29uc3QgZXZlbnREYXRhID0gZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuXG4gICAgaWYgKGV2ZW50VHlwZSA9PT0gJ3RoaW5raW5nJykge1xuICAgICAgY2FsbGJhY2tzLm9uVGhpbmtpbmcoKVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAndG9rZW4nKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gdHlwZW9mIGV2ZW50RGF0YS5jb250ZW50ID09PSAnc3RyaW5nJyA/IGV2ZW50RGF0YS5jb250ZW50IDogJydcbiAgICAgIGFjY3VtdWxhdGVkQ29udGVudCA9IG1lcmdlU3RyZWFtQ2h1bmsoYWNjdW11bGF0ZWRDb250ZW50LCBjb250ZW50KVxuICAgICAgY2FsbGJhY2tzLm9uVG9rZW4oYWNjdW11bGF0ZWRDb250ZW50KVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnY29udGVudCcpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSB0eXBlb2YgZXZlbnREYXRhLmNvbnRlbnQgPT09ICdzdHJpbmcnID8gZXZlbnREYXRhLmNvbnRlbnQgOiAnJ1xuICAgICAgYWNjdW11bGF0ZWRDb250ZW50ID0gbWVyZ2VTdHJlYW1DaHVuayhhY2N1bXVsYXRlZENvbnRlbnQsIGNvbnRlbnQpXG4gICAgICBjYWxsYmFja3Mub25Ub2tlbihhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgICBpZiAoaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkKGV2ZW50RGF0YSkpIHtcbiAgICAgICAgY29uc3QgZmluYWxDb250ZW50ID0gY29udGVudCB8fCBhY2N1bXVsYXRlZENvbnRlbnRcbiAgICAgICAgY29uc3Qgc291cmNlcyA9IGV2ZW50RGF0YS5zb3VyY2VzIHx8IG51bGxcbiAgICAgICAgY29uc3QgbWVtb3J5U2Vzc2lvbklkID0gKGV2ZW50RGF0YS5tZW1vcnlfc2Vzc2lvbl9pZCBhcyBzdHJpbmcpIHx8ICcnXG4gICAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gQXJyYXkuaXNBcnJheShldmVudERhdGEuYXR0YWNobWVudHMpID8gZXZlbnREYXRhLmF0dGFjaG1lbnRzIDogbnVsbFxuICAgICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IEFycmF5LmlzQXJyYXkoZXZlbnREYXRhLnN1Z2dlc3RfcmVwbHkpXG4gICAgICAgICAgPyAoZXZlbnREYXRhLnN1Z2dlc3RfcmVwbHkgYXMgc3RyaW5nW10pXG4gICAgICAgICAgOiBBcnJheS5pc0FycmF5KGV2ZW50RGF0YS5zdWdnZXN0aW9ucylcbiAgICAgICAgICAgID8gKGV2ZW50RGF0YS5zdWdnZXN0aW9ucyBhcyBzdHJpbmdbXSlcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICBjb25zdCBhZ2VudElkUmF3ID0gZXZlbnREYXRhLmFnZW50X2lkID8/IGV2ZW50RGF0YS5hZ2VudElkXG4gICAgICAgIGNvbnN0IGNvbXBsZXRlZEFnZW50SWQgPVxuICAgICAgICAgIGFnZW50SWRSYXcgIT0gbnVsbCAmJiBTdHJpbmcoYWdlbnRJZFJhdykudHJpbSgpICE9PSAnJyA/IFN0cmluZyhhZ2VudElkUmF3KS50cmltKCkgOiBudWxsXG4gICAgICAgIGNhbGxiYWNrcy5vbkNvbXBsZXRlKFxuICAgICAgICAgIGZpbmFsQ29udGVudCxcbiAgICAgICAgICBzb3VyY2VzLFxuICAgICAgICAgIG1lbW9yeVNlc3Npb25JZCxcbiAgICAgICAgICB0aHJlYWRJZCxcbiAgICAgICAgICBhdHRhY2htZW50cyxcbiAgICAgICAgICBzdWdnZXN0aW9ucyxcbiAgICAgICAgICBjb21wbGV0ZWRBZ2VudElkXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ25vZGUnKSB7XG4gICAgICBpZiAoZXZlbnREYXRhLm1lc3NhZ2UgJiYgdHlwZW9mIGV2ZW50RGF0YS5tZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICBjYWxsYmFja3Mub25Ob2RlKGV2ZW50RGF0YS5tZXNzYWdlLCB0aHJlYWRJZClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ2NvbXBsZXRlJykge1xuICAgICAgY29uc3QgZmluYWxDb250ZW50ID0gKGV2ZW50RGF0YS5jb250ZW50IGFzIHN0cmluZykgfHwgYWNjdW11bGF0ZWRDb250ZW50XG4gICAgICBjb25zdCBzb3VyY2VzID0gKGV2ZW50RGF0YS5zb3VyY2VzIGFzIHVua25vd24pIHx8IG51bGxcbiAgICAgIGNvbnN0IG1lbW9yeVNlc3Npb25JZCA9IChldmVudERhdGEubWVtb3J5X3Nlc3Npb25faWQgYXMgc3RyaW5nKSB8fCAnJ1xuICAgICAgY29uc3QgYXR0YWNobWVudHMgPSBBcnJheS5pc0FycmF5KGV2ZW50RGF0YS5hdHRhY2htZW50cykgPyBldmVudERhdGEuYXR0YWNobWVudHMgOiBudWxsXG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IEFycmF5LmlzQXJyYXkoZXZlbnREYXRhLnN1Z2dlc3RfcmVwbHkpXG4gICAgICAgID8gKGV2ZW50RGF0YS5zdWdnZXN0X3JlcGx5IGFzIHN0cmluZ1tdKVxuICAgICAgICA6IEFycmF5LmlzQXJyYXkoZXZlbnREYXRhLnN1Z2dlc3Rpb25zKVxuICAgICAgICAgID8gKGV2ZW50RGF0YS5zdWdnZXN0aW9ucyBhcyBzdHJpbmdbXSlcbiAgICAgICAgICA6IG51bGxcbiAgICAgIGNvbnN0IGFnZW50SWRSYXcgPSBldmVudERhdGEuYWdlbnRfaWQgPz8gZXZlbnREYXRhLmFnZW50SWRcbiAgICAgIGNvbnN0IGNvbXBsZXRlZEFnZW50SWQgPSBhZ2VudElkUmF3ICE9IG51bGwgJiYgU3RyaW5nKGFnZW50SWRSYXcpLnRyaW0oKSAhPT0gJycgPyBTdHJpbmcoYWdlbnRJZFJhdykudHJpbSgpIDogbnVsbFxuICAgICAgY2FsbGJhY2tzLm9uQ29tcGxldGUoZmluYWxDb250ZW50LCBzb3VyY2VzLCBtZW1vcnlTZXNzaW9uSWQsIHRocmVhZElkLCBhdHRhY2htZW50cywgc3VnZ2VzdGlvbnMsIGNvbXBsZXRlZEFnZW50SWQpXG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdhcHByb3ZhbF9yZXF1aXJlZCcpIHtcbiAgICAgIGNhbGxiYWNrcy5vbkFwcHJvdmFsUmVxdWlyZWQ/LihldmVudERhdGEsIGFjY3VtdWxhdGVkQ29udGVudCwgdGhyZWFkSWQpXG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAgIGNhbGxiYWNrcy5vbkVycm9yKGV2ZW50RGF0YS5lcnJvciwgdGhyZWFkSWQpXG4gICAgfVxuICB9XG5cbiAgd2hpbGUgKCFpc1N0cmVhbUNvbXBsZXRlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWF3YWl0LWluLWxvb3BcbiAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpXG4gICAgaWYgKGRvbmUpIHtcbiAgICAgIGlzU3RyZWFtQ29tcGxldGUgPSB0cnVlXG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGJ1ZmZlciArPSBkZWNvZGVyLmRlY29kZSh2YWx1ZSwgeyBzdHJlYW06IHRydWUgfSlcbiAgICBjb25zdCBsaW5lcyA9IGJ1ZmZlci5zcGxpdCgnXFxuXFxuJylcbiAgICBidWZmZXIgPSBsaW5lcy5wb3AoKSB8fCAnJ1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgaGFuZGxlTGluZShsaW5lc1tpXSlcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHVzZUNoYXRNYW5hZ2VyID0gKHtcbiAgY2hhdElkOiBpbml0aWFsQ2hhdElkLFxuICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gIG9uRXJyb3IsXG4gIGFnZW50cyA9IFtdLFxufTogVXNlQ2hhdE1hbmFnZXJQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCBhdXRoVXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCB7XG4gICAgcHJvamVjdCxcbiAgICBzZXRQcm9qZWN0LFxuICAgIGNsaWVudCxcbiAgICBzZXRDbGllbnQsXG4gICAgdGFzayxcbiAgICBhZ2VudCxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgY2hpcHNQcm9qZWN0LFxuICAgIHNldENoaXBzUHJvamVjdCxcbiAgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCBldmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgeyBmZXRjaFByb2plY3RzIH0gPSB1c2VQcm9qZWN0cygpXG4gIGNvbnN0IHsgY3VycmVudFVzZXIgfSA9IHVzZVN0YWJsZUNhbGxiYWNrcyhhdXRoVXNlcilcbiAgY29uc3QgeyBnZXRUYWJUYXNrRGVmYXVsdCB9ID0gdXNlVGFiVGFza0RlZmF1bHQoKVxuICBjb25zdCBjdXJyZW50TWVzc2FnZUlkID0gdXNlUmVmKHV1aWR2NCgpKVxuICBjb25zdCBjdXJyZW50VXNlclF1ZXN0aW9uID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGN1cnJlbnRDaGF0SWQgPSB1c2VSZWYoaW5pdGlhbENoYXRJZCB8fCB1dWlkdjQoKSlcbiAgY29uc3QgcmVwb3J0ZWRFdmVudCA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgbWVzc2FnZXNSZWYgPSB1c2VSZWY8Q2hhdE1lc3NhZ2VbXT4oW10pXG4gIC8qKlxuICAgKiBHdWFyZGEgaW5mbyBkZWwgw7psdGltbyBhcHByb3ZhbCBtYW51YWwgKGN1YW5kbyBlbCB1c3VhcmlvIHRpcGVhIFwic2lcIi9cIm5vXCIgZW4gbHVnYXJcbiAgICogZGUgY2xpY2tlYXIgZWwgYm90w7NuKS4gRW4gbWFudWFsIGFwcHJvdmFsLCBgaGFuZGxlQXBwcm92YWxSZXF1aXJlZGAgcmV0b3JuYSBlYXJseVxuICAgKiBzaW4gYWdyZWdhciB1biBtZW5zYWplIGNvbiBgYXBwcm92YWxgLCBhc8OtIHF1ZSBsYSBsw7NnaWNhIGRlIHJlZmV0Y2ggZW4gYG9uU3RyZWFtRmluaXNoYFxuICAgKiBubyBsbyBkZXRlY3RhIHbDrWEgYHByZXZpb3VzTWVzc2FnZS5hcHByb3ZhbGAuIExvIGd1YXJkYW1vcyBhY8OhIHBhcmEgY29uc3VtaXJsbyBkZXNwdcOpcy5cbiAgICovXG4gIGNvbnN0IGxhc3RNYW51YWxBcHByb3ZhbFJlZiA9IHVzZVJlZjx7XG4gICAgdG9vbE5hbWU6IHN0cmluZ1xuICAgIHRvb2xBcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGxcbiAgfSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGlzUHJvY2Vzc2luZ1JlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgZmlyc3RUaW1lUmVmID0gdXNlUmVmKGZhbHNlKVxuICAvKiogSWQgZGVsIHBsYWNlaG9sZGVyIGRlbCBtZW5zYWplIGVuIHN0cmVhbWluZyBhY3Rpdm8gKHNpIGhheSkuICovXG4gIGNvbnN0IHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgLyoqXG4gICAqIENoYXQgYWwgcXVlIHBlcnRlbmVjZSBlbCBzdHJlYW0gYWN0dWFsbWVudGUgYWN0aXZvLiBTaSBjYW1iaWEgZWwgY2hhdFxuICAgKiBtaWVudHJhcyB1biBzdHJlYW0gZXN0w6EgZW4gdnVlbG8sIGRlc2NhcnRhbW9zIGxvcyB0b2tlbnMgcmVzaWR1YWxlc1xuICAgKiBxdWUgcHVlZGFuIGxsZWdhciBhbnRlcyBkZSBxdWUgZWwgYWJvcnQgc2UgY29tcGxldGUuXG4gICAqL1xuICBjb25zdCBhY3RpdmVTdHJlYW1DaGF0SWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgLyoqIFNldHRlciBpbmRpcmVjdG8gcGFyYSBhYm9ydGFyIGVsIHN0cmVhbSBhbnRlcyBkZSBxdWUgZWwgaG9vayBkZVxuICAgKiBvcnF1ZXN0YWRvciBlc3TDqSBpbmljaWFsaXphZG8gKHNlIGxpbmtlYSBtw6FzIGFiYWpvKS4gKi9cbiAgY29uc3QgYWJvcnRTdHJlYW1TaWxlbnRseVJlZiA9IHVzZVJlZjwoKSA9PiB2b2lkPigoKSA9PiB1bmRlZmluZWQpXG4gIGNvbnN0IGNsZWFyU3RyZWFtVWlSZWYgPSB1c2VSZWY8KCkgPT4gdm9pZD4oKCkgPT4gdW5kZWZpbmVkKVxuICBjb25zdCBbYWN0aXZlTG9hZGluZ3MsIHNldEFjdGl2ZUxvYWRpbmdzXSA9IHVzZVN0YXRlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KHt9KVxuXG4gIGNvbnN0IGlzV2ViU2VhcmNoQWN0aXZlUmVmID0gdXNlUmVmKGlzV2ViU2VhcmNoQWN0aXZlKVxuICBjb25zdCBpc0RlZXBTZWFyY2hBY3RpdmVSZWYgPSB1c2VSZWYoaXNEZWVwU2VhcmNoQWN0aXZlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCA9IGlzV2ViU2VhcmNoQWN0aXZlXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQgPSBpc0RlZXBTZWFyY2hBY3RpdmVcbiAgfSwgW2lzV2ViU2VhcmNoQWN0aXZlLCBpc0RlZXBTZWFyY2hBY3RpdmVdKVxuXG4gIGNvbnN0IHsgbG9hZGluZ01lc3NhZ2VzLCBtZXNzYWdlcywgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLCBsb2FkTWVzc2FnZXMsIGFkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2UsIGhhbmRsZVNjcm9sbCB9ID1cbiAgICB1c2VDaGF0TWVzc2FnZXMoe1xuICAgICAgY2hhdElkOiBpbml0aWFsQ2hhdElkIHx8IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgIGN1cnJlbnRVc2VyLFxuICAgICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgICAgb25FcnJvcixcbiAgICAgIGFnZW50cyxcbiAgICB9KVxuXG4gIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtbG9hZGluZy1tZXNzYWdlcy1jaGFuZ2VkJywge1xuICAgICAgZGV0YWlsOiB7IGxvYWRpbmdNZXNzYWdlcyB9LFxuICAgIH0pXG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudClcbiAgfSwgW2xvYWRpbmdNZXNzYWdlc10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaW5pdGlhbENoYXRJZCAmJiBpbml0aWFsQ2hhdElkICE9PSBjdXJyZW50Q2hhdElkLmN1cnJlbnQpIHtcbiAgICAgIC8vIFNpIGhheSB1biBzdHJlYW0gZW4gY3Vyc28sIGFib3J0YXJsbyBzaWxlbmNpb3NhbWVudGUgcGFyYSBxdWUgbG9zXG4gICAgICAvLyB0b2tlbnMgcmVzaWR1YWxlcyBubyBzZSBlc2NyaWJhbiBlbiBlbCBjaGF0IG51ZXZvLlxuICAgICAgYWJvcnRTdHJlYW1TaWxlbnRseVJlZi5jdXJyZW50KClcblxuICAgICAgLy8gTGltcGlhciBjb250ZXh0byBnbG9iYWwgYWwgY2FtYmlhciBkZSBjb252ZXJzYWNpw7NuXG4gICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG5cbiAgICAgIGN1cnJlbnRDaGF0SWQuY3VycmVudCA9IGluaXRpYWxDaGF0SWRcbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSBudWxsXG4gICAgICByZXBvcnRlZEV2ZW50LmN1cnJlbnQgPSBmYWxzZVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBzdHJlYW1pbmdTdG9yZS5jbGVhcigpXG5cbiAgICAgIGxvYWRNZXNzYWdlcygpXG4gICAgfVxuICB9LCBbaW5pdGlhbENoYXRJZCwgcHJvamVjdCwgc2V0UHJvamVjdCwgc2V0Q2xpZW50LCBzZXRDaGlwc1Byb2plY3QsIGxvYWRNZXNzYWdlc10pXG5cbiAgLy8gU2luY3Jvbml6YXIgY2hpcHNQcm9qZWN0IGN1YW5kbyBoYXkgbWVuc2FqZXMgY29uIHByb2plY3RJZCBwZXJvIGNoaXBzUHJvamVjdCBubyBzZSBoYSBzZXRlYWRvXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGNoaXBzUHJvamVjdCB8fCBsb2FkaW5nTWVzc2FnZXMpIHJldHVyblxuICAgIGNvbnN0IGxhc3RNc2dXaXRoUHJvamVjdCA9IG1lc3NhZ2VzLmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG4gICAgY29uc3QgeyBwcm9qZWN0SWQsIHByb2plY3ROYW1lIH0gPSBsYXN0TXNnV2l0aFByb2plY3QgfHwge31cbiAgICBpZiAoIXByb2plY3RJZCkgcmV0dXJuXG5cbiAgICBmZXRjaFByb2plY3RzKHByb2plY3RJZCkudGhlbihwcm9qZWN0cyA9PiB7XG4gICAgICBjb25zdCBmb3VuZCA9IHByb2plY3RzPy5maW5kKHAgPT4gTnVtYmVyKHAuaWQpID09PSBOdW1iZXIocHJvamVjdElkKSlcbiAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICBzZXRDaGlwc1Byb2plY3Qoe1xuICAgICAgICAgIHByb2plY3ROYW1lOiBmb3VuZC5uYW1lLFxuICAgICAgICAgIGNsaWVudE5hbWU6IGZvdW5kLmNsaWVudD8ubmFtZSB8fCAnJyxcbiAgICAgICAgICBwcm9qZWN0SWQ6IFN0cmluZyhmb3VuZC5pZCksXG4gICAgICAgIH0pXG4gICAgICAgIHNldFByb2plY3QoZm91bmQpXG4gICAgICB9IGVsc2UgaWYgKHByb2plY3ROYW1lKSB7XG4gICAgICAgIHNldENoaXBzUHJvamVjdCh7XG4gICAgICAgICAgcHJvamVjdE5hbWUsXG4gICAgICAgICAgY2xpZW50TmFtZTogJycsXG4gICAgICAgICAgcHJvamVjdElkOiBTdHJpbmcocHJvamVjdElkKSxcbiAgICAgICAgfSlcbiAgICAgICAgc2V0UHJvamVjdCh7IGlkOiBOdW1iZXIocHJvamVjdElkKSwgbmFtZTogcHJvamVjdE5hbWUgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9LCBbbWVzc2FnZXMsIGNoaXBzUHJvamVjdCwgbG9hZGluZ01lc3NhZ2VzLCBmZXRjaFByb2plY3RzLCBzZXRDaGlwc1Byb2plY3QsIHNldFByb2plY3RdKVxuXG4gIC8vIFNpbmNyb25pemFyIGNsaWVudCBjdWFuZG8gaGF5IG1lbnNhamVzIGNvbiBjbGllbnRJZCBwZXJvIGNsaWVudCBubyBzZSBoYSBzZXRlYWRvXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGNsaWVudCB8fCBsb2FkaW5nTWVzc2FnZXMpIHJldHVyblxuICAgIGNvbnN0IGxhc3RNc2dXaXRoQ2xpZW50ID0gbWVzc2FnZXMuZmlsdGVyKG1zZyA9PiBtc2cuY2xpZW50SWQgIT0gbnVsbCAmJiBtc2cuY2xpZW50TmFtZSkuYXQoLTEpXG4gICAgY29uc3QgeyBjbGllbnRJZDogbXNnQ2xpZW50SWQsIGNsaWVudE5hbWU6IG1zZ0NsaWVudE5hbWUgfSA9IGxhc3RNc2dXaXRoQ2xpZW50IHx8IHt9XG4gICAgaWYgKG1zZ0NsaWVudElkID09IG51bGwgfHwgIW1zZ0NsaWVudE5hbWUpIHJldHVyblxuXG4gICAgc2V0Q2xpZW50Py4oeyBpZDogTnVtYmVyKG1zZ0NsaWVudElkKSwgbmFtZTogbXNnQ2xpZW50TmFtZSB9KVxuICB9LCBbbWVzc2FnZXMsIGNsaWVudCwgbG9hZGluZ01lc3NhZ2VzLCBzZXRDbGllbnRdKVxuXG4gIGNvbnN0IGhhbmRsZVN0cmVhbUVycm9yID0gdXNlQ2FsbGJhY2soXG4gICAgKGVycm9yTWVzc2FnZT86IHN0cmluZywgZXJyb3JSYXdNZXNzYWdlPzogc3RyaW5nKSA9PiB7XG4gICAgICBjbGVhclN0cmVhbVVpUmVmLmN1cnJlbnQoKVxuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcbiAgICAgIHN0cmVhbWluZ1N0b3JlLmNsZWFyKClcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmVtb3ZlTWVzc2FnZSh0ZW1wTWVzc2FnZUlkKVxuXG4gICAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgICAgZXJyb3JNZXNzYWdlID09PSBcIkFjY2VzcyBkZW5pZWQ6IFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoaXMgYWdlbnRcIlxuICAgICAgICAgID8gdCgnY2hhdC5lcnJvckFjY2Vzc0RlbmllZCcpXG4gICAgICAgICAgOiBlcnJvck1lc3NhZ2UgPT09ICdpbnZhbGlkX3JlcXVlc3RfZXJyb3InICYmIGVycm9yUmF3TWVzc2FnZT8uaW5jbHVkZXMoJ3Byb21wdCBpcyB0b28gbG9uZycpXG4gICAgICAgICAgICA/IHQoJ2NoYXQuZXJyb3JQcm9tcHRUb29Mb25nJywgeyB1c2VkOiBlcnJvclJhd01lc3NhZ2UubWF0Y2goLyhcXGQrKSB0b2tlbnMvKT8uWzFdID8/ICcnIH0pXG4gICAgICAgICAgICA6IHQoJ2NoYXQuZXJyb3InKVxuXG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9YCxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgaXNFcnJvcjogdHJ1ZSxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2UsIHRdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1VcGRhdGUgPSB1c2VDYWxsYmFjayhcbiAgICAoY29udGVudDogc3RyaW5nLCBzb3VyY2VzOiBhbnksIG1lbW9yeVNlc3Npb25JZDogc3RyaW5nKSA9PiB7XG4gICAgICAvLyBTaSBlbCBjaGF0IGNhbWJpw7MgbWllbnRyYXMgZWwgc3RyZWFtIGVzdGFiYSBlbiB2dWVsbywgZGVzY2FydGFyIGVsXG4gICAgICAvLyB0b2tlbiByZXNpZHVhbDogbm8gZGViZSBwaW50YXJzZSBlbiBlbCBudWV2byBjaGF0LlxuICAgICAgaWYgKGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ICE9IG51bGwgJiYgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgIT09IGN1cnJlbnRDaGF0SWQuY3VycmVudCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcblxuICAgICAgLy8gUHJpbWVyYSBsbGFtYWRhIGRlIGVzdGUgc3RyZWFtOiBpbnNlcnRhbW9zIGVsIHBsYWNlaG9sZGVyIGVuIGVsXG4gICAgICAvLyBhcnJheSBkZSBgbWVzc2FnZXNgIHVuYSDDum5pY2EgdmV6LiBMYXMgbGxhbWFkYXMgc3Vic2lndWllbnRlcyB5YSBub1xuICAgICAgLy8gdG9jYW4gYG1lc3NhZ2VzYDsgZWwgdGV4dG8gdml2ZSBlbiBlbCBzdHJlYW1pbmdTdG9yZSAoZXh0ZXJubyksIHBvclxuICAgICAgLy8gbG8gcXVlIFJlYWN0IG5vIHJlLXJlbmRlcml6YSBlbCDDoXJib2wgY29tcGxldG8gZW4gY2FkYSB0b2tlbi5cbiAgICAgIGlmIChzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgIT09IHRlbXBNZXNzYWdlSWQpIHtcbiAgICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gdGVtcE1lc3NhZ2VJZFxuICAgICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IGN1cnJlbnRDaGF0SWQuY3VycmVudFxuICAgICAgICBzdHJlYW1pbmdTdG9yZS5zdGFydCh0ZW1wTWVzc2FnZUlkKVxuICAgICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgICBpZDogdGVtcE1lc3NhZ2VJZCxcbiAgICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgICAgc291cmNlcyxcbiAgICAgICAgICBtZW1vcnlTZXNzaW9uSWQsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIHN0cmVhbWluZ1N0b3JlLnNldFRleHQodGVtcE1lc3NhZ2VJZCwgY29udGVudClcbiAgICB9LFxuICAgIFthZGRNZXNzYWdlXVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtRmluaXNoID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKFxuICAgICAgY29udGVudDogc3RyaW5nLFxuICAgICAgc291cmNlczogYW55LFxuICAgICAgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgICByYXdBdHRhY2htZW50cz86IGFueVtdIHwgbnVsbCxcbiAgICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10gfCBudWxsLFxuICAgICAgY29tcGxldGVkQWdlbnRJZD86IHN0cmluZyB8IG51bGxcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IHRlbXBNZXNzYWdlSWQgPSBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fS1zdHJlYW1pbmdgXG4gICAgICBzdHJlYW1pbmdTdG9yZS5jbGVhcigpXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIHJlbW92ZU1lc3NhZ2UodGVtcE1lc3NhZ2VJZClcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gbm9ybWFsaXplQXNzaXN0YW50QXR0YWNobWVudHMocmF3QXR0YWNobWVudHMpXG5cbiAgICAgIC8vIERldGVjdGFyIHRvZGFzIGxhcyBVUkxzIGRlIHRhcmVhcyAoLi4uL3Rhc2tzLzEyMy9kZXRhaWx8bWVzc2FnZXxtZXNzYWdlc3xmaWxlc3xoaXN0b3J5fGhvdXJzKVxuICAgICAgY29uc3QgdGFza1VybFJlZ2V4ID0gbmV3IFJlZ0V4cChUQVNLX1VSTF9SRUdFWF9QQVRURVJOLCAnZycpXG4gICAgICBjb25zdCBtYXRjaGVzID0gWy4uLmNvbnRlbnQubWF0Y2hBbGwodGFza1VybFJlZ2V4KV1cblxuICAgICAgbGV0IGNvbnRlbnRUb0FkZCA9IGNvbnRlbnRcbiAgICAgIGNvbnN0IHByZXZpb3VzTWVzc2FnZSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmlsdGVyKG0gPT4gbS5pZCAhPT0gdGVtcE1lc3NhZ2VJZCkuYXQoLTEpXG4gICAgICBjb25zdCBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlID0gcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbCAhPSBudWxsXG4gICAgICBjb25zdCBUQVNLX0NSRUFUSU9OX1RPT0xTID0gWydjcmVhdGVfdGFzaycsICdjcmVhdGVfdGFza3NfYmF0Y2gnLCAnY2xvbmVfdGFzayddXG4gICAgICBjb25zdCBUQVNLX0VESVRfVE9PTFMgPSBbXG4gICAgICAgICdlZGl0X3Rhc2snLFxuICAgICAgICAnZWRpdF90YXNrc19iYXRjaCcsXG4gICAgICAgICd0YXNrX2Fzc2lnbicsXG4gICAgICAgICd0YXNrX3VuYXNzaWduJyxcbiAgICAgICAgJ3VwZGF0ZV90YXNrX3R5cGUnLFxuICAgICAgICAndXBkYXRlX2VzdGltYXRlZF9ob3VycycsXG4gICAgICAgICdhc3NpZ25fdGFza19sYWJlbCcsXG4gICAgICBdXG4gICAgICBjb25zdCBUQVNLX0RFTEVURV9UT09MUyA9IFsnZGVsZXRlX3Rhc2snLCAnZGVsZXRlX3Rhc2tzX2JhdGNoJ11cbiAgICAgIGNvbnN0IHBlbmRpbmdBY3Rpb25zID0gcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zIHx8IFtdXG4gICAgICBjb25zdCB3YXNUYXNrQ3JlYXRpb24gPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBUQVNLX0NSRUFUSU9OX1RPT0xTLmluY2x1ZGVzKGFjdGlvbi50b29sX25hbWUpKVxuICAgICAgY29uc3Qgd2FzVGFza0VkaXQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBUQVNLX0VESVRfVE9PTFMuaW5jbHVkZXMoYWN0aW9uLnRvb2xfbmFtZSkpXG4gICAgICBjb25zdCB3YXNUYXNrRGVsZXRlID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gVEFTS19ERUxFVEVfVE9PTFMuaW5jbHVkZXMoYWN0aW9uLnRvb2xfbmFtZSkpXG4gICAgICBjb25zdCB3YXNDcmVhdGVBZ2VudEFwcHJvdmVkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsU3RhdHVzID09PSAnYXBwcm92ZWQnICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBhY3Rpb24udG9vbF9uYW1lID09PSAnY3JlYXRlX2FnZW50JylcbiAgICAgIGNvbnN0IHdhc0NvbmZpZ3VyZUFnZW50QWNjZXNzQXBwcm92ZWQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWxTdGF0dXMgPT09ICdhcHByb3ZlZCcgJiZcbiAgICAgICAgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IChhY3Rpb24udG9vbF9uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAnY29uZmlndXJlX2FnZW50X2FjY2VzcycpXG4gICAgICBsZXQgY3JlYXRlQWdlbnRGb2xsb3dVcDogeyBhZ2VudElkOiBzdHJpbmcgfSB8IHVuZGVmaW5lZFxuICAgICAgaWYgKHdhc0NyZWF0ZUFnZW50QXBwcm92ZWQgJiYgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgJiYgY29tcGxldGVkQWdlbnRJZD8udHJpbSgpKSB7XG4gICAgICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAgPSB7IGFnZW50SWQ6IGNvbXBsZXRlZEFnZW50SWQudHJpbSgpIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHdhc0NvbmZpZ3VyZUFnZW50QWNjZXNzQXBwcm92ZWQgJiZcbiAgICAgICAgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgJiZcbiAgICAgICAgKGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKSB8fFxuICAgICAgICAgIGV4dHJhY3RBZ2VudElkRnJvbVBlbmRpbmdBY3Rpb25zQnlUb29sTmFtZShwZW5kaW5nQWN0aW9ucywgJ2NvbmZpZ3VyZV9hZ2VudF9hY2Nlc3MnKSlcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjb25maWd1cmVkQWdlbnRJZCA9XG4gICAgICAgICAgY29tcGxldGVkQWdlbnRJZD8udHJpbSgpIHx8XG4gICAgICAgICAgZXh0cmFjdEFnZW50SWRGcm9tUGVuZGluZ0FjdGlvbnNCeVRvb2xOYW1lKHBlbmRpbmdBY3Rpb25zLCAnY29uZmlndXJlX2FnZW50X2FjY2VzcycpXG4gICAgICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAgPSB7XG4gICAgICAgICAgYWdlbnRJZDogY29uZmlndXJlZEFnZW50SWQgYXMgc3RyaW5nLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh3YXNDcmVhdGVBZ2VudEFwcHJvdmVkKSB7XG4gICAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRIaXRsT3B0aW9uLCB7XG4gICAgICAgICAgYWdlbnRfdHlwZTogZ2V0SGl0bEFuYWx5dGljc0FnZW50VHlwZShhZ2VudCksXG4gICAgICAgICAgYWN0aW9uX3R5cGU6IGJ1aWxkSGl0bEFjdGlvblR5cGVMaXN0KHBlbmRpbmdBY3Rpb25zKSxcbiAgICAgICAgICBkZWNpc2lvbjogJ2FjY2VwdCcsXG4gICAgICAgICAgb3B0aW9uOiAnY3JlYXRlX2FnZW50JyxcbiAgICAgICAgICAuLi4oY29tcGxldGVkQWdlbnRJZD8udHJpbSgpID8geyBjcmVhdGVkX2FnZW50X2lkOiBjb21wbGV0ZWRBZ2VudElkLnRyaW0oKSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCB3YXNFZGl0QWdlbnRBcHByb3ZlZCA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbFN0YXR1cyA9PT0gJ2FwcHJvdmVkJyAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gKGFjdGlvbi50b29sX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICdlZGl0X2FnZW50JylcblxuICAgICAgbGV0IGVkaXRBZ2VudEZvbGxvd1VwOiB7IGFnZW50SWQ6IHN0cmluZyB9IHwgdW5kZWZpbmVkXG4gICAgICBpZiAod2FzRWRpdEFnZW50QXBwcm92ZWQpIHtcbiAgICAgICAgY29uc3QgZnJvbVN0cmVhbSA9IGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKVxuICAgICAgICBjb25zdCBmcm9tQXJncyA9IGV4dHJhY3RBZ2VudElkRnJvbUVkaXRBZ2VudFBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zKVxuICAgICAgICBjb25zdCByZXNvbHZlZEFnZW50SWQgPSBmcm9tU3RyZWFtIHx8IGZyb21BcmdzXG4gICAgICAgIGlmIChyZXNvbHZlZEFnZW50SWQpIHtcbiAgICAgICAgICBlZGl0QWdlbnRGb2xsb3dVcCA9IHsgYWdlbnRJZDogcmVzb2x2ZWRBZ2VudElkIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0YXNrSWRzRnJvbVVybHMgPSBtYXRjaGVzLm1hcChtYXRjaCA9PiBwYXJzZUludChtYXRjaFsxXSwgMTApKVxuICAgICAgY29uc3QgdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbCA9IGV4dHJhY3RUYXNrSWRzRnJvbURlbGV0ZVBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zKVxuICAgICAgY29uc3QgdGFza0lkc0Zyb21EZWxldGlvblRleHQgPVxuICAgICAgICB3YXNUYXNrRGVsZXRlICYmIHRhc2tJZHNGcm9tVXJscy5sZW5ndGggPT09IDAgJiYgdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbC5sZW5ndGggPT09IDBcbiAgICAgICAgICA/IGV4dHJhY3RUYXNrSWRzRnJvbUFzc2lzdGFudERlbGV0aW9uVGV4dChjb250ZW50KVxuICAgICAgICAgIDogW11cbiAgICAgIGNvbnN0IHRhc2tJZHNGb3JEYXNoYm9hcmQgPVxuICAgICAgICB0YXNrSWRzRnJvbVVybHMubGVuZ3RoID4gMFxuICAgICAgICAgID8gdGFza0lkc0Zyb21VcmxzXG4gICAgICAgICAgOiB0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbFxuICAgICAgICAgICAgOiB0YXNrSWRzRnJvbURlbGV0aW9uVGV4dFxuXG4gICAgICBjb25zdCBzaG91bGRTeW5jRGFzaGJvYXJkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICAod2FzVGFza0NyZWF0aW9uIHx8IHdhc1Rhc2tFZGl0IHx8IHdhc1Rhc2tEZWxldGUpICYmXG4gICAgICAgIHRhc2tJZHNGb3JEYXNoYm9hcmQubGVuZ3RoID4gMFxuXG4gICAgICBpZiAoc2hvdWxkU3luY0Rhc2hib2FyZCkge1xuICAgICAgICBjb25zdCB0YXNrSWRzID0gdGFza0lkc0ZvckRhc2hib2FyZFxuICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgdGFiID0gYXdhaXQgZ2V0VGFiVGFza0RlZmF1bHQodGFza0lkc1swXSlcbiAgICAgICAgICBjb25zdCB0YWJTZWdtZW50ID0gdGFiID8gYC8ke3RhYn1gIDogJy9kZXRhaWwnXG4gICAgICAgICAgY29udGVudFRvQWRkID0gY29udGVudC5yZXBsYWNlKHRhc2tVcmxSZWdleCwgdXJsID0+XG4gICAgICAgICAgICB1cmwucmVwbGFjZSgvXFwvKGRldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpKD89JHxcXD8pLywgdGFiU2VnbWVudClcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXN0UHJvamVjdE1lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG4gICAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWRSYXcgPSBwcm9qZWN0Py5pZCB8fCBsYXN0UHJvamVjdE1lc3NhZ2U/LnByb2plY3RJZFxuICAgICAgICBjb25zdCBjb250ZXh0UHJvamVjdElkID0gY29udGV4dFByb2plY3RJZFJhdyA/IHBhcnNlSW50KFN0cmluZyhjb250ZXh0UHJvamVjdElkUmF3KSwgMTApIDogbnVsbFxuICAgICAgICBjb25zdCBwYXRoTWF0Y2ggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUubWF0Y2goL15cXC9wcm9qZWN0c1xcLyhcXGQrKVxcLy8pXG4gICAgICAgIGNvbnN0IHJvdXRlUHJvamVjdElkID0gcGF0aE1hdGNoID8gcGFyc2VJbnQocGF0aE1hdGNoWzFdLCAxMCkgOiBudWxsXG4gICAgICAgIGNvbnN0IGlzT25Qcm9qZWN0Um91dGUgPSBjb250ZXh0UHJvamVjdElkICYmIHJvdXRlUHJvamVjdElkICYmIGNvbnRleHRQcm9qZWN0SWQgPT09IHJvdXRlUHJvamVjdElkXG5cbiAgICAgICAgaWYgKGlzT25Qcm9qZWN0Um91dGUpIHtcbiAgICAgICAgICBpZiAod2FzVGFza0NyZWF0aW9uKSB7XG4gICAgICAgICAgICB3aW5kb3cubmV3UHJvamVjdERhc2hib2FyZD8uYWRkRXhpc3RpbmdUYXNrVG9EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0VkaXQpIHtcbiAgICAgICAgICAgIHdpbmRvdy5uZXdQcm9qZWN0RGFzaGJvYXJkPy5lZGl0RXhpc3RpbmdUYXNrSW5EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0RlbGV0ZSkge1xuICAgICAgICAgICAgd2luZG93Lm5ld1Byb2plY3REYXNoYm9hcmQ/LmRlbGV0ZUV4aXN0aW5nVGFza0Zyb21EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBSZWZldGNoIGRlbCB0YXNrIHBhbmVsIHNpIGVzdMOhIGFiaWVydG8geSBsYSB0b29sIGFwcm9iYWRhIGVkaXTDsy9ib3Jyw7MgZXNhIHRhcmVhLlxuICAgICAgLy8gQ3VicmUgbG9zIGRvcyBmbHVqb3MgZGUgYXBwcm92YWw6XG4gICAgICAvLyAgIDEpIEFwcHJvdmFsIHBvciBib3TDs24g4oaSIGBwcmV2aW91c01lc3NhZ2UuYXBwcm92YWwucGVuZGluZ19hY3Rpb25zYCAodsOtYSBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlKVxuICAgICAgLy8gICAyKSBNYW51YWwgYXBwcm92YWwgKHVzdWFyaW8gdGlwZWEgXCJzaVwiL1wibm9cIikg4oaSIGBsYXN0TWFudWFsQXBwcm92YWxSZWYuY3VycmVudGBcbiAgICAgIGNvbnN0IG9wZW5UYXNrUGFuZWxJZCA9IHdpbmRvdy50YXNrUGFuZWw/LnRhc2tJZFxuICAgICAgY29uc3QgbWFudWFsQXBwcm92YWwgPSBsYXN0TWFudWFsQXBwcm92YWxSZWYuY3VycmVudFxuICAgICAgbGFzdE1hbnVhbEFwcHJvdmFsUmVmLmN1cnJlbnQgPSBudWxsIC8vIGNvbnN1bWlyIHVuYSBzb2xhIHZlelxuICAgICAgY29uc3QgbWFudWFsV2FzVGFza0VkaXQgPSAhIW1hbnVhbEFwcHJvdmFsICYmIFRBU0tfRURJVF9UT09MUy5pbmNsdWRlcyhtYW51YWxBcHByb3ZhbC50b29sTmFtZSlcbiAgICAgIGNvbnN0IG1hbnVhbFdhc1Rhc2tEZWxldGUgPSAhIW1hbnVhbEFwcHJvdmFsICYmIFRBU0tfREVMRVRFX1RPT0xTLmluY2x1ZGVzKG1hbnVhbEFwcHJvdmFsLnRvb2xOYW1lKVxuXG4gICAgICBpZiAob3BlblRhc2tQYW5lbElkICYmICh3YXNUYXNrRWRpdCB8fCB3YXNUYXNrRGVsZXRlIHx8IG1hbnVhbFdhc1Rhc2tFZGl0IHx8IG1hbnVhbFdhc1Rhc2tEZWxldGUpKSB7XG4gICAgICAgIGNvbnN0IG1hbnVhbFBzZXVkb0FjdGlvbjogUGVuZGluZ0FjdGlvbiB8IG51bGwgPSBtYW51YWxBcHByb3ZhbFxuICAgICAgICAgID8gKHsgdG9vbF9uYW1lOiBtYW51YWxBcHByb3ZhbC50b29sTmFtZSwgdG9vbF9hcmdzOiBtYW51YWxBcHByb3ZhbC50b29sQXJncyA/PyB7fSB9IGFzIFBlbmRpbmdBY3Rpb24pXG4gICAgICAgICAgOiBudWxsXG4gICAgICAgIGNvbnN0IGFmZmVjdGVkVGFza0lkcyA9IFtcbiAgICAgICAgICAuLi5leHRyYWN0VGFza0lkc0Zyb21QZW5kaW5nQWN0aW9uc0FyZ3MocGVuZGluZ0FjdGlvbnMpLFxuICAgICAgICAgIC4uLnRhc2tJZHNGcm9tVXJscyxcbiAgICAgICAgICAuLi50YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsLFxuICAgICAgICAgIC4uLihtYW51YWxQc2V1ZG9BY3Rpb24gPyBleHRyYWN0VGFza0lkc0Zyb21QZW5kaW5nQWN0aW9uc0FyZ3MoW21hbnVhbFBzZXVkb0FjdGlvbl0pIDogW10pLFxuICAgICAgICBdLm1hcChTdHJpbmcpXG4gICAgICAgIGlmIChhZmZlY3RlZFRhc2tJZHMuaW5jbHVkZXMoU3RyaW5nKG9wZW5UYXNrUGFuZWxJZCkpKSB7XG4gICAgICAgICAgd2luZG93LnRhc2tQYW5lbD8ucmVmZXRjaFRhc2s/LigpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgYW5zd2VyLSR7bWVtb3J5U2Vzc2lvbklkfWAsXG4gICAgICAgIG1lc3NhZ2U6IGNvbnRlbnRUb0FkZCxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgIHNvdXJjZXMsXG4gICAgICAgIC4uLihhdHRhY2htZW50cy5sZW5ndGggPiAwID8geyBhdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICBtZW1vcnlTZXNzaW9uSWQsXG4gICAgICAgIHN1Z2dlc3Rpb25zOiBzdWdnZXN0aW9ucyB8fCBbXSxcbiAgICAgICAgLi4uKGNyZWF0ZUFnZW50Rm9sbG93VXAgPyB7IGNyZWF0ZUFnZW50Rm9sbG93VXAgfSA6IHt9KSxcbiAgICAgIH0pXG5cbiAgICAgIGlmIChjcmVhdGVBZ2VudEZvbGxvd1VwPy5hZ2VudElkKSB7XG4gICAgICAgIGZldGNoQWdlbnREZXRhaWwoY3JlYXRlQWdlbnRGb2xsb3dVcC5hZ2VudElkKVxuICAgICAgICAgIC50aGVuKGNoYXRBZ2VudCA9PiB7XG4gICAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ21haWEtbWVyZ2UtY3JlYXRlZC1hZ2VudC1pbnRvLWxpc3QnLCB7XG4gICAgICAgICAgICAgICAgZGV0YWlsOiB7IGFnZW50OiBjaGF0QWdlbnQgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignW3VzZUNoYXRNYW5hZ2VyXSBObyBzZSBwdWRvIGHDsWFkaXIgZWwgYWdlbnRlIHJlY2nDqW4gY3JlYWRvIGFsIGxpc3RhZG8nLCBlcnIpXG4gICAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKGVkaXRBZ2VudEZvbGxvd1VwPy5hZ2VudElkKSB7XG4gICAgICAgIGZldGNoQWdlbnREZXRhaWwoZWRpdEFnZW50Rm9sbG93VXAuYWdlbnRJZClcbiAgICAgICAgICAudGhlbihjaGF0QWdlbnQgPT4ge1xuICAgICAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdtYWlhLXN5bmMtZWRpdGVkLWFnZW50LWZyb20tY2hhdCcsIHtcbiAgICAgICAgICAgICAgICBkZXRhaWw6IHsgYWdlbnQ6IGNoYXRBZ2VudCB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbdXNlQ2hhdE1hbmFnZXJdIE5vIHNlIHB1ZG8gcmVmcmVzY2FyIGVsIGFnZW50ZSBlZGl0YWRvJywgZXJyKVxuICAgICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIGlmIChmaXJzdFRpbWVSZWYuY3VycmVudCkge1xuICAgICAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgncmVmZXRjaC1zZXNzaW9uJylcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudClcbiAgICAgICAgZmlyc3RUaW1lUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgfVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2UsIHByb2plY3QsIGdldFRhYlRhc2tEZWZhdWx0LCBldmVudCwgYWdlbnRdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1TdG9wID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNsZWFyU3RyZWFtVWlSZWYuY3VycmVudCgpXG4gICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcbiAgICBzdHJlYW1pbmdTdG9yZS5jbGVhcigpXG4gICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIHJlbW92ZU1lc3NhZ2UodGVtcE1lc3NhZ2VJZClcblxuICAgIGFkZE1lc3NhZ2Uoe1xuICAgICAgaWQ6IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LWNhbmNlbGxlZGAsXG4gICAgICBtZXNzYWdlOiB0KCdjaGF0LmNhbmNlbGxlZCcpLFxuICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ6IHRydWUsXG4gICAgfSlcbiAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgncmVmZXRjaC1zZXNzaW9uJylcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpXG4gICAgfSwgNTAwKVxuICB9LCBbYWRkTWVzc2FnZSwgcmVtb3ZlTWVzc2FnZSwgdF0pXG5cbiAgY29uc3QgaGFuZGxlQXBwcm92YWxSZXF1aXJlZCA9IHVzZUNhbGxiYWNrKFxuICAgIChhcHByb3ZhbDogQXBwcm92YWxSZXF1ZXN0LCBhY2N1bXVsYXRlZENvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcbiAgICAgIHN0cmVhbWluZ1N0b3JlLmNsZWFyKClcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmVtb3ZlTWVzc2FnZSh0ZW1wTWVzc2FnZUlkKVxuXG4gICAgICBpZiAoYXBwcm92YWwubWFudWFsX2FwcHJvdmFsX2RldGVjdGVkKSB7XG4gICAgICAgIC8vIFBlcnNpc3RpbW9zIGluZm8gcGFyYSBxdWUgb25TdHJlYW1GaW5pc2ggcHVlZGEgZGV0ZWN0YXIgZWwgbWFudWFsIGFwcHJvdmFsXG4gICAgICAgIC8vIHkgZGlzcGFyYXIgZWwgcmVmZXRjaCBkZWwgdGFzayBwYW5lbCBzaSBsYSB0b29sIGFwcm9iYWRhIGVkaXTDsyBlc2EgdGFyZWEuXG4gICAgICAgIGNvbnN0IGZpcnN0QWN0aW9uID0gYXBwcm92YWwucGVuZGluZ19hY3Rpb25zPy5bMF1cbiAgICAgICAgY29uc3QgdG9vbE5hbWUgPSAoYXBwcm92YWwgYXMgeyB0b29sX25hbWU/OiBzdHJpbmcgfSkudG9vbF9uYW1lID8/IGZpcnN0QWN0aW9uPy50b29sX25hbWUgPz8gJydcbiAgICAgICAgY29uc3QgdG9vbEFyZ3MgPVxuICAgICAgICAgICgoYXBwcm92YWwgYXMgeyB0b29sX2FyZ3M/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9KS50b29sX2FyZ3MgPz9cbiAgICAgICAgICAgIChmaXJzdEFjdGlvbj8udG9vbF9hcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkKSkgfHxcbiAgICAgICAgICBudWxsXG4gICAgICAgIGlmICh0b29sTmFtZSkge1xuICAgICAgICAgIGxhc3RNYW51YWxBcHByb3ZhbFJlZi5jdXJyZW50ID0geyB0b29sTmFtZSwgdG9vbEFyZ3MgfVxuICAgICAgICB9XG4gICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBhIG1lc3NhZ2Ugd2l0aCB0aGUgYXBwcm92YWwgcmVxdWVzdFxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgYXBwcm92YWwtJHthcHByb3ZhbC5vcmlnaW5hbF90aHJlYWRfaWR9YCxcbiAgICAgICAgbWVzc2FnZTogYWNjdW11bGF0ZWRDb250ZW50IHx8ICcnLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgYXBwcm92YWwsXG4gICAgICAgIGFwcHJvdmFsU3RhdHVzOiAncGVuZGluZycsXG4gICAgICB9KVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2VdXG4gIClcblxuICBjb25zdCB7XG4gICAgYXNrTWFpYSxcbiAgICBpc0xvYWRpbmc6IHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgc3RyZWFtQWN0aXZpdHksXG4gICAgdXBkYXRlU3RyZWFtQWN0aXZpdHksXG4gICAgc3RvcFN0cmVhbWluZyxcbiAgICBhYm9ydFN0cmVhbVNpbGVudGx5LFxuICB9ID0gdXNlT3JjaGVzdHJhdG9yU3RyZWFtKHtcbiAgICBvbkVycm9yOiBoYW5kbGVTdHJlYW1FcnJvcixcbiAgICBvblN0cmVhbVVwZGF0ZTogaGFuZGxlU3RyZWFtVXBkYXRlLFxuICAgIG9uRmluaXNoU3RyZWFtOiBoYW5kbGVTdHJlYW1GaW5pc2gsXG4gICAgb25TdG9wOiBoYW5kbGVTdHJlYW1TdG9wLFxuICAgIG9uQXBwcm92YWxSZXF1aXJlZDogaGFuZGxlQXBwcm92YWxSZXF1aXJlZCxcbiAgfSlcblxuICAvLyBNYW50ZW5lbW9zIGVsIHNldHRlciBtw6FzIHJlY2llbnRlIGVuIHVuYSByZWYgcGFyYSBxdWUgcHVlZGEgdXNhcnNlIGRlc2RlXG4gIC8vIGVmZWN0b3MgZGVmaW5pZG9zIGFudGVzIGVuIGVsIGFyY2hpdm8gKGNhbWJpbyBkZSBjaGF0LCByZXNldCwgZXRjLikuXG4gIGFib3J0U3RyZWFtU2lsZW50bHlSZWYuY3VycmVudCA9IGFib3J0U3RyZWFtU2lsZW50bHlcbiAgY2xlYXJTdHJlYW1VaVJlZi5jdXJyZW50ID0gKCkgPT4ge1xuICAgIHVwZGF0ZVN0cmVhbUFjdGl2aXR5KG51bGwpXG4gICAgc2V0QWN0aXZlTG9hZGluZ3Moe30pXG4gIH1cblxuICBjb25zdCBjdXJyZW50UHJvamVjdCA9IHByb2plY3RcblxuICBjb25zdCBzZW5kTWVzc2FnZSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChcbiAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgIGF0dGFjaG1lbnRzT3JPcHRpb25zPzogQXR0YWNobWVudEZpbGVbXSB8IFNlbmRNZXNzYWdlT3B0aW9ucyxcbiAgICAgIGZhcUlkPzogc3RyaW5nLFxuICAgICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW10sXG4gICAgICBmdWFJZD86IHN0cmluZyxcbiAgICAgIHNjSWQ/OiBzdHJpbmdcbiAgICApID0+IHtcbiAgICAgIGlmIChpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCB8fCB3YWl0aW5nUmVzcG9uc2UgfHwgbG9hZGluZ01lc3NhZ2VzKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGF0dGFjaG1lbnRzLCBvcHRpb25zIH0gPSBub3JtYWxpemVTZW5kTWVzc2FnZUFyZ3MoYXR0YWNobWVudHNPck9wdGlvbnMpXG4gICAgICAvLyBMYXMgbWVudGlvbnMgcHVlZGVuIHZlbmlyIHbDrWEgNXRvIHBhcsOhbWV0cm8gKGNhbGwgcG9zaXRpb25hbCBkZXNkZSBlbCBmb290ZXIpXG4gICAgICAvLyBvIHbDrWEgU2VuZE1lc3NhZ2VPcHRpb25zIChjYWxsIHByb2dyYW3DoXRpY28pLiBFbCBwYXLDoW1ldHJvIGV4cGzDrWNpdG8gZ2FuYS5cbiAgICAgIGNvbnN0IGVmZmVjdGl2ZU1lbnRpb25zID0gbWVudGlvbnMgPz8gb3B0aW9ucy5tZW50aW9uc1xuICAgICAgY29uc3QgY29udGV4dE1lc3NhZ2U6IENvbnRleHRNZXNzYWdlIHwgdW5kZWZpbmVkID0gYnVpbGRDb250ZXh0TWVzc2FnZShlZmZlY3RpdmVNZW50aW9ucylcbiAgICAgIGNvbnN0IHBheWxvYWRGdWFJZCA9IGZ1YUlkID8/IG9wdGlvbnMuZnVhSWRcbiAgICAgIGNvbnN0IHBheWxvYWRTY0lkID0gc2NJZCA/PyBvcHRpb25zLnNjSWRcbiAgICAgIGNvbnN0IGRpc3BsYXlNZXNzYWdlID0gZm9ybWF0UXVpY2tBY3Rpb25NZXNzYWdlRm9yRGlzcGxheShtZXNzYWdlLCB7XG4gICAgICAgIGZ1YUlkOiBwYXlsb2FkRnVhSWQsXG4gICAgICAgIHNjSWQ6IHBheWxvYWRTY0lkLFxuICAgICAgfSlcblxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBjb25zdCBuZXdNZXNzYWdlSWQgPSB1dWlkdjQoKVxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gbmV3TWVzc2FnZUlkXG4gICAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSBtZXNzYWdlXG5cbiAgICAgIGlmICghcmVwb3J0ZWRFdmVudC5jdXJyZW50KSB7XG4gICAgICAgIGV2ZW50KEVWRU5UUy5wbUFpVHlwZWRUZXh0KVxuICAgICAgICByZXBvcnRlZEV2ZW50LmN1cnJlbnQgPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIC8vIFZlcmlmaWNhciBzaSBlbCBjb250ZXh0byBnbG9iYWwgZXN0w6EgZGVzYWN0dWFsaXphZG9cbiAgICAgIGNvbnN0IGxhc3RNZXNzYWdlV2l0aFByb2plY3QgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG5cbiAgICAgIGNvbnN0IGN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQ/LlttZXNzYWdlc1JlZi5jdXJyZW50Lmxlbmd0aCAtIDFdPy5hZ2VudElkXG5cbiAgICAgIC8vIE5vIGFncmVnYXIgcHJvamVjdElkIGFsIG1lbnNhamUgZGVsIHVzdWFyaW8gLSBzZSBkZXRlcm1pbmFyw6EgZGVzcHXDqXNcbiAgICAgIGFkZE1lc3NhZ2Uoe1xuICAgICAgICBpZDogYHF1ZXN0aW9uLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fWAsXG4gICAgICAgIG1lc3NhZ2U6IGRpc3BsYXlNZXNzYWdlLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiBjdXJyZW50VXNlcixcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLlVTRVIsXG4gICAgICAgIHNvdXJjZXM6IGF0dGFjaG1lbnRzLFxuICAgICAgICAuLi4oY29udGV4dE1lc3NhZ2UgPyB7IGNvbnRleHRNZXNzYWdlIH0gOiB7fSksXG4gICAgICB9KVxuXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuXG4gICAgICBjb25zdCBzdHJlYW1pbmdQbGFjZWhvbGRlcklkID0gYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH0tc3RyZWFtaW5nYFxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBjdXJyZW50Q2hhdElkLmN1cnJlbnRcbiAgICAgIGFkZE1lc3NhZ2Uoe1xuICAgICAgICBpZDogc3RyZWFtaW5nUGxhY2Vob2xkZXJJZCxcbiAgICAgICAgbWVzc2FnZTogJycsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiBhZ2VudD8ubmFtZSB8fCAnQXNzaXN0YW50JyB9LFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgfSlcblxuICAgICAgbGV0IGZpbmFsTWVzc2FnZSA9IG1lc3NhZ2VcblxuICAgICAgaWYgKG1lc3NhZ2UgPT09IHQoJ3FhLml0ZW1zLnJlbnRhYmlsaWRhZF9wcm95ZWN0bycpKSB7XG4gICAgICAgIGZpbmFsTWVzc2FnZSA9IGBGQVE6ICR7dCgncWEuaXRlbXMucmVudGFiaWxpZGFkX3Byb3llY3RvJyl9IC0gVGlwbyBkZSByZW50YWJpbGlkYWQ6ICR7XG4gICAgICAgICAgb3B0aW9ucy5wcm9qZWN0Q2hhbmdlZD8uaW5jb21lVHlwZSB8fCBwcm9qZWN0Py5pbmNvbWVUeXBlXG4gICAgICAgIH1gXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhpc3RvcnkgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICBjb250ZW50OiBoaXN0b3J5TWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICByb2xlOiBoaXN0b3J5TWVzc2FnZS51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpID8gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgfSkpXG5cbiAgICAgIC8vIFZlcmlmaWNhciBjb25zaXN0ZW5jaWEgZW50cmUgY29udGV4dG8gZ2xvYmFsIHkgw7psdGltbyBtZW5zYWplXG4gICAgICBjb25zdCBjb250ZXh0UHJvamVjdElkID0gcHJvamVjdD8uaWRcbiAgICAgIGNvbnN0IGxhc3RNZXNzYWdlUHJvamVjdElkID0gbGFzdE1lc3NhZ2VXaXRoUHJvamVjdD8ucHJvamVjdElkXG5cbiAgICAgIGxldCBwcm9qZWN0VG9SZXF1ZXN0OiBudW1iZXIgfCBudWxsID0gbnVsbFxuXG4gICAgICAvLyBTaSBoYXkgw7psdGltbyBtZW5zYWplIGNvbiBwcm9qZWN0SWQsIHVzYXJsbyAobcOhcyBjb25maWFibGUpXG4gICAgICBpZiAobGFzdE1lc3NhZ2VQcm9qZWN0SWQgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBOdW1iZXIobGFzdE1lc3NhZ2VQcm9qZWN0SWQpXG4gICAgICAgIHByb2plY3RUb1JlcXVlc3QgPSBOdW1iZXIuaXNGaW5pdGUocGFyc2VkKSA/IHBhcnNlZCA6IG51bGxcbiAgICAgIH1cbiAgICAgIC8vIFNpIG5vIGhheSDDumx0aW1vIG1lbnNhamUsIHVzYXIgZWwgY29udGV4dG8gZ2xvYmFsXG4gICAgICBlbHNlIGlmIChjb250ZXh0UHJvamVjdElkICE9IG51bGwpIHtcbiAgICAgICAgcHJvamVjdFRvUmVxdWVzdCA9IGNvbnRleHRQcm9qZWN0SWRcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJvamVjdHMgPSBhd2FpdCBmZXRjaFByb2plY3RzKFtwcm9qZWN0VG9SZXF1ZXN0XSlcblxuICAgICAgY29uc3QgcGF5bG9hZEZhcUlkID0gZmFxSWQgPz8gb3B0aW9ucy5mYXFJZFxuICAgICAgY29uc3QgcGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkID0gYWdlbnRTdWdnZXN0aW9uSWQgPz8gb3B0aW9ucy5hZ2VudFN1Z2dlc3Rpb25JZFxuXG4gICAgICBjb25zdCBwYXlsb2FkRGF0YSA9IHtcbiAgICAgICAgbWVzc2FnZTogZmluYWxNZXNzYWdlLFxuICAgICAgICBoaXN0b3J5LFxuICAgICAgICBwcm9qZWN0SWQ6IHByb2plY3RUb1JlcXVlc3QsXG4gICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgIHVzZXJJZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgZmlyc3ROYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICAgIGxhc3ROYW1lOiBhdXRoVXNlci5sYXN0TmFtZSxcbiAgICAgICAgY29tcGFueUlkOiBhdXRoVXNlci5jb21wYW55X2lkLnRvU3RyaW5nKCksXG4gICAgICAgIGNoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICBtZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcbiAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSB8fCAnJyxcbiAgICAgICAgYWdlbnRJZDogY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzIHx8IGFnZW50Py5pZCEsXG4gICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAuLi4ocHJvamVjdD8uZmVlSWQgIT0gbnVsbCA/IHsgZmVlSWQ6IE51bWJlcihwcm9qZWN0LmZlZUlkKSB9IDoge30pLFxuICAgICAgICAuLi4oY2xpZW50Py5pZFxuICAgICAgICAgID8geyBjbGllbnRJZDogY2xpZW50LmlkLCAuLi4oY2xpZW50Lm5hbWUgPyB7IGNsaWVudE5hbWU6IGNsaWVudC5uYW1lIH0gOiB7fSkgfVxuICAgICAgICAgIDogcHJvamVjdD8uY2xpZW50SWQgIT0gbnVsbFxuICAgICAgICAgICAgPyB7IGNsaWVudElkOiBOdW1iZXIocHJvamVjdC5jbGllbnRJZCkgfVxuICAgICAgICAgICAgOiBwcm9qZWN0Py5jbGllbnQ/LmlkXG4gICAgICAgICAgICAgID8geyBjbGllbnRJZDogcHJvamVjdC5jbGllbnQuaWQsIC4uLihwcm9qZWN0LmNsaWVudC5uYW1lID8geyBjbGllbnROYW1lOiBwcm9qZWN0LmNsaWVudC5uYW1lIH0gOiB7fSkgfVxuICAgICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4uKHByb2plY3RzPy5sZW5ndGggPyB7IHByb2plY3ROYW1lOiBwcm9qZWN0c1swXS5uYW1lIH0gOiB7fSksXG4gICAgICAgIC4uLih0YXNrPy5pZCAhPSBudWxsID8geyB0YXNrSWQ6IE51bWJlcih0YXNrLmlkKSwgLi4uKHRhc2submFtZSA/IHsgdGFza05hbWU6IHRhc2submFtZSB9IDoge30pIH0gOiB7fSksXG4gICAgICAgIC4uLihhdHRhY2htZW50cy5sZW5ndGggPiAwID8geyBhdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICAuLi4ocGF5bG9hZEZhcUlkID8geyBmYXFJZDogcGF5bG9hZEZhcUlkIH0gOiB7fSksXG4gICAgICAgIC4uLihwYXlsb2FkQWdlbnRTdWdnZXN0aW9uSWQgPyB7IGFnZW50U3VnZ2VzdGlvbklkOiBwYXlsb2FkQWdlbnRTdWdnZXN0aW9uSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHBheWxvYWRGdWFJZCA/IHsgZnVhSWQ6IHBheWxvYWRGdWFJZCB9IDoge30pLFxuICAgICAgICAuLi4ocGF5bG9hZFNjSWQgPyB7IHNjSWQ6IHBheWxvYWRTY0lkIH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudD8uZW50aXR5ICE9IG51bGwgPyB7IGFnZW50RW50aXR5OiBhZ2VudC5lbnRpdHkgfSA6IHt9KSxcbiAgICAgICAgLi4uKGNvbnRleHRNZXNzYWdlID8geyBjb250ZXh0TWVzc2FnZSB9IDoge30pLFxuICAgICAgfVxuXG4gICAgICBhc2tNYWlhKHBheWxvYWREYXRhKVxuICAgIH0sXG4gICAgW1xuICAgICAgYWRkTWVzc2FnZSxcbiAgICAgIGV2ZW50LFxuICAgICAgYXNrTWFpYSxcbiAgICAgIHByb2plY3QsXG4gICAgICBjbGllbnQsXG4gICAgICBhdXRoVXNlcixcbiAgICAgIGFnZW50LFxuICAgICAgdCxcbiAgICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgIF1cbiAgKVxuXG4gIGNvbnN0IGNoYW5nZVByb2plY3QgPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBQcm9qZWN0KSA9PiB7XG4gICAgICBpZiAoIWN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCkgcmV0dXJuXG5cbiAgICAgIGlmIChvcHRpb24uaWQgIT09IHByb2plY3Q/LmlkKSB7XG4gICAgICAgIHNldFByb2plY3Qob3B0aW9uKVxuICAgICAgfVxuXG4gICAgICBpZiAocHJvamVjdCAmJiBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgaGlzdG9yeSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKGhpc3RvcnlNZXNzYWdlID0+ICh7XG4gICAgICAgICAgY29udGVudDogaGlzdG9yeU1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgICByb2xlOiBoaXN0b3J5TWVzc2FnZS51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpID8gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICB9KSlcblxuICAgICAgICBhc2tNYWlhKHtcbiAgICAgICAgICBtZXNzYWdlOiBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQsXG4gICAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgICBwcm9qZWN0SWQ6IG9wdGlvbi5pZCxcbiAgICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICAgIHVzZXJJZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBmaXJzdE5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgICAgICBsYXN0TmFtZTogYXV0aFVzZXIubGFzdE5hbWUsXG4gICAgICAgICAgY29tcGFueUlkOiBhdXRoVXNlci5jb21wYW55X2lkLnRvU3RyaW5nKCksXG4gICAgICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgICAgbWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG4gICAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSB8fCAnJyxcbiAgICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQgfHwgJycsXG4gICAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgICAuLi4ob3B0aW9uPy5mZWVJZCAhPSBudWxsID8geyBmZWVJZDogTnVtYmVyKG9wdGlvbi5mZWVJZCkgfSA6IHt9KSxcbiAgICAgICAgICAuLi4ob3B0aW9uPy5jbGllbnRJZCAhPSBudWxsID8geyBjbGllbnRJZDogTnVtYmVyKG9wdGlvbi5jbGllbnRJZCkgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oYWdlbnQ/LmVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eTogYWdlbnQuZW50aXR5IH0gOiB7fSksXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbcHJvamVjdCwgc2V0UHJvamVjdCwgYXNrTWFpYSwgYXV0aFVzZXIsIGlzV2ViU2VhcmNoQWN0aXZlLCBhZ2VudF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUZlZWRiYWNrID0gdXNlQ2FsbGJhY2soYXN5bmMgKGZlZWRiYWNrUHJvcDogRmVlZGJhY2ssIGNoYXRNZXNzYWdlSWQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbWFpYS5DaGF0cy53YXNIZWxwZnVsQ2hhdChjaGF0TWVzc2FnZUlkLCBmZWVkYmFja1Byb3AgPT09IEZlZWRiYWNrLlRIVU1CU19VUClcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChtZXNzYWdlID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2UuaWQgPT09IGNoYXRNZXNzYWdlSWQgJiYgbWVzc2FnZS5yb2xlID09PSAnYXNzaXN0YW50Jykge1xuICAgICAgICAgIHJldHVybiB7IC4uLm1lc3NhZ2UsIHdhc0hlbHBmdWw6IGZlZWRiYWNrUHJvcCA9PT0gRmVlZGJhY2suVEhVTUJTX1VQIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZVxuICAgICAgfSlcbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IGhhbmRsZUFwcHJvdmFsRGVjaXNpb24gPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoXG4gICAgICB0aHJlYWRJZHM6IHN0cmluZ1tdLFxuICAgICAgZGVjaXNpb246ICdhcHByb3ZlJyB8ICdyZWplY3QnLFxuICAgICAgZWRpdGVkQWN0aW9ucz86IEFycmF5PHsgdG9vbF9uYW1lOiBzdHJpbmc7IGFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0+XG4gICAgKSA9PiB7XG4gICAgICBpZiAoIXRocmVhZElkcz8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHRocmVhZF9pZHMgcHJvdmlkZWQgZm9yIGFwcHJvdmFsIGRlY2lzaW9uJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIEJ1c2NhciBlbCBtZW5zYWplIHF1ZSBjb250aWVuZSBhbGd1bm8gZGUgZXN0b3MgdGhyZWFkSWRzIGVuIHN1cyBwZW5kaW5nX2FjdGlvbnNcbiAgICAgIGNvbnN0IG1lc3NhZ2VXaXRoQXBwcm92YWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbmQobSA9PlxuICAgICAgICBtLmFwcHJvdmFsPy5wZW5kaW5nX2FjdGlvbnM/LnNvbWUoYWN0aW9uID0+IHRocmVhZElkcy5pbmNsdWRlcyhhY3Rpb24udGhyZWFkX2lkKSlcbiAgICAgIClcblxuICAgICAgaWYgKCFtZXNzYWdlV2l0aEFwcHJvdmFsIHx8ICFtZXNzYWdlV2l0aEFwcHJvdmFsLmFwcHJvdmFsKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHNlIGVuY29udHLDsyBtZW5zYWplIGNvbiBhcHByb3ZhbCBwYXJhIHRocmVhZF9pZHM6JywgdGhyZWFkSWRzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBhcHByb3ZhbCB9ID0gbWVzc2FnZVdpdGhBcHByb3ZhbFxuICAgICAgY29uc3QgbWVzc2FnZUlkID0gbWVzc2FnZVdpdGhBcHByb3ZhbC5pZFxuICAgICAgLy8gVXNlIGZpcnN0IHRocmVhZElkIGFzIHRoZSBsb2FkaW5nIGtleVxuICAgICAgY29uc3QgbG9hZGluZ0tleSA9IHRocmVhZElkc1swXVxuICAgICAgLy8gVXBkYXRlIG1lc3NhZ2Ugc3RhdHVzIGltbWVkaWF0ZWx5XG4gICAgICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAobWVzc2FnZSA9PiB7XG4gICAgICAgIGlmIChtZXNzYWdlLmlkID09PSBtZXNzYWdlSWQpIHtcbiAgICAgICAgICBjb25zdCBuZXdTdGF0dXMgPSBkZWNpc2lvbiA9PT0gJ2FwcHJvdmUnID8gJ2FwcHJvdmVkJyA6ICdyZWplY3RlZCdcbiAgICAgICAgICByZXR1cm4geyAuLi5tZXNzYWdlLCBhcHByb3ZhbFN0YXR1czogbmV3U3RhdHVzIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZVxuICAgICAgfSlcblxuICAgICAgLy8gVHJpZ2dlciByZS1yZW5kZXJcbiAgICAgIGNvbnN0IGV4aXN0aW5nTWVzc2FnZSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmluZChtID0+IG0uaWQgPT09IG1lc3NhZ2VJZClcbiAgICAgIGlmIChleGlzdGluZ01lc3NhZ2UpIHtcbiAgICAgICAgY29uc3QgbmV3U3RhdHVzID0gZGVjaXNpb24gPT09ICdhcHByb3ZlJyA/ICdhcHByb3ZlZCcgOiAncmVqZWN0ZWQnXG4gICAgICAgIGFkZE1lc3NhZ2UoeyAuLi5leGlzdGluZ01lc3NhZ2UsIGFwcHJvdmFsU3RhdHVzOiBuZXdTdGF0dXMgfSlcbiAgICAgIH1cblxuICAgICAgLy8gQ2FsbCBjb250aW51ZS10aHJlYWQgZW5kcG9pbnQgd2l0aCBBTEwgdGhyZWFkX2lkcyBpbiBhIHNpbmdsZSByZXF1ZXN0XG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG5cbiAgICAgIC8vIEFkZCBsb2FkaW5nXG4gICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+ICh7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICAgIFtsb2FkaW5nS2V5XTogdCgnY2hhdC5wcm9jZXNzaW5nJyksXG4gICAgICB9KSlcbiAgICAgIHVwZGF0ZVN0cmVhbUFjdGl2aXR5KHsgcGhhc2U6ICdwcm9jZXNzaW5nJywgbWVzc2FnZTogdCgnY2hhdC5wcm9jZXNzaW5nJykgfSlcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLk9yY2hlc3RyYXRvci5jb250aW51ZVRocmVhZCh7XG4gICAgICAgICAgdGhyZWFkSWRzLCAvLyBTZW5kIGFsbCBhY3Rpb24gdGhyZWFkX2lkcyBhdCBvbmNlXG4gICAgICAgICAgc2Vzc2lvbklkOiBhcHByb3ZhbC5zZXNzaW9uX2lkLFxuICAgICAgICAgIGRlY2lzaW9uOiBlZGl0ZWRBY3Rpb25zID8gJ2VkaXQnIDogZGVjaXNpb24sXG4gICAgICAgICAgZWRpdGVkQWN0aW9ucyxcbiAgICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQgfHwgJycsXG4gICAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgaGFuZGxlU3RyZWFtRXJyb3IoKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBTU0Ugc3RyZWFtXG4gICAgICAgIGF3YWl0IHByb2Nlc3NTU0VTdHJlYW0ocmVzcG9uc2UsIGxvYWRpbmdLZXksIHtcbiAgICAgICAgICBvblRoaW5raW5nOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhY3Rpdml0eTogU3RyZWFtQWN0aXZpdHkgPSB7XG4gICAgICAgICAgICAgIHBoYXNlOiAndGhpbmtpbmcnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBnZXRUaGlua2luZ0xvYWRpbmdNZXNzYWdlKDAsIHQpLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdXBkYXRlU3RyZWFtQWN0aXZpdHkoYWN0aXZpdHkpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvblRva2VuOiAoY29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICB1cGRhdGVTdHJlYW1BY3Rpdml0eShnZXRXcml0aW5nU3RyZWFtQWN0aXZpdHkodCkpXG4gICAgICAgICAgICBoYW5kbGVTdHJlYW1VcGRhdGUoY29udGVudCwgbnVsbCwgJycpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbk5vZGU6IChtZXNzYWdlOiBzdHJpbmcsIGN1cnJlbnRUaHJlYWRJZDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub2RlQWN0aXZpdHkgPSBtYXBOb2RlTWVzc2FnZVRvU3RyZWFtQWN0aXZpdHkobWVzc2FnZSwgdCwgeyB1c2VSZXN1bWluZ0ZhbGxiYWNrOiB0cnVlIH0pXG4gICAgICAgICAgICB1cGRhdGVTdHJlYW1BY3Rpdml0eShub2RlQWN0aXZpdHkpXG4gICAgICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+ICh7XG4gICAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICAgIFtjdXJyZW50VGhyZWFkSWRdOiBtZXNzYWdlLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkNvbXBsZXRlOiAoXG4gICAgICAgICAgICBmaW5hbENvbnRlbnQ6IHN0cmluZyxcbiAgICAgICAgICAgIHNvdXJjZXM6IGFueSxcbiAgICAgICAgICAgIG1lbW9yeVNlc3Npb25JZDogc3RyaW5nLFxuICAgICAgICAgICAgY3VycmVudFRocmVhZElkOiBzdHJpbmcsXG4gICAgICAgICAgICBhdHRhY2htZW50cz86IGFueVtdIHwgbnVsbCxcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10gfCBudWxsLFxuICAgICAgICAgICAgYWdlbnRJZD86IHN0cmluZyB8IG51bGxcbiAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgIGhhbmRsZVN0cmVhbUZpbmlzaChmaW5hbENvbnRlbnQsIHNvdXJjZXMsIG1lbW9yeVNlc3Npb25JZCwgYXR0YWNobWVudHMsIHN1Z2dlc3Rpb25zLCBhZ2VudElkKVxuICAgICAgICAgICAgdXBkYXRlU3RyZWFtQWN0aXZpdHkobnVsbClcbiAgICAgICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBuZXdMb2FkaW5ncyA9IHsgLi4ucHJldiB9XG4gICAgICAgICAgICAgIGRlbGV0ZSBuZXdMb2FkaW5nc1tjdXJyZW50VGhyZWFkSWRdXG4gICAgICAgICAgICAgIHJldHVybiBuZXdMb2FkaW5nc1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uQXBwcm92YWxSZXF1aXJlZDogKGFwcHJvdmFsUGF5bG9hZDogYW55LCBhY2N1bXVsYXRlZENvbnRlbnQ6IHN0cmluZywgY3VycmVudFRocmVhZElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIC8vIE5ldyBISVRMIGludGVycnVwdGlvbiBkZXRlY3RlZCBhZnRlciByZXN1bWUgKGNoYWluZWQgYWN0aW9ucylcbiAgICAgICAgICAgIHVwZGF0ZVN0cmVhbUFjdGl2aXR5KG51bGwpXG4gICAgICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbmV3TG9hZGluZ3MgPSB7IC4uLnByZXYgfVxuICAgICAgICAgICAgICBkZWxldGUgbmV3TG9hZGluZ3NbY3VycmVudFRocmVhZElkXVxuICAgICAgICAgICAgICByZXR1cm4gbmV3TG9hZGluZ3NcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkKGFwcHJvdmFsUGF5bG9hZCBhcyBBcHByb3ZhbFJlcXVlc3QsIGFjY3VtdWxhdGVkQ29udGVudClcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uRXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgIGhhbmRsZVN0cmVhbUVycm9yKClcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlU3RyZWFtRXJyb3IoKVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgYXV0aFVzZXIsXG4gICAgICBhZ2VudCxcbiAgICAgIGFkZE1lc3NhZ2UsXG4gICAgICBoYW5kbGVTdHJlYW1FcnJvcixcbiAgICAgIGhhbmRsZVN0cmVhbVVwZGF0ZSxcbiAgICAgIGhhbmRsZVN0cmVhbUZpbmlzaCxcbiAgICAgIGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQsXG4gICAgICB1cGRhdGVTdHJlYW1BY3Rpdml0eSxcbiAgICAgIHQsXG4gICAgXVxuICApXG5cbiAgY29uc3QgaW5pdGlhbGl6ZUNoYXQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFmaXJzdFRpbWVSZWYuY3VycmVudCkge1xuICAgICAgZmlyc3RUaW1lUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgfVxuICAgIGlmIChpbml0aWFsQ2hhdElkKSB7XG4gICAgICBhd2FpdCBsb2FkTWVzc2FnZXMoKVxuICAgIH0gZWxzZSBpZiAodXNlckluaXRpYWxNZXNzYWdlKSB7XG4gICAgICBjb25zdCBoYXNJbml0aWFsTWVzc2FnZSA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLm1lc3NhZ2U/LnRyaW0oKSlcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxBdHRhY2htZW50cyA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzPy5sZW5ndGgpXG4gICAgICBjb25zdCBoYXNJbml0aWFsRmFxID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2UuZmFxSWQpXG4gICAgICBjb25zdCBoYXNJbml0aWFsRnVhID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2UuZnVhSWQpXG4gICAgICBjb25zdCBoYXNJbml0aWFsU2MgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5zY0lkKVxuXG4gICAgICBpZiAoIWhhc0luaXRpYWxNZXNzYWdlICYmICFoYXNJbml0aWFsQXR0YWNobWVudHMgJiYgIWhhc0luaXRpYWxGYXEgJiYgIWhhc0luaXRpYWxGdWEgJiYgIWhhc0luaXRpYWxTYykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgaGlzdG9yeSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKGhpc3RvcnlNZXNzYWdlID0+ICh7XG4gICAgICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgIHJvbGU6IGhpc3RvcnlNZXNzYWdlLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgPyBDaGF0SGlzdG9yeVJvbGUuVVNFUiA6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KSlcblxuICAgICAgYXNrTWFpYSh7XG4gICAgICAgIG1lc3NhZ2U6IHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICBoaXN0b3J5LFxuICAgICAgICBwcm9qZWN0SWQ6IHByb2plY3Q/LmlkIHx8IG51bGwsXG4gICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgIHVzZXJJZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgZmlyc3ROYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICAgIGxhc3ROYW1lOiBhdXRoVXNlci5sYXN0TmFtZSxcbiAgICAgICAgY29tcGFueUlkOiBhdXRoVXNlci5jb21wYW55X2lkLnRvU3RyaW5nKCksXG4gICAgICAgIGNoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICBtZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcbiAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSEsXG4gICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCEsXG4gICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAuLi4ocHJvamVjdD8uZmVlSWQgIT0gbnVsbCA/IHsgZmVlSWQ6IE51bWJlcihwcm9qZWN0LmZlZUlkKSB9IDoge30pLFxuICAgICAgICAuLi4oY2xpZW50Py5pZFxuICAgICAgICAgID8geyBjbGllbnRJZDogY2xpZW50LmlkIH1cbiAgICAgICAgICA6IHByb2plY3Q/LmNsaWVudElkICE9IG51bGxcbiAgICAgICAgICAgID8geyBjbGllbnRJZDogTnVtYmVyKHByb2plY3QuY2xpZW50SWQpIH1cbiAgICAgICAgICAgIDogcHJvamVjdD8uY2xpZW50Py5pZFxuICAgICAgICAgICAgICA/IHsgY2xpZW50SWQ6IHByb2plY3QuY2xpZW50LmlkIH1cbiAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgIC4uLihwcm9qZWN0Py5uYW1lID8geyBwcm9qZWN0TmFtZTogcHJvamVjdC5uYW1lIH0gOiB7fSksXG4gICAgICAgIC4uLihwcm9qZWN0Py5jbGllbnQ/Lm5hbWVcbiAgICAgICAgICA/IHsgY2xpZW50TmFtZTogcHJvamVjdC5jbGllbnQubmFtZSB9XG4gICAgICAgICAgOiBjbGllbnQ/Lm5hbWVcbiAgICAgICAgICAgID8geyBjbGllbnROYW1lOiBjbGllbnQubmFtZSB9XG4gICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4uKHRhc2s/LmlkICE9IG51bGwgPyB7IHRhc2tJZDogTnVtYmVyKHRhc2suaWQpLCAuLi4odGFzay5uYW1lID8geyB0YXNrTmFtZTogdGFzay5uYW1lIH0gOiB7fSkgfSA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cyA/IHsgYXR0YWNobWVudHM6IHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmZhcUlkID8geyBmYXFJZDogdXNlckluaXRpYWxNZXNzYWdlLmZhcUlkIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuYWdlbnRTdWdnZXN0aW9uSWQgPyB7IGFnZW50U3VnZ2VzdGlvbklkOiB1c2VySW5pdGlhbE1lc3NhZ2UuYWdlbnRTdWdnZXN0aW9uSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5mdWFJZCA/IHsgZnVhSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5mdWFJZCB9IDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLnNjSWQgPyB7IHNjSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5zY0lkIH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudD8uZW50aXR5ICE9IG51bGwgPyB7IGFnZW50RW50aXR5OiBhZ2VudC5lbnRpdHkgfSA6IHt9KSxcbiAgICAgICAgLi4uKGJ1aWxkQ29udGV4dE1lc3NhZ2UodXNlckluaXRpYWxNZXNzYWdlLm1lbnRpb25zKVxuICAgICAgICAgID8geyBjb250ZXh0TWVzc2FnZTogYnVpbGRDb250ZXh0TWVzc2FnZSh1c2VySW5pdGlhbE1lc3NhZ2UubWVudGlvbnMpIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgIH0pXG4gICAgfVxuICB9LCBbXG4gICAgaW5pdGlhbENoYXRJZCxcbiAgICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gICAgcHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgYXV0aFVzZXIsXG4gICAgYWdlbnQsXG4gICAgYXNrTWFpYSxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gIF0pXG5cbiAgY29uc3QgcmVzZXRDaGF0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGFib3J0U3RyZWFtU2lsZW50bHlSZWYuY3VycmVudCgpXG4gICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSBudWxsXG4gICAgY3VycmVudENoYXRJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICByZXBvcnRlZEV2ZW50LmN1cnJlbnQgPSBmYWxzZVxuICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICBzdHJlYW1pbmdTdG9yZS5jbGVhcigpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN0b3BTdHJlYW1pbmcoKVxuICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgfSwgW3N0b3BTdHJlYW1pbmddKVxuXG4gIHJldHVybiB7XG4gICAgbWVzc2FnZXMsXG4gICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIHN0cmVhbUFjdGl2aXR5LFxuICAgIGFjdGl2ZUxvYWRpbmdzLFxuICAgIGN1cnJlbnRQcm9qZWN0LFxuICAgIGN1cnJlbnRDaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICBjdXJyZW50TWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG5cbiAgICBzZW5kTWVzc2FnZSxcbiAgICBjaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZUZlZWRiYWNrLFxuICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgaGFuZGxlU2Nyb2xsLFxuICAgIGluaXRpYWxpemVDaGF0LFxuICAgIHJlc2V0Q2hhdCxcbiAgICBzdG9wR2VuZXJhdGlvbixcblxuICAgIGlzRGlzYWJsZWQ6IHdhaXRpbmdSZXNwb25zZSB8fCBsb2FkaW5nTWVzc2FnZXMsXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFdBQVcsRUFBRUMsTUFBTSxFQUFFQyxTQUFTLEVBQUVDLFFBQVEsUUFBUSxPQUFPO0FBQ2hFLFNBQVNDLEVBQUUsSUFBSUMsTUFBTSxRQUFRLE1BQU07QUFDbkMsU0FBU0MsZUFBZSxRQUFRLG9CQUFvQjtBQUNwRCxTQUFTQyxxQkFBcUIsUUFBUSwwQkFBMEI7QUFDaEUsU0FBU0MsSUFBSSxRQUFRLFNBQVM7QUFHOUIsU0FBU0MsT0FBTyxRQUFpQix3QkFBd0I7QUFDekQsU0FBU0MsZ0JBQWdCLFFBQVEsOEJBQThCO0FBQy9ELFNBQVNDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLGFBQWE7QUFDOUMsT0FBT0MsSUFBSSxNQUFNLHFCQUFxQjtBQUN0QyxTQUFTQyxRQUFRLFFBQVEsNERBQTREO0FBQ3JGLFNBQXVDQyxlQUFlLFFBQXdDLGtCQUFrQjtBQUNoSCxTQUF5Q0MsbUJBQW1CLFFBQVEsNEJBQTRCO0FBQ2hHLFNBQVNDLGtDQUFrQyxRQUFRLHNDQUFzQztBQUd6RixTQUFTQyxXQUFXLFFBQVEsZ0JBQWdCO0FBQzVDLFNBQVNDLGlCQUFpQixRQUFRLHNCQUFzQjtBQUN4RCxTQUFTQyxzQkFBc0IsUUFBUSwwQkFBMEI7QUFDakUsU0FBU0MsZ0JBQWdCLFFBQVEsNkNBQTZDO0FBQzlFLFNBQVNDLHVCQUF1QixFQUFFQyx5QkFBeUIsUUFBUSwyQkFBMkI7QUFFOUYsU0FDRUMseUJBQXlCLEVBQ3pCQyx3QkFBd0IsRUFDeEJDLDhCQUE4QixRQUN6QixvQ0FBb0M7QUFDM0MsU0FBU0MsY0FBYyxRQUFRLHdCQUF3QjtBQUN2RCxTQUFTQyx3QkFBd0IsRUFBRUMsZ0JBQWdCLFFBQVEsOEJBQThCO0FBSXpGLElBQU1DLHdCQUF3QixHQUFHLFNB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
|