keevo-components 1.8.276 → 1.8.277

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.
@@ -1,18 +1,17 @@
1
- import { Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
1
+ import { Component, EventEmitter, input, Input, Output, signal, ViewChild, } from '@angular/core';
2
2
  import { BaseComponentCrud } from '../../api/base-components/base-component-crud';
3
+ import { KvCropImageComponent } from './kv-crop-image/kv-crop-image.component';
3
4
  import * as i0 from "@angular/core";
4
5
  import * as i1 from "../../api/services/imagens.service";
5
6
  import * as i2 from "../../api/services/notification.service";
6
7
  import * as i3 from "primeng/dynamicdialog";
7
8
  import * as i4 from "@angular/common";
8
- // import { KvCropImageComponent } from './kv-crop-image/kv-crop-image.component';
9
9
  export class KvAvatarComponent extends BaseComponentCrud {
10
- constructor(imageService, notificationService, dialogService, dynamicDialogRef) {
10
+ constructor(imageService, notificationService, dialogService) {
11
11
  super(dialogService, notificationService);
12
12
  this.imageService = imageService;
13
13
  this.notificationService = notificationService;
14
14
  this.dialogService = dialogService;
15
- this.dynamicDialogRef = dynamicDialogRef;
16
15
  this.borderColor = '#002542';
17
16
  this.btnsColor = '#002542';
18
17
  this.width = 135;
@@ -23,19 +22,24 @@ export class KvAvatarComponent extends BaseComponentCrud {
23
22
  this.btnAlterarFoto = false;
24
23
  this.existeLogo = false;
25
24
  this.selectedImage = '';
25
+ this.imageUrl = input(this.imageService.userDefaultImage());
26
+ this.imageSource = signal(this.imageService.userDefaultImage());
27
+ }
28
+ ngOnInit() {
29
+ this.imageSource.set(this.imageUrl());
30
+ this.getImageSrc();
26
31
  }
27
32
  getImageSrc() {
28
- if (this.imageUrl && (this.imageUrl.startsWith('data:image') || this.imageUrl.startsWith('http') || this.imageUrl.startsWith('https'))) {
33
+ if (this.imageUrl && (this.imageUrl().startsWith('data:image') || this.imageUrl().startsWith('http') || this.imageUrl().startsWith('https'))) {
29
34
  this.existeLogo = true;
30
- return this.imageUrl;
31
35
  }
32
- else if (this.imageUrl) {
36
+ else if (this.imageUrl.length > 0) {
33
37
  this.existeLogo = true;
34
- return 'data:image/jpg;base64,' + this.imageUrl;
38
+ this.imageSource.set('data:image/jpg;base64,' + this.imageUrl);
35
39
  }
36
40
  else {
37
41
  this.existeLogo = false;
38
- return this.imageService.userDefaultImage();
42
+ this.imageSource.set(this.imageService.userDefaultImage());
39
43
  }
40
44
  }
41
45
  openFile() {
@@ -51,8 +55,8 @@ export class KvAvatarComponent extends BaseComponentCrud {
51
55
  reader.readAsDataURL(file);
52
56
  reader.onload = () => {
53
57
  this.selectedImage = reader.result;
54
- this.existeLogo = true;
55
- // this.abrirModalRecortarFoto();
58
+ this.abrirModalRecortarFoto();
59
+ this.existeLogo = false;
56
60
  };
57
61
  }
58
62
  }
@@ -69,55 +73,45 @@ export class KvAvatarComponent extends BaseComponentCrud {
69
73
  });
70
74
  }
71
75
  removerFoto() {
72
- this.imageUrl = '';
76
+ this.imageSource.set('');
73
77
  this.removerFotoEvent.emit();
74
78
  this.existeLogo = false;
75
- this.imageUrlChange.emit(this.imageUrl);
79
+ this.imageUrlChange.emit(this.imageSource());
76
80
  this.fileInput.nativeElement.value = '';
77
81
  }
78
82
  handleImageError(event) {
79
83
  event.target.src = this.imageService.userDefaultImage();
80
84
  }
81
- // abrirModalRecortarFoto() {
82
- // this.openDialog(
83
- // KvCropImageComponent,
84
- // () => {
85
- // this.imageUrl = this.receberDados();
86
- // this.imageUrlChange.emit(this.imageUrl);
87
- // },
88
- // {
89
- // maximizable: false,
90
- // popup: true,
91
- // width: '60%',
92
- // header: 'Recortar',
93
- // id:{imagemSelecionada: this.selectedImage, imagemCortada: ''}
94
- // }
95
- // )
96
- // const arr: Map<DynamicDialogRef<any>, ComponentRef<any>> = this.dialogService.dialogComponentRefMap
97
- // const entries = arr.entries();
98
- // const firstEntry = entries.next().value;
99
- // const [firstKey, firstValue] = firstEntry;
100
- // const instance = this.dialogService.getInstance(firstKey)
101
- // instance.config.showHeader = false
102
- // instance.config.contentStyle = {'border-radius': '12px'}
103
- // }
85
+ abrirModalRecortarFoto() {
86
+ this.openDialog(KvCropImageComponent, () => {
87
+ this.imageUrl = this.receberDados();
88
+ this.imageSource.set(this.receberDados());
89
+ this.imageUrlChange.emit(this.imageSource());
90
+ this.existeLogo = true;
91
+ }, {
92
+ maximizable: false,
93
+ popup: true,
94
+ width: '60%',
95
+ header: 'Recortar',
96
+ id: { imagemSelecionada: this.selectedImage, imagemCortada: '' }
97
+ });
98
+ const [firstKey] = this.dialogService.dialogComponentRefMap.entries().next().value;
99
+ const instance = this.dialogService.getInstance(firstKey);
100
+ instance.config.showHeader = false;
101
+ instance.config.contentStyle = { 'border-radius': '12px' };
102
+ }
104
103
  receberDados() {
105
- const arr = this.dialogService.dialogComponentRefMap;
106
- const entries = arr.entries();
107
- const firstEntry = entries.next().value;
108
- const [firstKey, firstValue] = firstEntry;
104
+ const [firstKey] = this.dialogService.dialogComponentRefMap.entries().next().value;
109
105
  const instance = this.dialogService.getInstance(firstKey);
110
106
  return instance.config.data.id.imagemCortada;
111
107
  }
112
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvAvatarComponent, deps: [{ token: i1.ImagensService }, { token: i2.NotificationService }, { token: i3.DialogService }, { token: i3.DynamicDialogRef }], target: i0.ɵɵFactoryTarget.Component }); }
113
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.8", type: KvAvatarComponent, selector: "kv-avatar", inputs: { imageUrl: "imageUrl", borderColor: "borderColor", btnsColor: "btnsColor", width: "width", height: "height", btnAlterarFoto: "btnAlterarFoto" }, outputs: { imageUrlChange: "imageUrlChange", removerFotoEvent: "removerFotoEvent", onModalOpen: "onModalOpen" }, viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"image-container\">\r\n <img [src]=\"getImageSrc() || imageService.userDefaultImage()\" alt=\"Foto\" class=\"container-foto\" [style.border-color]=\"borderColor\" [style.width.px]=\"width\" [style.height.px]=\"height\" (error)=\"handleImageError($event)\" (click)=\"openFile()\">\r\n <div class=\"btn\">\r\n <input #fileInput *ngIf=\"btnAlterarFoto\" id=\"fotoEscolhida\" type=\"file\" accept=\"image/*\" style=\"display:none\" (change)=\"selectFotoSelecionada($any($event))\">\r\n <button *ngIf=\"btnAlterarFoto && !existeLogo\" class=\"botao-alterar-foto border-circle\" [style.background-color]=\"btnsColor\" (click)=\"openFile()\">\r\n <i class=\"material-symbols-outlined\">photo_camera</i>\r\n </button>\r\n \r\n <button *ngIf=\"btnAlterarFoto && existeLogo\" [style.background-color]=\"btnsColor\" class=\"botao-excluir-foto border-circle\" (click)=\"questionRemoverFoto()\">\r\n <i class=\"material-symbols-outlined\">delete</i>\r\n </button>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0\";.material-symbols-outlined{font-family:Material Symbols Outlined!important}*{font-family:Inter var,Inter,sans-serif!important}::ng-deep .p-accordion,::ng-deep .p-accordion-header,::ng-deep .p-accordion-content,::ng-deep .p-badge,::ng-deep .p-overlay-badge,::ng-deep .p-breadcrumb,::ng-deep .p-breadcrumb-item,::ng-deep .p-breadcrumb-link,::ng-deep .p-button,::ng-deep .p-calendar,::ng-deep .p-card,::ng-deep .p-card-title,::ng-deep .p-card-subtitle,::ng-deep .p-card-content,::ng-deep .p-checkbox,::ng-deep .p-chip,::ng-deep .p-confirm-dialog,::ng-deep .p-confirm-dialog-message,::ng-deep .p-contextmenu,::ng-deep .p-contextmenu-item,::ng-deep .p-dataview,::ng-deep .p-dataview-content,::ng-deep .p-dialog,::ng-deep .p-dialog-title,::ng-deep .p-dialog-content,::ng-deep .p-dropdown,::ng-deep .p-dropdown-label,::ng-deep .p-dropdown-item,::ng-deep .p-dynamic-dialog,::ng-deep .p-dynamic-dialog-title,::ng-deep .p-dynamic-dialog-content,::ng-deep .p-editor,::ng-deep .p-fieldset,::ng-deep .p-fieldset-legend,::ng-deep .p-fieldset-content,::ng-deep .p-fileupload,::ng-deep .p-inputmask,::ng-deep .p-inputnumber,::ng-deep .p-inputtextarea,::ng-deep .p-inputtext,::ng-deep .p-menu,::ng-deep .p-menuitem,::ng-deep .p-menuitem-text,::ng-deep .p-message,::ng-deep .p-messages,::ng-deep .p-multiselect,::ng-deep .p-multiselect-label,::ng-deep .p-multiselect-item,::ng-deep .p-panelmenu,::ng-deep .p-panelmenu-header,::ng-deep .p-panelmenu-content,::ng-deep .p-panel,::ng-deep .p-panel-header,::ng-deep .p-panel-content,::ng-deep .p-password,::ng-deep .p-picklist,::ng-deep .p-progressbar,::ng-deep .p-radiobutton,::ng-deep .p-rating,::ng-deep .p-sidebar,::ng-deep .p-splitbutton,::ng-deep .p-steps,::ng-deep .p-step,::ng-deep .p-table,::ng-deep .p-datatable,::ng-deep .p-tabview,::ng-deep .p-tabpanel,::ng-deep .p-tag,::ng-deep .p-toast,::ng-deep .p-toolbar,::ng-deep .p-tooltip,::ng-deep .p-tree,::ng-deep .p-treetable,::ng-deep .p-selectbutton,::ng-deep .p-stepper,::ng-deep .p-inputgroup,::ng-deep .p-inputgroup-addon,::ng-deep .p-text{font-family:Inter var,Inter,sans-serif!important}:host ::ng-deep .inputs{height:35px}:root{--kv-primary-color: #29b92d, --kv-secondary-color: #002542, --kv-terciary-color: #f2f3f5, --kv-primary-hover-color: #249a29, --kv-secondary-hover-color: #002038, --kv-terciary-hover-color: #d9dadb, --kv-primary-active-color: #1c801f, --kv-secondary-active-color: #001729, --kv-terciary-active-color: #c0c1c2, --kv-primary-disable-color: #1c801f, --kv-secondary-disable-color: #001729, --kv-terciary-disable-color: #c0c1c2, }::ng-deep .p-dialog .p-dialog-header{color:#fff!important;background:#002542!important;display:flex!important;flex-wrap:wrap;word-wrap:break-word}::ng-deep .p-dialog .p-dialog-content{padding-top:1rem}::ng-deep .p-dialog{min-width:320px}::ng-deep .p-dialog-content{overflow-x:hidden}::ng-deep .p-dialog-content::-webkit-scrollbar{width:8px}::ng-deep .p-dialog-content::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-dialog-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-dialog-content:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-dialog-content::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .p-dialog-footer{display:flex;justify-content:flex-end;padding:10px;gap:10px}::ng-deep .p-dialog .p-dialog-header .p-dialog-header-icon{display:none}img{border-style:solid;border-width:2px;border-radius:50%;object-fit:cover}i{font-size:22px}.botao-alterar-foto{border-style:none;width:max-content;background-color:#002542;color:#000;font-weight:700;cursor:pointer;padding:7px 9px}.botao-alterar-foto i{color:#fff}.botao-excluir-foto{border-style:none;width:max-content;background-color:#002542;color:#000;font-weight:700;cursor:pointer;padding:7px 9px}.botao-excluir-foto i{color:#fff}.btn{position:absolute;top:87%;left:87%;transform:translate(-50%,-50%)}.image-container{display:inline-block;position:relative}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
108
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvAvatarComponent, deps: [{ token: i1.ImagensService }, { token: i2.NotificationService }, { token: i3.DialogService }], target: i0.ɵɵFactoryTarget.Component }); }
109
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.3.8", type: KvAvatarComponent, selector: "kv-avatar", inputs: { borderColor: { classPropertyName: "borderColor", publicName: "borderColor", isSignal: false, isRequired: false, transformFunction: null }, btnsColor: { classPropertyName: "btnsColor", publicName: "btnsColor", isSignal: false, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: false, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: false, isRequired: false, transformFunction: null }, btnAlterarFoto: { classPropertyName: "btnAlterarFoto", publicName: "btnAlterarFoto", isSignal: false, isRequired: false, transformFunction: null }, imageUrl: { classPropertyName: "imageUrl", publicName: "imageUrl", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { imageUrlChange: "imageUrlChange", removerFotoEvent: "removerFotoEvent", onModalOpen: "onModalOpen" }, viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"image-container\">\r\n <!-- <img [src]=\"getImageSrc() || imageService.userDefaultImage()\" alt=\"Foto\" class=\"container-foto\" [style.border-color]=\"borderColor\" [style.width.px]=\"width\" [style.height.px]=\"height\" (error)=\"handleImageError($event)\" (click)=\"openFile()\"> -->\r\n\r\n <img [src]=\"imageSource()\" alt=\"Foto\" class=\"container-foto\" [style.border-color]=\"borderColor\" [style.width.px]=\"width\" [style.height.px]=\"height\" (error)=\"handleImageError($event)\">\r\n <div class=\"btn\">\r\n <input #fileInput *ngIf=\"btnAlterarFoto\" id=\"fotoEscolhida\" type=\"file\" accept=\"image/*\" style=\"display:none\" (change)=\"selectFotoSelecionada($any($event))\">\r\n <button *ngIf=\"btnAlterarFoto && !existeLogo\" class=\"botao-alterar-foto border-circle\" [style.background-color]=\"btnsColor\" (click)=\"openFile()\">\r\n <i class=\"material-symbols-outlined\">photo_camera</i>\r\n </button>\r\n \r\n <button *ngIf=\"btnAlterarFoto && existeLogo\" [style.background-color]=\"btnsColor\"\r\n class=\"botao-excluir-foto border-circle\r\n hover:shadow-3\r\n active:shadow-5\"\r\n (click)=\"questionRemoverFoto()\">\r\n <i class=\"material-symbols-outlined\">delete</i>\r\n </button>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0\";.material-symbols-outlined{font-family:Material Symbols Outlined!important}*{font-family:Inter var,Inter,sans-serif!important}::ng-deep .p-accordion,::ng-deep .p-accordion-header,::ng-deep .p-accordion-content,::ng-deep .p-badge,::ng-deep .p-overlay-badge,::ng-deep .p-breadcrumb,::ng-deep .p-breadcrumb-item,::ng-deep .p-breadcrumb-link,::ng-deep .p-button,::ng-deep .p-calendar,::ng-deep .p-card,::ng-deep .p-card-title,::ng-deep .p-card-subtitle,::ng-deep .p-card-content,::ng-deep .p-checkbox,::ng-deep .p-chip,::ng-deep .p-confirm-dialog,::ng-deep .p-confirm-dialog-message,::ng-deep .p-contextmenu,::ng-deep .p-contextmenu-item,::ng-deep .p-dataview,::ng-deep .p-dataview-content,::ng-deep .p-dialog,::ng-deep .p-dialog-title,::ng-deep .p-dialog-content,::ng-deep .p-dropdown,::ng-deep .p-dropdown-label,::ng-deep .p-dropdown-item,::ng-deep .p-dynamic-dialog,::ng-deep .p-dynamic-dialog-title,::ng-deep .p-dynamic-dialog-content,::ng-deep .p-editor,::ng-deep .p-fieldset,::ng-deep .p-fieldset-legend,::ng-deep .p-fieldset-content,::ng-deep .p-fileupload,::ng-deep .p-inputmask,::ng-deep .p-inputnumber,::ng-deep .p-inputtextarea,::ng-deep .p-inputtext,::ng-deep .p-menu,::ng-deep .p-menuitem,::ng-deep .p-menuitem-text,::ng-deep .p-message,::ng-deep .p-messages,::ng-deep .p-multiselect,::ng-deep .p-multiselect-label,::ng-deep .p-multiselect-item,::ng-deep .p-panelmenu,::ng-deep .p-panelmenu-header,::ng-deep .p-panelmenu-content,::ng-deep .p-panel,::ng-deep .p-panel-header,::ng-deep .p-panel-content,::ng-deep .p-password,::ng-deep .p-picklist,::ng-deep .p-progressbar,::ng-deep .p-radiobutton,::ng-deep .p-rating,::ng-deep .p-sidebar,::ng-deep .p-splitbutton,::ng-deep .p-steps,::ng-deep .p-step,::ng-deep .p-table,::ng-deep .p-datatable,::ng-deep .p-tabview,::ng-deep .p-tabpanel,::ng-deep .p-tag,::ng-deep .p-toast,::ng-deep .p-toolbar,::ng-deep .p-tooltip,::ng-deep .p-tree,::ng-deep .p-treetable,::ng-deep .p-selectbutton,::ng-deep .p-stepper,::ng-deep .p-inputgroup,::ng-deep .p-inputgroup-addon,::ng-deep .p-text{font-family:Inter var,Inter,sans-serif!important}:host ::ng-deep .inputs{height:35px}:root{--kv-primary-color: #29b92d, --kv-secondary-color: #002542, --kv-terciary-color: #f2f3f5, --kv-primary-hover-color: #249a29, --kv-secondary-hover-color: #002038, --kv-terciary-hover-color: #d9dadb, --kv-primary-active-color: #1c801f, --kv-secondary-active-color: #001729, --kv-terciary-active-color: #c0c1c2, --kv-primary-disable-color: #1c801f, --kv-secondary-disable-color: #001729, --kv-terciary-disable-color: #c0c1c2, }::ng-deep .p-dialog .p-dialog-header{color:#fff!important;background:#002542!important;display:flex!important;flex-wrap:wrap;word-wrap:break-word}::ng-deep .p-dialog .p-dialog-content{padding-top:1rem}::ng-deep .p-dialog{min-width:320px}::ng-deep .p-dialog-content{overflow-x:hidden}::ng-deep .p-dialog-content::-webkit-scrollbar{width:8px}::ng-deep .p-dialog-content::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-dialog-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-dialog-content:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-dialog-content::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .p-dialog-footer{display:flex;justify-content:flex-end;padding:10px;gap:10px}::ng-deep .p-dialog .p-dialog-header .p-dialog-header-icon{display:none}img{border-style:solid;border-width:2px;border-radius:50%;object-fit:cover}i{font-size:22px}.botao-alterar-foto{border-style:none;width:max-content;background-color:#002542;color:#000;font-weight:700;cursor:pointer;padding:7px 9px}.botao-alterar-foto i{color:#fff}.botao-excluir-foto{border-style:none;width:max-content;background-color:#002542;color:#000;font-weight:700;cursor:pointer;padding:7px 9px}.botao-excluir-foto i{color:#fff}.btn{position:absolute;top:87%;left:87%;transform:translate(-50%,-50%)}.image-container{display:inline-block;position:relative}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
114
110
  }
115
111
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvAvatarComponent, decorators: [{
116
112
  type: Component,
117
- args: [{ selector: 'kv-avatar', template: "<div class=\"image-container\">\r\n <img [src]=\"getImageSrc() || imageService.userDefaultImage()\" alt=\"Foto\" class=\"container-foto\" [style.border-color]=\"borderColor\" [style.width.px]=\"width\" [style.height.px]=\"height\" (error)=\"handleImageError($event)\" (click)=\"openFile()\">\r\n <div class=\"btn\">\r\n <input #fileInput *ngIf=\"btnAlterarFoto\" id=\"fotoEscolhida\" type=\"file\" accept=\"image/*\" style=\"display:none\" (change)=\"selectFotoSelecionada($any($event))\">\r\n <button *ngIf=\"btnAlterarFoto && !existeLogo\" class=\"botao-alterar-foto border-circle\" [style.background-color]=\"btnsColor\" (click)=\"openFile()\">\r\n <i class=\"material-symbols-outlined\">photo_camera</i>\r\n </button>\r\n \r\n <button *ngIf=\"btnAlterarFoto && existeLogo\" [style.background-color]=\"btnsColor\" class=\"botao-excluir-foto border-circle\" (click)=\"questionRemoverFoto()\">\r\n <i class=\"material-symbols-outlined\">delete</i>\r\n </button>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0\";.material-symbols-outlined{font-family:Material Symbols Outlined!important}*{font-family:Inter var,Inter,sans-serif!important}::ng-deep .p-accordion,::ng-deep .p-accordion-header,::ng-deep .p-accordion-content,::ng-deep .p-badge,::ng-deep .p-overlay-badge,::ng-deep .p-breadcrumb,::ng-deep .p-breadcrumb-item,::ng-deep .p-breadcrumb-link,::ng-deep .p-button,::ng-deep .p-calendar,::ng-deep .p-card,::ng-deep .p-card-title,::ng-deep .p-card-subtitle,::ng-deep .p-card-content,::ng-deep .p-checkbox,::ng-deep .p-chip,::ng-deep .p-confirm-dialog,::ng-deep .p-confirm-dialog-message,::ng-deep .p-contextmenu,::ng-deep .p-contextmenu-item,::ng-deep .p-dataview,::ng-deep .p-dataview-content,::ng-deep .p-dialog,::ng-deep .p-dialog-title,::ng-deep .p-dialog-content,::ng-deep .p-dropdown,::ng-deep .p-dropdown-label,::ng-deep .p-dropdown-item,::ng-deep .p-dynamic-dialog,::ng-deep .p-dynamic-dialog-title,::ng-deep .p-dynamic-dialog-content,::ng-deep .p-editor,::ng-deep .p-fieldset,::ng-deep .p-fieldset-legend,::ng-deep .p-fieldset-content,::ng-deep .p-fileupload,::ng-deep .p-inputmask,::ng-deep .p-inputnumber,::ng-deep .p-inputtextarea,::ng-deep .p-inputtext,::ng-deep .p-menu,::ng-deep .p-menuitem,::ng-deep .p-menuitem-text,::ng-deep .p-message,::ng-deep .p-messages,::ng-deep .p-multiselect,::ng-deep .p-multiselect-label,::ng-deep .p-multiselect-item,::ng-deep .p-panelmenu,::ng-deep .p-panelmenu-header,::ng-deep .p-panelmenu-content,::ng-deep .p-panel,::ng-deep .p-panel-header,::ng-deep .p-panel-content,::ng-deep .p-password,::ng-deep .p-picklist,::ng-deep .p-progressbar,::ng-deep .p-radiobutton,::ng-deep .p-rating,::ng-deep .p-sidebar,::ng-deep .p-splitbutton,::ng-deep .p-steps,::ng-deep .p-step,::ng-deep .p-table,::ng-deep .p-datatable,::ng-deep .p-tabview,::ng-deep .p-tabpanel,::ng-deep .p-tag,::ng-deep .p-toast,::ng-deep .p-toolbar,::ng-deep .p-tooltip,::ng-deep .p-tree,::ng-deep .p-treetable,::ng-deep .p-selectbutton,::ng-deep .p-stepper,::ng-deep .p-inputgroup,::ng-deep .p-inputgroup-addon,::ng-deep .p-text{font-family:Inter var,Inter,sans-serif!important}:host ::ng-deep .inputs{height:35px}:root{--kv-primary-color: #29b92d, --kv-secondary-color: #002542, --kv-terciary-color: #f2f3f5, --kv-primary-hover-color: #249a29, --kv-secondary-hover-color: #002038, --kv-terciary-hover-color: #d9dadb, --kv-primary-active-color: #1c801f, --kv-secondary-active-color: #001729, --kv-terciary-active-color: #c0c1c2, --kv-primary-disable-color: #1c801f, --kv-secondary-disable-color: #001729, --kv-terciary-disable-color: #c0c1c2, }::ng-deep .p-dialog .p-dialog-header{color:#fff!important;background:#002542!important;display:flex!important;flex-wrap:wrap;word-wrap:break-word}::ng-deep .p-dialog .p-dialog-content{padding-top:1rem}::ng-deep .p-dialog{min-width:320px}::ng-deep .p-dialog-content{overflow-x:hidden}::ng-deep .p-dialog-content::-webkit-scrollbar{width:8px}::ng-deep .p-dialog-content::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-dialog-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-dialog-content:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-dialog-content::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .p-dialog-footer{display:flex;justify-content:flex-end;padding:10px;gap:10px}::ng-deep .p-dialog .p-dialog-header .p-dialog-header-icon{display:none}img{border-style:solid;border-width:2px;border-radius:50%;object-fit:cover}i{font-size:22px}.botao-alterar-foto{border-style:none;width:max-content;background-color:#002542;color:#000;font-weight:700;cursor:pointer;padding:7px 9px}.botao-alterar-foto i{color:#fff}.botao-excluir-foto{border-style:none;width:max-content;background-color:#002542;color:#000;font-weight:700;cursor:pointer;padding:7px 9px}.botao-excluir-foto i{color:#fff}.btn{position:absolute;top:87%;left:87%;transform:translate(-50%,-50%)}.image-container{display:inline-block;position:relative}\n"] }]
118
- }], ctorParameters: () => [{ type: i1.ImagensService }, { type: i2.NotificationService }, { type: i3.DialogService }, { type: i3.DynamicDialogRef }], propDecorators: { imageUrl: [{
119
- type: Input
120
- }], borderColor: [{
113
+ args: [{ selector: 'kv-avatar', template: "<div class=\"image-container\">\r\n <!-- <img [src]=\"getImageSrc() || imageService.userDefaultImage()\" alt=\"Foto\" class=\"container-foto\" [style.border-color]=\"borderColor\" [style.width.px]=\"width\" [style.height.px]=\"height\" (error)=\"handleImageError($event)\" (click)=\"openFile()\"> -->\r\n\r\n <img [src]=\"imageSource()\" alt=\"Foto\" class=\"container-foto\" [style.border-color]=\"borderColor\" [style.width.px]=\"width\" [style.height.px]=\"height\" (error)=\"handleImageError($event)\">\r\n <div class=\"btn\">\r\n <input #fileInput *ngIf=\"btnAlterarFoto\" id=\"fotoEscolhida\" type=\"file\" accept=\"image/*\" style=\"display:none\" (change)=\"selectFotoSelecionada($any($event))\">\r\n <button *ngIf=\"btnAlterarFoto && !existeLogo\" class=\"botao-alterar-foto border-circle\" [style.background-color]=\"btnsColor\" (click)=\"openFile()\">\r\n <i class=\"material-symbols-outlined\">photo_camera</i>\r\n </button>\r\n \r\n <button *ngIf=\"btnAlterarFoto && existeLogo\" [style.background-color]=\"btnsColor\"\r\n class=\"botao-excluir-foto border-circle\r\n hover:shadow-3\r\n active:shadow-5\"\r\n (click)=\"questionRemoverFoto()\">\r\n <i class=\"material-symbols-outlined\">delete</i>\r\n </button>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0\";.material-symbols-outlined{font-family:Material Symbols Outlined!important}*{font-family:Inter var,Inter,sans-serif!important}::ng-deep .p-accordion,::ng-deep .p-accordion-header,::ng-deep .p-accordion-content,::ng-deep .p-badge,::ng-deep .p-overlay-badge,::ng-deep .p-breadcrumb,::ng-deep .p-breadcrumb-item,::ng-deep .p-breadcrumb-link,::ng-deep .p-button,::ng-deep .p-calendar,::ng-deep .p-card,::ng-deep .p-card-title,::ng-deep .p-card-subtitle,::ng-deep .p-card-content,::ng-deep .p-checkbox,::ng-deep .p-chip,::ng-deep .p-confirm-dialog,::ng-deep .p-confirm-dialog-message,::ng-deep .p-contextmenu,::ng-deep .p-contextmenu-item,::ng-deep .p-dataview,::ng-deep .p-dataview-content,::ng-deep .p-dialog,::ng-deep .p-dialog-title,::ng-deep .p-dialog-content,::ng-deep .p-dropdown,::ng-deep .p-dropdown-label,::ng-deep .p-dropdown-item,::ng-deep .p-dynamic-dialog,::ng-deep .p-dynamic-dialog-title,::ng-deep .p-dynamic-dialog-content,::ng-deep .p-editor,::ng-deep .p-fieldset,::ng-deep .p-fieldset-legend,::ng-deep .p-fieldset-content,::ng-deep .p-fileupload,::ng-deep .p-inputmask,::ng-deep .p-inputnumber,::ng-deep .p-inputtextarea,::ng-deep .p-inputtext,::ng-deep .p-menu,::ng-deep .p-menuitem,::ng-deep .p-menuitem-text,::ng-deep .p-message,::ng-deep .p-messages,::ng-deep .p-multiselect,::ng-deep .p-multiselect-label,::ng-deep .p-multiselect-item,::ng-deep .p-panelmenu,::ng-deep .p-panelmenu-header,::ng-deep .p-panelmenu-content,::ng-deep .p-panel,::ng-deep .p-panel-header,::ng-deep .p-panel-content,::ng-deep .p-password,::ng-deep .p-picklist,::ng-deep .p-progressbar,::ng-deep .p-radiobutton,::ng-deep .p-rating,::ng-deep .p-sidebar,::ng-deep .p-splitbutton,::ng-deep .p-steps,::ng-deep .p-step,::ng-deep .p-table,::ng-deep .p-datatable,::ng-deep .p-tabview,::ng-deep .p-tabpanel,::ng-deep .p-tag,::ng-deep .p-toast,::ng-deep .p-toolbar,::ng-deep .p-tooltip,::ng-deep .p-tree,::ng-deep .p-treetable,::ng-deep .p-selectbutton,::ng-deep .p-stepper,::ng-deep .p-inputgroup,::ng-deep .p-inputgroup-addon,::ng-deep .p-text{font-family:Inter var,Inter,sans-serif!important}:host ::ng-deep .inputs{height:35px}:root{--kv-primary-color: #29b92d, --kv-secondary-color: #002542, --kv-terciary-color: #f2f3f5, --kv-primary-hover-color: #249a29, --kv-secondary-hover-color: #002038, --kv-terciary-hover-color: #d9dadb, --kv-primary-active-color: #1c801f, --kv-secondary-active-color: #001729, --kv-terciary-active-color: #c0c1c2, --kv-primary-disable-color: #1c801f, --kv-secondary-disable-color: #001729, --kv-terciary-disable-color: #c0c1c2, }::ng-deep .p-dialog .p-dialog-header{color:#fff!important;background:#002542!important;display:flex!important;flex-wrap:wrap;word-wrap:break-word}::ng-deep .p-dialog .p-dialog-content{padding-top:1rem}::ng-deep .p-dialog{min-width:320px}::ng-deep .p-dialog-content{overflow-x:hidden}::ng-deep .p-dialog-content::-webkit-scrollbar{width:8px}::ng-deep .p-dialog-content::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-dialog-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-dialog-content:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-dialog-content::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .p-dialog-footer{display:flex;justify-content:flex-end;padding:10px;gap:10px}::ng-deep .p-dialog .p-dialog-header .p-dialog-header-icon{display:none}img{border-style:solid;border-width:2px;border-radius:50%;object-fit:cover}i{font-size:22px}.botao-alterar-foto{border-style:none;width:max-content;background-color:#002542;color:#000;font-weight:700;cursor:pointer;padding:7px 9px}.botao-alterar-foto i{color:#fff}.botao-excluir-foto{border-style:none;width:max-content;background-color:#002542;color:#000;font-weight:700;cursor:pointer;padding:7px 9px}.botao-excluir-foto i{color:#fff}.btn{position:absolute;top:87%;left:87%;transform:translate(-50%,-50%)}.image-container{display:inline-block;position:relative}\n"] }]
114
+ }], ctorParameters: () => [{ type: i1.ImagensService }, { type: i2.NotificationService }, { type: i3.DialogService }], propDecorators: { borderColor: [{
121
115
  type: Input
122
116
  }], btnsColor: [{
123
117
  type: Input
@@ -137,4 +131,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
137
131
  type: ViewChild,
138
132
  args: ['fileInput']
139
133
  }] } });
140
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtYXZhdGFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWF2YXRhci9rdi1hdmF0YXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtYXZhdGFyL2t2LWF2YXRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUdULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUt2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQzs7Ozs7O0FBQ2xGLGtGQUFrRjtBQU9sRixNQUFNLE9BQU8saUJBQWtCLFNBQVEsaUJBQWlCO0lBaUJ0RCxZQUFtQixZQUE0QixFQUMxQixtQkFBd0MsRUFDeEMsYUFBNEIsRUFDOUIsZ0JBQWtDO1FBQ2hELEtBQUssQ0FBQyxhQUFhLEVBQUUsbUJBQW1CLENBQUMsQ0FBQTtRQUozQixpQkFBWSxHQUFaLFlBQVksQ0FBZ0I7UUFDMUIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM5QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBbEI1QyxnQkFBVyxHQUFXLFNBQVMsQ0FBQztRQUNoQyxjQUFTLEdBQVcsU0FBUyxDQUFDO1FBQzlCLFVBQUssR0FBVyxHQUFHLENBQUM7UUFDcEIsV0FBTSxHQUFXLEdBQUcsQ0FBQztRQUNwQixtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDNUMscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUM1QyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDeEMsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFFekMsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixrQkFBYSxHQUFXLEVBQUUsQ0FBQztJQVcxQixDQUFDO0lBRUYsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN2SSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDdkIsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLE9BQU8sd0JBQXdCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNsRCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzlDLENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLE1BQU0sWUFBWSxHQUE0QixRQUFRLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBcUIsQ0FBQztRQUMzRyxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQztJQUVELHFCQUFxQixDQUFDLEtBQVU7UUFDOUIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7WUFDaEMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQixNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsTUFBZ0IsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0JBQ3ZCLGlDQUFpQztZQUNuQyxDQUFDLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixNQUFNLEdBQUcsR0FBRyxvRUFBb0UsQ0FBQztRQUVqRixJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDO1lBQ2hDLElBQUksRUFBRSxVQUFVO1lBQ2hCLE9BQU8sRUFBRSxHQUFHO1lBQ1osTUFBTSxFQUFFLENBQUMsSUFBUSxFQUFFLEVBQUU7Z0JBRW5CLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtZQUNwQixDQUFDO1lBQ0QsTUFBTSxFQUFFLENBQUMsSUFBUSxFQUFFLEVBQUU7WUFFckIsQ0FBQztTQUNGLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFVO1FBQ3pCLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxRCxDQUFDO0lBRUQsNkJBQTZCO0lBQzdCLHFCQUFxQjtJQUNyQiw0QkFBNEI7SUFDNUIsY0FBYztJQUNkLDZDQUE2QztJQUM3QyxpREFBaUQ7SUFDakQsU0FBUztJQUNULFFBQVE7SUFDUiw0QkFBNEI7SUFDNUIscUJBQXFCO0lBQ3JCLHNCQUFzQjtJQUN0Qiw0QkFBNEI7SUFDNUIsc0VBQXNFO0lBQ3RFLFFBQVE7SUFFUixNQUFNO0lBQ04sd0dBQXdHO0lBQ3hHLG1DQUFtQztJQUNuQyw2Q0FBNkM7SUFDN0MsK0NBQStDO0lBQy9DLDhEQUE4RDtJQUM5RCx1Q0FBdUM7SUFDdkMsNkRBQTZEO0lBQzdELElBQUk7SUFFSixZQUFZO1FBQ1YsTUFBTSxHQUFHLEdBQWtELElBQUksQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUE7UUFDbkcsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzlCLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUFDeEMsTUFBTSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsR0FBRyxVQUFVLENBQUM7UUFDMUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFekQsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFBO0lBQzlDLENBQUM7OEdBdkhVLGlCQUFpQjtrR0FBakIsaUJBQWlCLDJiQ3JCOUIsNC9CQWFBOzsyRkRRYSxpQkFBaUI7a0JBTDdCLFNBQVM7K0JBQ0UsV0FBVztnTEFLWixRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNJLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0UsY0FBYztzQkFBdEIsS0FBSztnQkFNa0IsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgQ29tcG9uZW50UmVmLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBJbWFnZW5zU2VydmljZSB9IGZyb20gJy4uLy4uL2FwaS9zZXJ2aWNlcy9pbWFnZW5zLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBpL3NlcnZpY2VzL25vdGlmaWNhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSwgRHluYW1pY0RpYWxvZ1JlZiB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcbmltcG9ydCB7IEJhc2VDb21wb25lbnRDcnVkIH0gZnJvbSAnLi4vLi4vYXBpL2Jhc2UtY29tcG9uZW50cy9iYXNlLWNvbXBvbmVudC1jcnVkJztcclxuLy8gaW1wb3J0IHsgS3ZDcm9wSW1hZ2VDb21wb25lbnQgfSBmcm9tICcuL2t2LWNyb3AtaW1hZ2Uva3YtY3JvcC1pbWFnZS5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdrdi1hdmF0YXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9rdi1hdmF0YXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2t2LWF2YXRhci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBLdkF2YXRhckNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnRDcnVkIHtcclxuICBASW5wdXQoKSBpbWFnZVVybCE6IHN0cmluZztcclxuICBASW5wdXQoKSBib3JkZXJDb2xvcjogc3RyaW5nID0gJyMwMDI1NDInO1xyXG4gIEBJbnB1dCgpIGJ0bnNDb2xvcjogc3RyaW5nID0gJyMwMDI1NDInO1xyXG4gIEBJbnB1dCgpIHdpZHRoOiBudW1iZXIgPSAxMzU7XHJcbiAgQElucHV0KCkgaGVpZ2h0OiBudW1iZXIgPSAxMzU7XHJcbiAgQE91dHB1dCgpIGltYWdlVXJsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgQE91dHB1dCgpIHJlbW92ZXJGb3RvRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgQE91dHB1dCgpIG9uTW9kYWxPcGVuID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBJbnB1dCgpIGJ0bkFsdGVyYXJGb3RvOiBib29sZWFuID0gZmFsc2U7XHJcbiAgXHJcbiAgZXhpc3RlTG9nbyA9IGZhbHNlO1xyXG4gIHNlbGVjdGVkSW1hZ2U6IHN0cmluZyA9ICcnO1xyXG5cclxuXHJcbiAgQFZpZXdDaGlsZCgnZmlsZUlucHV0JykgZmlsZUlucHV0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIGltYWdlU2VydmljZTogSW1hZ2Vuc1NlcnZpY2UsIFxyXG4gICAgICAgICAgICAgIG92ZXJyaWRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UsIFxyXG4gICAgICAgICAgICAgIG92ZXJyaWRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHVibGljIGR5bmFtaWNEaWFsb2dSZWY6IER5bmFtaWNEaWFsb2dSZWZcclxuICAgKSB7IHN1cGVyKGRpYWxvZ1NlcnZpY2UsIG5vdGlmaWNhdGlvblNlcnZpY2UpIFxyXG4gICAgXHJcbiAgIH1cclxuXHJcbiAgZ2V0SW1hZ2VTcmMoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmltYWdlVXJsICYmICh0aGlzLmltYWdlVXJsLnN0YXJ0c1dpdGgoJ2RhdGE6aW1hZ2UnKSB8fCB0aGlzLmltYWdlVXJsLnN0YXJ0c1dpdGgoJ2h0dHAnKSB8fCB0aGlzLmltYWdlVXJsLnN0YXJ0c1dpdGgoJ2h0dHBzJykpKSB7XHJcbiAgICAgIHRoaXMuZXhpc3RlTG9nbyA9IHRydWU7XHJcbiAgICAgIHJldHVybiB0aGlzLmltYWdlVXJsO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmltYWdlVXJsKSB7XHJcbiAgICAgIHRoaXMuZXhpc3RlTG9nbyA9IHRydWU7XHJcbiAgICAgIHJldHVybiAnZGF0YTppbWFnZS9qcGc7YmFzZTY0LCcgKyB0aGlzLmltYWdlVXJsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5leGlzdGVMb2dvID0gZmFsc2U7XHJcbiAgICAgIHJldHVybiB0aGlzLmltYWdlU2VydmljZS51c2VyRGVmYXVsdEltYWdlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVuRmlsZSgpIHtcclxuICAgIGNvbnN0IGlucHV0RWxlbWVudDogSFRNTElucHV0RWxlbWVudCB8IG51bGwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm90b0VzY29saGlkYScpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICBpZiAoaW5wdXRFbGVtZW50KSB7XHJcbiAgICAgIGlucHV0RWxlbWVudC5jbGljaygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0Rm90b1NlbGVjaW9uYWRhKGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IGZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XHJcbiAgICBpZiAoZmlsZSkge1xyXG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSW1hZ2UgPSByZWFkZXIucmVzdWx0IGFzIHN0cmluZztcclxuICAgICAgICB0aGlzLmV4aXN0ZUxvZ28gPSB0cnVlO1xyXG4gICAgICAgIC8vIHRoaXMuYWJyaXJNb2RhbFJlY29ydGFyRm90bygpO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcXVlc3Rpb25SZW1vdmVyRm90bygpe1xyXG4gICAgY29uc3QgbXNnID0gJzxoMz5Wb2PDqiB0ZW0gY2VydGV6YSBxdWUgZGVzZWphIHJldGlyYXIgYSBmb3RvIGRlc3NlIHVzdcOhcmlvPzwvaDM+JztcclxuXHJcbiAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UucXVlc3Rpb24oe1xyXG4gICAgICB0eXBlOiAncXVlc3Rpb24nLFxyXG4gICAgICBtZXNzYWdlOiBtc2csXHJcbiAgICAgIGFjY2VwdDogKGRhdGE6YW55KSA9PlxyXG4gICAgICB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVyRm90bygpXHJcbiAgICAgIH0sXHJcbiAgICAgIHJlamVjdDogKGRhdGE6YW55KSA9PiB7XHJcblxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlckZvdG8oKSB7XHJcbiAgICB0aGlzLmltYWdlVXJsID0gJyc7XHJcbiAgICB0aGlzLnJlbW92ZXJGb3RvRXZlbnQuZW1pdCgpO1xyXG4gICAgdGhpcy5leGlzdGVMb2dvID0gZmFsc2U7XHJcbiAgICB0aGlzLmltYWdlVXJsQ2hhbmdlLmVtaXQodGhpcy5pbWFnZVVybCk7XHJcbiAgICB0aGlzLmZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVJbWFnZUVycm9yKGV2ZW50OiBhbnkpIHtcclxuICAgIGV2ZW50LnRhcmdldC5zcmMgPSB0aGlzLmltYWdlU2VydmljZS51c2VyRGVmYXVsdEltYWdlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBhYnJpck1vZGFsUmVjb3J0YXJGb3RvKCkge1xyXG4gIC8vICAgdGhpcy5vcGVuRGlhbG9nKFxyXG4gIC8vICAgICBLdkNyb3BJbWFnZUNvbXBvbmVudCxcclxuICAvLyAgICAgKCkgPT4ge1xyXG4gIC8vICAgICAgIHRoaXMuaW1hZ2VVcmwgPSB0aGlzLnJlY2ViZXJEYWRvcygpO1xyXG4gIC8vICAgICAgIHRoaXMuaW1hZ2VVcmxDaGFuZ2UuZW1pdCh0aGlzLmltYWdlVXJsKTtcclxuICAvLyAgICAgfSxcclxuICAvLyAgICAge1xyXG4gIC8vICAgICAgIG1heGltaXphYmxlOiBmYWxzZSxcclxuICAvLyAgICAgICBwb3B1cDogdHJ1ZSxcclxuICAvLyAgICAgICB3aWR0aDogJzYwJScsXHJcbiAgLy8gICAgICAgaGVhZGVyOiAnUmVjb3J0YXInLFxyXG4gIC8vICAgICAgIGlkOntpbWFnZW1TZWxlY2lvbmFkYTogdGhpcy5zZWxlY3RlZEltYWdlLCBpbWFnZW1Db3J0YWRhOiAnJ31cclxuICAvLyAgICAgfVxyXG4gICAgICBcclxuICAvLyAgIClcclxuICAvLyAgIGNvbnN0IGFycjogTWFwPER5bmFtaWNEaWFsb2dSZWY8YW55PiwgQ29tcG9uZW50UmVmPGFueT4+ID0gdGhpcy5kaWFsb2dTZXJ2aWNlLmRpYWxvZ0NvbXBvbmVudFJlZk1hcFxyXG4gIC8vICAgY29uc3QgZW50cmllcyA9IGFyci5lbnRyaWVzKCk7XHJcbiAgLy8gICBjb25zdCBmaXJzdEVudHJ5ID0gZW50cmllcy5uZXh0KCkudmFsdWU7XHJcbiAgLy8gICBjb25zdCBbZmlyc3RLZXksIGZpcnN0VmFsdWVdID0gZmlyc3RFbnRyeTtcclxuICAvLyAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5kaWFsb2dTZXJ2aWNlLmdldEluc3RhbmNlKGZpcnN0S2V5KVxyXG4gIC8vICAgaW5zdGFuY2UuY29uZmlnLnNob3dIZWFkZXIgPSBmYWxzZVxyXG4gIC8vICAgaW5zdGFuY2UuY29uZmlnLmNvbnRlbnRTdHlsZSA9IHsnYm9yZGVyLXJhZGl1cyc6ICcxMnB4J31cclxuICAvLyB9XHJcblxyXG4gIHJlY2ViZXJEYWRvcygpe1xyXG4gICAgY29uc3QgYXJyOiBNYXA8RHluYW1pY0RpYWxvZ1JlZjxhbnk+LCBDb21wb25lbnRSZWY8YW55Pj4gPSB0aGlzLmRpYWxvZ1NlcnZpY2UuZGlhbG9nQ29tcG9uZW50UmVmTWFwXHJcbiAgICBjb25zdCBlbnRyaWVzID0gYXJyLmVudHJpZXMoKTtcclxuICAgIGNvbnN0IGZpcnN0RW50cnkgPSBlbnRyaWVzLm5leHQoKS52YWx1ZTtcclxuICAgIGNvbnN0IFtmaXJzdEtleSwgZmlyc3RWYWx1ZV0gPSBmaXJzdEVudHJ5O1xyXG4gICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmRpYWxvZ1NlcnZpY2UuZ2V0SW5zdGFuY2UoZmlyc3RLZXkpXHJcblxyXG4gICAgcmV0dXJuIGluc3RhbmNlLmNvbmZpZy5kYXRhLmlkLmltYWdlbUNvcnRhZGFcclxuICB9ICBcclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiaW1hZ2UtY29udGFpbmVyXCI+XHJcbiAgPGltZyBbc3JjXT1cImdldEltYWdlU3JjKCkgfHwgaW1hZ2VTZXJ2aWNlLnVzZXJEZWZhdWx0SW1hZ2UoKVwiIGFsdD1cIkZvdG9cIiBjbGFzcz1cImNvbnRhaW5lci1mb3RvXCIgW3N0eWxlLmJvcmRlci1jb2xvcl09XCJib3JkZXJDb2xvclwiIFtzdHlsZS53aWR0aC5weF09XCJ3aWR0aFwiIFtzdHlsZS5oZWlnaHQucHhdPVwiaGVpZ2h0XCIgKGVycm9yKT1cImhhbmRsZUltYWdlRXJyb3IoJGV2ZW50KVwiIChjbGljayk9XCJvcGVuRmlsZSgpXCI+XHJcbiAgPGRpdiBjbGFzcz1cImJ0blwiPlxyXG4gICAgPGlucHV0ICNmaWxlSW5wdXQgKm5nSWY9XCJidG5BbHRlcmFyRm90b1wiIGlkPVwiZm90b0VzY29saGlkYVwiIHR5cGU9XCJmaWxlXCIgYWNjZXB0PVwiaW1hZ2UvKlwiIHN0eWxlPVwiZGlzcGxheTpub25lXCIgKGNoYW5nZSk9XCJzZWxlY3RGb3RvU2VsZWNpb25hZGEoJGFueSgkZXZlbnQpKVwiPlxyXG4gICAgPGJ1dHRvbiAqbmdJZj1cImJ0bkFsdGVyYXJGb3RvICYmICFleGlzdGVMb2dvXCIgY2xhc3M9XCJib3Rhby1hbHRlcmFyLWZvdG8gYm9yZGVyLWNpcmNsZVwiIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImJ0bnNDb2xvclwiIChjbGljayk9XCJvcGVuRmlsZSgpXCI+XHJcbiAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPnBob3RvX2NhbWVyYTwvaT5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgXHJcbiAgICA8YnV0dG9uICpuZ0lmPVwiYnRuQWx0ZXJhckZvdG8gJiYgZXhpc3RlTG9nb1wiIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImJ0bnNDb2xvclwiIGNsYXNzPVwiYm90YW8tZXhjbHVpci1mb3RvIGJvcmRlci1jaXJjbGVcIiAoY2xpY2spPVwicXVlc3Rpb25SZW1vdmVyRm90bygpXCI+XHJcbiAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPmRlbGV0ZTwvaT5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtYXZhdGFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWF2YXRhci9rdi1hdmF0YXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtYXZhdGFyL2t2LWF2YXRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUdULFlBQVksRUFDWixLQUFLLEVBQ0wsS0FBSyxFQUVMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOzs7Ozs7QUFRL0UsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGlCQUFpQjtJQWV0RCxZQUFtQixZQUE0QixFQUMxQixtQkFBd0MsRUFDeEMsYUFBNEI7UUFDNUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxtQkFBbUIsQ0FBQyxDQUFBO1FBSDNCLGlCQUFZLEdBQVosWUFBWSxDQUFnQjtRQUMxQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBaEJ4QyxnQkFBVyxHQUFXLFNBQVMsQ0FBQztRQUNoQyxjQUFTLEdBQVcsU0FBUyxDQUFDO1FBQzlCLFVBQUssR0FBVyxHQUFHLENBQUM7UUFDcEIsV0FBTSxHQUFXLEdBQUcsQ0FBQztRQUNwQixtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDNUMscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUM1QyxnQkFBVyxHQUFHLElBQUks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QUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUQsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25DLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBWSxHQUFHLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQzdELENBQUM7SUFFRCxZQUFZO1FBQ1YsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDO1FBQ25GLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTFELE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQTtJQUM5QyxDQUFDOzhHQXRIVSxpQkFBaUI7a0dBQWpCLGlCQUFpQix1a0NDMUI5QixpeUNBbUJBOzsyRkRPYSxpQkFBaUI7a0JBTjdCLFNBQVM7K0JBQ0UsV0FBVztpSkFNWixXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDSSxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNFLGNBQWM7c0JBQXRCLEtBQUs7Z0JBS2tCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbXBvbmVudFJlZixcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBpbnB1dCxcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIHNpZ25hbCxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBJbWFnZW5zU2VydmljZSB9IGZyb20gJy4uLy4uL2FwaS9zZXJ2aWNlcy9pbWFnZW5zLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBpL3NlcnZpY2VzL25vdGlmaWNhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSwgRHluYW1pY0RpYWxvZ1JlZiB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcbmltcG9ydCB7IEJhc2VDb21wb25lbnRDcnVkIH0gZnJvbSAnLi4vLi4vYXBpL2Jhc2UtY29tcG9uZW50cy9iYXNlLWNvbXBvbmVudC1jcnVkJztcclxuaW1wb3J0IHsgS3ZDcm9wSW1hZ2VDb21wb25lbnQgfSBmcm9tICcuL2t2LWNyb3AtaW1hZ2Uva3YtY3JvcC1pbWFnZS5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdrdi1hdmF0YXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9rdi1hdmF0YXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2t2LWF2YXRhci5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIEt2QXZhdGFyQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudENydWQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIGJvcmRlckNvbG9yOiBzdHJpbmcgPSAnIzAwMjU0Mic7XHJcbiAgQElucHV0KCkgYnRuc0NvbG9yOiBzdHJpbmcgPSAnIzAwMjU0Mic7XHJcbiAgQElucHV0KCkgd2lkdGg6IG51bWJlciA9IDEzNTtcclxuICBASW5wdXQoKSBoZWlnaHQ6IG51bWJlciA9IDEzNTtcclxuICBAT3V0cHV0KCkgaW1hZ2VVcmxDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCkgcmVtb3ZlckZvdG9FdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgb25Nb2RhbE9wZW4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgQElucHV0KCkgYnRuQWx0ZXJhckZvdG86IGJvb2xlYW4gPSBmYWxzZTtcclxuICBcclxuICBleGlzdGVMb2dvID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRJbWFnZTogc3RyaW5nID0gJyc7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2ZpbGVJbnB1dCcpIGZpbGVJbnB1dCE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBpbWFnZVNlcnZpY2U6IEltYWdlbnNTZXJ2aWNlLCBcclxuICAgICAgICAgICAgICBvdmVycmlkZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLCBcclxuICAgICAgICAgICAgICBvdmVycmlkZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICApIHsgc3VwZXIoZGlhbG9nU2VydmljZSwgbm90aWZpY2F0aW9uU2VydmljZSkgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaW1hZ2VTb3VyY2Uuc2V0KHRoaXMuaW1hZ2VVcmwoKSlcclxuICAgIHRoaXMuZ2V0SW1hZ2VTcmMoKVxyXG4gIH1cclxuXHJcbiAgIGltYWdlVXJsID0gaW5wdXQ8c3RyaW5nPih0aGlzLmltYWdlU2VydmljZS51c2VyRGVmYXVsdEltYWdlKCkpXHJcbiAgIGltYWdlU291cmNlID0gc2lnbmFsPHN0cmluZz4odGhpcy5pbWFnZVNlcnZpY2UudXNlckRlZmF1bHRJbWFnZSgpKVxyXG5cclxuICBnZXRJbWFnZVNyYygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmltYWdlVXJsICYmICh0aGlzLmltYWdlVXJsKCkuc3RhcnRzV2l0aCgnZGF0YTppbWFnZScpIHx8IHRoaXMuaW1hZ2VVcmwoKS5zdGFydHNXaXRoKCdodHRwJykgfHwgdGhpcy5pbWFnZVVybCgpLnN0YXJ0c1dpdGgoJ2h0dHBzJykpKSB7XHJcbiAgICAgIHRoaXMuZXhpc3RlTG9nbyA9IHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaW1hZ2VVcmwubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmV4aXN0ZUxvZ28gPSB0cnVlO1xyXG4gICAgICB0aGlzLmltYWdlU291cmNlLnNldCgnZGF0YTppbWFnZS9qcGc7YmFzZTY0LCcgKyB0aGlzLmltYWdlVXJsKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5leGlzdGVMb2dvID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaW1hZ2VTb3VyY2Uuc2V0KHRoaXMuaW1hZ2VTZXJ2aWNlLnVzZXJEZWZhdWx0SW1hZ2UoKSlcclxuICAgIH0gIFxyXG4gIH1cclxuXHJcbiAgb3BlbkZpbGUoKSB7XHJcbiAgICBjb25zdCBpbnB1dEVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZvdG9Fc2NvbGhpZGEnKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgaWYgKGlucHV0RWxlbWVudCkge1xyXG4gICAgICBpbnB1dEVsZW1lbnQuY2xpY2soKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbGVjdEZvdG9TZWxlY2lvbmFkYShldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBmaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xyXG4gICAgaWYgKGZpbGUpIHtcclxuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEltYWdlID0gcmVhZGVyLnJlc3VsdCBhcyBzdHJpbmc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5hYnJpck1vZGFsUmVjb3J0YXJGb3RvKCk7XHJcbiAgICAgICAgdGhpcy5leGlzdGVMb2dvID0gZmFsc2U7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBxdWVzdGlvblJlbW92ZXJGb3RvKCl7XHJcbiAgICBjb25zdCBtc2cgPSAnPGgzPlZvY8OqIHRlbSBjZXJ0ZXphIHF1ZSBkZXNlamEgcmV0aXJhciBhIGZvdG8gZGVzc2UgdXN1w6FyaW8/PC9oMz4nO1xyXG5cclxuICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5xdWVzdGlvbih7XHJcbiAgICAgIHR5cGU6ICdxdWVzdGlvbicsXHJcbiAgICAgIG1lc3NhZ2U6IG1zZyxcclxuICAgICAgYWNjZXB0OiAoZGF0YTphbnkpID0+XHJcbiAgICAgIHtcclxuICAgICAgICB0aGlzLnJlbW92ZXJGb3RvKClcclxuICAgICAgfSxcclxuICAgICAgcmVqZWN0OiAoZGF0YTphbnkpID0+IHtcclxuXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICByZW1vdmVyRm90bygpIHtcclxuICAgIHRoaXMuaW1hZ2VTb3VyY2Uuc2V0KCcnKVxyXG4gICAgdGhpcy5yZW1vdmVyRm90b0V2ZW50LmVtaXQoKTtcclxuICAgIHRoaXMuZXhpc3RlTG9nbyA9IGZhbHNlO1xyXG4gICAgdGhpcy5pbWFnZVVybENoYW5nZS5lbWl0KHRoaXMuaW1hZ2VTb3VyY2UoKSk7XHJcbiAgICB0aGlzLmZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVJbWFnZUVycm9yKGV2ZW50OiBhbnkpIHtcclxuICAgIGV2ZW50LnRhcmdldC5zcmMgPSB0aGlzLmltYWdlU2VydmljZS51c2VyRGVmYXVsdEltYWdlKCk7XHJcbiAgfVxyXG5cclxuICBhYnJpck1vZGFsUmVjb3J0YXJGb3RvKCkge1xyXG4gICAgdGhpcy5vcGVuRGlhbG9nKFxyXG4gICAgICBLdkNyb3BJbWFnZUNvbXBvbmVudCxcclxuICAgICAgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaW1hZ2VVcmwgPSB0aGlzLnJlY2ViZXJEYWRvcygpO1xyXG4gICAgICAgIHRoaXMuaW1hZ2VTb3VyY2Uuc2V0KHRoaXMucmVjZWJlckRhZG9zKCkgYXMgc3RyaW5nKVxyXG4gICAgICAgIHRoaXMuaW1hZ2VVcmxDaGFuZ2UuZW1pdCh0aGlzLmltYWdlU291cmNlKCkpO1xyXG4gICAgICAgIHRoaXMuZXhpc3RlTG9nbyA9IHRydWU7XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBtYXhpbWl6YWJsZTogZmFsc2UsXHJcbiAgICAgICAgcG9wdXA6IHRydWUsXHJcbiAgICAgICAgd2lkdGg6ICc2MCUnLFxyXG4gICAgICAgIGhlYWRlcjogJ1JlY29ydGFyJyxcclxuICAgICAgICBpZDp7aW1hZ2VtU2VsZWNpb25hZGE6IHRoaXMuc2VsZWN0ZWRJbWFnZSwgaW1hZ2VtQ29ydGFkYTogJyd9XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICApXHJcbiAgICBjb25zdCBbZmlyc3RLZXldID0gdGhpcy5kaWFsb2dTZXJ2aWNlLmRpYWxvZ0NvbXBvbmVudFJlZk1hcC5lbnRyaWVzKCkubmV4dCgpLnZhbHVlO1xyXG4gICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmRpYWxvZ1NlcnZpY2UuZ2V0SW5zdGFuY2UoZmlyc3RLZXkpO1xyXG4gICAgaW5zdGFuY2UuY29uZmlnLnNob3dIZWFkZXIgPSBmYWxzZTtcclxuICAgIGluc3RhbmNlLmNvbmZpZy5jb250ZW50U3R5bGUgPSB7ICdib3JkZXItcmFkaXVzJzogJzEycHgnIH07XHJcbiAgfVxyXG5cclxuICByZWNlYmVyRGFkb3MoKXtcclxuICAgIGNvbnN0IFtmaXJzdEtleV0gPSB0aGlzLmRpYWxvZ1NlcnZpY2UuZGlhbG9nQ29tcG9uZW50UmVmTWFwLmVudHJpZXMoKS5uZXh0KCkudmFsdWU7XHJcbiAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuZGlhbG9nU2VydmljZS5nZXRJbnN0YW5jZShmaXJzdEtleSk7XHJcblxyXG4gICAgcmV0dXJuIGluc3RhbmNlLmNvbmZpZy5kYXRhLmlkLmltYWdlbUNvcnRhZGFcclxuICB9ICBcclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiaW1hZ2UtY29udGFpbmVyXCI+XHJcbiAgPCEtLSA8aW1nIFtzcmNdPVwiZ2V0SW1hZ2VTcmMoKSB8fCBpbWFnZVNlcnZpY2UudXNlckRlZmF1bHRJbWFnZSgpXCIgYWx0PVwiRm90b1wiIGNsYXNzPVwiY29udGFpbmVyLWZvdG9cIiBbc3R5bGUuYm9yZGVyLWNvbG9yXT1cImJvcmRlckNvbG9yXCIgW3N0eWxlLndpZHRoLnB4XT1cIndpZHRoXCIgW3N0eWxlLmhlaWdodC5weF09XCJoZWlnaHRcIiAoZXJyb3IpPVwiaGFuZGxlSW1hZ2VFcnJvcigkZXZlbnQpXCIgKGNsaWNrKT1cIm9wZW5GaWxlKClcIj4gLS0+XHJcblxyXG4gIDxpbWcgW3NyY109XCJpbWFnZVNvdXJjZSgpXCIgYWx0PVwiRm90b1wiIGNsYXNzPVwiY29udGFpbmVyLWZvdG9cIiBbc3R5bGUuYm9yZGVyLWNvbG9yXT1cImJvcmRlckNvbG9yXCIgW3N0eWxlLndpZHRoLnB4XT1cIndpZHRoXCIgW3N0eWxlLmhlaWdodC5weF09XCJoZWlnaHRcIiAoZXJyb3IpPVwiaGFuZGxlSW1hZ2VFcnJvcigkZXZlbnQpXCI+XHJcbiAgPGRpdiBjbGFzcz1cImJ0blwiPlxyXG4gICAgPGlucHV0ICNmaWxlSW5wdXQgKm5nSWY9XCJidG5BbHRlcmFyRm90b1wiIGlkPVwiZm90b0VzY29saGlkYVwiIHR5cGU9XCJmaWxlXCIgYWNjZXB0PVwiaW1hZ2UvKlwiIHN0eWxlPVwiZGlzcGxheTpub25lXCIgKGNoYW5nZSk9XCJzZWxlY3RGb3RvU2VsZWNpb25hZGEoJGFueSgkZXZlbnQpKVwiPlxyXG4gICAgPGJ1dHRvbiAqbmdJZj1cImJ0bkFsdGVyYXJGb3RvICYmICFleGlzdGVMb2dvXCIgY2xhc3M9XCJib3Rhby1hbHRlcmFyLWZvdG8gYm9yZGVyLWNpcmNsZVwiIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImJ0bnNDb2xvclwiIChjbGljayk9XCJvcGVuRmlsZSgpXCI+XHJcbiAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPnBob3RvX2NhbWVyYTwvaT5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgXHJcbiAgICA8YnV0dG9uICpuZ0lmPVwiYnRuQWx0ZXJhckZvdG8gJiYgZXhpc3RlTG9nb1wiIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImJ0bnNDb2xvclwiXHJcbiAgICAgY2xhc3M9XCJib3Rhby1leGNsdWlyLWZvdG8gYm9yZGVyLWNpcmNsZVxyXG4gICAgICAgICAgICBob3ZlcjpzaGFkb3ctM1xyXG4gICAgICAgICAgICBhY3RpdmU6c2hhZG93LTVcIlxyXG4gICAgIChjbGljayk9XCJxdWVzdGlvblJlbW92ZXJGb3RvKClcIj5cclxuICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+ZGVsZXRlPC9pPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -7,9 +7,8 @@ import { KvAvatarComponent } from "./kv-avatar.component";
7
7
  import { FormsModule, ReactiveFormsModule } from '@angular/forms';
8
8
  import { KvButtonModule } from '../kv-button/kv-button.module';
9
9
  import { KvLabelModule } from '../kv-label/kv-label.module';
10
- import { KvModalModule } from "../kv-modal/kv-modal.module";
10
+ import { KvCropImageComponent } from './kv-crop-image/kv-crop-image.component';
11
11
  import * as i0 from "@angular/core";
12
- // import { KvCropImageComponent } from './kv-crop-image/kv-crop-image.component';
13
12
  export class KvAvatarModule {
14
13
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvAvatarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
15
14
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: KvAvatarModule, declarations: [KvAvatarComponent], imports: [CommonModule,
@@ -20,7 +19,7 @@ export class KvAvatarModule {
20
19
  ReactiveFormsModule,
21
20
  KvButtonModule,
22
21
  KvLabelModule,
23
- KvModalModule], exports: [KvAvatarComponent] }); }
22
+ KvCropImageComponent], exports: [KvAvatarComponent] }); }
24
23
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvAvatarModule, imports: [CommonModule,
25
24
  ButtonModule,
26
25
  FileUploadModule,
@@ -29,14 +28,13 @@ export class KvAvatarModule {
29
28
  ReactiveFormsModule,
30
29
  KvButtonModule,
31
30
  KvLabelModule,
32
- KvModalModule] }); }
31
+ KvCropImageComponent] }); }
33
32
  }
34
33
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvAvatarModule, decorators: [{
35
34
  type: NgModule,
36
35
  args: [{
37
36
  declarations: [
38
37
  KvAvatarComponent,
39
- // KvCropImageComponent
40
38
  ],
41
39
  imports: [
42
40
  CommonModule,
@@ -47,11 +45,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
47
45
  ReactiveFormsModule,
48
46
  KvButtonModule,
49
47
  KvLabelModule,
50
- KvModalModule,
48
+ KvCropImageComponent
51
49
  ],
52
50
  exports: [
53
51
  KvAvatarComponent
54
52
  ]
55
53
  }]
56
54
  }] });
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtYXZhdGFyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWF2YXRhci9rdi1hdmF0YXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDOztBQUM1RCxrRkFBa0Y7QUF1QmxGLE1BQU0sT0FBTyxjQUFjOzhHQUFkLGNBQWM7K0dBQWQsY0FBYyxpQkFuQnZCLGlCQUFpQixhQUlqQixZQUFZO1lBQ1osWUFBWTtZQUNaLGdCQUFnQjtZQUNoQixZQUFZO1lBQ1osV0FBVztZQUNYLG1CQUFtQjtZQUNuQixjQUFjO1lBQ2QsYUFBYTtZQUNiLGFBQWEsYUFJYixpQkFBaUI7K0dBR1IsY0FBYyxZQWZ2QixZQUFZO1lBQ1osWUFBWTtZQUNaLGdCQUFnQjtZQUNoQixZQUFZO1lBQ1osV0FBVztZQUNYLG1CQUFtQjtZQUNuQixjQUFjO1lBQ2QsYUFBYTtZQUNiLGFBQWE7OzJGQU9KLGNBQWM7a0JBckIxQixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWixpQkFBaUI7d0JBQ2pCLHVCQUF1QjtxQkFDeEI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osWUFBWTt3QkFDWixnQkFBZ0I7d0JBQ2hCLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLGNBQWM7d0JBQ2QsYUFBYTt3QkFDYixhQUFhO3FCQUVoQjtvQkFDQyxPQUFPLEVBQUU7d0JBQ1AsaUJBQWlCO3FCQUNsQjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRmlsZVVwbG9hZE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZmlsZXVwbG9hZCc7XHJcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgU2xpZGVyTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9zbGlkZXInO1xyXG5cclxuaW1wb3J0IHsgS3ZBdmF0YXJDb21wb25lbnQgfSBmcm9tIFwiLi9rdi1hdmF0YXIuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBLdkJ1dHRvbk1vZHVsZSB9IGZyb20gJy4uL2t2LWJ1dHRvbi9rdi1idXR0b24ubW9kdWxlJztcclxuaW1wb3J0IHsgS3ZMYWJlbE1vZHVsZSB9IGZyb20gJy4uL2t2LWxhYmVsL2t2LWxhYmVsLm1vZHVsZSc7XHJcbmltcG9ydCB7IEt2TW9kYWxNb2R1bGUgfSBmcm9tIFwiLi4va3YtbW9kYWwva3YtbW9kYWwubW9kdWxlXCI7XHJcbi8vIGltcG9ydCB7IEt2Q3JvcEltYWdlQ29tcG9uZW50IH0gZnJvbSAnLi9rdi1jcm9wLWltYWdlL2t2LWNyb3AtaW1hZ2UuY29tcG9uZW50JztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBLdkF2YXRhckNvbXBvbmVudCxcclxuICAgIC8vIEt2Q3JvcEltYWdlQ29tcG9uZW50XHJcbiAgXSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBCdXR0b25Nb2R1bGUsXHJcbiAgICBGaWxlVXBsb2FkTW9kdWxlLFxyXG4gICAgU2xpZGVyTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgS3ZCdXR0b25Nb2R1bGUsXHJcbiAgICBLdkxhYmVsTW9kdWxlLFxyXG4gICAgS3ZNb2RhbE1vZHVsZSxcclxuXHJcbl0sXHJcbiAgZXhwb3J0czogW1xyXG4gICAgS3ZBdmF0YXJDb21wb25lbnRcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBLdkF2YXRhck1vZHVsZSB7IH1cclxuIl19
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtYXZhdGFyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWF2YXRhci9rdi1hdmF0YXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0seUNBQXlDLENBQUM7O0FBcUIvRSxNQUFNLE9BQU8sY0FBYzs4R0FBZCxjQUFjOytHQUFkLGNBQWMsaUJBakJ2QixpQkFBaUIsYUFHakIsWUFBWTtZQUNaLFlBQVk7WUFDWixnQkFBZ0I7WUFDaEIsWUFBWTtZQUNaLFdBQVc7WUFDWCxtQkFBbUI7WUFDbkIsY0FBYztZQUNkLGFBQWE7WUFDYixvQkFBb0IsYUFHcEIsaUJBQWlCOytHQUdSLGNBQWMsWUFkdkIsWUFBWTtZQUNaLFlBQVk7WUFDWixnQkFBZ0I7WUFDaEIsWUFBWTtZQUNaLFdBQVc7WUFDWCxtQkFBbUI7WUFDbkIsY0FBYztZQUNkLGFBQWE7WUFDYixvQkFBb0I7OzJGQU1YLGNBQWM7a0JBbkIxQixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWixpQkFBaUI7cUJBQ2xCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLFlBQVk7d0JBQ1osZ0JBQWdCO3dCQUNoQixZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixjQUFjO3dCQUNkLGFBQWE7d0JBQ2Isb0JBQW9CO3FCQUN2QjtvQkFDQyxPQUFPLEVBQUU7d0JBQ1AsaUJBQWlCO3FCQUNsQjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRmlsZVVwbG9hZE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZmlsZXVwbG9hZCc7XHJcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgU2xpZGVyTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9zbGlkZXInO1xyXG5cclxuaW1wb3J0IHsgS3ZBdmF0YXJDb21wb25lbnQgfSBmcm9tIFwiLi9rdi1hdmF0YXIuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBLdkJ1dHRvbk1vZHVsZSB9IGZyb20gJy4uL2t2LWJ1dHRvbi9rdi1idXR0b24ubW9kdWxlJztcclxuaW1wb3J0IHsgS3ZMYWJlbE1vZHVsZSB9IGZyb20gJy4uL2t2LWxhYmVsL2t2LWxhYmVsLm1vZHVsZSc7XHJcbmltcG9ydCB7IEt2Q3JvcEltYWdlQ29tcG9uZW50IH0gZnJvbSAnLi9rdi1jcm9wLWltYWdlL2t2LWNyb3AtaW1hZ2UuY29tcG9uZW50JztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBLdkF2YXRhckNvbXBvbmVudCxcclxuICBdLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEJ1dHRvbk1vZHVsZSxcclxuICAgIEZpbGVVcGxvYWRNb2R1bGUsXHJcbiAgICBTbGlkZXJNb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBLdkJ1dHRvbk1vZHVsZSxcclxuICAgIEt2TGFiZWxNb2R1bGUsXHJcbiAgICBLdkNyb3BJbWFnZUNvbXBvbmVudFxyXG5dLFxyXG4gIGV4cG9ydHM6IFtcclxuICAgIEt2QXZhdGFyQ29tcG9uZW50XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgS3ZBdmF0YXJNb2R1bGUgeyB9XHJcbiJdfQ==
@@ -0,0 +1,222 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, HostListener, ViewChild } from '@angular/core';
3
+ import { FormsModule } from '@angular/forms';
4
+ import { BaseComponentCrud, KvModalModule, PrimeNgModule } from 'projects/keevo-components/src/public-api';
5
+ import { KvLabelModule } from '../../kv-label/kv-label.module';
6
+ import { SliderModule } from 'primeng/slider';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "projects/keevo-components/src/public-api";
9
+ import * as i2 from "primeng/dynamicdialog";
10
+ import * as i3 from "@angular/forms";
11
+ import * as i4 from "../../kv-modal/kv-modal.component";
12
+ import * as i5 from "../../kv-label/kv-label.component";
13
+ import * as i6 from "primeng/slider";
14
+ export class KvCropImageComponent extends BaseComponentCrud {
15
+ onWindowResize() {
16
+ this.widthTela = window.innerWidth;
17
+ this.updateCanvasSize();
18
+ }
19
+ constructor(imageService, notificationService, dialogService, dynamicDialogRef, dynamicDialogConfig) {
20
+ super(dialogService, notificationService);
21
+ this.imageService = imageService;
22
+ this.notificationService = notificationService;
23
+ this.dialogService = dialogService;
24
+ this.dynamicDialogRef = dynamicDialogRef;
25
+ this.dynamicDialogConfig = dynamicDialogConfig;
26
+ this.imageLoaded = false;
27
+ this.imageX = 0;
28
+ this.imageY = 0;
29
+ this.startX = 0;
30
+ this.startY = 0;
31
+ this.valueZoom = 50;
32
+ this.scaleFactor = 1;
33
+ this.selectedImage = '';
34
+ this.actionsModal = [
35
+ {
36
+ label: 'Cancelar',
37
+ severity: 'tertiary',
38
+ icon: 'cancel',
39
+ command: (e) => {
40
+ this.dynamicDialogRef.close();
41
+ },
42
+ },
43
+ {
44
+ label: 'Recortar',
45
+ severity: 'primary',
46
+ icon: 'crop',
47
+ command: (e) => {
48
+ this.cropImage();
49
+ },
50
+ },
51
+ ];
52
+ this.widthTela = window.innerWidth;
53
+ this.selectedImage = this.dynamicDialogConfig.data.id.imagemSelecionada;
54
+ this.openCropModal();
55
+ }
56
+ openCropModal() {
57
+ setTimeout(() => {
58
+ const canvas = this.cropCanvas.nativeElement;
59
+ const ctx = canvas.getContext('2d');
60
+ const img = new Image();
61
+ img.src = this.selectedImage;
62
+ img.onload = () => {
63
+ this.imageLoaded = true;
64
+ this.imageX = (canvas.width - img.width * this.scaleFactor) / 2;
65
+ this.imageY = (canvas.height - img.height * this.scaleFactor) / 2;
66
+ canvas.width = this.retornaTamanhoCanvas();
67
+ canvas.height = 400;
68
+ this.redrawCanvas(ctx, img);
69
+ this.initializeImageMove(canvas, ctx, img);
70
+ this.initializeMouseWheel(canvas, ctx, img);
71
+ };
72
+ }, 0);
73
+ }
74
+ redrawCanvas(ctx, img) {
75
+ if (!ctx)
76
+ return;
77
+ ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
78
+ ctx.filter = 'blur(5px) opacity(0.9)';
79
+ ctx.drawImage(img, this.imageX, this.imageY, img.width * this.scaleFactor, img.height * this.scaleFactor);
80
+ ctx.filter = 'none';
81
+ this.drawImageInCropArea(ctx, img);
82
+ this.drawCropArea(ctx);
83
+ }
84
+ initializeImageMove(canvas, ctx, img) {
85
+ let isDragging = false;
86
+ canvas.style.cursor = 'grab';
87
+ canvas.onmousedown = (e) => {
88
+ isDragging = true;
89
+ canvas.style.cursor = 'grabbing';
90
+ this.startX = e.offsetX - this.imageX;
91
+ this.startY = e.offsetY - this.imageY;
92
+ };
93
+ canvas.onmousemove = (e) => {
94
+ if (isDragging) {
95
+ this.imageX = e.offsetX - this.startX;
96
+ this.imageY = e.offsetY - this.startY;
97
+ this.redrawCanvas(ctx, img);
98
+ }
99
+ };
100
+ canvas.onmouseup = () => {
101
+ isDragging = false;
102
+ canvas.style.cursor = 'grab';
103
+ };
104
+ canvas.onmouseout = () => {
105
+ isDragging = false;
106
+ canvas.style.cursor = 'grab';
107
+ };
108
+ }
109
+ initializeMouseWheel(canvas, ctx, img) {
110
+ canvas.onwheel = (e) => {
111
+ e.preventDefault();
112
+ const delta = e.deltaY > 0 ? -0.1 : 0.1;
113
+ this.scaleFactor = Math.min(Math.max(this.scaleFactor + delta, 0.1), 5); // limita o fator de escala entre 0.1 e 5
114
+ this.redrawCanvas(ctx, img);
115
+ this.valueZoom = this.scaleFactor * 50;
116
+ };
117
+ }
118
+ drawImageInCropArea(ctx, img) {
119
+ if (!ctx)
120
+ return;
121
+ // Calcula a posição da área de corte
122
+ const cropX = (ctx.canvas.width - 225) / 2;
123
+ const cropY = (ctx.canvas.height - 225) / 2;
124
+ // Desenha a imagem de não desfocada dentro da área de corte
125
+ ctx.save();
126
+ ctx.beginPath();
127
+ ctx.arc(cropX + 112.5, cropY + 112.5, 112.5, 0, Math.PI * 2, true);
128
+ ctx.clip();
129
+ ctx.drawImage(img, this.imageX, this.imageY, img.width * this.scaleFactor, img.height * this.scaleFactor);
130
+ ctx.restore();
131
+ }
132
+ drawCropArea(ctx) {
133
+ if (!ctx)
134
+ return;
135
+ ctx.beginPath();
136
+ const cropX = (ctx.canvas.width - 225) / 2;
137
+ const cropY = (ctx.canvas.height - 225) / 2;
138
+ ctx.arc(cropX + 112.5, cropY + 112.5, 112.5, 0, Math.PI * 2, true);
139
+ ctx.strokeStyle = 'transparent';
140
+ ctx.lineWidth = 2;
141
+ ctx.stroke();
142
+ }
143
+ updateCanvasSize() {
144
+ const canvas = this.cropCanvas.nativeElement;
145
+ const ctx = canvas.getContext('2d');
146
+ const img = new Image();
147
+ img.src = this.selectedImage;
148
+ img.onload = () => {
149
+ this.imageLoaded = true;
150
+ this.imageX = (canvas.width - img.width * this.scaleFactor) / 2;
151
+ this.imageY = (canvas.height - img.height * this.scaleFactor) / 2;
152
+ canvas.width = this.retornaTamanhoCanvas();
153
+ canvas.height = 400;
154
+ this.redrawCanvas(ctx, img);
155
+ };
156
+ }
157
+ onZoomChange(event) {
158
+ const canvas = this.cropCanvas.nativeElement;
159
+ const ctx = canvas.getContext('2d');
160
+ const img = new Image();
161
+ img.src = this.selectedImage;
162
+ img.onload = () => {
163
+ this.scaleFactor = event.value / 50;
164
+ this.redrawCanvas(ctx, img);
165
+ };
166
+ }
167
+ cropImage() {
168
+ const canvas = this.cropCanvas.nativeElement;
169
+ const ctx = canvas.getContext('2d');
170
+ if (ctx) {
171
+ const centerX = canvas.width / 2;
172
+ const centerY = canvas.height / 2;
173
+ const radius = 100;
174
+ const imageData = ctx.getImageData(centerX - radius, centerY - radius, radius * 2, radius * 2);
175
+ const newCanvas = document.createElement('canvas');
176
+ const newCtx = newCanvas.getContext('2d');
177
+ newCanvas.width = radius * 2;
178
+ newCanvas.height = radius * 2;
179
+ newCtx?.putImageData(imageData, 0, 0);
180
+ this.selectedImage = newCanvas.toDataURL();
181
+ this.enviarDados();
182
+ this.dynamicDialogRef.close(this.selectedImage);
183
+ }
184
+ }
185
+ enviarDados() {
186
+ const arr = this.dialogService.dialogComponentRefMap;
187
+ const entries = arr.entries();
188
+ const firstEntry = entries.next().value;
189
+ const [firstKey, firstValue] = firstEntry;
190
+ const instance = this.dialogService.getInstance(firstKey);
191
+ instance.config.data.id.imagemCortada = this.selectedImage;
192
+ }
193
+ retornaTamanhoCanvas() {
194
+ if (this.widthTela < 500) {
195
+ return this.widthTela * 0.7;
196
+ }
197
+ return this.widthTela * 0.4;
198
+ }
199
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvCropImageComponent, deps: [{ token: i1.ImagensService }, { token: i1.NotificationService }, { token: i2.DialogService }, { token: i2.DynamicDialogRef }, { token: i2.DynamicDialogConfig }], target: i0.ɵɵFactoryTarget.Component }); }
200
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.8", type: KvCropImageComponent, isStandalone: true, selector: "kv-crop-image", host: { listeners: { "window:resize": "onWindowResize($event)" } }, viewQueries: [{ propertyName: "cropCanvas", first: true, predicate: ["cropCanvas"], descendants: true }, { propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<kv-modal [actions]=\"actionsModal\">\r\n <div class=\"crop-container\">\r\n <canvas #cropCanvas class=\"crop-canvas\"></canvas>\r\n <div class=\"crop-border\"></div>\r\n </div>\r\n \r\n <div class=\"w-full zoom-container\">\r\n <kv-label label=\"Zoom\" style=\"text-align: left;\"/>\r\n <p-slider [(ngModel)]=\"valueZoom\" (onChange)=\"onZoomChange($event)\"></p-slider>\r\n </div>\r\n</kv-modal>\r\n", styles: [".crop-container{display:flex;justify-content:center;align-items:center}.crop-canvas{border:1px solid black;border-radius:12px}.crop-border{position:absolute;width:225px;height:225px;border:2px solid black;border-radius:50%;pointer-events:none}.zoom-container{padding-top:20px;padding-bottom:20px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: KvModalModule }, { kind: "component", type: i4.KvModalComponent, selector: "kv-modal", inputs: ["actions", "actionsPosition", "subtitle", "subHeader"] }, { kind: "ngmodule", type: PrimeNgModule }, { kind: "ngmodule", type: KvLabelModule }, { kind: "component", type: i5.KvLabelComponent, selector: "kv-label", inputs: ["componentId", "label"] }, { kind: "ngmodule", type: SliderModule }, { kind: "component", type: i6.Slider, selector: "p-slider", inputs: ["animate", "disabled", "min", "max", "orientation", "step", "range", "style", "styleClass", "ariaLabel", "ariaLabelledBy", "tabindex", "autofocus"], outputs: ["onChange", "onSlideEnd"] }] }); }
201
+ }
202
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvCropImageComponent, decorators: [{
203
+ type: Component,
204
+ args: [{ selector: 'kv-crop-image', standalone: true, imports: [
205
+ CommonModule,
206
+ FormsModule,
207
+ KvModalModule,
208
+ PrimeNgModule,
209
+ KvLabelModule,
210
+ SliderModule
211
+ ], template: "<kv-modal [actions]=\"actionsModal\">\r\n <div class=\"crop-container\">\r\n <canvas #cropCanvas class=\"crop-canvas\"></canvas>\r\n <div class=\"crop-border\"></div>\r\n </div>\r\n \r\n <div class=\"w-full zoom-container\">\r\n <kv-label label=\"Zoom\" style=\"text-align: left;\"/>\r\n <p-slider [(ngModel)]=\"valueZoom\" (onChange)=\"onZoomChange($event)\"></p-slider>\r\n </div>\r\n</kv-modal>\r\n", styles: [".crop-container{display:flex;justify-content:center;align-items:center}.crop-canvas{border:1px solid black;border-radius:12px}.crop-border{position:absolute;width:225px;height:225px;border:2px solid black;border-radius:50%;pointer-events:none}.zoom-container{padding-top:20px;padding-bottom:20px}\n"] }]
212
+ }], ctorParameters: () => [{ type: i1.ImagensService }, { type: i1.NotificationService }, { type: i2.DialogService }, { type: i2.DynamicDialogRef }, { type: i2.DynamicDialogConfig }], propDecorators: { onWindowResize: [{
213
+ type: HostListener,
214
+ args: ['window:resize', ['$event']]
215
+ }], cropCanvas: [{
216
+ type: ViewChild,
217
+ args: ['cropCanvas']
218
+ }], fileInput: [{
219
+ type: ViewChild,
220
+ args: ['fileInput']
221
+ }] } });
222
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtY3JvcC1pbWFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9rdi1hdmF0YXIva3YtY3JvcC1pbWFnZS9rdi1jcm9wLWltYWdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWF2YXRhci9rdi1jcm9wLWltYWdlL2t2LWNyb3AtaW1hZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQTBDLFlBQVksRUFBaUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQWMsaUJBQWlCLEVBQWtCLGFBQWEsRUFBdUIsYUFBYSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDNUosT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7QUFnQjlDLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxpQkFBaUI7SUFHekQsY0FBYztRQUNaLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUNuQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsWUFBbUIsWUFBNEIsRUFDekIsbUJBQXdDLEVBQ3hDLGFBQTRCLEVBQzVCLGdCQUFrQyxFQUNsQyxtQkFBd0M7UUFDMUQsS0FBSyxDQUFDLGFBQWEsRUFBRSxtQkFBbUIsQ0FBQyxDQUFBO1FBTDFCLGlCQUFZLEdBQVosWUFBWSxDQUFnQjtRQUN6Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQVU5RCxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixXQUFNLEdBQVcsQ0FBQyxDQUFDO1FBQ25CLFdBQU0sR0FBVyxDQUFDLENBQUM7UUFDbkIsV0FBTSxHQUFXLENBQUMsQ0FBQztRQUNuQixXQUFNLEdBQVcsQ0FBQyxDQUFDO1FBQ25CLGNBQVMsR0FBVyxFQUFFLENBQUM7UUFDdkIsZ0JBQVcsR0FBVyxDQUFDLENBQUM7UUFFeEIsa0JBQWEsR0FBVyxFQUFFLENBQUM7UUFLM0IsaUJBQVksR0FBaUI7WUFDM0I7Z0JBQ0UsS0FBSyxFQUFFLFVBQVU7Z0JBQ2pCLFFBQVEsRUFBRSxVQUFVO2dCQUNwQixJQUFJLEVBQUUsUUFBUTtnQkFDZCxPQUFPLEVBQUUsQ0FBQyxDQUFNLEVBQUUsRUFBRTtvQkFDbEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFBO2dCQUMvQixDQUFDO2FBQ0Y7WUFDRDtnQkFDRSxLQUFLLEVBQUUsVUFBVTtnQkFDakIsUUFBUSxFQUFFLFNBQVM7Z0JBQ25CLElBQUksRUFBRSxNQUFNO2dCQUNaLE9BQU8sRUFBRSxDQUFDLENBQU0sRUFBRSxFQUFFO29CQUNsQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUE7Z0JBQ2xCLENBQUM7YUFDRjtTQUVGLENBQUM7UUF0Q0EsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO1FBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUM7UUFDeEUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFxQ0QsYUFBYTtRQUNYLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztZQUM3QyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7WUFDeEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQzdCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO2dCQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2hFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDbEUsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztnQkFDM0MsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QixJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDM0MsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDaEQsQ0FBQyxDQUFDO1FBQ04sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztJQUVELFlBQVksQ0FBQyxHQUFvQyxFQUFFLEdBQXFCO1FBQ3RFLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTztRQUNqQixHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV6RCxHQUFHLENBQUMsTUFBTSxHQUFHLHdCQUF3QixDQUFDO1FBRXRDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDMUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFcEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVuQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxNQUF5QixFQUFFLEdBQW9DLEVBQUUsR0FBcUI7UUFDeEcsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBRXZCLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUU3QixNQUFNLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDdkIsVUFBVSxHQUFHLElBQUksQ0FBQztZQUNsQixNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUM7WUFDakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDdEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDMUMsQ0FBQyxDQUFDO1FBRUYsTUFBTSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3ZCLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNoQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBRUYsTUFBTSxDQUFDLFNBQVMsR0FBRyxHQUFHLEVBQUU7WUFDcEIsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUNuQixNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDakMsQ0FBQyxDQUFDO1FBRUYsTUFBTSxDQUFDLFVBQVUsR0FBRyxHQUFHLEVBQUU7WUFDckIsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUNuQixNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDakMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELG9CQUFvQixDQUFDLE1BQXlCLEVBQUUsR0FBb0MsRUFBRSxHQUFxQjtRQUN6RyxNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDbkIsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ25CLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMseUNBQXlDO1lBQ2xILElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDM0MsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELG1CQUFtQixDQUFDLEdBQW9DLEVBQUUsR0FBcUI7UUFDM0UsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPO1FBRWpCLHFDQUFxQztRQUNyQyxNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQyxNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUU1Qyw0REFBNEQ7UUFDNUQsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1gsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssRUFBRSxLQUFLLEdBQUcsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkUsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1gsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMxRyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELFlBQVksQ0FBQyxHQUFvQztRQUM3QyxJQUFJLENBQUMsR0FBRztZQUFFLE9BQU87UUFDakIsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2hCLE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssRUFBRSxLQUFLLEdBQUcsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkUsR0FBRyxDQUFDLFdBQVcsR0FBRyxhQUFhLENBQUM7UUFDaEMsR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDbEIsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRCxnQkFBZ0I7UUFDWixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztRQUM3QyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7UUFDeEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQzdCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsRSxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzNDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBVTtRQUNyQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztRQUM3QyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7UUFDeEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQzdCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsU0FBUztRQUNQLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO1FBQzdDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNSLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ2xDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQztZQUNuQixNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLE9BQU8sR0FBRyxNQUFNLEVBQUUsT0FBTyxHQUFHLE1BQU0sRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMvRixNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25ELE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUMsU0FBUyxDQUFDLEtBQUssR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQzdCLFNBQVMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUM5QixNQUFNLEVBQUUsWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFBO1lBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQ2pELENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULE1BQU0sR0FBRyxHQUFrRCxJQUFJLENBQUMsYUFBYSxDQUFDLHFCQUFxQixDQUFBO1FBQ25HLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM5QixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDO1FBQ3hDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLEdBQUcsVUFBVSxDQUFDO1FBQzFDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRXpELFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQTtJQUM1RCxDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLElBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUMxQixPQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO1FBQzdCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0lBQzlCLENBQUM7OEdBeE5VLG9CQUFvQjtrR0FBcEIsb0JBQW9CLHVXQ3RCakMsb2JBV0EsbVdER0ksWUFBWSw4QkFDWixXQUFXLDhWQUNYLGFBQWEsdUtBQ2IsYUFBYSw4QkFDYixhQUFhLHdJQUNiLFlBQVk7OzJGQUdILG9CQUFvQjtrQkFkaEMsU0FBUzsrQkFDRSxlQUFlLGNBR2IsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxhQUFhO3dCQUNiLGFBQWE7d0JBQ2IsYUFBYTt3QkFDYixZQUFZO3FCQUNiO2tOQUtELGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBOEJoQixVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVk7Z0JBQ0MsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBDb21wb25lbnRSZWYsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UsIER5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5pbXBvcnQgeyBBY3Rpb25JdGVtLCBCYXNlQ29tcG9uZW50Q3J1ZCwgSW1hZ2Vuc1NlcnZpY2UsIEt2TW9kYWxNb2R1bGUsIE5vdGlmaWNhdGlvblNlcnZpY2UsIFByaW1lTmdNb2R1bGUgfSBmcm9tICdwcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9wdWJsaWMtYXBpJztcclxuaW1wb3J0IHsgS3ZMYWJlbE1vZHVsZSB9IGZyb20gJy4uLy4uL2t2LWxhYmVsL2t2LWxhYmVsLm1vZHVsZSc7XHJcbmltcG9ydCB7IFNsaWRlck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvc2xpZGVyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAna3YtY3JvcC1pbWFnZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2t2LWNyb3AtaW1hZ2UuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9rdi1jcm9wLWltYWdlLmNvbXBvbmVudC5zY3NzJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLCBcclxuICAgIEt2TW9kYWxNb2R1bGUsXHJcbiAgICBQcmltZU5nTW9kdWxlLFxyXG4gICAgS3ZMYWJlbE1vZHVsZSxcclxuICAgIFNsaWRlck1vZHVsZVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEt2Q3JvcEltYWdlQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudENydWQge1xyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcclxuICBvbldpbmRvd1Jlc2l6ZSgpIHtcclxuICAgIHRoaXMud2lkdGhUZWxhID0gd2luZG93LmlubmVyV2lkdGg7XHJcbiAgICB0aGlzLnVwZGF0ZUNhbnZhc1NpemUoKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBpbWFnZVNlcnZpY2U6IEltYWdlbnNTZXJ2aWNlLCBcclxuICAgICAgb3ZlcnJpZGUgcmVhZG9ubHkgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSwgXHJcbiAgICAgIG92ZXJyaWRlIHJlYWRvbmx5IGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICAgIHByaXZhdGUgIHJlYWRvbmx5IGR5bmFtaWNEaWFsb2dSZWY6IER5bmFtaWNEaWFsb2dSZWYsXHJcbiAgICAgIHByaXZhdGUgIHJlYWRvbmx5IGR5bmFtaWNEaWFsb2dDb25maWc6IER5bmFtaWNEaWFsb2dDb25maWcsXHJcbiAgKSB7IHN1cGVyKGRpYWxvZ1NlcnZpY2UsIG5vdGlmaWNhdGlvblNlcnZpY2UpIFxyXG5cclxuICAgIHRoaXMud2lkdGhUZWxhID0gd2luZG93LmlubmVyV2lkdGg7IFxyXG4gICAgdGhpcy5zZWxlY3RlZEltYWdlID0gdGhpcy5keW5hbWljRGlhbG9nQ29uZmlnLmRhdGEuaWQuaW1hZ2VtU2VsZWNpb25hZGE7XHJcbiAgICB0aGlzLm9wZW5Dcm9wTW9kYWwoKTtcclxuICB9XHJcblxyXG4gIHdpZHRoVGVsYSE6IG51bWJlcjtcclxuICBoZWlnaHRUZWxhITogbnVtYmVyO1xyXG4gIGltYWdlTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaW1hZ2VYOiBudW1iZXIgPSAwO1xyXG4gIGltYWdlWTogbnVtYmVyID0gMDtcclxuICBzdGFydFg6IG51bWJlciA9IDA7XHJcbiAgc3RhcnRZOiBudW1iZXIgPSAwO1xyXG4gIHZhbHVlWm9vbTogbnVtYmVyID0gNTA7XHJcbiAgc2NhbGVGYWN0b3I6IG51bWJlciA9IDE7XHJcblxyXG4gIHNlbGVjdGVkSW1hZ2U6IHN0cmluZyA9ICcnO1xyXG5cclxuICBAVmlld0NoaWxkKCdjcm9wQ2FudmFzJykgY3JvcENhbnZhcyE6IEVsZW1lbnRSZWY8SFRNTENhbnZhc0VsZW1lbnQ+O1xyXG4gIEBWaWV3Q2hpbGQoJ2ZpbGVJbnB1dCcpIGZpbGVJbnB1dCE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIGFjdGlvbnNNb2RhbDogQWN0aW9uSXRlbVtdID0gW1xyXG4gICAge1xyXG4gICAgICBsYWJlbDogJ0NhbmNlbGFyJyxcclxuICAgICAgc2V2ZXJpdHk6ICd0ZXJ0aWFyeScsXHJcbiAgICAgIGljb246ICdjYW5jZWwnLFxyXG4gICAgICBjb21tYW5kOiAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5keW5hbWljRGlhbG9nUmVmLmNsb3NlKClcclxuICAgICAgfSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGxhYmVsOiAnUmVjb3J0YXInLFxyXG4gICAgICBzZXZlcml0eTogJ3ByaW1hcnknLFxyXG4gICAgICBpY29uOiAnY3JvcCcsXHJcbiAgICAgIGNvbW1hbmQ6IChlOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmNyb3BJbWFnZSgpXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gICBcclxuICBdO1xyXG5cclxuICBvcGVuQ3JvcE1vZGFsKCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2FudmFzID0gdGhpcy5jcm9wQ2FudmFzLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XHJcbiAgICAgICAgaW1nLnNyYyA9IHRoaXMuc2VsZWN0ZWRJbWFnZTtcclxuICAgICAgICBpbWcub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmltYWdlTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5pbWFnZVggPSAoY2FudmFzLndpZHRoIC0gaW1nLndpZHRoICogdGhpcy5zY2FsZUZhY3RvcikgLyAyO1xyXG4gICAgICAgICAgICB0aGlzLmltYWdlWSA9IChjYW52YXMuaGVpZ2h0IC0gaW1nLmhlaWdodCAqIHRoaXMuc2NhbGVGYWN0b3IpIC8gMjtcclxuICAgICAgICAgICAgY2FudmFzLndpZHRoID0gdGhpcy5yZXRvcm5hVGFtYW5ob0NhbnZhcygpO1xyXG4gICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gNDAwO1xyXG4gICAgICAgICAgICB0aGlzLnJlZHJhd0NhbnZhcyhjdHgsIGltZyk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUltYWdlTW92ZShjYW52YXMsIGN0eCwgaW1nKTtcclxuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplTW91c2VXaGVlbChjYW52YXMsIGN0eCwgaW1nKTtcclxuICAgICAgICB9O1xyXG4gICAgfSwgMCk7XHJcbiAgfVxyXG5cclxuICByZWRyYXdDYW52YXMoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCBudWxsLCBpbWc6IEhUTUxJbWFnZUVsZW1lbnQpIHtcclxuICAgIGlmICghY3R4KSByZXR1cm47XHJcbiAgICBjdHguY2xlYXJSZWN0KDAsIDAsIGN0eC5jYW52YXMud2lkdGgsIGN0eC5jYW52YXMuaGVpZ2h0KTtcclxuXHJcbiAgICBjdHguZmlsdGVyID0gJ2JsdXIoNXB4KSBvcGFjaXR5KDAuOSknO1xyXG4gICAgXHJcbiAgICBjdHguZHJhd0ltYWdlKGltZywgdGhpcy5pbWFnZVgsIHRoaXMuaW1hZ2VZLCBpbWcud2lkdGggKiB0aGlzLnNjYWxlRmFjdG9yLCBpbWcuaGVpZ2h0ICogdGhpcy5zY2FsZUZhY3Rvcik7XHJcbiAgICBjdHguZmlsdGVyID0gJ25vbmUnO1xyXG4gICAgXHJcbiAgICB0aGlzLmRyYXdJbWFnZUluQ3JvcEFyZWEoY3R4LCBpbWcpO1xyXG5cclxuICAgIHRoaXMuZHJhd0Nyb3BBcmVhKGN0eCk7XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplSW1hZ2VNb3ZlKGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgbnVsbCwgaW1nOiBIVE1MSW1hZ2VFbGVtZW50KSB7XHJcbiAgICBsZXQgaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG5cclxuICAgIGNhbnZhcy5zdHlsZS5jdXJzb3IgPSAnZ3JhYic7XHJcblxyXG4gICAgY2FudmFzLm9ubW91c2Vkb3duID0gKGUpID0+IHtcclxuICAgICAgICBpc0RyYWdnaW5nID0gdHJ1ZTtcclxuICAgICAgICBjYW52YXMuc3R5bGUuY3Vyc29yID0gJ2dyYWJiaW5nJzsgXHJcbiAgICAgICAgdGhpcy5zdGFydFggPSBlLm9mZnNldFggLSB0aGlzLmltYWdlWDtcclxuICAgICAgICB0aGlzLnN0YXJ0WSA9IGUub2Zmc2V0WSAtIHRoaXMuaW1hZ2VZO1xyXG4gICAgfTtcclxuXHJcbiAgICBjYW52YXMub25tb3VzZW1vdmUgPSAoZSkgPT4ge1xyXG4gICAgICAgIGlmIChpc0RyYWdnaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VYID0gZS5vZmZzZXRYIC0gdGhpcy5zdGFydFg7XHJcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VZID0gZS5vZmZzZXRZIC0gdGhpcy5zdGFydFk7XHJcbiAgICAgICAgICAgIHRoaXMucmVkcmF3Q2FudmFzKGN0eCwgaW1nKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNhbnZhcy5vbm1vdXNldXAgPSAoKSA9PiB7XHJcbiAgICAgICAgaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgICAgIGNhbnZhcy5zdHlsZS5jdXJzb3IgPSAnZ3JhYic7XHJcbiAgICB9O1xyXG5cclxuICAgIGNhbnZhcy5vbm1vdXNlb3V0ID0gKCkgPT4ge1xyXG4gICAgICAgIGlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgICAgICBjYW52YXMuc3R5bGUuY3Vyc29yID0gJ2dyYWInO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpemVNb3VzZVdoZWVsKGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgbnVsbCwgaW1nOiBIVE1MSW1hZ2VFbGVtZW50KSB7XHJcbiAgICBjYW52YXMub253aGVlbCA9IChlKSA9PiB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGNvbnN0IGRlbHRhID0gZS5kZWx0YVkgPiAwID8gLTAuMSA6IDAuMTtcclxuICAgICAgICB0aGlzLnNjYWxlRmFjdG9yID0gTWF0aC5taW4oTWF0aC5tYXgodGhpcy5zY2FsZUZhY3RvciArIGRlbHRhLCAwLjEpLCA1KTsgLy8gbGltaXRhIG8gZmF0b3IgZGUgZXNjYWxhIGVudHJlIDAuMSBlIDVcclxuICAgICAgICB0aGlzLnJlZHJhd0NhbnZhcyhjdHgsIGltZyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZVpvb20gPSB0aGlzLnNjYWxlRmFjdG9yICogNTA7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZHJhd0ltYWdlSW5Dcm9wQXJlYShjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IG51bGwsIGltZzogSFRNTEltYWdlRWxlbWVudCkge1xyXG4gICAgICBpZiAoIWN0eCkgcmV0dXJuO1xyXG5cclxuICAgICAgLy8gQ2FsY3VsYSBhIHBvc2nDp8OjbyBkYSDDoXJlYSBkZSBjb3J0ZVxyXG4gICAgICBjb25zdCBjcm9wWCA9IChjdHguY2FudmFzLndpZHRoIC0gMjI1KSAvIDI7XHJcbiAgICAgIGNvbnN0IGNyb3BZID0gKGN0eC5jYW52YXMuaGVpZ2h0IC0gMjI1KSAvIDI7XHJcblxyXG4gICAgICAvLyBEZXNlbmhhIGEgaW1hZ2VtIGRlIG7Do28gZGVzZm9jYWRhIGRlbnRybyBkYSDDoXJlYSBkZSBjb3J0ZVxyXG4gICAgICBjdHguc2F2ZSgpO1xyXG4gICAgICBjdHguYmVnaW5QYXRoKCk7XHJcbiAgICAgIGN0eC5hcmMoY3JvcFggKyAxMTIuNSwgY3JvcFkgKyAxMTIuNSwgMTEyLjUsIDAsIE1hdGguUEkgKiAyLCB0cnVlKTtcclxuICAgICAgY3R4LmNsaXAoKTtcclxuICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIHRoaXMuaW1hZ2VYLCB0aGlzLmltYWdlWSwgaW1nLndpZHRoICogdGhpcy5zY2FsZUZhY3RvciwgaW1nLmhlaWdodCAqIHRoaXMuc2NhbGVGYWN0b3IpO1xyXG4gICAgICBjdHgucmVzdG9yZSgpO1xyXG4gIH1cclxuXHJcbiAgZHJhd0Nyb3BBcmVhKGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgbnVsbCkge1xyXG4gICAgICBpZiAoIWN0eCkgcmV0dXJuO1xyXG4gICAgICBjdHguYmVnaW5QYXRoKCk7XHJcbiAgICAgIGNvbnN0IGNyb3BYID0gKGN0eC5jYW52YXMud2lkdGggLSAyMjUpIC8gMjtcclxuICAgICAgY29uc3QgY3JvcFkgPSAoY3R4LmNhbnZhcy5oZWlnaHQgLSAyMjUpIC8gMjtcclxuICAgICAgY3R4LmFyYyhjcm9wWCArIDExMi41LCBjcm9wWSArIDExMi41LCAxMTIuNSwgMCwgTWF0aC5QSSAqIDIsIHRydWUpO1xyXG4gICAgICBjdHguc3Ryb2tlU3R5bGUgPSAndHJhbnNwYXJlbnQnO1xyXG4gICAgICBjdHgubGluZVdpZHRoID0gMjtcclxuICAgICAgY3R4LnN0cm9rZSgpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlQ2FudmFzU2l6ZSgpIHtcclxuICAgICAgY29uc3QgY2FudmFzID0gdGhpcy5jcm9wQ2FudmFzLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgaW1nLnNyYyA9IHRoaXMuc2VsZWN0ZWRJbWFnZTtcclxuICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuaW1hZ2VMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5pbWFnZVggPSAoY2FudmFzLndpZHRoIC0gaW1nLndpZHRoICogdGhpcy5zY2FsZUZhY3RvcikgLyAyO1xyXG4gICAgICAgICAgdGhpcy5pbWFnZVkgPSAoY2FudmFzLmhlaWdodCAtIGltZy5oZWlnaHQgKiB0aGlzLnNjYWxlRmFjdG9yKSAvIDI7XHJcbiAgICAgICAgICBjYW52YXMud2lkdGggPSB0aGlzLnJldG9ybmFUYW1hbmhvQ2FudmFzKCk7XHJcbiAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gNDAwO1xyXG4gICAgICAgICAgdGhpcy5yZWRyYXdDYW52YXMoY3R4LCBpbWcpO1xyXG4gICAgICB9O1xyXG4gIH1cclxuXHJcbiAgb25ab29tQ2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IGNhbnZhcyA9IHRoaXMuY3JvcENhbnZhcy5uYXRpdmVFbGVtZW50O1xyXG4gICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgIGltZy5zcmMgPSB0aGlzLnNlbGVjdGVkSW1hZ2U7XHJcbiAgICBpbWcub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2NhbGVGYWN0b3IgPSBldmVudC52YWx1ZSAvIDUwO1xyXG4gICAgICAgIHRoaXMucmVkcmF3Q2FudmFzKGN0eCwgaW1nKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBjcm9wSW1hZ2UoKSB7XHJcbiAgICBjb25zdCBjYW52YXMgPSB0aGlzLmNyb3BDYW52YXMubmF0aXZlRWxlbWVudDtcclxuICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgaWYgKGN0eCkge1xyXG4gICAgICBjb25zdCBjZW50ZXJYID0gY2FudmFzLndpZHRoIC8gMjtcclxuICAgICAgY29uc3QgY2VudGVyWSA9IGNhbnZhcy5oZWlnaHQgLyAyO1xyXG4gICAgICBjb25zdCByYWRpdXMgPSAxMDA7XHJcbiAgICAgIGNvbnN0IGltYWdlRGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoY2VudGVyWCAtIHJhZGl1cywgY2VudGVyWSAtIHJhZGl1cywgcmFkaXVzICogMiwgcmFkaXVzICogMik7XHJcbiAgICAgIGNvbnN0IG5ld0NhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICBjb25zdCBuZXdDdHggPSBuZXdDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgbmV3Q2FudmFzLndpZHRoID0gcmFkaXVzICogMjtcclxuICAgICAgbmV3Q2FudmFzLmhlaWdodCA9IHJhZGl1cyAqIDI7XHJcbiAgICAgIG5ld0N0eD8ucHV0SW1hZ2VEYXRhKGltYWdlRGF0YSwgMCwgMCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZSA9IG5ld0NhbnZhcy50b0RhdGFVUkwoKTtcclxuICAgICAgdGhpcy5lbnZpYXJEYWRvcygpXHJcbiAgICAgIHRoaXMuZHluYW1pY0RpYWxvZ1JlZi5jbG9zZSh0aGlzLnNlbGVjdGVkSW1hZ2UpXHJcbiAgICB9XHJcbiAgfSAgICBcclxuXHJcbiAgZW52aWFyRGFkb3MoKXtcclxuICAgIGNvbnN0IGFycjogTWFwPER5bmFtaWNEaWFsb2dSZWY8YW55PiwgQ29tcG9uZW50UmVmPGFueT4+ID0gdGhpcy5kaWFsb2dTZXJ2aWNlLmRpYWxvZ0NvbXBvbmVudFJlZk1hcFxyXG4gICAgY29uc3QgZW50cmllcyA9IGFyci5lbnRyaWVzKCk7XHJcbiAgICBjb25zdCBmaXJzdEVudHJ5ID0gZW50cmllcy5uZXh0KCkudmFsdWU7XHJcbiAgICBjb25zdCBbZmlyc3RLZXksIGZpcnN0VmFsdWVdID0gZmlyc3RFbnRyeTtcclxuICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5kaWFsb2dTZXJ2aWNlLmdldEluc3RhbmNlKGZpcnN0S2V5KVxyXG5cclxuICAgIGluc3RhbmNlLmNvbmZpZy5kYXRhLmlkLmltYWdlbUNvcnRhZGEgPSB0aGlzLnNlbGVjdGVkSW1hZ2VcclxuICB9IFxyXG5cclxuICByZXRvcm5hVGFtYW5ob0NhbnZhcygpOiBudW1iZXIge1xyXG4gICAgaWYodGhpcy53aWR0aFRlbGEgPCA1MDApIHtcclxuICAgIHJldHVybiAgdGhpcy53aWR0aFRlbGEgKiAwLjc7XHJcbiAgICB9IFxyXG4gICAgcmV0dXJuIHRoaXMud2lkdGhUZWxhICogMC40O1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGt2LW1vZGFsIFthY3Rpb25zXT1cImFjdGlvbnNNb2RhbFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNyb3AtY29udGFpbmVyXCI+XHJcbiAgICAgIDxjYW52YXMgI2Nyb3BDYW52YXMgY2xhc3M9XCJjcm9wLWNhbnZhc1wiPjwvY2FudmFzPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY3JvcC1ib3JkZXJcIj48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIFxyXG4gICAgPGRpdiBjbGFzcz1cInctZnVsbCB6b29tLWNvbnRhaW5lclwiPlxyXG4gICAgICA8a3YtbGFiZWwgbGFiZWw9XCJab29tXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiBsZWZ0O1wiLz5cclxuICAgICAgPHAtc2xpZGVyIFsobmdNb2RlbCldPVwidmFsdWVab29tXCIgKG9uQ2hhbmdlKT1cIm9uWm9vbUNoYW5nZSgkZXZlbnQpXCI+PC9wLXNsaWRlcj5cclxuICAgIDwvZGl2PlxyXG48L2t2LW1vZGFsPlxyXG4iXX0=