principal-dashboard-lib-v2 0.0.21 → 0.0.23

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.
@@ -141,7 +141,7 @@ export class PrincipalDashboardLibV2Service {
141
141
  let listOfUser = {};
142
142
  if (usersMetadata[i].userId != "") {
143
143
  userId = usersMetadata[i].userId;
144
- console.log("--chartDataUserWise-->>", usersMetadata[i].fullName);
144
+ //console.log("--chartDataUserWise-->>",usersMetadata[i].terminalIP)
145
145
  if (usersMetadata[i].fullName !== undefined) {
146
146
  userName = usersMetadata[i].fullName; // get name of user w.r.t. ID
147
147
  }
@@ -164,7 +164,9 @@ export class PrincipalDashboardLibV2Service {
164
164
  }
165
165
  }
166
166
  for (var i = 0; i < usersMetadataMatrix.length; i++) {
167
+ console.log('usersMetadataMatrix-->', usersMetadataMatrix[i].userName);
167
168
  usersMetadataMatrix.forEach(element => {
169
+ console.log('element.userName-->>', element.userName);
168
170
  if (usersMetadataMatrix[i].userName === element.userName) {
169
171
  usermetadataMatrixUpdated.push(usersMetadataMatrix[i]); //array of same name users
170
172
  usersMetadataMatrix.splice(i, 1); //delete the same name users from usermetadataMatrix
@@ -243,6 +245,8 @@ export class PrincipalDashboardLibV2Service {
243
245
  let userName;
244
246
  let userSubjects;
245
247
  let terminalLocation;
248
+ let launchedFrom = [];
249
+ console.log('myuserConsole', userConsole[index]);
246
250
  //----------//user iD
247
251
  if (userConsole[index].userId !== undefined) {
248
252
  userId = userConsole[index].userId; // get name of user w.r.t. ID
@@ -297,14 +301,21 @@ export class PrincipalDashboardLibV2Service {
297
301
  if (userConsoleResources.userConsoleResource !== undefined) {
298
302
  // satyajit resource wise duration added
299
303
  userConsoleResources.userConsoleResource.forEach(item => {
304
+ console.log("lookingFor: ", item);
300
305
  resourceMetauserConsoleData.push(item.resourceId); // get name of user w.r.t. ID
301
306
  resourceDurationFromConsole.push(item.duration);
307
+ if (item.launchedFrom) {
308
+ launchedFrom.push(item.launchedFrom);
309
+ }
310
+ //
302
311
  });
303
312
  // resourceMetauserConsoleData = userConsoleResources.userConsoleResource[index]resourceId; // get name of user w.r.t. ID
304
313
  }
305
314
  else {
315
+ console.log("lookingFor: ELSE ");
306
316
  resourceMetauserConsoleData = [];
307
317
  resourceDurationFromConsole = [];
318
+ launchedFrom = [];
308
319
  }
309
320
  }
310
321
  //----------// userName and userSubjects
@@ -337,6 +348,7 @@ export class PrincipalDashboardLibV2Service {
337
348
  terminalIP: terminalIP,
338
349
  resourceMetauserConsoleData: resourceMetauserConsoleData,
339
350
  resourceDurationFromConsole: resourceDurationFromConsole,
351
+ launchedFrom: launchedFrom,
340
352
  duration: duration,
341
353
  terminalLocation: terminalLocation,
342
354
  userSubjects: userSubjects
@@ -358,17 +370,27 @@ export class PrincipalDashboardLibV2Service {
358
370
  let dataTableforChart = new Array();
359
371
  dataTableforChart = [];
360
372
  if (this.userConsoleData) {
361
- console.log("chartDataUserWiseNew-->>", this.userConsoleData);
362
373
  if (this.userConsoleData.length > 0) {
363
374
  for (let i = 0; i < this.userConsoleData.length; i++) {
375
+ console.log("chartDataUserWiseNew-->>", this.userConsoleData);
376
+ //console.log("chartDataUserWiseNew-->>",this.userConsoleData.userName)
377
+ if (typeof this.userConsoleData[i].userName === undefined) {
378
+ this.userConsoleData[i].userName = (Math.floor(Math.random() * 100)).toString();
379
+ }
380
+ /// SATYAJIT TO CHECK 19 SEPT.
364
381
  if (this.userConsoleData[i].userName === undefined) {
365
382
  this.userConsoleData[i].userName = "-";
383
+ //this.userConsoleData.splice(i, 1);
366
384
  }
367
- if (this.userConsoleData[i].userName === "-" || this.userConsoleData[i].userName === "--") {
368
- this.userConsoleData.splice(i, 1); // 2nd parameter means remove one item only
385
+ /*
386
+ if(this.userConsoleData[i].userName === "-"){
387
+ this.userConsoleData.splice(i, 1); // 2nd parameter means remove one item only
388
+ }*/
389
+ //if(this.userConsoleData[i].userName !== undefined || this.userConsoleData[i].userName !== '-' || this.userConsoleData[i].userName !== '--')
390
+ {
391
+ let userData = [this.userConsoleData[i].userName, this.userConsoleData[i].startTime, this.userConsoleData[i].endTime];
392
+ dataTableforChart.push(userData);
369
393
  }
370
- let userData = [this.userConsoleData[i].userName, this.userConsoleData[i].startTime, this.userConsoleData[i].endTime];
371
- dataTableforChart.push(userData);
372
394
  //console.log("chartDataUserWiseNewNew-->>",userData)
373
395
  }
374
396
  }
@@ -465,15 +487,21 @@ export class PrincipalDashboardLibV2Service {
465
487
  }
466
488
  setTimeout(() => {
467
489
  for (let i = 0; i < AlluserDetails.length; i++) {
468
- console.log("alluser-3->>", AlluserDetails[i].userName);
469
- if (AlluserDetails[i].userName === undefined) {
470
- AlluserDetails[i].userName = "--";
471
- }
472
- if (AlluserDetails[i].userName === "--") {
473
- //AlluserDetails.splice(i, 1); // 2nd parameter means remove one item only
490
+ console.log("alluser-3->>", AlluserDetails[i]);
491
+ if (AlluserDetails[i].userName == undefined) {
492
+ //AlluserDetails[i].userName = "--"
493
+ AlluserDetails.splice(i, 1); // 2nd parameter means remove one item only
494
+ }
495
+ //if(AlluserDetails[i].userName !== undefined || AlluserDetails[i].userName !== '-' || AlluserDetails[i].userName !== '--')
496
+ {
497
+ if (AlluserDetails[i].userName === "--") {
498
+ AlluserDetails.splice(i, 1); // 2nd parameter means remove one item only
499
+ }
500
+ setTimeout(function () {
501
+ let userData = [AlluserDetails[i].userName, AlluserDetails[i].startTime, AlluserDetails[i].endTime];
502
+ dataTableforChart.push(userData);
503
+ }, 300);
474
504
  }
475
- let userData = [AlluserDetails[i].userName, AlluserDetails[i].startTime, AlluserDetails[i].endTime];
476
- dataTableforChart.push(userData);
477
505
  }
478
506
  }, 50);
479
507
  /*
@@ -535,7 +563,7 @@ export class PrincipalDashboardLibV2Service {
535
563
  return { forChartData: dataTableforChart, fordurationTable: allRoomsDetails };
536
564
  }
537
565
  dataForTableView(userConsoleMatrix, resourceMetadataMatrix) {
538
- console.log("AAA userConsoleMatrix", userConsoleMatrix);
566
+ console.log("AAA userConsoleMatrix", userConsoleMatrix, "-resourceMetadataMatrix->", resourceMetadataMatrix);
539
567
  let currentDate;
540
568
  let resourceMatrixForTableChart = new Array();
541
569
  let resourceMatrixForExcel = new Array();
@@ -561,6 +589,7 @@ export class PrincipalDashboardLibV2Service {
561
589
  let resourceArrayForExcel = new Array();
562
590
  let resourceArrayForTableChart = new Array();
563
591
  let userConsoleDataMatrix = new Array();
592
+ let launchedFrom;
564
593
  resourceArrayForTableChart = [];
565
594
  userConsoleDataMatrix = [];
566
595
  //----------------- for subject and Name
@@ -580,6 +609,11 @@ export class PrincipalDashboardLibV2Service {
580
609
  let roomDetail = location + ' ' + terminalIP;
581
610
  resourceMetadataIDs = userConsoleMatrix[i].resourceMetauserConsoleData;
582
611
  resourceMetadataIDsDuration = userConsoleMatrix[i].resourceDurationFromConsole;
612
+ //console.log('mlaunchedFrom-->> ',(typeof userConsoleMatrix[i].launchedFrom));
613
+ //console.log('mlaunchedFrom-->> ',( userConsoleMatrix[i].launchedFrom));
614
+ let launchDataArr = Array(userConsoleMatrix[i].launchedFrom);
615
+ console.log('mlaunchedFrom len-->> ', launchDataArr);
616
+ launchedFrom = launchDataArr;
583
617
  if (resourceMetadataIDs.length === 0) {
584
618
  subject = undefined;
585
619
  grade = undefined;
@@ -588,7 +622,7 @@ export class PrincipalDashboardLibV2Service {
588
622
  AssestDetail = undefined;
589
623
  resourceTitle = undefined;
590
624
  resourceType = undefined;
591
- resourceArrayForTableChart = [teacherName, teacherSubject, currentDate, startTime, endTime, duration, roomDetail, subject, grade, chapter, teachingpoint, AssestDetail];
625
+ resourceArrayForTableChart = [teacherName, teacherSubject, currentDate, startTime, endTime, duration, roomDetail, subject, grade, chapter, teachingpoint, AssestDetail, launchedFrom];
592
626
  resourceMatrixForTableChart.push(resourceArrayForTableChart);
593
627
  }
594
628
  else {
@@ -611,7 +645,8 @@ export class PrincipalDashboardLibV2Service {
611
645
  AssestDetail = this.getDisplaytypeValue(resourceMetadataMatrix[i].type) + " : " + resourceMetadataMatrix[i].title + ' : ' + this.convertSeconds(resourceMetadataIDsDuration[k]);
612
646
  }
613
647
  //AssestDetail = this.getDisplaytypeValue(resourceMetadataMatrix[i].type) + " : " + resourceMetadataMatrix[i].title + ' : ' + resourceMetadataIDsDuration[k];
614
- resourceArrayForTableChart = [teacherName, teacherSubject, currentDate, startTime, endTime, duration, roomDetail, subject, grade, chapter, teachingpoint, AssestDetail];
648
+ console.log('roomDetail', roomDetail);
649
+ resourceArrayForTableChart = [teacherName, teacherSubject, currentDate, startTime, endTime, duration, roomDetail, subject, grade, chapter, teachingpoint, AssestDetail, launchedFrom];
615
650
  resourceMatrixForTableChart.push(resourceArrayForTableChart);
616
651
  teacherName = undefined;
617
652
  teacherSubject = undefined;
@@ -784,4 +819,4 @@ PrincipalDashboardLibV2Service.decorators = [
784
819
  },] }
785
820
  ];
786
821
  PrincipalDashboardLibV2Service.ctorParameters = () => [];
787
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbmNpcGFsLWRhc2hib2FyZC1saWItdjIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3ByaW5jaXBhbC1kYXNoYm9hcmQtbGliLXYyL3NyYy9saWIvcHJpbmNpcGFsLWRhc2hib2FyZC1saWItdjIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBVyxlQUFlLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQU0vRCxNQUFNLE9BQU8sOEJBQThCO0lBbUN6QztRQTdCSywyQkFBc0IsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQzdDLDRCQUF1QixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVyRSw0QkFBdUIsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQzlDLDZCQUF3QixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV0RSxnQkFBVyxHQUFRLEVBQUUsQ0FBQztRQUNyQixhQUFRLEdBQVEsRUFBRSxDQUFDO1FBQ25CLGdCQUFXLEdBQVEsRUFBRSxDQUFDO1FBQ3RCLGlCQUFZLEdBQVEsRUFBQyxXQUFXLEVBQUMsRUFBRSxFQUFDLGVBQWUsRUFBQyxFQUFFLEVBQUMsQ0FBQztRQUN4RCxvQkFBZSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7UUFDOUIscUJBQWdCLEdBQVEsRUFBRSxDQUFDO1FBQzNCLGFBQVEsR0FBTyxLQUFLLENBQUM7UUFHNUIsdUJBQXVCO1FBQ2hCLGNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbEQsZUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEQscURBQXFEO1FBQzlDLG9CQUFlLEdB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Q0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNoQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFO2dCQUN0QixZQUFZLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQzthQUM5QjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxZQUFZLENBQUM7SUFFdEIsQ0FBQztJQUVELGNBQWMsQ0FBQyxPQUFPO1FBQ3BCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUN0QyxPQUFPLEdBQUcsT0FBTyxLQUFLLGdCQUFnQixHQUFHLENBQUM7SUFDNUMsQ0FBQzs7OztZQTl6QkYsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgQmVoYXZpb3JTdWJqZWN0LCBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUHJpbmNpcGFsRGFzaGJvYXJkTGliVjJTZXJ2aWNlIHtcbnB1YmxpYyByZXNvdXJlTWV0YURhdGE6YW55O1xucHVibGljIHVzZXJzTWV0YURhdGE6YW55O1xucHVibGljIHNjaG9vbFRlcm1pbmFsRGF0YTphbnk7XG5wdWJsaWMgdXNlckNvbnNvbGVEYXRhOmFueTtcblxucHVibGljIGlzUmVzb3VyZU1ldGFEYXRhUmVhZHkgPSBuZXcgUmVwbGF5U3ViamVjdCgpO1xucHVibGljIGlzUmVzb3VyZU1ldGFEYXRhUmVhZHkkID0gdGhpcy5pc1Jlc291cmVNZXRhRGF0YVJlYWR5LmFzT2JzZXJ2YWJsZSgpO1xuXG5wdWJsaWMgaXNVc2VyUmVxaXVyZWREYXRhUmVhZHkgPSBuZXcgUmVwbGF5U3ViamVjdCgpO1xucHVibGljIGlzVXNlclJlcWl1cmVkRGF0YVJlYWR5JCA9IHRoaXMuaXNVc2VyUmVxaXVyZWREYXRhUmVhZHkuYXNPYnNlcnZhYmxlKCk7XG5cbiBwdWJsaWMgbXljaGFydFR5cGU6IGFueSA9ICcnO1xuICBwdWJsaWMgZGF0YVR5cGU6IGFueSA9ICcnO1xuICBwdWJsaWMgdXNlckFsbERhdGE6IGFueSA9ICcnO1xuICBwdWJsaWMgdXNlck1ldGFkYXRhOiBhbnkgPSB7dXNlckRldGFpbHM6W10scmVzb3VyY2VEZXRhaWxzOltdfTtcbiAgcHVibGljIHJlc291cmVNZXRhZGF0YSA9IG5ldyBBcnJheSgpO1xuICBwdWJsaWMgdXNlckRldGFpbE9iamVjdDogYW55ID0ge307XG4gIHB1YmxpYyB1c2VybGlzdDphbnkgPSBmYWxzZTtcbiAgcHVibGljIG15RW5kVGltZSA6YW55O1xuIFxuICAvL2ZvciBjaGFuZ2UgY2hhcnQgVHlwZVxuICBwdWJsaWMgY2hhcnRUeXBlID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0aGlzLm15Y2hhcnRUeXBlKTtcbiAgcHVibGljIGNoYXJ0VHlwZSQgPSB0aGlzLmNoYXJ0VHlwZS5hc09ic2VydmFibGUoKTtcbiAgLy9mb3IgY2hhbmdlIHVzZXJXaXNlIFRvIGNsYXNzUm9vbSB3aXNlIG9yIHZpY2UgdmVyc2FcbiAgcHVibGljIGlzVXNlcldpc2VfZGF0YSA9IG5ldyBCZWhhdmlvclN1YmplY3QodHJ1ZSk7XG4gIHB1YmxpYyBpc1VzZXJXaXNlX2RhdGEkID0gdGhpcy5pc1VzZXJXaXNlX2RhdGEuYXNPYnNlcnZhYmxlKCk7XG4gIC8vIGZvciBhbGwgdXNlciBhbmQgY3VycmVudCB1c2VyIGluZm9ybWF0aW9uXG4gIHB1YmxpYyBpc0FsbFVzZXJzID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0aGlzLnVzZXJsaXN0KTtcbiAgcHVibGljIGlzQWxsVXNlcnMkID0gdGhpcy5pc0FsbFVzZXJzLmFzT2JzZXJ2YWJsZSgpO1xuICAvL2ZvciBnZXQgZGV0YWlscyBvZiBzZWxlY3RlZCB1c2VyXG4gIHB1YmxpYyBkZXRhaWxlZHZpZXdEYXRhID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0aGlzLnVzZXJNZXRhZGF0YSk7XG4gIHB1YmxpYyBkZXRhaWxlZHZpZXdEYXRhJCA9IHRoaXMuZGV0YWlsZWR2aWV3RGF0YS5hc09ic2VydmFibGUoKTtcblxuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG4gXG4gIGdlbmFyYXRlUmVzb3Vyc2VSZXFpdXJlZERhdGEoZGF0YTogYW55KTogYW55IHtcbiAgICB0aGlzLmlzUmVzb3VyZU1ldGFEYXRhUmVhZHkubmV4dChmYWxzZSk7XG4gICAgbGV0IHJlc291cmNlTWV0YWRhdGFNYXRyaXggPSBuZXcgQXJyYXkoKTtcbiAgICBcbiAgICAgIGlmKGRhdGEgJiYgZGF0YSAhPT0gbnVsbCl7XG4gICAgICAgIGxldCByZXNvdXNlSUQ6IGFueTtcbiAgICAgICAgbGV0IHRpdGxlOiBhbnk7XG4gICAgICAgIGxldCBzdWJqZWN0OiBhbnk7XG4gICAgICAgIGxldCBncmFkZTogYW55O1xuICAgICAgICBsZXQgY2hhcHRlcjogYW55O1xuICAgICAgICBsZXQgdGVhY2hpbmdwb2ludDogYW55O1xuICAgICAgICBsZXQgdHlwZTogYW55O1xuICAgICAgICBsZXQgcmVzb3VyY2VNZXRhZGF0YSA9IGRhdGEucmVzb3VyY2VzTWV0YWRhdGEucmVzb3VyY2VNZXRhZGF0YTtcbiAgICAgICBcbiAgICAgICAgaWYocmVzb3VyY2VNZXRhZGF0YSE9IHVuZGVmaW5lZCAmJiByZXNvdXJjZU1ldGFkYXRhLmxlbmd0aD4wKSB7XG4gICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzb3VyY2VNZXRhZGF0YS5sZW5ndGg7aSsrKXtcbiAgICAgICAgICAgIC8vLS0tLS0tLS0tLS8vcmVzb3VzZUlEXG4gICAgICAgICAgICByZXNvdXNlSUQgPSByZXNvdXJjZU1ldGFkYXRhW2ldLnJlc291cmNlSWQ7XG4gICAgICAgICAgICAvLy0tLS0tLS0tLS0vL3N1YmplY3RcbiAgICAgICAgICAgIGlmIChyZXNvdXJjZU1ldGFkYXRhW2ldLnN1YmplY3QgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGlmIChyZXNvdXJjZU1ldGFkYXRhW2ldLnN1YmplY3QudGl0bGUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgc3ViamVjdCA9IHJlc291cmNlTWV0YWRhdGFbaV0uc3ViamVjdC50aXRsZTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdWJqZWN0ID0gJyc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN1YmplY3QgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vLS0tLS0tLS0tLS8vZ3JhZGVcbiAgICAgICAgICAgIGlmIChyZXNvdXJjZU1ldGFkYXRhW2ldLmdyYWRlICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBpZiAocmVzb3VyY2VNZXRhZGF0YVtpXS5ncmFkZS50aXRsZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBncmFkZSA9IHJlc291cmNlTWV0YWRhdGFbaV0uZ3JhZGUudGl0bGU7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZ3JhZGUgPSAnJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZ3JhZGUgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAvLy0tLS0tLS0tLS0vL2NoYXB0ZXJcbiAgICAgICAgICBpZiAocmVzb3VyY2VNZXRhZGF0YVtpXS5jaGFwdGVyICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHJlc291cmNlTWV0YWRhdGFbaV0uY2hhcHRlci50aXRsZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgY2hhcHRlciA9IHJlc291cmNlTWV0YWRhdGFbaV0uY2hhcHRlci50aXRsZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNoYXB0ZXIgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2hhcHRlciA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgIC8vLS0tLS0tLS0tLS8vdGVhY2hpbmdwb2ludFxuICAgICAgICAgIGlmIChyZXNvdXJjZU1ldGFkYXRhW2ldLnRlYWNoaW5ncG9pbnQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAocmVzb3VyY2VNZXRhZGF0YVtpXS50ZWFjaGluZ3BvaW50LnRpdGxlICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB0ZWFjaGluZ3BvaW50ID0gcmVzb3VyY2VNZXRhZGF0YVtpXS50ZWFjaGluZ3BvaW50LnRpdGxlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGVhY2hpbmdwb2ludCA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0ZWFjaGluZ3BvaW50ID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vLS0tLS0tLS0tLS8vdHlwZVxuICAgICAgICAgIGlmIChyZXNvdXJjZU1ldGFkYXRhW2ldLnR5cGUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHR5cGUgPSB0aGlzLmdldERpc3BsYXl0eXBlVmFsdWUocmVzb3VyY2VNZXRhZGF0YVtpXS50eXBlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHR5cGUgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgLy8tLS0tLS0tLS0tLy90aXRsZVxuICAgICAgICAgIGlmIChyZXNvdXJjZU1ldGFkYXRhW2ldLnRpdGxlICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGl0bGUgPSByZXNvdXJjZU1ldGFkYXRhW2ldLnRpdGxlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aXRsZSA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCByZXNvdXJjZU1ldGF1c2VyQ29uc29sZURhdGEgPSB7XG4gICAgICAgICAgICAgIHJlc291c2VJRDpyZXNvdXNlSUQsXG4gICAgICAgICAgICAgIHN1YmplY3Q6c3ViamVjdCxcbiAgICAgICAgICAgICAgZ3JhZGU6Z3JhZGUsXG4gICAgICAgICAgICAgIGNoYXB0ZXI6Y2hhcHRlcixcbiAgICAgICAgICAgICAgdGVhY2hpbmdwb2ludDp0ZWFjaGluZ3BvaW50LFxuICAgICAgICAgICAgICB0eXBlOnR5cGUsXG4gICAgICAgICAgICAgIHRpdGxlOnRpdGxlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvdXJjZU1ldGFkYXRhTWF0cml4LnB1c2gocmVzb3VyY2VNZXRhdXNlckNvbnNvbGVEYXRhKTtcbiAgICAgICAgICAgIHRoaXMucmVzb3VyZU1ldGFEYXRhID0gcmVzb3VyY2VNZXRhZGF0YU1hdHJpeDtcbiAgICAgICAgICAgIHRoaXMuaXNSZXNvdXJlTWV0YURhdGFSZWFkeS5uZXh0KHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIC8vIHRoaXMucmVzb3VyZU1ldGFEYXRhID0gcmVzb3VyY2VNZXRhZGF0YU1hdHJpeDtcbiAgICByZXR1cm4gcmVzb3VyY2VNZXRhZGF0YU1hdHJpeDtcbiAgfVxuICBnZW5hcmF0ZVVzZXJSZXFpdXJlZERhdGEoZGF0YTogYW55KTogYW55IHtcbiAgICB0aGlzLmlzVXNlclJlcWl1cmVkRGF0YVJlYWR5Lm5leHQoZmFsc2UpO1xuICAgIGxldCB1c2Vyc01ldGFkYXRhTWF0cml4ID0gbmV3IEFycmF5KCk7XG4gICAgbGV0IHVzZXJtZXRhZGF0YU1hdHJpeFVwZGF0ZWQgPSBuZXcgQXJyYXkoKTtcbiAgICBsZXQgc2Nob29sVGVybWluYWxNYXRyaXggPSBuZXcgQXJyYXkoKTtcbiAgICBsZXQgdXNlckNvbnNvbGVNYXRyaXggPSBuZXcgQXJyYXkoKTtcbiAgICBpZihkYXRhICYmIGRhdGEgIT09IG51bGwpe1xuICAgICAgbGV0IHVzZXJDb25zb2xlID0gZGF0YS51c2Vyc0NvbnNvbGUudXNlckNvbnNvbGU7XG4gICAgICBsZXQgdXNlcnNNZXRhZGF0YSA9IGRhdGEudXNlcnNNZXRhZGF0YS51c2VyTWV0YWRhdGE7XG4gICAgICBsZXQgc2Nob29sVGVybWluYWwgPSBkYXRhLnNjaG9vbFRlcm1pbmFscy5zY2hvb2xUZXJtaW5hbDtcbiAgICAgIFxuICAgICAgaWYodXNlcnNNZXRhZGF0YSE9IG51bGwgJiYgdXNlcnNNZXRhZGF0YS5sZW5ndGggPiAwKXtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB1c2Vyc01ldGFkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgbGV0IHVzZXJJZDogYW55O1xuICAgICAgICAgIGxldCB1c2VyTmFtZTogYW55O1xuICAgICAgICAgIGxldCB1c2VyU3ViamVjdHM6IGFueTtcbiAgICAgICAgICBsZXQgbGlzdE9mVXNlcjphbnkgPSB7fVxuICAgICAgICAgIGlmICh1c2Vyc01ldGFkYXRhW2ldLnVzZXJJZCE9XCJcIikge1xuICAgICAgICAgICAgdXNlcklkID0gdXNlcnNNZXRhZGF0YVtpXS51c2VySWQ7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIi0tY2hhcnREYXRhVXNlcldpc2UtLT4+XCIsdXNlcnNNZXRhZGF0YVtpXS5mdWxsTmFtZSlcbiAgICAgICAgICAgIGlmICh1c2Vyc01ldGFkYXRhW2ldLmZ1bGxOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgdXNlck5hbWUgPSB1c2Vyc01ldGFkYXRhW2ldLmZ1bGxOYW1lIC8vIGdldCBuYW1lIG9mIHVzZXIgdy5yLnQuIElEXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB1c2VyTmFtZSA9ICcnO1xuICAgICAgICAgICAgfVxuICBcbiAgICAgICAgICAgIGlmICh1c2Vyc01ldGFkYXRhW2ldLnVzZXJTdWJqZWN0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHVzZXJTdWJqZWN0cyA9IHVzZXJzTWV0YWRhdGFbaV0udXNlclN1YmplY3RzIC8vIGdldCBuYW1lIG9mIHVzZXIgdy5yLnQuIElEXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB1c2VyU3ViamVjdHMgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgIFxuICAgICAgICAgICAgbGlzdE9mVXNlciA9IHtcbiAgICAgICAgICAgICAgdXNlcklkOnVzZXJJZCwgXG4gICAgICAgICAgICAgIHVzZXJOYW1lOnVzZXJOYW1lLCBcbiAgICAgICAgICAgICAgdXNlclN1YmplY3RzOnVzZXJTdWJqZWN0c1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHVzZXJzTWV0YWRhdGFNYXRyaXgucHVzaChsaXN0T2ZVc2VyKTsgICAgICAgICAgICAgICAgICAgICAgLy8gYXJyYXkgb2YgYWxsIHVzZXJzXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVzZXJzTWV0YWRhdGFNYXRyaXgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdXNlcnNNZXRhZGF0YU1hdHJpeC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgIGlmICh1c2Vyc01ldGFkYXRhTWF0cml4W2ldLnVzZXJOYW1lID09PSBlbGVtZW50LnVzZXJOYW1lKSB7XG4gICAgICAgICAgICB1c2VybWV0YWRhdGFNYXRyaXhVcGRhdGVkLnB1c2godXNlcnNNZXRhZGF0YU1hdHJpeFtpXSk7ICAvL2FycmF5IG9mIHNhbWUgbmFtZSB1c2Vyc1xuICAgICAgICAgICAgdXNlcnNNZXRhZGF0YU1hdHJpeC5zcGxpY2UoaSwgMSk7ICAgICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUgdGhlIHNhbWUgbmFtZSB1c2VycyBmcm9tIHVzZXJtZXRhZGF0YU1hdHJpeFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVzZXJtZXRhZGF0YU1hdHJpeFVwZGF0ZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gY29uc3QgcmFuZG9tTnVtYmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAvLyByYW5kb21OdW1iZXIuaW5uZXJIVE1MID0gaS50b1N0cmluZygpO1xuICAgICAgICAvL3VzZXJtZXRhZGF0YU1hdHJpeFVwZGF0ZWRbaV0udXNlck5hbWUgPSB1c2VybWV0YWRhdGFNYXRyaXhVcGRhdGVkW2ldLnVzZXJOYW1lICsgXCIgLS0tIFwiICsgaTtcbiAgICAgICAgLy9zYXR5YWppdCAyOCBhdWcgMjAyNCByZW1vdmVkIGNvdW50IGZyb20gdXNlck5hbWVcbiAgICAgICAgdXNlcm1ldGFkYXRhTWF0cml4VXBkYXRlZFtpXS51c2VyTmFtZSA9IHVzZXJtZXRhZGF0YU1hdHJpeFVwZGF0ZWRbaV0udXNlck5hbWU7XG4gICAgICAgIHVzZXJzTWV0YWRhdGFNYXRyaXgucHVzaCh1c2VybWV0YWRhdGFNYXRyaXhVcGRhdGVkW2ldKTsgICAgICAgICAgICAvL2FkZGluZyBzYW1lIG5hbWUgdXNlcnMgaW4gdXNlcm1ldGFkYXRhTWF0cml4IHdpdGggc29tZSByYW5kb20gY2hhcmF0b3JzXG4gICAgICAgIHRoaXMudXNlcnNNZXRhRGF0YSA9IHVzZXJzTWV0YWRhdGFNYXRyaXg7XG4gICAgICB9XG4gICAgICBpZihzY2hvb2xUZXJtaW5hbCAhPSBudWxsICYmIHNjaG9vbFRlcm1pbmFsLmxlbmd0aCA+IDApe1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjaG9vbFRlcm1pbmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgbGV0IHNjaG9vbElkOmFueTtcbiAgICAgICAgICBsZXQgdGVybWluYWxLZXk6YW55O1xuICAgICAgICAgIGxldCB0ZXJtaW5hbFR5cGU6YW55O1xuICAgICAgICAgIGxldCBsb2NhdGlvbjphbnk7XG4gICAgICAgICAgbGV0IHNjaG9vbFRlcm1pbmFsRGF0YTphbnkgPSB7fTtcbiAgICBcbiAgICAgICAgICAvLy0tLS0tLS0tLS0vL3NjaG9vbElkXG4gICAgICAgICAgaWYgKHNjaG9vbFRlcm1pbmFsW2ldLnNjaG9vbElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHNjaG9vbElkID0gc2Nob29sVGVybWluYWxbaV0uc2Nob29sSWQgLy8gZ2V0IG5hbWUgb2YgdXNlciB3LnIudC4gSURcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2Nob29sSWQgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8tLS0tLS0tLS0tLy90ZXJtaW5hbEtleVxuICAgICAgICAgIGlmIChzY2hvb2xUZXJtaW5hbFtpXS50ZXJtaW5hbEtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0ZXJtaW5hbEtleSA9IHNjaG9vbFRlcm1pbmFsW2ldLnRlcm1pbmFsS2V5IC8vIGdldCBuYW1lIG9mIHVzZXIgdy5yLnQuIElEXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRlcm1pbmFsS2V5ID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vLS0tLS0tLS0tLS8vdGVybWluYWxUeXBlXG4gICAgICAgICAgaWYgKHNjaG9vbFRlcm1pbmFsW2ldLnRlcm1pbmFsVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0ZXJtaW5hbFR5cGUgPSBzY2hvb2xUZXJtaW5hbFtpXS50ZXJtaW5hbFR5cGUgLy8gZ2V0IG5hbWUgb2YgdXNlciB3LnIudC4gSURcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGVybWluYWxUeXBlID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICAgXG4gICAgICAgICAgLy8tLS0tLS0tLS0tLy9sb2NhdGlvblxuICAgICAgICAgIGlmIChzY2hvb2xUZXJtaW5hbFtpXS5tZXRhZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsZXQgbWV0YWRhdGFKU09OID0gSlNPTi5wYXJzZShzY2hvb2xUZXJtaW5hbFtpXS5tZXRhZGF0YSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGxvY2F0aW9uID0gbWV0YWRhdGFKU09OLmxvY2F0aW9uIC8vIGdldCBuYW1lIG9mIHVzZXIgdy5yLnQuIElEXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwibWV0YWRhdGFKU09OXCIsbG9jYXRpb24pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2NhdGlvbiA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgIHNjaG9vbFRlcm1pbmFsRGF0YSA9IHtcbiAgICAgICAgICBzY2hvb2xJZDpzY2hvb2xJZCxcbiAgICAgICAgICB0ZXJtaW5hbEtleTp0ZXJtaW5hbEtleSxcbiAgICAgICAgICB0ZXJtaW5hbFR5cGU6dGVybWluYWxUeXBlLFxuICAgICAgICAgIGxvY2F0aW9uOmxvY2F0aW9uXG4gICAgICAgIH07XG4gIFxuICAgICAgICBjb25zb2xlLmxvZygnY2NjLS0nLHNjaG9vbFRlcm1pbmFsRGF0YSlcbiAgICAgICAgIHNjaG9vbFRlcm1pbmFsTWF0cml4LnB1c2goc2Nob29sVGVybWluYWxEYXRhKTtcbiAgICAgICAgIHRoaXMuc2Nob29sVGVybWluYWxEYXRhID0gc2Nob29sVGVybWluYWxNYXRyaXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmKHVzZXJDb25zb2xlICE9bnVsbCAmJiB1c2VyQ29uc29sZS5sZW5ndGggPiAwKXtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHVzZXJDb25zb2xlLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgIGxldCB1c2VySWQ6IGFueTtcbiAgICAgICAgICBsZXQgc3RhcnRUaW1lOiBhbnk7XG4gICAgICAgICAgbGV0IGVuZFRpbWU6IGFueTtcbiAgICAgICAgICBsZXQgZHVyYXRpb246IGFueTtcbiAgICAgICAgICBsZXQgc2VsZWN0ZWREYXRlOiBhbnk7XG4gICAgICAgICAgbGV0IHRlcm1pbmFsSVA6IGFueTtcbiAgICAgICAgICBsZXQgdXNlckNvbnNvbGVSZXNvdXJjZXM6IGFueTtcbiAgICAgICAgICBsZXQgcmVzb3VyY2VNZXRhZGF0YUlEUzogYW55O1xuICAgICAgICAgIGxldCByZXNvdXJjZU1ldGF1c2VyQ29uc29sZURhdGEgPSBbXTtcbiAgICAgICAgICBsZXQgcmVzb3VyY2VEdXJhdGlvbkZyb21Db25zb2xlID0gW107XG4gICAgICAgICAgbGV0IHVzZXJOYW1lOiBhbnk7XG4gICAgICAgICAgbGV0IHVzZXJTdWJqZWN0czogYW55O1xuICAgICAgICAgIGxldCB0ZXJtaW5hbExvY2F0aW9uOiBhbnk7XG4gICAgICAgICAgLy8tLS0tLS0tLS0tLy91c2VyIGlEXG4gICAgICAgICAgaWYgKHVzZXJDb25zb2xlW2luZGV4XS51c2VySWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdXNlcklkID0gdXNlckNvbnNvbGVbaW5kZXhdLnVzZXJJZDsgLy8gZ2V0IG5hbWUgb2YgdXNlciB3LnIudC4gSURcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdXNlcklkID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vLS0tLS0tLS0tLS8vIHN0YXJ0VGltZSBcbiAgICAgICAgICBpZiAodXNlckNvbnNvbGVbaW5kZXhdLnN0YXJ0VGltZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzdGFydFRpbWUgPSB1c2VyQ29uc29sZVtpbmRleF0uc3RhcnRUaW1lOyAvLyBnZXQgbmFtZSBvZiB1c2VyIHcuci50LiBJRFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGFydFRpbWUgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8tLS0tLS0tLS0tLy8gZW5kVGltZSBcbiAgICAgICAgICBpZiAodXNlckNvbnNvbGVbaW5kZXhdLmVuZFRpbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZW5kVGltZSA9IHVzZXJDb25zb2xlW2luZGV4XS5lbmRUaW1lIC8vIGdldCBuYW1lIG9mIHVzZXIgdy5yLnQuIElEXG4gICAgICAgICAgICB0aGlzLm15RW5kVGltZSA9IGVuZFRpbWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVuZFRpbWUgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8tLS0tLS0tLS0tLy8gRGF0ZSBcbiAgICAgICAgICBpZiAodXNlckNvbnNvbGVbaW5kZXhdLnNlbGVjdGVkRGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzZWxlY3RlZERhdGUgPSB1c2VyQ29uc29sZVtpbmRleF0uc2VsZWN0ZWREYXRlIC8vIGdldCBuYW1lIG9mIHVzZXIgdy5yLnQuIElEXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbGVjdGVkRGF0ZSA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgICAgLy8tLS0tLS0tLS0tLy8gRHVyYXRpb25cbiAgICAgICAgICBpZiAodXNlckNvbnNvbGVbaW5kZXhdLmR1cmF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uID0gdXNlckNvbnNvbGVbaW5kZXhdLmR1cmF0aW9uIC8vIGdldCBuYW1lIG9mIHVzZXIgdy5yLnQuIElEXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGR1cmF0aW9uID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vLS0tLS0tLS0tLS8vIHRlcm1pbmFsSVBcbiAgICAgICAgICBpZiAodXNlckNvbnNvbGVbaW5kZXhdLnRlcm1pbmFsSVAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGVybWluYWxJUCA9IHVzZXJDb25zb2xlW2luZGV4XS50ZXJtaW5hbElQIC8vIGdldCBuYW1lIG9mIHVzZXIgdy5yLnQuIElEXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRlcm1pbmFsSVAgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgLy8tLS0tLS0tLS0tLy8gdXNlckNvbnNvbGVSZXNvdXJjZXNcbiAgICAgICAgICBpZiAodXNlckNvbnNvbGVbaW5kZXhdLnVzZXJDb25zb2xlUmVzb3VyY2VzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHVzZXJDb25zb2xlUmVzb3VyY2VzID0gdXNlckNvbnNvbGVbaW5kZXhdLnVzZXJDb25zb2xlUmVzb3VyY2VzIC8vIGdldCBuYW1lIG9mIHVzZXIgdy5yLnQuIElEXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVzZXJDb25zb2xlUmVzb3VyY2VzID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgaWYodXNlckNvbnNvbGVSZXNvdXJjZXMgIT0gbnVsbCl7XG4gICAgICAgICAgICBpZiAodXNlckNvbnNvbGVSZXNvdXJjZXMudXNlckNvbnNvbGVSZXNvdXJjZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIC8vIHNhdHlhaml0IHJlc291cmNlIHdpc2UgZHVyYXRpb24gYWRkZWRcbiAgICAgICAgICAgICAgdXNlckNvbnNvbGVSZXNvdXJjZXMudXNlckNvbnNvbGVSZXNvdXJjZS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIHJlc291cmNlTWV0YXVzZXJDb25zb2xlRGF0YS5wdXNoKGl0ZW0ucmVzb3VyY2VJZCk7IC8vIGdldCBuYW1lIG9mIHVzZXIgdy5yLnQuIElEXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VEdXJhdGlvbkZyb21Db25zb2xlLnB1c2goaXRlbS5kdXJhdGlvbik7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAvLyByZXNvdXJjZU1ldGF1c2VyQ29uc29sZURhdGEgPSB1c2VyQ29uc29sZVJlc291cmNlcy51c2VyQ29uc29sZVJlc291cmNlW2luZGV4XXJlc291cmNlSWQ7IC8vIGdldCBuYW1lIG9mIHVzZXIgdy5yLnQuIElEXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXNvdXJjZU1ldGF1c2VyQ29uc29sZURhdGEgPSBbXTtcbiAgICAgICAgICAgICAgcmVzb3VyY2VEdXJhdGlvbkZyb21Db25zb2xlID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgICAvLy0tLS0tLS0tLS0vLyB1c2VyTmFtZSBhbmQgdXNlclN1YmplY3RzXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB1c2Vyc01ldGFkYXRhTWF0cml4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodXNlcklkID09PSB1c2Vyc01ldGFkYXRhTWF0cml4W2ldLnVzZXJJZCkge1xuICAgICAgICAgICAgICB1c2VyTmFtZSA9IHVzZXJzTWV0YWRhdGFNYXRyaXhbaV0udXNlck5hbWU7XG4gICAgICAgICAgICAgIHVzZXJTdWJqZWN0cyA9IHVzZXJzTWV0YWRhdGFNYXRyaXhbaV0udXNlclN1YmplY3RzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLy0tLS0tLS0tLS0vLyB0ZXJtaW5hbElQIGFuZCB0ZXJtaW5hbExvY2F0aW9uXG4gICAgICAgICBcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNjaG9vbFRlcm1pbmFsTWF0cml4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwic2Nob29sVGVybWluYWxNYXRyaXhbaV1cIixzY2hvb2xUZXJtaW5hbE1hdHJpeFtpXSk7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwic2Nob29sVGVybWluYWxNYXRyaXhbaV0udGVybWluYWxLZXlcIix0ZXJtaW5hbElQLHNjaG9vbFRlcm1pbmFsTWF0cml4W2ldLnRlcm1pbmFsS2V5KTtcbiAgICAgICAgICAgIGlmICh0ZXJtaW5hbElQID09PSBzY2hvb2xUZXJtaW5hbE1hdHJpeFtpXS50ZXJtaW5hbEtleSkge1xuICAgICAgICAgICAgICB0ZXJtaW5hbExvY2F0aW9uID0gc2Nob29sVGVybWluYWxNYXRyaXhbaV0ubG9jYXRpb247XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgIHRlcm1pbmFsTG9jYXRpb24gPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKHRlcm1pbmFsTG9jYXRpb24gPT09IHVuZGVmaW5lZCB8fCB0ZXJtaW5hbExvY2F0aW9uID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGVybWluYWxMb2NhdGlvbiA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB1c2VyRGF0YSA9IHtcbiAgICAgICAgICAgIHVzZXJJZDogdXNlcklkLFxuICAgICAgICAgICAgdXNlck5hbWU6IHVzZXJOYW1lLFxuICAgICAgICAgICAgc3RhcnRUaW1lOiBuZXcgRGF0ZShzdGFydFRpbWUpLFxuICAgICAgICAgICAgZW5kVGltZTogbmV3IERhdGUoZW5kVGltZSksXG4gICAgICAgICAgICB0ZXJtaW5hbElQOiB0ZXJtaW5hbElQLFxuICAgICAgICAgICAgcmVzb3VyY2VNZXRhdXNlckNvbnNvbGVEYXRhOiByZXNvdXJjZU1ldGF1c2VyQ29uc29sZURhdGEsXG4gICAgICAgICAgICByZXNvdXJjZUR1cmF0aW9uRnJvbUNvbnNvbGU6IHJlc291cmNlRHVyYXRpb25Gcm9tQ29uc29sZSxcbiAgICAgICAgICAgIGR1cmF0aW9uOmR1cmF0aW9uLFxuICAgICAgICAgICAgdGVybWluYWxMb2NhdGlvbjp0ZXJtaW5hbExvY2F0aW9uLFxuICAgICAgICAgICAgdXNlclN1YmplY3RzOnVzZXJTdWJqZWN0c1xuICAgICAgICAgIH07XG4gICAgICAgICAgdXNlckNvbnNvbGVNYXRyaXgucHVzaCh1c2VyRGF0YSk7XG4gICAgICAgICAgdGhpcy51c2VyQ29uc29sZURhdGEgPSB1c2VyQ29uc29sZU1hdHJpeDtcbiAgICAgICAgICB0aGlzLmlzVXNlclJlcWl1cmVkRGF0YVJlYWR5Lm5leHQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgfVxuICAgIH1cbiAgLy8gY29uc29sZS5sb2codXNlcnNNZXRhZGF0YU1hdHJpeCxzY2hvb2xUZXJtaW5hbE1hdHJpeCx1c2VyQ29uc29sZU1hdHJpeCk7XG4gICAgIHJldHVybiB7XG4gICAgICB1c2Vyc01ldGFkYXRhOnVzZXJzTWV0YWRhdGFNYXRyaXgsXG4gICAgICBzY2hvb2xUZXJtaW5hbERhdGE6c2Nob29sVGVybWluYWxNYXRyaXgsXG4gICAgICB1c2VyQ29uc29sZURhdGE6IHVzZXJDb25zb2xlTWF0cml4XG4gICAgfVxuICB9XG4gIHVzZXJXaXNlQ2hhcnREYXRhKCl7XG4gICAgbGV0IGRhdGFUYWJsZWZvckNoYXJ0ID0gbmV3IEFycmF5KCk7XG4gICAgZGF0YVRhYmxlZm9yQ2hhcnQgPSBbXTtcbiAgICBpZih0aGlzLnVzZXJDb25zb2xlRGF0YSl7XG4gICAgICBjb25zb2xlLmxvZyhcImNoYXJ0RGF0YVVzZXJXaXNlTmV3LS0+PlwiLHRoaXMudXNlckNvbnNvbGVEYXRhKVxuICAgICAgaWYodGhpcy51c2VyQ29uc29sZURhdGEubGVuZ3RoID4gMCl7XG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCB0aGlzLnVzZXJDb25zb2xlRGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYodGhpcy51c2VyQ29uc29sZURhdGFbaV0udXNlck5hbWUgPT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICB0aGlzLnVzZXJDb25zb2xlRGF0YVtpXS51c2VyTmFtZSA9IFwiLVwiXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKHRoaXMudXNlckNvbnNvbGVEYXRhW2ldLnVzZXJOYW1lID09PSBcIi1cIiB8fCB0aGlzLnVzZXJDb25zb2xlRGF0YVtpXS51c2VyTmFtZSA9PT0gXCItLVwiKXtcbiAgICAgICAgICAgIHRoaXMudXNlckNvbnNvbGVEYXRhLnNwbGljZShpLCAxKTsgLy8gMm5kIHBhcmFtZXRlciBtZWFucyByZW1vdmUgb25lIGl0ZW0gb25seVxuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgdXNlckRhdGEgPSBbdGhpcy51c2VyQ29uc29sZURhdGFbaV0udXNlck5hbWUsdGhpcy51c2VyQ29uc29sZURhdGFbaV0uc3RhcnRUaW1lLHRoaXMudXNlckNvbnNvbGVEYXRhW2ldLmVuZFRpbWVdO1xuICAgICAgICAgIGRhdGFUYWJsZWZvckNoYXJ0LnB1c2godXNlckRhdGEpO1xuICAgICAgICAgIC8vY29uc29sZS5sb2coXCJjaGFydERhdGFVc2VyV2lzZU5ld05ldy0tPj5cIix1c2VyRGF0YSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YVRhYmxlZm9yQ2hhcnQ7XG4gIH1cbiAgY2xhc3NSb29tV2lzZUNoYXJ0RGF0YSgpe1xuICAgIGxldCBkYXRhVGFibGVmb3JDaGFydCA9IG5ldyBBcnJheSgpO1xuICAgIGRhdGFUYWJsZWZvckNoYXJ0ID0gW107XG4gICAgaWYodGhpcy51c2VyQ29uc29sZURhdGEpe1xuICAgICAgXG4gICAgICBmb3IobGV0IGkgPSAwOyBpIDwgdGhpcy51c2VyQ29uc29sZURhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgICAvL2NvbnNvbGUubG9nKCdiYmItLT4nLHRoaXMudXNlckNvbnNvbGVEYXRhW2ldLnRlcm1pbmFsTG9jYXRpb24pXG4gICAgICAgIGxldCByb29tTmFtZSA9IHRoaXMudXNlckNvbnNvbGVEYXRhW2ldLnRlcm1pbmFsTG9jYXRpb247XG5cbiAgICAgICAgaWYocm9vbU5hbWUgPT09IFwiXCIpe1xuICAgICAgICAgIC8vcm9vbU5hbWUgPSBcIk5vIE5hbWVcIlxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2F0aW9uID0gcm9vbU5hbWUgK1wiIC0gXCIrIHRoaXMudXNlckNvbnNvbGVEYXRhW2ldLnRlcm1pbmFsSVBcbiAgICAgICAgY29uc29sZS5sb2coJ2JiYmxvY2F0aW9uLS0+Jyxsb2NhdGlvbilcbiAgICAgICAgbGV0IHVzZXJEYXRhID0gW2xvY2F0aW9uLHRoaXMudXNlckNvbnNvbGVEYXRhW2ldLnN0YXJ0VGltZSx0aGlzLnVzZXJDb25zb2xlRGF0YVtpXS5lbmRUaW1lXTtcbiAgICAgICAgZGF0YVRhYmxlZm9yQ2hhcnQucHVzaCh1c2VyRGF0YSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKFwidGhpcy5jbGFzc1Jvb21XaXNlQ2hhcnREYXRhXCIsZGF0YVRhYmxlZm9yQ2hhcnQpO1xuICAgIHJldHVybiBkYXRhVGFibGVmb3JDaGFydDtcbiAgICBcbiAgfVxuXG5cbiAgbmV3R2V0Q3VycmVudENsYXNzcm9vbURhdGEoKXtcblxuICAgIGxldCBkYXRhVGFibGVmb3JDaGFydCA9IG5ldyBBcnJheSgpO1xuICAgICAgZGF0YVRhYmxlZm9yQ2hhcnQgPSBbXTtcbiAgICAgIGlmKHRoaXMudXNlckNvbnNvbGVEYXRhKXtcbiAgICAgICAgXG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCB0aGlzLnVzZXJDb25zb2xlRGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnYmJiLS0+Jyx0aGlzLnVzZXJDb25zb2xlRGF0YVtpXS50ZXJtaW5hbExvY2F0aW9uKVxuICAgICAgICAgIGxldCByb29tTmFtZSA9IHRoaXMudXNlckNvbnNvbGVEYXRhW2ldLnRlcm1pbmFsTG9jYXRpb247XG4gICAgICAgICAgbGV0IGxvY2F0aW9uID0gcm9vbU5hbWUgK1wiIC0gXCIrIHRoaXMudXNlckNvbnNvbGVEYXRhW2ldLnRlcm1pbmFsSVBcbiAgICAgICAgICBjb25zb2xlLmxvZygnYmJibG9jYXRpb24tLT4nLGxvY2F0aW9uKVxuICAgICAgICAgIC8vbGV0IHVzZXJEYXRhID0gW2xvY2F0aW9uXTtcbiAgICAgICAgICBkYXRhVGFibGVmb3JDaGFydC5wdXNoKGxvY2F0aW9uKTtcbiAgICAgICAgICBcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc29sZS5sb2coXCJ0aGlzLmNsYXNzUm9vbVdpc2VDaGFydERhdGFcIixkYXRhVGFibGVmb3JDaGFydCk7XG4gICAgICBkYXRhVGFibGVmb3JDaGFydCA9IHRoaXMudW5pcShkYXRhVGFibGVmb3JDaGFydCk7XG4gICAgICByZXR1cm4gZGF0YVRhYmxlZm9yQ2hhcnQ7XG4gIH1cblxuICB1bmlxKGEpIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KGEpKTtcbiAgfVxuXG4gIGFsbFVzZXJDaGFydERhdGEoKXtcbiAgICBsZXQgZGF0YVRhYmxlZm9yQ2hhcnQgPSBuZXcgQXJyYXkoKTtcbiAgICBkYXRhVGFibGVmb3JDaGFydCA9IFtdO1xuICAgIGxldCBBbGx1c2VyRGV0YWlsc0ZvclRhYmxlQ2hhcnQgPW5ldyBBcnJheSgpO1xuICAgIEFsbHVzZXJEZXRhaWxzRm9yVGFibGVDaGFydCA9IFtdO1xuICAgIGlmKHRoaXMudXNlckNvbnNvbGVEYXRhICYmIHRoaXMudXNlcnNNZXRhRGF0YSl7XG4gICAgICBsZXQgaW5BY3RpdmV1c2VyTmFtZTogYW55O1xuICAgICAgbGV0IHVzZXJTdWJqZWN0czogYW55O1xuICAgICAgbGV0IG15SUQ6IGFueTtcbiAgICAgIGxldCBBbGx1c2VyRGV0YWlscyA9bmV3IEFycmF5KCk7XG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy51c2VyQ29uc29sZURhdGEubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIEFsbHVzZXJEZXRhaWxzLnB1c2godGhpcy51c2VyQ29uc29sZURhdGFbaW5kZXhdKTtcbiAgICAgICAgQWxsdXNlckRldGFpbHNGb3JUYWJsZUNoYXJ0LnB1c2godGhpcy51c2VyQ29uc29sZURhdGFbaW5kZXhdKVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnVzZXJzTWV0YURhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbXlJRCA9IHRoaXMudXNlcnNNZXRhRGF0YVtpXS51c2VySWQ7XG4gICAgICAgIGluQWN0aXZldXNlck5hbWUgPSB0aGlzLnVzZXJzTWV0YURhdGFbaV0udXNlck5hbWU7XG4gICAgICAgIC8vaWYoaW5BY3RpdmV1c2VyTmFtZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJhbGx1c2VyLTEtPj5cIixpbkFjdGl2ZXVzZXJOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdXNlclN1YmplY3RzID0gdGhpcy51c2Vyc01ldGFEYXRhW2ldLnVzZXJTdWJqZWN0cztcbiAgICAgICAgbGV0IG15Q2hhcnRSb3d1c2VyQ29uc29sZURhdGEgPSBcbiAgICAgICAge1xuICAgICAgICAgIHVzZXJJZDpteUlELFxuICAgICAgICAgIHVzZXJOYW1lOiBpbkFjdGl2ZXVzZXJOYW1lLFxuICAgICAgICAgIHN0YXJ0VGltZTpuZXcgRGF0ZSh0aGlzLm15RW5kVGltZSksXG4gICAgICAgICAgZW5kVGltZTpuZXcgRGF0ZSh0aGlzLm15RW5kVGltZSksXG4gICAgICAgICAgdGVybWluYWxJUDpcIlwiLFxuICAgICAgICAgIHJlc291cmNlTWV0YXVzZXJDb25zb2xlRGF0YTpbXSxcbiAgICAgICAgICBkdXJhdGlvbjpcIjBcIixcbiAgICAgICAgICB0ZXJtaW5hbExvY2F0aW9uOlwiXCIsXG4gICAgICAgICAgdXNlclN1YmplY3RzOnVzZXJTdWJqZWN0c1xuICAgICAgfTtcbiAgICAgICAgLy9BbGx1c2VyRGV0YWlscy5wdXNoKG15Q2hhcnRSb3d1c2VyQ29uc29sZURhdGEpO1xuICBcbiAgICAgICAgbGV0IG15VGFibGVSb3d1c2VyQ29uc29sZURhdGEgPSB7XG4gICAgICAgICAgdXNlcklkOm15SUQsXG4gICAgICAgICAgdXNlck5hbWU6IGluQWN0aXZldXNlck5hbWUsXG4gICAgICAgICAgc3RhcnRUaW1lOlwiXCIsXG4gICAgICAgICAgZW5kVGltZTpcIlwiLFxuICAgICAgICAgIHRlcm1pbmFsSVA6XCJcIixcbiAgICAgICAgICByZXNvdXJjZU1ldGF1c2VyQ29uc29sZURhdGE6W10sXG4gICAgICAgICAgZHVyYXRpb246MCxcbiAgICAgICAgICB0ZXJtaW5hbExvY2F0aW9uOlwiXCIsXG4gICAgICAgICAgdXNlclN1YmplY3RzOnVzZXJTdWJqZWN0c1xuICAgICAgICB9O1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwiYWxsdXNlci0yLT4+XCIsaW5BY3RpdmV1c2VyTmFtZSk7XG4gICAgICAgIEFsbHVzZXJEZXRhaWxzRm9yVGFibGVDaGFydC5wdXNoKG15VGFibGVSb3d1c2VyQ29uc29sZURhdGEpO1xuICAgICAgICBBbGx1c2VyRGV0YWlscy5wdXNoKG15Q2hhcnRSb3d1c2VyQ29uc29sZURhdGEpO1xuICAgICAgfVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBBbGx1c2VyRGV0YWlscy5sZW5ndGg7IGkrKyl7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJhbGx1c2VyLTMtPj5cIixBbGx1c2VyRGV0YWlsc1tpXS51c2VyTmFtZSk7XG4gICAgICAgICAgaWYoQWxsdXNlckRldGFpbHNbaV0udXNlck5hbWUgPT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICBBbGx1c2VyRGV0YWlsc1tpXS51c2VyTmFtZSA9IFwiLS1cIlxuICAgICAgICAgIH1cbiAgICAgICAgICBpZihBbGx1c2VyRGV0YWlsc1tpXS51c2VyTmFtZSA9PT0gXCItLVwiKXtcbiAgICAgICAgICAgIC8vQWxsdXNlckRldGFpbHMuc3BsaWNlKGksIDEpOyAvLyAybmQgcGFyYW1ldGVyIG1lYW5zIHJlbW92ZSBvbmUgaXRlbSBvbmx5XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCB1c2VyRGF0YSA9IFtBbGx1c2VyRGV0YWlsc1tpXS51c2VyTmFtZSxBbGx1c2VyRGV0YWlsc1tpXS5zdGFydFRpbWUsQWxsdXNlckRldGFpbHNbaV0uZW5kVGltZV07XG4gICAgICAgICAgZGF0YVRhYmxlZm9yQ2hhcnQucHVzaCh1c2VyRGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH0sNTApXG5cbiAgICAgIC8qXG4gICAgICBmb3IobGV0IGkgPSAwOyBpIDwgQWxsdXNlckRldGFpbHMubGVuZ3RoOyBpKyspe1xuICAgICAgICBjb25zb2xlLmxvZyhcImFsbHVzZXItMy0+PlwiLEFsbHVzZXJEZXRhaWxzW2ldLnVzZXJOYW1lKTtcbiAgICAgICAgaWYoQWxsdXNlckRldGFpbHNbaV0udXNlck5hbWUgPT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgQWxsdXNlckRldGFpbHNbaV0udXNlck5hbWUgPSBcIigtKVwiXG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdXNlckRhdGEgPSBbQWxsdXNlckRldGFpbHNbaV0udXNlck5hbWUsQWxsdXNlckRldGFpbHNbaV0uc3RhcnRUaW1lLEFsbHVzZXJEZXRhaWxzW2ldLmVuZFRpbWVdO1xuICAgICAgICBkYXRhVGFibGVmb3JDaGFydC5wdXNoKHVzZXJEYXRhKTtcbiAgICAgIH0qL1xuICAgIH1cbiAgICByZXR1cm4ge2ZvckNoYXJ0RGF0YTpkYXRhVGFibGVmb3JDaGFydCxmb3JkdXJhdGlvblRhYmxlOkFsbHVzZXJEZXRhaWxzRm9yVGFibGVDaGFydH1cbiAgfVxuICBhbGxSb29tc0RhdGEoKXtcbiAgICBsZXQgZGF0YVRhYmxlZm9yQ2hhcnQgPSBuZXcgQXJyYXkoKTtcbiAgICBkYXRhVGFibGVmb3JDaGFydCA9IFtdO1xuICAgIGxldCBhbGxSb29tc0RldGFpbHMgPSBuZXcgQXJyYXkoKTtcbiAgICBhbGxSb29tc0RldGFpbHMgPSBbXTtcbiAgICBpZih0aGlzLnVzZXJDb25zb2xlRGF0YSAmJiB0aGlzLnNjaG9vbFRlcm1pbmFsRGF0YSl7XG4gICAgICBsZXQgbXlDaGFydFJvd0RhdGE6IGFueT17fTtcbiAgICAgIGxldCBpbkFjdGl2ZUNsYXNzUm9vbTogYW55O1xuICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHRoaXMudXNlckNvbnNvbGVEYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgYWxsUm9vbXNEZXRhaWxzLnB1c2godGhpcy51c2VyQ29uc29sZURhdGFbaV0pO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKFwiYmJiIGFsbFJvb20tLT5cIix0aGlzLnVzZXJDb25zb2xlRGF0YVtpXSlcbiAgICAgICAgbGV0IHJvb21OYW1lID0gdGhpcy51c2VyQ29uc29sZURhdGFbaV0udGVybWluYWxMb2NhdGlvbjtcbiAgICAgICAgbGV0IHJvb21JUCA9IHRoaXMudXNlckNvbnNvbGVEYXRhW2ldLnRlcm1pbmFsSVA7XG5cbiAgICAgICAgaWYocm9vbU5hbWUgPT09IFwiXCIgfHwgcm9vbU5hbWUgPT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgcm9vbU5hbWUgPSBcIk5vIE5hbWVcIlxuICAgICAgICB9XG5cblxuICAgICAgICBsZXQgbG9jYXRpb24gPSByb29tTmFtZSArXCIgLSBcIisgcm9vbUlQO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCdiYmJiUm9vbScsbG9jYXRpb24pXG4gICAgICAgIFxuICAgICAgIC8vIGxldCB1c2VyRGF0YSA9IFt0aGlzLnVzZXJDb25zb2xlRGF0YVtpXS50ZXJtaW5hbElQLHRoaXMudXNlckNvbnNvbGVEYXRhW2ldLnN0YXJ0VGltZSx0aGlzLnVzZXJDb25zb2xlRGF0YVtpXS5lbmRUaW1lXTtcbiAgICAgICAgbGV0IHVzZXJEYXRhID0gW2xvY2F0aW9uLHRoaXMudXNlckNvbnNvbGVEYXRhW2ldLnN0YXJ0VGltZSx0aGlzLnVzZXJDb25zb2xlRGF0YVtpXS5lbmRUaW1lXTtcbiAgICAgICAgZGF0YVRhYmxlZm9yQ2hhcnQucHVzaCh1c2VyRGF0YSk7XG4gICAgICB9XG4gICAgIFxuICAgICAgbGV0IGluYWN0aXZlUm9vbk5hbWU7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2Nob29sVGVybWluYWxEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwic2Nob29sVGVybWluYWxEYXRhXCIsdGhpcy5zY2hvb2xUZXJtaW5hbERhdGEpO1xuICAgICAgICBcbiAgICAgICAgaW5BY3RpdmVDbGFzc1Jvb20gPSB0aGlzLnNjaG9vbFRlcm1pbmFsRGF0YVtpXS5sb2NhdGlvbiArICcgLSAnICsgdGhpcy5zY2hvb2xUZXJtaW5hbERhdGFbaV0udGVybWluYWxLZXk7XG4gICAgICAgIC8vaW5hY3RpdmVSb29uTmFtZSA9IHRoaXMuc2Nob29sVGVybWluYWxEYXRhW2ldLmxvY2F0aW9uO1xuICAgICAgICBcbiAgICAgICAgbXlDaGFydFJvd0RhdGEgPSB7XG4gICAgICAgICAgdXNlcklkOlwiXCIsXG4gICAgICAgICAgdXNlck5hbWU6XCJcIixcbiAgICAgICAgICBzdGFydFRpbWU6bmV3IERhdGUodGhpcy5teUVuZFRpbWUpLFxuICAgICAgICAgIGVuZFRpbWU6bmV3IERhdGUodGhpcy5teUVuZFRpbWUpLFxuICAgICAgICAgIHRlcm1pbmFsSVA6aW5BY3RpdmVDbGFzc1Jvb20sXG4gICAgICAgICAgcmVzb3VyY2VNZXRhdXNlckNvbnNvbGVEYXRhOltdLFxuICAgICAgICAgIGR1cmF0aW9uOjAsXG4gICAgICAgICAgdGVybWluYWxMb2NhdGlvbjpcIlwiLFxuICAgICAgICAgIHVzZXJTdWJqZWN0czpcIlwiXG4gICAgICAgIH07XG4gICAgICAgIGFsbFJvb21zRGV0YWlscy5wdXNoKG15Q2hhcnRSb3dEYXRhKTtcbiAgICAgICAgbGV0IG15Q2hhcnRSb3d1c2VyQ29uc29sZURhdGEgPSBbaW5BY3RpdmVDbGFzc1Jvb20sbmV3IERhdGUodGhpcy5teUVuZFRpbWUpLG5ldyBEYXRlKHRoaXMubXlFbmRUaW1lKV07XG4gICAgICAgIGRhdGFUYWJsZWZvckNoYXJ0LnB1c2gobXlDaGFydFJvd3VzZXJDb25zb2xlRGF0YSk7XG4gICAgICB9XG4gICAgIFxuICAgIH1cbiAgICByZXR1cm4ge2ZvckNoYXJ0RGF0YTpkYXRhVGFibGVmb3JDaGFydCxmb3JkdXJhdGlvblRhYmxlOmFsbFJvb21zRGV0YWlsc307XG4gIH1cbiAgZGF0YUZvclRhYmxlVmlldyh1c2VyQ29uc29sZU1hdHJpeDogYW55LHJlc291cmNlTWV0YWRhdGFNYXRyaXg6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKFwiQUFBIHVzZXJDb25zb2xlTWF0cml4XCIsdXNlckNvbnNvbGVNYXRyaXgpO1xuICAgIGxldCBjdXJyZW50RGF0ZTogYW55O1xuICAgIGxldCByZXNvdXJjZU1hdHJpeEZvclRhYmxlQ2hhcnQgPSBuZXcgQXJyYXkoKTtcbiAgICBsZXQgcmVzb3VyY2VNYXRyaXhGb3JFeGNlbCA9IG5ldyBBcnJheSgpO1xuICAgIHJlc291cmNlTWF0cml4Rm9yVGFibGVDaGFydCA9IFtdO1xuICAgIHJlc291cmNlTWF0cml4Rm9yRXhjZWwgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8dXNlckNvbnNvbGVNYXRyaXgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBzdGFydFRpbWU6IGFueTtcbiAgICAgIGxldCBlbmRUaW1lOiBhbnk7XG4gICAgICBsZXQgZHVyYXRpb246IGFueTtcbiAgICAgIGxldCB0ZXJtaW5hbElQOiBhbnk7XG4gICAgICBsZXQgc3ViamVjdDogYW55O1xuICAgICAgbGV0IGdyYWRlOiBhbnk7XG4gICAgICBsZXQgY2hhcHRlcjogYW55O1xuICAgICAgbGV0IEFzc2VzdERldGFpbDogYW55O1xuICAgICAgbGV0IHJlc291cmNlVHlwZTogYW55O1xuICAgICAgbGV0IHJlc291cmNlVGl0bGU6IGFueTtcbiAgICAgIGxldCB0ZWFjaGluZ3BvaW50OiBhbnk7XG4gICAgICBsZXQgbG9jYXRpb246IGFueTtcbiAgICAgIGxldCB0ZWFjaGVyTmFtZTogYW55O1xuICAgICAgbGV0IHRlYWNoZXJTdWJqZWN0OiBhbnk7XG4gICAgICBcbiAgICAgIGxldCByZXNvdXJjZU1ldGFkYXRhSURzOiBhbnk7XG4gICAgICBsZXQgcmVzb3VyY2VNZXRhZGF0YUlEc0R1cmF0aW9uOiBhbnk7XG4gICAgICBsZXQgcmVzb3VyY2VBcnJheUZvckV4Y2VsID0gbmV3IEFycmF5KCk7XG4gICAgICBsZXQgcmVzb3VyY2VBcnJheUZvclRhYmxlQ2hhcnQgPSBuZXcgQXJyYXkoKTtcbiAgICAgIGxldCB1c2VyQ29uc29sZURhdGFNYXRyaXggPSBuZXcgQXJyYXkoKTtcbiAgICAgIHJlc291cmNlQXJyYXlGb3JUYWJsZUNoYXJ0ID0gW107XG4gICAgICB1c2VyQ29uc29sZURhdGFNYXRyaXggPSBbXTtcbiAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLSBmb3Igc3ViamVjdCBhbmQgTmFtZVxuICBcblxuICAgICAgdGVhY2hlclN1YmplY3QgPSB1c2VyQ29uc29sZU1hdHJpeFtpXS51c2VyU3ViamVjdHM7XG4gICAgICB0ZWFjaGVyTmFtZSA9IHVzZXJDb25zb2xlTWF0cml4W2ldLnVzZXJOYW1lO1xuICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLSBmb3Igc3RhcnQgVGltZSAgYW5kIEVuZFRpbWUgXG4gICAgICBpZiAoKHVzZXJDb25zb2xlTWF0cml4W2ldLnN0YXJ0VGltZSAhPSB1bmRlZmluZWQgJiYgdXNlckNvbnNvbGVNYXRyaXhbaV0uc3RhcnRUaW1lICE9IFwiXCIpICYmICh1c2VyQ29uc29sZU1hdHJpeFtpXS5lbmRUaW1lICE9IHVuZGVmaW5lZCYmdXNlckNvbnNvbGVNYXRyaXhbaV0uZW5kVGltZSAhPSBcIlwiKSkge1xuICAgICAgICBzdGFydFRpbWUgPSB1c2VyQ29uc29sZU1hdHJpeFtpXS5zdGFydFRpbWUudG9Mb2NhbGVUaW1lU3RyaW5nKCdlbi1VUycsIHsgaG91cjEyOiB0cnVlIH0pO1xuICAgICAgICBlbmRUaW1lID0gdXNlckNvbnNvbGVNYXRyaXhbaV0uZW5kVGltZS50b0xvY2FsZVRpbWVTdHJpbmcoJ2VuLVVTJywgeyBob3VyMTI6IHRydWUgfSk7XG4gICAgICAgIGN1cnJlbnREYXRlID0gdXNlckNvbnNvbGVNYXRyaXhbaV0uc3RhcnRUaW1lLmdldERhdGUoKSArICcvJyArICh1c2VyQ29uc29sZU1hdHJpeFtpXS5zdGFydFRpbWUuZ2V0TW9udGgoKSsxKSArICcvJyArIHVzZXJDb25zb2xlTWF0cml4W2ldLnN0YXJ0VGltZS5nZXRGdWxsWWVhcigpO1xuICAgICAgfVxuICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLSBmb3IgZHVyYXRpb25cbiAgICAgIGR1cmF0aW9uID0gTWF0aC5mbG9vcih1c2VyQ29uc29sZU1hdHJpeFtpXS5kdXJhdGlvbik7XG4gICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tIGZvciBUZXJtaW5hbCBsb2FjdGlvbiBhbmQgdGVybWluYWwgSVBcbiAgICAgIGxvY2F0aW9uID0gdXNlckNvbnNvbGVNYXRyaXhbaV0udGVybWluYWxMb2NhdGlvbjtcbiAgICAgIHRlcm1pbmFsSVAgPSB1c2VyQ29uc29sZU1hdHJpeFtpXS50ZXJtaW5hbElQO1xuICAgICAgbGV0IHJvb21EZXRhaWwgPSBsb2NhdGlvbiArICcgJyArIHRlcm1pbmFsSVA7XG4gICAgIFxuICAgICAgcmVzb3VyY2VNZXRhZGF0YUlEcyA9IHVzZXJDb25zb2xlTWF0cml4W2ldLnJlc291cmNlTWV0YXVzZXJDb25zb2xlRGF0YTtcbiAgICAgIHJlc291cmNlTWV0YWRhdGFJRHNEdXJhdGlvbiA9IHVzZXJDb25zb2xlTWF0cml4W2ldLnJlc291cmNlRHVyYXRpb25Gcm9tQ29uc29sZTtcblxuICAgICAgaWYgKHJlc291cmNlTWV0YWRhdGFJRHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHN1YmplY3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIGdyYWRlID0gdW5kZWZpbmVkO1xuICAgICAgICBjaGFwdGVyID0gdW5kZWZpbmVkO1xuICAgICAgICB0ZWFjaGluZ3BvaW50ID0gdW5kZWZpbmVkO1xuICAgICAgICBBc3Nlc3REZXRhaWwgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJlc291cmNlVGl0bGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJlc291cmNlVHlwZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmVzb3VyY2VBcnJheUZvclRhYmxlQ2hhcnQgPSBbdGVhY2hlck5hbWUsdGVhY2hlclN1YmplY3QsY3VycmVudERhdGUsc3RhcnRUaW1lLGVuZFRpbWUsZHVyYXRpb24scm9vbURldGFpbCxzdWJqZWN0LGdyYWRlLGNoYXB0ZXIsdGVhY2hpbmdwb2ludCxBc3Nlc3REZXRhaWxdO1xuICAgICAgICByZXNvdXJjZU1hdHJpeEZvclRhYmxlQ2hhcnQucHVzaChyZXNvdXJjZUFycmF5Rm9yVGFibGVDaGFydCk7XG4gICAgICAgXG4gICAgICB9ZWxzZXtcbiAgICAgICAgLy9yZXNvdXJjZU1ldGFkYXRhTWF0cml4ID0gW3Jlc291c2VJRCxzdWJqZWN0LGdyYWRlLGNoYXB0ZXIsdGVhY2hpbmdwb2ludCx0eXBlLHRpdGxlXVxuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IHJlc291cmNlTWV0YWRhdGFJRHMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc291cmNlTWV0YWRhdGFNYXRyaXgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAocmVzb3VyY2VNZXRhZGF0YUlEc1trXSA9PT0gcmVzb3VyY2VNZXRhZGF0YU1hdHJpeFtpXS5yZXNvdXNlSUQpIFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAvLyBzYXR5YWppdFxuICAgICAgICAgICAgICBzdWJqZWN0ID0gcmVzb3VyY2VNZXRhZGF0YU1hdHJpeFtpXS5zdWJqZWN0O1xuICAgICAgICAgICAgICBncmFkZSA9IHJlc291cmNlTWV0YWRhdGFNYXRyaXhbaV0uZ3JhZGU7XG4gICAgICAgICAgICAgIGNoYXB0ZXIgPSByZXNvdXJjZU1ldGFkYXRhTWF0cml4W2ldLmNoYXB0ZXI7XG4gICAgICAgICAgICAgIHRlYWNoaW5ncG9pbnQgPSByZXNvdXJjZU1ldGFkYXRhTWF0cml4W2ldLnRlYWNoaW5ncG9pbnQ7XG4gICAgICAgICAgICAgIGlmKHJlc291cmNlTWV0YWRhdGFNYXRyaXhbaV0udGl0bGUudG9Mb3dlckNhc2UoKSA9PT0gJ3doaXRlYm9hcmQnIHx8IHJlc291cmNlTWV0YWRhdGFNYXRyaXhbaV0udGl0bGUudG9Mb3dlckNhc2UoKSA9PT0gJ3F1ZXN0aW9uJyl7XG4gICAgICAgICAgICAgICAgLy9Bc3Nlc3REZXRhaWwgPSB0aGlzLmdldERpc3BsYXl0eXBlVmFsdWUocmVzb3VyY2VNZXRhZGF0YU1hdHJpeFtpXS50eXBlKSArICcgOiAnICsgcmVzb3VyY2VNZXRhZGF0YUlEc0R1cmF0aW9uW2tdICsgJyBzZWMnO1xuXG4gICAgICAgICAgICAgICAgQXNzZXN0RGV0YWlsID0gdGhpcy5nZXREaXNwbGF5dHlwZVZhbHVlKHJlc291cmNlTWV0YWRhdGFNYXRyaXhbaV0udHlwZSkgKyAnIDogJyArIHRoaXMuY29udmVydFNlY29uZHMocmVzb3VyY2VNZXRhZGF0YUlEc0R1cmF0aW9uW2tdKTtcblxuICAgICAgICAgICAgICAgIC8vY29udmVydFNlY29uZHNcblxuICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAvL0Fzc2VzdERldGFpbCA9IHRoaXMuZ2V0RGlzcGxheXR5cGVWYWx1ZShyZXNvdXJjZU1ldGFkYXRhTWF0cml4W2ldLnR5cGUpICsgXCIgOiBcIiArIHJlc291cmNlTWV0YWRhdGFNYXRyaXhbaV0udGl0bGUgKyAnIDogJyArIHJlc291cmNlTWV0YWRhdGFJRHNEdXJhdGlvbltrXSArICcgc2VjJztcblxuICAgICAgICAgICAgICAgIEFzc2VzdERldGFpbCA9IHRoaXMuZ2V0RGlzcGxheXR5cGVWYWx1ZShyZXNvdXJjZU1ldGFkYXRhTWF0cml4W2ldLnR5cGUpICsgXCIgOiBcIiArIHJlc291cmNlTWV0YWRhdGFNYXRyaXhbaV0udGl0bGUgKyAnIDogJyArIHRoaXMuY29udmVydFNlY29uZHMocmVzb3VyY2VNZXRhZGF0YUlEc0R1cmF0aW9uW2tdKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAvL0Fzc2VzdERldGFpbCA9IHRoaXMuZ2V0RGlzcGxheXR5cGVWYWx1ZShyZXNvdXJjZU1ldGFkYXRhTWF0cml4W2ldLnR5cGUpICsgXCIgOiBcIiArIHJlc291cmNlTWV0YWRhdGFNYXRyaXhbaV0udGl0bGUgKyAnIDogJyArIHJlc291cmNlTWV0YWRhdGFJRHNEdXJhdGlvbltrXTtcblxuICAgICAgICAgICAgICByZXNvdXJjZUFycmF5Rm9yVGFibGVDaGFydCA9IFt0ZWFjaGVyTmFtZSx0ZWFjaGVyU3ViamVjdCxjdXJyZW50RGF0ZSxzdGFydFRpbWUsZW5kVGltZSxkdXJhdGlvbixyb29tRGV0YWlsLHN1YmplY3QsZ3JhZGUsY2hhcHRlcix0ZWFjaGluZ3BvaW50LEFzc2VzdERldGFpbF07XG4gICAgICAgICAgICAgIHJlc291cmNlTWF0cml4Rm9yVGFibGVDaGFydC5wdXNoKHJlc291cmNlQXJyYXlGb3JUYWJsZUNoYXJ0KTtcbiAgICAgICAgICAgICAgICB0ZWFjaGVyTmFtZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0ZWFjaGVyU3ViamVjdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBjdXJyZW50RGF0ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBzdGFydFRpbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgZW5kVGltZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByb29tRGV0YWlsID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzb3VyY2VNYXRyaXhGb3JUYWJsZUNoYXJ0O1xuICB9XG4gIGRhdGFGb3JEZXRhaWxlZFZpZXcodXNlckNvbnNvbGVNYXRyaXg6IGFueSxyZXNvdXJjZU1ldGFkYXRhTWF0cml4OiBhbnksIHJvd0xhYmVsOiBhbnkpIHtcbiAgICBsZXQgZGV0YWlsZWRWaWV3X1VzZXJEYXRhTWF0cml4ID0gbmV3IEFycmF5KCk7XG4gICAgICAgICBkZXRhaWxlZFZpZXdfVXNlckRhdGFNYXRyaXggPSBbXTtcbiAgICBsZXQgZGV0YWlsZWRWaWV3X1Jlc291cmNlRGF0YU1hdHJpeCA9IG5ldyBBcnJheSgpO1xuICAgICAgICAgZGV0YWlsZWRWaWV3X1Jlc291cmNlRGF0YU1hdHJpeCA9IFtdO1xuICBcbiAgICAgIGxldCBzdGFydFRpbWU6IGFueTtcbiAgICAgIGxldCBlbmRUaW1lOiBhbnk7XG4gICAgICBsZXQgZHVyYXRpb246IGFueTtcbiAgICAgIGxldCB0ZXJtaW5hbElQOiBhbnk7XG4gICAgICBsZXQgc3ViamVjdDogYW55O1xuICAgICAgbGV0IGdyYWRlOiBhbnk7XG4gICAgICBsZXQgY2hhcHRlcjogYW55O1xuICAgICAgbGV0IEFzc2VzdERldGFpbDogYW55O1xuICAgICAgbGV0IHRlYWNoaW5ncG9pbnQ6IGFueTtcbiAgICAgIGxldCBsb2NhdGlvbjogYW55O1xuICAgICAgbGV0IHRlYWNoZXJOYW1lOiBhbnk7XG4gICAgICBsZXQgdGVhY2hlclN1YmplY3Q6IGFueTtcbiAgICAgIGxldCBjdXJyZW50RGF0ZTogYW55O1xuICAgICAgbGV0IHJlc291cmNlTWV0YWRhdGFJRHM6IGFueTtcbiAgICAgIGxldCByZXNvdXJjZU1ldGFkYXRhSURzZHVyYXRpb246IGFueTtcbiAgICAgIGxldCByZXNvdXJjZUFycmF5Rm9yVGFibGVDaGFydCA9IG5ldyBBcnJheSgpO1xuICAgICAgcmVzb3VyY2VBcnJheUZvclRhYmxlQ2hhcnQgPSBbXTtcbiAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLSBmb3Igc3ViamVjdCBhbmQgTmFtZVxuICAgICAgdGVhY2hlclN1YmplY3QgPSB1c2VyQ29uc29sZU1hdHJpeFtyb3dMYWJlbF0udXNlclN1YmplY3RzO1xuICAgICAgdGVhY2hlck5hbWUgPSB1c2VyQ29uc29sZU1hdHJpeFtyb3dMYWJlbF0udXNlck5hbWU7XG4gICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tIGZvciBzdGFydCBUaW1lICBhbmQgRW5kVGltZVxuICAgICAgaWYgKCh1c2VyQ29uc29sZU1hdHJpeFtyb3dMYWJlbF0uc3RhcnRUaW1lICE9IHVuZGVmaW5lZCAmJiB1c2VyQ29uc29sZU1hdHJpeFtyb3dMYWJlbF0uc3RhcnRUaW1lICE9IFwiXCIpICYmICh1c2VyQ29uc29sZU1hdHJpeFtyb3dMYWJlbF0uZW5kVGltZSAhPSB1bmRlZmluZWQmJnVzZXJDb25zb2xlTWF0cml4W3Jvd0xhYmVsXS5lbmRUaW1lICE9IFwiXCIpKSB7XG4gICAgICAgIHN0YXJ0VGltZSA9IHVzZXJDb25zb2xlTWF0cml4W3Jvd0xhYmVsXS5zdGFydFRpbWUudG9Mb2NhbGVUaW1lU3RyaW5nKCdlbi1VUycsIHsgaG91cjEyOiB0cnVlIH0pO1xuICAgICAgICBlbmRUaW1lID0gdXNlckNvbnNvbGVNYXRyaXhbcm93TGFiZWxdLmVuZFRpbWUudG9Mb2NhbGVUaW1lU3RyaW5nKCdlbi1VUycsIHsgaG91cjEyOiB0cnVlIH0pO1xuICAgICAgICBjdXJyZW50RGF0ZSA9IHVzZXJDb25zb2xlTWF0cml4W3Jvd0xhYmVsXS5zdGFydFRpbWUuZ2V0RGF0ZSgpICsgJy8nICsgdXNlckNvbnNvbGVNYXRyaXhbcm93TGFiZWxdLnN0YXJ0VGltZS5nZXRNb250aCgpICsgJy8nICsgdXNlckNvbnNvbGVNYXRyaXhbcm93TGFiZWxdLnN0YXJ0VGltZS5nZXRGdWxsWWVhcigpO1xuICAgICAgfVxuICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLSBmb3IgZHVyYXRpb25cbiAgICAgIGR1cmF0aW9uID0gTWF0aC5mbG9vcih1c2VyQ29uc29sZU1hdHJpeFtyb3dMYWJlbF0uZHVyYXRpb24pO1xuICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLSBmb3IgVGVybWluYWwgbG9hY3Rpb24gYW5kIHRlcm1pbmFsIElQXG4gICAgICBsb2NhdGlvbiA9IHVzZXJDb25zb2xlTWF0cml4W3Jvd0xhYmVsXS50ZXJtaW5hbExvY2F0aW9uO1xuICAgICAgdGVybWluYWxJUCA9IHVzZXJDb25zb2xlTWF0cml4W3Jvd0xhYmVsXS50ZXJtaW5hbElQO1xuICAgICAgbGV0IHJvb21EZXRhaWwgPSBsb2NhdGlvbiArICcgJyArIHRlcm1pbmFsSVA7XG4gICAgICByZXNvdXJjZU1ldGFkYXRhSURzID0gdXNlckNvbnNvbGVNYXRyaXhbcm93TGFiZWxdLnJlc291cmNlTWV0YXVzZXJDb25zb2xlRGF0YTtcbiAgICAgIHJlc291cmNlTWV0YWRhdGFJRHNkdXJhdGlvbiA9IHVzZXJDb25zb2xlTWF0cml4W3Jvd0xhYmVsXS5yZXNvdXJjZUR1cmF0aW9uRnJvbUNvbnNvbGU7XG5cbiAgICAgIGRldGFpbGVkVmlld19Vc2VyRGF0YU1hdHJpeCA9ICBbdGVhY2hlck5hbWUsc3RhcnRUaW1lLHRlYWNoZXJTdWJqZWN0LGVuZFRpbWUscm9vbURldGFpbF1cbiAgICAgIFxuICAgICAgaWYgKHJlc291cmNlTWV0YWRhdGFJRHMubGVuZ3RoID09IDApIHtcbiAgICAgICAgc3ViamVjdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgZ3JhZGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIGNoYXB0ZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRlYWNoaW5ncG9pbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIEFzc2VzdERldGFpbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gcmVzb3VyY2VBcnJheUZvclRhYmxlQ2hhcnQgPSBbc3ViamVjdCxncmFkZSxjaGFwdGVyLHRlYWNoaW5ncG9pbnQsQXNzZXN0RGV0YWlsXTtcbiAgICAgICAgLy8gZGV0YWlsZWRWaWV3X1Jlc291cmNlRGF0YU1hdHJpeC5wdXNoKHJlc291cmNlQXJyYXlGb3JUYWJsZUNoYXJ0KTtcbiAgICAgIH1lbHNle1xuICAgICAgICAvL3NhdHlhaml0XG4gICAgICAgICAvL3Jlc291cmNlTWV0YWRhdGFNYXRyaXggPSBbcmVzb3VzZUlELHN1YmplY3QsZ3JhZGUsY2hhcHRlcix0ZWFjaGluZ3BvaW50LHR5cGUsdGl0bGVdXG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgcmVzb3VyY2VNZXRhZGF0YUlEcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzb3VyY2VNZXRhZGF0YU1hdHJpeC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHJlc291cmNlTWV0YWRhdGFJRHNba10gPT09IHJlc291cmNlTWV0YWRhdGFNYXRyaXhbaV0ucmVzb3VzZUlEKSB7XG4gICAgICAgICAgICAgIHN1YmplY3QgPSByZXNvdXJjZU1ldGFkYXRhTWF0cml4W2ldLnN1YmplY3Q7XG4gICAgICAgICAgICAgIGdyYWRlID0gcmVzb3VyY2VNZXRhZGF0YU1hdHJpeFtpXS5ncmFkZTtcbiAgICAgICAgICAgICAgY2hhcHRlciA9IHJlc291cmNlTWV0YWRhdGFNYXRyaXhbaV0uY2hhcHRlcjtcbiAgICAgICAgICAgICAgdGVhY2hpbmdwb2ludCA9IHJlc291cmNlTWV0YWRhdGFNYXRyaXhbaV0udGVhY2hpbmdwb2ludDtcbiAgICAgICAgICAgICAgaWYocmVzb3VyY2VNZXRhZGF0YU1hdHJpeFtpXS50aXRsZS50b0xvd2VyQ2FzZSgpID09PSAnd2hpdGVib2FyZCcgfHwgcmVzb3VyY2VNZXRhZGF0YU1hdHJpeFtpXS50aXRsZS50b0xvd2VyQ2FzZSgpID09PSAncXVlc3Rpb24nKXtcbiAgICAgICAgICAgICAgICAvL0Fzc2VzdERldGFpbCA9IHJlc291cmNlTWV0YWRhdGFNYXRyaXhbaV0udHlwZSArIFwiOiBcIiArIHJlc291cmNlTWV0YWRhdGFJRHNkdXJhdGlvbltrXSArICcgc2VjJztcbiAgICAgICAgICAgICAgICBBc3Nlc3REZXRhaWwgPSByZXNvdXJjZU1ldGFkYXRhTWF0cml4W2ldLnR5cGUgKyBcIjogXCIgKyB0aGlzLmNvbnZlcnRTZWNvbmRzKHJlc291cmNlTWV0YWRhdGFJRHNkdXJhdGlvbltrXSk7XG4gICAgICAgICAgICAgICAgLy9jb252ZXJ0U2Vjb25kc1xuICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAvL0Fzc2VzdERldGFpbCA9IHJlc291cmNlTWV0YWRhdGFNYXRyaXhbaV0udHlwZSArIFwiOiBcIiArIHJlc291cmNlTWV0YWRhdGFNYXRyaXhbaV0udGl0bGUgKyBcIjogXCIgKyByZXNvdXJjZU1ldGFkYXRhSURzZHVyYXRpb25ba10gKyAnIHNlYyc7XG4gICAgICAgICAgICAgICAgQXNzZXN0RGV0YWlsID0gcmVzb3VyY2VNZXRhZGF0YU1hdHJpeFtpXS50eXBlICsgXCI6IFwiICsgcmVzb3VyY2VNZXRhZGF0YU1hdHJpeFtpXS50aXRsZSArIFwiOiBcIiArIHRoaXMuY29udmVydFNlY29uZHMocmVzb3VyY2VNZXRhZGF0YUlEc2R1cmF0aW9uW2tdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIHJlc291cmNlQXJyYXlGb3JUYWJsZUNoYXJ0ID0gW3N1YmplY3QsZ3JhZGUsY2hhcHRlcix0ZWFjaGluZ3BvaW50LEFzc2VzdERldGFpbF07XG4gICAgICAgICAgICAgIGRldGFpbGVkVmlld19SZXNvdXJjZURhdGFNYXRyaXgucHVzaChyZXNvdXJjZUFycmF5Rm9yVGFibGVDaGFydCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9ICAgXG4gICAgICBcbiAgICByZXR1cm4ge3VzZXJEZXRhaWxzOmRldGFpbGVkVmlld19Vc2VyRGF0YU1hdHJpeCxyZXNvdXJjZURldGFpbHM6ZGV0YWlsZWRWaWV3X1Jlc291cmNlRGF0YU1hdHJpeH07XG4gIH1cbiAgIC8vIFRvIEdFVCBESVNQTEFZIFRZUEVcbiAgIGdldERpc3BsYXl0eXBlVmFsdWUoa2V5OiBhbnkpIHtcbiAgICBsZXQgYXNzZXRUeXBlQ29uZmlnID0gW1xuICAgICAge1xuICAgICAgICB0eXBlOiBcImFzc2V0X21lZGlhXCIsXG4gICAgICAgIGRpc3BsYXk6IFwiTWVkaWFcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJhc3NldF9wcmludFwiLFxuICAgICAgICBkaXNwbGF5OiBcIlByaW50XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicXVpelwiLFxuICAgICAgICBkaXNwbGF5OiBcIlF1aXpcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJxdWVzdGlvblwiLFxuICAgICAgICBkaXNwbGF5OiBcIlF1ZXN0aW9uXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiY2hhcHRlclwiLFxuICAgICAgICBkaXNwbGF5OiBcIkNoYXB0ZXJcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJ0cFwiLFxuICAgICAgICBkaXNwbGF5OiBcIlRvcGljXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwid2hpdGVib2FyZFwiLFxuICAgICAgICBkaXNwbGF5OiBcIldoaXRlYm9hcmRcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJ3aWRnZXRcIixcbiAgICAgICAgZGlzcGxheTogXCJXaWRnZXRcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJjYXNzZXRfbWVkaWFcIixcbiAgICAgICAgZGlzcGxheTogXCJjTWVkaWFcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJjYXNzZXRfcHJpbnRcIixcbiAgICAgICAgZGlzcGxheTogXCJjUHJpbnRcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJjcXVpelwiLFxuICAgICAgICBkaXNwbGF5OiBcImNRdWl6XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiY3F1ZXN0aW9uXCIsXG4gICAgICAgIGRpc3BsYXk6IFwiY1F1ZXN0aW9uXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiaW1hZ2VcIixcbiAgICAgICAgZGlzcGxheTogXCJJbWFnZVwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInZpZGVvXCIsXG4gICAgICAgIGRpc3BsYXk6IFwiVmlkZW9cIlxuICAgICAgfSxcblxuICAgIF07XG4gICAgbGV0IGRpc3BsYXlWYWx1ZSA9IGtleTtcbiAgICBhc3NldFR5cGVDb25maWcuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgIGlmICh2YWx1ZS50eXBlID09PSBrZXkpIHtcbiAgICAgICAgZGlzcGxheVZhbHVlID0gdmFsdWUuZGlzcGxheTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZGlzcGxheVZhbHVlO1xuXG4gIH1cblxuICBjb252ZXJ0U2Vjb25kcyhzZWNvbmRzKSB7XG4gICAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICBjb25zdCByZW1haW5pbmdTZWNvbmRzID0gc2Vjb25kcyAlIDYwO1xuICAgIHJldHVybiBgJHttaW51dGVzfW0gJHtyZW1haW5pbmdTZWNvbmRzfXNgO1xuICB9XG59XG4iXX0=
822
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbmNpcGFsLWRhc2hib2FyZC1saWItdjIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3ByaW5jaXBhbC1kYXNoYm9hcmQtbGliLXYyL3NyYy9saWIvcHJpbmNpcGFsLWRhc2hib2FyZC1saWItdjIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBVyxlQUFlLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQU0vRCxNQUFNLE9BQU8sOEJBQThCO0lBbUN6QztRQTdCSywyQkFBc0IsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQzdDLDRCQUF1QixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVyRSw0QkFBdUIsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQzlDLDZCQUF3QixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV0RSxnQkFBVyxHQUFRLEVBQUUsQ0FBQztRQUNyQixhQUFRLEdBQVEsRUFBRSxDQUFDO1FBQ25CLGdCQUFXLEdBQVEsRUFBRSxDQUFDO1FBQ3RCLGlCQUFZLEdBQVEsRUFBQyxXQUFXLEVBQUMsRUFBRSxFQUFDLGVBQWUsRUFBQyxFQUFFLEVBQUMsQ0FBQztRQUN4RCxvQkFBZSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7UUFDOUIscUJBQWdCLEdBQVEsRUFBRSxDQUFDO1FBQzNCLGFBQVEsR0FBTyxLQUFLLENBQUM7UUFHNUIsdUJBQXVCO1FBQ2hCLGNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbEQsZUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEQscURBQXFEO1FBQzlDLG9CQUFlLEdB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UUFDRixJQUFJLFlBQVksR0FBRyxHQUFHLENBQUM7UUFDdkIsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2hDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxHQUFHLEVBQUU7Z0JBQ3RCLFlBQVksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO2FBQzlCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFlBQVksQ0FBQztJQUV0QixDQUFDO0lBRUQsY0FBYyxDQUFDLE9BQU87UUFDcEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDekMsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ3RDLE9BQU8sR0FBRyxPQUFPLEtBQUssZ0JBQWdCLEdBQUcsQ0FBQztJQUM1QyxDQUFDOzs7O1lBOTNCRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCBCZWhhdmlvclN1YmplY3QsIFJlcGxheVN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQcmluY2lwYWxEYXNoYm9hcmRMaWJWMlNlcnZpY2Uge1xucHVibGljIHJlc291cmVNZXRhRGF0YTphbnk7XG5wdWJsaWMgdXNlcnNNZXRhRGF0YTphbnk7XG5wdWJsaWMgc2Nob29sVGVybWluYWxEYXRhOmFueTtcbnB1YmxpYyB1c2VyQ29uc29sZURhdGE6YW55O1xuXG5wdWJsaWMgaXNSZXNvdXJlTWV0YURhdGFSZWFkeSA9IG5ldyBSZXBsYXlTdWJqZWN0KCk7XG5wdWJsaWMgaXNSZXNvdXJlTWV0YURhdGFSZWFkeSQgPSB0aGlzLmlzUmVzb3VyZU1ldGFEYXRhUmVhZHkuYXNPYnNlcnZhYmxlKCk7XG5cbnB1YmxpYyBpc1VzZXJSZXFpdXJlZERhdGFSZWFkeSA9IG5ldyBSZXBsYXlTdWJqZWN0KCk7XG5wdWJsaWMgaXNVc2VyUmVxaXVyZWREYXRhUmVhZHkkID0gdGhpcy5pc1VzZXJSZXFpdXJlZERhdGFSZWFkeS5hc09ic2VydmFibGUoKTtcblxuIHB1YmxpYyBteWNoYXJ0VHlwZTogYW55ID0gJyc7XG4gIHB1YmxpYyBkYXRhVHlwZTogYW55ID0gJyc7XG4gIHB1YmxpYyB1c2VyQWxsRGF0YTogYW55ID0gJyc7XG4gIHB1YmxpYyB1c2VyTWV0YWRhdGE6IGFueSA9IHt1c2VyRGV0YWlsczpbXSxyZXNvdXJjZURldGFpbHM6W119O1xuICBwdWJsaWMgcmVzb3VyZU1ldGFkYXRhID0gbmV3IEFycmF5KCk7XG4gIHB1YmxpYyB1c2VyRGV0YWlsT2JqZWN0OiBhbnkgPSB7fTtcbiAgcHVibGljIHVzZXJsaXN0OmFueSA9IGZhbHNlO1xuICBwdWJsaWMgbXlFbmRUaW1lIDphbnk7XG4gXG4gIC8vZm9yIGNoYW5nZSBjaGFydCBUeXBlXG4gIHB1YmxpYyBjaGFydFR5cGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRoaXMubXljaGFydFR5cGUpO1xuICBwdWJsaWMgY2hhcnRUeXBlJCA9IHRoaXMuY2hhcnRUeXBlLmFzT2JzZXJ2YWJsZSgpO1xuICAvL2ZvciBjaGFuZ2UgdXNlcldpc2UgVG8gY2xhc3NSb29tIHdpc2Ugb3IgdmljZSB2ZXJzYVxuICBwdWJsaWMgaXNVc2VyV2lzZV9kYXRhID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0cnVlKTtcbiAgcHVibGljIGlzVXNlcldpc2VfZGF0YSQgPSB0aGlzLmlzVXNlcldpc2VfZGF0YS5hc09ic2VydmFibGUoKTtcbiAgLy8gZm9yIGFsbCB1c2VyIGFuZCBjdXJyZW50IHVzZXIgaW5mb3JtYXRpb25cbiAgcHVibGljIGlzQWxsVXNlcnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRoaXMudXNlcmxpc3QpO1xuICBwdWJsaWMgaXNBbGxVc2VycyQgPSB0aGlzLmlzQWxsVXNlcnMuYXNPYnNlcnZhYmxlKCk7XG4gIC8vZm9yIGdldCBkZXRhaWxzIG9mIHNlbGVjdGVkIHVzZXJcbiAgcHVibGljIGRldGFpbGVkdmlld0RhdGEgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRoaXMudXNlck1ldGFkYXRhKTtcbiAgcHVibGljIGRldGFpbGVkdmlld0RhdGEkID0gdGhpcy5kZXRhaWxlZHZpZXdEYXRhLmFzT2JzZXJ2YWJsZSgpO1xuXG5cbiAgY29uc3RydWN0b3IoKSB7IH1cbiBcbiAgZ2VuYXJhdGVSZXNvdXJzZVJlcWl1cmVkRGF0YShkYXRhOiBhbnkpOiBhbnkge1xuICAgIHRoaXMuaXNSZXNvdXJlTWV0YURhdGFSZWFkeS5uZXh0KGZhbHNlKTtcbiAgICBsZXQgcmVzb3VyY2VNZXRhZGF0YU1hdHJpeCA9IG5ldyBBcnJheSgpO1xuICAgIFxuICAgICAgaWYoZGF0YSAmJiBkYXRhICE9PSBudWxsKXtcbiAgICAgICAgbGV0IHJlc291c2VJRDogYW55O1xuICAgICAgICBsZXQgdGl0bGU6IGFueTtcbiAgICAgICAgbGV0IHN1YmplY3Q6IGFueTtcbiAgICAgICAgbGV0IGdyYWRlOiBhbnk7XG4gICAgICAgIGxldCBjaGFwdGVyOiBhbnk7XG4gICAgICAgIGxldCB0ZWFjaGluZ3BvaW50OiBhbnk7XG4gICAgICAgIGxldCB0eXBlOiBhbnk7XG4gICAgICAgIGxldCByZXNvdXJjZU1ldGFkYXRhID0gZGF0YS5yZXNvdXJjZXNNZXRhZGF0YS5yZXNvdXJjZU1ldGFkYXRhO1xuICAgICAgIFxuICAgICAgICBpZihyZXNvdXJjZU1ldGFkYXRhIT0gdW5kZWZpbmVkICYmIHJlc291cmNlTWV0YWRhdGEubGVuZ3RoPjApIHtcbiAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXNvdXJjZU1ldGFkYXRhLmxlbmd0aDtpKyspe1xuICAgICAgICAgICAgLy8tLS0tLS0tLS0tLy9yZXNvdXNlSURcbiAgICAgICAgICAgIHJlc291c2VJRCA9IHJlc291cmNlTWV0YWRhdGFbaV0ucmVzb3VyY2VJZDtcbiAgICAgICAgICAgIC8vLS0tLS0tLS0tLS8vc3ViamVjdFxuICAgICAgICAgICAgaWYgKHJlc291cmNlTWV0YWRhdGFbaV0uc3ViamVjdCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgaWYgKHJlc291cmNlTWV0YWRhdGFbaV0uc3ViamVjdC50aXRsZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzdWJqZWN0ID0gcmVzb3VyY2VNZXRhZGF0YVtpXS5zdWJqZWN0LnRpdGxlO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN1YmplY3QgPSAnJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3ViamVjdCA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8tLS0tLS0tLS0tLy9ncmFkZVxuICAgICAgICAgICAgaWYgKHJlc291cmNlTWV0YWRhdGFbaV0uZ3JhZGUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGlmIChyZXNvdXJjZU1ldGFkYXRhW2ldLmdyYWRlLnRpdGxlICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGdyYWRlID0gcmVzb3VyY2VNZXRhZGF0YVtpXS5ncmFkZS50aXRsZTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBncmFkZSA9ICcnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBncmFkZSA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIC8vLS0tLS0tLS0tLS8vY2hhcHRlclxuICAgICAgICAgIGlmIChyZXNvdXJjZU1ldGFkYXRhW2ldLmNoYXB0ZXIgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAocmVzb3VyY2VNZXRhZGF0YVtpXS5jaGFwdGVyLnRpdGxlICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBjaGFwdGVyID0gcmVzb3VyY2VNZXRhZGF0YVtpXS5jaGFwdGVyLnRpdGxlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY2hhcHRlciA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjaGFwdGVyID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgLy8tLS0tLS0tLS0tLy90ZWFjaGluZ3BvaW50XG4gICAgICAgICAgaWYgKHJlc291cmNlTWV0YWRhdGFbaV0udGVhY2hpbmdwb2ludCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmIChyZXNvdXJjZU1ldGFkYXRhW2ldLnRlYWNoaW5ncG9pbnQudGl0bGUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHRlYWNoaW5ncG9pbnQgPSByZXNvdXJjZU1ldGFkYXRhW2ldLnRlYWNoaW5ncG9pbnQudGl0bGU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0ZWFjaGluZ3BvaW50ID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRlYWNoaW5ncG9pbnQgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8tLS0tLS0tLS0tLy90eXBlXG4gICAgICAgICAgaWYgKHJlc291cmNlTWV0YWRhdGFbaV0udHlwZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgdHlwZSA9IHRoaXMuZ2V0RGlzcGxheXR5cGVWYWx1ZShyZXNvdXJjZU1ldGFkYXRhW2ldLnR5cGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdHlwZSA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICAvLy0tLS0tLS0tLS0vL3RpdGxlXG4gICAgICAgICAgaWYgKHJlc291cmNlTWV0YWRhdGFbaV0udGl0bGUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aXRsZSA9IHJlc291cmNlTWV0YWRhdGFbaV0udGl0bGU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRpdGxlID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHJlc291cmNlTWV0YXVzZXJDb25zb2xlRGF0YSA9IHtcbiAgICAgICAgICAgICAgcmVzb3VzZUlEOnJlc291c2VJRCxcbiAgICAgICAgICAgICAgc3ViamVjdDpzdWJqZWN0LFxuICAgICAgICAgICAgICBncmFkZTpncmFkZSxcbiAgICAgICAgICAgICAgY2hhcHRlcjpjaGFwdGVyLFxuICAgICAgICAgICAgICB0ZWFjaGluZ3BvaW50OnRlYWNoaW5ncG9pbnQsXG4gICAgICAgICAgICAgIHR5cGU6dHlwZSxcbiAgICAgICAgICAgICAgdGl0bGU6dGl0bGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc291cmNlTWV0YWRhdGFNYXRyaXgucHVzaChyZXNvdXJjZU1ldGF1c2VyQ29uc29sZURhdGEpO1xuICAgICAgICAgICAgdGhpcy5yZXNvdXJlTWV0YURhdGEgPSByZXNvdXJjZU1ldGFkYXRhTWF0cml4O1xuICAgICAgICAgICAgdGhpcy5pc1Jlc291cmVNZXRhRGF0YVJlYWR5Lm5leHQodHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgLy8gdGhpcy5yZXNvdXJlTWV0YURhdGEgPSByZXNvdXJjZU1ldGFkYXRhTWF0cml4O1xuICAgIHJldHVybiByZXNvdXJjZU1ldGFkYXRhTWF0cml4O1xuICB9XG4gIGdlbmFyYXRlVXNlclJlcWl1cmVkRGF0YShkYXRhOiBhbnkpOiBhbnkge1xuICAgIHRoaXMuaXNVc2VyUmVxaXVyZWREYXRhUmVhZHkubmV4dChmYWxzZSk7XG4gICAgbGV0IHVzZXJzTWV0YWRhdGFNYXRyaXggPSBuZXcgQXJyYXkoKTtcbiAgICBsZXQgdXNlcm1ldGFkYXRhTWF0cml4VXBkYXRlZCA9IG5ldyBBcnJheSgpO1xuICAgIGxldCBzY2hvb2xUZXJtaW5hbE1hdHJpeCA9IG5ldyBBcnJheSgpO1xuICAgIGxldCB1c2VyQ29uc29sZU1hdHJpeCA9IG5ldyBBcnJheSgpO1xuICAgIGlmKGRhdGEgJiYgZGF0YSAhPT0gbnVsbCl7XG4gICAgICBsZXQgdXNlckNvbnNvbGUgPSBkYXRhLnVzZXJzQ29uc29sZS51c2VyQ29uc29sZTtcbiAgICAgIGxldCB1c2Vyc01ldGFkYXRhID0gZGF0YS51c2Vyc01ldGFkYXRhLnVzZXJNZXRhZGF0YTtcbiAgICAgIGxldCBzY2hvb2xUZXJtaW5hbCA9IGRhdGEuc2Nob29sVGVybWluYWxzLnNjaG9vbFRlcm1pbmFsO1xuICAgICAgXG4gICAgICBpZih1c2Vyc01ldGFkYXRhIT0gbnVsbCAmJiB1c2Vyc01ldGFkYXRhLmxlbmd0aCA+IDApe1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHVzZXJzTWV0YWRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBsZXQgdXNlcklkOiBhbnk7XG4gICAgICAgICAgbGV0IHVzZXJOYW1lOiBhbnk7XG4gICAgICAgICAgbGV0IHVzZXJTdWJqZWN0czogYW55O1xuICAgICAgICAgIGxldCBsaXN0T2ZVc2VyOmFueSA9IHt9XG4gICAgICAgICAgaWYgKHVzZXJzTWV0YWRhdGFbaV0udXNlcklkIT1cIlwiKSB7XG4gICAgICAgICAgICB1c2VySWQgPSB1c2Vyc01ldGFkYXRhW2ldLnVzZXJJZDtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCItLWNoYXJ0RGF0YVVzZXJXaXNlLS0+PlwiLHVzZXJzTWV0YWRhdGFbaV0udGVybWluYWxJUClcbiAgICAgICAgICAgIGlmICh1c2Vyc01ldGFkYXRhW2ldLmZ1bGxOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgdXNlck5hbWUgPSB1c2Vyc01ldGFkYXRhW2ldLmZ1bGxOYW1lIC8vIGdldCBuYW1lIG9mIHVzZXIgdy5yLnQuIElEXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB1c2VyTmFtZSA9ICcnO1xuICAgICAgICAgICAgfVxuICBcbiAgICAgICAgICAgIGlmICh1c2Vyc01ldGFkYXRhW2ldLnVzZXJTdWJqZWN0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHVzZXJTdWJqZWN0cyA9IHVzZXJzTWV0YWRhdGFbaV0udXNlclN1YmplY3RzIC8vIGdldCBuYW1lIG9mIHVzZXIgdy5yLnQuIElEXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB1c2VyU3ViamVjdHMgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgIFxuICAgICAgICAgICAgbGlzdE9mVXNlciA9IHtcbiAgICAgICAgICAgICAgdXNlcklkOnVzZXJJZCwgXG4gICAgICAgICAgICAgIHVzZXJOYW1lOnVzZXJOYW1lLCBcbiAgICAgICAgICAgICAgdXNlclN1YmplY3RzOnVzZXJTdWJqZWN0c1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHVzZXJzTWV0YWRhdGFNYXRyaXgucHVzaChsaXN0T2ZVc2VyKTsgICAgICAgICAgICAgICAgICAgICAgLy8gYXJyYXkgb2YgYWxsIHVzZXJzXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVzZXJzTWV0YWRhdGFNYXRyaXgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc29sZS5sb2coJ3VzZXJzTWV0YWRhdGFNYXRyaXgtLT4nLCB1c2Vyc01ldGFkYXRhTWF0cml4W2ldLnVzZXJOYW1lKVxuICAgICAgICB1c2Vyc01ldGFkYXRhTWF0cml4LmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc29sZS5sb2coJ2VsZW1lbnQudXNlck5hbWUtLT4+JywgZWxlbWVudC51c2VyTmFtZSlcbiAgICAgICAgICBpZiAodXNlcnNNZXRhZGF0YU1hdHJpeFtpXS51c2VyTmFtZSA9PT0gZWxlbWVudC51c2VyTmFtZSkge1xuICAgICAgICAgICAgdXNlcm1ldGFkYXRhTWF0cml4VXBkYXRlZC5wdXNoKHVzZXJzTWV0YWRhdGFNYXRyaXhbaV0pOyAgLy9hcnJheSBvZiBzYW1lIG5hbWUgdXNlcnNcbiAgICAgICAgICAgIHVzZXJzTWV0YWRhdGFNYXRyaXguc3BsaWNlKGksIDEpOyAgICAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlIHRoZSBzYW1lIG5hbWUgdXNlcnMgZnJvbSB1c2VybWV0YWRhdGFNYXRyaXhcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1c2VybWV0YWRhdGFNYXRyaXhVcGRhdGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vIGNvbnN0IHJhbmRvbU51bWJlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgLy8gcmFuZG9tTnVtYmVyLmlubmVySFRNTCA9IGkudG9TdHJpbmcoKTtcbiAgICAgICAgLy91c2VybWV0YWRhdGFNYXRyaXhVcGRhdGVkW2ldLnVzZXJOYW1lID0gdXNlcm1ldGFkYXRhTWF0cml4VXBkYXRlZFtpXS51c2VyTmFtZSArIFwiIC0tLSBcIiArIGk7XG4gICAgICAgIC8vc2F0eWFqaXQgMjggYXVnIDIwMjQgcmVtb3ZlZCBjb3VudCBmcm9tIHVzZXJOYW1lXG4gICAgICAgIHVzZXJtZXRhZGF0YU1hdHJpeFVwZGF0ZWRbaV0udXNlck5hbWUgPSB1c2VybWV0YWRhdGFNYXRyaXhVcGRhdGVkW2ldLnVzZXJOYW1lO1xuICAgICAgICB1c2Vyc01ldGFkYXRhTWF0cml4LnB1c2godXNlcm1ldGFkYXRhTWF0cml4VXBkYXRlZFtpXSk7ICAgICAgICAgICAgLy9hZGRpbmcgc2FtZSBuYW1lIHVzZXJzIGluIHVzZXJtZXRhZGF0YU1hdHJpeCB3aXRoIHNvbWUgcmFuZG9tIGNoYXJhdG9yc1xuICAgICAgICB0aGlzLnVzZXJzTWV0YURhdGEgPSB1c2Vyc01ldGFkYXRhTWF0cml4O1xuICAgICAgfVxuICAgICAgaWYoc2Nob29sVGVybWluYWwgIT0gbnVsbCAmJiBzY2hvb2xUZXJtaW5hbC5sZW5ndGggPiAwKXtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY2hvb2xUZXJtaW5hbC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGxldCBzY2hvb2xJZDphbnk7XG4gICAgICAgICAgbGV0IHRlcm1pbmFsS2V5OmFueTtcbiAgICAgICAgICBsZXQgdGVybWluYWxUeXBlOmFueTtcbiAgICAgICAgICBsZXQgbG9jYXRpb246YW55O1xuICAgICAgICAgIGxldCBzY2hvb2xUZXJtaW5hbERhdGE6YW55ID0ge307XG4gICAgXG4gICAgICAgICAgLy8tLS0tLS0tLS0tLy9zY2hvb2xJZFxuICAgICAgICAgIGlmIChzY2hvb2xUZXJtaW5hbFtpXS5zY2hvb2xJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzY2hvb2xJZCA9IHNjaG9vbFRlcm1pbmFsW2ldLnNjaG9vbElkIC8vIGdldCBuYW1lIG9mIHVzZXIgdy5yLnQuIElEXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNjaG9vbElkID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vLS0tLS0tLS0tLS8vdGVybWluYWxLZXlcbiAgICAgICAgICBpZiAoc2Nob29sVGVybWluYWxbaV0udGVybWluYWxLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGVybWluYWxLZXkgPSBzY2hvb2xUZXJtaW5hbFtpXS50ZXJtaW5hbEtleSAvLyBnZXQgbmFtZSBvZiB1c2VyIHcuci50LiBJRFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0ZXJtaW5hbEtleSA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLy0tLS0tLS0tLS0vL3Rlcm1pbmFsVHlwZVxuICAgICAgICAgIGlmIChzY2hvb2xUZXJtaW5hbFtpXS50ZXJtaW5hbFR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGVybWluYWxUeXBlID0gc2Nob29sVGVybWluYWxbaV0udGVybWluYWxUeXBlIC8vIGdldCBuYW1lIG9mIHVzZXIgdy5yLnQuIElEXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRlcm1pbmFsVHlwZSA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgIFxuICAgICAgICAgIC8vLS0tLS0tLS0tLS8vbG9jYXRpb25cbiAgICAgICAgICBpZiAoc2Nob29sVGVybWluYWxbaV0ubWV0YWRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbGV0IG1ldGFkYXRhSlNPTiA9IEpTT04ucGFyc2Uoc2Nob29sVGVybWluYWxbaV0ubWV0YWRhdGEpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBsb2NhdGlvbiA9IG1ldGFkYXRhSlNPTi5sb2NhdGlvbiAvLyBnZXQgbmFtZSBvZiB1c2VyIHcuci50LiBJRFxuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIm1ldGFkYXRhSlNPTlwiLGxvY2F0aW9uKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9jYXRpb24gPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgICBzY2hvb2xUZXJtaW5hbERhdGEgPSB7XG4gICAgICAgICAgc2Nob29sSWQ6c2Nob29sSWQsXG4gICAgICAgICAgdGVybWluYWxLZXk6dGVybWluYWxLZXksXG4gICAgICAgICAgdGVybWluYWxUeXBlOnRlcm1pbmFsVHlwZSxcbiAgICAgICAgICBsb2NhdGlvbjpsb2NhdGlvblxuICAgICAgICB9O1xuICBcbiAgICAgICAgY29uc29sZS5sb2coJ2NjYy0tJyxzY2hvb2xUZXJtaW5hbERhdGEpXG4gICAgICAgICBzY2hvb2xUZXJtaW5hbE1hdHJpeC5wdXNoKHNjaG9vbFRlcm1pbmFsRGF0YSk7XG4gICAgICAgICB0aGlzLnNjaG9vbFRlcm1pbmFsRGF0YSA9IHNjaG9vbFRlcm1pbmFsTWF0cml4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZih1c2VyQ29uc29sZSAhPW51bGwgJiYgdXNlckNvbnNvbGUubGVuZ3RoID4gMCl7XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB1c2VyQ29uc29sZS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICBsZXQgdXNlcklkOiBhbnk7XG4gICAgICAgICAgbGV0IHN0YXJ0VGltZTogYW55O1xuICAgICAgICAgIGxldCBlbmRUaW1lOiBhbnk7XG4gICAgICAgICAgbGV0IGR1cmF0aW9uOiBhbnk7XG4gICAgICAgICAgbGV0IHNlbGVjdGVkRGF0ZTogYW55O1xuICAgICAgICAgIGxldCB0ZXJtaW5hbElQOiBhbnk7XG4gICAgICAgICAgbGV0IHVzZXJDb25zb2xlUmVzb3VyY2VzOiBhbnk7XG4gICAgICAgICAgbGV0IHJlc291cmNlTWV0YWRhdGFJRFM6IGFueTtcbiAgICAgICAgICBsZXQgcmVzb3VyY2VNZXRhdXNlckNvbnNvbGVEYXRhID0gW107XG4gICAgICAgICAgbGV0IHJlc291cmNlRHVyYXRpb25Gcm9tQ29uc29sZSA9IFtdO1xuICAgICAgICAgIGxldCB1c2VyTmFtZTogYW55O1xuICAgICAgICAgIGxldCB1c2VyU3ViamVjdHM6IGFueTtcbiAgICAgICAgICBsZXQgdGVybWluYWxMb2NhdGlvbjogYW55O1xuICAgICAgICAgIGxldCBsYXVuY2hlZEZyb20gPSBbXTtcbiAgICAgICAgICBjb25zb2xlLmxvZygnbXl1c2VyQ29uc29sZScsIHVzZXJDb25zb2xlW2luZGV4XSlcbiAgICAgICAgICAvLy0tLS0tLS0tLS0vL3VzZXIgaURcbiAgICAgICAgICBpZiAodXNlckNvbnNvbGVbaW5kZXhdLnVzZXJJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB1c2VySWQgPSB1c2VyQ29uc29sZVtpbmRleF0udXNlcklkOyAvLyBnZXQgbmFtZSBvZiB1c2VyIHcuci50LiBJRFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1c2VySWQgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8tLS0tLS0tLS0tLy8gc3RhcnRUaW1lIFxuICAgICAgICAgIGlmICh1c2VyQ29uc29sZVtpbmRleF0uc3RhcnRUaW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN0YXJ0VGltZSA9IHVzZXJDb25zb2xlW2luZGV4XS5zdGFydFRpbWU7IC8vIGdldCBuYW1lIG9mIHVzZXIgdy5yLnQuIElEXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YXJ0VGltZSA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLy0tLS0tLS0tLS0vLyBlbmRUaW1lIFxuICAgICAgICAgIGlmICh1c2VyQ29uc29sZVtpbmRleF0uZW5kVGltZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBlbmRUaW1lID0gdXNlckNvbnNvbGVbaW5kZXhdLmVuZFRpbWUgLy8gZ2V0IG5hbWUgb2YgdXNlciB3LnIudC4gSURcbiAgICAgICAgICAgIHRoaXMubXlFbmRUaW1lID0gZW5kVGltZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZW5kVGltZSA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLy0tLS0tLS0tLS0vLyBEYXRlIFxuICAgICAgICAgIGlmICh1c2VyQ29uc29sZVtpbmRleF0uc2VsZWN0ZWREYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHNlbGVjdGVkRGF0ZSA9IHVzZXJDb25zb2xlW2luZGV4XS5zZWxlY3RlZERhdGUgLy8gZ2V0IG5hbWUgb2YgdXNlciB3LnIudC4gSURcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VsZWN0ZWREYXRlID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgICAvLy0tLS0tLS0tLS0vLyBEdXJhdGlvblxuICAgICAgICAgIGlmICh1c2VyQ29uc29sZVtpbmRleF0uZHVyYXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZHVyYXRpb24gPSB1c2VyQ29uc29sZVtpbmRleF0uZHVyYXRpb24gLy8gZ2V0IG5hbWUgb2YgdXNlciB3LnIudC4gSURcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZHVyYXRpb24gPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8tLS0tLS0tLS0tLy8gdGVybWluYWxJUFxuICAgICAgICAgIGlmICh1c2VyQ29uc29sZVtpbmRleF0udGVybWluYWxJUCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0ZXJtaW5hbElQID0gdXNlckNvbnNvbGVbaW5kZXhdLnRlcm1pbmFsSVAgLy8gZ2V0IG5hbWUgb2YgdXNlciB3LnIudC4gSURcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGVybWluYWxJUCA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICAvLy0tLS0tLS0tLS0vLyB1c2VyQ29uc29sZVJlc291cmNlc1xuICAgICAgICAgIGlmICh1c2VyQ29uc29sZVtpbmRleF0udXNlckNvbnNvbGVSZXNvdXJjZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdXNlckNvbnNvbGVSZXNvdXJjZXMgPSB1c2VyQ29uc29sZVtpbmRleF0udXNlckNvbnNvbGVSZXNvdXJjZXMgLy8gZ2V0IG5hbWUgb2YgdXNlciB3LnIudC4gSURcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdXNlckNvbnNvbGVSZXNvdXJjZXMgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBpZih1c2VyQ29uc29sZVJlc291cmNlcyAhPSBudWxsKXtcbiAgICAgICAgICAgIGlmICh1c2VyQ29uc29sZVJlc291cmNlcy51c2VyQ29uc29sZVJlc291cmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgLy8gc2F0eWFqaXQgcmVzb3VyY2Ugd2lzZSBkdXJhdGlvbiBhZGRlZFxuICAgICAgICAgICAgICB1c2VyQ29uc29sZVJlc291cmNlcy51c2VyQ29uc29sZVJlc291cmNlLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJsb29raW5nRm9yOiBcIixpdGVtKVxuICAgICAgICAgICAgICAgIHJlc291cmNlTWV0YXVzZXJDb25zb2xlRGF0YS5wdXNoKGl0ZW0ucmVzb3VyY2VJZCk7IC8vIGdldCBuYW1lIG9mIHVzZXIgdy5yLnQuIElEXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VEdXJhdGlvbkZyb21Db25zb2xlLnB1c2goaXRlbS5kdXJhdGlvbik7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICBpZihpdGVtLmxhdW5jaGVkRnJvbSl7XG4gICAgICAgICAgICAgICAgICBsYXVuY2hlZEZyb20ucHVzaChpdGVtLmxhdW5jaGVkRnJvbSlcbiAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgLy8gcmVzb3VyY2VNZXRhdXNlckNvbnNvbGVEYXRhID0gdXNlckNvbnNvbGVSZXNvdXJjZXMudXNlckNvbnNvbGVSZXNvdXJjZVtpbmRleF1yZXNvdXJjZUlkOyAvLyBnZXQgbmFtZSBvZiB1c2VyIHcuci50LiBJRFxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJsb29raW5nRm9yOiBFTFNFIFwiKVxuICAgICAgICAgICAgICByZXNvdXJjZU1ldGF1c2VyQ29uc29sZURhdGEgPSBbXTtcbiAgICAgICAgICAgICAgcmVzb3VyY2VEdXJhdGlvbkZyb21Db25zb2xlID0gW107XG4gICAgICAgICAgICAgIGxhdW5jaGVkRnJvbSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgICAgLy8tLS0tLS0tLS0tLy8gdXNlck5hbWUgYW5kIHVzZXJTdWJqZWN0c1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdXNlcnNNZXRhZGF0YU1hdHJpeC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHVzZXJJZCA9PT0gdXNlcnNNZXRhZGF0YU1hdHJpeFtpXS51c2VySWQpIHtcbiAgICAgICAgICAgICAgdXNlck5hbWUgPSB1c2Vyc01ldGFkYXRhTWF0cml4W2ldLnVzZXJOYW1lO1xuICAgICAgICAgICAgICB1c2VyU3ViamVjdHMgPSB1c2Vyc01ldGFkYXRhTWF0cml4W2ldLnVzZXJTdWJqZWN0cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8tLS0tLS0tLS0tLy8gdGVybWluYWxJUCBhbmQgdGVybWluYWxMb2NhdGlvblxuICAgICAgICAgXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzY2hvb2xUZXJtaW5hbE1hdHJpeC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcInNjaG9vbFRlcm1pbmFsTWF0cml4W2ldXCIsc2Nob29sVGVybWluYWxNYXRyaXhbaV0pO1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcInNjaG9vbFRlcm1pbmFsTWF0cml4W2ldLnRlcm1pbmFsS2V5XCIsdGVybWluYWxJUCxzY2hvb2xUZXJtaW5hbE1hdHJpeFtpXS50ZXJtaW5hbEtleSk7XG4gICAgICAgICAgICBpZiAodGVybWluYWxJUCA9PT0gc2Nob29sVGVybWluYWxNYXRyaXhbaV0udGVybWluYWxLZXkpIHtcbiAgICAgICAgICAgICAgdGVybWluYWxMb2NhdGlvbiA9IHNjaG9vbFRlcm1pbmFsTWF0cml4W2ldLmxvY2F0aW9uO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICB0ZXJtaW5hbExvY2F0aW9uID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGlmICh0ZXJtaW5hbExvY2F0aW9uID09PSB1bmRlZmluZWQgfHwgdGVybWluYWxMb2NhdGlvbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRlcm1pbmFsTG9jYXRpb24gPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgdXNlckRhdGEgPSB7XG4gICAgICAgICAgICB1c2VySWQ6IHVzZXJJZCxcbiAgICAgICAgICAgIHVzZXJOYW1lOiB1c2VyTmFtZSxcbiAgICAgICAgICAgIHN0YXJ0VGltZTogbmV3IERhdGUoc3RhcnRUaW1lKSxcbiAgICAgICAgICAgIGVuZFRpbWU6IG5ldyBEYXRlKGVuZFRpbWUpLFxuICAgICAgICAgICAgdGVybWluYWxJUDogdGVybWluYWxJUCxcbiAgICAgICAgICAgIHJlc291cmNlTWV0YXVzZXJDb25zb2xlRGF0YTogcmVzb3VyY2VNZXRhdXNlckNvbnNvbGVEYXRhLFxuICAgICAgICAgICAgcmVzb3VyY2VEdXJhdGlvbkZyb21Db25zb2xlOiByZXNvdXJjZUR1cmF0aW9uRnJvbUNvbnNvbGUsXG4gICAgICAgICAgICBsYXVuY2hlZEZyb206IGxhdW5jaGVkRnJvbSxcbiAgICAgICAgICAgIGR1cmF0aW9uOmR1cmF0aW9uLFxuICAgICAgICAgICAgdGVybWluYWxMb2NhdGlvbjp0ZXJtaW5hbExvY2F0aW9uLFxuICAgICAgICAgICAgdXNlclN1YmplY3RzOnVzZXJTdWJqZWN0c1xuICAgICAgICAgIH07XG4gICAgICAgICAgdXNlckNvbnNvbGVNYXRyaXgucHVzaCh1c2VyRGF0YSk7XG4gICAgICAgICAgdGhpcy51c2VyQ29uc29sZURhdGEgPSB1c2VyQ29uc29sZU1hdHJpeDtcbiAgICAgICAgICB0aGlzLmlzVXNlclJlcWl1cmVkRGF0YVJlYWR5Lm5leHQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgfVxuICAgIH1cbiAgLy8gY29uc29sZS5sb2codXNlcnNNZXRhZGF0YU1hdHJpeCxzY2hvb2xUZXJtaW5hbE1hdHJpeCx1c2VyQ29uc29sZU1hdHJpeCk7XG4gICAgIHJldHVybiB7XG4gICAgICB1c2Vyc01ldGFkYXRhOnVzZXJzTWV0YWRhdGFNYXRyaXgsXG4gICAgICBzY2hvb2xUZXJtaW5hbERhdGE6c2Nob29sVGVybWluYWxNYXRyaXgsXG4gICAgICB1c2VyQ29uc29sZURhdGE6IHVzZXJDb25zb2xlTWF0cml4XG4gICAgfVxuICB9XG4gIHVzZXJXaXNlQ2hhcnREYXRhKCl7XG4gICAgbGV0IGRhdGFUYWJsZWZvckNoYXJ0ID0gbmV3IEFycmF5KCk7XG4gICAgZGF0YVRhYmxlZm9yQ2hhcnQgPSBbXTtcbiAgICBpZih0aGlzLnVzZXJDb25zb2xlRGF0YSl7XG4gICAgICBcbiAgICAgIGlmKHRoaXMudXNlckNvbnNvbGVEYXRhLmxlbmd0aCA+IDApe1xuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgdGhpcy51c2VyQ29uc29sZURhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiY2hhcnREYXRhVXNlcldpc2VOZXctLT4+XCIsdGhpcy51c2VyQ29uc29sZURhdGEpXG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhcImNoYXJ0RGF0YVVzZXJXaXNlTmV3LS0+PlwiLHRoaXMudXNlckNvbnNvbGVEYXRhLnVzZXJOYW1lKVxuICAgICAgICAgIFxuICAgICAgICAgIGlmKHR5cGVvZiB0aGlzLnVzZXJDb25zb2xlRGF0YVtpXS51c2VyTmFtZSA9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgIHRoaXMudXNlckNvbnNvbGVEYXRhW2ldLnVzZXJOYW1lID0gKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMCkpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vLyBTQVRZQUpJVCBUTyBDSEVDSyAxOSBTRVBULlxuXG4gICAgICAgICAgXG4gICAgICAgICAgaWYodGhpcy51c2VyQ29uc29sZURhdGFbaV0udXNlck5hbWUgPT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICB0aGlzLnVzZXJDb25zb2xlRGF0YVtpXS51c2VyTmFtZSA9IFwiLVwiXG4gICAgICAgICAgICAvL3RoaXMudXNlckNvbnNvbGVEYXRhLnNwbGljZShpLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgLypcbiAgICAgICAgICBpZih0aGlzLnVzZXJDb25zb2xlRGF0YVtpXS51c2VyTmFtZSA9PT0gXCItXCIpe1xuICAgICAgICAgICAgdGhpcy51c2VyQ29uc29sZURhdGEuc3BsaWNlKGksIDEpOyAvLyAybmQgcGFyYW1ldGVyIG1lYW5zIHJlbW92ZSBvbmUgaXRlbSBvbmx5XG4gICAgICAgICAgfSovXG4gICAgICAgICAvL2lmKHRoaXMudXNlckNvbnNvbGVEYXRhW2ldLnVzZXJOYW1lICE9PSB1bmRlZmluZWQgfHwgdGhpcy51c2VyQ29uc29sZURhdGFbaV0udXNlck5hbWUgIT09ICctJyB8fCB0aGlzLnVzZXJDb25zb2xlRGF0YVtpXS51c2VyTmFtZSAhPT0gJy0tJylcblxuICAgICAgICAgXG5cblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgbGV0IHVzZXJEYXRhID0gW3RoaXMudXNlckNvbnNvbGVEYXRhW2ldLnVzZXJOYW1lLHRoaXMudXNlckNvbnNvbGVEYXRhW2ldLnN0YXJ0VGltZSx0aGlzLnVzZXJDb25zb2xlRGF0YVtpXS5lbmRUaW1lXTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgZGF0YVRhYmxlZm9yQ2hhcnQucHVzaCh1c2VyRGF0YSk7XG4gICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhcImNoYXJ0RGF0YVVzZXJXaXNlTmV3TmV3LS0+PlwiLHVzZXJEYXRhKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhVGFibGVmb3JDaGFydDtcbiAgfVxuICBjbGFzc1Jvb21XaXNlQ2hhcnREYXRhKCl7XG4gICAgbGV0IGRhdGFUYWJsZWZvckNoYXJ0ID0gbmV3IEFycmF5KCk7XG4gICAgZGF0YVRhYmxlZm9yQ2hhcnQgPSBbXTtcbiAgICBpZih0aGlzLnVzZXJDb25zb2xlRGF0YSl7XG4gICAgICBcbiAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCB0aGlzLnVzZXJDb25zb2xlRGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICAgIC8vY29uc29sZS5sb2coJ2JiYi0tPicsdGhpcy51c2VyQ29uc29sZURhdGFbaV0udGVybWluYWxMb2NhdGlvbilcbiAgICAgICAgbGV0IHJvb21OYW1lID0gdGhpcy51c2VyQ29uc29sZURhdGFbaV0udGVybWluYWxMb2NhdGlvbjtcblxuICAgICAgICBpZihyb29tTmFtZSA9PT0gXCJcIil7XG4gICAgICAgICAgLy9yb29tTmFtZSA9IFwiTm8gTmFtZVwiXG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYXRpb24gPSByb29tTmFtZSArXCIgLSBcIisgdGhpcy51c2VyQ29uc29sZURhdGFbaV0udGVybWluYWxJUFxuICAgICAgICBjb25zb2xlLmxvZygnYmJibG9jYXRpb24tLT4nLGxvY2F0aW9uKVxuICAgICAgICBsZXQgdXNlckRhdGEgPSBbbG9jYXRpb24sdGhpcy51c2VyQ29uc29sZURhdGFbaV0uc3RhcnRUaW1lLHRoaXMudXNlckNvbnNvbGVEYXRhW2ldLmVuZFRpbWVdO1xuICAgICAgICBkYXRhVGFibGVmb3JDaGFydC5wdXNoKHVzZXJEYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc29sZS5sb2coXCJ0aGlzLmNsYXNzUm9vbVdpc2VDaGFydERhdGFcIixkYXRhVGFibGVmb3JDaGFydCk7XG4gICAgcmV0dXJuIGRhdGFUYWJsZWZvckNoYXJ0O1xuICAgIFxuICB9XG5cblxuICBuZXdHZXRDdXJyZW50Q2xhc3Nyb29tRGF0YSgpe1xuXG4gICAgbGV0IGRhdGFUYWJsZWZvckNoYXJ0ID0gbmV3IEFycmF5KCk7XG4gICAgICBkYXRhVGFibGVmb3JDaGFydCA9IFtdO1xuICAgICAgaWYodGhpcy51c2VyQ29uc29sZURhdGEpe1xuICAgICAgICBcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHRoaXMudXNlckNvbnNvbGVEYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdiYmItLT4nLHRoaXMudXNlckNvbnNvbGVEYXRhW2ldLnRlcm1pbmFsTG9jYXRpb24pXG4gICAgICAgICAgbGV0IHJvb21OYW1lID0gdGhpcy51c2VyQ29uc29sZURhdGFbaV0udGVybWluYWxMb2NhdGlvbjtcbiAgICAgICAgICBsZXQgbG9jYXRpb24gPSByb29tTmFtZSArXCIgLSBcIisgdGhpcy51c2VyQ29uc29sZURhdGFbaV0udGVybWluYWxJUFxuICAgICAgICAgIGNvbnNvbGUubG9nKCdiYmJsb2NhdGlvbi0tPicsbG9jYXRpb24pXG4gICAgICAgICAgLy9sZXQgdXNlckRhdGEgPSBbbG9jYXRpb25dO1xuICAgICAgICAgIGRhdGFUYWJsZWZvckNoYXJ0LnB1c2gobG9jYXRpb24pO1xuICAgICAgICAgIFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zb2xlLmxvZyhcInRoaXMuY2xhc3NSb29tV2lzZUNoYXJ0RGF0YVwiLGRhdGFUYWJsZWZvckNoYXJ0KTtcbiAgICAgIGRhdGFUYWJsZWZvckNoYXJ0ID0gdGhpcy51bmlxKGRhdGFUYWJsZWZvckNoYXJ0KTtcbiAgICAgIHJldHVybiBkYXRhVGFibGVmb3JDaGFydDtcbiAgfVxuXG4gIHVuaXEoYSkge1xuICAgIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoYSkpO1xuICB9XG5cbiAgYWxsVXNlckNoYXJ0RGF0YSgpe1xuICAgIGxldCBkYXRhVGFibGVmb3JDaGFydCA9IG5ldyBBcnJheSgpO1xuICAgIGRhdGFUYWJsZWZvckNoYXJ0ID0gW107XG4gICAgbGV0IEFsbHVzZXJEZXRhaWxzRm9yVGFibGVDaGFydCA9bmV3IEFycmF5KCk7XG4gICAgQWxsdXNlckRldGFpbHNGb3JUYWJsZUNoYXJ0ID0gW107XG4gICAgaWYodGhpcy51c2VyQ29uc29sZURhdGEgJiYgdGhpcy51c2Vyc01ldGFEYXRhKXtcbiAgICAgIGxldCBpbkFjdGl2ZXVzZXJOYW1lOiBhbnk7XG4gICAgICBsZXQgdXNlclN1YmplY3RzOiBhbnk7XG4gICAgICBsZXQgbXlJRDogYW55O1xuICAgICAgbGV0IEFsbHVzZXJEZXRhaWxzID1uZXcgQXJyYXkoKTtcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLnVzZXJDb25zb2xlRGF0YS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgQWxsdXNlckRldGFpbHMucHVzaCh0aGlzLnVzZXJDb25zb2xlRGF0YVtpbmRleF0pO1xuICAgICAgICBBbGx1c2VyRGV0YWlsc0ZvclRhYmxlQ2hhcnQucHVzaCh0aGlzLnVzZXJDb25zb2xlRGF0YVtpbmRleF0pXG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudXNlcnNNZXRhRGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICBteUlEID0gdGhpcy51c2Vyc01ldGFEYXRhW2ldLnVzZXJJZDtcbiAgICAgICAgaW5BY3RpdmV1c2VyTmFtZSA9IHRoaXMudXNlcnNNZXRhRGF0YVtpXS51c2VyTmFtZTtcbiAgICAgICAgLy9pZihpbkFjdGl2ZXVzZXJOYW1lID09PSB1bmRlZmluZWQpXG4gICAgICAgIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcImFsbHVzZXItMS0+PlwiLGluQWN0aXZldXNlck5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB1c2VyU3ViamVjdHMgPSB0aGlzLnVzZXJzTWV0YURhdGFbaV0udXNlclN1YmplY3RzO1xuICAgICAgICBsZXQgbXlDaGFydFJvd3VzZXJDb25zb2xlRGF0YSA9IFxuICAgICAgICB7XG4gICAgICAgICAgdXNlcklkOm15SUQsXG4gICAgICAgICAgdXNlck5hbWU6IGluQWN0aXZldXNlck5hbWUsXG4gICAgICAgICAgc3RhcnRUaW1lOm5ldyBEYXRlKHRoaXMubXlFbmRUaW1lKSxcbiAgICAgICAgICBlbmRUaW1lOm5ldyBEYXRlKHRoaXMubXlFbmRUaW1lKSxcbiAgICAgICAgICB0ZXJtaW5hbElQOlwiXCIsXG4gICAgICAgICAgcmVzb3VyY2VNZXRhdXNlckNvbnNvbGVEYXRhOltdLFxuICAgICAgICAgIGR1cmF0aW9uOlwiMFwiLFxuICAgICAgICAgIHRlcm1pbmFsTG9jYXRpb246XCJcIixcbiAgICAgICAgICB1c2VyU3ViamVjdHM6dXNlclN1YmplY3RzXG4gICAgICB9O1xuICAgICAgICAvL0FsbHVzZXJEZXRhaWxzLnB1c2gobXlDaGFydFJvd3VzZXJDb25zb2xlRGF0YSk7XG4gIFxuICAgICAgICBsZXQgbXlUYWJsZVJvd3VzZXJDb25zb2xlRGF0YSA9IHtcbiAgICAgICAgICB1c2VySWQ6bXlJRCxcbiAgICAgICAgICB1c2VyTmFtZTogaW5BY3RpdmV1c2VyTmFtZSxcbiAgICAgICAgICBzdGFydFRpbWU6XCJcIixcbiAgICAgICAgICBlbmRUaW1lOlwiXCIsXG4gICAgICAgICAgdGVybWluYWxJUDpcIlwiLFxuICAgICAgICAgIHJlc291cmNlTWV0YXVzZXJDb25zb2xlRGF0YTpbXSxcbiAgICAgICAgICBkdXJhdGlvbjowLFxuICAgICAgICAgIHRlcm1pbmFsTG9jYXRpb246XCJcIixcbiAgICAgICAgICB1c2VyU3ViamVjdHM6dXNlclN1YmplY3RzXG4gICAgICAgIH07XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJhbGx1c2VyLTItPj5cIixpbkFjdGl2ZXVzZXJOYW1lKTtcbiAgICAgICAgQWxsdXNlckRldGFpbHNGb3JUYWJsZUNoYXJ0LnB1c2gobXlUYWJsZVJvd3VzZXJDb25zb2xlRGF0YSk7XG4gICAgICAgIEFsbHVzZXJEZXRhaWxzLnB1c2gobXlDaGFydFJvd3VzZXJDb25zb2xlRGF0YSk7XG4gICAgICB9XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IEFsbHVzZXJEZXRhaWxzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcImFsbHVzZXItMy0+PlwiLEFsbHVzZXJEZXRhaWxzW2ldKTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZihBbGx1c2VyRGV0YWlsc1tpXS51c2VyTmFtZSA9PSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgLy9BbGx1c2VyRGV0YWlsc1tpXS51c2VyTmFtZSA9IFwiLS1cIlxuICAgICAgICAgICAgQWxsdXNlckRldGFpbHMuc3BsaWNlKGksIDEpOyAvLyAybmQgcGFyYW1ldGVyIG1lYW5zIHJlbW92ZSBvbmUgaXRlbSBvbmx5XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIFxuICAgICAgICAgIFxuICAgICAgICAgIC8vaWYoQWxsdXNlckRldGFpbHNbaV0udXNlck5hbWUgIT09IHVuZGVmaW5lZCB8fCBBbGx1c2VyRGV0YWlsc1tpXS51c2VyTmFtZSAhPT0gJy0nIHx8IEFsbHVzZXJEZXRhaWxzW2ldLnVzZXJOYW1lICE9PSAnLS0nKVxuICAgICAgICAge1xuXG4gICAgICAgICAgaWYoQWxsdXNlckRldGFpbHNbaV0udXNlck5hbWUgPT09IFwiLS1cIil7XG4gICAgICAgICAgICBBbGx1c2VyRGV0YWlscy5zcGxpY2UoaSwgMSk7IC8vIDJuZCBwYXJhbWV0ZXIgbWVhbnMgcmVtb3ZlIG9uZSBpdGVtIG9ubHlcbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgICAgICAgbGV0IHVzZXJEYXRhID0gW0FsbHVzZXJEZXRhaWxzW2ldLnVzZXJOYW1lLEFsbHVzZXJEZXRhaWxzW2ldLnN0YXJ0VGltZSxBbGx1c2VyRGV0YWlsc1tpXS5lbmRUaW1lXTtcbiAgICAgICAgICAgIGRhdGFUYWJsZWZvckNoYXJ0LnB1c2godXNlckRhdGEpO1xuICAgICAgICAgIH0sMzAwKVxuICAgICAgICAgIFxuICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICB9XG4gICAgICB9LDUwKVxuXG4gICAgICAvKlxuICAgICAgZm9yKGxldCBpID0gMDsgaSA8IEFsbHVzZXJEZXRhaWxzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgY29uc29sZS5sb2coXCJhbGx1c2VyLTMtPj5cIixBbGx1c2VyRGV0YWlsc1tpXS51c2VyTmFtZSk7XG4gICAgICAgIGlmKEFsbHVzZXJEZXRhaWxzW2ldLnVzZXJOYW1lID09PSB1bmRlZmluZWQpe1xuICAgICAgICAgIEFsbHVzZXJEZXRhaWxzW2ldLnVzZXJOYW1lID0gXCIoLSlcIlxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHVzZXJEYXRhID0gW0FsbHVzZXJEZXRhaWxzW2ldLnVzZXJOYW1lLEFsbHVzZXJEZXRhaWxzW2ldLnN0YXJ0VGltZSxBbGx1c2VyRGV0YWlsc1tpXS5lbmRUaW1lXTtcbiAgICAgICAgZGF0YVRhYmxlZm9yQ2hhcnQucHVzaCh1c2VyRGF0YSk7XG4gICAgICB9Ki9cbiAgICB9XG4gICAgcmV0dXJuIHtmb3JDaGFydERhdGE6ZGF0YVRhYmxlZm9yQ2hhcnQsZm9yZHVyYXRpb25UYWJsZTpBbGx1c2VyRGV0YWlsc0ZvclRhYmxlQ2hhcnR9XG4gIH1cbiAgYWxsUm9vbXNEYXRhKCl7XG4gICAgbGV0IGRhdGFUYWJsZWZvckNoYXJ0ID0gbmV3IEFycmF5KCk7XG4gICAgZGF0YVRhYmxlZm9yQ2hhcnQgPSBbXTtcbiAgICBsZXQgYWxsUm9vbXNEZXRhaWxzID0gbmV3IEFycmF5KCk7XG4gICAgYWxsUm9vbXNEZXRhaWxzID0gW107XG4gICAgaWYodGhpcy51c2VyQ29uc29sZURhdGEgJiYgdGhpcy5zY2hvb2xUZXJtaW5hbERhdGEpe1xuICAgICAgbGV0IG15Q2hhcnRSb3dEYXRhOiBhbnk9e307XG4gICAgICBsZXQgaW5BY3RpdmVDbGFzc1Jvb206IGFueTtcbiAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCB0aGlzLnVzZXJDb25zb2xlRGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICAgIGFsbFJvb21zRGV0YWlscy5wdXNoKHRoaXMudXNlckNvbnNvbGVEYXRhW2ldKTtcblxuICAgICAgICBjb25zb2xlLmxvZyhcImJiYiBhbGxSb29tLS0+XCIsdGhpcy51c2VyQ29uc29sZURhdGFbaV0pXG4gICAgICAgIGxldCByb29tTmFtZSA9IHRoaXMudXNlckNvbnNvbGVEYXRhW2ldLnRlcm1pbmFsTG9jYXRpb247XG4gICAgICAgIGxldCByb29tSVAgPSB0aGlzLnVzZXJDb25zb2xlRGF0YVtpXS50ZXJtaW5hbElQO1xuXG4gICAgICAgIGlmKHJvb21OYW1lID09PSBcIlwiIHx8IHJvb21OYW1lID09PSB1bmRlZmluZWQpe1xuICAgICAgICAgIHJvb21OYW1lID0gXCJObyBOYW1lXCJcbiAgICAgICAgfVxuXG5cbiAgICAgICAgbGV0IGxvY2F0aW9uID0gcm9vbU5hbWUgK1wiIC0gXCIrIHJvb21JUDtcblxuICAgICAgICBjb25zb2xlLmxvZygnYmJiYlJvb20nLGxvY2F0aW9uKVxuICAgICAgICBcbiAgICAgICAvLyBsZXQgdXNlckRhdGEgPSBbdGhpcy51c2VyQ29uc29sZURhdGFbaV0udGVybWluYWxJUCx0aGlzLnVzZXJDb25zb2xlRGF0YVtpXS5zdGFydFRpbWUsdGhpcy51c2VyQ29uc29sZURhdGFbaV0uZW5kVGltZV07XG4gICAgICAgIGxldCB1c2VyRGF0YSA9IFtsb2NhdGlvbix0aGlzLnVzZXJDb25zb2xlRGF0YVtpXS5zdGFydFRpbWUsdGhpcy51c2VyQ29uc29sZURhdGFbaV0uZW5kVGltZV07XG4gICAgICAgIGRhdGFUYWJsZWZvckNoYXJ0LnB1c2godXNlckRhdGEpO1xuICAgICAgfVxuICAgICBcbiAgICAgIGxldCBpbmFjdGl2ZVJvb25OYW1lO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNjaG9vbFRlcm1pbmFsRGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zb2xlLmxvZyhcInNjaG9vbFRlcm1pbmFsRGF0YVwiLHRoaXMuc2Nob29sVGVybWluYWxEYXRhKTtcbiAgICAgICAgXG4gICAgICAgIGluQWN0aXZlQ2xhc3NSb29tID0gdGhpcy5zY2hvb2xUZXJtaW5hbERhdGFbaV0ubG9jYXRpb24gKyAnIC0gJyArIHRoaXMuc2Nob29sVGVybWluYWxEYXRhW2ldLnRlcm1pbmFsS2V5O1xuICAgICAgICAvL2luYWN0aXZlUm9vbk5hbWUgPSB0aGlzLnNjaG9vbFRlcm1pbmFsRGF0YVtpXS5sb2NhdGlvbjtcbiAgICAgICAgXG4gICAgICAgIG15Q2hhcnRSb3dEYXRhID0ge1xuICAgICAgICAgIHVzZXJJZDpcIlwiLFxuICAgICAgICAgIHVzZXJOYW1lOlwiXCIsXG4gICAgICAgICAgc3RhcnRUaW1lOm5ldyBEYXRlKHRoaXMubXlFbmRUaW1lKSxcbiAgICAgICAgICBlbmRUaW1lOm5ldyBEYXRlKHRoaXMubXlFbmRUaW1lKSxcbiAgICAgICAgICB0ZXJtaW5hbElQOmluQWN0aXZlQ2xhc3NSb29tLFxuICAgICAgICAgIHJlc291cmNlTWV0YXVzZXJDb25zb2xlRGF0YTpbXSxcbiAgICAgICAgICBkdXJhdGlvbjowLFxuICAgICAgICAgIHRlcm1pbmFsTG9jYXRpb246XCJcIixcbiAgICAgICAgICB1c2VyU3ViamVjdHM6XCJcIlxuICAgICAgICB9O1xuICAgICAgICBhbGxSb29tc0RldGFpbHMucHVzaChteUNoYXJ0Um93RGF0YSk7XG4gICAgICAgIGxldCBteUNoYXJ0Um93dXNlckNvbnNvbGVEYXRhID0gW2luQWN0aXZlQ2xhc3NSb29tLG5ldyBEYXRlKHRoaXMubXlFbmRUaW1lKSxuZXcgRGF0ZSh0aGlzLm15RW5kVGltZSldO1xuICAgICAgICBkYXRhVGFibGVmb3JDaGFydC5wdXNoKG15Q2hhcnRSb3d1c2VyQ29uc29sZURhdGEpO1xuICAgICAgfVxuICAgICBcbiAgICB9XG4gICAgcmV0dXJuIHtmb3JDaGFydERhdGE6ZGF0YVRhYmxlZm9yQ2hhcnQsZm9yZHVyYXRpb25UYWJsZTphbGxSb29tc0RldGFpbHN9O1xuICB9XG4gIGRhdGFGb3JUYWJsZVZpZXcodXNlckNvbnNvbGVNYXRyaXg6IGFueSxyZXNvdXJjZU1ldGFkYXRhTWF0cml4OiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZyhcIkFBQSB1c2VyQ29uc29sZU1hdHJpeFwiLHVzZXJDb25zb2xlTWF0cml4LCBcIi1yZXNvdXJjZU1ldGFkYXRhTWF0cml4LT5cIixyZXNvdXJjZU1ldGFkYXRhTWF0cml4KTtcbiAgICBsZXQgY3VycmVudERhdGU6IGFueTtcbiAgICBsZXQgcmVzb3VyY2VNYXRyaXhGb3JUYWJsZUNoYXJ0ID0gbmV3IEFycmF5KCk7XG4gICAgbGV0IHJlc291cmNlTWF0cml4Rm9yRXhjZWwgPSBuZXcgQXJyYXkoKTtcbiAgICBcbiAgICByZXNvdXJjZU1hdHJpeEZvclRhYmxlQ2hhcnQgPSBbXTtcbiAgICByZXNvdXJjZU1hdHJpeEZvckV4Y2VsID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPHVzZXJDb25zb2xlTWF0cml4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgc3RhcnRUaW1lOiBhbnk7XG4gICAgICBsZXQgZW5kVGltZTogYW55O1xuICAgICAgbGV0IGR1cmF0aW9uOiBhbnk7XG4gICAgICBsZXQgdGVybWluYWxJUDogYW55O1xuICAgICAgbGV0IHN1YmplY3Q6IGFueTtcbiAgICAgIGxldCBncmFkZTogYW55O1xuICAgICAgbGV0IGNoYXB0ZXI6IGFueTtcbiAgICAgIGxldCBBc3Nlc3REZXRhaWw6IGFueTtcbiAgICAgIGxldCByZXNvdXJjZVR5cGU6IGFueTtcbiAgICAgIGxldCByZXNvdXJjZVRpdGxlOiBhbnk7XG4gICAgICBsZXQgdGVhY2hpbmdwb2ludDogYW55O1xuICAgICAgbGV0IGxvY2F0aW9uOiBhbnk7XG4gICAgICBsZXQgdGVhY2hlck5hbWU6IGFueTtcbiAgICAgIGxldCB0ZWFjaGVyU3ViamVjdDogYW55O1xuICAgICAgXG4gICAgICBsZXQgcmVzb3VyY2VNZXRhZGF0YUlEczogYW55O1xuICAgICAgbGV0IHJlc291cmNlTWV0YWRhdGFJRHNEdXJhdGlvbjogYW55O1xuICAgICAgbGV0IHJlc291cmNlQXJyYXlGb3JFeGNlbCA9IG5ldyBBcnJheSgpO1xuICAgICAgbGV0IHJlc291cmNlQXJyYXlGb3JUYWJsZUNoYXJ0ID0gbmV3IEFycmF5KCk7XG4gICAgICBsZXQgdXNlckNvbnNvbGVEYXRhTWF0cml4ID0gbmV3IEFycmF5KCk7XG4gICAgICBsZXQgbGF1bmNoZWRGcm9tOiBhbnk7XG4gICAgICByZXNvdXJjZUFycmF5Rm9yVGFibGVDaGFydCA9IFtdO1xuICAgICAgdXNlckNvbnNvbGVEYXRhTWF0cml4ID0gW107XG4gICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0gZm9yIHN1YmplY3QgYW5kIE5hbWVcbiAgXG5cbiAgICAgIHRlYWNoZXJTdWJqZWN0ID0gdXNlckNvbnNvbGVNYXRyaXhbaV0udXNlclN1YmplY3RzO1xuICAgICAgdGVhY2hlck5hbWUgPSB1c2VyQ29uc29sZU1hdHJpeFtpXS51c2VyTmFtZTtcbiAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0gZm9yIHN0YXJ0IFRpbWUgIGFuZCBFbmRUaW1lIFxuICAgICAgaWYgKCh1c2VyQ29uc29sZU1hdHJpeFtpXS5zdGFydFRpbWUgIT0gdW5kZWZpbmVkICYmIHVzZXJDb25zb2xlTWF0cml4W2ldLnN0YXJ0VGltZSAhPSBcIlwiKSAmJiAodXNlckNvbnNvbGVNYXRyaXhbaV0uZW5kVGltZSAhPSB1bmRlZmluZWQmJnVzZXJDb25zb2xlTWF0cml4W2ldLmVuZFRpbWUgIT0gXCJcIikpIHtcbiAgICAgICAgc3RhcnRUaW1lID0gdXNlckNvbnNvbGVNYXRyaXhbaV0uc3RhcnRUaW1lLnRvTG9jYWxlVGltZVN0cmluZygnZW4tVVMnLCB7IGhvdXIxMjogdHJ1ZSB9KTtcbiAgICAgICAgZW5kVGltZSA9IHVzZXJDb25zb2xlTWF0cml4W2ldLmVuZFRpbWUudG9Mb2NhbGVUaW1lU3RyaW5nKCdlbi1VUycsIHsgaG91cjEyOiB0cnVlIH0pO1xuICAgICAgICBjdXJyZW50RGF0ZSA9IHVzZXJDb25zb2xlTWF0cml4W2ldLnN0YXJ0VGltZS5nZXREYXRlKCkgKyAnLycgKyAodXNlckNvbnNvbGVNYXRyaXhbaV0uc3RhcnRUaW1lLmdldE1vbnRoKCkrMSkgKyAnLycgKyB1c2VyQ29uc29sZU1hdHJpeFtpXS5zdGFydFRpbWUuZ2V0RnVsbFllYXIoKTtcbiAgICAgIH1cbiAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0gZm9yIGR1cmF0aW9uXG4gICAgICBkdXJhdGlvbiA9IE1hdGguZmxvb3IodXNlckNvbnNvbGVNYXRyaXhbaV0uZHVyYXRpb24pO1xuICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLSBmb3IgVGVybWluYWwgbG9hY3Rpb24gYW5kIHRlcm1pbmFsIElQXG4gICAgICBsb2NhdGlvbiA9IHVzZXJDb25zb2xlTWF0cml4W2ldLnRlcm1pbmFsTG9jYXRpb247XG4gICAgICB0ZXJtaW5hbElQID0gdXNlckNvbnNvbGVNYXRyaXhbaV0udGVybWluYWxJUDtcbiAgICAgIGxldCByb29tRGV0YWlsID0gbG9jYXRpb24gKyAnICcgKyB0ZXJtaW5hbElQO1xuICAgICBcbiAgICAgIHJlc291cmNlTWV0YWRhdGFJRHMgPSB1c2VyQ29uc29sZU1hdHJpeFtpXS5yZXNvdXJjZU1ldGF1c2VyQ29uc29sZURhdGE7XG4gICAgICByZXNvdXJjZU1ldGFkYXRhSURzRHVyYXRpb24gPSB1c2VyQ29uc29sZU1hdHJpeFtpXS5yZXNvdXJjZUR1cmF0aW9uRnJvbUNvbnNvbGU7XG4gICAgICAvL2NvbnNvbGUubG9nKCdtbGF1bmNoZWRGcm9tLS0+PiAnLCh0eXBlb2YgdXNlckNvbnNvbGVNYXRyaXhbaV0ubGF1bmNoZWRGcm9tKSk7XG4gICAgICAvL2NvbnNvbGUubG9nKCdtbGF1bmNoZWRGcm9tLS0+PiAnLCggdXNlckNvbnNvbGVNYXRyaXhbaV0ubGF1bmNoZWRGcm9tKSk7XG4gICAgICBsZXQgbGF1bmNoRGF0YUFyciA9IEFycmF5ICh1c2VyQ29uc29sZU1hdHJpeFtpXS5sYXVuY2hlZEZyb20pO1xuICAgICAgY29uc29sZS5sb2coJ21sYXVuY2hlZEZyb20gbGVuLS0+PiAnLCBsYXVuY2hEYXRhQXJyKTtcbiAgICAgIGxhdW5jaGVkRnJvbSA9IGxhdW5jaERhdGFBcnJcbiAgICAgIFxuICAgICAgXG4gICAgICBcbiAgICAgXG4gICAgICBcblxuICAgICAgaWYgKHJlc291cmNlTWV0YWRhdGFJRHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHN1YmplY3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIGdyYWRlID0gdW5kZWZpbmVkO1xuICAgICAgICBjaGFwdGVyID0gdW5kZWZpbmVkO1xuICAgICAgICB0ZWFjaGluZ3BvaW50ID0gdW5kZWZpbmVkO1xuICAgICAgICBBc3Nlc3REZXRhaWwgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJlc291cmNlVGl0bGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJlc291cmNlVHlwZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmVzb3VyY2VBcnJheUZvclRhYmxlQ2hhcnQgPSBbdGVhY2hlck5hbWUsdGVhY2hlclN1YmplY3QsY3VycmVudERhdGUsc3RhcnRUaW1lLGVuZFRpbWUsZHVyYXRpb24scm9vbURldGFpbCxzdWJqZWN0LGdyYWRlLGNoYXB0ZXIsdGVhY2hpbmdwb2ludCxBc3Nlc3REZXRhaWwsIGxhdW5jaGVkRnJvbV07XG4gICAgICAgIHJlc291cmNlTWF0cml4Rm9yVGFibGVDaGFydC5wdXNoKHJlc291cmNlQXJyYXlGb3JUYWJsZUNoYXJ0KTtcbiAgICAgICBcbiAgICAgIH1lbHNle1xuICAgICAgICAvL3Jlc291cmNlTWV0YWRhdGFNYXRyaXggPSBbcmVzb3VzZUlELHN1YmplY3QsZ3JhZGUsY2hhcHRlcix0ZWFjaGluZ3BvaW50LHR5cGUsdGl0bGVdXG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgcmVzb3VyY2VNZXRhZGF0YUlEcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzb3VyY2VNZXRhZGF0YU1hdHJpeC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChyZXNvdXJjZU1ldGFkYXRhSURzW2tdID09PSByZXNvdXJjZU1ldGFkYXRhTWF0cml4W2ldLnJlc291c2VJRCkgXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIC8vIHNhdHlhaml0XG4gICAgICAgICAgICAgIHN1YmplY3QgPSByZXNvdXJjZU1ldGFkYXRhTWF0cml4W2ldLnN1YmplY3Q7XG4gICAgICAgICAgICAgIGdyYWRlID0gcmVzb3VyY2VNZXRhZGF0YU1hdHJpeFtpXS5ncmFkZTtcbiAgICAgICAgICAgICAgY2hhcHRlciA9IHJlc291cmNlTWV0YWRhdGFNYXRyaXhbaV0uY2hhcHRlcjtcbiAgICAgICAgICAgICAgdGVhY2hpbmdwb2ludCA9IHJlc291cmNlTWV0YWRhdGFNYXRyaXhbaV0udGVhY2hpbmdwb2ludDtcbiAgICAgICAgICAgICAgaWYocmVzb3VyY2VNZXRhZGF0YU1hdHJpeFtpXS50aXRsZS50b0xvd2VyQ2FzZSgpID09PSAnd2hpdGVib2FyZCcgfHwgcmVzb3VyY2VNZXRhZGF0YU1hdHJpeFtpXS50aXRsZS50b0xvd2VyQ2FzZSgpID09PSAncXVlc3Rpb24nKXtcbiAgICAgICAgICAgICAgICAvL0Fzc2VzdERldGFpbCA9IHRoaXMuZ2V0RGlzcGxheXR5cGVWYWx1ZShyZXNvdXJjZU1ldGFkYXRhTWF0cml4W2ldLnR5cGUpICsgJyA6ICcgKyByZXNvdXJjZU1ldGFkYXRhSURzRHVyYXRpb25ba10gKyAnIHNlYyc7XG5cbiAgICAgICAgICAgICAgICBBc3Nlc3REZXRhaWwgPSB0aGlzLmdldERpc3BsYXl0eXBlVmFsdWUocmVzb3VyY2VNZXRhZGF0YU1hdHJpeFtpXS50eXBlKSArICcgOiAnICsgdGhpcy5jb252ZXJ0U2Vjb25kcyhyZXNvdXJjZU1ldGFkYXRhSURzRHVyYXRpb25ba10pO1xuXG4gICAgICAgICAgICAgICAgLy9jb252ZXJ0U2Vjb25kc1xuXG4gICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIC8vQXNzZXN0RGV0YWlsID0gdGhpcy5nZXREaXNwbGF5dHlwZVZhbHVlKHJlc291cmNlTWV0YWRhdGFNYXRyaXhbaV0udHlwZSkgKyBcIiA6IFwiICsgcmVzb3VyY2VNZXRhZGF0YU1hdHJpeFtpXS50aXRsZSArICcgOiAnICsgcmVzb3VyY2VNZXRhZGF0YUlEc0R1cmF0aW9uW2tdICsgJyBzZWMnO1xuXG4gICAgICAgICAgICAgICAgQXNzZXN0RGV0YWlsID0gdGhpcy5nZXREaXNwbGF5dHlwZVZhbHVlKHJlc291cmNlTWV0YWRhdGFNYXRyaXhbaV0udHlwZSkgKyBcIiA6IFwiICsgcmVzb3VyY2VNZXRhZGF0YU1hdHJpeFtpXS50aXRsZSArICcgOiAnICsgdGhpcy5jb252ZXJ0U2Vjb25kcyhyZXNvdXJjZU1ldGFkYXRhSURzRHVyYXRpb25ba10pO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIFxuXG4gICAgICAgICAgICAgIC8vQXNzZXN0RGV0YWlsID0gdGhpcy5nZXREaXNwbGF5dHlwZVZhbHVlKHJlc291cmNlTWV0YWRhdGFNYXRyaXhbaV0udHlwZSkgKyBcIiA6IFwiICsgcmVzb3VyY2VNZXRhZGF0YU1hdHJpeFtpXS50aXRsZSArICcgOiAnICsgcmVzb3VyY2VNZXRhZGF0YUlEc0R1cmF0aW9uW2tdO1xuXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdyb29tRGV0YWlsJyxyb29tRGV0YWlsKVxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgcmVzb3VyY2VBcnJheUZvclRhYmxlQ2hhcnQgPSBbdGVhY2hlck5hbWUsdGVhY2hlclN1YmplY3QsY3VycmVudERhdGUsc3RhcnRUaW1lLGVuZFRpbWUsZHVyYXRpb24scm9vbURldGFpbCwgc3ViamVjdCxncmFkZSxjaGFwdGVyLHRlYWNoaW5ncG9pbnQsQXNzZXN0RGV0YWlsLCBsYXVuY2hlZEZyb21dO1xuICAgICAgICAgICAgICByZXNvdXJjZU1hdHJpeEZvclRhYmxlQ2hhcnQucHVzaChyZXNvdXJjZUFycmF5Rm9yVGFibGVDaGFydCk7XG4gICAgICAgICAgICAgICAgdGVhY2hlck5hbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdGVhY2hlclN1YmplY3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgY3VycmVudERhdGUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgc3RhcnRUaW1lID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGVuZFRpbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgZHVyYXRpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgcm9vbURldGFpbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc291cmNlTWF0cml4Rm9yVGFibGVDaGFydDtcbiAgfVxuICBkYXRhRm9yRGV0YWlsZWRWaWV3KHVzZXJDb25zb2xlTWF0cml4OiBhbnkscmVzb3VyY2VNZXRhZGF0YU1hdHJpeDogYW55LCByb3dMYWJlbDogYW55KSB7XG4gICAgbGV0IGRldGFpbGVkVmlld19Vc2VyRGF0YU1hdHJpeCA9IG5ldyBBcnJheSgpO1xuICAgICAgICAgZGV0YWlsZWRWaWV3X1VzZXJEYXRhTWF0cml4ID0gW107XG4gICAgbGV0IGRldGFpbGVkVmlld19SZXNvdXJjZURhdGFNYXRyaXggPSBuZXcgQXJyYXkoKTtcbiAgICAgICAgIGRldGFpbGVkVmlld19SZXNvdXJjZURhdGFNYXRyaXggPSBbXTtcbiAgXG4gICAgICBsZXQgc3RhcnRUaW1lOiBhbnk7XG4gICAgICBsZXQgZW5kVGltZTogYW55O1xuICAgICAgbGV0IGR1cmF0aW9uOiBhbnk7XG4gICAgICBsZXQgdGVybWluYWxJUDogYW55O1xuICAgICAgbGV0IHN1YmplY3Q6IGFueTtcbiAgICAgIGxldCBncmFkZTogYW55O1xuICAgICAgbGV0IGNoYXB0ZXI6IGFueTtcbiAgICAgIGxldCBBc3Nlc3REZXRhaWw6IGFueTtcbiAgICAgIGxldCB0ZWFjaGluZ3BvaW50OiBhbnk7XG4gICAgICBsZXQgbG9jYXRpb246IGFueTtcbiAgICAgIGxldCB0ZWFjaGVyTmFtZTogYW55O1xuICAgICAgbGV0IHRlYWNoZXJTdWJqZWN0OiBhbnk7XG4gICAgICBsZXQgY3VycmVudERhdGU6IGFueTtcbiAgICAgIGxldCByZXNvdXJjZU1ldGFkYXRhSURzOiBhbnk7XG4gICAgICBsZXQgcmVzb3VyY2VNZXRhZGF0YUlEc2R1cmF0aW9uOiBhbnk7XG4gICAgICBsZXQgcmVzb3VyY2VBcnJheUZvclRhYmxlQ2hhcnQgPSBuZXcgQXJyYXkoKTtcbiAgICAgIHJlc291cmNlQXJyYXlGb3JUYWJsZUNoYXJ0ID0gW107XG4gICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0gZm9yIHN1YmplY3QgYW5kIE5hbWVcbiAgICAgIHRlYWNoZXJTdWJqZWN0ID0gdXNlckNvbnNvbGVNYXRyaXhbcm93TGFiZWxdLnVzZXJTdWJqZWN0cztcbiAgICAgIHRlYWNoZXJOYW1lID0gdXNlckNvbnNvbGVNYXRyaXhbcm93TGFiZWxdLnVzZXJOYW1lO1xuICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLSBmb3Igc3RhcnQgVGltZSAgYW5kIEVuZFRpbWVcbiAgICAgIGlmICgodXNlckNvbnNvbGVNYXRyaXhbcm93TGFiZWxdLnN0YXJ0VGltZSAhPSB1bmRlZmluZWQgJiYgdXNlckNvbnNvbGVNYXRyaXhbcm93TGFiZWxdLnN0YXJ0VGltZSAhPSBcIlwiKSAmJiAodXNlckNvbnNvbGVNYXRyaXhbcm93TGFiZWxdLmVuZFRpbWUgIT0gdW5kZWZpbmVkJiZ1c2VyQ29uc29sZU1hdHJpeFtyb3dMYWJlbF0uZW5kVGltZSAhPSBcIlwiKSkge1xuICAgICAgICBzdGFydFRpbWUgPSB1c2VyQ29uc29sZU1hdHJpeFtyb3dMYWJlbF0uc3RhcnRUaW1lLnRvTG9jYWxlVGltZVN0cmluZygnZW4tVVMnLCB7IGhvdXIxMjogdHJ1ZSB9KTtcbiAgICAgICAgZW5kVGltZSA9IHVzZXJDb25zb2xlTWF0cml4W3Jvd0xhYmVsXS5lbmRUaW1lLnRvTG9jYWxlVGltZVN0cmluZygnZW4tVVMnLCB7IGhvdXIxMjogdHJ1ZSB9KTtcbiAgICAgICAgY3VycmVudERhdGUgPSB1c2VyQ29uc29sZU1hdHJpeFtyb3dMYWJlbF0uc3RhcnRUaW1lLmdldERhdGUoKSArICcvJyArIHVzZXJDb25zb2xlTWF0cml4W3Jvd0xhYmVsXS5zdGFydFRpbWUuZ2V0TW9udGgoKSArICcvJyArIHVzZXJDb25zb2xlTWF0cml4W3Jvd0xhYmVsXS5zdGFydFRpbWUuZ2V0RnVsbFllYXIoKTtcbiAgICAgIH1cbiAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0gZm9yIGR1cmF0aW9uXG4gICAgICBkdXJhdGlvbiA9IE1hdGguZmxvb3IodXNlckNvbnNvbGVNYXRyaXhbcm93TGFiZWxdLmR1cmF0aW9uKTtcbiAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0gZm9yIFRlcm1pbmFsIGxvYWN0aW9uIGFuZCB0ZXJtaW5hbCBJUFxuICAgICAgbG9jYXRpb24gPSB1c2VyQ29uc29sZU1hdHJpeFtyb3dMYWJlbF0udGVybWluYWxMb2NhdGlvbjtcbiAgICAgIHRlcm1pbmFsSVAgPSB1c2VyQ29uc29sZU1hdHJpeFtyb3dMYWJlbF0udGVybWluYWxJUDtcbiAgICAgIGxldCByb29tRGV0YWlsID0gbG9jYXRpb24gKyAnICcgKyB0ZXJtaW5hbElQO1xuICAgICAgcmVzb3VyY2VNZXRhZGF0YUlEcyA9IHVzZXJDb25zb2xlTWF0cml4W3Jvd0xhYmVsXS5yZXNvdXJjZU1ldGF1c2VyQ29uc29sZURhdGE7XG4gICAgICByZXNvdXJjZU1ldGFkYXRhSURzZHVyYXRpb24gPSB1c2VyQ29uc29sZU1hdHJpeFtyb3dMYWJlbF0ucmVzb3VyY2VEdXJhdGlvbkZyb21Db25zb2xlO1xuXG4gICAgICBkZXRhaWxlZFZpZXdfVXNlckRhdGFNYXRyaXggPSAgW3RlYWNoZXJOYW1lLHN0YXJ0VGltZSx0ZWFjaGVyU3ViamVjdCxlbmRUaW1lLHJvb21EZXRhaWxdXG4gICAgICBcbiAgICAgIGlmIChyZXNvdXJjZU1ldGFkYXRhSURzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIHN1YmplY3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIGdyYWRlID0gdW5kZWZpbmVkO1xuICAgICAgICBjaGFwdGVyID0gdW5kZWZpbmVkO1xuICAgICAgICB0ZWFjaGluZ3BvaW50ID0gdW5kZWZpbmVkO1xuICAgICAgICBBc3Nlc3REZXRhaWwgPSB1bmRlZmluZWQ7XG4gICAgICAgIC8vIHJlc291cmNlQXJyYXlGb3JUYWJsZUNoYXJ0ID0gW3N1YmplY3QsZ3JhZGUsY2hhcHRlcix0ZWFjaGluZ3BvaW50LEFzc2VzdERldGFpbF07XG4gICAgICAgIC8vIGRldGFpbGVkVmlld19SZXNvdXJjZURhdGFNYXRyaXgucHVzaChyZXNvdXJjZUFycmF5Rm9yVGFibGVDaGFydCk7XG4gICAgICB9ZWxzZXtcbiAgICAgICAgLy9zYXR5YWppdFxuICAgICAgICAgLy9yZXNvdXJjZU1ldGFkYXRhTWF0cml4ID0gW3Jlc291c2VJRCxzdWJqZWN0LGdyYWRlLGNoYXB0ZXIsdGVhY2hpbmdwb2ludCx0eXBlLHRpdGxlXVxuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IHJlc291cmNlTWV0YWRhdGFJRHMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc291cmNlTWV0YWRhdGFNYXRyaXgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChyZXNvdXJjZU1ldGFkYXRhSURzW2tdID09PSByZXNvdXJjZU1ldGFkYXRhTWF0cml4W2ldLnJlc291c2VJRCkge1xuICAgICAgICAgICAgICBzdWJqZWN0ID0gcmVzb3VyY2VNZXRhZGF0YU1hdHJpeFtpXS5zdWJqZWN0O1xuICAgICAgICAgICAgICBncmFkZSA9IHJlc291cmNlTWV0YWRhdGFNYXRyaXhbaV0uZ3JhZGU7XG4gICAgICAgICAgICAgIGNoYXB0ZXIgPSByZXNvdXJjZU1ldGFkYXRhTWF0cml4W2ldLmNoYXB0ZXI7XG4gICAgICAgICAgICAgIHRlYWNoaW5ncG9pbnQgPSByZXNvdXJjZU1ldGFkYXRhTWF0cml4W2ldLnRlYWNoaW5ncG9pbnQ7XG4gICAgICAgICAgICAgIGlmKHJlc291cmNlTWV0YWRhdGFNYXRyaXhbaV0udGl0bGUudG9Mb3dlckNhc2UoKSA9PT0gJ3doaXRlYm9hcmQnIHx8IHJlc291cmNlTWV0YWRhdGFNYXRyaXhbaV0udGl0bGUudG9Mb3dlckNhc2UoKSA9PT0gJ3F1ZXN0aW9uJyl7XG4gICAgICAgICAgICAgICAgLy9Bc3Nlc3REZXRhaWwgPSByZXNvdXJjZU1ldGFkYXRhTWF0cml4W2ldLnR5cGUgKyBcIjogXCIgKyByZXNvdXJjZU1ldGFkYXRhSURzZHVyYXRpb25ba10gKyAnIHNlYyc7XG4gICAgICAgICAgICAgICAgQXNzZXN0RGV0YWlsID0gcmVzb3VyY2VNZXRhZGF0YU1hdHJpeFtpXS50eXBlICsgXCI6IFwiICsgdGhpcy5jb252ZXJ0U2Vjb25kcyhyZXNvdXJjZU1ldGFkYXRhSURzZHVyYXRpb25ba10pO1xuICAgICAgICAgICAgICAgIC8vY29udmVydFNlY29uZHNcbiAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgLy9Bc3Nlc3REZXRhaWwgPSByZXNvdXJjZU1ldGFkYXRhTWF0cml4W2ldLnR5cGUgKyBcIjogXCIgKyByZXNvdXJjZU1ldGFkYXRhTWF0cml4W2ldLnRpdGxlICsgXCI6IFwiICsgcmVzb3VyY2VNZXRhZGF0YUlEc2R1cmF0aW9uW2tdICsgJyBzZWMnO1xuICAgICAgICAgICAgICAgIEFzc2VzdERldGFpbCA9IHJlc291cmNlTWV0YWRhdGFNYXRyaXhbaV0udHlwZSArIFwiOiBcIiArIHJlc291cmNlTWV0YWRhdGFNYXRyaXhbaV0udGl0bGUgKyBcIjogXCIgKyB0aGlzLmNvbnZlcnRTZWNvbmRzKHJlc291cmNlTWV0YWRhdGFJRHNkdXJhdGlvbltrXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICByZXNvdXJjZUFycmF5Rm9yVGFibGVDaGFydCA9IFtzdWJqZWN0LGdyYWRlLGNoYXB0ZXIsdGVhY2hpbmdwb2ludCxBc3Nlc3REZXRhaWxdO1xuICAgICAgICAgICAgICBkZXRhaWxlZFZpZXdfUmVzb3VyY2VEYXRhTWF0cml4LnB1c2gocmVzb3VyY2VBcnJheUZvclRhYmxlQ2hhcnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSAgIFxuICAgICAgXG4gICAgcmV0dXJuIHt1c2VyRGV0YWlsczpkZXRhaWxlZFZpZXdfVXNlckRhdGFNYXRyaXgscmVzb3VyY2VEZXRhaWxzOmRldGFpbGVkVmlld19SZXNvdXJjZURhdGFNYXRyaXh9O1xuICB9XG4gICAvLyBUbyBHRVQgRElTUExBWSBUWVBFXG4gICBnZXREaXNwbGF5dHlwZVZhbHVlKGtleTogYW55KSB7XG4gICAgbGV0IGFzc2V0VHlwZUNvbmZpZyA9IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJhc3NldF9tZWRpYVwiLFxuICAgICAgICBkaXNwbGF5OiBcIk1lZGlhXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiYXNzZXRfcHJpbnRcIixcbiAgICAgICAgZGlzcGxheTogXCJQcmludFwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInF1aXpcIixcbiAgICAgICAgZGlzcGxheTogXCJRdWl6XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicXVlc3Rpb25cIixcbiAgICAgICAgZGlzcGxheTogXCJRdWVzdGlvblwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcImNoYXB0ZXJcIixcbiAgICAgICAgZGlzcGxheTogXCJDaGFwdGVyXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwidHBcIixcbiAgICAgICAgZGlzcGxheTogXCJUb3BpY1wiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcIndoaXRlYm9hcmRcIixcbiAgICAgICAgZGlzcGxheTogXCJXaGl0ZWJvYXJkXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwid2lkZ2V0XCIsXG4gICAgICAgIGRpc3BsYXk6IFwiV2lkZ2V0XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiY2Fzc2V0X21lZGlhXCIsXG4gICAgICAgIGRpc3BsYXk6IFwiY01lZGlhXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiY2Fzc2V0X3ByaW50XCIsXG4gICAgICAgIGRpc3BsYXk6IFwiY1ByaW50XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiY3F1aXpcIixcbiAgICAgICAgZGlzcGxheTogXCJjUXVpelwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcImNxdWVzdGlvblwiLFxuICAgICAgICBkaXNwbGF5OiBcImNRdWVzdGlvblwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcImltYWdlXCIsXG4gICAgICAgIGRpc3BsYXk6IFwiSW1hZ2VcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJ2aWRlb1wiLFxuICAgICAgICBkaXNwbGF5OiBcIlZpZGVvXCJcbiAgICAgIH0sXG5cbiAgICBdO1xuICAgIGxldCBkaXNwbGF5VmFsdWUgPSBrZXk7XG4gICAgYXNzZXRUeXBlQ29uZmlnLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodmFsdWUudHlwZSA9PT0ga2V5KSB7XG4gICAgICAgIGRpc3BsYXlWYWx1ZSA9IHZhbHVlLmRpc3BsYXk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGRpc3BsYXlWYWx1ZTtcblxuICB9XG5cbiAgY29udmVydFNlY29uZHMoc2Vjb25kcykge1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKHNlY29uZHMgLyA2MCk7XG4gICAgY29uc3QgcmVtYWluaW5nU2Vjb25kcyA9IHNlY29uZHMgJSA2MDtcbiAgICByZXR1cm4gYCR7bWludXRlc31tICR7cmVtYWluaW5nU2Vjb25kc31zYDtcbiAgfVxufVxuIl19