nuxeo-development-framework 3.4.3 → 3.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (20) hide show
  1. package/bundles/nuxeo-development-framework.umd.js +135 -33
  2. package/bundles/nuxeo-development-framework.umd.js.map +1 -1
  3. package/esm2015/lib/Core/services/initialization/initialization.service.js +2 -2
  4. package/esm2015/lib/Core/services/nuxeo/new-nuxeo-overide.js +42 -4
  5. package/esm2015/lib/components/comments/components/comments-list/comments-list.component.js +4 -3
  6. package/esm2015/lib/components/correspondence-relation/components/correspondence-relation/correspondence-relation.component.js +2 -2
  7. package/esm2015/lib/components/correspondence-relation/components/correspondence-relation-reply/correspondence-relation-reply.component.js +5 -4
  8. package/esm2015/lib/components/correspondence-relation/components/versions/versions.component.js +1 -1
  9. package/esm2015/lib/components/cts-tags/components/correspondence-tags/correspondence-tags.component.js +2 -2
  10. package/esm2015/lib/components/latest-activity/components/latest-activity/latest-activity.component.js +4 -3
  11. package/esm2015/lib/components/latest-activity/components/single-activity/single-activity.component.js +2 -2
  12. package/esm2015/lib/components/pdf-tron/pdftron/pdftron.component.js +38 -18
  13. package/esm2015/lib/shared/components/item-list/item-list.component.js +2 -2
  14. package/esm2015/lib/shared/components/no-data/no-data.component.js +7 -3
  15. package/fesm2015/nuxeo-development-framework.js +136 -34
  16. package/fesm2015/nuxeo-development-framework.js.map +1 -1
  17. package/lib/Core/services/nuxeo/new-nuxeo-overide.d.ts +1 -0
  18. package/lib/components/pdf-tron/pdftron/pdftron.component.d.ts +6 -2
  19. package/lib/shared/components/no-data/no-data.component.d.ts +2 -1
  20. package/package.json +1 -1
@@ -8,6 +8,7 @@ import * as i1 from "./pdftron.service";
8
8
  import * as i2 from "../../../Core/services/nuxeo/nuxeo.service";
9
9
  import * as i3 from "../../../pipes/secure.pipe";
10
10
  import * as i4 from "../../../Core/services/translation/translation.service";
11
+ import * as i5 from "../../custom-toastr/services/custom-toastr.service";
11
12
  /**
12
13
  * A reusable file viewer based on PDFTron Library
13
14
  * @title
@@ -22,13 +23,14 @@ import * as i4 from "../../../Core/services/translation/translation.service";
22
23
  * </app-pdftron>
23
24
  */
24
25
  export class PdftronComponent {
25
- constructor(cdr, pdftronService, nuxeo, baseHref, securePipe, translationService, environment) {
26
+ constructor(cdr, pdftronService, nuxeo, baseHref, securePipe, translationService, toaster, environment) {
26
27
  this.cdr = cdr;
27
28
  this.pdftronService = pdftronService;
28
29
  this.nuxeo = nuxeo;
29
30
  this.baseHref = baseHref;
30
31
  this.securePipe = securePipe;
31
32
  this.translationService = translationService;
33
+ this.toaster = toaster;
32
34
  this.environment = environment;
33
35
  this.actionClicked = false; // used to know if there is action clicked outside to start edit mode or not
34
36
  this.DOCUMENT_TYPE = 'application/pdf';
@@ -37,6 +39,8 @@ export class PdftronComponent {
37
39
  this.trackSignature = false; // to enable tracking signature position and emit it after every change it signature
38
40
  this.onSignatureTracking = new EventEmitter(); // event to emit signature changes
39
41
  this.useOutsideAnotations = false; // flage to indicat if using out side anotations or not
42
+ this.allowDownloadSecretFile = true; // allow or prevent download screct files
43
+ this.allowPrintSecretFile = true; // allow or prevent print screct files
40
44
  this.onAddingAnotation = new EventEmitter(); // used to export all anotations to outside
41
45
  this.events = new EventEmitter();
42
46
  this.SignatureEvent = new EventEmitter(); // used to export signature to outside
@@ -275,17 +279,23 @@ export class PdftronComponent {
275
279
  img: '<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" class="bi bi-file-earmark-arrow-down" viewBox="0 0 16 16"> <path d="M8.5 6.5a.5.5 0 0 0-1 0v3.793L6.354 9.146a.5.5 0 1 0-.708.708l2 2a.5.5 0 0 0 .708 0l2-2a.5.5 0 0 0-.708-.708L8.5 10.293V6.5z"/> <path d="M14 14V4.5L9.5 0H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2zM9.5 3A1.5 1.5 0 0 0 11 4.5h2V14a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h5.5v2z"/></svg>',
276
280
  title: this.isArabic ? 'تنزيل' : 'Download',
277
281
  onClick: () => __awaiter(this, void 0, void 0, function* () {
278
- const { DocumentViewer, AnnotationManager, SaveOptions } = this.webViewerInstance.CoreControls;
279
- // const xfdfString = await AnnotationManager.exportAnnotations();
280
- const saveOptions = SaveOptions;
281
- const options = {
282
- filename: this.correspondance.title ? this.correspondance.title : 'myDocument.pdf',
283
- // xfdfString,
284
- flags: saveOptions.LINEARIZED,
285
- downloadType: 'pdf'
286
- };
287
- this.pdftronService.instance.downloadPdf(options);
288
- this.events.next('download');
282
+ if (this.allowDownloadSecretFile || (!this.allowDownloadSecretFile && this.correspondance.properties[this.secrecyProperty] && this.correspondance.properties[this.secrecyProperty] === 'Normal')) {
283
+ const { DocumentViewer, AnnotationManager, SaveOptions } = this.webViewerInstance.CoreControls;
284
+ // const xfdfString = await AnnotationManager.exportAnnotations();
285
+ const saveOptions = SaveOptions;
286
+ const options = {
287
+ filename: this.correspondance.title ? this.correspondance.title : 'myDocument.pdf',
288
+ // xfdfString,
289
+ flags: saveOptions.LINEARIZED,
290
+ downloadType: 'pdf'
291
+ };
292
+ this.pdftronService.instance.downloadPdf(options);
293
+ this.events.next('download');
294
+ }
295
+ else {
296
+ this.toaster.show('error', 'error', 'canot_download_screct');
297
+ this.cdr.detectChanges();
298
+ }
289
299
  // let url = this.correspondance.properties.content.data;
290
300
  // let fileName = this.correspondance.properties.content.name;
291
301
  // if (url && fileName) {
@@ -312,8 +322,14 @@ export class PdftronComponent {
312
322
  img: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><defs><style>.cls-1{fill:#abb0c4;}</style></defs><title>icon - header - print - line</title><path class="cls-1" d="M20,6H18V2H6V6H4A2,2,0,0,0,2,8v9a2,2,0,0,0,2,2H6v3H18V19h2a2,2,0,0,0,2-2V8A2,2,0,0,0,20,6ZM8,4h8V6H8Zm8,16H8V16h8Zm4-3H18V14H6v3H4V8H20Zm-4-7h2v2H16Zm-3,0h2v2H13Z"></path></svg>',
313
323
  title: this.isArabic ? "طباعة" : 'Print',
314
324
  onClick: () => {
315
- this.pdftronService.instance.print();
316
- this.events.next('print');
325
+ if (this.allowPrintSecretFile || (!this.allowPrintSecretFile && this.correspondance.properties[this.secrecyProperty] && this.correspondance.properties[this.secrecyProperty] === 'Normal')) {
326
+ this.pdftronService.instance.print();
327
+ this.events.next('print');
328
+ }
329
+ else {
330
+ this.toaster.show('error', 'error', 'canot_print_screct');
331
+ this.cdr.detectChanges();
332
+ }
317
333
  },
318
334
  });
319
335
  });
@@ -680,8 +696,8 @@ export class PdftronComponent {
680
696
  this.transelationSubscrition ? this.transelationSubscrition.unsubscribe() : null;
681
697
  }
682
698
  }
683
- PdftronComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: PdftronComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.PdftronService }, { token: i2.NuxeoService }, { token: APP_BASE_HREF }, { token: i3.SecurePipe }, { token: i4.TranslationService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Component });
684
- PdftronComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.4", type: PdftronComponent, selector: "app-pdftron", inputs: { editMode: "editMode", actionClicked: "actionClicked", fileTitle: "fileTitle", docId: "docId", DOCUMENT_TYPE: "DOCUMENT_TYPE", fileData: "fileData", fitMode: "fitMode", authHeader: "authHeader", fileURL: "fileURL", correspondance: "correspondance", secrecyProperty: "secrecyProperty", editingType: "editingType", userSignatures: "userSignatures", searchString: "searchString", trackSignature: "trackSignature", useOutsideAnotations: "useOutsideAnotations", importedAnotations: "importedAnotations" }, outputs: { onSignatureTracking: "onSignatureTracking", onAddingAnotation: "onAddingAnotation", events: "events", SignatureEvent: "SignatureEvent" }, providers: [SecurePipe], viewQueries: [{ propertyName: "viewerRef", first: true, predicate: ["fileViewer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div #fileViewer style=\"width: 100%; height: 100%;\"></div>\r\n", styles: [""] });
699
+ PdftronComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: PdftronComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.PdftronService }, { token: i2.NuxeoService }, { token: APP_BASE_HREF }, { token: i3.SecurePipe }, { token: i4.TranslationService }, { token: i5.CustomToastrService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Component });
700
+ PdftronComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.4", type: PdftronComponent, selector: "app-pdftron", inputs: { editMode: "editMode", actionClicked: "actionClicked", fileTitle: "fileTitle", docId: "docId", DOCUMENT_TYPE: "DOCUMENT_TYPE", fileData: "fileData", fitMode: "fitMode", authHeader: "authHeader", fileURL: "fileURL", correspondance: "correspondance", secrecyProperty: "secrecyProperty", editingType: "editingType", userSignatures: "userSignatures", searchString: "searchString", trackSignature: "trackSignature", useOutsideAnotations: "useOutsideAnotations", importedAnotations: "importedAnotations", allowDownloadSecretFile: "allowDownloadSecretFile", allowPrintSecretFile: "allowPrintSecretFile" }, outputs: { onSignatureTracking: "onSignatureTracking", onAddingAnotation: "onAddingAnotation", events: "events", SignatureEvent: "SignatureEvent" }, providers: [SecurePipe], viewQueries: [{ propertyName: "viewerRef", first: true, predicate: ["fileViewer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div #fileViewer style=\"width: 100%; height: 100%;\"></div>\r\n", styles: [""] });
685
701
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: PdftronComponent, decorators: [{
686
702
  type: Component,
687
703
  args: [{
@@ -693,7 +709,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImpor
693
709
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.PdftronService }, { type: i2.NuxeoService }, { type: undefined, decorators: [{
694
710
  type: Inject,
695
711
  args: [APP_BASE_HREF]
696
- }] }, { type: i3.SecurePipe }, { type: i4.TranslationService }, { type: undefined, decorators: [{
712
+ }] }, { type: i3.SecurePipe }, { type: i4.TranslationService }, { type: i5.CustomToastrService }, { type: undefined, decorators: [{
697
713
  type: Inject,
698
714
  args: ['environment']
699
715
  }] }]; }, propDecorators: { viewerRef: [{
@@ -735,6 +751,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImpor
735
751
  type: Input
736
752
  }], importedAnotations: [{
737
753
  type: Input
754
+ }], allowDownloadSecretFile: [{
755
+ type: Input
756
+ }], allowPrintSecretFile: [{
757
+ type: Input
738
758
  }], onAddingAnotation: [{
739
759
  type: Output
740
760
  }], events: [{
@@ -742,4 +762,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImpor
742
762
  }], SignatureEvent: [{
743
763
  type: Output
744
764
  }] } });
745
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmdHJvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL3BkZi10cm9uL3BkZnRyb24vcGRmdHJvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL3BkZi10cm9uL3BkZnRyb24vcGRmdHJvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUdMLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sU0FBMkIsTUFBTSxvQkFBb0IsQ0FBQztBQUc3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7QUFLeEQ7Ozs7Ozs7Ozs7OztHQVlHO0FBT0gsTUFBTSxPQUFPLGdCQUFnQjtJQWdEM0IsWUFDUyxHQUFzQixFQUNyQixjQUE4QixFQUM5QixLQUFtQixFQUNJLFFBQWdCLEVBQ3ZDLFVBQXNCLEVBQ3RCLGtCQUF1QyxFQUNoQixXQUFXO1FBTm5DLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3JCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQ0ksYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQUN2QyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBcUI7UUFDaEIsZ0JBQVcsR0FBWCxXQUFXLENBQUE7UUFoRG5DLGtCQUFhLEdBQUcsS0FBSyxDQUFDLENBQUMsNEVBQTRFO1FBVTVHLGtCQUFhLEdBQUcsaUJBQWlCLENBQUM7UUFJbEMsWUFBTyxHQUFvQyxVQUFVLENBQUM7UUFXN0MsaUJBQVksR0FBRyxFQUFFLENBQUMsQ0FBQywwQ0FBMEM7UUFFN0QsbUJBQWMsR0FBRyxLQUFLLENBQUMsQ0FBQyxvRkFBb0Y7UUFDM0csd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQyxDQUFDLGtDQUFrQztRQUU3RSx5QkFBb0IsR0FBRyxLQUFLLENBQUMsQ0FBQyx1REFBdUQ7UUFFcEYsc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQyxDQUFDLDJDQUEyQztRQUU3RixXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsQixtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUMsQ0FBQyxzQ0FBc0M7UUFDckYsa0JBQWEsR0FBRyxJQUFJLENBQUMsQ0FBQyxtRUFBbUU7UUFDekYsdUJBQWtCLEdBQUcsSUFBSSxDQUFDLENBQUMsOEVBQThFO1FBQ3pHLG9CQUFlLEdBQUcsS0FBSyxDQUFDLENBQUMsOEVBQThFO1FBOFl2RyxvQkFBZSxHQUFHLEVBQUUsQ0FBQztRQUNyQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQixtQkFBYyxHQUFDLEVBQUUsQ0FBQztRQUNsQiwwQkFBcUIsR0FBRyxFQUFFLENBQUM7UUFDM0IsOEJBQXlCLEdBQUcsRUFBRSxDQUFDO1FBNk8vQixhQUFRLEdBQUcsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDbEMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEVBQUUsQ0FBQztZQUNqQyxJQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBQztnQkFDakMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUU7b0JBQ3BDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO29CQUMzQixvREFBb0Q7b0JBQ3BELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ25FLENBQUMsQ0FBQyxDQUFDO2FBQ0Y7WUFDRCxzREFBc0Q7WUFDdEQsSUFBRyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBQztnQkFDN0IsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO29CQUNwQixrREFBa0Q7b0JBQ2hELGdFQUFnRTtvQkFDaEUsSUFBSSxRQUFRLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDdEMsSUFBRyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBQzt3QkFDckIsOENBQThDO3dCQUM5QyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUcsS0FBSyxFQUFFLEVBQUU7NEJBQ3hDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQzs0QkFDbkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDOzRCQUNqQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ2hGLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDOUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0NBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO29DQUNsQyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTt3Q0FDN0IsSUFBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBQzs0Q0FDakMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLEVBQUcsSUFBSSxDQUFDLENBQUE7eUNBQ3pEO29DQUNILENBQUMsQ0FBQyxDQUFBO2dDQUNKLENBQUMsQ0FBQyxDQUFDOzRCQUNMLENBQUMsQ0FBQyxDQUFBO3dCQUNKLENBQUMsQ0FBQyxDQUFDO3FCQUNKO3lCQUFJO3dCQUNILDBDQUEwQzt3QkFDMUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxDQUFBO3FCQUMxQztvQkFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLGtCQUFrQixFQUFFLENBQUM7b0JBQ3BELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQ2xFO2FBQ047aUJBQUk7Z0JBQ0gsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2FBQ3ZEO1FBQ0YsQ0FBQyxDQUFBO0lBOXBCSyxDQUFDO0lBRUMsUUFBUTs7WUFDWixJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzlFLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFFO1lBQ3ZCLENBQUMsQ0FBQyxDQUFBO1FBQ0gsQ0FBQztLQUFBO0lBRUksZUFBZTs7WUFDbkIsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFFOUYsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDbkMsSUFBSSxDQUFDLGFBQWEsR0FBRywrQkFBK0IsQ0FBQzthQUN0RDtpQkFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUMzQyxJQUFJLENBQUMsYUFBYTtvQkFDaEIsMkVBQTJFLENBQUM7YUFDL0U7aUJBQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDMUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxvQkFBb0IsQ0FBQzthQUMzQztpQkFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUMzQyxJQUFJLENBQUMsYUFBYTtvQkFDaEIseUVBQXlFLENBQUM7YUFDN0U7WUFDRCxTQUFTLENBQ1A7Z0JBQ0UsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsa0JBQWtCO2dCQUN4QyxtQkFBbUIsRUFBRSxJQUFJO2dCQUN6QixTQUFTLEVBQUUsSUFBSTtnQkFDZixVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUI7Z0JBQzlDLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsaUNBQWlDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLGlDQUFpQyxDQUFDO2dCQUM5SCxjQUFjLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUTtnQkFDeEgsZ0JBQWdCLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxhQUFhLENBQUM7YUFFcEQsRUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FDN0IsQ0FBQyxJQUFJLENBQUMsQ0FBTyxRQUFRLEVBQUUsRUFBRTtnQkFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBRTtnQkFDekUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFFBQVEsQ0FBQztnQkFDakUsSUFBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUM7b0JBQ2xELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO29CQUN4QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO29CQUNoRixxRUFBcUU7b0JBQ3JFLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQy9DO3FCQUFJO29CQUNMLGlGQUFpRjtvQkFDN0UsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7aUJBQzNCO2dCQUNILElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUN4QixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztnQkFDL0IsSUFBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUM7b0JBQzNCLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO29CQUNuQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztpQkFDbEM7Z0JBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQztvQkFDeEQsb0ZBQW9GO29CQUNwRixZQUFZLEVBQUUsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLENBQUMsRUFBQyxPQUFPLENBQUM7b0JBQzdFLGtCQUFrQixFQUFFLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxDQUFDLEVBQUMsT0FBTyxDQUFDO2lCQUNwRixDQUFDLENBQUM7Z0JBQ0gsSUFBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBQztvQkFDN0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQztpQkFDeEQ7Z0JBQ0MsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBRXRCLENBQUMsQ0FBQSxDQUFDLENBQUM7UUFDTCxDQUFDO0tBQUE7SUFFRCwyQkFBMkI7UUFDekIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQztRQUV4RCxjQUFjLENBQUMsRUFBRSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsRUFBRTtZQUN2QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1FBQ2hGLENBQUMsQ0FBQyxDQUFBO1FBQ0YseUJBQXlCO1FBQ3pCLHdDQUF3QztRQUN4Qyx3RUFBd0U7UUFDeEUsUUFBUTtRQUNSLE1BQU07SUFDUixDQUFDO0lBRUQsZ0lBQWdJO0lBQ2hJLHlCQUF5QjtRQUN2QixJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFO1lBQ2hHLElBQUksUUFBUTtnQkFBRSxPQUFPO1lBQ3JCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRTtnQkFDbEYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ3BELENBQUMsQ0FBQyxDQUFDO1lBQ0gsZ0dBQWdHO1lBQ2hHLElBQUcsSUFBSSxDQUFDLGNBQWMsRUFBQztnQkFDckIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFDLFVBQVUsRUFBRyxXQUFXLEVBQUcsTUFBTSxFQUFHLE1BQU0sRUFBQyxDQUFDLENBQUE7YUFDNUU7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxlQUFlO1FBQ2IsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQztRQUN4RCxNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFFMUUsY0FBYyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7WUFDdkMsSUFBRyxJQUFJLENBQUMsYUFBYSxFQUFDO2dCQUNwQixhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO2dCQUN6RCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQzthQUM1QjtRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELHVCQUF1QjtRQUNyQixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDO1FBQ3hELE1BQU0sbUJBQW1CLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxDQUFBO1FBQy9FLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ3RELElBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUM7Z0JBQzFCLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7YUFDN0I7WUFDRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBQUEsQ0FBQztJQUNOLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQztRQUN4RCxNQUFNLG1CQUFtQixHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0FBQTtRQUMvRSxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUN2RCxJQUFJLFVBQVUsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUN0QyxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztnQkFDN0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRyxjQUFjLENBQUMsQ0FBQztnQkFDbkQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQTthQUN4QjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQUEsQ0FBQztJQUNOLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUcsY0FBYztRQUMxQyxJQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBQztZQUNyQiw4REFBOEQ7WUFDOUQsSUFBSSxTQUFTLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2xELElBQUksR0FBRyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQzlCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNqQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNuQixDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFDZixLQUFLLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUIsT0FBTSxDQUFDLEVBQUUsRUFBQztnQkFDTixLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNqQztZQUNELElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFHLEdBQUcsQ0FBQyxDQUFBO1lBQ2xDLElBQUksTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQztZQUMvRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7U0FFakU7YUFBSTtZQUNILElBQUksQ0FBQywwQkFBMEIsQ0FBQyxVQUFVLEVBQUcsY0FBYyxDQUFDLENBQUE7U0FDN0Q7SUFDSCxDQUFDO0lBRUssMEJBQTBCLENBQUMsVUFBVSxFQUFFLFNBQVM7O1lBQ3BELGdEQUFnRDtZQUNoRCxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2hELDZDQUE2QztZQUM3QyxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNoRiwrREFBK0Q7WUFDL0QsTUFBTSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQztZQUNoQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BDLDhFQUE4RTtZQUM5RSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QyxzQ0FBc0M7WUFDdEMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDakMsaURBQWlEO1lBQ2pELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDckIseUNBQXlDO2dCQUN6QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUcsR0FBRyxDQUFDLENBQUE7Z0JBQ3ZDLElBQUksTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNsRSxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7S0FBQTtJQUVELGdCQUFnQjtRQUNkLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUM7UUFDeEQsTUFBTSxtQkFBbUIsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDaEYsbUJBQW1CLENBQUMsRUFBRSxDQUFDLGtCQUFrQixFQUFFLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQy9ELE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNuRyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDL0MsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDVixJQUFJLEVBQUUsY0FBYztnQkFDcEIsR0FBRyxFQUFFLGtjQUFrYztnQkFDdmMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVTtnQkFDM0MsT0FBTyxFQUFFLEdBQVMsRUFBRTtvQkFDbEIsTUFBTSxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDO29CQUMvRixrRUFBa0U7b0JBQ2xFLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQztvQkFDaEMsTUFBTSxPQUFPLEdBQUc7d0JBQ2QsUUFBUSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsZ0JBQWdCO3dCQUNsRixjQUFjO3dCQUNkLEtBQUssRUFBRSxXQUFXLENBQUMsVUFBVTt3QkFDN0IsWUFBWSxFQUFFLEtBQUs7cUJBQ3BCLENBQUM7b0JBRUYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDN0IseURBQXlEO29CQUN6RCw4REFBOEQ7b0JBQzlELHlCQUF5QjtvQkFDekIsa0RBQWtEO29CQUNsRCxzQ0FBc0M7b0JBQ3RDLGdEQUFnRDtvQkFDaEQsbUNBQW1DO29CQUNuQyw2REFBNkQ7b0JBQzdELGdDQUFnQztvQkFDaEMsdUNBQXVDO29CQUN2QyxvQkFBb0I7b0JBQ3BCLHVDQUF1QztvQkFDdkMsb0NBQW9DO29CQUNwQyxRQUFRO29CQUNSLElBQUk7Z0JBQ04sQ0FBQyxDQUFBO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUMvQyxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUNWLElBQUksRUFBRSxjQUFjO2dCQUNwQixHQUFHLEVBQUUsa1dBQWtXO2dCQUN2VyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPO2dCQUN4QyxPQUFPLEVBQUUsR0FBRyxFQUFFO29CQUNaLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNyQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDNUIsQ0FBQzthQUNGLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFlBQVk7UUFDVixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ3hELElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUM5QixHQUFHLFFBQVEsQ0FBQyxRQUFRLE1BQU07UUFDMUIsNEJBQTRCO1FBQzVCLHNCQUFzQjtRQUN0QixNQUFNO1NBQ1AsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNoRSxPQUFPO1NBQ1I7UUFDRCxNQUFNLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDeEUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7WUFDbEMsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7WUFDdEQsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRTtnQkFDOUIsT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO2FBQ2xEO2lCQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxNQUFNLEVBQUU7Z0JBQ2xDLE9BQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQzthQUMvQztZQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNsQixJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0RCw0QkFBNEI7U0FDN0I7UUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDdkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNoRCxZQUFZLEVBQUMsSUFBSTtnQkFDakIsYUFBYSxFQUFFO29CQUNiLGFBQWEsRUFBRSxJQUFJLENBQUMsVUFBVTtpQkFDL0I7Z0JBQ0QseUJBQXlCO2FBQzFCLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUNqQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxFQUN2RTtnQkFDRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVM7YUFDekIsQ0FDRixDQUFDO1NBQ0g7UUFFRCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssU0FBUyxFQUFFO1lBQ3JDLHFFQUFxRTtZQUNyRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQXFCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDbEUsaURBQWlEO2dCQUNqRCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssUUFBUSxFQUFFO29CQUM3SCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7aUJBQ3BCO2FBQ0Y7aUJBQ0ksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFxQixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDeEUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2FBQ3JCO1NBQ0Y7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFSyxZQUFZOztZQUNoQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzNELE1BQU0sVUFBVSxHQUNkLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ2hFLE1BQU0sSUFBSSxHQUFHLE1BQU0sR0FBRyxDQUFDLFdBQVcsQ0FBQztnQkFDakMsNENBQTRDO2dCQUM1QyxVQUFVO2FBQ1gsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxHQUFHLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUMzRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsQ0FBQztLQUFBO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3ZCLDJEQUEyRDtZQUMzRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDO2dCQUNyQyxxQkFBcUI7Z0JBQ3JCLG1CQUFtQjtnQkFDbkIscUJBQXFCO2dCQUNyQix1QkFBdUI7YUFDeEIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdkQ7YUFBTTtZQUNMLHNEQUFzRDtZQUN0RCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUM7b0JBQ3JDLHFCQUFxQjtvQkFDckIsbUJBQW1CO29CQUNuQixxQkFBcUI7b0JBQ3JCLHVCQUF1QjtpQkFDeEIsQ0FBQyxDQUFDO2dCQUNILElBQUksS0FBSyxDQUFFO2dCQUNYLElBQUcsSUFBSSxDQUFDLFdBQVcsS0FBSyxTQUFTLEVBQUM7b0JBQ2hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUM7d0JBQ3BDLHFCQUFxQjtxQkFDdEIsQ0FBQyxDQUFDO2lCQUVKO3FCQUFLLElBQUcsSUFBSSxDQUFDLFdBQVcsS0FBSyxVQUFVLEVBQUM7b0JBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUM7d0JBQ3BDLHFCQUFxQjt3QkFDckIsbUJBQW1CO3dCQUNuQix1QkFBdUI7cUJBQ3hCLENBQUMsQ0FBQztpQkFDSjthQUNGO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUM7b0JBQ3BDLHFCQUFxQjtvQkFDckIsbUJBQW1CO29CQUNuQixxQkFBcUI7b0JBQ3JCLHVCQUF1QjtpQkFDeEIsQ0FBQyxDQUFDO2FBQ0o7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2RCxtRUFBbUU7U0FDcEU7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQU87UUFDakIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xCLElBQ0UsT0FBTyxDQUFDLGNBQWM7Z0JBQ3RCLE9BQU8sQ0FBQyxjQUFjLENBQUMsYUFBYTtnQkFDcEMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxhQUFhO29CQUNwQyxPQUFPLENBQUMsY0FBYyxDQUFDLFlBQVksRUFDbkM7Z0JBQ0EsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNuQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2hCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzthQUN4QjtTQUNGO0lBQ0gsQ0FBQztJQUVPLFlBQVksQ0FBQyxLQUFLO1FBQ3hCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN0QixpQ0FBaUM7WUFDakMsZ0RBQWdEO1NBQ2pEO0lBQ0gsQ0FBQztJQWVELDJFQUEyRTtJQUMzRSxnQkFBZ0I7UUFDZCxNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDeEUsTUFBTSxjQUFjLEdBQUcsQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBRXZELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxFQUFFLENBQUM7WUFDbEMsSUFBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUM7Z0JBQ2pDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFO29CQUNwQyxVQUFVLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztvQkFDM0Isb0RBQW9EO29CQUNwRCxZQUFZLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzVDLENBQUMsQ0FBQyxDQUFDO2FBQ0Y7WUFDRCxzREFBc0Q7WUFDdEQsSUFBRyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBQztnQkFDN0Isa0RBQWtEO2dCQUNsRCxJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQ3pDLE1BQU0sVUFBVSxHQUFHLElBQUksV0FBVyxDQUFDLHVCQUF1QixFQUFFLENBQUM7b0JBQzdELFVBQVUsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztvQkFDOUQsVUFBVSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO29CQUN2QyxVQUFVLENBQUMsV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLENBQUMsRUFBQyxPQUFPLENBQUMsQ0FBQztvQkFDbEUsVUFBVSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUN6RSxPQUFPLFVBQVUsQ0FBQztnQkFDcEIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ2xELFlBQVksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUNqRCxZQUFZLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQy9EO2lCQUFJO2dCQUNILFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2FBQ2hDO1FBQ0gsQ0FBQyxDQUFDO1FBRUYsU0FBUyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7WUFDbEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzNELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELG1EQUFtRDtJQUNuRCxlQUFlLENBQUMsZUFBZTtRQUM3QixNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDeEUsSUFBSSxhQUFhLENBQUM7UUFDbEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDckQsU0FBUyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7WUFDbEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDcE0sSUFBSSxDQUFDLHFCQUFxQixHQUFHLEVBQUUsQ0FBQyxDQUFDLGtEQUFrRDtZQUNuRixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBRXBCLGtEQUFrRDtnQkFDaEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxXQUFXLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztnQkFDN0QsZUFBZSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRTtvQkFDL0IsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDckMsSUFBRyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBQzt3QkFDckIsOENBQThDO3dCQUM5QyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUcsS0FBSyxFQUFFLEVBQUU7NEJBQ3hDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQzs0QkFDbkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDOzRCQUNqQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ2hGLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDOUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0NBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO29DQUNsQyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTt3Q0FDN0IsSUFBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBQzs0Q0FDaEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLEVBQUcsSUFBSSxDQUFDLENBQUE7eUNBQ3pEO29DQUNILENBQUMsQ0FBQyxDQUFBO2dDQUNKLENBQUMsQ0FBQyxDQUFDOzRCQUNMLENBQUMsQ0FBQyxDQUFBO3dCQUNKLENBQUMsQ0FBQyxDQUFDO3FCQUNKO3lCQUFJO3dCQUNILDBDQUEwQzt3QkFDMUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxDQUFBO3FCQUN6QztnQkFDSCxDQUFDLENBQUMsQ0FBQTtnQkFDRixTQUFTLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ3pDO2lCQUFLO2dCQUNKLGFBQWEsR0FBRztvQkFDZCw0R0FBNEc7b0JBQzVHLFVBQVUsRUFBRSxJQUFJO29CQUNoQix5RUFBeUU7b0JBQ3pFLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRTt3QkFDakIsb0ZBQW9GO3dCQUNwRixJQUFJLE1BQU0sQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRTs0QkFDbkYsTUFBTSxVQUFVLEdBQUcsSUFBSSxXQUFXLENBQUMsdUJBQXVCLEVBQUUsQ0FBQzs0QkFDN0QsVUFBVSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDOzRCQUM5RCxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQzs0QkFDOUIsVUFBVSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDOzRCQUN2QyxVQUFVLENBQUMsV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLENBQUMsRUFBQyxPQUFPLENBQUMsQ0FBQzs0QkFDbEUsVUFBVSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxDQUFDOzRCQUN6RSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBSTs0QkFDekMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7NEJBQzFDLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7NEJBQ25ELFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7eUJBRXREO29CQUNILENBQUM7aUJBQ0YsQ0FBQztnQkFDRixlQUFlLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFO29CQUNqQyxTQUFTLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7Z0JBQzlELENBQUMsQ0FBQyxDQUFBO2FBQ0g7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCx1Q0FBdUM7SUFDdkMsdUJBQXVCLENBQUMsWUFBWTtRQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUcsS0FBSyxFQUFFLEVBQUU7WUFDeEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQ25DLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUNqQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEYsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlFLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxjQUFjO1lBQy9ELE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxlQUFlO1lBQ2xFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtvQkFDbEMsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7d0JBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFOzRCQUN4QixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFO2dDQUNwQyxtQ0FBbUM7Z0NBQ25DLElBQUksS0FBSyxHQUFHLENBQUM7d0NBQ1QsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3Q0FDdkMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3Q0FDekMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3Q0FDekMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3Q0FDdkMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3Q0FDdkMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3Q0FDdkMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3Q0FDekMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztxQ0FDMUMsQ0FBQyxDQUFBO2dDQUNKLElBQUksQ0FBQyxZQUFZLENBQ2YsS0FBSyxFQUNMLEtBQUssR0FBQyxDQUFDLENBQ1IsQ0FBQztnQ0FDRixJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxFQUFHLEtBQUssR0FBQyxDQUFDLEVBQUcsS0FBSyxFQUFHLElBQUksQ0FBQyxJQUFJLENBQUUsQ0FBQzs2QkFDekU7d0JBQ0gsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxtQkFBbUIsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUk7UUFDN0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ25DLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNqQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUNuRixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUNqRixNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsY0FBYztRQUMvRCxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsZUFBZTtRQUNsRSxxREFBcUQ7UUFDckQsSUFBSSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFO1lBQ3JDLElBQUksbUJBQW1CLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtnQkFDL0MsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQTthQUM1RDtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsK0VBQStFO1FBQy9FLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUMxSCxDQUFDLGdCQUFnQixDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUMxSCxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO2FBQzVCO1FBQ0gsQ0FBQyxDQUFDLENBQUE7UUFFRix3RUFBd0U7UUFDeEUsMERBQTBEO1FBQzFELElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNmLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUMvRSxLQUFLLENBQUMsSUFBSSxDQUNSO2dCQUNFLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDOUYsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzNELEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMzRCxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzlGLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN6RCxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzlGLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDaEcsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDNUQsQ0FBQyxDQUFDO1lBQ0wsSUFBSSxDQUFDLFlBQVksQ0FDZixLQUFLLEVBQ0wsVUFBVSxDQUNYLENBQUM7WUFDRixJQUFJLENBQUMscUJBQXFCLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFHLFVBQVUsRUFBRyxLQUFLLEVBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1NBQzNGO0lBQ0gsQ0FBQztJQUVELHFCQUFxQixDQUFDLFlBQVksRUFBRyxPQUFPLEVBQUcsS0FBSyxFQUFHLElBQUk7UUFDMUQsSUFBSSxzQkFBc0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3hELElBQUksdUJBQXVCLEdBQUcsc0JBQXNCLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQztRQUMxRSxJQUFJLGtCQUFrQixHQUFHO1lBQ3JCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFNBQVMsRUFBRSxZQUFZO1lBQ3ZCLGNBQWMsRUFBQyxzQkFBc0I7WUFDckMsWUFBWSxFQUFFLHVCQUF1QjtZQUNyQyxPQUFPLEVBQUUsT0FBTztZQUNoQixVQUFVLEVBQUUsQ0FBQztZQUNiLEtBQUssRUFBRSxDQUFDO29CQUNKLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO29CQUNsQixFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztvQkFDbEIsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7b0JBQ2xCLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO29CQUNsQixFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztvQkFDbEIsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7b0JBQ2xCLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO29CQUNsQixFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztpQkFDckIsQ0FBQztTQUNMLENBQUE7UUFDRCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDcEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQscUJBQXFCLENBQUMsU0FBUztRQUM3QixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osU0FBUyxDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3pFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCw4Q0FBOEM7SUFDOUMsWUFBWSxDQUFDLEtBQUssRUFBRSxVQUFVO1FBQzVCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDM0YsaUJBQWlCLENBQUMsV0FBVyxHQUFHLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxDQUFDLEVBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEcsaUJBQWlCLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNoQyxpQkFBaUIsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzFDLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2hGLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUVyRSxxRkFBcUY7UUFDckYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUE4Q0Qsc0hBQXNIO0lBRXRILFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDL0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ2xDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztTQUM5RDtRQUNELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDbkYsQ0FBQzs7NkdBbHVCVSxnQkFBZ0IsNkdBb0RqQixhQUFhLHlFQUdiLGFBQWE7aUdBdkRaLGdCQUFnQix5ckJBRmhCLENBQUMsVUFBVSxDQUFDLHdKQ3hDekIsa0VBQ0E7MkZEeUNhLGdCQUFnQjtrQkFONUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsV0FBVyxFQUFFLDBCQUEwQjtvQkFDdkMsU0FBUyxFQUFFLENBQUMsMEJBQTBCLENBQUM7b0JBQ3ZDLFNBQVMsRUFBRSxDQUFDLFVBQVUsQ0FBQztpQkFDeEI7OzBCQXFESSxNQUFNOzJCQUFDLGFBQWE7OzBCQUdwQixNQUFNOzJCQUFDLGFBQWE7NENBckRFLFNBQVM7c0JBQWpDLFNBQVM7dUJBQUMsWUFBWTtnQkFJdkIsUUFBUTtzQkFEUCxLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBS04sU0FBUztzQkFEUixLQUFLO2dCQUlOLEtBQUs7c0JBREosS0FBSztnQkFHTixhQUFhO3NCQURaLEtBQUs7Z0JBR04sUUFBUTtzQkFEUCxLQUFLO2dCQUdOLE9BQU87c0JBRE4sS0FBSztnQkFHTixVQUFVO3NCQURULEtBQUs7Z0JBR04sT0FBTztzQkFETixLQUFLO2dCQUdOLGNBQWM7c0JBRGIsS0FBSztnQkFHRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0ksbUJBQW1CO3NCQUE1QixNQUFNO2dCQUVFLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0ksaUJBQWlCO3NCQUExQixNQUFNO2dCQUVQLE1BQU07c0JBREwsTUFBTTtnQkFFRyxjQUFjO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IFdlYlZpZXdlciwgeyBDb3JlQ29udHJvbHMgfSBmcm9tICdAcGRmdHJvbi93ZWJ2aWV3ZXInO1xyXG5pbXBvcnQgeyBOdXhlb1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9Db3JlL3NlcnZpY2VzL251eGVvL251eGVvLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQZGZ0cm9uU2VydmljZSB9IGZyb20gJy4vcGRmdHJvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQVBQX0JBU0VfSFJFRiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFNlY3VyZVBpcGUgfSBmcm9tICcuLi8uLi8uLi9waXBlcy9zZWN1cmUucGlwZSc7XHJcbmltcG9ydCB7IFRocm93U3RtdCB9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyJztcclxuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vQ29yZS9zZXJ2aWNlcy90cmFuc2xhdGlvbi90cmFuc2xhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcblxyXG4vKipcclxuICogQSByZXVzYWJsZSBmaWxlIHZpZXdlciBiYXNlZCBvbiBQREZUcm9uIExpYnJhcnlcclxuICogQHRpdGxlXHJcbiAqIFBERlRyb24gVmlld2VyXHJcbiAqIEBleGFtcGxlXHJcbiAqIDxhcHAtcGRmdHJvblxyXG4gKiAgIFtmaWxlRGF0YV09XCJmaWxlRGF0YVwiXHJcbiAqICAgW2VkaXRNb2RlXT1cImZhbHNlXCJcclxuICogICBbZG9jSWRdPVwiZmlsZUlkXCJcclxuICogICBbZmlsZVRpdGxlXT1cImZpbGUudGl0bGVcIlxyXG4gKiA+XHJcbiAqIDwvYXBwLXBkZnRyb24+XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1wZGZ0cm9uJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcGRmdHJvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcGRmdHJvbi5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW1NlY3VyZVBpcGVdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGRmdHJvbkNvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XHJcbiAgQFZpZXdDaGlsZCgnZmlsZVZpZXdlcicpIHZpZXdlclJlZjogRWxlbWVudFJlZjtcclxuICB3ZWJWaWV3ZXJJbnN0YW5jZTtcclxuICAvKiogRGlzYWJsZS9FbmFibGUgQW5ub3RhdGlvbiAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgZWRpdE1vZGU6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgYWN0aW9uQ2xpY2tlZCA9IGZhbHNlOyAvLyB1c2VkIHRvIGtub3cgaWYgdGhlcmUgaXMgYWN0aW9uIGNsaWNrZWQgb3V0c2lkZSB0byBzdGFydCBlZGl0IG1vZGUgb3Igbm90XHJcbiAgaXNEb2N1bWVudExvYWRpbmc6IGJvb2xlYW47XHJcbiAgaXNGZXRjaGluZzogYm9vbGVhbjtcclxuICAvKiogRG9jdW1lbnQgdGl0bGUgKi9cclxuICBASW5wdXQoKVxyXG4gIGZpbGVUaXRsZTogc3RyaW5nO1xyXG4gIC8qKiBEb2N1bWVudCBJRCAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgZG9jSWQ6IHN0cmluZztcclxuICBASW5wdXQoKVxyXG4gIERPQ1VNRU5UX1RZUEUgPSAnYXBwbGljYXRpb24vcGRmJztcclxuICBASW5wdXQoKVxyXG4gIGZpbGVEYXRhO1xyXG4gIEBJbnB1dCgpXHJcbiAgZml0TW9kZTogJ0ZpdFdpZHRoJyB8ICdGaXRQYWdlJyB8ICdab29tJyA9ICdGaXRXaWR0aCc7XHJcbiAgQElucHV0KClcclxuICBhdXRoSGVhZGVyOiBzdHJpbmc7XHJcbiAgQElucHV0KClcclxuICBmaWxlVVJMOiBzdHJpbmc7XHJcbiAgQElucHV0KClcclxuICBjb3JyZXNwb25kYW5jZTtcclxuXHJcbiAgQElucHV0KCkgc2VjcmVjeVByb3BlcnR5OyAvLyB1c2VkIHRvIGFkZCB3YXRlcm1hcmsgYWNvcmRpbmcgY2VydGFpbiBzZWNyZWN5IGxldmVsXHJcbiAgQElucHV0KCkgZWRpdGluZ1R5cGU7XHJcbiAgQElucHV0KCkgdXNlclNpZ25hdHVyZXM7XHJcbiAgQElucHV0KCkgc2VhcmNoU3RyaW5nID0gJyc7IC8vIHN0cmluZyB0byBzZWFyY2ggZm9yIGl0IGluIHRoZSBkb2N1bWVudFxyXG5cclxuICBASW5wdXQoKSB0cmFja1NpZ25hdHVyZSA9IGZhbHNlOyAvLyB0byBlbmFibGUgdHJhY2tpbmcgc2lnbmF0dXJlIHBvc2l0aW9uIGFuZCBlbWl0IGl0IGFmdGVyIGV2ZXJ5IGNoYW5nZSBpdCBzaWduYXR1cmVcclxuICBAT3V0cHV0KCkgb25TaWduYXR1cmVUcmFja2luZyA9IG5ldyBFdmVudEVtaXR0ZXIoKTsgLy8gZXZlbnQgdG8gZW1pdCBzaWduYXR1cmUgY2hhbmdlc1xyXG5cclxuICBASW5wdXQoKSB1c2VPdXRzaWRlQW5vdGF0aW9ucyA9IGZhbHNlOyAvLyBmbGFnZSB0byBpbmRpY2F0IGlmIHVzaW5nIG91dCBzaWRlIGFub3RhdGlvbnMgb3Igbm90XHJcbiAgQElucHV0KCkgaW1wb3J0ZWRBbm90YXRpb25zIDsgLy8gaW1wb3J0ZWQgYW5vdGF0aW9ucyBmcm9tIG91dHNpZGVcclxuICBAT3V0cHV0KCkgb25BZGRpbmdBbm90YXRpb24gPSBuZXcgRXZlbnRFbWl0dGVyKCk7IC8vIHVzZWQgdG8gZXhwb3J0IGFsbCBhbm90YXRpb25zIHRvIG91dHNpZGVcclxuICBAT3V0cHV0KClcclxuICBldmVudHMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIFNpZ25hdHVyZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpOyAvLyB1c2VkIHRvIGV4cG9ydCBzaWduYXR1cmUgdG8gb3V0c2lkZVxyXG4gIGZpcnN0VGltZUxvYWQgPSB0cnVlOyAvL2ZsYWdlIHRvIGNvbnRyb2wgaW1wb3J0aW5nIHNpZ25hdHVyZXMgaW4gdGhlIGZpcnN0IHRpbWUgbG9hZCBvbmx5XHJcbiAgZmlyc3RTaWduYXR1cmVMb2FkID0gdHJ1ZTsgLy8gZmxhZ2UgdG8gcGFzcyBmaXJzdCBsb2FkIG9mIGltcG9ydGVkIHNpZ25hdHVyZXMgd2l0aG91dCBlbWl0dGluZyB0aGUgZXZlbnQgXHJcbiAgbmV3U2lnbkNyZWF0aW9uID0gZmFsc2U7IC8vIGZsYWdlIHRvIGluZGljYXRlIHNpZ25hdHVyZSBjcmVhdGlvbiBpcyBjcmVhdGVkIG9yIGNob29zZWQgZnJvbSBzdG9yZWQgb25lc1xyXG4gIHRyYW5zZWxhdGlvblN1YnNjcml0aW9uIDogU3Vic2NyaXB0aW9uO1xyXG4gIGlzQXJhYmljO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIHBkZnRyb25TZXJ2aWNlOiBQZGZ0cm9uU2VydmljZSxcclxuICAgIHByaXZhdGUgbnV4ZW86IE51eGVvU2VydmljZSxcclxuICAgIEBJbmplY3QoQVBQX0JBU0VfSFJFRikgcHJpdmF0ZSBiYXNlSHJlZjogc3RyaW5nLFxyXG4gICAgcHJpdmF0ZSBzZWN1cmVQaXBlOiBTZWN1cmVQaXBlLFxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGlvblNlcnZpY2UgOiBUcmFuc2xhdGlvblNlcnZpY2UsXHJcbiAgICBASW5qZWN0KCdlbnZpcm9ubWVudCcpIHByaXZhdGUgZW52aXJvbm1lbnRcclxuICApIHsgfVxyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMudHJhbnNlbGF0aW9uU3Vic2NyaXRpb24gPSB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5pc0FyYWJpYy5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy5pc0FyYWJpYyA9IHJlcyA7XHJcbiAgICB9KVxyXG4gICB9XHJcblxyXG4gIGFzeW5jIG5nQWZ0ZXJWaWV3SW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMucmVjaXZlZFNlYXJjaFN0cmluZ3NBcnJheSA9IHRoaXMuc2VhcmNoU3RyaW5nLnRyaW0oKSA/IHRoaXMuc2VhcmNoU3RyaW5nLnNwbGl0KCcsJykgOiBbXTtcclxuXHJcbiAgICBpZiAodGhpcy5maWxlVGl0bGUuZW5kc1dpdGgoJy5wcHQnKSkge1xyXG4gICAgICB0aGlzLkRPQ1VNRU5UX1RZUEUgPSAnYXBwbGljYXRpb24vdm5kLm1zLXBvd2VycG9pbnQnO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmZpbGVUaXRsZS5lbmRzV2l0aCgnLnBwdHgnKSkge1xyXG4gICAgICB0aGlzLkRPQ1VNRU5UX1RZUEUgPVxyXG4gICAgICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwucHJlc2VudGF0aW9uJztcclxuICAgIH0gZWxzZSBpZiAodGhpcy5maWxlVGl0bGUuZW5kc1dpdGgoJy5kb2MnKSkge1xyXG4gICAgICB0aGlzLkRPQ1VNRU5UX1RZUEUgPSAnYXBwbGljYXRpb24vbXN3b3JkJztcclxuICAgIH0gZWxzZSBpZiAodGhpcy5maWxlVGl0bGUuZW5kc1dpdGgoJy5kb2N4JykpIHtcclxuICAgICAgdGhpcy5ET0NVTUVOVF9UWVBFID1cclxuICAgICAgICAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnO1xyXG4gICAgfVxyXG4gICAgV2ViVmlld2VyKFxyXG4gICAgICB7XHJcbiAgICAgICAgcGF0aDogdGhpcy5iYXNlSHJlZiArICcvYXNzZXRzL3BkZnRyb25zJyxcclxuICAgICAgICBmb3JjZUNsaWVudFNpZGVJbml0OiB0cnVlLFxyXG4gICAgICAgIHN0cmVhbWluZzogdHJ1ZSxcclxuICAgICAgICBsaWNlbnNlS2V5OiB0aGlzLmVudmlyb25tZW50LnBkZnRyb25MaWNlbmNlS2V5LFxyXG4gICAgICAgIGNzczogdGhpcy5pc0FyYWJpYyA/ICh0aGlzLmJhc2VIcmVmICsgJy9hc3NldHMvc3R5bGVzL2FyLW15cGRmdHJvbi5jc3MnKSA6ICh0aGlzLmJhc2VIcmVmICsgJy9hc3NldHMvc3R5bGVzL2VuLW15cGRmdHJvbi5jc3MnKSxcclxuICAgICAgICBhbm5vdGF0aW9uVXNlcjogdGhpcy5udXhlby5udXhlb0NsaWVudC51c2VyLnByb3BlcnRpZXMuZmlyc3ROYW1lICsgJyAnICsgdGhpcy5udXhlby5udXhlb0NsaWVudC51c2VyLnByb3BlcnRpZXMubGFzdE5hbWUsXHJcbiAgICAgICAgZGlzYWJsZWRFbGVtZW50czogWydkb3dubG9hZEJ1dHRvbicsICdwcmludEJ1dHRvbiddLFxyXG5cclxuICAgICAgfSxcclxuICAgICAgdGhpcy52aWV3ZXJSZWYubmF0aXZlRWxlbWVudFxyXG4gICAgKS50aGVuKGFzeW5jIChpbnN0YW5jZSkgPT4ge1xyXG4gICAgICB0aGlzLmlzQXJhYmljID8gaW5zdGFuY2Uuc2V0TGFuZ3VhZ2UoJ2FyJykgOiBpbnN0YW5jZS5zZXRMYW5ndWFnZSgnZW4nKSA7XHJcbiAgICAgIHRoaXMucGRmdHJvblNlcnZpY2UuaW5zdGFuY2UgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlID0gaW5zdGFuY2U7XHJcbiAgICAgIGlmKHRoaXMuY29ycmVzcG9uZGFuY2UuZmFjZXRzLmluZGV4T2YoJ2N0b2NyJykgPiAtMSl7XHJcbiAgICAgICAgdGhpcy5maWxlV2l0aE9jciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wYWdlcyA9IEpTT04ucGFyc2UodGhpcy5jb3JyZXNwb25kYW5jZS5wcm9wZXJ0aWVzWydjdG9jcjpyZWNvZ25pemVkSnNvbiddKTtcclxuICAgICAgICAvLyBvdmVycmlkZSBzZWFyY2ggZnVudGlvbiB0byB1c2Ugb3VyIHNlYXJjaCBpbiBvY3Igbm90IGRlZnVsdCBzZWFyY2hcclxuICAgICAgICBpbnN0YW5jZS5vdmVycmlkZVNlYXJjaEV4ZWN1dGlvbih0aGlzLnNlYXJjaEZuKTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAvLyBpZiBubyBvY3IgdGhlbiBhZGQgc2VhcmNoIGxpc25lciB0byBsaXNuZSB0byBpbnRlcm5hbCBzZWFyY2ggYW5kIGNhdGNoIHJlc3VsdHNcclxuICAgICAgICAgICAgdGhpcy5hZGRTZWFyY2hMaXN0bmVyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB0aGlzLmFkZFByaW50QnV0dG9uKCk7XHJcbiAgICAgIHRoaXMuYWRkRG93bmxvYWRCdXR0b24oKTtcclxuICAgICAgdGhpcy5pbXBvcnRTaWduYXR1cmUoKTtcclxuICAgICAgdGhpcy5leHBvcnRpbmdTaWduYXR1cmUoKTtcclxuICAgICAgdGhpcy5kZWxldGVBbm5vdGF0aW9uKCk7XHJcbiAgICAgIHRoaXMuZXhwb3J0aW5nU2F2ZWRTaWduYXR1cmUoKTtcclxuICAgICAgaWYodGhpcy51c2VPdXRzaWRlQW5vdGF0aW9ucyl7XHJcbiAgICAgICAgdGhpcy5pbXBvcnRBbm90YXRpb25zRnJvbU91dHNpZGUoKTtcclxuICAgICAgICB0aGlzLmV4cG9ydEFub3RhdGlvbnNUb091dHNpZGUoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlci5zZXRTZWFyY2hIaWdobGlnaHRDb2xvcnMoe1xyXG4gICAgICAgIC8vIHNldFNlYXJjaEhpZ2hsaWdodENvbG9ycyBhY2NlcHRzIGJvdGggQW5ub3RhdGlvbnMuQ29sb3Igb2JqZWN0cyBvciAncmdiYScgc3RyaW5nc1xyXG4gICAgICAgIHNlYXJjaFJlc3VsdDogbmV3IHRoaXMud2ViVmlld2VySW5zdGFuY2UuQW5ub3RhdGlvbnMuQ29sb3IoMjUwLDIwNiwwLDAuNTAxOTYpLFxyXG4gICAgICAgIGFjdGl2ZVNlYXJjaFJlc3VsdDogbmV3IHRoaXMud2ViVmlld2VySW5zdGFuY2UuQW5ub3RhdGlvbnMuQ29sb3IoMjUwLDIwNiwwLDAuNTAxOTYpLFxyXG4gICAgICB9KTtcclxuICAgICAgaWYodGhpcy5yZWNpdmVkU2VhcmNoU3RyaW5nc0FycmF5Lmxlbmd0aCAhPT0gMCl7XHJcbiAgICAgICAgdGhpcy5hdXRvbWF0aWNTZWFyY2godGhpcy5yZWNpdmVkU2VhcmNoU3RyaW5nc0FycmF5KTtcclxuICAgIH1cclxuICAgICAgdGhpcy5sb2FkRG9jdW1lbnQoKTtcclxuXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGltcG9ydEFub3RhdGlvbnNGcm9tT3V0c2lkZSgpe1xyXG4gICAgY29uc3QgZG9jdW1lbnRWaWV3ZXIgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlcjtcclxuXHJcbiAgICBkb2N1bWVudFZpZXdlci5vbignZG9jdW1lbnRMb2FkZWQnLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLmltcG9ydEFubm90YXRpb25zKHRoaXMuaW1wb3J0ZWRBbm90YXRpb25zKVxyXG4gICAgfSlcclxuICAgIC8vIC50aGVuKGFubm90YXRpb25zID0+IHtcclxuICAgIC8vICAgYW5ub3RhdGlvbnMuZm9yRWFjaChhbm5vdGF0aW9uID0+IHtcclxuICAgIC8vICAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmFubm90TWFuYWdlci5yZWRyYXdBbm5vdGF0aW9uKGFubm90YXRpb24pO1xyXG4gICAgLy8gICB9KTtcclxuICAgIC8vIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gZXhjdHJhY3QgYWxsIGFub3RhdGlvbnMgb24gdGhlIGZpbGUgYW5kIHNlbmQgaXQgb3V0IHNpZGUgdG8gYmUgc2F2ZWQgYW5kIGxlYXZlIHRoZSBmaWxlIGFzIGl0IGlzIHdpdGhvdXQgYW55IGFub3RhdGlvbnMgb24gaXRcclxuICBleHBvcnRBbm90YXRpb25zVG9PdXRzaWRlKCl7XHJcbiAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmFubm90TWFuYWdlci5vbignYW5ub3RhdGlvbkNoYW5nZWQnLCAoYW5ub3RhdGlvbnMsIGFjdGlvbiwgeyBpbXBvcnRlZCB9KSA9PiB7XHJcbiAgICAgIGlmIChpbXBvcnRlZCkgcmV0dXJuO1xyXG4gICAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmFubm90TWFuYWdlci5leHBvcnRBbm5vdGF0aW9ucygpLnRoZW4oZXhjdHJhY3RlZEFub3RhdGlvbnMgPT4ge1xyXG4gICAgICAgIHRoaXMub25BZGRpbmdBbm90YXRpb24uZW1pdChleGN0cmFjdGVkQW5vdGF0aW9ucyk7XHJcbiAgICAgIH0pO1xyXG4gICAgICAvLyBpZiB0cmFja2luZyBzaWduYXR1cmUgbG9jYXRpb24gaXMgZW5hYmxlIHRoZW4gZW1pdCBzaWduYXR1cmUgb3V0c2lkZSB3aXRoIGV2ZXJ5IGNoYW5nZXMgaW4gaXRcclxuICAgICAgaWYodGhpcy50cmFja1NpZ25hdHVyZSl7XHJcbiAgICAgICAgdGhpcy5vblNpZ25hdHVyZVRyYWNraW5nLmVtaXQoe2Fub3RhdGlvbnMgOiBhbm5vdGF0aW9ucyAsIGFjdGlvbiA6IGFjdGlvbn0pXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaW1wb3J0U2lnbmF0dXJlKCkge1xyXG4gICAgY29uc3QgZG9jdW1lbnRWaWV3ZXIgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlcjtcclxuICAgIGNvbnN0IHNpZ25hdHVyZVRvb2wgPSBkb2N1bWVudFZpZXdlci5nZXRUb29sKCdBbm5vdGF0aW9uQ3JlYXRlU2lnbmF0dXJlJyk7XHJcblxyXG4gICAgZG9jdW1lbnRWaWV3ZXIub24oJ2RvY3VtZW50TG9hZGVkJywgKCkgPT4ge1xyXG4gICAgICBpZih0aGlzLmZpcnN0VGltZUxvYWQpe1xyXG4gICAgICAgIHNpZ25hdHVyZVRvb2wuaW1wb3J0U2lnbmF0dXJlcyhbLi4udGhpcy51c2VyU2lnbmF0dXJlc10pO1xyXG4gICAgICAgIHRoaXMuZmlyc3RUaW1lTG9hZCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBcclxuICBleHBvcnRpbmdTYXZlZFNpZ25hdHVyZSgpIHtcclxuICAgIGNvbnN0IGRvY3VtZW50Vmlld2VyID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXI7XHJcbiAgICBjb25zdCBTaWduYXR1cmVDcmVhdGVUb29sID0gZG9jdW1lbnRWaWV3ZXIuZ2V0VG9vbCgnQW5ub3RhdGlvbkNyZWF0ZVNpZ25hdHVyZScpXHJcbiAgICBTaWduYXR1cmVDcmVhdGVUb29sLm9uKCdzaWduYXR1cmVTYXZlZCcsIChhbm5vdGF0aW9uKSA9PiB7XHJcbiAgICAgIGlmKCF0aGlzLmZpcnN0U2lnbmF0dXJlTG9hZCl7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3NpZ25hdHVyZSBzYXZlZCB0cmlnZXJlZCcpO1xyXG4gICAgICAgIHRoaXMubmV3U2lnbkNyZWF0aW9uID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZpcnN0U2lnbmF0dXJlTG9hZCA9IGZhbHNlO1xyXG4gICAgfSk7O1xyXG4gIH1cclxuICBcclxuICBleHBvcnRpbmdTaWduYXR1cmUoKSB7XHJcbiAgICBjb25zdCBkb2N1bWVudFZpZXdlciA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyO1xyXG4gICAgY29uc3QgU2lnbmF0dXJlQ3JlYXRlVG9vbCA9IGRvY3VtZW50Vmlld2VyLmdldFRvb2woJ0Fubm90YXRpb25DcmVhdGVTaWduYXR1cmUnKVxyXG4gICAgU2lnbmF0dXJlQ3JlYXRlVG9vbC5vbignYW5ub3RhdGlvbkFkZGVkJywgKGFubm90YXRpb24pID0+IHtcclxuICAgICAgaWYgKGFubm90YXRpb24gJiYgdGhpcy5uZXdTaWduQ3JlYXRpb24pIHtcclxuICAgICAgICB0aGlzLm5ld1NpZ25DcmVhdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZXh0cmFjdEFub3RhdGlvbihhbm5vdGF0aW9uICwgZG9jdW1lbnRWaWV3ZXIpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGFubm90YXRpb24pXHJcbiAgICAgIH1cclxuICAgIH0pOztcclxuICB9XHJcblxyXG4gIGV4dHJhY3RBbm90YXRpb24oYW5ub3RhdGlvbiAsIGRvY3VtZW50Vmlld2VyKXtcclxuICAgIGlmKGFubm90YXRpb25bJ2ltYWdlJ10pe1xyXG4gICAgICAvLyBjb252ZXJ0IGJhc2U2NCBzaWduYXR1cmUgaW50byBmaWxlIGFuZCBlbWl0IGl0IHRvIG91dCBzaWRlIFxyXG4gICAgICBsZXQgYmFzZTY0SW1nID0gYW5ub3RhdGlvblsnaW1hZ2UnXVsnY3VycmVudFNyYyddO1xyXG4gICAgICB2YXIgYXJyID0gYmFzZTY0SW1nLnNwbGl0KCcsJyksXHJcbiAgICAgIG1pbWUgPSBhcnJbMF0ubWF0Y2goLzooLio/KTsvKVsxXSxcclxuICAgICAgYnN0ciA9IGF0b2IoYXJyWzFdKSwgXHJcbiAgICAgIG4gPSBic3RyLmxlbmd0aCwgXHJcbiAgICAgIHU4YXJyID0gbmV3IFVpbnQ4QXJyYXkobik7XHJcbiAgICAgIHdoaWxlKG4tLSl7XHJcbiAgICAgICAgICB1OGFycltuXSA9IGJzdHIuY2hhckNvZGVBdChuKTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgbmFtZSA9IG1pbWUucmVwbGFjZSgnLycgLCAnLicpXHJcbiAgICAgIGxldCBteUZpbGUgPSBuZXcgRmlsZShbdThhcnJdLCAnbXlTaWduYXR1cmUucG5nJywge3R5cGU6bWltZX0pO1xyXG4gICAgICB0aGlzLlNpZ25hdHVyZUV2ZW50LmVtaXQoeyBkYXRhOiBteUZpbGUsIGV2ZW50TmFtZTogJ2V4cG9ydCcgfSk7XHJcblxyXG4gICAgfWVsc2V7XHJcbiAgICAgIHRoaXMuZXh0cmFjdEFubm90YXRpb25TaWduYXR1cmUoYW5ub3RhdGlvbiAsIGRvY3VtZW50Vmlld2VyKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZXh0cmFjdEFubm90YXRpb25TaWduYXR1cmUoYW5ub3RhdGlvbiwgZG9jVmlld2VyKSB7XHJcbiAgICAvLyBDcmVhdGUgYSBuZXcgQ2FudmFzIHRvIGRyYXcgdGhlIEFubm90YXRpb24gb25cclxuICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgLy8gUmVmZXJlbmNlIHRoZSBhbm5vdGF0aW9uIGZyb20gdGhlIERvY3VtZW50XHJcbiAgICBjb25zdCBwYWdlTWF0cml4ID0gZG9jVmlld2VyLmdldERvY3VtZW50KCkuZ2V0UGFnZU1hdHJpeChhbm5vdGF0aW9uLlBhZ2VOdW1iZXIpO1xyXG4gICAgLy8gU2V0IHRoZSBoZWlnaHQgJiB3aWR0aCBvZiB0aGUgY2FudmFzIHRvIG1hdGNoIHRoZSBhbm5vdGF0aW9uXHJcbiAgICBjYW52YXMuaGVpZ2h0ID0gYW5ub3RhdGlvbi5IZWlnaHQ7XHJcbiAgICBjYW52YXMud2lkdGggPSBhbm5vdGF0aW9uLldpZHRoO1xyXG4gICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAvLyBUcmFuc2xhdGUgdGhlIEFubm90YXRpb24gdG8gdGhlIHRvcCBUb3AgTGVmdCBDb3JuZXIgb2YgdGhlIENhbnZhcyBpZSAoMCwgMClcclxuICAgIGN0eC50cmFuc2xhdGUoLWFubm90YXRpb24uWCwgLWFubm90YXRpb24uWSk7XHJcbiAgICAvLyBEcmF3IHRoZSBBbm5vdGF0aW9uIG9udG8gdGhlIENhbnZhc1xyXG4gICAgYW5ub3RhdGlvbi5kcmF3KGN0eCwgcGFnZU1hdHJpeCk7XHJcbiAgICAvLyBDb252ZXJ0IHRoZSBDYW52YXMgdG8gYSBCbG9iIE9iamVjdCBmb3IgVXBsb2FkXHJcbiAgICBjYW52YXMudG9CbG9iKChibG9iKSA9PiB7XHJcbiAgICAgIC8vIENhbGwgeW91ciBCbG9iIFN0b3JhZ2UgVXBsb2FkIEZ1bmN0aW9uXHJcbiAgICAgIGxldCBuYW1lID0gYmxvYi50eXBlLnJlcGxhY2UoJy8nICwgJy4nKVxyXG4gICAgICBsZXQgbXlGaWxlID0gbmV3IEZpbGUoW2Jsb2JdLCBuYW1lKTtcclxuICAgICAgdGhpcy5TaWduYXR1cmVFdmVudC5lbWl0KHsgZGF0YTogbXlGaWxlLCBldmVudE5hbWU6ICdleHBvcnQnIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVBbm5vdGF0aW9uKCkge1xyXG4gICAgY29uc3QgZG9jdW1lbnRWaWV3ZXIgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlcjtcclxuICAgIGNvbnN0IFNpZ25hdHVyZUNyZWF0ZVRvb2wgPSBkb2N1bWVudFZpZXdlci5nZXRUb29sKCdBbm5vdGF0aW9uQ3JlYXRlU2lnbmF0dXJlJyk7XHJcbiAgICBTaWduYXR1cmVDcmVhdGVUb29sLm9uKCdzaWduYXR1cmVEZWxldGVkJywgKGFubm90YXRpb24sIGluZGV4KSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCd0aGVyZSB3ZXJlIGFubm90YXRpb25zIGRlbGV0ZWQnKTtcclxuICAgICAgdGhpcy51c2VyU2lnbmF0dXJlcy5zcGxpY2UoaW5kZXggLCAxKTtcclxuICAgICAgdGhpcy5TaWduYXR1cmVFdmVudC5lbWl0KHsgZGF0YTogeyBzaWduYXR1cmU6IGFubm90YXRpb24sIGluZGV4OiBpbmRleCB9LCBldmVudE5hbWU6ICdkZWxldGUnIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhZGREb3dubG9hZEJ1dHRvbigpIHtcclxuICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2Uuc2V0SGVhZGVySXRlbXMoKGhlYWRlcikgPT4ge1xyXG4gICAgICBoZWFkZXIucHVzaCh7XHJcbiAgICAgICAgdHlwZTogJ2FjdGlvbkJ1dHRvbicsXHJcbiAgICAgICAgaW1nOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIGNsYXNzPVwiYmkgYmktZmlsZS1lYXJtYXJrLWFycm93LWRvd25cIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+IDxwYXRoIGQ9XCJNOC41IDYuNWEuNS41IDAgMCAwLTEgMHYzLjc5M0w2LjM1NCA5LjE0NmEuNS41IDAgMSAwLS43MDguNzA4bDIgMmEuNS41IDAgMCAwIC43MDggMGwyLTJhLjUuNSAwIDAgMC0uNzA4LS43MDhMOC41IDEwLjI5M1Y2LjV6XCIvPiA8cGF0aCBkPVwiTTE0IDE0VjQuNUw5LjUgMEg0YTIgMiAwIDAgMC0yIDJ2MTJhMiAyIDAgMCAwIDIgMmg4YTIgMiAwIDAgMCAyLTJ6TTkuNSAzQTEuNSAxLjUgMCAwIDAgMTEgNC41aDJWMTRhMSAxIDAgMCAxLTEgMUg0YTEgMSAwIDAgMS0xLTFWMmExIDEgMCAwIDEgMS0xaDUuNXYyelwiLz48L3N2Zz4nLFxyXG4gICAgICAgIHRpdGxlOiB0aGlzLmlzQXJhYmljID8gJ9iq2YbYstmK2YQnIDogJ0Rvd25sb2FkJyxcclxuICAgICAgICBvbkNsaWNrOiBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCB7IERvY3VtZW50Vmlld2VyLCBBbm5vdGF0aW9uTWFuYWdlciwgU2F2ZU9wdGlvbnMgfSA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuQ29yZUNvbnRyb2xzO1xyXG4gICAgICAgICAgLy8gY29uc3QgeGZkZlN0cmluZyA9IGF3YWl0IEFubm90YXRpb25NYW5hZ2VyLmV4cG9ydEFubm90YXRpb25zKCk7XHJcbiAgICAgICAgICBjb25zdCBzYXZlT3B0aW9ucyA9IFNhdmVPcHRpb25zO1xyXG4gICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgZmlsZW5hbWU6IHRoaXMuY29ycmVzcG9uZGFuY2UudGl0bGUgPyB0aGlzLmNvcnJlc3BvbmRhbmNlLnRpdGxlIDogJ215RG9jdW1lbnQucGRmJyxcclxuICAgICAgICAgICAgLy8geGZkZlN0cmluZyxcclxuICAgICAgICAgICAgZmxhZ3M6IHNhdmVPcHRpb25zLkxJTkVBUklaRUQsXHJcbiAgICAgICAgICAgIGRvd25sb2FkVHlwZTogJ3BkZidcclxuICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgdGhpcy5wZGZ0cm9uU2VydmljZS5pbnN0YW5jZS5kb3dubG9hZFBkZihvcHRpb25zKTtcclxuICAgICAgICAgIHRoaXMuZXZlbnRzLm5leHQoJ2Rvd25sb2FkJyk7XHJcbiAgICAgICAgICAvLyBsZXQgdXJsID0gdGhpcy5jb3JyZXNwb25kYW5jZS5wcm9wZXJ0aWVzLmNvbnRlbnQuZGF0YTtcclxuICAgICAgICAgIC8vIGxldCBmaWxlTmFtZSA9IHRoaXMuY29ycmVzcG9uZGFuY2UucHJvcGVydGllcy5jb250ZW50Lm5hbWU7XHJcbiAgICAgICAgICAvLyBpZiAodXJsICYmIGZpbGVOYW1lKSB7XHJcbiAgICAgICAgICAvLyAgIGxldCBzYWZlVXJsID0gdGhpcy5zZWN1cmVQaXBlLnRyYW5zZm9ybSh1cmwpO1xyXG4gICAgICAgICAgLy8gICBzYWZlVXJsLnN1YnNjcmliZSgodXJsOiBhbnkpID0+IHtcclxuICAgICAgICAgIC8vICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgICAgLy8gICAgIGxpbmsuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgIC8vICAgICBsaW5rLmhyZWYgPSB1cmwuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eTtcclxuICAgICAgICAgIC8vICAgICBsaW5rLmRvd25sb2FkID0gZmlsZU5hbWU7XHJcbiAgICAgICAgICAvLyAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcclxuICAgICAgICAgIC8vICAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICAgICAgICAvLyAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcclxuICAgICAgICAgIC8vICAgICB0aGlzLmV2ZW50cy5uZXh0KCdkb3dubG9hZCcpO1xyXG4gICAgICAgICAgLy8gICB9KTtcclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYWRkUHJpbnRCdXR0b24oKSB7XHJcbiAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLnNldEhlYWRlckl0ZW1zKChoZWFkZXIpID0+IHtcclxuICAgICAgaGVhZGVyLnB1c2goe1xyXG4gICAgICAgIHR5cGU6ICdhY3Rpb25CdXR0b24nLFxyXG4gICAgICAgIGltZzogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6I2FiYjBjNDt9PC9zdHlsZT48L2RlZnM+PHRpdGxlPmljb24gLSBoZWFkZXIgLSBwcmludCAtIGxpbmU8L3RpdGxlPjxwYXRoIGNsYXNzPVwiY2xzLTFcIiBkPVwiTTIwLDZIMThWMkg2VjZINEEyLDIsMCwwLDAsMiw4djlhMiwyLDAsMCwwLDIsMkg2djNIMThWMTloMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDIwLDZaTTgsNGg4VjZIOFptOCwxNkg4VjE2aDhabTQtM0gxOFYxNEg2djNINFY4SDIwWm0tNC03aDJ2MkgxNlptLTMsMGgydjJIMTNaXCI+PC9wYXRoPjwvc3ZnPicsXHJcbiAgICAgICAgdGl0bGU6IHRoaXMuaXNBcmFiaWMgPyBcIti32KjYp9i52KlcIiA6ICdQcmludCcsXHJcbiAgICAgICAgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wZGZ0cm9uU2VydmljZS5pbnN0YW5jZS5wcmludCgpO1xyXG4gICAgICAgICAgdGhpcy5ldmVudHMubmV4dCgncHJpbnQnKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYWRkV2F0ZXJtYXJrKCkge1xyXG4gICAgY29uc3QgdXNlcmluZm8gPSB0aGlzLm51eGVvLm51eGVvQ2xpZW50LnVzZXIucHJvcGVydGllcztcclxuICAgIHRoaXMucGRmdHJvblNlcnZpY2UuYWRkV2F0ZXJtYXJrKFxyXG4gICAgICBgJHt1c2VyaW5mby51c2VybmFtZX0gICAgYFxyXG4gICAgICAvLyBgJHt1c2VyaW5mby5maXJzdE5hbWV9ICR7XHJcbiAgICAgIC8vICAgdXNlcmluZm8ubGFzdE5hbWVcclxuICAgICAgLy8gfSBgXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbG9hZERvY3VtZW50KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLndlYlZpZXdlckluc3RhbmNlIHx8ICghdGhpcy5maWxlRGF0YSAmJiAhdGhpcy5maWxlVVJMKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCB7IGRvY1ZpZXdlciwgYW5ub3RNYW5hZ2VyLCBBbm5vdGF0aW9ucyB9ID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZTtcclxuICAgIGRvY1ZpZXdlci5vbignZG9jdW1lbnRMb2FkZWQnLCAoKSA9PiB7XHJcbiAgICAgIGxldCBmaXRNb2RlID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5GaXRNb2RlLkZpdFdpZHRoO1xyXG4gICAgICBpZiAodGhpcy5maXRNb2RlID09PSAnRml0UGFnZScpIHtcclxuICAgICAgICBmaXRNb2RlID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5GaXRNb2RlLkZpdFBhZ2U7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5maXRNb2RlID09PSAnWm9vbScpIHtcclxuICAgICAgICBmaXRNb2RlID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5GaXRNb2RlLlpvb207XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5zZXRGaXRNb2RlKGZpdE1vZGUpO1xyXG4gICAgfSk7XHJcbiAgICBpZiAoIXRoaXMuZWRpdE1vZGUpIHtcclxuICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5hbm5vdE1hbmFnZXIuc2V0UmVhZE9ubHkodHJ1ZSk7XHJcbiAgICAgIC8vIGluc3RhbmNlLmVuYWJsZVRvb2xzKFtdKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmZpbGVVUkwgJiYgdGhpcy5maWxlVVJMLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmxvYWREb2N1bWVudCh0aGlzLmZpbGVVUkwsIHtcclxuICAgICAgICB4b2RzdHJlYW1pbmc6dHJ1ZSxcclxuICAgICAgICBjdXN0b21IZWFkZXJzOiB7XHJcbiAgICAgICAgICBBdXRob3JpemF0aW9uOiB0aGlzLmF1dGhIZWFkZXIsXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5sb2FkRG9jdW1lbnQoXHJcbiAgICAgICAgbmV3IEJsb2IoW25ldyBVaW50OEFycmF5KHRoaXMuZmlsZURhdGEpXSwgeyB0eXBlOiB0aGlzLkRPQ1VNRU5UX1RZUEUgfSksXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZmlsZW5hbWU6IHRoaXMuZmlsZVRpdGxlLFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzRmV0Y2hpbmcgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLmNvcnJlc3BvbmRhbmNlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgLy8gaWYgd2UgbmVlZCB0byBjaGVjayBvbiBzZWNyZWN5IGxldmVsIGZvciBhZGRpbmcgd2F0ZXIgbWFyayBvciBub3QgXHJcbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LmVuYWJsZVZpZXdlcldhdGVyTWFyayAmJiB0aGlzLnNlY3JlY3lQcm9wZXJ0eSkge1xyXG4gICAgICAgIC8vIGNoZWNrIGZvciBzZWNyZWN5IGxldmVsIGJlZm9yIGFkZGluZyB3YXRlcm1hcmtcclxuICAgICAgICBpZiAodGhpcy5jb3JyZXNwb25kYW5jZS5wcm9wZXJ0aWVzW3RoaXMuc2VjcmVjeVByb3BlcnR5XSAmJiB0aGlzLmNvcnJlc3BvbmRhbmNlLnByb3BlcnRpZXNbdGhpcy5zZWNyZWN5UHJvcGVydHldICE9PSAnTm9ybWFsJykge1xyXG4gICAgICAgICAgdGhpcy5hZGRXYXRlcm1hcmsoKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLmVudmlyb25tZW50LmVuYWJsZVZpZXdlcldhdGVyTWFyayAmJiAhdGhpcy5zZWNyZWN5UHJvcGVydHkpIHtcclxuICAgICAgICB0aGlzLmFkZFdhdGVybWFyaygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBleHBvcnRBc0Jsb2IoKTogUHJvbWlzZTxCbG9iPiB7XHJcbiAgICBjb25zdCBkb2MgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlci5nZXREb2N1bWVudCgpO1xyXG4gICAgY29uc3QgeGZkZlN0cmluZyA9XHJcbiAgICAgIGF3YWl0IHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLmV4cG9ydEFubm90YXRpb25zKCk7XHJcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgZG9jLmdldEZpbGVEYXRhKHtcclxuICAgICAgLy8gc2F2ZXMgdGhlIGRvY3VtZW50IHdpdGggYW5ub3RhdGlvbnMgaW4gaXRcclxuICAgICAgeGZkZlN0cmluZyxcclxuICAgIH0pO1xyXG4gICAgY29uc3QgYXJyID0gbmV3IFVpbnQ4QXJyYXkoZGF0YSk7XHJcbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2Fycl0sIHsgdHlwZTogdGhpcy5ET0NVTUVOVF9UWVBFIH0pO1xyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShibG9iKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZUVkaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYWN0aW9uQ2xpY2tlZCkge1xyXG4gICAgICAvLyBhY3Rpb24gY2xpY2tlZCBpcyBub3QgY2xpY2tlZCB0aGVuIG5vIHVwZGF0ZSBtb2RlIG9wZW5lZFxyXG4gICAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRpc2FibGVFbGVtZW50cyhbXHJcbiAgICAgICAgJ3Rvb2xiYXJHcm91cC1TaGFwZXMnLFxyXG4gICAgICAgICd0b29sYmFyR3JvdXAtRWRpdCcsXHJcbiAgICAgICAgJ3Rvb2xiYXJHcm91cC1JbnNlcnQnLFxyXG4gICAgICAgICd0b29sYmFyR3JvdXAtQW5ub3RhdGUnLFxyXG4gICAgICBdKTtcclxuICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5hbm5vdE1hbmFnZXIuc2V0UmVhZE9ubHkodHJ1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBlZGl0IG1vZGUgb3BlbmVkIGFuZCBtdXN0IGJlIHdoZW4gYWN0aW9uIGlzIGNsaWNrZWRcclxuICAgICAgaWYgKHRoaXMuZWRpdGluZ1R5cGUpIHtcclxuICAgICAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRpc2FibGVFbGVtZW50cyhbXHJcbiAgICAgICAgICAndG9vbGJhckdyb3VwLVNoYXBlcycsXHJcbiAgICAgICAgICAndG9vbGJhckdyb3VwLUVkaXQnLFxyXG4gICAgICAgICAgJ3Rvb2xiYXJHcm91cC1JbnNlcnQnLFxyXG4gICAgICAgICAgJ3Rvb2xiYXJHcm91cC1Bbm5vdGF0ZScsXHJcbiAgICAgICAgXSk7XHJcbiAgICAgICAgbGV0IGdyb3VwIDtcclxuICAgICAgICBpZih0aGlzLmVkaXRpbmdUeXBlID09PSAnc2lnbkRvYycpe1xyXG4gICAgICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5lbmFibGVFbGVtZW50cyhbXHJcbiAgICAgICAgICAgICd0b29sYmFyR3JvdXAtSW5zZXJ0J1xyXG4gICAgICAgICAgXSk7XHJcblxyXG4gICAgICAgIH1lbHNlIGlmKHRoaXMuZWRpdGluZ1R5cGUgPT09ICdhbm5vdGF0ZScpe1xyXG4gICAgICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5lbmFibGVFbGVtZW50cyhbXHJcbiAgICAgICAgICAgICd0b29sYmFyR3JvdXAtU2hhcGVzJyxcclxuICAgICAgICAgICAgJ3Rvb2xiYXJHcm91cC1FZGl0JyxcclxuICAgICAgICAgICAgJ3Rvb2xiYXJHcm91cC1Bbm5vdGF0ZScsXHJcbiAgICAgICAgICBdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5lbmFibGVFbGVtZW50cyhbXHJcbiAgICAgICAgICAndG9vbGJhckdyb3VwLVNoYXBlcycsXHJcbiAgICAgICAgICAndG9vbGJhckdyb3VwLUVkaXQnLFxyXG4gICAgICAgICAgJ3Rvb2xiYXJHcm91cC1JbnNlcnQnLFxyXG4gICAgICAgICAgJ3Rvb2xiYXJHcm91cC1Bbm5vdGF0ZScsXHJcbiAgICAgICAgXSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5hbm5vdE1hbmFnZXIuc2V0UmVhZE9ubHkoZmFsc2UpO1xyXG4gICAgICAvLyB0aGlzLndlYlZpZXdlckluc3RhbmNlLnNldFRvb2xiYXJHcm91cCgndG9vbGJhckdyb3VwLUFubm90YXRlJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy53ZWJWaWV3ZXJJbnN0YW5jZSkge1xyXG4gICAgICB0aGlzLnRvZ2dsZUVkaXQoKTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGNoYW5nZXMudXJsRmlsZUNvbnRlbnQgJiZcclxuICAgICAgICBjaGFuZ2VzLnVybEZpbGVDb250ZW50LnByZXZpb3VzVmFsdWUgJiZcclxuICAgICAgICBjaGFuZ2VzLnVybEZpbGVDb250ZW50LnByZXZpb3VzVmFsdWUgIT09XHJcbiAgICAgICAgY2hhbmdlcy51cmxGaWxlQ29udGVudC5jdXJyZW50VmFsdWVcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5uZ09uRGVzdHJveSgpO1xyXG4gICAgICAgIHRoaXMubmdPbkluaXQoKTtcclxuICAgICAgICB0aGlzLm5nQWZ0ZXJWaWV3SW5pdCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBkZlRyb25FdmVudChldmVudCkge1xyXG4gICAgaWYgKHRoaXNbZXZlbnQuYWN0aW9uXSkge1xyXG4gICAgICAvLyBtZXRob2QgZXhpc3RzIGluIHRoZSBjb21wb25lbnRcclxuICAgICAgLy8gIHRoaXNbZXZlbnQuYWN0aW9uXShldmVudC5wYXJhbXMpOyAvLyBjYWxsIGl0XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHNlYXJjaCByZXN1bHRzIHNlY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgXHJcbiAgcGFnZXM6YW55O1xyXG4gIHN0YW5kYXJkSGVpZ2h0O1xyXG4gIHN0YW5kYXJkV2lkdGg7XHJcbiAgcGFnZUhlaWdodDtcclxuICBwYWdlV2lkdGg7XHJcbiAgc2F2ZWRBbm90YXRpb25zID0gW107XHJcbiAgZmlsZVdpdGhPY3IgPSBmYWxzZTtcclxuICBuZXdBbm5vdGF0aW9ucz1bXTtcclxuICBteVNlYXJjaFN0cmluZ1Jlc3VsdHMgPSBbXTtcclxuICByZWNpdmVkU2VhcmNoU3RyaW5nc0FycmF5ID0gW107XHJcblxyXG4gIC8vIGFkZGluZyBzZWFyY2ggbGlzbmVyIHRvIGxpc2VuIHRvIGludGVybmFsIHNlYXJjaCBmcm9tIHVpIGFuZCB3aXRob3V0IG9jclxyXG4gIGFkZFNlYXJjaExpc3RuZXIoKSB7XHJcbiAgICBjb25zdCB7IGFubm90TWFuYWdlciwgZG9jVmlld2VyLCBBbm5vdGF0aW9ucyB9ID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZTtcclxuICAgIGNvbnN0IHNlYXJjaExpc3RlbmVyID0gKHNlYXJjaFBhdHRlcm4sIG9wdGlvbnMsIHJlc3VsdHMpID0+IHtcclxuXHJcbiAgICAgICAgdGhpcy5teVNlYXJjaFN0cmluZ1Jlc3VsdHMgPSBbXTtcclxuICAgICAgaWYodGhpcy5zYXZlZEFub3RhdGlvbnMubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgdGhpcy5zYXZlZEFub3RhdGlvbnMubWFwKGFubm90YXRpb24gPT4ge1xyXG4gICAgICAgICAgYW5ub3RhdGlvbi5IaWRkZW4gPSB0cnVlO1xyXG4gICAgICAgIC8vIEFsd2F5cyByZWRyYXcgYW5ub3RhdGlvbiBpZiByZW5kZXJpbmcgd2FzIHVwZGF0ZWRcclxuICAgICAgICBhbm5vdE1hbmFnZXIucmVkcmF3QW5ub3RhdGlvbihhbm5vdGF0aW9uKTtcclxuICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gZG9uJ3QgZG8gYW55IHNlYXJjaCB1bnRpbCB0aGVyZSBpcyBhIHNlYXJjaCBwYXR0ZXJuXHJcbiAgICAgIGlmKHNlYXJjaFBhdHRlcm4udHJpbSgpLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAvLyBhZGQgcmVkYWN0aW9uIGFubm90YXRpb24gZm9yIGVhY2ggc2VhcmNoIHJlc3VsdFxyXG4gICAgICAgICAgICB0aGlzLm5ld0Fubm90YXRpb25zID0gcmVzdWx0cy5tYXAocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBhbm5vdGF0aW9uID0gbmV3IEFubm90YXRpb25zLlRleHRIaWdobGlnaHRBbm5vdGF0aW9uKCk7XHJcbiAgICAgICAgICAgICAgYW5ub3RhdGlvbi5RdWFkcyA9IHJlc3VsdC5xdWFkcy5tYXAocXVhZCA9PiBxdWFkLmdldFBvaW50cygpKTtcclxuICAgICAgICAgICAgICBhbm5vdGF0aW9uLlBhZ2VOdW1iZXIgPSByZXN1bHQucGFnZU51bTtcclxuICAgICAgICAgICAgICBhbm5vdGF0aW9uLlN0cm9rZUNvbG9yID0gbmV3IEFubm90YXRpb25zLkNvbG9yKDI1MCwyMDYsMCwwLjUwMTk2KTsgIFxyXG4gICAgICAgICAgICAgIGFubm90YXRpb24uQXV0aG9yID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5hbm5vdE1hbmFnZXIuZ2V0Q3VycmVudFVzZXIoKTsgICAgICBcclxuICAgICAgICAgICAgICByZXR1cm4gYW5ub3RhdGlvbjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2F2ZWRBbm90YXRpb25zLnB1c2goLi4udGhpcy5uZXdBbm5vdGF0aW9ucyk7XHJcbiAgICAgICAgICAgIGFubm90TWFuYWdlci5hZGRBbm5vdGF0aW9ucyh0aGlzLm5ld0Fubm90YXRpb25zKTtcclxuICAgICAgICAgICAgYW5ub3RNYW5hZ2VyLmRyYXdBbm5vdGF0aW9uc0Zyb21MaXN0KHRoaXMubmV3QW5ub3RhdGlvbnMpO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICBkb2NWaWV3ZXIuY2xlYXJTZWFyY2hSZXN1bHRzKCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgZG9jVmlld2VyLm9uKCdkb2N1bWVudExvYWRlZCcsICgpID0+IHtcclxuICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5hZGRTZWFyY2hMaXN0ZW5lcihzZWFyY2hMaXN0ZW5lcik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIHBlcmZvcm0gYXV0b21hdGljIHNlYXJjaCB3aGVuIGludGVyaW5nIHRoZSBwYWdlIFxyXG4gIGF1dG9tYXRpY1NlYXJjaChzZWFyY2hUZXh0QXJyYXkpe1xyXG4gICAgY29uc3QgeyBhbm5vdE1hbmFnZXIsIGRvY1ZpZXdlciwgQW5ub3RhdGlvbnMgfSA9IHRoaXMud2ViVmlld2VySW5zdGFuY2U7XHJcbiAgICBsZXQgc2VhcmNoT3B0aW9ucztcclxuICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2Uub3BlbkVsZW1lbnRzKFsnc2VhcmNoUGFuZWwnXSk7XHJcbiAgICBkb2NWaWV3ZXIub24oJ2RvY3VtZW50TG9hZGVkJywgKCkgPT4ge1xyXG4gICAgICBjb25zdCBtb2RlID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5Db3JlQ29udHJvbHMuU2VhcmNoLk1vZGUuUEFHRV9TVE9QIHwgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5Db3JlQ29udHJvbHMuU2VhcmNoLk1vZGUuSElHSExJR0hUIHwgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5Db3JlQ29udHJvbHMuU2VhcmNoLk1vZGUuQU1CSUVOVF9TVFJJTkc7XHJcbiAgICAgIHRoaXMubXlTZWFyY2hTdHJpbmdSZXN1bHRzID0gW107IC8vIGVtcHR5IG15IHNlYXJjaCByZXN1bHQgd2hlbiBzdGFydGluZyBuZXcgc2VhcmNoXHJcbiAgICAgIGlmICh0aGlzLmZpbGVXaXRoT2NyKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gYWRkIHJlZGFjdGlvbiBhbm5vdGF0aW9uIGZvciBlYWNoIHNlYXJjaCByZXN1bHRcclxuICAgICAgICAgIGNvbnN0IGFubm90YXRpb24gPSBuZXcgQW5ub3RhdGlvbnMuVGV4dEhpZ2hsaWdodEFubm90YXRpb24oKTtcclxuICAgICAgICAgIHNlYXJjaFRleHRBcnJheS5tYXAoc2VhcmNoVGV4dCA9PiB7XHJcbiAgICAgICAgICAgIGxldCBteVNlYXJjaCA9IHNlYXJjaFRleHQuc3BsaXQoJyAnKTtcclxuICAgICAgICAgICAgaWYobXlTZWFyY2gubGVuZ3RoID4gMSl7XHJcbiAgICAgICAgICAgICAgLy8gdGhlbiBpIGFtIHNlYXJjaGluZyB3aXRoIG1vcmUgdGhhbiBvbmUgd29yZFxyXG4gICAgICAgICAgICAgIHRoaXMucGFnZXMucGFnZXMuZm9yRWFjaCgocGFnZSAsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VIZWlnaHQgPSBwYWdlLnBhZ2VfaGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlV2lkdGggPSBwYWdlLnBhZ2Vfd2lkdGg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YW5kYXJkSGVpZ2h0ID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXIuZ2V0UGFnZUhlaWdodCgoaW5kZXgrMSkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFuZGFyZFdpZHRoID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXIuZ2V0UGFnZVdpZHRoKChpbmRleCsxKSk7XHJcbiAgICAgICAgICAgICAgICBwYWdlLnpvbmVzLmZvckVhY2goem9uZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHpvbmUucGFyYWdyYXBocy5mb3JFYWNoKHBhcmFncmFwaCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYWdyYXBoLmxpbmVzLmZvckVhY2gobGluZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZihsaW5lLnRleHQuaW5jbHVkZXMoc2VhcmNoVGV4dCkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlNlYXJjaEZvcldvcmRJbkxpbmUobXlTZWFyY2gsbGluZSwoaW5kZXgrMSkgLCBwYWdlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgLy8gdGhlbiBpIGFtIHNlYXJjaGluZyB3aXRoIG9ubHkgb25lIHdvcmQgXHJcbiAgICAgICAgICAgICAgdGhpcy5zZWFyY2hGb3JXb3JkSW5BbGxQYWdlcyhzZWFyY2hUZXh0KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgZG9jVmlld2VyLmNsZWFyU2VhcmNoUmVzdWx0cygpO1xyXG4gICAgICAgICAgdGhpcy5kaXNwYWxheVNlYXJjaFJlc3VsdHMoZG9jVmlld2VyKTtcclxuICAgICAgfSBlbHNle1xyXG4gICAgICAgIHNlYXJjaE9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAvLyBJZiB0cnVlLCBhIHNlYXJjaCBvZiB0aGUgZW50aXJlIGRvY3VtZW50IHdpbGwgYmUgcGVyZm9ybWVkLiBPdGhlcndpc2UsIGEgc2luZ2xlIHNlYXJjaCB3aWxsIGJlIHBlcmZvcm1lZC5cclxuICAgICAgICAgIGZ1bGxTZWFyY2g6IHRydWUsXHJcbiAgICAgICAgICAvLyBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgc2VhcmNoIHJldHVybnMgYSByZXN1bHQuXHJcbiAgICAgICAgICBvblJlc3VsdDogcmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgLy8gd2l0aCAnUEFHRV9TVE9QJyBtb2RlLCB0aGUgY2FsbGJhY2sgaXMgaW52b2tlZCBhZnRlciBlYWNoIHBhZ2UgaGFzIGJlZW4gc2VhcmNoZWQuXHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQucmVzdWx0Q29kZSA9PT0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5Db3JlQ29udHJvbHMuU2VhcmNoLlJlc3VsdENvZGUuRk9VTkQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFubm90YXRpb24gPSBuZXcgQW5ub3RhdGlvbnMuVGV4dEhpZ2hsaWdodEFubm90YXRpb24oKTtcclxuICAgICAgICAgICAgICAgIGFubm90YXRpb24uUXVhZHMgPSByZXN1bHQucXVhZHMubWFwKHF1YWQgPT4gcXVhZC5nZXRQb2ludHMoKSk7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhhbm5vdGF0aW9uLlF1YWRzKTtcclxuICAgICAgICAgICAgICAgIGFubm90YXRpb24uUGFnZU51bWJlciA9IHJlc3VsdC5wYWdlTnVtO1xyXG4gICAgICAgICAgICAgICAgYW5ub3RhdGlvbi5TdHJva2VDb2xvciA9IG5ldyBBbm5vdGF0aW9ucy5Db2xvcigyNTAsMjA2LDAsMC41MDE5Nik7ICAgXHJcbiAgICAgICAgICAgICAgICBhbm5vdGF0aW9uLkF1dGhvciA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLmdldEN1cnJlbnRVc2VyKCk7ICBcclxuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZWRBbm90YXRpb25zLnB1c2goYW5ub3RhdGlvbikgICA7XHJcbiAgICAgICAgICAgICAgICBhbm5vdE1hbmFnZXIuYWRkQW5ub3RhdGlvbnMoW2Fubm90YXRpb25dKTtcclxuICAgICAgICAgICAgICAgIGFubm90TWFuYWdlci5kcmF3QW5ub3RhdGlvbnNGcm9tTGlzdChbYW5ub3RhdGlvbl0pO1xyXG4gICAgICAgICAgICAgICAgZG9jVmlld2VyLmRpc3BsYXlBZGRpdGlvbmFsU2VhcmNoUmVzdWx0cyhbcmVzdWx0XSk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBzZWFyY2hUZXh0QXJyYXkubWFwKHNlYXJjaGVkVGV4dCA9PiB7XHJcbiAgICAgICAgICBkb2NWaWV3ZXIudGV4dFNlYXJjaEluaXQoc2VhcmNoZWRUZXh0LCBtb2RlLCBzZWFyY2hPcHRpb25zKTtcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLy8gc2VhcmNoIGZvciBzaW5nbGUgd29yZCBpbiBhbGwgcGFnZXMgXHJcbiAgc2VhcmNoRm9yV29yZEluQWxsUGFnZXMoc2VhcmNoZWRXb3JkKXtcclxuICAgIHRoaXMucGFnZXMucGFnZXMuZm9yRWFjaCgocGFnZSAsIGluZGV4KSA9PiB7XHJcbiAgICAgIHRoaXMucGFnZUhlaWdodCA9IHBhZ2UucGFnZV9oZWlnaHQ7XHJcbiAgICAgIHRoaXMucGFnZVdpZHRoID0gcGFnZS5wYWdlX3dpZHRoO1xyXG4gICAgICB0aGlzLnN0YW5kYXJkSGVpZ2h0ID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXIuZ2V0UGFnZUhlaWdodCgoaW5kZXgrMSkpO1xyXG4gICAgICB0aGlzLnN0YW5kYXJkV2lkdGggPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlci5nZXRQYWdlV2lkdGgoKGluZGV4KzEpKTtcclxuICAgICAgY29uc3QgeCA9ICh0aGlzLnBhZ2VXaWR0aCAvIHRoaXMuc3RhbmRhcmRXaWR0aCk7IC8vIHdpZHRoIHJhdGlvXHJcbiAgICAgIGNvbnN0IHkgPSAodGhpcy5wYWdlSGVpZ2h0IC8gdGhpcy5zdGFuZGFyZEhlaWdodCk7IC8vIGhlaWdodCByYXRpb1xyXG4gICAgICBwYWdlLnpvbmVzLmZvckVhY2goem9uZSA9PiB7XHJcbiAgICAgICAgem9uZS5wYXJhZ3JhcGhzLmZvckVhY2gocGFyYWdyYXBoID0+IHtcclxuICAgICAgICAgIHBhcmFncmFwaC5saW5lcy5mb3JFYWNoKGxpbmUgPT4ge1xyXG4gICAgICAgICAgICBsaW5lLndvcmRzLmZvckVhY2god29yZCA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHdvcmQudGV4dC5pbmNsdWRlcyhzZWFyY2hlZFdvcmQpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBhbm5vdGF0aW9uLlBhZ2VOdW1iZXIgPSBpbmRleCsxO1xyXG4gICAgICAgICAgICAgICAgbGV0IHF1YWRzID0gW3tcclxuICAgICAgICAgICAgICAgICAgICB4MTogKHdvcmQuY29vcmRpbmF0ZXMudXBwZXJfbGVmdC54IC8geCksXHJcbiAgICAgICAgICAgICAgICAgICAgeDI6ICh3b3JkLmNvb3JkaW5hdGVzLmJvdHRvbV9yaWdodC54IC8geCksXHJcbiAgICAgICAgICAgICAgICAgICAgeDM6ICh3b3JkLmNvb3JkaW5hdGVzLmJvdHRvbV9yaWdodC54IC8geCksXHJcbiAgICAgICAgICAgICAgICAgICAgeDQ6ICh3b3JkLmNvb3JkaW5hdGVzLnVwcGVyX2xlZnQueCAvIHgpLFxyXG4gICAgICAgICAgICAgICAgICAgIHkxOiAod29yZC5jb29yZGluYXRlcy51cHBlcl9sZWZ0LnkgLyB5KSxcclxuICAgICAgICAgICAgICAgICAgICB5MjogKHdvcmQuY29vcmRpbmF0ZXMudXBwZXJfbGVmdC55IC8geSksXHJcbiAgICAgICAgICAgICAgICAgICAgeTM6ICh3b3JkLmNvb3JkaW5hdGVzLmJvdHRvbV9yaWdodC55IC8geSksXHJcbiAgICAgICAgICAgICAgICAgICAgeTQ6ICh3b3JkLmNvb3JkaW5hdGVzLmJvdHRvbV9yaWdodC55IC8geSksXHJcbiAgICAgICAgICAgICAgICAgIH1dXHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZ2xpZ2h0VGV4dChcclxuICAgICAgICAgICAgICAgICAgcXVhZHMsIFxyXG4gICAgICAgICAgICAgICAgICBpbmRleCsxXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25zdHJ1Y3RTZWFyY2hSZXN1bHQoc2VhcmNoZWRXb3JkICwgaW5kZXgrMSAsIHF1YWRzICwgbGluZS50ZXh0ICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBzZWFyY2ggZm9yIHdvcmQgaW4gc2luZ2xlIGxpbmUgXHJcbiAgU2VhcmNoRm9yV29yZEluTGluZShsaXN0T2ZTZWFyY2hlZFdvcmRzLCBsaW5lLCBwYWdlbnVtYmVyLCBwYWdlKSB7XHJcbiAgICB0aGlzLnBhZ2VIZWlnaHQgPSBwYWdlLnBhZ2VfaGVpZ2h0O1xyXG4gICAgdGhpcy5wYWdlV2lkdGggPSBwYWdlLnBhZ2Vfd2lkdGg7XHJcbiAgICB0aGlzLnN0YW5kYXJkSGVpZ2h0ID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXIuZ2V0UGFnZUhlaWdodCgocGFnZW51bWJlcikpO1xyXG4gICAgdGhpcy5zdGFuZGFyZFdpZHRoID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXIuZ2V0UGFnZVdpZHRoKChwYWdlbnVtYmVyKSk7XHJcbiAgICBjb25zdCB4ID0gKHRoaXMucGFnZVdpZHRoIC8gdGhpcy5zdGFuZGFyZFdpZHRoKTsgLy8gd2lkdGggcmF0aW9cclxuICAgIGNvbnN0IHkgPSAodGhpcy5wYWdlSGVpZ2h0IC8gdGhpcy5zdGFuZGFyZEhlaWdodCk7IC8vIGhlaWdodCByYXRpb1xyXG4gICAgLy8gZmluZCBvbmx5IHdvcmRzIHJlbGF0ZWQgdG8gbXkgc2VhcmNoIGZvcm0gdGhlIGxpbmVcclxuICAgIGxldCBteUZvdW5kZWRSZXN1bHRzID0gW107XHJcbiAgICBsZXQgY29ycmVjdFJlc3VsdHMgPSBbXTtcclxuICAgIGxpbmUud29yZHMuZm9yRWFjaCgod29yZCwgd29yZEluZGV4KSA9PiB7XHJcbiAgICAgIGlmIChsaXN0T2ZTZWFyY2hlZFdvcmRzLmluZGV4T2Yod29yZC50ZXh0KSA+IC0xKSB7XHJcbiAgICAgICAgbXlGb3VuZGVkUmVzdWx0cy5wdXNoKHsgd29yZDogd29yZCwgd29yZEluZGV4OiB3b3JkSW5kZXggfSlcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gZmluZCBvbmx5IHdvcmRzIGV4aXN0IGluIG15IHNlYXJjaCBzZW50ZW5jZSBhbmQgbm90IHNpbmdsZSBhbmQgcmVwZWF0ZWQgd29yZFxyXG4gICAgbXlGb3VuZGVkUmVzdWx0cy5tYXAoKHJlc3VsdCwgaW5kZXgpID0+IHtcclxuICAgICAgaWYgKChteUZvdW5kZWRSZXN1bHRzW2luZGV4XVsnd29yZEluZGV4J10gLSAxID09PSAobXlGb3VuZGVkUmVzdWx0c1tpbmRleCAtIDFdICYmIG15Rm91bmRlZFJlc3VsdHNbaW5kZXggLSAxXVsnd29yZEluZGV4J10pKSB8fFxyXG4gICAgICAgIChteUZvdW5kZWRSZXN1bHRzW2luZGV4ICsgMV0gJiYgKG15Rm91bmRlZFJlc3VsdHNbaW5kZXggKyAxXVsnd29yZEluZGV4J10gLSAxID09PSBteUZvdW5kZWRSZXN1bHRzW2luZGV4XVsnd29yZEluZGV4J10pKSkge1xyXG4gICAgICAgIGNvcnJlY3RSZXN1bHRzLnB1c2gocmVzdWx0KVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIC8vIGhpZ2hsaWh0IHRoZXNlIHdvcmRzIGFmdGVyIGVsZW1pbmF0aW5nIGFsbCByZXBlYXRlZCBhbmQgcmVsYXRlZCB3b3Jkc1xyXG4gICAgLy8gbXVzdCBiZSBmb3IgbG9vcCBzcCBpIGNhbiBjb250cm9sIHRoZSBzdGVwIGluIGVhY2ggbG9vcFxyXG4gICAgbGV0IHF1YWRzID0gW107XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvcnJlY3RSZXN1bHRzLmxlbmd0aDsgKGkgPSBpICsgbGlzdE9mU2VhcmNoZWRXb3Jkcy5sZW5ndGgpKSB7XHJcbiAgICAgIHF1YWRzLnB1c2goXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgeDE6IChjb3JyZWN0UmVzdWx0c1soKGkgKyBsaXN0T2ZTZWFyY2hlZFdvcmRzLmxlbmd0aCkgLSAxKV0ud29yZC5jb29yZGluYXRlcy51cHBlcl9sZWZ0LnggLyB4KSxcclxuICAgICAgICAgIHgyOiAoY29ycmVjdFJlc3VsdHNbaV0ud29yZC5jb29yZGluYXRlcy5ib3R0b21fcmlnaHQueCAvIHgpLFxyXG4gICAgICAgICAgeDM6IChjb3JyZWN0UmVzdWx0c1tpXS53b3JkLmNvb3JkaW5hdGVzLmJvdHRvbV9yaWdodC54IC8geCksXHJcbiAgICAgICAgICB4NDogKGNvcnJlY3RSZXN1bHRzWygoaSArIGxpc3RPZlNlYXJjaGVkV29yZHMubGVuZ3RoKSAtIDEpXS53b3JkLmNvb3JkaW5hdGVzLnVwcGVyX2xlZnQueCAvIHgpLFxyXG4gICAgICAgICAgeTE6IChjb3JyZWN0UmVzdWx0c1tpXS53b3JkLmNvb3JkaW5hdGVzLnVwcGVyX2xlZnQueSAvIHkpLFxyXG4gICAgICAgICAgeTI6IChjb3JyZWN0UmVzdWx0c1soKGkgKyBsaXN0T2ZTZWFyY2hlZFdvcmRzLmxlbmd0aCkgLSAxKV0ud29yZC5jb29yZGluYXRlcy51cHBlcl9sZWZ0LnkgLyB5KSxcclxuICAgICAgICAgIHkzOiAoY29ycmVjdFJlc3VsdHNbKChpICsgbGlzdE9mU2VhcmNoZWRXb3Jkcy5sZW5ndGgpIC0gMSldLndvcmQuY29vcmRpbmF0ZXMuYm90dG9tX3JpZ2h0LnkgLyB5KSxcclxuICAgICAgICAgIHk0OiAoY29ycmVjdFJlc3VsdHNbaV0ud29yZC5jb29yZGluYXRlcy5ib3R0b21fcmlnaHQueSAvIHkpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB0aGlzLmhpZ2xpZ2h0VGV4dChcclxuICAgICAgICBxdWFkcyxcclxuICAgICAgICBwYWdlbnVtYmVyXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuY29uc3RydWN0U2VhcmNoUmVzdWx0KGxpc3RPZlNlYXJjaGVkV29yZHMuam9pbihcIiBcIikgLCBwYWdlbnVtYmVyICwgcXVhZHMgLCBsaW5lLnRleHQpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RTZWFyY2hSZXN1bHQoc2VhcmNoZWRUZXh0ICwgcGFnZU51bSAsIHF1YWRzICwgbGluZSl7XHJcbiAgIGxldCBteVNlYXJjaFN0YXJ0VGV4dEluZGV4ID0gbGluZS5pbmRleE9mKHNlYXJjaGVkVGV4dCk7XHJcbiAgIGxldCBteVNlZWFyY2hlZFRleHRFbmRJbmRleCA9IG15U2VhcmNoU3RhcnRUZXh0SW5kZXggKyBzZWFyY2hlZFRleHQubGVuZ3RoO1xyXG4gICAgbGV0IHNlYXJjaFJlc3VsdE9iamVjdCA9IHtcclxuICAgICAgICBhbWJpZW50U3RyOiBsaW5lLFxyXG4gICAgICAgIHJlc3VsdFN0cjogc2VhcmNoZWRUZXh0LFxyXG4gICAgICAgIHJlc3VsdFN0clN0YXJ0Om15U2VhcmNoU3RhcnRUZXh0SW5kZXgsXHJcbiAgICAgICAgcmVzdWx0U3RyRW5kOiBteVNlZWFyY2hlZFRleHRFbmRJbmRleCxcclxuICAgICAgICBwYWdlTnVtOiBwYWdlTnVtLFxyXG4gICAgICAgIHJlc3VsdENvZGU6IDIsXHJcbiAgICAgICAgcXVhZHM6IFt7XHJcbiAgICAgICAgICAgIGVhOiBxdWFkc1swXVsneTMnXSxcclxuICAgICAgICAgICAgZmE6IHF1YWRzWzBdWyd5NCddLFxyXG4gICAgICAgICAgICBoYTogcXVhZHNbMF1bJ3gxJ10sXHJcbiAgICAgICAgICAgIGlhOiBxdWFkc1swXVsneDInXSxcclxuICAgICAgICAgICAgcEI6IHF1YWRzWzBdWyd4MyddLFxyXG4gICAgICAgICAgICBxQjogcXVhZHNbMF1bJ3g0J10sXHJcbiAgICAgICAgICAgIHJCOiBxdWFkc1swXVsneTEnXSxcclxuICAgICAgICAgICAgc0I6IHF1YWRzWzBdWyd5MiddXHJcbiAgICAgICAgfV1cclxuICAgIH1cclxuICAgIHRoaXMubXlTZWFyY2hTdHJpbmdSZXN1bHRzLnB1c2goc2VhcmNoUmVzdWx0T2JqZWN0KTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMubXlTZWFyY2hTdHJpbmdSZXN1bHRzKTtcclxuICB9XHJcblxyXG4gIGRpc3BhbGF5U2VhcmNoUmVzdWx0cyhkb2NWaWV3ZXIpe1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgZG9jVmlld2VyLmRpc3BsYXlBZGRpdGlvbmFsU2VhcmNoUmVzdWx0cyh0aGlzLm15U2VhcmNoU3RyaW5nUmVzdWx0cyk7XHJcbiAgICB9LCA1MDApO1xyXG4gIH1cclxuXHJcbiAgLy8gZHJhdyBoaWxpZ3RoaW5nIGFyb3VuZCBjZXJ0YWluIGNoYXJhdGFjdGVyc1xyXG4gIGhpZ2xpZ2h0VGV4dChxdWFkcywgcGFnZU51bWJlcikge1xyXG4gICAgY29uc3QgaGlnaGxpZ2h0aW5nQW5ub3QgPSBuZXcgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5Bbm5vdGF0aW9ucy5UZXh0SGlnaGxpZ2h0QW5ub3RhdGlvbigpO1xyXG4gICAgaGlnaGxpZ2h0aW5nQW5ub3QuU3Ryb2tlQ29sb3IgPSBuZXcgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5Bbm5vdGF0aW9ucy5Db2xvcigyNTAsMjA2LDAsMC41MDE5Nik7XHJcbiAgICBoaWdobGlnaHRpbmdBbm5vdC5RdWFkcyA9IHF1YWRzO1xyXG4gICAgaGlnaGxpZ2h0aW5nQW5ub3QuUGFnZU51bWJlciA9IHBhZ2VOdW1iZXI7XHJcbiAgICBoaWdobGlnaHRpbmdBbm5vdC5BdXRob3IgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmFubm90TWFuYWdlci5nZXRDdXJyZW50VXNlcigpO1xyXG4gICAgdGhpcy5zYXZlZEFub3RhdGlvbnMucHVzaChoaWdobGlnaHRpbmdBbm5vdCk7XHJcbiAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmFubm90TWFuYWdlci5hZGRBbm5vdGF0aW9uKGhpZ2hsaWdodGluZ0Fubm90KTtcclxuXHJcbiAgICAvLyBuZWVkIHRvIGRyYXcgdGhlIGFubm90YXRpb24gb3RoZXJ3aXNlIGl0IHdvbid0IHNob3cgdXAgdW50aWwgdGhlIHBhZ2UgaXMgcmVmcmVzaGVkXHJcbiAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmFubm90TWFuYWdlci5yZWRyYXdBbm5vdGF0aW9uKGhpZ2hsaWdodGluZ0Fubm90KTtcclxuICB9XHJcblxyXG4gIHNlYXJjaEZuID0gKHNlYXJjaFZhbHVlLCBvcHRpb25zKSA9PiB7XHJcbiAgICB0aGlzLm15U2VhcmNoU3RyaW5nUmVzdWx0cyA9IFtdO1xyXG4gICBpZih0aGlzLnNhdmVkQW5vdGF0aW9ucy5sZW5ndGggPiAwKXtcclxuICAgICB0aGlzLnNhdmVkQW5vdGF0aW9ucy5tYXAoYW5ub3RhdGlvbiA9PiB7XHJcbiAgICAgICBhbm5vdGF0aW9uLkhpZGRlbiA9IHRydWU7XHJcbiAgICAgLy8gQWx3YXlzIHJlZHJhdyBhbm5vdGF0aW9uIGlmIHJlbmRlcmluZyB3YXMgdXBkYXRlZFxyXG4gICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLnJlZHJhd0Fubm90YXRpb24oYW5ub3RhdGlvbik7XHJcbiAgIH0pO1xyXG4gICB9XHJcbiAgIC8vIGRvbid0IGRvIGFueSBzZWFyY2ggdW50aWwgdGhlcmUgaXMgYSBzZWFyY2ggcGF0dGVyblxyXG4gICBpZihzZWFyY2hWYWx1ZS50cmltKCkubGVuZ3RoID4gMCl7XHJcbiAgICAgICBpZiAodGhpcy5maWxlV2l0aE9jcikge1xyXG4gICAgICAgICAvLyBhZGQgcmVkYWN0aW9uIGFubm90YXRpb24gZm9yIGVhY2ggc2VhcmNoIHJlc3VsdFxyXG4gICAgICAgICAgIC8vIGNvbnN0IGFubm90YXRpb24gPSBuZXcgQW5ub3RhdGlvbnMuVGV4dEhpZ2hsaWdodEFubm90YXRpb24oKTtcclxuICAgICAgICAgICBsZXQgbXlTZWFyY2ggPSBzZWFyY2hWYWx1ZS5zcGxpdCgnICcpO1xyXG4gICAgICAgICAgIGlmKG15U2VhcmNoLmxlbmd0aCA+IDEpe1xyXG4gICAgICAgICAgICAgLy8gdGhlbiBpIGFtIHNlYXJjaGluZyB3aXRoIG1vcmUgdGhhbiBvbmUgd29yZFxyXG4gICAgICAgICAgICAgdGhpcy5wYWdlcy5wYWdlcy5mb3JFYWNoKChwYWdlICwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgdGhpcy5wYWdlSGVpZ2h0ID0gcGFnZS5wYWdlX2hlaWdodDtcclxuICAgICAgICAgICAgICAgdGhpcy5wYWdlV2lkdGggPSBwYWdlLnBhZ2Vfd2lkdGg7XHJcbiAgICAgICAgICAgICAgIHRoaXMuc3RhbmRhcmRIZWlnaHQgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlci5nZXRQYWdlSGVpZ2h0KChpbmRleCsxKSk7XHJcbiAgICAgICAgICAgICAgIHRoaXMuc3RhbmRhcmRXaWR0aCA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyLmdldFBhZ2VXaWR0aCgoaW5kZXgrMSkpO1xyXG4gICAgICAgICAgICAgICBwYWdlLnpvbmVzLmZvckVhY2goem9uZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgem9uZS5wYXJhZ3JhcGhzLmZvckVhY2gocGFyYWdyYXBoID0+IHtcclxuICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaC5saW5lcy5mb3JFYWNoKGxpbmUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICBpZihsaW5lLnRleHQuaW5jbHVkZXMoc2VhcmNoVmFsdWUpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlNlYXJjaEZvcldvcmRJbkxpbmUobXlTZWFyY2gsbGluZSwoaW5kZXgrMSkgLCBwYWdlKVxyXG4gICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAvLyB0aGVuIGkgYW0gc2VhcmNoaW5nIHdpdGggb25seSBvbmUgd29yZCBcclxuICAgICAgICAgICAgIHRoaXMuc2VhcmNoRm9yV29yZEluQWxsUGFnZXMoc2VhcmNoVmFsdWUpXHJcbiAgICAgICAgICAgfVxyXG4gICAgICAgICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyLmNsZWFyU2VhcmNoUmVzdWx0cygpO1xyXG4gICAgICAgICAgICAgdGhpcy5kaXNwYWxheVNlYXJjaFJlc3VsdHModGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXIpO1xyXG4gICAgICAgfVxyXG4gfWVsc2V7XHJcbiAgIHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyLmNsZWFyU2VhcmNoUmVzdWx0cygpO1xyXG4gfVxyXG59XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy53ZWJWaWV3ZXJJbnN0YW5jZSkge1xyXG4gICAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmNsb3NlRG9jdW1lbnQoKS50aGVuKCgpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZG9jdW1lbnQgY2xvc2VkIScpO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5wZGZ0cm9uU2VydmljZS5pbnN0YW5jZSA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgdGhpcy50cmFuc2VsYXRpb25TdWJzY3JpdGlvbiA/IHRoaXMudHJhbnNlbGF0aW9uU3Vic2NyaXRpb24udW5zdWJzY3JpYmUoKSA6IG51bGw7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgI2ZpbGVWaWV3ZXIgc3R5bGU9XCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlO1wiPjwvZGl2PlxyXG4iXX0=
765
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmdHJvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL3BkZi10cm9uL3BkZnRyb24vcGRmdHJvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL3BkZi10cm9uL3BkZnRyb24vcGRmdHJvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUdMLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sU0FBMkIsTUFBTSxvQkFBb0IsQ0FBQztBQUc3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7O0FBTXhEOzs7Ozs7Ozs7Ozs7R0FZRztBQU9ILE1BQU0sT0FBTyxnQkFBZ0I7SUFtRDNCLFlBQ1MsR0FBc0IsRUFDckIsY0FBOEIsRUFDOUIsS0FBbUIsRUFDSSxRQUFnQixFQUN2QyxVQUFzQixFQUN0QixrQkFBdUMsRUFDdkMsT0FBNkIsRUFDTixXQUFXO1FBUG5DLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3JCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQ0ksYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQUN2QyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBcUI7UUFDdkMsWUFBTyxHQUFQLE9BQU8sQ0FBc0I7UUFDTixnQkFBVyxHQUFYLFdBQVcsQ0FBQTtRQXBEbkMsa0JBQWEsR0FBRyxLQUFLLENBQUMsQ0FBQyw0RUFBNEU7UUFVNUcsa0JBQWEsR0FBRyxpQkFBaUIsQ0FBQztRQUlsQyxZQUFPLEdBQW9DLFVBQVUsQ0FBQztRQVc3QyxpQkFBWSxHQUFHLEVBQUUsQ0FBQyxDQUFDLDBDQUEwQztRQUU3RCxtQkFBYyxHQUFHLEtBQUssQ0FBQyxDQUFDLG9GQUFvRjtRQUMzRyx3QkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDLENBQUMsa0NBQWtDO1FBRTdFLHlCQUFvQixHQUFHLEtBQUssQ0FBQyxDQUFDLHVEQUF1RDtRQUVyRiw0QkFBdUIsR0FBRyxJQUFJLENBQUUsQ0FBQyx5Q0FBeUM7UUFDMUUseUJBQW9CLEdBQUcsSUFBSSxDQUFFLENBQUMsc0NBQXNDO1FBRW5FLHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUMsQ0FBQywyQ0FBMkM7UUFFN0YsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbEIsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDLENBQUMsc0NBQXNDO1FBQ3JGLGtCQUFhLEdBQUcsSUFBSSxDQUFDLENBQUMsbUVBQW1FO1FBQ3pGLHVCQUFrQixHQUFHLElBQUksQ0FBQyxDQUFDLDhFQUE4RTtRQUN6RyxvQkFBZSxHQUFHLEtBQUssQ0FBQyxDQUFDLDhFQUE4RTtRQTJadkcsb0JBQWUsR0FBRyxFQUFFLENBQUM7UUFDckIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDcEIsbUJBQWMsR0FBQyxFQUFFLENBQUM7UUFDbEIsMEJBQXFCLEdBQUcsRUFBRSxDQUFDO1FBQzNCLDhCQUF5QixHQUFHLEVBQUUsQ0FBQztRQTZPL0IsYUFBUSxHQUFHLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxFQUFFLENBQUM7WUFDakMsSUFBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUM7Z0JBQ2pDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFO29CQUNwQyxVQUFVLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztvQkFDM0Isb0RBQW9EO29CQUNwRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNuRSxDQUFDLENBQUMsQ0FBQzthQUNGO1lBQ0Qsc0RBQXNEO1lBQ3RELElBQUcsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUM7Z0JBQzdCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtvQkFDcEIsa0RBQWtEO29CQUNoRCxnRUFBZ0U7b0JBQ2hFLElBQUksUUFBUSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3RDLElBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUM7d0JBQ3JCLDhDQUE4Qzt3QkFDOUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFHLEtBQUssRUFBRSxFQUFFOzRCQUN4QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7NEJBQ25DLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQzs0QkFDakMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUNoRixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQzlFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dDQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtvQ0FDbEMsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7d0NBQzdCLElBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUM7NENBQ2pDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxFQUFHLElBQUksQ0FBQyxDQUFBO3lDQUN6RDtvQ0FDSCxDQUFDLENBQUMsQ0FBQTtnQ0FDSixDQUFDLENBQUMsQ0FBQzs0QkFDTCxDQUFDLENBQUMsQ0FBQTt3QkFDSixDQUFDLENBQUMsQ0FBQztxQkFDSjt5QkFBSTt3QkFDSCwwQ0FBMEM7d0JBQzFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsQ0FBQTtxQkFDMUM7b0JBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO29CQUNwRCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUNsRTthQUNOO2lCQUFJO2dCQUNILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzthQUN2RDtRQUNGLENBQUMsQ0FBQTtJQTFxQkssQ0FBQztJQUVDLFFBQVE7O1lBQ1osSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUM5RSxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBRTtZQUN2QixDQUFDLENBQUMsQ0FBQTtRQUNILENBQUM7S0FBQTtJQUVJLGVBQWU7O1lBQ25CLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBRTlGLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsK0JBQStCLENBQUM7YUFDdEQ7aUJBQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDM0MsSUFBSSxDQUFDLGFBQWE7b0JBQ2hCLDJFQUEyRSxDQUFDO2FBQy9FO2lCQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzFDLElBQUksQ0FBQyxhQUFhLEdBQUcsb0JBQW9CLENBQUM7YUFDM0M7aUJBQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDM0MsSUFBSSxDQUFDLGFBQWE7b0JBQ2hCLHlFQUF5RSxDQUFDO2FBQzdFO1lBQ0QsU0FBUyxDQUNQO2dCQUNFLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxHQUFHLGtCQUFrQjtnQkFDeEMsbUJBQW1CLEVBQUUsSUFBSTtnQkFDekIsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCO2dCQUM5QyxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLGlDQUFpQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxpQ0FBaUMsQ0FBQztnQkFDOUgsY0FBYyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVE7Z0JBQ3hILGdCQUFnQixFQUFFLENBQUMsZ0JBQWdCLEVBQUUsYUFBYSxDQUFDO2FBRXBELEVBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQzdCLENBQUMsSUFBSSxDQUFDLENBQU8sUUFBUSxFQUFFLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUU7Z0JBQ3pFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxRQUFRLENBQUM7Z0JBQ2pFLElBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDO29CQUNsRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztvQkFDeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQztvQkFDaEYscUVBQXFFO29CQUNyRSxRQUFRLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUMvQztxQkFBSTtvQkFDTCxpRkFBaUY7b0JBQzdFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2lCQUMzQjtnQkFDSCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7Z0JBQy9CLElBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFDO29CQUMzQixJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztvQkFDbkMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7aUJBQ2xDO2dCQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsd0JBQXdCLENBQUM7b0JBQ3hELG9GQUFvRjtvQkFDcEYsWUFBWSxFQUFFLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxDQUFDLEVBQUMsT0FBTyxDQUFDO29CQUM3RSxrQkFBa0IsRUFBRSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsQ0FBQyxFQUFDLE9BQU8sQ0FBQztpQkFDcEYsQ0FBQyxDQUFDO2dCQUNILElBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUM7b0JBQzdDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7aUJBQ3hEO2dCQUNDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUV0QixDQUFDLENBQUEsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztLQUFBO0lBRUQsMkJBQTJCO1FBQ3pCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUM7UUFFeEQsY0FBYyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7WUFDdkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtRQUNoRixDQUFDLENBQUMsQ0FBQTtRQUNGLHlCQUF5QjtRQUN6Qix3Q0FBd0M7UUFDeEMsd0VBQXdFO1FBQ3hFLFFBQVE7UUFDUixNQUFNO0lBQ1IsQ0FBQztJQUVELGdJQUFnSTtJQUNoSSx5QkFBeUI7UUFDdkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRTtZQUNoRyxJQUFJLFFBQVE7Z0JBQUUsT0FBTztZQUNyQixJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLGlCQUFpQixFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEVBQUU7Z0JBQ2xGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUNwRCxDQUFDLENBQUMsQ0FBQztZQUNILGdHQUFnRztZQUNoRyxJQUFHLElBQUksQ0FBQyxjQUFjLEVBQUM7Z0JBQ3JCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBQyxVQUFVLEVBQUcsV0FBVyxFQUFHLE1BQU0sRUFBRyxNQUFNLEVBQUMsQ0FBQyxDQUFBO2FBQzVFO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZUFBZTtRQUNiLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUM7UUFDeEQsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBRTFFLGNBQWMsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFO1lBQ3ZDLElBQUcsSUFBSSxDQUFDLGFBQWEsRUFBQztnQkFDcEIsYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztnQkFDekQsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7YUFDNUI7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCx1QkFBdUI7UUFDckIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQztRQUN4RCxNQUFNLG1CQUFtQixHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0FBQTtRQUMvRSxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUN0RCxJQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFDO2dCQUMxQixPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO2FBQzdCO1lBQ0QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztRQUFBLENBQUM7SUFDTixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUM7UUFDeEQsTUFBTSxtQkFBbUIsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBQUE7UUFDL0UsbUJBQW1CLENBQUMsRUFBRSxDQUFDLGlCQUFpQixFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDdkQsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDdEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUcsY0FBYyxDQUFDLENBQUM7Z0JBQ25ELE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUE7YUFDeEI7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUFBLENBQUM7SUFDTixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsVUFBVSxFQUFHLGNBQWM7UUFDMUMsSUFBRyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUM7WUFDckIsOERBQThEO1lBQzlELElBQUksU0FBUyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNsRCxJQUFJLEdBQUcsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUM5QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDakMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDbkIsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQ2YsS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFCLE9BQU0sQ0FBQyxFQUFFLEVBQUM7Z0JBQ04sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDakM7WUFDRCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRyxHQUFHLENBQUMsQ0FBQTtZQUNsQyxJQUFJLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLGlCQUFpQixFQUFFLEVBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxDQUFDLENBQUM7WUFDL0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1NBRWpFO2FBQUk7WUFDSCxJQUFJLENBQUMsMEJBQTBCLENBQUMsVUFBVSxFQUFHLGNBQWMsQ0FBQyxDQUFBO1NBQzdEO0lBQ0gsQ0FBQztJQUVLLDBCQUEwQixDQUFDLFVBQVUsRUFBRSxTQUFTOztZQUNwRCxnREFBZ0Q7WUFDaEQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNoRCw2Q0FBNkM7WUFDN0MsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDaEYsK0RBQStEO1lBQy9ELE1BQU0sQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztZQUNsQyxNQUFNLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7WUFDaEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwQyw4RUFBOEU7WUFDOUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUMsc0NBQXNDO1lBQ3RDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ2pDLGlEQUFpRDtZQUNqRCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3JCLHlDQUF5QztnQkFDekMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFHLEdBQUcsQ0FBQyxDQUFBO2dCQUN2QyxJQUFJLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNwQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDbEUsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0tBQUE7SUFFRCxnQkFBZ0I7UUFDZCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDO1FBQ3hELE1BQU0sbUJBQW1CLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQ2hGLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUMvRCxPQUFPLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDbkcsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQy9DLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLGNBQWM7Z0JBQ3BCLEdBQUcsRUFBRSxrY0FBa2M7Z0JBQ3ZjLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFVBQVU7Z0JBQzNDLE9BQU8sRUFBRSxHQUFTLEVBQUU7b0JBQ2xCLElBQUcsSUFBSSxDQUFDLHVCQUF1QixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxRQUFRLENBQUMsRUFBQzt3QkFDOUwsTUFBTSxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDO3dCQUMvRixrRUFBa0U7d0JBQ2xFLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQzt3QkFDaEMsTUFBTSxPQUFPLEdBQUc7NEJBQ2QsUUFBUSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsZ0JBQWdCOzRCQUNsRixjQUFjOzRCQUNkLEtBQUssRUFBRSxXQUFXLENBQUMsVUFBVTs0QkFDN0IsWUFBWSxFQUFFLEtBQUs7eUJBQ3BCLENBQUM7d0JBRUYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO3dCQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztxQkFDOUI7eUJBQUk7d0JBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFHLE9BQU8sRUFBRyx1QkFBdUIsQ0FBQyxDQUFDO3dCQUMvRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO3FCQUUxQjtvQkFFRCx5REFBeUQ7b0JBQ3pELDhEQUE4RDtvQkFDOUQseUJBQXlCO29CQUN6QixrREFBa0Q7b0JBQ2xELHNDQUFzQztvQkFDdEMsZ0RBQWdEO29CQUNoRCxtQ0FBbUM7b0JBQ25DLDZEQUE2RDtvQkFDN0QsZ0NBQWdDO29CQUNoQyx1Q0FBdUM7b0JBQ3ZDLG9CQUFvQjtvQkFDcEIsdUNBQXVDO29CQUN2QyxvQ0FBb0M7b0JBQ3BDLFFBQVE7b0JBQ1IsSUFBSTtnQkFDTixDQUFDLENBQUE7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQy9DLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLGNBQWM7Z0JBQ3BCLEdBQUcsRUFBRSxrV0FBa1c7Z0JBQ3ZXLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU87Z0JBQ3hDLE9BQU8sRUFBRSxHQUFHLEVBQUU7b0JBQ1osSUFBRyxJQUFJLENBQUMsb0JBQW9CLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxFQUFDO3dCQUN4TCxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7cUJBQzNCO3lCQUFJO3dCQUNILElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRyxPQUFPLEVBQUcsb0JBQW9CLENBQUMsQ0FBQzt3QkFDNUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztxQkFDMUI7Z0JBQ0gsQ0FBQzthQUNGLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFlBQVk7UUFDVixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ3hELElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUM5QixHQUFHLFFBQVEsQ0FBQyxRQUFRLE1BQU07UUFDMUIsNEJBQTRCO1FBQzVCLHNCQUFzQjtRQUN0QixNQUFNO1NBQ1AsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNoRSxPQUFPO1NBQ1I7UUFDRCxNQUFNLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDeEUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7WUFDbEMsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7WUFDdEQsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRTtnQkFDOUIsT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO2FBQ2xEO2lCQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxNQUFNLEVBQUU7Z0JBQ2xDLE9BQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQzthQUMvQztZQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNsQixJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0RCw0QkFBNEI7U0FDN0I7UUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDdkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNoRCxZQUFZLEVBQUMsSUFBSTtnQkFDakIsYUFBYSxFQUFFO29CQUNiLGFBQWEsRUFBRSxJQUFJLENBQUMsVUFBVTtpQkFDL0I7Z0JBQ0QseUJBQXlCO2FBQzFCLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUNqQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxFQUN2RTtnQkFDRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVM7YUFDekIsQ0FDRixDQUFDO1NBQ0g7UUFFRCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssU0FBUyxFQUFFO1lBQ3JDLHFFQUFxRTtZQUNyRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQXFCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDbEUsaURBQWlEO2dCQUNqRCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssUUFBUSxFQUFFO29CQUM3SCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7aUJBQ3BCO2FBQ0Y7aUJBQ0ksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFxQixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDeEUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2FBQ3JCO1NBQ0Y7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFSyxZQUFZOztZQUNoQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzNELE1BQU0sVUFBVSxHQUNkLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ2hFLE1BQU0sSUFBSSxHQUFHLE1BQU0sR0FBRyxDQUFDLFdBQVcsQ0FBQztnQkFDakMsNENBQTRDO2dCQUM1QyxVQUFVO2FBQ1gsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxHQUFHLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUMzRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsQ0FBQztLQUFBO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3ZCLDJEQUEyRDtZQUMzRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDO2dCQUNyQyxxQkFBcUI7Z0JBQ3JCLG1CQUFtQjtnQkFDbkIscUJBQXFCO2dCQUNyQix1QkFBdUI7YUFDeEIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdkQ7YUFBTTtZQUNMLHNEQUFzRDtZQUN0RCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUM7b0JBQ3JDLHFCQUFxQjtvQkFDckIsbUJBQW1CO29CQUNuQixxQkFBcUI7b0JBQ3JCLHVCQUF1QjtpQkFDeEIsQ0FBQyxDQUFDO2dCQUNILElBQUksS0FBSyxDQUFFO2dCQUNYLElBQUcsSUFBSSxDQUFDLFdBQVcsS0FBSyxTQUFTLEVBQUM7b0JBQ2hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUM7d0JBQ3BDLHFCQUFxQjtxQkFDdEIsQ0FBQyxDQUFDO2lCQUVKO3FCQUFLLElBQUcsSUFBSSxDQUFDLFdBQVcsS0FBSyxVQUFVLEVBQUM7b0JBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUM7d0JBQ3BDLHFCQUFxQjt3QkFDckIsbUJBQW1CO3dCQUNuQix1QkFBdUI7cUJBQ3hCLENBQUMsQ0FBQztpQkFDSjthQUNGO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUM7b0JBQ3BDLHFCQUFxQjtvQkFDckIsbUJBQW1CO29CQUNuQixxQkFBcUI7b0JBQ3JCLHVCQUF1QjtpQkFDeEIsQ0FBQyxDQUFDO2FBQ0o7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2RCxtRUFBbUU7U0FDcEU7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQU87UUFDakIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xCLElBQ0UsT0FBTyxDQUFDLGNBQWM7Z0JBQ3RCLE9BQU8sQ0FBQyxjQUFjLENBQUMsYUFBYTtnQkFDcEMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxhQUFhO29CQUNwQyxPQUFPLENBQUMsY0FBYyxDQUFDLFlBQVksRUFDbkM7Z0JBQ0EsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNuQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2hCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzthQUN4QjtTQUNGO0lBQ0gsQ0FBQztJQUVPLFlBQVksQ0FBQyxLQUFLO1FBQ3hCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN0QixpQ0FBaUM7WUFDakMsZ0RBQWdEO1NBQ2pEO0lBQ0gsQ0FBQztJQWVELDJFQUEyRTtJQUMzRSxnQkFBZ0I7UUFDZCxNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDeEUsTUFBTSxjQUFjLEdBQUcsQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBRXZELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxFQUFFLENBQUM7WUFDbEMsSUFBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUM7Z0JBQ2pDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFO29CQUNwQyxVQUFVLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztvQkFDM0Isb0RBQW9EO29CQUNwRCxZQUFZLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzVDLENBQUMsQ0FBQyxDQUFDO2FBQ0Y7WUFDRCxzREFBc0Q7WUFDdEQsSUFBRyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBQztnQkFDN0Isa0RBQWtEO2dCQUNsRCxJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQ3pDLE1BQU0sVUFBVSxHQUFHLElBQUksV0FBVyxDQUFDLHVCQUF1QixFQUFFLENBQUM7b0JBQzdELFVBQVUsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztvQkFDOUQsVUFBVSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO29CQUN2QyxVQUFVLENBQUMsV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLENBQUMsRUFBQyxPQUFPLENBQUMsQ0FBQztvQkFDbEUsVUFBVSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUN6RSxPQUFPLFVBQVUsQ0FBQztnQkFDcEIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ2xELFlBQVksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUNqRCxZQUFZLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQy9EO2lCQUFJO2dCQUNILFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2FBQ2hDO1FBQ0gsQ0FBQyxDQUFDO1FBRUYsU0FBUyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7WUFDbEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzNELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELG1EQUFtRDtJQUNuRCxlQUFlLENBQUMsZUFBZTtRQUM3QixNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDeEUsSUFBSSxhQUFhLENBQUM7UUFDbEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDckQsU0FBUyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7WUFDbEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDcE0sSUFBSSxDQUFDLHFCQUFxQixHQUFHLEVBQUUsQ0FBQyxDQUFDLGtEQUFrRDtZQUNuRixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBRXBCLGtEQUFrRDtnQkFDaEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxXQUFXLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztnQkFDN0QsZUFBZSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRTtvQkFDL0IsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDckMsSUFBRyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBQzt3QkFDckIsOENBQThDO3dCQUM5QyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUcsS0FBSyxFQUFFLEVBQUU7NEJBQ3hDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQzs0QkFDbkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDOzRCQUNqQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ2hGLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDOUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0NBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO29DQUNsQyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTt3Q0FDN0IsSUFBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBQzs0Q0FDaEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLEVBQUcsSUFBSSxDQUFDLENBQUE7eUNBQ3pEO29DQUNILENBQUMsQ0FBQyxDQUFBO2dDQUNKLENBQUMsQ0FBQyxDQUFDOzRCQUNMLENBQUMsQ0FBQyxDQUFBO3dCQUNKLENBQUMsQ0FBQyxDQUFDO3FCQUNKO3lCQUFJO3dCQUNILDBDQUEwQzt3QkFDMUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxDQUFBO3FCQUN6QztnQkFDSCxDQUFDLENBQUMsQ0FBQTtnQkFDRixTQUFTLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ3pDO2lCQUFLO2dCQUNKLGFBQWEsR0FBRztvQkFDZCw0R0FBNEc7b0JBQzVHLFVBQVUsRUFBRSxJQUFJO29CQUNoQix5RUFBeUU7b0JBQ3pFLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRTt3QkFDakIsb0ZBQW9GO3dCQUNwRixJQUFJLE1BQU0sQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRTs0QkFDbkYsTUFBTSxVQUFVLEdBQUcsSUFBSSxXQUFXLENBQUMsdUJBQXVCLEVBQUUsQ0FBQzs0QkFDN0QsVUFBVSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDOzRCQUM5RCxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQzs0QkFDOUIsVUFBVSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDOzRCQUN2QyxVQUFVLENBQUMsV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLENBQUMsRUFBQyxPQUFPLENBQUMsQ0FBQzs0QkFDbEUsVUFBVSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxDQUFDOzRCQUN6RSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBSTs0QkFDekMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7NEJBQzFDLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7NEJBQ25ELFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7eUJBRXREO29CQUNILENBQUM7aUJBQ0YsQ0FBQztnQkFDRixlQUFlLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFO29CQUNqQyxTQUFTLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7Z0JBQzlELENBQUMsQ0FBQyxDQUFBO2FBQ0g7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCx1Q0FBdUM7SUFDdkMsdUJBQXVCLENBQUMsWUFBWTtRQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUcsS0FBSyxFQUFFLEVBQUU7WUFDeEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQ25DLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUNqQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEYsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlFLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxjQUFjO1lBQy9ELE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxlQUFlO1lBQ2xFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtvQkFDbEMsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7d0JBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFOzRCQUN4QixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFO2dDQUNwQyxtQ0FBbUM7Z0NBQ25DLElBQUksS0FBSyxHQUFHLENBQUM7d0NBQ1QsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3Q0FDdkMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3Q0FDekMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3Q0FDekMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3Q0FDdkMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3Q0FDdkMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3Q0FDdkMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3Q0FDekMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztxQ0FDMUMsQ0FBQyxDQUFBO2dDQUNKLElBQUksQ0FBQyxZQUFZLENBQ2YsS0FBSyxFQUNMLEtBQUssR0FBQyxDQUFDLENBQ1IsQ0FBQztnQ0FDRixJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxFQUFHLEtBQUssR0FBQyxDQUFDLEVBQUcsS0FBSyxFQUFHLElBQUksQ0FBQyxJQUFJLENBQUUsQ0FBQzs2QkFDekU7d0JBQ0gsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxtQkFBbUIsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUk7UUFDN0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ25DLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNqQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUNuRixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUNqRixNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsY0FBYztRQUMvRCxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsZUFBZTtRQUNsRSxxREFBcUQ7UUFDckQsSUFBSSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFO1lBQ3JDLElBQUksbUJBQW1CLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtnQkFDL0MsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQTthQUM1RDtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsK0VBQStFO1FBQy9FLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUMxSCxDQUFDLGdCQUFnQixDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUMxSCxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO2FBQzVCO1FBQ0gsQ0FBQyxDQUFDLENBQUE7UUFFRix3RUFBd0U7UUFDeEUsMERBQTBEO1FBQzFELElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNmLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUMvRSxLQUFLLENBQUMsSUFBSSxDQUNSO2dCQUNFLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDOUYsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzNELEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMzRCxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzlGLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN6RCxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzlGLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDaEcsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDNUQsQ0FBQyxDQUFDO1lBQ0wsSUFBSSxDQUFDLFlBQVksQ0FDZixLQUFLLEVBQ0wsVUFBVSxDQUNYLENBQUM7WUFDRixJQUFJLENBQUMscUJBQXFCLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFHLFVBQVUsRUFBRyxLQUFLLEVBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1NBQzNGO0lBQ0gsQ0FBQztJQUVELHFCQUFxQixDQUFDLFlBQVksRUFBRyxPQUFPLEVBQUcsS0FBSyxFQUFHLElBQUk7UUFDMUQsSUFBSSxzQkFBc0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3hELElBQUksdUJBQXVCLEdBQUcsc0JBQXNCLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQztRQUMxRSxJQUFJLGtCQUFrQixHQUFHO1lBQ3JCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFNBQVMsRUFBRSxZQUFZO1lBQ3ZCLGNBQWMsRUFBQyxzQkFBc0I7WUFDckMsWUFBWSxFQUFFLHVCQUF1QjtZQUNyQyxPQUFPLEVBQUUsT0FBTztZQUNoQixVQUFVLEVBQUUsQ0FBQztZQUNiLEtBQUssRUFBRSxDQUFDO29CQUNKLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO29CQUNsQixFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztvQkFDbEIsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7b0JBQ2xCLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO29CQUNsQixFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztvQkFDbEIsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7b0JBQ2xCLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO29CQUNsQixFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztpQkFDckIsQ0FBQztTQUNMLENBQUE7UUFDRCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDcEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQscUJBQXFCLENBQUMsU0FBUztRQUM3QixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osU0FBUyxDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3pFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCw4Q0FBOEM7SUFDOUMsWUFBWSxDQUFDLEtBQUssRUFBRSxVQUFVO1FBQzVCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDM0YsaUJBQWlCLENBQUMsV0FBVyxHQUFHLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxDQUFDLEVBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEcsaUJBQWlCLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNoQyxpQkFBaUIsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzFDLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2hGLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUVyRSxxRkFBcUY7UUFDckYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUE4Q0Qsc0hBQXNIO0lBRXRILFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDL0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ2xDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztTQUM5RDtRQUNELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDbkYsQ0FBQzs7NkdBbHZCVSxnQkFBZ0IsNkdBdURqQixhQUFhLDRHQUliLGFBQWE7aUdBM0RaLGdCQUFnQiwyeEJBRmhCLENBQUMsVUFBVSxDQUFDLHdKQ3pDekIsa0VBQ0E7MkZEMENhLGdCQUFnQjtrQkFONUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsV0FBVyxFQUFFLDBCQUEwQjtvQkFDdkMsU0FBUyxFQUFFLENBQUMsMEJBQTBCLENBQUM7b0JBQ3ZDLFNBQVMsRUFBRSxDQUFDLFVBQVUsQ0FBQztpQkFDeEI7OzBCQXdESSxNQUFNOzJCQUFDLGFBQWE7OzBCQUlwQixNQUFNOzJCQUFDLGFBQWE7NENBekRFLFNBQVM7c0JBQWpDLFNBQVM7dUJBQUMsWUFBWTtnQkFJdkIsUUFBUTtzQkFEUCxLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBS04sU0FBUztzQkFEUixLQUFLO2dCQUlOLEtBQUs7c0JBREosS0FBSztnQkFHTixhQUFhO3NCQURaLEtBQUs7Z0JBR04sUUFBUTtzQkFEUCxLQUFLO2dCQUdOLE9BQU87c0JBRE4sS0FBSztnQkFHTixVQUFVO3NCQURULEtBQUs7Z0JBR04sT0FBTztzQkFETixLQUFLO2dCQUdOLGNBQWM7c0JBRGIsS0FBSztnQkFHRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0ksbUJBQW1CO3NCQUE1QixNQUFNO2dCQUVFLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFFSSxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBRVAsTUFBTTtzQkFETCxNQUFNO2dCQUVHLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEluamVjdCxcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgV2ViVmlld2VyLCB7IENvcmVDb250cm9scyB9IGZyb20gJ0BwZGZ0cm9uL3dlYnZpZXdlcic7XHJcbmltcG9ydCB7IE51eGVvU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL0NvcmUvc2VydmljZXMvbnV4ZW8vbnV4ZW8uc2VydmljZSc7XHJcbmltcG9ydCB7IFBkZnRyb25TZXJ2aWNlIH0gZnJvbSAnLi9wZGZ0cm9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBUFBfQkFTRV9IUkVGIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgU2VjdXJlUGlwZSB9IGZyb20gJy4uLy4uLy4uL3BpcGVzL3NlY3VyZS5waXBlJztcclxuaW1wb3J0IHsgVGhyb3dTdG10IH0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXInO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9Db3JlL3NlcnZpY2VzL3RyYW5zbGF0aW9uL3RyYW5zbGF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ3VzdG9tVG9hc3RyU2VydmljZSB9IGZyb20gJy4uLy4uL2N1c3RvbS10b2FzdHIvc2VydmljZXMvY3VzdG9tLXRvYXN0ci5zZXJ2aWNlJztcclxuXHJcbi8qKlxyXG4gKiBBIHJldXNhYmxlIGZpbGUgdmlld2VyIGJhc2VkIG9uIFBERlRyb24gTGlicmFyeVxyXG4gKiBAdGl0bGVcclxuICogUERGVHJvbiBWaWV3ZXJcclxuICogQGV4YW1wbGVcclxuICogPGFwcC1wZGZ0cm9uXHJcbiAqICAgW2ZpbGVEYXRhXT1cImZpbGVEYXRhXCJcclxuICogICBbZWRpdE1vZGVdPVwiZmFsc2VcIlxyXG4gKiAgIFtkb2NJZF09XCJmaWxlSWRcIlxyXG4gKiAgIFtmaWxlVGl0bGVdPVwiZmlsZS50aXRsZVwiXHJcbiAqID5cclxuICogPC9hcHAtcGRmdHJvbj5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXBkZnRyb24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wZGZ0cm9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9wZGZ0cm9uLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbU2VjdXJlUGlwZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQZGZ0cm9uQ29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcclxuICBAVmlld0NoaWxkKCdmaWxlVmlld2VyJykgdmlld2VyUmVmOiBFbGVtZW50UmVmO1xyXG4gIHdlYlZpZXdlckluc3RhbmNlO1xyXG4gIC8qKiBEaXNhYmxlL0VuYWJsZSBBbm5vdGF0aW9uICovXHJcbiAgQElucHV0KClcclxuICBlZGl0TW9kZTogYm9vbGVhbjtcclxuICBASW5wdXQoKSBhY3Rpb25DbGlja2VkID0gZmFsc2U7IC8vIHVzZWQgdG8ga25vdyBpZiB0aGVyZSBpcyBhY3Rpb24gY2xpY2tlZCBvdXRzaWRlIHRvIHN0YXJ0IGVkaXQgbW9kZSBvciBub3RcclxuICBpc0RvY3VtZW50TG9hZGluZzogYm9vbGVhbjtcclxuICBpc0ZldGNoaW5nOiBib29sZWFuO1xyXG4gIC8qKiBEb2N1bWVudCB0aXRsZSAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgZmlsZVRpdGxlOiBzdHJpbmc7XHJcbiAgLyoqIERvY3VtZW50IElEICovXHJcbiAgQElucHV0KClcclxuICBkb2NJZDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpXHJcbiAgRE9DVU1FTlRfVFlQRSA9ICdhcHBsaWNhdGlvbi9wZGYnO1xyXG4gIEBJbnB1dCgpXHJcbiAgZmlsZURhdGE7XHJcbiAgQElucHV0KClcclxuICBmaXRNb2RlOiAnRml0V2lkdGgnIHwgJ0ZpdFBhZ2UnIHwgJ1pvb20nID0gJ0ZpdFdpZHRoJztcclxuICBASW5wdXQoKVxyXG4gIGF1dGhIZWFkZXI6IHN0cmluZztcclxuICBASW5wdXQoKVxyXG4gIGZpbGVVUkw6IHN0cmluZztcclxuICBASW5wdXQoKVxyXG4gIGNvcnJlc3BvbmRhbmNlO1xyXG5cclxuICBASW5wdXQoKSBzZWNyZWN5UHJvcGVydHk7IC8vIHVzZWQgdG8gYWRkIHdhdGVybWFyayBhY29yZGluZyBjZXJ0YWluIHNlY3JlY3kgbGV2ZWxcclxuICBASW5wdXQoKSBlZGl0aW5nVHlwZTtcclxuICBASW5wdXQoKSB1c2VyU2lnbmF0dXJlcztcclxuICBASW5wdXQoKSBzZWFyY2hTdHJpbmcgPSAnJzsgLy8gc3RyaW5nIHRvIHNlYXJjaCBmb3IgaXQgaW4gdGhlIGRvY3VtZW50XHJcblxyXG4gIEBJbnB1dCgpIHRyYWNrU2lnbmF0dXJlID0gZmFsc2U7IC8vIHRvIGVuYWJsZSB0cmFja2luZyBzaWduYXR1cmUgcG9zaXRpb24gYW5kIGVtaXQgaXQgYWZ0ZXIgZXZlcnkgY2hhbmdlIGl0IHNpZ25hdHVyZVxyXG4gIEBPdXRwdXQoKSBvblNpZ25hdHVyZVRyYWNraW5nID0gbmV3IEV2ZW50RW1pdHRlcigpOyAvLyBldmVudCB0byBlbWl0IHNpZ25hdHVyZSBjaGFuZ2VzXHJcblxyXG4gIEBJbnB1dCgpIHVzZU91dHNpZGVBbm90YXRpb25zID0gZmFsc2U7IC8vIGZsYWdlIHRvIGluZGljYXQgaWYgdXNpbmcgb3V0IHNpZGUgYW5vdGF0aW9ucyBvciBub3RcclxuICBASW5wdXQoKSBpbXBvcnRlZEFub3RhdGlvbnMgOyAvLyBpbXBvcnRlZCBhbm90YXRpb25zIGZyb20gb3V0c2lkZVxyXG4gIEBJbnB1dCgpIGFsbG93RG93bmxvYWRTZWNyZXRGaWxlID0gdHJ1ZSA7IC8vIGFsbG93IG9yIHByZXZlbnQgZG93bmxvYWQgc2NyZWN0IGZpbGVzXHJcbiAgQElucHV0KCkgYWxsb3dQcmludFNlY3JldEZpbGUgPSB0cnVlIDsgLy8gYWxsb3cgb3IgcHJldmVudCBwcmludCBzY3JlY3QgZmlsZXNcclxuXHJcbiAgQE91dHB1dCgpIG9uQWRkaW5nQW5vdGF0aW9uID0gbmV3IEV2ZW50RW1pdHRlcigpOyAvLyB1c2VkIHRvIGV4cG9ydCBhbGwgYW5vdGF0aW9ucyB0byBvdXRzaWRlXHJcbiAgQE91dHB1dCgpXHJcbiAgZXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBTaWduYXR1cmVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTsgLy8gdXNlZCB0byBleHBvcnQgc2lnbmF0dXJlIHRvIG91dHNpZGVcclxuICBmaXJzdFRpbWVMb2FkID0gdHJ1ZTsgLy9mbGFnZSB0byBjb250cm9sIGltcG9ydGluZyBzaWduYXR1cmVzIGluIHRoZSBmaXJzdCB0aW1lIGxvYWQgb25seVxyXG4gIGZpcnN0U2lnbmF0dXJlTG9hZCA9IHRydWU7IC8vIGZsYWdlIHRvIHBhc3MgZmlyc3QgbG9hZCBvZiBpbXBvcnRlZCBzaWduYXR1cmVzIHdpdGhvdXQgZW1pdHRpbmcgdGhlIGV2ZW50IFxyXG4gIG5ld1NpZ25DcmVhdGlvbiA9IGZhbHNlOyAvLyBmbGFnZSB0byBpbmRpY2F0ZSBzaWduYXR1cmUgY3JlYXRpb24gaXMgY3JlYXRlZCBvciBjaG9vc2VkIGZyb20gc3RvcmVkIG9uZXNcclxuICB0cmFuc2VsYXRpb25TdWJzY3JpdGlvbiA6IFN1YnNjcmlwdGlvbjtcclxuICBpc0FyYWJpYztcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBwZGZ0cm9uU2VydmljZTogUGRmdHJvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG51eGVvOiBOdXhlb1NlcnZpY2UsXHJcbiAgICBASW5qZWN0KEFQUF9CQVNFX0hSRUYpIHByaXZhdGUgYmFzZUhyZWY6IHN0cmluZyxcclxuICAgIHByaXZhdGUgc2VjdXJlUGlwZTogU2VjdXJlUGlwZSxcclxuICAgIHByaXZhdGUgdHJhbnNsYXRpb25TZXJ2aWNlIDogVHJhbnNsYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdGVyIDogQ3VzdG9tVG9hc3RyU2VydmljZSxcclxuICAgIEBJbmplY3QoJ2Vudmlyb25tZW50JykgcHJpdmF0ZSBlbnZpcm9ubWVudFxyXG4gICkgeyB9XHJcblxyXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy50cmFuc2VsYXRpb25TdWJzY3JpdGlvbiA9IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLmlzQXJhYmljLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLmlzQXJhYmljID0gcmVzIDtcclxuICAgIH0pXHJcbiAgIH1cclxuXHJcbiAgYXN5bmMgbmdBZnRlclZpZXdJbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5yZWNpdmVkU2VhcmNoU3RyaW5nc0FycmF5ID0gdGhpcy5zZWFyY2hTdHJpbmcudHJpbSgpID8gdGhpcy5zZWFyY2hTdHJpbmcuc3BsaXQoJywnKSA6IFtdO1xyXG5cclxuICAgIGlmICh0aGlzLmZpbGVUaXRsZS5lbmRzV2l0aCgnLnBwdCcpKSB7XHJcbiAgICAgIHRoaXMuRE9DVU1FTlRfVFlQRSA9ICdhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludCc7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZmlsZVRpdGxlLmVuZHNXaXRoKCcucHB0eCcpKSB7XHJcbiAgICAgIHRoaXMuRE9DVU1FTlRfVFlQRSA9XHJcbiAgICAgICAgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5wcmVzZW50YXRpb24nO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmZpbGVUaXRsZS5lbmRzV2l0aCgnLmRvYycpKSB7XHJcbiAgICAgIHRoaXMuRE9DVU1FTlRfVFlQRSA9ICdhcHBsaWNhdGlvbi9tc3dvcmQnO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmZpbGVUaXRsZS5lbmRzV2l0aCgnLmRvY3gnKSkge1xyXG4gICAgICB0aGlzLkRPQ1VNRU5UX1RZUEUgPVxyXG4gICAgICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCc7XHJcbiAgICB9XHJcbiAgICBXZWJWaWV3ZXIoXHJcbiAgICAgIHtcclxuICAgICAgICBwYXRoOiB0aGlzLmJhc2VIcmVmICsgJy9hc3NldHMvcGRmdHJvbnMnLFxyXG4gICAgICAgIGZvcmNlQ2xpZW50U2lkZUluaXQ6IHRydWUsXHJcbiAgICAgICAgc3RyZWFtaW5nOiB0cnVlLFxyXG4gICAgICAgIGxpY2Vuc2VLZXk6IHRoaXMuZW52aXJvbm1lbnQucGRmdHJvbkxpY2VuY2VLZXksXHJcbiAgICAgICAgY3NzOiB0aGlzLmlzQXJhYmljID8gKHRoaXMuYmFzZUhyZWYgKyAnL2Fzc2V0cy9zdHlsZXMvYXItbXlwZGZ0cm9uLmNzcycpIDogKHRoaXMuYmFzZUhyZWYgKyAnL2Fzc2V0cy9zdHlsZXMvZW4tbXlwZGZ0cm9uLmNzcycpLFxyXG4gICAgICAgIGFubm90YXRpb25Vc2VyOiB0aGlzLm51eGVvLm51eGVvQ2xpZW50LnVzZXIucHJvcGVydGllcy5maXJzdE5hbWUgKyAnICcgKyB0aGlzLm51eGVvLm51eGVvQ2xpZW50LnVzZXIucHJvcGVydGllcy5sYXN0TmFtZSxcclxuICAgICAgICBkaXNhYmxlZEVsZW1lbnRzOiBbJ2Rvd25sb2FkQnV0dG9uJywgJ3ByaW50QnV0dG9uJ10sXHJcblxyXG4gICAgICB9LFxyXG4gICAgICB0aGlzLnZpZXdlclJlZi5uYXRpdmVFbGVtZW50XHJcbiAgICApLnRoZW4oYXN5bmMgKGluc3RhbmNlKSA9PiB7XHJcbiAgICAgIHRoaXMuaXNBcmFiaWMgPyBpbnN0YW5jZS5zZXRMYW5ndWFnZSgnYXInKSA6IGluc3RhbmNlLnNldExhbmd1YWdlKCdlbicpIDtcclxuICAgICAgdGhpcy5wZGZ0cm9uU2VydmljZS5pbnN0YW5jZSA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UgPSBpbnN0YW5jZTtcclxuICAgICAgaWYodGhpcy5jb3JyZXNwb25kYW5jZS5mYWNldHMuaW5kZXhPZignY3RvY3InKSA+IC0xKXtcclxuICAgICAgICB0aGlzLmZpbGVXaXRoT2NyID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnBhZ2VzID0gSlNPTi5wYXJzZSh0aGlzLmNvcnJlc3BvbmRhbmNlLnByb3BlcnRpZXNbJ2N0b2NyOnJlY29nbml6ZWRKc29uJ10pO1xyXG4gICAgICAgIC8vIG92ZXJyaWRlIHNlYXJjaCBmdW50aW9uIHRvIHVzZSBvdXIgc2VhcmNoIGluIG9jciBub3QgZGVmdWx0IHNlYXJjaFxyXG4gICAgICAgIGluc3RhbmNlLm92ZXJyaWRlU2VhcmNoRXhlY3V0aW9uKHRoaXMuc2VhcmNoRm4pO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgIC8vIGlmIG5vIG9jciB0aGVuIGFkZCBzZWFyY2ggbGlzbmVyIHRvIGxpc25lIHRvIGludGVybmFsIHNlYXJjaCBhbmQgY2F0Y2ggcmVzdWx0c1xyXG4gICAgICAgICAgICB0aGlzLmFkZFNlYXJjaExpc3RuZXIoKTtcclxuICAgICAgICB9XHJcbiAgICAgIHRoaXMuYWRkUHJpbnRCdXR0b24oKTtcclxuICAgICAgdGhpcy5hZGREb3dubG9hZEJ1dHRvbigpO1xyXG4gICAgICB0aGlzLmltcG9ydFNpZ25hdHVyZSgpO1xyXG4gICAgICB0aGlzLmV4cG9ydGluZ1NpZ25hdHVyZSgpO1xyXG4gICAgICB0aGlzLmRlbGV0ZUFubm90YXRpb24oKTtcclxuICAgICAgdGhpcy5leHBvcnRpbmdTYXZlZFNpZ25hdHVyZSgpO1xyXG4gICAgICBpZih0aGlzLnVzZU91dHNpZGVBbm90YXRpb25zKXtcclxuICAgICAgICB0aGlzLmltcG9ydEFub3RhdGlvbnNGcm9tT3V0c2lkZSgpO1xyXG4gICAgICAgIHRoaXMuZXhwb3J0QW5vdGF0aW9uc1RvT3V0c2lkZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyLnNldFNlYXJjaEhpZ2hsaWdodENvbG9ycyh7XHJcbiAgICAgICAgLy8gc2V0U2VhcmNoSGlnaGxpZ2h0Q29sb3JzIGFjY2VwdHMgYm90aCBBbm5vdGF0aW9ucy5Db2xvciBvYmplY3RzIG9yICdyZ2JhJyBzdHJpbmdzXHJcbiAgICAgICAgc2VhcmNoUmVzdWx0OiBuZXcgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5Bbm5vdGF0aW9ucy5Db2xvcigyNTAsMjA2LDAsMC41MDE5NiksXHJcbiAgICAgICAgYWN0aXZlU2VhcmNoUmVzdWx0OiBuZXcgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5Bbm5vdGF0aW9ucy5Db2xvcigyNTAsMjA2LDAsMC41MDE5NiksXHJcbiAgICAgIH0pO1xyXG4gICAgICBpZih0aGlzLnJlY2l2ZWRTZWFyY2hTdHJpbmdzQXJyYXkubGVuZ3RoICE9PSAwKXtcclxuICAgICAgICB0aGlzLmF1dG9tYXRpY1NlYXJjaCh0aGlzLnJlY2l2ZWRTZWFyY2hTdHJpbmdzQXJyYXkpO1xyXG4gICAgfVxyXG4gICAgICB0aGlzLmxvYWREb2N1bWVudCgpO1xyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaW1wb3J0QW5vdGF0aW9uc0Zyb21PdXRzaWRlKCl7XHJcbiAgICBjb25zdCBkb2N1bWVudFZpZXdlciA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyO1xyXG5cclxuICAgIGRvY3VtZW50Vmlld2VyLm9uKCdkb2N1bWVudExvYWRlZCcsICgpID0+IHtcclxuICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5hbm5vdE1hbmFnZXIuaW1wb3J0QW5ub3RhdGlvbnModGhpcy5pbXBvcnRlZEFub3RhdGlvbnMpXHJcbiAgICB9KVxyXG4gICAgLy8gLnRoZW4oYW5ub3RhdGlvbnMgPT4ge1xyXG4gICAgLy8gICBhbm5vdGF0aW9ucy5mb3JFYWNoKGFubm90YXRpb24gPT4ge1xyXG4gICAgLy8gICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLnJlZHJhd0Fubm90YXRpb24oYW5ub3RhdGlvbik7XHJcbiAgICAvLyAgIH0pO1xyXG4gICAgLy8gfSk7XHJcbiAgfVxyXG5cclxuICAvLyBleGN0cmFjdCBhbGwgYW5vdGF0aW9ucyBvbiB0aGUgZmlsZSBhbmQgc2VuZCBpdCBvdXQgc2lkZSB0byBiZSBzYXZlZCBhbmQgbGVhdmUgdGhlIGZpbGUgYXMgaXQgaXMgd2l0aG91dCBhbnkgYW5vdGF0aW9ucyBvbiBpdFxyXG4gIGV4cG9ydEFub3RhdGlvbnNUb091dHNpZGUoKXtcclxuICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLm9uKCdhbm5vdGF0aW9uQ2hhbmdlZCcsIChhbm5vdGF0aW9ucywgYWN0aW9uLCB7IGltcG9ydGVkIH0pID0+IHtcclxuICAgICAgaWYgKGltcG9ydGVkKSByZXR1cm47XHJcbiAgICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLmV4cG9ydEFubm90YXRpb25zKCkudGhlbihleGN0cmFjdGVkQW5vdGF0aW9ucyA9PiB7XHJcbiAgICAgICAgdGhpcy5vbkFkZGluZ0Fub3RhdGlvbi5lbWl0KGV4Y3RyYWN0ZWRBbm90YXRpb25zKTtcclxuICAgICAgfSk7XHJcbiAgICAgIC8vIGlmIHRyYWNraW5nIHNpZ25hdHVyZSBsb2NhdGlvbiBpcyBlbmFibGUgdGhlbiBlbWl0IHNpZ25hdHVyZSBvdXRzaWRlIHdpdGggZXZlcnkgY2hhbmdlcyBpbiBpdFxyXG4gICAgICBpZih0aGlzLnRyYWNrU2lnbmF0dXJlKXtcclxuICAgICAgICB0aGlzLm9uU2lnbmF0dXJlVHJhY2tpbmcuZW1pdCh7YW5vdGF0aW9ucyA6IGFubm90YXRpb25zICwgYWN0aW9uIDogYWN0aW9ufSlcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpbXBvcnRTaWduYXR1cmUoKSB7XHJcbiAgICBjb25zdCBkb2N1bWVudFZpZXdlciA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyO1xyXG4gICAgY29uc3Qgc2lnbmF0dXJlVG9vbCA9IGRvY3VtZW50Vmlld2VyLmdldFRvb2woJ0Fubm90YXRpb25DcmVhdGVTaWduYXR1cmUnKTtcclxuXHJcbiAgICBkb2N1bWVudFZpZXdlci5vbignZG9jdW1lbnRMb2FkZWQnLCAoKSA9PiB7XHJcbiAgICAgIGlmKHRoaXMuZmlyc3RUaW1lTG9hZCl7XHJcbiAgICAgICAgc2lnbmF0dXJlVG9vbC5pbXBvcnRTaWduYXR1cmVzKFsuLi50aGlzLnVzZXJTaWduYXR1cmVzXSk7XHJcbiAgICAgICAgdGhpcy5maXJzdFRpbWVMb2FkID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIFxyXG4gIGV4cG9ydGluZ1NhdmVkU2lnbmF0dXJlKCkge1xyXG4gICAgY29uc3QgZG9jdW1lbnRWaWV3ZXIgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlcjtcclxuICAgIGNvbnN0IFNpZ25hdHVyZUNyZWF0ZVRvb2wgPSBkb2N1bWVudFZpZXdlci5nZXRUb29sKCdBbm5vdGF0aW9uQ3JlYXRlU2lnbmF0dXJlJylcclxuICAgIFNpZ25hdHVyZUNyZWF0ZVRvb2wub24oJ3NpZ25hdHVyZVNhdmVkJywgKGFubm90YXRpb24pID0+IHtcclxuICAgICAgaWYoIXRoaXMuZmlyc3RTaWduYXR1cmVMb2FkKXtcclxuICAgICAgICBjb25zb2xlLmxvZygnc2lnbmF0dXJlIHNhdmVkIHRyaWdlcmVkJyk7XHJcbiAgICAgICAgdGhpcy5uZXdTaWduQ3JlYXRpb24gPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZmlyc3RTaWduYXR1cmVMb2FkID0gZmFsc2U7XHJcbiAgICB9KTs7XHJcbiAgfVxyXG4gIFxyXG4gIGV4cG9ydGluZ1NpZ25hdHVyZSgpIHtcclxuICAgIGNvbnN0IGRvY3VtZW50Vmlld2VyID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXI7XHJcbiAgICBjb25zdCBTaWduYXR1cmVDcmVhdGVUb29sID0gZG9jdW1lbnRWaWV3ZXIuZ2V0VG9vbCgnQW5ub3RhdGlvbkNyZWF0ZVNpZ25hdHVyZScpXHJcbiAgICBTaWduYXR1cmVDcmVhdGVUb29sLm9uKCdhbm5vdGF0aW9uQWRkZWQnLCAoYW5ub3RhdGlvbikgPT4ge1xyXG4gICAgICBpZiAoYW5ub3RhdGlvbiAmJiB0aGlzLm5ld1NpZ25DcmVhdGlvbikge1xyXG4gICAgICAgIHRoaXMubmV3U2lnbkNyZWF0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5leHRyYWN0QW5vdGF0aW9uKGFubm90YXRpb24gLCBkb2N1bWVudFZpZXdlcik7XHJcbiAgICAgICAgY29uc29sZS5sb2coYW5ub3RhdGlvbilcclxuICAgICAgfVxyXG4gICAgfSk7O1xyXG4gIH1cclxuXHJcbiAgZXh0cmFjdEFub3RhdGlvbihhbm5vdGF0aW9uICwgZG9jdW1lbnRWaWV3ZXIpe1xyXG4gICAgaWYoYW5ub3RhdGlvblsnaW1hZ2UnXSl7XHJcbiAgICAgIC8vIGNvbnZlcnQgYmFzZTY0IHNpZ25hdHVyZSBpbnRvIGZpbGUgYW5kIGVtaXQgaXQgdG8gb3V0IHNpZGUgXHJcbiAgICAgIGxldCBiYXNlNjRJbWcgPSBhbm5vdGF0aW9uWydpbWFnZSddWydjdXJyZW50U3JjJ107XHJcbiAgICAgIHZhciBhcnIgPSBiYXNlNjRJbWcuc3BsaXQoJywnKSxcclxuICAgICAgbWltZSA9IGFyclswXS5tYXRjaCgvOiguKj8pOy8pWzFdLFxyXG4gICAgICBic3RyID0gYXRvYihhcnJbMV0pLCBcclxuICAgICAgbiA9IGJzdHIubGVuZ3RoLCBcclxuICAgICAgdThhcnIgPSBuZXcgVWludDhBcnJheShuKTtcclxuICAgICAgd2hpbGUobi0tKXtcclxuICAgICAgICAgIHU4YXJyW25dID0gYnN0ci5jaGFyQ29kZUF0KG4pO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBuYW1lID0gbWltZS5yZXBsYWNlKCcvJyAsICcuJylcclxuICAgICAgbGV0IG15RmlsZSA9IG5ldyBGaWxlKFt1OGFycl0sICdteVNpZ25hdHVyZS5wbmcnLCB7dHlwZTptaW1lfSk7XHJcbiAgICAgIHRoaXMuU2lnbmF0dXJlRXZlbnQuZW1pdCh7IGRhdGE6IG15RmlsZSwgZXZlbnROYW1lOiAnZXhwb3J0JyB9KTtcclxuXHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5leHRyYWN0QW5ub3RhdGlvblNpZ25hdHVyZShhbm5vdGF0aW9uICwgZG9jdW1lbnRWaWV3ZXIpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBleHRyYWN0QW5ub3RhdGlvblNpZ25hdHVyZShhbm5vdGF0aW9uLCBkb2NWaWV3ZXIpIHtcclxuICAgIC8vIENyZWF0ZSBhIG5ldyBDYW52YXMgdG8gZHJhdyB0aGUgQW5ub3RhdGlvbiBvblxyXG4gICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAvLyBSZWZlcmVuY2UgdGhlIGFubm90YXRpb24gZnJvbSB0aGUgRG9jdW1lbnRcclxuICAgIGNvbnN0IHBhZ2VNYXRyaXggPSBkb2NWaWV3ZXIuZ2V0RG9jdW1lbnQoKS5nZXRQYWdlTWF0cml4KGFubm90YXRpb24uUGFnZU51bWJlcik7XHJcbiAgICAvLyBTZXQgdGhlIGhlaWdodCAmIHdpZHRoIG9mIHRoZSBjYW52YXMgdG8gbWF0Y2ggdGhlIGFubm90YXRpb25cclxuICAgIGNhbnZhcy5oZWlnaHQgPSBhbm5vdGF0aW9uLkhlaWdodDtcclxuICAgIGNhbnZhcy53aWR0aCA9IGFubm90YXRpb24uV2lkdGg7XHJcbiAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgIC8vIFRyYW5zbGF0ZSB0aGUgQW5ub3RhdGlvbiB0byB0aGUgdG9wIFRvcCBMZWZ0IENvcm5lciBvZiB0aGUgQ2FudmFzIGllICgwLCAwKVxyXG4gICAgY3R4LnRyYW5zbGF0ZSgtYW5ub3RhdGlvbi5YLCAtYW5ub3RhdGlvbi5ZKTtcclxuICAgIC8vIERyYXcgdGhlIEFubm90YXRpb24gb250byB0aGUgQ2FudmFzXHJcbiAgICBhbm5vdGF0aW9uLmRyYXcoY3R4LCBwYWdlTWF0cml4KTtcclxuICAgIC8vIENvbnZlcnQgdGhlIENhbnZhcyB0byBhIEJsb2IgT2JqZWN0IGZvciBVcGxvYWRcclxuICAgIGNhbnZhcy50b0Jsb2IoKGJsb2IpID0+IHtcclxuICAgICAgLy8gQ2FsbCB5b3VyIEJsb2IgU3RvcmFnZSBVcGxvYWQgRnVuY3Rpb25cclxuICAgICAgbGV0IG5hbWUgPSBibG9iLnR5cGUucmVwbGFjZSgnLycgLCAnLicpXHJcbiAgICAgIGxldCBteUZpbGUgPSBuZXcgRmlsZShbYmxvYl0sIG5hbWUpO1xyXG4gICAgICB0aGlzLlNpZ25hdHVyZUV2ZW50LmVtaXQoeyBkYXRhOiBteUZpbGUsIGV2ZW50TmFtZTogJ2V4cG9ydCcgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZUFubm90YXRpb24oKSB7XHJcbiAgICBjb25zdCBkb2N1bWVudFZpZXdlciA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyO1xyXG4gICAgY29uc3QgU2lnbmF0dXJlQ3JlYXRlVG9vbCA9IGRvY3VtZW50Vmlld2VyLmdldFRvb2woJ0Fubm90YXRpb25DcmVhdGVTaWduYXR1cmUnKTtcclxuICAgIFNpZ25hdHVyZUNyZWF0ZVRvb2wub24oJ3NpZ25hdHVyZURlbGV0ZWQnLCAoYW5ub3RhdGlvbiwgaW5kZXgpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coJ3RoZXJlIHdlcmUgYW5ub3RhdGlvbnMgZGVsZXRlZCcpO1xyXG4gICAgICB0aGlzLnVzZXJTaWduYXR1cmVzLnNwbGljZShpbmRleCAsIDEpO1xyXG4gICAgICB0aGlzLlNpZ25hdHVyZUV2ZW50LmVtaXQoeyBkYXRhOiB7IHNpZ25hdHVyZTogYW5ub3RhdGlvbiwgaW5kZXg6IGluZGV4IH0sIGV2ZW50TmFtZTogJ2RlbGV0ZScgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFkZERvd25sb2FkQnV0dG9uKCkge1xyXG4gICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5zZXRIZWFkZXJJdGVtcygoaGVhZGVyKSA9PiB7XHJcbiAgICAgIGhlYWRlci5wdXNoKHtcclxuICAgICAgICB0eXBlOiAnYWN0aW9uQnV0dG9uJyxcclxuICAgICAgICBpbWc6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgY2xhc3M9XCJiaSBiaS1maWxlLWVhcm1hcmstYXJyb3ctZG93blwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIj4gPHBhdGggZD1cIk04LjUgNi41YS41LjUgMCAwIDAtMSAwdjMuNzkzTDYuMzU0IDkuMTQ2YS41LjUgMCAxIDAtLjcwOC43MDhsMiAyYS41LjUgMCAwIDAgLjcwOCAwbDItMmEuNS41IDAgMCAwLS43MDgtLjcwOEw4LjUgMTAuMjkzVjYuNXpcIi8+IDxwYXRoIGQ9XCJNMTQgMTRWNC41TDkuNSAwSDRhMiAyIDAgMCAwLTIgMnYxMmEyIDIgMCAwIDAgMiAyaDhhMiAyIDAgMCAwIDItMnpNOS41IDNBMS41IDEuNSAwIDAgMCAxMSA0LjVoMlYxNGExIDEgMCAwIDEtMSAxSDRhMSAxIDAgMCAxLTEtMVYyYTEgMSAwIDAgMSAxLTFoNS41djJ6XCIvPjwvc3ZnPicsXHJcbiAgICAgICAgdGl0bGU6IHRoaXMuaXNBcmFiaWMgPyAn2KrZhtiy2YrZhCcgOiAnRG93bmxvYWQnLFxyXG4gICAgICAgIG9uQ2xpY2s6IGFzeW5jICgpID0+IHtcclxuICAgICAgICAgIGlmKHRoaXMuYWxsb3dEb3dubG9hZFNlY3JldEZpbGUgfHwgKCF0aGlzLmFsbG93RG93bmxvYWRTZWNyZXRGaWxlICYmIHRoaXMuY29ycmVzcG9uZGFuY2UucHJvcGVydGllc1t0aGlzLnNlY3JlY3lQcm9wZXJ0eV0gJiYgdGhpcy5jb3JyZXNwb25kYW5jZS5wcm9wZXJ0aWVzW3RoaXMuc2VjcmVjeVByb3BlcnR5XSA9PT0gJ05vcm1hbCcpKXtcclxuICAgICAgICAgICAgY29uc3QgeyBEb2N1bWVudFZpZXdlciwgQW5ub3RhdGlvbk1hbmFnZXIsIFNhdmVPcHRpb25zIH0gPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLkNvcmVDb250cm9scztcclxuICAgICAgICAgICAgLy8gY29uc3QgeGZkZlN0cmluZyA9IGF3YWl0IEFubm90YXRpb25NYW5hZ2VyLmV4cG9ydEFubm90YXRpb25zKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNhdmVPcHRpb25zID0gU2F2ZU9wdGlvbnM7XHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgZmlsZW5hbWU6IHRoaXMuY29ycmVzcG9uZGFuY2UudGl0bGUgPyB0aGlzLmNvcnJlc3BvbmRhbmNlLnRpdGxlIDogJ215RG9jdW1lbnQucGRmJyxcclxuICAgICAgICAgICAgICAvLyB4ZmRmU3RyaW5nLFxyXG4gICAgICAgICAgICAgIGZsYWdzOiBzYXZlT3B0aW9ucy5MSU5FQVJJWkVELFxyXG4gICAgICAgICAgICAgIGRvd25sb2FkVHlwZTogJ3BkZidcclxuICAgICAgICAgICAgfTtcclxuICBcclxuICAgICAgICAgICAgdGhpcy5wZGZ0cm9uU2VydmljZS5pbnN0YW5jZS5kb3dubG9hZFBkZihvcHRpb25zKTtcclxuICAgICAgICAgICAgdGhpcy5ldmVudHMubmV4dCgnZG93bmxvYWQnKTtcclxuICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXIuc2hvdygnZXJyb3InICwgJ2Vycm9yJyAsICdjYW5vdF9kb3dubG9hZF9zY3JlY3QnKTtcclxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBsZXQgdXJsID0gdGhpcy5jb3JyZXNwb25kYW5jZS5wcm9wZXJ0aWVzLmNvbnRlbnQuZGF0YTtcclxuICAgICAgICAgIC8vIGxldCBmaWxlTmFtZSA9IHRoaXMuY29ycmVzcG9uZGFuY2UucHJvcGVydGllcy5jb250ZW50Lm5hbWU7XHJcbiAgICAgICAgICAvLyBpZiAodXJsICYmIGZpbGVOYW1lKSB7XHJcbiAgICAgICAgICAvLyAgIGxldCBzYWZlVXJsID0gdGhpcy5zZWN1cmVQaXBlLnRyYW5zZm9ybSh1cmwpO1xyXG4gICAgICAgICAgLy8gICBzYWZlVXJsLnN1YnNjcmliZSgodXJsOiBhbnkpID0+IHtcclxuICAgICAgICAgIC8vICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgICAgLy8gICAgIGxpbmsuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgIC8vICAgICBsaW5rLmhyZWYgPSB1cmwuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eTtcclxuICAgICAgICAgIC8vICAgICBsaW5rLmRvd25sb2FkID0gZmlsZU5hbWU7XHJcbiAgICAgICAgICAvLyAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcclxuICAgICAgICAgIC8vICAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICAgICAgICAvLyAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcclxuICAgICAgICAgIC8vICAgICB0aGlzLmV2ZW50cy5uZXh0KCdkb3dubG9hZCcpO1xyXG4gICAgICAgICAgLy8gICB9KTtcclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYWRkUHJpbnRCdXR0b24oKSB7XHJcbiAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLnNldEhlYWRlckl0ZW1zKChoZWFkZXIpID0+IHtcclxuICAgICAgaGVhZGVyLnB1c2goe1xyXG4gICAgICAgIHR5cGU6ICdhY3Rpb25CdXR0b24nLFxyXG4gICAgICAgIGltZzogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6I2FiYjBjNDt9PC9zdHlsZT48L2RlZnM+PHRpdGxlPmljb24gLSBoZWFkZXIgLSBwcmludCAtIGxpbmU8L3RpdGxlPjxwYXRoIGNsYXNzPVwiY2xzLTFcIiBkPVwiTTIwLDZIMThWMkg2VjZINEEyLDIsMCwwLDAsMiw4djlhMiwyLDAsMCwwLDIsMkg2djNIMThWMTloMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDIwLDZaTTgsNGg4VjZIOFptOCwxNkg4VjE2aDhabTQtM0gxOFYxNEg2djNINFY4SDIwWm0tNC03aDJ2MkgxNlptLTMsMGgydjJIMTNaXCI+PC9wYXRoPjwvc3ZnPicsXHJcbiAgICAgICAgdGl0bGU6IHRoaXMuaXNBcmFiaWMgPyBcIti32KjYp9i52KlcIiA6ICdQcmludCcsXHJcbiAgICAgICAgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgaWYodGhpcy5hbGxvd1ByaW50U2VjcmV0RmlsZSB8fCAoIXRoaXMuYWxsb3dQcmludFNlY3JldEZpbGUgJiYgdGhpcy5jb3JyZXNwb25kYW5jZS5wcm9wZXJ0aWVzW3RoaXMuc2VjcmVjeVByb3BlcnR5XSAmJiB0aGlzLmNvcnJlc3BvbmRhbmNlLnByb3BlcnRpZXNbdGhpcy5zZWNyZWN5UHJvcGVydHldID09PSAnTm9ybWFsJykpe1xyXG4gICAgICAgICAgICB0aGlzLnBkZnRyb25TZXJ2aWNlLmluc3RhbmNlLnByaW50KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnRzLm5leHQoJ3ByaW50Jyk7XHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgdGhpcy50b2FzdGVyLnNob3coJ2Vycm9yJyAsICdlcnJvcicgLCAnY2Fub3RfcHJpbnRfc2NyZWN0Jyk7XHJcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYWRkV2F0ZXJtYXJrKCkge1xyXG4gICAgY29uc3QgdXNlcmluZm8gPSB0aGlzLm51eGVvLm51eGVvQ2xpZW50LnVzZXIucHJvcGVydGllcztcclxuICAgIHRoaXMucGRmdHJvblNlcnZpY2UuYWRkV2F0ZXJtYXJrKFxyXG4gICAgICBgJHt1c2VyaW5mby51c2VybmFtZX0gICAgYFxyXG4gICAgICAvLyBgJHt1c2VyaW5mby5maXJzdE5hbWV9ICR7XHJcbiAgICAgIC8vICAgdXNlcmluZm8ubGFzdE5hbWVcclxuICAgICAgLy8gfSBgXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbG9hZERvY3VtZW50KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLndlYlZpZXdlckluc3RhbmNlIHx8ICghdGhpcy5maWxlRGF0YSAmJiAhdGhpcy5maWxlVVJMKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCB7IGRvY1ZpZXdlciwgYW5ub3RNYW5hZ2VyLCBBbm5vdGF0aW9ucyB9ID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZTtcclxuICAgIGRvY1ZpZXdlci5vbignZG9jdW1lbnRMb2FkZWQnLCAoKSA9PiB7XHJcbiAgICAgIGxldCBmaXRNb2RlID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5GaXRNb2RlLkZpdFdpZHRoO1xyXG4gICAgICBpZiAodGhpcy5maXRNb2RlID09PSAnRml0UGFnZScpIHtcclxuICAgICAgICBmaXRNb2RlID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5GaXRNb2RlLkZpdFBhZ2U7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5maXRNb2RlID09PSAnWm9vbScpIHtcclxuICAgICAgICBmaXRNb2RlID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5GaXRNb2RlLlpvb207XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5zZXRGaXRNb2RlKGZpdE1vZGUpO1xyXG4gICAgfSk7XHJcbiAgICBpZiAoIXRoaXMuZWRpdE1vZGUpIHtcclxuICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5hbm5vdE1hbmFnZXIuc2V0UmVhZE9ubHkodHJ1ZSk7XHJcbiAgICAgIC8vIGluc3RhbmNlLmVuYWJsZVRvb2xzKFtdKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmZpbGVVUkwgJiYgdGhpcy5maWxlVVJMLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmxvYWREb2N1bWVudCh0aGlzLmZpbGVVUkwsIHtcclxuICAgICAgICB4b2RzdHJlYW1pbmc6dHJ1ZSxcclxuICAgICAgICBjdXN0b21IZWFkZXJzOiB7XHJcbiAgICAgICAgICBBdXRob3JpemF0aW9uOiB0aGlzLmF1dGhIZWFkZXIsXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5sb2FkRG9jdW1lbnQoXHJcbiAgICAgICAgbmV3IEJsb2IoW25ldyBVaW50OEFycmF5KHRoaXMuZmlsZURhdGEpXSwgeyB0eXBlOiB0aGlzLkRPQ1VNRU5UX1RZUEUgfSksXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZmlsZW5hbWU6IHRoaXMuZmlsZVRpdGxlLFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzRmV0Y2hpbmcgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLmNvcnJlc3BvbmRhbmNlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgLy8gaWYgd2UgbmVlZCB0byBjaGVjayBvbiBzZWNyZWN5IGxldmVsIGZvciBhZGRpbmcgd2F0ZXIgbWFyayBvciBub3QgXHJcbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LmVuYWJsZVZpZXdlcldhdGVyTWFyayAmJiB0aGlzLnNlY3JlY3lQcm9wZXJ0eSkge1xyXG4gICAgICAgIC8vIGNoZWNrIGZvciBzZWNyZWN5IGxldmVsIGJlZm9yIGFkZGluZyB3YXRlcm1hcmtcclxuICAgICAgICBpZiAodGhpcy5jb3JyZXNwb25kYW5jZS5wcm9wZXJ0aWVzW3RoaXMuc2VjcmVjeVByb3BlcnR5XSAmJiB0aGlzLmNvcnJlc3BvbmRhbmNlLnByb3BlcnRpZXNbdGhpcy5zZWNyZWN5UHJvcGVydHldICE9PSAnTm9ybWFsJykge1xyXG4gICAgICAgICAgdGhpcy5hZGRXYXRlcm1hcmsoKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLmVudmlyb25tZW50LmVuYWJsZVZpZXdlcldhdGVyTWFyayAmJiAhdGhpcy5zZWNyZWN5UHJvcGVydHkpIHtcclxuICAgICAgICB0aGlzLmFkZFdhdGVybWFyaygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBleHBvcnRBc0Jsb2IoKTogUHJvbWlzZTxCbG9iPiB7XHJcbiAgICBjb25zdCBkb2MgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlci5nZXREb2N1bWVudCgpO1xyXG4gICAgY29uc3QgeGZkZlN0cmluZyA9XHJcbiAgICAgIGF3YWl0IHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLmV4cG9ydEFubm90YXRpb25zKCk7XHJcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgZG9jLmdldEZpbGVEYXRhKHtcclxuICAgICAgLy8gc2F2ZXMgdGhlIGRvY3VtZW50IHdpdGggYW5ub3RhdGlvbnMgaW4gaXRcclxuICAgICAgeGZkZlN0cmluZyxcclxuICAgIH0pO1xyXG4gICAgY29uc3QgYXJyID0gbmV3IFVpbnQ4QXJyYXkoZGF0YSk7XHJcbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2Fycl0sIHsgdHlwZTogdGhpcy5ET0NVTUVOVF9UWVBFIH0pO1xyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShibG9iKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZUVkaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYWN0aW9uQ2xpY2tlZCkge1xyXG4gICAgICAvLyBhY3Rpb24gY2xpY2tlZCBpcyBub3QgY2xpY2tlZCB0aGVuIG5vIHVwZGF0ZSBtb2RlIG9wZW5lZFxyXG4gICAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRpc2FibGVFbGVtZW50cyhbXHJcbiAgICAgICAgJ3Rvb2xiYXJHcm91cC1TaGFwZXMnLFxyXG4gICAgICAgICd0b29sYmFyR3JvdXAtRWRpdCcsXHJcbiAgICAgICAgJ3Rvb2xiYXJHcm91cC1JbnNlcnQnLFxyXG4gICAgICAgICd0b29sYmFyR3JvdXAtQW5ub3RhdGUnLFxyXG4gICAgICBdKTtcclxuICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5hbm5vdE1hbmFnZXIuc2V0UmVhZE9ubHkodHJ1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBlZGl0IG1vZGUgb3BlbmVkIGFuZCBtdXN0IGJlIHdoZW4gYWN0aW9uIGlzIGNsaWNrZWRcclxuICAgICAgaWYgKHRoaXMuZWRpdGluZ1R5cGUpIHtcclxuICAgICAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRpc2FibGVFbGVtZW50cyhbXHJcbiAgICAgICAgICAndG9vbGJhckdyb3VwLVNoYXBlcycsXHJcbiAgICAgICAgICAndG9vbGJhckdyb3VwLUVkaXQnLFxyXG4gICAgICAgICAgJ3Rvb2xiYXJHcm91cC1JbnNlcnQnLFxyXG4gICAgICAgICAgJ3Rvb2xiYXJHcm91cC1Bbm5vdGF0ZScsXHJcbiAgICAgICAgXSk7XHJcbiAgICAgICAgbGV0IGdyb3VwIDtcclxuICAgICAgICBpZih0aGlzLmVkaXRpbmdUeXBlID09PSAnc2lnbkRvYycpe1xyXG4gICAgICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5lbmFibGVFbGVtZW50cyhbXHJcbiAgICAgICAgICAgICd0b29sYmFyR3JvdXAtSW5zZXJ0J1xyXG4gICAgICAgICAgXSk7XHJcblxyXG4gICAgICAgIH1lbHNlIGlmKHRoaXMuZWRpdGluZ1R5cGUgPT09ICdhbm5vdGF0ZScpe1xyXG4gICAgICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5lbmFibGVFbGVtZW50cyhbXHJcbiAgICAgICAgICAgICd0b29sYmFyR3JvdXAtU2hhcGVzJyxcclxuICAgICAgICAgICAgJ3Rvb2xiYXJHcm91cC1FZGl0JyxcclxuICAgICAgICAgICAgJ3Rvb2xiYXJHcm91cC1Bbm5vdGF0ZScsXHJcbiAgICAgICAgICBdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5lbmFibGVFbGVtZW50cyhbXHJcbiAgICAgICAgICAndG9vbGJhckdyb3VwLVNoYXBlcycsXHJcbiAgICAgICAgICAndG9vbGJhckdyb3VwLUVkaXQnLFxyXG4gICAgICAgICAgJ3Rvb2xiYXJHcm91cC1JbnNlcnQnLFxyXG4gICAgICAgICAgJ3Rvb2xiYXJHcm91cC1Bbm5vdGF0ZScsXHJcbiAgICAgICAgXSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5hbm5vdE1hbmFnZXIuc2V0UmVhZE9ubHkoZmFsc2UpO1xyXG4gICAgICAvLyB0aGlzLndlYlZpZXdlckluc3RhbmNlLnNldFRvb2xiYXJHcm91cCgndG9vbGJhckdyb3VwLUFubm90YXRlJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy53ZWJWaWV3ZXJJbnN0YW5jZSkge1xyXG4gICAgICB0aGlzLnRvZ2dsZUVkaXQoKTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGNoYW5nZXMudXJsRmlsZUNvbnRlbnQgJiZcclxuICAgICAgICBjaGFuZ2VzLnVybEZpbGVDb250ZW50LnByZXZpb3VzVmFsdWUgJiZcclxuICAgICAgICBjaGFuZ2VzLnVybEZpbGVDb250ZW50LnByZXZpb3VzVmFsdWUgIT09XHJcbiAgICAgICAgY2hhbmdlcy51cmxGaWxlQ29udGVudC5jdXJyZW50VmFsdWVcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5uZ09uRGVzdHJveSgpO1xyXG4gICAgICAgIHRoaXMubmdPbkluaXQoKTtcclxuICAgICAgICB0aGlzLm5nQWZ0ZXJWaWV3SW5pdCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBkZlRyb25FdmVudChldmVudCkge1xyXG4gICAgaWYgKHRoaXNbZXZlbnQuYWN0aW9uXSkge1xyXG4gICAgICAvLyBtZXRob2QgZXhpc3RzIGluIHRoZSBjb21wb25lbnRcclxuICAgICAgLy8gIHRoaXNbZXZlbnQuYWN0aW9uXShldmVudC5wYXJhbXMpOyAvLyBjYWxsIGl0XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHNlYXJjaCByZXN1bHRzIHNlY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgXHJcbiAgcGFnZXM6YW55O1xyXG4gIHN0YW5kYXJkSGVpZ2h0O1xyXG4gIHN0YW5kYXJkV2lkdGg7XHJcbiAgcGFnZUhlaWdodDtcclxuICBwYWdlV2lkdGg7XHJcbiAgc2F2ZWRBbm90YXRpb25zID0gW107XHJcbiAgZmlsZVdpdGhPY3IgPSBmYWxzZTtcclxuICBuZXdBbm5vdGF0aW9ucz1bXTtcclxuICBteVNlYXJjaFN0cmluZ1Jlc3VsdHMgPSBbXTtcclxuICByZWNpdmVkU2VhcmNoU3RyaW5nc0FycmF5ID0gW107XHJcblxyXG4gIC8vIGFkZGluZyBzZWFyY2ggbGlzbmVyIHRvIGxpc2VuIHRvIGludGVybmFsIHNlYXJjaCBmcm9tIHVpIGFuZCB3aXRob3V0IG9jclxyXG4gIGFkZFNlYXJjaExpc3RuZXIoKSB7XHJcbiAgICBjb25zdCB7IGFubm90TWFuYWdlciwgZG9jVmlld2VyLCBBbm5vdGF0aW9ucyB9ID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZTtcclxuICAgIGNvbnN0IHNlYXJjaExpc3RlbmVyID0gKHNlYXJjaFBhdHRlcm4sIG9wdGlvbnMsIHJlc3VsdHMpID0+IHtcclxuXHJcbiAgICAgICAgdGhpcy5teVNlYXJjaFN0cmluZ1Jlc3VsdHMgPSBbXTtcclxuICAgICAgaWYodGhpcy5zYXZlZEFub3RhdGlvbnMubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgdGhpcy5zYXZlZEFub3RhdGlvbnMubWFwKGFubm90YXRpb24gPT4ge1xyXG4gICAgICAgICAgYW5ub3RhdGlvbi5IaWRkZW4gPSB0cnVlO1xyXG4gICAgICAgIC8vIEFsd2F5cyByZWRyYXcgYW5ub3RhdGlvbiBpZiByZW5kZXJpbmcgd2FzIHVwZGF0ZWRcclxuICAgICAgICBhbm5vdE1hbmFnZXIucmVkcmF3QW5ub3RhdGlvbihhbm5vdGF0aW9uKTtcclxuICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gZG9uJ3QgZG8gYW55IHNlYXJjaCB1bnRpbCB0aGVyZSBpcyBhIHNlYXJjaCBwYXR0ZXJuXHJcbiAgICAgIGlmKHNlYXJjaFBhdHRlcm4udHJpbSgpLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAvLyBhZGQgcmVkYWN0aW9uIGFubm90YXRpb24gZm9yIGVhY2ggc2VhcmNoIHJlc3VsdFxyXG4gICAgICAgICAgICB0aGlzLm5ld0Fubm90YXRpb25zID0gcmVzdWx0cy5tYXAocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBhbm5vdGF0aW9uID0gbmV3IEFubm90YXRpb25zLlRleHRIaWdobGlnaHRBbm5vdGF0aW9uKCk7XHJcbiAgICAgICAgICAgICAgYW5ub3RhdGlvbi5RdWFkcyA9IHJlc3VsdC5xdWFkcy5tYXAocXVhZCA9PiBxdWFkLmdldFBvaW50cygpKTtcclxuICAgICAgICAgICAgICBhbm5vdGF0aW9uLlBhZ2VOdW1iZXIgPSByZXN1bHQucGFnZU51bTtcclxuICAgICAgICAgICAgICBhbm5vdGF0aW9uLlN0cm9rZUNvbG9yID0gbmV3IEFubm90YXRpb25zLkNvbG9yKDI1MCwyMDYsMCwwLjUwMTk2KTsgIFxyXG4gICAgICAgICAgICAgIGFubm90YXRpb24uQXV0aG9yID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5hbm5vdE1hbmFnZXIuZ2V0Q3VycmVudFVzZXIoKTsgICAgICBcclxuICAgICAgICAgICAgICByZXR1cm4gYW5ub3RhdGlvbjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2F2ZWRBbm90YXRpb25zLnB1c2goLi4udGhpcy5uZXdBbm5vdGF0aW9ucyk7XHJcbiAgICAgICAgICAgIGFubm90TWFuYWdlci5hZGRBbm5vdGF0aW9ucyh0aGlzLm5ld0Fubm90YXRpb25zKTtcclxuICAgICAgICAgICAgYW5ub3RNYW5hZ2VyLmRyYXdBbm5vdGF0aW9uc0Zyb21MaXN0KHRoaXMubmV3QW5ub3RhdGlvbnMpO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICBkb2NWaWV3ZXIuY2xlYXJTZWFyY2hSZXN1bHRzKCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgZG9jVmlld2VyLm9uKCdkb2N1bWVudExvYWRlZCcsICgpID0+IHtcclxuICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5hZGRTZWFyY2hMaXN0ZW5lcihzZWFyY2hMaXN0ZW5lcik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIHBlcmZvcm0gYXV0b21hdGljIHNlYXJjaCB3aGVuIGludGVyaW5nIHRoZSBwYWdlIFxyXG4gIGF1dG9tYXRpY1NlYXJjaChzZWFyY2hUZXh0QXJyYXkpe1xyXG4gICAgY29uc3QgeyBhbm5vdE1hbmFnZXIsIGRvY1ZpZXdlciwgQW5ub3RhdGlvbnMgfSA9IHRoaXMud2ViVmlld2VySW5zdGFuY2U7XHJcbiAgICBsZXQgc2VhcmNoT3B0aW9ucztcclxuICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2Uub3BlbkVsZW1lbnRzKFsnc2VhcmNoUGFuZWwnXSk7XHJcbiAgICBkb2NWaWV3ZXIub24oJ2RvY3VtZW50TG9hZGVkJywgKCkgPT4ge1xyXG4gICAgICBjb25zdCBtb2RlID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5Db3JlQ29udHJvbHMuU2VhcmNoLk1vZGUuUEFHRV9TVE9QIHwgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5Db3JlQ29udHJvbHMuU2VhcmNoLk1vZGUuSElHSExJR0hUIHwgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5Db3JlQ29udHJvbHMuU2VhcmNoLk1vZGUuQU1CSUVOVF9TVFJJTkc7XHJcbiAgICAgIHRoaXMubXlTZWFyY2hTdHJpbmdSZXN1bHRzID0gW107IC8vIGVtcHR5IG15IHNlYXJjaCByZXN1bHQgd2hlbiBzdGFydGluZyBuZXcgc2VhcmNoXHJcbiAgICAgIGlmICh0aGlzLmZpbGVXaXRoT2NyKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gYWRkIHJlZGFjdGlvbiBhbm5vdGF0aW9uIGZvciBlYWNoIHNlYXJjaCByZXN1bHRcclxuICAgICAgICAgIGNvbnN0IGFubm90YXRpb24gPSBuZXcgQW5ub3RhdGlvbnMuVGV4dEhpZ2hsaWdodEFubm90YXRpb24oKTtcclxuICAgICAgICAgIHNlYXJjaFRleHRBcnJheS5tYXAoc2VhcmNoVGV4dCA9PiB7XHJcbiAgICAgICAgICAgIGxldCBteVNlYXJjaCA9IHNlYXJjaFRleHQuc3BsaXQoJyAnKTtcclxuICAgICAgICAgICAgaWYobXlTZWFyY2gubGVuZ3RoID4gMSl7XHJcbiAgICAgICAgICAgICAgLy8gdGhlbiBpIGFtIHNlYXJjaGluZyB3aXRoIG1vcmUgdGhhbiBvbmUgd29yZFxyXG4gICAgICAgICAgICAgIHRoaXMucGFnZXMucGFnZXMuZm9yRWFjaCgocGFnZSAsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VIZWlnaHQgPSBwYWdlLnBhZ2VfaGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlV2lkdGggPSBwYWdlLnBhZ2Vfd2lkdGg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YW5kYXJkSGVpZ2h0ID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXIuZ2V0UGFnZUhlaWdodCgoaW5kZXgrMSkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFuZGFyZFdpZHRoID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXIuZ2V0UGFnZVdpZHRoKChpbmRleCsxKSk7XHJcbiAgICAgICAgICAgICAgICBwYWdlLnpvbmVzLmZvckVhY2goem9uZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHpvbmUucGFyYWdyYXBocy5mb3JFYWNoKHBhcmFncmFwaCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYWdyYXBoLmxpbmVzLmZvckVhY2gobGluZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZihsaW5lLnRleHQuaW5jbHVkZXMoc2VhcmNoVGV4dCkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlNlYXJjaEZvcldvcmRJbkxpbmUobXlTZWFyY2gsbGluZSwoaW5kZXgrMSkgLCBwYWdlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgLy8gdGhlbiBpIGFtIHNlYXJjaGluZyB3aXRoIG9ubHkgb25lIHdvcmQgXHJcbiAgICAgICAgICAgICAgdGhpcy5zZWFyY2hGb3JXb3JkSW5BbGxQYWdlcyhzZWFyY2hUZXh0KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgZG9jVmlld2VyLmNsZWFyU2VhcmNoUmVzdWx0cygpO1xyXG4gICAgICAgICAgdGhpcy5kaXNwYWxheVNlYXJjaFJlc3VsdHMoZG9jVmlld2VyKTtcclxuICAgICAgfSBlbHNle1xyXG4gICAgICAgIHNlYXJjaE9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAvLyBJZiB0cnVlLCBhIHNlYXJjaCBvZiB0aGUgZW50aXJlIGRvY3VtZW50IHdpbGwgYmUgcGVyZm9ybWVkLiBPdGhlcndpc2UsIGEgc2luZ2xlIHNlYXJjaCB3aWxsIGJlIHBlcmZvcm1lZC5cclxuICAgICAgICAgIGZ1bGxTZWFyY2g6IHRydWUsXHJcbiAgICAgICAgICAvLyBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgc2VhcmNoIHJldHVybnMgYSByZXN1bHQuXHJcbiAgICAgICAgICBvblJlc3VsdDogcmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgLy8gd2l0aCAnUEFHRV9TVE9QJyBtb2RlLCB0aGUgY2FsbGJhY2sgaXMgaW52b2tlZCBhZnRlciBlYWNoIHBhZ2UgaGFzIGJlZW4gc2VhcmNoZWQuXHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQucmVzdWx0Q29kZSA9PT0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5Db3JlQ29udHJvbHMuU2VhcmNoLlJlc3VsdENvZGUuRk9VTkQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFubm90YXRpb24gPSBuZXcgQW5ub3RhdGlvbnMuVGV4dEhpZ2hsaWdodEFubm90YXRpb24oKTtcclxuICAgICAgICAgICAgICAgIGFubm90YXRpb24uUXVhZHMgPSByZXN1bHQucXVhZHMubWFwKHF1YWQgPT4gcXVhZC5nZXRQb2ludHMoKSk7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhhbm5vdGF0aW9uLlF1YWRzKTtcclxuICAgICAgICAgICAgICAgIGFubm90YXRpb24uUGFnZU51bWJlciA9IHJlc3VsdC5wYWdlTnVtO1xyXG4gICAgICAgICAgICAgICAgYW5ub3RhdGlvbi5TdHJva2VDb2xvciA9IG5ldyBBbm5vdGF0aW9ucy5Db2xvcigyNTAsMjA2LDAsMC41MDE5Nik7ICAgXHJcbiAgICAgICAgICAgICAgICBhbm5vdGF0aW9uLkF1dGhvciA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLmdldEN1cnJlbnRVc2VyKCk7ICBcclxuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZWRBbm90YXRpb25zLnB1c2goYW5ub3RhdGlvbikgICA7XHJcbiAgICAgICAgICAgICAgICBhbm5vdE1hbmFnZXIuYWRkQW5ub3RhdGlvbnMoW2Fubm90YXRpb25dKTtcclxuICAgICAgICAgICAgICAgIGFubm90TWFuYWdlci5kcmF3QW5ub3RhdGlvbnNGcm9tTGlzdChbYW5ub3RhdGlvbl0pO1xyXG4gICAgICAgICAgICAgICAgZG9jVmlld2VyLmRpc3BsYXlBZGRpdGlvbmFsU2VhcmNoUmVzdWx0cyhbcmVzdWx0XSk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBzZWFyY2hUZXh0QXJyYXkubWFwKHNlYXJjaGVkVGV4dCA9PiB7XHJcbiAgICAgICAgICBkb2NWaWV3ZXIudGV4dFNlYXJjaEluaXQoc2VhcmNoZWRUZXh0LCBtb2RlLCBzZWFyY2hPcHRpb25zKTtcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLy8gc2VhcmNoIGZvciBzaW5nbGUgd29yZCBpbiBhbGwgcGFnZXMgXHJcbiAgc2VhcmNoRm9yV29yZEluQWxsUGFnZXMoc2VhcmNoZWRXb3JkKXtcclxuICAgIHRoaXMucGFnZXMucGFnZXMuZm9yRWFjaCgocGFnZSAsIGluZGV4KSA9PiB7XHJcbiAgICAgIHRoaXMucGFnZUhlaWdodCA9IHBhZ2UucGFnZV9oZWlnaHQ7XHJcbiAgICAgIHRoaXMucGFnZVdpZHRoID0gcGFnZS5wYWdlX3dpZHRoO1xyXG4gICAgICB0aGlzLnN0YW5kYXJkSGVpZ2h0ID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXIuZ2V0UGFnZUhlaWdodCgoaW5kZXgrMSkpO1xyXG4gICAgICB0aGlzLnN0YW5kYXJkV2lkdGggPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlci5nZXRQYWdlV2lkdGgoKGluZGV4KzEpKTtcclxuICAgICAgY29uc3QgeCA9ICh0aGlzLnBhZ2VXaWR0aCAvIHRoaXMuc3RhbmRhcmRXaWR0aCk7IC8vIHdpZHRoIHJhdGlvXHJcbiAgICAgIGNvbnN0IHkgPSAodGhpcy5wYWdlSGVpZ2h0IC8gdGhpcy5zdGFuZGFyZEhlaWdodCk7IC8vIGhlaWdodCByYXRpb1xyXG4gICAgICBwYWdlLnpvbmVzLmZvckVhY2goem9uZSA9PiB7XHJcbiAgICAgICAgem9uZS5wYXJhZ3JhcGhzLmZvckVhY2gocGFyYWdyYXBoID0+IHtcclxuICAgICAgICAgIHBhcmFncmFwaC5saW5lcy5mb3JFYWNoKGxpbmUgPT4ge1xyXG4gICAgICAgICAgICBsaW5lLndvcmRzLmZvckVhY2god29yZCA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHdvcmQudGV4dC5pbmNsdWRlcyhzZWFyY2hlZFdvcmQpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBhbm5vdGF0aW9uLlBhZ2VOdW1iZXIgPSBpbmRleCsxO1xyXG4gICAgICAgICAgICAgICAgbGV0IHF1YWRzID0gW3tcclxuICAgICAgICAgICAgICAgICAgICB4MTogKHdvcmQuY29vcmRpbmF0ZXMudXBwZXJfbGVmdC54IC8geCksXHJcbiAgICAgICAgICAgICAgICAgICAgeDI6ICh3b3JkLmNvb3JkaW5hdGVzLmJvdHRvbV9yaWdodC54IC8geCksXHJcbiAgICAgICAgICAgICAgICAgICAgeDM6ICh3b3JkLmNvb3JkaW5hdGVzLmJvdHRvbV9yaWdodC54IC8geCksXHJcbiAgICAgICAgICAgICAgICAgICAgeDQ6ICh3b3JkLmNvb3JkaW5hdGVzLnVwcGVyX2xlZnQueCAvIHgpLFxyXG4gICAgICAgICAgICAgICAgICAgIHkxOiAod29yZC5jb29yZGluYXRlcy51cHBlcl9sZWZ0LnkgLyB5KSxcclxuICAgICAgICAgICAgICAgICAgICB5MjogKHdvcmQuY29vcmRpbmF0ZXMudXBwZXJfbGVmdC55IC8geSksXHJcbiAgICAgICAgICAgICAgICAgICAgeTM6ICh3b3JkLmNvb3JkaW5hdGVzLmJvdHRvbV9yaWdodC55IC8geSksXHJcbiAgICAgICAgICAgICAgICAgICAgeTQ6ICh3b3JkLmNvb3JkaW5hdGVzLmJvdHRvbV9yaWdodC55IC8geSksXHJcbiAgICAgICAgICAgICAgICAgIH1dXHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZ2xpZ2h0VGV4dChcclxuICAgICAgICAgICAgICAgICAgcXVhZHMsIFxyXG4gICAgICAgICAgICAgICAgICBpbmRleCsxXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25zdHJ1Y3RTZWFyY2hSZXN1bHQoc2VhcmNoZWRXb3JkICwgaW5kZXgrMSAsIHF1YWRzICwgbGluZS50ZXh0ICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBzZWFyY2ggZm9yIHdvcmQgaW4gc2luZ2xlIGxpbmUgXHJcbiAgU2VhcmNoRm9yV29yZEluTGluZShsaXN0T2ZTZWFyY2hlZFdvcmRzLCBsaW5lLCBwYWdlbnVtYmVyLCBwYWdlKSB7XHJcbiAgICB0aGlzLnBhZ2VIZWlnaHQgPSBwYWdlLnBhZ2VfaGVpZ2h0O1xyXG4gICAgdGhpcy5wYWdlV2lkdGggPSBwYWdlLnBhZ2Vfd2lkdGg7XHJcbiAgICB0aGlzLnN0YW5kYXJkSGVpZ2h0ID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXIuZ2V0UGFnZUhlaWdodCgocGFnZW51bWJlcikpO1xyXG4gICAgdGhpcy5zdGFuZGFyZFdpZHRoID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXIuZ2V0UGFnZVdpZHRoKChwYWdlbnVtYmVyKSk7XHJcbiAgICBjb25zdCB4ID0gKHRoaXMucGFnZVdpZHRoIC8gdGhpcy5zdGFuZGFyZFdpZHRoKTsgLy8gd2lkdGggcmF0aW9cclxuICAgIGNvbnN0IHkgPSAodGhpcy5wYWdlSGVpZ2h0IC8gdGhpcy5zdGFuZGFyZEhlaWdodCk7IC8vIGhlaWdodCByYXRpb1xyXG4gICAgLy8gZmluZCBvbmx5IHdvcmRzIHJlbGF0ZWQgdG8gbXkgc2VhcmNoIGZvcm0gdGhlIGxpbmVcclxuICAgIGxldCBteUZvdW5kZWRSZXN1bHRzID0gW107XHJcbiAgICBsZXQgY29ycmVjdFJlc3VsdHMgPSBbXTtcclxuICAgIGxpbmUud29yZHMuZm9yRWFjaCgod29yZCwgd29yZEluZGV4KSA9PiB7XHJcbiAgICAgIGlmIChsaXN0T2ZTZWFyY2hlZFdvcmRzLmluZGV4T2Yod29yZC50ZXh0KSA+IC0xKSB7XHJcbiAgICAgICAgbXlGb3VuZGVkUmVzdWx0cy5wdXNoKHsgd29yZDogd29yZCwgd29yZEluZGV4OiB3b3JkSW5kZXggfSlcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gZmluZCBvbmx5IHdvcmRzIGV4aXN0IGluIG15IHNlYXJjaCBzZW50ZW5jZSBhbmQgbm90IHNpbmdsZSBhbmQgcmVwZWF0ZWQgd29yZFxyXG4gICAgbXlGb3VuZGVkUmVzdWx0cy5tYXAoKHJlc3VsdCwgaW5kZXgpID0+IHtcclxuICAgICAgaWYgKChteUZvdW5kZWRSZXN1bHRzW2luZGV4XVsnd29yZEluZGV4J10gLSAxID09PSAobXlGb3VuZGVkUmVzdWx0c1tpbmRleCAtIDFdICYmIG15Rm91bmRlZFJlc3VsdHNbaW5kZXggLSAxXVsnd29yZEluZGV4J10pKSB8fFxyXG4gICAgICAgIChteUZvdW5kZWRSZXN1bHRzW2luZGV4ICsgMV0gJiYgKG15Rm91bmRlZFJlc3VsdHNbaW5kZXggKyAxXVsnd29yZEluZGV4J10gLSAxID09PSBteUZvdW5kZWRSZXN1bHRzW2luZGV4XVsnd29yZEluZGV4J10pKSkge1xyXG4gICAgICAgIGNvcnJlY3RSZXN1bHRzLnB1c2gocmVzdWx0KVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIC8vIGhpZ2hsaWh0IHRoZXNlIHdvcmRzIGFmdGVyIGVsZW1pbmF0aW5nIGFsbCByZXBlYXRlZCBhbmQgcmVsYXRlZCB3b3Jkc1xyXG4gICAgLy8gbXVzdCBiZSBmb3IgbG9vcCBzcCBpIGNhbiBjb250cm9sIHRoZSBzdGVwIGluIGVhY2ggbG9vcFxyXG4gICAgbGV0IHF1YWRzID0gW107XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvcnJlY3RSZXN1bHRzLmxlbmd0aDsgKGkgPSBpICsgbGlzdE9mU2VhcmNoZWRXb3Jkcy5sZW5ndGgpKSB7XHJcbiAgICAgIHF1YWRzLnB1c2goXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgeDE6IChjb3JyZWN0UmVzdWx0c1soKGkgKyBsaXN0T2ZTZWFyY2hlZFdvcmRzLmxlbmd0aCkgLSAxKV0ud29yZC5jb29yZGluYXRlcy51cHBlcl9sZWZ0LnggLyB4KSxcclxuICAgICAgICAgIHgyOiAoY29ycmVjdFJlc3VsdHNbaV0ud29yZC5jb29yZGluYXRlcy5ib3R0b21fcmlnaHQueCAvIHgpLFxyXG4gICAgICAgICAgeDM6IChjb3JyZWN0UmVzdWx0c1tpXS53b3JkLmNvb3JkaW5hdGVzLmJvdHRvbV9yaWdodC54IC8geCksXHJcbiAgICAgICAgICB4NDogKGNvcnJlY3RSZXN1bHRzWygoaSArIGxpc3RPZlNlYXJjaGVkV29yZHMubGVuZ3RoKSAtIDEpXS53b3JkLmNvb3JkaW5hdGVzLnVwcGVyX2xlZnQueCAvIHgpLFxyXG4gICAgICAgICAgeTE6IChjb3JyZWN0UmVzdWx0c1tpXS53b3JkLmNvb3JkaW5hdGVzLnVwcGVyX2xlZnQueSAvIHkpLFxyXG4gICAgICAgICAgeTI6IChjb3JyZWN0UmVzdWx0c1soKGkgKyBsaXN0T2ZTZWFyY2hlZFdvcmRzLmxlbmd0aCkgLSAxKV0ud29yZC5jb29yZGluYXRlcy51cHBlcl9sZWZ0LnkgLyB5KSxcclxuICAgICAgICAgIHkzOiAoY29ycmVjdFJlc3VsdHNbKChpICsgbGlzdE9mU2VhcmNoZWRXb3Jkcy5sZW5ndGgpIC0gMSldLndvcmQuY29vcmRpbmF0ZXMuYm90dG9tX3JpZ2h0LnkgLyB5KSxcclxuICAgICAgICAgIHk0OiAoY29ycmVjdFJlc3VsdHNbaV0ud29yZC5jb29yZGluYXRlcy5ib3R0b21fcmlnaHQueSAvIHkpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB0aGlzLmhpZ2xpZ2h0VGV4dChcclxuICAgICAgICBxdWFkcyxcclxuICAgICAgICBwYWdlbnVtYmVyXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuY29uc3RydWN0U2VhcmNoUmVzdWx0KGxpc3RPZlNlYXJjaGVkV29yZHMuam9pbihcIiBcIikgLCBwYWdlbnVtYmVyICwgcXVhZHMgLCBsaW5lLnRleHQpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RTZWFyY2hSZXN1bHQoc2VhcmNoZWRUZXh0ICwgcGFnZU51bSAsIHF1YWRzICwgbGluZSl7XHJcbiAgIGxldCBteVNlYXJjaFN0YXJ0VGV4dEluZGV4ID0gbGluZS5pbmRleE9mKHNlYXJjaGVkVGV4dCk7XHJcbiAgIGxldCBteVNlZWFyY2hlZFRleHRFbmRJbmRleCA9IG15U2VhcmNoU3RhcnRUZXh0SW5kZXggKyBzZWFyY2hlZFRleHQubGVuZ3RoO1xyXG4gICAgbGV0IHNlYXJjaFJlc3VsdE9iamVjdCA9IHtcclxuICAgICAgICBhbWJpZW50U3RyOiBsaW5lLFxyXG4gICAgICAgIHJlc3VsdFN0cjogc2VhcmNoZWRUZXh0LFxyXG4gICAgICAgIHJlc3VsdFN0clN0YXJ0Om15U2VhcmNoU3RhcnRUZXh0SW5kZXgsXHJcbiAgICAgICAgcmVzdWx0U3RyRW5kOiBteVNlZWFyY2hlZFRleHRFbmRJbmRleCxcclxuICAgICAgICBwYWdlTnVtOiBwYWdlTnVtLFxyXG4gICAgICAgIHJlc3VsdENvZGU6IDIsXHJcbiAgICAgICAgcXVhZHM6IFt7XHJcbiAgICAgICAgICAgIGVhOiBxdWFkc1swXVsneTMnXSxcclxuICAgICAgICAgICAgZmE6IHF1YWRzWzBdWyd5NCddLFxyXG4gICAgICAgICAgICBoYTogcXVhZHNbMF1bJ3gxJ10sXHJcbiAgICAgICAgICAgIGlhOiBxdWFkc1swXVsneDInXSxcclxuICAgICAgICAgICAgcEI6IHF1YWRzWzBdWyd4MyddLFxyXG4gICAgICAgICAgICBxQjogcXVhZHNbMF1bJ3g0J10sXHJcbiAgICAgICAgICAgIHJCOiBxdWFkc1swXVsneTEnXSxcclxuICAgICAgICAgICAgc0I6IHF1YWRzWzBdWyd5MiddXHJcbiAgICAgICAgfV1cclxuICAgIH1cclxuICAgIHRoaXMubXlTZWFyY2hTdHJpbmdSZXN1bHRzLnB1c2goc2VhcmNoUmVzdWx0T2JqZWN0KTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMubXlTZWFyY2hTdHJpbmdSZXN1bHRzKTtcclxuICB9XHJcblxyXG4gIGRpc3BhbGF5U2VhcmNoUmVzdWx0cyhkb2NWaWV3ZXIpe1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgZG9jVmlld2VyLmRpc3BsYXlBZGRpdGlvbmFsU2VhcmNoUmVzdWx0cyh0aGlzLm15U2VhcmNoU3RyaW5nUmVzdWx0cyk7XHJcbiAgICB9LCA1MDApO1xyXG4gIH1cclxuXHJcbiAgLy8gZHJhdyBoaWxpZ3RoaW5nIGFyb3VuZCBjZXJ0YWluIGNoYXJhdGFjdGVyc1xyXG4gIGhpZ2xpZ2h0VGV4dChxdWFkcywgcGFnZU51bWJlcikge1xyXG4gICAgY29uc3QgaGlnaGxpZ2h0aW5nQW5ub3QgPSBuZXcgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5Bbm5vdGF0aW9ucy5UZXh0SGlnaGxpZ2h0QW5ub3RhdGlvbigpO1xyXG4gICAgaGlnaGxpZ2h0aW5nQW5ub3QuU3Ryb2tlQ29sb3IgPSBuZXcgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5Bbm5vdGF0aW9ucy5Db2xvcigyNTAsMjA2LDAsMC41MDE5Nik7XHJcbiAgICBoaWdobGlnaHRpbmdBbm5vdC5RdWFkcyA9IHF1YWRzO1xyXG4gICAgaGlnaGxpZ2h0aW5nQW5ub3QuUGFnZU51bWJlciA9IHBhZ2VOdW1iZXI7XHJcbiAgICBoaWdobGlnaHRpbmdBbm5vdC5BdXRob3IgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmFubm90TWFuYWdlci5nZXRDdXJyZW50VXNlcigpO1xyXG4gICAgdGhpcy5zYXZlZEFub3RhdGlvbnMucHVzaChoaWdobGlnaHRpbmdBbm5vdCk7XHJcbiAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmFubm90TWFuYWdlci5hZGRBbm5vdGF0aW9uKGhpZ2hsaWdodGluZ0Fubm90KTtcclxuXHJcbiAgICAvLyBuZWVkIHRvIGRyYXcgdGhlIGFubm90YXRpb24gb3RoZXJ3aXNlIGl0IHdvbid0IHNob3cgdXAgdW50aWwgdGhlIHBhZ2UgaXMgcmVmcmVzaGVkXHJcbiAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmFubm90TWFuYWdlci5yZWRyYXdBbm5vdGF0aW9uKGhpZ2hsaWdodGluZ0Fubm90KTtcclxuICB9XHJcblxyXG4gIHNlYXJjaEZuID0gKHNlYXJjaFZhbHVlLCBvcHRpb25zKSA9PiB7XHJcbiAgICB0aGlzLm15U2VhcmNoU3RyaW5nUmVzdWx0cyA9IFtdO1xyXG4gICBpZih0aGlzLnNhdmVkQW5vdGF0aW9ucy5sZW5ndGggPiAwKXtcclxuICAgICB0aGlzLnNhdmVkQW5vdGF0aW9ucy5tYXAoYW5ub3RhdGlvbiA9PiB7XHJcbiAgICAgICBhbm5vdGF0aW9uLkhpZGRlbiA9IHRydWU7XHJcbiAgICAgLy8gQWx3YXlzIHJlZHJhdyBhbm5vdGF0aW9uIGlmIHJlbmRlcmluZyB3YXMgdXBkYXRlZFxyXG4gICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLnJlZHJhd0Fubm90YXRpb24oYW5ub3RhdGlvbik7XHJcbiAgIH0pO1xyXG4gICB9XHJcbiAgIC8vIGRvbid0IGRvIGFueSBzZWFyY2ggdW50aWwgdGhlcmUgaXMgYSBzZWFyY2ggcGF0dGVyblxyXG4gICBpZihzZWFyY2hWYWx1ZS50cmltKCkubGVuZ3RoID4gMCl7XHJcbiAgICAgICBpZiAodGhpcy5maWxlV2l0aE9jcikge1xyXG4gICAgICAgICAvLyBhZGQgcmVkYWN0aW9uIGFubm90YXRpb24gZm9yIGVhY2ggc2VhcmNoIHJlc3VsdFxyXG4gICAgICAgICAgIC8vIGNvbnN0IGFubm90YXRpb24gPSBuZXcgQW5ub3RhdGlvbnMuVGV4dEhpZ2hsaWdodEFubm90YXRpb24oKTtcclxuICAgICAgICAgICBsZXQgbXlTZWFyY2ggPSBzZWFyY2hWYWx1ZS5zcGxpdCgnICcpO1xyXG4gICAgICAgICAgIGlmKG15U2VhcmNoLmxlbmd0aCA+IDEpe1xyXG4gICAgICAgICAgICAgLy8gdGhlbiBpIGFtIHNlYXJjaGluZyB3aXRoIG1vcmUgdGhhbiBvbmUgd29yZFxyXG4gICAgICAgICAgICAgdGhpcy5wYWdlcy5wYWdlcy5mb3JFYWNoKChwYWdlICwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgdGhpcy5wYWdlSGVpZ2h0ID0gcGFnZS5wYWdlX2hlaWdodDtcclxuICAgICAgICAgICAgICAgdGhpcy5wYWdlV2lkdGggPSBwYWdlLnBhZ2Vfd2lkdGg7XHJcbiAgICAgICAgICAgICAgIHRoaXMuc3RhbmRhcmRIZWlnaHQgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlci5nZXRQYWdlSGVpZ2h0KChpbmRleCsxKSk7XHJcbiAgICAgICAgICAgICAgIHRoaXMuc3RhbmRhcmRXaWR0aCA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyLmdldFBhZ2VXaWR0aCgoaW5kZXgrMSkpO1xyXG4gICAgICAgICAgICAgICBwYWdlLnpvbmVzLmZvckVhY2goem9uZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgem9uZS5wYXJhZ3JhcGhzLmZvckVhY2gocGFyYWdyYXBoID0+IHtcclxuICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaC5saW5lcy5mb3JFYWNoKGxpbmUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICBpZihsaW5lLnRleHQuaW5jbHVkZXMoc2VhcmNoVmFsdWUpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlNlYXJjaEZvcldvcmRJbkxpbmUobXlTZWFyY2gsbGluZSwoaW5kZXgrMSkgLCBwYWdlKVxyXG4gICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAvLyB0aGVuIGkgYW0gc2VhcmNoaW5nIHdpdGggb25seSBvbmUgd29yZCBcclxuICAgICAgICAgICAgIHRoaXMuc2VhcmNoRm9yV29yZEluQWxsUGFnZXMoc2VhcmNoVmFsdWUpXHJcbiAgICAgICAgICAgfVxyXG4gICAgICAgICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyLmNsZWFyU2VhcmNoUmVzdWx0cygpO1xyXG4gICAgICAgICAgICAgdGhpcy5kaXNwYWxheVNlYXJjaFJlc3VsdHModGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXIpO1xyXG4gICAgICAgfVxyXG4gfWVsc2V7XHJcbiAgIHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyLmNsZWFyU2VhcmNoUmVzdWx0cygpO1xyXG4gfVxyXG59XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy53ZWJWaWV3ZXJJbnN0YW5jZSkge1xyXG4gICAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmNsb3NlRG9jdW1lbnQoKS50aGVuKCgpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZG9jdW1lbnQgY2xvc2VkIScpO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5wZGZ0cm9uU2VydmljZS5pbnN0YW5jZSA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgdGhpcy50cmFuc2VsYXRpb25TdWJzY3JpdGlvbiA/IHRoaXMudHJhbnNlbGF0aW9uU3Vic2NyaXRpb24udW5zdWJzY3JpYmUoKSA6IG51bGw7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgI2ZpbGVWaWV3ZXIgc3R5bGU9XCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlO1wiPjwvZGl2PlxyXG4iXX0=
@@ -48,7 +48,7 @@ export class ItemListComponent {
48
48
  }
49
49
  }
50
50
  ItemListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: ItemListComponent, deps: [{ token: i1.ViewerFilesService }], target: i0.ɵɵFactoryTarget.Component });
51
- ItemListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.4", type: ItemListComponent, selector: "cts-item-list", inputs: { item: "item", iconname: "iconname", title: "title", actions: "actions", isselected: "isselected", moreclasses: "moreclasses" }, outputs: { itemClicked: "itemClicked", actionclicked: "actionclicked" }, ngImport: i0, template: "\r\n<mat-list-item class=\"list-item\" (click)=\"itemlistClick()\" [ngClass]=\"{\r\n 'list-item-selected': selectedId == item.uid\r\n }\">\r\n <div class=\"direction\"><i class=\"incoming bi bi-box-arrow-down\" *ngIf=\"!iconname&&item.direction?.toLowerCase() === 'incoming'\"></i></div>\r\n\r\n <div class=\"direction\"><i class=\"outcoming bi bi-box-arrow-up\" *ngIf=\"!iconname&&item.direction?.toLowerCase() === 'outgoing'\"></i></div>\r\n\r\n <div class=\"direction\"><i class=\"internal bi bi-box-arrow-right\" *ngIf=\"!iconname&&item.direction?.toLowerCase() === 'interenal'\"></i></div>\r\n\r\n <mat-icon *ngIf=\"iconname\" mat-list-icon class=\"icon {{moreclasses}}\">{{\r\n iconname\r\n }}</mat-icon>\r\n\r\n <ng-content select=\".icon\"></ng-content>\r\n\r\n <div class=\"content\">\r\n <div *ngIf=\"title\" mat-line>{{ title }}</div>\r\n <div mat-line>\r\n <ng-content select=\".description\"> </ng-content>\r\n </div>\r\n</div>\r\n <button class=\"menu-item-action\" *ngIf=\"actions?.length\" (click)=\"$event.stopPropagation()\" [matMenuTriggerFor]=\"menu\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n\r\n <mat-menu #menu=\"matMenu\" class=\"actionMenuWrapper\">\r\n <div SetRtl class=\"flex flex-col justify-between\">\r\n <ng-container *ngFor=\"let menu_item of actions\">\r\n <button mat-menu-item class=\"{{menu_item.action_Style}}\" (click)=\"menuactionClicked(menu_item.name, item)\">\r\n <i class=\"{{menu_item.icon}}\" *ngIf=\"menu_item.icon\"></i>\r\n <span class=\"{{menu_item.title_Style}}\">{{ menu_item.title | translate }}</span>\r\n </button>\r\n </ng-container>\r\n </div>\r\n </mat-menu>\r\n</mat-list-item>\r\n", styles: [".list-item{font-size:16px;cursor:pointer;height:55px!important}.list-item .mat-list-item-content{padding:0!important}.list-item .mat-list-item-content .icon{padding:0 4px;font-size:35px;width:auto;height:auto}.list-item .mat-list-item-content .icon.link-relation{font-size:25px}.list-item .mat-list-item-content .icon.attachment-icon{font-size:25px}.list-item .mat-list-item-content .content{width:100%;margin:0;overflow:hidden;text-overflow:ellipsis}.list-item .mat-list-item-content .content .mat-line{font-size:16px;color:#212529}.list-item .mat-list-item-content .content .mat-line .description{font-size:12px}.list-item a{color:#000}.list-item .menu-item-action{font-size:20px;border:0;background:transparent}.list-item .direction{font-size:20px}.list-item .direction .incoming{color:#00dca5}.list-item .direction .outcoming{color:#fbb62c}.list-item:hover{background-color:#f5f6f8}.list-item-selected{background-color:#f5f6f8}\n"], components: [{ type: i2.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["disableRipple", "disabled"], exportAs: ["matListItem"] }, { type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i4.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }], directives: [{ type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.MatListIconCssMatStyler, selector: "[mat-list-icon], [matListIcon]" }, { type: i6.MatLine, selector: "[mat-line], [matLine]" }, { type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["matMenuTriggerRestoreFocus", "mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { type: i7.SetRtlDirective, selector: "[SetRtl]" }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "translate": i8.TranslatePipe }, encapsulation: i0.ViewEncapsulation.None });
51
+ ItemListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.4", type: ItemListComponent, selector: "cts-item-list", inputs: { item: "item", iconname: "iconname", title: "title", actions: "actions", isselected: "isselected", moreclasses: "moreclasses" }, outputs: { itemClicked: "itemClicked", actionclicked: "actionclicked" }, ngImport: i0, template: "\r\n<mat-list-item class=\"list-item\" (click)=\"itemlistClick()\" [ngClass]=\"{\r\n 'list-item-selected': selectedId == item.uid\r\n }\">\r\n <div class=\"direction\"><i class=\"incoming bi bi-box-arrow-down\" *ngIf=\"!iconname&&item.direction?.toLowerCase() === 'incoming'\"></i></div>\r\n\r\n <div class=\"direction\"><i class=\"outcoming bi bi-box-arrow-up\" *ngIf=\"!iconname&&item.direction?.toLowerCase() === 'outgoing'\"></i></div>\r\n\r\n <div class=\"direction\"><i class=\"internal bi bi-box-arrow-right\" *ngIf=\"!iconname&&item.direction?.toLowerCase() === 'interenal'\"></i></div>\r\n\r\n <mat-icon *ngIf=\"iconname\" mat-list-icon class=\"icon {{moreclasses}}\">{{\r\n iconname\r\n }}</mat-icon>\r\n\r\n <span class=\"icon-Revew new-icon\"></span>\r\n <ng-content select=\".icon\"></ng-content>\r\n\r\n <div class=\"content\">\r\n <div *ngIf=\"title\" mat-line>{{ title }}</div>\r\n <div mat-line>\r\n <ng-content select=\".description\"> </ng-content>\r\n </div>\r\n</div>\r\n <button class=\"menu-item-action\" *ngIf=\"actions?.length\" (click)=\"$event.stopPropagation()\" [matMenuTriggerFor]=\"menu\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n\r\n <mat-menu #menu=\"matMenu\" class=\"actionMenuWrapper\">\r\n <div SetRtl class=\"flex flex-col justify-between\">\r\n <ng-container *ngFor=\"let menu_item of actions\">\r\n <button mat-menu-item class=\"{{menu_item.action_Style}}\" (click)=\"menuactionClicked(menu_item.name, item)\">\r\n <i class=\"{{menu_item.icon}}\" *ngIf=\"menu_item.icon\"></i>\r\n <span class=\"{{menu_item.title_Style}}\">{{ menu_item.title | translate }}</span>\r\n </button>\r\n </ng-container>\r\n </div>\r\n </mat-menu>\r\n</mat-list-item>\r\n", styles: [".list-item{font-size:16px;cursor:pointer;height:55px!important}.list-item .new-icon{display:none}.list-item .mat-list-item-content{padding:0!important}.list-item .mat-list-item-content .icon{padding:0 4px;font-size:35px;width:auto;height:auto}.list-item .mat-list-item-content .icon.link-relation{font-size:25px}.list-item .mat-list-item-content .icon.attachment-icon{font-size:25px}.list-item .mat-list-item-content .content{width:100%;margin:0;overflow:hidden;text-overflow:ellipsis}.list-item .mat-list-item-content .content .mat-line{font-size:16px;color:#212529}.list-item .mat-list-item-content .content .mat-line .description{font-size:12px}.list-item a{color:#000}.list-item .menu-item-action{font-size:20px;border:0;background:transparent}.list-item .direction{font-size:20px}.list-item .direction .incoming{color:#00dca5}.list-item .direction .outcoming{color:#fbb62c}.list-item:hover{background-color:#f5f6f8}.list-item-selected{background-color:#f5f6f8}\n"], components: [{ type: i2.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["disableRipple", "disabled"], exportAs: ["matListItem"] }, { type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i4.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }], directives: [{ type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.MatListIconCssMatStyler, selector: "[mat-list-icon], [matListIcon]" }, { type: i6.MatLine, selector: "[mat-line], [matLine]" }, { type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["matMenuTriggerRestoreFocus", "mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { type: i7.SetRtlDirective, selector: "[SetRtl]" }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "translate": i8.TranslatePipe }, encapsulation: i0.ViewEncapsulation.None });
52
52
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: ItemListComponent, decorators: [{
53
53
  type: Component,
54
54
  args: [{
@@ -74,4 +74,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImpor
74
74
  }], actionclicked: [{
75
75
  type: Output
76
76
  }] } });
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL2l0ZW0tbGlzdC9pdGVtLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnV4ZW8tZGV2ZWxvcG1lbnQtZnJhbWV3b3JrL3NyYy9saWIvc2hhcmVkL2NvbXBvbmVudHMvaXRlbS1saXN0L2l0ZW0tbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7O0FBR2xHOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQU9ILE1BQU0sT0FBTyxpQkFBaUI7SUFvQzVCLFlBQW9CLGtCQUFzQztRQUF0Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBdEIxRCx5Q0FBeUM7UUFFekMsZUFBVSxHQUFJLEtBQUssQ0FBQztRQUlwQixvREFBb0Q7UUFFcEQsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2pDLGdHQUFnRztRQUVoRyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFXMkIsQ0FBQztJQVQvRCxhQUFhO1FBQ1gsMEJBQTBCO1FBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGlCQUFpQixDQUFDLGNBQWMsRUFBRSxJQUFJO1FBQ3BDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBSUQsUUFBUTtRQUNOLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDdkQsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzs4R0ExQ1UsaUJBQWlCO2tHQUFqQixpQkFBaUIsd1FDekI5Qixxc0RBcUNBOzJGRFphLGlCQUFpQjtrQkFON0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsV0FBVyxFQUFFLDRCQUE0QjtvQkFDekMsU0FBUyxFQUFFLENBQUMsNEJBQTRCLENBQUM7b0JBQ3pDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2lCQUN0Qzt5R0FLQyxJQUFJO3NCQURILEtBQUs7Z0JBSU4sUUFBUTtzQkFEUCxLQUFLO2dCQUlOLEtBQUs7c0JBREosS0FBSztnQkFJTixPQUFPO3NCQUROLEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLFdBQVc7c0JBRFYsS0FBSztnQkFJTixXQUFXO3NCQURWLE1BQU07Z0JBSVAsYUFBYTtzQkFEWixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVmlld2VyRmlsZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9jb3JyZXNwb25kZW5jZS1yZWxhdGlvbi9zZXJ2aWNlcy92aWV3ZXItZmlsZXMuc2VydmljZSc7XHJcblxyXG4vKipcclxuICogUmV1c2FibGUgTGlzdCBpdGVtIGNvbXBvbmVudCB3aXRoIGFjdGlvbnMgbWVudSBmb3IgbGlzdGluZyBhIGRvY3VtZW50IG9yIGEgdmVyc2lvbiBvZiBhIGRvY3VtZW50XHJcbiAqIEB0aXRsZVxyXG4gKiBMaXN0IGl0ZW0gY29tcG9uZW50XHJcbiAqIEBleGFtcGxlXHJcbiAqXHJcbiAqIDxjdHMtaXRlbS1saXN0XHJcbiAqICAgW2l0ZW1dPVwiaXRlbVwiXHJcbiAqICAgW3RpdGxlXT1cIml0ZW0udGl0bGVcIlxyXG4gKiAgIFtpY29ubmFtZV09XCInbGluaydcIlxyXG4gKiAgIFthY3Rpb25zXT1cIm1lbnVfYWN0aW9uc1wiXHJcbiAqICAgKGFjdGlvbmNsaWNrZWQpPVwiaGFuZGxlQWN0aW9uKCRldmVudClcIlxyXG4gKiAgIChpdGVtQ2xpY2tlZCk9J2hhbmRsZUl0ZW0oKSdcclxuICogICBbbW9yZWNsYXNzZXNdPVwiJ2xpbmstcmVsYXRpb24nXCJcclxuICogPjwvY3RzLWl0ZW0tbGlzdD5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY3RzLWl0ZW0tbGlzdCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2l0ZW0tbGlzdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vaXRlbS1saXN0LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSXRlbUxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIHNlbGVjdGVkSWQ7XHJcbiAgLyoqIERvY3VtZW50IEl0ZW0gICovXHJcbiAgQElucHV0KClcclxuICBpdGVtOiBhbnk7XHJcbiAgLyoqIEljb24gdG8gZGlzcGxheSAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgaWNvbm5hbWU6IHN0cmluZztcclxuICAvKiogdGl0bGUgb2YgdGhlIGl0ZW0gKi9cclxuICBASW5wdXQoKVxyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbiAgLyoqIGFycmF5IG9mIGFjdGlvbnMgdG8gYmUgc2hvd24gaW4gYWN0aW9ucyBtZW51ICovXHJcbiAgQElucHV0KClcclxuICBhY3Rpb25zPzogc3RyaW5nW107XHJcbiAgLyoqIGhpZ2hsaWdodCBpdGVtIGlmIGl0ZW0gaXMgc2VsZWN0ZWQgKi9cclxuICBASW5wdXQoKVxyXG4gIGlzc2VsZWN0ZWQ/ID0gZmFsc2U7XHJcbiAgLyoqIHByb3ZpZGUgbW9yZSBjbGFzc2VzIHRvIGJlIGFzc2lnbmVkIHRvIHRoZSBpdGVtIERPTSAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgbW9yZWNsYXNzZXM/O1xyXG4gIC8qKiBldmVudCBFbWl0dGVyIHRoYXQgZmlyZXMgd2hlbiBpdGVtIGlzIGNsaWNrZWQgKi9cclxuICBAT3V0cHV0KClcclxuICBpdGVtQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAvKiogQWN0aW9uIENsaWNrZWQgZXZlbnQgRW1pdHRlciwgZW1pdHMgYWN0aW9uIG5hbWUgYW5kIGl0ZW0gb2JqZWN0IHdoZW4gYW4gYWN0aW9uIGlzIGNsaWNrZWQgKi9cclxuICBAT3V0cHV0KClcclxuICBhY3Rpb25jbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBpdGVtbGlzdENsaWNrKCkge1xyXG4gICAgLy8gdGhpcy5pc3NlbGVjdGVkID0gdHJ1ZTtcclxuICAgIHRoaXMuaXRlbUNsaWNrZWQubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgbWVudWFjdGlvbkNsaWNrZWQobWVudV9pdGVtX25hbWUsIGl0ZW0pIHtcclxuICAgIHRoaXMuYWN0aW9uY2xpY2tlZC5uZXh0KHsgYWN0aW9uOiBtZW51X2l0ZW1fbmFtZSwgaXRlbTogaXRlbSB9KTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdmlld2VyRmlsZXNTZXJ2aWNlOiBWaWV3ZXJGaWxlc1NlcnZpY2UpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMudmlld2VyRmlsZXNTZXJ2aWNlLnNlbGVjdGVkRmlsZUlkLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJZCA9IHJlcztcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCJcclxuPG1hdC1saXN0LWl0ZW0gY2xhc3M9XCJsaXN0LWl0ZW1cIiAoY2xpY2spPVwiaXRlbWxpc3RDbGljaygpXCIgW25nQ2xhc3NdPVwie1xyXG4gICAgJ2xpc3QtaXRlbS1zZWxlY3RlZCc6IHNlbGVjdGVkSWQgPT0gaXRlbS51aWRcclxuICB9XCI+XHJcbiAgPGRpdiBjbGFzcz1cImRpcmVjdGlvblwiPjxpIGNsYXNzPVwiaW5jb21pbmcgYmkgYmktYm94LWFycm93LWRvd25cIiAqbmdJZj1cIiFpY29ubmFtZSYmaXRlbS5kaXJlY3Rpb24/LnRvTG93ZXJDYXNlKCkgPT09ICdpbmNvbWluZydcIj48L2k+PC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJkaXJlY3Rpb25cIj48aSBjbGFzcz1cIm91dGNvbWluZyBiaSBiaS1ib3gtYXJyb3ctdXBcIiAqbmdJZj1cIiFpY29ubmFtZSYmaXRlbS5kaXJlY3Rpb24/LnRvTG93ZXJDYXNlKCkgPT09ICdvdXRnb2luZydcIj48L2k+PC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJkaXJlY3Rpb25cIj48aSBjbGFzcz1cImludGVybmFsIGJpIGJpLWJveC1hcnJvdy1yaWdodFwiICpuZ0lmPVwiIWljb25uYW1lJiZpdGVtLmRpcmVjdGlvbj8udG9Mb3dlckNhc2UoKSA9PT0gJ2ludGVyZW5hbCdcIj48L2k+PC9kaXY+XHJcblxyXG4gIDxtYXQtaWNvbiAqbmdJZj1cImljb25uYW1lXCIgbWF0LWxpc3QtaWNvbiBjbGFzcz1cImljb24ge3ttb3JlY2xhc3Nlc319XCI+e3tcclxuICAgIGljb25uYW1lXHJcbiAgICB9fTwvbWF0LWljb24+XHJcblxyXG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIi5pY29uXCI+PC9uZy1jb250ZW50PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxyXG4gICAgPGRpdiAqbmdJZj1cInRpdGxlXCIgbWF0LWxpbmU+e3sgdGl0bGUgfX08L2Rpdj5cclxuICA8ZGl2IG1hdC1saW5lPlxyXG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiLmRlc2NyaXB0aW9uXCI+IDwvbmctY29udGVudD5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiAgPGJ1dHRvbiBjbGFzcz1cIm1lbnUtaXRlbS1hY3Rpb25cIiAqbmdJZj1cImFjdGlvbnM/Lmxlbmd0aFwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiPlxyXG4gICAgPG1hdC1pY29uPm1vcmVfdmVydDwvbWF0LWljb24+XHJcbiAgPC9idXR0b24+XHJcblxyXG4gIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIiBjbGFzcz1cImFjdGlvbk1lbnVXcmFwcGVyXCI+XHJcbiAgICA8ZGl2IFNldFJ0bCBjbGFzcz1cImZsZXggZmxleC1jb2wganVzdGlmeS1iZXR3ZWVuXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG1lbnVfaXRlbSBvZiBhY3Rpb25zXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIGNsYXNzPVwie3ttZW51X2l0ZW0uYWN0aW9uX1N0eWxlfX1cIiAoY2xpY2spPVwibWVudWFjdGlvbkNsaWNrZWQobWVudV9pdGVtLm5hbWUsIGl0ZW0pXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cInt7bWVudV9pdGVtLmljb259fVwiICpuZ0lmPVwibWVudV9pdGVtLmljb25cIj48L2k+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInt7bWVudV9pdGVtLnRpdGxlX1N0eWxlfX1cIj57eyBtZW51X2l0ZW0udGl0bGUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9tYXQtbWVudT5cclxuPC9tYXQtbGlzdC1pdGVtPlxyXG4iXX0=
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL2l0ZW0tbGlzdC9pdGVtLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnV4ZW8tZGV2ZWxvcG1lbnQtZnJhbWV3b3JrL3NyYy9saWIvc2hhcmVkL2NvbXBvbmVudHMvaXRlbS1saXN0L2l0ZW0tbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7O0FBR2xHOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQU9ILE1BQU0sT0FBTyxpQkFBaUI7SUFvQzVCLFlBQW9CLGtCQUFzQztRQUF0Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBdEIxRCx5Q0FBeUM7UUFFekMsZUFBVSxHQUFJLEtBQUssQ0FBQztRQUlwQixvREFBb0Q7UUFFcEQsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2pDLGdHQUFnRztRQUVoRyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFXMkIsQ0FBQztJQVQvRCxhQUFhO1FBQ1gsMEJBQTBCO1FBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGlCQUFpQixDQUFDLGNBQWMsRUFBRSxJQUFJO1FBQ3BDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBSUQsUUFBUTtRQUNOLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDdkQsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzs4R0ExQ1UsaUJBQWlCO2tHQUFqQixpQkFBaUIsd1FDekI5QiwwdkRBc0NBOzJGRGJhLGlCQUFpQjtrQkFON0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsV0FBVyxFQUFFLDRCQUE0QjtvQkFDekMsU0FBUyxFQUFFLENBQUMsNEJBQTRCLENBQUM7b0JBQ3pDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2lCQUN0Qzt5R0FLQyxJQUFJO3NCQURILEtBQUs7Z0JBSU4sUUFBUTtzQkFEUCxLQUFLO2dCQUlOLEtBQUs7c0JBREosS0FBSztnQkFJTixPQUFPO3NCQUROLEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLFdBQVc7c0JBRFYsS0FBSztnQkFJTixXQUFXO3NCQURWLE1BQU07Z0JBSVAsYUFBYTtzQkFEWixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVmlld2VyRmlsZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9jb3JyZXNwb25kZW5jZS1yZWxhdGlvbi9zZXJ2aWNlcy92aWV3ZXItZmlsZXMuc2VydmljZSc7XHJcblxyXG4vKipcclxuICogUmV1c2FibGUgTGlzdCBpdGVtIGNvbXBvbmVudCB3aXRoIGFjdGlvbnMgbWVudSBmb3IgbGlzdGluZyBhIGRvY3VtZW50IG9yIGEgdmVyc2lvbiBvZiBhIGRvY3VtZW50XHJcbiAqIEB0aXRsZVxyXG4gKiBMaXN0IGl0ZW0gY29tcG9uZW50XHJcbiAqIEBleGFtcGxlXHJcbiAqXHJcbiAqIDxjdHMtaXRlbS1saXN0XHJcbiAqICAgW2l0ZW1dPVwiaXRlbVwiXHJcbiAqICAgW3RpdGxlXT1cIml0ZW0udGl0bGVcIlxyXG4gKiAgIFtpY29ubmFtZV09XCInbGluaydcIlxyXG4gKiAgIFthY3Rpb25zXT1cIm1lbnVfYWN0aW9uc1wiXHJcbiAqICAgKGFjdGlvbmNsaWNrZWQpPVwiaGFuZGxlQWN0aW9uKCRldmVudClcIlxyXG4gKiAgIChpdGVtQ2xpY2tlZCk9J2hhbmRsZUl0ZW0oKSdcclxuICogICBbbW9yZWNsYXNzZXNdPVwiJ2xpbmstcmVsYXRpb24nXCJcclxuICogPjwvY3RzLWl0ZW0tbGlzdD5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY3RzLWl0ZW0tbGlzdCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2l0ZW0tbGlzdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vaXRlbS1saXN0LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSXRlbUxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIHNlbGVjdGVkSWQ7XHJcbiAgLyoqIERvY3VtZW50IEl0ZW0gICovXHJcbiAgQElucHV0KClcclxuICBpdGVtOiBhbnk7XHJcbiAgLyoqIEljb24gdG8gZGlzcGxheSAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgaWNvbm5hbWU6IHN0cmluZztcclxuICAvKiogdGl0bGUgb2YgdGhlIGl0ZW0gKi9cclxuICBASW5wdXQoKVxyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbiAgLyoqIGFycmF5IG9mIGFjdGlvbnMgdG8gYmUgc2hvd24gaW4gYWN0aW9ucyBtZW51ICovXHJcbiAgQElucHV0KClcclxuICBhY3Rpb25zPzogc3RyaW5nW107XHJcbiAgLyoqIGhpZ2hsaWdodCBpdGVtIGlmIGl0ZW0gaXMgc2VsZWN0ZWQgKi9cclxuICBASW5wdXQoKVxyXG4gIGlzc2VsZWN0ZWQ/ID0gZmFsc2U7XHJcbiAgLyoqIHByb3ZpZGUgbW9yZSBjbGFzc2VzIHRvIGJlIGFzc2lnbmVkIHRvIHRoZSBpdGVtIERPTSAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgbW9yZWNsYXNzZXM/O1xyXG4gIC8qKiBldmVudCBFbWl0dGVyIHRoYXQgZmlyZXMgd2hlbiBpdGVtIGlzIGNsaWNrZWQgKi9cclxuICBAT3V0cHV0KClcclxuICBpdGVtQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAvKiogQWN0aW9uIENsaWNrZWQgZXZlbnQgRW1pdHRlciwgZW1pdHMgYWN0aW9uIG5hbWUgYW5kIGl0ZW0gb2JqZWN0IHdoZW4gYW4gYWN0aW9uIGlzIGNsaWNrZWQgKi9cclxuICBAT3V0cHV0KClcclxuICBhY3Rpb25jbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBpdGVtbGlzdENsaWNrKCkge1xyXG4gICAgLy8gdGhpcy5pc3NlbGVjdGVkID0gdHJ1ZTtcclxuICAgIHRoaXMuaXRlbUNsaWNrZWQubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgbWVudWFjdGlvbkNsaWNrZWQobWVudV9pdGVtX25hbWUsIGl0ZW0pIHtcclxuICAgIHRoaXMuYWN0aW9uY2xpY2tlZC5uZXh0KHsgYWN0aW9uOiBtZW51X2l0ZW1fbmFtZSwgaXRlbTogaXRlbSB9KTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdmlld2VyRmlsZXNTZXJ2aWNlOiBWaWV3ZXJGaWxlc1NlcnZpY2UpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMudmlld2VyRmlsZXNTZXJ2aWNlLnNlbGVjdGVkRmlsZUlkLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJZCA9IHJlcztcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCJcclxuPG1hdC1saXN0LWl0ZW0gY2xhc3M9XCJsaXN0LWl0ZW1cIiAoY2xpY2spPVwiaXRlbWxpc3RDbGljaygpXCIgW25nQ2xhc3NdPVwie1xyXG4gICAgJ2xpc3QtaXRlbS1zZWxlY3RlZCc6IHNlbGVjdGVkSWQgPT0gaXRlbS51aWRcclxuICB9XCI+XHJcbiAgPGRpdiBjbGFzcz1cImRpcmVjdGlvblwiPjxpIGNsYXNzPVwiaW5jb21pbmcgYmkgYmktYm94LWFycm93LWRvd25cIiAqbmdJZj1cIiFpY29ubmFtZSYmaXRlbS5kaXJlY3Rpb24/LnRvTG93ZXJDYXNlKCkgPT09ICdpbmNvbWluZydcIj48L2k+PC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJkaXJlY3Rpb25cIj48aSBjbGFzcz1cIm91dGNvbWluZyBiaSBiaS1ib3gtYXJyb3ctdXBcIiAqbmdJZj1cIiFpY29ubmFtZSYmaXRlbS5kaXJlY3Rpb24/LnRvTG93ZXJDYXNlKCkgPT09ICdvdXRnb2luZydcIj48L2k+PC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJkaXJlY3Rpb25cIj48aSBjbGFzcz1cImludGVybmFsIGJpIGJpLWJveC1hcnJvdy1yaWdodFwiICpuZ0lmPVwiIWljb25uYW1lJiZpdGVtLmRpcmVjdGlvbj8udG9Mb3dlckNhc2UoKSA9PT0gJ2ludGVyZW5hbCdcIj48L2k+PC9kaXY+XHJcblxyXG4gIDxtYXQtaWNvbiAqbmdJZj1cImljb25uYW1lXCIgbWF0LWxpc3QtaWNvbiBjbGFzcz1cImljb24ge3ttb3JlY2xhc3Nlc319XCI+e3tcclxuICAgIGljb25uYW1lXHJcbiAgICB9fTwvbWF0LWljb24+XHJcblxyXG4gICAgPHNwYW4gY2xhc3M9XCJpY29uLVJldmV3IG5ldy1pY29uXCI+PC9zcGFuPlxyXG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiLmljb25cIj48L25nLWNvbnRlbnQ+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwidGl0bGVcIiBtYXQtbGluZT57eyB0aXRsZSB9fTwvZGl2PlxyXG4gIDxkaXYgbWF0LWxpbmU+XHJcbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCIuZGVzY3JpcHRpb25cIj4gPC9uZy1jb250ZW50PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuICA8YnV0dG9uIGNsYXNzPVwibWVudS1pdGVtLWFjdGlvblwiICpuZ0lmPVwiYWN0aW9ucz8ubGVuZ3RoXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCI+XHJcbiAgICA8bWF0LWljb24+bW9yZV92ZXJ0PC9tYXQtaWNvbj5cclxuICA8L2J1dHRvbj5cclxuXHJcbiAgPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiIGNsYXNzPVwiYWN0aW9uTWVudVdyYXBwZXJcIj5cclxuICAgIDxkaXYgU2V0UnRsIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWJldHdlZW5cIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbWVudV9pdGVtIG9mIGFjdGlvbnNcIj5cclxuICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gY2xhc3M9XCJ7e21lbnVfaXRlbS5hY3Rpb25fU3R5bGV9fVwiIChjbGljayk9XCJtZW51YWN0aW9uQ2xpY2tlZChtZW51X2l0ZW0ubmFtZSwgaXRlbSlcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwie3ttZW51X2l0ZW0uaWNvbn19XCIgKm5nSWY9XCJtZW51X2l0ZW0uaWNvblwiPjwvaT5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwie3ttZW51X2l0ZW0udGl0bGVfU3R5bGV9fVwiPnt7IG1lbnVfaXRlbS50aXRsZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L21hdC1tZW51PlxyXG48L21hdC1saXN0LWl0ZW0+XHJcbiJdfQ==