speechrecorderng 3.0.0 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/esm2020/lib/action/action.mjs +2 -1
  2. package/esm2020/lib/audio/array_audio_buffer.mjs +65 -2
  3. package/esm2020/lib/audio/array_audio_buffer_input_stream.mjs +2 -2
  4. package/esm2020/lib/audio/array_audio_buffer_random_access_stream.mjs +16 -0
  5. package/esm2020/lib/audio/audio_data_holder.mjs +203 -48
  6. package/esm2020/lib/audio/audio_display.mjs +10 -34
  7. package/esm2020/lib/audio/audio_player.mjs +18 -45
  8. package/esm2020/lib/audio/capture/capture.mjs +293 -69
  9. package/esm2020/lib/audio/dsp/level_measure.mjs +211 -88
  10. package/esm2020/lib/audio/impl/wavformat.mjs +1 -1
  11. package/esm2020/lib/audio/impl/wavreader.mjs +134 -0
  12. package/esm2020/lib/audio/impl/wavwriter.mjs +10 -9
  13. package/esm2020/lib/audio/inddb_audio_buffer.mjs +508 -0
  14. package/esm2020/lib/audio/net_audio_buffer.mjs +297 -0
  15. package/esm2020/lib/audio/persistor.mjs +8 -2
  16. package/esm2020/lib/audio/playback/array_audio_buffer_source_node.mjs +15 -154
  17. package/esm2020/lib/audio/playback/audio_source_node.mjs +18 -0
  18. package/esm2020/lib/audio/playback/audio_source_worklet_module_loader.mjs +167 -0
  19. package/esm2020/lib/audio/playback/inddb_audio_buffer_source_node.mjs +167 -0
  20. package/esm2020/lib/audio/playback/net_audio_buffer_source_node.mjs +218 -0
  21. package/esm2020/lib/audio/playback/player.mjs +190 -171
  22. package/esm2020/lib/audio/ui/audio_canvas_layer_comp.mjs +35 -76
  23. package/esm2020/lib/audio/ui/audio_display_control.mjs +12 -24
  24. package/esm2020/lib/audio/ui/audio_display_scroll_pane.mjs +14 -45
  25. package/esm2020/lib/audio/ui/audiosignal.mjs +333 -267
  26. package/esm2020/lib/audio/ui/container.mjs +40 -57
  27. package/esm2020/lib/audio/ui/livelevel.mjs +53 -52
  28. package/esm2020/lib/audio/ui/scroll_pane_horizontal.mjs +5 -19
  29. package/esm2020/lib/audio/ui/sonagram.mjs +386 -339
  30. package/esm2020/lib/db/inddb.mjs +120 -0
  31. package/esm2020/lib/io/BinaryReader.mjs +85 -0
  32. package/esm2020/lib/io/stream.mjs +101 -1
  33. package/esm2020/lib/net/uploader.mjs +111 -5
  34. package/esm2020/lib/recorder_component.mjs +59 -1
  35. package/esm2020/lib/speechrecorder/project/project.mjs +10 -1
  36. package/esm2020/lib/speechrecorder/project/project.service.mjs +3 -3
  37. package/esm2020/lib/speechrecorder/recording.mjs +30 -6
  38. package/esm2020/lib/speechrecorder/recordings/basic_recording.service.mjs +213 -0
  39. package/esm2020/lib/speechrecorder/recordings/recordings.service.mjs +732 -65
  40. package/esm2020/lib/speechrecorder/script/script.service.mjs +3 -3
  41. package/esm2020/lib/speechrecorder/session/audiorecorder.mjs +358 -184
  42. package/esm2020/lib/speechrecorder/session/basicrecorder.mjs +181 -28
  43. package/esm2020/lib/speechrecorder/session/controlpanel.mjs +47 -129
  44. package/esm2020/lib/speechrecorder/session/item.mjs +13 -1
  45. package/esm2020/lib/speechrecorder/session/progress.mjs +26 -55
  46. package/esm2020/lib/speechrecorder/session/prompting.mjs +33 -176
  47. package/esm2020/lib/speechrecorder/session/recorder_combi_pane.mjs +6 -6
  48. package/esm2020/lib/speechrecorder/session/recording_file_cache.mjs +28 -15
  49. package/esm2020/lib/speechrecorder/session/recording_list.mjs +92 -55
  50. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +9 -13
  51. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +9 -18
  52. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +10 -36
  53. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +10 -37
  54. package/esm2020/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +80 -56
  55. package/esm2020/lib/speechrecorder/session/session.service.mjs +3 -3
  56. package/esm2020/lib/speechrecorder/session/session_finished_dialog.mjs +4 -4
  57. package/esm2020/lib/speechrecorder/session/sessionmanager.mjs +409 -165
  58. package/esm2020/lib/speechrecorder/session/warning_bar.mjs +6 -29
  59. package/esm2020/lib/speechrecorder/spruploader.mjs +3 -3
  60. package/esm2020/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +6 -41
  61. package/esm2020/lib/speechrecorderng.component.mjs +42 -31
  62. package/esm2020/lib/speechrecorderng.module.mjs +5 -5
  63. package/esm2020/lib/spr.config.mjs +3 -3
  64. package/esm2020/lib/spr.module.version.mjs +2 -2
  65. package/esm2020/lib/ui/canvas_layer_comp.mjs +3 -3
  66. package/esm2020/lib/ui/message_dialog.mjs +7 -7
  67. package/esm2020/lib/ui/recordingitem_display.mjs +26 -59
  68. package/esm2020/lib/utils/scrollIntoViewToBottom.mjs +3 -3
  69. package/esm2020/lib/utils/ua-parser.mjs +28 -4
  70. package/esm2020/lib/utils/utils.mjs +29 -1
  71. package/fesm2015/speechrecorderng.mjs +12755 -9195
  72. package/fesm2015/speechrecorderng.mjs.map +1 -1
  73. package/fesm2020/speechrecorderng.mjs +12652 -9101
  74. package/fesm2020/speechrecorderng.mjs.map +1 -1
  75. package/{speechrecorderng.d.ts → index.d.ts} +0 -0
  76. package/lib/audio/array_audio_buffer.d.ts +17 -1
  77. package/lib/audio/array_audio_buffer_random_access_stream.d.ts +9 -0
  78. package/lib/audio/audio_data_holder.d.ts +69 -14
  79. package/lib/audio/audio_display.d.ts +1 -1
  80. package/lib/audio/audio_player.d.ts +3 -7
  81. package/lib/audio/capture/capture.d.ts +24 -4
  82. package/lib/audio/dsp/level_measure.d.ts +2 -23
  83. package/lib/audio/impl/wavformat.d.ts +3 -3
  84. package/lib/audio/impl/wavreader.d.ts +16 -0
  85. package/lib/audio/impl/wavwriter.d.ts +1 -4
  86. package/lib/audio/inddb_audio_buffer.d.ts +68 -0
  87. package/lib/audio/net_audio_buffer.d.ts +59 -0
  88. package/lib/audio/persistor.d.ts +3 -9
  89. package/lib/audio/playback/array_audio_buffer_source_node.d.ts +2 -8
  90. package/lib/audio/playback/audio_source_node.d.ts +10 -0
  91. package/lib/audio/playback/audio_source_worklet_module_loader.d.ts +4 -0
  92. package/lib/audio/playback/inddb_audio_buffer_source_node.d.ts +21 -0
  93. package/lib/audio/playback/net_audio_buffer_source_node.d.ts +27 -0
  94. package/lib/audio/playback/player.d.ts +19 -16
  95. package/lib/audio/ui/audio_canvas_layer_comp.d.ts +3 -3
  96. package/lib/audio/ui/audio_display_control.d.ts +3 -6
  97. package/lib/audio/ui/audio_display_scroll_pane.d.ts +1 -1
  98. package/lib/audio/ui/audiosignal.d.ts +4 -3
  99. package/lib/audio/ui/container.d.ts +1 -1
  100. package/lib/audio/ui/livelevel.d.ts +11 -4
  101. package/lib/audio/ui/scroll_pane_horizontal.d.ts +1 -1
  102. package/lib/audio/ui/sonagram.d.ts +4 -3
  103. package/lib/db/inddb.d.ts +21 -0
  104. package/lib/io/BinaryReader.d.ts +18 -0
  105. package/lib/io/stream.d.ts +18 -0
  106. package/lib/net/uploader.d.ts +20 -2
  107. package/lib/recorder_component.d.ts +5 -0
  108. package/lib/speechrecorder/project/project.d.ts +9 -0
  109. package/lib/speechrecorder/recording.d.ts +8 -2
  110. package/lib/speechrecorder/recordings/basic_recording.service.d.ts +27 -0
  111. package/lib/speechrecorder/recordings/recordings.service.d.ts +21 -6
  112. package/lib/speechrecorder/session/audiorecorder.d.ts +7 -18
  113. package/lib/speechrecorder/session/basicrecorder.d.ts +28 -4
  114. package/lib/speechrecorder/session/controlpanel.d.ts +7 -7
  115. package/lib/speechrecorder/session/item.d.ts +1 -0
  116. package/lib/speechrecorder/session/progress.d.ts +2 -1
  117. package/lib/speechrecorder/session/prompting.d.ts +5 -5
  118. package/lib/speechrecorder/session/recorder_combi_pane.d.ts +1 -1
  119. package/lib/speechrecorder/session/recording_file_cache.d.ts +7 -4
  120. package/lib/speechrecorder/session/recording_list.d.ts +2 -1
  121. package/lib/speechrecorder/session/recordingfile/recording-file-meta.component.d.ts +1 -1
  122. package/lib/speechrecorder/session/recordingfile/recording-file-navi.component.d.ts +1 -1
  123. package/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.d.ts +1 -1
  124. package/lib/speechrecorder/session/recordingfile/recording-file-view.component.d.ts +1 -1
  125. package/lib/speechrecorder/session/recordingfile/recordingfile-service.d.ts +4 -5
  126. package/lib/speechrecorder/session/session_finished_dialog.d.ts +1 -1
  127. package/lib/speechrecorder/session/sessionmanager.d.ts +10 -10
  128. package/lib/speechrecorder/session/warning_bar.d.ts +1 -1
  129. package/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.d.ts +1 -1
  130. package/lib/speechrecorderng.component.d.ts +2 -1
  131. package/lib/spr.module.version.d.ts +1 -1
  132. package/lib/ui/canvas_layer_comp.d.ts +1 -1
  133. package/lib/ui/message_dialog.d.ts +1 -1
  134. package/lib/ui/recordingitem_display.d.ts +3 -2
  135. package/lib/utils/scrollIntoViewToBottom.d.ts +1 -1
  136. package/lib/utils/ua-parser.d.ts +4 -1
  137. package/lib/utils/utils.d.ts +6 -0
  138. package/package.json +5 -4
  139. package/esm2020/lib/math/utils.mjs +0 -14
  140. package/esm2020/lib/utils/css_utils.mjs +0 -7
  141. package/lib/math/utils.d.ts +0 -3
  142. package/lib/utils/css_utils.d.ts +0 -3
@@ -30,6 +30,9 @@ export class UploaderStatusChangeEvent {
30
30
  get sizeDone() {
31
31
  return this._sizeDone;
32
32
  }
33
+ sizeInQueue() {
34
+ return this._sizeQueued - this._sizeDone;
35
+ }
33
36
  get status() {
34
37
  return this._status;
35
38
  }
@@ -47,8 +50,9 @@ export class UploaderStatusChangeEvent {
47
50
  }
48
51
  }
49
52
  export class Upload {
50
- constructor(blob, url, serverPersistable = null) {
51
- this.serverPersistable = serverPersistable;
53
+ constructor(blob, url, _serverPersistable = null) {
54
+ this._serverPersistable = _serverPersistable;
55
+ this.onDone = null;
52
56
  this.toString = () => {
53
57
  let s = `Upload: Status: ${this.status}, URL: ${this._url}`;
54
58
  if (this._data instanceof Blob) {
@@ -63,6 +67,9 @@ export class Upload {
63
67
  this._url = url;
64
68
  this.status = UploadStatus.IDLE;
65
69
  }
70
+ get serverPersistable() {
71
+ return this._serverPersistable;
72
+ }
66
73
  get url() {
67
74
  return this._url;
68
75
  }
@@ -72,13 +79,112 @@ export class Upload {
72
79
  done() {
73
80
  this.status = UploadStatus.DONE;
74
81
  //console.debug("Single upload done.");
75
- if (this.serverPersistable) {
76
- this.serverPersistable.serverPersisted = true;
82
+ if (this._serverPersistable) {
83
+ this._serverPersistable.serverPersisted = true;
77
84
  //console.debug("Single upload set server persisted: "+this.serverPersistable);
78
85
  }
79
86
  else {
80
87
  //console.debug("Server persistable not set.");
81
88
  }
89
+ if (this.onDone) {
90
+ this.onDone(this);
91
+ }
92
+ }
93
+ }
94
+ export class UploadHolder {
95
+ constructor() {
96
+ this.onUploadSet = null;
97
+ this._upload = null;
98
+ }
99
+ get upload() {
100
+ return this._upload;
101
+ }
102
+ set upload(value) {
103
+ this._upload = value;
104
+ if (this._upload && this.onUploadSet) {
105
+ this.onUploadSet(this._upload);
106
+ }
107
+ }
108
+ }
109
+ export class UploadSet {
110
+ constructor() {
111
+ this.uploads = new Array();
112
+ this._complete = false;
113
+ this._onDone = null;
114
+ }
115
+ add(upload) {
116
+ if (this._complete) {
117
+ throw new Error('Cannot add upload to upload set. Upload set already complete.');
118
+ }
119
+ if (upload instanceof UploadHolder) {
120
+ upload.onUploadSet = (upl) => {
121
+ upl.onDone = () => {
122
+ this.checkUploadStates();
123
+ };
124
+ this.checkUploadStates();
125
+ };
126
+ }
127
+ this.uploads.push(upload);
128
+ }
129
+ complete() {
130
+ // Mark set as complete
131
+ this._complete = true;
132
+ // add listeners to each upload
133
+ for (let upl of this.uploads) {
134
+ if (upl instanceof Upload) {
135
+ upl.onDone = (upl) => {
136
+ this.checkUploadStates();
137
+ };
138
+ }
139
+ else if (upl instanceof UploadHolder) {
140
+ if (upl.upload) {
141
+ upl.upload.onDone = (upl) => {
142
+ this.checkUploadStates();
143
+ };
144
+ }
145
+ }
146
+ }
147
+ // check immediately if already done
148
+ this.checkUploadStates();
149
+ }
150
+ set onDone(value) {
151
+ this._onDone = value;
152
+ this.checkUploadStates();
153
+ }
154
+ checkUploadStates() {
155
+ //console.debug("Check upload state...")
156
+ if (this._complete) {
157
+ if (this._onDone) {
158
+ for (let upl of this.uploads) {
159
+ if (upl instanceof Upload) {
160
+ if (UploadStatus.DONE !== upl.status) {
161
+ // At least this upload is not yet done
162
+ // Do nothing
163
+ //console.debug("Check upload state: Upload not done.")
164
+ return;
165
+ }
166
+ }
167
+ else if (upl instanceof UploadHolder) {
168
+ if (upl.upload) {
169
+ if (UploadStatus.DONE !== upl.upload.status) {
170
+ // At least this upload is not yet done
171
+ // Do nothing
172
+ //console.debug("Check upload state: Upload (holder) not done.")
173
+ return;
174
+ }
175
+ }
176
+ else {
177
+ // The actual upload is not yet set
178
+ //console.debug("Check upload state: Upload (holder): upload not yet set.")
179
+ return;
180
+ }
181
+ }
182
+ }
183
+ // set is complete and all upload parts are done, call done callback
184
+ //console.debug("Check upload state: All done.")
185
+ this._onDone(this);
186
+ }
187
+ }
82
188
  }
83
189
  }
84
190
  export class Uploader {
@@ -255,4 +361,4 @@ export class Uploader {
255
361
  }
256
362
  }
257
363
  }
258
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvbmV0L3VwbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVJLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUV4QyxxQkFBcUI7QUFDckIsTUFBTSxDQUFOLElBQVksWUFBc0U7QUFBbEYsV0FBWSxZQUFZO0lBQUUsK0NBQVEsQ0FBQTtJQUFFLHlEQUFhLENBQUE7SUFBRyxpREFBUyxDQUFBO0lBQUUsK0NBQVEsQ0FBQTtJQUFFLDhDQUFRLENBQUE7QUFBQSxDQUFDLEVBQXRFLFlBQVksS0FBWixZQUFZLFFBQTBEO0FBRWxGLHdCQUF3QjtBQUN4Qiw0RkFBNEY7QUFDNUYsTUFBTSxDQUFOLElBQVksY0FBK0U7QUFBM0YsV0FBWSxjQUFjO0lBQUcsbURBQVEsQ0FBQTtJQUFFLDZEQUFhLENBQUE7SUFBRSxxRUFBaUIsQ0FBQTtJQUFDLG1EQUFRLENBQUE7SUFBRSxrREFBUSxDQUFBO0FBQUEsQ0FBQyxFQUEvRSxjQUFjLEtBQWQsY0FBYyxRQUFpRTtBQUUzRixNQUFNLE9BQU8seUJBQXlCO0lBTWxDLFlBQVksVUFBa0IsRUFBRSxRQUFnQixFQUFFLE1BQXNCO1FBQ3BFLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO1FBQzFCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDVixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENB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IjpbIlxyXG4gICAgaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZX0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbiAgICBpbXBvcnQgeyB0aW1lb3V0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXHJcblxyXG4gICAgLy8gc3RhdGUgb2YgYW4gdXBsb2FkXHJcbiAgICBleHBvcnQgZW51bSBVcGxvYWRTdGF0dXMge0lETEUgPSAxLCBVUExPQURJTkcgPSAyLCAgQUJPUlQgPSAzLCBET05FID0gMCwgRVJSID0gLTF9XHJcblxyXG4gICAgLy8gc3RhdGUgb2YgdGhlIHVwbG9hZGVyXHJcbiAgICAvLyBUUllfVVBMT0FESU5HIGlzIHVwbG9hZGluZyBzdGF0ZSBhZnRlciBhbiBlcnJvciAoZm9yIGV4YW1wbGUgaWYgZGlzY29ubmVjdGVkIGZyb20gc2VydmVyKVxyXG4gICAgZXhwb3J0IGVudW0gVXBsb2FkZXJTdGF0dXMgeyBET05FID0gMCwgVVBMT0FESU5HID0gMSwgVFJZX1VQTE9BRElORyA9IDIsTkVYVCA9IDMsIEVSUiA9IC0xfVxyXG5cclxuICAgIGV4cG9ydCBjbGFzcyBVcGxvYWRlclN0YXR1c0NoYW5nZUV2ZW50IHtcclxuICAgICAgICBwcml2YXRlIF9zaXplUXVldWVkOm51bWJlcjtcclxuICAgICAgICBwcml2YXRlIF9zaXplRG9uZTpudW1iZXI7XHJcbiAgICAgICAgcHJpdmF0ZSBfc3RhdHVzOiBVcGxvYWRlclN0YXR1cztcclxuXHJcblxyXG4gICAgICAgIGNvbnN0cnVjdG9yKHNpemVRdWV1ZWQ6IG51bWJlciwgc2l6ZURvbmU6IG51bWJlciwgc3RhdHVzOiBVcGxvYWRlclN0YXR1cykge1xyXG4gICAgICAgICAgICB0aGlzLl9zaXplUXVldWVkID0gc2l6ZVF1ZXVlZDtcclxuICAgICAgICAgICAgdGhpcy5fc2l6ZURvbmUgPSBzaXplRG9uZTtcclxuICAgICAgICAgICAgdGhpcy5fc3RhdHVzID0gc3RhdHVzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0IHNpemVRdWV1ZWQoKTpudW1iZXIge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZVF1ZXVlZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldCBzaXplRG9uZSgpOm51bWJlciB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaXplRG9uZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldCBzdGF0dXMoKTogVXBsb2FkZXJTdGF0dXMge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdHVzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdXBsb2FkRG9uZSgpOiBib29sZWFuIHtcclxuICAgICAgICAgICAgcmV0dXJuICh0aGlzLl9zaXplRG9uZSA+PSB0aGlzLl9zaXplUXVldWVkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHBlcmNlbnREb25lKCk6IG51bWJlciB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9zaXplUXVldWVkID09IDApIHtcclxuICAgICAgICAgICAgICAgIC8vIG5vIGRhdGEgcXVldWVkLCB3ZSBhcmUgXCJkb25lXCJcclxuICAgICAgICAgICAgICAgIHJldHVybiAxMDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IHBlcmNlbnQgPSBNYXRoLmZsb29yKHRoaXMuX3NpemVEb25lICogMTAwIC8gdGhpcy5fc2l6ZVF1ZXVlZCk7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJVcGxvYWQgc3RhdHVzOiBxdWV1ZWQ6IFwiK3RoaXMuX3NpemVRdWV1ZWQrXCIsIGRvbmU6IFwiK3RoaXMuX3NpemVEb25lK1wiLCBcIitwZXJjZW50K1wiJVwiKVxyXG4gICAgICAgICAgICByZXR1cm4gcGVyY2VudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydCBjbGFzcyBVcGxvYWQge1xyXG5cclxuICAgICAgICBwcml2YXRlIF9kYXRhOkJsb2J8Rm9ybURhdGE7XHJcbiAgICAgICAgcHJpdmF0ZSBfdXJsOnN0cmluZztcclxuXHJcbiAgICAgICAgc3RhdHVzOiBVcGxvYWRTdGF0dXM7XHJcblxyXG4gICAgICAgIGNvbnN0cnVjdG9yKGJsb2I6QmxvYnxGb3JtRGF0YSwgdXJsOnN0cmluZyxwcml2YXRlIHNlcnZlclBlcnNpc3RhYmxlOlNlcnZlclBlcnNpc3RhYmxlfG51bGw9bnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLl9kYXRhID0gYmxvYjtcclxuICAgICAgICAgICAgdGhpcy5fdXJsID0gdXJsO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9IFVwbG9hZFN0YXR1cy5JRExFO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0IHVybCgpOnN0cmluZyB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl91cmw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnZXQgZGF0YSgpOkJsb2J8Rm9ybURhdGEge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGF0YTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRvbmUoKXtcclxuICAgICAgICAgICAgdGhpcy5zdGF0dXM9VXBsb2FkU3RhdHVzLkRPTkU7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlNpbmdsZSB1cGxvYWQgZG9uZS5cIik7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuc2VydmVyUGVyc2lzdGFibGUpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlcnZlclBlcnNpc3RhYmxlLnNlcnZlclBlcnNpc3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiU2luZ2xlIHVwbG9hZCBzZXQgc2VydmVyIHBlcnNpc3RlZDogXCIrdGhpcy5zZXJ2ZXJQZXJzaXN0YWJsZSk7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlNlcnZlciBwZXJzaXN0YWJsZSBub3Qgc2V0LlwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIHB1YmxpYyB0b1N0cmluZyA9ICgpIDogc3RyaW5nID0+IHtcclxuICAgICAgICBsZXQgcz1gVXBsb2FkOiBTdGF0dXM6ICR7dGhpcy5zdGF0dXN9LCBVUkw6ICR7dGhpcy5fdXJsfWA7XHJcbiAgICAgICAgaWYodGhpcy5fZGF0YSBpbnN0YW5jZW9mIEJsb2Ipe1xyXG4gICAgICAgICAgICBzPXMrYCwgU2l6ZTogJHt0aGlzLl9kYXRhLnNpemV9YDtcclxuICAgICAgICB9ZWxzZSBpZih0aGlzLl9kYXRhIGluc3RhbmNlb2YgIEZvcm1EYXRhKXtcclxuICAgICAgICAgICAvLyBUT0RPIChpdGVyYXRlIHRocm91Z2ggcGFydHMgPz8pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZXhwb3J0IGludGVyZmFjZSBTZXJ2ZXJQZXJzaXN0YWJsZXtcclxuICAgICAgICBzZXJ2ZXJQZXJzaXN0ZWQ6Ym9vbGVhbjtcclxuICAgIH1cclxuXHJcbiAgICBleHBvcnQgY2xhc3MgVXBsb2FkZXIge1xyXG4gICAgICAgIFBPU1RfTUlOX1RJTUVPVVQgPSAxMjAwMDA7IC8vIDJtaW4gcGx1cyAuLi5cclxuICAgICAgICBQT1NUX1RJTUVPVVRfUEVSX0tCID0gMTAwMDsgIC8vIC4uLiAxcyBwZXIga0JcclxuXHJcbiAgICAgICAgUkVUUllfREVMQVk6IG51bWJlciA9IDMwMDAwOyAvLyByZXRyeSBldmVyeSAzMHNcclxuICAgICAgICBERUJVR19ERUxBWTogbnVtYmVyID0gMDtcclxuICAgICAgICAvL0RFQlVHX0RFTEFZOm51bWJlcj0wO1xyXG4gICAgICAgIHByaXZhdGUgc3RhdHVzOiBVcGxvYWRlclN0YXR1cyA9IFVwbG9hZGVyU3RhdHVzLkRPTkU7XHJcbiAgICAgICAgcHJpdmF0ZSBxdWU6IEFycmF5PFVwbG9hZD47XHJcbiAgICAgICAgbGlzdGVuZXI6ICgodWU6IFVwbG9hZGVyU3RhdHVzQ2hhbmdlRXZlbnQpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgcHJpdmF0ZSBfc2l6ZVF1ZXVlZDogbnVtYmVyID0gMDtcclxuICAgICAgICBwcml2YXRlIF9zaXplRG9uZTogbnVtYmVyID0gMDtcclxuXHJcbiAgICAgICAgcHJpdmF0ZSByZXRyeVRpbWVyUnVubmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHByaXZhdGUgcmV0cnlUaW1lcklkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAgICAgcHJpdmF0ZSB0ZTpUZXh0RW5jb2Rlcj1uZXcgVGV4dEVuY29kZXIoKTtcclxuXHJcbiAgICAgICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LCBwcml2YXRlIHdpdGhDcmVkZW50aWFsczogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucXVlID0gbmV3IEFycmF5PFVwbG9hZD4oKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHByaXZhdGUgZGF0YVNpemUoZHQ6QmxvYnxGb3JtRGF0YSl7XHJcbiAgICAgICAgICAgIGxldCBzaT0wO1xyXG4gICAgICAgICAgICBpZihkdCBpbnN0YW5jZW9mIEJsb2Ipe1xyXG4gICAgICAgICAgICAgICAgc2k9ZHQuc2l6ZTtcclxuICAgICAgICAgICAgfWVsc2UgaWYoZHQgaW5zdGFuY2VvZiAgRm9ybURhdGEpe1xyXG4gICAgICAgICAgICAgICAgZHQuZm9yRWFjaCgodixrKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHYgaW5zdGFuY2VvZiBGaWxlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2krPXYuc2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZih0eXBlb2YgdiA9PT0nc3RyaW5nJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVuY29kZSB0byBVVC1mOCB0byBnZXQgdXBsb2FkIHNpemVcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2krPSB0aGlzLnRlLmVuY29kZSgpLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBzaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHByaXZhdGUgIHVwbG9hZERvbmUodWw6VXBsb2FkKSB7XHJcblxyXG4gICAgICAgICAgICB1bC5kb25lKCk7XHJcblxyXG4gICAgICAgICAgICAvLyByZW1vdmUgdXBsb2FkIGZyb20gcXVldWVcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnF1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucXVlW2ldID09PSB1bCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGZvdW5kLCByZW1vdmVcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnF1ZS5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVsU2l6ZSA9IHRoaXMuZGF0YVNpemUodWwuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2l6ZURvbmUgKz0gdWxTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHNldCB0byBkb25lIGZvciBub3cuLi5cclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBVcGxvYWRlclN0YXR1cy5ORVhUO1xyXG4gICAgICAgICAgICAvLyBjb250aW51ZVxyXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3MoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHByaXZhdGUgc3RhcnRVcGxvYWQodWw6VXBsb2FkKSB7XHJcblxyXG4gICAgICAgICAgICB1bC5zdGF0dXMgPSBVcGxvYWRTdGF0dXMuVVBMT0FESU5HO1xyXG4gICAgICAgICAgICBpZiAoVXBsb2FkZXJTdGF0dXMuRVJSID09PSB0aGlzLnN0YXR1cykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBVcGxvYWRlclN0YXR1cy5UUllfVVBMT0FESU5HO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBVcGxvYWRlclN0YXR1cy5VUExPQURJTkc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBkU2l6ZT10aGlzLmRhdGFTaXplKHVsLmRhdGEpO1xyXG4gICAgICAgICAgICBsZXQgdGltZW91dEZvckRhdGFTaXplPWRTaXplKnRoaXMuUE9TVF9USU1FT1VUX1BFUl9LQi8xMDAwO1xyXG4gICAgICAgICAgICBsZXQgdGltZW9WYWw6bnVtYmVyPU1hdGgucm91bmQodGhpcy5QT1NUX01JTl9USU1FT1VUK3RpbWVvdXRGb3JEYXRhU2l6ZSlcclxuICAgICAgICAgICAgLy8gcGlwZSh0aW1lb3V0KCkpIGlzIG5vdCB0aGUgc2FtZSBhcyB4aHIudGltZW91dFxyXG5cclxuICAgICAgICAgIGxldCB1cGxvYWRlZFVwbG9hZDpVcGxvYWR8bnVsbD1udWxsO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJQb3N0IHVwbG9hZDogXCIrdWwpXHJcbiAgICAgICAgICB0aGlzLmh0dHAucG9zdCh1bC51cmwsdWwuZGF0YSx7d2l0aENyZWRlbnRpYWxzOnRoaXMud2l0aENyZWRlbnRpYWxzfSkucGlwZSh0aW1lb3V0KHRpbWVvVmFsKSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICBkYXRhID0+IHtcclxuICAgICAgICAgICAgICB1cGxvYWRlZFVwbG9hZCA9IHVsO1xyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZygnTmV4dCBtZXRob2QgY2FsbGVkIGZvciB1cGxvYWQ6ICcrdXBsb2FkZWRVcGxvYWQpXHJcbiAgICAgICAgICAgIH0sKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoZXJyLmVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIC8vIEEgY2xpZW50LXNpZGUgb3IgbmV0d29yayBlcnJvciBvY2N1cnJlZC4gSGFuZGxlIGl0IGFjY29yZGluZ2x5LlxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVXBsb2FkIGVycm9yIG9jY3VycmVkOicsIGVyci5lcnJvci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gVGhlIGJhY2tlbmQgcmV0dXJuZWQgYW4gdW5zdWNjZXNzZnVsIHJlc3BvbnNlIGNvZGUuXHJcbiAgICAgICAgICAgICAgICAvLyBUaGUgcmVzcG9uc2UgYm9keSBtYXkgY29udGFpbiBjbHVlcyBhcyB0byB3aGF0IHdlbnQgd3JvbmcsXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBVcGxvYWQgZXJyb3I6IFNlcnZlciByZXR1cm5lZCBjb2RlICR7ZXJyLnN0YXR1c31gKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzRXJyb3IodWwpXHJcbiAgICAgICAgICAgIH0sKCk9PntcclxuICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoJ1VwbG9hZCBjb21wbGV0ZSBtZXRob2QgY2FsbGVkJylcclxuICAgICAgICAgICAgICBpZih1cGxvYWRlZFVwbG9hZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuREVCVUdfREVMQVk+MCkge1xyXG4gICAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWREb25lKHVsKTtcclxuICAgICAgICAgICAgICAgICAgfSwgdGhpcy5ERUJVR19ERUxBWSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZERvbmUodXBsb2FkZWRVcGxvYWQpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdVcGxvYWQgcG9zdCBjb21wbGV0ZSwgYnV0IHVwbG9hZCBub3Qgc2V0IGluIG5leHQgbWV0aG9kIScpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHByaXZhdGUgcHJvY2Vzc0Vycm9yKHVsOlVwbG9hZCkge1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJQcm9jZXNzIHVwbG9hZCBlcnJvci4uLlwiKVxyXG4gICAgICAgICAgICB1bC5zdGF0dXM9VXBsb2FkU3RhdHVzLkVSUlxyXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9IFVwbG9hZGVyU3RhdHVzLkVSUjtcclxuXHJcbiAgICAgICAgICAgIGxldCB1ZSA9IG5ldyBVcGxvYWRlclN0YXR1c0NoYW5nZUV2ZW50KHRoaXMuX3NpemVRdWV1ZWQsIHRoaXMuX3NpemVEb25lLCB0aGlzLnN0YXR1cyk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmxpc3RlbmVyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVyKHVlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gc2V0IHJldHJ5IHRpbWVyXHJcbiAgICAgICAgICAgIHRoaXMucmV0cnlUaW1lcklkPXdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmV0cnlUaW1lclJ1bm5pbmc9ZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJVcGxvYWQgcmV0cnkgdGltZXIgZXhwcmlyZWQuIENvbnRpbnVlIHByb2Nlc3NpbmcuLi5cIilcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvY2VzcygpO1xyXG4gICAgICAgICAgICB9LCB0aGlzLlJFVFJZX0RFTEFZKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmV0cnlUaW1lclJ1bm5pbmc9dHJ1ZTtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiU3RhcnRlZCB1cGxvYWQgcmV0cnkgdGltZXIgXCIrdGhpcy5SRVRSWV9ERUxBWStcIm1zIC4uLlwiKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIHByaXZhdGUgcHJvY2VzcygpIHtcclxuICAgICAgICAvLyBjbGVhciByZXRyeSB0aW1lciBpZiBzZXRcclxuICAgICAgICBpZih0aGlzLnJldHJ5VGltZXJSdW5uaW5nKXtcclxuICAgICAgICAgICAgaWYodGhpcy5yZXRyeVRpbWVySWQpIHtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5yZXRyeVRpbWVySWQpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucmV0cnlUaW1lclJ1bm5pbmc9ZmFsc2VcclxuICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkNsZWFyZWQgcmV0cnkgdGltZXIuXCIpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcHVsOiBVcGxvYWQgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiVXBsb2FkZXIgc3RhdHVzOiBcIit0aGlzLnN0YXR1cylcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnF1ZS5sZW5ndGg7XHJcbiAgICAgICAgLy9jb25zb2xlLmRlYnVnKHMrXCIgdXBsb2FkcyBhcmUgaW4gdGhlIHF1ZXVlLlwiKVxyXG5cclxuICAgICAgICBpZiAocz4wICYmIFVwbG9hZGVyU3RhdHVzLlVQTE9BRElORyAhPSB0aGlzLnN0YXR1cyAmJiBVcGxvYWRlclN0YXR1cy5UUllfVVBMT0FESU5HICE9IHRoaXMuc3RhdHVzKSB7XHJcblxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHVsID0gdGhpcy5xdWVbaV07XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJVcGxvYWQgXCIrdWwrXCIgc3RhdHVzOlwiK3VsLnN0YXR1cylcclxuICAgICAgICAgICAgaWYgKHVsLnN0YXR1cyA9PT0gVXBsb2FkU3RhdHVzLklETEUpIHtcclxuICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiVXBsb2FkIFwiK3VsK1wiIHN0YXJ0VXBsb2FkXCIpXHJcbiAgICAgICAgICAgICAgdGhpcy5zdGFydFVwbG9hZCh1bCk7XHJcbiAgICAgICAgICAgICAgcHVsID0gdWw7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICghcHVsKSB7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJDaGVjayBFUlIgdXBsb2Fkcy4uLlwiKVxyXG4gICAgICAgICAgICAvLyBub3cgZmFpbGVkIHVwbG9hZHNcclxuICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiTm8gcmVndWxhciB1cGxvYWQgZm91bmQuIExvb2tpbmcgZm9yIGVycm9yIHN0YXRlIHVwbG9hZHMuXCIpXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgczsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgbGV0IHVsID0gdGhpcy5xdWVbaV07XHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIlVwbG9hZCBcIit1bCtcIiBzdGF0dXM6XCIrdWwuc3RhdHVzKVxyXG4gICAgICAgICAgICAgIGlmICh1bC5zdGF0dXMgPT09IFVwbG9hZFN0YXR1cy5FUlIpIHtcclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJVcGxvYWQgKEVSUikgXCIrdWwrXCIgc3RhcnRVcGxvYWRcIilcclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlN0YXJ0IGVycm9yIHN0YXRlIHVwbG9hZCBcIit1bClcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRVcGxvYWQodWwpO1xyXG4gICAgICAgICAgICAgICAgcHVsID0gdWw7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYocz09MCl7XHJcbiAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJVcGxvYWQgZG9uZS5cIilcclxuICAgICAgICAgIHRoaXMuc3RhdHVzPVVwbG9hZGVyU3RhdHVzLkRPTkVcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHVlID0gbmV3IFVwbG9hZGVyU3RhdHVzQ2hhbmdlRXZlbnQodGhpcy5fc2l6ZVF1ZXVlZCwgdGhpcy5fc2l6ZURvbmUsIHRoaXMuc3RhdHVzKTtcclxuICAgICAgICBpZiAodGhpcy5saXN0ZW5lcikge1xyXG4gICAgICAgICAgdGhpcy5saXN0ZW5lcih1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAgIHF1ZXVlVXBsb2FkKHVsOiBVcGxvYWQpIHtcclxuICAgICAgICAgICAgaWYgKHVsKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdWxTaXplID0gdGhpcy5kYXRhU2l6ZSh1bC5kYXRhKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucXVlLnB1c2godWwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2l6ZVF1ZXVlZCArPSB1bFNpemU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3MoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4iXX0=
364
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvbmV0L3VwbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVJLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUV4QyxxQkFBcUI7QUFDckIsTUFBTSxDQUFOLElBQVksWUFBc0U7QUFBbEYsV0FBWSxZQUFZO0lBQUUsK0NBQVEsQ0FBQTtJQUFFLHlEQUFhLENBQUE7SUFBRyxpREFBUyxDQUFBO0lBQUUsK0NBQVEsQ0FBQTtJQUFFLDhDQUFRLENBQUE7QUFBQSxDQUFDLEVBQXRFLFlBQVksS0FBWixZQUFZLFFBQTBEO0FBRWxGLHdCQUF3QjtBQUN4Qiw0RkFBNEY7QUFDNUYsTUFBTSxDQUFOLElBQVksY0FBK0U7QUFBM0YsV0FBWSxjQUFjO0lBQUcsbURBQVEsQ0FBQTtJQUFFLDZEQUFhLENBQUE7SUFBRSxxRUFBaUIsQ0FBQTtJQUFDLG1EQUFRLENBQUE7SUFBRSxrREFBUSxDQUFBO0FBQUEsQ0FBQyxFQUEvRSxjQUFjLEtBQWQsY0FBYyxRQUFpRTtBQUUzRixNQUFNLE9BQU8seUJBQXlCO0lBTWxDLFlBQVksVUFBa0IsRUFBRSxRQUFnQixFQUFFLE1BQXNCO1FBQ3BFLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO1FBQzFCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDVixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFdBQVcsR0FBQyxJQUFJLENBQUMsU0FB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LElBQUksQ0FBQyxNQUFNLEdBQUMsY0FBYyxDQUFDLElBQUksQ0FBQTtTQUNoQztRQUNELElBQUksRUFBRSxHQUFHLElBQUkseUJBQXlCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0RixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNuQjtJQUNILENBQUM7SUFFQyxXQUFXLENBQUMsRUFBVTtRQUNsQixJQUFJLEVBQUUsRUFBRTtZQUNKLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xCLElBQUksQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDO1lBQzNCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNsQjtJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbIlxyXG4gICAgaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZX0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbiAgICBpbXBvcnQgeyB0aW1lb3V0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXHJcblxyXG4gICAgLy8gc3RhdGUgb2YgYW4gdXBsb2FkXHJcbiAgICBleHBvcnQgZW51bSBVcGxvYWRTdGF0dXMge0lETEUgPSAxLCBVUExPQURJTkcgPSAyLCAgQUJPUlQgPSAzLCBET05FID0gMCwgRVJSID0gLTF9XHJcblxyXG4gICAgLy8gc3RhdGUgb2YgdGhlIHVwbG9hZGVyXHJcbiAgICAvLyBUUllfVVBMT0FESU5HIGlzIHVwbG9hZGluZyBzdGF0ZSBhZnRlciBhbiBlcnJvciAoZm9yIGV4YW1wbGUgaWYgZGlzY29ubmVjdGVkIGZyb20gc2VydmVyKVxyXG4gICAgZXhwb3J0IGVudW0gVXBsb2FkZXJTdGF0dXMgeyBET05FID0gMCwgVVBMT0FESU5HID0gMSwgVFJZX1VQTE9BRElORyA9IDIsTkVYVCA9IDMsIEVSUiA9IC0xfVxyXG5cclxuICAgIGV4cG9ydCBjbGFzcyBVcGxvYWRlclN0YXR1c0NoYW5nZUV2ZW50IHtcclxuICAgICAgICBwcml2YXRlIF9zaXplUXVldWVkOm51bWJlcjtcclxuICAgICAgICBwcml2YXRlIF9zaXplRG9uZTpudW1iZXI7XHJcbiAgICAgICAgcHJpdmF0ZSBfc3RhdHVzOiBVcGxvYWRlclN0YXR1cztcclxuXHJcblxyXG4gICAgICAgIGNvbnN0cnVjdG9yKHNpemVRdWV1ZWQ6IG51bWJlciwgc2l6ZURvbmU6IG51bWJlciwgc3RhdHVzOiBVcGxvYWRlclN0YXR1cykge1xyXG4gICAgICAgICAgICB0aGlzLl9zaXplUXVldWVkID0gc2l6ZVF1ZXVlZDtcclxuICAgICAgICAgICAgdGhpcy5fc2l6ZURvbmUgPSBzaXplRG9uZTtcclxuICAgICAgICAgICAgdGhpcy5fc3RhdHVzID0gc3RhdHVzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0IHNpemVRdWV1ZWQoKTpudW1iZXIge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZVF1ZXVlZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldCBzaXplRG9uZSgpOm51bWJlciB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaXplRG9uZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNpemVJblF1ZXVlKCl7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZVF1ZXVlZC10aGlzLl9zaXplRG9uZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldCBzdGF0dXMoKTogVXBsb2FkZXJTdGF0dXMge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdHVzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdXBsb2FkRG9uZSgpOiBib29sZWFuIHtcclxuICAgICAgICAgICAgcmV0dXJuICh0aGlzLl9zaXplRG9uZSA+PSB0aGlzLl9zaXplUXVldWVkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHBlcmNlbnREb25lKCk6IG51bWJlciB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9zaXplUXVldWVkID09IDApIHtcclxuICAgICAgICAgICAgICAgIC8vIG5vIGRhdGEgcXVldWVkLCB3ZSBhcmUgXCJkb25lXCJcclxuICAgICAgICAgICAgICAgIHJldHVybiAxMDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IHBlcmNlbnQgPSBNYXRoLmZsb29yKHRoaXMuX3NpemVEb25lICogMTAwIC8gdGhpcy5fc2l6ZVF1ZXVlZCk7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJVcGxvYWQgc3RhdHVzOiBxdWV1ZWQ6IFwiK3RoaXMuX3NpemVRdWV1ZWQrXCIsIGRvbmU6IFwiK3RoaXMuX3NpemVEb25lK1wiLCBcIitwZXJjZW50K1wiJVwiKVxyXG4gICAgICAgICAgICByZXR1cm4gcGVyY2VudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydCBjbGFzcyBVcGxvYWQge1xyXG5cclxuICAgICAgZ2V0IHNlcnZlclBlcnNpc3RhYmxlKCk6IFNlcnZlclBlcnNpc3RhYmxlIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlcnZlclBlcnNpc3RhYmxlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAgIHByaXZhdGUgX2RhdGE6QmxvYnxGb3JtRGF0YTtcclxuICAgICAgICBwcml2YXRlIF91cmw6c3RyaW5nO1xyXG5cclxuICAgICAgICBzdGF0dXM6IFVwbG9hZFN0YXR1cztcclxuICAgICAgICBvbkRvbmU6KCh1cGxvYWQ6VXBsb2FkKT0+dm9pZCkgfCBudWxsPW51bGw7XHJcblxyXG4gICAgICAgIGNvbnN0cnVjdG9yKGJsb2I6QmxvYnxGb3JtRGF0YSwgdXJsOnN0cmluZyxwcml2YXRlIF9zZXJ2ZXJQZXJzaXN0YWJsZTpTZXJ2ZXJQZXJzaXN0YWJsZXxudWxsPW51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5fZGF0YSA9IGJsb2I7XHJcbiAgICAgICAgICAgIHRoaXMuX3VybCA9IHVybDtcclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBVcGxvYWRTdGF0dXMuSURMRTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldCB1cmwoKTpzdHJpbmcge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdXJsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0IGRhdGEoKTpCbG9ifEZvcm1EYXRhIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkb25lKCl7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzPVVwbG9hZFN0YXR1cy5ET05FO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJTaW5nbGUgdXBsb2FkIGRvbmUuXCIpO1xyXG4gICAgICAgICAgICBpZih0aGlzLl9zZXJ2ZXJQZXJzaXN0YWJsZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuX3NlcnZlclBlcnNpc3RhYmxlLnNlcnZlclBlcnNpc3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiU2luZ2xlIHVwbG9hZCBzZXQgc2VydmVyIHBlcnNpc3RlZDogXCIrdGhpcy5zZXJ2ZXJQZXJzaXN0YWJsZSk7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlNlcnZlciBwZXJzaXN0YWJsZSBub3Qgc2V0LlwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZih0aGlzLm9uRG9uZSl7XHJcbiAgICAgICAgICAgICAgdGhpcy5vbkRvbmUodGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgIHB1YmxpYyB0b1N0cmluZyA9ICgpIDogc3RyaW5nID0+IHtcclxuICAgICAgICBsZXQgcz1gVXBsb2FkOiBTdGF0dXM6ICR7dGhpcy5zdGF0dXN9LCBVUkw6ICR7dGhpcy5fdXJsfWA7XHJcbiAgICAgICAgaWYodGhpcy5fZGF0YSBpbnN0YW5jZW9mIEJsb2Ipe1xyXG4gICAgICAgICAgICBzPXMrYCwgU2l6ZTogJHt0aGlzLl9kYXRhLnNpemV9YDtcclxuICAgICAgICB9ZWxzZSBpZih0aGlzLl9kYXRhIGluc3RhbmNlb2YgIEZvcm1EYXRhKXtcclxuICAgICAgICAgICAvLyBUT0RPIChpdGVyYXRlIHRocm91Z2ggcGFydHMgPz8pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZXhwb3J0IGNsYXNzIFVwbG9hZEhvbGRlcntcclxuXHJcbiAgICAgIG9uVXBsb2FkU2V0OigodXBsb2FkOlVwbG9hZCk9PnZvaWQpfG51bGw9bnVsbDtcclxuXHJcbiAgICAgIGdldCB1cGxvYWQoKTogVXBsb2FkIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwbG9hZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgc2V0IHVwbG9hZCh2YWx1ZTogVXBsb2FkIHwgbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX3VwbG9hZCA9IHZhbHVlO1xyXG4gICAgICAgIGlmKHRoaXMuX3VwbG9hZCAmJiB0aGlzLm9uVXBsb2FkU2V0KXtcclxuICAgICAgICAgIHRoaXMub25VcGxvYWRTZXQodGhpcy5fdXBsb2FkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcHJpdmF0ZSBfdXBsb2FkOlVwbG9hZHxudWxsPW51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZXhwb3J0IGNsYXNzIFVwbG9hZFNldHtcclxuXHJcbiAgICAgIHByaXZhdGUgdXBsb2FkczogQXJyYXk8VXBsb2FkfFVwbG9hZEhvbGRlcj49bmV3IEFycmF5PFVwbG9hZHxVcGxvYWRIb2xkZXI+KCk7XHJcbiAgICAgIHByaXZhdGUgX2NvbXBsZXRlPWZhbHNlO1xyXG5cclxuICAgICAgcHJpdmF0ZSBfb25Eb25lOigodXBsb2FkU2V0OlVwbG9hZFNldCk9PnZvaWQpfG51bGw9bnVsbDtcclxuXHJcbiAgICAgIGFkZCh1cGxvYWQ6VXBsb2FkfFVwbG9hZEhvbGRlcil7XHJcbiAgICAgICAgaWYodGhpcy5fY29tcGxldGUpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGFkZCB1cGxvYWQgdG8gdXBsb2FkIHNldC4gVXBsb2FkIHNldCBhbHJlYWR5IGNvbXBsZXRlLicpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHVwbG9hZCBpbnN0YW5jZW9mIFVwbG9hZEhvbGRlcil7XHJcbiAgICAgICAgICB1cGxvYWQub25VcGxvYWRTZXQ9KHVwbCk9PntcclxuICAgICAgICAgICAgdXBsLm9uRG9uZT0oKT0+e1xyXG4gICAgICAgICAgICAgIHRoaXMuY2hlY2tVcGxvYWRTdGF0ZXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmNoZWNrVXBsb2FkU3RhdGVzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBsb2Fkcy5wdXNoKHVwbG9hZCk7XHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb21wbGV0ZSgpe1xyXG4gICAgICAgIC8vIE1hcmsgc2V0IGFzIGNvbXBsZXRlXHJcbiAgICAgICAgdGhpcy5fY29tcGxldGU9dHJ1ZTtcclxuXHJcbiAgICAgICAgLy8gYWRkIGxpc3RlbmVycyB0byBlYWNoIHVwbG9hZFxyXG4gICAgICAgIGZvcihsZXQgdXBsIG9mIHRoaXMudXBsb2Fkcyl7XHJcbiAgICAgICAgICBpZih1cGwgaW5zdGFuY2VvZiBVcGxvYWQpIHtcclxuICAgICAgICAgICAgdXBsLm9uRG9uZSA9ICh1cGw6IFVwbG9hZCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuY2hlY2tVcGxvYWRTdGF0ZXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfWVsc2UgaWYodXBsIGluc3RhbmNlb2YgVXBsb2FkSG9sZGVyKXtcclxuICAgICAgICAgICAgaWYodXBsLnVwbG9hZCl7XHJcbiAgICAgICAgICAgICAgdXBsLnVwbG9hZC5vbkRvbmUgPSAodXBsOiBVcGxvYWQpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tVcGxvYWRTdGF0ZXMoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGNoZWNrIGltbWVkaWF0ZWx5IGlmIGFscmVhZHkgZG9uZVxyXG4gICAgICAgIHRoaXMuY2hlY2tVcGxvYWRTdGF0ZXMoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc2V0IG9uRG9uZSh2YWx1ZTogKCh1cGxvYWRTZXQ6IFVwbG9hZFNldCkgPT4gdm9pZCkgfCBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5fb25Eb25lID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5jaGVja1VwbG9hZFN0YXRlcygpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBwcml2YXRlIGNoZWNrVXBsb2FkU3RhdGVzKCl7XHJcbiAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiQ2hlY2sgdXBsb2FkIHN0YXRlLi4uXCIpXHJcbiAgICAgICAgaWYodGhpcy5fY29tcGxldGUpe1xyXG5cclxuICAgICAgICAgIGlmKHRoaXMuX29uRG9uZSkge1xyXG4gICAgICAgICAgICBmb3IobGV0IHVwbCBvZiB0aGlzLnVwbG9hZHMpe1xyXG4gICAgICAgICAgICAgIGlmKHVwbCBpbnN0YW5jZW9mIFVwbG9hZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKFVwbG9hZFN0YXR1cy5ET05FICE9PSB1cGwuc3RhdHVzKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIEF0IGxlYXN0IHRoaXMgdXBsb2FkIGlzIG5vdCB5ZXQgZG9uZVxyXG4gICAgICAgICAgICAgICAgICAvLyBEbyBub3RoaW5nXHJcbiAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkNoZWNrIHVwbG9hZCBzdGF0ZTogVXBsb2FkIG5vdCBkb25lLlwiKVxyXG4gICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfWVsc2UgaWYodXBsIGluc3RhbmNlb2YgVXBsb2FkSG9sZGVyKXtcclxuICAgICAgICAgICAgICAgIGlmKHVwbC51cGxvYWQpe1xyXG4gICAgICAgICAgICAgICAgICBpZiAoVXBsb2FkU3RhdHVzLkRPTkUgIT09IHVwbC51cGxvYWQuc3RhdHVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQXQgbGVhc3QgdGhpcyB1cGxvYWQgaXMgbm90IHlldCBkb25lXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRG8gbm90aGluZ1xyXG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkNoZWNrIHVwbG9hZCBzdGF0ZTogVXBsb2FkIChob2xkZXIpIG5vdCBkb25lLlwiKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgIC8vIFRoZSBhY3R1YWwgdXBsb2FkIGlzIG5vdCB5ZXQgc2V0XHJcbiAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkNoZWNrIHVwbG9hZCBzdGF0ZTogVXBsb2FkIChob2xkZXIpOiB1cGxvYWQgbm90IHlldCBzZXQuXCIpXHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gc2V0IGlzIGNvbXBsZXRlIGFuZCBhbGwgdXBsb2FkIHBhcnRzIGFyZSBkb25lLCBjYWxsIGRvbmUgY2FsbGJhY2tcclxuICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiQ2hlY2sgdXBsb2FkIHN0YXRlOiBBbGwgZG9uZS5cIilcclxuICAgICAgICAgICAgdGhpcy5fb25Eb25lKHRoaXMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydCBpbnRlcmZhY2UgU2VydmVyUGVyc2lzdGFibGV7XHJcbiAgICAgICAgc2VydmVyUGVyc2lzdGVkOmJvb2xlYW47XHJcbiAgICB9XHJcblxyXG4gICAgZXhwb3J0IGNsYXNzIFVwbG9hZGVyIHtcclxuICAgICAgICBQT1NUX01JTl9USU1FT1VUID0gMTIwMDAwOyAvLyAybWluIHBsdXMgLi4uXHJcbiAgICAgICAgUE9TVF9USU1FT1VUX1BFUl9LQiA9IDEwMDA7ICAvLyAuLi4gMXMgcGVyIGtCXHJcblxyXG4gICAgICAgIFJFVFJZX0RFTEFZOiBudW1iZXIgPSAzMDAwMDsgLy8gcmV0cnkgZXZlcnkgMzBzXHJcbiAgICAgICAgREVCVUdfREVMQVk6IG51bWJlciA9IDA7XHJcbiAgICAgICAgLy9ERUJVR19ERUxBWTpudW1iZXI9MDtcclxuICAgICAgICBwcml2YXRlIHN0YXR1czogVXBsb2FkZXJTdGF0dXMgPSBVcGxvYWRlclN0YXR1cy5ET05FO1xyXG4gICAgICAgIHByaXZhdGUgcXVlOiBBcnJheTxVcGxvYWQ+O1xyXG4gICAgICAgIGxpc3RlbmVyOiAoKHVlOiBVcGxvYWRlclN0YXR1c0NoYW5nZUV2ZW50KSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgIHByaXZhdGUgX3NpemVRdWV1ZWQ6IG51bWJlciA9IDA7XHJcbiAgICAgICAgcHJpdmF0ZSBfc2l6ZURvbmU6IG51bWJlciA9IDA7XHJcblxyXG4gICAgICAgIHByaXZhdGUgcmV0cnlUaW1lclJ1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgICBwcml2YXRlIHJldHJ5VGltZXJJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgICAgIHByaXZhdGUgdGU6VGV4dEVuY29kZXI9bmV3IFRleHRFbmNvZGVyKCk7XHJcblxyXG4gICAgICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgcHJpdmF0ZSB3aXRoQ3JlZGVudGlhbHM6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgICAgICB0aGlzLnF1ZSA9IG5ldyBBcnJheTxVcGxvYWQ+KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwcml2YXRlIGRhdGFTaXplKGR0OkJsb2J8Rm9ybURhdGEpe1xyXG4gICAgICAgICAgICBsZXQgc2k9MDtcclxuICAgICAgICAgICAgaWYoZHQgaW5zdGFuY2VvZiBCbG9iKXtcclxuICAgICAgICAgICAgICAgIHNpPWR0LnNpemU7XHJcbiAgICAgICAgICAgIH1lbHNlIGlmKGR0IGluc3RhbmNlb2YgIEZvcm1EYXRhKXtcclxuICAgICAgICAgICAgICAgIGR0LmZvckVhY2goKHYsayk9PntcclxuICAgICAgICAgICAgICAgICAgICBpZih2IGluc3RhbmNlb2YgRmlsZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpKz12LnNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYodHlwZW9mIHYgPT09J3N0cmluZycpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlbmNvZGUgdG8gVVQtZjggdG8gZ2V0IHVwbG9hZCBzaXplXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpKz0gdGhpcy50ZS5lbmNvZGUoKS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gc2k7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwcml2YXRlICB1cGxvYWREb25lKHVsOlVwbG9hZCkge1xyXG5cclxuICAgICAgICAgICAgdWwuZG9uZSgpO1xyXG5cclxuICAgICAgICAgICAgLy8gcmVtb3ZlIHVwbG9hZCBmcm9tIHF1ZXVlXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5xdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnF1ZVtpXSA9PT0gdWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBmb3VuZCwgcmVtb3ZlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWUuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB1bFNpemUgPSB0aGlzLmRhdGFTaXplKHVsLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NpemVEb25lICs9IHVsU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBzZXQgdG8gZG9uZSBmb3Igbm93Li4uXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gVXBsb2FkZXJTdGF0dXMuTkVYVDtcclxuICAgICAgICAgICAgLy8gY29udGludWVcclxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwcml2YXRlIHN0YXJ0VXBsb2FkKHVsOlVwbG9hZCkge1xyXG5cclxuICAgICAgICAgICAgdWwuc3RhdHVzID0gVXBsb2FkU3RhdHVzLlVQTE9BRElORztcclxuICAgICAgICAgICAgaWYgKFVwbG9hZGVyU3RhdHVzLkVSUiA9PT0gdGhpcy5zdGF0dXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gVXBsb2FkZXJTdGF0dXMuVFJZX1VQTE9BRElORztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gVXBsb2FkZXJTdGF0dXMuVVBMT0FESU5HO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZFNpemU9dGhpcy5kYXRhU2l6ZSh1bC5kYXRhKTtcclxuICAgICAgICAgICAgbGV0IHRpbWVvdXRGb3JEYXRhU2l6ZT1kU2l6ZSp0aGlzLlBPU1RfVElNRU9VVF9QRVJfS0IvMTAwMDtcclxuICAgICAgICAgICAgbGV0IHRpbWVvVmFsOm51bWJlcj1NYXRoLnJvdW5kKHRoaXMuUE9TVF9NSU5fVElNRU9VVCt0aW1lb3V0Rm9yRGF0YVNpemUpXHJcbiAgICAgICAgICAgIC8vIHBpcGUodGltZW91dCgpKSBpcyBub3QgdGhlIHNhbWUgYXMgeGhyLnRpbWVvdXRcclxuXHJcbiAgICAgICAgICBsZXQgdXBsb2FkZWRVcGxvYWQ6VXBsb2FkfG51bGw9bnVsbDtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiUG9zdCB1cGxvYWQ6IFwiK3VsKVxyXG4gICAgICAgICAgdGhpcy5odHRwLnBvc3QodWwudXJsLHVsLmRhdGEse3dpdGhDcmVkZW50aWFsczp0aGlzLndpdGhDcmVkZW50aWFsc30pLnBpcGUodGltZW91dCh0aW1lb1ZhbCkpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgdXBsb2FkZWRVcGxvYWQgPSB1bDtcclxuICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoJ05leHQgbWV0aG9kIGNhbGxlZCBmb3IgdXBsb2FkOiAnK3VwbG9hZGVkVXBsb2FkKVxyXG4gICAgICAgICAgICB9LChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGVyci5lcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBBIGNsaWVudC1zaWRlIG9yIG5ldHdvcmsgZXJyb3Igb2NjdXJyZWQuIEhhbmRsZSBpdCBhY2NvcmRpbmdseS5cclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VwbG9hZCBlcnJvciBvY2N1cnJlZDonLCBlcnIuZXJyb3IubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIFRoZSBiYWNrZW5kIHJldHVybmVkIGFuIHVuc3VjY2Vzc2Z1bCByZXNwb25zZSBjb2RlLlxyXG4gICAgICAgICAgICAgICAgLy8gVGhlIHJlc3BvbnNlIGJvZHkgbWF5IGNvbnRhaW4gY2x1ZXMgYXMgdG8gd2hhdCB3ZW50IHdyb25nLFxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgVXBsb2FkIGVycm9yOiBTZXJ2ZXIgcmV0dXJuZWQgY29kZSAke2Vyci5zdGF0dXN9YCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0Vycm9yKHVsKVxyXG4gICAgICAgICAgICB9LCgpPT57XHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKCdVcGxvYWQgY29tcGxldGUgbWV0aG9kIGNhbGxlZCcpXHJcbiAgICAgICAgICAgICAgaWYodXBsb2FkZWRVcGxvYWQpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLkRFQlVHX0RFTEFZPjApIHtcclxuICAgICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkRG9uZSh1bCk7XHJcbiAgICAgICAgICAgICAgICAgIH0sIHRoaXMuREVCVUdfREVMQVkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWREb25lKHVwbG9hZGVkVXBsb2FkKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVXBsb2FkIHBvc3QgY29tcGxldGUsIGJ1dCB1cGxvYWQgbm90IHNldCBpbiBuZXh0IG1ldGhvZCEnKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwcml2YXRlIHByb2Nlc3NFcnJvcih1bDpVcGxvYWQpIHtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiUHJvY2VzcyB1cGxvYWQgZXJyb3IuLi5cIilcclxuICAgICAgICAgICAgdWwuc3RhdHVzPVVwbG9hZFN0YXR1cy5FUlJcclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBVcGxvYWRlclN0YXR1cy5FUlI7XHJcblxyXG4gICAgICAgICAgICBsZXQgdWUgPSBuZXcgVXBsb2FkZXJTdGF0dXNDaGFuZ2VFdmVudCh0aGlzLl9zaXplUXVldWVkLCB0aGlzLl9zaXplRG9uZSwgdGhpcy5zdGF0dXMpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5saXN0ZW5lcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lcih1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIHNldCByZXRyeSB0aW1lclxyXG4gICAgICAgICAgICB0aGlzLnJldHJ5VGltZXJJZD13aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJldHJ5VGltZXJSdW5uaW5nPWZhbHNlO1xyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiVXBsb2FkIHJldHJ5IHRpbWVyIGV4cHJpcmVkLiBDb250aW51ZSBwcm9jZXNzaW5nLi4uXCIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3MoKTtcclxuICAgICAgICAgICAgfSwgdGhpcy5SRVRSWV9ERUxBWSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJldHJ5VGltZXJSdW5uaW5nPXRydWU7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlN0YXJ0ZWQgdXBsb2FkIHJldHJ5IHRpbWVyIFwiK3RoaXMuUkVUUllfREVMQVkrXCJtcyAuLi5cIilcclxuICAgICAgICB9XHJcblxyXG4gICAgICBwcml2YXRlIHByb2Nlc3MoKSB7XHJcbiAgICAgICAgLy8gY2xlYXIgcmV0cnkgdGltZXIgaWYgc2V0XHJcbiAgICAgICAgaWYodGhpcy5yZXRyeVRpbWVyUnVubmluZyl7XHJcbiAgICAgICAgICAgIGlmKHRoaXMucmV0cnlUaW1lcklkKSB7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMucmV0cnlUaW1lcklkKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJldHJ5VGltZXJSdW5uaW5nPWZhbHNlXHJcbiAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJDbGVhcmVkIHJldHJ5IHRpbWVyLlwiKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHB1bDogVXBsb2FkIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlVwbG9hZGVyIHN0YXR1czogXCIrdGhpcy5zdGF0dXMpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5xdWUubGVuZ3RoO1xyXG4gICAgICAgIC8vY29uc29sZS5kZWJ1ZyhzK1wiIHVwbG9hZHMgYXJlIGluIHRoZSBxdWV1ZS5cIilcclxuXHJcbiAgICAgICAgaWYgKHM+MCAmJiBVcGxvYWRlclN0YXR1cy5VUExPQURJTkcgIT0gdGhpcy5zdGF0dXMgJiYgVXBsb2FkZXJTdGF0dXMuVFJZX1VQTE9BRElORyAhPSB0aGlzLnN0YXR1cykge1xyXG5cclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgczsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCB1bCA9IHRoaXMucXVlW2ldO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiVXBsb2FkIFwiK3VsK1wiIHN0YXR1czpcIit1bC5zdGF0dXMpXHJcbiAgICAgICAgICAgIGlmICh1bC5zdGF0dXMgPT09IFVwbG9hZFN0YXR1cy5JRExFKSB7XHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIlVwbG9hZCBcIit1bCtcIiBzdGFydFVwbG9hZFwiKVxyXG4gICAgICAgICAgICAgIHRoaXMuc3RhcnRVcGxvYWQodWwpO1xyXG4gICAgICAgICAgICAgIHB1bCA9IHVsO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoIXB1bCkge1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiQ2hlY2sgRVJSIHVwbG9hZHMuLi5cIilcclxuICAgICAgICAgICAgLy8gbm93IGZhaWxlZCB1cGxvYWRzXHJcbiAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIk5vIHJlZ3VsYXIgdXBsb2FkIGZvdW5kLiBMb29raW5nIGZvciBlcnJvciBzdGF0ZSB1cGxvYWRzLlwiKVxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHM7IGkrKykge1xyXG4gICAgICAgICAgICAgIGxldCB1bCA9IHRoaXMucXVlW2ldO1xyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJVcGxvYWQgXCIrdWwrXCIgc3RhdHVzOlwiK3VsLnN0YXR1cylcclxuICAgICAgICAgICAgICBpZiAodWwuc3RhdHVzID09PSBVcGxvYWRTdGF0dXMuRVJSKSB7XHJcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiVXBsb2FkIChFUlIpIFwiK3VsK1wiIHN0YXJ0VXBsb2FkXCIpXHJcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJTdGFydCBlcnJvciBzdGF0ZSB1cGxvYWQgXCIrdWwpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0VXBsb2FkKHVsKTtcclxuICAgICAgICAgICAgICAgIHB1bCA9IHVsO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHM9PTApe1xyXG4gICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiVXBsb2FkIGRvbmUuXCIpXHJcbiAgICAgICAgICB0aGlzLnN0YXR1cz1VcGxvYWRlclN0YXR1cy5ET05FXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB1ZSA9IG5ldyBVcGxvYWRlclN0YXR1c0NoYW5nZUV2ZW50KHRoaXMuX3NpemVRdWV1ZWQsIHRoaXMuX3NpemVEb25lLCB0aGlzLnN0YXR1cyk7XHJcbiAgICAgICAgaWYgKHRoaXMubGlzdGVuZXIpIHtcclxuICAgICAgICAgIHRoaXMubGlzdGVuZXIodWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgICBxdWV1ZVVwbG9hZCh1bDogVXBsb2FkKSB7XHJcbiAgICAgICAgICAgIGlmICh1bCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHVsU2l6ZSA9IHRoaXMuZGF0YVNpemUodWwuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZS5wdXNoKHVsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NpemVRdWV1ZWQgKz0gdWxTaXplO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuIl19
@@ -1,7 +1,65 @@
1
+ import { SprDb } from "./db/inddb";
2
+ import { Observable } from "rxjs";
3
+ import { PersistentAudioStorageTarget } from "./audio/inddb_audio_buffer";
1
4
  export class RecorderComponent {
2
5
  constructor(uploader) {
3
6
  this.uploader = uploader;
4
7
  this.dataSaved = true;
8
+ this._persistentAudioStorageTarget = null;
9
+ }
10
+ printStorageInfos() {
11
+ // Safari seems not to support the estimate function.
12
+ if (navigator.storage && navigator.storage.estimate instanceof Function) {
13
+ navigator.storage.estimate().then((se) => {
14
+ console.info("Estimated storage usage: " + se.usage + ", quota: " + se.quota);
15
+ }).catch((err) => "Could not get get storage infos: " + err.message);
16
+ }
17
+ else {
18
+ console.info("User agent does not support storage manager estimate function.");
19
+ }
20
+ }
21
+ prepare(persistentAudioStorage = false) {
22
+ if (persistentAudioStorage) {
23
+ this.printStorageInfos();
24
+ }
25
+ return new Observable(subscriber => {
26
+ if (persistentAudioStorage) {
27
+ SprDb.prepare().subscribe({
28
+ next: (db) => {
29
+ this._persistentAudioStorageTarget = new PersistentAudioStorageTarget(db, SprDb.RECORDING_FILE_CACHE_OBJECT_STORE_NAME);
30
+ //let delCnt=0;
31
+ this._persistentAudioStorageTarget.deleteAll().subscribe({
32
+ next: () => {
33
+ //delCnt++;
34
+ subscriber.next();
35
+ },
36
+ complete: () => {
37
+ //console.info('Storage info after deletion of all ('+delCnt+') entries:');
38
+ console.info('Persistent audio storage object store cleared.');
39
+ this.printStorageInfos();
40
+ subscriber.complete();
41
+ },
42
+ error: (err) => {
43
+ subscriber.error(err);
44
+ }
45
+ });
46
+ window.addEventListener('beforeunload', (e) => {
47
+ if (this._persistentAudioStorageTarget) {
48
+ // Delete on page leave. Di not register callbacks to prevent page leave blocking
49
+ this._persistentAudioStorageTarget.deleteAll().subscribe();
50
+ }
51
+ });
52
+ },
53
+ error: (err) => {
54
+ subscriber.error(err);
55
+ }
56
+ });
57
+ }
58
+ else {
59
+ subscriber.next();
60
+ subscriber.complete();
61
+ }
62
+ });
5
63
  }
6
64
  }
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkZXJfY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3JlY29yZGVyX2NvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFTQSxNQUFNLE9BQWdCLGlCQUFpQjtJQUluQyxZQUFzQixRQUErQjtRQUEvQixhQUFRLEdBQVIsUUFBUSxDQUF1QjtRQUZyRCxjQUFTLEdBQVksSUFBSSxDQUFDO0lBRzFCLENBQUM7Q0FJSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U3BlZWNoUmVjb3JkZXJVcGxvYWRlcn0gZnJvbSBcIi4vc3BlZWNocmVjb3JkZXIvc3BydXBsb2FkZXJcIjtcclxuaW1wb3J0IHtVcGxvYWRlclN0YXR1cywgVXBsb2FkZXJTdGF0dXNDaGFuZ2VFdmVudH0gZnJvbSBcIi4vbmV0L3VwbG9hZGVyXCI7XHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSZWFkeVN0YXRlUHJvdmlkZXIge1xyXG4gICAgcmVhZHkoKTpib29sZWFuO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJlY29yZGVyQ29tcG9uZW50IGltcGxlbWVudHMgUmVhZHlTdGF0ZVByb3ZpZGVye1xyXG5cclxuICAgIGRhdGFTYXZlZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIHVwbG9hZGVyOlNwZWVjaFJlY29yZGVyVXBsb2FkZXIpIHtcclxuICAgIH1cclxuXHJcbiAgICBhYnN0cmFjdCByZWFkeSgpOmJvb2xlYW47XHJcbiAgICBhYnN0cmFjdCBnZXQgc2NyZWVuTG9ja2VkKCk6Ym9vbGVhbjtcclxufVxyXG5cclxuIl19
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkZXJfY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3JlY29yZGVyX2NvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFDLDRCQUE0QixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFReEUsTUFBTSxPQUFnQixpQkFBaUI7SUFLbkMsWUFBc0IsUUFBK0I7UUFBL0IsYUFBUSxHQUFSLFFBQVEsQ0FBdUI7UUFIckQsY0FBUyxHQUFZLElBQUksQ0FBQztRQUVoQixrQ0FBNkIsR0FBbUMsSUFBSSxDQUFDO0lBQ3ZCLENBQUM7SUFFekQsaUJBQWlCO1FBQ2YscURBQXFEO1FBQ3JELElBQUcsU0FBUyxDQUFDLE9BQU8sSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsWUFBWSxRQUFRLEVBQUU7WUFDdEUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtnQkFDdkMsT0FBTyxDQUFDLElBQUksQ0FBQywyQkFBMkIsR0FBRyxFQUFFLENBQUMsS0FBSyxHQUFHLFdBQVcsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEYsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxtQ0FBbUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDdEU7YUFBSTtZQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0VBQWdFLENBQUMsQ0FBQztTQUNoRjtJQUNILENBQUM7SUFFRCxPQUFPLENBQUMsc0JBQXNCLEdBQUMsS0FBSztRQUVoQyxJQUFHLHNCQUFzQixFQUFDO1lBQ3RCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1NBQzVCO1FBQ0gsT0FBTyxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNqQyxJQUFJLHNCQUFzQixFQUFFO2dCQUMxQixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDO29CQUN4QixJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTt3QkFDWCxJQUFJLENBQUMsNkJBQTZCLEdBQUcsSUFBSSw0QkFBNEIsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7d0JBQ3hILGVBQWU7d0JBQ2YsSUFBSSxDQUFDLDZCQUE2QixDQUFDLFNBQVMsRUFBRSxDQUFDLFNBQVMsQ0FBQzs0QkFDdkQsSUFBSSxFQUFDLEdBQUUsRUFBRTtnQ0FDUCxXQUFXO2dDQUNYLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQzs0QkFDcEIsQ0FBQzs0QkFDRCxRQUFRLEVBQUMsR0FBRSxFQUFFO2dDQUNYLDJFQUEyRTtnQ0FDM0UsT0FBTyxDQUFDLElBQUksQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO2dDQUMvRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQ0FDekIsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDOzRCQUN4QixDQUFDOzRCQUNELEtBQUssRUFBQyxDQUFDLEdBQUcsRUFBQyxFQUFFO2dDQUNYLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQ3hCLENBQUM7eUJBRUYsQ0FBQyxDQUFDO3dCQUVILE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRTs0QkFDeEMsSUFBRyxJQUFJLENBQUMsNkJBQTZCLEVBQUU7Z0NBQ25DLGlGQUFpRjtnQ0FDakYsSUFBSSxDQUFDLDZCQUE2QixDQUFDLFNBQVMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDOzZCQUM5RDt3QkFDTCxDQUFDLENBQUMsQ0FBQztvQkFFTCxDQUFDO29CQUNELEtBQUssRUFBQyxDQUFDLEdBQUcsRUFBQyxFQUFFO3dCQUNYLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3hCLENBQUM7aUJBQ0YsQ0FBQyxDQUFDO2FBQ0o7aUJBQUk7Z0JBQ0gsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNsQixVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDdkI7UUFDSCxDQUFDLENBQ0YsQ0FBQztJQUNGLENBQUM7Q0FJSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U3BlZWNoUmVjb3JkZXJVcGxvYWRlcn0gZnJvbSBcIi4vc3BlZWNocmVjb3JkZXIvc3BydXBsb2FkZXJcIjtcclxuaW1wb3J0IHtTcHJEYn0gZnJvbSBcIi4vZGIvaW5kZGJcIjtcclxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge1BlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXR9IGZyb20gXCIuL2F1ZGlvL2luZGRiX2F1ZGlvX2J1ZmZlclwiO1xyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmVhZHlTdGF0ZVByb3ZpZGVyIHtcclxuICAgIHJlYWR5KCk6Ym9vbGVhbjtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBSZWNvcmRlckNvbXBvbmVudCBpbXBsZW1lbnRzIFJlYWR5U3RhdGVQcm92aWRlcntcclxuXHJcbiAgICBkYXRhU2F2ZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIHByb3RlY3RlZCBfcGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldDpQZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0fG51bGw9bnVsbDtcclxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCB1cGxvYWRlcjpTcGVlY2hSZWNvcmRlclVwbG9hZGVyKSB7fVxyXG5cclxuICAgIHByaW50U3RvcmFnZUluZm9zKCl7XHJcbiAgICAgIC8vIFNhZmFyaSBzZWVtcyBub3QgdG8gc3VwcG9ydCB0aGUgZXN0aW1hdGUgZnVuY3Rpb24uXHJcbiAgICAgIGlmKG5hdmlnYXRvci5zdG9yYWdlICYmIG5hdmlnYXRvci5zdG9yYWdlLmVzdGltYXRlIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcclxuICAgICAgICBuYXZpZ2F0b3Iuc3RvcmFnZS5lc3RpbWF0ZSgpLnRoZW4oKHNlKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmluZm8oXCJFc3RpbWF0ZWQgc3RvcmFnZSB1c2FnZTogXCIgKyBzZS51c2FnZSArIFwiLCBxdW90YTogXCIgKyBzZS5xdW90YSk7XHJcbiAgICAgICAgfSkuY2F0Y2goKGVycikgPT4gXCJDb3VsZCBub3QgZ2V0IGdldCBzdG9yYWdlIGluZm9zOiBcIiArIGVyci5tZXNzYWdlKTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgY29uc29sZS5pbmZvKFwiVXNlciBhZ2VudCBkb2VzIG5vdCBzdXBwb3J0IHN0b3JhZ2UgbWFuYWdlciBlc3RpbWF0ZSBmdW5jdGlvbi5cIik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcmVwYXJlKHBlcnNpc3RlbnRBdWRpb1N0b3JhZ2U9ZmFsc2UpOk9ic2VydmFibGU8dm9pZD57XHJcblxyXG4gICAgICAgIGlmKHBlcnNpc3RlbnRBdWRpb1N0b3JhZ2Upe1xyXG4gICAgICAgICAgICB0aGlzLnByaW50U3RvcmFnZUluZm9zKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoc3Vic2NyaWJlciA9PiB7XHJcbiAgICAgICAgaWYgKHBlcnNpc3RlbnRBdWRpb1N0b3JhZ2UpIHtcclxuICAgICAgICAgIFNwckRiLnByZXBhcmUoKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAoZGIpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLl9wZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0ID0gbmV3IFBlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQoZGIsIFNwckRiLlJFQ09SRElOR19GSUxFX0NBQ0hFX09CSkVDVF9TVE9SRV9OQU1FKTtcclxuICAgICAgICAgICAgICAvL2xldCBkZWxDbnQ9MDtcclxuICAgICAgICAgICAgICB0aGlzLl9wZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0LmRlbGV0ZUFsbCgpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OigpPT57XHJcbiAgICAgICAgICAgICAgICAgIC8vZGVsQ250Kys7XHJcbiAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCgpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOigpPT57XHJcbiAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5pbmZvKCdTdG9yYWdlIGluZm8gYWZ0ZXIgZGVsZXRpb24gb2YgYWxsICgnK2RlbENudCsnKSBlbnRyaWVzOicpO1xyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oJ1BlcnNpc3RlbnQgYXVkaW8gc3RvcmFnZSBvYmplY3Qgc3RvcmUgY2xlYXJlZC4nKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wcmludFN0b3JhZ2VJbmZvcygpO1xyXG4gICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6KGVycik9PntcclxuICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsKGUpPT57XHJcbiAgICAgICAgICAgICAgICAgIGlmKHRoaXMuX3BlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIERlbGV0ZSBvbiBwYWdlIGxlYXZlLiBEaSBub3QgcmVnaXN0ZXIgY2FsbGJhY2tzIHRvIHByZXZlbnQgcGFnZSBsZWF2ZSBibG9ja2luZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldC5kZWxldGVBbGwoKS5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6KGVycik9PntcclxuICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgc3Vic2NyaWJlci5uZXh0KCk7XHJcbiAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGFic3RyYWN0IHJlYWR5KCk6Ym9vbGVhbjtcclxuICAgIGFic3RyYWN0IGdldCBzY3JlZW5Mb2NrZWQoKTpib29sZWFuO1xyXG59XHJcblxyXG4iXX0=
@@ -24,6 +24,15 @@ export var Browser;
24
24
  Browser["Edge"] = "EDGE";
25
25
  Browser["Opera"] = "OPERA";
26
26
  })(Browser || (Browser = {}));
27
+ export var AudioStorageType;
28
+ (function (AudioStorageType) {
29
+ AudioStorageType["MEM_ENTIRE"] = "MEM_ENTIRE";
30
+ AudioStorageType["MEM_CHUNKED"] = "MEM_CHUNKED";
31
+ AudioStorageType["DB_CHUNKED"] = "DB_CHUNKED";
32
+ AudioStorageType["NET_CHUNKED"] = "NET_CHUNKED";
33
+ AudioStorageType["MEM_ENTIRE_AUTO_NET_CHUNKED"] = "MEM_ENTIRE_AUTO_NET_CHUNKED";
34
+ AudioStorageType["MEM_CHUNKED_AUTO_NET_CHUNKED"] = "MEM_CHUNKED_AUTO_NET_CHUNKED";
35
+ })(AudioStorageType || (AudioStorageType = {}));
27
36
  export class ProjectUtil {
28
37
  static audioChannelCount(project) {
29
38
  let chs = ProjectUtil.DEFAULT_AUDIO_CHANNEL_COUNT;
@@ -37,4 +46,4 @@ export class ProjectUtil {
37
46
  }
38
47
  }
39
48
  ProjectUtil.DEFAULT_AUDIO_CHANNEL_COUNT = 2;
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9zcGVlY2hyZWNvcmRlci9wcm9qZWN0L3Byb2plY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ0JBLE1BQU0sQ0FBTixJQUFZLGNBQTRDO0FBQXhELFdBQVksY0FBYztJQUFFLGlDQUFhLENBQUE7SUFBQyxpQ0FBYSxDQUFBO0FBQUEsQ0FBQyxFQUE1QyxjQUFjLEtBQWQsY0FBYyxRQUE4QjtBQUFBLENBQUM7QUFFekQsTUFBTSxDQUFOLElBQVksUUFBMEU7QUFBdEYsV0FBWSxRQUFRO0lBQUUsMkJBQWEsQ0FBQTtJQUFDLDJCQUFhLENBQUE7SUFBQywrQkFBaUIsQ0FBQTtJQUFDLCtCQUFpQixDQUFBO0FBQUEsQ0FBQyxFQUExRSxRQUFRLEtBQVIsUUFBUSxRQUFrRTtBQUN0RixNQUFNLENBQU4sSUFBWSxXQUFpQztBQUE3QyxXQUFZLFdBQVc7SUFBRSxvQ0FBbUIsQ0FBQTtBQUFBLENBQUMsRUFBakMsV0FBVyxLQUFYLFdBQVcsUUFBc0I7QUFBQSxDQUFDO0FBQzlDLE1BQU0sQ0FBTixJQUFZLE9BQXlGO0FBQXJHLFdBQVksT0FBTztJQUFFLDhCQUFpQixDQUFBO0lBQUMsZ0NBQW1CLENBQUE7SUFBQyw0QkFBZSxDQUFBO0lBQUMsd0JBQVcsQ0FBQTtJQUFDLDBCQUFhLENBQUE7QUFBQSxDQUFDLEVBQXpGLE9BQU8sS0FBUCxPQUFPLFFBQWtGO0FBcUJyRyxNQUFNLE9BQU8sV0FBVztJQUl0QixNQUFNLENBQUMsaUJBQWlCLENBQUMsT0FBZTtRQUN0QyxJQUFJLEdBQUcsR0FBQyxXQUFXLENBQUMsMkJBQTJCLENBQUM7UUFDaEQsSUFBRyxPQUFPLENBQUMsa0JBQWtCLEVBQUM7WUFDNUIsR0FBRyxHQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQztTQUNsRDthQUFLLElBQUcsT0FBTyxDQUFDLFdBQVcsRUFBQztZQUMzQixHQUFHLEdBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUM7U0FDbEM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7O0FBVnNCLHVDQUEyQixHQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGlvRm9ybWF0IHtcclxuICBjaGFubmVsczogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE1lZGlhQ2FwdHVyZUZvcm1hdCB7XHJcbiAgYXVkaW9DaGFubmVsQ291bnQ6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBdWRpb0RldmljZSB7XHJcbiAgbmFtZSA6IHN0cmluZyxcclxuICBwbGF5YmFjayA6IGJvb2xlYW4sXHJcbiAgcmVnZXggOiBib29sZWFuXHJcbn1cclxuXHJcblxyXG5leHBvcnQgZW51bSBDb25zdHJhaW50VHlwZSB7RXhhY3Q9J0VYQUNUJyxJZGVhbD0nSURFQUwnfTtcclxuXHJcbmV4cG9ydCBlbnVtIFBsYXRmb3JtIHtMaW51eD0nTElOVVgnLG1hY09TPSdNQUNPUycsV2luZG93cz0nV0lORE9XUycsQW5kcm9pZD0nQU5EUk9JRCd9XHJcbmV4cG9ydCBlbnVtIEJyb3dzZXJCYXNlIHtDaHJvbWl1bT0nQ0hST01JVU0nfTtcclxuZXhwb3J0IGVudW0gQnJvd3NlciB7RmlyZWZveD0nRklSRUZPWCcsQ2hyb21pdW09J0NIUk9NSVVNJyxDaHJvbWU9J0NIUk9NRScsRWRnZT0nRURHRScsT3BlcmE9J09QRVJBJ31cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXV0b0dhaW5Db250cm9sQ29uZmlnIHtcclxuICB2YWx1ZTogYm9vbGVhbixcclxuICAvL2NvbnN0cmFpbnRUeXBlIDogQ29uc3RyYWludFR5cGUsXHJcbiAgcGxhdGZvcm06IFBsYXRmb3JtLFxyXG4gIC8vYnJvd3NlckJhc2U6QnJvd3NlckJhc2UsXHJcbiAgLy9icm93c2VyOkJyb3dzZXJcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQcm9qZWN0IHtcclxuICBuYW1lOiBzdHJpbmcsXHJcbiAgcmVjb3JkaW5nRGV2aWNlV2FrZUxvY2s/OmJvb2xlYW4sXHJcbiAgYXVkaW9Gb3JtYXQ/OiBBdWRpb0Zvcm1hdCxcclxuICBtZWRpYUNhcHR1cmVGb3JtYXQ/OiBNZWRpYUNhcHR1cmVGb3JtYXQsXHJcbiAgYXV0b0dhaW5Db250cm9sQ29uZmlncz86QXJyYXk8QXV0b0dhaW5Db250cm9sQ29uZmlnPixcclxuICBhdWRpb0RldmljZXM/OiBBcnJheTxBdWRpb0RldmljZT4sXHJcbiAgY2h1bmtlZFJlY29yZGluZz86IGJvb2xlYW5cclxufVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBQcm9qZWN0VXRpbCB7XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9BVURJT19DSEFOTkVMX0NPVU5UPTI7XHJcblxyXG4gIHN0YXRpYyBhdWRpb0NoYW5uZWxDb3VudChwcm9qZWN0OlByb2plY3QpOiBudW1iZXJ7XHJcbiAgICBsZXQgY2hzPVByb2plY3RVdGlsLkRFRkFVTFRfQVVESU9fQ0hBTk5FTF9DT1VOVDtcclxuICAgIGlmKHByb2plY3QubWVkaWFDYXB0dXJlRm9ybWF0KXtcclxuICAgICAgY2hzPXByb2plY3QubWVkaWFDYXB0dXJlRm9ybWF0LmF1ZGlvQ2hhbm5lbENvdW50O1xyXG4gICAgfWVsc2UgaWYocHJvamVjdC5hdWRpb0Zvcm1hdCl7XHJcbiAgICAgIGNocz1wcm9qZWN0LmF1ZGlvRm9ybWF0LmNoYW5uZWxzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNocztcclxuICB9XHJcblxyXG59XHJcblxyXG5cclxuXHJcbiJdfQ==
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9zcGVlY2hyZWNvcmRlci9wcm9qZWN0L3Byb2plY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ0JBLE1BQU0sQ0FBTixJQUFZLGNBQTRDO0FBQXhELFdBQVksY0FBYztJQUFFLGlDQUFhLENBQUE7SUFBQyxpQ0FBYSxDQUFBO0FBQUEsQ0FBQyxFQUE1QyxjQUFjLEtBQWQsY0FBYyxRQUE4QjtBQUFBLENBQUM7QUFFekQsTUFBTSxDQUFOLElBQVksUUFBMEU7QUFBdEYsV0FBWSxRQUFRO0lBQUUsMkJBQWEsQ0FBQTtJQUFDLDJCQUFhLENBQUE7SUFBQywrQkFBaUIsQ0FBQTtJQUFDLCtCQUFpQixDQUFBO0FBQUEsQ0FBQyxFQUExRSxRQUFRLEtBQVIsUUFBUSxRQUFrRTtBQUN0RixNQUFNLENBQU4sSUFBWSxXQUFpQztBQUE3QyxXQUFZLFdBQVc7SUFBRSxvQ0FBbUIsQ0FBQTtBQUFBLENBQUMsRUFBakMsV0FBVyxLQUFYLFdBQVcsUUFBc0I7QUFBQSxDQUFDO0FBQzlDLE1BQU0sQ0FBTixJQUFZLE9BQXlGO0FBQXJHLFdBQVksT0FBTztJQUFFLDhCQUFpQixDQUFBO0lBQUMsZ0NBQW1CLENBQUE7SUFBQyw0QkFBZSxDQUFBO0lBQUMsd0JBQVcsQ0FBQTtJQUFDLDBCQUFhLENBQUE7QUFBQSxDQUFDLEVBQXpGLE9BQU8sS0FBUCxPQUFPLFFBQWtGO0FBRXJHLE1BQU0sQ0FBTixJQUFZLGdCQU9YO0FBUEQsV0FBWSxnQkFBZ0I7SUFDMUIsNkNBQXVCLENBQUE7SUFDdkIsK0NBQXlCLENBQUE7SUFDekIsNkNBQXVCLENBQUE7SUFDdkIsK0NBQXlCLENBQUE7SUFDekIsK0VBQXlELENBQUE7SUFDekQsaUZBQTJELENBQUE7QUFDN0QsQ0FBQyxFQVBXLGdCQUFnQixLQUFoQixnQkFBZ0IsUUFPM0I7QUFzQkQsTUFBTSxPQUFPLFdBQVc7SUFJdEIsTUFBTSxDQUFDLGlCQUFpQixDQUFDLE9BQWU7UUFDdEMsSUFBSSxHQUFHLEdBQUMsV0FBVyxDQUFDLDJCQUEyQixDQUFDO1FBQ2hELElBQUcsT0FBTyxDQUFDLGtCQUFrQixFQUFDO1lBQzVCLEdBQUcsR0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUM7U0FDbEQ7YUFBSyxJQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUM7WUFDM0IsR0FBRyxHQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDO1NBQ2xDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDOztBQVZzQix1Q0FBMkIsR0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuZXhwb3J0IGludGVyZmFjZSBBdWRpb0Zvcm1hdCB7XHJcbiAgY2hhbm5lbHM6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNZWRpYUNhcHR1cmVGb3JtYXQge1xyXG4gIGF1ZGlvQ2hhbm5lbENvdW50OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9EZXZpY2Uge1xyXG4gIG5hbWUgOiBzdHJpbmcsXHJcbiAgcGxheWJhY2sgOiBib29sZWFuLFxyXG4gIHJlZ2V4IDogYm9vbGVhblxyXG59XHJcblxyXG5cclxuZXhwb3J0IGVudW0gQ29uc3RyYWludFR5cGUge0V4YWN0PSdFWEFDVCcsSWRlYWw9J0lERUFMJ307XHJcblxyXG5leHBvcnQgZW51bSBQbGF0Zm9ybSB7TGludXg9J0xJTlVYJyxtYWNPUz0nTUFDT1MnLFdpbmRvd3M9J1dJTkRPV1MnLEFuZHJvaWQ9J0FORFJPSUQnfVxyXG5leHBvcnQgZW51bSBCcm93c2VyQmFzZSB7Q2hyb21pdW09J0NIUk9NSVVNJ307XHJcbmV4cG9ydCBlbnVtIEJyb3dzZXIge0ZpcmVmb3g9J0ZJUkVGT1gnLENocm9taXVtPSdDSFJPTUlVTScsQ2hyb21lPSdDSFJPTUUnLEVkZ2U9J0VER0UnLE9wZXJhPSdPUEVSQSd9XHJcblxyXG5leHBvcnQgZW51bSBBdWRpb1N0b3JhZ2VUeXBlIHtcclxuICBNRU1fRU5USVJFPSdNRU1fRU5USVJFJyxcclxuICBNRU1fQ0hVTktFRD0nTUVNX0NIVU5LRUQnLFxyXG4gIERCX0NIVU5LRUQ9J0RCX0NIVU5LRUQnLFxyXG4gIE5FVF9DSFVOS0VEPSdORVRfQ0hVTktFRCcsXHJcbiAgTUVNX0VOVElSRV9BVVRPX05FVF9DSFVOS0VEPSdNRU1fRU5USVJFX0FVVE9fTkVUX0NIVU5LRUQnLFxyXG4gIE1FTV9DSFVOS0VEX0FVVE9fTkVUX0NIVU5LRUQ9J01FTV9DSFVOS0VEX0FVVE9fTkVUX0NIVU5LRUQnXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXV0b0dhaW5Db250cm9sQ29uZmlnIHtcclxuICB2YWx1ZTogYm9vbGVhbixcclxuICAvL2NvbnN0cmFpbnRUeXBlIDogQ29uc3RyYWludFR5cGUsXHJcbiAgcGxhdGZvcm06IFBsYXRmb3JtLFxyXG4gIC8vYnJvd3NlckJhc2U6QnJvd3NlckJhc2UsXHJcbiAgLy9icm93c2VyOkJyb3dzZXJcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQcm9qZWN0IHtcclxuICBuYW1lOiBzdHJpbmcsXHJcbiAgcmVjb3JkaW5nRGV2aWNlV2FrZUxvY2s/OmJvb2xlYW4sXHJcbiAgYXVkaW9Gb3JtYXQ/OiBBdWRpb0Zvcm1hdCxcclxuICBtZWRpYUNhcHR1cmVGb3JtYXQ/OiBNZWRpYUNhcHR1cmVGb3JtYXQsXHJcbiAgYXV0b0dhaW5Db250cm9sQ29uZmlncz86QXJyYXk8QXV0b0dhaW5Db250cm9sQ29uZmlnPixcclxuICBhdWRpb0RldmljZXM/OiBBcnJheTxBdWRpb0RldmljZT4sXHJcbiAgY2h1bmtlZFJlY29yZGluZz86IGJvb2xlYW4sXHJcbiAgY2xpZW50QXVkaW9TdG9yYWdlVHlwZT86QXVkaW9TdG9yYWdlVHlwZVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFByb2plY3RVdGlsIHtcclxuXHJcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0FVRElPX0NIQU5ORUxfQ09VTlQ9MjtcclxuXHJcbiAgc3RhdGljIGF1ZGlvQ2hhbm5lbENvdW50KHByb2plY3Q6UHJvamVjdCk6IG51bWJlcntcclxuICAgIGxldCBjaHM9UHJvamVjdFV0aWwuREVGQVVMVF9BVURJT19DSEFOTkVMX0NPVU5UO1xyXG4gICAgaWYocHJvamVjdC5tZWRpYUNhcHR1cmVGb3JtYXQpe1xyXG4gICAgICBjaHM9cHJvamVjdC5tZWRpYUNhcHR1cmVGb3JtYXQuYXVkaW9DaGFubmVsQ291bnQ7XHJcbiAgICB9ZWxzZSBpZihwcm9qZWN0LmF1ZGlvRm9ybWF0KXtcclxuICAgICAgY2hzPXByb2plY3QuYXVkaW9Gb3JtYXQuY2hhbm5lbHM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2hzO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcblxyXG5cclxuIl19
@@ -53,9 +53,9 @@ export class ProjectService {
53
53
  }
54
54
  }
55
55
  ProjectService.PROJECT_API_CTX = 'project';
56
- ProjectService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ProjectService, deps: [{ token: i1.HttpClient }, { token: i2.PlatformLocation }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
57
- ProjectService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ProjectService });
58
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ProjectService, decorators: [{
56
+ ProjectService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ProjectService, deps: [{ token: i1.HttpClient }, { token: i2.PlatformLocation }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
57
+ ProjectService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ProjectService });
58
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ProjectService, decorators: [{
59
59
  type: Injectable
60
60
  }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.PlatformLocation }, { type: i3.SpeechRecorderConfig, decorators: [{
61
61
  type: Inject,
@@ -7,14 +7,15 @@ export class RecordingFile {
7
7
  this.recordingFileId = null;
8
8
  this.uuid = null;
9
9
  this.serverPersisted = false;
10
- this.keepAudioDataCache = false;
11
10
  this.date = null;
12
11
  this._dateAsDateObj = null;
13
12
  this.startedDate = null;
14
13
  this._startedAsDateObj = null;
15
14
  this.audioDataHolder = null;
16
15
  this.session = null;
16
+ this.channels = null;
17
17
  this.frames = null;
18
+ this.samplerate = null;
18
19
  this.timeLength = null;
19
20
  this.editSampleRate = null;
20
21
  this.editStartFrame = null;
@@ -58,6 +59,9 @@ export class SprRecordingFile extends RecordingFile {
58
59
  this.itemCode = itemcode;
59
60
  this.version = version;
60
61
  }
62
+ recordingFileDone() {
63
+ return (this.serverPersisted === true) || (this.audioDataHolder != null);
64
+ }
61
65
  filenameString() {
62
66
  let fns = '';
63
67
  if (this.session) {
@@ -76,10 +80,26 @@ export class SprRecordingFile extends RecordingFile {
76
80
  }
77
81
  }
78
82
  export class RecordingFileUtils {
83
+ static equals(recordinFile, otherRecordingFile) {
84
+ if (recordinFile && otherRecordingFile) {
85
+ if (otherRecordingFile === recordinFile) {
86
+ return true;
87
+ }
88
+ if (otherRecordingFile.uuid === recordinFile.uuid) {
89
+ return true;
90
+ }
91
+ }
92
+ return false;
93
+ }
79
94
  static setAudioData(rf, audioDataHolder) {
80
95
  rf.audioDataHolder = audioDataHolder;
81
96
  if (audioDataHolder) {
82
- rf.frames = audioDataHolder.frameLen;
97
+ if (rf.samplerate == null) {
98
+ rf.samplerate = audioDataHolder.sampleRate;
99
+ }
100
+ if (rf.frames == null) {
101
+ rf.frames = audioDataHolder.frameLen;
102
+ }
83
103
  rf.timeLength = audioDataHolder.duration;
84
104
  }
85
105
  }
@@ -92,9 +112,13 @@ export class RecordingFileUtils {
92
112
  }
93
113
  }
94
114
  static expireAudioData(rf) {
95
- let rv = rf.audioDataHolder;
96
- rf.audioDataHolder = null;
97
- return rv;
115
+ let expiredSamples = 0;
116
+ if (rf && rf.audioDataHolder) {
117
+ expiredSamples = rf.audioDataHolder.sampleCounts();
118
+ rf.audioDataHolder.releaseAudioData();
119
+ rf.audioDataHolder = null;
120
+ }
121
+ return expiredSamples;
98
122
  }
99
123
  }
100
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3NwZWVjaHJlY29yZGVyL3JlY29yZGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFTckMsTUFBTSxPQUFPLDJCQUEyQjtJQUd0QyxnQkFBZSxDQUFDO0NBQ2pCO0FBRUQsTUFBTSxPQUFPLGFBQWE7SUFpQnhCLFlBQVksSUFBVyxFQUFDLFNBQXVCLEVBQUMsZUFBb0M7UUFoQnBGLG9CQUFlLEdBQTBCLElBQUksQ0FBQztRQUM5QyxTQUFJLEdBQWEsSUFBSSxDQUFDO1FBQ3RCLG9CQUFlLEdBQUMsS0FBSyxDQUFDO1FBQ3RCLHVCQUFrQixHQUFDLEtBQUssQ0FBQztRQUN6QixTQUFJLEdBQWMsSUFBSSxDQUFDO1FBQ3ZCLG1CQUFjLEdBQVcsSUFBSSxDQUFDO1FBQzlCLGdCQUFXLEdBQWMsSUFBSSxDQUFDO1FBQzlCLHNCQUFpQixHQUFZLElBQUksQ0FBQztRQUNsQyxvQkFBZSxHQUFzQixJQUFJLENBQUM7UUFDMUMsWUFBTyxHQUFvQixJQUFJLENBQUM7UUFDaEMsV0FBTSxHQUFhLElBQUksQ0FBQztRQUN4QixlQUFVLEdBQWEsSUFBSSxDQUFDO1FBQzVCLG1CQUFjLEdBQWEsSUFBSSxDQUFDO1FBQ2hDLG1CQUFjLEdBQWEsSUFBSSxDQUFBO1FBQy9CLGlCQUFZLEdBQWEsSUFBSSxDQUFBO1FBRzNCLElBQUksQ0FBQyxPQUFPLEdBQUMsU0FBUyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxlQUFlLEdBQUMsZUFBZSxDQUFBO1FBQ3BDLElBQUcsZUFBZSxFQUFDO1lBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQztZQUNyQyxJQUFJLENBQUMsVUFBVSxHQUFDLGVBQWUsQ0FBQyxRQUFRLENB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RSxDQUFDLGVBQWUsR0FBQyxJQUFJLENBQUM7UUFDeEIsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVVUlEIH0gZnJvbSAnLi4vdXRpbHMvdXRpbHMnXHJcbmltcG9ydCB7UHJvbXB0SXRlbX0gZnJvbSBcIi4vc2NyaXB0L3NjcmlwdFwiO1xyXG5pbXBvcnQge0F1ZGlvRGF0YUhvbGRlcn0gZnJvbSBcIi4uL2F1ZGlvL2F1ZGlvX2RhdGFfaG9sZGVyXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZGluZ0ZpbGVEZXNjcmlwdG9yIHtcclxuICByZWNvcmRpbmc6UHJvbXB0SXRlbTtcclxuICB2ZXJzaW9uOm51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJlY29yZGluZ0ZpbGVEZXNjcmlwdG9ySW1wbCB7XHJcbiAgcmVjb3JkaW5nITpQcm9tcHRJdGVtO1xyXG4gIHZlcnNpb24hOm51bWJlcjtcclxuICBjb25zdHJ1Y3RvcigpIHt9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBSZWNvcmRpbmdGaWxlIHtcclxuICByZWNvcmRpbmdGaWxlSWQ6IHN0cmluZyB8IG51bWJlciB8IG51bGw9IG51bGw7XHJcbiAgdXVpZDpzdHJpbmd8bnVsbD1udWxsO1xyXG4gIHNlcnZlclBlcnNpc3RlZD1mYWxzZTtcclxuICBrZWVwQXVkaW9EYXRhQ2FjaGU9ZmFsc2U7XHJcbiAgZGF0ZTogc3RyaW5nfG51bGw9bnVsbDtcclxuICBfZGF0ZUFzRGF0ZU9iajpEYXRlfG51bGw9bnVsbDtcclxuICBzdGFydGVkRGF0ZTogc3RyaW5nfG51bGw9bnVsbDtcclxuICBfc3RhcnRlZEFzRGF0ZU9iaj86RGF0ZXxudWxsPW51bGw7XHJcbiAgYXVkaW9EYXRhSG9sZGVyOkF1ZGlvRGF0YUhvbGRlcnxudWxsPW51bGw7XHJcbiAgc2Vzc2lvbjpzdHJpbmd8bnVtYmVyfG51bGw9bnVsbDtcclxuICBmcmFtZXM6bnVtYmVyfG51bGw9bnVsbDtcclxuICB0aW1lTGVuZ3RoOm51bWJlcnxudWxsPW51bGw7XHJcbiAgZWRpdFNhbXBsZVJhdGU6bnVtYmVyfG51bGw9bnVsbDtcclxuICBlZGl0U3RhcnRGcmFtZTpudW1iZXJ8bnVsbD1udWxsXHJcbiAgZWRpdEVuZEZyYW1lOm51bWJlcnxudWxsPW51bGxcclxuXHJcbiAgY29uc3RydWN0b3IodXVpZDpzdHJpbmcsc2Vzc2lvbklkOnN0cmluZ3xudW1iZXIsYXVkaW9EYXRhSG9sZGVyOkF1ZGlvRGF0YUhvbGRlcnxudWxsKSB7XHJcbiAgICB0aGlzLnNlc3Npb249c2Vzc2lvbklkO1xyXG4gICAgdGhpcy5hdWRpb0RhdGFIb2xkZXI9YXVkaW9EYXRhSG9sZGVyXHJcbiAgICBpZihhdWRpb0RhdGFIb2xkZXIpe1xyXG4gICAgICB0aGlzLmZyYW1lcz1hdWRpb0RhdGFIb2xkZXIuZnJhbWVMZW47XHJcbiAgICAgIHRoaXMudGltZUxlbmd0aD1hdWRpb0RhdGFIb2xkZXIuZHVyYXRpb247XHJcbiAgICB9XHJcbiAgICB0aGlzLnV1aWQ9dXVpZDtcclxuICB9XHJcblxyXG4gIGZpbGVuYW1lU3RyaW5nKCk6c3RyaW5ne1xyXG4gICAgbGV0IGZuczpzdHJpbmc9Jyc7XHJcbiAgICBpZih0aGlzLnNlc3Npb24pe1xyXG4gICAgICBmbnMrPXRoaXMuc2Vzc2lvbjtcclxuICAgICAgZm5zKz0nXyc7XHJcbiAgICB9XHJcbiAgICBmbnMrPXRoaXMudXVpZDtcclxuICAgIHJldHVybiBmbnM7XHJcbiAgfVxyXG5cclxuICBlcXVhbHMob3RoZXJSZWNvcmRpbmdGaWxlOlJlY29yZGluZ0ZpbGV8bnVsbCk6Ym9vbGVhbntcclxuICAgIGlmKG90aGVyUmVjb3JkaW5nRmlsZSE9PW51bGwpIHtcclxuICAgICAgaWYgKG90aGVyUmVjb3JkaW5nRmlsZSA9PT0gdGhpcykge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChvdGhlclJlY29yZGluZ0ZpbGUudXVpZCA9PT0gdGhpcy51dWlkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHRvU3RyaW5nKCk6c3RyaW5ne1xyXG4gICAgcmV0dXJuICdSZWNvcmRpbmcgZmlsZTogVVVJRDogJyt0aGlzLnV1aWQrJywgc2Vzc2lvbjogJyt0aGlzLnNlc3Npb247XHJcbiAgfVxyXG5cclxufVxyXG5cclxuICAgIGV4cG9ydCBjbGFzcyBTcHJSZWNvcmRpbmdGaWxlIGV4dGVuZHMgUmVjb3JkaW5nRmlsZSBpbXBsZW1lbnRzICBSZWNvcmRpbmdGaWxlRGVzY3JpcHRvcntcclxuXHJcbiAgICAgIGl0ZW1Db2RlOnN0cmluZztcclxuXHJcbiAgICAgIHJlY29yZGluZyE6UHJvbXB0SXRlbTtcclxuICAgICAgdmVyc2lvbiE6bnVtYmVyO1xyXG5cclxuICAgICAgY29uc3RydWN0b3Ioc2Vzc2lvbklkOnN0cmluZ3xudW1iZXIsaXRlbWNvZGU6c3RyaW5nLHZlcnNpb246bnVtYmVyLGF1ZGlvRGF0YUhvbGRlcjpBdWRpb0RhdGFIb2xkZXJ8bnVsbCkge1xyXG4gICAgICAgICAgc3VwZXIoVVVJRC5nZW5lcmF0ZSgpLHNlc3Npb25JZCxhdWRpb0RhdGFIb2xkZXIpO1xyXG4gICAgICAgICAgdGhpcy5zZXNzaW9uPXNlc3Npb25JZDtcclxuICAgICAgICAgIHRoaXMuaXRlbUNvZGU9aXRlbWNvZGU7XHJcbiAgICAgICAgICB0aGlzLnZlcnNpb249dmVyc2lvbjtcclxuICAgICAgfVxyXG5cclxuXHJcblxyXG4gICAgICBmaWxlbmFtZVN0cmluZygpOnN0cmluZ3tcclxuICAgICAgICBsZXQgZm5zOnN0cmluZz0nJztcclxuICAgICAgICBpZih0aGlzLnNlc3Npb24pe1xyXG4gICAgICAgICAgICBmbnMrPXRoaXMuc2Vzc2lvbjtcclxuICAgICAgICAgICAgZm5zKz0nXyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHRoaXMuaXRlbUNvZGUpe1xyXG4gICAgICAgICAgZm5zKz10aGlzLml0ZW1Db2RlO1xyXG4gICAgICAgICAgZm5zKz0nXyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZucys9dGhpcy51dWlkO1xyXG4gICAgICAgIHJldHVybiBmbnM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRvU3RyaW5nKCk6c3RyaW5ne1xyXG4gICAgICAgIHJldHVybiAnUmVjb3JkaW5nIGZpbGU6IFVVSUQ6ICcrdGhpcy51dWlkKycsIHNlc3Npb246ICcrdGhpcy5zZXNzaW9uKycsIGl0ZW1jb2RlOiAnK3RoaXMuaXRlbUNvZGUrJywgdmVyc2lvbjogJyt0aGlzLnZlcnNpb24rJywgVVVJRDogJyt0aGlzLnV1aWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgZXhwb3J0IGNsYXNzIFJlY29yZGluZ0ZpbGVVdGlsc3tcclxuXHJcbiAgICAgIHN0YXRpYyBzZXRBdWRpb0RhdGEocmY6UmVjb3JkaW5nRmlsZSxhdWRpb0RhdGFIb2xkZXI6QXVkaW9EYXRhSG9sZGVyfG51bGwpe1xyXG4gICAgICAgICAgcmYuYXVkaW9EYXRhSG9sZGVyPWF1ZGlvRGF0YUhvbGRlcjtcclxuICAgICAgICAgIGlmKGF1ZGlvRGF0YUhvbGRlcikge1xyXG4gICAgICAgICAgICByZi5mcmFtZXMgPSBhdWRpb0RhdGFIb2xkZXIuZnJhbWVMZW47XHJcbiAgICAgICAgICAgIHJmLnRpbWVMZW5ndGg9YXVkaW9EYXRhSG9sZGVyLmR1cmF0aW9uO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBzdGF0aWMgc2FtcGxlQ291bnQocmY6UmVjb3JkaW5nRmlsZSk6bnVtYmVye1xyXG4gICAgICAgIGlmKHJmLmF1ZGlvRGF0YUhvbGRlcil7XHJcbiAgICAgICAgICByZXR1cm4gcmYuYXVkaW9EYXRhSG9sZGVyLnNhbXBsZUNvdW50cygpO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHN0YXRpYyBleHBpcmVBdWRpb0RhdGEocmY6UmVjb3JkaW5nRmlsZSk6QXVkaW9EYXRhSG9sZGVyfG51bGx7XHJcbiAgICAgICAgbGV0IHJ2PXJmLmF1ZGlvRGF0YUhvbGRlcjtcclxuICAgICAgICByZi5hdWRpb0RhdGFIb2xkZXI9bnVsbDtcclxuICAgICAgICByZXR1cm4gcnY7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcbiJdfQ==
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3NwZWVjaHJlY29yZGVyL3JlY29yZGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFlckMsTUFBTSxPQUFPLDJCQUEyQjtJQU10QyxnQkFBZSxDQUFDO0NBQ2pCO0FBRUQsTUFBTSxPQUFPLGFBQWE7SUFrQnhCLFlBQVksSUFBVyxFQUFDLFNBQXVCLEVBQUMsZUFBb0M7UUFqQnBGLG9CQUFlLEdBQTBCLElBQUksQ0FBQztRQUM5QyxTQUFJLEdBQWEsSUFBSSxDQUFDO1FBQ3RCLG9CQUFlLEdBQUMsS0FBSyxDQUFDO1FBQ3RCLFNBQUksR0FBYyxJQUFJLENBQUM7UUFDdkIsbUJBQWMsR0FBVyxJQUFJLENBQUM7UUFDOUIsZ0JBQVcsR0FBYyxJQUFJLENBQUM7UUFDOUIsc0JBQWlCLEdBQVksSUFBSSxDQUFDO1FBQ2xDLG9CQUFlLEdBQXNCLElBQUksQ0FBQztRQUMxQyxZQUFPLEdBQW9CLElBQUksQ0FBQztRQUNoQyxhQUFRLEdBQWEsSUFBSSxDQUFDO1FBQzFCLFdBQU0sR0FBYSxJQUFJLENBQUM7UUFDeEIsZUFBVSxHQUFhLElBQUksQ0FBQztRQUM1QixlQUFVLEdBQWEsSUFBSSxDQUFDO1FBQzVCLG1CQUFjLEdBQWEsSUFBSSxDQUFDO1FBQ2hDLG1CQUFjLEdBQWEsSUFBSSxDQUFBO1FBQy9CLGlCQUFZLEdBQWEsSUFBSSxDQUFBO1FBRzNCLElBQUksQ0FBQyxPQUFPLEdBQUMsU0FBUyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxlQUFlLEdBQUMsZUFBZSxDQUFBO1FBQ3BDLElBQUcsZUFBZSxFQUFDO1lBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQztZQUNyQyxJQUFJLENBQUMsVUFB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QUMsZUFBZSxHQUFDLGVBQWUsQ0FBQztRQUNuQyxJQUFHLGVBQWUsRUFBRTtZQUNsQixJQUFHLEVBQUUsQ0FBQyxVQUFVLElBQUUsSUFBSSxFQUFDO2dCQUNyQixFQUFFLENBQUMsVUFBVSxHQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUM7YUFDMUM7WUFDRCxJQUFHLEVBQUUsQ0FBQyxNQUFNLElBQUUsSUFBSSxFQUFFO2dCQUNsQixFQUFFLENBQUMsTUFBTSxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUM7YUFDdEM7WUFDRCxFQUFFLENBQUMsVUFBVSxHQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUM7U0FDeEM7SUFDTCxDQUFDO0lBRUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFnQjtRQUNqQyxJQUFHLEVBQUUsQ0FBQyxlQUFlLEVBQUM7WUFDcEIsT0FBTyxFQUFFLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQzFDO2FBQUk7WUFDSCxPQUFPLENBQUMsQ0FBQztTQUNWO0lBQ0gsQ0FBQztJQUNELE1BQU0sQ0FBQyxlQUFlLENBQUMsRUFBZ0I7UUFDckMsSUFBSSxjQUFjLEdBQUMsQ0FBQyxDQUFDO1FBQ3JCLElBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxlQUFlLEVBQUM7WUFDMUIsY0FBYyxHQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDakQsRUFBRSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO1lBQ3JDLEVBQUUsQ0FBQyxlQUFlLEdBQUMsSUFBSSxDQUFDO1NBQ3pCO1FBQ0QsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVVVJRCB9IGZyb20gJy4uL3V0aWxzL3V0aWxzJ1xyXG5pbXBvcnQge1Byb21wdEl0ZW19IGZyb20gXCIuL3NjcmlwdC9zY3JpcHRcIjtcclxuaW1wb3J0IHtBdWRpb0RhdGFIb2xkZXJ9IGZyb20gXCIuLi9hdWRpby9hdWRpb19kYXRhX2hvbGRlclwiO1xyXG5cclxuLy8gVE9ETyBJIHRoaW5rIHRoZSBpbnRlcmZhY2UvY2xhc3Mgc3RydWN0dXJlIG5lZWRzIHNvbWUgcmVmYWN0b3JpbmdcclxuLy8gVGhlIHF1ZXN0aW9uIGluIGdlbmVyYWwgaXMgaG93IHRvIGZldGNoIGFuIG9iamVjdCBvZiBhIGNsYXNzICh3aXRoIG1lbWJlciBtZXRob2RzKVxyXG4vLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81MDQ1MjQzMS9hbmd1bGFyLTYtaHR0cGNsaWVudC1yZXR1cm4taW5zdGFuY2Utb2YtY2xhc3NcclxuLy8gQW5ndWxhciBIVFRQQ2xpZW50IHNlZW1zIHRvIHNpbXBseVxyXG4vLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80NzQ5OTMyNC9hbmd1bGFyLTUtbW9kZWxzLWh0dHBjbGllbnQtdHlwZS1jYXN0aW5nXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZGluZ0ZpbGVEZXNjcmlwdG9yIHtcclxuICByZWNvcmRpbmc6UHJvbXB0SXRlbTtcclxuICB2ZXJzaW9uOm51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJlY29yZGluZ0ZpbGVEZXNjcmlwdG9ySW1wbCB7XHJcbiAgcmVjb3JkaW5nITpQcm9tcHRJdGVtO1xyXG4gIHZlcnNpb24hOm51bWJlcjtcclxuICBmcmFtZXM/Om51bWJlcjtcclxuICBzYW1wbGVyYXRlPzpudW1iZXI7XHJcbiAgY2hhbm5lbHM/OiBudW1iZXI7XHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUmVjb3JkaW5nRmlsZSB7XHJcbiAgcmVjb3JkaW5nRmlsZUlkOiBzdHJpbmcgfCBudW1iZXIgfCBudWxsPSBudWxsO1xyXG4gIHV1aWQ6c3RyaW5nfG51bGw9bnVsbDtcclxuICBzZXJ2ZXJQZXJzaXN0ZWQ9ZmFsc2U7XHJcbiAgZGF0ZTogc3RyaW5nfG51bGw9bnVsbDtcclxuICBfZGF0ZUFzRGF0ZU9iajpEYXRlfG51bGw9bnVsbDtcclxuICBzdGFydGVkRGF0ZTogc3RyaW5nfG51bGw9bnVsbDtcclxuICBfc3RhcnRlZEFzRGF0ZU9iaj86RGF0ZXxudWxsPW51bGw7XHJcbiAgYXVkaW9EYXRhSG9sZGVyOkF1ZGlvRGF0YUhvbGRlcnxudWxsPW51bGw7XHJcbiAgc2Vzc2lvbjpzdHJpbmd8bnVtYmVyfG51bGw9bnVsbDtcclxuICBjaGFubmVsczpudW1iZXJ8bnVsbD1udWxsO1xyXG4gIGZyYW1lczpudW1iZXJ8bnVsbD1udWxsO1xyXG4gIHNhbXBsZXJhdGU6bnVtYmVyfG51bGw9bnVsbDtcclxuICB0aW1lTGVuZ3RoOm51bWJlcnxudWxsPW51bGw7XHJcbiAgZWRpdFNhbXBsZVJhdGU6bnVtYmVyfG51bGw9bnVsbDtcclxuICBlZGl0U3RhcnRGcmFtZTpudW1iZXJ8bnVsbD1udWxsXHJcbiAgZWRpdEVuZEZyYW1lOm51bWJlcnxudWxsPW51bGxcclxuXHJcbiAgY29uc3RydWN0b3IodXVpZDpzdHJpbmcsc2Vzc2lvbklkOnN0cmluZ3xudW1iZXIsYXVkaW9EYXRhSG9sZGVyOkF1ZGlvRGF0YUhvbGRlcnxudWxsKSB7XHJcbiAgICB0aGlzLnNlc3Npb249c2Vzc2lvbklkO1xyXG4gICAgdGhpcy5hdWRpb0RhdGFIb2xkZXI9YXVkaW9EYXRhSG9sZGVyXHJcbiAgICBpZihhdWRpb0RhdGFIb2xkZXIpe1xyXG4gICAgICB0aGlzLmZyYW1lcz1hdWRpb0RhdGFIb2xkZXIuZnJhbWVMZW47XHJcbiAgICAgIHRoaXMudGltZUxlbmd0aD1hdWRpb0RhdGFIb2xkZXIuZHVyYXRpb247XHJcbiAgICB9XHJcbiAgICB0aGlzLnV1aWQ9dXVpZDtcclxuICB9XHJcblxyXG4gIGZpbGVuYW1lU3RyaW5nKCk6c3RyaW5ne1xyXG4gICAgbGV0IGZuczpzdHJpbmc9Jyc7XHJcbiAgICBpZih0aGlzLnNlc3Npb24pe1xyXG4gICAgICBmbnMrPXRoaXMuc2Vzc2lvbjtcclxuICAgICAgZm5zKz0nXyc7XHJcbiAgICB9XHJcbiAgICBmbnMrPXRoaXMudXVpZDtcclxuICAgIHJldHVybiBmbnM7XHJcbiAgfVxyXG5cclxuICBlcXVhbHMob3RoZXJSZWNvcmRpbmdGaWxlOlJlY29yZGluZ0ZpbGV8bnVsbCk6Ym9vbGVhbntcclxuICAgIGlmKG90aGVyUmVjb3JkaW5nRmlsZSE9PW51bGwpIHtcclxuICAgICAgaWYgKG90aGVyUmVjb3JkaW5nRmlsZSA9PT0gdGhpcykge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChvdGhlclJlY29yZGluZ0ZpbGUudXVpZCA9PT0gdGhpcy51dWlkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHRvU3RyaW5nKCk6c3RyaW5ne1xyXG4gICAgcmV0dXJuICdSZWNvcmRpbmcgZmlsZTogVVVJRDogJyt0aGlzLnV1aWQrJywgc2Vzc2lvbjogJyt0aGlzLnNlc3Npb247XHJcbiAgfVxyXG5cclxufVxyXG5cclxuICAgIGV4cG9ydCBjbGFzcyBTcHJSZWNvcmRpbmdGaWxlIGV4dGVuZHMgUmVjb3JkaW5nRmlsZSBpbXBsZW1lbnRzICBSZWNvcmRpbmdGaWxlRGVzY3JpcHRvcntcclxuXHJcbiAgICAgIGl0ZW1Db2RlOnN0cmluZztcclxuXHJcbiAgICAgIHJlY29yZGluZyE6UHJvbXB0SXRlbTtcclxuICAgICAgdmVyc2lvbiE6bnVtYmVyO1xyXG5cclxuICAgICAgY29uc3RydWN0b3Ioc2Vzc2lvbklkOnN0cmluZ3xudW1iZXIsaXRlbWNvZGU6c3RyaW5nLHZlcnNpb246bnVtYmVyLGF1ZGlvRGF0YUhvbGRlcjpBdWRpb0RhdGFIb2xkZXJ8bnVsbCkge1xyXG4gICAgICAgICAgc3VwZXIoVVVJRC5nZW5lcmF0ZSgpLHNlc3Npb25JZCxhdWRpb0RhdGFIb2xkZXIpO1xyXG4gICAgICAgICAgdGhpcy5zZXNzaW9uPXNlc3Npb25JZDtcclxuICAgICAgICAgIHRoaXMuaXRlbUNvZGU9aXRlbWNvZGU7XHJcbiAgICAgICAgICB0aGlzLnZlcnNpb249dmVyc2lvbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmVjb3JkaW5nRmlsZURvbmUoKTpib29sZWFue1xyXG4gICAgICAgIHJldHVybiAodGhpcy5zZXJ2ZXJQZXJzaXN0ZWQ9PT10cnVlKSB8fCAodGhpcy5hdWRpb0RhdGFIb2xkZXIhPW51bGwpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmaWxlbmFtZVN0cmluZygpOnN0cmluZ3tcclxuICAgICAgICBsZXQgZm5zOnN0cmluZz0nJztcclxuICAgICAgICBpZih0aGlzLnNlc3Npb24pe1xyXG4gICAgICAgICAgICBmbnMrPXRoaXMuc2Vzc2lvbjtcclxuICAgICAgICAgICAgZm5zKz0nXyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHRoaXMuaXRlbUNvZGUpe1xyXG4gICAgICAgICAgZm5zKz10aGlzLml0ZW1Db2RlO1xyXG4gICAgICAgICAgZm5zKz0nXyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZucys9dGhpcy51dWlkO1xyXG4gICAgICAgIHJldHVybiBmbnM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRvU3RyaW5nKCk6c3RyaW5ne1xyXG4gICAgICAgIHJldHVybiAnUmVjb3JkaW5nIGZpbGU6IFVVSUQ6ICcrdGhpcy51dWlkKycsIHNlc3Npb246ICcrdGhpcy5zZXNzaW9uKycsIGl0ZW1jb2RlOiAnK3RoaXMuaXRlbUNvZGUrJywgdmVyc2lvbjogJyt0aGlzLnZlcnNpb24rJywgVVVJRDogJyt0aGlzLnV1aWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgZXhwb3J0IGNsYXNzIFJlY29yZGluZ0ZpbGVVdGlsc3tcclxuXHJcbiAgICAgIHN0YXRpYyBlcXVhbHMocmVjb3JkaW5GaWxlOlJlY29yZGluZ0ZpbGV8bnVsbCxvdGhlclJlY29yZGluZ0ZpbGU6UmVjb3JkaW5nRmlsZXxudWxsKTpib29sZWFue1xyXG4gICAgICAgIGlmKHJlY29yZGluRmlsZSAmJiBvdGhlclJlY29yZGluZ0ZpbGUpe1xyXG4gICAgICAgICAgaWYgKG90aGVyUmVjb3JkaW5nRmlsZSA9PT0gcmVjb3JkaW5GaWxlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKG90aGVyUmVjb3JkaW5nRmlsZS51dWlkID09PSByZWNvcmRpbkZpbGUudXVpZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzdGF0aWMgc2V0QXVkaW9EYXRhKHJmOlJlY29yZGluZ0ZpbGUsYXVkaW9EYXRhSG9sZGVyOkF1ZGlvRGF0YUhvbGRlcnxudWxsKXtcclxuICAgICAgICAgIHJmLmF1ZGlvRGF0YUhvbGRlcj1hdWRpb0RhdGFIb2xkZXI7XHJcbiAgICAgICAgICBpZihhdWRpb0RhdGFIb2xkZXIpIHtcclxuICAgICAgICAgICAgaWYocmYuc2FtcGxlcmF0ZT09bnVsbCl7XHJcbiAgICAgICAgICAgICAgcmYuc2FtcGxlcmF0ZT1hdWRpb0RhdGFIb2xkZXIuc2FtcGxlUmF0ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihyZi5mcmFtZXM9PW51bGwpIHtcclxuICAgICAgICAgICAgICByZi5mcmFtZXMgPSBhdWRpb0RhdGFIb2xkZXIuZnJhbWVMZW47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmYudGltZUxlbmd0aD1hdWRpb0RhdGFIb2xkZXIuZHVyYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN0YXRpYyBzYW1wbGVDb3VudChyZjpSZWNvcmRpbmdGaWxlKTpudW1iZXJ7XHJcbiAgICAgICAgaWYocmYuYXVkaW9EYXRhSG9sZGVyKXtcclxuICAgICAgICAgIHJldHVybiByZi5hdWRpb0RhdGFIb2xkZXIuc2FtcGxlQ291bnRzKCk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgc3RhdGljIGV4cGlyZUF1ZGlvRGF0YShyZjpSZWNvcmRpbmdGaWxlKTpudW1iZXJ7XHJcbiAgICAgICAgbGV0IGV4cGlyZWRTYW1wbGVzPTA7XHJcbiAgICAgICAgaWYocmYgJiYgcmYuYXVkaW9EYXRhSG9sZGVyKXtcclxuICAgICAgICAgIGV4cGlyZWRTYW1wbGVzPXJmLmF1ZGlvRGF0YUhvbGRlci5zYW1wbGVDb3VudHMoKTtcclxuICAgICAgICAgIHJmLmF1ZGlvRGF0YUhvbGRlci5yZWxlYXNlQXVkaW9EYXRhKClcclxuICAgICAgICAgIHJmLmF1ZGlvRGF0YUhvbGRlcj1udWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZXhwaXJlZFNhbXBsZXM7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcbiJdfQ==