single-scripture-rcl 3.3.3-beta.81 → 3.3.3-beta.82
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.
|
@@ -61,7 +61,7 @@ import usfmjs from 'usfm-js';
|
|
|
61
61
|
import { useEdit } from 'gitea-react-toolkit';
|
|
62
62
|
import { IconButton } from '@mui/material';
|
|
63
63
|
import { RxLink2, RxLinkBreak2 } from 'react-icons/rx';
|
|
64
|
-
import { Card,
|
|
64
|
+
import { Card, ERROR_STATE, MANIFEST_NOT_LOADED_ERROR, useCardState, useUserBranch } from 'translation-helps-rcl';
|
|
65
65
|
import { getQuoteMatchesInBookRef } from 'uw-quote-helpers';
|
|
66
66
|
import { AlignmentHelpers, UsfmFileConversionHelpers } from 'word-aligner-rcl';
|
|
67
67
|
import * as isEqual from 'deep-equal';
|
|
@@ -80,40 +80,89 @@ var style = {
|
|
|
80
80
|
marginTop: '16px',
|
|
81
81
|
width: '500px'
|
|
82
82
|
};
|
|
83
|
-
|
|
83
|
+
/**
|
|
84
|
+
* create a short comparison verse ref object without all the verseData
|
|
85
|
+
* @param verseRef
|
|
86
|
+
*/
|
|
87
|
+
|
|
88
|
+
function compareObject(verseRef) {
|
|
89
|
+
var _verseData$verseObjec;
|
|
90
|
+
|
|
91
|
+
var _ref = verseRef || {},
|
|
92
|
+
chapter = _ref.chapter,
|
|
93
|
+
verse = _ref.verse,
|
|
94
|
+
verseData = _ref.verseData;
|
|
95
|
+
|
|
96
|
+
var verseObjects = (verseData === null || verseData === void 0 ? void 0 : (_verseData$verseObjec = verseData.verseObjects) === null || _verseData$verseObjec === void 0 ? void 0 : _verseData$verseObjec.length) || 0;
|
|
97
|
+
return {
|
|
98
|
+
chapter: chapter,
|
|
99
|
+
verse: verse,
|
|
100
|
+
verseObjects: verseObjects
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* compare two verse refs to see if they are substantially similar
|
|
105
|
+
* @param versesForRef1
|
|
106
|
+
* @param versesForRef2
|
|
107
|
+
*/
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
function areVersesSame(versesForRef1, versesForRef2) {
|
|
111
|
+
versesForRef1 = versesForRef1 || [];
|
|
112
|
+
versesForRef2 = versesForRef2 || [];
|
|
113
|
+
var areSame = false;
|
|
114
|
+
|
|
115
|
+
if (versesForRef1.length === versesForRef2.length) {
|
|
116
|
+
areSame = true;
|
|
117
|
+
|
|
118
|
+
for (var i = 0, l = versesForRef1.length; i < l; i++) {
|
|
119
|
+
var verse1 = compareObject(versesForRef1[i]);
|
|
120
|
+
var verse2 = compareObject(versesForRef2[i]);
|
|
121
|
+
areSame = isEqual(verse1, verse2);
|
|
122
|
+
|
|
123
|
+
if (!areSame) {
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return areSame;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
export default function ScriptureCard(_ref2) {
|
|
84
133
|
var _scriptureConfig$reso, _scriptureConfig$reso2, _scriptureConfig$reso3, _scriptureConfig$reso4, _scriptureConfig$reso6, _scriptureConfig$reso7, _scriptureConfig$reso8, _httpConfig, _httpConfig2, _versesForRef3, _versesForRef4;
|
|
85
134
|
|
|
86
|
-
var appRef =
|
|
87
|
-
authentication =
|
|
88
|
-
bookIndex =
|
|
89
|
-
cardNum =
|
|
90
|
-
classes =
|
|
91
|
-
disableWordPopover =
|
|
92
|
-
fetchGlossesForVerse =
|
|
93
|
-
getLanguage =
|
|
94
|
-
getLexiconData =
|
|
95
|
-
greekRepoUrl =
|
|
96
|
-
hebrewRepoUrl =
|
|
97
|
-
httpConfig =
|
|
98
|
-
id =
|
|
99
|
-
isNT =
|
|
100
|
-
loggedInUser =
|
|
101
|
-
onMinimize =
|
|
102
|
-
onResourceError =
|
|
103
|
-
reference =
|
|
104
|
-
|
|
105
|
-
owner =
|
|
106
|
-
languageId =
|
|
107
|
-
resourceId =
|
|
108
|
-
originalLanguageOwner =
|
|
109
|
-
resourceLink =
|
|
110
|
-
selectedQuote =
|
|
111
|
-
server =
|
|
112
|
-
setSavedChanges =
|
|
113
|
-
setWordAlignerStatus =
|
|
114
|
-
translate =
|
|
115
|
-
title =
|
|
116
|
-
useUserLocalStorage =
|
|
135
|
+
var appRef = _ref2.appRef,
|
|
136
|
+
authentication = _ref2.authentication,
|
|
137
|
+
bookIndex = _ref2.bookIndex,
|
|
138
|
+
cardNum = _ref2.cardNum,
|
|
139
|
+
classes = _ref2.classes,
|
|
140
|
+
disableWordPopover = _ref2.disableWordPopover,
|
|
141
|
+
fetchGlossesForVerse = _ref2.fetchGlossesForVerse,
|
|
142
|
+
getLanguage = _ref2.getLanguage,
|
|
143
|
+
getLexiconData = _ref2.getLexiconData,
|
|
144
|
+
greekRepoUrl = _ref2.greekRepoUrl,
|
|
145
|
+
hebrewRepoUrl = _ref2.hebrewRepoUrl,
|
|
146
|
+
httpConfig = _ref2.httpConfig,
|
|
147
|
+
id = _ref2.id,
|
|
148
|
+
isNT = _ref2.isNT,
|
|
149
|
+
loggedInUser = _ref2.loggedInUser,
|
|
150
|
+
onMinimize = _ref2.onMinimize,
|
|
151
|
+
onResourceError = _ref2.onResourceError,
|
|
152
|
+
reference = _ref2.reference,
|
|
153
|
+
_ref2$resource = _ref2.resource,
|
|
154
|
+
owner = _ref2$resource.owner,
|
|
155
|
+
languageId = _ref2$resource.languageId,
|
|
156
|
+
resourceId = _ref2$resource.resourceId,
|
|
157
|
+
originalLanguageOwner = _ref2$resource.originalLanguageOwner,
|
|
158
|
+
resourceLink = _ref2.resourceLink,
|
|
159
|
+
selectedQuote = _ref2.selectedQuote,
|
|
160
|
+
server = _ref2.server,
|
|
161
|
+
setSavedChanges = _ref2.setSavedChanges,
|
|
162
|
+
setWordAlignerStatus = _ref2.setWordAlignerStatus,
|
|
163
|
+
translate = _ref2.translate,
|
|
164
|
+
title = _ref2.title,
|
|
165
|
+
useUserLocalStorage = _ref2.useUserLocalStorage;
|
|
117
166
|
var bookId = reference === null || reference === void 0 ? void 0 : reference.projectId;
|
|
118
167
|
|
|
119
168
|
var _React$useState = React.useState({
|
|
@@ -208,26 +257,26 @@ export default function ScriptureCard(_ref) {
|
|
|
208
257
|
isNT: isNT,
|
|
209
258
|
title: title,
|
|
210
259
|
owner: owner,
|
|
211
|
-
reference: currentReference,
|
|
260
|
+
reference: currentReference || reference,
|
|
212
261
|
appRef: ref,
|
|
213
262
|
server: server,
|
|
214
263
|
cardNum: cardNum,
|
|
264
|
+
disableWordPopover: disableWordPopover,
|
|
265
|
+
greekRepoUrl: greekRepoUrl,
|
|
266
|
+
hebrewRepoUrl: hebrewRepoUrl,
|
|
267
|
+
httpConfig: httpConfig,
|
|
215
268
|
languageId: languageId,
|
|
269
|
+
originalLanguageOwner: originalLanguageOwner,
|
|
270
|
+
readyForFetch: readyForFetch,
|
|
216
271
|
resourceId: resourceId,
|
|
217
272
|
resourceLink: resourceLink,
|
|
218
|
-
useUserLocalStorage: useUserLocalStorage,
|
|
219
|
-
disableWordPopover: disableWordPopover,
|
|
220
|
-
originalLanguageOwner: originalLanguageOwner,
|
|
221
273
|
setUrlError: function setUrlError(error) {
|
|
222
274
|
return setState({
|
|
223
275
|
urlError: error
|
|
224
276
|
});
|
|
225
277
|
},
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
hebrewRepoUrl: hebrewRepoUrl,
|
|
229
|
-
wholeBook: true,
|
|
230
|
-
readyForFetch: readyForFetch
|
|
278
|
+
useUserLocalStorage: useUserLocalStorage,
|
|
279
|
+
wholeBook: true
|
|
231
280
|
}),
|
|
232
281
|
isNewTestament = _useScriptureSettings.isNewTestament,
|
|
233
282
|
scriptureConfig = _useScriptureSettings.scriptureConfig,
|
|
@@ -318,7 +367,7 @@ export default function ScriptureCard(_ref) {
|
|
|
318
367
|
}, [bookId, owner, languageId, resourceId]);
|
|
319
368
|
React.useEffect(function () {
|
|
320
369
|
if (!isEqual(reference, currentReference)) {
|
|
321
|
-
console.log(
|
|
370
|
+
// console.log(`ScriptureCard reference changed`, reference)
|
|
322
371
|
setState({
|
|
323
372
|
currentReference: reference
|
|
324
373
|
});
|
|
@@ -442,7 +491,7 @@ export default function ScriptureCard(_ref) {
|
|
|
442
491
|
React.useEffect(function () {
|
|
443
492
|
// pre-cache glosses on verse change
|
|
444
493
|
var fetchGlossDataForVerse = /*#__PURE__*/function () {
|
|
445
|
-
var
|
|
494
|
+
var _ref3 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
|
|
446
495
|
var _verseObjects2;
|
|
447
496
|
|
|
448
497
|
var verseObjects, _iterator, _step, _verseRef$verseData, verseRef, _verseObjects;
|
|
@@ -484,7 +533,7 @@ export default function ScriptureCard(_ref) {
|
|
|
484
533
|
}));
|
|
485
534
|
|
|
486
535
|
return function fetchGlossDataForVerse() {
|
|
487
|
-
return
|
|
536
|
+
return _ref3.apply(this, arguments);
|
|
488
537
|
};
|
|
489
538
|
}();
|
|
490
539
|
|
|
@@ -526,13 +575,13 @@ export default function ScriptureCard(_ref) {
|
|
|
526
575
|
* @param {object} state - current state of word alignment/edit
|
|
527
576
|
*/
|
|
528
577
|
|
|
529
|
-
function _setSavedChanges(currentIndex, saved,
|
|
530
|
-
var
|
|
531
|
-
getChanges =
|
|
532
|
-
|
|
533
|
-
clearChanges =
|
|
534
|
-
|
|
535
|
-
state =
|
|
578
|
+
function _setSavedChanges(currentIndex, saved, _ref4) {
|
|
579
|
+
var _ref4$getChanges = _ref4.getChanges,
|
|
580
|
+
getChanges = _ref4$getChanges === void 0 ? null : _ref4$getChanges,
|
|
581
|
+
_ref4$clearChanges = _ref4.clearChanges,
|
|
582
|
+
clearChanges = _ref4$clearChanges === void 0 ? null : _ref4$clearChanges,
|
|
583
|
+
_ref4$state = _ref4.state,
|
|
584
|
+
state = _ref4$state === void 0 ? null : _ref4$state;
|
|
536
585
|
|
|
537
586
|
var _unsavedChangesList = _objectSpread({}, unsavedChangesList);
|
|
538
587
|
|
|
@@ -631,7 +680,7 @@ export default function ScriptureCard(_ref) {
|
|
|
631
680
|
React.useEffect(function () {
|
|
632
681
|
// when startSave goes true, save edits to user branch and then clear startSave
|
|
633
682
|
var _saveEdit = /*#__PURE__*/function () {
|
|
634
|
-
var
|
|
683
|
+
var _ref5 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
|
|
635
684
|
return regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
636
685
|
while (1) {
|
|
637
686
|
switch (_context2.prev = _context2.next) {
|
|
@@ -688,18 +737,15 @@ export default function ScriptureCard(_ref) {
|
|
|
688
737
|
}));
|
|
689
738
|
|
|
690
739
|
return function _saveEdit() {
|
|
691
|
-
return
|
|
740
|
+
return _ref5.apply(this, arguments);
|
|
692
741
|
};
|
|
693
742
|
}();
|
|
694
743
|
|
|
695
744
|
if (startSave) {
|
|
696
|
-
if (!editBranchReady) {
|
|
697
|
-
|
|
698
|
-
} else if (!sha) {
|
|
699
|
-
console.log("saveChangesToCloud - save sha not yet ready");
|
|
745
|
+
if (!editBranchReady) {// console.log(`saveChangesToCloud - edit branch not yet created`)
|
|
746
|
+
} else if (!sha) {// console.log(`saveChangesToCloud - save sha not yet ready`)
|
|
700
747
|
} else {
|
|
701
|
-
console.log(
|
|
702
|
-
|
|
748
|
+
// console.log(`saveChangesToCloud - calling _saveEdit()`)
|
|
703
749
|
_saveEdit();
|
|
704
750
|
}
|
|
705
751
|
}
|
|
@@ -800,12 +846,12 @@ export default function ScriptureCard(_ref) {
|
|
|
800
846
|
var _newUsfm = void 0;
|
|
801
847
|
|
|
802
848
|
var _getChanges3 = _getChanges2(_state2),
|
|
803
|
-
|
|
849
|
+
_ref7 = _getChanges3.ref,
|
|
804
850
|
_updatedVerseObjects = _getChanges3.updatedVerseObjects;
|
|
805
851
|
|
|
806
852
|
if (_updatedVerseObjects && bibleUsfm) {
|
|
807
853
|
// just replace verse
|
|
808
|
-
_newUsfm = mergeVerseObjectsIntoBibleUsfm(bibleUsfm,
|
|
854
|
+
_newUsfm = mergeVerseObjectsIntoBibleUsfm(bibleUsfm, _ref7, _updatedVerseObjects, _cardNum);
|
|
809
855
|
}
|
|
810
856
|
|
|
811
857
|
if (_newUsfm) {
|
|
@@ -845,13 +891,13 @@ export default function ScriptureCard(_ref) {
|
|
|
845
891
|
|
|
846
892
|
var _getChanges = getChanges(_state),
|
|
847
893
|
newVerseText = _getChanges.newVerseText,
|
|
848
|
-
|
|
894
|
+
_ref6 = _getChanges.ref,
|
|
849
895
|
updatedVerseObjects = _getChanges.updatedVerseObjects;
|
|
850
896
|
|
|
851
897
|
if (updatedVerseObjects && !newUsfm) {
|
|
852
898
|
var targetVerseObjects_ = null;
|
|
853
899
|
|
|
854
|
-
if (
|
|
900
|
+
if (_ref6) {
|
|
855
901
|
if (newVerseText) {
|
|
856
902
|
var _AlignmentHelpers$upd = AlignmentHelpers.updateAlignmentsToTargetVerse(updatedVerseObjects, newVerseText),
|
|
857
903
|
targetVerseObjects = _AlignmentHelpers$upd.targetVerseObjects;
|
|
@@ -861,7 +907,7 @@ export default function ScriptureCard(_ref) {
|
|
|
861
907
|
targetVerseObjects_ = updatedVerseObjects;
|
|
862
908
|
}
|
|
863
909
|
|
|
864
|
-
newBookJson = targetVerseObjects_ && (scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.updateVerse(
|
|
910
|
+
newBookJson = targetVerseObjects_ && (scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.updateVerse(_ref6.chapter, _ref6.verse, {
|
|
865
911
|
verseObjects: targetVerseObjects_
|
|
866
912
|
}));
|
|
867
913
|
}
|
|
@@ -889,9 +935,9 @@ export default function ScriptureCard(_ref) {
|
|
|
889
935
|
}
|
|
890
936
|
}, [saveClicked]); // @ts-ignore
|
|
891
937
|
|
|
892
|
-
var
|
|
893
|
-
chapter =
|
|
894
|
-
verse =
|
|
938
|
+
var _ref8 = _reference || {},
|
|
939
|
+
chapter = _ref8.chapter,
|
|
940
|
+
verse = _ref8.verse;
|
|
895
941
|
|
|
896
942
|
React.useEffect(function () {
|
|
897
943
|
var _versesForRef = scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.versesForRef;
|
|
@@ -1013,7 +1059,9 @@ export default function ScriptureCard(_ref) {
|
|
|
1013
1059
|
newState.verseObjectsMap = _map;
|
|
1014
1060
|
}
|
|
1015
1061
|
|
|
1016
|
-
|
|
1062
|
+
var booksNotSame = (reference === null || reference === void 0 ? void 0 : reference.projectId) !== (currentReference === null || currentReference === void 0 ? void 0 : currentReference.projectId);
|
|
1063
|
+
|
|
1064
|
+
if (booksNotSame || !areVersesSame(versesForRef, _versesForRef)) {
|
|
1017
1065
|
newState.versesForRef = _versesForRef;
|
|
1018
1066
|
newState.lastSelectedQuote = newSelectedQuote;
|
|
1019
1067
|
newState.selections = newSelections;
|
|
@@ -1053,9 +1101,9 @@ export default function ScriptureCard(_ref) {
|
|
|
1053
1101
|
var _versesForRef2;
|
|
1054
1102
|
|
|
1055
1103
|
if ((_versesForRef2 = _versesForRef) !== null && _versesForRef2 !== void 0 && _versesForRef2.length) {
|
|
1056
|
-
var
|
|
1057
|
-
_reference2 =
|
|
1058
|
-
_resourceLink2 =
|
|
1104
|
+
var _ref9 = scriptureConfig || {},
|
|
1105
|
+
_reference2 = _ref9.reference,
|
|
1106
|
+
_resourceLink2 = _ref9.resourceLink;
|
|
1059
1107
|
|
|
1060
1108
|
console.log("ScriptureCard._versesForRef changed", {
|
|
1061
1109
|
reference: _reference2,
|
|
@@ -1074,25 +1122,29 @@ export default function ScriptureCard(_ref) {
|
|
|
1074
1122
|
|
|
1075
1123
|
var initialVerseObjects = (_currentVerseData === null || _currentVerseData === void 0 ? void 0 : (_currentVerseData$ver = _currentVerseData.verseData) === null || _currentVerseData$ver === void 0 ? void 0 : _currentVerseData$ver.verseObjects) || []; // @ts-ignore
|
|
1076
1124
|
|
|
1077
|
-
var
|
|
1078
|
-
chapter =
|
|
1079
|
-
verse =
|
|
1125
|
+
var _ref10 = _currentVerseData || {},
|
|
1126
|
+
chapter = _ref10.chapter,
|
|
1127
|
+
verse = _ref10.verse;
|
|
1128
|
+
|
|
1129
|
+
var projectId = (currentReference === null || currentReference === void 0 ? void 0 : currentReference.projectId) || (reference === null || reference === void 0 ? void 0 : reference.projectId);
|
|
1080
1130
|
|
|
1081
1131
|
var _reference = _objectSpread(_objectSpread({}, _versesForRef), {}, {
|
|
1082
1132
|
chapter: chapter,
|
|
1083
|
-
verse: verse
|
|
1133
|
+
verse: verse,
|
|
1134
|
+
projectId: projectId
|
|
1084
1135
|
});
|
|
1085
1136
|
|
|
1086
1137
|
var _scriptureAlignmentEditConfig = _objectSpread(_objectSpread({}, scriptureAlignmentEditConfig), {}, {
|
|
1087
1138
|
currentIndex: index,
|
|
1088
1139
|
initialVerseObjects: initialVerseObjects,
|
|
1089
|
-
reference: _reference
|
|
1140
|
+
reference: _reference,
|
|
1141
|
+
isNewTestament: isNewTestament
|
|
1090
1142
|
});
|
|
1091
1143
|
|
|
1092
1144
|
var isVerseSelectedForAlignment = false;
|
|
1093
1145
|
|
|
1094
1146
|
if (verseSelectedForAlignment) {
|
|
1095
|
-
isVerseSelectedForAlignment = verseSelectedForAlignment.chapter
|
|
1147
|
+
isVerseSelectedForAlignment = verseSelectedForAlignment.chapter == chapter && verseSelectedForAlignment.verse == verse;
|
|
1096
1148
|
}
|
|
1097
1149
|
|
|
1098
1150
|
return /*#__PURE__*/React.createElement(ScripturePane, _extends({}, scriptureConfig, {
|
|
@@ -1136,8 +1188,8 @@ export default function ScriptureCard(_ref) {
|
|
|
1136
1188
|
}
|
|
1137
1189
|
};
|
|
1138
1190
|
|
|
1139
|
-
var onRenderToolbar = function onRenderToolbar(
|
|
1140
|
-
var items =
|
|
1191
|
+
var onRenderToolbar = function onRenderToolbar(_ref11) {
|
|
1192
|
+
var items = _ref11.items;
|
|
1141
1193
|
|
|
1142
1194
|
var newItems = _toConsumableArray(items);
|
|
1143
1195
|
|
|
@@ -1342,4 +1394,4 @@ ScriptureCard.propTypes = {
|
|
|
1342
1394
|
/**This is currently selected quote */
|
|
1343
1395
|
selectedQuote: PropTypes.object
|
|
1344
1396
|
};
|
|
1345
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL1NjcmlwdHVyZUNhcmQvU2NyaXB0dXJlQ2FyZC50c3giXSwibmFtZXMiOlsiUmVhY3QiLCJQcm9wVHlwZXMiLCJjb3JlIiwiU2VsZWN0aW9uc0NvbnRleHRQcm92aWRlciIsInVzZm1qcyIsInVzZUVkaXQiLCJJY29uQnV0dG9uIiwiUnhMaW5rMiIsIlJ4TGlua0JyZWFrMiIsIkNhcmQiLCJ1c2VDYXJkU3RhdGUiLCJ1c2VVc2VyQnJhbmNoIiwiRVJST1JfU1RBVEUiLCJNQU5JRkVTVF9OT1RfTE9BREVEX0VSUk9SIiwiZ2V0UXVvdGVNYXRjaGVzSW5Cb29rUmVmIiwiQWxpZ25tZW50SGVscGVycyIsIlVzZm1GaWxlQ29udmVyc2lvbkhlbHBlcnMiLCJpc0VxdWFsIiwiZ2V0VmVyc2VzIiwiU2NyaXB0dXJlUGFuZSIsIlNjcmlwdHVyZVNlbGVjdG9yIiwidXNlU2NyaXB0dXJlU2V0dGluZ3MiLCJjbGVhbnVwVmVyc2VPYmplY3RzIiwiZml4T2NjdXJyZW5jZSIsImdldFJlc291cmNlTGluayIsImdldFJlc291cmNlTWVzc2FnZSIsImdldFNjcmlwdHVyZVZlcnNpb25TZXR0aW5ncyIsImlzT3JpZ2luYWxCaWJsZSIsImRlbGF5IiwiYXJlTWFwc1RoZVNhbWUiLCJUaXRsZSIsIk5UX09SSUdfTEFORyIsIk9SSUdJTkFMX1NPVVJDRSIsIk9UX09SSUdfTEFORyIsIlZlcnNlU2VsZWN0b3JQb3B1cCIsIktFWV9GT05UX1NJWkVfQkFTRSIsImxhYmVsIiwic3R5bGUiLCJtYXJnaW5Ub3AiLCJ3aWR0aCIsIlNjcmlwdHVyZUNhcmQiLCJhcHBSZWYiLCJhdXRoZW50aWNhdGlvbiIsImJvb2tJbmRleCIsImNhcmROdW0iLCJjbGFzc2VzIiwiZGlzYWJsZVdvcmRQb3BvdmVyIiwiZmV0Y2hHbG9zc2VzRm9yVmVyc2UiLCJnZXRMYW5ndWFnZSIsImdldExleGljb25EYXRhIiwiZ3JlZWtSZXBvVXJsIiwiaGVicmV3UmVwb1VybCIsImh0dHBDb25maWciLCJpZCIsImlzTlQiLCJsb2dnZWRJblVzZXIiLCJvbk1pbmltaXplIiwib25SZXNvdXJjZUVycm9yIiwicmVmZXJlbmNlIiwicmVzb3VyY2UiLCJvd25lciIsImxhbmd1YWdlSWQiLCJyZXNvdXJjZUlkIiwib3JpZ2luYWxMYW5ndWFnZU93bmVyIiwicmVzb3VyY2VMaW5rIiwic2VsZWN0ZWRRdW90ZSIsInNlcnZlciIsInNldFNhdmVkQ2hhbmdlcyIsInNldFdvcmRBbGlnbmVyU3RhdHVzIiwidHJhbnNsYXRlIiwidGl0bGUiLCJ1c2VVc2VyTG9jYWxTdG9yYWdlIiwiYm9va0lkIiwicHJvamVjdElkIiwidXNlU3RhdGUiLCJjaGVja0ZvckVkaXRCcmFuY2giLCJjdXJyZW50UmVmZXJlbmNlIiwiZWRpdEJyYW5jaFJlYWR5IiwiaGF2ZVVuc2F2ZWRDaGFuZ2VzIiwibGFzdFNlbGVjdGVkUXVvdGUiLCJvcmlnaW5hbFZlcnNlT2JqZWN0cyIsInJlYWR5Rm9yRmV0Y2giLCJyZWYiLCJzYXZlQ2xpY2tlZCIsInNhdmVDb250ZW50Iiwic2VsZWN0aW9ucyIsIk1hcCIsInNoYSIsInN0YXJ0U2F2ZSIsInVybEVycm9yIiwidXNpbmdVc2VyQnJhbmNoIiwidW5zYXZlZENoYW5nZXNMaXN0IiwidmVyc2VzRm9yUmVmIiwic2hvd0FsaWdubWVudFBvcHVwIiwidmVyc2VTZWxlY3RlZEZvckFsaWdubWVudCIsInZlcnNlc0FsaWdubWVudFN0YXR1cyIsInZlcnNlT2JqZWN0c01hcCIsInN0YXRlIiwic2V0U3RhdGVfIiwiZm9udFNpemUiLCJzZXRGb250U2l6ZSIsImlzTlRfIiwic2V0U3RhdGUiLCJuZXdTdGF0ZSIsInByZXZTdGF0ZSIsInNldE9yaWdpbmFsU2NyaXB0dXJlUmVzb3VyY2UiLCJuZXdSZXNvdXJjZSIsIm5ld0Jvb2tPYmplY3RzIiwiYm9va09iamVjdHMiLCJfbmV3Qm9va09iamVjdHMiLCJjYWNoZSIsIm1heEFnZSIsIm5vQ2FjaGUiLCJzZXRVcmxFcnJvciIsImVycm9yIiwid2hvbGVCb29rIiwiaXNOZXdUZXN0YW1lbnQiLCJzY3JpcHR1cmVDb25maWciLCJzZXRTY3JpcHR1cmUiLCJzY3JpcHR1cmVTZXR0aW5ncyIsInNjcmlwdHVyZVZlcnNpb25IaXN0IiwiZmV0Y2hSZXNwXyIsImZldGNoUmVzcG9uc2UiLCJyZXBvIiwicmVmZXJlbmNlXyIsInVzZUVmZmVjdCIsIl9zaGEiLCJkYXRhIiwidXJsIiwiZG93bmxvYWRfdXJsIiwidmFsaWRCcmFuY2giLCJwYXJ0cyIsInNwbGl0IiwiZmV0Y2hCcmFuY2giLCJsZW5ndGgiLCJjb25zb2xlIiwibG9nIiwiSlNPTiIsInN0cmluZ2lmeSIsImNhcmRSZXNvdXJjZUlkIiwicmVmXyIsImNhblVzZUVkaXRCcmFuY2giLCJpbmNsdWRlcyIsImNhcmRJZCIsImJyYW5jaERldGVybWluZWQiLCJ1c2VyRWRpdEJyYW5jaE5hbWUiLCJfdXNpbmdVc2VyQnJhbmNoIiwid29ya2luZ1Jlc291cmNlQnJhbmNoIiwic3RhcnRFZGl0QnJhbmNoIiwiYWN0aW9ucyIsInN0YXJ0RWRpdCIsIndvcmtpbmdSZWYiLCJzY3JpcHR1cmVUaXRsZSIsInJlc291cmNlU3RhdHVzIiwibWVzc2FnZSIsImlzQWNjZXNzRXJyb3IiLCJ2ZXJzaW9uIiwidXBkYXRlVGl0bGUiLCJnZXRTY3JpcHR1cmVTZWxlY3RvciIsInNjcmlwdHVyZVNlbGVjdGlvbkNvbmZpZyIsIm9uTWVudUNsb3NlIiwibGFuZ3VhZ2VJZF8iLCJsYW5ndWFnZSIsImRpcmVjdGlvbiIsIl9yZWZlcmVuY2UiLCJpc0hlYnJldyIsImZvbnRGYWN0b3IiLCJzY2FsZWRGb250U2l6ZSIsIml0ZW1zIiwiaGVhZGVycyIsImZpbHRlcnMiLCJpdGVtSW5kZXgiLCJtYXJrZG93blZpZXciLCJzZXRGaWx0ZXJzIiwic2V0SXRlbUluZGV4Iiwic2V0TWFya2Rvd25WaWV3IiwicmVmU3R5bGUiLCJ1c2VNZW1vIiwiZm9udEZhbWlseSIsIk1hdGgiLCJyb3VuZCIsImNvbnRlbnRTdHlsZSIsInNjcmlwdHVyZUxhYmVsIiwiZGlzYWJsZVdvcmRQb3BvdmVyXyIsInVzaW5nT3JpZ2luYWxCaWJsZSIsInVuZGVmaW5lZCIsImZldGNoR2xvc3NEYXRhRm9yVmVyc2UiLCJ2ZXJzZU9iamVjdHMiLCJ2ZXJzZVJlZiIsIl92ZXJzZU9iamVjdHMiLCJ2ZXJzZURhdGEiLCJjb25jYXQiLCJlbmFibGVFZGl0IiwiZW5hYmxlQWxpZ25tZW50Iiwib3JpZ2luYWxSZXBvVXJsIiwic2NyaXB0dXJlQWxpZ25tZW50RWRpdENvbmZpZyIsImN1cnJlbnRWZXJzZVJlZiIsIl9zZXRTYXZlZENoYW5nZXMiLCJzb3VyY2VMYW5ndWFnZSIsInRhcmdldExhbmd1YWdlIiwiY3VycmVudEluZGV4Iiwic2F2ZWQiLCJnZXRDaGFuZ2VzIiwiY2xlYXJDaGFuZ2VzIiwiX3Vuc2F2ZWRDaGFuZ2VzTGlzdCIsImhhc093blByb3BlcnR5IiwiX2hhdmVVbnNhdmVkQ2hhbmdlcyIsIk9iamVjdCIsImtleXMiLCJmaW5kUmVmSW5BcnJheSIsImZpbmRJdGVtIiwiY2h1bmtzIiwicmVmTGVuIiwiaW5kZXgiLCJmaW5kSW5kZXgiLCJjaHVuayIsImlkeCIsInN1YnN0cmluZyIsIm5leHRDaGFyIiwiZ2V0Qm9va05hbWUiLCJib29rQ2FwcyIsInRvVXBwZXJDYXNlIiwiZmlsZXBhdGgiLCJjb250ZW50IiwiY29uZmlnIiwidG9rZW4iLCJ0aW1lb3V0Iiwic2VydmVyVGltZU91dCIsImF1dGhvciIsImJyYW5jaCIsInNhdmVFcnJvciIsImlzU2F2ZUVycm9yIiwiaXNFcnJvciIsIm9uU2F2ZUVkaXQiLCJfc2F2ZUVkaXQiLCJpbmZvIiwidGhlbiIsInN1Y2Nlc3MiLCJ1bnNhdmVkQ2FyZEluZGljZXMiLCJjYXJkSW5kZXgiLCJyZWxvYWRSZXNvdXJjZSIsIm1lcmdlVmVyc2VPYmplY3RzSW50b0JpYmxlVXNmbSIsImJpYmxlVXNmbSIsInVwZGF0ZWRWZXJzZU9iamVjdHMiLCJuZXdVc2ZtIiwiY2hhcHRlckNodW5rcyIsImNoYXB0ZXJJbmRleCIsImNoYXB0ZXIiLCJjdXJyZW50Q2hhcHRlciIsInZlcnNlQ2h1bmtzIiwidmVyc2VJbmRleCIsInZlcnNlIiwibmV3VmVyc2VVc2ZtIiwiY29udmVydFZlcnNlRGF0YVRvVVNGTSIsIm9sZFZlcnNlIiwidmVyc2VOdW1MZW4iLCJuZXdDaGFwdGVyIiwiam9pbiIsImNyZWF0ZUVkaXRCcmFuY2giLCJ3YXJuIiwiZ2V0UmVzcG9uc2VEYXRhIiwibWVyZ2VGYWlsIiwicGFyc2VJbnQiLCJuZXdCb29rSnNvbiIsIm5ld1ZlcnNlVGV4dCIsInRhcmdldFZlcnNlT2JqZWN0c18iLCJ1cGRhdGVBbGlnbm1lbnRzVG9UYXJnZXRWZXJzZSIsInRhcmdldFZlcnNlT2JqZWN0cyIsInVwZGF0ZVZlcnNlIiwidG9VU0ZNIiwiZm9yY2VkTmV3TGluZXMiLCJfdmVyc2VzRm9yUmVmIiwibmV3U2VsZWN0aW9ucyIsInVwZGF0ZVNlbGVjdGlvbnMiLCJfbWFwIiwib3JpZ2luYWxCb29rSWQiLCJib29rVmVyc2VPYmplY3QiLCJjaGFwdGVycyIsIm5ld1NlbGVjdGVkUXVvdGUiLCJxdW90ZSIsIm9yaWdpbmFsVmVyc2VzIiwic3Vic3RpdHV0ZSIsInN0YXJ0VmVyc2UiLCJsYXN0VmVyc2UiLCJpIiwibCIsIl92ZXJzZSIsInZlcnNlcyIsInZlcnNlSXRlbSIsInZvIiwic2V0Iiwic3ViUmVmIiwicXVvdGVNYXRjaGVzIiwiYm9va09iamVjdCIsIm9jY3VycmVuY2UiLCJzaXplIiwiZm9yRWFjaCIsIndvcmRzIiwia2V5IiwiX2tleSIsIm1hcCIsIndvcmQiLCJ0ZXh0Iiwibm9ybWFsaXplU3RyaW5nIiwidXBkYXRlVmVyc2VzQWxpZ25tZW50U3RhdHVzIiwiYWxpZ25lZCIsInJlbmRlcmVkU2NyaXB0dXJlUGFuZXMiLCJfY3VycmVudFZlcnNlRGF0YSIsImluaXRpYWxWZXJzZU9iamVjdHMiLCJfc2NyaXB0dXJlQWxpZ25tZW50RWRpdENvbmZpZyIsImlzVmVyc2VTZWxlY3RlZEZvckFsaWdubWVudCIsImhhbmRsZUFsaWduQnV0dG9uQ2xpY2siLCJvblJlbmRlclRvb2xiYXIiLCJuZXdJdGVtcyIsImFsbFZlcnNlc0FsaWduZWQiLCJ2YWx1ZXMiLCJldmVyeSIsImFsaWduU3RhdHVzIiwiYWxpZ25JY29uIiwiYWxpZ25CdXR0b25UZXh0IiwicHVzaCIsImN1cnNvciIsInByb3BUeXBlcyIsInN0cmluZyIsImZ1bmMiLCJpc1JlcXVpcmVkIiwibnVtYmVyIiwic2hhcGUiLCJvbmVPZlR5cGUiLCJib29sIiwib2JqZWN0IiwiYW55Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBS0EsS0FBWixNQUF1QixPQUF2QjtBQUNBLE9BQU8sS0FBS0MsU0FBWixNQUEyQixZQUEzQjtBQUNBLFNBQVNDLElBQVQsRUFBZUMseUJBQWYsUUFBZ0QseUJBQWhEO0FBQ0EsT0FBT0MsTUFBUCxNQUFtQixTQUFuQjtBQUNBLFNBQVNDLE9BQVQsUUFBd0IscUJBQXhCO0FBQ0EsU0FBU0MsVUFBVCxRQUEyQixlQUEzQjtBQUNBLFNBQVNDLE9BQVQsRUFBa0JDLFlBQWxCLFFBQXNDLGdCQUF0QztBQUNBLFNBQ0VDLElBREYsRUFHRUMsWUFIRixFQUlFQyxhQUpGLEVBS0VDLFdBTEYsRUFNRUMseUJBTkYsUUFPTyx1QkFQUDtBQVFBLFNBQVNDLHdCQUFULFFBQXlDLGtCQUF6QztBQUNBLFNBQVNDLGdCQUFULEVBQTJCQyx5QkFBM0IsUUFBNEQsa0JBQTVEO0FBQ0EsT0FBTyxLQUFLQyxPQUFaLE1BQXlCLFlBQXpCO0FBQ0EsU0FBU0MsU0FBVCxRQUEwQix1QkFBMUI7QUFDQSxTQUFTQyxhQUFULEVBQXdCQyxpQkFBeEIsUUFBaUQsSUFBakQ7QUFDQSxTQUFTQyxvQkFBVCxRQUFxQyxrQ0FBckM7QUFDQSxTQUNFQyxtQkFERixFQUVFQyxhQUZGLEVBR0VDLGVBSEYsRUFJRUMsa0JBSkYsRUFLRUMsMkJBTEYsRUFNRUMsZUFORixRQU9PLCtCQVBQ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LEVBQUFBLGNBQWMsRUFBRXpDLFNBQVMsQ0FBQ3lVLE1BaEVGOztBQWlFeEI7QUFDQXZRLEVBQUFBLGVBQWUsRUFBRWxFLFNBQVMsQ0FBQ21VLElBbEVIOztBQW1FeEI7QUFDQXpSLEVBQUFBLFNBQVMsRUFBRTFDLFNBQVMsQ0FBQ2tVLE1BcEVHOztBQXFFeEI7QUFDQS9QLEVBQUFBLG9CQUFvQixFQUFFbkUsU0FBUyxDQUFDbVUsSUF0RVI7O0FBdUV4QjtBQUNBblEsRUFBQUEsYUFBYSxFQUFFaEUsU0FBUyxDQUFDeVU7QUF4RUQsQ0FBMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuaW1wb3J0IHsgY29yZSwgU2VsZWN0aW9uc0NvbnRleHRQcm92aWRlciB9IGZyb20gJ3NjcmlwdHVyZS1yZXNvdXJjZXMtcmNsJ1xuaW1wb3J0IHVzZm1qcyBmcm9tICd1c2ZtLWpzJ1xuaW1wb3J0IHsgdXNlRWRpdCB9IGZyb20gJ2dpdGVhLXJlYWN0LXRvb2xraXQnXG5pbXBvcnQgeyBJY29uQnV0dG9uIH0gZnJvbSAnQG11aS9tYXRlcmlhbCdcbmltcG9ydCB7IFJ4TGluazIsIFJ4TGlua0JyZWFrMiB9IGZyb20gJ3JlYWN0LWljb25zL3J4J1xuaW1wb3J0IHtcbiAgQ2FyZCxcblxuICB1c2VDYXJkU3RhdGUsXG4gIHVzZVVzZXJCcmFuY2gsXG4gIEVSUk9SX1NUQVRFLFxuICBNQU5JRkVTVF9OT1RfTE9BREVEX0VSUk9SLFxufSBmcm9tICd0cmFuc2xhdGlvbi1oZWxwcy1yY2wnXG5pbXBvcnQgeyBnZXRRdW90ZU1hdGNoZXNJbkJvb2tSZWYgfSBmcm9tICd1dy1xdW90ZS1oZWxwZXJzJ1xuaW1wb3J0IHsgQWxpZ25tZW50SGVscGVycywgVXNmbUZpbGVDb252ZXJzaW9uSGVscGVycyB9IGZyb20gJ3dvcmQtYWxpZ25lci1yY2wnXG5pbXBvcnQgKiBhcyBpc0VxdWFsIGZyb20gJ2RlZXAtZXF1YWwnXG5pbXBvcnQgeyBnZXRWZXJzZXMgfSBmcm9tICdiaWJsZS1yZWZlcmVuY2UtcmFuZ2UnXG5pbXBvcnQgeyBTY3JpcHR1cmVQYW5lLCBTY3JpcHR1cmVTZWxlY3RvciB9IGZyb20gJy4uJ1xuaW1wb3J0IHsgdXNlU2NyaXB0dXJlU2V0dGluZ3MgfSBmcm9tICcuLi8uLi9ob29rcy91c2VTY3JpcHR1cmVTZXR0aW5ncydcbmltcG9ydCB7XG4gIGNsZWFudXBWZXJzZU9iamVjdHMsXG4gIGZpeE9jY3VycmVuY2UsXG4gIGdldFJlc291cmNlTGluayxcbiAgZ2V0UmVzb3VyY2VNZXNzYWdlLFxuICBnZXRTY3JpcHR1cmVWZXJzaW9uU2V0dGluZ3MsXG4gIGlzT3JpZ2luYWxCaWJsZSxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvU2NyaXB0dXJlU2V0dGluZ3MnXG5pbXBvcnQgeyBkZWxheSB9IGZyb20gJy4uLy4uL3V0aWxzL2RlbGF5J1xuaW1wb3J0IHsgYXJlTWFwc1RoZVNhbWUgfSBmcm9tICcuLi8uLi91dGlscy9tYXBzJ1xuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICcuLi9TY3JpcHR1cmVQYW5lL3N0eWxlZCdcbmltcG9ydCB7XG4gIE5UX09SSUdfTEFORyxcbiAgT1JJR0lOQUxfU09VUkNFLFxuICBPVF9PUklHX0xBTkcsXG59IGZyb20gJy4uLy4uL3V0aWxzJ1xuaW1wb3J0IHsgVmVyc2VTZWxlY3RvclBvcHVwIH0gZnJvbSAnLi4vVmVyc2VTZWxlY3RvclBvcHVwJ1xuXG5jb25zdCBLRVlfRk9OVF9TSVpFX0JBU0UgPSAnc2NyaXB0dXJlUGFuZUZvbnRTaXplXydcbmNvbnN0IGxhYmVsID0gJ1ZlcnNpb24nXG5jb25zdCBzdHlsZSA9IHsgbWFyZ2luVG9wOiAnMTZweCcsIHdpZHRoOiAnNTAwcHgnIH1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU2NyaXB0dXJlQ2FyZCh7XG4gIGFwcFJlZixcbiAgYXV0aGVudGljYXRpb24sXG4gIGJvb2tJbmRleCxcbiAgY2FyZE51bSxcbiAgY2xhc3NlcyxcbiAgZGlzYWJsZVdvcmRQb3BvdmVyLFxuICBmZXRjaEdsb3NzZXNGb3JWZXJzZSxcbiAgZ2V0TGFuZ3VhZ2UsXG4gIGdldExleGljb25EYXRhLFxuICBncmVla1JlcG9VcmwsXG4gIGhlYnJld1JlcG9VcmwsXG4gIGh0dHBDb25maWcsXG4gIGlkLFxuICBpc05ULFxuICBsb2dnZWRJblVzZXIsXG4gIG9uTWluaW1pemUsXG4gIG9uUmVzb3VyY2VFcnJvcixcbiAgcmVmZXJlbmNlLFxuICByZXNvdXJjZToge1xuICAgIG93bmVyLFxuICAgIGxhbmd1YWdlSWQsXG4gICAgcmVzb3VyY2VJZCxcbiAgICBvcmlnaW5hbExhbmd1YWdlT3duZXIsXG4gIH0sXG4gIHJlc291cmNlTGluayxcbiAgc2VsZWN0ZWRRdW90ZSxcbiAgc2VydmVyLFxuICBzZXRTYXZlZENoYW5nZXMsXG4gIHNldFdvcmRBbGlnbmVyU3RhdHVzLFxuICB0cmFuc2xhdGUsXG4gIHRpdGxlLFxuICB1c2VVc2VyTG9jYWxTdG9yYWdlLFxufSkge1xuICBjb25zdCBib29rSWQgPSByZWZlcmVuY2U/LnByb2plY3RJZFxuICBjb25zdCBbc3RhdGUsIHNldFN0YXRlX10gPSBSZWFjdC51c2VTdGF0ZSh7XG4gICAgY2hlY2tGb3JFZGl0QnJhbmNoOiAwLFxuICAgIGN1cnJlbnRSZWZlcmVuY2U6IG51bGwsXG4gICAgZWRpdEJyYW5jaFJlYWR5OiBmYWxzZSxcbiAgICBoYXZlVW5zYXZlZENoYW5nZXM6IGZhbHNlLFxuICAgIGxhc3RTZWxlY3RlZFF1b3RlOiBudWxsLFxuICAgIG9yaWdpbmFsVmVyc2VPYmplY3RzOiBudWxsLFxuICAgIHJlYWR5Rm9yRmV0Y2g6IGZhbHNlLFxuICAgIHJlZjogYXBwUmVmLFxuICAgIHNhdmVDbGlja2VkOiBmYWxzZSxcbiAgICBzYXZlQ29udGVudDogbnVsbCxcbiAgICBzZWxlY3Rpb25zOiBuZXcgTWFwKCksXG4gICAgc2hhOiBudWxsLFxuICAgIHN0YXJ0U2F2ZTogZmFsc2UsXG4gICAgdXJsRXJyb3I6IG51bGwsXG4gICAgdXNpbmdVc2VyQnJhbmNoOiBmYWxzZSxcbiAgICB1bnNhdmVkQ2hhbmdlc0xpc3Q6IHt9LFxuICAgIHZlcnNlc0ZvclJlZjogbnVsbCxcbiAgICBzaG93QWxpZ25tZW50UG9wdXA6IGZhbHNlLFxuICAgIHZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQ6IG51bGwsXG4gICAgdmVyc2VzQWxpZ25tZW50U3RhdHVzOiBudWxsLFxuICAgIHZlcnNlT2JqZWN0c01hcDogbmV3IE1hcCgpLFxuICB9KVxuICBjb25zdCB7XG4gICAgY2hlY2tGb3JFZGl0QnJhbmNoLFxuICAgIGN1cnJlbnRSZWZlcmVuY2UsXG4gICAgZWRpdEJyYW5jaFJlYWR5LFxuICAgIGhhdmVVbnNhdmVkQ2hhbmdlcyxcbiAgICBsYXN0U2VsZWN0ZWRRdW90ZSxcbiAgICBvcmlnaW5hbFZlcnNlT2JqZWN0cyxcbiAgICByZWFkeUZvckZldGNoLFxuICAgIHJlZixcbiAgICBzYXZlQ2xpY2tlZCxcbiAgICBzYXZlQ29udGVudCxcbiAgICBzZWxlY3Rpb25zLFxuICAgIHNoYSxcbiAgICBzaG93QWxpZ25tZW50UG9wdXAsXG4gICAgc3RhcnRTYXZlLFxuICAgIHVybEVycm9yLFxuICAgIHVzaW5nVXNlckJyYW5jaCxcbiAgICB1bnNhdmVkQ2hhbmdlc0xpc3QsXG4gICAgdmVyc2VPYmplY3RzTWFwLFxuICAgIHZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQsXG4gICAgdmVyc2VzQWxpZ25tZW50U3RhdHVzLFxuICAgIHZlcnNlc0ZvclJlZixcbiAgfSA9IHN0YXRlXG5cbiAgY29uc3QgW2ZvbnRTaXplLCBzZXRGb250U2l6ZV0gPSB1c2VVc2VyTG9jYWxTdG9yYWdlKEtFWV9GT05UX1NJWkVfQkFTRSArIGNhcmROdW0sIDEwMClcbiAgY29uc3QgaXNOVF8gPSBpc05UKGJvb2tJZClcblxuICBmdW5jdGlvbiBzZXRTdGF0ZShuZXdTdGF0ZSkge1xuICAgIHNldFN0YXRlXyhwcmV2U3RhdGUgPT4gKHsgLi4ucHJldlN0YXRlLCAuLi5uZXdTdGF0ZSB9KSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldE9yaWdpbmFsU2NyaXB0dXJlUmVzb3VyY2UobmV3UmVzb3VyY2UpIHtcbiAgICBjb25zdCBuZXdCb29rT2JqZWN0cyA9IG5ld1Jlc291cmNlPy5ib29rT2JqZWN0cyB8fCB7fVxuICAgIGNvbnN0IGJvb2tJZCA9IG5ld1Jlc291cmNlPy5yZWZlcmVuY2U/LnByb2plY3RJZFxuICAgIGNvbnN0IF9uZXdCb29rT2JqZWN0cyA9IHtcbiAgICAgIC4uLm5ld0Jvb2tPYmplY3RzLFxuICAgICAgYm9va0lkLFxuICAgIH1cblxuICAgIGlmICghaXNFcXVhbChfbmV3Qm9va09iamVjdHMsIG9yaWdpbmFsVmVyc2VPYmplY3RzKSkge1xuICAgICAgc2V0U3RhdGUoeyBvcmlnaW5hbFZlcnNlT2JqZWN0czogX25ld0Jvb2tPYmplY3RzIH0pXG4gICAgfVxuICB9XG5cbiAgaWYgKHVzaW5nVXNlckJyYW5jaCkge1xuICAgIGh0dHBDb25maWcgPSB7XG4gICAgICAuLi5odHRwQ29uZmlnLFxuICAgICAgY2FjaGU6IHsgbWF4QWdlOiAwIH0sXG4gICAgICBub0NhY2hlOiB0cnVlLFxuICAgIH0gLy8gZGlzYWJsZSBodHRwIGNhY2hpbmdcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBpc05ld1Rlc3RhbWVudCxcbiAgICBzY3JpcHR1cmVDb25maWcsXG4gICAgc2V0U2NyaXB0dXJlLFxuICAgIHNjcmlwdHVyZVNldHRpbmdzLFxuICAgIHNjcmlwdHVyZVZlcnNpb25IaXN0LFxuICB9ID0gdXNlU2NyaXB0dXJlU2V0dGluZ3Moe1xuICAgIGlzTlQsXG4gICAgdGl0bGUsXG4gICAgb3duZXIsXG4gICAgcmVmZXJlbmNlOiBjdXJyZW50UmVmZXJlbmNlLFxuICAgIGFwcFJlZjogcmVmLFxuICAgIHNlcnZlcixcbiAgICBjYXJkTnVtLFxuICAgIGxhbmd1YWdlSWQsXG4gICAgcmVzb3VyY2VJZCxcbiAgICByZXNvdXJjZUxpbmssXG4gICAgdXNlVXNlckxvY2FsU3RvcmFnZSxcbiAgICBkaXNhYmxlV29yZFBvcG92ZXIsXG4gICAgb3JpZ2luYWxMYW5ndWFnZU93bmVyLFxuICAgIHNldFVybEVycm9yOiAoZXJyb3IpID0+IHNldFN0YXRlKHsgdXJsRXJyb3I6IGVycm9yIH0pLFxuICAgIGh0dHBDb25maWcsXG4gICAgZ3JlZWtSZXBvVXJsLFxuICAgIGhlYnJld1JlcG9VcmwsXG4gICAgd2hvbGVCb29rOiB0cnVlLFxuICAgIHJlYWR5Rm9yRmV0Y2gsXG4gIH0pXG5cbiAgY29uc3QgZmV0Y2hSZXNwXyA9IHNjcmlwdHVyZUNvbmZpZz8uZmV0Y2hSZXNwb25zZVxuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IHJlcG8gPSBgJHtzY3JpcHR1cmVDb25maWc/LnJlc291cmNlPy5sYW5ndWFnZUlkfV8ke3NjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2U/LnByb2plY3RJZH1gXG4gIGNvbnN0IHJlZmVyZW5jZV8gPSBzY3JpcHR1cmVDb25maWc/LnJlZmVyZW5jZSB8fCBudWxsXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gZ2V0IHRoZSBfc2hhIGZyb20gbGFzdCBzY3JpcHR1cmUgZG93bmxvYWRcbiAgICBjb25zdCBfc2hhID0gZmV0Y2hSZXNwXz8uZGF0YT8uc2hhIHx8IG51bGxcbiAgICBjb25zdCB1cmwgPSBmZXRjaFJlc3BfPy5kYXRhPy5kb3dubG9hZF91cmwgfHwgbnVsbFxuICAgIGxldCB2YWxpZEJyYW5jaCA9IHRydWVcblxuICAgIGlmIChfc2hhKSB7IC8vIFRSSUNLWTogc2luY2UgdGhpcyBmZXRjaCBtYXkgYmUgZGVsYXllZCAtIG1ha2Ugc3VyZSBpdCB3YXMgZm9yIHRoZSBjdXJyZW50IGJyYW5jaCBiZWZvcmUgdXNpbmcgdGhlIHNoYVxuICAgICAgY29uc3QgcGFydHMgPSAodXJsIHx8ICcnKS5zcGxpdCgnLycpXG4gICAgICBjb25zdCBmZXRjaEJyYW5jaCA9IHBhcnRzLmxlbmd0aCA+IDcgPyBwYXJ0c1s3XSA6ICcnXG4gICAgICB2YWxpZEJyYW5jaCA9IGZldGNoQnJhbmNoID09PSByZWZcbiAgICB9XG5cbiAgICBpZiAodmFsaWRCcmFuY2ggJiYgX3NoYSAhPT0gc2hhKSB7XG4gICAgICBjb25zb2xlLmxvZyhgU2NyaXB0dXJlQ2FyZDogZm9yICR7dXJsfSAke0pTT04uc3RyaW5naWZ5KHJlZmVyZW5jZV8pfSBuZXcgc2hhIGlzICR7X3NoYX1gKVxuICAgICAgc2V0U3RhdGUoeyBzaGE6IF9zaGEgfSlcbiAgICB9XG4gIH0sIFtmZXRjaFJlc3BfXSlcblxuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IGNhcmRSZXNvdXJjZUlkID0gc2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZT8ucHJvamVjdElkIHx8IHJlc291cmNlSWRcbiAgLy8gQHRzLWlnbm9yZVxuICBsZXQgcmVmXyA9IHNjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2U/LnJlZiB8fCBhcHBSZWZcbiAgY29uc3QgY2FuVXNlRWRpdEJyYW5jaCA9ICEhKGxvZ2dlZEluVXNlciAmJiBhdXRoZW50aWNhdGlvbiAmJiAocmVzb3VyY2VJZCAhPT0gT1JJR0lOQUxfU09VUkNFKSAmJiAvLyBUUklDS1kgaWYgbm90IG9yaWdpbmFsIGxhbmd1YWdlIGFuZCB3ZSBoYXZlIGxvZ2luIGRhdGEsIHRoZW4gd2UgY2FuIHVzZSB0aGUgZWRpdCBicmFuY2hcbiAgICAoKHJlZl8gPT09ICdtYXN0ZXInKSB8fCAocmVmXy5pbmNsdWRlcyhsb2dnZWRJblVzZXIpKSkpIC8vIGFsc28gbWFrZSBzdXJlIG5vdCBhIHZlcnNpb24gdGFnXG5cbiAgY29uc3Qge1xuICAgIHN0YXRlOiB7XG4gICAgICBicmFuY2hEZXRlcm1pbmVkLFxuICAgICAgdXNlckVkaXRCcmFuY2hOYW1lLFxuICAgICAgdXNpbmdVc2VyQnJhbmNoOiBfdXNpbmdVc2VyQnJhbmNoLFxuICAgICAgd29ya2luZ1Jlc291cmNlQnJhbmNoLFxuICAgIH0sXG4gICAgYWN0aW9uczogeyBzdGFydEVkaXQ6IHN0YXJ0RWRpdEJyYW5jaCB9LFxuICB9ID0gdXNlVXNlckJyYW5jaCh7XG4gICAgYXBwUmVmLFxuICAgIGF1dGhlbnRpY2F0aW9uOiBjYW5Vc2VFZGl0QnJhbmNoID8gYXV0aGVudGljYXRpb24gOiBudWxsLFxuICAgIGJvb2tJZCxcbiAgICBjYXJkSWQ6IGlkLFxuICAgIGNhcmRSZXNvdXJjZUlkLFxuICAgIGNoZWNrRm9yRWRpdEJyYW5jaCxcbiAgICBsYW5ndWFnZUlkLFxuICAgIGxvZ2dlZEluVXNlcjogY2FuVXNlRWRpdEJyYW5jaCA/IGxvZ2dlZEluVXNlciA6IG51bGwsXG4gICAgb3duZXIsXG4gICAgb25SZXNvdXJjZUVycm9yLFxuICAgIHNlcnZlcixcbiAgICB1c2VVc2VyTG9jYWxTdG9yYWdlLFxuICB9KVxuXG4gIGNvbnN0IHdvcmtpbmdSZWYgPSBjYW5Vc2VFZGl0QnJhbmNoID8gd29ya2luZ1Jlc291cmNlQnJhbmNoIDogYXBwUmVmXG4gIGxldCBzY3JpcHR1cmVUaXRsZVxuXG4gIGlmICghY2FuVXNlRWRpdEJyYW5jaCAmJiAhcmVhZHlGb3JGZXRjaCkgeyAvLyBpZiBiaWJsZSBub3QgZWxpZ2libGUgZm9yIHVzZXIgYnJhbmNoLCBtYWtlIHN1cmUgaXQncyByZWFkeVxuICAgIHNldFN0YXRlKHsgcmVhZHlGb3JGZXRjaDogdHJ1ZSB9KVxuICB9XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhgU2NyaXB0dXJlQ2FyZCBib29rIGNoYW5nZWRgLCB7IGJvb2tJZCwgb3duZXIsIGxhbmd1YWdlSWQsIHJlc291cmNlSWQgfSlcblxuICAgIGlmIChjYW5Vc2VFZGl0QnJhbmNoKSB7IC8vIGlmIGJpYmxlIGVsaWdpYmxlIGZvciB1c2VyIGJyYW5jaCwgcmVmcmVzaCBpdFxuICAgICAgc2V0U3RhdGUoeyByZWFkeUZvckZldGNoOiBmYWxzZSwgY2hlY2tGb3JFZGl0QnJhbmNoOiBjaGVja0ZvckVkaXRCcmFuY2ggKyAxIH0pXG4gICAgfVxuICB9LCBbYm9va0lkLCBvd25lciwgbGFuZ3VhZ2VJZCwgcmVzb3VyY2VJZF0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzRXF1YWwocmVmZXJlbmNlLCBjdXJyZW50UmVmZXJlbmNlKSkge1xuICAgICAgY29uc29sZS5sb2coYFNjcmlwdHVyZUNhcmQgcmVmZXJlbmNlIGNoYW5nZWRgLCByZWZlcmVuY2UpXG4gICAgICBzZXRTdGF0ZSh7IGN1cnJlbnRSZWZlcmVuY2U6IHJlZmVyZW5jZSB9KVxuICAgIH1cbiAgfSwgW3JlZmVyZW5jZV0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gd2FpdGluZyBmb3IgYnJhbmNoIGZldGNoIHRvIGNvbXBsZXRlXG4gICAgY29uc29sZS5sb2coYFNjcmlwdHVyZUNhcmQgYnJhbmNoRGV0ZXJtaW5lZCBpcyAke2JyYW5jaERldGVybWluZWR9IGFuZCB3b3JraW5nUmVmIGlzICR7d29ya2luZ1JlZn0gYW5kIHJlYWR5Rm9yRmV0Y2ggaXMgJHtyZWFkeUZvckZldGNofWApXG5cbiAgICBpZiAoIXJlYWR5Rm9yRmV0Y2ggJiYgYnJhbmNoRGV0ZXJtaW5lZCApIHtcbiAgICAgIHNldFN0YXRlKHsgcmVhZHlGb3JGZXRjaDogdHJ1ZSwgcmVmOiB3b3JraW5nUmVmIH0pXG4gICAgfVxuICB9LCBbYnJhbmNoRGV0ZXJtaW5lZF0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gc2VsZWN0IGNvcnJlY3Qgd29ya2luZyByZWYgLSBjb3VsZCBiZSBtYXN0ZXIsIHVzZXIgYnJhbmNoLCBvciByZWxlYXNlXG4gICAgaWYgKF91c2luZ1VzZXJCcmFuY2ggIT09IHVzaW5nVXNlckJyYW5jaCkge1xuICAgICAgc2V0U3RhdGUoeyB1c2luZ1VzZXJCcmFuY2g6IF91c2luZ1VzZXJCcmFuY2ggfSlcbiAgICB9XG4gIH0sIFtfdXNpbmdVc2VyQnJhbmNoLCB1c2luZ1VzZXJCcmFuY2hdKVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7IC8vIHVwZGF0ZSBkaXNwbGF5IHN0YXR1cyBpZiBlcnJvclxuICAgIGNvbnN0IGVycm9yID0gc2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZVN0YXR1cz8uW0VSUk9SX1NUQVRFXVxuXG4gICAgaWYgKGVycm9yKSB7IC8vIGlmIGVycm9yIHdhcyBmb3VuZCBkbyBjYWxsYmFja1xuICAgICAgY29uc3QgcmVzb3VyY2VTdGF0dXMgPSBzY3JpcHR1cmVDb25maWc/LnJlc291cmNlU3RhdHVzXG4gICAgICBjb25zdCByZXNvdXJjZUxpbmsgPSBnZXRSZXNvdXJjZUxpbmsoc2NyaXB0dXJlQ29uZmlnKVxuICAgICAgY29uc3QgbWVzc2FnZSA9IGdldFJlc291cmNlTWVzc2FnZShyZXNvdXJjZVN0YXR1cywgc2VydmVyLCByZXNvdXJjZUxpbmssIGlzTlRfKVxuICAgICAgY29uc3QgaXNBY2Nlc3NFcnJvciA9IHJlc291cmNlU3RhdHVzW01BTklGRVNUX05PVF9MT0FERURfRVJST1JdXG4gICAgICBvblJlc291cmNlRXJyb3IgJiYgb25SZXNvdXJjZUVycm9yKG1lc3NhZ2UsIGlzQWNjZXNzRXJyb3IsIHJlc291cmNlU3RhdHVzKVxuICAgIH1cbiAgfSwgW3NjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2VTdGF0dXM/LltFUlJPUl9TVEFURV1dKVxuXG4gIGlmIChzY3JpcHR1cmVDb25maWcudGl0bGUgJiYgc2NyaXB0dXJlQ29uZmlnLnZlcnNpb24pIHtcbiAgICBzY3JpcHR1cmVUaXRsZSA9IGAke3NjcmlwdHVyZUNvbmZpZy50aXRsZX0gdiR7c2NyaXB0dXJlQ29uZmlnLnZlcnNpb259YFxuICAgIHNjcmlwdHVyZVZlcnNpb25IaXN0LnVwZGF0ZVRpdGxlKHNjcmlwdHVyZUNvbmZpZy5yZXNvdXJjZUxpbmssIHNjcmlwdHVyZVRpdGxlKVxuICB9IGVsc2Uge1xuICAgIHNjcmlwdHVyZVRpdGxlID0gYFRpdGxlIG1pc3NpbmcgZnJvbSBwcm9qZWN0IG1hbmlmZXN0YFxuICB9XG5cbiAgLyoqIER5bmFtaWNhbGx5IGNyZWF0ZXMgdGhlIHNjcmlwdHVyZSBzZWxlY3Rpb24gZHJvcGRvd24gdG8gYmUgaW5zZXJ0ZWQgaW50byBjYXJkIHNldHRpbmdzICovXG4gIGZ1bmN0aW9uIGdldFNjcmlwdHVyZVNlbGVjdG9yKCkge1xuICAgIGNvbnN0IHNjcmlwdHVyZVNlbGVjdGlvbkNvbmZpZyA9IGdldFNjcmlwdHVyZVZlcnNpb25TZXR0aW5ncyh7XG4gICAgICBsYWJlbCxcbiAgICAgIHJlc291cmNlTGluazogc2NyaXB0dXJlQ29uZmlnLnJlc291cmNlTGluayxcbiAgICAgIHNldFNjcmlwdHVyZSxcbiAgICAgIHNjcmlwdHVyZVZlcnNpb25IaXN0LFxuICAgIH0pXG5cbiAgICByZXR1cm4gPFNjcmlwdHVyZVNlbGVjdG9yIHsuLi5zY3JpcHR1cmVTZWxlY3Rpb25Db25maWd9IHN0eWxlPXtzdHlsZX0gZXJyb3JNZXNzYWdlPXt1cmxFcnJvcn0gLz5cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uTWVudUNsb3NlKCkge1xuICAgIC8vIGNvbnNvbGUubG9nKGBvbk1lbnVDbG9zZSgpYClcbiAgICBzZXRTdGF0ZSh7IHVybEVycm9yOiBudWxsIH0pXG4gIH1cblxuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IGxhbmd1YWdlSWRfID0gc2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZT8ubGFuZ3VhZ2VJZFxuICBjb25zdCBsYW5ndWFnZSA9IGdldExhbmd1YWdlKHsgbGFuZ3VhZ2VJZDogbGFuZ3VhZ2VJZF8gfSlcbiAgY29uc3QgZGlyZWN0aW9uID0gKGxhbmd1YWdlPy5kaXJlY3Rpb24pIHx8ICdsdHInXG4gIGNvbnN0IF9yZWZlcmVuY2UgPSB7IC4uLnNjcmlwdHVyZUNvbmZpZy5yZWZlcmVuY2UgfVxuXG4gIGNvbnN0IGlzSGVicmV3ID0gKGxhbmd1YWdlSWRfID09PSAnaGJvJylcbiAgY29uc3QgZm9udEZhY3RvciA9IGlzSGVicmV3ID8gMS40IDogMSAvLyB3ZSBhdXRvbWF0aWNhbGx5IHNjYWxlIHVwIGZvbnQgc2l6ZSBmb3IgSGVicmV3XG4gIGNvbnN0IHNjYWxlZEZvbnRTaXplID0gZm9udFNpemUgKiBmb250RmFjdG9yXG5cbiAgY29uc3QgaXRlbXMgPSBudWxsXG4gIGNvbnN0IHtcbiAgICBzdGF0ZToge1xuICAgICAgaGVhZGVycywgZmlsdGVycywgaXRlbUluZGV4LCBtYXJrZG93blZpZXcsXG4gICAgfSxcbiAgICBhY3Rpb25zOiB7XG4gICAgICBzZXRGaWx0ZXJzLCBzZXRJdGVtSW5kZXgsIHNldE1hcmtkb3duVmlldyxcbiAgICB9LFxuICB9ID0gdXNlQ2FyZFN0YXRlKHsgaXRlbXMgfSlcblxuICBjb25zdCByZWZTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICBmb250RmFtaWx5OiAnTm90byBTYW5zJyxcbiAgICBmb250U2l6ZTogYCR7TWF0aC5yb3VuZChzY2FsZWRGb250U2l6ZSAqIDAuOSl9JWAsXG4gIH0pLCBbc2NhbGVkRm9udFNpemVdKVxuXG4gIGNvbnN0IGNvbnRlbnRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICBmb250RmFtaWx5OiAnTm90byBTYW5zJyxcbiAgICBmb250U2l6ZTogYCR7c2NhbGVkRm9udFNpemV9JWAsXG4gIH0pLCBbc2NhbGVkRm9udFNpemVdKVxuXG4gIGNvbnN0IHNjcmlwdHVyZUxhYmVsID0gPFRpdGxlPntzY3JpcHR1cmVUaXRsZX08L1RpdGxlPlxuICBsZXQgZGlzYWJsZVdvcmRQb3BvdmVyXyA9IGRpc2FibGVXb3JkUG9wb3ZlclxuICBjb25zdCB1c2luZ09yaWdpbmFsQmlibGUgPSBpc09yaWdpbmFsQmlibGUoc2NyaXB0dXJlQ29uZmlnWydyZXNvdXJjZSddPy5wcm9qZWN0SWQpXG5cbiAgaWYgKGRpc2FibGVXb3JkUG9wb3ZlciA9PT0gdW5kZWZpbmVkKSB7IC8vIGlmIG5vdCBzcGVjaWZpZWQsIHRoZW4gZGV0ZXJtaW5lIGlmIG9yaWdpbmFsIGxhbmd1YWdlIHJlc291cmNlXG4gICAgZGlzYWJsZVdvcmRQb3BvdmVyXyA9ICF1c2luZ09yaWdpbmFsQmlibGVcbiAgfVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7IC8vIHByZS1jYWNoZSBnbG9zc2VzIG9uIHZlcnNlIGNoYW5nZVxuICAgIGNvbnN0IGZldGNoR2xvc3NEYXRhRm9yVmVyc2UgPSBhc3luYyAoKSA9PiB7XG4gICAgICBsZXQgdmVyc2VPYmplY3RzID0gW11cblxuICAgICAgLy8gZ2V0IHZlcnNlIG9iamVjdHMgb2YgYWxsIHRoZSB2ZXJzZXNcbiAgICAgIGZvciAoY29uc3QgdmVyc2VSZWYgb2Ygc2NyaXB0dXJlQ29uZmlnPy52ZXJzZXNGb3JSZWYgfHwgW10pIHtcbiAgICAgICAgY29uc3QgX3ZlcnNlT2JqZWN0cyA9IHZlcnNlUmVmPy52ZXJzZURhdGE/LnZlcnNlT2JqZWN0c1xuICAgICAgICB2ZXJzZU9iamVjdHMgPSB2ZXJzZU9iamVjdHMuY29uY2F0KF92ZXJzZU9iamVjdHMpXG4gICAgICB9XG5cbiAgICAgIGlmICghZGlzYWJsZVdvcmRQb3BvdmVyICYmIHZlcnNlT2JqZWN0cz8ubGVuZ3RoICYmIGZldGNoR2xvc3Nlc0ZvclZlcnNlKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hd2FpdC1pbi1sb29wXG4gICAgICAgIGF3YWl0IGZldGNoR2xvc3Nlc0ZvclZlcnNlKHZlcnNlT2JqZWN0cywgbGFuZ3VhZ2VJZF8pXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHVzaW5nT3JpZ2luYWxCaWJsZSkge1xuICAgICAgZmV0Y2hHbG9zc0RhdGFGb3JWZXJzZSgpXG4gICAgfVxuICB9LCBbIHZlcnNlc0ZvclJlZiwgbGFuZ3VhZ2VJZF8gXSlcblxuICBjb25zdCBlbmFibGVFZGl0ID0gIXVzaW5nT3JpZ2luYWxCaWJsZVxuICBjb25zdCBlbmFibGVBbGlnbm1lbnQgPSAhdXNpbmdPcmlnaW5hbEJpYmxlXG4gIGNvbnN0IG9yaWdpbmFsUmVwb1VybCA9IGlzTmV3VGVzdGFtZW50ID8gZ3JlZWtSZXBvVXJsIDogaGVicmV3UmVwb1VybFxuICBjb25zdCBzY3JpcHR1cmVBbGlnbm1lbnRFZGl0Q29uZmlnID0ge1xuICAgIGF1dGhlbnRpY2F0aW9uOiBjYW5Vc2VFZGl0QnJhbmNoID8gYXV0aGVudGljYXRpb24gOiBudWxsLFxuICAgIGJvb2tJbmRleCxcbiAgICBjdXJyZW50VmVyc2VSZWY6IF9yZWZlcmVuY2UsXG4gICAgZW5hYmxlRWRpdCxcbiAgICBlbmFibGVBbGlnbm1lbnQsXG4gICAgaHR0cENvbmZpZyxcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaXNOZXdUZXN0YW1lbnQsXG4gICAgbG9nZ2VkSW5Vc2VyOiBjYW5Vc2VFZGl0QnJhbmNoID8gbG9nZ2VkSW5Vc2VyIDogbnVsbCxcbiAgICBvcmlnaW5hbExhbmd1YWdlT3duZXIsXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9yaWdpbmFsUmVwb1VybCxcbiAgICBzY3JpcHR1cmVDb25maWcsXG4gICAgc2NyaXB0dXJlU2V0dGluZ3MsXG4gICAgc3RhcnRFZGl0QnJhbmNoLFxuICAgIHNldFNhdmVkQ2hhbmdlczogX3NldFNhdmVkQ2hhbmdlcyxcbiAgICBzb3VyY2VMYW5ndWFnZTogaXNOVF8gPyBOVF9PUklHX0xBTkcgOiBPVF9PUklHX0xBTkcsXG4gICAgdGFyZ2V0TGFuZ3VhZ2U6IGxhbmd1YWdlLFxuICAgIHRpdGxlOiBzY3JpcHR1cmVUaXRsZSxcbiAgICB3b3JraW5nUmVzb3VyY2VCcmFuY2g6IHJlZixcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGlzIGdldHMgY2FsbGVkIHdoZW5ldmVyIGEgc2NyaXB0dXJlIHBhbmUgaGFzIGEgY2hhbmdlIGluIHNhdmUgc3RhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IGN1cnJlbnRJbmRleFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNhdmVkXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGdldENoYW5nZXMgLSB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciB1c2VyIGNsaWNrcyBzYXZlIGJ1dHRvblxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjbGVhckNoYW5nZXMgLSB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciBzYXZlIGhhcyBjb21wbGV0ZWRcbiAgICogQHBhcmFtIHtvYmplY3R9IHN0YXRlIC0gY3VycmVudCBzdGF0ZSBvZiB3b3JkIGFsaWdubWVudC9lZGl0XG4gICAqL1xuICBmdW5jdGlvbiBfc2V0U2F2ZWRDaGFuZ2VzKGN1cnJlbnRJbmRleCwgc2F2ZWQsIHsgZ2V0Q2hhbmdlcyA9IG51bGwsIGNsZWFyQ2hhbmdlcyA9IG51bGwsIHN0YXRlID0gbnVsbCB9KSB7XG4gICAgY29uc3QgX3Vuc2F2ZWRDaGFuZ2VzTGlzdCA9IHsgLi4udW5zYXZlZENoYW5nZXNMaXN0IH1cblxuICAgIGlmIChzYXZlZCkge1xuICAgICAgaWYgKF91bnNhdmVkQ2hhbmdlc0xpc3QuaGFzT3duUHJvcGVydHkoY3VycmVudEluZGV4KSkge1xuICAgICAgICBkZWxldGUgX3Vuc2F2ZWRDaGFuZ2VzTGlzdFtjdXJyZW50SW5kZXhdXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIF91bnNhdmVkQ2hhbmdlc0xpc3RbY3VycmVudEluZGV4XSA9IHsgZ2V0Q2hhbmdlcywgY2xlYXJDaGFuZ2VzLCBzdGF0ZSB9IC8vIHVwZGF0ZSB3aXRoIGxhdGVzdFxuICAgIH1cblxuICAgIGNvbnN0IF9oYXZlVW5zYXZlZENoYW5nZXMgPSAhIU9iamVjdC5rZXlzKF91bnNhdmVkQ2hhbmdlc0xpc3QpLmxlbmd0aFxuXG4gICAgaWYgKGhhdmVVbnNhdmVkQ2hhbmdlcyAhPSBfaGF2ZVVuc2F2ZWRDaGFuZ2VzKSB7XG4gICAgICBzZXRTYXZlZENoYW5nZXMgJiYgc2V0U2F2ZWRDaGFuZ2VzKHJlc291cmNlSWQsICFfaGF2ZVVuc2F2ZWRDaGFuZ2VzKVxuICAgICAgc2V0U3RhdGUoeyBoYXZlVW5zYXZlZENoYW5nZXM6IF9oYXZlVW5zYXZlZENoYW5nZXMgfSlcbiAgICB9XG5cbiAgICBpZiAoIWlzRXF1YWwoX3Vuc2F2ZWRDaGFuZ2VzTGlzdCwgdW5zYXZlZENoYW5nZXNMaXN0KSkge1xuICAgICAgc2V0U3RhdGUoeyB1bnNhdmVkQ2hhbmdlc0xpc3Q6IF91bnNhdmVkQ2hhbmdlc0xpc3QgfSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogc2VhcmNoIGNoYXB0ZXIgb3IgdmVyc2UgY2h1bmsgdG8gbGluZSB0aGF0IHN0YXJ0cyB3aXRoIGZpbmRJdGVtXG4gICAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gZmluZEl0ZW1cbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gY2h1bmtzXG4gICAqL1xuICBmdW5jdGlvbiBmaW5kUmVmSW5BcnJheShmaW5kSXRlbSwgY2h1bmtzKSB7XG4gICAgY29uc3QgcmVmXyA9IGZpbmRJdGVtICsgJydcbiAgICBjb25zdCByZWZMZW4gPSByZWZfLmxlbmd0aFxuICAgIGNvbnN0IGluZGV4ID0gY2h1bmtzLmZpbmRJbmRleCgoY2h1bmssIGlkeCkgPT4ge1xuICAgICAgaWYgKGlkeCA+IDApIHtcbiAgICAgICAgaWYgKGNodW5rLnN1YnN0cmluZygwLCByZWZMZW4pID09PSByZWZfKSB7XG4gICAgICAgICAgY29uc3QgbmV4dENoYXIgPSBjaHVua1tyZWZMZW5dXG5cbiAgICAgICAgICBpZiAoKG5leHRDaGFyID4gJzknKSB8fCAobmV4dENoYXIgPCAnMCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSlcbiAgICByZXR1cm4gaW5kZXhcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEJvb2tOYW1lKCkge1xuICAgIGNvbnN0IGJvb2tDYXBzID0gc2NyaXB0dXJlQ29uZmlnPy5yZWZlcmVuY2U/LnByb2plY3RJZCA/IHNjcmlwdHVyZUNvbmZpZy5yZWZlcmVuY2UucHJvamVjdElkLnRvVXBwZXJDYXNlKCkgOiAnJ1xuICAgIHJldHVybiBgJHtib29rSW5kZXh9LSR7Ym9va0NhcHN9LnVzZm1gXG4gIH1cblxuICBjb25zdCBmaWxlcGF0aCA9IGdldEJvb2tOYW1lKClcblxuICAvLyBrZWVwIHRyYWNrIG9mIHZlcnNlIGVkaXQgc3RhdGVcbiAgY29uc3Qge1xuICAgIGVycm9yOiBzYXZlRXJyb3IsXG4gICAgaXNFcnJvcjogaXNTYXZlRXJyb3IsXG4gICAgb25TYXZlRWRpdCxcbiAgfSA9IHVzZUVkaXQoe1xuICAgIHNoYSxcbiAgICBvd25lcixcbiAgICBjb250ZW50OiBzYXZlQ29udGVudCxcbiAgICBjb25maWc6IHtcbiAgICAgIGNhY2hlOiB7IG1heEFnZTogMCB9LFxuICAgICAgLi4uYXV0aGVudGljYXRpb24/LmNvbmZpZyxcbiAgICAgIHRva2VuOiBhdXRoZW50aWNhdGlvbj8udG9rZW4sXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB0aW1lb3V0OiBodHRwQ29uZmlnPy5zZXJ2ZXJUaW1lT3V0IHx8IGh0dHBDb25maWc/LnRpbWVvdXQgfHwgMTAwMDAsXG4gICAgICBzZXJ2ZXIsXG4gICAgfSxcbiAgICBhdXRob3I6IGxvZ2dlZEluVXNlcixcbiAgICB0b2tlbjogYXV0aGVudGljYXRpb24/LnRva2VuLFxuICAgIGJyYW5jaDogd29ya2luZ1Jlc291cmNlQnJhbmNoLFxuICAgIGZpbGVwYXRoLFxuICAgIHJlcG8sXG4gIH0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gd2hlbiB3ZSBnZXQgYSBzYXZlIHNhdmVFcnJvclxuICAgIGlmIChzYXZlRXJyb3IgJiYgaXNTYXZlRXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBzYXZlIGVycm9yYCwgc2F2ZUVycm9yKVxuICAgICAgLy8gb25SZXNvdXJjZUVycm9yICYmIG9uUmVzb3VyY2VFcnJvcihudWxsLCBmYWxzZSwgbnVsbCwgYEVycm9yIHNhdmluZyAke2xhbmd1YWdlSWRffV8ke3Jlc291cmNlSWR9ICR7c2F2ZUVycm9yfWAsIHRydWUpXG4gICAgfVxuICB9LCBbc2F2ZUVycm9yLCBpc1NhdmVFcnJvcl0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gd2hlbiBzdGFydFNhdmUgZ29lcyB0cnVlLCBzYXZlIGVkaXRzIHRvIHVzZXIgYnJhbmNoIGFuZCB0aGVuIGNsZWFyIHN0YXJ0U2F2ZVxuICAgIGNvbnN0IF9zYXZlRWRpdCA9IGFzeW5jICgpID0+IHsgLy8gYmVnaW4gdXBsb2FkaW5nIG5ldyBVU0ZNXG4gICAgICBjb25zb2xlLmluZm8oYHNhdmVDaGFuZ2VzVG9DbG91ZCgpIC0gVXNpbmcgc2hhOiAke3NoYX1gKVxuICAgICAgYXdhaXQgb25TYXZlRWRpdCh1c2VyRWRpdEJyYW5jaE5hbWUpLnRoZW4oKHN1Y2Nlc3MpID0+IHsgLy8gcHVzaCBjaGFuZ2VkIHRvIHNlcnZlclxuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBzYXZlQ2hhbmdlc1RvQ2xvdWQoKSAtIHNhdmUgc2NyaXB0dXJlIGVkaXRzIHN1Y2Nlc3NgKVxuICAgICAgICAgIGNvbnN0IHVuc2F2ZWRDYXJkSW5kaWNlcyA9IE9iamVjdC5rZXlzKHVuc2F2ZWRDaGFuZ2VzTGlzdClcblxuICAgICAgICAgIGlmICh1bnNhdmVkQ2FyZEluZGljZXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjYXJkSW5kZXggb2YgdW5zYXZlZENhcmRJbmRpY2VzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgY2xlYXJDaGFuZ2VzIH0gPSB1bnNhdmVkQ2hhbmdlc0xpc3RbY2FyZEluZGV4XVxuICAgICAgICAgICAgICBjbGVhckNoYW5nZXMgJiYgY2xlYXJDaGFuZ2VzKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zb2xlLmluZm8oJ3NhdmVDaGFuZ2VzVG9DbG91ZCgpIC0gUmVsb2FkaW5nIHJlc291cmNlJylcbiAgICAgICAgICBzZXRTdGF0ZSh7XG4gICAgICAgICAgICBzdGFydFNhdmU6IGZhbHNlLFxuICAgICAgICAgICAgcmVhZHlGb3JGZXRjaDogdHJ1ZSxcbiAgICAgICAgICAgIHJlZjogdXNlckVkaXRCcmFuY2hOYW1lLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgZGVsYXkoNTAwKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHNjcmlwdHVyZUNvbmZpZz8ucmVsb2FkUmVzb3VyY2Uoc2hhKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignc2F2ZUNoYW5nZXNUb0Nsb3VkKCkgLSBzYXZpbmcgY2hhbmdlZCBzY3JpcHR1cmUgZmFpbGVkJylcbiAgICAgICAgICBzZXRTdGF0ZSh7IHN0YXJ0U2F2ZTogZmFsc2UgfSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAoc3RhcnRTYXZlKSB7XG4gICAgICBpZiAoIWVkaXRCcmFuY2hSZWFkeSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkIC0gZWRpdCBicmFuY2ggbm90IHlldCBjcmVhdGVkYClcbiAgICAgIH0gZWxzZSBpZiAoIXNoYSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkIC0gc2F2ZSBzaGEgbm90IHlldCByZWFkeWApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkIC0gY2FsbGluZyBfc2F2ZUVkaXQoKWApXG4gICAgICAgIF9zYXZlRWRpdCgpXG4gICAgICB9XG4gICAgfVxuICB9LCBbc3RhcnRTYXZlLCBlZGl0QnJhbmNoUmVhZHksIHNoYV0pXG5cbiAgLyoqXG4gICAqIGNvbnZlcnQgdXBkYXRlZFZlcnNlT2JqZWN0cyB0byBVU0ZNIGFuZCBtZXJnZSBpbnRvIHRoZSBiaWJsZVVzZm1cbiAgICogQHBhcmFtIHtzdHJpbmd9IGJpYmxlVXNmbSAtIFVTRk0gb2YgYmlibGVcbiAgICogQHBhcmFtIHtvYmplY3R9IHJlZiAtIHJlZmVyZW5jZSBvZiB2ZXJzZSB0byBtZXJnZSBpblxuICAgKiBAcGFyYW0ge29iamVjdFtdfSB1cGRhdGVkVmVyc2VPYmplY3RzIC0gbmV3IHZlcnNlIGluIHZlcnNlT2JqZWN0IGZvcm1hdFxuICAgKiBAcGFyYW0ge251bWJlcn0gY2FyZE51bVxuICAgKi9cbiAgZnVuY3Rpb24gbWVyZ2VWZXJzZU9iamVjdHNJbnRvQmlibGVVc2ZtKGJpYmxlVXNmbSwgcmVmLCB1cGRhdGVkVmVyc2VPYmplY3RzLCBjYXJkTnVtOiBudW1iZXIpIHtcbiAgICBsZXQgbmV3VXNmbVxuICAgIGNvbnN0IGNoYXB0ZXJDaHVua3MgPSBiaWJsZVVzZm0/LnNwbGl0KCdcXFxcYyAnKVxuICAgIGNvbnN0IGNoYXB0ZXJJbmRleCA9IGZpbmRSZWZJbkFycmF5KHJlZj8uY2hhcHRlciwgY2hhcHRlckNodW5rcylcblxuICAgIGlmIChjaGFwdGVySW5kZXggPj0gMCkge1xuICAgICAgY29uc3QgY3VycmVudENoYXB0ZXIgPSBjaGFwdGVyQ2h1bmtzW2NoYXB0ZXJJbmRleF1cbiAgICAgIGNvbnN0IHZlcnNlQ2h1bmtzID0gY3VycmVudENoYXB0ZXIuc3BsaXQoJ1xcXFx2ICcpXG4gICAgICBjb25zdCB2ZXJzZUluZGV4ID0gZmluZFJlZkluQXJyYXkocmVmPy52ZXJzZSwgdmVyc2VDaHVua3MpXG5cbiAgICAgIGlmICh2ZXJzZUluZGV4ID49IDApIHtcbiAgICAgICAgY29uc3QgbmV3VmVyc2VVc2ZtID0gVXNmbUZpbGVDb252ZXJzaW9uSGVscGVycy5jb252ZXJ0VmVyc2VEYXRhVG9VU0ZNKHVwZGF0ZWRWZXJzZU9iamVjdHMpXG4gICAgICAgIGNvbnNvbGUubG9nKGBzYXZlQ2hhbmdlc1RvQ2xvdWQoJHtjYXJkTnVtfSkgLSBuZXcgVVNGTSBmb3IgY2FyZDp9IC0gJHtuZXdWZXJzZVVzZm0uc3Vic3RyaW5nKDAsIDEwMCl9YClcbiAgICAgICAgY29uc3Qgb2xkVmVyc2UgPSB2ZXJzZUNodW5rc1t2ZXJzZUluZGV4XVxuICAgICAgICBjb25zdCB2ZXJzZU51bUxlbiA9IChyZWY/LnZlcnNlICsgJycpLmxlbmd0aFxuICAgICAgICB2ZXJzZUNodW5rc1t2ZXJzZUluZGV4XSA9IG9sZFZlcnNlLnN1YnN0cmluZygwLCB2ZXJzZU51bUxlbiArIDEpICsgbmV3VmVyc2VVc2ZtXG4gICAgICAgIGNvbnN0IG5ld0NoYXB0ZXIgPSB2ZXJzZUNodW5rcy5qb2luKCdcXFxcdiAnKVxuICAgICAgICBjaGFwdGVyQ2h1bmtzW2NoYXB0ZXJJbmRleF0gPSBuZXdDaGFwdGVyXG4gICAgICAgIG5ld1VzZm0gPSBjaGFwdGVyQ2h1bmtzLmpvaW4oJ1xcXFxjICcpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdVc2ZtXG4gIH1cblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyBmb3IgZWFjaCB1bnNhdmVkIGNoYW5nZSwgY2FsbCBpbnRvIHNjcmlwdHVyZVBhbmUgdG8gZ2V0IGxhdGVzdCBjaGFuZ2VzIGZvciB2ZXJzZSB0byBzYXZlXG4gICAgaWYgKHNhdmVDbGlja2VkKSB7XG4gICAgICBsZXQgY3JlYXRlRWRpdEJyYW5jaCA9ICFfdXNpbmdVc2VyQnJhbmNoXG5cbiAgICAgIGlmICghY3JlYXRlRWRpdEJyYW5jaCkgeyAvLyBpZiBhbHJlYWR5IHVzaW5nIHRoZSB1c2VyIGJyYW5jaFxuICAgICAgICBpZiAod29ya2luZ1Jlc291cmNlQnJhbmNoICE9PSB1c2VyRWRpdEJyYW5jaE5hbWUpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oYHNhdmVDaGFuZ2VzVG9DbG91ZCAtIHN0YXRlIGNvbmZsaWN0IC0gc2hvdWxkIGJlIGluIHVzZXIgYnJhbmNoICR7dXNlckVkaXRCcmFuY2hOYW1lfSwgYnV0IGFjdHVhbGx5IHVzaW5nICR7d29ya2luZ1Jlc291cmNlQnJhbmNofWApXG4gICAgICAgICAgY3JlYXRlRWRpdEJyYW5jaCA9IHRydWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkIC0gYWxyZWFkeSB1c2luZyBlZGl0IGJyYW5jaDogJHt3b3JraW5nUmVzb3VyY2VCcmFuY2h9YClcbiAgICAgICAgICBzZXRTdGF0ZSh7IGVkaXRCcmFuY2hSZWFkeTogdHJ1ZSB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjcmVhdGVFZGl0QnJhbmNoKSB7IC8vIGlmIG5vdCB1c2luZyB0aGUgdXNlciBicmFuY2gsIGNyZWF0ZSBpdFxuICAgICAgICBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkIC0gY3JlYXRpbmcgZWRpdCBicmFuY2hgKVxuICAgICAgICBzZXRTdGF0ZSh7XG4gICAgICAgICAgZWRpdEJyYW5jaFJlYWR5OiBmYWxzZSxcbiAgICAgICAgICByZWFkeUZvckZldGNoOiBmYWxzZSxcbiAgICAgICAgICBzaGE6IG51bGwsXG4gICAgICAgIH0pIC8vIHdlIHdpbGwgbmVlZCBhIG5ldyBzaGEgZm9yIGJvb2svYnJhbmNoXG4gICAgICAgIHN0YXJ0RWRpdEJyYW5jaCgpLnRoZW4oKGJyYW5jaCkgPT4ge1xuICAgICAgICAgIGlmIChicmFuY2gpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBzYXZlQ2hhbmdlc1RvQ2xvdWQgLSBlZGl0IGJyYW5jaCBjcmVhdGVkYClcbiAgICAgICAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgICAgICAgZWRpdEJyYW5jaFJlYWR5OiB0cnVlLFxuICAgICAgICAgICAgICByZWFkeUZvckZldGNoOiB0cnVlLFxuICAgICAgICAgICAgICByZWY6IGJyYW5jaCxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBzYXZlQ2hhbmdlc1RvQ2xvdWQgLSBmYWlsZWQgdG8gY3JlYXRlIGVkaXQgYnJhbmNoYClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVuc2F2ZWRDYXJkSW5kaWNlcyA9IE9iamVjdC5rZXlzKHVuc2F2ZWRDaGFuZ2VzTGlzdClcblxuICAgICAgaWYgKHVuc2F2ZWRDYXJkSW5kaWNlcz8ubGVuZ3RoKSB7XG4gICAgICAgIGxldCBiaWJsZVVzZm0gPSBjb3JlLmdldFJlc3BvbnNlRGF0YShzY3JpcHR1cmVDb25maWc/LmZldGNoUmVzcG9uc2UpXG4gICAgICAgIGxldCBtZXJnZUZhaWwgPSBmYWxzZVxuICAgICAgICBsZXQgY2FyZE51bSA9IDBcblxuICAgICAgICBmb3IgKGNvbnN0IGNhcmRJbmRleCBvZiB1bnNhdmVkQ2FyZEluZGljZXMpIHtcbiAgICAgICAgICBjYXJkTnVtID0gcGFyc2VJbnQoY2FyZEluZGV4KVxuICAgICAgICAgIGNvbnN0IHsgZ2V0Q2hhbmdlcywgc3RhdGUgfSA9IHVuc2F2ZWRDaGFuZ2VzTGlzdFtjYXJkTnVtXVxuXG4gICAgICAgICAgaWYgKGdldENoYW5nZXMpIHtcbiAgICAgICAgICAgIGxldCBuZXdVc2ZtXG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgIHJlZixcbiAgICAgICAgICAgICAgdXBkYXRlZFZlcnNlT2JqZWN0cyxcbiAgICAgICAgICAgIH0gPSBnZXRDaGFuZ2VzKHN0YXRlKVxuXG4gICAgICAgICAgICBpZiAodXBkYXRlZFZlcnNlT2JqZWN0cyAmJiBiaWJsZVVzZm0pIHsgLy8ganVzdCByZXBsYWNlIHZlcnNlXG4gICAgICAgICAgICAgIG5ld1VzZm0gPSBtZXJnZVZlcnNlT2JqZWN0c0ludG9CaWJsZVVzZm0oYmlibGVVc2ZtLCByZWYsIHVwZGF0ZWRWZXJzZU9iamVjdHMsIGNhcmROdW0pXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChuZXdVc2ZtKSB7XG4gICAgICAgICAgICAgIGJpYmxlVXNmbSA9IG5ld1VzZm1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1lcmdlRmFpbCA9IHRydWVcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWVyZ2VGYWlsKSB7IC8vIGlmIHdlIGZhaWxlZCB0byBtZXJnZSwgZmFsbGJhY2sgdG8gYnJ1dGUgZm9yY2UgdmVyc2Ugb2JqZWN0cyB0byBVU0ZNXG4gICAgICAgICAgY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCgke2NhcmROdW19KSAtIHZlcnNlIG5vdCBmb3VuZCwgZmFsbGluZyBiYWNrIHRvIGluc2VydGluZyB2ZXJzZSBvYmplY3RgKVxuICAgICAgICAgIGxldCBuZXdCb29rSnNvblxuXG4gICAgICAgICAgZm9yIChjb25zdCBjYXJkSW5kZXggb2YgdW5zYXZlZENhcmRJbmRpY2VzKSB7XG4gICAgICAgICAgICBjb25zdCBjYXJkTnVtID0gcGFyc2VJbnQoY2FyZEluZGV4KVxuICAgICAgICAgICAgY29uc3QgeyBnZXRDaGFuZ2VzLCBzdGF0ZSB9ID0gdW5zYXZlZENoYW5nZXNMaXN0W2NhcmROdW1dXG5cbiAgICAgICAgICAgIGlmIChnZXRDaGFuZ2VzKSB7XG4gICAgICAgICAgICAgIGxldCBuZXdVc2ZtXG4gICAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICBuZXdWZXJzZVRleHQsXG4gICAgICAgICAgICAgICAgcmVmLFxuICAgICAgICAgICAgICAgIHVwZGF0ZWRWZXJzZU9iamVjdHMsXG4gICAgICAgICAgICAgIH0gPSBnZXRDaGFuZ2VzKHN0YXRlKVxuXG4gICAgICAgICAgICAgIGlmICh1cGRhdGVkVmVyc2VPYmplY3RzICYmICFuZXdVc2ZtKSB7XG4gICAgICAgICAgICAgICAgbGV0IHRhcmdldFZlcnNlT2JqZWN0c18gPSBudWxsXG5cbiAgICAgICAgICAgICAgICBpZiAocmVmKSB7XG4gICAgICAgICAgICAgICAgICBpZiAobmV3VmVyc2VUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgdGFyZ2V0VmVyc2VPYmplY3RzIH0gPSBBbGlnbm1lbnRIZWxwZXJzLnVwZGF0ZUFsaWdubWVudHNUb1RhcmdldFZlcnNlKHVwZGF0ZWRWZXJzZU9iamVjdHMsIG5ld1ZlcnNlVGV4dClcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VmVyc2VPYmplY3RzXyA9IHRhcmdldFZlcnNlT2JqZWN0c1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VmVyc2VPYmplY3RzXyA9IHVwZGF0ZWRWZXJzZU9iamVjdHNcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIG5ld0Jvb2tKc29uID0gdGFyZ2V0VmVyc2VPYmplY3RzXyAmJiBzY3JpcHR1cmVDb25maWc/LnVwZGF0ZVZlcnNlKHJlZi5jaGFwdGVyLCByZWYudmVyc2UsIHsgdmVyc2VPYmplY3RzOiB0YXJnZXRWZXJzZU9iamVjdHNfIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYmlibGVVc2ZtID0gdXNmbWpzLnRvVVNGTShuZXdCb29rSnNvbiwgeyBmb3JjZWROZXdMaW5lczogdHJ1ZSB9KVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCgpIC0gc2F2aW5nIG5ldyBVU0ZNOiAke2JpYmxlVXNmbS5zdWJzdHJpbmcoMCwgMTAwKX0uLi5gKVxuICAgICAgICBzZXRTdGF0ZSh7IHNhdmVDb250ZW50OiBiaWJsZVVzZm0sIHN0YXJ0U2F2ZTogdHJ1ZSwgc2F2ZUNsaWNrZWQ6IGZhbHNlIH0pXG4gICAgICB9XG4gICAgfVxuICB9LCBbc2F2ZUNsaWNrZWRdKVxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgeyBjaGFwdGVyLCB2ZXJzZSB9ID0gX3JlZmVyZW5jZSB8fCB7fVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgX3ZlcnNlc0ZvclJlZiA9IHNjcmlwdHVyZUNvbmZpZz8udmVyc2VzRm9yUmVmXG4gICAgbGV0IG5ld1NlbGVjdGlvbnMgPSBuZXcgTWFwKClcbiAgICBsZXQgdXBkYXRlU2VsZWN0aW9ucyA9IGZhbHNlXG4gICAgY29uc3QgX21hcCA9IG5ld1NlbGVjdGlvbnNcbiAgICBjb25zdCBvcmlnaW5hbEJvb2tJZCA9IG9yaWdpbmFsVmVyc2VPYmplY3RzPy5ib29rSWRcbiAgICBjb25zdCBib29rVmVyc2VPYmplY3QgPSBvcmlnaW5hbFZlcnNlT2JqZWN0cz8uY2hhcHRlcnNcbiAgICBsZXQgbmV3U2VsZWN0ZWRRdW90ZSA9IG51bGxcblxuICAgIC8vIGlmIHdlIGhhdmUgZXZlcnl0aGluZyB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSBzZWxlY3Rpb25zXG4gICAgaWYgKF92ZXJzZXNGb3JSZWY/Lmxlbmd0aCAmJlxuICAgICAgYm9va1ZlcnNlT2JqZWN0ICYmXG4gICAgICAoYm9va0lkID09PSBvcmlnaW5hbEJvb2tJZCkgJiZcbiAgICAgIGJvb2tWZXJzZU9iamVjdFtjaGFwdGVyXSAmJiAvLyB3ZSBuZWVkIHRvIGhhdmUgZGF0YSBmb3IgY2hhcHRlclxuICAgICAgc2VsZWN0ZWRRdW90ZT8ucXVvdGVcbiAgICApIHtcbiAgICAgIC8vIGlmIHF1b3RlIGlzIGRpZmZlcmVudCB0aGFuIGxhc3RcbiAgICAgIGlmICghaXNFcXVhbChsYXN0U2VsZWN0ZWRRdW90ZSwgc2VsZWN0ZWRRdW90ZSkgfHxcbiAgICAgICAgIWlzRXF1YWwodmVyc2VzRm9yUmVmLCBfdmVyc2VzRm9yUmVmKSkge1xuICAgICAgICBjb25zdCBvcmlnaW5hbFZlcnNlcyA9IHt9XG4gICAgICAgIGNvbnN0IHN1YnN0aXR1dGUgPSB7fSAvLyBrZWVwIHRyYWNrIG9mIHZlcnNlIHN1YnN0aXR1dGlvbnNcbiAgICAgICAgbGV0IHN0YXJ0VmVyc2UgPSBfdmVyc2VzRm9yUmVmWzBdLnZlcnNlXG5cbiAgICAgICAgaWYgKHR5cGVvZiBzdGFydFZlcnNlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHN0YXJ0VmVyc2UgPSBwYXJzZUludChzdGFydFZlcnNlKVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxhc3RWZXJzZSA9IHN0YXJ0VmVyc2VcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IF92ZXJzZXNGb3JSZWYubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgdmVyc2VSZWYgPSBfdmVyc2VzRm9yUmVmW2ldXG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgY2hhcHRlcixcbiAgICAgICAgICAgIHZlcnNlLFxuICAgICAgICAgIH0gPSB2ZXJzZVJlZlxuICAgICAgICAgIC8vIFRSSUNLWSAtIHdlIHJlbWFwIHZlcnNlcyBpbiByZWZlcmVuY2UgcmFuZ2UgdG8gYSBsaW5lYXIgc2VyaWVzIG9mIHZlcnNlcyBzbyB2ZXJzZSBzcGFucyBkb24ndCBjaG9rZSBnZXRRdW90ZU1hdGNoZXNJbkJvb2tSZWZcbiAgICAgICAgICBsZXQgX3ZlcnNlID0gc3RhcnRWZXJzZSArIGlcbiAgICAgICAgICBsYXN0VmVyc2UgPSBfdmVyc2VcbiAgICAgICAgICBzdWJzdGl0dXRlW2Ake2NoYXB0ZXJ9OiR7X3ZlcnNlfWBdID0gYCR7Y2hhcHRlcn06JHt2ZXJzZX1gXG5cbiAgICAgICAgICBpZiAoIW9yaWdpbmFsVmVyc2VzW2NoYXB0ZXJdKSB7XG4gICAgICAgICAgICBvcmlnaW5hbFZlcnNlc1tjaGFwdGVyXSA9IHt9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IHZlcnNlT2JqZWN0cyA9IFtdXG5cbiAgICAgICAgICBpZiAoKHR5cGVvZiB2ZXJzZSA9PT0gJ3N0cmluZycpICYmICh2ZXJzZS5pbmNsdWRlcygnLScpKSkge1xuICAgICAgICAgICAgY29uc3QgdmVyc2VzID0gZ2V0VmVyc2VzKGJvb2tWZXJzZU9iamVjdCwgYCR7Y2hhcHRlcn06JHt2ZXJzZX1gKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZlcnNlSXRlbSBvZiB2ZXJzZXMpIHtcbiAgICAgICAgICAgICAgY29uc3Qgdm8gPSB2ZXJzZUl0ZW0udmVyc2VEYXRhLnZlcnNlT2JqZWN0c1xuICAgICAgICAgICAgICB2ZXJzZU9iamVjdHMgPSB2ZXJzZU9iamVjdHMuY29uY2F0KHZvKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2ZXJzZU9iamVjdHMgPSBib29rVmVyc2VPYmplY3RbY2hhcHRlcl1bdmVyc2VdPy52ZXJzZU9iamVjdHNcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmVyc2VPYmplY3RzKSB7XG4gICAgICAgICAgICB2ZXJzZU9iamVjdHMgPSBjbGVhbnVwVmVyc2VPYmplY3RzKHZlcnNlT2JqZWN0cylcbiAgICAgICAgICAgIG9yaWdpbmFsVmVyc2VzW2NoYXB0ZXJdW192ZXJzZV0gPSB7IHZlcnNlT2JqZWN0cyB9XG4gICAgICAgICAgICBfbWFwLnNldChgJHtjaGFwdGVyfToke3ZlcnNlfWAsIHZlcnNlT2JqZWN0cylcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjcmVhdGUgbmV3IHJlZmVyZW5jZSByYW5nZSBmb3IgbmV3IGxpbmVhciB2ZXJzZSByYW5nZVxuICAgICAgICBjb25zdCBbY2hhcHRlcl0gPSBzZWxlY3RlZFF1b3RlPy5yZWZlcmVuY2U/LnNwbGl0KCc6JylcbiAgICAgICAgbGV0IHN1YlJlZiA9IGAke2NoYXB0ZXJ9OiR7c3RhcnRWZXJzZX1gXG5cbiAgICAgICAgaWYgKGxhc3RWZXJzZSAhPSBzdGFydFZlcnNlKSB7XG4gICAgICAgICAgc3ViUmVmICs9IGAtJHtsYXN0VmVyc2V9YFxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcXVvdGVNYXRjaGVzID0gZ2V0UXVvdGVNYXRjaGVzSW5Cb29rUmVmKHtcbiAgICAgICAgICBib29rT2JqZWN0OiBvcmlnaW5hbFZlcnNlcyxcbiAgICAgICAgICByZWY6IHN1YlJlZixcbiAgICAgICAgICBxdW90ZTogc2VsZWN0ZWRRdW90ZT8ucXVvdGUsXG4gICAgICAgICAgb2NjdXJyZW5jZTogc2VsZWN0ZWRRdW90ZT8ub2NjdXJyZW5jZSxcbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCBzZWxlY3Rpb25zID0gbmV3IE1hcCgpXG5cbiAgICAgICAgaWYgKHF1b3RlTWF0Y2hlcz8uc2l6ZSkge1xuICAgICAgICAgIHF1b3RlTWF0Y2hlcy5mb3JFYWNoKCh3b3Jkcywga2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBfa2V5ID0gc3Vic3RpdHV0ZVtrZXldXG5cbiAgICAgICAgICAgIHNlbGVjdGlvbnMuc2V0KF9rZXksIHdvcmRzLm1hcCh3b3JkID0+IChcbiAgICAgICAgICAgICAgeyAuLi53b3JkLCB0ZXh0OiBjb3JlLm5vcm1hbGl6ZVN0cmluZyh3b3JkLnRleHQpIH1cbiAgICAgICAgICAgICkpKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgbmV3U2VsZWN0aW9ucyA9IHNlbGVjdGlvbnNcbiAgICAgICAgbmV3U2VsZWN0ZWRRdW90ZSA9IHNlbGVjdGVkUXVvdGVcbiAgICAgICAgdXBkYXRlU2VsZWN0aW9ucyA9IHRydWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBuZXdTdGF0ZTogYW55ID0ge31cblxuICAgIC8vIHVwZGF0ZSBzdGF0ZXMgdGhhdCBoYXZlIGNoYW5nZWRcbiAgICBpZiAoIWFyZU1hcHNUaGVTYW1lKHZlcnNlT2JqZWN0c01hcCwgX21hcCkpIHtcbiAgICAgIG5ld1N0YXRlLnZlcnNlT2JqZWN0c01hcCA9IF9tYXBcbiAgICB9XG5cbiAgICBpZiAoIWlzRXF1YWwoT2JqZWN0LmtleXModmVyc2VzRm9yUmVmIHx8IHt9KSwgT2JqZWN0LmtleXMoX3ZlcnNlc0ZvclJlZiB8fCB7fSkpKSB7XG4gICAgICBuZXdTdGF0ZS52ZXJzZXNGb3JSZWYgPSBfdmVyc2VzRm9yUmVmXG4gICAgICBuZXdTdGF0ZS5sYXN0U2VsZWN0ZWRRdW90ZSA9IG5ld1NlbGVjdGVkUXVvdGVcbiAgICAgIG5ld1N0YXRlLnNlbGVjdGlvbnMgPSBuZXdTZWxlY3Rpb25zXG4gICAgfVxuXG4gICAgaWYgKG5ld1NlbGVjdGVkUXVvdGUpIHtcbiAgICAgIG5ld1N0YXRlLmxhc3RTZWxlY3RlZFF1b3RlID0gbmV3U2VsZWN0ZWRRdW90ZVxuICAgIH1cblxuICAgIGlmICh1cGRhdGVTZWxlY3Rpb25zKSB7XG4gICAgICBpZiAoIWFyZU1hcHNUaGVTYW1lKHNlbGVjdGlvbnMgfHwgKG5ldyBNYXAoKSksIG5ld1NlbGVjdGlvbnMpKSB7XG4gICAgICAgIG5ld1N0YXRlLnNlbGVjdGlvbnMgPSBuZXdTZWxlY3Rpb25zXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKG5ld1N0YXRlKS5sZW5ndGgpIHtcbiAgICAgIHNldFN0YXRlKG5ld1N0YXRlKVxuICAgIH1cbiAgfSwgW293bmVyLCByZXNvdXJjZUlkLCBib29rSWQsIGxhbmd1YWdlSWRfLCBzY3JpcHR1cmVDb25maWc/LnZlcnNlc0ZvclJlZiwgb3JpZ2luYWxWZXJzZU9iamVjdHMsIHNlbGVjdGVkUXVvdGVdKVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0U3RhdGUoeyB2ZXJzZXNBbGlnbm1lbnRTdGF0dXM6IG51bGwgfSlcbiAgfSwgW3ZlcnNlXSlcblxuICBjb25zdCB1cGRhdGVWZXJzZXNBbGlnbm1lbnRTdGF0dXMgPSAocmVmZXJlbmNlLCBhbGlnbmVkKSA9PiB7XG4gICAgc2V0U3RhdGVfKHByZXZTdGF0ZSA9PiAoe1xuICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgdmVyc2VzQWxpZ25tZW50U3RhdHVzOiB7IC4uLnByZXZTdGF0ZS52ZXJzZXNBbGlnbm1lbnRTdGF0dXMsIFtgJHtyZWZlcmVuY2UuY2hhcHRlcn06JHtyZWZlcmVuY2UudmVyc2V9YF06IGFsaWduZWQgfSxcbiAgICB9KSlcbiAgfVxuXG4gIGxldCBfdmVyc2VzRm9yUmVmID0gc2NyaXB0dXJlQ29uZmlnPy52ZXJzZXNGb3JSZWZcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChfdmVyc2VzRm9yUmVmPy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHsgcmVmZXJlbmNlLCByZXNvdXJjZUxpbmsgfSA9IHNjcmlwdHVyZUNvbmZpZyB8fCB7fVxuICAgICAgY29uc29sZS5sb2coYFNjcmlwdHVyZUNhcmQuX3ZlcnNlc0ZvclJlZiBjaGFuZ2VkYCwgeyByZWZlcmVuY2UsIHJlc291cmNlTGluayB9KVxuICAgIH1cbiAgfSwgW192ZXJzZXNGb3JSZWZdKVxuXG4gIGlmICghX3ZlcnNlc0ZvclJlZj8ubGVuZ3RoKSB7IC8vIGlmIGVtcHR5IG9mIHJlZmVyZW5jZXMsIGNyZWF0ZSBzaW5nbGUgZW1wdHkgcmVmZXJlbmNlXG4gICAgX3ZlcnNlc0ZvclJlZiA9IFt7IC4uLnJlZmVyZW5jZSB9XVxuICB9XG5cbiAgY29uc3QgcmVuZGVyZWRTY3JpcHR1cmVQYW5lcyA9IF92ZXJzZXNGb3JSZWY/Lm1hcCgoX2N1cnJlbnRWZXJzZURhdGEsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgaW5pdGlhbFZlcnNlT2JqZWN0cyA9IF9jdXJyZW50VmVyc2VEYXRhPy52ZXJzZURhdGE/LnZlcnNlT2JqZWN0cyB8fCBbXVxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCB7IGNoYXB0ZXIsIHZlcnNlIH0gPSBfY3VycmVudFZlcnNlRGF0YSB8fCB7fVxuICAgIGNvbnN0IF9yZWZlcmVuY2UgPSB7XG4gICAgICAuLi5fdmVyc2VzRm9yUmVmLFxuICAgICAgY2hhcHRlcixcbiAgICAgIHZlcnNlLFxuICAgIH1cbiAgICBjb25zdCBfc2NyaXB0dXJlQWxpZ25tZW50RWRpdENvbmZpZyA9IHtcbiAgICAgIC4uLnNjcmlwdHVyZUFsaWdubWVudEVkaXRDb25maWcsXG4gICAgICBjdXJyZW50SW5kZXg6IGluZGV4LFxuICAgICAgaW5pdGlhbFZlcnNlT2JqZWN0cyxcbiAgICAgIHJlZmVyZW5jZTogX3JlZmVyZW5jZSxcbiAgICB9XG5cbiAgICBsZXQgaXNWZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50ID0gZmFsc2VcblxuICAgIGlmICh2ZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50KSB7XG4gICAgICBpc1ZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQgPSB2ZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50LmNoYXB0ZXIgPT09IGNoYXB0ZXIgJiYgdmVyc2VTZWxlY3RlZEZvckFsaWdubWVudC52ZXJzZSA9PT0gdmVyc2VcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFNjcmlwdHVyZVBhbmVcbiAgICAgICAgey4uLnNjcmlwdHVyZUNvbmZpZ31cbiAgICAgICAgY29udGVudFN0eWxlPXtjb250ZW50U3R5bGV9XG4gICAgICAgIGN1cnJlbnRJbmRleD17aW5kZXh9XG4gICAgICAgIGRldGVybWluaW5nQnJhbmNoPXshcmVhZHlGb3JGZXRjaH1cbiAgICAgICAgZGlyZWN0aW9uPXtkaXJlY3Rpb259XG4gICAgICAgIGRpc2FibGVXb3JkUG9wb3Zlcj17ZGlzYWJsZVdvcmRQb3BvdmVyX31cbiAgICAgICAgZm9udFNpemU9e2ZvbnRTaXplfVxuICAgICAgICBnZXRMZXhpY29uRGF0YT17Z2V0TGV4aWNvbkRhdGF9XG4gICAgICAgIGlzTlQ9e2lzTlRffVxuICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICByZWZTdHlsZT17cmVmU3R5bGV9XG4gICAgICAgIHJlZmVyZW5jZT17X3JlZmVyZW5jZX1cbiAgICAgICAgc2F2aW5nPXtzdGFydFNhdmV9XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgc2NyaXB0dXJlQWxpZ25tZW50RWRpdENvbmZpZz17X3NjcmlwdHVyZUFsaWdubWVudEVkaXRDb25maWd9XG4gICAgICAgIHNldFdvcmRBbGlnbmVyU3RhdHVzPXtzZXRXb3JkQWxpZ25lclN0YXR1c31cbiAgICAgICAgc2VydmVyPXtzZXJ2ZXJ9XG4gICAgICAgIHRyYW5zbGF0ZT17dHJhbnNsYXRlfVxuICAgICAgICBpc1ZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQ9e2lzVmVyc2VTZWxlY3RlZEZvckFsaWdubWVudH1cbiAgICAgICAgb25BbGlnbm1lbnRGaW5pc2g9eygpID0+IHNldFN0YXRlKHsgdmVyc2VTZWxlY3RlZEZvckFsaWdubWVudDogbnVsbCB9KX1cbiAgICAgICAgdXBkYXRlVmVyc2VzQWxpZ25tZW50U3RhdHVzPXt1cGRhdGVWZXJzZXNBbGlnbm1lbnRTdGF0dXN9XG4gICAgICAgIHNldE9yaWdpbmFsU2NyaXB0dXJlUmVzb3VyY2U9eyFpbmRleCAmJiBzZXRPcmlnaW5hbFNjcmlwdHVyZVJlc291cmNlfVxuICAgICAgLz5cbiAgICApXG4gIH0pXG5cbiAgY29uc3QgaGFuZGxlQWxpZ25CdXR0b25DbGljayA9ICgpID0+IHtcbiAgICBpZiAodmVyc2VzRm9yUmVmPy5sZW5ndGggPiAxKSB7XG4gICAgICBzZXRTdGF0ZSh7IHNob3dBbGlnbm1lbnRQb3B1cDogdHJ1ZSB9KVxuICAgIH0gZWxzZSBpZiAodmVyc2VzRm9yUmVmPy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHNldFN0YXRlKHsgdmVyc2VTZWxlY3RlZEZvckFsaWdubWVudDogdmVyc2VzRm9yUmVmWzBdIH0pXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgb25SZW5kZXJUb29sYmFyID0gKHsgaXRlbXMgfSkgPT4ge1xuICAgIGNvbnN0IG5ld0l0ZW1zID0gWy4uLml0ZW1zXVxuXG4gICAgbGV0IGFsbFZlcnNlc0FsaWduZWQgPSBmYWxzZVxuXG4gICAgLy8gQ2hlY2sgaWYgYWxsIHZhbHVlcyBpbiB2ZXJzZXNBbGlnbm1lbnRTdGF0dXMgYXJlIHRydWVcbiAgICBpZiAodmVyc2VzQWxpZ25tZW50U3RhdHVzKSB7XG4gICAgICBhbGxWZXJzZXNBbGlnbmVkID0gT2JqZWN0LnZhbHVlcyh2ZXJzZXNBbGlnbm1lbnRTdGF0dXMpLmV2ZXJ5KGFsaWduU3RhdHVzID0+IGFsaWduU3RhdHVzID09PSB0cnVlKVxuICAgIH1cblxuICAgIGxldCBhbGlnbkljb24gPSBudWxsXG4gICAgbGV0IGFsaWduQnV0dG9uVGV4dCA9ICcnXG4gICAgaWYgKGFsbFZlcnNlc0FsaWduZWQpIHtcbiAgICAgIGFsaWduSWNvbiA9IDxSeExpbmsyIGlkPXtgdmFsaWRfaWNvbl8ke3Jlc291cmNlSWR9YH0gY29sb3I9JyNCQkInLz5cbiAgICAgIGFsaWduQnV0dG9uVGV4dCA9ICdBbGlnbm1lbnQgaXMgVmFsaWQnXG4gICAgfSBlbHNlIHtcbiAgICAgIGFsaWduSWNvbiA9IDxSeExpbmtCcmVhazIgaWQ9e2BpbnZhbGlkX2FsaWdubWVudF9pY29uXyR7cmVzb3VyY2VJZH1gfSBjb2xvcj0nIzAwMCcvPlxuICAgICAgYWxpZ25CdXR0b25UZXh0ID0gJ0FsaWdubWVudCBpcyBJbnZhbGlkJ1xuICAgIH1cblxuICAgIGlmIChzZXRXb3JkQWxpZ25lclN0YXR1cyAmJiByZXNvdXJjZUlkICE9PSAnT1JJR0lOQUxfU09VUkNFJykge1xuICAgICAgbmV3SXRlbXMucHVzaChcbiAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICBpZD17YGFsaWdubWVudF9pY29uXyR7cmVzb3VyY2VJZH1gfVxuICAgICAgICAgIGtleT0nY2hlY2tpbmctYnV0dG9uJ1xuICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUFsaWduQnV0dG9uQ2xpY2t9XG4gICAgICAgICAgdGl0bGU9e2FsaWduQnV0dG9uVGV4dH1cbiAgICAgICAgICBhcmlhLWxhYmVsPXthbGlnbkJ1dHRvblRleHR9XG4gICAgICAgICAgc3R5bGU9e3sgY3Vyc29yOiAncG9pbnRlcicgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHthbGlnbkljb259XG4gICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3SXRlbXNcbiAgfVxuXG4gIHJldHVybiAoXG5cbiAgICA8U2VsZWN0aW9uc0NvbnRleHRQcm92aWRlclxuICAgICAgc2VsZWN0aW9ucz17c2VsZWN0aW9uc31cbiAgICAgIG9uU2VsZWN0aW9ucz17bmV3U2VsZWN0aW9ucyA9PiB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdvblNlbGVjdGlvbnMnLCBuZXdTZWxlY3Rpb25zKVxuICAgICAgfX1cbiAgICAgIHF1b3RlPXtzZWxlY3RlZFF1b3RlPy5xdW90ZX1cbiAgICAgIG9jY3VycmVuY2U9e2ZpeE9jY3VycmVuY2Uoc2VsZWN0ZWRRdW90ZT8ub2NjdXJyZW5jZSl9XG4gICAgICB2ZXJzZU9iamVjdHNNYXA9e3ZlcnNlT2JqZWN0c01hcH1cbiAgICA+XG4gICAgICA8Q2FyZFxuICAgICAgICBpZD17YHNjcmlwdHVyZV9jYXJkXyR7Y2FyZE51bX1gfVxuICAgICAgICB0aXRsZT17c2NyaXB0dXJlTGFiZWx9XG4gICAgICAgIHNldHRpbmdzVGl0bGU9e3NjcmlwdHVyZVRpdGxlICsgJyBTZXR0aW5ncyd9XG4gICAgICAgIGl0ZW1zPXtpdGVtc31cbiAgICAgICAgY2xhc3Nlcz17Y2xhc3Nlc31cbiAgICAgICAgaGVhZGVycz17aGVhZGVyc31cbiAgICAgICAgZmlsdGVycz17ZmlsdGVyc31cbiAgICAgICAgZm9udFNpemU9e2ZvbnRTaXplfVxuICAgICAgICBpdGVtSW5kZXg9e2l0ZW1JbmRleH1cbiAgICAgICAgc2V0RmlsdGVycz17c2V0RmlsdGVyc31cbiAgICAgICAgc2V0Rm9udFNpemU9e3NldEZvbnRTaXplfVxuICAgICAgICBzZXRJdGVtSW5kZXg9e3NldEl0ZW1JbmRleH1cbiAgICAgICAgbWFya2Rvd25WaWV3PXttYXJrZG93blZpZXd9XG4gICAgICAgIHNldE1hcmtkb3duVmlldz17c2V0TWFya2Rvd25WaWV3fVxuICAgICAgICBnZXRDdXN0b21Db21wb25lbnQ9e2dldFNjcmlwdHVyZVNlbGVjdG9yfVxuICAgICAgICBoaWRlTWFya2Rvd25Ub2dnbGVcbiAgICAgICAgb25NZW51Q2xvc2U9e29uTWVudUNsb3NlfVxuICAgICAgICBvbk1pbmltaXplPXtvbk1pbmltaXplID8gKCkgPT4gb25NaW5pbWl6ZShpZCkgOiBudWxsfVxuICAgICAgICBlZGl0YWJsZT17ZW5hYmxlRWRpdCB8fCBlbmFibGVBbGlnbm1lbnR9XG4gICAgICAgIHNhdmVkPXtzdGFydFNhdmUgfHwgIWhhdmVVbnNhdmVkQ2hhbmdlc31cbiAgICAgICAgb25TYXZlRWRpdD17KCkgPT4gc2V0U3RhdGUoeyBzYXZlQ2xpY2tlZDogdHJ1ZSB9KX1cbiAgICAgICAgb25SZW5kZXJUb29sYmFyPXtvblJlbmRlclRvb2xiYXJ9XG4gICAgICA+XG4gICAgICAgIDxkaXYgaWQ9XCJzY3JpcHR1cmUtcGFuZS1saXN0XCI+XG4gICAgICAgICAge3JlbmRlcmVkU2NyaXB0dXJlUGFuZXN9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9DYXJkPlxuICAgICAgPFZlcnNlU2VsZWN0b3JQb3B1cFxuICAgICAgICByZXNvdXJjZUlkPXtyZXNvdXJjZUlkfVxuICAgICAgICBvcGVuPXtzaG93QWxpZ25tZW50UG9wdXB9XG4gICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFN0YXRlKHsgc2hvd0FsaWdubWVudFBvcHVwOiBmYWxzZSB9KX1cbiAgICAgICAgdmVyc2VzRm9yUmVmPXt2ZXJzZXNGb3JSZWZ9XG4gICAgICAgIHZlcnNlc0FsaWdubWVudFN0YXR1cz17dmVyc2VzQWxpZ25tZW50U3RhdHVzfVxuICAgICAgICBvblZlcnNlU2VsZWN0PXsodmVyc2UpID0+IHNldFN0YXRlKHtcbiAgICAgICAgICB2ZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50OiB2ZXJzZSxcbiAgICAgICAgICBzaG93QWxpZ25tZW50UG9wdXA6IGZhbHNlXG4gICAgICAgIH0pfVxuICAgICAgLz5cbiAgICA8L1NlbGVjdGlvbnNDb250ZXh0UHJvdmlkZXI+XG4gIClcbn1cblxuU2NyaXB0dXJlQ2FyZC5wcm9wVHlwZXMgPSB7XG4gIC8qKiBodG1sIGlkZW50aWZpZXIgdG8gdXNlIGZvciBjYXJkICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogbWV0aG9kIHRvIGRldGVybWluZSBpZiBOVCBvciBPVCAqL1xuICBpc05UOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAvKiogdGl0bGUgZm9yIHNjcmlwdHVyZSBjYXJkICovXG4gIHRpdGxlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIC8qKiBnZXQgbGFuZ3VhZ2UgZGV0YWlscyAqL1xuICBnZXRMYW5ndWFnZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgLyoqIHNjcmlwdHVyZSBjYXJkIG51bWJlciAoMCB0byAyIGZvciBleGFtcGxlKSAqL1xuICBjYXJkTnVtOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIC8qKiByZXNvdXJjZSBvYmplY3QgKi9cbiAgcmVzb3VyY2U6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqIHJlc291cmNlIGxhbmd1YWdlIHRvIHVzZSAqL1xuICAgIGxhbmd1YWdlSWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAvKiogcmVwbyBvd25lciBzdWNoIGFzIHVuZm9sZGluZ1dvcmQgKi9cbiAgICBvd25lcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIC8qKiByZXNvdXJjZUlkIHRvIHVzZSAoZS5nLiB1Z250KSAqL1xuICAgIHJlc291cmNlSWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAvKiogcmVwbyBvd25lciBmb3Igb3JpZ2luYWwgbGFuZ3VhZ2VzIHN1Y2ggYXMgdW5mb2xkaW5nV29yZCAqL1xuICAgIG9yaWdpbmFsTGFuZ3VhZ2VPd25lcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICB9KSxcbiAgcmVmZXJlbmNlOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKiBwcm9qZWN0SWQgKGJvb2tJRCkgdG8gdXNlICovXG4gICAgcHJvamVjdElkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgLyoqIGN1cnJlbnQgY2hhcHRlciBudW1iZXIgKi9cbiAgICBjaGFwdGVyOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSkuaXNSZXF1aXJlZCxcbiAgICAvKiogY3VycmVudCB2ZXJzZSBudW1iZXIgKi9cbiAgICB2ZXJzZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLmlzUmVxdWlyZWQsXG4gIH0pLFxuICAvKiogc2VydmVyIChlLmcuICdodHRwczovL2dpdC5kb29yNDMub3JnJykgKi9cbiAgc2VydmVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIC8qKiByZXBvIGJyYW5jaCBvciB0YWcgc3VjaCBhcyBtYXN0ZXIgKi9cbiAgYXBwUmVmOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIC8qKiBpZiB0cnVlIHRoZW4gd29yZCBkYXRhIGhvdmVyIGlzIHNob3duICovXG4gIGRpc2FibGVXb3JkUG9wb3ZlcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKiBDU1MgY2xhc3NlcyAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKiogcmVzb3VyY2VMaW5rICovXG4gIHJlc291cmNlTGluazogUHJvcFR5cGVzLmFueSxcbiAgLyoqIHVzZSBtZXRob2QgZm9yIHVzaW5nIGxvY2FsIHN0b3JhZ2Ugc3BlY2lmaWMgZm9yIHVzZXIgKi9cbiAgdXNlVXNlckxvY2FsU3RvcmFnZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgLyoqIG9wdGlvbmFsIGNhbGxiYWNrIGlmIGVycm9yIGxvYWRpbmcgcmVzb3VyY2UsIHBhcmFtZXRlciByZXR1cm5lZCBhcmU6XG4gICAqICAgICh7c3RyaW5nfSBlcnJvck1lc3NhZ2UsIHtib29sZWFufSBpc0FjY2Vzc0Vycm9yLCB7b2JqZWN0fSByZXNvdXJjZVN0YXR1cylcbiAgICogICAgICAtIGlzQWNjZXNzRXJyb3IgLSBpcyB0cnVlIGlmIHRoaXMgd2FzIGFuIGVycm9yIHRyeWluZyB0byBhY2Nlc3MgZmlsZVxuICAgKiAgICAgIC0gcmVzb3VyY2VTdGF0dXMgLSBpcyBvYmplY3QgY29udGFpbmluZyBkZXRhaWxzIGFib3V0IHByb2JsZW1zIGZldGNoaW5nIHJlc291cmNlICovXG4gIG9uUmVzb3VyY2VFcnJvcjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBvcHRpb25hbCBodHRwIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciBmZXRjaGluZyByZXNvdXJjZXMsIGRlZmF1bHQgaXMgMCAodmVyeSBsb25nIHdhaXQpICovXG4gIGh0dHBDb25maWc6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKiBvcHRpb25hbCB1cmwgZm9yIGdyZWVrIHJlcG8gKi9cbiAgZ3JlZWtSZXBvVXJsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogb3B0aW9uYWwgdXJsIGZvciBoZWJyZXcgcmVwbyAqL1xuICBoZWJyZXdSZXBvVXJsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogZnVuY3Rpb24gdG8gZ2V0IGxhdGVzdCBsZXhpY29uIGRhdGEgKi9cbiAgZ2V0TGV4aWNvbkRhdGE6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogZnVuY3Rpb24gdG8gcHJlLWxvYWQgbGV4aWNvbiBkYXRhIGZvciB2ZXJzZSAqL1xuICBmZXRjaEdsb3NzZXNGb3JWZXJzZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBvcHRpb25hbCBmdW5jdGlvbiBmb3IgbG9jYWxpemF0aW9uICovXG4gIHRyYW5zbGF0ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBmdW5jdGlvbiB0byBtaW5pbWl6ZSB0aGUgY2FyZCAob3B0aW9uYWwpICovXG4gIG9uTWluaW1pemU6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogdXNlci1uYW1lICovXG4gIGxvZ2dlZEluVXNlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqIGF1dGhlbnRpY2F0aW9uIGluZm8gKi9cbiAgYXV0aGVudGljYXRpb246IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKiBmdW5jdGlvbiB0byBzZXQgc3RhdGUgaW4gYXBwIHRoYXQgdGhlcmUgYXJlIHVuc2F2ZWQgY2hhbmdlcyAqL1xuICBzZXRTYXZlZENoYW5nZXM6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogaW5kZXggZm9yIGN1cnJlbnQgYm9vayAoZS5nLiAnMDEnIGZvciAnZ2VuJykqL1xuICBib29rSW5kZXg6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKiBjYWxsYmFjayB0byB1cGRhdGUgd29yZCBhbGlnbmVyIHN0YXRlICovXG4gIHNldFdvcmRBbGlnbmVyU3RhdHVzOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqVGhpcyBpcyBjdXJyZW50bHkgc2VsZWN0ZWQgcXVvdGUgKi9cbiAgc2VsZWN0ZWRRdW90ZTogUHJvcFR5cGVzLm9iamVjdCxcbn1cbiJdfQ==
|
|
1397
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL1NjcmlwdHVyZUNhcmQvU2NyaXB0dXJlQ2FyZC50c3giXSwibmFtZXMiOlsiUmVhY3QiLCJQcm9wVHlwZXMiLCJjb3JlIiwiU2VsZWN0aW9uc0NvbnRleHRQcm92aWRlciIsInVzZm1qcyIsInVzZUVkaXQiLCJJY29uQnV0dG9uIiwiUnhMaW5rMiIsIlJ4TGlua0JyZWFrMiIsIkNhcmQiLCJFUlJPUl9TVEFURSIsIk1BTklGRVNUX05PVF9MT0FERURfRVJST1IiLCJ1c2VDYXJkU3RhdGUiLCJ1c2VVc2VyQnJhbmNoIiwiZ2V0UXVvdGVNYXRjaGVzSW5Cb29rUmVmIiwiQWxpZ25tZW50SGVscGVycyIsIlVzZm1GaWxlQ29udmVyc2lvbkhlbHBlcnMiLCJpc0VxdWFsIiwiZ2V0VmVyc2VzIiwiU2NyaXB0dXJlUGFuZSIsIlNjcmlwdHVyZVNlbGVjdG9yIiwidXNlU2NyaXB0dXJlU2V0dGluZ3MiLCJjbGVhbnVwVmVyc2VPYmplY3RzIiwiZml4T2NjdXJyZW5jZSIsImdldFJlc291cmNlTGluayIsImdldFJlc291cmNlTWVzc2FnZSIsImdldFNjcmlwdHVyZVZlcnNpb25TZXR0aW5ncyIsImlzT3JpZ2luYWxCaWJsZSIsImRlbGF5IiwiYXJlTWFwc1RoZVNhbWUiLCJUaXRsZSIsIk5UX09SSUdfTEFORyIsIk9SSUdJTkFMX1NPVVJDRSIsIk9UX09SSUdfTEFORyIsIlZlcnNlU2VsZWN0b3JQb3B1cCIsIktFWV9GT05UX1NJWkVfQkFTRSIsImxhYmVsIiwic3R5bGUiLCJtYXJnaW5Ub3AiLCJ3aWR0aCIsImNvbXBhcmVPYmplY3QiLCJ2ZXJzZVJlZiIsImNoYXB0ZXIiLCJ2ZXJzZSIsInZlcnNlRGF0YSIsInZlcnNlT2JqZWN0cyIsImxlbmd0aCIsImFyZVZlcnNlc1NhbWUiLCJ2ZXJzZXNGb3JSZWYxIiwidmVyc2VzRm9yUmVmMiIsImFyZVNhbWUiLCJpIiwibCIsInZlcnNlMSIsInZlcnNlMiIsIlNjcmlwdHVyZUNhcmQiLCJhcHBSZWYiLCJhdXRoZW50aWNhdGlvbiIsImJvb2tJbmRleCIsImNhcmROdW0iLCJjbGFzc2VzIiwiZGlzYWJsZVdvcmRQb3BvdmVyIiwiZmV0Y2hHbG9zc2VzRm9yVmVyc2UiLCJnZXRMYW5ndWFnZSIsImdldExleGljb25EYXRhIiwiZ3JlZWtSZXBvVXJsIiwiaGVicmV3UmVwb1VybCIsImh0dHBDb25maWciLCJpZCIsImlzTlQiLCJsb2dnZWRJblVzZXIiLCJvbk1pbmltaXplIiwib25SZXNvdXJjZUVycm9yIiwicmVmZXJlbmNlIiwicmVzb3VyY2UiLCJvd25lciIsImxhbmd1YWdlSWQiLCJyZXNvdXJjZUlkIiwib3JpZ2luYWxMYW5ndWFnZU93bmVyIiwicmVzb3VyY2VMaW5rIiwic2VsZWN0ZWRRdW90ZSIsInNlcnZlciIsInNldFNhdmVkQ2hhbmdlcyIsInNldFdvcmRBbGlnbmVyU3RhdHVzIiwidHJhbnNsYXRlIiwidGl0bGUiLCJ1c2VVc2VyTG9jYWxTdG9yYWdlIiwiYm9va0lkIiwicHJvamVjdElkIiwidXNlU3RhdGUiLCJjaGVja0ZvckVkaXRCcmFuY2giLCJjdXJyZW50UmVmZXJlbmNlIiwiZWRpdEJyYW5jaFJlYWR5IiwiaGF2ZVVuc2F2ZWRDaGFuZ2VzIiwibGFzdFNlbGVjdGVkUXVvdGUiLCJvcmlnaW5hbFZlcnNlT2JqZWN0cyIsInJlYWR5Rm9yRmV0Y2giLCJyZWYiLCJzYXZlQ2xpY2tlZCIsInNhdmVDb250ZW50Iiwic2VsZWN0aW9ucyIsIk1hcCIsInNoYSIsInN0YXJ0U2F2ZSIsInVybEVycm9yIiwidXNpbmdVc2VyQnJhbmNoIiwidW5zYXZlZENoYW5nZXNMaXN0IiwidmVyc2VzRm9yUmVmIiwic2hvd0FsaWdubWVudFBvcHVwIiwidmVyc2VTZWxlY3RlZEZvckFsaWdubWVudCIsInZlcnNlc0FsaWdubWVudFN0YXR1cyIsInZlcnNlT2JqZWN0c01hcCIsInN0YXRlIiwic2V0U3RhdGVfIiwiZm9udFNpemUiLCJzZXRGb250U2l6ZSIsImlzTlRfIiwic2V0U3RhdGUiLCJuZXdTdGF0ZSIsInByZXZTdGF0ZSIsInNldE9yaWdpbmFsU2NyaXB0dXJlUmVzb3VyY2UiLCJuZXdSZXNvdXJjZSIsIm5ld0Jvb2tPYmplY3RzIiwiYm9va09iamVjdHMiLCJfbmV3Qm9va09iamVjdHMiLCJjYWNoZSIsIm1heEFnZSIsIm5vQ2FjaGUiLCJzZXRVcmxFcnJvciIsImVycm9yIiwid2hvbGVCb29rIiwiaXNOZXdUZXN0YW1lbnQiLCJzY3JpcHR1cmVDb25maWciLCJzZXRTY3JpcHR1cmUiLCJzY3JpcHR1cmVTZXR0aW5ncyIsInNjcmlwdHVyZVZlcnNpb25IaXN0IiwiZmV0Y2hSZXNwXyIsImZldGNoUmVzcG9uc2UiLCJyZXBvIiwicmVmZXJlbmNlXyIsInVzZUVmZmVjdCIsIl9zaGEiLCJkYXRhIiwidXJsIiwiZG93bmxvYWRfdXJsIiwidmFsaWRCcmFuY2giLCJwYXJ0cyIsInNwbGl0IiwiZmV0Y2hCcmFuY2giLCJjb25zb2xlIiwibG9nIiwiSlNPTiIsInN0cmluZ2lmeSIsImNhcmRSZXNvdXJjZUlkIiwicmVmXyIsImNhblVzZUVkaXRCcmFuY2giLCJpbmNsdWRlcyIsImNhcmRJZCIsImJyYW5jaERldGVybWluZWQiLCJ1c2VyRWRpdEJyYW5jaE5hbWUiLCJfdXNpbmdVc2VyQnJhbmNoIiwid29ya2luZ1Jlc291cmNlQnJhbmNoIiwic3RhcnRFZGl0QnJhbmNoIiwiYWN0aW9ucyIsInN0YXJ0RWRpdCIsIndvcmtpbmdSZWYiLCJzY3JpcHR1cmVUaXRsZSIsInJlc291cmNlU3RhdHVzIiwibWVzc2FnZSIsImlzQWNjZXNzRXJyb3IiLCJ2ZXJzaW9uIiwidXBkYXRlVGl0bGUiLCJnZXRTY3JpcHR1cmVTZWxlY3RvciIsInNjcmlwdHVyZVNlbGVjdGlvbkNvbmZpZyIsIm9uTWVudUNsb3NlIiwibGFuZ3VhZ2VJZF8iLCJsYW5ndWFnZSIsImRpcmVjdGlvbiIsIl9yZWZlcmVuY2UiLCJpc0hlYnJldyIsImZvbnRGYWN0b3IiLCJzY2FsZWRGb250U2l6ZSIsIml0ZW1zIiwiaGVhZGVycyIsImZpbHRlcnMiLCJpdGVtSW5kZXgiLCJtYXJrZG93blZpZXciLCJzZXRGaWx0ZXJzIiwic2V0SXRlbUluZGV4Iiwic2V0TWFya2Rvd25WaWV3IiwicmVmU3R5bGUiLCJ1c2VNZW1vIiwiZm9udEZhbWlseSIsIk1hdGgiLCJyb3VuZCIsImNvbnRlbnRTdHlsZSIsInNjcmlwdHVyZUxhYmVsIiwiZGlzYWJsZVdvcmRQb3BvdmVyXyIsInVzaW5nT3JpZ2luYWxCaWJsZSIsInVuZGVmaW5lZCIsImZldGNoR2xvc3NEYXRhRm9yVmVyc2UiLCJfdmVyc2VPYmplY3RzIiwiY29uY2F0IiwiZW5hYmxlRWRpdCIsImVuYWJsZUFsaWdubWVudCIsIm9yaWdpbmFsUmVwb1VybCIsInNjcmlwdHVyZUFsaWdubWVudEVkaXRDb25maWciLCJjdXJyZW50VmVyc2VSZWYiLCJfc2V0U2F2ZWRDaGFuZ2VzIiwic291cmNlTGFuZ3VhZ2UiLCJ0YXJnZXRMYW5ndWFnZSIsImN1cnJlbnRJbmRleCIsInNhdmVkIiwiZ2V0Q2hhbmdlcyIsImNsZWFyQ2hhbmdlcyIsIl91bnNhdmVkQ2hhbmdlc0xpc3QiLCJoYXNPd25Qcm9wZXJ0eSIsIl9oYXZlVW5zYXZlZENoYW5nZXMiLCJPYmplY3QiLCJrZXlzIiwiZmluZFJlZkluQXJyYXkiLCJmaW5kSXRlbSIsImNodW5rcyIsInJlZkxlbiIsImluZGV4IiwiZmluZEluZGV4IiwiY2h1bmsiLCJpZHgiLCJzdWJzdHJpbmciLCJuZXh0Q2hhciIsImdldEJvb2tOYW1lIiwiYm9va0NhcHMiLCJ0b1VwcGVyQ2FzZSIsImZpbGVwYXRoIiwiY29udGVudCIsImNvbmZpZyIsInRva2VuIiwidGltZW91dCIsInNlcnZlclRpbWVPdXQiLCJhdXRob3IiLCJicmFuY2giLCJzYXZlRXJyb3IiLCJpc1NhdmVFcnJvciIsImlzRXJyb3IiLCJvblNhdmVFZGl0IiwiX3NhdmVFZGl0IiwiaW5mbyIsInRoZW4iLCJzdWNjZXNzIiwidW5zYXZlZENhcmRJbmRpY2VzIiwiY2FyZEluZGV4IiwicmVsb2FkUmVzb3VyY2UiLCJtZXJnZVZlcnNlT2JqZWN0c0ludG9CaWJsZVVzZm0iLCJiaWJsZVVzZm0iLCJ1cGRhdGVkVmVyc2VPYmplY3RzIiwibmV3VXNmbSIsImNoYXB0ZXJDaHVua3MiLCJjaGFwdGVySW5kZXgiLCJjdXJyZW50Q2hhcHRlciIsInZlcnNlQ2h1bmtzIiwidmVyc2VJbmRleCIsIm5ld1ZlcnNlVXNmbSIsImNvbnZlcnRWZXJzZURhdGFUb1VTRk0iLCJvbGRWZXJzZSIsInZlcnNlTnVtTGVuIiwibmV3Q2hhcHRlciIsImpvaW4iLCJjcmVhdGVFZGl0QnJhbmNoIiwid2FybiIsImdldFJlc3BvbnNlRGF0YSIsIm1lcmdlRmFpbCIsInBhcnNlSW50IiwibmV3Qm9va0pzb24iLCJuZXdWZXJzZVRleHQiLCJ0YXJnZXRWZXJzZU9iamVjdHNfIiwidXBkYXRlQWxpZ25tZW50c1RvVGFyZ2V0VmVyc2UiLCJ0YXJnZXRWZXJzZU9iamVjdHMiLCJ1cGRhdGVWZXJzZSIsInRvVVNGTSIsImZvcmNlZE5ld0xpbmVzIiwiX3ZlcnNlc0ZvclJlZiIsIm5ld1NlbGVjdGlvbnMiLCJ1cGRhdGVTZWxlY3Rpb25zIiwiX21hcCIsIm9yaWdpbmFsQm9va0lkIiwiYm9va1ZlcnNlT2JqZWN0IiwiY2hhcHRlcnMiLCJuZXdTZWxlY3RlZFF1b3RlIiwicXVvdGUiLCJvcmlnaW5hbFZlcnNlcyIsInN1YnN0aXR1dGUiLCJzdGFydFZlcnNlIiwibGFzdFZlcnNlIiwiX3ZlcnNlIiwidmVyc2VzIiwidmVyc2VJdGVtIiwidm8iLCJzZXQiLCJzdWJSZWYiLCJxdW90ZU1hdGNoZXMiLCJib29rT2JqZWN0Iiwib2NjdXJyZW5jZSIsInNpemUiLCJmb3JFYWNoIiwid29yZHMiLCJrZXkiLCJfa2V5IiwibWFwIiwid29yZCIsInRleHQiLCJub3JtYWxpemVTdHJpbmciLCJib29rc05vdFNhbWUiLCJ1cGRhdGVWZXJzZXNBbGlnbm1lbnRTdGF0dXMiLCJhbGlnbmVkIiwicmVuZGVyZWRTY3JpcHR1cmVQYW5lcyIsIl9jdXJyZW50VmVyc2VEYXRhIiwiaW5pdGlhbFZlcnNlT2JqZWN0cyIsIl9zY3JpcHR1cmVBbGlnbm1lbnRFZGl0Q29uZmlnIiwiaXNWZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50IiwiaGFuZGxlQWxpZ25CdXR0b25DbGljayIsIm9uUmVuZGVyVG9vbGJhciIsIm5ld0l0ZW1zIiwiYWxsVmVyc2VzQWxpZ25lZCIsInZhbHVlcyIsImV2ZXJ5IiwiYWxpZ25TdGF0dXMiLCJhbGlnbkljb24iLCJhbGlnbkJ1dHRvblRleHQiLCJwdXNoIiwiY3Vyc29yIiwicHJvcFR5cGVzIiwic3RyaW5nIiwiZnVuYyIsImlzUmVxdWlyZWQiLCJudW1iZXIiLCJzaGFwZSIsIm9uZU9mVHlwZSIsImJvb2wiLCJvYmplY3QiLCJhbnkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLQSxLQUFaLE1BQXVCLE9BQXZCO0FBQ0EsT0FBTyxLQUFLQyxTQUFaLE1BQTJCLFlBQTNCO0FBQ0EsU0FBU0MsSUFBVCxFQUFlQyx5QkFBZixRQUFnRCx5QkFBaEQ7QUFDQSxPQUFPQyxNQUFQLE1BQW1CLFNBQW5CO0FBQ0EsU0FBU0MsT0FBVCxRQUF3QixxQkFBeEI7QUFDQSxTQUFTQyxVQUFULFFBQTJCLGVBQTNCO0FBQ0EsU0FBU0MsT0FBVCxFQUFrQkMsWUFBbEIsUUFBc0MsZ0JBQXRDO0FBQ0EsU0FDRUMsSUFERixFQUVFQyxXQUZGLEVBR0VDLHlCQUhGLEVBSUVDLFlBSkYsRUFLRUMsYUFMRixRQU1PLHVCQU5QO0FBT0EsU0FBU0Msd0JBQVQsUUFBeUMsa0JBQXpDO0FBQ0EsU0FBU0MsZ0JBQVQsRUFBMkJDLHlCQUEzQixRQUE0RCxrQkFBNUQ7QUFDQSxPQUFPLEtBQUtDLE9BQVosTUFBeUIsWUFBekI7QUFDQSxTQUFTQyxTQUFULFFBQTBCLHVCQUExQjtBQUNBLFNBQVNDLGFBQVQsRUFBd0JDLGlCQUF4QixRQUFpRCxJQUFqRDtBQUNBLFNB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RUFBRWxFLFNBQVMsQ0FBQ2lWLE1BaERFOztBQWlEeEI7QUFDQWpSLEVBQUFBLFlBQVksRUFBRWhFLFNBQVMsQ0FBQzBVLE1BbERBOztBQW1EeEI7QUFDQXpRLEVBQUFBLGFBQWEsRUFBRWpFLFNBQVMsQ0FBQzBVLE1BcEREOztBQXFEeEI7QUFDQTNRLEVBQUFBLGNBQWMsRUFBRS9ELFNBQVMsQ0FBQzJVLElBdERGOztBQXVEeEI7QUFDQTlRLEVBQUFBLG9CQUFvQixFQUFFN0QsU0FBUyxDQUFDMlUsSUF4RFI7O0FBeUR4QjtBQUNBeFAsRUFBQUEsU0FBUyxFQUFFbkYsU0FBUyxDQUFDMlUsSUExREc7O0FBMkR4QjtBQUNBclEsRUFBQUEsVUFBVSxFQUFFdEUsU0FBUyxDQUFDMlUsSUE1REU7O0FBNkR4QjtBQUNBdFEsRUFBQUEsWUFBWSxFQUFFckUsU0FBUyxDQUFDMFUsTUE5REE7O0FBK0R4QjtBQUNBbFIsRUFBQUEsY0FBYyxFQUFFeEQsU0FBUyxDQUFDaVYsTUFoRUY7O0FBaUV4QjtBQUNBaFEsRUFBQUEsZUFBZSxFQUFFakYsU0FBUyxDQUFDMlUsSUFsRUg7O0FBbUV4QjtBQUNBbFIsRUFBQUEsU0FBUyxFQUFFekQsU0FBUyxDQUFDMFUsTUFwRUc7O0FBcUV4QjtBQUNBeFAsRUFBQUEsb0JBQW9CLEVBQUVsRixTQUFTLENBQUMyVSxJQXRFUjs7QUF1RXhCO0FBQ0E1UCxFQUFBQSxhQUFhLEVBQUUvRSxTQUFTLENBQUNpVjtBQXhFRCxDQUExQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICogYXMgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnXG5pbXBvcnQgeyBjb3JlLCBTZWxlY3Rpb25zQ29udGV4dFByb3ZpZGVyIH0gZnJvbSAnc2NyaXB0dXJlLXJlc291cmNlcy1yY2wnXG5pbXBvcnQgdXNmbWpzIGZyb20gJ3VzZm0tanMnXG5pbXBvcnQgeyB1c2VFZGl0IH0gZnJvbSAnZ2l0ZWEtcmVhY3QtdG9vbGtpdCdcbmltcG9ydCB7IEljb25CdXR0b24gfSBmcm9tICdAbXVpL21hdGVyaWFsJ1xuaW1wb3J0IHsgUnhMaW5rMiwgUnhMaW5rQnJlYWsyIH0gZnJvbSAncmVhY3QtaWNvbnMvcngnXG5pbXBvcnQge1xuICBDYXJkLFxuICBFUlJPUl9TVEFURSxcbiAgTUFOSUZFU1RfTk9UX0xPQURFRF9FUlJPUixcbiAgdXNlQ2FyZFN0YXRlLFxuICB1c2VVc2VyQnJhbmNoLFxufSBmcm9tICd0cmFuc2xhdGlvbi1oZWxwcy1yY2wnXG5pbXBvcnQgeyBnZXRRdW90ZU1hdGNoZXNJbkJvb2tSZWYgfSBmcm9tICd1dy1xdW90ZS1oZWxwZXJzJ1xuaW1wb3J0IHsgQWxpZ25tZW50SGVscGVycywgVXNmbUZpbGVDb252ZXJzaW9uSGVscGVycyB9IGZyb20gJ3dvcmQtYWxpZ25lci1yY2wnXG5pbXBvcnQgKiBhcyBpc0VxdWFsIGZyb20gJ2RlZXAtZXF1YWwnXG5pbXBvcnQgeyBnZXRWZXJzZXMgfSBmcm9tICdiaWJsZS1yZWZlcmVuY2UtcmFuZ2UnXG5pbXBvcnQgeyBTY3JpcHR1cmVQYW5lLCBTY3JpcHR1cmVTZWxlY3RvciB9IGZyb20gJy4uJ1xuaW1wb3J0IHsgdXNlU2NyaXB0dXJlU2V0dGluZ3MgfSBmcm9tICcuLi8uLi9ob29rcy91c2VTY3JpcHR1cmVTZXR0aW5ncydcbmltcG9ydCB7XG4gIGNsZWFudXBWZXJzZU9iamVjdHMsXG4gIGZpeE9jY3VycmVuY2UsXG4gIGdldFJlc291cmNlTGluayxcbiAgZ2V0UmVzb3VyY2VNZXNzYWdlLFxuICBnZXRTY3JpcHR1cmVWZXJzaW9uU2V0dGluZ3MsXG4gIGlzT3JpZ2luYWxCaWJsZSxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvU2NyaXB0dXJlU2V0dGluZ3MnXG5pbXBvcnQgeyBkZWxheSB9IGZyb20gJy4uLy4uL3V0aWxzL2RlbGF5J1xuaW1wb3J0IHsgYXJlTWFwc1RoZVNhbWUgfSBmcm9tICcuLi8uLi91dGlscy9tYXBzJ1xuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICcuLi9TY3JpcHR1cmVQYW5lL3N0eWxlZCdcbmltcG9ydCB7XG4gIE5UX09SSUdfTEFORyxcbiAgT1JJR0lOQUxfU09VUkNFLFxuICBPVF9PUklHX0xBTkcsXG59IGZyb20gJy4uLy4uL3V0aWxzJ1xuaW1wb3J0IHsgVmVyc2VTZWxlY3RvclBvcHVwIH0gZnJvbSAnLi4vVmVyc2VTZWxlY3RvclBvcHVwJ1xuXG5jb25zdCBLRVlfRk9OVF9TSVpFX0JBU0UgPSAnc2NyaXB0dXJlUGFuZUZvbnRTaXplXydcbmNvbnN0IGxhYmVsID0gJ1ZlcnNpb24nXG5jb25zdCBzdHlsZSA9IHsgbWFyZ2luVG9wOiAnMTZweCcsIHdpZHRoOiAnNTAwcHgnIH1cblxuLyoqXG4gKiBjcmVhdGUgYSBzaG9ydCBjb21wYXJpc29uIHZlcnNlIHJlZiBvYmplY3Qgd2l0aG91dCBhbGwgdGhlIHZlcnNlRGF0YVxuICogQHBhcmFtIHZlcnNlUmVmXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVPYmplY3QodmVyc2VSZWYpIHtcbiAgY29uc3Qge1xuICAgIGNoYXB0ZXIsXG4gICAgdmVyc2UsXG4gICAgdmVyc2VEYXRhLFxuICB9ID0gdmVyc2VSZWYgfHwge31cbiAgY29uc3QgdmVyc2VPYmplY3RzID0gdmVyc2VEYXRhPy52ZXJzZU9iamVjdHM/Lmxlbmd0aCB8fCAwXG4gIHJldHVybiB7XG4gICAgY2hhcHRlcixcbiAgICB2ZXJzZSxcbiAgICB2ZXJzZU9iamVjdHMsXG4gIH1cbn1cblxuLyoqXG4gKiBjb21wYXJlIHR3byB2ZXJzZSByZWZzIHRvIHNlZSBpZiB0aGV5IGFyZSBzdWJzdGFudGlhbGx5IHNpbWlsYXJcbiAqIEBwYXJhbSB2ZXJzZXNGb3JSZWYxXG4gKiBAcGFyYW0gdmVyc2VzRm9yUmVmMlxuICovXG5mdW5jdGlvbiBhcmVWZXJzZXNTYW1lKHZlcnNlc0ZvclJlZjE6IGFueVtdLCB2ZXJzZXNGb3JSZWYyOiBhbnlbXSkge1xuICB2ZXJzZXNGb3JSZWYxID0gdmVyc2VzRm9yUmVmMSB8fCBbXVxuICB2ZXJzZXNGb3JSZWYyID0gdmVyc2VzRm9yUmVmMiB8fCBbXVxuICBsZXQgYXJlU2FtZSA9IGZhbHNlXG5cbiAgaWYgKHZlcnNlc0ZvclJlZjEubGVuZ3RoID09PSB2ZXJzZXNGb3JSZWYyLmxlbmd0aCkge1xuICAgIGFyZVNhbWUgPSB0cnVlXG5cbiAgICBmb3IgKGxldCBpID0gMCwgbD0gdmVyc2VzRm9yUmVmMS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGNvbnN0IHZlcnNlMSA9IGNvbXBhcmVPYmplY3QodmVyc2VzRm9yUmVmMVtpXSlcbiAgICAgIGNvbnN0IHZlcnNlMiA9IGNvbXBhcmVPYmplY3QodmVyc2VzRm9yUmVmMltpXSlcbiAgICAgIGFyZVNhbWUgPSBpc0VxdWFsKHZlcnNlMSwgdmVyc2UyKVxuXG4gICAgICBpZiAoIWFyZVNhbWUpIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXJlU2FtZVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTY3JpcHR1cmVDYXJkKHtcbiAgYXBwUmVmLFxuICBhdXRoZW50aWNhdGlvbixcbiAgYm9va0luZGV4LFxuICBjYXJkTnVtLFxuICBjbGFzc2VzLFxuICBkaXNhYmxlV29yZFBvcG92ZXIsXG4gIGZldGNoR2xvc3Nlc0ZvclZlcnNlLFxuICBnZXRMYW5ndWFnZSxcbiAgZ2V0TGV4aWNvbkRhdGEsXG4gIGdyZWVrUmVwb1VybCxcbiAgaGVicmV3UmVwb1VybCxcbiAgaHR0cENvbmZpZyxcbiAgaWQsXG4gIGlzTlQsXG4gIGxvZ2dlZEluVXNlcixcbiAgb25NaW5pbWl6ZSxcbiAgb25SZXNvdXJjZUVycm9yLFxuICByZWZlcmVuY2UsXG4gIHJlc291cmNlOiB7XG4gICAgb3duZXIsXG4gICAgbGFuZ3VhZ2VJZCxcbiAgICByZXNvdXJjZUlkLFxuICAgIG9yaWdpbmFsTGFuZ3VhZ2VPd25lcixcbiAgfSxcbiAgcmVzb3VyY2VMaW5rLFxuICBzZWxlY3RlZFF1b3RlLFxuICBzZXJ2ZXIsXG4gIHNldFNhdmVkQ2hhbmdlcyxcbiAgc2V0V29yZEFsaWduZXJTdGF0dXMsXG4gIHRyYW5zbGF0ZSxcbiAgdGl0bGUsXG4gIHVzZVVzZXJMb2NhbFN0b3JhZ2UsXG59KSB7XG4gIGNvbnN0IGJvb2tJZCA9IHJlZmVyZW5jZT8ucHJvamVjdElkXG4gIGNvbnN0IFtzdGF0ZSwgc2V0U3RhdGVfXSA9IFJlYWN0LnVzZVN0YXRlKHtcbiAgICBjaGVja0ZvckVkaXRCcmFuY2g6IDAsXG4gICAgY3VycmVudFJlZmVyZW5jZTogbnVsbCxcbiAgICBlZGl0QnJhbmNoUmVhZHk6IGZhbHNlLFxuICAgIGhhdmVVbnNhdmVkQ2hhbmdlczogZmFsc2UsXG4gICAgbGFzdFNlbGVjdGVkUXVvdGU6IG51bGwsXG4gICAgb3JpZ2luYWxWZXJzZU9iamVjdHM6IG51bGwsXG4gICAgcmVhZHlGb3JGZXRjaDogZmFsc2UsXG4gICAgcmVmOiBhcHBSZWYsXG4gICAgc2F2ZUNsaWNrZWQ6IGZhbHNlLFxuICAgIHNhdmVDb250ZW50OiBudWxsLFxuICAgIHNlbGVjdGlvbnM6IG5ldyBNYXAoKSxcbiAgICBzaGE6IG51bGwsXG4gICAgc3RhcnRTYXZlOiBmYWxzZSxcbiAgICB1cmxFcnJvcjogbnVsbCxcbiAgICB1c2luZ1VzZXJCcmFuY2g6IGZhbHNlLFxuICAgIHVuc2F2ZWRDaGFuZ2VzTGlzdDoge30sXG4gICAgdmVyc2VzRm9yUmVmOiBudWxsLFxuICAgIHNob3dBbGlnbm1lbnRQb3B1cDogZmFsc2UsXG4gICAgdmVyc2VTZWxlY3RlZEZvckFsaWdubWVudDogbnVsbCxcbiAgICB2ZXJzZXNBbGlnbm1lbnRTdGF0dXM6IG51bGwsXG4gICAgdmVyc2VPYmplY3RzTWFwOiBuZXcgTWFwKCksXG4gIH0pXG4gIGNvbnN0IHtcbiAgICBjaGVja0ZvckVkaXRCcmFuY2gsXG4gICAgY3VycmVudFJlZmVyZW5jZSxcbiAgICBlZGl0QnJhbmNoUmVhZHksXG4gICAgaGF2ZVVuc2F2ZWRDaGFuZ2VzLFxuICAgIGxhc3RTZWxlY3RlZFF1b3RlLFxuICAgIG9yaWdpbmFsVmVyc2VPYmplY3RzLFxuICAgIHJlYWR5Rm9yRmV0Y2gsXG4gICAgcmVmLFxuICAgIHNhdmVDbGlja2VkLFxuICAgIHNhdmVDb250ZW50LFxuICAgIHNlbGVjdGlvbnMsXG4gICAgc2hhLFxuICAgIHNob3dBbGlnbm1lbnRQb3B1cCxcbiAgICBzdGFydFNhdmUsXG4gICAgdXJsRXJyb3IsXG4gICAgdXNpbmdVc2VyQnJhbmNoLFxuICAgIHVuc2F2ZWRDaGFuZ2VzTGlzdCxcbiAgICB2ZXJzZU9iamVjdHNNYXAsXG4gICAgdmVyc2VTZWxlY3RlZEZvckFsaWdubWVudCxcbiAgICB2ZXJzZXNBbGlnbm1lbnRTdGF0dXMsXG4gICAgdmVyc2VzRm9yUmVmLFxuICB9ID0gc3RhdGVcblxuICBjb25zdCBbZm9udFNpemUsIHNldEZvbnRTaXplXSA9IHVzZVVzZXJMb2NhbFN0b3JhZ2UoS0VZX0ZPTlRfU0laRV9CQVNFICsgY2FyZE51bSwgMTAwKVxuICBjb25zdCBpc05UXyA9IGlzTlQoYm9va0lkKVxuXG4gIGZ1bmN0aW9uIHNldFN0YXRlKG5ld1N0YXRlKSB7XG4gICAgc2V0U3RhdGVfKHByZXZTdGF0ZSA9PiAoeyAuLi5wcmV2U3RhdGUsIC4uLm5ld1N0YXRlIH0pKVxuICB9XG5cbiAgZnVuY3Rpb24gc2V0T3JpZ2luYWxTY3JpcHR1cmVSZXNvdXJjZShuZXdSZXNvdXJjZSkge1xuICAgIGNvbnN0IG5ld0Jvb2tPYmplY3RzID0gbmV3UmVzb3VyY2U/LmJvb2tPYmplY3RzIHx8IHt9XG4gICAgY29uc3QgYm9va0lkID0gbmV3UmVzb3VyY2U/LnJlZmVyZW5jZT8ucHJvamVjdElkXG4gICAgY29uc3QgX25ld0Jvb2tPYmplY3RzID0ge1xuICAgICAgLi4ubmV3Qm9va09iamVjdHMsXG4gICAgICBib29rSWQsXG4gICAgfVxuXG4gICAgaWYgKCFpc0VxdWFsKF9uZXdCb29rT2JqZWN0cywgb3JpZ2luYWxWZXJzZU9iamVjdHMpKSB7XG4gICAgICBzZXRTdGF0ZSh7IG9yaWdpbmFsVmVyc2VPYmplY3RzOiBfbmV3Qm9va09iamVjdHMgfSlcbiAgICB9XG4gIH1cblxuICBpZiAodXNpbmdVc2VyQnJhbmNoKSB7XG4gICAgaHR0cENvbmZpZyA9IHtcbiAgICAgIC4uLmh0dHBDb25maWcsXG4gICAgICBjYWNoZTogeyBtYXhBZ2U6IDAgfSxcbiAgICAgIG5vQ2FjaGU6IHRydWUsXG4gICAgfSAvLyBkaXNhYmxlIGh0dHAgY2FjaGluZ1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGlzTmV3VGVzdGFtZW50LFxuICAgIHNjcmlwdHVyZUNvbmZpZyxcbiAgICBzZXRTY3JpcHR1cmUsXG4gICAgc2NyaXB0dXJlU2V0dGluZ3MsXG4gICAgc2NyaXB0dXJlVmVyc2lvbkhpc3QsXG4gIH0gPSB1c2VTY3JpcHR1cmVTZXR0aW5ncyh7XG4gICAgaXNOVCxcbiAgICB0aXRsZSxcbiAgICBvd25lcixcbiAgICByZWZlcmVuY2U6IGN1cnJlbnRSZWZlcmVuY2UgfHwgcmVmZXJlbmNlLFxuICAgIGFwcFJlZjogcmVmLFxuICAgIHNlcnZlcixcbiAgICBjYXJkTnVtLFxuICAgIGRpc2FibGVXb3JkUG9wb3ZlcixcbiAgICBncmVla1JlcG9VcmwsXG4gICAgaGVicmV3UmVwb1VybCxcbiAgICBodHRwQ29uZmlnLFxuICAgIGxhbmd1YWdlSWQsXG4gICAgb3JpZ2luYWxMYW5ndWFnZU93bmVyLFxuICAgIHJlYWR5Rm9yRmV0Y2gsXG4gICAgcmVzb3VyY2VJZCxcbiAgICByZXNvdXJjZUxpbmssXG4gICAgc2V0VXJsRXJyb3I6IChlcnJvcikgPT4gc2V0U3RhdGUoeyB1cmxFcnJvcjogZXJyb3IgfSksXG4gICAgdXNlVXNlckxvY2FsU3RvcmFnZSxcbiAgICB3aG9sZUJvb2s6IHRydWUsXG4gIH0pXG5cbiAgY29uc3QgZmV0Y2hSZXNwXyA9IHNjcmlwdHVyZUNvbmZpZz8uZmV0Y2hSZXNwb25zZVxuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IHJlcG8gPSBgJHtzY3JpcHR1cmVDb25maWc/LnJlc291cmNlPy5sYW5ndWFnZUlkfV8ke3NjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2U/LnByb2plY3RJZH1gXG4gIGNvbnN0IHJlZmVyZW5jZV8gPSBzY3JpcHR1cmVDb25maWc/LnJlZmVyZW5jZSB8fCBudWxsXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gZ2V0IHRoZSBfc2hhIGZyb20gbGFzdCBzY3JpcHR1cmUgZG93bmxvYWRcbiAgICBjb25zdCBfc2hhID0gZmV0Y2hSZXNwXz8uZGF0YT8uc2hhIHx8IG51bGxcbiAgICBjb25zdCB1cmwgPSBmZXRjaFJlc3BfPy5kYXRhPy5kb3dubG9hZF91cmwgfHwgbnVsbFxuICAgIGxldCB2YWxpZEJyYW5jaCA9IHRydWVcblxuICAgIGlmIChfc2hhKSB7IC8vIFRSSUNLWTogc2luY2UgdGhpcyBmZXRjaCBtYXkgYmUgZGVsYXllZCAtIG1ha2Ugc3VyZSBpdCB3YXMgZm9yIHRoZSBjdXJyZW50IGJyYW5jaCBiZWZvcmUgdXNpbmcgdGhlIHNoYVxuICAgICAgY29uc3QgcGFydHMgPSAodXJsIHx8ICcnKS5zcGxpdCgnLycpXG4gICAgICBjb25zdCBmZXRjaEJyYW5jaCA9IHBhcnRzLmxlbmd0aCA+IDcgPyBwYXJ0c1s3XSA6ICcnXG4gICAgICB2YWxpZEJyYW5jaCA9IGZldGNoQnJhbmNoID09PSByZWZcbiAgICB9XG5cbiAgICBpZiAodmFsaWRCcmFuY2ggJiYgX3NoYSAhPT0gc2hhKSB7XG4gICAgICBjb25zb2xlLmxvZyhgU2NyaXB0dXJlQ2FyZDogZm9yICR7dXJsfSAke0pTT04uc3RyaW5naWZ5KHJlZmVyZW5jZV8pfSBuZXcgc2hhIGlzICR7X3NoYX1gKVxuICAgICAgc2V0U3RhdGUoeyBzaGE6IF9zaGEgfSlcbiAgICB9XG4gIH0sIFtmZXRjaFJlc3BfXSlcblxuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IGNhcmRSZXNvdXJjZUlkID0gc2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZT8ucHJvamVjdElkIHx8IHJlc291cmNlSWRcbiAgLy8gQHRzLWlnbm9yZVxuICBsZXQgcmVmXyA9IHNjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2U/LnJlZiB8fCBhcHBSZWZcbiAgY29uc3QgY2FuVXNlRWRpdEJyYW5jaCA9ICEhKGxvZ2dlZEluVXNlciAmJiBhdXRoZW50aWNhdGlvbiAmJiAocmVzb3VyY2VJZCAhPT0gT1JJR0lOQUxfU09VUkNFKSAmJiAvLyBUUklDS1kgaWYgbm90IG9yaWdpbmFsIGxhbmd1YWdlIGFuZCB3ZSBoYXZlIGxvZ2luIGRhdGEsIHRoZW4gd2UgY2FuIHVzZSB0aGUgZWRpdCBicmFuY2hcbiAgICAoKHJlZl8gPT09ICdtYXN0ZXInKSB8fCAocmVmXy5pbmNsdWRlcyhsb2dnZWRJblVzZXIpKSkpIC8vIGFsc28gbWFrZSBzdXJlIG5vdCBhIHZlcnNpb24gdGFnXG5cbiAgY29uc3Qge1xuICAgIHN0YXRlOiB7XG4gICAgICBicmFuY2hEZXRlcm1pbmVkLFxuICAgICAgdXNlckVkaXRCcmFuY2hOYW1lLFxuICAgICAgdXNpbmdVc2VyQnJhbmNoOiBfdXNpbmdVc2VyQnJhbmNoLFxuICAgICAgd29ya2luZ1Jlc291cmNlQnJhbmNoLFxuICAgIH0sXG4gICAgYWN0aW9uczogeyBzdGFydEVkaXQ6IHN0YXJ0RWRpdEJyYW5jaCB9LFxuICB9ID0gdXNlVXNlckJyYW5jaCh7XG4gICAgYXBwUmVmLFxuICAgIGF1dGhlbnRpY2F0aW9uOiBjYW5Vc2VFZGl0QnJhbmNoID8gYXV0aGVudGljYXRpb24gOiBudWxsLFxuICAgIGJvb2tJZCxcbiAgICBjYXJkSWQ6IGlkLFxuICAgIGNhcmRSZXNvdXJjZUlkLFxuICAgIGNoZWNrRm9yRWRpdEJyYW5jaCxcbiAgICBsYW5ndWFnZUlkLFxuICAgIGxvZ2dlZEluVXNlcjogY2FuVXNlRWRpdEJyYW5jaCA/IGxvZ2dlZEluVXNlciA6IG51bGwsXG4gICAgb3duZXIsXG4gICAgb25SZXNvdXJjZUVycm9yLFxuICAgIHNlcnZlcixcbiAgICB1c2VVc2VyTG9jYWxTdG9yYWdlLFxuICB9KVxuXG4gIGNvbnN0IHdvcmtpbmdSZWYgPSBjYW5Vc2VFZGl0QnJhbmNoID8gd29ya2luZ1Jlc291cmNlQnJhbmNoIDogYXBwUmVmXG4gIGxldCBzY3JpcHR1cmVUaXRsZVxuXG4gIGlmICghY2FuVXNlRWRpdEJyYW5jaCAmJiAhcmVhZHlGb3JGZXRjaCkgeyAvLyBpZiBiaWJsZSBub3QgZWxpZ2libGUgZm9yIHVzZXIgYnJhbmNoLCBtYWtlIHN1cmUgaXQncyByZWFkeVxuICAgIHNldFN0YXRlKHsgcmVhZHlGb3JGZXRjaDogdHJ1ZSB9KVxuICB9XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhgU2NyaXB0dXJlQ2FyZCBib29rIGNoYW5nZWRgLCB7IGJvb2tJZCwgb3duZXIsIGxhbmd1YWdlSWQsIHJlc291cmNlSWQgfSlcblxuICAgIGlmIChjYW5Vc2VFZGl0QnJhbmNoKSB7IC8vIGlmIGJpYmxlIGVsaWdpYmxlIGZvciB1c2VyIGJyYW5jaCwgcmVmcmVzaCBpdFxuICAgICAgc2V0U3RhdGUoeyByZWFkeUZvckZldGNoOiBmYWxzZSwgY2hlY2tGb3JFZGl0QnJhbmNoOiBjaGVja0ZvckVkaXRCcmFuY2ggKyAxIH0pXG4gICAgfVxuICB9LCBbYm9va0lkLCBvd25lciwgbGFuZ3VhZ2VJZCwgcmVzb3VyY2VJZF0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzRXF1YWwocmVmZXJlbmNlLCBjdXJyZW50UmVmZXJlbmNlKSkge1xuICAgICAgLy8gY29uc29sZS5sb2coYFNjcmlwdHVyZUNhcmQgcmVmZXJlbmNlIGNoYW5nZWRgLCByZWZlcmVuY2UpXG4gICAgICBzZXRTdGF0ZSh7IGN1cnJlbnRSZWZlcmVuY2U6IHJlZmVyZW5jZSB9KVxuICAgIH1cbiAgfSwgW3JlZmVyZW5jZV0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gd2FpdGluZyBmb3IgYnJhbmNoIGZldGNoIHRvIGNvbXBsZXRlXG4gICAgY29uc29sZS5sb2coYFNjcmlwdHVyZUNhcmQgYnJhbmNoRGV0ZXJtaW5lZCBpcyAke2JyYW5jaERldGVybWluZWR9IGFuZCB3b3JraW5nUmVmIGlzICR7d29ya2luZ1JlZn0gYW5kIHJlYWR5Rm9yRmV0Y2ggaXMgJHtyZWFkeUZvckZldGNofWApXG5cbiAgICBpZiAoIXJlYWR5Rm9yRmV0Y2ggJiYgYnJhbmNoRGV0ZXJtaW5lZCApIHtcbiAgICAgIHNldFN0YXRlKHsgcmVhZHlGb3JGZXRjaDogdHJ1ZSwgcmVmOiB3b3JraW5nUmVmIH0pXG4gICAgfVxuICB9LCBbYnJhbmNoRGV0ZXJtaW5lZF0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gc2VsZWN0IGNvcnJlY3Qgd29ya2luZyByZWYgLSBjb3VsZCBiZSBtYXN0ZXIsIHVzZXIgYnJhbmNoLCBvciByZWxlYXNlXG4gICAgaWYgKF91c2luZ1VzZXJCcmFuY2ggIT09IHVzaW5nVXNlckJyYW5jaCkge1xuICAgICAgc2V0U3RhdGUoeyB1c2luZ1VzZXJCcmFuY2g6IF91c2luZ1VzZXJCcmFuY2ggfSlcbiAgICB9XG4gIH0sIFtfdXNpbmdVc2VyQnJhbmNoLCB1c2luZ1VzZXJCcmFuY2hdKVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7IC8vIHVwZGF0ZSBkaXNwbGF5IHN0YXR1cyBpZiBlcnJvclxuICAgIGNvbnN0IGVycm9yID0gc2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZVN0YXR1cz8uW0VSUk9SX1NUQVRFXVxuXG4gICAgaWYgKGVycm9yKSB7IC8vIGlmIGVycm9yIHdhcyBmb3VuZCBkbyBjYWxsYmFja1xuICAgICAgY29uc3QgcmVzb3VyY2VTdGF0dXMgPSBzY3JpcHR1cmVDb25maWc/LnJlc291cmNlU3RhdHVzXG4gICAgICBjb25zdCByZXNvdXJjZUxpbmsgPSBnZXRSZXNvdXJjZUxpbmsoc2NyaXB0dXJlQ29uZmlnKVxuICAgICAgY29uc3QgbWVzc2FnZSA9IGdldFJlc291cmNlTWVzc2FnZShyZXNvdXJjZVN0YXR1cywgc2VydmVyLCByZXNvdXJjZUxpbmssIGlzTlRfKVxuICAgICAgY29uc3QgaXNBY2Nlc3NFcnJvciA9IHJlc291cmNlU3RhdHVzW01BTklGRVNUX05PVF9MT0FERURfRVJST1JdXG4gICAgICBvblJlc291cmNlRXJyb3IgJiYgb25SZXNvdXJjZUVycm9yKG1lc3NhZ2UsIGlzQWNjZXNzRXJyb3IsIHJlc291cmNlU3RhdHVzKVxuICAgIH1cbiAgfSwgW3NjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2VTdGF0dXM/LltFUlJPUl9TVEFURV1dKVxuXG4gIGlmIChzY3JpcHR1cmVDb25maWcudGl0bGUgJiYgc2NyaXB0dXJlQ29uZmlnLnZlcnNpb24pIHtcbiAgICBzY3JpcHR1cmVUaXRsZSA9IGAke3NjcmlwdHVyZUNvbmZpZy50aXRsZX0gdiR7c2NyaXB0dXJlQ29uZmlnLnZlcnNpb259YFxuICAgIHNjcmlwdHVyZVZlcnNpb25IaXN0LnVwZGF0ZVRpdGxlKHNjcmlwdHVyZUNvbmZpZy5yZXNvdXJjZUxpbmssIHNjcmlwdHVyZVRpdGxlKVxuICB9IGVsc2Uge1xuICAgIHNjcmlwdHVyZVRpdGxlID0gYFRpdGxlIG1pc3NpbmcgZnJvbSBwcm9qZWN0IG1hbmlmZXN0YFxuICB9XG5cbiAgLyoqIER5bmFtaWNhbGx5IGNyZWF0ZXMgdGhlIHNjcmlwdHVyZSBzZWxlY3Rpb24gZHJvcGRvd24gdG8gYmUgaW5zZXJ0ZWQgaW50byBjYXJkIHNldHRpbmdzICovXG4gIGZ1bmN0aW9uIGdldFNjcmlwdHVyZVNlbGVjdG9yKCkge1xuICAgIGNvbnN0IHNjcmlwdHVyZVNlbGVjdGlvbkNvbmZpZyA9IGdldFNjcmlwdHVyZVZlcnNpb25TZXR0aW5ncyh7XG4gICAgICBsYWJlbCxcbiAgICAgIHJlc291cmNlTGluazogc2NyaXB0dXJlQ29uZmlnLnJlc291cmNlTGluayxcbiAgICAgIHNldFNjcmlwdHVyZSxcbiAgICAgIHNjcmlwdHVyZVZlcnNpb25IaXN0LFxuICAgIH0pXG5cbiAgICByZXR1cm4gPFNjcmlwdHVyZVNlbGVjdG9yIHsuLi5zY3JpcHR1cmVTZWxlY3Rpb25Db25maWd9IHN0eWxlPXtzdHlsZX0gZXJyb3JNZXNzYWdlPXt1cmxFcnJvcn0gLz5cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uTWVudUNsb3NlKCkge1xuICAgIC8vIGNvbnNvbGUubG9nKGBvbk1lbnVDbG9zZSgpYClcbiAgICBzZXRTdGF0ZSh7IHVybEVycm9yOiBudWxsIH0pXG4gIH1cblxuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IGxhbmd1YWdlSWRfID0gc2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZT8ubGFuZ3VhZ2VJZFxuICBjb25zdCBsYW5ndWFnZSA9IGdldExhbmd1YWdlKHsgbGFuZ3VhZ2VJZDogbGFuZ3VhZ2VJZF8gfSlcbiAgY29uc3QgZGlyZWN0aW9uID0gKGxhbmd1YWdlPy5kaXJlY3Rpb24pIHx8ICdsdHInXG4gIGNvbnN0IF9yZWZlcmVuY2UgPSB7IC4uLnNjcmlwdHVyZUNvbmZpZy5yZWZlcmVuY2UgfVxuXG4gIGNvbnN0IGlzSGVicmV3ID0gKGxhbmd1YWdlSWRfID09PSAnaGJvJylcbiAgY29uc3QgZm9udEZhY3RvciA9IGlzSGVicmV3ID8gMS40IDogMSAvLyB3ZSBhdXRvbWF0aWNhbGx5IHNjYWxlIHVwIGZvbnQgc2l6ZSBmb3IgSGVicmV3XG4gIGNvbnN0IHNjYWxlZEZvbnRTaXplID0gZm9udFNpemUgKiBmb250RmFjdG9yXG5cbiAgY29uc3QgaXRlbXMgPSBudWxsXG4gIGNvbnN0IHtcbiAgICBzdGF0ZToge1xuICAgICAgaGVhZGVycywgZmlsdGVycywgaXRlbUluZGV4LCBtYXJrZG93blZpZXcsXG4gICAgfSxcbiAgICBhY3Rpb25zOiB7XG4gICAgICBzZXRGaWx0ZXJzLCBzZXRJdGVtSW5kZXgsIHNldE1hcmtkb3duVmlldyxcbiAgICB9LFxuICB9ID0gdXNlQ2FyZFN0YXRlKHsgaXRlbXMgfSlcblxuICBjb25zdCByZWZTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICBmb250RmFtaWx5OiAnTm90byBTYW5zJyxcbiAgICBmb250U2l6ZTogYCR7TWF0aC5yb3VuZChzY2FsZWRGb250U2l6ZSAqIDAuOSl9JWAsXG4gIH0pLCBbc2NhbGVkRm9udFNpemVdKVxuXG4gIGNvbnN0IGNvbnRlbnRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICBmb250RmFtaWx5OiAnTm90byBTYW5zJyxcbiAgICBmb250U2l6ZTogYCR7c2NhbGVkRm9udFNpemV9JWAsXG4gIH0pLCBbc2NhbGVkRm9udFNpemVdKVxuXG4gIGNvbnN0IHNjcmlwdHVyZUxhYmVsID0gPFRpdGxlPntzY3JpcHR1cmVUaXRsZX08L1RpdGxlPlxuICBsZXQgZGlzYWJsZVdvcmRQb3BvdmVyXyA9IGRpc2FibGVXb3JkUG9wb3ZlclxuICBjb25zdCB1c2luZ09yaWdpbmFsQmlibGUgPSBpc09yaWdpbmFsQmlibGUoc2NyaXB0dXJlQ29uZmlnWydyZXNvdXJjZSddPy5wcm9qZWN0SWQpXG5cbiAgaWYgKGRpc2FibGVXb3JkUG9wb3ZlciA9PT0gdW5kZWZpbmVkKSB7IC8vIGlmIG5vdCBzcGVjaWZpZWQsIHRoZW4gZGV0ZXJtaW5lIGlmIG9yaWdpbmFsIGxhbmd1YWdlIHJlc291cmNlXG4gICAgZGlzYWJsZVdvcmRQb3BvdmVyXyA9ICF1c2luZ09yaWdpbmFsQmlibGVcbiAgfVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7IC8vIHByZS1jYWNoZSBnbG9zc2VzIG9uIHZlcnNlIGNoYW5nZVxuICAgIGNvbnN0IGZldGNoR2xvc3NEYXRhRm9yVmVyc2UgPSBhc3luYyAoKSA9PiB7XG4gICAgICBsZXQgdmVyc2VPYmplY3RzID0gW11cblxuICAgICAgLy8gZ2V0IHZlcnNlIG9iamVjdHMgb2YgYWxsIHRoZSB2ZXJzZXNcbiAgICAgIGZvciAoY29uc3QgdmVyc2VSZWYgb2Ygc2NyaXB0dXJlQ29uZmlnPy52ZXJzZXNGb3JSZWYgfHwgW10pIHtcbiAgICAgICAgY29uc3QgX3ZlcnNlT2JqZWN0cyA9IHZlcnNlUmVmPy52ZXJzZURhdGE/LnZlcnNlT2JqZWN0c1xuICAgICAgICB2ZXJzZU9iamVjdHMgPSB2ZXJzZU9iamVjdHMuY29uY2F0KF92ZXJzZU9iamVjdHMpXG4gICAgICB9XG5cbiAgICAgIGlmICghZGlzYWJsZVdvcmRQb3BvdmVyICYmIHZlcnNlT2JqZWN0cz8ubGVuZ3RoICYmIGZldGNoR2xvc3Nlc0ZvclZlcnNlKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hd2FpdC1pbi1sb29wXG4gICAgICAgIGF3YWl0IGZldGNoR2xvc3Nlc0ZvclZlcnNlKHZlcnNlT2JqZWN0cywgbGFuZ3VhZ2VJZF8pXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHVzaW5nT3JpZ2luYWxCaWJsZSkge1xuICAgICAgZmV0Y2hHbG9zc0RhdGFGb3JWZXJzZSgpXG4gICAgfVxuICB9LCBbIHZlcnNlc0ZvclJlZiwgbGFuZ3VhZ2VJZF8gXSlcblxuICBjb25zdCBlbmFibGVFZGl0ID0gIXVzaW5nT3JpZ2luYWxCaWJsZVxuICBjb25zdCBlbmFibGVBbGlnbm1lbnQgPSAhdXNpbmdPcmlnaW5hbEJpYmxlXG4gIGNvbnN0IG9yaWdpbmFsUmVwb1VybCA9IGlzTmV3VGVzdGFtZW50ID8gZ3JlZWtSZXBvVXJsIDogaGVicmV3UmVwb1VybFxuICBjb25zdCBzY3JpcHR1cmVBbGlnbm1lbnRFZGl0Q29uZmlnID0ge1xuICAgIGF1dGhlbnRpY2F0aW9uOiBjYW5Vc2VFZGl0QnJhbmNoID8gYXV0aGVudGljYXRpb24gOiBudWxsLFxuICAgIGJvb2tJbmRleCxcbiAgICBjdXJyZW50VmVyc2VSZWY6IF9yZWZlcmVuY2UsXG4gICAgZW5hYmxlRWRpdCxcbiAgICBlbmFibGVBbGlnbm1lbnQsXG4gICAgaHR0cENvbmZpZyxcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaXNOZXdUZXN0YW1lbnQsXG4gICAgbG9nZ2VkSW5Vc2VyOiBjYW5Vc2VFZGl0QnJhbmNoID8gbG9nZ2VkSW5Vc2VyIDogbnVsbCxcbiAgICBvcmlnaW5hbExhbmd1YWdlT3duZXIsXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9yaWdpbmFsUmVwb1VybCxcbiAgICBzY3JpcHR1cmVDb25maWcsXG4gICAgc2NyaXB0dXJlU2V0dGluZ3MsXG4gICAgc3RhcnRFZGl0QnJhbmNoLFxuICAgIHNldFNhdmVkQ2hhbmdlczogX3NldFNhdmVkQ2hhbmdlcyxcbiAgICBzb3VyY2VMYW5ndWFnZTogaXNOVF8gPyBOVF9PUklHX0xBTkcgOiBPVF9PUklHX0xBTkcsXG4gICAgdGFyZ2V0TGFuZ3VhZ2U6IGxhbmd1YWdlLFxuICAgIHRpdGxlOiBzY3JpcHR1cmVUaXRsZSxcbiAgICB3b3JraW5nUmVzb3VyY2VCcmFuY2g6IHJlZixcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGlzIGdldHMgY2FsbGVkIHdoZW5ldmVyIGEgc2NyaXB0dXJlIHBhbmUgaGFzIGEgY2hhbmdlIGluIHNhdmUgc3RhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IGN1cnJlbnRJbmRleFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNhdmVkXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGdldENoYW5nZXMgLSB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciB1c2VyIGNsaWNrcyBzYXZlIGJ1dHRvblxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjbGVhckNoYW5nZXMgLSB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciBzYXZlIGhhcyBjb21wbGV0ZWRcbiAgICogQHBhcmFtIHtvYmplY3R9IHN0YXRlIC0gY3VycmVudCBzdGF0ZSBvZiB3b3JkIGFsaWdubWVudC9lZGl0XG4gICAqL1xuICBmdW5jdGlvbiBfc2V0U2F2ZWRDaGFuZ2VzKGN1cnJlbnRJbmRleCwgc2F2ZWQsIHsgZ2V0Q2hhbmdlcyA9IG51bGwsIGNsZWFyQ2hhbmdlcyA9IG51bGwsIHN0YXRlID0gbnVsbCB9KSB7XG4gICAgY29uc3QgX3Vuc2F2ZWRDaGFuZ2VzTGlzdCA9IHsgLi4udW5zYXZlZENoYW5nZXNMaXN0IH1cblxuICAgIGlmIChzYXZlZCkge1xuICAgICAgaWYgKF91bnNhdmVkQ2hhbmdlc0xpc3QuaGFzT3duUHJvcGVydHkoY3VycmVudEluZGV4KSkge1xuICAgICAgICBkZWxldGUgX3Vuc2F2ZWRDaGFuZ2VzTGlzdFtjdXJyZW50SW5kZXhdXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIF91bnNhdmVkQ2hhbmdlc0xpc3RbY3VycmVudEluZGV4XSA9IHsgZ2V0Q2hhbmdlcywgY2xlYXJDaGFuZ2VzLCBzdGF0ZSB9IC8vIHVwZGF0ZSB3aXRoIGxhdGVzdFxuICAgIH1cblxuICAgIGNvbnN0IF9oYXZlVW5zYXZlZENoYW5nZXMgPSAhIU9iamVjdC5rZXlzKF91bnNhdmVkQ2hhbmdlc0xpc3QpLmxlbmd0aFxuXG4gICAgaWYgKGhhdmVVbnNhdmVkQ2hhbmdlcyAhPSBfaGF2ZVVuc2F2ZWRDaGFuZ2VzKSB7XG4gICAgICBzZXRTYXZlZENoYW5nZXMgJiYgc2V0U2F2ZWRDaGFuZ2VzKHJlc291cmNlSWQsICFfaGF2ZVVuc2F2ZWRDaGFuZ2VzKVxuICAgICAgc2V0U3RhdGUoeyBoYXZlVW5zYXZlZENoYW5nZXM6IF9oYXZlVW5zYXZlZENoYW5nZXMgfSlcbiAgICB9XG5cbiAgICBpZiAoIWlzRXF1YWwoX3Vuc2F2ZWRDaGFuZ2VzTGlzdCwgdW5zYXZlZENoYW5nZXNMaXN0KSkge1xuICAgICAgc2V0U3RhdGUoeyB1bnNhdmVkQ2hhbmdlc0xpc3Q6IF91bnNhdmVkQ2hhbmdlc0xpc3QgfSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogc2VhcmNoIGNoYXB0ZXIgb3IgdmVyc2UgY2h1bmsgdG8gbGluZSB0aGF0IHN0YXJ0cyB3aXRoIGZpbmRJdGVtXG4gICAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gZmluZEl0ZW1cbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gY2h1bmtzXG4gICAqL1xuICBmdW5jdGlvbiBmaW5kUmVmSW5BcnJheShmaW5kSXRlbSwgY2h1bmtzKSB7XG4gICAgY29uc3QgcmVmXyA9IGZpbmRJdGVtICsgJydcbiAgICBjb25zdCByZWZMZW4gPSByZWZfLmxlbmd0aFxuICAgIGNvbnN0IGluZGV4ID0gY2h1bmtzLmZpbmRJbmRleCgoY2h1bmssIGlkeCkgPT4ge1xuICAgICAgaWYgKGlkeCA+IDApIHtcbiAgICAgICAgaWYgKGNodW5rLnN1YnN0cmluZygwLCByZWZMZW4pID09PSByZWZfKSB7XG4gICAgICAgICAgY29uc3QgbmV4dENoYXIgPSBjaHVua1tyZWZMZW5dXG5cbiAgICAgICAgICBpZiAoKG5leHRDaGFyID4gJzknKSB8fCAobmV4dENoYXIgPCAnMCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSlcbiAgICByZXR1cm4gaW5kZXhcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEJvb2tOYW1lKCkge1xuICAgIGNvbnN0IGJvb2tDYXBzID0gc2NyaXB0dXJlQ29uZmlnPy5yZWZlcmVuY2U/LnByb2plY3RJZCA/IHNjcmlwdHVyZUNvbmZpZy5yZWZlcmVuY2UucHJvamVjdElkLnRvVXBwZXJDYXNlKCkgOiAnJ1xuICAgIHJldHVybiBgJHtib29rSW5kZXh9LSR7Ym9va0NhcHN9LnVzZm1gXG4gIH1cblxuICBjb25zdCBmaWxlcGF0aCA9IGdldEJvb2tOYW1lKClcblxuICAvLyBrZWVwIHRyYWNrIG9mIHZlcnNlIGVkaXQgc3RhdGVcbiAgY29uc3Qge1xuICAgIGVycm9yOiBzYXZlRXJyb3IsXG4gICAgaXNFcnJvcjogaXNTYXZlRXJyb3IsXG4gICAgb25TYXZlRWRpdCxcbiAgfSA9IHVzZUVkaXQoe1xuICAgIHNoYSxcbiAgICBvd25lcixcbiAgICBjb250ZW50OiBzYXZlQ29udGVudCxcbiAgICBjb25maWc6IHtcbiAgICAgIGNhY2hlOiB7IG1heEFnZTogMCB9LFxuICAgICAgLi4uYXV0aGVudGljYXRpb24/LmNvbmZpZyxcbiAgICAgIHRva2VuOiBhdXRoZW50aWNhdGlvbj8udG9rZW4sXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB0aW1lb3V0OiBodHRwQ29uZmlnPy5zZXJ2ZXJUaW1lT3V0IHx8IGh0dHBDb25maWc/LnRpbWVvdXQgfHwgMTAwMDAsXG4gICAgICBzZXJ2ZXIsXG4gICAgfSxcbiAgICBhdXRob3I6IGxvZ2dlZEluVXNlcixcbiAgICB0b2tlbjogYXV0aGVudGljYXRpb24/LnRva2VuLFxuICAgIGJyYW5jaDogd29ya2luZ1Jlc291cmNlQnJhbmNoLFxuICAgIGZpbGVwYXRoLFxuICAgIHJlcG8sXG4gIH0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gd2hlbiB3ZSBnZXQgYSBzYXZlIHNhdmVFcnJvclxuICAgIGlmIChzYXZlRXJyb3IgJiYgaXNTYXZlRXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBzYXZlIGVycm9yYCwgc2F2ZUVycm9yKVxuICAgICAgLy8gb25SZXNvdXJjZUVycm9yICYmIG9uUmVzb3VyY2VFcnJvcihudWxsLCBmYWxzZSwgbnVsbCwgYEVycm9yIHNhdmluZyAke2xhbmd1YWdlSWRffV8ke3Jlc291cmNlSWR9ICR7c2F2ZUVycm9yfWAsIHRydWUpXG4gICAgfVxuICB9LCBbc2F2ZUVycm9yLCBpc1NhdmVFcnJvcl0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gd2hlbiBzdGFydFNhdmUgZ29lcyB0cnVlLCBzYXZlIGVkaXRzIHRvIHVzZXIgYnJhbmNoIGFuZCB0aGVuIGNsZWFyIHN0YXJ0U2F2ZVxuICAgIGNvbnN0IF9zYXZlRWRpdCA9IGFzeW5jICgpID0+IHsgLy8gYmVnaW4gdXBsb2FkaW5nIG5ldyBVU0ZNXG4gICAgICBjb25zb2xlLmluZm8oYHNhdmVDaGFuZ2VzVG9DbG91ZCgpIC0gVXNpbmcgc2hhOiAke3NoYX1gKVxuICAgICAgYXdhaXQgb25TYXZlRWRpdCh1c2VyRWRpdEJyYW5jaE5hbWUpLnRoZW4oKHN1Y2Nlc3MpID0+IHsgLy8gcHVzaCBjaGFuZ2VkIHRvIHNlcnZlclxuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBzYXZlQ2hhbmdlc1RvQ2xvdWQoKSAtIHNhdmUgc2NyaXB0dXJlIGVkaXRzIHN1Y2Nlc3NgKVxuICAgICAgICAgIGNvbnN0IHVuc2F2ZWRDYXJkSW5kaWNlcyA9IE9iamVjdC5rZXlzKHVuc2F2ZWRDaGFuZ2VzTGlzdClcblxuICAgICAgICAgIGlmICh1bnNhdmVkQ2FyZEluZGljZXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjYXJkSW5kZXggb2YgdW5zYXZlZENhcmRJbmRpY2VzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgY2xlYXJDaGFuZ2VzIH0gPSB1bnNhdmVkQ2hhbmdlc0xpc3RbY2FyZEluZGV4XVxuICAgICAgICAgICAgICBjbGVhckNoYW5nZXMgJiYgY2xlYXJDaGFuZ2VzKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zb2xlLmluZm8oJ3NhdmVDaGFuZ2VzVG9DbG91ZCgpIC0gUmVsb2FkaW5nIHJlc291cmNlJylcbiAgICAgICAgICBzZXRTdGF0ZSh7XG4gICAgICAgICAgICBzdGFydFNhdmU6IGZhbHNlLFxuICAgICAgICAgICAgcmVhZHlGb3JGZXRjaDogdHJ1ZSxcbiAgICAgICAgICAgIHJlZjogdXNlckVkaXRCcmFuY2hOYW1lLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgZGVsYXkoNTAwKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHNjcmlwdHVyZUNvbmZpZz8ucmVsb2FkUmVzb3VyY2Uoc2hhKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignc2F2ZUNoYW5nZXNUb0Nsb3VkKCkgLSBzYXZpbmcgY2hhbmdlZCBzY3JpcHR1cmUgZmFpbGVkJylcbiAgICAgICAgICBzZXRTdGF0ZSh7IHN0YXJ0U2F2ZTogZmFsc2UgfSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAoc3RhcnRTYXZlKSB7XG4gICAgICBpZiAoIWVkaXRCcmFuY2hSZWFkeSkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkIC0gZWRpdCBicmFuY2ggbm90IHlldCBjcmVhdGVkYClcbiAgICAgIH0gZWxzZSBpZiAoIXNoYSkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkIC0gc2F2ZSBzaGEgbm90IHlldCByZWFkeWApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkIC0gY2FsbGluZyBfc2F2ZUVkaXQoKWApXG4gICAgICAgIF9zYXZlRWRpdCgpXG4gICAgICB9XG4gICAgfVxuICB9LCBbc3RhcnRTYXZlLCBlZGl0QnJhbmNoUmVhZHksIHNoYV0pXG5cbiAgLyoqXG4gICAqIGNvbnZlcnQgdXBkYXRlZFZlcnNlT2JqZWN0cyB0byBVU0ZNIGFuZCBtZXJnZSBpbnRvIHRoZSBiaWJsZVVzZm1cbiAgICogQHBhcmFtIHtzdHJpbmd9IGJpYmxlVXNmbSAtIFVTRk0gb2YgYmlibGVcbiAgICogQHBhcmFtIHtvYmplY3R9IHJlZiAtIHJlZmVyZW5jZSBvZiB2ZXJzZSB0byBtZXJnZSBpblxuICAgKiBAcGFyYW0ge29iamVjdFtdfSB1cGRhdGVkVmVyc2VPYmplY3RzIC0gbmV3IHZlcnNlIGluIHZlcnNlT2JqZWN0IGZvcm1hdFxuICAgKiBAcGFyYW0ge251bWJlcn0gY2FyZE51bVxuICAgKi9cbiAgZnVuY3Rpb24gbWVyZ2VWZXJzZU9iamVjdHNJbnRvQmlibGVVc2ZtKGJpYmxlVXNmbSwgcmVmLCB1cGRhdGVkVmVyc2VPYmplY3RzLCBjYXJkTnVtOiBudW1iZXIpIHtcbiAgICBsZXQgbmV3VXNmbVxuICAgIGNvbnN0IGNoYXB0ZXJDaHVua3MgPSBiaWJsZVVzZm0/LnNwbGl0KCdcXFxcYyAnKVxuICAgIGNvbnN0IGNoYXB0ZXJJbmRleCA9IGZpbmRSZWZJbkFycmF5KHJlZj8uY2hhcHRlciwgY2hhcHRlckNodW5rcylcblxuICAgIGlmIChjaGFwdGVySW5kZXggPj0gMCkge1xuICAgICAgY29uc3QgY3VycmVudENoYXB0ZXIgPSBjaGFwdGVyQ2h1bmtzW2NoYXB0ZXJJbmRleF1cbiAgICAgIGNvbnN0IHZlcnNlQ2h1bmtzID0gY3VycmVudENoYXB0ZXIuc3BsaXQoJ1xcXFx2ICcpXG4gICAgICBjb25zdCB2ZXJzZUluZGV4ID0gZmluZFJlZkluQXJyYXkocmVmPy52ZXJzZSwgdmVyc2VDaHVua3MpXG5cbiAgICAgIGlmICh2ZXJzZUluZGV4ID49IDApIHtcbiAgICAgICAgY29uc3QgbmV3VmVyc2VVc2ZtID0gVXNmbUZpbGVDb252ZXJzaW9uSGVscGVycy5jb252ZXJ0VmVyc2VEYXRhVG9VU0ZNKHVwZGF0ZWRWZXJzZU9iamVjdHMpXG4gICAgICAgIGNvbnNvbGUubG9nKGBzYXZlQ2hhbmdlc1RvQ2xvdWQoJHtjYXJkTnVtfSkgLSBuZXcgVVNGTSBmb3IgY2FyZDp9IC0gJHtuZXdWZXJzZVVzZm0uc3Vic3RyaW5nKDAsIDEwMCl9YClcbiAgICAgICAgY29uc3Qgb2xkVmVyc2UgPSB2ZXJzZUNodW5rc1t2ZXJzZUluZGV4XVxuICAgICAgICBjb25zdCB2ZXJzZU51bUxlbiA9IChyZWY/LnZlcnNlICsgJycpLmxlbmd0aFxuICAgICAgICB2ZXJzZUNodW5rc1t2ZXJzZUluZGV4XSA9IG9sZFZlcnNlLnN1YnN0cmluZygwLCB2ZXJzZU51bUxlbiArIDEpICsgbmV3VmVyc2VVc2ZtXG4gICAgICAgIGNvbnN0IG5ld0NoYXB0ZXIgPSB2ZXJzZUNodW5rcy5qb2luKCdcXFxcdiAnKVxuICAgICAgICBjaGFwdGVyQ2h1bmtzW2NoYXB0ZXJJbmRleF0gPSBuZXdDaGFwdGVyXG4gICAgICAgIG5ld1VzZm0gPSBjaGFwdGVyQ2h1bmtzLmpvaW4oJ1xcXFxjICcpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdVc2ZtXG4gIH1cblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyBmb3IgZWFjaCB1bnNhdmVkIGNoYW5nZSwgY2FsbCBpbnRvIHNjcmlwdHVyZVBhbmUgdG8gZ2V0IGxhdGVzdCBjaGFuZ2VzIGZvciB2ZXJzZSB0byBzYXZlXG4gICAgaWYgKHNhdmVDbGlja2VkKSB7XG4gICAgICBsZXQgY3JlYXRlRWRpdEJyYW5jaCA9ICFfdXNpbmdVc2VyQnJhbmNoXG5cbiAgICAgIGlmICghY3JlYXRlRWRpdEJyYW5jaCkgeyAvLyBpZiBhbHJlYWR5IHVzaW5nIHRoZSB1c2VyIGJyYW5jaFxuICAgICAgICBpZiAod29ya2luZ1Jlc291cmNlQnJhbmNoICE9PSB1c2VyRWRpdEJyYW5jaE5hbWUpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oYHNhdmVDaGFuZ2VzVG9DbG91ZCAtIHN0YXRlIGNvbmZsaWN0IC0gc2hvdWxkIGJlIGluIHVzZXIgYnJhbmNoICR7dXNlckVkaXRCcmFuY2hOYW1lfSwgYnV0IGFjdHVhbGx5IHVzaW5nICR7d29ya2luZ1Jlc291cmNlQnJhbmNofWApXG4gICAgICAgICAgY3JlYXRlRWRpdEJyYW5jaCA9IHRydWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkIC0gYWxyZWFkeSB1c2luZyBlZGl0IGJyYW5jaDogJHt3b3JraW5nUmVzb3VyY2VCcmFuY2h9YClcbiAgICAgICAgICBzZXRTdGF0ZSh7IGVkaXRCcmFuY2hSZWFkeTogdHJ1ZSB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjcmVhdGVFZGl0QnJhbmNoKSB7IC8vIGlmIG5vdCB1c2luZyB0aGUgdXNlciBicmFuY2gsIGNyZWF0ZSBpdFxuICAgICAgICBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkIC0gY3JlYXRpbmcgZWRpdCBicmFuY2hgKVxuICAgICAgICBzZXRTdGF0ZSh7XG4gICAgICAgICAgZWRpdEJyYW5jaFJlYWR5OiBmYWxzZSxcbiAgICAgICAgICByZWFkeUZvckZldGNoOiBmYWxzZSxcbiAgICAgICAgICBzaGE6IG51bGwsXG4gICAgICAgIH0pIC8vIHdlIHdpbGwgbmVlZCBhIG5ldyBzaGEgZm9yIGJvb2svYnJhbmNoXG4gICAgICAgIHN0YXJ0RWRpdEJyYW5jaCgpLnRoZW4oKGJyYW5jaCkgPT4ge1xuICAgICAgICAgIGlmIChicmFuY2gpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBzYXZlQ2hhbmdlc1RvQ2xvdWQgLSBlZGl0IGJyYW5jaCBjcmVhdGVkYClcbiAgICAgICAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgICAgICAgZWRpdEJyYW5jaFJlYWR5OiB0cnVlLFxuICAgICAgICAgICAgICByZWFkeUZvckZldGNoOiB0cnVlLFxuICAgICAgICAgICAgICByZWY6IGJyYW5jaCxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBzYXZlQ2hhbmdlc1RvQ2xvdWQgLSBmYWlsZWQgdG8gY3JlYXRlIGVkaXQgYnJhbmNoYClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVuc2F2ZWRDYXJkSW5kaWNlcyA9IE9iamVjdC5rZXlzKHVuc2F2ZWRDaGFuZ2VzTGlzdClcblxuICAgICAgaWYgKHVuc2F2ZWRDYXJkSW5kaWNlcz8ubGVuZ3RoKSB7XG4gICAgICAgIGxldCBiaWJsZVVzZm0gPSBjb3JlLmdldFJlc3BvbnNlRGF0YShzY3JpcHR1cmVDb25maWc/LmZldGNoUmVzcG9uc2UpXG4gICAgICAgIGxldCBtZXJnZUZhaWwgPSBmYWxzZVxuICAgICAgICBsZXQgY2FyZE51bSA9IDBcblxuICAgICAgICBmb3IgKGNvbnN0IGNhcmRJbmRleCBvZiB1bnNhdmVkQ2FyZEluZGljZXMpIHtcbiAgICAgICAgICBjYXJkTnVtID0gcGFyc2VJbnQoY2FyZEluZGV4KVxuICAgICAgICAgIGNvbnN0IHsgZ2V0Q2hhbmdlcywgc3RhdGUgfSA9IHVuc2F2ZWRDaGFuZ2VzTGlzdFtjYXJkTnVtXVxuXG4gICAgICAgICAgaWYgKGdldENoYW5nZXMpIHtcbiAgICAgICAgICAgIGxldCBuZXdVc2ZtXG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgIHJlZixcbiAgICAgICAgICAgICAgdXBkYXRlZFZlcnNlT2JqZWN0cyxcbiAgICAgICAgICAgIH0gPSBnZXRDaGFuZ2VzKHN0YXRlKVxuXG4gICAgICAgICAgICBpZiAodXBkYXRlZFZlcnNlT2JqZWN0cyAmJiBiaWJsZVVzZm0pIHsgLy8ganVzdCByZXBsYWNlIHZlcnNlXG4gICAgICAgICAgICAgIG5ld1VzZm0gPSBtZXJnZVZlcnNlT2JqZWN0c0ludG9CaWJsZVVzZm0oYmlibGVVc2ZtLCByZWYsIHVwZGF0ZWRWZXJzZU9iamVjdHMsIGNhcmROdW0pXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChuZXdVc2ZtKSB7XG4gICAgICAgICAgICAgIGJpYmxlVXNmbSA9IG5ld1VzZm1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1lcmdlRmFpbCA9IHRydWVcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWVyZ2VGYWlsKSB7IC8vIGlmIHdlIGZhaWxlZCB0byBtZXJnZSwgZmFsbGJhY2sgdG8gYnJ1dGUgZm9yY2UgdmVyc2Ugb2JqZWN0cyB0byBVU0ZNXG4gICAgICAgICAgY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCgke2NhcmROdW19KSAtIHZlcnNlIG5vdCBmb3VuZCwgZmFsbGluZyBiYWNrIHRvIGluc2VydGluZyB2ZXJzZSBvYmplY3RgKVxuICAgICAgICAgIGxldCBuZXdCb29rSnNvblxuXG4gICAgICAgICAgZm9yIChjb25zdCBjYXJkSW5kZXggb2YgdW5zYXZlZENhcmRJbmRpY2VzKSB7XG4gICAgICAgICAgICBjb25zdCBjYXJkTnVtID0gcGFyc2VJbnQoY2FyZEluZGV4KVxuICAgICAgICAgICAgY29uc3QgeyBnZXRDaGFuZ2VzLCBzdGF0ZSB9ID0gdW5zYXZlZENoYW5nZXNMaXN0W2NhcmROdW1dXG5cbiAgICAgICAgICAgIGlmIChnZXRDaGFuZ2VzKSB7XG4gICAgICAgICAgICAgIGxldCBuZXdVc2ZtXG4gICAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICBuZXdWZXJzZVRleHQsXG4gICAgICAgICAgICAgICAgcmVmLFxuICAgICAgICAgICAgICAgIHVwZGF0ZWRWZXJzZU9iamVjdHMsXG4gICAgICAgICAgICAgIH0gPSBnZXRDaGFuZ2VzKHN0YXRlKVxuXG4gICAgICAgICAgICAgIGlmICh1cGRhdGVkVmVyc2VPYmplY3RzICYmICFuZXdVc2ZtKSB7XG4gICAgICAgICAgICAgICAgbGV0IHRhcmdldFZlcnNlT2JqZWN0c18gPSBudWxsXG5cbiAgICAgICAgICAgICAgICBpZiAocmVmKSB7XG4gICAgICAgICAgICAgICAgICBpZiAobmV3VmVyc2VUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgdGFyZ2V0VmVyc2VPYmplY3RzIH0gPSBBbGlnbm1lbnRIZWxwZXJzLnVwZGF0ZUFsaWdubWVudHNUb1RhcmdldFZlcnNlKHVwZGF0ZWRWZXJzZU9iamVjdHMsIG5ld1ZlcnNlVGV4dClcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VmVyc2VPYmplY3RzXyA9IHRhcmdldFZlcnNlT2JqZWN0c1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VmVyc2VPYmplY3RzXyA9IHVwZGF0ZWRWZXJzZU9iamVjdHNcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIG5ld0Jvb2tKc29uID0gdGFyZ2V0VmVyc2VPYmplY3RzXyAmJiBzY3JpcHR1cmVDb25maWc/LnVwZGF0ZVZlcnNlKHJlZi5jaGFwdGVyLCByZWYudmVyc2UsIHsgdmVyc2VPYmplY3RzOiB0YXJnZXRWZXJzZU9iamVjdHNfIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYmlibGVVc2ZtID0gdXNmbWpzLnRvVVNGTShuZXdCb29rSnNvbiwgeyBmb3JjZWROZXdMaW5lczogdHJ1ZSB9KVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCgpIC0gc2F2aW5nIG5ldyBVU0ZNOiAke2JpYmxlVXNmbS5zdWJzdHJpbmcoMCwgMTAwKX0uLi5gKVxuICAgICAgICBzZXRTdGF0ZSh7IHNhdmVDb250ZW50OiBiaWJsZVVzZm0sIHN0YXJ0U2F2ZTogdHJ1ZSwgc2F2ZUNsaWNrZWQ6IGZhbHNlIH0pXG4gICAgICB9XG4gICAgfVxuICB9LCBbc2F2ZUNsaWNrZWRdKVxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgeyBjaGFwdGVyLCB2ZXJzZSB9ID0gX3JlZmVyZW5jZSB8fCB7fVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgX3ZlcnNlc0ZvclJlZiA9IHNjcmlwdHVyZUNvbmZpZz8udmVyc2VzRm9yUmVmXG4gICAgbGV0IG5ld1NlbGVjdGlvbnMgPSBuZXcgTWFwKClcbiAgICBsZXQgdXBkYXRlU2VsZWN0aW9ucyA9IGZhbHNlXG4gICAgY29uc3QgX21hcCA9IG5ld1NlbGVjdGlvbnNcbiAgICBjb25zdCBvcmlnaW5hbEJvb2tJZCA9IG9yaWdpbmFsVmVyc2VPYmplY3RzPy5ib29rSWRcbiAgICBjb25zdCBib29rVmVyc2VPYmplY3QgPSBvcmlnaW5hbFZlcnNlT2JqZWN0cz8uY2hhcHRlcnNcbiAgICBsZXQgbmV3U2VsZWN0ZWRRdW90ZSA9IG51bGxcblxuICAgIC8vIGlmIHdlIGhhdmUgZXZlcnl0aGluZyB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSBzZWxlY3Rpb25zXG4gICAgaWYgKF92ZXJzZXNGb3JSZWY/Lmxlbmd0aCAmJlxuICAgICAgYm9va1ZlcnNlT2JqZWN0ICYmXG4gICAgICAoYm9va0lkID09PSBvcmlnaW5hbEJvb2tJZCkgJiZcbiAgICAgIGJvb2tWZXJzZU9iamVjdFtjaGFwdGVyXSAmJiAvLyB3ZSBuZWVkIHRvIGhhdmUgZGF0YSBmb3IgY2hhcHRlclxuICAgICAgc2VsZWN0ZWRRdW90ZT8ucXVvdGVcbiAgICApIHtcbiAgICAgIC8vIGlmIHF1b3RlIGlzIGRpZmZlcmVudCB0aGFuIGxhc3RcbiAgICAgIGlmICghaXNFcXVhbChsYXN0U2VsZWN0ZWRRdW90ZSwgc2VsZWN0ZWRRdW90ZSkgfHxcbiAgICAgICAgIWlzRXF1YWwodmVyc2VzRm9yUmVmLCBfdmVyc2VzRm9yUmVmKSkge1xuICAgICAgICBjb25zdCBvcmlnaW5hbFZlcnNlcyA9IHt9XG4gICAgICAgIGNvbnN0IHN1YnN0aXR1dGUgPSB7fSAvLyBrZWVwIHRyYWNrIG9mIHZlcnNlIHN1YnN0aXR1dGlvbnNcbiAgICAgICAgbGV0IHN0YXJ0VmVyc2UgPSBfdmVyc2VzRm9yUmVmWzBdLnZlcnNlXG5cbiAgICAgICAgaWYgKHR5cGVvZiBzdGFydFZlcnNlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHN0YXJ0VmVyc2UgPSBwYXJzZUludChzdGFydFZlcnNlKVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxhc3RWZXJzZSA9IHN0YXJ0VmVyc2VcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IF92ZXJzZXNGb3JSZWYubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgdmVyc2VSZWYgPSBfdmVyc2VzRm9yUmVmW2ldXG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgY2hhcHRlcixcbiAgICAgICAgICAgIHZlcnNlLFxuICAgICAgICAgIH0gPSB2ZXJzZVJlZlxuICAgICAgICAgIC8vIFRSSUNLWSAtIHdlIHJlbWFwIHZlcnNlcyBpbiByZWZlcmVuY2UgcmFuZ2UgdG8gYSBsaW5lYXIgc2VyaWVzIG9mIHZlcnNlcyBzbyB2ZXJzZSBzcGFucyBkb24ndCBjaG9rZSBnZXRRdW90ZU1hdGNoZXNJbkJvb2tSZWZcbiAgICAgICAgICBsZXQgX3ZlcnNlID0gc3RhcnRWZXJzZSArIGlcbiAgICAgICAgICBsYXN0VmVyc2UgPSBfdmVyc2VcbiAgICAgICAgICBzdWJzdGl0dXRlW2Ake2NoYXB0ZXJ9OiR7X3ZlcnNlfWBdID0gYCR7Y2hhcHRlcn06JHt2ZXJzZX1gXG5cbiAgICAgICAgICBpZiAoIW9yaWdpbmFsVmVyc2VzW2NoYXB0ZXJdKSB7XG4gICAgICAgICAgICBvcmlnaW5hbFZlcnNlc1tjaGFwdGVyXSA9IHt9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IHZlcnNlT2JqZWN0cyA9IFtdXG5cbiAgICAgICAgICBpZiAoKHR5cGVvZiB2ZXJzZSA9PT0gJ3N0cmluZycpICYmICh2ZXJzZS5pbmNsdWRlcygnLScpKSkge1xuICAgICAgICAgICAgY29uc3QgdmVyc2VzID0gZ2V0VmVyc2VzKGJvb2tWZXJzZU9iamVjdCwgYCR7Y2hhcHRlcn06JHt2ZXJzZX1gKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZlcnNlSXRlbSBvZiB2ZXJzZXMpIHtcbiAgICAgICAgICAgICAgY29uc3Qgdm8gPSB2ZXJzZUl0ZW0udmVyc2VEYXRhLnZlcnNlT2JqZWN0c1xuICAgICAgICAgICAgICB2ZXJzZU9iamVjdHMgPSB2ZXJzZU9iamVjdHMuY29uY2F0KHZvKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2ZXJzZU9iamVjdHMgPSBib29rVmVyc2VPYmplY3RbY2hhcHRlcl1bdmVyc2VdPy52ZXJzZU9iamVjdHNcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmVyc2VPYmplY3RzKSB7XG4gICAgICAgICAgICB2ZXJzZU9iamVjdHMgPSBjbGVhbnVwVmVyc2VPYmplY3RzKHZlcnNlT2JqZWN0cylcbiAgICAgICAgICAgIG9yaWdpbmFsVmVyc2VzW2NoYXB0ZXJdW192ZXJzZV0gPSB7IHZlcnNlT2JqZWN0cyB9XG4gICAgICAgICAgICBfbWFwLnNldChgJHtjaGFwdGVyfToke3ZlcnNlfWAsIHZlcnNlT2JqZWN0cylcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjcmVhdGUgbmV3IHJlZmVyZW5jZSByYW5nZSBmb3IgbmV3IGxpbmVhciB2ZXJzZSByYW5nZVxuICAgICAgICBjb25zdCBbY2hhcHRlcl0gPSBzZWxlY3RlZFF1b3RlPy5yZWZlcmVuY2U/LnNwbGl0KCc6JylcbiAgICAgICAgbGV0IHN1YlJlZiA9IGAke2NoYXB0ZXJ9OiR7c3RhcnRWZXJzZX1gXG5cbiAgICAgICAgaWYgKGxhc3RWZXJzZSAhPSBzdGFydFZlcnNlKSB7XG4gICAgICAgICAgc3ViUmVmICs9IGAtJHtsYXN0VmVyc2V9YFxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcXVvdGVNYXRjaGVzID0gZ2V0UXVvdGVNYXRjaGVzSW5Cb29rUmVmKHtcbiAgICAgICAgICBib29rT2JqZWN0OiBvcmlnaW5hbFZlcnNlcyxcbiAgICAgICAgICByZWY6IHN1YlJlZixcbiAgICAgICAgICBxdW90ZTogc2VsZWN0ZWRRdW90ZT8ucXVvdGUsXG4gICAgICAgICAgb2NjdXJyZW5jZTogc2VsZWN0ZWRRdW90ZT8ub2NjdXJyZW5jZSxcbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCBzZWxlY3Rpb25zID0gbmV3IE1hcCgpXG5cbiAgICAgICAgaWYgKHF1b3RlTWF0Y2hlcz8uc2l6ZSkge1xuICAgICAgICAgIHF1b3RlTWF0Y2hlcy5mb3JFYWNoKCh3b3Jkcywga2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBfa2V5ID0gc3Vic3RpdHV0ZVtrZXldXG5cbiAgICAgICAgICAgIHNlbGVjdGlvbnMuc2V0KF9rZXksIHdvcmRzLm1hcCh3b3JkID0+IChcbiAgICAgICAgICAgICAgeyAuLi53b3JkLCB0ZXh0OiBjb3JlLm5vcm1hbGl6ZVN0cmluZyh3b3JkLnRleHQpIH1cbiAgICAgICAgICAgICkpKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgbmV3U2VsZWN0aW9ucyA9IHNlbGVjdGlvbnNcbiAgICAgICAgbmV3U2VsZWN0ZWRRdW90ZSA9IHNlbGVjdGVkUXVvdGVcbiAgICAgICAgdXBkYXRlU2VsZWN0aW9ucyA9IHRydWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBuZXdTdGF0ZTogYW55ID0ge31cblxuICAgIC8vIHVwZGF0ZSBzdGF0ZXMgdGhhdCBoYXZlIGNoYW5nZWRcbiAgICBpZiAoIWFyZU1hcHNUaGVTYW1lKHZlcnNlT2JqZWN0c01hcCwgX21hcCkpIHtcbiAgICAgIG5ld1N0YXRlLnZlcnNlT2JqZWN0c01hcCA9IF9tYXBcbiAgICB9XG5cbiAgICBjb25zdCBib29rc05vdFNhbWUgPSByZWZlcmVuY2U/LnByb2plY3RJZCAhPT0gY3VycmVudFJlZmVyZW5jZT8ucHJvamVjdElkXG5cbiAgICBpZiAoYm9va3NOb3RTYW1lIHx8ICFhcmVWZXJzZXNTYW1lKHZlcnNlc0ZvclJlZiwgX3ZlcnNlc0ZvclJlZikpIHtcbiAgICAgIG5ld1N0YXRlLnZlcnNlc0ZvclJlZiA9IF92ZXJzZXNGb3JSZWZcbiAgICAgIG5ld1N0YXRlLmxhc3RTZWxlY3RlZFF1b3RlID0gbmV3U2VsZWN0ZWRRdW90ZVxuICAgICAgbmV3U3RhdGUuc2VsZWN0aW9ucyA9IG5ld1NlbGVjdGlvbnNcbiAgICB9XG5cbiAgICBpZiAobmV3U2VsZWN0ZWRRdW90ZSkge1xuICAgICAgbmV3U3RhdGUubGFzdFNlbGVjdGVkUXVvdGUgPSBuZXdTZWxlY3RlZFF1b3RlXG4gICAgfVxuXG4gICAgaWYgKHVwZGF0ZVNlbGVjdGlvbnMpIHtcbiAgICAgIGlmICghYXJlTWFwc1RoZVNhbWUoc2VsZWN0aW9ucyB8fCAobmV3IE1hcCgpKSwgbmV3U2VsZWN0aW9ucykpIHtcbiAgICAgICAgbmV3U3RhdGUuc2VsZWN0aW9ucyA9IG5ld1NlbGVjdGlvbnNcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXMobmV3U3RhdGUpLmxlbmd0aCkge1xuICAgICAgc2V0U3RhdGUobmV3U3RhdGUpXG4gICAgfVxuICB9LCBbb3duZXIsIHJlc291cmNlSWQsIGJvb2tJZCwgbGFuZ3VhZ2VJZF8sIHNjcmlwdHVyZUNvbmZpZz8udmVyc2VzRm9yUmVmLCBvcmlnaW5hbFZlcnNlT2JqZWN0cywgc2VsZWN0ZWRRdW90ZV0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRTdGF0ZSh7IHZlcnNlc0FsaWdubWVudFN0YXR1czogbnVsbCB9KVxuICB9LCBbdmVyc2VdKVxuXG4gIGNvbnN0IHVwZGF0ZVZlcnNlc0FsaWdubWVudFN0YXR1cyA9IChyZWZlcmVuY2UsIGFsaWduZWQpID0+IHtcbiAgICBzZXRTdGF0ZV8ocHJldlN0YXRlID0+ICh7XG4gICAgICAuLi5wcmV2U3RhdGUsXG4gICAgICB2ZXJzZXNBbGlnbm1lbnRTdGF0dXM6IHsgLi4ucHJldlN0YXRlLnZlcnNlc0FsaWdubWVudFN0YXR1cywgW2Ake3JlZmVyZW5jZS5jaGFwdGVyfToke3JlZmVyZW5jZS52ZXJzZX1gXTogYWxpZ25lZCB9LFxuICAgIH0pKVxuICB9XG5cbiAgbGV0IF92ZXJzZXNGb3JSZWYgPSBzY3JpcHR1cmVDb25maWc/LnZlcnNlc0ZvclJlZlxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKF92ZXJzZXNGb3JSZWY/Lmxlbmd0aCkge1xuICAgICAgY29uc3QgeyByZWZlcmVuY2UsIHJlc291cmNlTGluayB9ID0gc2NyaXB0dXJlQ29uZmlnIHx8IHt9XG4gICAgICBjb25zb2xlLmxvZyhgU2NyaXB0dXJlQ2FyZC5fdmVyc2VzRm9yUmVmIGNoYW5nZWRgLCB7IHJlZmVyZW5jZSwgcmVzb3VyY2VMaW5rIH0pXG4gICAgfVxuICB9LCBbX3ZlcnNlc0ZvclJlZl0pXG5cbiAgaWYgKCFfdmVyc2VzRm9yUmVmPy5sZW5ndGgpIHsgLy8gaWYgZW1wdHkgb2YgcmVmZXJlbmNlcywgY3JlYXRlIHNpbmdsZSBlbXB0eSByZWZlcmVuY2VcbiAgICBfdmVyc2VzRm9yUmVmID0gW3sgLi4ucmVmZXJlbmNlIH1dXG4gIH1cblxuICBjb25zdCByZW5kZXJlZFNjcmlwdHVyZVBhbmVzID0gX3ZlcnNlc0ZvclJlZj8ubWFwKChfY3VycmVudFZlcnNlRGF0YSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBpbml0aWFsVmVyc2VPYmplY3RzID0gX2N1cnJlbnRWZXJzZURhdGE/LnZlcnNlRGF0YT8udmVyc2VPYmplY3RzIHx8IFtdXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IHsgY2hhcHRlciwgdmVyc2UgfSA9IF9jdXJyZW50VmVyc2VEYXRhIHx8IHt9XG4gICAgY29uc3QgcHJvamVjdElkID0gY3VycmVudFJlZmVyZW5jZT8ucHJvamVjdElkIHx8IHJlZmVyZW5jZT8ucHJvamVjdElkXG4gICAgY29uc3QgX3JlZmVyZW5jZSA9IHtcbiAgICAgIC4uLl92ZXJzZXNGb3JSZWYsXG4gICAgICBjaGFwdGVyLFxuICAgICAgdmVyc2UsXG4gICAgICBwcm9qZWN0SWQsXG4gICAgfVxuICAgIGNvbnN0IF9zY3JpcHR1cmVBbGlnbm1lbnRFZGl0Q29uZmlnID0ge1xuICAgICAgLi4uc2NyaXB0dXJlQWxpZ25tZW50RWRpdENvbmZpZyxcbiAgICAgIGN1cnJlbnRJbmRleDogaW5kZXgsXG4gICAgICBpbml0aWFsVmVyc2VPYmplY3RzLFxuICAgICAgcmVmZXJlbmNlOiBfcmVmZXJlbmNlLFxuICAgICAgaXNOZXdUZXN0YW1lbnQsXG4gICAgfVxuXG4gICAgbGV0IGlzVmVyc2VTZWxlY3RlZEZvckFsaWdubWVudCA9IGZhbHNlXG5cbiAgICBpZiAodmVyc2VTZWxlY3RlZEZvckFsaWdubWVudCkge1xuICAgICAgaXNWZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50ID0gdmVyc2VTZWxlY3RlZEZvckFsaWdubWVudC5jaGFwdGVyID09IGNoYXB0ZXIgJiYgdmVyc2VTZWxlY3RlZEZvckFsaWdubWVudC52ZXJzZSA9PSB2ZXJzZVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8U2NyaXB0dXJlUGFuZVxuICAgICAgICB7Li4uc2NyaXB0dXJlQ29uZmlnfVxuICAgICAgICBjb250ZW50U3R5bGU9e2NvbnRlbnRTdHlsZX1cbiAgICAgICAgY3VycmVudEluZGV4PXtpbmRleH1cbiAgICAgICAgZGV0ZXJtaW5pbmdCcmFuY2g9eyFyZWFkeUZvckZldGNofVxuICAgICAgICBkaXJlY3Rpb249e2RpcmVjdGlvbn1cbiAgICAgICAgZGlzYWJsZVdvcmRQb3BvdmVyPXtkaXNhYmxlV29yZFBvcG92ZXJffVxuICAgICAgICBmb250U2l6ZT17Zm9udFNpemV9XG4gICAgICAgIGdldExleGljb25EYXRhPXtnZXRMZXhpY29uRGF0YX1cbiAgICAgICAgaXNOVD17aXNOVF99XG4gICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgIHJlZlN0eWxlPXtyZWZTdHlsZX1cbiAgICAgICAgcmVmZXJlbmNlPXtfcmVmZXJlbmNlfVxuICAgICAgICBzYXZpbmc9e3N0YXJ0U2F2ZX1cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBzY3JpcHR1cmVBbGlnbm1lbnRFZGl0Q29uZmlnPXtfc2NyaXB0dXJlQWxpZ25tZW50RWRpdENvbmZpZ31cbiAgICAgICAgc2V0V29yZEFsaWduZXJTdGF0dXM9e3NldFdvcmRBbGlnbmVyU3RhdHVzfVxuICAgICAgICBzZXJ2ZXI9e3NlcnZlcn1cbiAgICAgICAgdHJhbnNsYXRlPXt0cmFuc2xhdGV9XG4gICAgICAgIGlzVmVyc2VTZWxlY3RlZEZvckFsaWdubWVudD17aXNWZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50fVxuICAgICAgICBvbkFsaWdubWVudEZpbmlzaD17KCkgPT4gc2V0U3RhdGUoeyB2ZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50OiBudWxsIH0pfVxuICAgICAgICB1cGRhdGVWZXJzZXNBbGlnbm1lbnRTdGF0dXM9e3VwZGF0ZVZlcnNlc0FsaWdubWVudFN0YXR1c31cbiAgICAgICAgc2V0T3JpZ2luYWxTY3JpcHR1cmVSZXNvdXJjZT17IWluZGV4ICYmIHNldE9yaWdpbmFsU2NyaXB0dXJlUmVzb3VyY2V9XG4gICAgICAvPlxuICAgIClcbiAgfSlcblxuICBjb25zdCBoYW5kbGVBbGlnbkJ1dHRvbkNsaWNrID0gKCkgPT4ge1xuICAgIGlmICh2ZXJzZXNGb3JSZWY/Lmxlbmd0aCA+IDEpIHtcbiAgICAgIHNldFN0YXRlKHsgc2hvd0FsaWdubWVudFBvcHVwOiB0cnVlIH0pXG4gICAgfSBlbHNlIGlmICh2ZXJzZXNGb3JSZWY/Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgc2V0U3RhdGUoeyB2ZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50OiB2ZXJzZXNGb3JSZWZbMF0gfSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBvblJlbmRlclRvb2xiYXIgPSAoeyBpdGVtcyB9KSA9PiB7XG4gICAgY29uc3QgbmV3SXRlbXMgPSBbLi4uaXRlbXNdXG5cbiAgICBsZXQgYWxsVmVyc2VzQWxpZ25lZCA9IGZhbHNlXG5cbiAgICAvLyBDaGVjayBpZiBhbGwgdmFsdWVzIGluIHZlcnNlc0FsaWdubWVudFN0YXR1cyBhcmUgdHJ1ZVxuICAgIGlmICh2ZXJzZXNBbGlnbm1lbnRTdGF0dXMpIHtcbiAgICAgIGFsbFZlcnNlc0FsaWduZWQgPSBPYmplY3QudmFsdWVzKHZlcnNlc0FsaWdubWVudFN0YXR1cykuZXZlcnkoYWxpZ25TdGF0dXMgPT4gYWxpZ25TdGF0dXMgPT09IHRydWUpXG4gICAgfVxuXG4gICAgbGV0IGFsaWduSWNvbiA9IG51bGxcbiAgICBsZXQgYWxpZ25CdXR0b25UZXh0ID0gJydcbiAgICBpZiAoYWxsVmVyc2VzQWxpZ25lZCkge1xuICAgICAgYWxpZ25JY29uID0gPFJ4TGluazIgaWQ9e2B2YWxpZF9pY29uXyR7cmVzb3VyY2VJZH1gfSBjb2xvcj0nI0JCQicvPlxuICAgICAgYWxpZ25CdXR0b25UZXh0ID0gJ0FsaWdubWVudCBpcyBWYWxpZCdcbiAgICB9IGVsc2Uge1xuICAgICAgYWxpZ25JY29uID0gPFJ4TGlua0JyZWFrMiBpZD17YGludmFsaWRfYWxpZ25tZW50X2ljb25fJHtyZXNvdXJjZUlkfWB9IGNvbG9yPScjMDAwJy8+XG4gICAgICBhbGlnbkJ1dHRvblRleHQgPSAnQWxpZ25tZW50IGlzIEludmFsaWQnXG4gICAgfVxuXG4gICAgaWYgKHNldFdvcmRBbGlnbmVyU3RhdHVzICYmIHJlc291cmNlSWQgIT09ICdPUklHSU5BTF9TT1VSQ0UnKSB7XG4gICAgICBuZXdJdGVtcy5wdXNoKFxuICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgIGlkPXtgYWxpZ25tZW50X2ljb25fJHtyZXNvdXJjZUlkfWB9XG4gICAgICAgICAga2V5PSdjaGVja2luZy1idXR0b24nXG4gICAgICAgICAgb25DbGljaz17aGFuZGxlQWxpZ25CdXR0b25DbGlja31cbiAgICAgICAgICB0aXRsZT17YWxpZ25CdXR0b25UZXh0fVxuICAgICAgICAgIGFyaWEtbGFiZWw9e2FsaWduQnV0dG9uVGV4dH1cbiAgICAgICAgICBzdHlsZT17eyBjdXJzb3I6ICdwb2ludGVyJyB9fVxuICAgICAgICA+XG4gICAgICAgICAge2FsaWduSWNvbn1cbiAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiBuZXdJdGVtc1xuICB9XG5cbiAgcmV0dXJuIChcblxuICAgIDxTZWxlY3Rpb25zQ29udGV4dFByb3ZpZGVyXG4gICAgICBzZWxlY3Rpb25zPXtzZWxlY3Rpb25zfVxuICAgICAgb25TZWxlY3Rpb25zPXtuZXdTZWxlY3Rpb25zID0+IHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ29uU2VsZWN0aW9ucycsIG5ld1NlbGVjdGlvbnMpXG4gICAgICB9fVxuICAgICAgcXVvdGU9e3NlbGVjdGVkUXVvdGU/LnF1b3RlfVxuICAgICAgb2NjdXJyZW5jZT17Zml4T2NjdXJyZW5jZShzZWxlY3RlZFF1b3RlPy5vY2N1cnJlbmNlKX1cbiAgICAgIHZlcnNlT2JqZWN0c01hcD17dmVyc2VPYmplY3RzTWFwfVxuICAgID5cbiAgICAgIDxDYXJkXG4gICAgICAgIGlkPXtgc2NyaXB0dXJlX2NhcmRfJHtjYXJkTnVtfWB9XG4gICAgICAgIHRpdGxlPXtzY3JpcHR1cmVMYWJlbH1cbiAgICAgICAgc2V0dGluZ3NUaXRsZT17c2NyaXB0dXJlVGl0bGUgKyAnIFNldHRpbmdzJ31cbiAgICAgICAgaXRlbXM9e2l0ZW1zfVxuICAgICAgICBjbGFzc2VzPXtjbGFzc2VzfVxuICAgICAgICBoZWFkZXJzPXtoZWFkZXJzfVxuICAgICAgICBmaWx0ZXJzPXtmaWx0ZXJzfVxuICAgICAgICBmb250U2l6ZT17Zm9udFNpemV9XG4gICAgICAgIGl0ZW1JbmRleD17aXRlbUluZGV4fVxuICAgICAgICBzZXRGaWx0ZXJzPXtzZXRGaWx0ZXJzfVxuICAgICAgICBzZXRGb250U2l6ZT17c2V0Rm9udFNpemV9XG4gICAgICAgIHNldEl0ZW1JbmRleD17c2V0SXRlbUluZGV4fVxuICAgICAgICBtYXJrZG93blZpZXc9e21hcmtkb3duVmlld31cbiAgICAgICAgc2V0TWFya2Rvd25WaWV3PXtzZXRNYXJrZG93blZpZXd9XG4gICAgICAgIGdldEN1c3RvbUNvbXBvbmVudD17Z2V0U2NyaXB0dXJlU2VsZWN0b3J9XG4gICAgICAgIGhpZGVNYXJrZG93blRvZ2dsZVxuICAgICAgICBvbk1lbnVDbG9zZT17b25NZW51Q2xvc2V9XG4gICAgICAgIG9uTWluaW1pemU9e29uTWluaW1pemUgPyAoKSA9PiBvbk1pbmltaXplKGlkKSA6IG51bGx9XG4gICAgICAgIGVkaXRhYmxlPXtlbmFibGVFZGl0IHx8IGVuYWJsZUFsaWdubWVudH1cbiAgICAgICAgc2F2ZWQ9e3N0YXJ0U2F2ZSB8fCAhaGF2ZVVuc2F2ZWRDaGFuZ2VzfVxuICAgICAgICBvblNhdmVFZGl0PXsoKSA9PiBzZXRTdGF0ZSh7IHNhdmVDbGlja2VkOiB0cnVlIH0pfVxuICAgICAgICBvblJlbmRlclRvb2xiYXI9e29uUmVuZGVyVG9vbGJhcn1cbiAgICAgID5cbiAgICAgICAgPGRpdiBpZD1cInNjcmlwdHVyZS1wYW5lLWxpc3RcIj5cbiAgICAgICAgICB7cmVuZGVyZWRTY3JpcHR1cmVQYW5lc31cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L0NhcmQ+XG4gICAgICA8VmVyc2VTZWxlY3RvclBvcHVwXG4gICAgICAgIHJlc291cmNlSWQ9e3Jlc291cmNlSWR9XG4gICAgICAgIG9wZW49e3Nob3dBbGlnbm1lbnRQb3B1cH1cbiAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U3RhdGUoeyBzaG93QWxpZ25tZW50UG9wdXA6IGZhbHNlIH0pfVxuICAgICAgICB2ZXJzZXNGb3JSZWY9e3ZlcnNlc0ZvclJlZn1cbiAgICAgICAgdmVyc2VzQWxpZ25tZW50U3RhdHVzPXt2ZXJzZXNBbGlnbm1lbnRTdGF0dXN9XG4gICAgICAgIG9uVmVyc2VTZWxlY3Q9eyh2ZXJzZSkgPT4gc2V0U3RhdGUoe1xuICAgICAgICAgIHZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQ6IHZlcnNlLFxuICAgICAgICAgIHNob3dBbGlnbm1lbnRQb3B1cDogZmFsc2VcbiAgICAgICAgfSl9XG4gICAgICAvPlxuICAgIDwvU2VsZWN0aW9uc0NvbnRleHRQcm92aWRlcj5cbiAgKVxufVxuXG5TY3JpcHR1cmVDYXJkLnByb3BUeXBlcyA9IHtcbiAgLyoqIGh0bWwgaWRlbnRpZmllciB0byB1c2UgZm9yIGNhcmQgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKiBtZXRob2QgdG8gZGV0ZXJtaW5lIGlmIE5UIG9yIE9UICovXG4gIGlzTlQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIC8qKiB0aXRsZSBmb3Igc2NyaXB0dXJlIGNhcmQgKi9cbiAgdGl0bGU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgLyoqIGdldCBsYW5ndWFnZSBkZXRhaWxzICovXG4gIGdldExhbmd1YWdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAvKiogc2NyaXB0dXJlIGNhcmQgbnVtYmVyICgwIHRvIDIgZm9yIGV4YW1wbGUpICovXG4gIGNhcmROdW06IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgLyoqIHJlc291cmNlIG9iamVjdCAqL1xuICByZXNvdXJjZTogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKiogcmVzb3VyY2UgbGFuZ3VhZ2UgdG8gdXNlICovXG4gICAgbGFuZ3VhZ2VJZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIC8qKiByZXBvIG93bmVyIHN1Y2ggYXMgdW5mb2xkaW5nV29yZCAqL1xuICAgIG93bmVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgLyoqIHJlc291cmNlSWQgdG8gdXNlIChlLmcuIHVnbnQpICovXG4gICAgcmVzb3VyY2VJZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIC8qKiByZXBvIG93bmVyIGZvciBvcmlnaW5hbCBsYW5ndWFnZXMgc3VjaCBhcyB1bmZvbGRpbmdXb3JkICovXG4gICAgb3JpZ2luYWxMYW5ndWFnZU93bmVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIH0pLFxuICByZWZlcmVuY2U6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqIHByb2plY3RJZCAoYm9va0lEKSB0byB1c2UgKi9cbiAgICBwcm9qZWN0SWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAvKiogY3VycmVudCBjaGFwdGVyIG51bWJlciAqL1xuICAgIGNoYXB0ZXI6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKS5pc1JlcXVpcmVkLFxuICAgIC8qKiBjdXJyZW50IHZlcnNlIG51bWJlciAqL1xuICAgIHZlcnNlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSkuaXNSZXF1aXJlZCxcbiAgfSksXG4gIC8qKiBzZXJ2ZXIgKGUuZy4gJ2h0dHBzOi8vZ2l0LmRvb3I0My5vcmcnKSAqL1xuICBzZXJ2ZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgLyoqIHJlcG8gYnJhbmNoIG9yIHRhZyBzdWNoIGFzIG1hc3RlciAqL1xuICBhcHBSZWY6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgLyoqIGlmIHRydWUgdGhlbiB3b3JkIGRhdGEgaG92ZXIgaXMgc2hvd24gKi9cbiAgZGlzYWJsZVdvcmRQb3BvdmVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqIENTUyBjbGFzc2VzICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKiByZXNvdXJjZUxpbmsgKi9cbiAgcmVzb3VyY2VMaW5rOiBQcm9wVHlwZXMuYW55LFxuICAvKiogdXNlIG1ldGhvZCBmb3IgdXNpbmcgbG9jYWwgc3RvcmFnZSBzcGVjaWZpYyBmb3IgdXNlciAqL1xuICB1c2VVc2VyTG9jYWxTdG9yYWdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAvKiogb3B0aW9uYWwgY2FsbGJhY2sgaWYgZXJyb3IgbG9hZGluZyByZXNvdXJjZSwgcGFyYW1ldGVyIHJldHVybmVkIGFyZTpcbiAgICogICAgKHtzdHJpbmd9IGVycm9yTWVzc2FnZSwge2Jvb2xlYW59IGlzQWNjZXNzRXJyb3IsIHtvYmplY3R9IHJlc291cmNlU3RhdHVzKVxuICAgKiAgICAgIC0gaXNBY2Nlc3NFcnJvciAtIGlzIHRydWUgaWYgdGhpcyB3YXMgYW4gZXJyb3IgdHJ5aW5nIHRvIGFjY2VzcyBmaWxlXG4gICAqICAgICAgLSByZXNvdXJjZVN0YXR1cyAtIGlzIG9iamVjdCBjb250YWluaW5nIGRldGFpbHMgYWJvdXQgcHJvYmxlbXMgZmV0Y2hpbmcgcmVzb3VyY2UgKi9cbiAgb25SZXNvdXJjZUVycm9yOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIG9wdGlvbmFsIGh0dHAgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgZm9yIGZldGNoaW5nIHJlc291cmNlcywgZGVmYXVsdCBpcyAwICh2ZXJ5IGxvbmcgd2FpdCkgKi9cbiAgaHR0cENvbmZpZzogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqIG9wdGlvbmFsIHVybCBmb3IgZ3JlZWsgcmVwbyAqL1xuICBncmVla1JlcG9Vcmw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKiBvcHRpb25hbCB1cmwgZm9yIGhlYnJldyByZXBvICovXG4gIGhlYnJld1JlcG9Vcmw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKiBmdW5jdGlvbiB0byBnZXQgbGF0ZXN0IGxleGljb24gZGF0YSAqL1xuICBnZXRMZXhpY29uRGF0YTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBmdW5jdGlvbiB0byBwcmUtbG9hZCBsZXhpY29uIGRhdGEgZm9yIHZlcnNlICovXG4gIGZldGNoR2xvc3Nlc0ZvclZlcnNlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIG9wdGlvbmFsIGZ1bmN0aW9uIGZvciBsb2NhbGl6YXRpb24gKi9cbiAgdHJhbnNsYXRlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIGZ1bmN0aW9uIHRvIG1pbmltaXplIHRoZSBjYXJkIChvcHRpb25hbCkgKi9cbiAgb25NaW5pbWl6ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiB1c2VyLW5hbWUgKi9cbiAgbG9nZ2VkSW5Vc2VyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogYXV0aGVudGljYXRpb24gaW5mbyAqL1xuICBhdXRoZW50aWNhdGlvbjogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqIGZ1bmN0aW9uIHRvIHNldCBzdGF0ZSBpbiBhcHAgdGhhdCB0aGVyZSBhcmUgdW5zYXZlZCBjaGFuZ2VzICovXG4gIHNldFNhdmVkQ2hhbmdlczogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBpbmRleCBmb3IgY3VycmVudCBib29rIChlLmcuICcwMScgZm9yICdnZW4nKSovXG4gIGJvb2tJbmRleDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqIGNhbGxiYWNrIHRvIHVwZGF0ZSB3b3JkIGFsaWduZXIgc3RhdGUgKi9cbiAgc2V0V29yZEFsaWduZXJTdGF0dXM6IFByb3BUeXBlcy5mdW5jLFxuICAvKipUaGlzIGlzIGN1cnJlbnRseSBzZWxlY3RlZCBxdW90ZSAqL1xuICBzZWxlY3RlZFF1b3RlOiBQcm9wVHlwZXMub2JqZWN0LFxufVxuIl19
|