@testgorilla/tgo-immersive-test 0.0.1 → 1.0.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 (117) hide show
  1. package/README.md +32 -0
  2. package/esm2022/index.mjs +5 -0
  3. package/esm2022/lib/components/immersive-test/immersive-test.component.mjs +257 -0
  4. package/esm2022/lib/components/index.mjs +6 -0
  5. package/esm2022/lib/components/review-instructions-dialog/index.mjs +2 -0
  6. package/esm2022/lib/components/review-instructions-dialog/review-instructions-dialog.component.mjs +69 -0
  7. package/esm2022/lib/components/ringing-phone-animation/index.mjs +2 -0
  8. package/esm2022/lib/components/ringing-phone-animation/ringing-phone-animation.component.mjs +43 -0
  9. package/esm2022/lib/components/ringing-phone-animation/ringing-phone-animation.sound.mjs +2 -0
  10. package/esm2022/lib/components/video-countdown/index.mjs +2 -0
  11. package/esm2022/lib/components/video-countdown/video-countdown.component.mjs +105 -0
  12. package/esm2022/lib/models/index.mjs +2 -0
  13. package/esm2022/lib/models/translations.mjs +3 -0
  14. package/esm2022/lib/services/index.mjs +3 -0
  15. package/esm2022/shared/index.mjs +5 -0
  16. package/esm2022/shared/lib/components/audio-animation/audio-animation.component.mjs +114 -0
  17. package/esm2022/shared/lib/components/audio-animation/index.mjs +2 -0
  18. package/esm2022/shared/lib/components/index.mjs +3 -0
  19. package/esm2022/shared/lib/components/vimeo-video/index.mjs +2 -0
  20. package/esm2022/shared/lib/components/vimeo-video/vimeo-video.component.mjs +101 -0
  21. package/esm2022/shared/lib/models/answer.mjs +2 -0
  22. package/esm2022/shared/lib/models/assessment.mjs +2 -0
  23. package/esm2022/shared/lib/models/environment.mjs +2 -0
  24. package/esm2022/shared/lib/models/index.mjs +9 -0
  25. package/esm2022/shared/lib/models/question-component.mjs +2 -0
  26. package/esm2022/shared/lib/models/question.mjs +2 -0
  27. package/esm2022/shared/lib/models/test.mjs +2 -0
  28. package/esm2022/shared/lib/models/translations.mjs +2 -0
  29. package/esm2022/shared/lib/models/window.mjs +2 -0
  30. package/esm2022/shared/lib/services/api/api.service.mjs +97 -0
  31. package/esm2022/shared/lib/services/api/mocked-api.service.mjs +131 -0
  32. package/esm2022/shared/lib/services/environment/environment.service.mjs +13 -0
  33. package/esm2022/shared/lib/services/index.mjs +10 -0
  34. package/esm2022/shared/lib/services/localization/languages.model.mjs +19 -0
  35. package/esm2022/shared/lib/services/localization/transloco-lazy-module-utils.mjs +27 -0
  36. package/esm2022/shared/lib/services/localization/transloco-testing.module.mjs +11 -0
  37. package/esm2022/shared/lib/services/media/media.service.mjs +129 -0
  38. package/esm2022/shared/lib/services/mixpanel/mixpanel.service.mjs +30 -0
  39. package/esm2022/shared/lib/services/theme/theme.service.mjs +24 -0
  40. package/esm2022/shared/test-mocks/assessment-test.mock.mjs +112 -0
  41. package/esm2022/shared/test-mocks/index.mjs +3 -0
  42. package/esm2022/shared/test-mocks/tgo-ui.mock.mjs +39 -0
  43. package/esm2022/testgorilla-tgo-immersive-test.mjs +5 -0
  44. package/fesm2022/testgorilla-tgo-immersive-test.mjs +466 -0
  45. package/fesm2022/testgorilla-tgo-immersive-test.mjs.map +1 -0
  46. package/lib/components/immersive-test/immersive-test.component.d.ts +53 -0
  47. package/{src/lib/components/index.ts → lib/components/index.d.ts} +0 -2
  48. package/lib/components/review-instructions-dialog/review-instructions-dialog.component.d.ts +24 -0
  49. package/lib/components/ringing-phone-animation/ringing-phone-animation.component.d.ts +13 -0
  50. package/lib/components/ringing-phone-animation/ringing-phone-animation.sound.d.ts +1 -0
  51. package/lib/components/video-countdown/video-countdown.component.d.ts +24 -0
  52. package/lib/models/index.d.ts +2 -0
  53. package/lib/models/translations.d.ts +1 -0
  54. package/lib/services/index.d.ts +1 -0
  55. package/package.json +18 -8
  56. package/shared/index.d.ts +4 -0
  57. package/shared/lib/components/audio-animation/audio-animation.component.d.ts +27 -0
  58. package/shared/lib/components/audio-animation/index.d.ts +1 -0
  59. package/shared/lib/components/index.d.ts +2 -0
  60. package/shared/lib/components/vimeo-video/index.d.ts +1 -0
  61. package/shared/lib/components/vimeo-video/vimeo-video.component.d.ts +24 -0
  62. package/shared/lib/models/answer.d.ts +17 -0
  63. package/shared/lib/models/assessment.d.ts +80 -0
  64. package/shared/lib/models/environment.d.ts +1 -0
  65. package/shared/lib/models/index.d.ts +8 -0
  66. package/shared/lib/models/question-component.d.ts +54 -0
  67. package/shared/lib/models/question.d.ts +102 -0
  68. package/shared/lib/models/test.d.ts +81 -0
  69. package/shared/lib/models/translations.d.ts +1 -0
  70. package/shared/lib/models/window.d.ts +6 -0
  71. package/shared/lib/services/api/api.service.d.ts +25 -0
  72. package/shared/lib/services/api/mocked-api.service.d.ts +35 -0
  73. package/shared/lib/services/environment/environment.service.d.ts +6 -0
  74. package/shared/lib/services/index.d.ts +9 -0
  75. package/shared/lib/services/localization/languages.model.d.ts +15 -0
  76. package/shared/lib/services/localization/transloco-lazy-module-utils.d.ts +11 -0
  77. package/shared/lib/services/localization/transloco-testing.module.d.ts +2 -0
  78. package/shared/lib/services/media/media.service.d.ts +29 -0
  79. package/shared/lib/services/mixpanel/mixpanel.service.d.ts +10 -0
  80. package/shared/lib/services/theme/theme.service.d.ts +8 -0
  81. package/shared/test-mocks/assessment-test.mock.d.ts +21 -0
  82. package/shared/test-mocks/index.d.ts +2 -0
  83. package/shared/test-mocks/tgo-ui.mock.d.ts +21 -0
  84. package/.eslintrc.json +0 -46
  85. package/jest.config.ts +0 -28
  86. package/ng-package.json +0 -16
  87. package/project.json +0 -37
  88. package/src/lib/components/immersive-test/immersive-test.component.html +0 -100
  89. package/src/lib/components/immersive-test/immersive-test.component.scss +0 -247
  90. package/src/lib/components/immersive-test/immersive-test.component.spec.ts +0 -581
  91. package/src/lib/components/immersive-test/immersive-test.component.ts +0 -279
  92. package/src/lib/components/review-instructions-dialog/review-instructions-dialog.component.html +0 -39
  93. package/src/lib/components/review-instructions-dialog/review-instructions-dialog.component.scss +0 -160
  94. package/src/lib/components/review-instructions-dialog/review-instructions-dialog.component.spec.ts +0 -81
  95. package/src/lib/components/review-instructions-dialog/review-instructions-dialog.component.ts +0 -80
  96. package/src/lib/components/ringing-phone-animation/ringing-phone-animation.component.html +0 -16
  97. package/src/lib/components/ringing-phone-animation/ringing-phone-animation.component.scss +0 -79
  98. package/src/lib/components/ringing-phone-animation/ringing-phone-animation.component.spec.ts +0 -95
  99. package/src/lib/components/ringing-phone-animation/ringing-phone-animation.component.ts +0 -54
  100. package/src/lib/components/ringing-phone-animation/ringing-phone-animation.sound.ts +0 -2
  101. package/src/lib/components/video-countdown/video-countdown.component.html +0 -10
  102. package/src/lib/components/video-countdown/video-countdown.component.scss +0 -16
  103. package/src/lib/components/video-countdown/video-countdown.component.spec.ts +0 -59
  104. package/src/lib/components/video-countdown/video-countdown.component.ts +0 -102
  105. package/src/lib/models/index.ts +0 -9
  106. package/src/lib/models/translations.ts +0 -3
  107. package/src/lib/services/index.ts +0 -7
  108. package/src/test-setup.ts +0 -22
  109. package/tsconfig.json +0 -17
  110. package/tsconfig.lib.json +0 -15
  111. package/tsconfig.lib.prod.json +0 -10
  112. package/tsconfig.spec.json +0 -13
  113. /package/{src/assets → assets}/i18n/en.json +0 -0
  114. /package/{src/index.ts → index.d.ts} +0 -0
  115. /package/{src/lib/components/review-instructions-dialog/index.ts → lib/components/review-instructions-dialog/index.d.ts} +0 -0
  116. /package/{src/lib/components/ringing-phone-animation/index.ts → lib/components/ringing-phone-animation/index.d.ts} +0 -0
  117. /package/{src/lib/components/video-countdown/index.ts → lib/components/video-countdown/index.d.ts} +0 -0
package/README.md CHANGED
@@ -32,6 +32,38 @@ import { ImmersiveTestComponent } from '@testgorilla/tgo-immersive-test';
32
32
  export class MyComponent {}
33
33
  ```
34
34
 
35
+ ## Assets (translations)
36
+
37
+ This package ships its translations under `assets/i18n`. Consumer apps must copy these assets into their build output so Transloco can load them at runtime.
38
+
39
+ - **Angular CLI / Nx**: add an `assets` entry pointing at the package:
40
+
41
+ ```json
42
+ {
43
+ "assets": [
44
+ "src/favicon.ico",
45
+ "src/assets",
46
+ {
47
+ "glob": "**/*",
48
+ "input": "node_modules/@testgorilla/tgo-immersive-test/assets",
49
+ "output": "assets/tgo-immersive-test"
50
+ }
51
+ ]
52
+ }
53
+ ```
54
+
55
+ If you develop inside this repo (consuming the workspace sources), also include the local path:
56
+
57
+ ```json
58
+ {
59
+ "glob": "**/*",
60
+ "input": "packages/tgo-immersive-test/src/assets",
61
+ "output": "assets/tgo-immersive-test"
62
+ }
63
+ ```
64
+
65
+ After adding the asset entries, rebuild/re-serve your app so `/assets/tgo-immersive-test/i18n/en.json` is available.
66
+
35
67
  ## API
36
68
 
37
69
  ### Inputs
@@ -0,0 +1,5 @@
1
+ export * from './lib/components';
2
+ export * from './lib/components/immersive-test/immersive-test.component';
3
+ export * from './lib/models';
4
+ export * from './lib/services';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy90Z28taW1tZXJzaXZlLXRlc3Qvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYywwREFBMEQsQ0FBQztBQUN6RSxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2ltbWVyc2l2ZS10ZXN0L2ltbWVyc2l2ZS10ZXN0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMnO1xuIl19
@@ -0,0 +1,257 @@
1
+ import { AudioAnimationComponent, VimeoVideoComponent, MediaService, ThemeService, TranslocoLazyModuleUtils, getAvailableLangs, } from '../../../shared/index.mjs';
2
+ import { VideoCountdownComponent } from '../video-countdown';
3
+ import { RingingPhoneAnimationComponent } from '../ringing-phone-animation';
4
+ import { ReviewInstructionsDialogComponent, } from '../review-instructions-dialog';
5
+ import { ROOT_TRANSLATIONS_SCOPE } from '../../models/translations';
6
+ import { catchError, firstValueFrom, Observable, takeUntil } from 'rxjs';
7
+ import { transition, style, animate, trigger } from '@angular/animations';
8
+ import { ElementRef, signal, ViewChild, Component, EventEmitter, Input, Output, inject, Inject, ChangeDetectorRef, } from '@angular/core';
9
+ import { Subject } from 'rxjs';
10
+ import { ButtonComponentModule, DialogService, IconComponentModule, } from '@testgorilla/tgo-ui';
11
+ import { CommonModule } from '@angular/common';
12
+ import { TRANSLOCO_SCOPE, TranslocoModule, TranslocoService, } from '@ngneat/transloco';
13
+ import * as i0 from "@angular/core";
14
+ import * as i1 from "@testgorilla/tgo-ui";
15
+ import * as i2 from "@angular/common";
16
+ export class ImmersiveTestComponent {
17
+ translationScope;
18
+ videoElement;
19
+ audioElement;
20
+ question;
21
+ test;
22
+ isFirstQuestion;
23
+ expirationObservable;
24
+ selectedMediaDevices;
25
+ mediaAccessChanged;
26
+ submissionStateChanged = new EventEmitter();
27
+ loadingStateChanged = new EventEmitter();
28
+ requestMediaAccess = new EventEmitter();
29
+ isAnswering = signal(false);
30
+ isCountingDown = signal(false);
31
+ isVideoPlaying = signal(false);
32
+ isQuestionPlaying = signal(false);
33
+ candidateVideoStreamReady = signal(false);
34
+ translations = {};
35
+ volume = signal(0);
36
+ audioUrl = signal('');
37
+ unsubscribe$ = new Subject();
38
+ mediaService = inject(MediaService);
39
+ translocoService = inject(TranslocoService);
40
+ dialog = inject(DialogService);
41
+ cdr = inject(ChangeDetectorRef);
42
+ themeService = inject(ThemeService);
43
+ companyColor = this.themeService.getCompanyColor();
44
+ get fileUrl() {
45
+ const match = this.question?.text.match(/(src|href)="([^"]*)"/);
46
+ return (match && match.pop()) || '';
47
+ }
48
+ get isVideo() {
49
+ return this.fileUrl.includes('player.vimeo.com');
50
+ }
51
+ constructor(translationScope) {
52
+ this.translationScope = translationScope;
53
+ }
54
+ ngOnInit() {
55
+ this.initExpirationSubscription();
56
+ this.initMediaAccessSubscription();
57
+ this.loadingStateChanged.emit(false);
58
+ this.mediaService.setSelectedMediaDevices(this.selectedMediaDevices);
59
+ void this.setTranslations();
60
+ void this.initVideoStream();
61
+ if (!this.isFirstQuestion) {
62
+ void this.startQuestion();
63
+ }
64
+ }
65
+ ngOnDestroy() {
66
+ this.unsubscribe$.next();
67
+ this.unsubscribe$.complete();
68
+ }
69
+ stopRecording() {
70
+ this.mediaService.stopRecording();
71
+ }
72
+ onVideoLoad() {
73
+ this.candidateVideoStreamReady.set(true);
74
+ }
75
+ async startQuestion() {
76
+ this.isQuestionPlaying.set(true);
77
+ if (!this.isVideo) {
78
+ await this.mediaService.playAudio(this.fileUrl);
79
+ this.startCountdown();
80
+ }
81
+ }
82
+ async startCountdown() {
83
+ if (!(await this.mediaService.checkPermission({ audio: true, video: false }))) {
84
+ this.requestMediaAccess.emit();
85
+ return;
86
+ }
87
+ this.isCountingDown.set(true);
88
+ this.isVideoPlaying.set(false);
89
+ }
90
+ startRecordAnswer() {
91
+ this.isCountingDown.set(false);
92
+ this.isAnswering.set(true);
93
+ this.mediaService
94
+ .recordAudio()
95
+ .pipe(takeUntil(this.unsubscribe$), catchError((error) => {
96
+ console.error('Error recording answer', error);
97
+ this.isAnswering.set(false);
98
+ this.startCountdown();
99
+ throw error;
100
+ }))
101
+ .subscribe((event) => {
102
+ if (event.type === 'complete') {
103
+ if (!this.test.is_preview_mode) {
104
+ this.submissionStateChanged.emit({ file: event.file, text: '' });
105
+ this.isAnswering.set(false);
106
+ this.loadingStateChanged.emit(true);
107
+ }
108
+ else {
109
+ const url = window.URL.createObjectURL(event.file);
110
+ this.audioUrl.set(url);
111
+ if (this.audioElement) {
112
+ this.audioElement.nativeElement.src = url;
113
+ this.audioElement.nativeElement.play();
114
+ }
115
+ }
116
+ }
117
+ else {
118
+ this.volume.set(event.value);
119
+ }
120
+ });
121
+ }
122
+ openReviewInstructionsDialog() {
123
+ const dialogData = {
124
+ backgroundInfoData: this.test.intro_text,
125
+ instructionsInfoData: this.test.test_instruction,
126
+ };
127
+ this.dialog.open(ReviewInstructionsDialogComponent, {
128
+ size: 'large',
129
+ extraData: dialogData,
130
+ });
131
+ }
132
+ async initVideoStream() {
133
+ try {
134
+ const stream = await this.mediaService.getMediaStream({
135
+ video: true,
136
+ audio: false,
137
+ });
138
+ if (this.videoElement) {
139
+ this.videoElement.nativeElement.srcObject = stream;
140
+ await this.videoElement?.nativeElement.play();
141
+ }
142
+ }
143
+ catch (error) {
144
+ console.error('Error initializing video stream:', error);
145
+ this.candidateVideoStreamReady.set(false);
146
+ }
147
+ }
148
+ async setTranslations() {
149
+ this.translations = await firstValueFrom(this.translocoService.selectTranslateObject(`TEST`, {}, this.translationScope));
150
+ this.cdr.markForCheck();
151
+ }
152
+ initExpirationSubscription() {
153
+ this.expirationObservable
154
+ ?.pipe(takeUntil(this.unsubscribe$))
155
+ .subscribe(() => {
156
+ if (!this.test?.is_preview_mode) {
157
+ if (this.mediaService.isRecording()) {
158
+ this.stopRecording();
159
+ }
160
+ else {
161
+ this.submissionStateChanged.emit({ file: undefined, text: '' });
162
+ }
163
+ }
164
+ });
165
+ }
166
+ initMediaAccessSubscription() {
167
+ this.mediaAccessChanged
168
+ ?.pipe(takeUntil(this.unsubscribe$))
169
+ .subscribe((selectedMediaDevices) => {
170
+ this.mediaService.setSelectedMediaDevices(selectedMediaDevices);
171
+ if (!this.isCountingDown()) {
172
+ void this.startCountdown();
173
+ }
174
+ void this.initVideoStream();
175
+ });
176
+ }
177
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ImmersiveTestComponent, deps: [{ token: TRANSLOCO_SCOPE }], target: i0.ɵɵFactoryTarget.Component });
178
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ImmersiveTestComponent, isStandalone: true, selector: "tgo-immersive-test", inputs: { question: "question", test: "test", isFirstQuestion: "isFirstQuestion", expirationObservable: "expirationObservable", selectedMediaDevices: "selectedMediaDevices", mediaAccessChanged: "mediaAccessChanged" }, outputs: { submissionStateChanged: "submissionStateChanged", loadingStateChanged: "loadingStateChanged", requestMediaAccess: "requestMediaAccess" }, providers: [
179
+ TranslocoLazyModuleUtils.getScopeProvider('tgo-immersive-test', getAvailableLangs(), ROOT_TRANSLATIONS_SCOPE, (lang) => {
180
+ // Fetch from app assets; demo app copies the library assets to
181
+ // /assets/tgo-immersive-test via project.json.
182
+ const url = new URL(`assets/tgo-immersive-test/i18n/${lang}.json`, document.baseURI).href;
183
+ return fetch(url).then((res) => res.json());
184
+ }),
185
+ DialogService,
186
+ ThemeService,
187
+ ], viewQueries: [{ propertyName: "videoElement", first: true, predicate: ["video"], descendants: true }, { propertyName: "audioElement", first: true, predicate: ["audio"], descendants: true }], ngImport: i0, template: "<div class=\"immersive-test\">\n <div class=\"test-container\">\n <div\n class=\"media-container\"\n [class.is-video-visible]=\"isQuestionPlaying() && !isAnswering()\"\n [class.is-playing]=\"isVideoPlaying()\"\n [class.is-answering]=\"isAnswering()\"\n >\n <div class=\"candidate-no-camera\" *ngIf=\"!candidateVideoStreamReady()\">\n <h3>&nbsp;</h3>\n <tgo-audio-animation\n *ngIf=\"isAnswering()\"\n [volume]=\"volume()\"\n [fakeData]=\"false\"\n ></tgo-audio-animation>\n <ui-icon name=\"User-profile-in-line\" color=\"white\" size=\"24\"></ui-icon>\n <h3 class=\"bold\">{{ translations['YOU'] }}</h3>\n </div>\n <div class=\"candidate-camera\" [hidden]=\"!candidateVideoStreamReady()\">\n <tgo-audio-animation\n *ngIf=\"isAnswering() && candidateVideoStreamReady()\"\n [volume]=\"volume()\"\n [fakeData]=\"false\"\n ></tgo-audio-animation>\n <video height #video id=\"video\" playsinline (loadedmetadata)=\"onVideoLoad()\"></video>\n <h3 class=\"bold\" *ngIf=\"candidateVideoStreamReady()\">\n {{ translations['YOU'] }}\n </h3>\n </div>\n <tgo-audio-animation *ngIf=\"isVideoPlaying()\" [fakeData]=\"true\"></tgo-audio-animation>\n <tgo-vimeo-video\n *ngIf=\"isVideo\"\n [isPlaying]=\"isQuestionPlaying()\"\n [videoUrl]=\"fileUrl\"\n (videoEnded)=\"startCountdown()\"\n (videoStarted)=\"isVideoPlaying.set(true)\"\n ></tgo-vimeo-video>\n <div class=\"audio-info\" *ngIf=\"isQuestionPlaying() && !isVideo\">\n <ui-icon name=\"User-profile-filled\" color=\"white\" size=\"80\"></ui-icon>\n </div>\n <div class=\"start\" *ngIf=\"isFirstQuestion && !isQuestionPlaying()\">\n <tgo-ringing-phone-animation [isRinging]=\"true\"></tgo-ringing-phone-animation>\n <ui-button\n [label]=\"translations['ANSWER']\"\n [class.white-btn]=\"test.is_preview_mode\"\n variant=\"primary\"\n [companyColor]=\"companyColor\"\n (click)=\"startQuestion()\"\n data-testid=\"immersive-test.start-question-btn\"\n ></ui-button>\n </div>\n <div class=\"overlay\" *ngIf=\"isAnswering() || isCountingDown()\" [@fadeInFadeOut]>\n <div class=\"answer\" *ngIf=\"!audioUrl() && isAnswering()\">\n <div>\n <h3 class=\"uppercase recording-started\">\n <span class=\"recording-dot\"></span>{{ translations['RECORDING_STARTED'] }}\n </h3>\n <h1 class=\"bold\">\n {{ translations['ANSWER_THE_QUESTION'] }}\n </h1>\n </div>\n <ui-button\n [label]=\"translations['ANSWER_COMPLETED']\"\n [class.white-btn]=\"test.is_preview_mode\"\n variant=\"primary\"\n [companyColor]=\"companyColor\"\n (click)=\"stopRecording()\"\n data-testid=\"immersive-test.stop-recording-btn\"\n ></ui-button>\n </div>\n <div class=\"answer\" *ngIf=\"isCountingDown()\">\n <div>\n <h1 class=\"bold\">\n {{ translations['GET_READY'] }}\n </h1>\n </div>\n <tgo-video-countdown (finish)=\"startRecordAnswer()\"></tgo-video-countdown>\n <div>&nbsp;</div>\n </div>\n <div class=\"preview\" [class.hidden]=\"!audioUrl()\" *ngIf=\"test.is_preview_mode\">\n <h4>{{ translations['AUDIO_READY'] }}</h4>\n <p>{{ translations['AUDIO_PREVIEW'] }}</p>\n <audio #audio controls></audio>\n </div>\n </div>\n </div>\n <div class=\"media-info\">\n <h3 class=\"bold\">{{ translations['CUSTOMER'] }}</h3>\n <ui-button\n [hidden]=\"!test.test_instruction && !test.intro_text\"\n class=\"review-button\"\n [label]=\"translations['REVIEW_INSTRUCTIONS']\"\n variant=\"secondary\"\n size=\"small\"\n (click)=\"openReviewInstructionsDialog()\"\n data-testid=\"immersive-test.review-instructions-btn\"\n ></ui-button>\n </div>\n </div>\n</div>\n", styles: [".bg-teal-60b{background:#1c443c}.bg-teal-30b{background:#31766a}.bg-teal-default{background:#46a997}.bg-teal-30w{background:#7ec3b6}.bg-teal-60w{background:#b5ddd5}.bg-teal-secondary{background:#cbd6cb}.bg-teal-90w{background:#ecf6f5}.bg-petrol-60b{background:#102930}.bg-petrol-30b{background:#1b4754}.bg-petrol-default{background:#276678}.bg-petrol-30w{background:#6894a0}.bg-petrol-60w{background:#a9c2c9}.bg-petrol-secondary{background:#c8d7de}.bg-petrol-90w{background:#e9f0f1}.bg-error-60b{background:#513131}.bg-error-30b{background:#8e5655}.bg-error-60w{background:#e3c3c6}.bg-error-secondary{background:#f0dad9}.bg-error-default{background:#cb7b7a}.bg-warning-secondary{background:#f0d6bb}.bg-warning-default{background:#cca45f}.bg-black{background:#000}.bg-dark{background:#888}.bg-medium{background:#e0e0e0}.bg-grey{background:#ededed}.bg-light{background:#f6f6f6}.bg-white{background:#fff}.bg-box-shadow{background:#00000014}.bg-navigation-subtitle{background:#528593}.bgc-teal-60b{background-color:#1c443c}.bgc-teal-30b{background-color:#31766a}.bgc-teal-default{background-color:#46a997}.bgc-teal-30w{background-color:#7ec3b6}.bgc-teal-60w{background-color:#b5ddd5}.bgc-teal-secondary{background-color:#cbd6cb}.bgc-teal-90w{background-color:#ecf6f5}.bgc-petrol-60b{background-color:#102930}.bgc-petrol-30b{background-color:#1b4754}.bgc-petrol-default{background-color:#276678}.bgc-petrol-30w{background-color:#6894a0}.bgc-petrol-60w{background-color:#a9c2c9}.bgc-petrol-secondary{background-color:#c8d7de}.bgc-petrol-90w{background-color:#e9f0f1}.bgc-error-60b{background-color:#513131}.bgc-error-30b{background-color:#8e5655}.bgc-error-60w{background-color:#e3c3c6}.bgc-error-secondary{background-color:#f0dad9}.bgc-error-default{background-color:#cb7b7a}.bgc-warning-secondary{background-color:#f0d6bb}.bgc-warning-default{background-color:#cca45f}.bgc-black{background-color:#000}.bgc-dark{background-color:#888}.bgc-medium{background-color:#e0e0e0}.bgc-grey{background-color:#ededed}.bgc-light{background-color:#f6f6f6}.bgc-white{background-color:#fff}.bgc-box-shadow{background-color:#00000014}.bgc-navigation-subtitle{background-color:#528593}.immersive-test{padding:0 64px;margin-top:40px}.immersive-test .media-info{width:100%;display:flex;justify-content:space-between;align-items:center;background:#242424a8;background-color:#242424;border-bottom-left-radius:10px;border-bottom-right-radius:10px;padding:13px 32px;color:#fff}.immersive-test .media-info ::ng-deep ui-button button{border-color:#fff;color:#fff}.immersive-test .test-container{min-width:360px;max-width:1312px;min-height:725px;height:min(725px,100%,max(100vw - 200px,100vh - 200px,200px));border-radius:10px;display:flex;flex-direction:column;justify-content:space-between;position:relative;background-color:#242424}.immersive-test .media-container{position:relative;color:#fff;flex-grow:1;border-top-left-radius:10px;border-top-right-radius:10px;aspect-ratio:16/9}.immersive-test .media-container .candidate-no-camera{position:absolute;width:200px;aspect-ratio:16/9;z-index:3;top:32px;left:32px;border-radius:10px;background-color:#1a47aa;display:flex;justify-content:space-between;flex-direction:column;padding:16px}.immersive-test .media-container .candidate-no-camera ui-icon{margin:auto}.immersive-test .media-container .candidate-camera{position:absolute;width:200px;top:32px;left:32px;z-index:3}.immersive-test .media-container .candidate-camera video{width:200px;border-radius:10px}.immersive-test .media-container .candidate-camera h3{position:absolute;bottom:16px;left:16px}.immersive-test .media-container tgo-audio-animation{position:absolute;top:32px;right:32px;z-index:1}.immersive-test .media-container tgo-vimeo-video{display:none;position:absolute;height:100%;width:100%}.immersive-test .media-container.is-video-visible tgo-vimeo-video{display:block}.immersive-test .media-container.is-playing{border:4px solid #0165FC;border-bottom-width:3px}.immersive-test .media-container.is-answering .candidate-camera tgo-audio-animation,.immersive-test .media-container.is-answering .candidate-no-camera tgo-audio-animation{position:absolute;top:16px;right:16px}.immersive-test .media-container.is-answering .candidate-camera video,.immersive-test .media-container.is-answering .candidate-no-camera{border:3px solid #0165FC;border-radius:10px}.immersive-test .media-container.is-answering tgo-vimeo-video{display:block}.immersive-test .media-container .start,.immersive-test .media-container .audio-info,.immersive-test .media-container .overlay,.immersive-test .media-container .answer{display:flex;justify-content:center;align-items:center;flex-direction:column;gap:40px;height:100%}.immersive-test .media-container .preview{height:100%;display:flex;align-items:center;flex-direction:column;justify-content:flex-end;padding:24px}.immersive-test .media-container .preview p{color:#d3d3d3;margin:8px 0}.immersive-test .media-container .preview audio{margin:16px 0}.immersive-test .media-container .preview.hidden{display:none}.immersive-test h3,.immersive-test h4{color:#fff}.immersive-test .bold{font-weight:700}.immersive-test ui-button.review-button ::ng-deep button{border:1px solid #ffffff}.immersive-test ui-button.white-btn ::ng-deep button{background-color:#fff;border-color:#fff;color:#000}.immersive-test ui-button.white-btn ::ng-deep button:hover{background-color:#666!important}.immersive-test .overlay{top:0;position:absolute;width:100%;height:100%;background-color:#242424e0;z-index:2;border-radius:10px}.immersive-test .overlay h1,.immersive-test .overlay h3{color:#fff;text-align:center}.immersive-test .overlay h3{margin-bottom:10px}.immersive-test tgo-radial-progress{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.immersive-test .uppercase{text-transform:uppercase}.immersive-test .recording-started{display:flex;align-items:center;justify-content:center;gap:10px}.immersive-test .recording-dot{background-color:#ff3003;display:inline-block;width:20px;height:20px;border-radius:50%}@media screen and (max-width: 600px){.immersive-test{padding:0 24px;margin-top:16px}}\n"], dependencies: [{ kind: "ngmodule", type: TranslocoModule }, { kind: "ngmodule", type: ButtonComponentModule }, { kind: "component", type: i1.ButtonComponent, selector: "ui-button", inputs: ["size", "variant", "label", "iconPosition", "justIcon", "iconName", "disabled", "loading", "fullWidth", "url", "urlTarget", "value", "tooltip", "isPremium", "type", "companyColor", "buttonBadgeConfig", "applicationTheme", "disabledScaleOnClick", "ariaLabel", "ariaRequired", "ariaLabelledby", "ariaDescribedby", "preventDefault", "hasBackground", "tooltipPosition", "role", "iconFilled"], outputs: ["buttonClickEvent", "buttonHoverEvent"] }, { kind: "ngmodule", type: IconComponentModule }, { kind: "component", type: i1.IconComponent, selector: "ui-icon", inputs: ["size", "cssClass", "name", "color", "filled", "toggleIconStyle", "applicationTheme", "useFullIconName"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: VimeoVideoComponent, selector: "tgo-vimeo-video", inputs: ["videoUrl", "isPlaying", "options"], outputs: ["videoEnded", "videoStarted"] }, { kind: "component", type: VideoCountdownComponent, selector: "tgo-video-countdown", inputs: ["startFrom", "endAt", "interval"], outputs: ["finish"] }, { kind: "component", type: RingingPhoneAnimationComponent, selector: "tgo-ringing-phone-animation", inputs: ["isRinging"] }, { kind: "component", type: AudioAnimationComponent, selector: "tgo-audio-animation", inputs: ["volume", "fakeData"] }], animations: [
188
+ trigger('fadeInFadeOut', [
189
+ transition(':enter', [
190
+ style({ opacity: 0 }),
191
+ animate('600ms', style({ opacity: 1 })),
192
+ ]),
193
+ transition(':leave', [animate('600ms', style({ opacity: 0 }))]),
194
+ ]),
195
+ ] });
196
+ }
197
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ImmersiveTestComponent, decorators: [{
198
+ type: Component,
199
+ args: [{ selector: 'tgo-immersive-test', animations: [
200
+ trigger('fadeInFadeOut', [
201
+ transition(':enter', [
202
+ style({ opacity: 0 }),
203
+ animate('600ms', style({ opacity: 1 })),
204
+ ]),
205
+ transition(':leave', [animate('600ms', style({ opacity: 0 }))]),
206
+ ]),
207
+ ], standalone: true, imports: [
208
+ TranslocoModule,
209
+ ButtonComponentModule,
210
+ IconComponentModule,
211
+ CommonModule,
212
+ VimeoVideoComponent,
213
+ VideoCountdownComponent,
214
+ RingingPhoneAnimationComponent,
215
+ AudioAnimationComponent,
216
+ ReviewInstructionsDialogComponent,
217
+ ], providers: [
218
+ TranslocoLazyModuleUtils.getScopeProvider('tgo-immersive-test', getAvailableLangs(), ROOT_TRANSLATIONS_SCOPE, (lang) => {
219
+ // Fetch from app assets; demo app copies the library assets to
220
+ // /assets/tgo-immersive-test via project.json.
221
+ const url = new URL(`assets/tgo-immersive-test/i18n/${lang}.json`, document.baseURI).href;
222
+ return fetch(url).then((res) => res.json());
223
+ }),
224
+ DialogService,
225
+ ThemeService,
226
+ ], template: "<div class=\"immersive-test\">\n <div class=\"test-container\">\n <div\n class=\"media-container\"\n [class.is-video-visible]=\"isQuestionPlaying() && !isAnswering()\"\n [class.is-playing]=\"isVideoPlaying()\"\n [class.is-answering]=\"isAnswering()\"\n >\n <div class=\"candidate-no-camera\" *ngIf=\"!candidateVideoStreamReady()\">\n <h3>&nbsp;</h3>\n <tgo-audio-animation\n *ngIf=\"isAnswering()\"\n [volume]=\"volume()\"\n [fakeData]=\"false\"\n ></tgo-audio-animation>\n <ui-icon name=\"User-profile-in-line\" color=\"white\" size=\"24\"></ui-icon>\n <h3 class=\"bold\">{{ translations['YOU'] }}</h3>\n </div>\n <div class=\"candidate-camera\" [hidden]=\"!candidateVideoStreamReady()\">\n <tgo-audio-animation\n *ngIf=\"isAnswering() && candidateVideoStreamReady()\"\n [volume]=\"volume()\"\n [fakeData]=\"false\"\n ></tgo-audio-animation>\n <video height #video id=\"video\" playsinline (loadedmetadata)=\"onVideoLoad()\"></video>\n <h3 class=\"bold\" *ngIf=\"candidateVideoStreamReady()\">\n {{ translations['YOU'] }}\n </h3>\n </div>\n <tgo-audio-animation *ngIf=\"isVideoPlaying()\" [fakeData]=\"true\"></tgo-audio-animation>\n <tgo-vimeo-video\n *ngIf=\"isVideo\"\n [isPlaying]=\"isQuestionPlaying()\"\n [videoUrl]=\"fileUrl\"\n (videoEnded)=\"startCountdown()\"\n (videoStarted)=\"isVideoPlaying.set(true)\"\n ></tgo-vimeo-video>\n <div class=\"audio-info\" *ngIf=\"isQuestionPlaying() && !isVideo\">\n <ui-icon name=\"User-profile-filled\" color=\"white\" size=\"80\"></ui-icon>\n </div>\n <div class=\"start\" *ngIf=\"isFirstQuestion && !isQuestionPlaying()\">\n <tgo-ringing-phone-animation [isRinging]=\"true\"></tgo-ringing-phone-animation>\n <ui-button\n [label]=\"translations['ANSWER']\"\n [class.white-btn]=\"test.is_preview_mode\"\n variant=\"primary\"\n [companyColor]=\"companyColor\"\n (click)=\"startQuestion()\"\n data-testid=\"immersive-test.start-question-btn\"\n ></ui-button>\n </div>\n <div class=\"overlay\" *ngIf=\"isAnswering() || isCountingDown()\" [@fadeInFadeOut]>\n <div class=\"answer\" *ngIf=\"!audioUrl() && isAnswering()\">\n <div>\n <h3 class=\"uppercase recording-started\">\n <span class=\"recording-dot\"></span>{{ translations['RECORDING_STARTED'] }}\n </h3>\n <h1 class=\"bold\">\n {{ translations['ANSWER_THE_QUESTION'] }}\n </h1>\n </div>\n <ui-button\n [label]=\"translations['ANSWER_COMPLETED']\"\n [class.white-btn]=\"test.is_preview_mode\"\n variant=\"primary\"\n [companyColor]=\"companyColor\"\n (click)=\"stopRecording()\"\n data-testid=\"immersive-test.stop-recording-btn\"\n ></ui-button>\n </div>\n <div class=\"answer\" *ngIf=\"isCountingDown()\">\n <div>\n <h1 class=\"bold\">\n {{ translations['GET_READY'] }}\n </h1>\n </div>\n <tgo-video-countdown (finish)=\"startRecordAnswer()\"></tgo-video-countdown>\n <div>&nbsp;</div>\n </div>\n <div class=\"preview\" [class.hidden]=\"!audioUrl()\" *ngIf=\"test.is_preview_mode\">\n <h4>{{ translations['AUDIO_READY'] }}</h4>\n <p>{{ translations['AUDIO_PREVIEW'] }}</p>\n <audio #audio controls></audio>\n </div>\n </div>\n </div>\n <div class=\"media-info\">\n <h3 class=\"bold\">{{ translations['CUSTOMER'] }}</h3>\n <ui-button\n [hidden]=\"!test.test_instruction && !test.intro_text\"\n class=\"review-button\"\n [label]=\"translations['REVIEW_INSTRUCTIONS']\"\n variant=\"secondary\"\n size=\"small\"\n (click)=\"openReviewInstructionsDialog()\"\n data-testid=\"immersive-test.review-instructions-btn\"\n ></ui-button>\n </div>\n </div>\n</div>\n", styles: [".bg-teal-60b{background:#1c443c}.bg-teal-30b{background:#31766a}.bg-teal-default{background:#46a997}.bg-teal-30w{background:#7ec3b6}.bg-teal-60w{background:#b5ddd5}.bg-teal-secondary{background:#cbd6cb}.bg-teal-90w{background:#ecf6f5}.bg-petrol-60b{background:#102930}.bg-petrol-30b{background:#1b4754}.bg-petrol-default{background:#276678}.bg-petrol-30w{background:#6894a0}.bg-petrol-60w{background:#a9c2c9}.bg-petrol-secondary{background:#c8d7de}.bg-petrol-90w{background:#e9f0f1}.bg-error-60b{background:#513131}.bg-error-30b{background:#8e5655}.bg-error-60w{background:#e3c3c6}.bg-error-secondary{background:#f0dad9}.bg-error-default{background:#cb7b7a}.bg-warning-secondary{background:#f0d6bb}.bg-warning-default{background:#cca45f}.bg-black{background:#000}.bg-dark{background:#888}.bg-medium{background:#e0e0e0}.bg-grey{background:#ededed}.bg-light{background:#f6f6f6}.bg-white{background:#fff}.bg-box-shadow{background:#00000014}.bg-navigation-subtitle{background:#528593}.bgc-teal-60b{background-color:#1c443c}.bgc-teal-30b{background-color:#31766a}.bgc-teal-default{background-color:#46a997}.bgc-teal-30w{background-color:#7ec3b6}.bgc-teal-60w{background-color:#b5ddd5}.bgc-teal-secondary{background-color:#cbd6cb}.bgc-teal-90w{background-color:#ecf6f5}.bgc-petrol-60b{background-color:#102930}.bgc-petrol-30b{background-color:#1b4754}.bgc-petrol-default{background-color:#276678}.bgc-petrol-30w{background-color:#6894a0}.bgc-petrol-60w{background-color:#a9c2c9}.bgc-petrol-secondary{background-color:#c8d7de}.bgc-petrol-90w{background-color:#e9f0f1}.bgc-error-60b{background-color:#513131}.bgc-error-30b{background-color:#8e5655}.bgc-error-60w{background-color:#e3c3c6}.bgc-error-secondary{background-color:#f0dad9}.bgc-error-default{background-color:#cb7b7a}.bgc-warning-secondary{background-color:#f0d6bb}.bgc-warning-default{background-color:#cca45f}.bgc-black{background-color:#000}.bgc-dark{background-color:#888}.bgc-medium{background-color:#e0e0e0}.bgc-grey{background-color:#ededed}.bgc-light{background-color:#f6f6f6}.bgc-white{background-color:#fff}.bgc-box-shadow{background-color:#00000014}.bgc-navigation-subtitle{background-color:#528593}.immersive-test{padding:0 64px;margin-top:40px}.immersive-test .media-info{width:100%;display:flex;justify-content:space-between;align-items:center;background:#242424a8;background-color:#242424;border-bottom-left-radius:10px;border-bottom-right-radius:10px;padding:13px 32px;color:#fff}.immersive-test .media-info ::ng-deep ui-button button{border-color:#fff;color:#fff}.immersive-test .test-container{min-width:360px;max-width:1312px;min-height:725px;height:min(725px,100%,max(100vw - 200px,100vh - 200px,200px));border-radius:10px;display:flex;flex-direction:column;justify-content:space-between;position:relative;background-color:#242424}.immersive-test .media-container{position:relative;color:#fff;flex-grow:1;border-top-left-radius:10px;border-top-right-radius:10px;aspect-ratio:16/9}.immersive-test .media-container .candidate-no-camera{position:absolute;width:200px;aspect-ratio:16/9;z-index:3;top:32px;left:32px;border-radius:10px;background-color:#1a47aa;display:flex;justify-content:space-between;flex-direction:column;padding:16px}.immersive-test .media-container .candidate-no-camera ui-icon{margin:auto}.immersive-test .media-container .candidate-camera{position:absolute;width:200px;top:32px;left:32px;z-index:3}.immersive-test .media-container .candidate-camera video{width:200px;border-radius:10px}.immersive-test .media-container .candidate-camera h3{position:absolute;bottom:16px;left:16px}.immersive-test .media-container tgo-audio-animation{position:absolute;top:32px;right:32px;z-index:1}.immersive-test .media-container tgo-vimeo-video{display:none;position:absolute;height:100%;width:100%}.immersive-test .media-container.is-video-visible tgo-vimeo-video{display:block}.immersive-test .media-container.is-playing{border:4px solid #0165FC;border-bottom-width:3px}.immersive-test .media-container.is-answering .candidate-camera tgo-audio-animation,.immersive-test .media-container.is-answering .candidate-no-camera tgo-audio-animation{position:absolute;top:16px;right:16px}.immersive-test .media-container.is-answering .candidate-camera video,.immersive-test .media-container.is-answering .candidate-no-camera{border:3px solid #0165FC;border-radius:10px}.immersive-test .media-container.is-answering tgo-vimeo-video{display:block}.immersive-test .media-container .start,.immersive-test .media-container .audio-info,.immersive-test .media-container .overlay,.immersive-test .media-container .answer{display:flex;justify-content:center;align-items:center;flex-direction:column;gap:40px;height:100%}.immersive-test .media-container .preview{height:100%;display:flex;align-items:center;flex-direction:column;justify-content:flex-end;padding:24px}.immersive-test .media-container .preview p{color:#d3d3d3;margin:8px 0}.immersive-test .media-container .preview audio{margin:16px 0}.immersive-test .media-container .preview.hidden{display:none}.immersive-test h3,.immersive-test h4{color:#fff}.immersive-test .bold{font-weight:700}.immersive-test ui-button.review-button ::ng-deep button{border:1px solid #ffffff}.immersive-test ui-button.white-btn ::ng-deep button{background-color:#fff;border-color:#fff;color:#000}.immersive-test ui-button.white-btn ::ng-deep button:hover{background-color:#666!important}.immersive-test .overlay{top:0;position:absolute;width:100%;height:100%;background-color:#242424e0;z-index:2;border-radius:10px}.immersive-test .overlay h1,.immersive-test .overlay h3{color:#fff;text-align:center}.immersive-test .overlay h3{margin-bottom:10px}.immersive-test tgo-radial-progress{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.immersive-test .uppercase{text-transform:uppercase}.immersive-test .recording-started{display:flex;align-items:center;justify-content:center;gap:10px}.immersive-test .recording-dot{background-color:#ff3003;display:inline-block;width:20px;height:20px;border-radius:50%}@media screen and (max-width: 600px){.immersive-test{padding:0 24px;margin-top:16px}}\n"] }]
227
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
228
+ type: Inject,
229
+ args: [TRANSLOCO_SCOPE]
230
+ }] }], propDecorators: { videoElement: [{
231
+ type: ViewChild,
232
+ args: ['video']
233
+ }], audioElement: [{
234
+ type: ViewChild,
235
+ args: ['audio']
236
+ }], question: [{
237
+ type: Input,
238
+ args: [{ required: true }]
239
+ }], test: [{
240
+ type: Input,
241
+ args: [{ required: true }]
242
+ }], isFirstQuestion: [{
243
+ type: Input
244
+ }], expirationObservable: [{
245
+ type: Input
246
+ }], selectedMediaDevices: [{
247
+ type: Input
248
+ }], mediaAccessChanged: [{
249
+ type: Input
250
+ }], submissionStateChanged: [{
251
+ type: Output
252
+ }], loadingStateChanged: [{
253
+ type: Output
254
+ }], requestMediaAccess: [{
255
+ type: Output
256
+ }] } });
257
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1tZXJzaXZlLXRlc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdGdvLWltbWVyc2l2ZS10ZXN0L3NyYy9saWIvY29tcG9uZW50cy9pbW1lcnNpdmUtdGVzdC9pbW1lcnNpdmUtdGVzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90Z28taW1tZXJzaXZlLXRlc3Qvc3JjL2xpYi9jb21wb25lbnRzL2ltbWVyc2l2ZS10ZXN0L2ltbWVyc2l2ZS10ZXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsbUJBQW1CLEVBTW5CLFlBQVksRUFDWixZQUFZLEVBQ1osd0JBQXdCLEVBQ3hCLGlCQUFpQixHQUNsQixNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzdELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVFLE9BQU8sRUFDTCxpQ0FBaUMsR0FFbEMsTUFBTSwrQkFBK0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRSxPQUFPLEVBQ0wsVUFBVSxFQUVWLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFFTixNQUFNLEVBQ04saUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixhQUFhLEVBQ2IsbUJBQW1CLEdBQ3BCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxlQUFlLEVBQ2YsZUFBZSxFQUVmLGdCQUFnQixHQUNqQixNQUFNLG1CQUFtQixDQUFDOzs7O0FBOEMzQixNQUFNLE9BQU8sc0JBQXNCO0lBOENFO0lBM0NmLFlBQVksQ0FBZ0M7SUFDNUMsWUFBWSxDQUFnQztJQUNyQyxRQUFRLENBQVk7SUFDcEIsSUFBSSxDQUFrQjtJQUN4QyxlQUFlLENBQVc7SUFDMUIsb0JBQW9CLENBQW9CO0lBQ3hDLG9CQUFvQixDQUF3QjtJQUM1QyxrQkFBa0IsQ0FBZ0Q7SUFFakUsc0JBQXNCLEdBQzlCLElBQUksWUFBWSxFQUEyQixDQUFDO0lBQ3BDLG1CQUFtQixHQUMzQixJQUFJLFlBQVksRUFBVyxDQUFDO0lBQ3BCLGtCQUFrQixHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO0lBRTVFLFdBQVcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsY0FBYyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixjQUFjLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyx5QkFBeUIsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUMsWUFBWSxHQUE4QixFQUFFLENBQUM7SUFDN0MsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixRQUFRLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRWQsWUFBWSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFDbkMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNwQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM1QyxNQUFNLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQy9CLEdBQUcsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNoQyxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRTVDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBRW5ELElBQUksT0FBTztRQUNULE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ2hFLE9BQU8sQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELFlBQ21DLGdCQUFnQztRQUFoQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWdCO0lBQ2hFLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsWUFBWSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3JFLEtBQUssSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzVCLEtBQUssSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDMUIsS0FBSyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhO1FBQ2pCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFakMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDeEIsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsY0FBYztRQUNsQixJQUNFLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUN6RSxDQUFDO1lBQ0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFDO1lBQy9CLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxZQUFZO2FBQ2QsV0FBVyxFQUFFO2FBQ2IsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzVCLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0JBQXdCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQ0g7YUFDQSxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuQixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUMvQixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ2pFLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUM1QixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN0QyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNuRCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDdkIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7d0JBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7d0JBQzFDLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUN6QyxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9CLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCw0QkFBNEI7UUFDMUIsTUFBTSxVQUFVLEdBQWlDO1lBQy9DLGtCQUFrQixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUN4QyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQjtTQUNqRCxDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUNBQWlDLEVBQUU7WUFDbEQsSUFBSSxFQUFFLE9BQU87WUFDYixTQUFTLEVBQUUsVUFBVTtTQUN0QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sS0FBSyxDQUFDLGVBQWU7UUFDM0IsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQztnQkFDcEQsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsS0FBSyxFQUFFLEtBQUs7YUFDYixDQUFDLENBQUM7WUFDSCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztnQkFDbkQsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNoRCxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsZUFBZTtRQUMzQixJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sY0FBYyxDQUN0QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMscUJBQXFCLENBQ3pDLE1BQU0sRUFDTixFQUFFLEVBQ0YsSUFBSSxDQUFDLGdCQUEwQixDQUNoQyxDQUNGLENBQUM7UUFDRixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTywwQkFBMEI7UUFDaEMsSUFBSSxDQUFDLG9CQUFvQjtZQUN2QixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ25DLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7b0JBQ3BDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDdkIsQ0FBQztxQkFBTSxDQUFDO29CQUNOLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNsRSxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLDJCQUEyQjtRQUNqQyxJQUFJLENBQUMsa0JBQWtCO1lBQ3JCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDbkMsU0FBUyxDQUFDLENBQUMsb0JBQW9CLEVBQUUsRUFBRTtZQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLHVCQUF1QixDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDO2dCQUMzQixLQUFLLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUM3QixDQUFDO1lBQ0QsS0FBSyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO3dHQTlMVSxzQkFBc0Isa0JBOEN2QixlQUFlOzRGQTlDZCxzQkFBc0IsZ2JBbkJ0QjtZQUNULHdCQUF3QixDQUFDLGdCQUFnQixDQUN2QyxvQkFBb0IsRUFDcEIsaUJBQWlCLEVBQUUsRUFDbkIsdUJBQXVCLEVBQ3ZCLENBQUMsSUFBWSxFQUFFLEVBQUU7Z0JBQ2YsK0RBQStEO2dCQUMvRCwrQ0FBK0M7Z0JBQy9DLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUNqQixrQ0FBa0MsSUFBSSxPQUFPLEVBQzdDLFFBQVEsQ0FBQyxPQUFPLENBQ2pCLENBQUMsSUFBSSxDQUFDO2dCQUNQLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDOUMsQ0FBQyxDQUNGO1lBQ0QsYUFBYTtZQUNiLFlBQVk7U0FDYix5TkM1Rkgsd2xJQW9HQSxpaE1EbkNJLGVBQWUsOEJBQ2YscUJBQXFCLHVpQkFDckIsbUJBQW1CLHFOQUNuQixZQUFZLG1JQUNaLG1CQUFtQixtSkFDbkIsdUJBQXVCLGlJQUN2Qiw4QkFBOEIsK0ZBQzlCLHVCQUF1QixrRkFsQmI7WUFDVixPQUFPLENBQUMsZUFBZSxFQUFFO2dCQUN2QixVQUFVLENBQUMsUUFBUSxFQUFFO29CQUNuQixLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQ3JCLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ3hDLENBQUM7Z0JBQ0YsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2hFLENBQUM7U0FDSDs7NEZBZ0NVLHNCQUFzQjtrQkE1Q2xDLFNBQVM7K0JBQ0Usb0JBQW9CLGNBR2xCO3dCQUNWLE9BQU8sQ0FBQyxlQUFlLEVBQUU7NEJBQ3ZCLFVBQVUsQ0FBQyxRQUFRLEVBQUU7Z0NBQ25CLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztnQ0FDckIsT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQzs2QkFDeEMsQ0FBQzs0QkFDRixVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7eUJBQ2hFLENBQUM7cUJBQ0gsY0FDVyxJQUFJLFdBQ1A7d0JBQ1AsZUFBZTt3QkFDZixxQkFBcUI7d0JBQ3JCLG1CQUFtQjt3QkFDbkIsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLHVCQUF1Qjt3QkFDdkIsOEJBQThCO3dCQUM5Qix1QkFBdUI7d0JBQ3ZCLGlDQUFpQztxQkFDbEMsYUFDVTt3QkFDVCx3QkFBd0IsQ0FBQyxnQkFBZ0IsQ0FDdkMsb0JBQW9CLEVBQ3BCLGlCQUFpQixFQUFFLEVBQ25CLHVCQUF1QixFQUN2QixDQUFDLElBQVksRUFBRSxFQUFFOzRCQUNmLCtEQUErRDs0QkFDL0QsK0NBQStDOzRCQUMvQyxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FDakIsa0NBQWtDLElBQUksT0FBTyxFQUM3QyxRQUFRLENBQUMsT0FBTyxDQUNqQixDQUFDLElBQUksQ0FBQzs0QkFDUCxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO3dCQUM5QyxDQUFDLENBQ0Y7d0JBQ0QsYUFBYTt3QkFDYixZQUFZO3FCQUNiOzswQkFnREUsTUFBTTsyQkFBQyxlQUFlO3lDQTNDTCxZQUFZO3NCQUEvQixTQUFTO3VCQUFDLE9BQU87Z0JBQ0UsWUFBWTtzQkFBL0IsU0FBUzt1QkFBQyxPQUFPO2dCQUNTLFFBQVE7c0JBQWxDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNFLElBQUk7c0JBQTlCLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNoQixlQUFlO3NCQUF2QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUVJLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFFRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBRUcsa0JBQWtCO3NCQUEzQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQXVkaW9BbmltYXRpb25Db21wb25lbnQsXG4gIFZpbWVvVmlkZW9Db21wb25lbnQsXG4gIFF1ZXN0aW9uLFxuICBUZXN0UmVzdWx0UmVhZCxcbiAgU2VsZWN0ZWRNZWRpYURldmljZXMsXG4gIElTdWJtaXNzaW9uU3RhdGUsXG4gIElRdWVzdGlvbkRhdGFDb250cmFjdCxcbiAgTWVkaWFTZXJ2aWNlLFxuICBUaGVtZVNlcnZpY2UsXG4gIFRyYW5zbG9jb0xhenlNb2R1bGVVdGlscyxcbiAgZ2V0QXZhaWxhYmxlTGFuZ3MsXG59IGZyb20gJ0B0ZXN0Z29yaWxsYS90Z28tdGVzdC1zaGFyZWQnO1xuaW1wb3J0IHsgVmlkZW9Db3VudGRvd25Db21wb25lbnQgfSBmcm9tICcuLi92aWRlby1jb3VudGRvd24nO1xuaW1wb3J0IHsgUmluZ2luZ1Bob25lQW5pbWF0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vcmluZ2luZy1waG9uZS1hbmltYXRpb24nO1xuaW1wb3J0IHtcbiAgUmV2aWV3SW5zdHJ1Y3Rpb25zRGlhbG9nQ29tcG9uZW50LFxuICBSZXZpZXdJbnN0cnVjdGlvbnNEaWFsb2dEYXRhLFxufSBmcm9tICcuLi9yZXZpZXctaW5zdHJ1Y3Rpb25zLWRpYWxvZyc7XG5pbXBvcnQgeyBST09UX1RSQU5TTEFUSU9OU19TQ09QRSB9IGZyb20gJy4uLy4uL21vZGVscy90cmFuc2xhdGlvbnMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmlyc3RWYWx1ZUZyb20sIE9ic2VydmFibGUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdHJhbnNpdGlvbiwgc3R5bGUsIGFuaW1hdGUsIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7XG4gIEVsZW1lbnRSZWYsXG4gIE9uRGVzdHJveSxcbiAgc2lnbmFsLFxuICBWaWV3Q2hpbGQsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBpbmplY3QsXG4gIE9uSW5pdCxcbiAgSW5qZWN0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBCdXR0b25Db21wb25lbnRNb2R1bGUsXG4gIERpYWxvZ1NlcnZpY2UsXG4gIEljb25Db21wb25lbnRNb2R1bGUsXG59IGZyb20gJ0B0ZXN0Z29yaWxsYS90Z28tdWknO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIFRSQU5TTE9DT19TQ09QRSxcbiAgVHJhbnNsb2NvTW9kdWxlLFxuICBUcmFuc2xvY29TY29wZSxcbiAgVHJhbnNsb2NvU2VydmljZSxcbn0gZnJvbSAnQG5nbmVhdC90cmFuc2xvY28nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0Z28taW1tZXJzaXZlLXRlc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vaW1tZXJzaXZlLXRlc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vaW1tZXJzaXZlLXRlc3QuY29tcG9uZW50LnNjc3MnLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcignZmFkZUluRmFkZU91dCcsIFtcbiAgICAgIHRyYW5zaXRpb24oJzplbnRlcicsIFtcbiAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwIH0pLFxuICAgICAgICBhbmltYXRlKCc2MDBtcycsIHN0eWxlKHsgb3BhY2l0eTogMSB9KSksXG4gICAgICBdKSxcbiAgICAgIHRyYW5zaXRpb24oJzpsZWF2ZScsIFthbmltYXRlKCc2MDBtcycsIHN0eWxlKHsgb3BhY2l0eTogMCB9KSldKSxcbiAgICBdKSxcbiAgXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIFRyYW5zbG9jb01vZHVsZSxcbiAgICBCdXR0b25Db21wb25lbnRNb2R1bGUsXG4gICAgSWNvbkNvbXBvbmVudE1vZHVsZSxcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgVmltZW9WaWRlb0NvbXBvbmVudCxcbiAgICBWaWRlb0NvdW50ZG93bkNvbXBvbmVudCxcbiAgICBSaW5naW5nUGhvbmVBbmltYXRpb25Db21wb25lbnQsXG4gICAgQXVkaW9BbmltYXRpb25Db21wb25lbnQsXG4gICAgUmV2aWV3SW5zdHJ1Y3Rpb25zRGlhbG9nQ29tcG9uZW50LFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICBUcmFuc2xvY29MYXp5TW9kdWxlVXRpbHMuZ2V0U2NvcGVQcm92aWRlcihcbiAgICAgICd0Z28taW1tZXJzaXZlLXRlc3QnLFxuICAgICAgZ2V0QXZhaWxhYmxlTGFuZ3MoKSxcbiAgICAgIFJPT1RfVFJBTlNMQVRJT05TX1NDT1BFLFxuICAgICAgKGxhbmc6IHN0cmluZykgPT4ge1xuICAgICAgICAvLyBGZXRjaCBmcm9tIGFwcCBhc3NldHM7IGRlbW8gYXBwIGNvcGllcyB0aGUgbGlicmFyeSBhc3NldHMgdG9cbiAgICAgICAgLy8gL2Fzc2V0cy90Z28taW1tZXJzaXZlLXRlc3QgdmlhIHByb2plY3QuanNvbi5cbiAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChcbiAgICAgICAgICBgYXNzZXRzL3Rnby1pbW1lcnNpdmUtdGVzdC9pMThuLyR7bGFuZ30uanNvbmAsXG4gICAgICAgICAgZG9jdW1lbnQuYmFzZVVSSVxuICAgICAgICApLmhyZWY7XG4gICAgICAgIHJldHVybiBmZXRjaCh1cmwpLnRoZW4oKHJlcykgPT4gcmVzLmpzb24oKSk7XG4gICAgICB9XG4gICAgKSxcbiAgICBEaWFsb2dTZXJ2aWNlLFxuICAgIFRoZW1lU2VydmljZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgSW1tZXJzaXZlVGVzdENvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBJUXVlc3Rpb25EYXRhQ29udHJhY3RcbntcbiAgQFZpZXdDaGlsZCgndmlkZW8nKSB2aWRlb0VsZW1lbnQ/OiBFbGVtZW50UmVmPEhUTUxWaWRlb0VsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdhdWRpbycpIGF1ZGlvRWxlbWVudD86IEVsZW1lbnRSZWY8SFRNTEF1ZGlvRWxlbWVudD47XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHF1ZXN0aW9uITogUXVlc3Rpb247XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHRlc3QhOiBUZXN0UmVzdWx0UmVhZDtcbiAgQElucHV0KCkgaXNGaXJzdFF1ZXN0aW9uPzogYm9vbGVhbjtcbiAgQElucHV0KCkgZXhwaXJhdGlvbk9ic2VydmFibGU/OiBPYnNlcnZhYmxlPHZvaWQ+O1xuICBASW5wdXQoKSBzZWxlY3RlZE1lZGlhRGV2aWNlcz86IFNlbGVjdGVkTWVkaWFEZXZpY2VzO1xuICBASW5wdXQoKSBtZWRpYUFjY2Vzc0NoYW5nZWQ/OiBPYnNlcnZhYmxlPFNlbGVjdGVkTWVkaWFEZXZpY2VzPiB8IHVuZGVmaW5lZDtcblxuICBAT3V0cHV0KCkgc3VibWlzc2lvblN0YXRlQ2hhbmdlZCA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxJU3VibWlzc2lvblN0YXRlIHwgbnVsbD4oKTtcbiAgQE91dHB1dCgpIGxvYWRpbmdTdGF0ZUNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgcmVxdWVzdE1lZGlhQWNjZXNzOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgaXNBbnN3ZXJpbmcgPSBzaWduYWwoZmFsc2UpO1xuICBpc0NvdW50aW5nRG93biA9IHNpZ25hbChmYWxzZSk7XG4gIGlzVmlkZW9QbGF5aW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgaXNRdWVzdGlvblBsYXlpbmcgPSBzaWduYWwoZmFsc2UpO1xuICBjYW5kaWRhdGVWaWRlb1N0cmVhbVJlYWR5ID0gc2lnbmFsKGZhbHNlKTtcbiAgdHJhbnNsYXRpb25zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gIHZvbHVtZSA9IHNpZ25hbCgwKTtcbiAgYXVkaW9VcmwgPSBzaWduYWwoJycpO1xuXG4gIHByaXZhdGUgdW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBtZWRpYVNlcnZpY2UgPSBpbmplY3QoTWVkaWFTZXJ2aWNlKTtcbiAgcHJpdmF0ZSB0cmFuc2xvY29TZXJ2aWNlID0gaW5qZWN0KFRyYW5zbG9jb1NlcnZpY2UpO1xuICBwcml2YXRlIGRpYWxvZyA9IGluamVjdChEaWFsb2dTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICBwcml2YXRlIHRoZW1lU2VydmljZSA9IGluamVjdChUaGVtZVNlcnZpY2UpO1xuXG4gIGNvbXBhbnlDb2xvciA9IHRoaXMudGhlbWVTZXJ2aWNlLmdldENvbXBhbnlDb2xvcigpO1xuXG4gIGdldCBmaWxlVXJsKCk6IHN0cmluZyB7XG4gICAgY29uc3QgbWF0Y2ggPSB0aGlzLnF1ZXN0aW9uPy50ZXh0Lm1hdGNoKC8oc3JjfGhyZWYpPVwiKFteXCJdKilcIi8pO1xuICAgIHJldHVybiAobWF0Y2ggJiYgbWF0Y2gucG9wKCkpIHx8ICcnO1xuICB9XG5cbiAgZ2V0IGlzVmlkZW8oKSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsZVVybC5pbmNsdWRlcygncGxheWVyLnZpbWVvLmNvbScpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChUUkFOU0xPQ09fU0NPUEUpIHByaXZhdGUgdHJhbnNsYXRpb25TY29wZTogVHJhbnNsb2NvU2NvcGVcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdEV4cGlyYXRpb25TdWJzY3JpcHRpb24oKTtcbiAgICB0aGlzLmluaXRNZWRpYUFjY2Vzc1N1YnNjcmlwdGlvbigpO1xuICAgIHRoaXMubG9hZGluZ1N0YXRlQ2hhbmdlZC5lbWl0KGZhbHNlKTtcbiAgICB0aGlzLm1lZGlhU2VydmljZS5zZXRTZWxlY3RlZE1lZGlhRGV2aWNlcyh0aGlzLnNlbGVjdGVkTWVkaWFEZXZpY2VzKTtcbiAgICB2b2lkIHRoaXMuc2V0VHJhbnNsYXRpb25zKCk7XG4gICAgdm9pZCB0aGlzLmluaXRWaWRlb1N0cmVhbSgpO1xuICAgIGlmICghdGhpcy5pc0ZpcnN0UXVlc3Rpb24pIHtcbiAgICAgIHZvaWQgdGhpcy5zdGFydFF1ZXN0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBzdG9wUmVjb3JkaW5nKCkge1xuICAgIHRoaXMubWVkaWFTZXJ2aWNlLnN0b3BSZWNvcmRpbmcoKTtcbiAgfVxuXG4gIG9uVmlkZW9Mb2FkKCkge1xuICAgIHRoaXMuY2FuZGlkYXRlVmlkZW9TdHJlYW1SZWFkeS5zZXQodHJ1ZSk7XG4gIH1cblxuICBhc3luYyBzdGFydFF1ZXN0aW9uKCkge1xuICAgIHRoaXMuaXNRdWVzdGlvblBsYXlpbmcuc2V0KHRydWUpO1xuXG4gICAgaWYgKCF0aGlzLmlzVmlkZW8pIHtcbiAgICAgIGF3YWl0IHRoaXMubWVkaWFTZXJ2aWNlLnBsYXlBdWRpbyh0aGlzLmZpbGVVcmwpO1xuICAgICAgdGhpcy5zdGFydENvdW50ZG93bigpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0Q291bnRkb3duKCkge1xuICAgIGlmIChcbiAgICAgICEoYXdhaXQgdGhpcy5tZWRpYVNlcnZpY2UuY2hlY2tQZXJtaXNzaW9uKHsgYXVkaW86IHRydWUsIHZpZGVvOiBmYWxzZSB9KSlcbiAgICApIHtcbiAgICAgIHRoaXMucmVxdWVzdE1lZGlhQWNjZXNzLmVtaXQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pc0NvdW50aW5nRG93bi5zZXQodHJ1ZSk7XG4gICAgdGhpcy5pc1ZpZGVvUGxheWluZy5zZXQoZmFsc2UpO1xuICB9XG5cbiAgc3RhcnRSZWNvcmRBbnN3ZXIoKSB7XG4gICAgdGhpcy5pc0NvdW50aW5nRG93bi5zZXQoZmFsc2UpO1xuICAgIHRoaXMuaXNBbnN3ZXJpbmcuc2V0KHRydWUpO1xuICAgIHRoaXMubWVkaWFTZXJ2aWNlXG4gICAgICAucmVjb3JkQXVkaW8oKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcmVjb3JkaW5nIGFuc3dlcicsIGVycm9yKTtcbiAgICAgICAgICB0aGlzLmlzQW5zd2VyaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgdGhpcy5zdGFydENvdW50ZG93bigpO1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICdjb21wbGV0ZScpIHtcbiAgICAgICAgICBpZiAoIXRoaXMudGVzdC5pc19wcmV2aWV3X21vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuc3VibWlzc2lvblN0YXRlQ2hhbmdlZC5lbWl0KHsgZmlsZTogZXZlbnQuZmlsZSwgdGV4dDogJycgfSk7XG4gICAgICAgICAgICB0aGlzLmlzQW5zd2VyaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZUNoYW5nZWQuZW1pdCh0cnVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoZXZlbnQuZmlsZSk7XG4gICAgICAgICAgICB0aGlzLmF1ZGlvVXJsLnNldCh1cmwpO1xuICAgICAgICAgICAgaWYgKHRoaXMuYXVkaW9FbGVtZW50KSB7XG4gICAgICAgICAgICAgIHRoaXMuYXVkaW9FbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc3JjID0gdXJsO1xuICAgICAgICAgICAgICB0aGlzLmF1ZGlvRWxlbWVudC5uYXRpdmVFbGVtZW50LnBsYXkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52b2x1bWUuc2V0KGV2ZW50LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBvcGVuUmV2aWV3SW5zdHJ1Y3Rpb25zRGlhbG9nKCkge1xuICAgIGNvbnN0IGRpYWxvZ0RhdGE6IFJldmlld0luc3RydWN0aW9uc0RpYWxvZ0RhdGEgPSB7XG4gICAgICBiYWNrZ3JvdW5kSW5mb0RhdGE6IHRoaXMudGVzdC5pbnRyb190ZXh0LFxuICAgICAgaW5zdHJ1Y3Rpb25zSW5mb0RhdGE6IHRoaXMudGVzdC50ZXN0X2luc3RydWN0aW9uLFxuICAgIH07XG4gICAgdGhpcy5kaWFsb2cub3BlbihSZXZpZXdJbnN0cnVjdGlvbnNEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIHNpemU6ICdsYXJnZScsXG4gICAgICBleHRyYURhdGE6IGRpYWxvZ0RhdGEsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGluaXRWaWRlb1N0cmVhbSgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RyZWFtID0gYXdhaXQgdGhpcy5tZWRpYVNlcnZpY2UuZ2V0TWVkaWFTdHJlYW0oe1xuICAgICAgICB2aWRlbzogdHJ1ZSxcbiAgICAgICAgYXVkaW86IGZhbHNlLFxuICAgICAgfSk7XG4gICAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQpIHtcbiAgICAgICAgdGhpcy52aWRlb0VsZW1lbnQubmF0aXZlRWxlbWVudC5zcmNPYmplY3QgPSBzdHJlYW07XG4gICAgICAgIGF3YWl0IHRoaXMudmlkZW9FbGVtZW50Py5uYXRpdmVFbGVtZW50LnBsYXkoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW5pdGlhbGl6aW5nIHZpZGVvIHN0cmVhbTonLCBlcnJvcik7XG4gICAgICB0aGlzLmNhbmRpZGF0ZVZpZGVvU3RyZWFtUmVhZHkuc2V0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNldFRyYW5zbGF0aW9ucygpIHtcbiAgICB0aGlzLnRyYW5zbGF0aW9ucyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgdGhpcy50cmFuc2xvY29TZXJ2aWNlLnNlbGVjdFRyYW5zbGF0ZU9iamVjdChcbiAgICAgICAgYFRFU1RgLFxuICAgICAgICB7fSxcbiAgICAgICAgdGhpcy50cmFuc2xhdGlvblNjb3BlIGFzIHN0cmluZ1xuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRFeHBpcmF0aW9uU3Vic2NyaXB0aW9uKCkge1xuICAgIHRoaXMuZXhwaXJhdGlvbk9ic2VydmFibGVcbiAgICAgID8ucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy50ZXN0Py5pc19wcmV2aWV3X21vZGUpIHtcbiAgICAgICAgICBpZiAodGhpcy5tZWRpYVNlcnZpY2UuaXNSZWNvcmRpbmcoKSkge1xuICAgICAgICAgICAgdGhpcy5zdG9wUmVjb3JkaW5nKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3VibWlzc2lvblN0YXRlQ2hhbmdlZC5lbWl0KHsgZmlsZTogdW5kZWZpbmVkLCB0ZXh0OiAnJyB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0TWVkaWFBY2Nlc3NTdWJzY3JpcHRpb24oKSB7XG4gICAgdGhpcy5tZWRpYUFjY2Vzc0NoYW5nZWRcbiAgICAgID8ucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKVxuICAgICAgLnN1YnNjcmliZSgoc2VsZWN0ZWRNZWRpYURldmljZXMpID0+IHtcbiAgICAgICAgdGhpcy5tZWRpYVNlcnZpY2Uuc2V0U2VsZWN0ZWRNZWRpYURldmljZXMoc2VsZWN0ZWRNZWRpYURldmljZXMpO1xuICAgICAgICBpZiAoIXRoaXMuaXNDb3VudGluZ0Rvd24oKSkge1xuICAgICAgICAgIHZvaWQgdGhpcy5zdGFydENvdW50ZG93bigpO1xuICAgICAgICB9XG4gICAgICAgIHZvaWQgdGhpcy5pbml0VmlkZW9TdHJlYW0oKTtcbiAgICAgIH0pO1xuICB9XG59XG5cbiIsIjxkaXYgY2xhc3M9XCJpbW1lcnNpdmUtdGVzdFwiPlxuICA8ZGl2IGNsYXNzPVwidGVzdC1jb250YWluZXJcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cIm1lZGlhLWNvbnRhaW5lclwiXG4gICAgICBbY2xhc3MuaXMtdmlkZW8tdmlzaWJsZV09XCJpc1F1ZXN0aW9uUGxheWluZygpICYmICFpc0Fuc3dlcmluZygpXCJcbiAgICAgIFtjbGFzcy5pcy1wbGF5aW5nXT1cImlzVmlkZW9QbGF5aW5nKClcIlxuICAgICAgW2NsYXNzLmlzLWFuc3dlcmluZ109XCJpc0Fuc3dlcmluZygpXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FuZGlkYXRlLW5vLWNhbWVyYVwiICpuZ0lmPVwiIWNhbmRpZGF0ZVZpZGVvU3RyZWFtUmVhZHkoKVwiPlxuICAgICAgICA8aDM+Jm5ic3A7PC9oMz5cbiAgICAgICAgPHRnby1hdWRpby1hbmltYXRpb25cbiAgICAgICAgICAqbmdJZj1cImlzQW5zd2VyaW5nKClcIlxuICAgICAgICAgIFt2b2x1bWVdPVwidm9sdW1lKClcIlxuICAgICAgICAgIFtmYWtlRGF0YV09XCJmYWxzZVwiXG4gICAgICAgID48L3Rnby1hdWRpby1hbmltYXRpb24+XG4gICAgICAgIDx1aS1pY29uIG5hbWU9XCJVc2VyLXByb2ZpbGUtaW4tbGluZVwiIGNvbG9yPVwid2hpdGVcIiBzaXplPVwiMjRcIj48L3VpLWljb24+XG4gICAgICAgIDxoMyBjbGFzcz1cImJvbGRcIj57eyB0cmFuc2xhdGlvbnNbJ1lPVSddIH19PC9oMz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNhbmRpZGF0ZS1jYW1lcmFcIiBbaGlkZGVuXT1cIiFjYW5kaWRhdGVWaWRlb1N0cmVhbVJlYWR5KClcIj5cbiAgICAgICAgPHRnby1hdWRpby1hbmltYXRpb25cbiAgICAgICAgICAqbmdJZj1cImlzQW5zd2VyaW5nKCkgJiYgY2FuZGlkYXRlVmlkZW9TdHJlYW1SZWFkeSgpXCJcbiAgICAgICAgICBbdm9sdW1lXT1cInZvbHVtZSgpXCJcbiAgICAgICAgICBbZmFrZURhdGFdPVwiZmFsc2VcIlxuICAgICAgICA+PC90Z28tYXVkaW8tYW5pbWF0aW9uPlxuICAgICAgICA8dmlkZW8gaGVpZ2h0ICN2aWRlbyBpZD1cInZpZGVvXCIgcGxheXNpbmxpbmUgKGxvYWRlZG1ldGFkYXRhKT1cIm9uVmlkZW9Mb2FkKClcIj48L3ZpZGVvPlxuICAgICAgICA8aDMgY2xhc3M9XCJib2xkXCIgKm5nSWY9XCJjYW5kaWRhdGVWaWRlb1N0cmVhbVJlYWR5KClcIj5cbiAgICAgICAgICB7eyB0cmFuc2xhdGlvbnNbJ1lPVSddIH19XG4gICAgICAgIDwvaDM+XG4gICAgICA8L2Rpdj5cbiAgICAgIDx0Z28tYXVkaW8tYW5pbWF0aW9uICpuZ0lmPVwiaXNWaWRlb1BsYXlpbmcoKVwiIFtmYWtlRGF0YV09XCJ0cnVlXCI+PC90Z28tYXVkaW8tYW5pbWF0aW9uPlxuICAgICAgPHRnby12aW1lby12aWRlb1xuICAgICAgICAqbmdJZj1cImlzVmlkZW9cIlxuICAgICAgICBbaXNQbGF5aW5nXT1cImlzUXVlc3Rpb25QbGF5aW5nKClcIlxuICAgICAgICBbdmlkZW9VcmxdPVwiZmlsZVVybFwiXG4gICAgICAgICh2aWRlb0VuZGVkKT1cInN0YXJ0Q291bnRkb3duKClcIlxuICAgICAgICAodmlkZW9TdGFydGVkKT1cImlzVmlkZW9QbGF5aW5nLnNldCh0cnVlKVwiXG4gICAgICA+PC90Z28tdmltZW8tdmlkZW8+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXVkaW8taW5mb1wiICpuZ0lmPVwiaXNRdWVzdGlvblBsYXlpbmcoKSAmJiAhaXNWaWRlb1wiPlxuICAgICAgICA8dWktaWNvbiBuYW1lPVwiVXNlci1wcm9maWxlLWZpbGxlZFwiIGNvbG9yPVwid2hpdGVcIiBzaXplPVwiODBcIj48L3VpLWljb24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdGFydFwiICpuZ0lmPVwiaXNGaXJzdFF1ZXN0aW9uICYmICFpc1F1ZXN0aW9uUGxheWluZygpXCI+XG4gICAgICAgIDx0Z28tcmluZ2luZy1waG9uZS1hbmltYXRpb24gW2lzUmluZ2luZ109XCJ0cnVlXCI+PC90Z28tcmluZ2luZy1waG9uZS1hbmltYXRpb24+XG4gICAgICAgIDx1aS1idXR0b25cbiAgICAgICAgICBbbGFiZWxdPVwidHJhbnNsYXRpb25zWydBTlNXRVInXVwiXG4gICAgICAgICAgW2NsYXNzLndoaXRlLWJ0bl09XCJ0ZXN0LmlzX3ByZXZpZXdfbW9kZVwiXG4gICAgICAgICAgdmFyaWFudD1cInByaW1hcnlcIlxuICAgICAgICAgIFtjb21wYW55Q29sb3JdPVwiY29tcGFueUNvbG9yXCJcbiAgICAgICAgICAoY2xpY2spPVwic3RhcnRRdWVzdGlvbigpXCJcbiAgICAgICAgICBkYXRhLXRlc3RpZD1cImltbWVyc2l2ZS10ZXN0LnN0YXJ0LXF1ZXN0aW9uLWJ0blwiXG4gICAgICAgID48L3VpLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIiAqbmdJZj1cImlzQW5zd2VyaW5nKCkgfHwgaXNDb3VudGluZ0Rvd24oKVwiIFtAZmFkZUluRmFkZU91dF0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhbnN3ZXJcIiAqbmdJZj1cIiFhdWRpb1VybCgpICYmIGlzQW5zd2VyaW5nKClcIj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGgzIGNsYXNzPVwidXBwZXJjYXNlIHJlY29yZGluZy1zdGFydGVkXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVjb3JkaW5nLWRvdFwiPjwvc3Bhbj57eyB0cmFuc2xhdGlvbnNbJ1JFQ09SRElOR19TVEFSVEVEJ10gfX1cbiAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgICA8aDEgY2xhc3M9XCJib2xkXCI+XG4gICAgICAgICAgICAgIHt7IHRyYW5zbGF0aW9uc1snQU5TV0VSX1RIRV9RVUVTVElPTiddIH19XG4gICAgICAgICAgICA8L2gxPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDx1aS1idXR0b25cbiAgICAgICAgICAgIFtsYWJlbF09XCJ0cmFuc2xhdGlvbnNbJ0FOU1dFUl9DT01QTEVURUQnXVwiXG4gICAgICAgICAgICBbY2xhc3Mud2hpdGUtYnRuXT1cInRlc3QuaXNfcHJldmlld19tb2RlXCJcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgIFtjb21wYW55Q29sb3JdPVwiY29tcGFueUNvbG9yXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzdG9wUmVjb3JkaW5nKClcIlxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJpbW1lcnNpdmUtdGVzdC5zdG9wLXJlY29yZGluZy1idG5cIlxuICAgICAgICAgID48L3VpLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhbnN3ZXJcIiAqbmdJZj1cImlzQ291bnRpbmdEb3duKClcIj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGgxIGNsYXNzPVwiYm9sZFwiPlxuICAgICAgICAgICAgICB7eyB0cmFuc2xhdGlvbnNbJ0dFVF9SRUFEWSddIH19XG4gICAgICAgICAgICA8L2gxPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDx0Z28tdmlkZW8tY291bnRkb3duIChmaW5pc2gpPVwic3RhcnRSZWNvcmRBbnN3ZXIoKVwiPjwvdGdvLXZpZGVvLWNvdW50ZG93bj5cbiAgICAgICAgICA8ZGl2PiZuYnNwOzwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXdcIiBbY2xhc3MuaGlkZGVuXT1cIiFhdWRpb1VybCgpXCIgKm5nSWY9XCJ0ZXN0LmlzX3ByZXZpZXdfbW9kZVwiPlxuICAgICAgICAgIDxoND57eyB0cmFuc2xhdGlvbnNbJ0FVRElPX1JFQURZJ10gfX08L2g0PlxuICAgICAgICAgIDxwPnt7IHRyYW5zbGF0aW9uc1snQVVESU9fUFJFVklFVyddIH19PC9wPlxuICAgICAgICAgIDxhdWRpbyAjYXVkaW8gY29udHJvbHM+PC9hdWRpbz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibWVkaWEtaW5mb1wiPlxuICAgICAgPGgzIGNsYXNzPVwiYm9sZFwiPnt7IHRyYW5zbGF0aW9uc1snQ1VTVE9NRVInXSB9fTwvaDM+XG4gICAgICA8dWktYnV0dG9uXG4gICAgICAgIFtoaWRkZW5dPVwiIXRlc3QudGVzdF9pbnN0cnVjdGlvbiAmJiAhdGVzdC5pbnRyb190ZXh0XCJcbiAgICAgICAgY2xhc3M9XCJyZXZpZXctYnV0dG9uXCJcbiAgICAgICAgW2xhYmVsXT1cInRyYW5zbGF0aW9uc1snUkVWSUVXX0lOU1RSVUNUSU9OUyddXCJcbiAgICAgICAgdmFyaWFudD1cInNlY29uZGFyeVwiXG4gICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgIChjbGljayk9XCJvcGVuUmV2aWV3SW5zdHJ1Y3Rpb25zRGlhbG9nKClcIlxuICAgICAgICBkYXRhLXRlc3RpZD1cImltbWVyc2l2ZS10ZXN0LnJldmlldy1pbnN0cnVjdGlvbnMtYnRuXCJcbiAgICAgID48L3VpLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,6 @@
1
+ // Library-specific components only (shared components are bundled from packages/shared)
2
+ export * from './immersive-test/immersive-test.component';
3
+ export * from './review-instructions-dialog';
4
+ export * from './ringing-phone-animation';
5
+ export * from './video-countdown';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90Z28taW1tZXJzaXZlLXRlc3Qvc3JjL2xpYi9jb21wb25lbnRzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHdGQUF3RjtBQUN4RixjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gTGlicmFyeS1zcGVjaWZpYyBjb21wb25lbnRzIG9ubHkgKHNoYXJlZCBjb21wb25lbnRzIGFyZSBidW5kbGVkIGZyb20gcGFja2FnZXMvc2hhcmVkKVxuZXhwb3J0ICogZnJvbSAnLi9pbW1lcnNpdmUtdGVzdC9pbW1lcnNpdmUtdGVzdC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9yZXZpZXctaW5zdHJ1Y3Rpb25zLWRpYWxvZyc7XG5leHBvcnQgKiBmcm9tICcuL3JpbmdpbmctcGhvbmUtYW5pbWF0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vdmlkZW8tY291bnRkb3duJztcblxuIl19
@@ -0,0 +1,2 @@
1
+ export * from './review-instructions-dialog.component';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90Z28taW1tZXJzaXZlLXRlc3Qvc3JjL2xpYi9jb21wb25lbnRzL3Jldmlldy1pbnN0cnVjdGlvbnMtZGlhbG9nL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsd0NBQXdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3Jldmlldy1pbnN0cnVjdGlvbnMtZGlhbG9nLmNvbXBvbmVudCc7XG4iXX0=
@@ -0,0 +1,69 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, Inject, } from '@angular/core';
3
+ import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
4
+ import { TRANSLOCO_SCOPE, TranslocoModule, TranslocoService, } from '@ngneat/transloco';
5
+ import { CardComponentModule, DialogComponentModule } from '@testgorilla/tgo-ui';
6
+ import { QuillViewComponent } from 'ngx-quill';
7
+ import { firstValueFrom } from 'rxjs';
8
+ import { getAvailableLangs, TranslocoLazyModuleUtils } from '../../services';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@angular/material/dialog";
11
+ import * as i2 from "@angular/common";
12
+ import * as i3 from "@ngneat/transloco";
13
+ import * as i4 from "@testgorilla/tgo-ui";
14
+ export class ReviewInstructionsDialogComponent {
15
+ dialogData;
16
+ translationScope;
17
+ dialogRef;
18
+ translations = {};
19
+ translocoService = inject(TranslocoService);
20
+ cdr = inject(ChangeDetectorRef);
21
+ constructor(dialogData, translationScope, dialogRef) {
22
+ this.dialogData = dialogData;
23
+ this.translationScope = translationScope;
24
+ this.dialogRef = dialogRef;
25
+ }
26
+ ngOnInit() {
27
+ void this.setTranslations();
28
+ }
29
+ closeDialog() {
30
+ this.dialogRef.close(false);
31
+ }
32
+ async setTranslations() {
33
+ this.translations = await firstValueFrom(this.translocoService.selectTranslateObject(`INSTRUCTIONS_MODAL`, {}, this.translationScope));
34
+ this.cdr.markForCheck();
35
+ }
36
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ReviewInstructionsDialogComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: TRANSLOCO_SCOPE }, { token: i1.MatDialogRef }], target: i0.ɵɵFactoryTarget.Component });
37
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ReviewInstructionsDialogComponent, isStandalone: true, selector: "tgo-review-instructions-dialog", providers: [
38
+ TranslocoLazyModuleUtils.getScopeProvider('tgo-immersive-test-review-instructions', getAvailableLangs(), 'INSTRUCTIONS_MODAL', (lang) => {
39
+ // Fetch from app assets; demo app copies the library assets to
40
+ // /assets/tgo-immersive-test via project.json.
41
+ const url = new URL(`assets/tgo-immersive-test/i18n/${lang}.json`, document.baseURI).href;
42
+ return fetch(url).then((res) => res.json());
43
+ }),
44
+ ], ngImport: i0, template: "<ng-container *transloco=\"let t\">\n <ui-dialog\n class=\"dialog-wrapper\"\n [title]=\"translations['TITLE']\"\n [secondaryButtonLabel]=\"translations['CLOSE']\"\n (secondaryButtonClickEvent)=\"closeDialog()\"\n >\n <section class=\"containers-section\">\n <div class=\"immersive-test-instructions-container\">\n <div\n class=\"background-information-container\"\n *ngIf=\"dialogData?.backgroundInfoData\"\n >\n <ui-card class=\"background-information-card\" variant=\"neutral\">\n <quill-view\n theme=\"snow\"\n [content]=\"dialogData?.backgroundInfoData\"\n class=\"content-container notranslate\"\n ></quill-view>\n </ui-card>\n </div>\n\n <div\n class=\"inner-instructions-container\"\n *ngIf=\"dialogData?.instructionsInfoData\"\n >\n <ui-card class=\"instructions-card\" variant=\"educative\">\n <quill-view\n theme=\"snow\"\n [content]=\"dialogData?.instructionsInfoData\"\n class=\"content-container notranslate\"\n ></quill-view>\n </ui-card>\n </div>\n </div>\n </section>\n </ui-dialog>\n</ng-container>\n\n", styles: ["@charset \"UTF-8\";:host .dialog-wrapper{width:100%}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section{width:100%;display:flex;flex-direction:column;justify-content:center;padding:.3rem .8rem}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container{display:flex;justify-content:space-between;width:100%;gap:2.5rem}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .background-information-container{display:flex;flex-direction:column;width:100%;max-width:450px}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .background-information-container .background-information-card .content-container .ql-container .ql-editor{padding:0}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .background-information-container .background-information-card .content-container .ql-container .ql-editor h1,:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .background-information-container .background-information-card .content-container .ql-container .ql-editor h2,:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .background-information-container .background-information-card .content-container .ql-container .ql-editor h3,:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .background-information-container .background-information-card .content-container .ql-container .ql-editor h4,:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .background-information-container .background-information-card .content-container .ql-container .ql-editor h5,:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .background-information-container .background-information-card .content-container .ql-container .ql-editor h6{font-size:16px;font-weight:700;line-height:20px;margin-bottom:.6rem}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .background-information-container .background-information-card .content-container .ql-container .ql-editor p,:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .background-information-container .background-information-card .content-container .ql-container .ql-editor span{font-size:14px;margin-bottom:1.5rem}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .background-information-container .background-information-card .content-container .ql-container .ql-editor p:last-child,:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .background-information-container .background-information-card .content-container .ql-container .ql-editor span:last-child{margin-bottom:0}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .background-information-container .background-information-card .content-container .ql-container .ql-editor br{display:none}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container{display:flex;flex-direction:column;gap:2.5rem;width:100%;max-width:450px}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container{border-width:1px}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor{padding:0}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor h1,:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor h2,:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor h3,:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor h4,:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor h5,:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor h6{font-size:16px;font-weight:700;line-height:20px;margin-bottom:.6rem}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor p:before,:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor span:before{content:\"\\2022 \";color:#000;font-size:1em;position:absolute;left:8px;top:0}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor p,:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor span{position:relative;font-size:14px;padding-left:22px;margin:3px 0 0}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor ul,:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor ol{padding-left:10px;margin:5px 0 0}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor ul li,:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor ol li{font-size:14px;padding-left:0}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor ul li span:before,:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor ol li span:before{top:-3px}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor ul li span,:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor ol li span{padding-left:12px}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor br{display:none}@media (max-width: 799px){:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section{padding-top:0}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container{flex-wrap:wrap}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .background-information-container{max-width:none}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container{max-width:none}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "directive", type: i3.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoLang", "translocoLoadingTpl"] }, { kind: "ngmodule", type: DialogComponentModule }, { kind: "component", type: i4.DialogComponent, selector: "ui-dialog", inputs: ["title", "showCloseButton", "canCloseFn", "secondaryButtonLabel", "footerMessage", "primaryButtonLabel", "primaryButtonIconName", "secondaryButtonType", "primaryButtonType", "primaryButtonDataTestId", "secondaryButtonDataTestId", "companyColor", "applicationTheme", "disablePrimaryButton", "disableClose", "shouldDisableButtons", "ariaLabelledby", "ariaDescribedby", "keyboardOpen", "primaryButtonIconPosition"], outputs: ["closeEvent", "secondaryButtonClickEvent", "primaryButtonClickEvent"] }, { kind: "ngmodule", type: CardComponentModule }, { kind: "component", type: i4.CardComponent, selector: "ui-card", inputs: ["size", "variant", "applicationTheme", "errors", "errorsSize", "selected", "allowSelect", "allowFocus"], outputs: ["cardSelected"] }, { kind: "component", type: QuillViewComponent, selector: "quill-view", inputs: ["format", "theme", "modules", "debug", "formats", "sanitize", "beforeRender", "strict", "content", "customModules", "customOptions"], outputs: ["onEditorCreated"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
45
+ }
46
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ReviewInstructionsDialogComponent, decorators: [{
47
+ type: Component,
48
+ args: [{ selector: 'tgo-review-instructions-dialog', providers: [
49
+ TranslocoLazyModuleUtils.getScopeProvider('tgo-immersive-test-review-instructions', getAvailableLangs(), 'INSTRUCTIONS_MODAL', (lang) => {
50
+ // Fetch from app assets; demo app copies the library assets to
51
+ // /assets/tgo-immersive-test via project.json.
52
+ const url = new URL(`assets/tgo-immersive-test/i18n/${lang}.json`, document.baseURI).href;
53
+ return fetch(url).then((res) => res.json());
54
+ }),
55
+ ], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
56
+ CommonModule,
57
+ TranslocoModule,
58
+ DialogComponentModule,
59
+ CardComponentModule,
60
+ QuillViewComponent,
61
+ ], template: "<ng-container *transloco=\"let t\">\n <ui-dialog\n class=\"dialog-wrapper\"\n [title]=\"translations['TITLE']\"\n [secondaryButtonLabel]=\"translations['CLOSE']\"\n (secondaryButtonClickEvent)=\"closeDialog()\"\n >\n <section class=\"containers-section\">\n <div class=\"immersive-test-instructions-container\">\n <div\n class=\"background-information-container\"\n *ngIf=\"dialogData?.backgroundInfoData\"\n >\n <ui-card class=\"background-information-card\" variant=\"neutral\">\n <quill-view\n theme=\"snow\"\n [content]=\"dialogData?.backgroundInfoData\"\n class=\"content-container notranslate\"\n ></quill-view>\n </ui-card>\n </div>\n\n <div\n class=\"inner-instructions-container\"\n *ngIf=\"dialogData?.instructionsInfoData\"\n >\n <ui-card class=\"instructions-card\" variant=\"educative\">\n <quill-view\n theme=\"snow\"\n [content]=\"dialogData?.instructionsInfoData\"\n class=\"content-container notranslate\"\n ></quill-view>\n </ui-card>\n </div>\n </div>\n </section>\n </ui-dialog>\n</ng-container>\n\n", styles: ["@charset \"UTF-8\";:host .dialog-wrapper{width:100%}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section{width:100%;display:flex;flex-direction:column;justify-content:center;padding:.3rem .8rem}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container{display:flex;justify-content:space-between;width:100%;gap:2.5rem}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .background-information-container{display:flex;flex-direction:column;width:100%;max-width:450px}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .background-information-container .background-information-card .content-container .ql-container .ql-editor{padding:0}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .background-information-container .background-information-card .content-container .ql-container .ql-editor h1,:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .background-information-container .background-information-card .content-container .ql-container .ql-editor h2,:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .background-information-container .background-information-card .content-container .ql-container .ql-editor h3,:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .background-information-container .background-information-card .content-container .ql-container .ql-editor h4,:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .background-information-container .background-information-card .content-container .ql-container .ql-editor h5,:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .background-information-container .background-information-card .content-container .ql-container .ql-editor h6{font-size:16px;font-weight:700;line-height:20px;margin-bottom:.6rem}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .background-information-container .background-information-card .content-container .ql-container .ql-editor p,:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .background-information-container .background-information-card .content-container .ql-container .ql-editor span{font-size:14px;margin-bottom:1.5rem}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .background-information-container .background-information-card .content-container .ql-container .ql-editor p:last-child,:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .background-information-container .background-information-card .content-container .ql-container .ql-editor span:last-child{margin-bottom:0}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .background-information-container .background-information-card .content-container .ql-container .ql-editor br{display:none}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container{display:flex;flex-direction:column;gap:2.5rem;width:100%;max-width:450px}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container{border-width:1px}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor{padding:0}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor h1,:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor h2,:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor h3,:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor h4,:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor h5,:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor h6{font-size:16px;font-weight:700;line-height:20px;margin-bottom:.6rem}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor p:before,:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor span:before{content:\"\\2022 \";color:#000;font-size:1em;position:absolute;left:8px;top:0}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor p,:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor span{position:relative;font-size:14px;padding-left:22px;margin:3px 0 0}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor ul,:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor ol{padding-left:10px;margin:5px 0 0}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor ul li,:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor ol li{font-size:14px;padding-left:0}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor ul li span:before,:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor ol li span:before{top:-3px}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor ul li span,:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor ol li span{padding-left:12px}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container .instructions-card .card-container .ql-container .ql-editor br{display:none}@media (max-width: 799px){:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section{padding-top:0}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container{flex-wrap:wrap}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .background-information-container{max-width:none}:host .dialog-wrapper ::ng-deep .mat-mdc-dialog-content .containers-section .immersive-test-instructions-container .inner-instructions-container{max-width:none}}\n"] }]
62
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
63
+ type: Inject,
64
+ args: [MAT_DIALOG_DATA]
65
+ }] }, { type: undefined, decorators: [{
66
+ type: Inject,
67
+ args: [TRANSLOCO_SCOPE]
68
+ }] }, { type: i1.MatDialogRef }] });
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2aWV3LWluc3RydWN0aW9ucy1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdGdvLWltbWVyc2l2ZS10ZXN0L3NyYy9saWIvY29tcG9uZW50cy9yZXZpZXctaW5zdHJ1Y3Rpb25zLWRpYWxvZy9yZXZpZXctaW5zdHJ1Y3Rpb25zLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90Z28taW1tZXJzaXZlLXRlc3Qvc3JjL2xpYi9jb21wb25lbnRzL3Jldmlldy1pbnN0cnVjdGlvbnMtZGlhbG9nL3Jldmlldy1pbnN0cnVjdGlvbnMtZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pFLE9BQU8sRUFDTCxlQUFlLEVBQ2YsZUFBZSxFQUVmLGdCQUFnQixHQUNqQixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7QUFxQzdFLE1BQU0sT0FBTyxpQ0FBaUM7SUFRbkM7SUFDMEI7SUFDekI7SUFUVixZQUFZLEdBQThCLEVBQUUsQ0FBQztJQUVyQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM1QyxHQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFFeEMsWUFFUyxVQUF3QyxFQUNkLGdCQUFnQyxFQUN6RCxTQUEwRDtRQUYzRCxlQUFVLEdBQVYsVUFBVSxDQUE4QjtRQUNkLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBZ0I7UUFDekQsY0FBUyxHQUFULFNBQVMsQ0FBaUQ7SUFDakUsQ0FBQztJQUVKLFFBQVE7UUFDTixLQUFLLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFTyxLQUFLLENBQUMsZUFBZTtRQUMzQixJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sY0FBYyxDQUN0QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMscUJBQXFCLENBQ3pDLG9CQUFvQixFQUNwQixFQUFFLEVBQ0YsSUFBSSxDQUFDLGdCQUEwQixDQUNoQyxDQUNGLENBQUM7UUFDRixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7d0dBOUJVLGlDQUFpQyxrQkFPbEMsZUFBZSxhQUVmLGVBQWU7NEZBVGQsaUNBQWlDLDZFQTFCakM7WUFDVCx3QkFBd0IsQ0FBQyxnQkFBZ0IsQ0FDdkMsd0NBQXdDLEVBQ3hDLGlCQUFpQixFQUFFLEVBQ25CLG9CQUFvQixFQUNwQixDQUFDLElBQVksRUFBRSxFQUFFO2dCQUNmLCtEQUErRDtnQkFDL0QsK0NBQStDO2dCQUMvQyxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FDakIsa0NBQWtDLElBQUksT0FBTyxFQUM3QyxRQUFRLENBQUMsT0FBTyxDQUNqQixDQUFDLElBQUksQ0FBQztnQkFDUCxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLENBQUMsQ0FDRjtTQUNGLDBCQzdDSCx3d0NBdUNBLDQyUkRVSSxZQUFZLGtJQUNaLGVBQWUsZ09BQ2YscUJBQXFCLDZsQkFDckIsbUJBQW1CLGdQQUNuQixrQkFBa0I7OzRGQUdULGlDQUFpQztrQkE5QjdDLFNBQVM7K0JBQ0UsZ0NBQWdDLGFBRy9CO3dCQUNULHdCQUF3QixDQUFDLGdCQUFnQixDQUN2Qyx3Q0FBd0MsRUFDeEMsaUJBQWlCLEVBQUUsRUFDbkIsb0JBQW9CLEVBQ3BCLENBQUMsSUFBWSxFQUFFLEVBQUU7NEJBQ2YsK0RBQStEOzRCQUMvRCwrQ0FBK0M7NEJBQy9DLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUNqQixrQ0FBa0MsSUFBSSxPQUFPLEVBQzdDLFFBQVEsQ0FBQyxPQUFPLENBQ2pCLENBQUMsSUFBSSxDQUFDOzRCQUNQLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7d0JBQzlDLENBQUMsQ0FDRjtxQkFDRixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixlQUFlO3dCQUNmLHFCQUFxQjt3QkFDckIsbUJBQW1CO3dCQUNuQixrQkFBa0I7cUJBQ25COzswQkFTRSxNQUFNOzJCQUFDLGVBQWU7OzBCQUV0QixNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIGluamVjdCxcbiAgSW5qZWN0LFxuICBPbkluaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHtcbiAgVFJBTlNMT0NPX1NDT1BFLFxuICBUcmFuc2xvY29Nb2R1bGUsXG4gIFRyYW5zbG9jb1Njb3BlLFxuICBUcmFuc2xvY29TZXJ2aWNlLFxufSBmcm9tICdAbmduZWF0L3RyYW5zbG9jbyc7XG5pbXBvcnQgeyBDYXJkQ29tcG9uZW50TW9kdWxlLCBEaWFsb2dDb21wb25lbnRNb2R1bGUgfSBmcm9tICdAdGVzdGdvcmlsbGEvdGdvLXVpJztcbmltcG9ydCB7IFF1aWxsVmlld0NvbXBvbmVudCB9IGZyb20gJ25neC1xdWlsbCc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZ2V0QXZhaWxhYmxlTGFuZ3MsIFRyYW5zbG9jb0xhenlNb2R1bGVVdGlscyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcblxuZXhwb3J0IGludGVyZmFjZSBSZXZpZXdJbnN0cnVjdGlvbnNEaWFsb2dEYXRhIHtcbiAgYmFja2dyb3VuZEluZm9EYXRhPzogc3RyaW5nO1xuICBpbnN0cnVjdGlvbnNJbmZvRGF0YT86IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGdvLXJldmlldy1pbnN0cnVjdGlvbnMtZGlhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Jldmlldy1pbnN0cnVjdGlvbnMtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmV2aWV3LWluc3RydWN0aW9ucy1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgVHJhbnNsb2NvTGF6eU1vZHVsZVV0aWxzLmdldFNjb3BlUHJvdmlkZXIoXG4gICAgICAndGdvLWltbWVyc2l2ZS10ZXN0LXJldmlldy1pbnN0cnVjdGlvbnMnLFxuICAgICAgZ2V0QXZhaWxhYmxlTGFuZ3MoKSxcbiAgICAgICdJTlNUUlVDVElPTlNfTU9EQUwnLFxuICAgICAgKGxhbmc6IHN0cmluZykgPT4ge1xuICAgICAgICAvLyBGZXRjaCBmcm9tIGFwcCBhc3NldHM7IGRlbW8gYXBwIGNvcGllcyB0aGUgbGlicmFyeSBhc3NldHMgdG9cbiAgICAgICAgLy8gL2Fzc2V0cy90Z28taW1tZXJzaXZlLXRlc3QgdmlhIHByb2plY3QuanNvbi5cbiAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChcbiAgICAgICAgICBgYXNzZXRzL3Rnby1pbW1lcnNpdmUtdGVzdC9pMThuLyR7bGFuZ30uanNvbmAsXG4gICAgICAgICAgZG9jdW1lbnQuYmFzZVVSSVxuICAgICAgICApLmhyZWY7XG4gICAgICAgIHJldHVybiBmZXRjaCh1cmwpLnRoZW4oKHJlcykgPT4gcmVzLmpzb24oKSk7XG4gICAgICB9XG4gICAgKSxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgVHJhbnNsb2NvTW9kdWxlLFxuICAgIERpYWxvZ0NvbXBvbmVudE1vZHVsZSxcbiAgICBDYXJkQ29tcG9uZW50TW9kdWxlLFxuICAgIFF1aWxsVmlld0NvbXBvbmVudCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgUmV2aWV3SW5zdHJ1Y3Rpb25zRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgdHJhbnNsYXRpb25zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG5cbiAgcHJpdmF0ZSB0cmFuc2xvY29TZXJ2aWNlID0gaW5qZWN0KFRyYW5zbG9jb1NlcnZpY2UpO1xuICBwcml2YXRlIGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpXG4gICAgcHVibGljIGRpYWxvZ0RhdGE6IFJldmlld0luc3RydWN0aW9uc0RpYWxvZ0RhdGEsXG4gICAgQEluamVjdChUUkFOU0xPQ09fU0NPUEUpIHByaXZhdGUgdHJhbnNsYXRpb25TY29wZTogVHJhbnNsb2NvU2NvcGUsXG4gICAgcHJpdmF0ZSBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxSZXZpZXdJbnN0cnVjdGlvbnNEaWFsb2dDb21wb25lbnQ+XG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMuc2V0VHJhbnNsYXRpb25zKCk7XG4gIH1cblxuICBjbG9zZURpYWxvZygpOiB2b2lkIHtcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNldFRyYW5zbGF0aW9ucygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnRyYW5zbGF0aW9ucyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgdGhpcy50cmFuc2xvY29TZXJ2aWNlLnNlbGVjdFRyYW5zbGF0ZU9iamVjdChcbiAgICAgICAgYElOU1RSVUNUSU9OU19NT0RBTGAsXG4gICAgICAgIHt9LFxuICAgICAgICB0aGlzLnRyYW5zbGF0aW9uU2NvcGUgYXMgc3RyaW5nXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqdHJhbnNsb2NvPVwibGV0IHRcIj5cbiAgPHVpLWRpYWxvZ1xuICAgIGNsYXNzPVwiZGlhbG9nLXdyYXBwZXJcIlxuICAgIFt0aXRsZV09XCJ0cmFuc2xhdGlvbnNbJ1RJVExFJ11cIlxuICAgIFtzZWNvbmRhcnlCdXR0b25MYWJlbF09XCJ0cmFuc2xhdGlvbnNbJ0NMT1NFJ11cIlxuICAgIChzZWNvbmRhcnlCdXR0b25DbGlja0V2ZW50KT1cImNsb3NlRGlhbG9nKClcIlxuICA+XG4gICAgPHNlY3Rpb24gY2xhc3M9XCJjb250YWluZXJzLXNlY3Rpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbW1lcnNpdmUtdGVzdC1pbnN0cnVjdGlvbnMtY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImJhY2tncm91bmQtaW5mb3JtYXRpb24tY29udGFpbmVyXCJcbiAgICAgICAgICAqbmdJZj1cImRpYWxvZ0RhdGE/LmJhY2tncm91bmRJbmZvRGF0YVwiXG4gICAgICAgID5cbiAgICAgICAgICA8dWktY2FyZCBjbGFzcz1cImJhY2tncm91bmQtaW5mb3JtYXRpb24tY2FyZFwiIHZhcmlhbnQ9XCJuZXV0cmFsXCI+XG4gICAgICAgICAgICA8cXVpbGwtdmlld1xuICAgICAgICAgICAgICB0aGVtZT1cInNub3dcIlxuICAgICAgICAgICAgICBbY29udGVudF09XCJkaWFsb2dEYXRhPy5iYWNrZ3JvdW5kSW5mb0RhdGFcIlxuICAgICAgICAgICAgICBjbGFzcz1cImNvbnRlbnQtY29udGFpbmVyIG5vdHJhbnNsYXRlXCJcbiAgICAgICAgICAgID48L3F1aWxsLXZpZXc+XG4gICAgICAgICAgPC91aS1jYXJkPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJpbm5lci1pbnN0cnVjdGlvbnMtY29udGFpbmVyXCJcbiAgICAgICAgICAqbmdJZj1cImRpYWxvZ0RhdGE/Lmluc3RydWN0aW9uc0luZm9EYXRhXCJcbiAgICAgICAgPlxuICAgICAgICAgIDx1aS1jYXJkIGNsYXNzPVwiaW5zdHJ1Y3Rpb25zLWNhcmRcIiB2YXJpYW50PVwiZWR1Y2F0aXZlXCI+XG4gICAgICAgICAgICA8cXVpbGwtdmlld1xuICAgICAgICAgICAgICB0aGVtZT1cInNub3dcIlxuICAgICAgICAgICAgICBbY29udGVudF09XCJkaWFsb2dEYXRhPy5pbnN0cnVjdGlvbnNJbmZvRGF0YVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY29udGVudC1jb250YWluZXIgbm90cmFuc2xhdGVcIlxuICAgICAgICAgICAgPjwvcXVpbGwtdmlldz5cbiAgICAgICAgICA8L3VpLWNhcmQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9zZWN0aW9uPlxuICA8L3VpLWRpYWxvZz5cbjwvbmctY29udGFpbmVyPlxuXG4iXX0=
@@ -0,0 +1,2 @@
1
+ export * from './ringing-phone-animation.component';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90Z28taW1tZXJzaXZlLXRlc3Qvc3JjL2xpYi9jb21wb25lbnRzL3JpbmdpbmctcGhvbmUtYW5pbWF0aW9uL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMscUNBQXFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3JpbmdpbmctcGhvbmUtYW5pbWF0aW9uLmNvbXBvbmVudCc7XG4iXX0=