keevo-components 2.0.88 → 2.0.90
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.
- package/esm2022/lib/api/components/table/table.config.mjs +1 -1
- package/esm2022/lib/api/services/pdf.service.mjs +48 -0
- package/esm2022/lib/components/kv-inputs/kv-editor/components/kv-instrucoes-report/kv-instrucoes-report.component.mjs +11 -0
- package/esm2022/lib/components/kv-inputs/kv-editor/components/kv-report-modal/kv-report-modal.component.mjs +40 -0
- package/esm2022/lib/components/kv-inputs/kv-editor/config/kv-editor.config.mjs +108 -0
- package/esm2022/lib/components/kv-inputs/kv-editor/kv-editor.component.mjs +148 -97
- package/esm2022/lib/components/kv-inputs/kv-editor/kv-editor.mjs +7 -0
- package/esm2022/lib/components/kv-inputs/kv-editor/services/kv-editor-mention.service.mjs +135 -0
- package/esm2022/lib/components/kv-inputs/kv-editor/services/kv-editor-pdf.service.mjs +169 -0
- package/esm2022/lib/components/kv-inputs/kv-editor/services/kv-editor-quill.service.mjs +78 -0
- package/esm2022/lib/components/kv-inputs/kv-editor/services/kv-editor-relatorio.service.mjs +95 -0
- package/esm2022/lib/components/kv-inputs/kv-editor/types/kv-editor.types.mjs +2 -0
- package/esm2022/lib/components/kv-inputs/kv-inputs.module.mjs +28 -4
- package/esm2022/lib/components/kv-inputs/kv-tree-multi-select/kv-tree-multi-select.component.mjs +3 -3
- package/esm2022/lib/components/kv-layout/layout/kv-layout.component.mjs +3 -3
- package/esm2022/lib/components/kv-table/kv-table.component.mjs +3 -3
- package/esm2022/lib/components/kv-table-viewer/components/actions-lote-field/actions-lote-field.component.mjs +15 -0
- package/esm2022/lib/components/kv-table-viewer/components/actions-row-menu/actions-row-menu.component.mjs +18 -0
- package/esm2022/lib/components/kv-table-viewer/kv-table-viewer.component.mjs +166 -0
- package/esm2022/lib/components/kv-tags/kv-tags.component.mjs +2 -2
- package/esm2022/public-api.mjs +5 -1
- package/fesm2022/keevo-components.mjs +1196 -298
- package/fesm2022/keevo-components.mjs.map +1 -1
- package/lib/api/base-components/base-component-dropdown.d.ts +1 -1
- package/lib/api/components/table/table.config.d.ts +2 -0
- package/lib/api/services/pdf.service.d.ts +7 -0
- package/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.d.ts +1 -1
- package/lib/components/kv-inputs/kv-editor/components/kv-instrucoes-report/kv-instrucoes-report.component.d.ts +5 -0
- package/lib/components/kv-inputs/kv-editor/components/kv-report-modal/kv-report-modal.component.d.ts +14 -0
- package/lib/components/kv-inputs/kv-editor/config/kv-editor.config.d.ts +55 -0
- package/lib/components/kv-inputs/kv-editor/kv-editor.component.d.ts +39 -13
- package/lib/components/kv-inputs/kv-editor/kv-editor.d.ts +6 -0
- package/lib/components/kv-inputs/kv-editor/services/kv-editor-mention.service.d.ts +41 -0
- package/lib/components/kv-inputs/kv-editor/services/kv-editor-pdf.service.d.ts +41 -0
- package/lib/components/kv-inputs/kv-editor/services/kv-editor-quill.service.d.ts +28 -0
- package/lib/components/kv-inputs/kv-editor/services/kv-editor-relatorio.service.d.ts +45 -0
- package/lib/components/kv-inputs/kv-editor/types/kv-editor.types.d.ts +32 -0
- package/lib/components/kv-inputs/kv-inputs.module.d.ts +7 -1
- package/lib/components/kv-stepper/kv-stepper.component.d.ts +1 -1
- package/lib/components/kv-table-viewer/components/actions-lote-field/actions-lote-field.component.d.ts +8 -0
- package/lib/components/kv-table-viewer/components/actions-row-menu/actions-row-menu.component.d.ts +7 -0
- package/lib/components/kv-table-viewer/kv-table-viewer.component.d.ts +64 -0
- package/lib/components/kv-tag/kv-tag.component.d.ts +1 -1
- package/package.json +6 -4
- package/public-api.d.ts +4 -0
|
@@ -1,112 +1,125 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output, signal, } from '@angular/core';
|
|
2
|
-
import
|
|
3
|
-
// import QuillBlotFormatter from 'quill-blot-formatter-2';
|
|
1
|
+
import { Component, computed, EventEmitter, inject, input, Input, Output, signal, ViewChild, } from '@angular/core';
|
|
2
|
+
import { DialogService } from 'primeng/dynamicdialog';
|
|
4
3
|
import { BaseComponentInput } from '../../../api/base-components/base-component-input';
|
|
5
4
|
import { ComponentProviders } from '../../../api/helpers/component-providers';
|
|
5
|
+
import { KvInstrucoesReportComponent } from './components/kv-instrucoes-report/kv-instrucoes-report.component';
|
|
6
|
+
import { KvEditorQuillService, KvEditorRelatorioService, KvEditorMentionService, KvEditorPdfService } from './kv-editor';
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
7
8
|
import * as i1 from "../../../api/services/component.service";
|
|
8
9
|
import * as i2 from "@angular/common";
|
|
9
10
|
import * as i3 from "@angular/forms";
|
|
10
11
|
import * as i4 from "../../kv-error/kv-error.component";
|
|
11
|
-
import * as i5 from "primeng/
|
|
12
|
+
import * as i5 from "primeng/divider";
|
|
13
|
+
import * as i6 from "primeng/progressbar";
|
|
14
|
+
import * as i7 from "primeng/overlaypanel";
|
|
15
|
+
import * as i8 from "primeng/skeleton";
|
|
16
|
+
import * as i9 from "../../kv-tags/kv-tags.component";
|
|
12
17
|
export class KvEditorComponent extends BaseComponentInput {
|
|
13
18
|
constructor(componentService, renderer, el) {
|
|
14
19
|
super(componentService);
|
|
15
20
|
this.renderer = renderer;
|
|
16
21
|
this.el = el;
|
|
22
|
+
// Injeção de serviços
|
|
23
|
+
this.quillService = inject(KvEditorQuillService);
|
|
24
|
+
this.relatorioService = inject(KvEditorRelatorioService);
|
|
25
|
+
this.mentionService = inject(KvEditorMentionService);
|
|
26
|
+
this.pdfService = inject(KvEditorPdfService);
|
|
27
|
+
this.dialogService = inject(DialogService);
|
|
28
|
+
// Propriedades de configuração
|
|
29
|
+
/**
|
|
30
|
+
* @deprecated Essa propriedade não será mais utilizada por esse componente nas próximas versões.
|
|
31
|
+
*/
|
|
32
|
+
this.canvaHeigth = '380px';
|
|
33
|
+
this.contentType = 'html';
|
|
17
34
|
this.readonly = false;
|
|
18
35
|
this.debug = false;
|
|
36
|
+
// Eventos
|
|
19
37
|
this.onTextChange = new EventEmitter();
|
|
20
38
|
this.onSelectionChange = new EventEmitter();
|
|
21
39
|
this.outputRaw = new EventEmitter();
|
|
22
40
|
this.outputHtml = new EventEmitter();
|
|
23
|
-
|
|
24
|
-
* @deprecated Essa propriedade não será mais utilizada por esse componente nas próximas versões.
|
|
25
|
-
*/
|
|
26
|
-
this.canvaHeigth = '380px';
|
|
41
|
+
// Propriedades internas
|
|
27
42
|
this.updatingEditor = false;
|
|
28
|
-
this.
|
|
29
|
-
this.isLoading = signal(true);
|
|
30
|
-
this.editorToolbarHeight = signal('3rem');
|
|
43
|
+
this.lastSelectionRange = null;
|
|
31
44
|
this.editorReadyPromise = new Promise((resolve) => {
|
|
32
45
|
this.editorReadyResolver = resolve;
|
|
33
46
|
});
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
this.
|
|
47
|
+
this.htmlDoEditor = '';
|
|
48
|
+
// Signals para controle de estado
|
|
49
|
+
this.initLoadComplete = signal(false);
|
|
50
|
+
this.isLoading = signal(true);
|
|
51
|
+
this.editorToolbarHeight = signal('3rem');
|
|
52
|
+
this.tipoVisualizacao = signal('descricao');
|
|
53
|
+
this.filteredVariables = signal([]);
|
|
54
|
+
// Inputs para relatórios
|
|
55
|
+
this.relatorios = input([]);
|
|
56
|
+
this.idRelatorioInitial = input(0);
|
|
57
|
+
// Computed properties para relatórios
|
|
58
|
+
this.idRelatorioSelected = computed(() => this.relatorioService.getIdRelatorioSelected());
|
|
59
|
+
this.relatorio = computed(() => this.relatorioService.getRelatorioSelected());
|
|
60
|
+
this.isLoadingPdf = computed(() => this.pdfService.getIsLoadingPdf());
|
|
61
|
+
this.messages = [{ severity: 'info', detail: 'Message Content' }];
|
|
62
|
+
}
|
|
63
|
+
// Métodos para gerenciar relatórios
|
|
64
|
+
setRelatorioPorId(id) {
|
|
65
|
+
const relatorio = this.relatorioService.setRelatorioPorId(id);
|
|
66
|
+
if (relatorio) {
|
|
67
|
+
this.setRelatorio(relatorio);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
setRelatorio(relatorio) {
|
|
71
|
+
this.relatorioService.setRelatorio(relatorio);
|
|
72
|
+
const modelo = relatorio.modeloRelatorio || '';
|
|
73
|
+
const variaveis = relatorio.variaveis || [];
|
|
74
|
+
this.htmlDoEditor = this.relatorioService.renderContrato(modelo, variaveis);
|
|
75
|
+
this.updatingEditor = true;
|
|
76
|
+
this.escrevaValor(this.htmlDoEditor);
|
|
38
77
|
}
|
|
39
78
|
ngOnInit() {
|
|
40
79
|
super.ngOnInit();
|
|
80
|
+
// Inicializa os relatórios no serviço
|
|
81
|
+
this.relatorioService.setRelatorios(this.relatorios());
|
|
41
82
|
if (!this.quill) {
|
|
42
83
|
this.handleInit();
|
|
43
84
|
}
|
|
44
85
|
setTimeout(() => {
|
|
45
86
|
this.isLoading.set(false);
|
|
46
87
|
}, 1000);
|
|
47
|
-
|
|
48
|
-
this.
|
|
49
|
-
}
|
|
88
|
+
if (this.idRelatorioInitial()) {
|
|
89
|
+
this.setRelatorioPorId(this.idRelatorioInitial());
|
|
90
|
+
}
|
|
50
91
|
}
|
|
51
92
|
async handleInit() {
|
|
52
|
-
await this.loadCss();
|
|
93
|
+
await this.quillService.loadCss();
|
|
53
94
|
this.initializeQuillEditor();
|
|
54
95
|
}
|
|
55
|
-
loadCss() {
|
|
56
|
-
return new Promise((resolve, reject) => {
|
|
57
|
-
const cssElement = document.createElement('link');
|
|
58
|
-
cssElement.rel = 'stylesheet';
|
|
59
|
-
cssElement.href = 'https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.snow.css';
|
|
60
|
-
cssElement.onload = () => resolve();
|
|
61
|
-
cssElement.onerror = (err) => reject(err);
|
|
62
|
-
document.head.appendChild(cssElement);
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
96
|
initializeQuillEditor() {
|
|
66
|
-
const
|
|
67
|
-
const ColorStyle = Quill.import('attributors/style/color');
|
|
68
|
-
const SizeStyle = Quill.import('attributors/style/size');
|
|
69
|
-
const Font = Quill.import('formats/font');
|
|
70
|
-
const Size = Quill.import('attributors/style/size');
|
|
71
|
-
Size.whitelist = ['15px', '20px', '30px', '40px', '50px', '70px', '90px'];
|
|
72
|
-
Font.whitelist = ['monospace', 'roboto', 'serif', 'inter'];
|
|
73
|
-
Quill.register(ColorStyle, true);
|
|
74
|
-
Quill.register(SizeStyle, true);
|
|
75
|
-
Quill.register(Font, true);
|
|
76
|
-
Quill.register(Size, true);
|
|
77
|
-
// Customizando o comportamento do Enter
|
|
78
|
-
const bindings = Quill.import('modules/keyboard').DEFAULTS.bindings;
|
|
79
|
-
bindings['enter'] = {
|
|
80
|
-
key: 13, // Código da tecla Enter
|
|
81
|
-
handler: (range) => {
|
|
82
|
-
const quill = this.quill;
|
|
83
|
-
quill.insertEmbed(range.index, 'break', true, Quill.sources.USER);
|
|
84
|
-
quill.setSelection(range.index + 1, Quill.sources.SILENT);
|
|
85
|
-
return false; // Evita o comportamento padrão de criar um <p>
|
|
86
|
-
},
|
|
87
|
-
};
|
|
88
|
-
// Custom blot for <br> tag
|
|
89
|
-
const BlockEmbed = Quill.import('blots/block/embed');
|
|
90
|
-
class Break extends BlockEmbed {
|
|
91
|
-
static { this.blotName = 'break'; }
|
|
92
|
-
static { this.tagName = 'br'; }
|
|
93
|
-
}
|
|
94
|
-
Quill.register(Break);
|
|
95
|
-
this.quill = new Quill('#kv-editor', {
|
|
97
|
+
const config = {
|
|
96
98
|
theme: 'snow',
|
|
97
99
|
modules: {
|
|
98
100
|
toolbar: '#kv-editor-toolbar',
|
|
99
|
-
keyboard: {
|
|
100
|
-
bindings: bindings,
|
|
101
|
-
},
|
|
102
101
|
},
|
|
103
102
|
placeholder: this.label ? this.label : '',
|
|
104
103
|
readOnly: this.readonly,
|
|
105
104
|
debug: this.debug,
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
|
|
105
|
+
};
|
|
106
|
+
this.quill = this.quillService.createQuillInstance('#kv-editor', config);
|
|
107
|
+
this.setupQuillEvents();
|
|
108
|
+
this.editorReadyResolver();
|
|
109
|
+
this.initLoadComplete.set(true);
|
|
110
|
+
setTimeout(() => {
|
|
111
|
+
const control = this.formControl;
|
|
112
|
+
if (control && control.markAsPristine) {
|
|
113
|
+
control.markAsPristine();
|
|
114
|
+
control.markAsUntouched();
|
|
115
|
+
}
|
|
116
|
+
}, 0);
|
|
117
|
+
}
|
|
118
|
+
setupQuillEvents() {
|
|
109
119
|
this.quill.on('selection-change', (range, oldRange, source) => {
|
|
120
|
+
if (range) {
|
|
121
|
+
this.lastSelectionRange = range;
|
|
122
|
+
}
|
|
110
123
|
this.onSelectionChange.emit({
|
|
111
124
|
range: range,
|
|
112
125
|
oldRange: oldRange,
|
|
@@ -114,6 +127,9 @@ export class KvEditorComponent extends BaseComponentInput {
|
|
|
114
127
|
});
|
|
115
128
|
});
|
|
116
129
|
this.quill.on('text-change', (delta, oldContents, source) => {
|
|
130
|
+
if (this.relatorios().length > 0) {
|
|
131
|
+
this.handleMention();
|
|
132
|
+
}
|
|
117
133
|
if (!this.updatingEditor) {
|
|
118
134
|
this.updatingEditor = false;
|
|
119
135
|
this.escrevaValor(this.quill.getSemanticHTML(), this.quill.getText());
|
|
@@ -126,60 +142,93 @@ export class KvEditorComponent extends BaseComponentInput {
|
|
|
126
142
|
this.outputHtml.emit(this.quill.getSemanticHTML());
|
|
127
143
|
}
|
|
128
144
|
});
|
|
129
|
-
this.editorReadyResolver();
|
|
130
|
-
this.initLoadComplete.set(true);
|
|
131
|
-
setTimeout(() => {
|
|
132
|
-
const control = this.formControl;
|
|
133
|
-
if (control && control.markAsPristine) {
|
|
134
|
-
control.markAsPristine();
|
|
135
|
-
control.markAsUntouched();
|
|
136
|
-
}
|
|
137
|
-
}, 0);
|
|
138
|
-
}
|
|
139
|
-
addQuillCss() {
|
|
140
|
-
const link = this.renderer.createElement('link');
|
|
141
|
-
link.rel = 'stylesheet';
|
|
142
|
-
link.href = 'https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.snow.css';
|
|
143
|
-
// Quando o CSS for carregado, inicialize o Quill
|
|
144
|
-
link.onload = () => {
|
|
145
|
-
this.initializeQuillEditor();
|
|
146
|
-
};
|
|
147
|
-
// Adiciona o link ao <head>
|
|
148
|
-
this.renderer.appendChild(document.head, link);
|
|
149
145
|
}
|
|
150
146
|
writeValue(value) {
|
|
151
147
|
this.updatingEditor = true;
|
|
152
148
|
this.escrevaValor(value);
|
|
153
149
|
}
|
|
154
150
|
async escrevaValor(htmlvalue, rawvalue) {
|
|
155
|
-
if (!this.initLoadComplete())
|
|
151
|
+
if (!this.initLoadComplete()) {
|
|
156
152
|
await this.editorReadyPromise;
|
|
153
|
+
}
|
|
157
154
|
if (this.quill) {
|
|
158
155
|
if (this.updatingEditor) {
|
|
159
156
|
this.quill.clipboard.dangerouslyPasteHTML(htmlvalue);
|
|
160
157
|
}
|
|
161
158
|
this.updatingEditor = false;
|
|
162
159
|
this.value = htmlvalue;
|
|
163
|
-
if (rawvalue == "\n" || this.value == "\n")
|
|
160
|
+
if (rawvalue == "\n" || this.value == "\n") {
|
|
164
161
|
this.value = '';
|
|
162
|
+
}
|
|
165
163
|
}
|
|
166
164
|
else {
|
|
167
165
|
this.updatingEditor = false;
|
|
168
166
|
}
|
|
167
|
+
this.outputHtml.emit(this.quill.getSemanticHTML());
|
|
169
168
|
}
|
|
170
169
|
getEditorSize() {
|
|
171
170
|
let editorFieldHeight = document.getElementById('kv-editor-toolbar')?.offsetHeight;
|
|
172
|
-
|
|
173
|
-
if (editorFieldHeight)
|
|
171
|
+
if (editorFieldHeight) {
|
|
174
172
|
this.editorToolbarHeight.set(`${editorFieldHeight}px`);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
async openRelatorio() {
|
|
176
|
+
if (this.isLoadingPdf())
|
|
177
|
+
return;
|
|
178
|
+
const htmlContent = this.quill.getSemanticHTML();
|
|
179
|
+
const relatorio = this.relatorio();
|
|
180
|
+
const tipoVisualizacao = this.tipoVisualizacao();
|
|
181
|
+
await this.pdfService.openRelatorio(htmlContent, relatorio, tipoVisualizacao);
|
|
182
|
+
}
|
|
183
|
+
// Métodos para sistema de menções
|
|
184
|
+
handleMention() {
|
|
185
|
+
if (!this.relatorio())
|
|
186
|
+
return;
|
|
187
|
+
const result = this.mentionService.handleMention(this.quill, this.relatorio().variaveis);
|
|
188
|
+
this.filteredVariables.set(result.filteredVariables);
|
|
189
|
+
if (result.shouldShowPanel && result.mentionBounds) {
|
|
190
|
+
this.showVariablesPanel(result.mentionBounds);
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
this.closeVariablesPanel();
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
showVariablesPanel(bounds) {
|
|
197
|
+
const anchorEl = this.mentionAnchor.nativeElement;
|
|
198
|
+
anchorEl.style.top = `${bounds.top}px`;
|
|
199
|
+
anchorEl.style.left = `${bounds.left}px`;
|
|
200
|
+
this.opVariables.show(null, anchorEl);
|
|
201
|
+
}
|
|
202
|
+
selectVariableFromPanel(variable) {
|
|
203
|
+
this.mentionService.insertVariable(this.quill, variable);
|
|
204
|
+
this.closeVariablesPanel();
|
|
205
|
+
}
|
|
206
|
+
closeVariablesPanel() {
|
|
207
|
+
if (this.opVariables) {
|
|
208
|
+
this.opVariables.hide();
|
|
209
|
+
}
|
|
210
|
+
this.mentionService.closeMention();
|
|
211
|
+
}
|
|
212
|
+
showInstrucoes() {
|
|
213
|
+
this.dialogService.open(KvInstrucoesReportComponent, {
|
|
214
|
+
header: 'Instruções',
|
|
215
|
+
width: '40%',
|
|
216
|
+
height: '30%',
|
|
217
|
+
modal: true,
|
|
218
|
+
closable: true,
|
|
219
|
+
});
|
|
175
220
|
}
|
|
176
221
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvEditorComponent, deps: [{ token: i1.ComponentService }, { token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
177
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: KvEditorComponent, selector: "kv-editor", inputs: { readonly: "readonly", debug: "debug", canvaHeigth: "canvaHeigth", contentType: "contentType" }, outputs: { onTextChange: "onTextChange", onSelectionChange: "onSelectionChange", outputRaw: "outputRaw", outputHtml: "outputHtml" }, providers: ComponentProviders(KvEditorComponent), usesInheritance: true, ngImport: i0, template: "<div class=\"kv-editor-container h-full max-h-full flex flex-column relative\">\r\n <div\r\n #editor\r\n id=\"kv-editor-toolbar\"\r\n [ngClass]=\"{ 'error-border-toolbar': hasControlError() }\"\r\n class=\"flex flex-row flex-wrap gap-2 w-full flex-initial absolute top-0\"\r\n style=\"z-index: 10000000 !important;\"\r\n >\r\n @if(isLoading()) {\r\n\r\n <div class=\"flex flex-row align-items-center gap-3\">\r\n <p-skeleton\r\n styleClass=\"w-5rem\"\r\n [style]=\"{ height: '1.5rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-5rem\"\r\n [style]=\"{ height: '1.5rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-5rem\"\r\n [style]=\"{ height: '1.5rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-5rem\"\r\n [style]=\"{ height: '1.5rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-5rem\"\r\n [style]=\"{ height: '1.5rem' }\"\r\n ></p-skeleton>\r\n </div>\r\n }\r\n\r\n <span\r\n class=\"ql-formats bg-gray-100 border-round-md {{\r\n isLoading() ? 'hidden' : 'inline-block'\r\n }}\"\r\n \r\n >\r\n <select class=\"ql-font\">\r\n <option value=\"roboto\">Roboto</option>\r\n <option value=\"monospace\">Monospace</option>\r\n <option value=\"inter\">Inter</option>\r\n <option selected>Sans Serif</option>\r\n <option value=\"serif\">Serif</option>\r\n </select>\r\n\r\n <select class=\"ql-header\">\r\n <option value=\"1\">Titulo</option>\r\n <option value=\"2\">Subtitulo</option>\r\n <option selected>Normal</option>\r\n </select>\r\n\r\n <span class=\"ql-format-group\">\r\n <select title=\"Size\" class=\"ql-size\">\r\n <option value=\"15px\">15px</option>\r\n <option value=\"20px\">20px</option>\r\n <option value=\"30px\">30px</option>\r\n <option value=\"40px\">40px</option>\r\n <option value=\"50px\">50px</option>\r\n <option value=\"70px\">70px</option>\r\n <option value=\"90px\">90px</option>\r\n </select>\r\n </span>\r\n </span>\r\n\r\n <span\r\n class=\"ql-formats bg-gray-100 border-round-md {{\r\n isLoading() ? 'hidden' : 'inline-block'\r\n }}\"\r\n >\r\n <button class=\"ql-bold\"></button>\r\n <button class=\"ql-italic\"></button>\r\n <button class=\"ql-underline\"></button>\r\n <button class=\"ql-strike\"></button>\r\n </span>\r\n\r\n <span\r\n class=\"ql-formats bg-gray-100 border-round-md {{\r\n isLoading() ? 'hidden' : 'inline-block'\r\n }}\"\r\n >\r\n <select class=\"ql-color\"></select>\r\n <select class=\"ql-background\"></select>\r\n </span>\r\n\r\n <span\r\n class=\"ql-formats bg-gray-100 border-round-md {{\r\n isLoading() ? 'hidden' : 'inline-block'\r\n }}\"\r\n >\r\n <button class=\"ql-script\" value=\"sub\"></button>\r\n <button class=\"ql-script\" value=\"super\"></button>\r\n </span>\r\n\r\n <span\r\n class=\"ql-formats bg-gray-100 border-round-md {{\r\n isLoading() ? 'hidden' : 'inline-block'\r\n }}\"\r\n >\r\n <button class=\"ql-header\" value=\"1\"></button>\r\n <button class=\"ql-header\" value=\"2\"></button>\r\n <button class=\"ql-blockquote\"></button>\r\n <button class=\"ql-code-block\"></button>\r\n </span>\r\n\r\n <span\r\n class=\"ql-formats bg-gray-100 border-round-md {{\r\n isLoading() ? 'hidden' : 'inline-block'\r\n }}\"\r\n >\r\n <button class=\"ql-list\" value=\"ordered\"></button>\r\n <button class=\"ql-list\" value=\"bullet\"></button>\r\n <button class=\"ql-indent\" value=\"-1\"></button>\r\n <button class=\"ql-indent\" value=\"+1\"></button>\r\n </span>\r\n\r\n <span\r\n class=\"ql-formats bg-gray-100 border-round-md {{\r\n isLoading() ? 'hidden' : 'inline-block'\r\n }}\"\r\n >\r\n <button class=\"ql-direction\" value=\"rtl\"></button>\r\n <select class=\"ql-align\"></select>\r\n </span>\r\n\r\n <span\r\n class=\"ql-formats bg-gray-100 border-round-md {{\r\n isLoading() ? 'hidden' : 'inline-block'\r\n }}\"\r\n >\r\n <button class=\"ql-link\"></button>\r\n <button class=\"ql-image\"></button>\r\n <button class=\"ql-video\"></button>\r\n </span>\r\n\r\n <span\r\n class=\"ql-formats bg-gray-100 border-round-md {{\r\n isLoading() ? 'hidden' : 'inline-block'\r\n }}\"\r\n >\r\n <button class=\"ql-clean\"></button>\r\n </span>\r\n </div>\r\n\r\n <div\r\n id=\"kv-editor\"\r\n class=\"absolute overflow-auto w-full flex-1\"\r\n [style.paddingTop]=\"editorToolbarHeight()\"\r\n [ngClass]=\"{ 'error-border': hasControlError() }\"\r\n ></div>\r\n</div>\r\n<kv-error [hasError]=\"hasControlError()\">{{ erroMessage() }}</kv-error>\r\n\r\n<!------------------------------------------------------------------------------------------------------------------->\r\n\r\n<!-- <link href=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.snow.css\" rel=\"stylesheet\" /> -->\r\n<link href=\"https://fonts.googleapis.com/css?family=Roboto\" rel=\"stylesheet\" />\r\n<script src=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.js\"></script>\r\n<script src=\"https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js\"></script>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.bubble.css\"\r\n/>\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/atom-one-dark.min.css\"\r\n/>\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css\"\r\n/>\r\n\r\n<!-- Import fonts -->\r\n\r\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\r\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin />\r\n\r\n<link\r\n href=\"https://fonts.googleapis.com/css2?family=Baloo+2:wght@400;500;600;700;800&family=Inter:wght@100..900&family=JetBrains+Mono:ital,wght@0,100..800;1,100..800&display=swap\"\r\n rel=\"stylesheet\"\r\n/>\r\n<link\r\n href=\"https://fonts.googleapis.com/css2?family=Baloo+2:wght@400;500;600;700;800&family=Inter:wght@100..900&family=JetBrains+Mono:ital,wght@0,100..800;1,100..800&family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap\"\r\n rel=\"stylesheet\"\r\n/>\r\n", styles: [":host ::ng-deep .ql-font-roboto{font-family:Roboto,sans-serif}:host ::ng-deep .ql-font-inter{font-family:Inter var,sans-serif}:host ::ng-deep .ql-tooltip.ql-editing[data-mode=video]{transform:translate(40%)}:host ::ng-deep #kv-editor-toolbar{border-radius:6px 6px 0 0;border:1px solid #e5e7eb}:host ::ng-deep #kv-editor{border-radius:0 0 6px 6px;border:1px solid #e5e7eb}.error-border-toolbar{transition:all ease-in .2s;border-top-color:#e24c4c!important;border-bottom-color:#e24c4c!important;border-left-color:#e24c4c!important;border-right-color:#e24c4c!important}.error-border{border-color:#e24c4c!important;transition:all ease-in .2s}:host ::ng-deep .blot-formatter__resize-handle{background:#eaeaea!important}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "component", type: i4.KvErrorComponent, selector: "kv-error", inputs: ["formControl", "hasError"] }, { kind: "component", type: i5.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }] }); }
|
|
222
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: KvEditorComponent, selector: "kv-editor", inputs: { canvaHeigth: { classPropertyName: "canvaHeigth", publicName: "canvaHeigth", isSignal: false, isRequired: false, transformFunction: null }, contentType: { classPropertyName: "contentType", publicName: "contentType", isSignal: false, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: false, isRequired: false, transformFunction: null }, debug: { classPropertyName: "debug", publicName: "debug", isSignal: false, isRequired: false, transformFunction: null }, relatorios: { classPropertyName: "relatorios", publicName: "relatorios", isSignal: true, isRequired: false, transformFunction: null }, idRelatorioInitial: { classPropertyName: "idRelatorioInitial", publicName: "idRelatorioInitial", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onTextChange: "onTextChange", onSelectionChange: "onSelectionChange", outputRaw: "outputRaw", outputHtml: "outputHtml" }, providers: ComponentProviders(KvEditorComponent), viewQueries: [{ propertyName: "opVariables", first: true, predicate: ["opVariables"], descendants: true }, { propertyName: "mentionAnchor", first: true, predicate: ["mentionAnchor"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div\r\n class=\"kv-editor-container h-full max-h-full flex flex-column overflow-hidden\"\r\n>\r\n <div\r\n #editor\r\n id=\"kv-editor-toolbar\"\r\n [ngClass]=\"{ 'error-border-toolbar': hasControlError() }\"\r\n class=\"flex flex-column flex-initial\"\r\n >\r\n @if(relatorios().length > 0) {\r\n <div class=\"flex flex-row justify-content-between\">\r\n <div class=\"flex flex-row gap-2\">\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 p-2 border-round-lg border-1 border-gray-200 hover:shadow-1 hover:bg-gray-100 cursor-pointer transition-all transition-duration-300\"\r\n (click)=\"op.toggle($event)\"\r\n >\r\n <span\r\n class=\"material-symbols-outlined text-lg text-green-600 font-medium\"\r\n >\r\n contract\r\n </span>\r\n <span class=\"font-semibold text-xs text-gray-600\">{{\r\n relatorio()?.label || \"Selecione um relat\u00F3rio\"\r\n }}</span>\r\n <span class=\"material-symbols-outlined text-lg\">\r\n keyboard_arrow_down\r\n </span>\r\n </div>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 p-2 border-round-lg border-1 border-gray-200 hover:shadow-1 hover:bg-gray-100 cursor-pointer transition-all transition-duration-300\"\r\n (click)=\"showInstrucoes()\"\r\n >\r\n <span\r\n class=\"material-symbols-outlined text-lg text-blue-600 font-medium\"\r\n >\r\n info\r\n </span>\r\n <span class=\"font-semibold text-xs text-gray-600\">Instru\u00E7\u00F5es</span>\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 p-2 border-round-lg border-1 border-gray-200 hover:shadow-1 hover:bg-gray-100 cursor-pointer transition-all transition-duration-300\"\r\n (click)=\"openRelatorio()\"\r\n >\r\n <span class=\"material-symbols-outlined text-lg font-medium\">\r\n print\r\n </span>\r\n <span class=\"font-semibold text-xs text-gray-600\">Imprimir</span>\r\n </div>\r\n </div>\r\n\r\n <p-divider class=\"w-full\"></p-divider>\r\n\r\n }\r\n\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-between w-full flex-initial\"\r\n >\r\n @if(isLoading()) {\r\n\r\n <div class=\"flex flex-row align-items-center gap-3 w-full\">\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n </div>\r\n }\r\n\r\n <div\r\n class=\"flex-row align-items-center flex-wrap gap-2 {{\r\n isLoading() ? 'hidden' : 'flex'\r\n }} w-full\"\r\n >\r\n <span class=\"ql-formats border-round-md\">\r\n <select class=\"ql-font\">\r\n <option value=\"roboto\">Roboto</option>\r\n <option value=\"monospace\">Monospace</option>\r\n <option value=\"inter\">Inter</option>\r\n <option selected>Sans Serif</option>\r\n <option value=\"serif\">Serif</option>\r\n </select>\r\n\r\n <select class=\"ql-header\">\r\n <option value=\"1\">Titulo</option>\r\n <option value=\"2\">Subtitulo</option>\r\n <option selected>Normal</option>\r\n </select>\r\n\r\n <span class=\"ql-format-group\">\r\n <select title=\"Size\" class=\"ql-size\">\r\n <option value=\"15px\">15px</option>\r\n <option value=\"20px\">20px</option>\r\n <option value=\"30px\">30px</option>\r\n <option value=\"40px\">40px</option>\r\n <option value=\"50px\">50px</option>\r\n <option value=\"70px\">70px</option>\r\n <option value=\"90px\">90px</option>\r\n </select>\r\n </span>\r\n </span>\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-bold\"></button>\r\n <button class=\"ql-italic\"></button>\r\n <button class=\"ql-underline\"></button>\r\n <button class=\"ql-strike\"></button>\r\n </span>\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <select class=\"ql-color\"></select>\r\n <select class=\"ql-background\"></select>\r\n </span>\r\n\r\n @if(true) {\r\n <!-- <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-header\" value=\"1\"></button>\r\n <button class=\"ql-header\" value=\"2\"></button>\r\n </span> -->\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-link\"></button>\r\n <button class=\"ql-image\"></button>\r\n <button class=\"ql-video\"></button>\r\n </span>\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-list\" value=\"ordered\"></button>\r\n <button class=\"ql-list\" value=\"bullet\"></button>\r\n <select class=\"ql-align\"></select>\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n style=\"\r\n height: 3px;\r\n border-right: 1px solid #e5e7eb;\r\n border-left: 1px solid #e5e7eb;\r\n border-top: none;\r\n border-bottom: none;\r\n \"\r\n >\r\n @if(isLoadingPdf()) {\r\n <p-progressBar mode=\"indeterminate\" [style]=\"{ height: '3px' }\" />\r\n }\r\n </div>\r\n\r\n <div\r\n id=\"kv-editor\"\r\n class=\"overflow-auto w-full flex-1 scrollstyle\"\r\n [ngClass]=\"{\r\n 'error-border': hasControlError(),\r\n 'pointer-events-none opacity-60': isLoadingPdf()\r\n }\"\r\n style=\"border-top: none\"\r\n ></div>\r\n</div>\r\n<kv-error [hasError]=\"hasControlError()\">{{ erroMessage() }}</kv-error>\r\n\r\n<!-- <link href=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.snow.css\" rel=\"stylesheet\" /> -->\r\n<link href=\"https://fonts.googleapis.com/css?family=Roboto\" rel=\"stylesheet\" />\r\n<script src=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.js\"></script>\r\n<script src=\"https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js\"></script>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.bubble.css\"\r\n/>\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/atom-one-dark.min.css\"\r\n/>\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css\"\r\n/>\r\n\r\n<p-overlayPanel #op styleClass=\"overflow-hidden\">\r\n <div\r\n class=\"grid m-0 gap-2 p-2 max-w-20rem overflow-y-auto scrollstyle\"\r\n style=\"max-height: 15rem\"\r\n >\r\n @for(item of relatorios(); track $index) {\r\n <div\r\n class=\"col-12 cursor-pointer hover:bg-gray-100 transition-colors transition-duration-200 border-round-lg shadow-2 flex flex-column gap-2\"\r\n style=\"max-height: 5rem\"\r\n (click)=\"setRelatorio(item)\"\r\n >\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 justify-content-between\"\r\n >\r\n <span class=\"text-sm font-medium w-full\">{{ item.label }}</span>\r\n\r\n <kv-tags\r\n class=\"transition-opacity transition-duration-300 {{\r\n item?.id == idRelatorioSelected() ? 'opacity-100' : 'opacity-0'\r\n }}\"\r\n [tags]=\"[{ label: 'Selecionado', severity: 'primary' }]\"\r\n ></kv-tags>\r\n </div>\r\n <span class=\"text-xs text-gray-500\">{{ item.descricao }}</span>\r\n </div>\r\n }\r\n </div>\r\n</p-overlayPanel>\r\n\r\n<div class=\"kv-editor-container flex flex-column overflow-hidden relative\">\r\n <div\r\n #mentionAnchor\r\n style=\"position: fixed; width: 1px; height: 1px; opacity: 0\"\r\n ></div>\r\n</div>\r\n\r\n<p-overlayPanel\r\n #opVariables\r\n [appendTo]=\"'body'\"\r\n (onHide)=\"closeVariablesPanel()\"\r\n>\r\n <div\r\n class=\"flex flex-column gap-1 p-1 overflow-y-auto scroll-virtual border-round-lg\"\r\n style=\"max-height: 250px; min-width: 250px; background-color: #333333\"\r\n >\r\n @for(variable of filteredVariables(); track variable.id) {\r\n <div\r\n class=\"p-2 cursor-pointer transition-colors transition-duration-200 border-round-lg text-sm text-white option-dropdown\"\r\n (click)=\"selectVariableFromPanel(variable)\"\r\n >\r\n {{ variable.descricao }}\r\n </div>\r\n } @empty {\r\n <div class=\"p-2 text-sm text-gray-500\">Nenhuma vari\u00E1vel encontrada.</div>\r\n }\r\n </div>\r\n</p-overlayPanel>\r\n", styles: [":host ::ng-deep .ql-font-roboto{font-family:Roboto,sans-serif}:host ::ng-deep .ql-font-inter{font-family:Inter var,sans-serif}:host ::ng-deep .ql-tooltip.ql-editing[data-mode=video]{transform:translate(40%)}:host ::ng-deep #kv-editor-toolbar{border-radius:6px 6px 0 0;border:1px solid #e5e7eb}:host ::ng-deep #kv-editor{border-radius:0 0 6px 6px;border:1px solid #e5e7eb}.error-border-toolbar{transition:all ease-in .2s;border-top-color:#e24c4c!important;border-bottom-color:#e24c4c!important;border-left-color:#e24c4c!important;border-right-color:#e24c4c!important}.error-border{border-color:#e24c4c!important;transition:all ease-in .2s}:host ::ng-deep .blot-formatter__resize-handle{background:#eaeaea!important}:ng-deep p{text-align:justify!important}::ng-deep .scrollstyle,::ng-deep .ql-editor{overflow-x:hidden}::ng-deep .scrollstyle::-webkit-scrollbar,::ng-deep .ql-editor::-webkit-scrollbar{width:6px}::ng-deep .scrollstyle::-webkit-scrollbar:hover,::ng-deep .ql-editor::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .scrollstyle::-webkit-scrollbar-thumb,::ng-deep .ql-editor::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .scrollstyle:hover::-webkit-scrollbar-thumb,::ng-deep .ql-editor:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .scrollstyle::-webkit-scrollbar-track,::ng-deep .ql-editor::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}:host ::ng-deep .editor-spinner-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#ffffff80;display:flex;justify-content:center;align-items:center;z-index:100000;border-radius:inherit}::ng-deep .p-progressbar-indeterminate .p-progressbar-value:after{background:#002542}::ng-deep .p-progressbar-indeterminate .p-progressbar-value:before{background:#002542}::ng-deep .scroll-virtual{overflow-x:hidden}::ng-deep .scroll-virtual::-webkit-scrollbar{width:8px}::ng-deep .scroll-virtual::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .scroll-virtual::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .scroll-virtual:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .scroll-virtual::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.option-dropdown{background-color:#333;transition:all ease-in .2s}.option-dropdown:hover{background-color:#444}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "component", type: i4.KvErrorComponent, selector: "kv-error", inputs: ["formControl", "hasError"] }, { kind: "component", type: i5.Divider, selector: "p-divider", inputs: ["style", "styleClass", "layout", "type", "align"] }, { kind: "component", type: i6.ProgressBar, selector: "p-progressBar", inputs: ["value", "showValue", "styleClass", "style", "unit", "mode", "color"] }, { kind: "component", type: i7.OverlayPanel, selector: "p-overlayPanel", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "component", type: i8.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "component", type: i9.KvTagsComponent, selector: "kv-tags", inputs: ["tags", "hover"], outputs: ["onClickTag"] }] }); }
|
|
178
223
|
}
|
|
179
224
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvEditorComponent, decorators: [{
|
|
180
225
|
type: Component,
|
|
181
|
-
args: [{ selector: 'kv-editor', providers: ComponentProviders(KvEditorComponent), template: "<div class=\"kv-editor-container h-full max-h-full flex flex-column relative\">\r\n <div\r\n #editor\r\n id=\"kv-editor-toolbar\"\r\n [ngClass]=\"{ 'error-border-toolbar': hasControlError() }\"\r\n class=\"flex flex-row flex-wrap gap-2 w-full flex-initial absolute top-0\"\r\n style=\"z-index: 10000000 !important;\"\r\n >\r\n @if(isLoading()) {\r\n\r\n <div class=\"flex flex-row align-items-center gap-3\">\r\n <p-skeleton\r\n styleClass=\"w-5rem\"\r\n [style]=\"{ height: '1.5rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-5rem\"\r\n [style]=\"{ height: '1.5rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-5rem\"\r\n [style]=\"{ height: '1.5rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-5rem\"\r\n [style]=\"{ height: '1.5rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-5rem\"\r\n [style]=\"{ height: '1.5rem' }\"\r\n ></p-skeleton>\r\n </div>\r\n }\r\n\r\n <span\r\n class=\"ql-formats bg-gray-100 border-round-md {{\r\n isLoading() ? 'hidden' : 'inline-block'\r\n }}\"\r\n \r\n >\r\n <select class=\"ql-font\">\r\n <option value=\"roboto\">Roboto</option>\r\n <option value=\"monospace\">Monospace</option>\r\n <option value=\"inter\">Inter</option>\r\n <option selected>Sans Serif</option>\r\n <option value=\"serif\">Serif</option>\r\n </select>\r\n\r\n <select class=\"ql-header\">\r\n <option value=\"1\">Titulo</option>\r\n <option value=\"2\">Subtitulo</option>\r\n <option selected>Normal</option>\r\n </select>\r\n\r\n <span class=\"ql-format-group\">\r\n <select title=\"Size\" class=\"ql-size\">\r\n <option value=\"15px\">15px</option>\r\n <option value=\"20px\">20px</option>\r\n <option value=\"30px\">30px</option>\r\n <option value=\"40px\">40px</option>\r\n <option value=\"50px\">50px</option>\r\n <option value=\"70px\">70px</option>\r\n <option value=\"90px\">90px</option>\r\n </select>\r\n </span>\r\n </span>\r\n\r\n <span\r\n class=\"ql-formats bg-gray-100 border-round-md {{\r\n isLoading() ? 'hidden' : 'inline-block'\r\n }}\"\r\n >\r\n <button class=\"ql-bold\"></button>\r\n <button class=\"ql-italic\"></button>\r\n <button class=\"ql-underline\"></button>\r\n <button class=\"ql-strike\"></button>\r\n </span>\r\n\r\n <span\r\n class=\"ql-formats bg-gray-100 border-round-md {{\r\n isLoading() ? 'hidden' : 'inline-block'\r\n }}\"\r\n >\r\n <select class=\"ql-color\"></select>\r\n <select class=\"ql-background\"></select>\r\n </span>\r\n\r\n <span\r\n class=\"ql-formats bg-gray-100 border-round-md {{\r\n isLoading() ? 'hidden' : 'inline-block'\r\n }}\"\r\n >\r\n <button class=\"ql-script\" value=\"sub\"></button>\r\n <button class=\"ql-script\" value=\"super\"></button>\r\n </span>\r\n\r\n <span\r\n class=\"ql-formats bg-gray-100 border-round-md {{\r\n isLoading() ? 'hidden' : 'inline-block'\r\n }}\"\r\n >\r\n <button class=\"ql-header\" value=\"1\"></button>\r\n <button class=\"ql-header\" value=\"2\"></button>\r\n <button class=\"ql-blockquote\"></button>\r\n <button class=\"ql-code-block\"></button>\r\n </span>\r\n\r\n <span\r\n class=\"ql-formats bg-gray-100 border-round-md {{\r\n isLoading() ? 'hidden' : 'inline-block'\r\n }}\"\r\n >\r\n <button class=\"ql-list\" value=\"ordered\"></button>\r\n <button class=\"ql-list\" value=\"bullet\"></button>\r\n <button class=\"ql-indent\" value=\"-1\"></button>\r\n <button class=\"ql-indent\" value=\"+1\"></button>\r\n </span>\r\n\r\n <span\r\n class=\"ql-formats bg-gray-100 border-round-md {{\r\n isLoading() ? 'hidden' : 'inline-block'\r\n }}\"\r\n >\r\n <button class=\"ql-direction\" value=\"rtl\"></button>\r\n <select class=\"ql-align\"></select>\r\n </span>\r\n\r\n <span\r\n class=\"ql-formats bg-gray-100 border-round-md {{\r\n isLoading() ? 'hidden' : 'inline-block'\r\n }}\"\r\n >\r\n <button class=\"ql-link\"></button>\r\n <button class=\"ql-image\"></button>\r\n <button class=\"ql-video\"></button>\r\n </span>\r\n\r\n <span\r\n class=\"ql-formats bg-gray-100 border-round-md {{\r\n isLoading() ? 'hidden' : 'inline-block'\r\n }}\"\r\n >\r\n <button class=\"ql-clean\"></button>\r\n </span>\r\n </div>\r\n\r\n <div\r\n id=\"kv-editor\"\r\n class=\"absolute overflow-auto w-full flex-1\"\r\n [style.paddingTop]=\"editorToolbarHeight()\"\r\n [ngClass]=\"{ 'error-border': hasControlError() }\"\r\n ></div>\r\n</div>\r\n<kv-error [hasError]=\"hasControlError()\">{{ erroMessage() }}</kv-error>\r\n\r\n<!------------------------------------------------------------------------------------------------------------------->\r\n\r\n<!-- <link href=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.snow.css\" rel=\"stylesheet\" /> -->\r\n<link href=\"https://fonts.googleapis.com/css?family=Roboto\" rel=\"stylesheet\" />\r\n<script src=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.js\"></script>\r\n<script src=\"https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js\"></script>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.bubble.css\"\r\n/>\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/atom-one-dark.min.css\"\r\n/>\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css\"\r\n/>\r\n\r\n<!-- Import fonts -->\r\n\r\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\r\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin />\r\n\r\n<link\r\n href=\"https://fonts.googleapis.com/css2?family=Baloo+2:wght@400;500;600;700;800&family=Inter:wght@100..900&family=JetBrains+Mono:ital,wght@0,100..800;1,100..800&display=swap\"\r\n rel=\"stylesheet\"\r\n/>\r\n<link\r\n href=\"https://fonts.googleapis.com/css2?family=Baloo+2:wght@400;500;600;700;800&family=Inter:wght@100..900&family=JetBrains+Mono:ital,wght@0,100..800;1,100..800&family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap\"\r\n rel=\"stylesheet\"\r\n/>\r\n", styles: [":host ::ng-deep .ql-font-roboto{font-family:Roboto,sans-serif}:host ::ng-deep .ql-font-inter{font-family:Inter var,sans-serif}:host ::ng-deep .ql-tooltip.ql-editing[data-mode=video]{transform:translate(40%)}:host ::ng-deep #kv-editor-toolbar{border-radius:6px 6px 0 0;border:1px solid #e5e7eb}:host ::ng-deep #kv-editor{border-radius:0 0 6px 6px;border:1px solid #e5e7eb}.error-border-toolbar{transition:all ease-in .2s;border-top-color:#e24c4c!important;border-bottom-color:#e24c4c!important;border-left-color:#e24c4c!important;border-right-color:#e24c4c!important}.error-border{border-color:#e24c4c!important;transition:all ease-in .2s}:host ::ng-deep .blot-formatter__resize-handle{background:#eaeaea!important}\n"] }]
|
|
182
|
-
}], ctorParameters: () => [{ type: i1.ComponentService }, { type: i0.Renderer2 }, { type: i0.ElementRef }], propDecorators: {
|
|
226
|
+
args: [{ selector: 'kv-editor', providers: ComponentProviders(KvEditorComponent), template: "<div\r\n class=\"kv-editor-container h-full max-h-full flex flex-column overflow-hidden\"\r\n>\r\n <div\r\n #editor\r\n id=\"kv-editor-toolbar\"\r\n [ngClass]=\"{ 'error-border-toolbar': hasControlError() }\"\r\n class=\"flex flex-column flex-initial\"\r\n >\r\n @if(relatorios().length > 0) {\r\n <div class=\"flex flex-row justify-content-between\">\r\n <div class=\"flex flex-row gap-2\">\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 p-2 border-round-lg border-1 border-gray-200 hover:shadow-1 hover:bg-gray-100 cursor-pointer transition-all transition-duration-300\"\r\n (click)=\"op.toggle($event)\"\r\n >\r\n <span\r\n class=\"material-symbols-outlined text-lg text-green-600 font-medium\"\r\n >\r\n contract\r\n </span>\r\n <span class=\"font-semibold text-xs text-gray-600\">{{\r\n relatorio()?.label || \"Selecione um relat\u00F3rio\"\r\n }}</span>\r\n <span class=\"material-symbols-outlined text-lg\">\r\n keyboard_arrow_down\r\n </span>\r\n </div>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 p-2 border-round-lg border-1 border-gray-200 hover:shadow-1 hover:bg-gray-100 cursor-pointer transition-all transition-duration-300\"\r\n (click)=\"showInstrucoes()\"\r\n >\r\n <span\r\n class=\"material-symbols-outlined text-lg text-blue-600 font-medium\"\r\n >\r\n info\r\n </span>\r\n <span class=\"font-semibold text-xs text-gray-600\">Instru\u00E7\u00F5es</span>\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 p-2 border-round-lg border-1 border-gray-200 hover:shadow-1 hover:bg-gray-100 cursor-pointer transition-all transition-duration-300\"\r\n (click)=\"openRelatorio()\"\r\n >\r\n <span class=\"material-symbols-outlined text-lg font-medium\">\r\n print\r\n </span>\r\n <span class=\"font-semibold text-xs text-gray-600\">Imprimir</span>\r\n </div>\r\n </div>\r\n\r\n <p-divider class=\"w-full\"></p-divider>\r\n\r\n }\r\n\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-between w-full flex-initial\"\r\n >\r\n @if(isLoading()) {\r\n\r\n <div class=\"flex flex-row align-items-center gap-3 w-full\">\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n </div>\r\n }\r\n\r\n <div\r\n class=\"flex-row align-items-center flex-wrap gap-2 {{\r\n isLoading() ? 'hidden' : 'flex'\r\n }} w-full\"\r\n >\r\n <span class=\"ql-formats border-round-md\">\r\n <select class=\"ql-font\">\r\n <option value=\"roboto\">Roboto</option>\r\n <option value=\"monospace\">Monospace</option>\r\n <option value=\"inter\">Inter</option>\r\n <option selected>Sans Serif</option>\r\n <option value=\"serif\">Serif</option>\r\n </select>\r\n\r\n <select class=\"ql-header\">\r\n <option value=\"1\">Titulo</option>\r\n <option value=\"2\">Subtitulo</option>\r\n <option selected>Normal</option>\r\n </select>\r\n\r\n <span class=\"ql-format-group\">\r\n <select title=\"Size\" class=\"ql-size\">\r\n <option value=\"15px\">15px</option>\r\n <option value=\"20px\">20px</option>\r\n <option value=\"30px\">30px</option>\r\n <option value=\"40px\">40px</option>\r\n <option value=\"50px\">50px</option>\r\n <option value=\"70px\">70px</option>\r\n <option value=\"90px\">90px</option>\r\n </select>\r\n </span>\r\n </span>\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-bold\"></button>\r\n <button class=\"ql-italic\"></button>\r\n <button class=\"ql-underline\"></button>\r\n <button class=\"ql-strike\"></button>\r\n </span>\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <select class=\"ql-color\"></select>\r\n <select class=\"ql-background\"></select>\r\n </span>\r\n\r\n @if(true) {\r\n <!-- <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-header\" value=\"1\"></button>\r\n <button class=\"ql-header\" value=\"2\"></button>\r\n </span> -->\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-link\"></button>\r\n <button class=\"ql-image\"></button>\r\n <button class=\"ql-video\"></button>\r\n </span>\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-list\" value=\"ordered\"></button>\r\n <button class=\"ql-list\" value=\"bullet\"></button>\r\n <select class=\"ql-align\"></select>\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n style=\"\r\n height: 3px;\r\n border-right: 1px solid #e5e7eb;\r\n border-left: 1px solid #e5e7eb;\r\n border-top: none;\r\n border-bottom: none;\r\n \"\r\n >\r\n @if(isLoadingPdf()) {\r\n <p-progressBar mode=\"indeterminate\" [style]=\"{ height: '3px' }\" />\r\n }\r\n </div>\r\n\r\n <div\r\n id=\"kv-editor\"\r\n class=\"overflow-auto w-full flex-1 scrollstyle\"\r\n [ngClass]=\"{\r\n 'error-border': hasControlError(),\r\n 'pointer-events-none opacity-60': isLoadingPdf()\r\n }\"\r\n style=\"border-top: none\"\r\n ></div>\r\n</div>\r\n<kv-error [hasError]=\"hasControlError()\">{{ erroMessage() }}</kv-error>\r\n\r\n<!-- <link href=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.snow.css\" rel=\"stylesheet\" /> -->\r\n<link href=\"https://fonts.googleapis.com/css?family=Roboto\" rel=\"stylesheet\" />\r\n<script src=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.js\"></script>\r\n<script src=\"https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js\"></script>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.bubble.css\"\r\n/>\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/atom-one-dark.min.css\"\r\n/>\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css\"\r\n/>\r\n\r\n<p-overlayPanel #op styleClass=\"overflow-hidden\">\r\n <div\r\n class=\"grid m-0 gap-2 p-2 max-w-20rem overflow-y-auto scrollstyle\"\r\n style=\"max-height: 15rem\"\r\n >\r\n @for(item of relatorios(); track $index) {\r\n <div\r\n class=\"col-12 cursor-pointer hover:bg-gray-100 transition-colors transition-duration-200 border-round-lg shadow-2 flex flex-column gap-2\"\r\n style=\"max-height: 5rem\"\r\n (click)=\"setRelatorio(item)\"\r\n >\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 justify-content-between\"\r\n >\r\n <span class=\"text-sm font-medium w-full\">{{ item.label }}</span>\r\n\r\n <kv-tags\r\n class=\"transition-opacity transition-duration-300 {{\r\n item?.id == idRelatorioSelected() ? 'opacity-100' : 'opacity-0'\r\n }}\"\r\n [tags]=\"[{ label: 'Selecionado', severity: 'primary' }]\"\r\n ></kv-tags>\r\n </div>\r\n <span class=\"text-xs text-gray-500\">{{ item.descricao }}</span>\r\n </div>\r\n }\r\n </div>\r\n</p-overlayPanel>\r\n\r\n<div class=\"kv-editor-container flex flex-column overflow-hidden relative\">\r\n <div\r\n #mentionAnchor\r\n style=\"position: fixed; width: 1px; height: 1px; opacity: 0\"\r\n ></div>\r\n</div>\r\n\r\n<p-overlayPanel\r\n #opVariables\r\n [appendTo]=\"'body'\"\r\n (onHide)=\"closeVariablesPanel()\"\r\n>\r\n <div\r\n class=\"flex flex-column gap-1 p-1 overflow-y-auto scroll-virtual border-round-lg\"\r\n style=\"max-height: 250px; min-width: 250px; background-color: #333333\"\r\n >\r\n @for(variable of filteredVariables(); track variable.id) {\r\n <div\r\n class=\"p-2 cursor-pointer transition-colors transition-duration-200 border-round-lg text-sm text-white option-dropdown\"\r\n (click)=\"selectVariableFromPanel(variable)\"\r\n >\r\n {{ variable.descricao }}\r\n </div>\r\n } @empty {\r\n <div class=\"p-2 text-sm text-gray-500\">Nenhuma vari\u00E1vel encontrada.</div>\r\n }\r\n </div>\r\n</p-overlayPanel>\r\n", styles: [":host ::ng-deep .ql-font-roboto{font-family:Roboto,sans-serif}:host ::ng-deep .ql-font-inter{font-family:Inter var,sans-serif}:host ::ng-deep .ql-tooltip.ql-editing[data-mode=video]{transform:translate(40%)}:host ::ng-deep #kv-editor-toolbar{border-radius:6px 6px 0 0;border:1px solid #e5e7eb}:host ::ng-deep #kv-editor{border-radius:0 0 6px 6px;border:1px solid #e5e7eb}.error-border-toolbar{transition:all ease-in .2s;border-top-color:#e24c4c!important;border-bottom-color:#e24c4c!important;border-left-color:#e24c4c!important;border-right-color:#e24c4c!important}.error-border{border-color:#e24c4c!important;transition:all ease-in .2s}:host ::ng-deep .blot-formatter__resize-handle{background:#eaeaea!important}:ng-deep p{text-align:justify!important}::ng-deep .scrollstyle,::ng-deep .ql-editor{overflow-x:hidden}::ng-deep .scrollstyle::-webkit-scrollbar,::ng-deep .ql-editor::-webkit-scrollbar{width:6px}::ng-deep .scrollstyle::-webkit-scrollbar:hover,::ng-deep .ql-editor::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .scrollstyle::-webkit-scrollbar-thumb,::ng-deep .ql-editor::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .scrollstyle:hover::-webkit-scrollbar-thumb,::ng-deep .ql-editor:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .scrollstyle::-webkit-scrollbar-track,::ng-deep .ql-editor::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}:host ::ng-deep .editor-spinner-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#ffffff80;display:flex;justify-content:center;align-items:center;z-index:100000;border-radius:inherit}::ng-deep .p-progressbar-indeterminate .p-progressbar-value:after{background:#002542}::ng-deep .p-progressbar-indeterminate .p-progressbar-value:before{background:#002542}::ng-deep .scroll-virtual{overflow-x:hidden}::ng-deep .scroll-virtual::-webkit-scrollbar{width:8px}::ng-deep .scroll-virtual::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .scroll-virtual::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .scroll-virtual:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .scroll-virtual::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.option-dropdown{background-color:#333;transition:all ease-in .2s}.option-dropdown:hover{background-color:#444}\n"] }]
|
|
227
|
+
}], ctorParameters: () => [{ type: i1.ComponentService }, { type: i0.Renderer2 }, { type: i0.ElementRef }], propDecorators: { canvaHeigth: [{
|
|
228
|
+
type: Input
|
|
229
|
+
}], contentType: [{
|
|
230
|
+
type: Input
|
|
231
|
+
}], readonly: [{
|
|
183
232
|
type: Input
|
|
184
233
|
}], debug: [{
|
|
185
234
|
type: Input
|
|
@@ -191,9 +240,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
|
|
|
191
240
|
type: Output
|
|
192
241
|
}], outputHtml: [{
|
|
193
242
|
type: Output
|
|
194
|
-
}],
|
|
195
|
-
type:
|
|
196
|
-
|
|
197
|
-
|
|
243
|
+
}], opVariables: [{
|
|
244
|
+
type: ViewChild,
|
|
245
|
+
args: ['opVariables']
|
|
246
|
+
}], mentionAnchor: [{
|
|
247
|
+
type: ViewChild,
|
|
248
|
+
args: ['mentionAnchor']
|
|
198
249
|
}] } });
|
|
199
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWlucHV0cy9rdi1lZGl0b3Iva3YtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWlucHV0cy9rdi1lZGl0b3Iva3YtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBR1QsWUFBWSxFQUVaLEtBQUssRUFFTCxNQUFNLEVBRU4sTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQiw0REFBNEQ7QUFHNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDdkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMENBQTBDLENBQUM7Ozs7Ozs7QUFTOUUsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGtCQUEwQjtJQUUvRCxZQUNFLGdCQUFrQyxFQUFVLFFBQW1CLEVBQVUsRUFBYztRQUN2RixLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQURvQixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUtoRixhQUFRLEdBQVksS0FBSyxDQUFDO1FBRzFCLFVBQUssR0FBWSxLQUFLLENBQUM7UUFFdEIsaUJBQVksR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNyRCxzQkFBaUIsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUUxRCxjQUFTLEdBQXlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDckQsZUFBVSxHQUF5QixJQUFJLFlBQVksRUFBRSxDQUFD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c0JBQWhCLEtBQUs7Z0JBR0csS0FBSztzQkFBYixLQUFLO2dCQUVJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUVHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFLRSxXQUFXO3NCQUFuQixLQUFLO2dCQXFCRyxXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgY29tcHV0ZWQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgaW5wdXQsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBSZW5kZXJlcjIsXHJcbiAgc2lnbmFsLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IFF1aWxsIGZyb20gJ3F1aWxsJztcclxuLy8gaW1wb3J0IFF1aWxsQmxvdEZvcm1hdHRlciAgZnJvbSAncXVpbGwtYmxvdC1mb3JtYXR0ZXItMic7XHJcblxyXG5cclxuaW1wb3J0IHsgQmFzZUNvbXBvbmVudElucHV0IH0gZnJvbSAnLi4vLi4vLi4vYXBpL2Jhc2UtY29tcG9uZW50cy9iYXNlLWNvbXBvbmVudC1pbnB1dCc7XHJcbmltcG9ydCB7IENvbXBvbmVudFByb3ZpZGVycyB9IGZyb20gJy4uLy4uLy4uL2FwaS9oZWxwZXJzL2NvbXBvbmVudC1wcm92aWRlcnMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vYXBpL3NlcnZpY2VzL2NvbXBvbmVudC5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAna3YtZWRpdG9yJyxcclxuICB0ZW1wbGF0ZVVybDogJy4va3YtZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9rdi1lZGl0b3IuY29tcG9uZW50LnNjc3MnLF0sXHJcbiAgcHJvdmlkZXJzOiBDb21wb25lbnRQcm92aWRlcnMoS3ZFZGl0b3JDb21wb25lbnQpLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgS3ZFZGl0b3JDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50SW5wdXQ8c3RyaW5nPiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgY29tcG9uZW50U2VydmljZTogQ29tcG9uZW50U2VydmljZSwgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLCBwcml2YXRlIGVsOiBFbGVtZW50UmVmKSB7XHJcbiAgICBzdXBlcihjb21wb25lbnRTZXJ2aWNlKTtcclxuXHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSByZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHJcbiAgQElucHV0KCkgZGVidWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIG9uVGV4dENoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uU2VsZWN0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQE91dHB1dCgpIG91dHB1dFJhdzogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG91dHB1dEh0bWw6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvKipcclxuICAqIEBkZXByZWNhdGVkIEVzc2EgcHJvcHJpZWRhZGUgbsOjbyBzZXLDoSBtYWlzIHV0aWxpemFkYSBwb3IgZXNzZSBjb21wb25lbnRlIG5hcyBwcsOzeGltYXMgdmVyc8O1ZXMuXHJcbiAgKi9cclxuICBASW5wdXQoKSBjYW52YUhlaWd0aDogc3RyaW5nID0gJzM4MHB4JztcclxuXHJcblxyXG4gIHByaXZhdGUgdXBkYXRpbmdFZGl0b3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcXVpbGwhOiBRdWlsbDtcclxuXHJcbiAgaW5pdExvYWRDb21wbGV0ZSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGlzTG9hZGluZyA9IHNpZ25hbDxib29sZWFuPih0cnVlKTtcclxuICBlZGl0b3JUb29sYmFySGVpZ2h0ID0gc2lnbmFsPHN0cmluZz4oJzNyZW0nKTtcclxuXHJcblxyXG4gIHByaXZhdGUgZWRpdG9yUmVhZHlQcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcclxuICAgIHRoaXMuZWRpdG9yUmVhZHlSZXNvbHZlciA9IHJlc29sdmU7XHJcbiAgfSk7XHJcblxyXG5cclxuICAvKipcclxuICAgKiBjYXNvIGRlZmluYSBjb21vIFwidGV4dFwiIG8gdGV4dG8gaXJhIHNlciBlbnZpYWRvIHNlbSBmb3JtYXRhw6fDo29cclxuICAgKi9cclxuICBASW5wdXQoKSBjb250ZW50VHlwZTogJ2h0bWwnIHwgJ3RleHQnID0gJ2h0bWwnO1xyXG5cclxuICBvdmVycmlkZSBuZ09uSW5pdCgpIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KClcclxuICAgIGlmICghdGhpcy5xdWlsbCkge1xyXG4gICAgICB0aGlzLmhhbmRsZUluaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5pc0xvYWRpbmcuc2V0KGZhbHNlKTtcclxuICAgIH0sIDEwMDApO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmdldEVkaXRvclNpemUoKTtcclxuICAgIH0sIDEwNTApO1xyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZWRpdG9yUmVhZHlSZXNvbHZlciE6ICgpID0+IHZvaWQ7XHJcblxyXG4gIGFzeW5jIGhhbmRsZUluaXQoKSB7XHJcbiAgICBhd2FpdCB0aGlzLmxvYWRDc3MoKTtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZVF1aWxsRWRpdG9yKCk7XHJcbiAgfVxyXG5cclxuICBsb2FkQ3NzKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgY29uc3QgY3NzRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcclxuICAgICAgY3NzRWxlbWVudC5yZWwgPSAnc3R5bGVzaGVldCc7XHJcbiAgICAgIGNzc0VsZW1lbnQuaHJlZiA9ICdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL3F1aWxsQDIuMC4yL2Rpc3QvcXVpbGwuc25vdy5jc3MnO1xyXG5cclxuICAgICAgY3NzRWxlbWVudC5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKCk7XHJcbiAgICAgIGNzc0VsZW1lbnQub25lcnJvciA9IChlcnIpID0+IHJlamVjdChlcnIpO1xyXG5cclxuICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChjc3NFbGVtZW50KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZVF1aWxsRWRpdG9yKCkge1xyXG4gICAgY29uc3QgQ29sb3JDbGFzczogYW55ID0gUXVpbGwuaW1wb3J0KCdhdHRyaWJ1dG9ycy9jbGFzcy9jb2xvcicpO1xyXG4gICAgY29uc3QgQ29sb3JTdHlsZTogYW55ID0gUXVpbGwuaW1wb3J0KCdhdHRyaWJ1dG9ycy9zdHlsZS9jb2xvcicpO1xyXG4gICAgY29uc3QgU2l6ZVN0eWxlOiBhbnkgPSBRdWlsbC5pbXBvcnQoJ2F0dHJpYnV0b3JzL3N0eWxlL3NpemUnKTtcclxuICAgIGNvbnN0IEZvbnQ6IGFueSA9IFF1aWxsLmltcG9ydCgnZm9ybWF0cy9mb250Jyk7XHJcbiAgICBjb25zdCBTaXplOiBhbnkgPSBRdWlsbC5pbXBvcnQoJ2F0dHJpYnV0b3JzL3N0eWxlL3NpemUnKTtcclxuXHJcbiAgICBTaXplLndoaXRlbGlzdCA9IFsnMTVweCcsICcyMHB4JywgJzMwcHgnLCAnNDBweCcsICc1MHB4JywgJzcwcHgnLCAnOTBweCddO1xyXG4gICAgRm9udC53aGl0ZWxpc3QgPSBbJ21vbm9zcGFjZScsICdyb2JvdG8nLCAnc2VyaWYnLCAnaW50ZXInXTtcclxuXHJcbiAgICBRdWlsbC5yZWdpc3RlcihDb2xvclN0eWxlLCB0cnVlKTtcclxuICAgIFF1aWxsLnJlZ2lzdGVyKFNpemVTdHlsZSwgdHJ1ZSk7XHJcbiAgICBRdWlsbC5yZWdpc3RlcihGb250LCB0cnVlKTtcclxuICAgIFF1aWxsLnJlZ2lzdGVyKFNpemUsIHRydWUpO1xyXG5cclxuICAgIC8vIEN1c3RvbWl6YW5kbyBvIGNvbXBvcnRhbWVudG8gZG8gRW50ZXJcclxuICAgIGNvbnN0IGJpbmRpbmdzID0gKFF1aWxsLmltcG9ydCgnbW9kdWxlcy9rZXlib2FyZCcpIGFzIGFueSkuREVGQVVMVFMuYmluZGluZ3M7XHJcblxyXG4gICAgYmluZGluZ3NbJ2VudGVyJ10gPSB7XHJcbiAgICAgIGtleTogMTMsIC8vIEPDs2RpZ28gZGEgdGVjbGEgRW50ZXJcclxuICAgICAgaGFuZGxlcjogKHJhbmdlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBxdWlsbCA9IHRoaXMucXVpbGw7XHJcbiAgICAgICAgcXVpbGwuaW5zZXJ0RW1iZWQocmFuZ2UuaW5kZXgsICdicmVhaycsIHRydWUsIFF1aWxsLnNvdXJjZXMuVVNFUik7XHJcbiAgICAgICAgcXVpbGwuc2V0U2VsZWN0aW9uKHJhbmdlLmluZGV4ICsgMSwgUXVpbGwuc291cmNlcy5TSUxFTlQpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTsgLy8gRXZpdGEgbyBjb21wb3J0YW1lbnRvIHBhZHLDo28gZGUgY3JpYXIgdW0gPHA+XHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIEN1c3RvbSBibG90IGZvciA8YnI+IHRhZ1xyXG4gICAgY29uc3QgQmxvY2tFbWJlZCA9IFF1aWxsLmltcG9ydCgnYmxvdHMvYmxvY2svZW1iZWQnKTtcclxuICAgIGNsYXNzIEJyZWFrIGV4dGVuZHMgKEJsb2NrRW1iZWQgYXMgYW55KSB7XHJcbiAgICAgIHN0YXRpYyBibG90TmFtZSA9ICdicmVhayc7XHJcbiAgICAgIHN0YXRpYyB0YWdOYW1lID0gJ2JyJztcclxuICAgIH1cclxuICAgIFF1aWxsLnJlZ2lzdGVyKEJyZWFrKTtcclxuXHJcbiAgICB0aGlzLnF1aWxsID0gbmV3IFF1aWxsKCcja3YtZWRpdG9yJywge1xyXG4gICAgICB0aGVtZTogJ3Nub3cnLFxyXG4gICAgICBtb2R1bGVzOiB7XHJcbiAgICAgICAgdG9vbGJhcjogJyNrdi1lZGl0b3ItdG9vbGJhcicsXHJcbiAgICAgICAga2V5Ym9hcmQ6IHtcclxuICAgICAgICAgIGJpbmRpbmdzOiBiaW5kaW5ncyxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgICBwbGFjZWhvbGRlcjogdGhpcy5sYWJlbCA/IHRoaXMubGFiZWwgOiAnJyxcclxuICAgICAgcmVhZE9ubHk6IHRoaXMucmVhZG9ubHksXHJcbiAgICAgIGRlYnVnOiB0aGlzLmRlYnVnLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgQWxpZ25TdHlsZSA9IFF1aWxsLmltcG9ydCgnYXR0cmlidXRvcnMvc3R5bGUvYWxpZ24nKSBhcyBhbnk7XHJcbiAgICBRdWlsbC5yZWdpc3RlcihBbGlnblN0eWxlLCB0cnVlKTtcclxuXHJcblxyXG4gICAgdGhpcy5xdWlsbC5vbignc2VsZWN0aW9uLWNoYW5nZScsIChyYW5nZSwgb2xkUmFuZ2UsIHNvdXJjZSkgPT4ge1xyXG4gICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlLmVtaXQoe1xyXG4gICAgICAgIHJhbmdlOiByYW5nZSxcclxuICAgICAgICBvbGRSYW5nZTogb2xkUmFuZ2UsXHJcbiAgICAgICAgc291cmNlOiBzb3VyY2UsXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5xdWlsbC5vbigndGV4dC1jaGFuZ2UnLCAoZGVsdGEsIG9sZENvbnRlbnRzLCBzb3VyY2UpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLnVwZGF0aW5nRWRpdG9yKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGluZ0VkaXRvciA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmVzY3JldmFWYWxvcih0aGlzLnF1aWxsLmdldFNlbWFudGljSFRNTCgpLCB0aGlzLnF1aWxsLmdldFRleHQoKSk7XHJcblxyXG4gICAgICAgIHRoaXMub25UZXh0Q2hhbmdlLmVtaXQoe1xyXG4gICAgICAgICAgZGVsdGE6IGRlbHRhLFxyXG4gICAgICAgICAgb2xkQ29udGVudHM6IG9sZENvbnRlbnRzLFxyXG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5vdXRwdXRSYXcuZW1pdCh0aGlzLnF1aWxsLmdldFRleHQoKSk7XHJcbiAgICAgICAgdGhpcy5vdXRwdXRIdG1sLmVtaXQodGhpcy5xdWlsbC5nZXRTZW1hbnRpY0hUTUwoKSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuXHJcbiAgICB0aGlzLmVkaXRvclJlYWR5UmVzb2x2ZXIoKTtcclxuICAgIHRoaXMuaW5pdExvYWRDb21wbGV0ZS5zZXQodHJ1ZSk7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm1Db250cm9sO1xyXG4gICAgICBpZiAoY29udHJvbCAmJiBjb250cm9sLm1hcmtBc1ByaXN0aW5lKSB7XHJcbiAgICAgICAgY29udHJvbC5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICAgIGNvbnRyb2wubWFya0FzVW50b3VjaGVkKCk7XHJcbiAgICAgIH1cclxuICAgIH0sIDApO1xyXG5cclxuICB9XHJcblxyXG4gIGFkZFF1aWxsQ3NzKCkge1xyXG4gICAgY29uc3QgbGluayA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnbGluaycpO1xyXG4gICAgbGluay5yZWwgPSAnc3R5bGVzaGVldCc7XHJcbiAgICBsaW5rLmhyZWYgPSAnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9xdWlsbEAyLjAuMi9kaXN0L3F1aWxsLnNub3cuY3NzJztcclxuXHJcbiAgICAvLyBRdWFuZG8gbyBDU1MgZm9yIGNhcnJlZ2FkbywgaW5pY2lhbGl6ZSBvIFF1aWxsXHJcbiAgICBsaW5rLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplUXVpbGxFZGl0b3IoKTtcclxuICAgIH07XHJcblxyXG4gICAgLy8gQWRpY2lvbmEgbyBsaW5rIGFvIDxoZWFkPlxyXG4gICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChkb2N1bWVudC5oZWFkLCBsaW5rKTtcclxuICB9XHJcblxyXG5cclxuICBvdmVycmlkZSAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLnVwZGF0aW5nRWRpdG9yID0gdHJ1ZVxyXG4gICAgdGhpcy5lc2NyZXZhVmFsb3IodmFsdWUpXHJcbiAgfVxyXG5cclxuXHJcbiAgYXN5bmMgZXNjcmV2YVZhbG9yKGh0bWx2YWx1ZTogYW55LCByYXd2YWx1ZT86IGFueSkge1xyXG5cclxuICAgIGlmICghdGhpcy5pbml0TG9hZENvbXBsZXRlKCkpXHJcbiAgICAgIGF3YWl0IHRoaXMuZWRpdG9yUmVhZHlQcm9taXNlXHJcblxyXG5cclxuICAgIGlmICh0aGlzLnF1aWxsKSB7XHJcblxyXG4gICAgICBpZiAodGhpcy51cGRhdGluZ0VkaXRvcikge1xyXG4gICAgICAgIHRoaXMucXVpbGwuY2xpcGJvYXJkLmRhbmdlcm91c2x5UGFzdGVIVE1MKGh0bWx2YWx1ZSlcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnVwZGF0aW5nRWRpdG9yID0gZmFsc2U7XHJcbiAgICAgIHRoaXMudmFsdWUgPSBodG1sdmFsdWVcclxuXHJcbiAgICAgIGlmIChyYXd2YWx1ZSA9PSBcIlxcblwiIHx8IHRoaXMudmFsdWUgPT0gXCJcXG5cIilcclxuICAgICAgICB0aGlzLnZhbHVlID0gJydcclxuXHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy51cGRhdGluZ0VkaXRvciA9IGZhbHNlXHJcbiAgICB9XHJcblxyXG5cclxuICB9XHJcblxyXG4gIGdldEVkaXRvclNpemUoKSB7XHJcbiAgICBsZXQgZWRpdG9yRmllbGRIZWlnaHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgna3YtZWRpdG9yLXRvb2xiYXInKT8ub2Zmc2V0SGVpZ2h0O1xyXG5cclxuICAgIGNvbnNvbGUubG9nKCdlZGl0b3JGaWVsZEhlaWdodCcsIGVkaXRvckZpZWxkSGVpZ2h0KTtcclxuICAgIGlmIChlZGl0b3JGaWVsZEhlaWdodClcclxuICAgICAgdGhpcy5lZGl0b3JUb29sYmFySGVpZ2h0LnNldChgJHtlZGl0b3JGaWVsZEhlaWdodH1weGApO1xyXG4gIH1cclxuXHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJrdi1lZGl0b3ItY29udGFpbmVyIGgtZnVsbCBtYXgtaC1mdWxsIGZsZXggZmxleC1jb2x1bW4gcmVsYXRpdmVcIj5cclxuICA8ZGl2XHJcbiAgICAjZWRpdG9yXHJcbiAgICBpZD1cImt2LWVkaXRvci10b29sYmFyXCJcclxuICAgIFtuZ0NsYXNzXT1cInsgJ2Vycm9yLWJvcmRlci10b29sYmFyJzogaGFzQ29udHJvbEVycm9yKCkgfVwiXHJcbiAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgZmxleC13cmFwIGdhcC0yIHctZnVsbCBmbGV4LWluaXRpYWwgYWJzb2x1dGUgdG9wLTBcIlxyXG4gICAgc3R5bGU9XCJ6LWluZGV4OiAxMDAwMDAwMCAhaW1wb3J0YW50O1wiXHJcbiAgPlxyXG4gICAgQGlmKGlzTG9hZGluZygpKSB7XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zXCI+XHJcbiAgICAgIDxwLXNrZWxldG9uXHJcbiAgICAgICAgc3R5bGVDbGFzcz1cInctNXJlbVwiXHJcbiAgICAgICAgW3N0eWxlXT1cInsgaGVpZ2h0OiAnMS41cmVtJyB9XCJcclxuICAgICAgPjwvcC1za2VsZXRvbj5cclxuXHJcbiAgICAgIDxwLXNrZWxldG9uXHJcbiAgICAgICAgc3R5bGVDbGFzcz1cInctNXJlbVwiXHJcbiAgICAgICAgW3N0eWxlXT1cInsgaGVpZ2h0OiAnMS41cmVtJyB9XCJcclxuICAgICAgPjwvcC1za2VsZXRvbj5cclxuXHJcbiAgICAgIDxwLXNrZWxldG9uXHJcbiAgICAgICAgc3R5bGVDbGFzcz1cInctNXJlbVwiXHJcbiAgICAgICAgW3N0eWxlXT1cInsgaGVpZ2h0OiAnMS41cmVtJyB9XCJcclxuICAgICAgPjwvcC1za2VsZXRvbj5cclxuXHJcbiAgICAgIDxwLXNrZWxldG9uXHJcbiAgICAgICAgc3R5bGVDbGFzcz1cInctNXJlbVwiXHJcbiAgICAgICAgW3N0eWxlXT1cInsgaGVpZ2h0OiAnMS41cmVtJyB9XCJcclxuICAgICAgPjwvcC1za2VsZXRvbj5cclxuXHJcbiAgICAgIDxwLXNrZWxldG9uXHJcbiAgICAgICAgc3R5bGVDbGFzcz1cInctNXJlbVwiXHJcbiAgICAgICAgW3N0eWxlXT1cInsgaGVpZ2h0OiAnMS41cmVtJyB9XCJcclxuICAgICAgPjwvcC1za2VsZXRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgfVxyXG5cclxuICAgIDxzcGFuXHJcbiAgICAgIGNsYXNzPVwicWwtZm9ybWF0cyBiZy1ncmF5LTEwMCBib3JkZXItcm91bmQtbWQge3tcclxuICAgICAgICBpc0xvYWRpbmcoKSA/ICdoaWRkZW4nIDogJ2lubGluZS1ibG9jaydcclxuICAgICAgfX1cIlxyXG4gICAgICBcclxuICAgID5cclxuICAgICAgPHNlbGVjdCBjbGFzcz1cInFsLWZvbnRcIj5cclxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwicm9ib3RvXCI+Um9ib3RvPC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm1vbm9zcGFjZVwiPk1vbm9zcGFjZTwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCJpbnRlclwiPkludGVyPC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiBzZWxlY3RlZD5TYW5zIFNlcmlmPC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInNlcmlmXCI+U2VyaWY8L29wdGlvbj5cclxuICAgICAgPC9zZWxlY3Q+XHJcblxyXG4gICAgICA8c2VsZWN0IGNsYXNzPVwicWwtaGVhZGVyXCI+XHJcbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjFcIj5UaXR1bG88L29wdGlvbj5cclxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMlwiPlN1YnRpdHVsbzwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gc2VsZWN0ZWQ+Tm9ybWFsPC9vcHRpb24+XHJcbiAgICAgIDwvc2VsZWN0PlxyXG5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJxbC1mb3JtYXQtZ3JvdXBcIj5cclxuICAgICAgICA8c2VsZWN0IHRpdGxlPVwiU2l6ZVwiIGNsYXNzPVwicWwtc2l6ZVwiPlxyXG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjE1cHhcIj4xNXB4PC9vcHRpb24+XHJcbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMjBweFwiPjIwcHg8L29wdGlvbj5cclxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIzMHB4XCI+MzBweDwvb3B0aW9uPlxyXG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjQwcHhcIj40MHB4PC9vcHRpb24+XHJcbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiNTBweFwiPjUwcHg8L29wdGlvbj5cclxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCI3MHB4XCI+NzBweDwvb3B0aW9uPlxyXG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjkwcHhcIj45MHB4PC9vcHRpb24+XHJcbiAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvc3Bhbj5cclxuXHJcbiAgICA8c3BhblxyXG4gICAgICBjbGFzcz1cInFsLWZvcm1hdHMgYmctZ3JheS0xMDAgYm9yZGVyLXJvdW5kLW1kIHt7XHJcbiAgICAgICAgaXNMb2FkaW5nKCkgPyAnaGlkZGVuJyA6ICdpbmxpbmUtYmxvY2snXHJcbiAgICAgIH19XCJcclxuICAgID5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLWJvbGRcIj48L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLWl0YWxpY1wiPjwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwicWwtdW5kZXJsaW5lXCI+PC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJxbC1zdHJpa2VcIj48L2J1dHRvbj5cclxuICAgIDwvc3Bhbj5cclxuXHJcbiAgICA8c3BhblxyXG4gICAgICBjbGFzcz1cInFsLWZvcm1hdHMgYmctZ3JheS0xMDAgYm9yZGVyLXJvdW5kLW1kIHt7XHJcbiAgICAgICAgaXNMb2FkaW5nKCkgPyAnaGlkZGVuJyA6ICdpbmxpbmUtYmxvY2snXHJcbiAgICAgIH19XCJcclxuICAgID5cclxuICAgICAgPHNlbGVjdCBjbGFzcz1cInFsLWNvbG9yXCI+PC9zZWxlY3Q+XHJcbiAgICAgIDxzZWxlY3QgY2xhc3M9XCJxbC1iYWNrZ3JvdW5kXCI+PC9zZWxlY3Q+XHJcbiAgICA8L3NwYW4+XHJcblxyXG4gICAgPHNwYW5cclxuICAgICAgY2xhc3M9XCJxbC1mb3JtYXRzIGJnLWdyYXktMTAwIGJvcmRlci1yb3VuZC1tZCB7e1xyXG4gICAgICAgIGlzTG9hZGluZygpID8gJ2hpZGRlbicgOiAnaW5saW5lLWJsb2NrJ1xyXG4gICAgICB9fVwiXHJcbiAgICA+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJxbC1zY3JpcHRcIiB2YWx1ZT1cInN1YlwiPjwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwicWwtc2NyaXB0XCIgdmFsdWU9XCJzdXBlclwiPjwvYnV0dG9uPlxyXG4gICAgPC9zcGFuPlxyXG5cclxuICAgIDxzcGFuXHJcbiAgICAgIGNsYXNzPVwicWwtZm9ybWF0cyBiZy1ncmF5LTEwMCBib3JkZXItcm91bmQtbWQge3tcclxuICAgICAgICBpc0xvYWRpbmcoKSA/ICdoaWRkZW4nIDogJ2lubGluZS1ibG9jaydcclxuICAgICAgfX1cIlxyXG4gICAgPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwicWwtaGVhZGVyXCIgdmFsdWU9XCIxXCI+PC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJxbC1oZWFkZXJcIiB2YWx1ZT1cIjJcIj48L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLWJsb2NrcXVvdGVcIj48L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLWNvZGUtYmxvY2tcIj48L2J1dHRvbj5cclxuICAgIDwvc3Bhbj5cclxuXHJcbiAgICA8c3BhblxyXG4gICAgICBjbGFzcz1cInFsLWZvcm1hdHMgYmctZ3JheS0xMDAgYm9yZGVyLXJvdW5kLW1kIHt7XHJcbiAgICAgICAgaXNMb2FkaW5nKCkgPyAnaGlkZGVuJyA6ICdpbmxpbmUtYmxvY2snXHJcbiAgICAgIH19XCJcclxuICAgID5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLWxpc3RcIiB2YWx1ZT1cIm9yZGVyZWRcIj48L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLWxpc3RcIiB2YWx1ZT1cImJ1bGxldFwiPjwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwicWwtaW5kZW50XCIgdmFsdWU9XCItMVwiPjwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwicWwtaW5kZW50XCIgdmFsdWU9XCIrMVwiPjwvYnV0dG9uPlxyXG4gICAgPC9zcGFuPlxyXG5cclxuICAgIDxzcGFuXHJcbiAgICAgIGNsYXNzPVwicWwtZm9ybWF0cyBiZy1ncmF5LTEwMCBib3JkZXItcm91bmQtbWQge3tcclxuICAgICAgICBpc0xvYWRpbmcoKSA/ICdoaWRkZW4nIDogJ2lubGluZS1ibG9jaydcclxuICAgICAgfX1cIlxyXG4gICAgPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwicWwtZGlyZWN0aW9uXCIgdmFsdWU9XCJydGxcIj48L2J1dHRvbj5cclxuICAgICAgPHNlbGVjdCBjbGFzcz1cInFsLWFsaWduXCI+PC9zZWxlY3Q+XHJcbiAgICA8L3NwYW4+XHJcblxyXG4gICAgPHNwYW5cclxuICAgICAgY2xhc3M9XCJxbC1mb3JtYXRzIGJnLWdyYXktMTAwIGJvcmRlci1yb3VuZC1tZCB7e1xyXG4gICAgICAgIGlzTG9hZGluZygpID8gJ2hpZGRlbicgOiAnaW5saW5lLWJsb2NrJ1xyXG4gICAgICB9fVwiXHJcbiAgICA+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJxbC1saW5rXCI+PC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJxbC1pbWFnZVwiPjwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwicWwtdmlkZW9cIj48L2J1dHRvbj5cclxuICAgIDwvc3Bhbj5cclxuXHJcbiAgICA8c3BhblxyXG4gICAgICBjbGFzcz1cInFsLWZvcm1hdHMgYmctZ3JheS0xMDAgYm9yZGVyLXJvdW5kLW1kIHt7XHJcbiAgICAgICAgaXNMb2FkaW5nKCkgPyAnaGlkZGVuJyA6ICdpbmxpbmUtYmxvY2snXHJcbiAgICAgIH19XCJcclxuICAgID5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLWNsZWFuXCI+PC9idXR0b24+XHJcbiAgICA8L3NwYW4+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXZcclxuICAgIGlkPVwia3YtZWRpdG9yXCJcclxuICAgIGNsYXNzPVwiYWJzb2x1dGUgb3ZlcmZsb3ctYXV0byB3LWZ1bGwgZmxleC0xXCJcclxuICAgIFtzdHlsZS5wYWRkaW5nVG9wXT1cImVkaXRvclRvb2xiYXJIZWlnaHQoKVwiXHJcbiAgICBbbmdDbGFzc109XCJ7ICdlcnJvci1ib3JkZXInOiBoYXNDb250cm9sRXJyb3IoKSB9XCJcclxuICA+PC9kaXY+XHJcbjwvZGl2PlxyXG48a3YtZXJyb3IgW2hhc0Vycm9yXT1cImhhc0NvbnRyb2xFcnJvcigpXCI+e3sgZXJyb01lc3NhZ2UoKSB9fTwva3YtZXJyb3I+XHJcblxyXG48IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XHJcblxyXG48IS0tIDxsaW5rIGhyZWY9XCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL3F1aWxsQDIuMC4yL2Rpc3QvcXVpbGwuc25vdy5jc3NcIiByZWw9XCJzdHlsZXNoZWV0XCIgLz4gLS0+XHJcbjxsaW5rIGhyZWY9XCJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9Um9ib3RvXCIgcmVsPVwic3R5bGVzaGVldFwiIC8+XHJcbjxzY3JpcHQgc3JjPVwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9xdWlsbEAyLjAuMi9kaXN0L3F1aWxsLmpzXCI+PC9zY3JpcHQ+XHJcbjxzY3JpcHQgc3JjPVwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9rYXRleEAwLjE2LjkvZGlzdC9rYXRleC5taW4uanNcIj48L3NjcmlwdD5cclxuXHJcbjxsaW5rXHJcbiAgcmVsPVwic3R5bGVzaGVldFwiXHJcbiAgaHJlZj1cImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vcXVpbGxAMi4wLjIvZGlzdC9xdWlsbC5idWJibGUuY3NzXCJcclxuLz5cclxuPGxpbmtcclxuICByZWw9XCJzdHlsZXNoZWV0XCJcclxuICBocmVmPVwiaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvaGlnaGxpZ2h0LmpzLzExLjkuMC9zdHlsZXMvYXRvbS1vbmUtZGFyay5taW4uY3NzXCJcclxuLz5cclxuPGxpbmtcclxuICByZWw9XCJzdHlsZXNoZWV0XCJcclxuICBocmVmPVwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9rYXRleEAwLjE2LjkvZGlzdC9rYXRleC5taW4uY3NzXCJcclxuLz5cclxuXHJcbjwhLS0gSW1wb3J0IGZvbnRzIC0tPlxyXG5cclxuPGxpbmsgcmVsPVwicHJlY29ubmVjdFwiIGhyZWY9XCJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tXCIgLz5cclxuPGxpbmsgcmVsPVwicHJlY29ubmVjdFwiIGhyZWY9XCJodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tXCIgY3Jvc3NvcmlnaW4gLz5cclxuXHJcbjxsaW5rXHJcbiAgaHJlZj1cImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9QmFsb28rMjp3Z2h0QDQwMDs1MDA7NjAwOzcwMDs4MDAmZmFtaWx5PUludGVyOndnaHRAMTAwLi45MDAmZmFtaWx5PUpldEJyYWlucytNb25vOml0YWwsd2dodEAwLDEwMC4uODAwOzEsMTAwLi44MDAmZGlzcGxheT1zd2FwXCJcclxuICByZWw9XCJzdHlsZXNoZWV0XCJcclxuLz5cclxuPGxpbmtcclxuICBocmVmPVwiaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1CYWxvbysyOndnaHRANDAwOzUwMDs2MDA7NzAwOzgwMCZmYW1pbHk9SW50ZXI6d2dodEAxMDAuLjkwMCZmYW1pbHk9SmV0QnJhaW5zK01vbm86aXRhbCx3Z2h0QDAsMTAwLi44MDA7MSwxMDAuLjgwMCZmYW1pbHk9Um9ib3RvOml0YWwsd2dodEAwLDEwMDswLDMwMDswLDQwMDswLDUwMDswLDcwMDswLDkwMDsxLDEwMDsxLDMwMDsxLDQwMDsxLDUwMDsxLDcwMDsxLDkwMCZkaXNwbGF5PXN3YXBcIlxyXG4gIHJlbD1cInN0eWxlc2hlZXRcIlxyXG4vPlxyXG4iXX0=
|
|
250
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWlucHV0cy9rdi1lZGl0b3Iva3YtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWlucHV0cy9rdi1lZGl0b3Iva3YtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsUUFBUSxFQUdSLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLEtBQUssRUFJTCxNQUFNLEVBRU4sTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUl2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDdkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFOUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0VBQWtFLENBQUM7QUFFL0csT0FBTyxFQUlMLG9CQUFvQixFQUNwQix3QkFBd0IsRUFDeEIsc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUNuQixNQUFNLGFBQWEsQ0FBQzs7Ozs7Ozs7Ozs7QUFRckIsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGtCQUEwQjtJQUUvRCxZQUNFLGdCQUFrQyxFQUMxQixRQUFtQixFQUNuQixFQUFjO1FBRXRCLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBSGhCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUt4QixzQkFBc0I7UUFDZCxpQkFBWSxHQUFH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Q0FBQztRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQywyQkFBMkIsRUFBRTtZQUNuRCxNQUFNLEVBQUUsWUFBWTtZQUNwQixLQUFLLEVBQUUsS0FBSztZQUNaLE1BQU0sRUFBRSxLQUFLO1lBQ2IsS0FBSyxFQUFFLElBQUk7WUFDWCxRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBNVBVLGlCQUFpQjtrR0FBakIsaUJBQWlCLDQrQkFGakIsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsOFBDekNsRCw2MFNBMlFBOzsyRkRoT2EsaUJBQWlCO2tCQU43QixTQUFTOytCQUNFLFdBQVcsYUFHVixrQkFBa0IsbUJBQW1CO3NJQXVCdkMsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUdJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkErQm1CLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkFDSSxhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBjb21wdXRlZCxcclxuICBlZmZlY3QsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgaW5qZWN0LFxyXG4gIGlucHV0LFxyXG4gIElucHV0LFxyXG4gIG1vZGVsLFxyXG4gIE9uSW5pdCxcclxuICBvdXRwdXQsXHJcbiAgT3V0cHV0LFxyXG4gIFJlbmRlcmVyMixcclxuICBzaWduYWwsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IFF1aWxsIGZyb20gJ3F1aWxsJztcclxuaW1wb3J0IHsgT3ZlcmxheVBhbmVsIH0gZnJvbSAncHJpbWVuZy9vdmVybGF5cGFuZWwnO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuXHJcbmltcG9ydCB7IEJhc2VDb21wb25lbnRJbnB1dCB9IGZyb20gJy4uLy4uLy4uL2FwaS9iYXNlLWNvbXBvbmVudHMvYmFzZS1jb21wb25lbnQtaW5wdXQnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRQcm92aWRlcnMgfSBmcm9tICcuLi8uLi8uLi9hcGkvaGVscGVycy9jb21wb25lbnQtcHJvdmlkZXJzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2FwaS9zZXJ2aWNlcy9jb21wb25lbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEt2SW5zdHJ1Y29lc1JlcG9ydENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9rdi1pbnN0cnVjb2VzLXJlcG9ydC9rdi1pbnN0cnVjb2VzLXJlcG9ydC5jb21wb25lbnQnO1xyXG5cclxuaW1wb3J0IHsgXHJcbiAgS3ZFZGl0b3JSZWxhdG9yaW8sIFxyXG4gIEt2RWRpdG9yVmFyaWF2ZWwsIFxyXG4gIEt2RWRpdG9yQ29uZmlnLFxyXG4gIEt2RWRpdG9yUXVpbGxTZXJ2aWNlLFxyXG4gIEt2RWRpdG9yUmVsYXRvcmlvU2VydmljZSxcclxuICBLdkVkaXRvck1lbnRpb25TZXJ2aWNlLFxyXG4gIEt2RWRpdG9yUGRmU2VydmljZVxyXG59IGZyb20gJy4va3YtZWRpdG9yJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAna3YtZWRpdG9yJyxcclxuICB0ZW1wbGF0ZVVybDogJy4va3YtZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9rdi1lZGl0b3IuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IENvbXBvbmVudFByb3ZpZGVycyhLdkVkaXRvckNvbXBvbmVudCksXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBLdkVkaXRvckNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnRJbnB1dDxzdHJpbmc+IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBjb21wb25lbnRTZXJ2aWNlOiBDb21wb25lbnRTZXJ2aWNlLCBcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMiwgXHJcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmXHJcbiAgKSB7XHJcbiAgICBzdXBlcihjb21wb25lbnRTZXJ2aWNlKTtcclxuICB9XHJcblxyXG4gIC8vIEluamXDp8OjbyBkZSBzZXJ2acOnb3NcclxuICBwcml2YXRlIHF1aWxsU2VydmljZSA9IGluamVjdChLdkVkaXRvclF1aWxsU2VydmljZSk7XHJcbiAgcHJpdmF0ZSByZWxhdG9yaW9TZXJ2aWNlID0gaW5qZWN0KEt2RWRpdG9yUmVsYXRvcmlvU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBtZW50aW9uU2VydmljZSA9IGluamVjdChLdkVkaXRvck1lbnRpb25TZXJ2aWNlKTtcclxuICBwcml2YXRlIHBkZlNlcnZpY2UgPSBpbmplY3QoS3ZFZGl0b3JQZGZTZXJ2aWNlKTtcclxuICBwcml2YXRlIGRpYWxvZ1NlcnZpY2UgPSBpbmplY3QoRGlhbG9nU2VydmljZSk7XHJcblxyXG4gIC8vIFByb3ByaWVkYWRlcyBkZSBjb25maWd1cmHDp8Ojb1xyXG4gIC8qKlxyXG4gICAqIEBkZXByZWNhdGVkIEVzc2EgcHJvcHJpZWRhZGUgbsOjbyBzZXLDoSBtYWlzIHV0aWxpemFkYSBwb3IgZXNzZSBjb21wb25lbnRlIG5hcyBwcsOzeGltYXMgdmVyc8O1ZXMuXHJcbiAgICovXHJcbiAgQElucHV0KCkgY2FudmFIZWlndGg6IHN0cmluZyA9ICczODBweCc7XHJcbiAgQElucHV0KCkgY29udGVudFR5cGU6ICdodG1sJyB8ICd0ZXh0JyA9ICdodG1sJztcclxuICBASW5wdXQoKSByZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGRlYnVnOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIEV2ZW50b3NcclxuICBAT3V0cHV0KCkgb25UZXh0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25TZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvdXRwdXRSYXc6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvdXRwdXRIdG1sOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgLy8gUHJvcHJpZWRhZGVzIGludGVybmFzXHJcbiAgcHJpdmF0ZSB1cGRhdGluZ0VkaXRvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgbGFzdFNlbGVjdGlvblJhbmdlOiBhbnkgPSBudWxsO1xyXG4gIHByaXZhdGUgZWRpdG9yUmVhZHlSZXNvbHZlciE6ICgpID0+IHZvaWQ7XHJcbiAgcHJpdmF0ZSBlZGl0b3JSZWFkeVByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xyXG4gICAgdGhpcy5lZGl0b3JSZWFkeVJlc29sdmVyID0gcmVzb2x2ZTtcclxuICB9KTtcclxuXHJcbiAgLy8gSW5zdMOibmNpYSBkbyBRdWlsbFxyXG4gIHF1aWxsITogUXVpbGw7XHJcbiAgaHRtbERvRWRpdG9yID0gJyc7XHJcblxyXG4gIC8vIFNpZ25hbHMgcGFyYSBjb250cm9sZSBkZSBlc3RhZG9cclxuICBpbml0TG9hZENvbXBsZXRlID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuICBpc0xvYWRpbmcgPSBzaWduYWw8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgZWRpdG9yVG9vbGJhckhlaWdodCA9IHNpZ25hbDxzdHJpbmc+KCczcmVtJyk7XHJcbiAgdGlwb1Zpc3VhbGl6YWNhbyA9IHNpZ25hbDwndmFsb3InIHwgJ2Rlc2NyaWNhbyc+KCdkZXNjcmljYW8nKTtcclxuICBmaWx0ZXJlZFZhcmlhYmxlcyA9IHNpZ25hbDxLdkVkaXRvclZhcmlhdmVsW10+KFtdKTtcclxuXHJcbiAgLy8gSW5wdXRzIHBhcmEgcmVsYXTDs3Jpb3NcclxuICByZWxhdG9yaW9zID0gaW5wdXQ8S3ZFZGl0b3JSZWxhdG9yaW9bXT4oW10pO1xyXG4gIGlkUmVsYXRvcmlvSW5pdGlhbCA9IGlucHV0PG51bWJlcj4oMCk7XHJcblxyXG4gIC8vIENvbXB1dGVkIHByb3BlcnRpZXMgcGFyYSByZWxhdMOzcmlvc1xyXG4gIGlkUmVsYXRvcmlvU2VsZWN0ZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlbGF0b3Jpb1NlcnZpY2UuZ2V0SWRSZWxhdG9yaW9TZWxlY3RlZCgpKTtcclxuICByZWxhdG9yaW8gPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlbGF0b3Jpb1NlcnZpY2UuZ2V0UmVsYXRvcmlvU2VsZWN0ZWQoKSk7XHJcbiAgaXNMb2FkaW5nUGRmID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5wZGZTZXJ2aWNlLmdldElzTG9hZGluZ1BkZigpKTtcclxuXHJcbiAgLy8gVmlld0NoaWxkIHBhcmEgb3ZlcmxheSBwYW5lbHNcclxuICBAVmlld0NoaWxkKCdvcFZhcmlhYmxlcycpIG9wVmFyaWFibGVzITogT3ZlcmxheVBhbmVsO1xyXG4gIEBWaWV3Q2hpbGQoJ21lbnRpb25BbmNob3InKSBtZW50aW9uQW5jaG9yITogRWxlbWVudFJlZjtcclxuXHJcbiAgbWVzc2FnZXMgPSBbeyBzZXZlcml0eTogJ2luZm8nLCBkZXRhaWw6ICdNZXNzYWdlIENvbnRlbnQnIH1dO1xyXG5cclxuICAvLyBNw6l0b2RvcyBwYXJhIGdlcmVuY2lhciByZWxhdMOzcmlvc1xyXG4gIHNldFJlbGF0b3Jpb1BvcklkKGlkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGNvbnN0IHJlbGF0b3JpbyA9IHRoaXMucmVsYXRvcmlvU2VydmljZS5zZXRSZWxhdG9yaW9Qb3JJZChpZCk7XHJcbiAgICBpZiAocmVsYXRvcmlvKSB7XHJcbiAgICAgIHRoaXMuc2V0UmVsYXRvcmlvKHJlbGF0b3Jpbyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRSZWxhdG9yaW8ocmVsYXRvcmlvOiBLdkVkaXRvclJlbGF0b3Jpbyk6IHZvaWQge1xyXG4gICAgdGhpcy5yZWxhdG9yaW9TZXJ2aWNlLnNldFJlbGF0b3JpbyhyZWxhdG9yaW8pO1xyXG4gICAgY29uc3QgbW9kZWxvID0gcmVsYXRvcmlvLm1vZGVsb1JlbGF0b3JpbyB8fCAnJztcclxuICAgIGNvbnN0IHZhcmlhdmVpcyA9IHJlbGF0b3Jpby52YXJpYXZlaXMgfHwgW107XHJcblxyXG4gICAgdGhpcy5odG1sRG9FZGl0b3IgPSB0aGlzLnJlbGF0b3Jpb1NlcnZpY2UucmVuZGVyQ29udHJhdG8obW9kZWxvLCB2YXJpYXZlaXMpO1xyXG4gICAgdGhpcy51cGRhdGluZ0VkaXRvciA9IHRydWU7XHJcbiAgICB0aGlzLmVzY3JldmFWYWxvcih0aGlzLmh0bWxEb0VkaXRvcik7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICBcclxuICAgIC8vIEluaWNpYWxpemEgb3MgcmVsYXTDs3Jpb3Mgbm8gc2VydmnDp29cclxuICAgIHRoaXMucmVsYXRvcmlvU2VydmljZS5zZXRSZWxhdG9yaW9zKHRoaXMucmVsYXRvcmlvcygpKTtcclxuICAgIFxyXG4gICAgaWYgKCF0aGlzLnF1aWxsKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlSW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmlzTG9hZGluZy5zZXQoZmFsc2UpO1xyXG4gICAgfSwgMTAwMCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaWRSZWxhdG9yaW9Jbml0aWFsKCkpIHtcclxuICAgICAgdGhpcy5zZXRSZWxhdG9yaW9Qb3JJZCh0aGlzLmlkUmVsYXRvcmlvSW5pdGlhbCgpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGhhbmRsZUluaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCB0aGlzLnF1aWxsU2VydmljZS5sb2FkQ3NzKCk7XHJcbiAgICB0aGlzLmluaXRpYWxpemVRdWlsbEVkaXRvcigpO1xyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZVF1aWxsRWRpdG9yKCk6IHZvaWQge1xyXG4gICAgY29uc3QgY29uZmlnID0ge1xyXG4gICAgICB0aGVtZTogJ3Nub3cnLFxyXG4gICAgICBtb2R1bGVzOiB7XHJcbiAgICAgICAgdG9vbGJhcjogJyNrdi1lZGl0b3ItdG9vbGJhcicsXHJcbiAgICAgIH0sXHJcbiAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLmxhYmVsID8gdGhpcy5sYWJlbCA6ICcnLFxyXG4gICAgICByZWFkT25seTogdGhpcy5yZWFkb25seSxcclxuICAgICAgZGVidWc6IHRoaXMuZGVidWcsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMucXVpbGwgPSB0aGlzLnF1aWxsU2VydmljZS5jcmVhdGVRdWlsbEluc3RhbmNlKCcja3YtZWRpdG9yJywgY29uZmlnKTtcclxuXHJcbiAgICB0aGlzLnNldHVwUXVpbGxFdmVudHMoKTtcclxuICAgIHRoaXMuZWRpdG9yUmVhZHlSZXNvbHZlcigpO1xyXG4gICAgdGhpcy5pbml0TG9hZENvbXBsZXRlLnNldCh0cnVlKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybUNvbnRyb2w7XHJcbiAgICAgIGlmIChjb250cm9sICYmIGNvbnRyb2wubWFya0FzUHJpc3RpbmUpIHtcclxuICAgICAgICBjb250cm9sLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgY29udHJvbC5tYXJrQXNVbnRvdWNoZWQoKTtcclxuICAgICAgfVxyXG4gICAgfSwgMCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldHVwUXVpbGxFdmVudHMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnF1aWxsLm9uKCdzZWxlY3Rpb24tY2hhbmdlJywgKHJhbmdlLCBvbGRSYW5nZSwgc291cmNlKSA9PiB7XHJcbiAgICAgIGlmIChyYW5nZSkge1xyXG4gICAgICAgIHRoaXMubGFzdFNlbGVjdGlvblJhbmdlID0gcmFuZ2U7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZS5lbWl0KHtcclxuICAgICAgICByYW5nZTogcmFuZ2UsXHJcbiAgICAgICAgb2xkUmFuZ2U6IG9sZFJhbmdlLFxyXG4gICAgICAgIHNvdXJjZTogc291cmNlLFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucXVpbGwub24oJ3RleHQtY2hhbmdlJywgKGRlbHRhLCBvbGRDb250ZW50cywgc291cmNlKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnJlbGF0b3Jpb3MoKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVNZW50aW9uKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghdGhpcy51cGRhdGluZ0VkaXRvcikge1xyXG4gICAgICAgIHRoaXMudXBkYXRpbmdFZGl0b3IgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmVzY3JldmFWYWxvcih0aGlzLnF1aWxsLmdldFNlbWFudGljSFRNTCgpLCB0aGlzLnF1aWxsLmdldFRleHQoKSk7XHJcblxyXG4gICAgICAgIHRoaXMub25UZXh0Q2hhbmdlLmVtaXQoe1xyXG4gICAgICAgICAgZGVsdGE6IGRlbHRhLFxyXG4gICAgICAgICAgb2xkQ29udGVudHM6IG9sZENvbnRlbnRzLFxyXG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMub3V0cHV0UmF3LmVtaXQodGhpcy5xdWlsbC5nZXRUZXh0KCkpO1xyXG4gICAgICAgIHRoaXMub3V0cHV0SHRtbC5lbWl0KHRoaXMucXVpbGwuZ2V0U2VtYW50aWNIVE1MKCkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGluZ0VkaXRvciA9IHRydWU7XHJcbiAgICB0aGlzLmVzY3JldmFWYWxvcih2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBlc2NyZXZhVmFsb3IoaHRtbHZhbHVlOiBhbnksIHJhd3ZhbHVlPzogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXRoaXMuaW5pdExvYWRDb21wbGV0ZSgpKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuZWRpdG9yUmVhZHlQcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnF1aWxsKSB7XHJcbiAgICAgIGlmICh0aGlzLnVwZGF0aW5nRWRpdG9yKSB7XHJcbiAgICAgICAgdGhpcy5xdWlsbC5jbGlwYm9hcmQuZGFuZ2Vyb3VzbHlQYXN0ZUhUTUwoaHRtbHZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnVwZGF0aW5nRWRpdG9yID0gZmFsc2U7XHJcbiAgICAgIHRoaXMudmFsdWUgPSBodG1sdmFsdWU7XHJcblxyXG4gICAgICBpZiAocmF3dmFsdWUgPT0gXCJcXG5cIiB8fCB0aGlzLnZhbHVlID09IFwiXFxuXCIpIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gJyc7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudXBkYXRpbmdFZGl0b3IgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm91dHB1dEh0bWwuZW1pdCh0aGlzLnF1aWxsLmdldFNlbWFudGljSFRNTCgpKTtcclxuICB9XHJcblxyXG4gIGdldEVkaXRvclNpemUoKTogdm9pZCB7XHJcbiAgICBsZXQgZWRpdG9yRmllbGRIZWlnaHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgna3YtZWRpdG9yLXRvb2xiYXInKT8ub2Zmc2V0SGVpZ2h0O1xyXG4gICAgaWYgKGVkaXRvckZpZWxkSGVpZ2h0KSB7XHJcbiAgICAgIHRoaXMuZWRpdG9yVG9vbGJhckhlaWdodC5zZXQoYCR7ZWRpdG9yRmllbGRIZWlnaHR9cHhgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIG9wZW5SZWxhdG9yaW8oKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdQZGYoKSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGh0bWxDb250ZW50ID0gdGhpcy5xdWlsbC5nZXRTZW1hbnRpY0hUTUwoKTtcclxuICAgIGNvbnN0IHJlbGF0b3JpbyA9IHRoaXMucmVsYXRvcmlvKCk7XHJcbiAgICBjb25zdCB0aXBvVmlzdWFsaXphY2FvID0gdGhpcy50aXBvVmlzdWFsaXphY2FvKCk7XHJcblxyXG4gICAgYXdhaXQgdGhpcy5wZGZTZXJ2aWNlLm9wZW5SZWxhdG9yaW8oaHRtbENvbnRlbnQsIHJlbGF0b3JpbywgdGlwb1Zpc3VhbGl6YWNhbyk7XHJcbiAgfVxyXG5cclxuICAvLyBNw6l0b2RvcyBwYXJhIHNpc3RlbWEgZGUgbWVuw6fDtWVzXHJcbiAgaGFuZGxlTWVudGlvbigpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5yZWxhdG9yaW8oKSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMubWVudGlvblNlcnZpY2UuaGFuZGxlTWVudGlvbih0aGlzLnF1aWxsLCB0aGlzLnJlbGF0b3JpbygpIS52YXJpYXZlaXMpO1xyXG4gICAgdGhpcy5maWx0ZXJlZFZhcmlhYmxlcy5zZXQocmVzdWx0LmZpbHRlcmVkVmFyaWFibGVzKTtcclxuXHJcbiAgICBpZiAocmVzdWx0LnNob3VsZFNob3dQYW5lbCAmJiByZXN1bHQubWVudGlvbkJvdW5kcykge1xyXG4gICAgICB0aGlzLnNob3dWYXJpYWJsZXNQYW5lbChyZXN1bHQubWVudGlvbkJvdW5kcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNsb3NlVmFyaWFibGVzUGFuZWwoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2hvd1ZhcmlhYmxlc1BhbmVsKGJvdW5kczogeyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyIH0pOiB2b2lkIHtcclxuICAgIGNvbnN0IGFuY2hvckVsID0gdGhpcy5tZW50aW9uQW5jaG9yLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBhbmNob3JFbC5zdHlsZS50b3AgPSBgJHtib3VuZHMudG9wfXB4YDtcclxuICAgIGFuY2hvckVsLnN0eWxlLmxlZnQgPSBgJHtib3VuZHMubGVmdH1weGA7XHJcbiAgICB0aGlzLm9wVmFyaWFibGVzLnNob3cobnVsbCwgYW5jaG9yRWwpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0VmFyaWFibGVGcm9tUGFuZWwodmFyaWFibGU6IEt2RWRpdG9yVmFyaWF2ZWwpOiB2b2lkIHtcclxuICAgIHRoaXMubWVudGlvblNlcnZpY2UuaW5zZXJ0VmFyaWFibGUodGhpcy5xdWlsbCwgdmFyaWFibGUpO1xyXG4gICAgdGhpcy5jbG9zZVZhcmlhYmxlc1BhbmVsKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZVZhcmlhYmxlc1BhbmVsKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMub3BWYXJpYWJsZXMpIHtcclxuICAgICAgdGhpcy5vcFZhcmlhYmxlcy5oaWRlKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm1lbnRpb25TZXJ2aWNlLmNsb3NlTWVudGlvbigpO1xyXG4gIH1cclxuXHJcbiAgc2hvd0luc3RydWNvZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihLdkluc3RydWNvZXNSZXBvcnRDb21wb25lbnQsIHtcclxuICAgICAgaGVhZGVyOiAnSW5zdHJ1w6fDtWVzJyxcclxuICAgICAgd2lkdGg6ICc0MCUnLFxyXG4gICAgICBoZWlnaHQ6ICczMCUnLFxyXG4gICAgICBtb2RhbDogdHJ1ZSxcclxuICAgICAgY2xvc2FibGU6IHRydWUsXHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiPGRpdlxyXG4gIGNsYXNzPVwia3YtZWRpdG9yLWNvbnRhaW5lciBoLWZ1bGwgbWF4LWgtZnVsbCBmbGV4IGZsZXgtY29sdW1uIG92ZXJmbG93LWhpZGRlblwiXHJcbj5cclxuICA8ZGl2XHJcbiAgICAjZWRpdG9yXHJcbiAgICBpZD1cImt2LWVkaXRvci10b29sYmFyXCJcclxuICAgIFtuZ0NsYXNzXT1cInsgJ2Vycm9yLWJvcmRlci10b29sYmFyJzogaGFzQ29udHJvbEVycm9yKCkgfVwiXHJcbiAgICBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gZmxleC1pbml0aWFsXCJcclxuICA+XHJcbiAgICBAaWYocmVsYXRvcmlvcygpLmxlbmd0aCA+IDApIHtcclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC0yXCI+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBwLTIgYm9yZGVyLXJvdW5kLWxnIGJvcmRlci0xIGJvcmRlci1ncmF5LTIwMCBob3ZlcjpzaGFkb3ctMSBob3ZlcjpiZy1ncmF5LTEwMCBjdXJzb3ItcG9pbnRlciB0cmFuc2l0aW9uLWFsbCB0cmFuc2l0aW9uLWR1cmF0aW9uLTMwMFwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib3AudG9nZ2xlKCRldmVudClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCB0ZXh0LWxnIHRleHQtZ3JlZW4tNjAwIGZvbnQtbWVkaXVtXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgY29udHJhY3RcclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1zZW1pYm9sZCB0ZXh0LXhzIHRleHQtZ3JheS02MDBcIj57e1xyXG4gICAgICAgICAgICByZWxhdG9yaW8oKT8ubGFiZWwgfHwgXCJTZWxlY2lvbmUgdW0gcmVsYXTDs3Jpb1wiXHJcbiAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCB0ZXh0LWxnXCI+XHJcbiAgICAgICAgICAgIGtleWJvYXJkX2Fycm93X2Rvd25cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBwLTIgYm9yZGVyLXJvdW5kLWxnIGJvcmRlci0xIGJvcmRlci1ncmF5LTIwMCBob3ZlcjpzaGFkb3ctMSBob3ZlcjpiZy1ncmF5LTEwMCBjdXJzb3ItcG9pbnRlciB0cmFuc2l0aW9uLWFsbCB0cmFuc2l0aW9uLWR1cmF0aW9uLTMwMFwiXHJcbiAgICAgICAgICAoY2xpY2spPVwic2hvd0luc3RydWNvZXMoKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIHRleHQtbGcgdGV4dC1ibHVlLTYwMCBmb250LW1lZGl1bVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIGluZm9cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1zZW1pYm9sZCB0ZXh0LXhzIHRleHQtZ3JheS02MDBcIj5JbnN0cnXDp8O1ZXM8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgcC0yIGJvcmRlci1yb3VuZC1sZyBib3JkZXItMSBib3JkZXItZ3JheS0yMDAgaG92ZXI6c2hhZG93LTEgaG92ZXI6YmctZ3JheS0xMDAgY3Vyc29yLXBvaW50ZXIgdHJhbnNpdGlvbi1hbGwgdHJhbnNpdGlvbi1kdXJhdGlvbi0zMDBcIlxyXG4gICAgICAgIChjbGljayk9XCJvcGVuUmVsYXRvcmlvKClcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIHRleHQtbGcgZm9udC1tZWRpdW1cIj5cclxuICAgICAgICAgIHByaW50XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1zZW1pYm9sZCB0ZXh0LXhzIHRleHQtZ3JheS02MDBcIj5JbXByaW1pcjwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8cC1kaXZpZGVyIGNsYXNzPVwidy1mdWxsXCI+PC9wLWRpdmlkZXI+XHJcblxyXG4gICAgfVxyXG5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiB3LWZ1bGwgZmxleC1pbml0aWFsXCJcclxuICAgID5cclxuICAgICAgQGlmKGlzTG9hZGluZygpKSB7XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTMgdy1mdWxsXCI+XHJcbiAgICAgICAgPHAtc2tlbGV0b25cclxuICAgICAgICAgIHN0eWxlQ2xhc3M9XCJ3LTZyZW1cIlxyXG4gICAgICAgICAgW3N0eWxlXT1cInsgaGVpZ2h0OiAnMnJlbScgfVwiXHJcbiAgICAgICAgPjwvcC1za2VsZXRvbj5cclxuXHJcbiAgICAgICAgPHAtc2tlbGV0b25cclxuICAgICAgICAgIHN0eWxlQ2xhc3M9XCJ3LTZyZW1cIlxyXG4gICAgICAgICAgW3N0eWxlXT1cInsgaGVpZ2h0OiAnMnJlbScgfVwiXHJcbiAgICAgICAgPjwvcC1za2VsZXRvbj5cclxuXHJcbiAgICAgICAgPHAtc2tlbGV0b25cclxuICAgICAgICAgIHN0eWxlQ2xhc3M9XCJ3LTZyZW1cIlxyXG4gICAgICAgICAgW3N0eWxlXT1cInsgaGVpZ2h0OiAnMnJlbScgfVwiXHJcbiAgICAgICAgPjwvcC1za2VsZXRvbj5cclxuXHJcbiAgICAgICAgPHAtc2tlbGV0b25cclxuICAgICAgICAgIHN0eWxlQ2xhc3M9XCJ3LTZyZW1cIlxyXG4gICAgICAgICAgW3N0eWxlXT1cInsgaGVpZ2h0OiAnMnJlbScgfVwiXHJcbiAgICAgICAgPjwvcC1za2VsZXRvbj5cclxuXHJcbiAgICAgICAgPHAtc2tlbGV0b25cclxuICAgICAgICAgIHN0eWxlQ2xhc3M9XCJ3LTZyZW1cIlxyXG4gICAgICAgICAgW3N0eWxlXT1cInsgaGVpZ2h0OiAnMnJlbScgfVwiXHJcbiAgICAgICAgPjwvcC1za2VsZXRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LXdyYXAgZ2FwLTIge3tcclxuICAgICAgICAgIGlzTG9hZGluZygpID8gJ2hpZGRlbicgOiAnZmxleCdcclxuICAgICAgICB9fSB3LWZ1bGxcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJxbC1mb3JtYXRzIGJvcmRlci1yb3VuZC1tZFwiPlxyXG4gICAgICAgICAgPHNlbGVjdCBjbGFzcz1cInFsLWZvbnRcIj5cclxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInJvYm90b1wiPlJvYm90bzwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibW9ub3NwYWNlXCI+TW9ub3NwYWNlPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJpbnRlclwiPkludGVyPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24gc2VsZWN0ZWQ+U2FucyBTZXJpZjwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwic2VyaWZcIj5TZXJpZjwvb3B0aW9uPlxyXG4gICAgICAgICAgPC9zZWxlY3Q+XHJcblxyXG4gICAgICAgICAgPHNlbGVjdCBjbGFzcz1cInFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMVwiPlRpdHVsbzwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMlwiPlN1YnRpdHVsbzwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHNlbGVjdGVkPk5vcm1hbDwvb3B0aW9uPlxyXG4gICAgICAgICAgPC9zZWxlY3Q+XHJcblxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJxbC1mb3JtYXQtZ3JvdXBcIj5cclxuICAgICAgICAgICAgPHNlbGVjdCB0aXRsZT1cIlNpemVcIiBjbGFzcz1cInFsLXNpemVcIj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMTVweFwiPjE1cHg8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMjBweFwiPjIwcHg8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMzBweFwiPjMwcHg8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiNDBweFwiPjQwcHg8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiNTBweFwiPjUwcHg8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiNzBweFwiPjcwcHg8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiOTBweFwiPjkwcHg8L29wdGlvbj5cclxuICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICA8cC1kaXZpZGVyIGxheW91dD1cInZlcnRpY2FsXCI+PC9wLWRpdmlkZXI+XHJcblxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwicWwtZm9ybWF0cyBib3JkZXItcm91bmQtbWRcIj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJxbC1ib2xkXCI+PC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtaXRhbGljXCI+PC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtdW5kZXJsaW5lXCI+PC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtc3RyaWtlXCI+PC9idXR0b24+XHJcbiAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICA8cC1kaXZpZGVyIGxheW91dD1cInZlcnRpY2FsXCI+PC9wLWRpdmlkZXI+XHJcblxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwicWwtZm9ybWF0cyBib3JkZXItcm91bmQtbWRcIj5cclxuICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJxbC1jb2xvclwiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgPHNlbGVjdCBjbGFzcz1cInFsLWJhY2tncm91bmRcIj48L3NlbGVjdD5cclxuICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgIEBpZih0cnVlKSB7XHJcbiAgICAgICAgPCEtLSA8cC1kaXZpZGVyIGxheW91dD1cInZlcnRpY2FsXCI+PC9wLWRpdmlkZXI+XHJcblxyXG4gICAgICA8c3BhbiBjbGFzcz1cInFsLWZvcm1hdHMgYm9yZGVyLXJvdW5kLW1kXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLWhlYWRlclwiIHZhbHVlPVwiMVwiPjwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJxbC1oZWFkZXJcIiB2YWx1ZT1cIjJcIj48L2J1dHRvbj5cclxuICAgICAgPC9zcGFuPiAtLT5cclxuXHJcbiAgICAgICAgPHAtZGl2aWRlciBsYXlvdXQ9XCJ2ZXJ0aWNhbFwiPjwvcC1kaXZpZGVyPlxyXG5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInFsLWZvcm1hdHMgYm9yZGVyLXJvdW5kLW1kXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtbGlua1wiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLWltYWdlXCI+PC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtdmlkZW9cIj48L2J1dHRvbj5cclxuICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgIDxwLWRpdmlkZXIgbGF5b3V0PVwidmVydGljYWxcIj48L3AtZGl2aWRlcj5cclxuXHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJxbC1mb3JtYXRzIGJvcmRlci1yb3VuZC1tZFwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLWxpc3RcIiB2YWx1ZT1cIm9yZGVyZWRcIj48L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJxbC1saXN0XCIgdmFsdWU9XCJidWxsZXRcIj48L2J1dHRvbj5cclxuICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJxbC1hbGlnblwiPjwvc2VsZWN0PlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICB9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdlxyXG4gICAgc3R5bGU9XCJcclxuICAgICAgaGVpZ2h0OiAzcHg7XHJcbiAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNlNWU3ZWI7XHJcbiAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2U1ZTdlYjtcclxuICAgICAgYm9yZGVyLXRvcDogbm9uZTtcclxuICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcclxuICAgIFwiXHJcbiAgPlxyXG4gICAgQGlmKGlzTG9hZGluZ1BkZigpKSB7XHJcbiAgICA8cC1wcm9ncmVzc0JhciBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiIFtzdHlsZV09XCJ7IGhlaWdodDogJzNweCcgfVwiIC8+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXZcclxuICAgIGlkPVwia3YtZWRpdG9yXCJcclxuICAgIGNsYXNzPVwib3ZlcmZsb3ctYXV0byB3LWZ1bGwgZmxleC0xIHNjcm9sbHN0eWxlXCJcclxuICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgJ2Vycm9yLWJvcmRlcic6IGhhc0NvbnRyb2xFcnJvcigpLFxyXG4gICAgICAncG9pbnRlci1ldmVudHMtbm9uZSBvcGFjaXR5LTYwJzogaXNMb2FkaW5nUGRmKClcclxuICAgIH1cIlxyXG4gICAgc3R5bGU9XCJib3JkZXItdG9wOiBub25lXCJcclxuICA+PC9kaXY+XHJcbjwvZGl2PlxyXG48a3YtZXJyb3IgW2hhc0Vycm9yXT1cImhhc0NvbnRyb2xFcnJvcigpXCI+e3sgZXJyb01lc3NhZ2UoKSB9fTwva3YtZXJyb3I+XHJcblxyXG48IS0tIDxsaW5rIGhyZWY9XCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL3F1aWxsQDIuMC4yL2Rpc3QvcXVpbGwuc25vdy5jc3NcIiByZWw9XCJzdHlsZXNoZWV0XCIgLz4gLS0+XHJcbjxsaW5rIGhyZWY9XCJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9Um9ib3RvXCIgcmVsPVwic3R5bGVzaGVldFwiIC8+XHJcbjxzY3JpcHQgc3JjPVwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9xdWlsbEAyLjAuMi9kaXN0L3F1aWxsLmpzXCI+PC9zY3JpcHQ+XHJcbjxzY3JpcHQgc3JjPVwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9rYXRleEAwLjE2LjkvZGlzdC9rYXRleC5taW4uanNcIj48L3NjcmlwdD5cclxuXHJcbjxsaW5rXHJcbiAgcmVsPVwic3R5bGVzaGVldFwiXHJcbiAgaHJlZj1cImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vcXVpbGxAMi4wLjIvZGlzdC9xdWlsbC5idWJibGUuY3NzXCJcclxuLz5cclxuPGxpbmtcclxuICByZWw9XCJzdHlsZXNoZWV0XCJcclxuICBocmVmPVwiaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvaGlnaGxpZ2h0LmpzLzExLjkuMC9zdHlsZXMvYXRvbS1vbmUtZGFyay5taW4uY3NzXCJcclxuLz5cclxuPGxpbmtcclxuICByZWw9XCJzdHlsZXNoZWV0XCJcclxuICBocmVmPVwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9rYXRleEAwLjE2LjkvZGlzdC9rYXRleC5taW4uY3NzXCJcclxuLz5cclxuXHJcbjxwLW92ZXJsYXlQYW5lbCAjb3Agc3R5bGVDbGFzcz1cIm92ZXJmbG93LWhpZGRlblwiPlxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwiZ3JpZCBtLTAgZ2FwLTIgcC0yIG1heC13LTIwcmVtIG92ZXJmbG93LXktYXV0byBzY3JvbGxzdHlsZVwiXHJcbiAgICBzdHlsZT1cIm1heC1oZWlnaHQ6IDE1cmVtXCJcclxuICA+XHJcbiAgICBAZm9yKGl0ZW0gb2YgcmVsYXRvcmlvcygpOyB0cmFjayAkaW5kZXgpIHtcclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJjb2wtMTIgY3Vyc29yLXBvaW50ZXIgaG92ZXI6YmctZ3JheS0xMDAgdHJhbnNpdGlvbi1jb2xvcnMgdHJhbnNpdGlvbi1kdXJhdGlvbi0yMDAgYm9yZGVyLXJvdW5kLWxnIHNoYWRvdy0yIGZsZXggZmxleC1jb2x1bW4gZ2FwLTJcIlxyXG4gICAgICBzdHlsZT1cIm1heC1oZWlnaHQ6IDVyZW1cIlxyXG4gICAgICAoY2xpY2spPVwic2V0UmVsYXRvcmlvKGl0ZW0pXCJcclxuICAgID5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIganVzdGlmeS1jb250ZW50LWJldHdlZW5cIlxyXG4gICAgICA+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHctZnVsbFwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XHJcblxyXG4gICAgICAgIDxrdi10YWdzXHJcbiAgICAgICAgICBjbGFzcz1cInRyYW5zaXRpb24tb3BhY2l0eSB0cmFuc2l0aW9uLWR1cmF0aW9uLTMwMCB7e1xyXG4gICAgICAgICAgICBpdGVtPy5pZCA9PSBpZFJlbGF0b3Jpb1NlbGVjdGVkKCkgPyAnb3BhY2l0eS0xMDAnIDogJ29wYWNpdHktMCdcclxuICAgICAgICAgIH19XCJcclxuICAgICAgICAgIFt0YWdzXT1cIlt7IGxhYmVsOiAnU2VsZWNpb25hZG8nLCBzZXZlcml0eTogJ3ByaW1hcnknIH1dXCJcclxuICAgICAgICA+PC9rdi10YWdzPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXhzIHRleHQtZ3JheS01MDBcIj57eyBpdGVtLmRlc2NyaWNhbyB9fTwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG48L3Atb3ZlcmxheVBhbmVsPlxyXG5cclxuPGRpdiBjbGFzcz1cImt2LWVkaXRvci1jb250YWluZXIgZmxleCBmbGV4LWNvbHVtbiBvdmVyZmxvdy1oaWRkZW4gcmVsYXRpdmVcIj5cclxuICA8ZGl2XHJcbiAgICAjbWVudGlvbkFuY2hvclxyXG4gICAgc3R5bGU9XCJwb3NpdGlvbjogZml4ZWQ7IHdpZHRoOiAxcHg7IGhlaWdodDogMXB4OyBvcGFjaXR5OiAwXCJcclxuICA+PC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPHAtb3ZlcmxheVBhbmVsXHJcbiAgI29wVmFyaWFibGVzXHJcbiAgW2FwcGVuZFRvXT1cIidib2R5J1wiXHJcbiAgKG9uSGlkZSk9XCJjbG9zZVZhcmlhYmxlc1BhbmVsKClcIlxyXG4+XHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIGdhcC0xIHAtMSBvdmVyZmxvdy15LWF1dG8gc2Nyb2xsLXZpcnR1YWwgYm9yZGVyLXJvdW5kLWxnXCJcclxuICAgIHN0eWxlPVwibWF4LWhlaWdodDogMjUwcHg7IG1pbi13aWR0aDogMjUwcHg7IGJhY2tncm91bmQtY29sb3I6ICMzMzMzMzNcIlxyXG4gID5cclxuICAgIEBmb3IodmFyaWFibGUgb2YgZmlsdGVyZWRWYXJpYWJsZXMoKTsgdHJhY2sgdmFyaWFibGUuaWQpIHtcclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJwLTIgY3Vyc29yLXBvaW50ZXIgdHJhbnNpdGlvbi1jb2xvcnMgdHJhbnNpdGlvbi1kdXJhdGlvbi0yMDAgYm9yZGVyLXJvdW5kLWxnIHRleHQtc20gdGV4dC13aGl0ZSBvcHRpb24tZHJvcGRvd25cIlxyXG4gICAgICAoY2xpY2spPVwic2VsZWN0VmFyaWFibGVGcm9tUGFuZWwodmFyaWFibGUpXCJcclxuICAgID5cclxuICAgICAge3sgdmFyaWFibGUuZGVzY3JpY2FvIH19XHJcbiAgICA8L2Rpdj5cclxuICAgIH0gQGVtcHR5IHtcclxuICAgIDxkaXYgY2xhc3M9XCJwLTIgdGV4dC1zbSB0ZXh0LWdyYXktNTAwXCI+TmVuaHVtYSB2YXJpw6F2ZWwgZW5jb250cmFkYS48L2Rpdj5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuPC9wLW92ZXJsYXlQYW5lbD5cclxuIl19
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './types/kv-editor.types';
|
|
2
|
+
export * from './services/kv-editor-quill.service';
|
|
3
|
+
export * from './services/kv-editor-relatorio.service';
|
|
4
|
+
export * from './services/kv-editor-mention.service';
|
|
5
|
+
export * from './services/kv-editor-pdf.service';
|
|
6
|
+
export * from './config/kv-editor.config';
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtaW5wdXRzL2t2LWVkaXRvci9rdi1lZGl0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsMkJBQTJCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3R5cGVzL2t2LWVkaXRvci50eXBlcyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMva3YtZWRpdG9yLXF1aWxsLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL2t2LWVkaXRvci1yZWxhdG9yaW8uc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMva3YtZWRpdG9yLW1lbnRpb24uc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMva3YtZWRpdG9yLXBkZi5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9jb25maWcva3YtZWRpdG9yLmNvbmZpZyc7XHJcbiJdfQ==
|