speechrecorderng 3.6.0 → 3.8.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.
- package/esm2022/lib/action/action.mjs +73 -0
- package/{esm2020 → esm2022}/lib/audio/array_audio_buffer.mjs +163 -163
- package/{esm2020 → esm2022}/lib/audio/array_audio_buffer_input_stream.mjs +85 -85
- package/{esm2020 → esm2022}/lib/audio/array_audio_buffer_random_access_stream.mjs +15 -15
- package/esm2022/lib/audio/audio_data_holder.mjs +264 -0
- package/{esm2020 → esm2022}/lib/audio/audio_display.mjs +93 -93
- package/{esm2020 → esm2022}/lib/audio/audio_player.mjs +213 -213
- package/esm2022/lib/audio/capture/capture.mjs +855 -0
- package/esm2022/lib/audio/context.mjs +79 -0
- package/{esm2020 → esm2022}/lib/audio/dsp/level_measure.mjs +515 -515
- package/{esm2020 → esm2022}/lib/audio/format.mjs +16 -16
- package/esm2022/lib/audio/impl/wavformat.mjs +6 -0
- package/{esm2020 → esm2022}/lib/audio/impl/wavreader.mjs +133 -133
- package/esm2022/lib/audio/impl/wavwriter.mjs +105 -0
- package/esm2022/lib/audio/inddb_audio_buffer.mjs +508 -0
- package/{esm2020 → esm2022}/lib/audio/io/stream.mjs +58 -58
- package/esm2022/lib/audio/net_audio_buffer.mjs +293 -0
- package/{esm2020 → esm2022}/lib/audio/persistor.mjs +80 -80
- package/{esm2020 → esm2022}/lib/audio/playback/array_audio_buffer_source_node.mjs +125 -125
- package/esm2022/lib/audio/playback/audio_source_node.mjs +18 -0
- package/esm2022/lib/audio/playback/audio_source_worklet_module_loader.mjs +167 -0
- package/{esm2020 → esm2022}/lib/audio/playback/inddb_audio_buffer_source_node.mjs +166 -166
- package/{esm2020 → esm2022}/lib/audio/playback/net_audio_buffer_source_node.mjs +217 -217
- package/esm2022/lib/audio/playback/player.mjs +402 -0
- package/esm2022/lib/audio/ui/audio_canvas_layer_comp.mjs +347 -0
- package/{esm2020 → esm2022}/lib/audio/ui/audio_display_control.mjs +65 -65
- package/{esm2020 → esm2022}/lib/audio/ui/audio_display_scroll_pane.mjs +139 -139
- package/{esm2020 → esm2022}/lib/audio/ui/audiosignal.mjs +524 -524
- package/{esm2020 → esm2022}/lib/audio/ui/common.mjs +18 -18
- package/esm2022/lib/audio/ui/container.mjs +414 -0
- package/{esm2020 → esm2022}/lib/audio/ui/livelevel.mjs +352 -352
- package/esm2022/lib/audio/ui/scroll_pane_horizontal.mjs +11 -0
- package/esm2022/lib/audio/ui/sonagram.mjs +900 -0
- package/esm2022/lib/db/inddb.mjs +120 -0
- package/esm2022/lib/dsp/utils.mjs +48 -0
- package/{esm2020 → esm2022}/lib/io/BinaryReader.mjs +84 -84
- package/esm2022/lib/io/BinaryWriter.mjs +74 -0
- package/{esm2020 → esm2022}/lib/io/stream.mjs +258 -258
- package/{esm2020 → esm2022}/lib/math/2d/geometry.mjs +27 -27
- package/esm2022/lib/math/complex.mjs +58 -0
- package/{esm2020 → esm2022}/lib/math/dft.mjs +195 -195
- package/{esm2020 → esm2022}/lib/media/utils.mjs +13 -13
- package/esm2022/lib/net/uploader.mjs +367 -0
- package/{esm2020 → esm2022}/lib/recorder_component.mjs +64 -64
- package/esm2022/lib/speechrecorder/project/project.mjs +49 -0
- package/esm2022/lib/speechrecorder/project/project.service.mjs +64 -0
- package/{esm2020 → esm2022}/lib/speechrecorder/recording.mjs +123 -123
- package/esm2022/lib/speechrecorder/recordings/basic_recording.service.mjs +218 -0
- package/esm2022/lib/speechrecorder/recordings/recordings.service.mjs +1014 -0
- package/{esm2020 → esm2022}/lib/speechrecorder/script/script.mjs +114 -114
- package/{esm2020 → esm2022}/lib/speechrecorder/script/script.service.mjs +47 -47
- package/esm2022/lib/speechrecorder/session/audiorecorder.mjs +1179 -0
- package/esm2022/lib/speechrecorder/session/basicrecorder.mjs +668 -0
- package/esm2022/lib/speechrecorder/session/controlpanel.mjs +416 -0
- package/{esm2020 → esm2022}/lib/speechrecorder/session/item.mjs +29 -29
- package/{esm2020 → esm2022}/lib/speechrecorder/session/progress.mjs +69 -69
- package/{esm2020 → esm2022}/lib/speechrecorder/session/prompting.mjs +571 -571
- package/{esm2020 → esm2022}/lib/speechrecorder/session/recorder_combi_pane.mjs +65 -65
- package/esm2022/lib/speechrecorder/session/recording_file_cache.mjs +195 -0
- package/{esm2020 → esm2022}/lib/speechrecorder/session/recording_list.mjs +103 -103
- package/{esm2020 → esm2022}/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +63 -63
- package/{esm2020 → esm2022}/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +51 -51
- package/{esm2020 → esm2022}/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +104 -104
- package/{esm2020 → esm2022}/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +381 -381
- package/{esm2020 → esm2022}/lib/speechrecorder/session/recordingfile/recording-file.mjs +67 -67
- package/esm2022/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +288 -0
- package/{esm2020 → esm2022}/lib/speechrecorder/session/session.mjs +1 -1
- package/esm2022/lib/speechrecorder/session/session.service.mjs +69 -0
- package/{esm2020 → esm2022}/lib/speechrecorder/session/session_finished_dialog.mjs +29 -29
- package/esm2022/lib/speechrecorder/session/sessionmanager.mjs +1386 -0
- package/{esm2020 → esm2022}/lib/speechrecorder/session/warning_bar.mjs +28 -28
- package/{esm2020 → esm2022}/lib/speechrecorder/spruploader.mjs +22 -22
- package/{esm2020 → esm2022}/lib/speechrecorder/startstopsignal/startstopsignal.mjs +1 -1
- package/esm2022/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +57 -0
- package/{esm2020 → esm2022}/lib/speechrecorderng.component.mjs +388 -388
- package/{esm2020 → esm2022}/lib/speechrecorderng.module.mjs +100 -100
- package/{esm2020 → esm2022}/lib/spr.config.mjs +26 -26
- package/{esm2020 → esm2022}/lib/spr.module.version.mjs +2 -2
- package/{esm2020 → esm2022}/lib/ui/canvas_layer_comp.mjs +38 -38
- package/{esm2020 → esm2022}/lib/ui/message_dialog.mjs +30 -30
- package/esm2022/lib/ui/recordingitem_display.mjs +253 -0
- package/{esm2020 → esm2022}/lib/ui/responsive_component.mjs +24 -24
- package/{esm2020 → esm2022}/lib/utils/scrollIntoViewToBottom.mjs +23 -23
- package/esm2022/lib/utils/ua-parser.mjs +190 -0
- package/esm2022/lib/utils/utils.mjs +105 -0
- package/esm2022/lib/utils/wake_lock.mjs +114 -0
- package/{esm2020 → esm2022}/lib/utils/wake_lock_media.mjs +1 -1
- package/{esm2020 → esm2022}/public-api.mjs +33 -33
- package/{esm2020 → esm2022}/speechrecorderng.mjs +4 -4
- package/{fesm2020 → fesm2022}/speechrecorderng.mjs +16518 -16454
- package/fesm2022/speechrecorderng.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/action/action.d.ts +27 -27
- package/lib/audio/array_audio_buffer.d.ts +31 -31
- package/lib/audio/array_audio_buffer_input_stream.d.ts +14 -14
- package/lib/audio/array_audio_buffer_random_access_stream.d.ts +9 -9
- package/lib/audio/audio_data_holder.d.ts +84 -84
- package/lib/audio/audio_display.d.ts +36 -36
- package/lib/audio/audio_player.d.ts +47 -47
- package/lib/audio/capture/capture.d.ts +67 -67
- package/lib/audio/context.d.ts +6 -6
- package/lib/audio/dsp/level_measure.d.ts +60 -60
- package/lib/audio/format.d.ts +11 -11
- package/lib/audio/impl/wavformat.d.ts +5 -5
- package/lib/audio/impl/wavreader.d.ts +16 -16
- package/lib/audio/impl/wavwriter.d.ts +13 -13
- package/lib/audio/inddb_audio_buffer.d.ts +68 -68
- package/lib/audio/io/stream.d.ts +28 -28
- package/lib/audio/net_audio_buffer.d.ts +57 -57
- package/lib/audio/persistor.d.ts +29 -29
- package/lib/audio/playback/array_audio_buffer_source_node.d.ts +18 -18
- package/lib/audio/playback/audio_source_node.d.ts +10 -10
- package/lib/audio/playback/audio_source_worklet_module_loader.d.ts +4 -4
- package/lib/audio/playback/inddb_audio_buffer_source_node.d.ts +21 -21
- package/lib/audio/playback/net_audio_buffer_source_node.d.ts +27 -27
- package/lib/audio/playback/player.d.ts +65 -65
- package/lib/audio/ui/audio_canvas_layer_comp.d.ts +68 -68
- package/lib/audio/ui/audio_display_control.d.ts +25 -25
- package/lib/audio/ui/audio_display_scroll_pane.d.ts +26 -26
- package/lib/audio/ui/audiosignal.d.ts +30 -30
- package/lib/audio/ui/common.d.ts +11 -11
- package/lib/audio/ui/container.d.ts +63 -63
- package/lib/audio/ui/livelevel.d.ts +60 -60
- package/lib/audio/ui/scroll_pane_horizontal.d.ts +5 -5
- package/lib/audio/ui/sonagram.d.ts +37 -37
- package/lib/db/inddb.d.ts +21 -21
- package/lib/dsp/utils.d.ts +19 -19
- package/lib/io/BinaryReader.d.ts +18 -18
- package/lib/io/BinaryWriter.d.ts +15 -15
- package/lib/io/stream.d.ts +59 -59
- package/lib/math/2d/geometry.d.ts +18 -18
- package/lib/math/complex.d.ts +17 -17
- package/lib/math/dft.d.ts +22 -22
- package/lib/media/utils.d.ts +3 -3
- package/lib/net/uploader.d.ts +81 -81
- package/lib/recorder_component.d.ts +16 -16
- package/lib/speechrecorder/project/project.d.ts +59 -59
- package/lib/speechrecorder/project/project.service.d.ts +21 -21
- package/lib/speechrecorder/recording.d.ts +51 -51
- package/lib/speechrecorder/recordings/basic_recording.service.d.ts +27 -27
- package/lib/speechrecorder/recordings/recordings.service.d.ts +48 -48
- package/lib/speechrecorder/script/script.d.ts +80 -79
- package/lib/speechrecorder/script/script.service.d.ts +16 -16
- package/lib/speechrecorder/session/audiorecorder.d.ts +122 -122
- package/lib/speechrecorder/session/basicrecorder.d.ts +139 -139
- package/lib/speechrecorder/session/controlpanel.d.ts +109 -107
- package/lib/speechrecorder/session/item.d.ts +12 -12
- package/lib/speechrecorder/session/progress.d.ts +17 -17
- package/lib/speechrecorder/session/prompting.d.ts +121 -121
- package/lib/speechrecorder/session/recorder_combi_pane.d.ts +32 -32
- package/lib/speechrecorder/session/recording_file_cache.d.ts +33 -33
- package/lib/speechrecorder/session/recording_list.d.ts +24 -24
- package/lib/speechrecorder/session/recordingfile/recording-file-meta.component.d.ts +15 -15
- package/lib/speechrecorder/session/recordingfile/recording-file-navi.component.d.ts +20 -20
- package/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.d.ts +31 -31
- package/lib/speechrecorder/session/recordingfile/recording-file-view.component.d.ts +55 -55
- package/lib/speechrecorder/session/recordingfile/recording-file.d.ts +7 -7
- package/lib/speechrecorder/session/recordingfile/recordingfile-service.d.ts +24 -24
- package/lib/speechrecorder/session/session.d.ts +15 -15
- package/lib/speechrecorder/session/session.service.d.ts +20 -20
- package/lib/speechrecorder/session/session_finished_dialog.d.ts +10 -10
- package/lib/speechrecorder/session/sessionmanager.d.ts +129 -123
- package/lib/speechrecorder/session/warning_bar.d.ts +8 -8
- package/lib/speechrecorder/spruploader.d.ts +11 -11
- package/lib/speechrecorder/startstopsignal/startstopsignal.d.ts +10 -10
- package/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.d.ts +11 -11
- package/lib/speechrecorderng.component.d.ts +61 -61
- package/lib/speechrecorderng.module.d.ts +56 -56
- package/lib/spr.config.d.ts +17 -17
- package/lib/spr.module.version.d.ts +1 -1
- package/lib/ui/canvas_layer_comp.d.ts +13 -13
- package/lib/ui/message_dialog.d.ts +10 -10
- package/lib/ui/recordingitem_display.d.ts +84 -84
- package/lib/ui/responsive_component.d.ts +9 -9
- package/lib/utils/scrollIntoViewToBottom.d.ts +9 -9
- package/lib/utils/ua-parser.d.ts +43 -43
- package/lib/utils/utils.d.ts +19 -19
- package/lib/utils/wake_lock.d.ts +23 -23
- package/lib/utils/wake_lock_media.d.ts +1 -1
- package/package.json +17 -23
- package/public-api.d.ts +33 -33
- package/esm2020/lib/action/action.mjs +0 -73
- package/esm2020/lib/audio/audio_data_holder.mjs +0 -264
- package/esm2020/lib/audio/capture/capture.mjs +0 -855
- package/esm2020/lib/audio/context.mjs +0 -79
- package/esm2020/lib/audio/impl/wavformat.mjs +0 -6
- package/esm2020/lib/audio/impl/wavwriter.mjs +0 -105
- package/esm2020/lib/audio/inddb_audio_buffer.mjs +0 -508
- package/esm2020/lib/audio/net_audio_buffer.mjs +0 -293
- package/esm2020/lib/audio/playback/audio_source_node.mjs +0 -18
- package/esm2020/lib/audio/playback/audio_source_worklet_module_loader.mjs +0 -167
- package/esm2020/lib/audio/playback/player.mjs +0 -402
- package/esm2020/lib/audio/ui/audio_canvas_layer_comp.mjs +0 -347
- package/esm2020/lib/audio/ui/container.mjs +0 -414
- package/esm2020/lib/audio/ui/scroll_pane_horizontal.mjs +0 -11
- package/esm2020/lib/audio/ui/sonagram.mjs +0 -900
- package/esm2020/lib/db/inddb.mjs +0 -120
- package/esm2020/lib/dsp/utils.mjs +0 -48
- package/esm2020/lib/io/BinaryWriter.mjs +0 -74
- package/esm2020/lib/math/complex.mjs +0 -58
- package/esm2020/lib/net/uploader.mjs +0 -367
- package/esm2020/lib/speechrecorder/project/project.mjs +0 -49
- package/esm2020/lib/speechrecorder/project/project.service.mjs +0 -64
- package/esm2020/lib/speechrecorder/recordings/basic_recording.service.mjs +0 -216
- package/esm2020/lib/speechrecorder/recordings/recordings.service.mjs +0 -1014
- package/esm2020/lib/speechrecorder/session/audiorecorder.mjs +0 -1179
- package/esm2020/lib/speechrecorder/session/basicrecorder.mjs +0 -666
- package/esm2020/lib/speechrecorder/session/controlpanel.mjs +0 -409
- package/esm2020/lib/speechrecorder/session/recording_file_cache.mjs +0 -195
- package/esm2020/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +0 -288
- package/esm2020/lib/speechrecorder/session/session.service.mjs +0 -69
- package/esm2020/lib/speechrecorder/session/sessionmanager.mjs +0 -1333
- package/esm2020/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +0 -57
- package/esm2020/lib/ui/recordingitem_display.mjs +0 -253
- package/esm2020/lib/utils/ua-parser.mjs +0 -190
- package/esm2020/lib/utils/utils.mjs +0 -105
- package/esm2020/lib/utils/wake_lock.mjs +0 -114
- package/fesm2015/speechrecorderng.mjs +0 -17708
- package/fesm2015/speechrecorderng.mjs.map +0 -1
- package/fesm2020/speechrecorderng.mjs.map +0 -1
|
@@ -1,195 +1,194 @@
|
|
|
1
|
-
import { Component, ViewChild, Input, } from '@angular/core';
|
|
2
|
-
import { AudioClip } from './persistor';
|
|
3
|
-
import { AudioPlayer, EventType } from './playback/player';
|
|
4
|
-
import { Action } from "../action/action";
|
|
5
|
-
import { AudioDisplayScrollPane } from "./ui/audio_display_scroll_pane";
|
|
6
|
-
import { AudioContextProvider } from "./context";
|
|
7
|
-
import { AudioBufferSource, AudioDataHolder } from "./audio_data_holder";
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "@angular/router";
|
|
10
|
-
import * as i2 from "./ui/audio_display_scroll_pane";
|
|
11
|
-
import * as i3 from "./ui/audio_display_control";
|
|
12
|
-
export class AudioDisplayPlayer {
|
|
13
|
-
constructor(route, ref, eRef) {
|
|
14
|
-
this.route = route;
|
|
15
|
-
this.ref = ref;
|
|
16
|
-
this.eRef = eRef;
|
|
17
|
-
this._audioUrl = null;
|
|
18
|
-
this._audioClip = null;
|
|
19
|
-
this.currentLoader = null;
|
|
20
|
-
this.parentE = this.eRef.nativeElement;
|
|
21
|
-
this.playStartAction = new Action("Start");
|
|
22
|
-
this.playSelectionAction = new Action("Play selected");
|
|
23
|
-
this.playStopAction = new Action("Stop");
|
|
24
|
-
this.status = "Player created.";
|
|
25
|
-
}
|
|
26
|
-
ngOnInit() {
|
|
27
|
-
this.zoomSelectedAction = this.audioDisplayScrollPane.zoomSelectedAction;
|
|
28
|
-
this.zoomFitToPanelAction = this.audioDisplayScrollPane.zoomFitToPanelAction;
|
|
29
|
-
this.zoomOutAction = this.audioDisplayScrollPane.zoomOutAction;
|
|
30
|
-
this.zoomInAction = this.audioDisplayScrollPane.zoomInAction;
|
|
31
|
-
this.ap = new AudioPlayer(this);
|
|
32
|
-
}
|
|
33
|
-
ngAfterViewInit() {
|
|
34
|
-
if (this.ap) {
|
|
35
|
-
this.playStartAction.onAction = () => {
|
|
36
|
-
console.debug("Start action, player: " + this.ap);
|
|
37
|
-
this.ap?.start();
|
|
38
|
-
};
|
|
39
|
-
this.playSelectionAction.onAction = () => this.ap?.startSelected();
|
|
40
|
-
this.playStopAction.onAction = () => this.ap?.stop();
|
|
41
|
-
}
|
|
42
|
-
this.layout();
|
|
43
|
-
let heightListener = new MutationObserver((mrs, mo) => {
|
|
44
|
-
mrs.forEach((mr) => {
|
|
45
|
-
if ('attributes' === mr.type && ('class' === mr.attributeName || 'style' === mr.attributeName)) {
|
|
46
|
-
this.layout();
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
heightListener.observe(this.parentE, { attributes: true, childList: true, characterData: true });
|
|
51
|
-
this.route.queryParams.subscribe((params) => {
|
|
52
|
-
if (params['url']) {
|
|
53
|
-
this.audioUrl = params['url'];
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
layout() {
|
|
58
|
-
this.audioDisplayScrollPane.layout();
|
|
59
|
-
}
|
|
60
|
-
get audioUrl() {
|
|
61
|
-
return this._audioUrl;
|
|
62
|
-
}
|
|
63
|
-
set audioUrl(value) {
|
|
64
|
-
if (this.ap) {
|
|
65
|
-
this.ap.stop();
|
|
66
|
-
}
|
|
67
|
-
this._audioUrl = value;
|
|
68
|
-
this.load();
|
|
69
|
-
}
|
|
70
|
-
started() {
|
|
71
|
-
//console.debug("Play started");
|
|
72
|
-
this.status = 'Playing...';
|
|
73
|
-
}
|
|
74
|
-
load() {
|
|
75
|
-
if (this.currentLoader) {
|
|
76
|
-
this.currentLoader.abort();
|
|
77
|
-
this.currentLoader = null;
|
|
78
|
-
}
|
|
79
|
-
if (this._audioUrl) {
|
|
80
|
-
//this.statusMsg.innerHTML = 'Connecting...';
|
|
81
|
-
this.currentLoader = new XMLHttpRequest();
|
|
82
|
-
this.currentLoader.open("GET", this._audioUrl, true);
|
|
83
|
-
this.currentLoader.responseType = "arraybuffer";
|
|
84
|
-
this.currentLoader.onload = (e) => {
|
|
85
|
-
if (this.currentLoader) {
|
|
86
|
-
var data = this.currentLoader.response; // not responseText
|
|
87
|
-
//console.debug("Received data ", data.byteLength);
|
|
88
|
-
this.currentLoader = null;
|
|
89
|
-
this.loaded(data);
|
|
90
|
-
}
|
|
91
|
-
};
|
|
92
|
-
this.currentLoader.onerror = (e) => {
|
|
93
|
-
console.error("Error downloading ...");
|
|
94
|
-
this.currentLoader = null;
|
|
95
|
-
};
|
|
96
|
-
this.currentLoader.send();
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
loaded(data) {
|
|
100
|
-
//console.debug("Loaded");
|
|
101
|
-
this.status = 'Audio file loaded.';
|
|
102
|
-
//console.debug("Received data ", data.byteLength);
|
|
103
|
-
AudioContextProvider.decodeAudioData(data).then(audioBuffer => {
|
|
104
|
-
//console.debug("Audio Buffer Samplerate: ", audioBuffer.sampleRate)
|
|
105
|
-
let as = new AudioBufferSource(audioBuffer);
|
|
106
|
-
let adh = new AudioDataHolder(as);
|
|
107
|
-
this.audioClip = new AudioClip(adh);
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
set audioData(audioData) {
|
|
111
|
-
this.audioDisplayScrollPane.audioData = audioData;
|
|
112
|
-
if (audioData) {
|
|
113
|
-
let clip = new AudioClip(audioData);
|
|
114
|
-
if (this.ap) {
|
|
115
|
-
this.ap.audioClip = clip;
|
|
116
|
-
this.playStartAction.disabled = false;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
this.playStartAction.disabled = true;
|
|
121
|
-
if (this.ap) {
|
|
122
|
-
this.ap.audioClip = null;
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
this.playSelectionAction.disabled = true;
|
|
126
|
-
}
|
|
127
|
-
startSelectionDisabled() {
|
|
128
|
-
return !(this._audioClip && this.ap != null && !this.playStartAction.disabled && this._audioClip.selection);
|
|
129
|
-
}
|
|
130
|
-
set audioClip(audioClip) {
|
|
131
|
-
this._audioClip = audioClip;
|
|
132
|
-
let audioData = null;
|
|
133
|
-
if (audioClip) {
|
|
134
|
-
audioData = audioClip.audioDataHolder;
|
|
135
|
-
if (this._audioClip) {
|
|
136
|
-
this._audioClip.addSelectionObserver((ac) => {
|
|
137
|
-
this.playSelectionAction.disabled = this.startSelectionDisabled();
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
if (audioData) {
|
|
142
|
-
//console.debug("Play start action (by AudioDisplayPlayer::set audioClip) disabled: "+(!this.ap));
|
|
143
|
-
this.playStartAction.disabled = (!this.ap);
|
|
144
|
-
this.playSelectionAction.disabled = this.startSelectionDisabled();
|
|
145
|
-
}
|
|
146
|
-
else {
|
|
147
|
-
this.playStartAction.disabled = true;
|
|
148
|
-
this.playSelectionAction.disabled = true;
|
|
149
|
-
}
|
|
150
|
-
this.audioDisplayScrollPane.audioClip = audioClip;
|
|
151
|
-
if (this.ap) {
|
|
152
|
-
this.ap.audioClip = audioClip;
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
get audioClip() {
|
|
156
|
-
return this._audioClip;
|
|
157
|
-
}
|
|
158
|
-
updatePlayPosition() {
|
|
159
|
-
if (this.ap && this.ap.playPositionFrames) {
|
|
160
|
-
this.audioDisplayScrollPane.playFramePosition = this.ap.playPositionFrames;
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
audioPlayerUpdate(e) {
|
|
164
|
-
if (EventType.STARTED === e.type) {
|
|
165
|
-
this.status = 'Playback...';
|
|
166
|
-
this.updateTimerId = window.setInterval(() => this.updatePlayPosition(), 50);
|
|
167
|
-
this.playStartAction.disabled = true;
|
|
168
|
-
this.playSelectionAction.disabled = true;
|
|
169
|
-
this.playStopAction.disabled = false;
|
|
170
|
-
}
|
|
171
|
-
else if (EventType.ENDED === e.type) {
|
|
172
|
-
this.status = 'Ready.';
|
|
173
|
-
window.clearInterval(this.updateTimerId);
|
|
174
|
-
this.playStartAction.disabled = false;
|
|
175
|
-
this.playSelectionAction.disabled = this.startSelectionDisabled();
|
|
176
|
-
this.playStopAction.disabled = true;
|
|
177
|
-
}
|
|
178
|
-
else if (EventType.ERROR === e.type) {
|
|
179
|
-
this.status = 'Error.';
|
|
180
|
-
window.clearInterval(this.updateTimerId);
|
|
181
|
-
this.playStartAction.disabled = false;
|
|
182
|
-
this.playSelectionAction.disabled = this.startSelectionDisabled();
|
|
183
|
-
this.playStopAction.disabled = true;
|
|
184
|
-
}
|
|
185
|
-
this.ref.detectChanges();
|
|
186
|
-
}
|
|
187
|
-
error() {
|
|
188
|
-
this.status = 'ERROR';
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
AudioDisplayPlayer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: AudioDisplayPlayer, selector: "app-audiodisplayplayer", inputs: { playStartAction: "playStartAction", playStopAction: "playStopAction", playSelectionAction: "playSelectionAction", autoPlayOnSelectToggleAction: "autoPlayOnSelectToggleAction", audioData: "audioData", audioClip: "audioClip" }, viewQueries: [{ propertyName: "audioDisplayScrollPane", first: true, predicate: AudioDisplayScrollPane, descendants: true, static: true }], ngImport: i0, template: `
|
|
1
|
+
import { Component, ViewChild, Input, } from '@angular/core';
|
|
2
|
+
import { AudioClip } from './persistor';
|
|
3
|
+
import { AudioPlayer, EventType } from './playback/player';
|
|
4
|
+
import { Action } from "../action/action";
|
|
5
|
+
import { AudioDisplayScrollPane } from "./ui/audio_display_scroll_pane";
|
|
6
|
+
import { AudioContextProvider } from "./context";
|
|
7
|
+
import { AudioBufferSource, AudioDataHolder } from "./audio_data_holder";
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "@angular/router";
|
|
10
|
+
import * as i2 from "./ui/audio_display_scroll_pane";
|
|
11
|
+
import * as i3 from "./ui/audio_display_control";
|
|
12
|
+
export class AudioDisplayPlayer {
|
|
13
|
+
constructor(route, ref, eRef) {
|
|
14
|
+
this.route = route;
|
|
15
|
+
this.ref = ref;
|
|
16
|
+
this.eRef = eRef;
|
|
17
|
+
this._audioUrl = null;
|
|
18
|
+
this._audioClip = null;
|
|
19
|
+
this.currentLoader = null;
|
|
20
|
+
this.parentE = this.eRef.nativeElement;
|
|
21
|
+
this.playStartAction = new Action("Start");
|
|
22
|
+
this.playSelectionAction = new Action("Play selected");
|
|
23
|
+
this.playStopAction = new Action("Stop");
|
|
24
|
+
this.status = "Player created.";
|
|
25
|
+
}
|
|
26
|
+
ngOnInit() {
|
|
27
|
+
this.zoomSelectedAction = this.audioDisplayScrollPane.zoomSelectedAction;
|
|
28
|
+
this.zoomFitToPanelAction = this.audioDisplayScrollPane.zoomFitToPanelAction;
|
|
29
|
+
this.zoomOutAction = this.audioDisplayScrollPane.zoomOutAction;
|
|
30
|
+
this.zoomInAction = this.audioDisplayScrollPane.zoomInAction;
|
|
31
|
+
this.ap = new AudioPlayer(this);
|
|
32
|
+
}
|
|
33
|
+
ngAfterViewInit() {
|
|
34
|
+
if (this.ap) {
|
|
35
|
+
this.playStartAction.onAction = () => {
|
|
36
|
+
console.debug("Start action, player: " + this.ap);
|
|
37
|
+
this.ap?.start();
|
|
38
|
+
};
|
|
39
|
+
this.playSelectionAction.onAction = () => this.ap?.startSelected();
|
|
40
|
+
this.playStopAction.onAction = () => this.ap?.stop();
|
|
41
|
+
}
|
|
42
|
+
this.layout();
|
|
43
|
+
let heightListener = new MutationObserver((mrs, mo) => {
|
|
44
|
+
mrs.forEach((mr) => {
|
|
45
|
+
if ('attributes' === mr.type && ('class' === mr.attributeName || 'style' === mr.attributeName)) {
|
|
46
|
+
this.layout();
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
heightListener.observe(this.parentE, { attributes: true, childList: true, characterData: true });
|
|
51
|
+
this.route.queryParams.subscribe((params) => {
|
|
52
|
+
if (params['url']) {
|
|
53
|
+
this.audioUrl = params['url'];
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
layout() {
|
|
58
|
+
this.audioDisplayScrollPane.layout();
|
|
59
|
+
}
|
|
60
|
+
get audioUrl() {
|
|
61
|
+
return this._audioUrl;
|
|
62
|
+
}
|
|
63
|
+
set audioUrl(value) {
|
|
64
|
+
if (this.ap) {
|
|
65
|
+
this.ap.stop();
|
|
66
|
+
}
|
|
67
|
+
this._audioUrl = value;
|
|
68
|
+
this.load();
|
|
69
|
+
}
|
|
70
|
+
started() {
|
|
71
|
+
//console.debug("Play started");
|
|
72
|
+
this.status = 'Playing...';
|
|
73
|
+
}
|
|
74
|
+
load() {
|
|
75
|
+
if (this.currentLoader) {
|
|
76
|
+
this.currentLoader.abort();
|
|
77
|
+
this.currentLoader = null;
|
|
78
|
+
}
|
|
79
|
+
if (this._audioUrl) {
|
|
80
|
+
//this.statusMsg.innerHTML = 'Connecting...';
|
|
81
|
+
this.currentLoader = new XMLHttpRequest();
|
|
82
|
+
this.currentLoader.open("GET", this._audioUrl, true);
|
|
83
|
+
this.currentLoader.responseType = "arraybuffer";
|
|
84
|
+
this.currentLoader.onload = (e) => {
|
|
85
|
+
if (this.currentLoader) {
|
|
86
|
+
var data = this.currentLoader.response; // not responseText
|
|
87
|
+
//console.debug("Received data ", data.byteLength);
|
|
88
|
+
this.currentLoader = null;
|
|
89
|
+
this.loaded(data);
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
this.currentLoader.onerror = (e) => {
|
|
93
|
+
console.error("Error downloading ...");
|
|
94
|
+
this.currentLoader = null;
|
|
95
|
+
};
|
|
96
|
+
this.currentLoader.send();
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
loaded(data) {
|
|
100
|
+
//console.debug("Loaded");
|
|
101
|
+
this.status = 'Audio file loaded.';
|
|
102
|
+
//console.debug("Received data ", data.byteLength);
|
|
103
|
+
AudioContextProvider.decodeAudioData(data).then(audioBuffer => {
|
|
104
|
+
//console.debug("Audio Buffer Samplerate: ", audioBuffer.sampleRate)
|
|
105
|
+
let as = new AudioBufferSource(audioBuffer);
|
|
106
|
+
let adh = new AudioDataHolder(as);
|
|
107
|
+
this.audioClip = new AudioClip(adh);
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
set audioData(audioData) {
|
|
111
|
+
this.audioDisplayScrollPane.audioData = audioData;
|
|
112
|
+
if (audioData) {
|
|
113
|
+
let clip = new AudioClip(audioData);
|
|
114
|
+
if (this.ap) {
|
|
115
|
+
this.ap.audioClip = clip;
|
|
116
|
+
this.playStartAction.disabled = false;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
this.playStartAction.disabled = true;
|
|
121
|
+
if (this.ap) {
|
|
122
|
+
this.ap.audioClip = null;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
this.playSelectionAction.disabled = true;
|
|
126
|
+
}
|
|
127
|
+
startSelectionDisabled() {
|
|
128
|
+
return !(this._audioClip && this.ap != null && !this.playStartAction.disabled && this._audioClip.selection);
|
|
129
|
+
}
|
|
130
|
+
set audioClip(audioClip) {
|
|
131
|
+
this._audioClip = audioClip;
|
|
132
|
+
let audioData = null;
|
|
133
|
+
if (audioClip) {
|
|
134
|
+
audioData = audioClip.audioDataHolder;
|
|
135
|
+
if (this._audioClip) {
|
|
136
|
+
this._audioClip.addSelectionObserver((ac) => {
|
|
137
|
+
this.playSelectionAction.disabled = this.startSelectionDisabled();
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
if (audioData) {
|
|
142
|
+
//console.debug("Play start action (by AudioDisplayPlayer::set audioClip) disabled: "+(!this.ap));
|
|
143
|
+
this.playStartAction.disabled = (!this.ap);
|
|
144
|
+
this.playSelectionAction.disabled = this.startSelectionDisabled();
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
this.playStartAction.disabled = true;
|
|
148
|
+
this.playSelectionAction.disabled = true;
|
|
149
|
+
}
|
|
150
|
+
this.audioDisplayScrollPane.audioClip = audioClip;
|
|
151
|
+
if (this.ap) {
|
|
152
|
+
this.ap.audioClip = audioClip;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
get audioClip() {
|
|
156
|
+
return this._audioClip;
|
|
157
|
+
}
|
|
158
|
+
updatePlayPosition() {
|
|
159
|
+
if (this.ap && this.ap.playPositionFrames) {
|
|
160
|
+
this.audioDisplayScrollPane.playFramePosition = this.ap.playPositionFrames;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
audioPlayerUpdate(e) {
|
|
164
|
+
if (EventType.STARTED === e.type) {
|
|
165
|
+
this.status = 'Playback...';
|
|
166
|
+
this.updateTimerId = window.setInterval(() => this.updatePlayPosition(), 50);
|
|
167
|
+
this.playStartAction.disabled = true;
|
|
168
|
+
this.playSelectionAction.disabled = true;
|
|
169
|
+
this.playStopAction.disabled = false;
|
|
170
|
+
}
|
|
171
|
+
else if (EventType.ENDED === e.type) {
|
|
172
|
+
this.status = 'Ready.';
|
|
173
|
+
window.clearInterval(this.updateTimerId);
|
|
174
|
+
this.playStartAction.disabled = false;
|
|
175
|
+
this.playSelectionAction.disabled = this.startSelectionDisabled();
|
|
176
|
+
this.playStopAction.disabled = true;
|
|
177
|
+
}
|
|
178
|
+
else if (EventType.ERROR === e.type) {
|
|
179
|
+
this.status = 'Error.';
|
|
180
|
+
window.clearInterval(this.updateTimerId);
|
|
181
|
+
this.playStartAction.disabled = false;
|
|
182
|
+
this.playSelectionAction.disabled = this.startSelectionDisabled();
|
|
183
|
+
this.playStopAction.disabled = true;
|
|
184
|
+
}
|
|
185
|
+
this.ref.detectChanges();
|
|
186
|
+
}
|
|
187
|
+
error() {
|
|
188
|
+
this.status = 'ERROR';
|
|
189
|
+
}
|
|
190
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AudioDisplayPlayer, deps: [{ token: i1.ActivatedRoute }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
191
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: AudioDisplayPlayer, selector: "app-audiodisplayplayer", inputs: { playStartAction: "playStartAction", playStopAction: "playStopAction", playSelectionAction: "playSelectionAction", autoPlayOnSelectToggleAction: "autoPlayOnSelectToggleAction", audioData: "audioData", audioClip: "audioClip" }, viewQueries: [{ propertyName: "audioDisplayScrollPane", first: true, predicate: AudioDisplayScrollPane, descendants: true, static: true }], ngImport: i0, template: `
|
|
193
192
|
|
|
194
193
|
<audio-display-scroll-pane #audioDisplayScrollPane></audio-display-scroll-pane>
|
|
195
194
|
|
|
@@ -202,9 +201,10 @@ AudioDisplayPlayer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", ver
|
|
|
202
201
|
[zoomOutAction]="zoomOutAction"
|
|
203
202
|
[zoomSelectedAction]="zoomSelectedAction"
|
|
204
203
|
[zoomFitToPanelAction]="zoomFitToPanelAction"></audio-display-control><p>{{status}}
|
|
205
|
-
`, isInline: true, styles: [":host{display:flex;flex-direction:column;position:absolute;bottom:0;height:100%;width:100%;overflow:hidden;padding:20px;z-index:5;box-sizing:border-box;background-color:#000000bf}\n"], dependencies: [{ kind: "component", type: i2.AudioDisplayScrollPane, selector: "audio-display-scroll-pane", inputs: ["audioClip"], outputs: ["zoomInAction", "zoomOutAction", "zoomSelectedAction", "zoomFitToPanelAction"] }, { kind: "component", type: i3.AudioDisplayControl, selector: "audio-display-control", inputs: ["audioClip", "playStartAction", "playSelectionAction", "playStopAction", "zoomInAction", "zoomOutAction", "zoomFitToPanelAction", "zoomSelectedAction", "autoPlayOnSelectToggleAction"] }] });
|
|
206
|
-
|
|
207
|
-
|
|
204
|
+
`, isInline: true, styles: [":host{display:flex;flex-direction:column;position:absolute;bottom:0;height:100%;width:100%;overflow:hidden;padding:20px;z-index:5;box-sizing:border-box;background-color:#000000bf}\n"], dependencies: [{ kind: "component", type: i2.AudioDisplayScrollPane, selector: "audio-display-scroll-pane", inputs: ["audioClip"], outputs: ["zoomInAction", "zoomOutAction", "zoomSelectedAction", "zoomFitToPanelAction"] }, { kind: "component", type: i3.AudioDisplayControl, selector: "audio-display-control", inputs: ["audioClip", "playStartAction", "playSelectionAction", "playStopAction", "zoomInAction", "zoomOutAction", "zoomFitToPanelAction", "zoomSelectedAction", "autoPlayOnSelectToggleAction"] }] }); }
|
|
205
|
+
}
|
|
206
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AudioDisplayPlayer, decorators: [{
|
|
207
|
+
type: Component,
|
|
208
208
|
args: [{ selector: 'app-audiodisplayplayer', template: `
|
|
209
209
|
|
|
210
210
|
<audio-display-scroll-pane #audioDisplayScrollPane></audio-display-scroll-pane>
|
|
@@ -218,21 +218,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
218
218
|
[zoomOutAction]="zoomOutAction"
|
|
219
219
|
[zoomSelectedAction]="zoomSelectedAction"
|
|
220
220
|
[zoomFitToPanelAction]="zoomFitToPanelAction"></audio-display-control><p>{{status}}
|
|
221
|
-
`, styles: [":host{display:flex;flex-direction:column;position:absolute;bottom:0;height:100%;width:100%;overflow:hidden;padding:20px;z-index:5;box-sizing:border-box;background-color:#000000bf}\n"] }]
|
|
222
|
-
}], ctorParameters:
|
|
223
|
-
type: Input
|
|
224
|
-
}], playStopAction: [{
|
|
225
|
-
type: Input
|
|
226
|
-
}], playSelectionAction: [{
|
|
227
|
-
type: Input
|
|
228
|
-
}], autoPlayOnSelectToggleAction: [{
|
|
229
|
-
type: Input
|
|
230
|
-
}], audioDisplayScrollPane: [{
|
|
231
|
-
type: ViewChild,
|
|
232
|
-
args: [AudioDisplayScrollPane, { static: true }]
|
|
233
|
-
}], audioData: [{
|
|
234
|
-
type: Input
|
|
235
|
-
}], audioClip: [{
|
|
236
|
-
type: Input
|
|
237
|
-
}] } });
|
|
238
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaW9fcGxheWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL2F1ZGlvX3BsYXllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFNBQVMsRUFFTSxLQUFLLEdBQ3ZCLE1BQU0sZUFBZSxDQUFBO0FBRXRCLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxhQUFhLENBQUE7QUFDckMsT0FBTyxFQUFDLFdBQVcsRUFBeUMsU0FBUyxFQUFDLE1BQU0sbUJBQW1CLENBQUE7QUFFL0YsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ3hDLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUMvQyxPQUFPLEVBQUMsaUJBQWlCLEVBQUUsZUFBZSxFQUFDLE1BQU0scUJBQXFCLENBQUM7Ozs7O0FBb0N2RSxNQUFNLE9BQU8sa0JBQWtCO0lBK0I3QixZQUFzQixLQUFxQixFQUFZLEdBQXNCLEVBQVcsSUFBZTtRQUFqRixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUFZLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQVcsU0FBSSxHQUFKLElBQUksQ0FBVztRQTlCL0YsY0FBUyxHQUFjLElBQUksQ0FBQztRQWtCNUIsZUFBVSxHQUFnQixJQUFJLENBQUM7UUFJdkMsa0JBQWEsR0FBd0IsSUFBSSxDQUFDO1FBU3hDLElBQUksQ0FBQyxPQUFPLEdBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDckMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsbUJBQW1CLEdBQUMsSUFBSSxNQUFNLENBQUMsZUFBZSxDQUFDLENB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Q0FBQztZQUN6QyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsR0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQTtZQUMvRCxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7U0FDckM7UUFHRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBRTNCLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7SUFDeEIsQ0FBQzs7Z0hBak9VLGtCQUFrQjtvR0FBbEIsa0JBQWtCLGtXQTRCbEIsc0JBQXNCLDhEQTFEdkI7Ozs7Ozs7Ozs7Ozs7R0FhVDs0RkFpQlUsa0JBQWtCO2tCQWxDOUIsU0FBUzsrQkFFRSx3QkFBd0IsWUFFeEI7Ozs7Ozs7Ozs7Ozs7R0FhVDs4SkF1QkQsZUFBZTtzQkFEZCxLQUFLO2dCQUdOLGNBQWM7c0JBRGIsS0FBSztnQkFHTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBR04sNEJBQTRCO3NCQUQzQixLQUFLO2dCQWtCRSxzQkFBc0I7c0JBRDdCLFNBQVM7dUJBQUMsc0JBQXNCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQThHL0MsU0FBUztzQkFEWixLQUFLO2dCQXVCRixTQUFTO3NCQURaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgVmlld0NoaWxkLFxyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBBZnRlclZpZXdJbml0LCBJbnB1dCwgT25Jbml0LCBFbGVtZW50UmVmLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXHJcblxyXG5pbXBvcnQge0F1ZGlvQ2xpcH0gZnJvbSAnLi9wZXJzaXN0b3InXHJcbmltcG9ydCB7QXVkaW9QbGF5ZXIsIEF1ZGlvUGxheWVyTGlzdGVuZXIsIEF1ZGlvUGxheWVyRXZlbnQsIEV2ZW50VHlwZX0gZnJvbSAnLi9wbGF5YmFjay9wbGF5ZXInXHJcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFBhcmFtc30gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQge0FjdGlvbn0gZnJvbSBcIi4uL2FjdGlvbi9hY3Rpb25cIjtcclxuaW1wb3J0IHtBdWRpb0Rpc3BsYXlTY3JvbGxQYW5lfSBmcm9tIFwiLi91aS9hdWRpb19kaXNwbGF5X3Njcm9sbF9wYW5lXCI7XHJcbmltcG9ydCB7QXVkaW9Db250ZXh0UHJvdmlkZXJ9IGZyb20gXCIuL2NvbnRleHRcIjtcclxuaW1wb3J0IHtBdWRpb0J1ZmZlclNvdXJjZSwgQXVkaW9EYXRhSG9sZGVyfSBmcm9tIFwiLi9hdWRpb19kYXRhX2hvbGRlclwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblxyXG4gIHNlbGVjdG9yOiAnYXBwLWF1ZGlvZGlzcGxheXBsYXllcicsXHJcblxyXG4gIHRlbXBsYXRlOiBgXHJcblxyXG4gICAgPGF1ZGlvLWRpc3BsYXktc2Nyb2xsLXBhbmUgI2F1ZGlvRGlzcGxheVNjcm9sbFBhbmU+PC9hdWRpby1kaXNwbGF5LXNjcm9sbC1wYW5lPlxyXG5cclxuICAgIDxhdWRpby1kaXNwbGF5LWNvbnRyb2wgW2F1ZGlvQ2xpcF09XCJhdWRpb0NsaXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGF5U3RhcnRBY3Rpb25dPVwicGxheVN0YXJ0QWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxheVNlbGVjdGlvbkFjdGlvbl09XCJwbGF5U2VsZWN0aW9uQWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxheVN0b3BBY3Rpb25dPVwicGxheVN0b3BBY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvUGxheU9uU2VsZWN0VG9nZ2xlQWN0aW9uXT1cImFwPy5hdXRvUGxheU9uU2VsZWN0VG9nZ2xlQWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbem9vbUluQWN0aW9uXT1cInpvb21JbkFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3pvb21PdXRBY3Rpb25dPVwiem9vbU91dEFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3pvb21TZWxlY3RlZEFjdGlvbl09XCJ6b29tU2VsZWN0ZWRBY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt6b29tRml0VG9QYW5lbEFjdGlvbl09XCJ6b29tRml0VG9QYW5lbEFjdGlvblwiPjwvYXVkaW8tZGlzcGxheS1jb250cm9sPjxwPnt7c3RhdHVzfX1cclxuICBgLFxyXG4gIHN0eWxlczogW1xyXG4gICAgICBgOmhvc3Qge1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgIGJvdHRvbTogMHB4O1xyXG4gICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgICBwYWRkaW5nOiAyMHB4O1xyXG4gICAgICB6LWluZGV4OiA1O1xyXG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNzUpXHJcbiAgICB9YF1cclxuXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdWRpb0Rpc3BsYXlQbGF5ZXIgaW1wbGVtZW50cyBBdWRpb1BsYXllckxpc3RlbmVyLCBPbkluaXQsQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgcHJpdmF0ZSBfYXVkaW9Vcmw6IHN0cmluZ3xudWxsPW51bGw7XHJcblxyXG4gIHBhcmVudEU6IEhUTUxFbGVtZW50O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHBsYXlTdGFydEFjdGlvbjogQWN0aW9uPHZvaWQ+O1xyXG4gIEBJbnB1dCgpXHJcbiAgcGxheVN0b3BBY3Rpb246IEFjdGlvbjx2b2lkPjtcclxuICBASW5wdXQoKVxyXG4gIHBsYXlTZWxlY3Rpb25BY3Rpb246QWN0aW9uPHZvaWQ+XHJcbiAgQElucHV0KClcclxuICBhdXRvUGxheU9uU2VsZWN0VG9nZ2xlQWN0aW9uITpBY3Rpb248Ym9vbGVhbj47XHJcblxyXG4gIHpvb21GaXRUb1BhbmVsQWN0aW9uITpBY3Rpb248dm9pZD47XHJcbiAgem9vbVNlbGVjdGVkQWN0aW9uITpBY3Rpb248dm9pZD47XHJcbiAgem9vbUluQWN0aW9uITpBY3Rpb248dm9pZD47XHJcbiAgem9vbU91dEFjdGlvbiE6QWN0aW9uPHZvaWQ+O1xyXG5cclxuICBwcml2YXRlIF9hdWRpb0NsaXA6QXVkaW9DbGlwfG51bGw9bnVsbDtcclxuICBhcDogQXVkaW9QbGF5ZXJ8dW5kZWZpbmVkO1xyXG4gIHN0YXR1czogc3RyaW5nO1xyXG5cclxuICBjdXJyZW50TG9hZGVyOiBYTUxIdHRwUmVxdWVzdCB8IG51bGw9bnVsbDtcclxuXHJcbiAgYXVkaW86IGFueTtcclxuICB1cGRhdGVUaW1lcklkOiBhbnk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoQXVkaW9EaXNwbGF5U2Nyb2xsUGFuZSwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBwcml2YXRlIGF1ZGlvRGlzcGxheVNjcm9sbFBhbmUhOiBBdWRpb0Rpc3BsYXlTY3JvbGxQYW5lO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcm91dGU6IEFjdGl2YXRlZFJvdXRlLCBwcm90ZWN0ZWQgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZixwcm90ZWN0ZWQgZVJlZjpFbGVtZW50UmVmKSB7XHJcbiAgICB0aGlzLnBhcmVudEU9dGhpcy5lUmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICB0aGlzLnBsYXlTdGFydEFjdGlvbiA9IG5ldyBBY3Rpb24oXCJTdGFydFwiKTtcclxuICAgIHRoaXMucGxheVNlbGVjdGlvbkFjdGlvbj1uZXcgQWN0aW9uKFwiUGxheSBzZWxlY3RlZFwiKTtcclxuICAgIHRoaXMucGxheVN0b3BBY3Rpb24gPSBuZXcgQWN0aW9uKFwiU3RvcFwiKTtcclxuICAgIHRoaXMuc3RhdHVzPVwiUGxheWVyIGNyZWF0ZWQuXCI7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpe1xyXG4gICAgdGhpcy56b29tU2VsZWN0ZWRBY3Rpb249dGhpcy5hdWRpb0Rpc3BsYXlTY3JvbGxQYW5lLnpvb21TZWxlY3RlZEFjdGlvblxyXG4gICAgdGhpcy56b29tRml0VG9QYW5lbEFjdGlvbj10aGlzLmF1ZGlvRGlzcGxheVNjcm9sbFBhbmUuem9vbUZpdFRvUGFuZWxBY3Rpb247XHJcbiAgICB0aGlzLnpvb21PdXRBY3Rpb249dGhpcy5hdWRpb0Rpc3BsYXlTY3JvbGxQYW5lLnpvb21PdXRBY3Rpb247XHJcbiAgICB0aGlzLnpvb21JbkFjdGlvbj10aGlzLmF1ZGlvRGlzcGxheVNjcm9sbFBhbmUuem9vbUluQWN0aW9uO1xyXG4gICAgdGhpcy5hcCA9IG5ldyBBdWRpb1BsYXllcih0aGlzKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgaWYgKHRoaXMuYXApIHtcclxuICAgICAgICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uLm9uQWN0aW9uID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKFwiU3RhcnQgYWN0aW9uLCBwbGF5ZXI6IFwiK3RoaXMuYXApXHJcbiAgICAgICAgICAgIHRoaXMuYXA/LnN0YXJ0KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnBsYXlTZWxlY3Rpb25BY3Rpb24ub25BY3Rpb24gPSAoKSA9PiB0aGlzLmFwPy5zdGFydFNlbGVjdGVkKCk7XHJcbiAgICAgICAgICB0aGlzLnBsYXlTdG9wQWN0aW9uLm9uQWN0aW9uID0gKCkgPT4gdGhpcy5hcD8uc3RvcCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubGF5b3V0KCk7XHJcbiAgICAgIGxldCBoZWlnaHRMaXN0ZW5lcj1uZXcgTXV0YXRpb25PYnNlcnZlcigobXJzOkFycmF5PE11dGF0aW9uUmVjb3JkPixtbzpNdXRhdGlvbk9ic2VydmVyKT0+e1xyXG4gICAgICAgICAgbXJzLmZvckVhY2goKG1yOk11dGF0aW9uUmVjb3JkKT0+e1xyXG4gICAgICAgICAgICAgIGlmKCdhdHRyaWJ1dGVzJz09PW1yLnR5cGUgJiYgKCdjbGFzcyc9PT1tci5hdHRyaWJ1dGVOYW1lIHx8ICdzdHlsZSc9PT1tci5hdHRyaWJ1dGVOYW1lKSl7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubGF5b3V0KCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgfSk7XHJcbiAgICAgIGhlaWdodExpc3RlbmVyLm9ic2VydmUodGhpcy5wYXJlbnRFLHthdHRyaWJ1dGVzOiB0cnVlLGNoaWxkTGlzdDogdHJ1ZSwgY2hhcmFjdGVyRGF0YTogdHJ1ZX0pO1xyXG4gICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtczogUGFyYW1zKSA9PiB7XHJcbiAgICAgIGlmIChwYXJhbXNbJ3VybCddKSB7XHJcbiAgICAgICAgdGhpcy5hdWRpb1VybCA9IHBhcmFtc1sndXJsJ107XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbGF5b3V0KCl7XHJcbiAgICB0aGlzLmF1ZGlvRGlzcGxheVNjcm9sbFBhbmUubGF5b3V0KCk7XHJcbiAgfVxyXG5cclxuICBnZXQgYXVkaW9VcmwoKTogc3RyaW5nfG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX2F1ZGlvVXJsO1xyXG4gIH1cclxuXHJcbiAgc2V0IGF1ZGlvVXJsKHZhbHVlOiBzdHJpbmd8bnVsbCkge1xyXG4gICAgaWYodGhpcy5hcCkge1xyXG4gICAgICB0aGlzLmFwLnN0b3AoKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2F1ZGlvVXJsID0gdmFsdWU7XHJcbiAgICB0aGlzLmxvYWQoKTtcclxuICB9XHJcblxyXG5cclxuICBzdGFydGVkKCkge1xyXG4gICAgLy9jb25zb2xlLmRlYnVnKFwiUGxheSBzdGFydGVkXCIpO1xyXG4gICAgdGhpcy5zdGF0dXMgPSAnUGxheWluZy4uLic7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWQoKSB7XHJcblxyXG4gICAgaWYgKHRoaXMuY3VycmVudExvYWRlcikge1xyXG4gICAgICB0aGlzLmN1cnJlbnRMb2FkZXIuYWJvcnQoKTtcclxuICAgICAgdGhpcy5jdXJyZW50TG9hZGVyID0gbnVsbDtcclxuICAgIH1cclxuICAgIGlmKHRoaXMuX2F1ZGlvVXJsKSB7XHJcbiAgICAgIC8vdGhpcy5zdGF0dXNNc2cuaW5uZXJIVE1MID0gJ0Nvbm5lY3RpbmcuLi4nO1xyXG4gICAgICB0aGlzLmN1cnJlbnRMb2FkZXIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgdGhpcy5jdXJyZW50TG9hZGVyLm9wZW4oXCJHRVRcIiwgdGhpcy5fYXVkaW9VcmwsIHRydWUpO1xyXG4gICAgICB0aGlzLmN1cnJlbnRMb2FkZXIucmVzcG9uc2VUeXBlID0gXCJhcnJheWJ1ZmZlclwiO1xyXG4gICAgICB0aGlzLmN1cnJlbnRMb2FkZXIub25sb2FkID0gKGUpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50TG9hZGVyKSB7XHJcblxyXG4gICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmN1cnJlbnRMb2FkZXIucmVzcG9uc2U7IC8vIG5vdCByZXNwb25zZVRleHRcclxuICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlJlY2VpdmVkIGRhdGEgXCIsIGRhdGEuYnl0ZUxlbmd0aCk7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRMb2FkZXIgPSBudWxsO1xyXG4gICAgICAgICAgdGhpcy5sb2FkZWQoZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY3VycmVudExvYWRlci5vbmVycm9yID0gKGUpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZG93bmxvYWRpbmcgLi4uXCIpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudExvYWRlciA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jdXJyZW50TG9hZGVyLnNlbmQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZGVkKGRhdGE6IEFycmF5QnVmZmVyKSB7XHJcblxyXG4gICAgLy9jb25zb2xlLmRlYnVnKFwiTG9hZGVkXCIpO1xyXG4gICAgdGhpcy5zdGF0dXMgPSAnQXVkaW8gZmlsZSBsb2FkZWQuJztcclxuICAgIC8vY29uc29sZS5kZWJ1ZyhcIlJlY2VpdmVkIGRhdGEgXCIsIGRhdGEuYnl0ZUxlbmd0aCk7XHJcblxyXG4gICAgQXVkaW9Db250ZXh0UHJvdmlkZXIuZGVjb2RlQXVkaW9EYXRhKGRhdGEpLnRoZW4oYXVkaW9CdWZmZXIgPT4ge1xyXG4gICAgICAvL2NvbnNvbGUuZGVidWcoXCJBdWRpbyBCdWZmZXIgU2FtcGxlcmF0ZTogXCIsIGF1ZGlvQnVmZmVyLnNhbXBsZVJhdGUpXHJcbiAgICAgIGxldCBhcz1uZXcgQXVkaW9CdWZmZXJTb3VyY2UoYXVkaW9CdWZmZXIpO1xyXG4gICAgICBsZXQgYWRoPW5ldyBBdWRpb0RhdGFIb2xkZXIoYXMpO1xyXG4gICAgICB0aGlzLmF1ZGlvQ2xpcCA9IG5ldyBBdWRpb0NsaXAoYWRoKTtcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGF1ZGlvRGF0YShhdWRpb0RhdGE6IEF1ZGlvRGF0YUhvbGRlcil7XHJcbiAgICAgIHRoaXMuYXVkaW9EaXNwbGF5U2Nyb2xsUGFuZS5hdWRpb0RhdGEgPSBhdWRpb0RhdGE7XHJcbiAgICAgIGlmKGF1ZGlvRGF0YSkge1xyXG4gICAgICAgICAgbGV0IGNsaXAgPSBuZXcgQXVkaW9DbGlwKGF1ZGlvRGF0YSk7XHJcbiAgICAgICAgICBpZiAodGhpcy5hcCl7XHJcbiAgICAgICAgICAgICAgdGhpcy5hcC5hdWRpb0NsaXAgPSBjbGlwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wbGF5U3RhcnRBY3Rpb24uZGlzYWJsZWQgPSBmYWxzZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgICAgdGhpcy5wbGF5U3RhcnRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlXHJcbiAgICAgICAgICBpZiAodGhpcy5hcCl7XHJcbiAgICAgICAgICAgICAgdGhpcy5hcC5hdWRpb0NsaXAgPSBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB0aGlzLnBsYXlTZWxlY3Rpb25BY3Rpb24uZGlzYWJsZWQ9dHJ1ZVxyXG4gIH1cclxuXHJcbiAgc3RhcnRTZWxlY3Rpb25EaXNhYmxlZCgpe1xyXG4gICAgcmV0dXJuICEodGhpcy5fYXVkaW9DbGlwICYmIHRoaXMuYXAhPW51bGwgJiYgIXRoaXMucGxheVN0YXJ0QWN0aW9uLmRpc2FibGVkICYmIHRoaXMuX2F1ZGlvQ2xpcC5zZWxlY3Rpb24gKVxyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgYXVkaW9DbGlwKGF1ZGlvQ2xpcDogQXVkaW9DbGlwIHwgbnVsbCkge1xyXG4gICAgdGhpcy5fYXVkaW9DbGlwPWF1ZGlvQ2xpcFxyXG4gICAgbGV0IGF1ZGlvRGF0YTpBdWRpb0RhdGFIb2xkZXJ8IG51bGw9bnVsbDtcclxuICAgIGlmKGF1ZGlvQ2xpcCl7XHJcbiAgICAgIGF1ZGlvRGF0YT1hdWRpb0NsaXAuYXVkaW9EYXRhSG9sZGVyO1xyXG4gICAgICBpZih0aGlzLl9hdWRpb0NsaXApIHtcclxuICAgICAgICB0aGlzLl9hdWRpb0NsaXAuYWRkU2VsZWN0aW9uT2JzZXJ2ZXIoKGFjKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnBsYXlTZWxlY3Rpb25BY3Rpb24uZGlzYWJsZWQgPSB0aGlzLnN0YXJ0U2VsZWN0aW9uRGlzYWJsZWQoKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmKGF1ZGlvRGF0YSkge1xyXG4gICAgICAvL2NvbnNvbGUuZGVidWcoXCJQbGF5IHN0YXJ0IGFjdGlvbiAoYnkgQXVkaW9EaXNwbGF5UGxheWVyOjpzZXQgYXVkaW9DbGlwKSBkaXNhYmxlZDogXCIrKCF0aGlzLmFwKSk7XHJcbiAgICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uLmRpc2FibGVkID0oIXRoaXMuYXApXHJcbiAgICAgIHRoaXMucGxheVNlbGVjdGlvbkFjdGlvbi5kaXNhYmxlZD10aGlzLnN0YXJ0U2VsZWN0aW9uRGlzYWJsZWQoKVxyXG4gICAgfWVsc2V7XHJcbiAgICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uLmRpc2FibGVkID0gdHJ1ZVxyXG4gICAgICB0aGlzLnBsYXlTZWxlY3Rpb25BY3Rpb24uZGlzYWJsZWQ9dHJ1ZVxyXG4gIH1cclxuXHJcbiAgICB0aGlzLmF1ZGlvRGlzcGxheVNjcm9sbFBhbmUuYXVkaW9DbGlwPWF1ZGlvQ2xpcFxyXG4gICAgaWYodGhpcy5hcCkge1xyXG4gICAgICB0aGlzLmFwLmF1ZGlvQ2xpcCA9IGF1ZGlvQ2xpcFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGF1ZGlvQ2xpcCgpOkF1ZGlvQ2xpcHxudWxse1xyXG4gICAgcmV0dXJuIHRoaXMuX2F1ZGlvQ2xpcFxyXG4gIH1cclxuXHJcbiAgdXBkYXRlUGxheVBvc2l0aW9uKCkge1xyXG5cclxuICAgIGlmICh0aGlzLmFwICYmIHRoaXMuYXAucGxheVBvc2l0aW9uRnJhbWVzKSB7XHJcbiAgICAgIHRoaXMuYXVkaW9EaXNwbGF5U2Nyb2xsUGFuZS5wbGF5RnJhbWVQb3NpdGlvbiA9IHRoaXMuYXAucGxheVBvc2l0aW9uRnJhbWVzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXVkaW9QbGF5ZXJVcGRhdGUoZTogQXVkaW9QbGF5ZXJFdmVudCkge1xyXG4gICAgaWYgKEV2ZW50VHlwZS5TVEFSVEVEID09PSBlLnR5cGUpIHtcclxuICAgICAgdGhpcy5zdGF0dXMgPSAnUGxheWJhY2suLi4nO1xyXG4gICAgICB0aGlzLnVwZGF0ZVRpbWVySWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4gdGhpcy51cGRhdGVQbGF5UG9zaXRpb24oKSwgNTApO1xyXG4gICAgICB0aGlzLnBsYXlTdGFydEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMucGxheVNlbGVjdGlvbkFjdGlvbi5kaXNhYmxlZD10cnVlXHJcbiAgICAgIHRoaXMucGxheVN0b3BBY3Rpb24uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAoRXZlbnRUeXBlLkVOREVEID09PSBlLnR5cGUpIHtcclxuICAgICAgdGhpcy5zdGF0dXMgPSAnUmVhZHkuJztcclxuICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy51cGRhdGVUaW1lcklkKTtcclxuICAgICAgdGhpcy5wbGF5U3RhcnRBY3Rpb24uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5wbGF5U2VsZWN0aW9uQWN0aW9uLmRpc2FibGVkPXRoaXMuc3RhcnRTZWxlY3Rpb25EaXNhYmxlZCgpXHJcbiAgICAgIHRoaXMucGxheVN0b3BBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgfWVsc2UgaWYgKEV2ZW50VHlwZS5FUlJPUiA9PT0gZS50eXBlKSB7XHJcbiAgICAgIHRoaXMuc3RhdHVzID0gJ0Vycm9yLic7XHJcbiAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHRoaXMudXBkYXRlVGltZXJJZCk7XHJcbiAgICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucGxheVNlbGVjdGlvbkFjdGlvbi5kaXNhYmxlZD10aGlzLnN0YXJ0U2VsZWN0aW9uRGlzYWJsZWQoKVxyXG4gICAgICB0aGlzLnBsYXlTdG9wQWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICB9XHJcblxyXG4gIGVycm9yKCkge1xyXG4gICAgdGhpcy5zdGF0dXMgPSAnRVJST1InO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbiJdfQ==
|
|
221
|
+
`, styles: [":host{display:flex;flex-direction:column;position:absolute;bottom:0;height:100%;width:100%;overflow:hidden;padding:20px;z-index:5;box-sizing:border-box;background-color:#000000bf}\n"] }]
|
|
222
|
+
}], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }], propDecorators: { playStartAction: [{
|
|
223
|
+
type: Input
|
|
224
|
+
}], playStopAction: [{
|
|
225
|
+
type: Input
|
|
226
|
+
}], playSelectionAction: [{
|
|
227
|
+
type: Input
|
|
228
|
+
}], autoPlayOnSelectToggleAction: [{
|
|
229
|
+
type: Input
|
|
230
|
+
}], audioDisplayScrollPane: [{
|
|
231
|
+
type: ViewChild,
|
|
232
|
+
args: [AudioDisplayScrollPane, { static: true }]
|
|
233
|
+
}], audioData: [{
|
|
234
|
+
type: Input
|
|
235
|
+
}], audioClip: [{
|
|
236
|
+
type: Input
|
|
237
|
+
}] } });
|
|
238
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaW9fcGxheWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL2F1ZGlvX3BsYXllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFNBQVMsRUFFTSxLQUFLLEdBQ3ZCLE1BQU0sZUFBZSxDQUFBO0FBRXRCLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxhQUFhLENBQUE7QUFDckMsT0FBTyxFQUFDLFdBQVcsRUFBeUMsU0FBUyxFQUFDLE1BQU0sbUJBQW1CLENBQUE7QUFFL0YsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ3hDLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUMvQyxPQUFPLEVBQUMsaUJBQWlCLEVBQUUsZUFBZSxFQUFDLE1BQU0scUJBQXFCLENBQUM7Ozs7O0FBb0N2RSxNQUFNLE9BQU8sa0JBQWtCO0lBK0I3QixZQUFzQixLQUFxQixFQUFZLEdBQXNCLEVBQVcsSUFBZTtRQUFqRixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUFZLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQVcsU0FBSSxHQUFKLElBQUksQ0FBVztRQTlCL0YsY0FBUyxHQUFjLElBQUksQ0FBQztRQWtCNUIsZUFBVSxHQUFnQixJQUFJLENBQUM7UUFJdkMsa0JBQWEsR0FBd0IsSUFBSSxDQUFDO1FBU3hDLElBQUksQ0FBQyxPQUFPLEdBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDckMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsbUJBQW1CLEdBQUMsSUFBSSxNQUFNLENBQUMsZUFBZSxDQUFDLENB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Q0FBQztZQUN6QyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsR0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQTtZQUMvRCxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7U0FDckM7UUFHRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBRTNCLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7SUFDeEIsQ0FBQzs4R0FqT1Usa0JBQWtCO2tHQUFsQixrQkFBa0Isa1dBNEJsQixzQkFBc0IsOERBMUR2Qjs7Ozs7Ozs7Ozs7OztHQWFUOzsyRkFpQlUsa0JBQWtCO2tCQWxDOUIsU0FBUzsrQkFFRSx3QkFBd0IsWUFFeEI7Ozs7Ozs7Ozs7Ozs7R0FhVDs0SUF1QkQsZUFBZTtzQkFEZCxLQUFLO2dCQUdOLGNBQWM7c0JBRGIsS0FBSztnQkFHTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBR04sNEJBQTRCO3NCQUQzQixLQUFLO2dCQWtCRSxzQkFBc0I7c0JBRDdCLFNBQVM7dUJBQUMsc0JBQXNCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQThHL0MsU0FBUztzQkFEWixLQUFLO2dCQXVCRixTQUFTO3NCQURaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgVmlld0NoaWxkLFxyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBBZnRlclZpZXdJbml0LCBJbnB1dCwgT25Jbml0LCBFbGVtZW50UmVmLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXHJcblxyXG5pbXBvcnQge0F1ZGlvQ2xpcH0gZnJvbSAnLi9wZXJzaXN0b3InXHJcbmltcG9ydCB7QXVkaW9QbGF5ZXIsIEF1ZGlvUGxheWVyTGlzdGVuZXIsIEF1ZGlvUGxheWVyRXZlbnQsIEV2ZW50VHlwZX0gZnJvbSAnLi9wbGF5YmFjay9wbGF5ZXInXHJcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFBhcmFtc30gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQge0FjdGlvbn0gZnJvbSBcIi4uL2FjdGlvbi9hY3Rpb25cIjtcclxuaW1wb3J0IHtBdWRpb0Rpc3BsYXlTY3JvbGxQYW5lfSBmcm9tIFwiLi91aS9hdWRpb19kaXNwbGF5X3Njcm9sbF9wYW5lXCI7XHJcbmltcG9ydCB7QXVkaW9Db250ZXh0UHJvdmlkZXJ9IGZyb20gXCIuL2NvbnRleHRcIjtcclxuaW1wb3J0IHtBdWRpb0J1ZmZlclNvdXJjZSwgQXVkaW9EYXRhSG9sZGVyfSBmcm9tIFwiLi9hdWRpb19kYXRhX2hvbGRlclwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblxyXG4gIHNlbGVjdG9yOiAnYXBwLWF1ZGlvZGlzcGxheXBsYXllcicsXHJcblxyXG4gIHRlbXBsYXRlOiBgXHJcblxyXG4gICAgPGF1ZGlvLWRpc3BsYXktc2Nyb2xsLXBhbmUgI2F1ZGlvRGlzcGxheVNjcm9sbFBhbmU+PC9hdWRpby1kaXNwbGF5LXNjcm9sbC1wYW5lPlxyXG5cclxuICAgIDxhdWRpby1kaXNwbGF5LWNvbnRyb2wgW2F1ZGlvQ2xpcF09XCJhdWRpb0NsaXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGF5U3RhcnRBY3Rpb25dPVwicGxheVN0YXJ0QWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxheVNlbGVjdGlvbkFjdGlvbl09XCJwbGF5U2VsZWN0aW9uQWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxheVN0b3BBY3Rpb25dPVwicGxheVN0b3BBY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvUGxheU9uU2VsZWN0VG9nZ2xlQWN0aW9uXT1cImFwPy5hdXRvUGxheU9uU2VsZWN0VG9nZ2xlQWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbem9vbUluQWN0aW9uXT1cInpvb21JbkFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3pvb21PdXRBY3Rpb25dPVwiem9vbU91dEFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3pvb21TZWxlY3RlZEFjdGlvbl09XCJ6b29tU2VsZWN0ZWRBY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt6b29tRml0VG9QYW5lbEFjdGlvbl09XCJ6b29tRml0VG9QYW5lbEFjdGlvblwiPjwvYXVkaW8tZGlzcGxheS1jb250cm9sPjxwPnt7c3RhdHVzfX1cclxuICBgLFxyXG4gIHN0eWxlczogW1xyXG4gICAgICBgOmhvc3Qge1xyXG4gICAgICAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICAgICBib3R0b206IDBweDtcclxuICAgICAgICAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgICAgICAgICAgIHBhZGRpbmc6IDIwcHg7XHJcbiAgICAgICAgICAgICB6LWluZGV4OiA1O1xyXG4gICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC43NSlcclxuICAgICAgICAgICB9YF1cclxuXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdWRpb0Rpc3BsYXlQbGF5ZXIgaW1wbGVtZW50cyBBdWRpb1BsYXllckxpc3RlbmVyLCBPbkluaXQsQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgcHJpdmF0ZSBfYXVkaW9Vcmw6IHN0cmluZ3xudWxsPW51bGw7XHJcblxyXG4gIHBhcmVudEU6IEhUTUxFbGVtZW50O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHBsYXlTdGFydEFjdGlvbjogQWN0aW9uPHZvaWQ+O1xyXG4gIEBJbnB1dCgpXHJcbiAgcGxheVN0b3BBY3Rpb246IEFjdGlvbjx2b2lkPjtcclxuICBASW5wdXQoKVxyXG4gIHBsYXlTZWxlY3Rpb25BY3Rpb246QWN0aW9uPHZvaWQ+XHJcbiAgQElucHV0KClcclxuICBhdXRvUGxheU9uU2VsZWN0VG9nZ2xlQWN0aW9uITpBY3Rpb248Ym9vbGVhbj47XHJcblxyXG4gIHpvb21GaXRUb1BhbmVsQWN0aW9uITpBY3Rpb248dm9pZD47XHJcbiAgem9vbVNlbGVjdGVkQWN0aW9uITpBY3Rpb248dm9pZD47XHJcbiAgem9vbUluQWN0aW9uITpBY3Rpb248dm9pZD47XHJcbiAgem9vbU91dEFjdGlvbiE6QWN0aW9uPHZvaWQ+O1xyXG5cclxuICBwcml2YXRlIF9hdWRpb0NsaXA6QXVkaW9DbGlwfG51bGw9bnVsbDtcclxuICBhcDogQXVkaW9QbGF5ZXJ8dW5kZWZpbmVkO1xyXG4gIHN0YXR1czogc3RyaW5nO1xyXG5cclxuICBjdXJyZW50TG9hZGVyOiBYTUxIdHRwUmVxdWVzdCB8IG51bGw9bnVsbDtcclxuXHJcbiAgYXVkaW86IGFueTtcclxuICB1cGRhdGVUaW1lcklkOiBhbnk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoQXVkaW9EaXNwbGF5U2Nyb2xsUGFuZSwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBwcml2YXRlIGF1ZGlvRGlzcGxheVNjcm9sbFBhbmUhOiBBdWRpb0Rpc3BsYXlTY3JvbGxQYW5lO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcm91dGU6IEFjdGl2YXRlZFJvdXRlLCBwcm90ZWN0ZWQgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZixwcm90ZWN0ZWQgZVJlZjpFbGVtZW50UmVmKSB7XHJcbiAgICB0aGlzLnBhcmVudEU9dGhpcy5lUmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICB0aGlzLnBsYXlTdGFydEFjdGlvbiA9IG5ldyBBY3Rpb24oXCJTdGFydFwiKTtcclxuICAgIHRoaXMucGxheVNlbGVjdGlvbkFjdGlvbj1uZXcgQWN0aW9uKFwiUGxheSBzZWxlY3RlZFwiKTtcclxuICAgIHRoaXMucGxheVN0b3BBY3Rpb24gPSBuZXcgQWN0aW9uKFwiU3RvcFwiKTtcclxuICAgIHRoaXMuc3RhdHVzPVwiUGxheWVyIGNyZWF0ZWQuXCI7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpe1xyXG4gICAgdGhpcy56b29tU2VsZWN0ZWRBY3Rpb249dGhpcy5hdWRpb0Rpc3BsYXlTY3JvbGxQYW5lLnpvb21TZWxlY3RlZEFjdGlvblxyXG4gICAgdGhpcy56b29tRml0VG9QYW5lbEFjdGlvbj10aGlzLmF1ZGlvRGlzcGxheVNjcm9sbFBhbmUuem9vbUZpdFRvUGFuZWxBY3Rpb247XHJcbiAgICB0aGlzLnpvb21PdXRBY3Rpb249dGhpcy5hdWRpb0Rpc3BsYXlTY3JvbGxQYW5lLnpvb21PdXRBY3Rpb247XHJcbiAgICB0aGlzLnpvb21JbkFjdGlvbj10aGlzLmF1ZGlvRGlzcGxheVNjcm9sbFBhbmUuem9vbUluQWN0aW9uO1xyXG4gICAgdGhpcy5hcCA9IG5ldyBBdWRpb1BsYXllcih0aGlzKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgaWYgKHRoaXMuYXApIHtcclxuICAgICAgICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uLm9uQWN0aW9uID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKFwiU3RhcnQgYWN0aW9uLCBwbGF5ZXI6IFwiK3RoaXMuYXApXHJcbiAgICAgICAgICAgIHRoaXMuYXA/LnN0YXJ0KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnBsYXlTZWxlY3Rpb25BY3Rpb24ub25BY3Rpb24gPSAoKSA9PiB0aGlzLmFwPy5zdGFydFNlbGVjdGVkKCk7XHJcbiAgICAgICAgICB0aGlzLnBsYXlTdG9wQWN0aW9uLm9uQWN0aW9uID0gKCkgPT4gdGhpcy5hcD8uc3RvcCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubGF5b3V0KCk7XHJcbiAgICAgIGxldCBoZWlnaHRMaXN0ZW5lcj1uZXcgTXV0YXRpb25PYnNlcnZlcigobXJzOkFycmF5PE11dGF0aW9uUmVjb3JkPixtbzpNdXRhdGlvbk9ic2VydmVyKT0+e1xyXG4gICAgICAgICAgbXJzLmZvckVhY2goKG1yOk11dGF0aW9uUmVjb3JkKT0+e1xyXG4gICAgICAgICAgICAgIGlmKCdhdHRyaWJ1dGVzJz09PW1yLnR5cGUgJiYgKCdjbGFzcyc9PT1tci5hdHRyaWJ1dGVOYW1lIHx8ICdzdHlsZSc9PT1tci5hdHRyaWJ1dGVOYW1lKSl7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubGF5b3V0KCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgfSk7XHJcbiAgICAgIGhlaWdodExpc3RlbmVyLm9ic2VydmUodGhpcy5wYXJlbnRFLHthdHRyaWJ1dGVzOiB0cnVlLGNoaWxkTGlzdDogdHJ1ZSwgY2hhcmFjdGVyRGF0YTogdHJ1ZX0pO1xyXG4gICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtczogUGFyYW1zKSA9PiB7XHJcbiAgICAgIGlmIChwYXJhbXNbJ3VybCddKSB7XHJcbiAgICAgICAgdGhpcy5hdWRpb1VybCA9IHBhcmFtc1sndXJsJ107XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbGF5b3V0KCl7XHJcbiAgICB0aGlzLmF1ZGlvRGlzcGxheVNjcm9sbFBhbmUubGF5b3V0KCk7XHJcbiAgfVxyXG5cclxuICBnZXQgYXVkaW9VcmwoKTogc3RyaW5nfG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX2F1ZGlvVXJsO1xyXG4gIH1cclxuXHJcbiAgc2V0IGF1ZGlvVXJsKHZhbHVlOiBzdHJpbmd8bnVsbCkge1xyXG4gICAgaWYodGhpcy5hcCkge1xyXG4gICAgICB0aGlzLmFwLnN0b3AoKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2F1ZGlvVXJsID0gdmFsdWU7XHJcbiAgICB0aGlzLmxvYWQoKTtcclxuICB9XHJcblxyXG5cclxuICBzdGFydGVkKCkge1xyXG4gICAgLy9jb25zb2xlLmRlYnVnKFwiUGxheSBzdGFydGVkXCIpO1xyXG4gICAgdGhpcy5zdGF0dXMgPSAnUGxheWluZy4uLic7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWQoKSB7XHJcblxyXG4gICAgaWYgKHRoaXMuY3VycmVudExvYWRlcikge1xyXG4gICAgICB0aGlzLmN1cnJlbnRMb2FkZXIuYWJvcnQoKTtcclxuICAgICAgdGhpcy5jdXJyZW50TG9hZGVyID0gbnVsbDtcclxuICAgIH1cclxuICAgIGlmKHRoaXMuX2F1ZGlvVXJsKSB7XHJcbiAgICAgIC8vdGhpcy5zdGF0dXNNc2cuaW5uZXJIVE1MID0gJ0Nvbm5lY3RpbmcuLi4nO1xyXG4gICAgICB0aGlzLmN1cnJlbnRMb2FkZXIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgdGhpcy5jdXJyZW50TG9hZGVyLm9wZW4oXCJHRVRcIiwgdGhpcy5fYXVkaW9VcmwsIHRydWUpO1xyXG4gICAgICB0aGlzLmN1cnJlbnRMb2FkZXIucmVzcG9uc2VUeXBlID0gXCJhcnJheWJ1ZmZlclwiO1xyXG4gICAgICB0aGlzLmN1cnJlbnRMb2FkZXIub25sb2FkID0gKGUpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50TG9hZGVyKSB7XHJcblxyXG4gICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmN1cnJlbnRMb2FkZXIucmVzcG9uc2U7IC8vIG5vdCByZXNwb25zZVRleHRcclxuICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlJlY2VpdmVkIGRhdGEgXCIsIGRhdGEuYnl0ZUxlbmd0aCk7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRMb2FkZXIgPSBudWxsO1xyXG4gICAgICAgICAgdGhpcy5sb2FkZWQoZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY3VycmVudExvYWRlci5vbmVycm9yID0gKGUpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZG93bmxvYWRpbmcgLi4uXCIpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudExvYWRlciA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jdXJyZW50TG9hZGVyLnNlbmQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZGVkKGRhdGE6IEFycmF5QnVmZmVyKSB7XHJcblxyXG4gICAgLy9jb25zb2xlLmRlYnVnKFwiTG9hZGVkXCIpO1xyXG4gICAgdGhpcy5zdGF0dXMgPSAnQXVkaW8gZmlsZSBsb2FkZWQuJztcclxuICAgIC8vY29uc29sZS5kZWJ1ZyhcIlJlY2VpdmVkIGRhdGEgXCIsIGRhdGEuYnl0ZUxlbmd0aCk7XHJcblxyXG4gICAgQXVkaW9Db250ZXh0UHJvdmlkZXIuZGVjb2RlQXVkaW9EYXRhKGRhdGEpLnRoZW4oYXVkaW9CdWZmZXIgPT4ge1xyXG4gICAgICAvL2NvbnNvbGUuZGVidWcoXCJBdWRpbyBCdWZmZXIgU2FtcGxlcmF0ZTogXCIsIGF1ZGlvQnVmZmVyLnNhbXBsZVJhdGUpXHJcbiAgICAgIGxldCBhcz1uZXcgQXVkaW9CdWZmZXJTb3VyY2UoYXVkaW9CdWZmZXIpO1xyXG4gICAgICBsZXQgYWRoPW5ldyBBdWRpb0RhdGFIb2xkZXIoYXMpO1xyXG4gICAgICB0aGlzLmF1ZGlvQ2xpcCA9IG5ldyBBdWRpb0NsaXAoYWRoKTtcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGF1ZGlvRGF0YShhdWRpb0RhdGE6IEF1ZGlvRGF0YUhvbGRlcil7XHJcbiAgICAgIHRoaXMuYXVkaW9EaXNwbGF5U2Nyb2xsUGFuZS5hdWRpb0RhdGEgPSBhdWRpb0RhdGE7XHJcbiAgICAgIGlmKGF1ZGlvRGF0YSkge1xyXG4gICAgICAgICAgbGV0IGNsaXAgPSBuZXcgQXVkaW9DbGlwKGF1ZGlvRGF0YSk7XHJcbiAgICAgICAgICBpZiAodGhpcy5hcCl7XHJcbiAgICAgICAgICAgICAgdGhpcy5hcC5hdWRpb0NsaXAgPSBjbGlwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wbGF5U3RhcnRBY3Rpb24uZGlzYWJsZWQgPSBmYWxzZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgICAgdGhpcy5wbGF5U3RhcnRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlXHJcbiAgICAgICAgICBpZiAodGhpcy5hcCl7XHJcbiAgICAgICAgICAgICAgdGhpcy5hcC5hdWRpb0NsaXAgPSBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB0aGlzLnBsYXlTZWxlY3Rpb25BY3Rpb24uZGlzYWJsZWQ9dHJ1ZVxyXG4gIH1cclxuXHJcbiAgc3RhcnRTZWxlY3Rpb25EaXNhYmxlZCgpe1xyXG4gICAgcmV0dXJuICEodGhpcy5fYXVkaW9DbGlwICYmIHRoaXMuYXAhPW51bGwgJiYgIXRoaXMucGxheVN0YXJ0QWN0aW9uLmRpc2FibGVkICYmIHRoaXMuX2F1ZGlvQ2xpcC5zZWxlY3Rpb24gKVxyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgYXVkaW9DbGlwKGF1ZGlvQ2xpcDogQXVkaW9DbGlwIHwgbnVsbCkge1xyXG4gICAgdGhpcy5fYXVkaW9DbGlwPWF1ZGlvQ2xpcFxyXG4gICAgbGV0IGF1ZGlvRGF0YTpBdWRpb0RhdGFIb2xkZXJ8IG51bGw9bnVsbDtcclxuICAgIGlmKGF1ZGlvQ2xpcCl7XHJcbiAgICAgIGF1ZGlvRGF0YT1hdWRpb0NsaXAuYXVkaW9EYXRhSG9sZGVyO1xyXG4gICAgICBpZih0aGlzLl9hdWRpb0NsaXApIHtcclxuICAgICAgICB0aGlzLl9hdWRpb0NsaXAuYWRkU2VsZWN0aW9uT2JzZXJ2ZXIoKGFjKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnBsYXlTZWxlY3Rpb25BY3Rpb24uZGlzYWJsZWQgPSB0aGlzLnN0YXJ0U2VsZWN0aW9uRGlzYWJsZWQoKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmKGF1ZGlvRGF0YSkge1xyXG4gICAgICAvL2NvbnNvbGUuZGVidWcoXCJQbGF5IHN0YXJ0IGFjdGlvbiAoYnkgQXVkaW9EaXNwbGF5UGxheWVyOjpzZXQgYXVkaW9DbGlwKSBkaXNhYmxlZDogXCIrKCF0aGlzLmFwKSk7XHJcbiAgICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uLmRpc2FibGVkID0oIXRoaXMuYXApXHJcbiAgICAgIHRoaXMucGxheVNlbGVjdGlvbkFjdGlvbi5kaXNhYmxlZD10aGlzLnN0YXJ0U2VsZWN0aW9uRGlzYWJsZWQoKVxyXG4gICAgfWVsc2V7XHJcbiAgICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uLmRpc2FibGVkID0gdHJ1ZVxyXG4gICAgICB0aGlzLnBsYXlTZWxlY3Rpb25BY3Rpb24uZGlzYWJsZWQ9dHJ1ZVxyXG4gIH1cclxuXHJcbiAgICB0aGlzLmF1ZGlvRGlzcGxheVNjcm9sbFBhbmUuYXVkaW9DbGlwPWF1ZGlvQ2xpcFxyXG4gICAgaWYodGhpcy5hcCkge1xyXG4gICAgICB0aGlzLmFwLmF1ZGlvQ2xpcCA9IGF1ZGlvQ2xpcFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGF1ZGlvQ2xpcCgpOkF1ZGlvQ2xpcHxudWxse1xyXG4gICAgcmV0dXJuIHRoaXMuX2F1ZGlvQ2xpcFxyXG4gIH1cclxuXHJcbiAgdXBkYXRlUGxheVBvc2l0aW9uKCkge1xyXG5cclxuICAgIGlmICh0aGlzLmFwICYmIHRoaXMuYXAucGxheVBvc2l0aW9uRnJhbWVzKSB7XHJcbiAgICAgIHRoaXMuYXVkaW9EaXNwbGF5U2Nyb2xsUGFuZS5wbGF5RnJhbWVQb3NpdGlvbiA9IHRoaXMuYXAucGxheVBvc2l0aW9uRnJhbWVzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXVkaW9QbGF5ZXJVcGRhdGUoZTogQXVkaW9QbGF5ZXJFdmVudCkge1xyXG4gICAgaWYgKEV2ZW50VHlwZS5TVEFSVEVEID09PSBlLnR5cGUpIHtcclxuICAgICAgdGhpcy5zdGF0dXMgPSAnUGxheWJhY2suLi4nO1xyXG4gICAgICB0aGlzLnVwZGF0ZVRpbWVySWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4gdGhpcy51cGRhdGVQbGF5UG9zaXRpb24oKSwgNTApO1xyXG4gICAgICB0aGlzLnBsYXlTdGFydEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMucGxheVNlbGVjdGlvbkFjdGlvbi5kaXNhYmxlZD10cnVlXHJcbiAgICAgIHRoaXMucGxheVN0b3BBY3Rpb24uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAoRXZlbnRUeXBlLkVOREVEID09PSBlLnR5cGUpIHtcclxuICAgICAgdGhpcy5zdGF0dXMgPSAnUmVhZHkuJztcclxuICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy51cGRhdGVUaW1lcklkKTtcclxuICAgICAgdGhpcy5wbGF5U3RhcnRBY3Rpb24uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5wbGF5U2VsZWN0aW9uQWN0aW9uLmRpc2FibGVkPXRoaXMuc3RhcnRTZWxlY3Rpb25EaXNhYmxlZCgpXHJcbiAgICAgIHRoaXMucGxheVN0b3BBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgfWVsc2UgaWYgKEV2ZW50VHlwZS5FUlJPUiA9PT0gZS50eXBlKSB7XHJcbiAgICAgIHRoaXMuc3RhdHVzID0gJ0Vycm9yLic7XHJcbiAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHRoaXMudXBkYXRlVGltZXJJZCk7XHJcbiAgICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucGxheVNlbGVjdGlvbkFjdGlvbi5kaXNhYmxlZD10aGlzLnN0YXJ0U2VsZWN0aW9uRGlzYWJsZWQoKVxyXG4gICAgICB0aGlzLnBsYXlTdG9wQWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICB9XHJcblxyXG4gIGVycm9yKCkge1xyXG4gICAgdGhpcy5zdGF0dXMgPSAnRVJST1InO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbiJdfQ==
|