speechrecorderng 3.10.13 → 3.11.1

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 (99) hide show
  1. package/README.md +1 -1
  2. package/fesm2022/speechrecorderng.mjs +204 -201
  3. package/fesm2022/speechrecorderng.mjs.map +1 -1
  4. package/lib/audio/ui/audio_canvas_layer_comp.d.ts +2 -2
  5. package/lib/spr.module.version.d.ts +1 -1
  6. package/lib/ui/canvas_layer_comp.d.ts +1 -1
  7. package/lib/ui/responsive_component.d.ts +1 -1
  8. package/package.json +13 -15
  9. package/esm2022/lib/action/action.mjs +0 -73
  10. package/esm2022/lib/audio/array_audio_buffer.mjs +0 -164
  11. package/esm2022/lib/audio/array_audio_buffer_input_stream.mjs +0 -86
  12. package/esm2022/lib/audio/array_audio_buffer_random_access_stream.mjs +0 -16
  13. package/esm2022/lib/audio/audio_data_holder.mjs +0 -264
  14. package/esm2022/lib/audio/audio_display.mjs +0 -118
  15. package/esm2022/lib/audio/audio_player.mjs +0 -238
  16. package/esm2022/lib/audio/capture/capture.mjs +0 -855
  17. package/esm2022/lib/audio/context.mjs +0 -79
  18. package/esm2022/lib/audio/dsp/level_measure.mjs +0 -517
  19. package/esm2022/lib/audio/format.mjs +0 -20
  20. package/esm2022/lib/audio/impl/wavformat.mjs +0 -7
  21. package/esm2022/lib/audio/impl/wavreader.mjs +0 -144
  22. package/esm2022/lib/audio/impl/wavwriter.mjs +0 -191
  23. package/esm2022/lib/audio/inddb_audio_buffer.mjs +0 -508
  24. package/esm2022/lib/audio/io/stream.mjs +0 -59
  25. package/esm2022/lib/audio/net_audio_buffer.mjs +0 -293
  26. package/esm2022/lib/audio/persistor.mjs +0 -81
  27. package/esm2022/lib/audio/playback/array_audio_buffer_source_node.mjs +0 -126
  28. package/esm2022/lib/audio/playback/audio_source_node.mjs +0 -18
  29. package/esm2022/lib/audio/playback/audio_source_worklet_module_loader.mjs +0 -167
  30. package/esm2022/lib/audio/playback/inddb_audio_buffer_source_node.mjs +0 -167
  31. package/esm2022/lib/audio/playback/net_audio_buffer_source_node.mjs +0 -218
  32. package/esm2022/lib/audio/playback/player.mjs +0 -402
  33. package/esm2022/lib/audio/ui/audio_canvas_layer_comp.mjs +0 -347
  34. package/esm2022/lib/audio/ui/audio_display_control.mjs +0 -150
  35. package/esm2022/lib/audio/ui/audio_display_scroll_pane.mjs +0 -146
  36. package/esm2022/lib/audio/ui/audiosignal.mjs +0 -533
  37. package/esm2022/lib/audio/ui/common.mjs +0 -19
  38. package/esm2022/lib/audio/ui/container.mjs +0 -414
  39. package/esm2022/lib/audio/ui/livelevel.mjs +0 -361
  40. package/esm2022/lib/audio/ui/scroll_pane_horizontal.mjs +0 -11
  41. package/esm2022/lib/audio/ui/sonagram.mjs +0 -900
  42. package/esm2022/lib/db/inddb.mjs +0 -120
  43. package/esm2022/lib/dsp/utils.mjs +0 -48
  44. package/esm2022/lib/environment/environment.defaults.mjs +0 -9
  45. package/esm2022/lib/io/BinaryReader.mjs +0 -93
  46. package/esm2022/lib/io/BinaryWriter.mjs +0 -80
  47. package/esm2022/lib/io/stream.mjs +0 -259
  48. package/esm2022/lib/math/2d/geometry.mjs +0 -28
  49. package/esm2022/lib/math/complex.mjs +0 -58
  50. package/esm2022/lib/math/dft.mjs +0 -196
  51. package/esm2022/lib/media/utils.mjs +0 -14
  52. package/esm2022/lib/net/uploader.mjs +0 -367
  53. package/esm2022/lib/recorder_component.mjs +0 -65
  54. package/esm2022/lib/speechrecorder/project/project.mjs +0 -54
  55. package/esm2022/lib/speechrecorder/project/project.service.mjs +0 -64
  56. package/esm2022/lib/speechrecorder/recording.mjs +0 -124
  57. package/esm2022/lib/speechrecorder/recordings/basic_recording.service.mjs +0 -221
  58. package/esm2022/lib/speechrecorder/recordings/recordings.service.mjs +0 -1014
  59. package/esm2022/lib/speechrecorder/script/script.mjs +0 -114
  60. package/esm2022/lib/speechrecorder/script/script.service.mjs +0 -47
  61. package/esm2022/lib/speechrecorder/session/audiorecorder.mjs +0 -1179
  62. package/esm2022/lib/speechrecorder/session/basicrecorder.mjs +0 -676
  63. package/esm2022/lib/speechrecorder/session/controlpanel.mjs +0 -416
  64. package/esm2022/lib/speechrecorder/session/item.mjs +0 -30
  65. package/esm2022/lib/speechrecorder/session/progress.mjs +0 -135
  66. package/esm2022/lib/speechrecorder/session/prompting.mjs +0 -639
  67. package/esm2022/lib/speechrecorder/session/recorder_combi_pane.mjs +0 -88
  68. package/esm2022/lib/speechrecorder/session/recording_file_cache.mjs +0 -195
  69. package/esm2022/lib/speechrecorder/session/recording_list.mjs +0 -188
  70. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +0 -128
  71. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +0 -114
  72. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +0 -146
  73. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +0 -424
  74. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file.mjs +0 -68
  75. package/esm2022/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +0 -288
  76. package/esm2022/lib/speechrecorder/session/session.mjs +0 -2
  77. package/esm2022/lib/speechrecorder/session/session.service.mjs +0 -69
  78. package/esm2022/lib/speechrecorder/session/session_finished_dialog.mjs +0 -46
  79. package/esm2022/lib/speechrecorder/session/sessionmanager.mjs +0 -1385
  80. package/esm2022/lib/speechrecorder/session/warning_bar.mjs +0 -33
  81. package/esm2022/lib/speechrecorder/spruploader.mjs +0 -22
  82. package/esm2022/lib/speechrecorder/startstopsignal/startstopsignal.mjs +0 -2
  83. package/esm2022/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +0 -57
  84. package/esm2022/lib/speechrecorderng.component.mjs +0 -392
  85. package/esm2022/lib/speechrecorderng.module.mjs +0 -97
  86. package/esm2022/lib/spr.config.mjs +0 -27
  87. package/esm2022/lib/spr.module.version.mjs +0 -2
  88. package/esm2022/lib/ui/canvas_layer_comp.mjs +0 -38
  89. package/esm2022/lib/ui/intersection-observer.directive.mjs +0 -32
  90. package/esm2022/lib/ui/message_dialog.mjs +0 -51
  91. package/esm2022/lib/ui/recordingitem_display.mjs +0 -253
  92. package/esm2022/lib/ui/responsive_component.mjs +0 -24
  93. package/esm2022/lib/utils/scrollIntoViewToBottom.mjs +0 -23
  94. package/esm2022/lib/utils/ua-parser.mjs +0 -190
  95. package/esm2022/lib/utils/utils.mjs +0 -132
  96. package/esm2022/lib/utils/wake_lock.mjs +0 -114
  97. package/esm2022/lib/utils/wake_lock_media.mjs +0 -2
  98. package/esm2022/public-api.mjs +0 -35
  99. package/esm2022/speechrecorderng.mjs +0 -5
@@ -1,97 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { SpeechrecorderngComponent } from "./speechrecorderng.component";
3
- import { SimpleTrafficLight } from "./speechrecorder/startstopsignal/ui/simpletrafficlight";
4
- import { CommonModule } from "@angular/common";
5
- import { Progress } from "./speechrecorder/session/progress";
6
- import { PromptContainer, Prompter, Prompting, PromptingContainer, Recinstructions, } from "./speechrecorder/session/prompting";
7
- import { SessionManager } from "./speechrecorder/session/sessionmanager";
8
- import { WarningBar } from "./speechrecorder/session/warning_bar";
9
- import { ScrollIntoViewDirective } from "./utils/scrollIntoViewToBottom";
10
- import { MatButtonModule } from "@angular/material/button";
11
- import { MatDialogModule } from "@angular/material/dialog";
12
- import { MatIconModule } from "@angular/material/icon";
13
- import { MatProgressBarModule } from "@angular/material/progress-bar";
14
- import { MatProgressSpinnerModule } from "@angular/material/progress-spinner";
15
- import { MatTooltipModule } from "@angular/material/tooltip";
16
- import { provideHttpClient, withInterceptorsFromDi } from "@angular/common/http";
17
- import { SessionService } from "./speechrecorder/session/session.service";
18
- import { ScriptService } from "./speechrecorder/script/script.service";
19
- import { RouterModule } from "@angular/router";
20
- import { SPEECHRECORDER_CONFIG } from "./spr.config";
21
- import { SpeechRecorderUploader } from "./speechrecorder/spruploader";
22
- import { ProjectService } from "./speechrecorder/project/project.service";
23
- import { ControlPanel, ProgressDisplay, ReadyStateIndicator, StatusDisplay, TransportPanel, UploadStatus, WakeLockIndicator } from "./speechrecorder/session/controlpanel";
24
- //import {FlexLayoutModule} from "@angular/flex-layout";
25
- import { SessionFinishedDialog } from "./speechrecorder/session/session_finished_dialog";
26
- import { MessageDialog } from "./ui/message_dialog";
27
- import { RecordingItemControls, RecordingItemDisplay } from "./ui/recordingitem_display";
28
- import { RecordingService } from "./speechrecorder/recordings/recordings.service";
29
- import { ScrollPaneHorizontal } from "./audio/ui/scroll_pane_horizontal";
30
- import { AudioClipUIContainer } from "./audio/ui/container";
31
- import { AudioSignal } from "./audio/ui/audiosignal";
32
- import { Sonagram } from "./audio/ui/sonagram";
33
- import { AudioDisplayPlayer } from "./audio/audio_player";
34
- import { AudioDisplay } from "./audio/audio_display";
35
- import { AudioDisplayControl } from "./audio/ui/audio_display_control";
36
- import { LevelBar } from "./audio/ui/livelevel";
37
- import { AudioDisplayScrollPane } from "./audio/ui/audio_display_scroll_pane";
38
- import { MatCheckboxModule } from "@angular/material/checkbox";
39
- import { MatCardModule } from "@angular/material/card";
40
- import { MatDividerModule } from "@angular/material/divider";
41
- import { MatGridListModule } from "@angular/material/grid-list";
42
- import { RecordingFileUI } from "./speechrecorder/session/recordingfile/recording-file-u-i.component";
43
- import { RecordingFileService } from "./speechrecorder/session/recordingfile/recordingfile-service";
44
- import { RecordingFileViewComponent } from "./speechrecorder/session/recordingfile/recording-file-view.component";
45
- import { MatTableModule } from "@angular/material/table";
46
- import { RecordingFileNaviComponent } from './speechrecorder/session/recordingfile/recording-file-navi.component';
47
- import { RecordingFileMetaComponent } from "./speechrecorder/session/recordingfile/recording-file-meta.component";
48
- import { MatSelectModule } from "@angular/material/select";
49
- import { MatInputModule } from "@angular/material/input";
50
- import { MatSnackBarModule } from "@angular/material/snack-bar";
51
- import { AudioRecorder, AudioRecorderComponent } from "./speechrecorder/session/audiorecorder";
52
- import { RecordingList } from "./speechrecorder/session/recording_list";
53
- import { RecorderCombiPane } from "./speechrecorder/session/recorder_combi_pane";
54
- import { MatMenuModule } from "@angular/material/menu";
55
- import { IntersectionObserverDirective } from "./ui/intersection-observer.directive";
56
- import * as i0 from "@angular/core";
57
- import * as i1 from "@angular/router";
58
- export const SPR_ROUTES = [
59
- { path: 'spr/session/:id', component: SpeechrecorderngComponent },
60
- { path: 'recorder/session/:id', component: AudioRecorderComponent },
61
- { path: 'recorder', component: AudioRecorderComponent },
62
- { path: 'spr/db/project/:project/session/:sessionId/recordingfile/_view/:recordingFileId', component: RecordingFileViewComponent },
63
- { path: 'spr/db/project/:project/session/:sessionId/recordingfile/_edit/:recordingFileId', component: RecordingFileUI },
64
- { path: 'spr/db/project/:project/session/:sessionId/recordingfile/_view', component: RecordingFileViewComponent },
65
- { path: 'spr/db/project/:project/session/:sessionId/recordingfile/_edit', component: RecordingFileUI },
66
- { path: 'spr/db/project/:project/session/:sessionId/recordingfile/:recordingFileId', component: RecordingFileUI },
67
- { path: 'spr/db/project/:project/session/:sessionId/recordingfile', component: RecordingFileUI },
68
- { path: 'spr/db/recordingfile/_view/:recordingFileId', component: RecordingFileViewComponent },
69
- { path: 'spr/db/recordingfile/_edit/:recordingFileId', component: RecordingFileUI },
70
- { path: 'spr/db/recordingfile/_view/', component: RecordingFileViewComponent },
71
- { path: 'spr/db/recordingfile/_view', component: RecordingFileViewComponent },
72
- { path: 'spr/db/recordingfile/_edit', component: RecordingFileUI },
73
- { path: 'spr/db/recordingfile/:recordingFileId', component: RecordingFileUI },
74
- { path: 'spr/db/recordingfile', component: RecordingFileUI },
75
- { path: 'spr', component: SpeechrecorderngComponent }
76
- ];
77
- export class SpeechrecorderngModule {
78
- static forRoot(config) {
79
- return {
80
- ngModule: SpeechrecorderngModule,
81
- providers: [
82
- { provide: SPEECHRECORDER_CONFIG, useValue: config }
83
- ]
84
- };
85
- }
86
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SpeechrecorderngModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
87
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.12", ngImport: i0, type: SpeechrecorderngModule, declarations: [AudioSignal, Sonagram, ScrollPaneHorizontal, AudioClipUIContainer, AudioDisplayScrollPane, AudioDisplay, AudioDisplayPlayer, AudioDisplayControl, LevelBar, Progress, SimpleTrafficLight, Recinstructions, Prompter, PromptContainer, PromptingContainer, Prompting, StatusDisplay,
88
- ProgressDisplay, RecordingItemDisplay, RecordingItemControls, UploadStatus, TransportPanel, WakeLockIndicator, ReadyStateIndicator, ControlPanel, WarningBar, AudioRecorder, SessionManager, MessageDialog, SessionFinishedDialog, SpeechrecorderngComponent, AudioRecorderComponent, RecordingFileViewComponent, RecordingFileUI, ScrollIntoViewDirective, RecordingFileNaviComponent, RecordingFileMetaComponent, RecordingList, RecorderCombiPane, AudioRecorder], imports: [i1.RouterModule, CommonModule, MatIconModule, MatButtonModule, MatDialogModule, MatProgressBarModule, MatProgressSpinnerModule, MatTooltipModule, MatCheckboxModule, MatCardModule, MatDividerModule, MatGridListModule, MatTableModule, MatInputModule, MatSelectModule, MatSnackBarModule, MatMenuModule, IntersectionObserverDirective], exports: [MessageDialog, SpeechrecorderngComponent, ScrollPaneHorizontal, AudioClipUIContainer, AudioDisplayScrollPane, AudioDisplay, AudioDisplayPlayer, AudioDisplayControl, LevelBar, AudioRecorder] }); }
89
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SpeechrecorderngModule, providers: [SessionService, ProjectService, ScriptService, RecordingService, RecordingFileService, SpeechRecorderUploader, provideHttpClient(withInterceptorsFromDi())], imports: [RouterModule.forChild(SPR_ROUTES), CommonModule, MatIconModule, MatButtonModule, MatDialogModule, MatProgressBarModule, MatProgressSpinnerModule, MatTooltipModule, MatCheckboxModule, MatCardModule, MatDividerModule, MatGridListModule, MatTableModule, MatInputModule, MatSelectModule, MatSnackBarModule, MatMenuModule] }); }
90
- }
91
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SpeechrecorderngModule, decorators: [{
92
- type: NgModule,
93
- args: [{ declarations: [AudioSignal, Sonagram, ScrollPaneHorizontal, AudioClipUIContainer, AudioDisplayScrollPane, AudioDisplay, AudioDisplayPlayer, AudioDisplayControl, LevelBar, Progress, SimpleTrafficLight, Recinstructions, Prompter, PromptContainer, PromptingContainer, Prompting, StatusDisplay,
94
- ProgressDisplay, RecordingItemDisplay, RecordingItemControls, UploadStatus, TransportPanel, WakeLockIndicator, ReadyStateIndicator, ControlPanel, WarningBar, AudioRecorder, SessionManager, MessageDialog, SessionFinishedDialog, SpeechrecorderngComponent, AudioRecorderComponent, RecordingFileViewComponent, RecordingFileUI, ScrollIntoViewDirective, RecordingFileNaviComponent, RecordingFileMetaComponent, RecordingList, RecorderCombiPane, AudioRecorder],
95
- exports: [MessageDialog, SpeechrecorderngComponent, ScrollPaneHorizontal, AudioClipUIContainer, AudioDisplayScrollPane, AudioDisplay, AudioDisplayPlayer, AudioDisplayControl, LevelBar, AudioRecorder], imports: [RouterModule.forChild(SPR_ROUTES), CommonModule, MatIconModule, MatButtonModule, MatDialogModule, MatProgressBarModule, MatProgressSpinnerModule, MatTooltipModule, MatCheckboxModule, MatCardModule, MatDividerModule, MatGridListModule, MatTableModule, MatInputModule, MatSelectModule, MatSnackBarModule, MatMenuModule, IntersectionObserverDirective], providers: [SessionService, ProjectService, ScriptService, RecordingService, RecordingFileService, SpeechRecorderUploader, provideHttpClient(withInterceptorsFromDi())] }]
96
- }] });
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlZWNocmVjb3JkZXJuZy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvc3BlZWNocmVjb3JkZXJuZy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFzQixRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDNUQsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDdkUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sd0RBQXdELENBQUM7QUFFMUYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzRCxPQUFPLEVBQ0wsZUFBZSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxHQUMxRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUN2RSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDaEUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDOUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFF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QUUsMEJBQTBCLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLGFBQWEsQ0FBQztvQkFDeGMsT0FBTyxFQUFFLENBQUMsYUFBYSxFQUFFLHlCQUF5QixFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUFFLHNCQUFzQixFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsYUFBYSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsb0JBQW9CLEVBQUUsd0JBQXdCLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSw2QkFBNkIsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLGNBQWMsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLHNCQUFzQixFQUFFLGlCQUFpQixDQUFDLHNCQUFzQixFQUFFLENBQUMsQ0FBQyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7U3BlZWNocmVjb3JkZXJuZ0NvbXBvbmVudH0gZnJvbSBcIi4vc3BlZWNocmVjb3JkZXJuZy5jb21wb25lbnRcIjtcclxuaW1wb3J0IHtTaW1wbGVUcmFmZmljTGlnaHR9IGZyb20gXCIuL3NwZWVjaHJlY29yZGVyL3N0YXJ0c3RvcHNpZ25hbC91aS9zaW1wbGV0cmFmZmljbGlnaHRcIjtcclxuXHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7UHJvZ3Jlc3N9IGZyb20gXCIuL3NwZWVjaHJlY29yZGVyL3Nlc3Npb24vcHJvZ3Jlc3NcIjtcclxuaW1wb3J0IHtcclxuICBQcm9tcHRDb250YWluZXIsIFByb21wdGVyLCBQcm9tcHRpbmcsIFByb21wdGluZ0NvbnRhaW5lciwgUmVjaW5zdHJ1Y3Rpb25zLFxyXG59IGZyb20gXCIuL3NwZWVjaHJlY29yZGVyL3Nlc3Npb24vcHJvbXB0aW5nXCI7XHJcbmltcG9ydCB7U2Vzc2lvbk1hbmFnZXJ9IGZyb20gXCIuL3NwZWVjaHJlY29yZGVyL3Nlc3Npb24vc2Vzc2lvbm1hbmFnZXJcIjtcclxuaW1wb3J0IHtXYXJuaW5nQmFyfSBmcm9tIFwiLi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL3dhcm5pbmdfYmFyXCI7XHJcbmltcG9ydCB7U2Nyb2xsSW50b1ZpZXdEaXJlY3RpdmV9IGZyb20gXCIuL3V0aWxzL3Njcm9sbEludG9WaWV3VG9Cb3R0b21cIjtcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2J1dHRvblwiO1xyXG5pbXBvcnQgeyBNYXREaWFsb2dNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvblwiO1xyXG5pbXBvcnQgeyBNYXRQcm9ncmVzc0Jhck1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1iYXJcIjtcclxuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXJcIjtcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwXCI7XHJcbmltcG9ydCB7IHByb3ZpZGVIdHRwQ2xpZW50LCB3aXRoSW50ZXJjZXB0b3JzRnJvbURpIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7U2Vzc2lvblNlcnZpY2V9IGZyb20gXCIuL3NwZWVjaHJlY29yZGVyL3Nlc3Npb24vc2Vzc2lvbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7U2NyaXB0U2VydmljZX0gZnJvbSBcIi4vc3BlZWNocmVjb3JkZXIvc2NyaXB0L3NjcmlwdC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7Um91dGVyTW9kdWxlLCBSb3V0ZXN9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHtTcGVlY2hSZWNvcmRlckNvbmZpZywgU1BFRUNIUkVDT1JERVJfQ09ORklHfSBmcm9tIFwiLi9zcHIuY29uZmlnXCI7XHJcbmltcG9ydCB7U3BlZWNoUmVjb3JkZXJVcGxvYWRlcn0gZnJvbSBcIi4vc3BlZWNocmVjb3JkZXIvc3BydXBsb2FkZXJcIjtcclxuaW1wb3J0IHtQcm9qZWN0U2VydmljZX0gZnJvbSBcIi4vc3BlZWNocmVjb3JkZXIvcHJvamVjdC9wcm9qZWN0LnNlcnZpY2VcIjtcclxuaW1wb3J0IHtcclxuICBDb250cm9sUGFuZWwsXHJcbiAgUHJvZ3Jlc3NEaXNwbGF5LFxyXG4gIFJlYWR5U3RhdGVJbmRpY2F0b3IsXHJcbiAgU3RhdHVzRGlzcGxheSxcclxuICBUcmFuc3BvcnRQYW5lbCxcclxuICBVcGxvYWRTdGF0dXMsIFdha2VMb2NrSW5kaWNhdG9yXHJcbn0gZnJvbSBcIi4vc3BlZWNocmVjb3JkZXIvc2Vzc2lvbi9jb250cm9scGFuZWxcIjtcclxuLy9pbXBvcnQge0ZsZXhMYXlvdXRNb2R1bGV9IGZyb20gXCJAYW5ndWxhci9mbGV4LWxheW91dFwiO1xyXG5pbXBvcnQge1Nlc3Npb25GaW5pc2hlZERpYWxvZ30gZnJvbSBcIi4vc3BlZWNocmVjb3JkZXIvc2Vzc2lvbi9zZXNzaW9uX2ZpbmlzaGVkX2RpYWxvZ1wiO1xyXG5pbXBvcnQge01lc3NhZ2VEaWFsb2d9IGZyb20gXCIuL3VpL21lc3NhZ2VfZGlhbG9nXCI7XHJcbmltcG9ydCB7UmVjb3JkaW5nSXRlbUNvbnRyb2xzLCBSZWNvcmRpbmdJdGVtRGlzcGxheX0gZnJvbSBcIi4vdWkvcmVjb3JkaW5naXRlbV9kaXNwbGF5XCI7XHJcbmltcG9ydCB7UmVjb3JkaW5nU2VydmljZX0gZnJvbSBcIi4vc3BlZWNocmVjb3JkZXIvcmVjb3JkaW5ncy9yZWNvcmRpbmdzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtTY3JvbGxQYW5lSG9yaXpvbnRhbH0gZnJvbSBcIi4vYXVkaW8vdWkvc2Nyb2xsX3BhbmVfaG9yaXpvbnRhbFwiO1xyXG5pbXBvcnQge0F1ZGlvQ2xpcFVJQ29udGFpbmVyfSBmcm9tIFwiLi9hdWRpby91aS9jb250YWluZXJcIjtcclxuaW1wb3J0IHtBdWRpb1NpZ25hbH0gZnJvbSBcIi4vYXVkaW8vdWkvYXVkaW9zaWduYWxcIjtcclxuaW1wb3J0IHtTb25hZ3JhbX0gZnJvbSBcIi4vYXVkaW8vdWkvc29uYWdyYW1cIjtcclxuaW1wb3J0IHtBdWRpb0Rpc3BsYXlQbGF5ZXJ9IGZyb20gXCIuL2F1ZGlvL2F1ZGlvX3BsYXllclwiO1xyXG5pbXBvcnQge0F1ZGlvRGlzcGxheX0gZnJvbSBcIi4vYXVkaW8vYXVkaW9fZGlzcGxheVwiO1xyXG5pbXBvcnQge0F1ZGlvRGlzcGxheUNvbnRyb2x9IGZyb20gXCIuL2F1ZGlvL3VpL2F1ZGlvX2Rpc3BsYXlfY29udHJvbFwiO1xyXG5pbXBvcnQge0xldmVsQmFyfSBmcm9tIFwiLi9hdWRpby91aS9saXZlbGV2ZWxcIjtcclxuaW1wb3J0IHtBdWRpb0Rpc3BsYXlTY3JvbGxQYW5lfSBmcm9tIFwiLi9hdWRpby91aS9hdWRpb19kaXNwbGF5X3Njcm9sbF9wYW5lXCI7XHJcbmltcG9ydCB7TWF0Q2hlY2tib3hNb2R1bGV9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveFwiO1xyXG5pbXBvcnQge01hdENhcmRNb2R1bGV9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9jYXJkXCI7XHJcbmltcG9ydCB7TWF0RGl2aWRlck1vZHVsZX0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpdmlkZXJcIjtcclxuaW1wb3J0IHtNYXRHcmlkTGlzdE1vZHVsZX0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2dyaWQtbGlzdFwiO1xyXG5pbXBvcnQge1JlY29yZGluZ0ZpbGVVSX0gZnJvbSBcIi4vc3BlZWNocmVjb3JkZXIvc2Vzc2lvbi9yZWNvcmRpbmdmaWxlL3JlY29yZGluZy1maWxlLXUtaS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHtSZWNvcmRpbmdGaWxlU2VydmljZX0gZnJvbSBcIi4vc3BlZWNocmVjb3JkZXIvc2Vzc2lvbi9yZWNvcmRpbmdmaWxlL3JlY29yZGluZ2ZpbGUtc2VydmljZVwiO1xyXG5pbXBvcnQge1JlY29yZGluZ0ZpbGVWaWV3Q29tcG9uZW50fSBmcm9tIFwiLi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL3JlY29yZGluZ2ZpbGUvcmVjb3JkaW5nLWZpbGUtdmlldy5jb21wb25lbnRcIjtcclxuaW1wb3J0IHtNYXRUYWJsZU1vZHVsZX0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3RhYmxlXCI7XHJcbmltcG9ydCB7IFJlY29yZGluZ0ZpbGVOYXZpQ29tcG9uZW50IH0gZnJvbSAnLi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL3JlY29yZGluZ2ZpbGUvcmVjb3JkaW5nLWZpbGUtbmF2aS5jb21wb25lbnQnO1xyXG5pbXBvcnQge1JlY29yZGluZ0ZpbGVNZXRhQ29tcG9uZW50fSBmcm9tIFwiLi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL3JlY29yZGluZ2ZpbGUvcmVjb3JkaW5nLWZpbGUtbWV0YS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHtNYXRTZWxlY3RNb2R1bGV9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3RcIjtcclxuaW1wb3J0IHtNYXRJbnB1dE1vZHVsZX0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2lucHV0XCI7XHJcbmltcG9ydCB7TWF0U25hY2tCYXJNb2R1bGV9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXJcIjtcclxuaW1wb3J0IHtBdWRpb1JlY29yZGVyLCBBdWRpb1JlY29yZGVyQ29tcG9uZW50fSBmcm9tIFwiLi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL2F1ZGlvcmVjb3JkZXJcIjtcclxuaW1wb3J0IHtSZWNvcmRpbmdMaXN0fSBmcm9tIFwiLi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL3JlY29yZGluZ19saXN0XCI7XHJcbmltcG9ydCB7UmVjb3JkZXJDb21iaVBhbmV9IGZyb20gXCIuL3NwZWVjaHJlY29yZGVyL3Nlc3Npb24vcmVjb3JkZXJfY29tYmlfcGFuZVwiO1xyXG5pbXBvcnQge01hdE1lbnVNb2R1bGV9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9tZW51XCI7XHJcbmltcG9ydCB7SW50ZXJzZWN0aW9uT2JzZXJ2ZXJEaXJlY3RpdmV9IGZyb20gXCIuL3VpL2ludGVyc2VjdGlvbi1vYnNlcnZlci5kaXJlY3RpdmVcIjtcclxuXHJcblxyXG5cclxuXHJcbmV4cG9ydCBjb25zdCBTUFJfUk9VVEVTOiBSb3V0ZXMgPSBbXHJcbiAgeyBwYXRoOiAnc3ByL3Nlc3Npb24vOmlkJywgICAgICBjb21wb25lbnQ6IFNwZWVjaHJlY29yZGVybmdDb21wb25lbnQgfSxcclxuICB7IHBhdGg6ICdyZWNvcmRlci9zZXNzaW9uLzppZCcsICAgICAgY29tcG9uZW50OiBBdWRpb1JlY29yZGVyQ29tcG9uZW50fSxcclxuICB7IHBhdGg6ICdyZWNvcmRlcicsICAgICAgY29tcG9uZW50OiBBdWRpb1JlY29yZGVyQ29tcG9uZW50fSxcclxuICB7IHBhdGg6ICdzcHIvZGIvcHJvamVjdC86cHJvamVjdC9zZXNzaW9uLzpzZXNzaW9uSWQvcmVjb3JkaW5nZmlsZS9fdmlldy86cmVjb3JkaW5nRmlsZUlkJywgICAgICBjb21wb25lbnQ6IFJlY29yZGluZ0ZpbGVWaWV3Q29tcG9uZW50IH0sXHJcbiAgeyBwYXRoOiAnc3ByL2RiL3Byb2plY3QvOnByb2plY3Qvc2Vzc2lvbi86c2Vzc2lvbklkL3JlY29yZGluZ2ZpbGUvX2VkaXQvOnJlY29yZGluZ0ZpbGVJZCcsICAgICAgY29tcG9uZW50OiBSZWNvcmRpbmdGaWxlVUkgfSxcclxuICB7IHBhdGg6ICdzcHIvZGIvcHJvamVjdC86cHJvamVjdC9zZXNzaW9uLzpzZXNzaW9uSWQvcmVjb3JkaW5nZmlsZS9fdmlldycsICAgICAgY29tcG9uZW50OiBSZWNvcmRpbmdGaWxlVmlld0NvbXBvbmVudCB9LFxyXG4gIHsgcGF0aDogJ3Nwci9kYi9wcm9qZWN0Lzpwcm9qZWN0L3Nlc3Npb24vOnNlc3Npb25JZC9yZWNvcmRpbmdmaWxlL19lZGl0JywgICAgICBjb21wb25lbnQ6IFJlY29yZGluZ0ZpbGVVSSB9LFxyXG4gIHsgcGF0aDogJ3Nwci9kYi9wcm9qZWN0Lzpwcm9qZWN0L3Nlc3Npb24vOnNlc3Npb25JZC9yZWNvcmRpbmdmaWxlLzpyZWNvcmRpbmdGaWxlSWQnLCAgICAgIGNvbXBvbmVudDogUmVjb3JkaW5nRmlsZVVJIH0sXHJcbiAgeyBwYXRoOiAnc3ByL2RiL3Byb2plY3QvOnByb2plY3Qvc2Vzc2lvbi86c2Vzc2lvbklkL3JlY29yZGluZ2ZpbGUnLCAgICAgIGNvbXBvbmVudDogUmVjb3JkaW5nRmlsZVVJIH0sXHJcbiAgeyBwYXRoOiAnc3ByL2RiL3JlY29yZGluZ2ZpbGUvX3ZpZXcvOnJlY29yZGluZ0ZpbGVJZCcsICAgICAgY29tcG9uZW50OiBSZWNvcmRpbmdGaWxlVmlld0NvbXBvbmVudCB9LFxyXG4gIHsgcGF0aDogJ3Nwci9kYi9yZWNvcmRpbmdmaWxlL19lZGl0LzpyZWNvcmRpbmdGaWxlSWQnLCAgICAgIGNvbXBvbmVudDogUmVjb3JkaW5nRmlsZVVJIH0sXHJcbiAgeyBwYXRoOiAnc3ByL2RiL3JlY29yZGluZ2ZpbGUvX3ZpZXcvJywgICAgICBjb21wb25lbnQ6IFJlY29yZGluZ0ZpbGVWaWV3Q29tcG9uZW50IH0sXHJcbiAgeyBwYXRoOiAnc3ByL2RiL3JlY29yZGluZ2ZpbGUvX3ZpZXcnLCAgICAgIGNvbXBvbmVudDogUmVjb3JkaW5nRmlsZVZpZXdDb21wb25lbnQgfSxcclxuICB7IHBhdGg6ICdzcHIvZGIvcmVjb3JkaW5nZmlsZS9fZWRpdCcsICAgICAgY29tcG9uZW50OiBSZWNvcmRpbmdGaWxlVUkgfSxcclxuICB7IHBhdGg6ICdzcHIvZGIvcmVjb3JkaW5nZmlsZS86cmVjb3JkaW5nRmlsZUlkJywgICAgICBjb21wb25lbnQ6IFJlY29yZGluZ0ZpbGVVSSB9LFxyXG4gIHsgcGF0aDogJ3Nwci9kYi9yZWNvcmRpbmdmaWxlJywgICAgICBjb21wb25lbnQ6IFJlY29yZGluZ0ZpbGVVSSB9LFxyXG4gIHsgcGF0aDogJ3NwcicsICAgICAgY29tcG9uZW50OiBTcGVlY2hyZWNvcmRlcm5nQ29tcG9uZW50IH1cclxuXTtcclxuXHJcbkBOZ01vZHVsZSh7IGRlY2xhcmF0aW9uczogW0F1ZGlvU2lnbmFsLCBTb25hZ3JhbSwgU2Nyb2xsUGFuZUhvcml6b250YWwsIEF1ZGlvQ2xpcFVJQ29udGFpbmVyLCBBdWRpb0Rpc3BsYXlTY3JvbGxQYW5lLCBBdWRpb0Rpc3BsYXksIEF1ZGlvRGlzcGxheVBsYXllciwgQXVkaW9EaXNwbGF5Q29udHJvbCwgTGV2ZWxCYXIsIFByb2dyZXNzLCBTaW1wbGVUcmFmZmljTGlnaHQsIFJlY2luc3RydWN0aW9ucywgUHJvbXB0ZXIsIFByb21wdENvbnRhaW5lciwgUHJvbXB0aW5nQ29udGFpbmVyLCBQcm9tcHRpbmcsIFN0YXR1c0Rpc3BsYXksXHJcbiAgICAgICAgUHJvZ3Jlc3NEaXNwbGF5LCBSZWNvcmRpbmdJdGVtRGlzcGxheSwgUmVjb3JkaW5nSXRlbUNvbnRyb2xzLCBVcGxvYWRTdGF0dXMsIFRyYW5zcG9ydFBhbmVsLCBXYWtlTG9ja0luZGljYXRvciwgUmVhZHlTdGF0ZUluZGljYXRvciwgQ29udHJvbFBhbmVsLCBXYXJuaW5nQmFyLCBBdWRpb1JlY29yZGVyLCBTZXNzaW9uTWFuYWdlciwgTWVzc2FnZURpYWxvZywgU2Vzc2lvbkZpbmlzaGVkRGlhbG9nLCBTcGVlY2hyZWNvcmRlcm5nQ29tcG9uZW50LCBBdWRpb1JlY29yZGVyQ29tcG9uZW50LCBSZWNvcmRpbmdGaWxlVmlld0NvbXBvbmVudCwgUmVjb3JkaW5nRmlsZVVJLCBTY3JvbGxJbnRvVmlld0RpcmVjdGl2ZSwgUmVjb3JkaW5nRmlsZU5hdmlDb21wb25lbnQsIFJlY29yZGluZ0ZpbGVNZXRhQ29tcG9uZW50LCBSZWNvcmRpbmdMaXN0LCBSZWNvcmRlckNvbWJpUGFuZSwgQXVkaW9SZWNvcmRlcl0sXHJcbiAgICBleHBvcnRzOiBbTWVzc2FnZURpYWxvZywgU3BlZWNocmVjb3JkZXJuZ0NvbXBvbmVudCwgU2Nyb2xsUGFuZUhvcml6b250YWwsIEF1ZGlvQ2xpcFVJQ29udGFpbmVyLCBBdWRpb0Rpc3BsYXlTY3JvbGxQYW5lLCBBdWRpb0Rpc3BsYXksIEF1ZGlvRGlzcGxheVBsYXllciwgQXVkaW9EaXNwbGF5Q29udHJvbCwgTGV2ZWxCYXIsIEF1ZGlvUmVjb3JkZXJdLCBpbXBvcnRzOiBbUm91dGVyTW9kdWxlLmZvckNoaWxkKFNQUl9ST1VURVMpLCBDb21tb25Nb2R1bGUsIE1hdEljb25Nb2R1bGUsIE1hdEJ1dHRvbk1vZHVsZSwgTWF0RGlhbG9nTW9kdWxlLCBNYXRQcm9ncmVzc0Jhck1vZHVsZSwgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlLCBNYXRUb29sdGlwTW9kdWxlLCBNYXRDaGVja2JveE1vZHVsZSwgTWF0Q2FyZE1vZHVsZSwgTWF0RGl2aWRlck1vZHVsZSwgTWF0R3JpZExpc3RNb2R1bGUsIE1hdFRhYmxlTW9kdWxlLCBNYXRJbnB1dE1vZHVsZSwgTWF0U2VsZWN0TW9kdWxlLCBNYXRTbmFja0Jhck1vZHVsZSwgTWF0TWVudU1vZHVsZSwgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJEaXJlY3RpdmVdLCBwcm92aWRlcnM6IFtTZXNzaW9uU2VydmljZSwgUHJvamVjdFNlcnZpY2UsIFNjcmlwdFNlcnZpY2UsIFJlY29yZGluZ1NlcnZpY2UsIFJlY29yZGluZ0ZpbGVTZXJ2aWNlLCBTcGVlY2hSZWNvcmRlclVwbG9hZGVyLCBwcm92aWRlSHR0cENsaWVudCh3aXRoSW50ZXJjZXB0b3JzRnJvbURpKCkpXSB9KVxyXG5leHBvcnQgY2xhc3MgU3BlZWNocmVjb3JkZXJuZ01vZHVsZXtcclxuXHJcbiAgc3RhdGljIGZvclJvb3QoY29uZmlnOiBTcGVlY2hSZWNvcmRlckNvbmZpZyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8U3BlZWNocmVjb3JkZXJuZ01vZHVsZT4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbmdNb2R1bGU6IFNwZWVjaHJlY29yZGVybmdNb2R1bGUsXHJcbiAgICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHtwcm92aWRlOiBTUEVFQ0hSRUNPUkRFUl9DT05GSUcsIHVzZVZhbHVlOiBjb25maWcgfVxyXG4gICAgICBdXHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,27 +0,0 @@
1
- import { Injectable, InjectionToken } from "@angular/core";
2
- import * as i0 from "@angular/core";
3
- export const SPEECHRECORDER_CONFIG = new InjectionToken('speechrecorder.config');
4
- export var ApiType;
5
- (function (ApiType) {
6
- ApiType[ApiType["NORMAL"] = 0] = "NORMAL";
7
- ApiType[ApiType["FILES"] = 1] = "FILES";
8
- })(ApiType || (ApiType = {}));
9
- export class SpeechRecorderConfig {
10
- constructor() {
11
- this.apiEndPoint = null;
12
- this.apiType = null;
13
- this.apiVersion = 1;
14
- this.withCredentials = false;
15
- this.enableDownloadRecordings = false;
16
- this.enableUploadRecordings = true;
17
- this.apiEndPoint = null;
18
- this.apiType = null;
19
- this.withCredentials = false;
20
- }
21
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SpeechRecorderConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
22
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SpeechRecorderConfig }); }
23
- }
24
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SpeechRecorderConfig, decorators: [{
25
- type: Injectable
26
- }], ctorParameters: () => [] });
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ByLmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9zcHIuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFDOztBQUV6RCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLGNBQWMsQ0FBdUIsdUJBQXVCLENBQUMsQ0FBQztBQUd2RyxNQUFNLENBQU4sSUFBWSxPQUVYO0FBRkQsV0FBWSxPQUFPO0lBQ2pCLHlDQUFNLENBQUE7SUFBQyx1Q0FBSyxDQUFBO0FBQ2QsQ0FBQyxFQUZXLE9BQU8sS0FBUCxPQUFPLFFBRWxCO0FBRUQsTUFBTSxPQUFPLG9CQUFvQjtJQU8vQjtRQU5BLGdCQUFXLEdBQWlCLElBQUksQ0FBQztRQUNqQyxZQUFPLEdBQWtCLElBQUksQ0FBQztRQUM5QixlQUFVLEdBQVMsQ0FBQyxDQUFDO1FBQ3JCLG9CQUFlLEdBQVcsS0FBSyxDQUFDO1FBQ2hDLDZCQUF3QixHQUFXLEtBQUssQ0FBQztRQUN6QywyQkFBc0IsR0FBVyxJQUFJLENBQUM7UUFFcEMsSUFBSSxDQUFDLFdBQVcsR0FBQyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBQyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLGVBQWUsR0FBQyxLQUFLLENBQUM7SUFDN0IsQ0FBQzsrR0FYVSxvQkFBb0I7bUhBQXBCLG9CQUFvQjs7NEZBQXBCLG9CQUFvQjtrQkFEaEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5leHBvcnQgY29uc3QgU1BFRUNIUkVDT1JERVJfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPFNwZWVjaFJlY29yZGVyQ29uZmlnPignc3BlZWNocmVjb3JkZXIuY29uZmlnJyk7XHJcblxyXG5cclxuZXhwb3J0IGVudW0gQXBpVHlwZSB7XHJcbiAgTk9STUFMLEZJTEVTXHJcbn1cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgU3BlZWNoUmVjb3JkZXJDb25maWd7XHJcbiAgYXBpRW5kUG9pbnQ/OiBzdHJpbmcgfCBudWxsPW51bGw7XHJcbiAgYXBpVHlwZT86IEFwaVR5cGUgfCBudWxsPW51bGw7XHJcbiAgYXBpVmVyc2lvbjogbnVtYmVyPTE7XHJcbiAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbj1mYWxzZTtcclxuICBlbmFibGVEb3dubG9hZFJlY29yZGluZ3M/OiBib29sZWFuPWZhbHNlO1xyXG4gIGVuYWJsZVVwbG9hZFJlY29yZGluZ3M/OiBib29sZWFuPXRydWU7XHJcbiAgY29uc3RydWN0b3IoKXtcclxuICAgIHRoaXMuYXBpRW5kUG9pbnQ9bnVsbDtcclxuICAgIHRoaXMuYXBpVHlwZT1udWxsO1xyXG4gICAgdGhpcy53aXRoQ3JlZGVudGlhbHM9ZmFsc2U7XHJcbiAgfVxyXG59XHJcblxyXG4iXX0=
@@ -1,2 +0,0 @@
1
- export const VERSION = '3.10.13';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ByLm1vZHVsZS52ZXJzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3Nwci5tb2R1bGUudmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUMsU0FBUyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFZFUlNJT049JzMuMTAuMTMnIl19
@@ -1,38 +0,0 @@
1
- import { Position } from "../math/2d/geometry";
2
- import { Directive } from "@angular/core";
3
- import * as i0 from "@angular/core";
4
- export class CanvasLayerComponent {
5
- constructor() {
6
- this.bounds = null;
7
- // TODO make clear that first element is background canvas
8
- this.canvasLayers = new Array();
9
- }
10
- toXViewPortPixelPosition(virtualX) {
11
- let pixelPos = virtualX;
12
- if (this.bounds) {
13
- pixelPos = Math.round(virtualX - this.bounds.position.left);
14
- }
15
- return pixelPos;
16
- }
17
- toXVirtualPixelPosition(viewPortX) {
18
- let pixelPos = viewPortX;
19
- if (this.bounds) {
20
- pixelPos = Math.round(viewPortX + this.bounds.position.left);
21
- }
22
- return pixelPos;
23
- }
24
- toViewPortPosition(virtualPos) {
25
- if (this.bounds) {
26
- return new Position(virtualPos.left - this.bounds.position.left, virtualPos.top - this.bounds.position.top);
27
- }
28
- else {
29
- return virtualPos;
30
- }
31
- }
32
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: CanvasLayerComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
33
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.12", type: CanvasLayerComponent, ngImport: i0 }); }
34
- }
35
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: CanvasLayerComponent, decorators: [{
36
- type: Directive
37
- }], ctorParameters: () => [] });
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudmFzX2xheWVyX2NvbXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvdWkvY2FudmFzX2xheWVyX2NvbXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBc0IsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUcxQyxNQUFNLE9BQWdCLG9CQUFvQjtJQU14QztRQUpVLFdBQU0sR0FBZ0IsSUFBSSxDQUFDO1FBTW5DLDBEQUEwRDtRQUMxRCxJQUFJLENBQUMsWUFBWSxHQUFDLElBQUksS0FBSyxFQUFxQixDQUFDO0lBQ25ELENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxRQUFlO1FBQ3RDLElBQUksUUFBUSxHQUFDLFFBQVEsQ0FBQztRQUNwQixJQUFHLElBQUksQ0FBQyxNQUFNLEVBQUMsQ0FBQztZQUNaLFFBQVEsR0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVELHVCQUF1QixDQUFDLFNBQWdCO1FBQ3RDLElBQUksUUFBUSxHQUFDLFNBQVMsQ0FBQztRQUN2QixJQUFHLElBQUksQ0FBQyxNQUFNLEVBQUMsQ0FBQztZQUNkLFFBQVEsR0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzRCxDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELGtCQUFrQixDQUFDLFVBQW1CO1FBRXBDLElBQUcsSUFBSSxDQUFDLE1BQU0sRUFBQyxDQUFDO1lBQ2QsT0FBTyxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksRUFBQyxVQUFVLENBQUMsR0FBRyxHQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pHLENBQUM7YUFBSSxDQUFDO1lBQ0osT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQztJQUNILENBQUM7K0dBbkNtQixvQkFBb0I7bUdBQXBCLG9CQUFvQjs7NEZBQXBCLG9CQUFvQjtrQkFEekMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UG9zaXRpb24sRGltZW5zaW9uLCBSZWN0YW5nbGV9IGZyb20gXCIuLi9tYXRoLzJkL2dlb21ldHJ5XCI7XHJcbmltcG9ydCB7IERpcmVjdGl2ZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENhbnZhc0xheWVyQ29tcG9uZW50e1xyXG5cclxuICBwcm90ZWN0ZWQgYm91bmRzOlJlY3RhbmdsZXxudWxsPW51bGw7XHJcbiAgcHJvdGVjdGVkIHZpcnR1YWxEaW1lbnNpb24hOkRpbWVuc2lvbjtcclxuICBwcm90ZWN0ZWQgY2FudmFzTGF5ZXJzOkFycmF5PEhUTUxDYW52YXNFbGVtZW50PjtcclxuXHJcbiAgY29uc3RydWN0b3IoKXtcclxuXHJcbiAgICAvLyBUT0RPIG1ha2UgY2xlYXIgdGhhdCBmaXJzdCBlbGVtZW50IGlzIGJhY2tncm91bmQgY2FudmFzXHJcbiAgICB0aGlzLmNhbnZhc0xheWVycz1uZXcgQXJyYXk8SFRNTENhbnZhc0VsZW1lbnQ+KCk7XHJcbiAgfVxyXG5cclxuICB0b1hWaWV3UG9ydFBpeGVsUG9zaXRpb24odmlydHVhbFg6bnVtYmVyKXtcclxuICAgIGxldCBwaXhlbFBvcz12aXJ0dWFsWDtcclxuICAgICAgaWYodGhpcy5ib3VuZHMpe1xyXG4gICAgICAgICAgcGl4ZWxQb3M9TWF0aC5yb3VuZCh2aXJ0dWFsWC10aGlzLmJvdW5kcy5wb3NpdGlvbi5sZWZ0KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcGl4ZWxQb3M7XHJcbiAgfVxyXG5cclxuICB0b1hWaXJ0dWFsUGl4ZWxQb3NpdGlvbih2aWV3UG9ydFg6bnVtYmVyKXtcclxuICAgIGxldCBwaXhlbFBvcz12aWV3UG9ydFg7XHJcbiAgICBpZih0aGlzLmJvdW5kcyl7XHJcbiAgICAgIHBpeGVsUG9zPU1hdGgucm91bmQodmlld1BvcnRYK3RoaXMuYm91bmRzLnBvc2l0aW9uLmxlZnQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBpeGVsUG9zO1xyXG4gIH1cclxuXHJcbiAgdG9WaWV3UG9ydFBvc2l0aW9uKHZpcnR1YWxQb3M6UG9zaXRpb24pOlBvc2l0aW9ue1xyXG5cclxuICAgIGlmKHRoaXMuYm91bmRzKXtcclxuICAgICAgcmV0dXJuIG5ldyBQb3NpdGlvbih2aXJ0dWFsUG9zLmxlZnQtdGhpcy5ib3VuZHMucG9zaXRpb24ubGVmdCx2aXJ0dWFsUG9zLnRvcC10aGlzLmJvdW5kcy5wb3NpdGlvbi50b3ApO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIHJldHVybiB2aXJ0dWFsUG9zO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG59XHJcbiJdfQ==
@@ -1,32 +0,0 @@
1
- import { Directive, Input } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class IntersectionObserverDirective {
4
- //private intersectionObserver:IntersectionObserver|null=null;
5
- constructor(elRef) {
6
- this.elRef = elRef;
7
- const ne = this.elRef.nativeElement;
8
- //ne.style.backgroundColor = 'yellow';
9
- }
10
- set updateObservation(elIntersection) {
11
- //console.debug("visi: "+elIntersection.selected);
12
- if (elIntersection.observe) {
13
- //this.elRef.nativeElement.scrollIntoView(false);
14
- elIntersection.observer.observe(this.elRef.nativeElement);
15
- }
16
- else {
17
- elIntersection.observer.unobserve(this.elRef.nativeElement);
18
- }
19
- }
20
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: IntersectionObserverDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
21
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.12", type: IntersectionObserverDirective, isStandalone: true, selector: "[updateObservation]", inputs: { updateObservation: "updateObservation" }, ngImport: i0 }); }
22
- }
23
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: IntersectionObserverDirective, decorators: [{
24
- type: Directive,
25
- args: [{
26
- selector: '[updateObservation]',
27
- standalone: true,
28
- }]
29
- }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { updateObservation: [{
30
- type: Input
31
- }] } });
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJzZWN0aW9uLW9ic2VydmVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi91aS9pbnRlcnNlY3Rpb24tb2JzZXJ2ZXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQWMsS0FBSyxFQUFDLE1BQU0sZUFBZSxDQUFDOztBQVczRCxNQUFNLE9BQU8sNkJBQTZCO0lBRXhDLDhEQUE4RDtJQUM5RCxZQUFvQixLQUFpQjtRQUFqQixVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQ25DLE1BQU0sRUFBRSxHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDO1FBQ2xDLHNDQUFzQztJQUV4QyxDQUFDO0lBRUQsSUFDSSxpQkFBaUIsQ0FBQyxjQUFrQztRQUN0RCxrREFBa0Q7UUFDbEQsSUFBRyxjQUFjLENBQUMsT0FBTyxFQUFDLENBQUM7WUFDekIsaURBQWlEO1lBQ2pELGNBQWMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDNUQsQ0FBQzthQUFJLENBQUM7WUFDSixjQUFjLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzlELENBQUM7SUFDSCxDQUFDOytHQWxCVSw2QkFBNkI7bUdBQTdCLDZCQUE2Qjs7NEZBQTdCLDZCQUE2QjtrQkFKekMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUscUJBQXFCO29CQUMvQixVQUFVLEVBQUUsSUFBSTtpQkFDakI7K0VBV0ssaUJBQWlCO3NCQURwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRWxlbWVudEludGVyc2VjdGlvbntcclxuICAgIG9ic2VydmVyOkludGVyc2VjdGlvbk9ic2VydmVyLFxyXG4gICAgb2JzZXJ2ZTpib29sZWFuXHJcbn1cclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW3VwZGF0ZU9ic2VydmF0aW9uXScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEludGVyc2VjdGlvbk9ic2VydmVyRGlyZWN0aXZlIHtcclxuXHJcbiAgLy9wcml2YXRlIGludGVyc2VjdGlvbk9ic2VydmVyOkludGVyc2VjdGlvbk9ic2VydmVyfG51bGw9bnVsbDtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsUmVmOiBFbGVtZW50UmVmKSB7XHJcbiAgICBjb25zdCBuZT10aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAvL25lLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICd5ZWxsb3cnO1xyXG5cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHVwZGF0ZU9ic2VydmF0aW9uKGVsSW50ZXJzZWN0aW9uOkVsZW1lbnRJbnRlcnNlY3Rpb24pe1xyXG4gICAgLy9jb25zb2xlLmRlYnVnKFwidmlzaTogXCIrZWxJbnRlcnNlY3Rpb24uc2VsZWN0ZWQpO1xyXG4gICAgaWYoZWxJbnRlcnNlY3Rpb24ub2JzZXJ2ZSl7XHJcbiAgICAgIC8vdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KGZhbHNlKTtcclxuICAgICAgZWxJbnRlcnNlY3Rpb24ub2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIGVsSW50ZXJzZWN0aW9uLm9ic2VydmVyLnVub2JzZXJ2ZSh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIl19
@@ -1,51 +0,0 @@
1
- import { Component, Inject } from "@angular/core";
2
- import { MAT_DIALOG_DATA } from "@angular/material/dialog";
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/material/dialog";
5
- import * as i2 from "@angular/common";
6
- import * as i3 from "@angular/material/icon";
7
- import * as i4 from "@angular/material/button";
8
- export class MessageDialog {
9
- constructor(dialogRef, data) {
10
- this.dialogRef = dialogRef;
11
- this.data = data;
12
- }
13
- closeDialog() {
14
- this.dialogRef.close();
15
- }
16
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: MessageDialog, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
17
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: MessageDialog, selector: "msg-dialog", ngImport: i0, template: `<h1 mat-dialog-title><mat-icon *ngIf="data.type==='error'" [style.color]="'red'">error</mat-icon>
18
- <mat-icon *ngIf="data.type==='warning'" [style.color]="'yellow'">warning</mat-icon>{{data.title}}</h1>
19
- <div mat-dialog-content>
20
-
21
- <p>{{data.msg}}</p>
22
- <p>{{data.advice}}</p>
23
-
24
- </div>
25
- <div mat-dialog-actions>
26
- <button mat-button (click)="closeDialog()">OK</button>
27
- </div>
28
- `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }] }); }
29
- }
30
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: MessageDialog, decorators: [{
31
- type: Component,
32
- args: [{
33
- selector: 'msg-dialog',
34
- template: `<h1 mat-dialog-title><mat-icon *ngIf="data.type==='error'" [style.color]="'red'">error</mat-icon>
35
- <mat-icon *ngIf="data.type==='warning'" [style.color]="'yellow'">warning</mat-icon>{{data.title}}</h1>
36
- <div mat-dialog-content>
37
-
38
- <p>{{data.msg}}</p>
39
- <p>{{data.advice}}</p>
40
-
41
- </div>
42
- <div mat-dialog-actions>
43
- <button mat-button (click)="closeDialog()">OK</button>
44
- </div>
45
- `
46
- }]
47
- }], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
48
- type: Inject,
49
- args: [MAT_DIALOG_DATA]
50
- }] }] });
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZV9kaWFsb2cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvdWkvbWVzc2FnZV9kaWFsb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDaEQsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7O0FBaUJ6RSxNQUFNLE9BQU8sYUFBYTtJQUV4QixZQUNTLFNBQXNDLEVBQ2IsSUFBUztRQURsQyxjQUFTLEdBQVQsU0FBUyxDQUE2QjtRQUNiLFNBQUksR0FBSixJQUFJLENBQUs7SUFBSSxDQUFDO0lBRWhELFdBQVc7UUFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3pCLENBQUM7K0dBUlUsYUFBYSw4Q0FJZCxlQUFlO21HQUpkLGFBQWEsa0RBYmQ7Ozs7Ozs7Ozs7O0dBV1Q7OzRGQUVVLGFBQWE7a0JBZnpCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLFlBQVk7b0JBQ3RCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7R0FXVDtpQkFDRjs7MEJBS0ksTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEluamVjdH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ21zZy1kaWFsb2cnLFxyXG4gIHRlbXBsYXRlOiBgPGgxIG1hdC1kaWFsb2ctdGl0bGU+PG1hdC1pY29uICpuZ0lmPVwiZGF0YS50eXBlPT09J2Vycm9yJ1wiIFtzdHlsZS5jb2xvcl09XCIncmVkJ1wiPmVycm9yPC9tYXQtaWNvbj5cclxuICAgIDxtYXQtaWNvbiAqbmdJZj1cImRhdGEudHlwZT09PSd3YXJuaW5nJ1wiIFtzdHlsZS5jb2xvcl09XCIneWVsbG93J1wiPndhcm5pbmc8L21hdC1pY29uPnt7ZGF0YS50aXRsZX19PC9oMT5cclxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudD5cclxuXHJcbiAgICA8cD57e2RhdGEubXNnfX08L3A+XHJcbiAgICA8cD57e2RhdGEuYWR2aWNlfX08L3A+XHJcblxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zPlxyXG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9XCJjbG9zZURpYWxvZygpXCI+T0s8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICBgXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNZXNzYWdlRGlhbG9ne1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxNZXNzYWdlRGlhbG9nPixcclxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogYW55KSB7IH1cclxuXHJcbiAgY2xvc2VEaWFsb2coKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
@@ -1,253 +0,0 @@
1
- import { Component, EventEmitter, Input, Output, ViewChild } from "@angular/core";
2
- import { LevelBar } from "../audio/ui/livelevel";
3
- import { ResponsiveComponent } from "./responsive_component";
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/cdk/layout";
6
- import * as i2 from "@angular/common";
7
- import * as i3 from "@angular/material/icon";
8
- import * as i4 from "@angular/material/tooltip";
9
- import * as i5 from "../audio/ui/livelevel";
10
- export const MIN_DB_LEVEL = -40.0;
11
- export const DEFAULT_WARN_DB_LEVEL = -2;
12
- export class RecordingItemControls extends ResponsiveComponent {
13
- set agc(agc) {
14
- this._agc = agc;
15
- if (this._agc === undefined || this._agc === null) {
16
- this.agcString = 'n/a';
17
- }
18
- else {
19
- if (this._agc === true) {
20
- this.agcString = 'On';
21
- }
22
- else {
23
- this.agcString = 'Off';
24
- }
25
- }
26
- }
27
- constructor(bpo, ref, changeDetectorRef) {
28
- super(bpo);
29
- this.bpo = bpo;
30
- this.ref = ref;
31
- this.changeDetectorRef = changeDetectorRef;
32
- this.ce = null;
33
- this.audioSignalCollapsed = true;
34
- this.enableDownload = false;
35
- this.peakDbLvl = MIN_DB_LEVEL;
36
- this._displayLevelInfos = null;
37
- this._agc = undefined;
38
- this.agcString = 'n/a';
39
- this.onShowRecordingDetails = new EventEmitter();
40
- this.onDownloadRecording = new EventEmitter();
41
- this.disableAudioDetails = true;
42
- this.audioLoaded = false;
43
- this.playStartEnabled = false;
44
- this.playStopEnabled = false;
45
- this.updateTimerId = null;
46
- this.destroyed = false;
47
- this.warnDbLevel = DEFAULT_WARN_DB_LEVEL;
48
- }
49
- ngOnDestroy() {
50
- this.destroyed = true;
51
- }
52
- showRecordingDetails() {
53
- this.onShowRecordingDetails.emit();
54
- }
55
- downloadRecording() {
56
- this.onDownloadRecording.emit();
57
- }
58
- ngAfterViewInit() {
59
- this.ce = this.ref.nativeElement;
60
- }
61
- set displayLevelInfos(levelInfos) {
62
- this._displayLevelInfos = levelInfos;
63
- }
64
- error() {
65
- // this.status = 'ERROR';
66
- }
67
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: RecordingItemControls, deps: [{ token: i1.BreakpointObserver }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
68
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: RecordingItemControls, selector: "spr-recordingitemcontrols", inputs: { audioSignalCollapsed: "audioSignalCollapsed", enableDownload: "enableDownload", peakDbLvl: "peakDbLvl", agc: "agc", disableAudioDetails: "disableAudioDetails", audioLoaded: "audioLoaded", playStartAction: "playStartAction", playStopAction: "playStopAction", displayLevelInfos: "displayLevelInfos" }, outputs: { onShowRecordingDetails: "onShowRecordingDetails", onDownloadRecording: "onDownloadRecording" }, usesInheritance: true, ngImport: i0, template: `
69
- <button matTooltip="Start playback" (click)="playStartAction?.perform()"
70
- [disabled]="playStartAction?playStartAction.disabled:true"
71
- [style.color]="playStartAction?.disabled ? 'grey' : 'green'">
72
- <mat-icon>play_arrow</mat-icon>
73
- </button>
74
- <button matTooltip="Stop playback" (click)="playStopAction?.perform()"
75
- [disabled]="playStopAction?.disabled"
76
- [style.color]="playStopAction?.disabled ? 'grey' : 'yellow'">
77
- <mat-icon>stop</mat-icon>
78
- </button>
79
- <button *ngIf="!screenXs" matTooltip="Toggle detailed audio display" [disabled]="disableAudioDetails || !audioLoaded"
80
- (click)="showRecordingDetails()">
81
- <mat-icon>{{(audioSignalCollapsed) ? "expand_less" : "expand_more"}}</mat-icon>
82
- </button>
83
- <button matTooltip="Download current recording" *ngIf="enableDownload" [disabled]="disableAudioDetails || !audioLoaded"
84
- (click)="downloadRecording()">
85
- <mat-icon>file_download</mat-icon>
86
- </button>
87
- <div style="min-width: 14ch;padding:2px"><table style="border-style: none"><tr><td>Peak:</td><td><span matTooltip="Peak level"
88
- [style.color]="(peakDbLvl > warnDbLevel)?'red':'black'">{{peakDbLvl | number:'1.1-1'}} dB </span></td></tr>
89
- <tr *ngIf="_agc"><td>AGC:</td><td><span matTooltip="Auto gain control">{{agcString}}</span></td></tr></table></div>
90
- `, isInline: true, styles: [":host{flex:0;width:100%;background:#a9a9a9;padding:4px;box-sizing:border-box;height:100%;display:flex;flex-direction:row;flex-wrap:nowrap}\n", "span{flex:0;font-weight:700;display:inline-block;white-space:nowrap;box-sizing:border-box}\n", "button{touch-action:manipulation}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: i2.DecimalPipe, name: "number" }] }); }
91
- }
92
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: RecordingItemControls, decorators: [{
93
- type: Component,
94
- args: [{ selector: 'spr-recordingitemcontrols', template: `
95
- <button matTooltip="Start playback" (click)="playStartAction?.perform()"
96
- [disabled]="playStartAction?playStartAction.disabled:true"
97
- [style.color]="playStartAction?.disabled ? 'grey' : 'green'">
98
- <mat-icon>play_arrow</mat-icon>
99
- </button>
100
- <button matTooltip="Stop playback" (click)="playStopAction?.perform()"
101
- [disabled]="playStopAction?.disabled"
102
- [style.color]="playStopAction?.disabled ? 'grey' : 'yellow'">
103
- <mat-icon>stop</mat-icon>
104
- </button>
105
- <button *ngIf="!screenXs" matTooltip="Toggle detailed audio display" [disabled]="disableAudioDetails || !audioLoaded"
106
- (click)="showRecordingDetails()">
107
- <mat-icon>{{(audioSignalCollapsed) ? "expand_less" : "expand_more"}}</mat-icon>
108
- </button>
109
- <button matTooltip="Download current recording" *ngIf="enableDownload" [disabled]="disableAudioDetails || !audioLoaded"
110
- (click)="downloadRecording()">
111
- <mat-icon>file_download</mat-icon>
112
- </button>
113
- <div style="min-width: 14ch;padding:2px"><table style="border-style: none"><tr><td>Peak:</td><td><span matTooltip="Peak level"
114
- [style.color]="(peakDbLvl > warnDbLevel)?'red':'black'">{{peakDbLvl | number:'1.1-1'}} dB </span></td></tr>
115
- <tr *ngIf="_agc"><td>AGC:</td><td><span matTooltip="Auto gain control">{{agcString}}</span></td></tr></table></div>
116
- `, styles: [":host{flex:0;width:100%;background:#a9a9a9;padding:4px;box-sizing:border-box;height:100%;display:flex;flex-direction:row;flex-wrap:nowrap}\n", "span{flex:0;font-weight:700;display:inline-block;white-space:nowrap;box-sizing:border-box}\n", "button{touch-action:manipulation}\n"] }]
117
- }], ctorParameters: () => [{ type: i1.BreakpointObserver }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }], propDecorators: { audioSignalCollapsed: [{
118
- type: Input
119
- }], enableDownload: [{
120
- type: Input
121
- }], peakDbLvl: [{
122
- type: Input
123
- }], agc: [{
124
- type: Input
125
- }], onShowRecordingDetails: [{
126
- type: Output
127
- }], onDownloadRecording: [{
128
- type: Output
129
- }], disableAudioDetails: [{
130
- type: Input
131
- }], audioLoaded: [{
132
- type: Input
133
- }], playStartAction: [{
134
- type: Input
135
- }], playStopAction: [{
136
- type: Input
137
- }], displayLevelInfos: [{
138
- type: Input
139
- }] } });
140
- export class RecordingItemDisplay extends ResponsiveComponent {
141
- set agc(agc) {
142
- this._agc = agc;
143
- }
144
- constructor(bpo, ref, changeDetectorRef) {
145
- super(bpo);
146
- this.bpo = bpo;
147
- this.ref = ref;
148
- this.changeDetectorRef = changeDetectorRef;
149
- this.ce = null;
150
- this.streamingMode = false;
151
- this.audioSignalCollapsed = true;
152
- this.enableDownload = false;
153
- this.peakDbLvl = MIN_DB_LEVEL;
154
- this._displayLevelInfos = null;
155
- this._agc = undefined;
156
- this.agcString = 'n/a';
157
- this.onShowRecordingDetails = new EventEmitter();
158
- this.onDownloadRecording = new EventEmitter();
159
- this.playStartEnabled = false;
160
- this.playStopEnabled = false;
161
- this.updateTimerId = null;
162
- this.destroyed = false;
163
- this.warnDbLevel = DEFAULT_WARN_DB_LEVEL;
164
- }
165
- ngOnDestroy() {
166
- this.destroyed = true;
167
- }
168
- set displayAudioBuffer(displayAudioBuffer) {
169
- this._displayAudioBuffer = displayAudioBuffer;
170
- }
171
- get displayAudioBuffer() {
172
- return this._displayAudioBuffer;
173
- }
174
- showRecordingDetails() {
175
- this.onShowRecordingDetails.emit();
176
- }
177
- downloadRecording() {
178
- this.onDownloadRecording.emit();
179
- }
180
- ngAfterViewInit() {
181
- this.ce = this.ref.nativeElement;
182
- //this.controlAudioPlayer.listener=this;
183
- }
184
- set displayLevelInfos(levelInfos) {
185
- this._displayLevelInfos = levelInfos;
186
- }
187
- set channelCount(channelCount) {
188
- this.reset();
189
- this.liveLevel.channelCount = channelCount;
190
- }
191
- set playFramePosition(playFramePosition) {
192
- this.liveLevel.playFramePosition = playFramePosition;
193
- }
194
- update(levelInfo, peakLevelInfo) {
195
- let peakDBVal = levelInfo.powerLevelDB();
196
- if (this.peakDbLvl < peakDBVal) {
197
- this.peakDbLvl = peakDBVal;
198
- // the event comes from outside an Angular zone
199
- this.changeDetectorRef.detectChanges();
200
- }
201
- this.liveLevel.update(levelInfo);
202
- }
203
- error() {
204
- // this.status = 'ERROR';
205
- }
206
- streamFinished() {
207
- this.liveLevel.streamFinished();
208
- }
209
- reset() {
210
- this.peakDbLvl = MIN_DB_LEVEL;
211
- this.changeDetectorRef.detectChanges();
212
- }
213
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: RecordingItemDisplay, deps: [{ token: i1.BreakpointObserver }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
214
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: RecordingItemDisplay, selector: "spr-recordingitemdisplay", inputs: { streamingMode: "streamingMode", audioSignalCollapsed: "audioSignalCollapsed", enableDownload: "enableDownload", agc: "agc", playStartAction: "playStartAction", playStopAction: "playStopAction", displayAudioBuffer: "displayAudioBuffer", displayLevelInfos: "displayLevelInfos" }, outputs: { onShowRecordingDetails: "onShowRecordingDetails", onDownloadRecording: "onDownloadRecording" }, viewQueries: [{ propertyName: "liveLevel", first: true, predicate: LevelBar, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
215
- <div [class]="{audioStatusDisplay:!screenXs,audioStatusDisplayXs:screenXs}">
216
- <audio-levelbar style="flex:1 0 1%" [streamingMode]="streamingMode" [displayLevelInfos]="_displayLevelInfos"></audio-levelbar>
217
- <spr-recordingitemcontrols style="flex:0 0 0px" [audioLoaded]="displayAudioBuffer!==null" [playStartAction]="playStartAction" [playStopAction]="playStopAction" [peakDbLvl]="peakDbLvl" [agc]="_agc" (onShowRecordingDetails)="onShowRecordingDetails.emit()"></spr-recordingitemcontrols>
218
- </div>
219
- `, isInline: true, styles: ["div{width:100%;background:#a9a9a9;padding:4px;box-sizing:border-box;flex-wrap:nowrap}\n", "audio-levelbar{box-sizing:border-box}\n", ".audioStatusDisplay{display:flex;flex-direction:row;height:100px;min-height:100px}\n", ".audioStatusDisplayXs{display:flex;flex-direction:column;height:125px;min-height:125px}\n"], dependencies: [{ kind: "component", type: i5.LevelBar, selector: "audio-levelbar", inputs: ["streamingMode", "displayLevelInfos", "state"] }, { kind: "component", type: RecordingItemControls, selector: "spr-recordingitemcontrols", inputs: ["audioSignalCollapsed", "enableDownload", "peakDbLvl", "agc", "disableAudioDetails", "audioLoaded", "playStartAction", "playStopAction", "displayLevelInfos"], outputs: ["onShowRecordingDetails", "onDownloadRecording"] }] }); }
220
- }
221
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: RecordingItemDisplay, decorators: [{
222
- type: Component,
223
- args: [{ selector: 'spr-recordingitemdisplay', template: `
224
- <div [class]="{audioStatusDisplay:!screenXs,audioStatusDisplayXs:screenXs}">
225
- <audio-levelbar style="flex:1 0 1%" [streamingMode]="streamingMode" [displayLevelInfos]="_displayLevelInfos"></audio-levelbar>
226
- <spr-recordingitemcontrols style="flex:0 0 0px" [audioLoaded]="displayAudioBuffer!==null" [playStartAction]="playStartAction" [playStopAction]="playStopAction" [peakDbLvl]="peakDbLvl" [agc]="_agc" (onShowRecordingDetails)="onShowRecordingDetails.emit()"></spr-recordingitemcontrols>
227
- </div>
228
- `, styles: ["div{width:100%;background:#a9a9a9;padding:4px;box-sizing:border-box;flex-wrap:nowrap}\n", "audio-levelbar{box-sizing:border-box}\n", ".audioStatusDisplay{display:flex;flex-direction:row;height:100px;min-height:100px}\n", ".audioStatusDisplayXs{display:flex;flex-direction:column;height:125px;min-height:125px}\n"] }]
229
- }], ctorParameters: () => [{ type: i1.BreakpointObserver }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }], propDecorators: { liveLevel: [{
230
- type: ViewChild,
231
- args: [LevelBar, { static: true }]
232
- }], streamingMode: [{
233
- type: Input
234
- }], audioSignalCollapsed: [{
235
- type: Input
236
- }], enableDownload: [{
237
- type: Input
238
- }], agc: [{
239
- type: Input
240
- }], onShowRecordingDetails: [{
241
- type: Output
242
- }], onDownloadRecording: [{
243
- type: Output
244
- }], playStartAction: [{
245
- type: Input
246
- }], playStopAction: [{
247
- type: Input
248
- }], displayAudioBuffer: [{
249
- type: Input
250
- }], displayLevelInfos: [{
251
- type: Input
252
- }] } });
253
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkaW5naXRlbV9kaXNwbGF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3VpL3JlY29yZGluZ2l0ZW1fZGlzcGxheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ2dCLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFDaEYsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFBO0FBRXRCLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7OztBQUkzRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDbEMsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFrRHhDLE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxtQkFBbUI7SUFjNUQsSUFBYSxHQUFHLENBQUMsR0FBMEI7UUFDekMsSUFBSSxDQUFDLElBQUksR0FBQyxHQUFHLENBQUM7UUFDZCxJQUFHLElBQUksQ0FBQyxJQUFJLEtBQUcsU0FBUyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUcsSUFBSSxFQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLFNBQVMsR0FBQyxLQUFLLENBQUM7UUFDdkIsQ0FBQzthQUFJLENBQUM7WUFDSixJQUFHLElBQUksQ0FBQyxJQUFJLEtBQUcsSUFBSSxFQUFDLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxTQUFTLEdBQUMsSUFBSSxDQUFDO1lBQ3RCLENBQUM7aUJBQUksQ0FBQztnQkFDSixJQUFJLENBQUMsU0FBUyxHQUFDLEtBQUssQ0FBQztZQUN2QixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFrQkQsWUFBc0IsR0FBc0IsRUFBUyxHQUFlLEVBQVUsaUJBQW9DO1FBQ2hILEtBQUss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QUFjO3NCQUF0QixLQUFLO2dCQW1CRixrQkFBa0I7c0JBRHJCLEtBQUs7Z0JBdUJGLGlCQUFpQjtzQkFEcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE91dHB1dCxcclxuICAgIFZpZXdDaGlsZFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcclxuaW1wb3J0IHtMZXZlbEluZm8sIExldmVsSW5mb3MsIExldmVsTGlzdGVuZXJ9IGZyb20gXCIuLi9hdWRpby9kc3AvbGV2ZWxfbWVhc3VyZVwiO1xyXG5pbXBvcnQge0xldmVsQmFyfSBmcm9tIFwiLi4vYXVkaW8vdWkvbGl2ZWxldmVsXCI7XHJcbmltcG9ydCB7QWN0aW9ufSBmcm9tIFwiLi4vYWN0aW9uL2FjdGlvblwiO1xyXG5pbXBvcnQge1Jlc3BvbnNpdmVDb21wb25lbnR9IGZyb20gXCIuL3Jlc3BvbnNpdmVfY29tcG9uZW50XCI7XHJcbmltcG9ydCB7QnJlYWtwb2ludE9ic2VydmVyfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2xheW91dFwiO1xyXG5cclxuXHJcbmV4cG9ydCBjb25zdCBNSU5fREJfTEVWRUwgPSAtNDAuMDtcclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0FSTl9EQl9MRVZFTCA9IC0yO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzcHItcmVjb3JkaW5naXRlbWNvbnRyb2xzJyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxidXR0b24gbWF0VG9vbHRpcD1cIlN0YXJ0IHBsYXliYWNrXCIgKGNsaWNrKT1cInBsYXlTdGFydEFjdGlvbj8ucGVyZm9ybSgpXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJwbGF5U3RhcnRBY3Rpb24/cGxheVN0YXJ0QWN0aW9uLmRpc2FibGVkOnRydWVcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInBsYXlTdGFydEFjdGlvbj8uZGlzYWJsZWQgPyAnZ3JleScgOiAnZ3JlZW4nXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5wbGF5X2Fycm93PC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIG1hdFRvb2x0aXA9XCJTdG9wIHBsYXliYWNrXCIgKGNsaWNrKT1cInBsYXlTdG9wQWN0aW9uPy5wZXJmb3JtKClcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInBsYXlTdG9wQWN0aW9uPy5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwicGxheVN0b3BBY3Rpb24/LmRpc2FibGVkID8gJ2dyZXknIDogJ3llbGxvdydcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPnN0b3A8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCIhc2NyZWVuWHNcIiBtYXRUb29sdGlwPVwiVG9nZ2xlIGRldGFpbGVkIGF1ZGlvIGRpc3BsYXlcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZUF1ZGlvRGV0YWlscyB8fCAhYXVkaW9Mb2FkZWRcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dSZWNvcmRpbmdEZXRhaWxzKClcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPnt7KGF1ZGlvU2lnbmFsQ29sbGFwc2VkKSA/IFwiZXhwYW5kX2xlc3NcIiA6IFwiZXhwYW5kX21vcmVcIn19PC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIG1hdFRvb2x0aXA9XCJEb3dubG9hZCBjdXJyZW50IHJlY29yZGluZ1wiICpuZ0lmPVwiZW5hYmxlRG93bmxvYWRcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZUF1ZGlvRGV0YWlscyB8fCAhYXVkaW9Mb2FkZWRcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkUmVjb3JkaW5nKClcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPmZpbGVfZG93bmxvYWQ8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxkaXYgc3R5bGU9XCJtaW4td2lkdGg6IDE0Y2g7cGFkZGluZzoycHhcIj48dGFibGUgc3R5bGU9XCJib3JkZXItc3R5bGU6IG5vbmVcIj48dHI+PHRkPlBlYWs6PC90ZD48dGQ+PHNwYW4gbWF0VG9vbHRpcD1cIlBlYWsgbGV2ZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiKHBlYWtEYkx2bCA+IHdhcm5EYkxldmVsKT8ncmVkJzonYmxhY2snXCI+e3twZWFrRGJMdmwgfCBudW1iZXI6JzEuMS0xJ319IGRCIDwvc3Bhbj48L3RkPjwvdHI+XHJcbiAgICAgICAgICA8dHIgKm5nSWY9XCJfYWdjXCI+PHRkPkFHQzo8L3RkPjx0ZD48c3BhbiBtYXRUb29sdGlwPVwiQXV0byBnYWluIGNvbnRyb2xcIj57e2FnY1N0cmluZ319PC9zcGFuPjwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PlxyXG4gICAgYCxcclxuICBzdHlsZXM6IFtgOmhvc3Qge1xyXG4gICAgICAgIGZsZXg6IDA7IC8qIG9ubHkgcmVxdWlyZWQgdmVydGljYWwgc3BhY2UgKi9cclxuICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICBiYWNrZ3JvdW5kOiBkYXJrZ3JheTtcclxuICAgICAgICBwYWRkaW5nOiA0cHg7XHJcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICBoZWlnaHQ6IDEwMCU7XHJcblxyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7IC8qIGZsZXggY29udGFpbmVyOiBsZWZ0IGxldmVsIGJhciwgcmlnaHQgZGVjaW1hbCBwZWFrIGxldmVsIHZhbHVlICovXHJcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcclxuICAgICAgICBmbGV4LXdyYXA6IG5vd3JhcDsgLyogd3JhcCBjb3VsZCBjb21wbGV0ZWx5IGRlc3Ryb3kgdGhlIGxheW91dCAqL1xyXG4gICAgfWAsIGBzcGFuIHtcclxuICAgICAgICBmbGV4OiAwO1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICB9YCxgXHJcbiAgICAgYnV0dG9uIHtcclxuICAgICAgIHRvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uO1xyXG4gICAgIH1gXVxyXG5cclxufSlcclxuZXhwb3J0IGNsYXNzIFJlY29yZGluZ0l0ZW1Db250cm9scyBleHRlbmRzIFJlc3BvbnNpdmVDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG5cclxuICBjZTogSFRNTERpdkVsZW1lbnR8bnVsbD1udWxsO1xyXG4gIEBJbnB1dCgpIGF1ZGlvU2lnbmFsQ29sbGFwc2VkOiBib29sZWFuPXRydWU7XHJcbiAgcHJpdmF0ZSBfZGlzcGxheUF1ZGlvQnVmZmVyOiBBdWRpb0J1ZmZlciB8IG51bGx8dW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIGVuYWJsZURvd25sb2FkOiBib29sZWFuPWZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBwZWFrRGJMdmwgPSBNSU5fREJfTEVWRUw7XHJcblxyXG4gIF9kaXNwbGF5TGV2ZWxJbmZvczogTGV2ZWxJbmZvcyB8IG51bGw9bnVsbDtcclxuXHJcbiAgX2FnYzpib29sZWFufG51bGx8dW5kZWZpbmVkPXVuZGVmaW5lZDtcclxuICBhZ2NTdHJpbmc9J24vYSc7XHJcblxyXG4gIEBJbnB1dCgpIHNldCBhZ2MoYWdjOmJvb2xlYW58bnVsbHx1bmRlZmluZWQpe1xyXG4gICAgdGhpcy5fYWdjPWFnYztcclxuICAgIGlmKHRoaXMuX2FnYz09PXVuZGVmaW5lZCB8fCB0aGlzLl9hZ2M9PT1udWxsKXtcclxuICAgICAgdGhpcy5hZ2NTdHJpbmc9J24vYSc7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgaWYodGhpcy5fYWdjPT09dHJ1ZSl7XHJcbiAgICAgICAgdGhpcy5hZ2NTdHJpbmc9J09uJztcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgdGhpcy5hZ2NTdHJpbmc9J09mZic7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBPdXRwdXQoKSBvblNob3dSZWNvcmRpbmdEZXRhaWxzOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgQE91dHB1dCgpIG9uRG93bmxvYWRSZWNvcmRpbmc6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgQElucHV0KCkgZGlzYWJsZUF1ZGlvRGV0YWlscz10cnVlO1xyXG4gIEBJbnB1dCgpIGF1ZGlvTG9hZGVkPWZhbHNlO1xyXG4gIC8vQElucHV0KCkgY29udHJvbEF1ZGlvUGxheWVyOiBBdWRpb1BsYXllcjtcclxuICBASW5wdXQoKSBwbGF5U3RhcnRBY3Rpb246QWN0aW9uPHZvaWQ+fHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBwbGF5U3RvcEFjdGlvbjpBY3Rpb248dm9pZD58dW5kZWZpbmVkO1xyXG4gIHBsYXlTdGFydEVuYWJsZWQgPSBmYWxzZTtcclxuICBwbGF5U3RvcEVuYWJsZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIHVwZGF0ZVRpbWVySWQ6IG51bWJlcnxudWxsPW51bGw7XHJcblxyXG4gIHByaXZhdGUgZGVzdHJveWVkID0gZmFsc2U7XHJcblxyXG4gIHdhcm5EYkxldmVsID0gREVGQVVMVF9XQVJOX0RCX0xFVkVMO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgYnBvOkJyZWFrcG9pbnRPYnNlcnZlcixwcml2YXRlIHJlZjogRWxlbWVudFJlZiwgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuICAgIHN1cGVyKGJwbyk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHNob3dSZWNvcmRpbmdEZXRhaWxzKCkge1xyXG4gICAgdGhpcy5vblNob3dSZWNvcmRpbmdEZXRhaWxzLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIGRvd25sb2FkUmVjb3JkaW5nKCkge1xyXG4gICAgdGhpcy5vbkRvd25sb2FkUmVjb3JkaW5nLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuY2UgPSB0aGlzLnJlZi5uYXRpdmVFbGVtZW50O1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgZGlzcGxheUxldmVsSW5mb3MobGV2ZWxJbmZvczogTGV2ZWxJbmZvcyB8IG51bGwpIHtcclxuICAgIHRoaXMuX2Rpc3BsYXlMZXZlbEluZm9zID0gbGV2ZWxJbmZvcztcclxuICB9XHJcblxyXG4gIGVycm9yKCkge1xyXG4gICAgLy8gdGhpcy5zdGF0dXMgPSAnRVJST1InO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc3ByLXJlY29yZGluZ2l0ZW1kaXNwbGF5JyxcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgIDxkaXYgW2NsYXNzXT1cInthdWRpb1N0YXR1c0Rpc3BsYXk6IXNjcmVlblhzLGF1ZGlvU3RhdHVzRGlzcGxheVhzOnNjcmVlblhzfVwiPlxyXG4gICAgICAgIDxhdWRpby1sZXZlbGJhciBzdHlsZT1cImZsZXg6MSAwIDElXCIgW3N0cmVhbWluZ01vZGVdPVwic3RyZWFtaW5nTW9kZVwiIFtkaXNwbGF5TGV2ZWxJbmZvc109XCJfZGlzcGxheUxldmVsSW5mb3NcIj48L2F1ZGlvLWxldmVsYmFyPlxyXG4gICAgICAgIDxzcHItcmVjb3JkaW5naXRlbWNvbnRyb2xzIHN0eWxlPVwiZmxleDowIDAgMHB4XCIgW2F1ZGlvTG9hZGVkXT1cImRpc3BsYXlBdWRpb0J1ZmZlciE9PW51bGxcIiBbcGxheVN0YXJ0QWN0aW9uXT1cInBsYXlTdGFydEFjdGlvblwiIFtwbGF5U3RvcEFjdGlvbl09XCJwbGF5U3RvcEFjdGlvblwiIFtwZWFrRGJMdmxdPVwicGVha0RiTHZsXCIgW2FnY109XCJfYWdjXCIgKG9uU2hvd1JlY29yZGluZ0RldGFpbHMpPVwib25TaG93UmVjb3JkaW5nRGV0YWlscy5lbWl0KClcIj48L3Nwci1yZWNvcmRpbmdpdGVtY29udHJvbHM+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgYCxcclxuICAgIHN0eWxlczogW2BkaXYge1xyXG4gICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgIGJhY2tncm91bmQ6IGRhcmtncmF5O1xyXG4gICAgICAgIHBhZGRpbmc6IDRweDtcclxuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICAgIGZsZXgtd3JhcDogbm93cmFwOyAvKiB3cmFwIGNvdWxkIGNvbXBsZXRlbHkgZGVzdHJveSB0aGUgbGF5b3V0ICovXHJcbiAgICB9YCwgYGF1ZGlvLWxldmVsYmFyIHtcclxuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgfWAsYC5hdWRpb1N0YXR1c0Rpc3BsYXl7XHJcbiAgICBkaXNwbGF5OmZsZXg7XHJcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xyXG4gICAgaGVpZ2h0OjEwMHB4O1xyXG4gICAgbWluLWhlaWdodDogMTAwcHg7XHJcbiAgfWAsYC5hdWRpb1N0YXR1c0Rpc3BsYXlYc3tcclxuICAgIGRpc3BsYXk6ZmxleDtcclxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICBoZWlnaHQ6MTI1cHg7XHJcbiAgICBtaW4taGVpZ2h0OiAxMjVweDtcclxuICB9YF1cclxuXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZWNvcmRpbmdJdGVtRGlzcGxheSBleHRlbmRzIFJlc3BvbnNpdmVDb21wb25lbnQgaW1wbGVtZW50cyBMZXZlbExpc3RlbmVyLCBPbkRlc3Ryb3kge1xyXG5cclxuICAgIGNlOiBIVE1MRGl2RWxlbWVudHxudWxsPW51bGw7XHJcbiAgICBAVmlld0NoaWxkKExldmVsQmFyLCB7IHN0YXRpYzogdHJ1ZSB9KSBsaXZlTGV2ZWwhOiBMZXZlbEJhcjtcclxuICAgIEBJbnB1dCgpIHN0cmVhbWluZ01vZGU6IGJvb2xlYW49ZmFsc2U7XHJcbiAgICBASW5wdXQoKSBhdWRpb1NpZ25hbENvbGxhcHNlZDogYm9vbGVhbj10cnVlO1xyXG4gICAgcHJpdmF0ZSBfZGlzcGxheUF1ZGlvQnVmZmVyOiBBdWRpb0J1ZmZlciB8IG51bGx8dW5kZWZpbmVkO1xyXG4gICAgQElucHV0KCkgZW5hYmxlRG93bmxvYWQ6IGJvb2xlYW49ZmFsc2U7XHJcblxyXG4gICAgcGVha0RiTHZsID0gTUlOX0RCX0xFVkVMO1xyXG5cclxuICAgIF9kaXNwbGF5TGV2ZWxJbmZvczogTGV2ZWxJbmZvcyB8IG51bGw9bnVsbDtcclxuXHJcbiAgICBfYWdjOmJvb2xlYW58bnVsbHx1bmRlZmluZWQ9dW5kZWZpbmVkO1xyXG4gICAgYWdjU3RyaW5nPSduL2EnO1xyXG5cclxuICAgIEBJbnB1dCgpIHNldCBhZ2MoYWdjOmJvb2xlYW58bnVsbHx1bmRlZmluZWQpe1xyXG4gICAgICB0aGlzLl9hZ2M9YWdjO1xyXG4gICAgfVxyXG5cclxuICAgIEBPdXRwdXQoKSBvblNob3dSZWNvcmRpbmdEZXRhaWxzOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25Eb3dubG9hZFJlY29yZGluZzogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIC8vQElucHV0KCkgY29udHJvbEF1ZGlvUGxheWVyOiBBdWRpb1BsYXllcjtcclxuICAgIEBJbnB1dCgpIHBsYXlTdGFydEFjdGlvbjpBY3Rpb248dm9pZD58dW5kZWZpbmVkO1xyXG4gICAgQElucHV0KCkgcGxheVN0b3BBY3Rpb246QWN0aW9uPHZvaWQ+fHVuZGVmaW5lZDtcclxuICAgIHBsYXlTdGFydEVuYWJsZWQgPSBmYWxzZTtcclxuICAgIHBsYXlTdG9wRW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSB1cGRhdGVUaW1lcklkOiBudW1iZXJ8bnVsbD1udWxsO1xyXG5cclxuICAgIHByaXZhdGUgZGVzdHJveWVkID0gZmFsc2U7XHJcblxyXG4gICAgd2FybkRiTGV2ZWwgPSBERUZBVUxUX1dBUk5fREJfTEVWRUw7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIGJwbzpCcmVha3BvaW50T2JzZXJ2ZXIscHJpdmF0ZSByZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcbiAgICAgICAgc3VwZXIoYnBvKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBzZXQgZGlzcGxheUF1ZGlvQnVmZmVyKGRpc3BsYXlBdWRpb0J1ZmZlcjogQXVkaW9CdWZmZXIgfCBudWxsfCB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLl9kaXNwbGF5QXVkaW9CdWZmZXIgPSBkaXNwbGF5QXVkaW9CdWZmZXI7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGRpc3BsYXlBdWRpb0J1ZmZlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGxheUF1ZGlvQnVmZmVyO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dSZWNvcmRpbmdEZXRhaWxzKCkge1xyXG4gICAgICAgIHRoaXMub25TaG93UmVjb3JkaW5nRGV0YWlscy5lbWl0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgZG93bmxvYWRSZWNvcmRpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5vbkRvd25sb2FkUmVjb3JkaW5nLmVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAgICAgdGhpcy5jZSA9IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgLy90aGlzLmNvbnRyb2xBdWRpb1BsYXllci5saXN0ZW5lcj10aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBzZXQgZGlzcGxheUxldmVsSW5mb3MobGV2ZWxJbmZvczogTGV2ZWxJbmZvcyB8IG51bGwpIHtcclxuICAgICAgICB0aGlzLl9kaXNwbGF5TGV2ZWxJbmZvcyA9IGxldmVsSW5mb3M7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IGNoYW5uZWxDb3VudChjaGFubmVsQ291bnQ6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMucmVzZXQoKTtcclxuICAgICAgICB0aGlzLmxpdmVMZXZlbC5jaGFubmVsQ291bnQgPSBjaGFubmVsQ291bnQ7XHJcbiAgICB9XHJcblxyXG4gIHNldCBwbGF5RnJhbWVQb3NpdGlvbihwbGF5RnJhbWVQb3NpdGlvbjogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmxpdmVMZXZlbC5wbGF5RnJhbWVQb3NpdGlvbj1wbGF5RnJhbWVQb3NpdGlvbjtcclxuICB9XHJcblxyXG4gICAgdXBkYXRlKGxldmVsSW5mbzogTGV2ZWxJbmZvLCBwZWFrTGV2ZWxJbmZvOiBMZXZlbEluZm8pIHtcclxuICAgICAgICBsZXQgcGVha0RCVmFsID0gbGV2ZWxJbmZvLnBvd2VyTGV2ZWxEQigpO1xyXG4gICAgICAgIGlmICh0aGlzLnBlYWtEYkx2bCA8IHBlYWtEQlZhbCkge1xyXG4gICAgICAgICAgICB0aGlzLnBlYWtEYkx2bCA9IHBlYWtEQlZhbDtcclxuICAgICAgICAgICAgLy8gdGhlIGV2ZW50IGNvbWVzIGZyb20gb3V0c2lkZSBhbiBBbmd1bGFyIHpvbmVcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubGl2ZUxldmVsLnVwZGF0ZShsZXZlbEluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIGVycm9yKCkge1xyXG4gICAgICAgIC8vIHRoaXMuc3RhdHVzID0gJ0VSUk9SJztcclxuICAgIH1cclxuXHJcbiAgICBzdHJlYW1GaW5pc2hlZCgpIHtcclxuICAgICAgICB0aGlzLmxpdmVMZXZlbC5zdHJlYW1GaW5pc2hlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0KCkge1xyXG4gICAgICAgIHRoaXMucGVha0RiTHZsID0gTUlOX0RCX0xFVkVMO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG5cclxuXHJcbn1cclxuIl19