@piserve-tech/form-submission 1.3.227 → 1.3.228

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.
@@ -52,6 +52,7 @@ export class SubmitFormComponent {
52
52
  this.customizeFont = false;
53
53
  this.fontFamily = '';
54
54
  this.fontSize = 0;
55
+ this.validationSkip = false;
55
56
  this.enableDataExport = false;
56
57
  this.fileFormats = [];
57
58
  this.enableQuestionNumbering = false;
@@ -325,7 +326,7 @@ export class SubmitFormComponent {
325
326
  if (this.markAllQuestionsAsRequired) {
326
327
  const currentPageData = this.pages[this.currentPageIndex];
327
328
  let validationResponse = true;
328
- if (!this.skipValidation) {
329
+ if (!this.validationSkip) {
329
330
  validationResponse = this.formValidationService.validateRequiredQuestions(currentPageData).isValid;
330
331
  }
331
332
  if (validationResponse) {
@@ -361,7 +362,7 @@ export class SubmitFormComponent {
361
362
  if (this.markAllQuestionsAsRequired) {
362
363
  const currentPageData = this.pages[this.currentPageIndex];
363
364
  let validationResponse = true;
364
- if (!this.skipValidation) {
365
+ if (!this.validationSkip) {
365
366
  validationResponse = this.formValidationService.validateRequiredQuestions(currentPageData).isValid;
366
367
  }
367
368
  if (validationResponse) {
@@ -420,7 +421,7 @@ export class SubmitFormComponent {
420
421
  if (this.markAllQuestionsAsRequired) {
421
422
  const currentPageData = this.pages[this.currentPageIndex];
422
423
  let validationResponse = true;
423
- if (!this.skipValidation) {
424
+ if (!this.validationSkip) {
424
425
  validationResponse = this.formValidationService.validateRequiredQuestions(currentPageData).isValid;
425
426
  }
426
427
  if (validationResponse) {
@@ -776,6 +777,9 @@ export class SubmitFormComponent {
776
777
  };
777
778
  }
778
779
  saveasDraftPopup() {
780
+ if (!this.skipValidation) {
781
+ return;
782
+ }
779
783
  const dialogRef = this.dialog.open(SaveDraftModalComponent, {
780
784
  width: '450px',
781
785
  panelClass: 'custom-dialog-container',
@@ -788,12 +792,12 @@ export class SubmitFormComponent {
788
792
  dialogRef.afterClosed().subscribe(result => {
789
793
  if (result) {
790
794
  console.log(result);
791
- this.skipValidation = true;
795
+ this.validationSkip = true;
792
796
  this.submitForm();
793
- this.skipValidation = false;
797
+ this.validationSkip = false;
794
798
  }
795
799
  else {
796
- this.skipValidation = false;
800
+ this.validationSkip = false;
797
801
  console.log('Cancelled');
798
802
  }
799
803
  });
@@ -839,7 +843,7 @@ export class SubmitFormComponent {
839
843
  }
840
844
  this.submissionInProgress = true;
841
845
  let validationResponse = true;
842
- if (!this.skipValidation) {
846
+ if (!this.validationSkip) {
843
847
  validationResponse = this.validateForm(this.pages).isValid;
844
848
  }
845
849
  const getCircularReplacer = () => {
@@ -860,7 +864,7 @@ export class SubmitFormComponent {
860
864
  this.questionAnswers.maximumPossibleScore = this.maxPossibleScore;
861
865
  if (validationResponse) {
862
866
  const formData = new FormData();
863
- formData.append('skipValidation', this.skipValidation ? 'true' : 'false');
867
+ formData.append('skipValidation', this.validationSkip ? 'true' : 'false');
864
868
  this.questionAnswers.parentId = this.parentSubmissionId;
865
869
  formData.append('json', JSON.stringify(this.questionAnswers, getCircularReplacer()));
866
870
  if (this.webhookPayloadArray) {
@@ -896,12 +900,22 @@ export class SubmitFormComponent {
896
900
  if (this.emitters) {
897
901
  emittingValues = this.mapEmittersToValues();
898
902
  }
899
- this.submit.emit({
900
- 'status': 'success',
901
- 'submissionId': response.result,
902
- 'score': formFinalScore,
903
- ...(emittingValues || {})
904
- });
903
+ if (formData.get('skipValidation') === 'true') {
904
+ this.submit.emit({
905
+ 'status': 'draft',
906
+ 'submissionId': response.result,
907
+ 'score': formFinalScore,
908
+ ...(emittingValues || {})
909
+ });
910
+ }
911
+ else {
912
+ this.submit.emit({
913
+ 'status': 'success',
914
+ 'submissionId': response.result,
915
+ 'score': formFinalScore,
916
+ ...(emittingValues || {})
917
+ });
918
+ }
905
919
  this.submissionInProgress = false;
906
920
  },
907
921
  error: (error) => {
@@ -1320,4 +1334,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1320
1334
  }], isActionTriggered: [{
1321
1335
  type: Input
1322
1336
  }] } });
1323
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VibWl0LWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybS1zdWJtaXNzaW9uL3NyYy9mb3JtLXN1Ym1pc3Npb24vc3VibWl0LWZvcm0vc3VibWl0LWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybS1zdWJtaXNzaW9uL3NyYy9mb3JtLXN1Ym1pc3Npb24vc3VibWl0LWZvcm0vc3VibWl0LWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxLQUFLLE1BQU0sTUFBTSwrQkFBK0IsQ0FBQztBQVF4RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQU12RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQStDcEYsTUFBTSxPQUFPLG1CQUFtQjtJQTBFOUIsWUFDVSxXQUF3QixFQUN4QixNQUFxQixFQUNyQixNQUFjLEVBQ2QsV0FBd0IsRUFDeEIsZ0JBQWtDLEVBQ2xDLGlCQUFvQyxFQUNwQyxpQkFBb0MsRUFDcEMsY0FBcUMsRUFDckMscUJBQTRDLEVBQzVDLGdCQUEyQyxFQUMzQyxnQkFBeUMsRUFDMUMsTUFBaUI7UUFYaEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FB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QixpQkFBaUI7c0JBQXpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mb3JtLnNlcnZpY2UnO1xuaW1wb3J0ICogYXMgbWFwcGVyIGZyb20gJy4uLy4uL3NlcnZpY2VzL21hcHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IFB1YmxpY0Zvcm0gfSBmcm9tICcuLi8uLi9tb2RlbHMvcHVibGljRm9ybS5tb2RlbCc7XG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVjYXB0Y2hhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlY2FwdGNoYS5zZXJ2aWNlJztcbmltcG9ydCB7IFZhbGlkYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdmFsaWRhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEVsZW1lbnRUcmFja2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VsZW1lbnQtdHJhY2tlci5zZXJ2aWNlJztcbmltcG9ydCB7IE5hdmlnYXRpb25UYWJzQ29tcG9uZW50IH0gZnJvbSAnLi4vbmF2aWdhdGlvbi10YWJzL25hdmlnYXRpb24tdGFicy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9ybVZhbGlkYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZm9ybS12YWxpZGF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWdncmVnYXRpb25GdW5jdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hZ2dyZWdhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBFbWl0dGVyRFRPIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2VtaXR0ZXJzLm1vZGVsJztcbmltcG9ydCB7IFNjb3JlQ2FsY3VsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2NvcmUuc2VydmljZSc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgU2F2ZURyYWZ0TW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9zYXZlLWFzLWRyYWZ0L3NhdmVEcmFmdE1vZGFsQ29tcG9uZW50ICc7XG5cbmludGVyZmFjZSBBbnN3ZXIge1xuICBxdWVzdGlvbklkOiBzdHJpbmc7XG4gIGFuc3dlcjogYW55O1xuICBhbnN3ZXJJZD86IHN0cmluZztcbiAgZGVsZXRlRmlsZXM/OiBzdHJpbmdbXTtcbiAgZmllbGRzPzogYW55O1xufVxuXG5pbnRlcmZhY2UgU3VibWlzc2lvbiB7XG4gIHN1Ym1pc3Npb25JZD86IHN0cmluZztcbiAgYW5zd2VyczogQW5zd2VyW107XG59XG5cbmludGVyZmFjZSBGb3JtIHtcbiAgZm9ybUlkOiBzdHJpbmc7XG4gIGRlbGV0ZWQ/OiBib29sZWFuO1xuICBkZWxldGVkU3VibWlzc2lvbnM6IGFueVtdO1xuICBzdWJtaXNzaW9uczogU3VibWlzc2lvbltdO1xuICBjb3BpZWRGb3Jtczogc3RyaW5nW107XG4gIHNjb3JlPzpudW1iZXI7XG4gIG1heGltdW1Qb3NzaWJsZVNjb3JlPzpudW1iZXI7XG59XG5cbmludGVyZmFjZSBDb3B5Rm9ybXN7XG4gIGlkOiBzdHJpbmcsXG4gIHRpdGxlOiBzdHJpbmcsXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gIHBhcmVudFN1YmZvcm06IHN0cmluZyxcbiAgcXVlc3Rpb25SZWxhdGlvbjogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuaW50ZXJmYWNlIFF1ZXN0aW9uQW5zd2Vyc1dyYXBwZXIge1xuICBwYXJlbnRJZDogc3RyaW5nO1xuICBhbnN3ZXJzOiBBbnN3ZXJbXTtcbiAgZm9ybXM6IEZvcm1bXTtcbiAgY29weVN1YkZvcm1zOkNvcHlGb3Jtc1tdO1xuICBzY29yZT86bnVtYmVyO1xuICBtYXhpbXVtUG9zc2libGVTY29yZT86bnVtYmVyO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItc3VibWl0LWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vc3VibWl0LWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zdWJtaXQtZm9ybS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBTdWJtaXRGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBxdWVzdGlvbjogUHVibGljRm9ybSB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBtb2R1bGVOYW1lOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgZWRpdDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzdWJtaXNzaW9uSWQ6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBhY2NlcHRlZExhbmd1YWdlOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgc2tpcE1hcmdpbjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBza2lwVmFsaWRhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBAT3V0cHV0KCkgc3VibWl0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgYXBpQ2FsbGVkOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBjdXJyZW50UGFnZUluZGV4Q2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gIEBWaWV3Q2hpbGQoTmF2aWdhdGlvblRhYnNDb21wb25lbnQpIGNoaWxkITogTmF2aWdhdGlvblRhYnNDb21wb25lbnQ7XG4gIEBJbnB1dCgpIGlzQWN0aW9uVHJpZ2dlcmVkOiBib29sZWFuID0gZmFsc2U7XG4gICBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgbmFtZTogc3RyaW5nID0gJyc7XG4gIHNhdmVBdXRvbWF0aWNhbGx5OiBib29sZWFuID0gZmFsc2U7XG4gIHNhdmVJbnRlcnZhbDogbnVtYmVyID0gMDtcbiAgY3VzdG9taXplRm9udDogYm9vbGVhbiA9IGZhbHNlO1xuICBmb250RmFtaWx5OiBzdHJpbmcgPSAnJztcbiAgZm9udFNpemU6IG51bWJlciA9IDA7XG4gIGVuYWJsZURhdGFFeHBvcnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZmlsZUZvcm1hdHM6IHN0cmluZ1tdID0gW107XG4gIGVuYWJsZVF1ZXN0aW9uTnVtYmVyaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHF1ZXN0aW9uTnVtYmVyaW5nOiBzdHJpbmcgPSAnJztcbiAgZW5hYmxlR29vZ2xlUmVjYXB0Y2hhOiBib29sZWFuID0gZmFsc2U7XG4gIGdvb2dsZVJlY2FwdGNoYUtleTogc3RyaW5nID0gJyc7XG4gIGdvb2dsZVJlY2FwdGNoYVNlY3JldDogc3RyaW5nID0gJyc7XG4gIG5hdmlnYXRpb246IHN0cmluZyA9ICcnO1xuICBtYXJrQWxsUXVlc3Rpb25zQXNSZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwYWdlczogYW55ID0gW107XG4gIGN1cnJlbnRQYWdlSW5kZXg6IG51bWJlciA9IDA7XG4gIHByZXZpb3VzUGFnZTogYW55ID0ge307XG4gIGN1cnJlbnRQYWdlOiBhbnkgPSB7fTtcbiAgbmV4dFBhZ2U6IGFueSA9IHt9O1xuICBsYXN0VGFiOiBib29sZWFuID0gZmFsc2U7XG4gIHF1ZXN0aW9uQW5zd2VyczogUXVlc3Rpb25BbnN3ZXJzV3JhcHBlciA9IHtcbiAgICBwYXJlbnRJZDogJycsXG4gICAgYW5zd2VyczogW10sXG4gICAgZm9ybXM6IFtdLFxuICAgIGNvcHlTdWJGb3JtczpbXVxuICB9O1xuICBmaWxlczogeyBxdWVzdGlvbklkOiBzdHJpbmc7IGZpbGU6IGFueSB9W10gPSBbXTtcbiAgcGFyZW50UXVlc3Rpb25zOiBhbnk7XG4gIHN1Ym1pc3Npb246IGFueSA9IHt9O1xuICBwYXJlbnRRdWVzdGlvbkFuc3dlcnM6IGFueTtcbiAgcGFyZW50U3VibWlzc2lvbklkOiBzdHJpbmcgPSAnJztcbiAgc3VibWlzc2lvbkluUHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmVjYXB0Y2hhVG9rZW46IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIGlzUmVmcmVzaGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGludGVydmFsSWQ6IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPiB8IG51bGwgPSBudWxsO1xuICBwYWdlRGV0YWlsczogYW55ID0gW107XG4gIHBhZ2VOdW1iZXI6IG51bWJlciA9IDE7XG4gIHJvd1NldDogbnVtYmVyID0gMDtcbiAgcm93U2V0Q291bnQ6IFtudW1iZXJdID0gWzBdO1xuICByZXRyeUNvdW50OiBudW1iZXIgPSAwO1xuICAgbWF4UmV0cmllczpudW1iZXIgPSA1O1xuXG4gIGVsaWdpYmxlRm9yU3VibWlzc2lvbjogeyBzdGF0dXM6IGJvb2xlYW47IG1lc3NhZ2U6IHN0cmluZyB9ID0ge1xuICAgIHN0YXR1czogdHJ1ZSxcbiAgICBtZXNzYWdlOiAnJyxcbiAgfTtcbiAgd2ViaG9va1BheWxvYWRBcnJheTogYW55W10gPSBbXTtcbiAgaW5WYWxpZFF1ZXN0aW9uczogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gIHZpc2l0ZWRSb3dzOiBNYXA8bnVtYmVyLCBudW1iZXI+ID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcbiAgYWxsRWxlbWVudElkczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBkZWJvdW5jZVRpbWVyOiBhbnk7XG4gIHByaW1hcnlDb2xvcjogc3RyaW5nID0gJyc7XG4gIHNlY29uZGFyeUNvbG9yOiBzdHJpbmcgPSAnJztcbiAgICBpc0xvYWRpbmdQYWdlczogYm9vbGVhbiA9IGZhbHNlO1xuICBjb3B5U3ViZm9ybXM6Q29weUZvcm1zIFtdID0gW107XG4gIGVtaXR0ZXJzOkVtaXR0ZXJEVE9bXT1bXTtcbiAgbWF4UG9zc2libGVTY29yZSE6bnVtYmVyO1xuICBzdW1PZkZpbmRpbmdzITpudW1iZXI7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZm9ybVNlcnZpY2U6IEZvcm1TZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9hc3RyOiBUb2FzdHJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWNhcHRjaGFTZXJ2aWNlOiBSZWNhcHRjaGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgdmFsaWRhdGlvblNlcnZpY2U6IFZhbGlkYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZWxlbWVudFRyYWNrZXI6IEVsZW1lbnRUcmFja2VyU2VydmljZSxcbiAgICBwcml2YXRlIGZvcm1WYWxpZGF0aW9uU2VydmljZTogRm9ybVZhbGlkYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgYWdncmVnYXRlU2VydmljZTpBZ2dyZWdhdGlvbkZ1bmN0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHNjb3JlQ2FsY1NlcnZpY2U6IFNjb3JlQ2FsY3VsYXRpb25TZXJ2aWNlLFxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZ1xuICApIHtcbiAgICBjb25zdCBuYXZpZ2F0aW9uID0gdGhpcy5yb3V0ZXIuZ2V0Q3VycmVudE5hdmlnYXRpb24oKTtcbiAgICB0aGlzLnN1Ym1pc3Npb24gPSBuYXZpZ2F0aW9uPy5leHRyYXMuc3RhdGU/Llsnc3VibWlzc2lvbiddO1xuICAgIHRoaXMucGFyZW50U3VibWlzc2lvbklkID0gdGhpcy5zdWJtaXNzaW9uPy5pZDtcbiAgICB0aGlzLnBhcmVudFF1ZXN0aW9uQW5zd2VycyA9IHRoaXMuc3VibWlzc2lvbj8ucXVlc3Rpb25BbnN3ZXJzO1xuICAgIHRoaXMucGFyZW50UXVlc3Rpb25zID0gbmF2aWdhdGlvbj8uZXh0cmFzLnN0YXRlPy5bJ3BhcmVudFF1ZXN0aW9ucyddO1xuICAgIHRoaXMuZGF0YVNlcnZpY2Uuc2V0UGFyZW50UXVlc3Rpb25zKHRoaXMucGFyZW50UXVlc3Rpb25zKTtcbiAgfVxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgIHRoaXMudmlzaXRlZFJvd3MuY2xlYXIoKTtcbiAgICB0aGlzLnJlY2FwdGNoYVNlcnZpY2UucmVtb3ZlUmVjYXB0Y2hhU2NyaXB0KCk7XG4gICAgaWYgKHRoaXMuaW50ZXJ2YWxJZCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsSWQpO1xuICAgICAgdGhpcy5pbnRlcnZhbElkID0gbnVsbDtcbiAgICAgIHRoaXMuaXNSZWZyZXNoaW5nID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuYWdncmVnYXRlU2VydmljZS5jbGVhckFsbCgpO1xuICAgIHRoaXMucmVjYXB0Y2hhU2VydmljZS5yZW1vdmVSZWNhcHRjaGFTY3JpcHQoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snYWNjZXB0ZWRMYW5ndWFnZSddKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSAwO1xuICAgICAgdGhpcy5hY2NlcHRlZExhbmd1YWdlID0gY2hhbmdlc1snYWNjZXB0ZWRMYW5ndWFnZSddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGlmICghdGhpcy5lZGl0KSB0aGlzLmdldEZvcm1EYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuZWRpdCAmJiB0aGlzLnN1Ym1pc3Npb25JZCkge1xuICAgICAgdGhpcy5nZXRTdWJtaXR0ZWRGb3JtRGF0YSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0aGlzLmdldEZvcm1EYXRhKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5hYmxlR29vZ2xlUmVjYXB0Y2hhKSB7XG5cbiAgICAgIHRoaXMucmVjYXB0Y2hhSW5pdGlhbGl6ZWQoKTtcbiAgICB9XG5cbiAgfVxuXG5cbiAgYXN5bmMgcmVjYXB0Y2hhSW5pdGlhbGl6ZWQoKSB7XG4gICBhd2FpdCB0aGlzLnJlY2FwdGNoYVNlcnZpY2UuaW5pdGlhbGl6ZSgpO1xudGhpcy5yZWNhcHRjaGFTZXJ2aWNlLnJlbmRlcignY2FwdGNoYS1jb250YWluZXInLCAodG9rZW4pID0+IHtcblxufSk7XG4gIH1cblxuYXN5bmMgZ2V0VG9rZW4oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMucmVjYXB0Y2hhU2VydmljZS5pbml0aWFsaXplKCk7XG5cbiAgICAgIC8vIENoZWNrIGlmIENBUFRDSEEgd2FzIHJlbmRlcmVkXG4gICAgICBpZiAoIXRoaXMucmVjYXB0Y2hhU2VydmljZS5pc1JlbmRlcmVkKCkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdyZUNBUFRDSEEgbm90IHJlbmRlcmVkIHlldC4nKTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoJycpO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBzb2x2ZWQsIHJldHVybiB0aGUgdG9rZW5cbiAgICAgIGlmICh0aGlzLnJlY2FwdGNoYVNlcnZpY2UuaXNSZXNvbHZlZCgpKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5yZWNhcHRjaGFTZXJ2aWNlLmdldFJlc3BvbnNlKCk7XG5cbiAgICAgICAgcmV0dXJuIHJlc29sdmUodG9rZW4pO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBleHBpcmVkIG9yIHVuc29sdmVkLCByZXR1cm4gZW1wdHkgc3RyaW5nXG4gICAgICBjb25zb2xlLndhcm4oJ3JlQ0FQVENIQSBub3QgcmVzb2x2ZWQgb3IgZXhwaXJlZC4nKTtcbiAgICAgIHJldHVybiByZXNvbHZlKCcnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ3JlQ0FQVENIQSBpbml0aWFsaXphdGlvbiBmYWlsZWQ6JywgZXJyKTtcbiAgICAgIHJldHVybiByZXNvbHZlKCcnKTtcbiAgICB9XG4gIH0pO1xufVxuXG4gIGxvYWRGb250KGZvbnROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBmb250UGF0aCA9IGBhc3NldHMvZm9udHMvJHtmb250TmFtZX0ud29mZjJgOyAvLyBBZGp1c3QgZXh0ZW5zaW9uIGFzIHBlciB5b3VyIGZvbnQgZmlsZVxuICAgIGNvbnN0IHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICBzdHlsZS5pbm5lckhUTUwgPSBgXG4gICAgICBAZm9udC1mYWNlIHtcbiAgICAgICAgZm9udC1mYW1pbHk6ICcke2ZvbnROYW1lfSc7XG4gICAgICAgIHNyYzogdXJsKCcke2ZvbnRQYXRofScpIGZvcm1hdCgnd29mZjInKTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgICAgfVxuICAgICAgYm9keSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnJHtmb250TmFtZX0nLCBzYW5zLXNlcmlmO1xuICAgICAgfVxuICAgIGA7XG4gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gIH1cblxuICBnZXRGb3JtRGF0YSgpIHtcbiAgICB0aGlzLmlzTG9hZGluZ1BhZ2VzID0gdHJ1ZTtcbiAgICB0aGlzLmZvcm1TZXJ2aWNlXG4gICAgICAuZ2V0UXVlc3Rpb25zKHRoaXMubW9kdWxlTmFtZSwgMSwwLHRydWUpXG4gICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nUGFnZXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lbmFibGVHb29nbGVSZWNhcHRjaGEgPVxuICAgICAgICAgIHJlc3BvbnNlLnJlc3VsdC5tb2R1bGVDb25maWd1cmF0aW9uPy5lbmFibGVHb29nbGVSZWNhcHRjaGE7XG4gICAgICAgIHRoaXMucXVlc3Rpb24gPSBtYXBwZXIubWFwUHVibGljRm9ybVRvTW9kZWwocmVzcG9uc2UpO1xuICAgICAgICB0aGlzLmVtaXR0ZXJzID0gdGhpcy5xdWVzdGlvbi5lbWl0dGVycyB8fCBbXTtcbiAgICAgICAgdGhpcy5hc3NpZ25RdWVzdGlvblByb3BlcnRpZXModGhpcy5xdWVzdGlvbik7XG4gICAgICAgIHRoaXMuc2V0VXBGb250RmFtaWx5KHJlc3BvbnNlKTtcbiAgICAgICAgdGhpcy5wcmltYXJ5Q29sb3IgPSByZXNwb25zZS5yZXN1bHQucHJpbWFyeUNvbG9yO1xuICAgICAgICB0aGlzLnNlY29uZGFyeUNvbG9yID0gcmVzcG9uc2UucmVzdWx0LnNlY29uZGFyeUNvbG9yO1xuICAgICAgICBpZiAodGhpcy5lbmFibGVHb29nbGVSZWNhcHRjaGEpIHRoaXMucmVjYXB0Y2hhSW5pdGlhbGl6ZWQoKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlPy5yZXN1bHQ/LnBhZ2VEZXRhaWxzKSB7XG4gICAgICAgICAgdGhpcy5wYWdlRGV0YWlscyA9IHJlc3BvbnNlLnJlc3VsdC5wYWdlRGV0YWlscztcbiAgICAgICAgICB0aGlzLm5leHRQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1sxXTtcbiAgICAgICAgfVxuICAgICAgICAgIHRoaXMud2ViaG9va1BheWxvYWRBcnJheVxuICAgICAgICAgIHRoaXMud2ViaG9va1BheWxvYWRBcnJheSA9IHJlc3BvbnNlPy5yZXN1bHQ/LndlYmhvb2tzPy5tYXAoKHc6YW55KSA9PiAoe1xuICAgICAgICAgIGlkOiB3LmlkLFxuICAgICAgICAgICAuLi50aGlzLmV4dHJhY3RHcm91cGVkV2ViaG9va0RhdGEoW3ddKVxuICAgICAgICAgICAgfSkpO1xuXG5cbiAgICAgICAgdGhpcy5yb3dTZXRDb3VudFswXSA9IHJlc3BvbnNlLnJlc3VsdC50b3RhbE51bWJlclJvdztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnBhZ2VEZXRhaWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLnBhZ2VzW2ldKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2VzW2ldID0gW107XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tTdWJtaXNzaW9uRWxpZ2liaWxpdHkoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZ2V0U3VibWl0dGVkRm9ybURhdGEoKSB7XG4gICAgdGhpcy5mb3JtU2VydmljZVxuICAgICAgLmdldFN1Ym1pdHRlZEZvcm0odGhpcy5tb2R1bGVOYW1lLCB0aGlzLnN1Ym1pc3Npb25JZClcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMuZW5hYmxlR29vZ2xlUmVjYXB0Y2hhID1cbiAgICAgICAgICByZXNwb25zZS5yZXN1bHQubW9kdWxlQ29uZmlndXJhdGlvbi5lbmFibGVHb29nbGVSZWNhcHRjaGE7XG4gICAgICAgIHRoaXMucXVlc3Rpb24gPSBtYXBwZXIubWFwUHVibGljRm9ybVRvTW9kZWwocmVzcG9uc2UpO1xuICAgICAgICB0aGlzLmFzc2lnblF1ZXN0aW9uUHJvcGVydGllcyh0aGlzLnF1ZXN0aW9uKTtcbiAgICAgICAgdGhpcy5wcmltYXJ5Q29sb3IgPSByZXNwb25zZS5yZXN1bHQucHJpbWFyeUNvbG9yO1xuICAgICAgICB0aGlzLnNlY29uZGFyeUNvbG9yID0gcmVzcG9uc2UucmVzdWx0LnNlY29uZGFyeUNvbG9yO1xuICAgICAgICB0aGlzLmVtaXR0ZXJzID0gdGhpcy5xdWVzdGlvbi5lbWl0dGVycyB8fCBbXTtcbiAgICAgICAgaWYgKHJlc3BvbnNlPy5yZXN1bHQ/LnBhZ2VEZXRhaWxzKSB7XG4gICAgICAgICAgdGhpcy5wYWdlRGV0YWlscyA9IHJlc3BvbnNlLnJlc3VsdC5wYWdlRGV0YWlscztcbiAgICAgICAgICB0aGlzLm5leHRQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1sxXTtcbiAgICAgICAgfVxuICAgICAgICAgIHRoaXMud2ViaG9va1BheWxvYWRBcnJheVxuICAgICAgICAgIHRoaXMud2ViaG9va1BheWxvYWRBcnJheSA9IHJlc3BvbnNlPy5yZXN1bHQ/LndlYmhvb2tzPy5tYXAoKHc6YW55KSA9PiAoe1xuICAgICAgICAgIGlkOiB3LmlkLFxuICAgICAgICAgICAuLi50aGlzLmV4dHJhY3RHcm91cGVkV2ViaG9va0RhdGEoW3ddKVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLnJvd1NldENvdW50WzBdID0gcmVzcG9uc2UucmVzdWx0LnRvdGFsTnVtYmVyUm93O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGFnZURldGFpbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoIXRoaXMucGFnZXNbaV0pIHtcbiAgICAgICAgICAgIHRoaXMucGFnZXNbaV0gPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRVcEZvbnRGYW1pbHkocmVzcG9uc2UpO1xuICAgICAgICBpZiAodGhpcy5lbmFibGVHb29nbGVSZWNhcHRjaGEpIHtcbiAgICAgICAgdGhpcy5yZWNhcHRjaGFJbml0aWFsaXplZCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tTdWJtaXNzaW9uRWxpZ2liaWxpdHkoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgc2V0VXBGb250RmFtaWx5KHJlc3BvbnNlOiBhbnkpIHtcbiAgICAvL3NldCBmb250IGZhbWlseSBhbmQgZm9udCBzaXplXG4gICAgaWYgKHJlc3BvbnNlLnJlc3VsdD8ubW9kdWxlQ29uZmlndXJhdGlvbj8uY3VzdG9taXplRm9udCkge1xuICAgICAgdGhpcy5mb250RmFtaWx5ID0gcmVzcG9uc2UucmVzdWx0Lm1vZHVsZUNvbmZpZ3VyYXRpb24/LmZvbnRGYW1pbHk7XG4gICAgICB0aGlzLmZvbnRTaXplID0gcmVzcG9uc2UucmVzdWx0Lm1vZHVsZUNvbmZpZ3VyYXRpb24/LmZvbnRTaXplIHx8IDE4O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvbnRGYW1pbHkgPSAnUG9wcGlucyc7XG4gICAgICB0aGlzLmZvbnRTaXplID0gMTg7XG4gICAgfVxuICAgIHRoaXMubG9hZEZvbnQodGhpcy5mb250RmFtaWx5KTtcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAnLS1saWJyYXJ5LWZvbnQtZmFtaWx5JyxcbiAgICAgIHRoaXMuZm9udEZhbWlseVxuICAgICk7XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgJy0tbGlicmFyeS1mb250LXNpemUnLFxuICAgICAgdGhpcy5mb250U2l6ZSArICdweCdcbiAgICApO1xuICB9XG5cbiAgYXNzaWduUXVlc3Rpb25Qcm9wZXJ0aWVzKHF1ZXN0aW9uOiBQdWJsaWNGb3JtKSB7XG4gICAgdGhpcy5uYW1lID0gcXVlc3Rpb24ubmFtZTtcbiAgICB0aGlzLnBhZ2VzID0gcXVlc3Rpb24ucGFnZXM7XG4gICAgaWYgKHRoaXMucGFyZW50UXVlc3Rpb25zKSB7XG4gICAgICB0aGlzLnBhcmVudFF1ZXN0aW9uQW5zd2VycyA9IHF1ZXN0aW9uPy5xdWVzdGlvbkFuc3dlcnM7XG4gICAgICB0aGlzLnBhcmVudFN1Ym1pc3Npb25JZCA9IHF1ZXN0aW9uPy5wYXJlbnRJZDtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZXNbMF07XG4gICAgdGhpcy5uZXh0UGFnZSA9IHRoaXMucGFnZXNbMV07XG4gICAgdGhpcy5zYXZlQXV0b21hdGljYWxseSA9IHF1ZXN0aW9uLmZvcm1Db25maWd1cmF0aW9uLnNhdmVBdXRvbWF0aWNhbGx5O1xuICAgIHRoaXMuc2F2ZUludGVydmFsID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uc2F2ZUludGVydmFsO1xuICAgIHRoaXMuY3VzdG9taXplRm9udCA9IHF1ZXN0aW9uLmZvcm1Db25maWd1cmF0aW9uLmN1c3RvbWl6ZUZvbnQ7XG4gICAgdGhpcy5mb250RmFtaWx5ID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZm9udEZhbWlseTtcbiAgICB0aGlzLmZvbnRTaXplID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZm9udFNpemU7XG4gICAgdGhpcy5lbmFibGVEYXRhRXhwb3J0ID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZW5hYmxlRGF0YUV4cG9ydDtcbiAgICB0aGlzLmZpbGVGb3JtYXRzID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZmlsZUZvcm1hdHM7XG4gICAgdGhpcy5lbmFibGVRdWVzdGlvbk51bWJlcmluZyA9XG4gICAgICBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5lbmFibGVRdWVzdGlvbk51bWJlcmluZztcbiAgICB0aGlzLnF1ZXN0aW9uTnVtYmVyaW5nID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24ucXVlc3Rpb25OdW1iZXJpbmc7XG4gICAgdGhpcy5lbmFibGVHb29nbGVSZWNhcHRjaGEgPVxuICAgICAgcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZW5hYmxlR29vZ2xlUmVjYXB0Y2hhO1xuICAgIHRoaXMuZ29vZ2xlUmVjYXB0Y2hhS2V5ID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZ29vZ2xlUmVjYXB0Y2hhS2V5O1xuICAgIHRoaXMuZ29vZ2xlUmVjYXB0Y2hhU2VjcmV0ID1cbiAgICAgIHF1ZXN0aW9uLmZvcm1Db25maWd1cmF0aW9uLmdvb2dsZVJlY2FwdGNoYVNlY3JldDtcbiAgICB0aGlzLm5hdmlnYXRpb24gPSBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5uYXZpZ2F0aW9uO1xuICAgIHRoaXMubWFya0FsbFF1ZXN0aW9uc0FzUmVxdWlyZWQgPVxuICAgICAgcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24ubWFya0FsbFF1ZXN0aW9uc0FzUmVxdWlyZWQ7XG4gICAgdGhpcy5hcGlDYWxsZWQuZW1pdCh0cnVlKTtcbiAgfVxuXG4gIG5hdmlnYXRlVG9OZXh0UGFnZSgpIHtcbiAgIGlmKCF0aGlzLmlzTG9hZGluZyl7XG4gICAgdGhpcy5pc0xvYWRpbmc9dHJ1ZTtcbiAgICBjb25zdCBuZXh0SW5kZXggPSB0aGlzLmN1cnJlbnRQYWdlSW5kZXggKyAxO1xuICAgIGlmIChuZXh0SW5kZXggPCB0aGlzLnBhZ2VEZXRhaWxzLmxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMubWFya0FsbFF1ZXN0aW9uc0FzUmVxdWlyZWQpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFBhZ2VEYXRhID0gdGhpcy5wYWdlc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgICAgbGV0IHZhbGlkYXRpb25SZXNwb25zZT10cnVlO1xuICAgICAgICAgaWYoIXRoaXMuc2tpcFZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgIHZhbGlkYXRpb25SZXNwb25zZSA9IHRoaXMuZm9ybVZhbGlkYXRpb25TZXJ2aWNlLnZhbGlkYXRlUmVxdWlyZWRRdWVzdGlvbnMoY3VycmVudFBhZ2VEYXRhKS5pc1ZhbGlkO1xuICAgICAgICAgfVxuICAgICAgICBpZiAodmFsaWRhdGlvblJlc3BvbnNlICkge1xuICAgICAgICAgIHRoaXMucHJldmlvdXNQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgICAgIGlmKHRoaXMucGFnZXNbbmV4dEluZGV4XS5sZW5ndGggIT0gMCl7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlc1tuZXh0SW5kZXhdO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4PW5leHRJbmRleDtcbiAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHRoaXMuc2V0Q3VycmVudFBhZ2UobmV4dEluZGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5uZXh0UGFnZSA9IHRoaXMucGFnZURldGFpbHNbbmV4dEluZGV4ICsgMV07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucHJldmlvdXNQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgICBpZih0aGlzLnBhZ2VzW25leHRJbmRleF0ubGVuZ3RoICE9IDApe1xuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzW25leHRJbmRleF07XG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4PW5leHRJbmRleDtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgdGhpcy5zZXRDdXJyZW50UGFnZShuZXh0SW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubmV4dFBhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzW25leHRJbmRleCArIDFdO1xuICAgICAgfVxuICAgIH1cbiAgICAgdGhpcy5pc0xvYWRpbmc9ZmFsc2U7XG4gICAgICB0aGlzLmNoZWNrU3VibWlzc2lvbkVsaWdpYmlsaXR5KCk7XG4gIH1cbn1cblxuICBuYXZpZ2F0ZVRvUHJldmlvdXNQYWdlKCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlSW5kZXggPiAwKSB7XG4gICAgICBpZiAodGhpcy5tYXJrQWxsUXVlc3Rpb25zQXNSZXF1aXJlZCkge1xuICAgICAgICBjb25zdCBjdXJyZW50UGFnZURhdGEgPSB0aGlzLnBhZ2VzW3RoaXMuY3VycmVudFBhZ2VJbmRleF07XG4gICAgICAgIGxldCB2YWxpZGF0aW9uUmVzcG9uc2U9dHJ1ZTtcbiAgICAgICAgIGlmKCF0aGlzLnNraXBWYWxpZGF0aW9uKSB7XG4gICAgICAgICAgICB2YWxpZGF0aW9uUmVzcG9uc2UgPSB0aGlzLmZvcm1WYWxpZGF0aW9uU2VydmljZS52YWxpZGF0ZVJlcXVpcmVkUXVlc3Rpb25zKGN1cnJlbnRQYWdlRGF0YSkuaXNWYWxpZDtcbiAgICAgICAgIH1cbiAgICAgICAgaWYgKHZhbGlkYXRpb25SZXNwb25zZSkge1xuICAgICAgICAgIHRoaXMubmV4dFBhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzW3RoaXMuY3VycmVudFBhZ2VJbmRleF07XG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4LS07XG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZXNbdGhpcy5jdXJyZW50UGFnZUluZGV4XTtcbiAgICAgICAgICB0aGlzLnByZXZpb3VzUGFnZSA9IHRoaXMucGFnZURldGFpbHNbdGhpcy5jdXJyZW50UGFnZUluZGV4IC0gMV07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubmV4dFBhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzW3RoaXMuY3VycmVudFBhZ2VJbmRleF07XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2VJbmRleC0tO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgICB0aGlzLnByZXZpb3VzUGFnZSA9IHRoaXMucGFnZURldGFpbHNbdGhpcy5jdXJyZW50UGFnZUluZGV4IC0gMV07XG4gICAgICB9XG4gICAgfVxuICAgICAgdGhpcy5jaGVja1N1Ym1pc3Npb25FbGlnaWJpbGl0eSgpO1xuICB9XG5cbiAgY2hlY2tTdWJtaXNzaW9uRWxpZ2liaWxpdHkoKTogdm9pZCB7XG4gICAgdGhpcy5lbGlnaWJsZUZvclN1Ym1pc3Npb24gPSB0aGlzLnZhbGlkYXRlQWxsRWxlbWVudExvYWRlZCgpO1xuICB9XG5cbiAgc2V0Q3VycmVudFBhZ2UoaW5kZXg6IG51bWJlcikge1xuICAgIGlmIChpbmRleCA8IHRoaXMucGFnZXMubGVuZ3RoKSB7XG4gICAgICBpZiAoIXRoaXMucGFnZXNbaW5kZXhdIHx8IHRoaXMucGFnZXNbaW5kZXhdLmxlbmd0aCAhPSAwKSB7XG4gICAgICAgICB0aGlzLmNoZWNrU3VibWlzc2lvbkVsaWdpYmlsaXR5KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5wYWdlTnVtYmVyID0gaW5kZXggKyAxO1xuICAgIGlmICh0aGlzLmVkaXQpIHtcbiAgICAgIHRoaXMuZm9ybVNlcnZpY2VcbiAgICAgICAgLmdldFN1Ym1pdHRlZEZvcm0oXG4gICAgICAgICAgdGhpcy5tb2R1bGVOYW1lLFxuICAgICAgICAgIHRoaXMuc3VibWlzc2lvbklkLFxuICAgICAgICAgIHRoaXMucGFnZU51bWJlcixcbiAgICAgICAgICB0aGlzLnJvd1NldFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAocmVzcG9uc2U/LnJlc3VsdD8ucGFnZXMpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZXNbaW5kZXhdID0gcmVzcG9uc2UucmVzdWx0LnBhZ2VzWzBdO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSBpbmRleDtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlc1tpbmRleF07XG4gICAgICAgICAgdGhpcy5yb3dTZXRDb3VudFtpbmRleF0gPSByZXNwb25zZS5yZXN1bHQudG90YWxOdW1iZXJSb3c7XG4gICAgICAgICAgICB0aGlzLmNoZWNrU3VibWlzc2lvbkVsaWdpYmlsaXR5KCk7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvcm1TZXJ2aWNlXG4gICAgICAgIC5nZXRRdWVzdGlvbnModGhpcy5tb2R1bGVOYW1lLCB0aGlzLnBhZ2VOdW1iZXIsIHRoaXMucm93U2V0LCB0cnVlKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlPy5yZXN1bHQ/LnBhZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2VzW2luZGV4XSA9IHJlc3BvbnNlLnJlc3VsdC5wYWdlc1swXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZXNbaW5kZXhdO1xuICAgICAgICAgIHRoaXMucm93U2V0Q291bnRbaW5kZXhdID0gcmVzcG9uc2UucmVzdWx0LnRvdGFsTnVtYmVyUm93O1xuICAgICAgICAgICAgdGhpcy5jaGVja1N1Ym1pc3Npb25FbGlnaWJpbGl0eSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tYXJrQWxsUXVlc3Rpb25zQXNSZXF1aXJlZCkge1xuICAgICAgY29uc3QgY3VycmVudFBhZ2VEYXRhID0gdGhpcy5wYWdlc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgbGV0IHZhbGlkYXRpb25SZXNwb25zZT10cnVlO1xuICAgICAgICAgaWYoIXRoaXMuc2tpcFZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgIHZhbGlkYXRpb25SZXNwb25zZSA9IHRoaXMuZm9ybVZhbGlkYXRpb25TZXJ2aWNlLnZhbGlkYXRlUmVxdWlyZWRRdWVzdGlvbnMoY3VycmVudFBhZ2VEYXRhKS5pc1ZhbGlkO1xuICAgICAgICAgfVxuICAgICAgaWYgKHZhbGlkYXRpb25SZXNwb25zZSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSBpbmRleDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jaGVja1N1Ym1pc3Npb25FbGlnaWJpbGl0eSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jaGVja1N1Ym1pc3Npb25FbGlnaWJpbGl0eSgpO1xuICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4ID0gaW5kZXg7XG4gICAgfVxuXG4gIH1cblxuICBsb2FkTW9yZURhdGEoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmKCF0aGlzLmlzTG9hZGluZykge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIGxldCByb3dDb3VudExpbWl0ID0gdGhpcy5yb3dTZXRDb3VudFtpbmRleF07XG4gICAgbGV0IGkgPSAwO1xuICAgIHRoaXMucGFnZXNbaW5kZXhdLnJvd3MuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgcm93LmdyaWQuZm9yRWFjaCgoZ3JpZEl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICBsZXQgcm93Q291bnQgPWkvMjA7XG4gICAgcm93Q291bnQgPSBNYXRoLmNlaWwocm93Q291bnQpO1xuXG4gaWYodGhpcy52aXNpdGVkUm93cy5oYXMoaW5kZXgpKSB7XG4gICBpZih0aGlzLnZpc2l0ZWRSb3dzLmdldChpbmRleCk9PT0gcm93Q291bnQpe1xuICAgICAgICB0aGlzLmlzTG9hZGluZz1mYWxzZTtcbiAgICByZXR1cm47XG4gICB9XG4gfVxuXG5cbiAgICBpZiAocm93Q291bnQgKyAxID4gcm93Q291bnRMaW1pdCkge1xuICAgICAgdGhpcy5jaGVja1N1Ym1pc3Npb25FbGlnaWJpbGl0eSgpO1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nPWZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnZpc2l0ZWRSb3dzLnNldChpbmRleCwgcm93Q291bnQpO1xuXG4gICAgaWYgKHRoaXMuZWRpdCkge1xuICAgICAgdGhpcy5mb3JtU2VydmljZVxuICAgICAgICAuZ2V0U3VibWl0dGVkRm9ybShcbiAgICAgICAgICB0aGlzLm1vZHVsZU5hbWUsXG4gICAgICAgICAgdGhpcy5zdWJtaXNzaW9uSWQsXG4gICAgICAgICAgaW5kZXggKyAxLFxuICAgICAgICAgIHJvd0NvdW50XG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld1Jvd3MgPSByZXNwb25zZT8ucmVzdWx0Py5wYWdlc1swXT8ucm93cyA/PyBbXTtcbiAgICAgICAgICB0aGlzLnBhZ2VzW2luZGV4XS5yb3dzID0gW1xuICAgICAgICAgICAgLi4uKHRoaXMucGFnZXNbaW5kZXhdPy5yb3dzID8/IFtdKSxcbiAgICAgICAgICAgIC4uLm5ld1Jvd3MsXG4gICAgICAgICAgXTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSBpbmRleDtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlc1tpbmRleF07XG4gICAgICAgICAgdGhpcy5yb3dTZXRDb3VudFtpbmRleF0gPSByZXNwb25zZS5yZXN1bHQudG90YWxOdW1iZXJSb3c7XG4gICAgICAgICAgdGhpcy5jaGVja1N1Ym1pc3Npb25FbGlnaWJpbGl0eSgpO1xuICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZz1mYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9ybVNlcnZpY2VcbiAgICAgICAgLmdldFF1ZXN0aW9ucyh0aGlzLm1vZHVsZU5hbWUsIGluZGV4ICsgMSwgcm93Q291bnQgKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3Um93cyA9IHJlc3BvbnNlPy5yZXN1bHQ/LnBhZ2VzWzBdPy5yb3dzID8/IFtdO1xuICAgICAgICAgIHRoaXMucGFnZXNbaW5kZXhdLnJvd3MgPSBbXG4gICAgICAgICAgICAuLi4odGhpcy5wYWdlc1tpbmRleF0/LnJvd3MgPz8gW10pLFxuICAgICAgICAgICAgLi4ubmV3Um93cyxcbiAgICAgICAgICBdO1xuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2VJbmRleCA9IGluZGV4O1xuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzW2luZGV4XTtcbiAgICAgICAgICB0aGlzLnJvd1NldENvdW50W2luZGV4XSA9IHJlc3BvbnNlLnJlc3VsdC50b3RhbE51bWJlclJvdztcbiAgICAgICAgICB0aGlzLmNoZWNrU3VibWlzc2lvbkVsaWdpYmlsaXR5KCk7XG4gICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZz1mYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICB0aGlzLmNoZWNrU3VibWlzc2lvbkVsaWdpYmlsaXR5KCk7XG4gIH1cbn1cblxuICBnZW5lcmF0ZVF1ZXN0aW9uQW5zd2VycygpIHtcbiAgICB0aGlzLm1heFBvc3NpYmxlU2NvcmUgPSAxO1xuICAgIHRoaXMuc3VtT2ZGaW5kaW5ncyA9IDA7XG4gICAgdGhpcy5jb3B5U3ViZm9ybXMgPSBbXTtcbiAgICBjb25zdCBleHRyYWN0UXVlc3Rpb25zID0gKFxuICAgICAgZm9ybUVsZW1lbnRzOiBhbnlbXSxcbiAgICAgIHBhcmVudEZvcm1JZDogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgICBpc0luU3ViRm9ybTogYm9vbGVhbiA9IGZhbHNlLFxuICAgICAgc3ViRm9ybUluZGV4OiBudW1iZXIgPSAwXG4gICAgKTogeyBhbnN3ZXJzOiBBbnN3ZXJbXTsgZm9ybXM6IEZvcm1bXSB9ID0+IHtcbiAgICAgIGNvbnN0IHF1ZXN0aW9uczogQW5zd2VyW10gPSBbXTtcbiAgICAgIGNvbnN0IGZvcm1zOiBGb3JtW10gPSBbXTtcblxuICAgICAgZm9ybUVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgaWYgKGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ1FVRVNUSU9OJykge1xuICAgICAgICAgIGxldCBiYXNlUXVlc3Rpb246IGFueTtcbiAgICAgICAgICBpZiAoZWxlbWVudC5lbGVtZW50LmZvcm1FbGVtZW50LmVsZW1lbnRUeXBlID09PSAnRklMRV9QSUNLRVInKSB7XG4gICAgICAgICAgICBiYXNlUXVlc3Rpb24gPSB7XG4gICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGVsZW1lbnQuZWxlbWVudC5pZCxcbiAgICAgICAgICAgICAgYW5zd2VyOiAnJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbGVtZW50LmVsZW1lbnQuYW5zd2VyKSkge1xuICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbklkID0gaXNJblN1YkZvcm1cbiAgICAgICAgICAgICAgICA/IGAke3BhcmVudEZvcm1JZH1fJHtzdWJGb3JtSW5kZXh9XyR7ZWxlbWVudC5lbGVtZW50LmlkfWBcbiAgICAgICAgICAgICAgICA6IGVsZW1lbnQuZWxlbWVudC5pZDtcbiAgICAgICAgICAgICAgdGhpcy5maWxlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBxdWVzdGlvbklkLFxuICAgICAgICAgICAgICAgIGZpbGU6IGVsZW1lbnQuZWxlbWVudC5hbnN3ZXIsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBiYXNlUXVlc3Rpb24gPSB7XG4gICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGVsZW1lbnQuZWxlbWVudC5pZCxcbiAgICAgICAgICAgICAgYW5zd2VyOiBlbGVtZW50LmVsZW1lbnQuYW5zd2VyLFxuICAgICAgICAgICAgICBzY29yZTogZWxlbWVudC5lbGVtZW50LnNjb3JlLFxuICAgICAgICAgICAgICBtYXhpbXVtUG9zc2libGVTY29yZTogZWxlbWVudC5lbGVtZW50Lm1heFBvc3NpYmxlU2NvcmVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLmVkaXQpIHtcbiAgICAgICAgICAgIHF1ZXN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgLi4uYmFzZVF1ZXN0aW9uLFxuICAgICAgICAgICAgICBhbnN3ZXJJZDogZWxlbWVudC5lbGVtZW50LmFuc3dlcklkIHx8ICcnLFxuICAgICAgICAgICAgICBkZWxldGVGaWxlczogZWxlbWVudC5lbGVtZW50LmRlbGV0ZUZpbGVzIHx8IFtdLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHF1ZXN0aW9ucy5wdXNoKGJhc2VRdWVzdGlvbik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGVsZW1lbnQuZWxlbWVudC5mb3JtRWxlbWVudC5lbGVtZW50VHlwZSA9PT0gJ0RST1BfRE9XTicgfHxcbiAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50LmZvcm1FbGVtZW50LmVsZW1lbnRUeXBlID09PSAnUkFESU9fQlVUVE9OJyB8fFxuICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQuZm9ybUVsZW1lbnQuZWxlbWVudFR5cGUgPT09ICdDSEVDS19CT1gnKSAmJlxuICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQuZm9ybUVsZW1lbnQuc2NvcmluZyAmJlxuICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQuZm9ybUVsZW1lbnQuc2NvcmluZy5lbmFibGVTY29yaW5nXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLm1heFBvc3NpYmxlU2NvcmUgKj0gdGhpcy5zY29yZUNhbGNTZXJ2aWNlLmdldE1heFBvc3NpYmxlU2NvcmVGb3JRdWVzdGlvbihlbGVtZW50LmVsZW1lbnQpO1xuICAgICAgICAgICAgaWYoZWxlbWVudC5lbGVtZW50LnNjb3JlICYmIGVsZW1lbnQuZWxlbWVudC5zY29yZSE9bnVsbCAmJiBlbGVtZW50LmVsZW1lbnQuc2NvcmUhPXVuZGVmaW5lZCl7XG4gICAgICAgICAgICAgIHRoaXMuc3VtT2ZGaW5kaW5ncyArPSBlbGVtZW50LmVsZW1lbnQuc2NvcmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudC5jaGlsZExvZ2ljcykge1xuICAgICAgICAgICAgZm9yIChsZXQgbG9naWMgb2YgZWxlbWVudC5lbGVtZW50LmNoaWxkTG9naWNzKSB7XG4gICAgICAgICAgICAgIGlmIChsb2dpYy5zaG93TG9naWMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCByb3cgb2YgbG9naWMucm93cykge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZXh0cmFjdFF1ZXN0aW9ucyhcbiAgICAgICAgICAgICAgICAgICAgcm93LmdyaWQsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudEZvcm1JZCxcbiAgICAgICAgICAgICAgICAgICAgaXNJblN1YkZvcm0sXG4gICAgICAgICAgICAgICAgICAgIHN1YkZvcm1JbmRleFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9ucy5wdXNoKC4uLnJlc3VsdC5hbnN3ZXJzKTtcbiAgICAgICAgICAgICAgICAgIGZvcm1zLnB1c2goLi4ucmVzdWx0LmZvcm1zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnU1VCRk9STScpIHtcbiAgICAgICAgICBjb25zdCBzdWJmb3JtSWQgPSBlbGVtZW50LmVsZW1lbnQuaWQ7XG4gICAgICAgICAgY29uc3Qgc3VibWlzc2lvbklkID0gZWxlbWVudC5lbGVtZW50LnN1Ym1pc3Npb25JZDtcbiAgICAgICAgICBpZihlbGVtZW50LmVsZW1lbnQuY29weVN1YmZvcm1NZXRhKXtcbiAgICAgICAgICAgIHRoaXMuY29weVN1YmZvcm1zLnB1c2goZWxlbWVudC5lbGVtZW50LmNvcHlTdWJmb3JtTWV0YSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChlbGVtZW50LmVsZW1lbnQucHJvcGVydHkuc3ViRm9ybVN0cnVjdHVyZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgIGxldCBhbGxBbnN3ZXJzOiBBbnN3ZXJbXSA9IFtdO1xuXG4gICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQucm93cy5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBleHRyYWN0ZWQgPSBleHRyYWN0UXVlc3Rpb25zKFxuICAgICAgICAgICAgICAgIHJvdy5ncmlkLFxuICAgICAgICAgICAgICAgIHN1YmZvcm1JZCxcbiAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgIGZvcm1zLmxlbmd0aFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBleHRyYWN0ZWQuYW5zd2Vycy5mb3JFYWNoKChhbnN3ZXIpID0+IHtcbiAgICAgICAgICAgICAgICBhbGxBbnN3ZXJzLnB1c2goeyAuLi5hbnN3ZXIgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsZXQgY29waWVkRm9ybXM7XG4gICAgICAgICAgICBpZihlbGVtZW50LmVsZW1lbnQuY29waWVkRm9ybXMpe1xuICAgICAgICAgICAgICBjb3BpZWRGb3JtcyA9IGVsZW1lbnQuZWxlbWVudC5jb3BpZWRGb3Jtc1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc3ViZm9ybTogRm9ybSA9IHtcbiAgICAgICAgICAgICAgZm9ybUlkOiBzdWJmb3JtSWQsXG4gICAgICAgICAgICAgIGRlbGV0ZWQ6IGVsZW1lbnQuZWxlbWVudC5kZWxldGVkLFxuICAgICAgICAgICAgICBkZWxldGVkU3VibWlzc2lvbnM6IFtdLFxuICAgICAgICAgICAgICBzdWJtaXNzaW9uczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHN1Ym1pc3Npb25JZDogc3VibWlzc2lvbklkLFxuICAgICAgICAgICAgICAgICAgYW5zd2VyczogYWxsQW5zd2VycyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBjb3BpZWRGb3Jtczpjb3BpZWRGb3Jtc1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZm9ybXMucHVzaChzdWJmb3JtKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuZWxlbWVudC5wcm9wZXJ0eS5zdWJGb3JtU3RydWN0dXJlID09PSAnbXVsdGlwbGUnKSB7XG4gICAgICAgICAgICBjb25zdCBzdWJmb3JtQW5zd2VyczogQW5zd2VyW10gPSBbXTtcbiAgICAgICAgICAgIGxldCBzdWJmb3JtUXVlc3Rpb25zOiBhbnkgPSB7IGFuc3dlcnM6IFtdIH07XG4gICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQucm93cy5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBzdWJmb3JtUXVlc3Rpb25zID0gZXh0cmFjdFF1ZXN0aW9ucyhcbiAgICAgICAgICAgICAgICByb3cuZ3JpZCxcbiAgICAgICAgICAgICAgICBzdWJmb3JtSWQsXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICBmb3Jtcy5sZW5ndGhcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdTdWJmb3JtID0gZm9ybXMuZmluZChcbiAgICAgICAgICAgICAgKGZvcm0pID0+IGZvcm0uZm9ybUlkID09PSBzdWJmb3JtSWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoKGVsZW1lbnQuZWxlbWVudC5wcm9wZXJ0eS5zdWJGb3JtVHlwZSA9PSAnaW5saW5lJyB8fCBlbGVtZW50LmVsZW1lbnQucHJvcGVydHkuc3ViRm9ybVR5cGUgPT0gJ2NhcmQnKVxuICAgICAgICAgICAgICAgJiYgZWxlbWVudC5lbGVtZW50LnN1Ym1pc3Npb25zKSB7XG4gICAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudC5zdWJtaXNzaW9ucyA9IHRoaXMuY2xlYXJFbXB0eVN1Ym1pc3Npb25zKFxuICAgICAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudC5zdWJtaXNzaW9uc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50Py5zdWJtaXNzaW9ucz8uZm9yRWFjaChcbiAgICAgICAgICAgICAgKHN1Ym1pc3Npb246IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3VtT2ZGaW5kaW5ncyArPSBzdWJtaXNzaW9uLnNjb3JlO1xuICAgICAgICAgICAgICAgIHN1Ym1pc3Npb24uYW5zd2Vycy5mb3JFYWNoKChhbnN3ZXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgZGVsZXRlIGFuc3dlci5odG1sQ29udGVudDtcbiAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFuc3dlci5maWxlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25JZCA9IGAke3N1YmZvcm1JZH1fJHtpbmRleH1fJHthbnN3ZXIucXVlc3Rpb25JZH1gO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IHF1ZXN0aW9uSWQsXG4gICAgICAgICAgICAgICAgICAgICAgZmlsZTogYW5zd2VyLmZpbGVzLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGFuc3dlci5maWxlcztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGRlbGV0ZSBhbnN3ZXIuYXR0YWNobWVudHM7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsZXQgY29waWVkRm9ybXM7XG4gICAgICAgICAgICBpZihlbGVtZW50LmVsZW1lbnQuY29waWVkRm9ybXMpe1xuICAgICAgICAgICAgICBjb3BpZWRGb3JtcyA9IGVsZW1lbnQuZWxlbWVudC5jb3BpZWRGb3Jtc1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzdWJmb3JtOiBGb3JtID0ge1xuICAgICAgICAgICAgICBmb3JtSWQ6IHN1YmZvcm1JZCxcbiAgICAgICAgICAgICAgZGVsZXRlZDogZWxlbWVudC5lbGVtZW50LmRlbGV0ZWQsXG4gICAgICAgICAgICAgIHNjb3JlOmVsZW1lbnQuZWxlbWVudC5zY29yZSxcbiAgICAgICAgICAgICAgZGVsZXRlZFN1Ym1pc3Npb25zOiBlbGVtZW50LmVsZW1lbnQuZGVsZXRlZFN1Ym1pc3Npb25zLFxuICAgICAgICAgICAgICBzdWJtaXNzaW9uczogZWxlbWVudC5lbGVtZW50LnN1Ym1pc3Npb25zLFxuICAgICAgICAgICAgICBjb3BpZWRGb3Jtczpjb3BpZWRGb3JtcyxcbiAgICAgICAgICAgICAgbWF4aW11bVBvc3NpYmxlU2NvcmU6IGVsZW1lbnQuZWxlbWVudC5tYXhQb3NzaWJsZVNjb3JlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZm9ybXMucHVzaChzdWJmb3JtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnUVVFU1RJT05fR1JPVVAnKSB7XG4gICAgICAgICAgLy8gSGFuZGxlIFF1ZXN0aW9uIEdyb3VwIGJ5IGl0ZXJhdGluZyB0aHJvdWdoIHJvd3NcbiAgICAgICAgICBlbGVtZW50LmVsZW1lbnQucm93cy5mb3JFYWNoKChyb3c6YW55KSA9PiB7XG4gICAgICAgICAgICByb3cuZ3JpZC5mb3JFYWNoKChncmlkSXRlbTphbnkpID0+IHtcblxuICAgICAgICAgICAgICBpZiAoZ3JpZEl0ZW0uZW50aXR5VHlwZSA9PT0gJ1FVRVNUSU9OJykge1xuICAgICAgICAgICAgICAgIGxldCBiYXNlUXVlc3Rpb246IGFueTtcbiAgICAgICAgICAgICAgICBpZiAoZ3JpZEl0ZW0uZWxlbWVudD8uZm9ybUVsZW1lbnQuZWxlbWVudFR5cGUgPT09ICdGSUxFX1BJQ0tFUicpIHtcbiAgICAgICAgICAgICAgICAgIGJhc2VRdWVzdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogZ3JpZEl0ZW0uZWxlbWVudC5pZCxcbiAgICAgICAgICAgICAgICAgICAgYW5zd2VyOiAnJyxcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShncmlkSXRlbS5lbGVtZW50LmFuc3dlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25JZCA9IGlzSW5TdWJGb3JtXG4gICAgICAgICAgICAgICAgICAgICAgPyBgJHtwYXJlbnRGb3JtSWR9XyR7c3ViRm9ybUluZGV4fV8ke2dyaWRJdGVtLmVsZW1lbnQuaWR9YFxuICAgICAgICAgICAgICAgICAgICAgIDogZ3JpZEl0ZW0uZWxlbWVudC5pZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBxdWVzdGlvbklkLFxuICAgICAgICAgICAgICAgICAgICAgIGZpbGU6IGdyaWRJdGVtLmVsZW1lbnQuYW5zd2VyLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgYmFzZVF1ZXN0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBncmlkSXRlbS5lbGVtZW50LmlkLFxuICAgICAgICAgICAgICAgICAgICBhbnN3ZXI6IGdyaWRJdGVtLmVsZW1lbnQuYW5zd2VyLFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZWRpdCkge1xuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAuLi5iYXNlUXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGFuc3dlcklkOiBncmlkSXRlbS5lbGVtZW50LmFuc3dlcklkIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICBkZWxldGVGaWxlczogZ3JpZEl0ZW0uZWxlbWVudC5kZWxldGVGaWxlcyB8fCBbXSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbnMucHVzaChiYXNlUXVlc3Rpb24pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChncmlkSXRlbS5lbGVtZW50LmNoaWxkTG9naWNzKSB7XG4gICAgICAgICAgICAgICAgICBmb3IgKGxldCBsb2dpYyBvZiBncmlkSXRlbS5lbGVtZW50LmNoaWxkTG9naWNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2dpYy5zaG93TG9naWMpIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCByb3cgb2YgbG9naWMucm93cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZXh0cmFjdFF1ZXN0aW9ucyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LmdyaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEZvcm1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNJblN1YkZvcm0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN1YkZvcm1JbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9ucy5wdXNoKC4uLnJlc3VsdC5hbnN3ZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1zLnB1c2goLi4ucmVzdWx0LmZvcm1zKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ01VTFRJRklFTEQnKSB7XG4gICAgICAgICAgZWxlbWVudC5lbGVtZW50LnJvd3MuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJvdy5ncmlkLmZvckVhY2goKGdyaWRJdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGdyaWRJdGVtLmVudGl0eVR5cGUgPT09ICdRVUVTVElPTicpIHtcbiAgICAgICAgICAgICAgICBxdWVzdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBncmlkSXRlbS5lbGVtZW50LmlkLFxuICAgICAgICAgICAgICAgICAgYW5zd2VyOiBncmlkSXRlbS5lbGVtZW50LmFuc3dlciB8fCAnJyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgYW5zd2VyczogcXVlc3Rpb25zLCBmb3JtczogZm9ybXMgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgcHJvY2Vzc1BhZ2VzID0gKFxuICAgICAgcGFnZXM6IGFueVtdXG4gICAgKTogeyBhbnN3ZXJzOiBBbnN3ZXJbXTsgZm9ybXM6IEZvcm1bXSB9ID0+IHtcbiAgICAgIGNvbnN0IHF1ZXN0aW9uczogQW5zd2VyW10gPSBbXTtcbiAgICAgIGNvbnN0IGZvcm1zOiBGb3JtW10gPSBbXTtcblxuICAgICAgcGFnZXMuZm9yRWFjaCgocGFnZSkgPT4ge1xuICAgICAgICBwYWdlLnJvd3MuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBleHRyYWN0UXVlc3Rpb25zKHJvdy5ncmlkKTtcbiAgICAgICAgICBxdWVzdGlvbnMucHVzaCguLi5yZXN1bHQuYW5zd2Vycyk7XG4gICAgICAgICAgZm9ybXMucHVzaCguLi5yZXN1bHQuZm9ybXMpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4geyBhbnN3ZXJzOiBxdWVzdGlvbnMsIGZvcm1zOiBmb3Jtc307XG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHByb2Nlc3NQYWdlcyh0aGlzLnBhZ2VzKTtcbiAgICB0aGlzLnF1ZXN0aW9uQW5zd2VycyA9IHtcbiAgICAgIHBhcmVudElkOiAnJyxcbiAgICAgIGFuc3dlcnM6IHJlc3VsdC5hbnN3ZXJzLFxuICAgICAgZm9ybXM6IHJlc3VsdC5mb3JtcyxcbiAgICAgIGNvcHlTdWJGb3Jtczp0aGlzLmNvcHlTdWJmb3Jtc1xuICAgIH07XG4gIH1cblxuICBjbGVhckVtcHR5U3VibWlzc2lvbnMoc3VibWlzc2lvbnM6IGFueSkge1xuICAgIGNvbnN0IG5vbkVtcHR5U3VibWlzc2lvbnM6IFN1Ym1pc3Npb25bXSA9IFtdO1xuICAgIGNvbnN0IGVtcHR5U3VibWlzc2lvbklkczogc3RyaW5nW10gPSBbXTtcblxuICAgIHN1Ym1pc3Npb25zLmZvckVhY2goKHN1Ym1pc3Npb246IGFueSkgPT4ge1xuICAgICAgY29uc3QgaGFzVmFsdWUgPSBzdWJtaXNzaW9uLmFuc3dlcnMuc29tZShcbiAgICAgICAgKGFuc3dlcjogYW55KSA9PlxuICAgICAgICAgIGFuc3dlci5hbnN3ZXIgIT09ICcnICYmXG4gICAgICAgICAgYW5zd2VyLmFuc3dlciAhPT0gbnVsbCAmJlxuICAgICAgICAgIGFuc3dlci5hbnN3ZXIgIT09IHVuZGVmaW5lZFxuICAgICAgKTtcbiAgICAgIGlmIChoYXNWYWx1ZSkge1xuICAgICAgICBub25FbXB0eVN1Ym1pc3Npb25zLnB1c2goc3VibWlzc2lvbik7XG4gICAgICB9IGVsc2UgaWYgKHN1Ym1pc3Npb24uc3VibWlzc2lvbklkKSB7XG4gICAgICAgIGVtcHR5U3VibWlzc2lvbklkcy5wdXNoKHN1Ym1pc3Npb24uc3VibWlzc2lvbklkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHN1Ym1pc3Npb25zID0gbm9uRW1wdHlTdWJtaXNzaW9ucztcbiAgICByZXR1cm4gc3VibWlzc2lvbnM7XG4gIH1cblxuICB2YWxpZGF0ZUFsbEVsZW1lbnRMb2FkZWQoKTogeyBzdGF0dXM6IGJvb2xlYW47IG1lc3NhZ2U6IHN0cmluZyB9IHtcbiAgICBpZiAodGhpcy5wYWdlcy5sZW5ndGggPCB0aGlzLnBhZ2VEZXRhaWxzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAnUGxlYXNlIGVuc3VyZSBhbGwgcGFnZXMgYXJlIGZ1bGx5IHZpc2libGUgYmVmb3JlIHN1Ym1pdHRpbmcgdGhlIGZvcm0uJyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgaW5jb21wbGV0ZVBhZ2VzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgdGhpcy5wYWdlcy5mb3JFYWNoKChwOiBhbnksIGk6IG51bWJlcikgPT4ge1xuICAgICAgaWYocCAmJiBBcnJheS5pc0FycmF5KHAucm93cykpe1xuICAgICAgbGV0IGo9MDtcbiAgICAgIHAucm93cy5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICAgcm93LmdyaWQuZm9yRWFjaCgoZ3JpZEl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgIGorKztcbiAgICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgIXAgfHxcbiAgICAgICAgIUFycmF5LmlzQXJyYXkocC5yb3dzKSB8fFxuICAgICAgICBNYXRoLmNlaWwoaiAvIDIwKSAhPSB0aGlzLnJvd1NldENvdW50W2ldXG4gICAgICApIHtcbiAgICAgICAgaW5jb21wbGV0ZVBhZ2VzLnB1c2godGhpcy5wYWdlRGV0YWlsc1tpXS5uYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZXtcbiAgICAgIGluY29tcGxldGVQYWdlcy5wdXNoKHRoaXMucGFnZURldGFpbHNbaV0ubmFtZSk7XG4gICAgfVxuICAgIH0pO1xuXG5cblxuICAgIGlmIChpbmNvbXBsZXRlUGFnZXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZTogYFNvbWUgc2VjdGlvbnMgYXJlIHN0aWxsIGxvYWRpbmcuIFBsZWFzZSBzY3JvbGwgdGhyb3VnaCB0aGUgZm9sbG93aW5nIHBhZ2VzIHRvIGVuc3VyZSBhbGwgcXVlc3Rpb25zIGFyZSBsb2FkZWQ6ICR7aW5jb21wbGV0ZVBhZ2VzLmpvaW4oXG4gICAgICAgICAgJywgJ1xuICAgICAgICApfS5gLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiB0cnVlLFxuICAgICAgbWVzc2FnZTogJ0dyZWF0ISBBbGwgc2VjdGlvbnMgYXJlIGNvbXBsZXRlLiBZb3UgY2FuIG5vdyBzdWJtaXQgdGhlIGZvcm0uJyxcbiAgICB9O1xuICB9XG4gIHNhdmVhc0RyYWZ0UG9wdXAoKTogdm9pZCB7XG5cbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFNhdmVEcmFmdE1vZGFsQ29tcG9uZW50ICwge1xuICAgICAgd2lkdGg6ICc0NTBweCcsXG4gICAgICBwYW5lbENsYXNzOiAnY3VzdG9tLWRpYWxvZy1jb250YWluZXInLFxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICBkYXRhOiB7XG4gICAgcHJpbWFyeUNvbG9yOiB0aGlzLnByaW1hcnlDb2xvcixcbiAgfVxuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG5cbiAgICAgICAgdGhpcy5za2lwVmFsaWRhdGlvbj10cnVlO1xuICAgICAgICB0aGlzLnN1Ym1pdEZvcm0oKTtcbiAgICAgICAgdGhpcy5za2lwVmFsaWRhdGlvbj1mYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICB0aGlzLnNraXBWYWxpZGF0aW9uPWZhbHNlO1xuICAgICAgICBjb25zb2xlLmxvZygnQ2FuY2VsbGVkJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgYXN5bmMgc3VibWl0Rm9ybSgpIHtcbiAgICBpZiAoIXRoaXMudmFsaWRhdGVBbGxFbGVtZW50TG9hZGVkKCkuc3RhdHVzKSB7XG4gICAgICB0aGlzLnRvYXN0ci53YXJuaW5nKCdQbGVhc2Ugd2FpdCBmb3IgYWxsIGVsZW1lbnRzIHRvIGxvYWQnKTtcbiAgICAgIHRoaXMuc3VibWl0LmVtaXQoe1xuICAgICAgICAnc3RhdHVzJzonZmFpbGVkJ1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnN1Ym1pc3Npb25JblByb2dyZXNzKSB7XG4gICAgICB0aGlzLnN1Ym1pdC5lbWl0KHtcbiAgICAgICAgJ3N0YXR1cyc6J2ZhaWxlZCdcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgIGxldCByZWNhcHRjaGFUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHRoaXMuaW5WYWxpZFF1ZXN0aW9ucy5jbGVhcigpO1xuICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuY2xlYXJBbGwoKTtcbiAgICBpZiAodGhpcy5lbmFibGVHb29nbGVSZWNhcHRjaGEpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlY2FwdGNoYVRva2VuPWF3YWl0IHRoaXMuZ2V0VG9rZW4oKTtcblxuXG4gICAgICAgIGlmICghcmVjYXB0Y2hhVG9rZW4pIHtcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1BsZWFzZSBjb21wbGV0ZSB0aGUgQ0FQVENIQSB2ZXJpZmljYXRpb24gYmVmb3JlIHN1Ym1pdHRpbmcgdGhlIGZvcm0uJyk7XG4gICAgICAgICAgdGhpcy5zdWJtaXNzaW9uSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuc3VibWl0LmVtaXQoe1xuICAgICAgICAgICAgJ3N0YXR1cyc6J2ZhaWxlZCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAnRXJyb3Igd2hpbGUgZ2V0dGluZyByZUNBUFRDSEEgdG9rZW46JyxcbiAgICAgICAgICBlcnJvci5lcnJvcj8ubWVzc2FnZVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignRmFpbGVkIHRvIHZlcmlmeSByZUNBUFRDSEEuJyk7XG4gICAgICAgIHRoaXMuc3VibWlzc2lvbkluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdWJtaXQuZW1pdCh7XG4gICAgICAgICAgJ3N0YXR1cyc6J2ZhaWxlZCdcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zdWJtaXNzaW9uSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgbGV0IHZhbGlkYXRpb25SZXNwb25zZSA9dHJ1ZTtcbiAgICBpZiAoIXRoaXMuc2tpcFZhbGlkYXRpb24pIHtcbiAgICAgIHZhbGlkYXRpb25SZXNwb25zZT10aGlzLnZhbGlkYXRlRm9ybSh0aGlzLnBhZ2VzKS5pc1ZhbGlkO1xuICAgIH1cblxuXG4gICAgY29uc3QgZ2V0Q2lyY3VsYXJSZXBsYWNlciA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHNlZW4gPSBuZXcgV2Vha1NldCgpO1xuICAgICAgcmV0dXJuIChfa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmIChzZWVuLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNlZW4uYWRkKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9O1xuICAgIH07XG4gICAgdGhpcy5nZW5lcmF0ZVF1ZXN0aW9uQW5zd2VycygpO1xuICAgIGNvbnN0IGZvcm1GaW5hbFNjb3JlID0gdGhpcy5jYWxjdWxhdGVGb3JtRmluYWxTY29yZSgpO1xuICAgIHRoaXMucXVlc3Rpb25BbnN3ZXJzLnNjb3JlID0gZm9ybUZpbmFsU2NvcmU7XG4gICAgdGhpcy5xdWVzdGlvbkFuc3dlcnMubWF4aW11bVBvc3NpYmxlU2NvcmUgPSB0aGlzLm1heFBvc3NpYmxlU2NvcmU7XG4gICAgaWYgKHZhbGlkYXRpb25SZXNwb25zZSkge1xuICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnc2tpcFZhbGlkYXRpb24nLHRoaXMuc2tpcFZhbGlkYXRpb24gPyAndHJ1ZScgOiAnZmFsc2UnKTtcbiAgICAgIHRoaXMucXVlc3Rpb25BbnN3ZXJzLnBhcmVudElkID0gdGhpcy5wYXJlbnRTdWJtaXNzaW9uSWQ7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb24nLCBKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXN0aW9uQW5zd2VycywgZ2V0Q2lyY3VsYXJSZXBsYWNlcigpKSk7XG4gICAgICBpZih0aGlzLndlYmhvb2tQYXlsb2FkQXJyYXkpe1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoXCJ3ZWJob29rUGF5bG9hZFwiLCBKU09OLnN0cmluZ2lmeSh0aGlzLndlYmhvb2tQYXlsb2FkQXJyYXkpKTtcbiAgICAgIH1lbHNle1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoXCJ3ZWJob29rUGF5bG9hZFwiLCBKU09OLnN0cmluZ2lmeShbXSkpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBzZWVuUXVlc3Rpb25JZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgICAgICBjb25zdCB1bmlxdWVGaWxlcyA9IHRoaXMuZmlsZXMuZmlsdGVyKChmaWxlSXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChzZWVuUXVlc3Rpb25JZHMuaGFzKGZpbGVJdGVtLnF1ZXN0aW9uSWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNlZW5RdWVzdGlvbklkcy5hZGQoZmlsZUl0ZW0ucXVlc3Rpb25JZCk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHVuaXF1ZUZpbGVzLmZvckVhY2goKGZpbGVJdGVtKSA9PiB7XG4gICAgICAgICAgZmlsZUl0ZW0uZmlsZS5mb3JFYWNoKChmaWxlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChmaWxlSXRlbS5xdWVzdGlvbklkLCBmaWxlLl9maWxlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBmb3JtU2VydmljZUNhbGwgPVxuICAgICAgICB0aGlzLmVkaXQgJiYgdGhpcy5zdWJtaXNzaW9uSWRcbiAgICAgICAgICA/IHRoaXMuZm9ybVNlcnZpY2UudXBkYXRlRm9ybShcbiAgICAgICAgICAgICAgdGhpcy5tb2R1bGVOYW1lLFxuICAgICAgICAgICAgICB0aGlzLnN1Ym1pc3Npb25JZCxcbiAgICAgICAgICAgICAgZm9ybURhdGEsXG4gICAgICAgICAgICByZWNhcHRjaGFUb2tlbiA/PyAnJ1xuICAgICAgICAgICAgKVxuICAgICAgICAgIDogdGhpcy5mb3JtU2VydmljZS5zdWJtaXRGb3JtKFxuICAgICAgICAgICAgICB0aGlzLm1vZHVsZU5hbWUsXG4gICAgICAgICAgICAgIGZvcm1EYXRhLFxuICAgICAgICAgICByZWNhcHRjaGFUb2tlbiA/PyAnJ1xuICAgICAgICAgICAgKTtcblxuICAgICAgZm9ybVNlcnZpY2VDYWxsLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MoXG4gICAgICAgICAgICB0aGlzLmVkaXRcbiAgICAgICAgICAgICAgPyAnRm9ybSB1cGRhdGVkIHN1Y2Nlc3NmdWxseSdcbiAgICAgICAgICAgICAgOiAnRm9ybSBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5J1xuICAgICAgICAgICk7XG4gICAgICAgICAgbGV0IGVtaXR0aW5nVmFsdWVzXG4gICAgICAgICAgaWYodGhpcy5lbWl0dGVycyl7XG4gICAgICAgICAgICBlbWl0dGluZ1ZhbHVlcyA9IHRoaXMubWFwRW1pdHRlcnNUb1ZhbHVlcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnN1Ym1pdC5lbWl0KHtcbiAgICAgICAgICAgICdzdGF0dXMnOidzdWNjZXNzJyxcbiAgICAgICAgICAgICdzdWJtaXNzaW9uSWQnOnJlc3BvbnNlLnJlc3VsdCxcbiAgICAgICAgICAgICdzY29yZSc6Zm9ybUZpbmFsU2NvcmUsXG4gICAgICAgICAgICAuLi4oZW1pdHRpbmdWYWx1ZXMgfHwge30pXG4gICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuc3VibWlzc2lvbkluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuY2xlYXJBbGwoKTtcbiAgICAgICAgICB0aGlzLmZpbmRRdWVzdGlvblBhZ2VJbmRleCh0aGlzLnBhcnNlRXJyb3JzVG9NYXAoZXJyb3IuZXJyb3IubWVzc2FnZSkpO1xuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSB0aGlzLnBhZ2VzLmxlbmd0aC0xO1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvRmlyc3RFcnJvcigpO1xuICAgICAgICAgIHRoaXMuc3VibWlzc2lvbkluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnNhdmVhc0RyYWZ0UG9wdXAoKTtcbiAgICAgICAgICB0aGlzLnN1Ym1pdC5lbWl0KHtcbiAgICAgICAgICAgICdzdGF0dXMnOidmYWlsZWQnXG4gICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRoaXMudG9hc3RyLmVycm9yKHZhbGlkYXRpb25SZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgIHRoaXMuc3VibWl0LmVtaXQoe1xuICAgICAgICAnc3RhdHVzJzonZmFpbGVkJ1xuICAgICAgfSk7XG4gICAgICB0aGlzLnNhdmVhc0RyYWZ0UG9wdXAoKTtcbiAgICAgIHRoaXMuc3VibWlzc2lvbkluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBjYWxjdWxhdGVGb3JtRmluYWxTY29yZSgpe1xuICAgIHJldHVybiAxMDAtKHRoaXMuc3VtT2ZGaW5kaW5ncy90aGlzLm1heFBvc3NpYmxlU2NvcmUpKjEwMFxuICB9XG5cbiAgbWFwRW1pdHRlcnNUb1ZhbHVlcyhcbiAgKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgY29uc3QgYW5zd2VyTWFwID0gbmV3IE1hcChcbiAgICAgIHRoaXMucXVlc3Rpb25BbnN3ZXJzLmFuc3dlcnMubWFwKChxYSkgPT4gW3FhLnF1ZXN0aW9uSWQsIHFhLmFuc3dlcl0pXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc3VsdDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuXG4gICAgdGhpcy5lbWl0dGVycy5mb3JFYWNoKChlbWl0dGVyKSA9PiB7XG4gICAgICBpZiAoZW1pdHRlci52YWx1ZVNvdXJjZSA9PT0gJ0NVU1RPTV9JTlBVVCcpIHtcbiAgICAgICAgcmVzdWx0W2VtaXR0ZXIua2V5TmFtZV0gPSBlbWl0dGVyLmlucHV0VmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBlbWl0dGVyLnZhbHVlU291cmNlID09PSAnUVVFU1RJT04nICYmXG4gICAgICAgIGVtaXR0ZXIucXVlc3Rpb25JZCAmJlxuICAgICAgICBhbnN3ZXJNYXAuaGFzKGVtaXR0ZXIucXVlc3Rpb25JZClcbiAgICAgICkge1xuICAgICAgICByZXN1bHRbZW1pdHRlci5rZXlOYW1lXSA9IGFuc3dlck1hcC5nZXQoZW1pdHRlci5xdWVzdGlvbklkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuIHBhcnNlRXJyb3JzVG9NYXAoZXJyb3JTdHJpbmc6IHN0cmluZyk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIGNvbnN0IGVycm9yTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICAvLyBDb252ZXJ0IHRoZSBpbmNvcnJlY3QgZm9ybWF0IHRvIGEgdmFsaWQgb2JqZWN0IHN0cnVjdHVyZVxuICAgIGVycm9yU3RyaW5nXG4gICAgICAgIC5yZXBsYWNlKC9be31dL2csICcnKSAvLyBSZW1vdmUgY3VybHkgYnJhY2VzXG4gICAgICAgIC5zcGxpdCgnLCAnKSAvLyBTcGxpdCBrZXktdmFsdWUgcGFpcnNcbiAgICAgICAgLmZvckVhY2gocGFpciA9PiB7XG4gICAgICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBwYWlyLnNwbGl0KCc9Jyk7XG4gICAgICAgICAgICBpZiAoa2V5ICYmIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNYXAuc2V0KGtleS50cmltKCksIHZhbHVlLnRyaW0oKSk7IC8vIFN0b3JlIGluIE1hcFxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgIHJldHVybiBlcnJvck1hcDtcbn1cbiAgYXN5bmMgbmF2aWdhdGVUb0ZpcnN0RXJyb3IoKSB7XG4gICAgY29uc3QgZmlyc3RFcnJvciA9IHRoaXMudmFsaWRhdGlvblNlcnZpY2UuZ2V0Rmlyc3RJbnZhbGlkKCk7XG4gICAgaWYgKCFmaXJzdEVycm9yKSByZXR1cm47XG5cbiAgICBjb25zdCBlbGVtZW50SWQgPSBgcXVlc3Rpb24tJHtmaXJzdEVycm9yLmlkfWA7XG5cbiAgICB0aGlzLnJldHJ5Q291bnQgPSAwO1xuXG4gICAgLy8gQ2hhbmdlIHBhZ2UgaWYgbmVlZGVkXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2VJbmRleCAhPT0gZmlyc3RFcnJvci5wYWdlSW5kZXgpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2VJbmRleCA9IGZpcnN0RXJyb3IucGFnZUluZGV4O1xuICAgICAgaWYodGhpcy5jdXJyZW50UGFnZUluZGV4KzEgPCB0aGlzLnBhZ2VEZXRhaWxzLmxlbmd0aCl7XG4gICAgICAgIHRoaXMubmV4dFBhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzW3RoaXMuY3VycmVudFBhZ2VJbmRleCsxXTtcbiAgICAgIH1cbiAgICAgIGlmKHRoaXMuY3VycmVudFBhZ2VJbmRleC0xPj0wKXtcbiAgICAgICAgdGhpcy5wcmV2aW91c1BhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzW3RoaXMuY3VycmVudFBhZ2VJbmRleC0xXTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5kZWJvdW5jZSgoKSA9PiB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKSwgMTAwKTtcbiAgICAgIGlmKHRoaXMubmF2aWdhdGlvbiA9PT0gJ1RBQicpXG4gICAgICB0aGlzLmNoaWxkLnRyaWdnZXJGdW5jdGlvbihmaXJzdEVycm9yLnBhZ2VJbmRleCk7XG4gICAgfVxuXG5cbiAgICBhd2FpdCB0aGlzLnNjcm9sbFRvRWxlbWVudFdpdGhSZXRyeShlbGVtZW50SWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzY3JvbGxUb0VsZW1lbnRXaXRoUmV0cnkoZWxlbWVudElkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnJldHJ5Q291bnQrKztcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTtcblxuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gdGhpcy5zY3JvbGxBbmRGb2N1cyhlbGVtZW50KSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmV0cnlDb3VudCA8IHRoaXMubWF4UmV0cmllcykge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMCkpO1xuICAgICAgcmV0dXJuIHRoaXMuc2Nyb2xsVG9FbGVtZW50V2l0aFJldHJ5KGVsZW1lbnRJZCk7XG4gICAgfVxuXG4gICAgY29uc29sZS5lcnJvcihgRWxlbWVudCAke2VsZW1lbnRJZH0gbm90IGZvdW5kIGFmdGVyICR7dGhpcy5tYXhSZXRyaWVzfSBhdHRlbXB0c2ApO1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLmZhbGxiYWNrU2Nyb2xsKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzY3JvbGxBbmRGb2N1cyhlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgYmxvY2s6ICdjZW50ZXInLFxuICAgICAgaW5saW5lOiAnbmVhcmVzdCdcbiAgICB9KTtcblxuICAgIGNvbnN0IGZvY3VzYWJsZSA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICdpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYnV0dG9uLCBbdGFiaW5kZXhdOm5vdChbdGFiaW5kZXg9XCItMVwiXSknXG4gICAgKSBhcyBIVE1MRWxlbWVudDtcbiAgICBmb2N1c2FibGU/LmZvY3VzKCk7XG4gIH1cblxuICBwcml2YXRlIGZhbGxiYWNrU2Nyb2xsKCkge1xuICAgIGNvbnN0IHBhZ2VFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLnBhZ2UtJHt0aGlzLmN1cnJlbnRQYWdlSW5kZXh9YCk7XG4gICAgcGFnZUVsZW1lbnQ/LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdhdXRvJyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZGVib3VuY2UoZnVuYzogKCkgPT4gdm9pZCwgZGVsYXk6IG51bWJlcikge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmRlYm91bmNlVGltZXIpO1xuICAgIHRoaXMuZGVib3VuY2VUaW1lciA9IHNldFRpbWVvdXQoZnVuYywgZGVsYXkpO1xuICB9XG4vLyAgIGV4dHJhY3RJZChtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbi8vICAgICBjb25zdCBtYXRjaCA9IG1lc3NhZ2UubWF0Y2goL1swLTlhLWZBLUYtXXszNn0vKTtcbi8vICAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFswXSA6IG51bGw7XG4vLyB9XG5cbi8vICByZW1vdmVJZChtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcge1xuLy8gICByZXR1cm4gbWVzc2FnZS5yZXBsYWNlKC9bMC05YS1mQS1GLV17MzZ9JC8sIFwiXCIpLnRyaW0oKTtcbi8vIH1cblxuXG5maW5kUXVlc3Rpb25QYWdlSW5kZXgocXVlc3Rpb25FcnJvcnM6IE1hcDxzdHJpbmcsIHN0cmluZz4pOiB2b2lkIHtcbiAgZm9yIChsZXQgcGFnZUluZGV4ID0gMDsgcGFnZUluZGV4IDwgdGhpcy5wYWdlcy5sZW5ndGg7IHBhZ2VJbmRleCsrKSB7XG4gICAgY29uc3QgcGFnZSA9IHRoaXMucGFnZXNbcGFnZUluZGV4XTtcblxuICAgIGZvciAoY29uc3Qgcm93IG9mIHBhZ2Uucm93cykge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHJvdy5ncmlkKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbmRTdG9yZUludmFsaWRRdWVzdGlvbnMoZWxlbWVudCwgcXVlc3Rpb25FcnJvcnMsIHBhZ2VJbmRleCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnByaXZhdGUgY2hlY2tBbmRTdG9yZUludmFsaWRRdWVzdGlvbnMoZWxlbWVudDogYW55LCBxdWVzdGlvbkVycm9yczogTWFwPHN0cmluZywgc3RyaW5nPiwgcGFnZUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgaWYgKGVsZW1lbnQuZWxlbWVudC5pZCAmJiBxdWVzdGlvbkVycm9ycy5oYXMoZWxlbWVudC5lbGVtZW50LmlkKSkge1xuICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uuc2V0SW52YWxpZChlbGVtZW50LmVsZW1lbnQuaWQsIHF1ZXN0aW9uRXJyb3JzLmdldChlbGVtZW50LmVsZW1lbnQuaWQpISwgcGFnZUluZGV4KTtcbiAgfVxuXG4gIC8vIEhhbmRsZSBzdWJmb3JtcyByZWN1cnNpdmVseVxuICBpZiAoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnU1VCRk9STScgJiYgZWxlbWVudC5lbGVtZW50LnJvd3MpIHtcbiAgICBmb3IgKGNvbnN0IHJvdyBvZiBlbGVtZW50LmVsZW1lbnQucm93cykge1xuICAgICAgZm9yIChjb25zdCBncmlkSXRlbSBvZiByb3cuZ3JpZCkge1xuICAgICAgICB0aGlzLmNoZWNrQW5kU3RvcmVJbnZhbGlkUXVlc3Rpb25zKGdyaWRJdGVtLCBxdWVzdGlvbkVycm9ycywgcGFnZUluZGV4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKChlbGVtZW50LmVudGl0eVR5cGUgPT09ICdRVUVTVElPTl9HUk9VUCcgfHwgZWxlbWVudC5lbnRpdHlUeXBlPT09J01VTFRJRklFTEQnKSAmJiBlbGVtZW50LmVsZW1lbnQucm93cykge1xuICAgIGZvciAoY29uc3Qgcm93IG9mIGVsZW1lbnQuZWxlbWVudC5yb3dzKSB7XG4gICAgICBmb3IgKGNvbnN0IGdyaWRJdGVtIG9mIHJvdy5ncmlkKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbmRTdG9yZUludmFsaWRRdWVzdGlvbnMoZ3JpZEl0ZW0sIHF1ZXN0aW9uRXJyb3JzLCBwYWdlSW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSBsb2dpYy1iYXNlZCBjb25kaXRpb25zIHJlY3Vyc2l2ZWx5XG4gIGlmICgoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnUVVFU1RJT04nKSAmJiBlbGVtZW50LmVsZW1lbnQuY2hpbGRMb2dpY3MpIHtcbiAgICBmb3IgKGNvbnN0IGxvZ2ljIG9mIGVsZW1lbnQuZWxlbWVudC5jaGlsZExvZ2ljcykge1xuICAgICAgaWYgKGxvZ2ljLnNob3dMb2dpYykge1xuICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiBsb2dpYy5yb3dzKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBncmlkSXRlbSBvZiByb3cuZ3JpZCkge1xuICAgICAgICAgICAgdGhpcy5jaGVja0FuZFN0b3JlSW52YWxpZFF1ZXN0aW9ucyhncmlkSXRlbSwgcXVlc3Rpb25FcnJvcnMsIHBhZ2VJbmRleCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZvY3VzUXVlc3Rpb25FbGVtZW50KGNvbnRhaW5lcjogSFRNTEVsZW1lbnQpIHtcbiAgLy8gRmluZCBmaXJzdCBmb2N1c2FibGUgZWxlbWVudCB3aXRoaW4gdGhlIHF1ZXN0aW9uXG4gIGNvbnN0IGZvY3VzYWJsZSA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgW3RhYmluZGV4XScpO1xuICBpZiAoZm9jdXNhYmxlKSB7XG4gICAgKGZvY3VzYWJsZSBhcyBIVE1MRWxlbWVudCkuZm9jdXMoKTtcbiAgfSBlbHNlIHtcbiAgICBjb250YWluZXIuZm9jdXMoKTtcbiAgfVxufVxuICB2YWxpZGF0ZUZvcm0oanNvbkRhdGE6IGFueSk6IHtcbiAgICBpc1ZhbGlkOiBib29sZWFuO1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICBwYWdlSW5kZXg6IG51bWJlciB8IDA7XG4gIH0ge1xuXG4gICAgY29uc3QgdmFsaWRhdGVRdWVzdGlvbnMgPSAoXG4gICAgICBmb3JtRWxlbWVudHM6IGFueVtdXG4gICAgKTogeyBpc1ZhbGlkOiBib29sZWFuOyBtZXNzYWdlOiBzdHJpbmc7IHBhZ2VJbmRleDogbnVtYmVyIHwgMCB9ID0+IHtcbiAgICAgIGZvciAobGV0IGVsZW1lbnQgb2YgZm9ybUVsZW1lbnRzKSB7XG4gICAgICAgIGlmIChlbGVtZW50LmVudGl0eVR5cGUgPT09ICdRVUVTVElPTicpIHtcbiAgICAgICAgICBjb25zdCByZXF1aXJlZCA9IGVsZW1lbnQuZWxlbWVudC5yZXF1aXJlZDtcbiAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBlbGVtZW50LmVsZW1lbnQuYW5zd2VyO1xuICAgICAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSBlbGVtZW50LmVsZW1lbnQudmFsaWRhdGlvbjtcbiAgICAgICAgICBpZiAoZWxlbWVudC5lbGVtZW50LmZvcm1FbGVtZW50LmVsZW1lbnRUeXBlID09PSAnRklMRV9QSUNLRVInKSB7XG4gICAgICAgICAgICBjb25zdCBhdHRhY2htZW50ID0gZWxlbWVudC5lbGVtZW50LmF0dGFjaG1lbnRzO1xuICAgICAgICAgICAgaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgICAgICAgIGlmICgoIWFuc3dlciB8fCBhbnN3ZXI/Lmxlbmd0aCA9PT0gMCkgJiYgKCFhdHRhY2htZW50IHx8YXR0YWNobWVudD8ubGVuZ3RoID09IDApKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pblZhbGlkUXVlc3Rpb25zLnNldChlbGVtZW50LmVsZW1lbnQuaWQsXCJSZXF1aXJlZCBmaWxlIHF1ZXN0aW9uIGhhcyBubyBmaWxlcyB1cGxvYWRlZC5cIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYEZvcm0gaXMgaW52YWxpZCAtIFJlcXVpcmVkIGZpbGUgcXVlc3Rpb24gJHtlbGVtZW50LmVsZW1lbnQucXVlc3Rpb25OdW1iZXJ9IGhhcyBubyBmaWxlcyB1cGxvYWRlZC5gLFxuICAgICAgICAgICAgICAgICAgcGFnZUluZGV4OiAwLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgICAgICAgIGlmICghYW5zd2VyIHx8IE9iamVjdC5rZXlzKGFuc3dlcikubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pblZhbGlkUXVlc3Rpb25zLnNldChlbGVtZW50LmVsZW1lbnQuaWQsXCJRdWVzdGlvbiBpcyByZXF1aXJlZCBidXQgbm8gYW5zd2VyIHByb3ZpZGVkLlwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgRm9ybSBpcyBpbnZhbGlkIC0gUXVlc3Rpb24gJHtlbGVtZW50LmVsZW1lbnQucXVlc3Rpb25OdW1iZXJ9IGlzIHJlcXVpcmVkIGJ1dCBubyBhbnN3ZXIgcHJvdmlkZWQuYCxcbiAgICAgICAgICAgICAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb249PT1mYWxzZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5WYWxpZFF1ZXN0aW9ucy5zZXQoZWxlbWVudC5lbGVtZW50LmlkLFwiUXVlc3Rpb24gaXMgcmVxdWlyZWQgYnV0IHZhbGlkYXRpb24gaXMgZmFsc2UuXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBGb3JtIGlzIGludmFsaWQgLSBRdWVzdGlvbiAke2VsZW1lbnQuZWxlbWVudC5xdWVzdGlvbk51bWJlcn0gaXMgcmVxdWlyZWQgYnV0IHZhbGlkYXRpb24gaXMgZmFsc2UuYCxcbiAgICAgICAgICAgICAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFyZXF1aXJlZCAmJiBhbnN3ZXIgJiYgT2JqZWN0LmtleXMoYW5zd2VyKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5WYWxpZFF1ZXN0aW9ucy5zZXQoZWxlbWVudC5lbGVtZW50LmlkLFwiUXVlc3Rpb24gaXMgbm90IHJlcXVpcmVkIGJ1dCBhbnN3ZXIgcHJvdmlkZWQgd2l0aCB2YWxpZGF0aW9uIGZhbHNlLlwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgRm9ybSBpcyBpbnZhbGlkIC0gUXVlc3Rpb24gJHtlbGVtZW50LmVsZW1lbnQucXVlc3Rpb25OdW1iZXJ9IGlzIG5vdCByZXF1aXJlZCBidXQgYW5zd2VyIHByb3ZpZGVkIHdpdGggdmFsaWRhdGlvbiBmYWxzZS5gLFxuICAgICAgICAgICAgICAgICAgcGFnZUluZGV4OiAwLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudC5jaGlsZExvZ2ljcykge1xuICAgICAgICAgICAgZm9yIChsZXQgbG9naWMgb2YgZWxlbWVudC5lbGVtZW50LmNoaWxkTG9naWNzKSB7XG4gICAgICAgICAgICAgIGlmIChsb2dpYy5zaG93TG9naWMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB2YWxpZGF0ZVF1ZXN0aW9ucyhsb2dpYy5yb3dzKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5pc1ZhbGlkKSByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vICBlbHNlIGlmIChlbGVtZW50LmVudGl0eVR5cGUgPT09ICdTVUJGT1JNJyApIHtcbiAgICAgICAgLy8gICBpZiAoZWxlbWVudC5lbGVtZW50LnByb3BlcnR5LnN1YkZvcm1TdHJ1Y3R1cmUgPT09ICdtdWx0aXBsZScpIHtcbiAgICAgICAgLy8gICAgIGNvbnN0IGRhdGEgPSBlbGVtZW50LmVsZW1lbnQucm93cztcbiAgICAgICAgLy8gICAgIGNvbnN0IHJlcXVpcmVkUXVlc3Rpb25JZHMgPSBkYXRhXG4gICAgICAgIC8vICAgICAgIC5mbGF0TWFwKChyb3c6IGFueSkgPT4gcm93LmdyaWQpIC8vIEV4dHJhY3RpbmcgZ3JpZCBpdGVtcyBmcm9tIGVhY2ggb2JqZWN0XG4gICAgICAgIC8vICAgICAgIC5maWx0ZXIoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAvLyAgICAgICAgIHJldHVybiBpdGVtLmVsZW1lbnQucmVxdWlyZWQ7IC8vIEVuc3VyaW5nIHRoZSBmaWx0ZXIgcHJvcGVybHkgY2hlY2tzICdyZXF1aXJlZCdcbiAgICAgICAgLy8gICAgICAgfSlcbiAgICAgICAgLy8gICAgICAgLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtLmVsZW1lbnQuaWQpO1xuXG4gICAgICAgIC8vICAgICBpZiAocmVxdWlyZWRRdWVzdGlvbklkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vICAgICAgIGlmIChlbGVtZW50Py5lbGVtZW50Py5zdWJtaXNzaW9ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyAgICAgICAgIGNvbnN0IGFyZVJlcXVpcmVkUXVlc3Rpb25zQW5zd2VyZWQgPSByZXF1aXJlZFF1ZXN0aW9uSWRzLmV2ZXJ5KFxuICAgICAgICAvLyAgICAgICAgICAgKHJlcXVpcmVkSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAvLyAgICAgICAgICAgICBjb25zdCBtYXRjaGluZ0Fuc3dlciA9IGVsZW1lbnQuZWxlbWVudC5zdWJtaXNzaW9uc1xuICAgICAgICAvLyAgICAgICAgICAgICAgIC5mbGF0TWFwKChzdWI6IGFueSkgPT4gc3ViLmFuc3dlcnMpXG4gICAgICAgIC8vICAgICAgICAgICAgICAgLmZpbmQoKGFuczogYW55KSA9PiBhbnMucXVlc3Rpb25JZCA9PT0gcmVxdWlyZWRJZCk7XG5cbiAgICAgICAgLy8gICAgICAgICAgICAgaWYgKCFtYXRjaGluZ0Fuc3dlcikge1xuICAgICAgICAvLyAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gICAgICAgICAgICAgfVxuXG4gICAgICAgIC8vICAgICAgICAgICAgIGNvbnN0IGEgPSBtYXRjaGluZ0Fuc3dlci5hbnN3ZXI7XG5cbiAgICAgICAgLy8gICAgICAgICAgICAgaWYgKHR5cGVvZiBhID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyAgICAgICAgICAgICAgIHJldHVybiBhLnRyaW0oKSAhPT0gJyc7XG4gICAgICAgIC8vICAgICAgICAgICAgIH1cblxuICAgICAgICAvLyAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhKSkge1xuICAgICAgICAvLyAgICAgICAgICAgICAgIHJldHVybiBhLmxlbmd0aCA+IDA7XG4gICAgICAgIC8vICAgICAgICAgICAgIH1cblxuICAgICAgICAvLyAgICAgICAgICAgICBpZiAoYSAhPT0gbnVsbCAmJiB0eXBlb2YgYSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoYSkubGVuZ3RoID4gMDtcbiAgICAgICAgLy8gICAgICAgICAgICAgfVxuXG4gICAgICAgIC8vICAgICAgICAgICAgIHJldHVybiBhICE9PSBudWxsICYmIGEgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gICAgICAgICAgIH1cbiAgICAgICAgLy8gICAgICAgICApO1xuXG4gICAgICAgIC8vICAgICAgICAgaWYgKCFhcmVSZXF1aXJlZFF1ZXN0aW9uc0Fuc3dlcmVkKSB7XG4gICAgICAgIC8vICAgICAgICAgICB0aGlzLmluVmFsaWRRdWVzdGlvbnMuc2V0KGVsZW1lbnQuZWxlbWVudC5pZCxcIlF1ZXN0aW9uIGlzIHJlcXVpcmVkIGJ1dCBubyBhbnN3ZXIgcHJvdmlkZWQuXCIpO1xuICAgICAgICAvLyAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgIC8vICAgICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgIC8vICAgICAgICAgICAgICAgJ0Zvcm0gaXMgaW52YWxpZCAtIFF1ZXN0aW9uIGlzIHJlcXVpcmVkIGJ1dCBubyBhbnN3ZXIgcHJvdmlkZWQuJyxcbiAgICAgICAgLy8gICAgICAgICAgICAgcGFnZUluZGV4OiAwLFxuICAgICAgICAvLyAgICAgICAgICAgfTtcbiAgICAgICAgLy8gICAgICAgICB9IGVsc2Uge1xuICAgICAgICAvLyAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogdHJ1ZSwgbWVzc2FnZTogJycsIHBhZ2VJbmRleDogMCB9O1xuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgICAgfVxuICAgICAgICAvLyAgICAgICAvLyBlbHNlIHtcbiAgICAgICAgLy8gICAgICAgLy8gICB0aGlzLmluVmFsaWRRdWVzdGlvbnMuc2V0KGVsZW1lbnQuZWxlbWVudC5pZCxcIk5vIHN1Ym1pc3Npb25zIHByb3ZpZGVkIGZvciByZXF1aXJlZCBxdWVzdGlvbnMuXCIpO1xuICAgICAgICAvLyAgICAgICAvLyAgIHJldHVybiB7XG4gICAgICAgIC8vICAgICAgIC8vICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgLy8gICAgICAgLy8gICAgIG1lc3NhZ2U6XG4gICAgICAgIC8vICAgICAgIC8vICAgICAgICdGb3JtIGlzIGludmFsaWQgLSBObyBzdWJtaXNzaW9ucyBwcm92aWRlZCBmb3IgcmVxdWlyZWQgcXVlc3Rpb25zLicsXG4gICAgICAgIC8vICAgICAgIC8vICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICAgIC8vICAgICAgIC8vICAgfTtcbiAgICAgICAgLy8gICAgICAgLy8gfVxuICAgICAgICAvLyAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gICAgICAgcmV0dXJuIHsgaXNWYWxpZDogdHJ1ZSwgbWVzc2FnZTogJycsIHBhZ2VJbmRleDogMCB9O1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyAgIH0gZWxzZSB7XG4gICAgICAgIC8vICAgICBpZiAoZWxlbWVudC5lbGVtZW50LnJvd3MpIHtcbiAgICAgICAgLy8gICAgICAgY29uc3QgcmVzdWx0cyA9IGVsZW1lbnQuZWxlbWVudC5yb3dzLm1hcCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgLy8gICAgICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gdmFsaWRhdGVRdWVzdGlvbnMocm93LmdyaWQpO1xuICAgICAgICAvLyAgICAgICAgIHJldHVybiB2YWxpZGF0aW9uUmVzdWx0O1xuICAgICAgICAvLyAgICAgICB9KTtcbiAgICAgICAgLy8gICAgICAgY29uc3QgaXNWYWxpZCA9IHJlc3VsdHMuZXZlcnkoKHJlczogYW55KSA9PiByZXMuaXNWYWxpZCk7XG4gICAgICAgIC8vICAgICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgICAvLyAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICAvLyAgICAgICB9XG4gICAgICAgIC8vICAgICAgIC8vIGNvbnN0IHJlc3VsdCA9ICBlbGVtZW50LmVsZW1lbnQucm93cy5mbGF0TWFwKChyb3c6IGFueSkgPT5cbiAgICAgICAgLy8gICAgICAgLy8gICB7XG4gICAgICAgIC8vICAgICAgIC8vICAgICB2YWxpZGF0ZVF1ZXN0aW9ucyhyb3cuZ3JpZCk7XG4gICAgICAgIC8vICAgICAgIC8vICAgICBpZiAoIXJlc3VsdC5pc1ZhbGlkKSByZXR1cm4gcmVzdWx0O1xuICAgICAgICAvLyAgICAgICAvLyB9KVxuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gfVxuICAgICAgICBlbHNlICBpZiAoKGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ1FVRVNUSU9OX0dST1VQJyB8fCBlbGVtZW50LmVudGl0eVR5cGU9PT0nTVVMVElGSUVMRCcpJiYgZWxlbWVudC5lbGVtZW50LnJvd3MpIHtcblxuICAgICAgICAgIGZvciAoY29uc3Qgcm93IG9mIGVsZW1lbnQuZWxlbWVudC5yb3dzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRlUXVlc3Rpb25zKHJvdy5ncmlkKTtcbiAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaXNWYWxpZCAmJiBlbGVtZW50LmVudGl0eVR5cGUhPSdNVUxUSUZJRUxEJykgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIG1lc3NhZ2U6ICcnLCBwYWdlSW5kZXg6IDAgfTtcbiAgICB9O1xuXG4gICAgZm9yIChsZXQgcGFnZUluZGV4ID0gMDsgcGFnZUluZGV4IDwganNvbkRhdGEubGVuZ3RoOyBwYWdlSW5kZXgrKykge1xuICAgICAgY29uc3QgcGFnZSA9IGpzb25EYXRhW3BhZ2VJbmRleF07XG4gICAgICBmb3IgKGxldCByb3cgb2YgcGFnZS5yb3dzKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRlUXVlc3Rpb25zKHJvdy5ncmlkKTtcbiAgICAgICAgdGhpcy5pblZhbGlkUXVlc3Rpb25zLmZvckVhY2goKG1lc3NhZ2U6IHN0cmluZywgaWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uuc2V0SW52YWxpZChpZCxtZXNzYWdlLCBwYWdlSW5kZXgpO1xufSk7XG4gICAgICAgIHRoaXMuaW5WYWxpZFF1ZXN0aW9ucz0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICAgICAgLy8gaWYgKCFyZXN1bHQuaXNWYWxpZCkge1xuICAgICAgICAvLyAgIHJldHVybiB7XG4gICAgICAgIC8vICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgLy8gICAgIG1lc3NhZ2U6IGBQYWdlICR7cGFnZUluZGV4ICsgMX06ICR7cmVzdWx0Lm1lc3NhZ2V9YCxcbiAgICAgICAgLy8gICAgIHBhZ2VJbmRleDogcGFnZUluZGV4LFxuICAgICAgICAvLyAgIH07XG4gICAgICAgIC8vIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jdXJyZW50UGFnZUluZGV4ID0ganNvbkRhdGEubGVuZ3RoLTE7XG4gICAgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuZ2V0Rmlyc3RJbnZhbGlkKCkpIHtcbiAgICAgIHRoaXMubmF2aWdhdGVUb0ZpcnN0RXJyb3IoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiBgUGFnZWAsXG4gICAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpc1ZhbGlkOiB0cnVlLFxuICAgICAgbWVzc2FnZTogJ0Zvcm0gaXMgdmFsaWQuJyxcbiAgICAgIHBhZ2VJbmRleDogMCxcbiAgICB9O1xuICB9XG5cbiAgdXBkYXRlU3ViRm9ybVdpdGhTdWJtaXNzaW9ucyhldmVudDogYW55KSB7XG4gICAgdGhpcy51cGRhdGVTdWJGb3JtKHRoaXMucGFnZXMsIGV2ZW50KTtcbiAgfVxuXG4gIHVwZGF0ZVN1YkZvcm0gPSAocGFnZXM6IGFueVtdLCB1cGRhdGVkU3ViRm9ybTogYW55KSA9PiB7XG4gICAgcGFnZXMuZm9yRWFjaCgocGFnZSkgPT4ge1xuICAgICAgcGFnZS5yb3dzLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICAgIHJvdy5ncmlkLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ1NVQkZPUk0nICYmXG4gICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQuaWQgPT09IHVwZGF0ZWRTdWJGb3JtLmZvcm1JZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBleGlzdGluZyBzdWJmb3JtIHdpdGggdGhlIG5ldyBkYXRhXG4gICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQgPSB1cGRhdGVkU3ViRm9ybTtcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgZWxlbWVudC5lbnRpdHlUeXBlID09PSAnU1VCRk9STScgJiZcbiAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudC5pZCAhPT0gdXBkYXRlZFN1YkZvcm0uZm9ybUlkXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBIYW5kbGUgbXVsdGlwbGUgc3ViZm9ybXMgbG9naWMgaGVyZSBpZiBuZWVkZWRcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgZWxlbWVudC5lbnRpdHlUeXBlID09PSAnUVVFU1RJT04nICYmXG4gICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQuY2hpbGRMb2dpY3NcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHVwZGF0ZSBjaGlsZCBsb2dpY3NcbiAgICAgICAgICAgIC8vIGVsZW1lbnQuZWxlbWVudC5jaGlsZExvZ2ljcy5mb3JFYWNoKChsb2dpYzogYW55KSA9PiB7XG4gICAgICAgICAgICAvLyAgIGlmIChsb2dpYy5zaG93TG9naWMpIHtcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnVwZGF0ZVN1YkZvcm0obG9naWMucm93cywgdXBkYXRlZFN1YkZvcm0pO1xuICAgICAgICAgICAgLy8gICB9XG4gICAgICAgICAgICAvLyB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cblxuIGV4dHJhY3RHcm91cGVkV2ViaG9va0RhdGEod2ViaG9va3M6IGFueVtdKToge1xuICBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHBhdGhWYXJpYWJsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHJlcXVlc3RCb2RpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59IHtcbiAgY29uc3QgcmVzdWx0OiB7XG4gICAgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgcGF0aFZhcmlhYmxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICByZXF1ZXN0Qm9kaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICB9ID0ge1xuICAgIGhlYWRlcnM6IHt9LFxuICAgIHBhcmFtczoge30sXG4gICAgcGF0aFZhcmlhYmxlczoge30sXG4gICAgcmVxdWVzdEJvZGllczoge31cbiAgfTtcblxuICBmb3IgKGNvbnN0IHdlYmhvb2sgb2Ygd2ViaG9va3MgPz8gW10pIHtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygd2ViaG9vaz8uaGVhZGVycyA/PyBbXSkge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlRnJvbVN0b3JhZ2UoaXRlbS52YWx1ZVNvdXJjZSwgaXRlbS5rZXlOYW1lKTtcbiAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICByZXN1bHQuaGVhZGVyc1tpdGVtLmtleU5hbWVdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHdlYmhvb2s/LnBhcmFtcyA/PyBbXSkge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlRnJvbVN0b3JhZ2UoaXRlbS52YWx1ZVNvdXJjZSwgaXRlbS5rZXlOYW1lKTtcbiAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICByZXN1bHQucGFyYW1zW2l0ZW0ua2V5TmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygd2ViaG9vaz8ucGF0aFZhcmlhYmxlcyA/PyBbXSkge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlRnJvbVN0b3JhZ2UoaXRlbS52YWx1ZVNvdXJjZSwgaXRlbS5rZXlOYW1lKTtcbiAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICByZXN1bHQucGF0aFZhcmlhYmxlc1tpdGVtLmtleU5hbWVdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHdlYmhvb2s/LnJlcXVlc3RCb2RpZXMgPz8gW10pIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZUZyb21TdG9yYWdlKGl0ZW0udmFsdWVTb3VyY2UsIGl0ZW0ua2V5TmFtZSk7XG4gICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgcmVzdWx0LnJlcXVlc3RCb2RpZXNbaXRlbS5rZXlOYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cblxuZ2V0VmFsdWVGcm9tU3RvcmFnZShzb3VyY2U6ICdMT0NBTF9TVE9SQUdFJyB8ICdTRVNTSU9OX1NUT1JBR0UnLCBrZXk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuXG4gIGlmIChzb3VyY2UgPT09ICdMT0NBTF9TVE9SQUdFJykgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gIGlmIChzb3VyY2UgPT09ICdTRVNTSU9OX1NUT1JBR0UnKSByZXR1cm4gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICByZXR1cm4gbnVsbDtcbn1cblxuXG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJvdXRlci1jb250YWluZXJcIj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTG9hZGluZ1BhZ2VzXCI+XG4gICAgPG5neC1za2VsZXRvbi1sb2FkZXIgY291bnQ9XCI1XCI+PC9uZ3gtc2tlbGV0b24tbG9hZGVyPlxuPC9uZy1jb250YWluZXI+XG5cbiAgPGRpdiBjbGFzcz1cImhlYWQgY29udGFpbmVyXCIgKm5nSWY9XCIhc2tpcE1hcmdpblwiPlxuICAgIDxsaWItaGVhZGVyIFtuYW1lXT1cIm5hbWVcIiBbc2tpcE1hcmdpbl09XCJza2lwTWFyZ2luXCI+PC9saWItaGVhZGVyPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImJvZHlcIiBbbmdDbGFzc109XCJ7ICdza2lwLW1hcmdpbic6IHNraXBNYXJnaW4sY29udGFpbmVyOiAhc2tpcE1hcmdpbn1cIj5cblxuICAgIDxsaWItc3VibWlzc2lvbi1jb250YWluZXIgW3BhcmVudFF1ZXN0aW9uQW5zd2Vyc109XCJwYXJlbnRRdWVzdGlvbkFuc3dlcnNcIlxuICAgICpuZ0lmPVwicGFyZW50UXVlc3Rpb25BbnN3ZXJzXCI+PC9saWItc3VibWlzc2lvbi1jb250YWluZXI+XG5cbiAgICA8bGliLW5hdmlnYXRpb24tdGFic1xuICAgICAgKm5nSWY9XCJuYXZpZ2F0aW9uID09ICdUQUInXCJcbiAgICAgIFtza2lwTWFyZ2luXT1cInNraXBNYXJnaW5cIlxuICAgICAgW3NraXBWYWxpZGF0aW9uXT1cInNraXBWYWxpZGF0aW9uXCJcbiAgICAgIFtwYWdlc109XCJwYWdlc1wiXG4gICAgICBbY3VycmVudFBhZ2VJbmRleF09XCJjdXJyZW50UGFnZUluZGV4XCJcbiAgICAgIChwYWdlQ2hhbmdlZCk9XCJzZXRDdXJyZW50UGFnZSgkZXZlbnQpXCJcbiAgICAgIChzdWJtaXRFbWl0KT1cInN1Ym1pdEZvcm0oKVwiXG4gICAgICBbcGFnZURldGFpbHNdPVwicGFnZURldGFpbHNcIlxuICAgICAgW2VsaWdpYmxlRm9yU3VibWlzc2lvbl09XCJlbGlnaWJsZUZvclN1Ym1pc3Npb25cIlxuICAgICAgW2VkaXRdPVwiZWRpdFwiXG4gICAgICBbYWNjZXB0ZWRMYW5ndWFnZV0gPSBcImFjY2VwdGVkTGFuZ3VhZ2VcIlxuICAgICAgW2lzQWN0aW9uVHJpZ2dlcmVkXT1cImlzQWN0aW9uVHJpZ2dlcmVkXCJcbiAgICAgIFtwcmltYXJ5Q29sb3JdPVwicHJpbWFyeUNvbG9yXCJcbiAgICAgIFtzZWNvbmRhcnlDb2xvcl09XCJzZWNvbmRhcnlDb2xvclwiXG4gICAgICBbbWFya0FsbFF1ZXN0aW9uc0FzUmVxdWlyZWRdPVwibWFya0FsbFF1ZXN0aW9uc0FzUmVxdWlyZWRcIlxuICAgICAgW3N1Ym1pc3Npb25JblByb2dyZXNzXT1cInN1Ym1pc3Npb25JblByb2dyZXNzXCJcbiAgICAgIChzdWJGb3JtQ2hhbmdlKT1cInVwZGF0ZVN1YkZvcm1XaXRoU3VibWlzc2lvbnMoJGV2ZW50KVwiXG4gICAgICAocm93U2V0SW5kZXgpPVwibG9hZE1vcmVEYXRhKCRldmVudClcIlxuICAgID48L2xpYi1uYXZpZ2F0aW9uLXRhYnM+XG4gICAgPGxpYi1uZXh0LXByZXYtbmF2aWdhdGlvblxuICAgICAgKm5nSWY9XCJuYXZpZ2F0aW9uID09ICdORVhUX0FORF9QUkVWSU9VU19CVVRUT04nXCJcbiAgICAgIFtza2lwTWFyZ2luXT1cInNraXBNYXJnaW5cIlxuICAgICAgW2N1cnJlbnRQYWdlSW5kZXhdPVwiY3VycmVudFBhZ2VJbmRleFwiXG4gICAgICBbcGFnZURldGFpbHNdPVwicGFnZURldGFpbHNcIlxuICAgICAgKHJvd1NldEluZGV4KT1cImxvYWRNb3JlRGF0YSgkZXZlbnQpXCJcbiAgICAgIFtwYWdlc109XCJwYWdlc1wiXG4gICAgICBbcHJldmlvdXNQYWdlXT1cInByZXZpb3VzUGFnZVwiXG4gICAgICBbaXNBY3Rpb25UcmlnZ2VyZWRdPVwiaXNBY3Rpb25UcmlnZ2VyZWRcIlxuICAgICAgW2N1cnJlbnRQYWdlXT1cImN1cnJlbnRQYWdlXCJcbiAgICAgIFtwcmltYXJ5Q29sb3JdPVwicHJpbWFyeUNvbG9yXCJcbiAgICAgIFtzZWNvbmRhcnlDb2xvcl09XCJzZWNvbmRhcnlDb2xvclwiXG4gICAgICBbbmV4dFBhZ2VdPVwibmV4dFBhZ2VcIlxuICAgICAgKG5hdmlnYXRlTmV4dCk9XCJuYXZpZ2F0ZVRvTmV4dFBhZ2UoKVwiXG4gICAgICAobmF2aWdhdGVQcmV2aW91cyk9XCJuYXZpZ2F0ZVRvUHJldmlvdXNQYWdlKClcIlxuICAgICAgW2FjY2VwdGVkTGFuZ3VhZ2VdID0gXCJhY2NlcHRlZExhbmd1YWdlXCJcbiAgICAgIChzdWJtaXRFbWl0KT1cInN1Ym1pdEZvcm0oKVwiXG4gICAgICBbZWRpdF09XCJlZGl0XCJcbiAgICAgIFtlbGlnaWJsZUZvclN1Ym1pc3Npb25dPVwiZWxpZ2libGVGb3JTdWJtaXNzaW9uXCJcbiAgICAgIFtzdWJtaXNzaW9uSW5Qcm9ncmVzc109XCJzdWJtaXNzaW9uSW5Qcm9ncmVzc1wiXG4gICAgICAoc3ViRm9ybUNoYW5nZSk9XCJ1cGRhdGVTdWJGb3JtV2l0aFN1Ym1pc3Npb25zKCRldmVudClcIlxuICAgID48L2xpYi1uZXh0LXByZXYtbmF2aWdhdGlvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
1337
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VibWl0LWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybS1zdWJtaXNzaW9uL3NyYy9mb3JtLXN1Ym1pc3Npb24vc3VibWl0LWZvcm0vc3VibWl0LWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybS1zdWJtaXNzaW9uL3NyYy9mb3JtLXN1Ym1pc3Npb24vc3VibWl0LWZvcm0vc3VibWl0LWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxLQUFLLE1BQU0sTUFBTSwrQkFBK0IsQ0FBQztBQVF4RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQU12RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQStDcEYsTUFBTSxPQUFPLG1CQUFtQjtJQTJFOUIsWUFDVSxXQUF3QixFQUN4QixNQUFxQixFQUNyQixNQUFjLEVBQ2QsV0FBd0IsRUFDeEIsZ0JBQWtDLEVBQ2xDLGlCQUFvQyxFQUNwQyxpQkFBb0MsRUFDcEMsY0FBcUMsRUFDckMscUJBQTRDLEVBQzVDLGdCQUEyQyxFQUMzQyxnQkFBeUMsRUFDMUMsTUFBaUI7UUFYaEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FB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bWFBWW5CLHVCQUF1QixxRUNyRnBDLCt5RUEwREE7OzRGRGVhLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxpQkFBaUI7NmJBTWxCLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDSSxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBRTZCLEtBQUs7c0JBQXhDLFNBQVM7dUJBQUMsdUJBQXVCO2dCQUN6QixpQkFBaUI7c0JBQXpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mb3JtLnNlcnZpY2UnO1xuaW1wb3J0ICogYXMgbWFwcGVyIGZyb20gJy4uLy4uL3NlcnZpY2VzL21hcHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IFB1YmxpY0Zvcm0gfSBmcm9tICcuLi8uLi9tb2RlbHMvcHVibGljRm9ybS5tb2RlbCc7XG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVjYXB0Y2hhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlY2FwdGNoYS5zZXJ2aWNlJztcbmltcG9ydCB7IFZhbGlkYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdmFsaWRhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEVsZW1lbnRUcmFja2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VsZW1lbnQtdHJhY2tlci5zZXJ2aWNlJztcbmltcG9ydCB7IE5hdmlnYXRpb25UYWJzQ29tcG9uZW50IH0gZnJvbSAnLi4vbmF2aWdhdGlvbi10YWJzL25hdmlnYXRpb24tdGFicy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9ybVZhbGlkYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZm9ybS12YWxpZGF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWdncmVnYXRpb25GdW5jdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hZ2dyZWdhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBFbWl0dGVyRFRPIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2VtaXR0ZXJzLm1vZGVsJztcbmltcG9ydCB7IFNjb3JlQ2FsY3VsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2NvcmUuc2VydmljZSc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgU2F2ZURyYWZ0TW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9zYXZlLWFzLWRyYWZ0L3NhdmVEcmFmdE1vZGFsQ29tcG9uZW50ICc7XG5cbmludGVyZmFjZSBBbnN3ZXIge1xuICBxdWVzdGlvbklkOiBzdHJpbmc7XG4gIGFuc3dlcjogYW55O1xuICBhbnN3ZXJJZD86IHN0cmluZztcbiAgZGVsZXRlRmlsZXM/OiBzdHJpbmdbXTtcbiAgZmllbGRzPzogYW55O1xufVxuXG5pbnRlcmZhY2UgU3VibWlzc2lvbiB7XG4gIHN1Ym1pc3Npb25JZD86IHN0cmluZztcbiAgYW5zd2VyczogQW5zd2VyW107XG59XG5cbmludGVyZmFjZSBGb3JtIHtcbiAgZm9ybUlkOiBzdHJpbmc7XG4gIGRlbGV0ZWQ/OiBib29sZWFuO1xuICBkZWxldGVkU3VibWlzc2lvbnM6IGFueVtdO1xuICBzdWJtaXNzaW9uczogU3VibWlzc2lvbltdO1xuICBjb3BpZWRGb3Jtczogc3RyaW5nW107XG4gIHNjb3JlPzpudW1iZXI7XG4gIG1heGltdW1Qb3NzaWJsZVNjb3JlPzpudW1iZXI7XG59XG5cbmludGVyZmFjZSBDb3B5Rm9ybXN7XG4gIGlkOiBzdHJpbmcsXG4gIHRpdGxlOiBzdHJpbmcsXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gIHBhcmVudFN1YmZvcm06IHN0cmluZyxcbiAgcXVlc3Rpb25SZWxhdGlvbjogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuaW50ZXJmYWNlIFF1ZXN0aW9uQW5zd2Vyc1dyYXBwZXIge1xuICBwYXJlbnRJZDogc3RyaW5nO1xuICBhbnN3ZXJzOiBBbnN3ZXJbXTtcbiAgZm9ybXM6IEZvcm1bXTtcbiAgY29weVN1YkZvcm1zOkNvcHlGb3Jtc1tdO1xuICBzY29yZT86bnVtYmVyO1xuICBtYXhpbXVtUG9zc2libGVTY29yZT86bnVtYmVyO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItc3VibWl0LWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vc3VibWl0LWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zdWJtaXQtZm9ybS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBTdWJtaXRGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBxdWVzdGlvbjogUHVibGljRm9ybSB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBtb2R1bGVOYW1lOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgZWRpdDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzdWJtaXNzaW9uSWQ6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBhY2NlcHRlZExhbmd1YWdlOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgc2tpcE1hcmdpbjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBza2lwVmFsaWRhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBAT3V0cHV0KCkgc3VibWl0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgYXBpQ2FsbGVkOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBjdXJyZW50UGFnZUluZGV4Q2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gIEBWaWV3Q2hpbGQoTmF2aWdhdGlvblRhYnNDb21wb25lbnQpIGNoaWxkITogTmF2aWdhdGlvblRhYnNDb21wb25lbnQ7XG4gIEBJbnB1dCgpIGlzQWN0aW9uVHJpZ2dlcmVkOiBib29sZWFuID0gZmFsc2U7XG4gICBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgbmFtZTogc3RyaW5nID0gJyc7XG4gIHNhdmVBdXRvbWF0aWNhbGx5OiBib29sZWFuID0gZmFsc2U7XG4gIHNhdmVJbnRlcnZhbDogbnVtYmVyID0gMDtcbiAgY3VzdG9taXplRm9udDogYm9vbGVhbiA9IGZhbHNlO1xuICBmb250RmFtaWx5OiBzdHJpbmcgPSAnJztcbiAgZm9udFNpemU6IG51bWJlciA9IDA7XG4gIHZhbGlkYXRpb25Ta2lwOiBib29sZWFuID0gZmFsc2U7XG4gIGVuYWJsZURhdGFFeHBvcnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZmlsZUZvcm1hdHM6IHN0cmluZ1tdID0gW107XG4gIGVuYWJsZVF1ZXN0aW9uTnVtYmVyaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHF1ZXN0aW9uTnVtYmVyaW5nOiBzdHJpbmcgPSAnJztcbiAgZW5hYmxlR29vZ2xlUmVjYXB0Y2hhOiBib29sZWFuID0gZmFsc2U7XG4gIGdvb2dsZVJlY2FwdGNoYUtleTogc3RyaW5nID0gJyc7XG4gIGdvb2dsZVJlY2FwdGNoYVNlY3JldDogc3RyaW5nID0gJyc7XG4gIG5hdmlnYXRpb246IHN0cmluZyA9ICcnO1xuICBtYXJrQWxsUXVlc3Rpb25zQXNSZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwYWdlczogYW55ID0gW107XG4gIGN1cnJlbnRQYWdlSW5kZXg6IG51bWJlciA9IDA7XG4gIHByZXZpb3VzUGFnZTogYW55ID0ge307XG4gIGN1cnJlbnRQYWdlOiBhbnkgPSB7fTtcbiAgbmV4dFBhZ2U6IGFueSA9IHt9O1xuICBsYXN0VGFiOiBib29sZWFuID0gZmFsc2U7XG4gIHF1ZXN0aW9uQW5zd2VyczogUXVlc3Rpb25BbnN3ZXJzV3JhcHBlciA9IHtcbiAgICBwYXJlbnRJZDogJycsXG4gICAgYW5zd2VyczogW10sXG4gICAgZm9ybXM6IFtdLFxuICAgIGNvcHlTdWJGb3JtczpbXVxuICB9O1xuICBmaWxlczogeyBxdWVzdGlvbklkOiBzdHJpbmc7IGZpbGU6IGFueSB9W10gPSBbXTtcbiAgcGFyZW50UXVlc3Rpb25zOiBhbnk7XG4gIHN1Ym1pc3Npb246IGFueSA9IHt9O1xuICBwYXJlbnRRdWVzdGlvbkFuc3dlcnM6IGFueTtcbiAgcGFyZW50U3VibWlzc2lvbklkOiBzdHJpbmcgPSAnJztcbiAgc3VibWlzc2lvbkluUHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmVjYXB0Y2hhVG9rZW46IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIGlzUmVmcmVzaGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGludGVydmFsSWQ6IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPiB8IG51bGwgPSBudWxsO1xuICBwYWdlRGV0YWlsczogYW55ID0gW107XG4gIHBhZ2VOdW1iZXI6IG51bWJlciA9IDE7XG4gIHJvd1NldDogbnVtYmVyID0gMDtcbiAgcm93U2V0Q291bnQ6IFtudW1iZXJdID0gWzBdO1xuICByZXRyeUNvdW50OiBudW1iZXIgPSAwO1xuICAgbWF4UmV0cmllczpudW1iZXIgPSA1O1xuXG4gIGVsaWdpYmxlRm9yU3VibWlzc2lvbjogeyBzdGF0dXM6IGJvb2xlYW47IG1lc3NhZ2U6IHN0cmluZyB9ID0ge1xuICAgIHN0YXR1czogdHJ1ZSxcbiAgICBtZXNzYWdlOiAnJyxcbiAgfTtcbiAgd2ViaG9va1BheWxvYWRBcnJheTogYW55W10gPSBbXTtcbiAgaW5WYWxpZFF1ZXN0aW9uczogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gIHZpc2l0ZWRSb3dzOiBNYXA8bnVtYmVyLCBudW1iZXI+ID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcbiAgYWxsRWxlbWVudElkczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBkZWJvdW5jZVRpbWVyOiBhbnk7XG4gIHByaW1hcnlDb2xvcjogc3RyaW5nID0gJyc7XG4gIHNlY29uZGFyeUNvbG9yOiBzdHJpbmcgPSAnJztcbiAgICBpc0xvYWRpbmdQYWdlczogYm9vbGVhbiA9IGZhbHNlO1xuICBjb3B5U3ViZm9ybXM6Q29weUZvcm1zIFtdID0gW107XG4gIGVtaXR0ZXJzOkVtaXR0ZXJEVE9bXT1bXTtcbiAgbWF4UG9zc2libGVTY29yZSE6bnVtYmVyO1xuICBzdW1PZkZpbmRpbmdzITpudW1iZXI7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZm9ybVNlcnZpY2U6IEZvcm1TZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9hc3RyOiBUb2FzdHJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWNhcHRjaGFTZXJ2aWNlOiBSZWNhcHRjaGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgdmFsaWRhdGlvblNlcnZpY2U6IFZhbGlkYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZWxlbWVudFRyYWNrZXI6IEVsZW1lbnRUcmFja2VyU2VydmljZSxcbiAgICBwcml2YXRlIGZvcm1WYWxpZGF0aW9uU2VydmljZTogRm9ybVZhbGlkYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgYWdncmVnYXRlU2VydmljZTpBZ2dyZWdhdGlvbkZ1bmN0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHNjb3JlQ2FsY1NlcnZpY2U6IFNjb3JlQ2FsY3VsYXRpb25TZXJ2aWNlLFxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZ1xuICApIHtcbiAgICBjb25zdCBuYXZpZ2F0aW9uID0gdGhpcy5yb3V0ZXIuZ2V0Q3VycmVudE5hdmlnYXRpb24oKTtcbiAgICB0aGlzLnN1Ym1pc3Npb24gPSBuYXZpZ2F0aW9uPy5leHRyYXMuc3RhdGU/Llsnc3VibWlzc2lvbiddO1xuICAgIHRoaXMucGFyZW50U3VibWlzc2lvbklkID0gdGhpcy5zdWJtaXNzaW9uPy5pZDtcbiAgICB0aGlzLnBhcmVudFF1ZXN0aW9uQW5zd2VycyA9IHRoaXMuc3VibWlzc2lvbj8ucXVlc3Rpb25BbnN3ZXJzO1xuICAgIHRoaXMucGFyZW50UXVlc3Rpb25zID0gbmF2aWdhdGlvbj8uZXh0cmFzLnN0YXRlPy5bJ3BhcmVudFF1ZXN0aW9ucyddO1xuICAgIHRoaXMuZGF0YVNlcnZpY2Uuc2V0UGFyZW50UXVlc3Rpb25zKHRoaXMucGFyZW50UXVlc3Rpb25zKTtcbiAgfVxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgIHRoaXMudmlzaXRlZFJvd3MuY2xlYXIoKTtcbiAgICB0aGlzLnJlY2FwdGNoYVNlcnZpY2UucmVtb3ZlUmVjYXB0Y2hhU2NyaXB0KCk7XG4gICAgaWYgKHRoaXMuaW50ZXJ2YWxJZCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsSWQpO1xuICAgICAgdGhpcy5pbnRlcnZhbElkID0gbnVsbDtcbiAgICAgIHRoaXMuaXNSZWZyZXNoaW5nID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuYWdncmVnYXRlU2VydmljZS5jbGVhckFsbCgpO1xuICAgIHRoaXMucmVjYXB0Y2hhU2VydmljZS5yZW1vdmVSZWNhcHRjaGFTY3JpcHQoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snYWNjZXB0ZWRMYW5ndWFnZSddKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSAwO1xuICAgICAgdGhpcy5hY2NlcHRlZExhbmd1YWdlID0gY2hhbmdlc1snYWNjZXB0ZWRMYW5ndWFnZSddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGlmICghdGhpcy5lZGl0KSB0aGlzLmdldEZvcm1EYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuZWRpdCAmJiB0aGlzLnN1Ym1pc3Npb25JZCkge1xuICAgICAgdGhpcy5nZXRTdWJtaXR0ZWRGb3JtRGF0YSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0aGlzLmdldEZvcm1EYXRhKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5hYmxlR29vZ2xlUmVjYXB0Y2hhKSB7XG5cbiAgICAgIHRoaXMucmVjYXB0Y2hhSW5pdGlhbGl6ZWQoKTtcbiAgICB9XG5cbiAgfVxuXG5cbiAgYXN5bmMgcmVjYXB0Y2hhSW5pdGlhbGl6ZWQoKSB7XG4gICBhd2FpdCB0aGlzLnJlY2FwdGNoYVNlcnZpY2UuaW5pdGlhbGl6ZSgpO1xudGhpcy5yZWNhcHRjaGFTZXJ2aWNlLnJlbmRlcignY2FwdGNoYS1jb250YWluZXInLCAodG9rZW4pID0+IHtcblxufSk7XG4gIH1cblxuYXN5bmMgZ2V0VG9rZW4oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMucmVjYXB0Y2hhU2VydmljZS5pbml0aWFsaXplKCk7XG5cbiAgICAgIC8vIENoZWNrIGlmIENBUFRDSEEgd2FzIHJlbmRlcmVkXG4gICAgICBpZiAoIXRoaXMucmVjYXB0Y2hhU2VydmljZS5pc1JlbmRlcmVkKCkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdyZUNBUFRDSEEgbm90IHJlbmRlcmVkIHlldC4nKTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoJycpO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBzb2x2ZWQsIHJldHVybiB0aGUgdG9rZW5cbiAgICAgIGlmICh0aGlzLnJlY2FwdGNoYVNlcnZpY2UuaXNSZXNvbHZlZCgpKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5yZWNhcHRjaGFTZXJ2aWNlLmdldFJlc3BvbnNlKCk7XG5cbiAgICAgICAgcmV0dXJuIHJlc29sdmUodG9rZW4pO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBleHBpcmVkIG9yIHVuc29sdmVkLCByZXR1cm4gZW1wdHkgc3RyaW5nXG4gICAgICBjb25zb2xlLndhcm4oJ3JlQ0FQVENIQSBub3QgcmVzb2x2ZWQgb3IgZXhwaXJlZC4nKTtcbiAgICAgIHJldHVybiByZXNvbHZlKCcnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ3JlQ0FQVENIQSBpbml0aWFsaXphdGlvbiBmYWlsZWQ6JywgZXJyKTtcbiAgICAgIHJldHVybiByZXNvbHZlKCcnKTtcbiAgICB9XG4gIH0pO1xufVxuXG4gIGxvYWRGb250KGZvbnROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBmb250UGF0aCA9IGBhc3NldHMvZm9udHMvJHtmb250TmFtZX0ud29mZjJgOyAvLyBBZGp1c3QgZXh0ZW5zaW9uIGFzIHBlciB5b3VyIGZvbnQgZmlsZVxuICAgIGNvbnN0IHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICBzdHlsZS5pbm5lckhUTUwgPSBgXG4gICAgICBAZm9udC1mYWNlIHtcbiAgICAgICAgZm9udC1mYW1pbHk6ICcke2ZvbnROYW1lfSc7XG4gICAgICAgIHNyYzogdXJsKCcke2ZvbnRQYXRofScpIGZvcm1hdCgnd29mZjInKTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgICAgfVxuICAgICAgYm9keSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnJHtmb250TmFtZX0nLCBzYW5zLXNlcmlmO1xuICAgICAgfVxuICAgIGA7XG4gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gIH1cblxuICBnZXRGb3JtRGF0YSgpIHtcbiAgICB0aGlzLmlzTG9hZGluZ1BhZ2VzID0gdHJ1ZTtcbiAgICB0aGlzLmZvcm1TZXJ2aWNlXG4gICAgICAuZ2V0UXVlc3Rpb25zKHRoaXMubW9kdWxlTmFtZSwgMSwwLHRydWUpXG4gICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nUGFnZXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lbmFibGVHb29nbGVSZWNhcHRjaGEgPVxuICAgICAgICAgIHJlc3BvbnNlLnJlc3VsdC5tb2R1bGVDb25maWd1cmF0aW9uPy5lbmFibGVHb29nbGVSZWNhcHRjaGE7XG4gICAgICAgIHRoaXMucXVlc3Rpb24gPSBtYXBwZXIubWFwUHVibGljRm9ybVRvTW9kZWwocmVzcG9uc2UpO1xuICAgICAgICB0aGlzLmVtaXR0ZXJzID0gdGhpcy5xdWVzdGlvbi5lbWl0dGVycyB8fCBbXTtcbiAgICAgICAgdGhpcy5hc3NpZ25RdWVzdGlvblByb3BlcnRpZXModGhpcy5xdWVzdGlvbik7XG4gICAgICAgIHRoaXMuc2V0VXBGb250RmFtaWx5KHJlc3BvbnNlKTtcbiAgICAgICAgdGhpcy5wcmltYXJ5Q29sb3IgPSByZXNwb25zZS5yZXN1bHQucHJpbWFyeUNvbG9yO1xuICAgICAgICB0aGlzLnNlY29uZGFyeUNvbG9yID0gcmVzcG9uc2UucmVzdWx0LnNlY29uZGFyeUNvbG9yO1xuICAgICAgICBpZiAodGhpcy5lbmFibGVHb29nbGVSZWNhcHRjaGEpIHRoaXMucmVjYXB0Y2hhSW5pdGlhbGl6ZWQoKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlPy5yZXN1bHQ/LnBhZ2VEZXRhaWxzKSB7XG4gICAgICAgICAgdGhpcy5wYWdlRGV0YWlscyA9IHJlc3BvbnNlLnJlc3VsdC5wYWdlRGV0YWlscztcbiAgICAgICAgICB0aGlzLm5leHRQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1sxXTtcbiAgICAgICAgfVxuICAgICAgICAgIHRoaXMud2ViaG9va1BheWxvYWRBcnJheVxuICAgICAgICAgIHRoaXMud2ViaG9va1BheWxvYWRBcnJheSA9IHJlc3BvbnNlPy5yZXN1bHQ/LndlYmhvb2tzPy5tYXAoKHc6YW55KSA9PiAoe1xuICAgICAgICAgIGlkOiB3LmlkLFxuICAgICAgICAgICAuLi50aGlzLmV4dHJhY3RHcm91cGVkV2ViaG9va0RhdGEoW3ddKVxuICAgICAgICAgICAgfSkpO1xuXG5cbiAgICAgICAgdGhpcy5yb3dTZXRDb3VudFswXSA9IHJlc3BvbnNlLnJlc3VsdC50b3RhbE51bWJlclJvdztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnBhZ2VEZXRhaWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLnBhZ2VzW2ldKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2VzW2ldID0gW107XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tTdWJtaXNzaW9uRWxpZ2liaWxpdHkoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZ2V0U3VibWl0dGVkRm9ybURhdGEoKSB7XG4gICAgdGhpcy5mb3JtU2VydmljZVxuICAgICAgLmdldFN1Ym1pdHRlZEZvcm0odGhpcy5tb2R1bGVOYW1lLCB0aGlzLnN1Ym1pc3Npb25JZClcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMuZW5hYmxlR29vZ2xlUmVjYXB0Y2hhID1cbiAgICAgICAgICByZXNwb25zZS5yZXN1bHQubW9kdWxlQ29uZmlndXJhdGlvbi5lbmFibGVHb29nbGVSZWNhcHRjaGE7XG4gICAgICAgIHRoaXMucXVlc3Rpb24gPSBtYXBwZXIubWFwUHVibGljRm9ybVRvTW9kZWwocmVzcG9uc2UpO1xuICAgICAgICB0aGlzLmFzc2lnblF1ZXN0aW9uUHJvcGVydGllcyh0aGlzLnF1ZXN0aW9uKTtcbiAgICAgICAgdGhpcy5wcmltYXJ5Q29sb3IgPSByZXNwb25zZS5yZXN1bHQucHJpbWFyeUNvbG9yO1xuICAgICAgICB0aGlzLnNlY29uZGFyeUNvbG9yID0gcmVzcG9uc2UucmVzdWx0LnNlY29uZGFyeUNvbG9yO1xuICAgICAgICB0aGlzLmVtaXR0ZXJzID0gdGhpcy5xdWVzdGlvbi5lbWl0dGVycyB8fCBbXTtcbiAgICAgICAgaWYgKHJlc3BvbnNlPy5yZXN1bHQ/LnBhZ2VEZXRhaWxzKSB7XG4gICAgICAgICAgdGhpcy5wYWdlRGV0YWlscyA9IHJlc3BvbnNlLnJlc3VsdC5wYWdlRGV0YWlscztcbiAgICAgICAgICB0aGlzLm5leHRQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1sxXTtcbiAgICAgICAgfVxuICAgICAgICAgIHRoaXMud2ViaG9va1BheWxvYWRBcnJheVxuICAgICAgICAgIHRoaXMud2ViaG9va1BheWxvYWRBcnJheSA9IHJlc3BvbnNlPy5yZXN1bHQ/LndlYmhvb2tzPy5tYXAoKHc6YW55KSA9PiAoe1xuICAgICAgICAgIGlkOiB3LmlkLFxuICAgICAgICAgICAuLi50aGlzLmV4dHJhY3RHcm91cGVkV2ViaG9va0RhdGEoW3ddKVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLnJvd1NldENvdW50WzBdID0gcmVzcG9uc2UucmVzdWx0LnRvdGFsTnVtYmVyUm93O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGFnZURldGFpbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoIXRoaXMucGFnZXNbaV0pIHtcbiAgICAgICAgICAgIHRoaXMucGFnZXNbaV0gPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRVcEZvbnRGYW1pbHkocmVzcG9uc2UpO1xuICAgICAgICBpZiAodGhpcy5lbmFibGVHb29nbGVSZWNhcHRjaGEpIHtcbiAgICAgICAgdGhpcy5yZWNhcHRjaGFJbml0aWFsaXplZCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tTdWJtaXNzaW9uRWxpZ2liaWxpdHkoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgc2V0VXBGb250RmFtaWx5KHJlc3BvbnNlOiBhbnkpIHtcbiAgICAvL3NldCBmb250IGZhbWlseSBhbmQgZm9udCBzaXplXG4gICAgaWYgKHJlc3BvbnNlLnJlc3VsdD8ubW9kdWxlQ29uZmlndXJhdGlvbj8uY3VzdG9taXplRm9udCkge1xuICAgICAgdGhpcy5mb250RmFtaWx5ID0gcmVzcG9uc2UucmVzdWx0Lm1vZHVsZUNvbmZpZ3VyYXRpb24/LmZvbnRGYW1pbHk7XG4gICAgICB0aGlzLmZvbnRTaXplID0gcmVzcG9uc2UucmVzdWx0Lm1vZHVsZUNvbmZpZ3VyYXRpb24/LmZvbnRTaXplIHx8IDE4O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvbnRGYW1pbHkgPSAnUG9wcGlucyc7XG4gICAgICB0aGlzLmZvbnRTaXplID0gMTg7XG4gICAgfVxuICAgIHRoaXMubG9hZEZvbnQodGhpcy5mb250RmFtaWx5KTtcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAnLS1saWJyYXJ5LWZvbnQtZmFtaWx5JyxcbiAgICAgIHRoaXMuZm9udEZhbWlseVxuICAgICk7XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgJy0tbGlicmFyeS1mb250LXNpemUnLFxuICAgICAgdGhpcy5mb250U2l6ZSArICdweCdcbiAgICApO1xuICB9XG5cbiAgYXNzaWduUXVlc3Rpb25Qcm9wZXJ0aWVzKHF1ZXN0aW9uOiBQdWJsaWNGb3JtKSB7XG4gICAgdGhpcy5uYW1lID0gcXVlc3Rpb24ubmFtZTtcbiAgICB0aGlzLnBhZ2VzID0gcXVlc3Rpb24ucGFnZXM7XG4gICAgaWYgKHRoaXMucGFyZW50UXVlc3Rpb25zKSB7XG4gICAgICB0aGlzLnBhcmVudFF1ZXN0aW9uQW5zd2VycyA9IHF1ZXN0aW9uPy5xdWVzdGlvbkFuc3dlcnM7XG4gICAgICB0aGlzLnBhcmVudFN1Ym1pc3Npb25JZCA9IHF1ZXN0aW9uPy5wYXJlbnRJZDtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZXNbMF07XG4gICAgdGhpcy5uZXh0UGFnZSA9IHRoaXMucGFnZXNbMV07XG4gICAgdGhpcy5zYXZlQXV0b21hdGljYWxseSA9IHF1ZXN0aW9uLmZvcm1Db25maWd1cmF0aW9uLnNhdmVBdXRvbWF0aWNhbGx5O1xuICAgIHRoaXMuc2F2ZUludGVydmFsID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uc2F2ZUludGVydmFsO1xuICAgIHRoaXMuY3VzdG9taXplRm9udCA9IHF1ZXN0aW9uLmZvcm1Db25maWd1cmF0aW9uLmN1c3RvbWl6ZUZvbnQ7XG4gICAgdGhpcy5mb250RmFtaWx5ID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZm9udEZhbWlseTtcbiAgICB0aGlzLmZvbnRTaXplID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZm9udFNpemU7XG4gICAgdGhpcy5lbmFibGVEYXRhRXhwb3J0ID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZW5hYmxlRGF0YUV4cG9ydDtcbiAgICB0aGlzLmZpbGVGb3JtYXRzID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZmlsZUZvcm1hdHM7XG4gICAgdGhpcy5lbmFibGVRdWVzdGlvbk51bWJlcmluZyA9XG4gICAgICBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5lbmFibGVRdWVzdGlvbk51bWJlcmluZztcbiAgICB0aGlzLnF1ZXN0aW9uTnVtYmVyaW5nID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24ucXVlc3Rpb25OdW1iZXJpbmc7XG4gICAgdGhpcy5lbmFibGVHb29nbGVSZWNhcHRjaGEgPVxuICAgICAgcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZW5hYmxlR29vZ2xlUmVjYXB0Y2hhO1xuICAgIHRoaXMuZ29vZ2xlUmVjYXB0Y2hhS2V5ID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZ29vZ2xlUmVjYXB0Y2hhS2V5O1xuICAgIHRoaXMuZ29vZ2xlUmVjYXB0Y2hhU2VjcmV0ID1cbiAgICAgIHF1ZXN0aW9uLmZvcm1Db25maWd1cmF0aW9uLmdvb2dsZVJlY2FwdGNoYVNlY3JldDtcbiAgICB0aGlzLm5hdmlnYXRpb24gPSBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5uYXZpZ2F0aW9uO1xuICAgIHRoaXMubWFya0FsbFF1ZXN0aW9uc0FzUmVxdWlyZWQgPVxuICAgICAgcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24ubWFya0FsbFF1ZXN0aW9uc0FzUmVxdWlyZWQ7XG4gICAgdGhpcy5hcGlDYWxsZWQuZW1pdCh0cnVlKTtcbiAgfVxuXG4gIG5hdmlnYXRlVG9OZXh0UGFnZSgpIHtcbiAgIGlmKCF0aGlzLmlzTG9hZGluZyl7XG4gICAgdGhpcy5pc0xvYWRpbmc9dHJ1ZTtcbiAgICBjb25zdCBuZXh0SW5kZXggPSB0aGlzLmN1cnJlbnRQYWdlSW5kZXggKyAxO1xuICAgIGlmIChuZXh0SW5kZXggPCB0aGlzLnBhZ2VEZXRhaWxzLmxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMubWFya0FsbFF1ZXN0aW9uc0FzUmVxdWlyZWQpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFBhZ2VEYXRhID0gdGhpcy5wYWdlc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgICAgbGV0IHZhbGlkYXRpb25SZXNwb25zZT10cnVlO1xuICAgICAgICAgaWYoIXRoaXMudmFsaWRhdGlvblNraXApIHtcbiAgICAgICAgICAgIHZhbGlkYXRpb25SZXNwb25zZSA9IHRoaXMuZm9ybVZhbGlkYXRpb25TZXJ2aWNlLnZhbGlkYXRlUmVxdWlyZWRRdWVzdGlvbnMoY3VycmVudFBhZ2VEYXRhKS5pc1ZhbGlkO1xuICAgICAgICAgfVxuICAgICAgICBpZiAodmFsaWRhdGlvblJlc3BvbnNlICkge1xuICAgICAgICAgIHRoaXMucHJldmlvdXNQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgICAgIGlmKHRoaXMucGFnZXNbbmV4dEluZGV4XS5sZW5ndGggIT0gMCl7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlc1tuZXh0SW5kZXhdO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4PW5leHRJbmRleDtcbiAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHRoaXMuc2V0Q3VycmVudFBhZ2UobmV4dEluZGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5uZXh0UGFnZSA9IHRoaXMucGFnZURldGFpbHNbbmV4dEluZGV4ICsgMV07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucHJldmlvdXNQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgICBpZih0aGlzLnBhZ2VzW25leHRJbmRleF0ubGVuZ3RoICE9IDApe1xuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzW25leHRJbmRleF07XG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4PW5leHRJbmRleDtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgdGhpcy5zZXRDdXJyZW50UGFnZShuZXh0SW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubmV4dFBhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzW25leHRJbmRleCArIDFdO1xuICAgICAgfVxuICAgIH1cbiAgICAgdGhpcy5pc0xvYWRpbmc9ZmFsc2U7XG4gICAgICB0aGlzLmNoZWNrU3VibWlzc2lvbkVsaWdpYmlsaXR5KCk7XG4gIH1cbn1cblxuICBuYXZpZ2F0ZVRvUHJldmlvdXNQYWdlKCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlSW5kZXggPiAwKSB7XG4gICAgICBpZiAodGhpcy5tYXJrQWxsUXVlc3Rpb25zQXNSZXF1aXJlZCkge1xuICAgICAgICBjb25zdCBjdXJyZW50UGFnZURhdGEgPSB0aGlzLnBhZ2VzW3RoaXMuY3VycmVudFBhZ2VJbmRleF07XG4gICAgICAgIGxldCB2YWxpZGF0aW9uUmVzcG9uc2U9dHJ1ZTtcbiAgICAgICAgIGlmKCF0aGlzLnZhbGlkYXRpb25Ta2lwKSB7XG4gICAgICAgICAgICB2YWxpZGF0aW9uUmVzcG9uc2UgPSB0aGlzLmZvcm1WYWxpZGF0aW9uU2VydmljZS52YWxpZGF0ZVJlcXVpcmVkUXVlc3Rpb25zKGN1cnJlbnRQYWdlRGF0YSkuaXNWYWxpZDtcbiAgICAgICAgIH1cbiAgICAgICAgaWYgKHZhbGlkYXRpb25SZXNwb25zZSkge1xuICAgICAgICAgIHRoaXMubmV4dFBhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzW3RoaXMuY3VycmVudFBhZ2VJbmRleF07XG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4LS07XG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZXNbdGhpcy5jdXJyZW50UGFnZUluZGV4XTtcbiAgICAgICAgICB0aGlzLnByZXZpb3VzUGFnZSA9IHRoaXMucGFnZURldGFpbHNbdGhpcy5jdXJyZW50UGFnZUluZGV4IC0gMV07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubmV4dFBhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzW3RoaXMuY3VycmVudFBhZ2VJbmRleF07XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2VJbmRleC0tO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgICB0aGlzLnByZXZpb3VzUGFnZSA9IHRoaXMucGFnZURldGFpbHNbdGhpcy5jdXJyZW50UGFnZUluZGV4IC0gMV07XG4gICAgICB9XG4gICAgfVxuICAgICAgdGhpcy5jaGVja1N1Ym1pc3Npb25FbGlnaWJpbGl0eSgpO1xuICB9XG5cbiAgY2hlY2tTdWJtaXNzaW9uRWxpZ2liaWxpdHkoKTogdm9pZCB7XG4gICAgdGhpcy5lbGlnaWJsZUZvclN1Ym1pc3Npb24gPSB0aGlzLnZhbGlkYXRlQWxsRWxlbWVudExvYWRlZCgpO1xuICB9XG5cbiAgc2V0Q3VycmVudFBhZ2UoaW5kZXg6IG51bWJlcikge1xuICAgIGlmIChpbmRleCA8IHRoaXMucGFnZXMubGVuZ3RoKSB7XG4gICAgICBpZiAoIXRoaXMucGFnZXNbaW5kZXhdIHx8IHRoaXMucGFnZXNbaW5kZXhdLmxlbmd0aCAhPSAwKSB7XG4gICAgICAgICB0aGlzLmNoZWNrU3VibWlzc2lvbkVsaWdpYmlsaXR5KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5wYWdlTnVtYmVyID0gaW5kZXggKyAxO1xuICAgIGlmICh0aGlzLmVkaXQpIHtcbiAgICAgIHRoaXMuZm9ybVNlcnZpY2VcbiAgICAgICAgLmdldFN1Ym1pdHRlZEZvcm0oXG4gICAgICAgICAgdGhpcy5tb2R1bGVOYW1lLFxuICAgICAgICAgIHRoaXMuc3VibWlzc2lvbklkLFxuICAgICAgICAgIHRoaXMucGFnZU51bWJlcixcbiAgICAgICAgICB0aGlzLnJvd1NldFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAocmVzcG9uc2U/LnJlc3VsdD8ucGFnZXMpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZXNbaW5kZXhdID0gcmVzcG9uc2UucmVzdWx0LnBhZ2VzWzBdO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSBpbmRleDtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlc1tpbmRleF07XG4gICAgICAgICAgdGhpcy5yb3dTZXRDb3VudFtpbmRleF0gPSByZXNwb25zZS5yZXN1bHQudG90YWxOdW1iZXJSb3c7XG4gICAgICAgICAgICB0aGlzLmNoZWNrU3VibWlzc2lvbkVsaWdpYmlsaXR5KCk7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvcm1TZXJ2aWNlXG4gICAgICAgIC5nZXRRdWVzdGlvbnModGhpcy5tb2R1bGVOYW1lLCB0aGlzLnBhZ2VOdW1iZXIsIHRoaXMucm93U2V0LCB0cnVlKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlPy5yZXN1bHQ/LnBhZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2VzW2luZGV4XSA9IHJlc3BvbnNlLnJlc3VsdC5wYWdlc1swXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZXNbaW5kZXhdO1xuICAgICAgICAgIHRoaXMucm93U2V0Q291bnRbaW5kZXhdID0gcmVzcG9uc2UucmVzdWx0LnRvdGFsTnVtYmVyUm93O1xuICAgICAgICAgICAgdGhpcy5jaGVja1N1Ym1pc3Npb25FbGlnaWJpbGl0eSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tYXJrQWxsUXVlc3Rpb25zQXNSZXF1aXJlZCkge1xuICAgICAgY29uc3QgY3VycmVudFBhZ2VEYXRhID0gdGhpcy5wYWdlc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgbGV0IHZhbGlkYXRpb25SZXNwb25zZT10cnVlO1xuICAgICAgICAgaWYoIXRoaXMudmFsaWRhdGlvblNraXApIHtcbiAgICAgICAgICAgIHZhbGlkYXRpb25SZXNwb25zZSA9IHRoaXMuZm9ybVZhbGlkYXRpb25TZXJ2aWNlLnZhbGlkYXRlUmVxdWlyZWRRdWVzdGlvbnMoY3VycmVudFBhZ2VEYXRhKS5pc1ZhbGlkO1xuICAgICAgICAgfVxuICAgICAgaWYgKHZhbGlkYXRpb25SZXNwb25zZSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSBpbmRleDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jaGVja1N1Ym1pc3Npb25FbGlnaWJpbGl0eSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jaGVja1N1Ym1pc3Npb25FbGlnaWJpbGl0eSgpO1xuICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4ID0gaW5kZXg7XG4gICAgfVxuXG4gIH1cblxuICBsb2FkTW9yZURhdGEoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmKCF0aGlzLmlzTG9hZGluZykge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIGxldCByb3dDb3VudExpbWl0ID0gdGhpcy5yb3dTZXRDb3VudFtpbmRleF07XG4gICAgbGV0IGkgPSAwO1xuICAgIHRoaXMucGFnZXNbaW5kZXhdLnJvd3MuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgcm93LmdyaWQuZm9yRWFjaCgoZ3JpZEl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICBsZXQgcm93Q291bnQgPWkvMjA7XG4gICAgcm93Q291bnQgPSBNYXRoLmNlaWwocm93Q291bnQpO1xuXG4gaWYodGhpcy52aXNpdGVkUm93cy5oYXMoaW5kZXgpKSB7XG4gICBpZih0aGlzLnZpc2l0ZWRSb3dzLmdldChpbmRleCk9PT0gcm93Q291bnQpe1xuICAgICAgICB0aGlzLmlzTG9hZGluZz1mYWxzZTtcbiAgICByZXR1cm47XG4gICB9XG4gfVxuXG5cbiAgICBpZiAocm93Q291bnQgKyAxID4gcm93Q291bnRMaW1pdCkge1xuICAgICAgdGhpcy5jaGVja1N1Ym1pc3Npb25FbGlnaWJpbGl0eSgpO1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nPWZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnZpc2l0ZWRSb3dzLnNldChpbmRleCwgcm93Q291bnQpO1xuXG4gICAgaWYgKHRoaXMuZWRpdCkge1xuICAgICAgdGhpcy5mb3JtU2VydmljZVxuICAgICAgICAuZ2V0U3VibWl0dGVkRm9ybShcbiAgICAgICAgICB0aGlzLm1vZHVsZU5hbWUsXG4gICAgICAgICAgdGhpcy5zdWJtaXNzaW9uSWQsXG4gICAgICAgICAgaW5kZXggKyAxLFxuICAgICAgICAgIHJvd0NvdW50XG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld1Jvd3MgPSByZXNwb25zZT8ucmVzdWx0Py5wYWdlc1swXT8ucm93cyA/PyBbXTtcbiAgICAgICAgICB0aGlzLnBhZ2VzW2luZGV4XS5yb3dzID0gW1xuICAgICAgICAgICAgLi4uKHRoaXMucGFnZXNbaW5kZXhdPy5yb3dzID8/IFtdKSxcbiAgICAgICAgICAgIC4uLm5ld1Jvd3MsXG4gICAgICAgICAgXTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSBpbmRleDtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlc1tpbmRleF07XG4gICAgICAgICAgdGhpcy5yb3dTZXRDb3VudFtpbmRleF0gPSByZXNwb25zZS5yZXN1bHQudG90YWxOdW1iZXJSb3c7XG4gICAgICAgICAgdGhpcy5jaGVja1N1Ym1pc3Npb25FbGlnaWJpbGl0eSgpO1xuICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZz1mYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9ybVNlcnZpY2VcbiAgICAgICAgLmdldFF1ZXN0aW9ucyh0aGlzLm1vZHVsZU5hbWUsIGluZGV4ICsgMSwgcm93Q291bnQgKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3Um93cyA9IHJlc3BvbnNlPy5yZXN1bHQ/LnBhZ2VzWzBdPy5yb3dzID8/IFtdO1xuICAgICAgICAgIHRoaXMucGFnZXNbaW5kZXhdLnJvd3MgPSBbXG4gICAgICAgICAgICAuLi4odGhpcy5wYWdlc1tpbmRleF0/LnJvd3MgPz8gW10pLFxuICAgICAgICAgICAgLi4ubmV3Um93cyxcbiAgICAgICAgICBdO1xuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2VJbmRleCA9IGluZGV4O1xuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzW2luZGV4XTtcbiAgICAgICAgICB0aGlzLnJvd1NldENvdW50W2luZGV4XSA9IHJlc3BvbnNlLnJlc3VsdC50b3RhbE51bWJlclJvdztcbiAgICAgICAgICB0aGlzLmNoZWNrU3VibWlzc2lvbkVsaWdpYmlsaXR5KCk7XG4gICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZz1mYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICB0aGlzLmNoZWNrU3VibWlzc2lvbkVsaWdpYmlsaXR5KCk7XG4gIH1cbn1cblxuICBnZW5lcmF0ZVF1ZXN0aW9uQW5zd2VycygpIHtcbiAgICB0aGlzLm1heFBvc3NpYmxlU2NvcmUgPSAxO1xuICAgIHRoaXMuc3VtT2ZGaW5kaW5ncyA9IDA7XG4gICAgdGhpcy5jb3B5U3ViZm9ybXMgPSBbXTtcbiAgICBjb25zdCBleHRyYWN0UXVlc3Rpb25zID0gKFxuICAgICAgZm9ybUVsZW1lbnRzOiBhbnlbXSxcbiAgICAgIHBhcmVudEZvcm1JZDogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgICBpc0luU3ViRm9ybTogYm9vbGVhbiA9IGZhbHNlLFxuICAgICAgc3ViRm9ybUluZGV4OiBudW1iZXIgPSAwXG4gICAgKTogeyBhbnN3ZXJzOiBBbnN3ZXJbXTsgZm9ybXM6IEZvcm1bXSB9ID0+IHtcbiAgICAgIGNvbnN0IHF1ZXN0aW9uczogQW5zd2VyW10gPSBbXTtcbiAgICAgIGNvbnN0IGZvcm1zOiBGb3JtW10gPSBbXTtcblxuICAgICAgZm9ybUVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgaWYgKGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ1FVRVNUSU9OJykge1xuICAgICAgICAgIGxldCBiYXNlUXVlc3Rpb246IGFueTtcbiAgICAgICAgICBpZiAoZWxlbWVudC5lbGVtZW50LmZvcm1FbGVtZW50LmVsZW1lbnRUeXBlID09PSAnRklMRV9QSUNLRVInKSB7XG4gICAgICAgICAgICBiYXNlUXVlc3Rpb24gPSB7XG4gICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGVsZW1lbnQuZWxlbWVudC5pZCxcbiAgICAgICAgICAgICAgYW5zd2VyOiAnJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbGVtZW50LmVsZW1lbnQuYW5zd2VyKSkge1xuICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbklkID0gaXNJblN1YkZvcm1cbiAgICAgICAgICAgICAgICA/IGAke3BhcmVudEZvcm1JZH1fJHtzdWJGb3JtSW5kZXh9XyR7ZWxlbWVudC5lbGVtZW50LmlkfWBcbiAgICAgICAgICAgICAgICA6IGVsZW1lbnQuZWxlbWVudC5pZDtcbiAgICAgICAgICAgICAgdGhpcy5maWxlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBxdWVzdGlvbklkLFxuICAgICAgICAgICAgICAgIGZpbGU6IGVsZW1lbnQuZWxlbWVudC5hbnN3ZXIsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBiYXNlUXVlc3Rpb24gPSB7XG4gICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGVsZW1lbnQuZWxlbWVudC5pZCxcbiAgICAgICAgICAgICAgYW5zd2VyOiBlbGVtZW50LmVsZW1lbnQuYW5zd2VyLFxuICAgICAgICAgICAgICBzY29yZTogZWxlbWVudC5lbGVtZW50LnNjb3JlLFxuICAgICAgICAgICAgICBtYXhpbXVtUG9zc2libGVTY29yZTogZWxlbWVudC5lbGVtZW50Lm1heFBvc3NpYmxlU2NvcmVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLmVkaXQpIHtcbiAgICAgICAgICAgIHF1ZXN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgLi4uYmFzZVF1ZXN0aW9uLFxuICAgICAgICAgICAgICBhbnN3ZXJJZDogZWxlbWVudC5lbGVtZW50LmFuc3dlcklkIHx8ICcnLFxuICAgICAgICAgICAgICBkZWxldGVGaWxlczogZWxlbWVudC5lbGVtZW50LmRlbGV0ZUZpbGVzIHx8IFtdLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHF1ZXN0aW9ucy5wdXNoKGJhc2VRdWVzdGlvbik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGVsZW1lbnQuZWxlbWVudC5mb3JtRWxlbWVudC5lbGVtZW50VHlwZSA9PT0gJ0RST1BfRE9XTicgfHxcbiAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50LmZvcm1FbGVtZW50LmVsZW1lbnRUeXBlID09PSAnUkFESU9fQlVUVE9OJyB8fFxuICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQuZm9ybUVsZW1lbnQuZWxlbWVudFR5cGUgPT09ICdDSEVDS19CT1gnKSAmJlxuICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQuZm9ybUVsZW1lbnQuc2NvcmluZyAmJlxuICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQuZm9ybUVsZW1lbnQuc2NvcmluZy5lbmFibGVTY29yaW5nXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLm1heFBvc3NpYmxlU2NvcmUgKj0gdGhpcy5zY29yZUNhbGNTZXJ2aWNlLmdldE1heFBvc3NpYmxlU2NvcmVGb3JRdWVzdGlvbihlbGVtZW50LmVsZW1lbnQpO1xuICAgICAgICAgICAgaWYoZWxlbWVudC5lbGVtZW50LnNjb3JlICYmIGVsZW1lbnQuZWxlbWVudC5zY29yZSE9bnVsbCAmJiBlbGVtZW50LmVsZW1lbnQuc2NvcmUhPXVuZGVmaW5lZCl7XG4gICAgICAgICAgICAgIHRoaXMuc3VtT2ZGaW5kaW5ncyArPSBlbGVtZW50LmVsZW1lbnQuc2NvcmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudC5jaGlsZExvZ2ljcykge1xuICAgICAgICAgICAgZm9yIChsZXQgbG9naWMgb2YgZWxlbWVudC5lbGVtZW50LmNoaWxkTG9naWNzKSB7XG4gICAgICAgICAgICAgIGlmIChsb2dpYy5zaG93TG9naWMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCByb3cgb2YgbG9naWMucm93cykge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZXh0cmFjdFF1ZXN0aW9ucyhcbiAgICAgICAgICAgICAgICAgICAgcm93LmdyaWQsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudEZvcm1JZCxcbiAgICAgICAgICAgICAgICAgICAgaXNJblN1YkZvcm0sXG4gICAgICAgICAgICAgICAgICAgIHN1YkZvcm1JbmRleFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9ucy5wdXNoKC4uLnJlc3VsdC5hbnN3ZXJzKTtcbiAgICAgICAgICAgICAgICAgIGZvcm1zLnB1c2goLi4ucmVzdWx0LmZvcm1zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnU1VCRk9STScpIHtcbiAgICAgICAgICBjb25zdCBzdWJmb3JtSWQgPSBlbGVtZW50LmVsZW1lbnQuaWQ7XG4gICAgICAgICAgY29uc3Qgc3VibWlzc2lvbklkID0gZWxlbWVudC5lbGVtZW50LnN1Ym1pc3Npb25JZDtcbiAgICAgICAgICBpZihlbGVtZW50LmVsZW1lbnQuY29weVN1YmZvcm1NZXRhKXtcbiAgICAgICAgICAgIHRoaXMuY29weVN1YmZvcm1zLnB1c2goZWxlbWVudC5lbGVtZW50LmNvcHlTdWJmb3JtTWV0YSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChlbGVtZW50LmVsZW1lbnQucHJvcGVydHkuc3ViRm9ybVN0cnVjdHVyZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgIGxldCBhbGxBbnN3ZXJzOiBBbnN3ZXJbXSA9IFtdO1xuXG4gICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQucm93cy5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBleHRyYWN0ZWQgPSBleHRyYWN0UXVlc3Rpb25zKFxuICAgICAgICAgICAgICAgIHJvdy5ncmlkLFxuICAgICAgICAgICAgICAgIHN1YmZvcm1JZCxcbiAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgIGZvcm1zLmxlbmd0aFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBleHRyYWN0ZWQuYW5zd2Vycy5mb3JFYWNoKChhbnN3ZXIpID0+IHtcbiAgICAgICAgICAgICAgICBhbGxBbnN3ZXJzLnB1c2goeyAuLi5hbnN3ZXIgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsZXQgY29waWVkRm9ybXM7XG4gICAgICAgICAgICBpZihlbGVtZW50LmVsZW1lbnQuY29waWVkRm9ybXMpe1xuICAgICAgICAgICAgICBjb3BpZWRGb3JtcyA9IGVsZW1lbnQuZWxlbWVudC5jb3BpZWRGb3Jtc1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc3ViZm9ybTogRm9ybSA9IHtcbiAgICAgICAgICAgICAgZm9ybUlkOiBzdWJmb3JtSWQsXG4gICAgICAgICAgICAgIGRlbGV0ZWQ6IGVsZW1lbnQuZWxlbWVudC5kZWxldGVkLFxuICAgICAgICAgICAgICBkZWxldGVkU3VibWlzc2lvbnM6IFtdLFxuICAgICAgICAgICAgICBzdWJtaXNzaW9uczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHN1Ym1pc3Npb25JZDogc3VibWlzc2lvbklkLFxuICAgICAgICAgICAgICAgICAgYW5zd2VyczogYWxsQW5zd2VycyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBjb3BpZWRGb3Jtczpjb3BpZWRGb3Jtc1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZm9ybXMucHVzaChzdWJmb3JtKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuZWxlbWVudC5wcm9wZXJ0eS5zdWJGb3JtU3RydWN0dXJlID09PSAnbXVsdGlwbGUnKSB7XG4gICAgICAgICAgICBjb25zdCBzdWJmb3JtQW5zd2VyczogQW5zd2VyW10gPSBbXTtcbiAgICAgICAgICAgIGxldCBzdWJmb3JtUXVlc3Rpb25zOiBhbnkgPSB7IGFuc3dlcnM6IFtdIH07XG4gICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQucm93cy5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBzdWJmb3JtUXVlc3Rpb25zID0gZXh0cmFjdFF1ZXN0aW9ucyhcbiAgICAgICAgICAgICAgICByb3cuZ3JpZCxcbiAgICAgICAgICAgICAgICBzdWJmb3JtSWQsXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICBmb3Jtcy5sZW5ndGhcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdTdWJmb3JtID0gZm9ybXMuZmluZChcbiAgICAgICAgICAgICAgKGZvcm0pID0+IGZvcm0uZm9ybUlkID09PSBzdWJmb3JtSWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoKGVsZW1lbnQuZWxlbWVudC5wcm9wZXJ0eS5zdWJGb3JtVHlwZSA9PSAnaW5saW5lJyB8fCBlbGVtZW50LmVsZW1lbnQucHJvcGVydHkuc3ViRm9ybVR5cGUgPT0gJ2NhcmQnKVxuICAgICAgICAgICAgICAgJiYgZWxlbWVudC5lbGVtZW50LnN1Ym1pc3Npb25zKSB7XG4gICAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudC5zdWJtaXNzaW9ucyA9IHRoaXMuY2xlYXJFbXB0eVN1Ym1pc3Npb25zKFxuICAgICAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudC5zdWJtaXNzaW9uc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50Py5zdWJtaXNzaW9ucz8uZm9yRWFjaChcbiAgICAgICAgICAgICAgKHN1Ym1pc3Npb246IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3VtT2ZGaW5kaW5ncyArPSBzdWJtaXNzaW9uLnNjb3JlO1xuICAgICAgICAgICAgICAgIHN1Ym1pc3Npb24uYW5zd2Vycy5mb3JFYWNoKChhbnN3ZXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgZGVsZXRlIGFuc3dlci5odG1sQ29udGVudDtcbiAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFuc3dlci5maWxlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25JZCA9IGAke3N1YmZvcm1JZH1fJHtpbmRleH1fJHthbnN3ZXIucXVlc3Rpb25JZH1gO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IHF1ZXN0aW9uSWQsXG4gICAgICAgICAgICAgICAgICAgICAgZmlsZTogYW5zd2VyLmZpbGVzLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGFuc3dlci5maWxlcztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGRlbGV0ZSBhbnN3ZXIuYXR0YWNobWVudHM7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsZXQgY29waWVkRm9ybXM7XG4gICAgICAgICAgICBpZihlbGVtZW50LmVsZW1lbnQuY29waWVkRm9ybXMpe1xuICAgICAgICAgICAgICBjb3BpZWRGb3JtcyA9IGVsZW1lbnQuZWxlbWVudC5jb3BpZWRGb3Jtc1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzdWJmb3JtOiBGb3JtID0ge1xuICAgICAgICAgICAgICBmb3JtSWQ6IHN1YmZvcm1JZCxcbiAgICAgICAgICAgICAgZGVsZXRlZDogZWxlbWVudC5lbGVtZW50LmRlbGV0ZWQsXG4gICAgICAgICAgICAgIHNjb3JlOmVsZW1lbnQuZWxlbWVudC5zY29yZSxcbiAgICAgICAgICAgICAgZGVsZXRlZFN1Ym1pc3Npb25zOiBlbGVtZW50LmVsZW1lbnQuZGVsZXRlZFN1Ym1pc3Npb25zLFxuICAgICAgICAgICAgICBzdWJtaXNzaW9uczogZWxlbWVudC5lbGVtZW50LnN1Ym1pc3Npb25zLFxuICAgICAgICAgICAgICBjb3BpZWRGb3Jtczpjb3BpZWRGb3JtcyxcbiAgICAgICAgICAgICAgbWF4aW11bVBvc3NpYmxlU2NvcmU6IGVsZW1lbnQuZWxlbWVudC5tYXhQb3NzaWJsZVNjb3JlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZm9ybXMucHVzaChzdWJmb3JtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnUVVFU1RJT05fR1JPVVAnKSB7XG4gICAgICAgICAgLy8gSGFuZGxlIFF1ZXN0aW9uIEdyb3VwIGJ5IGl0ZXJhdGluZyB0aHJvdWdoIHJvd3NcbiAgICAgICAgICBlbGVtZW50LmVsZW1lbnQucm93cy5mb3JFYWNoKChyb3c6YW55KSA9PiB7XG4gICAgICAgICAgICByb3cuZ3JpZC5mb3JFYWNoKChncmlkSXRlbTphbnkpID0+IHtcblxuICAgICAgICAgICAgICBpZiAoZ3JpZEl0ZW0uZW50aXR5VHlwZSA9PT0gJ1FVRVNUSU9OJykge1xuICAgICAgICAgICAgICAgIGxldCBiYXNlUXVlc3Rpb246IGFueTtcbiAgICAgICAgICAgICAgICBpZiAoZ3JpZEl0ZW0uZWxlbWVudD8uZm9ybUVsZW1lbnQuZWxlbWVudFR5cGUgPT09ICdGSUxFX1BJQ0tFUicpIHtcbiAgICAgICAgICAgICAgICAgIGJhc2VRdWVzdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogZ3JpZEl0ZW0uZWxlbWVudC5pZCxcbiAgICAgICAgICAgICAgICAgICAgYW5zd2VyOiAnJyxcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShncmlkSXRlbS5lbGVtZW50LmFuc3dlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25JZCA9IGlzSW5TdWJGb3JtXG4gICAgICAgICAgICAgICAgICAgICAgPyBgJHtwYXJlbnRGb3JtSWR9XyR7c3ViRm9ybUluZGV4fV8ke2dyaWRJdGVtLmVsZW1lbnQuaWR9YFxuICAgICAgICAgICAgICAgICAgICAgIDogZ3JpZEl0ZW0uZWxlbWVudC5pZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBxdWVzdGlvbklkLFxuICAgICAgICAgICAgICAgICAgICAgIGZpbGU6IGdyaWRJdGVtLmVsZW1lbnQuYW5zd2VyLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgYmFzZVF1ZXN0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBncmlkSXRlbS5lbGVtZW50LmlkLFxuICAgICAgICAgICAgICAgICAgICBhbnN3ZXI6IGdyaWRJdGVtLmVsZW1lbnQuYW5zd2VyLFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZWRpdCkge1xuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAuLi5iYXNlUXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGFuc3dlcklkOiBncmlkSXRlbS5lbGVtZW50LmFuc3dlcklkIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICBkZWxldGVGaWxlczogZ3JpZEl0ZW0uZWxlbWVudC5kZWxldGVGaWxlcyB8fCBbXSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbnMucHVzaChiYXNlUXVlc3Rpb24pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChncmlkSXRlbS5lbGVtZW50LmNoaWxkTG9naWNzKSB7XG4gICAgICAgICAgICAgICAgICBmb3IgKGxldCBsb2dpYyBvZiBncmlkSXRlbS5lbGVtZW50LmNoaWxkTG9naWNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2dpYy5zaG93TG9naWMpIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCByb3cgb2YgbG9naWMucm93cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZXh0cmFjdFF1ZXN0aW9ucyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LmdyaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEZvcm1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNJblN1YkZvcm0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN1YkZvcm1JbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9ucy5wdXNoKC4uLnJlc3VsdC5hbnN3ZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1zLnB1c2goLi4ucmVzdWx0LmZvcm1zKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ01VTFRJRklFTEQnKSB7XG4gICAgICAgICAgZWxlbWVudC5lbGVtZW50LnJvd3MuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJvdy5ncmlkLmZvckVhY2goKGdyaWRJdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGdyaWRJdGVtLmVudGl0eVR5cGUgPT09ICdRVUVTVElPTicpIHtcbiAgICAgICAgICAgICAgICBxdWVzdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBncmlkSXRlbS5lbGVtZW50LmlkLFxuICAgICAgICAgICAgICAgICAgYW5zd2VyOiBncmlkSXRlbS5lbGVtZW50LmFuc3dlciB8fCAnJyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgYW5zd2VyczogcXVlc3Rpb25zLCBmb3JtczogZm9ybXMgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgcHJvY2Vzc1BhZ2VzID0gKFxuICAgICAgcGFnZXM6IGFueVtdXG4gICAgKTogeyBhbnN3ZXJzOiBBbnN3ZXJbXTsgZm9ybXM6IEZvcm1bXSB9ID0+IHtcbiAgICAgIGNvbnN0IHF1ZXN0aW9uczogQW5zd2VyW10gPSBbXTtcbiAgICAgIGNvbnN0IGZvcm1zOiBGb3JtW10gPSBbXTtcblxuICAgICAgcGFnZXMuZm9yRWFjaCgocGFnZSkgPT4ge1xuICAgICAgICBwYWdlLnJvd3MuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBleHRyYWN0UXVlc3Rpb25zKHJvdy5ncmlkKTtcbiAgICAgICAgICBxdWVzdGlvbnMucHVzaCguLi5yZXN1bHQuYW5zd2Vycyk7XG4gICAgICAgICAgZm9ybXMucHVzaCguLi5yZXN1bHQuZm9ybXMpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4geyBhbnN3ZXJzOiBxdWVzdGlvbnMsIGZvcm1zOiBmb3Jtc307XG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHByb2Nlc3NQYWdlcyh0aGlzLnBhZ2VzKTtcbiAgICB0aGlzLnF1ZXN0aW9uQW5zd2VycyA9IHtcbiAgICAgIHBhcmVudElkOiAnJyxcbiAgICAgIGFuc3dlcnM6IHJlc3VsdC5hbnN3ZXJzLFxuICAgICAgZm9ybXM6IHJlc3VsdC5mb3JtcyxcbiAgICAgIGNvcHlTdWJGb3Jtczp0aGlzLmNvcHlTdWJmb3Jtc1xuICAgIH07XG4gIH1cblxuICBjbGVhckVtcHR5U3VibWlzc2lvbnMoc3VibWlzc2lvbnM6IGFueSkge1xuICAgIGNvbnN0IG5vbkVtcHR5U3VibWlzc2lvbnM6IFN1Ym1pc3Npb25bXSA9IFtdO1xuICAgIGNvbnN0IGVtcHR5U3VibWlzc2lvbklkczogc3RyaW5nW10gPSBbXTtcblxuICAgIHN1Ym1pc3Npb25zLmZvckVhY2goKHN1Ym1pc3Npb246IGFueSkgPT4ge1xuICAgICAgY29uc3QgaGFzVmFsdWUgPSBzdWJtaXNzaW9uLmFuc3dlcnMuc29tZShcbiAgICAgICAgKGFuc3dlcjogYW55KSA9PlxuICAgICAgICAgIGFuc3dlci5hbnN3ZXIgIT09ICcnICYmXG4gICAgICAgICAgYW5zd2VyLmFuc3dlciAhPT0gbnVsbCAmJlxuICAgICAgICAgIGFuc3dlci5hbnN3ZXIgIT09IHVuZGVmaW5lZFxuICAgICAgKTtcbiAgICAgIGlmIChoYXNWYWx1ZSkge1xuICAgICAgICBub25FbXB0eVN1Ym1pc3Npb25zLnB1c2goc3VibWlzc2lvbik7XG4gICAgICB9IGVsc2UgaWYgKHN1Ym1pc3Npb24uc3VibWlzc2lvbklkKSB7XG4gICAgICAgIGVtcHR5U3VibWlzc2lvbklkcy5wdXNoKHN1Ym1pc3Npb24uc3VibWlzc2lvbklkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHN1Ym1pc3Npb25zID0gbm9uRW1wdHlTdWJtaXNzaW9ucztcbiAgICByZXR1cm4gc3VibWlzc2lvbnM7XG4gIH1cblxuICB2YWxpZGF0ZUFsbEVsZW1lbnRMb2FkZWQoKTogeyBzdGF0dXM6IGJvb2xlYW47IG1lc3NhZ2U6IHN0cmluZyB9IHtcbiAgICBpZiAodGhpcy5wYWdlcy5sZW5ndGggPCB0aGlzLnBhZ2VEZXRhaWxzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAnUGxlYXNlIGVuc3VyZSBhbGwgcGFnZXMgYXJlIGZ1bGx5IHZpc2libGUgYmVmb3JlIHN1Ym1pdHRpbmcgdGhlIGZvcm0uJyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgaW5jb21wbGV0ZVBhZ2VzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgdGhpcy5wYWdlcy5mb3JFYWNoKChwOiBhbnksIGk6IG51bWJlcikgPT4ge1xuICAgICAgaWYocCAmJiBBcnJheS5pc0FycmF5KHAucm93cykpe1xuICAgICAgbGV0IGo9MDtcbiAgICAgIHAucm93cy5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICAgcm93LmdyaWQuZm9yRWFjaCgoZ3JpZEl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgIGorKztcbiAgICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgIXAgfHxcbiAgICAgICAgIUFycmF5LmlzQXJyYXkocC5yb3dzKSB8fFxuICAgICAgICBNYXRoLmNlaWwoaiAvIDIwKSAhPSB0aGlzLnJvd1NldENvdW50W2ldXG4gICAgICApIHtcbiAgICAgICAgaW5jb21wbGV0ZVBhZ2VzLnB1c2godGhpcy5wYWdlRGV0YWlsc1tpXS5uYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZXtcbiAgICAgIGluY29tcGxldGVQYWdlcy5wdXNoKHRoaXMucGFnZURldGFpbHNbaV0ubmFtZSk7XG4gICAgfVxuICAgIH0pO1xuXG5cblxuICAgIGlmIChpbmNvbXBsZXRlUGFnZXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZTogYFNvbWUgc2VjdGlvbnMgYXJlIHN0aWxsIGxvYWRpbmcuIFBsZWFzZSBzY3JvbGwgdGhyb3VnaCB0aGUgZm9sbG93aW5nIHBhZ2VzIHRvIGVuc3VyZSBhbGwgcXVlc3Rpb25zIGFyZSBsb2FkZWQ6ICR7aW5jb21wbGV0ZVBhZ2VzLmpvaW4oXG4gICAgICAgICAgJywgJ1xuICAgICAgICApfS5gLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiB0cnVlLFxuICAgICAgbWVzc2FnZTogJ0dyZWF0ISBBbGwgc2VjdGlvbnMgYXJlIGNvbXBsZXRlLiBZb3UgY2FuIG5vdyBzdWJtaXQgdGhlIGZvcm0uJyxcbiAgICB9O1xuICB9XG4gIHNhdmVhc0RyYWZ0UG9wdXAoKTogdm9pZCB7XG4gICAgaWYoIXRoaXMuc2tpcFZhbGlkYXRpb24pXG4gICAge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFNhdmVEcmFmdE1vZGFsQ29tcG9uZW50ICwge1xuICAgICAgd2lkdGg6ICc0NTBweCcsXG4gICAgICBwYW5lbENsYXNzOiAnY3VzdG9tLWRpYWxvZy1jb250YWluZXInLFxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICBkYXRhOiB7XG4gICAgcHJpbWFyeUNvbG9yOiB0aGlzLnByaW1hcnlDb2xvcixcbiAgfVxuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG5cbiAgICAgICAgdGhpcy52YWxpZGF0aW9uU2tpcD10cnVlO1xuICAgICAgICB0aGlzLnN1Ym1pdEZvcm0oKTtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uU2tpcD1mYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICB0aGlzLnZhbGlkYXRpb25Ta2lwPWZhbHNlO1xuICAgICAgICBjb25zb2xlLmxvZygnQ2FuY2VsbGVkJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgYXN5bmMgc3VibWl0Rm9ybSgpIHtcbiAgICBpZiAoIXRoaXMudmFsaWRhdGVBbGxFbGVtZW50TG9hZGVkKCkuc3RhdHVzKSB7XG4gICAgICB0aGlzLnRvYXN0ci53YXJuaW5nKCdQbGVhc2Ugd2FpdCBmb3IgYWxsIGVsZW1lbnRzIHRvIGxvYWQnKTtcbiAgICAgIHRoaXMuc3VibWl0LmVtaXQoe1xuICAgICAgICAnc3RhdHVzJzonZmFpbGVkJ1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnN1Ym1pc3Npb25JblByb2dyZXNzKSB7XG4gICAgICB0aGlzLnN1Ym1pdC5lbWl0KHtcbiAgICAgICAgJ3N0YXR1cyc6J2ZhaWxlZCdcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgIGxldCByZWNhcHRjaGFUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHRoaXMuaW5WYWxpZFF1ZXN0aW9ucy5jbGVhcigpO1xuICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuY2xlYXJBbGwoKTtcbiAgICBpZiAodGhpcy5lbmFibGVHb29nbGVSZWNhcHRjaGEpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlY2FwdGNoYVRva2VuPWF3YWl0IHRoaXMuZ2V0VG9rZW4oKTtcblxuXG4gICAgICAgIGlmICghcmVjYXB0Y2hhVG9rZW4pIHtcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1BsZWFzZSBjb21wbGV0ZSB0aGUgQ0FQVENIQSB2ZXJpZmljYXRpb24gYmVmb3JlIHN1Ym1pdHRpbmcgdGhlIGZvcm0uJyk7XG4gICAgICAgICAgdGhpcy5zdWJtaXNzaW9uSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuc3VibWl0LmVtaXQoe1xuICAgICAgICAgICAgJ3N0YXR1cyc6J2ZhaWxlZCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAnRXJyb3Igd2hpbGUgZ2V0dGluZyByZUNBUFRDSEEgdG9rZW46JyxcbiAgICAgICAgICBlcnJvci5lcnJvcj8ubWVzc2FnZVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignRmFpbGVkIHRvIHZlcmlmeSByZUNBUFRDSEEuJyk7XG4gICAgICAgIHRoaXMuc3VibWlzc2lvbkluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdWJtaXQuZW1pdCh7XG4gICAgICAgICAgJ3N0YXR1cyc6J2ZhaWxlZCdcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zdWJtaXNzaW9uSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgbGV0IHZhbGlkYXRpb25SZXNwb25zZSA9dHJ1ZTtcbiAgICBpZiAoIXRoaXMudmFsaWRhdGlvblNraXApIHtcbiAgICAgIHZhbGlkYXRpb25SZXNwb25zZT10aGlzLnZhbGlkYXRlRm9ybSh0aGlzLnBhZ2VzKS5pc1ZhbGlkO1xuICAgIH1cblxuXG4gICAgY29uc3QgZ2V0Q2lyY3VsYXJSZXBsYWNlciA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHNlZW4gPSBuZXcgV2Vha1NldCgpO1xuICAgICAgcmV0dXJuIChfa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmIChzZWVuLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNlZW4uYWRkKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9O1xuICAgIH07XG4gICAgdGhpcy5nZW5lcmF0ZVF1ZXN0aW9uQW5zd2VycygpO1xuICAgIGNvbnN0IGZvcm1GaW5hbFNjb3JlID0gdGhpcy5jYWxjdWxhdGVGb3JtRmluYWxTY29yZSgpO1xuICAgIHRoaXMucXVlc3Rpb25BbnN3ZXJzLnNjb3JlID0gZm9ybUZpbmFsU2NvcmU7XG4gICAgdGhpcy5xdWVzdGlvbkFuc3dlcnMubWF4aW11bVBvc3NpYmxlU2NvcmUgPSB0aGlzLm1heFBvc3NpYmxlU2NvcmU7XG4gICAgaWYgKHZhbGlkYXRpb25SZXNwb25zZSkge1xuICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnc2tpcFZhbGlkYXRpb24nLHRoaXMudmFsaWRhdGlvblNraXAgPyAndHJ1ZScgOiAnZmFsc2UnKTtcbiAgICAgIHRoaXMucXVlc3Rpb25BbnN3ZXJzLnBhcmVudElkID0gdGhpcy5wYXJlbnRTdWJtaXNzaW9uSWQ7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb24nLCBKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXN0aW9uQW5zd2VycywgZ2V0Q2lyY3VsYXJSZXBsYWNlcigpKSk7XG4gICAgICBpZih0aGlzLndlYmhvb2tQYXlsb2FkQXJyYXkpe1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoXCJ3ZWJob29rUGF5bG9hZFwiLCBKU09OLnN0cmluZ2lmeSh0aGlzLndlYmhvb2tQYXlsb2FkQXJyYXkpKTtcbiAgICAgIH1lbHNle1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoXCJ3ZWJob29rUGF5bG9hZFwiLCBKU09OLnN0cmluZ2lmeShbXSkpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBzZWVuUXVlc3Rpb25JZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgICAgICBjb25zdCB1bmlxdWVGaWxlcyA9IHRoaXMuZmlsZXMuZmlsdGVyKChmaWxlSXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChzZWVuUXVlc3Rpb25JZHMuaGFzKGZpbGVJdGVtLnF1ZXN0aW9uSWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNlZW5RdWVzdGlvbklkcy5hZGQoZmlsZUl0ZW0ucXVlc3Rpb25JZCk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHVuaXF1ZUZpbGVzLmZvckVhY2goKGZpbGVJdGVtKSA9PiB7XG4gICAgICAgICAgZmlsZUl0ZW0uZmlsZS5mb3JFYWNoKChmaWxlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChmaWxlSXRlbS5xdWVzdGlvbklkLCBmaWxlLl9maWxlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBmb3JtU2VydmljZUNhbGwgPVxuICAgICAgICB0aGlzLmVkaXQgJiYgdGhpcy5zdWJtaXNzaW9uSWRcbiAgICAgICAgICA/IHRoaXMuZm9ybVNlcnZpY2UudXBkYXRlRm9ybShcbiAgICAgICAgICAgICAgdGhpcy5tb2R1bGVOYW1lLFxuICAgICAgICAgICAgICB0aGlzLnN1Ym1pc3Npb25JZCxcbiAgICAgICAgICAgICAgZm9ybURhdGEsXG4gICAgICAgICAgICByZWNhcHRjaGFUb2tlbiA/PyAnJ1xuICAgICAgICAgICAgKVxuICAgICAgICAgIDogdGhpcy5mb3JtU2VydmljZS5zdWJtaXRGb3JtKFxuICAgICAgICAgICAgICB0aGlzLm1vZHVsZU5hbWUsXG4gICAgICAgICAgICAgIGZvcm1EYXRhLFxuICAgICAgICAgICByZWNhcHRjaGFUb2tlbiA/PyAnJ1xuICAgICAgICAgICAgKTtcblxuICAgICAgZm9ybVNlcnZpY2VDYWxsLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MoXG4gICAgICAgICAgICB0aGlzLmVkaXRcbiAgICAgICAgICAgICAgPyAnRm9ybSB1cGRhdGVkIHN1Y2Nlc3NmdWxseSdcbiAgICAgICAgICAgICAgOiAnRm9ybSBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5J1xuICAgICAgICAgICk7XG4gICAgICAgICAgbGV0IGVtaXR0aW5nVmFsdWVzXG4gICAgICAgICAgaWYodGhpcy5lbWl0dGVycyl7XG4gICAgICAgICAgICBlbWl0dGluZ1ZhbHVlcyA9IHRoaXMubWFwRW1pdHRlcnNUb1ZhbHVlcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihmb3JtRGF0YS5nZXQoJ3NraXBWYWxpZGF0aW9uJykgPT09ICd0cnVlJyl7XG4gICAgICAgICAgICAgdGhpcy5zdWJtaXQuZW1pdCh7XG4gICAgICAgICAgICAnc3RhdHVzJzonZHJhZnQnLFxuICAgICAgICAgICAgJ3N1Ym1pc3Npb25JZCc6cmVzcG9uc2UucmVzdWx0LFxuICAgICAgICAgICAgJ3Njb3JlJzpmb3JtRmluYWxTY29yZSxcbiAgICAgICAgICAgIC4uLihlbWl0dGluZ1ZhbHVlcyB8fCB7fSlcbiAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgdGhpcy5zdWJtaXQuZW1pdCh7XG4gICAgICAgICAgICAnc3RhdHVzJzonc3VjY2VzcycsXG4gICAgICAgICAgICAnc3VibWlzc2lvbklkJzpyZXNwb25zZS5yZXN1bHQsXG4gICAgICAgICAgICAnc2NvcmUnOmZvcm1GaW5hbFNjb3JlLFxuICAgICAgICAgICAgLi4uKGVtaXR0aW5nVmFsdWVzIHx8IHt9KVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgICAgICB0aGlzLnN1Ym1pc3Npb25JblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmNsZWFyQWxsKCk7XG4gICAgICAgICAgdGhpcy5maW5kUXVlc3Rpb25QYWdlSW5kZXgodGhpcy5wYXJzZUVycm9yc1RvTWFwKGVycm9yLmVycm9yLm1lc3NhZ2UpKTtcbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4ID0gdGhpcy5wYWdlcy5sZW5ndGgtMTtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGVUb0ZpcnN0RXJyb3IoKTtcbiAgICAgICAgICB0aGlzLnN1Ym1pc3Npb25JblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5zYXZlYXNEcmFmdFBvcHVwKCk7XG4gICAgICAgICAgdGhpcy5zdWJtaXQuZW1pdCh7XG4gICAgICAgICAgICAnc3RhdHVzJzonZmFpbGVkJ1xuICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0aGlzLnRvYXN0ci5lcnJvcih2YWxpZGF0aW9uUmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICB0aGlzLnN1Ym1pdC5lbWl0KHtcbiAgICAgICAgJ3N0YXR1cyc6J2ZhaWxlZCdcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zYXZlYXNEcmFmdFBvcHVwKCk7XG4gICAgICB0aGlzLnN1Ym1pc3Npb25JblByb2dyZXNzID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgY2FsY3VsYXRlRm9ybUZpbmFsU2NvcmUoKXtcbiAgICByZXR1cm4gMTAwLSh0aGlzLnN1bU9mRmluZGluZ3MvdGhpcy5tYXhQb3NzaWJsZVNjb3JlKSoxMDBcbiAgfVxuXG4gIG1hcEVtaXR0ZXJzVG9WYWx1ZXMoXG4gICk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgIGNvbnN0IGFuc3dlck1hcCA9IG5ldyBNYXAoXG4gICAgICB0aGlzLnF1ZXN0aW9uQW5zd2Vycy5hbnN3ZXJzLm1hcCgocWEpID0+IFtxYS5xdWVzdGlvbklkLCBxYS5hbnN3ZXJdKVxuICAgICk7XG5cbiAgICBjb25zdCByZXN1bHQ6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcblxuICAgIHRoaXMuZW1pdHRlcnMuZm9yRWFjaCgoZW1pdHRlcikgPT4ge1xuICAgICAgaWYgKGVtaXR0ZXIudmFsdWVTb3VyY2UgPT09ICdDVVNUT01fSU5QVVQnKSB7XG4gICAgICAgIHJlc3VsdFtlbWl0dGVyLmtleU5hbWVdID0gZW1pdHRlci5pbnB1dFZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgZW1pdHRlci52YWx1ZVNvdXJjZSA9PT0gJ1FVRVNUSU9OJyAmJlxuICAgICAgICBlbWl0dGVyLnF1ZXN0aW9uSWQgJiZcbiAgICAgICAgYW5zd2VyTWFwLmhhcyhlbWl0dGVyLnF1ZXN0aW9uSWQpXG4gICAgICApIHtcbiAgICAgICAgcmVzdWx0W2VtaXR0ZXIua2V5TmFtZV0gPSBhbnN3ZXJNYXAuZ2V0KGVtaXR0ZXIucXVlc3Rpb25JZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiBwYXJzZUVycm9yc1RvTWFwKGVycm9yU3RyaW5nOiBzdHJpbmcpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCBlcnJvck1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgLy8gQ29udmVydCB0aGUgaW5jb3JyZWN0IGZvcm1hdCB0byBhIHZhbGlkIG9iamVjdCBzdHJ1Y3R1cmVcbiAgICBlcnJvclN0cmluZ1xuICAgICAgICAucmVwbGFjZSgvW3t9XS9nLCAnJykgLy8gUmVtb3ZlIGN1cmx5IGJyYWNlc1xuICAgICAgICAuc3BsaXQoJywgJykgLy8gU3BsaXQga2V5LXZhbHVlIHBhaXJzXG4gICAgICAgIC5mb3JFYWNoKHBhaXIgPT4ge1xuICAgICAgICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gcGFpci5zcGxpdCgnPScpO1xuICAgICAgICAgICAgaWYgKGtleSAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGVycm9yTWFwLnNldChrZXkudHJpbSgpLCB2YWx1ZS50cmltKCkpOyAvLyBTdG9yZSBpbiBNYXBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gZXJyb3JNYXA7XG59XG4gIGFzeW5jIG5hdmlnYXRlVG9GaXJzdEVycm9yKCkge1xuICAgIGNvbnN0IGZpcnN0RXJyb3IgPSB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmdldEZpcnN0SW52YWxpZCgpO1xuICAgIGlmICghZmlyc3RFcnJvcikgcmV0dXJuO1xuXG4gICAgY29uc3QgZWxlbWVudElkID0gYHF1ZXN0aW9uLSR7Zmlyc3RFcnJvci5pZH1gO1xuXG4gICAgdGhpcy5yZXRyeUNvdW50ID0gMDtcblxuICAgIC8vIENoYW5nZSBwYWdlIGlmIG5lZWRlZFxuICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlSW5kZXggIT09IGZpcnN0RXJyb3IucGFnZUluZGV4KSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSBmaXJzdEVycm9yLnBhZ2VJbmRleDtcbiAgICAgIGlmKHRoaXMuY3VycmVudFBhZ2VJbmRleCsxIDwgdGhpcy5wYWdlRGV0YWlscy5sZW5ndGgpe1xuICAgICAgICB0aGlzLm5leHRQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXgrMV07XG4gICAgICB9XG4gICAgICBpZih0aGlzLmN1cnJlbnRQYWdlSW5kZXgtMT49MCl7XG4gICAgICAgIHRoaXMucHJldmlvdXNQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXgtMV07XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGVib3VuY2UoKCkgPT4gdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCksIDEwMCk7XG4gICAgICBpZih0aGlzLm5hdmlnYXRpb24gPT09ICdUQUInKVxuICAgICAgdGhpcy5jaGlsZC50cmlnZ2VyRnVuY3Rpb24oZmlyc3RFcnJvci5wYWdlSW5kZXgpO1xuICAgIH1cblxuXG4gICAgYXdhaXQgdGhpcy5zY3JvbGxUb0VsZW1lbnRXaXRoUmV0cnkoZWxlbWVudElkKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2Nyb2xsVG9FbGVtZW50V2l0aFJldHJ5KGVsZW1lbnRJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5yZXRyeUNvdW50Kys7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7XG5cbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHRoaXMuc2Nyb2xsQW5kRm9jdXMoZWxlbWVudCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJldHJ5Q291bnQgPCB0aGlzLm1heFJldHJpZXMpIHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMDApKTtcbiAgICAgIHJldHVybiB0aGlzLnNjcm9sbFRvRWxlbWVudFdpdGhSZXRyeShlbGVtZW50SWQpO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IoYEVsZW1lbnQgJHtlbGVtZW50SWR9IG5vdCBmb3VuZCBhZnRlciAke3RoaXMubWF4UmV0cmllc30gYXR0ZW1wdHNgKTtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gdGhpcy5mYWxsYmFja1Njcm9sbCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgc2Nyb2xsQW5kRm9jdXMoZWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICBlbGVtZW50LnNjcm9sbEludG9WaWV3KHtcbiAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICAgIGJsb2NrOiAnY2VudGVyJyxcbiAgICAgIGlubGluZTogJ25lYXJlc3QnXG4gICAgfSk7XG5cbiAgICBjb25zdCBmb2N1c2FibGUgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAnaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIGJ1dHRvbiwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJ1xuICAgICkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgZm9jdXNhYmxlPy5mb2N1cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBmYWxsYmFja1Njcm9sbCgpIHtcbiAgICBjb25zdCBwYWdlRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC5wYWdlLSR7dGhpcy5jdXJyZW50UGFnZUluZGV4fWApO1xuICAgIHBhZ2VFbGVtZW50Py5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnYXV0bycgfSk7XG4gIH1cblxuICBwcml2YXRlIGRlYm91bmNlKGZ1bmM6ICgpID0+IHZvaWQsIGRlbGF5OiBudW1iZXIpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5kZWJvdW5jZVRpbWVyKTtcbiAgICB0aGlzLmRlYm91bmNlVGltZXIgPSBzZXRUaW1lb3V0KGZ1bmMsIGRlbGF5KTtcbiAgfVxuLy8gICBleHRyYWN0SWQobWVzc2FnZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4vLyAgICAgY29uc3QgbWF0Y2ggPSBtZXNzYWdlLm1hdGNoKC9bMC05YS1mQS1GLV17MzZ9Lyk7XG4vLyAgICAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMF0gOiBudWxsO1xuLy8gfVxuXG4vLyAgcmVtb3ZlSWQobWVzc2FnZTogc3RyaW5nKTogc3RyaW5nIHtcbi8vICAgcmV0dXJuIG1lc3NhZ2UucmVwbGFjZSgvWzAtOWEtZkEtRi1dezM2fSQvLCBcIlwiKS50cmltKCk7XG4vLyB9XG5cblxuZmluZFF1ZXN0aW9uUGFnZUluZGV4KHF1ZXN0aW9uRXJyb3JzOiBNYXA8c3RyaW5nLCBzdHJpbmc+KTogdm9pZCB7XG4gIGZvciAobGV0IHBhZ2VJbmRleCA9IDA7IHBhZ2VJbmRleCA8IHRoaXMucGFnZXMubGVuZ3RoOyBwYWdlSW5kZXgrKykge1xuICAgIGNvbnN0IHBhZ2UgPSB0aGlzLnBhZ2VzW3BhZ2VJbmRleF07XG5cbiAgICBmb3IgKGNvbnN0IHJvdyBvZiBwYWdlLnJvd3MpIHtcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiByb3cuZ3JpZCkge1xuICAgICAgICB0aGlzLmNoZWNrQW5kU3RvcmVJbnZhbGlkUXVlc3Rpb25zKGVsZW1lbnQsIHF1ZXN0aW9uRXJyb3JzLCBwYWdlSW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5wcml2YXRlIGNoZWNrQW5kU3RvcmVJbnZhbGlkUXVlc3Rpb25zKGVsZW1lbnQ6IGFueSwgcXVlc3Rpb25FcnJvcnM6IE1hcDxzdHJpbmcsIHN0cmluZz4sIHBhZ2VJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gIGlmIChlbGVtZW50LmVsZW1lbnQuaWQgJiYgcXVlc3Rpb25FcnJvcnMuaGFzKGVsZW1lbnQuZWxlbWVudC5pZCkpIHtcbiAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnNldEludmFsaWQoZWxlbWVudC5lbGVtZW50LmlkLCBxdWVzdGlvbkVycm9ycy5nZXQoZWxlbWVudC5lbGVtZW50LmlkKSEsIHBhZ2VJbmRleCk7XG4gIH1cblxuICAvLyBIYW5kbGUgc3ViZm9ybXMgcmVjdXJzaXZlbHlcbiAgaWYgKGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ1NVQkZPUk0nICYmIGVsZW1lbnQuZWxlbWVudC5yb3dzKSB7XG4gICAgZm9yIChjb25zdCByb3cgb2YgZWxlbWVudC5lbGVtZW50LnJvd3MpIHtcbiAgICAgIGZvciAoY29uc3QgZ3JpZEl0ZW0gb2Ygcm93LmdyaWQpIHtcbiAgICAgICAgdGhpcy5jaGVja0FuZFN0b3JlSW52YWxpZFF1ZXN0aW9ucyhncmlkSXRlbSwgcXVlc3Rpb25FcnJvcnMsIHBhZ2VJbmRleCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICgoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnUVVFU1RJT05fR1JPVVAnIHx8IGVsZW1lbnQuZW50aXR5VHlwZT09PSdNVUxUSUZJRUxEJykgJiYgZWxlbWVudC5lbGVtZW50LnJvd3MpIHtcbiAgICBmb3IgKGNvbnN0IHJvdyBvZiBlbGVtZW50LmVsZW1lbnQucm93cykge1xuICAgICAgZm9yIChjb25zdCBncmlkSXRlbSBvZiByb3cuZ3JpZCkge1xuICAgICAgICB0aGlzLmNoZWNrQW5kU3RvcmVJbnZhbGlkUXVlc3Rpb25zKGdyaWRJdGVtLCBxdWVzdGlvbkVycm9ycywgcGFnZUluZGV4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBIYW5kbGUgbG9naWMtYmFzZWQgY29uZGl0aW9ucyByZWN1cnNpdmVseVxuICBpZiAoKGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ1FVRVNUSU9OJykgJiYgZWxlbWVudC5lbGVtZW50LmNoaWxkTG9naWNzKSB7XG4gICAgZm9yIChjb25zdCBsb2dpYyBvZiBlbGVtZW50LmVsZW1lbnQuY2hpbGRMb2dpY3MpIHtcbiAgICAgIGlmIChsb2dpYy5zaG93TG9naWMpIHtcbiAgICAgICAgZm9yIChjb25zdCByb3cgb2YgbG9naWMucm93cykge1xuICAgICAgICAgIGZvciAoY29uc3QgZ3JpZEl0ZW0gb2Ygcm93LmdyaWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tBbmRTdG9yZUludmFsaWRRdWVzdGlvbnMoZ3JpZEl0ZW0sIHF1ZXN0aW9uRXJyb3JzLCBwYWdlSW5kZXgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mb2N1c1F1ZXN0aW9uRWxlbWVudChjb250YWluZXI6IEhUTUxFbGVtZW50KSB7XG4gIC8vIEZpbmQgZmlyc3QgZm9jdXNhYmxlIGVsZW1lbnQgd2l0aGluIHRoZSBxdWVzdGlvblxuICBjb25zdCBmb2N1c2FibGUgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFt0YWJpbmRleF0nKTtcbiAgaWYgKGZvY3VzYWJsZSkge1xuICAgIChmb2N1c2FibGUgYXMgSFRNTEVsZW1lbnQpLmZvY3VzKCk7XG4gIH0gZWxzZSB7XG4gICAgY29udGFpbmVyLmZvY3VzKCk7XG4gIH1cbn1cbiAgdmFsaWRhdGVGb3JtKGpzb25EYXRhOiBhbnkpOiB7XG4gICAgaXNWYWxpZDogYm9vbGVhbjtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgcGFnZUluZGV4OiBudW1iZXIgfCAwO1xuICB9IHtcblxuICAgIGNvbnN0IHZhbGlkYXRlUXVlc3Rpb25zID0gKFxuICAgICAgZm9ybUVsZW1lbnRzOiBhbnlbXVxuICAgICk6IHsgaXNWYWxpZDogYm9vbGVhbjsgbWVzc2FnZTogc3RyaW5nOyBwYWdlSW5kZXg6IG51bWJlciB8IDAgfSA9PiB7XG4gICAgICBmb3IgKGxldCBlbGVtZW50IG9mIGZvcm1FbGVtZW50cykge1xuICAgICAgICBpZiAoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnUVVFU1RJT04nKSB7XG4gICAgICAgICAgY29uc3QgcmVxdWlyZWQgPSBlbGVtZW50LmVsZW1lbnQucmVxdWlyZWQ7XG4gICAgICAgICAgY29uc3QgYW5zd2VyID0gZWxlbWVudC5lbGVtZW50LmFuc3dlcjtcbiAgICAgICAgICBjb25zdCB2YWxpZGF0aW9uID0gZWxlbWVudC5lbGVtZW50LnZhbGlkYXRpb247XG4gICAgICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudC5mb3JtRWxlbWVudC5lbGVtZW50VHlwZSA9PT0gJ0ZJTEVfUElDS0VSJykge1xuICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudCA9IGVsZW1lbnQuZWxlbWVudC5hdHRhY2htZW50cztcbiAgICAgICAgICAgIGlmIChyZXF1aXJlZCkge1xuICAgICAgICAgICAgICBpZiAoKCFhbnN3ZXIgfHwgYW5zd2VyPy5sZW5ndGggPT09IDApICYmICghYXR0YWNobWVudCB8fGF0dGFjaG1lbnQ/Lmxlbmd0aCA9PSAwKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5WYWxpZFF1ZXN0aW9ucy5zZXQoZWxlbWVudC5lbGVtZW50LmlkLFwiUmVxdWlyZWQgZmlsZSBxdWVzdGlvbiBoYXMgbm8gZmlsZXMgdXBsb2FkZWQuXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBGb3JtIGlzIGludmFsaWQgLSBSZXF1aXJlZCBmaWxlIHF1ZXN0aW9uICR7ZWxlbWVudC5lbGVtZW50LnF1ZXN0aW9uTnVtYmVyfSBoYXMgbm8gZmlsZXMgdXBsb2FkZWQuYCxcbiAgICAgICAgICAgICAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChyZXF1aXJlZCkge1xuICAgICAgICAgICAgICBpZiAoIWFuc3dlciB8fCBPYmplY3Qua2V5cyhhbnN3ZXIpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5WYWxpZFF1ZXN0aW9ucy5zZXQoZWxlbWVudC5lbGVtZW50LmlkLFwiUXVlc3Rpb24gaXMgcmVxdWlyZWQgYnV0IG5vIGFuc3dlciBwcm92aWRlZC5cIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYEZvcm0gaXMgaW52YWxpZCAtIFF1ZXN0aW9uICR7ZWxlbWVudC5lbGVtZW50LnF1ZXN0aW9uTnVtYmVyfSBpcyByZXF1aXJlZCBidXQgbm8gYW5zd2VyIHByb3ZpZGVkLmAsXG4gICAgICAgICAgICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0aW9uPT09ZmFsc2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluVmFsaWRRdWVzdGlvbnMuc2V0KGVsZW1lbnQuZWxlbWVudC5pZCxcIlF1ZXN0aW9uIGlzIHJlcXVpcmVkIGJ1dCB2YWxpZGF0aW9uIGlzIGZhbHNlLlwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgRm9ybSBpcyBpbnZhbGlkIC0gUXVlc3Rpb24gJHtlbGVtZW50LmVsZW1lbnQucXVlc3Rpb25OdW1iZXJ9IGlzIHJlcXVpcmVkIGJ1dCB2YWxpZGF0aW9uIGlzIGZhbHNlLmAsXG4gICAgICAgICAgICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICghcmVxdWlyZWQgJiYgYW5zd2VyICYmIE9iamVjdC5rZXlzKGFuc3dlcikubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBpZiAodmFsaWRhdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluVmFsaWRRdWVzdGlvbnMuc2V0KGVsZW1lbnQuZWxlbWVudC5pZCxcIlF1ZXN0aW9uIGlzIG5vdCByZXF1aXJlZCBidXQgYW5zd2VyIHByb3ZpZGVkIHdpdGggdmFsaWRhdGlvbiBmYWxzZS5cIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYEZvcm0gaXMgaW52YWxpZCAtIFF1ZXN0aW9uICR7ZWxlbWVudC5lbGVtZW50LnF1ZXN0aW9uTnVtYmVyfSBpcyBub3QgcmVxdWlyZWQgYnV0IGFuc3dlciBwcm92aWRlZCB3aXRoIHZhbGlkYXRpb24gZmFsc2UuYCxcbiAgICAgICAgICAgICAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChlbGVtZW50LmVsZW1lbnQuY2hpbGRMb2dpY3MpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGxvZ2ljIG9mIGVsZW1lbnQuZWxlbWVudC5jaGlsZExvZ2ljcykge1xuICAgICAgICAgICAgICBpZiAobG9naWMuc2hvd0xvZ2ljKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdGVRdWVzdGlvbnMobG9naWMucm93cyk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaXNWYWxpZCkgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyAgZWxzZSBpZiAoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnU1VCRk9STScgKSB7XG4gICAgICAgIC8vICAgaWYgKGVsZW1lbnQuZWxlbWVudC5wcm9wZXJ0eS5zdWJGb3JtU3RydWN0dXJlID09PSAnbXVsdGlwbGUnKSB7XG4gICAgICAgIC8vICAgICBjb25zdCBkYXRhID0gZWxlbWVudC5lbGVtZW50LnJvd3M7XG4gICAgICAgIC8vICAgICBjb25zdCByZXF1aXJlZFF1ZXN0aW9uSWRzID0gZGF0YVxuICAgICAgICAvLyAgICAgICAuZmxhdE1hcCgocm93OiBhbnkpID0+IHJvdy5ncmlkKSAvLyBFeHRyYWN0aW5nIGdyaWQgaXRlbXMgZnJvbSBlYWNoIG9iamVjdFxuICAgICAgICAvLyAgICAgICAuZmlsdGVyKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gaXRlbS5lbGVtZW50LnJlcXVpcmVkOyAvLyBFbnN1cmluZyB0aGUgZmlsdGVyIHByb3Blcmx5IGNoZWNrcyAncmVxdWlyZWQnXG4gICAgICAgIC8vICAgICAgIH0pXG4gICAgICAgIC8vICAgICAgIC5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbS5lbGVtZW50LmlkKTtcblxuICAgICAgICAvLyAgICAgaWYgKHJlcXVpcmVkUXVlc3Rpb25JZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyAgICAgICBpZiAoZWxlbWVudD8uZWxlbWVudD8uc3VibWlzc2lvbnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gICAgICAgICBjb25zdCBhcmVSZXF1aXJlZFF1ZXN0aW9uc0Fuc3dlcmVkID0gcmVxdWlyZWRRdWVzdGlvbklkcy5ldmVyeShcbiAgICAgICAgLy8gICAgICAgICAgIChyZXF1aXJlZElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgLy8gICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmdBbnN3ZXIgPSBlbGVtZW50LmVsZW1lbnQuc3VibWlzc2lvbnNcbiAgICAgICAgLy8gICAgICAgICAgICAgICAuZmxhdE1hcCgoc3ViOiBhbnkpID0+IHN1Yi5hbnN3ZXJzKVxuICAgICAgICAvLyAgICAgICAgICAgICAgIC5maW5kKChhbnM6IGFueSkgPT4gYW5zLnF1ZXN0aW9uSWQgPT09IHJlcXVpcmVkSWQpO1xuXG4gICAgICAgIC8vICAgICAgICAgICAgIGlmICghbWF0Y2hpbmdBbnN3ZXIpIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vICAgICAgICAgICAgIH1cblxuICAgICAgICAvLyAgICAgICAgICAgICBjb25zdCBhID0gbWF0Y2hpbmdBbnN3ZXIuYW5zd2VyO1xuXG4gICAgICAgIC8vICAgICAgICAgICAgIGlmICh0eXBlb2YgYSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICByZXR1cm4gYS50cmltKCkgIT09ICcnO1xuICAgICAgICAvLyAgICAgICAgICAgICB9XG5cbiAgICAgICAgLy8gICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICByZXR1cm4gYS5sZW5ndGggPiAwO1xuICAgICAgICAvLyAgICAgICAgICAgICB9XG5cbiAgICAgICAgLy8gICAgICAgICAgICAgaWYgKGEgIT09IG51bGwgJiYgdHlwZW9mIGEgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGEpLmxlbmd0aCA+IDA7XG4gICAgICAgIC8vICAgICAgICAgICAgIH1cblxuICAgICAgICAvLyAgICAgICAgICAgICByZXR1cm4gYSAhPT0gbnVsbCAmJiBhICE9PSB1bmRlZmluZWQ7XG4gICAgICAgIC8vICAgICAgICAgICB9XG4gICAgICAgIC8vICAgICAgICAgKTtcblxuICAgICAgICAvLyAgICAgICAgIGlmICghYXJlUmVxdWlyZWRRdWVzdGlvbnNBbnN3ZXJlZCkge1xuICAgICAgICAvLyAgICAgICAgICAgdGhpcy5pblZhbGlkUXVlc3Rpb25zLnNldChlbGVtZW50LmVsZW1lbnQuaWQsXCJRdWVzdGlvbiBpcyByZXF1aXJlZCBidXQgbm8gYW5zd2VyIHByb3ZpZGVkLlwiKTtcbiAgICAgICAgLy8gICAgICAgICAgIHJldHVybiB7XG4gICAgICAgIC8vICAgICAgICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICAvLyAgICAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAvLyAgICAgICAgICAgICAgICdGb3JtIGlzIGludmFsaWQgLSBRdWVzdGlvbiBpcyByZXF1aXJlZCBidXQgbm8gYW5zd2VyIHByb3ZpZGVkLicsXG4gICAgICAgIC8vICAgICAgICAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgICAgLy8gICAgICAgICAgIH07XG4gICAgICAgIC8vICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIG1lc3NhZ2U6ICcnLCBwYWdlSW5kZXg6IDAgfTtcbiAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgIC8vICAgICAgIH1cbiAgICAgICAgLy8gICAgICAgLy8gZWxzZSB7XG4gICAgICAgIC8vICAgICAgIC8vICAgdGhpcy5pblZhbGlkUXVlc3Rpb25zLnNldChlbGVtZW50LmVsZW1lbnQuaWQsXCJObyBzdWJtaXNzaW9ucyBwcm92aWRlZCBmb3IgcmVxdWlyZWQgcXVlc3Rpb25zLlwiKTtcbiAgICAgICAgLy8gICAgICAgLy8gICByZXR1cm4ge1xuICAgICAgICAvLyAgICAgICAvLyAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgIC8vICAgICAgIC8vICAgICBtZXNzYWdlOlxuICAgICAgICAvLyAgICAgICAvLyAgICAgICAnRm9ybSBpcyBpbnZhbGlkIC0gTm8gc3VibWlzc2lvbnMgcHJvdmlkZWQgZm9yIHJlcXVpcmVkIHF1ZXN0aW9ucy4nLFxuICAgICAgICAvLyAgICAgICAvLyAgICAgcGFnZUluZGV4OiAwLFxuICAgICAgICAvLyAgICAgICAvLyAgIH07XG4gICAgICAgIC8vICAgICAgIC8vIH1cbiAgICAgICAgLy8gICAgIH0gZWxzZSB7XG4gICAgICAgIC8vICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIG1lc3NhZ2U6ICcnLCBwYWdlSW5kZXg6IDAgfTtcbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgICAvLyAgICAgaWYgKGVsZW1lbnQuZWxlbWVudC5yb3dzKSB7XG4gICAgICAgIC8vICAgICAgIGNvbnN0IHJlc3VsdHMgPSBlbGVtZW50LmVsZW1lbnQucm93cy5tYXAoKHJvdzogYW55KSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IHZhbGlkYXRlUXVlc3Rpb25zKHJvdy5ncmlkKTtcbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gdmFsaWRhdGlvblJlc3VsdDtcbiAgICAgICAgLy8gICAgICAgfSk7XG4gICAgICAgIC8vICAgICAgIGNvbnN0IGlzVmFsaWQgPSByZXN1bHRzLmV2ZXJ5KChyZXM6IGFueSkgPT4gcmVzLmlzVmFsaWQpO1xuICAgICAgICAvLyAgICAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgLy8gICAgICAgfVxuICAgICAgICAvLyAgICAgICAvLyBjb25zdCByZXN1bHQgPSAgZWxlbWVudC5lbGVtZW50LnJvd3MuZmxhdE1hcCgocm93OiBhbnkpID0+XG4gICAgICAgIC8vICAgICAgIC8vICAge1xuICAgICAgICAvLyAgICAgICAvLyAgICAgdmFsaWRhdGVRdWVzdGlvbnMocm93LmdyaWQpO1xuICAgICAgICAvLyAgICAgICAvLyAgICAgaWYgKCFyZXN1bHQuaXNWYWxpZCkgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgLy8gICAgICAgLy8gfSlcbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gICB9XG4gICAgICAgIC8vIH1cbiAgICAgICAgZWxzZSAgaWYgKChlbGVtZW50LmVudGl0eVR5cGUgPT09ICdRVUVTVElPTl9HUk9VUCcgfHwgZWxlbWVudC5lbnRpdHlUeXBlPT09J01VTFRJRklFTEQnKSYmIGVsZW1lbnQuZWxlbWVudC5yb3dzKSB7XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiBlbGVtZW50LmVsZW1lbnQucm93cykge1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB2YWxpZGF0ZVF1ZXN0aW9ucyhyb3cuZ3JpZCk7XG4gICAgICAgICAgICAgIGlmICghcmVzdWx0LmlzVmFsaWQgJiYgZWxlbWVudC5lbnRpdHlUeXBlIT0nTVVMVElGSUVMRCcpIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4geyBpc1ZhbGlkOiB0cnVlLCBtZXNzYWdlOiAnJywgcGFnZUluZGV4OiAwIH07XG4gICAgfTtcblxuICAgIGZvciAobGV0IHBhZ2VJbmRleCA9IDA7IHBhZ2VJbmRleCA8IGpzb25EYXRhLmxlbmd0aDsgcGFnZUluZGV4KyspIHtcbiAgICAgIGNvbnN0IHBhZ2UgPSBqc29uRGF0YVtwYWdlSW5kZXhdO1xuICAgICAgZm9yIChsZXQgcm93IG9mIHBhZ2Uucm93cykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB2YWxpZGF0ZVF1ZXN0aW9ucyhyb3cuZ3JpZCk7XG4gICAgICAgIHRoaXMuaW5WYWxpZFF1ZXN0aW9ucy5mb3JFYWNoKChtZXNzYWdlOiBzdHJpbmcsIGlkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnNldEludmFsaWQoaWQsbWVzc2FnZSwgcGFnZUluZGV4KTtcbn0pO1xuICAgICAgICB0aGlzLmluVmFsaWRRdWVzdGlvbnM9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgICAgIC8vIGlmICghcmVzdWx0LmlzVmFsaWQpIHtcbiAgICAgICAgLy8gICByZXR1cm4ge1xuICAgICAgICAvLyAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgIC8vICAgICBtZXNzYWdlOiBgUGFnZSAke3BhZ2VJbmRleCArIDF9OiAke3Jlc3VsdC5tZXNzYWdlfWAsXG4gICAgICAgIC8vICAgICBwYWdlSW5kZXg6IHBhZ2VJbmRleCxcbiAgICAgICAgLy8gICB9O1xuICAgICAgICAvLyB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY3VycmVudFBhZ2VJbmRleCA9IGpzb25EYXRhLmxlbmd0aC0xO1xuICAgIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmdldEZpcnN0SW52YWxpZCgpKSB7XG4gICAgICB0aGlzLm5hdmlnYXRlVG9GaXJzdEVycm9yKCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZTogYFBhZ2VgLFxuICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgaXNWYWxpZDogdHJ1ZSxcbiAgICAgIG1lc3NhZ2U6ICdGb3JtIGlzIHZhbGlkLicsXG4gICAgICBwYWdlSW5kZXg6IDAsXG4gICAgfTtcbiAgfVxuXG4gIHVwZGF0ZVN1YkZvcm1XaXRoU3VibWlzc2lvbnMoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMudXBkYXRlU3ViRm9ybSh0aGlzLnBhZ2VzLCBldmVudCk7XG4gIH1cblxuICB1cGRhdGVTdWJGb3JtID0gKHBhZ2VzOiBhbnlbXSwgdXBkYXRlZFN1YkZvcm06IGFueSkgPT4ge1xuICAgIHBhZ2VzLmZvckVhY2goKHBhZ2UpID0+IHtcbiAgICAgIHBhZ2Uucm93cy5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICByb3cuZ3JpZC5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBlbGVtZW50LmVudGl0eVR5cGUgPT09ICdTVUJGT1JNJyAmJlxuICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50LmlkID09PSB1cGRhdGVkU3ViRm9ybS5mb3JtSWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgZXhpc3Rpbmcgc3ViZm9ybSB3aXRoIHRoZSBuZXcgZGF0YVxuICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50ID0gdXBkYXRlZFN1YkZvcm07XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ1NVQkZPUk0nICYmXG4gICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQuaWQgIT09IHVwZGF0ZWRTdWJGb3JtLmZvcm1JZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gSGFuZGxlIG11bHRpcGxlIHN1YmZvcm1zIGxvZ2ljIGhlcmUgaWYgbmVlZGVkXG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ1FVRVNUSU9OJyAmJlxuICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50LmNoaWxkTG9naWNzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBSZWN1cnNpdmVseSB1cGRhdGUgY2hpbGQgbG9naWNzXG4gICAgICAgICAgICAvLyBlbGVtZW50LmVsZW1lbnQuY2hpbGRMb2dpY3MuZm9yRWFjaCgobG9naWM6IGFueSkgPT4ge1xuICAgICAgICAgICAgLy8gICBpZiAobG9naWMuc2hvd0xvZ2ljKSB7XG4gICAgICAgICAgICAvLyAgICAgdGhpcy51cGRhdGVTdWJGb3JtKGxvZ2ljLnJvd3MsIHVwZGF0ZWRTdWJGb3JtKTtcbiAgICAgICAgICAgIC8vICAgfVxuICAgICAgICAgICAgLy8gfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG5cbiBleHRyYWN0R3JvdXBlZFdlYmhvb2tEYXRhKHdlYmhvb2tzOiBhbnlbXSk6IHtcbiAgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBwYXRoVmFyaWFibGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICByZXF1ZXN0Qm9kaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufSB7XG4gIGNvbnN0IHJlc3VsdDoge1xuICAgIGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHBhdGhWYXJpYWJsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgcmVxdWVzdEJvZGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgfSA9IHtcbiAgICBoZWFkZXJzOiB7fSxcbiAgICBwYXJhbXM6IHt9LFxuICAgIHBhdGhWYXJpYWJsZXM6IHt9LFxuICAgIHJlcXVlc3RCb2RpZXM6IHt9XG4gIH07XG5cbiAgZm9yIChjb25zdCB3ZWJob29rIG9mIHdlYmhvb2tzID8/IFtdKSB7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHdlYmhvb2s/LmhlYWRlcnMgPz8gW10pIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZUZyb21TdG9yYWdlKGl0ZW0udmFsdWVTb3VyY2UsIGl0ZW0ua2V5TmFtZSk7XG4gICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgcmVzdWx0LmhlYWRlcnNbaXRlbS5rZXlOYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiB3ZWJob29rPy5wYXJhbXMgPz8gW10pIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZUZyb21TdG9yYWdlKGl0ZW0udmFsdWVTb3VyY2UsIGl0ZW0ua2V5TmFtZSk7XG4gICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgcmVzdWx0LnBhcmFtc1tpdGVtLmtleU5hbWVdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHdlYmhvb2s/LnBhdGhWYXJpYWJsZXMgPz8gW10pIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZUZyb21TdG9yYWdlKGl0ZW0udmFsdWVTb3VyY2UsIGl0ZW0ua2V5TmFtZSk7XG4gICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgcmVzdWx0LnBhdGhWYXJpYWJsZXNbaXRlbS5rZXlOYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiB3ZWJob29rPy5yZXF1ZXN0Qm9kaWVzID8/IFtdKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWVGcm9tU3RvcmFnZShpdGVtLnZhbHVlU291cmNlLCBpdGVtLmtleU5hbWUpO1xuICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIHJlc3VsdC5yZXF1ZXN0Qm9kaWVzW2l0ZW0ua2V5TmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5cbmdldFZhbHVlRnJvbVN0b3JhZ2Uoc291cmNlOiAnTE9DQUxfU1RPUkFHRScgfCAnU0VTU0lPTl9TVE9SQUdFJywga2V5OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcblxuICBpZiAoc291cmNlID09PSAnTE9DQUxfU1RPUkFHRScpIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICBpZiAoc291cmNlID09PSAnU0VTU0lPTl9TVE9SQUdFJykgcmV0dXJuIHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgcmV0dXJuIG51bGw7XG59XG5cblxuXG59XG4iLCI8ZGl2IGNsYXNzPVwib3V0ZXItY29udGFpbmVyXCI+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJpc0xvYWRpbmdQYWdlc1wiPlxuICAgIDxuZ3gtc2tlbGV0b24tbG9hZGVyIGNvdW50PVwiNVwiPjwvbmd4LXNrZWxldG9uLWxvYWRlcj5cbjwvbmctY29udGFpbmVyPlxuXG4gIDxkaXYgY2xhc3M9XCJoZWFkIGNvbnRhaW5lclwiICpuZ0lmPVwiIXNraXBNYXJnaW5cIj5cbiAgICA8bGliLWhlYWRlciBbbmFtZV09XCJuYW1lXCIgW3NraXBNYXJnaW5dPVwic2tpcE1hcmdpblwiPjwvbGliLWhlYWRlcj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJib2R5XCIgW25nQ2xhc3NdPVwieyAnc2tpcC1tYXJnaW4nOiBza2lwTWFyZ2luLGNvbnRhaW5lcjogIXNraXBNYXJnaW59XCI+XG5cbiAgICA8bGliLXN1Ym1pc3Npb24tY29udGFpbmVyIFtwYXJlbnRRdWVzdGlvbkFuc3dlcnNdPVwicGFyZW50UXVlc3Rpb25BbnN3ZXJzXCJcbiAgICAqbmdJZj1cInBhcmVudFF1ZXN0aW9uQW5zd2Vyc1wiPjwvbGliLXN1Ym1pc3Npb24tY29udGFpbmVyPlxuXG4gICAgPGxpYi1uYXZpZ2F0aW9uLXRhYnNcbiAgICAgICpuZ0lmPVwibmF2aWdhdGlvbiA9PSAnVEFCJ1wiXG4gICAgICBbc2tpcE1hcmdpbl09XCJza2lwTWFyZ2luXCJcbiAgICAgIFtza2lwVmFsaWRhdGlvbl09XCJza2lwVmFsaWRhdGlvblwiXG4gICAgICBbcGFnZXNdPVwicGFnZXNcIlxuICAgICAgW2N1cnJlbnRQYWdlSW5kZXhdPVwiY3VycmVudFBhZ2VJbmRleFwiXG4gICAgICAocGFnZUNoYW5nZWQpPVwic2V0Q3VycmVudFBhZ2UoJGV2ZW50KVwiXG4gICAgICAoc3VibWl0RW1pdCk9XCJzdWJtaXRGb3JtKClcIlxuICAgICAgW3BhZ2VEZXRhaWxzXT1cInBhZ2VEZXRhaWxzXCJcbiAgICAgIFtlbGlnaWJsZUZvclN1Ym1pc3Npb25dPVwiZWxpZ2libGVGb3JTdWJtaXNzaW9uXCJcbiAgICAgIFtlZGl0XT1cImVkaXRcIlxuICAgICAgW2FjY2VwdGVkTGFuZ3VhZ2VdID0gXCJhY2NlcHRlZExhbmd1YWdlXCJcbiAgICAgIFtpc0FjdGlvblRyaWdnZXJlZF09XCJpc0FjdGlvblRyaWdnZXJlZFwiXG4gICAgICBbcHJpbWFyeUNvbG9yXT1cInByaW1hcnlDb2xvclwiXG4gICAgICBbc2Vjb25kYXJ5Q29sb3JdPVwic2Vjb25kYXJ5Q29sb3JcIlxuICAgICAgW21hcmtBbGxRdWVzdGlvbnNBc1JlcXVpcmVkXT1cIm1hcmtBbGxRdWVzdGlvbnNBc1JlcXVpcmVkXCJcbiAgICAgIFtzdWJtaXNzaW9uSW5Qcm9ncmVzc109XCJzdWJtaXNzaW9uSW5Qcm9ncmVzc1wiXG4gICAgICAoc3ViRm9ybUNoYW5nZSk9XCJ1cGRhdGVTdWJGb3JtV2l0aFN1Ym1pc3Npb25zKCRldmVudClcIlxuICAgICAgKHJvd1NldEluZGV4KT1cImxvYWRNb3JlRGF0YSgkZXZlbnQpXCJcbiAgICA+PC9saWItbmF2aWdhdGlvbi10YWJzPlxuICAgIDxsaWItbmV4dC1wcmV2LW5hdmlnYXRpb25cbiAgICAgICpuZ0lmPVwibmF2aWdhdGlvbiA9PSAnTkVYVF9BTkRfUFJFVklPVVNfQlVUVE9OJ1wiXG4gICAgICBbc2tpcE1hcmdpbl09XCJza2lwTWFyZ2luXCJcbiAgICAgIFtjdXJyZW50UGFnZUluZGV4XT1cImN1cnJlbnRQYWdlSW5kZXhcIlxuICAgICAgW3BhZ2VEZXRhaWxzXT1cInBhZ2VEZXRhaWxzXCJcbiAgICAgIChyb3dTZXRJbmRleCk9XCJsb2FkTW9yZURhdGEoJGV2ZW50KVwiXG4gICAgICBbcGFnZXNdPVwicGFnZXNcIlxuICAgICAgW3ByZXZpb3VzUGFnZV09XCJwcmV2aW91c1BhZ2VcIlxuICAgICAgW2lzQWN0aW9uVHJpZ2dlcmVkXT1cImlzQWN0aW9uVHJpZ2dlcmVkXCJcbiAgICAgIFtjdXJyZW50UGFnZV09XCJjdXJyZW50UGFnZVwiXG4gICAgICBbcHJpbWFyeUNvbG9yXT1cInByaW1hcnlDb2xvclwiXG4gICAgICBbc2Vjb25kYXJ5Q29sb3JdPVwic2Vjb25kYXJ5Q29sb3JcIlxuICAgICAgW25leHRQYWdlXT1cIm5leHRQYWdlXCJcbiAgICAgIChuYXZpZ2F0ZU5leHQpPVwibmF2aWdhdGVUb05leHRQYWdlKClcIlxuICAgICAgKG5hdmlnYXRlUHJldmlvdXMpPVwibmF2aWdhdGVUb1ByZXZpb3VzUGFnZSgpXCJcbiAgICAgIFthY2NlcHRlZExhbmd1YWdlXSA9IFwiYWNjZXB0ZWRMYW5ndWFnZVwiXG4gICAgICAoc3VibWl0RW1pdCk9XCJzdWJtaXRGb3JtKClcIlxuICAgICAgW2VkaXRdPVwiZWRpdFwiXG4gICAgICBbZWxpZ2libGVGb3JTdWJtaXNzaW9uXT1cImVsaWdpYmxlRm9yU3VibWlzc2lvblwiXG4gICAgICBbc3VibWlzc2lvbkluUHJvZ3Jlc3NdPVwic3VibWlzc2lvbkluUHJvZ3Jlc3NcIlxuICAgICAgKHN1YkZvcm1DaGFuZ2UpPVwidXBkYXRlU3ViRm9ybVdpdGhTdWJtaXNzaW9ucygkZXZlbnQpXCJcbiAgICA+PC9saWItbmV4dC1wcmV2LW5hdmlnYXRpb24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=