speechrecorderng 2.21.4 → 2.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/{esm2015/lib/action/action.js → esm2020/lib/action/action.mjs} +0 -0
  2. package/{esm2015/lib/audio/audio_display.js → esm2020/lib/audio/audio_display.mjs} +5 -5
  3. package/esm2020/lib/audio/audio_player.mjs +276 -0
  4. package/esm2020/lib/audio/capture/capture.mjs +547 -0
  5. package/{esm2015/lib/audio/context.js → esm2020/lib/audio/context.mjs} +0 -0
  6. package/esm2020/lib/audio/dsp/level_measure.mjs +351 -0
  7. package/{esm2015/lib/audio/format.js → esm2020/lib/audio/format.mjs} +0 -0
  8. package/{esm2015/lib/audio/impl/wavformat.js → esm2020/lib/audio/impl/wavformat.mjs} +0 -0
  9. package/{esm2015/lib/audio/impl/wavwriter.js → esm2020/lib/audio/impl/wavwriter.mjs} +0 -0
  10. package/{esm2015/lib/audio/io/stream.js → esm2020/lib/audio/io/stream.mjs} +0 -0
  11. package/{esm2015/lib/audio/persistor.js → esm2020/lib/audio/persistor.mjs} +0 -0
  12. package/{esm2015/lib/audio/playback/player.js → esm2020/lib/audio/playback/player.mjs} +0 -0
  13. package/esm2020/lib/audio/ui/audio_canvas_layer_comp.mjs +376 -0
  14. package/{esm2015/lib/audio/ui/audio_display_control.js → esm2020/lib/audio/ui/audio_display_control.mjs} +5 -5
  15. package/{esm2015/lib/audio/ui/audio_display_scroll_pane.js → esm2020/lib/audio/ui/audio_display_scroll_pane.mjs} +5 -5
  16. package/{esm2015/lib/audio/ui/audiosignal.js → esm2020/lib/audio/ui/audiosignal.mjs} +5 -5
  17. package/{esm2015/lib/audio/ui/common.js → esm2020/lib/audio/ui/common.mjs} +0 -0
  18. package/esm2020/lib/audio/ui/container.mjs +431 -0
  19. package/{esm2015/lib/audio/ui/livelevel.js → esm2020/lib/audio/ui/livelevel.mjs} +5 -5
  20. package/{esm2015/lib/audio/ui/scroll_pane_horizontal.js → esm2020/lib/audio/ui/scroll_pane_horizontal.mjs} +4 -4
  21. package/{esm2015/lib/audio/ui/sonagram.js → esm2020/lib/audio/ui/sonagram.mjs} +5 -5
  22. package/{esm2015/lib/dsp/utils.js → esm2020/lib/dsp/utils.mjs} +0 -0
  23. package/{esm2015/lib/io/BinaryWriter.js → esm2020/lib/io/BinaryWriter.mjs} +0 -0
  24. package/{esm2015/lib/io/stream.js → esm2020/lib/io/stream.mjs} +0 -0
  25. package/{esm2015/lib/math/2d/geometry.js → esm2020/lib/math/2d/geometry.mjs} +0 -0
  26. package/{esm2015/lib/math/complex.js → esm2020/lib/math/complex.mjs} +0 -0
  27. package/{esm2015/lib/math/dft.js → esm2020/lib/math/dft.mjs} +0 -0
  28. package/{esm2015/lib/math/utils.js → esm2020/lib/math/utils.mjs} +0 -0
  29. package/esm2020/lib/media/utils.mjs +14 -0
  30. package/esm2020/lib/net/uploader.mjs +246 -0
  31. package/{esm2015/lib/speechrecorder/project/project.js → esm2020/lib/speechrecorder/project/project.mjs} +0 -0
  32. package/{esm2015/lib/speechrecorder/project/project.service.js → esm2020/lib/speechrecorder/project/project.service.mjs} +4 -4
  33. package/esm2020/lib/speechrecorder/recording.mjs +54 -0
  34. package/esm2020/lib/speechrecorder/recordings/recordings.service.mjs +246 -0
  35. package/{esm2015/lib/speechrecorder/script/script.js → esm2020/lib/speechrecorder/script/script.mjs} +2 -2
  36. package/{esm2015/lib/speechrecorder/script/script.service.js → esm2020/lib/speechrecorder/script/script.service.mjs} +4 -4
  37. package/esm2020/lib/speechrecorder/session/audiorecorder.mjs +1144 -0
  38. package/esm2020/lib/speechrecorder/session/controlpanel.mjs +449 -0
  39. package/{esm2015/lib/speechrecorder/session/item.js → esm2020/lib/speechrecorder/session/item.mjs} +1 -1
  40. package/{esm2015/lib/speechrecorder/session/progress.js → esm2020/lib/speechrecorder/session/progress.mjs} +5 -5
  41. package/{esm2015/lib/speechrecorder/session/prompting.js → esm2020/lib/speechrecorder/session/prompting.mjs} +21 -21
  42. package/esm2020/lib/speechrecorder/session/recorder_combi_pane.mjs +75 -0
  43. package/esm2020/lib/speechrecorder/session/recording_list.mjs +109 -0
  44. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +126 -0
  45. package/{esm2015/lib/speechrecorder/session/recordingfile/recording-file-navi.component.js → esm2020/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs} +5 -5
  46. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +168 -0
  47. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +415 -0
  48. package/{esm2015/lib/speechrecorder/session/recordingfile/recording-file.js → esm2020/lib/speechrecorder/session/recordingfile/recording-file.mjs} +1 -1
  49. package/esm2020/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +251 -0
  50. package/{esm2015/lib/speechrecorder/session/session.js → esm2020/lib/speechrecorder/session/session.mjs} +0 -0
  51. package/{esm2015/lib/speechrecorder/session/session.service.js → esm2020/lib/speechrecorder/session/session.service.mjs} +4 -4
  52. package/{esm2015/lib/speechrecorder/session/session_finished_dialog.js → esm2020/lib/speechrecorder/session/session_finished_dialog.mjs} +4 -4
  53. package/esm2020/lib/speechrecorder/session/sessionmanager.mjs +1274 -0
  54. package/{esm2015/lib/speechrecorder/session/warning_bar.js → esm2020/lib/speechrecorder/session/warning_bar.mjs} +5 -5
  55. package/{esm2015/lib/speechrecorder/spruploader.js → esm2020/lib/speechrecorder/spruploader.mjs} +4 -4
  56. package/{esm2015/lib/speechrecorder/startstopsignal/startstopsignal.js → esm2020/lib/speechrecorder/startstopsignal/startstopsignal.mjs} +0 -0
  57. package/{esm2015/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.js → esm2020/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs} +5 -5
  58. package/esm2020/lib/speechrecorderng.component.mjs +427 -0
  59. package/{esm2015/lib/speechrecorderng.module.js → esm2020/lib/speechrecorderng.module.mjs} +12 -11
  60. package/{esm2015/lib/spr.config.js → esm2020/lib/spr.config.mjs} +4 -4
  61. package/{esm2015/lib/spr.module.version.js → esm2020/lib/spr.module.version.mjs} +2 -2
  62. package/{esm2015/lib/ui/canvas_layer_comp.js → esm2020/lib/ui/canvas_layer_comp.mjs} +4 -4
  63. package/{esm2015/lib/ui/message_dialog.js → esm2020/lib/ui/message_dialog.mjs} +4 -4
  64. package/{esm2015/lib/ui/recordingitem_display.js → esm2020/lib/ui/recordingitem_display.mjs} +9 -9
  65. package/{esm2015/lib/utils/css_utils.js → esm2020/lib/utils/css_utils.mjs} +0 -0
  66. package/{esm2015/lib/utils/scrollIntoViewToBottom.js → esm2020/lib/utils/scrollIntoViewToBottom.mjs} +4 -4
  67. package/{esm2015/lib/utils/ua-parser.js → esm2020/lib/utils/ua-parser.mjs} +0 -0
  68. package/{esm2015/lib/utils/utils.js → esm2020/lib/utils/utils.mjs} +0 -0
  69. package/esm2020/public-api.mjs +31 -0
  70. package/{esm2015/speechrecorderng.js → esm2020/speechrecorderng.mjs} +0 -0
  71. package/fesm2015/speechrecorderng.mjs +11991 -0
  72. package/fesm2015/speechrecorderng.mjs.map +1 -0
  73. package/{fesm2015/speechrecorderng.js → fesm2020/speechrecorderng.mjs} +1863 -285
  74. package/fesm2020/speechrecorderng.mjs.map +1 -0
  75. package/lib/media/utils.d.ts +3 -0
  76. package/lib/net/uploader.d.ts +4 -2
  77. package/lib/speechrecorder/recording.d.ts +14 -3
  78. package/lib/speechrecorder/recordings/recordings.service.d.ts +12 -5
  79. package/lib/speechrecorder/session/audiorecorder.d.ts +150 -0
  80. package/lib/speechrecorder/session/controlpanel.d.ts +2 -1
  81. package/lib/speechrecorder/session/item.d.ts +2 -2
  82. package/lib/speechrecorder/session/recorder_combi_pane.d.ts +26 -0
  83. package/lib/speechrecorder/session/recording_list.d.ts +19 -0
  84. package/lib/speechrecorder/session/recordingfile/recording-file-meta.component.d.ts +6 -2
  85. package/lib/speechrecorder/session/recordingfile/recording-file-view.component.d.ts +5 -4
  86. package/lib/speechrecorder/session/recordingfile/recording-file.d.ts +2 -2
  87. package/lib/speechrecorder/session/recordingfile/recordingfile-service.d.ts +5 -3
  88. package/lib/speechrecorder/session/sessionmanager.d.ts +5 -5
  89. package/lib/speechrecorderng.module.d.ts +31 -28
  90. package/lib/spr.module.version.d.ts +1 -1
  91. package/package.json +33 -20
  92. package/public-api.d.ts +2 -1
  93. package/bundles/speechrecorderng.umd.js +0 -10146
  94. package/bundles/speechrecorderng.umd.js.map +0 -1
  95. package/esm2015/lib/audio/audio_player.js +0 -274
  96. package/esm2015/lib/audio/capture/capture.js +0 -544
  97. package/esm2015/lib/audio/dsp/level_measure.js +0 -356
  98. package/esm2015/lib/audio/ui/audio_canvas_layer_comp.js +0 -364
  99. package/esm2015/lib/audio/ui/container.js +0 -412
  100. package/esm2015/lib/net/uploader.js +0 -220
  101. package/esm2015/lib/speechrecorder/recording.js +0 -38
  102. package/esm2015/lib/speechrecorder/recordings/recordings.service.js +0 -173
  103. package/esm2015/lib/speechrecorder/session/controlpanel.js +0 -446
  104. package/esm2015/lib/speechrecorder/session/recordingfile/recording-file-meta.component.js +0 -83
  105. package/esm2015/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.js +0 -163
  106. package/esm2015/lib/speechrecorder/session/recordingfile/recording-file-view.component.js +0 -386
  107. package/esm2015/lib/speechrecorder/session/recordingfile/recordingfile-service.js +0 -191
  108. package/esm2015/lib/speechrecorder/session/sessionmanager.js +0 -1271
  109. package/esm2015/lib/speechrecorderng.component.js +0 -423
  110. package/esm2015/public-api.js +0 -30
  111. package/fesm2015/speechrecorderng.js.map +0 -1
@@ -14,12 +14,12 @@ export class WarningBar {
14
14
  }
15
15
  }
16
16
  }
17
- WarningBar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: WarningBar, deps: [], target: i0.ɵɵFactoryTarget.Component });
18
- WarningBar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: WarningBar, selector: "app-warningbar", inputs: { warningText: "warningText", show: "show" }, providers: [SessionService], ngImport: i0, template: `
17
+ WarningBar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: WarningBar, deps: [], target: i0.ɵɵFactoryTarget.Component });
18
+ WarningBar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: WarningBar, selector: "app-warningbar", inputs: { warningText: "warningText", show: "show" }, providers: [SessionService], ngImport: i0, template: `
19
19
  <div [class]="displayClass">{{warningText}}</div>
20
20
 
21
- `, isInline: true, styles: [":host {\n\n flex: 0 0 content;\n background: orange;\n\n }", "\n .off {\n display: none;\n }\n ", "\n .on {\n padding: 2px;\n display: inline-block;\n width: 100%;\n font-weight: bold;\n font-size: larger;\n text-align: center;\n }\n "] });
22
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: WarningBar, decorators: [{
21
+ `, isInline: true, styles: [":host{flex:0 0 content;background:orange}\n", ".off{display:none}\n", ".on{padding:2px;display:inline-block;width:100%;font-weight:700;font-size:larger;text-align:center}\n"] });
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: WarningBar, decorators: [{
23
23
  type: Component,
24
24
  args: [{
25
25
  selector: 'app-warningbar',
@@ -53,4 +53,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImpo
53
53
  }], show: [{
54
54
  type: Input
55
55
  }] } });
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FybmluZ19iYXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvc3BlZWNocmVjb3JkZXIvc2Vzc2lvbi93YXJuaW5nX2Jhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7O0FBOEJqRCxNQUFNLE9BQU8sVUFBVTtJQTVCdkI7UUFxQ0UsaUJBQVksR0FBUSxLQUFLLENBQUM7S0FDM0I7SUFSQyxJQUFhLElBQUksQ0FBQyxJQUFZO1FBQzVCLElBQUcsSUFBSSxFQUFDO1lBQ04sSUFBSSxDQUFDLFlBQVksR0FBQyxJQUFJLENBQUE7U0FDdkI7YUFBSTtZQUNILElBQUksQ0FBQyxZQUFZLEdBQUMsS0FBSyxDQUFBO1NBQ3hCO0lBQ0gsQ0FBQzs7d0dBUlUsVUFBVTs0RkFBVixVQUFVLCtGQXpCVixDQUFDLGNBQWMsQ0FBQywwQkFDakI7OztHQUdUOzRGQXFCVSxVQUFVO2tCQTVCdEIsU0FBUzttQkFBQztvQkFFVCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixTQUFTLEVBQUUsQ0FBQyxjQUFjLENBQUM7b0JBQzNCLFFBQVEsRUFBRTs7O0dBR1Q7b0JBQ0QsTUFBTSxFQUFFLENBQUM7Ozs7O0lBS1AsRUFBQzs7OztHQUlGLEVBQUM7Ozs7Ozs7OztHQVNELENBQUU7aUJBQ0o7OEJBRVUsV0FBVztzQkFBbkIsS0FBSztnQkFDTyxJQUFJO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIElucHV0fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1Nlc3Npb25TZXJ2aWNlfSBmcm9tIFwiLi9zZXNzaW9uLnNlcnZpY2VcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cclxuICBzZWxlY3RvcjogJ2FwcC13YXJuaW5nYmFyJyxcclxuICBwcm92aWRlcnM6IFtTZXNzaW9uU2VydmljZV0sXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxkaXYgW2NsYXNzXT1cImRpc3BsYXlDbGFzc1wiPnt7d2FybmluZ1RleHR9fTwvZGl2PlxyXG5cclxuICBgLFxyXG4gIHN0eWxlczogW2A6aG9zdCB7XHJcblxyXG4gICAgZmxleDogMCAwIGNvbnRlbnQ7XHJcbiAgICBiYWNrZ3JvdW5kOiBvcmFuZ2U7XHJcblxyXG4gIH1gLGBcclxuICAgIC5vZmYge1xyXG4gICAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgfVxyXG4gIGAsYFxyXG4gICAgLm9uIHtcclxuICAgICAgcGFkZGluZzogMnB4O1xyXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgICAgZm9udC1zaXplOiBsYXJnZXI7XHJcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIH1cclxuICBgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFdhcm5pbmdCYXIge1xyXG4gIEBJbnB1dCgpIHdhcm5pbmdUZXh0ITpzdHJpbmc7XHJcbiAgQElucHV0KCkgc2V0IHNob3coc2hvdzpib29sZWFuKXtcclxuICAgIGlmKHNob3cpe1xyXG4gICAgICB0aGlzLmRpc3BsYXlDbGFzcz0nb24nXHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5kaXNwbGF5Q2xhc3M9J29mZidcclxuICAgIH1cclxuICB9XHJcbiAgZGlzcGxheUNsYXNzOnN0cmluZz0nb2ZmJztcclxufVxyXG4iXX0=
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FybmluZ19iYXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvc3BlZWNocmVjb3JkZXIvc2Vzc2lvbi93YXJuaW5nX2Jhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7O0FBOEJqRCxNQUFNLE9BQU8sVUFBVTtJQTVCdkI7UUFxQ0UsaUJBQVksR0FBUSxLQUFLLENBQUM7S0FDM0I7SUFSQyxJQUFhLElBQUksQ0FBQyxJQUFZO1FBQzVCLElBQUcsSUFBSSxFQUFDO1lBQ04sSUFBSSxDQUFDLFlBQVksR0FBQyxJQUFJLENBQUE7U0FDdkI7YUFBSTtZQUNILElBQUksQ0FBQyxZQUFZLEdBQUMsS0FBSyxDQUFBO1NBQ3hCO0lBQ0gsQ0FBQzs7dUdBUlUsVUFBVTsyRkFBVixVQUFVLCtGQXpCVixDQUFDLGNBQWMsQ0FBQywwQkFDakI7OztHQUdUOzJGQXFCVSxVQUFVO2tCQTVCdEIsU0FBUzttQkFBQztvQkFFVCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixTQUFTLEVBQUUsQ0FBQyxjQUFjLENBQUM7b0JBQzNCLFFBQVEsRUFBRTs7O0dBR1Q7b0JBQ0QsTUFBTSxFQUFFLENBQUM7Ozs7O0lBS1AsRUFBQzs7OztHQUlGLEVBQUM7Ozs7Ozs7OztHQVNELENBQUU7aUJBQ0o7OEJBRVUsV0FBVztzQkFBbkIsS0FBSztnQkFDTyxJQUFJO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIElucHV0fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1Nlc3Npb25TZXJ2aWNlfSBmcm9tIFwiLi9zZXNzaW9uLnNlcnZpY2VcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cclxuICBzZWxlY3RvcjogJ2FwcC13YXJuaW5nYmFyJyxcclxuICBwcm92aWRlcnM6IFtTZXNzaW9uU2VydmljZV0sXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxkaXYgW2NsYXNzXT1cImRpc3BsYXlDbGFzc1wiPnt7d2FybmluZ1RleHR9fTwvZGl2PlxyXG5cclxuICBgLFxyXG4gIHN0eWxlczogW2A6aG9zdCB7XHJcblxyXG4gICAgZmxleDogMCAwIGNvbnRlbnQ7XHJcbiAgICBiYWNrZ3JvdW5kOiBvcmFuZ2U7XHJcblxyXG4gIH1gLGBcclxuICAgIC5vZmYge1xyXG4gICAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgfVxyXG4gIGAsYFxyXG4gICAgLm9uIHtcclxuICAgICAgcGFkZGluZzogMnB4O1xyXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgICAgZm9udC1zaXplOiBsYXJnZXI7XHJcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIH1cclxuICBgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFdhcm5pbmdCYXIge1xyXG4gIEBJbnB1dCgpIHdhcm5pbmdUZXh0ITpzdHJpbmc7XHJcbiAgQElucHV0KCkgc2V0IHNob3coc2hvdzpib29sZWFuKXtcclxuICAgIGlmKHNob3cpe1xyXG4gICAgICB0aGlzLmRpc3BsYXlDbGFzcz0nb24nXHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5kaXNwbGF5Q2xhc3M9J29mZidcclxuICAgIH1cclxuICB9XHJcbiAgZGlzcGxheUNsYXNzOnN0cmluZz0nb2ZmJztcclxufVxyXG4iXX0=
@@ -11,12 +11,12 @@ export class SpeechRecorderUploader extends Uploader {
11
11
  this.config = config;
12
12
  }
13
13
  }
14
- SpeechRecorderUploader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: SpeechRecorderUploader, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
15
- SpeechRecorderUploader.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: SpeechRecorderUploader });
16
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: SpeechRecorderUploader, decorators: [{
14
+ SpeechRecorderUploader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: SpeechRecorderUploader, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
15
+ SpeechRecorderUploader.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: SpeechRecorderUploader });
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: SpeechRecorderUploader, decorators: [{
17
17
  type: Injectable
18
18
  }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.SpeechRecorderConfig, decorators: [{
19
19
  type: Inject,
20
20
  args: [SPEECHRECORDER_CONFIG]
21
21
  }] }]; } });
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BydXBsb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvc3BlZWNocmVjb3JkZXIvc3BydXBsb2FkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFBQyxxQkFBcUIsRUFBdUIsTUFBTSxlQUFlLENBQUM7Ozs7QUFHekUsTUFBTSxPQUFPLHNCQUF1QixTQUFRLFFBQVE7SUFFbkQsWUFBb0IsVUFBcUIsRUFBd0MsTUFBNEI7UUFDM0csS0FBSyxDQUFDLFVBQVUsRUFBQyxDQUFDLE1BQU0sQ0FBQyxDQUFBLENBQUMsQ0FBQSxNQUFNLENBQUMsZUFBZSxDQUFBLENBQUMsQ0FBQSxLQUFLLENBQUMsQ0FBQztRQUR0QyxlQUFVLEdBQVYsVUFBVSxDQUFXO1FBQXdDLFdBQU0sR0FBTixNQUFNLENBQXNCO0lBRTdHLENBQUM7O29IQUpXLHNCQUFzQiw0Q0FFZ0IscUJBQXFCO3dIQUYzRCxzQkFBc0I7NEZBQXRCLHNCQUFzQjtrQkFEbkMsVUFBVTs7MEJBR2tDLE1BQU07MkJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQge1VwbG9hZGVyfSBmcm9tIFwiLi4vbmV0L3VwbG9hZGVyXCI7XG5pbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZX0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5pbXBvcnQge1NQRUVDSFJFQ09SREVSX0NPTkZJRywgU3BlZWNoUmVjb3JkZXJDb25maWd9IGZyb20gXCIuLi9zcHIuY29uZmlnXCI7XG5cbkBJbmplY3RhYmxlKClcbiBleHBvcnQgY2xhc3MgU3BlZWNoUmVjb3JkZXJVcGxvYWRlciBleHRlbmRzIFVwbG9hZGVye1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cENsaWVudDpIdHRwQ2xpZW50LEBJbmplY3QoU1BFRUNIUkVDT1JERVJfQ09ORklHKSBwcml2YXRlIGNvbmZpZz86U3BlZWNoUmVjb3JkZXJDb25maWcpe1xuICAgIHN1cGVyKGh0dHBDbGllbnQsKGNvbmZpZyk/Y29uZmlnLndpdGhDcmVkZW50aWFsczpmYWxzZSk7XG4gIH1cbn1cbiJdfQ==
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BydXBsb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvc3BlZWNocmVjb3JkZXIvc3BydXBsb2FkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFBQyxxQkFBcUIsRUFBdUIsTUFBTSxlQUFlLENBQUM7Ozs7QUFHekUsTUFBTSxPQUFPLHNCQUF1QixTQUFRLFFBQVE7SUFFbkQsWUFBb0IsVUFBcUIsRUFBd0MsTUFBNEI7UUFDM0csS0FBSyxDQUFDLFVBQVUsRUFBQyxDQUFDLE1BQU0sQ0FBQyxDQUFBLENBQUMsQ0FBQSxNQUFNLENBQUMsZUFBZSxDQUFBLENBQUMsQ0FBQSxLQUFLLENBQUMsQ0FBQztRQUR0QyxlQUFVLEdBQVYsVUFBVSxDQUFXO1FBQXdDLFdBQU0sR0FBTixNQUFNLENBQXNCO0lBRTdHLENBQUM7O21IQUpXLHNCQUFzQiw0Q0FFZ0IscUJBQXFCO3VIQUYzRCxzQkFBc0I7MkZBQXRCLHNCQUFzQjtrQkFEbkMsVUFBVTs7MEJBR2tDLE1BQU07MkJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQge1VwbG9hZGVyfSBmcm9tIFwiLi4vbmV0L3VwbG9hZGVyXCI7XG5pbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZX0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5pbXBvcnQge1NQRUVDSFJFQ09SREVSX0NPTkZJRywgU3BlZWNoUmVjb3JkZXJDb25maWd9IGZyb20gXCIuLi9zcHIuY29uZmlnXCI7XG5cbkBJbmplY3RhYmxlKClcbiBleHBvcnQgY2xhc3MgU3BlZWNoUmVjb3JkZXJVcGxvYWRlciBleHRlbmRzIFVwbG9hZGVye1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cENsaWVudDpIdHRwQ2xpZW50LEBJbmplY3QoU1BFRUNIUkVDT1JERVJfQ09ORklHKSBwcml2YXRlIGNvbmZpZz86U3BlZWNoUmVjb3JkZXJDb25maWcpe1xuICAgIHN1cGVyKGh0dHBDbGllbnQsKGNvbmZpZyk/Y29uZmlnLndpdGhDcmVkZW50aWFsczpmYWxzZSk7XG4gIH1cbn1cbiJdfQ==
@@ -32,16 +32,16 @@ export class SimpleTrafficLight {
32
32
  }
33
33
  }
34
34
  }
35
- SimpleTrafficLight.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: SimpleTrafficLight, deps: [], target: i0.ɵɵFactoryTarget.Component });
36
- SimpleTrafficLight.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: SimpleTrafficLight, selector: "app-simpletrafficlight", inputs: { status: "status" }, ngImport: i0, template: `
35
+ SimpleTrafficLight.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: SimpleTrafficLight, deps: [], target: i0.ɵɵFactoryTarget.Component });
36
+ SimpleTrafficLight.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: SimpleTrafficLight, selector: "app-simpletrafficlight", inputs: { status: "status" }, ngImport: i0, template: `
37
37
 
38
38
  <div>
39
39
  <div class="circle {{lighttop}}"></div>
40
40
  <div class="circle {{lightmid}}"></div>
41
41
  <div class="circle {{lightbottom}}"></div>
42
42
  </div>
43
- `, isInline: true, styles: [".circle {\n width: 50px;\n height: 50px;\n border-radius: 50%;\n margin: 5px;\n background: grey;\n }", ".red {\n background: red;\n }\n ", "\n .yellow {\n background: yellow;\n }\n ", "\n .green {\n background: green;\n }\n ", "\n .black {\n background: black;\n }", ":host {\n display: flex;\n flex-direction: column;\n background: black;\n \n padding: 2px;\n height: 170px;\n max-height: 170px;\n flex: 0 0 content;\n }\n "] });
44
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: SimpleTrafficLight, decorators: [{
43
+ `, isInline: true, styles: [".circle{width:50px;height:50px;border-radius:50%;margin:5px;background:grey}\n", ".red{background:red}\n", ".yellow{background:yellow}\n", ".green{background:green}\n", ".black{background:black}\n", ":host{display:flex;flex-direction:column;background:black;padding:2px;height:170px;max-height:170px;flex:0 0 content}\n"] });
44
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: SimpleTrafficLight, decorators: [{
45
45
  type: Component,
46
46
  args: [{
47
47
  selector: 'app-simpletrafficlight',
@@ -89,4 +89,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImpo
89
89
  }], ctorParameters: function () { return []; }, propDecorators: { status: [{
90
90
  type: Input
91
91
  }] } });
92
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxldHJhZmZpY2xpZ2h0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3NwZWVjaHJlY29yZGVyL3N0YXJ0c3RvcHNpZ25hbC91aS9zaW1wbGV0cmFmZmljbGlnaHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUE7O0FBaUQ3QyxNQUFNLE9BQU8sa0JBQWtCO0lBTTdCO1FBQ0UsSUFBSSxDQUFDLE1BQU0sY0FBVSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUNJLE1BQU0sQ0FBQyxNQUFhO1FBQ3RCLElBQUksZ0JBQWMsTUFBTSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO1NBQzNCO2FBQU0sSUFBSSxpQkFBZSxNQUFNLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7WUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7U0FDM0I7YUFBTSxJQUFJLHdCQUFzQixNQUFNLEVBQUU7WUFDdkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7WUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7U0FDM0I7YUFBTSxJQUFJLHFCQUFtQixNQUFNLEVBQUU7WUFDcEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7WUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7WUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUM7U0FDNUI7YUFBTSxJQUFJLHlCQUF1QixNQUFNLEVBQUU7WUFDeEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7WUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7WUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7U0FDM0I7SUFDSCxDQUFDOztnSEFqQ1Usa0JBQWtCO29HQUFsQixrQkFBa0IsNEZBMUNuQjs7Ozs7OztHQU9UOzRGQW1DVSxrQkFBa0I7a0JBOUM5QixTQUFTO21CQUFDO29CQUVULFFBQVEsRUFBRSx3QkFBd0I7b0JBRWxDLFFBQVEsRUFBRTs7Ozs7OztHQU9UO29CQUVELE1BQU0sRUFBRSxDQUFDOzs7Ozs7SUFNUCxFQUFFOzs7R0FHSCxFQUFFOzs7O0dBSUYsRUFBRTs7OztHQUlGLEVBQUU7OztNQUdDO3dCQUNBOzs7Ozs7Ozs7O0tBVUQsQ0FBQztpQkFDTDswRUFZSyxNQUFNO3NCQURULEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCxJbnB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHtTdGFydFN0b3BTaWduYWwsIFN0YXRlfSBmcm9tICcuLi9zdGFydHN0b3BzaWduYWwnXHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHJcbiAgc2VsZWN0b3I6ICdhcHAtc2ltcGxldHJhZmZpY2xpZ2h0JyxcclxuXHJcbiAgdGVtcGxhdGU6IGBcclxuXHJcbiAgICA8ZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2lyY2xlIHt7bGlnaHR0b3B9fVwiPjwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2lyY2xlIHt7bGlnaHRtaWR9fVwiPjwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2lyY2xlIHt7bGlnaHRib3R0b219fVwiPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgYFxyXG4gICxcclxuICBzdHlsZXM6IFtgLmNpcmNsZSB7XHJcbiAgICB3aWR0aDogNTBweDtcclxuICAgIGhlaWdodDogNTBweDtcclxuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcclxuICAgIG1hcmdpbjogNXB4O1xyXG4gICAgYmFja2dyb3VuZDogZ3JleTtcclxuICB9YCwgYC5yZWQge1xyXG4gICAgYmFja2dyb3VuZDogcmVkO1xyXG4gIH1cclxuICBgLCBgXHJcbiAgICAueWVsbG93IHtcclxuICAgICAgYmFja2dyb3VuZDogeWVsbG93O1xyXG4gICAgfVxyXG4gIGAsIGBcclxuICAgIC5ncmVlbiB7XHJcbiAgICAgIGJhY2tncm91bmQ6IGdyZWVuO1xyXG4gICAgfVxyXG4gIGAsIGBcclxuICAgIC5ibGFjayB7XHJcbiAgICAgIGJhY2tncm91bmQ6IGJsYWNrO1xyXG4gICAgfWAsXHJcbiAgICAgIGA6aG9zdCB7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICAgIGJhY2tncm91bmQ6IGJsYWNrO1xyXG4gICAgICAgICAgXHJcbiAgICAgIHBhZGRpbmc6IDJweDtcclxuICAgICAgaGVpZ2h0OiAxNzBweDtcclxuICAgICAgbWF4LWhlaWdodDogMTcwcHg7XHJcbiAgICAgIGZsZXg6IDAgMCBjb250ZW50O1xyXG4gICAgfVxyXG4gICAgYF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFNpbXBsZVRyYWZmaWNMaWdodCBpbXBsZW1lbnRzIFN0YXJ0U3RvcFNpZ25hbCB7XHJcblxyXG4gIGxpZ2h0dG9wITogc3RyaW5nO1xyXG4gIGxpZ2h0bWlkITogc3RyaW5nO1xyXG4gIGxpZ2h0Ym90dG9tITogc3RyaW5nO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuc3RhdHVzPVN0YXRlLk9GRjtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHN0YXR1cyhzdGF0dXM6IFN0YXRlKSB7XHJcbiAgICBpZiAoU3RhdGUuT0ZGID09PSBzdGF0dXMpIHtcclxuICAgICAgdGhpcy5saWdodHRvcCA9ICdncmV5JztcclxuICAgICAgdGhpcy5saWdodG1pZCA9ICdncmV5JztcclxuICAgICAgdGhpcy5saWdodGJvdHRvbSA9ICdncmV5JztcclxuICAgIH0gZWxzZSBpZiAoU3RhdGUuSURMRSA9PT0gc3RhdHVzKSB7XHJcbiAgICAgIHRoaXMubGlnaHR0b3AgPSAncmVkJztcclxuICAgICAgdGhpcy5saWdodG1pZCA9ICdncmV5JztcclxuICAgICAgdGhpcy5saWdodGJvdHRvbSA9ICdncmV5JztcclxuICAgIH0gZWxzZSBpZiAoU3RhdGUuUFJFUkVDT1JESU5HID09IHN0YXR1cykge1xyXG4gICAgICB0aGlzLmxpZ2h0dG9wID0gJ3JlZCc7XHJcbiAgICAgIHRoaXMubGlnaHRtaWQgPSAneWVsbG93JztcclxuICAgICAgdGhpcy5saWdodGJvdHRvbSA9ICdncmV5JztcclxuICAgIH0gZWxzZSBpZiAoU3RhdGUuUkVDT1JESU5HID09IHN0YXR1cykge1xyXG4gICAgICB0aGlzLmxpZ2h0dG9wID0gJ2dyZXknO1xyXG4gICAgICB0aGlzLmxpZ2h0bWlkID0gJ2dyZXknO1xyXG4gICAgICB0aGlzLmxpZ2h0Ym90dG9tID0gJ2dyZWVuJztcclxuICAgIH0gZWxzZSBpZiAoU3RhdGUuUE9TVFJFQ09SRElORyA9PSBzdGF0dXMpIHtcclxuICAgICAgdGhpcy5saWdodHRvcCA9ICdncmV5JztcclxuICAgICAgdGhpcy5saWdodG1pZCA9ICd5ZWxsb3cnO1xyXG4gICAgICB0aGlzLmxpZ2h0Ym90dG9tID0gJ2dyZXknO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuXHJcbiJdfQ==
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxldHJhZmZpY2xpZ2h0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3NwZWVjaHJlY29yZGVyL3N0YXJ0c3RvcHNpZ25hbC91aS9zaW1wbGV0cmFmZmljbGlnaHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUE7O0FBaUQ3QyxNQUFNLE9BQU8sa0JBQWtCO0lBTTdCO1FBQ0UsSUFBSSxDQUFDLE1BQU0sY0FBVSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUNJLE1BQU0sQ0FBQyxNQUFhO1FBQ3RCLElBQUksZ0JBQWMsTUFBTSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO1NBQzNCO2FBQU0sSUFBSSxpQkFBZSxNQUFNLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7WUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7U0FDM0I7YUFBTSxJQUFJLHdCQUFzQixNQUFNLEVBQUU7WUFDdkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7WUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7U0FDM0I7YUFBTSxJQUFJLHFCQUFtQixNQUFNLEVBQUU7WUFDcEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7WUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7WUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUM7U0FDNUI7YUFBTSxJQUFJLHlCQUF1QixNQUFNLEVBQUU7WUFDeEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7WUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7WUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7U0FDM0I7SUFDSCxDQUFDOzsrR0FqQ1Usa0JBQWtCO21HQUFsQixrQkFBa0IsNEZBMUNuQjs7Ozs7OztHQU9UOzJGQW1DVSxrQkFBa0I7a0JBOUM5QixTQUFTO21CQUFDO29CQUVULFFBQVEsRUFBRSx3QkFBd0I7b0JBRWxDLFFBQVEsRUFBRTs7Ozs7OztHQU9UO29CQUVELE1BQU0sRUFBRSxDQUFDOzs7Ozs7SUFNUCxFQUFFOzs7R0FHSCxFQUFFOzs7O0dBSUYsRUFBRTs7OztHQUlGLEVBQUU7OztNQUdDO3dCQUNBOzs7Ozs7Ozs7O0tBVUQsQ0FBQztpQkFDTDswRUFZSyxNQUFNO3NCQURULEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCxJbnB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHtTdGFydFN0b3BTaWduYWwsIFN0YXRlfSBmcm9tICcuLi9zdGFydHN0b3BzaWduYWwnXHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHJcbiAgc2VsZWN0b3I6ICdhcHAtc2ltcGxldHJhZmZpY2xpZ2h0JyxcclxuXHJcbiAgdGVtcGxhdGU6IGBcclxuXHJcbiAgICA8ZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2lyY2xlIHt7bGlnaHR0b3B9fVwiPjwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2lyY2xlIHt7bGlnaHRtaWR9fVwiPjwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2lyY2xlIHt7bGlnaHRib3R0b219fVwiPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgYFxyXG4gICxcclxuICBzdHlsZXM6IFtgLmNpcmNsZSB7XHJcbiAgICB3aWR0aDogNTBweDtcclxuICAgIGhlaWdodDogNTBweDtcclxuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcclxuICAgIG1hcmdpbjogNXB4O1xyXG4gICAgYmFja2dyb3VuZDogZ3JleTtcclxuICB9YCwgYC5yZWQge1xyXG4gICAgYmFja2dyb3VuZDogcmVkO1xyXG4gIH1cclxuICBgLCBgXHJcbiAgICAueWVsbG93IHtcclxuICAgICAgYmFja2dyb3VuZDogeWVsbG93O1xyXG4gICAgfVxyXG4gIGAsIGBcclxuICAgIC5ncmVlbiB7XHJcbiAgICAgIGJhY2tncm91bmQ6IGdyZWVuO1xyXG4gICAgfVxyXG4gIGAsIGBcclxuICAgIC5ibGFjayB7XHJcbiAgICAgIGJhY2tncm91bmQ6IGJsYWNrO1xyXG4gICAgfWAsXHJcbiAgICAgIGA6aG9zdCB7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICAgIGJhY2tncm91bmQ6IGJsYWNrO1xyXG4gICAgICAgICAgXHJcbiAgICAgIHBhZGRpbmc6IDJweDtcclxuICAgICAgaGVpZ2h0OiAxNzBweDtcclxuICAgICAgbWF4LWhlaWdodDogMTcwcHg7XHJcbiAgICAgIGZsZXg6IDAgMCBjb250ZW50O1xyXG4gICAgfVxyXG4gICAgYF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFNpbXBsZVRyYWZmaWNMaWdodCBpbXBsZW1lbnRzIFN0YXJ0U3RvcFNpZ25hbCB7XHJcblxyXG4gIGxpZ2h0dG9wITogc3RyaW5nO1xyXG4gIGxpZ2h0bWlkITogc3RyaW5nO1xyXG4gIGxpZ2h0Ym90dG9tITogc3RyaW5nO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuc3RhdHVzPVN0YXRlLk9GRjtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHN0YXR1cyhzdGF0dXM6IFN0YXRlKSB7XHJcbiAgICBpZiAoU3RhdGUuT0ZGID09PSBzdGF0dXMpIHtcclxuICAgICAgdGhpcy5saWdodHRvcCA9ICdncmV5JztcclxuICAgICAgdGhpcy5saWdodG1pZCA9ICdncmV5JztcclxuICAgICAgdGhpcy5saWdodGJvdHRvbSA9ICdncmV5JztcclxuICAgIH0gZWxzZSBpZiAoU3RhdGUuSURMRSA9PT0gc3RhdHVzKSB7XHJcbiAgICAgIHRoaXMubGlnaHR0b3AgPSAncmVkJztcclxuICAgICAgdGhpcy5saWdodG1pZCA9ICdncmV5JztcclxuICAgICAgdGhpcy5saWdodGJvdHRvbSA9ICdncmV5JztcclxuICAgIH0gZWxzZSBpZiAoU3RhdGUuUFJFUkVDT1JESU5HID09IHN0YXR1cykge1xyXG4gICAgICB0aGlzLmxpZ2h0dG9wID0gJ3JlZCc7XHJcbiAgICAgIHRoaXMubGlnaHRtaWQgPSAneWVsbG93JztcclxuICAgICAgdGhpcy5saWdodGJvdHRvbSA9ICdncmV5JztcclxuICAgIH0gZWxzZSBpZiAoU3RhdGUuUkVDT1JESU5HID09IHN0YXR1cykge1xyXG4gICAgICB0aGlzLmxpZ2h0dG9wID0gJ2dyZXknO1xyXG4gICAgICB0aGlzLmxpZ2h0bWlkID0gJ2dyZXknO1xyXG4gICAgICB0aGlzLmxpZ2h0Ym90dG9tID0gJ2dyZWVuJztcclxuICAgIH0gZWxzZSBpZiAoU3RhdGUuUE9TVFJFQ09SRElORyA9PSBzdGF0dXMpIHtcclxuICAgICAgdGhpcy5saWdodHRvcCA9ICdncmV5JztcclxuICAgICAgdGhpcy5saWdodG1pZCA9ICd5ZWxsb3cnO1xyXG4gICAgICB0aGlzLmxpZ2h0Ym90dG9tID0gJ2dyZXknO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuXHJcbiJdfQ==
@@ -0,0 +1,427 @@
1
+ import { Component, ViewChild } from '@angular/core';
2
+ import { EventType as PlaybackEventType, AudioPlayer } from './audio/playback/player';
3
+ import { SessionManager } from './speechrecorder/session/sessionmanager';
4
+ import { UploaderStatus } from './net/uploader';
5
+ import { SessionService } from "./speechrecorder/session/session.service";
6
+ import { ProjectUtil } from "./speechrecorder/project/project";
7
+ import { AudioContextProvider } from "./audio/context";
8
+ import { Arrays } from "./utils/utils";
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@angular/router";
11
+ import * as i2 from "./speechrecorder/session/session.service";
12
+ import * as i3 from "./speechrecorder/project/project.service";
13
+ import * as i4 from "./speechrecorder/script/script.service";
14
+ import * as i5 from "./speechrecorder/recordings/recordings.service";
15
+ import * as i6 from "./speechrecorder/spruploader";
16
+ import * as i7 from "./speechrecorder/session/sessionmanager";
17
+ export var Mode;
18
+ (function (Mode) {
19
+ Mode[Mode["SINGLE_SESSION"] = 0] = "SINGLE_SESSION";
20
+ Mode[Mode["DEMO"] = 1] = "DEMO";
21
+ })(Mode || (Mode = {}));
22
+ export class SpeechrecorderngComponent {
23
+ constructor(route, router, changeDetectorRef, sessionsService, projectService, scriptService, recFilesService, uploader) {
24
+ this.route = route;
25
+ this.router = router;
26
+ this.changeDetectorRef = changeDetectorRef;
27
+ this.sessionsService = sessionsService;
28
+ this.projectService = projectService;
29
+ this.scriptService = scriptService;
30
+ this.recFilesService = recFilesService;
31
+ this.uploader = uploader;
32
+ this._project = null;
33
+ this.dataSaved = true;
34
+ }
35
+ ngOnInit() {
36
+ try {
37
+ let audioContext = AudioContextProvider.audioContextInstance();
38
+ if (audioContext) {
39
+ this.controlAudioPlayer = new AudioPlayer(audioContext, this);
40
+ }
41
+ this.sm.controlAudioPlayer = this.controlAudioPlayer;
42
+ this.sm.statusAlertType = 'info';
43
+ this.sm.statusMsg = 'Player initialized.';
44
+ }
45
+ catch (err) {
46
+ let errMsg = 'Unknown error';
47
+ if (err instanceof Error) {
48
+ errMsg = err.message;
49
+ }
50
+ this.sm.statusMsg = errMsg;
51
+ this.sm.statusAlertType = 'error';
52
+ console.error(errMsg);
53
+ }
54
+ }
55
+ ngAfterViewInit() {
56
+ if (this.sm.status !== 8 /* ERROR */) {
57
+ let initSuccess = this.init();
58
+ if (initSuccess) {
59
+ this.route.queryParams.subscribe((params) => {
60
+ if (params['sessionId']) {
61
+ this.fetchSession(params['sessionId']);
62
+ }
63
+ });
64
+ this.route.params.subscribe((params) => {
65
+ let routeParamsId = params['id'];
66
+ if (routeParamsId) {
67
+ this.fetchSession(routeParamsId);
68
+ }
69
+ });
70
+ }
71
+ }
72
+ }
73
+ fetchSession(sessionId) {
74
+ //Error: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: 'statusMsg: Player initialized.'. Current value: 'statusMsg: Fetching session info...'.
75
+ // params.subscribe seems not to be asynchronous
76
+ // this.sm.statusAlertType='info';
77
+ // this.sm.statusMsg = 'Fetching session info...';
78
+ // this.sm.statusWaiting=true;
79
+ let sessObs = this.sessionsService.sessionObserver(sessionId);
80
+ if (sessObs) {
81
+ sessObs.subscribe(sess => {
82
+ this.setSession(sess);
83
+ this.sm.statusAlertType = 'info';
84
+ this.sm.statusMsg = 'Received session info.';
85
+ this.sm.statusWaiting = false;
86
+ if (sess.project) {
87
+ //console.debug("Session associated project: "+sess.project)
88
+ this.projectService.projectObservable(sess.project).subscribe(project => {
89
+ this.project = project;
90
+ this.fetchScript(sess);
91
+ }, reason => {
92
+ this.sm.statusMsg = reason;
93
+ this.sm.statusAlertType = 'error';
94
+ this.sm.statusWaiting = false;
95
+ console.error("Error fetching project config: " + reason);
96
+ });
97
+ }
98
+ else {
99
+ console.info("Session has no associated project. Using default configuration.");
100
+ this.fetchScript(sess);
101
+ }
102
+ }, (reason) => {
103
+ this.sm.statusMsg = reason;
104
+ this.sm.statusAlertType = 'error';
105
+ this.sm.statusWaiting = false;
106
+ console.error("Error fetching session " + reason);
107
+ });
108
+ }
109
+ }
110
+ fetchScript(sess) {
111
+ if (sess.script) {
112
+ this.sm.statusAlertType = 'info';
113
+ this.sm.statusMsg = 'Fetching recording script...';
114
+ this.sm.statusWaiting = true;
115
+ this.scriptService.scriptObservable(sess.script).subscribe(script => {
116
+ this.sm.statusAlertType = 'info';
117
+ this.sm.statusMsg = 'Received recording script.';
118
+ this.sm.statusWaiting = false;
119
+ this.setScript(script);
120
+ this.sm.session = sess;
121
+ this.fetchRecordings(sess, this.script);
122
+ }, reason => {
123
+ let errMsg = "Error fetching recording script: " + reason;
124
+ console.error(errMsg);
125
+ this.sm.statusMsg = errMsg;
126
+ this.sm.statusAlertType = 'error';
127
+ this.sm.statusWaiting = false;
128
+ });
129
+ }
130
+ else {
131
+ let errMsg = "No recording script is defined for this session with ID " + sess.sessionId;
132
+ console.error(this.sm.statusMsg);
133
+ this.sm.statusMsg = errMsg;
134
+ this.sm.statusAlertType = 'error';
135
+ }
136
+ }
137
+ fetchRecordings(sess, script) {
138
+ this.sm.statusAlertType = 'info';
139
+ this.sm.statusMsg = 'Fetching infos of recordings...';
140
+ this.sm.statusWaiting = true;
141
+ let prNm = null;
142
+ if (this.project) {
143
+ let rfsObs = this.recFilesService.recordingFileDescrList(this.project.name, sess.sessionId);
144
+ rfsObs.subscribe((rfs) => {
145
+ this.sm.statusAlertType = 'info';
146
+ this.sm.statusMsg = 'Received infos of recordings.';
147
+ this.sm.statusWaiting = false;
148
+ if (rfs) {
149
+ if (rfs instanceof Array) {
150
+ rfs.forEach((rf) => {
151
+ //console.debug("Already recorded: " + rf+ " "+rf.recording.itemcode);
152
+ this.sm.addRecordingFileByDescriptor(rf);
153
+ });
154
+ }
155
+ else {
156
+ console.error('Expected type array for list of already recorded files ');
157
+ }
158
+ }
159
+ else {
160
+ //console.debug("Recording file list: " + rfs);
161
+ }
162
+ }, () => {
163
+ // we start the session anyway
164
+ this.startSession();
165
+ }, () => {
166
+ this.startSession();
167
+ });
168
+ }
169
+ else {
170
+ // TODO
171
+ }
172
+ }
173
+ startSession() {
174
+ this.sm.statusWaiting = false;
175
+ this.sm.start();
176
+ }
177
+ setSession(session) {
178
+ if (session) {
179
+ // console.debug("Session ID: " + session.sessionId);
180
+ }
181
+ else {
182
+ //console.debug("Session Undefined");
183
+ }
184
+ }
185
+ ready() {
186
+ return this.dataSaved && !this.sm.isActive();
187
+ }
188
+ init() {
189
+ var n = navigator;
190
+ //var getUserMediaFnct= n.getUserMedia || n.webkitGetUserMedia ||
191
+ // n.mozGetUserMedia || n.msGetUserMedia;
192
+ var w = window;
193
+ // TODO test onyl !!
194
+ // let debugFail=true;
195
+ // AudioContext = w.AudioContext || w.webkitAudioContext;
196
+ // if (typeof AudioContext !== 'function' || debugFail) {
197
+ // this.sm.statusAlertType='error';
198
+ // this.sm.statusMsg = 'ERROR: Browser does not support Web Audio API!';
199
+ // return false;
200
+ // } else {
201
+ // var context = new AudioContext();
202
+ //
203
+ // if (typeof navigator.mediaDevices.getUserMedia !== 'function') {
204
+ // this.sm.statusAlertType='error';
205
+ // this.sm.statusMsg= 'ERROR: Browser does not support Media streams!';
206
+ // return false;
207
+ // } else {
208
+ //
209
+ //this.sm = new SessionManager(new SimpleTrafficLight(), this.uploader);
210
+ //this.sm.init();
211
+ //this.ap = new AudioPlayer(context,this);
212
+ //this.sm.listener=this;
213
+ // }
214
+ // }
215
+ this.uploader.listener = (ue) => {
216
+ this.uploadUpdate(ue);
217
+ };
218
+ window.addEventListener('beforeunload', (e) => {
219
+ console.debug("Before page unload event");
220
+ if (this.ready()) {
221
+ return;
222
+ }
223
+ else {
224
+ // all this attempts to customize the message do not work anymore (for security reasons)!!
225
+ var message = "Please do not leave the page, until all recordings are uploaded!";
226
+ alert(message);
227
+ e = e || window.event;
228
+ if (e) {
229
+ e.returnValue = message;
230
+ e.cancelBubble = true;
231
+ if (e.stopPropagation) {
232
+ e.stopPropagation();
233
+ }
234
+ if (e.preventDefault) {
235
+ e.preventDefault();
236
+ }
237
+ }
238
+ return message;
239
+ }
240
+ });
241
+ return true;
242
+ }
243
+ uploadUpdate(ue) {
244
+ let upStatus = ue.status;
245
+ this.dataSaved = (UploaderStatus.DONE === upStatus);
246
+ let percentUpl = ue.percentDone();
247
+ if (UploaderStatus.ERR === upStatus) {
248
+ this.sm.uploadStatus = 'warn';
249
+ }
250
+ else {
251
+ if (percentUpl < 50) {
252
+ this.sm.uploadStatus = 'accent';
253
+ }
254
+ else {
255
+ this.sm.uploadStatus = 'success';
256
+ }
257
+ this.sm.uploadProgress = percentUpl;
258
+ }
259
+ this.changeDetectorRef.detectChanges();
260
+ }
261
+ configure() {
262
+ this.loadProjectCfg(() => {
263
+ // display project name
264
+ let prName = '[Unknown]';
265
+ if (this.project && this.project.name) {
266
+ prName = this.project.name;
267
+ }
268
+ //this.titleEl.innerText = prName;
269
+ });
270
+ }
271
+ randomize(script) {
272
+ script.sections.forEach((s) => {
273
+ if ('RANDOM' === s.order) {
274
+ s._shuffledGroups = Arrays.shuffleArray(s.groups);
275
+ }
276
+ else {
277
+ s._shuffledGroups = s.groups;
278
+ }
279
+ s._shuffledGroups.forEach((g) => {
280
+ if ('RANDOM' === g.order) {
281
+ g._shuffledPromptItems = Arrays.shuffleArray(g.promptItems);
282
+ }
283
+ else {
284
+ g._shuffledPromptItems = g.promptItems;
285
+ }
286
+ });
287
+ });
288
+ }
289
+ setScript(script) {
290
+ this.script = script;
291
+ this.randomize(this.script);
292
+ this.sm.script = this.script;
293
+ }
294
+ set project(project) {
295
+ this._project = project;
296
+ let chCnt = ProjectUtil.DEFAULT_AUDIO_CHANNEL_COUNT;
297
+ if (project) {
298
+ console.info("Project name: " + project.name);
299
+ this.sm.audioDevices = project.audioDevices;
300
+ chCnt = ProjectUtil.audioChannelCount(project);
301
+ console.info("Project requested recording channel count: " + chCnt);
302
+ this.sm.autoGainControlConfigs = project.autoGainControlConfigs;
303
+ }
304
+ else {
305
+ console.error("Empty project configuration!");
306
+ }
307
+ this.sm.channelCount = chCnt;
308
+ }
309
+ get project() {
310
+ return this._project;
311
+ }
312
+ loadProjectCfg(callback) {
313
+ let projUrl = null;
314
+ if (this.sessionId === null) {
315
+ if (window.location.hostname === 'localhost' || this.mode === Mode.DEMO) {
316
+ // debug or demo mode
317
+ projUrl = 'test/Demo1.json?' + new Date().getTime();
318
+ }
319
+ }
320
+ else {
321
+ // load RESTful by sessionId
322
+ projUrl = window.location.protocol + '//' + window.location.hostname + ':' + window.location.port + '/wikispeech/rest/projects/?sessionId=' + this.sessionId;
323
+ }
324
+ if (projUrl) {
325
+ var pLoader = new XMLHttpRequest();
326
+ pLoader.open("GET", projUrl, true);
327
+ pLoader.setRequestHeader('Accept', 'application/json');
328
+ pLoader.responseType = "json";
329
+ pLoader.onload = (e) => {
330
+ this.project = pLoader.response.project;
331
+ callback();
332
+ };
333
+ pLoader.onerror = (e) => {
334
+ console.error("Error downloading project data ...");
335
+ };
336
+ pLoader.send();
337
+ }
338
+ }
339
+ // loadScript(callback: ()=>any){
340
+ // var scrLoader = new XMLHttpRequest();
341
+ // let hn:string =window.location.hostname;
342
+ // let pn:string =window.location.pathname;
343
+ // let pr:string =window.location.protocol;
344
+ // let po:string =window.location.port;
345
+ //
346
+ // let sessionId:string=this.session.sessionId;
347
+ //
348
+ // let scrUrl:string | null = null;
349
+ //
350
+ // if (hn === 'localhost' || this.mode===Mode.DEMO) {
351
+ // // local debug mode
352
+ // // FF caches
353
+ // scrUrl = 'test/' + this.session.script.toString() + '.json?' + new Date().getTime();
354
+ //
355
+ // } else {
356
+ // let scrPath:string = '/wikispeech/session/scripts/servlet';
357
+ // let scrQu:string = 'sessionId=' + sessionId;
358
+ // scrUrl = pr + '//' + hn + ':' + po + scrPath;
359
+ // if (scrQu) {
360
+ // scrUrl = scrUrl + '?' + scrQu;
361
+ // }
362
+ // }
363
+ //
364
+ // scrLoader.open("GET",scrUrl , true);
365
+ // scrLoader.setRequestHeader('Accept','application/json');
366
+ // scrLoader.responseType = "json";
367
+ // scrLoader.onload = (e) => {
368
+ //
369
+ // this.script = scrLoader.response;
370
+ //
371
+ //
372
+ // this.sm.script = this.script;
373
+ //
374
+ // callback();
375
+ // }
376
+ // scrLoader.onerror = (e) => {
377
+ // console.log("Error downloading recording script data ...");
378
+ // }
379
+ // scrLoader.send();
380
+ // }
381
+ start() {
382
+ //this.configure();
383
+ }
384
+ audioPlayerUpdate(e) {
385
+ if (PlaybackEventType.STARTED === e.type) {
386
+ //this.startBtn.disabled=true;
387
+ //this.stopBtn.disabled=true;
388
+ this.sm.statusAlertType = 'info';
389
+ this.sm.statusMsg = 'Playback...';
390
+ }
391
+ else if (PlaybackEventType.ENDED === e.type) {
392
+ //this.startBtn.disabled=false;
393
+ //this.stopBtn.disabled=true;
394
+ this.sm.statusAlertType = 'info';
395
+ this.sm.statusMsg = 'Ready.';
396
+ }
397
+ }
398
+ error() {
399
+ this.sm.statusAlertType = 'error';
400
+ this.sm.statusMsg = 'ERROR: Recording.';
401
+ }
402
+ }
403
+ SpeechrecorderngComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: SpeechrecorderngComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }, { token: i0.ChangeDetectorRef }, { token: i2.SessionService }, { token: i3.ProjectService }, { token: i4.ScriptService }, { token: i5.RecordingService }, { token: i6.SpeechRecorderUploader }], target: i0.ɵɵFactoryTarget.Component });
404
+ SpeechrecorderngComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: SpeechrecorderngComponent, selector: "app-speechrecorder", providers: [SessionService], viewQueries: [{ propertyName: "sm", first: true, predicate: SessionManager, descendants: true, static: true }], ngImport: i0, template: `
405
+ <app-sprrecordingsession [projectName]="project?.name" [dataSaved]="dataSaved"></app-sprrecordingsession>
406
+ `, isInline: true, styles: [":host{flex:2;display:flex;flex-direction:column;min-height:0}\n"], components: [{ type: i7.SessionManager, selector: "app-sprrecordingsession", inputs: ["projectName", "dataSaved"] }] });
407
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: SpeechrecorderngComponent, decorators: [{
408
+ type: Component,
409
+ args: [{
410
+ selector: 'app-speechrecorder',
411
+ providers: [SessionService],
412
+ template: `
413
+ <app-sprrecordingsession [projectName]="project?.name" [dataSaved]="dataSaved"></app-sprrecordingsession>
414
+ `,
415
+ styles: [`:host{
416
+ flex: 2;
417
+ display: flex;
418
+ flex-direction: column;
419
+ min-height:0;
420
+
421
+ }`]
422
+ }]
423
+ }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: i0.ChangeDetectorRef }, { type: i2.SessionService }, { type: i3.ProjectService }, { type: i4.ScriptService }, { type: i5.RecordingService }, { type: i6.SpeechRecorderUploader }]; }, propDecorators: { sm: [{
424
+ type: ViewChild,
425
+ args: [SessionManager, { static: true }]
426
+ }] } });
427
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlZWNocmVjb3JkZXJuZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvc3BlZWNocmVjb3JkZXJuZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxTQUFTLEVBQTJDLE1BQU0sZUFBZSxDQUFBO0FBQzVGLE9BQU8sRUFDa0MsU0FBUyxJQUFJLGlCQUFpQixFQUNyRSxXQUFXLEVBQ1osTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQUUsY0FBYyxFQUFnQyxNQUFNLHlDQUF5QyxDQUFDO0FBQ3ZHLE9BQU8sRUFBNkIsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0UsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBSXhFLE9BQU8sRUFBVSxXQUFXLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUV0RSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUdyRCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7QUFFckMsTUFBTSxDQUFOLElBQVksSUFBMEI7QUFBdEMsV0FBWSxJQUFJO0lBQUUsbURBQWMsQ0FBQTtJQUFDLCtCQUFJLENBQUE7QUFBQSxDQUFDLEVBQTFCLElBQUksS0FBSixJQUFJLFFBQXNCO0FBa0J0QyxNQUFNLE9BQU8seUJBQXlCO0lBY3BDLFlBQW9CLEtBQXFCLEVBQ2YsTUFBYyxFQUNsQixpQkFBb0MsRUFDcEMsZUFBOEIsRUFDOUIsY0FBNkIsRUFDN0IsYUFBMkIsRUFDM0IsZUFBZ0MsRUFDaEMsUUFBK0I7UUFQakMsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDZixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2xCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsb0JBQWUs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UyxHQUFDLFFBQVEsQ0FBQztTQUMzQjtJQUNGLENBQUM7SUFDRCxLQUFLO1FBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEdBQUMsT0FBTyxDQUFDO1FBQ25DLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxHQUFDLG1CQUFtQixDQUFDO0lBQ3ZDLENBQUM7O3NIQW5iVSx5QkFBeUI7MEdBQXpCLHlCQUF5Qiw2Q0FiekIsQ0FBQyxjQUFjLENBQUMsOERBeUJoQixjQUFjLDhEQXhCZjs7R0FFVDsyRkFVVSx5QkFBeUI7a0JBaEJyQyxTQUFTO21CQUFDO29CQUVULFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFNBQVMsRUFBRSxDQUFDLGNBQWMsQ0FBQztvQkFDM0IsUUFBUSxFQUFFOztHQUVUO29CQUNELE1BQU0sRUFBRSxDQUFDOzs7Ozs7SUFNUCxDQUFDO2lCQUVKO29UQWE4QyxFQUFFO3NCQUE5QyxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgVmlld0NoaWxkLCBDaGFuZ2VEZXRlY3RvclJlZiwgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQge1xyXG4gIEF1ZGlvUGxheWVyTGlzdGVuZXIsIEF1ZGlvUGxheWVyRXZlbnQsIEV2ZW50VHlwZSBhcyBQbGF5YmFja0V2ZW50VHlwZSxcclxuICBBdWRpb1BsYXllclxyXG59IGZyb20gJy4vYXVkaW8vcGxheWJhY2svcGxheWVyJztcclxuaW1wb3J0IHtHcm91cCwgT3JkZXIsIFByb21wdEl0ZW0sIFNjcmlwdH0gZnJvbSAnLi9zcGVlY2hyZWNvcmRlci9zY3JpcHQvc2NyaXB0J1xyXG5pbXBvcnQgeyBTZXNzaW9uTWFuYWdlcixTdGF0dXMgYXMgU2Vzc2lvbk1hbmFnZXJTdGF0dXN9IGZyb20gJy4vc3BlZWNocmVjb3JkZXIvc2Vzc2lvbi9zZXNzaW9ubWFuYWdlcic7XHJcbmltcG9ydCB7IFVwbG9hZGVyU3RhdHVzQ2hhbmdlRXZlbnQsIFVwbG9hZGVyU3RhdHVzIH0gZnJvbSAnLi9uZXQvdXBsb2FkZXInO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBQYXJhbXMsIFJvdXRlcn0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQge1Nlc3Npb25TZXJ2aWNlfSBmcm9tIFwiLi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL3Nlc3Npb24uc2VydmljZVwiO1xyXG5pbXBvcnQge1NjcmlwdFNlcnZpY2V9IGZyb20gXCIuL3NwZWVjaHJlY29yZGVyL3NjcmlwdC9zY3JpcHQuc2VydmljZVwiO1xyXG5pbXBvcnQge1NwZWVjaFJlY29yZGVyVXBsb2FkZXJ9IGZyb20gXCIuL3NwZWVjaHJlY29yZGVyL3NwcnVwbG9hZGVyXCI7XHJcbmltcG9ydCB7U2Vzc2lvbn0gZnJvbSBcIi4vc3BlZWNocmVjb3JkZXIvc2Vzc2lvbi9zZXNzaW9uXCI7XHJcbmltcG9ydCB7UHJvamVjdCwgUHJvamVjdFV0aWx9IGZyb20gXCIuL3NwZWVjaHJlY29yZGVyL3Byb2plY3QvcHJvamVjdFwiO1xyXG5pbXBvcnQge1Byb2plY3RTZXJ2aWNlfSBmcm9tIFwiLi9zcGVlY2hyZWNvcmRlci9wcm9qZWN0L3Byb2plY3Quc2VydmljZVwiO1xyXG5pbXBvcnQge0F1ZGlvQ29udGV4dFByb3ZpZGVyfSBmcm9tIFwiLi9hdWRpby9jb250ZXh0XCI7XHJcbmltcG9ydCB7UmVjb3JkaW5nU2VydmljZX0gZnJvbSBcIi4vc3BlZWNocmVjb3JkZXIvcmVjb3JkaW5ncy9yZWNvcmRpbmdzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtSZWNvcmRpbmdGaWxlRGVzY3JpcHRvckltcGx9IGZyb20gXCIuL3NwZWVjaHJlY29yZGVyL3JlY29yZGluZ1wiO1xyXG5pbXBvcnQge0FycmF5c30gZnJvbSBcIi4vdXRpbHMvdXRpbHNcIjtcclxuXHJcbmV4cG9ydCBlbnVtIE1vZGUge1NJTkdMRV9TRVNTSU9OLERFTU99XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHJcbiAgc2VsZWN0b3I6ICdhcHAtc3BlZWNocmVjb3JkZXInLFxyXG4gIHByb3ZpZGVyczogW1Nlc3Npb25TZXJ2aWNlXSxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGFwcC1zcHJyZWNvcmRpbmdzZXNzaW9uIFtwcm9qZWN0TmFtZV09XCJwcm9qZWN0Py5uYW1lXCIgW2RhdGFTYXZlZF09XCJkYXRhU2F2ZWRcIj48L2FwcC1zcHJyZWNvcmRpbmdzZXNzaW9uPlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYDpob3N0e1xyXG4gICAgZmxleDogMjtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgbWluLWhlaWdodDowO1xyXG5cclxuICB9YF1cclxuXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTcGVlY2hyZWNvcmRlcm5nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LEFmdGVyVmlld0luaXQsQXVkaW9QbGF5ZXJMaXN0ZW5lciB7XHJcblxyXG5cdCAgbW9kZSE6TW9kZTtcclxuXHRcdGNvbnRyb2xBdWRpb1BsYXllciE6QXVkaW9QbGF5ZXI7XHJcblx0XHRhdWRpbzphbnk7XHJcblxyXG5cdF9wcm9qZWN0OlByb2plY3R8bnVsbD1udWxsO1xyXG4gIHNlc3Npb25JZCE6IHN0cmluZztcclxuICBzZXNzaW9uITpTZXNzaW9uO1xyXG5cclxuICBzY3JpcHQhOlNjcmlwdDtcclxuICAgIGRhdGFTYXZlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgQFZpZXdDaGlsZChTZXNzaW9uTWFuYWdlciwgeyBzdGF0aWM6IHRydWUgfSkgc20hOlNlc3Npb25NYW5hZ2VyO1xyXG5cclxuXHRcdGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgICAgICAgICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2Vzc2lvbnNTZXJ2aWNlOlNlc3Npb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwcm9qZWN0U2VydmljZTpQcm9qZWN0U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2NyaXB0U2VydmljZTpTY3JpcHRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSByZWNGaWxlc1NlcnZpY2U6UmVjb3JkaW5nU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXBsb2FkZXI6U3BlZWNoUmVjb3JkZXJVcGxvYWRlcikge1xyXG5cdFx0fVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG5cdFx0ICB0cnkge1xyXG4gICAgICAgIGxldCBhdWRpb0NvbnRleHQgPSBBdWRpb0NvbnRleHRQcm92aWRlci5hdWRpb0NvbnRleHRJbnN0YW5jZSgpO1xyXG4gICAgICAgICAgICAgIGlmKGF1ZGlvQ29udGV4dCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xBdWRpb1BsYXllciA9IG5ldyBBdWRpb1BsYXllcihhdWRpb0NvbnRleHQsIHRoaXMpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICB0aGlzLnNtLmNvbnRyb2xBdWRpb1BsYXllcj10aGlzLmNvbnRyb2xBdWRpb1BsYXllcjtcclxuICAgICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZT0naW5mbyc7XHJcbiAgICAgICAgdGhpcy5zbS5zdGF0dXNNc2cgPSAnUGxheWVyIGluaXRpYWxpemVkLic7XHJcbiAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgIGxldCBlcnJNc2c9J1Vua25vd24gZXJyb3InO1xyXG4gICAgICAgIGlmKGVyciBpbnN0YW5jZW9mIEVycm9yKXtcclxuICAgICAgICAgIGVyck1zZz1lcnIubWVzc2FnZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zbS5zdGF0dXNNc2c9ZXJyTXNnO1xyXG4gICAgICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlPSdlcnJvcic7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJNc2cpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgICAgIG5nQWZ0ZXJWaWV3SW5pdCgpe1xyXG5cclxuXHRcdCAgaWYodGhpcy5zbS5zdGF0dXMhPT0gU2Vzc2lvbk1hbmFnZXJTdGF0dXMuRVJST1IpIHtcclxuICAgICAgICBsZXQgaW5pdFN1Y2Nlc3MgPSB0aGlzLmluaXQoKTtcclxuICAgICAgICBpZiAoaW5pdFN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKChwYXJhbXM6IFBhcmFtcykgPT4ge1xyXG4gICAgICAgICAgICBpZiAocGFyYW1zWydzZXNzaW9uSWQnXSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZmV0Y2hTZXNzaW9uKHBhcmFtc1snc2Vzc2lvbklkJ10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtczogUGFyYW1zKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCByb3V0ZVBhcmFtc0lkID0gcGFyYW1zWydpZCddO1xyXG4gICAgICAgICAgICBpZiAocm91dGVQYXJhbXNJZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZmV0Y2hTZXNzaW9uKHJvdXRlUGFyYW1zSWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZldGNoU2Vzc2lvbihzZXNzaW9uSWQ6c3RyaW5nKXtcclxuXHJcblxyXG5cdFx0ICAvL0Vycm9yOiBFeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yOiBFeHByZXNzaW9uIGhhcyBjaGFuZ2VkIGFmdGVyIGl0IHdhcyBjaGVja2VkLiBQcmV2aW91cyB2YWx1ZTogJ3N0YXR1c01zZzogUGxheWVyIGluaXRpYWxpemVkLicuIEN1cnJlbnQgdmFsdWU6ICdzdGF0dXNNc2c6IEZldGNoaW5nIHNlc3Npb24gaW5mby4uLicuXHJcbiAgICAgIC8vIHBhcmFtcy5zdWJzY3JpYmUgc2VlbXMgbm90IHRvIGJlIGFzeW5jaHJvbm91c1xyXG5cclxuICAgICAgLy8gdGhpcy5zbS5zdGF0dXNBbGVydFR5cGU9J2luZm8nO1xyXG4gICAgICAvLyB0aGlzLnNtLnN0YXR1c01zZyA9ICdGZXRjaGluZyBzZXNzaW9uIGluZm8uLi4nO1xyXG4gICAgICAvLyB0aGlzLnNtLnN0YXR1c1dhaXRpbmc9dHJ1ZTtcclxuICAgICAgbGV0IHNlc3NPYnM9IHRoaXMuc2Vzc2lvbnNTZXJ2aWNlLnNlc3Npb25PYnNlcnZlcihzZXNzaW9uSWQpO1xyXG5cclxuICAgICAgaWYoc2Vzc09icykge1xyXG4gICAgICAgIHNlc3NPYnMuc3Vic2NyaWJlKHNlc3MgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZXRTZXNzaW9uKHNlc3MpO1xyXG4gICAgICAgICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZT0naW5mbyc7XHJcbiAgICAgICAgICAgIHRoaXMuc20uc3RhdHVzTXNnID0gJ1JlY2VpdmVkIHNlc3Npb24gaW5mby4nO1xyXG4gICAgICAgICAgICB0aGlzLnNtLnN0YXR1c1dhaXRpbmc9ZmFsc2U7XHJcbiAgICAgICAgICBpZiAoc2Vzcy5wcm9qZWN0KSB7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlNlc3Npb24gYXNzb2NpYXRlZCBwcm9qZWN0OiBcIitzZXNzLnByb2plY3QpXHJcbiAgICAgICAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdE9ic2VydmFibGUoc2Vzcy5wcm9qZWN0KS5zdWJzY3JpYmUocHJvamVjdD0+e1xyXG4gICAgICAgICAgICAgIHRoaXMucHJvamVjdD1wcm9qZWN0O1xyXG4gICAgICAgICAgICAgIHRoaXMuZmV0Y2hTY3JpcHQoc2Vzcyk7XHJcbiAgICAgICAgICAgIH0scmVhc29uID0+e1xyXG4gICAgICAgICAgICAgIHRoaXMuc20uc3RhdHVzTXNnPXJlYXNvbjtcclxuICAgICAgICAgICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZT0nZXJyb3InO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNXYWl0aW5nPWZhbHNlO1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBmZXRjaGluZyBwcm9qZWN0IGNvbmZpZzogXCIrcmVhc29uKVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmluZm8oXCJTZXNzaW9uIGhhcyBubyBhc3NvY2lhdGVkIHByb2plY3QuIFVzaW5nIGRlZmF1bHQgY29uZmlndXJhdGlvbi5cIilcclxuICAgICAgICAgICAgdGhpcy5mZXRjaFNjcmlwdChzZXNzKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIChyZWFzb24pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNNc2cgPSByZWFzb247XHJcbiAgICAgICAgICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJztcclxuICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNXYWl0aW5nPWZhbHNlO1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZmV0Y2hpbmcgc2Vzc2lvbiBcIiArIHJlYXNvbilcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGZldGNoU2NyaXB0KHNlc3M6U2Vzc2lvbil7XHJcbiAgICAgIGlmKHNlc3Muc2NyaXB0KXtcclxuICAgICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZT0naW5mbyc7XHJcbiAgICAgICAgdGhpcy5zbS5zdGF0dXNNc2cgPSAnRmV0Y2hpbmcgcmVjb3JkaW5nIHNjcmlwdC4uLic7XHJcbiAgICAgICAgICB0aGlzLnNtLnN0YXR1c1dhaXRpbmc9dHJ1ZTtcclxuICAgICAgICB0aGlzLnNjcmlwdFNlcnZpY2Uuc2NyaXB0T2JzZXJ2YWJsZShzZXNzLnNjcmlwdCkuc3Vic2NyaWJlKHNjcmlwdD0+e1xyXG4gICAgICAgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGU9J2luZm8nO1xyXG4gICAgICAgICAgdGhpcy5zbS5zdGF0dXNNc2cgPSAnUmVjZWl2ZWQgcmVjb3JkaW5nIHNjcmlwdC4nO1xyXG4gICAgICAgICAgdGhpcy5zbS5zdGF0dXNXYWl0aW5nPWZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5zZXRTY3JpcHQoc2NyaXB0KVxyXG4gICAgICAgICAgdGhpcy5zbS5zZXNzaW9uPXNlc3M7XHJcbiAgICAgICAgICB0aGlzLmZldGNoUmVjb3JkaW5ncyhzZXNzLHRoaXMuc2NyaXB0KVxyXG4gICAgICAgIH0scmVhc29uID0+e1xyXG4gICAgICAgICAgbGV0IGVyck1zZz1cIkVycm9yIGZldGNoaW5nIHJlY29yZGluZyBzY3JpcHQ6IFwiK3JlYXNvblxyXG4gICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyTXNnKVxyXG4gICAgICAgICAgICB0aGlzLnNtLnN0YXR1c01zZz1lcnJNc2c7XHJcbiAgICAgICAgICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlPSdlcnJvcic7XHJcbiAgICAgICAgICAgIHRoaXMuc20uc3RhdHVzV2FpdGluZz1mYWxzZTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICBsZXQgZXJyTXNnPVwiTm8gcmVjb3JkaW5nIHNjcmlwdCBpcyBkZWZpbmVkIGZvciB0aGlzIHNlc3Npb24gd2l0aCBJRCBcIitzZXNzLnNlc3Npb25JZDtcclxuICAgICAgICBjb25zb2xlLmVycm9yKHRoaXMuc20uc3RhdHVzTXNnKVxyXG4gICAgICAgIHRoaXMuc20uc3RhdHVzTXNnPWVyck1zZztcclxuICAgICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZT0nZXJyb3InO1xyXG5cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBmZXRjaFJlY29yZGluZ3Moc2VzczpTZXNzaW9uLHNjcmlwdDpTY3JpcHQpe1xyXG4gICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZT0naW5mbyc7XHJcbiAgICAgIHRoaXMuc20uc3RhdHVzTXNnID0gJ0ZldGNoaW5nIGluZm9zIG9mIHJlY29yZGluZ3MuLi4nO1xyXG4gICAgICAgIHRoaXMuc20uc3RhdHVzV2FpdGluZz10cnVlO1xyXG4gICAgICAgIGxldCBwck5tOnN0cmluZ3xudWxsPW51bGw7XHJcbiAgICAgICAgaWYodGhpcy5wcm9qZWN0KSB7XHJcbiAgICAgICAgICAgIGxldCByZnNPYnMgPSB0aGlzLnJlY0ZpbGVzU2VydmljZS5yZWNvcmRpbmdGaWxlRGVzY3JMaXN0KHRoaXMucHJvamVjdC5uYW1lLCBzZXNzLnNlc3Npb25JZCk7XHJcbiAgICAgICAgICAgIHJmc09icy5zdWJzY3JpYmUoKHJmczogQXJyYXk8UmVjb3JkaW5nRmlsZURlc2NyaXB0b3JJbXBsPikgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGUgPSAnaW5mbyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNtLnN0YXR1c01zZyA9ICdSZWNlaXZlZCBpbmZvcyBvZiByZWNvcmRpbmdzLic7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNtLnN0YXR1c1dhaXRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmIChyZnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmZzIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmZzLmZvckVhY2goKHJmKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJBbHJlYWR5IHJlY29yZGVkOiBcIiArIHJmKyBcIiBcIityZi5yZWNvcmRpbmcuaXRlbWNvZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zbS5hZGRSZWNvcmRpbmdGaWxlQnlEZXNjcmlwdG9yKHJmKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFeHBlY3RlZCB0eXBlIGFycmF5IGZvciBsaXN0IG9mIGFscmVhZHkgcmVjb3JkZWQgZmlsZXMgJylcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlJlY29yZGluZyBmaWxlIGxpc3Q6IFwiICsgcmZzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gd2Ugc3RhcnQgdGhlIHNlc3Npb24gYW55d2F5XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0U2Vzc2lvbigpXHJcbiAgICAgICAgICAgIH0sICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRTZXNzaW9uKClcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBzdGFydFNlc3Npb24oKXtcclxuICAgICAgICB0aGlzLnNtLnN0YXR1c1dhaXRpbmc9ZmFsc2U7XHJcblx0XHQgIHRoaXMuc20uc3RhcnQoKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgICAgIHNldFNlc3Npb24oc2Vzc2lvbjphbnkpe1xyXG5cdFx0ICAgIGlmKHNlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgLy8gY29uc29sZS5kZWJ1ZyhcIlNlc3Npb24gSUQ6IFwiICsgc2Vzc2lvbi5zZXNzaW9uSWQpO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlNlc3Npb24gVW5kZWZpbmVkXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZWFkeSgpOmJvb2xlYW57XHJcblx0XHQgICAgcmV0dXJuIHRoaXMuZGF0YVNhdmVkICYmICF0aGlzLnNtLmlzQWN0aXZlKClcclxuICAgICAgICB9XHJcblxyXG5cdFx0aW5pdCgpOmJvb2xlYW4ge1xyXG5cclxuXHRcdFx0dmFyIG4gPSA8YW55Pm5hdmlnYXRvcjtcclxuXHRcdFx0Ly92YXIgZ2V0VXNlck1lZGlhRm5jdD0gbi5nZXRVc2VyTWVkaWEgfHwgbi53ZWJraXRHZXRVc2VyTWVkaWEgfHxcclxuXHRcdFx0Ly9cdG4ubW96R2V0VXNlck1lZGlhIHx8IG4ubXNHZXRVc2VyTWVkaWE7XHJcblx0XHRcdHZhciB3ID0gPGFueT53aW5kb3c7XHJcblx0XHRcdC8vIFRPRE8gdGVzdCBvbnlsICEhXHJcblxyXG4gICAgICAvLyBsZXQgZGVidWdGYWlsPXRydWU7XHJcblx0XHQvLyBcdEF1ZGlvQ29udGV4dCA9IHcuQXVkaW9Db250ZXh0IHx8IHcud2Via2l0QXVkaW9Db250ZXh0O1xyXG5cdFx0Ly8gXHRpZiAodHlwZW9mIEF1ZGlvQ29udGV4dCAhPT0gJ2Z1bmN0aW9uJyB8fCBkZWJ1Z0ZhaWwpIHtcclxuICAgICAgLy8gICAgICAgICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlPSdlcnJvcic7XHJcblx0XHQvLyBcdFx0dGhpcy5zbS5zdGF0dXNNc2cgPSAnRVJST1I6IEJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBXZWIgQXVkaW8gQVBJISc7XHJcblx0XHQvLyBcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0Ly8gXHR9IGVsc2Uge1xyXG5cdFx0Ly8gXHRcdHZhciBjb250ZXh0ID0gbmV3IEF1ZGlvQ29udGV4dCgpO1xyXG4gICAgICAvL1xyXG5cdFx0Ly8gXHRcdGlmICh0eXBlb2YgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgLy8gICAgICAgICAgICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZT0nZXJyb3InO1xyXG5cdFx0Ly8gXHRcdFx0dGhpcy5zbS5zdGF0dXNNc2c9ICdFUlJPUjogQnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IE1lZGlhIHN0cmVhbXMhJztcclxuICAgICAgLy8gICAgIHJldHVybiBmYWxzZTtcclxuXHRcdC8vIFx0XHR9IGVsc2Uge1xyXG4gICAgICAvL1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuc20gPSBuZXcgU2Vzc2lvbk1hbmFnZXIobmV3IFNpbXBsZVRyYWZmaWNMaWdodCgpLCB0aGlzLnVwbG9hZGVyKTtcclxuXHRcdFx0XHRcdC8vdGhpcy5zbS5pbml0KCk7XHJcblx0XHRcdFx0XHQvL3RoaXMuYXAgPSBuZXcgQXVkaW9QbGF5ZXIoY29udGV4dCx0aGlzKTtcclxuXHRcdFx0XHRcdC8vdGhpcy5zbS5saXN0ZW5lcj10aGlzO1xyXG5cdFx0XHQvL1x0fVxyXG5cdFx0Ly9cdH1cclxuICAgICAgICAgICAgdGhpcy51cGxvYWRlci5saXN0ZW5lciA9ICh1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGxvYWRVcGRhdGUodWUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJCZWZvcmUgcGFnZSB1bmxvYWQgZXZlbnRcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHkoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYWxsIHRoaXMgYXR0ZW1wdHMgdG8gY3VzdG9taXplIHRoZSBtZXNzYWdlIGRvIG5vdCB3b3JrIGFueW1vcmUgKGZvciBzZWN1cml0eSByZWFzb25zKSEhXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBcIlBsZWFzZSBkbyBub3QgbGVhdmUgdGhlIHBhZ2UsIHVudGlsIGFsbCByZWNvcmRpbmdzIGFyZSB1cGxvYWRlZCFcIjtcclxuICAgICAgICAgICAgICAgICAgICBhbGVydChtZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucmV0dXJuVmFsdWUgPSBtZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLmNhbmNlbEJ1YmJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLnN0b3BQcm9wYWdhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5wcmV2ZW50RGVmYXVsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgdXBsb2FkVXBkYXRlKHVlOiBVcGxvYWRlclN0YXR1c0NoYW5nZUV2ZW50KSB7XHJcbiAgICBsZXQgdXBTdGF0dXMgPSB1ZS5zdGF0dXM7XHJcbiAgICB0aGlzLmRhdGFTYXZlZCA9IChVcGxvYWRlclN0YXR1cy5ET05FID09PSB1cFN0YXR1cyk7XHJcbiAgICBsZXQgcGVyY2VudFVwbCA9IHVlLnBlcmNlbnREb25lKCk7XHJcbiAgICBpZiAoVXBsb2FkZXJTdGF0dXMuRVJSID09PSB1cFN0YXR1cykge1xyXG4gICAgICB0aGlzLnNtLnVwbG9hZFN0YXR1cyA9ICd3YXJuJ1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHBlcmNlbnRVcGwgPCA1MCkge1xyXG4gICAgICAgIHRoaXMuc20udXBsb2FkU3RhdHVzID0gJ2FjY2VudCdcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNtLnVwbG9hZFN0YXR1cyA9ICdzdWNjZXNzJ1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc20udXBsb2FkUHJvZ3Jlc3MgPSBwZXJjZW50VXBsO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgfVxyXG5cclxuICBjb25maWd1cmUoKSB7XHJcblxyXG5cclxuXHJcbiAgICAgIHRoaXMubG9hZFByb2plY3RDZmcoKCkgPT4ge1xyXG4gICAgICAgIC8vIGRpc3BsYXkgcHJvamVjdCBuYW1lXHJcbiAgICAgICAgbGV0IHByTmFtZTogc3RyaW5nID0gJ1tVbmtub3duXSc7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvamVjdCAmJiB0aGlzLnByb2plY3QubmFtZSkge1xyXG4gICAgICAgICAgcHJOYW1lID0gdGhpcy5wcm9qZWN0Lm5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vdGhpcy50aXRsZUVsLmlubmVyVGV4dCA9IHByTmFtZTtcclxuXHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSByYW5kb21pemUoc2NyaXB0OlNjcmlwdCl7XHJcblx0XHQgICAgc2NyaXB0LnNlY3Rpb25zLmZvckVhY2goKHMpPT57XHJcblx0XHQgICAgICAgIGlmKCdSQU5ET00nPT09cy5vcmRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHMuX3NodWZmbGVkR3JvdXBzID0gQXJyYXlzLnNodWZmbGVBcnJheTxHcm91cD4ocy5ncm91cHMpO1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcblx0XHQgICAgICAgICAgICBzLl9zaHVmZmxlZEdyb3Vwcz1zLmdyb3VwcztcclxuICAgICAgICAgICAgICAgIH1cclxuXHRcdCAgICAgICAgcy5fc2h1ZmZsZWRHcm91cHMuZm9yRWFjaCgoZyk9PntcclxuXHRcdCAgICAgICAgICAgIGlmKCdSQU5ET00nPT09Zy5vcmRlcil7XHJcblx0XHQgICAgICAgICAgICAgICBnLl9zaHVmZmxlZFByb21wdEl0ZW1zPUFycmF5cy5zaHVmZmxlQXJyYXk8UHJvbXB0SXRlbT4oZy5wcm9tcHRJdGVtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcblx0XHQgICAgICAgICAgICAgICAgZy5fc2h1ZmZsZWRQcm9tcHRJdGVtcz1nLnByb21wdEl0ZW1zO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRTY3JpcHQoc2NyaXB0OlNjcmlwdCl7XHJcbiAgICAgICAgdGhpcy5zY3JpcHQ9c2NyaXB0O1xyXG4gICAgICAgIHRoaXMucmFuZG9taXplKHRoaXMuc2NyaXB0KTtcclxuICAgICAgICB0aGlzLnNtLnNjcmlwdCA9IHRoaXMuc2NyaXB0O1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzZXQgcHJvamVjdChwcm9qZWN0OiBQcm9qZWN0fG51bGwpIHtcclxuICAgICAgICB0aGlzLl9wcm9qZWN0ID0gcHJvamVjdDtcclxuICAgICAgICBsZXQgY2hDbnQgPSBQcm9qZWN0VXRpbC5ERUZBVUxUX0FVRElPX0NIQU5ORUxfQ09VTlQ7XHJcblxyXG4gICAgICAgIGlmIChwcm9qZWN0KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcIlByb2plY3QgbmFtZTogXCIgKyBwcm9qZWN0Lm5hbWUpXHJcbiAgICAgICAgICAgIHRoaXMuc20uYXVkaW9EZXZpY2VzID0gcHJvamVjdC5hdWRpb0RldmljZXM7XHJcbiAgICAgICAgICAgIGNoQ250ID0gUHJvamVjdFV0aWwuYXVkaW9DaGFubmVsQ291bnQocHJvamVjdCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcIlByb2plY3QgcmVxdWVzdGVkIHJlY29yZGluZyBjaGFubmVsIGNvdW50OiBcIiArIGNoQ250KTtcclxuICAgICAgICAgICAgdGhpcy5zbS5hdXRvR2FpbkNvbnRyb2xDb25maWdzPXByb2plY3QuYXV0b0dhaW5Db250cm9sQ29uZmlncztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRW1wdHkgcHJvamVjdCBjb25maWd1cmF0aW9uIVwiKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNtLmNoYW5uZWxDb3VudCA9IGNoQ250O1xyXG5cclxuICAgIH1cclxuXHJcbiAgZ2V0IHByb2plY3QoKTpQcm9qZWN0fG51bGx7XHJcblx0XHQgIHJldHVybiB0aGlzLl9wcm9qZWN0O1xyXG4gIH1cclxuXHJcblxyXG5cclxuXHJcbiAgICBsb2FkUHJvamVjdENmZyhjYWxsYmFjazogKCk9PiBhbnkpe1xyXG4gICAgICBsZXQgcHJvalVybDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgICBpZiAodGhpcy5zZXNzaW9uSWQgPT09IG51bGwpIHtcclxuICAgICAgICBpZiAod2luZG93LmxvY2F0aW9uLmhvc3RuYW1lID09PSAnbG9jYWxob3N0JyB8fCB0aGlzLm1vZGUgPT09IE1vZGUuREVNTykge1xyXG4gICAgICAgICAgLy8gZGVidWcgb3IgZGVtbyBtb2RlXHJcbiAgICAgICAgICBwcm9qVXJsID0gJ3Rlc3QvRGVtbzEuanNvbj8nICsgbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIGxvYWQgUkVTVGZ1bCBieSBzZXNzaW9uSWRcclxuICAgICAgICBwcm9qVXJsID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSArICc6JyArIHdpbmRvdy5sb2NhdGlvbi5wb3J0ICsgJy93aWtpc3BlZWNoL3Jlc3QvcHJvamVjdHMvP3Nlc3Npb25JZD0nICsgdGhpcy5zZXNzaW9uSWQ7XHJcblxyXG4gICAgICB9XHJcbiAgICAgIGlmKHByb2pVcmwpIHtcclxuICAgICAgICB2YXIgcExvYWRlciA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgIHBMb2FkZXIub3BlbihcIkdFVFwiLCBwcm9qVXJsLCB0cnVlKTtcclxuICAgICAgICBwTG9hZGVyLnNldFJlcXVlc3RIZWFkZXIoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi9qc29uJyk7XHJcbiAgICAgICAgcExvYWRlci5yZXNwb25zZVR5cGUgPSBcImpzb25cIjtcclxuICAgICAgICBwTG9hZGVyLm9ubG9hZCA9IChlKSA9PiB7XHJcblxyXG4gICAgICAgICAgdGhpcy5wcm9qZWN0ID0gcExvYWRlci5yZXNwb25zZS5wcm9qZWN0O1xyXG5cclxuICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBMb2FkZXIub25lcnJvciA9IChlKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZG93bmxvYWRpbmcgcHJvamVjdCBkYXRhIC4uLlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcExvYWRlci5zZW5kKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcbiAgLy8gbG9hZFNjcmlwdChjYWxsYmFjazogKCk9PmFueSl7XHJcbiAgLy8gICB2YXIgc2NyTG9hZGVyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgLy8gICBsZXQgaG46c3RyaW5nID13aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7XHJcbiAgLy8gICBsZXQgcG46c3RyaW5nID13aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7XHJcbiAgLy8gICBsZXQgcHI6c3RyaW5nID13aW5kb3cubG9jYXRpb24ucHJvdG9jb2w7XHJcbiAgLy8gICBsZXQgcG86c3RyaW5nID13aW5kb3cubG9jYXRpb24ucG9ydDtcclxuICAvL1xyXG4gIC8vICAgbGV0IHNlc3Npb25JZDpzdHJpbmc9dGhpcy5zZXNzaW9uLnNlc3Npb25JZDtcclxuICAvL1xyXG4gIC8vICAgICBsZXQgc2NyVXJsOnN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIC8vXHJcbiAgLy8gICAgIGlmIChobiA9PT0gJ2xvY2FsaG9zdCcgIHx8IHRoaXMubW9kZT09PU1vZGUuREVNTykge1xyXG4gIC8vICAgICAgICAgLy8gbG9jYWwgZGVidWcgbW9kZVxyXG4gIC8vICAgICAgICAgLy8gRkYgY2FjaGVzXHJcbiAgLy8gICAgICAgICBzY3JVcmwgPSAndGVzdC8nICsgdGhpcy5zZXNzaW9uLnNjcmlwdC50b1N0cmluZygpICsgJy5qc29uPycgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAvL1xyXG4gIC8vICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgICAgbGV0IHNjclBhdGg6c3RyaW5nID0gJy93aWtpc3BlZWNoL3Nlc3Npb24vc2NyaXB0cy9zZXJ2bGV0JztcclxuICAvLyAgICAgICAgIGxldCBzY3JRdTpzdHJpbmcgPSAnc2Vzc2lvbklkPScgKyBzZXNzaW9uSWQ7XHJcbiAgLy8gICAgICAgICBzY3JVcmwgPSBwciArICcvLycgKyBobiArICc6JyArIHBvICsgc2NyUGF0aDtcclxuICAvLyAgICAgICAgIGlmIChzY3JRdSkge1xyXG4gIC8vICAgICAgICAgICAgIHNjclVybCA9IHNjclVybCArICc/JyArIHNjclF1O1xyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICB9XHJcbiAgLy9cclxuICAvLyAgIHNjckxvYWRlci5vcGVuKFwiR0VUXCIsc2NyVXJsICwgdHJ1ZSk7XHJcbiAgLy8gICBzY3JMb2FkZXIuc2V0UmVxdWVzdEhlYWRlcignQWNjZXB0JywnYXBwbGljYXRpb24vanNvbicpO1xyXG4gIC8vICAgc2NyTG9hZGVyLnJlc3BvbnNlVHlwZSA9IFwianNvblwiO1xyXG4gIC8vICAgc2NyTG9hZGVyLm9ubG9hZCA9IChlKSA9PiB7XHJcbiAgLy9cclxuICAvLyAgICAgdGhpcy5zY3JpcHQgPSBzY3JMb2FkZXIucmVzcG9uc2U7XHJcbiAgLy9cclxuICAvL1xyXG4gIC8vICAgICB0aGlzLnNtLnNjcmlwdCA9IHRoaXMuc2NyaXB0O1xyXG4gIC8vXHJcbiAgLy8gICAgIGNhbGxiYWNrKCk7XHJcbiAgLy8gICB9XHJcbiAgLy8gICBzY3JMb2FkZXIub25lcnJvciA9IChlKSA9PiB7XHJcbiAgLy8gICAgIGNvbnNvbGUubG9nKFwiRXJyb3IgZG93bmxvYWRpbmcgcmVjb3JkaW5nIHNjcmlwdCBkYXRhIC4uLlwiKTtcclxuICAvLyAgIH1cclxuICAvLyAgIHNjckxvYWRlci5zZW5kKCk7XHJcbiAgLy8gfVxyXG5cclxuICAgIHN0YXJ0KCl7XHJcblxyXG4gICAgICAgIC8vdGhpcy5jb25maWd1cmUoKTtcclxuXHJcbiAgICB9XHJcblxyXG5cdFx0YXVkaW9QbGF5ZXJVcGRhdGUoZTpBdWRpb1BsYXllckV2ZW50KXtcclxuXHRcdFx0aWYoUGxheWJhY2tFdmVudFR5cGUuU1RBUlRFRD09PWUudHlwZSl7XHJcblx0XHRcdFx0Ly90aGlzLnN0YXJ0QnRuLmRpc2FibGVkPXRydWU7XHJcblx0XHRcdFx0Ly90aGlzLnN0b3BCdG4uZGlzYWJsZWQ9dHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlPSdpbmZvJztcclxuXHRcdFx0XHR0aGlzLnNtLnN0YXR1c01zZz0nUGxheWJhY2suLi4nO1xyXG5cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChQbGF5YmFja0V2ZW50VHlwZS5FTkRFRCA9PT0gZS50eXBlKSB7XHJcblx0XHRcdFx0Ly90aGlzLnN0YXJ0QnRuLmRpc2FibGVkPWZhbHNlO1xyXG5cdFx0XHRcdC8vdGhpcy5zdG9wQnRuLmRpc2FibGVkPXRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZT0naW5mbyc7XHJcblx0XHRcdFx0dGhpcy5zbS5zdGF0dXNNc2c9J1JlYWR5Lic7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGVycm9yKCl7XHJcblx0XHQgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGU9J2Vycm9yJztcclxuXHRcdFx0dGhpcy5zbS5zdGF0dXNNc2c9J0VSUk9SOiBSZWNvcmRpbmcuJztcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cclxuLy9cclxuLy9cclxuLy8gZnVuY3Rpb24gc3BlZWNocmVjb3JkZXJJbml0KCkge1xyXG4vLyBcdHZhciBzcHIgPSBuZXcgaXBzLmFwcHMuc3BlZWVjaHJlY29yZGVyLlNwZWVjaFJlY29yZGVyKCk7XHJcbi8vIFx0c3ByLmluaXQoKTtcclxuLy8gICBzcHIuc3RhcnQoKTtcclxuLy9cclxuLy9cclxuLy8gfVxyXG4iXX0=