speechrecorderng 2.23.9 → 2.24.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/esm2020/lib/audio/capture/capture.mjs +38 -10
- package/esm2020/lib/recorder_component.mjs +5 -1
- package/esm2020/lib/speechrecorder/project/project.mjs +1 -1
- package/esm2020/lib/speechrecorder/session/audiorecorder.mjs +108 -84
- package/esm2020/lib/speechrecorder/session/basicrecorder.mjs +25 -1
- package/esm2020/lib/speechrecorder/session/sessionmanager.mjs +3 -1
- package/esm2020/lib/speechrecorderng.component.mjs +73 -134
- package/esm2020/lib/spr.module.version.mjs +2 -2
- package/fesm2015/speechrecorderng.mjs +247 -226
- package/fesm2015/speechrecorderng.mjs.map +1 -1
- package/fesm2020/speechrecorderng.mjs +247 -226
- package/fesm2020/speechrecorderng.mjs.map +1 -1
- package/lib/recorder_component.d.ts +4 -0
- package/lib/speechrecorder/project/project.d.ts +1 -0
- package/lib/speechrecorder/session/audiorecorder.d.ts +3 -2
- package/lib/speechrecorder/session/basicrecorder.d.ts +7 -0
- package/lib/speechrecorderng.component.d.ts +1 -2
- package/lib/spr.module.version.d.ts +1 -1
- package/package.json +1 -1
|
@@ -22,7 +22,7 @@ export var Mode;
|
|
|
22
22
|
})(Mode || (Mode = {}));
|
|
23
23
|
export class SpeechrecorderngComponent extends RecorderComponent {
|
|
24
24
|
constructor(route, router, changeDetectorRef, sessionsService, projectService, scriptService, recFilesService, uploader) {
|
|
25
|
-
super();
|
|
25
|
+
super(uploader);
|
|
26
26
|
this.route = route;
|
|
27
27
|
this.router = router;
|
|
28
28
|
this.changeDetectorRef = changeDetectorRef;
|
|
@@ -32,7 +32,6 @@ export class SpeechrecorderngComponent extends RecorderComponent {
|
|
|
32
32
|
this.recFilesService = recFilesService;
|
|
33
33
|
this.uploader = uploader;
|
|
34
34
|
this._project = null;
|
|
35
|
-
this.dataSaved = true;
|
|
36
35
|
}
|
|
37
36
|
ngOnInit() {
|
|
38
37
|
try {
|
|
@@ -55,6 +54,8 @@ export class SpeechrecorderngComponent extends RecorderComponent {
|
|
|
55
54
|
}
|
|
56
55
|
}
|
|
57
56
|
ngAfterViewInit() {
|
|
57
|
+
// let wakeLockSupp=('wakeLock' in navigator);
|
|
58
|
+
// alert('Wake lock API supported: '+wakeLockSupp);
|
|
58
59
|
if (this.sm.status !== 8 /* ERROR */) {
|
|
59
60
|
let initSuccess = this.init();
|
|
60
61
|
if (initSuccess) {
|
|
@@ -73,39 +74,39 @@ export class SpeechrecorderngComponent extends RecorderComponent {
|
|
|
73
74
|
}
|
|
74
75
|
}
|
|
75
76
|
fetchSession(sessionId) {
|
|
76
|
-
//Error: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: 'statusMsg: Player initialized.'. Current value: 'statusMsg: Fetching session info...'.
|
|
77
|
-
// params.subscribe seems not to be asynchronous
|
|
78
|
-
// this.sm.statusAlertType='info';
|
|
79
|
-
// this.sm.statusMsg = 'Fetching session info...';
|
|
80
|
-
// this.sm.statusWaiting=true;
|
|
81
77
|
let sessObs = this.sessionsService.sessionObserver(sessionId);
|
|
82
78
|
if (sessObs) {
|
|
83
|
-
sessObs.subscribe(
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
this.project
|
|
79
|
+
sessObs.subscribe({
|
|
80
|
+
next: sess => {
|
|
81
|
+
this.setSession(sess);
|
|
82
|
+
this.sm.statusAlertType = 'info';
|
|
83
|
+
this.sm.statusMsg = 'Received session info.';
|
|
84
|
+
this.sm.statusWaiting = false;
|
|
85
|
+
if (sess.project) {
|
|
86
|
+
//console.debug("Session associated project: "+sess.project)
|
|
87
|
+
this.projectService.projectObservable(sess.project).subscribe({
|
|
88
|
+
next: (project) => {
|
|
89
|
+
this.project = project;
|
|
90
|
+
this.fetchScript(sess);
|
|
91
|
+
}, error: (reason) => {
|
|
92
|
+
this.sm.statusMsg = reason;
|
|
93
|
+
this.sm.statusAlertType = 'error';
|
|
94
|
+
this.sm.statusWaiting = false;
|
|
95
|
+
console.error("Error fetching project config: " + reason);
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
console.info("Session has no associated project. Using default configuration.");
|
|
92
101
|
this.fetchScript(sess);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
else {
|
|
101
|
-
console.info("Session has no associated project. Using default configuration.");
|
|
102
|
-
this.fetchScript(sess);
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
error: (reason) => {
|
|
105
|
+
this.sm.statusMsg = reason;
|
|
106
|
+
this.sm.statusAlertType = 'error';
|
|
107
|
+
this.sm.statusWaiting = false;
|
|
108
|
+
console.error("Error fetching session " + reason);
|
|
103
109
|
}
|
|
104
|
-
}, (reason) => {
|
|
105
|
-
this.sm.statusMsg = reason;
|
|
106
|
-
this.sm.statusAlertType = 'error';
|
|
107
|
-
this.sm.statusWaiting = false;
|
|
108
|
-
console.error("Error fetching session " + reason);
|
|
109
110
|
});
|
|
110
111
|
}
|
|
111
112
|
}
|
|
@@ -114,19 +115,21 @@ export class SpeechrecorderngComponent extends RecorderComponent {
|
|
|
114
115
|
this.sm.statusAlertType = 'info';
|
|
115
116
|
this.sm.statusMsg = 'Fetching recording script...';
|
|
116
117
|
this.sm.statusWaiting = true;
|
|
117
|
-
this.scriptService.scriptObservable(sess.script).subscribe(
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
118
|
+
this.scriptService.scriptObservable(sess.script).subscribe({
|
|
119
|
+
next: (script) => {
|
|
120
|
+
this.sm.statusAlertType = 'info';
|
|
121
|
+
this.sm.statusMsg = 'Received recording script.';
|
|
122
|
+
this.sm.statusWaiting = false;
|
|
123
|
+
this.setScript(script);
|
|
124
|
+
this.sm.session = sess;
|
|
125
|
+
this.fetchRecordings(sess, this.script);
|
|
126
|
+
}, error: (reason) => {
|
|
127
|
+
let errMsg = "Error fetching recording script: " + reason;
|
|
128
|
+
console.error(errMsg);
|
|
129
|
+
this.sm.statusMsg = errMsg;
|
|
130
|
+
this.sm.statusAlertType = 'error';
|
|
131
|
+
this.sm.statusWaiting = false;
|
|
132
|
+
}
|
|
130
133
|
});
|
|
131
134
|
}
|
|
132
135
|
else {
|
|
@@ -143,29 +146,31 @@ export class SpeechrecorderngComponent extends RecorderComponent {
|
|
|
143
146
|
let prNm = null;
|
|
144
147
|
if (this.project) {
|
|
145
148
|
let rfsObs = this.recFilesService.recordingFileDescrList(this.project.name, sess.sessionId);
|
|
146
|
-
rfsObs.subscribe(
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
if (rfs
|
|
152
|
-
rfs
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
149
|
+
rfsObs.subscribe({
|
|
150
|
+
next: (rfs) => {
|
|
151
|
+
this.sm.statusAlertType = 'info';
|
|
152
|
+
this.sm.statusMsg = 'Received infos of recordings.';
|
|
153
|
+
this.sm.statusWaiting = false;
|
|
154
|
+
if (rfs) {
|
|
155
|
+
if (rfs instanceof Array) {
|
|
156
|
+
rfs.forEach((rf) => {
|
|
157
|
+
//console.debug("Already recorded: " + rf+ " "+rf.recording.itemcode);
|
|
158
|
+
this.sm.addRecordingFileByDescriptor(rf);
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
console.error('Expected type array for list of already recorded files ');
|
|
163
|
+
}
|
|
156
164
|
}
|
|
157
165
|
else {
|
|
158
|
-
console.
|
|
166
|
+
//console.debug("Recording file list: " + rfs);
|
|
159
167
|
}
|
|
168
|
+
}, error: (err) => {
|
|
169
|
+
// we start the session anyway
|
|
170
|
+
this.startSession();
|
|
171
|
+
}, complete: () => {
|
|
172
|
+
this.startSession();
|
|
160
173
|
}
|
|
161
|
-
else {
|
|
162
|
-
//console.debug("Recording file list: " + rfs);
|
|
163
|
-
}
|
|
164
|
-
}, () => {
|
|
165
|
-
// we start the session anyway
|
|
166
|
-
this.startSession();
|
|
167
|
-
}, () => {
|
|
168
|
-
this.startSession();
|
|
169
174
|
});
|
|
170
175
|
}
|
|
171
176
|
else {
|
|
@@ -188,36 +193,10 @@ export class SpeechrecorderngComponent extends RecorderComponent {
|
|
|
188
193
|
return this.dataSaved && !this.sm.isActive();
|
|
189
194
|
}
|
|
190
195
|
init() {
|
|
191
|
-
|
|
192
|
-
//var getUserMediaFnct= n.getUserMedia || n.webkitGetUserMedia ||
|
|
193
|
-
// n.mozGetUserMedia || n.msGetUserMedia;
|
|
194
|
-
var w = window;
|
|
195
|
-
// TODO test onyl !!
|
|
196
|
-
// let debugFail=true;
|
|
197
|
-
// AudioContext = w.AudioContext || w.webkitAudioContext;
|
|
198
|
-
// if (typeof AudioContext !== 'function' || debugFail) {
|
|
199
|
-
// this.sm.statusAlertType='error';
|
|
200
|
-
// this.sm.statusMsg = 'ERROR: Browser does not support Web Audio API!';
|
|
201
|
-
// return false;
|
|
202
|
-
// } else {
|
|
203
|
-
// var context = new AudioContext();
|
|
204
|
-
//
|
|
205
|
-
// if (typeof navigator.mediaDevices.getUserMedia !== 'function') {
|
|
206
|
-
// this.sm.statusAlertType='error';
|
|
207
|
-
// this.sm.statusMsg= 'ERROR: Browser does not support Media streams!';
|
|
208
|
-
// return false;
|
|
209
|
-
// } else {
|
|
210
|
-
//
|
|
211
|
-
//this.sm = new SessionManager(new SimpleTrafficLight(), this.uploader);
|
|
212
|
-
//this.sm.init();
|
|
213
|
-
//this.ap = new AudioPlayer(context,this);
|
|
214
|
-
//this.sm.listener=this;
|
|
215
|
-
// }
|
|
216
|
-
// }
|
|
196
|
+
//TODO Duplicate code in AudioRecorderComponent
|
|
217
197
|
this.uploader.listener = (ue) => {
|
|
218
198
|
this.uploadUpdate(ue);
|
|
219
199
|
};
|
|
220
|
-
//TODO Duplicate code in AudioRecorderComponent
|
|
221
200
|
window.addEventListener('beforeunload', (e) => {
|
|
222
201
|
console.debug("Before page unload event");
|
|
223
202
|
if (this.ready()) {
|
|
@@ -299,6 +278,9 @@ export class SpeechrecorderngComponent extends RecorderComponent {
|
|
|
299
278
|
let chCnt = ProjectUtil.DEFAULT_AUDIO_CHANNEL_COUNT;
|
|
300
279
|
if (project) {
|
|
301
280
|
console.info("Project name: " + project.name);
|
|
281
|
+
if (project.recordingDeviceWakeLock === true) {
|
|
282
|
+
this.sm.wakeLock = true;
|
|
283
|
+
}
|
|
302
284
|
this.sm.audioDevices = project.audioDevices;
|
|
303
285
|
chCnt = ProjectUtil.audioChannelCount(project);
|
|
304
286
|
console.info("Project requested recording channel count: " + chCnt);
|
|
@@ -339,50 +321,7 @@ export class SpeechrecorderngComponent extends RecorderComponent {
|
|
|
339
321
|
pLoader.send();
|
|
340
322
|
}
|
|
341
323
|
}
|
|
342
|
-
// loadScript(callback: ()=>any){
|
|
343
|
-
// var scrLoader = new XMLHttpRequest();
|
|
344
|
-
// let hn:string =window.location.hostname;
|
|
345
|
-
// let pn:string =window.location.pathname;
|
|
346
|
-
// let pr:string =window.location.protocol;
|
|
347
|
-
// let po:string =window.location.port;
|
|
348
|
-
//
|
|
349
|
-
// let sessionId:string=this.session.sessionId;
|
|
350
|
-
//
|
|
351
|
-
// let scrUrl:string | null = null;
|
|
352
|
-
//
|
|
353
|
-
// if (hn === 'localhost' || this.mode===Mode.DEMO) {
|
|
354
|
-
// // local debug mode
|
|
355
|
-
// // FF caches
|
|
356
|
-
// scrUrl = 'test/' + this.session.script.toString() + '.json?' + new Date().getTime();
|
|
357
|
-
//
|
|
358
|
-
// } else {
|
|
359
|
-
// let scrPath:string = '/wikispeech/session/scripts/servlet';
|
|
360
|
-
// let scrQu:string = 'sessionId=' + sessionId;
|
|
361
|
-
// scrUrl = pr + '//' + hn + ':' + po + scrPath;
|
|
362
|
-
// if (scrQu) {
|
|
363
|
-
// scrUrl = scrUrl + '?' + scrQu;
|
|
364
|
-
// }
|
|
365
|
-
// }
|
|
366
|
-
//
|
|
367
|
-
// scrLoader.open("GET",scrUrl , true);
|
|
368
|
-
// scrLoader.setRequestHeader('Accept','application/json');
|
|
369
|
-
// scrLoader.responseType = "json";
|
|
370
|
-
// scrLoader.onload = (e) => {
|
|
371
|
-
//
|
|
372
|
-
// this.script = scrLoader.response;
|
|
373
|
-
//
|
|
374
|
-
//
|
|
375
|
-
// this.sm.script = this.script;
|
|
376
|
-
//
|
|
377
|
-
// callback();
|
|
378
|
-
// }
|
|
379
|
-
// scrLoader.onerror = (e) => {
|
|
380
|
-
// console.log("Error downloading recording script data ...");
|
|
381
|
-
// }
|
|
382
|
-
// scrLoader.send();
|
|
383
|
-
// }
|
|
384
324
|
start() {
|
|
385
|
-
//this.configure();
|
|
386
325
|
}
|
|
387
326
|
audioPlayerUpdate(e) {
|
|
388
327
|
if (PlaybackEventType.STARTED === e.type) {
|
|
@@ -427,4 +366,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
|
|
|
427
366
|
type: ViewChild,
|
|
428
367
|
args: [SessionManager, { static: true }]
|
|
429
368
|
}] } });
|
|
430
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlZWNocmVjb3JkZXJuZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvc3BlZWNocmVjb3JkZXJuZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxTQUFTLEVBQTJDLE1BQU0sZUFBZSxDQUFBO0FBQzVGLE9BQU8sRUFDa0MsU0FBUyxJQUFJLGlCQUFpQixFQUNyRSxXQUFXLEVBQ1osTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQUUsY0FBYyxFQUFnQyxNQUFNLHlDQUF5QyxDQUFDO0FBQ3ZHLE9BQU8sRUFBNkIsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0UsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBSXhFLE9BQU8sRUFBVSxXQUFXLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUV0RSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUdyRCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXJDLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7QUFFdkQsTUFBTSxDQUFOLElBQVksSUFBMEI7QUFBdEMsV0FBWSxJQUFJO0lBQUUsbURBQWMsQ0FBQTtJQUFDLCtCQUFJLENBQUE7QUFBQSxDQUFDLEVBQTFCLElBQUksS0FBSixJQUFJLFFBQXNCO0FBa0J0QyxNQUFNLE9BQU8seUJBQTBCLFNBQVEsaUJBQWlCO0lBYzlELFlBQW9CLEtBQXFCLEVBQ2YsTUFBYyxFQUNsQixpQkFBb0MsRUFDcEMsZUFBOEIsRUFDOUIsY0FBNkIsRUFDN0IsYUFBMkIsRUFDM0IsZUFBZ0MsRUFDaEMsUUFBK0I7UUFDakQsS0FBSyxFQUFFLENBQUM7UUFSUSxVQUFLLEdBQUwsS0FB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QjtZQUMvQiw2QkFBNkI7WUFDakIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEdBQUMsTUFBTSxDQUFDO1lBQzNDLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxHQUFDLFFBQVEsQ0FBQztTQUMzQjtJQUNGLENBQUM7SUFDRCxLQUFLO1FBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEdBQUMsT0FBTyxDQUFDO1FBQ25DLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxHQUFDLG1CQUFtQixDQUFDO0lBQ3ZDLENBQUM7O3NIQXBiVSx5QkFBeUI7MEdBQXpCLHlCQUF5Qiw2Q0FiekIsQ0FBQyxjQUFjLENBQUMsOERBeUJoQixjQUFjLHFGQXhCZjs7R0FFVDsyRkFVVSx5QkFBeUI7a0JBaEJyQyxTQUFTO21CQUFDO29CQUVULFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFNBQVMsRUFBRSxDQUFDLGNBQWMsQ0FBQztvQkFDM0IsUUFBUSxFQUFFOztHQUVUO29CQUNELE1BQU0sRUFBRSxDQUFDOzs7Ozs7SUFNUCxDQUFDO2lCQUVKO29UQWE4QyxFQUFFO3NCQUE5QyxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgVmlld0NoaWxkLCBDaGFuZ2VEZXRlY3RvclJlZiwgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQge1xyXG4gIEF1ZGlvUGxheWVyTGlzdGVuZXIsIEF1ZGlvUGxheWVyRXZlbnQsIEV2ZW50VHlwZSBhcyBQbGF5YmFja0V2ZW50VHlwZSxcclxuICBBdWRpb1BsYXllclxyXG59IGZyb20gJy4vYXVkaW8vcGxheWJhY2svcGxheWVyJztcclxuaW1wb3J0IHtHcm91cCwgT3JkZXIsIFByb21wdEl0ZW0sIFNjcmlwdH0gZnJvbSAnLi9zcGVlY2hyZWNvcmRlci9zY3JpcHQvc2NyaXB0J1xyXG5pbXBvcnQgeyBTZXNzaW9uTWFuYWdlcixTdGF0dXMgYXMgU2Vzc2lvbk1hbmFnZXJTdGF0dXN9IGZyb20gJy4vc3BlZWNocmVjb3JkZXIvc2Vzc2lvbi9zZXNzaW9ubWFuYWdlcic7XHJcbmltcG9ydCB7IFVwbG9hZGVyU3RhdHVzQ2hhbmdlRXZlbnQsIFVwbG9hZGVyU3RhdHVzIH0gZnJvbSAnLi9uZXQvdXBsb2FkZXInO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBQYXJhbXMsIFJvdXRlcn0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQge1Nlc3Npb25TZXJ2aWNlfSBmcm9tIFwiLi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL3Nlc3Npb24uc2VydmljZVwiO1xyXG5pbXBvcnQge1NjcmlwdFNlcnZpY2V9IGZyb20gXCIuL3NwZWVjaHJlY29yZGVyL3NjcmlwdC9zY3JpcHQuc2VydmljZVwiO1xyXG5pbXBvcnQge1NwZWVjaFJlY29yZGVyVXBsb2FkZXJ9IGZyb20gXCIuL3NwZWVjaHJlY29yZGVyL3NwcnVwbG9hZGVyXCI7XHJcbmltcG9ydCB7U2Vzc2lvbn0gZnJvbSBcIi4vc3BlZWNocmVjb3JkZXIvc2Vzc2lvbi9zZXNzaW9uXCI7XHJcbmltcG9ydCB7UHJvamVjdCwgUHJvamVjdFV0aWx9IGZyb20gXCIuL3NwZWVjaHJlY29yZGVyL3Byb2plY3QvcHJvamVjdFwiO1xyXG5pbXBvcnQge1Byb2plY3RTZXJ2aWNlfSBmcm9tIFwiLi9zcGVlY2hyZWNvcmRlci9wcm9qZWN0L3Byb2plY3Quc2VydmljZVwiO1xyXG5pbXBvcnQge0F1ZGlvQ29udGV4dFByb3ZpZGVyfSBmcm9tIFwiLi9hdWRpby9jb250ZXh0XCI7XHJcbmltcG9ydCB7UmVjb3JkaW5nU2VydmljZX0gZnJvbSBcIi4vc3BlZWNocmVjb3JkZXIvcmVjb3JkaW5ncy9yZWNvcmRpbmdzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtSZWNvcmRpbmdGaWxlRGVzY3JpcHRvckltcGx9IGZyb20gXCIuL3NwZWVjaHJlY29yZGVyL3JlY29yZGluZ1wiO1xyXG5pbXBvcnQge0FycmF5c30gZnJvbSBcIi4vdXRpbHMvdXRpbHNcIjtcclxuaW1wb3J0IHtBdWRpb1JlY29yZGVyQ29tcG9uZW50fSBmcm9tIFwiLi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL2F1ZGlvcmVjb3JkZXJcIjtcclxuaW1wb3J0IHtSZWNvcmRlckNvbXBvbmVudH0gZnJvbSBcIi4vcmVjb3JkZXJfY29tcG9uZW50XCI7XHJcblxyXG5leHBvcnQgZW51bSBNb2RlIHtTSU5HTEVfU0VTU0lPTixERU1PfVxyXG5cclxuQENvbXBvbmVudCh7XHJcblxyXG4gIHNlbGVjdG9yOiAnYXBwLXNwZWVjaHJlY29yZGVyJyxcclxuICBwcm92aWRlcnM6IFtTZXNzaW9uU2VydmljZV0sXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxhcHAtc3BycmVjb3JkaW5nc2Vzc2lvbiBbcHJvamVjdE5hbWVdPVwicHJvamVjdD8ubmFtZVwiIFtkYXRhU2F2ZWRdPVwiZGF0YVNhdmVkXCI+PC9hcHAtc3BycmVjb3JkaW5nc2Vzc2lvbj5cclxuICBgLFxyXG4gIHN0eWxlczogW2A6aG9zdHtcclxuICAgIGZsZXg6IDI7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgIG1pbi1oZWlnaHQ6MDtcclxuXHJcbiAgfWBdXHJcblxyXG59KVxyXG5leHBvcnQgY2xhc3MgU3BlZWNocmVjb3JkZXJuZ0NvbXBvbmVudCBleHRlbmRzIFJlY29yZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LEFmdGVyVmlld0luaXQsQXVkaW9QbGF5ZXJMaXN0ZW5lciB7XHJcblxyXG5cdCAgbW9kZSE6TW9kZTtcclxuXHRcdGNvbnRyb2xBdWRpb1BsYXllciE6QXVkaW9QbGF5ZXI7XHJcblx0XHRhdWRpbzphbnk7XHJcblxyXG5cdF9wcm9qZWN0OlByb2plY3R8bnVsbD1udWxsO1xyXG4gIHNlc3Npb25JZCE6IHN0cmluZztcclxuICBzZXNzaW9uITpTZXNzaW9uO1xyXG5cclxuICBzY3JpcHQhOlNjcmlwdDtcclxuICAgIGRhdGFTYXZlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgQFZpZXdDaGlsZChTZXNzaW9uTWFuYWdlciwgeyBzdGF0aWM6IHRydWUgfSkgc20hOlNlc3Npb25NYW5hZ2VyO1xyXG5cclxuXHRcdGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgICAgICAgICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2Vzc2lvbnNTZXJ2aWNlOlNlc3Npb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwcm9qZWN0U2VydmljZTpQcm9qZWN0U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2NyaXB0U2VydmljZTpTY3JpcHRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSByZWNGaWxlc1NlcnZpY2U6UmVjb3JkaW5nU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXBsb2FkZXI6U3BlZWNoUmVjb3JkZXJVcGxvYWRlcikge1xyXG4gICAgICBzdXBlcigpO1xyXG5cdFx0fVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG5cdFx0ICB0cnkge1xyXG4gICAgICAgIGxldCBhdWRpb0NvbnRleHQgPSBBdWRpb0NvbnRleHRQcm92aWRlci5hdWRpb0NvbnRleHRJbnN0YW5jZSgpO1xyXG4gICAgICAgICAgICAgIGlmKGF1ZGlvQ29udGV4dCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xBdWRpb1BsYXllciA9IG5ldyBBdWRpb1BsYXllcihhdWRpb0NvbnRleHQsIHRoaXMpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICB0aGlzLnNtLmNvbnRyb2xBdWRpb1BsYXllcj10aGlzLmNvbnRyb2xBdWRpb1BsYXllcjtcclxuICAgICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZT0naW5mbyc7XHJcbiAgICAgICAgdGhpcy5zbS5zdGF0dXNNc2cgPSAnUGxheWVyIGluaXRpYWxpemVkLic7XHJcbiAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgIGxldCBlcnJNc2c9J1Vua25vd24gZXJyb3InO1xyXG4gICAgICAgIGlmKGVyciBpbnN0YW5jZW9mIEVycm9yKXtcclxuICAgICAgICAgIGVyck1zZz1lcnIubWVzc2FnZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zbS5zdGF0dXNNc2c9ZXJyTXNnO1xyXG4gICAgICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlPSdlcnJvcic7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJNc2cpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgICAgIG5nQWZ0ZXJWaWV3SW5pdCgpe1xyXG5cclxuXHRcdCAgaWYodGhpcy5zbS5zdGF0dXMhPT0gU2Vzc2lvbk1hbmFnZXJTdGF0dXMuRVJST1IpIHtcclxuICAgICAgICBsZXQgaW5pdFN1Y2Nlc3MgPSB0aGlzLmluaXQoKTtcclxuICAgICAgICBpZiAoaW5pdFN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKChwYXJhbXM6IFBhcmFtcykgPT4ge1xyXG4gICAgICAgICAgICBpZiAocGFyYW1zWydzZXNzaW9uSWQnXSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZmV0Y2hTZXNzaW9uKHBhcmFtc1snc2Vzc2lvbklkJ10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtczogUGFyYW1zKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCByb3V0ZVBhcmFtc0lkID0gcGFyYW1zWydpZCddO1xyXG4gICAgICAgICAgICBpZiAocm91dGVQYXJhbXNJZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZmV0Y2hTZXNzaW9uKHJvdXRlUGFyYW1zSWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZldGNoU2Vzc2lvbihzZXNzaW9uSWQ6c3RyaW5nKXtcclxuXHJcblxyXG5cdFx0ICAvL0Vycm9yOiBFeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yOiBFeHByZXNzaW9uIGhhcyBjaGFuZ2VkIGFmdGVyIGl0IHdhcyBjaGVja2VkLiBQcmV2aW91cyB2YWx1ZTogJ3N0YXR1c01zZzogUGxheWVyIGluaXRpYWxpemVkLicuIEN1cnJlbnQgdmFsdWU6ICdzdGF0dXNNc2c6IEZldGNoaW5nIHNlc3Npb24gaW5mby4uLicuXHJcbiAgICAgIC8vIHBhcmFtcy5zdWJzY3JpYmUgc2VlbXMgbm90IHRvIGJlIGFzeW5jaHJvbm91c1xyXG5cclxuICAgICAgLy8gdGhpcy5zbS5zdGF0dXNBbGVydFR5cGU9J2luZm8nO1xyXG4gICAgICAvLyB0aGlzLnNtLnN0YXR1c01zZyA9ICdGZXRjaGluZyBzZXNzaW9uIGluZm8uLi4nO1xyXG4gICAgICAvLyB0aGlzLnNtLnN0YXR1c1dhaXRpbmc9dHJ1ZTtcclxuICAgICAgbGV0IHNlc3NPYnM9IHRoaXMuc2Vzc2lvbnNTZXJ2aWNlLnNlc3Npb25PYnNlcnZlcihzZXNzaW9uSWQpO1xyXG5cclxuICAgICAgaWYoc2Vzc09icykge1xyXG4gICAgICAgIHNlc3NPYnMuc3Vic2NyaWJlKHNlc3MgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZXRTZXNzaW9uKHNlc3MpO1xyXG4gICAgICAgICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZT0naW5mbyc7XHJcbiAgICAgICAgICAgIHRoaXMuc20uc3RhdHVzTXNnID0gJ1JlY2VpdmVkIHNlc3Npb24gaW5mby4nO1xyXG4gICAgICAgICAgICB0aGlzLnNtLnN0YXR1c1dhaXRpbmc9ZmFsc2U7XHJcbiAgICAgICAgICBpZiAoc2Vzcy5wcm9qZWN0KSB7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlNlc3Npb24gYXNzb2NpYXRlZCBwcm9qZWN0OiBcIitzZXNzLnByb2plY3QpXHJcbiAgICAgICAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdE9ic2VydmFibGUoc2Vzcy5wcm9qZWN0KS5zdWJzY3JpYmUocHJvamVjdD0+e1xyXG4gICAgICAgICAgICAgIHRoaXMucHJvamVjdD1wcm9qZWN0O1xyXG4gICAgICAgICAgICAgIHRoaXMuZmV0Y2hTY3JpcHQoc2Vzcyk7XHJcbiAgICAgICAgICAgIH0scmVhc29uID0+e1xyXG4gICAgICAgICAgICAgIHRoaXMuc20uc3RhdHVzTXNnPXJlYXNvbjtcclxuICAgICAgICAgICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZT0nZXJyb3InO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNXYWl0aW5nPWZhbHNlO1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBmZXRjaGluZyBwcm9qZWN0IGNvbmZpZzogXCIrcmVhc29uKVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmluZm8oXCJTZXNzaW9uIGhhcyBubyBhc3NvY2lhdGVkIHByb2plY3QuIFVzaW5nIGRlZmF1bHQgY29uZmlndXJhdGlvbi5cIilcclxuICAgICAgICAgICAgdGhpcy5mZXRjaFNjcmlwdChzZXNzKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIChyZWFzb24pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNNc2cgPSByZWFzb247XHJcbiAgICAgICAgICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJztcclxuICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNXYWl0aW5nPWZhbHNlO1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZmV0Y2hpbmcgc2Vzc2lvbiBcIiArIHJlYXNvbilcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGZldGNoU2NyaXB0KHNlc3M6U2Vzc2lvbil7XHJcbiAgICAgIGlmKHNlc3Muc2NyaXB0KXtcclxuICAgICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZT0naW5mbyc7XHJcbiAgICAgICAgdGhpcy5zbS5zdGF0dXNNc2cgPSAnRmV0Y2hpbmcgcmVjb3JkaW5nIHNjcmlwdC4uLic7XHJcbiAgICAgICAgICB0aGlzLnNtLnN0YXR1c1dhaXRpbmc9dHJ1ZTtcclxuICAgICAgICB0aGlzLnNjcmlwdFNlcnZpY2Uuc2NyaXB0T2JzZXJ2YWJsZShzZXNzLnNjcmlwdCkuc3Vic2NyaWJlKHNjcmlwdD0+e1xyXG4gICAgICAgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGU9J2luZm8nO1xyXG4gICAgICAgICAgdGhpcy5zbS5zdGF0dXNNc2cgPSAnUmVjZWl2ZWQgcmVjb3JkaW5nIHNjcmlwdC4nO1xyXG4gICAgICAgICAgdGhpcy5zbS5zdGF0dXNXYWl0aW5nPWZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5zZXRTY3JpcHQoc2NyaXB0KVxyXG4gICAgICAgICAgdGhpcy5zbS5zZXNzaW9uPXNlc3M7XHJcbiAgICAgICAgICB0aGlzLmZldGNoUmVjb3JkaW5ncyhzZXNzLHRoaXMuc2NyaXB0KVxyXG4gICAgICAgIH0scmVhc29uID0+e1xyXG4gICAgICAgICAgbGV0IGVyck1zZz1cIkVycm9yIGZldGNoaW5nIHJlY29yZGluZyBzY3JpcHQ6IFwiK3JlYXNvblxyXG4gICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyTXNnKVxyXG4gICAgICAgICAgICB0aGlzLnNtLnN0YXR1c01zZz1lcnJNc2c7XHJcbiAgICAgICAgICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlPSdlcnJvcic7XHJcbiAgICAgICAgICAgIHRoaXMuc20uc3RhdHVzV2FpdGluZz1mYWxzZTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICBsZXQgZXJyTXNnPVwiTm8gcmVjb3JkaW5nIHNjcmlwdCBpcyBkZWZpbmVkIGZvciB0aGlzIHNlc3Npb24gd2l0aCBJRCBcIitzZXNzLnNlc3Npb25JZDtcclxuICAgICAgICBjb25zb2xlLmVycm9yKHRoaXMuc20uc3RhdHVzTXNnKVxyXG4gICAgICAgIHRoaXMuc20uc3RhdHVzTXNnPWVyck1zZztcclxuICAgICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZT0nZXJyb3InO1xyXG5cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBmZXRjaFJlY29yZGluZ3Moc2VzczpTZXNzaW9uLHNjcmlwdDpTY3JpcHQpe1xyXG4gICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZT0naW5mbyc7XHJcbiAgICAgIHRoaXMuc20uc3RhdHVzTXNnID0gJ0ZldGNoaW5nIGluZm9zIG9mIHJlY29yZGluZ3MuLi4nO1xyXG4gICAgICAgIHRoaXMuc20uc3RhdHVzV2FpdGluZz10cnVlO1xyXG4gICAgICAgIGxldCBwck5tOnN0cmluZ3xudWxsPW51bGw7XHJcbiAgICAgICAgaWYodGhpcy5wcm9qZWN0KSB7XHJcbiAgICAgICAgICAgIGxldCByZnNPYnMgPSB0aGlzLnJlY0ZpbGVzU2VydmljZS5yZWNvcmRpbmdGaWxlRGVzY3JMaXN0KHRoaXMucHJvamVjdC5uYW1lLCBzZXNzLnNlc3Npb25JZCk7XHJcbiAgICAgICAgICAgIHJmc09icy5zdWJzY3JpYmUoKHJmczogQXJyYXk8UmVjb3JkaW5nRmlsZURlc2NyaXB0b3JJbXBsPikgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGUgPSAnaW5mbyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNtLnN0YXR1c01zZyA9ICdSZWNlaXZlZCBpbmZvcyBvZiByZWNvcmRpbmdzLic7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNtLnN0YXR1c1dhaXRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmIChyZnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmZzIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmZzLmZvckVhY2goKHJmKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJBbHJlYWR5IHJlY29yZGVkOiBcIiArIHJmKyBcIiBcIityZi5yZWNvcmRpbmcuaXRlbWNvZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zbS5hZGRSZWNvcmRpbmdGaWxlQnlEZXNjcmlwdG9yKHJmKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFeHBlY3RlZCB0eXBlIGFycmF5IGZvciBsaXN0IG9mIGFscmVhZHkgcmVjb3JkZWQgZmlsZXMgJylcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlJlY29yZGluZyBmaWxlIGxpc3Q6IFwiICsgcmZzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gd2Ugc3RhcnQgdGhlIHNlc3Npb24gYW55d2F5XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0U2Vzc2lvbigpXHJcbiAgICAgICAgICAgIH0sICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRTZXNzaW9uKClcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBzdGFydFNlc3Npb24oKXtcclxuICAgICAgICB0aGlzLnNtLnN0YXR1c1dhaXRpbmc9ZmFsc2U7XHJcblx0XHQgIHRoaXMuc20uc3RhcnQoKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgICAgIHNldFNlc3Npb24oc2Vzc2lvbjphbnkpe1xyXG5cdFx0ICAgIGlmKHNlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgLy8gY29uc29sZS5kZWJ1ZyhcIlNlc3Npb24gSUQ6IFwiICsgc2Vzc2lvbi5zZXNzaW9uSWQpO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlNlc3Npb24gVW5kZWZpbmVkXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZWFkeSgpOmJvb2xlYW57XHJcblx0XHQgICAgcmV0dXJuIHRoaXMuZGF0YVNhdmVkICYmICF0aGlzLnNtLmlzQWN0aXZlKClcclxuICAgICAgICB9XHJcblxyXG5cdFx0aW5pdCgpOmJvb2xlYW4ge1xyXG5cclxuXHRcdFx0dmFyIG4gPSA8YW55Pm5hdmlnYXRvcjtcclxuXHRcdFx0Ly92YXIgZ2V0VXNlck1lZGlhRm5jdD0gbi5nZXRVc2VyTWVkaWEgfHwgbi53ZWJraXRHZXRVc2VyTWVkaWEgfHxcclxuXHRcdFx0Ly9cdG4ubW96R2V0VXNlck1lZGlhIHx8IG4ubXNHZXRVc2VyTWVkaWE7XHJcblx0XHRcdHZhciB3ID0gPGFueT53aW5kb3c7XHJcblx0XHRcdC8vIFRPRE8gdGVzdCBvbnlsICEhXHJcblxyXG4gICAgICAvLyBsZXQgZGVidWdGYWlsPXRydWU7XHJcblx0XHQvLyBcdEF1ZGlvQ29udGV4dCA9IHcuQXVkaW9Db250ZXh0IHx8IHcud2Via2l0QXVkaW9Db250ZXh0O1xyXG5cdFx0Ly8gXHRpZiAodHlwZW9mIEF1ZGlvQ29udGV4dCAhPT0gJ2Z1bmN0aW9uJyB8fCBkZWJ1Z0ZhaWwpIHtcclxuICAgICAgLy8gICAgICAgICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlPSdlcnJvcic7XHJcblx0XHQvLyBcdFx0dGhpcy5zbS5zdGF0dXNNc2cgPSAnRVJST1I6IEJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBXZWIgQXVkaW8gQVBJISc7XHJcblx0XHQvLyBcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0Ly8gXHR9IGVsc2Uge1xyXG5cdFx0Ly8gXHRcdHZhciBjb250ZXh0ID0gbmV3IEF1ZGlvQ29udGV4dCgpO1xyXG4gICAgICAvL1xyXG5cdFx0Ly8gXHRcdGlmICh0eXBlb2YgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgLy8gICAgICAgICAgICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZT0nZXJyb3InO1xyXG5cdFx0Ly8gXHRcdFx0dGhpcy5zbS5zdGF0dXNNc2c9ICdFUlJPUjogQnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IE1lZGlhIHN0cmVhbXMhJztcclxuICAgICAgLy8gICAgIHJldHVybiBmYWxzZTtcclxuXHRcdC8vIFx0XHR9IGVsc2Uge1xyXG4gICAgICAvL1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuc20gPSBuZXcgU2Vzc2lvbk1hbmFnZXIobmV3IFNpbXBsZVRyYWZmaWNMaWdodCgpLCB0aGlzLnVwbG9hZGVyKTtcclxuXHRcdFx0XHRcdC8vdGhpcy5zbS5pbml0KCk7XHJcblx0XHRcdFx0XHQvL3RoaXMuYXAgPSBuZXcgQXVkaW9QbGF5ZXIoY29udGV4dCx0aGlzKTtcclxuXHRcdFx0XHRcdC8vdGhpcy5zbS5saXN0ZW5lcj10aGlzO1xyXG5cdFx0XHQvL1x0fVxyXG5cdFx0Ly9cdH1cclxuICAgICAgICAgICAgdGhpcy51cGxvYWRlci5saXN0ZW5lciA9ICh1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGxvYWRVcGRhdGUodWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgLy9UT0RPIER1cGxpY2F0ZSBjb2RlIGluIEF1ZGlvUmVjb3JkZXJDb21wb25lbnRcclxuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKFwiQmVmb3JlIHBhZ2UgdW5sb2FkIGV2ZW50XCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5KCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGFsbCB0aGlzIGF0dGVtcHRzIHRvIGN1c3RvbWl6ZSB0aGUgbWVzc2FnZSBkbyBub3Qgd29yayBhbnltb3JlIChmb3Igc2VjdXJpdHkgcmVhc29ucykhIVxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gXCJQbGVhc2UgZG8gbm90IGxlYXZlIHRoZSBwYWdlLCB1bnRpbCBhbGwgcmVjb3JkaW5ncyBhcmUgdXBsb2FkZWQhXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQobWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZSA9IGUgfHwgd2luZG93LmV2ZW50O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnJldHVyblZhbHVlID0gbWVzc2FnZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5jYW5jZWxCdWJibGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5zdG9wUHJvcGFnYXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUucHJldmVudERlZmF1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gIHVwbG9hZFVwZGF0ZSh1ZTogVXBsb2FkZXJTdGF0dXNDaGFuZ2VFdmVudCkge1xyXG4gICAgbGV0IHVwU3RhdHVzID0gdWUuc3RhdHVzO1xyXG4gICAgdGhpcy5kYXRhU2F2ZWQgPSAoVXBsb2FkZXJTdGF0dXMuRE9ORSA9PT0gdXBTdGF0dXMpO1xyXG4gICAgbGV0IHBlcmNlbnRVcGwgPSB1ZS5wZXJjZW50RG9uZSgpO1xyXG4gICAgaWYgKFVwbG9hZGVyU3RhdHVzLkVSUiA9PT0gdXBTdGF0dXMpIHtcclxuICAgICAgdGhpcy5zbS51cGxvYWRTdGF0dXMgPSAnd2FybidcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChwZXJjZW50VXBsIDwgNTApIHtcclxuICAgICAgICB0aGlzLnNtLnVwbG9hZFN0YXR1cyA9ICdhY2NlbnQnXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zbS51cGxvYWRTdGF0dXMgPSAnc3VjY2VzcydcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNtLnVwbG9hZFByb2dyZXNzID0gcGVyY2VudFVwbDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKVxyXG4gIH1cclxuXHJcbiAgY29uZmlndXJlKCkge1xyXG5cclxuXHJcblxyXG4gICAgICB0aGlzLmxvYWRQcm9qZWN0Q2ZnKCgpID0+IHtcclxuICAgICAgICAvLyBkaXNwbGF5IHByb2plY3QgbmFtZVxyXG4gICAgICAgIGxldCBwck5hbWU6IHN0cmluZyA9ICdbVW5rbm93bl0nO1xyXG4gICAgICAgIGlmICh0aGlzLnByb2plY3QgJiYgdGhpcy5wcm9qZWN0Lm5hbWUpIHtcclxuICAgICAgICAgIHByTmFtZSA9IHRoaXMucHJvamVjdC5uYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL3RoaXMudGl0bGVFbC5pbm5lclRleHQgPSBwck5hbWU7XHJcblxyXG4gICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIHByaXZhdGUgcmFuZG9taXplKHNjcmlwdDpTY3JpcHQpe1xyXG5cdFx0ICAgIHNjcmlwdC5zZWN0aW9ucy5mb3JFYWNoKChzKT0+e1xyXG5cdFx0ICAgICAgICBpZignUkFORE9NJz09PXMub3JkZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBzLl9zaHVmZmxlZEdyb3VwcyA9IEFycmF5cy5zaHVmZmxlQXJyYXk8R3JvdXA+KHMuZ3JvdXBzKTtcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG5cdFx0ICAgICAgICAgICAgcy5fc2h1ZmZsZWRHcm91cHM9cy5ncm91cHM7XHJcbiAgICAgICAgICAgICAgICB9XHJcblx0XHQgICAgICAgIHMuX3NodWZmbGVkR3JvdXBzLmZvckVhY2goKGcpPT57XHJcblx0XHQgICAgICAgICAgICBpZignUkFORE9NJz09PWcub3JkZXIpe1xyXG5cdFx0ICAgICAgICAgICAgICAgZy5fc2h1ZmZsZWRQcm9tcHRJdGVtcz1BcnJheXMuc2h1ZmZsZUFycmF5PFByb21wdEl0ZW0+KGcucHJvbXB0SXRlbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG5cdFx0ICAgICAgICAgICAgICAgIGcuX3NodWZmbGVkUHJvbXB0SXRlbXM9Zy5wcm9tcHRJdGVtcztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0U2NyaXB0KHNjcmlwdDpTY3JpcHQpe1xyXG4gICAgICAgIHRoaXMuc2NyaXB0PXNjcmlwdDtcclxuICAgICAgICB0aGlzLnJhbmRvbWl6ZSh0aGlzLnNjcmlwdCk7XHJcbiAgICAgICAgdGhpcy5zbS5zY3JpcHQgPSB0aGlzLnNjcmlwdDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgc2V0IHByb2plY3QocHJvamVjdDogUHJvamVjdHxudWxsKSB7XHJcbiAgICAgICAgdGhpcy5fcHJvamVjdCA9IHByb2plY3Q7XHJcbiAgICAgICAgbGV0IGNoQ250ID0gUHJvamVjdFV0aWwuREVGQVVMVF9BVURJT19DSEFOTkVMX0NPVU5UO1xyXG5cclxuICAgICAgICBpZiAocHJvamVjdCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmluZm8oXCJQcm9qZWN0IG5hbWU6IFwiICsgcHJvamVjdC5uYW1lKVxyXG4gICAgICAgICAgICB0aGlzLnNtLmF1ZGlvRGV2aWNlcyA9IHByb2plY3QuYXVkaW9EZXZpY2VzO1xyXG4gICAgICAgICAgICBjaENudCA9IFByb2plY3RVdGlsLmF1ZGlvQ2hhbm5lbENvdW50KHByb2plY3QpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmluZm8oXCJQcm9qZWN0IHJlcXVlc3RlZCByZWNvcmRpbmcgY2hhbm5lbCBjb3VudDogXCIgKyBjaENudCk7XHJcbiAgICAgICAgICAgIHRoaXMuc20uYXV0b0dhaW5Db250cm9sQ29uZmlncz1wcm9qZWN0LmF1dG9HYWluQ29udHJvbENvbmZpZ3M7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVtcHR5IHByb2plY3QgY29uZmlndXJhdGlvbiFcIilcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zbS5jaGFubmVsQ291bnQgPSBjaENudDtcclxuXHJcbiAgICB9XHJcblxyXG4gIGdldCBwcm9qZWN0KCk6UHJvamVjdHxudWxse1xyXG5cdFx0ICByZXR1cm4gdGhpcy5fcHJvamVjdDtcclxuICB9XHJcblxyXG5cclxuXHJcblxyXG4gICAgbG9hZFByb2plY3RDZmcoY2FsbGJhY2s6ICgpPT4gYW55KXtcclxuICAgICAgbGV0IHByb2pVcmw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgaWYgKHRoaXMuc2Vzc2lvbklkID09PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSA9PT0gJ2xvY2FsaG9zdCcgfHwgdGhpcy5tb2RlID09PSBNb2RlLkRFTU8pIHtcclxuICAgICAgICAgIC8vIGRlYnVnIG9yIGRlbW8gbW9kZVxyXG4gICAgICAgICAgcHJvalVybCA9ICd0ZXN0L0RlbW8xLmpzb24/JyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBsb2FkIFJFU1RmdWwgYnkgc2Vzc2lvbklkXHJcbiAgICAgICAgcHJvalVybCA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgKyAnOicgKyB3aW5kb3cubG9jYXRpb24ucG9ydCArICcvd2lraXNwZWVjaC9yZXN0L3Byb2plY3RzLz9zZXNzaW9uSWQ9JyArIHRoaXMuc2Vzc2lvbklkO1xyXG5cclxuICAgICAgfVxyXG4gICAgICBpZihwcm9qVXJsKSB7XHJcbiAgICAgICAgdmFyIHBMb2FkZXIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgICBwTG9hZGVyLm9wZW4oXCJHRVRcIiwgcHJvalVybCwgdHJ1ZSk7XHJcbiAgICAgICAgcExvYWRlci5zZXRSZXF1ZXN0SGVhZGVyKCdBY2NlcHQnLCAnYXBwbGljYXRpb24vanNvbicpO1xyXG4gICAgICAgIHBMb2FkZXIucmVzcG9uc2VUeXBlID0gXCJqc29uXCI7XHJcbiAgICAgICAgcExvYWRlci5vbmxvYWQgPSAoZSkgPT4ge1xyXG5cclxuICAgICAgICAgIHRoaXMucHJvamVjdCA9IHBMb2FkZXIucmVzcG9uc2UucHJvamVjdDtcclxuXHJcbiAgICAgICAgICBjYWxsYmFjaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwTG9hZGVyLm9uZXJyb3IgPSAoZSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGRvd25sb2FkaW5nIHByb2plY3QgZGF0YSAuLi5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBMb2FkZXIuc2VuZCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG4gIC8vIGxvYWRTY3JpcHQoY2FsbGJhY2s6ICgpPT5hbnkpe1xyXG4gIC8vICAgdmFyIHNjckxvYWRlciA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gIC8vICAgbGV0IGhuOnN0cmluZyA9d2luZG93LmxvY2F0aW9uLmhvc3RuYW1lO1xyXG4gIC8vICAgbGV0IHBuOnN0cmluZyA9d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lO1xyXG4gIC8vICAgbGV0IHByOnN0cmluZyA9d2luZG93LmxvY2F0aW9uLnByb3RvY29sO1xyXG4gIC8vICAgbGV0IHBvOnN0cmluZyA9d2luZG93LmxvY2F0aW9uLnBvcnQ7XHJcbiAgLy9cclxuICAvLyAgIGxldCBzZXNzaW9uSWQ6c3RyaW5nPXRoaXMuc2Vzc2lvbi5zZXNzaW9uSWQ7XHJcbiAgLy9cclxuICAvLyAgICAgbGV0IHNjclVybDpzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICAvL1xyXG4gIC8vICAgICBpZiAoaG4gPT09ICdsb2NhbGhvc3QnICB8fCB0aGlzLm1vZGU9PT1Nb2RlLkRFTU8pIHtcclxuICAvLyAgICAgICAgIC8vIGxvY2FsIGRlYnVnIG1vZGVcclxuICAvLyAgICAgICAgIC8vIEZGIGNhY2hlc1xyXG4gIC8vICAgICAgICAgc2NyVXJsID0gJ3Rlc3QvJyArIHRoaXMuc2Vzc2lvbi5zY3JpcHQudG9TdHJpbmcoKSArICcuanNvbj8nICsgbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgLy9cclxuICAvLyAgICAgfSBlbHNlIHtcclxuICAvLyAgICAgICAgIGxldCBzY3JQYXRoOnN0cmluZyA9ICcvd2lraXNwZWVjaC9zZXNzaW9uL3NjcmlwdHMvc2VydmxldCc7XHJcbiAgLy8gICAgICAgICBsZXQgc2NyUXU6c3RyaW5nID0gJ3Nlc3Npb25JZD0nICsgc2Vzc2lvbklkO1xyXG4gIC8vICAgICAgICAgc2NyVXJsID0gcHIgKyAnLy8nICsgaG4gKyAnOicgKyBwbyArIHNjclBhdGg7XHJcbiAgLy8gICAgICAgICBpZiAoc2NyUXUpIHtcclxuICAvLyAgICAgICAgICAgICBzY3JVcmwgPSBzY3JVcmwgKyAnPycgKyBzY3JRdTtcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgfVxyXG4gIC8vXHJcbiAgLy8gICBzY3JMb2FkZXIub3BlbihcIkdFVFwiLHNjclVybCAsIHRydWUpO1xyXG4gIC8vICAgc2NyTG9hZGVyLnNldFJlcXVlc3RIZWFkZXIoJ0FjY2VwdCcsJ2FwcGxpY2F0aW9uL2pzb24nKTtcclxuICAvLyAgIHNjckxvYWRlci5yZXNwb25zZVR5cGUgPSBcImpzb25cIjtcclxuICAvLyAgIHNjckxvYWRlci5vbmxvYWQgPSAoZSkgPT4ge1xyXG4gIC8vXHJcbiAgLy8gICAgIHRoaXMuc2NyaXB0ID0gc2NyTG9hZGVyLnJlc3BvbnNlO1xyXG4gIC8vXHJcbiAgLy9cclxuICAvLyAgICAgdGhpcy5zbS5zY3JpcHQgPSB0aGlzLnNjcmlwdDtcclxuICAvL1xyXG4gIC8vICAgICBjYWxsYmFjaygpO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgc2NyTG9hZGVyLm9uZXJyb3IgPSAoZSkgPT4ge1xyXG4gIC8vICAgICBjb25zb2xlLmxvZyhcIkVycm9yIGRvd25sb2FkaW5nIHJlY29yZGluZyBzY3JpcHQgZGF0YSAuLi5cIik7XHJcbiAgLy8gICB9XHJcbiAgLy8gICBzY3JMb2FkZXIuc2VuZCgpO1xyXG4gIC8vIH1cclxuXHJcbiAgICBzdGFydCgpe1xyXG5cclxuICAgICAgICAvL3RoaXMuY29uZmlndXJlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuXHRcdGF1ZGlvUGxheWVyVXBkYXRlKGU6QXVkaW9QbGF5ZXJFdmVudCl7XHJcblx0XHRcdGlmKFBsYXliYWNrRXZlbnRUeXBlLlNUQVJURUQ9PT1lLnR5cGUpe1xyXG5cdFx0XHRcdC8vdGhpcy5zdGFydEJ0bi5kaXNhYmxlZD10cnVlO1xyXG5cdFx0XHRcdC8vdGhpcy5zdG9wQnRuLmRpc2FibGVkPXRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZT0naW5mbyc7XHJcblx0XHRcdFx0dGhpcy5zbS5zdGF0dXNNc2c9J1BsYXliYWNrLi4uJztcclxuXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoUGxheWJhY2tFdmVudFR5cGUuRU5ERUQgPT09IGUudHlwZSkge1xyXG5cdFx0XHRcdC8vdGhpcy5zdGFydEJ0bi5kaXNhYmxlZD1mYWxzZTtcclxuXHRcdFx0XHQvL3RoaXMuc3RvcEJ0bi5kaXNhYmxlZD10cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGU9J2luZm8nO1xyXG5cdFx0XHRcdHRoaXMuc20uc3RhdHVzTXNnPSdSZWFkeS4nO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRlcnJvcigpe1xyXG5cdFx0ICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlPSdlcnJvcic7XHJcblx0XHRcdHRoaXMuc20uc3RhdHVzTXNnPSdFUlJPUjogUmVjb3JkaW5nLic7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcbi8vXHJcbi8vXHJcbi8vIGZ1bmN0aW9uIHNwZWVjaHJlY29yZGVySW5pdCgpIHtcclxuLy8gXHR2YXIgc3ByID0gbmV3IGlwcy5hcHBzLnNwZWVlY2hyZWNvcmRlci5TcGVlY2hSZWNvcmRlcigpO1xyXG4vLyBcdHNwci5pbml0KCk7XHJcbi8vICAgc3ByLnN0YXJ0KCk7XHJcbi8vXHJcbi8vXHJcbi8vIH1cclxuIl19
|
|
369
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlZWNocmVjb3JkZXJuZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvc3BlZWNocmVjb3JkZXJuZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxTQUFTLEVBQTJDLE1BQU0sZUFBZSxDQUFBO0FBQzVGLE9BQU8sRUFDa0MsU0FBUyxJQUFJLGlCQUFpQixFQUNyRSxXQUFXLEVBQ1osTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQUUsY0FBYyxFQUFnQyxNQUFNLHlDQUF5QyxDQUFDO0FBQ3ZHLE9BQU8sRUFBNkIsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0UsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBSXhFLE9BQU8sRUFBVSxXQUFXLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUV0RSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUdyRCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXJDLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7QUFFdkQsTUFBTSxDQUFOLElBQVksSUFBMEI7QUFBdEMsV0FBWSxJQUFJO0lBQUUsbURBQWMsQ0FBQTtJQUFDLCtCQUFJLENBQUE7QUFBQSxDQUFDLEVBQTFCLElBQUksS0FBSixJQUFJLFFBQXNCO0FBa0J0QyxNQUFNLE9BQU8seUJBQTBCLFNBQVEsaUJBQWlCO0lBYzlELFlBQW9CLEtBQXFCLEVBQ2YsTUFBYyxFQUNsQixpQkFBb0MsRUFDcEMsZUFBOEIsRUFDOUIsY0FBNkIsRUFDN0IsYUFBMkIsRUFDM0IsZUFBZ0MsRUFDOUIsUUFBK0I7UUFDbkQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBUkEsVUFB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LENBQUMsQ0FBa0I7UUFDbkMsSUFBRyxpQkFBaUIsQ0FBQyxPQUFPLEtBQUcsQ0FBQyxDQUFDLElBQUksRUFBQztZQUNyQyw4QkFBOEI7WUFDOUIsNkJBQTZCO1lBQ2pCLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxHQUFDLE1BQU0sQ0FBQztZQUMzQyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsR0FBQyxhQUFhLENBQUM7U0FFdkI7YUFBTSxJQUFJLGlCQUFpQixDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFO1lBQ3ZELCtCQUErQjtZQUMvQiw2QkFBNkI7WUFDakIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEdBQUMsTUFBTSxDQUFDO1lBQzNDLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxHQUFDLFFBQVEsQ0FBQztTQUMzQjtJQUNGLENBQUM7SUFDRCxLQUFLO1FBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEdBQUMsT0FBTyxDQUFDO1FBQ25DLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxHQUFDLG1CQUFtQixDQUFDO0lBQ3ZDLENBQUM7O3NIQXZXVSx5QkFBeUI7MEdBQXpCLHlCQUF5Qiw2Q0FiekIsQ0FBQyxjQUFjLENBQUMsOERBeUJoQixjQUFjLHFGQXhCZjs7R0FFVDsyRkFVVSx5QkFBeUI7a0JBaEJyQyxTQUFTO21CQUFDO29CQUVULFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFNBQVMsRUFBRSxDQUFDLGNBQWMsQ0FBQztvQkFDM0IsUUFBUSxFQUFFOztHQUVUO29CQUNELE1BQU0sRUFBRSxDQUFDOzs7Ozs7SUFNUCxDQUFDO2lCQUVKO29UQWE4QyxFQUFFO3NCQUE5QyxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgVmlld0NoaWxkLCBDaGFuZ2VEZXRlY3RvclJlZiwgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQge1xyXG4gIEF1ZGlvUGxheWVyTGlzdGVuZXIsIEF1ZGlvUGxheWVyRXZlbnQsIEV2ZW50VHlwZSBhcyBQbGF5YmFja0V2ZW50VHlwZSxcclxuICBBdWRpb1BsYXllclxyXG59IGZyb20gJy4vYXVkaW8vcGxheWJhY2svcGxheWVyJztcclxuaW1wb3J0IHtHcm91cCwgT3JkZXIsIFByb21wdEl0ZW0sIFNjcmlwdH0gZnJvbSAnLi9zcGVlY2hyZWNvcmRlci9zY3JpcHQvc2NyaXB0J1xyXG5pbXBvcnQgeyBTZXNzaW9uTWFuYWdlcixTdGF0dXMgYXMgU2Vzc2lvbk1hbmFnZXJTdGF0dXN9IGZyb20gJy4vc3BlZWNocmVjb3JkZXIvc2Vzc2lvbi9zZXNzaW9ubWFuYWdlcic7XHJcbmltcG9ydCB7IFVwbG9hZGVyU3RhdHVzQ2hhbmdlRXZlbnQsIFVwbG9hZGVyU3RhdHVzIH0gZnJvbSAnLi9uZXQvdXBsb2FkZXInO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBQYXJhbXMsIFJvdXRlcn0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQge1Nlc3Npb25TZXJ2aWNlfSBmcm9tIFwiLi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL3Nlc3Npb24uc2VydmljZVwiO1xyXG5pbXBvcnQge1NjcmlwdFNlcnZpY2V9IGZyb20gXCIuL3NwZWVjaHJlY29yZGVyL3NjcmlwdC9zY3JpcHQuc2VydmljZVwiO1xyXG5pbXBvcnQge1NwZWVjaFJlY29yZGVyVXBsb2FkZXJ9IGZyb20gXCIuL3NwZWVjaHJlY29yZGVyL3NwcnVwbG9hZGVyXCI7XHJcbmltcG9ydCB7U2Vzc2lvbn0gZnJvbSBcIi4vc3BlZWNocmVjb3JkZXIvc2Vzc2lvbi9zZXNzaW9uXCI7XHJcbmltcG9ydCB7UHJvamVjdCwgUHJvamVjdFV0aWx9IGZyb20gXCIuL3NwZWVjaHJlY29yZGVyL3Byb2plY3QvcHJvamVjdFwiO1xyXG5pbXBvcnQge1Byb2plY3RTZXJ2aWNlfSBmcm9tIFwiLi9zcGVlY2hyZWNvcmRlci9wcm9qZWN0L3Byb2plY3Quc2VydmljZVwiO1xyXG5pbXBvcnQge0F1ZGlvQ29udGV4dFByb3ZpZGVyfSBmcm9tIFwiLi9hdWRpby9jb250ZXh0XCI7XHJcbmltcG9ydCB7UmVjb3JkaW5nU2VydmljZX0gZnJvbSBcIi4vc3BlZWNocmVjb3JkZXIvcmVjb3JkaW5ncy9yZWNvcmRpbmdzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtSZWNvcmRpbmdGaWxlRGVzY3JpcHRvckltcGx9IGZyb20gXCIuL3NwZWVjaHJlY29yZGVyL3JlY29yZGluZ1wiO1xyXG5pbXBvcnQge0FycmF5c30gZnJvbSBcIi4vdXRpbHMvdXRpbHNcIjtcclxuaW1wb3J0IHtBdWRpb1JlY29yZGVyQ29tcG9uZW50fSBmcm9tIFwiLi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL2F1ZGlvcmVjb3JkZXJcIjtcclxuaW1wb3J0IHtSZWNvcmRlckNvbXBvbmVudH0gZnJvbSBcIi4vcmVjb3JkZXJfY29tcG9uZW50XCI7XHJcblxyXG5leHBvcnQgZW51bSBNb2RlIHtTSU5HTEVfU0VTU0lPTixERU1PfVxyXG5cclxuQENvbXBvbmVudCh7XHJcblxyXG4gIHNlbGVjdG9yOiAnYXBwLXNwZWVjaHJlY29yZGVyJyxcclxuICBwcm92aWRlcnM6IFtTZXNzaW9uU2VydmljZV0sXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxhcHAtc3BycmVjb3JkaW5nc2Vzc2lvbiBbcHJvamVjdE5hbWVdPVwicHJvamVjdD8ubmFtZVwiIFtkYXRhU2F2ZWRdPVwiZGF0YVNhdmVkXCI+PC9hcHAtc3BycmVjb3JkaW5nc2Vzc2lvbj5cclxuICBgLFxyXG4gIHN0eWxlczogW2A6aG9zdHtcclxuICAgIGZsZXg6IDI7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgIG1pbi1oZWlnaHQ6MDtcclxuXHJcbiAgfWBdXHJcblxyXG59KVxyXG5leHBvcnQgY2xhc3MgU3BlZWNocmVjb3JkZXJuZ0NvbXBvbmVudCBleHRlbmRzIFJlY29yZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LEFmdGVyVmlld0luaXQsQXVkaW9QbGF5ZXJMaXN0ZW5lciB7XHJcblxyXG5cdCAgbW9kZSE6TW9kZTtcclxuXHRcdGNvbnRyb2xBdWRpb1BsYXllciE6QXVkaW9QbGF5ZXI7XHJcblx0XHRhdWRpbzphbnk7XHJcblxyXG5cdF9wcm9qZWN0OlByb2plY3R8bnVsbD1udWxsO1xyXG4gIHNlc3Npb25JZCE6IHN0cmluZztcclxuICBzZXNzaW9uITpTZXNzaW9uO1xyXG5cclxuICBzY3JpcHQhOlNjcmlwdDtcclxuXHJcbiAgQFZpZXdDaGlsZChTZXNzaW9uTWFuYWdlciwgeyBzdGF0aWM6IHRydWUgfSkgc20hOlNlc3Npb25NYW5hZ2VyO1xyXG5cclxuXHRcdGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgICAgICAgICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2Vzc2lvbnNTZXJ2aWNlOlNlc3Npb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwcm9qZWN0U2VydmljZTpQcm9qZWN0U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2NyaXB0U2VydmljZTpTY3JpcHRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSByZWNGaWxlc1NlcnZpY2U6UmVjb3JkaW5nU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCB1cGxvYWRlcjpTcGVlY2hSZWNvcmRlclVwbG9hZGVyKSB7XHJcbiAgICAgIHN1cGVyKHVwbG9hZGVyKTtcclxuXHRcdH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuXHRcdCAgdHJ5IHtcclxuICAgICAgICBsZXQgYXVkaW9Db250ZXh0ID0gQXVkaW9Db250ZXh0UHJvdmlkZXIuYXVkaW9Db250ZXh0SW5zdGFuY2UoKTtcclxuICAgICAgICAgICAgICBpZihhdWRpb0NvbnRleHQpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jb250cm9sQXVkaW9QbGF5ZXIgPSBuZXcgQXVkaW9QbGF5ZXIoYXVkaW9Db250ZXh0LCB0aGlzKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zbS5jb250cm9sQXVkaW9QbGF5ZXI9dGhpcy5jb250cm9sQXVkaW9QbGF5ZXI7XHJcbiAgICAgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGU9J2luZm8nO1xyXG4gICAgICAgIHRoaXMuc20uc3RhdHVzTXNnID0gJ1BsYXllciBpbml0aWFsaXplZC4nO1xyXG4gICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICBsZXQgZXJyTXNnPSdVbmtub3duIGVycm9yJztcclxuICAgICAgICBpZihlcnIgaW5zdGFuY2VvZiBFcnJvcil7XHJcbiAgICAgICAgICBlcnJNc2c9ZXJyLm1lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc20uc3RhdHVzTXNnPWVyck1zZztcclxuICAgICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZT0nZXJyb3InO1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyTXNnKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAgICBuZ0FmdGVyVmlld0luaXQoKXtcclxuICAgICAgICAvLyBsZXQgd2FrZUxvY2tTdXBwPSgnd2FrZUxvY2snIGluIG5hdmlnYXRvcik7XHJcbiAgICAgICAgLy8gYWxlcnQoJ1dha2UgbG9jayBBUEkgc3VwcG9ydGVkOiAnK3dha2VMb2NrU3VwcCk7XHJcblxyXG5cclxuXHRcdCAgaWYodGhpcy5zbS5zdGF0dXMhPT0gU2Vzc2lvbk1hbmFnZXJTdGF0dXMuRVJST1IpIHtcclxuICAgICAgICBsZXQgaW5pdFN1Y2Nlc3MgPSB0aGlzLmluaXQoKTtcclxuICAgICAgICBpZiAoaW5pdFN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKChwYXJhbXM6IFBhcmFtcykgPT4ge1xyXG4gICAgICAgICAgICBpZiAocGFyYW1zWydzZXNzaW9uSWQnXSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZmV0Y2hTZXNzaW9uKHBhcmFtc1snc2Vzc2lvbklkJ10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtczogUGFyYW1zKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCByb3V0ZVBhcmFtc0lkID0gcGFyYW1zWydpZCddO1xyXG4gICAgICAgICAgICBpZiAocm91dGVQYXJhbXNJZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZmV0Y2hTZXNzaW9uKHJvdXRlUGFyYW1zSWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZldGNoU2Vzc2lvbihzZXNzaW9uSWQ6c3RyaW5nKXtcclxuXHJcbiAgICAgIGxldCBzZXNzT2JzPSB0aGlzLnNlc3Npb25zU2VydmljZS5zZXNzaW9uT2JzZXJ2ZXIoc2Vzc2lvbklkKTtcclxuXHJcbiAgICAgIGlmKHNlc3NPYnMpIHtcclxuICAgICAgICBzZXNzT2JzLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiBzZXNzID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTZXNzaW9uKHNlc3MpO1xyXG4gICAgICAgICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZSA9ICdpbmZvJztcclxuICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNNc2cgPSAnUmVjZWl2ZWQgc2Vzc2lvbiBpbmZvLic7XHJcbiAgICAgICAgICAgIHRoaXMuc20uc3RhdHVzV2FpdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoc2Vzcy5wcm9qZWN0KSB7XHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiU2Vzc2lvbiBhc3NvY2lhdGVkIHByb2plY3Q6IFwiK3Nlc3MucHJvamVjdClcclxuICAgICAgICAgICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3RPYnNlcnZhYmxlKHNlc3MucHJvamVjdCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgbmV4dDogKHByb2plY3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2plY3QgPSBwcm9qZWN0O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hTY3JpcHQoc2Vzcyk7XHJcbiAgICAgICAgICAgICAgICAgIH0sIGVycm9yOiAocmVhc29uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNNc2cgPSByZWFzb247XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGUgPSAnZXJyb3InO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc20uc3RhdHVzV2FpdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBmZXRjaGluZyBwcm9qZWN0IGNvbmZpZzogXCIgKyByZWFzb24pXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmluZm8oXCJTZXNzaW9uIGhhcyBubyBhc3NvY2lhdGVkIHByb2plY3QuIFVzaW5nIGRlZmF1bHQgY29uZmlndXJhdGlvbi5cIilcclxuICAgICAgICAgICAgICB0aGlzLmZldGNoU2NyaXB0KHNlc3MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6KHJlYXNvbikgPT5cclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNNc2cgPSByZWFzb247XHJcbiAgICAgICAgICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJztcclxuICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNXYWl0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBmZXRjaGluZyBzZXNzaW9uIFwiICsgcmVhc29uKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gIGZldGNoU2NyaXB0KHNlc3M6IFNlc3Npb24pIHtcclxuICAgIGlmIChzZXNzLnNjcmlwdCkge1xyXG4gICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZSA9ICdpbmZvJztcclxuICAgICAgdGhpcy5zbS5zdGF0dXNNc2cgPSAnRmV0Y2hpbmcgcmVjb3JkaW5nIHNjcmlwdC4uLic7XHJcbiAgICAgIHRoaXMuc20uc3RhdHVzV2FpdGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2NyaXB0U2VydmljZS5zY3JpcHRPYnNlcnZhYmxlKHNlc3Muc2NyaXB0KS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChzY3JpcHQpID0+IHtcclxuICAgICAgICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlID0gJ2luZm8nO1xyXG4gICAgICAgICAgdGhpcy5zbS5zdGF0dXNNc2cgPSAnUmVjZWl2ZWQgcmVjb3JkaW5nIHNjcmlwdC4nO1xyXG4gICAgICAgICAgdGhpcy5zbS5zdGF0dXNXYWl0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnNldFNjcmlwdChzY3JpcHQpXHJcbiAgICAgICAgICB0aGlzLnNtLnNlc3Npb24gPSBzZXNzO1xyXG4gICAgICAgICAgdGhpcy5mZXRjaFJlY29yZGluZ3Moc2VzcywgdGhpcy5zY3JpcHQpXHJcbiAgICAgICAgfSwgZXJyb3I6IChyZWFzb24pID0+IHtcclxuICAgICAgICAgIGxldCBlcnJNc2cgPSBcIkVycm9yIGZldGNoaW5nIHJlY29yZGluZyBzY3JpcHQ6IFwiICsgcmVhc29uXHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVyck1zZylcclxuICAgICAgICAgIHRoaXMuc20uc3RhdHVzTXNnID0gZXJyTXNnO1xyXG4gICAgICAgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGUgPSAnZXJyb3InO1xyXG4gICAgICAgICAgdGhpcy5zbS5zdGF0dXNXYWl0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBlcnJNc2cgPSBcIk5vIHJlY29yZGluZyBzY3JpcHQgaXMgZGVmaW5lZCBmb3IgdGhpcyBzZXNzaW9uIHdpdGggSUQgXCIgKyBzZXNzLnNlc3Npb25JZDtcclxuICAgICAgY29uc29sZS5lcnJvcih0aGlzLnNtLnN0YXR1c01zZylcclxuICAgICAgdGhpcy5zbS5zdGF0dXNNc2cgPSBlcnJNc2c7XHJcbiAgICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJztcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmZXRjaFJlY29yZGluZ3Moc2VzczogU2Vzc2lvbiwgc2NyaXB0OiBTY3JpcHQpIHtcclxuICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlID0gJ2luZm8nO1xyXG4gICAgdGhpcy5zbS5zdGF0dXNNc2cgPSAnRmV0Y2hpbmcgaW5mb3Mgb2YgcmVjb3JkaW5ncy4uLic7XHJcbiAgICB0aGlzLnNtLnN0YXR1c1dhaXRpbmcgPSB0cnVlO1xyXG4gICAgbGV0IHByTm06IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgaWYgKHRoaXMucHJvamVjdCkge1xyXG4gICAgICBsZXQgcmZzT2JzID0gdGhpcy5yZWNGaWxlc1NlcnZpY2UucmVjb3JkaW5nRmlsZURlc2NyTGlzdCh0aGlzLnByb2plY3QubmFtZSwgc2Vzcy5zZXNzaW9uSWQpO1xyXG4gICAgICByZnNPYnMuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmZzOiBBcnJheTxSZWNvcmRpbmdGaWxlRGVzY3JpcHRvckltcGw+KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZSA9ICdpbmZvJztcclxuICAgICAgICAgIHRoaXMuc20uc3RhdHVzTXNnID0gJ1JlY2VpdmVkIGluZm9zIG9mIHJlY29yZGluZ3MuJztcclxuICAgICAgICAgIHRoaXMuc20uc3RhdHVzV2FpdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKHJmcykge1xyXG4gICAgICAgICAgICBpZiAocmZzIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICAgICAgICByZnMuZm9yRWFjaCgocmYpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkFscmVhZHkgcmVjb3JkZWQ6IFwiICsgcmYrIFwiIFwiK3JmLnJlY29yZGluZy5pdGVtY29kZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNtLmFkZFJlY29yZGluZ0ZpbGVCeURlc2NyaXB0b3IocmYpO1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXhwZWN0ZWQgdHlwZSBhcnJheSBmb3IgbGlzdCBvZiBhbHJlYWR5IHJlY29yZGVkIGZpbGVzICcpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlJlY29yZGluZyBmaWxlIGxpc3Q6IFwiICsgcmZzKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LCBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgLy8gd2Ugc3RhcnQgdGhlIHNlc3Npb24gYW55d2F5XHJcbiAgICAgICAgICB0aGlzLnN0YXJ0U2Vzc2lvbigpXHJcbiAgICAgICAgfSwgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc3RhcnRTZXNzaW9uKClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBUT0RPXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgICBwcml2YXRlIHN0YXJ0U2Vzc2lvbigpe1xyXG4gICAgICAgIHRoaXMuc20uc3RhdHVzV2FpdGluZz1mYWxzZTtcclxuXHRcdCAgdGhpcy5zbS5zdGFydCgpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAgICAgc2V0U2Vzc2lvbihzZXNzaW9uOmFueSl7XHJcblx0XHQgICAgaWYoc2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAvLyBjb25zb2xlLmRlYnVnKFwiU2Vzc2lvbiBJRDogXCIgKyBzZXNzaW9uLnNlc3Npb25JZCk7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiU2Vzc2lvbiBVbmRlZmluZWRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlYWR5KCk6Ym9vbGVhbntcclxuXHRcdCAgICByZXR1cm4gdGhpcy5kYXRhU2F2ZWQgJiYgIXRoaXMuc20uaXNBY3RpdmUoKVxyXG4gICAgICAgIH1cclxuXHJcblx0XHRpbml0KCk6Ym9vbGVhbiB7XHJcbiAgICAgIC8vVE9ETyBEdXBsaWNhdGUgY29kZSBpbiBBdWRpb1JlY29yZGVyQ29tcG9uZW50XHJcbiAgICAgICAgdGhpcy51cGxvYWRlci5saXN0ZW5lciA9ICh1ZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy51cGxvYWRVcGRhdGUodWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgKGUpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJCZWZvcmUgcGFnZSB1bmxvYWQgZXZlbnRcIik7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMucmVhZHkoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBhbGwgdGhpcyBhdHRlbXB0cyB0byBjdXN0b21pemUgdGhlIG1lc3NhZ2UgZG8gbm90IHdvcmsgYW55bW9yZSAoZm9yIHNlY3VyaXR5IHJlYXNvbnMpISFcclxuICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBcIlBsZWFzZSBkbyBub3QgbGVhdmUgdGhlIHBhZ2UsIHVudGlsIGFsbCByZWNvcmRpbmdzIGFyZSB1cGxvYWRlZCFcIjtcclxuICAgICAgICAgICAgYWxlcnQobWVzc2FnZSk7XHJcbiAgICAgICAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcclxuXHJcbiAgICAgICAgICAgIGlmIChlKSB7XHJcbiAgICAgICAgICAgICAgZS5yZXR1cm5WYWx1ZSA9IG1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgZS5jYW5jZWxCdWJibGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGlmIChlLnN0b3BQcm9wYWdhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKGUucHJldmVudERlZmF1bHQpIHtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgdXBsb2FkVXBkYXRlKHVlOiBVcGxvYWRlclN0YXR1c0NoYW5nZUV2ZW50KSB7XHJcbiAgICBsZXQgdXBTdGF0dXMgPSB1ZS5zdGF0dXM7XHJcbiAgICB0aGlzLmRhdGFTYXZlZCA9IChVcGxvYWRlclN0YXR1cy5ET05FID09PSB1cFN0YXR1cyk7XHJcbiAgICBsZXQgcGVyY2VudFVwbCA9IHVlLnBlcmNlbnREb25lKCk7XHJcbiAgICBpZiAoVXBsb2FkZXJTdGF0dXMuRVJSID09PSB1cFN0YXR1cykge1xyXG4gICAgICB0aGlzLnNtLnVwbG9hZFN0YXR1cyA9ICd3YXJuJ1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHBlcmNlbnRVcGwgPCA1MCkge1xyXG4gICAgICAgIHRoaXMuc20udXBsb2FkU3RhdHVzID0gJ2FjY2VudCdcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNtLnVwbG9hZFN0YXR1cyA9ICdzdWNjZXNzJ1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc20udXBsb2FkUHJvZ3Jlc3MgPSBwZXJjZW50VXBsO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgfVxyXG5cclxuICBjb25maWd1cmUoKSB7XHJcblxyXG4gICAgICB0aGlzLmxvYWRQcm9qZWN0Q2ZnKCgpID0+IHtcclxuICAgICAgICAvLyBkaXNwbGF5IHByb2plY3QgbmFtZVxyXG4gICAgICAgIGxldCBwck5hbWU6IHN0cmluZyA9ICdbVW5rbm93bl0nO1xyXG4gICAgICAgIGlmICh0aGlzLnByb2plY3QgJiYgdGhpcy5wcm9qZWN0Lm5hbWUpIHtcclxuICAgICAgICAgIHByTmFtZSA9IHRoaXMucHJvamVjdC5uYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL3RoaXMudGl0bGVFbC5pbm5lclRleHQgPSBwck5hbWU7XHJcblxyXG4gICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByYW5kb21pemUoc2NyaXB0OlNjcmlwdCl7XHJcblx0XHQgICAgc2NyaXB0LnNlY3Rpb25zLmZvckVhY2goKHMpPT57XHJcblx0XHQgICAgICAgIGlmKCdSQU5ET00nPT09cy5vcmRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHMuX3NodWZmbGVkR3JvdXBzID0gQXJyYXlzLnNodWZmbGVBcnJheTxHcm91cD4ocy5ncm91cHMpO1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcblx0XHQgICAgICAgICAgICBzLl9zaHVmZmxlZEdyb3Vwcz1zLmdyb3VwcztcclxuICAgICAgICAgICAgICAgIH1cclxuXHRcdCAgICAgICAgcy5fc2h1ZmZsZWRHcm91cHMuZm9yRWFjaCgoZyk9PntcclxuXHRcdCAgICAgICAgICAgIGlmKCdSQU5ET00nPT09Zy5vcmRlcil7XHJcblx0XHQgICAgICAgICAgICAgICBnLl9zaHVmZmxlZFByb21wdEl0ZW1zPUFycmF5cy5zaHVmZmxlQXJyYXk8UHJvbXB0SXRlbT4oZy5wcm9tcHRJdGVtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcblx0XHQgICAgICAgICAgICAgICAgZy5fc2h1ZmZsZWRQcm9tcHRJdGVtcz1nLnByb21wdEl0ZW1zO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRTY3JpcHQoc2NyaXB0OlNjcmlwdCl7XHJcbiAgICAgICAgdGhpcy5zY3JpcHQ9c2NyaXB0O1xyXG4gICAgICAgIHRoaXMucmFuZG9taXplKHRoaXMuc2NyaXB0KTtcclxuICAgICAgICB0aGlzLnNtLnNjcmlwdCA9IHRoaXMuc2NyaXB0O1xyXG4gICAgfVxyXG5cclxuXHJcbiAgc2V0IHByb2plY3QocHJvamVjdDogUHJvamVjdHxudWxsKSB7XHJcbiAgICB0aGlzLl9wcm9qZWN0ID0gcHJvamVjdDtcclxuICAgIGxldCBjaENudCA9IFByb2plY3RVdGlsLkRFRkFVTFRfQVVESU9fQ0hBTk5FTF9DT1VOVDtcclxuXHJcbiAgICBpZiAocHJvamVjdCkge1xyXG4gICAgICBjb25zb2xlLmluZm8oXCJQcm9qZWN0IG5hbWU6IFwiICsgcHJvamVjdC5uYW1lKVxyXG4gICAgICBpZihwcm9qZWN0LnJlY29yZGluZ0RldmljZVdha2VMb2NrPT09dHJ1ZSl7XHJcbiAgICAgICAgdGhpcy5zbS53YWtlTG9jaz10cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc20uYXVkaW9EZXZpY2VzID0gcHJvamVjdC5hdWRpb0RldmljZXM7XHJcbiAgICAgIGNoQ250ID0gUHJvamVjdFV0aWwuYXVkaW9DaGFubmVsQ291bnQocHJvamVjdCk7XHJcbiAgICAgIGNvbnNvbGUuaW5mbyhcIlByb2plY3QgcmVxdWVzdGVkIHJlY29yZGluZyBjaGFubmVsIGNvdW50OiBcIiArIGNoQ250KTtcclxuICAgICAgdGhpcy5zbS5hdXRvR2FpbkNvbnRyb2xDb25maWdzPXByb2plY3QuYXV0b0dhaW5Db250cm9sQ29uZmlncztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFbXB0eSBwcm9qZWN0IGNvbmZpZ3VyYXRpb24hXCIpXHJcbiAgICB9XHJcbiAgICB0aGlzLnNtLmNoYW5uZWxDb3VudCA9IGNoQ250O1xyXG5cclxuICB9XHJcblxyXG4gIGdldCBwcm9qZWN0KCk6UHJvamVjdHxudWxse1xyXG5cdFx0ICByZXR1cm4gdGhpcy5fcHJvamVjdDtcclxuICB9XHJcblxyXG4gICAgbG9hZFByb2plY3RDZmcoY2FsbGJhY2s6ICgpPT4gYW55KXtcclxuICAgICAgbGV0IHByb2pVcmw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgaWYgKHRoaXMuc2Vzc2lvbklkID09PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSA9PT0gJ2xvY2FsaG9zdCcgfHwgdGhpcy5tb2RlID09PSBNb2RlLkRFTU8pIHtcclxuICAgICAgICAgIC8vIGRlYnVnIG9yIGRlbW8gbW9kZVxyXG4gICAgICAgICAgcHJvalVybCA9ICd0ZXN0L0RlbW8xLmpzb24/JyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBsb2FkIFJFU1RmdWwgYnkgc2Vzc2lvbklkXHJcbiAgICAgICAgcHJvalVybCA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgKyAnOicgKyB3aW5kb3cubG9jYXRpb24ucG9ydCArICcvd2lraXNwZWVjaC9yZXN0L3Byb2plY3RzLz9zZXNzaW9uSWQ9JyArIHRoaXMuc2Vzc2lvbklkO1xyXG5cclxuICAgICAgfVxyXG4gICAgICBpZihwcm9qVXJsKSB7XHJcbiAgICAgICAgdmFyIHBMb2FkZXIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgICBwTG9hZGVyLm9wZW4oXCJHRVRcIiwgcHJvalVybCwgdHJ1ZSk7XHJcbiAgICAgICAgcExvYWRlci5zZXRSZXF1ZXN0SGVhZGVyKCdBY2NlcHQnLCAnYXBwbGljYXRpb24vanNvbicpO1xyXG4gICAgICAgIHBMb2FkZXIucmVzcG9uc2VUeXBlID0gXCJqc29uXCI7XHJcbiAgICAgICAgcExvYWRlci5vbmxvYWQgPSAoZSkgPT4ge1xyXG5cclxuICAgICAgICAgIHRoaXMucHJvamVjdCA9IHBMb2FkZXIucmVzcG9uc2UucHJvamVjdDtcclxuXHJcbiAgICAgICAgICBjYWxsYmFjaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwTG9hZGVyLm9uZXJyb3IgPSAoZSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGRvd25sb2FkaW5nIHByb2plY3QgZGF0YSAuLi5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBMb2FkZXIuc2VuZCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnQoKXtcclxuICAgIH1cclxuXHJcblx0XHRhdWRpb1BsYXllclVwZGF0ZShlOkF1ZGlvUGxheWVyRXZlbnQpe1xyXG5cdFx0XHRpZihQbGF5YmFja0V2ZW50VHlwZS5TVEFSVEVEPT09ZS50eXBlKXtcclxuXHRcdFx0XHQvL3RoaXMuc3RhcnRCdG4uZGlzYWJsZWQ9dHJ1ZTtcclxuXHRcdFx0XHQvL3RoaXMuc3RvcEJ0bi5kaXNhYmxlZD10cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGU9J2luZm8nO1xyXG5cdFx0XHRcdHRoaXMuc20uc3RhdHVzTXNnPSdQbGF5YmFjay4uLic7XHJcblxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKFBsYXliYWNrRXZlbnRUeXBlLkVOREVEID09PSBlLnR5cGUpIHtcclxuXHRcdFx0XHQvL3RoaXMuc3RhcnRCdG4uZGlzYWJsZWQ9ZmFsc2U7XHJcblx0XHRcdFx0Ly90aGlzLnN0b3BCdG4uZGlzYWJsZWQ9dHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlPSdpbmZvJztcclxuXHRcdFx0XHR0aGlzLnNtLnN0YXR1c01zZz0nUmVhZHkuJztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0ZXJyb3IoKXtcclxuXHRcdCAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZT0nZXJyb3InO1xyXG5cdFx0XHR0aGlzLnNtLnN0YXR1c01zZz0nRVJST1I6IFJlY29yZGluZy4nO1xyXG5cdFx0fVxyXG5cdH1cclxuIl19
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const VERSION = '2.
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
export const VERSION = '2.24.2';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ByLm1vZHVsZS52ZXJzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3Nwci5tb2R1bGUudmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUMsUUFBUSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFZFUlNJT049JzIuMjQuMiciXX0=
|