igniteui-angular 12.3.17 → 12.3.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/igniteui-angular.umd.js +277 -64
- package/bundles/igniteui-angular.umd.js.map +1 -1
- package/esm2015/lib/data-operations/filtering-condition.js +150 -6
- package/esm2015/lib/directives/for-of/for_of.directive.js +30 -9
- package/esm2015/lib/grids/common/crud.service.js +9 -6
- package/esm2015/lib/grids/common/pipes.js +2 -2
- package/esm2015/lib/grids/grid/grid.component.js +7 -16
- package/esm2015/lib/grids/grid-base.directive.js +39 -12
- package/esm2015/lib/grids/grid-navigation.service.js +20 -8
- package/esm2015/lib/grids/grouping/group-by-area.directive.js +4 -3
- package/esm2015/lib/grids/hierarchical-grid/hierarchical-grid-navigation.service.js +3 -3
- package/esm2015/lib/grids/hierarchical-grid/hierarchical-grid.component.js +4 -3
- package/esm2015/lib/grids/hierarchical-grid/hierarchical-grid.pipes.js +5 -2
- package/esm2015/lib/grids/state.directive.js +4 -4
- package/esm2015/lib/grids/tree-grid/tree-grid.component.js +4 -3
- package/esm2015/lib/simple-combo/simple-combo.component.js +6 -2
- package/fesm2015/igniteui-angular.js +273 -65
- package/fesm2015/igniteui-angular.js.map +1 -1
- package/igniteui-angular.metadata.json +1 -1
- package/lib/data-operations/filtering-condition.d.ts +1 -1
- package/lib/directives/for-of/for_of.directive.d.ts +4 -0
- package/lib/grids/common/pipes.d.ts +1 -1
- package/lib/grids/grid-base.directive.d.ts +11 -0
- package/lib/grids/grouping/group-by-area.directive.d.ts +1 -1
- package/lib/simple-combo/simple-combo.component.d.ts +2 -0
- package/package.json +1 -1
|
@@ -354,13 +354,9 @@ export class IgxDateFilteringOperand extends IgxBaseDateTimeFilteringOperand {
|
|
|
354
354
|
}].concat(this.operations);
|
|
355
355
|
}
|
|
356
356
|
}
|
|
357
|
-
export class IgxDateTimeFilteringOperand extends
|
|
357
|
+
export class IgxDateTimeFilteringOperand extends IgxBaseDateTimeFilteringOperand {
|
|
358
358
|
constructor() {
|
|
359
359
|
super();
|
|
360
|
-
let index = this.operations.indexOf(this.condition('equals'));
|
|
361
|
-
this.operations.splice(index, 1);
|
|
362
|
-
index = this.operations.indexOf(this.condition('doesNotEqual'));
|
|
363
|
-
this.operations.splice(index, 1);
|
|
364
360
|
this.operations = [{
|
|
365
361
|
name: 'equals',
|
|
366
362
|
isUnary: false,
|
|
@@ -397,6 +393,154 @@ export class IgxDateTimeFilteringOperand extends IgxDateFilteringOperand {
|
|
|
397
393
|
targetp.minutes !== searchp.minutes ||
|
|
398
394
|
targetp.seconds !== searchp.seconds;
|
|
399
395
|
}
|
|
396
|
+
}, {
|
|
397
|
+
name: 'before',
|
|
398
|
+
isUnary: false,
|
|
399
|
+
iconName: 'is-before',
|
|
400
|
+
logic: (target, searchVal) => {
|
|
401
|
+
if (!target) {
|
|
402
|
+
return false;
|
|
403
|
+
}
|
|
404
|
+
this.validateInputData(target);
|
|
405
|
+
return target < searchVal;
|
|
406
|
+
}
|
|
407
|
+
}, {
|
|
408
|
+
name: 'after',
|
|
409
|
+
isUnary: false,
|
|
410
|
+
iconName: 'is-after',
|
|
411
|
+
logic: (target, searchVal) => {
|
|
412
|
+
if (!target) {
|
|
413
|
+
return false;
|
|
414
|
+
}
|
|
415
|
+
this.validateInputData(target);
|
|
416
|
+
return target > searchVal;
|
|
417
|
+
}
|
|
418
|
+
}, {
|
|
419
|
+
name: 'today',
|
|
420
|
+
isUnary: true,
|
|
421
|
+
iconName: 'today',
|
|
422
|
+
logic: (target) => {
|
|
423
|
+
if (!target) {
|
|
424
|
+
return false;
|
|
425
|
+
}
|
|
426
|
+
this.validateInputData(target);
|
|
427
|
+
const d = IgxDateTimeFilteringOperand.getDateParts(target, 'yMd');
|
|
428
|
+
const now = IgxDateTimeFilteringOperand.getDateParts(new Date(), 'yMd');
|
|
429
|
+
return d.year === now.year &&
|
|
430
|
+
d.month === now.month &&
|
|
431
|
+
d.day === now.day;
|
|
432
|
+
}
|
|
433
|
+
}, {
|
|
434
|
+
name: 'yesterday',
|
|
435
|
+
isUnary: true,
|
|
436
|
+
iconName: 'yesterday',
|
|
437
|
+
logic: (target) => {
|
|
438
|
+
if (!target) {
|
|
439
|
+
return false;
|
|
440
|
+
}
|
|
441
|
+
this.validateInputData(target);
|
|
442
|
+
const td = IgxDateTimeFilteringOperand.getDateParts(target, 'yMd');
|
|
443
|
+
const y = ((d) => new Date(d.setDate(d.getDate() - 1)))(new Date());
|
|
444
|
+
const yesterday = IgxDateTimeFilteringOperand.getDateParts(y, 'yMd');
|
|
445
|
+
return td.year === yesterday.year &&
|
|
446
|
+
td.month === yesterday.month &&
|
|
447
|
+
td.day === yesterday.day;
|
|
448
|
+
}
|
|
449
|
+
}, {
|
|
450
|
+
name: 'thisMonth',
|
|
451
|
+
isUnary: true,
|
|
452
|
+
iconName: 'this-month',
|
|
453
|
+
logic: (target) => {
|
|
454
|
+
if (!target) {
|
|
455
|
+
return false;
|
|
456
|
+
}
|
|
457
|
+
this.validateInputData(target);
|
|
458
|
+
const d = IgxDateTimeFilteringOperand.getDateParts(target, 'yM');
|
|
459
|
+
const now = IgxDateTimeFilteringOperand.getDateParts(new Date(), 'yM');
|
|
460
|
+
return d.year === now.year &&
|
|
461
|
+
d.month === now.month;
|
|
462
|
+
}
|
|
463
|
+
}, {
|
|
464
|
+
name: 'lastMonth',
|
|
465
|
+
isUnary: true,
|
|
466
|
+
iconName: 'last-month',
|
|
467
|
+
logic: (target) => {
|
|
468
|
+
if (!target) {
|
|
469
|
+
return false;
|
|
470
|
+
}
|
|
471
|
+
this.validateInputData(target);
|
|
472
|
+
const d = IgxDateTimeFilteringOperand.getDateParts(target, 'yM');
|
|
473
|
+
const now = IgxDateTimeFilteringOperand.getDateParts(new Date(), 'yM');
|
|
474
|
+
if (!now.month) {
|
|
475
|
+
now.month = 11;
|
|
476
|
+
now.year -= 1;
|
|
477
|
+
}
|
|
478
|
+
else {
|
|
479
|
+
now.month--;
|
|
480
|
+
}
|
|
481
|
+
return d.year === now.year &&
|
|
482
|
+
d.month === now.month;
|
|
483
|
+
}
|
|
484
|
+
}, {
|
|
485
|
+
name: 'nextMonth',
|
|
486
|
+
isUnary: true,
|
|
487
|
+
iconName: 'next-month',
|
|
488
|
+
logic: (target) => {
|
|
489
|
+
if (!target) {
|
|
490
|
+
return false;
|
|
491
|
+
}
|
|
492
|
+
this.validateInputData(target);
|
|
493
|
+
const d = IgxDateTimeFilteringOperand.getDateParts(target, 'yM');
|
|
494
|
+
const now = IgxDateTimeFilteringOperand.getDateParts(new Date(), 'yM');
|
|
495
|
+
if (now.month === 11) {
|
|
496
|
+
now.month = 0;
|
|
497
|
+
now.year += 1;
|
|
498
|
+
}
|
|
499
|
+
else {
|
|
500
|
+
now.month++;
|
|
501
|
+
}
|
|
502
|
+
return d.year === now.year &&
|
|
503
|
+
d.month === now.month;
|
|
504
|
+
}
|
|
505
|
+
}, {
|
|
506
|
+
name: 'thisYear',
|
|
507
|
+
isUnary: true,
|
|
508
|
+
iconName: 'this-year',
|
|
509
|
+
logic: (target) => {
|
|
510
|
+
if (!target) {
|
|
511
|
+
return false;
|
|
512
|
+
}
|
|
513
|
+
this.validateInputData(target);
|
|
514
|
+
const d = IgxDateTimeFilteringOperand.getDateParts(target, 'y');
|
|
515
|
+
const now = IgxDateTimeFilteringOperand.getDateParts(new Date(), 'y');
|
|
516
|
+
return d.year === now.year;
|
|
517
|
+
}
|
|
518
|
+
}, {
|
|
519
|
+
name: 'lastYear',
|
|
520
|
+
isUnary: true,
|
|
521
|
+
iconName: 'last-year',
|
|
522
|
+
logic: (target) => {
|
|
523
|
+
if (!target) {
|
|
524
|
+
return false;
|
|
525
|
+
}
|
|
526
|
+
this.validateInputData(target);
|
|
527
|
+
const d = IgxDateTimeFilteringOperand.getDateParts(target, 'y');
|
|
528
|
+
const now = IgxDateTimeFilteringOperand.getDateParts(new Date(), 'y');
|
|
529
|
+
return d.year === now.year - 1;
|
|
530
|
+
}
|
|
531
|
+
}, {
|
|
532
|
+
name: 'nextYear',
|
|
533
|
+
isUnary: true,
|
|
534
|
+
iconName: 'next-year',
|
|
535
|
+
logic: (target) => {
|
|
536
|
+
if (!target) {
|
|
537
|
+
return false;
|
|
538
|
+
}
|
|
539
|
+
this.validateInputData(target);
|
|
540
|
+
const d = IgxDateTimeFilteringOperand.getDateParts(target, 'y');
|
|
541
|
+
const now = IgxDateTimeFilteringOperand.getDateParts(new Date(), 'y');
|
|
542
|
+
return d.year === now.year + 1;
|
|
543
|
+
}
|
|
400
544
|
}].concat(this.operations);
|
|
401
545
|
}
|
|
402
546
|
}
|
|
@@ -636,4 +780,4 @@ export class IgxStringFilteringOperand extends IgxFilteringOperand {
|
|
|
636
780
|
return ignoreCase ? ('' + a).toLowerCase() : a;
|
|
637
781
|
}
|
|
638
782
|
}
|
|
639
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyaW5nLWNvbmRpdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWNvbmRpdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxtQkFBbUI7SUFJNUI7UUFDSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUM7Z0JBQ2YsSUFBSSxFQUFFLE1BQU07Z0JBQ1osT0FBTyxFQUFFLElBQUk7Z0JBQ2IsUUFBUSxFQUFFLFNBQVM7Z0JBQ25CLEtBQUssRUFBRSxDQUFDLE1BQVcsRUFBRSxFQUFFLENBQUMsTUFBTSxLQUFLLElBQUk7YUFDMUMsRUFBRTtnQkFDQyxJQUFJLEVBQUUsU0FBUztnQkFDZixPQUFPLEVBQUUsSUFBSTtnQkFDYixRQUFRLEVBQUUsYUFBYTtnQkFDdkIsS0FBSyxFQUFFLENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEtBQUssSUFBSTthQUMxQyxFQUFFO2dCQUNDLElBQUksRUFBRSxJQUFJO2dCQUNWLE9BQU8sRUFBRSxLQUFLO2dCQUNkLFFBQVEsRUFBRSxPQUFPO2dCQUNqQixNQUFNLEVBQUUsSUFBSTtnQkFDWixLQUFLLEVBQUUsQ0FBQyxNQUFXLEVBQUUsU0FBbUIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDO2FBQ3RGLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxNQUFNLENBQUMsUUFBUTtRQUNsQixPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxhQUFhO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FB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QyxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sS0FBSyxTQUFTLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDO2FBQzFGLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFTLEVBQUUsVUFBbUI7UUFDeEQsQ0FBQyxHQUFHLENBQUMsYUFBRCxDQUFDLGNBQUQsQ0FBQyxHQUFJLEVBQUUsQ0FBQztRQUNaLGNBQWM7UUFDZCxPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFByb3ZpZGVzIGJhc2UgZmlsdGVyaW5nIG9wZXJhdGlvbnNcbiAqIEltcGxlbWVudGF0aW9ucyBzaG91bGQgYmUgU2luZ2xldG9uXG4gKlxuICogQGV4cG9ydFxuICovXG5leHBvcnQgY2xhc3MgSWd4RmlsdGVyaW5nT3BlcmFuZCB7XG4gICAgcHJvdGVjdGVkIHN0YXRpYyBfaW5zdGFuY2U6IElneEZpbHRlcmluZ09wZXJhbmQgPSBudWxsO1xuICAgIHB1YmxpYyBvcGVyYXRpb25zOiBJRmlsdGVyaW5nT3BlcmF0aW9uW107XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5vcGVyYXRpb25zID0gW3tcbiAgICAgICAgICAgIG5hbWU6ICdudWxsJyxcbiAgICAgICAgICAgIGlzVW5hcnk6IHRydWUsXG4gICAgICAgICAgICBpY29uTmFtZTogJ2lzLW51bGwnLFxuICAgICAgICAgICAgbG9naWM6ICh0YXJnZXQ6IGFueSkgPT4gdGFyZ2V0ID09PSBudWxsXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6ICdub3ROdWxsJyxcbiAgICAgICAgICAgIGlzVW5hcnk6IHRydWUsXG4gICAgICAgICAgICBpY29uTmFtZTogJ2lzLW5vdC1udWxsJyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBhbnkpID0+IHRhcmdldCAhPT0gbnVsbFxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBuYW1lOiAnaW4nLFxuICAgICAgICAgICAgaXNVbmFyeTogZmFsc2UsXG4gICAgICAgICAgICBpY29uTmFtZTogJ2lzLWluJyxcbiAgICAgICAgICAgIGhpZGRlbjogdHJ1ZSxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBhbnksIHNlYXJjaFZhbDogU2V0PGFueT4pID0+IHRoaXMuZmluZFZhbHVlSW5TZXQodGFyZ2V0LCBzZWFyY2hWYWwpXG4gICAgICAgIH1dO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgaW5zdGFuY2UoKTogSWd4RmlsdGVyaW5nT3BlcmFuZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZSB8fCAodGhpcy5faW5zdGFuY2UgPSBuZXcgdGhpcygpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIG5hbWVzIG9mIHRoZSBjb25kaXRpb25zIHdoaWNoIGFyZSB2aXNpYmxlIGluIHRoZSBVSVxuICAgICAqL1xuICAgIHB1YmxpYyBjb25kaXRpb25MaXN0KCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlcmF0aW9ucy5maWx0ZXIoZiA9PiAhZi5oaWRkZW4pLm1hcCgoZWxlbWVudCkgPT4gZWxlbWVudC5uYW1lKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIHRoZSBjb25kaXRpb24gd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgY29uZGl0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25kaXRpb24obmFtZTogc3RyaW5nKTogSUZpbHRlcmluZ09wZXJhdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wZXJhdGlvbnMuZmluZCgoZWxlbWVudCkgPT4gZWxlbWVudC5uYW1lID09PSBuYW1lKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgbmV3IGNvbmRpdGlvbiB0byB0aGUgZmlsdGVyaW5nIG9wZXJhdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3BlcmF0aW9uIFRoZSBmaWx0ZXJpbmcgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBhcHBlbmQob3BlcmF0aW9uOiBJRmlsdGVyaW5nT3BlcmF0aW9uKSB7XG4gICAgICAgIHRoaXMub3BlcmF0aW9ucy5wdXNoKG9wZXJhdGlvbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBmaW5kVmFsdWVJblNldCh0YXJnZXQ6IGFueSwgc2VhcmNoVmFsOiBTZXQ8YW55Pikge1xuICAgICAgICByZXR1cm4gc2VhcmNoVmFsLmhhcyh0YXJnZXQpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBQcm92aWRlcyBmaWx0ZXJpbmcgb3BlcmF0aW9ucyBmb3IgYm9vbGVhbnNcbiAqXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjbGFzcyBJZ3hCb29sZWFuRmlsdGVyaW5nT3BlcmFuZCBleHRlbmRzIElneEZpbHRlcmluZ09wZXJhbmQge1xuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5vcGVyYXRpb25zID0gW3tcbiAgICAgICAgICAgIG5hbWU6ICdhbGwnLFxuICAgICAgICAgICAgaXNVbmFyeTogdHJ1ZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAnc2VsZWN0LWFsbCcsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogYm9vbGVhbikgPT4gdHJ1ZVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBuYW1lOiAndHJ1ZScsXG4gICAgICAgICAgICBpc1VuYXJ5OiB0cnVlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICdpcy10cnVlJyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBib29sZWFuKSA9PiAhISh0YXJnZXQgJiYgdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBuYW1lOiAnZmFsc2UnLFxuICAgICAgICAgICAgaXNVbmFyeTogdHJ1ZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAnaXMtZmFsc2UnLFxuICAgICAgICAgICAgbG9naWM6ICh0YXJnZXQ6IGJvb2xlYW4pID0+ICF0YXJnZXQgJiYgdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdW5kZWZpbmVkXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6ICdlbXB0eScsXG4gICAgICAgICAgICBpc1VuYXJ5OiB0cnVlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICdpcy1lbXB0eScsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogYm9vbGVhbikgPT4gdGFyZ2V0ID09PSBudWxsIHx8IHRhcmdldCA9PT0gdW5kZWZpbmVkXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6ICdub3RFbXB0eScsXG4gICAgICAgICAgICBpc1VuYXJ5OiB0cnVlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICdub3QtZW1wdHknLFxuICAgICAgICAgICAgbG9naWM6ICh0YXJnZXQ6IGJvb2xlYW4pID0+IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHVuZGVmaW5lZFxuICAgICAgICB9XS5jb25jYXQodGhpcy5vcGVyYXRpb25zKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIElneEJhc2VEYXRlVGltZUZpbHRlcmluZ09wZXJhbmQgZXh0ZW5kcyBJZ3hGaWx0ZXJpbmdPcGVyYW5kIHtcbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMub3BlcmF0aW9ucyA9IFt7XG4gICAgICAgICAgICBuYW1lOiAnZW1wdHknLFxuICAgICAgICAgICAgaXNVbmFyeTogdHJ1ZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAnaXMtZW1wdHknLFxuICAgICAgICAgICAgbG9naWM6ICh0YXJnZXQ6IERhdGUpID0+IHRhcmdldCA9PT0gbnVsbCB8fCB0YXJnZXQgPT09IHVuZGVmaW5lZFxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBuYW1lOiAnbm90RW1wdHknLFxuICAgICAgICAgICAgaXNVbmFyeTogdHJ1ZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAnbm90LWVtcHR5JyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBEYXRlKSA9PiB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgfV0uY29uY2F0KHRoaXMub3BlcmF0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3BsaXRzIGEgRGF0ZSBvYmplY3QgaW50byBwYXJ0c1xuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneERhdGVGaWx0ZXJpbmdPcGVyYW5kXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXREYXRlUGFydHMoZGF0ZTogRGF0ZSwgZGF0ZUZvcm1hdD86IHN0cmluZyk6IElEYXRlUGFydHMge1xuICAgICAgICBjb25zdCByZXMgPSB7XG4gICAgICAgICAgICBkYXk6IG51bGwsXG4gICAgICAgICAgICBob3VyczogbnVsbCxcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kczogbnVsbCxcbiAgICAgICAgICAgIG1pbnV0ZXM6IG51bGwsXG4gICAgICAgICAgICBtb250aDogbnVsbCxcbiAgICAgICAgICAgIHNlY29uZHM6IG51bGwsXG4gICAgICAgICAgICB5ZWFyOiBudWxsXG4gICAgICAgIH07XG4gICAgICAgIGlmICghZGF0ZSB8fCAhZGF0ZUZvcm1hdCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0ZUZvcm1hdC5pbmRleE9mKCd5JykgPj0gMCkge1xuICAgICAgICAgICAgcmVzLnllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGVGb3JtYXQuaW5kZXhPZignTScpID49IDApIHtcbiAgICAgICAgICAgIHJlcy5tb250aCA9IGRhdGUuZ2V0TW9udGgoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0ZUZvcm1hdC5pbmRleE9mKCdkJykgPj0gMCkge1xuICAgICAgICAgICAgcmVzLmRheSA9IGRhdGUuZ2V0RGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRlRm9ybWF0LmluZGV4T2YoJ2gnKSA+PSAwKSB7XG4gICAgICAgICAgICByZXMuaG91cnMgPSBkYXRlLmdldEhvdXJzKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGVGb3JtYXQuaW5kZXhPZignbScpID49IDApIHtcbiAgICAgICAgICAgIHJlcy5taW51dGVzID0gZGF0ZS5nZXRNaW51dGVzKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGVGb3JtYXQuaW5kZXhPZigncycpID49IDApIHtcbiAgICAgICAgICAgIHJlcy5zZWNvbmRzID0gZGF0ZS5nZXRTZWNvbmRzKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGVGb3JtYXQuaW5kZXhPZignZicpID49IDApIHtcbiAgICAgICAgICAgIHJlcy5taWxsaXNlY29uZHMgPSBkYXRlLmdldE1pbGxpc2Vjb25kcygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGZpbmRWYWx1ZUluU2V0KHRhcmdldDogYW55LCBzZWFyY2hWYWw6IFNldDxhbnk+KSB7XG4gICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlYXJjaFZhbC5oYXMoKHRhcmdldCBpbnN0YW5jZW9mIERhdGUpID8gdGFyZ2V0LnRvSVNPU3RyaW5nKCkgOiB0YXJnZXQpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCB2YWxpZGF0ZUlucHV0RGF0YSh0YXJnZXQ6IERhdGUpIHtcbiAgICAgICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IHBlcmZvcm0gZmlsdGVyaW5nIG9uIFxcJ2RhdGVcXCcgY29sdW1uIGJlY2F1c2UgdGhlIGRhdGFzb3VyY2Ugb2JqZWN0IHR5cGUgaXMgbm90IFxcJ0RhdGVcXCcuJyk7XG4gICAgICAgIH1cbiAgICB9XG59XG4vKipcbiAqIFByb3ZpZGVzIGZpbHRlcmluZyBvcGVyYXRpb25zIGZvciBEYXRlc1xuICpcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNsYXNzIElneERhdGVGaWx0ZXJpbmdPcGVyYW5kIGV4dGVuZHMgSWd4QmFzZURhdGVUaW1lRmlsdGVyaW5nT3BlcmFuZCB7XG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLm9wZXJhdGlvbnMgPSBbe1xuICAgICAgICAgICAgbmFtZTogJ2VxdWFscycsXG4gICAgICAgICAgICBpc1VuYXJ5OiBmYWxzZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAnZXF1YWxzJyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBEYXRlLCBzZWFyY2hWYWw6IERhdGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUlucHV0RGF0YSh0YXJnZXQpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0cCA9IElneERhdGVGaWx0ZXJpbmdPcGVyYW5kLmdldERhdGVQYXJ0cyh0YXJnZXQsICd5TWQnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWFyY2hwID0gSWd4RGF0ZUZpbHRlcmluZ09wZXJhbmQuZ2V0RGF0ZVBhcnRzKHNlYXJjaFZhbCwgJ3lNZCcpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXRwLnllYXIgPT09IHNlYXJjaHAueWVhciAmJlxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRwLm1vbnRoID09PSBzZWFyY2hwLm1vbnRoICYmXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldHAuZGF5ID09PSBzZWFyY2hwLmRheTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgbmFtZTogJ2RvZXNOb3RFcXVhbCcsXG4gICAgICAgICAgICBpc1VuYXJ5OiBmYWxzZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAnbm90LWVxdWFsJyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBEYXRlLCBzZWFyY2hWYWw6IERhdGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlSW5wdXREYXRhKHRhcmdldCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRwID0gSWd4RGF0ZUZpbHRlcmluZ09wZXJhbmQuZ2V0RGF0ZVBhcnRzKHRhcmdldCwgJ3lNZCcpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlYXJjaHAgPSBJZ3hEYXRlRmlsdGVyaW5nT3BlcmFuZC5nZXREYXRlUGFydHMoc2VhcmNoVmFsLCAneU1kJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldHAueWVhciAhPT0gc2VhcmNocC55ZWFyIHx8XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldHAubW9udGggIT09IHNlYXJjaHAubW9udGggfHxcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0cC5kYXkgIT09IHNlYXJjaHAuZGF5O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBuYW1lOiAnYmVmb3JlJyxcbiAgICAgICAgICAgIGlzVW5hcnk6IGZhbHNlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICdpcy1iZWZvcmUnLFxuICAgICAgICAgICAgbG9naWM6ICh0YXJnZXQ6IERhdGUsIHNlYXJjaFZhbDogRGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlSW5wdXREYXRhKHRhcmdldCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0IDwgc2VhcmNoVmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBuYW1lOiAnYWZ0ZXInLFxuICAgICAgICAgICAgaXNVbmFyeTogZmFsc2UsXG4gICAgICAgICAgICBpY29uTmFtZTogJ2lzLWFmdGVyJyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBEYXRlLCBzZWFyY2hWYWw6IERhdGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUlucHV0RGF0YSh0YXJnZXQpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldCA+IHNlYXJjaFZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgbmFtZTogJ3RvZGF5JyxcbiAgICAgICAgICAgIGlzVW5hcnk6IHRydWUsXG4gICAgICAgICAgICBpY29uTmFtZTogJ3RvZGF5JyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBEYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVJbnB1dERhdGEodGFyZ2V0KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGQgPSBJZ3hEYXRlRmlsdGVyaW5nT3BlcmFuZC5nZXREYXRlUGFydHModGFyZ2V0LCAneU1kJyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm93ID0gSWd4RGF0ZUZpbHRlcmluZ09wZXJhbmQuZ2V0RGF0ZVBhcnRzKG5ldyBEYXRlKCksICd5TWQnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZC55ZWFyID09PSBub3cueWVhciAmJlxuICAgICAgICAgICAgICAgICAgICBkLm1vbnRoID09PSBub3cubW9udGggJiZcbiAgICAgICAgICAgICAgICAgICAgZC5kYXkgPT09IG5vdy5kYXk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6ICd5ZXN0ZXJkYXknLFxuICAgICAgICAgICAgaXNVbmFyeTogdHJ1ZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAneWVzdGVyZGF5JyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBEYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVJbnB1dERhdGEodGFyZ2V0KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHRkID0gSWd4RGF0ZUZpbHRlcmluZ09wZXJhbmQuZ2V0RGF0ZVBhcnRzKHRhcmdldCwgJ3lNZCcpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHkgPSAoKGQpID0+IG5ldyBEYXRlKGQuc2V0RGF0ZShkLmdldERhdGUoKSAtIDEpKSkobmV3IERhdGUoKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgeWVzdGVyZGF5ID0gSWd4RGF0ZUZpbHRlcmluZ09wZXJhbmQuZ2V0RGF0ZVBhcnRzKHksICd5TWQnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGQueWVhciA9PT0geWVzdGVyZGF5LnllYXIgJiZcbiAgICAgICAgICAgICAgICAgICAgdGQubW9udGggPT09IHllc3RlcmRheS5tb250aCAmJlxuICAgICAgICAgICAgICAgICAgICB0ZC5kYXkgPT09IHllc3RlcmRheS5kYXk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6ICd0aGlzTW9udGgnLFxuICAgICAgICAgICAgaXNVbmFyeTogdHJ1ZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAndGhpcy1tb250aCcsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogRGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlSW5wdXREYXRhKHRhcmdldCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBkID0gSWd4RGF0ZUZpbHRlcmluZ09wZXJhbmQuZ2V0RGF0ZVBhcnRzKHRhcmdldCwgJ3lNJyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm93ID0gSWd4RGF0ZUZpbHRlcmluZ09wZXJhbmQuZ2V0RGF0ZVBhcnRzKG5ldyBEYXRlKCksICd5TScpO1xuICAgICAgICAgICAgICAgIHJldHVybiBkLnllYXIgPT09IG5vdy55ZWFyICYmXG4gICAgICAgICAgICAgICAgICAgIGQubW9udGggPT09IG5vdy5tb250aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgbmFtZTogJ2xhc3RNb250aCcsXG4gICAgICAgICAgICBpc1VuYXJ5OiB0cnVlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICdsYXN0LW1vbnRoJyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBEYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVJbnB1dERhdGEodGFyZ2V0KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGQgPSBJZ3hEYXRlRmlsdGVyaW5nT3BlcmFuZC5nZXREYXRlUGFydHModGFyZ2V0LCAneU0nKTtcbiAgICAgICAgICAgICAgICBjb25zdCBub3cgPSBJZ3hEYXRlRmlsdGVyaW5nT3BlcmFuZC5nZXREYXRlUGFydHMobmV3IERhdGUoKSwgJ3lNJyk7XG4gICAgICAgICAgICAgICAgaWYgKCFub3cubW9udGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbm93Lm1vbnRoID0gMTE7XG4gICAgICAgICAgICAgICAgICAgIG5vdy55ZWFyIC09IDE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbm93Lm1vbnRoLS07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBkLnllYXIgPT09IG5vdy55ZWFyICYmXG4gICAgICAgICAgICAgICAgICAgIGQubW9udGggPT09IG5vdy5tb250aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgbmFtZTogJ25leHRNb250aCcsXG4gICAgICAgICAgICBpc1VuYXJ5OiB0cnVlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICduZXh0LW1vbnRoJyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBEYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVJbnB1dERhdGEodGFyZ2V0KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGQgPSBJZ3hEYXRlRmlsdGVyaW5nT3BlcmFuZC5nZXREYXRlUGFydHModGFyZ2V0LCAneU0nKTtcbiAgICAgICAgICAgICAgICBjb25zdCBub3cgPSBJZ3hEYXRlRmlsdGVyaW5nT3BlcmFuZC5nZXREYXRlUGFydHMobmV3IERhdGUoKSwgJ3lNJyk7XG4gICAgICAgICAgICAgICAgaWYgKG5vdy5tb250aCA9PT0gMTEpIHtcbiAgICAgICAgICAgICAgICAgICAgbm93Lm1vbnRoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgbm93LnllYXIgKz0gMTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBub3cubW9udGgrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGQueWVhciA9PT0gbm93LnllYXIgJiZcbiAgICAgICAgICAgICAgICAgICAgZC5tb250aCA9PT0gbm93Lm1vbnRoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBuYW1lOiAndGhpc1llYXInLFxuICAgICAgICAgICAgaXNVbmFyeTogdHJ1ZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAndGhpcy15ZWFyJyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBEYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVJbnB1dERhdGEodGFyZ2V0KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGQgPSBJZ3hEYXRlRmlsdGVyaW5nT3BlcmFuZC5nZXREYXRlUGFydHModGFyZ2V0LCAneScpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vdyA9IElneERhdGVGaWx0ZXJpbmdPcGVyYW5kLmdldERhdGVQYXJ0cyhuZXcgRGF0ZSgpLCAneScpO1xuICAgICAgICAgICAgICAgIHJldHVybiBkLnllYXIgPT09IG5vdy55ZWFyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBuYW1lOiAnbGFzdFllYXInLFxuICAgICAgICAgICAgaXNVbmFyeTogdHJ1ZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAnbGFzdC15ZWFyJyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBEYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVJbnB1dERhdGEodGFyZ2V0KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGQgPSBJZ3hEYXRlRmlsdGVyaW5nT3BlcmFuZC5nZXREYXRlUGFydHModGFyZ2V0LCAneScpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vdyA9IElneERhdGVGaWx0ZXJpbmdPcGVyYW5kLmdldERhdGVQYXJ0cyhuZXcgRGF0ZSgpLCAneScpO1xuICAgICAgICAgICAgICAgIHJldHVybiBkLnllYXIgPT09IG5vdy55ZWFyIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgbmFtZTogJ25leHRZZWFyJyxcbiAgICAgICAgICAgIGlzVW5hcnk6IHRydWUsXG4gICAgICAgICAgICBpY29uTmFtZTogJ25leHQteWVhcicsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogRGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlSW5wdXREYXRhKHRhcmdldCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBkID0gSWd4RGF0ZUZpbHRlcmluZ09wZXJhbmQuZ2V0RGF0ZVBhcnRzKHRhcmdldCwgJ3knKTtcbiAgICAgICAgICAgICAgICBjb25zdCBub3cgPSBJZ3hEYXRlRmlsdGVyaW5nT3BlcmFuZC5nZXREYXRlUGFydHMobmV3IERhdGUoKSwgJ3knKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZC55ZWFyID09PSBub3cueWVhciArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1dLmNvbmNhdCh0aGlzLm9wZXJhdGlvbnMpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIElneERhdGVUaW1lRmlsdGVyaW5nT3BlcmFuZCBleHRlbmRzIElneERhdGVGaWx0ZXJpbmdPcGVyYW5kIHtcbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIGxldCBpbmRleCA9IHRoaXMub3BlcmF0aW9ucy5pbmRleE9mKHRoaXMuY29uZGl0aW9uKCdlcXVhbHMnKSk7XG4gICAgICAgIHRoaXMub3BlcmF0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICBpbmRleCA9IHRoaXMub3BlcmF0aW9ucy5pbmRleE9mKHRoaXMuY29uZGl0aW9uKCdkb2VzTm90RXF1YWwnKSk7XG4gICAgICAgIHRoaXMub3BlcmF0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB0aGlzLm9wZXJhdGlvbnMgPSBbe1xuICAgICAgICAgICAgbmFtZTogJ2VxdWFscycsXG4gICAgICAgICAgICBpc1VuYXJ5OiBmYWxzZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAnZXF1YWxzJyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBEYXRlLCBzZWFyY2hWYWw6IERhdGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVJbnB1dERhdGEodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRwID0gSWd4RGF0ZVRpbWVGaWx0ZXJpbmdPcGVyYW5kLmdldERhdGVQYXJ0cyh0YXJnZXQsICd5TWRobXMnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWFyY2hwID0gSWd4RGF0ZVRpbWVGaWx0ZXJpbmdPcGVyYW5kLmdldERhdGVQYXJ0cyhzZWFyY2hWYWwsICd5TWRobXMnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0cC55ZWFyID09PSBzZWFyY2hwLnllYXIgJiZcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0cC5tb250aCA9PT0gc2VhcmNocC5tb250aCAmJlxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRwLmRheSA9PT0gc2VhcmNocC5kYXkgJiZcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0cC5ob3VycyA9PT0gc2VhcmNocC5ob3VycyAmJlxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRwLm1pbnV0ZXMgPT09IHNlYXJjaHAubWludXRlcyAmJlxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRwLnNlY29uZHMgPT09IHNlYXJjaHAuc2Vjb25kcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgbmFtZTogJ2RvZXNOb3RFcXVhbCcsXG4gICAgICAgICAgICBpc1VuYXJ5OiBmYWxzZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAnbm90LWVxdWFsJyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBEYXRlLCBzZWFyY2hWYWw6IERhdGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUlucHV0RGF0YSh0YXJnZXQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldHAgPSBJZ3hEYXRlVGltZUZpbHRlcmluZ09wZXJhbmQuZ2V0RGF0ZVBhcnRzKHRhcmdldCwgJ3lNZGhtcycpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlYXJjaHAgPSBJZ3hEYXRlVGltZUZpbHRlcmluZ09wZXJhbmQuZ2V0RGF0ZVBhcnRzKHNlYXJjaFZhbCwgJ3lNZGhtcycpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXRwLnllYXIgIT09IHNlYXJjaHAueWVhciB8fFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRwLm1vbnRoICE9PSBzZWFyY2hwLm1vbnRoIHx8XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldHAuZGF5ICE9PSBzZWFyY2hwLmRheSB8fFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRwLmhvdXJzICE9PSBzZWFyY2hwLmhvdXJzIHx8XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldHAubWludXRlcyAhPT0gc2VhcmNocC5taW51dGVzIHx8XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldHAuc2Vjb25kcyAhPT0gc2VhcmNocC5zZWNvbmRzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XS5jb25jYXQodGhpcy5vcGVyYXRpb25zKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJZ3hUaW1lRmlsdGVyaW5nT3BlcmFuZCBleHRlbmRzIElneEJhc2VEYXRlVGltZUZpbHRlcmluZ09wZXJhbmQge1xuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5vcGVyYXRpb25zID0gW3tcbiAgICAgICAgICAgIG5hbWU6ICdhdCcsXG4gICAgICAgICAgICBpc1VuYXJ5OiBmYWxzZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAnZXF1YWxzJyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBEYXRlLCBzZWFyY2hWYWw6IERhdGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVJbnB1dERhdGEodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRwID0gSWd4VGltZUZpbHRlcmluZ09wZXJhbmQuZ2V0RGF0ZVBhcnRzKHRhcmdldCwgJ2htcycpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlYXJjaHAgPSBJZ3hUaW1lRmlsdGVyaW5nT3BlcmFuZC5nZXREYXRlUGFydHMoc2VhcmNoVmFsLCAnaG1zJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldHAuaG91cnMgPT09IHNlYXJjaHAuaG91cnMgJiZcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0cC5taW51dGVzID09PSBzZWFyY2hwLm1pbnV0ZXMgJiZcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0cC5zZWNvbmRzID09PSBzZWFyY2hwLnNlY29uZHM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6ICdub3RfYXQnLFxuICAgICAgICAgICAgaXNVbmFyeTogZmFsc2UsXG4gICAgICAgICAgICBpY29uTmFtZTogJ25vdC1lcXVhbCcsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogRGF0ZSwgc2VhcmNoVmFsOiBEYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVJbnB1dERhdGEodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRwID0gSWd4VGltZUZpbHRlcmluZ09wZXJhbmQuZ2V0RGF0ZVBhcnRzKHRhcmdldCwgJ2htcycpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlYXJjaHAgPSBJZ3hUaW1lRmlsdGVyaW5nT3BlcmFuZC5nZXREYXRlUGFydHMoc2VhcmNoVmFsLCAnaG1zJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldHAuaG91cnMgIT09IHNlYXJjaHAuaG91cnMgfHxcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0cC5taW51dGVzICE9PSBzZWFyY2hwLm1pbnV0ZXMgfHxcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0cC5zZWNvbmRzICE9PSBzZWFyY2hwLnNlY29uZHM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6ICdiZWZvcmUnLFxuICAgICAgICAgICAgaXNVbmFyeTogZmFsc2UsXG4gICAgICAgICAgICBpY29uTmFtZTogJ2lzLWJlZm9yZScsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogRGF0ZSwgc2VhcmNoVmFsOiBEYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVJbnB1dERhdGEodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRuID0gSWd4VGltZUZpbHRlcmluZ09wZXJhbmQuZ2V0RGF0ZVBhcnRzKHRhcmdldCwgJ2htcycpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlYXJjaCA9IElneFRpbWVGaWx0ZXJpbmdPcGVyYW5kLmdldERhdGVQYXJ0cyhzZWFyY2hWYWwsICdobXMnKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXRuLmhvdXJzIDwgc2VhcmNoLmhvdXJzID8gdHJ1ZSA6IHRhcmdldG4uaG91cnMgPT09IHNlYXJjaC5ob3VycyAmJiB0YXJnZXRuLm1pbnV0ZXMgPCBzZWFyY2gubWludXRlcyA/XG4gICAgICAgICAgICAgICAgICAgIHRydWUgOiB0YXJnZXRuLmhvdXJzID09PSBzZWFyY2guaG91cnMgJiYgdGFyZ2V0bi5taW51dGVzID09PSBzZWFyY2gubWludXRlcyAmJiB0YXJnZXRuLnNlY29uZHMgPCBzZWFyY2guc2Vjb25kcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgbmFtZTogJ2FmdGVyJyxcbiAgICAgICAgICAgIGlzVW5hcnk6IGZhbHNlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICdpcy1hZnRlcicsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogRGF0ZSwgc2VhcmNoVmFsOiBEYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVJbnB1dERhdGEodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRuID0gSWd4VGltZUZpbHRlcmluZ09wZXJhbmQuZ2V0RGF0ZVBhcnRzKHRhcmdldCwgJ2htcycpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlYXJjaCA9IElneFRpbWVGaWx0ZXJpbmdPcGVyYW5kLmdldERhdGVQYXJ0cyhzZWFyY2hWYWwsICdobXMnKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXRuLmhvdXJzID4gc2VhcmNoLmhvdXJzID8gdHJ1ZSA6IHRhcmdldG4uaG91cnMgPT09IHNlYXJjaC5ob3VycyAmJiB0YXJnZXRuLm1pbnV0ZXMgPiBzZWFyY2gubWludXRlcyA/XG4gICAgICAgICAgICAgICAgICAgIHRydWUgOiB0YXJnZXRuLmhvdXJzID09PSBzZWFyY2guaG91cnMgJiYgdGFyZ2V0bi5taW51dGVzID09PSBzZWFyY2gubWludXRlcyAmJiB0YXJnZXRuLnNlY29uZHMgPiBzZWFyY2guc2Vjb25kcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgbmFtZTogJ2F0X2JlZm9yZScsXG4gICAgICAgICAgICBpc1VuYXJ5OiBmYWxzZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAnaXMtYmVmb3JlJyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBEYXRlLCBzZWFyY2hWYWw6IERhdGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUlucHV0RGF0YSh0YXJnZXQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldG4gPSBJZ3hUaW1lRmlsdGVyaW5nT3BlcmFuZC5nZXREYXRlUGFydHModGFyZ2V0LCAnaG1zJyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VhcmNoID0gSWd4VGltZUZpbHRlcmluZ09wZXJhbmQuZ2V0RGF0ZVBhcnRzKHNlYXJjaFZhbCwgJ2htcycpO1xuICAgICAgICAgICAgICAgIHJldHVybiAodGFyZ2V0bi5ob3VycyA9PT0gc2VhcmNoLmhvdXJzICYmIHRhcmdldG4ubWludXRlcyA9PT0gc2VhcmNoLm1pbnV0ZXMgJiYgdGFyZ2V0bi5zZWNvbmRzID09PSBzZWFyY2guc2Vjb25kcykgfHxcbiAgICAgICAgICAgICAgICB0YXJnZXRuLmhvdXJzIDwgc2VhcmNoLmhvdXJzID8gdHJ1ZSA6IHRhcmdldG4uaG91cnMgPT09IHNlYXJjaC5ob3VycyAmJiB0YXJnZXRuLm1pbnV0ZXMgPCBzZWFyY2gubWludXRlcyA/XG4gICAgICAgICAgICAgICAgICAgIHRydWUgOiB0YXJnZXRuLmhvdXJzID09PSBzZWFyY2guaG91cnMgJiYgdGFyZ2V0bi5taW51dGVzID09PSBzZWFyY2gubWludXRlcyAmJiB0YXJnZXRuLnNlY29uZHMgPCBzZWFyY2guc2Vjb25kcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgbmFtZTogJ2F0X2FmdGVyJyxcbiAgICAgICAgICAgIGlzVW5hcnk6IGZhbHNlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICdpcy1hZnRlcicsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogRGF0ZSwgc2VhcmNoVmFsOiBEYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVJbnB1dERhdGEodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRuID0gSWd4VGltZUZpbHRlcmluZ09wZXJhbmQuZ2V0RGF0ZVBhcnRzKHRhcmdldCwgJ2htcycpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlYXJjaCA9IElneFRpbWVGaWx0ZXJpbmdPcGVyYW5kLmdldERhdGVQYXJ0cyhzZWFyY2hWYWwsICdobXMnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRhcmdldG4uaG91cnMgPT09IHNlYXJjaC5ob3VycyAmJiB0YXJnZXRuLm1pbnV0ZXMgPT09IHNlYXJjaC5taW51dGVzICYmIHRhcmdldG4uc2Vjb25kcyA9PT0gc2VhcmNoLnNlY29uZHMpIHx8XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldG4uaG91cnMgPiBzZWFyY2guaG91cnMgPyB0cnVlIDogdGFyZ2V0bi5ob3VycyA9PT0gc2VhcmNoLmhvdXJzICYmIHRhcmdldG4ubWludXRlcyA+IHNlYXJjaC5taW51dGVzID9cbiAgICAgICAgICAgICAgICAgICAgdHJ1ZSA6IHRhcmdldG4uaG91cnMgPT09IHNlYXJjaC5ob3VycyAmJiB0YXJnZXRuLm1pbnV0ZXMgPT09IHNlYXJjaC5taW51dGVzICYmIHRhcmdldG4uc2Vjb25kcyA+IHNlYXJjaC5zZWNvbmRzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XS5jb25jYXQodGhpcy5vcGVyYXRpb25zKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZmluZFZhbHVlSW5TZXQodGFyZ2V0OiBhbnksIHNlYXJjaFZhbDogU2V0PGFueT4pIHtcbiAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VhcmNoVmFsLmhhcyh0YXJnZXQudG9Mb2NhbGVUaW1lU3RyaW5nKCkpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBQcm92aWRlcyBmaWx0ZXJpbmcgb3BlcmF0aW9ucyBmb3IgbnVtYmVyc1xuICpcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNsYXNzIElneE51bWJlckZpbHRlcmluZ09wZXJhbmQgZXh0ZW5kcyBJZ3hGaWx0ZXJpbmdPcGVyYW5kIHtcbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMub3BlcmF0aW9ucyA9IFt7XG4gICAgICAgICAgICBuYW1lOiAnZXF1YWxzJyxcbiAgICAgICAgICAgIGlzVW5hcnk6IGZhbHNlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICdlcXVhbHMnLFxuICAgICAgICAgICAgbG9naWM6ICh0YXJnZXQ6IG51bWJlciwgc2VhcmNoVmFsOiBudW1iZXIpID0+IHRhcmdldCA9PT0gc2VhcmNoVmFsXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6ICdkb2VzTm90RXF1YWwnLFxuICAgICAgICAgICAgaXNVbmFyeTogZmFsc2UsXG4gICAgICAgICAgICBpY29uTmFtZTogJ25vdC1lcXVhbCcsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogbnVtYmVyLCBzZWFyY2hWYWw6IG51bWJlcikgPT4gdGFyZ2V0ICE9PSBzZWFyY2hWYWxcbiAgICAgICAgfSwge1xuICAgICAgICAgICAgbmFtZTogJ2dyZWF0ZXJUaGFuJyxcbiAgICAgICAgICAgIGlzVW5hcnk6IGZhbHNlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICdncmVhdGVyLXRoYW4nLFxuICAgICAgICAgICAgbG9naWM6ICh0YXJnZXQ6IG51bWJlciwgc2VhcmNoVmFsOiBudW1iZXIpID0+IHRhcmdldCA+IHNlYXJjaFZhbFxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBuYW1lOiAnbGVzc1RoYW4nLFxuICAgICAgICAgICAgaXNVbmFyeTogZmFsc2UsXG4gICAgICAgICAgICBpY29uTmFtZTogJ2xlc3MtdGhhbicsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogbnVtYmVyLCBzZWFyY2hWYWw6IG51bWJlcikgPT4gdGFyZ2V0IDwgc2VhcmNoVmFsXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6ICdncmVhdGVyVGhhbk9yRXF1YWxUbycsXG4gICAgICAgICAgICBpc1VuYXJ5OiBmYWxzZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAnZ3JlYXRlci10aGFuLW9yLWVxdWFsJyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBudW1iZXIsIHNlYXJjaFZhbDogbnVtYmVyKSA9PiB0YXJnZXQgPj0gc2VhcmNoVmFsXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6ICdsZXNzVGhhbk9yRXF1YWxUbycsXG4gICAgICAgICAgICBpc1VuYXJ5OiBmYWxzZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAnbGVzcy10aGFuLW9yLWVxdWFsJyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBudW1iZXIsIHNlYXJjaFZhbDogbnVtYmVyKSA9PiB0YXJnZXQgPD0gc2VhcmNoVmFsXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6ICdlbXB0eScsXG4gICAgICAgICAgICBpc1VuYXJ5OiB0cnVlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICdpcy1lbXB0eScsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogbnVtYmVyKSA9PiB0YXJnZXQgPT09IG51bGwgfHwgdGFyZ2V0ID09PSB1bmRlZmluZWQgfHwgaXNOYU4odGFyZ2V0KVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBuYW1lOiAnbm90RW1wdHknLFxuICAgICAgICAgICAgaXNVbmFyeTogdHJ1ZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAnbm90LWVtcHR5JyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBudW1iZXIpID0+IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHVuZGVmaW5lZCAmJiAhaXNOYU4odGFyZ2V0KVxuICAgICAgICB9XS5jb25jYXQodGhpcy5vcGVyYXRpb25zKTtcbiAgICB9XG59XG5cbi8qKlxuICogUHJvdmlkZXMgZmlsdGVyaW5nIG9wZXJhdGlvbnMgZm9yIHN0cmluZ3NcbiAqXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjbGFzcyBJZ3hTdHJpbmdGaWx0ZXJpbmdPcGVyYW5kIGV4dGVuZHMgSWd4RmlsdGVyaW5nT3BlcmFuZCB7XG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLm9wZXJhdGlvbnMgPSBbe1xuICAgICAgICAgICAgbmFtZTogJ2NvbnRhaW5zJyxcbiAgICAgICAgICAgIGlzVW5hcnk6IGZhbHNlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICdjb250YWlucycsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogc3RyaW5nLCBzZWFyY2hWYWw6IHN0cmluZywgaWdub3JlQ2FzZT86IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWFyY2ggPSBJZ3hTdHJpbmdGaWx0ZXJpbmdPcGVyYW5kLmFwcGx5SWdub3JlQ2FzZShzZWFyY2hWYWwsIGlnbm9yZUNhc2UpO1xuICAgICAgICAgICAgICAgIHRhcmdldCA9IElneFN0cmluZ0ZpbHRlcmluZ09wZXJhbmQuYXBwbHlJZ25vcmVDYXNlKHRhcmdldCwgaWdub3JlQ2FzZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5pbmRleE9mKHNlYXJjaCkgIT09IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBuYW1lOiAnZG9lc05vdENvbnRhaW4nLFxuICAgICAgICAgICAgaXNVbmFyeTogZmFsc2UsXG4gICAgICAgICAgICBpY29uTmFtZTogJ2RvZXMtbm90LWNvbnRhaW4nLFxuICAgICAgICAgICAgbG9naWM6ICh0YXJnZXQ6IHN0cmluZywgc2VhcmNoVmFsOiBzdHJpbmcsIGlnbm9yZUNhc2U/OiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VhcmNoID0gSWd4U3RyaW5nRmlsdGVyaW5nT3BlcmFuZC5hcHBseUlnbm9yZUNhc2Uoc2VhcmNoVmFsLCBpZ25vcmVDYXNlKTtcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSBJZ3hTdHJpbmdGaWx0ZXJpbmdPcGVyYW5kLmFwcGx5SWdub3JlQ2FzZSh0YXJnZXQsIGlnbm9yZUNhc2UpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQuaW5kZXhPZihzZWFyY2gpID09PSAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgbmFtZTogJ3N0YXJ0c1dpdGgnLFxuICAgICAgICAgICAgaXNVbmFyeTogZmFsc2UsXG4gICAgICAgICAgICBpY29uTmFtZTogJ3N0YXJ0cy13aXRoJyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBzdHJpbmcsIHNlYXJjaFZhbDogc3RyaW5nLCBpZ25vcmVDYXNlPzogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlYXJjaCA9IElneFN0cmluZ0ZpbHRlcmluZ09wZXJhbmQuYXBwbHlJZ25vcmVDYXNlKHNlYXJjaFZhbCwgaWdub3JlQ2FzZSk7XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gSWd4U3RyaW5nRmlsdGVyaW5nT3BlcmFuZC5hcHBseUlnbm9yZUNhc2UodGFyZ2V0LCBpZ25vcmVDYXNlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LnN0YXJ0c1dpdGgoc2VhcmNoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgbmFtZTogJ2VuZHNXaXRoJyxcbiAgICAgICAgICAgIGlzVW5hcnk6IGZhbHNlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICdlbmRzLXdpdGgnLFxuICAgICAgICAgICAgbG9naWM6ICh0YXJnZXQ6IHN0cmluZywgc2VhcmNoVmFsOiBzdHJpbmcsIGlnbm9yZUNhc2U/OiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VhcmNoID0gSWd4U3RyaW5nRmlsdGVyaW5nT3BlcmFuZC5hcHBseUlnbm9yZUNhc2Uoc2VhcmNoVmFsLCBpZ25vcmVDYXNlKTtcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSBJZ3hTdHJpbmdGaWx0ZXJpbmdPcGVyYW5kLmFwcGx5SWdub3JlQ2FzZSh0YXJnZXQsIGlnbm9yZUNhc2UpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQuZW5kc1dpdGgoc2VhcmNoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgbmFtZTogJ2VxdWFscycsXG4gICAgICAgICAgICBpc1VuYXJ5OiBmYWxzZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAnZXF1YWxzJyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBzdHJpbmcsIHNlYXJjaFZhbDogc3RyaW5nLCBpZ25vcmVDYXNlPzogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlYXJjaCA9IElneFN0cmluZ0ZpbHRlcmluZ09wZXJhbmQuYXBwbHlJZ25vcmVDYXNlKHNlYXJjaFZhbCwgaWdub3JlQ2FzZSk7XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gSWd4U3RyaW5nRmlsdGVyaW5nT3BlcmFuZC5hcHBseUlnbm9yZUNhc2UodGFyZ2V0LCBpZ25vcmVDYXNlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0ID09PSBzZWFyY2g7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6ICdkb2VzTm90RXF1YWwnLFxuICAgICAgICAgICAgaXNVbmFyeTogZmFsc2UsXG4gICAgICAgICAgICBpY29uTmFtZTogJ25vdC1lcXVhbCcsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogc3RyaW5nLCBzZWFyY2hWYWw6IHN0cmluZywgaWdub3JlQ2FzZT86IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWFyY2ggPSBJZ3hTdHJpbmdGaWx0ZXJpbmdPcGVyYW5kLmFwcGx5SWdub3JlQ2FzZShzZWFyY2hWYWwsIGlnbm9yZUNhc2UpO1xuICAgICAgICAgICAgICAgIHRhcmdldCA9IElneFN0cmluZ0ZpbHRlcmluZ09wZXJhbmQuYXBwbHlJZ25vcmVDYXNlKHRhcmdldCwgaWdub3JlQ2FzZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldCAhPT0gc2VhcmNoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBuYW1lOiAnZW1wdHknLFxuICAgICAgICAgICAgaXNVbmFyeTogdHJ1ZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAnaXMtZW1wdHknLFxuICAgICAgICAgICAgbG9naWM6ICh0YXJnZXQ6IHN0cmluZykgPT4gdGFyZ2V0ID09PSBudWxsIHx8IHRhcmdldCA9PT0gdW5kZWZpbmVkIHx8IHRhcmdldC5sZW5ndGggPT09IDBcbiAgICAgICAgfSwge1xuICAgICAgICAgICAgbmFtZTogJ25vdEVtcHR5JyxcbiAgICAgICAgICAgIGlzVW5hcnk6IHRydWUsXG4gICAgICAgICAgICBpY29uTmFtZTogJ25vdC1lbXB0eScsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogc3RyaW5nKSA9PiB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB1bmRlZmluZWQgJiYgdGFyZ2V0Lmxlbmd0aCA+IDBcbiAgICAgICAgfV0uY29uY2F0KHRoaXMub3BlcmF0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXBwbGllcyBjYXNlIHNlbnNpdGl2aXR5IG9uIHN0cmluZ3MgaWYgcHJvdmlkZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hTdHJpbmdGaWx0ZXJpbmdPcGVyYW5kXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBhcHBseUlnbm9yZUNhc2UoYTogc3RyaW5nLCBpZ25vcmVDYXNlOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICAgICAgYSA9IGEgPz8gJyc7XG4gICAgICAgIC8vIGJ1bGxldHByb29mXG4gICAgICAgIHJldHVybiBpZ25vcmVDYXNlID8gKCcnICsgYSkudG9Mb3dlckNhc2UoKSA6IGE7XG4gICAgfVxufVxuXG4vKipcbiAqIEludGVyZmFjZSBkZXNjcmliaW5nIGZpbHRlcmluZyBvcGVyYXRpb25zXG4gKlxuICogQGV4cG9ydFxuICovXG5leHBvcnQgaW50ZXJmYWNlIElGaWx0ZXJpbmdPcGVyYXRpb24ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBpc1VuYXJ5OiBib29sZWFuO1xuICAgIGljb25OYW1lOiBzdHJpbmc7XG4gICAgaGlkZGVuPzogYm9vbGVhbjtcbiAgICBsb2dpYzogKHZhbHVlOiBhbnksIHNlYXJjaFZhbD86IGFueSwgaWdub3JlQ2FzZT86IGJvb2xlYW4pID0+IGJvb2xlYW47XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGRlc2NyaWJpbmcgRGF0ZSBvYmplY3QgaW4gcGFydHNcbiAqXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSURhdGVQYXJ0cyB7XG4gICAgeWVhcjogbnVtYmVyO1xuICAgIG1vbnRoOiBudW1iZXI7XG4gICAgZGF5OiBudW1iZXI7XG4gICAgaG91cnM6IG51bWJlcjtcbiAgICBtaW51dGVzOiBudW1iZXI7XG4gICAgc2Vjb25kczogbnVtYmVyO1xuICAgIG1pbGxpc2Vjb25kczogbnVtYmVyO1xufVxuIl19
|
|
783
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyaW5nLWNvbmRpdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWNvbmRpdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxtQkFBbUI7SUFJNUI7UUFDSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUM7Z0JBQ2YsSUFBSSxFQUFFLE1BQU07Z0JBQ1osT0FBTyxFQUFFLElBQUk7Z0JBQ2IsUUFBUSxFQUFFLFNBQVM7Z0JBQ25CLEtBQUssRUFBRSxDQUFDLE1BQVcsRUFBRSxFQUFFLENBQUMsTUFBTSxLQUFLLElBQUk7YUFDMUMsRUFBRTtnQkFDQyxJQUFJLEVBQUUsU0FBUztnQkFDZixPQUFPLEVBQUUsSUFBSTtnQkFDYixRQUFRLEVBQUUsYUFBYTtnQkFDdkIsS0FBSyxFQUFFLENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEtBQUssSUFBSTthQUMxQyxFQUFFO2dCQUNDLElBQUksRUFBRSxJQUFJO2dCQUNWLE9BQU8sRUFBRSxLQUFLO2dCQUNkLFFBQVEsRUFBRSxPQUFPO2dCQUNqQixNQUFNLEVBQUUsSUFBSTtnQkFDWixLQUFLLEVBQUUsQ0FBQyxNQUFXLEVBQUUsU0FBbUIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDO2FBQ3RGLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxNQUFNLENBQUMsUUFBUTtRQUNsQixPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxhQUFhO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FB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Qy9CLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFTLEVBQUUsVUFBbUI7UUFDeEQsQ0FBQyxHQUFHLENBQUMsYUFBRCxDQUFDLGNBQUQsQ0FBQyxHQUFJLEVBQUUsQ0FBQztRQUNaLGNBQWM7UUFDZCxPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFByb3ZpZGVzIGJhc2UgZmlsdGVyaW5nIG9wZXJhdGlvbnNcbiAqIEltcGxlbWVudGF0aW9ucyBzaG91bGQgYmUgU2luZ2xldG9uXG4gKlxuICogQGV4cG9ydFxuICovXG5leHBvcnQgY2xhc3MgSWd4RmlsdGVyaW5nT3BlcmFuZCB7XG4gICAgcHJvdGVjdGVkIHN0YXRpYyBfaW5zdGFuY2U6IElneEZpbHRlcmluZ09wZXJhbmQgPSBudWxsO1xuICAgIHB1YmxpYyBvcGVyYXRpb25zOiBJRmlsdGVyaW5nT3BlcmF0aW9uW107XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5vcGVyYXRpb25zID0gW3tcbiAgICAgICAgICAgIG5hbWU6ICdudWxsJyxcbiAgICAgICAgICAgIGlzVW5hcnk6IHRydWUsXG4gICAgICAgICAgICBpY29uTmFtZTogJ2lzLW51bGwnLFxuICAgICAgICAgICAgbG9naWM6ICh0YXJnZXQ6IGFueSkgPT4gdGFyZ2V0ID09PSBudWxsXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6ICdub3ROdWxsJyxcbiAgICAgICAgICAgIGlzVW5hcnk6IHRydWUsXG4gICAgICAgICAgICBpY29uTmFtZTogJ2lzLW5vdC1udWxsJyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBhbnkpID0+IHRhcmdldCAhPT0gbnVsbFxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBuYW1lOiAnaW4nLFxuICAgICAgICAgICAgaXNVbmFyeTogZmFsc2UsXG4gICAgICAgICAgICBpY29uTmFtZTogJ2lzLWluJyxcbiAgICAgICAgICAgIGhpZGRlbjogdHJ1ZSxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBhbnksIHNlYXJjaFZhbDogU2V0PGFueT4pID0+IHRoaXMuZmluZFZhbHVlSW5TZXQodGFyZ2V0LCBzZWFyY2hWYWwpXG4gICAgICAgIH1dO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgaW5zdGFuY2UoKTogSWd4RmlsdGVyaW5nT3BlcmFuZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZSB8fCAodGhpcy5faW5zdGFuY2UgPSBuZXcgdGhpcygpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIG5hbWVzIG9mIHRoZSBjb25kaXRpb25zIHdoaWNoIGFyZSB2aXNpYmxlIGluIHRoZSBVSVxuICAgICAqL1xuICAgIHB1YmxpYyBjb25kaXRpb25MaXN0KCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlcmF0aW9ucy5maWx0ZXIoZiA9PiAhZi5oaWRkZW4pLm1hcCgoZWxlbWVudCkgPT4gZWxlbWVudC5uYW1lKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIHRoZSBjb25kaXRpb24gd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgY29uZGl0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25kaXRpb24obmFtZTogc3RyaW5nKTogSUZpbHRlcmluZ09wZXJhdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wZXJhdGlvbnMuZmluZCgoZWxlbWVudCkgPT4gZWxlbWVudC5uYW1lID09PSBuYW1lKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgbmV3IGNvbmRpdGlvbiB0byB0aGUgZmlsdGVyaW5nIG9wZXJhdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3BlcmF0aW9uIFRoZSBmaWx0ZXJpbmcgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBhcHBlbmQob3BlcmF0aW9uOiBJRmlsdGVyaW5nT3BlcmF0aW9uKSB7XG4gICAgICAgIHRoaXMub3BlcmF0aW9ucy5wdXNoKG9wZXJhdGlvbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBmaW5kVmFsdWVJblNldCh0YXJnZXQ6IGFueSwgc2VhcmNoVmFsOiBTZXQ8YW55Pikge1xuICAgICAgICByZXR1cm4gc2VhcmNoVmFsLmhhcyh0YXJnZXQpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBQcm92aWRlcyBmaWx0ZXJpbmcgb3BlcmF0aW9ucyBmb3IgYm9vbGVhbnNcbiAqXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjbGFzcyBJZ3hCb29sZWFuRmlsdGVyaW5nT3BlcmFuZCBleHRlbmRzIElneEZpbHRlcmluZ09wZXJhbmQge1xuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5vcGVyYXRpb25zID0gW3tcbiAgICAgICAgICAgIG5hbWU6ICdhbGwnLFxuICAgICAgICAgICAgaXNVbmFyeTogdHJ1ZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAnc2VsZWN0LWFsbCcsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogYm9vbGVhbikgPT4gdHJ1ZVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBuYW1lOiAndHJ1ZScsXG4gICAgICAgICAgICBpc1VuYXJ5OiB0cnVlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICdpcy10cnVlJyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBib29sZWFuKSA9PiAhISh0YXJnZXQgJiYgdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBuYW1lOiAnZmFsc2UnLFxuICAgICAgICAgICAgaXNVbmFyeTogdHJ1ZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAnaXMtZmFsc2UnLFxuICAgICAgICAgICAgbG9naWM6ICh0YXJnZXQ6IGJvb2xlYW4pID0+ICF0YXJnZXQgJiYgdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdW5kZWZpbmVkXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6ICdlbXB0eScsXG4gICAgICAgICAgICBpc1VuYXJ5OiB0cnVlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICdpcy1lbXB0eScsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogYm9vbGVhbikgPT4gdGFyZ2V0ID09PSBudWxsIHx8IHRhcmdldCA9PT0gdW5kZWZpbmVkXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6ICdub3RFbXB0eScsXG4gICAgICAgICAgICBpc1VuYXJ5OiB0cnVlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICdub3QtZW1wdHknLFxuICAgICAgICAgICAgbG9naWM6ICh0YXJnZXQ6IGJvb2xlYW4pID0+IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHVuZGVmaW5lZFxuICAgICAgICB9XS5jb25jYXQodGhpcy5vcGVyYXRpb25zKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIElneEJhc2VEYXRlVGltZUZpbHRlcmluZ09wZXJhbmQgZXh0ZW5kcyBJZ3hGaWx0ZXJpbmdPcGVyYW5kIHtcbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMub3BlcmF0aW9ucyA9IFt7XG4gICAgICAgICAgICBuYW1lOiAnZW1wdHknLFxuICAgICAgICAgICAgaXNVbmFyeTogdHJ1ZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAnaXMtZW1wdHknLFxuICAgICAgICAgICAgbG9naWM6ICh0YXJnZXQ6IERhdGUpID0+IHRhcmdldCA9PT0gbnVsbCB8fCB0YXJnZXQgPT09IHVuZGVmaW5lZFxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBuYW1lOiAnbm90RW1wdHknLFxuICAgICAgICAgICAgaXNVbmFyeTogdHJ1ZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAnbm90LWVtcHR5JyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBEYXRlKSA9PiB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgfV0uY29uY2F0KHRoaXMub3BlcmF0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3BsaXRzIGEgRGF0ZSBvYmplY3QgaW50byBwYXJ0c1xuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneERhdGVGaWx0ZXJpbmdPcGVyYW5kXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXREYXRlUGFydHMoZGF0ZTogRGF0ZSwgZGF0ZUZvcm1hdD86IHN0cmluZyk6IElEYXRlUGFydHMge1xuICAgICAgICBjb25zdCByZXMgPSB7XG4gICAgICAgICAgICBkYXk6IG51bGwsXG4gICAgICAgICAgICBob3VyczogbnVsbCxcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kczogbnVsbCxcbiAgICAgICAgICAgIG1pbnV0ZXM6IG51bGwsXG4gICAgICAgICAgICBtb250aDogbnVsbCxcbiAgICAgICAgICAgIHNlY29uZHM6IG51bGwsXG4gICAgICAgICAgICB5ZWFyOiBudWxsXG4gICAgICAgIH07XG4gICAgICAgIGlmICghZGF0ZSB8fCAhZGF0ZUZvcm1hdCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0ZUZvcm1hdC5pbmRleE9mKCd5JykgPj0gMCkge1xuICAgICAgICAgICAgcmVzLnllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGVGb3JtYXQuaW5kZXhPZignTScpID49IDApIHtcbiAgICAgICAgICAgIHJlcy5tb250aCA9IGRhdGUuZ2V0TW9udGgoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0ZUZvcm1hdC5pbmRleE9mKCdkJykgPj0gMCkge1xuICAgICAgICAgICAgcmVzLmRheSA9IGRhdGUuZ2V0RGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRlRm9ybWF0LmluZGV4T2YoJ2gnKSA+PSAwKSB7XG4gICAgICAgICAgICByZXMuaG91cnMgPSBkYXRlLmdldEhvdXJzKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGVGb3JtYXQuaW5kZXhPZignbScpID49IDApIHtcbiAgICAgICAgICAgIHJlcy5taW51dGVzID0gZGF0ZS5nZXRNaW51dGVzKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGVGb3JtYXQuaW5kZXhPZigncycpID49IDApIHtcbiAgICAgICAgICAgIHJlcy5zZWNvbmRzID0gZGF0ZS5nZXRTZWNvbmRzKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGVGb3JtYXQuaW5kZXhPZignZicpID49IDApIHtcbiAgICAgICAgICAgIHJlcy5taWxsaXNlY29uZHMgPSBkYXRlLmdldE1pbGxpc2Vjb25kcygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGZpbmRWYWx1ZUluU2V0KHRhcmdldDogYW55LCBzZWFyY2hWYWw6IFNldDxhbnk+KSB7XG4gICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlYXJjaFZhbC5oYXMoKHRhcmdldCBpbnN0YW5jZW9mIERhdGUpID8gdGFyZ2V0LnRvSVNPU3RyaW5nKCkgOiB0YXJnZXQpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCB2YWxpZGF0ZUlucHV0RGF0YSh0YXJnZXQ6IERhdGUpIHtcbiAgICAgICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IHBlcmZvcm0gZmlsdGVyaW5nIG9uIFxcJ2RhdGVcXCcgY29sdW1uIGJlY2F1c2UgdGhlIGRhdGFzb3VyY2Ugb2JqZWN0IHR5cGUgaXMgbm90IFxcJ0RhdGVcXCcuJyk7XG4gICAgICAgIH1cbiAgICB9XG59XG4vKipcbiAqIFByb3ZpZGVzIGZpbHRlcmluZyBvcGVyYXRpb25zIGZvciBEYXRlc1xuICpcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNsYXNzIElneERhdGVGaWx0ZXJpbmdPcGVyYW5kIGV4dGVuZHMgSWd4QmFzZURhdGVUaW1lRmlsdGVyaW5nT3BlcmFuZCB7XG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLm9wZXJhdGlvbnMgPSBbe1xuICAgICAgICAgICAgbmFtZTogJ2VxdWFscycsXG4gICAgICAgICAgICBpc1VuYXJ5OiBmYWxzZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAnZXF1YWxzJyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBEYXRlLCBzZWFyY2hWYWw6IERhdGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUlucHV0RGF0YSh0YXJnZXQpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0cCA9IElneERhdGVGaWx0ZXJpbmdPcGVyYW5kLmdldERhdGVQYXJ0cyh0YXJnZXQsICd5TWQnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWFyY2hwID0gSWd4RGF0ZUZpbHRlcmluZ09wZXJhbmQuZ2V0RGF0ZVBhcnRzKHNlYXJjaFZhbCwgJ3lNZCcpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXRwLnllYXIgPT09IHNlYXJjaHAueWVhciAmJlxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRwLm1vbnRoID09PSBzZWFyY2hwLm1vbnRoICYmXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldHAuZGF5ID09PSBzZWFyY2hwLmRheTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgbmFtZTogJ2RvZXNOb3RFcXVhbCcsXG4gICAgICAgICAgICBpc1VuYXJ5OiBmYWxzZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAnbm90LWVxdWFsJyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBEYXRlLCBzZWFyY2hWYWw6IERhdGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlSW5wdXREYXRhKHRhcmdldCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRwID0gSWd4RGF0ZUZpbHRlcmluZ09wZXJhbmQuZ2V0RGF0ZVBhcnRzKHRhcmdldCwgJ3lNZCcpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlYXJjaHAgPSBJZ3hEYXRlRmlsdGVyaW5nT3BlcmFuZC5nZXREYXRlUGFydHMoc2VhcmNoVmFsLCAneU1kJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldHAueWVhciAhPT0gc2VhcmNocC55ZWFyIHx8XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldHAubW9udGggIT09IHNlYXJjaHAubW9udGggfHxcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0cC5kYXkgIT09IHNlYXJjaHAuZGF5O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBuYW1lOiAnYmVmb3JlJyxcbiAgICAgICAgICAgIGlzVW5hcnk6IGZhbHNlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICdpcy1iZWZvcmUnLFxuICAgICAgICAgICAgbG9naWM6ICh0YXJnZXQ6IERhdGUsIHNlYXJjaFZhbDogRGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlSW5wdXREYXRhKHRhcmdldCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0IDwgc2VhcmNoVmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBuYW1lOiAnYWZ0ZXInLFxuICAgICAgICAgICAgaXNVbmFyeTogZmFsc2UsXG4gICAgICAgICAgICBpY29uTmFtZTogJ2lzLWFmdGVyJyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBEYXRlLCBzZWFyY2hWYWw6IERhdGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUlucHV0RGF0YSh0YXJnZXQpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldCA+IHNlYXJjaFZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgbmFtZTogJ3RvZGF5JyxcbiAgICAgICAgICAgIGlzVW5hcnk6IHRydWUsXG4gICAgICAgICAgICBpY29uTmFtZTogJ3RvZGF5JyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBEYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVJbnB1dERhdGEodGFyZ2V0KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGQgPSBJZ3hEYXRlRmlsdGVyaW5nT3BlcmFuZC5nZXREYXRlUGFydHModGFyZ2V0LCAneU1kJyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm93ID0gSWd4RGF0ZUZpbHRlcmluZ09wZXJhbmQuZ2V0RGF0ZVBhcnRzKG5ldyBEYXRlKCksICd5TWQnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZC55ZWFyID09PSBub3cueWVhciAmJlxuICAgICAgICAgICAgICAgICAgICBkLm1vbnRoID09PSBub3cubW9udGggJiZcbiAgICAgICAgICAgICAgICAgICAgZC5kYXkgPT09IG5vdy5kYXk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6ICd5ZXN0ZXJkYXknLFxuICAgICAgICAgICAgaXNVbmFyeTogdHJ1ZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAneWVzdGVyZGF5JyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBEYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVJbnB1dERhdGEodGFyZ2V0KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHRkID0gSWd4RGF0ZUZpbHRlcmluZ09wZXJhbmQuZ2V0RGF0ZVBhcnRzKHRhcmdldCwgJ3lNZCcpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHkgPSAoKGQpID0+IG5ldyBEYXRlKGQuc2V0RGF0ZShkLmdldERhdGUoKSAtIDEpKSkobmV3IERhdGUoKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgeWVzdGVyZGF5ID0gSWd4RGF0ZUZpbHRlcmluZ09wZXJhbmQuZ2V0RGF0ZVBhcnRzKHksICd5TWQnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGQueWVhciA9PT0geWVzdGVyZGF5LnllYXIgJiZcbiAgICAgICAgICAgICAgICAgICAgdGQubW9udGggPT09IHllc3RlcmRheS5tb250aCAmJlxuICAgICAgICAgICAgICAgICAgICB0ZC5kYXkgPT09IHllc3RlcmRheS5kYXk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6ICd0aGlzTW9udGgnLFxuICAgICAgICAgICAgaXNVbmFyeTogdHJ1ZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAndGhpcy1tb250aCcsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogRGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlSW5wdXREYXRhKHRhcmdldCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBkID0gSWd4RGF0ZUZpbHRlcmluZ09wZXJhbmQuZ2V0RGF0ZVBhcnRzKHRhcmdldCwgJ3lNJyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm93ID0gSWd4RGF0ZUZpbHRlcmluZ09wZXJhbmQuZ2V0RGF0ZVBhcnRzKG5ldyBEYXRlKCksICd5TScpO1xuICAgICAgICAgICAgICAgIHJldHVybiBkLnllYXIgPT09IG5vdy55ZWFyICYmXG4gICAgICAgICAgICAgICAgICAgIGQubW9udGggPT09IG5vdy5tb250aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgbmFtZTogJ2xhc3RNb250aCcsXG4gICAgICAgICAgICBpc1VuYXJ5OiB0cnVlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICdsYXN0LW1vbnRoJyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBEYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVJbnB1dERhdGEodGFyZ2V0KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGQgPSBJZ3hEYXRlRmlsdGVyaW5nT3BlcmFuZC5nZXREYXRlUGFydHModGFyZ2V0LCAneU0nKTtcbiAgICAgICAgICAgICAgICBjb25zdCBub3cgPSBJZ3hEYXRlRmlsdGVyaW5nT3BlcmFuZC5nZXREYXRlUGFydHMobmV3IERhdGUoKSwgJ3lNJyk7XG4gICAgICAgICAgICAgICAgaWYgKCFub3cubW9udGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbm93Lm1vbnRoID0gMTE7XG4gICAgICAgICAgICAgICAgICAgIG5vdy55ZWFyIC09IDE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbm93Lm1vbnRoLS07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBkLnllYXIgPT09IG5vdy55ZWFyICYmXG4gICAgICAgICAgICAgICAgICAgIGQubW9udGggPT09IG5vdy5tb250aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgbmFtZTogJ25leHRNb250aCcsXG4gICAgICAgICAgICBpc1VuYXJ5OiB0cnVlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICduZXh0LW1vbnRoJyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBEYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVJbnB1dERhdGEodGFyZ2V0KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGQgPSBJZ3hEYXRlRmlsdGVyaW5nT3BlcmFuZC5nZXREYXRlUGFydHModGFyZ2V0LCAneU0nKTtcbiAgICAgICAgICAgICAgICBjb25zdCBub3cgPSBJZ3hEYXRlRmlsdGVyaW5nT3BlcmFuZC5nZXREYXRlUGFydHMobmV3IERhdGUoKSwgJ3lNJyk7XG4gICAgICAgICAgICAgICAgaWYgKG5vdy5tb250aCA9PT0gMTEpIHtcbiAgICAgICAgICAgICAgICAgICAgbm93Lm1vbnRoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgbm93LnllYXIgKz0gMTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBub3cubW9udGgrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGQueWVhciA9PT0gbm93LnllYXIgJiZcbiAgICAgICAgICAgICAgICAgICAgZC5tb250aCA9PT0gbm93Lm1vbnRoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBuYW1lOiAndGhpc1llYXInLFxuICAgICAgICAgICAgaXNVbmFyeTogdHJ1ZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAndGhpcy15ZWFyJyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBEYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVJbnB1dERhdGEodGFyZ2V0KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGQgPSBJZ3hEYXRlRmlsdGVyaW5nT3BlcmFuZC5nZXREYXRlUGFydHModGFyZ2V0LCAneScpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vdyA9IElneERhdGVGaWx0ZXJpbmdPcGVyYW5kLmdldERhdGVQYXJ0cyhuZXcgRGF0ZSgpLCAneScpO1xuICAgICAgICAgICAgICAgIHJldHVybiBkLnllYXIgPT09IG5vdy55ZWFyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBuYW1lOiAnbGFzdFllYXInLFxuICAgICAgICAgICAgaXNVbmFyeTogdHJ1ZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAnbGFzdC15ZWFyJyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBEYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVJbnB1dERhdGEodGFyZ2V0KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGQgPSBJZ3hEYXRlRmlsdGVyaW5nT3BlcmFuZC5nZXREYXRlUGFydHModGFyZ2V0LCAneScpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vdyA9IElneERhdGVGaWx0ZXJpbmdPcGVyYW5kLmdldERhdGVQYXJ0cyhuZXcgRGF0ZSgpLCAneScpO1xuICAgICAgICAgICAgICAgIHJldHVybiBkLnllYXIgPT09IG5vdy55ZWFyIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgbmFtZTogJ25leHRZZWFyJyxcbiAgICAgICAgICAgIGlzVW5hcnk6IHRydWUsXG4gICAgICAgICAgICBpY29uTmFtZTogJ25leHQteWVhcicsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogRGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlSW5wdXREYXRhKHRhcmdldCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBkID0gSWd4RGF0ZUZpbHRlcmluZ09wZXJhbmQuZ2V0RGF0ZVBhcnRzKHRhcmdldCwgJ3knKTtcbiAgICAgICAgICAgICAgICBjb25zdCBub3cgPSBJZ3hEYXRlRmlsdGVyaW5nT3BlcmFuZC5nZXREYXRlUGFydHMobmV3IERhdGUoKSwgJ3knKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZC55ZWFyID09PSBub3cueWVhciArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1dLmNvbmNhdCh0aGlzLm9wZXJhdGlvbnMpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIElneERhdGVUaW1lRmlsdGVyaW5nT3BlcmFuZCBleHRlbmRzIElneEJhc2VEYXRlVGltZUZpbHRlcmluZ09wZXJhbmQge1xuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5vcGVyYXRpb25zID0gW3tcbiAgICAgICAgICAgIG5hbWU6ICdlcXVhbHMnLFxuICAgICAgICAgICAgaXNVbmFyeTogZmFsc2UsXG4gICAgICAgICAgICBpY29uTmFtZTogJ2VxdWFscycsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogRGF0ZSwgc2VhcmNoVmFsOiBEYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlSW5wdXREYXRhKHRhcmdldCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0cCA9IElneERhdGVUaW1lRmlsdGVyaW5nT3BlcmFuZC5nZXREYXRlUGFydHModGFyZ2V0LCAneU1kaG1zJyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VhcmNocCA9IElneERhdGVUaW1lRmlsdGVyaW5nT3BlcmFuZC5nZXREYXRlUGFydHMoc2VhcmNoVmFsLCAneU1kaG1zJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldHAueWVhciA9PT0gc2VhcmNocC55ZWFyICYmXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldHAubW9udGggPT09IHNlYXJjaHAubW9udGggJiZcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0cC5kYXkgPT09IHNlYXJjaHAuZGF5ICYmXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldHAuaG91cnMgPT09IHNlYXJjaHAuaG91cnMgJiZcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0cC5taW51dGVzID09PSBzZWFyY2hwLm1pbnV0ZXMgJiZcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0cC5zZWNvbmRzID09PSBzZWFyY2hwLnNlY29uZHM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6ICdkb2VzTm90RXF1YWwnLFxuICAgICAgICAgICAgaXNVbmFyeTogZmFsc2UsXG4gICAgICAgICAgICBpY29uTmFtZTogJ25vdC1lcXVhbCcsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogRGF0ZSwgc2VhcmNoVmFsOiBEYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVJbnB1dERhdGEodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRwID0gSWd4RGF0ZVRpbWVGaWx0ZXJpbmdPcGVyYW5kLmdldERhdGVQYXJ0cyh0YXJnZXQsICd5TWRobXMnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWFyY2hwID0gSWd4RGF0ZVRpbWVGaWx0ZXJpbmdPcGVyYW5kLmdldERhdGVQYXJ0cyhzZWFyY2hWYWwsICd5TWRobXMnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0cC55ZWFyICE9PSBzZWFyY2hwLnllYXIgfHxcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0cC5tb250aCAhPT0gc2VhcmNocC5tb250aCB8fFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRwLmRheSAhPT0gc2VhcmNocC5kYXkgfHxcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0cC5ob3VycyAhPT0gc2VhcmNocC5ob3VycyB8fFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRwLm1pbnV0ZXMgIT09IHNlYXJjaHAubWludXRlcyB8fFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRwLnNlY29uZHMgIT09IHNlYXJjaHAuc2Vjb25kcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgbmFtZTogJ2JlZm9yZScsXG4gICAgICAgICAgICBpc1VuYXJ5OiBmYWxzZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAnaXMtYmVmb3JlJyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBEYXRlLCBzZWFyY2hWYWw6IERhdGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUlucHV0RGF0YSh0YXJnZXQpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldCA8IHNlYXJjaFZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgbmFtZTogJ2FmdGVyJyxcbiAgICAgICAgICAgIGlzVW5hcnk6IGZhbHNlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICdpcy1hZnRlcicsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogRGF0ZSwgc2VhcmNoVmFsOiBEYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVJbnB1dERhdGEodGFyZ2V0KTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQgPiBzZWFyY2hWYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6ICd0b2RheScsXG4gICAgICAgICAgICBpc1VuYXJ5OiB0cnVlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICd0b2RheScsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogRGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlSW5wdXREYXRhKHRhcmdldCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBkID0gSWd4RGF0ZVRpbWVGaWx0ZXJpbmdPcGVyYW5kLmdldERhdGVQYXJ0cyh0YXJnZXQsICd5TWQnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBub3cgPSBJZ3hEYXRlVGltZUZpbHRlcmluZ09wZXJhbmQuZ2V0RGF0ZVBhcnRzKG5ldyBEYXRlKCksICd5TWQnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZC55ZWFyID09PSBub3cueWVhciAmJlxuICAgICAgICAgICAgICAgICAgICBkLm1vbnRoID09PSBub3cubW9udGggJiZcbiAgICAgICAgICAgICAgICAgICAgZC5kYXkgPT09IG5vdy5kYXk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6ICd5ZXN0ZXJkYXknLFxuICAgICAgICAgICAgaXNVbmFyeTogdHJ1ZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAneWVzdGVyZGF5JyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBEYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVJbnB1dERhdGEodGFyZ2V0KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHRkID0gSWd4RGF0ZVRpbWVGaWx0ZXJpbmdPcGVyYW5kLmdldERhdGVQYXJ0cyh0YXJnZXQsICd5TWQnKTtcbiAgICAgICAgICAgICAgICBjb25zdCB5ID0gKChkKSA9PiBuZXcgRGF0ZShkLnNldERhdGUoZC5nZXREYXRlKCkgLSAxKSkpKG5ldyBEYXRlKCkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHllc3RlcmRheSA9IElneERhdGVUaW1lRmlsdGVyaW5nT3BlcmFuZC5nZXREYXRlUGFydHMoeSwgJ3lNZCcpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0ZC55ZWFyID09PSB5ZXN0ZXJkYXkueWVhciAmJlxuICAgICAgICAgICAgICAgICAgICB0ZC5tb250aCA9PT0geWVzdGVyZGF5Lm1vbnRoICYmXG4gICAgICAgICAgICAgICAgICAgIHRkLmRheSA9PT0geWVzdGVyZGF5LmRheTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgbmFtZTogJ3RoaXNNb250aCcsXG4gICAgICAgICAgICBpc1VuYXJ5OiB0cnVlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICd0aGlzLW1vbnRoJyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBEYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVJbnB1dERhdGEodGFyZ2V0KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGQgPSBJZ3hEYXRlVGltZUZpbHRlcmluZ09wZXJhbmQuZ2V0RGF0ZVBhcnRzKHRhcmdldCwgJ3lNJyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm93ID0gSWd4RGF0ZVRpbWVGaWx0ZXJpbmdPcGVyYW5kLmdldERhdGVQYXJ0cyhuZXcgRGF0ZSgpLCAneU0nKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZC55ZWFyID09PSBub3cueWVhciAmJlxuICAgICAgICAgICAgICAgICAgICBkLm1vbnRoID09PSBub3cubW9udGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6ICdsYXN0TW9udGgnLFxuICAgICAgICAgICAgaXNVbmFyeTogdHJ1ZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAnbGFzdC1tb250aCcsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogRGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlSW5wdXREYXRhKHRhcmdldCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBkID0gSWd4RGF0ZVRpbWVGaWx0ZXJpbmdPcGVyYW5kLmdldERhdGVQYXJ0cyh0YXJnZXQsICd5TScpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vdyA9IElneERhdGVUaW1lRmlsdGVyaW5nT3BlcmFuZC5nZXREYXRlUGFydHMobmV3IERhdGUoKSwgJ3lNJyk7XG4gICAgICAgICAgICAgICAgaWYgKCFub3cubW9udGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbm93Lm1vbnRoID0gMTE7XG4gICAgICAgICAgICAgICAgICAgIG5vdy55ZWFyIC09IDE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbm93Lm1vbnRoLS07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBkLnllYXIgPT09IG5vdy55ZWFyICYmXG4gICAgICAgICAgICAgICAgICAgIGQubW9udGggPT09IG5vdy5tb250aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgbmFtZTogJ25leHRNb250aCcsXG4gICAgICAgICAgICBpc1VuYXJ5OiB0cnVlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICduZXh0LW1vbnRoJyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBEYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVJbnB1dERhdGEodGFyZ2V0KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGQgPSBJZ3hEYXRlVGltZUZpbHRlcmluZ09wZXJhbmQuZ2V0RGF0ZVBhcnRzKHRhcmdldCwgJ3lNJyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm93ID0gSWd4RGF0ZVRpbWVGaWx0ZXJpbmdPcGVyYW5kLmdldERhdGVQYXJ0cyhuZXcgRGF0ZSgpLCAneU0nKTtcbiAgICAgICAgICAgICAgICBpZiAobm93Lm1vbnRoID09PSAxMSkge1xuICAgICAgICAgICAgICAgICAgICBub3cubW9udGggPSAwO1xuICAgICAgICAgICAgICAgICAgICBub3cueWVhciArPSAxO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG5vdy5tb250aCsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZC55ZWFyID09PSBub3cueWVhciAmJlxuICAgICAgICAgICAgICAgICAgICBkLm1vbnRoID09PSBub3cubW9udGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6ICd0aGlzWWVhcicsXG4gICAgICAgICAgICBpc1VuYXJ5OiB0cnVlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICd0aGlzLXllYXInLFxuICAgICAgICAgICAgbG9naWM6ICh0YXJnZXQ6IERhdGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUlucHV0RGF0YSh0YXJnZXQpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZCA9IElneERhdGVUaW1lRmlsdGVyaW5nT3BlcmFuZC5nZXREYXRlUGFydHModGFyZ2V0LCAneScpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vdyA9IElneERhdGVUaW1lRmlsdGVyaW5nT3BlcmFuZC5nZXREYXRlUGFydHMobmV3IERhdGUoKSwgJ3knKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZC55ZWFyID09PSBub3cueWVhcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgbmFtZTogJ2xhc3RZZWFyJyxcbiAgICAgICAgICAgIGlzVW5hcnk6IHRydWUsXG4gICAgICAgICAgICBpY29uTmFtZTogJ2xhc3QteWVhcicsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogRGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlSW5wdXREYXRhKHRhcmdldCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBkID0gSWd4RGF0ZVRpbWVGaWx0ZXJpbmdPcGVyYW5kLmdldERhdGVQYXJ0cyh0YXJnZXQsICd5Jyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm93ID0gSWd4RGF0ZVRpbWVGaWx0ZXJpbmdPcGVyYW5kLmdldERhdGVQYXJ0cyhuZXcgRGF0ZSgpLCAneScpO1xuICAgICAgICAgICAgICAgIHJldHVybiBkLnllYXIgPT09IG5vdy55ZWFyIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgbmFtZTogJ25leHRZZWFyJyxcbiAgICAgICAgICAgIGlzVW5hcnk6IHRydWUsXG4gICAgICAgICAgICBpY29uTmFtZTogJ25leHQteWVhcicsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogRGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlSW5wdXREYXRhKHRhcmdldCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBkID0gSWd4RGF0ZVRpbWVGaWx0ZXJpbmdPcGVyYW5kLmdldERhdGVQYXJ0cyh0YXJnZXQsICd5Jyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm93ID0gSWd4RGF0ZVRpbWVGaWx0ZXJpbmdPcGVyYW5kLmdldERhdGVQYXJ0cyhuZXcgRGF0ZSgpLCAneScpO1xuICAgICAgICAgICAgICAgIHJldHVybiBkLnllYXIgPT09IG5vdy55ZWFyICsgMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfV0uY29uY2F0KHRoaXMub3BlcmF0aW9ucyk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSWd4VGltZUZpbHRlcmluZ09wZXJhbmQgZXh0ZW5kcyBJZ3hCYXNlRGF0ZVRpbWVGaWx0ZXJpbmdPcGVyYW5kIHtcbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMub3BlcmF0aW9ucyA9IFt7XG4gICAgICAgICAgICBuYW1lOiAnYXQnLFxuICAgICAgICAgICAgaXNVbmFyeTogZmFsc2UsXG4gICAgICAgICAgICBpY29uTmFtZTogJ2VxdWFscycsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogRGF0ZSwgc2VhcmNoVmFsOiBEYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlSW5wdXREYXRhKHRhcmdldCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0cCA9IElneFRpbWVGaWx0ZXJpbmdPcGVyYW5kLmdldERhdGVQYXJ0cyh0YXJnZXQsICdobXMnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWFyY2hwID0gSWd4VGltZUZpbHRlcmluZ09wZXJhbmQuZ2V0RGF0ZVBhcnRzKHNlYXJjaFZhbCwgJ2htcycpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXRwLmhvdXJzID09PSBzZWFyY2hwLmhvdXJzICYmXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldHAubWludXRlcyA9PT0gc2VhcmNocC5taW51dGVzICYmXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldHAuc2Vjb25kcyA9PT0gc2VhcmNocC5zZWNvbmRzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBuYW1lOiAnbm90X2F0JyxcbiAgICAgICAgICAgIGlzVW5hcnk6IGZhbHNlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICdub3QtZXF1YWwnLFxuICAgICAgICAgICAgbG9naWM6ICh0YXJnZXQ6IERhdGUsIHNlYXJjaFZhbDogRGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlSW5wdXREYXRhKHRhcmdldCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0cCA9IElneFRpbWVGaWx0ZXJpbmdPcGVyYW5kLmdldERhdGVQYXJ0cyh0YXJnZXQsICdobXMnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWFyY2hwID0gSWd4VGltZUZpbHRlcmluZ09wZXJhbmQuZ2V0RGF0ZVBhcnRzKHNlYXJjaFZhbCwgJ2htcycpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXRwLmhvdXJzICE9PSBzZWFyY2hwLmhvdXJzIHx8XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldHAubWludXRlcyAhPT0gc2VhcmNocC5taW51dGVzIHx8XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldHAuc2Vjb25kcyAhPT0gc2VhcmNocC5zZWNvbmRzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBuYW1lOiAnYmVmb3JlJyxcbiAgICAgICAgICAgIGlzVW5hcnk6IGZhbHNlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICdpcy1iZWZvcmUnLFxuICAgICAgICAgICAgbG9naWM6ICh0YXJnZXQ6IERhdGUsIHNlYXJjaFZhbDogRGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlSW5wdXREYXRhKHRhcmdldCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0biA9IElneFRpbWVGaWx0ZXJpbmdPcGVyYW5kLmdldERhdGVQYXJ0cyh0YXJnZXQsICdobXMnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWFyY2ggPSBJZ3hUaW1lRmlsdGVyaW5nT3BlcmFuZC5nZXREYXRlUGFydHMoc2VhcmNoVmFsLCAnaG1zJyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0bi5ob3VycyA8IHNlYXJjaC5ob3VycyA/IHRydWUgOiB0YXJnZXRuLmhvdXJzID09PSBzZWFyY2guaG91cnMgJiYgdGFyZ2V0bi5taW51dGVzIDwgc2VhcmNoLm1pbnV0ZXMgP1xuICAgICAgICAgICAgICAgICAgICB0cnVlIDogdGFyZ2V0bi5ob3VycyA9PT0gc2VhcmNoLmhvdXJzICYmIHRhcmdldG4ubWludXRlcyA9PT0gc2VhcmNoLm1pbnV0ZXMgJiYgdGFyZ2V0bi5zZWNvbmRzIDwgc2VhcmNoLnNlY29uZHM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6ICdhZnRlcicsXG4gICAgICAgICAgICBpc1VuYXJ5OiBmYWxzZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAnaXMtYWZ0ZXInLFxuICAgICAgICAgICAgbG9naWM6ICh0YXJnZXQ6IERhdGUsIHNlYXJjaFZhbDogRGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlSW5wdXREYXRhKHRhcmdldCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0biA9IElneFRpbWVGaWx0ZXJpbmdPcGVyYW5kLmdldERhdGVQYXJ0cyh0YXJnZXQsICdobXMnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWFyY2ggPSBJZ3hUaW1lRmlsdGVyaW5nT3BlcmFuZC5nZXREYXRlUGFydHMoc2VhcmNoVmFsLCAnaG1zJyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0bi5ob3VycyA+IHNlYXJjaC5ob3VycyA/IHRydWUgOiB0YXJnZXRuLmhvdXJzID09PSBzZWFyY2guaG91cnMgJiYgdGFyZ2V0bi5taW51dGVzID4gc2VhcmNoLm1pbnV0ZXMgP1xuICAgICAgICAgICAgICAgICAgICB0cnVlIDogdGFyZ2V0bi5ob3VycyA9PT0gc2VhcmNoLmhvdXJzICYmIHRhcmdldG4ubWludXRlcyA9PT0gc2VhcmNoLm1pbnV0ZXMgJiYgdGFyZ2V0bi5zZWNvbmRzID4gc2VhcmNoLnNlY29uZHM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6ICdhdF9iZWZvcmUnLFxuICAgICAgICAgICAgaXNVbmFyeTogZmFsc2UsXG4gICAgICAgICAgICBpY29uTmFtZTogJ2lzLWJlZm9yZScsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogRGF0ZSwgc2VhcmNoVmFsOiBEYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVJbnB1dERhdGEodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRuID0gSWd4VGltZUZpbHRlcmluZ09wZXJhbmQuZ2V0RGF0ZVBhcnRzKHRhcmdldCwgJ2htcycpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlYXJjaCA9IElneFRpbWVGaWx0ZXJpbmdPcGVyYW5kLmdldERhdGVQYXJ0cyhzZWFyY2hWYWwsICdobXMnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRhcmdldG4uaG91cnMgPT09IHNlYXJjaC5ob3VycyAmJiB0YXJnZXRuLm1pbnV0ZXMgPT09IHNlYXJjaC5taW51dGVzICYmIHRhcmdldG4uc2Vjb25kcyA9PT0gc2VhcmNoLnNlY29uZHMpIHx8XG4gICAgICAgICAgICAgICAgdGFyZ2V0bi5ob3VycyA8IHNlYXJjaC5ob3VycyA/IHRydWUgOiB0YXJnZXRuLmhvdXJzID09PSBzZWFyY2guaG91cnMgJiYgdGFyZ2V0bi5taW51dGVzIDwgc2VhcmNoLm1pbnV0ZXMgP1xuICAgICAgICAgICAgICAgICAgICB0cnVlIDogdGFyZ2V0bi5ob3VycyA9PT0gc2VhcmNoLmhvdXJzICYmIHRhcmdldG4ubWludXRlcyA9PT0gc2VhcmNoLm1pbnV0ZXMgJiYgdGFyZ2V0bi5zZWNvbmRzIDwgc2VhcmNoLnNlY29uZHM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6ICdhdF9hZnRlcicsXG4gICAgICAgICAgICBpc1VuYXJ5OiBmYWxzZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAnaXMtYWZ0ZXInLFxuICAgICAgICAgICAgbG9naWM6ICh0YXJnZXQ6IERhdGUsIHNlYXJjaFZhbDogRGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlSW5wdXREYXRhKHRhcmdldCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0biA9IElneFRpbWVGaWx0ZXJpbmdPcGVyYW5kLmdldERhdGVQYXJ0cyh0YXJnZXQsICdobXMnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWFyY2ggPSBJZ3hUaW1lRmlsdGVyaW5nT3BlcmFuZC5nZXREYXRlUGFydHMoc2VhcmNoVmFsLCAnaG1zJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuICh0YXJnZXRuLmhvdXJzID09PSBzZWFyY2guaG91cnMgJiYgdGFyZ2V0bi5taW51dGVzID09PSBzZWFyY2gubWludXRlcyAmJiB0YXJnZXRuLnNlY29uZHMgPT09IHNlYXJjaC5zZWNvbmRzKSB8fFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRuLmhvdXJzID4gc2VhcmNoLmhvdXJzID8gdHJ1ZSA6IHRhcmdldG4uaG91cnMgPT09IHNlYXJjaC5ob3VycyAmJiB0YXJnZXRuLm1pbnV0ZXMgPiBzZWFyY2gubWludXRlcyA/XG4gICAgICAgICAgICAgICAgICAgIHRydWUgOiB0YXJnZXRuLmhvdXJzID09PSBzZWFyY2guaG91cnMgJiYgdGFyZ2V0bi5taW51dGVzID09PSBzZWFyY2gubWludXRlcyAmJiB0YXJnZXRuLnNlY29uZHMgPiBzZWFyY2guc2Vjb25kcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfV0uY29uY2F0KHRoaXMub3BlcmF0aW9ucyk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGZpbmRWYWx1ZUluU2V0KHRhcmdldDogYW55LCBzZWFyY2hWYWw6IFNldDxhbnk+KSB7XG4gICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlYXJjaFZhbC5oYXModGFyZ2V0LnRvTG9jYWxlVGltZVN0cmluZygpKTtcbiAgICB9XG59XG5cbi8qKlxuICogUHJvdmlkZXMgZmlsdGVyaW5nIG9wZXJhdGlvbnMgZm9yIG51bWJlcnNcbiAqXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjbGFzcyBJZ3hOdW1iZXJGaWx0ZXJpbmdPcGVyYW5kIGV4dGVuZHMgSWd4RmlsdGVyaW5nT3BlcmFuZCB7XG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLm9wZXJhdGlvbnMgPSBbe1xuICAgICAgICAgICAgbmFtZTogJ2VxdWFscycsXG4gICAgICAgICAgICBpc1VuYXJ5OiBmYWxzZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAnZXF1YWxzJyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBudW1iZXIsIHNlYXJjaFZhbDogbnVtYmVyKSA9PiB0YXJnZXQgPT09IHNlYXJjaFZhbFxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBuYW1lOiAnZG9lc05vdEVxdWFsJyxcbiAgICAgICAgICAgIGlzVW5hcnk6IGZhbHNlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICdub3QtZXF1YWwnLFxuICAgICAgICAgICAgbG9naWM6ICh0YXJnZXQ6IG51bWJlciwgc2VhcmNoVmFsOiBudW1iZXIpID0+IHRhcmdldCAhPT0gc2VhcmNoVmFsXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6ICdncmVhdGVyVGhhbicsXG4gICAgICAgICAgICBpc1VuYXJ5OiBmYWxzZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAnZ3JlYXRlci10aGFuJyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBudW1iZXIsIHNlYXJjaFZhbDogbnVtYmVyKSA9PiB0YXJnZXQgPiBzZWFyY2hWYWxcbiAgICAgICAgfSwge1xuICAgICAgICAgICAgbmFtZTogJ2xlc3NUaGFuJyxcbiAgICAgICAgICAgIGlzVW5hcnk6IGZhbHNlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICdsZXNzLXRoYW4nLFxuICAgICAgICAgICAgbG9naWM6ICh0YXJnZXQ6IG51bWJlciwgc2VhcmNoVmFsOiBudW1iZXIpID0+IHRhcmdldCA8IHNlYXJjaFZhbFxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBuYW1lOiAnZ3JlYXRlclRoYW5PckVxdWFsVG8nLFxuICAgICAgICAgICAgaXNVbmFyeTogZmFsc2UsXG4gICAgICAgICAgICBpY29uTmFtZTogJ2dyZWF0ZXItdGhhbi1vci1lcXVhbCcsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogbnVtYmVyLCBzZWFyY2hWYWw6IG51bWJlcikgPT4gdGFyZ2V0ID49IHNlYXJjaFZhbFxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBuYW1lOiAnbGVzc1RoYW5PckVxdWFsVG8nLFxuICAgICAgICAgICAgaXNVbmFyeTogZmFsc2UsXG4gICAgICAgICAgICBpY29uTmFtZTogJ2xlc3MtdGhhbi1vci1lcXVhbCcsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogbnVtYmVyLCBzZWFyY2hWYWw6IG51bWJlcikgPT4gdGFyZ2V0IDw9IHNlYXJjaFZhbFxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBuYW1lOiAnZW1wdHknLFxuICAgICAgICAgICAgaXNVbmFyeTogdHJ1ZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAnaXMtZW1wdHknLFxuICAgICAgICAgICAgbG9naWM6ICh0YXJnZXQ6IG51bWJlcikgPT4gdGFyZ2V0ID09PSBudWxsIHx8IHRhcmdldCA9PT0gdW5kZWZpbmVkIHx8IGlzTmFOKHRhcmdldClcbiAgICAgICAgfSwge1xuICAgICAgICAgICAgbmFtZTogJ25vdEVtcHR5JyxcbiAgICAgICAgICAgIGlzVW5hcnk6IHRydWUsXG4gICAgICAgICAgICBpY29uTmFtZTogJ25vdC1lbXB0eScsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogbnVtYmVyKSA9PiB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB1bmRlZmluZWQgJiYgIWlzTmFOKHRhcmdldClcbiAgICAgICAgfV0uY29uY2F0KHRoaXMub3BlcmF0aW9ucyk7XG4gICAgfVxufVxuXG4vKipcbiAqIFByb3ZpZGVzIGZpbHRlcmluZyBvcGVyYXRpb25zIGZvciBzdHJpbmdzXG4gKlxuICogQGV4cG9ydFxuICovXG5leHBvcnQgY2xhc3MgSWd4U3RyaW5nRmlsdGVyaW5nT3BlcmFuZCBleHRlbmRzIElneEZpbHRlcmluZ09wZXJhbmQge1xuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5vcGVyYXRpb25zID0gW3tcbiAgICAgICAgICAgIG5hbWU6ICdjb250YWlucycsXG4gICAgICAgICAgICBpc1VuYXJ5OiBmYWxzZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAnY29udGFpbnMnLFxuICAgICAgICAgICAgbG9naWM6ICh0YXJnZXQ6IHN0cmluZywgc2VhcmNoVmFsOiBzdHJpbmcsIGlnbm9yZUNhc2U/OiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VhcmNoID0gSWd4U3RyaW5nRmlsdGVyaW5nT3BlcmFuZC5hcHBseUlnbm9yZUNhc2Uoc2VhcmNoVmFsLCBpZ25vcmVDYXNlKTtcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSBJZ3hTdHJpbmdGaWx0ZXJpbmdPcGVyYW5kLmFwcGx5SWdub3JlQ2FzZSh0YXJnZXQsIGlnbm9yZUNhc2UpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQuaW5kZXhPZihzZWFyY2gpICE9PSAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgbmFtZTogJ2RvZXNOb3RDb250YWluJyxcbiAgICAgICAgICAgIGlzVW5hcnk6IGZhbHNlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICdkb2VzLW5vdC1jb250YWluJyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBzdHJpbmcsIHNlYXJjaFZhbDogc3RyaW5nLCBpZ25vcmVDYXNlPzogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlYXJjaCA9IElneFN0cmluZ0ZpbHRlcmluZ09wZXJhbmQuYXBwbHlJZ25vcmVDYXNlKHNlYXJjaFZhbCwgaWdub3JlQ2FzZSk7XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gSWd4U3RyaW5nRmlsdGVyaW5nT3BlcmFuZC5hcHBseUlnbm9yZUNhc2UodGFyZ2V0LCBpZ25vcmVDYXNlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmluZGV4T2Yoc2VhcmNoKSA9PT0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6ICdzdGFydHNXaXRoJyxcbiAgICAgICAgICAgIGlzVW5hcnk6IGZhbHNlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICdzdGFydHMtd2l0aCcsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogc3RyaW5nLCBzZWFyY2hWYWw6IHN0cmluZywgaWdub3JlQ2FzZT86IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWFyY2ggPSBJZ3hTdHJpbmdGaWx0ZXJpbmdPcGVyYW5kLmFwcGx5SWdub3JlQ2FzZShzZWFyY2hWYWwsIGlnbm9yZUNhc2UpO1xuICAgICAgICAgICAgICAgIHRhcmdldCA9IElneFN0cmluZ0ZpbHRlcmluZ09wZXJhbmQuYXBwbHlJZ25vcmVDYXNlKHRhcmdldCwgaWdub3JlQ2FzZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5zdGFydHNXaXRoKHNlYXJjaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6ICdlbmRzV2l0aCcsXG4gICAgICAgICAgICBpc1VuYXJ5OiBmYWxzZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAnZW5kcy13aXRoJyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBzdHJpbmcsIHNlYXJjaFZhbDogc3RyaW5nLCBpZ25vcmVDYXNlPzogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlYXJjaCA9IElneFN0cmluZ0ZpbHRlcmluZ09wZXJhbmQuYXBwbHlJZ25vcmVDYXNlKHNlYXJjaFZhbCwgaWdub3JlQ2FzZSk7XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gSWd4U3RyaW5nRmlsdGVyaW5nT3BlcmFuZC5hcHBseUlnbm9yZUNhc2UodGFyZ2V0LCBpZ25vcmVDYXNlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmVuZHNXaXRoKHNlYXJjaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6ICdlcXVhbHMnLFxuICAgICAgICAgICAgaXNVbmFyeTogZmFsc2UsXG4gICAgICAgICAgICBpY29uTmFtZTogJ2VxdWFscycsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogc3RyaW5nLCBzZWFyY2hWYWw6IHN0cmluZywgaWdub3JlQ2FzZT86IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWFyY2ggPSBJZ3hTdHJpbmdGaWx0ZXJpbmdPcGVyYW5kLmFwcGx5SWdub3JlQ2FzZShzZWFyY2hWYWwsIGlnbm9yZUNhc2UpO1xuICAgICAgICAgICAgICAgIHRhcmdldCA9IElneFN0cmluZ0ZpbHRlcmluZ09wZXJhbmQuYXBwbHlJZ25vcmVDYXNlKHRhcmdldCwgaWdub3JlQ2FzZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldCA9PT0gc2VhcmNoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBuYW1lOiAnZG9lc05vdEVxdWFsJyxcbiAgICAgICAgICAgIGlzVW5hcnk6IGZhbHNlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICdub3QtZXF1YWwnLFxuICAgICAgICAgICAgbG9naWM6ICh0YXJnZXQ6IHN0cmluZywgc2VhcmNoVmFsOiBzdHJpbmcsIGlnbm9yZUNhc2U/OiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VhcmNoID0gSWd4U3RyaW5nRmlsdGVyaW5nT3BlcmFuZC5hcHBseUlnbm9yZUNhc2Uoc2VhcmNoVmFsLCBpZ25vcmVDYXNlKTtcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSBJZ3hTdHJpbmdGaWx0ZXJpbmdPcGVyYW5kLmFwcGx5SWdub3JlQ2FzZSh0YXJnZXQsIGlnbm9yZUNhc2UpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQgIT09IHNlYXJjaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgbmFtZTogJ2VtcHR5JyxcbiAgICAgICAgICAgIGlzVW5hcnk6IHRydWUsXG4gICAgICAgICAgICBpY29uTmFtZTogJ2lzLWVtcHR5JyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBzdHJpbmcpID0+IHRhcmdldCA9PT0gbnVsbCB8fCB0YXJnZXQgPT09IHVuZGVmaW5lZCB8fCB0YXJnZXQubGVuZ3RoID09PSAwXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6ICdub3RFbXB0eScsXG4gICAgICAgICAgICBpc1VuYXJ5OiB0cnVlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICdub3QtZW1wdHknLFxuICAgICAgICAgICAgbG9naWM6ICh0YXJnZXQ6IHN0cmluZykgPT4gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdW5kZWZpbmVkICYmIHRhcmdldC5sZW5ndGggPiAwXG4gICAgICAgIH1dLmNvbmNhdCh0aGlzLm9wZXJhdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFwcGxpZXMgY2FzZSBzZW5zaXRpdml0eSBvbiBzdHJpbmdzIGlmIHByb3ZpZGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4U3RyaW5nRmlsdGVyaW5nT3BlcmFuZFxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgYXBwbHlJZ25vcmVDYXNlKGE6IHN0cmluZywgaWdub3JlQ2FzZTogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgICAgIGEgPSBhID8/ICcnO1xuICAgICAgICAvLyBidWxsZXRwcm9vZlxuICAgICAgICByZXR1cm4gaWdub3JlQ2FzZSA/ICgnJyArIGEpLnRvTG93ZXJDYXNlKCkgOiBhO1xuICAgIH1cbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZGVzY3JpYmluZyBmaWx0ZXJpbmcgb3BlcmF0aW9uc1xuICpcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRmlsdGVyaW5nT3BlcmF0aW9uIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgaXNVbmFyeTogYm9vbGVhbjtcbiAgICBpY29uTmFtZTogc3RyaW5nO1xuICAgIGhpZGRlbj86IGJvb2xlYW47XG4gICAgbG9naWM6ICh2YWx1ZTogYW55LCBzZWFyY2hWYWw/OiBhbnksIGlnbm9yZUNhc2U/OiBib29sZWFuKSA9PiBib29sZWFuO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBkZXNjcmliaW5nIERhdGUgb2JqZWN0IGluIHBhcnRzXG4gKlxuICogQGV4cG9ydFxuICovXG5leHBvcnQgaW50ZXJmYWNlIElEYXRlUGFydHMge1xuICAgIHllYXI6IG51bWJlcjtcbiAgICBtb250aDogbnVtYmVyO1xuICAgIGRheTogbnVtYmVyO1xuICAgIGhvdXJzOiBudW1iZXI7XG4gICAgbWludXRlczogbnVtYmVyO1xuICAgIHNlY29uZHM6IG51bWJlcjtcbiAgICBtaWxsaXNlY29uZHM6IG51bWJlcjtcbn1cbiJdfQ==
|