speechrecorderng 3.10.0 → 3.10.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/esm2022/lib/audio/audio_display.mjs +3 -3
- package/esm2022/lib/audio/audio_player.mjs +3 -3
- package/esm2022/lib/audio/impl/wavwriter.mjs +10 -2
- package/esm2022/lib/audio/ui/audio_canvas_layer_comp.mjs +6 -6
- package/esm2022/lib/audio/ui/audio_display_control.mjs +3 -3
- package/esm2022/lib/audio/ui/audio_display_scroll_pane.mjs +3 -3
- package/esm2022/lib/audio/ui/audiosignal.mjs +3 -3
- package/esm2022/lib/audio/ui/container.mjs +3 -3
- package/esm2022/lib/audio/ui/livelevel.mjs +3 -3
- package/esm2022/lib/audio/ui/scroll_pane_horizontal.mjs +3 -3
- package/esm2022/lib/audio/ui/sonagram.mjs +3 -3
- package/esm2022/lib/db/inddb.mjs +3 -3
- package/esm2022/lib/speechrecorder/project/project.service.mjs +3 -3
- package/esm2022/lib/speechrecorder/recordings/recordings.service.mjs +3 -3
- package/esm2022/lib/speechrecorder/script/script.service.mjs +3 -3
- package/esm2022/lib/speechrecorder/session/audiorecorder.mjs +10 -10
- package/esm2022/lib/speechrecorder/session/controlpanel.mjs +21 -21
- package/esm2022/lib/speechrecorder/session/progress.mjs +3 -3
- package/esm2022/lib/speechrecorder/session/prompting.mjs +15 -15
- package/esm2022/lib/speechrecorder/session/recorder_combi_pane.mjs +3 -3
- package/esm2022/lib/speechrecorder/session/recording_list.mjs +3 -3
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +3 -3
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +3 -3
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +3 -3
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +3 -3
- package/esm2022/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +3 -3
- package/esm2022/lib/speechrecorder/session/session.service.mjs +3 -3
- package/esm2022/lib/speechrecorder/session/session_finished_dialog.mjs +3 -3
- package/esm2022/lib/speechrecorder/session/sessionmanager.mjs +6 -6
- package/esm2022/lib/speechrecorder/session/warning_bar.mjs +3 -3
- package/esm2022/lib/speechrecorder/spruploader.mjs +3 -3
- package/esm2022/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +3 -3
- package/esm2022/lib/speechrecorderng.component.mjs +3 -3
- package/esm2022/lib/speechrecorderng.module.mjs +4 -4
- package/esm2022/lib/spr.config.mjs +3 -3
- package/esm2022/lib/spr.module.version.mjs +2 -2
- package/esm2022/lib/ui/canvas_layer_comp.mjs +3 -3
- package/esm2022/lib/ui/intersection-observer.directive.mjs +3 -3
- package/esm2022/lib/ui/message_dialog.mjs +3 -3
- package/esm2022/lib/ui/recordingitem_display.mjs +6 -6
- package/esm2022/lib/ui/responsive_component.mjs +3 -3
- package/esm2022/lib/utils/scrollIntoViewToBottom.mjs +3 -3
- package/fesm2022/speechrecorderng.mjs +175 -167
- package/fesm2022/speechrecorderng.mjs.map +1 -1
- package/lib/spr.module.version.d.ts +1 -1
- package/package.json +12 -12
|
@@ -1122,7 +1122,7 @@ export class SessionManager extends BasicRecorder {
|
|
|
1122
1122
|
//console.log("Build wav writer...");
|
|
1123
1123
|
if (ab) {
|
|
1124
1124
|
this.processingRecording = true;
|
|
1125
|
-
|
|
1125
|
+
const ww = new WavWriter(this._clientMediaStorageFormat?.audioEncoding === AudioStorageFormatEncoding.PCM_FLOAT, this._clientMediaStorageFormat?.audioPCMsampleSizeInBits);
|
|
1126
1126
|
//new REST API URL
|
|
1127
1127
|
let apiEndPoint = '';
|
|
1128
1128
|
if (this.config && this.config.apiEndPoint) {
|
|
@@ -1209,7 +1209,7 @@ export class SessionManager extends BasicRecorder {
|
|
|
1209
1209
|
}
|
|
1210
1210
|
postChunkAudioBuffer(audioBuffer, chunkIdx) {
|
|
1211
1211
|
this.processingRecording = true;
|
|
1212
|
-
|
|
1212
|
+
const ww = new WavWriter(this._clientMediaStorageFormat?.audioEncoding === AudioStorageFormatEncoding.PCM_FLOAT, this._clientMediaStorageFormat?.audioPCMsampleSizeInBits);
|
|
1213
1213
|
let sessionsUrl = this.sessionsBaseUrl();
|
|
1214
1214
|
let recUrl = sessionsUrl + '/' + this.session?.sessionId + '/' + RECFILE_API_CTX + '/' + this.promptItem.itemcode + '/' + this.rfUuid + '/' + chunkIdx;
|
|
1215
1215
|
// The upload holder is required to add the upload now to the upload set. The real upload is created async in postrecording and the upload set is already complete at that time.
|
|
@@ -1258,8 +1258,8 @@ export class SessionManager extends BasicRecorder {
|
|
|
1258
1258
|
this.changeDetectorRef.detectChanges();
|
|
1259
1259
|
}
|
|
1260
1260
|
}
|
|
1261
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.
|
|
1262
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.
|
|
1261
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: SessionManager, deps: [{ token: i1.BreakpointObserver }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i2.MatDialog }, { token: i3.SessionService }, { token: i4.RecordingService }, { token: i5.SpeechRecorderUploader }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1262
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.6", type: SessionManager, selector: "app-sprrecordingsession", inputs: { projectName: "projectName", dataSaved: "dataSaved" }, host: { listeners: { "window:keypress": "onKeyPress($event)", "window:keydown": "onKeyDown($event)" } }, providers: [SessionService], viewQueries: [{ propertyName: "prompting", first: true, predicate: Prompting, descendants: true, static: true }, { propertyName: "liveLevelDisplay", first: true, predicate: LevelBar, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
|
|
1263
1263
|
<app-warningbar [show]="isTestSession()" warningText="Test recording only!"></app-warningbar>
|
|
1264
1264
|
<app-warningbar [show]="isDefaultAudioTestSession()" warningText="This test uses default audio device! Regular sessions may require a particular audio device (microphone)!"></app-warningbar>
|
|
1265
1265
|
<app-sprprompting [projectName]="projectName"
|
|
@@ -1310,7 +1310,7 @@ export class SessionManager extends BasicRecorder {
|
|
|
1310
1310
|
</div>
|
|
1311
1311
|
`, isInline: true, styles: [":host{flex:2;background:#d3d3d3;display:flex;flex-direction:column;margin:0;padding:0;min-height:0px;overflow:hidden}\n", ".ricontrols{display:flex;padding:4px;box-sizing:border-box;height:100%;flex-direction:row;justify-content:flex-end;align-items:center;align-content:center}\n", ".dark{background:#a9a9a9}\n", ".controlpanel{display:flex;flex-direction:row;align-content:center;align-items:center;margin:0;padding:20px;min-height:min-content}\n", ".audioStatusDisplay{display:flex;flex-direction:row;height:100px;min-height:100px}\n", ".audioStatusDisplayXs{display:flex;flex-direction:column;height:125px;min-height:125px}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i8.LevelBar, selector: "audio-levelbar", inputs: ["streamingMode", "displayLevelInfos", "state"] }, { kind: "component", type: i9.Prompting, selector: "app-sprprompting", inputs: ["projectName", "startStopSignalState", "promptItem", "showPrompt", "items", "selectedItemIdx", "transportActions", "enableDownload", "audioSignalCollapsed", "displayAudioClip", "playStartAction", "playSelectionAction", "autoPlayOnSelectToggleAction", "playStopAction"], outputs: ["onItemSelect", "onNextItem", "onPrevItem"] }, { kind: "component", type: i10.StatusDisplay, selector: "app-sprstatusdisplay", inputs: ["statusAlertType", "statusMsg", "statusWaiting"] }, { kind: "component", type: i11.RecordingItemControls, selector: "spr-recordingitemcontrols", inputs: ["audioSignalCollapsed", "enableDownload", "peakDbLvl", "agc", "disableAudioDetails", "audioLoaded", "playStartAction", "playStopAction", "displayLevelInfos"], outputs: ["onShowRecordingDetails", "onDownloadRecording"] }, { kind: "component", type: i10.UploadStatus, selector: "app-uploadstatus", inputs: ["value", "awaitNewUpload", "status"] }, { kind: "component", type: i10.TransportPanel, selector: "app-sprtransport", inputs: ["readonly", "actions", "navigationEnabled", "pausingEnabled"] }, { kind: "component", type: i10.WakeLockIndicator, selector: "app-wakelockindicator", inputs: ["screenLocked"] }, { kind: "component", type: i10.ReadyStateIndicator, selector: "app-readystateindicator", inputs: ["ready"] }, { kind: "component", type: i12.WarningBar, selector: "app-warningbar", inputs: ["warningText", "show"] }] }); }
|
|
1312
1312
|
}
|
|
1313
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.
|
|
1313
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: SessionManager, decorators: [{
|
|
1314
1314
|
type: Component,
|
|
1315
1315
|
args: [{ selector: 'app-sprrecordingsession', providers: [SessionService], template: `
|
|
1316
1316
|
<app-warningbar [show]="isTestSession()" warningText="Test recording only!"></app-warningbar>
|
|
@@ -1382,4 +1382,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
1382
1382
|
type: HostListener,
|
|
1383
1383
|
args: ['window:keydown', ['$event']]
|
|
1384
1384
|
}] } });
|
|
1385
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbm1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvc3BlZWNocmVjb3JkZXIvc2Vzc2lvbi9zZXNzaW9ubWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsWUFBWSxFQUF1QixNQUFNLDZCQUE2QixDQUFDO0FBQy9FLE9BQU8sRUFBZ0MsU0FBUyxFQUFDLE1BQU0sNkJBQTZCLENBQUE7QUFDcEYsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDRCQUE0QixDQUFBO0FBQ3BELE9BQU8sRUFBb0IsY0FBYyxFQUFrQixNQUFNLGtCQUFrQixDQUFDO0FBQ3BGLE9BQU8sRUFBOEIsZ0JBQWdCLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDMUUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFHTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUlqRCxPQUFPLEVBQUMscUJBQXFCLEVBQXVCLE1BQU0sa0JBQWtCLENBQUM7QUFDN0UsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUN0QyxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDbEUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ2hELE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLFFBQVEsRUFB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SUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRTNDLENBQUM7UUFFRCxJQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMzQyxDQUFDO0lBRUgsQ0FBQzs4R0FwMENVLGNBQWMsMk9BcUVMLHFCQUFxQjtrR0FyRTlCLGNBQWMsMk5BNUZkLENBQUMsY0FBYyxDQUFDLHFFQWdIaEIsU0FBUyxpR0FDVCxRQUFRLHFGQWhIVDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlEVDs7MkZBMENVLGNBQWM7a0JBOUYxQixTQUFTOytCQUNFLHlCQUF5QixhQUN4QixDQUFDLGNBQWMsQ0FBQyxZQUNqQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlEVDs7MEJBK0dZLE1BQU07MkJBQUMscUJBQXFCO3lDQXREaEMsV0FBVztzQkFBbkIsS0FBSztnQkFLa0MsU0FBUztzQkFBaEQsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNDLGdCQUFnQjtzQkFBdEQsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUU1QixTQUFTO3NCQUFqQixLQUFLO2dCQXNLTixVQUFVO3NCQURULFlBQVk7dUJBQUMsaUJBQWlCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBVTNDLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXVkaW9DYXB0dXJlLCBBdWRpb0NhcHR1cmVMaXN0ZW5lcn0gZnJvbSAnLi4vLi4vYXVkaW8vY2FwdHVyZS9jYXB0dXJlJztcclxuaW1wb3J0IHtBdWRpb1BsYXllciwgQXVkaW9QbGF5ZXJFdmVudCwgRXZlbnRUeXBlfSBmcm9tICcuLi8uLi9hdWRpby9wbGF5YmFjay9wbGF5ZXInXHJcbmltcG9ydCB7V2F2V3JpdGVyfSBmcm9tICcuLi8uLi9hdWRpby9pbXBsL3dhdndyaXRlcidcclxuaW1wb3J0IHtHcm91cCwgUHJvbXB0SXRlbSwgUHJvbXB0aXRlbVV0aWwsIFNjcmlwdCwgU2VjdGlvbn0gZnJvbSAnLi4vc2NyaXB0L3NjcmlwdCc7XHJcbmltcG9ydCB7UmVjb3JkaW5nRmlsZURlc2NyaXB0b3JJbXBsLCBTcHJSZWNvcmRpbmdGaWxlfSBmcm9tICcuLi9yZWNvcmRpbmcnXHJcbmltcG9ydCB7VXBsb2FkSG9sZGVyfSBmcm9tICcuLi8uLi9uZXQvdXBsb2FkZXInO1xyXG5pbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIFJlbmRlcmVyMixcclxuICBWaWV3Q2hpbGRcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1Nlc3Npb25TZXJ2aWNlfSBmcm9tIFwiLi9zZXNzaW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtTdGF0ZSBhcyBTdGFydFN0b3BTaWduYWxTdGF0ZX0gZnJvbSBcIi4uL3N0YXJ0c3RvcHNpZ25hbC9zdGFydHN0b3BzaWduYWxcIjtcclxuaW1wb3J0IHtNYXREaWFsb2d9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcclxuaW1wb3J0IHtTcGVlY2hSZWNvcmRlclVwbG9hZGVyfSBmcm9tIFwiLi4vc3BydXBsb2FkZXJcIjtcclxuaW1wb3J0IHtTUEVFQ0hSRUNPUkRFUl9DT05GSUcsIFNwZWVjaFJlY29yZGVyQ29uZmlnfSBmcm9tIFwiLi4vLi4vc3ByLmNvbmZpZ1wiO1xyXG5pbXBvcnQge1Byb21wdGluZ30gZnJvbSBcIi4vcHJvbXB0aW5nXCI7XHJcbmltcG9ydCB7U2Vzc2lvbkZpbmlzaGVkRGlhbG9nfSBmcm9tIFwiLi9zZXNzaW9uX2ZpbmlzaGVkX2RpYWxvZ1wiO1xyXG5pbXBvcnQge01lc3NhZ2VEaWFsb2d9IGZyb20gXCIuLi8uLi91aS9tZXNzYWdlX2RpYWxvZ1wiO1xyXG5pbXBvcnQge1JlY29yZGluZ1NlcnZpY2V9IGZyb20gXCIuLi9yZWNvcmRpbmdzL3JlY29yZGluZ3Muc2VydmljZVwiO1xyXG5pbXBvcnQge0F1ZGlvQ2xpcH0gZnJvbSBcIi4uLy4uL2F1ZGlvL3BlcnNpc3RvclwiO1xyXG5pbXBvcnQge0l0ZW19IGZyb20gXCIuL2l0ZW1cIjtcclxuaW1wb3J0IHtMZXZlbEJhciwgU3RhdGUgYXMgTGl2ZUxldmVsU3RhdGV9IGZyb20gXCIuLi8uLi9hdWRpby91aS9saXZlbGV2ZWxcIjtcclxuaW1wb3J0IHtCYXNpY1JlY29yZGVyLCBDaHVua0F1ZGlvQnVmZmVyUmVjZWl2ZXIsIE1BWF9SRUNPUkRJTkdfVElNRV9NUywgUkVDRklMRV9BUElfQ1RYfSBmcm9tIFwiLi9iYXNpY3JlY29yZGVyXCI7XHJcbmltcG9ydCB7QXJyYXlBdWRpb0J1ZmZlcn0gZnJvbSBcIi4uLy4uL2F1ZGlvL2FycmF5X2F1ZGlvX2J1ZmZlclwiO1xyXG5pbXBvcnQge0F1ZGlvQnVmZmVyU291cmNlLCBBdWRpb0RhdGFIb2xkZXIsIEF1ZGlvU291cmNlfSBmcm9tIFwiLi4vLi4vYXVkaW8vYXVkaW9fZGF0YV9ob2xkZXJcIjtcclxuaW1wb3J0IHtTcHJJdGVtc0NhY2hlfSBmcm9tIFwiLi9yZWNvcmRpbmdfZmlsZV9jYWNoZVwiO1xyXG5pbXBvcnQge0luZGV4ZWREYkF1ZGlvQnVmZmVyLCBQZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0fSBmcm9tIFwiLi4vLi4vYXVkaW8vaW5kZGJfYXVkaW9fYnVmZmVyXCI7XHJcbmltcG9ydCB7QXVkaW9TdG9yYWdlRm9ybWF0RW5jb2RpbmcsIEF1ZGlvU3RvcmFnZVR5cGV9IGZyb20gXCIuLi9wcm9qZWN0L3Byb2plY3RcIjtcclxuaW1wb3J0IHtOZXRBdWRpb0J1ZmZlcn0gZnJvbSBcIi4uLy4uL2F1ZGlvL25ldF9hdWRpb19idWZmZXJcIjtcclxuaW1wb3J0IHtCcmVha3BvaW50T2JzZXJ2ZXJ9IGZyb20gXCJAYW5ndWxhci9jZGsvbGF5b3V0XCI7XHJcblxyXG5jb25zdCBERUZBVUxUX1BSRV9SRUNfREVMQVk9MTAwMDtcclxuY29uc3QgREVGQVVMVF9QT1NUX1JFQ19ERUxBWT01MDA7XHJcblxyXG5leHBvcnQgY29uc3QgZW51bSBTdGF0dXMge1xyXG4gIEJMT0NLRUQsIElETEUsIFNUQVJUSU5HLCBQUkVfUkVDT1JESU5HLCBSRUNPUkRJTkcsIFBPU1RfUkVDX1NUT1AsIFBPU1RfUkVDX1BBVVNFLCBTVE9QUElOR19TVE9QLCBTVE9QUElOR19QQVVTRSwgTk9OX1JFQ09SRElOR19XQUlULEVSUk9SXHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXNwcnJlY29yZGluZ3Nlc3Npb24nLFxyXG4gIHByb3ZpZGVyczogW1Nlc3Npb25TZXJ2aWNlXSxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGFwcC13YXJuaW5nYmFyIFtzaG93XT1cImlzVGVzdFNlc3Npb24oKVwiIHdhcm5pbmdUZXh0PVwiVGVzdCByZWNvcmRpbmcgb25seSFcIj48L2FwcC13YXJuaW5nYmFyPlxyXG4gICAgPGFwcC13YXJuaW5nYmFyIFtzaG93XT1cImlzRGVmYXVsdEF1ZGlvVGVzdFNlc3Npb24oKVwiIHdhcm5pbmdUZXh0PVwiVGhpcyB0ZXN0IHVzZXMgZGVmYXVsdCBhdWRpbyBkZXZpY2UhIFJlZ3VsYXIgc2Vzc2lvbnMgbWF5IHJlcXVpcmUgYSBwYXJ0aWN1bGFyIGF1ZGlvIGRldmljZSAobWljcm9waG9uZSkhXCI+PC9hcHAtd2FybmluZ2Jhcj5cclxuICAgICAgPGFwcC1zcHJwcm9tcHRpbmcgW3Byb2plY3ROYW1lXT1cInByb2plY3ROYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0YXJ0U3RvcFNpZ25hbFN0YXRlXT1cInN0YXJ0U3RvcFNpZ25hbFN0YXRlXCIgW3Byb21wdEl0ZW1dPVwicHJvbXB0SXRlbVwiIFtzaG93UHJvbXB0XT1cInNob3dQcm9tcHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiaXRlbXM/Lml0ZW1zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RyYW5zcG9ydEFjdGlvbnNdPVwidHJhbnNwb3J0QWN0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZEl0ZW1JZHhdPVwicHJvbXB0SW5kZXhcIiAob25JdGVtU2VsZWN0KT1cIml0ZW1TZWxlY3QoJGV2ZW50KVwiIChvbk5leHRJdGVtKT1cIm5leHRJdGVtKClcIiAob25QcmV2SXRlbSk9XCJwcmV2SXRlbSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2F1ZGlvU2lnbmFsQ29sbGFwc2VkXT1cImF1ZGlvU2lnbmFsQ29sbGFwc2VkXCIgW2Rpc3BsYXlBdWRpb0NsaXBdPVwiZGlzcGxheUF1ZGlvQ2xpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGF5U3RhcnRBY3Rpb25dPVwiY29udHJvbEF1ZGlvUGxheWVyPy5zdGFydEFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGF5U2VsZWN0aW9uQWN0aW9uXT1cImNvbnRyb2xBdWRpb1BsYXllcj8uc3RhcnRTZWxlY3Rpb25BY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXV0b1BsYXlPblNlbGVjdFRvZ2dsZUFjdGlvbl09XCJjb250cm9sQXVkaW9QbGF5ZXI/LmF1dG9QbGF5T25TZWxlY3RUb2dnbGVBY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxheVN0b3BBY3Rpb25dPVwiY29udHJvbEF1ZGlvUGxheWVyPy5zdG9wQWN0aW9uXCI+XHJcblxyXG4gICAgPC9hcHAtc3BycHJvbXB0aW5nPlxyXG4gICAgPG1hdC1wcm9ncmVzcy1iYXIgW3ZhbHVlXT1cInByb2dyZXNzUGVyY2VudFZhbHVlKClcIiAqbmdJZj1cInNjcmVlblhzXCIgPjwvbWF0LXByb2dyZXNzLWJhcj5cclxuXHJcblxyXG4gICAgPGRpdiBbY2xhc3NdPVwie2F1ZGlvU3RhdHVzRGlzcGxheTohc2NyZWVuWHMsYXVkaW9TdGF0dXNEaXNwbGF5WHM6c2NyZWVuWHN9XCI+XHJcbiAgICAgIDxhdWRpby1sZXZlbGJhciBzdHlsZT1cImZsZXg6MSAwIDElXCIgW3N0cmVhbWluZ01vZGVdPVwiaXNSZWNvcmRpbmcoKSB8fCBrZWVwTGl2ZUxldmVsXCIgW2Rpc3BsYXlMZXZlbEluZm9zXT1cImRpc3BsYXlBdWRpb0NsaXA/LmxldmVsSW5mb3NcIiAgW3N0YXRlXT1cImxpdmVMZXZlbERpc3BsYXlTdGF0ZVwiPjwvYXVkaW8tbGV2ZWxiYXI+XHJcbiAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246IHJvd1wiPlxyXG4gICAgICAgIDxzcHItcmVjb3JkaW5naXRlbWNvbnRyb2xzIHN0eWxlPVwiZGlzcGxheTpmbGV4O2ZsZXg6MTAgMCAxcHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdWRpb0xvYWRlZF09XCJhdWRpb0xvYWRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVBdWRpb0RldGFpbHNdPVwiZGlzYWJsZUF1ZGlvRGV0YWlsc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYXlTdGFydEFjdGlvbl09XCJjb250cm9sQXVkaW9QbGF5ZXI/LnN0YXJ0QWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxheVN0b3BBY3Rpb25dPVwiY29udHJvbEF1ZGlvUGxheWVyPy5zdG9wQWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGVha0RiTHZsXT1cInBlYWtMZXZlbEluRGJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthZ2NdPVwidGhpcy5hYz8uYWdjU3RhdHVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25TaG93UmVjb3JkaW5nRGV0YWlscyk9XCJhdWRpb1NpZ25hbENvbGxhcHNlZD0hYXVkaW9TaWduYWxDb2xsYXBzZWRcIj5cclxuICAgICAgICA8L3Nwci1yZWNvcmRpbmdpdGVtY29udHJvbHM+XHJcblxyXG4gICAgICAgIDxhcHAtdXBsb2Fkc3RhdHVzICpuZ0lmPVwic2NyZWVuWHMgJiYgZW5hYmxlVXBsb2FkUmVjb3JkaW5nc1wiIGNsYXNzPVwicmljb250cm9scyBkYXJrXCIgIHN0eWxlPVwiZmxleDowIDAgMFwiIFt2YWx1ZV09XCJ1cGxvYWRQcm9ncmVzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0YXR1c109XCJ1cGxvYWRTdGF0dXNcIiBbYXdhaXROZXdVcGxvYWRdPVwicHJvY2Vzc2luZ1JlY29yZGluZ1wiPjwvYXBwLXVwbG9hZHN0YXR1cz5cclxuICAgICAgICA8YXBwLXdha2Vsb2NraW5kaWNhdG9yICpuZ0lmPVwic2NyZWVuWHNcIiBjbGFzcz1cInJpY29udHJvbHMgZGFya1wiIHN0eWxlPVwiZmxleDowIDAgMFwiIFtzY3JlZW5Mb2NrZWRdPVwic2NyZWVuTG9ja2VkXCI+PC9hcHAtd2FrZWxvY2tpbmRpY2F0b3I+XHJcbiAgICAgICAgPGFwcC1yZWFkeXN0YXRlaW5kaWNhdG9yICpuZ0lmPVwic2NyZWVuWHNcIiBjbGFzcz1cInJpY29udHJvbHMgZGFya1wiIHN0eWxlPVwiZmxleDowIDAgMFwiIFtyZWFkeV09XCJkYXRhU2F2ZWQgJiYgIWlzQWN0aXZlKClcIj48L2FwcC1yZWFkeXN0YXRlaW5kaWNhdG9yPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAjY29udHJvbHBhbmVsIGNsYXNzPVwiY29udHJvbHBhbmVsXCI+XHJcbiAgICAgIDxkaXYgc3R5bGU9XCJmbGV4OjEgMSAzMCU7anVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O2FsaWduLWl0ZW1zOiBjZW50ZXI7IGFsaWduLWNvbnRlbnQ6IGNlbnRlclwiPlxyXG4gICAgICAgIDxhcHAtc3Byc3RhdHVzZGlzcGxheSAqbmdJZj1cIiFzY3JlZW5Yc1wiIFtzdGF0dXNNc2ddPVwic3RhdHVzTXNnXCIgW3N0YXR1c0FsZXJ0VHlwZV09XCJzdGF0dXNBbGVydFR5cGVcIiBbc3RhdHVzV2FpdGluZ109XCJzdGF0dXNXYWl0aW5nXCI+PC9hcHAtc3Byc3RhdHVzZGlzcGxheT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxhcHAtc3BydHJhbnNwb3J0IHN0eWxlPVwiZGlzcGxheTpmbGV4O2ZsZXg6MTAgMCAzMCU7anVzdGlmeS1jb250ZW50OiBjZW50ZXI7YWxpZ24taXRlbXM6IGNlbnRlcjsgYWxpZ24tY29udGVudDogY2VudGVyXCIgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCIgW2FjdGlvbnNdPVwidHJhbnNwb3J0QWN0aW9uc1wiIFtuYXZpZ2F0aW9uRW5hYmxlZF09XCIhaXRlbXMgfHwgaXRlbXMubGVuZ3RoKCk+MVwiPjwvYXBwLXNwcnRyYW5zcG9ydD5cclxuICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDtmbGV4OjEgMSAzMCU7ZmxleC1kaXJlY3Rpb246cm93O2p1c3RpZnktY29udGVudDogZmxleC1lbmQ7YWxpZ24taXRlbXM6IGNlbnRlcjsgYWxpZ24tY29udGVudDogY2VudGVyXCI+XHJcbiAgICAgICAgPGFwcC11cGxvYWRzdGF0dXMgKm5nSWY9XCIhc2NyZWVuWHMgJiYgZW5hYmxlVXBsb2FkUmVjb3JkaW5nc1wiICBjbGFzcz1cInJpY29udHJvbHNcIiAgW3ZhbHVlXT1cInVwbG9hZFByb2dyZXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RhdHVzXT1cInVwbG9hZFN0YXR1c1wiIFthd2FpdE5ld1VwbG9hZF09XCJwcm9jZXNzaW5nUmVjb3JkaW5nXCI+PC9hcHAtdXBsb2Fkc3RhdHVzPlxyXG4gICAgICAgIDxhcHAtd2FrZWxvY2tpbmRpY2F0b3IgKm5nSWY9XCIhc2NyZWVuWHNcIiBjbGFzcz1cInJpY29udHJvbHNcIiBbc2NyZWVuTG9ja2VkXT1cInNjcmVlbkxvY2tlZFwiPjwvYXBwLXdha2Vsb2NraW5kaWNhdG9yPlxyXG4gICAgICAgIDxhcHAtcmVhZHlzdGF0ZWluZGljYXRvciAqbmdJZj1cIiFzY3JlZW5Yc1wiIGNsYXNzPVwicmljb250cm9sc1wiIFtyZWFkeV09XCJkYXRhU2F2ZWQgJiYgIWlzQWN0aXZlKClcIj48L2FwcC1yZWFkeXN0YXRlaW5kaWNhdG9yPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYDpob3N0IHtcclxuICAgIGZsZXg6IDI7XHJcbiAgICBiYWNrZ3JvdW5kOiBsaWdodGdyZXk7XHJcbiAgICBkaXNwbGF5OiBmbGV4OyAvKiBWZXJ0aWNhbCBmbGV4IGNvbnRhaW5lcjogQm90dG9tIHRyYW5zcG9ydCBwYW5lbCwgYWJvdmUgcHJvbXB0aW5nIHBhbmVsICovXHJcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgbWFyZ2luOiAwO1xyXG4gICAgcGFkZGluZzogMDtcclxuICAgIG1pbi1oZWlnaHQ6IDBweDtcclxuXHJcbiAgICAgIC8qIFByZXZlbnRzIGhvcml6b250YWwgc2Nyb2xsIGJhciBvbiBzd2lwZSByaWdodCAqL1xyXG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIH1gLGAucmljb250cm9scyB7XHJcbiAgICAgICAgZGlzcGxheTpmbGV4O1xyXG4gICAgICAgIHBhZGRpbmc6IDRweDtcclxuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xyXG4gICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7YWxpZ24taXRlbXM6IGNlbnRlcjsgYWxpZ24tY29udGVudDogY2VudGVyO1xyXG4gICAgfWAsYC5kYXJrIHtcclxuICAgIGJhY2tncm91bmQ6IGRhcmtncmF5O1xyXG4gIH1gLGAuY29udHJvbHBhbmVsIHtcclxuICAgIGRpc3BsYXk6ZmxleDtcclxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcbiAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgbWFyZ2luOiAwO1xyXG4gICAgcGFkZGluZzogMjBweDtcclxuICAgIG1pbi1oZWlnaHQ6IG1pbi1jb250ZW50OyAvKiBpbXBvcnRhbnQgKi9cclxuICB9YCxgLmF1ZGlvU3RhdHVzRGlzcGxheXtcclxuICAgIGRpc3BsYXk6ZmxleDtcclxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcbiAgICBoZWlnaHQ6MTAwcHg7XHJcbiAgICBtaW4taGVpZ2h0OiAxMDBweDtcclxuICB9YCxgLmF1ZGlvU3RhdHVzRGlzcGxheVhze1xyXG4gICAgZGlzcGxheTpmbGV4O1xyXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgIGhlaWdodDoxMjVweDtcclxuICAgIG1pbi1oZWlnaHQ6IDEyNXB4O1xyXG4gIH1gXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2Vzc2lvbk1hbmFnZXIgZXh0ZW5kcyBCYXNpY1JlY29yZGVyIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCxPbkRlc3Ryb3ksIEF1ZGlvQ2FwdHVyZUxpc3RlbmVyLENodW5rQXVkaW9CdWZmZXJSZWNlaXZlciB7XHJcblxyXG4gIHByaXZhdGUgb2ZmbGluZUF1ZGlvQ29udGV4dDpPZmZsaW5lQXVkaW9Db250ZXh0fG51bGw9bnVsbDtcclxuXHJcbiAgZ2V0IHBlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQoKTogUGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldCB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQ7XHJcbiAgfVxyXG5cclxuICBzZXQgcGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldCh2YWx1ZTogUGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldCB8IG51bGwpIHtcclxuICAgIHRoaXMuX3BlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQgPSB2YWx1ZTtcclxuICAgIGlmKHRoaXMuYWMpIHtcclxuICAgICAgdGhpcy5hYy5wZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0ID0gdGhpcy5wZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgcHJvamVjdE5hbWU6c3RyaW5nfHVuZGVmaW5lZDtcclxuICBlbmFibGVVcGxvYWRSZWNvcmRpbmdzOiBib29sZWFuID0gdHJ1ZTtcclxuICBlbmFibGVEb3dubG9hZFJlY29yZGluZ3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzdGF0dXM6IFN0YXR1cyA9IFN0YXR1cy5CTE9DS0VEO1xyXG5cclxuICBAVmlld0NoaWxkKFByb21wdGluZywgeyBzdGF0aWM6IHRydWUgfSkgcHJvbXB0aW5nITogUHJvbXB0aW5nO1xyXG4gIEBWaWV3Q2hpbGQoTGV2ZWxCYXIsIHsgc3RhdGljOiB0cnVlIH0pIGxpdmVMZXZlbERpc3BsYXkhOiBMZXZlbEJhcjtcclxuXHJcbiAgQElucHV0KCkgZGF0YVNhdmVkPXRydWVcclxuXHJcbiAgc3RhcnRTdG9wU2lnbmFsU3RhdGUhOiBTdGFydFN0b3BTaWduYWxTdGF0ZTtcclxuXHJcbiAgcHJpdmF0ZSBwcmVSZWNUaW1lcklkOiBudW1iZXJ8bnVsbD1udWxsO1xyXG4gIHByaXZhdGUgcHJlUmVjVGltZXJSdW5uaW5nOiBib29sZWFufG51bGw9bnVsbDtcclxuICBwcml2YXRlIHBvc3REZWxheTpudW1iZXI9REVGQVVMVF9QT1NUX1JFQ19ERUxBWTtcclxuICBwcml2YXRlIHBvc3RSZWNUaW1lcklkOiBudW1iZXJ8bnVsbD1udWxsO1xyXG4gIHByaXZhdGUgcG9zdFJlY1RpbWVyUnVubmluZzogYm9vbGVhbnxudWxsPW51bGw7XHJcbiAgLy9wcml2YXRlIG1heFJlY1RpbWVyUnVubmluZzogYm9vbGVhbnxudWxsPW51bGw7XHJcbiAgcHJpdmF0ZSBub25SZWNvcmRpbmdEdXJhdGlvblRpbWVySWQ6IG51bWJlcnxudWxsPW51bGw7XHJcbiAgcHJpdmF0ZSBub25SZWNvcmRpbmdEdXJhdGlvblRpbWVyUnVubmluZzogYm9vbGVhbj1mYWxzZTtcclxuXHJcbiAgYXVkaW86IGFueTtcclxuICBfc2NyaXB0ITogU2NyaXB0O1xyXG4gIHByaXZhdGUgX3Byb21wdEluZGV4PTA7XHJcbiAgcHJpdmF0ZSBzZWN0aW9uITogU2VjdGlvbjtcclxuICBncm91cCE6IEdyb3VwO1xyXG4gIHByb21wdEl0ZW0hOlByb21wdEl0ZW07XHJcbiAgc2hvd1Byb21wdCE6IGJvb2xlYW47XHJcblxyXG4gIC8vIGluZGV4IG9mIGN1cnJlbnQgc2VjdGlvblxyXG4gIHNlY3RJZHghOiBudW1iZXI7XHJcbiAgLy8gaW5kZXggb2YgY3VycmVudCBncm91cCBpbiBzZWN0aW9uXHJcbiAgZ3JvdXBJZHhJblNlY3Rpb24hOiBudW1iZXI7XHJcbiAgLy8gaW5kZXggb2YgY3VycmVudCBwcm9tcHQgaXRlbSBpbiBncm91cFxyXG4gIHByb21wdEl0ZW1JZHhJbkdyb3VwITogbnVtYmVyO1xyXG5cclxuICBwcml2YXRlIGF1dG9yZWNvcmRpbmchOiBib29sZWFuO1xyXG5cclxuICBpdGVtczogU3BySXRlbXNDYWNoZXxudWxsPW51bGw7XHJcbiAgLy9zZWxlY3RlZEl0ZW1JZHg6IG51bWJlcjtcclxuICBwcml2YXRlIF9kaXNwbGF5UmVjRmlsZTogU3ByUmVjb3JkaW5nRmlsZSB8IG51bGw9bnVsbDtcclxuICBwcml2YXRlIGRpc3BsYXlSZWNGaWxlVmVyc2lvbiE6IG51bWJlcjtcclxuXHJcbiAgcHJvbXB0SXRlbUNvdW50ITogbnVtYmVyO1xyXG5cclxuICBzaG93U2Vzc2lvbkNvbXBsZXRlTWVzc2FnZT10cnVlO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgYnBvOkJyZWFrcG9pbnRPYnNlcnZlcixcclxuICAgICAgICAgICAgICBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgICAgICAgICAgIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgICAgICAgICAgIHNlc3Npb25TZXJ2aWNlOlNlc3Npb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgcmVjRmlsZVNlcnZpY2U6UmVjb3JkaW5nU2VydmljZSxcclxuICAgICAgICAgICAgICB1cGxvYWRlcjogU3BlZWNoUmVjb3JkZXJVcGxvYWRlcixcclxuICAgICAgICAgICAgICBASW5qZWN0KFNQRUVDSFJFQ09SREVSX0NPTkZJRykgY29uZmlnPzogU3BlZWNoUmVjb3JkZXJDb25maWcpIHtcclxuICAgIHN1cGVyKGJwbyxjaGFuZ2VEZXRlY3RvclJlZixkaWFsb2csc2Vzc2lvblNlcnZpY2UsdXBsb2FkZXIsY29uZmlnKTtcclxuICAgIHRoaXMuc3RhdHVzID0gU3RhdHVzLklETEU7XHJcbiAgICB0aGlzLmF1ZGlvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F1ZGlvJyk7XHJcbiAgICBpZiAodGhpcy5jb25maWcgJiYgdGhpcy5jb25maWcuZW5hYmxlVXBsb2FkUmVjb3JkaW5ncyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuZW5hYmxlVXBsb2FkUmVjb3JkaW5ncyA9IHRoaXMuY29uZmlnLmVuYWJsZVVwbG9hZFJlY29yZGluZ3M7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jb25maWcgJiYgdGhpcy5jb25maWcuZW5hYmxlRG93bmxvYWRSZWNvcmRpbmdzICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5lbmFibGVEb3dubG9hZFJlY29yZGluZ3MgPSB0aGlzLmNvbmZpZy5lbmFibGVEb3dubG9hZFJlY29yZGluZ3M7XHJcbiAgICB9XHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5zdHJlYW1MZXZlbE1lYXN1cmUubGV2ZWxMaXN0ZW5lciA9IHRoaXMubGl2ZUxldmVsRGlzcGxheTtcclxuICAgIHRoaXMuc3RyZWFtTGV2ZWxNZWFzdXJlLnBlYWtMZXZlbExpc3RlbmVyPShwZWFrTHZsSW5EYik9PntcclxuICAgICAgdGhpcy5wZWFrTGV2ZWxJbkRiPXBlYWtMdmxJbkRiO1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgLy9jb25zb2xlLmRlYnVnKFwiQ29tIGRlc3Ryb3ksIGRpc2FibGUgd2FrZSBsb2NrLlwiKVxyXG4gICAgICB0aGlzLmRpc2FibGVXYWtlTG9ja0NvbmQoKTtcclxuICAgICAgIHRoaXMuZGVzdHJveWVkPXRydWU7XHJcbiAgICAgICAvLyBUT0RPIHN0b3AgY2FwdHVyZSAvcGxheWJhY2tcclxuICAgIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0KCkge1xyXG4gICAgdGhpcy5zZWN0SWR4ID0gMDtcclxuICAgIHRoaXMuZ3JvdXBJZHhJblNlY3Rpb24gPSAwO1xyXG4gICAgdGhpcy5wcm9tcHRJdGVtSWR4SW5Hcm91cCA9IDA7XHJcbiAgICB0aGlzLmF1dG9yZWNvcmRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdGFydEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RvcEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMubmV4dEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RvcE5vbnJlY29yZGluZ0FjdGlvbi5kaXNhYmxlZD10cnVlO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnBhdXNlQWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBsZXQgY29udGV4dDpBdWRpb0NvbnRleHR8bnVsbD1udWxsO1xyXG4gICAgLy8gdHJ5IHtcclxuICAgIC8vICAgY29udGV4dCA9IEF1ZGlvQ29udGV4dFByb3ZpZGVyLmF1ZGlvQ29udGV4dEluc3RhbmNlKCk7XHJcbiAgICAvLyB9IGNhdGNoIChlcnIpIHtcclxuICAgIC8vICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuRVJST1I7XHJcbiAgICAvLyAgIGxldCBlcnJNc2cgPSAnVW5rbm93biBlcnJvcic7XHJcbiAgICAvLyAgIGlmKGVyciBpbnN0YW5jZW9mIEVycm9yKXtcclxuICAgIC8vICAgICBlcnJNc2c9ZXJyLm1lc3NhZ2U7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vICAgdGhpcy5zdGF0dXNNc2cgPSAnRVJST1I6ICcgKyBlcnJNc2c7XHJcbiAgICAvLyAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJztcclxuICAgIC8vICAgdGhpcy5kaWFsb2cub3BlbihNZXNzYWdlRGlhbG9nLCB7XHJcbiAgICAvLyAgICAgZGF0YToge1xyXG4gICAgLy8gICAgICAgdHlwZTogJ2Vycm9yJyxcclxuICAgIC8vICAgICAgIHRpdGxlOiAnRXJyb3InLFxyXG4gICAgLy8gICAgICAgbXNnOiBlcnJNc2csXHJcbiAgICAvLyAgICAgICBhZHZpY2U6ICdQbGVhc2UgdXNlIGEgc3VwcG9ydGVkIGJyb3dzZXIuJyxcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH0pO1xyXG4gICAgLy8gICByZXR1cm47XHJcbiAgICAvLyB9XHJcbiAgICAvLyBpZihjb250ZXh0KSB7XHJcbiAgICAvLyAgIGNvbnNvbGUuaW5mbyhcIlN0YXRlIG9mIGF1ZGlvIGNvbnRleHQ6IFwiICsgY29udGV4dC5zdGF0ZSlcclxuICAgIC8vIH1lbHNle1xyXG4gICAgLy8gICBjb25zb2xlLmluZm8oXCJObyBhdWRpbyBjb250ZXh0IGF2YWlsYWJsZSFcIik7XHJcbiAgICAvLyB9XHJcbiAgICAvLyBpZiAoIWNvbnRleHQgfHwgIW5hdmlnYXRvci5tZWRpYURldmljZXMpIHtcclxuICAgIC8vICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuRVJST1I7XHJcbiAgICAvLyAgIGxldCBlcnJNc2cgPSAnQnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IE1lZGlhIHN0cmVhbXMhJztcclxuICAgIC8vICAgdGhpcy5zdGF0dXNNc2cgPSAnRVJST1I6ICcgKyBlcnJNc2c7XHJcbiAgICAvLyAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJztcclxuICAgIC8vICAgdGhpcy5kaWFsb2cub3BlbihNZXNzYWdlRGlhbG9nLCB7XHJcbiAgICAvLyAgICAgZGF0YToge1xyXG4gICAgLy8gICAgICAgdHlwZTogJ2Vycm9yJyxcclxuICAgIC8vICAgICAgIHRpdGxlOiAnRXJyb3InLFxyXG4gICAgLy8gICAgICAgbXNnOiBlcnJNc2csXHJcbiAgICAvLyAgICAgICBhZHZpY2U6ICdQbGVhc2UgdXNlIGEgc3VwcG9ydGVkIGJyb3dzZXIuJyxcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH0pO1xyXG4gICAgLy8gICByZXR1cm47XHJcbiAgICAvLyB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFjID0gbmV3IEF1ZGlvQ2FwdHVyZSgpO1xyXG4gICAgICBpZiAodGhpcy5hYykge1xyXG4gICAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdGFydEFjdGlvbi5vbkFjdGlvbiA9ICgpID0+IHRoaXMuc3RhcnRJdGVtKCk7XHJcbiAgICAgICAgdGhpcy5hYy5saXN0ZW5lciA9IHRoaXM7XHJcblxyXG4gICAgICAgIHRoaXMuY29uZmlndXJlU3RyZWFtQ2FwdHVyZVN0cmVhbSgpO1xyXG5cclxuICAgICAgICAvLyBEb24ndCBsaXN0IHRoZSBkZXZpY2VzIGhlcmUuIElmIHdlIGRvIG5vdCBoYXZlIGF1ZGlvIHBlcm1pc3Npb25zIHdlIG9ubHkgZ2V0IGFub255bWl6ZWQgZGV2aWNlcyB3aXRob3V0IGxhYmVscy5cclxuICAgICAgICAvL3RoaXMuYWMubGlzdERldmljZXMoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RhcnRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIGxldCBlcnJNc2cgPSAnQnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IE1lZGlhL0F1ZGlvIEFQSSEnO1xyXG4gICAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ0VSUk9SOiAnICsgZXJyTXNnO1xyXG4gICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJztcclxuICAgICAgICB0aGlzLmRpYWxvZy5vcGVuKE1lc3NhZ2VEaWFsb2csIHtcclxuICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcclxuICAgICAgICAgICAgdGl0bGU6ICdFcnJvcicsXHJcbiAgICAgICAgICAgIG1zZzogZXJyTXNnLFxyXG4gICAgICAgICAgICBhZHZpY2U6ICdQbGVhc2UgdXNlIGEgc3VwcG9ydGVkIGJyb3dzZXIuJyxcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BBY3Rpb24ub25BY3Rpb24gPSAoKSA9PiB0aGlzLnN0b3BJdGVtKCk7XHJcbiAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5uZXh0QWN0aW9uLm9uQWN0aW9uID0gKCkgPT4gdGhpcy5zdG9wSXRlbSgpO1xyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMucGF1c2VBY3Rpb24ub25BY3Rpb24gPSAoKSA9PiB0aGlzLnBhdXNlSXRlbSgpO1xyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuZndkQWN0aW9uLm9uQWN0aW9uID0gKCkgPT4gdGhpcy5uZXh0SXRlbSgpO1xyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RvcE5vbnJlY29yZGluZ0FjdGlvbi5vbkFjdGlvbj0oKT0+dGhpcy5zdG9wTm9ucmVjb3JkaW5nKCk7XHJcbiAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5md2ROZXh0QWN0aW9uLm9uQWN0aW9uID0gKCkgPT4gdGhpcy5uZXh0VW5yZWNvcmRlZEl0ZW0oKTtcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLmJ3ZEFjdGlvbi5vbkFjdGlvbiA9ICgpID0+IHRoaXMucHJldkl0ZW0oKTtcclxuICAgICAgdGhpcy5wbGF5U3RhcnRBY3Rpb24ub25BY3Rpb24gPSAoKSA9PiB0aGlzLmNvbnRyb2xBdWRpb1BsYXllcj8uc3RhcnQoKTtcclxuXHJcbiAgICB0aGlzLnN0YXJ0U3RvcFNpZ25hbFN0YXRlID0gU3RhcnRTdG9wU2lnbmFsU3RhdGUuT0ZGO1xyXG5cclxufVxyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5cHJlc3MnLCBbJyRldmVudCddKVxyXG4gIG9uS2V5UHJlc3Moa2U6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGlmIChrZS5rZXkgPT0gJyAnKSB7XHJcbiAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdGFydEFjdGlvbi5wZXJmb3JtKCk7XHJcbiAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5uZXh0QWN0aW9uLnBlcmZvcm0oKTtcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BOb25yZWNvcmRpbmdBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleWRvd24nLCBbJyRldmVudCddKVxyXG4gIG9uS2V5RG93bihrZTogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKGtlLmtleSA9PSAnICcpIHtcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKGtlLmtleSA9PSAncCcpIHtcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnBhdXNlQWN0aW9uLnBlcmZvcm0oKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoa2Uua2V5ID09ICdFc2NhcGUnKSB7XHJcbiAgICAgIGlmKCF0aGlzLmF1ZGlvU2lnbmFsQ29sbGFwc2VkKXtcclxuICAgICAgICB0aGlzLmF1ZGlvU2lnbmFsQ29sbGFwc2VkPXRydWU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMucGF1c2VBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChrZS5rZXkgPT0gJ01lZGlhUGxheVBhdXNlJykge1xyXG4gICAgICB0aGlzLnBsYXlTdGFydEFjdGlvbi5wZXJmb3JtKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoa2Uua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLmZ3ZEFjdGlvbi5wZXJmb3JtKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoa2Uua2V5ID09PSAnQXJyb3dMZWZ0Jykge1xyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuYndkQWN0aW9uLnBlcmZvcm0oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZVdha2VMb2NrKGRhdGFTYXZlZDpib29sZWFuPXRoaXMuZGF0YVNhdmVkKXtcclxuICAgIC8vY29uc29sZS5kZWJ1ZyhcIlVwZGF0ZSB3YWtlIGxvY2s6IGRhdGFTYXZlZDogXCIrZGF0YVNhdmVkK1wiLCBub3QgYWN0aXZlOiBcIishIHRoaXMuaXNBY3RpdmUoKSlcclxuICAgIGlmKGRhdGFTYXZlZCAmJiAhIHRoaXMuaXNBY3RpdmUoKSl7XHJcbiAgICAgIHRoaXMuZGlzYWJsZVdha2VMb2NrQ29uZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvZ3Jlc3NQZXJjZW50VmFsdWUoKTpudW1iZXIge1xyXG4gICAgbGV0IHY9MTAwO1xyXG4gICAgaWYodGhpcy5pdGVtcykge1xyXG4gICAgICB2PXRoaXMucHJvbXB0SW5kZXggKiAxMDAgLyAodGhpcy5pdGVtcy5sZW5ndGgoKSAtIDEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfVxyXG4gIGlzVGVzdFNlc3Npb24oKTpib29sZWFuIHtcclxuICAgIHJldHVybiAoKHRoaXMuX3Nlc3Npb24hPW51bGwpICYmICh0aGlzLl9zZXNzaW9uLnR5cGUgPT09ICdURVNUJyB8fCB0aGlzLl9zZXNzaW9uLnR5cGU9PT0nVEVTVF9ERUZfQScgfHwgdGhpcy5fc2Vzc2lvbi50eXBlID09PSAnU0lOVVNfVEVTVCcpKTtcclxuICB9XHJcblxyXG4gIGlzRGVmYXVsdEF1ZGlvVGVzdFNlc3Npb24oKTpib29sZWFuIHtcclxuICAgIHJldHVybiAoKHRoaXMuX3Nlc3Npb24hPW51bGwpICYmICh0aGlzLl9zZXNzaW9uLnR5cGU9PT0nVEVTVF9ERUZfQScpKTtcclxuICB9XHJcblxyXG4gIGlzRGVmYXVsdEF1ZGlvVGVzdFNlc3Npb25PdmVyd3JpdGluZ1Byb2plY3RSZXF1aXJlbWVudHMoKTpib29sZWFuIHtcclxuICAgIHJldHVybiAoKHRoaXMuX3Nlc3Npb24hPW51bGwpICYmICh0aGlzLl9zZXNzaW9uLnR5cGU9PT0nVEVTVF9ERUZfQScpICYmICh0aGlzLmF1ZGlvRGV2aWNlcyE9bnVsbCkgJiYgdGhpcy5hdWRpb0RldmljZXMubGVuZ3RoPjApXHJcbiAgfVxyXG5cclxuICBzZXQgY29udHJvbEF1ZGlvUGxheWVyKGNvbnRyb2xBdWRpb1BsYXllcjogQXVkaW9QbGF5ZXJ8bnVsbCkge1xyXG4gICAgdGhpcy5fY29udHJvbEF1ZGlvUGxheWVyPWNvbnRyb2xBdWRpb1BsYXllcjtcclxuICAgIGlmICh0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIpIHtcclxuICAgICAgdGhpcy5fY29udHJvbEF1ZGlvUGxheWVyLmxpc3RlbmVyID0gdGhpcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBjb250cm9sQXVkaW9QbGF5ZXIoKTogQXVkaW9QbGF5ZXJ8bnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29udHJvbEF1ZGlvUGxheWVyO1xyXG4gIH1cclxuXHJcbiAgc2V0IHNjcmlwdChzY3JpcHQ6IGFueSkge1xyXG4gICAgdGhpcy5fc2NyaXB0ID0gc2NyaXB0O1xyXG4gICAgdGhpcy5sb2FkU2NyaXB0KCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoZTogQXVkaW9QbGF5ZXJFdmVudCkge1xyXG4gICAgaWYgKGUudHlwZSA9PSBFdmVudFR5cGUuU1RBUlRFRCkge1xyXG4gICAgICB0aGlzLnBsYXlTdGFydEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMudXBkYXRlVGltZXJJZCA9IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgICAgLy90aGlzLmF1ZGlvU2lnbmFsLnBsYXlGcmFtZVBvc2l0aW9uID0gdGhpcy5hcC5wbGF5UG9zaXRpb25GcmFtZXM7XHJcbiAgICAgIH0sIDUwKTtcclxuICAgIH0gZWxzZSBpZiAoZS50eXBlID09IEV2ZW50VHlwZS5TVE9QUEVEIHx8IGUudHlwZSA9PSBFdmVudFR5cGUuRU5ERUQpIHtcclxuICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy51cGRhdGVUaW1lcklkKTtcclxuICAgICAgLy8gdGhpcy5hdWRpb1NpZ25hbC5wbGF5RnJhbWVQb3NpdGlvbiA9IHRoaXMuYXAucGxheVBvc2l0aW9uRnJhbWVzO1xyXG4gICAgICB0aGlzLnBsYXlTdGFydEFjdGlvbi5kaXNhYmxlZCA9ICghKHRoaXMuZGlzcGxheVJlY0ZpbGUpKTtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgcHJvbXB0SW5kZXgoKTpudW1iZXJ7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJvbXB0SW5kZXg7XHJcbiAgfVxyXG5cclxuICBzZXQgcHJvbXB0SW5kZXgocHJvbXB0SW5kZXg6bnVtYmVyKXtcclxuICAgIGlmKHByb21wdEluZGV4PDAgfHwgcHJvbXB0SW5kZXg+PXRoaXMucHJvbXB0SXRlbUNvdW50KXtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUHJvbXB0IGluZGV4IG91dCBvZiByYW5nZVwiKVxyXG4gICAgfVxyXG4gICAgbGV0IGkgPSAwO1xyXG4gICAgbGV0IHNlY3Rpb25zPXRoaXMuX3NjcmlwdC5zZWN0aW9ucztcclxuICAgIGxldCBmb3VuZD1mYWxzZTtcclxuICAgIGZvciAobGV0IHNpID0gMDsgc2kgPCBzZWN0aW9ucy5sZW5ndGggJiYgIWZvdW5kOyBzaSsrKSB7XHJcbiAgICAgIGxldCBzZWN0aW9uID0gc2VjdGlvbnNbc2ldO1xyXG4gICAgICBsZXQgZ3MgPSBzZWN0aW9uLl9zaHVmZmxlZEdyb3VwcztcclxuICAgICAgZm9yIChsZXQgZ2kgPSAwOyBnaSA8IGdzLmxlbmd0aDsgZ2krKykge1xyXG4gICAgICAgIGxldCBwaXM9Z3NbZ2ldLl9zaHVmZmxlZFByb21wdEl0ZW1zO1xyXG5cclxuICAgICAgICBsZXQgcGlzU2l6ZSA9IHBpcy5sZW5ndGg7XHJcbiAgICAgICAgaWYgKHByb21wdEluZGV4IDwgaSArIHBpc1NpemUpIHtcclxuICAgICAgICAgIHRoaXMuc2VjdElkeCA9IHNpO1xyXG4gICAgICAgICAgdGhpcy5ncm91cElkeEluU2VjdGlvbj1naTtcclxuICAgICAgICAgIHRoaXMucHJvbXB0SXRlbUlkeEluR3JvdXAgPSBwcm9tcHRJbmRleCAtIGk7XHJcbiAgICAgICAgICBmb3VuZD10cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGkgKz0gcGlzU2l6ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmKGZvdW5kKXtcclxuICAgICAgdGhpcy5fcHJvbXB0SW5kZXg9cHJvbXB0SW5kZXg7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW50ZXJuYWwgZXJyb3I6IFByb21wdCBpbmRleCBub3QgZm91bmRcIilcclxuICAgIH1cclxuICAgIHRoaXMua2VlcExpdmVMZXZlbD1mYWxzZTtcclxuICAgIHRoaXMuYXBwbHlJdGVtKCk7XHJcbiAgfVxyXG5cclxuICBpdGVtU2VsZWN0KGl0ZW1JZHg6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuc3RhdHVzID09PSBTdGF0dXMuSURMRSkge1xyXG4gICAgICB0aGlzLnByb21wdEluZGV4PWl0ZW1JZHg7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhclByZVJlY1RpbWVyKCkge1xyXG4gICAgaWYgKHRoaXMucHJlUmVjVGltZXJSdW5uaW5nKSB7XHJcbiAgICAgIGlmICh0aGlzLnByZVJlY1RpbWVySWQpIHtcclxuICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMucHJlUmVjVGltZXJJZCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wcmVSZWNUaW1lclJ1bm5pbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJQb3N0UmVjVGltZXIoKXtcclxuICAgIGlmICh0aGlzLnBvc3RSZWNUaW1lclJ1bm5pbmcpIHtcclxuICAgICAgaWYgKHRoaXMucG9zdFJlY1RpbWVySWQpIHtcclxuICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMucG9zdFJlY1RpbWVySWQpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucG9zdFJlY1RpbWVyUnVubmluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhck1heFJlY1RpbWVyKCl7XHJcbiAgICBpZiAodGhpcy5tYXhSZWNUaW1lclJ1bm5pbmcpIHtcclxuICAgICAgaWYgKHRoaXMubWF4UmVjVGltZXJJZCkge1xyXG4gICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5tYXhSZWNUaW1lcklkKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1heFJlY1RpbWVyUnVubmluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhck5vblJlY29yZGluZ0R1cmF0aW9uVGltZXIoKXtcclxuICAgIGlmICh0aGlzLm5vblJlY29yZGluZ0R1cmF0aW9uVGltZXJSdW5uaW5nKSB7XHJcbiAgICAgIGlmICh0aGlzLm5vblJlY29yZGluZ0R1cmF0aW9uVGltZXJJZCkge1xyXG4gICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5ub25SZWNvcmRpbmdEdXJhdGlvblRpbWVySWQpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubm9uUmVjb3JkaW5nRHVyYXRpb25UaW1lclJ1bm5pbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXJ0SXRlbSgpIHtcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5md2RBY3Rpb24uZGlzYWJsZWQgPSB0cnVlXHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuZndkTmV4dEFjdGlvbi5kaXNhYmxlZCA9IHRydWVcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5id2RBY3Rpb24uZGlzYWJsZWQgPSB0cnVlXHJcbiAgICBjb25zdCBpc05vbnJlY29yZGluZz0odGhpcy5wcm9tcHRJdGVtLnR5cGU9PT0nbm9ucmVjb3JkaW5nJyk7XHJcbiAgICBpZihpc05vbnJlY29yZGluZyl7XHJcbiAgICAgIHRoaXMuc3RhdHVzID0gU3RhdHVzLklETEU7XHJcblxyXG4gICAgICB0aGlzLnVwZGF0ZURpc3BsYXlSZWNGaWxlKG51bGwpO1xyXG4gICAgICB0aGlzLmRpc3BsYXlSZWNGaWxlVmVyc2lvbiA9IDA7XHJcbiAgICAgIHRoaXMuZGlzcGxheUF1ZGlvQ2xpcCA9IG51bGw7XHJcbiAgICAgIHRoaXMubGl2ZUxldmVsRGlzcGxheS5yZXNldCh0cnVlKTtcclxuICAgICAgLy8gSGlkZSBsb2FkaW5nIGhpbnQgb24gbGl2ZWxldmVsIGRpc3BsYXlcclxuICAgICAgdGhpcy5saXZlTGV2ZWxEaXNwbGF5U3RhdGUgPSBMaXZlTGV2ZWxTdGF0ZS5SRUFEWTtcclxuICAgICAgdGhpcy5zaG93UmVjb3JkaW5nKCk7XHJcbiAgICAgIGlmICh0aGlzLnNlY3Rpb24ubW9kZSA9PT0gJ0FVVE9SRUNPUkRJTkcnKSB7XHJcbiAgICAgICAgdGhpcy5hdXRvcmVjb3JkaW5nID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBuckR1cmF0aW9uPXRoaXMucHJvbXB0SXRlbS5kdXJhdGlvbjtcclxuICAgICAgaWYodGhpcy5hdXRvcmVjb3JkaW5nICYmIG5yRHVyYXRpb24hPT11bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLm5vblJlY29yZGluZ0R1cmF0aW9uVGltZXJJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMubm9uUmVjb3JkaW5nRHVyYXRpb25UaW1lclJ1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdG9wTm9ucmVjb3JkaW5nQWN0aW9uLmRpc2FibGVkPXRydWU7XHJcbiAgICAgICAgICB0aGlzLnN0YXR1cyA9IFN0YXR1cy5TVE9QUElOR19TVE9QO1xyXG4gICAgICAgICAgdGhpcy5jb250aW51ZVNlc3Npb24oKTtcclxuICAgICAgICB9LCBuckR1cmF0aW9uKTtcclxuICAgICAgICB0aGlzLm5vblJlY29yZGluZ0R1cmF0aW9uVGltZXJSdW5uaW5nID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnN0YXR1cz1TdGF0dXMuTk9OX1JFQ09SRElOR19XQUlUO1xyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RvcE5vbnJlY29yZGluZ0FjdGlvbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgfWVsc2Uge1xyXG4gICAgICB0aGlzLnN0YXR1cyA9IFN0YXR1cy5TVEFSVElORztcclxuICAgICAgc3VwZXIuc3RhcnRJdGVtKCk7XHJcbiAgICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuSURMRTtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy51cGRhdGVEaXNwbGF5UmVjRmlsZShudWxsKTtcclxuICAgICAgdGhpcy5kaXNwbGF5UmVjRmlsZVZlcnNpb24gPSAwO1xyXG4gICAgICB0aGlzLmRpc3BsYXlBdWRpb0NsaXAgPSBudWxsO1xyXG4gICAgICB0aGlzLmxpdmVMZXZlbERpc3BsYXkucmVzZXQodHJ1ZSk7XHJcbiAgICAgIC8vIEhpZGUgbG9hZGluZyBoaW50IG9uIGxpdmVsZXZlbCBkaXNwbGF5XHJcbiAgICAgIHRoaXMubGl2ZUxldmVsRGlzcGxheVN0YXRlID0gTGl2ZUxldmVsU3RhdGUuUkVBRFk7XHJcbiAgICAgIHRoaXMuc2hvd1JlY29yZGluZygpO1xyXG4gICAgICBpZiAodGhpcy5zZWN0aW9uLm1vZGUgPT09ICdBVVRPUkVDT1JESU5HJykge1xyXG4gICAgICAgIHRoaXMuYXV0b3JlY29yZGluZyA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc3RhcnRDYXB0dXJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBsb2FkU2NyaXB0KCkge1xyXG4gICAgdGhpcy5wcm9tcHRJdGVtQ291bnQgPSAwO1xyXG5cclxuICAgIHRoaXMuaXRlbXMgPSBuZXcgU3BySXRlbXNDYWNoZSgpO1xyXG4gICAgbGV0IGxuID0gMDtcclxuXHJcbiAgICAvL1RPRE8gcmFuZG9taXplIG5vdCBzdXBwb3J0ZWRcclxuICAgIGZvciAobGV0IHNpID0gMDsgc2kgPCB0aGlzLl9zY3JpcHQuc2VjdGlvbnMubGVuZ3RoOyBzaSsrKSB7XHJcbiAgICAgIGxldCBzZWN0aW9uID0gdGhpcy5fc2NyaXB0LnNlY3Rpb25zW3NpXTtcclxuICAgICAgbGV0IGdzID0gc2VjdGlvbi5fc2h1ZmZsZWRHcm91cHM7XHJcbiAgICAgIGZvcihsZXQgZ2k9MDtnaTxncy5sZW5ndGg7Z2krKykge1xyXG5cclxuICAgICAgICAgIGxldCBwaXMgPSBnc1tnaV0uX3NodWZmbGVkUHJvbXB0SXRlbXM7XHJcblxyXG4gICAgICAgICAgbGV0IHBpc0xlbiA9IHBpcy5sZW5ndGg7XHJcbiAgICAgICAgICB0aGlzLnByb21wdEl0ZW1Db3VudCArPSBwaXNMZW47XHJcbiAgICAgICAgICBmb3IgKGxldCBwaVNlY3RJZHggPSAwOyBwaVNlY3RJZHggPCBwaXNMZW47IHBpU2VjdElkeCsrKSB7XHJcbiAgICAgICAgICAgIGxldCBwaSA9IHBpc1twaVNlY3RJZHhdO1xyXG4gICAgICAgICAgICBsZXQgcHJvbXB0QXNTdHIgPSBQcm9tcHRpdGVtVXRpbC50b1BsYWluVGV4dFN0cmluZyhwaSk7XHJcblxyXG4gICAgICAgICAgICBsZXQgaXQgPSBuZXcgSXRlbShwcm9tcHRBc1N0ciwgc2VjdGlvbi50cmFpbmluZywoIXBpLnR5cGUgfHwgcGkudHlwZT09PSdyZWNvcmRpbmcnKSk7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMuYWRkSXRlbShpdCk7XHJcbiAgICAgICAgICAgIGxuKys7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb21wdEluZGV4QnlJdGVtY29kZShpdGVtY29kZTpzdHJpbmcpOm51bWJlcnxudWxse1xyXG4gICAgbGV0IHBpeCA9IDA7XHJcblxyXG4gICAgZm9yIChsZXQgc2kgPSAwOyBzaSA8IHRoaXMuX3NjcmlwdC5zZWN0aW9ucy5sZW5ndGg7IHNpKyspIHtcclxuICAgICAgbGV0IHNlY3Rpb24gPSB0aGlzLl9zY3JpcHQuc2VjdGlvbnNbc2ldO1xyXG4gICAgICBsZXQgZ3MgPSBzZWN0aW9uLl9zaHVmZmxlZEdyb3VwcztcclxuICAgICAgZm9yKGxldCBnaT0wO2dpPGdzLmxlbmd0aDtnaSsrKSB7XHJcbiAgICAgICAgbGV0IHBpcz1nc1tnaV0uX3NodWZmbGVkUHJvbXB0SXRlbXM7XHJcbiAgICAgICAgbGV0IHBpc0xlbiA9IHBpcy5sZW5ndGg7XHJcbiAgICAgICAgZm9yIChsZXQgcGlTZWN0SWR4ID0gMDsgcGlTZWN0SWR4IDwgcGlzTGVuOyBwaVNlY3RJZHgrKykge1xyXG4gICAgICAgICAgbGV0IHBpID0gcGlzW3BpU2VjdElkeF07XHJcbiAgICAgICAgICBsZXQgaWM9cGkuaXRlbWNvZGU7XHJcbiAgICAgICAgICBpZihpYyA9PT0gaXRlbWNvZGUpe1xyXG4gICAgICAgICAgICByZXR1cm4gcGl4O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcGl4Kys7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGNsZWFyUHJvbXB0KCkge1xyXG4gICAgLy90aGlzLnByb21wdGluZy5wcm9tcHRDb250YWluZXIucHJvbXB0ZXIucHJvbXB0VGV4dD0nJztcclxuICAgIC8vdGhpcy5tZWRpYWl0ZW0gPSBudWxsO1xyXG4gICAgdGhpcy5zaG93UHJvbXB0ID0gZmFsc2U7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKVxyXG4gIH1cclxuXHJcbiAgYXBwbHlQcm9tcHQoKSB7XHJcbiAgICAvL3RoaXMucHJvbXB0aW5nLnByb21wdENvbnRhaW5lci5wcm9tcHRlci5wcm9tcHRUZXh0PXRoaXMucHJvbXB0VW5pdC5tZWRpYWl0ZW1zWzBdLnRleHQ7XHJcbiAgICAvL3RoaXMucHJvbXB0VGV4dCA9IHRoaXMucHJvbXB0VW5pdC5tZWRpYWl0ZW1zWzBdLnRleHQ7XHJcbiAgICAvL3RoaXMubWVkaWFpdGVtPXRoaXMucHJvbXB0VW5pdC5tZWRpYWl0ZW1zWzBdO1xyXG4gICAgdGhpcy5zaG93UHJvbXB0ID0gdHJ1ZTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgfVxyXG5cclxuICBkb3dubG9hZFJlY29yZGluZygpIHtcclxuICAgIGlmICh0aGlzLmRpc3BsYXlSZWNGaWxlKSB7XHJcbiAgICAgIGxldCBhZGg6IEF1ZGlvRGF0YUhvbGRlciB8IG51bGwgPSB0aGlzLmRpc3BsYXlSZWNGaWxlLmF1ZGlvRGF0YUhvbGRlcjtcclxuICAgICAgbGV0IGFzOiBBdWRpb1NvdXJjZXxudWxsPW51bGw7XHJcbiAgICAgIGlmKGFkaCl7XHJcbiAgICAgICAgYXM9YWRoLmF1ZGlvU291cmNlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHd3ID0gbmV3IFdhdldyaXRlcih0aGlzLl9jbGllbnRNZWRpYVN0b3JhZ2VGb3JtYXQ/LmF1ZGlvRW5jb2Rpbmc9PT1BdWRpb1N0b3JhZ2VGb3JtYXRFbmNvZGluZy5QQ01fRkxPQVQsdGhpcy5fY2xpZW50TWVkaWFTdG9yYWdlRm9ybWF0Py5hdWRpb1BDTXNhbXBsZVNpemVJbkJpdHMpO1xyXG4gICAgICBpZihhcyBpbnN0YW5jZW9mIEF1ZGlvQnVmZmVyU291cmNlKSB7XHJcbiAgICAgICAgd3cud3JpdGVBc3luYyhhcy5hdWRpb0J1ZmZlciwgKHdhdkZpbGUpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbd2F2RmlsZV0sIHt0eXBlOiAnYXVkaW8vd2F2J30pO1xyXG4gICAgICAgICAgY29uc3QgcmZVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGRhdGFEbmxMbmsgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgICAgIC8vZGF0YURubExuay5uYW1lID0gJ1JlY29yZGluZyc7XHJcbiAgICAgICAgICBkYXRhRG5sTG5rLmhyZWYgPSByZlVybDtcclxuXHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGRvY3VtZW50LmJvZHksIGRhdGFEbmxMbmspO1xyXG5cclxuICAgICAgICAgIC8vIGRvd25sb2FkIHByb3BlcnR5IG5vdCB5ZXQgaW4gVFMgZGVmXHJcbiAgICAgICAgICBpZiAodGhpcy5kaXNwbGF5UmVjRmlsZSkge1xyXG4gICAgICAgICAgICBsZXQgZm4gPSB0aGlzLmRpc3BsYXlSZWNGaWxlLmZpbGVuYW1lU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGZuICs9ICdfJyArIHRoaXMuZGlzcGxheVJlY0ZpbGVWZXJzaW9uO1xyXG4gICAgICAgICAgICBmbiArPSAnLndhdic7XHJcbiAgICAgICAgICAgIGRhdGFEbmxMbmsuZG93bmxvYWQgPSBmbjtcclxuICAgICAgICAgICAgZGF0YURubExuay5jbGljaygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZChkb2N1bWVudC5ib2R5LCBkYXRhRG5sTG5rKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0IGRpc3BsYXlSZWNGaWxlKGRpc3BsYXlSZWNGaWxlOiBTcHJSZWNvcmRpbmdGaWxlIHwgbnVsbCkge1xyXG4gICAgdGhpcy5fZGlzcGxheVJlY0ZpbGUgPSBkaXNwbGF5UmVjRmlsZTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCB1cGRhdGVEaXNwbGF5UmVjRmlsZShkaXNwbGF5UmVjRmlsZTogU3ByUmVjb3JkaW5nRmlsZSB8IG51bGwsZmV0Y2hBbmRBcHBseVJlY29yZGluZ0ZpbGU6Ym9vbGVhbj10cnVlKSB7XHJcbiAgICB0aGlzLmRpc3BsYXlSZWNGaWxlPWRpc3BsYXlSZWNGaWxlO1xyXG4gICAgaWYgKHRoaXMuX2Rpc3BsYXlSZWNGaWxlKSB7XHJcbiAgICAgIGlmKHRoaXMuaXRlbXMpIHtcclxuICAgICAgICB0aGlzLml0ZW1zLmN1cnJlbnRSZWNvcmRpbmdGaWxlID0gdGhpcy5fZGlzcGxheVJlY0ZpbGU7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGFkaDogQXVkaW9EYXRhSG9sZGVyfCBudWxsID0gdGhpcy5fZGlzcGxheVJlY0ZpbGUuYXVkaW9EYXRhSG9sZGVyO1xyXG4gICAgICBpZihhZGgpIHtcclxuICAgICAgICB0aGlzLmRpc3BsYXlBdWRpb0NsaXAgPSBuZXcgQXVkaW9DbGlwKGFkaCk7XHJcbiAgICAgICAgaWYodGhpcy5fY29udHJvbEF1ZGlvUGxheWVyKSB7XHJcbiAgICAgICAgICB0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIuYXVkaW9DbGlwID0gdGhpcy5kaXNwbGF5QXVkaW9DbGlwO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNob3dSZWNvcmRpbmcoKTtcclxuICAgICAgfWVsc2Uge1xyXG4gICAgICAgIC8vIGNsZWFyIGZvciBub3cgLi4uXHJcbiAgICAgICAgdGhpcy5kaXNwbGF5QXVkaW9DbGlwID0gbnVsbDtcclxuICAgICAgICBpZih0aGlzLmNvbnRyb2xBdWRpb1BsYXllcikge1xyXG4gICAgICAgICAgdGhpcy5jb250cm9sQXVkaW9QbGF5ZXIuYXVkaW9DbGlwID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoZmV0Y2hBbmRBcHBseVJlY29yZGluZ0ZpbGUpIHtcclxuICAgICAgICAgIGlmICh0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIgJiYgdGhpcy5fc2Vzc2lvbikge1xyXG4gICAgICAgICAgICAvLy4uLiBhbmQgdHJ5IHRvIGZldGNoIGZyb20gc2VydmVyXHJcbiAgICAgICAgICAgIHRoaXMubGl2ZUxldmVsRGlzcGxheVN0YXRlID0gTGl2ZUxldmVsU3RhdGUuTE9BRElORztcclxuICAgICAgICAgICAgY29uc3QgcmYgPSB0aGlzLl9kaXNwbGF5UmVjRmlsZTtcclxuXHJcbiAgICAgICAgICAgIGxldCBhdWRpb0Rvd25sb2FkVHlwZSA9IHRoaXMuX2NsaWVudEF1ZGlvU3RvcmFnZVR5cGU7XHJcbiAgICAgICAgICAgIGlmIChBdWRpb1N0b3JhZ2VUeXBlLk1FTV9FTlRJUkVfQVVUT19ORVRfQ0hVTktFRCA9PT0gdGhpcy5fY2xpZW50QXVkaW9TdG9yYWdlVHlwZSB8fCBBdWRpb1N0b3JhZ2VUeXBlLk1FTV9DSFVOS0VEX0FVVE9fTkVUX0NIVU5LRUQgPT09IHRoaXMuX2NsaWVudEF1ZGlvU3RvcmFnZVR5cGUpIHtcclxuICAgICAgICAgICAgICAvLyBEZWZhdWx0IGlzIG5ldHdvcmsgbW9kZVxyXG4gICAgICAgICAgICAgIGF1ZGlvRG93bmxvYWRUeXBlID0gQXVkaW9TdG9yYWdlVHlwZS5ORVRfQ0hVTktFRDtcclxuICAgICAgICAgICAgICBpZiAocmYuY2hhbm5lbHMgJiYgcmYuZnJhbWVzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzYW1wbGVzID0gcmYuY2hhbm5lbHMgKiByZi5mcmFtZXM7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2FtcGxlcyA8PSB0aGlzLl9tYXhBdXRvTmV0TWVtU3RvcmVTYW1wbGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIEJ1dCBpZiBhdWRpbyBmaWxlIGlzIHNtYWxsLCBsb2FkIGluIGNvbnRpbnVvdXMgcmVzcC4gY2h1bmtlZCBtb2RlXHJcbiAgICAgICAgICAgICAgICAgIGlmIChBdWRpb1N0b3JhZ2VUeXBlLk1FTV9FTlRJUkVfQVVUT19ORVRfQ0hVTktFRCA9PT0gdGhpcy5fY2xpZW50QXVkaW9TdG9yYWdlVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF1ZGlvRG93bmxvYWRUeXBlID0gQXVkaW9TdG9yYWdlVHlwZS5NRU1fRU5USVJFO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKEF1ZGlvU3RvcmFnZVR5cGUuTUVNX0NIVU5LRURfQVVUT19ORVRfQ0hVTktFRCA9PT0gdGhpcy5fY2xpZW50QXVkaW9TdG9yYWdlVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF1ZGlvRG93bmxvYWRUeXBlID0gQXVkaW9TdG9yYWdlVHlwZS5NRU1fQ0hVTktFRDtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKFwiQXVkaW8gZG93bmxvYWQgdHlwZTogXCIgKyBhdWRpb0Rvd25sb2FkVHlwZSk7XHJcbiAgICAgICAgICAgIGlmIChBdWRpb1N0b3JhZ2VUeXBlLkRCX0NIVU5LRUQgPT09IHRoaXMuX2NsaWVudEF1ZGlvU3RvcmFnZVR5cGUpIHtcclxuICAgICAgICAgICAgICAvLyBGZXRjaCBjaHVua2VkIGluZGV4ZWQgZGIgYXVkaW8gYnVmZmVyXHJcbiAgICAgICAgICAgICAgbGV0IG5leHRJYWI6IEluZGV4ZWREYkF1ZGlvQnVmZmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLl9wZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignRXJyb3I6IFBlcnNpc3RlbnQgc3RvcmFnZSB0YXJnZXQgbm90IHNldC4nKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiRmV0Y2ggYXVkaW8gYW5kIHN0b3JlIHRvIGluZGV4ZWQgZGIuLi5cIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF1ZGlvRmV0Y2hTdWJzY3JpcHRpb24gPSB0aGlzLnJlY0ZpbGVTZXJ2aWNlLmZldGNoU3ByUmVjb3JkaW5nRmlsZUluZERiQXVkaW9CdWZmZXIodGhpcy5fcGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldCwgdGhpcy5fc2Vzc2lvbi5wcm9qZWN0LCByZikuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgbmV4dDogKGlhYikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlNlc3Npb25tYW5hZ2VyOiBSZWNlaXZlZCBpbmRkYiBhdWRpbyBidWZmZXI6IFwiK2lhYik7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dElhYiA9IGlhYjtcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpdmVMZXZlbERpc3BsYXlTdGF0ZSA9IExpdmVMZXZlbFN0YXRlLlJFQURZO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmYWJEaCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRJYWIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChyZiAmJiB0aGlzLml0ZW1zKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWJEaCA9IG5ldyBBdWRpb0RhdGFIb2xkZXIobmV4dElhYik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMuc2V0U3ByUmVjRmlsZUF1ZGlvRGF0YShyZiwgZmFiRGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBTaG91bGQgYWN0dWFsbHkgYmUgaGFuZGxlZCBieSB0aGUgZXJyb3IgcmVzb2x2ZXJcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ1JlY29yZGluZyBmaWxlIGNvdWxkIG5vdCBiZSBsb2FkZWQuJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnZXJyb3InXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmYWJEaCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5kaXNwbGF5QXVkaW9DbGlwIGNvdWxkIGhhdmUgYmVlbiBjaGFuZ2VkIG1lYW53aGlsZSwgYnV0IHRoZSByZWNvcmRlciB1bnN1YmNyaWJlcyBiZWZvcmUgY2hhbmdpbmcgdGhlIGl0ZW0sIHRoZXJlZm9yZSB0aGVyZSBzaG91bGQgYmUgbm8gcmlzayB0byBzZXQgdG8gd3JvbmcgaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5QXVkaW9DbGlwID0gbmV3IEF1ZGlvQ2xpcChmYWJEaCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udHJvbEF1ZGlvUGxheWVyLmF1ZGlvQ2xpcCA9IHRoaXMuZGlzcGxheUF1ZGlvQ2xpcFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dSZWNvcmRpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgZXJyb3I6IGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkNvdWxkIG5vdCBsb2FkIHJlY29yZGluZyBmaWxlIGZyb20gc2VydmVyOiBcIiArIGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saXZlTGV2ZWxEaXNwbGF5U3RhdGUgPSBMaXZlTGV2ZWxTdGF0ZS5SRUFEWTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXR1c01zZyA9ICdSZWNvcmRpbmcgZmlsZSBjb3VsZCBub3QgYmUgbG9hZGVkOiAnICsgZXJyO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKEF1ZGlvU3RvcmFnZVR5cGUuTkVUX0NIVU5LRUQgPT09IGF1ZGlvRG93bmxvYWRUeXBlKSB7XHJcbiAgICAgICAgICAgICAgLy8gRmV0Y2ggY2h1bmtlZCBhdWRpbyBidWZmZXIgZnJvbSBuZXR3b3JrXHJcbiAgICAgICAgICAgICAgbGV0IG5leHROZXRBYjogTmV0QXVkaW9CdWZmZXIgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiRmV0Y2ggY2h1bmtlZCBhdWRpbyBmcm9tIG5ldHdvcmtcIik7XHJcbiAgICAgICAgICAgICAgdGhpcy5hdWRpb0ZldGNoU3Vic2NyaXB0aW9uID0gdGhpcy5yZWNGaWxlU2VydmljZS5mZXRjaFNwclJlY29yZGluZ0ZpbGVOZXRBdWRpb0J1ZmZlciggdGhpcy5fc2Vzc2lvbi5wcm9qZWN0LCByZikuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgIG5leHQ6IChuZXRBYikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJTZXNzaW9ubWFuYWdlcjogUmVjZWl2ZWQgbmV0IGF1ZGlvIGJ1ZmZlcjogXCIrbmV0QWIpO1xyXG4gICAgICAgICAgICAgICAgICBuZXh0TmV0QWIgPSBuZXRBYjtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmxpdmVMZXZlbERpc3BsYXlTdGF0ZSA9IExpdmVMZXZlbFN0YXRlLlJFQURZO1xyXG4gICAgICAgICAgICAgICAgICBsZXQgZmFiRGggPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICBpZiAobmV4dE5ldEFiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJmICYmIHRoaXMuaXRlbXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGZhYkRoID0gbmV3IEF1ZGlvRGF0YUhvbGRlcihuZXh0TmV0QWIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5zZXRTcHJSZWNGaWxlQXVkaW9EYXRhKHJmLCBmYWJEaCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFNob3VsZCBhY3R1YWxseSBiZSBoYW5kbGVkIGJ5IHRoZSBlcnJvciByZXNvbHZlclxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ1JlY29yZGluZyBmaWxlIGNvdWxkIG5vdCBiZSBsb2FkZWQuJ1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJ1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGlmIChmYWJEaCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZGlzcGxheUF1ZGlvQ2xpcCBjb3VsZCBoYXZlIGJlZW4gY2hhbmdlZCBtZWFud2hpbGUsIGJ1dCB0aGUgcmVjb3JkZXIgdW5zdWJjcmliZXMgYmVmb3JlIGNoYW5naW5nIHRoZSBpdGVtLCB0aGVyZWZvcmUgdGhlcmUgc2hvdWxkIGJlIG5vIHJpc2sgdG8gc2V0IHRvIHdyb25nIGl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJzZXQgZGlzcGxheVJlY0ZpbGUoKTogZmV0Y2ggbmV0IGFiIGNvbXBsZXRlLCBzZXQgZGlzcGxheUF1ZGlvQ2xpcC5cIilcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlBdWRpb0NsaXAgPSBuZXcgQXVkaW9DbGlwKGZhYkRoKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBpZih0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIuYXVkaW9DbGlwID0gdGhpcy5kaXNwbGF5QXVkaW9DbGlwO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1JlY29yZGluZygpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQ291bGQgbm90IGxvYWQgcmVjb3JkaW5nIGZpbGUgZnJvbSBzZXJ2ZXI6IFwiICsgZXJyKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5saXZlTGV2ZWxEaXNwbGF5U3RhdGUgPSBMaXZlTGV2ZWxTdGF0ZS5SRUFEWTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVjb3JkaW5nIGZpbGUgY291bGQgbm90IGJlIGxvYWRlZDogJyArIGVycjtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnZXJyb3InO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoQXVkaW9TdG9yYWdlVHlwZS5NRU1fQ0hVTktFRCA9PT0gYXVkaW9Eb3dubG9hZFR5cGUpIHtcclxuICAgICAgICAgICAgICAvLyBGZXRjaCBjaHVua2VkIGFycmF5IGF1ZGlvIGJ1ZmZlclxyXG4gICAgICAgICAgICAgIGxldCBuZXh0QWFiOiBBcnJheUF1ZGlvQnVmZmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiRmV0Y2ggYXVkaW8gYW5kIHN0b3JlIHRvIChjaHVua2VkKSBhcnJheSBidWZmZXIuLi5cIik7XHJcbiAgICAgICAgICAgICAgdGhpcy5hdWRpb0ZldGNoU3Vic2NyaXB0aW9uID0gdGhpcy5yZWNGaWxlU2VydmljZS5mZXRjaFNwclJlY29yZGluZ0ZpbGVBcnJheUF1ZGlvQnVmZmVyKCB0aGlzLl9zZXNzaW9uLnByb2plY3QsIHJmKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgbmV4dDogKGFhYikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBuZXh0QWFiID0gYWFiO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubGl2ZUxldmVsRGlzcGxheVN0YXRlID0gTGl2ZUxldmVsU3RhdGUuUkVBRFk7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBmYWJEaCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChuZXh0QWFiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJmICYmIHRoaXMuaXRlbXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGZhYkRoID0gbmV3IEF1ZGlvRGF0YUhvbGRlcihuZXh0QWFiKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMuc2V0U3ByUmVjRmlsZUF1ZGlvRGF0YShyZiwgZmFiRGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBTaG91bGQgYWN0dWFsbHkgYmUgaGFuZGxlZCBieSB0aGUgZXJyb3IgcmVzb2x2ZXJcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXR1c01zZyA9ICdSZWNvcmRpbmcgZmlsZSBjb3VsZCBub3QgYmUgbG9hZGVkLidcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdlcnJvcidcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBpZiAoZmFiRGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmRpc3BsYXlBdWRpb0NsaXAgY291bGQgaGF2ZSBiZWVuIGNoYW5nZWQgbWVhbndoaWxlLCBidXQgdGhlIHJlY29yZGVyIHVuc3ViY3JpYmVzIGJlZm9yZSBjaGFuZ2luZyB0aGUgaXRlbSwgdGhlcmVmb3JlIHRoZXJlIHNob3VsZCBiZSBubyByaXNrIHRvIHNldCB0byB3cm9uZyBpdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5QXVkaW9DbGlwID0gbmV3IEF1ZGlvQ2xpcChmYWJEaCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYodGhpcy5fY29udHJvbEF1ZGlvUGxheWVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udHJvbEF1ZGlvUGxheWVyLmF1ZGlvQ2xpcCA9IHRoaXMuZGlzcGxheUF1ZGlvQ2xpcFxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1JlY29yZGluZygpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQ291bGQgbm90IGxvYWQgcmVjb3JkaW5nIGZpbGUgZnJvbSBzZXJ2ZXI6IFwiICsgZXJyKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5saXZlTGV2ZWxEaXNwbGF5U3RhdGUgPSBMaXZlTGV2ZWxTdGF0ZS5SRUFEWTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVjb3JkaW5nIGZpbGUgY291bGQgbm90IGJlIGxvYWRlZDogJyArIGVycjtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnZXJyb3InO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAvLyBGZXRjaCByZWd1bGFyIGF1ZGlvIGJ1ZmZlclxyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkZldGNoIGF1ZGlvIGFuZCBzdG9yZSB0byBhdWRpbyBidWZmZXIuLi5cIik7XHJcbiAgICAgICAgICAgICAgdGhpcy5hdWRpb0ZldGNoU3Vic2NyaXB0aW9uID0gdGhpcy5yZWNGaWxlU2VydmljZS5mZXRjaFNwclJlY29yZGluZ0ZpbGVBdWRpb0J1ZmZlciggdGhpcy5fc2Vzc2lvbi5wcm9qZWN0LCByZikuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgIG5leHQ6IChhYikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmxpdmVMZXZlbERpc3BsYXlTdGF0ZSA9IExpdmVMZXZlbFN0YXRlLlJFQURZO1xyXG4gICAgICAgICAgICAgICAgICBsZXQgZmFiRGggPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoYWIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmYgJiYgdGhpcy5pdGVtcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKFNlc3Npb25NYW5hZ2VyLkZPUkNFX0FSUlJBWV9BVURJT19CVUZGRVIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFhYiA9IEFycmF5QXVkaW9CdWZmZXIuZnJvbUF1ZGlvQnVmZmVyKGFiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmFiRGggPSBuZXcgQXVkaW9EYXRhSG9sZGVyKGFhYik7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWJEaCA9IG5ldyBBdWRpb0RhdGFIb2xkZXIobmV3IEF1ZGlvQnVmZmVyU291cmNlKGFiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLnNldFNwclJlY0ZpbGVBdWRpb0RhdGEocmYsIGZhYkRoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2hvdWxkIGFjdHVhbGx5IGJlIGhhbmRsZWQgYnkgdGhlIGVycm9yIHJlc29sdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVjb3JkaW5nIGZpbGUgY291bGQgbm90IGJlIGxvYWRlZC4nXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnZXJyb3InXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKGZhYkRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5kaXNwbGF5QXVkaW9DbGlwIGNvdWxkIGhhdmUgYmVlbiBjaGFuZ2VkIG1lYW53aGlsZSwgYnV0IHRoZSByZWNvcmRlciB1bnN1YmNyaWJlcyBiZWZvcmUgY2hhbmdpbmcgdGhlIGl0ZW0sIHRoZXJlZm9yZSB0aGVyZSBzaG91bGQgYmUgbm8gcmlzayB0byBzZXQgdG8gd3JvbmcgaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheUF1ZGlvQ2xpcCA9IG5ldyBBdWRpb0NsaXAoZmFiRGgpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGlmKHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllci5hdWRpb0NsaXAgPSB0aGlzLmRpc3BsYXlBdWRpb0NsaXBcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNob3dSZWNvcmRpbmcoKTtcclxuICAgICAgICAgICAgICAgIH0sIGVycm9yOiBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQ291bGQgbm90IGxvYWQgcmVjb3JkaW5nIGZpbGUgZnJvbSBzZXJ2ZXI6IFwiICsgZXJyKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5saXZlTGV2ZWxEaXNwbGF5U3RhdGUgPSBMaXZlTGV2ZWxTdGF0ZS5SRUFEWTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVjb3JkaW5nIGZpbGUgY291bGQgbm90IGJlIGxvYWRlZDogJyArIGVycjtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnZXJyb3InO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXR1c01zZyA9ICdSZWNvcmRpbmcgZmlsZSBjb3VsZCBub3QgYmUgZGVjb2RlZC4gQXVkaW8gY29udGV4dCB1bmF2YWlsYWJsZS4nXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGlzcGxheUF1ZGlvQ2xpcCA9IG51bGw7XHJcbiAgICAgIGlmKHRoaXMuY29udHJvbEF1ZGlvUGxheWVyKSB7XHJcbiAgICAgICAgdGhpcy5jb250cm9sQXVkaW9QbGF5ZXIuYXVkaW9DbGlwID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGRpc3BsYXlSZWNGaWxlKCk6IFNwclJlY29yZGluZ0ZpbGUgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl9kaXNwbGF5UmVjRmlsZTtcclxuICB9XHJcblxyXG4gIGlzUmVjb3JkaW5nSXRlbSgpOmJvb2xlYW57XHJcbiAgICByZXR1cm4odGhpcy5wcm9tcHRJdGVtIT1udWxsICYmIHRoaXMucHJvbXB0SXRlbS50eXBlIT09J25vbnJlY29yZGluZycpXHJcbiAgfVxyXG5cclxuICB1cGRhdGVTdGFydEFjdGlvbkRpc2FibGVTdGF0ZSgpe1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0YXJ0QWN0aW9uLmRpc2FibGVkPSEodGhpcy5hYyAgJiYgdGhpcy5pc1JlY29yZGluZ0l0ZW0oKSk7XHJcbiAgfVxyXG5cclxuICBhcHBseUl0ZW0odGVtcG9yYXJ5PWZhbHNlKSB7XHJcblxyXG4gICAgdGhpcy5zZWN0aW9uID0gdGhpcy5fc2NyaXB0LnNlY3Rpb25zW3RoaXMuc2VjdElkeF1cclxuICAgIHRoaXMuZ3JvdXAgPSB0aGlzLnNlY3Rpb24uX3NodWZmbGVkR3JvdXBzW3RoaXMuZ3JvdXBJZHhJblNlY3Rpb25dO1xyXG4gICAgdGhpcy5wcm9tcHRJdGVtID0gdGhpcy5ncm91cC5fc2h1ZmZsZWRQcm9tcHRJdGVtc1t0aGlzLnByb21wdEl0ZW1JZHhJbkdyb3VwXTtcclxuXHJcbiAgICAvL3RoaXMuc2VsZWN0ZWRJdGVtSWR4ID0gdGhpcy5wcm9tcHRJbmRleDtcclxuXHJcbiAgICBpZih0aGlzLmF1ZGlvRmV0Y2hTdWJzY3JpcHRpb24pe1xyXG4gICAgICAvL2NvbnNvbGUuZGVidWcoXCJVbnN1YnNjcmliZSBmcm9tIGF1ZGlvIGZldGNoLlwiKTtcclxuICAgICAgdGhpcy5hdWRpb0ZldGNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRlbXBvcmFyeSkge1xyXG4gICAgICB0aGlzLmRpc3BsYXlBdWRpb0NsaXA9bnVsbDtcclxuICAgICAgdGhpcy5zaG93UmVjb3JkaW5nKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmxpdmVMZXZlbERpc3BsYXlTdGF0ZT1MaXZlTGV2ZWxTdGF0ZS5SRUFEWTtcclxuXHJcbiAgICB0aGlzLmNsZWFyUHJvbXB0KCk7XHJcblxyXG4gICAgY29uc3QgaXNOb25yZWNvcmRpbmc9KHRoaXMucHJvbXB0SXRlbS50eXBlPT09J25vbnJlY29yZGluZycpO1xyXG5cclxuICAgIGlmIChpc05vbnJlY29yZGluZyB8fCAhdGhpcy5zZWN0aW9uLnByb21wdHBoYXNlIHx8IHRoaXMuc2VjdGlvbi5wcm9tcHRwaGFzZSA9PT0gJ0lETEUnKSB7XHJcbiAgICAgIHRoaXMuYXBwbHlQcm9tcHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZihpc05vbnJlY29yZGluZyl7XHJcbiAgICAgIHRoaXMudXBkYXRlRGlzcGxheVJlY0ZpbGUobnVsbCk7XHJcbiAgICAgIHRoaXMuZGlzcGxheVJlY0ZpbGVWZXJzaW9uID0gMDtcclxuICAgICAgdGhpcy5zdGFydFN0b3BTaWduYWxTdGF0ZSA9IFN0YXJ0U3RvcFNpZ25hbFN0YXRlLk9GRjtcclxuICAgIH1lbHNlIHtcclxuICAgICAgaWYgKHRoaXMuaXRlbXMpIHtcclxuICAgICAgICBsZXQgaXQgPSB0aGlzLml0ZW1zLmdldEl0ZW0odGhpcy5wcm9tcHRJbmRleCk7XHJcbiAgICAgICAgaWYgKCFpdC5yZWNzKSB7XHJcbiAgICAgICAgICBpdC5yZWNzID0gbmV3IEFycmF5PFNwclJlY29yZGluZ0ZpbGU+KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcmVjZW50UmVjRmlsZTogU3ByUmVjb3JkaW5nRmlsZSB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgIGxldCBhdmFpbFJlY2ZpbGVzOiBudW1iZXIgPSBpdC5yZWNzLmxlbmd0aDtcclxuICAgICAgICBpZiAoYXZhaWxSZWNmaWxlcyA+IDApIHtcclxuICAgICAgICAgIGxldCByZlZlcnM6IG51bWJlciA9IGF2YWlsUmVjZmlsZXMgLSAxO1xyXG4gICAgICAgICAgcmVjZW50UmVjRmlsZSA9IGl0LnJlY3NbcmZWZXJzXTtcclxuICAgICAgICAgIHRoaXMudXBkYXRlRGlzcGxheVJlY0ZpbGUocmVjZW50UmVjRmlsZSwhdGVtcG9yYXJ5KTtcclxuICAgICAgICAgIHRoaXMuZGlzcGxheVJlY0ZpbGVWZXJzaW9uID0gcmZWZXJzO1xyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVEaXNwbGF5UmVjRmlsZShudWxsKTtcclxuICAgICAgICAgIHRoaXMuZGlzcGxheVJlY0ZpbGVWZXJzaW9uID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYoIXRoaXMucmVhZG9ubHkpIHtcclxuICAgICAgICB0aGlzLnN0YXJ0U3RvcFNpZ25hbFN0YXRlID0gU3RhcnRTdG9wU2lnbmFsU3RhdGUuSURMRTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5kZWJ1ZyhcImFwcGx5SXRlbSgpOiB0ZW1wb3Jhcnk6IFwiK3RlbXBvcmFyeSk7XHJcbiAgICAvL2lmICghdGVtcG9yYXJ5KSB7XHJcbiAgICAvLyAgIGNvbnNvbGUuZGVidWcoXCJhcHBseUl0ZW0oKTogQ2FsbCBzaG93UmVjb3JkaW5nKCk6IGRpc3BsYXlBdWRpb0NsaXA6IFwiK3RoaXMuZGlzcGxheUF1ZGlvQ2xpcCk7XHJcbiAgICAgIC8vdGhpcy5zaG93UmVjb3JkaW5nKCk7XHJcbiAgICAvL31cclxuICAgIHRoaXMudXBkYXRlU3RhcnRBY3Rpb25EaXNhYmxlU3RhdGUoKVxyXG4gICAgdGhpcy51cGRhdGVOYXZpZ2F0aW9uQWN0aW9ucygpXHJcbiAgfVxyXG5cclxuXHJcbiAgc3RhcnQoKSB7XHJcbiAgICBzdXBlci5zdGFydCgpO1xyXG4gICAgaWYodGhpcy5wcm9tcHRJdGVtQ291bnQ+MCkge1xyXG4gICAgICB0aGlzLnByb21wdEluZGV4ID0gMDtcclxuICAgIH1cclxuICAgIHRoaXMuZW5hYmxlTmF2aWdhdGlvbigpXHJcbiAgfVxyXG5cclxuICBpc1JlY29yZGluZygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAodGhpcy5zdGF0dXMgPT09IFN0YXR1cy5QUkVfUkVDT1JESU5HIHx8IHRoaXMuc3RhdHVzID09PSBTdGF0dXMuUkVDT1JESU5HIHx8IHRoaXMuc3RhdHVzID09PSBTdGF0dXMuUE9TVF9SRUNfU1RPUCB8fCB0aGlzLnN0YXR1cyA9PT0gU3RhdHVzLlBPU1RfUkVDX1BBVVNFIHx8IHRoaXMuc3RhdHVzPT09U3RhdHVzLlNUT1BQSU5HX1NUT1ApO1xyXG4gIH1cclxuXHJcbiAgaXNBY3RpdmUoKTogYm9vbGVhbntcclxuICAgIHJldHVybiAoISh0aGlzLnN0YXR1cyA9PT0gU3RhdHVzLkJMT0NLRUQgfHwgdGhpcy5zdGF0dXM9PT0gU3RhdHVzLklETEUgfHwgdGhpcy5zdGF0dXM9PT1TdGF0dXMuRVJST1IpIHx8IHRoaXMucHJvY2Vzc2luZ1JlY29yZGluZyB8fCB0aGlzLnNlc3Npb25TZXJ2aWNlLnVwbG9hZENvdW50PjApXHJcbiAgfVxyXG5cclxuICAgIHByZXZJdGVtKCkge1xyXG4gICAgICAgbGV0IG5ld1BySWR4PXRoaXMuX3Byb21wdEluZGV4O1xyXG4gICAgICAgbmV3UHJJZHgtLTtcclxuICAgICAgIGlmKG5ld1BySWR4PDApe1xyXG4gICAgICAgICBuZXdQcklkeD10aGlzLnByb21wdEl0ZW1Db3VudC0xO1xyXG4gICAgICAgfVxyXG4gICAgICAgdGhpcy5wcm9tcHRJbmRleD1uZXdQcklkeDtcclxuICAgICAgLy90aGlzLnVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKClcclxuICAgIH1cclxuXHJcblxyXG4gIG5leHRJdGVtKCkge1xyXG4gICAgbGV0IG5ld1BySWR4PXRoaXMuX3Byb21wdEluZGV4O1xyXG4gICAgbmV3UHJJZHgrKztcclxuICAgIGlmKG5ld1BySWR4Pj10aGlzLnByb21wdEl0ZW1Db3VudCl7XHJcbiAgICAgIG5ld1BySWR4PTA7XHJcbiAgICB9XHJcbiAgICB0aGlzLnByb21wdEluZGV4PW5ld1BySWR4O1xyXG4gICAgLy90aGlzLnVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKCl7XHJcbiAgICBsZXQgZndkTnh0QWN0aW9uRGlzYWJsZWQ9dHJ1ZTtcclxuICAgIGlmKHRoaXMuaXRlbXMpe1xyXG4gICAgICBsZXQgY3VyclJlY3M9dGhpcy5pdGVtcy5nZXRJdGVtKHRoaXMuX3Byb21wdEluZGV4KS5yZWNzO1xyXG4gICAgICBmd2ROeHRBY3Rpb25EaXNhYmxlZD0gISAoY3VyclJlY3MhPW51bGwgJiYgY3VyclJlY3MubGVuZ3RoPjApO1xyXG4gICAgfVxyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLmZ3ZE5leHRBY3Rpb24uZGlzYWJsZWQgPSB0aGlzLm5hdmlnYXRpb25EaXNhYmxlZCB8fCBmd2ROeHRBY3Rpb25EaXNhYmxlZDtcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5md2RBY3Rpb24uZGlzYWJsZWQgPSB0aGlzLm5hdmlnYXRpb25EaXNhYmxlZDtcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5id2RBY3Rpb24uZGlzYWJsZWQgPSB0aGlzLm5hdmlnYXRpb25EaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIG5leHRVbnJlY29yZGVkSXRlbSgpIHtcclxuICAgIGxldCBuZXdQcklkeCA9IHRoaXMuX3Byb21wdEluZGV4O1xyXG4gICAgbmV3UHJJZHgrKztcclxuICAgIGlmIChuZXdQcklkeCA+PSB0aGlzLnByb21wdEl0ZW1Db3VudCkge1xyXG4gICAgICBuZXdQcklkeCA9IDA7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLml0ZW1zIT1udWxsKSB7XHJcbiAgICAgIGxldCBpdD10aGlzLml0ZW1zLmdldEl0ZW0obmV3UHJJZHgpO1xyXG4gICAgICB3aGlsZSAoKCFpdC5yZWNvcmRpbmcgfHwgaXQuaXRlbURvbmUoKSkgJiYgbmV3UHJJZHggPCB0aGlzLnByb21wdEl0ZW1Db3VudCkge1xyXG4gICAgICAgIG5ld1BySWR4Kys7XHJcbiAgICAgICAgaXQ9dGhpcy5pdGVtcy5nZXRJdGVtKG5ld1BySWR4KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIWl0Lml0ZW1Eb25lKCkpIHtcclxuICAgICAgICB0aGlzLnByb21wdEluZGV4ID0gbmV3UHJJZHg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVuYWJsZVN0YXJ0VXNlckdlc3R1cmUoKSB7XHJcbiAgICBzdXBlci5lbmFibGVTdGFydFVzZXJHZXN0dXJlKCk7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RhcnRBY3Rpb24uZGlzYWJsZWQ9ISh0aGlzLmFjICYmIHRoaXMuaXNSZWNvcmRpbmdJdGVtKCkpO1xyXG4gIH1cclxuXHJcbiAgZW5hYmxlTmF2aWdhdGlvbigpe1xyXG4gICAgdGhpcy5uYXZpZ2F0aW9uRGlzYWJsZWQ9ZmFsc2U7XHJcbiAgICB0aGlzLnVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKCk7XHJcbiAgfVxyXG5cclxuICBzdGFydGVkKCkge1xyXG4gICAgbGV0IGljID0gdGhpcy5wcm9tcHRJdGVtLml0ZW1jb2RlO1xyXG4gICAgbGV0IHJmPW51bGw7XHJcblxyXG4gICAgaWYgKHRoaXMuX3Nlc3Npb24gJiYgaWMpIHtcclxuICAgICAgbGV0IHNlc3NJZDogc3RyaW5nIHwgbnVtYmVyID0gdGhpcy5fc2Vzc2lvbi5zZXNzaW9uSWQ7XHJcbiAgICAgIGxldCBjcElkeCA9IHRoaXMucHJvbXB0SW5kZXg7XHJcbiAgICAgIGlmICh0aGlzLml0ZW1zKSB7XHJcbiAgICAgICAgbGV0IGl0ID0gdGhpcy5pdGVtcy5nZXRJdGVtKGNwSWR4KTtcclxuICAgICAgICBpZiAoIWl0LnJlY3MpIHtcclxuICAgICAgICAgIGl0LnJlY3MgPSBuZXcgQXJyYXk8U3ByUmVjb3JkaW5nRmlsZT4oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmYgPSBuZXcgU3ByUmVjb3JkaW5nRmlsZShzZXNzSWQsIGljLCBpdC5yZWNzLmxlbmd0aCxudWxsKTtcclxuICAgICAgICByZi51dWlkPXRoaXMucmZVdWlkO1xyXG4gICAgICAgIC8vaXQucmVjcy5wdXNoKHJmKTtcclxuICAgICAgICB0aGlzLml0ZW1zLmFkZFNwclJlY0ZpbGUoaXQscmYpO1xyXG4gICAgICAgIHRoaXMuaXRlbXMuY3VycmVudFJlY29yZGluZ0ZpbGU9cmY7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuX3JlY29yZGluZ0ZpbGUgPSByZjtcclxuICAgIHRoaXMuc3RhdHVzID0gU3RhdHVzLlBSRV9SRUNPUkRJTkc7XHJcbiAgICBzdXBlci5zdGFydGVkKCk7XHJcblxyXG4gICAgdGhpcy5zdGFydFN0b3BTaWduYWxTdGF0ZSA9IFN0YXJ0U3RvcFNpZ25hbFN0YXRlLlBSRVJFQ09SRElORztcclxuICAgIGlmKHRoaXMuX3Nlc3Npb24pIHtcclxuICAgICAgaWYgKHRoaXMuX3Nlc3Npb24uc3RhdHVzID09PSBcIkxPQURFRFwiKSB7XHJcbiAgICAgICAgbGV0IGJvZHk6IGFueSA9IHt9O1xyXG4gICAgICAgIGlmICh0aGlzLnNlY3Rpb24udHJhaW5pbmcpIHtcclxuICAgICAgICAgIHRoaXMuX3Nlc3Npb24uc3RhdHVzID0gXCJTVEFSVEVEX1RSQUlOSU5HXCJcclxuICAgICAgICAgIGJvZHkuc3RhdHVzID0gdGhpcy5fc2Vzc2lvbi5zdGF0dXM7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuX3Nlc3Npb24uc3RhcnRlZFRyYWluaW5nRGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXNzaW9uLnN0YXJ0ZWRUcmFpbmluZ0RhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICBib2R5LnN0YXJ0ZWRUcmFpbmluZ0RhdGUgPSB0aGlzLl9zZXNzaW9uLnN0YXJ0ZWRUcmFpbmluZ0RhdGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX3Nlc3Npb24uc3RhdHVzID0gXCJTVEFSVEVEXCJcclxuICAgICAgICAgIGJvZHkuc3RhdHVzID0gdGhpcy5fc2Vzc2lvbi5zdGF0dXM7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuX3Nlc3Npb24uc3RhcnRlZERhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2Vzc2lvbi5zdGFydGVkRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgIGJvZHkuc3RhcnRlZERhdGUgPSB0aGlzLl9zZXNzaW9uLnN0YXJ0ZWREYXRlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlc3Npb25TZXJ2aWNlLnBhdGNoU2Vzc2lvbk9ic2VydmVyKHRoaXMuX3Nlc3Npb24sIGJvZHkpLnN1YnNjcmliZSgpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNlY3Rpb24ucHJvbXB0cGhhc2UgPT09ICdQUkVSRUNPUkRJTkcnIHx8IHRoaXMuc2VjdGlvbi5wcm9tcHRwaGFzZSA9PT0gJ1BSRVJFQ09SRElOR09OTFknKSB7XHJcbiAgICAgIHRoaXMuYXBwbHlQcm9tcHQoKTtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2luZm8nO1xyXG4gICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVjb3JkaW5nLi4uJztcclxuXHJcbiAgICBsZXQgcHJlRGVsYXkgPSBERUZBVUxUX1BSRV9SRUNfREVMQVk7XHJcbiAgICBpZiAodGhpcy5wcm9tcHRJdGVtLnByZXJlY2RlbGF5IT1udWxsKSB7XHJcbiAgICAgIHByZURlbGF5ID0gdGhpcy5wcm9tcHRJdGVtLnByZXJlY2RlbGF5O1xyXG4gICAgfWVsc2UgaWYgKHRoaXMucHJvbXB0SXRlbS5wcmVyZWNvcmRpbmchPW51bGwpIHtcclxuICAgICAgcHJlRGVsYXkgPSB0aGlzLnByb21wdEl0ZW0ucHJlcmVjb3JkaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucG9zdERlbGF5PURFRkFVTFRfUE9TVF9SRUNfREVMQVk7XHJcbiAgICBpZih0aGlzLnByb21wdEl0ZW0ucG9zdHJlY2RlbGF5IT1udWxsKXtcclxuICAgICAgdGhpcy5wb3N0RGVsYXk9dGhpcy5wcm9tcHRJdGVtLnBvc3RyZWNkZWxheTtcclxuICAgIH1lbHNlIGlmKHRoaXMucHJvbXB0SXRlbS5wb3N0cmVjb3JkaW5nIT1udWxsKXtcclxuICAgICAgdGhpcy5wb3N0RGVsYXk9dGhpcy5wcm9tcHRJdGVtLnBvc3RyZWNvcmRpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG1heFJlY29yZGluZ1RpbWVNcyA9IE1BWF9SRUNPUkRJTkdfVElNRV9NUztcclxuICAgIGlmICh0aGlzLnByb21wdEl0ZW0ucmVjZHVyYXRpb24hPT1udWxsICYmIHRoaXMucHJvbXB0SXRlbS5yZWNkdXJhdGlvbiE9PXVuZGVmaW5lZCkge1xyXG4gICAgICBtYXhSZWNvcmRpbmdUaW1lTXMgPSBwcmVEZWxheSt0aGlzLnByb21wdEl0ZW0ucmVjZHVyYXRpb24rdGhpcy5wb3N0RGVsYXk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm1heFJlY1RpbWVySWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc3RvcFJlY29yZGluZ01heFJlYygpXHJcbiAgICB9LCBtYXhSZWNvcmRpbmdUaW1lTXMpO1xyXG4gICAgdGhpcy5tYXhSZWNUaW1lclJ1bm5pbmcgPSB0cnVlO1xyXG5cclxuXHJcblxyXG4gICAgdGhpcy5wcmVSZWNUaW1lcklkID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgICAgdGhpcy5wcmVSZWNUaW1lclJ1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuUkVDT1JESU5HO1xyXG4gICAgICB0aGlzLnN0YXJ0U3RvcFNpZ25hbFN0YXRlID0gU3RhcnRTdG9wU2lnbmFsU3RhdGUuUkVDT1JESU5HO1xyXG4gICAgICBpZiAodGhpcy5zZWN0aW9uLm1vZGUgPT09ICdBVVRPUkVDT1JESU5HJykge1xyXG4gICAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5uZXh0QWN0aW9uLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnBhdXNlQWN0aW9uLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BBY3Rpb24uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5zZWN0aW9uLnByb21wdHBoYXNlID09PSAnUkVDT1JESU5HJykge1xyXG4gICAgICAgIHRoaXMuYXBwbHlQcm9tcHQoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5zZWN0aW9uLnByb21wdHBoYXNlID09PSAnUFJFUkVDT1JESU5HT05MWScpe1xyXG4gICAgICAgIHRoaXMuY2xlYXJQcm9tcHQoKTtcclxuICAgICAgfVxyXG5cclxuICAgIH0sIHByZURlbGF5KTtcclxuICAgIHRoaXMucHJlUmVjVGltZXJSdW5uaW5nID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHN0b3BJdGVtKCkge1xyXG4gICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuUE9TVF9SRUNfU1RPUDtcclxuICAgIHRoaXMuc3RhcnRTdG9wU2lnbmFsU3RhdGUgPSBTdGFydFN0b3BTaWduYWxTdGF0ZS5QT1NUUkVDT1JESU5HO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLm5leHRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgLy90aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RvcE5vbnJlY29yZGluZ0FjdGlvbi5kaXNhYmxlZD10cnVlO1xyXG4gICAgdGhpcy5jbGVhclByZVJlY1RpbWVyKCk7XHJcbiAgICB0aGlzLnBvc3RSZWNUaW1lcklkID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnBvc3RSZWNUaW1lclJ1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuU1RPUFBJTkdfU1RPUDtcclxuICAgICAgdGhpcy5zdG9wUmVjb3JkaW5nKCk7XHJcbiAgICB9LCB0aGlzLnBvc3REZWxheSk7XHJcbiAgICB0aGlzLnBvc3RSZWNUaW1lclJ1bm5pbmcgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc3RvcE5vbnJlY29yZGluZygpe1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BOb25yZWNvcmRpbmdBY3Rpb24uZGlzYWJsZWQ9dHJ1ZTtcclxuICAgIHRoaXMuY2xlYXJOb25SZWNvcmRpbmdEdXJhdGlvblRpbWVyKCk7XHJcbiAgICB0aGlzLnN0YXR1cyA9IFN0YXR1cy5TVE9QUElOR19TVE9QO1xyXG4gICAgdGhpcy5jb250aW51ZVNlc3Npb24oKTtcclxuICB9XHJcblxyXG4gIHBhdXNlSXRlbSgpIHtcclxuICAgIHRoaXMuc3RhdHVzID0gU3RhdHVzLlBPU1RfUkVDX1BBVVNFO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnBhdXNlQWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RhcnRTdG9wU2lnbmFsU3RhdGUgPSBTdGFydFN0b3BTaWduYWxTdGF0ZS5QT1NUUkVDT1JESU5HO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLm5leHRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BOb25yZWNvcmRpbmdBY3Rpb24uZGlzYWJsZWQ9dHJ1ZTtcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5wYXVzZUFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLmNsZWFyUHJlUmVjVGltZXIoKTtcclxuICAgIHRoaXMucG9zdFJlY1RpbWVySWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucG9zdFJlY1RpbWVyUnVubmluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnN0YXR1cyA9IFN0YXR1cy5TVE9QUElOR19QQVVTRTtcclxuICAgICAgdGhpcy5zdG9wUmVjb3JkaW5nKCk7XHJcbiAgICB9LCB0aGlzLnBvc3REZWxheSk7XHJcbiAgICB0aGlzLnBvc3RSZWNUaW1lclJ1bm5pbmcgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc3RvcFJlY29yZGluZygpIHtcclxuICAgIHRoaXMuY2xlYXJNYXhSZWNUaW1lcigpO1xyXG4gICAgaWYodGhpcy5hYykge1xyXG4gICAgICB0aGlzLmFjLnN0b3AoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0b3BSZWNvcmRpbmdNYXhSZWMoKXtcclxuICAgIHRoaXMuY2xlYXJQcmVSZWNUaW1lcigpO1xyXG4gICAgdGhpcy5jbGVhclBvc3RSZWNUaW1lcigpO1xyXG4gICAgdGhpcy5tYXhSZWNUaW1lclJ1bm5pbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuc3RhdHVzID0gU3RhdHVzLlNUT1BQSU5HX1NUT1A7XHJcbiAgICBpZih0aGlzLmFjKSB7XHJcbiAgICAgIHRoaXMuYWMuc3RvcCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkUmVjb3JkaW5nRmlsZUJ5RGVzY3JpcHRvcihyZmQ6UmVjb3JkaW5nRmlsZURlc2NyaXB0b3JJbXBsKXtcclxuICAgIGlmKHJmZC5yZWNvcmRpbmcgJiYgcmZkLnJlY29yZGluZy5pdGVtY29kZSkge1xyXG4gICAgICBsZXQgcHJJZHggPSB0aGlzLnByb21wdEluZGV4QnlJdGVtY29kZShyZmQucmVjb3JkaW5nLml0ZW1jb2RlKTtcclxuICAgICAgaWYgKHRoaXMuaXRlbXMhPW51bGwgJiYgcHJJZHggIT09IG51bGwpIHtcclxuICAgICAgICBsZXQgaXQgPSB0aGlzLml0ZW1zLmdldEl0ZW0ocHJJZHgpO1xyXG4gICAgICAgIGlmIChpdCAmJiB0aGlzLl9zZXNzaW9uKSB7XHJcbiAgICAgICAgICAvLyBpZiAoIWl0LnJlY3MpIHtcclxuICAgICAgICAgIC8vICAgaXQucmVjcyA9IG5ldyBBcnJheTxTcHJSZWNvcmRpbmdGaWxlPigpO1xyXG4gICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgbGV0IHJmID0gbmV3IFNwclJlY29yZGluZ0ZpbGUodGhpcy5fc2Vzc2lvbi5zZXNzaW9uSWQsIHJmZC5yZWNvcmRpbmcuaXRlbWNvZGUsIHJmZC52ZXJzaW9uLCBudWxsKTtcclxuICAgICAgICAgIHJmLnNlcnZlclBlcnNpc3RlZD10cnVlO1xyXG4gICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiYWRkUmVjb3JkaW5nRmlsZUJ5RGVzY3JpcHRvcigpOiBzcjogXCIrcmZkLnNhbXBsZXJhdGUrXCIsIGZyYW1lczogXCIrcmZkLmZyYW1lcyk7XHJcbiAgICAgICAgICBpZihyZmQuc2FtcGxlcmF0ZSAmJiByZmQuZnJhbWVzKXtcclxuICAgICAgICAgICAgcmYuc2FtcGxlcmF0ZT1yZmQuc2FtcGxlcmF0ZTtcclxuICAgICAgICAgICAgcmYuZnJhbWVzPXJmZC5mcmFtZXM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZihyZmQuY2hhbm5lbHMpe1xyXG4gICAgICAgICAgICByZi5jaGFubmVscz1yZmQuY2hhbm5lbHM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLml0ZW1zLmFkZFNwclJlY0ZpbGUoaXQscmYpO1xyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiV0FSTjogTm8gcmVjb3JkaW5nIGl0ZW0gd2l0aCBjb2RlOiBcXFwiXCIgK3JmZC5yZWNvcmRpbmcuaXRlbWNvZGUrIFwiXFxcIiBmb3VuZC5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIldBUk46IE5vIHJlY29yZGluZyBpdGVtIHdpdGggY29kZTogXFxcIlwiICtyZmQucmVjb3JkaW5nLml0ZW1jb2RlKyBcIlxcXCIgZm91bmQuXCIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBhZGRSZWNvcmRpbmdGaWxlQnlQcm9tcHRJbmRleChwcm9tcHRJbmRleDpudW1iZXIsIHJmOlNwclJlY29yZGluZ0ZpbGUpe1xyXG4gIC8vXHJcbiAgLy8gfVxyXG5cclxuXHJcbiAgc3RvcHBlZCgpIHtcclxuICAgIHRoaXMuY2xlYXJQcmVSZWNUaW1lcigpO1xyXG4gICAgdGhpcy5jbGVhclBvc3RSZWNUaW1lcigpO1xyXG4gICAgdGhpcy5jbGVhck1heFJlY1RpbWVyKCk7XHJcbiAgICB0aGlzLnVwZGF0ZVN0YXJ0QWN0aW9uRGlzYWJsZVN0YXRlKClcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdG9wQWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5uZXh0QWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5wYXVzZUFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdpbmZvJztcclxuICAgIHRoaXMuc3RhdHVzTXNnID0gJ1JlY29yZGVkLic7XHJcbiAgICB0aGlzLnN0YXJ0U3RvcFNpZ25hbFN0YXRlID0gU3RhcnRTdG9wU2lnbmFsU3RhdGUuSURMRTtcclxuXHJcbiAgICAgIGxldCBhZGg6QXVkaW9EYXRhSG9sZGVyfG51bGw9bnVsbDtcclxuICAgICAgbGV0IGFzOkF1ZGlvU291cmNlfG51bGw9bnVsbDtcclxuICAgICBsZXQgYWI6QXVkaW9CdWZmZXJ8bnVsbD1udWxsO1xyXG4gICAgICBpZih0aGlzLmFjKSB7XHJcbiAgICAgICAgaWYgKEF1ZGlvU3RvcmFnZVR5cGUuTkVUX0NIVU5LRUQgPT09IHRoaXMuYWMuYXVkaW9TdG9yYWdlVHlwZSkge1xyXG4gICAgICAgICAgdGhpcy5wbGF5U3RhcnRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5rZWVwTGl2ZUxldmVsPXRydWU7XHJcbiAgICAgICAgICBsZXQgYnVybDpzdHJpbmd8bnVsbD1udWxsO1xyXG4gICAgICAgICAgaWYodGhpcy5fc2Vzc2lvbikge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fZGlzcGxheVJlY0ZpbGUpIHtcclxuICAgICAgICAgICAgICAvLyBUT0RPIGlzIHRoaXMgYnJhbmNoIGV2ZXIgY2FsbGVkID9cclxuICAgICAgICAgICAgICBsZXQgcmYgPSB0aGlzLl9kaXNwbGF5UmVjRmlsZTtcclxuICAgICAgICAgICAgICByZi5mcmFtZXMgPSB0aGlzLmFjLmZyYW1lc1JlY29yZGVkO1xyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcInN0b3BwZWQoKTogU2V0IGZyYW1lczogXCIrcmYuZnJhbWVzK1wiIG9uIHJmSWQ6IFwiK3RoaXMuZGlzcGxheVJlY0ZpbGU/LnJlY29yZGluZ0ZpbGVJZCk7XHJcbiAgICAgICAgICAgICAgYnVybCA9IHRoaXMucmVjRmlsZVNlcnZpY2Uuc3ByQXVkaW9GaWxlVXJsKHRoaXMuX3Nlc3Npb24/LnByb2plY3QsIHJmKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlc3Npb24/LnByb2plY3QgJiYgdGhpcy5fcmVjb3JkaW5nRmlsZSAmJiB0aGlzLl9yZWNvcmRpbmdGaWxlIGluc3RhbmNlb2YgU3ByUmVjb3JkaW5nRmlsZSkge1xyXG4gICAgICAgICAgICAgIGJ1cmwgPSB0aGlzLnJlY0ZpbGVTZXJ2aWNlLnNwckF1ZGlvRmlsZVVybEJ5SXRlbWNvZGUodGhpcy5zZXNzaW9uPy5wcm9qZWN0LCB0aGlzLnNlc3Npb24/LnNlc3Npb25JZCwgdGhpcy5fcmVjb3JkaW5nRmlsZS5pdGVtQ29kZSwgdGhpcy5fcmVjb3JkaW5nRmlsZS52ZXJzaW9uKTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkNvdWxkIG5vdCBjcmVhdGUgbmV0IGF1ZGlvIGJ1ZmZlci5cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGJ1cmwpIHtcclxuICAgICAgICAgICAgICBjb25zdCByVVVJRCA9IHRoaXMuYWMucmVjVVVJRDtcclxuICAgICAgICAgICAgICBjb25zdCBzciA9IHRoaXMuYWMuY3VycmVudFNhbXBsZVJhdGU7XHJcbiAgICAgICAgICAgICAgY29uc3QgY2hGbD1zcipSZWNvcmRpbmdTZXJ2aWNlLkRFRkFVTFRfQ0hVTktFRF9ET1dOTE9BRF9TRUNPTkRTO1xyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcInN0b3BwZWQoKTogcmZJRDogXCIrdGhpcy5fcmVjb3JkaW5nRmlsZT8ucmVjb3JkaW5nRmlsZUlkK1wiLCBuZXQgYWIgdXJsOiBcIiArIGJ1cmwrXCIsIGZyYW1lczogXCIrdGhpcy5hYy5mcmFtZXNSZWNvcmRlZCtcIiwgc2FtcGxlIHJhdGU6IFwiK3NyKTtcclxuICAgICAgICAgICAgICBsZXQgbmV0QWIgPSBuZXcgTmV0QXVkaW9CdWZmZXIodGhpcy5yZWNGaWxlU2VydmljZSwgYnVybCwgdGhpcy5hYy5jaGFubmVsQ291bnQsIHNyLCBjaEZsLCB0aGlzLmFjLmZyYW1lc1JlY29yZGVkLCByVVVJRCwgY2hGbCk7XHJcbiAgICAgICAgICAgICAgYXM9bmV0QWI7XHJcbiAgICAgICAgICAgICAgaWYodGhpcy51cGxvYWRTZXQpe1xyXG4gICAgICAgICAgICAgICAgLy9sZXQgcnA9bmV3IFJlYWR5UHJvdmlkZXIoKTtcclxuICAgICAgICAgICAgICAgIC8vbmV0QWIucmVhZHlQcm92aWRlcj1ycDtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkU2V0Lm9uRG9uZT0odXBsb2FkU2V0KT0+e1xyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKFwidXBsb2FkIHNldCBvbiBkb25lOiBDYWxsIHJlYWR5IHByb3ZpZGVyLnJlYWR5XCIpO1xyXG4gICAgICAgICAgICAgICAgICAvL3JwLnJlYWR5KCk7XHJcbiAgICAgICAgICAgICAgICAgIG5ldEFiLnJlYWR5KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2UgaWYgKEF1ZGlvU3RvcmFnZVR5cGUuTUVNX0VOVElSRV9BVVRPX05FVF9DSFVOS0VEID09PSB0aGlzLmFjLmF1ZGlvU3RvcmFnZVR5cGUgfHwgQXVkaW9TdG9yYWdlVHlwZS5NRU1fQ0hVTktFRF9BVVRPX05FVF9DSFVOS0VEID09PSB0aGlzLmFjLmF1ZGlvU3RvcmFnZVR5cGUpIHtcclxuICAgICAgICAgIGlmIChBdWRpb1N0b3JhZ2VUeXBlLk1FTV9FTlRJUkVfQVVUT19ORVRfQ0hVTktFRCA9PT0gdGhpcy5hYy5hdWRpb1N0b3JhZ2VUeXBlKXtcclxuICAgICAgICAgICAgY29uc3QgYWNBYj10aGlzLmFjLmF1ZGlvQnVmZmVyKCk7XHJcbiAgICAgICAgICAgIGlmKGFjQWIpIHtcclxuICAgICAgICAgICAgICBhcyA9IG5ldyBBdWRpb0J1ZmZlclNvdXJjZShhY0FiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYoQXVkaW9TdG9yYWdlVHlwZS5NRU1fQ0hVTktFRF9BVVRPX05FVF9DSFVOS0VEID09PSB0aGlzLmFjLmF1ZGlvU3RvcmFnZVR5cGUpe1xyXG4gICAgICAgICAgICBhcyA9IHRoaXMuYWMuYXVkaW9CdWZmZXJBcnJheSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYoIWFzKXtcclxuICAgICAgICAgICAgdGhpcy5wbGF5U3RhcnRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmtlZXBMaXZlTGV2ZWw9dHJ1ZTtcclxuICAgICAgICAgICAgbGV0IGJ1cmw6c3RyaW5nfG51bGw9bnVsbDtcclxuICAgICAgICAgICAgaWYodGhpcy5fc2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9kaXNwbGF5UmVjRmlsZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBpcyB0aGlzIGJyYW5jaCBldmVyIGNhbGxlZCA/XHJcbiAgICAgICAgICAgICAgICBsZXQgcmYgPSB0aGlzLl9kaXNwbGF5UmVjRmlsZTtcclxuICAgICAgICAgICAgICAgIHJmLmZyYW1lcyA9IHRoaXMuYWMuZnJhbWVzUmVjb3JkZWQ7XHJcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJzdG9wcGVkKCk6IFNldCBmcmFtZXM6IFwiK3JmLmZyYW1lcytcIiBvbiByZklkOiBcIit0aGlzLmRpc3BsYXlSZWNGaWxlPy5yZWNvcmRpbmdGaWxlSWQpO1xyXG4gICAgICAgICAgICAgICAgYnVybCA9IHRoaXMucmVjRmlsZVNlcnZpY2Uuc3ByQXVkaW9GaWxlVXJsKHRoaXMuX3Nlc3Npb24/LnByb2plY3QsIHJmKTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2Vzc2lvbj8ucHJvamVjdCAmJiB0aGlzLl9yZWNvcmRpbmdGaWxlICYmIHRoaXMuX3JlY29yZGluZ0ZpbGUgaW5zdGFuY2VvZiBTcHJSZWNvcmRpbmdGaWxlKSB7XHJcbiAgICAgICAgICAgICAgICBidXJsID0gdGhpcy5yZWNGaWxlU2VydmljZS5zcHJBdWRpb0ZpbGVVcmxCeUl0ZW1jb2RlKHRoaXMuc2Vzc2lvbj8ucHJvamVjdCwgdGhpcy5zZXNzaW9uPy5zZXNzaW9uSWQsIHRoaXMuX3JlY29yZGluZ0ZpbGUuaXRlbUNvZGUsIHRoaXMuX3JlY29yZGluZ0ZpbGUudmVyc2lvbik7XHJcbiAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQ291bGQgbm90IGNyZWF0ZSBuZXQgYXVkaW8gYnVmZmVyLlwiKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKGJ1cmwpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJVVUlEID0gdGhpcy5hYy5yZWNVVUlEO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3IgPSB0aGlzLmFjLmN1cnJlbnRTYW1wbGVSYXRlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2hGbD1zcipSZWNvcmRpbmdTZXJ2aWNlLkRFRkFVTFRfQ0hVTktFRF9ET1dOTE9BRF9TRUNPTkRTO1xyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwic3RvcHBlZCgpOiByZklEOiBcIit0aGlzLl9yZWNvcmRpbmdGaWxlPy5yZWNvcmRpbmdGaWxlSWQrXCIsIG5ldCBhYiB1cmw6IFwiICsgYnVybCtcIiwgZnJhbWVzOiBcIit0aGlzLmFjLmZyYW1lc1JlY29yZGVkK1wiLCBzYW1wbGUgcmF0ZTogXCIrc3IpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV0QWIgPSBuZXcgTmV0QXVkaW9CdWZmZXIodGhpcy5yZWNGaWxlU2VydmljZSwgYnVybCwgdGhpcy5hYy5jaGFubmVsQ291bnQsIHNyLCBjaEZsLCB0aGlzLmFjLmZyYW1lc1JlY29yZGVkLCByVVVJRCwgY2hGbCk7XHJcbiAgICAgICAgICAgICAgICBhcyA9IG5ldEFiO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudXBsb2FkU2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkU2V0Lm9uRG9uZSA9ICh1cGxvYWRTZXQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKFwidXBsb2FkIHNldCBvbiBkb25lOiBDYWxsIHJlYWR5IHByb3ZpZGVyLnJlYWR5XCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBuZXRBYi5yZWFkeSgpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChBdWRpb1N0b3JhZ2VUeXBlLkRCX0NIVU5LRUQgPT09IHRoaXMuYWMuYXVkaW9TdG9yYWdlVHlwZSkge1xyXG4gICAgICAgICAgYXMgPSB0aGlzLmFjLmluZGRiQXVkaW9CdWZmZXJBcnJheSgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoQXVkaW9TdG9yYWdlVHlwZS5NRU1fQ0hVTktFRCA9PT0gdGhpcy5hYy5hdWRpb1N0b3JhZ2VUeXBlKSB7XHJcbiAgICAgICAgICBhcyA9IHRoaXMuYWMuYXVkaW9CdWZmZXJBcnJheSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBhYiA9IHRoaXMuYWMuYXVkaW9CdWZmZXIoKTtcclxuICAgICAgICAgIGlmKGFiKSB7XHJcbiAgICAgICAgICAgIGFzID0gbmV3IEF1ZGlvQnVmZmVyU291cmNlKGFiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFzKSB7XHJcbiAgICAgICAgICBhZGggPSBuZXcgQXVkaW9EYXRhSG9sZGVyKGFzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAvLyBVc2UgYW4gb3duIHJlZmVyZW5jZSBzaW5jZSB0aGUgd3JpdGluZyBvZiB0aGUgd2F2ZSBmaWxlIGlzIGFzeW5jaHJvbm91cyBhbmQgdGhpcy5fcmVjb3JkaW5nRmlsZSBtaWdodCBhbHJlYWR5IGNvbnRhaW4gdGhlIG5leHQgcmVjb3JkaW5nXHJcbiAgICBsZXQgcmYgPSB0aGlzLl9yZWNvcmRpbmdGaWxlO1xyXG4gICAgaWYgKHJmICYmIHJmIGluc3RhbmNlb2YgU3ByUmVjb3JkaW5nRmlsZSkge1xyXG4gICAgICB0aGlzLml0ZW1zPy5zZXRTcHJSZWNGaWxlQXVkaW9EYXRhKHJmLGFkaCk7XHJcbiAgICAgIGlmICh0aGlzLmVuYWJsZVVwbG9hZFJlY29yZGluZ3MgJiYgdGhpcy5fdXBsb2FkQ2h1bmtTaXplU2Vjb25kcz09PW51bGwgJiYgQXVkaW9TdG9yYWdlVHlwZS5NRU1fRU5USVJFPT09dGhpcy5fY2xpZW50QXVkaW9TdG9yYWdlVHlwZSkge1xyXG4gICAgICAgIC8vIFRPRE8gdXNlIFNwZWVjaFJlY29yZGVyY29uZmlnIHJlc3AuIFJlY2ZpbGVTZXJ2aWNlXHJcbiAgICAgICAgLy8gY29udmVydCBhc3luY2hyb25vdXNseSB0byAxNi1iaXQgaW50ZWdlciBQQ01cclxuICAgICAgICAvLyBUT0RPIGNvdWxkIHdlIGF2b2lkIGNvbnZlcnNpb24gdG8gc2F2ZSBDUFUgcmVzb3VyY2VzIGFuZCB0cmFuc2ZlciBmbG9hdCBQQ00gZGlyZWN0bHk/XHJcbiAgICAgICAgLy8gVE9ETyBkdXBsaWNhdGUgY29udmVyc2lvbiBmb3IgbWFudWFsIGRvd25sb2FkXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIkJ1aWxkIHdhdiB3cml0ZXIuLi5cIik7XHJcbiAgICAgICAgaWYoYWIpIHtcclxuICAgICAgICAgIHRoaXMucHJvY2Vzc2luZ1JlY29yZGluZz10cnVlO1xyXG4gICAgICAgICAgbGV0IHd3ID0gbmV3IFdhdldyaXRlcih0aGlzLl9jbGllbnRNZWRpYVN0b3JhZ2VGb3JtYXQ/LmF1ZGlvRW5jb2Rpbmc9PT1BdWRpb1N0b3JhZ2VGb3JtYXRFbmNvZGluZy5QQ01fRkxPQVQsdGhpcy5fY2xpZW50TWVkaWFTdG9yYWdlRm9ybWF0Py5hdWRpb1BDTXNhbXBsZVNpemVJbkJpdHMpO1xyXG4gICAgICAgICAgLy9uZXcgUkVTVCBBUEkgVVJMXHJcbiAgICAgICAgICBsZXQgYXBpRW5kUG9pbnQgPSAnJztcclxuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5hcGlFbmRQb2ludCkge1xyXG4gICAgICAgICAgICBhcGlFbmRQb2ludCA9IHRoaXMuY29uZmlnLmFwaUVuZFBvaW50O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGFwaUVuZFBvaW50ICE9PSAnJykge1xyXG4gICAgICAgICAgICBhcGlFbmRQb2ludCA9IGFwaUVuZFBvaW50ICsgJy8nXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBsZXQgc2Vzc2lvbnNVcmwgPSBhcGlFbmRQb2ludCArIFNlc3Npb25TZXJ2aWNlLlNFU1NJT05fQVBJX0NUWDtcclxuICAgICAgICAgIGxldCByZWNVcmw6IHN0cmluZyA9IHNlc3Npb25zVXJsICsgJy8nICsgcmYuc2Vzc2lvbiArICcvJyArIFJFQ0ZJTEVfQVBJX0NUWCArICcvJyArIHJmLml0ZW1Db2RlO1xyXG4gICAgICAgICAgd3cud3JpdGVBc3luYyhhYiwgKHdhdkZpbGUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wb3N0UmVjb3JkaW5nKHdhdkZpbGUsIHJlY1VybCxyZik7XHJcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc2luZ1JlY29yZGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlV2FrZUxvY2soKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICB0aGlzLmNvbnRpbnVlU2Vzc2lvbigpO1xyXG4gIH1cclxuXHJcblxyXG4gIGNvbnRpbnVlU2Vzc2lvbigpe1xyXG4gICAgLy8gY2hlY2sgY29tcGxldGUgc2Vzc2lvblxyXG4gICAgbGV0IGNvbXBsZXRlID0gdHJ1ZTtcclxuICAgIGlmKHRoaXMuaXRlbXMpIHtcclxuICAgICAgLy8gc2VhcmNoIGJhY2t3YXJkcywgdG8gZ2FpbiBmYXN0ZXIgZGV0ZWN0aW9uIG9mIGluY29tcGxldGUgc3RhdGVcclxuICAgICAgZm9yIChsZXQgcmkgPSB0aGlzLml0ZW1zLmxlbmd0aCgpIC0gMTsgcmkgPj0gMDsgcmktLSkge1xyXG4gICAgICAgIGxldCBpdCA9IHRoaXMuaXRlbXMuZ2V0SXRlbShyaSk7XHJcbiAgICAgICAgaWYgKGl0LnJlY29yZGluZyAmJiAhaXQudHJhaW5pbmcgJiYgIWl0Lml0ZW1Eb25lKCkpIHtcclxuICAgICAgICAgIGNvbXBsZXRlID0gZmFsc2U7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBhdXRvU3RhcnQgPSAodGhpcy5zdGF0dXMgPT09IFN0YXR1cy5TVE9QUElOR19TVE9QKTtcclxuICAgIHRoaXMuc3RhdHVzID0gU3RhdHVzLklETEU7XHJcbiAgICBsZXQgc3RhcnROZXh0PWZhbHNlO1xyXG4gICAgaWYgKGNvbXBsZXRlKSB7XHJcbiAgICAgIGlmKHRoaXMuX3Nlc3Npb24hPW51bGwpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3Nlc3Npb24uc2VhbGVkICYmIHRoaXMuX3Nlc3Npb24uc3RhdHVzICE9PSBcIkNPTVBMRVRFRFwiKSB7XHJcbiAgICAgICAgICBsZXQgYm9keTogYW55ID0ge31cclxuICAgICAgICAgIHRoaXMuX3Nlc3Npb24uc3RhdHVzID0gXCJDT01QTEVURURcIjtcclxuICAgICAgICAgIGJvZHkuc3RhdHVzID0gdGhpcy5fc2Vzc2lvbi5zdGF0dXM7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuX3Nlc3Npb24uY29tcGxldGVkRGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXNzaW9uLmNvbXBsZXRlZERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICBib2R5LmNvbXBsZXRlZERhdGUgPSB0aGlzLl9zZXNzaW9uLmNvbXBsZXRlZERhdGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnNlc3Npb25TZXJ2aWNlLnBhdGNoU2Vzc2lvbk9ic2VydmVyKHRoaXMuX3Nlc3Npb24sIGJvZHkpLnN1YnNjcmliZSgpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ1Nlc3Npb24gY29tcGxldGUhJztcclxuICAgICAgdGhpcy51cGRhdGVXYWtlTG9jaygpO1xyXG4gICAgICBpZih0aGlzLnNob3dTZXNzaW9uQ29tcGxldGVNZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5kaWFsb2cub3BlbihTZXNzaW9uRmluaXNoZWREaWFsb2csIHt9KTtcclxuICAgICAgfVxyXG4gICAgICAvLyBlbmFibGUgbmF2aWdhdGlvblxyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuZndkQWN0aW9uLmRpc2FibGVkID0gZmFsc2VcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLmJ3ZEFjdGlvbi5kaXNhYmxlZCA9IGZhbHNlXHJcblxyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICAgIGlmICh0aGlzLnNlY3Rpb24ubW9kZSA9PT0gJ0FVVE9QUk9HUkVTUycgfHwgdGhpcy5zZWN0aW9uLm1vZGUgPT09ICdBVVRPUkVDT1JESU5HJykge1xyXG4gICAgICAgIHRoaXMubmV4dEl0ZW0oKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuc2VjdGlvbi5tb2RlID09PSAnQVVUT1JFQ09SRElORycgJiYgdGhpcy5hdXRvcmVjb3JkaW5nICYmIGF1dG9TdGFydCkge1xyXG4gICAgICAgIHN0YXJ0TmV4dD10cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGlvbkRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy51cGRhdGVOYXZpZ2F0aW9uQWN0aW9ucygpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlV2FrZUxvY2soKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gYXBwbHkgcmVjb3JkZWQgaXRlbVxyXG4gICAgdGhpcy5hcHBseUl0ZW0oc3RhcnROZXh0KTtcclxuICAgIGlmKHN0YXJ0TmV4dCl7XHJcbiAgICAgIHRoaXMuc3RhcnRJdGVtKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIGVycm9yKG1zZz0nQW4gdW5rbm93biBlcnJvciBvY2N1cmVkIGR1cmluZyByZWNvcmRpbmcuJyxhZHZpY2U6c3RyaW5nPSdQbGVhc2UgcmV0cnkuJykge1xyXG4gICAgdGhpcy5zdGF0dXM9U3RhdHVzLkVSUk9SO1xyXG4gICAgc3VwZXIuZXJyb3IobXNnLGFkdmljZSk7XHJcbiAgICB0aGlzLnVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKCk7XHJcbiAgICB0aGlzLnVwZGF0ZVN0YXJ0QWN0aW9uRGlzYWJsZVN0YXRlKCk7XHJcbiAgfVxyXG5cclxuICBwb3N0Q2h1bmtBdWRpb0J1ZmZlcihhdWRpb0J1ZmZlcjogQXVkaW9CdWZmZXIsIGNodW5rSWR4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMucHJvY2Vzc2luZ1JlY29yZGluZyA9IHRydWU7XHJcbiAgICBsZXQgd3cgPSBuZXcgV2F2V3JpdGVyKHRoaXMuX2NsaWVudE1lZGlhU3RvcmFnZUZvcm1hdD8uYXVkaW9FbmNvZGluZz09PUF1ZGlvU3RvcmFnZUZvcm1hdEVuY29kaW5nLlBDTV9GTE9BVCx0aGlzLl9jbGllbnRNZWRpYVN0b3JhZ2VGb3JtYXQ/LmF1ZGlvUENNc2FtcGxlU2l6ZUluQml0cyk7XHJcbiAgICBsZXQgc2Vzc2lvbnNVcmwgPSB0aGlzLnNlc3Npb25zQmFzZVVybCgpO1xyXG4gICAgbGV0IHJlY1VybDogc3RyaW5nID0gc2Vzc2lvbnNVcmwgKyAnLycgKyB0aGlzLnNlc3Npb24/LnNlc3Npb25JZCArICcvJyArIFJFQ0ZJTEVfQVBJX0NUWCArICcvJyArIHRoaXMucHJvbXB0SXRlbS5pdGVtY29kZSsnLycrdGhpcy5yZlV1aWQrJy8nK2NodW5rSWR4O1xyXG4gICAgLy8gVGhlIHVwbG9hZCBob2xkZXIgaXMgcmVxdWlyZWQgdG8gYWRkIHRoZSB1cGxvYWQgbm93IHRvIHRoZSB1cGxvYWQgc2V0LiBUaGUgcmVhbCB1cGxvYWQgaXMgY3JlYXRlZCBhc3luYyBpbiBwb3N0cmVjb3JkaW5nIGFuZCB0aGUgdXBsb2FkIHNldCBpcyBhbHJlYWR5IGNvbXBsZXRlIGF0IHRoYXQgdGltZS5cclxuICAgIGxldCB1bGg9bmV3IFVwbG9hZEhvbGRlcigpO1xyXG4gICAgaWYodGhpcy51cGxvYWRTZXQpe1xyXG4gICAgICB0aGlzLnVwbG9hZFNldC5hZGQodWxoKTtcclxuICAgIH1cclxuXHJcbiAgICB3dy53cml0ZUFzeW5jKGF1ZGlvQnVmZmVyLCAod2F2RmlsZSkgPT4ge1xyXG4gICAgICB0aGlzLnBvc3RSZWNvcmRpbmcod2F2RmlsZSwgcmVjVXJsLG51bGwsdWxoKTtcclxuICAgICAgdGhpcy5wcm9jZXNzaW5nUmVjb3JkaW5nID0gZmFsc2VcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIHBvc3RSZWNvcmRpbmcod2F2RmlsZTogVWludDhBcnJheSwgcmVjVXJsOiBzdHJpbmcscmY6UmVjb3JkaW5nRmlsZXxudWxsKSB7XHJcbiAgLy8gICBsZXQgd2F2QmxvYiA9IG5ldyBCbG9iKFt3YXZGaWxlXSwge3R5cGU6ICdhdWRpby93YXYnfSk7XHJcbiAgLy8gICBsZXQgdWwgPSBuZXcgVXBsb2FkKHdhdkJsb2IsIHJlY1VybCxyZik7XHJcbiAgLy8gICB0aGlzLnVwbG9hZGVyLnF1ZXVlVXBsb2FkKHVsKTtcclxuICAvLyB9XHJcblxyXG4gIHN0b3AoKSB7XHJcbiAgICBpZih0aGlzLmFjIT1udWxsKXtcclxuICAgICAgdGhpcy5hYy5jbG9zZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgdXBkYXRlQ29udHJvbFBsYXliYWNrUG9zaXRpb24oKSB7XHJcbiAgICBpZih0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIpIHtcclxuICAgICAgY29uc3QgcHBGcmFtZXM9dGhpcy5fY29udHJvbEF1ZGlvUGxheWVyLnBsYXlQb3NpdGlvbkZyYW1lcztcclxuICAgICAgaWYgKHBwRnJhbWVzIT09bnVsbCkge1xyXG4gICAgICAgIGlmKHRoaXMucHJvbXB0aW5nLmF1ZGlvRGlzcGxheSkge1xyXG4gICAgICAgICAgdGhpcy5wcm9tcHRpbmcuYXVkaW9EaXNwbGF5LnBsYXlGcmFtZVBvc2l0aW9uID0gcHBGcmFtZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubGl2ZUxldmVsRGlzcGxheS5wbGF5RnJhbWVQb3NpdGlvbiA9IHBwRnJhbWVzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhdWRpb1BsYXllclVwZGF0ZShlOiBBdWRpb1BsYXllckV2ZW50KSB7XHJcbiAgICBpZiAoRXZlbnRUeXBlLlJFQURZID09PSBlLnR5cGUpIHtcclxuXHJcbiAgICB9IGVsc2UgaWYgKEV2ZW50VHlwZS5TVEFSVEVEID09PSBlLnR5cGUpIHtcclxuICAgICAgLy90aGlzLnN0YXR1cyA9ICdQbGF5YmFjay4uLic7XHJcbiAgICAgIHRoaXMudXBkYXRlVGltZXJJZCA9IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiB0aGlzLnVwZGF0ZUNvbnRyb2xQbGF5YmFja1Bvc2l0aW9uKCksIDUwKTtcclxuXHJcbiAgICB9IGVsc2UgaWYgKEV2ZW50VHlwZS5FTkRFRCA9PT0gZS50eXBlKSB7XHJcbiAgICAgIC8vLnN0YXR1cz0nUmVhZHkuJztcclxuICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy51cGRhdGVUaW1lcklkKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgaWYoIXRoaXMuZGVzdHJveWVkKSB7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxufVxyXG5cclxuIl19
|
|
1385
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbm1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvc3BlZWNocmVjb3JkZXIvc2Vzc2lvbi9zZXNzaW9ubWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsWUFBWSxFQUF1QixNQUFNLDZCQUE2QixDQUFDO0FBQy9FLE9BQU8sRUFBZ0MsU0FBUyxFQUFDLE1BQU0sNkJBQTZCLENBQUE7QUFDcEYsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDRCQUE0QixDQUFBO0FBQ3BELE9BQU8sRUFBb0IsY0FBYyxFQUFrQixNQUFNLGtCQUFrQixDQUFDO0FBQ3BGLE9BQU8sRUFBOEIsZ0JBQWdCLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDMUUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFHTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUlqRCxPQUFPLEVBQUMscUJBQXFCLEVBQXVCLE1BQU0sa0JBQWtCLENBQUM7QUFDN0UsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUN0QyxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDbEUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ2hELE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLFFBQVEsRUFB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SUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRTNDLENBQUM7UUFFRCxJQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMzQyxDQUFDO0lBRUgsQ0FBQzs4R0FwMENVLGNBQWMsMk9BcUVMLHFCQUFxQjtrR0FyRTlCLGNBQWMsMk5BNUZkLENBQUMsY0FBYyxDQUFDLHFFQWdIaEIsU0FBUyxpR0FDVCxRQUFRLHFGQWhIVDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlEVDs7MkZBMENVLGNBQWM7a0JBOUYxQixTQUFTOytCQUNFLHlCQUF5QixhQUN4QixDQUFDLGNBQWMsQ0FBQyxZQUNqQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlEVDs7MEJBK0dZLE1BQU07MkJBQUMscUJBQXFCO3lDQXREaEMsV0FBVztzQkFBbkIsS0FBSztnQkFLa0MsU0FBUztzQkFBaEQsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNDLGdCQUFnQjtzQkFBdEQsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUU1QixTQUFTO3NCQUFqQixLQUFLO2dCQXNLTixVQUFVO3NCQURULFlBQVk7dUJBQUMsaUJBQWlCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBVTNDLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXVkaW9DYXB0dXJlLCBBdWRpb0NhcHR1cmVMaXN0ZW5lcn0gZnJvbSAnLi4vLi4vYXVkaW8vY2FwdHVyZS9jYXB0dXJlJztcclxuaW1wb3J0IHtBdWRpb1BsYXllciwgQXVkaW9QbGF5ZXJFdmVudCwgRXZlbnRUeXBlfSBmcm9tICcuLi8uLi9hdWRpby9wbGF5YmFjay9wbGF5ZXInXHJcbmltcG9ydCB7V2F2V3JpdGVyfSBmcm9tICcuLi8uLi9hdWRpby9pbXBsL3dhdndyaXRlcidcclxuaW1wb3J0IHtHcm91cCwgUHJvbXB0SXRlbSwgUHJvbXB0aXRlbVV0aWwsIFNjcmlwdCwgU2VjdGlvbn0gZnJvbSAnLi4vc2NyaXB0L3NjcmlwdCc7XHJcbmltcG9ydCB7UmVjb3JkaW5nRmlsZURlc2NyaXB0b3JJbXBsLCBTcHJSZWNvcmRpbmdGaWxlfSBmcm9tICcuLi9yZWNvcmRpbmcnXHJcbmltcG9ydCB7VXBsb2FkSG9sZGVyfSBmcm9tICcuLi8uLi9uZXQvdXBsb2FkZXInO1xyXG5pbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIFJlbmRlcmVyMixcclxuICBWaWV3Q2hpbGRcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1Nlc3Npb25TZXJ2aWNlfSBmcm9tIFwiLi9zZXNzaW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtTdGF0ZSBhcyBTdGFydFN0b3BTaWduYWxTdGF0ZX0gZnJvbSBcIi4uL3N0YXJ0c3RvcHNpZ25hbC9zdGFydHN0b3BzaWduYWxcIjtcclxuaW1wb3J0IHtNYXREaWFsb2d9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcclxuaW1wb3J0IHtTcGVlY2hSZWNvcmRlclVwbG9hZGVyfSBmcm9tIFwiLi4vc3BydXBsb2FkZXJcIjtcclxuaW1wb3J0IHtTUEVFQ0hSRUNPUkRFUl9DT05GSUcsIFNwZWVjaFJlY29yZGVyQ29uZmlnfSBmcm9tIFwiLi4vLi4vc3ByLmNvbmZpZ1wiO1xyXG5pbXBvcnQge1Byb21wdGluZ30gZnJvbSBcIi4vcHJvbXB0aW5nXCI7XHJcbmltcG9ydCB7U2Vzc2lvbkZpbmlzaGVkRGlhbG9nfSBmcm9tIFwiLi9zZXNzaW9uX2ZpbmlzaGVkX2RpYWxvZ1wiO1xyXG5pbXBvcnQge01lc3NhZ2VEaWFsb2d9IGZyb20gXCIuLi8uLi91aS9tZXNzYWdlX2RpYWxvZ1wiO1xyXG5pbXBvcnQge1JlY29yZGluZ1NlcnZpY2V9IGZyb20gXCIuLi9yZWNvcmRpbmdzL3JlY29yZGluZ3Muc2VydmljZVwiO1xyXG5pbXBvcnQge0F1ZGlvQ2xpcH0gZnJvbSBcIi4uLy4uL2F1ZGlvL3BlcnNpc3RvclwiO1xyXG5pbXBvcnQge0l0ZW19IGZyb20gXCIuL2l0ZW1cIjtcclxuaW1wb3J0IHtMZXZlbEJhciwgU3RhdGUgYXMgTGl2ZUxldmVsU3RhdGV9IGZyb20gXCIuLi8uLi9hdWRpby91aS9saXZlbGV2ZWxcIjtcclxuaW1wb3J0IHtCYXNpY1JlY29yZGVyLCBDaHVua0F1ZGlvQnVmZmVyUmVjZWl2ZXIsIE1BWF9SRUNPUkRJTkdfVElNRV9NUywgUkVDRklMRV9BUElfQ1RYfSBmcm9tIFwiLi9iYXNpY3JlY29yZGVyXCI7XHJcbmltcG9ydCB7QXJyYXlBdWRpb0J1ZmZlcn0gZnJvbSBcIi4uLy4uL2F1ZGlvL2FycmF5X2F1ZGlvX2J1ZmZlclwiO1xyXG5pbXBvcnQge0F1ZGlvQnVmZmVyU291cmNlLCBBdWRpb0RhdGFIb2xkZXIsIEF1ZGlvU291cmNlfSBmcm9tIFwiLi4vLi4vYXVkaW8vYXVkaW9fZGF0YV9ob2xkZXJcIjtcclxuaW1wb3J0IHtTcHJJdGVtc0NhY2hlfSBmcm9tIFwiLi9yZWNvcmRpbmdfZmlsZV9jYWNoZVwiO1xyXG5pbXBvcnQge0luZGV4ZWREYkF1ZGlvQnVmZmVyLCBQZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0fSBmcm9tIFwiLi4vLi4vYXVkaW8vaW5kZGJfYXVkaW9fYnVmZmVyXCI7XHJcbmltcG9ydCB7QXVkaW9TdG9yYWdlRm9ybWF0RW5jb2RpbmcsIEF1ZGlvU3RvcmFnZVR5cGV9IGZyb20gXCIuLi9wcm9qZWN0L3Byb2plY3RcIjtcclxuaW1wb3J0IHtOZXRBdWRpb0J1ZmZlcn0gZnJvbSBcIi4uLy4uL2F1ZGlvL25ldF9hdWRpb19idWZmZXJcIjtcclxuaW1wb3J0IHtCcmVha3BvaW50T2JzZXJ2ZXJ9IGZyb20gXCJAYW5ndWxhci9jZGsvbGF5b3V0XCI7XHJcblxyXG5jb25zdCBERUZBVUxUX1BSRV9SRUNfREVMQVk9MTAwMDtcclxuY29uc3QgREVGQVVMVF9QT1NUX1JFQ19ERUxBWT01MDA7XHJcblxyXG5leHBvcnQgY29uc3QgZW51bSBTdGF0dXMge1xyXG4gIEJMT0NLRUQsIElETEUsIFNUQVJUSU5HLCBQUkVfUkVDT1JESU5HLCBSRUNPUkRJTkcsIFBPU1RfUkVDX1NUT1AsIFBPU1RfUkVDX1BBVVNFLCBTVE9QUElOR19TVE9QLCBTVE9QUElOR19QQVVTRSwgTk9OX1JFQ09SRElOR19XQUlULEVSUk9SXHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXNwcnJlY29yZGluZ3Nlc3Npb24nLFxyXG4gIHByb3ZpZGVyczogW1Nlc3Npb25TZXJ2aWNlXSxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGFwcC13YXJuaW5nYmFyIFtzaG93XT1cImlzVGVzdFNlc3Npb24oKVwiIHdhcm5pbmdUZXh0PVwiVGVzdCByZWNvcmRpbmcgb25seSFcIj48L2FwcC13YXJuaW5nYmFyPlxyXG4gICAgPGFwcC13YXJuaW5nYmFyIFtzaG93XT1cImlzRGVmYXVsdEF1ZGlvVGVzdFNlc3Npb24oKVwiIHdhcm5pbmdUZXh0PVwiVGhpcyB0ZXN0IHVzZXMgZGVmYXVsdCBhdWRpbyBkZXZpY2UhIFJlZ3VsYXIgc2Vzc2lvbnMgbWF5IHJlcXVpcmUgYSBwYXJ0aWN1bGFyIGF1ZGlvIGRldmljZSAobWljcm9waG9uZSkhXCI+PC9hcHAtd2FybmluZ2Jhcj5cclxuICAgICAgPGFwcC1zcHJwcm9tcHRpbmcgW3Byb2plY3ROYW1lXT1cInByb2plY3ROYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0YXJ0U3RvcFNpZ25hbFN0YXRlXT1cInN0YXJ0U3RvcFNpZ25hbFN0YXRlXCIgW3Byb21wdEl0ZW1dPVwicHJvbXB0SXRlbVwiIFtzaG93UHJvbXB0XT1cInNob3dQcm9tcHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiaXRlbXM/Lml0ZW1zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RyYW5zcG9ydEFjdGlvbnNdPVwidHJhbnNwb3J0QWN0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZEl0ZW1JZHhdPVwicHJvbXB0SW5kZXhcIiAob25JdGVtU2VsZWN0KT1cIml0ZW1TZWxlY3QoJGV2ZW50KVwiIChvbk5leHRJdGVtKT1cIm5leHRJdGVtKClcIiAob25QcmV2SXRlbSk9XCJwcmV2SXRlbSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2F1ZGlvU2lnbmFsQ29sbGFwc2VkXT1cImF1ZGlvU2lnbmFsQ29sbGFwc2VkXCIgW2Rpc3BsYXlBdWRpb0NsaXBdPVwiZGlzcGxheUF1ZGlvQ2xpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGF5U3RhcnRBY3Rpb25dPVwiY29udHJvbEF1ZGlvUGxheWVyPy5zdGFydEFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGF5U2VsZWN0aW9uQWN0aW9uXT1cImNvbnRyb2xBdWRpb1BsYXllcj8uc3RhcnRTZWxlY3Rpb25BY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXV0b1BsYXlPblNlbGVjdFRvZ2dsZUFjdGlvbl09XCJjb250cm9sQXVkaW9QbGF5ZXI/LmF1dG9QbGF5T25TZWxlY3RUb2dnbGVBY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxheVN0b3BBY3Rpb25dPVwiY29udHJvbEF1ZGlvUGxheWVyPy5zdG9wQWN0aW9uXCI+XHJcblxyXG4gICAgPC9hcHAtc3BycHJvbXB0aW5nPlxyXG4gICAgPG1hdC1wcm9ncmVzcy1iYXIgW3ZhbHVlXT1cInByb2dyZXNzUGVyY2VudFZhbHVlKClcIiAqbmdJZj1cInNjcmVlblhzXCIgPjwvbWF0LXByb2dyZXNzLWJhcj5cclxuXHJcblxyXG4gICAgPGRpdiBbY2xhc3NdPVwie2F1ZGlvU3RhdHVzRGlzcGxheTohc2NyZWVuWHMsYXVkaW9TdGF0dXNEaXNwbGF5WHM6c2NyZWVuWHN9XCI+XHJcbiAgICAgIDxhdWRpby1sZXZlbGJhciBzdHlsZT1cImZsZXg6MSAwIDElXCIgW3N0cmVhbWluZ01vZGVdPVwiaXNSZWNvcmRpbmcoKSB8fCBrZWVwTGl2ZUxldmVsXCIgW2Rpc3BsYXlMZXZlbEluZm9zXT1cImRpc3BsYXlBdWRpb0NsaXA/LmxldmVsSW5mb3NcIiAgW3N0YXRlXT1cImxpdmVMZXZlbERpc3BsYXlTdGF0ZVwiPjwvYXVkaW8tbGV2ZWxiYXI+XHJcbiAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246IHJvd1wiPlxyXG4gICAgICAgIDxzcHItcmVjb3JkaW5naXRlbWNvbnRyb2xzIHN0eWxlPVwiZGlzcGxheTpmbGV4O2ZsZXg6MTAgMCAxcHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdWRpb0xvYWRlZF09XCJhdWRpb0xvYWRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVBdWRpb0RldGFpbHNdPVwiZGlzYWJsZUF1ZGlvRGV0YWlsc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYXlTdGFydEFjdGlvbl09XCJjb250cm9sQXVkaW9QbGF5ZXI/LnN0YXJ0QWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxheVN0b3BBY3Rpb25dPVwiY29udHJvbEF1ZGlvUGxheWVyPy5zdG9wQWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGVha0RiTHZsXT1cInBlYWtMZXZlbEluRGJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthZ2NdPVwidGhpcy5hYz8uYWdjU3RhdHVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25TaG93UmVjb3JkaW5nRGV0YWlscyk9XCJhdWRpb1NpZ25hbENvbGxhcHNlZD0hYXVkaW9TaWduYWxDb2xsYXBzZWRcIj5cclxuICAgICAgICA8L3Nwci1yZWNvcmRpbmdpdGVtY29udHJvbHM+XHJcblxyXG4gICAgICAgIDxhcHAtdXBsb2Fkc3RhdHVzICpuZ0lmPVwic2NyZWVuWHMgJiYgZW5hYmxlVXBsb2FkUmVjb3JkaW5nc1wiIGNsYXNzPVwicmljb250cm9scyBkYXJrXCIgIHN0eWxlPVwiZmxleDowIDAgMFwiIFt2YWx1ZV09XCJ1cGxvYWRQcm9ncmVzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0YXR1c109XCJ1cGxvYWRTdGF0dXNcIiBbYXdhaXROZXdVcGxvYWRdPVwicHJvY2Vzc2luZ1JlY29yZGluZ1wiPjwvYXBwLXVwbG9hZHN0YXR1cz5cclxuICAgICAgICA8YXBwLXdha2Vsb2NraW5kaWNhdG9yICpuZ0lmPVwic2NyZWVuWHNcIiBjbGFzcz1cInJpY29udHJvbHMgZGFya1wiIHN0eWxlPVwiZmxleDowIDAgMFwiIFtzY3JlZW5Mb2NrZWRdPVwic2NyZWVuTG9ja2VkXCI+PC9hcHAtd2FrZWxvY2tpbmRpY2F0b3I+XHJcbiAgICAgICAgPGFwcC1yZWFkeXN0YXRlaW5kaWNhdG9yICpuZ0lmPVwic2NyZWVuWHNcIiBjbGFzcz1cInJpY29udHJvbHMgZGFya1wiIHN0eWxlPVwiZmxleDowIDAgMFwiIFtyZWFkeV09XCJkYXRhU2F2ZWQgJiYgIWlzQWN0aXZlKClcIj48L2FwcC1yZWFkeXN0YXRlaW5kaWNhdG9yPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAjY29udHJvbHBhbmVsIGNsYXNzPVwiY29udHJvbHBhbmVsXCI+XHJcbiAgICAgIDxkaXYgc3R5bGU9XCJmbGV4OjEgMSAzMCU7anVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O2FsaWduLWl0ZW1zOiBjZW50ZXI7IGFsaWduLWNvbnRlbnQ6IGNlbnRlclwiPlxyXG4gICAgICAgIDxhcHAtc3Byc3RhdHVzZGlzcGxheSAqbmdJZj1cIiFzY3JlZW5Yc1wiIFtzdGF0dXNNc2ddPVwic3RhdHVzTXNnXCIgW3N0YXR1c0FsZXJ0VHlwZV09XCJzdGF0dXNBbGVydFR5cGVcIiBbc3RhdHVzV2FpdGluZ109XCJzdGF0dXNXYWl0aW5nXCI+PC9hcHAtc3Byc3RhdHVzZGlzcGxheT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxhcHAtc3BydHJhbnNwb3J0IHN0eWxlPVwiZGlzcGxheTpmbGV4O2ZsZXg6MTAgMCAzMCU7anVzdGlmeS1jb250ZW50OiBjZW50ZXI7YWxpZ24taXRlbXM6IGNlbnRlcjsgYWxpZ24tY29udGVudDogY2VudGVyXCIgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCIgW2FjdGlvbnNdPVwidHJhbnNwb3J0QWN0aW9uc1wiIFtuYXZpZ2F0aW9uRW5hYmxlZF09XCIhaXRlbXMgfHwgaXRlbXMubGVuZ3RoKCk+MVwiPjwvYXBwLXNwcnRyYW5zcG9ydD5cclxuICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDtmbGV4OjEgMSAzMCU7ZmxleC1kaXJlY3Rpb246cm93O2p1c3RpZnktY29udGVudDogZmxleC1lbmQ7YWxpZ24taXRlbXM6IGNlbnRlcjsgYWxpZ24tY29udGVudDogY2VudGVyXCI+XHJcbiAgICAgICAgPGFwcC11cGxvYWRzdGF0dXMgKm5nSWY9XCIhc2NyZWVuWHMgJiYgZW5hYmxlVXBsb2FkUmVjb3JkaW5nc1wiICBjbGFzcz1cInJpY29udHJvbHNcIiAgW3ZhbHVlXT1cInVwbG9hZFByb2dyZXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RhdHVzXT1cInVwbG9hZFN0YXR1c1wiIFthd2FpdE5ld1VwbG9hZF09XCJwcm9jZXNzaW5nUmVjb3JkaW5nXCI+PC9hcHAtdXBsb2Fkc3RhdHVzPlxyXG4gICAgICAgIDxhcHAtd2FrZWxvY2tpbmRpY2F0b3IgKm5nSWY9XCIhc2NyZWVuWHNcIiBjbGFzcz1cInJpY29udHJvbHNcIiBbc2NyZWVuTG9ja2VkXT1cInNjcmVlbkxvY2tlZFwiPjwvYXBwLXdha2Vsb2NraW5kaWNhdG9yPlxyXG4gICAgICAgIDxhcHAtcmVhZHlzdGF0ZWluZGljYXRvciAqbmdJZj1cIiFzY3JlZW5Yc1wiIGNsYXNzPVwicmljb250cm9sc1wiIFtyZWFkeV09XCJkYXRhU2F2ZWQgJiYgIWlzQWN0aXZlKClcIj48L2FwcC1yZWFkeXN0YXRlaW5kaWNhdG9yPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYDpob3N0IHtcclxuICAgIGZsZXg6IDI7XHJcbiAgICBiYWNrZ3JvdW5kOiBsaWdodGdyZXk7XHJcbiAgICBkaXNwbGF5OiBmbGV4OyAvKiBWZXJ0aWNhbCBmbGV4IGNvbnRhaW5lcjogQm90dG9tIHRyYW5zcG9ydCBwYW5lbCwgYWJvdmUgcHJvbXB0aW5nIHBhbmVsICovXHJcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgbWFyZ2luOiAwO1xyXG4gICAgcGFkZGluZzogMDtcclxuICAgIG1pbi1oZWlnaHQ6IDBweDtcclxuXHJcbiAgICAgIC8qIFByZXZlbnRzIGhvcml6b250YWwgc2Nyb2xsIGJhciBvbiBzd2lwZSByaWdodCAqL1xyXG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIH1gLGAucmljb250cm9scyB7XHJcbiAgICAgICAgZGlzcGxheTpmbGV4O1xyXG4gICAgICAgIHBhZGRpbmc6IDRweDtcclxuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xyXG4gICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7YWxpZ24taXRlbXM6IGNlbnRlcjsgYWxpZ24tY29udGVudDogY2VudGVyO1xyXG4gICAgfWAsYC5kYXJrIHtcclxuICAgIGJhY2tncm91bmQ6IGRhcmtncmF5O1xyXG4gIH1gLGAuY29udHJvbHBhbmVsIHtcclxuICAgIGRpc3BsYXk6ZmxleDtcclxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcbiAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgbWFyZ2luOiAwO1xyXG4gICAgcGFkZGluZzogMjBweDtcclxuICAgIG1pbi1oZWlnaHQ6IG1pbi1jb250ZW50OyAvKiBpbXBvcnRhbnQgKi9cclxuICB9YCxgLmF1ZGlvU3RhdHVzRGlzcGxheXtcclxuICAgIGRpc3BsYXk6ZmxleDtcclxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcbiAgICBoZWlnaHQ6MTAwcHg7XHJcbiAgICBtaW4taGVpZ2h0OiAxMDBweDtcclxuICB9YCxgLmF1ZGlvU3RhdHVzRGlzcGxheVhze1xyXG4gICAgZGlzcGxheTpmbGV4O1xyXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgIGhlaWdodDoxMjVweDtcclxuICAgIG1pbi1oZWlnaHQ6IDEyNXB4O1xyXG4gIH1gXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2Vzc2lvbk1hbmFnZXIgZXh0ZW5kcyBCYXNpY1JlY29yZGVyIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCxPbkRlc3Ryb3ksIEF1ZGlvQ2FwdHVyZUxpc3RlbmVyLENodW5rQXVkaW9CdWZmZXJSZWNlaXZlciB7XHJcblxyXG4gIHByaXZhdGUgb2ZmbGluZUF1ZGlvQ29udGV4dDpPZmZsaW5lQXVkaW9Db250ZXh0fG51bGw9bnVsbDtcclxuXHJcbiAgZ2V0IHBlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQoKTogUGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldCB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQ7XHJcbiAgfVxyXG5cclxuICBzZXQgcGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldCh2YWx1ZTogUGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldCB8IG51bGwpIHtcclxuICAgIHRoaXMuX3BlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQgPSB2YWx1ZTtcclxuICAgIGlmKHRoaXMuYWMpIHtcclxuICAgICAgdGhpcy5hYy5wZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0ID0gdGhpcy5wZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgcHJvamVjdE5hbWU6c3RyaW5nfHVuZGVmaW5lZDtcclxuICBlbmFibGVVcGxvYWRSZWNvcmRpbmdzOiBib29sZWFuID0gdHJ1ZTtcclxuICBlbmFibGVEb3dubG9hZFJlY29yZGluZ3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzdGF0dXM6IFN0YXR1cyA9IFN0YXR1cy5CTE9DS0VEO1xyXG5cclxuICBAVmlld0NoaWxkKFByb21wdGluZywgeyBzdGF0aWM6IHRydWUgfSkgcHJvbXB0aW5nITogUHJvbXB0aW5nO1xyXG4gIEBWaWV3Q2hpbGQoTGV2ZWxCYXIsIHsgc3RhdGljOiB0cnVlIH0pIGxpdmVMZXZlbERpc3BsYXkhOiBMZXZlbEJhcjtcclxuXHJcbiAgQElucHV0KCkgZGF0YVNhdmVkPXRydWVcclxuXHJcbiAgc3RhcnRTdG9wU2lnbmFsU3RhdGUhOiBTdGFydFN0b3BTaWduYWxTdGF0ZTtcclxuXHJcbiAgcHJpdmF0ZSBwcmVSZWNUaW1lcklkOiBudW1iZXJ8bnVsbD1udWxsO1xyXG4gIHByaXZhdGUgcHJlUmVjVGltZXJSdW5uaW5nOiBib29sZWFufG51bGw9bnVsbDtcclxuICBwcml2YXRlIHBvc3REZWxheTpudW1iZXI9REVGQVVMVF9QT1NUX1JFQ19ERUxBWTtcclxuICBwcml2YXRlIHBvc3RSZWNUaW1lcklkOiBudW1iZXJ8bnVsbD1udWxsO1xyXG4gIHByaXZhdGUgcG9zdFJlY1RpbWVyUnVubmluZzogYm9vbGVhbnxudWxsPW51bGw7XHJcbiAgLy9wcml2YXRlIG1heFJlY1RpbWVyUnVubmluZzogYm9vbGVhbnxudWxsPW51bGw7XHJcbiAgcHJpdmF0ZSBub25SZWNvcmRpbmdEdXJhdGlvblRpbWVySWQ6IG51bWJlcnxudWxsPW51bGw7XHJcbiAgcHJpdmF0ZSBub25SZWNvcmRpbmdEdXJhdGlvblRpbWVyUnVubmluZzogYm9vbGVhbj1mYWxzZTtcclxuXHJcbiAgYXVkaW86IGFueTtcclxuICBfc2NyaXB0ITogU2NyaXB0O1xyXG4gIHByaXZhdGUgX3Byb21wdEluZGV4PTA7XHJcbiAgcHJpdmF0ZSBzZWN0aW9uITogU2VjdGlvbjtcclxuICBncm91cCE6IEdyb3VwO1xyXG4gIHByb21wdEl0ZW0hOlByb21wdEl0ZW07XHJcbiAgc2hvd1Byb21wdCE6IGJvb2xlYW47XHJcblxyXG4gIC8vIGluZGV4IG9mIGN1cnJlbnQgc2VjdGlvblxyXG4gIHNlY3RJZHghOiBudW1iZXI7XHJcbiAgLy8gaW5kZXggb2YgY3VycmVudCBncm91cCBpbiBzZWN0aW9uXHJcbiAgZ3JvdXBJZHhJblNlY3Rpb24hOiBudW1iZXI7XHJcbiAgLy8gaW5kZXggb2YgY3VycmVudCBwcm9tcHQgaXRlbSBpbiBncm91cFxyXG4gIHByb21wdEl0ZW1JZHhJbkdyb3VwITogbnVtYmVyO1xyXG5cclxuICBwcml2YXRlIGF1dG9yZWNvcmRpbmchOiBib29sZWFuO1xyXG5cclxuICBpdGVtczogU3BySXRlbXNDYWNoZXxudWxsPW51bGw7XHJcbiAgLy9zZWxlY3RlZEl0ZW1JZHg6IG51bWJlcjtcclxuICBwcml2YXRlIF9kaXNwbGF5UmVjRmlsZTogU3ByUmVjb3JkaW5nRmlsZSB8IG51bGw9bnVsbDtcclxuICBwcml2YXRlIGRpc3BsYXlSZWNGaWxlVmVyc2lvbiE6IG51bWJlcjtcclxuXHJcbiAgcHJvbXB0SXRlbUNvdW50ITogbnVtYmVyO1xyXG5cclxuICBzaG93U2Vzc2lvbkNvbXBsZXRlTWVzc2FnZT10cnVlO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgYnBvOkJyZWFrcG9pbnRPYnNlcnZlcixcclxuICAgICAgICAgICAgICBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgICAgICAgICAgIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgICAgICAgICAgIHNlc3Npb25TZXJ2aWNlOlNlc3Npb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgcmVjRmlsZVNlcnZpY2U6UmVjb3JkaW5nU2VydmljZSxcclxuICAgICAgICAgICAgICB1cGxvYWRlcjogU3BlZWNoUmVjb3JkZXJVcGxvYWRlcixcclxuICAgICAgICAgICAgICBASW5qZWN0KFNQRUVDSFJFQ09SREVSX0NPTkZJRykgY29uZmlnPzogU3BlZWNoUmVjb3JkZXJDb25maWcpIHtcclxuICAgIHN1cGVyKGJwbyxjaGFuZ2VEZXRlY3RvclJlZixkaWFsb2csc2Vzc2lvblNlcnZpY2UsdXBsb2FkZXIsY29uZmlnKTtcclxuICAgIHRoaXMuc3RhdHVzID0gU3RhdHVzLklETEU7XHJcbiAgICB0aGlzLmF1ZGlvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F1ZGlvJyk7XHJcbiAgICBpZiAodGhpcy5jb25maWcgJiYgdGhpcy5jb25maWcuZW5hYmxlVXBsb2FkUmVjb3JkaW5ncyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuZW5hYmxlVXBsb2FkUmVjb3JkaW5ncyA9IHRoaXMuY29uZmlnLmVuYWJsZVVwbG9hZFJlY29yZGluZ3M7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jb25maWcgJiYgdGhpcy5jb25maWcuZW5hYmxlRG93bmxvYWRSZWNvcmRpbmdzICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5lbmFibGVEb3dubG9hZFJlY29yZGluZ3MgPSB0aGlzLmNvbmZpZy5lbmFibGVEb3dubG9hZFJlY29yZGluZ3M7XHJcbiAgICB9XHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5zdHJlYW1MZXZlbE1lYXN1cmUubGV2ZWxMaXN0ZW5lciA9IHRoaXMubGl2ZUxldmVsRGlzcGxheTtcclxuICAgIHRoaXMuc3RyZWFtTGV2ZWxNZWFzdXJlLnBlYWtMZXZlbExpc3RlbmVyPShwZWFrTHZsSW5EYik9PntcclxuICAgICAgdGhpcy5wZWFrTGV2ZWxJbkRiPXBlYWtMdmxJbkRiO1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgLy9jb25zb2xlLmRlYnVnKFwiQ29tIGRlc3Ryb3ksIGRpc2FibGUgd2FrZSBsb2NrLlwiKVxyXG4gICAgICB0aGlzLmRpc2FibGVXYWtlTG9ja0NvbmQoKTtcclxuICAgICAgIHRoaXMuZGVzdHJveWVkPXRydWU7XHJcbiAgICAgICAvLyBUT0RPIHN0b3AgY2FwdHVyZSAvcGxheWJhY2tcclxuICAgIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0KCkge1xyXG4gICAgdGhpcy5zZWN0SWR4ID0gMDtcclxuICAgIHRoaXMuZ3JvdXBJZHhJblNlY3Rpb24gPSAwO1xyXG4gICAgdGhpcy5wcm9tcHRJdGVtSWR4SW5Hcm91cCA9IDA7XHJcbiAgICB0aGlzLmF1dG9yZWNvcmRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdGFydEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RvcEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMubmV4dEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RvcE5vbnJlY29yZGluZ0FjdGlvbi5kaXNhYmxlZD10cnVlO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnBhdXNlQWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBsZXQgY29udGV4dDpBdWRpb0NvbnRleHR8bnVsbD1udWxsO1xyXG4gICAgLy8gdHJ5IHtcclxuICAgIC8vICAgY29udGV4dCA9IEF1ZGlvQ29udGV4dFByb3ZpZGVyLmF1ZGlvQ29udGV4dEluc3RhbmNlKCk7XHJcbiAgICAvLyB9IGNhdGNoIChlcnIpIHtcclxuICAgIC8vICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuRVJST1I7XHJcbiAgICAvLyAgIGxldCBlcnJNc2cgPSAnVW5rbm93biBlcnJvcic7XHJcbiAgICAvLyAgIGlmKGVyciBpbnN0YW5jZW9mIEVycm9yKXtcclxuICAgIC8vICAgICBlcnJNc2c9ZXJyLm1lc3NhZ2U7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vICAgdGhpcy5zdGF0dXNNc2cgPSAnRVJST1I6ICcgKyBlcnJNc2c7XHJcbiAgICAvLyAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJztcclxuICAgIC8vICAgdGhpcy5kaWFsb2cub3BlbihNZXNzYWdlRGlhbG9nLCB7XHJcbiAgICAvLyAgICAgZGF0YToge1xyXG4gICAgLy8gICAgICAgdHlwZTogJ2Vycm9yJyxcclxuICAgIC8vICAgICAgIHRpdGxlOiAnRXJyb3InLFxyXG4gICAgLy8gICAgICAgbXNnOiBlcnJNc2csXHJcbiAgICAvLyAgICAgICBhZHZpY2U6ICdQbGVhc2UgdXNlIGEgc3VwcG9ydGVkIGJyb3dzZXIuJyxcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH0pO1xyXG4gICAgLy8gICByZXR1cm47XHJcbiAgICAvLyB9XHJcbiAgICAvLyBpZihjb250ZXh0KSB7XHJcbiAgICAvLyAgIGNvbnNvbGUuaW5mbyhcIlN0YXRlIG9mIGF1ZGlvIGNvbnRleHQ6IFwiICsgY29udGV4dC5zdGF0ZSlcclxuICAgIC8vIH1lbHNle1xyXG4gICAgLy8gICBjb25zb2xlLmluZm8oXCJObyBhdWRpbyBjb250ZXh0IGF2YWlsYWJsZSFcIik7XHJcbiAgICAvLyB9XHJcbiAgICAvLyBpZiAoIWNvbnRleHQgfHwgIW5hdmlnYXRvci5tZWRpYURldmljZXMpIHtcclxuICAgIC8vICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuRVJST1I7XHJcbiAgICAvLyAgIGxldCBlcnJNc2cgPSAnQnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IE1lZGlhIHN0cmVhbXMhJztcclxuICAgIC8vICAgdGhpcy5zdGF0dXNNc2cgPSAnRVJST1I6ICcgKyBlcnJNc2c7XHJcbiAgICAvLyAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJztcclxuICAgIC8vICAgdGhpcy5kaWFsb2cub3BlbihNZXNzYWdlRGlhbG9nLCB7XHJcbiAgICAvLyAgICAgZGF0YToge1xyXG4gICAgLy8gICAgICAgdHlwZTogJ2Vycm9yJyxcclxuICAgIC8vICAgICAgIHRpdGxlOiAnRXJyb3InLFxyXG4gICAgLy8gICAgICAgbXNnOiBlcnJNc2csXHJcbiAgICAvLyAgICAgICBhZHZpY2U6ICdQbGVhc2UgdXNlIGEgc3VwcG9ydGVkIGJyb3dzZXIuJyxcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH0pO1xyXG4gICAgLy8gICByZXR1cm47XHJcbiAgICAvLyB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFjID0gbmV3IEF1ZGlvQ2FwdHVyZSgpO1xyXG4gICAgICBpZiAodGhpcy5hYykge1xyXG4gICAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdGFydEFjdGlvbi5vbkFjdGlvbiA9ICgpID0+IHRoaXMuc3RhcnRJdGVtKCk7XHJcbiAgICAgICAgdGhpcy5hYy5saXN0ZW5lciA9IHRoaXM7XHJcblxyXG4gICAgICAgIHRoaXMuY29uZmlndXJlU3RyZWFtQ2FwdHVyZVN0cmVhbSgpO1xyXG5cclxuICAgICAgICAvLyBEb24ndCBsaXN0IHRoZSBkZXZpY2VzIGhlcmUuIElmIHdlIGRvIG5vdCBoYXZlIGF1ZGlvIHBlcm1pc3Npb25zIHdlIG9ubHkgZ2V0IGFub255bWl6ZWQgZGV2aWNlcyB3aXRob3V0IGxhYmVscy5cclxuICAgICAgICAvL3RoaXMuYWMubGlzdERldmljZXMoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RhcnRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIGxldCBlcnJNc2cgPSAnQnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IE1lZGlhL0F1ZGlvIEFQSSEnO1xyXG4gICAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ0VSUk9SOiAnICsgZXJyTXNnO1xyXG4gICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJztcclxuICAgICAgICB0aGlzLmRpYWxvZy5vcGVuKE1lc3NhZ2VEaWFsb2csIHtcclxuICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcclxuICAgICAgICAgICAgdGl0bGU6ICdFcnJvcicsXHJcbiAgICAgICAgICAgIG1zZzogZXJyTXNnLFxyXG4gICAgICAgICAgICBhZHZpY2U6ICdQbGVhc2UgdXNlIGEgc3VwcG9ydGVkIGJyb3dzZXIuJyxcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BBY3Rpb24ub25BY3Rpb24gPSAoKSA9PiB0aGlzLnN0b3BJdGVtKCk7XHJcbiAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5uZXh0QWN0aW9uLm9uQWN0aW9uID0gKCkgPT4gdGhpcy5zdG9wSXRlbSgpO1xyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMucGF1c2VBY3Rpb24ub25BY3Rpb24gPSAoKSA9PiB0aGlzLnBhdXNlSXRlbSgpO1xyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuZndkQWN0aW9uLm9uQWN0aW9uID0gKCkgPT4gdGhpcy5uZXh0SXRlbSgpO1xyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RvcE5vbnJlY29yZGluZ0FjdGlvbi5vbkFjdGlvbj0oKT0+dGhpcy5zdG9wTm9ucmVjb3JkaW5nKCk7XHJcbiAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5md2ROZXh0QWN0aW9uLm9uQWN0aW9uID0gKCkgPT4gdGhpcy5uZXh0VW5yZWNvcmRlZEl0ZW0oKTtcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLmJ3ZEFjdGlvbi5vbkFjdGlvbiA9ICgpID0+IHRoaXMucHJldkl0ZW0oKTtcclxuICAgICAgdGhpcy5wbGF5U3RhcnRBY3Rpb24ub25BY3Rpb24gPSAoKSA9PiB0aGlzLmNvbnRyb2xBdWRpb1BsYXllcj8uc3RhcnQoKTtcclxuXHJcbiAgICB0aGlzLnN0YXJ0U3RvcFNpZ25hbFN0YXRlID0gU3RhcnRTdG9wU2lnbmFsU3RhdGUuT0ZGO1xyXG5cclxufVxyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5cHJlc3MnLCBbJyRldmVudCddKVxyXG4gIG9uS2V5UHJlc3Moa2U6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGlmIChrZS5rZXkgPT0gJyAnKSB7XHJcbiAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdGFydEFjdGlvbi5wZXJmb3JtKCk7XHJcbiAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5uZXh0QWN0aW9uLnBlcmZvcm0oKTtcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BOb25yZWNvcmRpbmdBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleWRvd24nLCBbJyRldmVudCddKVxyXG4gIG9uS2V5RG93bihrZTogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKGtlLmtleSA9PSAnICcpIHtcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKGtlLmtleSA9PSAncCcpIHtcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnBhdXNlQWN0aW9uLnBlcmZvcm0oKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoa2Uua2V5ID09ICdFc2NhcGUnKSB7XHJcbiAgICAgIGlmKCF0aGlzLmF1ZGlvU2lnbmFsQ29sbGFwc2VkKXtcclxuICAgICAgICB0aGlzLmF1ZGlvU2lnbmFsQ29sbGFwc2VkPXRydWU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMucGF1c2VBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChrZS5rZXkgPT0gJ01lZGlhUGxheVBhdXNlJykge1xyXG4gICAgICB0aGlzLnBsYXlTdGFydEFjdGlvbi5wZXJmb3JtKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoa2Uua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLmZ3ZEFjdGlvbi5wZXJmb3JtKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoa2Uua2V5ID09PSAnQXJyb3dMZWZ0Jykge1xyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuYndkQWN0aW9uLnBlcmZvcm0oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZVdha2VMb2NrKGRhdGFTYXZlZDpib29sZWFuPXRoaXMuZGF0YVNhdmVkKXtcclxuICAgIC8vY29uc29sZS5kZWJ1ZyhcIlVwZGF0ZSB3YWtlIGxvY2s6IGRhdGFTYXZlZDogXCIrZGF0YVNhdmVkK1wiLCBub3QgYWN0aXZlOiBcIishIHRoaXMuaXNBY3RpdmUoKSlcclxuICAgIGlmKGRhdGFTYXZlZCAmJiAhIHRoaXMuaXNBY3RpdmUoKSl7XHJcbiAgICAgIHRoaXMuZGlzYWJsZVdha2VMb2NrQ29uZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvZ3Jlc3NQZXJjZW50VmFsdWUoKTpudW1iZXIge1xyXG4gICAgbGV0IHY9MTAwO1xyXG4gICAgaWYodGhpcy5pdGVtcykge1xyXG4gICAgICB2PXRoaXMucHJvbXB0SW5kZXggKiAxMDAgLyAodGhpcy5pdGVtcy5sZW5ndGgoKSAtIDEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfVxyXG4gIGlzVGVzdFNlc3Npb24oKTpib29sZWFuIHtcclxuICAgIHJldHVybiAoKHRoaXMuX3Nlc3Npb24hPW51bGwpICYmICh0aGlzLl9zZXNzaW9uLnR5cGUgPT09ICdURVNUJyB8fCB0aGlzLl9zZXNzaW9uLnR5cGU9PT0nVEVTVF9ERUZfQScgfHwgdGhpcy5fc2Vzc2lvbi50eXBlID09PSAnU0lOVVNfVEVTVCcpKTtcclxuICB9XHJcblxyXG4gIGlzRGVmYXVsdEF1ZGlvVGVzdFNlc3Npb24oKTpib29sZWFuIHtcclxuICAgIHJldHVybiAoKHRoaXMuX3Nlc3Npb24hPW51bGwpICYmICh0aGlzLl9zZXNzaW9uLnR5cGU9PT0nVEVTVF9ERUZfQScpKTtcclxuICB9XHJcblxyXG4gIGlzRGVmYXVsdEF1ZGlvVGVzdFNlc3Npb25PdmVyd3JpdGluZ1Byb2plY3RSZXF1aXJlbWVudHMoKTpib29sZWFuIHtcclxuICAgIHJldHVybiAoKHRoaXMuX3Nlc3Npb24hPW51bGwpICYmICh0aGlzLl9zZXNzaW9uLnR5cGU9PT0nVEVTVF9ERUZfQScpICYmICh0aGlzLmF1ZGlvRGV2aWNlcyE9bnVsbCkgJiYgdGhpcy5hdWRpb0RldmljZXMubGVuZ3RoPjApXHJcbiAgfVxyXG5cclxuICBzZXQgY29udHJvbEF1ZGlvUGxheWVyKGNvbnRyb2xBdWRpb1BsYXllcjogQXVkaW9QbGF5ZXJ8bnVsbCkge1xyXG4gICAgdGhpcy5fY29udHJvbEF1ZGlvUGxheWVyPWNvbnRyb2xBdWRpb1BsYXllcjtcclxuICAgIGlmICh0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIpIHtcclxuICAgICAgdGhpcy5fY29udHJvbEF1ZGlvUGxheWVyLmxpc3RlbmVyID0gdGhpcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBjb250cm9sQXVkaW9QbGF5ZXIoKTogQXVkaW9QbGF5ZXJ8bnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29udHJvbEF1ZGlvUGxheWVyO1xyXG4gIH1cclxuXHJcbiAgc2V0IHNjcmlwdChzY3JpcHQ6IGFueSkge1xyXG4gICAgdGhpcy5fc2NyaXB0ID0gc2NyaXB0O1xyXG4gICAgdGhpcy5sb2FkU2NyaXB0KCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoZTogQXVkaW9QbGF5ZXJFdmVudCkge1xyXG4gICAgaWYgKGUudHlwZSA9PSBFdmVudFR5cGUuU1RBUlRFRCkge1xyXG4gICAgICB0aGlzLnBsYXlTdGFydEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMudXBkYXRlVGltZXJJZCA9IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgICAgLy90aGlzLmF1ZGlvU2lnbmFsLnBsYXlGcmFtZVBvc2l0aW9uID0gdGhpcy5hcC5wbGF5UG9zaXRpb25GcmFtZXM7XHJcbiAgICAgIH0sIDUwKTtcclxuICAgIH0gZWxzZSBpZiAoZS50eXBlID09IEV2ZW50VHlwZS5TVE9QUEVEIHx8IGUudHlwZSA9PSBFdmVudFR5cGUuRU5ERUQpIHtcclxuICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy51cGRhdGVUaW1lcklkKTtcclxuICAgICAgLy8gdGhpcy5hdWRpb1NpZ25hbC5wbGF5RnJhbWVQb3NpdGlvbiA9IHRoaXMuYXAucGxheVBvc2l0aW9uRnJhbWVzO1xyXG4gICAgICB0aGlzLnBsYXlTdGFydEFjdGlvbi5kaXNhYmxlZCA9ICghKHRoaXMuZGlzcGxheVJlY0ZpbGUpKTtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgcHJvbXB0SW5kZXgoKTpudW1iZXJ7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJvbXB0SW5kZXg7XHJcbiAgfVxyXG5cclxuICBzZXQgcHJvbXB0SW5kZXgocHJvbXB0SW5kZXg6bnVtYmVyKXtcclxuICAgIGlmKHByb21wdEluZGV4PDAgfHwgcHJvbXB0SW5kZXg+PXRoaXMucHJvbXB0SXRlbUNvdW50KXtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUHJvbXB0IGluZGV4IG91dCBvZiByYW5nZVwiKVxyXG4gICAgfVxyXG4gICAgbGV0IGkgPSAwO1xyXG4gICAgbGV0IHNlY3Rpb25zPXRoaXMuX3NjcmlwdC5zZWN0aW9ucztcclxuICAgIGxldCBmb3VuZD1mYWxzZTtcclxuICAgIGZvciAobGV0IHNpID0gMDsgc2kgPCBzZWN0aW9ucy5sZW5ndGggJiYgIWZvdW5kOyBzaSsrKSB7XHJcbiAgICAgIGxldCBzZWN0aW9uID0gc2VjdGlvbnNbc2ldO1xyXG4gICAgICBsZXQgZ3MgPSBzZWN0aW9uLl9zaHVmZmxlZEdyb3VwcztcclxuICAgICAgZm9yIChsZXQgZ2kgPSAwOyBnaSA8IGdzLmxlbmd0aDsgZ2krKykge1xyXG4gICAgICAgIGxldCBwaXM9Z3NbZ2ldLl9zaHVmZmxlZFByb21wdEl0ZW1zO1xyXG5cclxuICAgICAgICBsZXQgcGlzU2l6ZSA9IHBpcy5sZW5ndGg7XHJcbiAgICAgICAgaWYgKHByb21wdEluZGV4IDwgaSArIHBpc1NpemUpIHtcclxuICAgICAgICAgIHRoaXMuc2VjdElkeCA9IHNpO1xyXG4gICAgICAgICAgdGhpcy5ncm91cElkeEluU2VjdGlvbj1naTtcclxuICAgICAgICAgIHRoaXMucHJvbXB0SXRlbUlkeEluR3JvdXAgPSBwcm9tcHRJbmRleCAtIGk7XHJcbiAgICAgICAgICBmb3VuZD10cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGkgKz0gcGlzU2l6ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmKGZvdW5kKXtcclxuICAgICAgdGhpcy5fcHJvbXB0SW5kZXg9cHJvbXB0SW5kZXg7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW50ZXJuYWwgZXJyb3I6IFByb21wdCBpbmRleCBub3QgZm91bmRcIilcclxuICAgIH1cclxuICAgIHRoaXMua2VlcExpdmVMZXZlbD1mYWxzZTtcclxuICAgIHRoaXMuYXBwbHlJdGVtKCk7XHJcbiAgfVxyXG5cclxuICBpdGVtU2VsZWN0KGl0ZW1JZHg6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuc3RhdHVzID09PSBTdGF0dXMuSURMRSkge1xyXG4gICAgICB0aGlzLnByb21wdEluZGV4PWl0ZW1JZHg7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhclByZVJlY1RpbWVyKCkge1xyXG4gICAgaWYgKHRoaXMucHJlUmVjVGltZXJSdW5uaW5nKSB7XHJcbiAgICAgIGlmICh0aGlzLnByZVJlY1RpbWVySWQpIHtcclxuICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMucHJlUmVjVGltZXJJZCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wcmVSZWNUaW1lclJ1bm5pbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJQb3N0UmVjVGltZXIoKXtcclxuICAgIGlmICh0aGlzLnBvc3RSZWNUaW1lclJ1bm5pbmcpIHtcclxuICAgICAgaWYgKHRoaXMucG9zdFJlY1RpbWVySWQpIHtcclxuICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMucG9zdFJlY1RpbWVySWQpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucG9zdFJlY1RpbWVyUnVubmluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhck1heFJlY1RpbWVyKCl7XHJcbiAgICBpZiAodGhpcy5tYXhSZWNUaW1lclJ1bm5pbmcpIHtcclxuICAgICAgaWYgKHRoaXMubWF4UmVjVGltZXJJZCkge1xyXG4gICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5tYXhSZWNUaW1lcklkKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1heFJlY1RpbWVyUnVubmluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhck5vblJlY29yZGluZ0R1cmF0aW9uVGltZXIoKXtcclxuICAgIGlmICh0aGlzLm5vblJlY29yZGluZ0R1cmF0aW9uVGltZXJSdW5uaW5nKSB7XHJcbiAgICAgIGlmICh0aGlzLm5vblJlY29yZGluZ0R1cmF0aW9uVGltZXJJZCkge1xyXG4gICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5ub25SZWNvcmRpbmdEdXJhdGlvblRpbWVySWQpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubm9uUmVjb3JkaW5nRHVyYXRpb25UaW1lclJ1bm5pbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXJ0SXRlbSgpIHtcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5md2RBY3Rpb24uZGlzYWJsZWQgPSB0cnVlXHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuZndkTmV4dEFjdGlvbi5kaXNhYmxlZCA9IHRydWVcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5id2RBY3Rpb24uZGlzYWJsZWQgPSB0cnVlXHJcbiAgICBjb25zdCBpc05vbnJlY29yZGluZz0odGhpcy5wcm9tcHRJdGVtLnR5cGU9PT0nbm9ucmVjb3JkaW5nJyk7XHJcbiAgICBpZihpc05vbnJlY29yZGluZyl7XHJcbiAgICAgIHRoaXMuc3RhdHVzID0gU3RhdHVzLklETEU7XHJcblxyXG4gICAgICB0aGlzLnVwZGF0ZURpc3BsYXlSZWNGaWxlKG51bGwpO1xyXG4gICAgICB0aGlzLmRpc3BsYXlSZWNGaWxlVmVyc2lvbiA9IDA7XHJcbiAgICAgIHRoaXMuZGlzcGxheUF1ZGlvQ2xpcCA9IG51bGw7XHJcbiAgICAgIHRoaXMubGl2ZUxldmVsRGlzcGxheS5yZXNldCh0cnVlKTtcclxuICAgICAgLy8gSGlkZSBsb2FkaW5nIGhpbnQgb24gbGl2ZWxldmVsIGRpc3BsYXlcclxuICAgICAgdGhpcy5saXZlTGV2ZWxEaXNwbGF5U3RhdGUgPSBMaXZlTGV2ZWxTdGF0ZS5SRUFEWTtcclxuICAgICAgdGhpcy5zaG93UmVjb3JkaW5nKCk7XHJcbiAgICAgIGlmICh0aGlzLnNlY3Rpb24ubW9kZSA9PT0gJ0FVVE9SRUNPUkRJTkcnKSB7XHJcbiAgICAgICAgdGhpcy5hdXRvcmVjb3JkaW5nID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBuckR1cmF0aW9uPXRoaXMucHJvbXB0SXRlbS5kdXJhdGlvbjtcclxuICAgICAgaWYodGhpcy5hdXRvcmVjb3JkaW5nICYmIG5yRHVyYXRpb24hPT11bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLm5vblJlY29yZGluZ0R1cmF0aW9uVGltZXJJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMubm9uUmVjb3JkaW5nRHVyYXRpb25UaW1lclJ1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdG9wTm9ucmVjb3JkaW5nQWN0aW9uLmRpc2FibGVkPXRydWU7XHJcbiAgICAgICAgICB0aGlzLnN0YXR1cyA9IFN0YXR1cy5TVE9QUElOR19TVE9QO1xyXG4gICAgICAgICAgdGhpcy5jb250aW51ZVNlc3Npb24oKTtcclxuICAgICAgICB9LCBuckR1cmF0aW9uKTtcclxuICAgICAgICB0aGlzLm5vblJlY29yZGluZ0R1cmF0aW9uVGltZXJSdW5uaW5nID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnN0YXR1cz1TdGF0dXMuTk9OX1JFQ09SRElOR19XQUlUO1xyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RvcE5vbnJlY29yZGluZ0FjdGlvbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgfWVsc2Uge1xyXG4gICAgICB0aGlzLnN0YXR1cyA9IFN0YXR1cy5TVEFSVElORztcclxuICAgICAgc3VwZXIuc3RhcnRJdGVtKCk7XHJcbiAgICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuSURMRTtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy51cGRhdGVEaXNwbGF5UmVjRmlsZShudWxsKTtcclxuICAgICAgdGhpcy5kaXNwbGF5UmVjRmlsZVZlcnNpb24gPSAwO1xyXG4gICAgICB0aGlzLmRpc3BsYXlBdWRpb0NsaXAgPSBudWxsO1xyXG4gICAgICB0aGlzLmxpdmVMZXZlbERpc3BsYXkucmVzZXQodHJ1ZSk7XHJcbiAgICAgIC8vIEhpZGUgbG9hZGluZyBoaW50IG9uIGxpdmVsZXZlbCBkaXNwbGF5XHJcbiAgICAgIHRoaXMubGl2ZUxldmVsRGlzcGxheVN0YXRlID0gTGl2ZUxldmVsU3RhdGUuUkVBRFk7XHJcbiAgICAgIHRoaXMuc2hvd1JlY29yZGluZygpO1xyXG4gICAgICBpZiAodGhpcy5zZWN0aW9uLm1vZGUgPT09ICdBVVRPUkVDT1JESU5HJykge1xyXG4gICAgICAgIHRoaXMuYXV0b3JlY29yZGluZyA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc3RhcnRDYXB0dXJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBsb2FkU2NyaXB0KCkge1xyXG4gICAgdGhpcy5wcm9tcHRJdGVtQ291bnQgPSAwO1xyXG5cclxuICAgIHRoaXMuaXRlbXMgPSBuZXcgU3BySXRlbXNDYWNoZSgpO1xyXG4gICAgbGV0IGxuID0gMDtcclxuXHJcbiAgICAvL1RPRE8gcmFuZG9taXplIG5vdCBzdXBwb3J0ZWRcclxuICAgIGZvciAobGV0IHNpID0gMDsgc2kgPCB0aGlzLl9zY3JpcHQuc2VjdGlvbnMubGVuZ3RoOyBzaSsrKSB7XHJcbiAgICAgIGxldCBzZWN0aW9uID0gdGhpcy5fc2NyaXB0LnNlY3Rpb25zW3NpXTtcclxuICAgICAgbGV0IGdzID0gc2VjdGlvbi5fc2h1ZmZsZWRHcm91cHM7XHJcbiAgICAgIGZvcihsZXQgZ2k9MDtnaTxncy5sZW5ndGg7Z2krKykge1xyXG5cclxuICAgICAgICAgIGxldCBwaXMgPSBnc1tnaV0uX3NodWZmbGVkUHJvbXB0SXRlbXM7XHJcblxyXG4gICAgICAgICAgbGV0IHBpc0xlbiA9IHBpcy5sZW5ndGg7XHJcbiAgICAgICAgICB0aGlzLnByb21wdEl0ZW1Db3VudCArPSBwaXNMZW47XHJcbiAgICAgICAgICBmb3IgKGxldCBwaVNlY3RJZHggPSAwOyBwaVNlY3RJZHggPCBwaXNMZW47IHBpU2VjdElkeCsrKSB7XHJcbiAgICAgICAgICAgIGxldCBwaSA9IHBpc1twaVNlY3RJZHhdO1xyXG4gICAgICAgICAgICBsZXQgcHJvbXB0QXNTdHIgPSBQcm9tcHRpdGVtVXRpbC50b1BsYWluVGV4dFN0cmluZyhwaSk7XHJcblxyXG4gICAgICAgICAgICBsZXQgaXQgPSBuZXcgSXRlbShwcm9tcHRBc1N0ciwgc2VjdGlvbi50cmFpbmluZywoIXBpLnR5cGUgfHwgcGkudHlwZT09PSdyZWNvcmRpbmcnKSk7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMuYWRkSXRlbShpdCk7XHJcbiAgICAgICAgICAgIGxuKys7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb21wdEluZGV4QnlJdGVtY29kZShpdGVtY29kZTpzdHJpbmcpOm51bWJlcnxudWxse1xyXG4gICAgbGV0IHBpeCA9IDA7XHJcblxyXG4gICAgZm9yIChsZXQgc2kgPSAwOyBzaSA8IHRoaXMuX3NjcmlwdC5zZWN0aW9ucy5sZW5ndGg7IHNpKyspIHtcclxuICAgICAgbGV0IHNlY3Rpb24gPSB0aGlzLl9zY3JpcHQuc2VjdGlvbnNbc2ldO1xyXG4gICAgICBsZXQgZ3MgPSBzZWN0aW9uLl9zaHVmZmxlZEdyb3VwcztcclxuICAgICAgZm9yKGxldCBnaT0wO2dpPGdzLmxlbmd0aDtnaSsrKSB7XHJcbiAgICAgICAgbGV0IHBpcz1nc1tnaV0uX3NodWZmbGVkUHJvbXB0SXRlbXM7XHJcbiAgICAgICAgbGV0IHBpc0xlbiA9IHBpcy5sZW5ndGg7XHJcbiAgICAgICAgZm9yIChsZXQgcGlTZWN0SWR4ID0gMDsgcGlTZWN0SWR4IDwgcGlzTGVuOyBwaVNlY3RJZHgrKykge1xyXG4gICAgICAgICAgbGV0IHBpID0gcGlzW3BpU2VjdElkeF07XHJcbiAgICAgICAgICBsZXQgaWM9cGkuaXRlbWNvZGU7XHJcbiAgICAgICAgICBpZihpYyA9PT0gaXRlbWNvZGUpe1xyXG4gICAgICAgICAgICByZXR1cm4gcGl4O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcGl4Kys7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGNsZWFyUHJvbXB0KCkge1xyXG4gICAgLy90aGlzLnByb21wdGluZy5wcm9tcHRDb250YWluZXIucHJvbXB0ZXIucHJvbXB0VGV4dD0nJztcclxuICAgIC8vdGhpcy5tZWRpYWl0ZW0gPSBudWxsO1xyXG4gICAgdGhpcy5zaG93UHJvbXB0ID0gZmFsc2U7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKVxyXG4gIH1cclxuXHJcbiAgYXBwbHlQcm9tcHQoKSB7XHJcbiAgICAvL3RoaXMucHJvbXB0aW5nLnByb21wdENvbnRhaW5lci5wcm9tcHRlci5wcm9tcHRUZXh0PXRoaXMucHJvbXB0VW5pdC5tZWRpYWl0ZW1zWzBdLnRleHQ7XHJcbiAgICAvL3RoaXMucHJvbXB0VGV4dCA9IHRoaXMucHJvbXB0VW5pdC5tZWRpYWl0ZW1zWzBdLnRleHQ7XHJcbiAgICAvL3RoaXMubWVkaWFpdGVtPXRoaXMucHJvbXB0VW5pdC5tZWRpYWl0ZW1zWzBdO1xyXG4gICAgdGhpcy5zaG93UHJvbXB0ID0gdHJ1ZTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgfVxyXG5cclxuICBkb3dubG9hZFJlY29yZGluZygpIHtcclxuICAgIGlmICh0aGlzLmRpc3BsYXlSZWNGaWxlKSB7XHJcbiAgICAgIGxldCBhZGg6IEF1ZGlvRGF0YUhvbGRlciB8IG51bGwgPSB0aGlzLmRpc3BsYXlSZWNGaWxlLmF1ZGlvRGF0YUhvbGRlcjtcclxuICAgICAgbGV0IGFzOiBBdWRpb1NvdXJjZXxudWxsPW51bGw7XHJcbiAgICAgIGlmKGFkaCl7XHJcbiAgICAgICAgYXM9YWRoLmF1ZGlvU291cmNlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHd3ID0gbmV3IFdhdldyaXRlcih0aGlzLl9jbGllbnRNZWRpYVN0b3JhZ2VGb3JtYXQ/LmF1ZGlvRW5jb2Rpbmc9PT1BdWRpb1N0b3JhZ2VGb3JtYXRFbmNvZGluZy5QQ01fRkxPQVQsdGhpcy5fY2xpZW50TWVkaWFTdG9yYWdlRm9ybWF0Py5hdWRpb1BDTXNhbXBsZVNpemVJbkJpdHMpO1xyXG4gICAgICBpZihhcyBpbnN0YW5jZW9mIEF1ZGlvQnVmZmVyU291cmNlKSB7XHJcbiAgICAgICAgd3cud3JpdGVBc3luYyhhcy5hdWRpb0J1ZmZlciwgKHdhdkZpbGUpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbd2F2RmlsZV0sIHt0eXBlOiAnYXVkaW8vd2F2J30pO1xyXG4gICAgICAgICAgY29uc3QgcmZVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGRhdGFEbmxMbmsgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgICAgIC8vZGF0YURubExuay5uYW1lID0gJ1JlY29yZGluZyc7XHJcbiAgICAgICAgICBkYXRhRG5sTG5rLmhyZWYgPSByZlVybDtcclxuXHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGRvY3VtZW50LmJvZHksIGRhdGFEbmxMbmspO1xyXG5cclxuICAgICAgICAgIC8vIGRvd25sb2FkIHByb3BlcnR5IG5vdCB5ZXQgaW4gVFMgZGVmXHJcbiAgICAgICAgICBpZiAodGhpcy5kaXNwbGF5UmVjRmlsZSkge1xyXG4gICAgICAgICAgICBsZXQgZm4gPSB0aGlzLmRpc3BsYXlSZWNGaWxlLmZpbGVuYW1lU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGZuICs9ICdfJyArIHRoaXMuZGlzcGxheVJlY0ZpbGVWZXJzaW9uO1xyXG4gICAgICAgICAgICBmbiArPSAnLndhdic7XHJcbiAgICAgICAgICAgIGRhdGFEbmxMbmsuZG93bmxvYWQgPSBmbjtcclxuICAgICAgICAgICAgZGF0YURubExuay5jbGljaygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZChkb2N1bWVudC5ib2R5LCBkYXRhRG5sTG5rKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0IGRpc3BsYXlSZWNGaWxlKGRpc3BsYXlSZWNGaWxlOiBTcHJSZWNvcmRpbmdGaWxlIHwgbnVsbCkge1xyXG4gICAgdGhpcy5fZGlzcGxheVJlY0ZpbGUgPSBkaXNwbGF5UmVjRmlsZTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCB1cGRhdGVEaXNwbGF5UmVjRmlsZShkaXNwbGF5UmVjRmlsZTogU3ByUmVjb3JkaW5nRmlsZSB8IG51bGwsZmV0Y2hBbmRBcHBseVJlY29yZGluZ0ZpbGU6Ym9vbGVhbj10cnVlKSB7XHJcbiAgICB0aGlzLmRpc3BsYXlSZWNGaWxlPWRpc3BsYXlSZWNGaWxlO1xyXG4gICAgaWYgKHRoaXMuX2Rpc3BsYXlSZWNGaWxlKSB7XHJcbiAgICAgIGlmKHRoaXMuaXRlbXMpIHtcclxuICAgICAgICB0aGlzLml0ZW1zLmN1cnJlbnRSZWNvcmRpbmdGaWxlID0gdGhpcy5fZGlzcGxheVJlY0ZpbGU7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGFkaDogQXVkaW9EYXRhSG9sZGVyfCBudWxsID0gdGhpcy5fZGlzcGxheVJlY0ZpbGUuYXVkaW9EYXRhSG9sZGVyO1xyXG4gICAgICBpZihhZGgpIHtcclxuICAgICAgICB0aGlzLmRpc3BsYXlBdWRpb0NsaXAgPSBuZXcgQXVkaW9DbGlwKGFkaCk7XHJcbiAgICAgICAgaWYodGhpcy5fY29udHJvbEF1ZGlvUGxheWVyKSB7XHJcbiAgICAgICAgICB0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIuYXVkaW9DbGlwID0gdGhpcy5kaXNwbGF5QXVkaW9DbGlwO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNob3dSZWNvcmRpbmcoKTtcclxuICAgICAgfWVsc2Uge1xyXG4gICAgICAgIC8vIGNsZWFyIGZvciBub3cgLi4uXHJcbiAgICAgICAgdGhpcy5kaXNwbGF5QXVkaW9DbGlwID0gbnVsbDtcclxuICAgICAgICBpZih0aGlzLmNvbnRyb2xBdWRpb1BsYXllcikge1xyXG4gICAgICAgICAgdGhpcy5jb250cm9sQXVkaW9QbGF5ZXIuYXVkaW9DbGlwID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoZmV0Y2hBbmRBcHBseVJlY29yZGluZ0ZpbGUpIHtcclxuICAgICAgICAgIGlmICh0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIgJiYgdGhpcy5fc2Vzc2lvbikge1xyXG4gICAgICAgICAgICAvLy4uLiBhbmQgdHJ5IHRvIGZldGNoIGZyb20gc2VydmVyXHJcbiAgICAgICAgICAgIHRoaXMubGl2ZUxldmVsRGlzcGxheVN0YXRlID0gTGl2ZUxldmVsU3RhdGUuTE9BRElORztcclxuICAgICAgICAgICAgY29uc3QgcmYgPSB0aGlzLl9kaXNwbGF5UmVjRmlsZTtcclxuXHJcbiAgICAgICAgICAgIGxldCBhdWRpb0Rvd25sb2FkVHlwZSA9IHRoaXMuX2NsaWVudEF1ZGlvU3RvcmFnZVR5cGU7XHJcbiAgICAgICAgICAgIGlmIChBdWRpb1N0b3JhZ2VUeXBlLk1FTV9FTlRJUkVfQVVUT19ORVRfQ0hVTktFRCA9PT0gdGhpcy5fY2xpZW50QXVkaW9TdG9yYWdlVHlwZSB8fCBBdWRpb1N0b3JhZ2VUeXBlLk1FTV9DSFVOS0VEX0FVVE9fTkVUX0NIVU5LRUQgPT09IHRoaXMuX2NsaWVudEF1ZGlvU3RvcmFnZVR5cGUpIHtcclxuICAgICAgICAgICAgICAvLyBEZWZhdWx0IGlzIG5ldHdvcmsgbW9kZVxyXG4gICAgICAgICAgICAgIGF1ZGlvRG93bmxvYWRUeXBlID0gQXVkaW9TdG9yYWdlVHlwZS5ORVRfQ0hVTktFRDtcclxuICAgICAgICAgICAgICBpZiAocmYuY2hhbm5lbHMgJiYgcmYuZnJhbWVzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzYW1wbGVzID0gcmYuY2hhbm5lbHMgKiByZi5mcmFtZXM7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2FtcGxlcyA8PSB0aGlzLl9tYXhBdXRvTmV0TWVtU3RvcmVTYW1wbGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIEJ1dCBpZiBhdWRpbyBmaWxlIGlzIHNtYWxsLCBsb2FkIGluIGNvbnRpbnVvdXMgcmVzcC4gY2h1bmtlZCBtb2RlXHJcbiAgICAgICAgICAgICAgICAgIGlmIChBdWRpb1N0b3JhZ2VUeXBlLk1FTV9FTlRJUkVfQVVUT19ORVRfQ0hVTktFRCA9PT0gdGhpcy5fY2xpZW50QXVkaW9TdG9yYWdlVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF1ZGlvRG93bmxvYWRUeXBlID0gQXVkaW9TdG9yYWdlVHlwZS5NRU1fRU5USVJFO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKEF1ZGlvU3RvcmFnZVR5cGUuTUVNX0NIVU5LRURfQVVUT19ORVRfQ0hVTktFRCA9PT0gdGhpcy5fY2xpZW50QXVkaW9TdG9yYWdlVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF1ZGlvRG93bmxvYWRUeXBlID0gQXVkaW9TdG9yYWdlVHlwZS5NRU1fQ0hVTktFRDtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKFwiQXVkaW8gZG93bmxvYWQgdHlwZTogXCIgKyBhdWRpb0Rvd25sb2FkVHlwZSk7XHJcbiAgICAgICAgICAgIGlmIChBdWRpb1N0b3JhZ2VUeXBlLkRCX0NIVU5LRUQgPT09IHRoaXMuX2NsaWVudEF1ZGlvU3RvcmFnZVR5cGUpIHtcclxuICAgICAgICAgICAgICAvLyBGZXRjaCBjaHVua2VkIGluZGV4ZWQgZGIgYXVkaW8gYnVmZmVyXHJcbiAgICAgICAgICAgICAgbGV0IG5leHRJYWI6IEluZGV4ZWREYkF1ZGlvQnVmZmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLl9wZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignRXJyb3I6IFBlcnNpc3RlbnQgc3RvcmFnZSB0YXJnZXQgbm90IHNldC4nKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiRmV0Y2ggYXVkaW8gYW5kIHN0b3JlIHRvIGluZGV4ZWQgZGIuLi5cIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF1ZGlvRmV0Y2hTdWJzY3JpcHRpb24gPSB0aGlzLnJlY0ZpbGVTZXJ2aWNlLmZldGNoU3ByUmVjb3JkaW5nRmlsZUluZERiQXVkaW9CdWZmZXIodGhpcy5fcGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldCwgdGhpcy5fc2Vzc2lvbi5wcm9qZWN0LCByZikuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgbmV4dDogKGlhYikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlNlc3Npb25tYW5hZ2VyOiBSZWNlaXZlZCBpbmRkYiBhdWRpbyBidWZmZXI6IFwiK2lhYik7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dElhYiA9IGlhYjtcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpdmVMZXZlbERpc3BsYXlTdGF0ZSA9IExpdmVMZXZlbFN0YXRlLlJFQURZO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmYWJEaCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRJYWIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChyZiAmJiB0aGlzLml0ZW1zKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWJEaCA9IG5ldyBBdWRpb0RhdGFIb2xkZXIobmV4dElhYik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMuc2V0U3ByUmVjRmlsZUF1ZGlvRGF0YShyZiwgZmFiRGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBTaG91bGQgYWN0dWFsbHkgYmUgaGFuZGxlZCBieSB0aGUgZXJyb3IgcmVzb2x2ZXJcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ1JlY29yZGluZyBmaWxlIGNvdWxkIG5vdCBiZSBsb2FkZWQuJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnZXJyb3InXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmYWJEaCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5kaXNwbGF5QXVkaW9DbGlwIGNvdWxkIGhhdmUgYmVlbiBjaGFuZ2VkIG1lYW53aGlsZSwgYnV0IHRoZSByZWNvcmRlciB1bnN1YmNyaWJlcyBiZWZvcmUgY2hhbmdpbmcgdGhlIGl0ZW0sIHRoZXJlZm9yZSB0aGVyZSBzaG91bGQgYmUgbm8gcmlzayB0byBzZXQgdG8gd3JvbmcgaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5QXVkaW9DbGlwID0gbmV3IEF1ZGlvQ2xpcChmYWJEaCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udHJvbEF1ZGlvUGxheWVyLmF1ZGlvQ2xpcCA9IHRoaXMuZGlzcGxheUF1ZGlvQ2xpcFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dSZWNvcmRpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgZXJyb3I6IGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkNvdWxkIG5vdCBsb2FkIHJlY29yZGluZyBmaWxlIGZyb20gc2VydmVyOiBcIiArIGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saXZlTGV2ZWxEaXNwbGF5U3RhdGUgPSBMaXZlTGV2ZWxTdGF0ZS5SRUFEWTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXR1c01zZyA9ICdSZWNvcmRpbmcgZmlsZSBjb3VsZCBub3QgYmUgbG9hZGVkOiAnICsgZXJyO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKEF1ZGlvU3RvcmFnZVR5cGUuTkVUX0NIVU5LRUQgPT09IGF1ZGlvRG93bmxvYWRUeXBlKSB7XHJcbiAgICAgICAgICAgICAgLy8gRmV0Y2ggY2h1bmtlZCBhdWRpbyBidWZmZXIgZnJvbSBuZXR3b3JrXHJcbiAgICAgICAgICAgICAgbGV0IG5leHROZXRBYjogTmV0QXVkaW9CdWZmZXIgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiRmV0Y2ggY2h1bmtlZCBhdWRpbyBmcm9tIG5ldHdvcmtcIik7XHJcbiAgICAgICAgICAgICAgdGhpcy5hdWRpb0ZldGNoU3Vic2NyaXB0aW9uID0gdGhpcy5yZWNGaWxlU2VydmljZS5mZXRjaFNwclJlY29yZGluZ0ZpbGVOZXRBdWRpb0J1ZmZlciggdGhpcy5fc2Vzc2lvbi5wcm9qZWN0LCByZikuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgIG5leHQ6IChuZXRBYikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJTZXNzaW9ubWFuYWdlcjogUmVjZWl2ZWQgbmV0IGF1ZGlvIGJ1ZmZlcjogXCIrbmV0QWIpO1xyXG4gICAgICAgICAgICAgICAgICBuZXh0TmV0QWIgPSBuZXRBYjtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmxpdmVMZXZlbERpc3BsYXlTdGF0ZSA9IExpdmVMZXZlbFN0YXRlLlJFQURZO1xyXG4gICAgICAgICAgICAgICAgICBsZXQgZmFiRGggPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICBpZiAobmV4dE5ldEFiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJmICYmIHRoaXMuaXRlbXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGZhYkRoID0gbmV3IEF1ZGlvRGF0YUhvbGRlcihuZXh0TmV0QWIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5zZXRTcHJSZWNGaWxlQXVkaW9EYXRhKHJmLCBmYWJEaCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFNob3VsZCBhY3R1YWxseSBiZSBoYW5kbGVkIGJ5IHRoZSBlcnJvciByZXNvbHZlclxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ1JlY29yZGluZyBmaWxlIGNvdWxkIG5vdCBiZSBsb2FkZWQuJ1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJ1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGlmIChmYWJEaCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZGlzcGxheUF1ZGlvQ2xpcCBjb3VsZCBoYXZlIGJlZW4gY2hhbmdlZCBtZWFud2hpbGUsIGJ1dCB0aGUgcmVjb3JkZXIgdW5zdWJjcmliZXMgYmVmb3JlIGNoYW5naW5nIHRoZSBpdGVtLCB0aGVyZWZvcmUgdGhlcmUgc2hvdWxkIGJlIG5vIHJpc2sgdG8gc2V0IHRvIHdyb25nIGl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJzZXQgZGlzcGxheVJlY0ZpbGUoKTogZmV0Y2ggbmV0IGFiIGNvbXBsZXRlLCBzZXQgZGlzcGxheUF1ZGlvQ2xpcC5cIilcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlBdWRpb0NsaXAgPSBuZXcgQXVkaW9DbGlwKGZhYkRoKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBpZih0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIuYXVkaW9DbGlwID0gdGhpcy5kaXNwbGF5QXVkaW9DbGlwO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1JlY29yZGluZygpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQ291bGQgbm90IGxvYWQgcmVjb3JkaW5nIGZpbGUgZnJvbSBzZXJ2ZXI6IFwiICsgZXJyKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5saXZlTGV2ZWxEaXNwbGF5U3RhdGUgPSBMaXZlTGV2ZWxTdGF0ZS5SRUFEWTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVjb3JkaW5nIGZpbGUgY291bGQgbm90IGJlIGxvYWRlZDogJyArIGVycjtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnZXJyb3InO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoQXVkaW9TdG9yYWdlVHlwZS5NRU1fQ0hVTktFRCA9PT0gYXVkaW9Eb3dubG9hZFR5cGUpIHtcclxuICAgICAgICAgICAgICAvLyBGZXRjaCBjaHVua2VkIGFycmF5IGF1ZGlvIGJ1ZmZlclxyXG4gICAgICAgICAgICAgIGxldCBuZXh0QWFiOiBBcnJheUF1ZGlvQnVmZmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiRmV0Y2ggYXVkaW8gYW5kIHN0b3JlIHRvIChjaHVua2VkKSBhcnJheSBidWZmZXIuLi5cIik7XHJcbiAgICAgICAgICAgICAgdGhpcy5hdWRpb0ZldGNoU3Vic2NyaXB0aW9uID0gdGhpcy5yZWNGaWxlU2VydmljZS5mZXRjaFNwclJlY29yZGluZ0ZpbGVBcnJheUF1ZGlvQnVmZmVyKCB0aGlzLl9zZXNzaW9uLnByb2plY3QsIHJmKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgbmV4dDogKGFhYikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBuZXh0QWFiID0gYWFiO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubGl2ZUxldmVsRGlzcGxheVN0YXRlID0gTGl2ZUxldmVsU3RhdGUuUkVBRFk7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBmYWJEaCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChuZXh0QWFiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJmICYmIHRoaXMuaXRlbXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGZhYkRoID0gbmV3IEF1ZGlvRGF0YUhvbGRlcihuZXh0QWFiKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMuc2V0U3ByUmVjRmlsZUF1ZGlvRGF0YShyZiwgZmFiRGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBTaG91bGQgYWN0dWFsbHkgYmUgaGFuZGxlZCBieSB0aGUgZXJyb3IgcmVzb2x2ZXJcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXR1c01zZyA9ICdSZWNvcmRpbmcgZmlsZSBjb3VsZCBub3QgYmUgbG9hZGVkLidcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdlcnJvcidcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBpZiAoZmFiRGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmRpc3BsYXlBdWRpb0NsaXAgY291bGQgaGF2ZSBiZWVuIGNoYW5nZWQgbWVhbndoaWxlLCBidXQgdGhlIHJlY29yZGVyIHVuc3ViY3JpYmVzIGJlZm9yZSBjaGFuZ2luZyB0aGUgaXRlbSwgdGhlcmVmb3JlIHRoZXJlIHNob3VsZCBiZSBubyByaXNrIHRvIHNldCB0byB3cm9uZyBpdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5QXVkaW9DbGlwID0gbmV3IEF1ZGlvQ2xpcChmYWJEaCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYodGhpcy5fY29udHJvbEF1ZGlvUGxheWVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udHJvbEF1ZGlvUGxheWVyLmF1ZGlvQ2xpcCA9IHRoaXMuZGlzcGxheUF1ZGlvQ2xpcFxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1JlY29yZGluZygpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQ291bGQgbm90IGxvYWQgcmVjb3JkaW5nIGZpbGUgZnJvbSBzZXJ2ZXI6IFwiICsgZXJyKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5saXZlTGV2ZWxEaXNwbGF5U3RhdGUgPSBMaXZlTGV2ZWxTdGF0ZS5SRUFEWTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVjb3JkaW5nIGZpbGUgY291bGQgbm90IGJlIGxvYWRlZDogJyArIGVycjtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnZXJyb3InO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAvLyBGZXRjaCByZWd1bGFyIGF1ZGlvIGJ1ZmZlclxyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkZldGNoIGF1ZGlvIGFuZCBzdG9yZSB0byBhdWRpbyBidWZmZXIuLi5cIik7XHJcbiAgICAgICAgICAgICAgdGhpcy5hdWRpb0ZldGNoU3Vic2NyaXB0aW9uID0gdGhpcy5yZWNGaWxlU2VydmljZS5mZXRjaFNwclJlY29yZGluZ0ZpbGVBdWRpb0J1ZmZlciggdGhpcy5fc2Vzc2lvbi5wcm9qZWN0LCByZikuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgIG5leHQ6IChhYikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmxpdmVMZXZlbERpc3BsYXlTdGF0ZSA9IExpdmVMZXZlbFN0YXRlLlJFQURZO1xyXG4gICAgICAgICAgICAgICAgICBsZXQgZmFiRGggPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoYWIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmYgJiYgdGhpcy5pdGVtcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKFNlc3Npb25NYW5hZ2VyLkZPUkNFX0FSUlJBWV9BVURJT19CVUZGRVIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFhYiA9IEFycmF5QXVkaW9CdWZmZXIuZnJvbUF1ZGlvQnVmZmVyKGFiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmFiRGggPSBuZXcgQXVkaW9EYXRhSG9sZGVyKGFhYik7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWJEaCA9IG5ldyBBdWRpb0RhdGFIb2xkZXIobmV3IEF1ZGlvQnVmZmVyU291cmNlKGFiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLnNldFNwclJlY0ZpbGVBdWRpb0RhdGEocmYsIGZhYkRoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2hvdWxkIGFjdHVhbGx5IGJlIGhhbmRsZWQgYnkgdGhlIGVycm9yIHJlc29sdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVjb3JkaW5nIGZpbGUgY291bGQgbm90IGJlIGxvYWRlZC4nXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnZXJyb3InXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKGZhYkRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5kaXNwbGF5QXVkaW9DbGlwIGNvdWxkIGhhdmUgYmVlbiBjaGFuZ2VkIG1lYW53aGlsZSwgYnV0IHRoZSByZWNvcmRlciB1bnN1YmNyaWJlcyBiZWZvcmUgY2hhbmdpbmcgdGhlIGl0ZW0sIHRoZXJlZm9yZSB0aGVyZSBzaG91bGQgYmUgbm8gcmlzayB0byBzZXQgdG8gd3JvbmcgaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheUF1ZGlvQ2xpcCA9IG5ldyBBdWRpb0NsaXAoZmFiRGgpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGlmKHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllci5hdWRpb0NsaXAgPSB0aGlzLmRpc3BsYXlBdWRpb0NsaXBcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNob3dSZWNvcmRpbmcoKTtcclxuICAgICAgICAgICAgICAgIH0sIGVycm9yOiBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQ291bGQgbm90IGxvYWQgcmVjb3JkaW5nIGZpbGUgZnJvbSBzZXJ2ZXI6IFwiICsgZXJyKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5saXZlTGV2ZWxEaXNwbGF5U3RhdGUgPSBMaXZlTGV2ZWxTdGF0ZS5SRUFEWTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVjb3JkaW5nIGZpbGUgY291bGQgbm90IGJlIGxvYWRlZDogJyArIGVycjtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnZXJyb3InO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXR1c01zZyA9ICdSZWNvcmRpbmcgZmlsZSBjb3VsZCBub3QgYmUgZGVjb2RlZC4gQXVkaW8gY29udGV4dCB1bmF2YWlsYWJsZS4nXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGlzcGxheUF1ZGlvQ2xpcCA9IG51bGw7XHJcbiAgICAgIGlmKHRoaXMuY29udHJvbEF1ZGlvUGxheWVyKSB7XHJcbiAgICAgICAgdGhpcy5jb250cm9sQXVkaW9QbGF5ZXIuYXVkaW9DbGlwID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGRpc3BsYXlSZWNGaWxlKCk6IFNwclJlY29yZGluZ0ZpbGUgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl9kaXNwbGF5UmVjRmlsZTtcclxuICB9XHJcblxyXG4gIGlzUmVjb3JkaW5nSXRlbSgpOmJvb2xlYW57XHJcbiAgICByZXR1cm4odGhpcy5wcm9tcHRJdGVtIT1udWxsICYmIHRoaXMucHJvbXB0SXRlbS50eXBlIT09J25vbnJlY29yZGluZycpXHJcbiAgfVxyXG5cclxuICB1cGRhdGVTdGFydEFjdGlvbkRpc2FibGVTdGF0ZSgpe1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0YXJ0QWN0aW9uLmRpc2FibGVkPSEodGhpcy5hYyAgJiYgdGhpcy5pc1JlY29yZGluZ0l0ZW0oKSk7XHJcbiAgfVxyXG5cclxuICBhcHBseUl0ZW0odGVtcG9yYXJ5PWZhbHNlKSB7XHJcblxyXG4gICAgdGhpcy5zZWN0aW9uID0gdGhpcy5fc2NyaXB0LnNlY3Rpb25zW3RoaXMuc2VjdElkeF1cclxuICAgIHRoaXMuZ3JvdXAgPSB0aGlzLnNlY3Rpb24uX3NodWZmbGVkR3JvdXBzW3RoaXMuZ3JvdXBJZHhJblNlY3Rpb25dO1xyXG4gICAgdGhpcy5wcm9tcHRJdGVtID0gdGhpcy5ncm91cC5fc2h1ZmZsZWRQcm9tcHRJdGVtc1t0aGlzLnByb21wdEl0ZW1JZHhJbkdyb3VwXTtcclxuXHJcbiAgICAvL3RoaXMuc2VsZWN0ZWRJdGVtSWR4ID0gdGhpcy5wcm9tcHRJbmRleDtcclxuXHJcbiAgICBpZih0aGlzLmF1ZGlvRmV0Y2hTdWJzY3JpcHRpb24pe1xyXG4gICAgICAvL2NvbnNvbGUuZGVidWcoXCJVbnN1YnNjcmliZSBmcm9tIGF1ZGlvIGZldGNoLlwiKTtcclxuICAgICAgdGhpcy5hdWRpb0ZldGNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRlbXBvcmFyeSkge1xyXG4gICAgICB0aGlzLmRpc3BsYXlBdWRpb0NsaXA9bnVsbDtcclxuICAgICAgdGhpcy5zaG93UmVjb3JkaW5nKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmxpdmVMZXZlbERpc3BsYXlTdGF0ZT1MaXZlTGV2ZWxTdGF0ZS5SRUFEWTtcclxuXHJcbiAgICB0aGlzLmNsZWFyUHJvbXB0KCk7XHJcblxyXG4gICAgY29uc3QgaXNOb25yZWNvcmRpbmc9KHRoaXMucHJvbXB0SXRlbS50eXBlPT09J25vbnJlY29yZGluZycpO1xyXG5cclxuICAgIGlmIChpc05vbnJlY29yZGluZyB8fCAhdGhpcy5zZWN0aW9uLnByb21wdHBoYXNlIHx8IHRoaXMuc2VjdGlvbi5wcm9tcHRwaGFzZSA9PT0gJ0lETEUnKSB7XHJcbiAgICAgIHRoaXMuYXBwbHlQcm9tcHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZihpc05vbnJlY29yZGluZyl7XHJcbiAgICAgIHRoaXMudXBkYXRlRGlzcGxheVJlY0ZpbGUobnVsbCk7XHJcbiAgICAgIHRoaXMuZGlzcGxheVJlY0ZpbGVWZXJzaW9uID0gMDtcclxuICAgICAgdGhpcy5zdGFydFN0b3BTaWduYWxTdGF0ZSA9IFN0YXJ0U3RvcFNpZ25hbFN0YXRlLk9GRjtcclxuICAgIH1lbHNlIHtcclxuICAgICAgaWYgKHRoaXMuaXRlbXMpIHtcclxuICAgICAgICBsZXQgaXQgPSB0aGlzLml0ZW1zLmdldEl0ZW0odGhpcy5wcm9tcHRJbmRleCk7XHJcbiAgICAgICAgaWYgKCFpdC5yZWNzKSB7XHJcbiAgICAgICAgICBpdC5yZWNzID0gbmV3IEFycmF5PFNwclJlY29yZGluZ0ZpbGU+KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcmVjZW50UmVjRmlsZTogU3ByUmVjb3JkaW5nRmlsZSB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgIGxldCBhdmFpbFJlY2ZpbGVzOiBudW1iZXIgPSBpdC5yZWNzLmxlbmd0aDtcclxuICAgICAgICBpZiAoYXZhaWxSZWNmaWxlcyA+IDApIHtcclxuICAgICAgICAgIGxldCByZlZlcnM6IG51bWJlciA9IGF2YWlsUmVjZmlsZXMgLSAxO1xyXG4gICAgICAgICAgcmVjZW50UmVjRmlsZSA9IGl0LnJlY3NbcmZWZXJzXTtcclxuICAgICAgICAgIHRoaXMudXBkYXRlRGlzcGxheVJlY0ZpbGUocmVjZW50UmVjRmlsZSwhdGVtcG9yYXJ5KTtcclxuICAgICAgICAgIHRoaXMuZGlzcGxheVJlY0ZpbGVWZXJzaW9uID0gcmZWZXJzO1xyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVEaXNwbGF5UmVjRmlsZShudWxsKTtcclxuICAgICAgICAgIHRoaXMuZGlzcGxheVJlY0ZpbGVWZXJzaW9uID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYoIXRoaXMucmVhZG9ubHkpIHtcclxuICAgICAgICB0aGlzLnN0YXJ0U3RvcFNpZ25hbFN0YXRlID0gU3RhcnRTdG9wU2lnbmFsU3RhdGUuSURMRTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5kZWJ1ZyhcImFwcGx5SXRlbSgpOiB0ZW1wb3Jhcnk6IFwiK3RlbXBvcmFyeSk7XHJcbiAgICAvL2lmICghdGVtcG9yYXJ5KSB7XHJcbiAgICAvLyAgIGNvbnNvbGUuZGVidWcoXCJhcHBseUl0ZW0oKTogQ2FsbCBzaG93UmVjb3JkaW5nKCk6IGRpc3BsYXlBdWRpb0NsaXA6IFwiK3RoaXMuZGlzcGxheUF1ZGlvQ2xpcCk7XHJcbiAgICAgIC8vdGhpcy5zaG93UmVjb3JkaW5nKCk7XHJcbiAgICAvL31cclxuICAgIHRoaXMudXBkYXRlU3RhcnRBY3Rpb25EaXNhYmxlU3RhdGUoKVxyXG4gICAgdGhpcy51cGRhdGVOYXZpZ2F0aW9uQWN0aW9ucygpXHJcbiAgfVxyXG5cclxuXHJcbiAgc3RhcnQoKSB7XHJcbiAgICBzdXBlci5zdGFydCgpO1xyXG4gICAgaWYodGhpcy5wcm9tcHRJdGVtQ291bnQ+MCkge1xyXG4gICAgICB0aGlzLnByb21wdEluZGV4ID0gMDtcclxuICAgIH1cclxuICAgIHRoaXMuZW5hYmxlTmF2aWdhdGlvbigpXHJcbiAgfVxyXG5cclxuICBpc1JlY29yZGluZygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAodGhpcy5zdGF0dXMgPT09IFN0YXR1cy5QUkVfUkVDT1JESU5HIHx8IHRoaXMuc3RhdHVzID09PSBTdGF0dXMuUkVDT1JESU5HIHx8IHRoaXMuc3RhdHVzID09PSBTdGF0dXMuUE9TVF9SRUNfU1RPUCB8fCB0aGlzLnN0YXR1cyA9PT0gU3RhdHVzLlBPU1RfUkVDX1BBVVNFIHx8IHRoaXMuc3RhdHVzPT09U3RhdHVzLlNUT1BQSU5HX1NUT1ApO1xyXG4gIH1cclxuXHJcbiAgaXNBY3RpdmUoKTogYm9vbGVhbntcclxuICAgIHJldHVybiAoISh0aGlzLnN0YXR1cyA9PT0gU3RhdHVzLkJMT0NLRUQgfHwgdGhpcy5zdGF0dXM9PT0gU3RhdHVzLklETEUgfHwgdGhpcy5zdGF0dXM9PT1TdGF0dXMuRVJST1IpIHx8IHRoaXMucHJvY2Vzc2luZ1JlY29yZGluZyB8fCB0aGlzLnNlc3Npb25TZXJ2aWNlLnVwbG9hZENvdW50PjApXHJcbiAgfVxyXG5cclxuICAgIHByZXZJdGVtKCkge1xyXG4gICAgICAgbGV0IG5ld1BySWR4PXRoaXMuX3Byb21wdEluZGV4O1xyXG4gICAgICAgbmV3UHJJZHgtLTtcclxuICAgICAgIGlmKG5ld1BySWR4PDApe1xyXG4gICAgICAgICBuZXdQcklkeD10aGlzLnByb21wdEl0ZW1Db3VudC0xO1xyXG4gICAgICAgfVxyXG4gICAgICAgdGhpcy5wcm9tcHRJbmRleD1uZXdQcklkeDtcclxuICAgICAgLy90aGlzLnVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKClcclxuICAgIH1cclxuXHJcblxyXG4gIG5leHRJdGVtKCkge1xyXG4gICAgbGV0IG5ld1BySWR4PXRoaXMuX3Byb21wdEluZGV4O1xyXG4gICAgbmV3UHJJZHgrKztcclxuICAgIGlmKG5ld1BySWR4Pj10aGlzLnByb21wdEl0ZW1Db3VudCl7XHJcbiAgICAgIG5ld1BySWR4PTA7XHJcbiAgICB9XHJcbiAgICB0aGlzLnByb21wdEluZGV4PW5ld1BySWR4O1xyXG4gICAgLy90aGlzLnVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKCl7XHJcbiAgICBsZXQgZndkTnh0QWN0aW9uRGlzYWJsZWQ9dHJ1ZTtcclxuICAgIGlmKHRoaXMuaXRlbXMpe1xyXG4gICAgICBsZXQgY3VyclJlY3M9dGhpcy5pdGVtcy5nZXRJdGVtKHRoaXMuX3Byb21wdEluZGV4KS5yZWNzO1xyXG4gICAgICBmd2ROeHRBY3Rpb25EaXNhYmxlZD0gISAoY3VyclJlY3MhPW51bGwgJiYgY3VyclJlY3MubGVuZ3RoPjApO1xyXG4gICAgfVxyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLmZ3ZE5leHRBY3Rpb24uZGlzYWJsZWQgPSB0aGlzLm5hdmlnYXRpb25EaXNhYmxlZCB8fCBmd2ROeHRBY3Rpb25EaXNhYmxlZDtcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5md2RBY3Rpb24uZGlzYWJsZWQgPSB0aGlzLm5hdmlnYXRpb25EaXNhYmxlZDtcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5id2RBY3Rpb24uZGlzYWJsZWQgPSB0aGlzLm5hdmlnYXRpb25EaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIG5leHRVbnJlY29yZGVkSXRlbSgpIHtcclxuICAgIGxldCBuZXdQcklkeCA9IHRoaXMuX3Byb21wdEluZGV4O1xyXG4gICAgbmV3UHJJZHgrKztcclxuICAgIGlmIChuZXdQcklkeCA+PSB0aGlzLnByb21wdEl0ZW1Db3VudCkge1xyXG4gICAgICBuZXdQcklkeCA9IDA7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLml0ZW1zIT1udWxsKSB7XHJcbiAgICAgIGxldCBpdD10aGlzLml0ZW1zLmdldEl0ZW0obmV3UHJJZHgpO1xyXG4gICAgICB3aGlsZSAoKCFpdC5yZWNvcmRpbmcgfHwgaXQuaXRlbURvbmUoKSkgJiYgbmV3UHJJZHggPCB0aGlzLnByb21wdEl0ZW1Db3VudCkge1xyXG4gICAgICAgIG5ld1BySWR4Kys7XHJcbiAgICAgICAgaXQ9dGhpcy5pdGVtcy5nZXRJdGVtKG5ld1BySWR4KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIWl0Lml0ZW1Eb25lKCkpIHtcclxuICAgICAgICB0aGlzLnByb21wdEluZGV4ID0gbmV3UHJJZHg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVuYWJsZVN0YXJ0VXNlckdlc3R1cmUoKSB7XHJcbiAgICBzdXBlci5lbmFibGVTdGFydFVzZXJHZXN0dXJlKCk7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RhcnRBY3Rpb24uZGlzYWJsZWQ9ISh0aGlzLmFjICYmIHRoaXMuaXNSZWNvcmRpbmdJdGVtKCkpO1xyXG4gIH1cclxuXHJcbiAgZW5hYmxlTmF2aWdhdGlvbigpe1xyXG4gICAgdGhpcy5uYXZpZ2F0aW9uRGlzYWJsZWQ9ZmFsc2U7XHJcbiAgICB0aGlzLnVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKCk7XHJcbiAgfVxyXG5cclxuICBzdGFydGVkKCkge1xyXG4gICAgbGV0IGljID0gdGhpcy5wcm9tcHRJdGVtLml0ZW1jb2RlO1xyXG4gICAgbGV0IHJmPW51bGw7XHJcblxyXG4gICAgaWYgKHRoaXMuX3Nlc3Npb24gJiYgaWMpIHtcclxuICAgICAgbGV0IHNlc3NJZDogc3RyaW5nIHwgbnVtYmVyID0gdGhpcy5fc2Vzc2lvbi5zZXNzaW9uSWQ7XHJcbiAgICAgIGxldCBjcElkeCA9IHRoaXMucHJvbXB0SW5kZXg7XHJcbiAgICAgIGlmICh0aGlzLml0ZW1zKSB7XHJcbiAgICAgICAgbGV0IGl0ID0gdGhpcy5pdGVtcy5nZXRJdGVtKGNwSWR4KTtcclxuICAgICAgICBpZiAoIWl0LnJlY3MpIHtcclxuICAgICAgICAgIGl0LnJlY3MgPSBuZXcgQXJyYXk8U3ByUmVjb3JkaW5nRmlsZT4oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmYgPSBuZXcgU3ByUmVjb3JkaW5nRmlsZShzZXNzSWQsIGljLCBpdC5yZWNzLmxlbmd0aCxudWxsKTtcclxuICAgICAgICByZi51dWlkPXRoaXMucmZVdWlkO1xyXG4gICAgICAgIC8vaXQucmVjcy5wdXNoKHJmKTtcclxuICAgICAgICB0aGlzLml0ZW1zLmFkZFNwclJlY0ZpbGUoaXQscmYpO1xyXG4gICAgICAgIHRoaXMuaXRlbXMuY3VycmVudFJlY29yZGluZ0ZpbGU9cmY7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuX3JlY29yZGluZ0ZpbGUgPSByZjtcclxuICAgIHRoaXMuc3RhdHVzID0gU3RhdHVzLlBSRV9SRUNPUkRJTkc7XHJcbiAgICBzdXBlci5zdGFydGVkKCk7XHJcblxyXG4gICAgdGhpcy5zdGFydFN0b3BTaWduYWxTdGF0ZSA9IFN0YXJ0U3RvcFNpZ25hbFN0YXRlLlBSRVJFQ09SRElORztcclxuICAgIGlmKHRoaXMuX3Nlc3Npb24pIHtcclxuICAgICAgaWYgKHRoaXMuX3Nlc3Npb24uc3RhdHVzID09PSBcIkxPQURFRFwiKSB7XHJcbiAgICAgICAgbGV0IGJvZHk6IGFueSA9IHt9O1xyXG4gICAgICAgIGlmICh0aGlzLnNlY3Rpb24udHJhaW5pbmcpIHtcclxuICAgICAgICAgIHRoaXMuX3Nlc3Npb24uc3RhdHVzID0gXCJTVEFSVEVEX1RSQUlOSU5HXCJcclxuICAgICAgICAgIGJvZHkuc3RhdHVzID0gdGhpcy5fc2Vzc2lvbi5zdGF0dXM7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuX3Nlc3Npb24uc3RhcnRlZFRyYWluaW5nRGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXNzaW9uLnN0YXJ0ZWRUcmFpbmluZ0RhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICBib2R5LnN0YXJ0ZWRUcmFpbmluZ0RhdGUgPSB0aGlzLl9zZXNzaW9uLnN0YXJ0ZWRUcmFpbmluZ0RhdGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX3Nlc3Npb24uc3RhdHVzID0gXCJTVEFSVEVEXCJcclxuICAgICAgICAgIGJvZHkuc3RhdHVzID0gdGhpcy5fc2Vzc2lvbi5zdGF0dXM7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuX3Nlc3Npb24uc3RhcnRlZERhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2Vzc2lvbi5zdGFydGVkRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgIGJvZHkuc3RhcnRlZERhdGUgPSB0aGlzLl9zZXNzaW9uLnN0YXJ0ZWREYXRlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlc3Npb25TZXJ2aWNlLnBhdGNoU2Vzc2lvbk9ic2VydmVyKHRoaXMuX3Nlc3Npb24sIGJvZHkpLnN1YnNjcmliZSgpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNlY3Rpb24ucHJvbXB0cGhhc2UgPT09ICdQUkVSRUNPUkRJTkcnIHx8IHRoaXMuc2VjdGlvbi5wcm9tcHRwaGFzZSA9PT0gJ1BSRVJFQ09SRElOR09OTFknKSB7XHJcbiAgICAgIHRoaXMuYXBwbHlQcm9tcHQoKTtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2luZm8nO1xyXG4gICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVjb3JkaW5nLi4uJztcclxuXHJcbiAgICBsZXQgcHJlRGVsYXkgPSBERUZBVUxUX1BSRV9SRUNfREVMQVk7XHJcbiAgICBpZiAodGhpcy5wcm9tcHRJdGVtLnByZXJlY2RlbGF5IT1udWxsKSB7XHJcbiAgICAgIHByZURlbGF5ID0gdGhpcy5wcm9tcHRJdGVtLnByZXJlY2RlbGF5O1xyXG4gICAgfWVsc2UgaWYgKHRoaXMucHJvbXB0SXRlbS5wcmVyZWNvcmRpbmchPW51bGwpIHtcclxuICAgICAgcHJlRGVsYXkgPSB0aGlzLnByb21wdEl0ZW0ucHJlcmVjb3JkaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucG9zdERlbGF5PURFRkFVTFRfUE9TVF9SRUNfREVMQVk7XHJcbiAgICBpZih0aGlzLnByb21wdEl0ZW0ucG9zdHJlY2RlbGF5IT1udWxsKXtcclxuICAgICAgdGhpcy5wb3N0RGVsYXk9dGhpcy5wcm9tcHRJdGVtLnBvc3RyZWNkZWxheTtcclxuICAgIH1lbHNlIGlmKHRoaXMucHJvbXB0SXRlbS5wb3N0cmVjb3JkaW5nIT1udWxsKXtcclxuICAgICAgdGhpcy5wb3N0RGVsYXk9dGhpcy5wcm9tcHRJdGVtLnBvc3RyZWNvcmRpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG1heFJlY29yZGluZ1RpbWVNcyA9IE1BWF9SRUNPUkRJTkdfVElNRV9NUztcclxuICAgIGlmICh0aGlzLnByb21wdEl0ZW0ucmVjZHVyYXRpb24hPT1udWxsICYmIHRoaXMucHJvbXB0SXRlbS5yZWNkdXJhdGlvbiE9PXVuZGVmaW5lZCkge1xyXG4gICAgICBtYXhSZWNvcmRpbmdUaW1lTXMgPSBwcmVEZWxheSt0aGlzLnByb21wdEl0ZW0ucmVjZHVyYXRpb24rdGhpcy5wb3N0RGVsYXk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm1heFJlY1RpbWVySWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc3RvcFJlY29yZGluZ01heFJlYygpXHJcbiAgICB9LCBtYXhSZWNvcmRpbmdUaW1lTXMpO1xyXG4gICAgdGhpcy5tYXhSZWNUaW1lclJ1bm5pbmcgPSB0cnVlO1xyXG5cclxuXHJcblxyXG4gICAgdGhpcy5wcmVSZWNUaW1lcklkID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgICAgdGhpcy5wcmVSZWNUaW1lclJ1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuUkVDT1JESU5HO1xyXG4gICAgICB0aGlzLnN0YXJ0U3RvcFNpZ25hbFN0YXRlID0gU3RhcnRTdG9wU2lnbmFsU3RhdGUuUkVDT1JESU5HO1xyXG4gICAgICBpZiAodGhpcy5zZWN0aW9uLm1vZGUgPT09ICdBVVRPUkVDT1JESU5HJykge1xyXG4gICAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5uZXh0QWN0aW9uLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnBhdXNlQWN0aW9uLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BBY3Rpb24uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5zZWN0aW9uLnByb21wdHBoYXNlID09PSAnUkVDT1JESU5HJykge1xyXG4gICAgICAgIHRoaXMuYXBwbHlQcm9tcHQoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5zZWN0aW9uLnByb21wdHBoYXNlID09PSAnUFJFUkVDT1JESU5HT05MWScpe1xyXG4gICAgICAgIHRoaXMuY2xlYXJQcm9tcHQoKTtcclxuICAgICAgfVxyXG5cclxuICAgIH0sIHByZURlbGF5KTtcclxuICAgIHRoaXMucHJlUmVjVGltZXJSdW5uaW5nID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHN0b3BJdGVtKCkge1xyXG4gICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuUE9TVF9SRUNfU1RPUDtcclxuICAgIHRoaXMuc3RhcnRTdG9wU2lnbmFsU3RhdGUgPSBTdGFydFN0b3BTaWduYWxTdGF0ZS5QT1NUUkVDT1JESU5HO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLm5leHRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgLy90aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RvcE5vbnJlY29yZGluZ0FjdGlvbi5kaXNhYmxlZD10cnVlO1xyXG4gICAgdGhpcy5jbGVhclByZVJlY1RpbWVyKCk7XHJcbiAgICB0aGlzLnBvc3RSZWNUaW1lcklkID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnBvc3RSZWNUaW1lclJ1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuU1RPUFBJTkdfU1RPUDtcclxuICAgICAgdGhpcy5zdG9wUmVjb3JkaW5nKCk7XHJcbiAgICB9LCB0aGlzLnBvc3REZWxheSk7XHJcbiAgICB0aGlzLnBvc3RSZWNUaW1lclJ1bm5pbmcgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc3RvcE5vbnJlY29yZGluZygpe1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BOb25yZWNvcmRpbmdBY3Rpb24uZGlzYWJsZWQ9dHJ1ZTtcclxuICAgIHRoaXMuY2xlYXJOb25SZWNvcmRpbmdEdXJhdGlvblRpbWVyKCk7XHJcbiAgICB0aGlzLnN0YXR1cyA9IFN0YXR1cy5TVE9QUElOR19TVE9QO1xyXG4gICAgdGhpcy5jb250aW51ZVNlc3Npb24oKTtcclxuICB9XHJcblxyXG4gIHBhdXNlSXRlbSgpIHtcclxuICAgIHRoaXMuc3RhdHVzID0gU3RhdHVzLlBPU1RfUkVDX1BBVVNFO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnBhdXNlQWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RhcnRTdG9wU2lnbmFsU3RhdGUgPSBTdGFydFN0b3BTaWduYWxTdGF0ZS5QT1NUUkVDT1JESU5HO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLm5leHRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BOb25yZWNvcmRpbmdBY3Rpb24uZGlzYWJsZWQ9dHJ1ZTtcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5wYXVzZUFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLmNsZWFyUHJlUmVjVGltZXIoKTtcclxuICAgIHRoaXMucG9zdFJlY1RpbWVySWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucG9zdFJlY1RpbWVyUnVubmluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnN0YXR1cyA9IFN0YXR1cy5TVE9QUElOR19QQVVTRTtcclxuICAgICAgdGhpcy5zdG9wUmVjb3JkaW5nKCk7XHJcbiAgICB9LCB0aGlzLnBvc3REZWxheSk7XHJcbiAgICB0aGlzLnBvc3RSZWNUaW1lclJ1bm5pbmcgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc3RvcFJlY29yZGluZygpIHtcclxuICAgIHRoaXMuY2xlYXJNYXhSZWNUaW1lcigpO1xyXG4gICAgaWYodGhpcy5hYykge1xyXG4gICAgICB0aGlzLmFjLnN0b3AoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0b3BSZWNvcmRpbmdNYXhSZWMoKXtcclxuICAgIHRoaXMuY2xlYXJQcmVSZWNUaW1lcigpO1xyXG4gICAgdGhpcy5jbGVhclBvc3RSZWNUaW1lcigpO1xyXG4gICAgdGhpcy5tYXhSZWNUaW1lclJ1bm5pbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuc3RhdHVzID0gU3RhdHVzLlNUT1BQSU5HX1NUT1A7XHJcbiAgICBpZih0aGlzLmFjKSB7XHJcbiAgICAgIHRoaXMuYWMuc3RvcCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkUmVjb3JkaW5nRmlsZUJ5RGVzY3JpcHRvcihyZmQ6UmVjb3JkaW5nRmlsZURlc2NyaXB0b3JJbXBsKXtcclxuICAgIGlmKHJmZC5yZWNvcmRpbmcgJiYgcmZkLnJlY29yZGluZy5pdGVtY29kZSkge1xyXG4gICAgICBsZXQgcHJJZHggPSB0aGlzLnByb21wdEluZGV4QnlJdGVtY29kZShyZmQucmVjb3JkaW5nLml0ZW1jb2RlKTtcclxuICAgICAgaWYgKHRoaXMuaXRlbXMhPW51bGwgJiYgcHJJZHggIT09IG51bGwpIHtcclxuICAgICAgICBsZXQgaXQgPSB0aGlzLml0ZW1zLmdldEl0ZW0ocHJJZHgpO1xyXG4gICAgICAgIGlmIChpdCAmJiB0aGlzLl9zZXNzaW9uKSB7XHJcbiAgICAgICAgICAvLyBpZiAoIWl0LnJlY3MpIHtcclxuICAgICAgICAgIC8vICAgaXQucmVjcyA9IG5ldyBBcnJheTxTcHJSZWNvcmRpbmdGaWxlPigpO1xyXG4gICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgbGV0IHJmID0gbmV3IFNwclJlY29yZGluZ0ZpbGUodGhpcy5fc2Vzc2lvbi5zZXNzaW9uSWQsIHJmZC5yZWNvcmRpbmcuaXRlbWNvZGUsIHJmZC52ZXJzaW9uLCBudWxsKTtcclxuICAgICAgICAgIHJmLnNlcnZlclBlcnNpc3RlZD10cnVlO1xyXG4gICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiYWRkUmVjb3JkaW5nRmlsZUJ5RGVzY3JpcHRvcigpOiBzcjogXCIrcmZkLnNhbXBsZXJhdGUrXCIsIGZyYW1lczogXCIrcmZkLmZyYW1lcyk7XHJcbiAgICAgICAgICBpZihyZmQuc2FtcGxlcmF0ZSAmJiByZmQuZnJhbWVzKXtcclxuICAgICAgICAgICAgcmYuc2FtcGxlcmF0ZT1yZmQuc2FtcGxlcmF0ZTtcclxuICAgICAgICAgICAgcmYuZnJhbWVzPXJmZC5mcmFtZXM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZihyZmQuY2hhbm5lbHMpe1xyXG4gICAgICAgICAgICByZi5jaGFubmVscz1yZmQuY2hhbm5lbHM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLml0ZW1zLmFkZFNwclJlY0ZpbGUoaXQscmYpO1xyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiV0FSTjogTm8gcmVjb3JkaW5nIGl0ZW0gd2l0aCBjb2RlOiBcXFwiXCIgK3JmZC5yZWNvcmRpbmcuaXRlbWNvZGUrIFwiXFxcIiBmb3VuZC5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIldBUk46IE5vIHJlY29yZGluZyBpdGVtIHdpdGggY29kZTogXFxcIlwiICtyZmQucmVjb3JkaW5nLml0ZW1jb2RlKyBcIlxcXCIgZm91bmQuXCIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBhZGRSZWNvcmRpbmdGaWxlQnlQcm9tcHRJbmRleChwcm9tcHRJbmRleDpudW1iZXIsIHJmOlNwclJlY29yZGluZ0ZpbGUpe1xyXG4gIC8vXHJcbiAgLy8gfVxyXG5cclxuXHJcbiAgc3RvcHBlZCgpIHtcclxuICAgIHRoaXMuY2xlYXJQcmVSZWNUaW1lcigpO1xyXG4gICAgdGhpcy5jbGVhclBvc3RSZWNUaW1lcigpO1xyXG4gICAgdGhpcy5jbGVhck1heFJlY1RpbWVyKCk7XHJcbiAgICB0aGlzLnVwZGF0ZVN0YXJ0QWN0aW9uRGlzYWJsZVN0YXRlKClcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdG9wQWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5uZXh0QWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5wYXVzZUFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdpbmZvJztcclxuICAgIHRoaXMuc3RhdHVzTXNnID0gJ1JlY29yZGVkLic7XHJcbiAgICB0aGlzLnN0YXJ0U3RvcFNpZ25hbFN0YXRlID0gU3RhcnRTdG9wU2lnbmFsU3RhdGUuSURMRTtcclxuXHJcbiAgICAgIGxldCBhZGg6QXVkaW9EYXRhSG9sZGVyfG51bGw9bnVsbDtcclxuICAgICAgbGV0IGFzOkF1ZGlvU291cmNlfG51bGw9bnVsbDtcclxuICAgICBsZXQgYWI6QXVkaW9CdWZmZXJ8bnVsbD1udWxsO1xyXG4gICAgICBpZih0aGlzLmFjKSB7XHJcbiAgICAgICAgaWYgKEF1ZGlvU3RvcmFnZVR5cGUuTkVUX0NIVU5LRUQgPT09IHRoaXMuYWMuYXVkaW9TdG9yYWdlVHlwZSkge1xyXG4gICAgICAgICAgdGhpcy5wbGF5U3RhcnRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5rZWVwTGl2ZUxldmVsPXRydWU7XHJcbiAgICAgICAgICBsZXQgYnVybDpzdHJpbmd8bnVsbD1udWxsO1xyXG4gICAgICAgICAgaWYodGhpcy5fc2Vzc2lvbikge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fZGlzcGxheVJlY0ZpbGUpIHtcclxuICAgICAgICAgICAgICAvLyBUT0RPIGlzIHRoaXMgYnJhbmNoIGV2ZXIgY2FsbGVkID9cclxuICAgICAgICAgICAgICBsZXQgcmYgPSB0aGlzLl9kaXNwbGF5UmVjRmlsZTtcclxuICAgICAgICAgICAgICByZi5mcmFtZXMgPSB0aGlzLmFjLmZyYW1lc1JlY29yZGVkO1xyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcInN0b3BwZWQoKTogU2V0IGZyYW1lczogXCIrcmYuZnJhbWVzK1wiIG9uIHJmSWQ6IFwiK3RoaXMuZGlzcGxheVJlY0ZpbGU/LnJlY29yZGluZ0ZpbGVJZCk7XHJcbiAgICAgICAgICAgICAgYnVybCA9IHRoaXMucmVjRmlsZVNlcnZpY2Uuc3ByQXVkaW9GaWxlVXJsKHRoaXMuX3Nlc3Npb24/LnByb2plY3QsIHJmKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlc3Npb24/LnByb2plY3QgJiYgdGhpcy5fcmVjb3JkaW5nRmlsZSAmJiB0aGlzLl9yZWNvcmRpbmdGaWxlIGluc3RhbmNlb2YgU3ByUmVjb3JkaW5nRmlsZSkge1xyXG4gICAgICAgICAgICAgIGJ1cmwgPSB0aGlzLnJlY0ZpbGVTZXJ2aWNlLnNwckF1ZGlvRmlsZVVybEJ5SXRlbWNvZGUodGhpcy5zZXNzaW9uPy5wcm9qZWN0LCB0aGlzLnNlc3Npb24/LnNlc3Npb25JZCwgdGhpcy5fcmVjb3JkaW5nRmlsZS5pdGVtQ29kZSwgdGhpcy5fcmVjb3JkaW5nRmlsZS52ZXJzaW9uKTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkNvdWxkIG5vdCBjcmVhdGUgbmV0IGF1ZGlvIGJ1ZmZlci5cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGJ1cmwpIHtcclxuICAgICAgICAgICAgICBjb25zdCByVVVJRCA9IHRoaXMuYWMucmVjVVVJRDtcclxuICAgICAgICAgICAgICBjb25zdCBzciA9IHRoaXMuYWMuY3VycmVudFNhbXBsZVJhdGU7XHJcbiAgICAgICAgICAgICAgY29uc3QgY2hGbD1zcipSZWNvcmRpbmdTZXJ2aWNlLkRFRkFVTFRfQ0hVTktFRF9ET1dOTE9BRF9TRUNPTkRTO1xyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcInN0b3BwZWQoKTogcmZJRDogXCIrdGhpcy5fcmVjb3JkaW5nRmlsZT8ucmVjb3JkaW5nRmlsZUlkK1wiLCBuZXQgYWIgdXJsOiBcIiArIGJ1cmwrXCIsIGZyYW1lczogXCIrdGhpcy5hYy5mcmFtZXNSZWNvcmRlZCtcIiwgc2FtcGxlIHJhdGU6IFwiK3NyKTtcclxuICAgICAgICAgICAgICBsZXQgbmV0QWIgPSBuZXcgTmV0QXVkaW9CdWZmZXIodGhpcy5yZWNGaWxlU2VydmljZSwgYnVybCwgdGhpcy5hYy5jaGFubmVsQ291bnQsIHNyLCBjaEZsLCB0aGlzLmFjLmZyYW1lc1JlY29yZGVkLCByVVVJRCwgY2hGbCk7XHJcbiAgICAgICAgICAgICAgYXM9bmV0QWI7XHJcbiAgICAgICAgICAgICAgaWYodGhpcy51cGxvYWRTZXQpe1xyXG4gICAgICAgICAgICAgICAgLy9sZXQgcnA9bmV3IFJlYWR5UHJvdmlkZXIoKTtcclxuICAgICAgICAgICAgICAgIC8vbmV0QWIucmVhZHlQcm92aWRlcj1ycDtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkU2V0Lm9uRG9uZT0odXBsb2FkU2V0KT0+e1xyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKFwidXBsb2FkIHNldCBvbiBkb25lOiBDYWxsIHJlYWR5IHByb3ZpZGVyLnJlYWR5XCIpO1xyXG4gICAgICAgICAgICAgICAgICAvL3JwLnJlYWR5KCk7XHJcbiAgICAgICAgICAgICAgICAgIG5ldEFiLnJlYWR5KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2UgaWYgKEF1ZGlvU3RvcmFnZVR5cGUuTUVNX0VOVElSRV9BVVRPX05FVF9DSFVOS0VEID09PSB0aGlzLmFjLmF1ZGlvU3RvcmFnZVR5cGUgfHwgQXVkaW9TdG9yYWdlVHlwZS5NRU1fQ0hVTktFRF9BVVRPX05FVF9DSFVOS0VEID09PSB0aGlzLmFjLmF1ZGlvU3RvcmFnZVR5cGUpIHtcclxuICAgICAgICAgIGlmIChBdWRpb1N0b3JhZ2VUeXBlLk1FTV9FTlRJUkVfQVVUT19ORVRfQ0hVTktFRCA9PT0gdGhpcy5hYy5hdWRpb1N0b3JhZ2VUeXBlKXtcclxuICAgICAgICAgICAgY29uc3QgYWNBYj10aGlzLmFjLmF1ZGlvQnVmZmVyKCk7XHJcbiAgICAgICAgICAgIGlmKGFjQWIpIHtcclxuICAgICAgICAgICAgICBhcyA9IG5ldyBBdWRpb0J1ZmZlclNvdXJjZShhY0FiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYoQXVkaW9TdG9yYWdlVHlwZS5NRU1fQ0hVTktFRF9BVVRPX05FVF9DSFVOS0VEID09PSB0aGlzLmFjLmF1ZGlvU3RvcmFnZVR5cGUpe1xyXG4gICAgICAgICAgICBhcyA9IHRoaXMuYWMuYXVkaW9CdWZmZXJBcnJheSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYoIWFzKXtcclxuICAgICAgICAgICAgdGhpcy5wbGF5U3RhcnRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmtlZXBMaXZlTGV2ZWw9dHJ1ZTtcclxuICAgICAgICAgICAgbGV0IGJ1cmw6c3RyaW5nfG51bGw9bnVsbDtcclxuICAgICAgICAgICAgaWYodGhpcy5fc2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9kaXNwbGF5UmVjRmlsZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBpcyB0aGlzIGJyYW5jaCBldmVyIGNhbGxlZCA/XHJcbiAgICAgICAgICAgICAgICBsZXQgcmYgPSB0aGlzLl9kaXNwbGF5UmVjRmlsZTtcclxuICAgICAgICAgICAgICAgIHJmLmZyYW1lcyA9IHRoaXMuYWMuZnJhbWVzUmVjb3JkZWQ7XHJcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJzdG9wcGVkKCk6IFNldCBmcmFtZXM6IFwiK3JmLmZyYW1lcytcIiBvbiByZklkOiBcIit0aGlzLmRpc3BsYXlSZWNGaWxlPy5yZWNvcmRpbmdGaWxlSWQpO1xyXG4gICAgICAgICAgICAgICAgYnVybCA9IHRoaXMucmVjRmlsZVNlcnZpY2Uuc3ByQXVkaW9GaWxlVXJsKHRoaXMuX3Nlc3Npb24/LnByb2plY3QsIHJmKTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2Vzc2lvbj8ucHJvamVjdCAmJiB0aGlzLl9yZWNvcmRpbmdGaWxlICYmIHRoaXMuX3JlY29yZGluZ0ZpbGUgaW5zdGFuY2VvZiBTcHJSZWNvcmRpbmdGaWxlKSB7XHJcbiAgICAgICAgICAgICAgICBidXJsID0gdGhpcy5yZWNGaWxlU2VydmljZS5zcHJBdWRpb0ZpbGVVcmxCeUl0ZW1jb2RlKHRoaXMuc2Vzc2lvbj8ucHJvamVjdCwgdGhpcy5zZXNzaW9uPy5zZXNzaW9uSWQsIHRoaXMuX3JlY29yZGluZ0ZpbGUuaXRlbUNvZGUsIHRoaXMuX3JlY29yZGluZ0ZpbGUudmVyc2lvbik7XHJcbiAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQ291bGQgbm90IGNyZWF0ZSBuZXQgYXVkaW8gYnVmZmVyLlwiKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKGJ1cmwpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJVVUlEID0gdGhpcy5hYy5yZWNVVUlEO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3IgPSB0aGlzLmFjLmN1cnJlbnRTYW1wbGVSYXRlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2hGbD1zcipSZWNvcmRpbmdTZXJ2aWNlLkRFRkFVTFRfQ0hVTktFRF9ET1dOTE9BRF9TRUNPTkRTO1xyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwic3RvcHBlZCgpOiByZklEOiBcIit0aGlzLl9yZWNvcmRpbmdGaWxlPy5yZWNvcmRpbmdGaWxlSWQrXCIsIG5ldCBhYiB1cmw6IFwiICsgYnVybCtcIiwgZnJhbWVzOiBcIit0aGlzLmFjLmZyYW1lc1JlY29yZGVkK1wiLCBzYW1wbGUgcmF0ZTogXCIrc3IpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV0QWIgPSBuZXcgTmV0QXVkaW9CdWZmZXIodGhpcy5yZWNGaWxlU2VydmljZSwgYnVybCwgdGhpcy5hYy5jaGFubmVsQ291bnQsIHNyLCBjaEZsLCB0aGlzLmFjLmZyYW1lc1JlY29yZGVkLCByVVVJRCwgY2hGbCk7XHJcbiAgICAgICAgICAgICAgICBhcyA9IG5ldEFiO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudXBsb2FkU2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkU2V0Lm9uRG9uZSA9ICh1cGxvYWRTZXQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKFwidXBsb2FkIHNldCBvbiBkb25lOiBDYWxsIHJlYWR5IHByb3ZpZGVyLnJlYWR5XCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBuZXRBYi5yZWFkeSgpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChBdWRpb1N0b3JhZ2VUeXBlLkRCX0NIVU5LRUQgPT09IHRoaXMuYWMuYXVkaW9TdG9yYWdlVHlwZSkge1xyXG4gICAgICAgICAgYXMgPSB0aGlzLmFjLmluZGRiQXVkaW9CdWZmZXJBcnJheSgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoQXVkaW9TdG9yYWdlVHlwZS5NRU1fQ0hVTktFRCA9PT0gdGhpcy5hYy5hdWRpb1N0b3JhZ2VUeXBlKSB7XHJcbiAgICAgICAgICBhcyA9IHRoaXMuYWMuYXVkaW9CdWZmZXJBcnJheSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBhYiA9IHRoaXMuYWMuYXVkaW9CdWZmZXIoKTtcclxuICAgICAgICAgIGlmKGFiKSB7XHJcbiAgICAgICAgICAgIGFzID0gbmV3IEF1ZGlvQnVmZmVyU291cmNlKGFiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFzKSB7XHJcbiAgICAgICAgICBhZGggPSBuZXcgQXVkaW9EYXRhSG9sZGVyKGFzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAvLyBVc2UgYW4gb3duIHJlZmVyZW5jZSBzaW5jZSB0aGUgd3JpdGluZyBvZiB0aGUgd2F2ZSBmaWxlIGlzIGFzeW5jaHJvbm91cyBhbmQgdGhpcy5fcmVjb3JkaW5nRmlsZSBtaWdodCBhbHJlYWR5IGNvbnRhaW4gdGhlIG5leHQgcmVjb3JkaW5nXHJcbiAgICBsZXQgcmYgPSB0aGlzLl9yZWNvcmRpbmdGaWxlO1xyXG4gICAgaWYgKHJmICYmIHJmIGluc3RhbmNlb2YgU3ByUmVjb3JkaW5nRmlsZSkge1xyXG4gICAgICB0aGlzLml0ZW1zPy5zZXRTcHJSZWNGaWxlQXVkaW9EYXRhKHJmLGFkaCk7XHJcbiAgICAgIGlmICh0aGlzLmVuYWJsZVVwbG9hZFJlY29yZGluZ3MgJiYgdGhpcy5fdXBsb2FkQ2h1bmtTaXplU2Vjb25kcz09PW51bGwgJiYgQXVkaW9TdG9yYWdlVHlwZS5NRU1fRU5USVJFPT09dGhpcy5fY2xpZW50QXVkaW9TdG9yYWdlVHlwZSkge1xyXG4gICAgICAgIC8vIFRPRE8gdXNlIFNwZWVjaFJlY29yZGVyY29uZmlnIHJlc3AuIFJlY2ZpbGVTZXJ2aWNlXHJcbiAgICAgICAgLy8gY29udmVydCBhc3luY2hyb25vdXNseSB0byAxNi1iaXQgaW50ZWdlciBQQ01cclxuICAgICAgICAvLyBUT0RPIGNvdWxkIHdlIGF2b2lkIGNvbnZlcnNpb24gdG8gc2F2ZSBDUFUgcmVzb3VyY2VzIGFuZCB0cmFuc2ZlciBmbG9hdCBQQ00gZGlyZWN0bHk/XHJcbiAgICAgICAgLy8gVE9ETyBkdXBsaWNhdGUgY29udmVyc2lvbiBmb3IgbWFudWFsIGRvd25sb2FkXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIkJ1aWxkIHdhdiB3cml0ZXIuLi5cIik7XHJcbiAgICAgICAgaWYoYWIpIHtcclxuICAgICAgICAgIHRoaXMucHJvY2Vzc2luZ1JlY29yZGluZz10cnVlO1xyXG4gICAgICAgICAgY29uc3Qgd3cgPSBuZXcgV2F2V3JpdGVyKHRoaXMuX2NsaWVudE1lZGlhU3RvcmFnZUZvcm1hdD8uYXVkaW9FbmNvZGluZz09PUF1ZGlvU3RvcmFnZUZvcm1hdEVuY29kaW5nLlBDTV9GTE9BVCx0aGlzLl9jbGllbnRNZWRpYVN0b3JhZ2VGb3JtYXQ/LmF1ZGlvUENNc2FtcGxlU2l6ZUluQml0cyk7XHJcbiAgICAgICAgICAvL25ldyBSRVNUIEFQSSBVUkxcclxuICAgICAgICAgIGxldCBhcGlFbmRQb2ludCA9ICcnO1xyXG4gICAgICAgICAgaWYgKHRoaXMuY29uZmlnICYmIHRoaXMuY29uZmlnLmFwaUVuZFBvaW50KSB7XHJcbiAgICAgICAgICAgIGFwaUVuZFBvaW50ID0gdGhpcy5jb25maWcuYXBpRW5kUG9pbnQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoYXBpRW5kUG9pbnQgIT09ICcnKSB7XHJcbiAgICAgICAgICAgIGFwaUVuZFBvaW50ID0gYXBpRW5kUG9pbnQgKyAnLydcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCBzZXNzaW9uc1VybCA9IGFwaUVuZFBvaW50ICsgU2Vzc2lvblNlcnZpY2UuU0VTU0lPTl9BUElfQ1RYO1xyXG4gICAgICAgICAgbGV0IHJlY1VybDogc3RyaW5nID0gc2Vzc2lvbnNVcmwgKyAnLycgKyByZi5zZXNzaW9uICsgJy8nICsgUkVDRklMRV9BUElfQ1RYICsgJy8nICsgcmYuaXRlbUNvZGU7XHJcbiAgICAgICAgICB3dy53cml0ZUFzeW5jKGFiLCAod2F2RmlsZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBvc3RSZWNvcmRpbmcod2F2RmlsZSwgcmVjVXJsLHJmKTtcclxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzaW5nUmVjb3JkaW5nID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVXYWtlTG9jaygpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgIHRoaXMuY29udGludWVTZXNzaW9uKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgY29udGludWVTZXNzaW9uKCl7XHJcbiAgICAvLyBjaGVjayBjb21wbGV0ZSBzZXNzaW9uXHJcbiAgICBsZXQgY29tcGxldGUgPSB0cnVlO1xyXG4gICAgaWYodGhpcy5pdGVtcykge1xyXG4gICAgICAvLyBzZWFyY2ggYmFja3dhcmRzLCB0byBnYWluIGZhc3RlciBkZXRlY3Rpb24gb2YgaW5jb21wbGV0ZSBzdGF0ZVxyXG4gICAgICBmb3IgKGxldCByaSA9IHRoaXMuaXRlbXMubGVuZ3RoKCkgLSAxOyByaSA+PSAwOyByaS0tKSB7XHJcbiAgICAgICAgbGV0IGl0ID0gdGhpcy5pdGVtcy5nZXRJdGVtKHJpKTtcclxuICAgICAgICBpZiAoaXQucmVjb3JkaW5nICYmICFpdC50cmFpbmluZyAmJiAhaXQuaXRlbURvbmUoKSkge1xyXG4gICAgICAgICAgY29tcGxldGUgPSBmYWxzZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IGF1dG9TdGFydCA9ICh0aGlzLnN0YXR1cyA9PT0gU3RhdHVzLlNUT1BQSU5HX1NUT1ApO1xyXG4gICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuSURMRTtcclxuICAgIGxldCBzdGFydE5leHQ9ZmFsc2U7XHJcbiAgICBpZiAoY29tcGxldGUpIHtcclxuICAgICAgaWYodGhpcy5fc2Vzc2lvbiE9bnVsbCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fc2Vzc2lvbi5zZWFsZWQgJiYgdGhpcy5fc2Vzc2lvbi5zdGF0dXMgIT09IFwiQ09NUExFVEVEXCIpIHtcclxuICAgICAgICAgIGxldCBib2R5OiBhbnkgPSB7fVxyXG4gICAgICAgICAgdGhpcy5fc2Vzc2lvbi5zdGF0dXMgPSBcIkNPTVBMRVRFRFwiO1xyXG4gICAgICAgICAgYm9keS5zdGF0dXMgPSB0aGlzLl9zZXNzaW9uLnN0YXR1cztcclxuICAgICAgICAgIGlmICghdGhpcy5fc2Vzc2lvbi5jb21wbGV0ZWREYXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Nlc3Npb24uY29tcGxldGVkRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgIGJvZHkuY29tcGxldGVkRGF0ZSA9IHRoaXMuX3Nlc3Npb24uY29tcGxldGVkRGF0ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuc2Vzc2lvblNlcnZpY2UucGF0Y2hTZXNzaW9uT2JzZXJ2ZXIodGhpcy5fc2Vzc2lvbiwgYm9keSkuc3Vic2NyaWJlKClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnU2Vzc2lvbiBjb21wbGV0ZSEnO1xyXG4gICAgICB0aGlzLnVwZGF0ZVdha2VMb2NrKCk7XHJcbiAgICAgIGlmKHRoaXMuc2hvd1Nlc3Npb25Db21wbGV0ZU1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLmRpYWxvZy5vcGVuKFNlc3Npb25GaW5pc2hlZERpYWxvZywge30pO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGVuYWJsZSBuYXZpZ2F0aW9uXHJcbiAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5md2RBY3Rpb24uZGlzYWJsZWQgPSBmYWxzZVxyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuYndkQWN0aW9uLmRpc2FibGVkID0gZmFsc2VcclxuXHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgaWYgKHRoaXMuc2VjdGlvbi5tb2RlID09PSAnQVVUT1BST0dSRVNTJyB8fCB0aGlzLnNlY3Rpb24ubW9kZSA9PT0gJ0FVVE9SRUNPUkRJTkcnKSB7XHJcbiAgICAgICAgdGhpcy5uZXh0SXRlbSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5zZWN0aW9uLm1vZGUgPT09ICdBVVRPUkVDT1JESU5HJyAmJiB0aGlzLmF1dG9yZWNvcmRpbmcgJiYgYXV0b1N0YXJ0KSB7XHJcbiAgICAgICAgc3RhcnROZXh0PXRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uRGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVXYWtlTG9jaygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBhcHBseSByZWNvcmRlZCBpdGVtXHJcbiAgICB0aGlzLmFwcGx5SXRlbShzdGFydE5leHQpO1xyXG4gICAgaWYoc3RhcnROZXh0KXtcclxuICAgICAgdGhpcy5zdGFydEl0ZW0oKTtcclxuICAgIH1cclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgZXJyb3IobXNnPSdBbiB1bmtub3duIGVycm9yIG9jY3VyZWQgZHVyaW5nIHJlY29yZGluZy4nLGFkdmljZTpzdHJpbmc9J1BsZWFzZSByZXRyeS4nKSB7XHJcbiAgICB0aGlzLnN0YXR1cz1TdGF0dXMuRVJST1I7XHJcbiAgICBzdXBlci5lcnJvcihtc2csYWR2aWNlKTtcclxuICAgIHRoaXMudXBkYXRlTmF2aWdhdGlvbkFjdGlvbnMoKTtcclxuICAgIHRoaXMudXBkYXRlU3RhcnRBY3Rpb25EaXNhYmxlU3RhdGUoKTtcclxuICB9XHJcblxyXG4gIHBvc3RDaHVua0F1ZGlvQnVmZmVyKGF1ZGlvQnVmZmVyOiBBdWRpb0J1ZmZlciwgY2h1bmtJZHg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5wcm9jZXNzaW5nUmVjb3JkaW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IHd3ID0gbmV3IFdhdldyaXRlcih0aGlzLl9jbGllbnRNZWRpYVN0b3JhZ2VGb3JtYXQ/LmF1ZGlvRW5jb2Rpbmc9PT1BdWRpb1N0b3JhZ2VGb3JtYXRFbmNvZGluZy5QQ01fRkxPQVQsdGhpcy5fY2xpZW50TWVkaWFTdG9yYWdlRm9ybWF0Py5hdWRpb1BDTXNhbXBsZVNpemVJbkJpdHMpO1xyXG4gICAgbGV0IHNlc3Npb25zVXJsID0gdGhpcy5zZXNzaW9uc0Jhc2VVcmwoKTtcclxuICAgIGxldCByZWNVcmw6IHN0cmluZyA9IHNlc3Npb25zVXJsICsgJy8nICsgdGhpcy5zZXNzaW9uPy5zZXNzaW9uSWQgKyAnLycgKyBSRUNGSUxFX0FQSV9DVFggKyAnLycgKyB0aGlzLnByb21wdEl0ZW0uaXRlbWNvZGUrJy8nK3RoaXMucmZVdWlkKycvJytjaHVua0lkeDtcclxuICAgIC8vIFRoZSB1cGxvYWQgaG9sZGVyIGlzIHJlcXVpcmVkIHRvIGFkZCB0aGUgdXBsb2FkIG5vdyB0byB0aGUgdXBsb2FkIHNldC4gVGhlIHJlYWwgdXBsb2FkIGlzIGNyZWF0ZWQgYXN5bmMgaW4gcG9zdHJlY29yZGluZyBhbmQgdGhlIHVwbG9hZCBzZXQgaXMgYWxyZWFkeSBjb21wbGV0ZSBhdCB0aGF0IHRpbWUuXHJcbiAgICBsZXQgdWxoPW5ldyBVcGxvYWRIb2xkZXIoKTtcclxuICAgIGlmKHRoaXMudXBsb2FkU2V0KXtcclxuICAgICAgdGhpcy51cGxvYWRTZXQuYWRkKHVsaCk7XHJcbiAgICB9XHJcblxyXG4gICAgd3cud3JpdGVBc3luYyhhdWRpb0J1ZmZlciwgKHdhdkZpbGUpID0+IHtcclxuICAgICAgdGhpcy5wb3N0UmVjb3JkaW5nKHdhdkZpbGUsIHJlY1VybCxudWxsLHVsaCk7XHJcbiAgICAgIHRoaXMucHJvY2Vzc2luZ1JlY29yZGluZyA9IGZhbHNlXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICAvLyBwb3N0UmVjb3JkaW5nKHdhdkZpbGU6IFVpbnQ4QXJyYXksIHJlY1VybDogc3RyaW5nLHJmOlJlY29yZGluZ0ZpbGV8bnVsbCkge1xyXG4gIC8vICAgbGV0IHdhdkJsb2IgPSBuZXcgQmxvYihbd2F2RmlsZV0sIHt0eXBlOiAnYXVkaW8vd2F2J30pO1xyXG4gIC8vICAgbGV0IHVsID0gbmV3IFVwbG9hZCh3YXZCbG9iLCByZWNVcmwscmYpO1xyXG4gIC8vICAgdGhpcy51cGxvYWRlci5xdWV1ZVVwbG9hZCh1bCk7XHJcbiAgLy8gfVxyXG5cclxuICBzdG9wKCkge1xyXG4gICAgaWYodGhpcy5hYyE9bnVsbCl7XHJcbiAgICAgIHRoaXMuYWMuY2xvc2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUNvbnRyb2xQbGF5YmFja1Bvc2l0aW9uKCkge1xyXG4gICAgaWYodGhpcy5fY29udHJvbEF1ZGlvUGxheWVyKSB7XHJcbiAgICAgIGNvbnN0IHBwRnJhbWVzPXRoaXMuX2NvbnRyb2xBdWRpb1BsYXllci5wbGF5UG9zaXRpb25GcmFtZXM7XHJcbiAgICAgIGlmIChwcEZyYW1lcyE9PW51bGwpIHtcclxuICAgICAgICBpZih0aGlzLnByb21wdGluZy5hdWRpb0Rpc3BsYXkpIHtcclxuICAgICAgICAgIHRoaXMucHJvbXB0aW5nLmF1ZGlvRGlzcGxheS5wbGF5RnJhbWVQb3NpdGlvbiA9IHBwRnJhbWVzO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxpdmVMZXZlbERpc3BsYXkucGxheUZyYW1lUG9zaXRpb24gPSBwcEZyYW1lcztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXVkaW9QbGF5ZXJVcGRhdGUoZTogQXVkaW9QbGF5ZXJFdmVudCkge1xyXG4gICAgaWYgKEV2ZW50VHlwZS5SRUFEWSA9PT0gZS50eXBlKSB7XHJcblxyXG4gICAgfSBlbHNlIGlmIChFdmVudFR5cGUuU1RBUlRFRCA9PT0gZS50eXBlKSB7XHJcbiAgICAgIC8vdGhpcy5zdGF0dXMgPSAnUGxheWJhY2suLi4nO1xyXG4gICAgICB0aGlzLnVwZGF0ZVRpbWVySWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4gdGhpcy51cGRhdGVDb250cm9sUGxheWJhY2tQb3NpdGlvbigpLCA1MCk7XHJcblxyXG4gICAgfSBlbHNlIGlmIChFdmVudFR5cGUuRU5ERUQgPT09IGUudHlwZSkge1xyXG4gICAgICAvLy5zdGF0dXM9J1JlYWR5Lic7XHJcbiAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHRoaXMudXBkYXRlVGltZXJJZCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGlmKCF0aGlzLmRlc3Ryb3llZCkge1xyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcbn1cclxuXHJcbiJdfQ==
|