stream-chat-angular 4.22.0 → 4.23.1

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.
@@ -156,6 +156,30 @@ export class CustomTemplatesService {
156
156
  * For code examples to the different customizations see our [customizations example application](https://github.com/GetStream/stream-chat-angular/tree/master/projects/customizations-example), specifically the [AppComponent](https://github.com/GetStream/stream-chat-angular/tree/master/projects/customizations-example/src/app) (see [README](https://github.com/GetStream/stream-chat-angular/blob/master/README.md#customization-examples) for instructions on how to start the application).
157
157
  */
158
158
  this.customAttachmentUploadTemplate$ = new BehaviorSubject(undefined);
159
+ /**
160
+ * The template that can be used to override how a single image attachment is displayed inside the [attachment list](../components/AttachmentListComponent.mdx)
161
+ */
162
+ this.imageAttachmentTemplate$ = new BehaviorSubject(undefined);
163
+ /**
164
+ * The template that can be used to override how a video attachment is displayed inside the [attachment list](../components/AttachmentListComponent.mdx)
165
+ */
166
+ this.videoAttachmentTemplate$ = new BehaviorSubject(undefined);
167
+ /**
168
+ * The template that can be used to override how image gallery is displayed inside the [attachment list](../components/AttachmentListComponent.mdx)
169
+ */
170
+ this.galleryAttachmentTemplate$ = new BehaviorSubject(undefined);
171
+ /**
172
+ * The template that can be used to override how a file attachment is displayed inside the [attachment list](../components/AttachmentListComponent.mdx)
173
+ */
174
+ this.fileAttachmentTemplate$ = new BehaviorSubject(undefined);
175
+ /**
176
+ * The template that can be used to override how a card attachment is displayed inside the [attachment list](../components/AttachmentListComponent.mdx)
177
+ */
178
+ this.cardAttachmentTemplate$ = new BehaviorSubject(undefined);
179
+ /**
180
+ * The template that can be used to override how attachment actions are displayed inside the [attachment list](../components/AttachmentListComponent.mdx)
181
+ */
182
+ this.attachmentActionsTemplate$ = new BehaviorSubject(undefined);
159
183
  }
160
184
  }
161
185
  CustomTemplatesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: CustomTemplatesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
@@ -166,4 +190,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImpor
166
190
  providedIn: 'root',
167
191
  }]
168
192
  }], ctorParameters: function () { return []; } });
169
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXRlbXBsYXRlcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL2N1c3RvbS10ZW1wbGF0ZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBNkJ2Qzs7OztHQUlHO0FBSUgsTUFBTSxPQUFPLHNCQUFzQjtJQXdNakM7UUF2TUE7O1dBRUc7UUFDSCxxQ0FBZ0MsR0FBRyxJQUFJLGVBQWUsQ0FFcEQsU0FBUyxDQUFDLENBQUM7UUFDYjs7OztXQUlHO1FBQ0gscUNBQWdDLEdBQUcsSUFBSSxlQUFlLENBRXBELFNBQVMsQ0FBQyxDQUFDO1FBQ2I7Ozs7V0FJRztRQUNILDRCQUF1QixHQUFHLElBQUksZUFBZSxDQUUzQyxTQUFTLENBQUMsQ0FBQztRQUNiOzs7O1dBSUc7UUFDSCwwQkFBcUIsR0FBRyxJQUFJLGVBQWUsQ0FFekMsU0FBUyxDQUFDLENBQUM7UUFDYjs7OztXQUlHO1FBQ0gscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBRXBDLFNBQVMsQ0FBQyxDQUFDO1FBQ2I7Ozs7V0FJRztRQUNILHlCQUFvQixHQUFHLElBQUksZUFBZSxDQUV4QyxTQUFTLENBQUMsQ0FBQztRQUNiOzs7O1dBSUc7UUFDSCw2QkFBd0IsR0FBRyxJQUFJLGVBQWUsQ0FFNUMsU0FBUyxDQUFDLENBQUM7UUFDYjs7OztXQUlHO1FBQ0gscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBRXBDLFNBQVMsQ0FBQyxDQUFDO1FBQ2I7Ozs7V0FJRztRQUNILDRCQUF1QixHQUFHLElBQUksZUFBZSxDQUUzQyxTQUFTLENBQUMsQ0FBQztRQUNiOzs7O1dBSUc7UUFDSCw0QkFBdUIsR0FBRyxJQUFJLGVBQWUsQ0FFM0MsU0FBUyxDQUFDLENBQUM7UUFDYjs7OztXQUlHO1FBQ0gsbUNBQThCLEdBQUcsSUFBSSxlQUFlLENBRWxELFNBQVMsQ0FBQyxDQUFDO1FBQ2I7Ozs7V0FJRztRQUNILG9CQUFlLEdBQUcsSUFBSSxlQUFlLENBQ25DLFNBQVMsQ0FDVixDQUFDO1FBQ0Y7Ozs7V0FJRztRQUNILGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQ2pDLFNBQVMsQ0FDVixDQUFDO1FBQ0Y7Ozs7V0FJRztRQUNILDhCQUF5QixHQUFHLElBQUksZUFBZSxDQUU3QyxTQUFTLENBQUMsQ0FBQztRQUNiOzs7O1dBSUc7UUFDSCwrQkFBMEIsR0FBRyxJQUFJLGVBQWUsQ0FFOUMsU0FBUyxDQUFDLENBQUM7UUFDYjs7OztXQUlHO1FBQ0gsbUNBQThCLEdBQUcsSUFBSSxlQUFlLENBRWxELFNBQVMsQ0FBQyxDQUFDO1FBQ2I7Ozs7V0FJRztRQUNILDhCQUF5QixHQUFHLElBQUksZUFBZSxDQUU3QyxTQUFTLENBQUMsQ0FBQztRQUNiOzs7O1dBSUc7UUFDSCxtQkFBYyxHQUFHLElBQUksZUFBZSxDQUNsQyxTQUFTLENBQ1YsQ0FBQztRQUNGOzs7O1dBSUc7UUFDSCwwQkFBcUIsR0FBRyxJQUFJLGVBQWUsQ0FFekMsU0FBUyxDQUFDLENBQUM7UUFDYjs7OztXQUlHO1FBQ0gsMEJBQXFCLEdBQUcsSUFBSSxlQUFlLENBRXpDLFNBQVMsQ0FBQyxDQUFDO1FBQ2I7Ozs7V0FJRztRQUNILDZCQUF3QixHQUFHLElBQUksZUFBZSxDQUU1QyxTQUFTLENBQUMsQ0FBQztRQUNiOzs7O1dBSUc7UUFDSCwyQkFBc0IsR0FBRyxJQUFJLGVBQWUsQ0FFMUMsU0FBUyxDQUFDLENBQUM7UUFDYjs7OztXQUlHO1FBQ0gsd0JBQW1CLEdBQUcsSUFBSSxlQUFlLENBRXZDLFNBQVMsQ0FBQyxDQUFDO1FBQ2I7Ozs7V0FJRztRQUNILCtCQUEwQixHQUFHLElBQUksZUFBZSxDQUU5QyxTQUFTLENBQUMsQ0FBQztRQUNiOzs7O1dBSUc7UUFDSCxvQ0FBK0IsR0FBRyxJQUFJLGVBQWUsQ0FFbkQsU0FBUyxDQUFDLENBQUM7SUFFRSxDQUFDOzttSEF4TUwsc0JBQXNCO3VIQUF0QixzQkFBc0IsY0FGckIsTUFBTTsyRkFFUCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgQXR0YWNobWVudExpc3RDb250ZXh0LFxuICBBdHRhY2htZW50UHJldmlld0xpc3RDb250ZXh0LFxuICBBdmF0YXJDb250ZXh0LFxuICBDaGFubmVsQWN0aW9uc0NvbnRleHQsXG4gIENoYW5uZWxIZWFkZXJJbmZvQ29udGV4dCxcbiAgQ2hhbm5lbFByZXZpZXdDb250ZXh0LFxuICBDb21tYW5kQXV0b2NvbXBsZXRlTGlzdEl0ZW1Db250ZXh0LFxuICBDdXN0b21BdHRhY2htZW50VXBsb2FkQ29udGV4dCxcbiAgRGVsaXZlcmVkU3RhdHVzQ29udGV4dCxcbiAgRW1vamlQaWNrZXJDb250ZXh0LFxuICBJY29uQ29udGV4dCxcbiAgTG9hZGluZ0luZGljYXRvckNvbnRleHQsXG4gIE1lbnRpb25BdXRjb21wbGV0ZUxpc3RJdGVtQ29udGV4dCxcbiAgTWVudGlvblRlbXBsYXRlQ29udGV4dCxcbiAgTWVzc2FnZUFjdGlvbkJveEl0ZW1Db250ZXh0LFxuICBNZXNzYWdlQWN0aW9uc0JveENvbnRleHQsXG4gIE1lc3NhZ2VDb250ZXh0LFxuICBNZXNzYWdlSW5wdXRDb250ZXh0LFxuICBNZXNzYWdlUmVhY3Rpb25zQ29udGV4dCxcbiAgTW9kYWxDb250ZXh0LFxuICBOb3RpZmljYXRpb25Db250ZXh0LFxuICBSZWFkU3RhdHVzQ29udGV4dCxcbiAgU2VuZGluZ1N0YXR1c0NvbnRleHQsXG4gIFRocmVhZEhlYWRlckNvbnRleHQsXG4gIFR5cGluZ0luZGljYXRvckNvbnRleHQsXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIEEgY2VudHJhbCBsb2NhdGlvbiBmb3IgcmVnaXN0ZXJpbmcgeW91ciBjdXN0b20gdGVtcGxhdGVzIHRvIG92ZXJyaWRlIHBhcnRzIG9mIHRoZSBjaGF0IGFwcGxpY2F0aW9uLlxuICpcbiAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQ3VzdG9tVGVtcGxhdGVzU2VydmljZSB7XG4gIC8qKlxuICAgKiBUaGUgYXV0b2NvbXBsZXRlIGxpc3QgaXRlbSB0ZW1wbGF0ZSBmb3IgbWVudGlvbmluZyB1c2VycyAodXNlZCBpbiB0aGUgW2BBdXRvY29tcGxldGVUZXh0YXJlYUNvbXBvbmVudGBdKC4uL2NvbXBvbmVudHMvQXV0b2NvbXBsZXRlVGV4dGFyZWFDb21wb25lbnQubWR4KSlcbiAgICovXG4gIG1lbnRpb25BdXRvY29tcGxldGVJdGVtVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxNZW50aW9uQXV0Y29tcGxldGVMaXN0SXRlbUNvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSBhdXRvY29tcGxldGUgbGlzdCBpdGVtIHRlbXBsYXRlIGZvciBjb21tYW5kcyAodXNlZCBpbiB0aGUgW2BBdXRvY29tcGxldGVUZXh0YXJlYUNvbXBvbmVudGBdKC4uL2NvbXBvbmVudHMvQXV0b2NvbXBsZXRlVGV4dGFyZWFDb21wb25lbnQubWR4KSlcbiAgICpcbiAgICogRm9yIGNvZGUgZXhhbXBsZXMgdG8gdGhlIGRpZmZlcmVudCBjdXN0b21pemF0aW9ucyBzZWUgb3VyIFtjdXN0b21pemF0aW9ucyBleGFtcGxlIGFwcGxpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZSksIHNwZWNpZmljYWxseSB0aGUgW0FwcENvbXBvbmVudF0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUvc3JjL2FwcCkgKHNlZSBbUkVBRE1FXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI2N1c3RvbWl6YXRpb24tZXhhbXBsZXMpIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN0YXJ0IHRoZSBhcHBsaWNhdGlvbikuXG4gICAqL1xuICBjb21tYW5kQXV0b2NvbXBsZXRlSXRlbVRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8Q29tbWFuZEF1dG9jb21wbGV0ZUxpc3RJdGVtQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGVtcGxhdGUgdXNlZCB0byBkaXNwbGF5IGFuIGl0ZW0gaW4gdGhlIFtjaGFubmVsIGxpc3RdKC4uL2NvbXBvbmVudHMvQ2hhbm5lbExpc3RDb21wb25lbnQubWR4KSAoaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBbY2hhbm5hbCBsaXN0IGl0ZW1dKC4uL2NvbXBvbmVudHMvQ2hhbm5lbFByZXZpZXdDb21wb25lbnQubWR4KSlcbiAgICpcbiAgICogRm9yIGNvZGUgZXhhbXBsZXMgdG8gdGhlIGRpZmZlcmVudCBjdXN0b21pemF0aW9ucyBzZWUgb3VyIFtjdXN0b21pemF0aW9ucyBleGFtcGxlIGFwcGxpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZSksIHNwZWNpZmljYWxseSB0aGUgW0FwcENvbXBvbmVudF0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUvc3JjL2FwcCkgKHNlZSBbUkVBRE1FXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI2N1c3RvbWl6YXRpb24tZXhhbXBsZXMpIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN0YXJ0IHRoZSBhcHBsaWNhdGlvbikuXG4gICAqL1xuICBjaGFubmVsUHJldmlld1RlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8Q2hhbm5lbFByZXZpZXdDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgbWVzc2FnZSBpbnB1dCB0ZW1wbGF0ZSB1c2VkIHdoZW4gZWRpdGluZyBhIG1lc3NhZ2UgKGluc3RlYWQgb2YgdGhlIFtkZWZhdWx0IG1lc3NhZ2UgaW5wdXRdKC4uL2NvbXBvbmVudHMvTWVzc2FnZUlucHV0Q29tcG9uZW50Lm1keCkpXG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgbWVzc2FnZUlucHV0VGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxNZXNzYWdlSW5wdXRDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCBmb3IgZGlzcGxheWluZyBhIFttZW50aW9uIGluc2lkZSBhIG1lc3NhZ2VdKC4uL2NvZGUtZXhhbXBsZXMvbWVudGlvbi1hY3Rpb25zLm1keClcbiAgICpcbiAgICogRm9yIGNvZGUgZXhhbXBsZXMgdG8gdGhlIGRpZmZlcmVudCBjdXN0b21pemF0aW9ucyBzZWUgb3VyIFtjdXN0b21pemF0aW9ucyBleGFtcGxlIGFwcGxpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZSksIHNwZWNpZmljYWxseSB0aGUgW0FwcENvbXBvbmVudF0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUvc3JjL2FwcCkgKHNlZSBbUkVBRE1FXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI2N1c3RvbWl6YXRpb24tZXhhbXBsZXMpIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN0YXJ0IHRoZSBhcHBsaWNhdGlvbikuXG4gICAqL1xuICBtZW50aW9uVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxNZW50aW9uVGVtcGxhdGVDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgZm9yIFtlbW9qaSBwaWNrZXJdKC4uL2NvZGUtZXhhbXBsZXMvZW1vamktcGlja2VyLm1keClcbiAgICpcbiAgICogRm9yIGNvZGUgZXhhbXBsZXMgdG8gdGhlIGRpZmZlcmVudCBjdXN0b21pemF0aW9ucyBzZWUgb3VyIFtjdXN0b21pemF0aW9ucyBleGFtcGxlIGFwcGxpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZSksIHNwZWNpZmljYWxseSB0aGUgW0FwcENvbXBvbmVudF0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUvc3JjL2FwcCkgKHNlZSBbUkVBRE1FXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI2N1c3RvbWl6YXRpb24tZXhhbXBsZXMpIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN0YXJ0IHRoZSBhcHBsaWNhdGlvbikuXG4gICAqL1xuICBlbW9qaVBpY2tlclRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8RW1vamlQaWNrZXJDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdHlwaW5nIGluZGljYXRvciB0ZW1wbGF0ZSB1c2VkIGluIHRoZSBbbWVzc2FnZSBsaXN0XSguLi9jb21wb25lbnRzL01lc3NhZ2VMaXN0Q29tcG9uZW50Lm1keClcbiAgICpcbiAgICogRm9yIGNvZGUgZXhhbXBsZXMgdG8gdGhlIGRpZmZlcmVudCBjdXN0b21pemF0aW9ucyBzZWUgb3VyIFtjdXN0b21pemF0aW9ucyBleGFtcGxlIGFwcGxpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZSksIHNwZWNpZmljYWxseSB0aGUgW0FwcENvbXBvbmVudF0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUvc3JjL2FwcCkgKHNlZSBbUkVBRE1FXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI2N1c3RvbWl6YXRpb24tZXhhbXBsZXMpIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN0YXJ0IHRoZSBhcHBsaWNhdGlvbikuXG4gICAqL1xuICB0eXBpbmdJbmRpY2F0b3JUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPFR5cGluZ0luZGljYXRvckNvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIHRvIGRpc3BsYXkgYSBtZXNzYWdlIGluIHRoZSBbbWVzc2FnZSBsaXN0XSguLi9jb21wb25lbnRzL01lc3NhZ2VMaXN0Q29tcG9uZW50Lm1keCkgKGluc3RlYWQgb2YgdGhlIFtkZWZhdWx0IG1lc3NhZ2UgY29tcG9uZW50XSguLi9jb21wb25lbnRzL01lc3NhZ2VDb21wb25lbnQubWR4KSlcbiAgICpcbiAgICogRm9yIGNvZGUgZXhhbXBsZXMgdG8gdGhlIGRpZmZlcmVudCBjdXN0b21pemF0aW9ucyBzZWUgb3VyIFtjdXN0b21pemF0aW9ucyBleGFtcGxlIGFwcGxpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZSksIHNwZWNpZmljYWxseSB0aGUgW0FwcENvbXBvbmVudF0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUvc3JjL2FwcCkgKHNlZSBbUkVBRE1FXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI2N1c3RvbWl6YXRpb24tZXhhbXBsZXMpIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN0YXJ0IHRoZSBhcHBsaWNhdGlvbikuXG4gICAqL1xuICBtZXNzYWdlVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxNZXNzYWdlQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIGZvciBjaGFubmVsIGFjdGlvbnMgZGlzcGxheWVkIGluIHRoZSBbY2hhbm5lbCBoZWFkZXJdKC4uL2NvbXBvbmVudHMvQ2hhbm5lbEhlYWRlckNvbXBvbmVudC5tZHgpIChieSBkZWZhdWx0IG5vIGNoYW5uZWwgYWN0aW9uIGlzIGRpc3BsYXllZClcbiAgICpcbiAgICogRm9yIGNvZGUgZXhhbXBsZXMgdG8gdGhlIGRpZmZlcmVudCBjdXN0b21pemF0aW9ucyBzZWUgb3VyIFtjdXN0b21pemF0aW9ucyBleGFtcGxlIGFwcGxpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZSksIHNwZWNpZmljYWxseSB0aGUgW0FwcENvbXBvbmVudF0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUvc3JjL2FwcCkgKHNlZSBbUkVBRE1FXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI2N1c3RvbWl6YXRpb24tZXhhbXBsZXMpIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN0YXJ0IHRoZSBhcHBsaWNhdGlvbikuXG4gICAqL1xuICBjaGFubmVsQWN0aW9uc1RlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8Q2hhbm5lbEFjdGlvbnNDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCB0byBkaXNwbGF5IGF0dGFjaG1lbnRzIG9mIGEgW21lc3NhZ2VdKC4uL2NvbXBvbmVudHMvTWVzc2FnZUNvbXBvbmVudC5tZHgpIChpbnN0ZWFkIG9mIHRoZSBbZGVmYXVsdCBhdHRhY2htZW50IGxpc3RdKC4uL2NvbXBvbmVudHMvQXR0YWNobWVudExpc3RDb21wb25lbnQubWR4KSlcbiAgICpcbiAgICogRm9yIGNvZGUgZXhhbXBsZXMgdG8gdGhlIGRpZmZlcmVudCBjdXN0b21pemF0aW9ucyBzZWUgb3VyIFtjdXN0b21pemF0aW9ucyBleGFtcGxlIGFwcGxpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZSksIHNwZWNpZmljYWxseSB0aGUgW0FwcENvbXBvbmVudF0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUvc3JjL2FwcCkgKHNlZSBbUkVBRE1FXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI2N1c3RvbWl6YXRpb24tZXhhbXBsZXMpIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN0YXJ0IHRoZSBhcHBsaWNhdGlvbikuXG4gICAqL1xuICBhdHRhY2htZW50TGlzdFRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8QXR0YWNobWVudExpc3RDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCB0byBkaXNwbGF5IGF0dGFjaG1lbnRzIGluIHRoZSBbbWVzc2FnZSBpbnB1dF0oLi4vY29tcG9uZW50cy9NZXNzYWdlSW5wdXRDb21wb25lbnQubWR4KSBjb21wb25lbnQgKGluc3RlYWQgb2YgdGhlIFtkZWZhdWx0IGF0dGFjaG1lbnQgcHJldmlld10oLi4vY29tcG9uZW50cy9BdHRhY2htZW50UHJldmlld0xpc3RDb21wb25lbnQubWR4KSlcbiAgICpcbiAgICogRm9yIGNvZGUgZXhhbXBsZXMgdG8gdGhlIGRpZmZlcmVudCBjdXN0b21pemF0aW9ucyBzZWUgb3VyIFtjdXN0b21pemF0aW9ucyBleGFtcGxlIGFwcGxpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZSksIHNwZWNpZmljYWxseSB0aGUgW0FwcENvbXBvbmVudF0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUvc3JjL2FwcCkgKHNlZSBbUkVBRE1FXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI2N1c3RvbWl6YXRpb24tZXhhbXBsZXMpIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN0YXJ0IHRoZSBhcHBsaWNhdGlvbikuXG4gICAqL1xuICBhdHRhY2htZW50UHJldmlld0xpc3RUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPEF0dGFjaG1lbnRQcmV2aWV3TGlzdENvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIHRvIGRpc3BsYXkgYXZhdGFycyBmb3IgY2hhbm5lbHMgYW5kIHVzZXJzIChpbnN0ZWFkIG9mIHRoZSBbZGVmYXVsdCBhdmF0YXJdKC4uL2NvbXBvbmVudHMvQXZhdGFyQ29tcG9uZW50Lm1keCkpXG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgYXZhdGFyVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZW1wbGF0ZVJlZjxBdmF0YXJDb250ZXh0PiB8IHVuZGVmaW5lZD4oXG4gICAgdW5kZWZpbmVkXG4gICk7XG4gIC8qKlxuICAgKiBUZW1wbGF0ZSBmb3IgZGlzcGxheWluZyBpY29ucyAoaW5zdGVhZCBvZiB0aGUgW2RlZmF1bHQgaWNvbiBjb21wb25lbnRdKC4uL2NvbXBvbmVudHMvSWNvbkNvbXBvbmVudC5tZHgpKVxuICAgKlxuICAgKiBGb3IgY29kZSBleGFtcGxlcyB0byB0aGUgZGlmZmVyZW50IGN1c3RvbWl6YXRpb25zIHNlZSBvdXIgW2N1c3RvbWl6YXRpb25zIGV4YW1wbGUgYXBwbGljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlKSwgc3BlY2lmaWNhbGx5IHRoZSBbQXBwQ29tcG9uZW50XShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZS9zcmMvYXBwKSAoc2VlIFtSRUFETUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci9ibG9iL21hc3Rlci9SRUFETUUubWQjY3VzdG9taXphdGlvbi1leGFtcGxlcykgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3RhcnQgdGhlIGFwcGxpY2F0aW9uKS5cbiAgICovXG4gIGljb25UZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRlbXBsYXRlUmVmPEljb25Db250ZXh0PiB8IHVuZGVmaW5lZD4oXG4gICAgdW5kZWZpbmVkXG4gICk7XG4gIC8qKlxuICAgKiBUZW1wbGF0ZSBmb3IgZGlzcGxheWluZyB0aGUgbG9hZGluZyBpbmRpY2F0b3IgKGluc3RlYWQgb2YgdGhlIFtkZWZhdWx0IGxvYWRpbmcgaW5kaWNhdG9yXSguLi9jb21wb25lbnRzL0xvYWRpbmdJbmRpY2F0b3JDb21wb25lbnQubWR4KSlcbiAgICpcbiAgICogRm9yIGNvZGUgZXhhbXBsZXMgdG8gdGhlIGRpZmZlcmVudCBjdXN0b21pemF0aW9ucyBzZWUgb3VyIFtjdXN0b21pemF0aW9ucyBleGFtcGxlIGFwcGxpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZSksIHNwZWNpZmljYWxseSB0aGUgW0FwcENvbXBvbmVudF0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUvc3JjL2FwcCkgKHNlZSBbUkVBRE1FXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI2N1c3RvbWl6YXRpb24tZXhhbXBsZXMpIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN0YXJ0IHRoZSBhcHBsaWNhdGlvbikuXG4gICAqL1xuICBsb2FkaW5nSW5kaWNhdG9yVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxMb2FkaW5nSW5kaWNhdG9yQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGVtcGxhdGUgZm9yIGRpc3BsYXlpbmcgdGhlIG1lc3NhZ2UgYWN0aW9ucyBib3ggKGluc3RlYWQgb2YgdGhlIFtkZWZhdWx0IG1lc3NhZ2UgYWN0aW9ucyBib3hdKC4uL2NvbXBvbmVudHMvTWVzc2FnZUFjdGlvbnNCb3hDb21wb25lbnQubWR4KSlcbiAgICpcbiAgICogRm9yIGNvZGUgZXhhbXBsZXMgdG8gdGhlIGRpZmZlcmVudCBjdXN0b21pemF0aW9ucyBzZWUgb3VyIFtjdXN0b21pemF0aW9ucyBleGFtcGxlIGFwcGxpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZSksIHNwZWNpZmljYWxseSB0aGUgW0FwcENvbXBvbmVudF0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUvc3JjL2FwcCkgKHNlZSBbUkVBRE1FXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI2N1c3RvbWl6YXRpb24tZXhhbXBsZXMpIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN0YXJ0IHRoZSBhcHBsaWNhdGlvbikuXG4gICAqL1xuICBtZXNzYWdlQWN0aW9uc0JveFRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8TWVzc2FnZUFjdGlvbnNCb3hDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCBmb3IgZGlzcGxheWluZyBhbiBpdGVtIGluIHRoZSBbbWVzc2FnZSBhY3Rpb25zIGJveF0oLi4vY29tcG9uZW50cy9NZXNzYWdlQWN0aW9uc0JveENvbXBvbmVudC5tZHgpXG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgbWVzc2FnZUFjdGlvbnNCb3hJdGVtVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxNZXNzYWdlQWN0aW9uQm94SXRlbUNvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIHRvIGRpc3BsYXkgdGhlIHJlYWN0aW9ucyBvZiBhIFttZXNzYWdlXSguLi9jb21wb25lbnRzL01lc3NhZ2VDb21wb25lbnQubWR4KSwgYW5kIHRoZSBzZWxlY3RvciB0byBhZGQgYSByZWFjdGlvbiB0byBhIG1lc3NhZ2UgKGluc3RlYWQgb2YgdGhlIFtkZWZhdWx0IG1lc3NhZ2UgcmVhY3Rpb25zIGNvbXBvbmVudF0oLi4vY29tcG9uZW50cy9NZXNzYWdlUmVhY3Rpb25zQ29tcG9uZW50Lm1keCkpXG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgbWVzc2FnZVJlYWN0aW9uc1RlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8TWVzc2FnZVJlYWN0aW9uc0NvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIHRvIGRpc3BsYXkgYSBtb2RhbCB3aW5kb3cgKGluc3RlYWQgb2YgdGhlIFtkZWZhdWx0IG1vZGFsXSguLi9jb21wb25lbnRzL01vZGFsQ29tcG9uZW50Lm1keCkpXG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgbW9kYWxUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRlbXBsYXRlUmVmPE1vZGFsQ29udGV4dD4gfCB1bmRlZmluZWQ+KFxuICAgIHVuZGVmaW5lZFxuICApO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIFtkZWZhdWx0IG5vdGlmaWNhdGlvbiBjb21wb25lbnRdKC4uL2NvbXBvbmVudHMvTm90aWZpY2F0aW9uQ29tcG9uZW50Lm1keClcbiAgICpcbiAgICogRm9yIGNvZGUgZXhhbXBsZXMgdG8gdGhlIGRpZmZlcmVudCBjdXN0b21pemF0aW9ucyBzZWUgb3VyIFtjdXN0b21pemF0aW9ucyBleGFtcGxlIGFwcGxpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZSksIHNwZWNpZmljYWxseSB0aGUgW0FwcENvbXBvbmVudF0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUvc3JjL2FwcCkgKHNlZSBbUkVBRE1FXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI2N1c3RvbWl6YXRpb24tZXhhbXBsZXMpIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN0YXJ0IHRoZSBhcHBsaWNhdGlvbikuXG4gICAqL1xuICBub3RpZmljYXRpb25UZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPE5vdGlmaWNhdGlvbkNvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIGZvciBoZWFkZXIgb2YgYSBbdGhyZWFkXSguLi9jb21wb25lbnRzL1RocmVhZENvbXBvbmVudC5tZHgpXG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgdGhyZWFkSGVhZGVyVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxUaHJlYWRIZWFkZXJDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCBmb3IgZGlzcGxheWluZyB0aGUgZGVsaXZlcmVkIHN0YXRlIG9mIHRoZSBtZXNzYWdlIGluc2lkZSB0aGUgW21lc3NhZ2UgY29tcG9uZW50XSguLi9jb21wb25lbnRzL01lc3NhZ2VDb21wb25lbnQubWR4KVxuICAgKlxuICAgKiBGb3IgY29kZSBleGFtcGxlcyB0byB0aGUgZGlmZmVyZW50IGN1c3RvbWl6YXRpb25zIHNlZSBvdXIgW2N1c3RvbWl6YXRpb25zIGV4YW1wbGUgYXBwbGljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlKSwgc3BlY2lmaWNhbGx5IHRoZSBbQXBwQ29tcG9uZW50XShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZS9zcmMvYXBwKSAoc2VlIFtSRUFETUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci9ibG9iL21hc3Rlci9SRUFETUUubWQjY3VzdG9taXphdGlvbi1leGFtcGxlcykgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3RhcnQgdGhlIGFwcGxpY2F0aW9uKS5cbiAgICovXG4gIGRlbGl2ZXJlZFN0YXR1c1RlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8RGVsaXZlcmVkU3RhdHVzQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgZm9yIGRpc3BsYXlpbmcgdGhlIHNlbmRpbmcgc3RhdGUgb2YgdGhlIG1lc3NhZ2UgaW5zaWRlIHRoZSBbbWVzc2FnZSBjb21wb25lbnRdKC4uL2NvbXBvbmVudHMvTWVzc2FnZUNvbXBvbmVudC5tZHgpXG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgc2VuZGluZ1N0YXR1c1RlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8U2VuZGluZ1N0YXR1c0NvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIGZvciBkaXNwbGF5aW5nIHRoZSBzZW50IHN0YXRlIG9mIHRoZSBtZXNzYWdlIGluc2lkZSB0aGUgW21lc3NhZ2UgY29tcG9uZW50XSguLi9jb21wb25lbnRzL01lc3NhZ2VDb21wb25lbnQubWR4KVxuICAgKlxuICAgKiBGb3IgY29kZSBleGFtcGxlcyB0byB0aGUgZGlmZmVyZW50IGN1c3RvbWl6YXRpb25zIHNlZSBvdXIgW2N1c3RvbWl6YXRpb25zIGV4YW1wbGUgYXBwbGljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlKSwgc3BlY2lmaWNhbGx5IHRoZSBbQXBwQ29tcG9uZW50XShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZS9zcmMvYXBwKSAoc2VlIFtSRUFETUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci9ibG9iL21hc3Rlci9SRUFETUUubWQjY3VzdG9taXphdGlvbi1leGFtcGxlcykgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3RhcnQgdGhlIGFwcGxpY2F0aW9uKS5cbiAgICovXG4gIHJlYWRTdGF0dXNUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPFJlYWRTdGF0dXNDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCB0byBkaXNwbGF5IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgYSBjaGFubmVsIHVuZGVyIHRoZSBjaGFubmVsIG5hbWUgaW5zaWRlIHRoZSBbY2hhbm5lbCBoZWFkZXIgY29tcG9uZW50XSguLi9jb21wb25lbnRzL0NoYW5uZWxIZWFkZXJDb21wb25lbnQubWR4KVxuICAgKlxuICAgKiBGb3IgY29kZSBleGFtcGxlcyB0byB0aGUgZGlmZmVyZW50IGN1c3RvbWl6YXRpb25zIHNlZSBvdXIgW2N1c3RvbWl6YXRpb25zIGV4YW1wbGUgYXBwbGljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlKSwgc3BlY2lmaWNhbGx5IHRoZSBbQXBwQ29tcG9uZW50XShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZS9zcmMvYXBwKSAoc2VlIFtSRUFETUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci9ibG9iL21hc3Rlci9SRUFETUUubWQjY3VzdG9taXphdGlvbi1leGFtcGxlcykgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3RhcnQgdGhlIGFwcGxpY2F0aW9uKS5cbiAgICovXG4gIGNoYW5uZWxIZWFkZXJJbmZvVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxDaGFubmVsSGVhZGVySW5mb0NvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIGZvciBkaXNwbGF5aW5nIGZpbGUgdXBsb2FkL2F0dGFjaG1lbnQgc2VsZWN0b3IgaW5zaWRlIHRoZSBbbWVzc2FnZSBpbnB1dF0oLi4vY29tcG9uZW50cy9NZXNzYWdlSW5wdXRDb21wb25lbnQubWR4KVxuICAgKlxuICAgKiBGb3IgY29kZSBleGFtcGxlcyB0byB0aGUgZGlmZmVyZW50IGN1c3RvbWl6YXRpb25zIHNlZSBvdXIgW2N1c3RvbWl6YXRpb25zIGV4YW1wbGUgYXBwbGljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlKSwgc3BlY2lmaWNhbGx5IHRoZSBbQXBwQ29tcG9uZW50XShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZS9zcmMvYXBwKSAoc2VlIFtSRUFETUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci9ibG9iL21hc3Rlci9SRUFETUUubWQjY3VzdG9taXphdGlvbi1leGFtcGxlcykgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3RhcnQgdGhlIGFwcGxpY2F0aW9uKS5cbiAgICovXG4gIGN1c3RvbUF0dGFjaG1lbnRVcGxvYWRUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPEN1c3RvbUF0dGFjaG1lbnRVcGxvYWRDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxufVxuIl19
193
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXRlbXBsYXRlcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL2N1c3RvbS10ZW1wbGF0ZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBOEJ2Qzs7OztHQUlHO0FBSUgsTUFBTSxPQUFPLHNCQUFzQjtJQTRPakM7UUEzT0E7O1dBRUc7UUFDSCxxQ0FBZ0MsR0FBRyxJQUFJLGVBQWUsQ0FFcEQsU0FBUyxDQUFDLENBQUM7UUFDYjs7OztXQUlHO1FBQ0gscUNBQWdDLEdBQUcsSUFBSSxlQUFlLENBRXBELFNBQVMsQ0FBQyxDQUFDO1FBQ2I7Ozs7V0FJRztRQUNILDRCQUF1QixHQUFHLElBQUksZUFBZSxDQUUzQyxTQUFTLENBQUMsQ0FBQztRQUNiOzs7O1dBSUc7UUFDSCwwQkFBcUIsR0FBRyxJQUFJLGVBQWUsQ0FFekMsU0FBUyxDQUFDLENBQUM7UUFDYjs7OztXQUlHO1FBQ0gscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBRXBDLFNBQVMsQ0FBQyxDQUFDO1FBQ2I7Ozs7V0FJRztRQUNILHlCQUFvQixHQUFHLElBQUksZUFBZSxDQUV4QyxTQUFTLENBQUMsQ0FBQztRQUNiOzs7O1dBSUc7UUFDSCw2QkFBd0IsR0FBRyxJQUFJLGVBQWUsQ0FFNUMsU0FBUyxDQUFDLENBQUM7UUFDYjs7OztXQUlHO1FBQ0gscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBRXBDLFNBQVMsQ0FBQyxDQUFDO1FBQ2I7Ozs7V0FJRztRQUNILDRCQUF1QixHQUFHLElBQUksZUFBZSxDQUUzQyxTQUFTLENBQUMsQ0FBQztRQUNiOzs7O1dBSUc7UUFDSCw0QkFBdUIsR0FBRyxJQUFJLGVBQWUsQ0FFM0MsU0FBUyxDQUFDLENBQUM7UUFDYjs7OztXQUlHO1FBQ0gsbUNBQThCLEdBQUcsSUFBSSxlQUFlLENBRWxELFNBQVMsQ0FBQyxDQUFDO1FBQ2I7Ozs7V0FJRztRQUNILG9CQUFlLEdBQUcsSUFBSSxlQUFlLENBQ25DLFNBQVMsQ0FDVixDQUFDO1FBQ0Y7Ozs7V0FJRztRQUNILGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQ2pDLFNBQVMsQ0FDVixDQUFDO1FBQ0Y7Ozs7V0FJRztRQUNILDhCQUF5QixHQUFHLElBQUksZUFBZSxDQUU3QyxTQUFTLENBQUMsQ0FBQztRQUNiOzs7O1dBSUc7UUFDSCwrQkFBMEIsR0FBRyxJQUFJLGVBQWUsQ0FFOUMsU0FBUyxDQUFDLENBQUM7UUFDYjs7OztXQUlHO1FBQ0gsbUNBQThCLEdBQUcsSUFBSSxlQUFlLENBRWxELFNBQVMsQ0FBQyxDQUFDO1FBQ2I7Ozs7V0FJRztRQUNILDhCQUF5QixHQUFHLElBQUksZUFBZSxDQUU3QyxTQUFTLENBQUMsQ0FBQztRQUNiOzs7O1dBSUc7UUFDSCxtQkFBYyxHQUFHLElBQUksZUFBZSxDQUNsQyxTQUFTLENBQ1YsQ0FBQztRQUNGOzs7O1dBSUc7UUFDSCwwQkFBcUIsR0FBRyxJQUFJLGVBQWUsQ0FFekMsU0FBUyxDQUFDLENBQUM7UUFDYjs7OztXQUlHO1FBQ0gsMEJBQXFCLEdBQUcsSUFBSSxlQUFlLENBRXpDLFNBQVMsQ0FBQyxDQUFDO1FBQ2I7Ozs7V0FJRztRQUNILDZCQUF3QixHQUFHLElBQUksZUFBZSxDQUU1QyxTQUFTLENBQUMsQ0FBQztRQUNiOzs7O1dBSUc7UUFDSCwyQkFBc0IsR0FBRyxJQUFJLGVBQWUsQ0FFMUMsU0FBUyxDQUFDLENBQUM7UUFDYjs7OztXQUlHO1FBQ0gsd0JBQW1CLEdBQUcsSUFBSSxlQUFlLENBRXZDLFNBQVMsQ0FBQyxDQUFDO1FBQ2I7Ozs7V0FJRztRQUNILCtCQUEwQixHQUFHLElBQUksZUFBZSxDQUU5QyxTQUFTLENBQUMsQ0FBQztRQUNiOzs7O1dBSUc7UUFDSCxvQ0FBK0IsR0FBRyxJQUFJLGVBQWUsQ0FFbkQsU0FBUyxDQUFDLENBQUM7UUFDYjs7V0FFRztRQUNILDZCQUF3QixHQUFHLElBQUksZUFBZSxDQUU1QyxTQUFTLENBQUMsQ0FBQztRQUNiOztXQUVHO1FBQ0gsNkJBQXdCLEdBQUcsSUFBSSxlQUFlLENBRTVDLFNBQVMsQ0FBQyxDQUFDO1FBQ2I7O1dBRUc7UUFDSCwrQkFBMEIsR0FBRyxJQUFJLGVBQWUsQ0FFOUMsU0FBUyxDQUFDLENBQUM7UUFDYjs7V0FFRztRQUNILDRCQUF1QixHQUFHLElBQUksZUFBZSxDQUUzQyxTQUFTLENBQUMsQ0FBQztRQUNiOztXQUVHO1FBQ0gsNEJBQXVCLEdBQUcsSUFBSSxlQUFlLENBRTNDLFNBQVMsQ0FBQyxDQUFDO1FBQ2I7O1dBRUc7UUFDSCwrQkFBMEIsR0FBRyxJQUFJLGVBQWUsQ0FFOUMsU0FBUyxDQUFDLENBQUM7SUFFRSxDQUFDOzttSEE1T0wsc0JBQXNCO3VIQUF0QixzQkFBc0IsY0FGckIsTUFBTTsyRkFFUCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgQXR0YWNobWVudENvbnRleHQsXG4gIEF0dGFjaG1lbnRMaXN0Q29udGV4dCxcbiAgQXR0YWNobWVudFByZXZpZXdMaXN0Q29udGV4dCxcbiAgQXZhdGFyQ29udGV4dCxcbiAgQ2hhbm5lbEFjdGlvbnNDb250ZXh0LFxuICBDaGFubmVsSGVhZGVySW5mb0NvbnRleHQsXG4gIENoYW5uZWxQcmV2aWV3Q29udGV4dCxcbiAgQ29tbWFuZEF1dG9jb21wbGV0ZUxpc3RJdGVtQ29udGV4dCxcbiAgQ3VzdG9tQXR0YWNobWVudFVwbG9hZENvbnRleHQsXG4gIERlbGl2ZXJlZFN0YXR1c0NvbnRleHQsXG4gIEVtb2ppUGlja2VyQ29udGV4dCxcbiAgSWNvbkNvbnRleHQsXG4gIExvYWRpbmdJbmRpY2F0b3JDb250ZXh0LFxuICBNZW50aW9uQXV0Y29tcGxldGVMaXN0SXRlbUNvbnRleHQsXG4gIE1lbnRpb25UZW1wbGF0ZUNvbnRleHQsXG4gIE1lc3NhZ2VBY3Rpb25Cb3hJdGVtQ29udGV4dCxcbiAgTWVzc2FnZUFjdGlvbnNCb3hDb250ZXh0LFxuICBNZXNzYWdlQ29udGV4dCxcbiAgTWVzc2FnZUlucHV0Q29udGV4dCxcbiAgTWVzc2FnZVJlYWN0aW9uc0NvbnRleHQsXG4gIE1vZGFsQ29udGV4dCxcbiAgTm90aWZpY2F0aW9uQ29udGV4dCxcbiAgUmVhZFN0YXR1c0NvbnRleHQsXG4gIFNlbmRpbmdTdGF0dXNDb250ZXh0LFxuICBUaHJlYWRIZWFkZXJDb250ZXh0LFxuICBUeXBpbmdJbmRpY2F0b3JDb250ZXh0LFxufSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBBIGNlbnRyYWwgbG9jYXRpb24gZm9yIHJlZ2lzdGVyaW5nIHlvdXIgY3VzdG9tIHRlbXBsYXRlcyB0byBvdmVycmlkZSBwYXJ0cyBvZiB0aGUgY2hhdCBhcHBsaWNhdGlvbi5cbiAqXG4gKiBGb3IgY29kZSBleGFtcGxlcyB0byB0aGUgZGlmZmVyZW50IGN1c3RvbWl6YXRpb25zIHNlZSBvdXIgW2N1c3RvbWl6YXRpb25zIGV4YW1wbGUgYXBwbGljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlKSwgc3BlY2lmaWNhbGx5IHRoZSBbQXBwQ29tcG9uZW50XShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZS9zcmMvYXBwKSAoc2VlIFtSRUFETUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci9ibG9iL21hc3Rlci9SRUFETUUubWQjY3VzdG9taXphdGlvbi1leGFtcGxlcykgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3RhcnQgdGhlIGFwcGxpY2F0aW9uKS5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEN1c3RvbVRlbXBsYXRlc1NlcnZpY2Uge1xuICAvKipcbiAgICogVGhlIGF1dG9jb21wbGV0ZSBsaXN0IGl0ZW0gdGVtcGxhdGUgZm9yIG1lbnRpb25pbmcgdXNlcnMgKHVzZWQgaW4gdGhlIFtgQXV0b2NvbXBsZXRlVGV4dGFyZWFDb21wb25lbnRgXSguLi9jb21wb25lbnRzL0F1dG9jb21wbGV0ZVRleHRhcmVhQ29tcG9uZW50Lm1keCkpXG4gICAqL1xuICBtZW50aW9uQXV0b2NvbXBsZXRlSXRlbVRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8TWVudGlvbkF1dGNvbXBsZXRlTGlzdEl0ZW1Db250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgYXV0b2NvbXBsZXRlIGxpc3QgaXRlbSB0ZW1wbGF0ZSBmb3IgY29tbWFuZHMgKHVzZWQgaW4gdGhlIFtgQXV0b2NvbXBsZXRlVGV4dGFyZWFDb21wb25lbnRgXSguLi9jb21wb25lbnRzL0F1dG9jb21wbGV0ZVRleHRhcmVhQ29tcG9uZW50Lm1keCkpXG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgY29tbWFuZEF1dG9jb21wbGV0ZUl0ZW1UZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPENvbW1hbmRBdXRvY29tcGxldGVMaXN0SXRlbUNvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRlbXBsYXRlIHVzZWQgdG8gZGlzcGxheSBhbiBpdGVtIGluIHRoZSBbY2hhbm5lbCBsaXN0XSguLi9jb21wb25lbnRzL0NoYW5uZWxMaXN0Q29tcG9uZW50Lm1keCkgKGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgW2NoYW5uYWwgbGlzdCBpdGVtXSguLi9jb21wb25lbnRzL0NoYW5uZWxQcmV2aWV3Q29tcG9uZW50Lm1keCkpXG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgY2hhbm5lbFByZXZpZXdUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPENoYW5uZWxQcmV2aWV3Q29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIG1lc3NhZ2UgaW5wdXQgdGVtcGxhdGUgdXNlZCB3aGVuIGVkaXRpbmcgYSBtZXNzYWdlIChpbnN0ZWFkIG9mIHRoZSBbZGVmYXVsdCBtZXNzYWdlIGlucHV0XSguLi9jb21wb25lbnRzL01lc3NhZ2VJbnB1dENvbXBvbmVudC5tZHgpKVxuICAgKlxuICAgKiBGb3IgY29kZSBleGFtcGxlcyB0byB0aGUgZGlmZmVyZW50IGN1c3RvbWl6YXRpb25zIHNlZSBvdXIgW2N1c3RvbWl6YXRpb25zIGV4YW1wbGUgYXBwbGljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlKSwgc3BlY2lmaWNhbGx5IHRoZSBbQXBwQ29tcG9uZW50XShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZS9zcmMvYXBwKSAoc2VlIFtSRUFETUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci9ibG9iL21hc3Rlci9SRUFETUUubWQjY3VzdG9taXphdGlvbi1leGFtcGxlcykgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3RhcnQgdGhlIGFwcGxpY2F0aW9uKS5cbiAgICovXG4gIG1lc3NhZ2VJbnB1dFRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8TWVzc2FnZUlucHV0Q29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgZm9yIGRpc3BsYXlpbmcgYSBbbWVudGlvbiBpbnNpZGUgYSBtZXNzYWdlXSguLi9jb2RlLWV4YW1wbGVzL21lbnRpb24tYWN0aW9ucy5tZHgpXG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgbWVudGlvblRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8TWVudGlvblRlbXBsYXRlQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIGZvciBbZW1vamkgcGlja2VyXSguLi9jb2RlLWV4YW1wbGVzL2Vtb2ppLXBpY2tlci5tZHgpXG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgZW1vamlQaWNrZXJUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPEVtb2ppUGlja2VyQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHR5cGluZyBpbmRpY2F0b3IgdGVtcGxhdGUgdXNlZCBpbiB0aGUgW21lc3NhZ2UgbGlzdF0oLi4vY29tcG9uZW50cy9NZXNzYWdlTGlzdENvbXBvbmVudC5tZHgpXG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgdHlwaW5nSW5kaWNhdG9yVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxUeXBpbmdJbmRpY2F0b3JDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCB0byBkaXNwbGF5IGEgbWVzc2FnZSBpbiB0aGUgW21lc3NhZ2UgbGlzdF0oLi4vY29tcG9uZW50cy9NZXNzYWdlTGlzdENvbXBvbmVudC5tZHgpIChpbnN0ZWFkIG9mIHRoZSBbZGVmYXVsdCBtZXNzYWdlIGNvbXBvbmVudF0oLi4vY29tcG9uZW50cy9NZXNzYWdlQ29tcG9uZW50Lm1keCkpXG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgbWVzc2FnZVRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8TWVzc2FnZUNvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSBmb3IgY2hhbm5lbCBhY3Rpb25zIGRpc3BsYXllZCBpbiB0aGUgW2NoYW5uZWwgaGVhZGVyXSguLi9jb21wb25lbnRzL0NoYW5uZWxIZWFkZXJDb21wb25lbnQubWR4KSAoYnkgZGVmYXVsdCBubyBjaGFubmVsIGFjdGlvbiBpcyBkaXNwbGF5ZWQpXG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgY2hhbm5lbEFjdGlvbnNUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPENoYW5uZWxBY3Rpb25zQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgdG8gZGlzcGxheSBhdHRhY2htZW50cyBvZiBhIFttZXNzYWdlXSguLi9jb21wb25lbnRzL01lc3NhZ2VDb21wb25lbnQubWR4KSAoaW5zdGVhZCBvZiB0aGUgW2RlZmF1bHQgYXR0YWNobWVudCBsaXN0XSguLi9jb21wb25lbnRzL0F0dGFjaG1lbnRMaXN0Q29tcG9uZW50Lm1keCkpXG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgYXR0YWNobWVudExpc3RUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPEF0dGFjaG1lbnRMaXN0Q29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgdG8gZGlzcGxheSBhdHRhY2htZW50cyBpbiB0aGUgW21lc3NhZ2UgaW5wdXRdKC4uL2NvbXBvbmVudHMvTWVzc2FnZUlucHV0Q29tcG9uZW50Lm1keCkgY29tcG9uZW50IChpbnN0ZWFkIG9mIHRoZSBbZGVmYXVsdCBhdHRhY2htZW50IHByZXZpZXddKC4uL2NvbXBvbmVudHMvQXR0YWNobWVudFByZXZpZXdMaXN0Q29tcG9uZW50Lm1keCkpXG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgYXR0YWNobWVudFByZXZpZXdMaXN0VGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxBdHRhY2htZW50UHJldmlld0xpc3RDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCB0byBkaXNwbGF5IGF2YXRhcnMgZm9yIGNoYW5uZWxzIGFuZCB1c2VycyAoaW5zdGVhZCBvZiB0aGUgW2RlZmF1bHQgYXZhdGFyXSguLi9jb21wb25lbnRzL0F2YXRhckNvbXBvbmVudC5tZHgpKVxuICAgKlxuICAgKiBGb3IgY29kZSBleGFtcGxlcyB0byB0aGUgZGlmZmVyZW50IGN1c3RvbWl6YXRpb25zIHNlZSBvdXIgW2N1c3RvbWl6YXRpb25zIGV4YW1wbGUgYXBwbGljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlKSwgc3BlY2lmaWNhbGx5IHRoZSBbQXBwQ29tcG9uZW50XShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZS9zcmMvYXBwKSAoc2VlIFtSRUFETUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci9ibG9iL21hc3Rlci9SRUFETUUubWQjY3VzdG9taXphdGlvbi1leGFtcGxlcykgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3RhcnQgdGhlIGFwcGxpY2F0aW9uKS5cbiAgICovXG4gIGF2YXRhclRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGVtcGxhdGVSZWY8QXZhdGFyQ29udGV4dD4gfCB1bmRlZmluZWQ+KFxuICAgIHVuZGVmaW5lZFxuICApO1xuICAvKipcbiAgICogVGVtcGxhdGUgZm9yIGRpc3BsYXlpbmcgaWNvbnMgKGluc3RlYWQgb2YgdGhlIFtkZWZhdWx0IGljb24gY29tcG9uZW50XSguLi9jb21wb25lbnRzL0ljb25Db21wb25lbnQubWR4KSlcbiAgICpcbiAgICogRm9yIGNvZGUgZXhhbXBsZXMgdG8gdGhlIGRpZmZlcmVudCBjdXN0b21pemF0aW9ucyBzZWUgb3VyIFtjdXN0b21pemF0aW9ucyBleGFtcGxlIGFwcGxpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZSksIHNwZWNpZmljYWxseSB0aGUgW0FwcENvbXBvbmVudF0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUvc3JjL2FwcCkgKHNlZSBbUkVBRE1FXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI2N1c3RvbWl6YXRpb24tZXhhbXBsZXMpIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN0YXJ0IHRoZSBhcHBsaWNhdGlvbikuXG4gICAqL1xuICBpY29uVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZW1wbGF0ZVJlZjxJY29uQ29udGV4dD4gfCB1bmRlZmluZWQ+KFxuICAgIHVuZGVmaW5lZFxuICApO1xuICAvKipcbiAgICogVGVtcGxhdGUgZm9yIGRpc3BsYXlpbmcgdGhlIGxvYWRpbmcgaW5kaWNhdG9yIChpbnN0ZWFkIG9mIHRoZSBbZGVmYXVsdCBsb2FkaW5nIGluZGljYXRvcl0oLi4vY29tcG9uZW50cy9Mb2FkaW5nSW5kaWNhdG9yQ29tcG9uZW50Lm1keCkpXG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgbG9hZGluZ0luZGljYXRvclRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8TG9hZGluZ0luZGljYXRvckNvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRlbXBsYXRlIGZvciBkaXNwbGF5aW5nIHRoZSBtZXNzYWdlIGFjdGlvbnMgYm94IChpbnN0ZWFkIG9mIHRoZSBbZGVmYXVsdCBtZXNzYWdlIGFjdGlvbnMgYm94XSguLi9jb21wb25lbnRzL01lc3NhZ2VBY3Rpb25zQm94Q29tcG9uZW50Lm1keCkpXG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgbWVzc2FnZUFjdGlvbnNCb3hUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPE1lc3NhZ2VBY3Rpb25zQm94Q29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgZm9yIGRpc3BsYXlpbmcgYW4gaXRlbSBpbiB0aGUgW21lc3NhZ2UgYWN0aW9ucyBib3hdKC4uL2NvbXBvbmVudHMvTWVzc2FnZUFjdGlvbnNCb3hDb21wb25lbnQubWR4KVxuICAgKlxuICAgKiBGb3IgY29kZSBleGFtcGxlcyB0byB0aGUgZGlmZmVyZW50IGN1c3RvbWl6YXRpb25zIHNlZSBvdXIgW2N1c3RvbWl6YXRpb25zIGV4YW1wbGUgYXBwbGljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlKSwgc3BlY2lmaWNhbGx5IHRoZSBbQXBwQ29tcG9uZW50XShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZS9zcmMvYXBwKSAoc2VlIFtSRUFETUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci9ibG9iL21hc3Rlci9SRUFETUUubWQjY3VzdG9taXphdGlvbi1leGFtcGxlcykgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3RhcnQgdGhlIGFwcGxpY2F0aW9uKS5cbiAgICovXG4gIG1lc3NhZ2VBY3Rpb25zQm94SXRlbVRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8TWVzc2FnZUFjdGlvbkJveEl0ZW1Db250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCB0byBkaXNwbGF5IHRoZSByZWFjdGlvbnMgb2YgYSBbbWVzc2FnZV0oLi4vY29tcG9uZW50cy9NZXNzYWdlQ29tcG9uZW50Lm1keCksIGFuZCB0aGUgc2VsZWN0b3IgdG8gYWRkIGEgcmVhY3Rpb24gdG8gYSBtZXNzYWdlIChpbnN0ZWFkIG9mIHRoZSBbZGVmYXVsdCBtZXNzYWdlIHJlYWN0aW9ucyBjb21wb25lbnRdKC4uL2NvbXBvbmVudHMvTWVzc2FnZVJlYWN0aW9uc0NvbXBvbmVudC5tZHgpKVxuICAgKlxuICAgKiBGb3IgY29kZSBleGFtcGxlcyB0byB0aGUgZGlmZmVyZW50IGN1c3RvbWl6YXRpb25zIHNlZSBvdXIgW2N1c3RvbWl6YXRpb25zIGV4YW1wbGUgYXBwbGljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlKSwgc3BlY2lmaWNhbGx5IHRoZSBbQXBwQ29tcG9uZW50XShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZS9zcmMvYXBwKSAoc2VlIFtSRUFETUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci9ibG9iL21hc3Rlci9SRUFETUUubWQjY3VzdG9taXphdGlvbi1leGFtcGxlcykgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3RhcnQgdGhlIGFwcGxpY2F0aW9uKS5cbiAgICovXG4gIG1lc3NhZ2VSZWFjdGlvbnNUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPE1lc3NhZ2VSZWFjdGlvbnNDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCB0byBkaXNwbGF5IGEgbW9kYWwgd2luZG93IChpbnN0ZWFkIG9mIHRoZSBbZGVmYXVsdCBtb2RhbF0oLi4vY29tcG9uZW50cy9Nb2RhbENvbXBvbmVudC5tZHgpKVxuICAgKlxuICAgKiBGb3IgY29kZSBleGFtcGxlcyB0byB0aGUgZGlmZmVyZW50IGN1c3RvbWl6YXRpb25zIHNlZSBvdXIgW2N1c3RvbWl6YXRpb25zIGV4YW1wbGUgYXBwbGljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlKSwgc3BlY2lmaWNhbGx5IHRoZSBbQXBwQ29tcG9uZW50XShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZS9zcmMvYXBwKSAoc2VlIFtSRUFETUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci9ibG9iL21hc3Rlci9SRUFETUUubWQjY3VzdG9taXphdGlvbi1leGFtcGxlcykgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3RhcnQgdGhlIGFwcGxpY2F0aW9uKS5cbiAgICovXG4gIG1vZGFsVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZW1wbGF0ZVJlZjxNb2RhbENvbnRleHQ+IHwgdW5kZWZpbmVkPihcbiAgICB1bmRlZmluZWRcbiAgKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBbZGVmYXVsdCBub3RpZmljYXRpb24gY29tcG9uZW50XSguLi9jb21wb25lbnRzL05vdGlmaWNhdGlvbkNvbXBvbmVudC5tZHgpXG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgbm90aWZpY2F0aW9uVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxOb3RpZmljYXRpb25Db250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCBmb3IgaGVhZGVyIG9mIGEgW3RocmVhZF0oLi4vY29tcG9uZW50cy9UaHJlYWRDb21wb25lbnQubWR4KVxuICAgKlxuICAgKiBGb3IgY29kZSBleGFtcGxlcyB0byB0aGUgZGlmZmVyZW50IGN1c3RvbWl6YXRpb25zIHNlZSBvdXIgW2N1c3RvbWl6YXRpb25zIGV4YW1wbGUgYXBwbGljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlKSwgc3BlY2lmaWNhbGx5IHRoZSBbQXBwQ29tcG9uZW50XShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZS9zcmMvYXBwKSAoc2VlIFtSRUFETUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci9ibG9iL21hc3Rlci9SRUFETUUubWQjY3VzdG9taXphdGlvbi1leGFtcGxlcykgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3RhcnQgdGhlIGFwcGxpY2F0aW9uKS5cbiAgICovXG4gIHRocmVhZEhlYWRlclRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8VGhyZWFkSGVhZGVyQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgZm9yIGRpc3BsYXlpbmcgdGhlIGRlbGl2ZXJlZCBzdGF0ZSBvZiB0aGUgbWVzc2FnZSBpbnNpZGUgdGhlIFttZXNzYWdlIGNvbXBvbmVudF0oLi4vY29tcG9uZW50cy9NZXNzYWdlQ29tcG9uZW50Lm1keClcbiAgICpcbiAgICogRm9yIGNvZGUgZXhhbXBsZXMgdG8gdGhlIGRpZmZlcmVudCBjdXN0b21pemF0aW9ucyBzZWUgb3VyIFtjdXN0b21pemF0aW9ucyBleGFtcGxlIGFwcGxpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZSksIHNwZWNpZmljYWxseSB0aGUgW0FwcENvbXBvbmVudF0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUvc3JjL2FwcCkgKHNlZSBbUkVBRE1FXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI2N1c3RvbWl6YXRpb24tZXhhbXBsZXMpIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN0YXJ0IHRoZSBhcHBsaWNhdGlvbikuXG4gICAqL1xuICBkZWxpdmVyZWRTdGF0dXNUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPERlbGl2ZXJlZFN0YXR1c0NvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIGZvciBkaXNwbGF5aW5nIHRoZSBzZW5kaW5nIHN0YXRlIG9mIHRoZSBtZXNzYWdlIGluc2lkZSB0aGUgW21lc3NhZ2UgY29tcG9uZW50XSguLi9jb21wb25lbnRzL01lc3NhZ2VDb21wb25lbnQubWR4KVxuICAgKlxuICAgKiBGb3IgY29kZSBleGFtcGxlcyB0byB0aGUgZGlmZmVyZW50IGN1c3RvbWl6YXRpb25zIHNlZSBvdXIgW2N1c3RvbWl6YXRpb25zIGV4YW1wbGUgYXBwbGljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlKSwgc3BlY2lmaWNhbGx5IHRoZSBbQXBwQ29tcG9uZW50XShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZS9zcmMvYXBwKSAoc2VlIFtSRUFETUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci9ibG9iL21hc3Rlci9SRUFETUUubWQjY3VzdG9taXphdGlvbi1leGFtcGxlcykgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3RhcnQgdGhlIGFwcGxpY2F0aW9uKS5cbiAgICovXG4gIHNlbmRpbmdTdGF0dXNUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPFNlbmRpbmdTdGF0dXNDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCBmb3IgZGlzcGxheWluZyB0aGUgc2VudCBzdGF0ZSBvZiB0aGUgbWVzc2FnZSBpbnNpZGUgdGhlIFttZXNzYWdlIGNvbXBvbmVudF0oLi4vY29tcG9uZW50cy9NZXNzYWdlQ29tcG9uZW50Lm1keClcbiAgICpcbiAgICogRm9yIGNvZGUgZXhhbXBsZXMgdG8gdGhlIGRpZmZlcmVudCBjdXN0b21pemF0aW9ucyBzZWUgb3VyIFtjdXN0b21pemF0aW9ucyBleGFtcGxlIGFwcGxpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZSksIHNwZWNpZmljYWxseSB0aGUgW0FwcENvbXBvbmVudF0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUvc3JjL2FwcCkgKHNlZSBbUkVBRE1FXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI2N1c3RvbWl6YXRpb24tZXhhbXBsZXMpIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN0YXJ0IHRoZSBhcHBsaWNhdGlvbikuXG4gICAqL1xuICByZWFkU3RhdHVzVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxSZWFkU3RhdHVzQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgdG8gZGlzcGxheSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IGEgY2hhbm5lbCB1bmRlciB0aGUgY2hhbm5lbCBuYW1lIGluc2lkZSB0aGUgW2NoYW5uZWwgaGVhZGVyIGNvbXBvbmVudF0oLi4vY29tcG9uZW50cy9DaGFubmVsSGVhZGVyQ29tcG9uZW50Lm1keClcbiAgICpcbiAgICogRm9yIGNvZGUgZXhhbXBsZXMgdG8gdGhlIGRpZmZlcmVudCBjdXN0b21pemF0aW9ucyBzZWUgb3VyIFtjdXN0b21pemF0aW9ucyBleGFtcGxlIGFwcGxpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZSksIHNwZWNpZmljYWxseSB0aGUgW0FwcENvbXBvbmVudF0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUvc3JjL2FwcCkgKHNlZSBbUkVBRE1FXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI2N1c3RvbWl6YXRpb24tZXhhbXBsZXMpIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN0YXJ0IHRoZSBhcHBsaWNhdGlvbikuXG4gICAqL1xuICBjaGFubmVsSGVhZGVySW5mb1RlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8Q2hhbm5lbEhlYWRlckluZm9Db250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCBmb3IgZGlzcGxheWluZyBmaWxlIHVwbG9hZC9hdHRhY2htZW50IHNlbGVjdG9yIGluc2lkZSB0aGUgW21lc3NhZ2UgaW5wdXRdKC4uL2NvbXBvbmVudHMvTWVzc2FnZUlucHV0Q29tcG9uZW50Lm1keClcbiAgICpcbiAgICogRm9yIGNvZGUgZXhhbXBsZXMgdG8gdGhlIGRpZmZlcmVudCBjdXN0b21pemF0aW9ucyBzZWUgb3VyIFtjdXN0b21pemF0aW9ucyBleGFtcGxlIGFwcGxpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZSksIHNwZWNpZmljYWxseSB0aGUgW0FwcENvbXBvbmVudF0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUvc3JjL2FwcCkgKHNlZSBbUkVBRE1FXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI2N1c3RvbWl6YXRpb24tZXhhbXBsZXMpIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN0YXJ0IHRoZSBhcHBsaWNhdGlvbikuXG4gICAqL1xuICBjdXN0b21BdHRhY2htZW50VXBsb2FkVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxDdXN0b21BdHRhY2htZW50VXBsb2FkQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHRoYXQgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgaG93IGEgc2luZ2xlIGltYWdlIGF0dGFjaG1lbnQgaXMgZGlzcGxheWVkIGluc2lkZSB0aGUgW2F0dGFjaG1lbnQgbGlzdF0oLi4vY29tcG9uZW50cy9BdHRhY2htZW50TGlzdENvbXBvbmVudC5tZHgpXG4gICAqL1xuICBpbWFnZUF0dGFjaG1lbnRUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPEF0dGFjaG1lbnRDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdGhhdCBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSBob3cgYSB2aWRlbyBhdHRhY2htZW50IGlzIGRpc3BsYXllZCBpbnNpZGUgdGhlIFthdHRhY2htZW50IGxpc3RdKC4uL2NvbXBvbmVudHMvQXR0YWNobWVudExpc3RDb21wb25lbnQubWR4KVxuICAgKi9cbiAgdmlkZW9BdHRhY2htZW50VGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxBdHRhY2htZW50Q29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHRoYXQgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgaG93IGltYWdlIGdhbGxlcnkgaXMgZGlzcGxheWVkIGluc2lkZSB0aGUgW2F0dGFjaG1lbnQgbGlzdF0oLi4vY29tcG9uZW50cy9BdHRhY2htZW50TGlzdENvbXBvbmVudC5tZHgpXG4gICAqL1xuICBnYWxsZXJ5QXR0YWNobWVudFRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8QXR0YWNobWVudENvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB0aGF0IGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIGhvdyBhIGZpbGUgYXR0YWNobWVudCBpcyBkaXNwbGF5ZWQgaW5zaWRlIHRoZSBbYXR0YWNobWVudCBsaXN0XSguLi9jb21wb25lbnRzL0F0dGFjaG1lbnRMaXN0Q29tcG9uZW50Lm1keClcbiAgICovXG4gIGZpbGVBdHRhY2htZW50VGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxBdHRhY2htZW50Q29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHRoYXQgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgaG93IGEgY2FyZCBhdHRhY2htZW50IGlzIGRpc3BsYXllZCBpbnNpZGUgdGhlIFthdHRhY2htZW50IGxpc3RdKC4uL2NvbXBvbmVudHMvQXR0YWNobWVudExpc3RDb21wb25lbnQubWR4KVxuICAgKi9cbiAgY2FyZEF0dGFjaG1lbnRUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPEF0dGFjaG1lbnRDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdGhhdCBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSBob3cgYXR0YWNobWVudCBhY3Rpb25zIGFyZSBkaXNwbGF5ZWQgaW5zaWRlIHRoZSBbYXR0YWNobWVudCBsaXN0XSguLi9jb21wb25lbnRzL0F0dGFjaG1lbnRMaXN0Q29tcG9uZW50Lm1keClcbiAgICovXG4gIGF0dGFjaG1lbnRBY3Rpb25zVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxBdHRhY2htZW50Q29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cbn1cbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEF0dGFjaG1lbnQsXG4gIENoYW5uZWwsXG4gIENoYW5uZWxNZW1iZXJSZXNwb25zZSxcbiAgQ29tbWFuZFJlc3BvbnNlLFxuICBFdmVudCxcbiAgRXh0ZW5kYWJsZUdlbmVyaWNzLFxuICBGb3JtYXRNZXNzYWdlUmVzcG9uc2UsXG4gIExpdGVyYWxTdHJpbmdGb3JVbmlvbixcbiAgTWVzc2FnZVJlc3BvbnNlQmFzZSxcbiAgTXV0ZSxcbiAgUmVhY3Rpb25SZXNwb25zZSxcbiAgVXNlcixcbiAgVXNlclJlc3BvbnNlLFxufSBmcm9tICdzdHJlYW0tY2hhdCc7XG5pbXBvcnQgeyBBdHRhY2htZW50U2VydmljZSB9IGZyb20gJy4vYXR0YWNobWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEljb24gfSBmcm9tICcuL2ljb24vaWNvbi5jb21wb25lbnQnO1xuXG5leHBvcnQgdHlwZSBVbmtub3duVHlwZSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5leHBvcnQgdHlwZSBDdXN0b21UcmlnZ2VyID0ge1xuICBba2V5OiBzdHJpbmddOiB7XG4gICAgY29tcG9uZW50UHJvcHM6IFVua25vd25UeXBlO1xuICAgIGRhdGE6IFVua25vd25UeXBlO1xuICB9O1xufTtcblxuZXhwb3J0IHR5cGUgRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcyA9IEV4dGVuZGFibGVHZW5lcmljcyAmIHtcbiAgYXR0YWNobWVudFR5cGU6IERlZmF1bHRBdHRhY2htZW50VHlwZTtcbiAgY2hhbm5lbFR5cGU6IERlZmF1bHRDaGFubmVsVHlwZTtcbiAgY29tbWFuZFR5cGU6IExpdGVyYWxTdHJpbmdGb3JVbmlvbjtcbiAgZXZlbnRUeXBlOiBVbmtub3duVHlwZTtcbiAgbWVzc2FnZVR5cGU6IERlZmF1bHRNZXNzYWdlVHlwZTtcbiAgcmVhY3Rpb25UeXBlOiBVbmtub3duVHlwZTtcbiAgdXNlclR5cGU6IERlZmF1bHRVc2VyVHlwZTtcbn07XG5cbmV4cG9ydCB0eXBlIERlZmF1bHRBdHRhY2htZW50VHlwZSA9IFVua25vd25UeXBlICYge1xuICBhc3NldF91cmw/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICBpbWFnZXM/OiBBcnJheTxBdHRhY2htZW50PERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+PjtcbiAgbWltZV90eXBlPzogc3RyaW5nO1xuICBpc0N1c3RvbUF0dGFjaG1lbnQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgRGVmYXVsdENoYW5uZWxUeXBlID0gVW5rbm93blR5cGUgJiB7XG4gIGltYWdlPzogc3RyaW5nO1xuICBtZW1iZXJfY291bnQ/OiBudW1iZXI7XG4gIHN1YnRpdGxlPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgRGVmYXVsdENvbW1hbmRUeXBlID0gTGl0ZXJhbFN0cmluZ0ZvclVuaW9uO1xuXG5leHBvcnQgdHlwZSBEZWZhdWx0TWVzc2FnZVR5cGUgPSBVbmtub3duVHlwZSAmIHtcbiAgY3VzdG9tVHlwZT86ICdjaGFubmVsLmludHJvJyB8ICdtZXNzYWdlLmRhdGUnO1xuICBkYXRlPzogc3RyaW5nIHwgRGF0ZTtcbiAgZXJyb3JTdGF0dXNDb2RlPzogbnVtYmVyO1xuICBldmVudD86IEV2ZW50PERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+O1xuICB1bnJlYWQ/OiBib29sZWFuO1xuICByZWFkQnk6IFVzZXJSZXNwb25zZTxEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzPltdO1xuICB0cmFuc2xhdGlvbj86IHN0cmluZztcbiAgcXVvdGVkX21lc3NhZ2U/OiBNZXNzYWdlUmVzcG9uc2VCYXNlPERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+O1xufTtcblxuZXhwb3J0IHR5cGUgRGVmYXVsdFVzZXJUeXBlSW50ZXJuYWwgPSB7XG4gIGltYWdlPzogc3RyaW5nO1xuICBzdGF0dXM/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBEZWZhdWx0VXNlclR5cGUgPSBVbmtub3duVHlwZSAmXG4gIERlZmF1bHRVc2VyVHlwZUludGVybmFsICYge1xuICAgIG11dGVzPzogQXJyYXk8TXV0ZTxEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzPj47XG4gIH07XG5cbmV4cG9ydCB0eXBlIFN0cmVhbU1lc3NhZ2U8XG4gIFQgZXh0ZW5kcyBEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzID0gRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljc1xuPiA9IEZvcm1hdE1lc3NhZ2VSZXNwb25zZTxUPjtcblxuZXhwb3J0IHR5cGUgQXR0YWNobWVudFVwbG9hZDxcbiAgVCBleHRlbmRzIERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3MgPSBEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzXG4+ID0ge1xuICBmaWxlOiBGaWxlO1xuICBzdGF0ZTogJ2Vycm9yJyB8ICdzdWNjZXNzJyB8ICd1cGxvYWRpbmcnO1xuICB1cmw/OiBzdHJpbmc7XG4gIHR5cGU6ICdpbWFnZScgfCAnZmlsZScgfCAndmlkZW8nO1xuICBwcmV2aWV3VXJpPzogc3RyaW5nIHwgQXJyYXlCdWZmZXI7XG4gIHRodW1iX3VybD86IHN0cmluZztcbiAgZnJvbUF0dGFjaG1lbnQ/OiBBdHRhY2htZW50PFQ+O1xufTtcblxuZXhwb3J0IHR5cGUgTWVudGlvbkF1dGNvbXBsZXRlTGlzdEl0ZW1Db250ZXh0ID0ge1xuICBpdGVtOiBNZW50aW9uQXV0Y29tcGxldGVMaXN0SXRlbTtcbn07XG5cbmV4cG9ydCB0eXBlIENvbW1hbmRBdXRvY29tcGxldGVMaXN0SXRlbUNvbnRleHQgPSB7XG4gIGl0ZW06IENvbWFuZEF1dG9jb21wbGV0ZUxpc3RJdGVtO1xufTtcblxuZXhwb3J0IHR5cGUgTWVudGlvbkF1dGNvbXBsZXRlTGlzdEl0ZW0gPSAoXG4gIHwgQ2hhbm5lbE1lbWJlclJlc3BvbnNlXG4gIHwgVXNlclJlc3BvbnNlXG4pICYge1xuICBhdXRvY29tcGxldGVMYWJlbDogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQ29tYW5kQXV0b2NvbXBsZXRlTGlzdEl0ZW0gPSBDb21tYW5kUmVzcG9uc2UgJiB7XG4gIGF1dG9jb21wbGV0ZUxhYmVsOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBOb3RpZmljYXRpb25UeXBlID0gJ3N1Y2Nlc3MnIHwgJ2Vycm9yJyB8ICdpbmZvJztcblxuZXhwb3J0IHR5cGUgTm90aWZpY2F0aW9uUGF5bG9hZDxUID0ge30+ID0ge1xuICBpZDogc3RyaW5nO1xuICB0eXBlOiBOb3RpZmljYXRpb25UeXBlO1xuICB0ZXh0Pzogc3RyaW5nO1xuICB0cmFuc2xhdGVQYXJhbXM/OiBPYmplY3Q7XG4gIHRlbXBsYXRlPzogVGVtcGxhdGVSZWY8VD47XG4gIHRlbXBsYXRlQ29udGV4dD86IFQ7XG4gIGRpc21pc3NGbjogRnVuY3Rpb247XG59O1xuXG5leHBvcnQgdHlwZSBDaGFubmVsUHJldmlld0NvbnRleHQ8XG4gIFQgZXh0ZW5kcyBEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzID0gRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljc1xuPiA9IHtcbiAgY2hhbm5lbDogQ2hhbm5lbDxUPjtcbn07XG5cbmV4cG9ydCB0eXBlIE1lc3NhZ2VJbnB1dENvbnRleHQgPSB7XG4gIGlzRmlsZVVwbG9hZEVuYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGFyZU1lbnRpb25zRW5hYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgbWVudGlvblNjb3BlOiAnY2hhbm5lbCcgfCAnYXBwbGljYXRpb24nIHwgdW5kZWZpbmVkO1xuICBtb2RlOiAndGhyZWFkJyB8ICdtYWluJyB8IHVuZGVmaW5lZDtcbiAgaXNNdWx0aXBsZUZpbGVVcGxvYWRFbmFibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBtZXNzYWdlOiBTdHJlYW1NZXNzYWdlIHwgdW5kZWZpbmVkO1xuICBtZXNzYWdlVXBkYXRlSGFuZGxlcjogRnVuY3Rpb24gfCB1bmRlZmluZWQ7XG4gIHNlbmRNZXNzYWdlJDogT2JzZXJ2YWJsZTx2b2lkPjtcbn07XG5cbmV4cG9ydCB0eXBlIE1lbnRpb25UZW1wbGF0ZUNvbnRleHQgPSB7XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgdXNlcjogVXNlclJlc3BvbnNlO1xufTtcblxuZXhwb3J0IHR5cGUgRW1vamlQaWNrZXJDb250ZXh0ID0ge1xuICBlbW9qaUlucHV0JDogU3ViamVjdDxzdHJpbmc+O1xufTtcblxuZXhwb3J0IHR5cGUgVHlwaW5nSW5kaWNhdG9yQ29udGV4dCA9IHtcbiAgdXNlcnNUeXBpbmckOiBPYnNlcnZhYmxlPFVzZXJSZXNwb25zZTxEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzPltdPjtcbn07XG5cbmV4cG9ydCB0eXBlIE1lc3NhZ2VDb250ZXh0ID0ge1xuICBtZXNzYWdlOiBTdHJlYW1NZXNzYWdlIHwgdW5kZWZpbmVkO1xuICBlbmFibGVkTWVzc2FnZUFjdGlvbnM6IHN0cmluZ1tdO1xuICBpc0xhc3RTZW50TWVzc2FnZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgbW9kZTogJ3RocmVhZCcgfCAnbWFpbic7XG4gIGlzSGlnaGxpZ2h0ZWQ6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBDaGFubmVsQWN0aW9uc0NvbnRleHQ8XG4gIFQgZXh0ZW5kcyBEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzID0gRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljc1xuPiA9IHsgY2hhbm5lbDogQ2hhbm5lbDxUPiB9O1xuXG5leHBvcnQgdHlwZSBBdHRhY2htZW50TGlzdENvbnRleHQgPSB7XG4gIG1lc3NhZ2VJZDogc3RyaW5nO1xuICBhdHRhY2htZW50czogQXR0YWNobWVudDxEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzPltdO1xuICBwYXJlbnRNZXNzYWdlSWQ/OiBzdHJpbmc7XG4gIGltYWdlTW9kYWxTdGF0ZUNoYW5nZUhhbmRsZXI/OiAoc3RhdGU6ICdvcGVuZWQnIHwgJ2Nsb3NlZCcpID0+IHt9O1xufTtcblxuZXhwb3J0IHR5cGUgQXZhdGFyVHlwZSA9ICdjaGFubmVsJyB8ICd1c2VyJztcblxuZXhwb3J0IHR5cGUgQXZhdGFyTG9jYXRpb24gPVxuICB8ICdjaGFubmVsLXByZXZpZXcnXG4gIHwgJ2NoYW5uZWwtaGVhZGVyJ1xuICB8ICdtZXNzYWdlLXNlbmRlcidcbiAgfCAnbWVzc2FnZS1yZWFkZXInXG4gIHwgJ3F1b3RlZC1tZXNzYWdlLXNlbmRlcidcbiAgfCAnYXV0b2NvbXBsZXRlLWl0ZW0nXG4gIHwgJ3R5cGluZy1pbmRpY2F0b3InXG4gIHwgJ3JlYWN0aW9uJztcblxuZXhwb3J0IHR5cGUgQXZhdGFyQ29udGV4dCA9IHtcbiAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBpbWFnZVVybDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBzaXplOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIHR5cGU6IEF2YXRhclR5cGUgfCB1bmRlZmluZWQ7XG4gIGxvY2F0aW9uOiBBdmF0YXJMb2NhdGlvbiB8IHVuZGVmaW5lZDtcbiAgY2hhbm5lbD86IENoYW5uZWw8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz47XG4gIHVzZXI/OiBVc2VyPERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+O1xuICBpbml0aWFsc1R5cGU/OiAnZmlyc3QtbGV0dGVyLW9mLWZpcnN0LXdvcmQnIHwgJ2ZpcnN0LWxldHRlci1vZi1lYWNoLXdvcmQnO1xufTtcblxuZXhwb3J0IHR5cGUgQXR0YWNobWVudFByZXZpZXdMaXN0Q29udGV4dCA9IHtcbiAgYXR0YWNobWVudFVwbG9hZHMkOiBPYnNlcnZhYmxlPEF0dGFjaG1lbnRVcGxvYWRbXT4gfCB1bmRlZmluZWQ7XG4gIHJldHJ5VXBsb2FkSGFuZGxlcjogKGY6IEZpbGUpID0+IGFueTtcbiAgZGVsZXRlVXBsb2FkSGFuZGxlcjogKHU6IEF0dGFjaG1lbnRVcGxvYWQpID0+IGFueTtcbn07XG5cbmV4cG9ydCB0eXBlIEljb25Db250ZXh0ID0ge1xuICBpY29uOiBJY29uIHwgdW5kZWZpbmVkO1xuICBzaXplOiBudW1iZXIgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBMb2FkaW5nSW5kaWNhdG9yQ29udGV4dCA9IHtcbiAgc2l6ZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBjb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IHR5cGUgTWVzc2FnZUFjdGlvbnNCb3hDb250ZXh0ID0ge1xuICBpc09wZW46IGJvb2xlYW47XG4gIGlzTWluZTogYm9vbGVhbjtcbiAgbWVzc2FnZTogU3RyZWFtTWVzc2FnZSB8IHVuZGVmaW5lZDtcbiAgZW5hYmxlZEFjdGlvbnM6IHN0cmluZ1tdO1xuICBkaXNwbGF5ZWRBY3Rpb25zQ291bnRDaGFuZUhhbmxlcjogKGNvdW50OiBudW1iZXIpID0+IGFueTtcbiAgaXNFZGl0aW5nQ2hhbmdlSGFuZGxlcjogKGlzRWRpdGluZzogYm9vbGVhbikgPT4gYW55O1xufTtcblxuZXhwb3J0IHR5cGUgTWVzc2FnZUFjdGlvbkJveEl0ZW1Db250ZXh0ID0ge1xuICBhY3Rpb25OYW1lOiAncXVvdGUnIHwgJ3BpbicgfCAnZmxhZycgfCAnZWRpdCcgfCAnZGVsZXRlJztcbiAgYWN0aW9uTGFiZWxPclRyYW5zbGF0aW9uS2V5OiAoKCkgPT4gc3RyaW5nKSB8IHN0cmluZztcbiAgYWN0aW9uSGFuZGxlcjogKCkgPT4gYW55O1xufTtcblxuZXhwb3J0IHR5cGUgTWVzc2FnZUFjdGlvbkl0ZW0gPSB7XG4gIGFjdGlvbk5hbWU6ICdxdW90ZScgfCAncGluJyB8ICdmbGFnJyB8ICdlZGl0JyB8ICdkZWxldGUnO1xuICBhY3Rpb25MYWJlbE9yVHJhbnNsYXRpb25LZXk6ICgoKSA9PiBzdHJpbmcpIHwgc3RyaW5nO1xuICBpc1Zpc2libGU6IChcbiAgICBlbmFibGVkQWN0aW9uczogc3RyaW5nW10sXG4gICAgaXNNaW5lOiBib29sZWFuLFxuICAgIG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2VcbiAgKSA9PiBib29sZWFuO1xuICBhY3Rpb25IYW5kbGVyOiAobWVzc2FnZTogU3RyZWFtTWVzc2FnZSwgaXNNaW5lOiBib29sZWFuKSA9PiBhbnk7XG59O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlUmVhY3Rpb25zQ29udGV4dCA9IHtcbiAgbWVzc2FnZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIG1lc3NhZ2VSZWFjdGlvbkNvdW50czogeyBba2V5IGluIE1lc3NhZ2VSZWFjdGlvblR5cGVdPzogbnVtYmVyIH07XG4gIGlzU2VsZWN0b3JPcGVuOiBib29sZWFuO1xuICBsYXRlc3RSZWFjdGlvbnM6IFJlYWN0aW9uUmVzcG9uc2U8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz5bXTtcbiAgb3duUmVhY3Rpb25zOiBSZWFjdGlvblJlc3BvbnNlPERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+W107XG4gIGlzU2VsZWN0b3JPcGVuQ2hhbmdlSGFuZGxlcjogKGlzT3BlbjogYm9vbGVhbikgPT4gYW55O1xufTtcblxuZXhwb3J0IHR5cGUgTW9kYWxDb250ZXh0ID0ge1xuICBpc09wZW46IGJvb2xlYW47XG4gIGlzT3BlbkNoYW5nZUhhbmRsZXI6IChpc09wZW46IGJvb2xlYW4pID0+IGFueTtcbiAgY29udGVudDogVGVtcGxhdGVSZWY8dm9pZD47XG59O1xuXG5leHBvcnQgdHlwZSBOb3RpZmljYXRpb25Db250ZXh0ID0ge1xuICB0eXBlOiBOb3RpZmljYXRpb25UeXBlIHwgdW5kZWZpbmVkO1xuICBjb250ZW50OiBUZW1wbGF0ZVJlZjx2b2lkPiB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCB0eXBlIFRocmVhZEhlYWRlckNvbnRleHQgPSB7XG4gIHBhcmVudE1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2UgfCB1bmRlZmluZWQ7XG4gIGNsb3NlVGhyZWFkSGFuZGxlcjogRnVuY3Rpb247XG59O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlUmVhY3Rpb25UeXBlID1cbiAgfCAnYW5ncnknXG4gIHwgJ2hhaGEnXG4gIHwgJ2xpa2UnXG4gIHwgJ2xvdmUnXG4gIHwgJ3NhZCdcbiAgfCAnd293JztcblxuZXhwb3J0IHR5cGUgQXR0YWNobWVudENvbmZpZ3JhdGlvbiA9IHtcbiAgdXJsOiBzdHJpbmc7XG4gIGhlaWdodDogc3RyaW5nO1xuICB3aWR0aDogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbiA9IEF0dGFjaG1lbnRDb25maWdyYXRpb24gJiB7XG4gIG9yaWdpbmFsSGVpZ2h0OiBudW1iZXI7XG4gIG9yaWdpbmFsV2lkdGg6IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIFZpZGVvQXR0YWNobWVudENvbmZpZ3VyYXRpb24gPSBJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uICYge1xuICB0aHVtYlVybD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIERlbGl2ZXJlZFN0YXR1c0NvbnRleHQgPSB7XG4gIG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2U7XG59O1xuXG5leHBvcnQgdHlwZSBTZW5kaW5nU3RhdHVzQ29udGV4dCA9IHtcbiAgbWVzc2FnZTogU3RyZWFtTWVzc2FnZTtcbn07XG5cbmV4cG9ydCB0eXBlIFJlYWRTdGF0dXNDb250ZXh0ID0ge1xuICBtZXNzYWdlOiBTdHJlYW1NZXNzYWdlO1xuICByZWFkQnlUZXh0OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBDaGFubmVsSGVhZGVySW5mb0NvbnRleHQ8XG4gIFQgZXh0ZW5kcyBEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzID0gRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljc1xuPiA9IHsgY2hhbm5lbDogQ2hhbm5lbDxUPiB9O1xuXG5leHBvcnQgdHlwZSBDdXN0b21BdHRhY2htZW50VXBsb2FkQ29udGV4dCA9IHtcbiAgaXNNdWx0aXBsZUZpbGVVcGxvYWRFbmFibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBhdHRhY2htZW50U2VydmljZTogQXR0YWNobWVudFNlcnZpY2U7XG59O1xuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEF0dGFjaG1lbnQsXG4gIENoYW5uZWwsXG4gIENoYW5uZWxNZW1iZXJSZXNwb25zZSxcbiAgQ29tbWFuZFJlc3BvbnNlLFxuICBFdmVudCxcbiAgRXh0ZW5kYWJsZUdlbmVyaWNzLFxuICBGb3JtYXRNZXNzYWdlUmVzcG9uc2UsXG4gIExpdGVyYWxTdHJpbmdGb3JVbmlvbixcbiAgTWVzc2FnZVJlc3BvbnNlQmFzZSxcbiAgTXV0ZSxcbiAgUmVhY3Rpb25SZXNwb25zZSxcbiAgVXNlcixcbiAgVXNlclJlc3BvbnNlLFxufSBmcm9tICdzdHJlYW0tY2hhdCc7XG5pbXBvcnQgeyBBdHRhY2htZW50U2VydmljZSB9IGZyb20gJy4vYXR0YWNobWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEljb24gfSBmcm9tICcuL2ljb24vaWNvbi5jb21wb25lbnQnO1xuXG5leHBvcnQgdHlwZSBVbmtub3duVHlwZSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5leHBvcnQgdHlwZSBDdXN0b21UcmlnZ2VyID0ge1xuICBba2V5OiBzdHJpbmddOiB7XG4gICAgY29tcG9uZW50UHJvcHM6IFVua25vd25UeXBlO1xuICAgIGRhdGE6IFVua25vd25UeXBlO1xuICB9O1xufTtcblxuZXhwb3J0IHR5cGUgRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcyA9IEV4dGVuZGFibGVHZW5lcmljcyAmIHtcbiAgYXR0YWNobWVudFR5cGU6IERlZmF1bHRBdHRhY2htZW50VHlwZTtcbiAgY2hhbm5lbFR5cGU6IERlZmF1bHRDaGFubmVsVHlwZTtcbiAgY29tbWFuZFR5cGU6IExpdGVyYWxTdHJpbmdGb3JVbmlvbjtcbiAgZXZlbnRUeXBlOiBVbmtub3duVHlwZTtcbiAgbWVzc2FnZVR5cGU6IERlZmF1bHRNZXNzYWdlVHlwZTtcbiAgcmVhY3Rpb25UeXBlOiBVbmtub3duVHlwZTtcbiAgdXNlclR5cGU6IERlZmF1bHRVc2VyVHlwZTtcbn07XG5cbmV4cG9ydCB0eXBlIERlZmF1bHRBdHRhY2htZW50VHlwZSA9IFVua25vd25UeXBlICYge1xuICBhc3NldF91cmw/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICBpbWFnZXM/OiBBcnJheTxBdHRhY2htZW50PERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+PjtcbiAgbWltZV90eXBlPzogc3RyaW5nO1xuICBpc0N1c3RvbUF0dGFjaG1lbnQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgRGVmYXVsdENoYW5uZWxUeXBlID0gVW5rbm93blR5cGUgJiB7XG4gIGltYWdlPzogc3RyaW5nO1xuICBtZW1iZXJfY291bnQ/OiBudW1iZXI7XG4gIHN1YnRpdGxlPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgRGVmYXVsdENvbW1hbmRUeXBlID0gTGl0ZXJhbFN0cmluZ0ZvclVuaW9uO1xuXG5leHBvcnQgdHlwZSBEZWZhdWx0TWVzc2FnZVR5cGUgPSBVbmtub3duVHlwZSAmIHtcbiAgY3VzdG9tVHlwZT86ICdjaGFubmVsLmludHJvJyB8ICdtZXNzYWdlLmRhdGUnO1xuICBkYXRlPzogc3RyaW5nIHwgRGF0ZTtcbiAgZXJyb3JTdGF0dXNDb2RlPzogbnVtYmVyO1xuICBldmVudD86IEV2ZW50PERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+O1xuICB1bnJlYWQ/OiBib29sZWFuO1xuICByZWFkQnk6IFVzZXJSZXNwb25zZTxEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzPltdO1xuICB0cmFuc2xhdGlvbj86IHN0cmluZztcbiAgcXVvdGVkX21lc3NhZ2U/OiBNZXNzYWdlUmVzcG9uc2VCYXNlPERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+O1xufTtcblxuZXhwb3J0IHR5cGUgRGVmYXVsdFVzZXJUeXBlSW50ZXJuYWwgPSB7XG4gIGltYWdlPzogc3RyaW5nO1xuICBzdGF0dXM/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBEZWZhdWx0VXNlclR5cGUgPSBVbmtub3duVHlwZSAmXG4gIERlZmF1bHRVc2VyVHlwZUludGVybmFsICYge1xuICAgIG11dGVzPzogQXJyYXk8TXV0ZTxEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzPj47XG4gIH07XG5cbmV4cG9ydCB0eXBlIFN0cmVhbU1lc3NhZ2U8XG4gIFQgZXh0ZW5kcyBEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzID0gRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljc1xuPiA9IEZvcm1hdE1lc3NhZ2VSZXNwb25zZTxUPjtcblxuZXhwb3J0IHR5cGUgQXR0YWNobWVudFVwbG9hZDxcbiAgVCBleHRlbmRzIERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3MgPSBEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzXG4+ID0ge1xuICBmaWxlOiBGaWxlO1xuICBzdGF0ZTogJ2Vycm9yJyB8ICdzdWNjZXNzJyB8ICd1cGxvYWRpbmcnO1xuICB1cmw/OiBzdHJpbmc7XG4gIHR5cGU6ICdpbWFnZScgfCAnZmlsZScgfCAndmlkZW8nO1xuICBwcmV2aWV3VXJpPzogc3RyaW5nIHwgQXJyYXlCdWZmZXI7XG4gIHRodW1iX3VybD86IHN0cmluZztcbiAgZnJvbUF0dGFjaG1lbnQ/OiBBdHRhY2htZW50PFQ+O1xufTtcblxuZXhwb3J0IHR5cGUgTWVudGlvbkF1dGNvbXBsZXRlTGlzdEl0ZW1Db250ZXh0ID0ge1xuICBpdGVtOiBNZW50aW9uQXV0Y29tcGxldGVMaXN0SXRlbTtcbn07XG5cbmV4cG9ydCB0eXBlIENvbW1hbmRBdXRvY29tcGxldGVMaXN0SXRlbUNvbnRleHQgPSB7XG4gIGl0ZW06IENvbWFuZEF1dG9jb21wbGV0ZUxpc3RJdGVtO1xufTtcblxuZXhwb3J0IHR5cGUgTWVudGlvbkF1dGNvbXBsZXRlTGlzdEl0ZW0gPSAoXG4gIHwgQ2hhbm5lbE1lbWJlclJlc3BvbnNlXG4gIHwgVXNlclJlc3BvbnNlXG4pICYge1xuICBhdXRvY29tcGxldGVMYWJlbDogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQ29tYW5kQXV0b2NvbXBsZXRlTGlzdEl0ZW0gPSBDb21tYW5kUmVzcG9uc2UgJiB7XG4gIGF1dG9jb21wbGV0ZUxhYmVsOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBOb3RpZmljYXRpb25UeXBlID0gJ3N1Y2Nlc3MnIHwgJ2Vycm9yJyB8ICdpbmZvJztcblxuZXhwb3J0IHR5cGUgTm90aWZpY2F0aW9uUGF5bG9hZDxUID0ge30+ID0ge1xuICBpZDogc3RyaW5nO1xuICB0eXBlOiBOb3RpZmljYXRpb25UeXBlO1xuICB0ZXh0Pzogc3RyaW5nO1xuICB0cmFuc2xhdGVQYXJhbXM/OiBPYmplY3Q7XG4gIHRlbXBsYXRlPzogVGVtcGxhdGVSZWY8VD47XG4gIHRlbXBsYXRlQ29udGV4dD86IFQ7XG4gIGRpc21pc3NGbjogRnVuY3Rpb247XG59O1xuXG5leHBvcnQgdHlwZSBDaGFubmVsUHJldmlld0NvbnRleHQ8XG4gIFQgZXh0ZW5kcyBEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzID0gRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljc1xuPiA9IHtcbiAgY2hhbm5lbDogQ2hhbm5lbDxUPjtcbn07XG5cbmV4cG9ydCB0eXBlIE1lc3NhZ2VJbnB1dENvbnRleHQgPSB7XG4gIGlzRmlsZVVwbG9hZEVuYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGFyZU1lbnRpb25zRW5hYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgbWVudGlvblNjb3BlOiAnY2hhbm5lbCcgfCAnYXBwbGljYXRpb24nIHwgdW5kZWZpbmVkO1xuICBtb2RlOiAndGhyZWFkJyB8ICdtYWluJyB8IHVuZGVmaW5lZDtcbiAgaXNNdWx0aXBsZUZpbGVVcGxvYWRFbmFibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBtZXNzYWdlOiBTdHJlYW1NZXNzYWdlIHwgdW5kZWZpbmVkO1xuICBtZXNzYWdlVXBkYXRlSGFuZGxlcjogRnVuY3Rpb24gfCB1bmRlZmluZWQ7XG4gIHNlbmRNZXNzYWdlJDogT2JzZXJ2YWJsZTx2b2lkPjtcbn07XG5cbmV4cG9ydCB0eXBlIE1lbnRpb25UZW1wbGF0ZUNvbnRleHQgPSB7XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgdXNlcjogVXNlclJlc3BvbnNlO1xufTtcblxuZXhwb3J0IHR5cGUgRW1vamlQaWNrZXJDb250ZXh0ID0ge1xuICBlbW9qaUlucHV0JDogU3ViamVjdDxzdHJpbmc+O1xufTtcblxuZXhwb3J0IHR5cGUgVHlwaW5nSW5kaWNhdG9yQ29udGV4dCA9IHtcbiAgdXNlcnNUeXBpbmckOiBPYnNlcnZhYmxlPFVzZXJSZXNwb25zZTxEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzPltdPjtcbn07XG5cbmV4cG9ydCB0eXBlIE1lc3NhZ2VDb250ZXh0ID0ge1xuICBtZXNzYWdlOiBTdHJlYW1NZXNzYWdlIHwgdW5kZWZpbmVkO1xuICBlbmFibGVkTWVzc2FnZUFjdGlvbnM6IHN0cmluZ1tdO1xuICBpc0xhc3RTZW50TWVzc2FnZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgbW9kZTogJ3RocmVhZCcgfCAnbWFpbic7XG4gIGlzSGlnaGxpZ2h0ZWQ6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBDaGFubmVsQWN0aW9uc0NvbnRleHQ8XG4gIFQgZXh0ZW5kcyBEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzID0gRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljc1xuPiA9IHsgY2hhbm5lbDogQ2hhbm5lbDxUPiB9O1xuXG5leHBvcnQgdHlwZSBBdHRhY2htZW50TGlzdENvbnRleHQgPSB7XG4gIG1lc3NhZ2VJZDogc3RyaW5nO1xuICBhdHRhY2htZW50czogQXR0YWNobWVudDxEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzPltdO1xuICBwYXJlbnRNZXNzYWdlSWQ/OiBzdHJpbmc7XG4gIGltYWdlTW9kYWxTdGF0ZUNoYW5nZUhhbmRsZXI/OiAoc3RhdGU6ICdvcGVuZWQnIHwgJ2Nsb3NlZCcpID0+IHt9O1xufTtcblxuZXhwb3J0IHR5cGUgQXZhdGFyVHlwZSA9ICdjaGFubmVsJyB8ICd1c2VyJztcblxuZXhwb3J0IHR5cGUgQXZhdGFyTG9jYXRpb24gPVxuICB8ICdjaGFubmVsLXByZXZpZXcnXG4gIHwgJ2NoYW5uZWwtaGVhZGVyJ1xuICB8ICdtZXNzYWdlLXNlbmRlcidcbiAgfCAnbWVzc2FnZS1yZWFkZXInXG4gIHwgJ3F1b3RlZC1tZXNzYWdlLXNlbmRlcidcbiAgfCAnYXV0b2NvbXBsZXRlLWl0ZW0nXG4gIHwgJ3R5cGluZy1pbmRpY2F0b3InXG4gIHwgJ3JlYWN0aW9uJztcblxuZXhwb3J0IHR5cGUgQXZhdGFyQ29udGV4dCA9IHtcbiAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBpbWFnZVVybDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBzaXplOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIHR5cGU6IEF2YXRhclR5cGUgfCB1bmRlZmluZWQ7XG4gIGxvY2F0aW9uOiBBdmF0YXJMb2NhdGlvbiB8IHVuZGVmaW5lZDtcbiAgY2hhbm5lbD86IENoYW5uZWw8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz47XG4gIHVzZXI/OiBVc2VyPERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+O1xuICBpbml0aWFsc1R5cGU/OiAnZmlyc3QtbGV0dGVyLW9mLWZpcnN0LXdvcmQnIHwgJ2ZpcnN0LWxldHRlci1vZi1lYWNoLXdvcmQnO1xufTtcblxuZXhwb3J0IHR5cGUgQXR0YWNobWVudFByZXZpZXdMaXN0Q29udGV4dCA9IHtcbiAgYXR0YWNobWVudFVwbG9hZHMkOiBPYnNlcnZhYmxlPEF0dGFjaG1lbnRVcGxvYWRbXT4gfCB1bmRlZmluZWQ7XG4gIHJldHJ5VXBsb2FkSGFuZGxlcjogKGY6IEZpbGUpID0+IGFueTtcbiAgZGVsZXRlVXBsb2FkSGFuZGxlcjogKHU6IEF0dGFjaG1lbnRVcGxvYWQpID0+IGFueTtcbn07XG5cbmV4cG9ydCB0eXBlIEljb25Db250ZXh0ID0ge1xuICBpY29uOiBJY29uIHwgdW5kZWZpbmVkO1xuICBzaXplOiBudW1iZXIgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBMb2FkaW5nSW5kaWNhdG9yQ29udGV4dCA9IHtcbiAgc2l6ZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBjb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IHR5cGUgTWVzc2FnZUFjdGlvbnNCb3hDb250ZXh0ID0ge1xuICBpc09wZW46IGJvb2xlYW47XG4gIGlzTWluZTogYm9vbGVhbjtcbiAgbWVzc2FnZTogU3RyZWFtTWVzc2FnZSB8IHVuZGVmaW5lZDtcbiAgZW5hYmxlZEFjdGlvbnM6IHN0cmluZ1tdO1xuICBkaXNwbGF5ZWRBY3Rpb25zQ291bnRDaGFuZUhhbmxlcjogKGNvdW50OiBudW1iZXIpID0+IGFueTtcbiAgaXNFZGl0aW5nQ2hhbmdlSGFuZGxlcjogKGlzRWRpdGluZzogYm9vbGVhbikgPT4gYW55O1xufTtcblxuZXhwb3J0IHR5cGUgTWVzc2FnZUFjdGlvbkJveEl0ZW1Db250ZXh0ID0ge1xuICBhY3Rpb25OYW1lOiAncXVvdGUnIHwgJ3BpbicgfCAnZmxhZycgfCAnZWRpdCcgfCAnZGVsZXRlJztcbiAgYWN0aW9uTGFiZWxPclRyYW5zbGF0aW9uS2V5OiAoKCkgPT4gc3RyaW5nKSB8IHN0cmluZztcbiAgYWN0aW9uSGFuZGxlcjogKCkgPT4gYW55O1xufTtcblxuZXhwb3J0IHR5cGUgTWVzc2FnZUFjdGlvbkl0ZW0gPSB7XG4gIGFjdGlvbk5hbWU6ICdxdW90ZScgfCAncGluJyB8ICdmbGFnJyB8ICdlZGl0JyB8ICdkZWxldGUnO1xuICBhY3Rpb25MYWJlbE9yVHJhbnNsYXRpb25LZXk6ICgoKSA9PiBzdHJpbmcpIHwgc3RyaW5nO1xuICBpc1Zpc2libGU6IChcbiAgICBlbmFibGVkQWN0aW9uczogc3RyaW5nW10sXG4gICAgaXNNaW5lOiBib29sZWFuLFxuICAgIG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2VcbiAgKSA9PiBib29sZWFuO1xuICBhY3Rpb25IYW5kbGVyOiAobWVzc2FnZTogU3RyZWFtTWVzc2FnZSwgaXNNaW5lOiBib29sZWFuKSA9PiBhbnk7XG59O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlUmVhY3Rpb25zQ29udGV4dCA9IHtcbiAgbWVzc2FnZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIG1lc3NhZ2VSZWFjdGlvbkNvdW50czogeyBba2V5IGluIE1lc3NhZ2VSZWFjdGlvblR5cGVdPzogbnVtYmVyIH07XG4gIGlzU2VsZWN0b3JPcGVuOiBib29sZWFuO1xuICBsYXRlc3RSZWFjdGlvbnM6IFJlYWN0aW9uUmVzcG9uc2U8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz5bXTtcbiAgb3duUmVhY3Rpb25zOiBSZWFjdGlvblJlc3BvbnNlPERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+W107XG4gIGlzU2VsZWN0b3JPcGVuQ2hhbmdlSGFuZGxlcjogKGlzT3BlbjogYm9vbGVhbikgPT4gYW55O1xufTtcblxuZXhwb3J0IHR5cGUgTW9kYWxDb250ZXh0ID0ge1xuICBpc09wZW46IGJvb2xlYW47XG4gIGlzT3BlbkNoYW5nZUhhbmRsZXI6IChpc09wZW46IGJvb2xlYW4pID0+IGFueTtcbiAgY29udGVudDogVGVtcGxhdGVSZWY8dm9pZD47XG59O1xuXG5leHBvcnQgdHlwZSBOb3RpZmljYXRpb25Db250ZXh0ID0ge1xuICB0eXBlOiBOb3RpZmljYXRpb25UeXBlIHwgdW5kZWZpbmVkO1xuICBjb250ZW50OiBUZW1wbGF0ZVJlZjx2b2lkPiB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCB0eXBlIFRocmVhZEhlYWRlckNvbnRleHQgPSB7XG4gIHBhcmVudE1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2UgfCB1bmRlZmluZWQ7XG4gIGNsb3NlVGhyZWFkSGFuZGxlcjogRnVuY3Rpb247XG59O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlUmVhY3Rpb25UeXBlID1cbiAgfCAnYW5ncnknXG4gIHwgJ2hhaGEnXG4gIHwgJ2xpa2UnXG4gIHwgJ2xvdmUnXG4gIHwgJ3NhZCdcbiAgfCAnd293JztcblxuZXhwb3J0IHR5cGUgQXR0YWNobWVudENvbmZpZ3JhdGlvbiA9IHtcbiAgdXJsOiBzdHJpbmc7XG4gIGhlaWdodDogc3RyaW5nO1xuICB3aWR0aDogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbiA9IEF0dGFjaG1lbnRDb25maWdyYXRpb24gJiB7XG4gIG9yaWdpbmFsSGVpZ2h0OiBudW1iZXI7XG4gIG9yaWdpbmFsV2lkdGg6IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIFZpZGVvQXR0YWNobWVudENvbmZpZ3VyYXRpb24gPSBJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uICYge1xuICB0aHVtYlVybD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIERlbGl2ZXJlZFN0YXR1c0NvbnRleHQgPSB7XG4gIG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2U7XG59O1xuXG5leHBvcnQgdHlwZSBTZW5kaW5nU3RhdHVzQ29udGV4dCA9IHtcbiAgbWVzc2FnZTogU3RyZWFtTWVzc2FnZTtcbn07XG5cbmV4cG9ydCB0eXBlIFJlYWRTdGF0dXNDb250ZXh0ID0ge1xuICBtZXNzYWdlOiBTdHJlYW1NZXNzYWdlO1xuICByZWFkQnlUZXh0OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBDaGFubmVsSGVhZGVySW5mb0NvbnRleHQ8XG4gIFQgZXh0ZW5kcyBEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzID0gRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljc1xuPiA9IHsgY2hhbm5lbDogQ2hhbm5lbDxUPiB9O1xuXG5leHBvcnQgdHlwZSBDdXN0b21BdHRhY2htZW50VXBsb2FkQ29udGV4dCA9IHtcbiAgaXNNdWx0aXBsZUZpbGVVcGxvYWRFbmFibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBhdHRhY2htZW50U2VydmljZTogQXR0YWNobWVudFNlcnZpY2U7XG59O1xuXG5leHBvcnQgdHlwZSBBdHRhY2htZW50Q29udGV4dCA9IHtcbiAgYXR0YWNobWVudDogQXR0YWNobWVudDxEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzPjtcbn07XG4iXX0=
@@ -19,7 +19,7 @@ import transliterate from '@stream-io/transliterate';
19
19
  import * as i8$1 from 'angular-mentions';
20
20
  import { MentionModule } from 'angular-mentions';
21
21
 
22
- const version = '4.22.0';
22
+ const version = '4.23.1';
23
23
 
24
24
  /**
25
25
  * The `NotificationService` can be used to add or remove notifications. By default the [`NotificationList`](../components/NotificationListComponent.mdx) component displays the currently active notifications.
@@ -2311,6 +2311,30 @@ class CustomTemplatesService {
2311
2311
  * For code examples to the different customizations see our [customizations example application](https://github.com/GetStream/stream-chat-angular/tree/master/projects/customizations-example), specifically the [AppComponent](https://github.com/GetStream/stream-chat-angular/tree/master/projects/customizations-example/src/app) (see [README](https://github.com/GetStream/stream-chat-angular/blob/master/README.md#customization-examples) for instructions on how to start the application).
2312
2312
  */
2313
2313
  this.customAttachmentUploadTemplate$ = new BehaviorSubject(undefined);
2314
+ /**
2315
+ * The template that can be used to override how a single image attachment is displayed inside the [attachment list](../components/AttachmentListComponent.mdx)
2316
+ */
2317
+ this.imageAttachmentTemplate$ = new BehaviorSubject(undefined);
2318
+ /**
2319
+ * The template that can be used to override how a video attachment is displayed inside the [attachment list](../components/AttachmentListComponent.mdx)
2320
+ */
2321
+ this.videoAttachmentTemplate$ = new BehaviorSubject(undefined);
2322
+ /**
2323
+ * The template that can be used to override how image gallery is displayed inside the [attachment list](../components/AttachmentListComponent.mdx)
2324
+ */
2325
+ this.galleryAttachmentTemplate$ = new BehaviorSubject(undefined);
2326
+ /**
2327
+ * The template that can be used to override how a file attachment is displayed inside the [attachment list](../components/AttachmentListComponent.mdx)
2328
+ */
2329
+ this.fileAttachmentTemplate$ = new BehaviorSubject(undefined);
2330
+ /**
2331
+ * The template that can be used to override how a card attachment is displayed inside the [attachment list](../components/AttachmentListComponent.mdx)
2332
+ */
2333
+ this.cardAttachmentTemplate$ = new BehaviorSubject(undefined);
2334
+ /**
2335
+ * The template that can be used to override how attachment actions are displayed inside the [attachment list](../components/AttachmentListComponent.mdx)
2336
+ */
2337
+ this.attachmentActionsTemplate$ = new BehaviorSubject(undefined);
2314
2338
  }
2315
2339
  }
2316
2340
  CustomTemplatesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: CustomTemplatesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
@@ -2724,8 +2748,17 @@ class AttachmentListComponent {
2724
2748
  this.imagesToView = [];
2725
2749
  this.imagesToViewCurrentIndex = 0;
2726
2750
  this.attachmentConfigurations = new Map();
2751
+ this.subscriptions = [];
2727
2752
  this.themeVersion = themeService.themeVersion;
2728
2753
  }
2754
+ ngOnInit() {
2755
+ this.subscriptions.push(this.customTemplatesService.imageAttachmentTemplate$.subscribe((t) => (this.imageAttachmentTemplate = t)));
2756
+ this.subscriptions.push(this.customTemplatesService.galleryAttachmentTemplate$.subscribe((t) => (this.galleryAttachmentTemplate = t)));
2757
+ this.subscriptions.push(this.customTemplatesService.videoAttachmentTemplate$.subscribe((t) => (this.videoAttachmentTemplate = t)));
2758
+ this.subscriptions.push(this.customTemplatesService.fileAttachmentTemplate$.subscribe((t) => (this.fileAttachmentTemplate = t)));
2759
+ this.subscriptions.push(this.customTemplatesService.cardAttachmentTemplate$.subscribe((t) => (this.cardAttachmentTemplate = t)));
2760
+ this.subscriptions.push(this.customTemplatesService.attachmentActionsTemplate$.subscribe((t) => (this.attachmentActionsTemplate = t)));
2761
+ }
2729
2762
  ngOnChanges(changes) {
2730
2763
  if (changes.attachments) {
2731
2764
  const images = this.attachments.filter(this.isImage);
@@ -2743,6 +2776,9 @@ class AttachmentListComponent {
2743
2776
  }
2744
2777
  }
2745
2778
  }
2779
+ ngOnDestroy() {
2780
+ this.subscriptions.forEach((s) => s.unsubscribe());
2781
+ }
2746
2782
  trackByUrl(_, attachment) {
2747
2783
  return (attachment.image_url ||
2748
2784
  attachment.img_url ||
@@ -2814,6 +2850,9 @@ class AttachmentListComponent {
2814
2850
  trackByImageUrl(_, item) {
2815
2851
  return item.image_url || item.img_url || item.thumb_url;
2816
2852
  }
2853
+ getAttachmentContext(attachment) {
2854
+ return { attachment };
2855
+ }
2817
2856
  getImageAttachmentConfiguration(attachment, type, element) {
2818
2857
  const existingConfiguration = this.attachmentConfigurations.get(attachment);
2819
2858
  if (existingConfiguration) {
@@ -2869,7 +2908,7 @@ class AttachmentListComponent {
2869
2908
  }
2870
2909
  }
2871
2910
  AttachmentListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: AttachmentListComponent, deps: [{ token: CustomTemplatesService }, { token: ChannelService }, { token: AttachmentConfigurationService }, { token: ThemeService }], target: i0.ɵɵFactoryTarget.Component });
2872
- AttachmentListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: AttachmentListComponent, selector: "stream-attachment-list", inputs: { messageId: "messageId", parentMessageId: "parentMessageId", attachments: "attachments" }, outputs: { imageModalStateChange: "imageModalStateChange" }, host: { properties: { "class": "this.class" } }, viewQueries: [{ propertyName: "modalContent", first: true, predicate: ["modalContent"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"orderedAttachments.length > 0\" class=\"str-chat__attachment-list\">\n <ng-container\n *ngFor=\"let attachment of orderedAttachments; trackBy: trackByUrl\"\n >\n <div\n data-testclass=\"attachment-container\"\n class=\"str-chat__message-attachment str-chat__message-attachment--{{\n attachment.type\n }} str-chat__message-attachment-dynamic-size\"\n [class.str-chat__message-attachment--card]=\"isCard(attachment)\"\n [class.str-chat-angular__message-attachment-file-single]=\"\n isFile(attachment)\n \"\n [class.str-chat__message-attachment-with-actions]=\"\n attachment.actions && attachment.actions.length > 0\n \"\n [class.str-chat__message-attachment--svg-image]=\"isSvg(attachment)\"\n >\n <img\n #imgElement\n *ngIf=\"isImage(attachment)\"\n class=\"str-chat__message-attachment--img\"\n data-testclass=\"image\"\n [src]=\"\n getImageAttachmentConfiguration(attachment, 'single', imgElement).url\n \"\n [alt]=\"attachment?.fallback\"\n (click)=\"openImageModal([attachment])\"\n (keyup.enter)=\"openImageModal([attachment])\"\n [style.--original-height]=\"\n getImageAttachmentConfiguration(attachment, 'single', imgElement)\n .originalHeight\n \"\n [style.--original-width]=\"\n getImageAttachmentConfiguration(attachment, 'single', imgElement)\n .originalWidth\n \"\n [ngStyle]=\"{\n height: getImageAttachmentConfiguration(\n attachment,\n 'single',\n imgElement\n ).height,\n width: getImageAttachmentConfiguration(\n attachment,\n 'single',\n imgElement\n ).width\n }\"\n />\n <div\n class=\"str-chat__gallery\"\n data-testid=\"image-gallery\"\n *ngIf=\"isGallery(attachment)\"\n [class.str-chat__gallery--square]=\"(attachment?.images)!.length > 3\"\n [class.str-chat__gallery-two-rows]=\"(attachment?.images)!.length > 2\"\n >\n <ng-container\n *ngFor=\"\n let galleryImage of attachment.images;\n let index = index;\n let isLast = last;\n trackBy: trackByImageUrl\n \"\n >\n <button\n *ngIf=\"index < 3 || (index === 3 && isLast)\"\n class=\"str-chat__gallery-image\"\n data-testclass=\"gallery-image\"\n (click)=\"openImageModal(attachment.images!, index)\"\n (keyup.enter)=\"openImageModal(attachment.images!, index)\"\n [class.str-chat__message-attachment--svg-image]=\"\n isSvg(galleryImage)\n \"\n >\n <img\n #imgElement\n [src]=\"\n getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n imgElement\n ).url\n \"\n [alt]=\"galleryImage.fallback\"\n [style.--original-height]=\"\n getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n imgElement\n ).originalHeight\n \"\n [style.--original-width]=\"\n getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n imgElement\n ).originalWidth\n \"\n [ngStyle]=\"{\n height: getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n imgElement\n ).height,\n width: getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n imgElement\n ).width\n }\"\n />\n </button>\n <button\n #element\n *ngIf=\"index === 3 && !isLast\"\n class=\"str-chat__gallery-placeholder\"\n data-testclass=\"gallery-image\"\n data-testid=\"more-image-button\"\n (click)=\"openImageModal(attachment.images!, index)\"\n (keyup.enter)=\"openImageModal(attachment.images!, index)\"\n [class.str-chat__message-attachment--svg-image]=\"\n isSvg(galleryImage)\n \"\n [style.--original-height]=\"\n getImageAttachmentConfiguration(galleryImage, 'gallery', element)\n .originalHeight\n \"\n [style.--original-width]=\"\n getImageAttachmentConfiguration(galleryImage, 'gallery', element)\n .originalWidth\n \"\n [ngStyle]=\"{\n 'background-image':\n 'url(' +\n getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n element\n ).url +\n ')',\n height: getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n element\n ).height,\n width: getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n element\n ).width\n }\"\n >\n <p\n [innerHTML]=\"\n 'streamChat.{{ imageCount }} more'\n | translate: { imageCount: attachment!.images!.length - 4 }\n \"\n ></p>\n </button>\n </ng-container>\n </div>\n <div\n class=\"str-chat__player-wrapper\"\n *ngIf=\"isVideo(attachment)\"\n data-testclass=\"video-attachment-parent\"\n [style.--original-height]=\"\n getVideoAttachmentConfiguration(attachment, videoElement)\n .originalHeight\n \"\n [style.--original-width]=\"\n getVideoAttachmentConfiguration(attachment, videoElement)\n .originalWidth\n \"\n [ngStyle]=\"{\n height: getVideoAttachmentConfiguration(attachment, videoElement)\n .height,\n width: getVideoAttachmentConfiguration(attachment, videoElement).width\n }\"\n >\n <video\n #videoElement\n class=\"str-chat__video-angular\"\n controls\n data-testclass=\"video-attachment\"\n [src]=\"getVideoAttachmentConfiguration(attachment, videoElement).url\"\n [poster]=\"\n getVideoAttachmentConfiguration(attachment, videoElement).thumbUrl\n \"\n ></video>\n </div>\n <a\n *ngIf=\"isFile(attachment)\"\n class=\"\n str-chat__message-attachment-file--item\n str-chat-angular__message-attachment-file-single\n \"\n style=\"cursor: pointer; text-decoration: none\"\n data-testclass=\"file-link\"\n href=\"{{ attachment.asset_url }}\"\n target=\"_blank\"\n >\n <stream-icon-placeholder\n *ngIf=\"themeVersion === '1'\"\n icon=\"file\"\n [size]=\"30\"\n ></stream-icon-placeholder>\n <stream-icon-placeholder\n *ngIf=\"themeVersion === '2'\"\n icon=\"unspecified-filetype\"\n [size]=\"30\"\n ></stream-icon-placeholder>\n <div class=\"str-chat__message-attachment-file--item-text\">\n <div class=\"str-chat__message-attachment-file--item-first-row\">\n <div\n data-testclass=\"file-title\"\n class=\"str-chat__message-attachment-file--item-name\"\n >\n {{ attachment.title }}\n </div>\n <!-- Temporary disabled, will be fixed with this: https://github.com/GetStream/stream-chat-angular/issues/393 -->\n <!-- <a\n class=\"str-chat__message-attachment-file--item-download\"\n data-testclass=\"file-link\"\n download\n href=\"{{ attachment.asset_url }}\"\n target=\"_blank\"\n >\n <stream-icon-placeholder\n class=\"str-chat__message-attachment-download-icon\"\n icon=\"download\"\n ></stream-icon-placeholder>\n </a> -->\n </div>\n <span\n class=\"str-chat__message-attachment-file--item-size\"\n data-testclass=\"size\"\n *ngIf=\"hasFileSize(attachment)\"\n >{{ getFileSize(attachment) }}</span\n >\n </div>\n </a>\n <div\n *ngIf=\"\n isCard(attachment) &&\n getCardAttachmentConfiguration(attachment) as attachmentConfiguration\n \"\n class=\"str-chat__message-attachment-card str-chat__message-attachment-card--{{\n attachment.type\n }}\"\n >\n <div\n *ngIf=\"attachmentConfiguration.url\"\n class=\"str-chat__message-attachment-card--header\"\n >\n <img\n data-testclass=\"card-img\"\n alt=\"{{ attachmentConfiguration.url }}\"\n src=\"{{ attachmentConfiguration.url }}\"\n [ngStyle]=\"{\n height: attachmentConfiguration.height,\n width: attachmentConfiguration.width\n }\"\n />\n </div>\n <div class=\"str-chat__message-attachment-card--content\">\n <div class=\"str-chat__message-attachment-card--flex\">\n <div\n *ngIf=\"attachment.title\"\n data-testclass=\"card-title\"\n class=\"str-chat__message-attachment-card--title\"\n >\n {{ attachment.title }}\n </div>\n <div\n *ngIf=\"attachment.text\"\n class=\"str-chat__message-attachment-card--text\"\n data-testclass=\"card-text\"\n >\n {{ attachment.text }}\n </div>\n <a\n class=\"str-chat__message-attachment-card--url\"\n *ngIf=\"attachment.title_link || attachment.og_scrape_url\"\n data-testclass=\"url-link\"\n noopener\n noreferrer\n href=\"{{ attachment.title_link || attachment.og_scrape_url }}\"\n target=\"_blank\"\n >\n {{ trimUrl(attachment.title_link || attachment.og_scrape_url) }}\n </a>\n </div>\n </div>\n </div>\n <div\n class=\"str-chat__message-attachment-actions\"\n *ngIf=\"attachment.actions && attachment.actions.length > 0\"\n >\n <div class=\"str-chat__message-attachment-actions-form\">\n <button\n *ngFor=\"\n let action of attachment.actions;\n trackBy: trackByActionValue\n \"\n class=\"str-chat__message-attachment-actions-button str-chat__message-attachment-actions-button--{{\n action.style\n }}\"\n data-testclass=\"attachment-action\"\n (click)=\"sendAction(action)\"\n (keyup.enter)=\"sendAction(action)\"\n >\n {{ action.text }}\n </button>\n </div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"imagesToView && imagesToView.length > 0\">\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.modalTemplate$ | async) || defaultModal;\n context: getModalContext()\n \"\n ></ng-container>\n </ng-container>\n</div>\n\n<ng-template\n #defaultModal\n let-isOpen=\"isOpen\"\n let-isOpenChangeHandler=\"isOpenChangeHandler\"\n let-content=\"content\"\n>\n <stream-modal\n class=\"stream-chat-angular__image-modal-host\"\n [isOpen]=\"isOpen\"\n (isOpenChange)=\"isOpenChangeHandler($event)\"\n [content]=\"content\"\n >\n </stream-modal>\n</ng-template>\n\n<ng-template #modalContent>\n <div class=\"stream-chat-angular__image-modal str-chat__image-carousel\">\n <button\n class=\"\n stream-chat-angular__image-modal-stepper\n str-chat__image-carousel-stepper\n \"\n [ngStyle]=\"{\n visibility: isImageModalPrevButtonVisible ? 'visible' : 'hidden'\n }\"\n data-testid=\"image-modal-prev\"\n type=\"button\"\n (click)=\"stepImages(-1)\"\n (keyup.enter)=\"stepImages(-1)\"\n >\n <stream-icon-placeholder icon=\"arrow-left\"></stream-icon-placeholder>\n </button>\n <img\n #imgElement\n class=\"\n stream-chat-angular__image-modal-image\n str-chat__image-carousel-image\n \"\n data-testid=\"modal-image\"\n [src]=\"\n getCarouselImageAttachmentConfiguration(\n imagesToView[imagesToViewCurrentIndex],\n imgElement\n ).url\n \"\n [style.--original-height]=\"\n getCarouselImageAttachmentConfiguration(\n imagesToView[imagesToViewCurrentIndex],\n imgElement\n ).originalHeight\n \"\n [style.--original-width]=\"\n getCarouselImageAttachmentConfiguration(\n imagesToView[imagesToViewCurrentIndex],\n imgElement\n ).originalWidth\n \"\n [alt]=\"imagesToView[imagesToViewCurrentIndex].fallback\"\n [ngStyle]=\"{\n width: getCarouselImageAttachmentConfiguration(\n imagesToView[imagesToViewCurrentIndex],\n imgElement\n ).width,\n height: getCarouselImageAttachmentConfiguration(\n imagesToView[imagesToViewCurrentIndex],\n imgElement\n ).height\n }\"\n />\n <button\n class=\"\n stream-chat-angular__image-modal-stepper\n str-chat__image-carousel-stepper\n \"\n type=\"button\"\n [ngStyle]=\"{\n visibility: isImageModalNextButtonVisible ? 'visible' : 'hidden'\n }\"\n data-testid=\"image-modal-next\"\n (click)=\"stepImages(1)\"\n (keyup.enter)=\"stepImages(1)\"\n >\n <stream-icon-placeholder icon=\"arrow-right\"></stream-icon-placeholder>\n </button>\n </div>\n</ng-template>\n", components: [{ type: IconPlaceholderComponent, selector: "stream-icon-placeholder", inputs: ["icon", "size"] }, { type: ModalComponent, selector: "stream-modal", inputs: ["isOpen", "content"], outputs: ["isOpenChange"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "translate": i8.TranslatePipe, "async": i7.AsyncPipe } });
2911
+ AttachmentListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: AttachmentListComponent, selector: "stream-attachment-list", inputs: { messageId: "messageId", parentMessageId: "parentMessageId", attachments: "attachments" }, outputs: { imageModalStateChange: "imageModalStateChange" }, host: { properties: { "class": "this.class" } }, viewQueries: [{ propertyName: "modalContent", first: true, predicate: ["modalContent"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"orderedAttachments.length > 0\" class=\"str-chat__attachment-list\">\n <ng-container\n *ngFor=\"let attachment of orderedAttachments; trackBy: trackByUrl\"\n >\n <div\n data-testclass=\"attachment-container\"\n class=\"str-chat__message-attachment str-chat__message-attachment--{{\n attachment.type\n }} str-chat__message-attachment-dynamic-size\"\n [class.str-chat__message-attachment--card]=\"isCard(attachment)\"\n [class.str-chat-angular__message-attachment-file-single]=\"\n isFile(attachment)\n \"\n [class.str-chat__message-attachment-with-actions]=\"\n attachment.actions && attachment.actions.length > 0\n \"\n [class.str-chat__message-attachment--svg-image]=\"isSvg(attachment)\"\n >\n <ng-container *ngIf=\"isImage(attachment)\">\n <ng-container\n *ngTemplateOutlet=\"\n imageAttachmentTemplate || defaultImage;\n context: getAttachmentContext(attachment)\n \"\n ></ng-container>\n <ng-template #defaultImage let-attachmentContext=\"attachment\">\n <img\n #imgElement\n class=\"str-chat__message-attachment--img\"\n data-testclass=\"image\"\n [src]=\"\n getImageAttachmentConfiguration(\n attachmentContext,\n 'single',\n imgElement\n ).url\n \"\n [alt]=\"attachmentContext?.fallback\"\n (click)=\"openImageModal([attachmentContext])\"\n (keyup.enter)=\"openImageModal([attachmentContext])\"\n [style.--original-height]=\"\n getImageAttachmentConfiguration(\n attachmentContext,\n 'single',\n imgElement\n ).originalHeight\n \"\n [style.--original-width]=\"\n getImageAttachmentConfiguration(\n attachmentContext,\n 'single',\n imgElement\n ).originalWidth\n \"\n [ngStyle]=\"{\n height: getImageAttachmentConfiguration(\n attachmentContext,\n 'single',\n imgElement\n ).height,\n width: getImageAttachmentConfiguration(\n attachmentContext,\n 'single',\n imgElement\n ).width\n }\"\n />\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"isGallery(attachment)\">\n <ng-container\n *ngTemplateOutlet=\"\n galleryAttachmentTemplate || defaultGallery;\n context: getAttachmentContext(attachment)\n \"\n ></ng-container>\n <ng-template #defaultGallery let-attachmentContext=\"attachment\">\n <div\n class=\"str-chat__gallery\"\n data-testid=\"image-gallery\"\n [class.str-chat__gallery--square]=\"\n (attachmentContext?.images)!.length > 3\n \"\n [class.str-chat__gallery-two-rows]=\"\n (attachmentContext?.images)!.length > 2\n \"\n >\n <ng-container\n *ngFor=\"\n let galleryImage of attachmentContext.images;\n let index = index;\n let isLast = last;\n trackBy: trackByImageUrl\n \"\n >\n <button\n *ngIf=\"index < 3 || (index === 3 && isLast)\"\n class=\"str-chat__gallery-image\"\n data-testclass=\"gallery-image\"\n (click)=\"openImageModal(attachmentContext.images!, index)\"\n (keyup.enter)=\"openImageModal(attachmentContext.images!, index)\"\n [class.str-chat__message-attachment--svg-image]=\"\n isSvg(galleryImage)\n \"\n >\n <img\n #imgElement\n [src]=\"\n getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n imgElement\n ).url\n \"\n [alt]=\"galleryImage.fallback\"\n [style.--original-height]=\"\n getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n imgElement\n ).originalHeight\n \"\n [style.--original-width]=\"\n getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n imgElement\n ).originalWidth\n \"\n [ngStyle]=\"{\n height: getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n imgElement\n ).height,\n width: getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n imgElement\n ).width\n }\"\n />\n </button>\n <button\n #element\n *ngIf=\"index === 3 && !isLast\"\n class=\"str-chat__gallery-placeholder\"\n data-testclass=\"gallery-image\"\n data-testid=\"more-image-button\"\n (click)=\"openImageModal(attachmentContext.images!, index)\"\n (keyup.enter)=\"openImageModal(attachmentContext.images!, index)\"\n [class.str-chat__message-attachment--svg-image]=\"\n isSvg(galleryImage)\n \"\n [style.--original-height]=\"\n getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n element\n ).originalHeight\n \"\n [style.--original-width]=\"\n getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n element\n ).originalWidth\n \"\n [ngStyle]=\"{\n 'background-image':\n 'url(' +\n getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n element\n ).url +\n ')',\n height: getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n element\n ).height,\n width: getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n element\n ).width\n }\"\n >\n <p\n [innerHTML]=\"\n 'streamChat.{{ imageCount }} more'\n | translate\n : { imageCount: attachmentContext!.images!.length - 4 }\n \"\n ></p>\n </button>\n </ng-container>\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"isVideo(attachment)\">\n <ng-container\n *ngTemplateOutlet=\"\n videoAttachmentTemplate || defaultVideo;\n context: getAttachmentContext(attachment)\n \"\n ></ng-container>\n <ng-template #defaultVideo let-attachmentContext=\"attachment\">\n <div\n class=\"str-chat__player-wrapper\"\n data-testclass=\"video-attachment-parent\"\n [style.--original-height]=\"\n getVideoAttachmentConfiguration(attachmentContext, videoElement)\n .originalHeight\n \"\n [style.--original-width]=\"\n getVideoAttachmentConfiguration(attachmentContext, videoElement)\n .originalWidth\n \"\n [ngStyle]=\"{\n height: getVideoAttachmentConfiguration(\n attachmentContext,\n videoElement\n ).height,\n width: getVideoAttachmentConfiguration(\n attachmentContext,\n videoElement\n ).width\n }\"\n >\n <video\n #videoElement\n class=\"str-chat__video-angular\"\n controls\n data-testclass=\"video-attachment\"\n [src]=\"\n getVideoAttachmentConfiguration(attachmentContext, videoElement)\n .url\n \"\n [poster]=\"\n getVideoAttachmentConfiguration(attachmentContext, videoElement)\n .thumbUrl\n \"\n ></video>\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"isFile(attachment)\">\n <ng-container\n *ngTemplateOutlet=\"\n fileAttachmentTemplate || defaultFile;\n context: getAttachmentContext(attachment)\n \"\n ></ng-container>\n <ng-template #defaultFile let-attachmentContext=\"attachment\">\n <a\n class=\"\n str-chat__message-attachment-file--item\n str-chat-angular__message-attachment-file-single\n \"\n style=\"cursor: pointer; text-decoration: none\"\n data-testclass=\"file-link\"\n href=\"{{ attachmentContext.asset_url }}\"\n target=\"_blank\"\n >\n <stream-icon-placeholder\n *ngIf=\"themeVersion === '1'\"\n icon=\"file\"\n [size]=\"30\"\n ></stream-icon-placeholder>\n <stream-icon-placeholder\n *ngIf=\"themeVersion === '2'\"\n icon=\"unspecified-filetype\"\n [size]=\"30\"\n ></stream-icon-placeholder>\n <div class=\"str-chat__message-attachment-file--item-text\">\n <div class=\"str-chat__message-attachment-file--item-first-row\">\n <div\n data-testclass=\"file-title\"\n class=\"str-chat__message-attachment-file--item-name\"\n >\n {{ attachmentContext.title }}\n </div>\n <!-- Temporary disabled, will be fixed with this: https://github.com/GetStream/stream-chat-angular/issues/393 -->\n <!-- <a\n class=\"str-chat__message-attachment-file--item-download\"\n data-testclass=\"file-link\"\n download\n href=\"{{ attachment.asset_url }}\"\n target=\"_blank\"\n >\n <stream-icon-placeholder\n class=\"str-chat__message-attachment-download-icon\"\n icon=\"download\"\n ></stream-icon-placeholder>\n </a> -->\n </div>\n <span\n class=\"str-chat__message-attachment-file--item-size\"\n data-testclass=\"size\"\n *ngIf=\"hasFileSize(attachmentContext)\"\n >{{ getFileSize(attachmentContext) }}</span\n >\n </div>\n </a>\n </ng-template>\n </ng-container>\n <ng-container\n *ngIf=\"\n isCard(attachment) &&\n getCardAttachmentConfiguration(attachment) as attachmentConfiguration\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n cardAttachmentTemplate || defaultCard;\n context: getAttachmentContext(attachment)\n \"\n ></ng-container>\n <ng-template #defaultCard let-attachmentContext=\"attachment\">\n <div\n class=\"str-chat__message-attachment-card str-chat__message-attachment-card--{{\n attachmentContext.type\n }}\"\n >\n <div\n *ngIf=\"attachmentConfiguration.url\"\n class=\"str-chat__message-attachment-card--header\"\n >\n <img\n data-testclass=\"card-img\"\n alt=\"{{ attachmentConfiguration.url }}\"\n src=\"{{ attachmentConfiguration.url }}\"\n [ngStyle]=\"{\n height: attachmentConfiguration.height,\n width: attachmentConfiguration.width\n }\"\n />\n </div>\n <div class=\"str-chat__message-attachment-card--content\">\n <div class=\"str-chat__message-attachment-card--flex\">\n <div\n *ngIf=\"attachmentContext.title\"\n data-testclass=\"card-title\"\n class=\"str-chat__message-attachment-card--title\"\n >\n {{ attachmentContext.title }}\n </div>\n <div\n *ngIf=\"attachmentContext.text\"\n class=\"str-chat__message-attachment-card--text\"\n data-testclass=\"card-text\"\n >\n {{ attachmentContext.text }}\n </div>\n <a\n class=\"str-chat__message-attachment-card--url\"\n *ngIf=\"\n attachmentContext.title_link ||\n attachmentContext.og_scrape_url\n \"\n data-testclass=\"url-link\"\n noopener\n noreferrer\n href=\"{{\n attachmentContext.title_link ||\n attachmentContext.og_scrape_url\n }}\"\n target=\"_blank\"\n >\n {{\n trimUrl(\n attachmentContext.title_link ||\n attachmentContext.og_scrape_url\n )\n }}\n </a>\n </div>\n </div>\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"attachment.actions && attachment.actions.length > 0\">\n <ng-container\n *ngTemplateOutlet=\"\n attachmentActionsTemplate || defaultActions;\n context: getAttachmentContext(attachment)\n \"\n ></ng-container>\n <ng-template #defaultActions let-attachmentContext=\"attachment\">\n <div class=\"str-chat__message-attachment-actions\">\n <div class=\"str-chat__message-attachment-actions-form\">\n <button\n *ngFor=\"\n let action of attachmentContext.actions;\n trackBy: trackByActionValue\n \"\n class=\"str-chat__message-attachment-actions-button str-chat__message-attachment-actions-button--{{\n action.style\n }}\"\n data-testclass=\"attachment-action\"\n (click)=\"sendAction(action)\"\n (keyup.enter)=\"sendAction(action)\"\n >\n {{ action.text }}\n </button>\n </div>\n </div>\n </ng-template>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"imagesToView && imagesToView.length > 0\">\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.modalTemplate$ | async) || defaultModal;\n context: getModalContext()\n \"\n ></ng-container>\n </ng-container>\n</div>\n\n<ng-template\n #defaultModal\n let-isOpen=\"isOpen\"\n let-isOpenChangeHandler=\"isOpenChangeHandler\"\n let-content=\"content\"\n>\n <stream-modal\n class=\"stream-chat-angular__image-modal-host\"\n [isOpen]=\"isOpen\"\n (isOpenChange)=\"isOpenChangeHandler($event)\"\n [content]=\"content\"\n >\n </stream-modal>\n</ng-template>\n\n<ng-template #modalContent>\n <div class=\"stream-chat-angular__image-modal str-chat__image-carousel\">\n <button\n class=\"\n stream-chat-angular__image-modal-stepper\n str-chat__image-carousel-stepper\n \"\n [ngStyle]=\"{\n visibility: isImageModalPrevButtonVisible ? 'visible' : 'hidden'\n }\"\n data-testid=\"image-modal-prev\"\n type=\"button\"\n (click)=\"stepImages(-1)\"\n (keyup.enter)=\"stepImages(-1)\"\n >\n <stream-icon-placeholder icon=\"arrow-left\"></stream-icon-placeholder>\n </button>\n <img\n #imgElement\n class=\"\n stream-chat-angular__image-modal-image\n str-chat__image-carousel-image\n \"\n data-testid=\"modal-image\"\n [src]=\"\n getCarouselImageAttachmentConfiguration(\n imagesToView[imagesToViewCurrentIndex],\n imgElement\n ).url\n \"\n [style.--original-height]=\"\n getCarouselImageAttachmentConfiguration(\n imagesToView[imagesToViewCurrentIndex],\n imgElement\n ).originalHeight\n \"\n [style.--original-width]=\"\n getCarouselImageAttachmentConfiguration(\n imagesToView[imagesToViewCurrentIndex],\n imgElement\n ).originalWidth\n \"\n [alt]=\"imagesToView[imagesToViewCurrentIndex].fallback\"\n [ngStyle]=\"{\n width: getCarouselImageAttachmentConfiguration(\n imagesToView[imagesToViewCurrentIndex],\n imgElement\n ).width,\n height: getCarouselImageAttachmentConfiguration(\n imagesToView[imagesToViewCurrentIndex],\n imgElement\n ).height\n }\"\n />\n <button\n class=\"\n stream-chat-angular__image-modal-stepper\n str-chat__image-carousel-stepper\n \"\n type=\"button\"\n [ngStyle]=\"{\n visibility: isImageModalNextButtonVisible ? 'visible' : 'hidden'\n }\"\n data-testid=\"image-modal-next\"\n (click)=\"stepImages(1)\"\n (keyup.enter)=\"stepImages(1)\"\n >\n <stream-icon-placeholder icon=\"arrow-right\"></stream-icon-placeholder>\n </button>\n </div>\n</ng-template>\n", components: [{ type: IconPlaceholderComponent, selector: "stream-icon-placeholder", inputs: ["icon", "size"] }, { type: ModalComponent, selector: "stream-modal", inputs: ["isOpen", "content"], outputs: ["isOpenChange"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], pipes: { "translate": i8.TranslatePipe, "async": i7.AsyncPipe } });
2873
2912
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: AttachmentListComponent, decorators: [{
2874
2913
  type: Component,
2875
2914
  args: [{
@@ -3918,7 +3957,7 @@ class ChannelListComponent {
3918
3957
  }
3919
3958
  }
3920
3959
  ChannelListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: ChannelListComponent, deps: [{ token: ChannelService }, { token: ChannelListToggleService }, { token: CustomTemplatesService }, { token: ThemeService }], target: i0.ɵɵFactoryTarget.Component });
3921
- ChannelListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: ChannelListComponent, selector: "stream-channel-list", viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: "<div\n #container\n data-testid=\"channel-list-container\"\n style=\"max-width: unset\"\n class=\"str-chat str-chat__channel-list str-chat-channel-list messaging str-chat__theme-{{\n theme$ | async\n }}\"\n [class.str-chat-channel-list--open]=\"(isOpen$ | async) === true\"\n>\n <div\n *ngIf=\"\n (isError$ | async) === false && (isInitializing$ | async) === false;\n else statusIndicator\n \"\n class=\"str-chat__channel-list-messenger\"\n >\n <div class=\"str-chat__channel-list-messenger__main\">\n <div\n class=\"str-chat__channel-list-empty\"\n *ngIf=\"!(channels$ | async)?.length\"\n >\n <stream-icon icon=\"chat-bubble\"></stream-icon>\n <p data-testid=\"empty-channel-list-indicator\">\n {{ \"streamChat.You have no channels currently\" | translate }}\n </p>\n </div>\n <p\n *ngIf=\"!(channels$ | async)?.length\"\n class=\"str-chat__channel-list-empty-v1\"\n data-testid=\"empty-channel-list-indicator\"\n >\n {{ \"streamChat.You have no channels currently\" | translate }}\n </p>\n <ng-content select=\"[channel-list-top]\"></ng-content>\n <ng-container\n *ngFor=\"let channel of channels$ | async; trackBy: trackByChannelId\"\n >\n <ng-template #defaultTemplate let-channelInput=\"channel\">\n <stream-channel-preview\n data-testclass=\"channel-preview\"\n [channel]=\"channelInput\"\n ></stream-channel-preview>\n </ng-template>\n <div (click)=\"channelSelected()\" (keyup.enter)=\"channelSelected()\">\n <ng-container\n *ngTemplateOutlet=\"\n customChannelPreviewTemplate || defaultTemplate;\n context: getChannelPreviewContext(channel)\n \"\n ></ng-container>\n </div>\n </ng-container>\n <div\n *ngIf=\"hasMoreChannels$ | async\"\n class=\"str-chat__load-more-button\"\n (click)=\"loadMoreChannels()\"\n (keyup.enter)=\"loadMoreChannels()\"\n data-testid=\"load-more\"\n >\n <button\n class=\"str-chat__load-more-button__button str-chat__cta-button\"\n data-testid=\"load-more-button\"\n [disabled]=\"isLoadingMoreChannels\"\n >\n <span *ngIf=\"!isLoadingMoreChannels; else loadingIndicator\">{{\n \"Load more\" | translate\n }}</span>\n <ng-template #loadingIndicator\n ><stream-loading-indicator-placeholder></stream-loading-indicator-placeholder\n ></ng-template>\n </button>\n </div>\n <ng-content select=\"[channel-list-bottom]\"></ng-content>\n </div>\n </div>\n</div>\n\n<ng-template #statusIndicator>\n <ng-container *ngIf=\"isError$ | async\">\n <ng-container *ngTemplateOutlet=\"chatDown\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"isInitializing$ | async\">\n <ng-container *ngTemplateOutlet=\"loadingChannels\"></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #chatDown>\n <div data-testid=\"chatdown-container\" class=\"str-chat__down\">\n <ng-container *ngTemplateOutlet=\"loadingChannels\"></ng-container>\n <div class=\"str-chat__down-main\">\n <stream-icon-placeholder\n icon=\"connection-error\"\n ></stream-icon-placeholder>\n <h1>{{ \"streamChat.Connection error\" | translate }}</h1>\n <h3>\n {{\n \"streamChat.Error connecting to chat, refresh the page to try again.\"\n | translate\n }}\n </h3>\n </div>\n </div>\n</ng-template>\n\n<ng-template #loadingChannels>\n <div data-testid=\"loading-indicator\" class=\"str-chat__loading-channels\">\n <ng-container *ngTemplateOutlet=\"loadingChannel\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingChannel\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingChannel\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #loadingChannel>\n <div\n class=\"str-chat__loading-channels-item str-chat__channel-preview-loading\"\n >\n <div class=\"str-chat__loading-channels-avatar\"></div>\n <div\n class=\"\n str-chat__loading-channels-meta str-chat__channel-preview-end-loading\n \"\n >\n <div class=\"str-chat__loading-channels-username\"></div>\n <div class=\"str-chat__loading-channels-status\"></div>\n </div>\n </div>\n</ng-template>\n", components: [{ type: IconComponent, selector: "stream-icon", inputs: ["icon", "size"] }, { type: ChannelPreviewComponent, selector: "stream-channel-preview", inputs: ["channel"] }, { type: LoadingIndicatorPlaceholderComponent, selector: "stream-loading-indicator-placeholder", inputs: ["size", "color"] }, { type: IconPlaceholderComponent, selector: "stream-icon-placeholder", inputs: ["icon", "size"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "async": i7.AsyncPipe, "translate": i8.TranslatePipe } });
3960
+ ChannelListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: ChannelListComponent, selector: "stream-channel-list", viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: "<div\n #container\n data-testid=\"channel-list-container\"\n style=\"max-width: unset\"\n class=\"str-chat str-chat__channel-list str-chat-channel-list messaging str-chat__theme-{{\n theme$ | async\n }}\"\n [class.str-chat-channel-list--open]=\"(isOpen$ | async) === true\"\n>\n <div\n *ngIf=\"\n (isError$ | async) === false && (isInitializing$ | async) === false;\n else statusIndicator\n \"\n class=\"str-chat__channel-list-messenger\"\n >\n <div\n class=\"str-chat__channel-list-messenger__main\"\n style=\"display: flex; flex-direction: column\"\n >\n <ng-content select=\"[channel-list-top]\"></ng-content>\n <div\n class=\"str-chat__channel-list-empty\"\n *ngIf=\"!(channels$ | async)?.length\"\n >\n <stream-icon icon=\"chat-bubble\"></stream-icon>\n <p data-testid=\"empty-channel-list-indicator\">\n {{ \"streamChat.You have no channels currently\" | translate }}\n </p>\n </div>\n <p\n *ngIf=\"!(channels$ | async)?.length\"\n class=\"str-chat__channel-list-empty-v1\"\n data-testid=\"empty-channel-list-indicator\"\n >\n {{ \"streamChat.You have no channels currently\" | translate }}\n </p>\n <ng-container\n *ngFor=\"let channel of channels$ | async; trackBy: trackByChannelId\"\n >\n <ng-template #defaultTemplate let-channelInput=\"channel\">\n <stream-channel-preview\n data-testclass=\"channel-preview\"\n [channel]=\"channelInput\"\n ></stream-channel-preview>\n </ng-template>\n <div (click)=\"channelSelected()\" (keyup.enter)=\"channelSelected()\">\n <ng-container\n *ngTemplateOutlet=\"\n customChannelPreviewTemplate || defaultTemplate;\n context: getChannelPreviewContext(channel)\n \"\n ></ng-container>\n </div>\n </ng-container>\n <div\n *ngIf=\"hasMoreChannels$ | async\"\n class=\"str-chat__load-more-button\"\n (click)=\"loadMoreChannels()\"\n (keyup.enter)=\"loadMoreChannels()\"\n data-testid=\"load-more\"\n >\n <button\n class=\"str-chat__load-more-button__button str-chat__cta-button\"\n data-testid=\"load-more-button\"\n [disabled]=\"isLoadingMoreChannels\"\n >\n <span *ngIf=\"!isLoadingMoreChannels; else loadingIndicator\">{{\n \"Load more\" | translate\n }}</span>\n <ng-template #loadingIndicator\n ><stream-loading-indicator-placeholder></stream-loading-indicator-placeholder\n ></ng-template>\n </button>\n </div>\n <ng-content select=\"[channel-list-bottom]\"></ng-content>\n </div>\n </div>\n</div>\n\n<ng-template #statusIndicator>\n <ng-container *ngIf=\"isError$ | async\">\n <ng-container *ngTemplateOutlet=\"chatDown\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"isInitializing$ | async\">\n <ng-container *ngTemplateOutlet=\"loadingChannels\"></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #chatDown>\n <div data-testid=\"chatdown-container\" class=\"str-chat__down\">\n <ng-container *ngTemplateOutlet=\"loadingChannels\"></ng-container>\n <div class=\"str-chat__down-main\">\n <stream-icon-placeholder\n icon=\"connection-error\"\n ></stream-icon-placeholder>\n <h1>{{ \"streamChat.Connection error\" | translate }}</h1>\n <h3>\n {{\n \"streamChat.Error connecting to chat, refresh the page to try again.\"\n | translate\n }}\n </h3>\n </div>\n </div>\n</ng-template>\n\n<ng-template #loadingChannels>\n <div data-testid=\"loading-indicator\" class=\"str-chat__loading-channels\">\n <ng-container *ngTemplateOutlet=\"loadingChannel\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingChannel\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingChannel\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #loadingChannel>\n <div\n class=\"str-chat__loading-channels-item str-chat__channel-preview-loading\"\n >\n <div class=\"str-chat__loading-channels-avatar\"></div>\n <div\n class=\"\n str-chat__loading-channels-meta str-chat__channel-preview-end-loading\n \"\n >\n <div class=\"str-chat__loading-channels-username\"></div>\n <div class=\"str-chat__loading-channels-status\"></div>\n </div>\n </div>\n</ng-template>\n", components: [{ type: IconComponent, selector: "stream-icon", inputs: ["icon", "size"] }, { type: ChannelPreviewComponent, selector: "stream-channel-preview", inputs: ["channel"] }, { type: LoadingIndicatorPlaceholderComponent, selector: "stream-loading-indicator-placeholder", inputs: ["size", "color"] }, { type: IconPlaceholderComponent, selector: "stream-icon-placeholder", inputs: ["icon", "size"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "async": i7.AsyncPipe, "translate": i8.TranslatePipe } });
3922
3961
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: ChannelListComponent, decorators: [{
3923
3962
  type: Component,
3924
3963
  args: [{