@bizdoc/core 1.12.1 → 1.13.0-next.2
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/assets/themes/brown.min.css +1 -1
- package/assets/themes/dark.min.css +1 -1
- package/assets/themes/deep-purple-teal.min.css +1 -1
- package/assets/themes/default.min.css +1 -1
- package/assets/themes/green.min.css +1 -1
- package/assets/themes/indigo.min.css +1 -1
- package/esm2020/lib/browse/browse-items.component.mjs +42 -34
- package/esm2020/lib/browse/expanded-item/expanded-item.component.mjs +35 -14
- package/esm2020/lib/compose/action/action-picker.component.mjs +15 -14
- package/esm2020/lib/compose/action/action.base.mjs +9 -4
- package/esm2020/lib/compose/action/action.pane.dialog.exp.mjs +13 -12
- package/esm2020/lib/compose/action/assign-action.component.mjs +15 -7
- package/esm2020/lib/compose/form.component.mjs +6 -3
- package/esm2020/lib/compose/trace/flow.component.mjs +82 -45
- package/esm2020/lib/compose/trace/trace.base.mjs +6 -2
- package/esm2020/lib/compose/trace/trace.component.mjs +131 -146
- package/esm2020/lib/core/models.mjs +1 -1
- package/esm2020/lib/core/slots/slots.component.mjs +3 -3
- package/esm2020/lib/core/translations.mjs +16 -4
- package/esm2020/lib/cube/cube-info.service.mjs +3 -3
- package/esm2020/lib/cube/cube.service.mjs +5 -3
- package/esm2020/lib/cube/matrix/matrix.base.mjs +1 -1
- package/esm2020/lib/cube/matrix/matrix.mobile.component.mjs +1 -1
- package/esm2020/lib/cube/matrix/matrix.pane.component.mjs +5 -3
- package/esm2020/lib/cube/matrix/popup.component.mjs +7 -5
- package/esm2020/lib/cube/matrix/table.component.mjs +180 -164
- package/esm2020/lib/views/cube/matrix.component.mjs +1 -1
- package/fesm2015/bizdoc-core.mjs +677 -566
- package/fesm2015/bizdoc-core.mjs.map +1 -1
- package/fesm2020/bizdoc-core.mjs +671 -568
- package/fesm2020/bizdoc-core.mjs.map +1 -1
- package/lib/browse/browse-items.component.d.ts +3 -1
- package/lib/compose/action/action-picker.component.d.ts +2 -1
- package/lib/compose/action/action.base.d.ts +3 -1
- package/lib/compose/action/action.pane.dialog.exp.d.ts +2 -1
- package/lib/compose/action/assign-action.component.d.ts +5 -2
- package/lib/compose/trace/flow.component.d.ts +0 -1
- package/lib/compose/trace/trace.base.d.ts +5 -2
- package/lib/compose/trace/trace.component.d.ts +1 -19
- package/lib/core/models.d.ts +4 -1
- package/lib/core/translations.d.ts +12 -0
- package/lib/cube/cube-info.service.d.ts +2 -0
- package/lib/cube/cube.service.d.ts +1 -0
- package/lib/cube/matrix/matrix.base.d.ts +2 -0
- package/lib/cube/matrix/table.component.d.ts +14 -8
- package/package.json +1 -1
@@ -4,7 +4,7 @@ import { interval } from 'rxjs';
|
|
4
4
|
import { takeUntil } from 'rxjs/operators';
|
5
5
|
import dayjs from 'dayjs';
|
6
6
|
import { getWarn } from '../../core/functions';
|
7
|
-
import { TraceBase, START_NODE } from './trace.base';
|
7
|
+
import { TraceBase, You, START_NODE } from './trace.base';
|
8
8
|
import * as i0 from "@angular/core";
|
9
9
|
import * as i1 from "../../core/account.service";
|
10
10
|
import * as i2 from "../../core/session.service";
|
@@ -112,9 +112,6 @@ export class FlowViewComponent extends TraceBase {
|
|
112
112
|
n.tooltip.content = this._tooltip(n.addInfo.tooltip);
|
113
113
|
});
|
114
114
|
}
|
115
|
-
refresh() {
|
116
|
-
this.ngOnChanges(null);
|
117
|
-
}
|
118
115
|
/**
|
119
116
|
*
|
120
117
|
* @param obj
|
@@ -178,7 +175,7 @@ export class FlowViewComponent extends TraceBase {
|
|
178
175
|
}
|
179
176
|
})), nodes = [];
|
180
177
|
this._issued = this.model.issued || this.model.log.filter(l => l.type === 'Submit')[0].time;
|
181
|
-
let zIndex = 500
|
178
|
+
let zIndex = 500;
|
182
179
|
for (let node of dnodes) {
|
183
180
|
if (nodes.find(n => n.id == node.id))
|
184
181
|
continue;
|
@@ -255,7 +252,7 @@ export class FlowViewComponent extends TraceBase {
|
|
255
252
|
nodes.push(nod);
|
256
253
|
if (recipient.action) {
|
257
254
|
const action = this._session.profile.actions.find(a => a.name === recipient.action);
|
258
|
-
if (action &&
|
255
|
+
if (action.shape && !recipient.pending) {
|
259
256
|
const actionIndicator = {
|
260
257
|
id: nod.id + 'action',
|
261
258
|
shape: {
|
@@ -290,7 +287,7 @@ export class FlowViewComponent extends TraceBase {
|
|
290
287
|
parentId: nod.id
|
291
288
|
}
|
292
289
|
});
|
293
|
-
if (
|
290
|
+
if (recipient.fyi)
|
294
291
|
indicators.push({
|
295
292
|
id: nod.id + 'fyi',
|
296
293
|
shape: {
|
@@ -460,8 +457,8 @@ export class FlowViewComponent extends TraceBase {
|
|
460
457
|
this._translate.get('EstimateTimeRange', this._duration.transform(min), this._duration.transform(max));
|
461
458
|
}
|
462
459
|
_tooltip(obj) {
|
463
|
-
const { note, role, substituting, duration, standardTime, estimatedTime, error, fyi } = obj;
|
464
|
-
const rows = [error, note, role, substituting, fyi, duration, standardTime, estimatedTime];
|
460
|
+
const { note, role, substituting, escalation, duration, standardTime, estimatedTime, error, fyi } = obj;
|
461
|
+
const rows = [error, note, role, substituting, escalation, fyi, duration, standardTime, estimatedTime];
|
465
462
|
let div;
|
466
463
|
rows.forEach(r => {
|
467
464
|
if (!r)
|
@@ -479,51 +476,76 @@ export class FlowViewComponent extends TraceBase {
|
|
479
476
|
async _startNode() {
|
480
477
|
let who, by;
|
481
478
|
if (this.model.ownerId === this._session.profile.userId && !this._session.isImpersonating)
|
482
|
-
who =
|
479
|
+
who = You;
|
483
480
|
else
|
484
481
|
who = await this._accounts.get(this.model.ownerId).toPromise();
|
485
482
|
if (this.model.ownerById) {
|
486
483
|
if (this.model.ownerById === this._session.userId)
|
487
|
-
by =
|
484
|
+
by = You;
|
488
485
|
else
|
489
486
|
by = await this._accounts.get(this.model.ownerById).toPromise();
|
490
487
|
}
|
491
488
|
let note, role;
|
492
489
|
if (by) {
|
493
|
-
if (by ===
|
490
|
+
if (by === You)
|
494
491
|
note =
|
495
|
-
this._translate.get('SubmittedNoteByYou', who ===
|
492
|
+
this._translate.get('SubmittedNoteByYou', who === You ? this._translate.get('You') : who.name, this._fromNow(this.model.issued));
|
496
493
|
else
|
497
494
|
note =
|
498
|
-
this._translate.get('SubmittedNoteBy', who ===
|
495
|
+
this._translate.get('SubmittedNoteBy', who === You ? this._translate.get('You') : who.name, by.name, this._fromNow(this.model.issued));
|
499
496
|
}
|
500
|
-
else if (who ===
|
497
|
+
else if (who === You)
|
501
498
|
note = this._translate.get('YouSubmittedNote', this._fromNow(this.model.issued));
|
502
499
|
else
|
503
500
|
note = this._translate.get('SubmittedNote', who.name, this._fromNow(this.model.issued));
|
504
|
-
if (who !==
|
501
|
+
if (who !== You && who.role)
|
505
502
|
role = `- ${who.role}`;
|
506
503
|
return { note, role };
|
507
504
|
}
|
508
505
|
async _note(node, recipient) {
|
509
506
|
const tooltip = {};
|
510
507
|
let annotation;
|
511
|
-
|
508
|
+
// you
|
509
|
+
if ((recipient.byId || recipient.userId) === this._session.userId) {
|
512
510
|
annotation = this._session.isImpersonating ? this._session.profile.name : this._translate.get('You');
|
513
|
-
if (recipient.
|
514
|
-
const u = await this._accounts.get(recipient.byId).toPromise();
|
515
|
-
const past = this._action(recipient.action, u.gender), time = this._fromNow(recipient.replied);
|
516
|
-
tooltip.note = this._translate.get('YouTakenActionBy', u.name, past, time);
|
517
|
-
}
|
518
|
-
else if (recipient.replied) {
|
511
|
+
if (recipient.replied) {
|
519
512
|
const time = this._fromNow(recipient.replied);
|
520
|
-
if (
|
521
|
-
|
522
|
-
|
513
|
+
if (recipient.byId) {
|
514
|
+
if (recipient.byId === this._session.profile.byId) {
|
515
|
+
const action = this._action(recipient.action, this._session.gender);
|
516
|
+
if (recipient.toId) {
|
517
|
+
const to = await this._accounts.get(recipient.toId).toPromise();
|
518
|
+
tooltip.note = this._translate.get('ActionTakenByYouTo', action, to.name, this._session.profile.name, time);
|
519
|
+
}
|
520
|
+
else
|
521
|
+
tooltip.note = this._translate.get('ActionTakenByYou', action, this._session.profile.name, time);
|
522
|
+
}
|
523
|
+
else {
|
524
|
+
const by = await this._accounts.get(recipient.byId).toPromise();
|
525
|
+
const action = this._action(recipient.action, by.gender);
|
526
|
+
if (recipient.toId) {
|
527
|
+
const to = await this._accounts.get(recipient.toId).toPromise();
|
528
|
+
tooltip.note = this._translate.get('YouTakenActionByTo', by.name, action, to.name, time);
|
529
|
+
}
|
530
|
+
else
|
531
|
+
tooltip.note = this._translate.get('YouTakenActionBy', by.name, action, time);
|
532
|
+
}
|
533
|
+
}
|
534
|
+
else if (recipient.toId) {
|
535
|
+
const to = await this._accounts.get(recipient.toId).toPromise();
|
536
|
+
const action = this._action(recipient.action, this._session.profile.gender);
|
537
|
+
if (this._session.isImpersonating)
|
538
|
+
tooltip.note = this._translate.get('ActionTakenTo', this._session.profile.name, action, to.name, time);
|
539
|
+
else
|
540
|
+
tooltip.note = this._translate.get('YouTakenActionTo', action, to.name, time);
|
541
|
+
}
|
542
|
+
else if (this._session.isImpersonating) {
|
543
|
+
const action = this._action(recipient.action, this._session.profile.gender);
|
544
|
+
tooltip.note = this._translate.get('ActionTaken', this._session.profile.name, action, time);
|
523
545
|
}
|
524
546
|
else {
|
525
|
-
const
|
526
|
-
tooltip.note = this._translate.get('YouTakenAction',
|
547
|
+
const action = this._action(recipient.action, You);
|
548
|
+
tooltip.note = this._translate.get('YouTakenAction', action, time);
|
527
549
|
}
|
528
550
|
}
|
529
551
|
else if (!node.estimate) {
|
@@ -535,27 +557,42 @@ export class FlowViewComponent extends TraceBase {
|
|
535
557
|
}
|
536
558
|
if (recipient.role) {
|
537
559
|
const crole = this._session.profile.roles.find(o => o.name === recipient.role);
|
538
|
-
|
560
|
+
if (crole)
|
561
|
+
tooltip.role = `- ${crole.title}`;
|
539
562
|
}
|
540
563
|
}
|
541
|
-
else
|
564
|
+
else
|
565
|
+
// someone else
|
566
|
+
{
|
542
567
|
const who = await this._accounts.get(recipient.userId).toPromise();
|
543
568
|
annotation = who.name;
|
544
569
|
if (who.role)
|
545
570
|
tooltip.role = `- ${who.role}`;
|
546
571
|
else if (recipient.role) {
|
547
572
|
const crole = this._session.profile.roles.find(o => o.name === recipient.role);
|
548
|
-
|
573
|
+
if (crole)
|
574
|
+
tooltip.role = `- ${crole.title}`;
|
549
575
|
}
|
550
|
-
|
576
|
+
if (recipient.replied) {
|
577
|
+
const time = this._fromNow(recipient.replied);
|
551
578
|
if (recipient.byId) {
|
552
579
|
const by = await this._accounts.get(recipient.byId).toPromise();
|
553
|
-
const
|
554
|
-
|
580
|
+
const action = this._action(recipient.action, by.gender);
|
581
|
+
if (recipient.toId) {
|
582
|
+
const to = await this._accounts.get(recipient.toId).toPromise();
|
583
|
+
tooltip.note = this._translate.get('ActionTakenByTo', by.name, action, to.name, who.name, time);
|
584
|
+
}
|
585
|
+
else
|
586
|
+
tooltip.note = this._translate.get('ActionTakenBy', by.name, action, who.name, time);
|
587
|
+
}
|
588
|
+
else if (recipient.toId) {
|
589
|
+
const to = await this._accounts.get(recipient.toId).toPromise();
|
590
|
+
const action = this._action(recipient.action, who.gender);
|
591
|
+
tooltip.note = this._translate.get('ActionTakenTo', who.name, action, to.name);
|
555
592
|
}
|
556
593
|
else {
|
557
|
-
const
|
558
|
-
tooltip.note = this._translate.get('ActionTaken', who.name,
|
594
|
+
const action = this._action(recipient.action, who.gender);
|
595
|
+
tooltip.note = this._translate.get('ActionTaken', who.name, action, time);
|
559
596
|
}
|
560
597
|
}
|
561
598
|
else if (!recipient.estimate) {
|
@@ -563,12 +600,12 @@ export class FlowViewComponent extends TraceBase {
|
|
563
600
|
tooltip.note = this._translate.personalize('ReceivedTime', who.gender, time);
|
564
601
|
}
|
565
602
|
}
|
566
|
-
if (recipient.substitutingId
|
567
|
-
if (recipient.substitutingId === this._session.
|
568
|
-
tooltip.substituting = this._translate.personalize('SubstitutingYou', this._session.
|
603
|
+
if (recipient.substitutingId) {
|
604
|
+
if (recipient.substitutingId === this._session.userId)
|
605
|
+
tooltip.substituting = this._translate.personalize('SubstitutingYou', this._session.gender);
|
569
606
|
else {
|
570
|
-
const
|
571
|
-
tooltip.substituting = this._translate.personalize('SubstitutingFor',
|
607
|
+
const substituting = await this._accounts.get(recipient.substitutingId).toPromise();
|
608
|
+
tooltip.substituting = this._translate.personalize('SubstitutingFor', substituting.gender, substituting.name);
|
572
609
|
}
|
573
610
|
}
|
574
611
|
const escalations = this.model.log.filter(l => l.time > this._issued && l.type === 'Escalation' && l.recipientId === recipient.id);
|
@@ -576,7 +613,7 @@ export class FlowViewComponent extends TraceBase {
|
|
576
613
|
const userIds = escalations.map(e => e.userId);
|
577
614
|
const users = await this._accounts.getAll(userIds).toPromise();
|
578
615
|
const duration = this._duration.transform(dayjs(escalations[escalations.length - 1].time).diff(recipient.received, 's'));
|
579
|
-
tooltip.
|
616
|
+
tooltip.escalation = this._translate.get('EscalatedTo', this._translate.join(users.map(u => u.name)), duration);
|
580
617
|
}
|
581
618
|
if (recipient.replied) {
|
582
619
|
const duration = dayjs(recipient.replied).diff(recipient.received, 's');
|
@@ -593,7 +630,7 @@ export class FlowViewComponent extends TraceBase {
|
|
593
630
|
}
|
594
631
|
else if (node.standardTime)
|
595
632
|
tooltip.standardTime = this._translate.get('NodeStandardTime', this._duration.transform(node.standardTime));
|
596
|
-
if (
|
633
|
+
if (recipient.fyi)
|
597
634
|
tooltip.fyi = this._translate.get('FYI');
|
598
635
|
return { annotation, tooltip };
|
599
636
|
}
|
@@ -601,7 +638,7 @@ export class FlowViewComponent extends TraceBase {
|
|
601
638
|
const action = this._session.profile.actions.find(a => a.name === name);
|
602
639
|
if (!action)
|
603
640
|
return name;
|
604
|
-
if (gender ===
|
641
|
+
if (gender === You) {
|
605
642
|
const gender = this._session.gender, personal = (gender === 'Male' ? (action.youMale || action.you) :
|
606
643
|
gender === 'Female' ? (action.youFemale || action.you) :
|
607
644
|
action.you);
|
@@ -634,4 +671,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
|
|
634
671
|
}], connectorType: [{
|
635
672
|
type: Input
|
636
673
|
}] } });
|
637
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2NvbXBvc2UvdHJhY2UvZmxvdy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQW1ELE1BQU0sZUFBZSxDQUFDO0FBQ2xHLE9BQU8sRUFBMEMsWUFBWSxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSx1QkFBdUIsRUFBRSw4QkFBOEIsRUFBcUIsWUFBWSxFQUFFLFdBQVcsRUFBOEcscUJBQXFCLEVBQUUsZUFBZSxFQUFtQixlQUFlLEVBQWtDLE1BQU0sa0NBQWtDLENBQUM7QUFDbGMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7OztBQU9yRCxPQUFPLENBQUMsTUFBTSxDQUFDLHVCQUF1QixFQUFFLFlBQVksRUFBRSxXQUFXLENBQUEscURBQXFELENBQUMsQ0FBQztBQUV4SCxNQUFNLFlBQVksR0FBRyx1RkFBdUYsRUFDMUcsUUFBUSxHQUFHLGtHQUFrRyxFQUM3RyxjQUFjLEdBQUcsbVFBQW1RLEVBQ3BSLGFBQWEsR0FBRyxzVEFBc1QsQ0FBQztBQVd6VSx5QkFBeUI7QUFDekIsTUFBTSxPQUFPLGlCQUFrQixTQUFRLFNBQVM7SUFxQzlDLHlCQUF5QjtJQUN6QixZQUFvQixTQUF5QixFQUFVLFFBQXdCLEVBQVUsVUFBNEIsRUFDM0csU0FBNkIsRUFDN0IsV0FBdUMsRUFDL0MsR0FBZTtRQUNmLEtBQUss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QyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBQ0QsV0FBVztRQUNULEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDekMsQ0FBQzs7OEdBaG5CVSxpQkFBaUI7a0dBQWpCLGlCQUFpQixtTUFSbEIsRUFBRSwrQ0FFRyxDQUFDLDhCQUE4QixDQUFDOzJGQU1wQyxpQkFBaUI7a0JBVjdCLFNBQVM7K0JBQ0UsYUFBYSxZQUNiLEVBQUUsaUJBRUcsQ0FBQyw4QkFBOEIsQ0FBQyxRQUN6Qzt3QkFDSixHQUFHLEVBQUUsS0FBSztxQkFDWDtvUEFJUSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgU2ltcGxlQ2hhbmdlcywgT25DaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5vZGVNb2RlbCwgQ29ubmVjdG9yTW9kZWwsIExheW91dE1vZGVsLCBEaWFncmFtVG9vbHMsIERpYWdyYW0sIERpYWdyYW1Db25zdHJhaW50cywgQ29tcGxleEhpZXJhcmNoaWNhbFRyZWUsIENvbXBsZXhIaWVyYXJjaGljYWxUcmVlU2VydmljZSwgQ29ubmVjdG9yQnJpZGdpbmcsIEJwbW5EaWFncmFtcywgRGF0YUJpbmRpbmcsIFNjcm9sbFNldHRpbmdzTW9kZWwsIFNuYXBTZXR0aW5nc01vZGVsLCBTZWdtZW50cywgTGluZVJvdXRpbmcsIFRyZWVJbmZvLCBJTW91c2VFdmVudEFyZ3MsIExpbmVEaXN0cmlidXRpb24sIENvbm5lY3Rpb25Qb2ludE9yaWdpbiwgU25hcENvbnN0cmFpbnRzLCBMYXlvdXRBbmltYXRpb24sIE5vZGVDb25zdHJhaW50cywgRmxvd1NoYXBlTW9kZWwsIEJwbW5TaGFwZU1vZGVsIH0gZnJvbSAnQHN5bmNmdXNpb24vZWoyLWFuZ3VsYXItZGlhZ3JhbXMnO1xyXG5pbXBvcnQgeyBpbnRlcnZhbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XHJcbmltcG9ydCB7IERvY3VtZW50TW9kZWwsIFJlY2lwaWVudCwgTm9kZUluZm8sIEdlbmRlciwgRmxvd05vZGUsIFVzZXJJbmZvLCBTdGF0ZSwgQ29ubmVjdG9ySW5mbyB9IGZyb20gXCIuLi8uLi9jb3JlL21vZGVsc1wiO1xyXG5pbXBvcnQgeyBnZXRXYXJuIH0gZnJvbSAnLi4vLi4vY29yZS9mdW5jdGlvbnMnO1xyXG5pbXBvcnQgeyBUcmFjZUJhc2UsIFNUQVJUX05PREUgfSBmcm9tICcuL3RyYWNlLmJhc2UnO1xyXG5pbXBvcnQgeyBTZXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2Vzc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWNjb3VudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL2FjY291bnQuc2VydmljZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3RyYW5zbGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSHViU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvaHViLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEdXJhdGlvbkZvcm1hdFBpcGUgfSBmcm9tICcuLi8uLi9jb3JlL3BpcGVzL2R1cmF0aW9uLWZvcm1hdC5waXBlJztcclxuXHJcbkRpYWdyYW0uSW5qZWN0KENvbXBsZXhIaWVyYXJjaGljYWxUcmVlLCBCcG1uRGlhZ3JhbXMsIERhdGFCaW5kaW5nLyosIExheW91dEFuaW1hdGlvbiwgTGluZVJvdXRpbmcsIENvbm5lY3RvckJyaWRnaW5nKi8pO1xyXG5cclxuY29uc3QgUEVORElOR19QQVRIID0gJ00xOCwyMmwtMC4wMS02TDE0LDEybDMuOTktNC4wMUwxOCwySDZ2Nmw0LDRsLTQsMy45OVYyMkgxOHogTTgsNy41VjRoOHYzLjVsLTQsNEw4LDcuNXonLFxyXG4gIEZZSV9QQVRIID0gJ00xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0xIDE1aC0ydi02aDJ2NnptMC04aC0yVjdoMnYyeicsXHJcbiAgRVNDQUxBVEVEX1BBVEggPSAnTTIyIDUuNzJsLTQuNi0zLjg2LTEuMjkgMS41MyA0LjYgMy44NkwyMiA1Ljcyek03Ljg4IDMuMzlMNi42IDEuODYgMiA1LjcxbDEuMjkgMS41MyA0LjU5LTMuODV6TTEyLjUgOEgxMXY2bDQuNzUgMi44NS43NS0xLjIzLTQtMi4zN1Y4ek0xMiA0Yy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAyIDkgOSA5YzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0wIDE2Yy0zLjg3IDAtNy0zLjEzLTctN3MzLjEzLTcgNy03IDcgMy4xMyA3IDctMy4xMyA3LTcgN3onLFxyXG4gIFdBUk5OSU5HX1BBVEggPSAnTSAxMy43NjM3MzUsMS44NDMzNzM1IEggNi4zMDM3MzQ5IGwgLTUuMjcsNS4yNyB2IDcuNDU5OTk5NSBsIDUuMjcsNS4yNyBoIDcuNDYwMDAwMSBsIDUuMjcsLTUuMjcgViA3LjExMzM3MzUgWiBtIC0zLjczLDE0LjI5OTk5OTUgYyAtMC43MjAwMDAxLDAgLTEuMzAwMDAwMSwtMC41OCAtMS4zMDAwMDAxLC0xLjMgMCwtMC43MiAwLjU4LC0xLjMgMS4zMDAwMDAxLC0xLjMgMC43MiwwIDEuMywwLjU4IDEuMywxLjMgMCwwLjcyIC0wLjU4LDEuMyAtMS4zLDEuMyB6IG0gMSwtNC4zIEggOS4wMzM3MzQ5IFYgNS44NDMzNzM1IGggMi4wMDAwMDAxIHonO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdiaXpkb2MtZmxvdycsXHJcbiAgdGVtcGxhdGU6ICcnLFxyXG4gIHN0eWxlVXJsczogWycuL2Zsb3cuY29tcG9uZW50LnNjc3MnXSxcclxuICB2aWV3UHJvdmlkZXJzOiBbQ29tcGxleEhpZXJhcmNoaWNhbFRyZWVTZXJ2aWNlXSxcclxuICBob3N0OiB7XHJcbiAgICBkaXI6ICdsdHInXHJcbiAgfVxyXG59KVxyXG4vKiogZmxvdy12aWV3IGNvbXBvbmVudCovXHJcbmV4cG9ydCBjbGFzcyBGbG93Vmlld0NvbXBvbmVudCBleHRlbmRzIFRyYWNlQmFzZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSBtb2RlbDogRG9jdW1lbnRNb2RlbDxhbnk+O1xyXG4gIEBJbnB1dCgpIGNvbm5lY3RvclR5cGU6IFNlZ21lbnRzID0gJ09ydGhvZ29uYWwnO1xyXG4gIGRpYWdyYW06IERpYWdyYW07XHJcbiAgcmVhZG9ubHkgdG9vbDogRGlhZ3JhbVRvb2xzID0gRGlhZ3JhbVRvb2xzLlpvb21QYW47XHJcbiAgcmVhZG9ubHkgZGlhZ3JhbUNvbnN0cmFpbnRzOiBEaWFncmFtQ29uc3RyYWludHMgPVxyXG4gICAgRGlhZ3JhbUNvbnN0cmFpbnRzLkRlZmF1bHQgfFxyXG4gICAgRGlhZ3JhbUNvbnN0cmFpbnRzLlBhbiB8XHJcbiAgICBEaWFncmFtQ29uc3RyYWludHMuTGluZVJvdXRpbmcgfFxyXG4gICAgRGlhZ3JhbUNvbnN0cmFpbnRzLkJyaWRnaW5nO1xyXG4gIHB1YmxpYyByZWFkb25seSBsYXlvdXQgPSB7XHJcbiAgICB0eXBlOiAnQ29tcGxleEhpZXJhcmNoaWNhbFRyZWUnLFxyXG4gICAgY29ubmVjdGlvblBvaW50T3JpZ2luOiBDb25uZWN0aW9uUG9pbnRPcmlnaW4uRGlmZmVyZW50UG9pbnQsXHJcbiAgICBob3Jpem9udGFsU3BhY2luZzogNTAsXHJcbiAgICB2ZXJ0aWNhbFNwYWNpbmc6IDUwLFxyXG4gICAgdmVydGljYWxBbGlnbm1lbnQ6ICdUb3AnLFxyXG4gICAgY29ubmVjdGlvbkRpcmVjdGlvbjogJ09yaWVudGF0aW9uJyxcclxuICAgIG9yaWVudGF0aW9uOiB0aGlzLl9zZXNzaW9uLmludmVyc2UgPyAnUmlnaHRUb0xlZnQnIDogJ0xlZnRUb1JpZ2h0JyxcclxuICAgIG1hcmdpbjogeyBsZWZ0OiAxMCwgcmlnaHQ6IDEwLCB0b3A6IDEwLCBib3R0b206IDEwIH1cclxuICB9IGFzIExheW91dE1vZGVsO1xyXG5cclxuICByZWFkb25seSBzY3JvbGxTZXR0aW5ncyA9IHtcclxuICAgIG1pblpvb206IC41LFxyXG4gICAgY2FuQXV0b1Njcm9sbDogdHJ1ZSxcclxuICAgIGN1cnJlbnRab29tOiAxLjIsXHJcbiAgICBwYWRkaW5nOiB7IHRvcDogMCwgYm90dG9tOiAwIH0sXHJcbiAgICBhdXRvU2Nyb2xsQm9yZGVyOiB7IHRvcDogMCwgYm90dG9tOiAwIH0sXHJcbiAgICBtYXhab29tOiAyLjVcclxuICB9IGFzIFNjcm9sbFNldHRpbmdzTW9kZWw7XHJcblxyXG4gIHJlYWRvbmx5IHNuYXBTZXR0aW5ncyA9IHtcclxuICAgIGNvbnN0cmFpbnRzOiBTbmFwQ29uc3RyYWludHMuTm9uZSxcclxuICAgIGdyaWRUeXBlOiAnRG90cydcclxuICB9IGFzIFNuYXBTZXR0aW5nc01vZGVsO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbmZpZ3VyYXRpb246IHsgW25hbWU6IHN0cmluZ106IEZsb3dOb2RlIH0gPSB7fTtcclxuICBwcml2YXRlIF9pc3N1ZWQ6IERhdGU7XHJcbiAgcHJpdmF0ZSBfYWNjZW50Q29sb3IgPSB0aGlzLl9zZXNzaW9uLmdldEFjY2VudCgpO1xyXG4gIC8qKiB3b3JrZmxvdy12aWV3IGN0b3IgKi9cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9hY2NvdW50czogQWNjb3VudFNlcnZpY2UsIHByaXZhdGUgX3Nlc3Npb246IFNlc3Npb25TZXJ2aWNlLCBwcml2YXRlIF90cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kdXJhdGlvbjogRHVyYXRpb25Gb3JtYXRQaXBlLFxyXG4gICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4sXHJcbiAgICBodWI6IEh1YlNlcnZpY2UpIHtcclxuICAgIHN1cGVyKGh1Yik7XHJcbiAgICB0aGlzLl9zZXNzaW9uLnByb2ZpbGUubm9kZXMuZm9yRWFjaChuID0+XHJcbiAgICAgIHRoaXMuX2NvbmZpZ3VyYXRpb25bbi5uYW1lXSA9IG4pO1xyXG4gICAgX3Nlc3Npb24udGhlbWVDaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLlxyXG4gICAgICBzdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX2FjY2VudENvbG9yID0gdGhpcy5fc2Vzc2lvbi5nZXRBY2NlbnQoKTtcclxuICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIG5nT25DaGFuZ2VzKF9jaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICB0aGlzLl9pbml0aWFsaXplKCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgYXN5bmMgX2luaXRpYWxpemUoKSB7XHJcbiAgICBjb25zdCB7IGNvbm5lY3RvcnMsIG5vZGVzLCBpbmRpY2F0b3JzIH0gPSBhd2FpdCB0aGlzLl9wcmVwYXJlKCk7XHJcbiAgICB0aGlzLmRpYWdyYW0gJiYgdGhpcy5kaWFncmFtLmRlc3Ryb3koKTtcclxuICAgIHRoaXMuZGlhZ3JhbSA9IG5ldyBEaWFncmFtKHtcclxuICAgICAgd2lkdGg6ICcxMDAlJyxcclxuICAgICAgaGVpZ2h0OiAzODAsXHJcbiAgICAgIG5vZGVzLFxyXG4gICAgICBjb25uZWN0b3JzLFxyXG4gICAgICBsYXlvdXQ6IHRoaXMubGF5b3V0LFxyXG4gICAgICB0b29sOiB0aGlzLnRvb2wsXHJcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcclxuICAgICAgc2Nyb2xsU2V0dGluZ3M6IHRoaXMuc2Nyb2xsU2V0dGluZ3MsXHJcbiAgICAgIHNuYXBTZXR0aW5nczogdGhpcy5zbmFwU2V0dGluZ3MsXHJcbiAgICAgIGNvbnN0cmFpbnRzOiB0aGlzLmRpYWdyYW1Db25zdHJhaW50cyxcclxuICAgICAgZ2V0Q29ubmVjdG9yRGVmYXVsdHM6IHRoaXMuY29ubkRlZmF1bHRzLmJpbmQodGhpcyksXHJcbiAgICAgIGdldE5vZGVEZWZhdWx0czogdGhpcy5ub2RlRGVmYXVsdHMuYmluZCh0aGlzKSxcclxuICAgIH0sIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgICB0aGlzLmRpYWdyYW0uZG9MYXlvdXQoKTtcclxuICAgIGluZGljYXRvcnMuZm9yRWFjaCgobiwgaSkgPT4ge1xyXG4gICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmRpYWdyYW0uZ2V0Tm9kZU9iamVjdCgobi5hZGRJbmZvIGFzIE5vZGVJbmZvTW9kZWwpLnBhcmVudElkKTtcclxuICAgICAgbi5vZmZzZXRYID0gcGFyZW50Lm9mZnNldFggKyAodGhpcy5fc2Vzc2lvbi5pbnZlcnNlID8gLTI1IDogMjUpO1xyXG4gICAgICBuLm9mZnNldFkgPSBwYXJlbnQub2Zmc2V0WSArIDI1O1xyXG4gICAgICBuLnpJbmRleCA9IDEwMDAgKyBpO1xyXG4gICAgICB0aGlzLmRpYWdyYW0uYWRkKG4pO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmRpYWdyYW0uZml0VG9QYWdlKCk7XHJcbiAgICBpbnRlcnZhbCg2MDAwMCkucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZShcclxuICAgICAgdGhpcy5fcmVmcmVzaC5iaW5kKHRoaXMpXHJcbiAgICApO1xyXG4gIH1cclxuICBwcml2YXRlIF9yZWZyZXNoKCkge1xyXG4gICAgc3VwZXIucmVzZXRFc3RpbWF0ZVRpbWUoKTtcclxuICAgIHRoaXMuZGlhZ3JhbS5ub2Rlcy5mb3JFYWNoKG4gPT4ge1xyXG4gICAgICBjb25zdCB7IG5vZGUsIHJlY2lwaWVudCB9ID0gbi5hZGRJbmZvIGFzIE5vZGVJbmZvTW9kZWw7XHJcbiAgICAgIGlmIChyZWNpcGllbnQpIHtcclxuICAgICAgICBpZiAoIXJlY2lwaWVudC5yZXBsaWVkICYmIHJlY2lwaWVudC5wZW5kaW5nKSB7XHJcbiAgICAgICAgICBpZiAocmVjaXBpZW50LmVzdGltYXRlKSAobi5hZGRJbmZvIGFzIE5vZGVJbmZvTW9kZWwpLnRvb2x0aXAuZXN0aW1hdGVkVGltZSA9IHRoaXMuX3RpbWVFc3RpbWF0ZShub2RlKTtcclxuICAgICAgICAgIGVsc2UgaWYgKG5vZGUuc3RhbmRhcmRUaW1lKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBub2RlLnN0YW5kYXJkVGltZSAtIGRheWpzKCkuZGlmZihub2RlLnRpbWUsICdzJyk7XHJcbiAgICAgICAgICAgIGlmIChkaWZmID4gMClcclxuICAgICAgICAgICAgICAobi5hZGRJbmZvIGFzIE5vZGVJbmZvTW9kZWwpLnRvb2x0aXAuZXN0aW1hdGVkVGltZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0VzdGltYXRlVGltZScsIHRoaXMuX2R1cmF0aW9uLnRyYW5zZm9ybShkaWZmKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBuLnRvb2x0aXAuY29udGVudCA9IHRoaXMuX3Rvb2x0aXAoKG4uYWRkSW5mbyBhcyBOb2RlSW5mb01vZGVsKS50b29sdGlwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZVxyXG4gICAgICAgIGlmIChub2RlICYmIG5vZGUuZXN0aW1hdGUpXHJcbiAgICAgICAgICAobi5hZGRJbmZvIGFzIE5vZGVJbmZvTW9kZWwpLnRvb2x0aXAuZXN0aW1hdGVkVGltZSA9IHRoaXMuX3RpbWVFc3RpbWF0ZShub2RlKSxcclxuICAgICAgICAgICAgbi50b29sdGlwLmNvbnRlbnQgPSB0aGlzLl90b29sdGlwKChuLmFkZEluZm8gYXMgTm9kZUluZm9Nb2RlbCkudG9vbHRpcCk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHVibGljIHJlZnJlc2goKSB7XHJcbiAgICB0aGlzLm5nT25DaGFuZ2VzKG51bGwpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gb2JqXHJcbiAgICovXHJcbiAgcHVibGljIG5vZGVEZWZhdWx0cyhvYmo6IE5vZGVNb2RlbCk6IE5vZGVNb2RlbCB7XHJcbiAgICBjb25zdCB7IHJlY2lwaWVudCwgbm9kZSwgaW5kaWNhdG9yIH0gPSBvYmouYWRkSW5mbyBhcyBOb2RlSW5mb01vZGVsO1xyXG5cclxuICAgIGlmIChpbmRpY2F0b3IpIHtcclxuICAgICAgb2JqLndpZHRoID0gb2JqLmhlaWdodCA9IDE1O1xyXG4gICAgICBvYmouc3R5bGUuc3Ryb2tlV2lkdGggPSAwO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vIG9iai5zaGFwZSA9IHsgdHlwZTogJ0JwbW4nLCBzaGFwZTogJ0V2ZW50JyB9IGFzIEJwbW5TaGFwZU1vZGVsO1xyXG4gICAgICBvYmoud2lkdGggPSBvYmouaGVpZ2h0ID0gNTA7XHJcbiAgICAgIGlmIChvYmouYW5ub3RhdGlvbnMgJiYgb2JqLmFubm90YXRpb25zLmxlbmd0aCkgb2JqLmFubm90YXRpb25zWzBdLnN0eWxlLmNvbG9yID0gdGhpcy5fc2Vzc2lvbi50aGVtZS5kYXJrID8gJ3doaXRlJyA6ICdibGFjayc7XHJcbiAgICAgIGlmIChub2RlICYmIG5vZGUuZXN0aW1hdGUpIHtcclxuICAgICAgICBvYmouc3R5bGUuc3Ryb2tlQ29sb3IgPSB0aGlzLl9zZXNzaW9uLnRoZW1lLmRhcmsgPyAnd2hpdGUnIDogJ2JsYWNrJztcclxuICAgICAgICBvYmouc3R5bGUub3BhY2l0eSA9IG9iai5hbm5vdGF0aW9uc1swXS5zdHlsZS5vcGFjaXR5ID0gLjY7XHJcbiAgICAgICAgb2JqLnN0eWxlLmZpbGwgPSAndHJhbnNwYXJlbnQnO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIG9iai5zdHlsZS5zdHJva2VDb2xvciA9IHRoaXMuX2FjY2VudENvbG9yO1xyXG4gICAgICAgIG9iai5zdHlsZS5maWxsID0gcmVjaXBpZW50ICYmIHJlY2lwaWVudC5wZW5kaW5nID8gdGhpcy5fc2Vzc2lvbi5nZXRBY2NlbnQoNDAwKSA6ICd0cmFuc3BhcmVudCc7XHJcbiAgICAgIH1cclxuICAgICAgb2JqLnN0eWxlLnN0cm9rZVdpZHRoID0gMjtcclxuICAgIH1cclxuICAgIHJldHVybiBvYmo7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBjb25uZWN0b3JcclxuICAgKi9cclxuICBwdWJsaWMgY29ubkRlZmF1bHRzKGNvbm5lY3RvcjogQ29ubmVjdG9yTW9kZWwpIHtcclxuICAgIGNvbm5lY3Rvci50eXBlID0gdGhpcy5jb25uZWN0b3JUeXBlO1xyXG4gICAgY29ubmVjdG9yLmNvcm5lclJhZGl1cyA9IDY7XHJcbiAgICBjb25uZWN0b3IudGFyZ2V0RGVjb3JhdG9yLmhlaWdodCA9IDc7XHJcbiAgICBjb25uZWN0b3IudGFyZ2V0RGVjb3JhdG9yLndpZHRoID0gNztcclxuICAgIGlmICgoY29ubmVjdG9yLmFkZEluZm8gYXMgQ29ubmVjdG9ySW5mb01vZGVsKS5lc3RpbWF0ZSkge1xyXG4gICAgICBjb25uZWN0b3Iuc3R5bGUuc3Ryb2tlRGFzaEFycmF5ID0gJzIgMic7XHJcbiAgICAgIGNvbm5lY3Rvci5zdHlsZS5zdHJva2VDb2xvciA9XHJcbiAgICAgICAgY29ubmVjdG9yLnRhcmdldERlY29yYXRvci5zdHlsZS5maWxsID1cclxuICAgICAgICBjb25uZWN0b3IudGFyZ2V0RGVjb3JhdG9yLnN0eWxlLnN0cm9rZUNvbG9yID1cclxuICAgICAgICB0aGlzLl9zZXNzaW9uLnRoZW1lLmRhcmsgPyAnd2hpdGUnIDogJ2JsYWNrJztcclxuICAgICAgY29ubmVjdG9yLnN0eWxlLnN0cm9rZVdpZHRoID0gMTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBjb25uZWN0b3Iuc3R5bGUuc3Ryb2tlQ29sb3IgPSBjb25uZWN0b3IudGFyZ2V0RGVjb3JhdG9yLnN0eWxlLnN0cm9rZUNvbG9yID0gY29ubmVjdG9yLnRhcmdldERlY29yYXRvci5zdHlsZS5maWxsID0gdGhpcy5fYWNjZW50Q29sb3I7XHJcbiAgICAgIGNvbm5lY3Rvci5zdHlsZS5zdHJva2VXaWR0aCA9IDI7XHJcbiAgICB9XHJcbiAgICBjb25uZWN0b3IudGFyZ2V0RGVjb3JhdG9yLnNoYXBlID0gJ05vbmUnO1xyXG4gIH1cclxuICAvKiogKi9cclxuICBwcml2YXRlIGFzeW5jIF9wcmVwYXJlKCk6IFByb21pc2U8eyBub2RlczogTm9kZU1vZGVsW107IGNvbm5lY3RvcnM6IENvbm5lY3Rvck1vZGVsW107IGluZGljYXRvcnM6IE5vZGVNb2RlbFtdIH0+IHtcclxuICAgIGNvbnN0IHsgY29ubmVjdG9yczogZGNvbm5lY3RvcnMsIG5vZGVzOiBkbm9kZXMgfSA9IHRoaXMubW9kZWwud29ya2Zsb3c7XHJcbiAgICBjb25zdCBpbmRpY2F0b3JzOiBOb2RlTW9kZWxbXSA9IFtdLCBjb25uZWN0b3JzOiBDb25uZWN0b3JNb2RlbFtdID0gZGNvbm5lY3RvcnMubWFwKGMgPT4gKFxyXG4gICAgICB7XHJcbiAgICAgICAgc291cmNlSUQ6IGMuc291cmNlSWQsXHJcbiAgICAgICAgdGFyZ2V0SUQ6IGMudGFyZ2V0SWQsXHJcbiAgICAgICAgYWRkSW5mbzoge1xyXG4gICAgICAgICAgZXN0aW1hdGU6IGMuZXN0aW1hdGUsXHJcbiAgICAgICAgICB0aW1lOiBjLnRpbWVcclxuICAgICAgICB9IGFzIENvbm5lY3RvckluZm9Nb2RlbFxyXG4gICAgICB9IGFzIENvbm5lY3Rvck1vZGVsXHJcbiAgICApKSwgbm9kZXM6IE5vZGVNb2RlbFtdID0gW107XHJcbiAgICB0aGlzLl9pc3N1ZWQgPSB0aGlzLm1vZGVsLmlzc3VlZCB8fCB0aGlzLm1vZGVsLmxvZy5maWx0ZXIobCA9PiBsLnR5cGUgPT09ICdTdWJtaXQnKVswXS50aW1lO1xyXG4gICAgbGV0IHpJbmRleCA9IDUwMCwgaSA9IDA7XHJcbiAgICBmb3IgKGxldCBub2RlIG9mIGRub2Rlcykge1xyXG4gICAgICBpZiAobm9kZXMuZmluZChuID0+IG4uaWQgPT0gbm9kZS5pZCkpIGNvbnRpbnVlO1xyXG4gICAgICBsZXQgY29uZmlndXJhdGlvbiA9IHRoaXMuX2NvbmZpZ3VyYXRpb25bbm9kZS50eXBlXTtcclxuICAgICAgbGV0IHJlY2lwaWVudHMgPSB0aGlzLm1vZGVsLnJlY2lwaWVudHMuXHJcbiAgICAgICAgZmlsdGVyKHIgPT4gci5ub2RlSWQgPT09IG5vZGUuaWQgJiZcclxuICAgICAgICAgIHIucmVjZWl2ZWQgPj0gdGhpcy5faXNzdWVkKVxyXG4gICAgICAgIC5zb3J0KChyMCwgcjEpID0+XHJcbiAgICAgICAgICByMC5yZWNlaXZlZCA+IHIxLnJlY2VpdmVkID8gMSA6IC0xKTtcclxuICAgICAgaWYgKHJlY2lwaWVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgbGV0IHIgPSAwO1xyXG4gICAgICAgIGRvIHtcclxuICAgICAgICAgIHZhciByZWNpcGllbnQgPSByZWNpcGllbnRzW3JdO1xyXG4gICAgICAgICAgbGV0IGV4aXN0cyA9IGZhbHNlO1xyXG4gICAgICAgICAgLy8gcmVtb3ZlIGR1cGxpY2F0ZSB1c2VyIHJlY2lwaWVudCBvbiBzYW1lIG5vZGVcclxuICAgICAgICAgIGxldCBqID0gMDtcclxuICAgICAgICAgIHdoaWxlIChqIDwgciAmJiAhZXhpc3RzKSB7XHJcbiAgICAgICAgICAgIGlmIChyZWNpcGllbnRzW2pdLnVzZXJJZCA9PT0gcmVjaXBpZW50LnVzZXJJZCkgZXhpc3RzID0gdHJ1ZTtcclxuICAgICAgICAgICAgZWxzZSBqKys7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZXhpc3RzKVxyXG4gICAgICAgICAgICByZWNpcGllbnRzLnNwbGljZShyZWNpcGllbnQuZXN0aW1hdGUgPyByIDogaiwgMSk7XHJcbiAgICAgICAgICBlbHNlIHIrKztcclxuICAgICAgICB9IHdoaWxlIChyIDwgcmVjaXBpZW50cy5sZW5ndGgpO1xyXG5cclxuICAgICAgICBmb3IgKHIgPSAwOyByIDwgcmVjaXBpZW50cy5sZW5ndGg7IHIrKykge1xyXG4gICAgICAgICAgbGV0IHJlY2lwaWVudCA9IHJlY2lwaWVudHNbcl07XHJcbiAgICAgICAgICBjb25zdCB7IGFubm90YXRpb24sIHRvb2x0aXAgfSA9IGF3YWl0IHRoaXMuX25vdGUobm9kZSwgcmVjaXBpZW50KTtcclxuICAgICAgICAgIGNvbnN0IG5vZCA9IHtcclxuICAgICAgICAgICAgaWQ6IHIgPT09IDAgPyBub2RlLmlkIDogbm9kZS5pZCArIHIudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgc2hhcGU6IHRoaXMuX2NvbmZpZ3VyYXRpb25bbm9kZS50eXBlXS5zaGFwZSxcclxuICAgICAgICAgICAgekluZGV4OiB6SW5kZXgrKyxcclxuICAgICAgICAgICAgdG9vbHRpcDoge1xyXG4gICAgICAgICAgICAgIGNvbnRlbnQ6IHRoaXMuX3Rvb2x0aXAodG9vbHRpcCksXHJcbiAgICAgICAgICAgICAgcG9zaXRpb246ICdUb3BDZW50ZXInXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzOiBOb2RlQ29uc3RyYWludHMuRGVmYXVsdCB8IE5vZGVDb25zdHJhaW50cy5Ub29sdGlwLFxyXG4gICAgICAgICAgICBhZGRJbmZvOiB7XHJcbiAgICAgICAgICAgICAgdG9vbHRpcCxcclxuICAgICAgICAgICAgICByZWNpcGllbnQsXHJcbiAgICAgICAgICAgICAgbm9kZVxyXG4gICAgICAgICAgICB9IGFzIE5vZGVJbmZvTW9kZWwsXHJcbiAgICAgICAgICAgIGFubm90YXRpb25zOiBbe1xyXG4gICAgICAgICAgICAgIGNvbnRlbnQ6IGFubm90YXRpb24sXHJcbiAgICAgICAgICAgICAgbWFyZ2luOiB7IHRvcDogNCB9LFxyXG4gICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ25tZW50OiAnVG9wJyxcclxuICAgICAgICAgICAgICBvZmZzZXQ6IHtcclxuICAgICAgICAgICAgICAgIHk6IDEsXHJcbiAgICAgICAgICAgICAgICB4OiAuNVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfV1cclxuICAgICAgICAgIH0gYXMgTm9kZU1vZGVsO1xyXG4gICAgICAgICAgaWYgKHIgPiAwKSB7XHJcbiAgICAgICAgICAgIGRjb25uZWN0b3JzLmZvckVhY2goYyA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGMudGFyZ2V0SWQgPT09IG5vZGUuaWQpXHJcbiAgICAgICAgICAgICAgICBjb25uZWN0b3JzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICBzb3VyY2VJRDogYy5zb3VyY2VJZCxcclxuICAgICAgICAgICAgICAgICAgdGFyZ2V0SUQ6IG5vZC5pZCxcclxuICAgICAgICAgICAgICAgICAgYWRkSW5mbzoge1xyXG4gICAgICAgICAgICAgICAgICAgIGVzdGltYXRlOiBjLmVzdGltYXRlXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIGlmIChjLnNvdXJjZUlkID09PSBub2RlLmlkKVxyXG4gICAgICAgICAgICAgICAgY29ubmVjdG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgc291cmNlSUQ6IG5vZC5pZCxcclxuICAgICAgICAgICAgICAgICAgdGFyZ2V0SUQ6IGMudGFyZ2V0SWQsXHJcbiAgICAgICAgICAgICAgICAgIGFkZEluZm86IHtcclxuICAgICAgICAgICAgICAgICAgICBlc3RpbWF0ZTogYy5lc3RpbWF0ZVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBub2Rlcy5wdXNoKG5vZCk7XHJcbiAgICAgICAgICBpZiAocmVjaXBpZW50LmFjdGlvbikge1xyXG4gICAgICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuYWN0aW9ucy5maW5kKGEgPT4gYS5uYW1lID09PSByZWNpcGllbnQuYWN0aW9uKTtcclxuICAgICAgICAgICAgaWYgKGFjdGlvbiAmJiBhY3Rpb24uc2hhcGUpIHtcclxuICAgICAgICAgICAgICBjb25zdCBhY3Rpb25JbmRpY2F0b3IgPSB7XHJcbiAgICAgICAgICAgICAgICBpZDogbm9kLmlkICsgJ2FjdGlvbicsXHJcbiAgICAgICAgICAgICAgICBzaGFwZToge1xyXG4gICAgICAgICAgICAgICAgICB0eXBlOiAnUGF0aCcsXHJcbiAgICAgICAgICAgICAgICAgIGRhdGE6IGFjdGlvbi5zaGFwZSxcclxuICAgICAgICAgICAgICAgICAgYWxpZ246IHRoaXMuX3Nlc3Npb24uaW52ZXJzZSA/ICdYTWluWU1heCcgOiAnWE1heFlNYXgnLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgIGZpbGw6IGFjdGlvbi5jb2xvciB8fCB0aGlzLl9zZXNzaW9uLmdldEFjY2VudCg5MDApXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgYWRkSW5mbzoge1xyXG4gICAgICAgICAgICAgICAgICBpbmRpY2F0b3I6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgIHBhcmVudElkOiBub2QuaWRcclxuICAgICAgICAgICAgICAgIH0gYXMgTm9kZUluZm9Nb2RlbFxyXG4gICAgICAgICAgICAgIH0gYXMgTm9kZU1vZGVsO1xyXG4gICAgICAgICAgICAgIGluZGljYXRvcnMucHVzaChhY3Rpb25JbmRpY2F0b3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAocmVjaXBpZW50LnBlbmRpbmcgJiYgIXJlY2lwaWVudC5lc3RpbWF0ZSlcclxuICAgICAgICAgICAgaW5kaWNhdG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgICBpZDogbm9kLmlkICsgJ3BlbmRpbmcnLFxyXG4gICAgICAgICAgICAgIHNoYXBlOiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnUGF0aCcsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiBQRU5ESU5HX1BBVEgsXHJcbiAgICAgICAgICAgICAgICBhbGlnbjogdGhpcy5fc2Vzc2lvbi5pbnZlcnNlID8gJ1hNYXhZTWF4JyA6ICdYTWluWU1heCdcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICBmaWxsOiB0aGlzLl9zZXNzaW9uLmdldEFjY2VudCg5MDApXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBhZGRJbmZvOiB7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2F0b3I6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBwYXJlbnRJZDogbm9kLmlkXHJcbiAgICAgICAgICAgICAgfSBhcyBOb2RlSW5mb01vZGVsXHJcbiAgICAgICAgICAgIH0gYXMgTm9kZU1vZGVsKTtcclxuICAgICAgICAgIGlmIChub2RlLmZ5aSlcclxuICAgICAgICAgICAgaW5kaWNhdG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgICBpZDogbm9kLmlkICsgJ2Z5aScsXHJcbiAgICAgICAgICAgICAgc2hhcGU6IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdQYXRoJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IEZZSV9QQVRILFxyXG4gICAgICAgICAgICAgICAgYWxpZ246IHRoaXMuX3Nlc3Npb24uaW52ZXJzZSA/ICdYTWluWU1heCcgOiAnWE1heFlNYXgnXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgZmlsbDogJyMxOTc2ZDInXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBhZGRJbmZvOiB7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2F0b3I6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBwYXJlbnRJZDogbm9kLmlkXHJcbiAgICAgICAgICAgICAgfSBhcyBOb2RlSW5mb01vZGVsXHJcbiAgICAgICAgICAgIH0gYXMgTm9kZU1vZGVsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAvLyAgaWYgKHRoaXMubW9kZWwubG9nLmZpbHRlcihsID0+IGwudGltZSA+IHRoaXMuX3N1Ym1pdHRlZCAmJiBsLnR5cGUgPT09ICdFc2NhbGF0aW9uJyAmJiBsLnJlY2lwaWVudElkID09PSByZWNpcGllbnQuaWQpLmxlbmd0aCkge1xyXG4gICAgICAgICAgLy8gICAgY29uc3QgZXNjYWxhdGVJbmRpY2F0b3IgPSB7XHJcbiAgICAgICAgICAvLyAgICAgIGlkOiBub2QuaWQgKyAnZXNjYWxhdGUnLFxyXG4gICAgICAgICAgLy8gICAgICBzaGFwZToge1xyXG4gICAgICAgICAgLy8gICAgICAgIHR5cGU6ICdQYXRoJyxcclxuICAgICAgICAgIC8vICAgICAgICBkYXRhOiBFU0NBTEFURURfUEFUSCxcclxuICAgICAgICAgIC8vICAgICAgICBhbGlnbjogdGhpcy5fc2Vzc2lvbi5pbnZlcnNlID8gJ1hNaW5ZTWF4JyA6ICdYTWF4WU1heCdcclxuICAgICAgICAgIC8vICAgICAgfSxcclxuICAgICAgICAgIC8vICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgIC8vICAgICAgICBmaWxsOiB0aGlzLl9zZXNzaW9uLmdldEFjY2VudCg5MDApXHJcbiAgICAgICAgICAvLyAgICAgIH0sXHJcbiAgICAgICAgICAvLyAgICAgIGFkZEluZm86IHtcclxuICAgICAgICAgIC8vICAgICAgICBpbmRpY2F0b3I6IHRydWUsXHJcbiAgICAgICAgICAvLyAgICAgICAgcGFyZW50SWQ6IG5vZC5pZFxyXG4gICAgICAgICAgLy8gICAgICB9IGFzIE5vZGVJbmZvTW9kZWxcclxuICAgICAgICAgIC8vICAgIH0gYXMgTm9kZU1vZGVsO1xyXG4gICAgICAgICAgLy8gICAgaW5kaWNhdG9ycy5wdXNoKGVzY2FsYXRlSW5kaWNhdG9yKTtcclxuICAgICAgICAgIC8vICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHsgc3RhdGUsIGFubm90YXRpb24sIHRvb2x0aXAgfSA9IGF3YWl0IHRoaXMuX3NoYXBlKG5vZGUpO1xyXG4gICAgICAgIGNvbnN0IHsgc2hhcGUgfSA9IGNvbmZpZ3VyYXRpb247XHJcbiAgICAgICAgbm9kZXMucHVzaCh7XHJcbiAgICAgICAgICBpZDogbm9kZS5pZCxcclxuICAgICAgICAgIHNoYXBlLFxyXG4gICAgICAgICAgekluZGV4OiB6SW5kZXgrKyxcclxuICAgICAgICAgIHRvb2x0aXA6IHtcclxuICAgICAgICAgICAgY29udGVudDogdGhpcy5fdG9vbHRpcCh0b29sdGlwKSxcclxuICAgICAgICAgICAgcG9zaXRpb246ICdUb3BDZW50ZXInXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgY29uc3RyYWludHM6IE9iamVjdC5rZXlzKHRvb2x0aXApLmxlbmd0aCA/IE5vZGVDb25zdHJhaW50cy5EZWZhdWx0IHwgTm9kZUNvbnN0cmFpbnRzLlRvb2x0aXAgOiBOb2RlQ29uc3RyYWludHMuRGVmYXVsdCxcclxuICAgICAgICAgIGFkZEluZm86IHtcclxuICAgICAgICAgICAgdG9vbHRpcCxcclxuICAgICAgICAgICAgbm9kZVxyXG4gICAgICAgICAgfSBhcyBOb2RlSW5mb01vZGVsLFxyXG4gICAgICAgICAgYW5ub3RhdGlvbnM6IFt7XHJcbiAgICAgICAgICAgIGNvbnRlbnQ6IGFubm90YXRpb24sXHJcbiAgICAgICAgICAgIG9mZnNldDogc2hhcGUudHlwZSA9PT0gJ1BhdGgnID8ge1xyXG4gICAgICAgICAgICAgIHk6IDFcclxuICAgICAgICAgICAgfSA6IHsgeDogLjUgfSxcclxuICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAvL2JvbGQ6IHRydWVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdmVydGljYWxBbGlnbm1lbnQ6IHNoYXBlLnR5cGUgPT09ICdQYXRoJyA/ICdUb3AnIDogJ0NlbnRlcidcclxuICAgICAgICAgIH1dXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLnNoYXBlICYmICFub2RlLmVzdGltYXRlKVxyXG4gICAgICAgICAgaW5kaWNhdG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgaWQ6IG5vZGUuaWQgKyAnc3RhdGUnLFxyXG4gICAgICAgICAgICBzaGFwZToge1xyXG4gICAgICAgICAgICAgIHR5cGU6ICdQYXRoJyxcclxuICAgICAgICAgICAgICBkYXRhOiBzdGF0ZS5zaGFwZSxcclxuICAgICAgICAgICAgICBhbGlnbjogdGhpcy5fc2Vzc2lvbi5pbnZlcnNlID8gJ1hNYXhZTWF4JyA6ICdYTWluWU1heCdcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICBmaWxsOiBzdGF0ZS5jb2xvciB8fCAnYmxhY2snXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGFkZEluZm86IHtcclxuICAgICAgICAgICAgICBpbmRpY2F0b3I6IHRydWUsXHJcbiAgICAgICAgICAgICAgcGFyZW50SWQ6IG5vZGUuaWQsXHJcbiAgICAgICAgICAgICAgbm9kZTogbm9kZVxyXG4gICAgICAgICAgICB9IGFzIE5vZGVJbmZvTW9kZWxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChub2RlLmVycm9yKSB7XHJcbiAgICAgICAgICBjb25zdCB3YXJubmluZ0luZGljYXRvciA9IHtcclxuICAgICAgICAgICAgaWQ6IG5vZGUuaWQgKyAnZXhjZXB0aW9uJyxcclxuICAgICAgICAgICAgc2hhcGU6IHtcclxuICAgICAgICAgICAgICB0eXBlOiAnUGF0aCcsXHJcbiAgICAgICAgICAgICAgZGF0YTogV0FSTk5JTkdfUEFUSCxcclxuICAgICAgICAgICAgICBhbGlnbjogdGhpcy5fc2Vzc2lvbi5pbnZlcnNlID8gJ1hNaW5ZTWF4JyA6ICdYTWF4WU1heCdcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICBmaWxsOiBnZXRXYXJuKDgwMClcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYWRkSW5mbzoge1xyXG4gICAgICAgICAgICAgIGluZGljYXRvcjogdHJ1ZSxcclxuICAgICAgICAgICAgICBwYXJlbnRJZDogbm9kZS5pZFxyXG4gICAgICAgICAgICB9IGFzIE5vZGVJbmZvTW9kZWxcclxuICAgICAgICAgIH0gYXMgTm9kZU1vZGVsO1xyXG4gICAgICAgICAgaW5kaWNhdG9ycy5wdXNoKHdhcm5uaW5nSW5kaWNhdG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gY29ubmVjdG9yXHJcbiAgICAgKiBAcGFyYW0gaW5kZXhcclxuICAgICAqIEBwYXJhbSB2Y29ubmVjdG9yc1xyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiByZXJvdXRlKGNvbm5lY3RvcjogQ29ubmVjdG9ySW5mbywgaW5kZXg6IG51bWJlcikge1xyXG4gICAgICB3aGlsZSAoaW5kZXggPCBkY29ubmVjdG9ycy5sZW5ndGgpIHtcclxuICAgICAgICBsZXQgZGNvbm5lY3RvciA9IGRjb25uZWN0b3JzW2luZGV4XTtcclxuICAgICAgICBpZiAoZGNvbm5lY3Rvci5zb3VyY2VJZCA9PT0gY29ubmVjdG9yLnRhcmdldElkKSB7XHJcbiAgICAgICAgICBpZiAobm9kZXMuc29tZShuID0+IG4uaWQgPT09IGRjb25uZWN0b3IudGFyZ2V0SWQpKVxyXG4gICAgICAgICAgICBjb25uZWN0b3JzLnB1c2goe1xyXG4gICAgICAgICAgICAgIHNvdXJjZUlEOiBjb25uZWN0b3Iuc291cmNlSWQsXHJcbiAgICAgICAgICAgICAgdGFyZ2V0SUQ6IGRjb25uZWN0b3IudGFyZ2V0SWQsXHJcbiAgICAgICAgICAgICAgYWRkSW5mbzoge1xyXG4gICAgICAgICAgICAgICAgZXN0aW1hdGU6IGRjb25uZWN0b3IuZXN0aW1hdGUsXHJcbiAgICAgICAgICAgICAgICB0aW1lOiBkY29ubmVjdG9yLnRpbWVcclxuICAgICAgICAgICAgICB9IGFzIENvbm5lY3RvckluZm9Nb2RlbFxyXG4gICAgICAgICAgICB9IGFzIENvbm5lY3Rvck1vZGVsKTtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgcmVyb3V0ZSh7XHJcbiAgICAgICAgICAgICAgdGltZTogZGNvbm5lY3Rvci50aW1lLFxyXG4gICAgICAgICAgICAgIHRhcmdldElkOiBkY29ubmVjdG9yLnRhcmdldElkLFxyXG4gICAgICAgICAgICAgIGVzdGltYXRlOiBkY29ubmVjdG9yLmVzdGltYXRlLFxyXG4gICAgICAgICAgICAgIHNvdXJjZUlkOiBjb25uZWN0b3Iuc291cmNlSWRcclxuICAgICAgICAgICAgfSwgaW5kZXggKyAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaW5kZXgrKztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgY29ubmVjdG9ycywgbm9kZXMsIGluZGljYXRvcnMgfTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIG5vZGVcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIF9zaGFwZShub2RlOiBOb2RlSW5mbyk6IFByb21pc2U8eyBzdGF0ZTogU3RhdGU7IGFubm90YXRpb246IHN0cmluZzsgdG9vbHRpcDogTm9kZVRvb2x0aXBNb2RlbDsgfT4ge1xyXG4gICAgY29uc3QgdG9vbHRpcCA9IHt9IGFzIE5vZGVUb29sdGlwTW9kZWw7XHJcbiAgICBpZiAobm9kZS5lcnJvcikgdG9vbHRpcC5lcnJvciA9IG5vZGUuZXJyb3I7XHJcbiAgICBsZXQgYW5ub3RhdGlvbjogc3RyaW5nLCBzdGF0ZTogU3RhdGU7XHJcbiAgICBjb25zdCBsb2cgPSB0aGlzLm1vZGVsLmxvZy5maWx0ZXIobCA9PiBsLm5vZGVJZCA9PT0gbm9kZS5pZCAmJiBsLnRpbWUgPj0gdGhpcy5faXNzdWVkKTtcclxuICAgIGNvbnN0IHN0YXRlTG9nID0gbG9nLmZpbmQobCA9PiBsLnR5cGUgPT09ICdTdGF0ZUNoYW5nZScpO1xyXG4gICAgaWYgKHN0YXRlTG9nKSB7XHJcbiAgICAgIHN0YXRlID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLnN0YXRlcy5maW5kKHMgPT4gcy5uYW1lID09PSBzdGF0ZUxvZy5zdGF0ZSk7XHJcblxyXG4gICAgICBhbm5vdGF0aW9uID0gc3RhdGUgPyAoKG5vZGUuZXN0aW1hdGUgPyBzdGF0ZS5mdXR1cmUgOiBzdGF0ZS5wYXN0KSB8fCBzdGF0ZS50aXRsZSkgOiBzdGF0ZUxvZy5zdGF0ZTtcclxuICAgIH1cclxuICAgIGlmIChub2RlLnR5cGUgPT09IFNUQVJUX05PREUpIHtcclxuICAgICAgaWYgKCFub2RlLmVzdGltYXRlKSB7XHJcbiAgICAgICAgY29uc3QgeyBub3RlLCByb2xlIH0gPSBhd2FpdCB0aGlzLl9zdGFydE5vZGUoKTtcclxuICAgICAgICB0b29sdGlwLm5vdGUgPSBub3RlLFxyXG4gICAgICAgICAgdG9vbHRpcC5yb2xlID0gcm9sZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAobm9kZS5lc3RpbWF0ZSlcclxuICAgICAgdG9vbHRpcC5lc3RpbWF0ZWRUaW1lID0gdGhpcy5fdGltZUVzdGltYXRlKG5vZGUpO1xyXG4gICAgcmV0dXJuIHsgc3RhdGUsIHRvb2x0aXAsIGFubm90YXRpb24gfTtcclxuICB9XHJcbiAgcmVzaXplKCkge1xyXG4gICAgaWYgKHRoaXMuZGlhZ3JhbSkgdGhpcy5kaWFncmFtLndpZHRoID0gJ2F1dG8nO1xyXG4gIH1cclxuICBwcml2YXRlIF90aW1lRXN0aW1hdGUobm9kZTogTm9kZUluZm8pOiBzdHJpbmcge1xyXG4gICAgY29uc3QgeyBtaW4sIG1heCB9ID0gc3VwZXIuX2VzdGltYXRlVGltZShub2RlKTtcclxuICAgIGlmIChtYXgpXHJcbiAgICAgIHJldHVybiAhbWluIHx8IG1pbiA9PT0gbWF4ID9cclxuICAgICAgICB0aGlzLl90cmFuc2xhdGUuZ2V0KCdFc3RpbWF0ZVRpbWUnLCB0aGlzLl9kdXJhdGlvbi50cmFuc2Zvcm0obWF4KSkgOlxyXG4gICAgICAgIHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0VzdGltYXRlVGltZVJhbmdlJywgdGhpcy5fZHVyYXRpb24udHJhbnNmb3JtKG1pbiksIHRoaXMuX2R1cmF0aW9uLnRyYW5zZm9ybShtYXgpKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfdG9vbHRpcChvYmo6IE5vZGVUb29sdGlwTW9kZWwpIHtcclxuICAgIGNvbnN0IHsgbm90ZSwgcm9sZSwgc3Vic3RpdHV0aW5nLCBkdXJhdGlvbiwgc3RhbmRhcmRUaW1lLCBlc3RpbWF0ZWRUaW1lLCBlcnJvciwgZnlpIH0gPSBvYmpcclxuICAgIGNvbnN0IHJvd3MgPSBbZXJyb3IsIG5vdGUsIHJvbGUsIHN1YnN0aXR1dGluZywgZnlpLCBkdXJhdGlvbiwgc3RhbmRhcmRUaW1lLCBlc3RpbWF0ZWRUaW1lXTtcclxuICAgIGxldCBkaXY6IEhUTUxEaXZFbGVtZW50O1xyXG4gICAgcm93cy5mb3JFYWNoKHIgPT4ge1xyXG4gICAgICBpZiAoIXIpIHJldHVybjtcclxuICAgICAgaWYgKCFkaXYpIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG4gICAgICBzcGFuLmlubmVyVGV4dCA9IHI7XHJcbiAgICAgIGRpdi5hcHBlbmQoc3Bhbik7XHJcbiAgICAgIGNvbnN0IGJyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnInKTtcclxuICAgICAgZGl2LmFwcGVuZChicik7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBkaXY7XHJcbiAgfVxyXG4gIHByaXZhdGUgYXN5bmMgX3N0YXJ0Tm9kZSgpOiBQcm9taXNlPHtcclxuICAgIG5vdGU6IHN0cmluZywgcm9sZTogc3RyaW5nO1xyXG4gIH0+IHtcclxuICAgIGxldCB3aG86IFVzZXJJbmZvIHwgJ3lvdScsIGJ5OiBVc2VySW5mbyB8ICd5b3UnO1xyXG4gICAgaWYgKHRoaXMubW9kZWwub3duZXJJZCA9PT0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLnVzZXJJZCAmJiAhdGhpcy5fc2Vzc2lvbi5pc0ltcGVyc29uYXRpbmcpXHJcbiAgICAgIHdobyA9ICd5b3UnO1xyXG4gICAgZWxzZVxyXG4gICAgICB3aG8gPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQodGhpcy5tb2RlbC5vd25lcklkKS50b1Byb21pc2UoKTtcclxuICAgIGlmICh0aGlzLm1vZGVsLm93bmVyQnlJZCkge1xyXG4gICAgICBpZiAodGhpcy5tb2RlbC5vd25lckJ5SWQgPT09IHRoaXMuX3Nlc3Npb24udXNlcklkKVxyXG4gICAgICAgIGJ5ID0gJ3lvdSc7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBieSA9IGF3YWl0IHRoaXMuX2FjY291bnRzLmdldCh0aGlzLm1vZGVsLm93bmVyQnlJZCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcbiAgICBsZXQgbm90ZTogc3RyaW5nLCByb2xlOiBzdHJpbmc7XHJcbiAgICBpZiAoYnkpIHtcclxuICAgICAgaWYgKGJ5ID09PSAneW91JylcclxuICAgICAgICBub3RlID1cclxuICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1N1Ym1pdHRlZE5vdGVCeVlvdScsXHJcbiAgICAgICAgICAgIHdobyA9PT0gJ3lvdScgPyB0aGlzLl90cmFuc2xhdGUuZ2V0KCdZb3UnKSA6ICh3aG8gYXMgVXNlckluZm8pLm5hbWUsXHJcbiAgICAgICAgICAgIHRoaXMuX2Zyb21Ob3codGhpcy5tb2RlbC5pc3N1ZWQpKTtcclxuXHJcbiAgICAgIGVsc2VcclxuICAgICAgICBub3RlID1cclxuICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1N1Ym1pdHRlZE5vdGVCeScsXHJcbiAgICAgICAgICAgIHdobyA9PT0gJ3lvdScgPyB0aGlzLl90cmFuc2xhdGUuZ2V0KCdZb3UnKSA6ICh3aG8gYXMgVXNlckluZm8pLm5hbWUsXHJcbiAgICAgICAgICAgIChieSBhcyBVc2VySW5mbykubmFtZSxcclxuICAgICAgICAgICAgdGhpcy5fZnJvbU5vdyh0aGlzLm1vZGVsLmlzc3VlZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKHdobyA9PT0gJ3lvdScpXHJcbiAgICAgIG5vdGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdZb3VTdWJtaXR0ZWROb3RlJywgdGhpcy5fZnJvbU5vdyh0aGlzLm1vZGVsLmlzc3VlZCkpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgbm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1N1Ym1pdHRlZE5vdGUnLCAod2hvIGFzIFVzZXJJbmZvKS5uYW1lLCB0aGlzLl9mcm9tTm93KHRoaXMubW9kZWwuaXNzdWVkKSk7XHJcbiAgICBpZiAod2hvICE9PSAneW91JyAmJiB3aG8ucm9sZSlcclxuICAgICAgcm9sZSA9IGAtICR7d2hvLnJvbGV9YDtcclxuICAgIHJldHVybiB7IG5vdGUsIHJvbGUgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX25vdGUobm9kZTogTm9kZUluZm8sIHJlY2lwaWVudDogUmVjaXBpZW50KTogUHJvbWlzZTx7IGFubm90YXRpb246IHN0cmluZzsgdG9vbHRpcDogTm9kZVRvb2x0aXBNb2RlbCB9PiB7XHJcbiAgICBjb25zdCB0b29sdGlwOiBOb2RlVG9vbHRpcE1vZGVsID0ge307XHJcbiAgICBsZXQgYW5ub3RhdGlvbjogc3RyaW5nO1xyXG5cclxuICAgIGlmIChyZWNpcGllbnQudXNlcklkID09PSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUudXNlcklkKSB7XHJcbiAgICAgIGFubm90YXRpb24gPSB0aGlzLl9zZXNzaW9uLmlzSW1wZXJzb25hdGluZyA/IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5uYW1lIDogdGhpcy5fdHJhbnNsYXRlLmdldCgnWW91Jyk7XHJcbiAgICAgIGlmIChyZWNpcGllbnQuYnlJZCkge1xyXG4gICAgICAgIGNvbnN0IHUgPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQocmVjaXBpZW50LmJ5SWQpLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgY29uc3QgcGFzdCA9IHRoaXMuX2FjdGlvbihyZWNpcGllbnQuYWN0aW9uLCB1LmdlbmRlciksIHRpbWUgPSB0aGlzLl9mcm9tTm93KHJlY2lwaWVudC5yZXBsaWVkKTtcclxuICAgICAgICB0b29sdGlwLm5vdGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdZb3VUYWtlbkFjdGlvbkJ5JywgdS5uYW1lLCBwYXN0LCB0aW1lKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChyZWNpcGllbnQucmVwbGllZCkge1xyXG4gICAgICAgIGNvbnN0IHRpbWUgPSB0aGlzLl9mcm9tTm93KHJlY2lwaWVudC5yZXBsaWVkKTtcclxuICAgICAgICBpZiAodGhpcy5fc2Vzc2lvbi5pc0ltcGVyc29uYXRpbmcpIHtcclxuICAgICAgICAgIGNvbnN0IHBhc3QgPSB0aGlzLl9hY3Rpb24ocmVjaXBpZW50LmFjdGlvbiwgdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmdlbmRlcik7XHJcbiAgICAgICAgICB0b29sdGlwLm5vdGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdBY3Rpb25UYWtlbicsIHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5uYW1lLCBwYXN0LCB0aW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBwYXN0ID0gdGhpcy5fYWN0aW9uKHJlY2lwaWVudC5hY3Rpb24sICd5b3UnKTtcclxuICAgICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1lvdVRha2VuQWN0aW9uJywgcGFzdCwgdGltZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKCFub2RlLmVzdGltYXRlKSB7XHJcbiAgICAgICAgY29uc3QgdGltZSA9IHRoaXMuX2Zyb21Ob3cocmVjaXBpZW50LnJlY2VpdmVkKTtcclxuICAgICAgICBpZiAodGhpcy5fc2Vzc2lvbi5pc0ltcGVyc29uYXRpbmcpXHJcbiAgICAgICAgICB0b29sdGlwLm5vdGUgPSB0aGlzLl90cmFuc2xhdGUucGVyc29uYWxpemUoJ1JlY2VpdmVkQnknLCB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuZ2VuZGVyLCB0aGlzLl9zZXNzaW9uLnByb2ZpbGUubmFtZSwgdGltZSk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgdG9vbHRpcC5ub3RlID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnWW91UmVjZWl2ZWQnLCB0aW1lKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocmVjaXBpZW50LnJvbGUpIHtcclxuICAgICAgICBjb25zdCBjcm9sZSA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5yb2xlcy5maW5kKG8gPT4gby5uYW1lID09PSByZWNpcGllbnQucm9sZSk7XHJcbiAgICAgICAgdG9vbHRpcC5yb2xlID0gYC0gJHtjcm9sZSA/IGNyb2xlLnRpdGxlIDogcmVjaXBpZW50LnJvbGV9YDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnN0IHdobyA9IGF3YWl0IHRoaXMuX2FjY291bnRzLmdldChyZWNpcGllbnQudXNlcklkKS50b1Byb21pc2UoKTtcclxuICAgICAgYW5ub3RhdGlvbiA9IHdoby5uYW1lO1xyXG4gICAgICBpZiAod2hvLnJvbGUpIHRvb2x0aXAucm9sZSA9IGAtICR7d2hvLnJvbGV9YDtcclxuICAgICAgZWxzZSBpZiAocmVjaXBpZW50LnJvbGUpIHtcclxuICAgICAgICBjb25zdCBjcm9sZSA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5yb2xlcy5maW5kKG8gPT4gby5uYW1lID09PSByZWNpcGllbnQucm9sZSk7XHJcbiAgICAgICAgdG9vbHRpcC5yb2xlID0gYC0gJHtjcm9sZSA/IGNyb2xlLnRpdGxlIDogcmVjaXBpZW50LnJvbGV9YDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChyZWNpcGllbnQucmVwbGllZCkge1xyXG4gICAgICAgIGlmIChyZWNpcGllbnQuYnlJZCkge1xyXG4gICAgICAgICAgY29uc3QgYnkgPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQocmVjaXBpZW50LmJ5SWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgY29uc3QgcGFzdCA9IHRoaXMuX2FjdGlvbihyZWNpcGllbnQuYWN0aW9uLCBieS5nZW5kZXIpLFxyXG4gICAgICAgICAgICB0aW1lID0gdGhpcy5fZnJvbU5vdyhyZWNpcGllbnQucmVwbGllZCk7XHJcbiAgICAgICAgICB0b29sdGlwLm5vdGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdBY3Rpb25UYWtlbkJ5JywgYnkubmFtZSwgcGFzdCwgdGltZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgcGFzdCA9IHRoaXMuX2FjdGlvbihyZWNpcGllbnQuYWN0aW9uLCB3aG8uZ2VuZGVyKSxcclxuICAgICAgICAgICAgdGltZSA9IHRoaXMuX2Zyb21Ob3cocmVjaXBpZW50LnJlcGxpZWQpO1xyXG4gICAgICAgICAgdG9vbHRpcC5ub3RlID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnQWN0aW9uVGFrZW4nLCB3aG8ubmFtZSwgcGFzdCwgdGltZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKCFyZWNpcGllbnQuZXN0aW1hdGUpIHtcclxuICAgICAgICBjb25zdCB0aW1lID0gdGhpcy5fZnJvbU5vdyhyZWNpcGllbnQucmVjZWl2ZWQpO1xyXG4gICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5wZXJzb25hbGl6ZSgnUmVjZWl2ZWRUaW1lJywgd2hvLmdlbmRlciwgdGltZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChyZWNpcGllbnQuc3Vic3RpdHV0aW5nSWQgJiYgcmVjaXBpZW50LmVzdGltYXRlKSB7XHJcbiAgICAgIGlmIChyZWNpcGllbnQuc3Vic3RpdHV0aW5nSWQgPT09IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5ieUlkKVxyXG4gICAgICAgIHRvb2x0aXAuc3Vic3RpdHV0aW5nID0gdGhpcy5fdHJhbnNsYXRlLnBlcnNvbmFsaXplKCdTdWJzdGl0dXRpbmdZb3UnLCB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuZ2VuZGVyKTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc3QgdSA9IGF3YWl0IHRoaXMuX2FjY291bnRzLmdldChyZWNpcGllbnQuc3Vic3RpdHV0aW5nSWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIHRvb2x0aXAuc3Vic3RpdHV0aW5nID0gdGhpcy5fdHJhbnNsYXRlLnBlcnNvbmFsaXplKCdTdWJzdGl0dXRpbmdGb3InLCB1LmdlbmRlciwgdS5uYW1lKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgZXNjYWxhdGlvbnMgPSB0aGlzLm1vZGVsLmxvZy5maWx0ZXIobCA9PiBsLnRpbWUgPiB0aGlzLl9pc3N1ZWQgJiYgbC50eXBlID09PSAnRXNjYWxhdGlvbicgJiYgbC5yZWNpcGllbnRJZCA9PT0gcmVjaXBpZW50LmlkKTtcclxuICAgIGlmIChlc2NhbGF0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgdXNlcklkcyA9IGVzY2FsYXRpb25zLm1hcChlID0+IGUudXNlcklkKTtcclxuICAgICAgY29uc3QgdXNlcnMgPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXRBbGwodXNlcklkcykudG9Qcm9taXNlKCk7XHJcbiAgICAgIGNvbnN0IGR1cmF0aW9uID0gdGhpcy5fZHVyYXRpb24udHJhbnNmb3JtKGRheWpzKGVzY2FsYXRpb25zW2VzY2FsYXRpb25zLmxlbmd0aCAtIDFdLnRpbWUpLmRpZmYocmVjaXBpZW50LnJlY2VpdmVkLCAncycpKTtcclxuICAgICAgdG9vbHRpcC5zdWJzdGl0dXRpbmcgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdFc2NhbGF0ZWRUbycsIHRoaXMuX3RyYW5zbGF0ZS5qb2luKHVzZXJzLm1hcCh1ID0+IHUubmFtZSkpLCBkdXJhdGlvbik7XHJcbiAgICB9XHJcbiAgICBpZiAocmVjaXBpZW50LnJlcGxpZWQpIHtcclxuICAgICAgY29uc3QgZHVyYXRpb24gPSBkYXlqcyhyZWNpcGllbnQucmVwbGllZCkuZGlmZihyZWNpcGllbnQucmVjZWl2ZWQsICdzJyk7XHJcbiAgICAgIHRvb2x0aXAuZHVyYXRpb24gPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdEdXJhdGlvblRpbWUnLCB0aGlzLl9kdXJhdGlvbi50cmFuc2Zvcm0oZHVyYXRpb24pKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHJlY2lwaWVudC5wZW5kaW5nKSB7XHJcbiAgICAgIGlmIChyZWNpcGllbnQuZXN0aW1hdGUpIHRvb2x0aXAuZXN0aW1hdGVkVGltZSA9IHRoaXMuX3RpbWVFc3RpbWF0ZShub2RlKTtcclxuICAgICAgZWxzZSBpZiAobm9kZS5zdGFuZGFyZFRpbWUpIHtcclxuICAgICAgICBjb25zdCBkaWZmID0gbm9kZS5zdGFuZGFyZFRpbWUgLSBkYXlqcygpLmRpZmYobm9kZS50aW1lLCAncycpO1xyXG4gICAgICAgIGlmIChkaWZmID4gMClcclxuICAgICAgICAgIHRvb2x0aXAuZXN0aW1hdGVkVGltZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0VzdGltYXRlVGltZScsIHRoaXMuX2R1cmF0aW9uLnRyYW5zZm9ybShkaWZmKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKG5vZGUuc3RhbmRhcmRUaW1lKVxyXG4gICAgICB0b29sdGlwLnN0YW5kYXJkVGltZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ05vZGVTdGFuZGFyZFRpbWUnLCB0aGlzLl9kdXJhdGlvbi50cmFuc2Zvcm0obm9kZS5zdGFuZGFyZFRpbWUpKTtcclxuICAgIGlmIChub2RlLmZ5aSlcclxuICAgICAgdG9vbHRpcC5meWkgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdGWUknKTtcclxuICAgIHJldHVybiB7IGFubm90YXRpb24sIHRvb2x0aXAgfTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfYWN0aW9uKG5hbWU6IHN0cmluZywgZ2VuZGVyPzogR2VuZGVyIHwgJ3lvdScpIHtcclxuICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5hY3Rpb25zLmZpbmQoYSA9PiBhLm5hbWUgPT09IG5hbWUpO1xyXG4gICAgaWYgKCFhY3Rpb24pIHJldHVybiBuYW1lO1xyXG4gICAgaWYgKGdlbmRlciA9PT0gJ3lvdScpIHtcclxuICAgICAgY29uc3QgZ2VuZGVyID0gdGhpcy5fc2Vzc2lvbi5nZW5kZXIsIHBlcnNvbmFsID1cclxuICAgICAgICAoZ2VuZGVyID09PSAnTWFsZScgPyAoYWN0aW9uLnlvdU1hbGUgfHwgYWN0aW9uLnlvdSkgOlxyXG4gICAgICAgICAgZ2VuZGVyID09PSAnRmVtYWxlJyA/IChhY3Rpb24ueW91RmVtYWxlIHx8IGFjdGlvbi55b3UpIDpcclxuICAgICAgICAgICAgYWN0aW9uLnlvdSk7XHJcbiAgICAgIHJldHVybiAocGVyc29uYWwgfHxcclxuICAgICAgICBhY3Rpb24ucGFzdCB8fFxyXG4gICAgICAgIGFjdGlvbi50aXRsZSkudG9Mb3dlckNhc2UoKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHBhc3QgPSAoKGdlbmRlciA9PT0gJ01hbGUnID8gKGFjdGlvbi5wYXN0TWFsZSB8fCBhY3Rpb24ucGFzdCkgOlxyXG4gICAgICBnZW5kZXIgPT09ICdGZW1hbGUnID8gKGFjdGlvbi5wYXN0RmVtYWxlIHx8IGFjdGlvbi5wYXN0KSA6IGFjdGlvbi5wYXN0KSB8fFxyXG4gICAgICBhY3Rpb24udGl0bGUpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICByZXR1cm4gcGFzdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Zyb21Ob3coZGF0ZTogRGF0ZSkge1xyXG4gICAgcmV0dXJuIGRheWpzKGRhdGUpLmZyb21Ob3coKTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xyXG4gICAgdGhpcy5kaWFncmFtICYmIHRoaXMuZGlhZ3JhbS5kZXN0cm95KCk7XHJcbiAgfVxyXG59XHJcbmludGVyZmFjZSBDb25uZWN0b3JJbmZvTW9kZWwge1xyXG4gIGVzdGltYXRlPzogYm9vbGVhbjtcclxuICBwYXJlbnRJZDogc3RyaW5nO1xyXG4gIHRpbWU6IERhdGVcclxufVxyXG5pbnRlcmZhY2UgTm9kZUluZm9Nb2RlbCB7XHJcbiAgdG9vbHRpcDogTm9kZVRvb2x0aXBNb2RlbDtcclxuICBub2RlOiBOb2RlSW5mbztcclxuICByZWNpcGllbnQ6IFJlY2lwaWVudFxyXG4gIGluZGljYXRvcj86IGJvb2xlYW47XHJcbiAgcGFyZW50SWQ/OiBzdHJpbmc7XHJcbn1cclxuaW50ZXJmYWNlIE5vZGVUb29sdGlwTW9kZWwge1xyXG4gIGZ5aT86IHN0cmluZztcclxuICBlcnJvcj86IHN0cmluZztcclxuICBub3RlPzogc3RyaW5nO1xyXG4gIHJvbGU/OiBzdHJpbmc7XHJcbiAgc3Vic3RpdHV0aW5nPzogc3RyaW5nO1xyXG4gIHN0YW5kYXJkVGltZT86IHN0cmluZztcclxuICBkdXJhdGlvbj86IHN0cmluZztcclxuICBlc3RpbWF0ZWRUaW1lPzogc3RyaW5nO1xyXG59XHJcbiJdfQ==
|
674
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2NvbXBvc2UvdHJhY2UvZmxvdy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQW1ELE1BQU0sZUFBZSxDQUFDO0FBQ2xHLE9BQU8sRUFBMEMsWUFBWSxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSx1QkFBdUIsRUFBRSw4QkFBOEIsRUFBcUIsWUFBWSxFQUFFLFdBQVcsRUFBOEcscUJBQXFCLEVBQUUsZUFBZSxFQUFtQixlQUFlLEVBQWtDLE1BQU0sa0NBQWtDLENBQUM7QUFDbGMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7Ozs7QUFPMUQsT0FBTyxDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxZQUFZLEVBQUUsV0FBVyxDQUFBLHFEQUFxRCxDQUFDLENBQUM7QUFFeEgsTUFBTSxZQUFZLEdBQUcsdUZBQXVGLEVBQzFHLFFBQVEsR0FBRyxrR0FBa0csRUFDN0csY0FBYyxHQUFHLG1RQUFtUSxFQUNwUixhQUFhLEdBQUcsc1RBQXNULENBQUM7QUFXelUseUJBQXlCO0FBQ3pCLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxTQUFTO0lBcUM5Qyx5QkFBeUI7SUFDekIsWUFBb0IsU0FBeUIsRUFBVSxRQUF3QixFQUFVLFVBQTRCLEVBQzNHLFNBQTZCLEVBQzdCLFdBQXVDLEVBQy9DLEdBQWU7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QUUsQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxRQUFRLENBQUMsSUFBVTtRQUN6QixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBQ0QsV0FBVztRQUNULEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDekMsQ0FBQzs7OEdBbHBCVSxpQkFBaUI7a0dBQWpCLGlCQUFpQixtTUFSbEIsRUFBRSwrQ0FFRyxDQUFDLDhCQUE4QixDQUFDOzJGQU1wQyxpQkFBaUI7a0JBVjdCLFNBQVM7K0JBQ0UsYUFBYSxZQUNiLEVBQUUsaUJBRUcsQ0FBQyw4QkFBOEIsQ0FBQyxRQUN6Qzt3QkFDSixHQUFHLEVBQUUsS0FBSztxQkFDWDtvUEFJUSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgU2ltcGxlQ2hhbmdlcywgT25DaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5vZGVNb2RlbCwgQ29ubmVjdG9yTW9kZWwsIExheW91dE1vZGVsLCBEaWFncmFtVG9vbHMsIERpYWdyYW0sIERpYWdyYW1Db25zdHJhaW50cywgQ29tcGxleEhpZXJhcmNoaWNhbFRyZWUsIENvbXBsZXhIaWVyYXJjaGljYWxUcmVlU2VydmljZSwgQ29ubmVjdG9yQnJpZGdpbmcsIEJwbW5EaWFncmFtcywgRGF0YUJpbmRpbmcsIFNjcm9sbFNldHRpbmdzTW9kZWwsIFNuYXBTZXR0aW5nc01vZGVsLCBTZWdtZW50cywgTGluZVJvdXRpbmcsIFRyZWVJbmZvLCBJTW91c2VFdmVudEFyZ3MsIExpbmVEaXN0cmlidXRpb24sIENvbm5lY3Rpb25Qb2ludE9yaWdpbiwgU25hcENvbnN0cmFpbnRzLCBMYXlvdXRBbmltYXRpb24sIE5vZGVDb25zdHJhaW50cywgRmxvd1NoYXBlTW9kZWwsIEJwbW5TaGFwZU1vZGVsIH0gZnJvbSAnQHN5bmNmdXNpb24vZWoyLWFuZ3VsYXItZGlhZ3JhbXMnO1xyXG5pbXBvcnQgeyBpbnRlcnZhbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XHJcbmltcG9ydCB7IERvY3VtZW50TW9kZWwsIFJlY2lwaWVudCwgTm9kZUluZm8sIEdlbmRlciwgRmxvd05vZGUsIFVzZXJJbmZvLCBTdGF0ZSwgQ29ubmVjdG9ySW5mbyB9IGZyb20gXCIuLi8uLi9jb3JlL21vZGVsc1wiO1xyXG5pbXBvcnQgeyBnZXRXYXJuIH0gZnJvbSAnLi4vLi4vY29yZS9mdW5jdGlvbnMnO1xyXG5pbXBvcnQgeyBUcmFjZUJhc2UsIFlvdSwgU1RBUlRfTk9ERSB9IGZyb20gJy4vdHJhY2UuYmFzZSc7XHJcbmltcG9ydCB7IFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXNzaW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBY2NvdW50U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvYWNjb3VudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvdHJhbnNsYXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBIdWJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9odWIuc2VydmljZSc7XHJcbmltcG9ydCB7IER1cmF0aW9uRm9ybWF0UGlwZSB9IGZyb20gJy4uLy4uL2NvcmUvcGlwZXMvZHVyYXRpb24tZm9ybWF0LnBpcGUnO1xyXG5cclxuRGlhZ3JhbS5JbmplY3QoQ29tcGxleEhpZXJhcmNoaWNhbFRyZWUsIEJwbW5EaWFncmFtcywgRGF0YUJpbmRpbmcvKiwgTGF5b3V0QW5pbWF0aW9uLCBMaW5lUm91dGluZywgQ29ubmVjdG9yQnJpZGdpbmcqLyk7XHJcblxyXG5jb25zdCBQRU5ESU5HX1BBVEggPSAnTTE4LDIybC0wLjAxLTZMMTQsMTJsMy45OS00LjAxTDE4LDJINnY2bDQsNGwtNCwzLjk5VjIySDE4eiBNOCw3LjVWNGg4djMuNWwtNCw0TDgsNy41eicsXHJcbiAgRllJX1BBVEggPSAnTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTEgMTVoLTJ2LTZoMnY2em0wLThoLTJWN2gydjJ6JyxcclxuICBFU0NBTEFURURfUEFUSCA9ICdNMjIgNS43MmwtNC42LTMuODYtMS4yOSAxLjUzIDQuNiAzLjg2TDIyIDUuNzJ6TTcuODggMy4zOUw2LjYgMS44NiAyIDUuNzFsMS4yOSAxLjUzIDQuNTktMy44NXpNMTIuNSA4SDExdjZsNC43NSAyLjg1Ljc1LTEuMjMtNC0yLjM3Vjh6TTEyIDRjLTQuOTcgMC05IDQuMDMtOSA5czQuMDIgOSA5IDljNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bTAgMTZjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3eicsXHJcbiAgV0FSTk5JTkdfUEFUSCA9ICdNIDEzLjc2MzczNSwxLjg0MzM3MzUgSCA2LjMwMzczNDkgbCAtNS4yNyw1LjI3IHYgNy40NTk5OTk1IGwgNS4yNyw1LjI3IGggNy40NjAwMDAxIGwgNS4yNywtNS4yNyBWIDcuMTEzMzczNSBaIG0gLTMuNzMsMTQuMjk5OTk5NSBjIC0wLjcyMDAwMDEsMCAtMS4zMDAwMDAxLC0wLjU4IC0xLjMwMDAwMDEsLTEuMyAwLC0wLjcyIDAuNTgsLTEuMyAxLjMwMDAwMDEsLTEuMyAwLjcyLDAgMS4zLDAuNTggMS4zLDEuMyAwLDAuNzIgLTAuNTgsMS4zIC0xLjMsMS4zIHogbSAxLC00LjMgSCA5LjAzMzczNDkgViA1Ljg0MzM3MzUgaCAyLjAwMDAwMDEgeic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2JpemRvYy1mbG93JyxcclxuICB0ZW1wbGF0ZTogJycsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZmxvdy5jb21wb25lbnQuc2NzcyddLFxyXG4gIHZpZXdQcm92aWRlcnM6IFtDb21wbGV4SGllcmFyY2hpY2FsVHJlZVNlcnZpY2VdLFxyXG4gIGhvc3Q6IHtcclxuICAgIGRpcjogJ2x0cidcclxuICB9XHJcbn0pXHJcbi8qKiBmbG93LXZpZXcgY29tcG9uZW50Ki9cclxuZXhwb3J0IGNsYXNzIEZsb3dWaWV3Q29tcG9uZW50IGV4dGVuZHMgVHJhY2VCYXNlIGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIG1vZGVsOiBEb2N1bWVudE1vZGVsPGFueT47XHJcbiAgQElucHV0KCkgY29ubmVjdG9yVHlwZTogU2VnbWVudHMgPSAnT3J0aG9nb25hbCc7XHJcbiAgZGlhZ3JhbTogRGlhZ3JhbTtcclxuICByZWFkb25seSB0b29sOiBEaWFncmFtVG9vbHMgPSBEaWFncmFtVG9vbHMuWm9vbVBhbjtcclxuICByZWFkb25seSBkaWFncmFtQ29uc3RyYWludHM6IERpYWdyYW1Db25zdHJhaW50cyA9XHJcbiAgICBEaWFncmFtQ29uc3RyYWludHMuRGVmYXVsdCB8XHJcbiAgICBEaWFncmFtQ29uc3RyYWludHMuUGFuIHxcclxuICAgIERpYWdyYW1Db25zdHJhaW50cy5MaW5lUm91dGluZyB8XHJcbiAgICBEaWFncmFtQ29uc3RyYWludHMuQnJpZGdpbmc7XHJcbiAgcHVibGljIHJlYWRvbmx5IGxheW91dCA9IHtcclxuICAgIHR5cGU6ICdDb21wbGV4SGllcmFyY2hpY2FsVHJlZScsXHJcbiAgICBjb25uZWN0aW9uUG9pbnRPcmlnaW46IENvbm5lY3Rpb25Qb2ludE9yaWdpbi5EaWZmZXJlbnRQb2ludCxcclxuICAgIGhvcml6b250YWxTcGFjaW5nOiA1MCxcclxuICAgIHZlcnRpY2FsU3BhY2luZzogNTAsXHJcbiAgICB2ZXJ0aWNhbEFsaWdubWVudDogJ1RvcCcsXHJcbiAgICBjb25uZWN0aW9uRGlyZWN0aW9uOiAnT3JpZW50YXRpb24nLFxyXG4gICAgb3JpZW50YXRpb246IHRoaXMuX3Nlc3Npb24uaW52ZXJzZSA/ICdSaWdodFRvTGVmdCcgOiAnTGVmdFRvUmlnaHQnLFxyXG4gICAgbWFyZ2luOiB7IGxlZnQ6IDEwLCByaWdodDogMTAsIHRvcDogMTAsIGJvdHRvbTogMTAgfVxyXG4gIH0gYXMgTGF5b3V0TW9kZWw7XHJcblxyXG4gIHJlYWRvbmx5IHNjcm9sbFNldHRpbmdzID0ge1xyXG4gICAgbWluWm9vbTogLjUsXHJcbiAgICBjYW5BdXRvU2Nyb2xsOiB0cnVlLFxyXG4gICAgY3VycmVudFpvb206IDEuMixcclxuICAgIHBhZGRpbmc6IHsgdG9wOiAwLCBib3R0b206IDAgfSxcclxuICAgIGF1dG9TY3JvbGxCb3JkZXI6IHsgdG9wOiAwLCBib3R0b206IDAgfSxcclxuICAgIG1heFpvb206IDIuNVxyXG4gIH0gYXMgU2Nyb2xsU2V0dGluZ3NNb2RlbDtcclxuXHJcbiAgcmVhZG9ubHkgc25hcFNldHRpbmdzID0ge1xyXG4gICAgY29uc3RyYWludHM6IFNuYXBDb25zdHJhaW50cy5Ob25lLFxyXG4gICAgZ3JpZFR5cGU6ICdEb3RzJ1xyXG4gIH0gYXMgU25hcFNldHRpbmdzTW9kZWw7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfY29uZmlndXJhdGlvbjogeyBbbmFtZTogc3RyaW5nXTogRmxvd05vZGUgfSA9IHt9O1xyXG4gIHByaXZhdGUgX2lzc3VlZDogRGF0ZTtcclxuICBwcml2YXRlIF9hY2NlbnRDb2xvciA9IHRoaXMuX3Nlc3Npb24uZ2V0QWNjZW50KCk7XHJcbiAgLyoqIHdvcmtmbG93LXZpZXcgY3RvciAqL1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2FjY291bnRzOiBBY2NvdW50U2VydmljZSwgcHJpdmF0ZSBfc2Vzc2lvbjogU2Vzc2lvblNlcnZpY2UsIHByaXZhdGUgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgX2R1cmF0aW9uOiBEdXJhdGlvbkZvcm1hdFBpcGUsXHJcbiAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PixcclxuICAgIGh1YjogSHViU2VydmljZSkge1xyXG4gICAgc3VwZXIoaHViKTtcclxuICAgIHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5ub2Rlcy5mb3JFYWNoKG4gPT5cclxuICAgICAgdGhpcy5fY29uZmlndXJhdGlvbltuLm5hbWVdID0gbik7XHJcbiAgICBfc2Vzc2lvbi50aGVtZUNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuXHJcbiAgICAgIHN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fYWNjZW50Q29sb3IgPSB0aGlzLl9zZXNzaW9uLmdldEFjY2VudCgpO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcbiAgbmdPbkNoYW5nZXMoX2NoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIHRoaXMuX2luaXRpYWxpemUoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBhc3luYyBfaW5pdGlhbGl6ZSgpIHtcclxuICAgIGNvbnN0IHsgY29ubmVjdG9ycywgbm9kZXMsIGluZGljYXRvcnMgfSA9IGF3YWl0IHRoaXMuX3ByZXBhcmUoKTtcclxuICAgIHRoaXMuZGlhZ3JhbSAmJiB0aGlzLmRpYWdyYW0uZGVzdHJveSgpO1xyXG4gICAgdGhpcy5kaWFncmFtID0gbmV3IERpYWdyYW0oe1xyXG4gICAgICB3aWR0aDogJzEwMCUnLFxyXG4gICAgICBoZWlnaHQ6IDM4MCxcclxuICAgICAgbm9kZXMsXHJcbiAgICAgIGNvbm5lY3RvcnMsXHJcbiAgICAgIGxheW91dDogdGhpcy5sYXlvdXQsXHJcbiAgICAgIHRvb2w6IHRoaXMudG9vbCxcclxuICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxyXG4gICAgICBzY3JvbGxTZXR0aW5nczogdGhpcy5zY3JvbGxTZXR0aW5ncyxcclxuICAgICAgc25hcFNldHRpbmdzOiB0aGlzLnNuYXBTZXR0aW5ncyxcclxuICAgICAgY29uc3RyYWludHM6IHRoaXMuZGlhZ3JhbUNvbnN0cmFpbnRzLFxyXG4gICAgICBnZXRDb25uZWN0b3JEZWZhdWx0czogdGhpcy5jb25uRGVmYXVsdHMuYmluZCh0aGlzKSxcclxuICAgICAgZ2V0Tm9kZURlZmF1bHRzOiB0aGlzLm5vZGVEZWZhdWx0cy5iaW5kKHRoaXMpLFxyXG4gICAgfSwgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcclxuICAgIHRoaXMuZGlhZ3JhbS5kb0xheW91dCgpO1xyXG4gICAgaW5kaWNhdG9ycy5mb3JFYWNoKChuLCBpKSA9PiB7XHJcbiAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuZGlhZ3JhbS5nZXROb2RlT2JqZWN0KChuLmFkZEluZm8gYXMgTm9kZUluZm9Nb2RlbCkucGFyZW50SWQpO1xyXG4gICAgICBuLm9mZnNldFggPSBwYXJlbnQub2Zmc2V0WCArICh0aGlzLl9zZXNzaW9uLmludmVyc2UgPyAtMjUgOiAyNSk7XHJcbiAgICAgIG4ub2Zmc2V0WSA9IHBhcmVudC5vZmZzZXRZICsgMjU7XHJcbiAgICAgIG4uekluZGV4ID0gMTAwMCArIGk7XHJcbiAgICAgIHRoaXMuZGlhZ3JhbS5hZGQobik7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZGlhZ3JhbS5maXRUb1BhZ2UoKTtcclxuICAgIGludGVydmFsKDYwMDAwKS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKFxyXG4gICAgICB0aGlzLl9yZWZyZXNoLmJpbmQodGhpcylcclxuICAgICk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3JlZnJlc2goKSB7XHJcbiAgICBzdXBlci5yZXNldEVzdGltYXRlVGltZSgpO1xyXG4gICAgdGhpcy5kaWFncmFtLm5vZGVzLmZvckVhY2gobiA9PiB7XHJcbiAgICAgIGNvbnN0IHsgbm9kZSwgcmVjaXBpZW50IH0gPSBuLmFkZEluZm8gYXMgTm9kZUluZm9Nb2RlbDtcclxuICAgICAgaWYgKHJlY2lwaWVudCkge1xyXG4gICAgICAgIGlmICghcmVjaXBpZW50LnJlcGxpZWQgJiYgcmVjaXBpZW50LnBlbmRpbmcpIHtcclxuICAgICAgICAgIGlmIChyZWNpcGllbnQuZXN0aW1hdGUpIChuLmFkZEluZm8gYXMgTm9kZUluZm9Nb2RlbCkudG9vbHRpcC5lc3RpbWF0ZWRUaW1lID0gdGhpcy5fdGltZUVzdGltYXRlKG5vZGUpO1xyXG4gICAgICAgICAgZWxzZSBpZiAobm9kZS5zdGFuZGFyZFRpbWUpIHtcclxuICAgICAgICAgICAgY29uc3QgZGlmZiA9IG5vZGUuc3RhbmRhcmRUaW1lIC0gZGF5anMoKS5kaWZmKG5vZGUudGltZSwgJ3MnKTtcclxuICAgICAgICAgICAgaWYgKGRpZmYgPiAwKVxyXG4gICAgICAgICAgICAgIChuLmFkZEluZm8gYXMgTm9kZUluZm9Nb2RlbCkudG9vbHRpcC5lc3RpbWF0ZWRUaW1lID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnRXN0aW1hdGVUaW1lJywgdGhpcy5fZHVyYXRpb24udHJhbnNmb3JtKGRpZmYpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIG4udG9vbHRpcC5jb250ZW50ID0gdGhpcy5fdG9vbHRpcCgobi5hZGRJbmZvIGFzIE5vZGVJbmZvTW9kZWwpLnRvb2x0aXApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlXHJcbiAgICAgICAgaWYgKG5vZGUgJiYgbm9kZS5lc3RpbWF0ZSlcclxuICAgICAgICAgIChuLmFkZEluZm8gYXMgTm9kZUluZm9Nb2RlbCkudG9vbHRpcC5lc3RpbWF0ZWRUaW1lID0gdGhpcy5fdGltZUVzdGltYXRlKG5vZGUpLFxyXG4gICAgICAgICAgICBuLnRvb2x0aXAuY29udGVudCA9IHRoaXMuX3Rvb2x0aXAoKG4uYWRkSW5mbyBhcyBOb2RlSW5mb01vZGVsKS50b29sdGlwKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gb2JqXHJcbiAgICovXHJcbiAgcHVibGljIG5vZGVEZWZhdWx0cyhvYmo6IE5vZGVNb2RlbCk6IE5vZGVNb2RlbCB7XHJcbiAgICBjb25zdCB7IHJlY2lwaWVudCwgbm9kZSwgaW5kaWNhdG9yIH0gPSBvYmouYWRkSW5mbyBhcyBOb2RlSW5mb01vZGVsO1xyXG5cclxuICAgIGlmIChpbmRpY2F0b3IpIHtcclxuICAgICAgb2JqLndpZHRoID0gb2JqLmhlaWdodCA9IDE1O1xyXG4gICAgICBvYmouc3R5bGUuc3Ryb2tlV2lkdGggPSAwO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vIG9iai5zaGFwZSA9IHsgdHlwZTogJ0JwbW4nLCBzaGFwZTogJ0V2ZW50JyB9IGFzIEJwbW5TaGFwZU1vZGVsO1xyXG4gICAgICBvYmoud2lkdGggPSBvYmouaGVpZ2h0ID0gNTA7XHJcbiAgICAgIGlmIChvYmouYW5ub3RhdGlvbnMgJiYgb2JqLmFubm90YXRpb25zLmxlbmd0aCkgb2JqLmFubm90YXRpb25zWzBdLnN0eWxlLmNvbG9yID0gdGhpcy5fc2Vzc2lvbi50aGVtZS5kYXJrID8gJ3doaXRlJyA6ICdibGFjayc7XHJcbiAgICAgIGlmIChub2RlICYmIG5vZGUuZXN0aW1hdGUpIHtcclxuICAgICAgICBvYmouc3R5bGUuc3Ryb2tlQ29sb3IgPSB0aGlzLl9zZXNzaW9uLnRoZW1lLmRhcmsgPyAnd2hpdGUnIDogJ2JsYWNrJztcclxuICAgICAgICBvYmouc3R5bGUub3BhY2l0eSA9IG9iai5hbm5vdGF0aW9uc1swXS5zdHlsZS5vcGFjaXR5ID0gLjY7XHJcbiAgICAgICAgb2JqLnN0eWxlLmZpbGwgPSAndHJhbnNwYXJlbnQnO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIG9iai5zdHlsZS5zdHJva2VDb2xvciA9IHRoaXMuX2FjY2VudENvbG9yO1xyXG4gICAgICAgIG9iai5zdHlsZS5maWxsID0gcmVjaXBpZW50ICYmIHJlY2lwaWVudC5wZW5kaW5nID8gdGhpcy5fc2Vzc2lvbi5nZXRBY2NlbnQoNDAwKSA6ICd0cmFuc3BhcmVudCc7XHJcbiAgICAgIH1cclxuICAgICAgb2JqLnN0eWxlLnN0cm9rZVdpZHRoID0gMjtcclxuICAgIH1cclxuICAgIHJldHVybiBvYmo7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBjb25uZWN0b3JcclxuICAgKi9cclxuICBwdWJsaWMgY29ubkRlZmF1bHRzKGNvbm5lY3RvcjogQ29ubmVjdG9yTW9kZWwpIHtcclxuICAgIGNvbm5lY3Rvci50eXBlID0gdGhpcy5jb25uZWN0b3JUeXBlO1xyXG4gICAgY29ubmVjdG9yLmNvcm5lclJhZGl1cyA9IDY7XHJcbiAgICBjb25uZWN0b3IudGFyZ2V0RGVjb3JhdG9yLmhlaWdodCA9IDc7XHJcbiAgICBjb25uZWN0b3IudGFyZ2V0RGVjb3JhdG9yLndpZHRoID0gNztcclxuICAgIGlmICgoY29ubmVjdG9yLmFkZEluZm8gYXMgQ29ubmVjdG9ySW5mb01vZGVsKS5lc3RpbWF0ZSkge1xyXG4gICAgICBjb25uZWN0b3Iuc3R5bGUuc3Ryb2tlRGFzaEFycmF5ID0gJzIgMic7XHJcbiAgICAgIGNvbm5lY3Rvci5zdHlsZS5zdHJva2VDb2xvciA9XHJcbiAgICAgICAgY29ubmVjdG9yLnRhcmdldERlY29yYXRvci5zdHlsZS5maWxsID1cclxuICAgICAgICBjb25uZWN0b3IudGFyZ2V0RGVjb3JhdG9yLnN0eWxlLnN0cm9rZUNvbG9yID1cclxuICAgICAgICB0aGlzLl9zZXNzaW9uLnRoZW1lLmRhcmsgPyAnd2hpdGUnIDogJ2JsYWNrJztcclxuICAgICAgY29ubmVjdG9yLnN0eWxlLnN0cm9rZVdpZHRoID0gMTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBjb25uZWN0b3Iuc3R5bGUuc3Ryb2tlQ29sb3IgPSBjb25uZWN0b3IudGFyZ2V0RGVjb3JhdG9yLnN0eWxlLnN0cm9rZUNvbG9yID0gY29ubmVjdG9yLnRhcmdldERlY29yYXRvci5zdHlsZS5maWxsID0gdGhpcy5fYWNjZW50Q29sb3I7XHJcbiAgICAgIGNvbm5lY3Rvci5zdHlsZS5zdHJva2VXaWR0aCA9IDI7XHJcbiAgICB9XHJcbiAgICBjb25uZWN0b3IudGFyZ2V0RGVjb3JhdG9yLnNoYXBlID0gJ05vbmUnO1xyXG4gIH1cclxuICAvKiogKi9cclxuICBwcml2YXRlIGFzeW5jIF9wcmVwYXJlKCk6IFByb21pc2U8eyBub2RlczogTm9kZU1vZGVsW107IGNvbm5lY3RvcnM6IENvbm5lY3Rvck1vZGVsW107IGluZGljYXRvcnM6IE5vZGVNb2RlbFtdIH0+IHtcclxuICAgIGNvbnN0IHsgY29ubmVjdG9yczogZGNvbm5lY3RvcnMsIG5vZGVzOiBkbm9kZXMgfSA9IHRoaXMubW9kZWwud29ya2Zsb3c7XHJcbiAgICBjb25zdCBpbmRpY2F0b3JzOiBOb2RlTW9kZWxbXSA9IFtdLCBjb25uZWN0b3JzOiBDb25uZWN0b3JNb2RlbFtdID0gZGNvbm5lY3RvcnMubWFwKGMgPT4gKFxyXG4gICAgICB7XHJcbiAgICAgICAgc291cmNlSUQ6IGMuc291cmNlSWQsXHJcbiAgICAgICAgdGFyZ2V0SUQ6IGMudGFyZ2V0SWQsXHJcbiAgICAgICAgYWRkSW5mbzoge1xyXG4gICAgICAgICAgZXN0aW1hdGU6IGMuZXN0aW1hdGUsXHJcbiAgICAgICAgICB0aW1lOiBjLnRpbWVcclxuICAgICAgICB9IGFzIENvbm5lY3RvckluZm9Nb2RlbFxyXG4gICAgICB9IGFzIENvbm5lY3Rvck1vZGVsXHJcbiAgICApKSwgbm9kZXM6IE5vZGVNb2RlbFtdID0gW107XHJcbiAgICB0aGlzLl9pc3N1ZWQgPSB0aGlzLm1vZGVsLmlzc3VlZCB8fCB0aGlzLm1vZGVsLmxvZy5maWx0ZXIobCA9PiBsLnR5cGUgPT09ICdTdWJtaXQnKVswXS50aW1lO1xyXG4gICAgbGV0IHpJbmRleCA9IDUwMDtcclxuICAgIGZvciAobGV0IG5vZGUgb2YgZG5vZGVzKSB7XHJcbiAgICAgIGlmIChub2Rlcy5maW5kKG4gPT4gbi5pZCA9PSBub2RlLmlkKSkgY29udGludWU7XHJcbiAgICAgIGxldCBjb25maWd1cmF0aW9uID0gdGhpcy5fY29uZmlndXJhdGlvbltub2RlLnR5cGVdO1xyXG4gICAgICBsZXQgcmVjaXBpZW50cyA9IHRoaXMubW9kZWwucmVjaXBpZW50cy5cclxuICAgICAgICBmaWx0ZXIociA9PiByLm5vZGVJZCA9PT0gbm9kZS5pZCAmJlxyXG4gICAgICAgICAgci5yZWNlaXZlZCA+PSB0aGlzLl9pc3N1ZWQpXHJcbiAgICAgICAgLnNvcnQoKHIwLCByMSkgPT5cclxuICAgICAgICAgIHIwLnJlY2VpdmVkID4gcjEucmVjZWl2ZWQgPyAxIDogLTEpO1xyXG4gICAgICBpZiAocmVjaXBpZW50cy5sZW5ndGgpIHtcclxuICAgICAgICBsZXQgciA9IDA7XHJcbiAgICAgICAgZG8ge1xyXG4gICAgICAgICAgdmFyIHJlY2lwaWVudCA9IHJlY2lwaWVudHNbcl07XHJcbiAgICAgICAgICBsZXQgZXhpc3RzID0gZmFsc2U7XHJcbiAgICAgICAgICAvLyByZW1vdmUgZHVwbGljYXRlIHVzZXIgcmVjaXBpZW50IG9uIHNhbWUgbm9kZVxyXG4gICAgICAgICAgbGV0IGogPSAwO1xyXG4gICAgICAgICAgd2hpbGUgKGogPCByICYmICFleGlzdHMpIHtcclxuICAgICAgICAgICAgaWYgKHJlY2lwaWVudHNbal0udXNlcklkID09PSByZWNpcGllbnQudXNlcklkKSBleGlzdHMgPSB0cnVlO1xyXG4gICAgICAgICAgICBlbHNlIGorKztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChleGlzdHMpXHJcbiAgICAgICAgICAgIHJlY2lwaWVudHMuc3BsaWNlKHJlY2lwaWVudC5lc3RpbWF0ZSA/IHIgOiBqLCAxKTtcclxuICAgICAgICAgIGVsc2UgcisrO1xyXG4gICAgICAgIH0gd2hpbGUgKHIgPCByZWNpcGllbnRzLmxlbmd0aCk7XHJcblxyXG4gICAgICAgIGZvciAociA9IDA7IHIgPCByZWNpcGllbnRzLmxlbmd0aDsgcisrKSB7XHJcbiAgICAgICAgICBsZXQgcmVjaXBpZW50ID0gcmVjaXBpZW50c1tyXTtcclxuICAgICAgICAgIGNvbnN0IHsgYW5ub3RhdGlvbiwgdG9vbHRpcCB9ID0gYXdhaXQgdGhpcy5fbm90ZShub2RlLCByZWNpcGllbnQpO1xyXG4gICAgICAgICAgY29uc3Qgbm9kID0ge1xyXG4gICAgICAgICAgICBpZDogciA9PT0gMCA/IG5vZGUuaWQgOiBub2RlLmlkICsgci50b1N0cmluZygpLFxyXG4gICAgICAgICAgICBzaGFwZTogdGhpcy5fY29uZmlndXJhdGlvbltub2RlLnR5cGVdLnNoYXBlLFxyXG4gICAgICAgICAgICB6SW5kZXg6IHpJbmRleCsrLFxyXG4gICAgICAgICAgICB0b29sdGlwOiB7XHJcbiAgICAgICAgICAgICAgY29udGVudDogdGhpcy5fdG9vbHRpcCh0b29sdGlwKSxcclxuICAgICAgICAgICAgICBwb3NpdGlvbjogJ1RvcENlbnRlcidcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY29uc3RyYWludHM6IE5vZGVDb25zdHJhaW50cy5EZWZhdWx0IHwgTm9kZUNvbnN0cmFpbnRzLlRvb2x0aXAsXHJcbiAgICAgICAgICAgIGFkZEluZm86IHtcclxuICAgICAgICAgICAgICB0b29sdGlwLFxyXG4gICAgICAgICAgICAgIHJlY2lwaWVudCxcclxuICAgICAgICAgICAgICBub2RlXHJcbiAgICAgICAgICAgIH0gYXMgTm9kZUluZm9Nb2RlbCxcclxuICAgICAgICAgICAgYW5ub3RhdGlvbnM6IFt7XHJcbiAgICAgICAgICAgICAgY29udGVudDogYW5ub3RhdGlvbixcclxuICAgICAgICAgICAgICBtYXJnaW46IHsgdG9wOiA0IH0sXHJcbiAgICAgICAgICAgICAgdmVydGljYWxBbGlnbm1lbnQ6ICdUb3AnLFxyXG4gICAgICAgICAgICAgIG9mZnNldDoge1xyXG4gICAgICAgICAgICAgICAgeTogMSxcclxuICAgICAgICAgICAgICAgIHg6IC41XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XVxyXG4gICAgICAgICAgfSBhcyBOb2RlTW9kZWw7XHJcbiAgICAgICAgICBpZiAociA+IDApIHtcclxuICAgICAgICAgICAgZGNvbm5lY3RvcnMuZm9yRWFjaChjID0+IHtcclxuICAgICAgICAgICAgICBpZiAoYy50YXJnZXRJZCA9PT0gbm9kZS5pZClcclxuICAgICAgICAgICAgICAgIGNvbm5lY3RvcnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgIHNvdXJjZUlEOiBjLnNvdXJjZUlkLFxyXG4gICAgICAgICAgICAgICAgICB0YXJnZXRJRDogbm9kLmlkLFxyXG4gICAgICAgICAgICAgICAgICBhZGRJbmZvOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXN0aW1hdGU6IGMuZXN0aW1hdGVcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgaWYgKGMuc291cmNlSWQgPT09IG5vZGUuaWQpXHJcbiAgICAgICAgICAgICAgICBjb25uZWN0b3JzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICBzb3VyY2VJRDogbm9kLmlkLFxyXG4gICAgICAgICAgICAgICAgICB0YXJnZXRJRDogYy50YXJnZXRJZCxcclxuICAgICAgICAgICAgICAgICAgYWRkSW5mbzoge1xyXG4gICAgICAgICAgICAgICAgICAgIGVzdGltYXRlOiBjLmVzdGltYXRlXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIG5vZGVzLnB1c2gobm9kKTtcclxuICAgICAgICAgIGlmIChyZWNpcGllbnQuYWN0aW9uKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5hY3Rpb25zLmZpbmQoYSA9PiBhLm5hbWUgPT09IHJlY2lwaWVudC5hY3Rpb24pO1xyXG4gICAgICAgICAgICBpZiAoYWN0aW9uLnNoYXBlICYmICFyZWNpcGllbnQucGVuZGluZykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGFjdGlvbkluZGljYXRvciA9IHtcclxuICAgICAgICAgICAgICAgIGlkOiBub2QuaWQgKyAnYWN0aW9uJyxcclxuICAgICAgICAgICAgICAgIHNoYXBlOiB7XHJcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdQYXRoJyxcclxuICAgICAgICAgICAgICAgICAgZGF0YTogYWN0aW9uLnNoYXBlLFxyXG4gICAgICAgICAgICAgICAgICBhbGlnbjogdGhpcy5fc2Vzc2lvbi5pbnZlcnNlID8gJ1hNaW5ZTWF4JyA6ICdYTWF4WU1heCcsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgZmlsbDogYWN0aW9uLmNvbG9yIHx8IHRoaXMuX3Nlc3Npb24uZ2V0QWNjZW50KDkwMClcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBhZGRJbmZvOiB7XHJcbiAgICAgICAgICAgICAgICAgIGluZGljYXRvcjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IG5vZC5pZFxyXG4gICAgICAgICAgICAgICAgfSBhcyBOb2RlSW5mb01vZGVsXHJcbiAgICAgICAgICAgICAgfSBhcyBOb2RlTW9kZWw7XHJcbiAgICAgICAgICAgICAgaW5kaWNhdG9ycy5wdXNoKGFjdGlvbkluZGljYXRvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChyZWNpcGllbnQucGVuZGluZyAmJiAhcmVjaXBpZW50LmVzdGltYXRlKVxyXG4gICAgICAgICAgICBpbmRpY2F0b3JzLnB1c2goe1xyXG4gICAgICAgICAgICAgIGlkOiBub2QuaWQgKyAncGVuZGluZycsXHJcbiAgICAgICAgICAgICAgc2hhcGU6IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdQYXRoJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IFBFTkRJTkdfUEFUSCxcclxuICAgICAgICAgICAgICAgIGFsaWduOiB0aGlzLl9zZXNzaW9uLmludmVyc2UgPyAnWE1heFlNYXgnIDogJ1hNaW5ZTWF4J1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgIGZpbGw6IHRoaXMuX3Nlc3Npb24uZ2V0QWNjZW50KDkwMClcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGFkZEluZm86IHtcclxuICAgICAgICAgICAgICAgIGluZGljYXRvcjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHBhcmVudElkOiBub2QuaWRcclxuICAgICAgICAgICAgICB9IGFzIE5vZGVJbmZvTW9kZWxcclxuICAgICAgICAgICAgfSBhcyBOb2RlTW9kZWwpO1xyXG4gICAgICAgICAgaWYgKHJlY2lwaWVudC5meWkpXHJcbiAgICAgICAgICAgIGluZGljYXRvcnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgaWQ6IG5vZC5pZCArICdmeWknLFxyXG4gICAgICAgICAgICAgIHNoYXBlOiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnUGF0aCcsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiBGWUlfUEFUSCxcclxuICAgICAgICAgICAgICAgIGFsaWduOiB0aGlzLl9zZXNzaW9uLmludmVyc2UgPyAnWE1pbllNYXgnIDogJ1hNYXhZTWF4J1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgIGZpbGw6ICcjMTk3NmQyJ1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgYWRkSW5mbzoge1xyXG4gICAgICAgICAgICAgICAgaW5kaWNhdG9yOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50SWQ6IG5vZC5pZFxyXG4gICAgICAgICAgICAgIH0gYXMgTm9kZUluZm9Nb2RlbFxyXG4gICAgICAgICAgICB9IGFzIE5vZGVNb2RlbFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgLy8gIGlmICh0aGlzLm1vZGVsLmxvZy5maWx0ZXIobCA9PiBsLnRpbWUgPiB0aGlzLl9zdWJtaXR0ZWQgJiYgbC50eXBlID09PSAnRXNjYWxhdGlvbicgJiYgbC5yZWNpcGllbnRJZCA9PT0gcmVjaXBpZW50LmlkKS5sZW5ndGgpIHtcclxuICAgICAgICAgIC8vICAgIGNvbnN0IGVzY2FsYXRlSW5kaWNhdG9yID0ge1xyXG4gICAgICAgICAgLy8gICAgICBpZDogbm9kLmlkICsgJ2VzY2FsYXRlJyxcclxuICAgICAgICAgIC8vICAgICAgc2hhcGU6IHtcclxuICAgICAgICAgIC8vICAgICAgICB0eXBlOiAnUGF0aCcsXHJcbiAgICAgICAgICAvLyAgICAgICAgZGF0YTogRVNDQUxBVEVEX1BBVEgsXHJcbiAgICAgICAgICAvLyAgICAgICAgYWxpZ246IHRoaXMuX3Nlc3Npb24uaW52ZXJzZSA/ICdYTWluWU1heCcgOiAnWE1heFlNYXgnXHJcbiAgICAgICAgICAvLyAgICAgIH0sXHJcbiAgICAgICAgICAvLyAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAvLyAgICAgICAgZmlsbDogdGhpcy5fc2Vzc2lvbi5nZXRBY2NlbnQoOTAwKVxyXG4gICAgICAgICAgLy8gICAgICB9LFxyXG4gICAgICAgICAgLy8gICAgICBhZGRJbmZvOiB7XHJcbiAgICAgICAgICAvLyAgICAgICAgaW5kaWNhdG9yOiB0cnVlLFxyXG4gICAgICAgICAgLy8gICAgICAgIHBhcmVudElkOiBub2QuaWRcclxuICAgICAgICAgIC8vICAgICAgfSBhcyBOb2RlSW5mb01vZGVsXHJcbiAgICAgICAgICAvLyAgICB9IGFzIE5vZGVNb2RlbDtcclxuICAgICAgICAgIC8vICAgIGluZGljYXRvcnMucHVzaChlc2NhbGF0ZUluZGljYXRvcik7XHJcbiAgICAgICAgICAvLyAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCB7IHN0YXRlLCBhbm5vdGF0aW9uLCB0b29sdGlwIH0gPSBhd2FpdCB0aGlzLl9zaGFwZShub2RlKTtcclxuICAgICAgICBjb25zdCB7IHNoYXBlIH0gPSBjb25maWd1cmF0aW9uO1xyXG4gICAgICAgIG5vZGVzLnB1c2goe1xyXG4gICAgICAgICAgaWQ6IG5vZGUuaWQsXHJcbiAgICAgICAgICBzaGFwZSxcclxuICAgICAgICAgIHpJbmRleDogekluZGV4KyssXHJcbiAgICAgICAgICB0b29sdGlwOiB7XHJcbiAgICAgICAgICAgIGNvbnRlbnQ6IHRoaXMuX3Rvb2x0aXAodG9vbHRpcCksXHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnVG9wQ2VudGVyJ1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNvbnN0cmFpbnRzOiBPYmplY3Qua2V5cyh0b29sdGlwKS5sZW5ndGggPyBOb2RlQ29uc3RyYWludHMuRGVmYXVsdCB8IE5vZGVDb25zdHJhaW50cy5Ub29sdGlwIDogTm9kZUNvbnN0cmFpbnRzLkRlZmF1bHQsXHJcbiAgICAgICAgICBhZGRJbmZvOiB7XHJcbiAgICAgICAgICAgIHRvb2x0aXAsXHJcbiAgICAgICAgICAgIG5vZGVcclxuICAgICAgICAgIH0gYXMgTm9kZUluZm9Nb2RlbCxcclxuICAgICAgICAgIGFubm90YXRpb25zOiBbe1xyXG4gICAgICAgICAgICBjb250ZW50OiBhbm5vdGF0aW9uLFxyXG4gICAgICAgICAgICBvZmZzZXQ6IHNoYXBlLnR5cGUgPT09ICdQYXRoJyA/IHtcclxuICAgICAgICAgICAgICB5OiAxXHJcbiAgICAgICAgICAgIH0gOiB7IHg6IC41IH0sXHJcbiAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgLy9ib2xkOiB0cnVlXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHZlcnRpY2FsQWxpZ25tZW50OiBzaGFwZS50eXBlID09PSAnUGF0aCcgPyAnVG9wJyA6ICdDZW50ZXInXHJcbiAgICAgICAgICB9XVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChzdGF0ZSAmJiBzdGF0ZS5zaGFwZSAmJiAhbm9kZS5lc3RpbWF0ZSlcclxuICAgICAgICAgIGluZGljYXRvcnMucHVzaCh7XHJcbiAgICAgICAgICAgIGlkOiBub2RlLmlkICsgJ3N0YXRlJyxcclxuICAgICAgICAgICAgc2hhcGU6IHtcclxuICAgICAgICAgICAgICB0eXBlOiAnUGF0aCcsXHJcbiAgICAgICAgICAgICAgZGF0YTogc3RhdGUuc2hhcGUsXHJcbiAgICAgICAgICAgICAgYWxpZ246IHRoaXMuX3Nlc3Npb24uaW52ZXJzZSA/ICdYTWF4WU1heCcgOiAnWE1pbllNYXgnXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgZmlsbDogc3RhdGUuY29sb3IgfHwgJ2JsYWNrJ1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBhZGRJbmZvOiB7XHJcbiAgICAgICAgICAgICAgaW5kaWNhdG9yOiB0cnVlLFxyXG4gICAgICAgICAgICAgIHBhcmVudElkOiBub2RlLmlkLFxyXG4gICAgICAgICAgICAgIG5vZGU6IG5vZGVcclxuICAgICAgICAgICAgfSBhcyBOb2RlSW5mb01vZGVsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICBpZiAobm9kZS5lcnJvcikge1xyXG4gICAgICAgICAgY29uc3Qgd2Fybm5pbmdJbmRpY2F0b3IgPSB7XHJcbiAgICAgICAgICAgIGlkOiBub2RlLmlkICsgJ2V4Y2VwdGlvbicsXHJcbiAgICAgICAgICAgIHNoYXBlOiB7XHJcbiAgICAgICAgICAgICAgdHlwZTogJ1BhdGgnLFxyXG4gICAgICAgICAgICAgIGRhdGE6IFdBUk5OSU5HX1BBVEgsXHJcbiAgICAgICAgICAgICAgYWxpZ246IHRoaXMuX3Nlc3Npb24uaW52ZXJzZSA/ICdYTWluWU1heCcgOiAnWE1heFlNYXgnXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgZmlsbDogZ2V0V2Fybig4MDApXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGFkZEluZm86IHtcclxuICAgICAgICAgICAgICBpbmRpY2F0b3I6IHRydWUsXHJcbiAgICAgICAgICAgICAgcGFyZW50SWQ6IG5vZGUuaWRcclxuICAgICAgICAgICAgfSBhcyBOb2RlSW5mb01vZGVsXHJcbiAgICAgICAgICB9IGFzIE5vZGVNb2RlbDtcclxuICAgICAgICAgIGluZGljYXRvcnMucHVzaCh3YXJubmluZ0luZGljYXRvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGNvbm5lY3RvclxyXG4gICAgICogQHBhcmFtIGluZGV4XHJcbiAgICAgKiBAcGFyYW0gdmNvbm5lY3RvcnNcclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gcmVyb3V0ZShjb25uZWN0b3I6IENvbm5lY3RvckluZm8sIGluZGV4OiBudW1iZXIpIHtcclxuICAgICAgd2hpbGUgKGluZGV4IDwgZGNvbm5lY3RvcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgbGV0IGRjb25uZWN0b3IgPSBkY29ubmVjdG9yc1tpbmRleF07XHJcbiAgICAgICAgaWYgKGRjb25uZWN0b3Iuc291cmNlSWQgPT09IGNvbm5lY3Rvci50YXJnZXRJZCkge1xyXG4gICAgICAgICAgaWYgKG5vZGVzLnNvbWUobiA9PiBuLmlkID09PSBkY29ubmVjdG9yLnRhcmdldElkKSlcclxuICAgICAgICAgICAgY29ubmVjdG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgICBzb3VyY2VJRDogY29ubmVjdG9yLnNvdXJjZUlkLFxyXG4gICAgICAgICAgICAgIHRhcmdldElEOiBkY29ubmVjdG9yLnRhcmdldElkLFxyXG4gICAgICAgICAgICAgIGFkZEluZm86IHtcclxuICAgICAgICAgICAgICAgIGVzdGltYXRlOiBkY29ubmVjdG9yLmVzdGltYXRlLFxyXG4gICAgICAgICAgICAgICAgdGltZTogZGNvbm5lY3Rvci50aW1lXHJcbiAgICAgICAgICAgICAgfSBhcyBDb25uZWN0b3JJbmZvTW9kZWxcclxuICAgICAgICAgICAgfSBhcyBDb25uZWN0b3JNb2RlbCk7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHJlcm91dGUoe1xyXG4gICAgICAgICAgICAgIHRpbWU6IGRjb25uZWN0b3IudGltZSxcclxuICAgICAgICAgICAgICB0YXJnZXRJZDogZGNvbm5lY3Rvci50YXJnZXRJZCxcclxuICAgICAgICAgICAgICBlc3RpbWF0ZTogZGNvbm5lY3Rvci5lc3RpbWF0ZSxcclxuICAgICAgICAgICAgICBzb3VyY2VJZDogY29ubmVjdG9yLnNvdXJjZUlkXHJcbiAgICAgICAgICAgIH0sIGluZGV4ICsgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGluZGV4Kys7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7IGNvbm5lY3RvcnMsIG5vZGVzLCBpbmRpY2F0b3JzIH07XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBub2RlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBfc2hhcGUobm9kZTogTm9kZUluZm8pOiBQcm9taXNlPHsgc3RhdGU6IFN0YXRlOyBhbm5vdGF0aW9uOiBzdHJpbmc7IHRvb2x0aXA6IE5vZGVUb29sdGlwTW9kZWw7IH0+IHtcclxuICAgIGNvbnN0IHRvb2x0aXAgPSB7fSBhcyBOb2RlVG9vbHRpcE1vZGVsO1xyXG4gICAgaWYgKG5vZGUuZXJyb3IpIHRvb2x0aXAuZXJyb3IgPSBub2RlLmVycm9yO1xyXG4gICAgbGV0IGFubm90YXRpb246IHN0cmluZywgc3RhdGU6IFN0YXRlO1xyXG4gICAgY29uc3QgbG9nID0gdGhpcy5tb2RlbC5sb2cuZmlsdGVyKGwgPT4gbC5ub2RlSWQgPT09IG5vZGUuaWQgJiYgbC50aW1lID49IHRoaXMuX2lzc3VlZCk7XHJcbiAgICBjb25zdCBzdGF0ZUxvZyA9IGxvZy5maW5kKGwgPT4gbC50eXBlID09PSAnU3RhdGVDaGFuZ2UnKTtcclxuICAgIGlmIChzdGF0ZUxvZykge1xyXG4gICAgICBzdGF0ZSA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5zdGF0ZXMuZmluZChzID0+IHMubmFtZSA9PT0gc3RhdGVMb2cuc3RhdGUpO1xyXG5cclxuICAgICAgYW5ub3RhdGlvbiA9IHN0YXRlID8gKChub2RlLmVzdGltYXRlID8gc3RhdGUuZnV0dXJlIDogc3RhdGUucGFzdCkgfHwgc3RhdGUudGl0bGUpIDogc3RhdGVMb2cuc3RhdGU7XHJcbiAgICB9XHJcbiAgICBpZiAobm9kZS50eXBlID09PSBTVEFSVF9OT0RFKSB7XHJcbiAgICAgIGlmICghbm9kZS5lc3RpbWF0ZSkge1xyXG4gICAgICAgIGNvbnN0IHsgbm90ZSwgcm9sZSB9ID0gYXdhaXQgdGhpcy5fc3RhcnROb2RlKCk7XHJcbiAgICAgICAgdG9vbHRpcC5ub3RlID0gbm90ZSxcclxuICAgICAgICAgIHRvb2x0aXAucm9sZSA9IHJvbGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKG5vZGUuZXN0aW1hdGUpXHJcbiAgICAgIHRvb2x0aXAuZXN0aW1hdGVkVGltZSA9IHRoaXMuX3RpbWVFc3RpbWF0ZShub2RlKTtcclxuICAgIHJldHVybiB7IHN0YXRlLCB0b29sdGlwLCBhbm5vdGF0aW9uIH07XHJcbiAgfVxyXG4gIHJlc2l6ZSgpIHtcclxuICAgIGlmICh0aGlzLmRpYWdyYW0pIHRoaXMuZGlhZ3JhbS53aWR0aCA9ICdhdXRvJztcclxuICB9XHJcbiAgcHJpdmF0ZSBfdGltZUVzdGltYXRlKG5vZGU6IE5vZGVJbmZvKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHsgbWluLCBtYXggfSA9IHN1cGVyLl9lc3RpbWF0ZVRpbWUobm9kZSk7XHJcbiAgICBpZiAobWF4KVxyXG4gICAgICByZXR1cm4gIW1pbiB8fCBtaW4gPT09IG1heCA/XHJcbiAgICAgICAgdGhpcy5fdHJhbnNsYXRlLmdldCgnRXN0aW1hdGVUaW1lJywgdGhpcy5fZHVyYXRpb24udHJhbnNmb3JtKG1heCkpIDpcclxuICAgICAgICB0aGlzLl90cmFuc2xhdGUuZ2V0KCdFc3RpbWF0ZVRpbWVSYW5nZScsIHRoaXMuX2R1cmF0aW9uLnRyYW5zZm9ybShtaW4pLCB0aGlzLl9kdXJhdGlvbi50cmFuc2Zvcm0obWF4KSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3Rvb2x0aXAob2JqOiBOb2RlVG9vbHRpcE1vZGVsKSB7XHJcbiAgICBjb25zdCB7IG5vdGUsIHJvbGUsIHN1YnN0aXR1dGluZywgZXNjYWxhdGlvbiwgZHVyYXRpb24sIHN0YW5kYXJkVGltZSwgZXN0aW1hdGVkVGltZSwgZXJyb3IsIGZ5aSB9ID0gb2JqXHJcbiAgICBjb25zdCByb3dzID0gW2Vycm9yLCBub3RlLCByb2xlLCBzdWJzdGl0dXRpbmcsIGVzY2FsYXRpb24sIGZ5aSwgZHVyYXRpb24sIHN0YW5kYXJkVGltZSwgZXN0aW1hdGVkVGltZV07XHJcbiAgICBsZXQgZGl2OiBIVE1MRGl2RWxlbWVudDtcclxuICAgIHJvd3MuZm9yRWFjaChyID0+IHtcclxuICAgICAgaWYgKCFyKSByZXR1cm47XHJcbiAgICAgIGlmICghZGl2KSBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcclxuICAgICAgc3Bhbi5pbm5lclRleHQgPSByO1xyXG4gICAgICBkaXYuYXBwZW5kKHNwYW4pO1xyXG4gICAgICBjb25zdCBiciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JyJyk7XHJcbiAgICAgIGRpdi5hcHBlbmQoYnIpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZGl2O1xyXG4gIH1cclxuICBwcml2YXRlIGFzeW5jIF9zdGFydE5vZGUoKTogUHJvbWlzZTx7XHJcbiAgICBub3RlOiBzdHJpbmcsIHJvbGU6IHN0cmluZztcclxuICB9PiB7XHJcbiAgICBsZXQgd2hvOiBVc2VySW5mbyB8ICd5b3UnLCBieTogVXNlckluZm8gfCAneW91JztcclxuICAgIGlmICh0aGlzLm1vZGVsLm93bmVySWQgPT09IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS51c2VySWQgJiYgIXRoaXMuX3Nlc3Npb24uaXNJbXBlcnNvbmF0aW5nKVxyXG4gICAgICB3aG8gPSBZb3U7XHJcbiAgICBlbHNlXHJcbiAgICAgIHdobyA9IGF3YWl0IHRoaXMuX2FjY291bnRzLmdldCh0aGlzLm1vZGVsLm93bmVySWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgaWYgKHRoaXMubW9kZWwub3duZXJCeUlkKSB7XHJcbiAgICAgIGlmICh0aGlzLm1vZGVsLm93bmVyQnlJZCA9PT0gdGhpcy5fc2Vzc2lvbi51c2VySWQpXHJcbiAgICAgICAgYnkgPSBZb3U7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBieSA9IGF3YWl0IHRoaXMuX2FjY291bnRzLmdldCh0aGlzLm1vZGVsLm93bmVyQnlJZCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcbiAgICBsZXQgbm90ZTogc3RyaW5nLCByb2xlOiBzdHJpbmc7XHJcbiAgICBpZiAoYnkpIHtcclxuICAgICAgaWYgKGJ5ID09PSBZb3UpXHJcbiAgICAgICAgbm90ZSA9XHJcbiAgICAgICAgICB0aGlzLl90cmFuc2xhdGUuZ2V0KCdTdWJtaXR0ZWROb3RlQnlZb3UnLFxyXG4gICAgICAgICAgICB3aG8gPT09IFlvdSA/IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1lvdScpIDogKHdobyBhcyBVc2VySW5mbykubmFtZSxcclxuICAgICAgICAgICAgdGhpcy5fZnJvbU5vdyh0aGlzLm1vZGVsLmlzc3VlZCkpO1xyXG5cclxuICAgICAgZWxzZVxyXG4gICAgICAgIG5vdGUgPVxyXG4gICAgICAgICAgdGhpcy5fdHJhbnNsYXRlLmdldCgnU3VibWl0dGVkTm90ZUJ5JyxcclxuICAgICAgICAgICAgd2hvID09PSBZb3UgPyB0aGlzLl90cmFuc2xhdGUuZ2V0KCdZb3UnKSA6ICh3aG8gYXMgVXNlckluZm8pLm5hbWUsXHJcbiAgICAgICAgICAgIChieSBhcyBVc2VySW5mbykubmFtZSxcclxuICAgICAgICAgICAgdGhpcy5fZnJvbU5vdyh0aGlzLm1vZGVsLmlzc3VlZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKHdobyA9PT0gWW91KVxyXG4gICAgICBub3RlID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnWW91U3VibWl0dGVkTm90ZScsIHRoaXMuX2Zyb21Ob3codGhpcy5tb2RlbC5pc3N1ZWQpKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgIG5vdGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdTdWJtaXR0ZWROb3RlJywgKHdobyBhcyBVc2VySW5mbykubmFtZSwgdGhpcy5fZnJvbU5vdyh0aGlzLm1vZGVsLmlzc3VlZCkpO1xyXG4gICAgaWYgKHdobyAhPT0gWW91ICYmIHdoby5yb2xlKVxyXG4gICAgICByb2xlID0gYC0gJHt3aG8ucm9sZX1gO1xyXG4gICAgcmV0dXJuIHsgbm90ZSwgcm9sZSB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfbm90ZShub2RlOiBOb2RlSW5mbywgcmVjaXBpZW50OiBSZWNpcGllbnQpOiBQcm9taXNlPHsgYW5ub3RhdGlvbjogc3RyaW5nOyB0b29sdGlwOiBOb2RlVG9vbHRpcE1vZGVsIH0+IHtcclxuICAgIGNvbnN0IHRvb2x0aXA6IE5vZGVUb29sdGlwTW9kZWwgPSB7fTtcclxuXHJcbiAgICBsZXQgYW5ub3RhdGlvbjogc3RyaW5nO1xyXG5cclxuICAgIC8vIHlvdVxyXG4gICAgaWYgKChyZWNpcGllbnQuYnlJZCB8fCByZWNpcGllbnQudXNlcklkKSA9PT0gdGhpcy5fc2Vzc2lvbi51c2VySWQpIHtcclxuICAgICAgYW5ub3RhdGlvbiA9IHRoaXMuX3Nlc3Npb24uaXNJbXBlcnNvbmF0aW5nID8gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLm5hbWUgOiB0aGlzLl90cmFuc2xhdGUuZ2V0KCdZb3UnKTtcclxuICAgICAgaWYgKHJlY2lwaWVudC5yZXBsaWVkKSB7XHJcbiAgICAgICAgY29uc3QgdGltZSA9IHRoaXMuX2Zyb21Ob3cocmVjaXBpZW50LnJlcGxpZWQpO1xyXG4gICAgICAgIGlmIChyZWNpcGllbnQuYnlJZCkge1xyXG4gICAgICAgICAgaWYgKHJlY2lwaWVudC5ieUlkID09PSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuYnlJZCkge1xyXG4gICAgICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLl9hY3Rpb24ocmVjaXBpZW50LmFjdGlvbiwgdGhpcy5fc2Vzc2lvbi5nZW5kZXIpO1xyXG4gICAgICAgICAgICBpZiAocmVjaXBpZW50LnRvSWQpIHtcclxuICAgICAgICAgICAgICBjb25zdCB0byA9IGF3YWl0IHRoaXMuX2FjY291bnRzLmdldChyZWNpcGllbnQudG9JZCkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgICAgICAgdG9vbHRpcC5ub3RlID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnQWN0aW9uVGFrZW5CeVlvdVRvJywgYWN0aW9uLCB0by5uYW1lLCB0aGlzLl9zZXNzaW9uLnByb2ZpbGUubmFtZSwgdGltZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0FjdGlvblRha2VuQnlZb3UnLCBhY3Rpb24sIHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5uYW1lLCB0aW1lKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBieSA9IGF3YWl0IHRoaXMuX2FjY291bnRzLmdldChyZWNpcGllbnQuYnlJZCkudG9Qcm9taXNlKClcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5fYWN0aW9uKHJlY2lwaWVudC5hY3Rpb24sIGJ5LmdlbmRlcik7XHJcbiAgICAgICAgICAgIGlmIChyZWNpcGllbnQudG9JZCkgeyBcclxuICAgICAgICAgICAgICBjb25zdCB0byA9IGF3YWl0IHRoaXMuX2FjY291bnRzLmdldChyZWNpcGllbnQudG9JZCkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgICAgICAgdG9vbHRpcC5ub3RlID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnWW91VGFrZW5BY3Rpb25CeVRvJywgYnkubmFtZSwgYWN0aW9uLCB0by5uYW1lLCB0aW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgdG9vbHRpcC5ub3RlID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnWW91VGFrZW5BY3Rpb25CeScsIGJ5Lm5hbWUsIGFjdGlvbiwgdGltZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHJlY2lwaWVudC50b0lkKSB7XHJcbiAgICAgICAgICBjb25zdCB0byA9IGF3YWl0IHRoaXMuX2FjY291bnRzLmdldChyZWNpcGllbnQudG9JZCkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLl9hY3Rpb24ocmVjaXBpZW50LmFjdGlvbiwgdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmdlbmRlcik7XHJcbiAgICAgICAgICBpZiAodGhpcy5fc2Vzc2lvbi5pc0ltcGVyc29uYXRpbmcpXHJcbiAgICAgICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0FjdGlvblRha2VuVG8nLCB0aGlzLl9zZXNzaW9uLnByb2ZpbGUubmFtZSwgYWN0aW9uLCB0by5uYW1lLCB0aW1lKTtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdG9vbHRpcC5ub3RlID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnWW91VGFrZW5BY3Rpb25UbycsIGFjdGlvbiwgdG8ubmFtZSwgdGltZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX3Nlc3Npb24uaXNJbXBlcnNvbmF0aW5nKSB7XHJcbiAgICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLl9hY3Rpb24ocmVjaXBpZW50LmFjdGlvbiwgdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmdlbmRlcik7XHJcbiAgICAgICAgICB0b29sdGlwLm5vdGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdBY3Rpb25UYWtlbicsIHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5uYW1lLCBhY3Rpb24sIHRpbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuX2FjdGlvbihyZWNpcGllbnQuYWN0aW9uLCBZb3UpO1xyXG4gICAgICAgICAgdG9vbHRpcC5ub3RlID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnWW91VGFrZW5BY3Rpb24nLCBhY3Rpb24sIHRpbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICghbm9kZS5lc3RpbWF0ZSkge1xyXG4gICAgICAgIGNvbnN0IHRpbWUgPSB0aGlzLl9mcm9tTm93KHJlY2lwaWVudC5yZWNlaXZlZCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX3Nlc3Npb24uaXNJbXBlcnNvbmF0aW5nKVxyXG4gICAgICAgICAgdG9vbHRpcC5ub3RlID0gdGhpcy5fdHJhbnNsYXRlLnBlcnNvbmFsaXplKCdSZWNlaXZlZEJ5JywgdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmdlbmRlciwgdGhpcy5fc2Vzc2lvbi5wcm9maWxlLm5hbWUsIHRpbWUpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1lvdVJlY2VpdmVkJywgdGltZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJlY2lwaWVudC5yb2xlKSB7XHJcbiAgICAgICAgY29uc3QgY3JvbGUgPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUucm9sZXMuZmluZChvID0+IG8ubmFtZSA9PT0gcmVjaXBpZW50LnJvbGUpO1xyXG4gICAgICAgIGlmIChjcm9sZSkgdG9vbHRpcC5yb2xlID0gYC0gJHtjcm9sZS50aXRsZX1gOyBcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgLy8gc29tZW9uZSBlbHNlXHJcbiAgICB7XHJcbiAgICAgIGNvbnN0IHdobyA9IGF3YWl0IHRoaXMuX2FjY291bnRzLmdldChyZWNpcGllbnQudXNlcklkKS50b1Byb21pc2UoKTtcclxuICAgICAgYW5ub3RhdGlvbiA9IHdoby5uYW1lO1xyXG4gICAgICBpZiAod2hvLnJvbGUpIHRvb2x0aXAucm9sZSA9IGAtICR7d2hvLnJvbGV9YDtcclxuICAgICAgZWxzZSBpZiAocmVjaXBpZW50LnJvbGUpIHtcclxuICAgICAgICBjb25zdCBjcm9sZSA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5yb2xlcy5maW5kKG8gPT4gby5uYW1lID09PSByZWNpcGllbnQucm9sZSk7XHJcbiAgICAgICAgaWYgKGNyb2xlKSB0b29sdGlwLnJvbGUgPSBgLSAke2Nyb2xlLnRpdGxlfWA7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJlY2lwaWVudC5yZXBsaWVkKSB7XHJcbiAgICAgICAgY29uc3QgdGltZSA9IHRoaXMuX2Zyb21Ob3cocmVjaXBpZW50LnJlcGxpZWQpO1xyXG4gICAgICAgIGlmIChyZWNpcGllbnQuYnlJZCkge1xyXG4gICAgICAgICAgY29uc3QgYnkgPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQocmVjaXBpZW50LmJ5SWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5fYWN0aW9uKHJlY2lwaWVudC5hY3Rpb24sIGJ5LmdlbmRlcik7XHJcbiAgICAgICAgICBpZiAocmVjaXBpZW50LnRvSWQpIHtcclxuICAgICAgICAgICAgY29uc3QgdG8gPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQocmVjaXBpZW50LnRvSWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgICB0b29sdGlwLm5vdGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdBY3Rpb25UYWtlbkJ5VG8nLCBieS5uYW1lLCBhY3Rpb24sIHRvLm5hbWUsIHdoby5uYW1lLCB0aW1lKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdG9vbHRpcC5ub3RlID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnQWN0aW9uVGFrZW5CeScsIGJ5Lm5hbWUsIGFjdGlvbiwgd2hvLm5hbWUsIHRpbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChyZWNpcGllbnQudG9JZCkge1xyXG4gICAgICAgICAgY29uc3QgdG8gPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQocmVjaXBpZW50LnRvSWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5fYWN0aW9uKHJlY2lwaWVudC5hY3Rpb24sIHdoby5nZW5kZXIpO1xyXG4gICAgICAgICAgdG9vbHRpcC5ub3RlID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnQWN0aW9uVGFrZW5UbycsIHdoby5uYW1lLCBhY3Rpb24sIHRvLm5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuX2FjdGlvbihyZWNpcGllbnQuYWN0aW9uLCB3aG8uZ2VuZGVyKTtcclxuICAgICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0FjdGlvblRha2VuJywgd2hvLm5hbWUsIGFjdGlvbiwgdGltZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKCFyZWNpcGllbnQuZXN0aW1hdGUpIHtcclxuICAgICAgICBjb25zdCB0aW1lID0gdGhpcy5fZnJvbU5vdyhyZWNpcGllbnQucmVjZWl2ZWQpO1xyXG4gICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5wZXJzb25hbGl6ZSgnUmVjZWl2ZWRUaW1lJywgd2hvLmdlbmRlciwgdGltZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChyZWNpcGllbnQuc3Vic3RpdHV0aW5nSWQpIHtcclxuICAgICAgaWYgKHJlY2lwaWVudC5zdWJzdGl0dXRpbmdJZCA9PT0gdGhpcy5fc2Vzc2lvbi51c2VySWQpXHJcbiAgICAgICAgdG9vbHRpcC5zdWJzdGl0dXRpbmcgPSB0aGlzLl90cmFuc2xhdGUucGVyc29uYWxpemUoJ1N1YnN0aXR1dGluZ1lvdScsIHRoaXMuX3Nlc3Npb24uZ2VuZGVyKTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc3Qgc3Vic3RpdHV0aW5nID0gYXdhaXQgdGhpcy5fYWNjb3VudHMuZ2V0KHJlY2lwaWVudC5zdWJzdGl0dXRpbmdJZCkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgdG9vbHRpcC5zdWJzdGl0dXRpbmcgPSB0aGlzLl90cmFuc2xhdGUucGVyc29uYWxpemUoJ1N1YnN0aXR1dGluZ0ZvcicsIHN1YnN0aXR1dGluZy5nZW5kZXIsIHN1YnN0aXR1dGluZy5uYW1lKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgZXNjYWxhdGlvbnMgPSB0aGlzLm1vZGVsLmxvZy5maWx0ZXIobCA9PiBsLnRpbWUgPiB0aGlzLl9pc3N1ZWQgJiYgbC50eXBlID09PSAnRXNjYWxhdGlvbicgJiYgbC5yZWNpcGllbnRJZCA9PT0gcmVjaXBpZW50LmlkKTtcclxuICAgIGlmIChlc2NhbGF0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgdXNlcklkcyA9IGVzY2FsYXRpb25zLm1hcChlID0+IGUudXNlcklkKTtcclxuICAgICAgY29uc3QgdXNlcnMgPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXRBbGwodXNlcklkcykudG9Qcm9taXNlKCk7XHJcbiAgICAgIGNvbnN0IGR1cmF0aW9uID0gdGhpcy5fZHVyYXRpb24udHJhbnNmb3JtKGRheWpzKGVzY2FsYXRpb25zW2VzY2FsYXRpb25zLmxlbmd0aCAtIDFdLnRpbWUpLmRpZmYocmVjaXBpZW50LnJlY2VpdmVkLCAncycpKTtcclxuICAgICAgdG9vbHRpcC5lc2NhbGF0aW9uID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnRXNjYWxhdGVkVG8nLCB0aGlzLl90cmFuc2xhdGUuam9pbih1c2Vycy5tYXAodSA9PiB1Lm5hbWUpKSwgZHVyYXRpb24pO1xyXG4gICAgfVxyXG4gICAgaWYgKHJlY2lwaWVudC5yZXBsaWVkKSB7XHJcbiAgICAgIGNvbnN0IGR1cmF0aW9uID0gZGF5anMocmVjaXBpZW50LnJlcGxpZWQpLmRpZmYocmVjaXBpZW50LnJlY2VpdmVkLCAncycpO1xyXG4gICAgICB0b29sdGlwLmR1cmF0aW9uID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnRHVyYXRpb25UaW1lJywgdGhpcy5fZHVyYXRpb24udHJhbnNmb3JtKGR1cmF0aW9uKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChyZWNpcGllbnQucGVuZGluZykge1xyXG4gICAgICBpZiAocmVjaXBpZW50LmVzdGltYXRlKSB0b29sdGlwLmVzdGltYXRlZFRpbWUgPSB0aGlzLl90aW1lRXN0aW1hdGUobm9kZSk7XHJcbiAgICAgIGVsc2UgaWYgKG5vZGUuc3RhbmRhcmRUaW1lKSB7XHJcbiAgICAgICAgY29uc3QgZGlmZiA9IG5vZGUuc3RhbmRhcmRUaW1lIC0gZGF5anMoKS5kaWZmKG5vZGUudGltZSwgJ3MnKTtcclxuICAgICAgICBpZiAoZGlmZiA+IDApXHJcbiAgICAgICAgICB0b29sdGlwLmVzdGltYXRlZFRpbWUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdFc3RpbWF0ZVRpbWUnLCB0aGlzLl9kdXJhdGlvbi50cmFuc2Zvcm0oZGlmZikpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChub2RlLnN0YW5kYXJkVGltZSlcclxuICAgICAgdG9vbHRpcC5zdGFuZGFyZFRpbWUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdOb2RlU3RhbmRhcmRUaW1lJywgdGhpcy5fZHVyYXRpb24udHJhbnNmb3JtKG5vZGUuc3RhbmRhcmRUaW1lKSk7XHJcbiAgICBpZiAocmVjaXBpZW50LmZ5aSlcclxuICAgICAgdG9vbHRpcC5meWkgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdGWUknKTtcclxuICAgIHJldHVybiB7IGFubm90YXRpb24sIHRvb2x0aXAgfTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfYWN0aW9uKG5hbWU6IHN0cmluZywgZ2VuZGVyPzogR2VuZGVyIHwgJ3lvdScpIHtcclxuICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5hY3Rpb25zLmZpbmQoYSA9PiBhLm5hbWUgPT09IG5hbWUpO1xyXG4gICAgaWYgKCFhY3Rpb24pIHJldHVybiBuYW1lO1xyXG4gICAgaWYgKGdlbmRlciA9PT0gWW91KSB7XHJcbiAgICAgIGNvbnN0IGdlbmRlciA9IHRoaXMuX3Nlc3Npb24uZ2VuZGVyLCBwZXJzb25hbCA9XHJcbiAgICAgICAgKGdlbmRlciA9PT0gJ01hbGUnID8gKGFjdGlvbi55b3VNYWxlIHx8IGFjdGlvbi55b3UpIDpcclxuICAgICAgICAgIGdlbmRlciA9PT0gJ0ZlbWFsZScgPyAoYWN0aW9uLnlvdUZlbWFsZSB8fCBhY3Rpb24ueW91KSA6XHJcbiAgICAgICAgICAgIGFjdGlvbi55b3UpO1xyXG4gICAgICByZXR1cm4gKHBlcnNvbmFsIHx8XHJcbiAgICAgICAgYWN0aW9uLnBhc3QgfHxcclxuICAgICAgICBhY3Rpb24udGl0bGUpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBwYXN0ID0gKChnZW5kZXIgPT09ICdNYWxlJyA/IChhY3Rpb24ucGFzdE1hbGUgfHwgYWN0aW9uLnBhc3QpIDpcclxuICAgICAgZ2VuZGVyID09PSAnRmVtYWxlJyA/IChhY3Rpb24ucGFzdEZlbWFsZSB8fCBhY3Rpb24ucGFzdCkgOiBhY3Rpb24ucGFzdCkgfHxcclxuICAgICAgYWN0aW9uLnRpdGxlKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgcmV0dXJuIHBhc3Q7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9mcm9tTm93KGRhdGU6IERhdGUpIHtcclxuICAgIHJldHVybiBkYXlqcyhkYXRlKS5mcm9tTm93KCk7XHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcclxuICAgIHRoaXMuZGlhZ3JhbSAmJiB0aGlzLmRpYWdyYW0uZGVzdHJveSgpO1xyXG4gIH1cclxufVxyXG5pbnRlcmZhY2UgQ29ubmVjdG9ySW5mb01vZGVsIHtcclxuICBlc3RpbWF0ZT86IGJvb2xlYW47XHJcbiAgcGFyZW50SWQ6IHN0cmluZztcclxuICB0aW1lOiBEYXRlXHJcbn1cclxuaW50ZXJmYWNlIE5vZGVJbmZvTW9kZWwge1xyXG4gIHRvb2x0aXA6IE5vZGVUb29sdGlwTW9kZWw7XHJcbiAgbm9kZTogTm9kZUluZm87XHJcbiAgcmVjaXBpZW50OiBSZWNpcGllbnRcclxuICBpbmRpY2F0b3I/OiBib29sZWFuO1xyXG4gIHBhcmVudElkPzogc3RyaW5nO1xyXG59XHJcbmludGVyZmFjZSBOb2RlVG9vbHRpcE1vZGVsIHtcclxuICBmeWk/OiBzdHJpbmc7XHJcbiAgZXJyb3I/OiBzdHJpbmc7XHJcbiAgbm90ZT86IHN0cmluZztcclxuICByb2xlPzogc3RyaW5nO1xyXG4gIHN1YnN0aXR1dGluZz86IHN0cmluZztcclxuICBlc2NhbGF0aW9uPzogc3RyaW5nO1xyXG4gIHN0YW5kYXJkVGltZT86IHN0cmluZztcclxuICBkdXJhdGlvbj86IHN0cmluZztcclxuICBlc3RpbWF0ZWRUaW1lPzogc3RyaW5nO1xyXG59XHJcbiJdfQ==
|