speechrecorderng 2.21.4 → 2.22.0

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.
Files changed (111) hide show
  1. package/{esm2015/lib/action/action.js → esm2020/lib/action/action.mjs} +0 -0
  2. package/{esm2015/lib/audio/audio_display.js → esm2020/lib/audio/audio_display.mjs} +5 -5
  3. package/esm2020/lib/audio/audio_player.mjs +276 -0
  4. package/esm2020/lib/audio/capture/capture.mjs +547 -0
  5. package/{esm2015/lib/audio/context.js → esm2020/lib/audio/context.mjs} +0 -0
  6. package/esm2020/lib/audio/dsp/level_measure.mjs +351 -0
  7. package/{esm2015/lib/audio/format.js → esm2020/lib/audio/format.mjs} +0 -0
  8. package/{esm2015/lib/audio/impl/wavformat.js → esm2020/lib/audio/impl/wavformat.mjs} +0 -0
  9. package/{esm2015/lib/audio/impl/wavwriter.js → esm2020/lib/audio/impl/wavwriter.mjs} +0 -0
  10. package/{esm2015/lib/audio/io/stream.js → esm2020/lib/audio/io/stream.mjs} +0 -0
  11. package/{esm2015/lib/audio/persistor.js → esm2020/lib/audio/persistor.mjs} +0 -0
  12. package/{esm2015/lib/audio/playback/player.js → esm2020/lib/audio/playback/player.mjs} +0 -0
  13. package/esm2020/lib/audio/ui/audio_canvas_layer_comp.mjs +376 -0
  14. package/{esm2015/lib/audio/ui/audio_display_control.js → esm2020/lib/audio/ui/audio_display_control.mjs} +5 -5
  15. package/{esm2015/lib/audio/ui/audio_display_scroll_pane.js → esm2020/lib/audio/ui/audio_display_scroll_pane.mjs} +5 -5
  16. package/{esm2015/lib/audio/ui/audiosignal.js → esm2020/lib/audio/ui/audiosignal.mjs} +5 -5
  17. package/{esm2015/lib/audio/ui/common.js → esm2020/lib/audio/ui/common.mjs} +0 -0
  18. package/esm2020/lib/audio/ui/container.mjs +431 -0
  19. package/{esm2015/lib/audio/ui/livelevel.js → esm2020/lib/audio/ui/livelevel.mjs} +5 -5
  20. package/{esm2015/lib/audio/ui/scroll_pane_horizontal.js → esm2020/lib/audio/ui/scroll_pane_horizontal.mjs} +4 -4
  21. package/{esm2015/lib/audio/ui/sonagram.js → esm2020/lib/audio/ui/sonagram.mjs} +5 -5
  22. package/{esm2015/lib/dsp/utils.js → esm2020/lib/dsp/utils.mjs} +0 -0
  23. package/{esm2015/lib/io/BinaryWriter.js → esm2020/lib/io/BinaryWriter.mjs} +0 -0
  24. package/{esm2015/lib/io/stream.js → esm2020/lib/io/stream.mjs} +0 -0
  25. package/{esm2015/lib/math/2d/geometry.js → esm2020/lib/math/2d/geometry.mjs} +0 -0
  26. package/{esm2015/lib/math/complex.js → esm2020/lib/math/complex.mjs} +0 -0
  27. package/{esm2015/lib/math/dft.js → esm2020/lib/math/dft.mjs} +0 -0
  28. package/{esm2015/lib/math/utils.js → esm2020/lib/math/utils.mjs} +0 -0
  29. package/esm2020/lib/media/utils.mjs +14 -0
  30. package/esm2020/lib/net/uploader.mjs +246 -0
  31. package/{esm2015/lib/speechrecorder/project/project.js → esm2020/lib/speechrecorder/project/project.mjs} +0 -0
  32. package/{esm2015/lib/speechrecorder/project/project.service.js → esm2020/lib/speechrecorder/project/project.service.mjs} +4 -4
  33. package/esm2020/lib/speechrecorder/recording.mjs +54 -0
  34. package/esm2020/lib/speechrecorder/recordings/recordings.service.mjs +246 -0
  35. package/{esm2015/lib/speechrecorder/script/script.js → esm2020/lib/speechrecorder/script/script.mjs} +2 -2
  36. package/{esm2015/lib/speechrecorder/script/script.service.js → esm2020/lib/speechrecorder/script/script.service.mjs} +4 -4
  37. package/esm2020/lib/speechrecorder/session/audiorecorder.mjs +1144 -0
  38. package/esm2020/lib/speechrecorder/session/controlpanel.mjs +449 -0
  39. package/{esm2015/lib/speechrecorder/session/item.js → esm2020/lib/speechrecorder/session/item.mjs} +1 -1
  40. package/{esm2015/lib/speechrecorder/session/progress.js → esm2020/lib/speechrecorder/session/progress.mjs} +5 -5
  41. package/{esm2015/lib/speechrecorder/session/prompting.js → esm2020/lib/speechrecorder/session/prompting.mjs} +21 -21
  42. package/esm2020/lib/speechrecorder/session/recorder_combi_pane.mjs +75 -0
  43. package/esm2020/lib/speechrecorder/session/recording_list.mjs +109 -0
  44. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +126 -0
  45. package/{esm2015/lib/speechrecorder/session/recordingfile/recording-file-navi.component.js → esm2020/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs} +5 -5
  46. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +168 -0
  47. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +415 -0
  48. package/{esm2015/lib/speechrecorder/session/recordingfile/recording-file.js → esm2020/lib/speechrecorder/session/recordingfile/recording-file.mjs} +1 -1
  49. package/esm2020/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +251 -0
  50. package/{esm2015/lib/speechrecorder/session/session.js → esm2020/lib/speechrecorder/session/session.mjs} +0 -0
  51. package/{esm2015/lib/speechrecorder/session/session.service.js → esm2020/lib/speechrecorder/session/session.service.mjs} +4 -4
  52. package/{esm2015/lib/speechrecorder/session/session_finished_dialog.js → esm2020/lib/speechrecorder/session/session_finished_dialog.mjs} +4 -4
  53. package/esm2020/lib/speechrecorder/session/sessionmanager.mjs +1274 -0
  54. package/{esm2015/lib/speechrecorder/session/warning_bar.js → esm2020/lib/speechrecorder/session/warning_bar.mjs} +5 -5
  55. package/{esm2015/lib/speechrecorder/spruploader.js → esm2020/lib/speechrecorder/spruploader.mjs} +4 -4
  56. package/{esm2015/lib/speechrecorder/startstopsignal/startstopsignal.js → esm2020/lib/speechrecorder/startstopsignal/startstopsignal.mjs} +0 -0
  57. package/{esm2015/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.js → esm2020/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs} +5 -5
  58. package/esm2020/lib/speechrecorderng.component.mjs +427 -0
  59. package/{esm2015/lib/speechrecorderng.module.js → esm2020/lib/speechrecorderng.module.mjs} +12 -11
  60. package/{esm2015/lib/spr.config.js → esm2020/lib/spr.config.mjs} +4 -4
  61. package/{esm2015/lib/spr.module.version.js → esm2020/lib/spr.module.version.mjs} +2 -2
  62. package/{esm2015/lib/ui/canvas_layer_comp.js → esm2020/lib/ui/canvas_layer_comp.mjs} +4 -4
  63. package/{esm2015/lib/ui/message_dialog.js → esm2020/lib/ui/message_dialog.mjs} +4 -4
  64. package/{esm2015/lib/ui/recordingitem_display.js → esm2020/lib/ui/recordingitem_display.mjs} +9 -9
  65. package/{esm2015/lib/utils/css_utils.js → esm2020/lib/utils/css_utils.mjs} +0 -0
  66. package/{esm2015/lib/utils/scrollIntoViewToBottom.js → esm2020/lib/utils/scrollIntoViewToBottom.mjs} +4 -4
  67. package/{esm2015/lib/utils/ua-parser.js → esm2020/lib/utils/ua-parser.mjs} +0 -0
  68. package/{esm2015/lib/utils/utils.js → esm2020/lib/utils/utils.mjs} +0 -0
  69. package/esm2020/public-api.mjs +31 -0
  70. package/{esm2015/speechrecorderng.js → esm2020/speechrecorderng.mjs} +0 -0
  71. package/fesm2015/speechrecorderng.mjs +11991 -0
  72. package/fesm2015/speechrecorderng.mjs.map +1 -0
  73. package/{fesm2015/speechrecorderng.js → fesm2020/speechrecorderng.mjs} +1863 -285
  74. package/fesm2020/speechrecorderng.mjs.map +1 -0
  75. package/lib/media/utils.d.ts +3 -0
  76. package/lib/net/uploader.d.ts +4 -2
  77. package/lib/speechrecorder/recording.d.ts +14 -3
  78. package/lib/speechrecorder/recordings/recordings.service.d.ts +12 -5
  79. package/lib/speechrecorder/session/audiorecorder.d.ts +150 -0
  80. package/lib/speechrecorder/session/controlpanel.d.ts +2 -1
  81. package/lib/speechrecorder/session/item.d.ts +2 -2
  82. package/lib/speechrecorder/session/recorder_combi_pane.d.ts +26 -0
  83. package/lib/speechrecorder/session/recording_list.d.ts +19 -0
  84. package/lib/speechrecorder/session/recordingfile/recording-file-meta.component.d.ts +6 -2
  85. package/lib/speechrecorder/session/recordingfile/recording-file-view.component.d.ts +5 -4
  86. package/lib/speechrecorder/session/recordingfile/recording-file.d.ts +2 -2
  87. package/lib/speechrecorder/session/recordingfile/recordingfile-service.d.ts +5 -3
  88. package/lib/speechrecorder/session/sessionmanager.d.ts +5 -5
  89. package/lib/speechrecorderng.module.d.ts +31 -28
  90. package/lib/spr.module.version.d.ts +1 -1
  91. package/package.json +33 -20
  92. package/public-api.d.ts +2 -1
  93. package/bundles/speechrecorderng.umd.js +0 -10146
  94. package/bundles/speechrecorderng.umd.js.map +0 -1
  95. package/esm2015/lib/audio/audio_player.js +0 -274
  96. package/esm2015/lib/audio/capture/capture.js +0 -544
  97. package/esm2015/lib/audio/dsp/level_measure.js +0 -356
  98. package/esm2015/lib/audio/ui/audio_canvas_layer_comp.js +0 -364
  99. package/esm2015/lib/audio/ui/container.js +0 -412
  100. package/esm2015/lib/net/uploader.js +0 -220
  101. package/esm2015/lib/speechrecorder/recording.js +0 -38
  102. package/esm2015/lib/speechrecorder/recordings/recordings.service.js +0 -173
  103. package/esm2015/lib/speechrecorder/session/controlpanel.js +0 -446
  104. package/esm2015/lib/speechrecorder/session/recordingfile/recording-file-meta.component.js +0 -83
  105. package/esm2015/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.js +0 -163
  106. package/esm2015/lib/speechrecorder/session/recordingfile/recording-file-view.component.js +0 -386
  107. package/esm2015/lib/speechrecorder/session/recordingfile/recordingfile-service.js +0 -191
  108. package/esm2015/lib/speechrecorder/session/sessionmanager.js +0 -1271
  109. package/esm2015/lib/speechrecorderng.component.js +0 -423
  110. package/esm2015/public-api.js +0 -30
  111. package/fesm2015/speechrecorderng.js.map +0 -1
@@ -0,0 +1,246 @@
1
+ /**
2
+ * Created by klausj on 17.06.2017.
3
+ */
4
+ import { Inject, Injectable } from '@angular/core';
5
+ import { HttpHeaders } from "@angular/common/http";
6
+ import { ApiType, SPEECHRECORDER_CONFIG } from "../../spr.config";
7
+ import { UUID } from "../../utils/utils";
8
+ import { SprRecordingFile } from "../recording";
9
+ import { ProjectService } from "../project/project.service";
10
+ import { SessionService } from "../session/session.service";
11
+ import { Observable } from "rxjs";
12
+ import * as i0 from "@angular/core";
13
+ import * as i1 from "@angular/common/http";
14
+ import * as i2 from "../../spr.config";
15
+ export const REC_API_CTX = 'recfile';
16
+ export class RecordingService {
17
+ constructor(http, config) {
18
+ this.http = http;
19
+ this.config = config;
20
+ this.withCredentials = false;
21
+ //private debugDelay:number=10000;
22
+ this.debugDelay = 0;
23
+ this.apiEndPoint = '';
24
+ if (config && config.apiEndPoint) {
25
+ this.apiEndPoint = config.apiEndPoint;
26
+ }
27
+ if (this.apiEndPoint !== '') {
28
+ this.apiEndPoint = this.apiEndPoint + '/';
29
+ }
30
+ if (config != null && config.withCredentials != null) {
31
+ this.withCredentials = config.withCredentials;
32
+ }
33
+ }
34
+ recordingFilesUrl() {
35
+ let recFilesUrl = this.apiEndPoint + RecordingService.RECORDING_API_CTX;
36
+ return recFilesUrl;
37
+ }
38
+ sessionRecordingFilesUrl(projectName, sessId) {
39
+ let encPrjName = encodeURIComponent(projectName);
40
+ let encSessId = encodeURIComponent(sessId);
41
+ let recFilesUrl = this.apiEndPoint + ProjectService.PROJECT_API_CTX + '/' + encPrjName + '/' +
42
+ SessionService.SESSION_API_CTX + '/' + encSessId + '/' + RecordingService.RECORDING_API_CTX;
43
+ return recFilesUrl;
44
+ }
45
+ sessionRecFilesUrl(projectName, sessId) {
46
+ let encPrjName = encodeURIComponent(projectName);
47
+ let encSessId = encodeURIComponent(sessId);
48
+ let recFilesUrl = this.apiEndPoint + ProjectService.PROJECT_API_CTX + '/' + encPrjName + '/' +
49
+ SessionService.SESSION_API_CTX + '/' + encSessId + '/' + RecordingService.REC_API_CTX;
50
+ return recFilesUrl;
51
+ }
52
+ sessionRecFilesReqUrl(projectName, sessId) {
53
+ let recFilesUrl = this.sessionRecFilesUrl(projectName, sessId);
54
+ if (this.config && this.config.apiType === ApiType.FILES) {
55
+ // for development and demo
56
+ // append UUID to make request URL unique to avoid localhost server caching
57
+ recFilesUrl = recFilesUrl + '.json?requestUUID=' + UUID.generate();
58
+ }
59
+ return recFilesUrl;
60
+ }
61
+ recordingFileDescrList(projectName, sessId) {
62
+ let recFilesReqUrl = this.sessionRecFilesReqUrl(projectName, sessId);
63
+ let wobs = this.http.get(recFilesReqUrl, { withCredentials: this.withCredentials });
64
+ return wobs;
65
+ }
66
+ recordingFileList(projectName, sessId) {
67
+ let recFilesReqUrl = this.sessionRecFilesReqUrl(projectName, sessId);
68
+ let wobs = this.http.get(recFilesReqUrl, { withCredentials: this.withCredentials });
69
+ return wobs;
70
+ }
71
+ sprRecordingFileList(projectName, sessId) {
72
+ let recFilesReqUrl = this.sessionRecFilesReqUrl(projectName, sessId);
73
+ let wobs = this.http.get(recFilesReqUrl, { withCredentials: this.withCredentials });
74
+ return wobs;
75
+ }
76
+ audioRequest(audioUrl) {
77
+ if (this.config && this.config.apiType === ApiType.FILES) {
78
+ // for development and demo
79
+ // append UUID to make request URL unique to avoid localhost server caching
80
+ audioUrl = audioUrl + '.wav?requestUUID=' + UUID.generate();
81
+ }
82
+ let headers = new HttpHeaders();
83
+ headers = headers.set('Accept', 'audio/wav');
84
+ return this.http.get(audioUrl, {
85
+ headers: headers,
86
+ observe: 'response',
87
+ responseType: 'arraybuffer',
88
+ withCredentials: this.withCredentials
89
+ });
90
+ }
91
+ fetchAudiofile(projectName, sessId, recFileId) {
92
+ let recFilesUrl = this.sessionRecordingFilesUrl(projectName, sessId);
93
+ let encRecFileId = encodeURIComponent(recFileId);
94
+ let recUrl = recFilesUrl + '/' + encRecFileId;
95
+ return this.audioRequest(recUrl);
96
+ }
97
+ fetchSprAudiofile(projectName, sessId, itemcode, version) {
98
+ let recFilesUrl = this.sessionRecFilesUrl(projectName, sessId);
99
+ let encItemcode = encodeURIComponent(itemcode);
100
+ let recUrl = recFilesUrl + '/' + encItemcode + '/' + version;
101
+ return this.audioRequest(recUrl);
102
+ }
103
+ fetchAndApplyRecordingFile(aCtx, projectName, recordingFile) {
104
+ let wobs = new Observable(observer => {
105
+ if (recordingFile.session && recordingFile.recordingFileId) {
106
+ let obs = this.fetchAudiofile(projectName, recordingFile.session, recordingFile.recordingFileId);
107
+ obs.subscribe(resp => {
108
+ //console.log("Fetched audio file. HTTP response status: "+resp.status+", type: "+resp.type+", byte length: "+ resp.body.byteLength);
109
+ // Do not use Promise version, which does not work with Safari 13 (13.0.5)
110
+ if (resp.body) {
111
+ aCtx.decodeAudioData(resp.body, ab => {
112
+ recordingFile.audioBuffer = ab;
113
+ if (this.debugDelay > 0) {
114
+ window.setTimeout(() => {
115
+ observer.next(recordingFile);
116
+ observer.complete();
117
+ }, this.debugDelay);
118
+ }
119
+ else {
120
+ observer.next(recordingFile);
121
+ observer.complete();
122
+ }
123
+ }, error => {
124
+ observer.error(error);
125
+ observer.complete();
126
+ });
127
+ }
128
+ else {
129
+ observer.error('Fetching audio file: response has no body');
130
+ }
131
+ }, (error) => {
132
+ if (error.status == 404) {
133
+ // Interpret not as an error, the file ist not recorded yet
134
+ observer.next(null);
135
+ observer.complete();
136
+ }
137
+ else {
138
+ // all other states are errors
139
+ observer.error(error);
140
+ observer.complete();
141
+ }
142
+ });
143
+ }
144
+ else {
145
+ observer.error();
146
+ }
147
+ });
148
+ return wobs;
149
+ }
150
+ fetchAndApplySprRecordingFile(aCtx, projectName, recordingFile) {
151
+ let wobs = new Observable(observer => {
152
+ if (recordingFile.session) {
153
+ let obs = this.fetchSprAudiofile(projectName, recordingFile.session, recordingFile.itemCode, recordingFile.version);
154
+ obs.subscribe(resp => {
155
+ //console.log("Fetched audio file. HTTP response status: "+resp.status+", type: "+resp.type+", byte length: "+ resp.body.byteLength);
156
+ // Do not use Promise version, which does not work with Safari 13 (13.0.5)
157
+ if (resp.body) {
158
+ aCtx.decodeAudioData(resp.body, ab => {
159
+ recordingFile.audioBuffer = ab;
160
+ if (this.debugDelay > 0) {
161
+ window.setTimeout(() => {
162
+ observer.next(recordingFile);
163
+ observer.complete();
164
+ }, this.debugDelay);
165
+ }
166
+ else {
167
+ observer.next(recordingFile);
168
+ observer.complete();
169
+ }
170
+ }, error => {
171
+ observer.error(error);
172
+ observer.complete();
173
+ });
174
+ }
175
+ else {
176
+ observer.error('Fetching audio file: response has no body');
177
+ }
178
+ }, (error) => {
179
+ if (error.status == 404) {
180
+ // Interpret not as an error, the file ist not recorded yet
181
+ observer.next(null);
182
+ observer.complete();
183
+ }
184
+ else {
185
+ // all other states are errors
186
+ observer.error(error);
187
+ observer.complete();
188
+ }
189
+ });
190
+ }
191
+ else {
192
+ observer.error();
193
+ }
194
+ });
195
+ return wobs;
196
+ }
197
+ fetchRecordingFile(aCtx, projectName, sessId, itemcode, version) {
198
+ let wobs = new Observable(observer => {
199
+ let obs = this.fetchSprAudiofile(projectName, sessId, itemcode, version);
200
+ obs.subscribe(resp => {
201
+ // Do not use Promise version, which does not work with Safari 13
202
+ if (resp.body) {
203
+ aCtx.decodeAudioData(resp.body, ab => {
204
+ let rf = new SprRecordingFile(sessId, itemcode, version, ab);
205
+ if (this.debugDelay > 0) {
206
+ window.setTimeout(() => {
207
+ observer.next(rf);
208
+ observer.complete();
209
+ }, this.debugDelay);
210
+ }
211
+ else {
212
+ observer.next(rf);
213
+ observer.complete();
214
+ }
215
+ });
216
+ }
217
+ else {
218
+ observer.error();
219
+ }
220
+ }, (error) => {
221
+ if (error.status == 404) {
222
+ // Interpret not as an error, the file ist not recorded yet
223
+ observer.next(null);
224
+ observer.complete();
225
+ }
226
+ else {
227
+ // all other states are errors
228
+ observer.error(error);
229
+ observer.complete();
230
+ }
231
+ });
232
+ });
233
+ return wobs;
234
+ }
235
+ }
236
+ RecordingService.REC_API_CTX = 'recfile';
237
+ RecordingService.RECORDING_API_CTX = 'recordingfile';
238
+ RecordingService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: RecordingService, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
239
+ RecordingService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: RecordingService });
240
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: RecordingService, decorators: [{
241
+ type: Injectable
242
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.SpeechRecorderConfig, decorators: [{
243
+ type: Inject,
244
+ args: [SPEECHRECORDER_CONFIG]
245
+ }] }]; } });
246
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkaW5ncy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3NwZWVjaHJlY29yZGVyL3JlY29yZGluZ3MvcmVjb3JkaW5ncy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFnQyxXQUFXLEVBQWUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RixPQUFPLEVBQUMsT0FBTyxFQUFFLHFCQUFxQixFQUF1QixNQUFNLGtCQUFrQixDQUFDO0FBRXRGLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUN2QyxPQUFPLEVBQUMsZ0JBQWdCLEVBQTZDLE1BQU0sY0FBYyxDQUFDO0FBQzFGLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQzs7OztBQUdoQyxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUMsU0FBUyxDQUFBO0FBS2xDLE1BQU0sT0FBTyxnQkFBZ0I7SUFVM0IsWUFBb0IsSUFBZ0IsRUFBeUMsTUFBNkI7UUFBdEYsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUF5QyxXQUFNLEdBQU4sTUFBTSxDQUF1QjtRQUxsRyxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUV6QyxrQ0FBa0M7UUFDMUIsZUFBVSxHQUFRLENBQUMsQ0FBQztRQUkxQixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQTtRQUVyQixJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFD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QUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO3lCQUNyQjs2QkFBTTs0QkFDTCxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDOzRCQUNsQixRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7eUJBQ3JCO29CQUNILENBQUMsQ0FBQyxDQUFDO2lCQUNKO3FCQUFJO29CQUNILFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztpQkFDbEI7WUFDSCxDQUFDLEVBQ0QsQ0FBQyxLQUF3QixFQUFFLEVBQUU7Z0JBQzNCLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxHQUFHLEVBQUU7b0JBQ3ZCLDJEQUEyRDtvQkFDM0QsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDcEIsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFBO2lCQUNwQjtxQkFBSTtvQkFDSCw4QkFBOEI7b0JBQzlCLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3RCLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztpQkFDckI7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOztBQWpQc0IsNEJBQVcsR0FBRyxTQUFTLENBQUE7QUFDdkIsa0NBQWlCLEdBQUMsZUFBZSxDQUFBOzZHQUg3QyxnQkFBZ0IsNENBVW1CLHFCQUFxQjtpSEFWeEQsZ0JBQWdCOzJGQUFoQixnQkFBZ0I7a0JBRDVCLFVBQVU7OzBCQVc4QixNQUFNOzJCQUFDLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBDcmVhdGVkIGJ5IGtsYXVzaiBvbiAxNy4wNi4yMDE3LlxyXG4gKi9cclxuaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBDbGllbnQsIEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwSGVhZGVycywgSHR0cFJlc3BvbnNlfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuaW1wb3J0IHtBcGlUeXBlLCBTUEVFQ0hSRUNPUkRFUl9DT05GSUcsIFNwZWVjaFJlY29yZGVyQ29uZmlnfSBmcm9tIFwiLi4vLi4vc3ByLmNvbmZpZ1wiO1xyXG5cclxuaW1wb3J0IHtVVUlEfSBmcm9tIFwiLi4vLi4vdXRpbHMvdXRpbHNcIjtcclxuaW1wb3J0IHtTcHJSZWNvcmRpbmdGaWxlLCBSZWNvcmRpbmdGaWxlRGVzY3JpcHRvckltcGwsIFJlY29yZGluZ0ZpbGV9IGZyb20gXCIuLi9yZWNvcmRpbmdcIjtcclxuaW1wb3J0IHtQcm9qZWN0U2VydmljZX0gZnJvbSBcIi4uL3Byb2plY3QvcHJvamVjdC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7U2Vzc2lvblNlcnZpY2V9IGZyb20gXCIuLi9zZXNzaW9uL3Nlc3Npb24uc2VydmljZVwiO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gXCJyeGpzXCI7XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IFJFQ19BUElfQ1RYPSdyZWNmaWxlJ1xyXG5cclxuXHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBSZWNvcmRpbmdTZXJ2aWNlIHtcclxuXHJcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSRUNfQVBJX0NUWCA9ICdyZWNmaWxlJ1xyXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUkVDT1JESU5HX0FQSV9DVFg9J3JlY29yZGluZ2ZpbGUnXHJcbiAgcHJpdmF0ZSBhcGlFbmRQb2ludDogc3RyaW5nO1xyXG4gIHByaXZhdGUgd2l0aENyZWRlbnRpYWxzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vcHJpdmF0ZSBkZWJ1Z0RlbGF5Om51bWJlcj0xMDAwMDtcclxuICBwcml2YXRlIGRlYnVnRGVsYXk6bnVtYmVyPTA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgQEluamVjdChTUEVFQ0hSRUNPUkRFUl9DT05GSUcpIHByaXZhdGUgY29uZmlnPzogU3BlZWNoUmVjb3JkZXJDb25maWcpIHtcclxuXHJcbiAgICB0aGlzLmFwaUVuZFBvaW50ID0gJydcclxuXHJcbiAgICBpZiAoY29uZmlnICYmIGNvbmZpZy5hcGlFbmRQb2ludCkge1xyXG4gICAgICB0aGlzLmFwaUVuZFBvaW50ID0gY29uZmlnLmFwaUVuZFBvaW50O1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYXBpRW5kUG9pbnQgIT09ICcnKSB7XHJcbiAgICAgIHRoaXMuYXBpRW5kUG9pbnQgPSB0aGlzLmFwaUVuZFBvaW50ICsgJy8nXHJcbiAgICB9XHJcbiAgICBpZiAoY29uZmlnICE9IG51bGwgJiYgY29uZmlnLndpdGhDcmVkZW50aWFscyAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMud2l0aENyZWRlbnRpYWxzID0gY29uZmlnLndpdGhDcmVkZW50aWFscztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVjb3JkaW5nRmlsZXNVcmwoKTpzdHJpbmd7XHJcbiAgICBsZXQgcmVjRmlsZXNVcmwgPSB0aGlzLmFwaUVuZFBvaW50ICArIFJlY29yZGluZ1NlcnZpY2UuUkVDT1JESU5HX0FQSV9DVFg7XHJcbiAgICByZXR1cm4gcmVjRmlsZXNVcmw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlc3Npb25SZWNvcmRpbmdGaWxlc1VybChwcm9qZWN0TmFtZTogc3RyaW5nLCBzZXNzSWQ6IHN0cmluZyB8IG51bWJlcik6c3RyaW5ne1xyXG4gICAgbGV0IGVuY1Byak5hbWU9ZW5jb2RlVVJJQ29tcG9uZW50KHByb2plY3ROYW1lKTtcclxuICAgIGxldCBlbmNTZXNzSWQ9ZW5jb2RlVVJJQ29tcG9uZW50KHNlc3NJZCk7XHJcbiAgICBsZXQgcmVjRmlsZXNVcmwgPSB0aGlzLmFwaUVuZFBvaW50ICsgUHJvamVjdFNlcnZpY2UuUFJPSkVDVF9BUElfQ1RYICsgJy8nICsgZW5jUHJqTmFtZSArICcvJyArXHJcbiAgICAgIFNlc3Npb25TZXJ2aWNlLlNFU1NJT05fQVBJX0NUWCArICcvJyArIGVuY1Nlc3NJZCArICcvJyArIFJlY29yZGluZ1NlcnZpY2UuUkVDT1JESU5HX0FQSV9DVFg7XHJcbiAgICByZXR1cm4gcmVjRmlsZXNVcmw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlc3Npb25SZWNGaWxlc1VybChwcm9qZWN0TmFtZTogc3RyaW5nLCBzZXNzSWQ6IHN0cmluZyB8IG51bWJlcik6c3RyaW5ne1xyXG4gICAgbGV0IGVuY1Byak5hbWU9ZW5jb2RlVVJJQ29tcG9uZW50KHByb2plY3ROYW1lKTtcclxuICAgIGxldCBlbmNTZXNzSWQ9ZW5jb2RlVVJJQ29tcG9uZW50KHNlc3NJZCk7XHJcbiAgICBsZXQgcmVjRmlsZXNVcmwgPSB0aGlzLmFwaUVuZFBvaW50ICsgUHJvamVjdFNlcnZpY2UuUFJPSkVDVF9BUElfQ1RYICsgJy8nICsgZW5jUHJqTmFtZSArICcvJyArXHJcbiAgICAgICAgU2Vzc2lvblNlcnZpY2UuU0VTU0lPTl9BUElfQ1RYICsgJy8nICsgZW5jU2Vzc0lkICsgJy8nICsgUmVjb3JkaW5nU2VydmljZS5SRUNfQVBJX0NUWDtcclxuICAgIHJldHVybiByZWNGaWxlc1VybDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2Vzc2lvblJlY0ZpbGVzUmVxVXJsKHByb2plY3ROYW1lOiBzdHJpbmcsIHNlc3NJZDogc3RyaW5nIHwgbnVtYmVyKTpzdHJpbmd7XHJcbiAgICBsZXQgcmVjRmlsZXNVcmw9dGhpcy5zZXNzaW9uUmVjRmlsZXNVcmwocHJvamVjdE5hbWUsc2Vzc0lkKTtcclxuICAgIGlmICh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5hcGlUeXBlID09PSBBcGlUeXBlLkZJTEVTKSB7XHJcbiAgICAgIC8vIGZvciBkZXZlbG9wbWVudCBhbmQgZGVtb1xyXG4gICAgICAvLyBhcHBlbmQgVVVJRCB0byBtYWtlIHJlcXVlc3QgVVJMIHVuaXF1ZSB0byBhdm9pZCBsb2NhbGhvc3Qgc2VydmVyIGNhY2hpbmdcclxuICAgICAgcmVjRmlsZXNVcmwgPSByZWNGaWxlc1VybCArICcuanNvbj9yZXF1ZXN0VVVJRD0nICsgVVVJRC5nZW5lcmF0ZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlY0ZpbGVzVXJsO1xyXG4gIH1cclxuXHJcbiAgcmVjb3JkaW5nRmlsZURlc2NyTGlzdChwcm9qZWN0TmFtZTogc3RyaW5nLCBzZXNzSWQ6IHN0cmluZyB8IG51bWJlcik6T2JzZXJ2YWJsZTxBcnJheTxSZWNvcmRpbmdGaWxlRGVzY3JpcHRvckltcGw+PiB7XHJcbiAgICBsZXQgcmVjRmlsZXNSZXFVcmwgPSB0aGlzLnNlc3Npb25SZWNGaWxlc1JlcVVybChwcm9qZWN0TmFtZSxzZXNzSWQpO1xyXG4gICAgbGV0IHdvYnMgPSB0aGlzLmh0dHAuZ2V0PEFycmF5PFJlY29yZGluZ0ZpbGVEZXNjcmlwdG9ySW1wbD4+KHJlY0ZpbGVzUmVxVXJsLHt3aXRoQ3JlZGVudGlhbHM6dGhpcy53aXRoQ3JlZGVudGlhbHN9KTtcclxuICAgIHJldHVybiB3b2JzO1xyXG4gIH1cclxuXHJcbiAgcmVjb3JkaW5nRmlsZUxpc3QocHJvamVjdE5hbWU6IHN0cmluZywgc2Vzc0lkOiBzdHJpbmcgfCBudW1iZXIpOk9ic2VydmFibGU8QXJyYXk8UmVjb3JkaW5nRmlsZT4+IHtcclxuICAgIGxldCByZWNGaWxlc1JlcVVybCA9IHRoaXMuc2Vzc2lvblJlY0ZpbGVzUmVxVXJsKHByb2plY3ROYW1lLHNlc3NJZCk7XHJcbiAgICBsZXQgd29icyA9IHRoaXMuaHR0cC5nZXQ8QXJyYXk8UmVjb3JkaW5nRmlsZT4+KHJlY0ZpbGVzUmVxVXJsLHt3aXRoQ3JlZGVudGlhbHM6dGhpcy53aXRoQ3JlZGVudGlhbHN9KTtcclxuICAgIHJldHVybiB3b2JzO1xyXG4gIH1cclxuXHJcbiAgc3ByUmVjb3JkaW5nRmlsZUxpc3QocHJvamVjdE5hbWU6IHN0cmluZywgc2Vzc0lkOiBzdHJpbmcgfCBudW1iZXIpOk9ic2VydmFibGU8QXJyYXk8U3ByUmVjb3JkaW5nRmlsZT4+IHtcclxuICAgIGxldCByZWNGaWxlc1JlcVVybCA9IHRoaXMuc2Vzc2lvblJlY0ZpbGVzUmVxVXJsKHByb2plY3ROYW1lLHNlc3NJZCk7XHJcbiAgICBsZXQgd29icyA9IHRoaXMuaHR0cC5nZXQ8QXJyYXk8U3ByUmVjb3JkaW5nRmlsZT4+KHJlY0ZpbGVzUmVxVXJsLHt3aXRoQ3JlZGVudGlhbHM6dGhpcy53aXRoQ3JlZGVudGlhbHN9KTtcclxuICAgIHJldHVybiB3b2JzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhdWRpb1JlcXVlc3QoYXVkaW9Vcmw6c3RyaW5nKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8QXJyYXlCdWZmZXI+PiB7XHJcbiAgICBpZiAodGhpcy5jb25maWcgJiYgdGhpcy5jb25maWcuYXBpVHlwZSA9PT0gQXBpVHlwZS5GSUxFUykge1xyXG4gICAgICAvLyBmb3IgZGV2ZWxvcG1lbnQgYW5kIGRlbW9cclxuICAgICAgLy8gYXBwZW5kIFVVSUQgdG8gbWFrZSByZXF1ZXN0IFVSTCB1bmlxdWUgdG8gYXZvaWQgbG9jYWxob3N0IHNlcnZlciBjYWNoaW5nXHJcbiAgICAgIGF1ZGlvVXJsID0gYXVkaW9VcmwgKyAnLndhdj9yZXF1ZXN0VVVJRD0nICsgVVVJRC5nZW5lcmF0ZSgpO1xyXG4gICAgfVxyXG4gICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcclxuICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQWNjZXB0JywgJ2F1ZGlvL3dhdicpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYXVkaW9VcmwsIHtcclxuICAgICAgaGVhZGVyczogaGVhZGVycyxcclxuICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyxcclxuICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInLFxyXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMud2l0aENyZWRlbnRpYWxzXHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZldGNoQXVkaW9maWxlKHByb2plY3ROYW1lOiBzdHJpbmcsIHNlc3NJZDogc3RyaW5nIHwgbnVtYmVyLCByZWNGaWxlSWQ6IHN0cmluZ3xudW1iZXIpOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxBcnJheUJ1ZmZlcj4+IHtcclxuICAgIGxldCByZWNGaWxlc1VybD10aGlzLnNlc3Npb25SZWNvcmRpbmdGaWxlc1VybChwcm9qZWN0TmFtZSxzZXNzSWQpO1xyXG4gICAgbGV0IGVuY1JlY0ZpbGVJZD1lbmNvZGVVUklDb21wb25lbnQocmVjRmlsZUlkKTtcclxuICAgIGxldCByZWNVcmwgPSByZWNGaWxlc1VybCArICcvJyArIGVuY1JlY0ZpbGVJZDtcclxuICAgIHJldHVybiB0aGlzLmF1ZGlvUmVxdWVzdChyZWNVcmwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmZXRjaFNwckF1ZGlvZmlsZShwcm9qZWN0TmFtZTogc3RyaW5nLCBzZXNzSWQ6IHN0cmluZyB8IG51bWJlciwgaXRlbWNvZGU6IHN0cmluZyx2ZXJzaW9uOm51bWJlcik6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFycmF5QnVmZmVyPj4ge1xyXG4gICAgbGV0IHJlY0ZpbGVzVXJsPXRoaXMuc2Vzc2lvblJlY0ZpbGVzVXJsKHByb2plY3ROYW1lLHNlc3NJZCk7XHJcbiAgICBsZXQgZW5jSXRlbWNvZGU9ZW5jb2RlVVJJQ29tcG9uZW50KGl0ZW1jb2RlKTtcclxuICAgIGxldCByZWNVcmwgPSByZWNGaWxlc1VybCArICcvJyArIGVuY0l0ZW1jb2RlICsnLycrdmVyc2lvbjtcclxuICAgIHJldHVybiB0aGlzLmF1ZGlvUmVxdWVzdChyZWNVcmwpO1xyXG4gIH1cclxuXHJcbiAgZmV0Y2hBbmRBcHBseVJlY29yZGluZ0ZpbGUoYUN0eDogQXVkaW9Db250ZXh0LCBwcm9qZWN0TmFtZTogc3RyaW5nLCByZWNvcmRpbmdGaWxlOlJlY29yZGluZ0ZpbGUpOk9ic2VydmFibGU8UmVjb3JkaW5nRmlsZXxudWxsPiB7XHJcblxyXG4gICAgbGV0IHdvYnMgPSBuZXcgT2JzZXJ2YWJsZTxSZWNvcmRpbmdGaWxlfG51bGw+KG9ic2VydmVyPT57XHJcbiAgICAgIGlmKHJlY29yZGluZ0ZpbGUuc2Vzc2lvbiAmJiByZWNvcmRpbmdGaWxlLnJlY29yZGluZ0ZpbGVJZCkge1xyXG4gICAgICAgIGxldCBvYnMgPSB0aGlzLmZldGNoQXVkaW9maWxlKHByb2plY3ROYW1lLCByZWNvcmRpbmdGaWxlLnNlc3Npb24sIHJlY29yZGluZ0ZpbGUucmVjb3JkaW5nRmlsZUlkKTtcclxuICAgICAgICBvYnMuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiRmV0Y2hlZCBhdWRpbyBmaWxlLiBIVFRQIHJlc3BvbnNlIHN0YXR1czogXCIrcmVzcC5zdGF0dXMrXCIsIHR5cGU6IFwiK3Jlc3AudHlwZStcIiwgYnl0ZSBsZW5ndGg6IFwiKyByZXNwLmJvZHkuYnl0ZUxlbmd0aCk7XHJcblxyXG4gICAgICAgICAgICAvLyBEbyBub3QgdXNlIFByb21pc2UgdmVyc2lvbiwgd2hpY2ggZG9lcyBub3Qgd29yayB3aXRoIFNhZmFyaSAxMyAoMTMuMC41KVxyXG4gICAgICAgICAgICBpZiAocmVzcC5ib2R5KSB7XHJcbiAgICAgICAgICAgICAgYUN0eC5kZWNvZGVBdWRpb0RhdGEocmVzcC5ib2R5LCBhYiA9PiB7XHJcbiAgICAgICAgICAgICAgICByZWNvcmRpbmdGaWxlLmF1ZGlvQnVmZmVyID0gYWI7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kZWJ1Z0RlbGF5ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQocmVjb3JkaW5nRmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgICAgfSwgdGhpcy5kZWJ1Z0RlbGF5KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQocmVjb3JkaW5nRmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKCdGZXRjaGluZyBhdWRpbyBmaWxlOiByZXNwb25zZSBoYXMgbm8gYm9keScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09IDQwNCkge1xyXG4gICAgICAgICAgICAgIC8vIEludGVycHJldCBub3QgYXMgYW4gZXJyb3IsIHRoZSBmaWxlIGlzdCBub3QgcmVjb3JkZWQgeWV0XHJcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChudWxsKTtcclxuICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgLy8gYWxsIG90aGVyIHN0YXRlcyBhcmUgZXJyb3JzXHJcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICBvYnNlcnZlci5lcnJvcigpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gd29icztcclxuICB9XHJcblxyXG4gIGZldGNoQW5kQXBwbHlTcHJSZWNvcmRpbmdGaWxlKGFDdHg6IEF1ZGlvQ29udGV4dCwgcHJvamVjdE5hbWU6IHN0cmluZywgcmVjb3JkaW5nRmlsZTpTcHJSZWNvcmRpbmdGaWxlKTpPYnNlcnZhYmxlPFNwclJlY29yZGluZ0ZpbGV8bnVsbD4ge1xyXG5cclxuICAgIGxldCB3b2JzID0gbmV3IE9ic2VydmFibGU8U3ByUmVjb3JkaW5nRmlsZXxudWxsPihvYnNlcnZlcj0+e1xyXG4gICAgICBpZihyZWNvcmRpbmdGaWxlLnNlc3Npb24pIHtcclxuICAgICAgICBsZXQgb2JzID0gdGhpcy5mZXRjaFNwckF1ZGlvZmlsZShwcm9qZWN0TmFtZSwgcmVjb3JkaW5nRmlsZS5zZXNzaW9uLCByZWNvcmRpbmdGaWxlLml0ZW1Db2RlLCByZWNvcmRpbmdGaWxlLnZlcnNpb24pO1xyXG4gICAgICAgIG9icy5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIkZldGNoZWQgYXVkaW8gZmlsZS4gSFRUUCByZXNwb25zZSBzdGF0dXM6IFwiK3Jlc3Auc3RhdHVzK1wiLCB0eXBlOiBcIityZXNwLnR5cGUrXCIsIGJ5dGUgbGVuZ3RoOiBcIisgcmVzcC5ib2R5LmJ5dGVMZW5ndGgpO1xyXG5cclxuICAgICAgICAgICAgICAvLyBEbyBub3QgdXNlIFByb21pc2UgdmVyc2lvbiwgd2hpY2ggZG9lcyBub3Qgd29yayB3aXRoIFNhZmFyaSAxMyAoMTMuMC41KVxyXG4gICAgICAgICAgICAgIGlmIChyZXNwLmJvZHkpIHtcclxuICAgICAgICAgICAgICAgIGFDdHguZGVjb2RlQXVkaW9EYXRhKHJlc3AuYm9keSwgYWIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICByZWNvcmRpbmdGaWxlLmF1ZGlvQnVmZmVyID0gYWI7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnRGVsYXkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQocmVjb3JkaW5nRmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIHRoaXMuZGVidWdEZWxheSk7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChyZWNvcmRpbmdGaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKCdGZXRjaGluZyBhdWRpbyBmaWxlOiByZXNwb25zZSBoYXMgbm8gYm9keScpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT0gNDA0KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBJbnRlcnByZXQgbm90IGFzIGFuIGVycm9yLCB0aGUgZmlsZSBpc3Qgbm90IHJlY29yZGVkIHlldFxyXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChudWxsKTtcclxuICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKClcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gYWxsIG90aGVyIHN0YXRlcyBhcmUgZXJyb3JzXHJcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIG9ic2VydmVyLmVycm9yKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB3b2JzO1xyXG4gIH1cclxuXHJcbiAgZmV0Y2hSZWNvcmRpbmdGaWxlKGFDdHg6IEF1ZGlvQ29udGV4dCwgcHJvamVjdE5hbWU6IHN0cmluZywgc2Vzc0lkOiBzdHJpbmcgfCBudW1iZXIsIGl0ZW1jb2RlOiBzdHJpbmcsdmVyc2lvbjpudW1iZXIpOk9ic2VydmFibGU8U3ByUmVjb3JkaW5nRmlsZXxudWxsPiB7XHJcblxyXG4gICAgbGV0IHdvYnMgPSBuZXcgT2JzZXJ2YWJsZTxTcHJSZWNvcmRpbmdGaWxlIHwgbnVsbD4ob2JzZXJ2ZXI9PntcclxuICAgICAgbGV0IG9icyA9IHRoaXMuZmV0Y2hTcHJBdWRpb2ZpbGUocHJvamVjdE5hbWUsIHNlc3NJZCwgaXRlbWNvZGUsdmVyc2lvbik7XHJcblxyXG5cclxuICAgICAgb2JzLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgLy8gRG8gbm90IHVzZSBQcm9taXNlIHZlcnNpb24sIHdoaWNoIGRvZXMgbm90IHdvcmsgd2l0aCBTYWZhcmkgMTNcclxuICAgICAgICAgIGlmKHJlc3AuYm9keSkge1xyXG4gICAgICAgICAgICBhQ3R4LmRlY29kZUF1ZGlvRGF0YShyZXNwLmJvZHksIGFiID0+IHtcclxuICAgICAgICAgICAgICBsZXQgcmYgPSBuZXcgU3ByUmVjb3JkaW5nRmlsZShzZXNzSWQsIGl0ZW1jb2RlLCB2ZXJzaW9uLCBhYik7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZGVidWdEZWxheSA+IDApIHtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQocmYpO1xyXG4gICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSwgdGhpcy5kZWJ1Z0RlbGF5KTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChyZik7XHJcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT0gNDA0KSB7XHJcbiAgICAgICAgICAgIC8vIEludGVycHJldCBub3QgYXMgYW4gZXJyb3IsIHRoZSBmaWxlIGlzdCBub3QgcmVjb3JkZWQgeWV0XHJcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQobnVsbCk7XHJcbiAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKClcclxuICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAvLyBhbGwgb3RoZXIgc3RhdGVzIGFyZSBlcnJvcnNcclxuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHdvYnM7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuXHJcbiJdfQ==
@@ -78,7 +78,7 @@ export class MediaitemUtil {
78
78
  let srcUrl = new URL(src);
79
79
  srcPn = srcUrl.pathname;
80
80
  }
81
- catch (_a) {
81
+ catch {
82
82
  srcPn = src;
83
83
  }
84
84
  // Get filename without extension
@@ -111,4 +111,4 @@ export class PromptitemUtil {
111
111
  return description;
112
112
  }
113
113
  }
114
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NyaXB0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3NwZWVjaHJlY29yZGVyL3NjcmlwdC9zY3JpcHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaUZBLE1BQU0sT0FBTyxhQUFhO0lBRXhCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxTQUFtQjtRQUMxQyxJQUFJLEVBQUUsR0FBQyxFQUFFLENBQUM7UUFDVixJQUFJLENBQUMsR0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ3JCLElBQUcsQ0FBQyxJQUFFLElBQUksRUFBRTtZQUNWLElBQUksSUFBSSxHQUFDLENBQUMsQ0FBQyxNQUFNLENBQUE7WUFDakIsSUFBRyxJQUFJLEVBQUU7Z0JBQ1AsS0FBSSxJQUFJLEdBQUcsR0FBQyxDQUFDLEVBQUMsR0FBRyxHQUFDLElBQUksQ0FBQyxNQUFNLEVBQUMsR0FBRyxFQUFFLEVBQUM7b0JBQ2xDLElBQUksR0FBRyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDbEIsSUFBSSxJQUFJLEdBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztvQkFDbkIsS0FBSSxJQUFJLEVBQUUsR0FBQyxDQUFDLEVBQUMsRUFBRSxHQUFDLElBQUksQ0FBQyxNQUFNLEVBQUMsRUFBRSxFQUFFLEVBQUM7d0JBQzdCLElBQUksS0FBSyxHQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDbkIsSUFBSSxHQUFHLEdBQUUsS0FBSyxDQUFDLElBQUksQ0FBQzt3QkFDdEIsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBQzs0QkFDeEIsSUFBRyxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUM7Z0NBQ3pCLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFTLEdBQUcsQ0FBQyxDQUFDOzZCQUM3QjtpQ0FBSTtnQ0FDSCxJQUFJLFFBQVEsR0FBTyxHQUFHLENB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Q3BCLElBQUksT0FBTyxHQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUMzQyxXQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDM0M7YUFDRjtTQUNGO1FBQ0QsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLGNBQWM7SUFDekIsTUFBTSxDQUFDLGlCQUFpQixDQUFDLFVBQXNCO1FBRTdDLElBQUksR0FBRyxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUM7UUFDaEMsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksR0FBRyxFQUFFO1lBRVAsSUFBSSxPQUFPLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztZQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNoQyxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hCLFdBQVcsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDaEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sRUFBRTtvQkFDbkIsZ0JBQWdCO29CQUNoQixXQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDeEM7YUFDRjtTQUNGO1FBQ0QsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbmV4cG9ydCB0eXBlIE1vZGUgPSBcIk1BTlVBTFwiIHwgXCJBVVRPUFJPR1JFU1NcIiB8IFwiQVVUT1JFQ09SRElOR1wiO1xyXG5leHBvcnQgdHlwZSBQcm9tcHRQaGFzZSA9IFwiSURMRVwiIHwgXCJQUkVSRUNPUkRJTkdcIiB8IFwiUkVDT1JESU5HXCI7XHJcblxyXG5leHBvcnQgdHlwZSBPcmRlciA9ICdTRVFVRU5USUFMJyB8ICdSQU5ET00nIHwgJ1JBTkRPTUlaRUQnO1xyXG5cclxuZXhwb3J0IHR5cGUgRGVjb3JhdGlvbiA9J3VuZGVybGluZSdcclxuZXhwb3J0IHR5cGUgU3R5bGUgPSdpdGFsaWMnIHwgJ25vcm1hbCdcclxuZXhwb3J0IHR5cGUgRm9udFdlaWdodD0nbm9ybWFsJyB8ICdib2xkJ1xyXG5leHBvcnQgdHlwZSBCbG9ja1R5cGU9J3AnO1xyXG5leHBvcnQgdHlwZSBUZXh0VHlwZT0ndGV4dCcgfCAnZm9udCc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJlY2luc3RydWN0aW9uc3tcclxuICByZWNpbnN0cnVjdGlvbnM6c3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRleHQge1xyXG4gIHR5cGU6IFRleHRUeXBlLFxyXG4gIGNvbG9yPyA6IHN0cmluZyxcclxuICBkZWNvcmF0aW9uPyA6IERlY29yYXRpb24sXHJcbiAgc2l6ZT86IHN0cmluZyxcclxuICB3ZWlnaHQ/OiBGb250V2VpZ2h0LFxyXG4gIHN0eWxlPzogU3R5bGUsXHJcbiAgdGV4dCA6IHN0cmluZyB8IFRleHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQmxvY2sge1xyXG4gIHR5cGU6IEJsb2NrVHlwZSxcclxuICB0ZXh0czogQXJyYXk8VGV4dD5cclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIEJvZHl7XHJcbiAgYmxvY2tzPzogQXJyYXk8QmxvY2s+LFxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFByb21wdERvY3tcclxuICBib2R5PzogQm9keVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE1lZGlhaXRlbSB7XHJcbiAgdGV4dD86IHN0cmluZyxcclxuICBzcmM/OiBzdHJpbmcsXHJcbiAgcHJvbXB0RG9jPzogUHJvbXB0RG9jLFxyXG4gIG1pbWV0eXBlPzpzdHJpbmcsXHJcbiAgZGVmYXVsdFZpcnR1YWxWaWV3Qm94PzpWaXJ0dWFsVmlld0JveCxcclxuICBhbHQ/OnN0cmluZ1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFByb21wdEl0ZW0ge1xyXG4gIHR5cGU/OnN0cmluZztcclxuICBpdGVtY29kZT86IHN0cmluZyxcclxuICBwcmVyZWNvcmRpbmc6IG51bWJlcixcclxuICByZWNkdXJhdGlvbj86IG51bWJlcixcclxuICBwb3N0cmVjb3JkaW5nOiBudW1iZXIsXHJcbiAgcmVjaW5zdHJ1Y3Rpb25zPzogUmVjaW5zdHJ1Y3Rpb25zLFxyXG4gIG1lZGlhaXRlbXM6IEFycmF5PE1lZGlhaXRlbT5cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBHcm91cCB7XHJcbiAgb3JkZXI/Ok9yZGVyO1xyXG4gIHByb21wdEl0ZW1zOiBBcnJheTxQcm9tcHRJdGVtPjtcclxuICBfc2h1ZmZsZWRQcm9tcHRJdGVtczogQXJyYXk8UHJvbXB0SXRlbT47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2VjdGlvbiB7XHJcbiAgbW9kZTogTW9kZTtcclxuICBwcm9tcHRwaGFzZTogUHJvbXB0UGhhc2U7XHJcbiAgb3JkZXI/OiBPcmRlcjtcclxuICB0cmFpbmluZzogYm9vbGVhbjtcclxuICBncm91cHM6IEFycmF5PEdyb3VwPjtcclxuICBfc2h1ZmZsZWRHcm91cHM6IEFycmF5PEdyb3VwPjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBWaXJ0dWFsVmlld0JveHtcclxuICBoZWlnaHQ6bnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNjcmlwdCB7XHJcbiAgdmlydHVhbFZpZXdCb3g/OlZpcnR1YWxWaWV3Qm94O1xyXG4gIHNlY3Rpb25zOiBBcnJheTxTZWN0aW9uPjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFByb21wdERvY1V0aWx7XHJcblxyXG4gIHN0YXRpYyB0b1BsYWluVGV4dFN0cmluZyhwcm9tcHREb2M6UHJvbXB0RG9jKTpzdHJpbmd7XHJcbiAgICBsZXQgcHQ9XCJcIjtcclxuICAgIGxldCBiPXByb21wdERvYy5ib2R5O1xyXG4gICAgaWYoYiE9bnVsbCkge1xyXG4gICAgICBsZXQgYmxrcz1iLmJsb2Nrc1xyXG4gICAgICBpZihibGtzKSB7XHJcbiAgICAgICAgZm9yKGxldCBibGk9MDtibGk8Ymxrcy5sZW5ndGg7YmxpKyspe1xyXG4gICAgICAgICAgbGV0IGJsaz1ibGtzW2JsaV07XHJcbiAgICAgICAgICBsZXQgdHh0cz1ibGsudGV4dHM7XHJcbiAgICAgICAgICBmb3IobGV0IHRpPTA7dGk8dHh0cy5sZW5ndGg7dGkrKyl7XHJcbiAgICAgICAgICAgICAgbGV0IHR4dEVsPXR4dHNbdGldO1xyXG4gICAgICAgICAgICAgIGxldCB0eHQgPXR4dEVsLnRleHQ7XHJcbiAgICAgICAgICAgIGlmKCB0eHRFbC50eXBlID09PSAnZm9udCcpe1xyXG4gICAgICAgICAgICAgIGlmKHR5cGVvZiB0eHQgPT09ICdzdHJpbmcnKXtcclxuICAgICAgICAgICAgICAgIHB0ID0gcHQuY29uY2F0KDxzdHJpbmc+dHh0KTtcclxuICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGxldCBzdWJUeHRFbD08VGV4dD50eHQ7XHJcbiAgICAgICAgICAgICAgICBsZXQgc3ViVHh0PXN1YlR4dEVsLnRleHQ7XHJcbiAgICAgICAgICAgICAgICBpZih0eXBlb2Ygc3ViVHh0ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICBwdD1wdC5jb25jYXQoc3ViVHh0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1lbHNlIGlmKHR5cGVvZiB0eHQgPT09ICdzdHJpbmcnKXtcclxuICAgICAgICAgICAgICBwdCA9IHB0LmNvbmNhdCg8c3RyaW5nPnR4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBwdDtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBNZWRpYWl0ZW1VdGlsIHtcclxuICBzdGF0aWMgdG9QbGFpblRleHRTdHJpbmcobWVkaWFpdGVtOiBNZWRpYWl0ZW0pOiBzdHJpbmd8bnVsbCB7XHJcblxyXG4gICAgbGV0IHR4dCA9IG1lZGlhaXRlbS50ZXh0O1xyXG4gICAgbGV0IHBkID0gbWVkaWFpdGVtLnByb21wdERvYztcclxuICAgIGlmICh0eHQgPT0gbnVsbCkge1xyXG4gICAgICBsZXQgcHQgPSBudWxsO1xyXG4gICAgICBpZiAocGQgIT0gbnVsbCkge1xyXG4gICAgICAgIHB0ID0gUHJvbXB0RG9jVXRpbC50b1BsYWluVGV4dFN0cmluZyhwZCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHB0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHR4dDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBkZXNjcmlwdGlvbihtaTogTWVkaWFpdGVtKTogc3RyaW5nIHtcclxuICAgIGxldCBkZXNjcmlwdGlvbiA9IFwiXCI7XHJcblxyXG4gICAgaWYgKG1pLmFsdCAhPSBudWxsKSB7XHJcbiAgICAgIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24uY29uY2F0KG1pLmFsdClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBzcmMgPSBtaS5zcmM7XHJcbiAgICAgIGxldCBtaW1lVHlwZSA9IG1pLm1pbWV0eXBlO1xyXG4gICAgICBpZiAoIW1pbWVUeXBlKSB7XHJcbiAgICAgICAgbWltZVR5cGUgPSAndGV4dC9wbGFpbic7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG1pbWVUeXBlLnN0YXJ0c1dpdGgoXCJpbWFnZVwiKSkge1xyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24uY29uY2F0KFwiSU1BR0U6IFwiKTtcclxuICAgICAgfSBlbHNlIGlmIChtaW1lVHlwZS5zdGFydHNXaXRoKFwiYXVkaW9cIikpIHtcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uLmNvbmNhdChcIkFVRElPOiBcIik7XHJcbiAgICAgIH0gZWxzZSBpZiAobWltZVR5cGUuc3RhcnRzV2l0aChcInZpZGVvXCIpKSB7XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbi5jb25jYXQoXCJWSURFTzogXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBwcm9tcHRUZXh0ID0gTWVkaWFpdGVtVXRpbC50b1BsYWluVGV4dFN0cmluZyhtaSk7XHJcbiAgICAgIGlmIChwcm9tcHRUZXh0ICE9IG51bGwpIHtcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uLmNvbmNhdChwcm9tcHRUZXh0KTtcclxuICAgICAgfSBlbHNlIGlmIChzcmMgIT0gbnVsbCkge1xyXG4gICAgICAgIGxldCBzcmNQbjtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgbGV0IHNyY1VybCA9IG5ldyBVUkwoc3JjKTtcclxuICAgICAgICAgIHNyY1BuPXNyY1VybC5wYXRobmFtZTtcclxuICAgICAgICB9Y2F0Y2h7XHJcbiAgICAgICAgICBzcmNQbj1zcmM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBHZXQgZmlsZW5hbWUgd2l0aG91dCBleHRlbnNpb25cclxuICAgICAgICBsZXQgc3JjRm5NPXNyY1BuLm1hdGNoKC8oW15cXC9dKikkLyk7XHJcbiAgICAgICAgaWYoc3JjRm5NICYmIHNyY0ZuTS5sZW5ndGg9PTIpe1xyXG4gICAgICAgICAgbGV0IHNyY0ZuPXNyY0ZuTVsxXTtcclxuICAgICAgICAgIGxldCBzcmNGbk5tPXNyY0ZuLnJlcGxhY2UoL1tcXC5dW15cXC5dKi8sJycpO1xyXG4gICAgICAgICAgZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbi5jb25jYXQoc3JjRm5ObSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGVzY3JpcHRpb247XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUHJvbXB0aXRlbVV0aWwge1xyXG4gIHN0YXRpYyB0b1BsYWluVGV4dFN0cmluZyhwcm9tcHRJdGVtOiBQcm9tcHRJdGVtKTogc3RyaW5nIHtcclxuXHJcbiAgICBsZXQgbWlzID0gcHJvbXB0SXRlbS5tZWRpYWl0ZW1zO1xyXG4gICAgbGV0IGRlc2NyaXB0aW9uID0gXCJcIjtcclxuICAgIGlmIChtaXMpIHtcclxuXHJcbiAgICAgIGxldCBtaXNTaXplID0gbWlzLmxlbmd0aDtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtaXNTaXplOyBpKyspIHtcclxuICAgICAgICBsZXQgbWkgPSBtaXNbaV07XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbi5jb25jYXQoTWVkaWFpdGVtVXRpbC5kZXNjcmlwdGlvbihtaSkpO1xyXG4gICAgICAgIGlmIChpICsgMSA8IG1pc1NpemUpIHtcclxuICAgICAgICAgIC8vIG5vdCBsYXN0IGl0ZW1cclxuICAgICAgICAgIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24uY29uY2F0KFwiLCBcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGVzY3JpcHRpb247XHJcbiAgfVxyXG59XHJcblxyXG5cclxuIl19
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NyaXB0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3NwZWVjaHJlY29yZGVyL3NjcmlwdC9zY3JpcHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaUZBLE1BQU0sT0FBTyxhQUFhO0lBRXhCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxTQUFtQjtRQUMxQyxJQUFJLEVBQUUsR0FBQyxFQUFFLENBQUM7UUFDVixJQUFJLENBQUMsR0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ3JCLElBQUcsQ0FBQyxJQUFFLElBQUksRUFBRTtZQUNWLElBQUksSUFBSSxHQUFDLENBQUMsQ0FBQyxNQUFNLENBQUE7WUFDakIsSUFBRyxJQUFJLEVBQUU7Z0JBQ1AsS0FBSSxJQUFJLEdBQUcsR0FBQyxDQUFDLEVBQUMsR0FBRyxHQUFDLElBQUksQ0FBQyxNQUFNLEVBQUMsR0FBRyxFQUFFLEVBQUM7b0JBQ2xDLElBQUksR0FBRyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDbEIsSUFBSSxJQUFJLEdBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztvQkFDbkIsS0FBSSxJQUFJLEVBQUUsR0FBQyxDQUFDLEVBQUMsRUFBRSxHQUFDLElBQUksQ0FBQyxNQUFNLEVBQUMsRUFBRSxFQUFFLEVBQUM7d0JBQzdCLElBQUksS0FBSyxHQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDbkIsSUFBSSxHQUFHLEdBQUUsS0FBSyxDQUFDLElBQUksQ0FBQzt3QkFDdEIsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBQzs0QkFDeEIsSUFBRyxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUM7Z0NBQ3pCLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFTLEdBQUcsQ0FBQyxDQUFDOzZCQUM3QjtpQ0FBSTtnQ0FDSCxJQUFJLFFBQVEsR0FBTyxHQUFHLENB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Q3BCLElBQUksT0FBTyxHQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUMzQyxXQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDM0M7YUFDRjtTQUNGO1FBQ0QsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLGNBQWM7SUFDekIsTUFBTSxDQUFDLGlCQUFpQixDQUFDLFVBQXNCO1FBRTdDLElBQUksR0FBRyxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUM7UUFDaEMsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksR0FBRyxFQUFFO1lBRVAsSUFBSSxPQUFPLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztZQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNoQyxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hCLFdBQVcsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDaEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sRUFBRTtvQkFDbkIsZ0JBQWdCO29CQUNoQixXQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDeEM7YUFDRjtTQUNGO1FBQ0QsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbmV4cG9ydCB0eXBlIE1vZGUgPSBcIk1BTlVBTFwiIHwgXCJBVVRPUFJPR1JFU1NcIiB8IFwiQVVUT1JFQ09SRElOR1wiO1xyXG5leHBvcnQgdHlwZSBQcm9tcHRQaGFzZSA9IFwiSURMRVwiIHwgXCJQUkVSRUNPUkRJTkdcIiB8IFwiUkVDT1JESU5HXCI7XHJcblxyXG5leHBvcnQgdHlwZSBPcmRlciA9ICdTRVFVRU5USUFMJyB8ICdSQU5ET00nIHwgJ1JBTkRPTUlaRUQnO1xyXG5cclxuZXhwb3J0IHR5cGUgRGVjb3JhdGlvbiA9J3VuZGVybGluZSdcclxuZXhwb3J0IHR5cGUgU3R5bGUgPSdpdGFsaWMnIHwgJ25vcm1hbCdcclxuZXhwb3J0IHR5cGUgRm9udFdlaWdodD0nbm9ybWFsJyB8ICdib2xkJ1xyXG5leHBvcnQgdHlwZSBCbG9ja1R5cGU9J3AnO1xyXG5leHBvcnQgdHlwZSBUZXh0VHlwZT0ndGV4dCcgfCAnZm9udCc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJlY2luc3RydWN0aW9uc3tcclxuICByZWNpbnN0cnVjdGlvbnM6c3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRleHQge1xyXG4gIHR5cGU6IFRleHRUeXBlLFxyXG4gIGNvbG9yPyA6IHN0cmluZyxcclxuICBkZWNvcmF0aW9uPyA6IERlY29yYXRpb24sXHJcbiAgc2l6ZT86IHN0cmluZyxcclxuICB3ZWlnaHQ/OiBGb250V2VpZ2h0LFxyXG4gIHN0eWxlPzogU3R5bGUsXHJcbiAgdGV4dCA6IHN0cmluZyB8IFRleHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQmxvY2sge1xyXG4gIHR5cGU6IEJsb2NrVHlwZSxcclxuICB0ZXh0czogQXJyYXk8VGV4dD5cclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIEJvZHl7XHJcbiAgYmxvY2tzPzogQXJyYXk8QmxvY2s+LFxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFByb21wdERvY3tcclxuICBib2R5PzogQm9keVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE1lZGlhaXRlbSB7XHJcbiAgdGV4dD86IHN0cmluZyxcclxuICBzcmM/OiBzdHJpbmcsXHJcbiAgcHJvbXB0RG9jPzogUHJvbXB0RG9jLFxyXG4gIG1pbWV0eXBlPzpzdHJpbmcsXHJcbiAgZGVmYXVsdFZpcnR1YWxWaWV3Qm94PzpWaXJ0dWFsVmlld0JveCxcclxuICBhbHQ/OnN0cmluZ1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFByb21wdEl0ZW0ge1xyXG4gIHR5cGU/OnN0cmluZztcclxuICBpdGVtY29kZT86IHN0cmluZyxcclxuICBwcmVyZWNvcmRpbmc6IG51bWJlcixcclxuICByZWNkdXJhdGlvbj86IG51bWJlcixcclxuICBwb3N0cmVjb3JkaW5nOiBudW1iZXIsXHJcbiAgcmVjaW5zdHJ1Y3Rpb25zPzogUmVjaW5zdHJ1Y3Rpb25zLFxyXG4gIG1lZGlhaXRlbXM6IEFycmF5PE1lZGlhaXRlbT5cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBHcm91cCB7XHJcbiAgb3JkZXI/Ok9yZGVyO1xyXG4gIHByb21wdEl0ZW1zOiBBcnJheTxQcm9tcHRJdGVtPjtcclxuICBfc2h1ZmZsZWRQcm9tcHRJdGVtczogQXJyYXk8UHJvbXB0SXRlbT47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2VjdGlvbiB7XHJcbiAgbW9kZTogTW9kZTtcclxuICBwcm9tcHRwaGFzZTogUHJvbXB0UGhhc2U7XHJcbiAgb3JkZXI/OiBPcmRlcjtcclxuICB0cmFpbmluZzogYm9vbGVhbjtcclxuICBncm91cHM6IEFycmF5PEdyb3VwPjtcclxuICBfc2h1ZmZsZWRHcm91cHM6IEFycmF5PEdyb3VwPjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBWaXJ0dWFsVmlld0JveHtcclxuICBoZWlnaHQ6bnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNjcmlwdCB7XHJcbiAgdmlydHVhbFZpZXdCb3g/OlZpcnR1YWxWaWV3Qm94O1xyXG4gIHNlY3Rpb25zOiBBcnJheTxTZWN0aW9uPjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFByb21wdERvY1V0aWx7XHJcblxyXG4gIHN0YXRpYyB0b1BsYWluVGV4dFN0cmluZyhwcm9tcHREb2M6UHJvbXB0RG9jKTpzdHJpbmd7XHJcbiAgICBsZXQgcHQ9XCJcIjtcclxuICAgIGxldCBiPXByb21wdERvYy5ib2R5O1xyXG4gICAgaWYoYiE9bnVsbCkge1xyXG4gICAgICBsZXQgYmxrcz1iLmJsb2Nrc1xyXG4gICAgICBpZihibGtzKSB7XHJcbiAgICAgICAgZm9yKGxldCBibGk9MDtibGk8Ymxrcy5sZW5ndGg7YmxpKyspe1xyXG4gICAgICAgICAgbGV0IGJsaz1ibGtzW2JsaV07XHJcbiAgICAgICAgICBsZXQgdHh0cz1ibGsudGV4dHM7XHJcbiAgICAgICAgICBmb3IobGV0IHRpPTA7dGk8dHh0cy5sZW5ndGg7dGkrKyl7XHJcbiAgICAgICAgICAgICAgbGV0IHR4dEVsPXR4dHNbdGldO1xyXG4gICAgICAgICAgICAgIGxldCB0eHQgPXR4dEVsLnRleHQ7XHJcbiAgICAgICAgICAgIGlmKCB0eHRFbC50eXBlID09PSAnZm9udCcpe1xyXG4gICAgICAgICAgICAgIGlmKHR5cGVvZiB0eHQgPT09ICdzdHJpbmcnKXtcclxuICAgICAgICAgICAgICAgIHB0ID0gcHQuY29uY2F0KDxzdHJpbmc+dHh0KTtcclxuICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGxldCBzdWJUeHRFbD08VGV4dD50eHQ7XHJcbiAgICAgICAgICAgICAgICBsZXQgc3ViVHh0PXN1YlR4dEVsLnRleHQ7XHJcbiAgICAgICAgICAgICAgICBpZih0eXBlb2Ygc3ViVHh0ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICBwdD1wdC5jb25jYXQoc3ViVHh0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1lbHNlIGlmKHR5cGVvZiB0eHQgPT09ICdzdHJpbmcnKXtcclxuICAgICAgICAgICAgICBwdCA9IHB0LmNvbmNhdCg8c3RyaW5nPnR4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBwdDtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBNZWRpYWl0ZW1VdGlsIHtcclxuICBzdGF0aWMgdG9QbGFpblRleHRTdHJpbmcobWVkaWFpdGVtOiBNZWRpYWl0ZW0pOiBzdHJpbmd8bnVsbCB7XHJcblxyXG4gICAgbGV0IHR4dCA9IG1lZGlhaXRlbS50ZXh0O1xyXG4gICAgbGV0IHBkID0gbWVkaWFpdGVtLnByb21wdERvYztcclxuICAgIGlmICh0eHQgPT0gbnVsbCkge1xyXG4gICAgICBsZXQgcHQgPSBudWxsO1xyXG4gICAgICBpZiAocGQgIT0gbnVsbCkge1xyXG4gICAgICAgIHB0ID0gUHJvbXB0RG9jVXRpbC50b1BsYWluVGV4dFN0cmluZyhwZCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHB0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHR4dDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBkZXNjcmlwdGlvbihtaTogTWVkaWFpdGVtKTogc3RyaW5nIHtcclxuICAgIGxldCBkZXNjcmlwdGlvbiA9IFwiXCI7XHJcblxyXG4gICAgaWYgKG1pLmFsdCAhPSBudWxsKSB7XHJcbiAgICAgIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24uY29uY2F0KG1pLmFsdClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBzcmMgPSBtaS5zcmM7XHJcbiAgICAgIGxldCBtaW1lVHlwZSA9IG1pLm1pbWV0eXBlO1xyXG4gICAgICBpZiAoIW1pbWVUeXBlKSB7XHJcbiAgICAgICAgbWltZVR5cGUgPSAndGV4dC9wbGFpbic7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG1pbWVUeXBlLnN0YXJ0c1dpdGgoXCJpbWFnZVwiKSkge1xyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24uY29uY2F0KFwiSU1BR0U6IFwiKTtcclxuICAgICAgfSBlbHNlIGlmIChtaW1lVHlwZS5zdGFydHNXaXRoKFwiYXVkaW9cIikpIHtcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uLmNvbmNhdChcIkFVRElPOiBcIik7XHJcbiAgICAgIH0gZWxzZSBpZiAobWltZVR5cGUuc3RhcnRzV2l0aChcInZpZGVvXCIpKSB7XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbi5jb25jYXQoXCJWSURFTzogXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBwcm9tcHRUZXh0ID0gTWVkaWFpdGVtVXRpbC50b1BsYWluVGV4dFN0cmluZyhtaSk7XHJcbiAgICAgIGlmIChwcm9tcHRUZXh0ICE9IG51bGwpIHtcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uLmNvbmNhdChwcm9tcHRUZXh0KTtcclxuICAgICAgfSBlbHNlIGlmIChzcmMgIT0gbnVsbCkge1xyXG4gICAgICAgIGxldCBzcmNQbjtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgbGV0IHNyY1VybCA9IG5ldyBVUkwoc3JjKTtcclxuICAgICAgICAgIHNyY1BuPXNyY1VybC5wYXRobmFtZTtcclxuICAgICAgICB9Y2F0Y2h7XHJcbiAgICAgICAgICBzcmNQbj1zcmM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBHZXQgZmlsZW5hbWUgd2l0aG91dCBleHRlbnNpb25cclxuICAgICAgICBsZXQgc3JjRm5NPXNyY1BuLm1hdGNoKC8oW15cXC9dKikkLyk7XHJcbiAgICAgICAgaWYoc3JjRm5NICYmIHNyY0ZuTS5sZW5ndGg9PTIpe1xyXG4gICAgICAgICAgbGV0IHNyY0ZuPXNyY0ZuTVsxXTtcclxuICAgICAgICAgIGxldCBzcmNGbk5tPXNyY0ZuLnJlcGxhY2UoL1tcXC5dW15cXC5dKi8sJycpO1xyXG4gICAgICAgICAgZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbi5jb25jYXQoc3JjRm5ObSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGVzY3JpcHRpb247XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUHJvbXB0aXRlbVV0aWwge1xyXG4gIHN0YXRpYyB0b1BsYWluVGV4dFN0cmluZyhwcm9tcHRJdGVtOiBQcm9tcHRJdGVtKTogc3RyaW5nIHtcclxuXHJcbiAgICBsZXQgbWlzID0gcHJvbXB0SXRlbS5tZWRpYWl0ZW1zO1xyXG4gICAgbGV0IGRlc2NyaXB0aW9uID0gXCJcIjtcclxuICAgIGlmIChtaXMpIHtcclxuXHJcbiAgICAgIGxldCBtaXNTaXplID0gbWlzLmxlbmd0aDtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtaXNTaXplOyBpKyspIHtcclxuICAgICAgICBsZXQgbWkgPSBtaXNbaV07XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbi5jb25jYXQoTWVkaWFpdGVtVXRpbC5kZXNjcmlwdGlvbihtaSkpO1xyXG4gICAgICAgIGlmIChpICsgMSA8IG1pc1NpemUpIHtcclxuICAgICAgICAgIC8vIG5vdCBsYXN0IGl0ZW1cclxuICAgICAgICAgIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24uY29uY2F0KFwiLCBcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGVzY3JpcHRpb247XHJcbiAgfVxyXG59XHJcblxyXG5cclxuIl19
@@ -36,12 +36,12 @@ export class ScriptService {
36
36
  return this.http.get(scriptUrl, { withCredentials: this.withCredentials });
37
37
  }
38
38
  }
39
- ScriptService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: ScriptService, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
40
- ScriptService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: ScriptService });
41
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: ScriptService, decorators: [{
39
+ ScriptService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: ScriptService, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
40
+ ScriptService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: ScriptService });
41
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: ScriptService, decorators: [{
42
42
  type: Injectable
43
43
  }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.SpeechRecorderConfig, decorators: [{
44
44
  type: Inject,
45
45
  args: [SPEECHRECORDER_CONFIG]
46
46
  }] }]; } });
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NyaXB0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvc3BlZWNocmVjb3JkZXIvc2NyaXB0L3NjcmlwdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUFDLE9BQU8sRUFBRSxxQkFBcUIsRUFBdUIsTUFBTSxrQkFBa0IsQ0FBQztBQUV0RixPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7Ozs7QUFJdkMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFDLFFBQVEsQ0FBQTtBQUdwQyxNQUFNLE9BQU8sYUFBYTtJQUl4QixZQUFvQixJQUFlLEVBQXdDLE1BQTRCO1FBQW5GLFNBQUksR0FBSixJQUFJLENBQVc7UUFBd0MsV0FBTSxHQUFOLE1BQU0sQ0FBc0I7UUFGL0Ysb0JBQWUsR0FBUyxLQUFLLENBQUM7UUFJcEMsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFBO1FBRXBCLElBQUcsTUFBTSxJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUU7WUFDL0IsV0FBVyxHQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7U0FDaEM7UUFDRCxJQUFHLFdBQVcsS0FBSyxFQUFFLEVBQUM7WUFDcEIsV0FBVyxHQUFDLFdBQVcsR0FBQyxHQUFHLENBQUE7U0FDNUI7UUFDRCxJQUFHLE1BQU0sSUFBRSxJQUFJLElBQUksTUFBTSxDQUFDLGVBQWUsSUFBRSxJQUFJLEVBQUM7WUFDOUMsSUFBSSxDQUFDLGVBQWUsR0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO1NBQzdDO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLEdBQUcsY0FBYyxDQUFDO0lBQ25ELENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFrQjtRQUNqQyxJQUFJLFdBQVcsR0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2QyxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsR0FBRyxXQUFXLENBQUM7UUFDdEQsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxLQUFLLEVBQUU7WUFDeEQsMkJBQTJCO1lBQzNCLDJFQUEyRTtZQUMzRSxTQUFTLEdBQUcsU0FBUyxHQUFHLG9CQUFvQixHQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUM5RDtRQUNELE9BQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVMsU0FBUyxFQUFDLEVBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFBO0lBRWxGLENBQUM7OzJHQTlCUyxhQUFhLDRDQUlvQixxQkFBcUI7K0dBSnRELGFBQWE7NEZBQWIsYUFBYTtrQkFEekIsVUFBVTs7MEJBSzRCLE1BQU07MkJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIENyZWF0ZWQgYnkga2xhdXNqIG9uIDE3LjA2LjIwMTcuXHJcbiAqL1xyXG5pbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7QXBpVHlwZSwgU1BFRUNIUkVDT1JERVJfQ09ORklHLCBTcGVlY2hSZWNvcmRlckNvbmZpZ30gZnJvbSBcIi4uLy4uL3Nwci5jb25maWdcIjtcclxuaW1wb3J0IHtTY3JpcHR9IGZyb20gXCIuL3NjcmlwdFwiO1xyXG5pbXBvcnQge1VVSUR9IGZyb20gXCIuLi8uLi91dGlscy91dGlsc1wiO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gXCJyeGpzXCI7XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IFNDUklQVF9BUElfQ1RYPSdzY3JpcHQnXHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBTY3JpcHRTZXJ2aWNlIHtcclxuICBwcml2YXRlIHNjcmlwdEN0eFVybDpzdHJpbmc7XHJcbiAgcHJpdmF0ZSB3aXRoQ3JlZGVudGlhbHM6Ym9vbGVhbj1mYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOkh0dHBDbGllbnQsQEluamVjdChTUEVFQ0hSRUNPUkRFUl9DT05GSUcpIHByaXZhdGUgY29uZmlnPzpTcGVlY2hSZWNvcmRlckNvbmZpZykge1xyXG5cclxuICAgIGxldCBhcGlFbmRQb2ludCA9ICcnXHJcblxyXG4gICAgaWYoY29uZmlnICYmIGNvbmZpZy5hcGlFbmRQb2ludCkge1xyXG4gICAgICBhcGlFbmRQb2ludD1jb25maWcuYXBpRW5kUG9pbnQ7XHJcbiAgICB9XHJcbiAgICBpZihhcGlFbmRQb2ludCAhPT0gJycpe1xyXG4gICAgICBhcGlFbmRQb2ludD1hcGlFbmRQb2ludCsnLydcclxuICAgIH1cclxuICAgIGlmKGNvbmZpZyE9bnVsbCAmJiBjb25maWcud2l0aENyZWRlbnRpYWxzIT1udWxsKXtcclxuICAgICAgdGhpcy53aXRoQ3JlZGVudGlhbHM9Y29uZmlnLndpdGhDcmVkZW50aWFscztcclxuICAgIH1cclxuICAgIHRoaXMuc2NyaXB0Q3R4VXJsID0gYXBpRW5kUG9pbnQgKyBTQ1JJUFRfQVBJX0NUWDtcclxuICB9XHJcblxyXG4gIHNjcmlwdE9ic2VydmFibGUoaWQ6c3RyaW5nIHwgbnVtYmVyKTpPYnNlcnZhYmxlPFNjcmlwdD57XHJcbiAgICBsZXQgZW5jU2NyaXB0SWQ9ZW5jb2RlVVJJQ29tcG9uZW50KGlkKTtcclxuICAgIGxldCBzY3JpcHRVcmwgPSB0aGlzLnNjcmlwdEN0eFVybCArICcvJyArIGVuY1NjcmlwdElkO1xyXG4gICAgaWYgKHRoaXMuY29uZmlnICYmIHRoaXMuY29uZmlnLmFwaVR5cGUgPT09IEFwaVR5cGUuRklMRVMpIHtcclxuICAgICAgLy8gZm9yIGRldmVsb3BtZW50IGFuZCBkZW1vXHJcbiAgICAgIC8vIGFwcGVuZCBVVUlEIHRvIG1ha2UgcmVxdWVzdCBVUkwgdW5pcXVlIHRvIGF2b2lkIGxvY2FsaG9zdCBzZXJ2ZXIgY2FjaGluZ1xyXG4gICAgICBzY3JpcHRVcmwgPSBzY3JpcHRVcmwgKyAnLmpzb24/cmVxdWVzdFVVSUQ9JytVVUlELmdlbmVyYXRlKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gIHRoaXMuaHR0cC5nZXQ8U2NyaXB0PihzY3JpcHRVcmwse3dpdGhDcmVkZW50aWFsczogdGhpcy53aXRoQ3JlZGVudGlhbHMgfSlcclxuXHJcbiAgIH1cclxuXHJcbn1cclxuXHJcblxyXG5cclxuIl19
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NyaXB0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvc3BlZWNocmVjb3JkZXIvc2NyaXB0L3NjcmlwdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUFDLE9BQU8sRUFBRSxxQkFBcUIsRUFBdUIsTUFBTSxrQkFBa0IsQ0FBQztBQUV0RixPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7Ozs7QUFJdkMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFDLFFBQVEsQ0FBQTtBQUdwQyxNQUFNLE9BQU8sYUFBYTtJQUl4QixZQUFvQixJQUFlLEVBQXdDLE1BQTRCO1FBQW5GLFNBQUksR0FBSixJQUFJLENBQVc7UUFBd0MsV0FBTSxHQUFOLE1BQU0sQ0FBc0I7UUFGL0Ysb0JBQWUsR0FBUyxLQUFLLENBQUM7UUFJcEMsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFBO1FBRXBCLElBQUcsTUFBTSxJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUU7WUFDL0IsV0FBVyxHQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7U0FDaEM7UUFDRCxJQUFHLFdBQVcsS0FBSyxFQUFFLEVBQUM7WUFDcEIsV0FBVyxHQUFDLFdBQVcsR0FBQyxHQUFHLENBQUE7U0FDNUI7UUFDRCxJQUFHLE1BQU0sSUFBRSxJQUFJLElBQUksTUFBTSxDQUFDLGVBQWUsSUFBRSxJQUFJLEVBQUM7WUFDOUMsSUFBSSxDQUFDLGVBQWUsR0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO1NBQzdDO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLEdBQUcsY0FBYyxDQUFDO0lBQ25ELENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFrQjtRQUNqQyxJQUFJLFdBQVcsR0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2QyxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsR0FBRyxXQUFXLENBQUM7UUFDdEQsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxLQUFLLEVBQUU7WUFDeEQsMkJBQTJCO1lBQzNCLDJFQUEyRTtZQUMzRSxTQUFTLEdBQUcsU0FBUyxHQUFHLG9CQUFvQixHQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUM5RDtRQUNELE9BQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVMsU0FBUyxFQUFDLEVBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFBO0lBRWxGLENBQUM7OzBHQTlCUyxhQUFhLDRDQUlvQixxQkFBcUI7OEdBSnRELGFBQWE7MkZBQWIsYUFBYTtrQkFEekIsVUFBVTs7MEJBSzRCLE1BQU07MkJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIENyZWF0ZWQgYnkga2xhdXNqIG9uIDE3LjA2LjIwMTcuXHJcbiAqL1xyXG5pbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7QXBpVHlwZSwgU1BFRUNIUkVDT1JERVJfQ09ORklHLCBTcGVlY2hSZWNvcmRlckNvbmZpZ30gZnJvbSBcIi4uLy4uL3Nwci5jb25maWdcIjtcclxuaW1wb3J0IHtTY3JpcHR9IGZyb20gXCIuL3NjcmlwdFwiO1xyXG5pbXBvcnQge1VVSUR9IGZyb20gXCIuLi8uLi91dGlscy91dGlsc1wiO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gXCJyeGpzXCI7XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IFNDUklQVF9BUElfQ1RYPSdzY3JpcHQnXHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBTY3JpcHRTZXJ2aWNlIHtcclxuICBwcml2YXRlIHNjcmlwdEN0eFVybDpzdHJpbmc7XHJcbiAgcHJpdmF0ZSB3aXRoQ3JlZGVudGlhbHM6Ym9vbGVhbj1mYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOkh0dHBDbGllbnQsQEluamVjdChTUEVFQ0hSRUNPUkRFUl9DT05GSUcpIHByaXZhdGUgY29uZmlnPzpTcGVlY2hSZWNvcmRlckNvbmZpZykge1xyXG5cclxuICAgIGxldCBhcGlFbmRQb2ludCA9ICcnXHJcblxyXG4gICAgaWYoY29uZmlnICYmIGNvbmZpZy5hcGlFbmRQb2ludCkge1xyXG4gICAgICBhcGlFbmRQb2ludD1jb25maWcuYXBpRW5kUG9pbnQ7XHJcbiAgICB9XHJcbiAgICBpZihhcGlFbmRQb2ludCAhPT0gJycpe1xyXG4gICAgICBhcGlFbmRQb2ludD1hcGlFbmRQb2ludCsnLydcclxuICAgIH1cclxuICAgIGlmKGNvbmZpZyE9bnVsbCAmJiBjb25maWcud2l0aENyZWRlbnRpYWxzIT1udWxsKXtcclxuICAgICAgdGhpcy53aXRoQ3JlZGVudGlhbHM9Y29uZmlnLndpdGhDcmVkZW50aWFscztcclxuICAgIH1cclxuICAgIHRoaXMuc2NyaXB0Q3R4VXJsID0gYXBpRW5kUG9pbnQgKyBTQ1JJUFRfQVBJX0NUWDtcclxuICB9XHJcblxyXG4gIHNjcmlwdE9ic2VydmFibGUoaWQ6c3RyaW5nIHwgbnVtYmVyKTpPYnNlcnZhYmxlPFNjcmlwdD57XHJcbiAgICBsZXQgZW5jU2NyaXB0SWQ9ZW5jb2RlVVJJQ29tcG9uZW50KGlkKTtcclxuICAgIGxldCBzY3JpcHRVcmwgPSB0aGlzLnNjcmlwdEN0eFVybCArICcvJyArIGVuY1NjcmlwdElkO1xyXG4gICAgaWYgKHRoaXMuY29uZmlnICYmIHRoaXMuY29uZmlnLmFwaVR5cGUgPT09IEFwaVR5cGUuRklMRVMpIHtcclxuICAgICAgLy8gZm9yIGRldmVsb3BtZW50IGFuZCBkZW1vXHJcbiAgICAgIC8vIGFwcGVuZCBVVUlEIHRvIG1ha2UgcmVxdWVzdCBVUkwgdW5pcXVlIHRvIGF2b2lkIGxvY2FsaG9zdCBzZXJ2ZXIgY2FjaGluZ1xyXG4gICAgICBzY3JpcHRVcmwgPSBzY3JpcHRVcmwgKyAnLmpzb24/cmVxdWVzdFVVSUQ9JytVVUlELmdlbmVyYXRlKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gIHRoaXMuaHR0cC5nZXQ8U2NyaXB0PihzY3JpcHRVcmwse3dpdGhDcmVkZW50aWFsczogdGhpcy53aXRoQ3JlZGVudGlhbHMgfSlcclxuXHJcbiAgIH1cclxuXHJcbn1cclxuXHJcblxyXG5cclxuIl19