speechrecorderng 2.25.0 → 2.25.3
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/esm2020/lib/audio/audio_display.mjs +4 -4
- package/esm2020/lib/audio/audio_player.mjs +4 -4
- package/esm2020/lib/audio/persistor.mjs +8 -1
- package/esm2020/lib/audio/ui/audio_canvas_layer_comp.mjs +7 -7
- package/esm2020/lib/audio/ui/audio_display_control.mjs +4 -4
- package/esm2020/lib/audio/ui/audio_display_scroll_pane.mjs +4 -4
- package/esm2020/lib/audio/ui/audiosignal.mjs +4 -4
- package/esm2020/lib/audio/ui/container.mjs +4 -4
- package/esm2020/lib/audio/ui/livelevel.mjs +6 -5
- package/esm2020/lib/audio/ui/scroll_pane_horizontal.mjs +4 -4
- package/esm2020/lib/audio/ui/sonagram.mjs +4 -4
- package/esm2020/lib/recorder_component.mjs +1 -1
- package/esm2020/lib/speechrecorder/project/project.service.mjs +4 -4
- package/esm2020/lib/speechrecorder/recordings/recordings.service.mjs +4 -4
- package/esm2020/lib/speechrecorder/script/script.service.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/audiorecorder.mjs +53 -35
- package/esm2020/lib/speechrecorder/session/basicrecorder.mjs +21 -18
- package/esm2020/lib/speechrecorder/session/controlpanel.mjs +46 -22
- package/esm2020/lib/speechrecorder/session/progress.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/prompting.mjs +16 -16
- package/esm2020/lib/speechrecorder/session/recorder_combi_pane.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/recording_list.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/session.service.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/session_finished_dialog.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/sessionmanager.mjs +84 -64
- package/esm2020/lib/speechrecorder/session/warning_bar.mjs +4 -4
- package/esm2020/lib/speechrecorder/spruploader.mjs +4 -4
- package/esm2020/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +4 -4
- package/esm2020/lib/speechrecorderng.component.mjs +10 -5
- package/esm2020/lib/speechrecorderng.module.mjs +8 -8
- package/esm2020/lib/spr.config.mjs +4 -4
- package/esm2020/lib/spr.module.version.mjs +2 -2
- package/esm2020/lib/ui/canvas_layer_comp.mjs +4 -4
- package/esm2020/lib/ui/message_dialog.mjs +4 -4
- package/esm2020/lib/ui/recordingitem_display.mjs +7 -7
- package/esm2020/lib/utils/scrollIntoViewToBottom.mjs +4 -4
- package/esm2020/lib/utils/wake_lock.mjs +114 -0
- package/esm2020/lib/utils/wake_lock_media.mjs +2 -0
- package/fesm2015/speechrecorderng.mjs +454 -262
- package/fesm2015/speechrecorderng.mjs.map +1 -1
- package/fesm2020/speechrecorderng.mjs +452 -262
- package/fesm2020/speechrecorderng.mjs.map +1 -1
- package/lib/audio/persistor.d.ts +4 -0
- package/lib/audio/ui/livelevel.d.ts +1 -1
- package/lib/recorder_component.d.ts +1 -0
- package/lib/speechrecorder/session/audiorecorder.d.ts +6 -3
- package/lib/speechrecorder/session/basicrecorder.d.ts +5 -4
- package/lib/speechrecorder/session/controlpanel.d.ts +7 -0
- package/lib/speechrecorder/session/sessionmanager.d.ts +9 -7
- package/lib/speechrecorderng.component.d.ts +1 -0
- package/lib/speechrecorderng.module.d.ts +1 -1
- package/lib/spr.module.version.d.ts +1 -1
- package/lib/utils/wake_lock.d.ts +23 -0
- package/lib/utils/wake_lock_media.d.ts +1 -0
- package/package.json +1 -1
|
@@ -103,7 +103,7 @@ export class AudioRecorder extends BasicRecorder {
|
|
|
103
103
|
context = AudioContextProvider.audioContextInstance();
|
|
104
104
|
}
|
|
105
105
|
catch (err) {
|
|
106
|
-
this.status =
|
|
106
|
+
this.status = 5 /* ERROR */;
|
|
107
107
|
let errMsg = 'Unknown error';
|
|
108
108
|
if (err instanceof Error) {
|
|
109
109
|
errMsg = err.message;
|
|
@@ -127,7 +127,7 @@ export class AudioRecorder extends BasicRecorder {
|
|
|
127
127
|
console.info("No audio context available!");
|
|
128
128
|
}
|
|
129
129
|
if (!context || !navigator.mediaDevices) {
|
|
130
|
-
this.status =
|
|
130
|
+
this.status = 5 /* ERROR */;
|
|
131
131
|
let errMsg = 'Browser does not support Media streams!';
|
|
132
132
|
this.statusMsg = 'ERROR: ' + errMsg;
|
|
133
133
|
this.statusAlertType = 'error';
|
|
@@ -382,7 +382,12 @@ export class AudioRecorder extends BasicRecorder {
|
|
|
382
382
|
}
|
|
383
383
|
}
|
|
384
384
|
startItem() {
|
|
385
|
+
this.status = 2 /* STARTING */;
|
|
385
386
|
super.startItem();
|
|
387
|
+
if (this.readonly) {
|
|
388
|
+
this.status = 1 /* IDLE */;
|
|
389
|
+
return;
|
|
390
|
+
}
|
|
386
391
|
this.transportActions.fwdAction.disabled = true;
|
|
387
392
|
this.transportActions.fwdNextAction.disabled = true;
|
|
388
393
|
this.transportActions.bwdAction.disabled = true;
|
|
@@ -482,17 +487,14 @@ export class AudioRecorder extends BasicRecorder {
|
|
|
482
487
|
showRecording() {
|
|
483
488
|
this.controlAudioPlayer.stop();
|
|
484
489
|
if (this.displayAudioClip) {
|
|
485
|
-
this.
|
|
486
|
-
|
|
490
|
+
let dap = this.displayAudioClip;
|
|
491
|
+
this.levelMeasure.calcBufferLevelInfos(dap.buffer, LEVEL_BAR_INTERVALL_SECONDS).then((levelInfos) => {
|
|
492
|
+
dap.levelInfos = levelInfos;
|
|
487
493
|
this.changeDetectorRef.detectChanges();
|
|
488
494
|
});
|
|
489
495
|
this.playStartAction.disabled = false;
|
|
490
496
|
}
|
|
491
497
|
else {
|
|
492
|
-
// TODO
|
|
493
|
-
// Setting to null does not trigger a change if it was null before (happens after nextitem() in AUTOPROGRESS mode)
|
|
494
|
-
// The level bar display does not clear, it shows the last captured stream
|
|
495
|
-
this.displayLevelInfos = null;
|
|
496
498
|
this.playStartAction.disabled = true;
|
|
497
499
|
// Collapse audio signal display if open
|
|
498
500
|
if (!this.audioSignalCollapsed) {
|
|
@@ -511,10 +513,16 @@ export class AudioRecorder extends BasicRecorder {
|
|
|
511
513
|
this.updateStartActionDisableState();
|
|
512
514
|
}
|
|
513
515
|
isRecording() {
|
|
514
|
-
return (this.status ===
|
|
516
|
+
return (this.status === 3 /* RECORDING */);
|
|
515
517
|
}
|
|
516
518
|
isActive() {
|
|
517
|
-
return (!(this.status === 0 /* BLOCKED */ || this.status === 1 /* IDLE */ || this.status ===
|
|
519
|
+
return (!(this.status === 0 /* BLOCKED */ || this.status === 1 /* IDLE */ || this.status === 5 /* ERROR */) || this.processingRecording || this.sessionService.uploadCount > 0);
|
|
520
|
+
}
|
|
521
|
+
updateWakeLock(dataSaved = this.dataSaved) {
|
|
522
|
+
//console.debug("Update wake lock: dataSaved: "+dataSaved+", not active: "+! this.isActive())
|
|
523
|
+
if (dataSaved && !this.isActive()) {
|
|
524
|
+
this.disableWakeLockCond();
|
|
525
|
+
}
|
|
518
526
|
}
|
|
519
527
|
updateNavigationActions() {
|
|
520
528
|
this.transportActions.fwdAction.disabled = this.navigationDisabled;
|
|
@@ -534,6 +542,7 @@ export class AudioRecorder extends BasicRecorder {
|
|
|
534
542
|
}
|
|
535
543
|
}
|
|
536
544
|
started() {
|
|
545
|
+
this.status = 3 /* RECORDING */;
|
|
537
546
|
super.started();
|
|
538
547
|
this.statusAlertType = 'info';
|
|
539
548
|
this.statusMsg = 'Recording...';
|
|
@@ -542,13 +551,12 @@ export class AudioRecorder extends BasicRecorder {
|
|
|
542
551
|
this.stopRecordingMaxRec();
|
|
543
552
|
}, maxRecordingTimeMs);
|
|
544
553
|
this.maxRecTimerRunning = true;
|
|
545
|
-
this.status = 2 /* RECORDING */;
|
|
546
554
|
this.transportActions.stopAction.disabled = false;
|
|
547
555
|
}
|
|
548
556
|
stopItem() {
|
|
549
557
|
this.transportActions.stopAction.disabled = true;
|
|
550
558
|
this.transportActions.nextAction.disabled = true;
|
|
551
|
-
this.status =
|
|
559
|
+
this.status = 4 /* STOPPING_STOP */;
|
|
552
560
|
this.stopRecording();
|
|
553
561
|
}
|
|
554
562
|
stopRecording() {
|
|
@@ -562,7 +570,7 @@ export class AudioRecorder extends BasicRecorder {
|
|
|
562
570
|
}
|
|
563
571
|
stopRecordingMaxRec() {
|
|
564
572
|
this.maxRecTimerRunning = false;
|
|
565
|
-
this.status =
|
|
573
|
+
this.status = 4 /* STOPPING_STOP */;
|
|
566
574
|
if (this.ac) {
|
|
567
575
|
this.ac.stop();
|
|
568
576
|
}
|
|
@@ -611,17 +619,15 @@ export class AudioRecorder extends BasicRecorder {
|
|
|
611
619
|
ww.writeAsync(ad, (wavFile) => {
|
|
612
620
|
this.postRecordingMultipart(wavFile, rf.uuid, rf.session, rf._startedAsDateObj, recUrl);
|
|
613
621
|
this.processingRecording = false;
|
|
622
|
+
this.updateWakeLock();
|
|
614
623
|
this.changeDetectorRef.detectChanges();
|
|
615
624
|
});
|
|
616
625
|
}
|
|
617
626
|
}
|
|
618
|
-
// check complete session
|
|
619
|
-
let complete = true;
|
|
620
|
-
let autoStart = (this.status === 3 /* STOPPING_STOP */);
|
|
621
627
|
this.status = 1 /* IDLE */;
|
|
622
|
-
let startNext = false;
|
|
623
628
|
this.navigationDisabled = false;
|
|
624
629
|
this.updateNavigationActions();
|
|
630
|
+
this.updateWakeLock();
|
|
625
631
|
this.changeDetectorRef.detectChanges();
|
|
626
632
|
}
|
|
627
633
|
postRecordingMultipart(wavFile, uuid, sessionId, startedDate, recUrl) {
|
|
@@ -685,8 +691,8 @@ export class AudioRecorder extends BasicRecorder {
|
|
|
685
691
|
}
|
|
686
692
|
}
|
|
687
693
|
}
|
|
688
|
-
AudioRecorder.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
689
|
-
AudioRecorder.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
694
|
+
AudioRecorder.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioRecorder, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i1.ActivatedRoute }, { token: i2.MatDialog }, { token: i3.SessionService }, { token: i4.RecordingService }, { token: i5.SpeechRecorderUploader }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Component });
|
|
695
|
+
AudioRecorder.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: AudioRecorder, selector: "app-audiorecorder", inputs: { projectName: "projectName", dataSaved: "dataSaved" }, host: { listeners: { "window:keypress": "onKeyPress($event)", "window:keydown": "onKeyDown($event)" } }, providers: [SessionService], viewQueries: [{ propertyName: "recorderCombiPane", first: true, predicate: RecorderCombiPane, descendants: true, static: true }, { propertyName: "liveLevelDisplay", first: true, predicate: LevelBar, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
|
|
690
696
|
<app-warningbar [show]="isTestSession()" warningText="Test recording only!"></app-warningbar>
|
|
691
697
|
<app-warningbar [show]="isDefaultAudioTestSession()"
|
|
692
698
|
warningText="This test uses default audio device! Regular sessions may require a particular audio device (microphone)!"></app-warningbar>
|
|
@@ -704,7 +710,7 @@ AudioRecorder.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
|
|
|
704
710
|
<div fxLayout="row" fxLayout.xs="column" [ngStyle]="{'height.px':100,'min-height.px': 100}"
|
|
705
711
|
[ngStyle.xs]="{'height.px':125,'min-height.px': 125}">
|
|
706
712
|
<audio-levelbar fxFlex="1 0 1" [streamingMode]="isRecording()"
|
|
707
|
-
[displayLevelInfos]="
|
|
713
|
+
[displayLevelInfos]="displayAudioClip?.levelInfos"></audio-levelbar>
|
|
708
714
|
<div fxLayout="row">
|
|
709
715
|
<spr-recordingitemcontrols fxFlex="10 0 1"
|
|
710
716
|
[audioLoaded]="displayAudioClip?.buffer!==null"
|
|
@@ -714,9 +720,11 @@ AudioRecorder.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
|
|
|
714
720
|
[agc]="this.ac?.agcStatus"
|
|
715
721
|
(onShowRecordingDetails)="audioSignalCollapsed=!audioSignalCollapsed">
|
|
716
722
|
</spr-recordingitemcontrols>
|
|
723
|
+
|
|
717
724
|
<app-uploadstatus class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" *ngIf="enableUploadRecordings"
|
|
718
725
|
[value]="uploadProgress"
|
|
719
726
|
[status]="uploadStatus" [awaitNewUpload]="processingRecording"></app-uploadstatus>
|
|
727
|
+
<app-wakelockindicator class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" [screenLocked]="screenLocked"></app-wakelockindicator>
|
|
720
728
|
<app-readystateindicator class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0"
|
|
721
729
|
[ready]="dataSaved && !isActive()"></app-readystateindicator>
|
|
722
730
|
</div>
|
|
@@ -727,23 +735,25 @@ AudioRecorder.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
|
|
|
727
735
|
class="hidden-xs"></app-sprstatusdisplay>
|
|
728
736
|
<div fxFlex="100% 0 100%" class="startstop">
|
|
729
737
|
<div style="align-content: center">
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
738
|
+
<button (click)="startStopPerform()" [disabled]="startDisabled() && stopDisabled()" mat-raised-button class="bigbutton">
|
|
739
|
+
<mat-icon [style.color]="startStopNextIconColor()" inline="true">{{startStopNextIconName()}}</mat-icon>
|
|
740
|
+
<span style="font-weight: bolder;font-size: 14px">{{startStopNextName()}}</span>
|
|
741
|
+
</button>
|
|
734
742
|
</div>
|
|
735
743
|
</div>
|
|
736
744
|
<div fxFlex="30% 1 30%" >
|
|
737
745
|
<div fxFlex="1 1 auto"></div>
|
|
746
|
+
|
|
738
747
|
<app-uploadstatus class="ricontrols" fxHide.xs fxFlex="0 0 0" *ngIf="enableUploadRecordings"
|
|
739
748
|
[value]="uploadProgress"
|
|
740
749
|
[status]="uploadStatus" [awaitNewUpload]="processingRecording"></app-uploadstatus>
|
|
750
|
+
<app-wakelockindicator class="ricontrols" fxHide.xs [screenLocked]="screenLocked"></app-wakelockindicator>
|
|
741
751
|
<app-readystateindicator class="ricontrols" fxHide.xs
|
|
742
752
|
[ready]="dataSaved && !isActive()"></app-readystateindicator>
|
|
743
753
|
</div>
|
|
744
754
|
</div>
|
|
745
|
-
`, isInline: true, styles: [":host{flex:2;background:lightgrey;display:flex;flex-direction:column;margin:0;padding:0;height:100%;min-height:0px;overflow:hidden}\n", ".ricontrols{padding:4px;box-sizing:border-box;height:100%}\n", ".dark{background:darkgray}\n", ".controlpanel{align-content:center;align-items:center;margin:0;padding:20px;min-height
|
|
746
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
755
|
+
`, isInline: true, styles: [":host{flex:2;background:lightgrey;display:flex;flex-direction:column;margin:0;padding:0;height:100%;min-height:0px;overflow:hidden}\n", ".ricontrols{padding:4px;box-sizing:border-box;height:100%}\n", ".dark{background:darkgray}\n", ".controlpanel{align-content:center;align-items:center;margin:0;padding:20px;min-height:min-content}\n", ".startstop{width:100%;text-align:center;align-content:center;align-items:center}\n", ".bigbutton{min-width:70px;min-height:50px;font-size:50px;border-radius:20px}\n"], components: [{ type: i6.WarningBar, selector: "app-warningbar", inputs: ["warningText", "show"] }, { type: i7.RecorderCombiPane, selector: "app-recordercombipane", inputs: ["selectDisabled", "selectedRecordingFile", "audioSignalCollapsed", "displayAudioClip", "playStartAction", "playSelectionAction", "autoPlayOnSelectToggleAction", "playStopAction"], outputs: ["selectedRecordingFileChanged"] }, { type: i8.LevelBar, selector: "audio-levelbar", inputs: ["streamingMode", "displayLevelInfos"] }, { type: i9.RecordingItemControls, selector: "spr-recordingitemcontrols", inputs: ["audioSignalCollapsed", "enableDownload", "peakDbLvl", "agc", "audioLoaded", "playStartAction", "playStopAction", "displayLevelInfos"], outputs: ["onShowRecordingDetails", "onDownloadRecording"] }, { type: i10.UploadStatus, selector: "app-uploadstatus", inputs: ["value", "awaitNewUpload", "status"] }, { type: i10.WakeLockIndicator, selector: "app-wakelockindicator", inputs: ["screenLocked"] }, { type: i10.ReadyStateIndicator, selector: "app-readystateindicator", inputs: ["ready"] }, { type: i10.StatusDisplay, selector: "app-sprstatusdisplay", inputs: ["statusAlertType", "statusMsg", "statusWaiting"] }, { type: i11.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i12.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i13.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i14.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }, { type: i15.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i13.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i15.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i14.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }] });
|
|
756
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioRecorder, decorators: [{
|
|
747
757
|
type: Component,
|
|
748
758
|
args: [{
|
|
749
759
|
selector: 'app-audiorecorder',
|
|
@@ -766,7 +776,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
|
|
|
766
776
|
<div fxLayout="row" fxLayout.xs="column" [ngStyle]="{'height.px':100,'min-height.px': 100}"
|
|
767
777
|
[ngStyle.xs]="{'height.px':125,'min-height.px': 125}">
|
|
768
778
|
<audio-levelbar fxFlex="1 0 1" [streamingMode]="isRecording()"
|
|
769
|
-
[displayLevelInfos]="
|
|
779
|
+
[displayLevelInfos]="displayAudioClip?.levelInfos"></audio-levelbar>
|
|
770
780
|
<div fxLayout="row">
|
|
771
781
|
<spr-recordingitemcontrols fxFlex="10 0 1"
|
|
772
782
|
[audioLoaded]="displayAudioClip?.buffer!==null"
|
|
@@ -776,9 +786,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
|
|
|
776
786
|
[agc]="this.ac?.agcStatus"
|
|
777
787
|
(onShowRecordingDetails)="audioSignalCollapsed=!audioSignalCollapsed">
|
|
778
788
|
</spr-recordingitemcontrols>
|
|
789
|
+
|
|
779
790
|
<app-uploadstatus class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" *ngIf="enableUploadRecordings"
|
|
780
791
|
[value]="uploadProgress"
|
|
781
792
|
[status]="uploadStatus" [awaitNewUpload]="processingRecording"></app-uploadstatus>
|
|
793
|
+
<app-wakelockindicator class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" [screenLocked]="screenLocked"></app-wakelockindicator>
|
|
782
794
|
<app-readystateindicator class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0"
|
|
783
795
|
[ready]="dataSaved && !isActive()"></app-readystateindicator>
|
|
784
796
|
</div>
|
|
@@ -789,17 +801,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
|
|
|
789
801
|
class="hidden-xs"></app-sprstatusdisplay>
|
|
790
802
|
<div fxFlex="100% 0 100%" class="startstop">
|
|
791
803
|
<div style="align-content: center">
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
804
|
+
<button (click)="startStopPerform()" [disabled]="startDisabled() && stopDisabled()" mat-raised-button class="bigbutton">
|
|
805
|
+
<mat-icon [style.color]="startStopNextIconColor()" inline="true">{{startStopNextIconName()}}</mat-icon>
|
|
806
|
+
<span style="font-weight: bolder;font-size: 14px">{{startStopNextName()}}</span>
|
|
807
|
+
</button>
|
|
796
808
|
</div>
|
|
797
809
|
</div>
|
|
798
810
|
<div fxFlex="30% 1 30%" >
|
|
799
811
|
<div fxFlex="1 1 auto"></div>
|
|
812
|
+
|
|
800
813
|
<app-uploadstatus class="ricontrols" fxHide.xs fxFlex="0 0 0" *ngIf="enableUploadRecordings"
|
|
801
814
|
[value]="uploadProgress"
|
|
802
815
|
[status]="uploadStatus" [awaitNewUpload]="processingRecording"></app-uploadstatus>
|
|
816
|
+
<app-wakelockindicator class="ricontrols" fxHide.xs [screenLocked]="screenLocked"></app-wakelockindicator>
|
|
803
817
|
<app-readystateindicator class="ricontrols" fxHide.xs
|
|
804
818
|
[ready]="dataSaved && !isActive()"></app-readystateindicator>
|
|
805
819
|
</div>
|
|
@@ -923,6 +937,9 @@ export class AudioRecorderComponent extends RecorderComponent {
|
|
|
923
937
|
ngOnDestroy() {
|
|
924
938
|
//super.ngOnDestroy();
|
|
925
939
|
}
|
|
940
|
+
get screenLocked() {
|
|
941
|
+
return this.ar.screenLocked;
|
|
942
|
+
}
|
|
926
943
|
fetchSession(sessionId) {
|
|
927
944
|
let sessObs = this.sessionService.sessionObserver(sessionId);
|
|
928
945
|
if (sessObs) {
|
|
@@ -976,17 +993,18 @@ export class AudioRecorderComponent extends RecorderComponent {
|
|
|
976
993
|
}
|
|
977
994
|
this.ar.uploadProgress = percentUpl;
|
|
978
995
|
}
|
|
996
|
+
this.ar.updateWakeLock(this.dataSaved);
|
|
979
997
|
this.changeDetectorRef.detectChanges();
|
|
980
998
|
}
|
|
981
999
|
ready() {
|
|
982
1000
|
return this.dataSaved && !this.ar.isActive();
|
|
983
1001
|
}
|
|
984
1002
|
}
|
|
985
|
-
AudioRecorderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
986
|
-
AudioRecorderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
1003
|
+
AudioRecorderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioRecorderComponent, deps: [{ token: i0.Injector }, { token: i1.ActivatedRoute }, { token: i1.Router }, { token: i0.ChangeDetectorRef }, { token: i3.SessionService }, { token: i17.ProjectService }, { token: i5.SpeechRecorderUploader }], target: i0.ɵɵFactoryTarget.Component });
|
|
1004
|
+
AudioRecorderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: AudioRecorderComponent, selector: "app-audiorecorder-comp", providers: [SessionService], viewQueries: [{ propertyName: "ar", first: true, predicate: AudioRecorder, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
|
|
987
1005
|
<app-audiorecorder [projectName]="_project?.name" [dataSaved]="dataSaved"></app-audiorecorder>
|
|
988
1006
|
`, isInline: true, styles: [":host{flex:2;display:flex;height:100%;flex-direction:column;min-height:0}\n"], components: [{ type: AudioRecorder, selector: "app-audiorecorder", inputs: ["projectName", "dataSaved"] }] });
|
|
989
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
1007
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioRecorderComponent, decorators: [{
|
|
990
1008
|
type: Component,
|
|
991
1009
|
args: [{
|
|
992
1010
|
selector: 'app-audiorecorder-comp',
|
|
@@ -1007,4 +1025,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
|
|
|
1007
1025
|
type: ViewChild,
|
|
1008
1026
|
args: [AudioRecorder, { static: true }]
|
|
1009
1027
|
}] } });
|
|
1010
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaW9yZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL2F1ZGlvcmVjb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBdUIsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRSxPQUFPLEVBQUMsV0FBVyxFQUFvQixTQUFTLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQTtBQUNwRixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sNEJBQTRCLENBQUE7QUFDcEQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUMxQyxPQUFPLEVBQ0wsU0FBUyxFQUFFLFNBQVMsRUFBcUIsTUFBTSxFQUNoQyxZQUFZLEVBQWEsS0FBSyxFQUM5QyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFHakQsT0FBTyxFQUFDLHFCQUFxQixFQUF1QixNQUFNLGtCQUFrQixDQUFDO0FBRTdFLE9BQU8sRUFBVyxXQUFXLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFHdEQsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDekQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRWhELE9BQU8sRUFBQyxNQUFNLEVBQUUsY0FBYyxFQUE0QixNQUFNLG9CQUFvQixDQUFDO0FBR3JGLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUN2QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDbEQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDeEQsT0FBTyxFQUFDLGFBQWEsRUFBRSwyQkFBMkIsRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNuSCxPQUFPLEVBQXFCLGlCQUFpQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRL0UsTUFBTSxPQUFPLElBQUk7SUFLZixZQUFZLGNBQXNCLEVBQUUsUUFBaUI7UUFDbkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7UUFDckMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbkIsQ0FBQztDQUNGO0FBbUdELE1BQU0sT0FBTyxhQUFjLFNBQVEsYUFBYTtJQStCOUMsWUFBb0IsaUJBQW9DLEVBQ3BDLFFBQW1CLEVBQ25CLEtBQXFCLEVBQ3RCLE1BQWlCLEVBQ2QsY0FBNkIsRUFDL0IsY0FBK0IsRUFDN0IsUUFBZ0MsRUFDSixNQUE2QjtRQUM3RSxLQUFLLENBQUMsTUFBTSxFQUFDLGNBQWMsRUFBQyxRQUFRLEVBQUMsTUFBTSxDQUFDLENBQUM7UUFSM0Isc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3RCLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDZCxtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUMvQixtQkFBYyxHQUFkLGNBQWMsQ0FBaUI7UUFDN0IsYUFBUSxHQUFSLFFBQVEsQ0FBd0I7UUFDSixXQUFNLEdBQU4sTUFBTSxDQUF1QjtRQXBDL0UsYUFBUSxHQUF5QixJQUFJLENBQUM7UUFDN0IsZ0JBQVcsR0FBdUIsSUFBSSxDQUFDO1FBQ2hELDJCQUFzQixHQUFZLElBQUksQ0FBQztRQUN2Qyw2QkFBd0IsR0FBWSxLQUFLLENBQUM7UUFDMUMsV0FBTSxtQkFBMEI7UUFLdkIsY0FBUyxHQUFDLElBQUksQ0FBQTtRQUdmLGtCQUFhLEdBQWMsSUFBSSxDQUFDO1FBQ2hDLHVCQUFrQixHQUFVLEtBQUssQ0FBQztRQVFsQyxpQkFBWSxHQUFhLElBQUksQ0FBQztRQUV0QywrQkFBK0I7UUFDL0IsMEJBQTBCO1FBQ2xCLG9CQUFlLEdBQXVCLElBQUksQ0FBQztRQUMzQywwQkFBcUIsR0FBUyxDQUFDLENBQUM7UUFhdEMsa0JBQWtCO1FBQ2xCLElBQUksQ0FBQyxNQUFNLGVBQWMsQ0FBQztRQUUxQixJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFOUMsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsc0JBQXNCLElBQUksSUFBSSxFQUFFO1lBQzdELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDO1NBQ2xFO1FBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsd0JBQXdCLElBQUksSUFBSSxFQUFFO1lBQy9ELElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLHdCQUF3QixDQUFDO1NBQ3RFO1FBQ0QsY0FBYztJQUNoQixDQUFDO0lBR0QsZUFBZTtRQUViLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQzlELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsR0FBQyxDQUFDLFdBQVcsRUFBQyxFQUFFO1lBQ3ZELElBQUksQ0FBQyxhQUFhLEdBQUMsV0FBVyxDQUFDO1lBQy9CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QyxDQUFDLENBQUE7UUFDRCw2Q0FBNkM7UUFDN0Msa0RBQWtEO0lBQ3BELENBQUM7SUFFRCxLQUFLO1FBQ0gsT0FBTyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQzNDLENBQUM7SUFDQyxXQUFXO1FBQ1QsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLFNBQVMsR0FBQyxJQUFJLENBQUM7UUFDcEIsOEJBQThCO0lBQ2pDLENBQUM7SUFFSCxRQUFRO1FBQ04sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ2xELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNqRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDakQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ2xELElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUVyQyxJQUFJLE9BQU8sR0FBbUIsSUFBSSxDQUFDO1FBQ25DLElBQUk7WUFDRixPQUFPLEdBQUcsb0JBQW9CLENBQUMsb0JBQW9CLEVBQUUsQ0FBQTtTQUN0RDtRQUFDLE9BQU8sR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLE1BQU0sZ0JBQWUsQ0FBQztZQUMzQixJQUFJLE1BQU0sR0FBRyxlQUFlLENBQUM7WUFDN0IsSUFBRyxHQUFHLFlBQVksS0FBSyxFQUFDO2dCQUN0QixNQUFNLEdBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQzthQUNwQjtZQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxHQUFHLE1BQU0sQ0FBQztZQUNwQyxJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQztZQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBQzlCLElBQUksRUFBRTtvQkFDSixJQUFJLEVBQUUsT0FBTztvQkFDYixLQUFLLEVBQUUsT0FBTztvQkFDZCxHQUFHLEVBQUUsTUFBTTtvQkFDWCxNQUFNLEVBQUUsaUNBQWlDO2lCQUMxQzthQUNGLENBQUMsQ0FBQztZQUNILE9BQU87U0FDUjtRQUNELElBQUcsT0FBTyxFQUFFO1lBQ1YsT0FBTyxDQUFDLElBQUksQ0FBQywwQkFBMEIsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7U0FDekQ7YUFBSTtZQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQztTQUM3QztRQUNELElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxNQUFNLGdCQUFlLENBQUM7WUFDM0IsSUFBSSxNQUFNLEdBQUcseUNBQXlDLENBQUM7WUFDdkQsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsTUFBTSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDO1lBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDOUIsSUFBSSxFQUFFO29CQUNKLElBQUksRUFBRSxPQUFPO29CQUNiLEtBQUssRUFBRSxPQUFPO29CQUNkLEdBQUcsRUFBRSxNQUFNO29CQUNYLE1BQU0sRUFBRSxpQ0FBaUM7aUJBQzFDO2FBQ0YsQ0FBQyxDQUFDO1lBQ0gsT0FBTztTQUNSO2FBQU07WUFDTCwyREFBMkQ7WUFDM0QsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwQyxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNwRSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO2dCQUVwQyxrSEFBa0g7Z0JBQ2xILHdCQUF3QjthQUN6QjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ2xELElBQUksTUFBTSxHQUFHLDJDQUEyQyxDQUFDO2dCQUN6RCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsR0FBRyxNQUFNLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDO2dCQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7b0JBQzlCLElBQUksRUFBRTt3QkFDSixJQUFJLEVBQUUsT0FBTzt3QkFDYixLQUFLLEVBQUUsT0FBTzt3QkFDZCxHQUFHLEVBQUUsTUFBTTt3QkFDWCxNQUFNLEVBQUUsaUNBQWlDO3FCQUMxQztpQkFDRixDQUFDLENBQUM7Z0JBQ0gsT0FBTzthQUNSO1lBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsRSxzRUFBc0U7WUFFdEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxDQUFDO1NBRXZFO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hCLENBQUMsQ0FBQTtJQUNILENBQUM7SUFHRCxVQUFVLENBQUMsRUFBaUI7UUFDMUIsSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsRUFBRTtZQUNqQiw4Q0FBOEM7WUFDOUMsNkNBQTZDO1NBQzlDO0lBQ0gsQ0FBQztJQUdELFNBQVMsQ0FBQyxFQUFpQjtRQUN6QixJQUFJLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFO1lBQ2pCLElBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBQztnQkFDN0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUM3QztpQkFBSyxJQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7Z0JBQ25ELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDNUM7U0FDRjtRQUNELElBQUksRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUU7WUFDakIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUM3QztRQUNELElBQUksRUFBRSxDQUFDLEdBQUcsSUFBSSxRQUFRLEVBQUU7WUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtnQkFDOUIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQzthQUNsQztZQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUM3QztRQUVELElBQUksRUFBRSxDQUFDLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRTtZQUM5QixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ2hDO1FBQ0QsSUFBSSxFQUFFLENBQUMsR0FBRyxLQUFLLFlBQVksRUFBRTtZQUMzQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQzNDO1FBQ0QsSUFBSSxFQUFFLENBQUMsR0FBRyxLQUFLLFdBQVcsRUFBRTtZQUMxQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQzNDO0lBQ0gsQ0FBQztJQUVELGFBQWE7UUFDWCxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFHLFlBQVksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQ2hKLENBQUM7SUFFRCx5QkFBeUI7UUFDdkIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFHLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELHdEQUF3RDtRQUN0RCxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFFLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2xJLENBQUM7SUFJRCxlQUFlLENBQUMsSUFBWTtRQUMxQixJQUFJLENBQUMsZUFBZSxHQUFDLE1BQU0sQ0FBQztRQUM1QixJQUFJLENBQUMsU0FBUyxHQUFHLGlDQUFpQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxhQUFhLEdBQUMsSUFBSSxDQUFDO1FBQ3hCLElBQUksSUFBSSxHQUFhLElBQUksQ0FBQztRQUMxQixJQUFHLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDZixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN0RixNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsR0FBeUIsRUFBRSxFQUFFO29CQUNuRCxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQztvQkFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRywrQkFBK0IsQ0FBQztvQkFDakQsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7b0JBQzNCLElBQUksR0FBRyxFQUFFO3dCQUNQLElBQUksR0FBRyxZQUFZLEtBQUssRUFBRTs0QkFDeEIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO2dDQUNqQixJQUFHLEVBQUUsQ0FBQyxXQUFXLEVBQUM7b0NBQ2hCLEVBQUUsQ0FBQyxpQkFBaUIsR0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUM7aUNBQy9DO2dDQUNELElBQUcsRUFBRSxDQUFDLElBQUksRUFBQztvQ0FDVCxFQUFFLENBQUMsY0FBYyxHQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQ0FDckM7Z0NBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzs0QkFDbEMsQ0FBQyxDQUFDLENBQUE7eUJBQ0g7NkJBQU07NEJBQ0wsT0FBTyxDQUFDLEtBQUssQ0FBQyx5REFBeUQsQ0FBQyxDQUFBO3lCQUN6RTtxQkFFRjt5QkFBTTt3QkFDTCwrQ0FBK0M7cUJBQ2hEO2dCQUNILENBQUMsRUFBRSxLQUFLLEVBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDZiw0REFBNEQ7b0JBQzVELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQTtnQkFDZCxDQUFDLEVBQUUsUUFBUSxFQUFDLEdBQUcsRUFBRTtvQkFDZixlQUFlO29CQUNmLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQTtnQkFDZCxDQUFDLEVBQ0YsQ0FBQyxDQUFBO1NBQ0Q7YUFBSTtZQUNILDBCQUEwQjtZQUMxQixJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQztZQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLHVCQUF1QixDQUFDO1lBQ3pDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBQzNCLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQUdELElBQUksT0FBTyxDQUFDLE9BQStCO1FBQ3pDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ3hCLElBQUksS0FBSyxHQUFHLFdBQVcsQ0FBQywyQkFBMkIsQ0FBQztRQUVwRCxJQUFJLE9BQU8sRUFBRTtZQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQzdDLElBQUcsT0FBTyxDQUFDLHVCQUF1QixLQUFHLElBQUksRUFBQztnQkFDeEMsSUFBSSxDQUFDLFFBQVEsR0FBQyxJQUFJLENBQUM7YUFDcEI7WUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUM7WUFDekMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMvQyxPQUFPLENBQUMsSUFBSSxDQUFDLDZDQUE2QyxHQUFHLEtBQUssQ0FBQyxDQUFDO1lBQ3BFLElBQUksQ0FBQyxzQkFBc0IsR0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUM7WUFDM0QsSUFBRyxPQUFPLENBQUMsZ0JBQWdCLEtBQUcsSUFBSSxFQUFDO2dCQUNqQyxJQUFJLENBQUMsc0JBQXNCLEdBQUMsYUFBYSxDQUFDLDBCQUEwQixDQUFDO2FBQ3RFO2lCQUFJO2dCQUNILElBQUksQ0FBQyxzQkFBc0IsR0FBQyxJQUFJLENBQUM7YUFDbEM7U0FDRjthQUFNO1lBQ0wsT0FBTyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFBO1NBQzlDO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQUdELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsbUJBQW1CLENBQUMsRUFBZ0I7UUFDbEMsSUFBSSxDQUFDLGNBQWMsR0FBQyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELFlBQVksQ0FBQyxFQUE2QjtRQUN4QyxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNsQyxJQUFJLGNBQWMsQ0FBQyxHQUFHLEtBQUssUUFBUSxFQUFFO1lBQ25DLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFBO1NBQzNCO2FBQU07WUFDTCxJQUFJLFVBQVUsR0FBRyxFQUFFLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFBO2FBQzdCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFBO2FBQzlCO1lBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLENBQUM7U0FDbEM7UUFFRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUE7SUFDeEMsQ0FBQztJQUVELElBQUksa0JBQWtCLENBQUMsa0JBQStCO1FBQ3BELElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQzVCLHlDQUF5QztTQUMxQztRQUNELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxrQkFBa0IsQ0FBQztRQUM5QyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUM1QixJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztTQUMxQztJQUNILENBQUM7SUFFRCxJQUFJLGtCQUFrQjtRQUNwQixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUNsQyxDQUFDO0lBRUQsTUFBTSxDQUFDLENBQW1CO1FBQ3hCLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFO1lBQy9CLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNyQyxJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFO2dCQUMzQyxrRUFBa0U7WUFDcEUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ1I7YUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksU0FBUyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUU7WUFDbkUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDekMsbUVBQW1FO1lBQ25FLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1NBRTFEO0lBQ0gsQ0FBQztJQUVELGFBQWE7UUFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUE7SUFDOUYsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFBO0lBQzVFLENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFDO1lBQ3ZCLElBQUksQ0FBQyx1QkFBdUIsR0FBQyxPQUFPLENBQUE7U0FDckM7YUFBSyxJQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFO1lBQzdCLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxNQUFNLENBQUE7U0FDdEM7UUFDRCxPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztJQUN0QyxDQUFDO0lBQ0QscUJBQXFCO1FBQ25CLElBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUM7WUFDdkIsSUFBSSxDQUFDLDJCQUEyQixHQUFDLHFCQUFxQixDQUFBO1NBQ3ZEO2FBQUssSUFBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBQztZQUM1QixJQUFJLENBQUMsMkJBQTJCLEdBQUMsTUFBTSxDQUFBO1NBQ3hDO1FBQ0QsT0FBTyxJQUFJLENBQUMsMkJBQTJCLENBQUE7SUFDekMsQ0FBQztJQUNELHNCQUFzQjtRQUNwQixJQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFDO1lBQ3ZCLE9BQU8sS0FBSyxDQUFBO1NBQ2I7YUFBSyxJQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFDO1lBQzVCLE9BQU8sUUFBUSxDQUFBO1NBQ2hCO2FBQUk7WUFDSCxPQUFPLE1BQU0sQ0FBQztTQUNmO0lBQ0gsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUM7WUFDdkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUM3QzthQUFLLElBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUM7WUFDNUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUM1QztJQUNILENBQUM7SUFFRCxTQUFTO1FBQ1AsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQTtRQUMvQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUE7UUFDbkQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFBO1FBQy9DLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUM3QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFckIsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFO2dCQUNuQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtvQkFDMUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1Q0FBdUMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsV0FBVyxDQUFDLENBQUM7aUJBQzlIO3FCQUFNO29CQUNMLE9BQU8sQ0FBQyxHQUFHLENBQUMsNkNBQTZDLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUMsQ0FBQztpQkFDL0Y7Z0JBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7YUFDdkY7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUNqQjtTQUNGO0lBQ0gsQ0FBQztJQUdELGlCQUFpQjtRQUNmLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN2QixJQUFJLEVBQUUsR0FBdUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUM7WUFDN0QsSUFBSSxFQUFFLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUN6QixJQUFJLEVBQUUsRUFBRTtnQkFDTixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFO29CQUMxQyxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUMsSUFBSSxFQUFFLFdBQVcsRUFBQyxDQUFDLENBQUM7b0JBQ3BELElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBRXRDLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNsRCxnQ0FBZ0M7b0JBQ2hDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO29CQUV4QixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO29CQUVyRCxzQ0FBc0M7b0JBQ3RDLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTt3QkFDdkIsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsQ0FBQzt3QkFDOUMsRUFBRSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUM7d0JBQ3ZDLEVBQUUsSUFBSSxNQUFNLENBQUM7d0JBQ2IsVUFBVSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7d0JBQ3pCLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztxQkFDcEI7b0JBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDdkQsQ0FBQyxDQUFDLENBQUM7YUFDSjtTQUNGO0lBQ0gsQ0FBQztJQUVELElBQUksY0FBYyxDQUFDLGNBQW9DO1FBQ3JELElBQUksQ0FBQyxlQUFlLEdBQUcsY0FBYyxDQUFDO1FBQ3RDLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN4QixJQUFJLEVBQUUsR0FBc0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUM7WUFDN0QsSUFBRyxFQUFFLEVBQUU7Z0JBQ0wsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUMxQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQzthQUMzRDtpQkFBSztnQkFDSixvQkFBb0I7Z0JBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2dCQUV6QyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO29CQUMzQyxrQ0FBa0M7b0JBQ2xDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO3dCQUMzSyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUM7d0JBQ2YsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTs0QkFDOUIsR0FBRyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDO3lCQUN4Qzs2QkFBTTs0QkFDTCxJQUFJLENBQUMsU0FBUyxHQUFHLHFDQUFxQyxDQUFBOzRCQUN0RCxJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQTt5QkFDL0I7d0JBQ0QsSUFBSSxHQUFHLEVBQUM7NEJBQ04sSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3lCQUM1Qzt3QkFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxHQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQTt3QkFDeEQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUV2QixDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7d0JBQ1AsT0FBTyxDQUFDLEtBQUssQ0FBQyw2Q0FBNkMsR0FBRyxHQUFHLENBQUMsQ0FBQTt3QkFDbEUsSUFBSSxDQUFDLFNBQVMsR0FBRyxzQ0FBc0MsR0FBRyxHQUFHLENBQUE7d0JBQzdELElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFBO29CQUNoQyxDQUFDLENBQUMsQ0FBQTtpQkFDTDtxQkFBSTtvQkFDSCxJQUFJLENBQUMsU0FBUyxHQUFHLGlFQUFpRSxDQUFBO29CQUNsRixJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQTtpQkFDL0I7YUFDRjtTQUVGO2FBQU07WUFDTCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1lBQzdCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1NBQzFDO1FBQ0QsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFDO1FBRS9CLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBRXpCLElBQUksQ0FBQyxZQUFZLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSwyQkFBMkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO2dCQUNwSCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDekMsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7U0FFdkM7YUFBTTtZQUVMLE9BQU87WUFDUCxtSEFBbUg7WUFDbkgsMEVBQTBFO1lBQzFFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7WUFFOUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBRXJDLHdDQUF3QztZQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFO2dCQUM5QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO2FBQ2xDO1NBQ0Y7UUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELDZCQUE2QjtRQUMzQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxLQUFLO1FBQ0gsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO0lBRXZDLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLHNCQUFxQixDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLG9CQUFtQixJQUFJLElBQUksQ0FBQyxNQUFNLGlCQUFlLElBQUksSUFBSSxDQUFDLE1BQU0sa0JBQWUsQ0FBQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsR0FBQyxDQUFDLENBQUMsQ0FBQTtJQUN6SyxDQUFDO0lBRU8sdUJBQXVCO1FBRTdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUNuRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDckUsQ0FBQztJQUVELHNCQUFzQjtRQUNwQixLQUFLLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsa0JBQWtCLEdBQUMsS0FBSyxDQUFDO1FBQzlCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBRyxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQ1YsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNqQjtJQUNILENBQUM7SUFFRCxPQUFPO1FBQ0wsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRWhCLElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDO1FBRWhDLElBQUksa0JBQWtCLEdBQUcscUJBQXFCLENBQUM7UUFDL0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUMxQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtRQUM1QixDQUFDLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1FBRS9CLElBQUksQ0FBQyxNQUFNLG9CQUFtQixDQUFDO1FBQy9CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNwRCxDQUFDO0lBRUQsUUFBUTtRQUVOLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNqRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDakQsSUFBSSxDQUFDLE1BQU0sd0JBQXVCLENBQUM7UUFDbkMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBRXZCLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBRSxJQUFJLEVBQUU7WUFDdkQsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztTQUNqQztRQUNELElBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUNWLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDaEI7SUFDSCxDQUFDO0lBRUQsbUJBQW1CO1FBRWpCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDaEMsSUFBSSxDQUFDLE1BQU0sd0JBQXVCLENBQUM7UUFDbkMsSUFBRyxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQ1YsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNoQjtJQUNILENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUE7UUFDcEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ2pELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNqRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDbEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUM7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUM7UUFFN0IsSUFBSSxFQUFjLENBQUM7UUFDbkIsSUFBRyxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQ1YsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDM0IsSUFBSSxNQUFNLEdBQW9CLENBQUMsQ0FBQztZQUNoQyxJQUFHLElBQUksQ0FBQyxRQUFRLEVBQUM7Z0JBQ2YsTUFBTSxHQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO2FBQ2hDO1lBQ0QsSUFBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUM7Z0JBQ2QsSUFBSSxDQUFDLE1BQU0sR0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUE7YUFDNUI7WUFDRCxJQUFJLEVBQUUsR0FBRyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxFQUFFLENBQUMsQ0FBQztZQUNsRCxFQUFFLENBQUMsaUJBQWlCLEdBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUN0QyxJQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRTtnQkFDdkIsRUFBRSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDbEQ7WUFDRCxFQUFFLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDdEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUVoQywwREFBMEQ7WUFDMUQsSUFBSSxJQUFJLENBQUMsc0JBQXNCLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7Z0JBQy9ELElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztnQkFFckIsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFO29CQUMxQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7aUJBQ3ZDO2dCQUNELElBQUksV0FBVyxLQUFLLEVBQUUsRUFBRTtvQkFDdEIsV0FBVyxHQUFHLFdBQVcsR0FBRyxHQUFHLENBQUE7aUJBQ2hDO2dCQUVELElBQUksV0FBVyxHQUFHLFdBQVcsR0FBRyxjQUFjLENBQUMsZUFBZSxDQUFDO2dCQUMvRCxJQUFJLE1BQU0sR0FBVyxXQUFXLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLEdBQUcsR0FBRyxHQUFHLGVBQWUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztnQkFFNUYsK0NBQStDO2dCQUMvQyx3RkFBd0Y7Z0JBQ3hGLGdEQUFnRDtnQkFFaEQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQTtnQkFDL0IsSUFBSSxFQUFFLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDekIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtvQkFDNUIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxDQUFDO29CQUN4RixJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO29CQUNqQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3pDLENBQUMsQ0FBQyxDQUFDO2FBQ0o7U0FDRjtRQUVELHlCQUF5QjtRQUN6QixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFFcEIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSwwQkFBeUIsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxNQUFNLGVBQWMsQ0FBQztRQUMxQixJQUFJLFNBQVMsR0FBQyxLQUFLLENBQUM7UUFFaEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztRQUNoQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUVuQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUlELHNCQUFzQixDQUFDLE9BQW1CLEVBQUUsSUFBZ0IsRUFBQyxTQUE0QixFQUFDLFdBQStCLEVBQUMsTUFBYztRQUN0SSxJQUFJLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUMsSUFBSSxFQUFFLFdBQVcsRUFBQyxDQUFDLENBQUM7UUFFdkQsSUFBSSxFQUFFLEdBQUMsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUN0QixJQUFHLElBQUksRUFBRTtZQUNQLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3RCO1FBQ0QsSUFBRyxTQUFTLEtBQUcsSUFBSSxFQUFFO1lBQ25CLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1NBQzNDO1FBQ0QsSUFBRyxXQUFXLEVBQUM7WUFDYixFQUFFLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztTQUM1QztRQUNELEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hCLElBQUksRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsb0JBQW9CLENBQUMsV0FBd0IsRUFBRSxRQUFnQjtRQUM3RCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLElBQUksRUFBRSxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7UUFDekIsa0JBQWtCO1FBQ2xCLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUU7WUFDMUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1NBQ3ZDO1FBQ0QsSUFBSSxXQUFXLEtBQUssRUFBRSxFQUFFO1lBQ3RCLFdBQVcsR0FBRyxXQUFXLEdBQUcsR0FBRyxDQUFBO1NBQ2hDO1FBQ0QsSUFBSSxXQUFXLEdBQUcsV0FBVyxHQUFHLGNBQWMsQ0FBQyxlQUFlLENBQUM7UUFDL0QsSUFBSSxNQUFNLEdBQVcsV0FBVyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsR0FBRyxHQUFHLEdBQUcsZUFBZSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFDLEdBQUcsR0FBQyxRQUFRLENBQUM7UUFDMUgsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQUk7UUFDRixJQUFHLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDVixJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ2pCO0lBQ0gsQ0FBQztJQUVPLDZCQUE2QjtRQUNuQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxrQkFBa0IsRUFBRTtZQUMvQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FBQztZQUNwRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixDQUFDO1NBQ3ZGO0lBQ0gsQ0FBQztJQUVELGlCQUFpQixDQUFDLENBQW1CO1FBQ25DLElBQUksU0FBUyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFO1NBRS9CO2FBQU0sSUFBSSxTQUFTLENBQUMsT0FBTyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUU7WUFDdkMsOEJBQThCO1lBQzlCLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUV6RjthQUFNLElBQUksU0FBUyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFO1lBQ3JDLG1CQUFtQjtZQUNuQixNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUUxQztRQUNELElBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUMxQztJQUNILENBQUM7OzBHQTl0QlUsYUFBYSx1T0FzQ0oscUJBQXFCOzhGQXRDOUIsYUFBYSxxTkE5RmIsQ0FBQyxjQUFjLENBQUMsNkVBc0doQixpQkFBaUIsaUdBQ2pCLFFBQVEscUZBdEdUOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdEVDsyRkFxQ1UsYUFBYTtrQkFoR3pCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsU0FBUyxFQUFFLENBQUMsY0FBYyxDQUFDO29CQUMzQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0RUO29CQUNELE1BQU0sRUFBRSxDQUFDOzs7Ozs7Ozs7OztJQVdQLEVBQUM7Ozs7TUFJQyxFQUFDOztJQUVILEVBQUM7Ozs7OztJQU1ELEVBQUM7Ozs7O0lBS0QsRUFBQzs7Ozs7SUFLRDtxQkFDQTtpQkFDSDs7MEJBdUNjLE1BQU07MkJBQUMscUJBQXFCOzRDQW5DaEMsV0FBVztzQkFBbkIsS0FBSztnQkFLMEMsaUJBQWlCO3NCQUFoRSxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDUCxnQkFBZ0I7c0JBQXRELFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFNUIsU0FBUztzQkFBakIsS0FBSztnQkFzSk4sVUFBVTtzQkFEVCxZQUFZO3VCQUFDLGlCQUFpQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVMzQyxTQUFTO3NCQURSLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUM7O0FBeWtCNUMsTUFBTSxPQUFPLHNCQUF1QixTQUFRLGlCQUFpQjtJQVkzRCxZQUFzQixRQUFpQixFQUFTLEtBQXFCLEVBQ2pELE1BQWMsRUFDZCxpQkFBb0MsRUFDcEMsY0FBNkIsRUFDN0IsY0FBNkIsRUFDM0IsUUFBK0I7UUFFbkQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBUEksYUFBUSxHQUFSLFFBQVEsQ0FBUztRQUFTLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ2pELFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQzdCLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQzNCLGFBQVEsR0FBUixRQUFRLENBQXVCO0lBR3JELENBQUM7SUFFRCxRQUFRO1FBQ04sbUJBQW1CO1FBQ25CLElBQUksWUFBWSxHQUFHLG9CQUFvQixDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDL0QsSUFBRyxZQUFZLEVBQUU7WUFDZixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxXQUFXLENBQUMsWUFBWSxFQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNqRTtRQUNELElBQUksQ0FBQyxFQUFFLENBQUMsa0JBQWtCLEdBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1FBRW5ELGdEQUFnRDtRQUNoRCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDNUMsT0FBTyxDQUFDLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1lBRTFDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNoQixPQUFPO2FBQ1I7aUJBQU07Z0JBQ0wsMEZBQTBGO2dCQUMxRixJQUFJLE9BQU8sR0FBRyxrRUFBa0UsQ0FBQztnQkFDakYsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNmLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQztnQkFFdEIsSUFBSSxDQUFDLEVBQUU7b0JBQ0wsQ0FBQyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUM7b0JBQ3hCLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO29CQUN0QixJQUFJLENBQUMsQ0FBQyxlQUFlLEVBQUU7d0JBQ3JCLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztxQkFDckI7b0JBQ0QsSUFBSSxDQUFDLENBQUMsY0FBYyxFQUFFO3dCQUNwQixDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7cUJBQ3BCO2lCQUNGO2dCQUVELE9BQU8sT0FBTyxDQUFDO2FBQ2hCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUU7WUFDOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixDQUFDLENBQUE7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFjLEVBQUUsRUFBRTtZQUNsRCxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQzthQUN4QztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBYyxFQUFFLEVBQUU7WUFDN0MsSUFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLElBQUksYUFBYSxFQUFFO2dCQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ2xDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULHNCQUFzQjtJQUN4QixDQUFDO0lBRUQsWUFBWSxDQUFDLFNBQWdCO1FBRTNCLElBQUksT0FBTyxHQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTVELElBQUcsT0FBTyxFQUFFO1lBQ1YsT0FBTyxDQUFDLFNBQVMsQ0FBQztnQkFDaEIsSUFBSSxFQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7b0JBQ1osSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEdBQUMsTUFBTSxDQUFDO29CQUMvQixJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsR0FBRyx3QkFBd0IsQ0FBQztvQkFDN0MsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEdBQUMsS0FBSyxDQUFDO29CQUM1QixJQUFJLENBQUMsT0FBTyxHQUFDLElBQUksQ0FBQztvQkFDbEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEdBQUMsSUFBSSxDQUFDO29CQUNyQixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7d0JBQ2hCLDREQUE0RDt3QkFDNUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDOzRCQUM1RCxJQUFJLEVBQUMsQ0FBQyxPQUFPLEVBQUMsRUFBRTtnQ0FDaEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEdBQUMsT0FBTyxDQUFDO2dDQUN4QixJQUFJLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQzs0QkFDaEMsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dDQUNqQixJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsR0FBQyxNQUFNLENBQUM7Z0NBQ3pCLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxHQUFDLE9BQU8sQ0FBQztnQ0FDaEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEdBQUMsS0FBSyxDQUFDO2dDQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxHQUFDLE1BQU0sQ0FBQyxDQUFBOzRCQUN6RCxDQUFDO3lCQUFDLENBQUMsQ0FBQztxQkFFTDt5QkFBTTt3QkFDTCxPQUFPLENBQUMsSUFBSSxDQUFDLGlFQUFpRSxDQUFDLENBQUE7cUJBQ2hGO2dCQUNILENBQUM7Z0JBQ0QsS0FBSyxFQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7b0JBQ2YsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO29CQUMzQixJQUFJLENBQUMsRUFBRSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUM7b0JBQ2xDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxHQUFDLEtBQUssQ0FBQztvQkFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsR0FBRyxNQUFNLENBQUMsQ0FBQTtnQkFDbkQsQ0FBQzthQUFDLENBQUMsQ0FBQztTQUNQO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxFQUE2QjtRQUN4QyxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNsQyxJQUFJLGNBQWMsQ0FBQyxHQUFHLEtBQUssUUFBUSxFQUFFO1lBQ25DLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQTtTQUM5QjthQUFNO1lBQ0wsSUFBSSxVQUFVLEdBQUcsRUFBRSxFQUFFO2dCQUNuQixJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUE7YUFDaEM7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFBO2FBQ2pDO1lBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLEdBQUcsVUFBVSxDQUFDO1NBQ3JDO1FBRUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFBO0lBQ3hDLENBQUM7SUFHRCxLQUFLO1FBQ0gsT0FBTyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUM5QyxDQUFDOzttSEExSVUsc0JBQXNCO3VHQUF0QixzQkFBc0IsaURBZHRCLENBQUMsY0FBYyxDQUFDLDhEQXdCaEIsYUFBYSxxRkF2QmQ7O0dBRVQsZ0lBdHVCVSxhQUFhOzJGQWl2QmIsc0JBQXNCO2tCQWhCbEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsd0JBQXdCO29CQUNsQyxTQUFTLEVBQUUsQ0FBQyxjQUFjLENBQUM7b0JBQzNCLFFBQVEsRUFBRTs7R0FFVDtvQkFDRCxNQUFNLEVBQUUsQ0FBQzs7Ozs7OztJQU9QLENBQUM7aUJBRUo7aVJBVzZDLEVBQUU7c0JBQTdDLFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXVkaW9DYXB0dXJlLCBBdWRpb0NhcHR1cmVMaXN0ZW5lcn0gZnJvbSAnLi4vLi4vYXVkaW8vY2FwdHVyZS9jYXB0dXJlJztcclxuaW1wb3J0IHtBdWRpb1BsYXllciwgQXVkaW9QbGF5ZXJFdmVudCwgRXZlbnRUeXBlfSBmcm9tICcuLi8uLi9hdWRpby9wbGF5YmFjay9wbGF5ZXInXHJcbmltcG9ydCB7V2F2V3JpdGVyfSBmcm9tICcuLi8uLi9hdWRpby9pbXBsL3dhdndyaXRlcidcclxuaW1wb3J0IHtSZWNvcmRpbmdGaWxlfSBmcm9tICcuLi9yZWNvcmRpbmcnXHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LCBWaWV3Q2hpbGQsIENoYW5nZURldGVjdG9yUmVmLCBJbmplY3QsXHJcbiAgQWZ0ZXJWaWV3SW5pdCwgSG9zdExpc3RlbmVyLCBPbkRlc3Ryb3ksIElucHV0LCBSZW5kZXJlcjIsIE9uSW5pdCwgSW5qZWN0b3JcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1Nlc3Npb25TZXJ2aWNlfSBmcm9tIFwiLi9zZXNzaW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xyXG5pbXBvcnQge1NwZWVjaFJlY29yZGVyVXBsb2FkZXJ9IGZyb20gXCIuLi9zcHJ1cGxvYWRlclwiO1xyXG5pbXBvcnQge1NQRUVDSFJFQ09SREVSX0NPTkZJRywgU3BlZWNoUmVjb3JkZXJDb25maWd9IGZyb20gXCIuLi8uLi9zcHIuY29uZmlnXCI7XHJcbmltcG9ydCB7U2Vzc2lvbn0gZnJvbSBcIi4vc2Vzc2lvblwiO1xyXG5pbXBvcnQgeyBQcm9qZWN0LCBQcm9qZWN0VXRpbH0gZnJvbSBcIi4uL3Byb2plY3QvcHJvamVjdFwiO1xyXG5pbXBvcnQge01lc3NhZ2VEaWFsb2d9IGZyb20gXCIuLi8uLi91aS9tZXNzYWdlX2RpYWxvZ1wiO1xyXG5pbXBvcnQge1JlY29yZGluZ1NlcnZpY2V9IGZyb20gXCIuLi9yZWNvcmRpbmdzL3JlY29yZGluZ3Muc2VydmljZVwiO1xyXG5cclxuaW1wb3J0IHtBdWRpb0NvbnRleHRQcm92aWRlcn0gZnJvbSBcIi4uLy4uL2F1ZGlvL2NvbnRleHRcIjtcclxuaW1wb3J0IHtBdWRpb0NsaXB9IGZyb20gXCIuLi8uLi9hdWRpby9wZXJzaXN0b3JcIjtcclxuXHJcbmltcG9ydCB7VXBsb2FkLCBVcGxvYWRlclN0YXR1cywgVXBsb2FkZXJTdGF0dXNDaGFuZ2VFdmVudH0gZnJvbSBcIi4uLy4uL25ldC91cGxvYWRlclwiO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBQYXJhbXMsIFJvdXRlcn0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQge1Byb2plY3RTZXJ2aWNlfSBmcm9tIFwiLi4vcHJvamVjdC9wcm9qZWN0LnNlcnZpY2VcIjtcclxuaW1wb3J0IHtVVUlEfSBmcm9tIFwiLi4vLi4vdXRpbHMvdXRpbHNcIjtcclxuaW1wb3J0IHtMZXZlbEJhcn0gZnJvbSBcIi4uLy4uL2F1ZGlvL3VpL2xpdmVsZXZlbFwiO1xyXG5pbXBvcnQge1JlY29yZGVyQ29tYmlQYW5lfSBmcm9tIFwiLi9yZWNvcmRlcl9jb21iaV9wYW5lXCI7XHJcbmltcG9ydCB7QmFzaWNSZWNvcmRlciwgTEVWRUxfQkFSX0lOVEVSVkFMTF9TRUNPTkRTLCBNQVhfUkVDT1JESU5HX1RJTUVfTVMsIFJFQ0ZJTEVfQVBJX0NUWH0gZnJvbSBcIi4vYmFzaWNyZWNvcmRlclwiO1xyXG5pbXBvcnQge1JlYWR5U3RhdGVQcm92aWRlciwgUmVjb3JkZXJDb21wb25lbnR9IGZyb20gXCIuLi8uLi9yZWNvcmRlcl9jb21wb25lbnRcIjtcclxuaW1wb3J0IHtNb2RlfSBmcm9tIFwiLi4vLi4vc3BlZWNocmVjb3JkZXJuZy5jb21wb25lbnRcIjtcclxuXHJcblxyXG5leHBvcnQgY29uc3QgZW51bSBTdGF0dXMge1xyXG4gIEJMT0NLRUQsIElETEUsIFJFQ09SRElORywgIFNUT1BQSU5HX1NUT1AsIEVSUk9SXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtIHtcclxuICBwcm9tcHRBc1N0cmluZzogc3RyaW5nO1xyXG4gIHRyYWluaW5nOiBib29sZWFuO1xyXG4gIHJlY3M6IEFycmF5PFJlY29yZGluZ0ZpbGU+IHwgbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJvbXB0QXNTdHJpbmc6IHN0cmluZywgdHJhaW5pbmc6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMucHJvbXB0QXNTdHJpbmcgPSBwcm9tcHRBc1N0cmluZztcclxuICAgIHRoaXMudHJhaW5pbmcgPSB0cmFpbmluZztcclxuICAgIHRoaXMucmVjcyA9IG51bGw7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtYXVkaW9yZWNvcmRlcicsXHJcbiAgcHJvdmlkZXJzOiBbU2Vzc2lvblNlcnZpY2VdLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8YXBwLXdhcm5pbmdiYXIgW3Nob3ddPVwiaXNUZXN0U2Vzc2lvbigpXCIgd2FybmluZ1RleHQ9XCJUZXN0IHJlY29yZGluZyBvbmx5IVwiPjwvYXBwLXdhcm5pbmdiYXI+XHJcbiAgICA8YXBwLXdhcm5pbmdiYXIgW3Nob3ddPVwiaXNEZWZhdWx0QXVkaW9UZXN0U2Vzc2lvbigpXCJcclxuICAgICAgICAgICAgICAgICAgICB3YXJuaW5nVGV4dD1cIlRoaXMgdGVzdCB1c2VzIGRlZmF1bHQgYXVkaW8gZGV2aWNlISBSZWd1bGFyIHNlc3Npb25zIG1heSByZXF1aXJlIGEgcGFydGljdWxhciBhdWRpbyBkZXZpY2UgKG1pY3JvcGhvbmUpIVwiPjwvYXBwLXdhcm5pbmdiYXI+XHJcbiAgICA8YXBwLXJlY29yZGVyY29tYmlwYW5lIChzZWxlY3RlZFJlY29yZGluZ0ZpbGVDaGFuZ2VkKT1cInNlbGVjdFJlY29yZGluZ0ZpbGUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdWRpb1NpZ25hbENvbGxhcHNlZF09XCJhdWRpb1NpZ25hbENvbGxhcHNlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZFJlY29yZGluZ0ZpbGVdPVwiZGlzcGxheVJlY0ZpbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0RGlzYWJsZWRdPVwiaXNBY3RpdmUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNwbGF5QXVkaW9DbGlwXT1cImRpc3BsYXlBdWRpb0NsaXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxheVN0YXJ0QWN0aW9uXT1cImNvbnRyb2xBdWRpb1BsYXllci5zdGFydEFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGF5U3RvcEFjdGlvbl09XCJjb250cm9sQXVkaW9QbGF5ZXIuc3RvcEFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGF5U2VsZWN0aW9uQWN0aW9uXT1cImNvbnRyb2xBdWRpb1BsYXllci5zdGFydFNlbGVjdGlvbkFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvUGxheU9uU2VsZWN0VG9nZ2xlQWN0aW9uXT1cImNvbnRyb2xBdWRpb1BsYXllci5hdXRvUGxheU9uU2VsZWN0VG9nZ2xlQWN0aW9uXCJcclxuICAgID48L2FwcC1yZWNvcmRlcmNvbWJpcGFuZT5cclxuXHJcbiAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXQueHM9XCJjb2x1bW5cIiBbbmdTdHlsZV09XCJ7J2hlaWdodC5weCc6MTAwLCdtaW4taGVpZ2h0LnB4JzogMTAwfVwiXHJcbiAgICAgICAgIFtuZ1N0eWxlLnhzXT1cInsnaGVpZ2h0LnB4JzoxMjUsJ21pbi1oZWlnaHQucHgnOiAxMjV9XCI+XHJcbiAgICAgIDxhdWRpby1sZXZlbGJhciBmeEZsZXg9XCIxIDAgMVwiIFtzdHJlYW1pbmdNb2RlXT1cImlzUmVjb3JkaW5nKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc3BsYXlMZXZlbEluZm9zXT1cImRpc3BsYXlMZXZlbEluZm9zXCI+PC9hdWRpby1sZXZlbGJhcj5cclxuICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiPlxyXG4gICAgICAgIDxzcHItcmVjb3JkaW5naXRlbWNvbnRyb2xzIGZ4RmxleD1cIjEwIDAgMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F1ZGlvTG9hZGVkXT1cImRpc3BsYXlBdWRpb0NsaXA/LmJ1ZmZlciE9PW51bGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGF5U3RhcnRBY3Rpb25dPVwiY29udHJvbEF1ZGlvUGxheWVyPy5zdGFydEFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYXlTdG9wQWN0aW9uXT1cImNvbnRyb2xBdWRpb1BsYXllcj8uc3RvcEFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BlYWtEYkx2bF09XCJwZWFrTGV2ZWxJbkRiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWdjXT1cInRoaXMuYWM/LmFnY1N0YXR1c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uU2hvd1JlY29yZGluZ0RldGFpbHMpPVwiYXVkaW9TaWduYWxDb2xsYXBzZWQ9IWF1ZGlvU2lnbmFsQ29sbGFwc2VkXCI+XHJcbiAgICAgICAgPC9zcHItcmVjb3JkaW5naXRlbWNvbnRyb2xzPlxyXG4gICAgICAgIDxhcHAtdXBsb2Fkc3RhdHVzIGNsYXNzPVwicmljb250cm9scyBkYXJrXCIgZnhIaWRlIGZ4U2hvdy54cyBmeEZsZXg9XCIwIDAgMFwiICpuZ0lmPVwiZW5hYmxlVXBsb2FkUmVjb3JkaW5nc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInVwbG9hZFByb2dyZXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RhdHVzXT1cInVwbG9hZFN0YXR1c1wiIFthd2FpdE5ld1VwbG9hZF09XCJwcm9jZXNzaW5nUmVjb3JkaW5nXCI+PC9hcHAtdXBsb2Fkc3RhdHVzPlxyXG4gICAgICAgIDxhcHAtcmVhZHlzdGF0ZWluZGljYXRvciBjbGFzcz1cInJpY29udHJvbHMgZGFya1wiIGZ4SGlkZSBmeFNob3cueHMgZnhGbGV4PVwiMCAwIDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZHldPVwiZGF0YVNhdmVkICYmICFpc0FjdGl2ZSgpXCI+PC9hcHAtcmVhZHlzdGF0ZWluZGljYXRvcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgI2NvbnRyb2xwYW5lbCBjbGFzcz1cImNvbnRyb2xwYW5lbFwiIGZ4TGF5b3V0PVwicm93XCI+XHJcbiAgICAgIDxhcHAtc3Byc3RhdHVzZGlzcGxheSBmeEhpZGUueHMgZnhGbGV4PVwiMzAlIDEgMzAlXCIgW3N0YXR1c01zZ109XCJzdGF0dXNNc2dcIiBbc3RhdHVzQWxlcnRUeXBlXT1cInN0YXR1c0FsZXJ0VHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RhdHVzV2FpdGluZ109XCJzdGF0dXNXYWl0aW5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGlkZGVuLXhzXCI+PC9hcHAtc3Byc3RhdHVzZGlzcGxheT5cclxuICAgICAgPGRpdiBmeEZsZXg9XCIxMDAlIDAgMTAwJVwiIGNsYXNzPVwic3RhcnRzdG9wXCI+XHJcbiAgICAgICAgPGRpdiBzdHlsZT1cImFsaWduLWNvbnRlbnQ6IGNlbnRlclwiPlxyXG4gICAgICAgIDxidXR0b24gKGNsaWNrKT1cInN0YXJ0U3RvcFBlcmZvcm0oKVwiIFtkaXNhYmxlZF09XCJzdGFydERpc2FibGVkKCkgJiYgc3RvcERpc2FibGVkKClcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjbGFzcz1cImJpZ2J1dHRvblwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uIFtzdHlsZS5jb2xvcl09XCJzdGFydFN0b3BOZXh0SWNvbkNvbG9yKClcIiBpbmxpbmU9XCJ0cnVlXCI+e3tzdGFydFN0b3BOZXh0SWNvbk5hbWUoKX19PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC13ZWlnaHQ6IGJvbGRlcjtmb250LXNpemU6IDE0cHhcIj57e3N0YXJ0U3RvcE5leHROYW1lKCl9fTwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgZnhGbGV4PVwiMzAlIDEgMzAlXCIgPlxyXG4gICAgICAgIDxkaXYgZnhGbGV4PVwiMSAxIGF1dG9cIj48L2Rpdj5cclxuICAgICAgICA8YXBwLXVwbG9hZHN0YXR1cyBjbGFzcz1cInJpY29udHJvbHNcIiBmeEhpZGUueHMgZnhGbGV4PVwiMCAwIDBcIiAqbmdJZj1cImVuYWJsZVVwbG9hZFJlY29yZGluZ3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ1cGxvYWRQcm9ncmVzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0YXR1c109XCJ1cGxvYWRTdGF0dXNcIiBbYXdhaXROZXdVcGxvYWRdPVwicHJvY2Vzc2luZ1JlY29yZGluZ1wiPjwvYXBwLXVwbG9hZHN0YXR1cz5cclxuICAgICAgICA8YXBwLXJlYWR5c3RhdGVpbmRpY2F0b3IgY2xhc3M9XCJyaWNvbnRyb2xzXCIgZnhIaWRlLnhzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkeV09XCJkYXRhU2F2ZWQgJiYgIWlzQWN0aXZlKClcIj48L2FwcC1yZWFkeXN0YXRlaW5kaWNhdG9yPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYDpob3N0IHtcclxuICAgIGZsZXg6IDI7XHJcbiAgICBiYWNrZ3JvdW5kOiBsaWdodGdyZXk7XHJcbiAgICBkaXNwbGF5OiBmbGV4OyAvKiBWZXJ0aWNhbCBmbGV4IGNvbnRhaW5lcjogQm90dG9tIHRyYW5zcG9ydCBwYW5lbCwgYWJvdmUgcHJvbXB0aW5nIHBhbmVsICovXHJcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgbWFyZ2luOiAwO1xyXG4gICAgcGFkZGluZzogMDtcclxuICAgIGhlaWdodDogMTAwJTtcclxuICAgIG1pbi1oZWlnaHQ6IDBweDtcclxuICAgICAgLyogUHJldmVudHMgaG9yaXpvbnRhbCBzY3JvbGwgYmFyIG9uIHN3aXBlIHJpZ2h0ICovXHJcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgfWAsYC5yaWNvbnRyb2xzIHtcclxuICAgICAgICBwYWRkaW5nOiA0cHg7XHJcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICB9YCxgLmRhcmsge1xyXG4gICAgYmFja2dyb3VuZDogZGFya2dyYXk7XHJcbiAgfWAsYC5jb250cm9scGFuZWwge1xyXG4gICAgYWxpZ24tY29udGVudDogY2VudGVyO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIG1hcmdpbjogMDtcclxuICAgIHBhZGRpbmc6IDIwcHg7XHJcbiAgICBtaW4taGVpZ2h0OiBtaW4tY29udGVudDsgLyogaW1wb3J0YW50ICovXHJcbiAgfWAsYC5zdGFydHN0b3Age1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIH1gLGAuYmlnYnV0dG9uIHtcclxuICAgIG1pbi13aWR0aDogNzBweDtcclxuICAgIG1pbi1oZWlnaHQ6IDUwcHg7XHJcbiAgICBmb250LXNpemU6IDUwcHg7XHJcbiAgICBib3JkZXItcmFkaXVzOiAyMHB4O1xyXG4gIH1gXHJcbiAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEF1ZGlvUmVjb3JkZXIgZXh0ZW5kcyBCYXNpY1JlY29yZGVyIGltcGxlbWVudHMgT25Jbml0LEFmdGVyVmlld0luaXQsT25EZXN0cm95LCBBdWRpb0NhcHR1cmVMaXN0ZW5lcixSZWFkeVN0YXRlUHJvdmlkZXIge1xyXG5cclxuICBfcHJvamVjdDpQcm9qZWN0fHVuZGVmaW5lZHwgbnVsbD1udWxsO1xyXG4gIEBJbnB1dCgpIHByb2plY3ROYW1lOnN0cmluZ3x1bmRlZmluZWR8bnVsbD1udWxsO1xyXG4gIGVuYWJsZVVwbG9hZFJlY29yZGluZ3M6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGVuYWJsZURvd25sb2FkUmVjb3JkaW5nczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHN0YXR1czogU3RhdHVzID0gU3RhdHVzLkJMT0NLRUQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoUmVjb3JkZXJDb21iaVBhbmUsIHsgc3RhdGljOiB0cnVlIH0pIHJlY29yZGVyQ29tYmlQYW5lITogUmVjb3JkZXJDb21iaVBhbmU7XHJcbiAgQFZpZXdDaGlsZChMZXZlbEJhciwgeyBzdGF0aWM6IHRydWUgfSkgbGl2ZUxldmVsRGlzcGxheSE6IExldmVsQmFyO1xyXG5cclxuICBASW5wdXQoKSBkYXRhU2F2ZWQ9dHJ1ZVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBtYXhSZWNUaW1lcklkOiBudW1iZXJ8bnVsbD1udWxsO1xyXG4gIHByaXZhdGUgbWF4UmVjVGltZXJSdW5uaW5nOiBib29sZWFuPWZhbHNlO1xyXG4gIHByaXZhdGUgdXBkYXRlVGltZXJJZDogYW55O1xyXG5cclxuICBzdGFydFN0b3BOZXh0QnV0dG9uTmFtZSE6c3RyaW5nO1xyXG4gIHN0YXJ0U3RvcE5leHRCdXR0b25JY29uTmFtZSE6c3RyaW5nO1xyXG5cclxuICBhdWRpbzogYW55O1xyXG5cclxuICBwcml2YXRlIF9wcm9tcHRJbmRleDpudW1iZXJ8bnVsbD1udWxsO1xyXG5cclxuICAvL2l0ZW1zOiBBcnJheTxJdGVtPnxudWxsPW51bGw7XHJcbiAgLy9zZWxlY3RlZEl0ZW1JZHg6IG51bWJlcjtcclxuICBwcml2YXRlIF9kaXNwbGF5UmVjRmlsZTogUmVjb3JkaW5nRmlsZSB8IG51bGw9bnVsbDtcclxuICBwcml2YXRlIGRpc3BsYXlSZWNGaWxlVmVyc2lvbjogbnVtYmVyPTA7XHJcblxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgICAgICAgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgICAgICAgICAgIHByb3RlY3RlZCBzZXNzaW9uU2VydmljZTpTZXNzaW9uU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIHJlY0ZpbGVTZXJ2aWNlOlJlY29yZGluZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJvdGVjdGVkIHVwbG9hZGVyOiBTcGVlY2hSZWNvcmRlclVwbG9hZGVyLFxyXG4gICAgICAgICAgICAgIEBJbmplY3QoU1BFRUNIUkVDT1JERVJfQ09ORklHKSBwdWJsaWMgY29uZmlnPzogU3BlZWNoUmVjb3JkZXJDb25maWcpIHtcclxuICAgIHN1cGVyKGRpYWxvZyxzZXNzaW9uU2VydmljZSx1cGxvYWRlcixjb25maWcpO1xyXG5cclxuICAgIC8vc3VwZXIoaW5qZWN0b3IpO1xyXG4gICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuSURMRTtcclxuXHJcbiAgICB0aGlzLmF1ZGlvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F1ZGlvJyk7XHJcblxyXG4gICAgaWYgKHRoaXMuY29uZmlnICYmIHRoaXMuY29uZmlnLmVuYWJsZVVwbG9hZFJlY29yZGluZ3MgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLmVuYWJsZVVwbG9hZFJlY29yZGluZ3MgPSB0aGlzLmNvbmZpZy5lbmFibGVVcGxvYWRSZWNvcmRpbmdzO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY29uZmlnICYmIHRoaXMuY29uZmlnLmVuYWJsZURvd25sb2FkUmVjb3JkaW5ncyAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuZW5hYmxlRG93bmxvYWRSZWNvcmRpbmdzID0gdGhpcy5jb25maWcuZW5hYmxlRG93bmxvYWRSZWNvcmRpbmdzO1xyXG4gICAgfVxyXG4gICAgLy90aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcblxyXG4gICAgdGhpcy5zdHJlYW1MZXZlbE1lYXN1cmUubGV2ZWxMaXN0ZW5lciA9IHRoaXMubGl2ZUxldmVsRGlzcGxheTtcclxuICAgIHRoaXMuc3RyZWFtTGV2ZWxNZWFzdXJlLnBlYWtMZXZlbExpc3RlbmVyPShwZWFrTHZsSW5EYik9PntcclxuICAgICAgdGhpcy5wZWFrTGV2ZWxJbkRiPXBlYWtMdmxJbkRiO1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICAgIC8vbGV0IHdha2VMb2NrU3VwcD0oJ3dha2VMb2NrJyBpbiBuYXZpZ2F0b3IpO1xyXG4gICAgLy9hbGVydCgnV2FrZSBsb2NrIEFQSSBzdXBwb3J0ZWQ6ICcrd2FrZUxvY2tTdXBwKTtcclxuICB9XHJcblxyXG4gIHJlYWR5KCk6Ym9vbGVhbntcclxuICAgIHJldHVybiB0aGlzLmRhdGFTYXZlZCAmJiAhdGhpcy5pc0FjdGl2ZSgpXHJcbiAgfVxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZVdha2VMb2NrQ29uZCgpO1xyXG4gICAgICAgdGhpcy5kZXN0cm95ZWQ9dHJ1ZTtcclxuICAgICAgIC8vIFRPRE8gc3RvcCBjYXB0dXJlIC9wbGF5YmFja1xyXG4gICAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdGFydEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RvcEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMubmV4dEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMucGF1c2VBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5wbGF5U3RhcnRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG5cclxuICAgIGxldCBjb250ZXh0OkF1ZGlvQ29udGV4dHxudWxsPW51bGw7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb250ZXh0ID0gQXVkaW9Db250ZXh0UHJvdmlkZXIuYXVkaW9Db250ZXh0SW5zdGFuY2UoKVxyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIHRoaXMuc3RhdHVzID0gU3RhdHVzLkVSUk9SO1xyXG4gICAgICBsZXQgZXJyTXNnID0gJ1Vua25vd24gZXJyb3InO1xyXG4gICAgICBpZihlcnIgaW5zdGFuY2VvZiBFcnJvcil7XHJcbiAgICAgICAgZXJyTXNnPWVyci5tZXNzYWdlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ0VSUk9SOiAnICsgZXJyTXNnO1xyXG4gICAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdlcnJvcic7XHJcbiAgICAgIHRoaXMuZGlhbG9nLm9wZW4oTWVzc2FnZURpYWxvZywge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIHR5cGU6ICdlcnJvcicsXHJcbiAgICAgICAgICB0aXRsZTogJ0Vycm9yJyxcclxuICAgICAgICAgIG1zZzogZXJyTXNnLFxyXG4gICAgICAgICAgYWR2aXNlOiAnUGxlYXNlIHVzZSBhIHN1cHBvcnRlZCBicm93c2VyLicsXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYoY29udGV4dCkge1xyXG4gICAgICBjb25zb2xlLmluZm8oXCJTdGF0ZSBvZiBhdWRpbyBjb250ZXh0OiBcIiArIGNvbnRleHQuc3RhdGUpXHJcbiAgICB9ZWxzZXtcclxuICAgICAgY29uc29sZS5pbmZvKFwiTm8gYXVkaW8gY29udGV4dCBhdmFpbGFibGUhXCIpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFjb250ZXh0IHx8ICFuYXZpZ2F0b3IubWVkaWFEZXZpY2VzKSB7XHJcbiAgICAgIHRoaXMuc3RhdHVzID0gU3RhdHVzLkVSUk9SO1xyXG4gICAgICBsZXQgZXJyTXNnID0gJ0Jyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBNZWRpYSBzdHJlYW1zISc7XHJcbiAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ0VSUk9SOiAnICsgZXJyTXNnO1xyXG4gICAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdlcnJvcic7XHJcbiAgICAgIHRoaXMuZGlhbG9nLm9wZW4oTWVzc2FnZURpYWxvZywge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIHR5cGU6ICdlcnJvcicsXHJcbiAgICAgICAgICB0aXRsZTogJ0Vycm9yJyxcclxuICAgICAgICAgIG1zZzogZXJyTXNnLFxyXG4gICAgICAgICAgYWR2aXNlOiAnUGxlYXNlIHVzZSBhIHN1cHBvcnRlZCBicm93c2VyLicsXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy90aGlzLmNvbnRyb2xBdWRpb1BsYXllciA9IG5ldyBBdWRpb1BsYXllcihjb250ZXh0LCB0aGlzKTtcclxuICAgICAgdGhpcy5hYyA9IG5ldyBBdWRpb0NhcHR1cmUoY29udGV4dCk7XHJcbiAgICAgIGlmICh0aGlzLmFjKSB7XHJcbiAgICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0YXJ0QWN0aW9uLm9uQWN0aW9uID0gKCkgPT4gdGhpcy5zdGFydEl0ZW0oKTtcclxuICAgICAgICB0aGlzLmFjLmxpc3RlbmVyID0gdGhpcztcclxuICAgICAgICB0aGlzLmNvbmZpZ3VyZVN0cmVhbUNhcHR1cmVTdHJlYW0oKTtcclxuXHJcbiAgICAgICAgLy8gRG9uJ3QgbGlzdCB0aGUgZGV2aWNlcyBoZXJlLiBJZiB3ZSBkbyBub3QgaGF2ZSBhdWRpbyBwZXJtaXNzaW9ucyB3ZSBvbmx5IGdldCBhbm9ueW1pemVkIGRldmljZXMgd2l0aG91dCBsYWJlbHMuXHJcbiAgICAgICAgLy90aGlzLmFjLmxpc3REZXZpY2VzKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0YXJ0QWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICBsZXQgZXJyTXNnID0gJ0Jyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBNZWRpYS9BdWRpbyBBUEkhJztcclxuICAgICAgICB0aGlzLnN0YXR1c01zZyA9ICdFUlJPUjogJyArIGVyck1zZztcclxuICAgICAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdlcnJvcic7XHJcbiAgICAgICAgdGhpcy5kaWFsb2cub3BlbihNZXNzYWdlRGlhbG9nLCB7XHJcbiAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXHJcbiAgICAgICAgICAgIHRpdGxlOiAnRXJyb3InLFxyXG4gICAgICAgICAgICBtc2c6IGVyck1zZyxcclxuICAgICAgICAgICAgYWR2aXNlOiAnUGxlYXNlIHVzZSBhIHN1cHBvcnRlZCBicm93c2VyLicsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdG9wQWN0aW9uLm9uQWN0aW9uID0gKCkgPT4gdGhpcy5zdG9wSXRlbSgpO1xyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMubmV4dEFjdGlvbi5vbkFjdGlvbiA9ICgpID0+IHRoaXMuc3RvcEl0ZW0oKTtcclxuICAgICAgLy90aGlzLnRyYW5zcG9ydEFjdGlvbnMucGF1c2VBY3Rpb24ub25BY3Rpb24gPSAoKSA9PiB0aGlzLnBhdXNlSXRlbSgpO1xyXG5cclxuICAgICAgdGhpcy5wbGF5U3RhcnRBY3Rpb24ub25BY3Rpb24gPSAoKSA9PiB0aGlzLmNvbnRyb2xBdWRpb1BsYXllci5zdGFydCgpO1xyXG5cclxuICAgIH1cclxuICAgIHRoaXMudXBsb2FkZXIubGlzdGVuZXIgPSAodWUpID0+IHtcclxuICAgICAgdGhpcy51cGxvYWRVcGRhdGUodWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleXByZXNzJywgWyckZXZlbnQnXSlcclxuICBvbktleVByZXNzKGtlOiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAoa2Uua2V5ID09ICcgJykge1xyXG4gICAgICAvL3RoaXMudHJhbnNwb3J0QWN0aW9ucy5zdGFydEFjdGlvbi5wZXJmb3JtKCk7XHJcbiAgICAgIC8vdGhpcy50cmFuc3BvcnRBY3Rpb25zLm5leHRBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleWRvd24nLCBbJyRldmVudCddKVxyXG4gIG9uS2V5RG93bihrZTogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKGtlLmtleSA9PSAnICcpIHtcclxuICAgICAgaWYoIXRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdGFydEFjdGlvbi5kaXNhYmxlZCl7XHJcbiAgICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0YXJ0QWN0aW9uLnBlcmZvcm0oKTtcclxuICAgICAgfWVsc2UgaWYoIXRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdG9wQWN0aW9uLmRpc2FibGVkKSB7XHJcbiAgICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoa2Uua2V5ID09ICdwJykge1xyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMucGF1c2VBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKGtlLmtleSA9PSAnRXNjYXBlJykge1xyXG4gICAgICBpZiAoIXRoaXMuYXVkaW9TaWduYWxDb2xsYXBzZWQpIHtcclxuICAgICAgICB0aGlzLmF1ZGlvU2lnbmFsQ29sbGFwc2VkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RvcEFjdGlvbi5wZXJmb3JtKCk7XHJcbiAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5wYXVzZUFjdGlvbi5wZXJmb3JtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGtlLmtleSA9PSAnTWVkaWFQbGF5UGF1c2UnKSB7XHJcbiAgICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uLnBlcmZvcm0oKTtcclxuICAgIH1cclxuICAgIGlmIChrZS5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuZndkQWN0aW9uLnBlcmZvcm0oKTtcclxuICAgIH1cclxuICAgIGlmIChrZS5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XHJcbiAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5id2RBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNUZXN0U2Vzc2lvbigpOmJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICgodGhpcy5fc2Vzc2lvbiE9bnVsbCkgJiYgKHRoaXMuX3Nlc3Npb24udHlwZSA9PT0gJ1RFU1QnIHx8IHRoaXMuX3Nlc3Npb24udHlwZT09PSdURVNUX0RFRl9BJyB8fCB0aGlzLl9zZXNzaW9uLnR5cGUgPT09ICdTSU5VU19URVNUJykpO1xyXG4gIH1cclxuXHJcbiAgaXNEZWZhdWx0QXVkaW9UZXN0U2Vzc2lvbigpOmJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICgodGhpcy5fc2Vzc2lvbiE9bnVsbCkgJiYgKHRoaXMuX3Nlc3Npb24udHlwZT09PSdURVNUX0RFRl9BJykpO1xyXG4gIH1cclxuXHJcbiAgaXNEZWZhdWx0QXVkaW9UZXN0U2Vzc2lvbk92ZXJ3cml0ZWluZ1Byb2plY3RSZXF1aXJlbWVudHMoKTpib29sZWFuIHtcclxuICAgIHJldHVybiAoKHRoaXMuX3Nlc3Npb24hPW51bGwpICYmICh0aGlzLl9zZXNzaW9uLnR5cGU9PT0nVEVTVF9ERUZfQScpICYmICh0aGlzLmF1ZGlvRGV2aWNlcyE9bnVsbCkgJiYgdGhpcy5hdWRpb0RldmljZXMubGVuZ3RoPjApXHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIGZldGNoUmVjb3JkaW5ncyhzZXNzOlNlc3Npb24pe1xyXG4gICAgdGhpcy5zdGF0dXNBbGVydFR5cGU9J2luZm8nO1xyXG4gICAgdGhpcy5zdGF0dXNNc2cgPSAnRmV0Y2hpbmcgaW5mb3Mgb2YgcmVjb3JkaW5ncy4uLic7XHJcbiAgICB0aGlzLnN0YXR1c1dhaXRpbmc9dHJ1ZTtcclxuICAgIGxldCBwck5tOnN0cmluZ3xudWxsPW51bGw7XHJcbiAgICBpZih0aGlzLnByb2plY3QpIHtcclxuICAgICAgbGV0IHJmc09icyA9IHRoaXMucmVjRmlsZVNlcnZpY2UucmVjb3JkaW5nRmlsZUxpc3QodGhpcy5wcm9qZWN0Lm5hbWUsIHNlc3Muc2Vzc2lvbklkKTtcclxuICAgICAgcmZzT2JzLnN1YnNjcmliZSh7bmV4dDoocmZzOiBBcnJheTxSZWNvcmRpbmdGaWxlPikgPT4ge1xyXG4gICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2luZm8nO1xyXG4gICAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ1JlY2VpdmVkIGluZm9zIG9mIHJlY29yZGluZ3MuJztcclxuICAgICAgICB0aGlzLnN0YXR1c1dhaXRpbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAocmZzKSB7XHJcbiAgICAgICAgICBpZiAocmZzIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICAgICAgcmZzLmZvckVhY2goKHJmKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYocmYuc3RhcnRlZERhdGUpe1xyXG4gICAgICAgICAgICAgICAgcmYuX3N0YXJ0ZWRBc0RhdGVPYmo9bmV3IERhdGUocmYuc3RhcnRlZERhdGUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZihyZi5kYXRlKXtcclxuICAgICAgICAgICAgICAgIHJmLl9kYXRlQXNEYXRlT2JqPW5ldyBEYXRlKHJmLmRhdGUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLnJlY29yZGVyQ29tYmlQYW5lLnB1c2gocmYpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXhwZWN0ZWQgdHlwZSBhcnJheSBmb3IgbGlzdCBvZiBhbHJlYWR5IHJlY29yZGVkIGZpbGVzICcpXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJSZWNvcmRpbmcgZmlsZSBsaXN0OiBcIiArIHJmcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCBlcnJvcjooZXJyKSA9PiB7XHJcbiAgICAgICAgLy8gRmFpbGVkIGZldGNoaW5nIGV4aXN0aW5nLCBidXQgd2Ugc3RhcnQgdGhlIHNlc3Npb24gYW55d2F5XHJcbiAgICAgICAgdGhpcy5zdGFydCgpXHJcbiAgICAgIH0sIGNvbXBsZXRlOigpID0+IHtcclxuICAgICAgICAvLyBOb3JtYWwgc3RhcnRcclxuICAgICAgICB0aGlzLnN0YXJ0KClcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIH1lbHNle1xyXG4gICAgICAvLyBObyBwcm9qZWN0IGRlZiAtPiBlcnJvclxyXG4gICAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdlcnJvcic7XHJcbiAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ05vIHByb2plY3QgZGVmaW5pdG9uLic7XHJcbiAgICAgIHRoaXMuc3RhdHVzV2FpdGluZyA9IGZhbHNlO1xyXG4gICAgICBjb25zb2xlLmVycm9yKHRoaXMuc3RhdHVzTXNnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBzZXQgcHJvamVjdChwcm9qZWN0OiBQcm9qZWN0fHVuZGVmaW5lZHxudWxsKSB7XHJcbiAgICB0aGlzLl9wcm9qZWN0ID0gcHJvamVjdDtcclxuICAgIGxldCBjaENudCA9IFByb2plY3RVdGlsLkRFRkFVTFRfQVVESU9fQ0hBTk5FTF9DT1VOVDtcclxuXHJcbiAgICBpZiAocHJvamVjdCkge1xyXG4gICAgICBjb25zb2xlLmluZm8oXCJQcm9qZWN0IG5hbWU6IFwiICsgcHJvamVjdC5uYW1lKVxyXG4gICAgICBpZihwcm9qZWN0LnJlY29yZGluZ0RldmljZVdha2VMb2NrPT09dHJ1ZSl7XHJcbiAgICAgICAgdGhpcy53YWtlTG9jaz10cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYXVkaW9EZXZpY2VzID0gcHJvamVjdC5hdWRpb0RldmljZXM7XHJcbiAgICAgIGNoQ250ID0gUHJvamVjdFV0aWwuYXVkaW9DaGFubmVsQ291bnQocHJvamVjdCk7XHJcbiAgICAgIGNvbnNvbGUuaW5mbyhcIlByb2plY3QgcmVxdWVzdGVkIHJlY29yZGluZyBjaGFubmVsIGNvdW50OiBcIiArIGNoQ250KTtcclxuICAgICAgdGhpcy5hdXRvR2FpbkNvbnRyb2xDb25maWdzPXByb2plY3QuYXV0b0dhaW5Db250cm9sQ29uZmlncztcclxuICAgICAgaWYocHJvamVjdC5jaHVua2VkUmVjb3JkaW5nPT09dHJ1ZSl7XHJcbiAgICAgICAgdGhpcy51cGxvYWRDaHVua1NpemVTZWNvbmRzPUJhc2ljUmVjb3JkZXIuREVGQVVMVF9DSFVOS19TSVpFX1NFQ09ORFM7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIHRoaXMudXBsb2FkQ2h1bmtTaXplU2Vjb25kcz1udWxsO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiRW1wdHkgcHJvamVjdCBjb25maWd1cmF0aW9uIVwiKVxyXG4gICAgfVxyXG4gICAgdGhpcy5jaGFubmVsQ291bnQgPSBjaENudDtcclxuICB9XHJcblxyXG5cclxuICBnZXQgcHJvamVjdCgpOlByb2plY3R8dW5kZWZpbmVkfG51bGx7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJvamVjdDtcclxuICB9XHJcblxyXG4gIHNlbGVjdFJlY29yZGluZ0ZpbGUocmY6UmVjb3JkaW5nRmlsZSl7XHJcbiAgICB0aGlzLmRpc3BsYXlSZWNGaWxlPXJmO1xyXG4gIH1cclxuXHJcbiAgdXBsb2FkVXBkYXRlKHVlOiBVcGxvYWRlclN0YXR1c0NoYW5nZUV2ZW50KSB7XHJcbiAgICBsZXQgdXBTdGF0dXMgPSB1ZS5zdGF0dXM7XHJcbiAgICB0aGlzLmRhdGFTYXZlZCA9IChVcGxvYWRlclN0YXR1cy5ET05FID09PSB1cFN0YXR1cyk7XHJcbiAgICBsZXQgcGVyY2VudFVwbCA9IHVlLnBlcmNlbnREb25lKCk7XHJcbiAgICBpZiAoVXBsb2FkZXJTdGF0dXMuRVJSID09PSB1cFN0YXR1cykge1xyXG4gICAgICB0aGlzLnVwbG9hZFN0YXR1cyA9ICd3YXJuJ1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHBlcmNlbnRVcGwgPCA1MCkge1xyXG4gICAgICAgIHRoaXMudXBsb2FkU3RhdHVzID0gJ2FjY2VudCdcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnVwbG9hZFN0YXR1cyA9ICdzdWNjZXNzJ1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXBsb2FkUHJvZ3Jlc3MgPSBwZXJjZW50VXBsO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgfVxyXG5cclxuICBzZXQgY29udHJvbEF1ZGlvUGxheWVyKGNvbnRyb2xBdWRpb1BsYXllcjogQXVkaW9QbGF5ZXIpIHtcclxuICAgIGlmICh0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIpIHtcclxuICAgICAgLy90aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIubGlzdGVuZXI9bnVsbDtcclxuICAgIH1cclxuICAgIHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllciA9IGNvbnRyb2xBdWRpb1BsYXllcjtcclxuICAgIGlmICh0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIpIHtcclxuICAgICAgdGhpcy5fY29udHJvbEF1ZGlvUGxheWVyLmxpc3RlbmVyID0gdGhpcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBjb250cm9sQXVkaW9QbGF5ZXIoKTogQXVkaW9QbGF5ZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllcjtcclxuICB9XHJcblxyXG4gIHVwZGF0ZShlOiBBdWRpb1BsYXllckV2ZW50KSB7XHJcbiAgICBpZiAoZS50eXBlID09IEV2ZW50VHlwZS5TVEFSVEVEKSB7XHJcbiAgICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy51cGRhdGVUaW1lcklkID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICAvL3RoaXMuYXVkaW9TaWduYWwucGxheUZyYW1lUG9zaXRpb24gPSB0aGlzLmFwLnBsYXlQb3NpdGlvbkZyYW1lcztcclxuICAgICAgfSwgNTApO1xyXG4gICAgfSBlbHNlIGlmIChlLnR5cGUgPT0gRXZlbnRUeXBlLlNUT1BQRUQgfHwgZS50eXBlID09IEV2ZW50VHlwZS5FTkRFRCkge1xyXG4gICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLnVwZGF0ZVRpbWVySWQpO1xyXG4gICAgICAvLyB0aGlzLmF1ZGlvU2lnbmFsLnBsYXlGcmFtZVBvc2l0aW9uID0gdGhpcy5hcC5wbGF5UG9zaXRpb25GcmFtZXM7XHJcbiAgICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uLmRpc2FibGVkID0gKCEodGhpcy5kaXNwbGF5UmVjRmlsZSkpO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXJ0RGlzYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gIXRoaXMudHJhbnNwb3J0QWN0aW9ucyB8fCB0aGlzLnJlYWRvbmx5IHx8IHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdGFydEFjdGlvbi5kaXNhYmxlZFxyXG4gIH1cclxuXHJcbiAgc3RvcERpc2FibGVkKCkge1xyXG4gICAgcmV0dXJuICF0aGlzLnRyYW5zcG9ydEFjdGlvbnMgfHwgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BBY3Rpb24uZGlzYWJsZWRcclxuICB9XHJcblxyXG4gIHN0YXJ0U3RvcE5leHROYW1lKCk6c3RyaW5ne1xyXG4gICAgaWYoIXRoaXMuc3RhcnREaXNhYmxlZCgpKXtcclxuICAgICAgdGhpcy5zdGFydFN0b3BOZXh0QnV0dG9uTmFtZT1cIlN0YXJ0XCJcclxuICAgIH1lbHNlIGlmKCF0aGlzLnN0b3BEaXNhYmxlZCgpKSB7XHJcbiAgICAgIHRoaXMuc3RhcnRTdG9wTmV4dEJ1dHRvbk5hbWUgPSBcIlN0b3BcIlxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuc3RhcnRTdG9wTmV4dEJ1dHRvbk5hbWU7XHJcbiAgfVxyXG4gIHN0YXJ0U3RvcE5leHRJY29uTmFtZSgpOnN0cmluZ3tcclxuICAgIGlmKCF0aGlzLnN0YXJ0RGlzYWJsZWQoKSl7XHJcbiAgICAgIHRoaXMuc3RhcnRTdG9wTmV4dEJ1dHRvbkljb25OYW1lPVwiZmliZXJfbWFudWFsX3JlY29yZFwiXHJcbiAgICB9ZWxzZSBpZighdGhpcy5zdG9wRGlzYWJsZWQoKSl7XHJcbiAgICAgIHRoaXMuc3RhcnRTdG9wTmV4dEJ1dHRvbkljb25OYW1lPVwic3RvcFwiXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5zdGFydFN0b3BOZXh0QnV0dG9uSWNvbk5hbWVcclxuICB9XHJcbiAgc3RhcnRTdG9wTmV4dEljb25Db2xvcigpOnN0cmluZ3tcclxuICAgIGlmKCF0aGlzLnN0YXJ0RGlzYWJsZWQoKSl7XHJcbiAgICAgIHJldHVybiBcInJlZFwiXHJcbiAgICB9ZWxzZSBpZighdGhpcy5zdG9wRGlzYWJsZWQoKSl7XHJcbiAgICAgIHJldHVybiBcInllbGxvd1wiXHJcbiAgICB9ZWxzZXtcclxuICAgICAgcmV0dXJuIFwiZ3JleVwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhcnRTdG9wUGVyZm9ybSgpe1xyXG4gICAgaWYoIXRoaXMuc3RhcnREaXNhYmxlZCgpKXtcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0YXJ0QWN0aW9uLnBlcmZvcm0oKTtcclxuICAgIH1lbHNlIGlmKCF0aGlzLnN0b3BEaXNhYmxlZCgpKXtcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhcnRJdGVtKCkge1xyXG4gICAgc3VwZXIuc3RhcnRJdGVtKCk7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuZndkQWN0aW9uLmRpc2FibGVkID0gdHJ1ZVxyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLmZ3ZE5leHRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlXHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuYndkQWN0aW9uLmRpc2FibGVkID0gdHJ1ZVxyXG4gICAgdGhpcy5kaXNwbGF5UmVjRmlsZSA9IG51bGw7XHJcbiAgICB0aGlzLmRpc3BsYXlSZWNGaWxlVmVyc2lvbiA9IDA7XHJcbiAgICB0aGlzLmRpc3BsYXlBdWRpb0NsaXAgPSBudWxsO1xyXG4gICAgdGhpcy5zaG93UmVjb3JkaW5nKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuYWMpIHtcclxuICAgICAgaWYgKCF0aGlzLmFjLm9wZW5lZCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zZWxlY3RlZERldmljZUlkKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIk9wZW4gc2Vzc2lvbiB3aXRoIGF1ZGlvIGRldmljZSBJZDogXFwnXCIgKyB0aGlzLl9zZWxlY3RlZERldmljZUlkICsgXCJcXCcgZm9yIFwiICsgdGhpcy5fY2hhbm5lbENvdW50ICsgXCIgY2hhbm5lbHNcIik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiT3BlbiBzZXNzaW9uIHdpdGggZGVmYXVsdCBhdWRpbyBkZXZpY2UgZm9yIFwiICsgdGhpcy5fY2hhbm5lbENvdW50ICsgXCIgY2hhbm5lbHNcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWMub3Blbih0aGlzLl9jaGFubmVsQ291bnQsIHRoaXMuX3NlbGVjdGVkRGV2aWNlSWQsdGhpcy5fYXV0b0dhaW5Db250cm9sQ29uZmlncyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5hYy5zdGFydCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgZG93bmxvYWRSZWNvcmRpbmcoKSB7XHJcbiAgICBpZiAodGhpcy5kaXNwbGF5UmVjRmlsZSkge1xyXG4gICAgICBsZXQgYWI6IEF1ZGlvQnVmZmVyIHwgbnVsbCA9IHRoaXMuZGlzcGxheVJlY0ZpbGUuYXVkaW9CdWZmZXI7XHJcbiAgICAgIGxldCB3dyA9IG5ldyBXYXZXcml0ZXIoKTtcclxuICAgICAgaWYgKGFiKSB7XHJcbiAgICAgICAgbGV0IHdhdkZpbGUgPSB3dy53cml0ZUFzeW5jKGFiLCAod2F2RmlsZSkgPT4ge1xyXG4gICAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbd2F2RmlsZV0sIHt0eXBlOiAnYXVkaW8vd2F2J30pO1xyXG4gICAgICAgICAgbGV0IHJmVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuXHJcbiAgICAgICAgICBsZXQgZGF0YURubExuayA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgICAgLy9kYXRhRG5sTG5rLm5hbWUgPSAnUmVjb3JkaW5nJztcclxuICAgICAgICAgIGRhdGFEbmxMbmsuaHJlZiA9IHJmVXJsO1xyXG5cclxuICAgICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuYm9keSwgZGF0YURubExuayk7XHJcblxyXG4gICAgICAgICAgLy8gZG93bmxvYWQgcHJvcGVydHkgbm90IHlldCBpbiBUUyBkZWZcclxuICAgICAgICAgIGlmICh0aGlzLmRpc3BsYXlSZWNGaWxlKSB7XHJcbiAgICAgICAgICAgIGxldCBmbiA9IHRoaXMuZGlzcGxheVJlY0ZpbGUuZmlsZW5hbWVTdHJpbmcoKTtcclxuICAgICAgICAgICAgZm4gKz0gJ18nICsgdGhpcy5kaXNwbGF5UmVjRmlsZVZlcnNpb247XHJcbiAgICAgICAgICAgIGZuICs9ICcud2F2JztcclxuICAgICAgICAgICAgZGF0YURubExuay5kb3dubG9hZCA9IGZuO1xyXG4gICAgICAgICAgICBkYXRhRG5sTG5rLmNsaWNrKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKGRvY3VtZW50LmJvZHksIGRhdGFEbmxMbmspO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXQgZGlzcGxheVJlY0ZpbGUoZGlzcGxheVJlY0ZpbGU6IFJlY29yZGluZ0ZpbGUgfCBudWxsKSB7XHJcbiAgICB0aGlzLl9kaXNwbGF5UmVjRmlsZSA9IGRpc3BsYXlSZWNGaWxlO1xyXG4gICAgaWYgKHRoaXMuX2Rpc3BsYXlSZWNGaWxlKSB7XHJcbiAgICAgIGxldCBhYjogQXVkaW9CdWZmZXJ8IG51bGwgPSB0aGlzLl9kaXNwbGF5UmVjRmlsZS5hdWRpb0J1ZmZlcjtcclxuICAgICAgaWYoYWIpIHtcclxuICAgICAgICB0aGlzLmRpc3BsYXlBdWRpb0NsaXAgPSBuZXcgQXVkaW9DbGlwKGFiKTtcclxuICAgICAgICB0aGlzLmNvbnRyb2xBdWRpb1BsYXllci5hdWRpb0NsaXAgPSB0aGlzLmRpc3BsYXlBdWRpb0NsaXA7XHJcbiAgICAgIH1lbHNlIHtcclxuICAgICAgICAvLyBjbGVhciBmb3Igbm93IC4uLlxyXG4gICAgICAgIHRoaXMuZGlzcGxheUF1ZGlvQ2xpcCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jb250cm9sQXVkaW9QbGF5ZXIuYXVkaW9DbGlwID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllciAmJiB0aGlzLl9zZXNzaW9uKSB7XHJcbiAgICAgICAgICAgIC8vLi4uIGFuZCB0cnkgdG8gZmV0Y2ggZnJvbSBzZXJ2ZXJcclxuICAgICAgICAgICAgdGhpcy5hdWRpb0ZldGNoU3Vic2NyaXB0aW9uID0gdGhpcy5yZWNGaWxlU2VydmljZS5mZXRjaEFuZEFwcGx5UmVjb3JkaW5nRmlsZSh0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIuY29udGV4dCwgdGhpcy5fc2Vzc2lvbi5wcm9qZWN0LCB0aGlzLl9kaXNwbGF5UmVjRmlsZSkuc3Vic2NyaWJlKChyZikgPT4ge1xyXG4gICAgICAgICAgICAgIGxldCBmYWIgPSBudWxsO1xyXG4gICAgICAgICAgICAgIGlmIChyZiAmJiB0aGlzLl9kaXNwbGF5UmVjRmlsZSkge1xyXG4gICAgICAgICAgICAgICAgZmFiID0gdGhpcy5fZGlzcGxheVJlY0ZpbGUuYXVkaW9CdWZmZXI7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ1JlY29yZGluZyBmaWxlIGNvdWxkIG5vdCBiZSBsb2FkZWQuJ1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnZXJyb3InXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChmYWIpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5QXVkaW9DbGlwID0gbmV3IEF1ZGlvQ2xpcChmYWIpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xBdWRpb1BsYXllci5hdWRpb0NsaXAgPXRoaXMuZGlzcGxheUF1ZGlvQ2xpcFxyXG4gICAgICAgICAgICAgIHRoaXMuc2hvd1JlY29yZGluZygpO1xyXG5cclxuICAgICAgICAgICAgfSwgZXJyID0+IHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQ291bGQgbm90IGxvYWQgcmVjb3JkaW5nIGZpbGUgZnJvbSBzZXJ2ZXI6IFwiICsgZXJyKVxyXG4gICAgICAgICAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ1JlY29yZGluZyBmaWxlIGNvdWxkIG5vdCBiZSBsb2FkZWQ6ICcgKyBlcnJcclxuICAgICAgICAgICAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdlcnJvcidcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ1JlY29yZGluZyBmaWxlIGNvdWxkIG5vdCBiZSBkZWNvZGVkLiBBdWRpbyBjb250ZXh0IHVuYXZhaWxhYmxlLidcclxuICAgICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJ1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGlzcGxheUF1ZGlvQ2xpcCA9IG51bGw7XHJcbiAgICAgIHRoaXMuY29udHJvbEF1ZGlvUGxheWVyLmF1ZGlvQ2xpcCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNob3dSZWNvcmRpbmcoKTtcclxuICB9XHJcblxyXG4gIGdldCBkaXNwbGF5UmVjRmlsZSgpOiBSZWNvcmRpbmdGaWxlIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGlzcGxheVJlY0ZpbGU7XHJcbiAgfVxyXG5cclxuICBzaG93UmVjb3JkaW5nKCkge1xyXG4gICAgdGhpcy5jb250cm9sQXVkaW9QbGF5ZXIuc3RvcCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmRpc3BsYXlBdWRpb0NsaXApIHtcclxuXHJcbiAgICAgIHRoaXMubGV2ZWxNZWFzdXJlLmNhbGNCdWZmZXJMZXZlbEluZm9zKHRoaXMuZGlzcGxheUF1ZGlvQ2xpcC5idWZmZXIsIExFVkVMX0JBUl9JTlRFUlZBTExfU0VDT05EUykudGhlbigobGV2ZWxJbmZvcykgPT4ge1xyXG4gICAgICAgIHRoaXMuZGlzcGxheUxldmVsSW5mb3MgPSBsZXZlbEluZm9zO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5wbGF5U3RhcnRBY3Rpb24uZGlzYWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgLy8gVE9ET1xyXG4gICAgICAvLyBTZXR0aW5nIHRvIG51bGwgZG9lcyBub3QgdHJpZ2dlciBhIGNoYW5nZSBpZiBpdCB3YXMgIG51bGwgYmVmb3JlIChoYXBwZW5zIGFmdGVyIG5leHRpdGVtKCkgaW4gQVVUT1BST0dSRVNTIG1vZGUpXHJcbiAgICAgIC8vIFRoZSBsZXZlbCBiYXIgZGlzcGxheSBkb2VzIG5vdCBjbGVhciwgaXQgc2hvd3MgdGhlIGxhc3QgY2FwdHVyZWQgc3RyZWFtXHJcbiAgICAgIHRoaXMuZGlzcGxheUxldmVsSW5mb3MgPSBudWxsO1xyXG5cclxuICAgICAgdGhpcy5wbGF5U3RhcnRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG5cclxuICAgICAgLy8gQ29sbGFwc2UgYXVkaW8gc2lnbmFsIGRpc3BsYXkgaWYgb3BlblxyXG4gICAgICBpZiAoIXRoaXMuYXVkaW9TaWduYWxDb2xsYXBzZWQpIHtcclxuICAgICAgICB0aGlzLmF1ZGlvU2lnbmFsQ29sbGFwc2VkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVTdGFydEFjdGlvbkRpc2FibGVTdGF0ZSgpe1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0YXJ0QWN0aW9uLmRpc2FibGVkPSEodGhpcy5hYyk7XHJcbiAgfVxyXG5cclxuICBzdGFydCgpIHtcclxuICAgIHN1cGVyLnN0YXJ0KCk7XHJcbiAgICB0aGlzLnJlY29yZGVyQ29tYmlQYW5lLnNlbGVjdFRvcCgpO1xyXG4gICAgdGhpcy5lbmFibGVOYXZpZ2F0aW9uKCk7XHJcbiAgICB0aGlzLnVwZGF0ZVN0YXJ0QWN0aW9uRGlzYWJsZVN0YXRlKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgaXNSZWNvcmRpbmcoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKHRoaXMuc3RhdHVzID09PSBTdGF0dXMuUkVDT1JESU5HKTtcclxuICB9XHJcblxyXG4gIGlzQWN0aXZlKCk6IGJvb2xlYW57XHJcbiAgICByZXR1cm4gKCEodGhpcy5zdGF0dXMgPT09IFN0YXR1cy5CTE9DS0VEIHx8IHRoaXMuc3RhdHVzPT09IFN0YXR1cy5JRExFIHx8IHRoaXMuc3RhdHVzPT09U3RhdHVzLkVSUk9SKSB8fCB0aGlzLnByb2Nlc3NpbmdSZWNvcmRpbmcgfHwgdGhpcy5zZXNzaW9uU2VydmljZS51cGxvYWRDb3VudD4wKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVOYXZpZ2F0aW9uQWN0aW9ucygpe1xyXG5cclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5md2RBY3Rpb24uZGlzYWJsZWQgPSB0aGlzLm5hdmlnYXRpb25EaXNhYmxlZDtcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5id2RBY3Rpb24uZGlzYWJsZWQgPSB0aGlzLm5hdmlnYXRpb25EaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIGVuYWJsZVN0YXJ0VXNlckdlc3R1cmUoKSB7XHJcbiAgICBzdXBlci5lbmFibGVTdGFydFVzZXJHZXN0dXJlKCk7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RhcnRBY3Rpb24uZGlzYWJsZWQ9ISh0aGlzLmFjKTtcclxuICB9XHJcblxyXG4gIGVuYWJsZU5hdmlnYXRpb24oKXtcclxuICAgIHRoaXMubmF2aWdhdGlvbkRpc2FibGVkPWZhbHNlO1xyXG4gICAgdGhpcy51cGRhdGVOYXZpZ2F0aW9uQWN0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgb3BlbmVkKCkge1xyXG4gICAgaWYodGhpcy5hYykge1xyXG4gICAgICB0aGlzLmFjLnN0YXJ0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGFydGVkKCkge1xyXG4gICAgc3VwZXIuc3RhcnRlZCgpO1xyXG5cclxuICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2luZm8nO1xyXG4gICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVjb3JkaW5nLi4uJztcclxuXHJcbiAgICBsZXQgbWF4UmVjb3JkaW5nVGltZU1zID0gTUFYX1JFQ09SRElOR19USU1FX01TO1xyXG4gICAgdGhpcy5tYXhSZWNUaW1lcklkID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnN0b3BSZWNvcmRpbmdNYXhSZWMoKVxyXG4gICAgfSwgbWF4UmVjb3JkaW5nVGltZU1zKTtcclxuICAgIHRoaXMubWF4UmVjVGltZXJSdW5uaW5nID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnN0YXR1cyA9IFN0YXR1cy5SRUNPUkRJTkc7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RvcEFjdGlvbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc3RvcEl0ZW0oKSB7XHJcblxyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLm5leHRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuU1RPUFBJTkdfU1RPUDtcclxuICAgIHRoaXMuc3RvcFJlY29yZGluZygpO1xyXG5cclxuICB9XHJcblxyXG4gIHN0b3BSZWNvcmRpbmcoKSB7XHJcbiAgICBpZiAodGhpcy5tYXhSZWNUaW1lclJ1bm5pbmcgJiYgdGhpcy5tYXhSZWNUaW1lcklkIT1udWxsKSB7XHJcbiAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5tYXhSZWNUaW1lcklkKTtcclxuICAgICAgdGhpcy5tYXhSZWNUaW1lclJ1bm5pbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmKHRoaXMuYWMpIHtcclxuICAgICAgdGhpcy5hYy5zdG9wKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdG9wUmVjb3JkaW5nTWF4UmVjKCl7XHJcblxyXG4gICAgdGhpcy5tYXhSZWNUaW1lclJ1bm5pbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuc3RhdHVzID0gU3RhdHVzLlNUT1BQSU5HX1NUT1A7XHJcbiAgICBpZih0aGlzLmFjKSB7XHJcbiAgICAgIHRoaXMuYWMuc3RvcCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RvcHBlZCgpIHtcclxuICAgIHRoaXMudXBkYXRlU3RhcnRBY3Rpb25EaXNhYmxlU3RhdGUoKVxyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLm5leHRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnBhdXNlQWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2luZm8nO1xyXG4gICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVjb3JkZWQuJztcclxuXHJcbiAgICBsZXQgYWQ6QXVkaW9CdWZmZXI7XHJcbiAgICBpZih0aGlzLmFjKSB7XHJcbiAgICAgIGFkID0gdGhpcy5hYy5hdWRpb0J1ZmZlcigpO1xyXG4gICAgICBsZXQgc2Vzc0lkOiBzdHJpbmcgfCBudW1iZXIgPSAwO1xyXG4gICAgICBpZih0aGlzLl9zZXNzaW9uKXtcclxuICAgICAgICBzZXNzSWQ9dGhpcy5fc2Vzc2lvbi5zZXNzaW9uSWQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYoIXRoaXMucmZVdWlkKXtcclxuICAgICAgICB0aGlzLnJmVXVpZD1VVUlELmdlbmVyYXRlKClcclxuICAgICAgfVxyXG4gICAgICBsZXQgcmYgPSBuZXcgUmVjb3JkaW5nRmlsZSh0aGlzLnJmVXVpZCxzZXNzSWQsYWQpO1xyXG4gICAgICByZi5fc3RhcnRlZEFzRGF0ZU9iaj10aGlzLnN0YXJ0ZWREYXRlO1xyXG4gICAgICBpZihyZi5fc3RhcnRlZEFzRGF0ZU9iaikge1xyXG4gICAgICAgIHJmLnN0YXJ0ZWREYXRlID0gcmYuX3N0YXJ0ZWRBc0RhdGVPYmoudG9TdHJpbmcoKTtcclxuICAgICAgfVxyXG4gICAgICByZi5mcmFtZXMgPSBhZC5sZW5ndGg7XHJcbiAgICAgIHRoaXMuZGlzcGxheVJlY0ZpbGUgPSByZjtcclxuICAgICAgdGhpcy5yZWNvcmRlckNvbWJpUGFuZS5wdXNoKHJmKTtcclxuXHJcbiAgICAgIC8vIFVwbG9hZCBpZiB1cGxvYWQgZW5hYmxlZCBhbmQgbm90IGluIGNodW5rZWQgdXBsb2FkIG1vZGVcclxuICAgICAgaWYgKHRoaXMuZW5hYmxlVXBsb2FkUmVjb3JkaW5ncyAmJiAhdGhpcy51cGxvYWRDaHVua1NpemVTZWNvbmRzKSB7XHJcbiAgICAgICAgbGV0IGFwaUVuZFBvaW50ID0gJyc7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5hcGlFbmRQb2ludCkge1xyXG4gICAgICAgICAgYXBpRW5kUG9pbnQgPSB0aGlzLmNvbmZpZy5hcGlFbmRQb2ludDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFwaUVuZFBvaW50ICE9PSAnJykge1xyXG4gICAgICAgICAgYXBpRW5kUG9pbnQgPSBhcGlFbmRQb2ludCArICcvJ1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHNlc3Npb25zVXJsID0gYXBpRW5kUG9pbnQgKyBTZXNzaW9uU2VydmljZS5TRVNTSU9OX0FQSV9DVFg7XHJcbiAgICAgICAgbGV0IHJlY1VybDogc3RyaW5nID0gc2Vzc2lvbnNVcmwgKyAnLycgKyByZi5zZXNzaW9uICsgJy8nICsgUkVDRklMRV9BUElfQ1RYICsgJy8nICsgcmYudXVpZDtcclxuXHJcbiAgICAgICAgLy8gY29udmVydCBhc3luY2hyb25vdXNseSB0byAxNi1iaXQgaW50ZWdlciBQQ01cclxuICAgICAgICAvLyBUT0RPIGNvdWxkIHdlIGF2b2lkIGNvbnZlcnNpb24gdG8gc2F2ZSBDUFUgcmVzb3VyY2VzIGFuZCB0cmFuc2ZlciBmbG9hdCBQQ00gZGlyZWN0bHk/XHJcbiAgICAgICAgLy8gVE9ETyBkdXBsaWNhdGUgY29udmVyc2lvbiBmb3IgbWFudWFsIGRvd25sb2FkXHJcblxyXG4gICAgICAgIHRoaXMucHJvY2Vzc2luZ1JlY29yZGluZyA9IHRydWVcclxuICAgICAgICBsZXQgd3cgPSBuZXcgV2F2V3JpdGVyKCk7XHJcbiAgICAgICAgd3cud3JpdGVBc3luYyhhZCwgKHdhdkZpbGUpID0+IHtcclxuICAgICAgICAgIHRoaXMucG9zdFJlY29yZGluZ011bHRpcGFydCh3YXZGaWxlLCByZi51dWlkLCByZi5zZXNzaW9uLCByZi5fc3RhcnRlZEFzRGF0ZU9iaiwgcmVjVXJsKTtcclxuICAgICAgICAgIHRoaXMucHJvY2Vzc2luZ1JlY29yZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBjaGVjayBjb21wbGV0ZSBzZXNzaW9uXHJcbiAgICBsZXQgY29tcGxldGUgPSB0cnVlO1xyXG5cclxuICAgIGxldCBhdXRvU3RhcnQgPSAodGhpcy5zdGF0dXMgPT09IFN0YXR1cy5TVE9QUElOR19TVE9QKTtcclxuICAgIHRoaXMuc3RhdHVzID0gU3RhdHVzLklETEU7XHJcbiAgICBsZXQgc3RhcnROZXh0PWZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLm5hdmlnYXRpb25EaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTmF2aWdhdGlvbkFjdGlvbnMoKTtcclxuXHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgcG9zdFJlY29yZGluZ011bHRpcGFydCh3YXZGaWxlOiBVaW50OEFycmF5LCB1dWlkOnN0cmluZ3xudWxsLHNlc3Npb25JZDpzdHJpbmd8bnVtYmVyfG51bGwsc3RhcnRlZERhdGU6RGF0ZXxudWxsfHVuZGVmaW5lZCxyZWNVcmw6IHN0cmluZykge1xyXG4gICAgbGV0IHdhdkJsb2IgPSBuZXcgQmxvYihbd2F2RmlsZV0sIHt0eXBlOiAnYXVkaW8vd2F2J30pO1xyXG5cclxuICAgIGxldCBmZD1uZXcgRm9ybURhdGEoKTtcclxuICAgIGlmKHV1aWQpIHtcclxuICAgICAgZmQuc2V0KCd1dWlkJywgdXVpZCk7XHJcbiAgICB9XHJcbiAgICBpZihzZXNzaW9uSWQhPT1udWxsKSB7XHJcbiAgICAgIGZkLnNldCgnc2Vzc2lvbklkJywgc2Vzc2lvbklkLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG4gICAgaWYoc3RhcnRlZERhdGUpe1xyXG4gICAgICBmZC5zZXQoJ3N0YXJ0ZWREYXRlJyxzdGFydGVkRGF0ZS50b0pTT04oKSk7XHJcbiAgICB9XHJcbiAgICBmZC5zZXQoJ2F1ZGlvJyx3YXZCbG9iKTtcclxuICAgIGxldCB1bCA9IG5ldyBVcGxvYWQoZmQsIHJlY1VybCk7XHJcbiAgICB0aGlzLnVwbG9hZGVyLnF1ZXVlVXBsb2FkKHVsKTtcclxuICB9XHJcblxyXG4gIHBvc3RDaHVua0F1ZGlvQnVmZmVyKGF1ZGlvQnVmZmVyOiBBdWRpb0J1ZmZlciwgY2h1bmtJZHg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5wcm9jZXNzaW5nUmVjb3JkaW5nID0gdHJ1ZTtcclxuICAgIGxldCB3dyA9IG5ldyBXYXZXcml0ZXIoKTtcclxuICAgIC8vbmV3IFJFU1QgQVBJIFVSTFxyXG4gICAgbGV0IGFwaUVuZFBvaW50ID0gJyc7XHJcbiAgICBpZiAodGhpcy5jb25maWcgJiYgdGhpcy5jb25maWcuYXBpRW5kUG9pbnQpIHtcclxuICAgICAgYXBpRW5kUG9pbnQgPSB0aGlzLmNvbmZpZy5hcGlFbmRQb2ludDtcclxuICAgIH1cclxuICAgIGlmIChhcGlFbmRQb2ludCAhPT0gJycpIHtcclxuICAgICAgYXBpRW5kUG9pbnQgPSBhcGlFbmRQb2ludCArICcvJ1xyXG4gICAgfVxyXG4gICAgbGV0IHNlc3Npb25zVXJsID0gYXBpRW5kUG9pbnQgKyBTZXNzaW9uU2VydmljZS5TRVNTSU9OX0FQSV9DVFg7XHJcbiAgICBsZXQgcmVjVXJsOiBzdHJpbmcgPSBzZXNzaW9uc1VybCArICcvJyArIHRoaXMuc2Vzc2lvbj8uc2Vzc2lvbklkICsgJy8nICsgUkVDRklMRV9BUElfQ1RYICsgJy8nICsgdGhpcy5yZlV1aWQrJy8nK2NodW5rSWR4O1xyXG4gICAgd3cud3JpdGVBc3luYyhhdWRpb0J1ZmZlciwgKHdhdkZpbGUpID0+IHtcclxuICAgICAgdGhpcy5wb3N0UmVjb3JkaW5nKHdhdkZpbGUsIHJlY1VybCk7XHJcbiAgICAgIHRoaXMucHJvY2Vzc2luZ1JlY29yZGluZyA9IGZhbHNlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzdG9wKCkge1xyXG4gICAgaWYodGhpcy5hYykge1xyXG4gICAgICB0aGlzLmFjLmNsb3NlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUNvbnRyb2xQbGF5YmFja1Bvc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllci5wbGF5UG9zaXRpb25GcmFtZXMpIHtcclxuICAgICAgdGhpcy5yZWNvcmRlckNvbWJpUGFuZS5hdWRpb0Rpc3BsYXkucGxheUZyYW1lUG9zaXRpb24gPSB0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIucGxheVBvc2l0aW9uRnJhbWVzO1xyXG4gICAgICB0aGlzLmxpdmVMZXZlbERpc3BsYXkucGxheUZyYW1lUG9zaXRpb24gPSB0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIucGxheVBvc2l0aW9uRnJhbWVzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXVkaW9QbGF5ZXJVcGRhdGUoZTogQXVkaW9QbGF5ZXJFdmVudCkge1xyXG4gICAgaWYgKEV2ZW50VHlwZS5SRUFEWSA9PT0gZS50eXBlKSB7XHJcblxyXG4gICAgfSBlbHNlIGlmIChFdmVudFR5cGUuU1RBUlRFRCA9PT0gZS50eXBlKSB7XHJcbiAgICAgIC8vdGhpcy5zdGF0dXMgPSAnUGxheWJhY2suLi4nO1xyXG4gICAgICB0aGlzLnVwZGF0ZVRpbWVySWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4gdGhpcy51cGRhdGVDb250cm9sUGxheWJhY2tQb3NpdGlvbigpLCA1MCk7XHJcblxyXG4gICAgfSBlbHNlIGlmIChFdmVudFR5cGUuRU5ERUQgPT09IGUudHlwZSkge1xyXG4gICAgICAvLy5zdGF0dXM9J1JlYWR5Lic7XHJcbiAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHRoaXMudXBkYXRlVGltZXJJZCk7XHJcblxyXG4gICAgfVxyXG4gICAgaWYoIXRoaXMuZGVzdHJveWVkKSB7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1hdWRpb3JlY29yZGVyLWNvbXAnLFxyXG4gIHByb3ZpZGVyczogW1Nlc3Npb25TZXJ2aWNlXSxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGFwcC1hdWRpb3JlY29yZGVyIFtwcm9qZWN0TmFtZV09XCJfcHJvamVjdD8ubmFtZVwiIFtkYXRhU2F2ZWRdPVwiZGF0YVNhdmVkXCI+PC9hcHAtYXVkaW9yZWNvcmRlcj5cclxuICBgLFxyXG4gIHN0eWxlczogW2A6aG9zdHtcclxuICAgIGZsZXg6IDI7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgbWluLWhlaWdodDowO1xyXG5cclxuICB9YF1cclxuXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdWRpb1JlY29yZGVyQ29tcG9uZW50IGV4dGVuZHMgUmVjb3JkZXJDb21wb25lbnQgIGltcGxlbWVudHMgT25Jbml0LE9uRGVzdHJveSxBZnRlclZpZXdJbml0LFJlYWR5U3RhdGVQcm92aWRlciB7XHJcblxyXG4gIG1vZGUhOk1vZGU7XHJcbiAgY29udHJvbEF1ZGlvUGxheWVyITpBdWRpb1BsYXllcjtcclxuICBhdWRpbzphbnk7XHJcblxyXG4gIF9wcm9qZWN0OlByb2plY3R8dW5kZWZpbmVkO1xyXG4gIHNlc3Npb25JZCE6IHN0cmluZztcclxuICBzZXNzaW9uITpTZXNzaW9uO1xyXG5cclxuICBAVmlld0NoaWxkKEF1ZGlvUmVjb3JkZXIsIHsgc3RhdGljOiB0cnVlIH0pIGFyITpBdWRpb1JlY29yZGVyO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaW5qZWN0b3I6SW5qZWN0b3IscHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICAgICAgICBwcml2YXRlIHNlc3Npb25TZXJ2aWNlOlNlc3Npb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgcHJvamVjdFNlcnZpY2U6UHJvamVjdFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJvdGVjdGVkIHVwbG9hZGVyOlNwZWVjaFJlY29yZGVyVXBsb2FkZXJcclxuICApIHtcclxuICAgIHN1cGVyKHVwbG9hZGVyKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgLy9zdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgbGV0IGF1ZGlvQ29udGV4dCA9IEF1ZGlvQ29udGV4dFByb3ZpZGVyLmF1ZGlvQ29udGV4dEluc3RhbmNlKCk7XHJcbiAgICBpZihhdWRpb0NvbnRleHQpIHtcclxuICAgICAgdGhpcy5jb250cm9sQXVkaW9QbGF5ZXIgPSBuZXcgQXVkaW9QbGF5ZXIoYXVkaW9Db250ZXh0LHRoaXMuYXIpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hci5jb250cm9sQXVkaW9QbGF5ZXI9dGhpcy5jb250cm9sQXVkaW9QbGF5ZXI7XHJcblxyXG4gICAgLy9UT0RPIER1cGxpY2F0ZSBjb2RlIGluIFNwZWVjaFJlY29yZGVyQ29tcG9uZW50XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgKGUpID0+IHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIkJlZm9yZSBwYWdlIHVubG9hZCBldmVudFwiKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLnJlYWR5KCkpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gYWxsIHRoaXMgYXR0ZW1wdHMgdG8gY3VzdG9taXplIHRoZSBtZXNzYWdlIGRvIG5vdCB3b3JrIGFueW1vcmUgKGZvciBzZWN1cml0eSByZWFzb25zKSEhXHJcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSBcIlBsZWFzZSBkbyBub3QgbGVhdmUgdGhlIHBhZ2UsIHVudGlsIGFsbCByZWNvcmRpbmdzIGFyZSB1cGxvYWRlZCFcIjtcclxuICAgICAgICBhbGVydChtZXNzYWdlKTtcclxuICAgICAgICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XHJcblxyXG4gICAgICAgIGlmIChlKSB7XHJcbiAgICAgICAgICBlLnJldHVyblZhbHVlID0gbWVzc2FnZTtcclxuICAgICAgICAgIGUuY2FuY2VsQnViYmxlID0gdHJ1ZTtcclxuICAgICAgICAgIGlmIChlLnN0b3BQcm9wYWdhdGlvbikge1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGUucHJldmVudERlZmF1bHQpIHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy51cGxvYWRlci5saXN0ZW5lciA9ICh1ZSkgPT4ge1xyXG4gICAgICB0aGlzLnVwbG9hZFVwZGF0ZSh1ZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSgocGFyYW1zOiBQYXJhbXMpID0+IHtcclxuICAgICAgaWYgKHBhcmFtc1snc2Vzc2lvbklkJ10pIHtcclxuICAgICAgICB0aGlzLmZldGNoU2Vzc2lvbihwYXJhbXNbJ3Nlc3Npb25JZCddKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtczogUGFyYW1zKSA9PiB7XHJcbiAgICAgIGxldCByb3V0ZVBhcmFtc0lkID0gcGFyYW1zWydpZCddO1xyXG4gICAgICBpZiAocm91dGVQYXJhbXNJZCkge1xyXG4gICAgICAgIHRoaXMuZmV0Y2hTZXNzaW9uKHJvdXRlUGFyYW1zSWQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgLy9zdXBlci5uZ09uRGVzdHJveSgpO1xyXG4gIH1cclxuXHJcbiAgZmV0Y2hTZXNzaW9uKHNlc3Npb25JZDpzdHJpbmcpe1xyXG5cclxuICAgIGxldCBzZXNzT2JzPSB0aGlzLnNlc3Npb25TZXJ2aWNlLnNlc3Npb25PYnNlcnZlcihzZXNzaW9uSWQpO1xyXG5cclxuICAgIGlmKHNlc3NPYnMpIHtcclxuICAgICAgc2Vzc09icy5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6KHNlc3MpID0+IHtcclxuICAgICAgICAgIHRoaXMuYXIuc3RhdHVzQWxlcnRUeXBlPSdpbmZvJztcclxuICAgICAgICAgIHRoaXMuYXIuc3RhdHVzTXNnID0gJ1JlY2VpdmVkIHNlc3Npb24gaW5mby4nO1xyXG4gICAgICAgICAgdGhpcy5hci5zdGF0dXNXYWl0aW5nPWZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5zZXNzaW9uPXNlc3M7XHJcbiAgICAgICAgICB0aGlzLmFyLnNlc3Npb249c2VzcztcclxuICAgICAgICAgIGlmIChzZXNzLnByb2plY3QpIHtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiU2Vzc2lvbiBhc3NvY2lhdGVkIHByb2plY3Q6IFwiK3Nlc3MucHJvamVjdClcclxuICAgICAgICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0T2JzZXJ2YWJsZShzZXNzLnByb2plY3QpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgbmV4dDoocHJvamVjdCk9PntcclxuICAgICAgICAgICAgICB0aGlzLmFyLnByb2plY3Q9cHJvamVjdDtcclxuICAgICAgICAgICAgICB0aGlzLmFyLmZldGNoUmVjb3JkaW5ncyhzZXNzKTtcclxuICAgICAgICAgICAgfSxlcnJvcjoocmVhc29uKSA9PntcclxuICAgICAgICAgICAgICB0aGlzLmFyLnN0YXR1c01zZz1yZWFzb247XHJcbiAgICAgICAgICAgICAgdGhpcy5hci5zdGF0dXNBbGVydFR5cGU9J2Vycm9yJztcclxuICAgICAgICAgICAgICB0aGlzLmFyLnN0YXR1c1dhaXRpbmc9ZmFsc2U7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIHByb2plY3QgY29uZmlnOiBcIityZWFzb24pXHJcbiAgICAgICAgICAgIH19KTtcclxuXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmluZm8oXCJTZXNzaW9uIGhhcyBubyBhc3NvY2lhdGVkIHByb2plY3QuIFVzaW5nIGRlZmF1bHQgY29uZmlndXJhdGlvbi5cIilcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOihyZWFzb24pID0+IHtcclxuICAgICAgICAgIHRoaXMuYXIuc3RhdHVzTXNnID0gcmVhc29uO1xyXG4gICAgICAgICAgdGhpcy5hci5zdGF0dXNBbGVydFR5cGUgPSAnZXJyb3InO1xyXG4gICAgICAgICAgdGhpcy5hci5zdGF0dXNXYWl0aW5nPWZhbHNlO1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIHNlc3Npb24gXCIgKyByZWFzb24pXHJcbiAgICAgICAgfX0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBsb2FkVXBkYXRlKHVlOiBVcGxvYWRlclN0YXR1c0NoYW5nZUV2ZW50KSB7XHJcbiAgICBsZXQgdXBTdGF0dXMgPSB1ZS5zdGF0dXM7XHJcbiAgICB0aGlzLmRhdGFTYXZlZCA9IChVcGxvYWRlclN0YXR1cy5ET05FID09PSB1cFN0YXR1cyk7XHJcbiAgICBsZXQgcGVyY2VudFVwbCA9IHVlLnBlcmNlbnREb25lKCk7XHJcbiAgICBpZiAoVXBsb2FkZXJTdGF0dXMuRVJSID09PSB1cFN0YXR1cykge1xyXG4gICAgICB0aGlzLmFyLnVwbG9hZFN0YXR1cyA9ICd3YXJuJ1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHBlcmNlbnRVcGwgPCA1MCkge1xyXG4gICAgICAgIHRoaXMuYXIudXBsb2FkU3RhdHVzID0gJ2FjY2VudCdcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmFyLnVwbG9hZFN0YXR1cyA9ICdzdWNjZXNzJ1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYXIudXBsb2FkUHJvZ3Jlc3MgPSBwZXJjZW50VXBsO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgfVxyXG5cclxuXHJcbiAgcmVhZHkoKTpib29sZWFue1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YVNhdmVkICYmICF0aGlzLmFyLmlzQWN0aXZlKClcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
|
|
1028
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaW9yZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL2F1ZGlvcmVjb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBdUIsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRSxPQUFPLEVBQUMsV0FBVyxFQUFvQixTQUFTLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQTtBQUNwRixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sNEJBQTRCLENBQUE7QUFDcEQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUMxQyxPQUFPLEVBQ0wsU0FBUyxFQUFFLFNBQVMsRUFBcUIsTUFBTSxFQUNoQyxZQUFZLEVBQWEsS0FBSyxFQUM5QyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFHakQsT0FBTyxFQUFDLHFCQUFxQixFQUF1QixNQUFNLGtCQUFrQixDQUFDO0FBRTdFLE9BQU8sRUFBVyxXQUFXLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFHdEQsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDekQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRWhELE9BQU8sRUFBQyxNQUFNLEVBQUUsY0FBYyxFQUE0QixNQUFNLG9CQUFvQixDQUFDO0FBR3JGLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUN2QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDbEQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFD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RSxDQUFBO0lBQ3hDLENBQUM7SUFHRCxLQUFLO1FBQ0gsT0FBTyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUM5QyxDQUFDOztvSEE5SVUsc0JBQXNCO3dHQUF0QixzQkFBc0IsaURBZHRCLENBQUMsY0FBYyxDQUFDLDhEQXdCaEIsYUFBYSxxRkF2QmQ7O0dBRVQsZ0lBeHVCVSxhQUFhOzRGQW12QmIsc0JBQXNCO2tCQWhCbEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsd0JBQXdCO29CQUNsQyxTQUFTLEVBQUUsQ0FBQyxjQUFjLENBQUM7b0JBQzNCLFFBQVEsRUFBRTs7R0FFVDtvQkFDRCxNQUFNLEVBQUUsQ0FBQzs7Ozs7OztJQU9QLENBQUM7aUJBRUo7aVJBVzZDLEVBQUU7c0JBQTdDLFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXVkaW9DYXB0dXJlLCBBdWRpb0NhcHR1cmVMaXN0ZW5lcn0gZnJvbSAnLi4vLi4vYXVkaW8vY2FwdHVyZS9jYXB0dXJlJztcclxuaW1wb3J0IHtBdWRpb1BsYXllciwgQXVkaW9QbGF5ZXJFdmVudCwgRXZlbnRUeXBlfSBmcm9tICcuLi8uLi9hdWRpby9wbGF5YmFjay9wbGF5ZXInXHJcbmltcG9ydCB7V2F2V3JpdGVyfSBmcm9tICcuLi8uLi9hdWRpby9pbXBsL3dhdndyaXRlcidcclxuaW1wb3J0IHtSZWNvcmRpbmdGaWxlfSBmcm9tICcuLi9yZWNvcmRpbmcnXHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LCBWaWV3Q2hpbGQsIENoYW5nZURldGVjdG9yUmVmLCBJbmplY3QsXHJcbiAgQWZ0ZXJWaWV3SW5pdCwgSG9zdExpc3RlbmVyLCBPbkRlc3Ryb3ksIElucHV0LCBSZW5kZXJlcjIsIE9uSW5pdCwgSW5qZWN0b3JcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1Nlc3Npb25TZXJ2aWNlfSBmcm9tIFwiLi9zZXNzaW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xyXG5pbXBvcnQge1NwZWVjaFJlY29yZGVyVXBsb2FkZXJ9IGZyb20gXCIuLi9zcHJ1cGxvYWRlclwiO1xyXG5pbXBvcnQge1NQRUVDSFJFQ09SREVSX0NPTkZJRywgU3BlZWNoUmVjb3JkZXJDb25maWd9IGZyb20gXCIuLi8uLi9zcHIuY29uZmlnXCI7XHJcbmltcG9ydCB7U2Vzc2lvbn0gZnJvbSBcIi4vc2Vzc2lvblwiO1xyXG5pbXBvcnQgeyBQcm9qZWN0LCBQcm9qZWN0VXRpbH0gZnJvbSBcIi4uL3Byb2plY3QvcHJvamVjdFwiO1xyXG5pbXBvcnQge01lc3NhZ2VEaWFsb2d9IGZyb20gXCIuLi8uLi91aS9tZXNzYWdlX2RpYWxvZ1wiO1xyXG5pbXBvcnQge1JlY29yZGluZ1NlcnZpY2V9IGZyb20gXCIuLi9yZWNvcmRpbmdzL3JlY29yZGluZ3Muc2VydmljZVwiO1xyXG5cclxuaW1wb3J0IHtBdWRpb0NvbnRleHRQcm92aWRlcn0gZnJvbSBcIi4uLy4uL2F1ZGlvL2NvbnRleHRcIjtcclxuaW1wb3J0IHtBdWRpb0NsaXB9IGZyb20gXCIuLi8uLi9hdWRpby9wZXJzaXN0b3JcIjtcclxuXHJcbmltcG9ydCB7VXBsb2FkLCBVcGxvYWRlclN0YXR1cywgVXBsb2FkZXJTdGF0dXNDaGFuZ2VFdmVudH0gZnJvbSBcIi4uLy4uL25ldC91cGxvYWRlclwiO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBQYXJhbXMsIFJvdXRlcn0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQge1Byb2plY3RTZXJ2aWNlfSBmcm9tIFwiLi4vcHJvamVjdC9wcm9qZWN0LnNlcnZpY2VcIjtcclxuaW1wb3J0IHtVVUlEfSBmcm9tIFwiLi4vLi4vdXRpbHMvdXRpbHNcIjtcclxuaW1wb3J0IHtMZXZlbEJhcn0gZnJvbSBcIi4uLy4uL2F1ZGlvL3VpL2xpdmVsZXZlbFwiO1xyXG5pbXBvcnQge1JlY29yZGVyQ29tYmlQYW5lfSBmcm9tIFwiLi9yZWNvcmRlcl9jb21iaV9wYW5lXCI7XHJcbmltcG9ydCB7QmFzaWNSZWNvcmRlciwgTEVWRUxfQkFSX0lOVEVSVkFMTF9TRUNPTkRTLCBNQVhfUkVDT1JESU5HX1RJTUVfTVMsIFJFQ0ZJTEVfQVBJX0NUWH0gZnJvbSBcIi4vYmFzaWNyZWNvcmRlclwiO1xyXG5pbXBvcnQge1JlYWR5U3RhdGVQcm92aWRlciwgUmVjb3JkZXJDb21wb25lbnR9IGZyb20gXCIuLi8uLi9yZWNvcmRlcl9jb21wb25lbnRcIjtcclxuaW1wb3J0IHtNb2RlfSBmcm9tIFwiLi4vLi4vc3BlZWNocmVjb3JkZXJuZy5jb21wb25lbnRcIjtcclxuXHJcblxyXG5leHBvcnQgY29uc3QgZW51bSBTdGF0dXMge1xyXG4gIEJMT0NLRUQsIElETEUsU1RBUlRJTkcsIFJFQ09SRElORywgIFNUT1BQSU5HX1NUT1AsIEVSUk9SXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtIHtcclxuICBwcm9tcHRBc1N0cmluZzogc3RyaW5nO1xyXG4gIHRyYWluaW5nOiBib29sZWFuO1xyXG4gIHJlY3M6IEFycmF5PFJlY29yZGluZ0ZpbGU+IHwgbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJvbXB0QXNTdHJpbmc6IHN0cmluZywgdHJhaW5pbmc6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMucHJvbXB0QXNTdHJpbmcgPSBwcm9tcHRBc1N0cmluZztcclxuICAgIHRoaXMudHJhaW5pbmcgPSB0cmFpbmluZztcclxuICAgIHRoaXMucmVjcyA9IG51bGw7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtYXVkaW9yZWNvcmRlcicsXHJcbiAgcHJvdmlkZXJzOiBbU2Vzc2lvblNlcnZpY2VdLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8YXBwLXdhcm5pbmdiYXIgW3Nob3ddPVwiaXNUZXN0U2Vzc2lvbigpXCIgd2FybmluZ1RleHQ9XCJUZXN0IHJlY29yZGluZyBvbmx5IVwiPjwvYXBwLXdhcm5pbmdiYXI+XHJcbiAgICA8YXBwLXdhcm5pbmdiYXIgW3Nob3ddPVwiaXNEZWZhdWx0QXVkaW9UZXN0U2Vzc2lvbigpXCJcclxuICAgICAgICAgICAgICAgICAgICB3YXJuaW5nVGV4dD1cIlRoaXMgdGVzdCB1c2VzIGRlZmF1bHQgYXVkaW8gZGV2aWNlISBSZWd1bGFyIHNlc3Npb25zIG1heSByZXF1aXJlIGEgcGFydGljdWxhciBhdWRpbyBkZXZpY2UgKG1pY3JvcGhvbmUpIVwiPjwvYXBwLXdhcm5pbmdiYXI+XHJcbiAgICA8YXBwLXJlY29yZGVyY29tYmlwYW5lIChzZWxlY3RlZFJlY29yZGluZ0ZpbGVDaGFuZ2VkKT1cInNlbGVjdFJlY29yZGluZ0ZpbGUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdWRpb1NpZ25hbENvbGxhcHNlZF09XCJhdWRpb1NpZ25hbENvbGxhcHNlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZFJlY29yZGluZ0ZpbGVdPVwiZGlzcGxheVJlY0ZpbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0RGlzYWJsZWRdPVwiaXNBY3RpdmUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNwbGF5QXVkaW9DbGlwXT1cImRpc3BsYXlBdWRpb0NsaXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxheVN0YXJ0QWN0aW9uXT1cImNvbnRyb2xBdWRpb1BsYXllci5zdGFydEFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGF5U3RvcEFjdGlvbl09XCJjb250cm9sQXVkaW9QbGF5ZXIuc3RvcEFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGF5U2VsZWN0aW9uQWN0aW9uXT1cImNvbnRyb2xBdWRpb1BsYXllci5zdGFydFNlbGVjdGlvbkFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvUGxheU9uU2VsZWN0VG9nZ2xlQWN0aW9uXT1cImNvbnRyb2xBdWRpb1BsYXllci5hdXRvUGxheU9uU2VsZWN0VG9nZ2xlQWN0aW9uXCJcclxuICAgID48L2FwcC1yZWNvcmRlcmNvbWJpcGFuZT5cclxuXHJcbiAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXQueHM9XCJjb2x1bW5cIiBbbmdTdHlsZV09XCJ7J2hlaWdodC5weCc6MTAwLCdtaW4taGVpZ2h0LnB4JzogMTAwfVwiXHJcbiAgICAgICAgIFtuZ1N0eWxlLnhzXT1cInsnaGVpZ2h0LnB4JzoxMjUsJ21pbi1oZWlnaHQucHgnOiAxMjV9XCI+XHJcbiAgICAgIDxhdWRpby1sZXZlbGJhciBmeEZsZXg9XCIxIDAgMVwiIFtzdHJlYW1pbmdNb2RlXT1cImlzUmVjb3JkaW5nKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc3BsYXlMZXZlbEluZm9zXT1cImRpc3BsYXlBdWRpb0NsaXA/LmxldmVsSW5mb3NcIj48L2F1ZGlvLWxldmVsYmFyPlxyXG4gICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCI+XHJcbiAgICAgICAgPHNwci1yZWNvcmRpbmdpdGVtY29udHJvbHMgZnhGbGV4PVwiMTAgMCAxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXVkaW9Mb2FkZWRdPVwiZGlzcGxheUF1ZGlvQ2xpcD8uYnVmZmVyIT09bnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYXlTdGFydEFjdGlvbl09XCJjb250cm9sQXVkaW9QbGF5ZXI/LnN0YXJ0QWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxheVN0b3BBY3Rpb25dPVwiY29udHJvbEF1ZGlvUGxheWVyPy5zdG9wQWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGVha0RiTHZsXT1cInBlYWtMZXZlbEluRGJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthZ2NdPVwidGhpcy5hYz8uYWdjU3RhdHVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25TaG93UmVjb3JkaW5nRGV0YWlscyk9XCJhdWRpb1NpZ25hbENvbGxhcHNlZD0hYXVkaW9TaWduYWxDb2xsYXBzZWRcIj5cclxuICAgICAgICA8L3Nwci1yZWNvcmRpbmdpdGVtY29udHJvbHM+XHJcblxyXG4gICAgICAgIDxhcHAtdXBsb2Fkc3RhdHVzIGNsYXNzPVwicmljb250cm9scyBkYXJrXCIgZnhIaWRlIGZ4U2hvdy54cyBmeEZsZXg9XCIwIDAgMFwiICpuZ0lmPVwiZW5hYmxlVXBsb2FkUmVjb3JkaW5nc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInVwbG9hZFByb2dyZXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RhdHVzXT1cInVwbG9hZFN0YXR1c1wiIFthd2FpdE5ld1VwbG9hZF09XCJwcm9jZXNzaW5nUmVjb3JkaW5nXCI+PC9hcHAtdXBsb2Fkc3RhdHVzPlxyXG4gICAgICAgIDxhcHAtd2FrZWxvY2tpbmRpY2F0b3IgY2xhc3M9XCJyaWNvbnRyb2xzIGRhcmtcIiBmeEhpZGUgZnhTaG93LnhzIGZ4RmxleD1cIjAgMCAwXCIgW3NjcmVlbkxvY2tlZF09XCJzY3JlZW5Mb2NrZWRcIj48L2FwcC13YWtlbG9ja2luZGljYXRvcj5cclxuICAgICAgICA8YXBwLXJlYWR5c3RhdGVpbmRpY2F0b3IgY2xhc3M9XCJyaWNvbnRyb2xzIGRhcmtcIiBmeEhpZGUgZnhTaG93LnhzIGZ4RmxleD1cIjAgMCAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWR5XT1cImRhdGFTYXZlZCAmJiAhaXNBY3RpdmUoKVwiPjwvYXBwLXJlYWR5c3RhdGVpbmRpY2F0b3I+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICNjb250cm9scGFuZWwgY2xhc3M9XCJjb250cm9scGFuZWxcIiBmeExheW91dD1cInJvd1wiPlxyXG4gICAgICA8YXBwLXNwcnN0YXR1c2Rpc3BsYXkgZnhIaWRlLnhzIGZ4RmxleD1cIjMwJSAxIDMwJVwiIFtzdGF0dXNNc2ddPVwic3RhdHVzTXNnXCIgW3N0YXR1c0FsZXJ0VHlwZV09XCJzdGF0dXNBbGVydFR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0YXR1c1dhaXRpbmddPVwic3RhdHVzV2FpdGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImhpZGRlbi14c1wiPjwvYXBwLXNwcnN0YXR1c2Rpc3BsYXk+XHJcbiAgICAgIDxkaXYgZnhGbGV4PVwiMTAwJSAwIDEwMCVcIiBjbGFzcz1cInN0YXJ0c3RvcFwiPlxyXG4gICAgICAgIDxkaXYgc3R5bGU9XCJhbGlnbi1jb250ZW50OiBjZW50ZXJcIj5cclxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInN0YXJ0U3RvcFBlcmZvcm0oKVwiIFtkaXNhYmxlZF09XCJzdGFydERpc2FibGVkKCkgJiYgc3RvcERpc2FibGVkKClcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjbGFzcz1cImJpZ2J1dHRvblwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gW3N0eWxlLmNvbG9yXT1cInN0YXJ0U3RvcE5leHRJY29uQ29sb3IoKVwiIGlubGluZT1cInRydWVcIj57e3N0YXJ0U3RvcE5leHRJY29uTmFtZSgpfX08L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OiBib2xkZXI7Zm9udC1zaXplOiAxNHB4XCI+e3tzdGFydFN0b3BOZXh0TmFtZSgpfX08L3NwYW4+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgZnhGbGV4PVwiMzAlIDEgMzAlXCIgPlxyXG4gICAgICAgIDxkaXYgZnhGbGV4PVwiMSAxIGF1dG9cIj48L2Rpdj5cclxuXHJcbiAgICAgICAgPGFwcC11cGxvYWRzdGF0dXMgY2xhc3M9XCJyaWNvbnRyb2xzXCIgZnhIaWRlLnhzIGZ4RmxleD1cIjAgMCAwXCIgKm5nSWY9XCJlbmFibGVVcGxvYWRSZWNvcmRpbmdzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidXBsb2FkUHJvZ3Jlc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtzdGF0dXNdPVwidXBsb2FkU3RhdHVzXCIgW2F3YWl0TmV3VXBsb2FkXT1cInByb2Nlc3NpbmdSZWNvcmRpbmdcIj48L2FwcC11cGxvYWRzdGF0dXM+XHJcbiAgICAgICAgPGFwcC13YWtlbG9ja2luZGljYXRvciBjbGFzcz1cInJpY29udHJvbHNcIiBmeEhpZGUueHMgW3NjcmVlbkxvY2tlZF09XCJzY3JlZW5Mb2NrZWRcIj48L2FwcC13YWtlbG9ja2luZGljYXRvcj5cclxuICAgICAgICA8YXBwLXJlYWR5c3RhdGVpbmRpY2F0b3IgY2xhc3M9XCJyaWNvbnRyb2xzXCIgZnhIaWRlLnhzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkeV09XCJkYXRhU2F2ZWQgJiYgIWlzQWN0aXZlKClcIj48L2FwcC1yZWFkeXN0YXRlaW5kaWNhdG9yPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYDpob3N0IHtcclxuICAgIGZsZXg6IDI7XHJcbiAgICBiYWNrZ3JvdW5kOiBsaWdodGdyZXk7XHJcbiAgICBkaXNwbGF5OiBmbGV4OyAvKiBWZXJ0aWNhbCBmbGV4IGNvbnRhaW5lcjogQm90dG9tIHRyYW5zcG9ydCBwYW5lbCwgYWJvdmUgcHJvbXB0aW5nIHBhbmVsICovXHJcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgbWFyZ2luOiAwO1xyXG4gICAgcGFkZGluZzogMDtcclxuICAgIGhlaWdodDogMTAwJTtcclxuICAgIG1pbi1oZWlnaHQ6IDBweDtcclxuICAgICAgLyogUHJldmVudHMgaG9yaXpvbnRhbCBzY3JvbGwgYmFyIG9uIHN3aXBlIHJpZ2h0ICovXHJcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgfWAsYC5yaWNvbnRyb2xzIHtcclxuICAgICAgICBwYWRkaW5nOiA0cHg7XHJcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICB9YCxgLmRhcmsge1xyXG4gICAgYmFja2dyb3VuZDogZGFya2dyYXk7XHJcbiAgfWAsYC5jb250cm9scGFuZWwge1xyXG4gICAgYWxpZ24tY29udGVudDogY2VudGVyO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIG1hcmdpbjogMDtcclxuICAgIHBhZGRpbmc6IDIwcHg7XHJcbiAgICBtaW4taGVpZ2h0OiBtaW4tY29udGVudDsgLyogaW1wb3J0YW50ICovXHJcbiAgfWAsYC5zdGFydHN0b3Age1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIH1gLGAuYmlnYnV0dG9uIHtcclxuICAgIG1pbi13aWR0aDogNzBweDtcclxuICAgIG1pbi1oZWlnaHQ6IDUwcHg7XHJcbiAgICBmb250LXNpemU6IDUwcHg7XHJcbiAgICBib3JkZXItcmFkaXVzOiAyMHB4O1xyXG4gIH1gXHJcbiAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEF1ZGlvUmVjb3JkZXIgZXh0ZW5kcyBCYXNpY1JlY29yZGVyIGltcGxlbWVudHMgT25Jbml0LEFmdGVyVmlld0luaXQsT25EZXN0cm95LCBBdWRpb0NhcHR1cmVMaXN0ZW5lcixSZWFkeVN0YXRlUHJvdmlkZXIge1xyXG5cclxuICBfcHJvamVjdDpQcm9qZWN0fHVuZGVmaW5lZHwgbnVsbD1udWxsO1xyXG4gIEBJbnB1dCgpIHByb2plY3ROYW1lOnN0cmluZ3x1bmRlZmluZWR8bnVsbD1udWxsO1xyXG4gIGVuYWJsZVVwbG9hZFJlY29yZGluZ3M6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGVuYWJsZURvd25sb2FkUmVjb3JkaW5nczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHN0YXR1czogU3RhdHVzID0gU3RhdHVzLkJMT0NLRUQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoUmVjb3JkZXJDb21iaVBhbmUsIHsgc3RhdGljOiB0cnVlIH0pIHJlY29yZGVyQ29tYmlQYW5lITogUmVjb3JkZXJDb21iaVBhbmU7XHJcbiAgQFZpZXdDaGlsZChMZXZlbEJhciwgeyBzdGF0aWM6IHRydWUgfSkgbGl2ZUxldmVsRGlzcGxheSE6IExldmVsQmFyO1xyXG5cclxuICBASW5wdXQoKSBkYXRhU2F2ZWQ9dHJ1ZVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBtYXhSZWNUaW1lcklkOiBudW1iZXJ8bnVsbD1udWxsO1xyXG4gIHByaXZhdGUgbWF4UmVjVGltZXJSdW5uaW5nOiBib29sZWFuPWZhbHNlO1xyXG4gIHByaXZhdGUgdXBkYXRlVGltZXJJZDogYW55O1xyXG5cclxuICBzdGFydFN0b3BOZXh0QnV0dG9uTmFtZSE6c3RyaW5nO1xyXG4gIHN0YXJ0U3RvcE5leHRCdXR0b25JY29uTmFtZSE6c3RyaW5nO1xyXG5cclxuICBhdWRpbzogYW55O1xyXG5cclxuICBwcml2YXRlIF9wcm9tcHRJbmRleDpudW1iZXJ8bnVsbD1udWxsO1xyXG5cclxuICAvL2l0ZW1zOiBBcnJheTxJdGVtPnxudWxsPW51bGw7XHJcbiAgLy9zZWxlY3RlZEl0ZW1JZHg6IG51bWJlcjtcclxuICBwcml2YXRlIF9kaXNwbGF5UmVjRmlsZTogUmVjb3JkaW5nRmlsZSB8IG51bGw9bnVsbDtcclxuICBwcml2YXRlIGRpc3BsYXlSZWNGaWxlVmVyc2lvbjogbnVtYmVyPTA7XHJcblxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgICAgICAgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgICAgICAgICAgIHByb3RlY3RlZCBzZXNzaW9uU2VydmljZTpTZXNzaW9uU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIHJlY0ZpbGVTZXJ2aWNlOlJlY29yZGluZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJvdGVjdGVkIHVwbG9hZGVyOiBTcGVlY2hSZWNvcmRlclVwbG9hZGVyLFxyXG4gICAgICAgICAgICAgIEBJbmplY3QoU1BFRUNIUkVDT1JERVJfQ09ORklHKSBwdWJsaWMgY29uZmlnPzogU3BlZWNoUmVjb3JkZXJDb25maWcpIHtcclxuICAgIHN1cGVyKGRpYWxvZyxzZXNzaW9uU2VydmljZSx1cGxvYWRlcixjb25maWcpO1xyXG5cclxuICAgIC8vc3VwZXIoaW5qZWN0b3IpO1xyXG4gICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuSURMRTtcclxuXHJcbiAgICB0aGlzLmF1ZGlvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F1ZGlvJyk7XHJcblxyXG4gICAgaWYgKHRoaXMuY29uZmlnICYmIHRoaXMuY29uZmlnLmVuYWJsZVVwbG9hZFJlY29yZGluZ3MgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLmVuYWJsZVVwbG9hZFJlY29yZGluZ3MgPSB0aGlzLmNvbmZpZy5lbmFibGVVcGxvYWRSZWNvcmRpbmdzO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY29uZmlnICYmIHRoaXMuY29uZmlnLmVuYWJsZURvd25sb2FkUmVjb3JkaW5ncyAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuZW5hYmxlRG93bmxvYWRSZWNvcmRpbmdzID0gdGhpcy5jb25maWcuZW5hYmxlRG93bmxvYWRSZWNvcmRpbmdzO1xyXG4gICAgfVxyXG4gICAgLy90aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcblxyXG4gICAgdGhpcy5zdHJlYW1MZXZlbE1lYXN1cmUubGV2ZWxMaXN0ZW5lciA9IHRoaXMubGl2ZUxldmVsRGlzcGxheTtcclxuICAgIHRoaXMuc3RyZWFtTGV2ZWxNZWFzdXJlLnBlYWtMZXZlbExpc3RlbmVyPShwZWFrTHZsSW5EYik9PntcclxuICAgICAgdGhpcy5wZWFrTGV2ZWxJbkRiPXBlYWtMdmxJbkRiO1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICAgIC8vbGV0IHdha2VMb2NrU3VwcD0oJ3dha2VMb2NrJyBpbiBuYXZpZ2F0b3IpO1xyXG4gICAgLy9hbGVydCgnV2FrZSBsb2NrIEFQSSBzdXBwb3J0ZWQ6ICcrd2FrZUxvY2tTdXBwKTtcclxuICB9XHJcblxyXG4gIHJlYWR5KCk6Ym9vbGVhbntcclxuICAgIHJldHVybiB0aGlzLmRhdGFTYXZlZCAmJiAhdGhpcy5pc0FjdGl2ZSgpXHJcbiAgfVxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZVdha2VMb2NrQ29uZCgpO1xyXG4gICAgICAgdGhpcy5kZXN0cm95ZWQ9dHJ1ZTtcclxuICAgICAgIC8vIFRPRE8gc3RvcCBjYXB0dXJlIC9wbGF5YmFja1xyXG4gICAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdGFydEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RvcEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMubmV4dEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMucGF1c2VBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5wbGF5U3RhcnRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG5cclxuICAgIGxldCBjb250ZXh0OkF1ZGlvQ29udGV4dHxudWxsPW51bGw7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb250ZXh0ID0gQXVkaW9Db250ZXh0UHJvdmlkZXIuYXVkaW9Db250ZXh0SW5zdGFuY2UoKVxyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIHRoaXMuc3RhdHVzID0gU3RhdHVzLkVSUk9SO1xyXG4gICAgICBsZXQgZXJyTXNnID0gJ1Vua25vd24gZXJyb3InO1xyXG4gICAgICBpZihlcnIgaW5zdGFuY2VvZiBFcnJvcil7XHJcbiAgICAgICAgZXJyTXNnPWVyci5tZXNzYWdlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ0VSUk9SOiAnICsgZXJyTXNnO1xyXG4gICAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdlcnJvcic7XHJcbiAgICAgIHRoaXMuZGlhbG9nLm9wZW4oTWVzc2FnZURpYWxvZywge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIHR5cGU6ICdlcnJvcicsXHJcbiAgICAgICAgICB0aXRsZTogJ0Vycm9yJyxcclxuICAgICAgICAgIG1zZzogZXJyTXNnLFxyXG4gICAgICAgICAgYWR2aXNlOiAnUGxlYXNlIHVzZSBhIHN1cHBvcnRlZCBicm93c2VyLicsXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYoY29udGV4dCkge1xyXG4gICAgICBjb25zb2xlLmluZm8oXCJTdGF0ZSBvZiBhdWRpbyBjb250ZXh0OiBcIiArIGNvbnRleHQuc3RhdGUpXHJcbiAgICB9ZWxzZXtcclxuICAgICAgY29uc29sZS5pbmZvKFwiTm8gYXVkaW8gY29udGV4dCBhdmFpbGFibGUhXCIpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFjb250ZXh0IHx8ICFuYXZpZ2F0b3IubWVkaWFEZXZpY2VzKSB7XHJcbiAgICAgIHRoaXMuc3RhdHVzID0gU3RhdHVzLkVSUk9SO1xyXG4gICAgICBsZXQgZXJyTXNnID0gJ0Jyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBNZWRpYSBzdHJlYW1zISc7XHJcbiAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ0VSUk9SOiAnICsgZXJyTXNnO1xyXG4gICAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdlcnJvcic7XHJcbiAgICAgIHRoaXMuZGlhbG9nLm9wZW4oTWVzc2FnZURpYWxvZywge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIHR5cGU6ICdlcnJvcicsXHJcbiAgICAgICAgICB0aXRsZTogJ0Vycm9yJyxcclxuICAgICAgICAgIG1zZzogZXJyTXNnLFxyXG4gICAgICAgICAgYWR2aXNlOiAnUGxlYXNlIHVzZSBhIHN1cHBvcnRlZCBicm93c2VyLicsXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy90aGlzLmNvbnRyb2xBdWRpb1BsYXllciA9IG5ldyBBdWRpb1BsYXllcihjb250ZXh0LCB0aGlzKTtcclxuICAgICAgdGhpcy5hYyA9IG5ldyBBdWRpb0NhcHR1cmUoY29udGV4dCk7XHJcbiAgICAgIGlmICh0aGlzLmFjKSB7XHJcbiAgICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0YXJ0QWN0aW9uLm9uQWN0aW9uID0gKCkgPT4gdGhpcy5zdGFydEl0ZW0oKTtcclxuICAgICAgICB0aGlzLmFjLmxpc3RlbmVyID0gdGhpcztcclxuICAgICAgICB0aGlzLmNvbmZpZ3VyZVN0cmVhbUNhcHR1cmVTdHJlYW0oKTtcclxuXHJcbiAgICAgICAgLy8gRG9uJ3QgbGlzdCB0aGUgZGV2aWNlcyBoZXJlLiBJZiB3ZSBkbyBub3QgaGF2ZSBhdWRpbyBwZXJtaXNzaW9ucyB3ZSBvbmx5IGdldCBhbm9ueW1pemVkIGRldmljZXMgd2l0aG91dCBsYWJlbHMuXHJcbiAgICAgICAgLy90aGlzLmFjLmxpc3REZXZpY2VzKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0YXJ0QWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICBsZXQgZXJyTXNnID0gJ0Jyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBNZWRpYS9BdWRpbyBBUEkhJztcclxuICAgICAgICB0aGlzLnN0YXR1c01zZyA9ICdFUlJPUjogJyArIGVyck1zZztcclxuICAgICAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdlcnJvcic7XHJcbiAgICAgICAgdGhpcy5kaWFsb2cub3BlbihNZXNzYWdlRGlhbG9nLCB7XHJcbiAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXHJcbiAgICAgICAgICAgIHRpdGxlOiAnRXJyb3InLFxyXG4gICAgICAgICAgICBtc2c6IGVyck1zZyxcclxuICAgICAgICAgICAgYWR2aXNlOiAnUGxlYXNlIHVzZSBhIHN1cHBvcnRlZCBicm93c2VyLicsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdG9wQWN0aW9uLm9uQWN0aW9uID0gKCkgPT4gdGhpcy5zdG9wSXRlbSgpO1xyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMubmV4dEFjdGlvbi5vbkFjdGlvbiA9ICgpID0+IHRoaXMuc3RvcEl0ZW0oKTtcclxuICAgICAgLy90aGlzLnRyYW5zcG9ydEFjdGlvbnMucGF1c2VBY3Rpb24ub25BY3Rpb24gPSAoKSA9PiB0aGlzLnBhdXNlSXRlbSgpO1xyXG5cclxuICAgICAgdGhpcy5wbGF5U3RhcnRBY3Rpb24ub25BY3Rpb24gPSAoKSA9PiB0aGlzLmNvbnRyb2xBdWRpb1BsYXllci5zdGFydCgpO1xyXG5cclxuICAgIH1cclxuICAgIHRoaXMudXBsb2FkZXIubGlzdGVuZXIgPSAodWUpID0+IHtcclxuICAgICAgdGhpcy51cGxvYWRVcGRhdGUodWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleXByZXNzJywgWyckZXZlbnQnXSlcclxuICBvbktleVByZXNzKGtlOiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAoa2Uua2V5ID09ICcgJykge1xyXG4gICAgICAvL3RoaXMudHJhbnNwb3J0QWN0aW9ucy5zdGFydEFjdGlvbi5wZXJmb3JtKCk7XHJcbiAgICAgIC8vdGhpcy50cmFuc3BvcnRBY3Rpb25zLm5leHRBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleWRvd24nLCBbJyRldmVudCddKVxyXG4gIG9uS2V5RG93bihrZTogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKGtlLmtleSA9PSAnICcpIHtcclxuICAgICAgaWYoIXRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdGFydEFjdGlvbi5kaXNhYmxlZCl7XHJcbiAgICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0YXJ0QWN0aW9uLnBlcmZvcm0oKTtcclxuICAgICAgfWVsc2UgaWYoIXRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdG9wQWN0aW9uLmRpc2FibGVkKSB7XHJcbiAgICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoa2Uua2V5ID09ICdwJykge1xyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMucGF1c2VBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKGtlLmtleSA9PSAnRXNjYXBlJykge1xyXG4gICAgICBpZiAoIXRoaXMuYXVkaW9TaWduYWxDb2xsYXBzZWQpIHtcclxuICAgICAgICB0aGlzLmF1ZGlvU2lnbmFsQ29sbGFwc2VkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RvcEFjdGlvbi5wZXJmb3JtKCk7XHJcbiAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5wYXVzZUFjdGlvbi5wZXJmb3JtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGtlLmtleSA9PSAnTWVkaWFQbGF5UGF1c2UnKSB7XHJcbiAgICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uLnBlcmZvcm0oKTtcclxuICAgIH1cclxuICAgIGlmIChrZS5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuZndkQWN0aW9uLnBlcmZvcm0oKTtcclxuICAgIH1cclxuICAgIGlmIChrZS5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XHJcbiAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5id2RBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNUZXN0U2Vzc2lvbigpOmJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICgodGhpcy5fc2Vzc2lvbiE9bnVsbCkgJiYgKHRoaXMuX3Nlc3Npb24udHlwZSA9PT0gJ1RFU1QnIHx8IHRoaXMuX3Nlc3Npb24udHlwZT09PSdURVNUX0RFRl9BJyB8fCB0aGlzLl9zZXNzaW9uLnR5cGUgPT09ICdTSU5VU19URVNUJykpO1xyXG4gIH1cclxuXHJcbiAgaXNEZWZhdWx0QXVkaW9UZXN0U2Vzc2lvbigpOmJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICgodGhpcy5fc2Vzc2lvbiE9bnVsbCkgJiYgKHRoaXMuX3Nlc3Npb24udHlwZT09PSdURVNUX0RFRl9BJykpO1xyXG4gIH1cclxuXHJcbiAgaXNEZWZhdWx0QXVkaW9UZXN0U2Vzc2lvbk92ZXJ3cml0ZWluZ1Byb2plY3RSZXF1aXJlbWVudHMoKTpib29sZWFuIHtcclxuICAgIHJldHVybiAoKHRoaXMuX3Nlc3Npb24hPW51bGwpICYmICh0aGlzLl9zZXNzaW9uLnR5cGU9PT0nVEVTVF9ERUZfQScpICYmICh0aGlzLmF1ZGlvRGV2aWNlcyE9bnVsbCkgJiYgdGhpcy5hdWRpb0RldmljZXMubGVuZ3RoPjApXHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIGZldGNoUmVjb3JkaW5ncyhzZXNzOlNlc3Npb24pe1xyXG4gICAgdGhpcy5zdGF0dXNBbGVydFR5cGU9J2luZm8nO1xyXG4gICAgdGhpcy5zdGF0dXNNc2cgPSAnRmV0Y2hpbmcgaW5mb3Mgb2YgcmVjb3JkaW5ncy4uLic7XHJcbiAgICB0aGlzLnN0YXR1c1dhaXRpbmc9dHJ1ZTtcclxuICAgIGxldCBwck5tOnN0cmluZ3xudWxsPW51bGw7XHJcbiAgICBpZih0aGlzLnByb2plY3QpIHtcclxuICAgICAgbGV0IHJmc09icyA9IHRoaXMucmVjRmlsZVNlcnZpY2UucmVjb3JkaW5nRmlsZUxpc3QodGhpcy5wcm9qZWN0Lm5hbWUsIHNlc3Muc2Vzc2lvbklkKTtcclxuICAgICAgcmZzT2JzLnN1YnNjcmliZSh7bmV4dDoocmZzOiBBcnJheTxSZWNvcmRpbmdGaWxlPikgPT4ge1xyXG4gICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2luZm8nO1xyXG4gICAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ1JlY2VpdmVkIGluZm9zIG9mIHJlY29yZGluZ3MuJztcclxuICAgICAgICB0aGlzLnN0YXR1c1dhaXRpbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAocmZzKSB7XHJcbiAgICAgICAgICBpZiAocmZzIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICAgICAgcmZzLmZvckVhY2goKHJmKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYocmYuc3RhcnRlZERhdGUpe1xyXG4gICAgICAgICAgICAgICAgcmYuX3N0YXJ0ZWRBc0RhdGVPYmo9bmV3IERhdGUocmYuc3RhcnRlZERhdGUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZihyZi5kYXRlKXtcclxuICAgICAgICAgICAgICAgIHJmLl9kYXRlQXNEYXRlT2JqPW5ldyBEYXRlKHJmLmRhdGUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLnJlY29yZGVyQ29tYmlQYW5lLnB1c2gocmYpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXhwZWN0ZWQgdHlwZSBhcnJheSBmb3IgbGlzdCBvZiBhbHJlYWR5IHJlY29yZGVkIGZpbGVzICcpXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJSZWNvcmRpbmcgZmlsZSBsaXN0OiBcIiArIHJmcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCBlcnJvcjooZXJyKSA9PiB7XHJcbiAgICAgICAgLy8gRmFpbGVkIGZldGNoaW5nIGV4aXN0aW5nLCBidXQgd2Ugc3RhcnQgdGhlIHNlc3Npb24gYW55d2F5XHJcbiAgICAgICAgdGhpcy5zdGFydCgpXHJcbiAgICAgIH0sIGNvbXBsZXRlOigpID0+IHtcclxuICAgICAgICAvLyBOb3JtYWwgc3RhcnRcclxuICAgICAgICB0aGlzLnN0YXJ0KClcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIH1lbHNle1xyXG4gICAgICAvLyBObyBwcm9qZWN0IGRlZiAtPiBlcnJvclxyXG4gICAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdlcnJvcic7XHJcbiAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ05vIHByb2plY3QgZGVmaW5pdG9uLic7XHJcbiAgICAgIHRoaXMuc3RhdHVzV2FpdGluZyA9IGZhbHNlO1xyXG4gICAgICBjb25zb2xlLmVycm9yKHRoaXMuc3RhdHVzTXNnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBzZXQgcHJvamVjdChwcm9qZWN0OiBQcm9qZWN0fHVuZGVmaW5lZHxudWxsKSB7XHJcbiAgICB0aGlzLl9wcm9qZWN0ID0gcHJvamVjdDtcclxuICAgIGxldCBjaENudCA9IFByb2plY3RVdGlsLkRFRkFVTFRfQVVESU9fQ0hBTk5FTF9DT1VOVDtcclxuXHJcbiAgICBpZiAocHJvamVjdCkge1xyXG4gICAgICBjb25zb2xlLmluZm8oXCJQcm9qZWN0IG5hbWU6IFwiICsgcHJvamVjdC5uYW1lKVxyXG4gICAgICBpZihwcm9qZWN0LnJlY29yZGluZ0RldmljZVdha2VMb2NrPT09dHJ1ZSl7XHJcbiAgICAgICAgdGhpcy53YWtlTG9jaz10cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYXVkaW9EZXZpY2VzID0gcHJvamVjdC5hdWRpb0RldmljZXM7XHJcbiAgICAgIGNoQ250ID0gUHJvamVjdFV0aWwuYXVkaW9DaGFubmVsQ291bnQocHJvamVjdCk7XHJcbiAgICAgIGNvbnNvbGUuaW5mbyhcIlByb2plY3QgcmVxdWVzdGVkIHJlY29yZGluZyBjaGFubmVsIGNvdW50OiBcIiArIGNoQ250KTtcclxuICAgICAgdGhpcy5hdXRvR2FpbkNvbnRyb2xDb25maWdzPXByb2plY3QuYXV0b0dhaW5Db250cm9sQ29uZmlncztcclxuICAgICAgaWYocHJvamVjdC5jaHVua2VkUmVjb3JkaW5nPT09dHJ1ZSl7XHJcbiAgICAgICAgdGhpcy51cGxvYWRDaHVua1NpemVTZWNvbmRzPUJhc2ljUmVjb3JkZXIuREVGQVVMVF9DSFVOS19TSVpFX1NFQ09ORFM7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIHRoaXMudXBsb2FkQ2h1bmtTaXplU2Vjb25kcz1udWxsO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiRW1wdHkgcHJvamVjdCBjb25maWd1cmF0aW9uIVwiKVxyXG4gICAgfVxyXG4gICAgdGhpcy5jaGFubmVsQ291bnQgPSBjaENudDtcclxuICB9XHJcblxyXG5cclxuICBnZXQgcHJvamVjdCgpOlByb2plY3R8dW5kZWZpbmVkfG51bGx7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJvamVjdDtcclxuICB9XHJcblxyXG4gIHNlbGVjdFJlY29yZGluZ0ZpbGUocmY6UmVjb3JkaW5nRmlsZSl7XHJcbiAgICB0aGlzLmRpc3BsYXlSZWNGaWxlPXJmO1xyXG4gIH1cclxuXHJcbiAgdXBsb2FkVXBkYXRlKHVlOiBVcGxvYWRlclN0YXR1c0NoYW5nZUV2ZW50KSB7XHJcbiAgICBsZXQgdXBTdGF0dXMgPSB1ZS5zdGF0dXM7XHJcbiAgICB0aGlzLmRhdGFTYXZlZCA9IChVcGxvYWRlclN0YXR1cy5ET05FID09PSB1cFN0YXR1cyk7XHJcbiAgICBsZXQgcGVyY2VudFVwbCA9IHVlLnBlcmNlbnREb25lKCk7XHJcbiAgICBpZiAoVXBsb2FkZXJTdGF0dXMuRVJSID09PSB1cFN0YXR1cykge1xyXG4gICAgICB0aGlzLnVwbG9hZFN0YXR1cyA9ICd3YXJuJ1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHBlcmNlbnRVcGwgPCA1MCkge1xyXG4gICAgICAgIHRoaXMudXBsb2FkU3RhdHVzID0gJ2FjY2VudCdcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnVwbG9hZFN0YXR1cyA9ICdzdWNjZXNzJ1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXBsb2FkUHJvZ3Jlc3MgPSBwZXJjZW50VXBsO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgfVxyXG5cclxuICBzZXQgY29udHJvbEF1ZGlvUGxheWVyKGNvbnRyb2xBdWRpb1BsYXllcjogQXVkaW9QbGF5ZXIpIHtcclxuICAgIGlmICh0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIpIHtcclxuICAgICAgLy90aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIubGlzdGVuZXI9bnVsbDtcclxuICAgIH1cclxuICAgIHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllciA9IGNvbnRyb2xBdWRpb1BsYXllcjtcclxuICAgIGlmICh0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIpIHtcclxuICAgICAgdGhpcy5fY29udHJvbEF1ZGlvUGxheWVyLmxpc3RlbmVyID0gdGhpcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBjb250cm9sQXVkaW9QbGF5ZXIoKTogQXVkaW9QbGF5ZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllcjtcclxuICB9XHJcblxyXG4gIHVwZGF0ZShlOiBBdWRpb1BsYXllckV2ZW50KSB7XHJcbiAgICBpZiAoZS50eXBlID09IEV2ZW50VHlwZS5TVEFSVEVEKSB7XHJcbiAgICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy51cGRhdGVUaW1lcklkID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICAvL3RoaXMuYXVkaW9TaWduYWwucGxheUZyYW1lUG9zaXRpb24gPSB0aGlzLmFwLnBsYXlQb3NpdGlvbkZyYW1lcztcclxuICAgICAgfSwgNTApO1xyXG4gICAgfSBlbHNlIGlmIChlLnR5cGUgPT0gRXZlbnRUeXBlLlNUT1BQRUQgfHwgZS50eXBlID09IEV2ZW50VHlwZS5FTkRFRCkge1xyXG4gICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLnVwZGF0ZVRpbWVySWQpO1xyXG4gICAgICAvLyB0aGlzLmF1ZGlvU2lnbmFsLnBsYXlGcmFtZVBvc2l0aW9uID0gdGhpcy5hcC5wbGF5UG9zaXRpb25GcmFtZXM7XHJcbiAgICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uLmRpc2FibGVkID0gKCEodGhpcy5kaXNwbGF5UmVjRmlsZSkpO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXJ0RGlzYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gIXRoaXMudHJhbnNwb3J0QWN0aW9ucyB8fCB0aGlzLnJlYWRvbmx5IHx8IHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdGFydEFjdGlvbi5kaXNhYmxlZFxyXG4gIH1cclxuXHJcbiAgc3RvcERpc2FibGVkKCkge1xyXG4gICAgcmV0dXJuICF0aGlzLnRyYW5zcG9ydEFjdGlvbnMgfHwgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BBY3Rpb24uZGlzYWJsZWRcclxuICB9XHJcblxyXG4gIHN0YXJ0U3RvcE5leHROYW1lKCk6c3RyaW5ne1xyXG4gICAgaWYoIXRoaXMuc3RhcnREaXNhYmxlZCgpKXtcclxuICAgICAgdGhpcy5zdGFydFN0b3BOZXh0QnV0dG9uTmFtZT1cIlN0YXJ0XCJcclxuICAgIH1lbHNlIGlmKCF0aGlzLnN0b3BEaXNhYmxlZCgpKSB7XHJcbiAgICAgIHRoaXMuc3RhcnRTdG9wTmV4dEJ1dHRvbk5hbWUgPSBcIlN0b3BcIlxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuc3RhcnRTdG9wTmV4dEJ1dHRvbk5hbWU7XHJcbiAgfVxyXG4gIHN0YXJ0U3RvcE5leHRJY29uTmFtZSgpOnN0cmluZ3tcclxuICAgIGlmKCF0aGlzLnN0YXJ0RGlzYWJsZWQoKSl7XHJcbiAgICAgIHRoaXMuc3RhcnRTdG9wTmV4dEJ1dHRvbkljb25OYW1lPVwiZmliZXJfbWFudWFsX3JlY29yZFwiXHJcbiAgICB9ZWxzZSBpZighdGhpcy5zdG9wRGlzYWJsZWQoKSl7XHJcbiAgICAgIHRoaXMuc3RhcnRTdG9wTmV4dEJ1dHRvbkljb25OYW1lPVwic3RvcFwiXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5zdGFydFN0b3BOZXh0QnV0dG9uSWNvbk5hbWVcclxuICB9XHJcbiAgc3RhcnRTdG9wTmV4dEljb25Db2xvcigpOnN0cmluZ3tcclxuICAgIGlmKCF0aGlzLnN0YXJ0RGlzYWJsZWQoKSl7XHJcbiAgICAgIHJldHVybiBcInJlZFwiXHJcbiAgICB9ZWxzZSBpZighdGhpcy5zdG9wRGlzYWJsZWQoKSl7XHJcbiAgICAgIHJldHVybiBcInllbGxvd1wiXHJcbiAgICB9ZWxzZXtcclxuICAgICAgcmV0dXJuIFwiZ3JleVwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhcnRTdG9wUGVyZm9ybSgpe1xyXG4gICAgaWYoIXRoaXMuc3RhcnREaXNhYmxlZCgpKXtcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0YXJ0QWN0aW9uLnBlcmZvcm0oKTtcclxuICAgIH1lbHNlIGlmKCF0aGlzLnN0b3BEaXNhYmxlZCgpKXtcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhcnRJdGVtKCkge1xyXG4gICAgdGhpcy5zdGF0dXM9U3RhdHVzLlNUQVJUSU5HO1xyXG4gICAgc3VwZXIuc3RhcnRJdGVtKCk7XHJcbiAgICBpZiAodGhpcy5yZWFkb25seSkge1xyXG4gICAgICB0aGlzLnN0YXR1cz1TdGF0dXMuSURMRTtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuZndkQWN0aW9uLmRpc2FibGVkID0gdHJ1ZVxyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLmZ3ZE5leHRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlXHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuYndkQWN0aW9uLmRpc2FibGVkID0gdHJ1ZVxyXG4gICAgdGhpcy5kaXNwbGF5UmVjRmlsZSA9IG51bGw7XHJcbiAgICB0aGlzLmRpc3BsYXlSZWNGaWxlVmVyc2lvbiA9IDA7XHJcbiAgICB0aGlzLmRpc3BsYXlBdWRpb0NsaXAgPSBudWxsO1xyXG4gICAgdGhpcy5zaG93UmVjb3JkaW5nKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuYWMpIHtcclxuICAgICAgaWYgKCF0aGlzLmFjLm9wZW5lZCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zZWxlY3RlZERldmljZUlkKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIk9wZW4gc2Vzc2lvbiB3aXRoIGF1ZGlvIGRldmljZSBJZDogXFwnXCIgKyB0aGlzLl9zZWxlY3RlZERldmljZUlkICsgXCJcXCcgZm9yIFwiICsgdGhpcy5fY2hhbm5lbENvdW50ICsgXCIgY2hhbm5lbHNcIik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiT3BlbiBzZXNzaW9uIHdpdGggZGVmYXVsdCBhdWRpbyBkZXZpY2UgZm9yIFwiICsgdGhpcy5fY2hhbm5lbENvdW50ICsgXCIgY2hhbm5lbHNcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWMub3Blbih0aGlzLl9jaGFubmVsQ291bnQsIHRoaXMuX3NlbGVjdGVkRGV2aWNlSWQsdGhpcy5fYXV0b0dhaW5Db250cm9sQ29uZmlncyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5hYy5zdGFydCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgZG93bmxvYWRSZWNvcmRpbmcoKSB7XHJcbiAgICBpZiAodGhpcy5kaXNwbGF5UmVjRmlsZSkge1xyXG4gICAgICBsZXQgYWI6IEF1ZGlvQnVmZmVyIHwgbnVsbCA9IHRoaXMuZGlzcGxheVJlY0ZpbGUuYXVkaW9CdWZmZXI7XHJcbiAgICAgIGxldCB3dyA9IG5ldyBXYXZXcml0ZXIoKTtcclxuICAgICAgaWYgKGFiKSB7XHJcbiAgICAgICAgbGV0IHdhdkZpbGUgPSB3dy53cml0ZUFzeW5jKGFiLCAod2F2RmlsZSkgPT4ge1xyXG4gICAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbd2F2RmlsZV0sIHt0eXBlOiAnYXVkaW8vd2F2J30pO1xyXG4gICAgICAgICAgbGV0IHJmVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuXHJcbiAgICAgICAgICBsZXQgZGF0YURubExuayA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgICAgLy9kYXRhRG5sTG5rLm5hbWUgPSAnUmVjb3JkaW5nJztcclxuICAgICAgICAgIGRhdGFEbmxMbmsuaHJlZiA9IHJmVXJsO1xyXG5cclxuICAgICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuYm9keSwgZGF0YURubExuayk7XHJcblxyXG4gICAgICAgICAgLy8gZG93bmxvYWQgcHJvcGVydHkgbm90IHlldCBpbiBUUyBkZWZcclxuICAgICAgICAgIGlmICh0aGlzLmRpc3BsYXlSZWNGaWxlKSB7XHJcbiAgICAgICAgICAgIGxldCBmbiA9IHRoaXMuZGlzcGxheVJlY0ZpbGUuZmlsZW5hbWVTdHJpbmcoKTtcclxuICAgICAgICAgICAgZm4gKz0gJ18nICsgdGhpcy5kaXNwbGF5UmVjRmlsZVZlcnNpb247XHJcbiAgICAgICAgICAgIGZuICs9ICcud2F2JztcclxuICAgICAgICAgICAgZGF0YURubExuay5kb3dubG9hZCA9IGZuO1xyXG4gICAgICAgICAgICBkYXRhRG5sTG5rLmNsaWNrKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKGRvY3VtZW50LmJvZHksIGRhdGFEbmxMbmspO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXQgZGlzcGxheVJlY0ZpbGUoZGlzcGxheVJlY0ZpbGU6IFJlY29yZGluZ0ZpbGUgfCBudWxsKSB7XHJcbiAgICB0aGlzLl9kaXNwbGF5UmVjRmlsZSA9IGRpc3BsYXlSZWNGaWxlO1xyXG4gICAgaWYgKHRoaXMuX2Rpc3BsYXlSZWNGaWxlKSB7XHJcbiAgICAgIGxldCBhYjogQXVkaW9CdWZmZXJ8IG51bGwgPSB0aGlzLl9kaXNwbGF5UmVjRmlsZS5hdWRpb0J1ZmZlcjtcclxuICAgICAgaWYoYWIpIHtcclxuICAgICAgICB0aGlzLmRpc3BsYXlBdWRpb0NsaXAgPSBuZXcgQXVkaW9DbGlwKGFiKTtcclxuICAgICAgICB0aGlzLmNvbnRyb2xBdWRpb1BsYXllci5hdWRpb0NsaXAgPSB0aGlzLmRpc3BsYXlBdWRpb0NsaXA7XHJcbiAgICAgIH1lbHNlIHtcclxuICAgICAgICAvLyBjbGVhciBmb3Igbm93IC4uLlxyXG4gICAgICAgIHRoaXMuZGlzcGxheUF1ZGlvQ2xpcCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jb250cm9sQXVkaW9QbGF5ZXIuYXVkaW9DbGlwID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllciAmJiB0aGlzLl9zZXNzaW9uKSB7XHJcbiAgICAgICAgICAgIC8vLi4uIGFuZCB0cnkgdG8gZmV0Y2ggZnJvbSBzZXJ2ZXJcclxuICAgICAgICAgICAgdGhpcy5hdWRpb0ZldGNoU3Vic2NyaXB0aW9uID0gdGhpcy5yZWNGaWxlU2VydmljZS5mZXRjaEFuZEFwcGx5UmVjb3JkaW5nRmlsZSh0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIuY29udGV4dCwgdGhpcy5fc2Vzc2lvbi5wcm9qZWN0LCB0aGlzLl9kaXNwbGF5UmVjRmlsZSkuc3Vic2NyaWJlKChyZikgPT4ge1xyXG4gICAgICAgICAgICAgIGxldCBmYWIgPSBudWxsO1xyXG4gICAgICAgICAgICAgIGlmIChyZiAmJiB0aGlzLl9kaXNwbGF5UmVjRmlsZSkge1xyXG4gICAgICAgICAgICAgICAgZmFiID0gdGhpcy5fZGlzcGxheVJlY0ZpbGUuYXVkaW9CdWZmZXI7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ1JlY29yZGluZyBmaWxlIGNvdWxkIG5vdCBiZSBsb2FkZWQuJ1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnZXJyb3InXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChmYWIpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5QXVkaW9DbGlwID0gbmV3IEF1ZGlvQ2xpcChmYWIpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xBdWRpb1BsYXllci5hdWRpb0NsaXAgPXRoaXMuZGlzcGxheUF1ZGlvQ2xpcFxyXG4gICAgICAgICAgICAgIHRoaXMuc2hvd1JlY29yZGluZygpO1xyXG5cclxuICAgICAgICAgICAgfSwgZXJyID0+IHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQ291bGQgbm90IGxvYWQgcmVjb3JkaW5nIGZpbGUgZnJvbSBzZXJ2ZXI6IFwiICsgZXJyKVxyXG4gICAgICAgICAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ1JlY29yZGluZyBmaWxlIGNvdWxkIG5vdCBiZSBsb2FkZWQ6ICcgKyBlcnJcclxuICAgICAgICAgICAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdlcnJvcidcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ1JlY29yZGluZyBmaWxlIGNvdWxkIG5vdCBiZSBkZWNvZGVkLiBBdWRpbyBjb250ZXh0IHVuYXZhaWxhYmxlLidcclxuICAgICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJ1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGlzcGxheUF1ZGlvQ2xpcCA9IG51bGw7XHJcbiAgICAgIHRoaXMuY29udHJvbEF1ZGlvUGxheWVyLmF1ZGlvQ2xpcCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNob3dSZWNvcmRpbmcoKTtcclxuICB9XHJcblxyXG4gIGdldCBkaXNwbGF5UmVjRmlsZSgpOiBSZWNvcmRpbmdGaWxlIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGlzcGxheVJlY0ZpbGU7XHJcbiAgfVxyXG5cclxuICBzaG93UmVjb3JkaW5nKCkge1xyXG4gICAgdGhpcy5jb250cm9sQXVkaW9QbGF5ZXIuc3RvcCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmRpc3BsYXlBdWRpb0NsaXApIHtcclxuICAgICAgbGV0IGRhcD10aGlzLmRpc3BsYXlBdWRpb0NsaXA7XHJcbiAgICAgIHRoaXMubGV2ZWxNZWFzdXJlLmNhbGNCdWZmZXJMZXZlbEluZm9zKGRhcC5idWZmZXIsIExFVkVMX0JBUl9JTlRFUlZBTExfU0VDT05EUykudGhlbigobGV2ZWxJbmZvcykgPT4ge1xyXG4gICAgICAgICAgZGFwLmxldmVsSW5mb3MgPSBsZXZlbEluZm9zO1xyXG4gICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnBsYXlTdGFydEFjdGlvbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG5cclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICB0aGlzLnBsYXlTdGFydEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcblxyXG4gICAgICAvLyBDb2xsYXBzZSBhdWRpbyBzaWduYWwgZGlzcGxheSBpZiBvcGVuXHJcbiAgICAgIGlmICghdGhpcy5hdWRpb1NpZ25hbENvbGxhcHNlZCkge1xyXG4gICAgICAgIHRoaXMuYXVkaW9TaWduYWxDb2xsYXBzZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVN0YXJ0QWN0aW9uRGlzYWJsZVN0YXRlKCl7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RhcnRBY3Rpb24uZGlzYWJsZWQ9ISh0aGlzLmFjKTtcclxuICB9XHJcblxyXG4gIHN0YXJ0KCkge1xyXG4gICAgc3VwZXIuc3RhcnQoKTtcclxuICAgIHRoaXMucmVjb3JkZXJDb21iaVBhbmUuc2VsZWN0VG9wKCk7XHJcbiAgICB0aGlzLmVuYWJsZU5hdmlnYXRpb24oKTtcclxuICAgIHRoaXMudXBkYXRlU3RhcnRBY3Rpb25EaXNhYmxlU3RhdGUoKTtcclxuXHJcbiAgfVxyXG5cclxuICBpc1JlY29yZGluZygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAodGhpcy5zdGF0dXMgPT09IFN0YXR1cy5SRUNPUkRJTkcpO1xyXG4gIH1cclxuXHJcbiAgaXNBY3RpdmUoKTogYm9vbGVhbntcclxuICAgIHJldHVybiAoISh0aGlzLnN0YXR1cyA9PT0gU3RhdHVzLkJMT0NLRUQgfHwgdGhpcy5zdGF0dXM9PT0gU3RhdHVzLklETEUgfHwgdGhpcy5zdGF0dXM9PT1TdGF0dXMuRVJST1IpIHx8IHRoaXMucHJvY2Vzc2luZ1JlY29yZGluZyB8fCB0aGlzLnNlc3Npb25TZXJ2aWNlLnVwbG9hZENvdW50PjApXHJcbiAgfVxyXG5cclxuXHJcbiAgdXBkYXRlV2FrZUxvY2soZGF0YVNhdmVkOmJvb2xlYW49dGhpcy5kYXRhU2F2ZWQpe1xyXG4gICAgLy9jb25zb2xlLmRlYnVnKFwiVXBkYXRlIHdha2UgbG9jazogZGF0YVNhdmVkOiBcIitkYXRhU2F2ZWQrXCIsIG5vdCBhY3RpdmU6IFwiKyEgdGhpcy5pc0FjdGl2ZSgpKVxyXG4gICAgaWYoZGF0YVNhdmVkICYmICEgdGhpcy5pc0FjdGl2ZSgpKXtcclxuICAgICAgdGhpcy5kaXNhYmxlV2FrZUxvY2tDb25kKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKCl7XHJcblxyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLmZ3ZEFjdGlvbi5kaXNhYmxlZCA9IHRoaXMubmF2aWdhdGlvbkRpc2FibGVkO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLmJ3ZEFjdGlvbi5kaXNhYmxlZCA9IHRoaXMubmF2aWdhdGlvbkRpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgZW5hYmxlU3RhcnRVc2VyR2VzdHVyZSgpIHtcclxuICAgIHN1cGVyLmVuYWJsZVN0YXJ0VXNlckdlc3R1cmUoKTtcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdGFydEFjdGlvbi5kaXNhYmxlZD0hKHRoaXMuYWMpO1xyXG4gIH1cclxuXHJcbiAgZW5hYmxlTmF2aWdhdGlvbigpe1xyXG4gICAgdGhpcy5uYXZpZ2F0aW9uRGlzYWJsZWQ9ZmFsc2U7XHJcbiAgICB0aGlzLnVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKCk7XHJcbiAgfVxyXG5cclxuICBvcGVuZWQoKSB7XHJcbiAgICBpZih0aGlzLmFjKSB7XHJcbiAgICAgIHRoaXMuYWMuc3RhcnQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXJ0ZWQoKSB7XHJcbiAgICB0aGlzLnN0YXR1cyA9IFN0YXR1cy5SRUNPUkRJTkc7XHJcbiAgICBzdXBlci5zdGFydGVkKCk7XHJcbiAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdpbmZvJztcclxuICAgIHRoaXMuc3RhdHVzTXNnID0gJ1JlY29yZGluZy4uLic7XHJcblxyXG4gICAgbGV0IG1heFJlY29yZGluZ1RpbWVNcyA9IE1BWF9SRUNPUkRJTkdfVElNRV9NUztcclxuICAgIHRoaXMubWF4UmVjVGltZXJJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zdG9wUmVjb3JkaW5nTWF4UmVjKClcclxuICAgIH0sIG1heFJlY29yZGluZ1RpbWVNcyk7XHJcbiAgICB0aGlzLm1heFJlY1RpbWVyUnVubmluZyA9IHRydWU7XHJcblxyXG5cclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdG9wQWN0aW9uLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzdG9wSXRlbSgpIHtcclxuXHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RvcEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMubmV4dEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnN0YXR1cyA9IFN0YXR1cy5TVE9QUElOR19TVE9QO1xyXG4gICAgdGhpcy5zdG9wUmVjb3JkaW5nKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgc3RvcFJlY29yZGluZygpIHtcclxuICAgIGlmICh0aGlzLm1heFJlY1RpbWVyUnVubmluZyAmJiB0aGlzLm1heFJlY1RpbWVySWQhPW51bGwpIHtcclxuICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLm1heFJlY1RpbWVySWQpO1xyXG4gICAgICB0aGlzLm1heFJlY1RpbWVyUnVubmluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5hYykge1xyXG4gICAgICB0aGlzLmFjLnN0b3AoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0b3BSZWNvcmRpbmdNYXhSZWMoKXtcclxuXHJcbiAgICB0aGlzLm1heFJlY1RpbWVyUnVubmluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuU1RPUFBJTkdfU1RPUDtcclxuICAgIGlmKHRoaXMuYWMpIHtcclxuICAgICAgdGhpcy5hYy5zdG9wKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdG9wcGVkKCkge1xyXG4gICAgdGhpcy51cGRhdGVTdGFydEFjdGlvbkRpc2FibGVTdGF0ZSgpXHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RvcEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMubmV4dEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMucGF1c2VBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnaW5mbyc7XHJcbiAgICB0aGlzLnN0YXR1c01zZyA9ICdSZWNvcmRlZC4nO1xyXG5cclxuICAgIGxldCBhZDpBdWRpb0J1ZmZlcjtcclxuICAgIGlmKHRoaXMuYWMpIHtcclxuICAgICAgYWQgPSB0aGlzLmFjLmF1ZGlvQnVmZmVyKCk7XHJcbiAgICAgIGxldCBzZXNzSWQ6IHN0cmluZyB8IG51bWJlciA9IDA7XHJcbiAgICAgIGlmKHRoaXMuX3Nlc3Npb24pe1xyXG4gICAgICAgIHNlc3NJZD10aGlzLl9zZXNzaW9uLnNlc3Npb25JZDtcclxuICAgICAgfVxyXG4gICAgICBpZighdGhpcy5yZlV1aWQpe1xyXG4gICAgICAgIHRoaXMucmZVdWlkPVVVSUQuZ2VuZXJhdGUoKVxyXG4gICAgICB9XHJcbiAgICAgIGxldCByZiA9IG5ldyBSZWNvcmRpbmdGaWxlKHRoaXMucmZVdWlkLHNlc3NJZCxhZCk7XHJcbiAgICAgIHJmLl9zdGFydGVkQXNEYXRlT2JqPXRoaXMuc3RhcnRlZERhdGU7XHJcbiAgICAgIGlmKHJmLl9zdGFydGVkQXNEYXRlT2JqKSB7XHJcbiAgICAgICAgcmYuc3RhcnRlZERhdGUgPSByZi5fc3RhcnRlZEFzRGF0ZU9iai50b1N0cmluZygpO1xyXG4gICAgICB9XHJcbiAgICAgIHJmLmZyYW1lcyA9IGFkLmxlbmd0aDtcclxuICAgICAgdGhpcy5kaXNwbGF5UmVjRmlsZSA9IHJmO1xyXG4gICAgICB0aGlzLnJlY29yZGVyQ29tYmlQYW5lLnB1c2gocmYpO1xyXG5cclxuICAgICAgLy8gVXBsb2FkIGlmIHVwbG9hZCBlbmFibGVkIGFuZCBub3QgaW4gY2h1bmtlZCB1cGxvYWQgbW9kZVxyXG4gICAgICBpZiAodGhpcy5lbmFibGVVcGxvYWRSZWNvcmRpbmdzICYmICF0aGlzLnVwbG9hZENodW5rU2l6ZVNlY29uZHMpIHtcclxuICAgICAgICBsZXQgYXBpRW5kUG9pbnQgPSAnJztcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnICYmIHRoaXMuY29uZmlnLmFwaUVuZFBvaW50KSB7XHJcbiAgICAgICAgICBhcGlFbmRQb2ludCA9IHRoaXMuY29uZmlnLmFwaUVuZFBvaW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYXBpRW5kUG9pbnQgIT09ICcnKSB7XHJcbiAgICAgICAgICBhcGlFbmRQb2ludCA9IGFwaUVuZFBvaW50ICsgJy8nXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc2Vzc2lvbnNVcmwgPSBhcGlFbmRQb2ludCArIFNlc3Npb25TZXJ2aWNlLlNFU1NJT05fQVBJX0NUWDtcclxuICAgICAgICBsZXQgcmVjVXJsOiBzdHJpbmcgPSBzZXNzaW9uc1VybCArICcvJyArIHJmLnNlc3Npb24gKyAnLycgKyBSRUNGSUxFX0FQSV9DVFggKyAnLycgKyByZi51dWlkO1xyXG5cclxuICAgICAgICAvLyBjb252ZXJ0IGFzeW5jaHJvbm91c2x5IHRvIDE2LWJpdCBpbnRlZ2VyIFBDTVxyXG4gICAgICAgIC8vIFRPRE8gY291bGQgd2UgYXZvaWQgY29udmVyc2lvbiB0byBzYXZlIENQVSByZXNvdXJjZXMgYW5kIHRyYW5zZmVyIGZsb2F0IFBDTSBkaXJlY3RseT9cclxuICAgICAgICAvLyBUT0RPIGR1cGxpY2F0ZSBjb252ZXJzaW9uIGZvciBtYW51YWwgZG93bmxvYWRcclxuXHJcbiAgICAgICAgdGhpcy5wcm9jZXNzaW5nUmVjb3JkaW5nID0gdHJ1ZVxyXG4gICAgICAgIGxldCB3dyA9IG5ldyBXYXZXcml0ZXIoKTtcclxuICAgICAgICB3dy53cml0ZUFzeW5jKGFkLCAod2F2RmlsZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wb3N0UmVjb3JkaW5nTXVsdGlwYXJ0KHdhdkZpbGUsIHJmLnV1aWQsIHJmLnNlc3Npb24sIHJmLl9zdGFydGVkQXNEYXRlT2JqLCByZWNVcmwpO1xyXG4gICAgICAgICAgdGhpcy5wcm9jZXNzaW5nUmVjb3JkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZVdha2VMb2NrKCk7XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuSURMRTtcclxuICAgIHRoaXMubmF2aWdhdGlvbkRpc2FibGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLnVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKCk7XHJcbiAgICB0aGlzLnVwZGF0ZVdha2VMb2NrKCk7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgcG9zdFJlY29yZGluZ011bHRpcGFydCh3YXZGaWxlOiBVaW50OEFycmF5LCB1dWlkOnN0cmluZ3xudWxsLHNlc3Npb25JZDpzdHJpbmd8bnVtYmVyfG51bGwsc3RhcnRlZERhdGU6RGF0ZXxudWxsfHVuZGVmaW5lZCxyZWNVcmw6IHN0cmluZykge1xyXG4gICAgbGV0IHdhdkJsb2IgPSBuZXcgQmxvYihbd2F2RmlsZV0sIHt0eXBlOiAnYXVkaW8vd2F2J30pO1xyXG5cclxuICAgIGxldCBmZD1uZXcgRm9ybURhdGEoKTtcclxuICAgIGlmKHV1aWQpIHtcclxuICAgICAgZmQuc2V0KCd1dWlkJywgdXVpZCk7XHJcbiAgICB9XHJcbiAgICBpZihzZXNzaW9uSWQhPT1udWxsKSB7XHJcbiAgICAgIGZkLnNldCgnc2Vzc2lvbklkJywgc2Vzc2lvbklkLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG4gICAgaWYoc3RhcnRlZERhdGUpe1xyXG4gICAgICBmZC5zZXQoJ3N0YXJ0ZWREYXRlJyxzdGFydGVkRGF0ZS50b0pTT04oKSk7XHJcbiAgICB9XHJcbiAgICBmZC5zZXQoJ2F1ZGlvJyx3YXZCbG9iKTtcclxuICAgIGxldCB1bCA9IG5ldyBVcGxvYWQoZmQsIHJlY1VybCk7XHJcbiAgICB0aGlzLnVwbG9hZGVyLnF1ZXVlVXBsb2FkKHVsKTtcclxuICB9XHJcblxyXG4gIHBvc3RDaHVua0F1ZGlvQnVmZmVyKGF1ZGlvQnVmZmVyOiBBdWRpb0J1ZmZlciwgY2h1bmtJZHg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5wcm9jZXNzaW5nUmVjb3JkaW5nID0gdHJ1ZTtcclxuICAgIGxldCB3dyA9IG5ldyBXYXZXcml0ZXIoKTtcclxuICAgIC8vbmV3IFJFU1QgQVBJIFVSTFxyXG4gICAgbGV0IGFwaUVuZFBvaW50ID0gJyc7XHJcbiAgICBpZiAodGhpcy5jb25maWcgJiYgdGhpcy5jb25maWcuYXBpRW5kUG9pbnQpIHtcclxuICAgICAgYXBpRW5kUG9pbnQgPSB0aGlzLmNvbmZpZy5hcGlFbmRQb2ludDtcclxuICAgIH1cclxuICAgIGlmIChhcGlFbmRQb2ludCAhPT0gJycpIHtcclxuICAgICAgYXBpRW5kUG9pbnQgPSBhcGlFbmRQb2ludCArICcvJ1xyXG4gICAgfVxyXG4gICAgbGV0IHNlc3Npb25zVXJsID0gYXBpRW5kUG9pbnQgKyBTZXNzaW9uU2VydmljZS5TRVNTSU9OX0FQSV9DVFg7XHJcbiAgICBsZXQgcmVjVXJsOiBzdHJpbmcgPSBzZXNzaW9uc1VybCArICcvJyArIHRoaXMuc2Vzc2lvbj8uc2Vzc2lvbklkICsgJy8nICsgUkVDRklMRV9BUElfQ1RYICsgJy8nICsgdGhpcy5yZlV1aWQrJy8nK2NodW5rSWR4O1xyXG4gICAgd3cud3JpdGVBc3luYyhhdWRpb0J1ZmZlciwgKHdhdkZpbGUpID0+IHtcclxuICAgICAgdGhpcy5wb3N0UmVjb3JkaW5nKHdhdkZpbGUsIHJlY1VybCk7XHJcbiAgICAgIHRoaXMucHJvY2Vzc2luZ1JlY29yZGluZyA9IGZhbHNlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzdG9wKCkge1xyXG4gICAgaWYodGhpcy5hYykge1xyXG4gICAgICB0aGlzLmFjLmNsb3NlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUNvbnRyb2xQbGF5YmFja1Bvc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllci5wbGF5UG9zaXRpb25GcmFtZXMpIHtcclxuICAgICAgdGhpcy5yZWNvcmRlckNvbWJpUGFuZS5hdWRpb0Rpc3BsYXkucGxheUZyYW1lUG9zaXRpb24gPSB0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIucGxheVBvc2l0aW9uRnJhbWVzO1xyXG4gICAgICB0aGlzLmxpdmVMZXZlbERpc3BsYXkucGxheUZyYW1lUG9zaXRpb24gPSB0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIucGxheVBvc2l0aW9uRnJhbWVzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXVkaW9QbGF5ZXJVcGRhdGUoZTogQXVkaW9QbGF5ZXJFdmVudCkge1xyXG4gICAgaWYgKEV2ZW50VHlwZS5SRUFEWSA9PT0gZS50eXBlKSB7XHJcblxyXG4gICAgfSBlbHNlIGlmIChFdmVudFR5cGUuU1RBUlRFRCA9PT0gZS50eXBlKSB7XHJcbiAgICAgIC8vdGhpcy5zdGF0dXMgPSAnUGxheWJhY2suLi4nO1xyXG4gICAgICB0aGlzLnVwZGF0ZVRpbWVySWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4gdGhpcy51cGRhdGVDb250cm9sUGxheWJhY2tQb3NpdGlvbigpLCA1MCk7XHJcblxyXG4gICAgfSBlbHNlIGlmIChFdmVudFR5cGUuRU5ERUQgPT09IGUudHlwZSkge1xyXG4gICAgICAvLy5zdGF0dXM9J1JlYWR5Lic7XHJcbiAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHRoaXMudXBkYXRlVGltZXJJZCk7XHJcblxyXG4gICAgfVxyXG4gICAgaWYoIXRoaXMuZGVzdHJveWVkKSB7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1hdWRpb3JlY29yZGVyLWNvbXAnLFxyXG4gIHByb3ZpZGVyczogW1Nlc3Npb25TZXJ2aWNlXSxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGFwcC1hdWRpb3JlY29yZGVyIFtwcm9qZWN0TmFtZV09XCJfcHJvamVjdD8ubmFtZVwiIFtkYXRhU2F2ZWRdPVwiZGF0YVNhdmVkXCI+PC9hcHAtYXVkaW9yZWNvcmRlcj5cclxuICBgLFxyXG4gIHN0eWxlczogW2A6aG9zdHtcclxuICAgIGZsZXg6IDI7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgbWluLWhlaWdodDowO1xyXG5cclxuICB9YF1cclxuXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdWRpb1JlY29yZGVyQ29tcG9uZW50IGV4dGVuZHMgUmVjb3JkZXJDb21wb25lbnQgIGltcGxlbWVudHMgT25Jbml0LE9uRGVzdHJveSxBZnRlclZpZXdJbml0LFJlYWR5U3RhdGVQcm92aWRlciB7XHJcblxyXG4gIG1vZGUhOk1vZGU7XHJcbiAgY29udHJvbEF1ZGlvUGxheWVyITpBdWRpb1BsYXllcjtcclxuICBhdWRpbzphbnk7XHJcblxyXG4gIF9wcm9qZWN0OlByb2plY3R8dW5kZWZpbmVkO1xyXG4gIHNlc3Npb25JZCE6IHN0cmluZztcclxuICBzZXNzaW9uITpTZXNzaW9uO1xyXG5cclxuICBAVmlld0NoaWxkKEF1ZGlvUmVjb3JkZXIsIHsgc3RhdGljOiB0cnVlIH0pIGFyITpBdWRpb1JlY29yZGVyO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaW5qZWN0b3I6SW5qZWN0b3IscHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICAgICAgICBwcml2YXRlIHNlc3Npb25TZXJ2aWNlOlNlc3Npb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgcHJvamVjdFNlcnZpY2U6UHJvamVjdFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJvdGVjdGVkIHVwbG9hZGVyOlNwZWVjaFJlY29yZGVyVXBsb2FkZXJcclxuICApIHtcclxuICAgIHN1cGVyKHVwbG9hZGVyKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgLy9zdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgbGV0IGF1ZGlvQ29udGV4dCA9IEF1ZGlvQ29udGV4dFByb3ZpZGVyLmF1ZGlvQ29udGV4dEluc3RhbmNlKCk7XHJcbiAgICBpZihhdWRpb0NvbnRleHQpIHtcclxuICAgICAgdGhpcy5jb250cm9sQXVkaW9QbGF5ZXIgPSBuZXcgQXVkaW9QbGF5ZXIoYXVkaW9Db250ZXh0LHRoaXMuYXIpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hci5jb250cm9sQXVkaW9QbGF5ZXI9dGhpcy5jb250cm9sQXVkaW9QbGF5ZXI7XHJcblxyXG4gICAgLy9UT0RPIER1cGxpY2F0ZSBjb2RlIGluIFNwZWVjaFJlY29yZGVyQ29tcG9uZW50XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgKGUpID0+IHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIkJlZm9yZSBwYWdlIHVubG9hZCBldmVudFwiKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLnJlYWR5KCkpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gYWxsIHRoaXMgYXR0ZW1wdHMgdG8gY3VzdG9taXplIHRoZSBtZXNzYWdlIGRvIG5vdCB3b3JrIGFueW1vcmUgKGZvciBzZWN1cml0eSByZWFzb25zKSEhXHJcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSBcIlBsZWFzZSBkbyBub3QgbGVhdmUgdGhlIHBhZ2UsIHVudGlsIGFsbCByZWNvcmRpbmdzIGFyZSB1cGxvYWRlZCFcIjtcclxuICAgICAgICBhbGVydChtZXNzYWdlKTtcclxuICAgICAgICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XHJcblxyXG4gICAgICAgIGlmIChlKSB7XHJcbiAgICAgICAgICBlLnJldHVyblZhbHVlID0gbWVzc2FnZTtcclxuICAgICAgICAgIGUuY2FuY2VsQnViYmxlID0gdHJ1ZTtcclxuICAgICAgICAgIGlmIChlLnN0b3BQcm9wYWdhdGlvbikge1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGUucHJldmVudERlZmF1bHQpIHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy51cGxvYWRlci5saXN0ZW5lciA9ICh1ZSkgPT4ge1xyXG4gICAgICB0aGlzLnVwbG9hZFVwZGF0ZSh1ZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSgocGFyYW1zOiBQYXJhbXMpID0+IHtcclxuICAgICAgaWYgKHBhcmFtc1snc2Vzc2lvbklkJ10pIHtcclxuICAgICAgICB0aGlzLmZldGNoU2Vzc2lvbihwYXJhbXNbJ3Nlc3Npb25JZCddKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtczogUGFyYW1zKSA9PiB7XHJcbiAgICAgIGxldCByb3V0ZVBhcmFtc0lkID0gcGFyYW1zWydpZCddO1xyXG4gICAgICBpZiAocm91dGVQYXJhbXNJZCkge1xyXG4gICAgICAgIHRoaXMuZmV0Y2hTZXNzaW9uKHJvdXRlUGFyYW1zSWQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgLy9zdXBlci5uZ09uRGVzdHJveSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNjcmVlbkxvY2tlZCgpOmJvb2xlYW57XHJcbiAgICByZXR1cm4gIHRoaXMuYXIuc2NyZWVuTG9ja2VkO1xyXG4gIH1cclxuXHJcbiAgZmV0Y2hTZXNzaW9uKHNlc3Npb25JZDpzdHJpbmcpe1xyXG5cclxuICAgIGxldCBzZXNzT2JzPSB0aGlzLnNlc3Npb25TZXJ2aWNlLnNlc3Npb25PYnNlcnZlcihzZXNzaW9uSWQpO1xyXG5cclxuICAgIGlmKHNlc3NPYnMpIHtcclxuICAgICAgc2Vzc09icy5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6KHNlc3MpID0+IHtcclxuICAgICAgICAgIHRoaXMuYXIuc3RhdHVzQWxlcnRUeXBlPSdpbmZvJztcclxuICAgICAgICAgIHRoaXMuYXIuc3RhdHVzTXNnID0gJ1JlY2VpdmVkIHNlc3Npb24gaW5mby4nO1xyXG4gICAgICAgICAgdGhpcy5hci5zdGF0dXNXYWl0aW5nPWZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5zZXNzaW9uPXNlc3M7XHJcbiAgICAgICAgICB0aGlzLmFyLnNlc3Npb249c2VzcztcclxuICAgICAgICAgIGlmIChzZXNzLnByb2plY3QpIHtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiU2Vzc2lvbiBhc3NvY2lhdGVkIHByb2plY3Q6IFwiK3Nlc3MucHJvamVjdClcclxuICAgICAgICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0T2JzZXJ2YWJsZShzZXNzLnByb2plY3QpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgbmV4dDoocHJvamVjdCk9PntcclxuICAgICAgICAgICAgICB0aGlzLmFyLnByb2plY3Q9cHJvamVjdDtcclxuICAgICAgICAgICAgICB0aGlzLmFyLmZldGNoUmVjb3JkaW5ncyhzZXNzKTtcclxuICAgICAgICAgICAgfSxlcnJvcjoocmVhc29uKSA9PntcclxuICAgICAgICAgICAgICB0aGlzLmFyLnN0YXR1c01zZz1yZWFzb247XHJcbiAgICAgICAgICAgICAgdGhpcy5hci5zdGF0dXNBbGVydFR5cGU9J2Vycm9yJztcclxuICAgICAgICAgICAgICB0aGlzLmFyLnN0YXR1c1dhaXRpbmc9ZmFsc2U7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIHByb2plY3QgY29uZmlnOiBcIityZWFzb24pXHJcbiAgICAgICAgICAgIH19KTtcclxuXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmluZm8oXCJTZXNzaW9uIGhhcyBubyBhc3NvY2lhdGVkIHByb2plY3QuIFVzaW5nIGRlZmF1bHQgY29uZmlndXJhdGlvbi5cIilcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOihyZWFzb24pID0+IHtcclxuICAgICAgICAgIHRoaXMuYXIuc3RhdHVzTXNnID0gcmVhc29uO1xyXG4gICAgICAgICAgdGhpcy5hci5zdGF0dXNBbGVydFR5cGUgPSAnZXJyb3InO1xyXG4gICAgICAgICAgdGhpcy5hci5zdGF0dXNXYWl0aW5nPWZhbHNlO1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIHNlc3Npb24gXCIgKyByZWFzb24pXHJcbiAgICAgICAgfX0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBsb2FkVXBkYXRlKHVlOiBVcGxvYWRlclN0YXR1c0NoYW5nZUV2ZW50KSB7XHJcbiAgICBsZXQgdXBTdGF0dXMgPSB1ZS5zdGF0dXM7XHJcbiAgICB0aGlzLmRhdGFTYXZlZCA9IChVcGxvYWRlclN0YXR1cy5ET05FID09PSB1cFN0YXR1cyk7XHJcbiAgICBsZXQgcGVyY2VudFVwbCA9IHVlLnBlcmNlbnREb25lKCk7XHJcbiAgICBpZiAoVXBsb2FkZXJTdGF0dXMuRVJSID09PSB1cFN0YXR1cykge1xyXG4gICAgICB0aGlzLmFyLnVwbG9hZFN0YXR1cyA9ICd3YXJuJ1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHBlcmNlbnRVcGwgPCA1MCkge1xyXG4gICAgICAgIHRoaXMuYXIudXBsb2FkU3RhdHVzID0gJ2FjY2VudCdcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmFyLnVwbG9hZFN0YXR1cyA9ICdzdWNjZXNzJ1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYXIudXBsb2FkUHJvZ3Jlc3MgPSBwZXJjZW50VXBsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hci51cGRhdGVXYWtlTG9jayh0aGlzLmRhdGFTYXZlZCk7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKVxyXG4gIH1cclxuXHJcblxyXG4gIHJlYWR5KCk6Ym9vbGVhbntcclxuICAgIHJldHVybiB0aGlzLmRhdGFTYXZlZCAmJiAhdGhpcy5hci5pc0FjdGl2ZSgpXHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|