@seniorsistemas/angular-components 17.26.9 → 17.26.11

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 (23) hide show
  1. package/bundles/seniorsistemas-angular-components.umd.js +118 -80
  2. package/bundles/seniorsistemas-angular-components.umd.js.map +1 -1
  3. package/bundles/seniorsistemas-angular-components.umd.min.js +1 -1
  4. package/bundles/seniorsistemas-angular-components.umd.min.js.map +1 -1
  5. package/components/speech-recognition/speech-recognition/speech-recognition.component.d.ts +5 -2
  6. package/components/speech-recognition/speech-recognition.service.d.ts +3 -2
  7. package/components/text-area/text-area/text-area.component.d.ts +1 -3
  8. package/esm2015/components/speech-recognition/speech-recognition/speech-recognition.component.js +35 -20
  9. package/esm2015/components/speech-recognition/speech-recognition.service.js +41 -22
  10. package/esm2015/components/speech-recognition/text-to-speech.service.js +1 -1
  11. package/esm2015/components/text-area/text-area/text-area.component.js +3 -14
  12. package/esm2015/components/tooltip/tooltip.component.js +1 -1
  13. package/esm5/components/speech-recognition/speech-recognition/speech-recognition.component.js +40 -19
  14. package/esm5/components/speech-recognition/speech-recognition.service.js +78 -46
  15. package/esm5/components/speech-recognition/text-to-speech.service.js +1 -1
  16. package/esm5/components/text-area/text-area/text-area.component.js +3 -18
  17. package/esm5/components/tooltip/tooltip.component.js +1 -1
  18. package/fesm2015/seniorsistemas-angular-components.js +76 -53
  19. package/fesm2015/seniorsistemas-angular-components.js.map +1 -1
  20. package/fesm5/seniorsistemas-angular-components.js +118 -80
  21. package/fesm5/seniorsistemas-angular-components.js.map +1 -1
  22. package/package.json +1 -1
  23. package/seniorsistemas-angular-components.metadata.json +1 -1
@@ -15,7 +15,7 @@ var SpeechRecognitionComponent = /** @class */ (function () {
15
15
  this.speechRecognitionPlaceholder = '';
16
16
  this._recognizedText = '';
17
17
  this.originalTextAreaElementText = '';
18
- this.isDoneSpeaking = false;
18
+ this.isDoneTextToSpeech = false;
19
19
  this.onDestroy$ = new Subject();
20
20
  this.VOICE_SPEEDS = [0.5, 1, 1.5, 2];
21
21
  this.keydownEventListener = function (event) {
@@ -24,7 +24,7 @@ var SpeechRecognitionComponent = /** @class */ (function () {
24
24
  }
25
25
  };
26
26
  this.disabled = false;
27
- this.isSpeaking = false;
27
+ this.isListeningUserVoice = false;
28
28
  this.voiceSpeed = 1;
29
29
  this.isDisabledMicrophone = false;
30
30
  this.canRenderMicrophone = true;
@@ -36,7 +36,9 @@ var SpeechRecognitionComponent = /** @class */ (function () {
36
36
  this.isPlayingTextToSpeech = false;
37
37
  this.recognizedText = new EventEmitter();
38
38
  }
39
+ SpeechRecognitionComponent_1 = SpeechRecognitionComponent;
39
40
  SpeechRecognitionComponent.prototype.ngOnInit = function () {
41
+ var _this = this;
40
42
  if (!this.hasSpeechRecognitionBrowserApi) {
41
43
  return;
42
44
  }
@@ -45,6 +47,11 @@ var SpeechRecognitionComponent = /** @class */ (function () {
45
47
  }
46
48
  this.textAreaElement.placeholder = this.speechRecognitionPlaceholder ? this.speechRecognitionPlaceholder : this.translateService.instant("platform.angular_components.text_area_speech_recognition_placeholder");
47
49
  this.textAreaElement.addEventListener('keydown', this.keydownEventListener);
50
+ this.speechRecognitionService.microphoneStatus$.pipe(takeUntil(this.onDestroy$)).subscribe(function (status) {
51
+ if (status === 'active') {
52
+ _this.onCloseToolbar();
53
+ }
54
+ });
48
55
  };
49
56
  SpeechRecognitionComponent.prototype.onListen = function () {
50
57
  var _this = this;
@@ -56,7 +63,7 @@ var SpeechRecognitionComponent = /** @class */ (function () {
56
63
  this.canRenderListeningText = true;
57
64
  this.originalTextAreaElementText = this.textAreaElement.value;
58
65
  this.textAreaElement.value = '';
59
- this.isSpeaking = true;
66
+ this.isListeningUserVoice = true;
60
67
  this.speechRecognitionService.listen()
61
68
  .pipe(takeUntil(this.onDestroy$))
62
69
  .subscribe(function (_a) {
@@ -68,10 +75,10 @@ var SpeechRecognitionComponent = /** @class */ (function () {
68
75
  _this.canRenderAprove = true;
69
76
  _this.canRenderDiscard = true;
70
77
  _this.canRenderListeningText = false;
71
- _this.isSpeaking = false;
78
+ _this.isListeningUserVoice = false;
72
79
  }
73
80
  }, function () {
74
- _this.isSpeaking = false;
81
+ _this.isListeningUserVoice = false;
75
82
  _this.canRenderMicrophone = true;
76
83
  _this.isDisabledMicrophone = false;
77
84
  _this.canRenderListeningText = false;
@@ -90,15 +97,15 @@ var SpeechRecognitionComponent = /** @class */ (function () {
90
97
  }
91
98
  this.canRenderTextToSpeechToolbar = true;
92
99
  this.canRenderTextToSpeech = false;
93
- this.isPlayingTextToSpeech = true;
100
+ SpeechRecognitionComponent_1.TOOLBAR_ACTIVE = true;
94
101
  this.speak();
95
102
  };
96
103
  SpeechRecognitionComponent.prototype.onCloseToolbar = function () {
97
104
  this.canRenderTextToSpeechToolbar = false;
98
105
  this.canRenderTextToSpeech = true;
99
- this.isPlayingTextToSpeech = false;
100
- this.textToSpeechService.cancel();
106
+ this.stopTextToSpeech();
101
107
  this.voiceSpeed = 1;
108
+ SpeechRecognitionComponent_1.TOOLBAR_ACTIVE = false;
102
109
  };
103
110
  SpeechRecognitionComponent.prototype.onDiscard = function () {
104
111
  this.canRenderAprove = false;
@@ -109,7 +116,8 @@ var SpeechRecognitionComponent = /** @class */ (function () {
109
116
  this._recognizedText = '';
110
117
  this.setTextAreaValue(this.originalTextAreaElementText);
111
118
  this.disabled = false;
112
- this.textToSpeechService.cancel();
119
+ this.stopTextToSpeech();
120
+ SpeechRecognitionComponent_1.TOOLBAR_ACTIVE = false;
113
121
  };
114
122
  SpeechRecognitionComponent.prototype.onAprove = function () {
115
123
  this.canRenderAprove = false;
@@ -139,7 +147,7 @@ var SpeechRecognitionComponent = /** @class */ (function () {
139
147
  this.textToSpeechService.pause();
140
148
  }
141
149
  else {
142
- if (this.isDoneSpeaking) {
150
+ if (this.isDoneTextToSpeech) {
143
151
  this.speak();
144
152
  }
145
153
  else {
@@ -149,7 +157,6 @@ var SpeechRecognitionComponent = /** @class */ (function () {
149
157
  this.isPlayingTextToSpeech = !this.isPlayingTextToSpeech;
150
158
  };
151
159
  SpeechRecognitionComponent.prototype.restartTextToSpeech = function () {
152
- this.isPlayingTextToSpeech = true;
153
160
  this.textToSpeechService.cancel();
154
161
  this.speak();
155
162
  };
@@ -180,7 +187,7 @@ var SpeechRecognitionComponent = /** @class */ (function () {
180
187
  Object.defineProperty(SpeechRecognitionComponent.prototype, "isDisabledTextToSpeech", {
181
188
  get: function () {
182
189
  var hasTextToSpeechVoice = this.textToSpeechService.hasVoice;
183
- return !this._recognizedText || !hasTextToSpeechVoice || this.isListening;
190
+ return !this.textToSpeech || !hasTextToSpeechVoice || this.isListening || SpeechRecognitionComponent_1.TOOLBAR_ACTIVE;
184
191
  },
185
192
  enumerable: true,
186
193
  configurable: true
@@ -188,14 +195,28 @@ var SpeechRecognitionComponent = /** @class */ (function () {
188
195
  SpeechRecognitionComponent.prototype.setTextAreaValue = function (value) {
189
196
  this.textAreaElement.value = value;
190
197
  };
198
+ SpeechRecognitionComponent.prototype.stopTextToSpeech = function () {
199
+ this.isPlayingTextToSpeech = false;
200
+ this.textToSpeechService.cancel();
201
+ };
191
202
  SpeechRecognitionComponent.prototype.speak = function () {
192
203
  var _this = this;
193
- this.isDoneSpeaking = false;
194
- this.textToSpeechService.speak(this._recognizedText, this.voiceSpeed).then(function () {
204
+ this.isDoneTextToSpeech = false;
205
+ this.isPlayingTextToSpeech = true;
206
+ this.textToSpeechService.speak(this.textToSpeech, this.voiceSpeed).then(function () {
195
207
  _this.isPlayingTextToSpeech = false;
196
- _this.isDoneSpeaking = true;
208
+ _this.isDoneTextToSpeech = true;
197
209
  });
198
210
  };
211
+ Object.defineProperty(SpeechRecognitionComponent.prototype, "textToSpeech", {
212
+ get: function () {
213
+ return this.textAreaElement.value;
214
+ },
215
+ enumerable: true,
216
+ configurable: true
217
+ });
218
+ var SpeechRecognitionComponent_1;
219
+ SpeechRecognitionComponent.TOOLBAR_ACTIVE = false;
199
220
  SpeechRecognitionComponent.ctorParameters = function () { return [
200
221
  { type: SpeechRecognitionService },
201
222
  { type: TextToSpeechService },
@@ -213,14 +234,14 @@ var SpeechRecognitionComponent = /** @class */ (function () {
213
234
  __decorate([
214
235
  Output()
215
236
  ], SpeechRecognitionComponent.prototype, "recognizedText", void 0);
216
- SpeechRecognitionComponent = __decorate([
237
+ SpeechRecognitionComponent = SpeechRecognitionComponent_1 = __decorate([
217
238
  Component({
218
239
  selector: 's-speech-recognition',
219
- template: "<section class=\"speech-recognition\" *ngIf=\"hasSpeechRecognitionBrowserApi\">\n <div class=\"speech-recognition-text\">\n <ng-container *ngIf=\"canRenderMicrophone\">\n {{ 'platform.angular_components.text_area_before_speech' | translate }}\n </ng-container>\n\n <ng-container *ngIf=\"isSpeaking\">\n {{ 'platform.angular_components.text_area_while_speech' | translate }}\n </ng-container>\n\n <ng-container *ngIf=\"canRenderAprove && canRenderDiscard\">\n {{ 'platform.angular_components.text_area_end_speech' | translate }}\n </ng-container>\n </div>\n <div class=\"speech-recognition-buttons\">\n <span\n *ngIf=\"canRenderListeningText\"\n (click)=\"stopListening()\"\n class=\"speech-recognition-item speech-recognition-item-regular\">\n <i class=\"far fa-ellipsis-h\"></i>\n </span>\n\n <span\n *ngIf=\"canRenderMicrophone\"\n (click)=\"onListen()\"\n class=\"speech-recognition-item speech-recognition-item-microphone\"\n [class.speech-recognition-item-disabled]=\"isDisabledMicrophone || isListening || disabled\">\n <i class=\"fas fa-microphone\"></i>\n </span>\n\n <span\n *ngIf=\"canRenderAprove\"\n (click)=\"onAprove()\"\n class=\"speech-recognition-item speech-recognition-item-aprove\">\n <i class=\"fas fa-check\"></i>\n </span>\n\n <span *ngIf=\"canRenderDiscard\"\n (click)=\"onDiscard()\"\n class=\"speech-recognition-item speech-recognition-item-discard\">\n <i class=\"fas fa-times\"></i>\n </span>\n\n <span\n *ngIf=\"canRenderTextToSpeech\"\n (click)=\"onOpenToolbar()\"\n class=\"speech-recognition-item speech-recognition-item-regular\"\n [class.speech-recognition-item-disabled]=\"isDisabledTextToSpeech\">\n <i class=\"fas fa-volume-down\"></i>\n </span>\n\n <span\n *ngIf=\"canRenderTextToSpeechToolbar\"\n class=\"speech-recognition-item-toolbar\">\n <i class=\"fas\" [class.fa-pause]=\"isPlayingTextToSpeech\" [class.fa-play]=\"!isPlayingTextToSpeech\"\n (click)=\"toggleTextToSpeech()\"></i>\n <i class=\"fas fa-backward\" (click)=\"restartTextToSpeech()\"></i>\n <span (click)=\"updateVoiceSpeed()\">\n {{ voiceSpeed }}x\n </span>\n <i class=\"fas fa-times\" (click)=\"onCloseToolbar()\"></i>\n </span>\n </div>\n</section>\n",
220
- styles: [".speech-recognition{display:-ms-flexbox;display:flex;gap:10px;-ms-flex-pack:justify;justify-content:space-between;width:100%}.speech-recognition-buttons{display:-ms-flexbox;display:flex;gap:10px;position:relative;bottom:15px;margin-right:16px}.speech-recognition-item{display:-ms-inline-flexbox;display:inline-flex;height:25px;padding:4px 12px;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;gap:8px;border-radius:15px;cursor:pointer;transition:background .1s ease-in}.speech-recognition-item i,.speech-recognition-item span{color:#fff}.speech-recognition-item-disabled{cursor:default!important}.speech-recognition-item-disabled *{opacity:.5}.speech-recognition-item-microphone{background:#428bca}.speech-recognition-item-microphone:not(.speech-recognition-item-disabled):hover{background:#063951}.speech-recognition-item-regular{background:#7892a1}.speech-recognition-item-regular:not(.speech-recognition-item-disabled):hover{background:#697882}.speech-recognition-item-aprove{background:#0c9348}.speech-recognition-item-aprove:not(.speech-recognition-item-disabled):hover{background:#063951}.speech-recognition-item-discard{background:#c13018}.speech-recognition-item-discard:not(.speech-recognition-item-disabled):hover{background:#063951}.speech-recognition-item-toolbar{background:#7892a1;display:-ms-flexbox;display:flex;border-radius:15px;-ms-flex-align:center;align-items:center;color:#fff}.speech-recognition-item-toolbar i,.speech-recognition-item-toolbar span{cursor:pointer}.speech-recognition-item-toolbar i:not(:first-child),.speech-recognition-item-toolbar i:not(:last-child){padding:6px}.speech-recognition-item-toolbar i:first-child{padding-left:10px}.speech-recognition-item-toolbar i:last-child{padding-right:10px}.speech-recognition-item-toolbar span{height:25px}.speech-recognition-text{color:#212533;font-size:12px;font-style:normal;font-weight:400;word-break:break-word}"]
240
+ template: "<section class=\"speech-recognition\" *ngIf=\"hasSpeechRecognitionBrowserApi\">\n <div class=\"speech-recognition-text\">\n <ng-container *ngIf=\"canRenderMicrophone\">\n {{ 'platform.angular_components.text_area_before_speech' | translate }}\n </ng-container>\n\n <ng-container *ngIf=\"isListeningUserVoice\">\n {{ 'platform.angular_components.text_area_while_speech' | translate }}\n </ng-container>\n\n <ng-container *ngIf=\"canRenderAprove && canRenderDiscard\">\n {{ 'platform.angular_components.text_area_end_speech' | translate }}\n </ng-container>\n </div>\n <div class=\"speech-recognition-buttons\">\n <span\n *ngIf=\"canRenderListeningText\"\n (click)=\"stopListening()\"\n class=\"speech-recognition-item speech-recognition-item-regular\">\n <i class=\"far fa-ellipsis-h\"></i>\n </span>\n\n <span\n *ngIf=\"canRenderMicrophone\"\n (click)=\"onListen()\"\n class=\"speech-recognition-item speech-recognition-item-microphone\"\n [class.speech-recognition-item-disabled]=\"isDisabledMicrophone || isListening || disabled\">\n <i class=\"fas fa-microphone\"></i>\n </span>\n\n <span\n *ngIf=\"canRenderAprove\"\n (click)=\"onAprove()\"\n class=\"speech-recognition-item speech-recognition-item-aprove\">\n <i class=\"fas fa-check\"></i>\n </span>\n\n <span *ngIf=\"canRenderDiscard\"\n (click)=\"onDiscard()\"\n class=\"speech-recognition-item speech-recognition-item-discard\">\n <i class=\"fas fa-times\"></i>\n </span>\n\n <span\n *ngIf=\"canRenderTextToSpeech\"\n (click)=\"onOpenToolbar()\"\n class=\"speech-recognition-item speech-recognition-item-regular\"\n [class.speech-recognition-item-disabled]=\"isDisabledTextToSpeech\">\n <i class=\"fas fa-volume-down\"></i>\n </span>\n\n <span\n *ngIf=\"canRenderTextToSpeechToolbar\"\n class=\"speech-recognition-item-toolbar\">\n <i class=\"fas\" [class.fa-pause]=\"isPlayingTextToSpeech\" [class.fa-play]=\"!isPlayingTextToSpeech\"\n (click)=\"toggleTextToSpeech()\"></i>\n <i class=\"fas fa-backward\" (click)=\"restartTextToSpeech()\"></i>\n <span (click)=\"updateVoiceSpeed()\">\n {{ voiceSpeed }}x\n </span>\n <i class=\"fas fa-times\" (click)=\"onCloseToolbar()\"></i>\n </span>\n </div>\n</section>\n",
241
+ styles: [".speech-recognition{display:-ms-flexbox;display:flex;gap:10px;-ms-flex-pack:justify;justify-content:space-between;width:100%}.speech-recognition-buttons{display:-ms-flexbox;display:flex;gap:10px;position:relative;bottom:15px;margin-right:16px}.speech-recognition-item{display:-ms-inline-flexbox;display:inline-flex;height:25px;padding:4px 12px;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;gap:8px;border-radius:15px;cursor:pointer;transition:background .1s ease-in}.speech-recognition-item i,.speech-recognition-item span{color:#fff}.speech-recognition-item-disabled{cursor:default!important}.speech-recognition-item-disabled *{opacity:.5}.speech-recognition-item-microphone{background:#428bca}.speech-recognition-item-microphone:not(.speech-recognition-item-disabled):hover{background:#063951}.speech-recognition-item-regular{background:#7892a1}.speech-recognition-item-regular:not(.speech-recognition-item-disabled):hover{background:#697882}.speech-recognition-item-aprove{background:#0c9348}.speech-recognition-item-aprove:not(.speech-recognition-item-disabled):hover{background:#063951}.speech-recognition-item-discard{background:#c13018}.speech-recognition-item-discard:not(.speech-recognition-item-disabled):hover{background:#063951}.speech-recognition-item-toolbar{background:#7892a1;display:-ms-flexbox;display:flex;border-radius:15px;-ms-flex-align:center;align-items:center;color:#fff;height:25px}.speech-recognition-item-toolbar i,.speech-recognition-item-toolbar span{cursor:pointer}.speech-recognition-item-toolbar i:not(:first-child),.speech-recognition-item-toolbar i:not(:last-child){padding:6px}.speech-recognition-item-toolbar i:first-child{padding-left:10px}.speech-recognition-item-toolbar i:last-child{padding-right:10px}.speech-recognition-text{color:#212533;font-size:12px;font-style:normal;font-weight:400;word-break:break-word}"]
221
242
  })
222
243
  ], SpeechRecognitionComponent);
223
244
  return SpeechRecognitionComponent;
224
245
  }());
225
246
  export { SpeechRecognitionComponent };
226
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlZWNoLXJlY29nbml0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb21wb25lbnRzL3NwZWVjaC1yZWNvZ25pdGlvbi9zcGVlY2gtcmVjb2duaXRpb24vc3BlZWNoLXJlY29nbml0aW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFPaEU7SUE4QkUsb0NBQ21CLHdCQUFrRCxFQUNsRCxtQkFBd0MsRUFDeEMsZ0JBQWtDO1FBSHJELGlCQUlLO1FBSGMsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUEvQjVDLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLGlDQUE0QixHQUFHLEVBQUUsQ0FBQztRQUNuQyxvQkFBZSxHQUFHLEVBQUUsQ0FBQztRQUNyQixnQ0FBMkIsR0FBRyxFQUFFLENBQUM7UUFDakMsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFDZCxlQUFVLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUNqQyxpQkFBWSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVB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O0lBN0IzQywwQkFBMEI7UUFMdEMsU0FBUyxDQUFDO1lBQ1QsUUFBUSxFQUFFLHNCQUFzQjtZQUNoQyx5b0ZBQWtEOztTQUVuRCxDQUFDO09BQ1csMEJBQTBCLENBZ010QztJQUFELGlDQUFDO0NBQUEsQUFoTUQsSUFnTUM7U0FoTVksMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTcGVlY2hSZWNvZ25pdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zcGVlY2gtcmVjb2duaXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBUZXh0VG9TcGVlY2hTZXJ2aWNlIH0gZnJvbSAnLi4vdGV4dC10by1zcGVlY2guc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Mtc3BlZWNoLXJlY29nbml0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NwZWVjaC1yZWNvZ25pdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NwZWVjaC1yZWNvZ25pdGlvbi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFNwZWVjaFJlY29nbml0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSB0ZXh0QXJlYUVsZW1lbnQ6IEhUTUxUZXh0QXJlYUVsZW1lbnQ7XG4gIEBJbnB1dCgpIGtlZXBDb250ZXh0ID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNwZWVjaFJlY29nbml0aW9uUGxhY2Vob2xkZXIgPSAnJztcbiAgcHJpdmF0ZSBfcmVjb2duaXplZFRleHQgPSAnJztcbiAgcHJpdmF0ZSBvcmlnaW5hbFRleHRBcmVhRWxlbWVudFRleHQgPSAnJztcbiAgcHJpdmF0ZSBpc0RvbmVTcGVha2luZyA9IGZhbHNlO1xuICBwcml2YXRlIHJlYWRvbmx5IG9uRGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IFZPSUNFX1NQRUVEUyA9IFswLjUsIDEsIDEuNSwgMl07XG4gIHByaXZhdGUgcmVhZG9ubHkga2V5ZG93bkV2ZW50TGlzdGVuZXIgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICBkaXNhYmxlZCA9IGZhbHNlO1xuICBpc1NwZWFraW5nID0gZmFsc2U7XG4gIHZvaWNlU3BlZWQgPSAxO1xuICBpc0Rpc2FibGVkTWljcm9waG9uZSA9IGZhbHNlO1xuXG4gIGNhblJlbmRlck1pY3JvcGhvbmUgPSB0cnVlO1xuICBjYW5SZW5kZXJUZXh0VG9TcGVlY2ggPSB0cnVlO1xuICBjYW5SZW5kZXJMaXN0ZW5pbmdUZXh0ID0gZmFsc2U7XG4gIGNhblJlbmRlckRpc2NhcmQgPSBmYWxzZTtcbiAgY2FuUmVuZGVyQXByb3ZlID0gZmFsc2U7XG4gIGNhblJlbmRlclRleHRUb1NwZWVjaFRvb2xiYXIgPSBmYWxzZTtcblxuICBpc1BsYXlpbmdUZXh0VG9TcGVlY2ggPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgcmVjb2duaXplZFRleHQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBzcGVlY2hSZWNvZ25pdGlvblNlcnZpY2U6IFNwZWVjaFJlY29nbml0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRleHRUb1NwZWVjaFNlcnZpY2U6IFRleHRUb1NwZWVjaFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmhhc1NwZWVjaFJlY29nbml0aW9uQnJvd3NlckFwaSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudGV4dEFyZWFFbGVtZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RleHRBcmVhRWxlbWVudCBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICB0aGlzLnRleHRBcmVhRWxlbWVudC5wbGFjZWhvbGRlciA9IHRoaXMuc3BlZWNoUmVjb2duaXRpb25QbGFjZWhvbGRlciA/IHRoaXMuc3BlZWNoUmVjb2duaXRpb25QbGFjZWhvbGRlciA6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFwicGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnRleHRfYXJlYV9zcGVlY2hfcmVjb2duaXRpb25fcGxhY2Vob2xkZXJcIik7XG4gICAgdGhpcy50ZXh0QXJlYUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMua2V5ZG93bkV2ZW50TGlzdGVuZXIpXG4gIH1cblxuICBvbkxpc3RlbigpIHtcbiAgICBpZiAodGhpcy5pc0Rpc2FibGVkTWljcm9waG9uZSB8fCB0aGlzLmlzTGlzdGVuaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZGlzYWJsZWQgPSB0cnVlO1xuICAgIHRoaXMuY2FuUmVuZGVyTWljcm9waG9uZSA9IGZhbHNlO1xuICAgIHRoaXMuY2FuUmVuZGVyTGlzdGVuaW5nVGV4dCA9IHRydWU7XG4gICAgdGhpcy5vcmlnaW5hbFRleHRBcmVhRWxlbWVudFRleHQgPSB0aGlzLnRleHRBcmVhRWxlbWVudC52YWx1ZTtcbiAgICB0aGlzLnRleHRBcmVhRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgIHRoaXMuaXNTcGVha2luZyA9IHRydWU7XG4gICAgdGhpcy5zcGVlY2hSZWNvZ25pdGlvblNlcnZpY2UubGlzdGVuKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSgoeyB0ZXh0LCBpc0ZpbmFsIH0pID0+IHtcbiAgICAgICAgdGhpcy5fcmVjb2duaXplZFRleHQgPSB0ZXh0O1xuICAgICAgICB0aGlzLnNldFRleHRBcmVhVmFsdWUodGV4dCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsVGV4dEFyZWFCb3R0b20oKTtcbiAgICAgICAgaWYgKGlzRmluYWwpIHtcbiAgICAgICAgICB0aGlzLmNhblJlbmRlckFwcm92ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5jYW5SZW5kZXJEaXNjYXJkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmNhblJlbmRlckxpc3RlbmluZ1RleHQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmlzU3BlYWtpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSwgKCkgPT4ge1xuICAgICAgICB0aGlzLmlzU3BlYWtpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jYW5SZW5kZXJNaWNyb3Bob25lID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc0Rpc2FibGVkTWljcm9waG9uZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNhblJlbmRlckxpc3RlbmluZ1RleHQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgc2Nyb2xsVGV4dEFyZWFCb3R0b20oKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnRleHRBcmVhRWxlbWVudC5zY3JvbGxUb3AgPSB0aGlzLnRleHRBcmVhRWxlbWVudC5zY3JvbGxIZWlnaHQ7XG4gICAgfSwgMTIwKVxuICB9XG5cbiAgb25PcGVuVG9vbGJhcigpIHtcbiAgICBpZiAodGhpcy5pc0Rpc2FibGVkVGV4dFRvU3BlZWNoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY2FuUmVuZGVyVGV4dFRvU3BlZWNoVG9vbGJhciA9IHRydWU7XG4gICAgdGhpcy5jYW5SZW5kZXJUZXh0VG9TcGVlY2ggPSBmYWxzZTtcbiAgICB0aGlzLmlzUGxheWluZ1RleHRUb1NwZWVjaCA9IHRydWU7XG4gICAgdGhpcy5zcGVhaygpO1xuICB9XG5cbiAgb25DbG9zZVRvb2xiYXIoKSB7XG4gICAgdGhpcy5jYW5SZW5kZXJUZXh0VG9TcGVlY2hUb29sYmFyID0gZmFsc2U7XG4gICAgdGhpcy5jYW5SZW5kZXJUZXh0VG9TcGVlY2ggPSB0cnVlO1xuICAgIHRoaXMuaXNQbGF5aW5nVGV4dFRvU3BlZWNoID0gZmFsc2U7XG4gICAgdGhpcy50ZXh0VG9TcGVlY2hTZXJ2aWNlLmNhbmNlbCgpO1xuICAgIHRoaXMudm9pY2VTcGVlZCA9IDE7XG4gIH1cbiAgb25EaXNjYXJkKCkge1xuICAgIHRoaXMuY2FuUmVuZGVyQXByb3ZlID0gZmFsc2U7XG4gICAgdGhpcy5jYW5SZW5kZXJEaXNjYXJkID0gZmFsc2U7XG4gICAgdGhpcy5jYW5SZW5kZXJNaWNyb3Bob25lID0gdHJ1ZTtcbiAgICB0aGlzLmNhblJlbmRlclRleHRUb1NwZWVjaFRvb2xiYXIgPSBmYWxzZTtcbiAgICB0aGlzLmNhblJlbmRlclRleHRUb1NwZWVjaCA9IHRydWU7XG4gICAgdGhpcy5fcmVjb2duaXplZFRleHQgPSAnJztcbiAgICB0aGlzLnNldFRleHRBcmVhVmFsdWUodGhpcy5vcmlnaW5hbFRleHRBcmVhRWxlbWVudFRleHQpO1xuICAgIHRoaXMuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLnRleHRUb1NwZWVjaFNlcnZpY2UuY2FuY2VsKCk7XG4gIH1cblxuICBvbkFwcm92ZSgpIHtcbiAgICB0aGlzLmNhblJlbmRlckFwcm92ZSA9IGZhbHNlO1xuICAgIHRoaXMuY2FuUmVuZGVyRGlzY2FyZCA9IGZhbHNlO1xuICAgIHRoaXMuY2FuUmVuZGVyTWljcm9waG9uZSA9IHRydWU7XG4gICAgdGhpcy5jYW5SZW5kZXJUZXh0VG9TcGVlY2hUb29sYmFyID0gZmFsc2U7XG4gICAgdGhpcy5jYW5SZW5kZXJUZXh0VG9TcGVlY2ggPSB0cnVlO1xuICAgIGlmICh0aGlzLmtlZXBDb250ZXh0KSB7XG4gICAgICBjb25zdCBicmVha0xpbmUgPSB0aGlzLm9yaWdpbmFsVGV4dEFyZWFFbGVtZW50VGV4dC5sZW5ndGggPiAwID8gJ1xcbicgOiAnJztcbiAgICAgIHRoaXMub3JpZ2luYWxUZXh0QXJlYUVsZW1lbnRUZXh0ICs9IGAke2JyZWFrTGluZX0ke3RoaXMuX3JlY29nbml6ZWRUZXh0fWBcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcmlnaW5hbFRleHRBcmVhRWxlbWVudFRleHQgPSB0aGlzLl9yZWNvZ25pemVkVGV4dFxuICAgIH1cbiAgICB0aGlzLnJlY29nbml6ZWRUZXh0LmVtaXQodGhpcy5rZWVwQ29udGV4dCA/IHRoaXMub3JpZ2luYWxUZXh0QXJlYUVsZW1lbnRUZXh0IDogdGhpcy5fcmVjb2duaXplZFRleHQpO1xuICAgIHRoaXMuc2Nyb2xsVGV4dEFyZWFCb3R0b20oKTtcbiAgICB0aGlzLl9yZWNvZ25pemVkVGV4dCA9ICcnO1xuICAgIHRoaXMuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLnRleHRUb1NwZWVjaFNlcnZpY2UuY2FuY2VsKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm9uRGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMub25EZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgdG9nZ2xlVGV4dFRvU3BlZWNoKCkge1xuICAgIGlmICh0aGlzLmlzUGxheWluZ1RleHRUb1NwZWVjaCkge1xuICAgICAgdGhpcy50ZXh0VG9TcGVlY2hTZXJ2aWNlLnBhdXNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmlzRG9uZVNwZWFraW5nKSB7XG4gICAgICAgIHRoaXMuc3BlYWsoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGV4dFRvU3BlZWNoU2VydmljZS5yZXN1bWUoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5pc1BsYXlpbmdUZXh0VG9TcGVlY2ggPSAhdGhpcy5pc1BsYXlpbmdUZXh0VG9TcGVlY2g7XG4gIH1cblxuICByZXN0YXJ0VGV4dFRvU3BlZWNoKCkge1xuICAgIHRoaXMuaXNQbGF5aW5nVGV4dFRvU3BlZWNoID0gdHJ1ZTtcbiAgICB0aGlzLnRleHRUb1NwZWVjaFNlcnZpY2UuY2FuY2VsKCk7XG4gICAgdGhpcy5zcGVhaygpO1xuICB9XG5cbiAgdXBkYXRlVm9pY2VTcGVlZCgpIHtcbiAgICBjb25zdCB2b2ljZVNwZWVkSW5kZXggPSB0aGlzLlZPSUNFX1NQRUVEUy5pbmRleE9mKHRoaXMudm9pY2VTcGVlZCk7XG4gICAgY29uc3QgbmV4dFZvaWNlU3BlZWRJbmRleCA9IHRoaXMuVk9JQ0VfU1BFRURTW3ZvaWNlU3BlZWRJbmRleCArIDFdID8gdm9pY2VTcGVlZEluZGV4ICsgMSA6IDA7XG4gICAgdGhpcy52b2ljZVNwZWVkID0gdGhpcy5WT0lDRV9TUEVFRFNbbmV4dFZvaWNlU3BlZWRJbmRleF07XG4gICAgdGhpcy50ZXh0VG9TcGVlY2hTZXJ2aWNlLmNhbmNlbCgpO1xuICAgIHRoaXMuc3BlYWsoKVxuICB9XG5cbiAgc3RvcExpc3RlbmluZygpIHtcbiAgICB0aGlzLnNwZWVjaFJlY29nbml0aW9uU2VydmljZS5zdG9wKCk7XG4gIH1cblxuICBnZXQgaXNMaXN0ZW5pbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3BlZWNoUmVjb2duaXRpb25TZXJ2aWNlLmlzTGlzdGVuaW5nXG4gIH1cblxuICBnZXQgaGFzU3BlZWNoUmVjb2duaXRpb25Ccm93c2VyQXBpKCkge1xuICAgIHJldHVybiB0aGlzLnNwZWVjaFJlY29nbml0aW9uU2VydmljZS5oYXNTdXBwb3J0U3BlZWNoUmVjb2duaXRpb247XG4gIH1cblxuICBnZXQgaXNEaXNhYmxlZFRleHRUb1NwZWVjaCgpIHtcbiAgICBjb25zdCBoYXNUZXh0VG9TcGVlY2hWb2ljZSA9IHRoaXMudGV4dFRvU3BlZWNoU2VydmljZS5oYXNWb2ljZTtcbiAgICByZXR1cm4gIXRoaXMuX3JlY29nbml6ZWRUZXh0IHx8ICFoYXNUZXh0VG9TcGVlY2hWb2ljZSB8fCB0aGlzLmlzTGlzdGVuaW5nO1xuICB9XG4gIHByaXZhdGUgc2V0VGV4dEFyZWFWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy50ZXh0QXJlYUVsZW1lbnQudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgc3BlYWsoKSB7XG4gICAgdGhpcy5pc0RvbmVTcGVha2luZyA9IGZhbHNlO1xuICAgIHRoaXMudGV4dFRvU3BlZWNoU2VydmljZS5zcGVhayh0aGlzLl9yZWNvZ25pemVkVGV4dCwgdGhpcy52b2ljZVNwZWVkKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuaXNQbGF5aW5nVGV4dFRvU3BlZWNoID0gZmFsc2U7XG4gICAgICB0aGlzLmlzRG9uZVNwZWFraW5nID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG59XG4iXX0=
247
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlZWNoLXJlY29nbml0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb21wb25lbnRzL3NwZWVjaC1yZWNvZ25pdGlvbi9zcGVlY2gtcmVjb2duaXRpb24vc3BlZWNoLXJlY29nbml0aW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFPaEU7SUErQkUsb0NBQ21CLHdCQUFrRCxFQUNsRCxtQkFBd0MsRUFDeEMsZ0JBQWtDO1FBSHJELGlCQUlLO1FBSGMsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUEvQjVDLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLGlDQUE0QixHQUFHLEVBQUUsQ0FBQztRQUNuQyxvQkFBZSxHQUFHLEVBQUUsQ0FBQztRQUNyQixnQ0FBMkIsR0FBRyxFQUFFLENBQUM7UUFDakMsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGVBQVUsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ2pDLGlCQUFZLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoQyx5QkFBb0IsR0FBRyxVQUFDLEtBQW9CO1lBQzNELElBQUksS0FBSSxDQUFDLFFBQVEsRUFBRTtnQkFDakIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2FBQ3hCO1FBQ0gsQ0FBQyxDQUFBO1FBRUQsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQix5QkFBb0IsR0FBRyxLQUFLLENBQUM7UUFDN0IsZUFBVSxHQUFHLENBQUMsQ0FBQztRQUNmLHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQUU3Qix3QkFBbUIsR0FBRyxJQUFJLENBQUM7UUFDM0IsMEJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQzdCLDJCQUFzQixHQUFHLEtBQUssQ0FBQztRQUMvQixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDekIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFDeEIsaUNBQTRCLEdBQUcsS0FBSyxDQUFDO1FBRXJDLDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQUVwQixtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7SUFLbEQsQ0FBQzttQ0FuQ00sMEJBQTBCO0lBcUNyQyw2Q0FBUSxHQUFSO1FBQUEsaUJBY0M7UUFiQyxJQUFJLENBQUMsSUFBSSxDQUFDLDhCQUE4QixFQUFFO1lBQ3hDLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztTQUNoRDtRQUNELElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLHNFQUFzRSxDQUFDLENBQUM7UUFDak4sSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUE7UUFDM0UsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFVBQUMsTUFBTTtZQUNoRyxJQUFJLE1BQU0sS0FBSyxRQUFRLEVBQUU7Z0JBQ3ZCLEtBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUN2QjtRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELDZDQUFRLEdBQVI7UUFBQSxpQkE2QkM7UUE1QkMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNqRCxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7UUFDbkMsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDO1FBQzlELElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUU7YUFDbkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDaEMsU0FBUyxDQUFDLFVBQUMsRUFBaUI7Z0JBQWYsY0FBSSxFQUFFLG9CQUFPO1lBQ3pCLEtBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQzVCLEtBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QixLQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUM1QixJQUFJLE9BQU8sRUFBRTtnQkFDWCxLQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztnQkFDNUIsS0FBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztnQkFDN0IsS0FBSSxDQUFDLHNCQUFzQixHQUFHLEtBQUssQ0FBQztnQkFDcEMsS0FBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQzthQUNuQztRQUNILENBQUMsRUFBRTtZQUNELEtBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7WUFDbEMsS0FBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztZQUNoQyxLQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1lBQ2xDLEtBQUksQ0FBQyxzQkFBc0IsR0FBRyxLQUFLLENBQUM7WUFDcEMsS0FBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0lBRU8seURBQW9CLEdBQTVCO1FBQUEsaUJBSUM7UUFIQyxVQUFVLENBQUM7WUFDVCxLQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsR0FBRyxLQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQztRQUNyRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUE7SUFDVCxDQUFDO0lBRUQsa0RBQWEsR0FBYjtRQUNFLElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFO1lBQy9CLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUM7UUFDekMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQztRQUNuQyw0QkFBMEIsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQ2pELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFRCxtREFBYyxHQUFkO1FBQ0UsSUFBSSxDQUFDLDRCQUE0QixHQUFHLEtBQUssQ0FBQztRQUMxQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLDRCQUEwQixDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDcEQsQ0FBQztJQUNELDhDQUFTLEdBQVQ7UUFDRSxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM3QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7UUFDaEMsSUFBSSxDQUFDLDRCQUE0QixHQUFHLEtBQUssQ0FBQztRQUMxQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4Qiw0QkFBMEIsQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQ3BELENBQUM7SUFFRCw2Q0FBUSxHQUFSO1FBQ0UsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDN0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUM5QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxLQUFLLENBQUM7UUFDMUMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUNsQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsSUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzFFLElBQUksQ0FBQywyQkFBMkIsSUFBSSxLQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBaUIsQ0FBQTtTQUMxRTthQUFNO1lBQ0wsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUE7U0FDeEQ7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNyRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELGdEQUFXLEdBQVg7UUFDRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELHVEQUFrQixHQUFsQjtRQUNFLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQzlCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNsQzthQUFNO1lBQ0wsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUNkO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUNuQztTQUNGO1FBQ0QsSUFBSSxDQUFDLHFCQUFxQixHQUFHLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDO0lBQzNELENBQUM7SUFFRCx3REFBbUIsR0FBbkI7UUFDRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVELHFEQUFnQixHQUFoQjtRQUNFLElBQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNuRSxJQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0YsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUNkLENBQUM7SUFFRCxrREFBYSxHQUFiO1FBQ0UsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxzQkFBSSxtREFBVzthQUFmO1lBQ0UsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsV0FBVyxDQUFBO1FBQ2xELENBQUM7OztPQUFBO0lBRUQsc0JBQUksc0VBQThCO2FBQWxDO1lBQ0UsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsMkJBQTJCLENBQUM7UUFDbkUsQ0FBQzs7O09BQUE7SUFFRCxzQkFBSSw4REFBc0I7YUFBMUI7WUFDRSxJQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUM7WUFDL0QsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLDRCQUEwQixDQUFDLGNBQWMsQ0FBQztRQUN0SCxDQUFDOzs7T0FBQTtJQUVPLHFEQUFnQixHQUF4QixVQUF5QixLQUFhO1FBQ3BDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQyxDQUFDO0lBRU8scURBQWdCLEdBQXhCO1FBQ0UsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQztRQUNuQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVPLDBDQUFLLEdBQWI7UUFBQSxpQkFPQztRQU5DLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDaEMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUNsQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUN0RSxLQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1lBQ25DLEtBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsc0JBQVksb0RBQVk7YUFBeEI7WUFDRSxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDO1FBQ3BDLENBQUM7OztPQUFBOztJQTlNYyx5Q0FBYyxHQUFHLEtBQUssQ0FBQzs7Z0JBK0JPLHdCQUF3QjtnQkFDN0IsbUJBQW1CO2dCQUN0QixnQkFBZ0I7O0lBaEM1QztRQUFSLEtBQUssRUFBRTt1RUFBc0M7SUFDckM7UUFBUixLQUFLLEVBQUU7bUVBQXFCO0lBQ3BCO1FBQVIsS0FBSyxFQUFFO29GQUFtQztJQTBCakM7UUFBVCxNQUFNLEVBQUU7c0VBQTZDO0lBOUIzQywwQkFBMEI7UUFMdEMsU0FBUyxDQUFDO1lBQ1QsUUFBUSxFQUFFLHNCQUFzQjtZQUNoQyxtcEZBQWtEOztTQUVuRCxDQUFDO09BQ1csMEJBQTBCLENBaU50QztJQUFELGlDQUFDO0NBQUEsQUFqTkQsSUFpTkM7U0FqTlksMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTcGVlY2hSZWNvZ25pdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zcGVlY2gtcmVjb2duaXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBUZXh0VG9TcGVlY2hTZXJ2aWNlIH0gZnJvbSAnLi4vdGV4dC10by1zcGVlY2guc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Mtc3BlZWNoLXJlY29nbml0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NwZWVjaC1yZWNvZ25pdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NwZWVjaC1yZWNvZ25pdGlvbi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFNwZWVjaFJlY29nbml0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHN0YXRpYyBUT09MQkFSX0FDVElWRSA9IGZhbHNlO1xuICBASW5wdXQoKSB0ZXh0QXJlYUVsZW1lbnQ6IEhUTUxUZXh0QXJlYUVsZW1lbnQ7XG4gIEBJbnB1dCgpIGtlZXBDb250ZXh0ID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNwZWVjaFJlY29nbml0aW9uUGxhY2Vob2xkZXIgPSAnJztcbiAgcHJpdmF0ZSBfcmVjb2duaXplZFRleHQgPSAnJztcbiAgcHJpdmF0ZSBvcmlnaW5hbFRleHRBcmVhRWxlbWVudFRleHQgPSAnJztcbiAgcHJpdmF0ZSBpc0RvbmVUZXh0VG9TcGVlY2ggPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBvbkRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBWT0lDRV9TUEVFRFMgPSBbMC41LCAxLCAxLjUsIDJdO1xuICBwcml2YXRlIHJlYWRvbmx5IGtleWRvd25FdmVudExpc3RlbmVyID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgZGlzYWJsZWQgPSBmYWxzZTtcbiAgaXNMaXN0ZW5pbmdVc2VyVm9pY2UgPSBmYWxzZTtcbiAgdm9pY2VTcGVlZCA9IDE7XG4gIGlzRGlzYWJsZWRNaWNyb3Bob25lID0gZmFsc2U7XG5cbiAgY2FuUmVuZGVyTWljcm9waG9uZSA9IHRydWU7XG4gIGNhblJlbmRlclRleHRUb1NwZWVjaCA9IHRydWU7XG4gIGNhblJlbmRlckxpc3RlbmluZ1RleHQgPSBmYWxzZTtcbiAgY2FuUmVuZGVyRGlzY2FyZCA9IGZhbHNlO1xuICBjYW5SZW5kZXJBcHJvdmUgPSBmYWxzZTtcbiAgY2FuUmVuZGVyVGV4dFRvU3BlZWNoVG9vbGJhciA9IGZhbHNlO1xuXG4gIGlzUGxheWluZ1RleHRUb1NwZWVjaCA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSByZWNvZ25pemVkVGV4dCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNwZWVjaFJlY29nbml0aW9uU2VydmljZTogU3BlZWNoUmVjb2duaXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGV4dFRvU3BlZWNoU2VydmljZTogVGV4dFRvU3BlZWNoU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2VcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaGFzU3BlZWNoUmVjb2duaXRpb25Ccm93c2VyQXBpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy50ZXh0QXJlYUVsZW1lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndGV4dEFyZWFFbGVtZW50IGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIHRoaXMudGV4dEFyZWFFbGVtZW50LnBsYWNlaG9sZGVyID0gdGhpcy5zcGVlY2hSZWNvZ25pdGlvblBsYWNlaG9sZGVyID8gdGhpcy5zcGVlY2hSZWNvZ25pdGlvblBsYWNlaG9sZGVyIDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXCJwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMudGV4dF9hcmVhX3NwZWVjaF9yZWNvZ25pdGlvbl9wbGFjZWhvbGRlclwiKTtcbiAgICB0aGlzLnRleHRBcmVhRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5rZXlkb3duRXZlbnRMaXN0ZW5lcilcbiAgICB0aGlzLnNwZWVjaFJlY29nbml0aW9uU2VydmljZS5taWNyb3Bob25lU3RhdHVzJC5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpKS5zdWJzY3JpYmUoKHN0YXR1cykgPT4ge1xuICAgICAgaWYgKHN0YXR1cyA9PT0gJ2FjdGl2ZScpIHtcbiAgICAgICAgdGhpcy5vbkNsb3NlVG9vbGJhcigpO1xuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBvbkxpc3RlbigpIHtcbiAgICBpZiAodGhpcy5pc0Rpc2FibGVkTWljcm9waG9uZSB8fCB0aGlzLmlzTGlzdGVuaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZGlzYWJsZWQgPSB0cnVlO1xuICAgIHRoaXMuY2FuUmVuZGVyTWljcm9waG9uZSA9IGZhbHNlO1xuICAgIHRoaXMuY2FuUmVuZGVyTGlzdGVuaW5nVGV4dCA9IHRydWU7XG4gICAgdGhpcy5vcmlnaW5hbFRleHRBcmVhRWxlbWVudFRleHQgPSB0aGlzLnRleHRBcmVhRWxlbWVudC52YWx1ZTtcbiAgICB0aGlzLnRleHRBcmVhRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgIHRoaXMuaXNMaXN0ZW5pbmdVc2VyVm9pY2UgPSB0cnVlO1xuICAgIHRoaXMuc3BlZWNoUmVjb2duaXRpb25TZXJ2aWNlLmxpc3RlbigpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoKHsgdGV4dCwgaXNGaW5hbCB9KSA9PiB7XG4gICAgICAgIHRoaXMuX3JlY29nbml6ZWRUZXh0ID0gdGV4dDtcbiAgICAgICAgdGhpcy5zZXRUZXh0QXJlYVZhbHVlKHRleHQpO1xuICAgICAgICB0aGlzLnNjcm9sbFRleHRBcmVhQm90dG9tKCk7XG4gICAgICAgIGlmIChpc0ZpbmFsKSB7XG4gICAgICAgICAgdGhpcy5jYW5SZW5kZXJBcHJvdmUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuY2FuUmVuZGVyRGlzY2FyZCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5jYW5SZW5kZXJMaXN0ZW5pbmdUZXh0ID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5pc0xpc3RlbmluZ1VzZXJWb2ljZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9LCAoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNMaXN0ZW5pbmdVc2VyVm9pY2UgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jYW5SZW5kZXJNaWNyb3Bob25lID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc0Rpc2FibGVkTWljcm9waG9uZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNhblJlbmRlckxpc3RlbmluZ1RleHQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgc2Nyb2xsVGV4dEFyZWFCb3R0b20oKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnRleHRBcmVhRWxlbWVudC5zY3JvbGxUb3AgPSB0aGlzLnRleHRBcmVhRWxlbWVudC5zY3JvbGxIZWlnaHQ7XG4gICAgfSwgMTIwKVxuICB9XG5cbiAgb25PcGVuVG9vbGJhcigpIHtcbiAgICBpZiAodGhpcy5pc0Rpc2FibGVkVGV4dFRvU3BlZWNoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY2FuUmVuZGVyVGV4dFRvU3BlZWNoVG9vbGJhciA9IHRydWU7XG4gICAgdGhpcy5jYW5SZW5kZXJUZXh0VG9TcGVlY2ggPSBmYWxzZTtcbiAgICBTcGVlY2hSZWNvZ25pdGlvbkNvbXBvbmVudC5UT09MQkFSX0FDVElWRSA9IHRydWU7XG4gICAgdGhpcy5zcGVhaygpO1xuICB9XG5cbiAgb25DbG9zZVRvb2xiYXIoKSB7XG4gICAgdGhpcy5jYW5SZW5kZXJUZXh0VG9TcGVlY2hUb29sYmFyID0gZmFsc2U7XG4gICAgdGhpcy5jYW5SZW5kZXJUZXh0VG9TcGVlY2ggPSB0cnVlO1xuICAgIHRoaXMuc3RvcFRleHRUb1NwZWVjaCgpO1xuICAgIHRoaXMudm9pY2VTcGVlZCA9IDE7XG4gICAgU3BlZWNoUmVjb2duaXRpb25Db21wb25lbnQuVE9PTEJBUl9BQ1RJVkUgPSBmYWxzZTtcbiAgfVxuICBvbkRpc2NhcmQoKSB7XG4gICAgdGhpcy5jYW5SZW5kZXJBcHJvdmUgPSBmYWxzZTtcbiAgICB0aGlzLmNhblJlbmRlckRpc2NhcmQgPSBmYWxzZTtcbiAgICB0aGlzLmNhblJlbmRlck1pY3JvcGhvbmUgPSB0cnVlO1xuICAgIHRoaXMuY2FuUmVuZGVyVGV4dFRvU3BlZWNoVG9vbGJhciA9IGZhbHNlO1xuICAgIHRoaXMuY2FuUmVuZGVyVGV4dFRvU3BlZWNoID0gdHJ1ZTtcbiAgICB0aGlzLl9yZWNvZ25pemVkVGV4dCA9ICcnO1xuICAgIHRoaXMuc2V0VGV4dEFyZWFWYWx1ZSh0aGlzLm9yaWdpbmFsVGV4dEFyZWFFbGVtZW50VGV4dCk7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMuc3RvcFRleHRUb1NwZWVjaCgpO1xuICAgIFNwZWVjaFJlY29nbml0aW9uQ29tcG9uZW50LlRPT0xCQVJfQUNUSVZFID0gZmFsc2U7XG4gIH1cblxuICBvbkFwcm92ZSgpIHtcbiAgICB0aGlzLmNhblJlbmRlckFwcm92ZSA9IGZhbHNlO1xuICAgIHRoaXMuY2FuUmVuZGVyRGlzY2FyZCA9IGZhbHNlO1xuICAgIHRoaXMuY2FuUmVuZGVyTWljcm9waG9uZSA9IHRydWU7XG4gICAgdGhpcy5jYW5SZW5kZXJUZXh0VG9TcGVlY2hUb29sYmFyID0gZmFsc2U7XG4gICAgdGhpcy5jYW5SZW5kZXJUZXh0VG9TcGVlY2ggPSB0cnVlO1xuICAgIGlmICh0aGlzLmtlZXBDb250ZXh0KSB7XG4gICAgICBjb25zdCBicmVha0xpbmUgPSB0aGlzLm9yaWdpbmFsVGV4dEFyZWFFbGVtZW50VGV4dC5sZW5ndGggPiAwID8gJ1xcbicgOiAnJztcbiAgICAgIHRoaXMub3JpZ2luYWxUZXh0QXJlYUVsZW1lbnRUZXh0ICs9IGAke2JyZWFrTGluZX0ke3RoaXMuX3JlY29nbml6ZWRUZXh0fWBcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcmlnaW5hbFRleHRBcmVhRWxlbWVudFRleHQgPSB0aGlzLl9yZWNvZ25pemVkVGV4dFxuICAgIH1cbiAgICB0aGlzLnJlY29nbml6ZWRUZXh0LmVtaXQodGhpcy5rZWVwQ29udGV4dCA/IHRoaXMub3JpZ2luYWxUZXh0QXJlYUVsZW1lbnRUZXh0IDogdGhpcy5fcmVjb2duaXplZFRleHQpO1xuICAgIHRoaXMuc2Nyb2xsVGV4dEFyZWFCb3R0b20oKTtcbiAgICB0aGlzLl9yZWNvZ25pemVkVGV4dCA9ICcnO1xuICAgIHRoaXMuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLnRleHRUb1NwZWVjaFNlcnZpY2UuY2FuY2VsKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm9uRGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMub25EZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgdG9nZ2xlVGV4dFRvU3BlZWNoKCkge1xuICAgIGlmICh0aGlzLmlzUGxheWluZ1RleHRUb1NwZWVjaCkge1xuICAgICAgdGhpcy50ZXh0VG9TcGVlY2hTZXJ2aWNlLnBhdXNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmlzRG9uZVRleHRUb1NwZWVjaCkge1xuICAgICAgICB0aGlzLnNwZWFrKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRleHRUb1NwZWVjaFNlcnZpY2UucmVzdW1lKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuaXNQbGF5aW5nVGV4dFRvU3BlZWNoID0gIXRoaXMuaXNQbGF5aW5nVGV4dFRvU3BlZWNoO1xuICB9XG5cbiAgcmVzdGFydFRleHRUb1NwZWVjaCgpIHtcbiAgICB0aGlzLnRleHRUb1NwZWVjaFNlcnZpY2UuY2FuY2VsKCk7XG4gICAgdGhpcy5zcGVhaygpO1xuICB9XG5cbiAgdXBkYXRlVm9pY2VTcGVlZCgpIHtcbiAgICBjb25zdCB2b2ljZVNwZWVkSW5kZXggPSB0aGlzLlZPSUNFX1NQRUVEUy5pbmRleE9mKHRoaXMudm9pY2VTcGVlZCk7XG4gICAgY29uc3QgbmV4dFZvaWNlU3BlZWRJbmRleCA9IHRoaXMuVk9JQ0VfU1BFRURTW3ZvaWNlU3BlZWRJbmRleCArIDFdID8gdm9pY2VTcGVlZEluZGV4ICsgMSA6IDA7XG4gICAgdGhpcy52b2ljZVNwZWVkID0gdGhpcy5WT0lDRV9TUEVFRFNbbmV4dFZvaWNlU3BlZWRJbmRleF07XG4gICAgdGhpcy50ZXh0VG9TcGVlY2hTZXJ2aWNlLmNhbmNlbCgpO1xuICAgIHRoaXMuc3BlYWsoKVxuICB9XG5cbiAgc3RvcExpc3RlbmluZygpIHtcbiAgICB0aGlzLnNwZWVjaFJlY29nbml0aW9uU2VydmljZS5zdG9wKCk7XG4gIH1cblxuICBnZXQgaXNMaXN0ZW5pbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3BlZWNoUmVjb2duaXRpb25TZXJ2aWNlLmlzTGlzdGVuaW5nXG4gIH1cblxuICBnZXQgaGFzU3BlZWNoUmVjb2duaXRpb25Ccm93c2VyQXBpKCkge1xuICAgIHJldHVybiB0aGlzLnNwZWVjaFJlY29nbml0aW9uU2VydmljZS5oYXNTdXBwb3J0U3BlZWNoUmVjb2duaXRpb247XG4gIH1cblxuICBnZXQgaXNEaXNhYmxlZFRleHRUb1NwZWVjaCgpIHtcbiAgICBjb25zdCBoYXNUZXh0VG9TcGVlY2hWb2ljZSA9IHRoaXMudGV4dFRvU3BlZWNoU2VydmljZS5oYXNWb2ljZTtcbiAgICByZXR1cm4gIXRoaXMudGV4dFRvU3BlZWNoIHx8ICFoYXNUZXh0VG9TcGVlY2hWb2ljZSB8fCB0aGlzLmlzTGlzdGVuaW5nIHx8IFNwZWVjaFJlY29nbml0aW9uQ29tcG9uZW50LlRPT0xCQVJfQUNUSVZFO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRUZXh0QXJlYVZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRleHRBcmVhRWxlbWVudC52YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9wVGV4dFRvU3BlZWNoKCkge1xuICAgIHRoaXMuaXNQbGF5aW5nVGV4dFRvU3BlZWNoID0gZmFsc2U7XG4gICAgdGhpcy50ZXh0VG9TcGVlY2hTZXJ2aWNlLmNhbmNlbCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzcGVhaygpIHtcbiAgICB0aGlzLmlzRG9uZVRleHRUb1NwZWVjaCA9IGZhbHNlO1xuICAgIHRoaXMuaXNQbGF5aW5nVGV4dFRvU3BlZWNoID0gdHJ1ZTtcbiAgICB0aGlzLnRleHRUb1NwZWVjaFNlcnZpY2Uuc3BlYWsodGhpcy50ZXh0VG9TcGVlY2gsIHRoaXMudm9pY2VTcGVlZCkudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLmlzUGxheWluZ1RleHRUb1NwZWVjaCA9IGZhbHNlO1xuICAgICAgdGhpcy5pc0RvbmVUZXh0VG9TcGVlY2ggPSB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgdGV4dFRvU3BlZWNoKCkge1xuICAgIHJldHVybiB0aGlzLnRleHRBcmVhRWxlbWVudC52YWx1ZTtcbiAgfVxuXG59XG4iXX0=
@@ -1,4 +1,4 @@
1
- import { __decorate } from "tslib";
1
+ import { __awaiter, __decorate, __generator } from "tslib";
2
2
  import { Injectable, NgZone } from '@angular/core';
3
3
  import { Subject } from 'rxjs';
4
4
  import { LocaleService } from '../locale/locale.service';
@@ -16,9 +16,8 @@ var SpeechRecognitionService = /** @class */ (function () {
16
16
  this.translateService = translateService;
17
17
  this.hasSupportSpeechRecognition = false;
18
18
  this.isListening = false;
19
- this.hasMicrophoneAccess = false;
19
+ this.microphoneStatus$ = new Subject();
20
20
  this.TIMEOUT_NO_MESSAGE = 3000;
21
- this.verifyMicrophoneState();
22
21
  this.setRecognition();
23
22
  }
24
23
  SpeechRecognitionService.prototype.listen = function () {
@@ -27,82 +26,73 @@ var SpeechRecognitionService = /** @class */ (function () {
27
26
  if (this.isListening) {
28
27
  speechSubject.error('Already listening');
29
28
  }
30
- else if (!this.hasMicrophoneAccess) {
31
- this.isListening = false;
32
- this.toastService.show({ severity: 'error', text: this.translateService.instant('platform.angular_components.no_microphone_permission') });
33
- speechSubject.error('Microphone access is disabled');
34
- }
35
- else {
36
- this.isListening = true;
37
- this.recognition.continuous = true;
38
- this.recognition.interimResults = true;
39
- this.recognition.maxAlternatives = 1;
40
- var silenceTimer_1;
41
- var restartSilenceTimer_1 = function () {
42
- if (silenceTimer_1 !== undefined) {
43
- clearTimeout(silenceTimer_1);
29
+ this.hasMicrophoneAccess.then(function (hasAccess) {
30
+ if (!hasAccess) {
31
+ _this.toastService.show({ severity: 'error', text: _this.translateService.instant('platform.angular_components.no_microphone_permission') });
32
+ speechSubject.error('Microphone access is disabled');
33
+ return;
34
+ }
35
+ _this.microphoneStatus$.next('active');
36
+ _this.isListening = true;
37
+ _this.recognition.continuous = true;
38
+ _this.recognition.interimResults = true;
39
+ _this.recognition.maxAlternatives = 1;
40
+ var silenceTimer;
41
+ var restartSilenceTimer = function () {
42
+ if (silenceTimer !== undefined) {
43
+ clearTimeout(silenceTimer);
44
44
  }
45
- silenceTimer_1 = setTimeout(function () {
45
+ silenceTimer = setTimeout(function () {
46
46
  _this.recognition.stop();
47
47
  }, _this.TIMEOUT_NO_MESSAGE);
48
48
  };
49
- var fullTranscript_1 = '';
50
- var interimTranscript_1 = '';
51
- this.recognition.onresult = function (event) {
49
+ var fullTranscript = '';
50
+ var interimTranscript = '';
51
+ _this.recognition.onresult = function (event) {
52
52
  _this.ngZone.run(function () {
53
- restartSilenceTimer_1();
53
+ restartSilenceTimer();
54
54
  var interimTranscript = '';
55
55
  for (var i = event.resultIndex; i < event.results.length; ++i) {
56
56
  var transcript = event.results[i][0].transcript;
57
57
  if (event.results[i].isFinal) {
58
- fullTranscript_1 += transcript + '\n';
58
+ fullTranscript += transcript + '\n';
59
59
  }
60
60
  else {
61
61
  interimTranscript += transcript;
62
62
  }
63
63
  }
64
64
  interimTranscript = interimTranscript;
65
- speechSubject.next({ text: fullTranscript_1 + interimTranscript, isFinal: false });
65
+ speechSubject.next({ text: fullTranscript + interimTranscript, isFinal: false });
66
66
  });
67
67
  };
68
- this.recognition.onerror = function () {
68
+ _this.recognition.onerror = function () {
69
69
  _this.ngZone.run(function () {
70
- if (silenceTimer_1 !== undefined) {
71
- clearTimeout(silenceTimer_1);
70
+ if (silenceTimer !== undefined) {
71
+ clearTimeout(silenceTimer);
72
72
  }
73
73
  _this.isListening = false;
74
74
  speechSubject.error('Speech recognition error');
75
+ _this.microphoneStatus$.next('inactive');
75
76
  });
76
77
  };
77
- this.recognition.onend = function () {
78
+ _this.recognition.onend = function () {
78
79
  _this.ngZone.run(function () {
79
- if (silenceTimer_1 !== undefined) {
80
- clearTimeout(silenceTimer_1);
80
+ if (silenceTimer !== undefined) {
81
+ clearTimeout(silenceTimer);
81
82
  }
82
- speechSubject.next({ text: fullTranscript_1 + interimTranscript_1, isFinal: true });
83
+ speechSubject.next({ text: fullTranscript + interimTranscript, isFinal: true });
83
84
  _this.isListening = false;
84
85
  speechSubject.complete();
86
+ _this.microphoneStatus$.next('inactive');
85
87
  });
86
88
  };
87
- this.recognition.start();
88
- }
89
+ _this.recognition.start();
90
+ });
89
91
  return speechSubject;
90
92
  };
91
93
  SpeechRecognitionService.prototype.stop = function () {
92
94
  this.recognition.stop();
93
95
  };
94
- SpeechRecognitionService.prototype.verifyMicrophoneState = function () {
95
- var _this = this;
96
- navigator.permissions.query({ name: 'microphone' }).then(function (result) {
97
- var microphoneResultState = result.state;
98
- _this.hasMicrophoneAccess = microphoneResultState === 'granted';
99
- result.onchange = function () {
100
- _this.ngZone.run(function () {
101
- _this.hasMicrophoneAccess = result.state === 'granted';
102
- });
103
- };
104
- });
105
- };
106
96
  SpeechRecognitionService.prototype.setRecognition = function () {
107
97
  var _this = this;
108
98
  var _a;
@@ -118,6 +108,48 @@ var SpeechRecognitionService = /** @class */ (function () {
118
108
  this.recognition.maxAlternatives = 1;
119
109
  this.localeService.getLocale().subscribe(function (locale) { return _this.recognition.lang = locale; });
120
110
  };
111
+ Object.defineProperty(SpeechRecognitionService.prototype, "hasMicrophoneAccess", {
112
+ get: function () {
113
+ var _this = this;
114
+ return new Promise(function (resolve) { return __awaiter(_this, void 0, void 0, function () {
115
+ var permission;
116
+ var _this = this;
117
+ return __generator(this, function (_a) {
118
+ switch (_a.label) {
119
+ case 0: return [4 /*yield*/, navigator.permissions.query({ name: 'microphone' })];
120
+ case 1:
121
+ permission = _a.sent();
122
+ if (permission.state === 'denied') {
123
+ resolve(false);
124
+ }
125
+ else if (permission.state === 'granted') {
126
+ resolve(true);
127
+ }
128
+ else if (permission.state === 'prompt') {
129
+ try {
130
+ navigator.mediaDevices.getUserMedia({ audio: true }).then(function (stream) {
131
+ stream.getTracks().forEach(function (t) { return t.stop(); });
132
+ }).catch(function () {
133
+ resolve(false);
134
+ });
135
+ permission.onchange = function () {
136
+ _this.ngZone.run(function () {
137
+ resolve(permission.state === 'granted' ? true : false);
138
+ });
139
+ };
140
+ }
141
+ catch (error) {
142
+ resolve(false);
143
+ }
144
+ }
145
+ return [2 /*return*/];
146
+ }
147
+ });
148
+ }); });
149
+ },
150
+ enumerable: true,
151
+ configurable: true
152
+ });
121
153
  SpeechRecognitionService.ctorParameters = function () { return [
122
154
  { type: LocaleService },
123
155
  { type: NgZone },
@@ -133,4 +165,4 @@ var SpeechRecognitionService = /** @class */ (function () {
133
165
  return SpeechRecognitionService;
134
166
  }());
135
167
  export { SpeechRecognitionService };
136
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlZWNoLXJlY29nbml0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9zcGVlY2gtcmVjb2duaXRpb24vc3BlZWNoLXJlY29nbml0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7QUFVdkQ7SUFPRSxrQ0FDbUIsYUFBNEIsRUFDNUIsTUFBYyxFQUNkLFlBQTBCLEVBQ25DLGdCQUFrQztRQUh6QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDbkMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQVY1QyxnQ0FBMkIsR0FBRyxLQUFLLENBQUM7UUFDcEMsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDWix3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFFbkIsdUJBQWtCLEdBQUcsSUFBSSxDQUFDO1FBUXpDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQseUNBQU0sR0FBTjtRQUFBLGlCQWlFQztRQWhFQyxJQUFNLGFBQWEsR0FBRyxJQUFJLE9BQU8sRUFBZ0IsQ0FBQztRQUNsRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsYUFBYSxD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SSxDQUFDLHNEQUFzRCxDQUFDLENBQUM7WUFDckUsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQztRQUN4QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksNEJBQTRCLEVBQUUsQ0FBQztRQUN0RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxPQUFBLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsMENBQUUsTUFBTSxLQUFJLE9BQU8sQ0FBQztRQUNqRixJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDeEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLENBQUMsU0FBUyxDQUFDLFVBQUEsTUFBTSxJQUFJLE9BQUEsS0FBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxFQUE5QixDQUE4QixDQUFDLENBQUM7SUFDckYsQ0FBQzs7Z0JBM0dpQyxhQUFhO2dCQUNwQixNQUFNO2dCQUNBLFlBQVk7Z0JBQ2pCLGdCQUFnQjs7O0lBWGpDLHdCQUF3QjtRQUhwQyxVQUFVLENBQUM7WUFDVixVQUFVLEVBQUUsTUFBTTtTQUNuQixDQUFDO09BQ1csd0JBQXdCLENBb0hwQzttQ0FsSUQ7Q0FrSUMsQUFwSEQsSUFvSEM7U0FwSFksd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBMb2NhbGVTZXJ2aWNlIH0gZnJvbSAnLi4vbG9jYWxlL2xvY2FsZS5zZXJ2aWNlJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4uL3RvYXN0L3RvYXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNwZWVjaFJlc3VsdCB7XG4gIHRleHQ6IHN0cmluZztcbiAgaXNGaW5hbDogYm9vbGVhbjtcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU3BlZWNoUmVjb2duaXRpb25TZXJ2aWNlIHtcbiAgaGFzU3VwcG9ydFNwZWVjaFJlY29nbml0aW9uID0gZmFsc2U7XG4gIGlzTGlzdGVuaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgaGFzTWljcm9waG9uZUFjY2VzcyA9IGZhbHNlO1xuICBwcml2YXRlIHJlY29nbml0aW9uITogU3BlZWNoUmVjb2duaXRpb247XG4gIHByaXZhdGUgcmVhZG9ubHkgVElNRU9VVF9OT19NRVNTQUdFID0gMzAwMDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsZVNlcnZpY2U6IExvY2FsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgKSB7XG4gICAgdGhpcy52ZXJpZnlNaWNyb3Bob25lU3RhdGUoKTtcbiAgICB0aGlzLnNldFJlY29nbml0aW9uKCk7XG4gIH1cblxuICBsaXN0ZW4oKSB7XG4gICAgY29uc3Qgc3BlZWNoU3ViamVjdCA9IG5ldyBTdWJqZWN0PFNwZWVjaFJlc3VsdD4oKTtcbiAgICBpZiAodGhpcy5pc0xpc3RlbmluZykge1xuICAgICAgc3BlZWNoU3ViamVjdC5lcnJvcignQWxyZWFkeSBsaXN0ZW5pbmcnKTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmhhc01pY3JvcGhvbmVBY2Nlc3MpIHtcbiAgICAgIHRoaXMuaXNMaXN0ZW5pbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coeyBzZXZlcml0eTogJ2Vycm9yJywgdGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5ub19taWNyb3Bob25lX3Blcm1pc3Npb24nKSB9KTtcbiAgICAgIHNwZWVjaFN1YmplY3QuZXJyb3IoJ01pY3JvcGhvbmUgYWNjZXNzIGlzIGRpc2FibGVkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNMaXN0ZW5pbmcgPSB0cnVlO1xuICAgICAgdGhpcy5yZWNvZ25pdGlvbi5jb250aW51b3VzID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVjb2duaXRpb24uaW50ZXJpbVJlc3VsdHMgPSB0cnVlO1xuICAgICAgdGhpcy5yZWNvZ25pdGlvbi5tYXhBbHRlcm5hdGl2ZXMgPSAxO1xuICAgICAgbGV0IHNpbGVuY2VUaW1lcjogYW55O1xuICAgICAgY29uc3QgcmVzdGFydFNpbGVuY2VUaW1lciA9ICgpID0+IHtcbiAgICAgICAgaWYgKHNpbGVuY2VUaW1lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHNpbGVuY2VUaW1lcik7XG4gICAgICAgIH1cblxuICAgICAgICBzaWxlbmNlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnJlY29nbml0aW9uLnN0b3AoKTtcbiAgICAgICAgfSwgdGhpcy5USU1FT1VUX05PX01FU1NBR0UpO1xuICAgICAgfTtcbiAgICAgIGxldCBmdWxsVHJhbnNjcmlwdCA9ICcnO1xuICAgICAgbGV0IGludGVyaW1UcmFuc2NyaXB0ID0gJyc7XG5cbiAgICAgIHRoaXMucmVjb2duaXRpb24ub25yZXN1bHQgPSAoZXZlbnQ6IFNwZWVjaFJlY29nbml0aW9uRXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICByZXN0YXJ0U2lsZW5jZVRpbWVyKCk7XG4gICAgICAgICAgbGV0IGludGVyaW1UcmFuc2NyaXB0ID0gJyc7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IGV2ZW50LnJlc3VsdEluZGV4OyBpIDwgZXZlbnQucmVzdWx0cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgY29uc3QgdHJhbnNjcmlwdCA9IGV2ZW50LnJlc3VsdHNbaV1bMF0udHJhbnNjcmlwdDtcbiAgICAgICAgICAgIGlmIChldmVudC5yZXN1bHRzW2ldLmlzRmluYWwpIHtcbiAgICAgICAgICAgICAgZnVsbFRyYW5zY3JpcHQgKz0gdHJhbnNjcmlwdCArICdcXG4nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaW50ZXJpbVRyYW5zY3JpcHQgKz0gdHJhbnNjcmlwdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaW50ZXJpbVRyYW5zY3JpcHQgPSBpbnRlcmltVHJhbnNjcmlwdDtcbiAgICAgICAgICBzcGVlY2hTdWJqZWN0Lm5leHQoeyB0ZXh0OiBmdWxsVHJhbnNjcmlwdCArIGludGVyaW1UcmFuc2NyaXB0LCBpc0ZpbmFsOiBmYWxzZSB9KTtcbiAgICAgICAgfSlcbiAgICAgIH07XG4gICAgICB0aGlzLnJlY29nbml0aW9uLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgaWYgKHNpbGVuY2VUaW1lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoc2lsZW5jZVRpbWVyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5pc0xpc3RlbmluZyA9IGZhbHNlO1xuICAgICAgICAgIHNwZWVjaFN1YmplY3QuZXJyb3IoJ1NwZWVjaCByZWNvZ25pdGlvbiBlcnJvcicpO1xuICAgICAgICB9KVxuICAgICAgfTtcblxuICAgICAgdGhpcy5yZWNvZ25pdGlvbi5vbmVuZCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICBpZiAoc2lsZW5jZVRpbWVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChzaWxlbmNlVGltZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzcGVlY2hTdWJqZWN0Lm5leHQoeyB0ZXh0OiBmdWxsVHJhbnNjcmlwdCArIGludGVyaW1UcmFuc2NyaXB0LCBpc0ZpbmFsOiB0cnVlIH0pO1xuICAgICAgICAgIHRoaXMuaXNMaXN0ZW5pbmcgPSBmYWxzZTtcbiAgICAgICAgICBzcGVlY2hTdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgIH0pXG4gICAgICB9O1xuICAgICAgdGhpcy5yZWNvZ25pdGlvbi5zdGFydCgpO1xuICAgIH1cbiAgICByZXR1cm4gc3BlZWNoU3ViamVjdDtcbiAgfVxuXG5cbiAgc3RvcCgpIHtcbiAgICB0aGlzLnJlY29nbml0aW9uLnN0b3AoKTtcbiAgfVxuXG4gIHByaXZhdGUgdmVyaWZ5TWljcm9waG9uZVN0YXRlKCkge1xuICAgIG5hdmlnYXRvci5wZXJtaXNzaW9ucy5xdWVyeSh7IG5hbWU6ICdtaWNyb3Bob25lJyB9KS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgIGNvbnN0IG1pY3JvcGhvbmVSZXN1bHRTdGF0ZTogUGVybWlzc2lvblN0YXRlID0gcmVzdWx0LnN0YXRlO1xuICAgICAgdGhpcy5oYXNNaWNyb3Bob25lQWNjZXNzID0gbWljcm9waG9uZVJlc3VsdFN0YXRlID09PSAnZ3JhbnRlZCc7XG4gICAgICByZXN1bHQub25jaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5oYXNNaWNyb3Bob25lQWNjZXNzID0gcmVzdWx0LnN0YXRlID09PSAnZ3JhbnRlZCc7XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgc2V0UmVjb2duaXRpb24oKSB7XG4gICAgY29uc3QgU3BlZWNoUmVjb2duaXRpb25Db25zdHJ1Y3RvciA9XG4gICAgICAod2luZG93IGFzIGFueSkuU3BlZWNoUmVjb2duaXRpb24gfHwgKHdpbmRvdyBhcyBhbnkpLndlYmtpdFNwZWVjaFJlY29nbml0aW9uO1xuXG4gICAgaWYgKCFTcGVlY2hSZWNvZ25pdGlvbkNvbnN0cnVjdG9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1NwZWVjaCByZWNvZ25pdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3Nlci4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5oYXNTdXBwb3J0U3BlZWNoUmVjb2duaXRpb24gPSB0cnVlO1xuICAgIHRoaXMucmVjb2duaXRpb24gPSBuZXcgU3BlZWNoUmVjb2duaXRpb25Db25zdHJ1Y3RvcigpO1xuICAgIHRoaXMucmVjb2duaXRpb24ubGFuZyA9IHRoaXMubG9jYWxlU2VydmljZS5nZXRMb2NhbGVPcHRpb25zKCk/LmxvY2FsZSB8fCAncHQtQlInO1xuICAgIHRoaXMucmVjb2duaXRpb24uaW50ZXJpbVJlc3VsdHMgPSBmYWxzZTtcbiAgICB0aGlzLnJlY29nbml0aW9uLm1heEFsdGVybmF0aXZlcyA9IDE7XG4gICAgdGhpcy5sb2NhbGVTZXJ2aWNlLmdldExvY2FsZSgpLnN1YnNjcmliZShsb2NhbGUgPT4gdGhpcy5yZWNvZ25pdGlvbi5sYW5nID0gbG9jYWxlKTtcbiAgfVxufVxuIl19
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlZWNoLXJlY29nbml0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9zcGVlY2gtcmVjb2duaXRpb24vc3BlZWNoLXJlY29nbml0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7QUFXdkQ7SUFPRSxrQ0FDbUIsYUFBNEIsRUFDNUIsTUFBYyxFQUNkLFlBQTBCLEVBQ25DLGdCQUFrQztRQUh6QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDbkMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQVY1QyxnQ0FBMkIsR0FBRyxLQUFLLENBQUM7UUFDcEMsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDWCxzQkFBaUIsR0FBRyxJQUFJLE9BQU8sRUFBb0IsQ0FBQztRQUU1Qyx1QkFBa0IsR0FBRyxJQUFJLENBQUM7UUFRekMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCx5Q0FBTSxHQUFOO1FBQUEsaUJBdUVDO1FBdEVDLElBQU0sYUFBYSxHQUFHLElBQUksT0FBTyxFQUFnQixDQUFDO1FBQ2xELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwQixhQUFhLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7U0FDMUM7UUFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFVBQUMsU0FBUztZQUN0QyxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNkLEtBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxzREFBc0QsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDM0ksYUFBYSxDQUFDLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO2dCQUNyRCxPQUFPO2FBQ1I7WUFDRCxLQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRXRDLEtBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLEtBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUNuQyxLQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7WUFDdkMsS0FBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDO1lBQ3JDLElBQUksWUFBaUIsQ0FBQztZQUN0QixJQUFNLG1CQUFtQixHQUFHO2dCQUMxQixJQUFJLFlBQVksS0FBSyxTQUFTLEVBQUU7b0JBQzlCLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztpQkFDNUI7Z0JBRUQsWUFBWSxHQUFHLFVBQVUsQ0FBQztvQkFDeEIsS0FBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDMUIsQ0FBQyxFQUFFLEtBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQzlCLENBQUMsQ0FBQztZQUNGLElBQUksY0FBYyxHQUFHLEVBQUUsQ0FBQztZQUN4QixJQUFJLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztZQUUzQixLQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxVQUFDLEtBQTZCO2dCQUN4RCxLQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztvQkFDZCxtQkFBbUIsRUFBRSxDQUFDO29CQUN0QixJQUFJLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztvQkFDM0IsS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTt3QkFDN0QsSUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7d0JBQ2xELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUU7NEJBQzVCLGNBQWMsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO3lCQUNyQzs2QkFBTTs0QkFDTCxpQkFBaUIsSUFBSSxVQUFVLENBQUM7eUJBQ2pDO3FCQUNGO29CQUNELGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO29CQUN0QyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLGNBQWMsR0FBRyxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDbkYsQ0FBQyxDQUFDLENBQUE7WUFDSixDQUFDLENBQUM7WUFDRixLQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sR0FBRztnQkFDekIsS0FBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7b0JBQ2QsSUFBSSxZQUFZLEtBQUssU0FBUyxFQUFFO3dCQUM5QixZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7cUJBQzVCO29CQUNELEtBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO29CQUN6QixhQUFhLENBQUMsS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7b0JBQ2hELEtBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7Z0JBQ3pDLENBQUMsQ0FBQyxDQUFBO1lBQ0osQ0FBQyxDQUFDO1lBRUYsS0FBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUc7Z0JBQ3ZCLEtBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO29CQUNkLElBQUksWUFBWSxLQUFLLFNBQVMsRUFBRTt3QkFDOUIsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO3FCQUM1QjtvQkFDRCxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLGNBQWMsR0FBRyxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFDaEYsS0FBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7b0JBQ3pCLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDekIsS0FBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQTtnQkFDekMsQ0FBQyxDQUFDLENBQUE7WUFDSixDQUFDLENBQUM7WUFDRixLQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFBO1FBQ0YsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUdELHVDQUFJLEdBQUo7UUFDRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxpREFBYyxHQUF0QjtRQUFBLGlCQWNDOztRQWJDLElBQU0sNEJBQTRCLEdBQy9CLE1BQWMsQ0FBQyxpQkFBaUIsSUFBSyxNQUFjLENBQUMsdUJBQXVCLENBQUM7UUFFL0UsSUFBSSxDQUFDLDRCQUE0QixFQUFFO1lBQ2pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsc0RBQXNELENBQUMsQ0FBQztZQUNyRSxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsMkJBQTJCLEdBQUcsSUFBSSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSw0QkFBNEIsRUFBRSxDQUFDO1FBQ3RELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLE9BQUEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSwwQ0FBRSxNQUFNLEtBQUksT0FBTyxDQUFDO1FBQ2pGLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUN4QyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxTQUFTLENBQUMsVUFBQSxNQUFNLElBQUksT0FBQSxLQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxNQUFNLEVBQTlCLENBQThCLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQsc0JBQVkseURBQW1CO2FBQS9CO1lBQUEsaUJBd0JDO1lBdkJDLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBTyxPQUFPOzs7OztnQ0FDWixxQkFBTSxTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxFQUFBOzs0QkFBdEUsVUFBVSxHQUFHLFNBQXlEOzRCQUM1RSxJQUFJLFVBQVUsQ0FBQyxLQUFLLEtBQUssUUFBUSxFQUFFO2dDQUNqQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7NkJBQ2hCO2lDQUFNLElBQUksVUFBVSxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUU7Z0NBQ3pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTs2QkFDZDtpQ0FBTSxJQUFJLFVBQVUsQ0FBQyxLQUFLLEtBQUssUUFBUSxFQUFFO2dDQUN4QyxJQUFJO29DQUNGLFNBQVMsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUMsTUFBTTt3Q0FDL0QsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBUixDQUFRLENBQUMsQ0FBQztvQ0FDNUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO3dDQUNQLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztvQ0FDakIsQ0FBQyxDQUFDLENBQUM7b0NBQ0gsVUFBVSxDQUFDLFFBQVEsR0FBRzt3Q0FDcEIsS0FBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7NENBQ2QsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO3dDQUN6RCxDQUFDLENBQUMsQ0FBQTtvQ0FDSixDQUFDLENBQUE7aUNBQ0Y7Z0NBQUMsT0FBTyxLQUFLLEVBQUU7b0NBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lDQUNoQjs2QkFDRjs7OztpQkFDRixDQUFDLENBQUE7UUFDSixDQUFDOzs7T0FBQTs7Z0JBOUhpQyxhQUFhO2dCQUNwQixNQUFNO2dCQUNBLFlBQVk7Z0JBQ2pCLGdCQUFnQjs7O0lBWGpDLHdCQUF3QjtRQUhwQyxVQUFVLENBQUM7WUFDVixVQUFVLEVBQUUsTUFBTTtTQUNuQixDQUFDO09BQ1csd0JBQXdCLENBdUlwQzttQ0F0SkQ7Q0FzSkMsQUF2SUQsSUF1SUM7U0F2SVksd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBMb2NhbGVTZXJ2aWNlIH0gZnJvbSAnLi4vbG9jYWxlL2xvY2FsZS5zZXJ2aWNlJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4uL3RvYXN0L3RvYXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5leHBvcnQgdHlwZSBNaWNyb3Bob25lU3RhdHVzID0gJ2FjdGl2ZScgfCAnaW5hY3RpdmUnO1xuZXhwb3J0IGludGVyZmFjZSBTcGVlY2hSZXN1bHQge1xuICB0ZXh0OiBzdHJpbmc7XG4gIGlzRmluYWw6IGJvb2xlYW47XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFNwZWVjaFJlY29nbml0aW9uU2VydmljZSB7XG4gIGhhc1N1cHBvcnRTcGVlY2hSZWNvZ25pdGlvbiA9IGZhbHNlO1xuICBpc0xpc3RlbmluZyA9IGZhbHNlO1xuICByZWFkb25seSBtaWNyb3Bob25lU3RhdHVzJCA9IG5ldyBTdWJqZWN0PE1pY3JvcGhvbmVTdGF0dXM+KCk7XG4gIHByaXZhdGUgcmVjb2duaXRpb24hOiBTcGVlY2hSZWNvZ25pdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBUSU1FT1VUX05PX01FU1NBR0UgPSAzMDAwO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9jYWxlU2VydmljZTogTG9jYWxlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5nWm9uZTogTmdab25lLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICApIHtcbiAgICB0aGlzLnNldFJlY29nbml0aW9uKCk7XG4gIH1cblxuICBsaXN0ZW4oKSB7XG4gICAgY29uc3Qgc3BlZWNoU3ViamVjdCA9IG5ldyBTdWJqZWN0PFNwZWVjaFJlc3VsdD4oKTtcbiAgICBpZiAodGhpcy5pc0xpc3RlbmluZykge1xuICAgICAgc3BlZWNoU3ViamVjdC5lcnJvcignQWxyZWFkeSBsaXN0ZW5pbmcnKTtcbiAgICB9XG4gICAgdGhpcy5oYXNNaWNyb3Bob25lQWNjZXNzLnRoZW4oKGhhc0FjY2VzcykgPT4ge1xuICAgICAgaWYgKCFoYXNBY2Nlc3MpIHtcbiAgICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvdyh7IHNldmVyaXR5OiAnZXJyb3InLCB0ZXh0OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLm5vX21pY3JvcGhvbmVfcGVybWlzc2lvbicpIH0pO1xuICAgICAgICBzcGVlY2hTdWJqZWN0LmVycm9yKCdNaWNyb3Bob25lIGFjY2VzcyBpcyBkaXNhYmxlZCcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLm1pY3JvcGhvbmVTdGF0dXMkLm5leHQoJ2FjdGl2ZScpO1xuXG4gICAgICB0aGlzLmlzTGlzdGVuaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVjb2duaXRpb24uY29udGludW91cyA9IHRydWU7XG4gICAgICB0aGlzLnJlY29nbml0aW9uLmludGVyaW1SZXN1bHRzID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVjb2duaXRpb24ubWF4QWx0ZXJuYXRpdmVzID0gMTtcbiAgICAgIGxldCBzaWxlbmNlVGltZXI6IGFueTtcbiAgICAgIGNvbnN0IHJlc3RhcnRTaWxlbmNlVGltZXIgPSAoKSA9PiB7XG4gICAgICAgIGlmIChzaWxlbmNlVGltZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dChzaWxlbmNlVGltZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2lsZW5jZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZWNvZ25pdGlvbi5zdG9wKCk7XG4gICAgICAgIH0sIHRoaXMuVElNRU9VVF9OT19NRVNTQUdFKTtcbiAgICAgIH07XG4gICAgICBsZXQgZnVsbFRyYW5zY3JpcHQgPSAnJztcbiAgICAgIGxldCBpbnRlcmltVHJhbnNjcmlwdCA9ICcnO1xuXG4gICAgICB0aGlzLnJlY29nbml0aW9uLm9ucmVzdWx0ID0gKGV2ZW50OiBTcGVlY2hSZWNvZ25pdGlvbkV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgcmVzdGFydFNpbGVuY2VUaW1lcigpO1xuICAgICAgICAgIGxldCBpbnRlcmltVHJhbnNjcmlwdCA9ICcnO1xuICAgICAgICAgIGZvciAobGV0IGkgPSBldmVudC5yZXN1bHRJbmRleDsgaSA8IGV2ZW50LnJlc3VsdHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zY3JpcHQgPSBldmVudC5yZXN1bHRzW2ldWzBdLnRyYW5zY3JpcHQ7XG4gICAgICAgICAgICBpZiAoZXZlbnQucmVzdWx0c1tpXS5pc0ZpbmFsKSB7XG4gICAgICAgICAgICAgIGZ1bGxUcmFuc2NyaXB0ICs9IHRyYW5zY3JpcHQgKyAnXFxuJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGludGVyaW1UcmFuc2NyaXB0ICs9IHRyYW5zY3JpcHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGludGVyaW1UcmFuc2NyaXB0ID0gaW50ZXJpbVRyYW5zY3JpcHQ7XG4gICAgICAgICAgc3BlZWNoU3ViamVjdC5uZXh0KHsgdGV4dDogZnVsbFRyYW5zY3JpcHQgKyBpbnRlcmltVHJhbnNjcmlwdCwgaXNGaW5hbDogZmFsc2UgfSk7XG4gICAgICAgIH0pXG4gICAgICB9O1xuICAgICAgdGhpcy5yZWNvZ25pdGlvbi5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgIGlmIChzaWxlbmNlVGltZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHNpbGVuY2VUaW1lcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuaXNMaXN0ZW5pbmcgPSBmYWxzZTtcbiAgICAgICAgICBzcGVlY2hTdWJqZWN0LmVycm9yKCdTcGVlY2ggcmVjb2duaXRpb24gZXJyb3InKTtcbiAgICAgICAgICB0aGlzLm1pY3JvcGhvbmVTdGF0dXMkLm5leHQoJ2luYWN0aXZlJylcbiAgICAgICAgfSlcbiAgICAgIH07XG5cbiAgICAgIHRoaXMucmVjb2duaXRpb24ub25lbmQgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgaWYgKHNpbGVuY2VUaW1lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoc2lsZW5jZVRpbWVyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3BlZWNoU3ViamVjdC5uZXh0KHsgdGV4dDogZnVsbFRyYW5zY3JpcHQgKyBpbnRlcmltVHJhbnNjcmlwdCwgaXNGaW5hbDogdHJ1ZSB9KTtcbiAgICAgICAgICB0aGlzLmlzTGlzdGVuaW5nID0gZmFsc2U7XG4gICAgICAgICAgc3BlZWNoU3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgICAgIHRoaXMubWljcm9waG9uZVN0YXR1cyQubmV4dCgnaW5hY3RpdmUnKVxuICAgICAgICB9KVxuICAgICAgfTtcbiAgICAgIHRoaXMucmVjb2duaXRpb24uc3RhcnQoKTtcbiAgICB9KVxuICAgIHJldHVybiBzcGVlY2hTdWJqZWN0O1xuICB9XG5cblxuICBzdG9wKCkge1xuICAgIHRoaXMucmVjb2duaXRpb24uc3RvcCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRSZWNvZ25pdGlvbigpIHtcbiAgICBjb25zdCBTcGVlY2hSZWNvZ25pdGlvbkNvbnN0cnVjdG9yID1cbiAgICAgICh3aW5kb3cgYXMgYW55KS5TcGVlY2hSZWNvZ25pdGlvbiB8fCAod2luZG93IGFzIGFueSkud2Via2l0U3BlZWNoUmVjb2duaXRpb247XG5cbiAgICBpZiAoIVNwZWVjaFJlY29nbml0aW9uQ29uc3RydWN0b3IpIHtcbiAgICAgIGNvbnNvbGUud2FybignU3BlZWNoIHJlY29nbml0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmhhc1N1cHBvcnRTcGVlY2hSZWNvZ25pdGlvbiA9IHRydWU7XG4gICAgdGhpcy5yZWNvZ25pdGlvbiA9IG5ldyBTcGVlY2hSZWNvZ25pdGlvbkNvbnN0cnVjdG9yKCk7XG4gICAgdGhpcy5yZWNvZ25pdGlvbi5sYW5nID0gdGhpcy5sb2NhbGVTZXJ2aWNlLmdldExvY2FsZU9wdGlvbnMoKT8ubG9jYWxlIHx8ICdwdC1CUic7XG4gICAgdGhpcy5yZWNvZ25pdGlvbi5pbnRlcmltUmVzdWx0cyA9IGZhbHNlO1xuICAgIHRoaXMucmVjb2duaXRpb24ubWF4QWx0ZXJuYXRpdmVzID0gMTtcbiAgICB0aGlzLmxvY2FsZVNlcnZpY2UuZ2V0TG9jYWxlKCkuc3Vic2NyaWJlKGxvY2FsZSA9PiB0aGlzLnJlY29nbml0aW9uLmxhbmcgPSBsb2NhbGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaGFzTWljcm9waG9uZUFjY2VzcygpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IHBlcm1pc3Npb24gPSBhd2FpdCBuYXZpZ2F0b3IucGVybWlzc2lvbnMucXVlcnkoeyBuYW1lOiAnbWljcm9waG9uZScgfSk7XG4gICAgICBpZiAocGVybWlzc2lvbi5zdGF0ZSA9PT0gJ2RlbmllZCcpIHtcbiAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICB9IGVsc2UgaWYgKHBlcm1pc3Npb24uc3RhdGUgPT09ICdncmFudGVkJykge1xuICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICB9IGVsc2UgaWYgKHBlcm1pc3Npb24uc3RhdGUgPT09ICdwcm9tcHQnKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoeyBhdWRpbzogdHJ1ZSB9KS50aGVuKChzdHJlYW0pID0+IHtcbiAgICAgICAgICAgIHN0cmVhbS5nZXRUcmFja3MoKS5mb3JFYWNoKHQgPT4gdC5zdG9wKCkpO1xuICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHBlcm1pc3Npb24ub25jaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICByZXNvbHZlKHBlcm1pc3Npb24uc3RhdGUgPT09ICdncmFudGVkJyA/IHRydWUgOiBmYWxzZSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH1cbn1cbiJdfQ==
@@ -89,4 +89,4 @@ var TextToSpeechService = /** @class */ (function () {
89
89
  return TextToSpeechService;
90
90
  }());
91
91
  export { TextToSpeechService };
92
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC10by1zcGVlY2guc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb21wb25lbnRzL3NwZWVjaC1yZWNvZ25pdGlvbi90ZXh0LXRvLXNwZWVjaC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7OztBQUt6RDtJQUtFLDZCQUE2QixNQUFxQixFQUFtQixNQUFjO1FBQXRELFdBQU0sR0FBTixNQUFNLENBQWU7UUFBbUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUpsRSxjQUFTLEdBQUcsSUFBSSx3QkFBd0IsRUFBRSxDQUFDO1FBRTVELFdBQU0sR0FBMkIsRUFBRSxDQUFDO1FBR2xDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRU8sdUNBQVMsR0FBakI7UUFBQSxpQkFlQztRQWRDLElBQUksT0FBTyxHQUFHLGVBQWUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUUxQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUNuQixlQUFlLENBQUMsZUFBZSxHQUFHO2dCQUNoQyxLQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQzs7b0JBQ2QsT0FBTyxHQUFHLGVBQWUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDdEMsSUFBTSxXQUFXLEdBQUcsT0FBQSxLQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLDBDQUFFLE1BQU0sS0FBSSxPQUFPLENBQUM7b0JBQ3RFLEtBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO29CQUMxQyxLQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxVQUFDLE1BQU07d0JBQ3ZDLEtBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO29CQUN2QyxDQUFDLENBQUMsQ0FBQTtnQkFDSixDQUFDLENBQUMsQ0FBQTtZQUNKLENBQUMsQ0FBQTtTQUNGO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCx5Q0FBVyxHQUFYLFVBQVksUUFBZ0I7UUFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFDLEtBQUssSUFBSyxPQUFBLEtBQUssQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUEzQixDQUEyQixDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUdELG1DQUFLLEdBQUwsVUFBTSxJQUFZLEVBQUUsS0FBaUI7UUFBckMsaUJBZUM7UUFmbUIsc0JBQUEsRUFBQSxTQUFpQjtRQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNyQixPQUFPO1NBQ1I7UUFDRCxPQUFPLElBQUksT0FBTyxDQUFDLFVBQUMsT0FBTztZQUN6QixLQUFJLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDM0IsS0FBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsS0FBSSxDQUFDLFdBQVcsQ0FBQztZQUN4QyxLQUFJLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7WUFDNUIsZUFBZSxDQUFDLEtBQUssQ0FBQyxLQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdEMsS0FBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUc7Z0JBQ3JCLEtBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO29CQUNkLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDaEIsQ0FBQyxDQUFDLENBQUE7WUFDSixDQUFDLENBQUE7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxtQ0FBSyxHQUFMO1FBQ0UsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxvQ0FBTSxHQUFOO1FBQ0UsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxvQ0FBTSxHQUFOO1FBQ0UsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxzQkFBSSx5Q0FBUTthQUFaO1lBQ0UsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUM1QixDQUFDOzs7T0FBQTtJQUVPLDRDQUFjLEdBQXRCLFVBQXVCLE1BQThCLEVBQUUsSUFBWTtRQUNqRSxJQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQUMsS0FBSyxJQUFLLE9BQUEsS0FBSyxDQUFDLElBQUksS0FBSyxJQUFJLEVBQW5CLENBQW1CLENBQUMsQ0FBQztRQUMzRCxJQUFJLE1BQU0sRUFBRTtZQUNWLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO1NBQzNCO0lBQ0gsQ0FBQzs7Z0JBckVvQyxhQUFhO2dCQUEyQixNQUFNOzs7SUFMeEUsbUJBQW1CO1FBSC9CLFVBQVUsQ0FBQztZQUNWLFVBQVUsRUFBRSxNQUFNO1NBQ25CLENBQUM7T0FDVyxtQkFBbUIsQ0EyRS9COzhCQWpGRDtDQWlGQyxBQTNFRCxJQTJFQztTQTNFWSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvY2FsZVNlcnZpY2UgfSBmcm9tICcuLi9sb2NhbGUvbG9jYWxlLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBUZXh0VG9TcGVlY2hTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSB1dHRlcmFuY2UgPSBuZXcgU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKCk7XG4gIHByaXZhdGUgYWN0aXZlVm9pY2U6IFNwZWVjaFN5bnRoZXNpc1ZvaWNlO1xuICB2b2ljZXM6IFNwZWVjaFN5bnRoZXNpc1ZvaWNlW10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGxvY2FsZTogTG9jYWxlU2VydmljZSwgcHJpdmF0ZSByZWFkb25seSBuZ1pvbmU6IE5nWm9uZSkge1xuICAgIHRoaXMuc2V0Vm9pY2VzKCk7XG4gIH1cblxuICBwcml2YXRlIHNldFZvaWNlcygpIHtcbiAgICBsZXQgX3ZvaWNlcyA9IHNwZWVjaFN5bnRoZXNpcy5nZXRWb2ljZXMoKTtcblxuICAgIGlmICghX3ZvaWNlcy5sZW5ndGgpIHtcbiAgICAgIHNwZWVjaFN5bnRoZXNpcy5vbnZvaWNlc2NoYW5nZWQgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgX3ZvaWNlcyA9IHNwZWVjaFN5bnRoZXNpcy5nZXRWb2ljZXMoKTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50TGFuZyA9IHRoaXMubG9jYWxlLmdldExvY2FsZU9wdGlvbnMoKT8ubG9jYWxlIHx8ICdwdC1CUic7XG4gICAgICAgICAgdGhpcy5zZXRBY3RpdmVWb2ljZShfdm9pY2VzLCBjdXJyZW50TGFuZyk7XG4gICAgICAgICAgdGhpcy5sb2NhbGUuZ2V0TG9jYWxlKCkuc3Vic2NyaWJlKChsb2NhbGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVm9pY2UoX3ZvaWNlcywgbG9jYWxlKTtcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBhY3RpdmUgdm9pY2VcbiAgICogW01ETiBSZWZlcmVuY2VdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9TcGVlY2hTeW50aGVzaXNWb2ljZS92b2ljZVVSSSlcbiAgICogQHBhcmFtIHZvaWNlVXJpXG4gICAqL1xuICB1cGRhdGVWb2ljZSh2b2ljZVVyaTogc3RyaW5nKSB7XG4gICAgdGhpcy5hY3RpdmVWb2ljZSA9IHRoaXMudm9pY2VzLmZpbmQoKHZvaWNlKSA9PiB2b2ljZS52b2ljZVVSSSA9PT0gdm9pY2VVcmkpO1xuICB9XG5cblxuICBzcGVhayh0ZXh0OiBzdHJpbmcsIHNwZWVkOiBudW1iZXIgPSAxKSB7XG4gICAgaWYgKCF0aGlzLmFjdGl2ZVZvaWNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy51dHRlcmFuY2UudGV4dCA9IHRleHQ7XG4gICAgICB0aGlzLnV0dGVyYW5jZS52b2ljZSA9IHRoaXMuYWN0aXZlVm9pY2U7XG4gICAgICB0aGlzLnV0dGVyYW5jZS5yYXRlID0gc3BlZWQ7XG4gICAgICBzcGVlY2hTeW50aGVzaXMuc3BlYWsodGhpcy51dHRlcmFuY2UpO1xuICAgICAgdGhpcy51dHRlcmFuY2Uub25lbmQgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgcGF1c2UoKSB7XG4gICAgc3BlZWNoU3ludGhlc2lzLnBhdXNlKCk7XG4gIH1cblxuICByZXN1bWUoKSB7XG4gICAgc3BlZWNoU3ludGhlc2lzLnJlc3VtZSgpO1xuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIHNwZWVjaFN5bnRoZXNpcy5jYW5jZWwoKTtcbiAgfVxuXG4gIGdldCBoYXNWb2ljZSgpIHtcbiAgICByZXR1cm4gISF0aGlzLmFjdGl2ZVZvaWNlO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRBY3RpdmVWb2ljZSh2b2ljZXM6IFNwZWVjaFN5bnRoZXNpc1ZvaWNlW10sIGxhbmc6IHN0cmluZykge1xuICAgIGNvbnN0IF92b2ljZSA9IHZvaWNlcy5maW5kKCh2b2ljZSkgPT4gdm9pY2UubGFuZyA9PT0gbGFuZyk7XG4gICAgaWYgKF92b2ljZSkge1xuICAgICAgdGhpcy5hY3RpdmVWb2ljZSA9IF92b2ljZTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC10by1zcGVlY2guc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb21wb25lbnRzL3NwZWVjaC1yZWNvZ25pdGlvbi90ZXh0LXRvLXNwZWVjaC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7OztBQU16RDtJQUlFLDZCQUE2QixNQUFxQixFQUFtQixNQUFjO1FBQXRELFdBQU0sR0FBTixNQUFNLENBQWU7UUFBbUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUhsRSxjQUFTLEdBQUcsSUFBSSx3QkFBd0IsRUFBRSxDQUFDO1FBRTVELFdBQU0sR0FBMkIsRUFBRSxDQUFDO1FBRWxDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRU8sdUNBQVMsR0FBakI7UUFBQSxpQkFlQztRQWRDLElBQUksT0FBTyxHQUFHLGVBQWUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUUxQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUNuQixlQUFlLENBQUMsZUFBZSxHQUFHO2dCQUNoQyxLQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQzs7b0JBQ2QsT0FBTyxHQUFHLGVBQWUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDdEMsSUFBTSxXQUFXLEdBQUcsT0FBQSxLQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLDBDQUFFLE1BQU0sS0FBSSxPQUFPLENBQUM7b0JBQ3RFLEtBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO29CQUMxQyxLQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxVQUFDLE1BQU07d0JBQ3ZDLEtBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO29CQUN2QyxDQUFDLENBQUMsQ0FBQTtnQkFDSixDQUFDLENBQUMsQ0FBQTtZQUNKLENBQUMsQ0FBQTtTQUNGO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCx5Q0FBVyxHQUFYLFVBQVksUUFBZ0I7UUFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFDLEtBQUssSUFBSyxPQUFBLEtBQUssQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUEzQixDQUEyQixDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUdELG1DQUFLLEdBQUwsVUFBTSxJQUFZLEVBQUUsS0FBaUI7UUFBckMsaUJBZUM7UUFmbUIsc0JBQUEsRUFBQSxTQUFpQjtRQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNyQixPQUFPO1NBQ1I7UUFDRCxPQUFPLElBQUksT0FBTyxDQUFDLFVBQUMsT0FBTztZQUN6QixLQUFJLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDM0IsS0FBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsS0FBSSxDQUFDLFdBQVcsQ0FBQztZQUN4QyxLQUFJLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7WUFDNUIsZUFBZSxDQUFDLEtBQUssQ0FBQyxLQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdEMsS0FBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUc7Z0JBQ3JCLEtBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO29CQUNkLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDaEIsQ0FBQyxDQUFDLENBQUE7WUFDSixDQUFDLENBQUE7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxtQ0FBSyxHQUFMO1FBQ0UsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxvQ0FBTSxHQUFOO1FBQ0UsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxvQ0FBTSxHQUFOO1FBQ0UsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxzQkFBSSx5Q0FBUTthQUFaO1lBQ0UsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUM1QixDQUFDOzs7T0FBQTtJQUVPLDRDQUFjLEdBQXRCLFVBQXVCLE1BQThCLEVBQUUsSUFBWTtRQUNqRSxJQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQUMsS0FBSyxJQUFLLE9BQUEsS0FBSyxDQUFDLElBQUksS0FBSyxJQUFJLEVBQW5CLENBQW1CLENBQUMsQ0FBQztRQUMzRCxJQUFJLE1BQU0sRUFBRTtZQUNWLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO1NBQzNCO0lBQ0gsQ0FBQzs7Z0JBckVvQyxhQUFhO2dCQUEyQixNQUFNOzs7SUFKeEUsbUJBQW1CO1FBSC9CLFVBQVUsQ0FBQztZQUNWLFVBQVUsRUFBRSxNQUFNO1NBQ25CLENBQUM7T0FDVyxtQkFBbUIsQ0EwRS9COzhCQWpGRDtDQWlGQyxBQTFFRCxJQTBFQztTQTFFWSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvY2FsZVNlcnZpY2UgfSBmcm9tICcuLi9sb2NhbGUvbG9jYWxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBUZXh0VG9TcGVlY2hTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSB1dHRlcmFuY2UgPSBuZXcgU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKCk7XG4gIHByaXZhdGUgYWN0aXZlVm9pY2U6IFNwZWVjaFN5bnRoZXNpc1ZvaWNlO1xuICB2b2ljZXM6IFNwZWVjaFN5bnRoZXNpc1ZvaWNlW10gPSBbXTtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBsb2NhbGU6IExvY2FsZVNlcnZpY2UsIHByaXZhdGUgcmVhZG9ubHkgbmdab25lOiBOZ1pvbmUpIHtcbiAgICB0aGlzLnNldFZvaWNlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRWb2ljZXMoKSB7XG4gICAgbGV0IF92b2ljZXMgPSBzcGVlY2hTeW50aGVzaXMuZ2V0Vm9pY2VzKCk7XG5cbiAgICBpZiAoIV92b2ljZXMubGVuZ3RoKSB7XG4gICAgICBzcGVlY2hTeW50aGVzaXMub252b2ljZXNjaGFuZ2VkID0gKCkgPT4ge1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgIF92b2ljZXMgPSBzcGVlY2hTeW50aGVzaXMuZ2V0Vm9pY2VzKCk7XG4gICAgICAgICAgY29uc3QgY3VycmVudExhbmcgPSB0aGlzLmxvY2FsZS5nZXRMb2NhbGVPcHRpb25zKCk/LmxvY2FsZSB8fCAncHQtQlInO1xuICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVm9pY2UoX3ZvaWNlcywgY3VycmVudExhbmcpO1xuICAgICAgICAgIHRoaXMubG9jYWxlLmdldExvY2FsZSgpLnN1YnNjcmliZSgobG9jYWxlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVZvaWNlKF92b2ljZXMsIGxvY2FsZSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgYWN0aXZlIHZvaWNlXG4gICAqIFtNRE4gUmVmZXJlbmNlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvU3BlZWNoU3ludGhlc2lzVm9pY2Uvdm9pY2VVUkkpXG4gICAqIEBwYXJhbSB2b2ljZVVyaVxuICAgKi9cbiAgdXBkYXRlVm9pY2Uodm9pY2VVcmk6IHN0cmluZykge1xuICAgIHRoaXMuYWN0aXZlVm9pY2UgPSB0aGlzLnZvaWNlcy5maW5kKCh2b2ljZSkgPT4gdm9pY2Uudm9pY2VVUkkgPT09IHZvaWNlVXJpKTtcbiAgfVxuXG5cbiAgc3BlYWsodGV4dDogc3RyaW5nLCBzcGVlZDogbnVtYmVyID0gMSkge1xuICAgIGlmICghdGhpcy5hY3RpdmVWb2ljZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMudXR0ZXJhbmNlLnRleHQgPSB0ZXh0O1xuICAgICAgdGhpcy51dHRlcmFuY2Uudm9pY2UgPSB0aGlzLmFjdGl2ZVZvaWNlO1xuICAgICAgdGhpcy51dHRlcmFuY2UucmF0ZSA9IHNwZWVkO1xuICAgICAgc3BlZWNoU3ludGhlc2lzLnNwZWFrKHRoaXMudXR0ZXJhbmNlKTtcbiAgICAgIHRoaXMudXR0ZXJhbmNlLm9uZW5kID0gKCkgPT4ge1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHBhdXNlKCkge1xuICAgIHNwZWVjaFN5bnRoZXNpcy5wYXVzZSgpO1xuICB9XG5cbiAgcmVzdW1lKCkge1xuICAgIHNwZWVjaFN5bnRoZXNpcy5yZXN1bWUoKTtcbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICBzcGVlY2hTeW50aGVzaXMuY2FuY2VsKCk7XG4gIH1cblxuICBnZXQgaGFzVm9pY2UoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5hY3RpdmVWb2ljZTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0QWN0aXZlVm9pY2Uodm9pY2VzOiBTcGVlY2hTeW50aGVzaXNWb2ljZVtdLCBsYW5nOiBzdHJpbmcpIHtcbiAgICBjb25zdCBfdm9pY2UgPSB2b2ljZXMuZmluZCgodm9pY2UpID0+IHZvaWNlLmxhbmcgPT09IGxhbmcpO1xuICAgIGlmIChfdm9pY2UpIHtcbiAgICAgIHRoaXMuYWN0aXZlVm9pY2UgPSBfdm9pY2U7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -35,21 +35,6 @@ var TextAreaComponent = /** @class */ (function () {
35
35
  enumerable: true,
36
36
  configurable: true
37
37
  });
38
- Object.defineProperty(TextAreaComponent.prototype, "placeholder", {
39
- get: function () {
40
- return this._placeholder;
41
- },
42
- set: function (value) {
43
- if (value) {
44
- this._placeholder = value;
45
- }
46
- else {
47
- this._placeholder = '';
48
- }
49
- },
50
- enumerable: true,
51
- configurable: true
52
- });
53
38
  Object.defineProperty(TextAreaComponent.prototype, "inputStyle", {
54
39
  get: function () {
55
40
  return this._inputStyle;
@@ -114,7 +99,7 @@ var TextAreaComponent = /** @class */ (function () {
114
99
  ], TextAreaComponent.prototype, "maxLength", void 0);
115
100
  __decorate([
116
101
  Input()
117
- ], TextAreaComponent.prototype, "placeholder", null);
102
+ ], TextAreaComponent.prototype, "placeholder", void 0);
118
103
  __decorate([
119
104
  Input()
120
105
  ], TextAreaComponent.prototype, "inputStyle", null);
@@ -124,7 +109,7 @@ var TextAreaComponent = /** @class */ (function () {
124
109
  TextAreaComponent = TextAreaComponent_1 = __decorate([
125
110
  Component({
126
111
  selector: 's-textarea',
127
- template: "<textarea\n *ngIf=\"keyFilter\"\n #textArea\n class=\"textarea\"\n [pKeyFilter]=\"keyFilter\"\n [id]=\"inputId\"\n [rows]=\"rows\"\n [(ngModel)]=\"value\"\n [disabled]=\"disabled\"\n [ngStyle]=\"inputStyle\"\n [readOnly]=\"readOnly\"\n [placeholder]=\"placeholder\"\n [maxlength]=\"maxLength\"\n (ngModelChange)=\"setValue($event)\">\n</textarea>\n\n<textarea\n *ngIf=\"!keyFilter\"\n #textArea\n class=\"textarea\"\n [id]=\"inputId\"\n [rows]=\"rows\"\n [(ngModel)]=\"value\"\n [disabled]=\"disabled\"\n [ngStyle]=\"inputStyle\"\n [readOnly]=\"readOnly\"\n [placeholder]=\"placeholder\"\n [maxlength]=\"maxLength\"\n (ngModelChange)=\"setValue($event)\">\n</textarea>\n\n<s-speech-recognition\n *ngIf=\"speechRecognition && renderTextArea\"\n [textAreaElement]=\"textAreaElement.nativeElement\"\n [keepContext]=\"keepContext\"\n [speechRecognitionPlaceholder]=\"speechRecognitionPlaceholder\"\n (recognizedText)=\"handleRecognizedText($event)\">\n</s-speech-recognition>\n",
112
+ template: "<textarea\n *ngIf=\"keyFilter\"\n #textArea\n class=\"textarea\"\n [pKeyFilter]=\"keyFilter\"\n [id]=\"inputId\"\n [rows]=\"rows\"\n [(ngModel)]=\"value\"\n [disabled]=\"disabled\"\n [ngStyle]=\"inputStyle\"\n [readOnly]=\"readOnly\"\n [placeholder]=\"placeholder ? placeholder : ''\"\n [maxlength]=\"maxLength\"\n (ngModelChange)=\"setValue($event)\">\n</textarea>\n\n<textarea\n *ngIf=\"!keyFilter\"\n #textArea\n class=\"textarea\"\n [id]=\"inputId\"\n [rows]=\"rows\"\n [(ngModel)]=\"value\"\n [disabled]=\"disabled\"\n [ngStyle]=\"inputStyle\"\n [readOnly]=\"readOnly\"\n [placeholder]=\"placeholder ? placeholder : ''\"\n [maxlength]=\"maxLength\"\n (ngModelChange)=\"setValue($event)\">\n</textarea>\n\n<s-speech-recognition\n *ngIf=\"speechRecognition && renderTextArea\"\n [textAreaElement]=\"textAreaElement.nativeElement\"\n [keepContext]=\"keepContext\"\n [speechRecognitionPlaceholder]=\"speechRecognitionPlaceholder\"\n (recognizedText)=\"handleRecognizedText($event)\">\n</s-speech-recognition>\n",
128
113
  providers: [
129
114
  {
130
115
  provide: NG_VALUE_ACCESSOR,
@@ -138,4 +123,4 @@ var TextAreaComponent = /** @class */ (function () {
138
123
  return TextAreaComponent;
139
124
  }());
140
125
  export { TextAreaComponent };
141
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1hcmVhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb21wb25lbnRzL3RleHQtYXJlYS90ZXh0LWFyZWEvdGV4dC1hcmVhLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkcsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBY3pFO0lBdURFLDJCQUE2QixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQXREbkQsYUFBUSxHQUE0QixjQUFRLENBQUMsQ0FBQztRQUM5QyxjQUFTLEdBQTRCLGNBQVEsQ0FBQyxDQUFDO1FBQy9DLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQWdCRixZQUFPLEdBQUcsY0FBWSxJQUFJLENBQUMsTUFBTSxFQUFJLENBQUM7UUFDdEMsU0FBSSxHQUFHLENBQUMsQ0FBQztRQUNULHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUUxQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQixpQ0FBNEIsR0FBRyxFQUFFLENBQUM7UUFjbkMsZ0JBQVcsR0FBaUM7WUFDbEQsTUFBTSxFQUFFLFVBQVU7U0FDbkIsQ0FBQTtRQVVRLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFMUIsbUJBQWMsR0FBRyxLQUFLLENBQUM7SUFFZ0MsQ0FBQzswQkF2RDdDLGlCQUFpQjtJQVE1QixzQkFBVyw4Q0FBZTthQUExQjtZQUNFLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQy9CLENBQUM7YUFFRCxVQUEyQixLQUFzQztZQUFqRSxpQkFNQztZQUxDLElBQUksQ0FBQyxnQkFBZ0Is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QWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgZm9yd2FyZFJlZiwgSW5wdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzLXRleHRhcmVhJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RleHQtYXJlYS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RleHQtYXJlYS5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRleHRBcmVhQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFRleHRBcmVhQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQgPSAoKSA9PiB7IH07XG4gIG9uVG91Y2hlZDogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQgPSAoKSA9PiB7IH07XG4gIGRpc2FibGVkID0gZmFsc2U7XG4gIHZhbHVlID0gJyc7XG4gIHByaXZhdGUgX3RleHRBcmVhRWxlbWVudDogRWxlbWVudFJlZjxIVE1MVGV4dEFyZWFFbGVtZW50PjtcblxuICBAVmlld0NoaWxkKCd0ZXh0QXJlYScsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwdWJsaWMgZ2V0IHRleHRBcmVhRWxlbWVudCgpOiBFbGVtZW50UmVmPEhUTUxUZXh0QXJlYUVsZW1lbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5fdGV4dEFyZWFFbGVtZW50O1xuICB9XG5cbiAgcHVibGljIHNldCB0ZXh0QXJlYUVsZW1lbnQodmFsdWU6IEVsZW1lbnRSZWY8SFRNTFRleHRBcmVhRWxlbWVudD4pIHtcbiAgICB0aGlzLl90ZXh0QXJlYUVsZW1lbnQgPSB2YWx1ZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucmVuZGVyVGV4dEFyZWEgPSB0cnVlO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0pXG4gIH1cblxuICBASW5wdXQoKSBpbnB1dElkID0gYHRleHRhcmVhLSR7TWF0aC5yYW5kb20oKX1gO1xuICBASW5wdXQoKSByb3dzID0gNTtcbiAgQElucHV0KCkgc3BlZWNoUmVjb2duaXRpb24gPSBmYWxzZTtcbiAgQElucHV0KCkga2V5RmlsdGVyOiBzdHJpbmcgfCBSZWdFeHA7XG4gIEBJbnB1dCgpIGtlZXBDb250ZXh0ID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNwZWVjaFJlY29nbml0aW9uUGxhY2Vob2xkZXIgPSAnJztcbiAgQElucHV0KCkgbWF4TGVuZ3RoOiBudW1iZXI7XG5cbiAgcHJpdmF0ZSBfcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgQElucHV0KCkgZ2V0IHBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyO1xuICB9XG4gIHNldCBwbGFjZWhvbGRlcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9wbGFjZWhvbGRlciA9ICcnO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIF9pbnB1dFN0eWxlOiBQYXJ0aWFsPENTU1N0eWxlRGVjbGFyYXRpb24+ID0ge1xuICAgIHJlc2l6ZTogJ3ZlcnRpY2FsJ1xuICB9XG4gIEBJbnB1dCgpIGdldCBpbnB1dFN0eWxlKCk6IFBhcnRpYWw8Q1NTU3R5bGVEZWNsYXJhdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLl9pbnB1dFN0eWxlO1xuICB9XG4gIHNldCBpbnB1dFN0eWxlKHZhbHVlOiBQYXJ0aWFsPENTU1N0eWxlRGVjbGFyYXRpb24+KSB7XG4gICAgdGhpcy5faW5wdXRTdHlsZSA9IHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgLi4udGhpcy5faW5wdXRTdHlsZSxcbiAgICB9O1xuICB9XG4gIEBJbnB1dCgpIHJlYWRPbmx5ID0gZmFsc2U7XG5cbiAgcmVuZGVyVGV4dEFyZWEgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHsgfVxuXG4gIHdyaXRlVmFsdWUob2JqOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gb2JqO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIHNldFZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy53cml0ZVZhbHVlKHRoaXMudmFsdWUpO1xuICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XG4gICAgdGhpcy5vblRvdWNoZWQodGhpcy52YWx1ZSk7XG4gIH1cblxuICBoYW5kbGVSZWNvZ25pemVkVGV4dChyZWNvZ25pemVkVGV4dDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRWYWx1ZShyZWNvZ25pemVkVGV4dCk7XG4gIH1cbn1cbiJdfQ==
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1hcmVhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb21wb25lbnRzL3RleHQtYXJlYS90ZXh0LWFyZWEvdGV4dC1hcmVhLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkcsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBY3pFO0lBNENFLDJCQUE2QixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQTNDbkQsYUFBUSxHQUE0QixjQUFRLENBQUMsQ0FBQztRQUM5QyxjQUFTLEdBQTRCLGNBQVEsQ0FBQyxDQUFDO1FBQy9DLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQWdCRixZQUFPLEdBQUcsY0FBWSxJQUFJLENBQUMsTUFBTSxFQUFJLENBQUM7UUFDdEMsU0FBSSxHQUFHLENBQUMsQ0FBQztRQUNULHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUUxQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQixpQ0FBNEIsR0FBRyxFQUFFLENBQUM7UUFHbkMsZ0JBQVcsR0FBaUM7WUFDbEQsTUFBTSxFQUFFLFVBQVU7U0FDbkIsQ0FBQTtRQVVRLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFMUIsbUJBQWMsR0FBRyxLQUFLLENBQUM7SUFFZ0MsQ0FBQzswQkE1QzdDLGlCQUFpQjtJQVE1QixzQkFBVyw4Q0FBZTthQUExQjtZQUNFLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQy9CLENBQUM7YUFFRCxVQUEyQixLQUFzQztZQUFqRSxpQkFNQztZQUxDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7WUFDOUIsVUFBVSxDQUFDO2dCQUNULEtBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO2dCQUMzQixLQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzNCLENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQzs7O09BUkE7SUFxQlEsc0JBQUkseUNBQVU7YUFBZDtZQUNQLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMxQixDQUFDO2FBQ0QsVUFBZSxLQUFtQztZQUNoRCxJQUFJLENBQUMsV0FBVyx5QkFDWCxLQUFLLEdBQ0wsSUFBSSxDQUFDLFdBQVcsQ0FDcEIsQ0FBQztRQUNKLENBQUM7OztPQU5BO0lBYUQsc0NBQVUsR0FBVixVQUFXLEdBQVc7UUFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7SUFDbkIsQ0FBQztJQUVELDRDQUFnQixHQUFoQixVQUFpQixFQUEyQjtRQUMxQyxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsNkNBQWlCLEdBQWpCLFVBQWtCLEVBQWM7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELDRDQUFnQixHQUFoQixVQUFpQixVQUFtQjtRQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUM3QixDQUFDO0lBRUQsb0NBQVEsR0FBUixVQUFTLEtBQWE7UUFDcEIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxnREFBb0IsR0FBcEIsVUFBcUIsY0FBc0I7UUFDekMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNoQyxDQUFDOzs7Z0JBOUJpQyxpQkFBaUI7O0lBcENuRDtRQURDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUM7NERBRzNDO0lBVVE7UUFBUixLQUFLLEVBQUU7c0RBQXVDO0lBQ3RDO1FBQVIsS0FBSyxFQUFFO21EQUFVO0lBQ1Q7UUFBUixLQUFLLEVBQUU7Z0VBQTJCO0lBQzFCO1FBQVIsS0FBSyxFQUFFO3dEQUE0QjtJQUMzQjtRQUFSLEtBQUssRUFBRTswREFBcUI7SUFDcEI7UUFBUixLQUFLLEVBQUU7MkVBQW1DO0lBQ2xDO1FBQVIsS0FBSyxFQUFFO3dEQUFtQjtJQUNsQjtRQUFSLEtBQUssRUFBRTswREFBcUI7SUFJcEI7UUFBUixLQUFLLEVBQUU7dURBRVA7SUFPUTtRQUFSLEtBQUssRUFBRTt1REFBa0I7SUF4Q2YsaUJBQWlCO1FBWjdCLFNBQVMsQ0FBQztZQUNULFFBQVEsRUFBRSxZQUFZO1lBQ3RCLDZtQ0FBeUM7WUFFekMsU0FBUyxFQUFFO2dCQUNUO29CQUNFLE9BQU8sRUFBRSxpQkFBaUI7b0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsY0FBTSxPQUFBLG1CQUFpQixFQUFqQixDQUFpQixDQUFDO29CQUNoRCxLQUFLLEVBQUUsSUFBSTtpQkFDWjthQUNGOztTQUNGLENBQUM7T0FDVyxpQkFBaUIsQ0EyRTdCO0lBQUQsd0JBQUM7Q0FBQSxBQTNFRCxJQTJFQztTQTNFWSxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBmb3J3YXJkUmVmLCBJbnB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3MtdGV4dGFyZWEnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGV4dC1hcmVhLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGV4dC1hcmVhLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVGV4dEFyZWFDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgVGV4dEFyZWFDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCA9ICgpID0+IHsgfTtcbiAgb25Ub3VjaGVkOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCA9ICgpID0+IHsgfTtcbiAgZGlzYWJsZWQgPSBmYWxzZTtcbiAgdmFsdWUgPSAnJztcbiAgcHJpdmF0ZSBfdGV4dEFyZWFFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxUZXh0QXJlYUVsZW1lbnQ+O1xuXG4gIEBWaWV3Q2hpbGQoJ3RleHRBcmVhJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHB1YmxpYyBnZXQgdGV4dEFyZWFFbGVtZW50KCk6IEVsZW1lbnRSZWY8SFRNTFRleHRBcmVhRWxlbWVudD4ge1xuICAgIHJldHVybiB0aGlzLl90ZXh0QXJlYUVsZW1lbnQ7XG4gIH1cblxuICBwdWJsaWMgc2V0IHRleHRBcmVhRWxlbWVudCh2YWx1ZTogRWxlbWVudFJlZjxIVE1MVGV4dEFyZWFFbGVtZW50Pikge1xuICAgIHRoaXMuX3RleHRBcmVhRWxlbWVudCA9IHZhbHVlO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5yZW5kZXJUZXh0QXJlYSA9IHRydWU7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSlcbiAgfVxuXG4gIEBJbnB1dCgpIGlucHV0SWQgPSBgdGV4dGFyZWEtJHtNYXRoLnJhbmRvbSgpfWA7XG4gIEBJbnB1dCgpIHJvd3MgPSA1O1xuICBASW5wdXQoKSBzcGVlY2hSZWNvZ25pdGlvbiA9IGZhbHNlO1xuICBASW5wdXQoKSBrZXlGaWx0ZXI6IHN0cmluZyB8IFJlZ0V4cDtcbiAgQElucHV0KCkga2VlcENvbnRleHQgPSBmYWxzZTtcbiAgQElucHV0KCkgc3BlZWNoUmVjb2duaXRpb25QbGFjZWhvbGRlciA9ICcnO1xuICBASW5wdXQoKSBtYXhMZW5ndGg6IG51bWJlcjtcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgcHJpdmF0ZSBfaW5wdXRTdHlsZTogUGFydGlhbDxDU1NTdHlsZURlY2xhcmF0aW9uPiA9IHtcbiAgICByZXNpemU6ICd2ZXJ0aWNhbCdcbiAgfVxuICBASW5wdXQoKSBnZXQgaW5wdXRTdHlsZSgpOiBQYXJ0aWFsPENTU1N0eWxlRGVjbGFyYXRpb24+IHtcbiAgICByZXR1cm4gdGhpcy5faW5wdXRTdHlsZTtcbiAgfVxuICBzZXQgaW5wdXRTdHlsZSh2YWx1ZTogUGFydGlhbDxDU1NTdHlsZURlY2xhcmF0aW9uPikge1xuICAgIHRoaXMuX2lucHV0U3R5bGUgPSB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIC4uLnRoaXMuX2lucHV0U3R5bGUsXG4gICAgfTtcbiAgfVxuICBASW5wdXQoKSByZWFkT25seSA9IGZhbHNlO1xuXG4gIHJlbmRlclRleHRBcmVhID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7IH1cblxuICB3cml0ZVZhbHVlKG9iajogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IG9iajtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICBzZXRWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICAgIHRoaXMub25Ub3VjaGVkKHRoaXMudmFsdWUpO1xuICB9XG5cbiAgaGFuZGxlUmVjb2duaXplZFRleHQocmVjb2duaXplZFRleHQ6IHN0cmluZykge1xuICAgIHRoaXMuc2V0VmFsdWUocmVjb2duaXplZFRleHQpO1xuICB9XG59XG4iXX0=