brainloper-ui 14.1.13 → 14.1.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. package/esm2020/public_api.mjs +2 -1
  2. package/esm2020/src/app/modules/brainloper-ui/components/report/template-fuel/template-fuel.component.mjs +4 -35
  3. package/esm2020/src/app/modules/brainloper-ui/components/report/template-ot/template-ot.component.mjs +4 -68
  4. package/esm2020/src/app/modules/interfaces/report/template-pdf-base.mjs +1 -1
  5. package/esm2020/src/app/modules/interfaces/report/template-pdf-purchase-order.mjs +2 -0
  6. package/esm2020/src/app/modules/services/fuel-order-pdf.service.mjs +31 -213
  7. package/esm2020/src/app/modules/services/functions.service.mjs +22 -1
  8. package/esm2020/src/app/modules/services/generate-pdf.service.mjs +25 -45
  9. package/esm2020/src/app/modules/services/purchase-order-pdf.service.mjs +173 -0
  10. package/esm2020/src/app/modules/services/work-order-pdf.service.mjs +56 -77
  11. package/fesm2015/brainloper-ui.mjs +298 -433
  12. package/fesm2015/brainloper-ui.mjs.map +1 -1
  13. package/fesm2020/brainloper-ui.mjs +303 -433
  14. package/fesm2020/brainloper-ui.mjs.map +1 -1
  15. package/package.json +1 -1
  16. package/public_api.d.ts +1 -0
  17. package/src/app/modules/brainloper-ui/components/report/template-fuel/template-fuel.component.d.ts +0 -2
  18. package/src/app/modules/brainloper-ui/components/report/template-ot/template-ot.component.d.ts +0 -2
  19. package/src/app/modules/interfaces/report/template-pdf-base.d.ts +1 -0
  20. package/src/app/modules/interfaces/report/template-pdf-purchase-order.d.ts +18 -0
  21. package/src/app/modules/services/fuel-order-pdf.service.d.ts +5 -39
  22. package/src/app/modules/services/functions.service.d.ts +2 -0
  23. package/src/app/modules/services/generate-pdf.service.d.ts +7 -6
  24. package/src/app/modules/services/purchase-order-pdf.service.d.ts +21 -0
  25. package/src/app/modules/services/work-order-pdf.service.d.ts +14 -41
@@ -2,148 +2,29 @@ import { Injectable } from '@angular/core';
2
2
  import { jsPDF } from 'jspdf';
3
3
  import 'jspdf-autotable';
4
4
  import * as i0 from "@angular/core";
5
+ // export interface TemplatePdfFo {
6
+ // name: string;
7
+ // nit: string;
8
+ // address: string;
9
+ // telephone: string;
10
+ // mail: string;
11
+ // image?: string;
12
+ // code: string;
13
+ // date: string;
14
+ // responsible: string;
15
+ // id_place: string;
16
+ // approved_by: string;
17
+ // detalle: string;
18
+ // description: string;
19
+ // consecutive: string;
20
+ // namePlace: string;
21
+ // addressPlace: string;
22
+ // area: string;
23
+ // odometer: string;
24
+ // invoiceReference?: string;
25
+ // }
5
26
  export class FuelOrderPdfService {
6
27
  constructor() { }
7
- generateFuelOrderPDF(data) {
8
- //return this.FuelOrderPdfService.generateFuelOrderPDF(data);
9
- return new Promise((resolve, reject) => {
10
- try {
11
- const doc = new jsPDF('p', 'pt', 'letter'); // Tamaño carta fijo
12
- const pageWidth = doc.internal.pageSize.getWidth();
13
- const pageHeight = doc.internal.pageSize.getHeight();
14
- const margin = 40;
15
- let currentY = margin;
16
- // Configurar fuentes
17
- doc.setFont('helvetica', 'bold');
18
- doc.setFontSize(16);
19
- // Función auxiliar para añadir texto centrado
20
- const addCenteredText = (text, y, fontSize = 12, style = 'normal') => {
21
- doc.setFont('helvetica', style);
22
- doc.setFontSize(fontSize);
23
- const textWidth = doc.getTextWidth(text);
24
- doc.text(text, (pageWidth - textWidth) / 2, y);
25
- return y + fontSize + 5;
26
- };
27
- // Función auxiliar para añadir texto con ajuste de línea
28
- const addWrappedText = (text, x, y, maxWidth, fontSize = 10, style = 'normal') => {
29
- doc.setFont('helvetica', style);
30
- doc.setFontSize(fontSize);
31
- const lines = doc.splitTextToSize(text, maxWidth);
32
- doc.text(lines, x, y);
33
- return y + (lines.length * fontSize) + 5;
34
- };
35
- // Función para dibujar rectángulo con borde
36
- const drawRect = (x, y, width, height) => {
37
- doc.rect(x, y, width, height);
38
- };
39
- // ENCABEZADO
40
- currentY = addCenteredText(data.name.toUpperCase(), currentY, 16, 'bold');
41
- currentY = addCenteredText(`NIT: ${data.nit}`, currentY, 12, 'bold');
42
- currentY = addCenteredText(data.address, currentY, 10);
43
- currentY = addCenteredText(`TEL: ${data.telephone}`, currentY, 10);
44
- currentY += 20;
45
- // Título del documento
46
- currentY = addCenteredText('ORDEN DE COMBUSTIBLE', currentY, 18, 'bold');
47
- currentY = addCenteredText(`N°: ${data.consecutive}`, currentY, 14, 'bold');
48
- currentY += 20;
49
- // Información principal en tabla
50
- const tableData = [
51
- ['Área:', data.area, 'Código:', data.code, 'Fecha:', data.date],
52
- ['Operario:', data.responsible, 'Odómetro:', data.odometer, '', '']
53
- ];
54
- doc.autoTable({
55
- startY: currentY,
56
- head: [],
57
- body: tableData,
58
- theme: 'grid',
59
- styles: {
60
- fontSize: 10,
61
- cellPadding: 8,
62
- lineColor: [0, 0, 0],
63
- lineWidth: 0.5
64
- },
65
- columnStyles: {
66
- 0: { fontStyle: 'bold', cellWidth: 60 },
67
- 1: { cellWidth: 120 },
68
- 2: { fontStyle: 'bold', cellWidth: 60 },
69
- 3: { cellWidth: 80 },
70
- 4: { fontStyle: 'bold', cellWidth: 60 },
71
- 5: { cellWidth: 80 }
72
- },
73
- margin: { left: margin, right: margin }
74
- });
75
- currentY = doc.lastAutoTable.finalY + 20;
76
- // Datos del proveedor
77
- currentY = addCenteredText('DATOS DEL PROVEEDOR', currentY, 14, 'bold');
78
- currentY += 10;
79
- const providerData = [
80
- ['Lugar:', data.namePlace, 'Dirección:', data.addressPlace]
81
- ];
82
- doc.autoTable({
83
- startY: currentY,
84
- head: [],
85
- body: providerData,
86
- theme: 'grid',
87
- styles: {
88
- fontSize: 10,
89
- cellPadding: 8,
90
- lineColor: [0, 0, 0],
91
- lineWidth: 0.5
92
- },
93
- columnStyles: {
94
- 0: { fontStyle: 'bold', cellWidth: 80 },
95
- 1: { cellWidth: 150 },
96
- 2: { fontStyle: 'bold', cellWidth: 80 },
97
- 3: { cellWidth: 150 }
98
- },
99
- margin: { left: margin, right: margin }
100
- });
101
- currentY = doc.lastAutoTable.finalY + 20;
102
- // Detalles del servicio
103
- currentY = addCenteredText('DETALLES DEL SERVICIO', currentY, 14, 'bold');
104
- currentY += 15;
105
- // Contenedor para detalles
106
- const detailsY = currentY;
107
- const detailsHeight = 80;
108
- drawRect(margin, detailsY, pageWidth - (margin * 2), detailsHeight);
109
- currentY += 15;
110
- currentY = addWrappedText(data.detalle, margin + 10, currentY, pageWidth - (margin * 2) - 20, 10);
111
- currentY = addWrappedText(`Descripción: ${data.description}`, margin + 10, currentY, pageWidth - (margin * 2) - 20, 10);
112
- currentY = detailsY + detailsHeight + 20;
113
- // Autorización
114
- const authData = [
115
- ['AUTORIZADA POR:', data.approved_by]
116
- ];
117
- doc.autoTable({
118
- startY: currentY,
119
- head: [],
120
- body: authData,
121
- theme: 'grid',
122
- styles: {
123
- fontSize: 12,
124
- cellPadding: 10,
125
- lineColor: [0, 0, 0],
126
- lineWidth: 0.5
127
- },
128
- columnStyles: {
129
- 0: { fontStyle: 'bold', cellWidth: 150 },
130
- 1: { cellWidth: 310 }
131
- },
132
- margin: { left: margin, right: margin }
133
- });
134
- currentY = doc.lastAutoTable.finalY + 30;
135
- // Pie de página
136
- currentY = addCenteredText('Favor adjuntar la orden de venta o factura', currentY, 12, 'bold');
137
- currentY = addCenteredText(data.mail, currentY, 10);
138
- // Generar el PDF
139
- doc.output('dataurlnewwindow', { filename: 'orden_combustible.pdf' });
140
- resolve();
141
- }
142
- catch (error) {
143
- reject(error);
144
- }
145
- });
146
- }
147
28
  generateFuelOrderProfesionalPDF(data, options) {
148
29
  return new Promise((resolve, reject) => {
149
30
  try {
@@ -193,6 +74,15 @@ export class FuelOrderPdfService {
193
74
  }
194
75
  });
195
76
  }
77
+ /**
78
+ * Genera PDF optimizado para impresión
79
+ */
80
+ generateForPrint(data) {
81
+ return this.generateFuelOrderProfesionalPDF(data, {
82
+ format: 'letter',
83
+ download: false
84
+ });
85
+ }
196
86
  addHeader(doc, data, margin, y, pageWidth, color) {
197
87
  // Fondo del encabezado
198
88
  doc.setFillColor(color[0], color[1], color[2]);
@@ -403,43 +293,6 @@ export class FuelOrderPdfService {
403
293
  }
404
294
  return finalBoxY + boxHeight;
405
295
  }
406
- /**
407
- * Método auxiliar para manejar texto largo que puede necesitar múltiples páginas
408
- */
409
- addLongText(doc, text, x, y, maxWidth, fontSize = 11) {
410
- if (!text || !text.trim())
411
- return y;
412
- doc.setFontSize(fontSize);
413
- const lines = doc.splitTextToSize(text.trim(), maxWidth);
414
- const lineHeight = fontSize + 3;
415
- const pageHeight = doc.internal.pageSize.getHeight();
416
- const margin = 40;
417
- let currentY = y;
418
- let lineIndex = 0;
419
- while (lineIndex < lines.length) {
420
- // Verificar si necesitamos una nueva página
421
- if (currentY + lineHeight > pageHeight - margin) {
422
- doc.addPage();
423
- currentY = margin;
424
- }
425
- // Calcular cuántas líneas caben en la página actual
426
- const remainingSpace = pageHeight - currentY - margin;
427
- const maxLinesInPage = Math.floor(remainingSpace / lineHeight);
428
- if (maxLinesInPage > 0) {
429
- const linesToShow = Math.min(maxLinesInPage, lines.length - lineIndex);
430
- const pageLines = lines.slice(lineIndex, lineIndex + linesToShow);
431
- doc.text(pageLines, x, currentY);
432
- currentY += pageLines.length * lineHeight;
433
- lineIndex += linesToShow;
434
- }
435
- else {
436
- // Si no cabe ni una línea, ir a nueva página
437
- doc.addPage();
438
- currentY = margin;
439
- }
440
- }
441
- return currentY;
442
- }
443
296
  addAuthorization(doc, data, y, margin, pageWidth) {
444
297
  const tableData = [
445
298
  [
@@ -481,41 +334,6 @@ export class FuelOrderPdfService {
481
334
  // Resetear color
482
335
  doc.setTextColor(0, 0, 0);
483
336
  }
484
- /**
485
- * Genera PDF optimizado para impresión
486
- */
487
- generateForPrint(data) {
488
- return this.generateFuelOrderProfesionalPDF(data, {
489
- format: 'letter',
490
- download: false
491
- });
492
- }
493
- /**
494
- * Genera PDF y lo devuelve como Blob para envío por email
495
- */
496
- generateAsBlob(data) {
497
- return new Promise((resolve, reject) => {
498
- this.generateFuelOrderProfesionalPDF(data, { download: false })
499
- .then(doc => {
500
- const pdfBlob = doc.output('blob');
501
- resolve(pdfBlob);
502
- })
503
- .catch(reject);
504
- });
505
- }
506
- /**
507
- * Genera PDF y lo devuelve como base64
508
- */
509
- generateAsBase64(data) {
510
- return new Promise((resolve, reject) => {
511
- this.generateFuelOrderProfesionalPDF(data, { download: false })
512
- .then(doc => {
513
- const base64 = doc.output('datauristring');
514
- resolve(base64);
515
- })
516
- .catch(reject);
517
- });
518
- }
519
337
  }
520
338
  FuelOrderPdfService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FuelOrderPdfService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
521
339
  FuelOrderPdfService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FuelOrderPdfService, providedIn: 'root' });
@@ -525,4 +343,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
525
343
  providedIn: 'root'
526
344
  }]
527
345
  }], ctorParameters: function () { return []; } });
528
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVlbC1vcmRlci1wZGYuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zZXJ2aWNlcy9mdWVsLW9yZGVyLXBkZi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM5QixPQUFPLGlCQUFpQixDQUFDOztBQTRCekIsTUFBTSxPQUFPLG1CQUFtQjtJQUU5QixnQkFBZ0IsQ0FBQztJQUVmLG9CQUFvQixDQUFDLElBQW1CO1FBQ3RDLDZEQUE2RDtRQUM3RCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLElBQUk7Z0JBQ0YsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLG9CQUFvQjtnQkFDaEUsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ25ELE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNyRCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7Z0JBQ2xCLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQztnQkFFdEIscUJBQXFCO2dCQUNyQixHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDakMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFFcEIsOENBQThDO2dCQUM5QyxNQUFNLGVBQWUsR0FBRyxDQUFDLElBQVksRUFBRSxDQUFTLEVBQUUsV0FBbUIsRUFBRSxFQUFFLFFBQTJCLFFBQVEsRUFB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QUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUM7aUJBQzVELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDVixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUMzQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEIsQ0FBQyxDQUFDO2lCQUNELEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7O2dIQTdsQlUsbUJBQW1CO29IQUFuQixtQkFBbUIsY0FGbEIsTUFBTTsyRkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsganNQREYgfSBmcm9tICdqc3BkZic7XG5pbXBvcnQgJ2pzcGRmLWF1dG90YWJsZSc7XG5pbXBvcnQgeyBUZW1wbGF0ZVBkZkZvIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQvdGVtcGxhdGUtcGZkLWZvJztcblxuZXhwb3J0IGludGVyZmFjZSBGdWVsT3JkZXJEYXRhIHtcbiAgbmFtZTogc3RyaW5nO1xuICBuaXQ6IHN0cmluZztcbiAgYWRkcmVzczogc3RyaW5nO1xuICB0ZWxlcGhvbmU6IHN0cmluZztcbiAgbWFpbDogc3RyaW5nO1xuICBpbWFnZT86IHN0cmluZztcbiAgY29kZTogc3RyaW5nO1xuICBkYXRlOiBzdHJpbmc7XG4gIHJlc3BvbnNpYmxlOiBzdHJpbmc7XG4gIGlkX3BsYWNlOiBzdHJpbmc7XG4gIGFwcHJvdmVkX2J5OiBzdHJpbmc7XG4gIGRldGFsbGU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgY29uc2VjdXRpdmU6IHN0cmluZztcbiAgbmFtZVBsYWNlOiBzdHJpbmc7XG4gIGFkZHJlc3NQbGFjZTogc3RyaW5nO1xuICBhcmVhOiBzdHJpbmc7XG4gIG9kb21ldGVyOiBzdHJpbmc7XG4gIGludm9pY2VSZWZlcmVuY2U/OiBzdHJpbmc7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEZ1ZWxPcmRlclBkZlNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgICBnZW5lcmF0ZUZ1ZWxPcmRlclBERihkYXRhOiBUZW1wbGF0ZVBkZkZvKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAvL3JldHVybiB0aGlzLkZ1ZWxPcmRlclBkZlNlcnZpY2UuZ2VuZXJhdGVGdWVsT3JkZXJQREYoZGF0YSk7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGRvYyA9IG5ldyBqc1BERigncCcsICdwdCcsICdsZXR0ZXInKTsgLy8gVGFtYcOxbyBjYXJ0YSBmaWpvXG4gICAgICAgICAgY29uc3QgcGFnZVdpZHRoID0gZG9jLmludGVybmFsLnBhZ2VTaXplLmdldFdpZHRoKCk7XG4gICAgICAgICAgY29uc3QgcGFnZUhlaWdodCA9IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5nZXRIZWlnaHQoKTtcbiAgICAgICAgICBjb25zdCBtYXJnaW4gPSA0MDtcbiAgICAgICAgICBsZXQgY3VycmVudFkgPSBtYXJnaW47XG4gIFxuICAgICAgICAgIC8vIENvbmZpZ3VyYXIgZnVlbnRlc1xuICAgICAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xuICAgICAgICAgIGRvYy5zZXRGb250U2l6ZSgxNik7XG4gIFxuICAgICAgICAgIC8vIEZ1bmNpw7NuIGF1eGlsaWFyIHBhcmEgYcOxYWRpciB0ZXh0byBjZW50cmFkb1xuICAgICAgICAgIGNvbnN0IGFkZENlbnRlcmVkVGV4dCA9ICh0ZXh0OiBzdHJpbmcsIHk6IG51bWJlciwgZm9udFNpemU6IG51bWJlciA9IDEyLCBzdHlsZTogJ25vcm1hbCcgfCAnYm9sZCcgPSAnbm9ybWFsJykgPT4ge1xuICAgICAgICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsIHN0eWxlKTtcbiAgICAgICAgICAgIGRvYy5zZXRGb250U2l6ZShmb250U2l6ZSk7XG4gICAgICAgICAgICBjb25zdCB0ZXh0V2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKHRleHQpO1xuICAgICAgICAgICAgZG9jLnRleHQodGV4dCwgKHBhZ2VXaWR0aCAtIHRleHRXaWR0aCkgLyAyLCB5KTtcbiAgICAgICAgICAgIHJldHVybiB5ICsgZm9udFNpemUgKyA1O1xuICAgICAgICAgIH07XG4gIFxuICAgICAgICAgIC8vIEZ1bmNpw7NuIGF1eGlsaWFyIHBhcmEgYcOxYWRpciB0ZXh0byBjb24gYWp1c3RlIGRlIGzDrW5lYVxuICAgICAgICAgIGNvbnN0IGFkZFdyYXBwZWRUZXh0ID0gKHRleHQ6IHN0cmluZywgeDogbnVtYmVyLCB5OiBudW1iZXIsIG1heFdpZHRoOiBudW1iZXIsIGZvbnRTaXplOiBudW1iZXIgPSAxMCwgc3R5bGU6ICdub3JtYWwnIHwgJ2JvbGQnID0gJ25vcm1hbCcpID0+IHtcbiAgICAgICAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCBzdHlsZSk7XG4gICAgICAgICAgICBkb2Muc2V0Rm9udFNpemUoZm9udFNpemUpO1xuICAgICAgICAgICAgY29uc3QgbGluZXMgPSBkb2Muc3BsaXRUZXh0VG9TaXplKHRleHQsIG1heFdpZHRoKTtcbiAgICAgICAgICAgIGRvYy50ZXh0KGxpbmVzLCB4LCB5KTtcbiAgICAgICAgICAgIHJldHVybiB5ICsgKGxpbmVzLmxlbmd0aCAqIGZvbnRTaXplKSArIDU7XG4gICAgICAgICAgfTtcbiAgXG4gICAgICAgICAgLy8gRnVuY2nDs24gcGFyYSBkaWJ1amFyIHJlY3TDoW5ndWxvIGNvbiBib3JkZVxuICAgICAgICAgIGNvbnN0IGRyYXdSZWN0ID0gKHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgZG9jLnJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgfTtcbiAgXG4gICAgICAgICAgLy8gRU5DQUJFWkFET1xuICAgICAgICAgIGN1cnJlbnRZID0gYWRkQ2VudGVyZWRUZXh0KGRhdGEubmFtZS50b1VwcGVyQ2FzZSgpLCBjdXJyZW50WSwgMTYsICdib2xkJyk7XG4gICAgICAgICAgY3VycmVudFkgPSBhZGRDZW50ZXJlZFRleHQoYE5JVDogJHtkYXRhLm5pdH1gLCBjdXJyZW50WSwgMTIsICdib2xkJyk7XG4gICAgICAgICAgY3VycmVudFkgPSBhZGRDZW50ZXJlZFRleHQoZGF0YS5hZGRyZXNzLCBjdXJyZW50WSwgMTApO1xuICAgICAgICAgIGN1cnJlbnRZID0gYWRkQ2VudGVyZWRUZXh0KGBURUw6ICR7ZGF0YS50ZWxlcGhvbmV9YCwgY3VycmVudFksIDEwKTtcbiAgICAgICAgICBjdXJyZW50WSArPSAyMDtcbiAgXG4gICAgICAgICAgLy8gVMOtdHVsbyBkZWwgZG9jdW1lbnRvXG4gICAgICAgICAgY3VycmVudFkgPSBhZGRDZW50ZXJlZFRleHQoJ09SREVOIERFIENPTUJVU1RJQkxFJywgY3VycmVudFksIDE4LCAnYm9sZCcpO1xuICAgICAgICAgIGN1cnJlbnRZID0gYWRkQ2VudGVyZWRUZXh0KGBOwrA6ICR7ZGF0YS5jb25zZWN1dGl2ZX1gLCBjdXJyZW50WSwgMTQsICdib2xkJyk7XG4gICAgICAgICAgY3VycmVudFkgKz0gMjA7XG4gIFxuICAgICAgICAgIC8vIEluZm9ybWFjacOzbiBwcmluY2lwYWwgZW4gdGFibGFcbiAgICAgICAgICBjb25zdCB0YWJsZURhdGEgPSBbXG4gICAgICAgICAgICBbJ8OBcmVhOicsIGRhdGEuYXJlYSwgJ0PDs2RpZ286JywgZGF0YS5jb2RlLCAnRmVjaGE6JywgZGF0YS5kYXRlXSxcbiAgICAgICAgICAgIFsnT3BlcmFyaW86JywgZGF0YS5yZXNwb25zaWJsZSwgJ09kw7NtZXRybzonLCBkYXRhLm9kb21ldGVyLCAnJywgJyddXG4gICAgICAgICAgXTtcbiAgXG4gICAgICAgICAgKGRvYyBhcyBhbnkpLmF1dG9UYWJsZSh7XG4gICAgICAgICAgICBzdGFydFk6IGN1cnJlbnRZLFxuICAgICAgICAgICAgaGVhZDogW10sXG4gICAgICAgICAgICBib2R5OiB0YWJsZURhdGEsXG4gICAgICAgICAgICB0aGVtZTogJ2dyaWQnLFxuICAgICAgICAgICAgc3R5bGVzOiB7XG4gICAgICAgICAgICAgIGZvbnRTaXplOiAxMCxcbiAgICAgICAgICAgICAgY2VsbFBhZGRpbmc6IDgsXG4gICAgICAgICAgICAgIGxpbmVDb2xvcjogWzAsIDAsIDBdLFxuICAgICAgICAgICAgICBsaW5lV2lkdGg6IDAuNVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbHVtblN0eWxlczoge1xuICAgICAgICAgICAgICAwOiB7IGZvbnRTdHlsZTogJ2JvbGQnLCBjZWxsV2lkdGg6IDYwIH0sXG4gICAgICAgICAgICAgIDE6IHsgY2VsbFdpZHRoOiAxMjAgfSxcbiAgICAgICAgICAgICAgMjogeyBmb250U3R5bGU6ICdib2xkJywgY2VsbFdpZHRoOiA2MCB9LFxuICAgICAgICAgICAgICAzOiB7IGNlbGxXaWR0aDogODAgfSxcbiAgICAgICAgICAgICAgNDogeyBmb250U3R5bGU6ICdib2xkJywgY2VsbFdpZHRoOiA2MCB9LFxuICAgICAgICAgICAgICA1OiB7IGNlbGxXaWR0aDogODAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1hcmdpbjogeyBsZWZ0OiBtYXJnaW4sIHJpZ2h0OiBtYXJnaW4gfVxuICAgICAgICAgIH0pO1xuICBcbiAgICAgICAgICBjdXJyZW50WSA9IChkb2MgYXMgYW55KS5sYXN0QXV0b1RhYmxlLmZpbmFsWSArIDIwO1xuICBcbiAgICAgICAgICAvLyBEYXRvcyBkZWwgcHJvdmVlZG9yXG4gICAgICAgICAgY3VycmVudFkgPSBhZGRDZW50ZXJlZFRleHQoJ0RBVE9TIERFTCBQUk9WRUVET1InLCBjdXJyZW50WSwgMTQsICdib2xkJyk7XG4gICAgICAgICAgY3VycmVudFkgKz0gMTA7XG4gIFxuICAgICAgICAgIGNvbnN0IHByb3ZpZGVyRGF0YSA9IFtcbiAgICAgICAgICAgIFsnTHVnYXI6JywgZGF0YS5uYW1lUGxhY2UsICdEaXJlY2Npw7NuOicsIGRhdGEuYWRkcmVzc1BsYWNlXVxuICAgICAgICAgIF07XG4gIFxuICAgICAgICAgIChkb2MgYXMgYW55KS5hdXRvVGFibGUoe1xuICAgICAgICAgICAgc3RhcnRZOiBjdXJyZW50WSxcbiAgICAgICAgICAgIGhlYWQ6IFtdLFxuICAgICAgICAgICAgYm9keTogcHJvdmlkZXJEYXRhLFxuICAgICAgICAgICAgdGhlbWU6ICdncmlkJyxcbiAgICAgICAgICAgIHN0eWxlczoge1xuICAgICAgICAgICAgICBmb250U2l6ZTogMTAsXG4gICAgICAgICAgICAgIGNlbGxQYWRkaW5nOiA4LFxuICAgICAgICAgICAgICBsaW5lQ29sb3I6IFswLCAwLCAwXSxcbiAgICAgICAgICAgICAgbGluZVdpZHRoOiAwLjVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb2x1bW5TdHlsZXM6IHtcbiAgICAgICAgICAgICAgMDogeyBmb250U3R5bGU6ICdib2xkJywgY2VsbFdpZHRoOiA4MCB9LFxuICAgICAgICAgICAgICAxOiB7IGNlbGxXaWR0aDogMTUwIH0sXG4gICAgICAgICAgICAgIDI6IHsgZm9udFN0eWxlOiAnYm9sZCcsIGNlbGxXaWR0aDogODAgfSxcbiAgICAgICAgICAgICAgMzogeyBjZWxsV2lkdGg6IDE1MCB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWFyZ2luOiB7IGxlZnQ6IG1hcmdpbiwgcmlnaHQ6IG1hcmdpbiB9XG4gICAgICAgICAgfSk7XG4gIFxuICAgICAgICAgIGN1cnJlbnRZID0gKGRvYyBhcyBhbnkpLmxhc3RBdXRvVGFibGUuZmluYWxZICsgMjA7XG4gIFxuICAgICAgICAgIC8vIERldGFsbGVzIGRlbCBzZXJ2aWNpb1xuICAgICAgICAgIGN1cnJlbnRZID0gYWRkQ2VudGVyZWRUZXh0KCdERVRBTExFUyBERUwgU0VSVklDSU8nLCBjdXJyZW50WSwgMTQsICdib2xkJyk7XG4gICAgICAgICAgY3VycmVudFkgKz0gMTU7XG4gIFxuICAgICAgICAgIC8vIENvbnRlbmVkb3IgcGFyYSBkZXRhbGxlc1xuICAgICAgICAgIGNvbnN0IGRldGFpbHNZID0gY3VycmVudFk7XG4gICAgICAgICAgY29uc3QgZGV0YWlsc0hlaWdodCA9IDgwO1xuICAgICAgICAgIGRyYXdSZWN0KG1hcmdpbiwgZGV0YWlsc1ksIHBhZ2VXaWR0aCAtIChtYXJnaW4gKiAyKSwgZGV0YWlsc0hlaWdodCk7XG4gIFxuICAgICAgICAgIGN1cnJlbnRZICs9IDE1O1xuICAgICAgICAgIGN1cnJlbnRZID0gYWRkV3JhcHBlZFRleHQoZGF0YS5kZXRhbGxlLCBtYXJnaW4gKyAxMCwgY3VycmVudFksIHBhZ2VXaWR0aCAtIChtYXJnaW4gKiAyKSAtIDIwLCAxMCk7XG4gICAgICAgICAgY3VycmVudFkgPSBhZGRXcmFwcGVkVGV4dChgRGVzY3JpcGNpw7NuOiAke2RhdGEuZGVzY3JpcHRpb259YCwgbWFyZ2luICsgMTAsIGN1cnJlbnRZLCBwYWdlV2lkdGggLSAobWFyZ2luICogMikgLSAyMCwgMTApO1xuICBcbiAgICAgICAgICBjdXJyZW50WSA9IGRldGFpbHNZICsgZGV0YWlsc0hlaWdodCArIDIwO1xuICBcbiAgICAgICAgICAvLyBBdXRvcml6YWNpw7NuXG4gICAgICAgICAgY29uc3QgYXV0aERhdGEgPSBbXG4gICAgICAgICAgICBbJ0FVVE9SSVpBREEgUE9SOicsIGRhdGEuYXBwcm92ZWRfYnldXG4gICAgICAgICAgXTtcbiAgXG4gICAgICAgICAgKGRvYyBhcyBhbnkpLmF1dG9UYWJsZSh7XG4gICAgICAgICAgICBzdGFydFk6IGN1cnJlbnRZLFxuICAgICAgICAgICAgaGVhZDogW10sXG4gICAgICAgICAgICBib2R5OiBhdXRoRGF0YSxcbiAgICAgICAgICAgIHRoZW1lOiAnZ3JpZCcsXG4gICAgICAgICAgICBzdHlsZXM6IHtcbiAgICAgICAgICAgICAgZm9udFNpemU6IDEyLFxuICAgICAgICAgICAgICBjZWxsUGFkZGluZzogMTAsXG4gICAgICAgICAgICAgIGxpbmVDb2xvcjogWzAsIDAsIDBdLFxuICAgICAgICAgICAgICBsaW5lV2lkdGg6IDAuNVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbHVtblN0eWxlczoge1xuICAgICAgICAgICAgICAwOiB7IGZvbnRTdHlsZTogJ2JvbGQnLCBjZWxsV2lkdGg6IDE1MCB9LFxuICAgICAgICAgICAgICAxOiB7IGNlbGxXaWR0aDogMzEwIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtYXJnaW46IHsgbGVmdDogbWFyZ2luLCByaWdodDogbWFyZ2luIH1cbiAgICAgICAgICB9KTtcbiAgXG4gICAgICAgICAgY3VycmVudFkgPSAoZG9jIGFzIGFueSkubGFzdEF1dG9UYWJsZS5maW5hbFkgKyAzMDtcbiAgXG4gICAgICAgICAgLy8gUGllIGRlIHDDoWdpbmFcbiAgICAgICAgICBjdXJyZW50WSA9IGFkZENlbnRlcmVkVGV4dCgnRmF2b3IgYWRqdW50YXIgbGEgb3JkZW4gZGUgdmVudGEgbyBmYWN0dXJhJywgY3VycmVudFksIDEyLCAnYm9sZCcpO1xuICAgICAgICAgIGN1cnJlbnRZID0gYWRkQ2VudGVyZWRUZXh0KGRhdGEubWFpbCwgY3VycmVudFksIDEwKTtcbiAgXG4gICAgICAgICAgLy8gR2VuZXJhciBlbCBQREZcbiAgICAgICAgICBkb2Mub3V0cHV0KCdkYXRhdXJsbmV3d2luZG93JywgeyBmaWxlbmFtZTogJ29yZGVuX2NvbWJ1c3RpYmxlLnBkZicgfSk7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgXG5cbiAgZ2VuZXJhdGVGdWVsT3JkZXJQcm9mZXNpb25hbFBERihkYXRhOiBGdWVsT3JkZXJEYXRhLCBvcHRpb25zPzoge1xuICAgIGZvcm1hdD86ICdsZXR0ZXInIHwgJ2E0JztcbiAgICBkb3dubG9hZD86IGJvb2xlYW47XG4gICAgZmlsZW5hbWU/OiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPGpzUERGPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSB7XG4gICAgICAgICAgZm9ybWF0OiAnbGV0dGVyJyxcbiAgICAgICAgICBkb3dubG9hZDogdHJ1ZSxcbiAgICAgICAgICBmaWxlbmFtZTogJ29yZGVuX2NvbWJ1c3RpYmxlLnBkZicsXG4gICAgICAgICAgLi4ub3B0aW9uc1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGRvYyA9IG5ldyBqc1BERigncCcsICdwdCcsIG9wdHMuZm9ybWF0KTtcbiAgICAgICAgY29uc3QgcGFnZVdpZHRoID0gZG9jLmludGVybmFsLnBhZ2VTaXplLmdldFdpZHRoKCk7XG4gICAgICAgIGNvbnN0IHBhZ2VIZWlnaHQgPSBkb2MuaW50ZXJuYWwucGFnZVNpemUuZ2V0SGVpZ2h0KCk7XG4gICAgICAgIGNvbnN0IG1hcmdpbiA9IDQwO1xuICAgICAgICBsZXQgY3VycmVudFkgPSBtYXJnaW47XG5cbiAgICAgICAgLy8gQ29sb3JlcyBjb3Jwb3JhdGl2b3NcbiAgICAgICAgY29uc3QgcHJpbWFyeUNvbG9yID0gWzQxLCAxMjgsIDE4NV07IC8vIEF6dWxcbiAgICAgICAgY29uc3Qgc2Vjb25kYXJ5Q29sb3IgPSBbNTIsIDczLCA5NF07IC8vIEdyaXMgb3NjdXJvXG4gICAgICAgIGNvbnN0IGFjY2VudENvbG9yID0gWzIzMCwgMTI2LCAzNF07IC8vIE5hcmFuamFcblxuICAgICAgICAvLyA9PT0gRU5DQUJFWkFETyBQUklOQ0lQQUwgPT09XG4gICAgICAgIHRoaXMuYWRkSGVhZGVyKGRvYywgZGF0YSwgbWFyZ2luLCBjdXJyZW50WSwgcGFnZVdpZHRoLCBwcmltYXJ5Q29sb3IpO1xuICAgICAgICBjdXJyZW50WSA9IDE0MDtcblxuICAgICAgICAvLyA9PT0gVMONVFVMTyBERUwgRE9DVU1FTlRPID09PVxuICAgICAgICBjdXJyZW50WSA9IHRoaXMuYWRkRG9jdW1lbnRUaXRsZShkb2MsIGRhdGEsIGN1cnJlbnRZLCBwYWdlV2lkdGgsIGFjY2VudENvbG9yKTtcbiAgICAgICAgY3VycmVudFkgKz0gMjU7XG5cbiAgICAgICAgLy8gPT09IElORk9STUFDScOTTiBQUklOQ0lQQUwgPT09XG4gICAgICAgIGN1cnJlbnRZID0gdGhpcy5hZGRNYWluSW5mbyhkb2MsIGRhdGEsIGN1cnJlbnRZLCBtYXJnaW4sIHBhZ2VXaWR0aCk7XG4gICAgICAgIGN1cnJlbnRZICs9IDIwO1xuXG4gICAgICAgIC8vID09PSBEQVRPUyBERUwgUFJPVkVFRE9SID09PVxuICAgICAgICBjdXJyZW50WSA9IHRoaXMuYWRkUHJvdmlkZXJJbmZvKGRvYywgZGF0YSwgY3VycmVudFksIG1hcmdpbiwgcGFnZVdpZHRoLCBzZWNvbmRhcnlDb2xvcik7XG4gICAgICAgIGN1cnJlbnRZICs9IDIwO1xuXG4gICAgICAgIC8vID09PSBERVRBTExFUyBERUwgU0VSVklDSU8gPT09XG4gICAgICAgIGN1cnJlbnRZID0gdGhpcy5hZGRTZXJ2aWNlRGV0YWlscyhkb2MsIGRhdGEsIGN1cnJlbnRZLCBtYXJnaW4sIHBhZ2VXaWR0aCwgc2Vjb25kYXJ5Q29sb3IpO1xuICAgICAgICBjdXJyZW50WSArPSAyMDtcblxuICAgICAgICAvLyA9PT0gQVVUT1JJWkFDScOTTiA9PT1cbiAgICAgICAgY3VycmVudFkgPSB0aGlzLmFkZEF1dGhvcml6YXRpb24oZG9jLCBkYXRhLCBjdXJyZW50WSwgbWFyZ2luLCBwYWdlV2lkdGgpO1xuICAgICAgICBjdXJyZW50WSArPSAzMDtcblxuICAgICAgICAvLyA9PT0gUElFIERFIFDDgUdJTkEgPT09XG4gICAgICAgIHRoaXMuYWRkRm9vdGVyKGRvYywgZGF0YSwgcGFnZUhlaWdodCAtIDgwLCBwYWdlV2lkdGgsIHByaW1hcnlDb2xvcik7XG5cbiAgICAgICAgLy8gPT09IEdFTkVSQVIvREVTQ0FSR0FSID09PVxuICAgICAgICBpZiAob3B0cy5kb3dubG9hZCkge1xuICAgICAgICAgIGRvYy5vdXRwdXQoJ2RhdGF1cmxuZXd3aW5kb3cnLCB7IGZpbGVuYW1lOiBvcHRzLmZpbGVuYW1lIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzb2x2ZShkb2MpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkSGVhZGVyKGRvYzoganNQREYsIGRhdGE6IEZ1ZWxPcmRlckRhdGEsIG1hcmdpbjogbnVtYmVyLCB5OiBudW1iZXIsIHBhZ2VXaWR0aDogbnVtYmVyLCBjb2xvcjogbnVtYmVyW10pOiB2b2lkIHtcbiAgICAvLyBGb25kbyBkZWwgZW5jYWJlemFkb1xuICAgIGRvYy5zZXRGaWxsQ29sb3IoY29sb3JbMF0sIGNvbG9yWzFdLCBjb2xvclsyXSk7XG4gICAgZG9jLnJlY3QobWFyZ2luLCB5LCBwYWdlV2lkdGggLSAobWFyZ2luICogMiksIDgwLCAnRicpO1xuXG4gICAgLy8gVGV4dG8gZGVsIGVuY2FiZXphZG8gZW4gYmxhbmNvXG4gICAgZG9jLnNldFRleHRDb2xvcigyNTUsIDI1NSwgMjU1KTtcbiAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcbiAgICBkb2Muc2V0Rm9udFNpemUoMTgpO1xuICAgIFxuICAgIGNvbnN0IGNvbXBhbnlOYW1lID0gZGF0YS5uYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgY29uc3QgbmFtZVdpZHRoID0gZG9jLmdldFRleHRXaWR0aChjb21wYW55TmFtZSk7XG4gICAgZG9jLnRleHQoY29tcGFueU5hbWUsIChwYWdlV2lkdGggLSBuYW1lV2lkdGgpIC8gMiwgeSArIDI1KTtcblxuICAgIGRvYy5zZXRGb250U2l6ZSgxMik7XG4gICAgY29uc3Qgbml0VGV4dCA9IGBOSVQ6ICR7ZGF0YS5uaXR9YDtcbiAgICBjb25zdCBuaXRXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgobml0VGV4dCk7XG4gICAgZG9jLnRleHQobml0VGV4dCwgKHBhZ2VXaWR0aCAtIG5pdFdpZHRoKSAvIDIsIHkgKyA0NSk7XG5cbiAgICBkb2Muc2V0Rm9udFNpemUoMTApO1xuICAgIGNvbnN0IGFkZHJlc3NUZXh0ID0gYCR7ZGF0YS5hZGRyZXNzfSAtIFRFTDogJHtkYXRhLnRlbGVwaG9uZX1gO1xuICAgIGNvbnN0IGFkZHJlc3NXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgoYWRkcmVzc1RleHQpO1xuICAgIGRvYy50ZXh0KGFkZHJlc3NUZXh0LCAocGFnZVdpZHRoIC0gYWRkcmVzc1dpZHRoKSAvIDIsIHkgKyA2NSk7XG5cbiAgICAvLyBSZXNldGVhciBjb2xvciBkZSB0ZXh0b1xuICAgIGRvYy5zZXRUZXh0Q29sb3IoMCwgMCwgMCk7XG4gIH1cblxuICBwcml2YXRlIGFkZERvY3VtZW50VGl0bGUoZG9jOiBqc1BERiwgZGF0YTogRnVlbE9yZGVyRGF0YSwgeTogbnVtYmVyLCBwYWdlV2lkdGg6IG51bWJlciwgY29sb3I6IG51bWJlcltdKTogbnVtYmVyIHtcbiAgICBkb2Muc2V0VGV4dENvbG9yKGNvbG9yWzBdLCBjb2xvclsxXSwgY29sb3JbMl0pO1xuICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xuICAgIGRvYy5zZXRGb250U2l6ZSgyMCk7XG4gICAgXG4gICAgY29uc3QgdGl0bGUgPSAnT1JERU4gREUgQ09NQlVTVElCTEUnO1xuICAgIGNvbnN0IHRpdGxlV2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKHRpdGxlKTtcbiAgICBkb2MudGV4dCh0aXRsZSwgKHBhZ2VXaWR0aCAtIHRpdGxlV2lkdGgpIC8gMiwgeSk7XG5cbiAgICBkb2Muc2V0Rm9udFNpemUoMTYpO1xuICAgIGNvbnN0IG51bWJlclRleHQgPSBgTsKwICR7ZGF0YS5jb25zZWN1dGl2ZX1gO1xuICAgIGNvbnN0IG51bWJlcldpZHRoID0gZG9jLmdldFRleHRXaWR0aChudW1iZXJUZXh0KTtcbiAgICBkb2MudGV4dChudW1iZXJUZXh0LCAocGFnZVdpZHRoIC0gbnVtYmVyV2lkdGgpIC8gMiwgeSArIDI1KTtcblxuICAgIGRvYy5zZXRUZXh0Q29sb3IoMCwgMCwgMCk7XG4gICAgcmV0dXJuIHkgKyA0MDtcbiAgfVxuXG4gIHByaXZhdGUgYWRkTWFpbkluZm8oZG9jOiBqc1BERiwgZGF0YTogRnVlbE9yZGVyRGF0YSwgeTogbnVtYmVyLCBtYXJnaW46IG51bWJlciwgcGFnZVdpZHRoOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IHRhYmxlRGF0YSA9IFtcbiAgICAgIFtcbiAgICAgICAgeyBjb250ZW50OiAnw4FyZWE6Jywgc3R5bGVzOiB7IGZvbnRTdHlsZTogJ2JvbGQnLCBmaWxsQ29sb3I6IFsyNDAsIDI0MCwgMjQwXSB9IH0sXG4gICAgICAgIHsgY29udGVudDogZGF0YS5hcmVhLCBzdHlsZXM6IHt9IH0sXG4gICAgICAgIHsgY29udGVudDogJ0PDs2RpZ286Jywgc3R5bGVzOiB7IGZvbnRTdHlsZTogJ2JvbGQnLCBmaWxsQ29sb3I6IFsyNDAsIDI0MCwgMjQwXSB9IH0sXG4gICAgICAgIHsgY29udGVudDogZGF0YS5jb2RlLCBzdHlsZXM6IHt9IH0sXG4gICAgICAgIHsgY29udGVudDogJ0ZlY2hhOicsIHN0eWxlczogeyBmb250U3R5bGU6ICdib2xkJywgZmlsbENvbG9yOiBbMjQwLCAyNDAsIDI0MF0gfSB9LFxuICAgICAgICB7IGNvbnRlbnQ6IGRhdGEuZGF0ZSwgc3R5bGVzOiB7fSB9XG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICB7IGNvbnRlbnQ6ICdPcGVyYXJpbzonLCBzdHlsZXM6IHsgZm9udFN0eWxlOiAnYm9sZCcsIGZpbGxDb2xvcjogWzI0MCwgMjQwLCAyNDBdIH0gfSxcbiAgICAgICAgeyBjb250ZW50OiBkYXRhLnJlc3BvbnNpYmxlLCBzdHlsZXM6IHsgY29sU3BhbjogMyB9IH0sXG4gICAgICAgIHsgY29udGVudDogJ09kw7NtZXRybzonLCBzdHlsZXM6IHsgZm9udFN0eWxlOiAnYm9sZCcsIGZpbGxDb2xvcjogWzI0MCwgMjQwLCAyNDBdIH0gfSxcbiAgICAgICAgeyBjb250ZW50OiBkYXRhLm9kb21ldGVyLCBzdHlsZXM6IHt9IH1cbiAgICAgIF1cbiAgICBdO1xuXG4gICAgKGRvYyBhcyBhbnkpLmF1dG9UYWJsZSh7XG4gICAgICBzdGFydFk6IHksXG4gICAgICBib2R5OiB0YWJsZURhdGEsXG4gICAgICB0aGVtZTogJ2dyaWQnLFxuICAgICAgc3R5bGVzOiB7XG4gICAgICAgIGZvbnRTaXplOiAxMSxcbiAgICAgICAgY2VsbFBhZGRpbmc6IDgsXG4gICAgICAgIGxpbmVDb2xvcjogWzIwMCwgMjAwLCAyMDBdLFxuICAgICAgICBsaW5lV2lkdGg6IDAuNVxuICAgICAgfSxcbiAgICAgIGNvbHVtblN0eWxlczoge1xuICAgICAgICAwOiB7IGNlbGxXaWR0aDogNzAgfSxcbiAgICAgICAgMTogeyBjZWxsV2lkdGg6IDEwMCB9LFxuICAgICAgICAyOiB7IGNlbGxXaWR0aDogNzAgfSxcbiAgICAgICAgMzogeyBjZWxsV2lkdGg6IDgwIH0sXG4gICAgICAgIDQ6IHsgY2VsbFdpZHRoOiA3MCB9LFxuICAgICAgICA1OiB7IGNlbGxXaWR0aDogODAgfVxuICAgICAgfSxcbiAgICAgIG1hcmdpbjogeyBsZWZ0OiBtYXJnaW4sIHJpZ2h0OiBtYXJnaW4gfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIChkb2MgYXMgYW55KS5sYXN0QXV0b1RhYmxlLmZpbmFsWTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUHJvdmlkZXJJbmZvKGRvYzoganNQREYsIGRhdGE6IEZ1ZWxPcmRlckRhdGEsIHk6IG51bWJlciwgbWFyZ2luOiBudW1iZXIsIHBhZ2VXaWR0aDogbnVtYmVyLCBjb2xvcjogbnVtYmVyW10pOiBudW1iZXIge1xuICAgIC8vIFTDrXR1bG8gZGUgc2VjY2nDs25cbiAgICBkb2Muc2V0VGV4dENvbG9yKGNvbG9yWzBdLCBjb2xvclsxXSwgY29sb3JbMl0pO1xuICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xuICAgIGRvYy5zZXRGb250U2l6ZSgxNCk7XG4gICAgY29uc3QgdGl0bGUgPSAnREFUT1MgREVMIFBST1ZFRURPUic7XG4gICAgY29uc3QgdGl0bGVXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgodGl0bGUpO1xuICAgIGRvYy50ZXh0KHRpdGxlLCAocGFnZVdpZHRoIC0gdGl0bGVXaWR0aCkgLyAyLCB5KTtcbiAgICBkb2Muc2V0VGV4dENvbG9yKDAsIDAsIDApO1xuXG4gICAgY29uc3QgdGFibGVEYXRhID0gW1xuICAgICAgW1xuICAgICAgICB7IGNvbnRlbnQ6ICdMdWdhcjonLCBzdHlsZXM6IHsgZm9udFN0eWxlOiAnYm9sZCcsIGZpbGxDb2xvcjogWzI0MCwgMjQwLCAyNDBdIH0gfSxcbiAgICAgICAgeyBjb250ZW50OiBkYXRhLm5hbWVQbGFjZSwgc3R5bGVzOiB7fSB9LFxuICAgICAgICB7IGNvbnRlbnQ6ICdEaXJlY2Npw7NuOicsIHN0eWxlczogeyBmb250U3R5bGU6ICdib2xkJywgZmlsbENvbG9yOiBbMjQwLCAyNDAsIDI0MF0gfSB9LFxuICAgICAgICB7IGNvbnRlbnQ6IGRhdGEuYWRkcmVzc1BsYWNlLCBzdHlsZXM6IHt9IH1cbiAgICAgIF1cbiAgICBdO1xuXG4gICAgKGRvYyBhcyBhbnkpLmF1dG9UYWJsZSh7XG4gICAgICBzdGFydFk6IHkgKyAyMCxcbiAgICAgIGJvZHk6IHRhYmxlRGF0YSxcbiAgICAgIHRoZW1lOiAnZ3JpZCcsXG4gICAgICBzdHlsZXM6IHtcbiAgICAgICAgZm9udFNpemU6IDExLFxuICAgICAgICBjZWxsUGFkZGluZzogOCxcbiAgICAgICAgbGluZUNvbG9yOiBbMjAwLCAyMDAsIDIwMF0sXG4gICAgICAgIGxpbmVXaWR0aDogMC41XG4gICAgICB9LFxuICAgICAgY29sdW1uU3R5bGVzOiB7XG4gICAgICAgIDA6IHsgY2VsbFdpZHRoOiA4MCB9LFxuICAgICAgICAxOiB7IGNlbGxXaWR0aDogMTYwIH0sXG4gICAgICAgIDI6IHsgY2VsbFdpZHRoOiA4MCB9LFxuICAgICAgICAzOiB7IGNlbGxXaWR0aDogMTUwIH1cbiAgICAgIH0sXG4gICAgICBtYXJnaW46IHsgbGVmdDogbWFyZ2luLCByaWdodDogbWFyZ2luIH1cbiAgICB9KTtcblxuICAgIHJldHVybiAoZG9jIGFzIGFueSkubGFzdEF1dG9UYWJsZS5maW5hbFk7XG4gIH1cblxuICBwcml2YXRlIGFkZFNlcnZpY2VEZXRhaWxzKGRvYzoganNQREYsIGRhdGE6IEZ1ZWxPcmRlckRhdGEsIHk6IG51bWJlciwgbWFyZ2luOiBudW1iZXIsIHBhZ2VXaWR0aDogbnVtYmVyLCBjb2xvcjogbnVtYmVyW10pOiBudW1iZXIge1xuICAgIC8vIFTDrXR1bG8gZGUgc2VjY2nDs25cbiAgICBkb2Muc2V0VGV4dENvbG9yKGNvbG9yWzBdLCBjb2xvclsxXSwgY29sb3JbMl0pO1xuICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xuICAgIGRvYy5zZXRGb250U2l6ZSgxNCk7XG4gICAgY29uc3QgdGl0bGUgPSAnREVUQUxMRVMgREVMIFNFUlZJQ0lPJztcbiAgICBjb25zdCB0aXRsZVdpZHRoID0gZG9jLmdldFRleHRXaWR0aCh0aXRsZSk7XG4gICAgZG9jLnRleHQodGl0bGUsIChwYWdlV2lkdGggLSB0aXRsZVdpZHRoKSAvIDIsIHkpO1xuICAgIGRvYy5zZXRUZXh0Q29sb3IoMCwgMCwgMCk7XG5cbiAgICAvLyBQcmVwYXJhciB0ZXh0byBwYXJhIGNhbGN1bGFyIGFsdHVyYSBuZWNlc2FyaWFcbiAgICBjb25zdCBib3hZID0geSArIDIwO1xuICAgIGNvbnN0IGJveFdpZHRoID0gcGFnZVdpZHRoIC0gKG1hcmdpbiAqIDIpO1xuICAgIGNvbnN0IHRleHRNYXJnaW4gPSBtYXJnaW4gKyAxNTtcbiAgICBjb25zdCBtYXhXaWR0aCA9IGJveFdpZHRoIC0gMzA7XG4gICAgY29uc3QgbGluZUhlaWdodCA9IDE1O1xuICAgIGNvbnN0IG1pbkJveEhlaWdodCA9IDYwOyAvLyBBbHR1cmEgbcOtbmltYSBkZWwgY29udGVuZWRvclxuICAgIGNvbnN0IHBhZGRpbmcgPSA0MDsgLy8gUGFkZGluZyBzdXBlcmlvciBlIGluZmVyaW9yXG5cbiAgICAvLyBDYWxjdWxhciBsw61uZWFzIGRlIHRleHRvIG5lY2VzYXJpYXNcbiAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ25vcm1hbCcpO1xuICAgIGRvYy5zZXRGb250U2l6ZSgxMSk7XG4gICAgXG4gICAgbGV0IHRvdGFsTGluZXMgPSAwO1xuXG4gICAgLy8gQ29udGFyIGzDrW5lYXMgZGVsIGRldGFsbGVcbiAgICBpZiAoZGF0YS5kZXRhbGxlICYmIGRhdGEuZGV0YWxsZS50cmltKCkpIHtcbiAgICAgIGNvbnN0IGRldGFsbGVMaW5lcyA9IGRvYy5zcGxpdFRleHRUb1NpemUoZGF0YS5kZXRhbGxlLnRyaW0oKSwgbWF4V2lkdGgpO1xuICAgICAgdG90YWxMaW5lcyArPSBkZXRhbGxlTGluZXMubGVuZ3RoO1xuICAgIH1cblxuICAgIC8vIENvbnRhciBsw61uZWFzIGRlIGxhIGRlc2NyaXBjacOzbiAoaW5jbHV5ZSBldGlxdWV0YSBcIkRlc2NyaXBjacOzbjpcIilcbiAgICBpZiAoZGF0YS5kZXNjcmlwdGlvbiAmJiBkYXRhLmRlc2NyaXB0aW9uLnRyaW0oKSkge1xuICAgICAgdG90YWxMaW5lcyArPSAyOyAvLyBVbmEgbMOtbmVhIHBhcmEgXCJEZXNjcmlwY2nDs246XCIgKyBlc3BhY2lvXG4gICAgICBjb25zdCBkZXNjTGluZXMgPSBkb2Muc3BsaXRUZXh0VG9TaXplKGRhdGEuZGVzY3JpcHRpb24udHJpbSgpLCBtYXhXaWR0aCk7XG4gICAgICB0b3RhbExpbmVzICs9IGRlc2NMaW5lcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gQ2FsY3VsYXIgYWx0dXJhIG5lY2VzYXJpYSBiYXNhZGEgZW4gZWwgY29udGVuaWRvXG4gICAgY29uc3QgY29udGVudEhlaWdodCA9IE1hdGgubWF4KHRvdGFsTGluZXMgKiBsaW5lSGVpZ2h0LCAzMCk7IC8vIE3DrW5pbW8gMzBwdCBwYXJhIGNvbnRlbmlkb1xuICAgIGNvbnN0IGJveEhlaWdodCA9IE1hdGgubWF4KG1pbkJveEhlaWdodCwgY29udGVudEhlaWdodCArIHBhZGRpbmcpO1xuXG4gICAgLy8gVmVyaWZpY2FyIHNpIG5lY2VzaXRhbW9zIHVuYSBudWV2YSBww6FnaW5hXG4gICAgY29uc3QgcGFnZUhlaWdodCA9IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5nZXRIZWlnaHQoKTtcbiAgICBjb25zdCByZW1haW5pbmdTcGFjZSA9IHBhZ2VIZWlnaHQgLSBib3hZIC0gMTAwOyAvLyBEZWphciBlc3BhY2lvIHBhcmEgZm9vdGVyXG4gICAgXG4gICAgbGV0IGZpbmFsQm94WSA9IGJveFk7XG4gICAgaWYgKGJveEhlaWdodCA+IHJlbWFpbmluZ1NwYWNlKSB7XG4gICAgICAvLyBBw7FhZGlyIG51ZXZhIHDDoWdpbmFcbiAgICAgIGRvYy5hZGRQYWdlKCk7XG4gICAgICBmaW5hbEJveFkgPSBtYXJnaW4gKyA0MDsgLy8gUG9zaWNpw7NuIGVuIG51ZXZhIHDDoWdpbmFcbiAgICB9XG5cbiAgICAvLyBEaWJ1amFyIGNvbnRlbmVkb3IgY29uIGFsdHVyYSBkaW7DoW1pY2FcbiAgICAvLyBGb25kbyBncmlzIGNsYXJvXG4gICAgZG9jLnNldEZpbGxDb2xvcigyNTAsIDI1MCwgMjUwKTtcbiAgICBkb2MucmVjdChtYXJnaW4sIGZpbmFsQm94WSwgYm94V2lkdGgsIGJveEhlaWdodCwgJ0YnKTtcbiAgICBcbiAgICAvLyBCb3JkZVxuICAgIGRvYy5zZXREcmF3Q29sb3IoMjAwLCAyMDAsIDIwMCk7XG4gICAgZG9jLnJlY3QobWFyZ2luLCBmaW5hbEJveFksIGJveFdpZHRoLCBib3hIZWlnaHQsICdTJyk7XG5cbiAgICAvLyBBw7FhZGlyIGNvbnRlbmlkbyBkZSB0ZXh0b1xuICAgIGxldCB0ZXh0WSA9IGZpbmFsQm94WSArIDIwO1xuXG4gICAgLy8gQcOxYWRpciBkZXRhbGxlIHNpIGV4aXN0ZVxuICAgIGlmIChkYXRhLmRldGFsbGUgJiYgZGF0YS5kZXRhbGxlLnRyaW0oKSkge1xuICAgICAgY29uc3QgZGV0YWxsZUxpbmVzID0gZG9jLnNwbGl0VGV4dFRvU2l6ZShkYXRhLmRldGFsbGUudHJpbSgpLCBtYXhXaWR0aCk7XG4gICAgICBkb2MudGV4dChkZXRhbGxlTGluZXMsIHRleHRNYXJnaW4sIHRleHRZKTtcbiAgICAgIHRleHRZICs9IGRldGFsbGVMaW5lcy5sZW5ndGggKiBsaW5lSGVpZ2h0ICsgMTA7IC8vIEVzcGFjaW8gZXh0cmEgZGVzcHXDqXMgZGVsIGRldGFsbGVcbiAgICB9XG5cbiAgICAvLyBBw7FhZGlyIGRlc2NyaXBjacOzbiBzaSBleGlzdGVcbiAgICBpZiAoZGF0YS5kZXNjcmlwdGlvbiAmJiBkYXRhLmRlc2NyaXB0aW9uLnRyaW0oKSkge1xuICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XG4gICAgICBkb2MudGV4dCgnRGVzY3JpcGNpw7NuOicsIHRleHRNYXJnaW4sIHRleHRZKTtcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnbm9ybWFsJyk7XG4gICAgICB0ZXh0WSArPSBsaW5lSGVpZ2h0O1xuICAgICAgXG4gICAgICBjb25zdCBkZXNjTGluZXMgPSBkb2Muc3BsaXRUZXh0VG9TaXplKGRhdGEuZGVzY3JpcHRpb24udHJpbSgpLCBtYXhXaWR0aCk7XG4gICAgICBcbiAgICAgIC8vIFZlcmlmaWNhciBzaSBuZWNlc2l0YW1vcyBtYW5lamFyIGNvbnRlbmlkbyBtdXkgbGFyZ29cbiAgICAgIGNvbnN0IHJlbWFpbmluZ0hlaWdodCA9IGZpbmFsQm94WSArIGJveEhlaWdodCAtIHRleHRZIC0gMjA7XG4gICAgICBjb25zdCBtYXhMaW5lc0luU3BhY2UgPSBNYXRoLmZsb29yKHJlbWFpbmluZ0hlaWdodCAvIGxpbmVIZWlnaHQpO1xuICAgICAgXG4gICAgICBpZiAoZGVzY0xpbmVzLmxlbmd0aCA+IG1heExpbmVzSW5TcGFjZSAmJiBtYXhMaW5lc0luU3BhY2UgPiAwKSB7XG4gICAgICAgIC8vIE1vc3RyYXIgbMOtbmVhcyBxdWUgY2FiZW4gZW4gZWwgZXNwYWNpbyBhY3R1YWxcbiAgICAgICAgY29uc3QgY3VycmVudExpbmVzID0gZGVzY0xpbmVzLnNsaWNlKDAsIG1heExpbmVzSW5TcGFjZSk7XG4gICAgICAgIGRvYy50ZXh0KGN1cnJlbnRMaW5lcywgdGV4dE1hcmdpbiwgdGV4dFkpO1xuICAgICAgICBcbiAgICAgICAgLy8gQ29udGludWFyIGVuIG51ZXZhIHDDoWdpbmEgc2kgaGF5IG3DoXMgY29udGVuaWRvXG4gICAgICAgIGlmIChkZXNjTGluZXMubGVuZ3RoID4gbWF4TGluZXNJblNwYWNlKSB7XG4gICAgICAgICAgZG9jLmFkZFBhZ2UoKTtcbiAgICAgICAgICB0ZXh0WSA9IG1hcmdpbiArIDIwO1xuICAgICAgICAgIGNvbnN0IHJlbWFpbmluZ0xpbmVzID0gZGVzY0xpbmVzLnNsaWNlKG1heExpbmVzSW5TcGFjZSk7XG4gICAgICAgICAgZG9jLnRleHQocmVtYWluaW5nTGluZXMsIHRleHRNYXJnaW4sIHRleHRZKTtcbiAgICAgICAgICByZXR1cm4gdGV4dFkgKyAocmVtYWluaW5nTGluZXMubGVuZ3RoICogbGluZUhlaWdodCkgKyAyMDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9jLnRleHQoZGVzY0xpbmVzLCB0ZXh0TWFyZ2luLCB0ZXh0WSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2kgbm8gaGF5IGNvbnRlbmlkbywgbW9zdHJhciB1biBtZW5zYWplXG4gICAgaWYgKCghZGF0YS5kZXRhbGxlIHx8ICFkYXRhLmRldGFsbGUudHJpbSgpKSAmJiAoIWRhdGEuZGVzY3JpcHRpb24gfHwgIWRhdGEuZGVzY3JpcHRpb24udHJpbSgpKSkge1xuICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdpdGFsaWMnKTtcbiAgICAgIGRvYy5zZXRGb250U2l6ZSgxMCk7XG4gICAgICBkb2Muc2V0VGV4dENvbG9yKDE1MCwgMTUwLCAxNTApO1xuICAgICAgZG9jLnRleHQoJ05vIHNlIGhhbiBlc3BlY2lmaWNhZG8gZGV0YWxsZXMgZGVsIHNlcnZpY2lvLicsIHRleHRNYXJnaW4sIHRleHRZKTtcbiAgICAgIGRvYy5zZXRUZXh0Q29sb3IoMCwgMCwgMCk7XG4gICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ25vcm1hbCcpO1xuICAgICAgZG9jLnNldEZvbnRTaXplKDExKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmluYWxCb3hZICsgYm94SGVpZ2h0O1xuICB9XG5cbiAgLyoqXG4gICAqIE3DqXRvZG8gYXV4aWxpYXIgcGFyYSBtYW5lamFyIHRleHRvIGxhcmdvIHF1ZSBwdWVkZSBuZWNlc2l0YXIgbcO6bHRpcGxlcyBww6FnaW5hc1xuICAgKi9cbiAgcHJpdmF0ZSBhZGRMb25nVGV4dChkb2M6IGpzUERGLCB0ZXh0OiBzdHJpbmcsIHg6IG51bWJlciwgeTogbnVtYmVyLCBtYXhXaWR0aDogbnVtYmVyLCBmb250U2l6ZTogbnVtYmVyID0gMTEpOiBudW1iZXIge1xuICAgIGlmICghdGV4dCB8fCAhdGV4dC50cmltKCkpIHJldHVybiB5O1xuXG4gICAgZG9jLnNldEZvbnRTaXplKGZvbnRTaXplKTtcbiAgICBjb25zdCBsaW5lcyA9IGRvYy5zcGxpdFRleHRUb1NpemUodGV4dC50cmltKCksIG1heFdpZHRoKTtcbiAgICBjb25zdCBsaW5lSGVpZ2h0ID0gZm9udFNpemUgKyAzO1xuICAgIGNvbnN0IHBhZ2VIZWlnaHQgPSBkb2MuaW50ZXJuYWwucGFnZVNpemUuZ2V0SGVpZ2h0KCk7XG4gICAgY29uc3QgbWFyZ2luID0gNDA7XG5cbiAgICBsZXQgY3VycmVudFkgPSB5O1xuICAgIGxldCBsaW5lSW5kZXggPSAwO1xuXG4gICAgd2hpbGUgKGxpbmVJbmRleCA8IGxpbmVzLmxlbmd0aCkge1xuICAgICAgLy8gVmVyaWZpY2FyIHNpIG5lY2VzaXRhbW9zIHVuYSBudWV2YSBww6FnaW5hXG4gICAgICBpZiAoY3VycmVudFkgKyBsaW5lSGVpZ2h0ID4gcGFnZUhlaWdodCAtIG1hcmdpbikge1xuICAgICAgICBkb2MuYWRkUGFnZSgpO1xuICAgICAgICBjdXJyZW50WSA9IG1hcmdpbjtcbiAgICAgIH1cblxuICAgICAgLy8gQ2FsY3VsYXIgY3XDoW50YXMgbMOtbmVhcyBjYWJlbiBlbiBsYSBww6FnaW5hIGFjdHVhbFxuICAgICAgY29uc3QgcmVtYWluaW5nU3BhY2UgPSBwYWdlSGVpZ2h0IC0gY3VycmVudFkgLSBtYXJnaW47XG4gICAgICBjb25zdCBtYXhMaW5lc0luUGFnZSA9IE1hdGguZmxvb3IocmVtYWluaW5nU3BhY2UgLyBsaW5lSGVpZ2h0KTtcbiAgICAgIFxuICAgICAgaWYgKG1heExpbmVzSW5QYWdlID4gMCkge1xuICAgICAgICBjb25zdCBsaW5lc1RvU2hvdyA9IE1hdGgubWluKG1heExpbmVzSW5QYWdlLCBsaW5lcy5sZW5ndGggLSBsaW5lSW5kZXgpO1xuICAgICAgICBjb25zdCBwYWdlTGluZXMgPSBsaW5lcy5zbGljZShsaW5lSW5kZXgsIGxpbmVJbmRleCArIGxpbmVzVG9TaG93KTtcbiAgICAgICAgXG4gICAgICAgIGRvYy50ZXh0KHBhZ2VMaW5lcywgeCwgY3VycmVudFkpO1xuICAgICAgICBjdXJyZW50WSArPSBwYWdlTGluZXMubGVuZ3RoICogbGluZUhlaWdodDtcbiAgICAgICAgbGluZUluZGV4ICs9IGxpbmVzVG9TaG93O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU2kgbm8gY2FiZSBuaSB1bmEgbMOtbmVhLCBpciBhIG51ZXZhIHDDoWdpbmFcbiAgICAgICAgZG9jLmFkZFBhZ2UoKTtcbiAgICAgICAgY3VycmVudFkgPSBtYXJnaW47XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGN1cnJlbnRZO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRBdXRob3JpemF0aW9uKGRvYzoganNQREYsIGRhdGE6IEZ1ZWxPcmRlckRhdGEsIHk6IG51bWJlciwgbWFyZ2luOiBudW1iZXIsIHBhZ2VXaWR0aDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCB0YWJsZURhdGEgPSBbXG4gICAgICBbXG4gICAgICAgIHsgY29udGVudDogJ0FVVE9SSVpBREEgUE9SOicsIHN0eWxlczogeyBmb250U3R5bGU6ICdib2xkJywgZm9udFNpemU6IDEyLCBmaWxsQ29sb3I6IFsyNDAsIDI0MCwgMjQwXSB9IH0sXG4gICAgICAgIHsgY29udGVudDogZGF0YS5hcHByb3ZlZF9ieSwgc3R5bGVzOiB7IGZvbnRTaXplOiAxMiB9IH1cbiAgICAgIF1cbiAgICBdO1xuXG4gICAgKGRvYyBhcyBhbnkpLmF1dG9UYWJsZSh7XG4gICAgICBzdGFydFk6IHksXG4gICAgICBib2R5OiB0YWJsZURhdGEsXG4gICAgICB0aGVtZTogJ2dyaWQnLFxuICAgICAgc3R5bGVzOiB7XG4gICAgICAgIGNlbGxQYWRkaW5nOiAxMixcbiAgICAgICAgbGluZUNvbG9yOiBbMjAwLCAyMDAsIDIwMF0sXG4gICAgICAgIGxpbmVXaWR0aDogMC41XG4gICAgICB9LFxuICAgICAgY29sdW1uU3R5bGVzOiB7XG4gICAgICAgIDA6IHsgY2VsbFdpZHRoOiAxNTAgfSxcbiAgICAgICAgMTogeyBjZWxsV2lkdGg6IDMyMCB9XG4gICAgICB9LFxuICAgICAgbWFyZ2luOiB7IGxlZnQ6IG1hcmdpbiwgcmlnaHQ6IG1hcmdpbiB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gKGRvYyBhcyBhbnkpLmxhc3RBdXRvVGFibGUuZmluYWxZO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRGb290ZXIoZG9jOiBqc1BERiwgZGF0YTogRnVlbE9yZGVyRGF0YSwgeTogbnVtYmVyLCBwYWdlV2lkdGg6IG51bWJlciwgY29sb3I6IG51bWJlcltdKTogdm9pZCB7XG4gICAgLy8gRm9uZG8gZGVsIHBpZSBkZSBww6FnaW5hXG4gICAgZG9jLnNldEZpbGxDb2xvcihjb2xvclswXSwgY29sb3JbMV0sIGNvbG9yWzJdKTtcbiAgICBkb2MucmVjdCg0MCwgeSwgcGFnZVdpZHRoIC0gODAsIDYwLCAnRicpO1xuXG4gICAgLy8gVGV4dG8gZW4gYmxhbmNvXG4gICAgZG9jLnNldFRleHRDb2xvcigyNTUsIDI1NSwgMjU1KTtcbiAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcbiAgICBkb2Muc2V0Rm9udFNpemUoMTIpO1xuICAgIFxuICAgIGNvbnN0IGluc3RydWN0aW9uID0gJ0Zhdm9yIGFkanVudGFyIGxhIG9yZGVuIGRlIHZlbnRhIG8gZmFjdHVyYSc7XG4gICAgY29uc3QgaW5zdFdpZHRoID0gZG9jLmdldFRleHRXaWR0aChpbnN0cnVjdGlvbik7XG4gICAgZG9jLnRleHQoaW5zdHJ1Y3Rpb24sIChwYWdlV2lkdGggLSBpbnN0V2lkdGgpIC8gMiwgeSArIDI1KTtcblxuICAgIGRvYy5zZXRGb250U2l6ZSgxMCk7XG4gICAgY29uc3QgZW1haWxXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgoZGF0YS5tYWlsKTtcbiAgICBkb2MudGV4dChkYXRhLm1haWwsIChwYWdlV2lkdGggLSBlbWFpbFdpZHRoKSAvIDIsIHkgKyA0NSk7XG5cbiAgICAvLyBSZXNldGVhciBjb2xvclxuICAgIGRvYy5zZXRUZXh0Q29sb3IoMCwgMCwgMCk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhIFBERiBvcHRpbWl6YWRvIHBhcmEgaW1wcmVzacOzblxuICAgKi9cbiAgZ2VuZXJhdGVGb3JQcmludChkYXRhOiBGdWVsT3JkZXJEYXRhKTogUHJvbWlzZTxqc1BERj4ge1xuICAgIHJldHVybiB0aGlzLmdlbmVyYXRlRnVlbE9yZGVyUHJvZmVzaW9uYWxQREYoZGF0YSwge1xuICAgICAgZm9ybWF0OiAnbGV0dGVyJyxcbiAgICAgIGRvd25sb2FkOiBmYWxzZVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYSBQREYgeSBsbyBkZXZ1ZWx2ZSBjb21vIEJsb2IgcGFyYSBlbnbDrW8gcG9yIGVtYWlsXG4gICAqL1xuICBnZW5lcmF0ZUFzQmxvYihkYXRhOiBGdWVsT3JkZXJEYXRhKTogUHJvbWlzZTxCbG9iPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuZ2VuZXJhdGVGdWVsT3JkZXJQcm9mZXNpb25hbFBERihkYXRhLCB7IGRvd25sb2FkOiBmYWxzZSB9KVxuICAgICAgICAudGhlbihkb2MgPT4ge1xuICAgICAgICAgIGNvbnN0IHBkZkJsb2IgPSBkb2Mub3V0cHV0KCdibG9iJyk7XG4gICAgICAgICAgcmVzb2x2ZShwZGZCbG9iKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKHJlamVjdCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhIFBERiB5IGxvIGRldnVlbHZlIGNvbW8gYmFzZTY0XG4gICAqL1xuICBnZW5lcmF0ZUFzQmFzZTY0KGRhdGE6IEZ1ZWxPcmRlckRhdGEpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmdlbmVyYXRlRnVlbE9yZGVyUHJvZmVzaW9uYWxQREYoZGF0YSwgeyBkb3dubG9hZDogZmFsc2UgfSlcbiAgICAgICAgLnRoZW4oZG9jID0+IHtcbiAgICAgICAgICBjb25zdCBiYXNlNjQgPSBkb2Mub3V0cHV0KCdkYXRhdXJpc3RyaW5nJyk7XG4gICAgICAgICAgcmVzb2x2ZShiYXNlNjQpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2gocmVqZWN0KTtcbiAgICB9KTtcbiAgfVxufVxuIl19
346
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVlbC1vcmRlci1wZGYuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zZXJ2aWNlcy9mdWVsLW9yZGVyLXBkZi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM5QixPQUFPLGlCQUFpQixDQUFDOztBQUd6QixtQ0FBbUM7QUFDbkMsa0JBQWtCO0FBQ2xCLGlCQUFpQjtBQUNqQixxQkFBcUI7QUFDckIsdUJBQXVCO0FBQ3ZCLGtCQUFrQjtBQUNsQixvQkFBb0I7QUFDcEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQix5QkFBeUI7QUFDekIsc0JBQXNCO0FBQ3RCLHlCQUF5QjtBQUN6QixxQkFBcUI7QUFDckIseUJBQXlCO0FBQ3pCLHlCQUF5QjtBQUN6Qix1QkFBdUI7QUFDdkIsMEJBQTBCO0FBQzFCLGtCQUFrQjtBQUNsQixzQkFBc0I7QUFDdEIsK0JBQStCO0FBQy9CLElBQUk7QUFLSixNQUFNLE9BQU8sbUJBQW1CO0lBRTlCLGdCQUFnQixDQUFDO0lBRWpCLCtCQUErQixDQUFDLElBQW1CLEVBQUUsT0FJcEQ7UUFDQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLElBQUk7Z0JBQ0YsTUFBTSxJQUFJLEdBQUc7b0JBQ1gsTUFBTSxFQUFFLFFBQVE7b0JBQ2hCLFFBQVEsRUFBRSxJQUFJO29CQUNkLFFBQVEsRUFBRSx1QkFBdUI7b0JBQ2pDLEdBQUcsT0FBTztpQkFDWCxDQUFDO2dCQUVGLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUM5QyxNQUFNLFNBQVMs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U0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUUzRCxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BCLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBRTFELGlCQUFpQjtRQUNqQixHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDNUIsQ0FBQzs7Z0hBcFhVLG1CQUFtQjtvSEFBbkIsbUJBQW1CLGNBRmxCLE1BQU07MkZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGpzUERGIH0gZnJvbSAnanNwZGYnO1xuaW1wb3J0ICdqc3BkZi1hdXRvdGFibGUnO1xuaW1wb3J0IHsgVGVtcGxhdGVQZGZGbyB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwb3J0L3RlbXBsYXRlLXBmZC1mbyc7XG5cbi8vIGV4cG9ydCBpbnRlcmZhY2UgVGVtcGxhdGVQZGZGbyB7XG4vLyAgIG5hbWU6IHN0cmluZztcbi8vICAgbml0OiBzdHJpbmc7XG4vLyAgIGFkZHJlc3M6IHN0cmluZztcbi8vICAgdGVsZXBob25lOiBzdHJpbmc7XG4vLyAgIG1haWw6IHN0cmluZztcbi8vICAgaW1hZ2U/OiBzdHJpbmc7XG4vLyAgIGNvZGU6IHN0cmluZztcbi8vICAgZGF0ZTogc3RyaW5nO1xuLy8gICByZXNwb25zaWJsZTogc3RyaW5nO1xuLy8gICBpZF9wbGFjZTogc3RyaW5nO1xuLy8gICBhcHByb3ZlZF9ieTogc3RyaW5nO1xuLy8gICBkZXRhbGxlOiBzdHJpbmc7XG4vLyAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4vLyAgIGNvbnNlY3V0aXZlOiBzdHJpbmc7XG4vLyAgIG5hbWVQbGFjZTogc3RyaW5nO1xuLy8gICBhZGRyZXNzUGxhY2U6IHN0cmluZztcbi8vICAgYXJlYTogc3RyaW5nO1xuLy8gICBvZG9tZXRlcjogc3RyaW5nO1xuLy8gICBpbnZvaWNlUmVmZXJlbmNlPzogc3RyaW5nO1xuLy8gfVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBGdWVsT3JkZXJQZGZTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gIGdlbmVyYXRlRnVlbE9yZGVyUHJvZmVzaW9uYWxQREYoZGF0YTogVGVtcGxhdGVQZGZGbywgb3B0aW9ucz86IHtcbiAgICBmb3JtYXQ/OiAnbGV0dGVyJyB8ICdhNCc7XG4gICAgZG93bmxvYWQ/OiBib29sZWFuO1xuICAgIGZpbGVuYW1lPzogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxqc1BERj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBvcHRzID0ge1xuICAgICAgICAgIGZvcm1hdDogJ2xldHRlcicsXG4gICAgICAgICAgZG93bmxvYWQ6IHRydWUsXG4gICAgICAgICAgZmlsZW5hbWU6ICdvcmRlbl9jb21idXN0aWJsZS5wZGYnLFxuICAgICAgICAgIC4uLm9wdGlvbnNcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBkb2MgPSBuZXcganNQREYoJ3AnLCAncHQnLCBvcHRzLmZvcm1hdCk7XG4gICAgICAgIGNvbnN0IHBhZ2VXaWR0aCA9IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5nZXRXaWR0aCgpO1xuICAgICAgICBjb25zdCBwYWdlSGVpZ2h0ID0gZG9jLmludGVybmFsLnBhZ2VTaXplLmdldEhlaWdodCgpO1xuICAgICAgICBjb25zdCBtYXJnaW4gPSA0MDtcbiAgICAgICAgbGV0IGN1cnJlbnRZID0gbWFyZ2luO1xuXG4gICAgICAgIC8vIENvbG9yZXMgY29ycG9yYXRpdm9zXG4gICAgICAgIGNvbnN0IHByaW1hcnlDb2xvciA9IFs0MSwgMTI4LCAxODVdOyAvLyBBenVsXG4gICAgICAgIGNvbnN0IHNlY29uZGFyeUNvbG9yID0gWzUyLCA3MywgOTRdOyAvLyBHcmlzIG9zY3Vyb1xuICAgICAgICBjb25zdCBhY2NlbnRDb2xvciA9IFsyMzAsIDEyNiwgMzRdOyAvLyBOYXJhbmphXG5cbiAgICAgICAgLy8gPT09IEVOQ0FCRVpBRE8gUFJJTkNJUEFMID09PVxuICAgICAgICB0aGlzLmFkZEhlYWRlcihkb2MsIGRhdGEsIG1hcmdpbiwgY3VycmVudFksIHBhZ2VXaWR0aCwgcHJpbWFyeUNvbG9yKTtcbiAgICAgICAgY3VycmVudFkgPSAxNDA7XG5cbiAgICAgICAgLy8gPT09IFTDjVRVTE8gREVMIERPQ1VNRU5UTyA9PT1cbiAgICAgICAgY3VycmVudFkgPSB0aGlzLmFkZERvY3VtZW50VGl0bGUoZG9jLCBkYXRhLCBjdXJyZW50WSwgcGFnZVdpZHRoLCBhY2NlbnRDb2xvcik7XG4gICAgICAgIGN1cnJlbnRZICs9IDI1O1xuXG4gICAgICAgIC8vID09PSBJTkZPUk1BQ0nDk04gUFJJTkNJUEFMID09PVxuICAgICAgICBjdXJyZW50WSA9IHRoaXMuYWRkTWFpbkluZm8oZG9jLCBkYXRhLCBjdXJyZW50WSwgbWFyZ2luLCBwYWdlV2lkdGgpO1xuICAgICAgICBjdXJyZW50WSArPSAyMDtcblxuICAgICAgICAvLyA9PT0gREFUT1MgREVMIFBST1ZFRURPUiA9PT1cbiAgICAgICAgY3VycmVudFkgPSB0aGlzLmFkZFByb3ZpZGVySW5mbyhkb2MsIGRhdGEsIGN1cnJlbnRZLCBtYXJnaW4sIHBhZ2VXaWR0aCwgc2Vjb25kYXJ5Q29sb3IpO1xuICAgICAgICBjdXJyZW50WSArPSAyMDtcblxuICAgICAgICAvLyA9PT0gREVUQUxMRVMgREVMIFNFUlZJQ0lPID09PVxuICAgICAgICBjdXJyZW50WSA9IHRoaXMuYWRkU2VydmljZURldGFpbHMoZG9jLCBkYXRhLCBjdXJyZW50WSwgbWFyZ2luLCBwYWdlV2lkdGgsIHNlY29uZGFyeUNvbG9yKTtcbiAgICAgICAgY3VycmVudFkgKz0gMjA7XG5cbiAgICAgICAgLy8gPT09IEFVVE9SSVpBQ0nDk04gPT09XG4gICAgICAgIGN1cnJlbnRZID0gdGhpcy5hZGRBdXRob3JpemF0aW9uKGRvYywgZGF0YSwgY3VycmVudFksIG1hcmdpbiwgcGFnZVdpZHRoKTtcbiAgICAgICAgY3VycmVudFkgKz0gMzA7XG5cbiAgICAgICAgLy8gPT09IFBJRSBERSBQw4FHSU5BID09PVxuICAgICAgICB0aGlzLmFkZEZvb3Rlcihkb2MsIGRhdGEsIHBhZ2VIZWlnaHQgLSA4MCwgcGFnZVdpZHRoLCBwcmltYXJ5Q29sb3IpO1xuXG4gICAgICAgIC8vID09PSBHRU5FUkFSL0RFU0NBUkdBUiA9PT1cbiAgICAgICAgaWYgKG9wdHMuZG93bmxvYWQpIHtcbiAgICAgICAgICBkb2Mub3V0cHV0KCdkYXRhdXJsbmV3d2luZG93JywgeyBmaWxlbmFtZTogb3B0cy5maWxlbmFtZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc29sdmUoZG9jKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhIFBERiBvcHRpbWl6YWRvIHBhcmEgaW1wcmVzacOzblxuICAgKi9cbiAgZ2VuZXJhdGVGb3JQcmludChkYXRhOiBUZW1wbGF0ZVBkZkZvKTogUHJvbWlzZTxqc1BERj4ge1xuICAgIHJldHVybiB0aGlzLmdlbmVyYXRlRnVlbE9yZGVyUHJvZmVzaW9uYWxQREYoZGF0YSwge1xuICAgICAgZm9ybWF0OiAnbGV0dGVyJyxcbiAgICAgIGRvd25sb2FkOiBmYWxzZVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRIZWFkZXIoZG9jOiBqc1BERiwgZGF0YTogVGVtcGxhdGVQZGZGbywgbWFyZ2luOiBudW1iZXIsIHk6IG51bWJlciwgcGFnZVdpZHRoOiBudW1iZXIsIGNvbG9yOiBudW1iZXJbXSk6IHZvaWQge1xuICAgIC8vIEZvbmRvIGRlbCBlbmNhYmV6YWRvXG4gICAgZG9jLnNldEZpbGxDb2xvcihjb2xvclswXSwgY29sb3JbMV0sIGNvbG9yWzJdKTtcbiAgICBkb2MucmVjdChtYXJnaW4sIHksIHBhZ2VXaWR0aCAtIChtYXJnaW4gKiAyKSwgODAsICdGJyk7XG5cbiAgICAvLyBUZXh0byBkZWwgZW5jYWJlemFkbyBlbiBibGFuY29cbiAgICBkb2Muc2V0VGV4dENvbG9yKDI1NSwgMjU1LCAyNTUpO1xuICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xuICAgIGRvYy5zZXRGb250U2l6ZSgxOCk7XG5cbiAgICBjb25zdCBjb21wYW55TmFtZSA9IGRhdGEubmFtZS50b1VwcGVyQ2FzZSgpO1xuICAgIGNvbnN0IG5hbWVXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgoY29tcGFueU5hbWUpO1xuICAgIGRvYy50ZXh0KGNvbXBhbnlOYW1lLCAocGFnZVdpZHRoIC0gbmFtZVdpZHRoKSAvIDIsIHkgKyAyNSk7XG5cbiAgICBkb2Muc2V0Rm9udFNpemUoMTIpO1xuICAgIGNvbnN0IG5pdFRleHQgPSBgTklUOiAke2RhdGEubml0fWA7XG4gICAgY29uc3Qgbml0V2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKG5pdFRleHQpO1xuICAgIGRvYy50ZXh0KG5pdFRleHQsIChwYWdlV2lkdGggLSBuaXRXaWR0aCkgLyAyLCB5ICsgNDUpO1xuXG4gICAgZG9jLnNldEZvbnRTaXplKDEwKTtcbiAgICBjb25zdCBhZGRyZXNzVGV4dCA9IGAke2RhdGEuYWRkcmVzc30gLSBURUw6ICR7ZGF0YS50ZWxlcGhvbmV9YDtcbiAgICBjb25zdCBhZGRyZXNzV2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKGFkZHJlc3NUZXh0KTtcbiAgICBkb2MudGV4dChhZGRyZXNzVGV4dCwgKHBhZ2VXaWR0aCAtIGFkZHJlc3NXaWR0aCkgLyAyLCB5ICsgNjUpO1xuXG4gICAgLy8gUmVzZXRlYXIgY29sb3IgZGUgdGV4dG9cbiAgICBkb2Muc2V0VGV4dENvbG9yKDAsIDAsIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGREb2N1bWVudFRpdGxlKGRvYzoganNQREYsIGRhdGE6IFRlbXBsYXRlUGRmRm8sIHk6IG51bWJlciwgcGFnZVdpZHRoOiBudW1iZXIsIGNvbG9yOiBudW1iZXJbXSk6IG51bWJlciB7XG4gICAgZG9jLnNldFRleHRDb2xvcihjb2xvclswXSwgY29sb3JbMV0sIGNvbG9yWzJdKTtcbiAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcbiAgICBkb2Muc2V0Rm9udFNpemUoMjApO1xuXG4gICAgY29uc3QgdGl0bGUgPSAnT1JERU4gREUgQ09NQlVTVElCTEUnO1xuICAgIGNvbnN0IHRpdGxlV2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKHRpdGxlKTtcbiAgICBkb2MudGV4dCh0aXRsZSwgKHBhZ2VXaWR0aCAtIHRpdGxlV2lkdGgpIC8gMiwgeSk7XG5cbiAgICBkb2Muc2V0Rm9udFNpemUoMTYpO1xuICAgIGNvbnN0IG51bWJlclRleHQgPSBgTsKwICR7ZGF0YS5jb25zZWN1dGl2ZX1gO1xuICAgIGNvbnN0IG51bWJlcldpZHRoID0gZG9jLmdldFRleHRXaWR0aChudW1iZXJUZXh0KTtcbiAgICBkb2MudGV4dChudW1iZXJUZXh0LCAocGFnZVdpZHRoIC0gbnVtYmVyV2lkdGgpIC8gMiwgeSArIDI1KTtcblxuICAgIGRvYy5zZXRUZXh0Q29sb3IoMCwgMCwgMCk7XG4gICAgcmV0dXJuIHkgKyA0MDtcbiAgfVxuXG4gIHByaXZhdGUgYWRkTWFpbkluZm8oZG9jOiBqc1BERiwgZGF0YTogVGVtcGxhdGVQZGZGbywgeTogbnVtYmVyLCBtYXJnaW46IG51bWJlciwgcGFnZVdpZHRoOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IHRhYmxlRGF0YSA9IFtcbiAgICAgIFtcbiAgICAgICAgeyBjb250ZW50OiAnw4FyZWE6Jywgc3R5bGVzOiB7IGZvbnRTdHlsZTogJ2JvbGQnLCBmaWxsQ29sb3I6IFsyNDAsIDI0MCwgMjQwXSB9IH0sXG4gICAgICAgIHsgY29udGVudDogZGF0YS5hcmVhLCBzdHlsZXM6IHt9IH0sXG4gICAgICAgIHsgY29udGVudDogJ0PDs2RpZ286Jywgc3R5bGVzOiB7IGZvbnRTdHlsZTogJ2JvbGQnLCBmaWxsQ29sb3I6IFsyNDAsIDI0MCwgMjQwXSB9IH0sXG4gICAgICAgIHsgY29udGVudDogZGF0YS5jb2RlLCBzdHlsZXM6IHt9IH0sXG4gICAgICAgIHsgY29udGVudDogJ0ZlY2hhOicsIHN0eWxlczogeyBmb250U3R5bGU6ICdib2xkJywgZmlsbENvbG9yOiBbMjQwLCAyNDAsIDI0MF0gfSB9LFxuICAgICAgICB7IGNvbnRlbnQ6IGRhdGEuZGF0ZSwgc3R5bGVzOiB7fSB9XG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICB7IGNvbnRlbnQ6ICdPcGVyYXJpbzonLCBzdHlsZXM6IHsgZm9udFN0eWxlOiAnYm9sZCcsIGZpbGxDb2xvcjogWzI0MCwgMjQwLCAyNDBdIH0gfSxcbiAgICAgICAgeyBjb250ZW50OiBkYXRhLnJlc3BvbnNpYmxlLCBzdHlsZXM6IHsgY29sU3BhbjogMyB9IH0sXG4gICAgICAgIHsgY29udGVudDogJ09kw7NtZXRybzonLCBzdHlsZXM6IHsgZm9udFN0eWxlOiAnYm9sZCcsIGZpbGxDb2xvcjogWzI0MCwgMjQwLCAyNDBdIH0gfSxcbiAgICAgICAgeyBjb250ZW50OiBkYXRhLm9kb21ldGVyLCBzdHlsZXM6IHt9IH1cbiAgICAgIF1cbiAgICBdO1xuXG4gICAgKGRvYyBhcyBhbnkpLmF1dG9UYWJsZSh7XG4gICAgICBzdGFydFk6IHksXG4gICAgICBib2R5OiB0YWJsZURhdGEsXG4gICAgICB0aGVtZTogJ2dyaWQnLFxuICAgICAgc3R5bGVzOiB7XG4gICAgICAgIGZvbnRTaXplOiAxMSxcbiAgICAgICAgY2VsbFBhZGRpbmc6IDgsXG4gICAgICAgIGxpbmVDb2xvcjogWzIwMCwgMjAwLCAyMDBdLFxuICAgICAgICBsaW5lV2lkdGg6IDAuNVxuICAgICAgfSxcbiAgICAgIGNvbHVtblN0eWxlczoge1xuICAgICAgICAwOiB7IGNlbGxXaWR0aDogNzAgfSxcbiAgICAgICAgMTogeyBjZWxsV2lkdGg6IDEwMCB9LFxuICAgICAgICAyOiB7IGNlbGxXaWR0aDogNzAgfSxcbiAgICAgICAgMzogeyBjZWxsV2lkdGg6IDgwIH0sXG4gICAgICAgIDQ6IHsgY2VsbFdpZHRoOiA3MCB9LFxuICAgICAgICA1OiB7IGNlbGxXaWR0aDogODAgfVxuICAgICAgfSxcbiAgICAgIG1hcmdpbjogeyBsZWZ0OiBtYXJnaW4sIHJpZ2h0OiBtYXJnaW4gfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIChkb2MgYXMgYW55KS5sYXN0QXV0b1RhYmxlLmZpbmFsWTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUHJvdmlkZXJJbmZvKGRvYzoganNQREYsIGRhdGE6IFRlbXBsYXRlUGRmRm8sIHk6IG51bWJlciwgbWFyZ2luOiBudW1iZXIsIHBhZ2VXaWR0aDogbnVtYmVyLCBjb2xvcjogbnVtYmVyW10pOiBudW1iZXIge1xuICAgIC8vIFTDrXR1bG8gZGUgc2VjY2nDs25cbiAgICBkb2Muc2V0VGV4dENvbG9yKGNvbG9yWzBdLCBjb2xvclsxXSwgY29sb3JbMl0pO1xuICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xuICAgIGRvYy5zZXRGb250U2l6ZSgxNCk7XG4gICAgY29uc3QgdGl0bGUgPSAnREFUT1MgREVMIFBST1ZFRURPUic7XG4gICAgY29uc3QgdGl0bGVXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgodGl0bGUpO1xuICAgIGRvYy50ZXh0KHRpdGxlLCAocGFnZVdpZHRoIC0gdGl0bGVXaWR0aCkgLyAyLCB5KTtcbiAgICBkb2Muc2V0VGV4dENvbG9yKDAsIDAsIDApO1xuXG4gICAgY29uc3QgdGFibGVEYXRhID0gW1xuICAgICAgW1xuICAgICAgICB7IGNvbnRlbnQ6ICdMdWdhcjonLCBzdHlsZXM6IHsgZm9udFN0eWxlOiAnYm9sZCcsIGZpbGxDb2xvcjogWzI0MCwgMjQwLCAyNDBdIH0gfSxcbiAgICAgICAgeyBjb250ZW50OiBkYXRhLm5hbWVQbGFjZSwgc3R5bGVzOiB7fSB9LFxuICAgICAgICB7IGNvbnRlbnQ6ICdEaXJlY2Npw7NuOicsIHN0eWxlczogeyBmb250U3R5bGU6ICdib2xkJywgZmlsbENvbG9yOiBbMjQwLCAyNDAsIDI0MF0gfSB9LFxuICAgICAgICB7IGNvbnRlbnQ6IGRhdGEuYWRkcmVzc1BsYWNlLCBzdHlsZXM6IHt9IH1cbiAgICAgIF1cbiAgICBdO1xuXG4gICAgKGRvYyBhcyBhbnkpLmF1dG9UYWJsZSh7XG4gICAgICBzdGFydFk6IHkgKyAyMCxcbiAgICAgIGJvZHk6IHRhYmxlRGF0YSxcbiAgICAgIHRoZW1lOiAnZ3JpZCcsXG4gICAgICBzdHlsZXM6IHtcbiAgICAgICAgZm9udFNpemU6IDExLFxuICAgICAgICBjZWxsUGFkZGluZzogOCxcbiAgICAgICAgbGluZUNvbG9yOiBbMjAwLCAyMDAsIDIwMF0sXG4gICAgICAgIGxpbmVXaWR0aDogMC41XG4gICAgICB9LFxuICAgICAgY29sdW1uU3R5bGVzOiB7XG4gICAgICAgIDA6IHsgY2VsbFdpZHRoOiA4MCB9LFxuICAgICAgICAxOiB7IGNlbGxXaWR0aDogMTYwIH0sXG4gICAgICAgIDI6IHsgY2VsbFdpZHRoOiA4MCB9LFxuICAgICAgICAzOiB7IGNlbGxXaWR0aDogMTUwIH1cbiAgICAgIH0sXG4gICAgICBtYXJnaW46IHsgbGVmdDogbWFyZ2luLCByaWdodDogbWFyZ2luIH1cbiAgICB9KTtcblxuICAgIHJldHVybiAoZG9jIGFzIGFueSkubGFzdEF1dG9UYWJsZS5maW5hbFk7XG4gIH1cblxuICBwcml2YXRlIGFkZFNlcnZpY2VEZXRhaWxzKGRvYzoganNQREYsIGRhdGE6IFRlbXBsYXRlUGRmRm8sIHk6IG51bWJlciwgbWFyZ2luOiBudW1iZXIsIHBhZ2VXaWR0aDogbnVtYmVyLCBjb2xvcjogbnVtYmVyW10pOiBudW1iZXIge1xuICAgIC8vIFTDrXR1bG8gZGUgc2VjY2nDs25cbiAgICBkb2Muc2V0VGV4dENvbG9yKGNvbG9yWzBdLCBjb2xvclsxXSwgY29sb3JbMl0pO1xuICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xuICAgIGRvYy5zZXRGb250U2l6ZSgxNCk7XG4gICAgY29uc3QgdGl0bGUgPSAnREVUQUxMRVMgREVMIFNFUlZJQ0lPJztcbiAgICBjb25zdCB0aXRsZVdpZHRoID0gZG9jLmdldFRleHRXaWR0aCh0aXRsZSk7XG4gICAgZG9jLnRleHQodGl0bGUsIChwYWdlV2lkdGggLSB0aXRsZVdpZHRoKSAvIDIsIHkpO1xuICAgIGRvYy5zZXRUZXh0Q29sb3IoMCwgMCwgMCk7XG5cbiAgICAvLyBQcmVwYXJhciB0ZXh0byBwYXJhIGNhbGN1bGFyIGFsdHVyYSBuZWNlc2FyaWFcbiAgICBjb25zdCBib3hZID0geSArIDIwO1xuICAgIGNvbnN0IGJveFdpZHRoID0gcGFnZVdpZHRoIC0gKG1hcmdpbiAqIDIpO1xuICAgIGNvbnN0IHRleHRNYXJnaW4gPSBtYXJnaW4gKyAxNTtcbiAgICBjb25zdCBtYXhXaWR0aCA9IGJveFdpZHRoIC0gMzA7XG4gICAgY29uc3QgbGluZUhlaWdodCA9IDE1O1xuICAgIGNvbnN0IG1pbkJveEhlaWdodCA9IDYwOyAvLyBBbHR1cmEgbcOtbmltYSBkZWwgY29udGVuZWRvclxuICAgIGNvbnN0IHBhZGRpbmcgPSA0MDsgLy8gUGFkZGluZyBzdXBlcmlvciBlIGluZmVyaW9yXG5cbiAgICAvLyBDYWxjdWxhciBsw61uZWFzIGRlIHRleHRvIG5lY2VzYXJpYXNcbiAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ25vcm1hbCcpO1xuICAgIGRvYy5zZXRGb250U2l6ZSgxMSk7XG5cbiAgICBsZXQgdG90YWxMaW5lcyA9IDA7XG5cbiAgICAvLyBDb250YXIgbMOtbmVhcyBkZWwgZGV0YWxsZVxuICAgIGlmIChkYXRhLmRldGFsbGUgJiYgZGF0YS5kZXRhbGxlLnRyaW0oKSkge1xuICAgICAgY29uc3QgZGV0YWxsZUxpbmVzID0gZG9jLnNwbGl0VGV4dFRvU2l6ZShkYXRhLmRldGFsbGUudHJpbSgpLCBtYXhXaWR0aCk7XG4gICAgICB0b3RhbExpbmVzICs9IGRldGFsbGVMaW5lcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gQ29udGFyIGzDrW5lYXMgZGUgbGEgZGVzY3JpcGNpw7NuIChpbmNsdXllIGV0aXF1ZXRhIFwiRGVzY3JpcGNpw7NuOlwiKVxuICAgIGlmIChkYXRhLmRlc2NyaXB0aW9uICYmIGRhdGEuZGVzY3JpcHRpb24udHJpbSgpKSB7XG4gICAgICB0b3RhbExpbmVzICs9IDI7IC8vIFVuYSBsw61uZWEgcGFyYSBcIkRlc2NyaXBjacOzbjpcIiArIGVzcGFjaW9cbiAgICAgIGNvbnN0IGRlc2NMaW5lcyA9IGRvYy5zcGxpdFRleHRUb1NpemUoZGF0YS5kZXNjcmlwdGlvbi50cmltKCksIG1heFdpZHRoKTtcbiAgICAgIHRvdGFsTGluZXMgKz0gZGVzY0xpbmVzLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvLyBDYWxjdWxhciBhbHR1cmEgbmVjZXNhcmlhIGJhc2FkYSBlbiBlbCBjb250ZW5pZG9cbiAgICBjb25zdCBjb250ZW50SGVpZ2h0ID0gTWF0aC5tYXgodG90YWxMaW5lcyAqIGxpbmVIZWlnaHQsIDMwKTsgLy8gTcOtbmltbyAzMHB0IHBhcmEgY29udGVuaWRvXG4gICAgY29uc3QgYm94SGVpZ2h0ID0gTWF0aC5tYXgobWluQm94SGVpZ2h0LCBjb250ZW50SGVpZ2h0ICsgcGFkZGluZyk7XG5cbiAgICAvLyBWZXJpZmljYXIgc2kgbmVjZXNpdGFtb3MgdW5hIG51ZXZhIHDDoWdpbmFcbiAgICBjb25zdCBwYWdlSGVpZ2h0ID0gZG9jLmludGVybmFsLnBhZ2VTaXplLmdldEhlaWdodCgpO1xuICAgIGNvbnN0IHJlbWFpbmluZ1NwYWNlID0gcGFnZUhlaWdodCAtIGJveFkgLSAxMDA7IC8vIERlamFyIGVzcGFjaW8gcGFyYSBmb290ZXJcblxuICAgIGxldCBmaW5hbEJveFkgPSBib3hZO1xuICAgIGlmIChib3hIZWlnaHQgPiByZW1haW5pbmdTcGFjZSkge1xuICAgICAgLy8gQcOxYWRpciBudWV2YSBww6FnaW5hXG4gICAgICBkb2MuYWRkUGFnZSgpO1xuICAgICAgZmluYWxCb3hZID0gbWFyZ2luICsgNDA7IC8vIFBvc2ljacOzbiBlbiBudWV2YSBww6FnaW5hXG4gICAgfVxuXG4gICAgLy8gRGlidWphciBjb250ZW5lZG9yIGNvbiBhbHR1cmEgZGluw6FtaWNhXG4gICAgLy8gRm9uZG8gZ3JpcyBjbGFyb1xuICAgIGRvYy5zZXRGaWxsQ29sb3IoMjUwLCAyNTAsIDI1MCk7XG4gICAgZG9jLnJlY3QobWFyZ2luLCBmaW5hbEJveFksIGJveFdpZHRoLCBib3hIZWlnaHQsICdGJyk7XG5cbiAgICAvLyBCb3JkZVxuICAgIGRvYy5zZXREcmF3Q29sb3IoMjAwLCAyMDAsIDIwMCk7XG4gICAgZG9jLnJlY3QobWFyZ2luLCBmaW5hbEJveFksIGJveFdpZHRoLCBib3hIZWlnaHQsICdTJyk7XG5cbiAgICAvLyBBw7FhZGlyIGNvbnRlbmlkbyBkZSB0ZXh0b1xuICAgIGxldCB0ZXh0WSA9IGZpbmFsQm94WSArIDIwO1xuXG4gICAgLy8gQcOxYWRpciBkZXRhbGxlIHNpIGV4aXN0ZVxuICAgIGlmIChkYXRhLmRldGFsbGUgJiYgZGF0YS5kZXRhbGxlLnRyaW0oKSkge1xuICAgICAgY29uc3QgZGV0YWxsZUxpbmVzID0gZG9jLnNwbGl0VGV4dFRvU2l6ZShkYXRhLmRldGFsbGUudHJpbSgpLCBtYXhXaWR0aCk7XG4gICAgICBkb2MudGV4dChkZXRhbGxlTGluZXMsIHRleHRNYXJnaW4sIHRleHRZKTtcbiAgICAgIHRleHRZICs9IGRldGFsbGVMaW5lcy5sZW5ndGggKiBsaW5lSGVpZ2h0ICsgMTA7IC8vIEVzcGFjaW8gZXh0cmEgZGVzcHXDqXMgZGVsIGRldGFsbGVcbiAgICB9XG5cbiAgICAvLyBBw7FhZGlyIGRlc2NyaXBjacOzbiBzaSBleGlzdGVcbiAgICBpZiAoZGF0YS5kZXNjcmlwdGlvbiAmJiBkYXRhLmRlc2NyaXB0aW9uLnRyaW0oKSkge1xuICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XG4gICAgICBkb2MudGV4dCgnRGVzY3JpcGNpw7NuOicsIHRleHRNYXJnaW4sIHRleHRZKTtcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnbm9ybWFsJyk7XG4gICAgICB0ZXh0WSArPSBsaW5lSGVpZ2h0O1xuXG4gICAgICBjb25zdCBkZXNjTGluZXMgPSBkb2Muc3BsaXRUZXh0VG9TaXplKGRhdGEuZGVzY3JpcHRpb24udHJpbSgpLCBtYXhXaWR0aCk7XG5cbiAgICAgIC8vIFZlcmlmaWNhciBzaSBuZWNlc2l0YW1vcyBtYW5lamFyIGNvbnRlbmlkbyBtdXkgbGFyZ29cbiAgICAgIGNvbnN0IHJlbWFpbmluZ0hlaWdodCA9IGZpbmFsQm94WSArIGJveEhlaWdodCAtIHRleHRZIC0gMjA7XG4gICAgICBjb25zdCBtYXhMaW5lc0luU3BhY2UgPSBNYXRoLmZsb29yKHJlbWFpbmluZ0hlaWdodCAvIGxpbmVIZWlnaHQpO1xuXG4gICAgICBpZiAoZGVzY0xpbmVzLmxlbmd0aCA+IG1heExpbmVzSW5TcGFjZSAmJiBtYXhMaW5lc0luU3BhY2UgPiAwKSB7XG4gICAgICAgIC8vIE1vc3RyYXIgbMOtbmVhcyBxdWUgY2FiZW4gZW4gZWwgZXNwYWNpbyBhY3R1YWxcbiAgICAgICAgY29uc3QgY3VycmVudExpbmVzID0gZGVzY0xpbmVzLnNsaWNlKDAsIG1heExpbmVzSW5TcGFjZSk7XG4gICAgICAgIGRvYy50ZXh0KGN1cnJlbnRMaW5lcywgdGV4dE1hcmdpbiwgdGV4dFkpO1xuXG4gICAgICAgIC8vIENvbnRpbnVhciBlbiBudWV2YSBww6FnaW5hIHNpIGhheSBtw6FzIGNvbnRlbmlkb1xuICAgICAgICBpZiAoZGVzY0xpbmVzLmxlbmd0aCA+IG1heExpbmVzSW5TcGFjZSkge1xuICAgICAgICAgIGRvYy5hZGRQYWdlKCk7XG4gICAgICAgICAgdGV4dFkgPSBtYXJnaW4gKyAyMDtcbiAgICAgICAgICBjb25zdCByZW1haW5pbmdMaW5lcyA9IGRlc2NMaW5lcy5zbGljZShtYXhMaW5lc0luU3BhY2UpO1xuICAgICAgICAgIGRvYy50ZXh0KHJlbWFpbmluZ0xpbmVzLCB0ZXh0TWFyZ2luLCB0ZXh0WSk7XG4gICAgICAgICAgcmV0dXJuIHRleHRZICsgKHJlbWFpbmluZ0xpbmVzLmxlbmd0aCAqIGxpbmVIZWlnaHQpICsgMjA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvYy50ZXh0KGRlc2NMaW5lcywgdGV4dE1hcmdpbiwgdGV4dFkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNpIG5vIGhheSBjb250ZW5pZG8sIG1vc3RyYXIgdW4gbWVuc2FqZVxuICAgIGlmICgoIWRhdGEuZGV0YWxsZSB8fCAhZGF0YS5kZXRhbGxlLnRyaW0oKSkgJiYgKCFkYXRhLmRlc2NyaXB0aW9uIHx8ICFkYXRhLmRlc2NyaXB0aW9uLnRyaW0oKSkpIHtcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnaXRhbGljJyk7XG4gICAgICBkb2Muc2V0Rm9udFNpemUoMTApO1xuICAgICAgZG9jLnNldFRleHRDb2xvcigxNTAsIDE1MCwgMTUwKTtcbiAgICAgIGRvYy50ZXh0KCdObyBzZSBoYW4gZXNwZWNpZmljYWRvIGRldGFsbGVzIGRlbCBzZXJ2aWNpby4nLCB0ZXh0TWFyZ2luLCB0ZXh0WSk7XG4gICAgICBkb2Muc2V0VGV4dENvbG9yKDAsIDAsIDApO1xuICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdub3JtYWwnKTtcbiAgICAgIGRvYy5zZXRGb250U2l6ZSgxMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbmFsQm94WSArIGJveEhlaWdodDtcbiAgfVxuXG5cbiAgcHJpdmF0ZSBhZGRBdXRob3JpemF0aW9uKGRvYzoganNQREYsIGRhdGE6IFRlbXBsYXRlUGRmRm8sIHk6IG51bWJlciwgbWFyZ2luOiBudW1iZXIsIHBhZ2VXaWR0aDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCB0YWJsZURhdGEgPSBbXG4gICAgICBbXG4gICAgICAgIHsgY29udGVudDogJ0FVVE9SSVpBREEgUE9SOicsIHN0eWxlczogeyBmb250U3R5bGU6ICdib2xkJywgZm9udFNpemU6IDEyLCBmaWxsQ29sb3I6IFsyNDAsIDI0MCwgMjQwXSB9IH0sXG4gICAgICAgIHsgY29udGVudDogZGF0YS5hcHByb3ZlZF9ieSwgc3R5bGVzOiB7IGZvbnRTaXplOiAxMiB9IH1cbiAgICAgIF1cbiAgICBdO1xuXG4gICAgKGRvYyBhcyBhbnkpLmF1dG9UYWJsZSh7XG4gICAgICBzdGFydFk6IHksXG4gICAgICBib2R5OiB0YWJsZURhdGEsXG4gICAgICB0aGVtZTogJ2dyaWQnLFxuICAgICAgc3R5bGVzOiB7XG4gICAgICAgIGNlbGxQYWRkaW5nOiAxMixcbiAgICAgICAgbGluZUNvbG9yOiBbMjAwLCAyMDAsIDIwMF0sXG4gICAgICAgIGxpbmVXaWR0aDogMC41XG4gICAgICB9LFxuICAgICAgY29sdW1uU3R5bGVzOiB7XG4gICAgICAgIDA6IHsgY2VsbFdpZHRoOiAxNTAgfSxcbiAgICAgICAgMTogeyBjZWxsV2lkdGg6IDMyMCB9XG4gICAgICB9LFxuICAgICAgbWFyZ2luOiB7IGxlZnQ6IG1hcmdpbiwgcmlnaHQ6IG1hcmdpbiB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gKGRvYyBhcyBhbnkpLmxhc3RBdXRvVGFibGUuZmluYWxZO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRGb290ZXIoZG9jOiBqc1BERiwgZGF0YTogVGVtcGxhdGVQZGZGbywgeTogbnVtYmVyLCBwYWdlV2lkdGg6IG51bWJlciwgY29sb3I6IG51bWJlcltdKTogdm9pZCB7XG4gICAgLy8gRm9uZG8gZGVsIHBpZSBkZSBww6FnaW5hXG4gICAgZG9jLnNldEZpbGxDb2xvcihjb2xvclswXSwgY29sb3JbMV0sIGNvbG9yWzJdKTtcbiAgICBkb2MucmVjdCg0MCwgeSwgcGFnZVdpZHRoIC0gODAsIDYwLCAnRicpO1xuXG4gICAgLy8gVGV4dG8gZW4gYmxhbmNvXG4gICAgZG9jLnNldFRleHRDb2xvcigyNTUsIDI1NSwgMjU1KTtcbiAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcbiAgICBkb2Muc2V0Rm9udFNpemUoMTIpO1xuXG4gICAgY29uc3QgaW5zdHJ1Y3Rpb24gPSAnRmF2b3IgYWRqdW50YXIgbGEgb3JkZW4gZGUgdmVudGEgbyBmYWN0dXJhJztcbiAgICBjb25zdCBpbnN0V2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKGluc3RydWN0aW9uKTtcbiAgICBkb2MudGV4dChpbnN0cnVjdGlvbiwgKHBhZ2VXaWR0aCAtIGluc3RXaWR0aCkgLyAyLCB5ICsgMjUpO1xuXG4gICAgZG9jLnNldEZvbnRTaXplKDEwKTtcbiAgICBjb25zdCBlbWFpbFdpZHRoID0gZG9jLmdldFRleHRXaWR0aChkYXRhLm1haWwpO1xuICAgIGRvYy50ZXh0KGRhdGEubWFpbCwgKHBhZ2VXaWR0aCAtIGVtYWlsV2lkdGgpIC8gMiwgeSArIDQ1KTtcblxuICAgIC8vIFJlc2V0ZWFyIGNvbG9yXG4gICAgZG9jLnNldFRleHRDb2xvcigwLCAwLCAwKTtcbiAgfVxuXG59XG4iXX0=
@@ -37,6 +37,27 @@ export class FunctionsService {
37
37
  });
38
38
  return uniqueArray;
39
39
  }
40
+ transformDate(date) {
41
+ if (!date) {
42
+ return '';
43
+ }
44
+ const dateObj = new Date(date);
45
+ const day = this.validateTwoDigitFormat(dateObj.getDate().toString());
46
+ const month = this.validateTwoDigitFormat((dateObj.getMonth() + 1).toString());
47
+ const year = dateObj.getFullYear();
48
+ return `${day}/${month}/${year}`;
49
+ }
50
+ formatNumber(value) {
51
+ if (value === null || value === undefined) {
52
+ return '$ 0';
53
+ }
54
+ return new Intl.NumberFormat('es-CO', {
55
+ style: 'currency',
56
+ currency: 'COP',
57
+ minimumFractionDigits: 0,
58
+ maximumFractionDigits: 0,
59
+ }).format(value);
60
+ }
40
61
  validateTwoDigitFormat(number) {
41
62
  if (number.length == 1)
42
63
  number = "0" + number;
@@ -51,4 +72,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
51
72
  providedIn: 'root'
52
73
  }]
53
74
  }], ctorParameters: function () { return []; } });
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvc2VydmljZXMvZnVuY3Rpb25zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLM0MsTUFBTSxPQUFPLGdCQUFnQjtJQUUzQixnQkFBZ0IsQ0FBQztJQUdqQixRQUFRLENBQUUsSUFBSTtRQUNiLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3pCLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUE7UUFDNUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2pCLENBQUM7SUFFRCxPQUFPLENBQUUsSUFBSTtRQUNYLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMzQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUN4QyxJQUFJLEdBQUcsR0FBSSxHQUFHLEdBQUcsZ0JBQWdCLENBQUE7UUFDakMsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDekMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ2hCLENBQUM7SUFFRCxNQUFNLENBQUUsSUFBSTtRQUNWLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtRQUNoRSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtRQUN2RSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLEtBQUssSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUNoRCxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQVc7UUFDdEIsSUFBRyxDQUFDLElBQUk7WUFBRSxPQUFPLEVBQUUsQ0FBQTtRQUNuQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQzNCLE9BQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2pELENBQUM7SUFFRCxlQUFlLENBQUMsSUFBUyxFQUFFLElBQVM7UUFDbEMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELHNCQUFzQixDQUFDLGFBQW9CO1FBQ3pDLE1BQU0sV0FBVyxHQUFVLEVBQUUsQ0FBQztRQUM5QixhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDdkI7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxNQUFjO1FBQzNDLElBQUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDO1lBQUUsTUFBTSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUE7UUFDNUMsT0FBTyxNQUFNLENBQUE7SUFDZixDQUFDOzs2R0FqRFUsZ0JBQWdCO2lIQUFoQixnQkFBZ0IsY0FGZixNQUFNOzJGQUVQLGdCQUFnQjtrQkFINUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEZ1bmN0aW9uc1NlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cblxuICBkYXRlRm9ybSAoZGF0ZSkge1xuICAgbGV0IGRhdGEgPSBuZXcgRGF0ZShkYXRlKVxuICAgbGV0IGNoYW5nZSA9IGAke2RhdGEuZ2V0RnVsbFllYXIoKX0vJHtkYXRhLmdldE1vbnRoKCkgKyAxfS8ke2RhdGEuZ2V0RGF0ZSgpfWBcbiAgICByZXR1cm4gKGNoYW5nZSlcbiAgfVxuXG4gIGRhdGVJc28gKGRhdGUpIHtcbiAgICBsZXQgZGF0YSA9IGRhdGUudG9TdHJpbmcoKTtcbiAgICBsZXQgY3V0ID0gZGF0YS5yZXBsYWNlKC8oLiopXFxULiovLCAnJDEnKVxuICAgIGxldCBhZGQgID0gYCR7Y3V0fVQwNTowMDowMC4wMDBaYFxuICAgIGxldCBmZWNoYSA9IGFkZC5yZXBsYWNlKC8oLiopXFxULiovLCAnJDEnKVxuICAgIHJldHVybiAoZmVjaGEpXG4gIH1cblxuICBkYXRlREIgKGRhdGUpIHtcbiAgICBsZXQgZGF5ID0gdGhpcy52YWxpZGF0ZVR3b0RpZ2l0Rm9ybWF0KGRhdGUuZ2V0RGF0ZSgpLnRvU3RyaW5nKCkpXG4gICAgbGV0IG1vbnRoID0gdGhpcy52YWxpZGF0ZVR3b0RpZ2l0Rm9ybWF0KChkYXRlLmdldE1vbnRoKCkrMSkudG9TdHJpbmcoKSlcbiAgICByZXR1cm4gYCR7ZGF0ZS5nZXRGdWxsWWVhcigpfS0ke21vbnRofS0ke2RheX1gXG4gIH1cblxuICBkYXRlV2l0aFRpbWUoZGF0ZTpzdHJpbmcpOnN0cmluZ3tcbiAgICBpZighZGF0ZSkgcmV0dXJuIFwiXCJcbiAgICB2YXIgdmFsdWUgPSBkYXRlLnNwbGl0KFwiVFwiKVxuICAgIHJldHVybiAgdmFsdWVbMF0gKyBcIiBcIiArIHZhbHVlWzFdLnNwbGl0KFwiLlwiKVswXVxuICB9XG5cbiAgYXJlT2JqZWN0c0VxdWFsKG9iajE6IGFueSwgb2JqMjogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iajEpID09PSBKU09OLnN0cmluZ2lmeShvYmoyKTtcbiAgfVxuXG4gIHJlbW92ZUR1cGxpY2F0ZU9iamVjdHMob3JpZ2luYWxBcnJheTogYW55W10pOiBhbnlbXSB7XG4gICAgY29uc3QgdW5pcXVlQXJyYXk6IGFueVtdID0gW107XG4gICAgb3JpZ2luYWxBcnJheS5mb3JFYWNoKChvYmopID0+IHtcbiAgICAgIGlmICghdW5pcXVlQXJyYXkuc29tZSgodW5pcXVlT2JqKSA9PiB0aGlzLmFyZU9iamVjdHNFcXVhbChvYmosIHVuaXF1ZU9iaikpKSB7XG4gICAgICAgIHVuaXF1ZUFycmF5LnB1c2gob2JqKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB1bmlxdWVBcnJheTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVUd29EaWdpdEZvcm1hdChudW1iZXI6IHN0cmluZyk6c3RyaW5ne1xuICAgIGlmKG51bWJlci5sZW5ndGggPT0gMSkgbnVtYmVyID0gXCIwXCIgKyBudW1iZXJcbiAgICByZXR1cm4gbnVtYmVyXG4gIH1cblxufVxuIl19
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvc2VydmljZXMvZnVuY3Rpb25zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLM0MsTUFBTSxPQUFPLGdCQUFnQjtJQUUzQixnQkFBZ0IsQ0FBQztJQUdqQixRQUFRLENBQUUsSUFBSTtRQUNiLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3pCLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUE7UUFDNUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2pCLENBQUM7SUFFRCxPQUFPLENBQUUsSUFBSTtRQUNYLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMzQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUN4QyxJQUFJLEdBQUcsR0FBSSxHQUFHLEdBQUcsZ0JBQWdCLENBQUE7UUFDakMsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDekMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ2hCLENBQUM7SUFFRCxNQUFNLENBQUUsSUFBSTtRQUNWLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtRQUNoRSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsc0JBQXNCLENB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L2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBGdW5jdGlvbnNTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG5cbiAgZGF0ZUZvcm0gKGRhdGUpIHtcbiAgIGxldCBkYXRhID0gbmV3IERhdGUoZGF0ZSlcbiAgIGxldCBjaGFuZ2UgPSBgJHtkYXRhLmdldEZ1bGxZZWFyKCl9LyR7ZGF0YS5nZXRNb250aCgpICsgMX0vJHtkYXRhLmdldERhdGUoKX1gXG4gICAgcmV0dXJuIChjaGFuZ2UpXG4gIH1cblxuICBkYXRlSXNvIChkYXRlKSB7XG4gICAgbGV0IGRhdGEgPSBkYXRlLnRvU3RyaW5nKCk7XG4gICAgbGV0IGN1dCA9IGRhdGEucmVwbGFjZSgvKC4qKVxcVC4qLywgJyQxJylcbiAgICBsZXQgYWRkICA9IGAke2N1dH1UMDU6MDA6MDAuMDAwWmBcbiAgICBsZXQgZmVjaGEgPSBhZGQucmVwbGFjZSgvKC4qKVxcVC4qLywgJyQxJylcbiAgICByZXR1cm4gKGZlY2hhKVxuICB9XG5cbiAgZGF0ZURCIChkYXRlKSB7XG4gICAgbGV0IGRheSA9IHRoaXMudmFsaWRhdGVUd29EaWdpdEZvcm1hdChkYXRlLmdldERhdGUoKS50b1N0cmluZygpKVxuICAgIGxldCBtb250aCA9IHRoaXMudmFsaWRhdGVUd29EaWdpdEZvcm1hdCgoZGF0ZS5nZXRNb250aCgpKzEpLnRvU3RyaW5nKCkpXG4gICAgcmV0dXJuIGAke2RhdGUuZ2V0RnVsbFllYXIoKX0tJHttb250aH0tJHtkYXl9YFxuICB9XG5cbiAgZGF0ZVdpdGhUaW1lKGRhdGU6c3RyaW5nKTpzdHJpbmd7XG4gICAgaWYoIWRhdGUpIHJldHVybiBcIlwiXG4gICAgdmFyIHZhbHVlID0gZGF0ZS5zcGxpdChcIlRcIilcbiAgICByZXR1cm4gIHZhbHVlWzBdICsgXCIgXCIgKyB2YWx1ZVsxXS5zcGxpdChcIi5cIilbMF1cbiAgfVxuXG4gIGFyZU9iamVjdHNFcXVhbChvYmoxOiBhbnksIG9iajI6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmoxKSA9PT0gSlNPTi5zdHJpbmdpZnkob2JqMik7XG4gIH1cblxuICByZW1vdmVEdXBsaWNhdGVPYmplY3RzKG9yaWdpbmFsQXJyYXk6IGFueVtdKTogYW55W10ge1xuICAgIGNvbnN0IHVuaXF1ZUFycmF5OiBhbnlbXSA9IFtdO1xuICAgIG9yaWdpbmFsQXJyYXkuZm9yRWFjaCgob2JqKSA9PiB7XG4gICAgICBpZiAoIXVuaXF1ZUFycmF5LnNvbWUoKHVuaXF1ZU9iaikgPT4gdGhpcy5hcmVPYmplY3RzRXF1YWwob2JqLCB1bmlxdWVPYmopKSkge1xuICAgICAgICB1bmlxdWVBcnJheS5wdXNoKG9iaik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdW5pcXVlQXJyYXk7XG4gIH1cblxuICB0cmFuc2Zvcm1EYXRlKGRhdGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFkYXRlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGNvbnN0IGRhdGVPYmogPSBuZXcgRGF0ZShkYXRlKTtcbiAgICBjb25zdCBkYXkgPSB0aGlzLnZhbGlkYXRlVHdvRGlnaXRGb3JtYXQoZGF0ZU9iai5nZXREYXRlKCkudG9TdHJpbmcoKSk7XG4gICAgY29uc3QgbW9udGggPSB0aGlzLnZhbGlkYXRlVHdvRGlnaXRGb3JtYXQoKGRhdGVPYmouZ2V0TW9udGgoKSArIDEpLnRvU3RyaW5nKCkpO1xuICAgIGNvbnN0IHllYXIgPSBkYXRlT2JqLmdldEZ1bGxZZWFyKCk7XG4gICAgcmV0dXJuIGAke2RheX0vJHttb250aH0vJHt5ZWFyfWA7XG4gIH1cblxuICBmb3JtYXROdW1iZXIodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAnJCAwJztcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdCgnZXMtQ08nLCB7XG4gICAgICBzdHlsZTogJ2N1cnJlbmN5JyxcbiAgICAgIGN1cnJlbmN5OiAnQ09QJyxcbiAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMCxcbiAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogMCxcbiAgICB9KS5mb3JtYXQodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVR3b0RpZ2l0Rm9ybWF0KG51bWJlcjogc3RyaW5nKTpzdHJpbmd7XG4gICAgaWYobnVtYmVyLmxlbmd0aCA9PSAxKSBudW1iZXIgPSBcIjBcIiArIG51bWJlclxuICAgIHJldHVybiBudW1iZXJcbiAgfVxuXG59XG4iXX0=