@talrace/ngx-noder 0.0.14 → 0.0.16

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.
@@ -101,6 +101,7 @@ export class Editor {
101
101
  // Update cursor because tab characters can influence the cursor position.
102
102
  this.renderer.updateCursor();
103
103
  };
104
+ this.subscriptions.push(this.receiveTextStyleSubscription());
104
105
  this.customElementTagNames = [...this.externalElementTagNames, this.imageTagName, this.tableCellTagName, this.edgeElementTagName];
105
106
  this.history = new OperationHistory(editorService, regulatorService);
106
107
  this.selection = new Selection();
@@ -116,7 +117,7 @@ export class Editor {
116
117
  this.session.applyToolbarStyles();
117
118
  this.search = new Search();
118
119
  this.search.set({ wrap: true });
119
- this.subscriptions.push(this.searchOptionSubscription(), this.replaceSubscription(), this.setTextStylesSubscription(), this.setParagraphStylesSubscription(), this.changeElementStyleSubscription(), this.setNumberingTemplateTypeSubscription(), this.removeNumberingsSubscription(), this.setImageStyleSubscription(), this.createCustomComponentSubscription(), this.insertBreakSubscription(), this.insertImageSubscription(), this.insertLinkSubscription(), this.insertTextSubscription(), this.endMousePressSubscription(), this.disableSelectionSubscription(), this.changedTableSizeSubscription(), this.changedEdgeSizeSubscription(), this.imageLoadedSubscription(), this.changedEdgeSubscription(), this.insertTableRowsSubscription(), this.insertTableColumnsSubscription(), this.removeTableRowsSubscription(), this.removeTableColumnsSubscription(), this.removedImageSubscription(), this.resizeTableColumnsSubscription(), this.insertTableSubscription(), this.undoSubscription(), this.redoSubscription(), this.clipboardDataSubscription(), this.cutSelectedSubscription(), this.copySelectedSubscription(), this.pasteFromClipboardSubscription(), this.selectAllSubscription(), this.removeSelectedSubscription(), this.printSubscription(), this.updateEdgeSubscription(), this.blurCustomComponentSubscription());
120
+ this.subscriptions.push(this.changedEdgeSizeSubscription(), this.changedEdgeSubscription(), this.changedTableSizeSubscription(), this.changeElementStyleSubscription(), this.clipboardDataSubscription(), this.copySelectedSubscription(), this.createCustomComponentSubscription(), this.cutSelectedSubscription(), this.disableSelectionSubscription(), this.endMousePressSubscription(), this.imageLoadedSubscription(), this.insertBreakSubscription(), this.insertImageSubscription(), this.insertLinkSubscription(), this.insertTableColumnsSubscription(), this.insertTableRowsSubscription(), this.insertTableSubscription(), this.insertTextSubscription(), this.pasteFromClipboardSubscription(), this.printSubscription(), this.redoSubscription(), this.removeLeftSubscription(), this.removeNumberingsSubscription(), this.removeRightSubscription(), this.removeSelectedSubscription(), this.removeTableColumnsSubscription(), this.removeTableRowsSubscription(), this.replaceSubscription(), this.resizeTableColumnsSubscription(), this.searchOptionSubscription(), this.selectAllSubscription(), this.setImageStyleSubscription(), this.setNumberingTemplateTypeSubscription(), this.setParagraphStylesSubscription(), this.setTextStylesSubscription(), this.undoSubscription(), this.updateEdgeSubscription());
120
121
  }
121
122
  destroy() {
122
123
  this.subscriptions.forEach(s => s?.unsubscribe());
@@ -124,7 +125,7 @@ export class Editor {
124
125
  this.mouseHandler.destroy();
125
126
  this.inputHandler.destroy();
126
127
  this.documentHandler.destroy();
127
- this.blurCustomComponent();
128
+ this.selection.blur();
128
129
  }
129
130
  selectPageDown() {
130
131
  const config = this.mainRenderer.layerConfig;
@@ -342,7 +343,6 @@ export class Editor {
342
343
  this.applyTextStyles(new TextStyleModel({ underline: !this.session.editorService.styles.underline }));
343
344
  }
344
345
  applyTextStyles(textStyle) {
345
- this.blurCustomComponent();
346
346
  if (!this.selection.isEmpty) {
347
347
  const partIndexes = ContentHelper.getSelectedPartDocumentIndexes(this.session.displayData.paragraphs, this.selection.range);
348
348
  this.saveApplyTextStyleToHistory(partIndexes.startIndex, partIndexes.endIndex, textStyle);
@@ -398,7 +398,9 @@ export class Editor {
398
398
  this.renderer.updateCursor();
399
399
  }
400
400
  focus() {
401
- this.textInput.input.focus();
401
+ if (!this.textInput.isFocused && !this.selection.isFocused) {
402
+ this.textInput.input.focus();
403
+ }
402
404
  }
403
405
  openSearch() {
404
406
  this.editorService.openSearchDialog = true;
@@ -761,6 +763,7 @@ export class Editor {
761
763
  this.removeCustomElementsData();
762
764
  this.session.remove(this.selection.range);
763
765
  this.onSelectionChange();
766
+ this.focus();
764
767
  }
765
768
  removeCustomElementsData() {
766
769
  const startIndex = ContentHelper.paragraphToDocumentIndex(this.session.displayData.paragraphs, this.selection.range.start.row, this.selection.range.start.column);
@@ -829,7 +832,7 @@ export class Editor {
829
832
  if (this.textInput.isFocused) {
830
833
  return;
831
834
  }
832
- this.blurCustomComponent();
835
+ this.selection.blur();
833
836
  this.textInput.isFocused = true;
834
837
  this.renderer.showCursor();
835
838
  }
@@ -839,7 +842,7 @@ export class Editor {
839
842
  this.focusCustomComponent(customElement);
840
843
  }
841
844
  else {
842
- this.blurCustomComponent();
845
+ this.selection.blur();
843
846
  }
844
847
  }
845
848
  onLeftClick(event) {
@@ -848,15 +851,17 @@ export class Editor {
848
851
  this.focusCustomComponent(customElement);
849
852
  return;
850
853
  }
851
- this.blurCustomComponent();
852
- if (!this.textInput.isFocused) {
853
- this.textInput.input.focus();
854
- }
855
854
  const position = this.renderer.screenToTextCoordinatesUsingMidpoint(event.clientX, event.clientY);
856
855
  if (event.shiftKey) {
857
856
  this.selection.moveSelection(position);
858
857
  }
859
- else if (event.ctrlKey) {
858
+ else {
859
+ this.selection.placeCursor(position);
860
+ }
861
+ this.focus();
862
+ this.onSelectionChange();
863
+ event.preventDefault();
864
+ if (event.ctrlKey) {
860
865
  const link = this.getLinkModel(event);
861
866
  if (link) {
862
867
  window.open(link.link);
@@ -864,11 +869,6 @@ export class Editor {
864
869
  return;
865
870
  }
866
871
  }
867
- else {
868
- this.selection.placeCursor(position);
869
- }
870
- this.onSelectionChange();
871
- event.preventDefault();
872
872
  this.mouseHandler.startMousePress(this);
873
873
  }
874
874
  onDoubleClick(event) {
@@ -885,7 +885,6 @@ export class Editor {
885
885
  this.focusCustomComponent(customElement);
886
886
  return;
887
887
  }
888
- this.blurCustomComponent();
889
888
  event.preventDefault();
890
889
  const position = this.renderer.screenToTextCoordinatesUsingMidpoint(event.clientX, event.clientY);
891
890
  if (!isEdgeEdit && this.mainSession.customComponents.edges.isEdit) {
@@ -903,7 +902,6 @@ export class Editor {
903
902
  this.focusCustomComponent(customElement);
904
903
  return;
905
904
  }
906
- this.blurCustomComponent();
907
905
  event.preventDefault();
908
906
  const position = this.renderer.screenToTextCoordinatesUsingMidpoint(event.clientX, event.clientY);
909
907
  const start = new CursorParagraph(position.row, 0);
@@ -917,7 +915,6 @@ export class Editor {
917
915
  this.focusCustomComponent(customElement);
918
916
  return;
919
917
  }
920
- this.blurCustomComponent();
921
918
  event.preventDefault();
922
919
  this.selection.selectAll(this.session.model);
923
920
  this.onSelectionChange();
@@ -987,11 +984,12 @@ export class Editor {
987
984
  * Returns the string of text currently highlighted.
988
985
  */
989
986
  getSelectedText() {
990
- if (this.selection.isEmpty) {
987
+ const selectionRange = this.selection.selectedRange;
988
+ if (selectionRange.isEmpty) {
991
989
  return '';
992
990
  }
993
- const startIndex = ContentHelper.paragraphPositionToDocumentIndex(this.session.displayData.paragraphs, this.selection.range.start);
994
- const endIndex = ContentHelper.paragraphPositionToDocumentIndex(this.session.displayData.paragraphs, this.selection.range.end);
991
+ const startIndex = ContentHelper.paragraphPositionToDocumentIndex(this.session.displayData.paragraphs, selectionRange.start);
992
+ const endIndex = ContentHelper.paragraphPositionToDocumentIndex(this.session.displayData.paragraphs, selectionRange.end);
995
993
  let elementIndexes = [];
996
994
  ContentHelper.setIndexesElementsInInterval(this.session.model.breaks, elementIndexes, startIndex, endIndex);
997
995
  ContentHelper.setIndexesElementsInInterval(this.session.model.tables, elementIndexes, startIndex, endIndex);
@@ -999,7 +997,7 @@ export class Editor {
999
997
  ContentHelper.setIndexesElementsInInterval(this.session.model.elements, elementIndexes, startIndex, endIndex);
1000
998
  ContentHelper.setIndexesElementsInInterval(this.session.model.tabs, elementIndexes, startIndex, endIndex);
1001
999
  elementIndexes.sort((a, b) => b - a);
1002
- let textInterval = this.session.displayData.getTextRange(this.selection.range);
1000
+ let textInterval = this.session.displayData.getTextRange(selectionRange);
1003
1001
  elementIndexes.forEach(x => {
1004
1002
  textInterval = textInterval.slice(0, x) + textInterval.slice(x + 1);
1005
1003
  });
@@ -1013,7 +1011,7 @@ export class Editor {
1013
1011
  }
1014
1012
  onSelectionChange() {
1015
1013
  this.session.applyToolbarStyles();
1016
- this.renderer.updateSelection(this.selection.range);
1014
+ this.renderer.updateSelection(this.selection.selectedRange);
1017
1015
  if (this.selection.isEmpty) {
1018
1016
  this.renderer.updateCursor();
1019
1017
  }
@@ -1044,22 +1042,13 @@ export class Editor {
1044
1042
  const component = this.session.customComponents.images.find(x => x.instance.insertIndex === index) ??
1045
1043
  this.session.customComponents.tables.find(x => x.instance.insertIndex === index) ??
1046
1044
  this.session.customComponents.customElements.find(x => x.instance.insertIndex === index);
1047
- if (!component || component === this.focusedComponent) {
1045
+ if (!component) {
1048
1046
  return;
1049
1047
  }
1050
- this.focusedComponent?.instance.blur();
1051
- component.instance.focus();
1052
- this.focusedComponent = component;
1053
1048
  const position = this.session.displayData.indexToPosition(index, 0);
1054
- this.selection.placeCursor(position);
1049
+ this.selection.focus(component, position);
1055
1050
  this.onSelectionChange();
1056
1051
  }
1057
- blurCustomComponent() {
1058
- if (this.focusedComponent) {
1059
- this.focusedComponent.instance.blur();
1060
- this.focusedComponent = null;
1061
- }
1062
- }
1063
1052
  isEmptyNumberingParagraph(paragraphIndex) {
1064
1053
  const currentLine = this.session.displayData.getParagraphContent(paragraphIndex);
1065
1054
  return currentLine.length === 0 && this.session.model.paragraphs[paragraphIndex].paragraphStyle.numberingId !== null;
@@ -1118,13 +1107,6 @@ export class Editor {
1118
1107
  this.session.removeTableColumns(insertIndex, startIndex, endIndex);
1119
1108
  this.changedTableSize(insertIndex, sessionId);
1120
1109
  }
1121
- removeImage(insertIndex) {
1122
- const range = this.session.displayData.indexesToRange(insertIndex, insertIndex + 1);
1123
- this.saveRemoveToHistory(range);
1124
- this.session.remove(range);
1125
- this.renderer.updateCursor();
1126
- this.textInput.input.focus();
1127
- }
1128
1110
  resizeTableColumns(resizeTableColumns, sessionId) {
1129
1111
  this.regulatorService.setCustomSessionAsCurrent(sessionId);
1130
1112
  const beforeTable = ContentHelper.documentIndexToParagraphIndex(this.session.displayData.paragraphs, resizeTableColumns.insertIndex);
@@ -1142,6 +1124,14 @@ export class Editor {
1142
1124
  }
1143
1125
  this.scrollCursorIntoMainView();
1144
1126
  }
1127
+ provideTextStyle(component) {
1128
+ const session = this.regulatorService.getSession(component.sessionId);
1129
+ const format = session.model.formats.find(x => x.startIndex <= component.insertIndex && x.endIndex >= component.insertIndex);
1130
+ component.receiveStyle(format.textStyle);
1131
+ }
1132
+ receiveTextStyleSubscription() {
1133
+ return this.editorService.receiveTextStyle$.subscribe(x => this.provideTextStyle(x));
1134
+ }
1145
1135
  searchOptionSubscription() {
1146
1136
  return this.editorService.searchOptions$.subscribe(searchOptions => {
1147
1137
  this.find(searchOptions);
@@ -1254,10 +1244,8 @@ export class Editor {
1254
1244
  this.removeTableColumns(data.insertIndex, data.startIndex, data.endIndex, data.sessionId);
1255
1245
  });
1256
1246
  }
1257
- removedImageSubscription() {
1258
- return this.editorService.removeImage$.subscribe(data => {
1259
- this.removeImage(data.insertIndex);
1260
- });
1247
+ removeRightSubscription() {
1248
+ return this.editorService.removeRight$.subscribe(() => this.removeRight());
1261
1249
  }
1262
1250
  resizeTableColumnsSubscription() {
1263
1251
  return this.editorService.resizeTableColumns$.subscribe(data => {
@@ -1271,7 +1259,6 @@ export class Editor {
1271
1259
  }
1272
1260
  insertTextSubscription() {
1273
1261
  return this.editorService.insertText$.subscribe(x => {
1274
- this.blurCustomComponent();
1275
1262
  this.insert(x);
1276
1263
  this.focus();
1277
1264
  });
@@ -1290,8 +1277,8 @@ export class Editor {
1290
1277
  this.scrollCursorIntoMainView();
1291
1278
  });
1292
1279
  }
1293
- blurCustomComponentSubscription() {
1294
- return this.editorService.blurCustomComponent$.subscribe(() => this.blurCustomComponent());
1280
+ removeLeftSubscription() {
1281
+ return this.editorService.removeLeft$.subscribe(() => this.removeLeft());
1295
1282
  }
1296
1283
  printSubscription() {
1297
1284
  return this.editorService.print$.subscribe(() => this.onPrint());
@@ -1377,4 +1364,4 @@ export class Editor {
1377
1364
  });
1378
1365
  }
1379
1366
  }
1380
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvZWRpdG9yL2V4ZWN1dGlvbi9lZGl0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDMUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDdEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDOUYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFFcEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFHcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsWUFBWSxFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDeEcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUtsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRWhFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3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RyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUM3RixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUNoQixDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNsSCxDQUFDLENBQUMsQ0FBQzthQUNOO2lCQUFNO2dCQUNILE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsQ0FBQztnQkFDdkgsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDMUY7WUFDRCxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNoQixDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2xILENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDbGlwYm9hcmQgfSBmcm9tICdAYW5ndWxhci9jZGsvY2xpcGJvYXJkJztcbmltcG9ydCB7IENvbXBvbmVudFJlZiwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEFkZE51bWJlcmluZ01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9hZGQtbnVtYmVyaW5nLm1vZGVsJztcbmltcG9ydCB7IEFwcGx5RWxlbWVudFN0eWxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2FwcGx5LWVsZW1lbnQtc3R5bGUubW9kZWwnO1xuaW1wb3J0IHsgQXBwbHlJbWFnZVN0eWxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2FwcGx5LWltYWdlLXN0eWxlLm1vZGVsJztcbmltcG9ydCB7IEFwcGx5UGFyYWdyYXBoU3R5bGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvYXBwbHktcGFyYWdyYXBoLXN0eWxlLm1vZGVsJztcbmltcG9ydCB7IEFwcGx5VGV4dFN0eWxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2FwcGx5LXRleHQtc3R5bGUubW9kZWwnO1xuaW1wb3J0IHsgQmFzZU5vZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9zaGFyZWQvYWJzdHJhY3QvYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnJlYWtIZWxwZXIgfSBmcm9tICcuLi9nYWRnZXRzL3BhZ2UtYnJlYWsvYnJlYWsuaGVscGVyJztcbmltcG9ydCB7IEJyZWFrTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2JyZWFrLm1vZGVsJztcbmltcG9ydCB7IEJyZWFrVHlwZXMgfSBmcm9tICcuLi9nYWRnZXRzL3BhZ2UtYnJlYWsvYnJlYWstdHlwZXMuZW51bSc7XG5pbXBvcnQgeyBDb21tYW5kTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2NvbW1hbmQubW9kZWwnO1xuaW1wb3J0IHsgQ29tbWFuZHNTZXJ2aWNlIH0gZnJvbSAnLi4vb3BlcmF0aW9ucy9jb21tYW5kcy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbnRlbnRIZWxwZXIgfSBmcm9tICcuLi9wb3NpdGlvbmluZy9jb250ZW50LmhlbHBlcic7XG5pbXBvcnQgeyBDb250ZW50U3R5bGVIZWxwZXIgfSBmcm9tICcuLi9jb250ZW50L2hlbHBlcnMvY29udGVudC1zdHlsZS5oZWxwZXInO1xuaW1wb3J0IHsgQ3Vyc29yUGFyYWdyYXBoIH0gZnJvbSAnLi4vcG9zaXRpb25pbmcvY3Vyc29yLXBhcmFncmFwaCc7XG5pbXBvcnQgeyBDVVNUT01fRUxFTUVOVF9NQVJLRVIsIFRBQkxFX01BUktFUiB9IGZyb20gJy4uL2NvbXBvbmVudHMvc2hhcmVkL2N1c3RvbS1jb250ZW50LW1hcmtlcnMuY29uc3QnO1xuaW1wb3J0IHsgRGVsZXRlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2RlbGV0ZS5tb2RlbCc7XG5pbXBvcnQgeyBEb2N1bWVudEhhbmRsZXIgfSBmcm9tICcuLi9pbnRlcmFjdGlvbi9kb2N1bWVudC5oYW5kbGVyJztcbmltcG9ydCB7IERvY3hNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvZG9jeC5tb2RlbCc7XG5pbXBvcnQgeyBFZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJhY3Rpb24vZWRpdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWRpdFNlc3Npb24gfSBmcm9tICcuL2VkaXQuc2Vzc2lvbic7XG5pbXBvcnQgeyBFbGVtZW50RGF0YU1vZGVsIH0gZnJvbSAnLi4vY29tcG9uZW50cy9leHRlcm5hbC1lbGVtZW50L21vZGVscy9lbGVtZW50LWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgRWxlbWVudE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9lbGVtZW50Lm1vZGVsJztcbmltcG9ydCB7IEZvcm1hdEhlbHBlciB9IGZyb20gJy4uL2NvbnRlbnQvaGVscGVycy9mb3JtYXQuaGVscGVyJztcbmltcG9ydCB7IEltYWdlRGF0YU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9pbWFnZS1kYXRhLm1vZGVsJztcbmltcG9ydCB7IEltYWdlSGVscGVyIH0gZnJvbSAnLi9oZWxwZXJzL2ltYWdlLmhlbHBldCc7XG5pbXBvcnQgeyBJbWFnZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9pbWFnZS5tb2RlbCc7XG5pbXBvcnQgeyBJbmRleGVkRWxlbWVudEhlbHBlciB9IGZyb20gJy4uL2NvbnRlbnQvaGVscGVycy9pbmRleGVkLWVsZW1lbnQuaGVscGVyJztcbmltcG9ydCB7IElucHV0SGFuZGxlciB9IGZyb20gJy4uL2ludGVyYWN0aW9uL2lucHV0LmhhbmRsZXInO1xuaW1wb3J0IHsgSW5zZXJ0QnJlYWtNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LWJyZWFrLm1vZGVsJztcbmltcG9ydCB7IEluc2VydEVsZW1lbnRNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LWVsZW1lbnQubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0SW1hZ2VNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LWltYWdlLm1vZGVsJztcbmltcG9ydCB7IEluc2VydExpbmtNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LWxpbmsubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0UGFyYWdyYXBoTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2luc2VydC1wYXJhZ3JhcGgubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0U3R5bGVkVGV4dE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9pbnNlcnQtc3R5bGVkLXRleHQubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0VGFibGVDb2x1bW5zTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2luc2VydC10YWJsZS1jb2x1bW5zLm1vZGVsJztcbmltcG9ydCB7IEluc2VydFRhYmxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2luc2VydC10YWJsZS5tb2RlbCc7XG5pbXBvcnQgeyBJbnNlcnRUYWJsZVJvd3NNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LXRhYmxlLXJvd3MubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0VGFiTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2luc2VydC10YWIubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0VGV4dE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9pbnNlcnQtdGV4dC5tb2RlbCc7XG5pbXBvcnQgeyBMaW5rRGF0YU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9saW5rLWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgTGlua0hlbHBlciB9IGZyb20gJy4uL2NvbnRlbnQvaGVscGVycy9saW5rLmhlbHBlcic7XG5pbXBvcnQgeyBMaW5rTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2xpbmsubW9kZWwnO1xuaW1wb3J0IHsgTW91c2VIYW5kbGVyIH0gZnJvbSAnLi4vaW50ZXJhY3Rpb24vbW91c2UuaGFuZGxlcic7XG5pbXBvcnQgeyBORVdfTElORV9NQVJLVVAgfSBmcm9tICcuLi9jb250ZW50L2NvbnN0YW50cy9lZGl0b3IuY29uc3QnO1xuaW1wb3J0IHsgTnVtYmVyaW5nTGV2ZWxNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvbnVtYmVyaW5nLWxldmVsLm1vZGVsJztcbmltcG9ydCB7IE9wZXJhdGlvbiB9IGZyb20gJy4uL2dhZGdldHMvaGlzdG9yeS9vcGVyYXRpb24udHlwZSc7XG5pbXBvcnQgeyBPcGVyYXRpb25IaXN0b3J5IH0gZnJvbSAnLi4vZ2FkZ2V0cy9oaXN0b3J5L29wZXJhdGlvbi1oaXN0b3J5JztcbmltcG9ydCB7IFBhcmFncmFwaE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9wYXJhZ3JhcGgubW9kZWwnO1xuaW1wb3J0IHsgUGFyYWdyYXBoU3R5bGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcGFyYWdyYXBoLXN0eWxlLm1vZGVsJztcbmltcG9ydCB7IFBvc2l0aW9uSGVscGVyIH0gZnJvbSAnLi4vcG9zaXRpb25pbmcvcG9zaXRpb24uaGVscGVyJztcbmltcG9ydCB7IFByaW50SGVscGVyIH0gZnJvbSAnLi4vZGlzcGxheS9wcmludC9wcmludC5oZWxwZXInO1xuaW1wb3J0IHsgUmFuZ2UgfSBmcm9tICcuLi9wb3NpdGlvbmluZy9yYW5nZSc7XG5pbXBvcnQgeyBSZWd1bGF0b3JTZXJ2aWNlIH0gZnJvbSAnLi9yZWd1bGF0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBSZW1vdmVOdW1iZXJpbmdzTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3JlbW92ZS1udW1iZXJpbmdzLm1vZGVsJztcbmltcG9ydCB7IFJlbW92ZVRhYmxlQ29sdW1uc01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9yZW1vdmUtdGFibGUtY29sdW1ucy5tb2RlbCc7XG5pbXBvcnQgeyBSZW1vdmVUYWJsZVJvd3NNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcmVtb3ZlLXRhYmxlLXJvd3MubW9kZWwnO1xuaW1wb3J0IHsgUmVuZGVyZXIgfSBmcm9tICcuLi9kaXNwbGF5L3JlbmRlcmVyJztcbmltcG9ydCB7IFJlcGxhY2VNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcmVwbGFjZS5tb2RlbCc7XG5pbXBvcnQgeyBSZXNpemVUYWJsZUNvbHVtbnNNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcmVzaXplLXRhYmxlLWNvbHVtbnMubW9kZWwnO1xuaW1wb3J0IHsgUmVzdG9yZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9yZXN0b3JlLm1vZGVsJztcbmltcG9ydCB7IFJlc3RvcmVOdW1iZXJpbmdzTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3Jlc3RvcmUtbnVtYmVyaW5ncy5tb2RlbCc7XG5pbXBvcnQgeyBSZXN0b3JlUGFyYWdyYXBoU3R5bGVzTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3Jlc3RvcmUtcGFyYWdyYXBoLXN0eWxlcy5tb2RlbCc7XG5pbXBvcnQgeyBSZXN0b3JlVGFibGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcmVzdG9yZS10YWJsZS5tb2RlbCc7XG5pbXBvcnQgeyBSZXN0b3JlVGV4dFN0eWxlc01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9yZXN0b3JlLXRleHQtc3R5bGVzLm1vZGVsJztcbmltcG9ydCB7IFNhdmVDb21tYW5kc0hlbHBlciB9IGZyb20gJy4uL29wZXJhdGlvbnMvc2F2ZS1jb21tYW5kcy5oZWxwZXInO1xuaW1wb3J0IHsgU2NhbGluZ0hlbHBlciB9IGZyb20gJy4uL2NvbnRlbnQvaGVscGVycy9zY2FsaW5nLmhlbHBlcic7XG5pbXBvcnQgeyBTZWFyY2gsIFNlYXJjaE9wdGlvbnMgfSBmcm9tICcuLi9nYWRnZXRzL3NlYXJjaC9zZWFyY2gnO1xuaW1wb3J0IHsgU2VhcmNoSXRlcmF0aW9uIH0gZnJvbSAnLi4vZ2FkZ2V0cy9zZWFyY2gvc2VhcmNoLWl0ZXJhdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU2VsZWN0aW9uIH0gZnJvbSAnLi4vcG9zaXRpb25pbmcvc2VsZWN0aW9uJztcbmltcG9ydCB7IFRhYmxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3RhYmxlLm1vZGVsJztcbmltcG9ydCB7IFRhYk1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC90YWIubW9kZWwnO1xuaW1wb3J0IHsgVGFyZ2V0TW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3RhcmdldC5tb2RlbCc7XG5pbXBvcnQgeyBUZXh0SW5wdXQgfSBmcm9tICcuLi9pbnRlcmFjdGlvbi90ZXh0LWlucHV0JztcbmltcG9ydCB7IFRleHRTdHlsZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC90ZXh0LXN0eWxlLm1vZGVsJztcbmltcG9ydCB7IFZpcnR1YWxSZW5kZXJlciB9IGZyb20gJy4uL2Rpc3BsYXkvdmlydHVhbC5yZW5kZXJlcic7XG5cbmV4cG9ydCBjbGFzcyBFZGl0b3Ige1xuICAgIHJlYWRvbmx5IE1BWF9DT1VOVCA9IDk5OTtcblxuICAgIHJlYWRvbmx5IHBhcmVudFRhZ05hbWUgPSAnQVBQLU5PRC1FRElUT1InO1xuXG4gICAgcmVhZG9ubHkgdGFibGVDZWxsVGFnTmFtZSA9ICdBUFAtTk9ELVRBQkxFLUNFTEwnO1xuXG4gICAgcmVhZG9ubHkgZWRnZUVsZW1lbnRUYWdOYW1lID0gJ0FQUC1OT0QtRURHRSc7XG5cbiAgICByZWFkb25seSBpbWFnZVRhZ05hbWUgPSAnQVBQLU5PRC1JTUFHRSc7XG5cbiAgICByZWFkb25seSBjdXN0b21FbGVtZW50VGFnTmFtZXM6IHN0cmluZ1tdO1xuXG4gICAgcmVhZG9ubHkgaGlzdG9yeTogT3BlcmF0aW9uSGlzdG9yeTtcblxuICAgIGdldCBtYWluU2Vzc2lvbigpOiBFZGl0U2Vzc2lvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ3VsYXRvclNlcnZpY2UubWFpblNlc3Npb24uc2Vzc2lvbjtcbiAgICB9XG5cbiAgICBnZXQgbWFpblJlbmRlcmVyKCk6IFZpcnR1YWxSZW5kZXJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ3VsYXRvclNlcnZpY2UubWFpblNlc3Npb24ucmVuZGVyZXIgYXMgVmlydHVhbFJlbmRlcmVyO1xuICAgIH1cblxuICAgIGdldCBzZXNzaW9uKCk6IEVkaXRTZXNzaW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVndWxhdG9yU2VydmljZS5jdXJyZW50U2Vzc2lvbi5zZXNzaW9uO1xuICAgIH1cblxuICAgIGdldCByZW5kZXJlcigpOiBSZW5kZXJlciB8IFZpcnR1YWxSZW5kZXJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ3VsYXRvclNlcnZpY2UuY3VycmVudFNlc3Npb24ucmVuZGVyZXI7XG4gICAgfVxuXG4gICAgZ2V0IGlzVmlld09ubHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UuaXNWaWV3T25seTtcbiAgICB9XG5cbiAgICBnZXQgdGFyZ2V0cygpOiBUYXJnZXRNb2RlbFtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVndWxhdG9yU2VydmljZS5nZXRDdXJyZW50U2Vzc2lvblRhcmdldHMoKTtcbiAgICB9XG5cbiAgICBzZWxlY3Rpb246IFNlbGVjdGlvbjtcblxuICAgIG1vdXNlSGFuZGxlcjogTW91c2VIYW5kbGVyO1xuXG4gICAgaW5wdXRIYW5kbGVyOiBJbnB1dEhhbmRsZXI7XG5cbiAgICBkb2N1bWVudEhhbmRsZXI6IERvY3VtZW50SGFuZGxlcjtcblxuICAgIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgICBwcml2YXRlIHNlYXJjaDogU2VhcmNoO1xuXG4gICAgcHJpdmF0ZSB0ZXh0SW5wdXQ6IFRleHRJbnB1dDtcblxuICAgIHByaXZhdGUgZm9jdXNlZENvbXBvbmVudDogQ29tcG9uZW50UmVmPEJhc2VOb2RlckNvbXBvbmVudD47XG5cbiAgICBwcml2YXRlIGNsaXBib2FyZERhdGE6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIG1vZGVsOiBEb2N4TW9kZWwsXG4gICAgICAgIHByaXZhdGUgY29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgcHJpdmF0ZSBlZGl0b3JTZXJ2aWNlOiBFZGl0b3JTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlZ3VsYXRvclNlcnZpY2U6IFJlZ3VsYXRvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY29tbWFuZHNTZXJ2aWNlOiBDb21tYW5kc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY2xpcGJvYXJkOiBDbGlwYm9hcmQsXG4gICAgICAgIHByaXZhdGUgZXh0ZXJuYWxFbGVtZW50VGFnTmFtZXM6IHN0cmluZ1tdLFxuICAgICAgICBwcml2YXRlIGN1c3RvbVBhZ2VXaWR0aD86IG51bWJlclxuICAgICkge1xuICAgICAgICB0aGlzLmN1c3RvbUVsZW1lbnRUYWdOYW1lcyA9IFsuLi50aGlzLmV4dGVybmFsRWxlbWVudFRhZ05hbWVzLCB0aGlzLmltYWdlVGFnTmFtZSwgdGhpcy50YWJsZUNlbGxUYWdOYW1lLCB0aGlzLmVkZ2VFbGVtZW50VGFnTmFtZV07XG4gICAgICAgIHRoaXMuaGlzdG9yeSA9IG5ldyBPcGVyYXRpb25IaXN0b3J5KGVkaXRvclNlcnZpY2UsIHJlZ3VsYXRvclNlcnZpY2UpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb24oKTtcbiAgICAgICAgdGhpcy5yZWd1bGF0b3JTZXJ2aWNlLnNldFNlbGVjdGlvbih0aGlzLnNlbGVjdGlvbik7XG4gICAgICAgIHRoaXMuaW5pdE1haW5TZXNzaW9uKCk7XG4gICAgICAgIHRoaXMudGV4dElucHV0ID0gbmV3IFRleHRJbnB1dCh0aGlzLm1haW5SZW5kZXJlci5jb250YWluZXIpO1xuICAgICAgICB0aGlzLm1haW5SZW5kZXJlci50ZXh0YXJlYSA9IHRoaXMudGV4dElucHV0LmlucHV0O1xuICAgICAgICB0aGlzLm1vdXNlSGFuZGxlciA9IG5ldyBNb3VzZUhhbmRsZXIodGhpcy5tYWluUmVuZGVyZXIuY29udGFpbmVyLCB0aGlzKTtcbiAgICAgICAgdGhpcy5pbnB1dEhhbmRsZXIgPSBuZXcgSW5wdXRIYW5kbGVyKHRoaXMudGV4dElucHV0LmlucHV0LCB0aGlzKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudEhhbmRsZXIgPSBuZXcgRG9jdW1lbnRIYW5kbGVyKHRoaXMpO1xuICAgICAgICB0aGlzLmluaXRSZXNpemVMaXN0ZW5lcigpO1xuICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5hcHBseVRvb2xiYXJTdHlsZXMoKTtcblxuICAgICAgICB0aGlzLnNlYXJjaCA9IG5ldyBTZWFyY2goKTtcbiAgICAgICAgdGhpcy5zZWFyY2guc2V0KHsgd3JhcDogdHJ1ZSB9KTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICB0aGlzLnNlYXJjaE9wdGlvblN1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5yZXBsYWNlU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLnNldFRleHRTdHlsZXNTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuc2V0UGFyYWdyYXBoU3R5bGVzU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLmNoYW5nZUVsZW1lbnRTdHlsZVN1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5zZXROdW1iZXJpbmdUZW1wbGF0ZVR5cGVTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlTnVtYmVyaW5nc1N1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5zZXRJbWFnZVN0eWxlU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUN1c3RvbUNvbXBvbmVudFN1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5pbnNlcnRCcmVha1N1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5pbnNlcnRJbWFnZVN1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5pbnNlcnRMaW5rU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLmluc2VydFRleHRTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuZW5kTW91c2VQcmVzc1N1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlU2VsZWN0aW9uU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRUYWJsZVNpemVTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZEVkZ2VTaXplU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLmltYWdlTG9hZGVkU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRFZGdlU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLmluc2VydFRhYmxlUm93c1N1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5pbnNlcnRUYWJsZUNvbHVtbnNTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVGFibGVSb3dzU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLnJlbW92ZVRhYmxlQ29sdW1uc1N1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5yZW1vdmVkSW1hZ2VTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMucmVzaXplVGFibGVDb2x1bW5zU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLmluc2VydFRhYmxlU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLnVuZG9TdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMucmVkb1N1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5jbGlwYm9hcmREYXRhU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLmN1dFNlbGVjdGVkU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLmNvcHlTZWxlY3RlZFN1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5wYXN0ZUZyb21DbGlwYm9hcmRTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0QWxsU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLnJlbW92ZVNlbGVjdGVkU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLnByaW50U3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUVkZ2VTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuYmx1ckN1c3RvbUNvbXBvbmVudFN1YnNjcmlwdGlvbigpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2gocyA9PiBzPy51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgdGhpcy5kZXN0cm95UmVzaXplTGlzdGVuZXIoKTtcbiAgICAgICAgdGhpcy5tb3VzZUhhbmRsZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmlucHV0SGFuZGxlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRIYW5kbGVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5ibHVyQ3VzdG9tQ29tcG9uZW50KCk7XG4gICAgfVxuXG4gICAgc2VsZWN0UGFnZURvd24oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMubWFpblJlbmRlcmVyLmxheWVyQ29uZmlnO1xuICAgICAgICBjb25zdCBsaW5lID0gY29uZmlnLnZpc2libGVSYW5nZS5lbmRTY3JlZW5MaW5lO1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IFBvc2l0aW9uSGVscGVyLnNjcmVlblRvRG9jdW1lbnQodGhpcy5tYWluU2Vzc2lvbiwgbGluZSwgMCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVTZWxlY3Rpb24ocG9zaXRpb24pO1xuICAgICAgICB0aGlzLm1haW5SZW5kZXJlci5zY3JvbGxCeShjb25maWcuaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5zY3JvbGxDdXJzb3JJbnRvTWFpblZpZXcoMC41KTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIHNlbGVjdFBhZ2VVcCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5tYWluUmVuZGVyZXIubGF5ZXJDb25maWc7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBjb25maWcudmlzaWJsZVJhbmdlLnN0YXJ0U2NyZWVuTGluZTtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSBQb3NpdGlvbkhlbHBlci5zY3JlZW5Ub0RvY3VtZW50KHRoaXMubWFpblNlc3Npb24sIGxpbmUsIDApO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlU2VsZWN0aW9uKHBvc2l0aW9uKTtcbiAgICAgICAgdGhpcy5tYWluUmVuZGVyZXIuc2Nyb2xsQnkoLWNvbmZpZy5oZWlnaHQpO1xuICAgICAgICB0aGlzLnNjcm9sbEN1cnNvckludG9NYWluVmlldygwLjUpO1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgZ290b1BhZ2VEb3duKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLm1haW5SZW5kZXJlci5sYXllckNvbmZpZztcbiAgICAgICAgY29uc3QgbGluZSA9IGNvbmZpZy52aXNpYmxlUmFuZ2UuZW5kU2NyZWVuTGluZTtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSBQb3NpdGlvbkhlbHBlci5zY3JlZW5Ub0RvY3VtZW50KHRoaXMubWFpblNlc3Npb24sIGxpbmUsIDApO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZUN1cnNvcihwb3NpdGlvbik7XG4gICAgICAgIHRoaXMubWFpblJlbmRlcmVyLnNjcm9sbEJ5KGNvbmZpZy5oZWlnaHQpO1xuICAgICAgICB0aGlzLnNjcm9sbEN1cnNvckludG9NYWluVmlldygwLjUpO1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgZ290b1BhZ2VVcCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5tYWluUmVuZGVyZXIubGF5ZXJDb25maWc7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBjb25maWcudmlzaWJsZVJhbmdlLnN0YXJ0U2NyZWVuTGluZTtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSBQb3NpdGlvbkhlbHBlci5zY3JlZW5Ub0RvY3VtZW50KHRoaXMubWFpblNlc3Npb24sIGxpbmUsIDApO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZUN1cnNvcihwb3NpdGlvbik7XG4gICAgICAgIHRoaXMubWFpblJlbmRlcmVyLnNjcm9sbEJ5KC1jb25maWcuaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5zY3JvbGxDdXJzb3JJbnRvTWFpblZpZXcoMC41KTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIGN1dCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW1vdmVTZWxlY3RlZCgpO1xuICAgIH1cblxuICAgIGluc2VydCh0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIGNvbnN0IHRleHRTdHlsZSA9IENvbnRlbnRTdHlsZUhlbHBlci5jb21iaW5lVGV4dFN0eWxlcyhudWxsLCB0aGlzLmVkaXRvclNlcnZpY2Uuc3R5bGVzIGFzIFRleHRTdHlsZU1vZGVsKTtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0VGV4dCh0ZXh0LCB0ZXh0U3R5bGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaW5zZXJ0SW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFRvRG9jdW1lbnRJbmRleChcbiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocyxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydC5yb3csXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQuY29sdW1uXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgaW5zZXJ0VGV4dCA9IG5ldyBJbnNlcnRUZXh0TW9kZWwoeyBpbnNlcnRJbmRleCwgdGV4dCB9KTtcbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUJ5KG5ldyBSZXBsYWNlTW9kZWwoeyBpbnNlcnRUZXh0IH0pKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluc2VydFRleHQodGV4dDogc3RyaW5nLCB0ZXh0U3R5bGU6IFRleHRTdHlsZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5zZWxlY3Rpb24uY3Vyc29yO1xuICAgICAgICBpZiAodGV4dFN0eWxlKSB7XG4gICAgICAgICAgICB0aGlzLnNhdmVJbnNlcnRTdHlsZWRUZXh0VG9IaXN0b3J5KHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uLCB0ZXh0LCB0ZXh0U3R5bGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zYXZlSW5zZXJ0VGV4dFRvSGlzdG9yeShwb3NpdGlvbi5yb3csIHBvc2l0aW9uLmNvbHVtbiwgdGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydFRleHQocG9zaXRpb24sIHRleHQsIHRleHRTdHlsZSk7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICByZW1vdmVMZWZ0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNFbXB0eSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0TGVmdCh0aGlzLnNlc3Npb24pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWQoKTtcbiAgICB9XG5cbiAgICByZW1vdmVSaWdodCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdFJpZ2h0KHRoaXMuc2Vzc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVTZWxlY3RlZCgpO1xuICAgIH1cblxuICAgIGluc2VydEJyZWFrKGJyZWFrVHlwZTogQnJlYWtUeXBlcyk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbnNlcnRJbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoVG9Eb2N1bWVudEluZGV4KFxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydC5yb3csXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydC5jb2x1bW5cbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaW5zZXJ0QnJlYWsgPSBuZXcgSW5zZXJ0QnJlYWtNb2RlbCh7IGluc2VydEluZGV4LCBicmVha1R5cGUgfSk7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSkge1xuICAgICAgICAgICAgdGhpcy5yZXBsYWNlQnkobmV3IFJlcGxhY2VNb2RlbCh7IGluc2VydEJyZWFrIH0pKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChicmVha1R5cGUgPT09IEJyZWFrVHlwZXMuQ29sdW1uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNhdmVJbnNlcnRCcmVha1RvSGlzdG9yeShpbnNlcnRCcmVhayk7XG4gICAgICAgIGNvbnN0IGVuZFBvaW50ID0gdGhpcy5zZXNzaW9uLmluc2VydEJyZWFrKHRoaXMuc2VsZWN0aW9uLmN1cnNvciwgYnJlYWtUeXBlKTtcbiAgICAgICAgbGV0IGxhc3RSb3cgPSB0aGlzLnNlbGVjdGlvbi5jdXJzb3Iucm93ID09PSBlbmRQb2ludC5yb3cgPyBlbmRQb2ludC5yb3cgOiBJbmZpbml0eTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVMaW5lcyh0aGlzLnNlbGVjdGlvbi5jdXJzb3Iucm93LCBsYXN0Um93KTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVDdXJzb3IoKTtcbiAgICAgICAgdGhpcy5yZXJlbmRlck1hcmtlcigpO1xuICAgICAgICB0aGlzLnNjcm9sbEN1cnNvckludG9NYWluVmlldygwLjEpO1xuICAgIH1cblxuICAgIGluc2VydFRhYigpIHtcbiAgICAgICAgY29uc3QgaW5zZXJ0SW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFRvRG9jdW1lbnRJbmRleChcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLFxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQucm93LFxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQuY29sdW1uXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGluc2VydFRhYiA9IG5ldyBJbnNlcnRUYWJNb2RlbCh7IGluc2VydEluZGV4IH0pO1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUJ5KG5ldyBSZXBsYWNlTW9kZWwoeyBpbnNlcnRUYWIgfSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zYXZlSW5zZXJ0VGFiVG9IaXN0b3J5KGluc2VydFRhYik7XG4gICAgICAgIGNvbnN0IGVuZFBvaW50ID0gdGhpcy5zZXNzaW9uLmluc2VydFRhYih0aGlzLnNlbGVjdGlvbi5jdXJzb3IpO1xuICAgICAgICB0aGlzLm9uRG9jdW1lbnRDaGFuZ2UobmV3IFJhbmdlKHRoaXMuc2VsZWN0aW9uLmN1cnNvciwgZW5kUG9pbnQpKTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIGluc2VydEltYWdlKGltYWdlRGF0YTogSW1hZ2VEYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYWRqdXN0ZWRJbWFnZSA9IEltYWdlSGVscGVyLmdldEltYWdlV2l0aEFsbG93ZWRTaXplKGltYWdlRGF0YSwgdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLmNvbnRlbnRXaWR0aCk7XG4gICAgICAgIGNvbnN0IGluc2VydEluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhUb0RvY3VtZW50SW5kZXgoXG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocyxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnJhbmdlLnN0YXJ0LnJvdyxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnJhbmdlLnN0YXJ0LmNvbHVtblxuICAgICAgICApO1xuICAgICAgICBjb25zdCBpbnNlcnRJbWFnZSA9IG5ldyBJbnNlcnRJbWFnZU1vZGVsKHsgaW5zZXJ0SW5kZXgsIGltYWdlRGF0YTogYWRqdXN0ZWRJbWFnZSB9KTtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VCeShuZXcgUmVwbGFjZU1vZGVsKHsgaW5zZXJ0SW1hZ2UgfSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zYXZlSW5zZXJ0SW1hZ2VUb0hpc3RvcnkoaW5zZXJ0SW1hZ2UpO1xuICAgICAgICBjb25zdCBlbmRQb2ludCA9IHRoaXMuc2Vzc2lvbi5pbnNlcnRJbWFnZSh0aGlzLnNlbGVjdGlvbi5jdXJzb3IsIGFkanVzdGVkSW1hZ2UpO1xuICAgICAgICBsZXQgbGFzdFJvdyA9IHRoaXMuc2VsZWN0aW9uLmN1cnNvci5yb3cgPT09IGVuZFBvaW50LnJvdyA/IGVuZFBvaW50LnJvdyA6IEluZmluaXR5O1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUxpbmVzKHRoaXMuc2VsZWN0aW9uLmN1cnNvci5yb3csIGxhc3RSb3cpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgICAgICB0aGlzLnJlcmVuZGVyTWFya2VyKCk7XG4gICAgfVxuXG4gICAgaW5zZXJ0TGluayhsaW5rRGF0YU1vZGVsOiBMaW5rRGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluc2VydEluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhUb0RvY3VtZW50SW5kZXgoXG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocyxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnJhbmdlLnN0YXJ0LnJvdyxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnJhbmdlLnN0YXJ0LmNvbHVtblxuICAgICAgICApO1xuICAgICAgICBjb25zdCBpbnNlcnRMaW5rID0gbmV3IEluc2VydExpbmtNb2RlbCh7IGluc2VydEluZGV4LCBlbmRJbmRleDogaW5zZXJ0SW5kZXggKyBsaW5rRGF0YU1vZGVsLnRleHQubGVuZ3RoLCBsaW5rRGF0YU1vZGVsIH0pO1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUJ5KG5ldyBSZXBsYWNlTW9kZWwoeyBpbnNlcnRMaW5rIH0pKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2F2ZUluc2VydExpbmtUb0hpc3RvcnkoaW5zZXJ0TGluayk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5pbnNlcnRMaW5rKHRoaXMuc2VsZWN0aW9uLmN1cnNvciwgbGlua0RhdGFNb2RlbCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCk7XG4gICAgICAgIHRoaXMucmVyZW5kZXJNYXJrZXIoKTtcbiAgICB9XG5cbiAgICBpbnNlcnRUYWJsZSh0YWJsZURhdGE6IHsgcm93czogbnVtYmVyOyBjb2x1bW5zOiBudW1iZXIgfSk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbnNlcnRJbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoVG9Eb2N1bWVudEluZGV4KFxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydC5yb3csXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydC5jb2x1bW5cbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBpbnNlcnRUYWJsZSA9IG5ldyBJbnNlcnRUYWJsZU1vZGVsKHtcbiAgICAgICAgICAgIGluc2VydEluZGV4LFxuICAgICAgICAgICAgaW5zZXJ0VGFibGVJbmRleDogaW5zZXJ0SW5kZXgsXG4gICAgICAgICAgICByb3dzQ291bnQ6IHRhYmxlRGF0YS5yb3dzLFxuICAgICAgICAgICAgY29sdW1uc0NvdW50OiB0YWJsZURhdGEuY29sdW1ucyxcbiAgICAgICAgICAgIGNvbnRlbnQ6IFRBQkxFX01BUktFUlxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBoc1t0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydC5yb3ddLnBhcmFncmFwaFNldHRpbmdzLm51bWJlcmluZ0RhdGEubnVtYmVyaW5nSWQgfHxcbiAgICAgICAgICAgICF0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocy5zb21lKHggPT4geC5zdGFydEluZGV4ID09PSBpbnNlcnRJbmRleCkgfHxcbiAgICAgICAgICAgICF0aGlzLnNlc3Npb24uZGlzcGxheURhdGEuaXNOZXdMaW5lU3ltYm9sKGluc2VydEluZGV4KVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0VGFibGVJbk5ld1BhcmFncmFwaChpbnNlcnRUYWJsZSwgaW5zZXJ0SW5kZXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRUYWJsZUluQ3VycmVudFBhcmFncmFwaChpbnNlcnRUYWJsZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbnNlcnRUYWJsZUluTmV3UGFyYWdyYXBoKGluc2VydFRhYmxlOiBJbnNlcnRUYWJsZU1vZGVsLCBpbnNlcnRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluc2VydFBhcmFncmFwaCA9IG5ldyBJbnNlcnRQYXJhZ3JhcGhNb2RlbCh7IGluc2VydEluZGV4LCBpbnNlcnRUYWJsZSB9KTtcblxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUJ5KG5ldyBSZXBsYWNlTW9kZWwoeyBpbnNlcnRQYXJhZ3JhcGggfSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zYXZlSW5zZXJ0UGFyYWdyYXBoVG9IaXN0b3J5KGluc2VydFRhYmxlLmNvbnRlbnQsIGluc2VydFBhcmFncmFwaCk7XG4gICAgICAgIGNvbnN0IGVuZFBvaW50ID0gdGhpcy5zZXNzaW9uLmluc2VydFBhcmFncmFwaCh0aGlzLnNlbGVjdGlvbi5jdXJzb3IsIGluc2VydFBhcmFncmFwaCk7XG4gICAgICAgIGxldCBsYXN0Um93ID0gdGhpcy5zZWxlY3Rpb24uY3Vyc29yLnJvdyA9PT0gZW5kUG9pbnQucm93ID8gZW5kUG9pbnQucm93IDogSW5maW5pdHk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlTGluZXModGhpcy5zZWxlY3Rpb24uY3Vyc29yLnJvdywgbGFzdFJvdyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCk7XG4gICAgICAgIHRoaXMucmVyZW5kZXJNYXJrZXIoKTtcbiAgICB9XG5cbiAgICBpbnNlcnRUYWJsZUluQ3VycmVudFBhcmFncmFwaChpbnNlcnRUYWJsZTogSW5zZXJ0VGFibGVNb2RlbCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUJ5KG5ldyBSZXBsYWNlTW9kZWwoeyBpbnNlcnRUYWJsZSB9KSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNhdmVJbnNlcnRUYWJsZVRvSGlzdG9yeShpbnNlcnRUYWJsZSk7XG4gICAgICAgIGNvbnN0IGVuZFBvaW50ID0gdGhpcy5zZXNzaW9uLmluc2VydFRhYmxlKHRoaXMuc2VsZWN0aW9uLmN1cnNvciwgaW5zZXJ0VGFibGUpO1xuICAgICAgICBsZXQgbGFzdFJvdyA9IHRoaXMuc2VsZWN0aW9uLmN1cnNvci5yb3cgPT09IGVuZFBvaW50LnJvdyA/IGVuZFBvaW50LnJvdyA6IEluZmluaXR5O1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUxpbmVzKHRoaXMuc2VsZWN0aW9uLmN1cnNvci5yb3csIGxhc3RSb3cpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgICAgICB0aGlzLnJlcmVuZGVyTWFya2VyKCk7XG4gICAgfVxuXG4gICAgcmVwbGFjZUJ5KG1vZGVsOiBSZXBsYWNlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFydEluZGV4ZXMgPSBDb250ZW50SGVscGVyLmdldFNlbGVjdGVkUGFydERvY3VtZW50SW5kZXhlcyh0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocywgdGhpcy5zZWxlY3Rpb24ucmFuZ2UpO1xuICAgICAgICBtb2RlbC5kZWxldGUgPSBuZXcgRGVsZXRlTW9kZWwoeyBzdGFydEluZGV4OiBwYXJ0SW5kZXhlcy5zdGFydEluZGV4LCBjb3VudDogcGFydEluZGV4ZXMuZW5kSW5kZXggLSBwYXJ0SW5kZXhlcy5zdGFydEluZGV4ICsgMSB9KTtcbiAgICAgICAgdGhpcy5zYXZlUmVwbGFjZVRvSGlzdG9yeSh0aGlzLnNlbGVjdGlvbi5yYW5nZSwgbW9kZWwpO1xuICAgICAgICB0aGlzLnJlbW92ZUN1c3RvbUVsZW1lbnRzRGF0YSgpO1xuICAgICAgICBjb25zdCBlbmRQb3NpdGlvbiA9IHRoaXMuc2Vzc2lvbi5yZXBsYWNlKG1vZGVsKTtcbiAgICAgICAgdGhpcy5vbkRvY3VtZW50Q2hhbmdlKG5ldyBSYW5nZSh0aGlzLnNlbGVjdGlvbi5jdXJzb3IsIGVuZFBvc2l0aW9uKSk7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICByZW1vdmVUb0xpbmVTdGFydCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdExpbmVTdGFydCh0aGlzLnNlc3Npb24pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWQoKTtcbiAgICB9XG5cbiAgICByZW1vdmVUb0xpbmVFbmQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RMaW5lRW5kKHRoaXMuc2Vzc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVTZWxlY3RlZCgpO1xuICAgIH1cblxuICAgIHJlbW92ZVdvcmRMZWZ0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNFbXB0eSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0V29yZExlZnQodGhpcy5zZXNzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZVNlbGVjdGVkKCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlV29yZFJpZ2h0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNFbXB0eSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0V29yZFJpZ2h0KHRoaXMuc2Vzc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVTZWxlY3RlZCgpO1xuICAgIH1cblxuICAgIGFwcGx5VGV4dFN0eWxlQm9sZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hcHBseVRleHRTdHlsZXMobmV3IFRleHRTdHlsZU1vZGVsKHsgYm9sZDogIXRoaXMuc2Vzc2lvbi5lZGl0b3JTZXJ2aWNlLnN0eWxlcy5ib2xkIH0pKTtcbiAgICB9XG5cbiAgICBhcHBseVRleHRTdHlsZUl0YWxpYygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hcHBseVRleHRTdHlsZXMobmV3IFRleHRTdHlsZU1vZGVsKHsgaXRhbGljOiAhdGhpcy5zZXNzaW9uLmVkaXRvclNlcnZpY2Uuc3R5bGVzLml0YWxpYyB9KSk7XG4gICAgfVxuXG4gICAgYXBwbHlUZXh0U3R5bGVVbmRlcmxpbmUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYXBwbHlUZXh0U3R5bGVzKG5ldyBUZXh0U3R5bGVNb2RlbCh7IHVuZGVybGluZTogIXRoaXMuc2Vzc2lvbi5lZGl0b3JTZXJ2aWNlLnN0eWxlcy51bmRlcmxpbmUgfSkpO1xuICAgIH1cblxuICAgIGFwcGx5VGV4dFN0eWxlcyh0ZXh0U3R5bGU6IFRleHRTdHlsZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYmx1ckN1c3RvbUNvbXBvbmVudCgpO1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRJbmRleGVzID0gQ29udGVudEhlbHBlci5nZXRTZWxlY3RlZFBhcnREb2N1bWVudEluZGV4ZXModGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIHRoaXMuc2VsZWN0aW9uLnJhbmdlKTtcbiAgICAgICAgICAgIHRoaXMuc2F2ZUFwcGx5VGV4dFN0eWxlVG9IaXN0b3J5KHBhcnRJbmRleGVzLnN0YXJ0SW5kZXgsIHBhcnRJbmRleGVzLmVuZEluZGV4LCB0ZXh0U3R5bGUpO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmFwcGx5VGV4dFN0eWxlKHBhcnRJbmRleGVzLnN0YXJ0SW5kZXgsIHBhcnRJbmRleGVzLmVuZEluZGV4LCB0ZXh0U3R5bGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRUZXh0U3R5bGUodGV4dFN0eWxlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldFRleHRTdHlsZSh0ZXh0U3R5bGU6IFRleHRTdHlsZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhQb3NpdGlvblRvRG9jdW1lbnRJbmRleCh0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocywgdGhpcy5zZWxlY3Rpb24uY3Vyc29yKTtcbiAgICAgICAgY29uc3QgaXNQYXJhZ3JhcGggPSB0aGlzLnNlc3Npb24ubW9kZWwuY29udGVudExlbmd0aCA9PT0gaW5kZXggfHwgdGhpcy5zZXNzaW9uLm1vZGVsLmNvbnRlbnRbaW5kZXhdID09PSBORVdfTElORV9NQVJLVVA7XG4gICAgICAgIGlmIChpc1BhcmFncmFwaCkge1xuICAgICAgICAgICAgdGhpcy5zYXZlQXBwbHlUZXh0U3R5bGVUb0hpc3RvcnkoaW5kZXgsIGluZGV4LCB0ZXh0U3R5bGUpO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmFwcGx5VGV4dFN0eWxlKGluZGV4LCBpbmRleCwgdGV4dFN0eWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRUZXh0U3R5bGUodGV4dFN0eWxlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgIH1cblxuICAgIGFwcGx5UGFyYWdyYXBoU3R5bGVzKHBhcmFncmFwaFN0eWxlOiBQYXJhZ3JhcGhTdHlsZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5zZWxlY3Rpb24ucmFuZ2U7XG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB0aGlzLnNlc3Npb24ubW9kZWwucGFyYWdyYXBoc1tyYW5nZS5zdGFydC5yb3ddLmluc2VydEluZGV4O1xuICAgICAgICBjb25zdCBlbmRJbmRleCA9IHRoaXMuc2Vzc2lvbi5tb2RlbC5wYXJhZ3JhcGhzW3JhbmdlLmVuZC5yb3ddLmluc2VydEluZGV4O1xuICAgICAgICB0aGlzLnNhdmVBcHBseVBhcmFncmFwaFN0eWxlVG9IaXN0b3J5KHN0YXJ0SW5kZXgsIGVuZEluZGV4LCBwYXJhZ3JhcGhTdHlsZSk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5hcHBseVBhcmFncmFwaFN0eWxlKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCBwYXJhZ3JhcGhTdHlsZSk7XG4gICAgfVxuXG4gICAgYXBwbHlFbGVtZW50U3R5bGUoY3VycmVudDogRWxlbWVudE1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2F2ZUFwcGx5RWxlbWVudFN0eWxlVG9IaXN0b3J5KGN1cnJlbnQpO1xuICAgICAgICB0aGlzLnNlc3Npb24uYXBwbHlFbGVtZW50U3R5bGUobmV3IEFwcGx5RWxlbWVudFN0eWxlTW9kZWwoY3VycmVudCkpO1xuICAgIH1cblxuICAgIHNldE51bWJlcmluZ1RlbXBsYXRlKHRlbXBsYXRlTGV2ZWxzOiBOdW1iZXJpbmdMZXZlbE1vZGVsW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnNlbGVjdGlvbi5yYW5nZTtcbiAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IHRoaXMuc2Vzc2lvbi5tb2RlbC5wYXJhZ3JhcGhzW3JhbmdlLnN0YXJ0LnJvd10uaW5zZXJ0SW5kZXg7XG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gdGhpcy5zZXNzaW9uLm1vZGVsLnBhcmFncmFwaHNbcmFuZ2UuZW5kLnJvd10uaW5zZXJ0SW5kZXg7XG4gICAgICAgIHRoaXMuc2F2ZUFkZE51bWJlcmluZ1RvSGlzdG9yeSh0ZW1wbGF0ZUxldmVscywgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICB0aGlzLnNlc3Npb24uYWRkTnVtYmVyaW5nKHRlbXBsYXRlTGV2ZWxzLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlTnVtYmVyaW5nc0Zyb21QYXJhZ3JhcGhzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMuc2VsZWN0aW9uLnJhbmdlO1xuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gdGhpcy5zZXNzaW9uLm1vZGVsLnBhcmFncmFwaHNbcmFuZ2Uuc3RhcnQucm93XS5pbnNlcnRJbmRleDtcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSB0aGlzLnNlc3Npb24ubW9kZWwucGFyYWdyYXBoc1tyYW5nZS5lbmQucm93XS5pbnNlcnRJbmRleDtcbiAgICAgICAgdGhpcy5zYXZlUmVtb3ZlTnVtYmVyaW5nVG9IaXN0b3J5KHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZU51bWJlcmluZ3Moc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgIH1cblxuICAgIGFwcGx5SW1hZ2VTdHlsZXMoaW1hZ2U6IEltYWdlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zYXZlQXBwbHlJbWFnZVN0eWxlVG9IaXN0b3J5KGltYWdlKTtcbiAgICAgICAgY29uc3QgaW1hZ2VTdHlsZSA9IG5ldyBBcHBseUltYWdlU3R5bGVNb2RlbCh7IGluc2VydEluZGV4OiBpbWFnZS5pbnNlcnRJbmRleCwgaGVpZ2h0OiBpbWFnZS5oZWlnaHQsIHdpZHRoOiBpbWFnZS53aWR0aCB9KTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLmFwcGx5SW1hZ2VTdHlsZShpbWFnZVN0eWxlKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVDdXJzb3IoKTtcbiAgICB9XG5cbiAgICBmb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50ZXh0SW5wdXQuaW5wdXQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICBvcGVuU2VhcmNoKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2Uub3BlblNlYXJjaERpYWxvZyA9IHRydWU7XG4gICAgfVxuXG4gICAgZmluZChvcHRpb25zOiBTZWFyY2hPcHRpb25zKTogUmFuZ2Uge1xuICAgICAgICBsZXQgcmFuZ2UgPSB0aGlzLnNlbGVjdGlvbi5yYW5nZTtcbiAgICAgICAgaWYgKG9wdGlvbnMudGVybSA9PSBudWxsKSB7XG4gICAgICAgICAgICBsZXQgdGVybSA9IHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5nZXRUZXh0UmFuZ2UocmFuZ2UpIHx8IHRoaXMuc2VhcmNoLm9wdGlvbnMudGVybTtcbiAgICAgICAgICAgIGlmICghdGVybSkge1xuICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5zZXNzaW9uLmdldFdvcmRSYW5nZShyYW5nZS5zdGFydC5yb3csIHJhbmdlLnN0YXJ0LmNvbHVtbik7XG4gICAgICAgICAgICAgICAgdGVybSA9IHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5nZXRUZXh0UmFuZ2UocmFuZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3B0aW9ucy50ZXJtID0gdGVybTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghb3B0aW9ucy5zdGFydCkge1xuICAgICAgICAgICAgb3B0aW9ucy5zdGFydCA9IHJhbmdlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWFyY2guc2V0KG9wdGlvbnMpO1xuXG4gICAgICAgIGNvbnN0IG5ld1JhbmdlID0gdGhpcy5zZWFyY2guZmluZCh0aGlzLnNlc3Npb24pO1xuICAgICAgICBpZiAobmV3UmFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnBsYWNlU2VsZWN0aW9uKHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpO1xuICAgICAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbiA9PT0gdGhpcy5tYWluU2Vzc2lvbikge1xuICAgICAgICAgICAgICAgIHRoaXMubWFpblJlbmRlcmVyLnNjcm9sbFNlbGVjdGlvbkludG9WaWV3KHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQsIDAuNSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3UmFuZ2U7XG4gICAgICAgIH1cblxuICAgICAgICByYW5nZS5lbmQgPSByYW5nZS5zdGFydDtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IocmFuZ2Uuc3RhcnQpO1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHVwZGF0ZUNvdW50ZXIoKTogU2VhcmNoSXRlcmF0aW9uIHtcbiAgICAgICAgY29uc3QgcmVnZXggPSB0aGlzLnNlYXJjaC5vcHRpb25zLnJlZ2V4IGFzIFJlZ0V4cDtcbiAgICAgICAgbGV0IGFsbCA9IDA7XG4gICAgICAgIGxldCBjdXJyZW50ID0gMDtcbiAgICAgICAgaWYgKCFyZWdleCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgY3VycmVudDogMCwgdG90YWw6IDAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLmdldEFsbFBhcmFncmFwaHNDb250ZW50KCkuam9pbignXFxuJyk7XG5cbiAgICAgICAgbGV0IG9mZnNldCA9IHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wb3NpdGlvblRvSW5kZXgodGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQpO1xuXG4gICAgICAgIHJlZ2V4Lmxhc3RJbmRleCA9IDA7XG4gICAgICAgIGxldCByZWdleFJlc3VsdDtcbiAgICAgICAgd2hpbGUgKChyZWdleFJlc3VsdCA9IHJlZ2V4LmV4ZWModmFsdWUpKSkge1xuICAgICAgICAgICAgYWxsKys7XG4gICAgICAgICAgICBsZXQgbGFzdCA9IHJlZ2V4UmVzdWx0LmluZGV4O1xuICAgICAgICAgICAgaWYgKGxhc3QgPD0gb2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgY3VycmVudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFsbCA+IHRoaXMuTUFYX0NPVU5UKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geyBjdXJyZW50OiBjdXJyZW50LCB0b3RhbDogYWxsID4gdGhpcy5NQVhfQ09VTlQgPyB0aGlzLk1BWF9DT1VOVCA6IGFsbCB9O1xuICAgIH1cblxuICAgIHJlcGxhY2Uoc2VhcmNoOiBzdHJpbmcsIHJlcGxhY2U6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNFbXB0eSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNlYXJjaCAhPT0gcmVwbGFjZSkge1xuICAgICAgICAgICAgaWYgKHJlcGxhY2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnNlcnRJbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoVG9Eb2N1bWVudEluZGV4KFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocyxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQucm93LFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydC5jb2x1bW5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGluc2VydFRleHQgPSBuZXcgSW5zZXJ0VGV4dE1vZGVsKHsgaW5zZXJ0SW5kZXgsIHRleHQ6IHJlcGxhY2UgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXBsYWNlQnkobmV3IFJlcGxhY2VNb2RlbCh7IGluc2VydFRleHQgfSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZVNlbGVjdGVkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpbmQoeyB0ZXJtOiBzZWFyY2gsIHNraXBDdXJyZW50OiB0cnVlLCBiYWNrd2FyZHM6IGZhbHNlIH0pO1xuICAgIH1cblxuICAgIHVuZG8oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHVuZG8gPSB0aGlzLmhpc3RvcnkucG9wVW5kb09wZXJhdGlvbigpO1xuICAgICAgICBpZiAoIXVuZG8pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlZ3VsYXRvclNlcnZpY2Uuc2V0VGFyZ2V0ZWRTZXNzaW9uQXNDdXJyZW50KHVuZG8udGFyZ2V0cyk7XG4gICAgICAgIHRoaXMuYXBwbHlPcGVyYXRpb24odW5kby5vcGVyYXRpb24pO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZVNlbGVjdGlvbih1bmRvLmN1cnNvciwgdW5kby5hbmNob3IpO1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcmVkbygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVkbyA9IHRoaXMuaGlzdG9yeS5wb3BSZWRvT3BlcmF0aW9uKCk7XG4gICAgICAgIGlmICghcmVkbykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5zZXRUYXJnZXRlZFNlc3Npb25Bc0N1cnJlbnQocmVkby50YXJnZXRzKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VTZWxlY3Rpb24ocmVkby5jdXJzb3IsIHJlZG8uYW5jaG9yKTtcbiAgICAgICAgdGhpcy5hcHBseU9wZXJhdGlvbihyZWRvLm9wZXJhdGlvbik7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBhcHBseU9wZXJhdGlvbihvcGVyYXRpb246IE9wZXJhdGlvbik6IHZvaWQge1xuICAgICAgICBsZXQgY29tbWFuZDogQ29tbWFuZE1vZGVsIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBJbnNlcnRUZXh0TW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5pbnNlcnRUZXh0QnlEb2N1bWVudEluZGV4KG9wZXJhdGlvbi5pbnNlcnRJbmRleCwgb3BlcmF0aW9uLnRleHQsIG51bGwpO1xuICAgICAgICAgICAgY29uc3QgeyB0ZXh0LCBpbnNlcnRJbmRleCB9ID0gb3BlcmF0aW9uO1xuICAgICAgICAgICAgY29tbWFuZCA9IFNhdmVDb21tYW5kc0hlbHBlci5nZXRJbnNlcnRUZXh0Q29tbWFuZCh0ZXh0LCBpbnNlcnRJbmRleCwgdGhpcy50YXJnZXRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBJbnNlcnRQYXJhZ3JhcGhNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydFBhcmFncmFwaEJ5RG9jdW1lbnRJbmRleChvcGVyYXRpb24pO1xuICAgICAgICAgICAgY29tbWFuZCA9IFNhdmVDb21tYW5kc0hlbHBlci5nZXRJbnNlcnRQYXJhZ3JhcGhDb21tYW5kKG9wZXJhdGlvbiwgdGhpcy50YXJnZXRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBEZWxldGVNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZUJ5RG9jdW1lbnRJbmRleGVzKG9wZXJhdGlvbi5zdGFydEluZGV4LCBvcGVyYXRpb24uc3RhcnRJbmRleCArIG9wZXJhdGlvbi5jb3VudCk7XG4gICAgICAgICAgICBjb21tYW5kID0gU2F2ZUNvbW1hbmRzSGVscGVyLmdldERlbGV0ZUNvbW1hbmQob3BlcmF0aW9uLnN0YXJ0SW5kZXgsIG9wZXJhdGlvbi5jb3VudCwgdGhpcy50YXJnZXRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBJbnNlcnRTdHlsZWRUZXh0TW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5pbnNlcnRUZXh0QnlEb2N1bWVudEluZGV4KG9wZXJhdGlvbi5pbnNlcnRJbmRleCwgb3BlcmF0aW9uLnRleHQsIG5ldyBUZXh0U3R5bGVNb2RlbChvcGVyYXRpb24udGV4dFN0eWxlKSk7XG4gICAgICAgICAgICBjb25zdCB7IHRleHQsIGluc2VydEluZGV4LCB0ZXh0U3R5bGUgfSA9IG9wZXJhdGlvbjtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0SW5zZXJ0U3R5bGVkVGV4dENvbW1hbmQodGV4dCwgaW5zZXJ0SW5kZXgsIHRleHRTdHlsZSwgdGhpcy50YXJnZXRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBSZXN0b3JlTW9kZWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZXBDb3B5ID0gc3RydWN0dXJlZENsb25lKG9wZXJhdGlvbik7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVzdG9yZShkZWVwQ29weSk7XG4gICAgICAgICAgICBjb21tYW5kID0gU2F2ZUNvbW1hbmRzSGVscGVyLmdldFJlc3RvcmVDb21tYW5kKGRlZXBDb3B5LCB0aGlzLnRhcmdldHMpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIEFwcGx5VGV4dFN0eWxlTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5hcHBseVRleHRTdHlsZShvcGVyYXRpb24uc3RhcnRJbmRleCwgb3BlcmF0aW9uLmVuZEluZGV4LCBuZXcgVGV4dFN0eWxlTW9kZWwob3BlcmF0aW9uLnRleHRTdHlsZSkpO1xuICAgICAgICAgICAgY29uc3QgeyBzdGFydEluZGV4LCBlbmRJbmRleCwgdGV4dFN0eWxlIH0gPSBvcGVyYXRpb247XG4gICAgICAgICAgICBjb21tYW5kID0gU2F2ZUNvbW1hbmRzSGVscGVyLmdldEFwcGx5VGV4dFN0eWxlQ29tbWFuZChzdGFydEluZGV4LCBlbmRJbmRleCwgdGV4dFN0eWxlLCB0aGlzLnRhcmdldHMpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIEFwcGx5UGFyYWdyYXBoU3R5bGVNb2RlbCkge1xuICAgICAgICAgICAgY29uc3QgY29weSA9IG5ldyBQYXJhZ3JhcGhTdHlsZU1vZGVsKG9wZXJhdGlvbi5wYXJhZ3JhcGhTdHlsZSk7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uYXBwbHlQYXJhZ3JhcGhTdHlsZShvcGVyYXRpb24uc3RhcnRJbmRleCwgb3BlcmF0aW9uLmVuZEluZGV4LCBjb3B5KTtcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRJbmRleCwgZW5kSW5kZXgsIHBhcmFncmFwaFN0eWxlIH0gPSBvcGVyYXRpb247XG4gICAgICAgICAgICBjb21tYW5kID0gU2F2ZUNvbW1hbmRzSGVscGVyLmdldEFwcGx5UGFyYWdyYXBoU3R5bGVDb21tYW5kKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCBwYXJhZ3JhcGhTdHlsZSwgdGhpcy50YXJnZXRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBSZXN0b3JlVGV4dFN0eWxlc01vZGVsKSB7XG4gICAgICAgICAgICBjb25zdCBkZWVwQ29weSA9IHN0cnVjdHVyZWRDbG9uZShvcGVyYXRpb24pO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlc3RvcmVUZXh0U3R5bGVzKGRlZXBDb3B5LmZvcm1hdHMsIGRlZXBDb3B5LmxpbmtGb3JtYXRzKTtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0UmVzdG9yZVRleHRTdHlsZXNDb21tYW5kKGRlZXBDb3B5LmZvcm1hdHMsIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgUmVzdG9yZVBhcmFncmFwaFN0eWxlc01vZGVsKSB7XG4gICAgICAgICAgICBjb25zdCBkZWVwQ29weSA9IHN0cnVjdHVyZWRDbG9uZShvcGVyYXRpb24pO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlc3RvcmVQYXJhZ3JhcGhTdHlsZXMoZGVlcENvcHkucGFyYWdyYXBocyk7XG4gICAgICAgICAgICBjb21tYW5kID0gU2F2ZUNvbW1hbmRzSGVscGVyLmdldFJlc3RvcmVQYXJhZ3JhcGhTdHlsZXNDb21tYW5kKGRlZXBDb3B5LnBhcmFncmFwaHMsIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgSW5zZXJ0RWxlbWVudE1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uaW5zZXJ0RWxlbWVudEJ5RG9jdW1lbnRJbmRleChvcGVyYXRpb24pO1xuICAgICAgICAgICAgY29tbWFuZCA9IFNhdmVDb21tYW5kc0hlbHBlci5nZXRJbnNlcnRFbGVtZW50Q29tbWFuZChvcGVyYXRpb24sIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgSW5zZXJ0QnJlYWtNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydEJyZWFrQnlEb2N1bWVudEluZGV4KG9wZXJhdGlvbik7XG4gICAgICAgICAgICBjb21tYW5kID0gU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydEJyZWFrQ29tbWFuZChvcGVyYXRpb24sIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgQXBwbHlFbGVtZW50U3R5bGVNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmFwcGx5RWxlbWVudFN0eWxlKG9wZXJhdGlvbik7XG4gICAgICAgICAgICBjb21tYW5kID0gU2F2ZUNvbW1hbmRzSGVscGVyLmdldEFwcGx5RWxlbWVudFN0eWxlQ29tbWFuZChvcGVyYXRpb24sIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgSW5zZXJ0VGFiTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5pbnNlcnRUYWJCeURvY3VtZW50SW5kZXgob3BlcmF0aW9uKTtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0SW5zZXJ0VGFiQ29tbWFuZChvcGVyYXRpb24sIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgSW5zZXJ0SW1hZ2VNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydEltYWdlQnlEb2N1bWVudEluZGV4KG9wZXJhdGlvbik7XG4gICAgICAgICAgICBjb21tYW5kID0gU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydEltYWdlQ29tbWFuZChvcGVyYXRpb24sIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgSW5zZXJ0TGlua01vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uaW5zZXJ0TGlua0J5RG9jdW1lbnRJbmRleChvcGVyYXRpb24pO1xuICAgICAgICAgICAgY29tbWFuZCA9IFNhdmVDb21tYW5kc0hlbHBlci5nZXRJbnNlcnRMaW5rT3BlcmF0aW9uKG9wZXJhdGlvbiwgdGhpcy50YXJnZXRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBBcHBseUltYWdlU3R5bGVNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmFwcGx5SW1hZ2VTdHlsZShvcGVyYXRpb24pO1xuICAgICAgICAgICAgY29uc3QgeyBoZWlnaHQsIHdpZHRoLCBpbnNlcnRJbmRleCB9ID0gb3BlcmF0aW9uO1xuICAgICAgICAgICAgY29tbWFuZCA9IFNhdmVDb21tYW5kc0hlbHBlci5nZXRBcHBseUltYWdlU3R5bGVDb21tYW5kKGhlaWdodCwgd2lkdGgsIGluc2VydEluZGV4LCB0aGlzLnRhcmdldHMpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIEFkZE51bWJlcmluZ01vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uYWRkTnVtYmVyaW5nKG9wZXJhdGlvbi5sZXZlbHMsIG9wZXJhdGlvbi5zdGFydEluZGV4LCBvcGVyYXRpb24uZW5kSW5kZXgpO1xuICAgICAgICAgICAgY29uc3QgeyBzdGFydEluZGV4LCBlbmRJbmRleCwgbGV2ZWxzIH0gPSBvcGVyYXRpb247XG4gICAgICAgICAgICBjb21tYW5kID0gU2F2ZUNvbW1hbmRzSGVscGVyLmdldEFkZE51bWJlcmluZ0NvbW1hbmQoc3RhcnRJbmRleCwgZW5kSW5kZXgsIGxldmVscywgdGhpcy50YXJnZXRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBSZXN0b3JlTnVtYmVyaW5nc01vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVzdG9yZU51bWJlcmluZ3Mob3BlcmF0aW9uLnBhcmFncmFwaHMsIG9wZXJhdGlvbi5udW1iZXJpbmdzKTtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0UmVzdG9yZU51bWJlcmluZ3NDb21tYW5kKG9wZXJhdGlvbiwgdGhpcy50YXJnZXRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBJbnNlcnRUYWJsZUNvbHVtbnNNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydFRhYmxlQ29sdW1ucyhvcGVyYXRpb24uaW5zZXJ0SW5kZXgsIG9wZXJhdGlvbi5jb2x1bW5zQ291bnQsIG9wZXJhdGlvbi50YXJnZXRJbmRleCwgb3BlcmF0aW9uLmluaGVyaXRJbmRleCk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRUYWJsZVNpemUob3BlcmF0aW9uLmluc2VydEluZGV4LCB0aGlzLnNlc3Npb24uc2Vzc2lvbklkKTtcbiAgICAgICAgICAgIGNvbnN0IHsgY29sdW1uc0NvdW50LCBpbmhlcml0SW5kZXgsIGluc2VydEluZGV4LCB0YXJnZXRJbmRleCB9ID0gb3BlcmF0aW9uO1xuICAgICAgICAgICAgY29tbWFuZCA9IFNhdmVDb21tYW5kc0hlbHBlci5nZXRJbnNlcnRUYWJsZUNvbHVtbnNDb21tYW5kKGNvbHVtbnNDb3VudCwgaW5oZXJpdEluZGV4LCBpbnNlcnRJbmRleCwgdGFyZ2V0SW5kZXgsIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgSW5zZXJ0VGFibGVSb3dzTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5pbnNlcnRUYWJsZVJvd3Mob3BlcmF0aW9uLmluc2VydEluZGV4LCBvcGVyYXRpb24ucm93c0NvdW50LCBvcGVyYXRpb24udGFyZ2V0SW5kZXgsIG9wZXJhdGlvbi5pbmhlcml0SW5kZXgpO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkVGFibGVTaXplKG9wZXJhdGlvbi5pbnNlcnRJbmRleCwgdGhpcy5zZXNzaW9uLnNlc3Npb25JZCk7XG4gICAgICAgICAgICBjb25zdCB7IGluc2VydEluZGV4LCByb3dzQ291bnQsIHRhcmdldEluZGV4LCBpbmhlcml0SW5kZXggfSA9IG9wZXJhdGlvbjtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0SW5zZXJ0VGFibGVSb3dzQ29tbWFuZChpbnNlcnRJbmRleCwgcm93c0NvdW50LCB0YXJnZXRJbmRleCwgaW5oZXJpdEluZGV4LCB0aGlzLnRhcmdldHMpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIFJlbW92ZVRhYmxlQ29sdW1uc01vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlVGFibGVDb2x1bW5zKG9wZXJhdGlvbi5pbnNlcnRJbmRleCwgb3BlcmF0aW9uLnN0YXJ0SW5kZXgsIG9wZXJhdGlvbi5lbmRJbmRleCk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRUYWJsZVNpemUob3BlcmF0aW9uLmluc2VydEluZGV4LCB0aGlzLnNlc3Npb24uc2Vzc2lvbklkKTtcbiAgICAgICAgICAgIGNvbnN0IHsgaW5zZXJ0SW5kZXgsIHN0YXJ0SW5kZXgsIGVuZEluZGV4IH0gPSBvcGVyYXRpb247XG4gICAgICAgICAgICBjb21tYW5kID0gU2F2ZUNvbW1hbmRzSGVscGVyLmdldFJlbW92ZVRhYmxlQ29sdW1uc0NvbW1hbmQoaW5zZXJ0SW5kZXgsIHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0aGlzLnRhcmdldHMpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIFJlbW92ZVRhYmxlUm93c01vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlVGFibGVSb3dzKG9wZXJhdGlvbi5pbnNlcnRJbmRleCwgb3BlcmF0aW9uLnN0YXJ0SW5kZXgsIG9wZXJhdGlvbi5lbmRJbmRleCk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRUYWJsZVNpemUob3BlcmF0aW9uLmluc2VydEluZGV4LCB0aGlzLnNlc3Npb24uc2Vzc2lvbklkKTtcbiAgICAgICAgICAgIGNvbnN0IHsgaW5zZXJ0SW5kZXgsIHN0YXJ0SW5kZXgsIGVuZEluZGV4IH0gPSBvcGVyYXRpb247XG4gICAgICAgICAgICBjb21tYW5kID0gU2F2ZUNvbW1hbmRzSGVscGVyLmdldFJlbW92ZVRhYmxlUm93c0NvbW1hbmQoaW5zZXJ0SW5kZXgsIHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0aGlzLnRhcmdldHMpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIFJlc2l6ZVRhYmxlQ29sdW1uc01vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVzaXplVGFibGVDb2x1bW5zKG9wZXJhdGlvbik7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRUYWJsZVNpemUob3BlcmF0aW9uLmluc2VydEluZGV4LCB0aGlzLnNlc3Npb24uc2Vzc2lvbklkKTtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0UmVzaXplVGFibGVDb2x1bW5zQ29tbWFuZChvcGVyYXRpb24sIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgUmVzdG9yZVRhYmxlTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZXN0b3JlVGFibGUob3BlcmF0aW9uLmluc2VydEluZGV4LCBvcGVyYXRpb24ub2xkVGFibGUpO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkVGFibGVTaXplKG9wZXJhdGlvbi5pbnNlcnRJbmRleCwgdGhpcy5zZXNzaW9uLnNlc3Npb25JZCk7XG4gICAgICAgICAgICBjb21tYW5kID0gU2F2ZUNvbW1hbmRzSGVscGVyLmdldFJlc3RvcmVUYWJsZUNvbW1hbmQob3BlcmF0aW9uLCB0aGlzLnRhcmdldHMpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIEluc2VydFRhYmxlTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5pbnNlcnRUYWJsZUJ5RG9jdW1lbnRJbmRleChvcGVyYXRpb24pO1xuICAgICAgICAgICAgY29tbWFuZCA9IFNhdmVDb21tYW5kc0hlbHBlci5nZXRJbnNlcnRUYWJsZUNvbW1hbmQob3BlcmF0aW9uLCB0aGlzLnRhcmdldHMpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIFJlbW92ZU51bWJlcmluZ3NNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZU51bWJlcmluZ3Mob3BlcmF0aW9uLnN0YXJ0SW5kZXgsIG9wZXJhdGlvbi5lbmRJbmRleCk7XG4gICAgICAgICAgICBjb25zdCB7IHN0YXJ0SW5kZXgsIGVuZEluZGV4IH0gPSBvcGVyYXRpb247XG4gICAgICAgICAgICBjb21tYW5kID0gU2F2ZUNvbW1hbmRzSGVscGVyLmdldFJlbW92ZU51bWJlcmluZ3NDb21tYW5kKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0aGlzLnRhcmdldHMpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIFJlcGxhY2VNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlcGxhY2Uob3BlcmF0aW9uKTtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0UmVwbGFjZUNvbW1hbmQob3BlcmF0aW9uLCB0aGlzLnRhcmdldHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmRvL3JlZG8gaXMgbm90IGltcGxlbWVudGVkIGZvciB0aGUgT3BlcmF0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChjb21tYW5kKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVDdXJzb3IoKTtcbiAgICB9XG5cbiAgICBzYXZlUmVtb3ZlVG9IaXN0b3J5KHJhbmdlOiBSYW5nZSk6IHZvaWQge1xuICAgICAgICBjb25zdCByZXN0b3JlTW9kZWwgPSB0aGlzLmNyZWF0ZVJlc3RvcmVGcm9tU2xpY2UocmFuZ2Uuc3RhcnQucm93LCByYW5nZS5zdGFydC5jb2x1bW4sIHJhbmdlLmVuZC5yb3csIHJhbmdlLmVuZC5jb2x1bW4pO1xuICAgICAgICBjb25zdCBjb3VudCA9IHJlc3RvcmVNb2RlbC5lbmRJbmRleCAtIHJlc3RvcmVNb2RlbC5zdGFydEluZGV4ICsgMTtcbiAgICAgICAgcmVzdG9yZU1vZGVsLmVuZEluZGV4ID0gcmVzdG9yZU1vZGVsLnN0YXJ0SW5kZXg7IC8vIHRoaXMgaXMgdG8gcmVzdG9yZSBpbiBwb3NpdGlvbiB3aXRob3V0IGRlbGV0aW5nL3JlcGxhY2luZyBhbnl0aGluZyBpbiByYW5nZVxuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaERlbGV0ZShyZXN0b3JlTW9kZWwpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFNhdmVDb21tYW5kc0hlbHBlci5nZXREZWxldGVDb21tYW5kKHJlc3RvcmVNb2RlbC5zdGFydEluZGV4LCBjb3VudCwgdGhpcy50YXJnZXRzKSk7XG4gICAgfVxuXG4gICAgc2F2ZUluc2VydFRleHRUb0hpc3RvcnkocGFyYWdyYXBoOiBudW1iZXIsIGluZGV4SW5QYXJhZ3JhcGg6IG51bWJlciwgdGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhUb0RvY3VtZW50SW5kZXgodGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIHBhcmFncmFwaCwgaW5kZXhJblBhcmFncmFwaCk7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoSW5zZXJ0VGV4dChpbmRleCwgdGV4dCk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydFRleHRDb21tYW5kKHRleHQsIGluZGV4LCB0aGlzLnRhcmdldHMpKTtcbiAgICB9XG5cbiAgICBzYXZlSW5zZXJ0UGFyYWdyYXBoVG9IaXN0b3J5KGNvbnRlbnQ6IHN0cmluZywgbW9kZWw6IEluc2VydFBhcmFncmFwaE1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoSW5zZXJ0UGFyYWdyYXBoKGNvbnRlbnQsIG1vZGVsLCB0aGlzLnNlc3Npb24ubW9kZWwucGFyYWdyYXBocyk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydFBhcmFncmFwaENvbW1hbmQobW9kZWwsIHRoaXMudGFyZ2V0cykpO1xuICAgIH1cblxuICAgIHNhdmVJbnNlcnRTdHlsZWRUZXh0VG9IaXN0b3J5KHBhcmFncmFwaDogbnVtYmVyLCBpbmRleEluUGFyYWdyYXBoOiBudW1iZXIsIHRleHQ6IHN0cmluZywgc3R5bGU6IFRleHRTdHlsZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhUb0RvY3VtZW50SW5kZXgodGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIHBhcmFncmFwaCwgaW5kZXhJblBhcmFncmFwaCk7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoSW5zZXJ0U3R5bGVkVGV4dChpbmRleCwgdGV4dCwgc3R5bGUpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFNhdmVDb21tYW5kc0hlbHBlci5nZXRJbnNlcnRTdHlsZWRUZXh0Q29tbWFuZCh0ZXh0LCBpbmRleCwgc3R5bGUsIHRoaXMudGFyZ2V0cykpO1xuICAgIH1cblxuICAgIHNhdmVJbnNlcnRFbGVtZW50VG9IaXN0b3J5KG1vZGVsOiBJbnNlcnRFbGVtZW50TW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hJbnNlcnRFbGVtZW50KG1vZGVsKTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0SW5zZXJ0RWxlbWVudENvbW1hbmQobW9kZWwsIHRoaXMudGFyZ2V0cykpO1xuICAgIH1cblxuICAgIHNhdmVJbnNlcnRCcmVha1RvSGlzdG9yeShtb2RlbDogSW5zZXJ0QnJlYWtNb2RlbCk6IHZvaWQge1xuICAgICAgICBtb2RlbC5pc09uTmV3UGFyYWdyYXBoID1cbiAgICAgICAgICAgIG1vZGVsLmJyZWFrVHlwZSA9PT0gQnJlYWtUeXBlcy5QYWdlICYmXG4gICAgICAgICAgICBCcmVha0hlbHBlci5nZXRCcmVha1R5cGUodGhpcy5zZXNzaW9uLm1vZGVsLCBDVVNUT01fRUxFTUVOVF9NQVJLRVIsIG1vZGVsLmluc2VydEluZGV4IC0gMSkgIT09IEJyZWFrVHlwZXMuUGFnZTtcbiAgICAgICAgY29uc3QgY291bnQgPSBtb2RlbC5pc09uTmV3UGFyYWdyYXBoID8gTkVXX0xJTkVfTUFSS1VQLmxlbmd0aCArIDEgOiAxO1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaEluc2VydEJyZWFrKG1vZGVsLCBjb3VudCk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydEJyZWFrQ29tbWFuZChtb2RlbCwgdGhpcy50YXJnZXRzKSk7XG4gICAgfVxuXG4gICAgc2F2ZUluc2VydFRhYlRvSGlzdG9yeShtb2RlbDogSW5zZXJ0VGFiTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hJbnNlcnRUYWIobW9kZWwpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFNhdmVDb21tYW5kc0hlbHBlci5nZXRJbnNlcnRUYWJDb21tYW5kKG1vZGVsLCB0aGlzLnRhcmdldHMpKTtcbiAgICB9XG5cbiAgICBzYXZlSW5zZXJ0SW1hZ2VUb0hpc3RvcnkobW9kZWw6IEluc2VydEltYWdlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hJbnNlcnRJbWFnZShtb2RlbCk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydEltYWdlQ29tbWFuZChtb2RlbCwgdGhpcy50YXJnZXRzKSk7XG4gICAgfVxuXG4gICAgc2F2ZUluc2VydExpbmtUb0hpc3RvcnkobW9kZWw6IEluc2VydExpbmtNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaEluc2VydExpbmsobW9kZWwpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFNhdmVDb21tYW5kc0hlbHBlci5nZXRJbnNlcnRMaW5rT3BlcmF0aW9uKG1vZGVsLCB0aGlzLnRhcmdldHMpKTtcbiAgICB9XG5cbiAgICBzYXZlSW5zZXJ0VGFibGVUb0hpc3RvcnkobW9kZWw6IEluc2VydFRhYmxlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hJbnNlcnRUYWJsZShtb2RlbCk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydFRhYmxlQ29tbWFuZChtb2RlbCwgdGhpcy50YXJnZXRzKSk7XG4gICAgfVxuXG4gICAgc2F2ZUFwcGx5VGV4dFN0eWxlVG9IaXN0b3J5KHN0YXJ0SW5kZXg6IG51bWJlciwgZW5kSW5kZXg6IG51bWJlciwgdGV4dFN0eWxlOiBUZXh0U3R5bGVNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBmb3JtYXRzID0gRm9ybWF0SGVscGVyLnNsaWNlU2VjdGlvbih0aGlzLnNlc3Npb24ubW9kZWwuZm9ybWF0cywgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICBjb25zdCBsaW5rRm9ybWF0cyA9IExpbmtIZWxwZXIuc2xpY2VGb3JtYXRzKHRoaXMuc2Vzc2lvbi5tb2RlbC5saW5rcywgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaEFwcGx5VGV4dFN0eWxlKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0ZXh0U3R5bGUsIGZvcm1hdHMsIGxpbmtGb3JtYXRzKTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0QXBwbHlUZXh0U3R5bGVDb21tYW5kKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0ZXh0U3R5bGUsIHRoaXMudGFyZ2V0cykpO1xuICAgIH1cblxuICAgIHNhdmVBcHBseVBhcmFncmFwaFN0eWxlVG9IaXN0b3J5KHN0YXJ0SW5kZXg6IG51bWJlciwgZW5kSW5kZXg6IG51bWJlciwgcGFyYWdyYXBoU3R5bGU6IFBhcmFncmFwaFN0eWxlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBocyA9IEluZGV4ZWRFbGVtZW50SGVscGVyLnNsaWNlU2VjdGlvbih0aGlzLnNlc3Npb24ubW9kZWwucGFyYWdyYXBocywgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhzRGVlcENvcHkgPSBwYXJhZ3JhcGhzLm1hcChcbiAgICAgICAgICAgIHggPT4gbmV3IFBhcmFncmFwaE1vZGVsKHsgaW5zZXJ0SW5kZXg6IHguaW5zZXJ0SW5kZXgsIHBhcmFncmFwaFN0eWxlOiBuZXcgUGFyYWdyYXBoU3R5bGVNb2RlbCh7IC4uLngucGFyYWdyYXBoU3R5bGUgfSkgfSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hBcHBseVBhcmFncmFwaFN0eWxlKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCBwYXJhZ3JhcGhTdHlsZSwgcGFyYWdyYXBoc0RlZXBDb3B5KTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChcbiAgICAgICAgICAgIFNhdmVDb21tYW5kc0hlbHBlci5nZXRBcHBseVBhcmFncmFwaFN0eWxlQ29tbWFuZChzdGFydEluZGV4LCBlbmRJbmRleCwgcGFyYWdyYXBoU3R5bGUsIHRoaXMudGFyZ2V0cylcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBzYXZlQXBwbHlFbGVtZW50U3R5bGVUb0hpc3RvcnkoY3VycmVudDogRWxlbWVudE1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5zZXNzaW9uLm1vZGVsLmVsZW1lbnRzLmZpbmQoeCA9PiB4Lmluc2VydEluZGV4ID09PSBjdXJyZW50Lmluc2VydEluZGV4KTtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hBcHBseUVsZW1lbnRTdHlsZShwcmV2aW91cywgY3VycmVudCk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldEFwcGx5RWxlbWVudFN0eWxlQ29tbWFuZChjdXJyZW50LCB0aGlzLnRhcmdldHMpKTtcbiAgICB9XG5cbiAgICBzYXZlQWRkTnVtYmVyaW5nVG9IaXN0b3J5KHRlbXBsYXRlTGV2ZWxzOiBOdW1iZXJpbmdMZXZlbE1vZGVsW10sIHN0YXJ0SW5kZXg6IG51bWJlciwgZW5kSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhzID0gSW5kZXhlZEVsZW1lbnRIZWxwZXIuc2xpY2VTZWN0aW9uKHRoaXMuc2Vzc2lvbi5tb2RlbC5wYXJhZ3JhcGhzLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaHNEZWVwQ29weSA9IHBhcmFncmFwaHMubWFwKFxuICAgICAgICAgICAgeCA9PiBuZXcgUGFyYWdyYXBoTW9kZWwoeyBpbnNlcnRJbmRleDogeC5pbnNlcnRJbmRleCwgcGFyYWdyYXBoU3R5bGU6IG5ldyBQYXJhZ3JhcGhTdHlsZU1vZGVsKHsgLi4ueC5wYXJhZ3JhcGhTdHlsZSB9KSB9KVxuICAgICAgICApO1xuICAgICAgICBjb25zdCByZW1vdmVkTnVtYmVyaW5nSWRzID0gWy4uLm5ldyBTZXQocGFyYWdyYXBocy5tYXAoeCA9PiB4LnBhcmFncmFwaFN0eWxlLm51bWJlcmluZ0lkKSldO1xuICAgICAgICBjb25zdCBudW1iZXJpbmdzID0gdGhpcy5zZXNzaW9uLmdlbmVyYWxQcm9wZXJ0aWVzLm51bWJlcmluZ3MuZmlsdGVyKHggPT4gcmVtb3ZlZE51bWJlcmluZ0lkcy5pbmNsdWRlcyh4Lm51bWJlcmluZ0lkKSk7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoQWRkTnVtYmVyaW5nKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0ZW1wbGF0ZUxldmVscywgcGFyYWdyYXBoc0RlZXBDb3B5LCBudW1iZXJpbmdzKTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0QWRkTnVtYmVyaW5nQ29tbWFuZChzdGFydEluZGV4LCBlbmRJbmRleCwgdGVtcGxhdGVMZXZlbHMsIHRoaXMudGFyZ2V0cykpO1xuICAgIH1cblxuICAgIHNhdmVSZW1vdmVOdW1iZXJpbmdUb0hpc3Rvcnkoc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaHMgPSBJbmRleGVkRWxlbWVudEhlbHBlci5zbGljZVNlY3Rpb24odGhpcy5zZXNzaW9uLm1vZGVsLnBhcmFncmFwaHMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoc0RlZXBDb3B5ID0gcGFyYWdyYXBocy5tYXAoXG4gICAgICAgICAgICB4ID0+IG5ldyBQYXJhZ3JhcGhNb2RlbCh7IGluc2VydEluZGV4OiB4Lmluc2VydEluZGV4LCBwYXJhZ3JhcGhTdHlsZTogbmV3IFBhcmFncmFwaFN0eWxlTW9kZWwoeyAuLi54LnBhcmFncmFwaFN0eWxlIH0pIH0pXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHJlbW92ZWROdW1iZXJpbmdJZHMgPSBbLi4ubmV3IFNldChwYXJhZ3JhcGhzLm1hcCh4ID0+IHgucGFyYWdyYXBoU3R5bGUubnVtYmVyaW5nSWQpKV07XG4gICAgICAgIGNvbnN0IG51bWJlcmluZ3MgPSB0aGlzLnNlc3Npb24uZ2VuZXJhbFByb3BlcnRpZXMubnVtYmVyaW5ncy5maWx0ZXIoeCA9PiByZW1vdmVkTnVtYmVyaW5nSWRzLmluY2x1ZGVzKHgubnVtYmVyaW5nSWQpKTtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hSZW1vdmVOdW1iZXJpbmdzKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCBudW1iZXJpbmdzLCBwYXJhZ3JhcGhzRGVlcENvcHkpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFNhdmVDb21tYW5kc0hlbHBlci5nZXRSZW1vdmVOdW1iZXJpbmdzQ29tbWFuZChzdGFydEluZGV4LCBlbmRJbmRleCwgdGhpcy50YXJnZXRzKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzYXZlQXBwbHlJbWFnZVN0eWxlVG9IaXN0b3J5KGltYWdlOiBJbWFnZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5zZXNzaW9uLm1vZGVsLmltYWdlcy5maW5kKHggPT4geC5pbnNlcnRJbmRleCA9PT0gaW1hZ2UuaW5zZXJ0SW5kZXgpO1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaEFwcGx5SW1hZ2VTdHlsZShwcmV2aW91cywgaW1hZ2UpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFxuICAgICAgICAgICAgU2F2ZUNvbW1hbmRzSGVscGVyLmdldEFwcGx5SW1hZ2VTdHlsZUNvbW1hbmQoaW1hZ2UuaGVpZ2h0LCBpbWFnZS53aWR0aCwgaW1hZ2UuaW5zZXJ0SW5kZXgsIHRoaXMudGFyZ2V0cylcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNhdmVSZXBsYWNlVG9IaXN0b3J5KHJhbmdlOiBSYW5nZSwgbW9kZWw6IFJlcGxhY2VNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZXN0b3JlTW9kZWwgPSB0aGlzLmNyZWF0ZVJlc3RvcmVGcm9tU2xpY2UocmFuZ2Uuc3RhcnQucm93LCByYW5nZS5zdGFydC5jb2x1bW4sIHJhbmdlLmVuZC5yb3csIHJhbmdlLmVuZC5jb2x1bW4pO1xuICAgICAgICBpZiAobW9kZWwuaW5zZXJ0UGFyYWdyYXBoKSB7XG4gICAgICAgICAgICBjb25zdCB7IHN0YXJ0SW5kZXgsIGNvdW50IH0gPSB0aGlzLmhpc3RvcnkuZ2V0RGVsZXRlRGF0YUZvckluc2VydFBhcmFncmFwaHMoXG4gICAgICAgICAgICAgICAgQ29udGVudEhlbHBlci5nZXRDb250ZW50RnJvbUluc2VydFBhcmFncmFwaChtb2RlbC5pbnNlcnRQYXJhZ3JhcGgpLFxuICAgICAgICAgICAgICAgIG1vZGVsLmluc2VydFBhcmFncmFwaCxcbiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24ubW9kZWwucGFyYWdyYXBoc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJlc3RvcmVNb2RlbC5zdGFydEluZGV4ID0gc3RhcnRJbmRleDtcbiAgICAgICAgICAgIHJlc3RvcmVNb2RlbC5lbmRJbmRleCA9IHN0YXJ0SW5kZXggKyBjb3VudCAtIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN0b3JlTW9kZWwuZW5kSW5kZXggPSByZXN0b3JlTW9kZWwuc3RhcnRJbmRleCArIChtb2RlbC5pbnNlcnRUZXh0Py50ZXh0Lmxlbmd0aCA/PyAxKTsgLy8gdGhpcyBpcyB0byByZXN0b3JlIGluIHJhbmdlIHdpdGggZGVsZXRpbmcvcmVwbGFjaW5nIGNvbnRlbnQgd2l0aGluXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hSZXBsYWNlKHJlc3RvcmVNb2RlbCwgbW9kZWwpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFNhdmVDb21tYW5kc0hlbHBlci5nZXRSZXBsYWNlQ29tbWFuZChtb2RlbCwgdGhpcy50YXJnZXRzKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVSZXN0b3JlRnJvbVNsaWNlKHBhcmFncmFwaFN0YXJ0OiBudW1iZXIsIGluZGV4SW5TdGFydDogbnVtYmVyLCBwYXJhZ3JhcGhFbmQ6IG51bWJlciwgaW5kZXhJbkVuZDogbnVtYmVyKTogUmVzdG9yZU1vZGVsIHtcbiAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoVG9Eb2N1bWVudEluZGV4KHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCBwYXJhZ3JhcGhTdGFydCwgaW5kZXhJblN0YXJ0KTtcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFRvRG9jdW1lbnRJbmRleCh0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocywgcGFyYWdyYXBoRW5kLCBpbmRleEluRW5kKSAtIDE7XG4gICAgICAgIGNvbnN0IHRleHQgPSB0aGlzLnNlc3Npb24ubW9kZWwuY29udGVudC5zbGljZShzdGFydEluZGV4LCBlbmRJbmRleCArIDEpO1xuICAgICAgICBjb25zdCBmb3JtYXRzID0gRm9ybWF0SGVscGVyLnNsaWNlU2VjdGlvbih0aGlzLnNlc3Npb24ubW9kZWwuZm9ybWF0cywgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhzID0gSW5kZXhlZEVsZW1lbnRIZWxwZXIuc2xpY2VTZWN0aW9uKHRoaXMuc2Vzc2lvbi5tb2RlbC5wYXJhZ3JhcGhzLCBzdGFydEluZGV4LCBlbmRJbmRleCkubWFwKFxuICAgICAgICAgICAgeCA9PiBuZXcgUGFyYWdyYXBoTW9kZWwoeClcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaW1hZ2VzID0gSW5kZXhlZEVsZW1lbnRIZWxwZXIuc2xpY2VTZWN0aW9uKHRoaXMuc2Vzc2lvbi5tb2RlbC5pbWFnZXMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KS5tYXAoeCA9PiBuZXcgSW1hZ2VNb2RlbCh4KSk7XG4gICAgICAgIGNvbnN0IHRhYmxlcyA9IEluZGV4ZWRFbGVtZW50SGVscGVyLnNsaWNlU2VjdGlvbih0aGlzLnNlc3Npb24ubW9kZWwudGFibGVzLCBzdGFydEluZGV4LCBlbmRJbmRleCkubWFwKHggPT4gbmV3IFRhYmxlTW9kZWwoeCkpO1xuICAgICAgICBjb25zdCBlbGVtZW50cyA9IEluZGV4ZWRFbGVtZW50SGVscGVyLnNsaWNlU2VjdGlvbih0aGlzLnNlc3Npb24ubW9kZWwuZWxlbWVudHMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KS5tYXAoXG4gICAgICAgICAgICB4ID0+IG5ldyBFbGVtZW50TW9kZWwoeyAuLi54LCBpZDogMCwgZ3VpZDogJycgfSlcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgYnJlYWtzID0gSW5kZXhlZEVsZW1lbnRIZWxwZXIuc2xpY2VTZWN0aW9uKHRoaXMuc2Vzc2lvbi5tb2RlbC5icmVha3MsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KS5tYXAoeCA9PiBuZXcgQnJlYWtNb2RlbCh4KSk7XG4gICAgICAgIGNvbnN0IHRhYnMgPSBJbmRleGVkRWxlbWVudEhlbHBlci5zbGljZVNlY3Rpb24odGhpcy5zZXNzaW9uLm1vZGVsLnRhYnMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KS5tYXAoeCA9PiBuZXcgVGFiTW9kZWwoeCkpO1xuICAgICAgICBjb25zdCBsaW5rcyA9IExpbmtIZWxwZXIuc2xpY2VTZWN0aW9uKHRoaXMuc2Vzc2lvbi5tb2RlbC5saW5rcywgc3RhcnRJbmRleCwgZW5kSW5kZXgpLm1hcCh4ID0+IG5ldyBMaW5rTW9kZWwoeCkpO1xuICAgICAgICByZXR1cm4gbmV3IFJlc3RvcmVNb2RlbCh7IHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0ZXh0LCBmb3JtYXRzLCBwYXJhZ3JhcGhzLCBpbWFnZXMsIHRhYmxlcywgZWxlbWVudHMsIGJyZWFrcywgdGFicywgbGlua3MgfSk7XG4gICAgfVxuXG4gICAgY3JlYXRlQ3VzdG9tRWxlbWVudChkYXRhOiBFbGVtZW50RGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluc2VydEluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhUb0RvY3VtZW50SW5kZXgoXG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocyxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnJhbmdlLnN0YXJ0LnJvdyxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnJhbmdlLnN0YXJ0LmNvbHVtblxuICAgICAgICApO1xuICAgICAgICBjb25zdCBpbnNlcnRFbGVtZW50ID0gbmV3IEluc2VydEVsZW1lbnRNb2RlbCh7IGVsZW1lbnQ6IG5ldyBFbGVtZW50TW9kZWwoeyAuLi5kYXRhLCBpbnNlcnRJbmRleCB9KSB9KTtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VCeShuZXcgUmVwbGFjZU1vZGVsKHsgaW5zZXJ0RWxlbWVudCB9KSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNhdmVJbnNlcnRFbGVtZW50VG9IaXN0b3J5KGluc2VydEVsZW1lbnQpO1xuICAgICAgICBjb25zdCBlbmRQb2ludCA9IHRoaXMuc2Vzc2lvbi5pbnNlcnRFbGVtZW50KHRoaXMuc2VsZWN0aW9uLmN1cnNvciwgZGF0YSk7XG4gICAgICAgIHRoaXMub25Eb2N1bWVudENoYW5nZShuZXcgUmFuZ2UodGhpcy5zZWxlY3Rpb24uY3Vyc29yLCBlbmRQb2ludCkpO1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlU2VsZWN0ZWQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNhdmVSZW1vdmVUb0hpc3RvcnkodGhpcy5zZWxlY3Rpb24ucmFuZ2UpO1xuICAgICAgICB0aGlzLnJlbW92ZUN1c3RvbUVsZW1lbnRzRGF0YSgpO1xuICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlKHRoaXMuc2VsZWN0aW9uLnJhbmdlKTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIHJlbW92ZUN1c3RvbUVsZW1lbnRzRGF0YSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoVG9Eb2N1bWVudEluZGV4KFxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydC5yb3csXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydC5jb2x1bW5cbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPVxuICAgICAgICAgICAgQ29udGVudEhlbHBlci5wYXJhZ3JhcGhUb0RvY3VtZW50SW5kZXgoXG4gICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2UuZW5kLnJvdyxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yYW5nZS5lbmQuY29sdW1uXG4gICAgICAgICAgICApIC0gMTtcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBJbmRleGVkRWxlbWVudEhlbHBlci5zbGljZVNlY3Rpb24odGhpcy5zZXNzaW9uLm1vZGVsLmVsZW1lbnRzLCBzdGFydEluZGV4LCBlbmRJbmRleCkuc2xpY2UoKTtcbiAgICAgICAgaWYgKGVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLnJlbW92ZUN1c3RvbUVsZW1lbnRzRGF0YShlbGVtZW50cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbklucHV0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0ZXh0ID0gdGhpcy50ZXh0SW5wdXQuZ2V0SW5zZXJ0VGV4dCgpO1xuICAgICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzRW1wdHlOdW1iZXJpbmdQYXJhZ3JhcGggPSB0aGlzLmlzRW1wdHlOdW1iZXJpbmdQYXJhZ3JhcGgodGhpcy5zZWxlY3Rpb24uY3Vyc29yLnJvdyk7XG4gICAgICAgIGlmICh0ZXh0ID09PSBORVdfTElORV9NQVJLVVAgJiYgdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSAmJiBpc0VtcHR5TnVtYmVyaW5nUGFyYWdyYXBoKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZU51bWJlcmluZ3NGcm9tUGFyYWdyYXBocygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnQodGV4dCk7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbEN1cnNvckludG9NYWluVmlldygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25DdXQoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFNlbGVjdGVkVGV4dCgpO1xuICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2Uuc2V0Q2xpcGJvYXJkRGF0YShkYXRhKTtcbiAgICAgICAgdGhpcy5jbGlwYm9hcmQuY29weShkYXRhKTtcbiAgICAgICAgdGhpcy5jdXQoKTtcbiAgICAgICAgdGhpcy5zY3JvbGxDdXJzb3JJbnRvTWFpblZpZXcoKTtcbiAgICB9XG5cbiAgICBvbkNvcHkoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFNlbGVjdGVkVGV4dCgpO1xuICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2Uuc2V0Q2xpcGJvYXJkRGF0YShkYXRhKTtcbiAgICAgICAgdGhpcy5jbGlwYm9hcmQuY29weShkYXRhKTtcbiAgICB9XG5cbiAgICBvblBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy50ZXh0SW5wdXQuZ2V0Q2xpcGJvYXJkRGF0YShldmVudCk7XG4gICAgICAgIHRoaXMucGFzdGVEYXRhKGRhdGEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdFJlc2l6ZUxpc3RlbmVyKCk6IHZvaWQge1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5yZXJlbmRlclJlc2l6ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZXN0cm95UmVzaXplTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnJlcmVuZGVyUmVzaXplKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlcmVuZGVyTWFya2VyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmxvb3Auc2NoZWR1bGUoeyBtYXJrZXI6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXJlbmRlclJlc2l6ZSA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5tYWluUmVuZGVyZXIub25SZXNpemUodHJ1ZSk7XG4gICAgfTtcblxuICAgIG9uQmx1cigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnRleHRJbnB1dC5pc0ZvY3VzZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGV4dElucHV0LmlzRm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmhpZGVDdXJzb3IoKTtcbiAgICB9XG5cbiAgICBvbkZvY3VzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50ZXh0SW5wdXQuaXNGb2N1c2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJsdXJDdXN0b21Db21wb25lbnQoKTtcbiAgICAgICAgdGhpcy50ZXh0SW5wdXQuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zaG93Q3Vyc29yKCk7XG4gICAgfVxuXG4gICAgb25Nb3VzZUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUVsZW1lbnQgPSB0aGlzLnNldEN1cnJlbnRTZXNzaW9uKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XG4gICAgICAgIGlmIChjdXN0b21FbGVtZW50ICYmIGN1c3RvbUVsZW1lbnQudGFnTmFtZSAhPT0gdGhpcy50YWJsZUNlbGxUYWdOYW1lICYmIGN1c3RvbUVsZW1lbnQudGFnTmFtZSAhPT0gdGhpcy5lZGdlRWxlbWVudFRhZ05hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNDdXN0b21Db21wb25lbnQoY3VzdG9tRWxlbWVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmJsdXJDdXN0b21Db21wb25lbnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uTGVmdENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUVsZW1lbnQgPSB0aGlzLnNldEN1cnJlbnRTZXNzaW9uKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XG4gICAgICAgIGlmIChjdXN0b21FbGVtZW50ICYmIGN1c3RvbUVsZW1lbnQudGFnTmFtZSAhPT0gdGhpcy50YWJsZUNlbGxUYWdOYW1lICYmIGN1c3RvbUVsZW1lbnQudGFnTmFtZSAhPT0gdGhpcy5lZGdlRWxlbWVudFRhZ05hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNDdXN0b21Db21wb25lbnQoY3VzdG9tRWxlbWVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJsdXJDdXN0b21Db21wb25lbnQoKTtcblxuICAgICAgICBpZiAoIXRoaXMudGV4dElucHV0LmlzRm9jdXNlZCkge1xuICAgICAgICAgICAgdGhpcy50ZXh0SW5wdXQuaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5yZW5kZXJlci5zY3JlZW5Ub1RleHRDb29yZGluYXRlc1VzaW5nTWlkcG9pbnQoZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG4gICAgICAgIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZVNlbGVjdGlvbihwb3NpdGlvbik7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuY3RybEtleSkge1xuICAgICAgICAgICAgY29uc3QgbGluayA9IHRoaXMuZ2V0TGlua01vZGVsKGV2ZW50KTtcbiAgICAgICAgICAgIGlmIChsaW5rKSB7XG4gICAgICAgICAgICAgICAgd2luZG93Lm9wZW4obGluay5saW5rKTtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnBsYWNlQ3Vyc29yKHBvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5tb3VzZUhhbmRsZXIuc3RhcnRNb3VzZVByZXNzKHRoaXMpO1xuICAgIH1cblxuICAgIG9uRG91YmxlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaXNFZGdlRWRpdCA9IHRoaXMubWFpblNlc3Npb24uY3VzdG9tQ29tcG9uZW50cy5lZGdlcy5pc0VkaXQ7XG4gICAgICAgIGNvbnN0IGN1c3RvbUVsZW1lbnQgPSB0aGlzLmdldEN1c3RvbUVsZW1lbnQoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgaWYgKGN1c3RvbUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRTZXNzaW9uSWQgPSArY3VzdG9tRWxlbWVudC5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgnZGF0YS1zZXNzaW9uLWlkJykudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnJlZ3VsYXRvclNlcnZpY2Uuc2V0Q3VzdG9tU2Vzc2lvbkFzQ3VycmVudChlbGVtZW50U2Vzc2lvbklkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5zZXRNYWluU2Vzc2lvbkFzQ3VycmVudCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN1c3RvbUVsZW1lbnQgJiYgY3VzdG9tRWxlbWVudC50YWdOYW1lICE9PSB0aGlzLnRhYmxlQ2VsbFRhZ05hbWUgJiYgY3VzdG9tRWxlbWVudC50YWdOYW1lICE9PSB0aGlzLmVkZ2VFbGVtZW50VGFnTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c0N1c3RvbUNvbXBvbmVudChjdXN0b21FbGVtZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYmx1ckN1c3RvbUNvbXBvbmVudCgpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMucmVuZGVyZXIuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXNVc2luZ01pZHBvaW50KGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuICAgICAgICBpZiAoIWlzRWRnZUVkaXQgJiYgdGhpcy5tYWluU2Vzc2lvbi5jdXN0b21Db21wb25lbnRzLmVkZ2VzLmlzRWRpdCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IocG9zaXRpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnNlc3Npb24uZ2V0V29yZFJhbmdlKHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnBsYWNlU2VsZWN0aW9uKHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBvblRyaXBsZUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUVsZW1lbnQgPSB0aGlzLnNldEN1cnJlbnRTZXNzaW9uKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XG4gICAgICAgIGlmIChjdXN0b21FbGVtZW50ICYmIGN1c3RvbUVsZW1lbnQudGFnTmFtZSAhPT0gdGhpcy50YWJsZUNlbGxUYWdOYW1lICYmIGN1c3RvbUVsZW1lbnQudGFnTmFtZSAhPT0gdGhpcy5lZGdlRWxlbWVudFRhZ05hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNDdXN0b21Db21wb25lbnQoY3VzdG9tRWxlbWVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJsdXJDdXN0b21Db21wb25lbnQoKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLnJlbmRlcmVyLnNjcmVlblRvVGV4dENvb3JkaW5hdGVzVXNpbmdNaWRwb2ludChldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBuZXcgQ3Vyc29yUGFyYWdyYXBoKHBvc2l0aW9uLnJvdywgMCk7XG4gICAgICAgIGNvbnN0IGVuZCA9IG5ldyBDdXJzb3JQYXJhZ3JhcGgocG9zaXRpb24ucm93LCB0aGlzLnNlc3Npb24uZGlzcGxheURhdGEuZ2V0UGFyYWdyYXBoQ29udGVudChwb3NpdGlvbi5yb3cpLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnBsYWNlU2VsZWN0aW9uKHN0YXJ0LCBlbmQpO1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgb25RdWFkQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3VzdG9tRWxlbWVudCA9IHRoaXMuc2V0Q3VycmVudFNlc3Npb24oZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgaWYgKGN1c3RvbUVsZW1lbnQgJiYgY3VzdG9tRWxlbWVudC50YWdOYW1lICE9PSB0aGlzLnRhYmxlQ2VsbFRhZ05hbWUgJiYgY3VzdG9tRWxlbWVudC50YWdOYW1lICE9PSB0aGlzLmVkZ2VFbGVtZW50VGFnTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c0N1c3RvbUNvbXBvbmVudChjdXN0b21FbGVtZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYmx1ckN1c3RvbUNvbXBvbmVudCgpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RBbGwodGhpcy5zZXNzaW9uLm1vZGVsKTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIG9uTW91c2VXaGVlbChldmVudDogV2hlZWxFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQuY3RybEtleSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmFjdG9yID0gMC4zNTtcbiAgICAgICAgY29uc3Qgc2Nyb2xsU3BlZWQgPSA0O1xuICAgICAgICBjb25zdCBkZWx0YVkgPSBldmVudC5kZWx0YVkgKiBmYWN0b3IgKiBzY3JvbGxTcGVlZDtcbiAgICAgICAgdGhpcy5tYWluUmVuZGVyZXIuc2Nyb2xsQnkoZGVsdGFZKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgZ2V0TGlua01vZGVsKGV2ZW50OiBNb3VzZUV2ZW50KTogTGlua01vZGVsIHtcbiAgICAgICAgY29uc3QgaXNJbnNpZGVFZGdlID0gdGhpcy5pc0luc2lkZUVkZ2UoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgY29uc3QgaXNFZGdlRWRpdCA9IHRoaXMubWFpblNlc3Npb24uY3VzdG9tQ29tcG9uZW50cy5lZGdlcy5pc0VkaXQ7XG4gICAgICAgIGlmICghaXNJbnNpZGVFZGdlIHx8IGlzRWRnZUVkaXQpIHtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5yZW5kZXJlci5zY3JlZW5Ub1RleHRDb29yZGluYXRlc1VzaW5nQm91bmRhcnkoZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmdldExpbmtNb2RlbChwb3NpdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VzdG9tRWxlbWVudCA9IHRoaXMuZ2V0Q3VzdG9tRWxlbWVudChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpO1xuICAgICAgICBjb25zdCBzZXNzaW9uSWQgPSArY3VzdG9tRWxlbWVudC5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgnZGF0YS1zZXNzaW9uLWlkJykudmFsdWU7XG4gICAgICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLnJlZ3VsYXRvclNlcnZpY2UuZ2V0U2Vzc2lvbk1vZGVsKHNlc3Npb25JZCk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gc2Vzc2lvbi5yZW5kZXJlci5zY3JlZW5Ub1RleHRDb29yZGluYXRlc1VzaW5nQm91bmRhcnkoXG4gICAgICAgICAgICBldmVudC5jbGllbnRYLFxuICAgICAgICAgICAgZXZlbnQuY2xpZW50WSxcbiAgICAgICAgICAgIGN1c3RvbUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHNlc3Npb24uc2Vzc2lvbi5nZXRMaW5rTW9kZWwocG9zaXRpb24pO1xuICAgIH1cblxuICAgIHNldEN1cnJlbnRTZXNzaW9uKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgY29uc3QgY3VzdG9tRWxlbWVudCA9IHRoaXMuZ2V0Q3VzdG9tRWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgY29uc3QgaXNJbnNpZGVFZGdlID0gdGhpcy5pc0luc2lkZUVkZ2UoY3VzdG9tRWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGlzRWRnZUVkaXQgPSB0aGlzLm1haW5TZXNzaW9uLmN1c3RvbUNvbXBvbmVudHMuZWRnZXMuaXNFZGl0O1xuICAgICAgICBpZiAoIWN1c3RvbUVsZW1lbnQgfHwgKCFpc0VkZ2VFZGl0ICYmIGlzSW5zaWRlRWRnZSkpIHtcbiAgICAgICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5zZXRNYWluU2Vzc2lvbkFzQ3VycmVudCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tRWxlbWVudFRhZ05hbWVzLmluY2x1ZGVzKGN1c3RvbUVsZW1lbnQ/LnRhZ05hbWUpID8gY3VzdG9tRWxlbWVudCA6IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbGVtZW50U2Vzc2lvbklkID0gK2N1c3RvbUVsZW1lbnQuYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oJ2RhdGEtc2Vzc2lvbi1pZCcpLnZhbHVlO1xuICAgICAgICB0aGlzLnJlZ3VsYXRvclNlcnZpY2Uuc2V0Q3VzdG9tU2Vzc2lvbkFzQ3VycmVudChlbGVtZW50U2Vzc2lvbklkKTtcbiAgICAgICAgcmV0dXJuIGN1c3RvbUVsZW1lbnQudGFnTmFtZSAhPT0gdGhpcy5lZGdlRWxlbWVudFRhZ05hbWUgPyBjdXN0b21FbGVtZW50IDogbnVsbDtcbiAgICB9XG5cbiAgICBnZXRDdXN0b21FbGVtZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgaWYgKCFlbGVtZW50IHx8IGVsZW1lbnQudGFnTmFtZSA9PT0gdGhpcy5wYXJlbnRUYWdOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1c3RvbUVsZW1lbnRUYWdOYW1lcy5pbmNsdWRlcyhlbGVtZW50LnRhZ05hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEN1c3RvbUVsZW1lbnQoZWxlbWVudC5wYXJlbnRFbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzSW5zaWRlRWRnZShlbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5nZXRQYXJlbnRFZGdlKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIGdldFBhcmVudEVkZ2UoZWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgaWYgKCFlbGVtZW50IHx8IGVsZW1lbnQudGFnTmFtZSA9PT0gdGhpcy5wYXJlbnRUYWdOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LnRhZ05hbWUgPT09IHRoaXMuZWRnZUVsZW1lbnRUYWdOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFBhcmVudEVkZ2UoZWxlbWVudC5wYXJlbnRFbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHN0cmluZyBvZiB0ZXh0IGN1cnJlbnRseSBoaWdobGlnaHRlZC5cbiAgICAgKi9cbiAgICBnZXRTZWxlY3RlZFRleHQoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFBvc2l0aW9uVG9Eb2N1bWVudEluZGV4KHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCB0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydCk7XG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhQb3NpdGlvblRvRG9jdW1lbnRJbmRleCh0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocywgdGhpcy5zZWxlY3Rpb24ucmFuZ2UuZW5kKTtcbiAgICAgICAgbGV0IGVsZW1lbnRJbmRleGVzOiBudW1iZXJbXSA9IFtdO1xuICAgICAgICBDb250ZW50SGVscGVyLnNldEluZGV4ZXNFbGVtZW50c0luSW50ZXJ2YWwodGhpcy5zZXNzaW9uLm1vZGVsLmJyZWFrcywgZWxlbWVudEluZGV4ZXMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgICAgICAgQ29udGVudEhlbHBlci5zZXRJbmRleGVzRWxlbWVudHNJbkludGVydmFsKHRoaXMuc2Vzc2lvbi5tb2RlbC50YWJsZXMsIGVsZW1lbnRJbmRleGVzLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIENvbnRlbnRIZWxwZXIuc2V0SW5kZXhlc0VsZW1lbnRzSW5JbnRlcnZhbCh0aGlzLnNlc3Npb24ubW9kZWwuaW1hZ2VzLCBlbGVtZW50SW5kZXhlcywgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICBDb250ZW50SGVscGVyLnNldEluZGV4ZXNFbGVtZW50c0luSW50ZXJ2YWwodGhpcy5zZXNzaW9uLm1vZGVsLmVsZW1lbnRzLCBlbGVtZW50SW5kZXhlcywgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICBDb250ZW50SGVscGVyLnNldEluZGV4ZXNFbGVtZW50c0luSW50ZXJ2YWwodGhpcy5zZXNzaW9uLm1vZGVsLnRhYnMsIGVsZW1lbnRJbmRleGVzLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIGVsZW1lbnRJbmRleGVzLnNvcnQoKGEsIGIpID0+IGIgLSBhKTtcbiAgICAgICAgbGV0IHRleHRJbnRlcnZhbCA9IHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5nZXRUZXh0UmFuZ2UodGhpcy5zZWxlY3Rpb24ucmFuZ2UpO1xuICAgICAgICBlbGVtZW50SW5kZXhlcy5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgICAgdGV4dEludGVydmFsID0gdGV4dEludGVydmFsLnNsaWNlKDAsIHgpICsgdGV4dEludGVydmFsLnNsaWNlKHggKyAxKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRleHRJbnRlcnZhbDtcbiAgICB9XG5cbiAgICBpbml0TWFpblNlc3Npb24oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhZ2VXaWR0aCA9IHRoaXMuY3VzdG9tUGFnZVdpZHRoID8/IHRoaXMubW9kZWwucGFnZVdpZHRoO1xuICAgICAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLm1heFdpZHRoID0gYCR7cGFnZVdpZHRofXB4YDtcbiAgICAgICAgY29uc3Qgc2NhbGluZ1JhdGlvID0gdGhpcy5jdXN0b21QYWdlV2lkdGggPyBTY2FsaW5nSGVscGVyLmdldFJhdGlvKHRoaXMuY3VzdG9tUGFnZVdpZHRoLCB0aGlzLm1vZGVsLnBhZ2VXaWR0aCkgOiAxO1xuICAgICAgICB0aGlzLnJlZ3VsYXRvclNlcnZpY2UuYWRkTWFpblNlc3Npb24odGhpcy5tb2RlbCwgcGFnZVdpZHRoLCBzY2FsaW5nUmF0aW8sIHRoaXMuY29udGFpbmVyKTtcbiAgICB9XG5cbiAgICBvblNlbGVjdGlvbkNoYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXNzaW9uLmFwcGx5VG9vbGJhclN0eWxlcygpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZVNlbGVjdGlvbih0aGlzLnNlbGVjdGlvbi5yYW5nZSk7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5zZXRIYXNTZWxlY3Rpb24oIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpO1xuICAgICAgICB0aGlzLnJlcmVuZGVyTWFya2VyKCk7XG4gICAgfVxuXG4gICAgZW5hYmxlU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXN0b21FbGVtZW50ID0gdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGBbZGF0YS1zZXNzaW9uLWlkPVwiJHt0aGlzLnNlc3Npb24uc2Vzc2lvbklkfVwiXWApO1xuICAgICAgICBpZiAoY3VzdG9tRWxlbWVudC50YWdOYW1lID09PSB0aGlzLnRhYmxlQ2VsbFRhZ05hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlU2Vzc2lvbiA9IHRoaXMucmVndWxhdG9yU2VydmljZS5nZXRTZXNzaW9uKHRoaXMucmVndWxhdG9yU2VydmljZS5jdXJyZW50U2Vzc2lvbi5wYXJlbnRTZXNzaW9uSWQpO1xuICAgICAgICAgICAgY29uc3QgdGFibGUgPSB0YWJsZVNlc3Npb24uY3VzdG9tQ29tcG9uZW50cy50YWJsZXMuZmluZChcbiAgICAgICAgICAgICAgICB4ID0+IHguaW5zdGFuY2Uuc2Vzc2lvbklkID09PSB0aGlzLnJlZ3VsYXRvclNlcnZpY2UuY3VycmVudFNlc3Npb24ucGFyZW50U2Vzc2lvbklkXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGFibGUuaW5zdGFuY2UudGFibGVTZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGlvbi5lbmFibGVTZWxlY3Rpb24oKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5jdXJzb3JMYXllci5zaG93Q3Vyc29yKCk7XG4gICAgfVxuXG4gICAgb25Ib3RLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5rZXlEb3duKGV2ZW50KTtcbiAgICB9XG5cbiAgICBvblByaW50KCk6IHZvaWQge1xuICAgICAgICBQcmludEhlbHBlci5wcmludERvY3VtZW50KHRoaXMubWFpblNlc3Npb24pO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25Eb2N1bWVudENoYW5nZSA9IChyYW5nZTogUmFuZ2UpOiB2b2lkID0+IHtcbiAgICAgICAgbGV0IGxhc3RSb3cgPSByYW5nZS5zdGFydC5yb3cgPT09IHJhbmdlLmVuZC5yb3cgPyByYW5nZS5lbmQucm93IDogSW5maW5pdHk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlTGluZXMocmFuZ2Uuc3RhcnQucm93LCBsYXN0Um93KTtcblxuICAgICAgICAvLyBVcGRhdGUgY3Vyc29yIGJlY2F1c2UgdGFiIGNoYXJhY3RlcnMgY2FuIGluZmx1ZW5jZSB0aGUgY3Vyc29yIHBvc2l0aW9uLlxuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGZvY3VzQ3VzdG9tQ29tcG9uZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gK2VsZW1lbnQuYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oJ2RhdGEtaW5zZXJ0LWluZGV4JykudmFsdWU7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uY3VzdG9tQ29tcG9uZW50cy5pbWFnZXMuZmluZCh4ID0+IHguaW5zdGFuY2UuaW5zZXJ0SW5kZXggPT09IGluZGV4KSA/P1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmN1c3RvbUNvbXBvbmVudHMudGFibGVzLmZpbmQoeCA9PiB4Lmluc3RhbmNlLmluc2VydEluZGV4ID09PSBpbmRleCkgPz9cbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5jdXN0b21Db21wb25lbnRzLmN1c3RvbUVsZW1lbnRzLmZpbmQoeCA9PiB4Lmluc3RhbmNlLmluc2VydEluZGV4ID09PSBpbmRleCk7XG4gICAgICAgIGlmICghY29tcG9uZW50IHx8IGNvbXBvbmVudCA9PT0gdGhpcy5mb2N1c2VkQ29tcG9uZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZvY3VzZWRDb21wb25lbnQ/Lmluc3RhbmNlLmJsdXIoKTtcbiAgICAgICAgY29tcG9uZW50Lmluc3RhbmNlLmZvY3VzKCk7XG4gICAgICAgIHRoaXMuZm9jdXNlZENvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLnNlc3Npb24uZGlzcGxheURhdGEuaW5kZXhUb1Bvc2l0aW9uKGluZGV4LCAwKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IocG9zaXRpb24pO1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBibHVyQ3VzdG9tQ29tcG9uZW50KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5mb2N1c2VkQ29tcG9uZW50KSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRDb21wb25lbnQuaW5zdGFuY2UuYmx1cigpO1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkQ29tcG9uZW50ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaXNFbXB0eU51bWJlcmluZ1BhcmFncmFwaChwYXJhZ3JhcGhJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRMaW5lID0gdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLmdldFBhcmFncmFwaENvbnRlbnQocGFyYWdyYXBoSW5kZXgpO1xuICAgICAgICByZXR1cm4gY3VycmVudExpbmUubGVuZ3RoID09PSAwICYmIHRoaXMuc2Vzc2lvbi5tb2RlbC5wYXJhZ3JhcGhzW3BhcmFncmFwaEluZGV4XS5wYXJhZ3JhcGhTdHlsZS5udW1iZXJpbmdJZCAhPT0gbnVsbDtcbiAgICB9XG5cbiAgICBzY3JvbGxDdXJzb3JJbnRvTWFpblZpZXcob2Zmc2V0PzogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlc3Npb24gIT09IHRoaXMubWFpblNlc3Npb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1haW5SZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldyhudWxsLCBvZmZzZXQpO1xuICAgIH1cblxuICAgIGNoYW5nZWRUYWJsZVNpemUoaW5zZXJ0SW5kZXg6IG51bWJlciwgc2Vzc2lvbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMucmVndWxhdG9yU2VydmljZS5nZXRTZXNzaW9uKHNlc3Npb25JZCk7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaCA9IENvbnRlbnRIZWxwZXIuZG9jdW1lbnRJbmRleFRvUGFyYWdyYXBoSW5kZXgoc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCBpbnNlcnRJbmRleCkucm93O1xuICAgICAgICBzZXNzaW9uLmRpc3BsYXlEYXRhLnJlc2V0QWxsTnVtYmVyaW5nSW5mbyhwYXJhZ3JhcGgpO1xuICAgICAgICBzZXNzaW9uLmRpc3BsYXlEYXRhLnVwZGF0ZU5leHRMaW5lSW5kZXhlcyhwYXJhZ3JhcGgsIHBhcmFncmFwaCk7XG4gICAgICAgIHNlc3Npb24uZGlzcGxheURhdGEudXBkYXRlTnVtYmVyaW5nc0RhdGFPbkNoYW5nZShwYXJhZ3JhcGggKyAxKTtcbiAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cblxuICAgIGluc2VydFRhYmxlUm93cyhpbnNlcnRJbmRleDogbnVtYmVyLCByb3dzQ291bnQ6IG51bWJlciwgdGFyZ2V0SW5kZXg6IG51bWJlciwgaW5oZXJpdEluZGV4OiBudW1iZXIsIHNlc3Npb25JZDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5zZXRDdXN0b21TZXNzaW9uQXNDdXJyZW50KHNlc3Npb25JZCk7XG4gICAgICAgIGNvbnN0IGJlZm9yZVRhYmxlID0gQ29udGVudEhlbHBlci5kb2N1bWVudEluZGV4VG9QYXJhZ3JhcGhJbmRleCh0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocywgaW5zZXJ0SW5kZXgpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZUN1cnNvcihiZWZvcmVUYWJsZSk7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy5zZXNzaW9uLm1vZGVsLnRhYmxlcy5maW5kKHggPT4geC5pbnNlcnRJbmRleCA9PT0gaW5zZXJ0SW5kZXgpO1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaEluc2VydFRhYmxlUm93cyhpbnNlcnRJbmRleCwgcm93c0NvdW50LCB0YXJnZXRJbmRleCwgaW5oZXJpdEluZGV4LCB0YWJsZSk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoXG4gICAgICAgICAgICBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0SW5zZXJ0VGFibGVSb3dzQ29tbWFuZChyb3dzQ291bnQsIGluaGVyaXRJbmRleCwgaW5zZXJ0SW5kZXgsIHRhcmdldEluZGV4LCB0aGlzLnRhcmdldHMpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5pbnNlcnRUYWJsZVJvd3MoaW5zZXJ0SW5kZXgsIHJvd3NDb3VudCwgdGFyZ2V0SW5kZXgsIGluaGVyaXRJbmRleCk7XG4gICAgICAgIHRoaXMuY2hhbmdlZFRhYmxlU2l6ZShpbnNlcnRJbmRleCwgc2Vzc2lvbklkKTtcbiAgICB9XG5cbiAgICBpbnNlcnRUYWJsZUNvbHVtbnMoaW5zZXJ0SW5kZXg6IG51bWJlciwgY29sdW1uc0NvdW50OiBudW1iZXIsIHRhcmdldEluZGV4OiBudW1iZXIsIGluaGVyaXRJbmRleDogbnVtYmVyLCBzZXNzaW9uSWQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnJlZ3VsYXRvclNlcnZpY2Uuc2V0Q3VzdG9tU2Vzc2lvbkFzQ3VycmVudChzZXNzaW9uSWQpO1xuICAgICAgICBjb25zdCBiZWZvcmVUYWJsZSA9IENvbnRlbnRIZWxwZXIuZG9jdW1lbnRJbmRleFRvUGFyYWdyYXBoSW5kZXgodGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIGluc2VydEluZGV4KTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IoYmVmb3JlVGFibGUpO1xuICAgICAgICBjb25zdCB0YWJsZSA9IHRoaXMuc2Vzc2lvbi5tb2RlbC50YWJsZXMuZmluZCh4ID0+IHguaW5zZXJ0SW5kZXggPT09IGluc2VydEluZGV4KTtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hJbnNlcnRUYWJsZUNvbHVtbnMoaW5zZXJ0SW5kZXgsIGNvbHVtbnNDb3VudCwgdGFyZ2V0SW5kZXgsIGluaGVyaXRJbmRleCwgdGFibGUpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFxuICAgICAgICAgICAgU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydFRhYmxlQ29sdW1uc0NvbW1hbmQoY29sdW1uc0NvdW50LCBpbmhlcml0SW5kZXgsIGluc2VydEluZGV4LCB0YXJnZXRJbmRleCwgdGhpcy50YXJnZXRzKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnNlc3Npb24uaW5zZXJ0VGFibGVDb2x1bW5zKGluc2VydEluZGV4LCBjb2x1bW5zQ291bnQsIHRhcmdldEluZGV4LCBpbmhlcml0SW5kZXgpO1xuICAgICAgICB0aGlzLmNoYW5nZWRUYWJsZVNpemUoaW5zZXJ0SW5kZXgsIHNlc3Npb25JZCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlVGFibGVSb3dzKGluc2VydEluZGV4OiBudW1iZXIsIHN0YXJ0SW5kZXg6IG51bWJlciwgZW5kSW5kZXg6IG51bWJlciwgc2Vzc2lvbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZWd1bGF0b3JTZXJ2aWNlLnNldEN1c3RvbVNlc3Npb25Bc0N1cnJlbnQoc2Vzc2lvbklkKTtcbiAgICAgICAgY29uc3QgYmVmb3JlVGFibGUgPSBDb250ZW50SGVscGVyLmRvY3VtZW50SW5kZXhUb1BhcmFncmFwaEluZGV4KHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCBpbnNlcnRJbmRleCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnBsYWNlQ3Vyc29yKGJlZm9yZVRhYmxlKTtcbiAgICAgICAgY29uc3QgdGFibGUgPSB0aGlzLnNlc3Npb24ubW9kZWwudGFibGVzLmZpbmQoeCA9PiB4Lmluc2VydEluZGV4ID09PSBpbnNlcnRJbmRleCk7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoUmVtb3ZlVGFibGVSb3dzKGluc2VydEluZGV4LCBzdGFydEluZGV4LCBlbmRJbmRleCwgdGFibGUpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFNhdmVDb21tYW5kc0hlbHBlci5nZXRSZW1vdmVUYWJsZVJvd3NDb21tYW5kKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCBpbnNlcnRJbmRleCwgdGhpcy50YXJnZXRzKSk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVUYWJsZVJvd3MoaW5zZXJ0SW5kZXgsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgICAgICAgdGhpcy5jaGFuZ2VkVGFibGVTaXplKGluc2VydEluZGV4LCBzZXNzaW9uSWQpO1xuICAgIH1cblxuICAgIHJlbW92ZVRhYmxlQ29sdW1ucyhpbnNlcnRJbmRleDogbnVtYmVyLCBzdGFydEluZGV4OiBudW1iZXIsIGVuZEluZGV4OiBudW1iZXIsIHNlc3Npb25JZDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5zZXRDdXN0b21TZXNzaW9uQXNDdXJyZW50KHNlc3Npb25JZCk7XG4gICAgICAgIGNvbnN0IGJlZm9yZVRhYmxlID0gQ29udGVudEhlbHBlci5kb2N1bWVudEluZGV4VG9QYXJhZ3JhcGhJbmRleCh0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocywgaW5zZXJ0SW5kZXgpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZUN1cnNvcihiZWZvcmVUYWJsZSk7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy5zZXNzaW9uLm1vZGVsLnRhYmxlcy5maW5kKHggPT4geC5pbnNlcnRJbmRleCA9PT0gaW5zZXJ0SW5kZXgpO1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaFJlbW92ZVRhYmxlQ29sdW1ucyhpbnNlcnRJbmRleCwgc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRhYmxlKTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChcbiAgICAgICAgICAgIFNhdmVDb21tYW5kc0hlbHBlci5nZXRSZW1vdmVUYWJsZUNvbHVtbnNDb21tYW5kKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCBpbnNlcnRJbmRleCwgdGhpcy50YXJnZXRzKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlVGFibGVDb2x1bW5zKGluc2VydEluZGV4LCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIHRoaXMuY2hhbmdlZFRhYmxlU2l6ZShpbnNlcnRJbmRleCwgc2Vzc2lvbklkKTtcbiAgICB9XG5cbiAgICByZW1vdmVJbWFnZShpbnNlcnRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLmluZGV4ZXNUb1JhbmdlKGluc2VydEluZGV4LCBpbnNlcnRJbmRleCArIDEpO1xuICAgICAgICB0aGlzLnNhdmVSZW1vdmVUb0hpc3RvcnkocmFuZ2UpO1xuICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlKHJhbmdlKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVDdXJzb3IoKTtcbiAgICAgICAgdGhpcy50ZXh0SW5wdXQuaW5wdXQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICByZXNpemVUYWJsZUNvbHVtbnMocmVzaXplVGFibGVDb2x1bW5zOiBSZXNpemVUYWJsZUNvbHVtbnNNb2RlbCwgc2Vzc2lvbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZWd1bGF0b3JTZXJ2aWNlLnNldEN1c3RvbVNlc3Npb25Bc0N1cnJlbnQoc2Vzc2lvbklkKTtcbiAgICAgICAgY29uc3QgYmVmb3JlVGFibGUgPSBDb250ZW50SGVscGVyLmRvY3VtZW50SW5kZXhUb1BhcmFncmFwaEluZGV4KFxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsXG4gICAgICAgICAgICByZXNpemVUYWJsZUNvbHVtbnMuaW5zZXJ0SW5kZXhcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IoYmVmb3JlVGFibGUpO1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaFJlc2l6ZVRhYmxlQ29sdW1ucyhyZXNpemVUYWJsZUNvbHVtbnMpO1xuICAgICAgICB0aGlzLnNlc3Npb24ucmVzaXplVGFibGVDb2x1bW5zKHJlc2l6ZVRhYmxlQ29sdW1ucyk7XG4gICAgICAgIHRoaXMuY2hhbmdlZFRhYmxlU2l6ZShyZXNpemVUYWJsZUNvbHVtbnMuaW5zZXJ0SW5kZXgsIHNlc3Npb25JZCk7XG4gICAgfVxuXG4gICAgb25Nb3VzZVByZXNzZWRNb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5yZW5kZXJlci5zY3JlZW5Ub1RleHRDb29yZGluYXRlc1VzaW5nTWlkcG9pbnQoZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG4gICAgICAgIGNvbnN0IGN1cnNvciA9IHRoaXMuc2VsZWN0aW9uLmN1cnNvcjtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZVNlbGVjdGlvbihwb3NpdGlvbik7XG4gICAgICAgIGlmIChjdXJzb3IuY29sdW1uICE9PSB0aGlzLnNlbGVjdGlvbi5jdXJzb3IuY29sdW1uIHx8IGN1cnNvci5yb3cgIT09IHRoaXMuc2VsZWN0aW9uLmN1cnNvci5yb3cpIHtcbiAgICAgICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNjcm9sbEN1cnNvckludG9NYWluVmlldygpO1xuICAgIH1cblxuICAgIHNlYXJjaE9wdGlvblN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnNlYXJjaE9wdGlvbnMkLnN1YnNjcmliZShzZWFyY2hPcHRpb25zID0+IHtcbiAgICAgICAgICAgIHRoaXMuZmluZChzZWFyY2hPcHRpb25zKTtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5zZWFyY2hJdGVyYXRpb24gPSB0aGlzLnVwZGF0ZUNvdW50ZXIoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVwbGFjZVN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnJlcGxhY2UkLnN1YnNjcmliZShyZXBsYWNlID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVwbGFjZShyZXBsYWNlLnNlYXJjaFZhbHVlLCByZXBsYWNlLnJlcGxhY2VWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2Uuc2VhcmNoSXRlcmF0aW9uID0gdGhpcy51cGRhdGVDb3VudGVyKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldFRleHRTdHlsZXNTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5zZXRUZXh0U3R5bGVzJC5zdWJzY3JpYmUodGV4dFN0eWxlcyA9PiB7XG4gICAgICAgICAgICB0aGlzLmFwcGx5VGV4dFN0eWxlcyh0ZXh0U3R5bGVzKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2V0UGFyYWdyYXBoU3R5bGVzU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2Uuc2V0UGFyYWdyYXBoU3R5bGVzJC5zdWJzY3JpYmUocGFyYWdyYXBoU3R5bGVzID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlQYXJhZ3JhcGhTdHlsZXMocGFyYWdyYXBoU3R5bGVzKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2V0TnVtYmVyaW5nVGVtcGxhdGVUeXBlU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2Uuc2V0TnVtYmVyaW5nVGVtcGxhdGVUeXBlJC5zdWJzY3JpYmUobnVtYmVyaW5nVGVtcGxhdGVUeXBlID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0TnVtYmVyaW5nVGVtcGxhdGUobnVtYmVyaW5nVGVtcGxhdGVUeXBlKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlTnVtYmVyaW5nc1N1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnJlbW92ZU51bWJlcmluZ3MkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZU51bWJlcmluZ3NGcm9tUGFyYWdyYXBocygpO1xuICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXRJbWFnZVN0eWxlU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2Uuc2V0SW1hZ2VTdHlsZSQuc3Vic2NyaWJlKGltYWdlID0+IHRoaXMuYXBwbHlJbWFnZVN0eWxlcyhpbWFnZSkpO1xuICAgIH1cblxuICAgIGNoYW5nZUVsZW1lbnRTdHlsZVN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmNoYW5nZUVsZW1lbnRTdHlsZSQuc3Vic2NyaWJlKHggPT4gdGhpcy5hcHBseUVsZW1lbnRTdHlsZSh4KSk7XG4gICAgfVxuXG4gICAgY3JlYXRlQ3VzdG9tQ29tcG9uZW50U3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UuY3JlYXRlQ3VzdG9tQ29tcG9uZW50JC5zdWJzY3JpYmUobW9kZWwgPT4ge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVDdXN0b21FbGVtZW50KG1vZGVsKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW5zZXJ0QnJlYWtTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5pbnNlcnRCcmVhayQuc3Vic2NyaWJlKGJyZWFrVHlwZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluc2VydEJyZWFrKGJyZWFrVHlwZSk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGluc2VydEltYWdlU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UuaW5zZXJ0SW1hZ2UkLnN1YnNjcmliZShpbWFnZURhdGEgPT4ge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRJbWFnZShpbWFnZURhdGEpO1xuICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbnNlcnRMaW5rU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UuaW5zZXJ0TGluayQuc3Vic2NyaWJlKGxpbmtEYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0TGluayhuZXcgTGlua0RhdGFNb2RlbCh7IGxpbms6IGxpbmtEYXRhLmxpbmssIHRleHQ6IGxpbmtEYXRhLnRleHQgfSkpO1xuICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBlbmRNb3VzZVByZXNzU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UuZW5kTW91c2VQcmVzcyQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubW91c2VIYW5kbGVyLmVuZE1vdXNlUHJlc3MoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZGlzYWJsZVNlbGVjdGlvblN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmRpc2FibGVTZWxlY3Rpb24kLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5kaXNhYmxlU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmN1cnNvckxheWVyLmhpZGVDdXJzb3IoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2hhbmdlZFRhYmxlU2l6ZVN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmNoYW5nZWRUYWJsZVNpemUkLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZFRhYmxlU2l6ZShkYXRhLmluc2VydEluZGV4LCBkYXRhLnNlc3Npb25JZCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNoYW5nZWRFZGdlU2l6ZVN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmNoYW5nZWRFZGdlU2l6ZSQuc3Vic2NyaWJlKCh7IGVkZ2VUeXBlLCBwYWdlVHlwZSB9KSA9PlxuICAgICAgICAgICAgdGhpcy5tYWluU2Vzc2lvbi5kaXNwbGF5RGF0YS51cGRhdGVQYWdlVmVydGljYWxEYXRhKGVkZ2VUeXBlLCBwYWdlVHlwZSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpbWFnZUxvYWRlZFN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmltYWdlTG9hZGVkJC5zdWJzY3JpYmUoc2Vzc2lvbklkID0+IHRoaXMucmVndWxhdG9yU2VydmljZS5nZXRTZXNzaW9uKHNlc3Npb25JZCkub25SZW5kZXJlZCgpKTtcbiAgICB9XG5cbiAgICBjaGFuZ2VkRWRnZVN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmNoYW5nZWRFZGdlJC5zdWJzY3JpYmUoc2Vzc2lvbklkID0+IHRoaXMucmVndWxhdG9yU2VydmljZS5hcnJhbmdlRWRnZUNoYW5nZShzZXNzaW9uSWQpKTtcbiAgICB9XG5cbiAgICBpbnNlcnRUYWJsZVJvd3NTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5pbnNlcnRUYWJsZVJvd3MkLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0VGFibGVSb3dzKGRhdGEuaW5zZXJ0SW5kZXgsIGRhdGEucm93c0NvdW50LCBkYXRhLnRhcmdldEluZGV4LCBkYXRhLmluaGVyaXRJbmRleCwgZGF0YS5zZXNzaW9uSWQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbnNlcnRUYWJsZUNvbHVtbnNTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5pbnNlcnRUYWJsZUNvbHVtbnMkLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0VGFibGVDb2x1bW5zKGRhdGEuaW5zZXJ0SW5kZXgsIGRhdGEuY29sdW1uc0NvdW50LCBkYXRhLnRhcmdldEluZGV4LCBkYXRhLmluaGVyaXRJbmRleCwgZGF0YS5zZXNzaW9uSWQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZW1vdmVUYWJsZVJvd3NTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5yZW1vdmVUYWJsZVJvd3MkLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVGFibGVSb3dzKGRhdGEuaW5zZXJ0SW5kZXgsIGRhdGEuc3RhcnRJbmRleCwgZGF0YS5lbmRJbmRleCwgZGF0YS5zZXNzaW9uSWQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZW1vdmVUYWJsZUNvbHVtbnNTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5yZW1vdmVUYWJsZUNvbHVtbnMkLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVGFibGVDb2x1bW5zKGRhdGEuaW5zZXJ0SW5kZXgsIGRhdGEuc3RhcnRJbmRleCwgZGF0YS5lbmRJbmRleCwgZGF0YS5zZXNzaW9uSWQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZW1vdmVkSW1hZ2VTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5yZW1vdmVJbWFnZSQuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVJbWFnZShkYXRhLmluc2VydEluZGV4KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVzaXplVGFibGVDb2x1bW5zU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UucmVzaXplVGFibGVDb2x1bW5zJC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZVRhYmxlQ29sdW1ucyhkYXRhLnJlc2l6ZVRhYmxlQ29sdW1ucywgZGF0YS5zZXNzaW9uSWQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbnNlcnRUYWJsZVN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmluc2VydFRhYmxlJC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluc2VydFRhYmxlKGRhdGEpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbnNlcnRUZXh0U3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UuaW5zZXJ0VGV4dCQuc3Vic2NyaWJlKHggPT4ge1xuICAgICAgICAgICAgdGhpcy5ibHVyQ3VzdG9tQ29tcG9uZW50KCk7XG4gICAgICAgICAgICB0aGlzLmluc2VydCh4KTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdW5kb1N1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnVuZG8kLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuZG8oKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsQ3Vyc29ySW50b01haW5WaWV3KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlZG9TdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5yZWRvJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWRvKCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbEN1cnNvckludG9NYWluVmlldygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBibHVyQ3VzdG9tQ29tcG9uZW50U3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UuYmx1ckN1c3RvbUNvbXBvbmVudCQuc3Vic2NyaWJlKCgpID0+IHRoaXMuYmx1ckN1c3RvbUNvbXBvbmVudCgpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHByaW50U3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UucHJpbnQkLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uUHJpbnQoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjdXRTZWxlY3RlZFN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmN1dFNlbGVjdGVkJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkN1dChuZXcgQ2xpcGJvYXJkRXZlbnQoJ2N1dCcpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb3B5U2VsZWN0ZWRTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5jb3B5U2VsZWN0ZWQkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uQ29weShuZXcgQ2xpcGJvYXJkRXZlbnQoJ2NvcHknKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFzdGVGcm9tQ2xpcGJvYXJkU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UucGFzdGVGcm9tQ2xpcGJvYXJkJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWFkQ2xpcGJvYXJkKClcbiAgICAgICAgICAgICAgICAudGhlbihkYXRhID0+IHRoaXMucGFzdGVEYXRhKGRhdGEpKVxuICAgICAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnRpbnVlIHJlZ2FyZGxlc3MgZXJyb3JcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyByZWFkQ2xpcGJvYXJkKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IHJlYWQgPSBhd2FpdCBuYXZpZ2F0b3IucGVybWlzc2lvbnMucXVlcnkoeyBuYW1lOiAnY2xpcGJvYXJkLXJlYWQnIGFzIFBlcm1pc3Npb25OYW1lIH0pO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBpZiAobmF2aWdhdG9yLmNsaXBib2FyZCAmJiByZWFkLnN0YXRlICE9ICdkZW5pZWQnKSB7XG4gICAgICAgICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZFxuICAgICAgICAgICAgICAgICAgICAucmVhZFRleHQoKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb250aW51ZSByZWdhcmRsZXNzIGVycm9yXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuY2xpcGJvYXJkRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFzdGVEYXRhKGRhdGE6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ZXh0ID0gZGF0YS5yZXBsYWNlKC9cXHJcXG4vZywgJ1xcbicpLnJlcGxhY2UoL1xcdC9nLCAnICcpO1xuICAgICAgICB0aGlzLmluc2VydCh0ZXh0KTtcbiAgICAgICAgdGhpcy5zY3JvbGxDdXJzb3JJbnRvTWFpblZpZXcoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNlbGVjdEFsbFN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnNlbGVjdEFsbCQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdEFsbCh0aGlzLnNlc3Npb24ubW9kZWwpO1xuICAgICAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZVNlbGVjdGVkU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UucmVtb3ZlU2VsZWN0ZWQkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVNlbGVjdGVkKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xpcGJvYXJkRGF0YVN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmNsaXBib2FyZERhdGEkLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2xpcGJvYXJkRGF0YSA9IGRhdGE7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHVwZGF0ZUVkZ2VTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS51cGRhdGVFZGdlcyQuc3Vic2NyaWJlKHNlc3Npb25JZCA9PiB7XG4gICAgICAgICAgICBsZXQgZm9vdGVycyA9IHRoaXMubWFpblNlc3Npb24uY3VzdG9tQ29tcG9uZW50cy5lZGdlcy5mb290ZXJzQ29tcG9uZW50cztcbiAgICAgICAgICAgIGxldCBleGlzdGVkID0gdGhpcy5tYWluU2Vzc2lvbi5jdXN0b21Db21wb25lbnRzLmVkZ2VzLmhlYWRlcnNDb21wb25lbnRzLmZpbmRJbmRleCh4ID0+IHguaW5zdGFuY2Uuc2Vzc2lvbklkID09PSBzZXNzaW9uSWQpO1xuICAgICAgICAgICAgaWYgKGV4aXN0ZWQgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IHRoaXMubWFpblNlc3Npb24uY3VzdG9tQ29tcG9uZW50cy5lZGdlcy5oZWFkZXJzQ29tcG9uZW50cy5zbGljZShleGlzdGVkICsgMSk7XG4gICAgICAgICAgICAgICAgaGVhZGVycy5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgICAgICAgICAgICB4Lmluc3RhbmNlLnNlc3Npb24uZGlzcGxheURhdGEudXBkYXRlTmV4dExpbmVJbmRleGVzKDAsIHguaW5zdGFuY2Uuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBleGlzdGVkID0gdGhpcy5tYWluU2Vzc2lvbi5jdXN0b21Db21wb25lbnRzLmVkZ2VzLmZvb3RlcnNDb21wb25lbnRzLmZpbmRJbmRleCh4ID0+IHguaW5zdGFuY2Uuc2Vzc2lvbklkID09PSBzZXNzaW9uSWQpO1xuICAgICAgICAgICAgICAgIGZvb3RlcnMgPSB0aGlzLm1haW5TZXNzaW9uLmN1c3RvbUNvbXBvbmVudHMuZWRnZXMuZm9vdGVyc0NvbXBvbmVudHMuc2xpY2UoZXhpc3RlZCArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9vdGVycy5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgICAgICAgIHguaW5zdGFuY2Uuc2Vzc2lvbi5kaXNwbGF5RGF0YS51cGRhdGVOZXh0TGluZUluZGV4ZXMoMCwgeC5pbnN0YW5jZS5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
1367
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvZWRpdG9yL2V4ZWN1dGlvbi9lZGl0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDMUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDdEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDOUYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFFcEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFHcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsWUFBWSxFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDeEcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUtsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRWhFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3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Q2xILENBQUMsQ0FBQyxDQUFDO2FBQ047aUJBQU07Z0JBQ0gsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDO2dCQUN2SCxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQzthQUMxRjtZQUNELE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2hCLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDbEgsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENsaXBib2FyZCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jbGlwYm9hcmQnO1xuaW1wb3J0IHsgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEFkZE51bWJlcmluZ01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9hZGQtbnVtYmVyaW5nLm1vZGVsJztcbmltcG9ydCB7IEFwcGx5RWxlbWVudFN0eWxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2FwcGx5LWVsZW1lbnQtc3R5bGUubW9kZWwnO1xuaW1wb3J0IHsgQXBwbHlJbWFnZVN0eWxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2FwcGx5LWltYWdlLXN0eWxlLm1vZGVsJztcbmltcG9ydCB7IEFwcGx5UGFyYWdyYXBoU3R5bGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvYXBwbHktcGFyYWdyYXBoLXN0eWxlLm1vZGVsJztcbmltcG9ydCB7IEFwcGx5VGV4dFN0eWxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2FwcGx5LXRleHQtc3R5bGUubW9kZWwnO1xuaW1wb3J0IHsgQmFzZU5vZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9zaGFyZWQvYWJzdHJhY3QvYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnJlYWtIZWxwZXIgfSBmcm9tICcuLi9nYWRnZXRzL3BhZ2UtYnJlYWsvYnJlYWsuaGVscGVyJztcbmltcG9ydCB7IEJyZWFrTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2JyZWFrLm1vZGVsJztcbmltcG9ydCB7IEJyZWFrVHlwZXMgfSBmcm9tICcuLi9nYWRnZXRzL3BhZ2UtYnJlYWsvYnJlYWstdHlwZXMuZW51bSc7XG5pbXBvcnQgeyBDb21tYW5kTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2NvbW1hbmQubW9kZWwnO1xuaW1wb3J0IHsgQ29tbWFuZHNTZXJ2aWNlIH0gZnJvbSAnLi4vb3BlcmF0aW9ucy9jb21tYW5kcy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbnRlbnRIZWxwZXIgfSBmcm9tICcuLi9wb3NpdGlvbmluZy9jb250ZW50LmhlbHBlcic7XG5pbXBvcnQgeyBDb250ZW50U3R5bGVIZWxwZXIgfSBmcm9tICcuLi9jb250ZW50L2hlbHBlcnMvY29udGVudC1zdHlsZS5oZWxwZXInO1xuaW1wb3J0IHsgQ3Vyc29yUGFyYWdyYXBoIH0gZnJvbSAnLi4vcG9zaXRpb25pbmcvY3Vyc29yLXBhcmFncmFwaCc7XG5pbXBvcnQgeyBDVVNUT01fRUxFTUVOVF9NQVJLRVIsIFRBQkxFX01BUktFUiB9IGZyb20gJy4uL2NvbXBvbmVudHMvc2hhcmVkL2N1c3RvbS1jb250ZW50LW1hcmtlcnMuY29uc3QnO1xuaW1wb3J0IHsgRGVsZXRlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2RlbGV0ZS5tb2RlbCc7XG5pbXBvcnQgeyBEb2N1bWVudEhhbmRsZXIgfSBmcm9tICcuLi9pbnRlcmFjdGlvbi9kb2N1bWVudC5oYW5kbGVyJztcbmltcG9ydCB7IERvY3hNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvZG9jeC5tb2RlbCc7XG5pbXBvcnQgeyBFZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJhY3Rpb24vZWRpdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWRpdFNlc3Npb24gfSBmcm9tICcuL2VkaXQuc2Vzc2lvbic7XG5pbXBvcnQgeyBFbGVtZW50RGF0YU1vZGVsIH0gZnJvbSAnLi4vY29tcG9uZW50cy9leHRlcm5hbC1lbGVtZW50L21vZGVscy9lbGVtZW50LWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgRWxlbWVudE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9lbGVtZW50Lm1vZGVsJztcbmltcG9ydCB7IEZvcm1hdEhlbHBlciB9IGZyb20gJy4uL2NvbnRlbnQvaGVscGVycy9mb3JtYXQuaGVscGVyJztcbmltcG9ydCB7IEltYWdlRGF0YU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9pbWFnZS1kYXRhLm1vZGVsJztcbmltcG9ydCB7IEltYWdlSGVscGVyIH0gZnJvbSAnLi9oZWxwZXJzL2ltYWdlLmhlbHBldCc7XG5pbXBvcnQgeyBJbWFnZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9pbWFnZS5tb2RlbCc7XG5pbXBvcnQgeyBJbmRleGVkRWxlbWVudEhlbHBlciB9IGZyb20gJy4uL2NvbnRlbnQvaGVscGVycy9pbmRleGVkLWVsZW1lbnQuaGVscGVyJztcbmltcG9ydCB7IElucHV0SGFuZGxlciB9IGZyb20gJy4uL2ludGVyYWN0aW9uL2lucHV0LmhhbmRsZXInO1xuaW1wb3J0IHsgSW5zZXJ0QnJlYWtNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LWJyZWFrLm1vZGVsJztcbmltcG9ydCB7IEluc2VydEVsZW1lbnRNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LWVsZW1lbnQubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0SW1hZ2VNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LWltYWdlLm1vZGVsJztcbmltcG9ydCB7IEluc2VydExpbmtNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LWxpbmsubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0UGFyYWdyYXBoTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2luc2VydC1wYXJhZ3JhcGgubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0U3R5bGVkVGV4dE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9pbnNlcnQtc3R5bGVkLXRleHQubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0VGFibGVDb2x1bW5zTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2luc2VydC10YWJsZS1jb2x1bW5zLm1vZGVsJztcbmltcG9ydCB7IEluc2VydFRhYmxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2luc2VydC10YWJsZS5tb2RlbCc7XG5pbXBvcnQgeyBJbnNlcnRUYWJsZVJvd3NNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LXRhYmxlLXJvd3MubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0VGFiTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2luc2VydC10YWIubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0VGV4dE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9pbnNlcnQtdGV4dC5tb2RlbCc7XG5pbXBvcnQgeyBMaW5rRGF0YU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9saW5rLWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgTGlua0hlbHBlciB9IGZyb20gJy4uL2NvbnRlbnQvaGVscGVycy9saW5rLmhlbHBlcic7XG5pbXBvcnQgeyBMaW5rTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2xpbmsubW9kZWwnO1xuaW1wb3J0IHsgTW91c2VIYW5kbGVyIH0gZnJvbSAnLi4vaW50ZXJhY3Rpb24vbW91c2UuaGFuZGxlcic7XG5pbXBvcnQgeyBORVdfTElORV9NQVJLVVAgfSBmcm9tICcuLi9jb250ZW50L2NvbnN0YW50cy9lZGl0b3IuY29uc3QnO1xuaW1wb3J0IHsgTnVtYmVyaW5nTGV2ZWxNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvbnVtYmVyaW5nLWxldmVsLm1vZGVsJztcbmltcG9ydCB7IE9wZXJhdGlvbiB9IGZyb20gJy4uL2dhZGdldHMvaGlzdG9yeS9vcGVyYXRpb24udHlwZSc7XG5pbXBvcnQgeyBPcGVyYXRpb25IaXN0b3J5IH0gZnJvbSAnLi4vZ2FkZ2V0cy9oaXN0b3J5L29wZXJhdGlvbi1oaXN0b3J5JztcbmltcG9ydCB7IFBhcmFncmFwaE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9wYXJhZ3JhcGgubW9kZWwnO1xuaW1wb3J0IHsgUGFyYWdyYXBoU3R5bGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcGFyYWdyYXBoLXN0eWxlLm1vZGVsJztcbmltcG9ydCB7IFBvc2l0aW9uSGVscGVyIH0gZnJvbSAnLi4vcG9zaXRpb25pbmcvcG9zaXRpb24uaGVscGVyJztcbmltcG9ydCB7IFByaW50SGVscGVyIH0gZnJvbSAnLi4vZGlzcGxheS9wcmludC9wcmludC5oZWxwZXInO1xuaW1wb3J0IHsgUmFuZ2UgfSBmcm9tICcuLi9wb3NpdGlvbmluZy9yYW5nZSc7XG5pbXBvcnQgeyBSZWd1bGF0b3JTZXJ2aWNlIH0gZnJvbSAnLi9yZWd1bGF0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBSZW1vdmVOdW1iZXJpbmdzTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3JlbW92ZS1udW1iZXJpbmdzLm1vZGVsJztcbmltcG9ydCB7IFJlbW92ZVRhYmxlQ29sdW1uc01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9yZW1vdmUtdGFibGUtY29sdW1ucy5tb2RlbCc7XG5pbXBvcnQgeyBSZW1vdmVUYWJsZVJvd3NNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcmVtb3ZlLXRhYmxlLXJvd3MubW9kZWwnO1xuaW1wb3J0IHsgUmVuZGVyZXIgfSBmcm9tICcuLi9kaXNwbGF5L3JlbmRlcmVyJztcbmltcG9ydCB7IFJlcGxhY2VNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcmVwbGFjZS5tb2RlbCc7XG5pbXBvcnQgeyBSZXNpemVUYWJsZUNvbHVtbnNNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcmVzaXplLXRhYmxlLWNvbHVtbnMubW9kZWwnO1xuaW1wb3J0IHsgUmVzdG9yZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9yZXN0b3JlLm1vZGVsJztcbmltcG9ydCB7IFJlc3RvcmVOdW1iZXJpbmdzTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3Jlc3RvcmUtbnVtYmVyaW5ncy5tb2RlbCc7XG5pbXBvcnQgeyBSZXN0b3JlUGFyYWdyYXBoU3R5bGVzTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3Jlc3RvcmUtcGFyYWdyYXBoLXN0eWxlcy5tb2RlbCc7XG5pbXBvcnQgeyBSZXN0b3JlVGFibGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcmVzdG9yZS10YWJsZS5tb2RlbCc7XG5pbXBvcnQgeyBSZXN0b3JlVGV4dFN0eWxlc01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9yZXN0b3JlLXRleHQtc3R5bGVzLm1vZGVsJztcbmltcG9ydCB7IFNhdmVDb21tYW5kc0hlbHBlciB9IGZyb20gJy4uL29wZXJhdGlvbnMvc2F2ZS1jb21tYW5kcy5oZWxwZXInO1xuaW1wb3J0IHsgU2NhbGluZ0hlbHBlciB9IGZyb20gJy4uL2NvbnRlbnQvaGVscGVycy9zY2FsaW5nLmhlbHBlcic7XG5pbXBvcnQgeyBTZWFyY2gsIFNlYXJjaE9wdGlvbnMgfSBmcm9tICcuLi9nYWRnZXRzL3NlYXJjaC9zZWFyY2gnO1xuaW1wb3J0IHsgU2VhcmNoSXRlcmF0aW9uIH0gZnJvbSAnLi4vZ2FkZ2V0cy9zZWFyY2gvc2VhcmNoLWl0ZXJhdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU2VsZWN0aW9uIH0gZnJvbSAnLi4vcG9zaXRpb25pbmcvc2VsZWN0aW9uJztcbmltcG9ydCB7IFRhYmxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3RhYmxlLm1vZGVsJztcbmltcG9ydCB7IFRhYk1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC90YWIubW9kZWwnO1xuaW1wb3J0IHsgVGFyZ2V0TW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3RhcmdldC5tb2RlbCc7XG5pbXBvcnQgeyBUZXh0SW5wdXQgfSBmcm9tICcuLi9pbnRlcmFjdGlvbi90ZXh0LWlucHV0JztcbmltcG9ydCB7IFRleHRTdHlsZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC90ZXh0LXN0eWxlLm1vZGVsJztcbmltcG9ydCB7IFZpcnR1YWxSZW5kZXJlciB9IGZyb20gJy4uL2Rpc3BsYXkvdmlydHVhbC5yZW5kZXJlcic7XG5cbmV4cG9ydCBjbGFzcyBFZGl0b3Ige1xuICAgIHJlYWRvbmx5IE1BWF9DT1VOVCA9IDk5OTtcblxuICAgIHJlYWRvbmx5IHBhcmVudFRhZ05hbWUgPSAnQVBQLU5PRC1FRElUT1InO1xuXG4gICAgcmVhZG9ubHkgdGFibGVDZWxsVGFnTmFtZSA9ICdBUFAtTk9ELVRBQkxFLUNFTEwnO1xuXG4gICAgcmVhZG9ubHkgZWRnZUVsZW1lbnRUYWdOYW1lID0gJ0FQUC1OT0QtRURHRSc7XG5cbiAgICByZWFkb25seSBpbWFnZVRhZ05hbWUgPSAnQVBQLU5PRC1JTUFHRSc7XG5cbiAgICByZWFkb25seSBjdXN0b21FbGVtZW50VGFnTmFtZXM6IHN0cmluZ1tdO1xuXG4gICAgcmVhZG9ubHkgaGlzdG9yeTogT3BlcmF0aW9uSGlzdG9yeTtcblxuICAgIGdldCBtYWluU2Vzc2lvbigpOiBFZGl0U2Vzc2lvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ3VsYXRvclNlcnZpY2UubWFpblNlc3Npb24uc2Vzc2lvbjtcbiAgICB9XG5cbiAgICBnZXQgbWFpblJlbmRlcmVyKCk6IFZpcnR1YWxSZW5kZXJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ3VsYXRvclNlcnZpY2UubWFpblNlc3Npb24ucmVuZGVyZXIgYXMgVmlydHVhbFJlbmRlcmVyO1xuICAgIH1cblxuICAgIGdldCBzZXNzaW9uKCk6IEVkaXRTZXNzaW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVndWxhdG9yU2VydmljZS5jdXJyZW50U2Vzc2lvbi5zZXNzaW9uO1xuICAgIH1cblxuICAgIGdldCByZW5kZXJlcigpOiBSZW5kZXJlciB8IFZpcnR1YWxSZW5kZXJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ3VsYXRvclNlcnZpY2UuY3VycmVudFNlc3Npb24ucmVuZGVyZXI7XG4gICAgfVxuXG4gICAgZ2V0IGlzVmlld09ubHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UuaXNWaWV3T25seTtcbiAgICB9XG5cbiAgICBnZXQgdGFyZ2V0cygpOiBUYXJnZXRNb2RlbFtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVndWxhdG9yU2VydmljZS5nZXRDdXJyZW50U2Vzc2lvblRhcmdldHMoKTtcbiAgICB9XG5cbiAgICBzZWxlY3Rpb246IFNlbGVjdGlvbjtcblxuICAgIG1vdXNlSGFuZGxlcjogTW91c2VIYW5kbGVyO1xuXG4gICAgaW5wdXRIYW5kbGVyOiBJbnB1dEhhbmRsZXI7XG5cbiAgICBkb2N1bWVudEhhbmRsZXI6IERvY3VtZW50SGFuZGxlcjtcblxuICAgIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgICBwcml2YXRlIHNlYXJjaDogU2VhcmNoO1xuXG4gICAgcHJpdmF0ZSB0ZXh0SW5wdXQ6IFRleHRJbnB1dDtcblxuICAgIHByaXZhdGUgY2xpcGJvYXJkRGF0YTogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgbW9kZWw6IERvY3hNb2RlbCxcbiAgICAgICAgcHJpdmF0ZSBjb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBwcml2YXRlIGVkaXRvclNlcnZpY2U6IEVkaXRvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVndWxhdG9yU2VydmljZTogUmVndWxhdG9yU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb21tYW5kc1NlcnZpY2U6IENvbW1hbmRzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjbGlwYm9hcmQ6IENsaXBib2FyZCxcbiAgICAgICAgcHJpdmF0ZSBleHRlcm5hbEVsZW1lbnRUYWdOYW1lczogc3RyaW5nW10sXG4gICAgICAgIHByaXZhdGUgY3VzdG9tUGFnZVdpZHRoPzogbnVtYmVyXG4gICAgKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMucmVjZWl2ZVRleHRTdHlsZVN1YnNjcmlwdGlvbigpKTtcbiAgICAgICAgdGhpcy5jdXN0b21FbGVtZW50VGFnTmFtZXMgPSBbLi4udGhpcy5leHRlcm5hbEVsZW1lbnRUYWdOYW1lcywgdGhpcy5pbWFnZVRhZ05hbWUsIHRoaXMudGFibGVDZWxsVGFnTmFtZSwgdGhpcy5lZGdlRWxlbWVudFRhZ05hbWVdO1xuICAgICAgICB0aGlzLmhpc3RvcnkgPSBuZXcgT3BlcmF0aW9uSGlzdG9yeShlZGl0b3JTZXJ2aWNlLCByZWd1bGF0b3JTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKCk7XG4gICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5zZXRTZWxlY3Rpb24odGhpcy5zZWxlY3Rpb24pO1xuICAgICAgICB0aGlzLmluaXRNYWluU2Vzc2lvbigpO1xuICAgICAgICB0aGlzLnRleHRJbnB1dCA9IG5ldyBUZXh0SW5wdXQodGhpcy5tYWluUmVuZGVyZXIuY29udGFpbmVyKTtcbiAgICAgICAgdGhpcy5tYWluUmVuZGVyZXIudGV4dGFyZWEgPSB0aGlzLnRleHRJbnB1dC5pbnB1dDtcbiAgICAgICAgdGhpcy5tb3VzZUhhbmRsZXIgPSBuZXcgTW91c2VIYW5kbGVyKHRoaXMubWFpblJlbmRlcmVyLmNvbnRhaW5lciwgdGhpcyk7XG4gICAgICAgIHRoaXMuaW5wdXRIYW5kbGVyID0gbmV3IElucHV0SGFuZGxlcih0aGlzLnRleHRJbnB1dC5pbnB1dCwgdGhpcyk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRIYW5kbGVyID0gbmV3IERvY3VtZW50SGFuZGxlcih0aGlzKTtcbiAgICAgICAgdGhpcy5pbml0UmVzaXplTGlzdGVuZXIoKTtcbiAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICB0aGlzLnNlc3Npb24uYXBwbHlUb29sYmFyU3R5bGVzKCk7XG5cbiAgICAgICAgdGhpcy5zZWFyY2ggPSBuZXcgU2VhcmNoKCk7XG4gICAgICAgIHRoaXMuc2VhcmNoLnNldCh7IHdyYXA6IHRydWUgfSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkRWRnZVNpemVTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZEVkZ2VTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZFRhYmxlU2l6ZVN1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VFbGVtZW50U3R5bGVTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuY2xpcGJvYXJkRGF0YVN1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5jb3B5U2VsZWN0ZWRTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQ3VzdG9tQ29tcG9uZW50U3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLmN1dFNlbGVjdGVkU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVTZWxlY3Rpb25TdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuZW5kTW91c2VQcmVzc1N1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5pbWFnZUxvYWRlZFN1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5pbnNlcnRCcmVha1N1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5pbnNlcnRJbWFnZVN1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5pbnNlcnRMaW5rU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLmluc2VydFRhYmxlQ29sdW1uc1N1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5pbnNlcnRUYWJsZVJvd3NTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0VGFibGVTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0VGV4dFN1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5wYXN0ZUZyb21DbGlwYm9hcmRTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMucHJpbnRTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMucmVkb1N1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5yZW1vdmVMZWZ0U3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLnJlbW92ZU51bWJlcmluZ3NTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlUmlnaHRTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWRTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVGFibGVDb2x1bW5zU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLnJlbW92ZVRhYmxlUm93c1N1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5yZXBsYWNlU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLnJlc2l6ZVRhYmxlQ29sdW1uc1N1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5zZWFyY2hPcHRpb25TdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0QWxsU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLnNldEltYWdlU3R5bGVTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuc2V0TnVtYmVyaW5nVGVtcGxhdGVUeXBlU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLnNldFBhcmFncmFwaFN0eWxlc1N1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5zZXRUZXh0U3R5bGVzU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLnVuZG9TdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRWRnZVN1YnNjcmlwdGlvbigpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2gocyA9PiBzPy51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgdGhpcy5kZXN0cm95UmVzaXplTGlzdGVuZXIoKTtcbiAgICAgICAgdGhpcy5tb3VzZUhhbmRsZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmlucHV0SGFuZGxlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRIYW5kbGVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uYmx1cigpO1xuICAgIH1cblxuICAgIHNlbGVjdFBhZ2VEb3duKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLm1haW5SZW5kZXJlci5sYXllckNvbmZpZztcbiAgICAgICAgY29uc3QgbGluZSA9IGNvbmZpZy52aXNpYmxlUmFuZ2UuZW5kU2NyZWVuTGluZTtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSBQb3NpdGlvbkhlbHBlci5zY3JlZW5Ub0RvY3VtZW50KHRoaXMubWFpblNlc3Npb24sIGxpbmUsIDApO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlU2VsZWN0aW9uKHBvc2l0aW9uKTtcbiAgICAgICAgdGhpcy5tYWluUmVuZGVyZXIuc2Nyb2xsQnkoY29uZmlnLmhlaWdodCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsQ3Vyc29ySW50b01haW5WaWV3KDAuNSk7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBzZWxlY3RQYWdlVXAoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMubWFpblJlbmRlcmVyLmxheWVyQ29uZmlnO1xuICAgICAgICBjb25zdCBsaW5lID0gY29uZmlnLnZpc2libGVSYW5nZS5zdGFydFNjcmVlbkxpbmU7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gUG9zaXRpb25IZWxwZXIuc2NyZWVuVG9Eb2N1bWVudCh0aGlzLm1haW5TZXNzaW9uLCBsaW5lLCAwKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZVNlbGVjdGlvbihwb3NpdGlvbik7XG4gICAgICAgIHRoaXMubWFpblJlbmRlcmVyLnNjcm9sbEJ5KC1jb25maWcuaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5zY3JvbGxDdXJzb3JJbnRvTWFpblZpZXcoMC41KTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIGdvdG9QYWdlRG93bigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5tYWluUmVuZGVyZXIubGF5ZXJDb25maWc7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBjb25maWcudmlzaWJsZVJhbmdlLmVuZFNjcmVlbkxpbmU7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gUG9zaXRpb25IZWxwZXIuc2NyZWVuVG9Eb2N1bWVudCh0aGlzLm1haW5TZXNzaW9uLCBsaW5lLCAwKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IocG9zaXRpb24pO1xuICAgICAgICB0aGlzLm1haW5SZW5kZXJlci5zY3JvbGxCeShjb25maWcuaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5zY3JvbGxDdXJzb3JJbnRvTWFpblZpZXcoMC41KTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIGdvdG9QYWdlVXAoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMubWFpblJlbmRlcmVyLmxheWVyQ29uZmlnO1xuICAgICAgICBjb25zdCBsaW5lID0gY29uZmlnLnZpc2libGVSYW5nZS5zdGFydFNjcmVlbkxpbmU7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gUG9zaXRpb25IZWxwZXIuc2NyZWVuVG9Eb2N1bWVudCh0aGlzLm1haW5TZXNzaW9uLCBsaW5lLCAwKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IocG9zaXRpb24pO1xuICAgICAgICB0aGlzLm1haW5SZW5kZXJlci5zY3JvbGxCeSgtY29uZmlnLmhlaWdodCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsQ3Vyc29ySW50b01haW5WaWV3KDAuNSk7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBjdXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWQoKTtcbiAgICB9XG5cbiAgICBpbnNlcnQodGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0U3R5bGUgPSBDb250ZW50U3R5bGVIZWxwZXIuY29tYmluZVRleHRTdHlsZXMobnVsbCwgdGhpcy5lZGl0b3JTZXJ2aWNlLnN0eWxlcyBhcyBUZXh0U3R5bGVNb2RlbCk7XG4gICAgICAgICAgICB0aGlzLmluc2VydFRleHQodGV4dCwgdGV4dFN0eWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGluc2VydEluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhUb0RvY3VtZW50SW5kZXgoXG4gICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQucm93LFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnJhbmdlLnN0YXJ0LmNvbHVtblxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IGluc2VydFRleHQgPSBuZXcgSW5zZXJ0VGV4dE1vZGVsKHsgaW5zZXJ0SW5kZXgsIHRleHQgfSk7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VCeShuZXcgUmVwbGFjZU1vZGVsKHsgaW5zZXJ0VGV4dCB9KSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbnNlcnRUZXh0KHRleHQ6IHN0cmluZywgdGV4dFN0eWxlOiBUZXh0U3R5bGVNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuc2VsZWN0aW9uLmN1cnNvcjtcbiAgICAgICAgaWYgKHRleHRTdHlsZSkge1xuICAgICAgICAgICAgdGhpcy5zYXZlSW5zZXJ0U3R5bGVkVGV4dFRvSGlzdG9yeShwb3NpdGlvbi5yb3csIHBvc2l0aW9uLmNvbHVtbiwgdGV4dCwgdGV4dFN0eWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2F2ZUluc2VydFRleHRUb0hpc3RvcnkocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4sIHRleHQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5pbnNlcnRUZXh0KHBvc2l0aW9uLCB0ZXh0LCB0ZXh0U3R5bGUpO1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlTGVmdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdExlZnQodGhpcy5zZXNzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZVNlbGVjdGVkKCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlUmlnaHQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RSaWdodCh0aGlzLnNlc3Npb24pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWQoKTtcbiAgICB9XG5cbiAgICBpbnNlcnRCcmVhayhicmVha1R5cGU6IEJyZWFrVHlwZXMpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5zZXJ0SW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFRvRG9jdW1lbnRJbmRleChcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLFxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQucm93LFxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQuY29sdW1uXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGluc2VydEJyZWFrID0gbmV3IEluc2VydEJyZWFrTW9kZWwoeyBpbnNlcnRJbmRleCwgYnJlYWtUeXBlIH0pO1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUJ5KG5ldyBSZXBsYWNlTW9kZWwoeyBpbnNlcnRCcmVhayB9KSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYnJlYWtUeXBlID09PSBCcmVha1R5cGVzLkNvbHVtbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zYXZlSW5zZXJ0QnJlYWtUb0hpc3RvcnkoaW5zZXJ0QnJlYWspO1xuICAgICAgICBjb25zdCBlbmRQb2ludCA9IHRoaXMuc2Vzc2lvbi5pbnNlcnRCcmVhayh0aGlzLnNlbGVjdGlvbi5jdXJzb3IsIGJyZWFrVHlwZSk7XG4gICAgICAgIGxldCBsYXN0Um93ID0gdGhpcy5zZWxlY3Rpb24uY3Vyc29yLnJvdyA9PT0gZW5kUG9pbnQucm93ID8gZW5kUG9pbnQucm93IDogSW5maW5pdHk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlTGluZXModGhpcy5zZWxlY3Rpb24uY3Vyc29yLnJvdywgbGFzdFJvdyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCk7XG4gICAgICAgIHRoaXMucmVyZW5kZXJNYXJrZXIoKTtcbiAgICAgICAgdGhpcy5zY3JvbGxDdXJzb3JJbnRvTWFpblZpZXcoMC4xKTtcbiAgICB9XG5cbiAgICBpbnNlcnRUYWIoKSB7XG4gICAgICAgIGNvbnN0IGluc2VydEluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhUb0RvY3VtZW50SW5kZXgoXG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocyxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnJhbmdlLnN0YXJ0LnJvdyxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnJhbmdlLnN0YXJ0LmNvbHVtblxuICAgICAgICApO1xuICAgICAgICBjb25zdCBpbnNlcnRUYWIgPSBuZXcgSW5zZXJ0VGFiTW9kZWwoeyBpbnNlcnRJbmRleCB9KTtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VCeShuZXcgUmVwbGFjZU1vZGVsKHsgaW5zZXJ0VGFiIH0pKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2F2ZUluc2VydFRhYlRvSGlzdG9yeShpbnNlcnRUYWIpO1xuICAgICAgICBjb25zdCBlbmRQb2ludCA9IHRoaXMuc2Vzc2lvbi5pbnNlcnRUYWIodGhpcy5zZWxlY3Rpb24uY3Vyc29yKTtcbiAgICAgICAgdGhpcy5vbkRvY3VtZW50Q2hhbmdlKG5ldyBSYW5nZSh0aGlzLnNlbGVjdGlvbi5jdXJzb3IsIGVuZFBvaW50KSk7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBpbnNlcnRJbWFnZShpbWFnZURhdGE6IEltYWdlRGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFkanVzdGVkSW1hZ2UgPSBJbWFnZUhlbHBlci5nZXRJbWFnZVdpdGhBbGxvd2VkU2l6ZShpbWFnZURhdGEsIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5jb250ZW50V2lkdGgpO1xuICAgICAgICBjb25zdCBpbnNlcnRJbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoVG9Eb2N1bWVudEluZGV4KFxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydC5yb3csXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydC5jb2x1bW5cbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaW5zZXJ0SW1hZ2UgPSBuZXcgSW5zZXJ0SW1hZ2VNb2RlbCh7IGluc2VydEluZGV4LCBpbWFnZURhdGE6IGFkanVzdGVkSW1hZ2UgfSk7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSkge1xuICAgICAgICAgICAgdGhpcy5yZXBsYWNlQnkobmV3IFJlcGxhY2VNb2RlbCh7IGluc2VydEltYWdlIH0pKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2F2ZUluc2VydEltYWdlVG9IaXN0b3J5KGluc2VydEltYWdlKTtcbiAgICAgICAgY29uc3QgZW5kUG9pbnQgPSB0aGlzLnNlc3Npb24uaW5zZXJ0SW1hZ2UodGhpcy5zZWxlY3Rpb24uY3Vyc29yLCBhZGp1c3RlZEltYWdlKTtcbiAgICAgICAgbGV0IGxhc3RSb3cgPSB0aGlzLnNlbGVjdGlvbi5jdXJzb3Iucm93ID09PSBlbmRQb2ludC5yb3cgPyBlbmRQb2ludC5yb3cgOiBJbmZpbml0eTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVMaW5lcyh0aGlzLnNlbGVjdGlvbi5jdXJzb3Iucm93LCBsYXN0Um93KTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVDdXJzb3IoKTtcbiAgICAgICAgdGhpcy5yZXJlbmRlck1hcmtlcigpO1xuICAgIH1cblxuICAgIGluc2VydExpbmsobGlua0RhdGFNb2RlbDogTGlua0RhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbnNlcnRJbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoVG9Eb2N1bWVudEluZGV4KFxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydC5yb3csXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydC5jb2x1bW5cbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaW5zZXJ0TGluayA9IG5ldyBJbnNlcnRMaW5rTW9kZWwoeyBpbnNlcnRJbmRleCwgZW5kSW5kZXg6IGluc2VydEluZGV4ICsgbGlua0RhdGFNb2RlbC50ZXh0Lmxlbmd0aCwgbGlua0RhdGFNb2RlbCB9KTtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VCeShuZXcgUmVwbGFjZU1vZGVsKHsgaW5zZXJ0TGluayB9KSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNhdmVJbnNlcnRMaW5rVG9IaXN0b3J5KGluc2VydExpbmspO1xuICAgICAgICB0aGlzLnNlc3Npb24uaW5zZXJ0TGluayh0aGlzLnNlbGVjdGlvbi5jdXJzb3IsIGxpbmtEYXRhTW9kZWwpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgICAgICB0aGlzLnJlcmVuZGVyTWFya2VyKCk7XG4gICAgfVxuXG4gICAgaW5zZXJ0VGFibGUodGFibGVEYXRhOiB7IHJvd3M6IG51bWJlcjsgY29sdW1uczogbnVtYmVyIH0pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5zZXJ0SW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFRvRG9jdW1lbnRJbmRleChcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLFxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQucm93LFxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQuY29sdW1uXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgaW5zZXJ0VGFibGUgPSBuZXcgSW5zZXJ0VGFibGVNb2RlbCh7XG4gICAgICAgICAgICBpbnNlcnRJbmRleCxcbiAgICAgICAgICAgIGluc2VydFRhYmxlSW5kZXg6IGluc2VydEluZGV4LFxuICAgICAgICAgICAgcm93c0NvdW50OiB0YWJsZURhdGEucm93cyxcbiAgICAgICAgICAgIGNvbHVtbnNDb3VudDogdGFibGVEYXRhLmNvbHVtbnMsXG4gICAgICAgICAgICBjb250ZW50OiBUQUJMRV9NQVJLRVJcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHNbdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQucm93XS5wYXJhZ3JhcGhTZXR0aW5ncy5udW1iZXJpbmdEYXRhLm51bWJlcmluZ0lkIHx8XG4gICAgICAgICAgICAhdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMuc29tZSh4ID0+IHguc3RhcnRJbmRleCA9PT0gaW5zZXJ0SW5kZXgpIHx8XG4gICAgICAgICAgICAhdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLmlzTmV3TGluZVN5bWJvbChpbnNlcnRJbmRleClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmluc2VydFRhYmxlSW5OZXdQYXJhZ3JhcGgoaW5zZXJ0VGFibGUsIGluc2VydEluZGV4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0VGFibGVJbkN1cnJlbnRQYXJhZ3JhcGgoaW5zZXJ0VGFibGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5zZXJ0VGFibGVJbk5ld1BhcmFncmFwaChpbnNlcnRUYWJsZTogSW5zZXJ0VGFibGVNb2RlbCwgaW5zZXJ0SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBpbnNlcnRQYXJhZ3JhcGggPSBuZXcgSW5zZXJ0UGFyYWdyYXBoTW9kZWwoeyBpbnNlcnRJbmRleCwgaW5zZXJ0VGFibGUgfSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VCeShuZXcgUmVwbGFjZU1vZGVsKHsgaW5zZXJ0UGFyYWdyYXBoIH0pKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2F2ZUluc2VydFBhcmFncmFwaFRvSGlzdG9yeShpbnNlcnRUYWJsZS5jb250ZW50LCBpbnNlcnRQYXJhZ3JhcGgpO1xuICAgICAgICBjb25zdCBlbmRQb2ludCA9IHRoaXMuc2Vzc2lvbi5pbnNlcnRQYXJhZ3JhcGgodGhpcy5zZWxlY3Rpb24uY3Vyc29yLCBpbnNlcnRQYXJhZ3JhcGgpO1xuICAgICAgICBsZXQgbGFzdFJvdyA9IHRoaXMuc2VsZWN0aW9uLmN1cnNvci5yb3cgPT09IGVuZFBvaW50LnJvdyA/IGVuZFBvaW50LnJvdyA6IEluZmluaXR5O1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUxpbmVzKHRoaXMuc2VsZWN0aW9uLmN1cnNvci5yb3csIGxhc3RSb3cpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgICAgICB0aGlzLnJlcmVuZGVyTWFya2VyKCk7XG4gICAgfVxuXG4gICAgaW5zZXJ0VGFibGVJbkN1cnJlbnRQYXJhZ3JhcGgoaW5zZXJ0VGFibGU6IEluc2VydFRhYmxlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VCeShuZXcgUmVwbGFjZU1vZGVsKHsgaW5zZXJ0VGFibGUgfSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zYXZlSW5zZXJ0VGFibGVUb0hpc3RvcnkoaW5zZXJ0VGFibGUpO1xuICAgICAgICBjb25zdCBlbmRQb2ludCA9IHRoaXMuc2Vzc2lvbi5pbnNlcnRUYWJsZSh0aGlzLnNlbGVjdGlvbi5jdXJzb3IsIGluc2VydFRhYmxlKTtcbiAgICAgICAgbGV0IGxhc3RSb3cgPSB0aGlzLnNlbGVjdGlvbi5jdXJzb3Iucm93ID09PSBlbmRQb2ludC5yb3cgPyBlbmRQb2ludC5yb3cgOiBJbmZpbml0eTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVMaW5lcyh0aGlzLnNlbGVjdGlvbi5jdXJzb3Iucm93LCBsYXN0Um93KTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVDdXJzb3IoKTtcbiAgICAgICAgdGhpcy5yZXJlbmRlck1hcmtlcigpO1xuICAgIH1cblxuICAgIHJlcGxhY2VCeShtb2RlbDogUmVwbGFjZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhcnRJbmRleGVzID0gQ29udGVudEhlbHBlci5nZXRTZWxlY3RlZFBhcnREb2N1bWVudEluZGV4ZXModGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIHRoaXMuc2VsZWN0aW9uLnJhbmdlKTtcbiAgICAgICAgbW9kZWwuZGVsZXRlID0gbmV3IERlbGV0ZU1vZGVsKHsgc3RhcnRJbmRleDogcGFydEluZGV4ZXMuc3RhcnRJbmRleCwgY291bnQ6IHBhcnRJbmRleGVzLmVuZEluZGV4IC0gcGFydEluZGV4ZXMuc3RhcnRJbmRleCArIDEgfSk7XG4gICAgICAgIHRoaXMuc2F2ZVJlcGxhY2VUb0hpc3RvcnkodGhpcy5zZWxlY3Rpb24ucmFuZ2UsIG1vZGVsKTtcbiAgICAgICAgdGhpcy5yZW1vdmVDdXN0b21FbGVtZW50c0RhdGEoKTtcbiAgICAgICAgY29uc3QgZW5kUG9zaXRpb24gPSB0aGlzLnNlc3Npb24ucmVwbGFjZShtb2RlbCk7XG4gICAgICAgIHRoaXMub25Eb2N1bWVudENoYW5nZShuZXcgUmFuZ2UodGhpcy5zZWxlY3Rpb24uY3Vyc29yLCBlbmRQb3NpdGlvbikpO1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlVG9MaW5lU3RhcnQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RMaW5lU3RhcnQodGhpcy5zZXNzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZVNlbGVjdGVkKCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlVG9MaW5lRW5kKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNFbXB0eSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0TGluZUVuZCh0aGlzLnNlc3Npb24pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWQoKTtcbiAgICB9XG5cbiAgICByZW1vdmVXb3JkTGVmdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdFdvcmRMZWZ0KHRoaXMuc2Vzc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVTZWxlY3RlZCgpO1xuICAgIH1cblxuICAgIHJlbW92ZVdvcmRSaWdodCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdFdvcmRSaWdodCh0aGlzLnNlc3Npb24pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWQoKTtcbiAgICB9XG5cbiAgICBhcHBseVRleHRTdHlsZUJvbGQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYXBwbHlUZXh0U3R5bGVzKG5ldyBUZXh0U3R5bGVNb2RlbCh7IGJvbGQ6ICF0aGlzLnNlc3Npb24uZWRpdG9yU2VydmljZS5zdHlsZXMuYm9sZCB9KSk7XG4gICAgfVxuXG4gICAgYXBwbHlUZXh0U3R5bGVJdGFsaWMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYXBwbHlUZXh0U3R5bGVzKG5ldyBUZXh0U3R5bGVNb2RlbCh7IGl0YWxpYzogIXRoaXMuc2Vzc2lvbi5lZGl0b3JTZXJ2aWNlLnN0eWxlcy5pdGFsaWMgfSkpO1xuICAgIH1cblxuICAgIGFwcGx5VGV4dFN0eWxlVW5kZXJsaW5lKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFwcGx5VGV4dFN0eWxlcyhuZXcgVGV4dFN0eWxlTW9kZWwoeyB1bmRlcmxpbmU6ICF0aGlzLnNlc3Npb24uZWRpdG9yU2VydmljZS5zdHlsZXMudW5kZXJsaW5lIH0pKTtcbiAgICB9XG5cbiAgICBhcHBseVRleHRTdHlsZXModGV4dFN0eWxlOiBUZXh0U3R5bGVNb2RlbCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRJbmRleGVzID0gQ29udGVudEhlbHBlci5nZXRTZWxlY3RlZFBhcnREb2N1bWVudEluZGV4ZXModGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIHRoaXMuc2VsZWN0aW9uLnJhbmdlKTtcbiAgICAgICAgICAgIHRoaXMuc2F2ZUFwcGx5VGV4dFN0eWxlVG9IaXN0b3J5KHBhcnRJbmRleGVzLnN0YXJ0SW5kZXgsIHBhcnRJbmRleGVzLmVuZEluZGV4LCB0ZXh0U3R5bGUpO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmFwcGx5VGV4dFN0eWxlKHBhcnRJbmRleGVzLnN0YXJ0SW5kZXgsIHBhcnRJbmRleGVzLmVuZEluZGV4LCB0ZXh0U3R5bGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRUZXh0U3R5bGUodGV4dFN0eWxlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldFRleHRTdHlsZSh0ZXh0U3R5bGU6IFRleHRTdHlsZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhQb3NpdGlvblRvRG9jdW1lbnRJbmRleCh0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocywgdGhpcy5zZWxlY3Rpb24uY3Vyc29yKTtcbiAgICAgICAgY29uc3QgaXNQYXJhZ3JhcGggPSB0aGlzLnNlc3Npb24ubW9kZWwuY29udGVudExlbmd0aCA9PT0gaW5kZXggfHwgdGhpcy5zZXNzaW9uLm1vZGVsLmNvbnRlbnRbaW5kZXhdID09PSBORVdfTElORV9NQVJLVVA7XG4gICAgICAgIGlmIChpc1BhcmFncmFwaCkge1xuICAgICAgICAgICAgdGhpcy5zYXZlQXBwbHlUZXh0U3R5bGVUb0hpc3RvcnkoaW5kZXgsIGluZGV4LCB0ZXh0U3R5bGUpO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmFwcGx5VGV4dFN0eWxlKGluZGV4LCBpbmRleCwgdGV4dFN0eWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRUZXh0U3R5bGUodGV4dFN0eWxlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgIH1cblxuICAgIGFwcGx5UGFyYWdyYXBoU3R5bGVzKHBhcmFncmFwaFN0eWxlOiBQYXJhZ3JhcGhTdHlsZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5zZWxlY3Rpb24ucmFuZ2U7XG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB0aGlzLnNlc3Npb24ubW9kZWwucGFyYWdyYXBoc1tyYW5nZS5zdGFydC5yb3ddLmluc2VydEluZGV4O1xuICAgICAgICBjb25zdCBlbmRJbmRleCA9IHRoaXMuc2Vzc2lvbi5tb2RlbC5wYXJhZ3JhcGhzW3JhbmdlLmVuZC5yb3ddLmluc2VydEluZGV4O1xuICAgICAgICB0aGlzLnNhdmVBcHBseVBhcmFncmFwaFN0eWxlVG9IaXN0b3J5KHN0YXJ0SW5kZXgsIGVuZEluZGV4LCBwYXJhZ3JhcGhTdHlsZSk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5hcHBseVBhcmFncmFwaFN0eWxlKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCBwYXJhZ3JhcGhTdHlsZSk7XG4gICAgfVxuXG4gICAgYXBwbHlFbGVtZW50U3R5bGUoY3VycmVudDogRWxlbWVudE1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2F2ZUFwcGx5RWxlbWVudFN0eWxlVG9IaXN0b3J5KGN1cnJlbnQpO1xuICAgICAgICB0aGlzLnNlc3Npb24uYXBwbHlFbGVtZW50U3R5bGUobmV3IEFwcGx5RWxlbWVudFN0eWxlTW9kZWwoY3VycmVudCkpO1xuICAgIH1cblxuICAgIHNldE51bWJlcmluZ1RlbXBsYXRlKHRlbXBsYXRlTGV2ZWxzOiBOdW1iZXJpbmdMZXZlbE1vZGVsW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnNlbGVjdGlvbi5yYW5nZTtcbiAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IHRoaXMuc2Vzc2lvbi5tb2RlbC5wYXJhZ3JhcGhzW3JhbmdlLnN0YXJ0LnJvd10uaW5zZXJ0SW5kZXg7XG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gdGhpcy5zZXNzaW9uLm1vZGVsLnBhcmFncmFwaHNbcmFuZ2UuZW5kLnJvd10uaW5zZXJ0SW5kZXg7XG4gICAgICAgIHRoaXMuc2F2ZUFkZE51bWJlcmluZ1RvSGlzdG9yeSh0ZW1wbGF0ZUxldmVscywgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICB0aGlzLnNlc3Npb24uYWRkTnVtYmVyaW5nKHRlbXBsYXRlTGV2ZWxzLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlTnVtYmVyaW5nc0Zyb21QYXJhZ3JhcGhzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMuc2VsZWN0aW9uLnJhbmdlO1xuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gdGhpcy5zZXNzaW9uLm1vZGVsLnBhcmFncmFwaHNbcmFuZ2Uuc3RhcnQucm93XS5pbnNlcnRJbmRleDtcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSB0aGlzLnNlc3Npb24ubW9kZWwucGFyYWdyYXBoc1tyYW5nZS5lbmQucm93XS5pbnNlcnRJbmRleDtcbiAgICAgICAgdGhpcy5zYXZlUmVtb3ZlTnVtYmVyaW5nVG9IaXN0b3J5KHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZU51bWJlcmluZ3Moc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgIH1cblxuICAgIGFwcGx5SW1hZ2VTdHlsZXMoaW1hZ2U6IEltYWdlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zYXZlQXBwbHlJbWFnZVN0eWxlVG9IaXN0b3J5KGltYWdlKTtcbiAgICAgICAgY29uc3QgaW1hZ2VTdHlsZSA9IG5ldyBBcHBseUltYWdlU3R5bGVNb2RlbCh7IGluc2VydEluZGV4OiBpbWFnZS5pbnNlcnRJbmRleCwgaGVpZ2h0OiBpbWFnZS5oZWlnaHQsIHdpZHRoOiBpbWFnZS53aWR0aCB9KTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLmFwcGx5SW1hZ2VTdHlsZShpbWFnZVN0eWxlKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVDdXJzb3IoKTtcbiAgICB9XG5cbiAgICBmb2N1cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnRleHRJbnB1dC5pc0ZvY3VzZWQgJiYgIXRoaXMuc2VsZWN0aW9uLmlzRm9jdXNlZCkge1xuICAgICAgICAgICAgdGhpcy50ZXh0SW5wdXQuaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9wZW5TZWFyY2goKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5vcGVuU2VhcmNoRGlhbG9nID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmaW5kKG9wdGlvbnM6IFNlYXJjaE9wdGlvbnMpOiBSYW5nZSB7XG4gICAgICAgIGxldCByYW5nZSA9IHRoaXMuc2VsZWN0aW9uLnJhbmdlO1xuICAgICAgICBpZiAob3B0aW9ucy50ZXJtID09IG51bGwpIHtcbiAgICAgICAgICAgIGxldCB0ZXJtID0gdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLmdldFRleHRSYW5nZShyYW5nZSkgfHwgdGhpcy5zZWFyY2gub3B0aW9ucy50ZXJtO1xuICAgICAgICAgICAgaWYgKCF0ZXJtKSB7XG4gICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLnNlc3Npb24uZ2V0V29yZFJhbmdlKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uKTtcbiAgICAgICAgICAgICAgICB0ZXJtID0gdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLmdldFRleHRSYW5nZShyYW5nZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb25zLnRlcm0gPSB0ZXJtO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLnN0YXJ0KSB7XG4gICAgICAgICAgICBvcHRpb25zLnN0YXJ0ID0gcmFuZ2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlYXJjaC5zZXQob3B0aW9ucyk7XG5cbiAgICAgICAgY29uc3QgbmV3UmFuZ2UgPSB0aGlzLnNlYXJjaC5maW5kKHRoaXMuc2Vzc2lvbik7XG4gICAgICAgIGlmIChuZXdSYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VTZWxlY3Rpb24ocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5zZXNzaW9uID09PSB0aGlzLm1haW5TZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYWluUmVuZGVyZXIuc2Nyb2xsU2VsZWN0aW9uSW50b1ZpZXcocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCwgMC41KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXdSYW5nZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJhbmdlLmVuZCA9IHJhbmdlLnN0YXJ0O1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZUN1cnNvcihyYW5nZS5zdGFydCk7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdXBkYXRlQ291bnRlcigpOiBTZWFyY2hJdGVyYXRpb24ge1xuICAgICAgICBjb25zdCByZWdleCA9IHRoaXMuc2VhcmNoLm9wdGlvbnMucmVnZXggYXMgUmVnRXhwO1xuICAgICAgICBsZXQgYWxsID0gMDtcbiAgICAgICAgbGV0IGN1cnJlbnQgPSAwO1xuICAgICAgICBpZiAoIXJlZ2V4KSB7XG4gICAgICAgICAgICByZXR1cm4geyBjdXJyZW50OiAwLCB0b3RhbDogMCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnNlc3Npb24uZGlzcGxheURhdGEuZ2V0QWxsUGFyYWdyYXBoc0NvbnRlbnQoKS5qb2luKCdcXG4nKTtcblxuICAgICAgICBsZXQgb2Zmc2V0ID0gdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBvc2l0aW9uVG9JbmRleCh0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydCk7XG5cbiAgICAgICAgcmVnZXgubGFzdEluZGV4ID0gMDtcbiAgICAgICAgbGV0IHJlZ2V4UmVzdWx0O1xuICAgICAgICB3aGlsZSAoKHJlZ2V4UmVzdWx0ID0gcmVnZXguZXhlYyh2YWx1ZSkpKSB7XG4gICAgICAgICAgICBhbGwrKztcbiAgICAgICAgICAgIGxldCBsYXN0ID0gcmVnZXhSZXN1bHQuaW5kZXg7XG4gICAgICAgICAgICBpZiAobGFzdCA8PSBvZmZzZXQpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWxsID4gdGhpcy5NQVhfQ09VTlQpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IGN1cnJlbnQ6IGN1cnJlbnQsIHRvdGFsOiBhbGwgPiB0aGlzLk1BWF9DT1VOVCA/IHRoaXMuTUFYX0NPVU5UIDogYWxsIH07XG4gICAgfVxuXG4gICAgcmVwbGFjZShzZWFyY2g6IHN0cmluZywgcmVwbGFjZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2VhcmNoICE9PSByZXBsYWNlKSB7XG4gICAgICAgICAgICBpZiAocmVwbGFjZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluc2VydEluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhUb0RvY3VtZW50SW5kZXgoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydC5yb3csXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnJhbmdlLnN0YXJ0LmNvbHVtblxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5zZXJ0VGV4dCA9IG5ldyBJbnNlcnRUZXh0TW9kZWwoeyBpbnNlcnRJbmRleCwgdGV4dDogcmVwbGFjZSB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlcGxhY2VCeShuZXcgUmVwbGFjZU1vZGVsKHsgaW5zZXJ0VGV4dCB9KSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmluZCh7IHRlcm06IHNlYXJjaCwgc2tpcEN1cnJlbnQ6IHRydWUsIGJhY2t3YXJkczogZmFsc2UgfSk7XG4gICAgfVxuXG4gICAgdW5kbygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdW5kbyA9IHRoaXMuaGlzdG9yeS5wb3BVbmRvT3BlcmF0aW9uKCk7XG4gICAgICAgIGlmICghdW5kbykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5zZXRUYXJnZXRlZFNlc3Npb25Bc0N1cnJlbnQodW5kby50YXJnZXRzKTtcbiAgICAgICAgdGhpcy5hcHBseU9wZXJhdGlvbih1bmRvLm9wZXJhdGlvbik7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnBsYWNlU2VsZWN0aW9uKHVuZG8uY3Vyc29yLCB1bmRvLmFuY2hvcik7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICByZWRvKCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZWRvID0gdGhpcy5oaXN0b3J5LnBvcFJlZG9PcGVyYXRpb24oKTtcbiAgICAgICAgaWYgKCFyZWRvKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZWd1bGF0b3JTZXJ2aWNlLnNldFRhcmdldGVkU2Vzc2lvbkFzQ3VycmVudChyZWRvLnRhcmdldHMpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZVNlbGVjdGlvbihyZWRvLmN1cnNvciwgcmVkby5hbmNob3IpO1xuICAgICAgICB0aGlzLmFwcGx5T3BlcmF0aW9uKHJlZG8ub3BlcmF0aW9uKTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIGFwcGx5T3BlcmF0aW9uKG9wZXJhdGlvbjogT3BlcmF0aW9uKTogdm9pZCB7XG4gICAgICAgIGxldCBjb21tYW5kOiBDb21tYW5kTW9kZWwgfCBudWxsID0gbnVsbDtcbiAgICAgICAgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIEluc2VydFRleHRNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydFRleHRCeURvY3VtZW50SW5kZXgob3BlcmF0aW9uLmluc2VydEluZGV4LCBvcGVyYXRpb24udGV4dCwgbnVsbCk7XG4gICAgICAgICAgICBjb25zdCB7IHRleHQsIGluc2VydEluZGV4IH0gPSBvcGVyYXRpb247XG4gICAgICAgICAgICBjb21tYW5kID0gU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydFRleHRDb21tYW5kKHRleHQsIGluc2VydEluZGV4LCB0aGlzLnRhcmdldHMpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIEluc2VydFBhcmFncmFwaE1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uaW5zZXJ0UGFyYWdyYXBoQnlEb2N1bWVudEluZGV4KG9wZXJhdGlvbik7XG4gICAgICAgICAgICBjb21tYW5kID0gU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydFBhcmFncmFwaENvbW1hbmQob3BlcmF0aW9uLCB0aGlzLnRhcmdldHMpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIERlbGV0ZU1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlQnlEb2N1bWVudEluZGV4ZXMob3BlcmF0aW9uLnN0YXJ0SW5kZXgsIG9wZXJhdGlvbi5zdGFydEluZGV4ICsgb3BlcmF0aW9uLmNvdW50KTtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0RGVsZXRlQ29tbWFuZChvcGVyYXRpb24uc3RhcnRJbmRleCwgb3BlcmF0aW9uLmNvdW50LCB0aGlzLnRhcmdldHMpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIEluc2VydFN0eWxlZFRleHRNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydFRleHRCeURvY3VtZW50SW5kZXgob3BlcmF0aW9uLmluc2VydEluZGV4LCBvcGVyYXRpb24udGV4dCwgbmV3IFRleHRTdHlsZU1vZGVsKG9wZXJhdGlvbi50ZXh0U3R5bGUpKTtcbiAgICAgICAgICAgIGNvbnN0IHsgdGV4dCwgaW5zZXJ0SW5kZXgsIHRleHRTdHlsZSB9ID0gb3BlcmF0aW9uO1xuICAgICAgICAgICAgY29tbWFuZCA9IFNhdmVDb21tYW5kc0hlbHBlci5nZXRJbnNlcnRTdHlsZWRUZXh0Q29tbWFuZCh0ZXh0LCBpbnNlcnRJbmRleCwgdGV4dFN0eWxlLCB0aGlzLnRhcmdldHMpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIFJlc3RvcmVNb2RlbCkge1xuICAgICAgICAgICAgY29uc3QgZGVlcENvcHkgPSBzdHJ1Y3R1cmVkQ2xvbmUob3BlcmF0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZXN0b3JlKGRlZXBDb3B5KTtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0UmVzdG9yZUNvbW1hbmQoZGVlcENvcHksIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgQXBwbHlUZXh0U3R5bGVNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmFwcGx5VGV4dFN0eWxlKG9wZXJhdGlvbi5zdGFydEluZGV4LCBvcGVyYXRpb24uZW5kSW5kZXgsIG5ldyBUZXh0U3R5bGVNb2RlbChvcGVyYXRpb24udGV4dFN0eWxlKSk7XG4gICAgICAgICAgICBjb25zdCB7IHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0ZXh0U3R5bGUgfSA9IG9wZXJhdGlvbjtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0QXBwbHlUZXh0U3R5bGVDb21tYW5kKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0ZXh0U3R5bGUsIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgQXBwbHlQYXJhZ3JhcGhTdHlsZU1vZGVsKSB7XG4gICAgICAgICAgICBjb25zdCBjb3B5ID0gbmV3IFBhcmFncmFwaFN0eWxlTW9kZWwob3BlcmF0aW9uLnBhcmFncmFwaFN0eWxlKTtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5hcHBseVBhcmFncmFwaFN0eWxlKG9wZXJhdGlvbi5zdGFydEluZGV4LCBvcGVyYXRpb24uZW5kSW5kZXgsIGNvcHkpO1xuICAgICAgICAgICAgY29uc3QgeyBzdGFydEluZGV4LCBlbmRJbmRleCwgcGFyYWdyYXBoU3R5bGUgfSA9IG9wZXJhdGlvbjtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0QXBwbHlQYXJhZ3JhcGhTdHlsZUNvbW1hbmQoc3RhcnRJbmRleCwgZW5kSW5kZXgsIHBhcmFncmFwaFN0eWxlLCB0aGlzLnRhcmdldHMpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIFJlc3RvcmVUZXh0U3R5bGVzTW9kZWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZXBDb3B5ID0gc3RydWN0dXJlZENsb25lKG9wZXJhdGlvbik7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVzdG9yZVRleHRTdHlsZXMoZGVlcENvcHkuZm9ybWF0cywgZGVlcENvcHkubGlua0Zvcm1hdHMpO1xuICAgICAgICAgICAgY29tbWFuZCA9IFNhdmVDb21tYW5kc0hlbHBlci5nZXRSZXN0b3JlVGV4dFN0eWxlc0NvbW1hbmQoZGVlcENvcHkuZm9ybWF0cywgdGhpcy50YXJnZXRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBSZXN0b3JlUGFyYWdyYXBoU3R5bGVzTW9kZWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZXBDb3B5ID0gc3RydWN0dXJlZENsb25lKG9wZXJhdGlvbik7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVzdG9yZVBhcmFncmFwaFN0eWxlcyhkZWVwQ29weS5wYXJhZ3JhcGhzKTtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0UmVzdG9yZVBhcmFncmFwaFN0eWxlc0NvbW1hbmQoZGVlcENvcHkucGFyYWdyYXBocywgdGhpcy50YXJnZXRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBJbnNlcnRFbGVtZW50TW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5pbnNlcnRFbGVtZW50QnlEb2N1bWVudEluZGV4KG9wZXJhdGlvbik7XG4gICAgICAgICAgICBjb21tYW5kID0gU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydEVsZW1lbnRDb21tYW5kKG9wZXJhdGlvbiwgdGhpcy50YXJnZXRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBJbnNlcnRCcmVha01vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uaW5zZXJ0QnJlYWtCeURvY3VtZW50SW5kZXgob3BlcmF0aW9uKTtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0SW5zZXJ0QnJlYWtDb21tYW5kKG9wZXJhdGlvbiwgdGhpcy50YXJnZXRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBBcHBseUVsZW1lbnRTdHlsZU1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uYXBwbHlFbGVtZW50U3R5bGUob3BlcmF0aW9uKTtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0QXBwbHlFbGVtZW50U3R5bGVDb21tYW5kKG9wZXJhdGlvbiwgdGhpcy50YXJnZXRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBJbnNlcnRUYWJNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydFRhYkJ5RG9jdW1lbnRJbmRleChvcGVyYXRpb24pO1xuICAgICAgICAgICAgY29tbWFuZCA9IFNhdmVDb21tYW5kc0hlbHBlci5nZXRJbnNlcnRUYWJDb21tYW5kKG9wZXJhdGlvbiwgdGhpcy50YXJnZXRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBJbnNlcnRJbWFnZU1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uaW5zZXJ0SW1hZ2VCeURvY3VtZW50SW5kZXgob3BlcmF0aW9uKTtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0SW5zZXJ0SW1hZ2VDb21tYW5kKG9wZXJhdGlvbiwgdGhpcy50YXJnZXRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBJbnNlcnRMaW5rTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5pbnNlcnRMaW5rQnlEb2N1bWVudEluZGV4KG9wZXJhdGlvbik7XG4gICAgICAgICAgICBjb21tYW5kID0gU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydExpbmtPcGVyYXRpb24ob3BlcmF0aW9uLCB0aGlzLnRhcmdldHMpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIEFwcGx5SW1hZ2VTdHlsZU1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uYXBwbHlJbWFnZVN0eWxlKG9wZXJhdGlvbik7XG4gICAgICAgICAgICBjb25zdCB7IGhlaWdodCwgd2lkdGgsIGluc2VydEluZGV4IH0gPSBvcGVyYXRpb247XG4gICAgICAgICAgICBjb21tYW5kID0gU2F2ZUNvbW1hbmRzSGVscGVyLmdldEFwcGx5SW1hZ2VTdHlsZUNvbW1hbmQoaGVpZ2h0LCB3aWR0aCwgaW5zZXJ0SW5kZXgsIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgQWRkTnVtYmVyaW5nTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5hZGROdW1iZXJpbmcob3BlcmF0aW9uLmxldmVscywgb3BlcmF0aW9uLnN0YXJ0SW5kZXgsIG9wZXJhdGlvbi5lbmRJbmRleCk7XG4gICAgICAgICAgICBjb25zdCB7IHN0YXJ0SW5kZXgsIGVuZEluZGV4LCBsZXZlbHMgfSA9IG9wZXJhdGlvbjtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0QWRkTnVtYmVyaW5nQ29tbWFuZChzdGFydEluZGV4LCBlbmRJbmRleCwgbGV2ZWxzLCB0aGlzLnRhcmdldHMpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIFJlc3RvcmVOdW1iZXJpbmdzTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZXN0b3JlTnVtYmVyaW5ncyhvcGVyYXRpb24ucGFyYWdyYXBocywgb3BlcmF0aW9uLm51bWJlcmluZ3MpO1xuICAgICAgICAgICAgY29tbWFuZCA9IFNhdmVDb21tYW5kc0hlbHBlci5nZXRSZXN0b3JlTnVtYmVyaW5nc0NvbW1hbmQob3BlcmF0aW9uLCB0aGlzLnRhcmdldHMpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIEluc2VydFRhYmxlQ29sdW1uc01vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uaW5zZXJ0VGFibGVDb2x1bW5zKG9wZXJhdGlvbi5pbnNlcnRJbmRleCwgb3BlcmF0aW9uLmNvbHVtbnNDb3VudCwgb3BlcmF0aW9uLnRhcmdldEluZGV4LCBvcGVyYXRpb24uaW5oZXJpdEluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZFRhYmxlU2l6ZShvcGVyYXRpb24uaW5zZXJ0SW5kZXgsIHRoaXMuc2Vzc2lvbi5zZXNzaW9uSWQpO1xuICAgICAgICAgICAgY29uc3QgeyBjb2x1bW5zQ291bnQsIGluaGVyaXRJbmRleCwgaW5zZXJ0SW5kZXgsIHRhcmdldEluZGV4IH0gPSBvcGVyYXRpb247XG4gICAgICAgICAgICBjb21tYW5kID0gU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydFRhYmxlQ29sdW1uc0NvbW1hbmQoY29sdW1uc0NvdW50LCBpbmhlcml0SW5kZXgsIGluc2VydEluZGV4LCB0YXJnZXRJbmRleCwgdGhpcy50YXJnZXRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBJbnNlcnRUYWJsZVJvd3NNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydFRhYmxlUm93cyhvcGVyYXRpb24uaW5zZXJ0SW5kZXgsIG9wZXJhdGlvbi5yb3dzQ291bnQsIG9wZXJhdGlvbi50YXJnZXRJbmRleCwgb3BlcmF0aW9uLmluaGVyaXRJbmRleCk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRUYWJsZVNpemUob3BlcmF0aW9uLmluc2VydEluZGV4LCB0aGlzLnNlc3Npb24uc2Vzc2lvbklkKTtcbiAgICAgICAgICAgIGNvbnN0IHsgaW5zZXJ0SW5kZXgsIHJvd3NDb3VudCwgdGFyZ2V0SW5kZXgsIGluaGVyaXRJbmRleCB9ID0gb3BlcmF0aW9uO1xuICAgICAgICAgICAgY29tbWFuZCA9IFNhdmVDb21tYW5kc0hlbHBlci5nZXRJbnNlcnRUYWJsZVJvd3NDb21tYW5kKGluc2VydEluZGV4LCByb3dzQ291bnQsIHRhcmdldEluZGV4LCBpbmhlcml0SW5kZXgsIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgUmVtb3ZlVGFibGVDb2x1bW5zTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVUYWJsZUNvbHVtbnMob3BlcmF0aW9uLmluc2VydEluZGV4LCBvcGVyYXRpb24uc3RhcnRJbmRleCwgb3BlcmF0aW9uLmVuZEluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZFRhYmxlU2l6ZShvcGVyYXRpb24uaW5zZXJ0SW5kZXgsIHRoaXMuc2Vzc2lvbi5zZXNzaW9uSWQpO1xuICAgICAgICAgICAgY29uc3QgeyBpbnNlcnRJbmRleCwgc3RhcnRJbmRleCwgZW5kSW5kZXggfSA9IG9wZXJhdGlvbjtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0UmVtb3ZlVGFibGVDb2x1bW5zQ29tbWFuZChpbnNlcnRJbmRleCwgc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgUmVtb3ZlVGFibGVSb3dzTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVUYWJsZVJvd3Mob3BlcmF0aW9uLmluc2VydEluZGV4LCBvcGVyYXRpb24uc3RhcnRJbmRleCwgb3BlcmF0aW9uLmVuZEluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZFRhYmxlU2l6ZShvcGVyYXRpb24uaW5zZXJ0SW5kZXgsIHRoaXMuc2Vzc2lvbi5zZXNzaW9uSWQpO1xuICAgICAgICAgICAgY29uc3QgeyBpbnNlcnRJbmRleCwgc3RhcnRJbmRleCwgZW5kSW5kZXggfSA9IG9wZXJhdGlvbjtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0UmVtb3ZlVGFibGVSb3dzQ29tbWFuZChpbnNlcnRJbmRleCwgc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgUmVzaXplVGFibGVDb2x1bW5zTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZXNpemVUYWJsZUNvbHVtbnMob3BlcmF0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZFRhYmxlU2l6ZShvcGVyYXRpb24uaW5zZXJ0SW5kZXgsIHRoaXMuc2Vzc2lvbi5zZXNzaW9uSWQpO1xuICAgICAgICAgICAgY29tbWFuZCA9IFNhdmVDb21tYW5kc0hlbHBlci5nZXRSZXNpemVUYWJsZUNvbHVtbnNDb21tYW5kKG9wZXJhdGlvbiwgdGhpcy50YXJnZXRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBSZXN0b3JlVGFibGVNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlc3RvcmVUYWJsZShvcGVyYXRpb24uaW5zZXJ0SW5kZXgsIG9wZXJhdGlvbi5vbGRUYWJsZSk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRUYWJsZVNpemUob3BlcmF0aW9uLmluc2VydEluZGV4LCB0aGlzLnNlc3Npb24uc2Vzc2lvbklkKTtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0UmVzdG9yZVRhYmxlQ29tbWFuZChvcGVyYXRpb24sIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgSW5zZXJ0VGFibGVNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydFRhYmxlQnlEb2N1bWVudEluZGV4KG9wZXJhdGlvbik7XG4gICAgICAgICAgICBjb21tYW5kID0gU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydFRhYmxlQ29tbWFuZChvcGVyYXRpb24sIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgUmVtb3ZlTnVtYmVyaW5nc01vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlTnVtYmVyaW5ncyhvcGVyYXRpb24uc3RhcnRJbmRleCwgb3BlcmF0aW9uLmVuZEluZGV4KTtcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRJbmRleCwgZW5kSW5kZXggfSA9IG9wZXJhdGlvbjtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0UmVtb3ZlTnVtYmVyaW5nc0NvbW1hbmQoc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgUmVwbGFjZU1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVwbGFjZShvcGVyYXRpb24pO1xuICAgICAgICAgICAgY29tbWFuZCA9IFNhdmVDb21tYW5kc0hlbHBlci5nZXRSZXBsYWNlQ29tbWFuZChvcGVyYXRpb24sIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZG8vcmVkbyBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIHRoZSBPcGVyYXRpb24nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKGNvbW1hbmQpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgIH1cblxuICAgIHNhdmVSZW1vdmVUb0hpc3RvcnkocmFuZ2U6IFJhbmdlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlc3RvcmVNb2RlbCA9IHRoaXMuY3JlYXRlUmVzdG9yZUZyb21TbGljZShyYW5nZS5zdGFydC5yb3csIHJhbmdlLnN0YXJ0LmNvbHVtbiwgcmFuZ2UuZW5kLnJvdywgcmFuZ2UuZW5kLmNvbHVtbik7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gcmVzdG9yZU1vZGVsLmVuZEluZGV4IC0gcmVzdG9yZU1vZGVsLnN0YXJ0SW5kZXggKyAxO1xuICAgICAgICByZXN0b3JlTW9kZWwuZW5kSW5kZXggPSByZXN0b3JlTW9kZWwuc3RhcnRJbmRleDsgLy8gdGhpcyBpcyB0byByZXN0b3JlIGluIHBvc2l0aW9uIHdpdGhvdXQgZGVsZXRpbmcvcmVwbGFjaW5nIGFueXRoaW5nIGluIHJhbmdlXG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoRGVsZXRlKHJlc3RvcmVNb2RlbCk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldERlbGV0ZUNvbW1hbmQocmVzdG9yZU1vZGVsLnN0YXJ0SW5kZXgsIGNvdW50LCB0aGlzLnRhcmdldHMpKTtcbiAgICB9XG5cbiAgICBzYXZlSW5zZXJ0VGV4dFRvSGlzdG9yeShwYXJhZ3JhcGg6IG51bWJlciwgaW5kZXhJblBhcmFncmFwaDogbnVtYmVyLCB0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFRvRG9jdW1lbnRJbmRleCh0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocywgcGFyYWdyYXBoLCBpbmRleEluUGFyYWdyYXBoKTtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hJbnNlcnRUZXh0KGluZGV4LCB0ZXh0KTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0SW5zZXJ0VGV4dENvbW1hbmQodGV4dCwgaW5kZXgsIHRoaXMudGFyZ2V0cykpO1xuICAgIH1cblxuICAgIHNhdmVJbnNlcnRQYXJhZ3JhcGhUb0hpc3RvcnkoY29udGVudDogc3RyaW5nLCBtb2RlbDogSW5zZXJ0UGFyYWdyYXBoTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hJbnNlcnRQYXJhZ3JhcGgoY29udGVudCwgbW9kZWwsIHRoaXMuc2Vzc2lvbi5tb2RlbC5wYXJhZ3JhcGhzKTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0SW5zZXJ0UGFyYWdyYXBoQ29tbWFuZChtb2RlbCwgdGhpcy50YXJnZXRzKSk7XG4gICAgfVxuXG4gICAgc2F2ZUluc2VydFN0eWxlZFRleHRUb0hpc3RvcnkocGFyYWdyYXBoOiBudW1iZXIsIGluZGV4SW5QYXJhZ3JhcGg6IG51bWJlciwgdGV4dDogc3RyaW5nLCBzdHlsZTogVGV4dFN0eWxlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFRvRG9jdW1lbnRJbmRleCh0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocywgcGFyYWdyYXBoLCBpbmRleEluUGFyYWdyYXBoKTtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hJbnNlcnRTdHlsZWRUZXh0KGluZGV4LCB0ZXh0LCBzdHlsZSk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydFN0eWxlZFRleHRDb21tYW5kKHRleHQsIGluZGV4LCBzdHlsZSwgdGhpcy50YXJnZXRzKSk7XG4gICAgfVxuXG4gICAgc2F2ZUluc2VydEVsZW1lbnRUb0hpc3RvcnkobW9kZWw6IEluc2VydEVsZW1lbnRNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaEluc2VydEVsZW1lbnQobW9kZWwpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFNhdmVDb21tYW5kc0hlbHBlci5nZXRJbnNlcnRFbGVtZW50Q29tbWFuZChtb2RlbCwgdGhpcy50YXJnZXRzKSk7XG4gICAgfVxuXG4gICAgc2F2ZUluc2VydEJyZWFrVG9IaXN0b3J5KG1vZGVsOiBJbnNlcnRCcmVha01vZGVsKTogdm9pZCB7XG4gICAgICAgIG1vZGVsLmlzT25OZXdQYXJhZ3JhcGggPVxuICAgICAgICAgICAgbW9kZWwuYnJlYWtUeXBlID09PSBCcmVha1R5cGVzLlBhZ2UgJiZcbiAgICAgICAgICAgIEJyZWFrSGVscGVyLmdldEJyZWFrVHlwZSh0aGlzLnNlc3Npb24ubW9kZWwsIENVU1RPTV9FTEVNRU5UX01BUktFUiwgbW9kZWwuaW5zZXJ0SW5kZXggLSAxKSAhPT0gQnJlYWtUeXBlcy5QYWdlO1xuICAgICAgICBjb25zdCBjb3VudCA9IG1vZGVsLmlzT25OZXdQYXJhZ3JhcGggPyBORVdfTElORV9NQVJLVVAubGVuZ3RoICsgMSA6IDE7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoSW5zZXJ0QnJlYWsobW9kZWwsIGNvdW50KTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0SW5zZXJ0QnJlYWtDb21tYW5kKG1vZGVsLCB0aGlzLnRhcmdldHMpKTtcbiAgICB9XG5cbiAgICBzYXZlSW5zZXJ0VGFiVG9IaXN0b3J5KG1vZGVsOiBJbnNlcnRUYWJNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaEluc2VydFRhYihtb2RlbCk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydFRhYkNvbW1hbmQobW9kZWwsIHRoaXMudGFyZ2V0cykpO1xuICAgIH1cblxuICAgIHNhdmVJbnNlcnRJbWFnZVRvSGlzdG9yeShtb2RlbDogSW5zZXJ0SW1hZ2VNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaEluc2VydEltYWdlKG1vZGVsKTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0SW5zZXJ0SW1hZ2VDb21tYW5kKG1vZGVsLCB0aGlzLnRhcmdldHMpKTtcbiAgICB9XG5cbiAgICBzYXZlSW5zZXJ0TGlua1RvSGlzdG9yeShtb2RlbDogSW5zZXJ0TGlua01vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoSW5zZXJ0TGluayhtb2RlbCk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydExpbmtPcGVyYXRpb24obW9kZWwsIHRoaXMudGFyZ2V0cykpO1xuICAgIH1cblxuICAgIHNhdmVJbnNlcnRUYWJsZVRvSGlzdG9yeShtb2RlbDogSW5zZXJ0VGFibGVNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaEluc2VydFRhYmxlKG1vZGVsKTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0SW5zZXJ0VGFibGVDb21tYW5kKG1vZGVsLCB0aGlzLnRhcmdldHMpKTtcbiAgICB9XG5cbiAgICBzYXZlQXBwbHlUZXh0U3R5bGVUb0hpc3Rvcnkoc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyLCB0ZXh0U3R5bGU6IFRleHRTdHlsZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHMgPSBGb3JtYXRIZWxwZXIuc2xpY2VTZWN0aW9uKHRoaXMuc2Vzc2lvbi5tb2RlbC5mb3JtYXRzLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIGNvbnN0IGxpbmtGb3JtYXRzID0gTGlua0hlbHBlci5zbGljZUZvcm1hdHModGhpcy5zZXNzaW9uLm1vZGVsLmxpbmtzLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoQXBwbHlUZXh0U3R5bGUoc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRleHRTdHlsZSwgZm9ybWF0cywgbGlua0Zvcm1hdHMpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFNhdmVDb21tYW5kc0hlbHBlci5nZXRBcHBseVRleHRTdHlsZUNvbW1hbmQoc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRleHRTdHlsZSwgdGhpcy50YXJnZXRzKSk7XG4gICAgfVxuXG4gICAgc2F2ZUFwcGx5UGFyYWdyYXBoU3R5bGVUb0hpc3Rvcnkoc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyLCBwYXJhZ3JhcGhTdHlsZTogUGFyYWdyYXBoU3R5bGVNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhzID0gSW5kZXhlZEVsZW1lbnRIZWxwZXIuc2xpY2VTZWN0aW9uKHRoaXMuc2Vzc2lvbi5tb2RlbC5wYXJhZ3JhcGhzLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaHNEZWVwQ29weSA9IHBhcmFncmFwaHMubWFwKFxuICAgICAgICAgICAgeCA9PiBuZXcgUGFyYWdyYXBoTW9kZWwoeyBpbnNlcnRJbmRleDogeC5pbnNlcnRJbmRleCwgcGFyYWdyYXBoU3R5bGU6IG5ldyBQYXJhZ3JhcGhTdHlsZU1vZGVsKHsgLi4ueC5wYXJhZ3JhcGhTdHlsZSB9KSB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaEFwcGx5UGFyYWdyYXBoU3R5bGUoc3RhcnRJbmRleCwgZW5kSW5kZXgsIHBhcmFncmFwaFN0eWxlLCBwYXJhZ3JhcGhzRGVlcENvcHkpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFxuICAgICAgICAgICAgU2F2ZUNvbW1hbmRzSGVscGVyLmdldEFwcGx5UGFyYWdyYXBoU3R5bGVDb21tYW5kKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCBwYXJhZ3JhcGhTdHlsZSwgdGhpcy50YXJnZXRzKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHNhdmVBcHBseUVsZW1lbnRTdHlsZVRvSGlzdG9yeShjdXJyZW50OiBFbGVtZW50TW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLnNlc3Npb24ubW9kZWwuZWxlbWVudHMuZmluZCh4ID0+IHguaW5zZXJ0SW5kZXggPT09IGN1cnJlbnQuaW5zZXJ0SW5kZXgpO1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaEFwcGx5RWxlbWVudFN0eWxlKHByZXZpb3VzLCBjdXJyZW50KTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0QXBwbHlFbGVtZW50U3R5bGVDb21tYW5kKGN1cnJlbnQsIHRoaXMudGFyZ2V0cykpO1xuICAgIH1cblxuICAgIHNhdmVBZGROdW1iZXJpbmdUb0hpc3RvcnkodGVtcGxhdGVMZXZlbHM6IE51bWJlcmluZ0xldmVsTW9kZWxbXSwgc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaHMgPSBJbmRleGVkRWxlbWVudEhlbHBlci5zbGljZVNlY3Rpb24odGhpcy5zZXNzaW9uLm1vZGVsLnBhcmFncmFwaHMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoc0RlZXBDb3B5ID0gcGFyYWdyYXBocy5tYXAoXG4gICAgICAgICAgICB4ID0+IG5ldyBQYXJhZ3JhcGhNb2RlbCh7IGluc2VydEluZGV4OiB4Lmluc2VydEluZGV4LCBwYXJhZ3JhcGhTdHlsZTogbmV3IFBhcmFncmFwaFN0eWxlTW9kZWwoeyAuLi54LnBhcmFncmFwaFN0eWxlIH0pIH0pXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHJlbW92ZWROdW1iZXJpbmdJZHMgPSBbLi4ubmV3IFNldChwYXJhZ3JhcGhzLm1hcCh4ID0+IHgucGFyYWdyYXBoU3R5bGUubnVtYmVyaW5nSWQpKV07XG4gICAgICAgIGNvbnN0IG51bWJlcmluZ3MgPSB0aGlzLnNlc3Npb24uZ2VuZXJhbFByb3BlcnRpZXMubnVtYmVyaW5ncy5maWx0ZXIoeCA9PiByZW1vdmVkTnVtYmVyaW5nSWRzLmluY2x1ZGVzKHgubnVtYmVyaW5nSWQpKTtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hBZGROdW1iZXJpbmcoc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRlbXBsYXRlTGV2ZWxzLCBwYXJhZ3JhcGhzRGVlcENvcHksIG51bWJlcmluZ3MpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFNhdmVDb21tYW5kc0hlbHBlci5nZXRBZGROdW1iZXJpbmdDb21tYW5kKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0ZW1wbGF0ZUxldmVscywgdGhpcy50YXJnZXRzKSk7XG4gICAgfVxuXG4gICAgc2F2ZVJlbW92ZU51bWJlcmluZ1RvSGlzdG9yeShzdGFydEluZGV4OiBudW1iZXIsIGVuZEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBocyA9IEluZGV4ZWRFbGVtZW50SGVscGVyLnNsaWNlU2VjdGlvbih0aGlzLnNlc3Npb24ubW9kZWwucGFyYWdyYXBocywgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhzRGVlcENvcHkgPSBwYXJhZ3JhcGhzLm1hcChcbiAgICAgICAgICAgIHggPT4gbmV3IFBhcmFncmFwaE1vZGVsKHsgaW5zZXJ0SW5kZXg6IHguaW5zZXJ0SW5kZXgsIHBhcmFncmFwaFN0eWxlOiBuZXcgUGFyYWdyYXBoU3R5bGVNb2RlbCh7IC4uLngucGFyYWdyYXBoU3R5bGUgfSkgfSlcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZE51bWJlcmluZ0lkcyA9IFsuLi5uZXcgU2V0KHBhcmFncmFwaHMubWFwKHggPT4geC5wYXJhZ3JhcGhTdHlsZS5udW1iZXJpbmdJZCkpXTtcbiAgICAgICAgY29uc3QgbnVtYmVyaW5ncyA9IHRoaXMuc2Vzc2lvbi5nZW5lcmFsUHJvcGVydGllcy5udW1iZXJpbmdzLmZpbHRlcih4ID0+IHJlbW92ZWROdW1iZXJpbmdJZHMuaW5jbHVkZXMoeC5udW1iZXJpbmdJZCkpO1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaFJlbW92ZU51bWJlcmluZ3Moc3RhcnRJbmRleCwgZW5kSW5kZXgsIG51bWJlcmluZ3MsIHBhcmFncmFwaHNEZWVwQ29weSk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldFJlbW92ZU51bWJlcmluZ3NDb21tYW5kKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0aGlzLnRhcmdldHMpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNhdmVBcHBseUltYWdlU3R5bGVUb0hpc3RvcnkoaW1hZ2U6IEltYWdlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLnNlc3Npb24ubW9kZWwuaW1hZ2VzLmZpbmQoeCA9PiB4Lmluc2VydEluZGV4ID09PSBpbWFnZS5pbnNlcnRJbmRleCk7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoQXBwbHlJbWFnZVN0eWxlKHByZXZpb3VzLCBpbWFnZSk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoXG4gICAgICAgICAgICBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0QXBwbHlJbWFnZVN0eWxlQ29tbWFuZChpbWFnZS5oZWlnaHQsIGltYWdlLndpZHRoLCBpbWFnZS5pbnNlcnRJbmRleCwgdGhpcy50YXJnZXRzKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2F2ZVJlcGxhY2VUb0hpc3RvcnkocmFuZ2U6IFJhbmdlLCBtb2RlbDogUmVwbGFjZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlc3RvcmVNb2RlbCA9IHRoaXMuY3JlYXRlUmVzdG9yZUZyb21TbGljZShyYW5nZS5zdGFydC5yb3csIHJhbmdlLnN0YXJ0LmNvbHVtbiwgcmFuZ2UuZW5kLnJvdywgcmFuZ2UuZW5kLmNvbHVtbik7XG4gICAgICAgIGlmIChtb2RlbC5pbnNlcnRQYXJhZ3JhcGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRJbmRleCwgY291bnQgfSA9IHRoaXMuaGlzdG9yeS5nZXREZWxldGVEYXRhRm9ySW5zZXJ0UGFyYWdyYXBocyhcbiAgICAgICAgICAgICAgICBDb250ZW50SGVscGVyLmdldENvbnRlbnRGcm9tSW5zZXJ0UGFyYWdyYXBoKG1vZGVsLmluc2VydFBhcmFncmFwaCksXG4gICAgICAgICAgICAgICAgbW9kZWwuaW5zZXJ0UGFyYWdyYXBoLFxuICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5tb2RlbC5wYXJhZ3JhcGhzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmVzdG9yZU1vZGVsLnN0YXJ0SW5kZXggPSBzdGFydEluZGV4O1xuICAgICAgICAgICAgcmVzdG9yZU1vZGVsLmVuZEluZGV4ID0gc3RhcnRJbmRleCArIGNvdW50IC0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3RvcmVNb2RlbC5lbmRJbmRleCA9IHJlc3RvcmVNb2RlbC5zdGFydEluZGV4ICsgKG1vZGVsLmluc2VydFRleHQ/LnRleHQubGVuZ3RoID8/IDEpOyAvLyB0aGlzIGlzIHRvIHJlc3RvcmUgaW4gcmFuZ2Ugd2l0aCBkZWxldGluZy9yZXBsYWNpbmcgY29udGVudCB3aXRoaW5cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaFJlcGxhY2UocmVzdG9yZU1vZGVsLCBtb2RlbCk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldFJlcGxhY2VDb21tYW5kKG1vZGVsLCB0aGlzLnRhcmdldHMpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVJlc3RvcmVGcm9tU2xpY2UocGFyYWdyYXBoU3RhcnQ6IG51bWJlciwgaW5kZXhJblN0YXJ0OiBudW1iZXIsIHBhcmFncmFwaEVuZDogbnVtYmVyLCBpbmRleEluRW5kOiBudW1iZXIpOiBSZXN0b3JlTW9kZWwge1xuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhUb0RvY3VtZW50SW5kZXgodGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIHBhcmFncmFwaFN0YXJ0LCBpbmRleEluU3RhcnQpO1xuICAgICAgICBjb25zdCBlbmRJbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoVG9Eb2N1bWVudEluZGV4KHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCBwYXJhZ3JhcGhFbmQsIGluZGV4SW5FbmQpIC0gMTtcbiAgICAgICAgY29uc3QgdGV4dCA9IHRoaXMuc2Vzc2lvbi5tb2RlbC5jb250ZW50LnNsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4ICsgMSk7XG4gICAgICAgIGNvbnN0IGZvcm1hdHMgPSBGb3JtYXRIZWxwZXIuc2xpY2VTZWN0aW9uKHRoaXMuc2Vzc2lvbi5tb2RlbC5mb3JtYXRzLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaHMgPSBJbmRleGVkRWxlbWVudEhlbHBlci5zbGljZVNlY3Rpb24odGhpcy5zZXNzaW9uLm1vZGVsLnBhcmFncmFwaHMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KS5tYXAoXG4gICAgICAgICAgICB4ID0+IG5ldyBQYXJhZ3JhcGhNb2RlbCh4KVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBpbWFnZXMgPSBJbmRleGVkRWxlbWVudEhlbHBlci5zbGljZVNlY3Rpb24odGhpcy5zZXNzaW9uLm1vZGVsLmltYWdlcywgc3RhcnRJbmRleCwgZW5kSW5kZXgpLm1hcCh4ID0+IG5ldyBJbWFnZU1vZGVsKHgpKTtcbiAgICAgICAgY29uc3QgdGFibGVzID0gSW5kZXhlZEVsZW1lbnRIZWxwZXIuc2xpY2VTZWN0aW9uKHRoaXMuc2Vzc2lvbi5tb2RlbC50YWJsZXMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KS5tYXAoeCA9PiBuZXcgVGFibGVNb2RlbCh4KSk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gSW5kZXhlZEVsZW1lbnRIZWxwZXIuc2xpY2VTZWN0aW9uKHRoaXMuc2Vzc2lvbi5tb2RlbC5lbGVtZW50cywgc3RhcnRJbmRleCwgZW5kSW5kZXgpLm1hcChcbiAgICAgICAgICAgIHggPT4gbmV3IEVsZW1lbnRNb2RlbCh7IC4uLngsIGlkOiAwLCBndWlkOiAnJyB9KVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBicmVha3MgPSBJbmRleGVkRWxlbWVudEhlbHBlci5zbGljZVNlY3Rpb24odGhpcy5zZXNzaW9uLm1vZGVsLmJyZWFrcywgc3RhcnRJbmRleCwgZW5kSW5kZXgpLm1hcCh4ID0+IG5ldyBCcmVha01vZGVsKHgpKTtcbiAgICAgICAgY29uc3QgdGFicyA9IEluZGV4ZWRFbGVtZW50SGVscGVyLnNsaWNlU2VjdGlvbih0aGlzLnNlc3Npb24ubW9kZWwudGFicywgc3RhcnRJbmRleCwgZW5kSW5kZXgpLm1hcCh4ID0+IG5ldyBUYWJNb2RlbCh4KSk7XG4gICAgICAgIGNvbnN0IGxpbmtzID0gTGlua0hlbHBlci5zbGljZVNlY3Rpb24odGhpcy5zZXNzaW9uLm1vZGVsLmxpbmtzLCBzdGFydEluZGV4LCBlbmRJbmRleCkubWFwKHggPT4gbmV3IExpbmtNb2RlbCh4KSk7XG4gICAgICAgIHJldHVybiBuZXcgUmVzdG9yZU1vZGVsKHsgc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRleHQsIGZvcm1hdHMsIHBhcmFncmFwaHMsIGltYWdlcywgdGFibGVzLCBlbGVtZW50cywgYnJlYWtzLCB0YWJzLCBsaW5rcyB9KTtcbiAgICB9XG5cbiAgICBjcmVhdGVDdXN0b21FbGVtZW50KGRhdGE6IEVsZW1lbnREYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5zZXJ0SW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFRvRG9jdW1lbnRJbmRleChcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLFxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQucm93LFxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQuY29sdW1uXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGluc2VydEVsZW1lbnQgPSBuZXcgSW5zZXJ0RWxlbWVudE1vZGVsKHsgZWxlbWVudDogbmV3IEVsZW1lbnRNb2RlbCh7IC4uLmRhdGEsIGluc2VydEluZGV4IH0pIH0pO1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUJ5KG5ldyBSZXBsYWNlTW9kZWwoeyBpbnNlcnRFbGVtZW50IH0pKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2F2ZUluc2VydEVsZW1lbnRUb0hpc3RvcnkoaW5zZXJ0RWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGVuZFBvaW50ID0gdGhpcy5zZXNzaW9uLmluc2VydEVsZW1lbnQodGhpcy5zZWxlY3Rpb24uY3Vyc29yLCBkYXRhKTtcbiAgICAgICAgdGhpcy5vbkRvY3VtZW50Q2hhbmdlKG5ldyBSYW5nZSh0aGlzLnNlbGVjdGlvbi5jdXJzb3IsIGVuZFBvaW50KSk7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICByZW1vdmVTZWxlY3RlZCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2F2ZVJlbW92ZVRvSGlzdG9yeSh0aGlzLnNlbGVjdGlvbi5yYW5nZSk7XG4gICAgICAgIHRoaXMucmVtb3ZlQ3VzdG9tRWxlbWVudHNEYXRhKCk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmUodGhpcy5zZWxlY3Rpb24ucmFuZ2UpO1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG5cbiAgICByZW1vdmVDdXN0b21FbGVtZW50c0RhdGEoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFRvRG9jdW1lbnRJbmRleChcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLFxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQucm93LFxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQuY29sdW1uXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID1cbiAgICAgICAgICAgIENvbnRlbnRIZWxwZXIucGFyYWdyYXBoVG9Eb2N1bWVudEluZGV4KFxuICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnJhbmdlLmVuZC5yb3csXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2UuZW5kLmNvbHVtblxuICAgICAgICAgICAgKSAtIDE7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gSW5kZXhlZEVsZW1lbnRIZWxwZXIuc2xpY2VTZWN0aW9uKHRoaXMuc2Vzc2lvbi5tb2RlbC5lbGVtZW50cywgc3RhcnRJbmRleCwgZW5kSW5kZXgpLnNsaWNlKCk7XG4gICAgICAgIGlmIChlbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5yZW1vdmVDdXN0b21FbGVtZW50c0RhdGEoZWxlbWVudHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25JbnB1dCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IHRoaXMudGV4dElucHV0LmdldEluc2VydFRleHQoKTtcbiAgICAgICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc0VtcHR5TnVtYmVyaW5nUGFyYWdyYXBoID0gdGhpcy5pc0VtcHR5TnVtYmVyaW5nUGFyYWdyYXBoKHRoaXMuc2VsZWN0aW9uLmN1cnNvci5yb3cpO1xuICAgICAgICBpZiAodGV4dCA9PT0gTkVXX0xJTkVfTUFSS1VQICYmIHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkgJiYgaXNFbXB0eU51bWJlcmluZ1BhcmFncmFwaCkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVOdW1iZXJpbmdzRnJvbVBhcmFncmFwaHMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0KHRleHQpO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxDdXJzb3JJbnRvTWFpblZpZXcoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ3V0KGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRTZWxlY3RlZFRleHQoKTtcbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLnNldENsaXBib2FyZERhdGEoZGF0YSk7XG4gICAgICAgIHRoaXMuY2xpcGJvYXJkLmNvcHkoZGF0YSk7XG4gICAgICAgIHRoaXMuY3V0KCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsQ3Vyc29ySW50b01haW5WaWV3KCk7XG4gICAgfVxuXG4gICAgb25Db3B5KGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRTZWxlY3RlZFRleHQoKTtcbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLnNldENsaXBib2FyZERhdGEoZGF0YSk7XG4gICAgICAgIHRoaXMuY2xpcGJvYXJkLmNvcHkoZGF0YSk7XG4gICAgfVxuXG4gICAgb25QYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMudGV4dElucHV0LmdldENsaXBib2FyZERhdGEoZXZlbnQpO1xuICAgICAgICB0aGlzLnBhc3RlRGF0YShkYXRhKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRSZXNpemVMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMucmVyZW5kZXJSZXNpemUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVzdHJveVJlc2l6ZUxpc3RlbmVyKCk6IHZvaWQge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5yZXJlbmRlclJlc2l6ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXJlbmRlck1hcmtlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5sb29wLnNjaGVkdWxlKHsgbWFya2VyOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVyZW5kZXJSZXNpemUgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMubWFpblJlbmRlcmVyLm9uUmVzaXplKHRydWUpO1xuICAgIH07XG5cbiAgICBvbkJsdXIoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy50ZXh0SW5wdXQuaXNGb2N1c2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRleHRJbnB1dC5pc0ZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5oaWRlQ3Vyc29yKCk7XG4gICAgfVxuXG4gICAgb25Gb2N1cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudGV4dElucHV0LmlzRm9jdXNlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uYmx1cigpO1xuICAgICAgICB0aGlzLnRleHRJbnB1dC5pc0ZvY3VzZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNob3dDdXJzb3IoKTtcbiAgICB9XG5cbiAgICBvbk1vdXNlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3VzdG9tRWxlbWVudCA9IHRoaXMuc2V0Q3VycmVudFNlc3Npb24oZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgaWYgKGN1c3RvbUVsZW1lbnQgJiYgY3VzdG9tRWxlbWVudC50YWdOYW1lICE9PSB0aGlzLnRhYmxlQ2VsbFRhZ05hbWUgJiYgY3VzdG9tRWxlbWVudC50YWdOYW1lICE9PSB0aGlzLmVkZ2VFbGVtZW50VGFnTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c0N1c3RvbUNvbXBvbmVudChjdXN0b21FbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmJsdXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uTGVmdENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUVsZW1lbnQgPSB0aGlzLnNldEN1cnJlbnRTZXNzaW9uKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XG4gICAgICAgIGlmIChjdXN0b21FbGVtZW50ICYmIGN1c3RvbUVsZW1lbnQudGFnTmFtZSAhPT0gdGhpcy50YWJsZUNlbGxUYWdOYW1lICYmIGN1c3RvbUVsZW1lbnQudGFnTmFtZSAhPT0gdGhpcy5lZGdlRWxlbWVudFRhZ05hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNDdXN0b21Db21wb25lbnQoY3VzdG9tRWxlbWVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMucmVuZGVyZXIuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXNVc2luZ01pZHBvaW50KGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVTZWxlY3Rpb24ocG9zaXRpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IocG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGlmIChldmVudC5jdHJsS2V5KSB7XG4gICAgICAgICAgICBjb25zdCBsaW5rID0gdGhpcy5nZXRMaW5rTW9kZWwoZXZlbnQpO1xuICAgICAgICAgICAgaWYgKGxpbmspIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cub3BlbihsaW5rLmxpbmspO1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tb3VzZUhhbmRsZXIuc3RhcnRNb3VzZVByZXNzKHRoaXMpO1xuICAgIH1cblxuICAgIG9uRG91YmxlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaXNFZGdlRWRpdCA9IHRoaXMubWFpblNlc3Npb24uY3VzdG9tQ29tcG9uZW50cy5lZGdlcy5pc0VkaXQ7XG4gICAgICAgIGNvbnN0IGN1c3RvbUVsZW1lbnQgPSB0aGlzLmdldEN1c3RvbUVsZW1lbnQoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgaWYgKGN1c3RvbUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRTZXNzaW9uSWQgPSArY3VzdG9tRWxlbWVudC5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgnZGF0YS1zZXNzaW9uLWlkJykudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnJlZ3VsYXRvclNlcnZpY2Uuc2V0Q3VzdG9tU2Vzc2lvbkFzQ3VycmVudChlbGVtZW50U2Vzc2lvbklkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5zZXRNYWluU2Vzc2lvbkFzQ3VycmVudCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN1c3RvbUVsZW1lbnQgJiYgY3VzdG9tRWxlbWVudC50YWdOYW1lICE9PSB0aGlzLnRhYmxlQ2VsbFRhZ05hbWUgJiYgY3VzdG9tRWxlbWVudC50YWdOYW1lICE9PSB0aGlzLmVkZ2VFbGVtZW50VGFnTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c0N1c3RvbUNvbXBvbmVudChjdXN0b21FbGVtZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5yZW5kZXJlci5zY3JlZW5Ub1RleHRDb29yZGluYXRlc1VzaW5nTWlkcG9pbnQoZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG4gICAgICAgIGlmICghaXNFZGdlRWRpdCAmJiB0aGlzLm1haW5TZXNzaW9uLmN1c3RvbUNvbXBvbmVudHMuZWRnZXMuaXNFZGl0KSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZUN1cnNvcihwb3NpdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMuc2Vzc2lvbi5nZXRXb3JkUmFuZ2UocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VTZWxlY3Rpb24ocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIG9uVHJpcGxlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3VzdG9tRWxlbWVudCA9IHRoaXMuc2V0Q3VycmVudFNlc3Npb24oZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgaWYgKGN1c3RvbUVsZW1lbnQgJiYgY3VzdG9tRWxlbWVudC50YWdOYW1lICE9PSB0aGlzLnRhYmxlQ2VsbFRhZ05hbWUgJiYgY3VzdG9tRWxlbWVudC50YWdOYW1lICE9PSB0aGlzLmVkZ2VFbGVtZW50VGFnTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c0N1c3RvbUNvbXBvbmVudChjdXN0b21FbGVtZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5yZW5kZXJlci5zY3JlZW5Ub1RleHRDb29yZGluYXRlc1VzaW5nTWlkcG9pbnQoZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gbmV3IEN1cnNvclBhcmFncmFwaChwb3NpdGlvbi5yb3csIDApO1xuICAgICAgICBjb25zdCBlbmQgPSBuZXcgQ3Vyc29yUGFyYWdyYXBoKHBvc2l0aW9uLnJvdywgdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLmdldFBhcmFncmFwaENvbnRlbnQocG9zaXRpb24ucm93KS5sZW5ndGgpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZVNlbGVjdGlvbihzdGFydCwgZW5kKTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIG9uUXVhZENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUVsZW1lbnQgPSB0aGlzLnNldEN1cnJlbnRTZXNzaW9uKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XG4gICAgICAgIGlmIChjdXN0b21FbGVtZW50ICYmIGN1c3RvbUVsZW1lbnQudGFnTmFtZSAhPT0gdGhpcy50YWJsZUNlbGxUYWdOYW1lICYmIGN1c3RvbUVsZW1lbnQudGFnTmFtZSAhPT0gdGhpcy5lZGdlRWxlbWVudFRhZ05hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNDdXN0b21Db21wb25lbnQoY3VzdG9tRWxlbWVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RBbGwodGhpcy5zZXNzaW9uLm1vZGVsKTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIG9uTW91c2VXaGVlbChldmVudDogV2hlZWxFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQuY3RybEtleSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmFjdG9yID0gMC4zNTtcbiAgICAgICAgY29uc3Qgc2Nyb2xsU3BlZWQgPSA0O1xuICAgICAgICBjb25zdCBkZWx0YVkgPSBldmVudC5kZWx0YVkgKiBmYWN0b3IgKiBzY3JvbGxTcGVlZDtcbiAgICAgICAgdGhpcy5tYWluUmVuZGVyZXIuc2Nyb2xsQnkoZGVsdGFZKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgZ2V0TGlua01vZGVsKGV2ZW50OiBNb3VzZUV2ZW50KTogTGlua01vZGVsIHtcbiAgICAgICAgY29uc3QgaXNJbnNpZGVFZGdlID0gdGhpcy5pc0luc2lkZUVkZ2UoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgY29uc3QgaXNFZGdlRWRpdCA9IHRoaXMubWFpblNlc3Npb24uY3VzdG9tQ29tcG9uZW50cy5lZGdlcy5pc0VkaXQ7XG4gICAgICAgIGlmICghaXNJbnNpZGVFZGdlIHx8IGlzRWRnZUVkaXQpIHtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5yZW5kZXJlci5zY3JlZW5Ub1RleHRDb29yZGluYXRlc1VzaW5nQm91bmRhcnkoZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmdldExpbmtNb2RlbChwb3NpdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VzdG9tRWxlbWVudCA9IHRoaXMuZ2V0Q3VzdG9tRWxlbWVudChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpO1xuICAgICAgICBjb25zdCBzZXNzaW9uSWQgPSArY3VzdG9tRWxlbWVudC5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgnZGF0YS1zZXNzaW9uLWlkJykudmFsdWU7XG4gICAgICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLnJlZ3VsYXRvclNlcnZpY2UuZ2V0U2Vzc2lvbk1vZGVsKHNlc3Npb25JZCk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gc2Vzc2lvbi5yZW5kZXJlci5zY3JlZW5Ub1RleHRDb29yZGluYXRlc1VzaW5nQm91bmRhcnkoXG4gICAgICAgICAgICBldmVudC5jbGllbnRYLFxuICAgICAgICAgICAgZXZlbnQuY2xpZW50WSxcbiAgICAgICAgICAgIGN1c3RvbUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHNlc3Npb24uc2Vzc2lvbi5nZXRMaW5rTW9kZWwocG9zaXRpb24pO1xuICAgIH1cblxuICAgIHNldEN1cnJlbnRTZXNzaW9uKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgY29uc3QgY3VzdG9tRWxlbWVudCA9IHRoaXMuZ2V0Q3VzdG9tRWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgY29uc3QgaXNJbnNpZGVFZGdlID0gdGhpcy5pc0luc2lkZUVkZ2UoY3VzdG9tRWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGlzRWRnZUVkaXQgPSB0aGlzLm1haW5TZXNzaW9uLmN1c3RvbUNvbXBvbmVudHMuZWRnZXMuaXNFZGl0O1xuICAgICAgICBpZiAoIWN1c3RvbUVsZW1lbnQgfHwgKCFpc0VkZ2VFZGl0ICYmIGlzSW5zaWRlRWRnZSkpIHtcbiAgICAgICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5zZXRNYWluU2Vzc2lvbkFzQ3VycmVudCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tRWxlbWVudFRhZ05hbWVzLmluY2x1ZGVzKGN1c3RvbUVsZW1lbnQ/LnRhZ05hbWUpID8gY3VzdG9tRWxlbWVudCA6IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbGVtZW50U2Vzc2lvbklkID0gK2N1c3RvbUVsZW1lbnQuYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oJ2RhdGEtc2Vzc2lvbi1pZCcpLnZhbHVlO1xuICAgICAgICB0aGlzLnJlZ3VsYXRvclNlcnZpY2Uuc2V0Q3VzdG9tU2Vzc2lvbkFzQ3VycmVudChlbGVtZW50U2Vzc2lvbklkKTtcbiAgICAgICAgcmV0dXJuIGN1c3RvbUVsZW1lbnQudGFnTmFtZSAhPT0gdGhpcy5lZGdlRWxlbWVudFRhZ05hbWUgPyBjdXN0b21FbGVtZW50IDogbnVsbDtcbiAgICB9XG5cbiAgICBnZXRDdXN0b21FbGVtZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgaWYgKCFlbGVtZW50IHx8IGVsZW1lbnQudGFnTmFtZSA9PT0gdGhpcy5wYXJlbnRUYWdOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1c3RvbUVsZW1lbnRUYWdOYW1lcy5pbmNsdWRlcyhlbGVtZW50LnRhZ05hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEN1c3RvbUVsZW1lbnQoZWxlbWVudC5wYXJlbnRFbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzSW5zaWRlRWRnZShlbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5nZXRQYXJlbnRFZGdlKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIGdldFBhcmVudEVkZ2UoZWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgaWYgKCFlbGVtZW50IHx8IGVsZW1lbnQudGFnTmFtZSA9PT0gdGhpcy5wYXJlbnRUYWdOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LnRhZ05hbWUgPT09IHRoaXMuZWRnZUVsZW1lbnRUYWdOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFBhcmVudEVkZ2UoZWxlbWVudC5wYXJlbnRFbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHN0cmluZyBvZiB0ZXh0IGN1cnJlbnRseSBoaWdobGlnaHRlZC5cbiAgICAgKi9cbiAgICBnZXRTZWxlY3RlZFRleHQoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uUmFuZ2UgPSB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZFJhbmdlO1xuICAgICAgICBpZiAoc2VsZWN0aW9uUmFuZ2UuaXNFbXB0eSkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoUG9zaXRpb25Ub0RvY3VtZW50SW5kZXgodGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIHNlbGVjdGlvblJhbmdlLnN0YXJ0KTtcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFBvc2l0aW9uVG9Eb2N1bWVudEluZGV4KHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCBzZWxlY3Rpb25SYW5nZS5lbmQpO1xuICAgICAgICBsZXQgZWxlbWVudEluZGV4ZXM6IG51bWJlcltdID0gW107XG4gICAgICAgIENvbnRlbnRIZWxwZXIuc2V0SW5kZXhlc0VsZW1lbnRzSW5JbnRlcnZhbCh0aGlzLnNlc3Npb24ubW9kZWwuYnJlYWtzLCBlbGVtZW50SW5kZXhlcywgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICBDb250ZW50SGVscGVyLnNldEluZGV4ZXNFbGVtZW50c0luSW50ZXJ2YWwodGhpcy5zZXNzaW9uLm1vZGVsLnRhYmxlcywgZWxlbWVudEluZGV4ZXMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgICAgICAgQ29udGVudEhlbHBlci5zZXRJbmRleGVzRWxlbWVudHNJbkludGVydmFsKHRoaXMuc2Vzc2lvbi5tb2RlbC5pbWFnZXMsIGVsZW1lbnRJbmRleGVzLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIENvbnRlbnRIZWxwZXIuc2V0SW5kZXhlc0VsZW1lbnRzSW5JbnRlcnZhbCh0aGlzLnNlc3Npb24ubW9kZWwuZWxlbWVudHMsIGVsZW1lbnRJbmRleGVzLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIENvbnRlbnRIZWxwZXIuc2V0SW5kZXhlc0VsZW1lbnRzSW5JbnRlcnZhbCh0aGlzLnNlc3Npb24ubW9kZWwudGFicywgZWxlbWVudEluZGV4ZXMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgICAgICAgZWxlbWVudEluZGV4ZXMuc29ydCgoYSwgYikgPT4gYiAtIGEpO1xuICAgICAgICBsZXQgdGV4dEludGVydmFsID0gdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLmdldFRleHRSYW5nZShzZWxlY3Rpb25SYW5nZSk7XG4gICAgICAgIGVsZW1lbnRJbmRleGVzLmZvckVhY2goeCA9PiB7XG4gICAgICAgICAgICB0ZXh0SW50ZXJ2YWwgPSB0ZXh0SW50ZXJ2YWwuc2xpY2UoMCwgeCkgKyB0ZXh0SW50ZXJ2YWwuc2xpY2UoeCArIDEpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGV4dEludGVydmFsO1xuICAgIH1cblxuICAgIGluaXRNYWluU2Vzc2lvbigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFnZVdpZHRoID0gdGhpcy5jdXN0b21QYWdlV2lkdGggPz8gdGhpcy5tb2RlbC5wYWdlV2lkdGg7XG4gICAgICAgIHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUubWF4V2lkdGggPSBgJHtwYWdlV2lkdGh9cHhgO1xuICAgICAgICBjb25zdCBzY2FsaW5nUmF0aW8gPSB0aGlzLmN1c3RvbVBhZ2VXaWR0aCA/IFNjYWxpbmdIZWxwZXIuZ2V0UmF0aW8odGhpcy5jdXN0b21QYWdlV2lkdGgsIHRoaXMubW9kZWwucGFnZVdpZHRoKSA6IDE7XG4gICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5hZGRNYWluU2Vzc2lvbih0aGlzLm1vZGVsLCBwYWdlV2lkdGgsIHNjYWxpbmdSYXRpbywgdGhpcy5jb250YWluZXIpO1xuICAgIH1cblxuICAgIG9uU2VsZWN0aW9uQ2hhbmdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlc3Npb24uYXBwbHlUb29sYmFyU3R5bGVzKCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlU2VsZWN0aW9uKHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkUmFuZ2UpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNFbXB0eSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVDdXJzb3IoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2Uuc2V0SGFzU2VsZWN0aW9uKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KTtcbiAgICAgICAgdGhpcy5yZXJlbmRlck1hcmtlcigpO1xuICAgIH1cblxuICAgIGVuYWJsZVNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VzdG9tRWxlbWVudCA9IHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgW2RhdGEtc2Vzc2lvbi1pZD1cIiR7dGhpcy5zZXNzaW9uLnNlc3Npb25JZH1cIl1gKTtcbiAgICAgICAgaWYgKGN1c3RvbUVsZW1lbnQudGFnTmFtZSA9PT0gdGhpcy50YWJsZUNlbGxUYWdOYW1lKSB7XG4gICAgICAgICAgICBjb25zdCB0YWJsZVNlc3Npb24gPSB0aGlzLnJlZ3VsYXRvclNlcnZpY2UuZ2V0U2Vzc2lvbih0aGlzLnJlZ3VsYXRvclNlcnZpY2UuY3VycmVudFNlc3Npb24ucGFyZW50U2Vzc2lvbklkKTtcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlID0gdGFibGVTZXNzaW9uLmN1c3RvbUNvbXBvbmVudHMudGFibGVzLmZpbmQoXG4gICAgICAgICAgICAgICAgeCA9PiB4Lmluc3RhbmNlLnNlc3Npb25JZCA9PT0gdGhpcy5yZWd1bGF0b3JTZXJ2aWNlLmN1cnJlbnRTZXNzaW9uLnBhcmVudFNlc3Npb25JZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRhYmxlLmluc3RhbmNlLnRhYmxlU2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uZW5hYmxlU2VsZWN0aW9uKCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuY3Vyc29yTGF5ZXIuc2hvd0N1cnNvcigpO1xuICAgIH1cblxuICAgIG9uSG90S2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2Uua2V5RG93bihldmVudCk7XG4gICAgfVxuXG4gICAgb25QcmludCgpOiB2b2lkIHtcbiAgICAgICAgUHJpbnRIZWxwZXIucHJpbnREb2N1bWVudCh0aGlzLm1haW5TZXNzaW9uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRG9jdW1lbnRDaGFuZ2UgPSAocmFuZ2U6IFJhbmdlKTogdm9pZCA9PiB7XG4gICAgICAgIGxldCBsYXN0Um93ID0gcmFuZ2Uuc3RhcnQucm93ID09PSByYW5nZS5lbmQucm93ID8gcmFuZ2UuZW5kLnJvdyA6IEluZmluaXR5O1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUxpbmVzKHJhbmdlLnN0YXJ0LnJvdywgbGFzdFJvdyk7XG5cbiAgICAgICAgLy8gVXBkYXRlIGN1cnNvciBiZWNhdXNlIHRhYiBjaGFyYWN0ZXJzIGNhbiBpbmZsdWVuY2UgdGhlIGN1cnNvciBwb3NpdGlvbi5cbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVDdXJzb3IoKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBmb2N1c0N1c3RvbUNvbXBvbmVudChlbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleCA9ICtlbGVtZW50LmF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKCdkYXRhLWluc2VydC1pbmRleCcpLnZhbHVlO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPVxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmN1c3RvbUNvbXBvbmVudHMuaW1hZ2VzLmZpbmQoeCA9PiB4Lmluc3RhbmNlLmluc2VydEluZGV4ID09PSBpbmRleCkgPz9cbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5jdXN0b21Db21wb25lbnRzLnRhYmxlcy5maW5kKHggPT4geC5pbnN0YW5jZS5pbnNlcnRJbmRleCA9PT0gaW5kZXgpID8/XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uY3VzdG9tQ29tcG9uZW50cy5jdXN0b21FbGVtZW50cy5maW5kKHggPT4geC5pbnN0YW5jZS5pbnNlcnRJbmRleCA9PT0gaW5kZXgpO1xuICAgICAgICBpZiAoIWNvbXBvbmVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLnNlc3Npb24uZGlzcGxheURhdGEuaW5kZXhUb1Bvc2l0aW9uKGluZGV4LCAwKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uZm9jdXMoY29tcG9uZW50LCBwb3NpdGlvbik7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzRW1wdHlOdW1iZXJpbmdQYXJhZ3JhcGgocGFyYWdyYXBoSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBjdXJyZW50TGluZSA9IHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5nZXRQYXJhZ3JhcGhDb250ZW50KHBhcmFncmFwaEluZGV4KTtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRMaW5lLmxlbmd0aCA9PT0gMCAmJiB0aGlzLnNlc3Npb24ubW9kZWwucGFyYWdyYXBoc1twYXJhZ3JhcGhJbmRleF0ucGFyYWdyYXBoU3R5bGUubnVtYmVyaW5nSWQgIT09IG51bGw7XG4gICAgfVxuXG4gICAgc2Nyb2xsQ3Vyc29ySW50b01haW5WaWV3KG9mZnNldD86IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZXNzaW9uICE9PSB0aGlzLm1haW5TZXNzaW9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tYWluUmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcobnVsbCwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICBjaGFuZ2VkVGFibGVTaXplKGluc2VydEluZGV4OiBudW1iZXIsIHNlc3Npb25JZDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLnJlZ3VsYXRvclNlcnZpY2UuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpO1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGggPSBDb250ZW50SGVscGVyLmRvY3VtZW50SW5kZXhUb1BhcmFncmFwaEluZGV4KHNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocywgaW5zZXJ0SW5kZXgpLnJvdztcbiAgICAgICAgc2Vzc2lvbi5kaXNwbGF5RGF0YS5yZXNldEFsbE51bWJlcmluZ0luZm8ocGFyYWdyYXBoKTtcbiAgICAgICAgc2Vzc2lvbi5kaXNwbGF5RGF0YS51cGRhdGVOZXh0TGluZUluZGV4ZXMocGFyYWdyYXBoLCBwYXJhZ3JhcGgpO1xuICAgICAgICBzZXNzaW9uLmRpc3BsYXlEYXRhLnVwZGF0ZU51bWJlcmluZ3NEYXRhT25DaGFuZ2UocGFyYWdyYXBoICsgMSk7XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG5cbiAgICBpbnNlcnRUYWJsZVJvd3MoaW5zZXJ0SW5kZXg6IG51bWJlciwgcm93c0NvdW50OiBudW1iZXIsIHRhcmdldEluZGV4OiBudW1iZXIsIGluaGVyaXRJbmRleDogbnVtYmVyLCBzZXNzaW9uSWQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnJlZ3VsYXRvclNlcnZpY2Uuc2V0Q3VzdG9tU2Vzc2lvbkFzQ3VycmVudChzZXNzaW9uSWQpO1xuICAgICAgICBjb25zdCBiZWZvcmVUYWJsZSA9IENvbnRlbnRIZWxwZXIuZG9jdW1lbnRJbmRleFRvUGFyYWdyYXBoSW5kZXgodGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIGluc2VydEluZGV4KTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IoYmVmb3JlVGFibGUpO1xuICAgICAgICBjb25zdCB0YWJsZSA9IHRoaXMuc2Vzc2lvbi5tb2RlbC50YWJsZXMuZmluZCh4ID0+IHguaW5zZXJ0SW5kZXggPT09IGluc2VydEluZGV4KTtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hJbnNlcnRUYWJsZVJvd3MoaW5zZXJ0SW5kZXgsIHJvd3NDb3VudCwgdGFyZ2V0SW5kZXgsIGluaGVyaXRJbmRleCwgdGFibGUpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFxuICAgICAgICAgICAgU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydFRhYmxlUm93c0NvbW1hbmQocm93c0NvdW50LCBpbmhlcml0SW5kZXgsIGluc2VydEluZGV4LCB0YXJnZXRJbmRleCwgdGhpcy50YXJnZXRzKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnNlc3Npb24uaW5zZXJ0VGFibGVSb3dzKGluc2VydEluZGV4LCByb3dzQ291bnQsIHRhcmdldEluZGV4LCBpbmhlcml0SW5kZXgpO1xuICAgICAgICB0aGlzLmNoYW5nZWRUYWJsZVNpemUoaW5zZXJ0SW5kZXgsIHNlc3Npb25JZCk7XG4gICAgfVxuXG4gICAgaW5zZXJ0VGFibGVDb2x1bW5zKGluc2VydEluZGV4OiBudW1iZXIsIGNvbHVtbnNDb3VudDogbnVtYmVyLCB0YXJnZXRJbmRleDogbnVtYmVyLCBpbmhlcml0SW5kZXg6IG51bWJlciwgc2Vzc2lvbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZWd1bGF0b3JTZXJ2aWNlLnNldEN1c3RvbVNlc3Npb25Bc0N1cnJlbnQoc2Vzc2lvbklkKTtcbiAgICAgICAgY29uc3QgYmVmb3JlVGFibGUgPSBDb250ZW50SGVscGVyLmRvY3VtZW50SW5kZXhUb1BhcmFncmFwaEluZGV4KHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCBpbnNlcnRJbmRleCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnBsYWNlQ3Vyc29yKGJlZm9yZVRhYmxlKTtcbiAgICAgICAgY29uc3QgdGFibGUgPSB0aGlzLnNlc3Npb24ubW9kZWwudGFibGVzLmZpbmQoeCA9PiB4Lmluc2VydEluZGV4ID09PSBpbnNlcnRJbmRleCk7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoSW5zZXJ0VGFibGVDb2x1bW5zKGluc2VydEluZGV4LCBjb2x1bW5zQ291bnQsIHRhcmdldEluZGV4LCBpbmhlcml0SW5kZXgsIHRhYmxlKTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChcbiAgICAgICAgICAgIFNhdmVDb21tYW5kc0hlbHBlci5nZXRJbnNlcnRUYWJsZUNvbHVtbnNDb21tYW5kKGNvbHVtbnNDb3VudCwgaW5oZXJpdEluZGV4LCBpbnNlcnRJbmRleCwgdGFyZ2V0SW5kZXgsIHRoaXMudGFyZ2V0cylcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydFRhYmxlQ29sdW1ucyhpbnNlcnRJbmRleCwgY29sdW1uc0NvdW50LCB0YXJnZXRJbmRleCwgaW5oZXJpdEluZGV4KTtcbiAgICAgICAgdGhpcy5jaGFuZ2VkVGFibGVTaXplKGluc2VydEluZGV4LCBzZXNzaW9uSWQpO1xuICAgIH1cblxuICAgIHJlbW92ZVRhYmxlUm93cyhpbnNlcnRJbmRleDogbnVtYmVyLCBzdGFydEluZGV4OiBudW1iZXIsIGVuZEluZGV4OiBudW1iZXIsIHNlc3Npb25JZDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5zZXRDdXN0b21TZXNzaW9uQXNDdXJyZW50KHNlc3Npb25JZCk7XG4gICAgICAgIGNvbnN0IGJlZm9yZVRhYmxlID0gQ29udGVudEhlbHBlci5kb2N1bWVudEluZGV4VG9QYXJhZ3JhcGhJbmRleCh0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocywgaW5zZXJ0SW5kZXgpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZUN1cnNvcihiZWZvcmVUYWJsZSk7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy5zZXNzaW9uLm1vZGVsLnRhYmxlcy5maW5kKHggPT4geC5pbnNlcnRJbmRleCA9PT0gaW5zZXJ0SW5kZXgpO1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaFJlbW92ZVRhYmxlUm93cyhpbnNlcnRJbmRleCwgc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRhYmxlKTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0UmVtb3ZlVGFibGVSb3dzQ29tbWFuZChzdGFydEluZGV4LCBlbmRJbmRleCwgaW5zZXJ0SW5kZXgsIHRoaXMudGFyZ2V0cykpO1xuICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlVGFibGVSb3dzKGluc2VydEluZGV4LCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIHRoaXMuY2hhbmdlZFRhYmxlU2l6ZShpbnNlcnRJbmRleCwgc2Vzc2lvbklkKTtcbiAgICB9XG5cbiAgICByZW1vdmVUYWJsZUNvbHVtbnMoaW5zZXJ0SW5kZXg6IG51bWJlciwgc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyLCBzZXNzaW9uSWQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnJlZ3VsYXRvclNlcnZpY2Uuc2V0Q3VzdG9tU2Vzc2lvbkFzQ3VycmVudChzZXNzaW9uSWQpO1xuICAgICAgICBjb25zdCBiZWZvcmVUYWJsZSA9IENvbnRlbnRIZWxwZXIuZG9jdW1lbnRJbmRleFRvUGFyYWdyYXBoSW5kZXgodGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIGluc2VydEluZGV4KTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IoYmVmb3JlVGFibGUpO1xuICAgICAgICBjb25zdCB0YWJsZSA9IHRoaXMuc2Vzc2lvbi5tb2RlbC50YWJsZXMuZmluZCh4ID0+IHguaW5zZXJ0SW5kZXggPT09IGluc2VydEluZGV4KTtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hSZW1vdmVUYWJsZUNvbHVtbnMoaW5zZXJ0SW5kZXgsIHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0YWJsZSk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoXG4gICAgICAgICAgICBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0UmVtb3ZlVGFibGVDb2x1bW5zQ29tbWFuZChzdGFydEluZGV4LCBlbmRJbmRleCwgaW5zZXJ0SW5kZXgsIHRoaXMudGFyZ2V0cylcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZVRhYmxlQ29sdW1ucyhpbnNlcnRJbmRleCwgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICB0aGlzLmNoYW5nZWRUYWJsZVNpemUoaW5zZXJ0SW5kZXgsIHNlc3Npb25JZCk7XG4gICAgfVxuXG4gICAgcmVzaXplVGFibGVDb2x1bW5zKHJlc2l6ZVRhYmxlQ29sdW1uczogUmVzaXplVGFibGVDb2x1bW5zTW9kZWwsIHNlc3Npb25JZDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5zZXRDdXN0b21TZXNzaW9uQXNDdXJyZW50KHNlc3Npb25JZCk7XG4gICAgICAgIGNvbnN0IGJlZm9yZVRhYmxlID0gQ29udGVudEhlbHBlci5kb2N1bWVudEluZGV4VG9QYXJhZ3JhcGhJbmRleChcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLFxuICAgICAgICAgICAgcmVzaXplVGFibGVDb2x1bW5zLmluc2VydEluZGV4XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnBsYWNlQ3Vyc29yKGJlZm9yZVRhYmxlKTtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hSZXNpemVUYWJsZUNvbHVtbnMocmVzaXplVGFibGVDb2x1bW5zKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLnJlc2l6ZVRhYmxlQ29sdW1ucyhyZXNpemVUYWJsZUNvbHVtbnMpO1xuICAgICAgICB0aGlzLmNoYW5nZWRUYWJsZVNpemUocmVzaXplVGFibGVDb2x1bW5zLmluc2VydEluZGV4LCBzZXNzaW9uSWQpO1xuICAgIH1cblxuICAgIG9uTW91c2VQcmVzc2VkTW92ZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMucmVuZGVyZXIuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXNVc2luZ01pZHBvaW50KGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuICAgICAgICBjb25zdCBjdXJzb3IgPSB0aGlzLnNlbGVjdGlvbi5jdXJzb3I7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVTZWxlY3Rpb24ocG9zaXRpb24pO1xuICAgICAgICBpZiAoY3Vyc29yLmNvbHVtbiAhPT0gdGhpcy5zZWxlY3Rpb24uY3Vyc29yLmNvbHVtbiB8fCBjdXJzb3Iucm93ICE9PSB0aGlzLnNlbGVjdGlvbi5jdXJzb3Iucm93KSB7XG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zY3JvbGxDdXJzb3JJbnRvTWFpblZpZXcoKTtcbiAgICB9XG5cbiAgICBwcm92aWRlVGV4dFN0eWxlKGNvbXBvbmVudDogQmFzZU5vZGVyQ29tcG9uZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLnJlZ3VsYXRvclNlcnZpY2UuZ2V0U2Vzc2lvbihjb21wb25lbnQuc2Vzc2lvbklkKTtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gc2Vzc2lvbi5tb2RlbC5mb3JtYXRzLmZpbmQoeCA9PiB4LnN0YXJ0SW5kZXggPD0gY29tcG9uZW50Lmluc2VydEluZGV4ICYmIHguZW5kSW5kZXggPj0gY29tcG9uZW50Lmluc2VydEluZGV4KTtcbiAgICAgICAgY29tcG9uZW50LnJlY2VpdmVTdHlsZShmb3JtYXQudGV4dFN0eWxlKTtcbiAgICB9XG5cbiAgICByZWNlaXZlVGV4dFN0eWxlU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UucmVjZWl2ZVRleHRTdHlsZSQuc3Vic2NyaWJlKHggPT4gdGhpcy5wcm92aWRlVGV4dFN0eWxlKHgpKTtcbiAgICB9XG5cbiAgICBzZWFyY2hPcHRpb25TdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5zZWFyY2hPcHRpb25zJC5zdWJzY3JpYmUoc2VhcmNoT3B0aW9ucyA9PiB7XG4gICAgICAgICAgICB0aGlzLmZpbmQoc2VhcmNoT3B0aW9ucyk7XG4gICAgICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2Uuc2VhcmNoSXRlcmF0aW9uID0gdGhpcy51cGRhdGVDb3VudGVyKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlcGxhY2VTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5yZXBsYWNlJC5zdWJzY3JpYmUocmVwbGFjZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2UocmVwbGFjZS5zZWFyY2hWYWx1ZSwgcmVwbGFjZS5yZXBsYWNlVmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLnNlYXJjaEl0ZXJhdGlvbiA9IHRoaXMudXBkYXRlQ291bnRlcigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXRUZXh0U3R5bGVzU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2Uuc2V0VGV4dFN0eWxlcyQuc3Vic2NyaWJlKHRleHRTdHlsZXMgPT4ge1xuICAgICAgICAgICAgdGhpcy5hcHBseVRleHRTdHlsZXModGV4dFN0eWxlcyk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldFBhcmFncmFwaFN0eWxlc1N1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnNldFBhcmFncmFwaFN0eWxlcyQuc3Vic2NyaWJlKHBhcmFncmFwaFN0eWxlcyA9PiB7XG4gICAgICAgICAgICB0aGlzLmFwcGx5UGFyYWdyYXBoU3R5bGVzKHBhcmFncmFwaFN0eWxlcyk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldE51bWJlcmluZ1RlbXBsYXRlVHlwZVN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnNldE51bWJlcmluZ1RlbXBsYXRlVHlwZSQuc3Vic2NyaWJlKG51bWJlcmluZ1RlbXBsYXRlVHlwZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldE51bWJlcmluZ1RlbXBsYXRlKG51bWJlcmluZ1RlbXBsYXRlVHlwZSk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlbW92ZU51bWJlcmluZ3NTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5yZW1vdmVOdW1iZXJpbmdzJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVOdW1iZXJpbmdzRnJvbVBhcmFncmFwaHMoKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2V0SW1hZ2VTdHlsZVN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnNldEltYWdlU3R5bGUkLnN1YnNjcmliZShpbWFnZSA9PiB0aGlzLmFwcGx5SW1hZ2VTdHlsZXMoaW1hZ2UpKTtcbiAgICB9XG5cbiAgICBjaGFuZ2VFbGVtZW50U3R5bGVTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5jaGFuZ2VFbGVtZW50U3R5bGUkLnN1YnNjcmliZSh4ID0+IHRoaXMuYXBwbHlFbGVtZW50U3R5bGUoeCkpO1xuICAgIH1cblxuICAgIGNyZWF0ZUN1c3RvbUNvbXBvbmVudFN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmNyZWF0ZUN1c3RvbUNvbXBvbmVudCQuc3Vic2NyaWJlKG1vZGVsID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQ3VzdG9tRWxlbWVudChtb2RlbCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGluc2VydEJyZWFrU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UuaW5zZXJ0QnJlYWskLnN1YnNjcmliZShicmVha1R5cGUgPT4ge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRCcmVhayhicmVha1R5cGUpO1xuICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbnNlcnRJbWFnZVN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmluc2VydEltYWdlJC5zdWJzY3JpYmUoaW1hZ2VEYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0SW1hZ2UoaW1hZ2VEYXRhKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW5zZXJ0TGlua1N1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmluc2VydExpbmskLnN1YnNjcmliZShsaW5rRGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluc2VydExpbmsobmV3IExpbmtEYXRhTW9kZWwoeyBsaW5rOiBsaW5rRGF0YS5saW5rLCB0ZXh0OiBsaW5rRGF0YS50ZXh0IH0pKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZW5kTW91c2VQcmVzc1N1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmVuZE1vdXNlUHJlc3MkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlSGFuZGxlci5lbmRNb3VzZVByZXNzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGRpc2FibGVTZWxlY3Rpb25TdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5kaXNhYmxlU2VsZWN0aW9uJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uZGlzYWJsZVNlbGVjdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5jdXJzb3JMYXllci5oaWRlQ3Vyc29yKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNoYW5nZWRUYWJsZVNpemVTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5jaGFuZ2VkVGFibGVTaXplJC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRUYWJsZVNpemUoZGF0YS5pbnNlcnRJbmRleCwgZGF0YS5zZXNzaW9uSWQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjaGFuZ2VkRWRnZVNpemVTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5jaGFuZ2VkRWRnZVNpemUkLnN1YnNjcmliZSgoeyBlZGdlVHlwZSwgcGFnZVR5cGUgfSkgPT5cbiAgICAgICAgICAgIHRoaXMubWFpblNlc3Npb24uZGlzcGxheURhdGEudXBkYXRlUGFnZVZlcnRpY2FsRGF0YShlZGdlVHlwZSwgcGFnZVR5cGUpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaW1hZ2VMb2FkZWRTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5pbWFnZUxvYWRlZCQuc3Vic2NyaWJlKHNlc3Npb25JZCA9PiB0aGlzLnJlZ3VsYXRvclNlcnZpY2UuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpLm9uUmVuZGVyZWQoKSk7XG4gICAgfVxuXG4gICAgY2hhbmdlZEVkZ2VTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5jaGFuZ2VkRWRnZSQuc3Vic2NyaWJlKHNlc3Npb25JZCA9PiB0aGlzLnJlZ3VsYXRvclNlcnZpY2UuYXJyYW5nZUVkZ2VDaGFuZ2Uoc2Vzc2lvbklkKSk7XG4gICAgfVxuXG4gICAgaW5zZXJ0VGFibGVSb3dzU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UuaW5zZXJ0VGFibGVSb3dzJC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluc2VydFRhYmxlUm93cyhkYXRhLmluc2VydEluZGV4LCBkYXRhLnJvd3NDb3VudCwgZGF0YS50YXJnZXRJbmRleCwgZGF0YS5pbmhlcml0SW5kZXgsIGRhdGEuc2Vzc2lvbklkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW5zZXJ0VGFibGVDb2x1bW5zU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UuaW5zZXJ0VGFibGVDb2x1bW5zJC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluc2VydFRhYmxlQ29sdW1ucyhkYXRhLmluc2VydEluZGV4LCBkYXRhLmNvbHVtbnNDb3VudCwgZGF0YS50YXJnZXRJbmRleCwgZGF0YS5pbmhlcml0SW5kZXgsIGRhdGEuc2Vzc2lvbklkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlVGFibGVSb3dzU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UucmVtb3ZlVGFibGVSb3dzJC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVRhYmxlUm93cyhkYXRhLmluc2VydEluZGV4LCBkYXRhLnN0YXJ0SW5kZXgsIGRhdGEuZW5kSW5kZXgsIGRhdGEuc2Vzc2lvbklkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlVGFibGVDb2x1bW5zU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UucmVtb3ZlVGFibGVDb2x1bW5zJC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVRhYmxlQ29sdW1ucyhkYXRhLmluc2VydEluZGV4LCBkYXRhLnN0YXJ0SW5kZXgsIGRhdGEuZW5kSW5kZXgsIGRhdGEuc2Vzc2lvbklkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlUmlnaHRTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5yZW1vdmVSaWdodCQuc3Vic2NyaWJlKCgpID0+IHRoaXMucmVtb3ZlUmlnaHQoKSk7XG4gICAgfVxuXG4gICAgcmVzaXplVGFibGVDb2x1bW5zU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UucmVzaXplVGFibGVDb2x1bW5zJC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZVRhYmxlQ29sdW1ucyhkYXRhLnJlc2l6ZVRhYmxlQ29sdW1ucywgZGF0YS5zZXNzaW9uSWQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbnNlcnRUYWJsZVN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmluc2VydFRhYmxlJC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluc2VydFRhYmxlKGRhdGEpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbnNlcnRUZXh0U3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UuaW5zZXJ0VGV4dCQuc3Vic2NyaWJlKHggPT4ge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnQoeCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHVuZG9TdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS51bmRvJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51bmRvKCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbEN1cnNvckludG9NYWluVmlldygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZWRvU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UucmVkbyQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVkbygpO1xuICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxDdXJzb3JJbnRvTWFpblZpZXcoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlTGVmdFN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnJlbW92ZUxlZnQkLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlbW92ZUxlZnQoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmludFN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnByaW50JC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vblByaW50KCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3V0U2VsZWN0ZWRTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5jdXRTZWxlY3RlZCQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25DdXQobmV3IENsaXBib2FyZEV2ZW50KCdjdXQnKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29weVNlbGVjdGVkU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UuY29weVNlbGVjdGVkJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkNvcHkobmV3IENsaXBib2FyZEV2ZW50KCdjb3B5JykpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhc3RlRnJvbUNsaXBib2FyZFN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnBhc3RlRnJvbUNsaXBib2FyZCQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVhZENsaXBib2FyZCgpXG4gICAgICAgICAgICAgICAgLnRoZW4oZGF0YSA9PiB0aGlzLnBhc3RlRGF0YShkYXRhKSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBjb250aW51ZSByZWdhcmRsZXNzIGVycm9yXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcmVhZENsaXBib2FyZCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBjb25zdCByZWFkID0gYXdhaXQgbmF2aWdhdG9yLnBlcm1pc3Npb25zLnF1ZXJ5KHsgbmFtZTogJ2NsaXBib2FyZC1yZWFkJyBhcyBQZXJtaXNzaW9uTmFtZSB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgaWYgKG5hdmlnYXRvci5jbGlwYm9hcmQgJiYgcmVhZC5zdGF0ZSAhPSAnZGVuaWVkJykge1xuICAgICAgICAgICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmRcbiAgICAgICAgICAgICAgICAgICAgLnJlYWRUZXh0KClcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udGludWUgcmVnYXJkbGVzcyBlcnJvclxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmNsaXBib2FyZERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhc3RlRGF0YShkYXRhOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGV4dCA9IGRhdGEucmVwbGFjZSgvXFxyXFxuL2csICdcXG4nKS5yZXBsYWNlKC9cXHQvZywgJyAnKTtcbiAgICAgICAgdGhpcy5pbnNlcnQodGV4dCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsQ3Vyc29ySW50b01haW5WaWV3KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZWxlY3RBbGxTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5zZWxlY3RBbGwkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RBbGwodGhpcy5zZXNzaW9uLm1vZGVsKTtcbiAgICAgICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVTZWxlY3RlZFN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnJlbW92ZVNlbGVjdGVkJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVTZWxlY3RlZCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsaXBib2FyZERhdGFTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5jbGlwYm9hcmREYXRhJC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNsaXBib2FyZERhdGEgPSBkYXRhO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB1cGRhdGVFZGdlU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UudXBkYXRlRWRnZXMkLnN1YnNjcmliZShzZXNzaW9uSWQgPT4ge1xuICAgICAgICAgICAgbGV0IGZvb3RlcnMgPSB0aGlzLm1haW5TZXNzaW9uLmN1c3RvbUNvbXBvbmVudHMuZWRnZXMuZm9vdGVyc0NvbXBvbmVudHM7XG4gICAgICAgICAgICBsZXQgZXhpc3RlZCA9IHRoaXMubWFpblNlc3Npb24uY3VzdG9tQ29tcG9uZW50cy5lZGdlcy5oZWFkZXJzQ29tcG9uZW50cy5maW5kSW5kZXgoeCA9PiB4Lmluc3RhbmNlLnNlc3Npb25JZCA9PT0gc2Vzc2lvbklkKTtcbiAgICAgICAgICAgIGlmIChleGlzdGVkICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLm1haW5TZXNzaW9uLmN1c3RvbUNvbXBvbmVudHMuZWRnZXMuaGVhZGVyc0NvbXBvbmVudHMuc2xpY2UoZXhpc3RlZCArIDEpO1xuICAgICAgICAgICAgICAgIGhlYWRlcnMuZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgeC5pbnN0YW5jZS5zZXNzaW9uLmRpc3BsYXlEYXRhLnVwZGF0ZU5leHRMaW5lSW5kZXhlcygwLCB4Lmluc3RhbmNlLnNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocy5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZXhpc3RlZCA9IHRoaXMubWFpblNlc3Npb24uY3VzdG9tQ29tcG9uZW50cy5lZGdlcy5mb290ZXJzQ29tcG9uZW50cy5maW5kSW5kZXgoeCA9PiB4Lmluc3RhbmNlLnNlc3Npb25JZCA9PT0gc2Vzc2lvbklkKTtcbiAgICAgICAgICAgICAgICBmb290ZXJzID0gdGhpcy5tYWluU2Vzc2lvbi5jdXN0b21Db21wb25lbnRzLmVkZ2VzLmZvb3RlcnNDb21wb25lbnRzLnNsaWNlKGV4aXN0ZWQgKyAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvb3RlcnMuZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgICAgICAgICB4Lmluc3RhbmNlLnNlc3Npb24uZGlzcGxheURhdGEudXBkYXRlTmV4dExpbmVJbmRleGVzKDAsIHguaW5zdGFuY2Uuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==