rapid-text-editor 1.0.4 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/rapid-text-editor.component.mjs +31 -9
- package/esm2020/lib/rapid-text-editor.module.mjs +6 -5
- package/fesm2015/rapid-text-editor.mjs +34 -11
- package/fesm2015/rapid-text-editor.mjs.map +1 -1
- package/fesm2020/rapid-text-editor.mjs +34 -11
- package/fesm2020/rapid-text-editor.mjs.map +1 -1
- package/lib/rapid-text-editor.component.d.ts +10 -4
- package/lib/rapid-text-editor.module.d.ts +4 -3
- package/package.json +1 -1
|
@@ -5,10 +5,14 @@ import * as i1 from "@angular/material/dialog";
|
|
|
5
5
|
import * as i2 from "@angular/material/icon";
|
|
6
6
|
import * as i3 from "@angular/common";
|
|
7
7
|
export class RapidTextEditorComponent {
|
|
8
|
-
constructor(dialog, el) {
|
|
8
|
+
constructor(dialog, el, renderer, elRef) {
|
|
9
9
|
this.dialog = dialog;
|
|
10
10
|
this.el = el;
|
|
11
|
+
this.renderer = renderer;
|
|
12
|
+
this.elRef = elRef;
|
|
11
13
|
this.contentCapture = false;
|
|
14
|
+
this.height = "300px";
|
|
15
|
+
this.width = "auto";
|
|
12
16
|
this.contentChange = new EventEmitter();
|
|
13
17
|
this.editorContent = '';
|
|
14
18
|
this.rows = 1;
|
|
@@ -29,6 +33,20 @@ export class RapidTextEditorComponent {
|
|
|
29
33
|
console.log('Content capture is disabled.');
|
|
30
34
|
}
|
|
31
35
|
}
|
|
36
|
+
ngOnChanges(changes) {
|
|
37
|
+
if (changes['height'] || changes['width']) {
|
|
38
|
+
this.applyDimensions();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
applyDimensions() {
|
|
42
|
+
const editorElement = this.elRef.nativeElement.querySelector('.dimension');
|
|
43
|
+
if (this.height) {
|
|
44
|
+
this.renderer.setStyle(editorElement, 'height', this.height);
|
|
45
|
+
}
|
|
46
|
+
if (this.width) {
|
|
47
|
+
this.renderer.setStyle(editorElement, 'width', this.width);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
32
50
|
ngAfterViewInit() {
|
|
33
51
|
const editor = this.el.nativeElement.querySelector('.editor');
|
|
34
52
|
if (!editor) {
|
|
@@ -116,7 +134,7 @@ export class RapidTextEditorComponent {
|
|
|
116
134
|
// });
|
|
117
135
|
// } -> for PNG
|
|
118
136
|
removeImage(index) {
|
|
119
|
-
this.uploadedImages.splice(index, 1);
|
|
137
|
+
this.uploadedImages.splice(index, 1);
|
|
120
138
|
}
|
|
121
139
|
insertImageInEditor(imageUrl) {
|
|
122
140
|
const editor = document.querySelector('.editor');
|
|
@@ -527,24 +545,28 @@ export class RapidTextEditorComponent {
|
|
|
527
545
|
// this.yourService.submitContent({ content }); // Replace with your service call
|
|
528
546
|
}
|
|
529
547
|
}
|
|
530
|
-
RapidTextEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: RapidTextEditorComponent, deps: [{ token: i1.MatDialog }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
531
|
-
RapidTextEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: RapidTextEditorComponent, selector: "rich-text-editor", inputs: { contentCapture: "contentCapture" }, outputs: { contentChange: "contentChange" }, providers: [
|
|
548
|
+
RapidTextEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: RapidTextEditorComponent, deps: [{ token: i1.MatDialog }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
549
|
+
RapidTextEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: RapidTextEditorComponent, selector: "app-rich-text-editor", inputs: { contentCapture: "contentCapture", height: "height", width: "width" }, outputs: { contentChange: "contentChange" }, providers: [
|
|
532
550
|
{
|
|
533
551
|
provide: NG_VALUE_ACCESSOR,
|
|
534
552
|
useExisting: forwardRef(() => RapidTextEditorComponent),
|
|
535
553
|
multi: true
|
|
536
554
|
}
|
|
537
|
-
], viewQueries: [{ propertyName: "editor", first: true, predicate: ["editor"], descendants: true, static: true }, { propertyName: "tableDialog", first: true, predicate: ["tableDialog"], descendants: true }], ngImport: i0, template: "<div class=\"rich-text-editor\">\r\n
|
|
555
|
+
], viewQueries: [{ propertyName: "editor", first: true, predicate: ["editor"], descendants: true, static: true }, { propertyName: "tableDialog", first: true, predicate: ["tableDialog"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"dimension\">\r\n\r\n\r\n <div class=\"rich-text-editor\">\r\n <!-- Toolbar -->\r\n <div class=\"toolbar\">\r\n \r\n <select class=\"select-wrapper\" (change)=\"setHeading($event)\">\r\n <option value=\"P\">Paragraph</option>\r\n <option value=\"H1\">H1</option>\r\n <option value=\"H2\">H2</option>\r\n <option value=\"H3\">H3</option>\r\n <option value=\"H4\">H4</option>\r\n <option value=\"H5\">H5</option>\r\n <option value=\"H6\">H6</option>\r\n </select>\r\n <button (click)=\"format('bold')\" aria-label=\"Bold\">\r\n <mat-icon>format_bold</mat-icon>\r\n </button>\r\n \r\n <button (click)=\"format('italic')\" aria-label=\"Italic\">\r\n <mat-icon>format_italic</mat-icon>\r\n </button>\r\n \r\n <button (click)=\"format('underline')\" aria-label=\"Underline\">\r\n <mat-icon>format_underline</mat-icon>\r\n </button>\r\n \r\n <button (click)=\"format('strikethrough')\" aria-label=\"Strikethrough\">\r\n <mat-icon>strikethrough_s</mat-icon>\r\n </button>\r\n \r\n <button (click)=\"format('justifyLeft')\" aria-label=\"Align Left\">\r\n <mat-icon>format_align_left</mat-icon>\r\n </button>\r\n \r\n <button (click)=\"format('justifyCenter')\" aria-label=\"Center\">\r\n <mat-icon>format_align_center</mat-icon>\r\n </button>\r\n \r\n <button (click)=\"format('justifyRight')\" aria-label=\"Align Right\">\r\n <mat-icon>format_align_right</mat-icon>\r\n </button>\r\n \r\n <button (click)=\"format('justifyFull')\" aria-label=\"Justify\">\r\n <mat-icon>format_align_justify</mat-icon>\r\n </button>\r\n \r\n <button (click)=\"format('insertUnorderedList')\" aria-label=\"Unordered List\">\r\n <mat-icon>format_list_bulleted</mat-icon>\r\n </button>\r\n \r\n <button (click)=\"format('insertOrderedList')\" aria-label=\"Ordered List\">\r\n <mat-icon>format_list_numbered</mat-icon>\r\n </button>\r\n \r\n \r\n \r\n <button color=\"secondary\" aria-label=\"Insert Image\" style=\"position: relative; display: inline-flex; align-items: center; justify-content: center;\">\r\n <input\r\n type=\"file\" \r\n (change)=\"insertImageToEditor($event)\"\r\n style=\"position: absolute; left: -50%; top: 0; width: 100%; height: 100%; opacity: 0; cursor: pointer;\"\r\n aria-hidden=\"true\" \r\n />\r\n \r\n <mat-icon style=\"pointer-events: none;\">insert_photo_outlined</mat-icon>\r\n </button>\r\n \r\n \r\n <button (click)=\"openTableDialog($event)\" color=\"secondary\" aria-label=\"Choose table rows and columns\">\r\n <mat-icon>border_all</mat-icon>\r\n </button>\r\n \r\n <button class=\"mb-1\" (click)=\"makeFirstRowHeader()\" color=\"secondary\" aria-label=\"Make Header\">\r\n <span style=\"font-size: 20px;\" class=\"material-symbols-outlined\">\r\n page_header\r\n </span>\r\n </button>\r\n \r\n \r\n \r\n </div>\r\n \r\n <!-- Editable Area -->\r\n <!-- (keypress)=\"onContentChange()\" need to be included -->\r\n <div class=\"editor\" id=\"editor\" contenteditable=\"true\" #editor (input)=\"submitContent()\" (blur)=\"onBlur()\" (drop)=\"drop($event)\" (dragover)=\"allowDrop($event)\" >\r\n <!-- Your content goes here --> \r\n </div>\r\n \r\n </div>\r\n \r\n <!-- <button mat-stroked-button class=\"submit\" (click)=\"submitContent()\">Submit</button> -->\r\n \r\n \r\n <ng-template #tableDialog let-dialogRef=\"dialogRef\">\r\n <h2 mat-dialog-title>Choose Table Size</h2>\r\n <mat-dialog-content>\r\n <div class=\"grid-container\">\r\n <div\r\n *ngFor=\"let cell of grid; let i = index\"\r\n [ngClass]=\"{\r\n 'grid-item': true,\r\n 'highlighted': i % 7 < cols && Math.floor(i / 7) < rows\r\n }\"\r\n (mouseenter)=\"updatePreview(i % 7 + 1, Math.floor(i / 7) + 1)\"\r\n (click)=\"updateSelection(i % 7 + 1, Math.floor(i / 7) + 1, dialogRef)\"\r\n ></div>\r\n </div>\r\n <p>{{ rows }} x {{ cols }} </p>\r\n </mat-dialog-content>\r\n </ng-template>\r\n \r\n <div>\r\n <input class=\"mt-2\" type=\"file\" placeholder=\"Upload your images here...\" (change)=\"insertImage($event)\" accept=\"image/png,image/*\" multiple />\r\n <div class=\"uploaded-images\" *ngIf=\"uploadedImages.length > 0\">\r\n <div *ngFor=\"let imageUrl of uploadedImages; let i = index\" class=\"image-preview\">\r\n <img [src]=\"imageUrl\" alt=\"Uploaded Image\" \r\n draggable=\"true\" width=\"100px\" height=\"100px\"\r\n (dragstart)=\"drag($event, imageUrl)\" />\r\n <mat-icon style=\"color: red;\r\n position: absolute\" (click)=\"removeImage(i)\">cancel</mat-icon>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ", styles: ["@charset \"UTF-8\";.rich-text-editor{border:1px solid #ccc;border-radius:5px}.editor{position:relative;min-height:300px;border:1px solid #ccc;padding:5px;overflow-y:auto;font-family:Calibri;outline:none!important;font-size:14px}button{width:20px;height:20px;background:none;border:none;margin-left:5px;cursor:pointer}button[mat-icon-button]{margin:0 4px;width:20px!important;height:20px;background:none;border:none}.small-icon-button{width:30px;height:30px;padding:4px}.small-icon-button mat-icon{font-size:16px}button[mat-icon-button]{position:relative;overflow:hidden}input[type=file]{padding:5px;cursor:pointer;margin-left:10px}.fileInput{display:flex;justify-content:center;align-items:center}.select-wrapper{display:inline-block;position:relative;width:150px}.select-wrapper select{appearance:none;width:100%;padding:10px 40px 10px 15px;font-size:16px;color:#333;background-color:#f4f4f4;border:1px solid #ddd;border-radius:5px;cursor:pointer;outline:none}.select-wrapper:after{content:\"\\25bc\";position:absolute;top:50%;right:15px;transform:translateY(-50%);pointer-events:none;color:#777;font-size:12px}.select-wrapper select:hover{background-color:#e9e9e9;border-color:#bbb}.select-wrapper select:focus{border-color:#007bff;background-color:#fff}.select-wrapper option{padding:8px;font-size:16px;color:#333;background-color:#fff}.toolbar{display:flex;flex-wrap:wrap;align-items:center;background-color:#f4f4f4;padding:10px;border-radius:8px;box-shadow:0 2px 8px #0000001a;gap:10px}.select-wrapper{padding:8px;font-size:14px;border:1px solid #ddd;border-radius:5px;cursor:pointer;background-color:#fff}.select-wrapper:focus{outline:none;border-color:#007bff}button{border:none;border-radius:5px;padding:8px;cursor:pointer;display:flex;align-items:center;justify-content:center}button:hover{color:#007bff}button:active{background-color:#0056b3}mat-icon{font-size:20px;color:inherit}input[type=number]{width:60px;padding:5px;font-size:14px;border:1px solid #ddd;border-radius:5px;text-align:center}input[type=file]{border:1px solid #ddd;border-radius:5px;padding:5px;font-size:14px;background-color:#fff;cursor:pointer}input[type=file]:hover{border-color:#007bff}.table{width:100px;height:30px;color:#007bff!important;font-weight:700;border:1px solid #007bff}.table:hover{background-color:#0056b3;color:#fff!important}.submit{margin-top:10px;width:100px;height:30px;color:#007bff!important;font-weight:700;border:1px solid #007bff}.submit:hover{border:none;background-color:#0056b3;color:#fff!important}.custom-dialog-container{width:auto;max-width:200px}.grid-container{display:grid;grid-template-columns:repeat(7,20px);grid-gap:5px;gap:5px}.grid-item{width:20px;height:20px;border:1px solid #ddd}.highlighted{background-color:#2196f3}div[contenteditable=false]{display:inline-block;position:relative;resize:both;overflow:hidden;border:1px dashed #ccc;margin:5px}div[contenteditable=false]:hover{border-color:#007bff}div[contenteditable=false] img{display:block;width:100%;height:auto}.uploaded-images{display:flex;flex-wrap:wrap;margin-bottom:20px}.image-preview{margin:10px;padding:5px;border:1px dashed #ccc;cursor:pointer}.image-preview img{max-width:100px;max-height:100px;object-fit:cover}.editor{border:1px solid #ccc;min-height:300px;padding:20px;position:relative}.remove_btn{position:relative;top:10px}\n"], components: [{ type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
538
556
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: RapidTextEditorComponent, decorators: [{
|
|
539
557
|
type: Component,
|
|
540
|
-
args: [{ selector: 'rich-text-editor', providers: [
|
|
558
|
+
args: [{ selector: 'app-rich-text-editor', providers: [
|
|
541
559
|
{
|
|
542
560
|
provide: NG_VALUE_ACCESSOR,
|
|
543
561
|
useExisting: forwardRef(() => RapidTextEditorComponent),
|
|
544
562
|
multi: true
|
|
545
563
|
}
|
|
546
|
-
], template: "<div class=\"rich-text-editor\">\r\n
|
|
547
|
-
}], ctorParameters: function () { return [{ type: i1.MatDialog }, { type: i0.ElementRef }]; }, propDecorators: { contentCapture: [{
|
|
564
|
+
], template: "<div class=\"dimension\">\r\n\r\n\r\n <div class=\"rich-text-editor\">\r\n <!-- Toolbar -->\r\n <div class=\"toolbar\">\r\n \r\n <select class=\"select-wrapper\" (change)=\"setHeading($event)\">\r\n <option value=\"P\">Paragraph</option>\r\n <option value=\"H1\">H1</option>\r\n <option value=\"H2\">H2</option>\r\n <option value=\"H3\">H3</option>\r\n <option value=\"H4\">H4</option>\r\n <option value=\"H5\">H5</option>\r\n <option value=\"H6\">H6</option>\r\n </select>\r\n <button (click)=\"format('bold')\" aria-label=\"Bold\">\r\n <mat-icon>format_bold</mat-icon>\r\n </button>\r\n \r\n <button (click)=\"format('italic')\" aria-label=\"Italic\">\r\n <mat-icon>format_italic</mat-icon>\r\n </button>\r\n \r\n <button (click)=\"format('underline')\" aria-label=\"Underline\">\r\n <mat-icon>format_underline</mat-icon>\r\n </button>\r\n \r\n <button (click)=\"format('strikethrough')\" aria-label=\"Strikethrough\">\r\n <mat-icon>strikethrough_s</mat-icon>\r\n </button>\r\n \r\n <button (click)=\"format('justifyLeft')\" aria-label=\"Align Left\">\r\n <mat-icon>format_align_left</mat-icon>\r\n </button>\r\n \r\n <button (click)=\"format('justifyCenter')\" aria-label=\"Center\">\r\n <mat-icon>format_align_center</mat-icon>\r\n </button>\r\n \r\n <button (click)=\"format('justifyRight')\" aria-label=\"Align Right\">\r\n <mat-icon>format_align_right</mat-icon>\r\n </button>\r\n \r\n <button (click)=\"format('justifyFull')\" aria-label=\"Justify\">\r\n <mat-icon>format_align_justify</mat-icon>\r\n </button>\r\n \r\n <button (click)=\"format('insertUnorderedList')\" aria-label=\"Unordered List\">\r\n <mat-icon>format_list_bulleted</mat-icon>\r\n </button>\r\n \r\n <button (click)=\"format('insertOrderedList')\" aria-label=\"Ordered List\">\r\n <mat-icon>format_list_numbered</mat-icon>\r\n </button>\r\n \r\n \r\n \r\n <button color=\"secondary\" aria-label=\"Insert Image\" style=\"position: relative; display: inline-flex; align-items: center; justify-content: center;\">\r\n <input\r\n type=\"file\" \r\n (change)=\"insertImageToEditor($event)\"\r\n style=\"position: absolute; left: -50%; top: 0; width: 100%; height: 100%; opacity: 0; cursor: pointer;\"\r\n aria-hidden=\"true\" \r\n />\r\n \r\n <mat-icon style=\"pointer-events: none;\">insert_photo_outlined</mat-icon>\r\n </button>\r\n \r\n \r\n <button (click)=\"openTableDialog($event)\" color=\"secondary\" aria-label=\"Choose table rows and columns\">\r\n <mat-icon>border_all</mat-icon>\r\n </button>\r\n \r\n <button class=\"mb-1\" (click)=\"makeFirstRowHeader()\" color=\"secondary\" aria-label=\"Make Header\">\r\n <span style=\"font-size: 20px;\" class=\"material-symbols-outlined\">\r\n page_header\r\n </span>\r\n </button>\r\n \r\n \r\n \r\n </div>\r\n \r\n <!-- Editable Area -->\r\n <!-- (keypress)=\"onContentChange()\" need to be included -->\r\n <div class=\"editor\" id=\"editor\" contenteditable=\"true\" #editor (input)=\"submitContent()\" (blur)=\"onBlur()\" (drop)=\"drop($event)\" (dragover)=\"allowDrop($event)\" >\r\n <!-- Your content goes here --> \r\n </div>\r\n \r\n </div>\r\n \r\n <!-- <button mat-stroked-button class=\"submit\" (click)=\"submitContent()\">Submit</button> -->\r\n \r\n \r\n <ng-template #tableDialog let-dialogRef=\"dialogRef\">\r\n <h2 mat-dialog-title>Choose Table Size</h2>\r\n <mat-dialog-content>\r\n <div class=\"grid-container\">\r\n <div\r\n *ngFor=\"let cell of grid; let i = index\"\r\n [ngClass]=\"{\r\n 'grid-item': true,\r\n 'highlighted': i % 7 < cols && Math.floor(i / 7) < rows\r\n }\"\r\n (mouseenter)=\"updatePreview(i % 7 + 1, Math.floor(i / 7) + 1)\"\r\n (click)=\"updateSelection(i % 7 + 1, Math.floor(i / 7) + 1, dialogRef)\"\r\n ></div>\r\n </div>\r\n <p>{{ rows }} x {{ cols }} </p>\r\n </mat-dialog-content>\r\n </ng-template>\r\n \r\n <div>\r\n <input class=\"mt-2\" type=\"file\" placeholder=\"Upload your images here...\" (change)=\"insertImage($event)\" accept=\"image/png,image/*\" multiple />\r\n <div class=\"uploaded-images\" *ngIf=\"uploadedImages.length > 0\">\r\n <div *ngFor=\"let imageUrl of uploadedImages; let i = index\" class=\"image-preview\">\r\n <img [src]=\"imageUrl\" alt=\"Uploaded Image\" \r\n draggable=\"true\" width=\"100px\" height=\"100px\"\r\n (dragstart)=\"drag($event, imageUrl)\" />\r\n <mat-icon style=\"color: red;\r\n position: absolute\" (click)=\"removeImage(i)\">cancel</mat-icon>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ", styles: ["@charset \"UTF-8\";.rich-text-editor{border:1px solid #ccc;border-radius:5px}.editor{position:relative;min-height:300px;border:1px solid #ccc;padding:5px;overflow-y:auto;font-family:Calibri;outline:none!important;font-size:14px}button{width:20px;height:20px;background:none;border:none;margin-left:5px;cursor:pointer}button[mat-icon-button]{margin:0 4px;width:20px!important;height:20px;background:none;border:none}.small-icon-button{width:30px;height:30px;padding:4px}.small-icon-button mat-icon{font-size:16px}button[mat-icon-button]{position:relative;overflow:hidden}input[type=file]{padding:5px;cursor:pointer;margin-left:10px}.fileInput{display:flex;justify-content:center;align-items:center}.select-wrapper{display:inline-block;position:relative;width:150px}.select-wrapper select{appearance:none;width:100%;padding:10px 40px 10px 15px;font-size:16px;color:#333;background-color:#f4f4f4;border:1px solid #ddd;border-radius:5px;cursor:pointer;outline:none}.select-wrapper:after{content:\"\\25bc\";position:absolute;top:50%;right:15px;transform:translateY(-50%);pointer-events:none;color:#777;font-size:12px}.select-wrapper select:hover{background-color:#e9e9e9;border-color:#bbb}.select-wrapper select:focus{border-color:#007bff;background-color:#fff}.select-wrapper option{padding:8px;font-size:16px;color:#333;background-color:#fff}.toolbar{display:flex;flex-wrap:wrap;align-items:center;background-color:#f4f4f4;padding:10px;border-radius:8px;box-shadow:0 2px 8px #0000001a;gap:10px}.select-wrapper{padding:8px;font-size:14px;border:1px solid #ddd;border-radius:5px;cursor:pointer;background-color:#fff}.select-wrapper:focus{outline:none;border-color:#007bff}button{border:none;border-radius:5px;padding:8px;cursor:pointer;display:flex;align-items:center;justify-content:center}button:hover{color:#007bff}button:active{background-color:#0056b3}mat-icon{font-size:20px;color:inherit}input[type=number]{width:60px;padding:5px;font-size:14px;border:1px solid #ddd;border-radius:5px;text-align:center}input[type=file]{border:1px solid #ddd;border-radius:5px;padding:5px;font-size:14px;background-color:#fff;cursor:pointer}input[type=file]:hover{border-color:#007bff}.table{width:100px;height:30px;color:#007bff!important;font-weight:700;border:1px solid #007bff}.table:hover{background-color:#0056b3;color:#fff!important}.submit{margin-top:10px;width:100px;height:30px;color:#007bff!important;font-weight:700;border:1px solid #007bff}.submit:hover{border:none;background-color:#0056b3;color:#fff!important}.custom-dialog-container{width:auto;max-width:200px}.grid-container{display:grid;grid-template-columns:repeat(7,20px);grid-gap:5px;gap:5px}.grid-item{width:20px;height:20px;border:1px solid #ddd}.highlighted{background-color:#2196f3}div[contenteditable=false]{display:inline-block;position:relative;resize:both;overflow:hidden;border:1px dashed #ccc;margin:5px}div[contenteditable=false]:hover{border-color:#007bff}div[contenteditable=false] img{display:block;width:100%;height:auto}.uploaded-images{display:flex;flex-wrap:wrap;margin-bottom:20px}.image-preview{margin:10px;padding:5px;border:1px dashed #ccc;cursor:pointer}.image-preview img{max-width:100px;max-height:100px;object-fit:cover}.editor{border:1px solid #ccc;min-height:300px;padding:20px;position:relative}.remove_btn{position:relative;top:10px}\n"] }]
|
|
565
|
+
}], ctorParameters: function () { return [{ type: i1.MatDialog }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ElementRef }]; }, propDecorators: { contentCapture: [{
|
|
566
|
+
type: Input
|
|
567
|
+
}], height: [{
|
|
568
|
+
type: Input
|
|
569
|
+
}], width: [{
|
|
548
570
|
type: Input
|
|
549
571
|
}], contentChange: [{
|
|
550
572
|
type: Output
|
|
@@ -555,4 +577,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
|
|
|
555
577
|
type: ViewChild,
|
|
556
578
|
args: ['tableDialog']
|
|
557
579
|
}] } });
|
|
558
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFwaWQtdGV4dC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvcmFwaWQtdGV4dC1lZGl0b3Ivc3JjL2xpYi9yYXBpZC10ZXh0LWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9yYXBpZC10ZXh0LWVkaXRvci9zcmMvbGliL3JhcGlkLXRleHQtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFFLE1BQU0sRUFBVSxTQUFTLEVBQWUsVUFBVSxFQUFFLFlBQVksRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFFN0ksT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQWV6RSxNQUFNLE9BQU8sd0JBQXdCO0lBZ0JuQyxZQUFvQixNQUFpQixFQUFVLEVBQWM7UUFBekMsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUFVLE9BQUUsR0FBRixFQUFFLENBQVk7UUFicEQsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFDL0Isa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRzdDLGtCQUFhLEdBQVcsRUFBRSxDQUFDO1FBQ25DLFNBQUksR0FBVyxDQUFDLENBQUM7UUFDakIsU0FBSSxHQUFXLENBQUMsQ0FBQztRQUNqQixTQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QixTQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ1osbUJBQWMsR0FBYSxFQUFFLENBQUM7UUEwQzlCLG9DQUFvQztRQUU1QixhQUFRLEdBQUcsQ0FBQyxPQUFlLEVBQUUsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUNuQyxjQUFTLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBeEMzQixPQUFPLENBQUMsR0FBRyxD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LCBWaWV3Q2hpbGQsIFRlbXBsYXRlUmVmLCBmb3J3YXJkUmVmLCBFdmVudEVtaXR0ZXIsIEFmdGVyVmlld0luaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncmljaC10ZXh0LWVkaXRvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9yYXBpZC10ZXh0LWVkaXRvci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JhcGlkLXRleHQtZWRpdG9yLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUmFwaWRUZXh0RWRpdG9yQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG4gIFxufSlcbmV4cG9ydCBjbGFzcyBSYXBpZFRleHRFZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcblxuXG4gIEBJbnB1dCgpIGNvbnRlbnRDYXB0dXJlOiBib29sZWFuID0gZmFsc2U7XG4gIEBPdXRwdXQoKSBjb250ZW50Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBWaWV3Q2hpbGQoJ2VkaXRvcicsIHsgc3RhdGljOiB0cnVlIH0pIGVkaXRvciE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3RhYmxlRGlhbG9nJykgdGFibGVEaWFsb2chOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBwcml2YXRlIGVkaXRvckNvbnRlbnQ6IHN0cmluZyA9ICcnO1xuICByb3dzOiBudW1iZXIgPSAxO1xuICBjb2xzOiBudW1iZXIgPSAxO1xuICBncmlkID0gQXJyYXkoNDkpLmZpbGwoMCk7XG4gIE1hdGggPSBNYXRoO1xuICB1cGxvYWRlZEltYWdlczogc3RyaW5nW10gPSBbXTtcblxuXG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZywgcHJpdmF0ZSBlbDogRWxlbWVudFJlZikge1xuICAgIGNvbnNvbGUubG9nKCdCdWlsZCAtMScpXG4gIH1cbiAgXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbnRlbnRDYXB0dXJlKSB7XG4gICAgICBjb25zb2xlLmxvZygnQ29udGVudCBjYXB0dXJlIGlzIGVuYWJsZWQuJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKCdDb250ZW50IGNhcHR1cmUgaXMgZGlzYWJsZWQuJyk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yJyk7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0VkaXRvciBlbGVtZW50IG5vdCBmb3VuZC4nKTtcbiAgICB9XG4gIH1cblxuICBvbkNvbnRlbnRDaGFuZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29udGVudENhcHR1cmUpIHtcbiAgICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yJyk7XG4gICAgICBpZiAoZWRpdG9yKSB7XG4gICAgICAgIHRoaXMuZWRpdG9yQ29udGVudCA9IGVkaXRvci5pbm5lckhUTUw7XG4gICAgICAgIGNvbnNvbGUubG9nKCdDYXB0dXJlZCBDb250ZW50IChDaGlsZCk6JywgdGhpcy5lZGl0b3JDb250ZW50KTtcbiAgICAgICAgdGhpcy5jb250ZW50Q2hhbmdlLmVtaXQodGhpcy5lZGl0b3JDb250ZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0VkaXRvciBlbGVtZW50IG5vdCBmb3VuZC4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBcblxuICBnZXRDb250ZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yQ29udGVudDtcbiAgfVxuXG4gIC8vVHdvIFdheSBEYXRhIEJpbmRpbmcgRnVuY3Rpb25hbGl0eVxuXG4gIHByaXZhdGUgb25DaGFuZ2UgPSAoY29udGVudDogc3RyaW5nKSA9PiB7fTtcbiAgcHJpdmF0ZSBvblRvdWNoZWQgPSAoKSA9PiB7fTtcblxuICAvLyBDYWxsZWQgYnkgQW5ndWxhciB0byB1cGRhdGUgdGhlIHZhbHVlIHByb2dyYW1tYXRpY2FsbHlcbiAgd3JpdGVWYWx1ZShjb250ZW50OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lZGl0b3IgJiYgdGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSBjb250ZW50IHx8ICcnO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlZ2lzdGVycyB0aGUgb25DaGFuZ2UgY2FsbGJhY2sgdG8gbm90aWZ5IEFuZ3VsYXIgb2YgY29udGVudCBjaGFuZ2VzXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChjb250ZW50OiBzdHJpbmcpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICAvLyBSZWdpc3RlcnMgdGhlIG9uVG91Y2hlZCBjYWxsYmFjayBmb3IgYmx1ciBldmVudHNcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cblxuICBvbkJsdXIoKSB7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgfVxuXG5cblxuICBmb3JtYXQoY29tbWFuZDogc3RyaW5nKTogdm9pZCB7XG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoY29tbWFuZCwgZmFsc2UsICcnKTtcbiAgfVxuXG4gIHNldEhlYWRpbmcoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxTZWxlY3RFbGVtZW50KS52YWx1ZTtcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnZm9ybWF0QmxvY2snLCBmYWxzZSwgdmFsdWUpO1xuICB9XG5cbiAgLy9JbWFnZSBTZWN0aW9uXG4gIFxuICBhbGxvd0Ryb3AoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IFxuICB9XG5cbiAgLy8gSGFuZGxlIGltYWdlIGRyYWcgc3RhcnRcbiAgZHJhZyhldmVudDogRHJhZ0V2ZW50LCBpbWFnZVVybDogc3RyaW5nKTogdm9pZCB7XG4gICAgZXZlbnQuZGF0YVRyYW5zZmVyPy5zZXREYXRhKFwidGV4dFwiLCBpbWFnZVVybCk7IFxuICB9XG5cbiAgLy8gSGFuZGxlIGRyb3AgZXZlbnQgaW4gdGhlIGVkaXRvclxuICBkcm9wKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBcbiAgICBjb25zdCBpbWFnZVVybCA9IGV2ZW50LmRhdGFUcmFuc2Zlcj8uZ2V0RGF0YShcInRleHRcIik7IFxuICAgIGlmIChpbWFnZVVybCkge1xuICAgICAgdGhpcy5pbnNlcnRJbWFnZUluRWRpdG9yKGltYWdlVXJsKTsgXG4gICAgfVxuICB9XG5cbiAgLy8gaW5zZXJ0SW1hZ2UoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAvLyAgIGNvbnN0IGZpbGVzOiBGaWxlTGlzdCA9IGV2ZW50LnRhcmdldC5maWxlcztcbiAgXG4gIC8vICAgaWYgKCFmaWxlcyB8fCBmaWxlcy5sZW5ndGggPT09IDApIHtcbiAgLy8gICAgIGNvbnNvbGUuZXJyb3IoJ05vIGZpbGVzIHNlbGVjdGVkLicpO1xuICAvLyAgICAgcmV0dXJuO1xuICAvLyAgIH1cbiAgXG4gIC8vICAgQXJyYXkuZnJvbShmaWxlcykuZm9yRWFjaCgoZmlsZSkgPT4ge1xuICAvLyAgICAgLy8gQ2hlY2sgZmlsZSB0eXBlXG4gIC8vICAgICBpZiAoZmlsZS50eXBlICE9PSAnaW1hZ2UvcG5nJyAmJiAhZmlsZS50eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpKSB7XG4gIC8vICAgICAgIGNvbnNvbGUuZXJyb3IoJ1Vuc3VwcG9ydGVkIGZpbGUgdHlwZTonLCBmaWxlLnR5cGUpO1xuICAvLyAgICAgICByZXR1cm47XG4gIC8vICAgICB9XG4gIFxuICAvLyAgICAgLy8gUmVhZCB0aGUgaW1hZ2UgZmlsZVxuICAvLyAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgLy8gICAgIHJlYWRlci5vbmxvYWQgPSAoZTogYW55KSA9PiB7XG4gIC8vICAgICAgIGNvbnN0IGltYWdlVXJsID0gZS50YXJnZXQucmVzdWx0O1xuICBcbiAgLy8gICAgICAgLy8gQWRkIGltYWdlIHRvIHRoZSB1cGxvYWRlZCBpbWFnZXMgbGlzdFxuICAvLyAgICAgICB0aGlzLnVwbG9hZGVkSW1hZ2VzLnB1c2goaW1hZ2VVcmwpO1xuICBcbiAgLy8gICAgICAgLy8gQ2FsbCBpbnNlcnRJbWFnZUluRWRpdG9yIHRvIGFkZCB0aGUgaW1hZ2UgdG8gdGhlIGVkaXRvclxuICAvLyAgICAgICB0aGlzLmluc2VydEltYWdlSW5FZGl0b3IoaW1hZ2VVcmwpO1xuICAvLyAgICAgfTtcbiAgLy8gICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAvLyAgIH0pO1xuICAvLyB9IC0+IGZvciBQTkdcblxuICByZW1vdmVJbWFnZShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy51cGxvYWRlZEltYWdlcy5zcGxpY2UoaW5kZXgsIDEpOyAvLyBSZW1vdmUgdGhlIGltYWdlIGZyb20gdGhlIGFycmF5XG4gIH1cbiAgXG4gIGluc2VydEltYWdlSW5FZGl0b3IoaW1hZ2VVcmw6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5lZGl0b3InKSBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRWRpdG9yIGVsZW1lbnQgbm90IGZvdW5kLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgXG4gICAgLy8gQ3JlYXRlIGltYWdlIGVsZW1lbnRcbiAgICBjb25zdCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICBpbWcuc3JjID0gaW1hZ2VVcmw7XG4gICAgaW1nLnN0eWxlLm1heFdpZHRoID0gJzEwMCUnO1xuICAgIGltZy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICBpbWcuc3R5bGUud2lkdGggPSAnMzAwcHgnOyBcbiAgICBpbWcuc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nO1xuICBcbiAgICAvLyBDcmVhdGUgYSB3cmFwcGVyIGFyb3VuZCB0aGUgaW1hZ2UgdG8gYWxsb3cgcmVzaXppbmdcbiAgICBjb25zdCB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgd3JhcHBlci5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XG4gICAgd3JhcHBlci5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7ICAvLyBFbnN1cmVzIHRoZSB3cmFwcGVyIG9ubHkgdGFrZXMgdXAgc3BhY2UgZm9yIHRoZSBpbWFnZVxuICAgIHdyYXBwZXIuc3R5bGUubWFyZ2luID0gJzEwcHgnO1xuICAgIHdyYXBwZXIuc3R5bGUucGFkZGluZyA9ICc1cHgnO1xuICAgIHdyYXBwZXIuc3R5bGUuYm9yZGVyID0gJzFweCBkYXNoZWQgI2NjYyc7IC8vIE9wdGlvbmFsIGJvcmRlciB0byBpbmRpY2F0ZSB0aGUgaW1hZ2UgYXJlYVxuICBcbiAgICAvLyBBcHBlbmQgdGhlIGltYWdlIHRvIHRoZSB3cmFwcGVyXG4gICAgd3JhcHBlci5hcHBlbmRDaGlsZChpbWcpO1xuICBcbiAgICAvLyBBcHBlbmQgdGhlIHdyYXBwZXIgdG8gdGhlIGVkaXRvclxuICAgIGVkaXRvci5hcHBlbmRDaGlsZCh3cmFwcGVyKTtcbiAgXG4gICAgLy8gTWFrZSB0aGUgaW1hZ2UgcmVzaXphYmxlXG4gICAgdGhpcy5tYWtlSW1hZ2VSZXNpemFibGUod3JhcHBlciwgaW1nKTtcbiAgXG4gICAgLy8gT3B0aW9uYWxseSwgYWRkIGEgdGV4dCBub2RlIHRvIG1haW50YWluIGN1cnNvciBwb3NpdGlvbiBhZnRlciBhcHBlbmRpbmcgdGhlIGltYWdlXG4gICAgY29uc3QgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnXFx1MjAwQicpOyAgLy8gSW52aXNpYmxlIGNoYXJhY3RlciB0byBtYWludGFpbiBwb3NpdGlvblxuICAgIGVkaXRvci5hcHBlbmRDaGlsZCh0ZXh0Tm9kZSk7XG4gICAgXG4gICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgIHJhbmdlLnNldFN0YXJ0QWZ0ZXIod3JhcHBlcik7XG4gICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7XG4gIFxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICAgIH1cbiAgfVxuICBcbiAgbWFrZUltYWdlUmVzaXphYmxlKHdyYXBwZXI6IEhUTUxFbGVtZW50LCBpbWc6IEhUTUxJbWFnZUVsZW1lbnQpOiB2b2lkIHtcbiAgICBsZXQgaXNSZXNpemluZyA9IGZhbHNlO1xuICAgIGxldCBzdGFydFggPSAwO1xuICAgIGxldCBzdGFydFkgPSAwO1xuICAgIGxldCBzdGFydFdpZHRoID0gMDtcbiAgICBsZXQgc3RhcnRIZWlnaHQgPSAwO1xuICBcbiAgICAvLyBDcmVhdGUgcmVzaXplIGhhbmRsZXMgZm9yIHRoZSBpbWFnZVxuICAgIGNvbnN0IGNyZWF0ZVJlc2l6ZUhhbmRsZSA9IChcbiAgICAgIGN1cnNvcjogc3RyaW5nLFxuICAgICAgcG9zaXRpb25TdHlsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gICAgICByZXNpemVDYWxsYmFjazogKGRlbHRhWDogbnVtYmVyLCBkZWx0YVk6IG51bWJlcikgPT4gdm9pZFxuICAgICkgPT4ge1xuICAgICAgY29uc3QgaGFuZGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBoYW5kbGUuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgaGFuZGxlLnN0eWxlLndpZHRoID0gJzEwcHgnO1xuICAgICAgaGFuZGxlLnN0eWxlLmhlaWdodCA9ICcxMHB4JztcbiAgICAgIGhhbmRsZS5zdHlsZS5iYWNrZ3JvdW5kID0gJ3JnYmEoMCwgMCwgMCwgMC41KSc7XG4gICAgICBoYW5kbGUuc3R5bGUuY3Vyc29yID0gY3Vyc29yO1xuICAgICAgT2JqZWN0LmFzc2lnbihoYW5kbGUuc3R5bGUsIHBvc2l0aW9uU3R5bGVzKTtcbiAgXG4gICAgICBoYW5kbGUuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKHJlc2l6ZUV2ZW50KSA9PiB7XG4gICAgICAgIGlzUmVzaXppbmcgPSB0cnVlO1xuICAgICAgICBzdGFydFggPSByZXNpemVFdmVudC5jbGllbnRYO1xuICAgICAgICBzdGFydFkgPSByZXNpemVFdmVudC5jbGllbnRZO1xuICAgICAgICBzdGFydFdpZHRoID0gaW1nLm9mZnNldFdpZHRoO1xuICAgICAgICBzdGFydEhlaWdodCA9IGltZy5vZmZzZXRIZWlnaHQ7XG4gIFxuICAgICAgICBjb25zdCBvbk1vdXNlTW92ZSA9IChtb3ZlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoaXNSZXNpemluZykge1xuICAgICAgICAgICAgY29uc3QgZGVsdGFYID0gbW92ZUV2ZW50LmNsaWVudFggLSBzdGFydFg7XG4gICAgICAgICAgICBjb25zdCBkZWx0YVkgPSBtb3ZlRXZlbnQuY2xpZW50WSAtIHN0YXJ0WTtcbiAgICAgICAgICAgIHJlc2l6ZUNhbGxiYWNrKGRlbHRhWCwgZGVsdGFZKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gIFxuICAgICAgICBjb25zdCBvbk1vdXNlVXAgPSAoKSA9PiB7XG4gICAgICAgICAgaXNSZXNpemluZyA9IGZhbHNlO1xuICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcbiAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcbiAgICAgICAgfTtcbiAgXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XG4gICAgICB9KTtcbiAgXG4gICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKGhhbmRsZSk7XG4gICAgfTtcbiAgXG4gICAgLy8gQWRkIHJlc2l6aW5nIGhhbmRsZXMgdG8gdGhlIHdyYXBwZXIgZm9yIHRoZSBpbWFnZVxuICAgIGNyZWF0ZVJlc2l6ZUhhbmRsZShcbiAgICAgICdudy1yZXNpemUnLFxuICAgICAgeyB0b3A6ICctNXB4JywgbGVmdDogJy01cHgnIH0sXG4gICAgICAoZGVsdGFYLCBkZWx0YVkpID0+IHtcbiAgICAgICAgaW1nLnN0eWxlLndpZHRoID0gYCR7c3RhcnRXaWR0aCAtIGRlbHRhWH1weGA7XG4gICAgICAgIGltZy5zdHlsZS5oZWlnaHQgPSBgJHtzdGFydEhlaWdodCAtIGRlbHRhWX1weGA7XG4gICAgICB9XG4gICAgKTtcbiAgICBjcmVhdGVSZXNpemVIYW5kbGUoXG4gICAgICAnc2UtcmVzaXplJyxcbiAgICAgIHsgYm90dG9tOiAnLTVweCcsIHJpZ2h0OiAnLTVweCcgfSxcbiAgICAgIChkZWx0YVgsIGRlbHRhWSkgPT4ge1xuICAgICAgICBpbWcuc3R5bGUud2lkdGggPSBgJHtzdGFydFdpZHRoICsgZGVsdGFYfXB4YDtcbiAgICAgICAgaW1nLnN0eWxlLmhlaWdodCA9IGAke3N0YXJ0SGVpZ2h0ICsgZGVsdGFZfXB4YDtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIFxuXG4gIGluc2VydEltYWdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgaWYgKGlucHV0Py5maWxlcykge1xuICAgICAgQXJyYXkuZnJvbShpbnB1dC5maWxlcykuZm9yRWFjaChmaWxlID0+IHtcbiAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBpbWFnZVVybCA9IGUudGFyZ2V0LnJlc3VsdDtcbiAgICAgICAgICB0aGlzLnVwbG9hZGVkSW1hZ2VzLnB1c2goaW1hZ2VVcmwpOyAvLyBTdG9yZSBpbWFnZSBVUkwgaW4gdGhlIGFycmF5XG4gICAgICAgIH07XG4gICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIFxuXG4gIGNvbnZlcnRJbWFnZShmaWxlOiBGaWxlKTogUHJvbWlzZTxGaWxlPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChmaWxlLnR5cGUgIT09ICdpbWFnZS9wbmcnKSB7XG4gICAgICAgIHJlc29sdmUoZmlsZSk7IC8vIFJldHVybiB0aGUgb3JpZ2luYWwgZmlsZSBpZiBpdCdzIG5vdCBhIFBOR1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gIFxuICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICBcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoZTogYW55KSA9PiB7XG4gICAgICAgIGltZy5zcmMgPSBlLnRhcmdldC5yZXN1bHQ7XG4gIFxuICAgICAgICBpbWcub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICBcbiAgICAgICAgICBpZiAoIWN0eCkge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignRmFpbGVkIHRvIGdldCBjYW52YXMgY29udGV4dCcpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gIFxuICAgICAgICAgIGNhbnZhcy53aWR0aCA9IGltZy53aWR0aDtcbiAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaW1nLmhlaWdodDtcbiAgXG4gICAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDAsIDApO1xuICAgICAgICAgIGNhbnZhcy50b0Jsb2IoXG4gICAgICAgICAgICBibG9iID0+IHtcbiAgICAgICAgICAgICAgaWYgKGJsb2IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBqcGdGaWxlID0gbmV3IEZpbGUoW2Jsb2JdLCBmaWxlLm5hbWUucmVwbGFjZSgvXFwucG5nJC8sICcuanBnJyksIHsgdHlwZTogJ2ltYWdlL2pwZWcnIH0pO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoanBnRmlsZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignRmFpbGVkIHRvIGNvbnZlcnQgUE5HIHRvIEpQRycpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdpbWFnZS9qcGVnJyxcbiAgICAgICAgICAgIDAuOTUgLy8gUXVhbGl0eSBmYWN0b3IgZm9yIEpQRUdcbiAgICAgICAgICApO1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgXG4gICAgICByZWFkZXIub25lcnJvciA9ICgpID0+IHJlamVjdChuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZWFkIHRoZSBmaWxlJykpO1xuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gICAgfSk7XG4gIH1cbiAgXG4gIFxuICBcblxuICAvLyBpbnNlcnRJbWFnZUJ5RHJhZyhpbWFnZVVybDogc3RyaW5nKTogdm9pZCB7XG4gIC8vICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmVkaXRvcicpIGFzIEhUTUxFbGVtZW50O1xuICAvLyAgIGlmICghZWRpdG9yKSB7XG4gIC8vICAgICBjb25zb2xlLmVycm9yKCdFZGl0b3IgZWxlbWVudCBub3QgZm91bmQuJyk7XG4gIC8vICAgICByZXR1cm47XG4gIC8vICAgfVxuXG4gIC8vICAgY29uc3QgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG4gIC8vICAgaW1nLnNyYyA9IGltYWdlVXJsO1xuICAvLyAgIGltZy5zdHlsZS5tYXhXaWR0aCA9ICcxMDAlJztcbiAgLy8gICBpbWcuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gIC8vICAgaW1nLnN0eWxlLndpZHRoID0gJzMwMHB4JzsgXG4gIC8vICAgaW1nLnN0eWxlLmhlaWdodCA9ICdhdXRvJztcblxuICAvLyAgIGVkaXRvci5hcHBlbmRDaGlsZChpbWcpO1xuICAvLyB9XG4gIFxuXG4gIGluc2VydEltYWdlVG9FZGl0b3IoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XG4gICAgaWYgKGZpbGUpIHtcbiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBpbWFnZVVybCA9IGUudGFyZ2V0LnJlc3VsdDtcbiAgICAgICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmVkaXRvcicpIGFzIEhUTUxFbGVtZW50O1xuICBcbiAgICAgICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFZGl0b3IgZWxlbWVudCBub3QgZm91bmQuJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gIFxuICAgICAgICBcbiAgICAgICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB3cmFwcGVyLmNvbnRlbnRFZGl0YWJsZSA9ICdmYWxzZSc7IFxuICAgICAgICB3cmFwcGVyLnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcbiAgICAgICAgd3JhcHBlci5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7XG4gICAgICAgIHdyYXBwZXIuc3R5bGUuYm9yZGVyID0gJzFweCBkYXNoZWQgI2NjYyc7IFxuICAgICAgICB3cmFwcGVyLnN0eWxlLm1hcmdpbiA9ICcxMHB4JztcbiAgICAgICAgd3JhcHBlci5zdHlsZS5wYWRkaW5nID0gJzVweCc7XG4gICAgICAgIHdyYXBwZXIuc3R5bGUuYm9yZGVyQmxvY2tDb2xvciA9ICcjMDA3QkZGJztcbiAgXG4gICAgICAgIFxuICAgICAgICBjb25zdCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICAgICAgaW1nLnNyYyA9IGltYWdlVXJsO1xuICAgICAgICBpbWcuc3R5bGUubWF4V2lkdGggPSAnMTAwJSc7XG4gICAgICAgIGltZy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgaW1nLnN0eWxlLndpZHRoID0gJzMwMHB4JzsgXG4gICAgICAgIGltZy5zdHlsZS5oZWlnaHQgPSAnYXV0byc7XG4gICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoaW1nKTtcbiAgXG4gICAgICAgIFxuICAgICAgICBsZXQgaXNSZXNpemluZyA9IGZhbHNlO1xuICAgICAgICBsZXQgc3RhcnRYID0gMDtcbiAgICAgICAgbGV0IHN0YXJ0WSA9IDA7XG4gICAgICAgIGxldCBzdGFydFdpZHRoID0gMDtcbiAgICAgICAgbGV0IHN0YXJ0SGVpZ2h0ID0gMDtcbiAgXG4gICAgICAgIGNvbnN0IGNyZWF0ZVJlc2l6ZUhhbmRsZSA9IChcbiAgICAgICAgICBjdXJzb3I6IHN0cmluZyxcbiAgICAgICAgICBwb3NpdGlvblN0eWxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICAgICAgICByZXNpemVDYWxsYmFjazogKGRlbHRhWDogbnVtYmVyLCBkZWx0YVk6IG51bWJlcikgPT4gdm9pZFxuICAgICAgICApID0+IHtcbiAgICAgICAgICBjb25zdCBoYW5kbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICBoYW5kbGUuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgICAgIGhhbmRsZS5zdHlsZS53aWR0aCA9ICcxMHB4JztcbiAgICAgICAgICBoYW5kbGUuc3R5bGUuaGVpZ2h0ID0gJzEwcHgnO1xuICAgICAgICAgIGhhbmRsZS5zdHlsZS5iYWNrZ3JvdW5kID0gJ3JnYmEoMCwgMCwgMCwgMC41KSc7XG4gICAgICAgICAgaGFuZGxlLnN0eWxlLmN1cnNvciA9IGN1cnNvcjtcbiAgICAgICAgICBPYmplY3QuYXNzaWduKGhhbmRsZS5zdHlsZSwgcG9zaXRpb25TdHlsZXMpO1xuICBcbiAgICAgICAgICBoYW5kbGUuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKHJlc2l6ZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpc1Jlc2l6aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHN0YXJ0WCA9IHJlc2l6ZUV2ZW50LmNsaWVudFg7XG4gICAgICAgICAgICBzdGFydFkgPSByZXNpemVFdmVudC5jbGllbnRZO1xuICAgICAgICAgICAgc3RhcnRXaWR0aCA9IGltZy5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgIHN0YXJ0SGVpZ2h0ID0gaW1nLm9mZnNldEhlaWdodDtcbiAgXG4gICAgICAgICAgICBjb25zdCBvbk1vdXNlTW92ZSA9IChtb3ZlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGlzUmVzaXppbmcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWx0YVggPSBtb3ZlRXZlbnQuY2xpZW50WCAtIHN0YXJ0WDtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWx0YVkgPSBtb3ZlRXZlbnQuY2xpZW50WSAtIHN0YXJ0WTtcbiAgICAgICAgICAgICAgICByZXNpemVDYWxsYmFjayhkZWx0YVgsIGRlbHRhWSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gIFxuICAgICAgICAgICAgY29uc3Qgb25Nb3VzZVVwID0gKCkgPT4ge1xuICAgICAgICAgICAgICBpc1Jlc2l6aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcbiAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XG4gICAgICAgICAgICB9O1xuICBcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xuICAgICAgICAgIH0pO1xuICBcbiAgICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKGhhbmRsZSk7XG4gICAgICAgIH07XG4gIFxuICAgICAgICBcbiAgICAgICAgY3JlYXRlUmVzaXplSGFuZGxlKFxuICAgICAgICAgICdudy1yZXNpemUnLFxuICAgICAgICAgIHsgdG9wOiAnLTVweCcsIGxlZnQ6ICctNXB4JyB9LFxuICAgICAgICAgIChkZWx0YVgsIGRlbHRhWSkgPT4ge1xuICAgICAgICAgICAgaW1nLnN0eWxlLndpZHRoID0gYCR7c3RhcnRXaWR0aCAtIGRlbHRhWH1weGA7XG4gICAgICAgICAgICBpbWcuc3R5bGUuaGVpZ2h0ID0gYCR7c3RhcnRIZWlnaHQgLSBkZWx0YVl9cHhgO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgY3JlYXRlUmVzaXplSGFuZGxlKFxuICAgICAgICAgICdzZS1yZXNpemUnLFxuICAgICAgICAgIHsgYm90dG9tOiAnLTVweCcsIHJpZ2h0OiAnLTVweCcgfSxcbiAgICAgICAgICAoZGVsdGFYLCBkZWx0YVkpID0+IHtcbiAgICAgICAgICAgIGltZy5zdHlsZS53aWR0aCA9IGAke3N0YXJ0V2lkdGggKyBkZWx0YVh9cHhgO1xuICAgICAgICAgICAgaW1nLnN0eWxlLmhlaWdodCA9IGAke3N0YXJ0SGVpZ2h0ICsgZGVsdGFZfXB4YDtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gIFxuICAgICAgICBcbiAgICAgICAgZWRpdG9yLmFwcGVuZENoaWxkKHdyYXBwZXIpO1xuICBcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ1xcdTIwMEInKTsgXG4gICAgICAgIGVkaXRvci5hcHBlbmRDaGlsZCh0ZXh0Tm9kZSk7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgcmFuZ2Uuc2V0U3RhcnRBZnRlcih3cmFwcGVyKTtcbiAgICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7XG4gIFxuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAgIH1cbiAgfVxuICBcbiAgXG5cbiAgXG5cblxuICBvcGVuVGFibGVEaWFsb2coZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnJvd3MgPSAxOyBcbiAgICB0aGlzLmNvbHMgPSAxO1xuXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLnRhYmxlRGlhbG9nLCB7XG4gICAgICBwb3NpdGlvbjoge1xuICAgICAgICB0b3A6IGAke2V2ZW50LmNsaWVudFl9cHhgLFxuICAgICAgICBsZWZ0OiBgJHtldmVudC5jbGllbnRYfXB4YCxcbiAgICAgIH0sXG4gICAgICBwYW5lbENsYXNzOiAnY3VzdG9tLWRpYWxvZy1jb250YWluZXInXG4gICAgfSk7XG5cbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICB0aGlzLmluc2VydFRhYmxlKHJlc3VsdC5yb3dzLCByZXN1bHQuY29scyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVQcmV2aWV3KGNvbHM6IG51bWJlciwgcm93czogbnVtYmVyKSB7XG4gICAgdGhpcy5jb2xzID0gY29scztcbiAgICB0aGlzLnJvd3MgPSByb3dzO1xuICB9XG5cbiAgdXBkYXRlU2VsZWN0aW9uKGNvbEluZGV4OiBudW1iZXIsIHJvd0luZGV4OiBudW1iZXIsIGRpYWxvZ1JlZjogYW55KSB7XG4gICAgdGhpcy5jb2xzID0gY29sSW5kZXg7XG4gICAgdGhpcy5yb3dzID0gcm93SW5kZXg7XG4gICAgZGlhbG9nUmVmLmNsb3NlKHsgcm93czogdGhpcy5yb3dzLCBjb2xzOiB0aGlzLmNvbHMgfSk7IC8vIENsb3NlIGRpYWxvZyB3aXRoIHNlbGVjdGlvblxuICB9XG4gIFxuICBcblxuICBtYWtlRmlyc3RSb3dIZWFkZXIoKTogdm9pZCB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gIFxuICAgIC8vIENoZWNrIGlmIHNlbGVjdGlvbiBpcyBpbnNpZGUgdGhlIGVkaXRvclxuICAgIGlmICghdGhpcy5pc1NlbGVjdGlvbkluc2lkZUVkaXRvcihlZGl0b3IsIHNlbGVjdGlvbikpIHtcbiAgICAgIGFsZXJ0KCdQbGVhc2UgcGxhY2UgdGhlIGN1cnNvciBpbnNpZGUgdGhlIHRhYmxlIHRvIG1ha2UgdGhlIGZpcnN0IHJvdyBhIGhlYWRlci4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIFxuICAgIC8vIEZpbmQgdGhlIGNsb3Nlc3QgdGFibGUgdG8gdGhlIHNlbGVjdGlvblxuICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XG4gICAgY29uc3Qgc2VsZWN0ZWROb2RlID0gcmFuZ2Uuc3RhcnRDb250YWluZXI7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLmZpbmRDbG9zZXN0VGFibGUoc2VsZWN0ZWROb2RlKTtcbiAgXG4gICAgaWYgKCF0YWJsZSkge1xuICAgICAgYWxlcnQoJ05vIHRhYmxlIGZvdW5kIG5lYXIgdGhlIGN1cnNvci4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIFxuICAgIC8vIENvbnZlcnQgdGhlIGZpcnN0IHJvdyBjZWxscyB0byBoZWFkZXIgY2VsbHNcbiAgICBjb25zdCBmaXJzdFJvdyA9IHRhYmxlLnJvd3NbMF07XG4gICAgaWYgKGZpcnN0Um93KSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpcnN0Um93LmNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNlbGwgPSBmaXJzdFJvdy5jZWxsc1tpXTtcbiAgICAgICAgY29uc3QgdGggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0aCcpO1xuICAgICAgICB0aC5pbm5lckhUTUwgPSBjZWxsLmlubmVySFRNTDtcbiAgICAgICAgdGguc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XG4gICAgICAgIHRoLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICcjRjFGMUYwJztcbiAgICAgICAgdGguc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCBibGFjayc7XG4gICAgICAgIHRoLnN0eWxlLmJvcmRlckNvbGxhcHNlID0gJ2NvbGxhcHNlJztcbiAgICAgICAgdGguc3R5bGUucGFkZGluZyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGNlbGwpLnBhZGRpbmc7IC8vIFJldGFpbiBwYWRkaW5nXG4gICAgICAgIHRoLnN0eWxlLndpZHRoID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoY2VsbCkud2lkdGg7IC8vIFJldGFpbiB3aWR0aFxuICAgICAgICB0aC5zdHlsZS5oZWlnaHQgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjZWxsKS5oZWlnaHQ7XG4gICAgICAgIGZpcnN0Um93LnJlcGxhY2VDaGlsZCh0aCwgY2VsbCk7XG4gICAgICB9XG4gICAgfVxuICBcbiAgICBlZGl0b3IuZm9jdXMoKTtcbiAgfVxuICBcbiAgcHJpdmF0ZSBmaW5kQ2xvc2VzdFRhYmxlKG5vZGU6IE5vZGUpOiBIVE1MVGFibGVFbGVtZW50IHwgbnVsbCB7XG4gICAgd2hpbGUgKG5vZGUgJiYgbm9kZSAhPT0gZG9jdW1lbnQpIHtcbiAgICAgIGlmIChub2RlLm5vZGVOYW1lID09PSAnVEFCTEUnKSB7XG4gICAgICAgIHJldHVybiBub2RlIGFzIEhUTUxUYWJsZUVsZW1lbnQ7XG4gICAgICB9XG4gICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlITtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgXG4gIFxuICBpbnNlcnRUYWJsZShyb3dzOiBzdHJpbmcsIGNvbHM6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHJvd0NvdW50ID0gcGFyc2VJbnQocm93cywgMTApO1xuICAgIGNvbnN0IGNvbENvdW50ID0gcGFyc2VJbnQoY29scywgMTApO1xuICBcbiAgICBpZiAoaXNOYU4ocm93Q291bnQpIHx8IGlzTmFOKGNvbENvdW50KSB8fCByb3dDb3VudCA8IDEgfHwgY29sQ291bnQgPCAxKSB7XG4gICAgICBhbGVydCgnUGxlYXNlIGVudGVyIHZhbGlkIG51bWJlcnMgZm9yIHJvd3MgYW5kIGNvbHVtbnMuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICBcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgXG4gICAgLy8gRW5zdXJlIHNlbGVjdGlvbiBpcyBpbnNpZGUgdGhlIGVkaXRvclxuICAgIGlmICghdGhpcy5pc1NlbGVjdGlvbkluc2lkZUVkaXRvcihlZGl0b3IsIHNlbGVjdGlvbikpIHtcbiAgICAgIC8vIEFwcGVuZCB0aGUgdGFibGUgYXQgdGhlIGVuZCBpZiBzZWxlY3Rpb24gaXMgb3V0c2lkZSBlZGl0b3JcbiAgICAgIHRoaXMuYXBwZW5kVGFibGUoZWRpdG9yLCByb3dDb3VudCwgY29sQ291bnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgXG4gICAgLy8gUHJvY2VlZCB0byBpbnNlcnQgdGhlIHRhYmxlIGlmIHNlbGVjdGlvbiBpcyB2YWxpZFxuICAgIGNvbnN0IHRhYmxlSFRNTCA9IHRoaXMuY3JlYXRlVGFibGVIVE1MKHJvd0NvdW50LCBjb2xDb3VudCk7XG4gICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcbiAgICByYW5nZS5kZWxldGVDb250ZW50cygpOyAvLyBSZW1vdmUgYW55IHNlbGVjdGVkIGNvbnRlbnRcbiAgXG4gICAgY29uc3QgdGVtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHRlbXBEaXYuaW5uZXJIVE1MID0gdGFibGVIVE1MO1xuICBcbiAgICByYW5nZS5pbnNlcnROb2RlKHRlbXBEaXYuZmlyc3RDaGlsZCEpOyAvLyBJbnNlcnQgdGhlIHRhYmxlXG4gIFxuICAgIC8vIE1vdmUgdGhlIGN1cnNvciB0byB0aGUgZmlyc3QgY2VsbCBvZiB0aGUgbmV3IHRhYmxlXG4gICAgdGhpcy5zZXRDdXJzb3JUb0ZpcnN0Q2VsbCh0ZW1wRGl2LmZpcnN0Q2hpbGQgYXMgSFRNTEVsZW1lbnQpO1xuICAgIGVkaXRvci5mb2N1cygpO1xuICB9XG4gIFxuICAvLyBIZWxwZXIgZnVuY3Rpb246IENyZWF0ZSB0YWJsZSBIVE1MXG4gIHByaXZhdGUgY3JlYXRlVGFibGVIVE1MKHJvd0NvdW50OiBudW1iZXIsIGNvbENvdW50OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGxldCB0YWJsZUhUTUwgPSAnPHRhYmxlIGJvcmRlcj1cIjFcIiBzdHlsZT1cImJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7IG1hcmdpbjo1cHhcIj4nO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93Q291bnQ7IGkrKykge1xuICAgICAgdGFibGVIVE1MICs9ICc8dHI+JztcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sQ291bnQ7IGorKykge1xuICAgICAgICB0YWJsZUhUTUwgKz0gYDx0ZCBzdHlsZT1cImZvbnQtc2l6ZTogMTRweDsgbWluLXdpZHRoOiAxLjVlbTsgaGVpZ2h0OiAyZW07IHBhZGRpbmc6IC40ZW07IGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwidGV4dGJveFwiIGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIj48L3RkPmA7XG4gICAgICB9XG4gICAgICB0YWJsZUhUTUwgKz0gJzwvdHI+JztcbiAgICB9XG4gICAgdGFibGVIVE1MICs9ICc8L3RhYmxlPic7XG4gICAgcmV0dXJuIHRhYmxlSFRNTDtcbiAgfVxuICBcbiAgXG4gIC8vIEhlbHBlciBmdW5jdGlvbjogQXBwZW5kIGEgdGFibGUgYXQgdGhlIGVuZCBvZiB0aGUgZWRpdG9yXG4gIHByaXZhdGUgYXBwZW5kVGFibGUoZWRpdG9yOiBIVE1MRWxlbWVudCwgcm93Q291bnQ6IG51bWJlciwgY29sQ291bnQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHRhYmxlSFRNTCA9IHRoaXMuY3JlYXRlVGFibGVIVE1MKHJvd0NvdW50LCBjb2xDb3VudCk7XG4gICAgZWRpdG9yLmlubmVySFRNTCArPSB0YWJsZUhUTUw7XG4gIFxuICAgIC8vIFNldCBjdXJzb3IgaW5zaWRlIHRoZSBmaXJzdCBjZWxsIG9mIHRoZSBuZXcgdGFibGVcbiAgICBjb25zdCBsYXN0SW5zZXJ0ZWRUYWJsZSA9IGVkaXRvci5xdWVyeVNlbGVjdG9yKCd0YWJsZTpsYXN0LWNoaWxkJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgdGhpcy5zZXRDdXJzb3JUb0ZpcnN0Q2VsbChsYXN0SW5zZXJ0ZWRUYWJsZSk7XG4gICAgZWRpdG9yLmZvY3VzKCk7XG4gIH1cbiAgXG4gIC8vIEhlbHBlciBmdW5jdGlvbjogQ2hlY2sgaWYgc2VsZWN0aW9uIGlzIGluc2lkZSB0aGUgZWRpdG9yXG4gIHByaXZhdGUgaXNTZWxlY3Rpb25JbnNpZGVFZGl0b3IoZWRpdG9yOiBIVE1MRWxlbWVudCwgc2VsZWN0aW9uOiBTZWxlY3Rpb24pOiBib29sZWFuIHtcbiAgICBpZiAoIXNlbGVjdGlvbi5yYW5nZUNvdW50KSByZXR1cm4gZmFsc2U7XG4gICAgbGV0IG5vZGUgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKS5jb21tb25BbmNlc3RvckNvbnRhaW5lcjtcbiAgXG4gICAgLy8gVHJhdmVyc2UgdXAgdG8gc2VlIGlmIHRoZSBub2RlIGJlbG9uZ3MgdG8gdGhlIGVkaXRvclxuICAgIHdoaWxlIChub2RlKSB7XG4gICAgICBpZiAobm9kZSA9PT0gZWRpdG9yKSByZXR1cm4gdHJ1ZTtcbiAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGUhO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgXG4gIC8vIEhlbHBlciBmdW5jdGlvbjogTW92ZSBjdXJzb3IgdG8gdGhlIGZpcnN0IGNlbGxcbiAgLy8gcHJpdmF0ZSBzZXRDdXJzb3JUb0ZpcnN0Q2VsbCh0YWJsZTogSFRNTEVsZW1lbnQpIHtcbiAgLy8gICBjb25zdCBmaXJzdENlbGwgPSB0YWJsZS5xdWVyeVNlbGVjdG9yKCd0cjpmaXJzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCcpIGFzIEhUTUxFbGVtZW50O1xuICBcbiAgLy8gICBpZiAoZmlyc3RDZWxsKSB7XG4gIC8vICAgICBjb25zdCBuZXdSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gIC8vICAgICBuZXdSYW5nZS5zZXRTdGFydChmaXJzdENlbGwsIDApOyAvLyBTdGFydCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjZWxsXG4gIC8vICAgICBuZXdSYW5nZS5jb2xsYXBzZSh0cnVlKTtcbiAgXG4gIC8vICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gIC8vICAgICBzZWxlY3Rpb24hLnJlbW92ZUFsbFJhbmdlcygpO1xuICAvLyAgICAgc2VsZWN0aW9uIS5hZGRSYW5nZShuZXdSYW5nZSk7XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgcHJpdmF0ZSBzZXRDdXJzb3JUb0ZpcnN0Q2VsbCh0YWJsZTogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBjb25zdCBmaXJzdENlbGwgPSB0YWJsZS5xdWVyeVNlbGVjdG9yKCd0cjpmaXJzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCwgdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQnKSBhcyBIVE1MRWxlbWVudDtcblxuICAgIGlmIChmaXJzdENlbGwpIHtcbiAgICAgICAgLy8gRW5zdXJlIHRoZSBjZWxsIGlzIGNvbnRlbnRlZGl0YWJsZVxuICAgICAgICBmaXJzdENlbGwuc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCAndHJ1ZScpO1xuXG4gICAgICAgIC8vIEZvY3VzIHRoZSBjZWxsXG4gICAgICAgIGZpcnN0Q2VsbC5mb2N1cygpO1xuXG4gICAgICAgIC8vIENyZWF0ZSBhIHJhbmdlIGFuZCBwbGFjZSB0aGUgY3Vyc29yIGF0IHRoZSBzdGFydCBvZiB0aGUgY2VsbFxuICAgICAgICBjb25zdCBuZXdSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICAgIG5ld1JhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhmaXJzdENlbGwpOyAvLyBTZWxlY3QgdGhlIGNvbnRlbnRzIG9mIHRoZSBjZWxsXG4gICAgICAgIG5ld1JhbmdlLmNvbGxhcHNlKHRydWUpOyAvLyBDb2xsYXBzZSB0byB0aGUgc3RhcnRcblxuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShuZXdSYW5nZSk7XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICBcbiAgXG5cbiAgaW5zZXJ0UGFnZUJyZWFrKCk6IHZvaWQge1xuICAgIGNvbnN0IHBhZ2VCcmVhayA9IGA8ZGl2IHN0eWxlPVwicGFnZS1icmVhay1hZnRlcjogYWx3YXlzO1wiPjxiciAvPjwvZGl2PmA7XG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydEhUTUwnLCBmYWxzZSwgcGFnZUJyZWFrKTtcbiAgfVxuXG4gIHN1Ym1pdENvbnRlbnQoKTogdm9pZCB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBjb250ZW50ID0gZWRpdG9yLmlubmVySFRNTDsgLy8gR2V0IHRoZSBIVE1MIGNvbnRlbnQgZnJvbSB0aGUgZWRpdG9yXG4gICAgY29uc3QgcGxhaW5UZXh0Q29udGVudCA9IGVkaXRvci5pbm5lclRleHQ7IC8vIE9wdGlvbmFsbHksIGdldCBwbGFpbiB0ZXh0IGNvbnRlbnRcblxuICAgIC8vIEZvciBkZW1vbnN0cmF0aW9uLCB5b3UgY2FuIGxvZyBpdCBvciBwcm9jZXNzIGl0IGFzIG5lZWRlZFxuICAgIHRoaXMub25DaGFuZ2UoY29udGVudCk7XG5cbiAgICAvLyBFeGFtcGxlOiBZb3UgY291bGQgc2VuZCB0aGlzIGRhdGEgdG8gYSBzZXJ2ZXIgb3IgdXNlIGl0IGVsc2V3aGVyZSBpbiB5b3VyIGFwcGxpY2F0aW9uXG4gICAgLy8gdGhpcy55b3VyU2VydmljZS5zdWJtaXRDb250ZW50KHsgY29udGVudCB9KTsgLy8gUmVwbGFjZSB3aXRoIHlvdXIgc2VydmljZSBjYWxsXG4gIH1cblxufVxuXG5cbiIsIjxkaXYgY2xhc3M9XCJyaWNoLXRleHQtZWRpdG9yXCI+XHJcbiAgICA8IS0tIFRvb2xiYXIgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwidG9vbGJhclwiPlxyXG4gICAgICAgIFxyXG4gICAgICAgICAgPHNlbGVjdCBjbGFzcz1cInNlbGVjdC13cmFwcGVyXCIgKGNoYW5nZSk9XCJzZXRIZWFkaW5nKCRldmVudClcIj5cclxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlBcIj5QYXJhZ3JhcGg8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkgxXCI+SDE8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkgyXCI+SDI8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkgzXCI+SDM8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkg0XCI+SDQ8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkg1XCI+SDU8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkg2XCI+SDY8L29wdGlvbj5cclxuICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgIDxidXR0b24gIChjbGljayk9XCJmb3JtYXQoJ2JvbGQnKVwiIGFyaWEtbGFiZWw9XCJCb2xkXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5mb3JtYXRfYm9sZDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIFxyXG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZm9ybWF0KCdpdGFsaWMnKVwiIGFyaWEtbGFiZWw9XCJJdGFsaWNcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPmZvcm1hdF9pdGFsaWM8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImZvcm1hdCgndW5kZXJsaW5lJylcIiBhcmlhLWxhYmVsPVwiVW5kZXJsaW5lXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5mb3JtYXRfdW5kZXJsaW5lPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICA8YnV0dG9uICAoY2xpY2spPVwiZm9ybWF0KCdzdHJpa2V0aHJvdWdoJylcIiBhcmlhLWxhYmVsPVwiU3RyaWtldGhyb3VnaFwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+c3RyaWtldGhyb3VnaF9zPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJmb3JtYXQoJ2p1c3RpZnlMZWZ0JylcIiBhcmlhLWxhYmVsPVwiQWxpZ24gTGVmdFwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+Zm9ybWF0X2FsaWduX2xlZnQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImZvcm1hdCgnanVzdGlmeUNlbnRlcicpXCIgYXJpYS1sYWJlbD1cIkNlbnRlclwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+Zm9ybWF0X2FsaWduX2NlbnRlcjwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIFxyXG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZm9ybWF0KCdqdXN0aWZ5UmlnaHQnKVwiIGFyaWEtbGFiZWw9XCJBbGlnbiBSaWdodFwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+Zm9ybWF0X2FsaWduX3JpZ2h0PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJmb3JtYXQoJ2p1c3RpZnlGdWxsJylcIiBhcmlhLWxhYmVsPVwiSnVzdGlmeVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+Zm9ybWF0X2FsaWduX2p1c3RpZnk8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImZvcm1hdCgnaW5zZXJ0VW5vcmRlcmVkTGlzdCcpXCIgYXJpYS1sYWJlbD1cIlVub3JkZXJlZCBMaXN0XCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5mb3JtYXRfbGlzdF9idWxsZXRlZDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIFxyXG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZm9ybWF0KCdpbnNlcnRPcmRlcmVkTGlzdCcpXCIgYXJpYS1sYWJlbD1cIk9yZGVyZWQgTGlzdFwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+Zm9ybWF0X2xpc3RfbnVtYmVyZWQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICBcclxuICAgICAgXHJcbiAgXHJcbiAgICAgICAgICA8YnV0dG9uIGNvbG9yPVwic2Vjb25kYXJ5XCIgYXJpYS1sYWJlbD1cIkluc2VydCBJbWFnZVwiIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlOyBkaXNwbGF5OiBpbmxpbmUtZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XCI+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCIgXHJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJpbnNlcnRJbWFnZVRvRWRpdG9yKCRldmVudClcIlxyXG4gICAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAtNTAlOyB0b3A6IDA7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7IG9wYWNpdHk6IDA7IGN1cnNvcjogcG9pbnRlcjtcIlxyXG4gICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIFxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPG1hdC1pY29uIHN0eWxlPVwicG9pbnRlci1ldmVudHM6IG5vbmU7XCI+aW5zZXJ0X3Bob3RvX291dGxpbmVkPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICBcclxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIm9wZW5UYWJsZURpYWxvZygkZXZlbnQpXCIgY29sb3I9XCJzZWNvbmRhcnlcIiBhcmlhLWxhYmVsPVwiQ2hvb3NlIHRhYmxlIHJvd3MgYW5kIGNvbHVtbnNcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPmJvcmRlcl9hbGw8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIm1ha2VGaXJzdFJvd0hlYWRlcigpXCIgY29sb3I9XCJzZWNvbmRhcnlcIiBhcmlhLWxhYmVsPVwiTWFrZSBIZWFkZXJcIj5cclxuICAgICAgICAgICAgPGltZyBzdHlsZT1cIndpZHRoOiAyNnB4OyBoZWlnaHQ6IDQ2cHg7IG1hcmdpbi1ib3R0b206IDNweDtcIiBzcmM9XCIuLi8uLi8uLi9hc3NldHMvSC5zdmdcIiBhbHQ9XCJBcHBseSBIZWFkZXIgdG8gdGFibGVcIj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIFxyXG4gICAgPC9kaXY+XHJcbiAgXHJcbiAgICA8IS0tIEVkaXRhYmxlIEFyZWEgLS0+XHJcbiAgICAgPCEtLSAoa2V5cHJlc3MpPVwib25Db250ZW50Q2hhbmdlKClcIiBuZWVkIHRvIGJlIGluY2x1ZGVkIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImVkaXRvclwiIGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIiAjZWRpdG9yICAoaW5wdXQpPVwic3VibWl0Q29udGVudCgpXCIgKGJsdXIpPVwib25CbHVyKClcIiAoZHJvcCk9XCJkcm9wKCRldmVudClcIiAoZHJhZ292ZXIpPVwiYWxsb3dEcm9wKCRldmVudClcIiA+XHJcbiAgICAgICAgPCEtLSBZb3VyIGNvbnRlbnQgZ29lcyBoZXJlIC0tPiBcclxuICAgIDwvZGl2PlxyXG4gIFxyXG4gIDwvZGl2PlxyXG4gIFxyXG4gIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNsYXNzPVwic3VibWl0XCIgKGNsaWNrKT1cInN1Ym1pdENvbnRlbnQoKVwiPlN1Ym1pdDwvYnV0dG9uPlxyXG4gIFxyXG4gIFxyXG4gIDxuZy10ZW1wbGF0ZSAjdGFibGVEaWFsb2cgbGV0LWRpYWxvZ1JlZj1cImRpYWxvZ1JlZlwiPlxyXG4gIDxoMiBtYXQtZGlhbG9nLXRpdGxlPkNob29zZSBUYWJsZSBTaXplPC9oMj5cclxuICA8bWF0LWRpYWxvZy1jb250ZW50PlxyXG4gICAgPGRpdiBjbGFzcz1cImdyaWQtY29udGFpbmVyXCI+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICAqbmdGb3I9XCJsZXQgY2VsbCBvZiBncmlkOyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAnZ3JpZC1pdGVtJzogdHJ1ZSxcclxuICAgICAgICAgICdoaWdobGlnaHRlZCc6IGkgJSA3IDwgY29scyAmJiBNYXRoLmZsb29yKGkgLyA3KSA8IHJvd3NcclxuICAgICAgICB9XCJcclxuICAgICAgICAobW91c2VlbnRlcik9XCJ1cGRhdGVQcmV2aWV3KGkgJSA3ICsgMSwgTWF0aC5mbG9vcihpIC8gNykgKyAxKVwiXHJcbiAgICAgICAgKGNsaWNrKT1cInVwZGF0ZVNlbGVjdGlvbihpICUgNyArIDEsIE1hdGguZmxvb3IoaSAvIDcpICsgMSwgZGlhbG9nUmVmKVwiXHJcbiAgICAgID48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPHA+e3sgcm93cyB9fSB4IHt7IGNvbHMgfX0gPC9wPlxyXG4gIDwvbWF0LWRpYWxvZy1jb250ZW50PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbiAgXHJcbiAgXHJcbiAgPGlucHV0IHR5cGU9XCJmaWxlXCIgKGNoYW5nZSk9XCJpbnNlcnRJbWFnZSgkZXZlbnQpXCIgYWNjZXB0PVwiaW1hZ2UvcG5nLGltYWdlLypcIiBtdWx0aXBsZSAgLz5cclxuICBcclxuICBcclxuICA8ZGl2IGNsYXNzPVwidXBsb2FkZWQtaW1hZ2VzXCIgKm5nSWY9XCJ1cGxvYWRlZEltYWdlcy5sZW5ndGggPiAwXCI+XHJcbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpbWFnZVVybCBvZiB1cGxvYWRlZEltYWdlczsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwiaW1hZ2UtcHJldmlld1wiPlxyXG4gICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VVcmxcIiBhbHQ9XCJVcGxvYWRlZCBJbWFnZVwiIFxyXG4gICAgICAgICAgIGRyYWdnYWJsZT1cInRydWVcIiBcclxuICAgICAgICAgICAoZHJhZ3N0YXJ0KT1cImRyYWcoJGV2ZW50LCBpbWFnZVVybClcIiAvPlxyXG4gICAgICBcclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInJlbW92ZS1idG5cIiAoY2xpY2spPVwicmVtb3ZlSW1hZ2UoaSlcIj5SZW1vdmU8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIFxyXG4gIFxyXG4gIFxyXG4gIFxyXG4gIFxyXG4gIFxyXG4gIFxyXG4gIFxyXG4gICJdfQ==
|
|
580
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFwaWQtdGV4dC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvcmFwaWQtdGV4dC1lZGl0b3Ivc3JjL2xpYi9yYXBpZC10ZXh0LWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9yYXBpZC10ZXh0LWVkaXRvci9zcmMvbGliL3JhcGlkLXRleHQtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFFLE1BQU0sRUFBVSxTQUFTLEVBQTBCLFVBQVUsRUFBRSxZQUFZLEVBQXdELE1BQU0sZUFBZSxDQUFDO0FBRWhNLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFlekUsTUFBTSxPQUFPLHdCQUF3QjtJQWtCbkMsWUFBb0IsTUFBaUIsRUFBVSxFQUFjLEVBQVMsUUFBbUIsRUFBVSxLQUFpQjtRQUFoRyxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUFTLGFBQVEsR0FBUixRQUFRLENBQVc7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFZO1FBZjNHLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBQ2hDLFdBQU0sR0FBVyxPQUFPLENBQUM7UUFDekIsVUFBSyxHQUFXLE1BQU0sQ0FBQztRQUN0QixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFHN0Msa0JBQWEsR0FBVyxFQUFFLENBQUM7UUFDbkMsU0FBSSxHQUFXLENBQUMsQ0FBQztRQUNqQixTQUFJLEdBQVcsQ0FBQyxDQUFDO1FBQ2pCLFNBQUksR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLFNBQUksR0FBRyxJQUFJLENBQUM7UUFDWixtQkFBYyxHQUFhLEVBQUUsQ0FBQztRQTRE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dkIsd0ZBQXdGO1FBQ3hGLGlGQUFpRjtJQUNuRixDQUFDOztzSEE3ckJVLHdCQUF3QjswR0FBeEIsd0JBQXdCLDRLQVR4QjtRQUNUO1lBQ0UsT0FBTyxFQUFFLGlCQUFpQjtZQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHdCQUF3QixDQUFDO1lBQ3ZELEtBQUssRUFBRSxJQUFJO1NBQ1o7S0FDRiw0UENkSCx5aExBdUlJOzRGRHRIUyx3QkFBd0I7a0JBYnBDLFNBQVM7K0JBQ0Usc0JBQXNCLGFBR3JCO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHlCQUF5QixDQUFDOzRCQUN2RCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjswS0FNUSxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0ksYUFBYTtzQkFBdEIsTUFBTTtnQkFDZ0MsTUFBTTtzQkFBNUMsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNYLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE91dHB1dCwgT25Jbml0LCBWaWV3Q2hpbGQsIE9uQ2hhbmdlcywgVGVtcGxhdGVSZWYsIGZvcndhcmRSZWYsIEV2ZW50RW1pdHRlciwgQWZ0ZXJWaWV3SW5pdCwgU2ltcGxlQ2hhbmdlLCBTaW1wbGVDaGFuZ2VzLCBSZW5kZXJlcjJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXJpY2gtdGV4dC1lZGl0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vcmFwaWQtdGV4dC1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yYXBpZC10ZXh0LWVkaXRvci5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFJhcGlkVGV4dEVkaXRvckNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxuICBcbn0pXG5leHBvcnQgY2xhc3MgUmFwaWRUZXh0RWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcblxuXG4gIEBJbnB1dCgpIGNvbnRlbnRDYXB0dXJlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGhlaWdodDogc3RyaW5nID0gXCIzMDBweFwiO1xuICBASW5wdXQoKSB3aWR0aDogc3RyaW5nID0gXCJhdXRvXCI7XG4gIEBPdXRwdXQoKSBjb250ZW50Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBWaWV3Q2hpbGQoJ2VkaXRvcicsIHsgc3RhdGljOiB0cnVlIH0pIGVkaXRvciE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3RhYmxlRGlhbG9nJykgdGFibGVEaWFsb2chOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBwcml2YXRlIGVkaXRvckNvbnRlbnQ6IHN0cmluZyA9ICcnO1xuICByb3dzOiBudW1iZXIgPSAxO1xuICBjb2xzOiBudW1iZXIgPSAxO1xuICBncmlkID0gQXJyYXkoNDkpLmZpbGwoMCk7XG4gIE1hdGggPSBNYXRoO1xuICB1cGxvYWRlZEltYWdlczogc3RyaW5nW10gPSBbXTtcblxuXG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZywgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsIHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWYpIHtcbiAgICBjb25zb2xlLmxvZygnQnVpbGQgLTEnKVxuICB9XG4gIFxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb250ZW50Q2FwdHVyZSkge1xuICAgICAgY29uc29sZS5sb2coJ0NvbnRlbnQgY2FwdHVyZSBpcyBlbmFibGVkLicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZygnQ29udGVudCBjYXB0dXJlIGlzIGRpc2FibGVkLicpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snaGVpZ2h0J10gfHwgY2hhbmdlc1snd2lkdGgnXSkge1xuICAgICAgdGhpcy5hcHBseURpbWVuc2lvbnMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5RGltZW5zaW9ucygpOiB2b2lkIHtcbiAgICBjb25zdCBlZGl0b3JFbGVtZW50ID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kaW1lbnNpb24nKTtcbiAgICBpZiAodGhpcy5oZWlnaHQpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZWRpdG9yRWxlbWVudCwgJ2hlaWdodCcsIHRoaXMuaGVpZ2h0KTtcbiAgICB9XG4gICAgaWYgKHRoaXMud2lkdGgpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZWRpdG9yRWxlbWVudCwgJ3dpZHRoJywgdGhpcy53aWR0aCk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yJyk7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0VkaXRvciBlbGVtZW50IG5vdCBmb3VuZC4nKTtcbiAgICB9XG4gIH1cblxuICBcblxuICBvbkNvbnRlbnRDaGFuZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29udGVudENhcHR1cmUpIHtcbiAgICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yJyk7XG4gICAgICBpZiAoZWRpdG9yKSB7XG4gICAgICAgIHRoaXMuZWRpdG9yQ29udGVudCA9IGVkaXRvci5pbm5lckhUTUw7XG4gICAgICAgIGNvbnNvbGUubG9nKCdDYXB0dXJlZCBDb250ZW50IChDaGlsZCk6JywgdGhpcy5lZGl0b3JDb250ZW50KTtcbiAgICAgICAgdGhpcy5jb250ZW50Q2hhbmdlLmVtaXQodGhpcy5lZGl0b3JDb250ZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0VkaXRvciBlbGVtZW50IG5vdCBmb3VuZC4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBcblxuICBnZXRDb250ZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yQ29udGVudDtcbiAgfVxuXG4gIC8vVHdvIFdheSBEYXRhIEJpbmRpbmcgRnVuY3Rpb25hbGl0eVxuXG4gIHByaXZhdGUgb25DaGFuZ2UgPSAoY29udGVudDogc3RyaW5nKSA9PiB7fTtcbiAgcHJpdmF0ZSBvblRvdWNoZWQgPSAoKSA9PiB7fTtcblxuICAvLyBDYWxsZWQgYnkgQW5ndWxhciB0byB1cGRhdGUgdGhlIHZhbHVlIHByb2dyYW1tYXRpY2FsbHlcbiAgd3JpdGVWYWx1ZShjb250ZW50OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lZGl0b3IgJiYgdGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSBjb250ZW50IHx8ICcnO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlZ2lzdGVycyB0aGUgb25DaGFuZ2UgY2FsbGJhY2sgdG8gbm90aWZ5IEFuZ3VsYXIgb2YgY29udGVudCBjaGFuZ2VzXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChjb250ZW50OiBzdHJpbmcpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICAvLyBSZWdpc3RlcnMgdGhlIG9uVG91Y2hlZCBjYWxsYmFjayBmb3IgYmx1ciBldmVudHNcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cblxuICBvbkJsdXIoKSB7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgfVxuXG5cblxuICBmb3JtYXQoY29tbWFuZDogc3RyaW5nKTogdm9pZCB7XG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoY29tbWFuZCwgZmFsc2UsICcnKTtcbiAgfVxuXG4gIHNldEhlYWRpbmcoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxTZWxlY3RFbGVtZW50KS52YWx1ZTtcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnZm9ybWF0QmxvY2snLCBmYWxzZSwgdmFsdWUpO1xuICB9XG5cbiAgLy9JbWFnZSBTZWN0aW9uXG4gIFxuICBhbGxvd0Ryb3AoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IFxuICB9XG5cbiAgLy8gSGFuZGxlIGltYWdlIGRyYWcgc3RhcnRcbiAgZHJhZyhldmVudDogRHJhZ0V2ZW50LCBpbWFnZVVybDogc3RyaW5nKTogdm9pZCB7XG4gICAgZXZlbnQuZGF0YVRyYW5zZmVyPy5zZXREYXRhKFwidGV4dFwiLCBpbWFnZVVybCk7IFxuICB9XG5cbiAgLy8gSGFuZGxlIGRyb3AgZXZlbnQgaW4gdGhlIGVkaXRvclxuICBkcm9wKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBcbiAgICBjb25zdCBpbWFnZVVybCA9IGV2ZW50LmRhdGFUcmFuc2Zlcj8uZ2V0RGF0YShcInRleHRcIik7IFxuICAgIGlmIChpbWFnZVVybCkge1xuICAgICAgdGhpcy5pbnNlcnRJbWFnZUluRWRpdG9yKGltYWdlVXJsKTsgXG4gICAgfVxuICB9XG5cbiAgLy8gaW5zZXJ0SW1hZ2UoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAvLyAgIGNvbnN0IGZpbGVzOiBGaWxlTGlzdCA9IGV2ZW50LnRhcmdldC5maWxlcztcbiAgXG4gIC8vICAgaWYgKCFmaWxlcyB8fCBmaWxlcy5sZW5ndGggPT09IDApIHtcbiAgLy8gICAgIGNvbnNvbGUuZXJyb3IoJ05vIGZpbGVzIHNlbGVjdGVkLicpO1xuICAvLyAgICAgcmV0dXJuO1xuICAvLyAgIH1cbiAgXG4gIC8vICAgQXJyYXkuZnJvbShmaWxlcykuZm9yRWFjaCgoZmlsZSkgPT4ge1xuICAvLyAgICAgLy8gQ2hlY2sgZmlsZSB0eXBlXG4gIC8vICAgICBpZiAoZmlsZS50eXBlICE9PSAnaW1hZ2UvcG5nJyAmJiAhZmlsZS50eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpKSB7XG4gIC8vICAgICAgIGNvbnNvbGUuZXJyb3IoJ1Vuc3VwcG9ydGVkIGZpbGUgdHlwZTonLCBmaWxlLnR5cGUpO1xuICAvLyAgICAgICByZXR1cm47XG4gIC8vICAgICB9XG4gIFxuICAvLyAgICAgLy8gUmVhZCB0aGUgaW1hZ2UgZmlsZVxuICAvLyAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgLy8gICAgIHJlYWRlci5vbmxvYWQgPSAoZTogYW55KSA9PiB7XG4gIC8vICAgICAgIGNvbnN0IGltYWdlVXJsID0gZS50YXJnZXQucmVzdWx0O1xuICBcbiAgLy8gICAgICAgLy8gQWRkIGltYWdlIHRvIHRoZSB1cGxvYWRlZCBpbWFnZXMgbGlzdFxuICAvLyAgICAgICB0aGlzLnVwbG9hZGVkSW1hZ2VzLnB1c2goaW1hZ2VVcmwpO1xuICBcbiAgLy8gICAgICAgLy8gQ2FsbCBpbnNlcnRJbWFnZUluRWRpdG9yIHRvIGFkZCB0aGUgaW1hZ2UgdG8gdGhlIGVkaXRvclxuICAvLyAgICAgICB0aGlzLmluc2VydEltYWdlSW5FZGl0b3IoaW1hZ2VVcmwpO1xuICAvLyAgICAgfTtcbiAgLy8gICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAvLyAgIH0pO1xuICAvLyB9IC0+IGZvciBQTkdcblxuICByZW1vdmVJbWFnZShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy51cGxvYWRlZEltYWdlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICB9XG4gIFxuICBpbnNlcnRJbWFnZUluRWRpdG9yKGltYWdlVXJsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0VkaXRvciBlbGVtZW50IG5vdCBmb3VuZC4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIFxuICAgIC8vIENyZWF0ZSBpbWFnZSBlbGVtZW50XG4gICAgY29uc3QgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG4gICAgaW1nLnNyYyA9IGltYWdlVXJsO1xuICAgIGltZy5zdHlsZS5tYXhXaWR0aCA9ICcxMDAlJztcbiAgICBpbWcuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgaW1nLnN0eWxlLndpZHRoID0gJzMwMHB4JzsgXG4gICAgaW1nLnN0eWxlLmhlaWdodCA9ICdhdXRvJztcbiAgXG4gICAgLy8gQ3JlYXRlIGEgd3JhcHBlciBhcm91bmQgdGhlIGltYWdlIHRvIGFsbG93IHJlc2l6aW5nXG4gICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHdyYXBwZXIuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnO1xuICAgIHdyYXBwZXIuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snOyAgLy8gRW5zdXJlcyB0aGUgd3JhcHBlciBvbmx5IHRha2VzIHVwIHNwYWNlIGZvciB0aGUgaW1hZ2VcbiAgICB3cmFwcGVyLnN0eWxlLm1hcmdpbiA9ICcxMHB4JztcbiAgICB3cmFwcGVyLnN0eWxlLnBhZGRpbmcgPSAnNXB4JztcbiAgICB3cmFwcGVyLnN0eWxlLmJvcmRlciA9ICcxcHggZGFzaGVkICNjY2MnOyAvLyBPcHRpb25hbCBib3JkZXIgdG8gaW5kaWNhdGUgdGhlIGltYWdlIGFyZWFcbiAgXG4gICAgLy8gQXBwZW5kIHRoZSBpbWFnZSB0byB0aGUgd3JhcHBlclxuICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoaW1nKTtcbiAgXG4gICAgLy8gQXBwZW5kIHRoZSB3cmFwcGVyIHRvIHRoZSBlZGl0b3JcbiAgICBlZGl0b3IuYXBwZW5kQ2hpbGQod3JhcHBlcik7XG4gIFxuICAgIC8vIE1ha2UgdGhlIGltYWdlIHJlc2l6YWJsZVxuICAgIHRoaXMubWFrZUltYWdlUmVzaXphYmxlKHdyYXBwZXIsIGltZyk7XG4gIFxuICAgIC8vIE9wdGlvbmFsbHksIGFkZCBhIHRleHQgbm9kZSB0byBtYWludGFpbiBjdXJzb3IgcG9zaXRpb24gYWZ0ZXIgYXBwZW5kaW5nIHRoZSBpbWFnZVxuICAgIGNvbnN0IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ1xcdTIwMEInKTsgIC8vIEludmlzaWJsZSBjaGFyYWN0ZXIgdG8gbWFpbnRhaW4gcG9zaXRpb25cbiAgICBlZGl0b3IuYXBwZW5kQ2hpbGQodGV4dE5vZGUpO1xuICAgIFxuICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICByYW5nZS5zZXRTdGFydEFmdGVyKHdyYXBwZXIpO1xuICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpO1xuICBcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcbiAgICB9XG4gIH1cbiAgXG4gIG1ha2VJbWFnZVJlc2l6YWJsZSh3cmFwcGVyOiBIVE1MRWxlbWVudCwgaW1nOiBIVE1MSW1hZ2VFbGVtZW50KTogdm9pZCB7XG4gICAgbGV0IGlzUmVzaXppbmcgPSBmYWxzZTtcbiAgICBsZXQgc3RhcnRYID0gMDtcbiAgICBsZXQgc3RhcnRZID0gMDtcbiAgICBsZXQgc3RhcnRXaWR0aCA9IDA7XG4gICAgbGV0IHN0YXJ0SGVpZ2h0ID0gMDtcbiAgXG4gICAgLy8gQ3JlYXRlIHJlc2l6ZSBoYW5kbGVzIGZvciB0aGUgaW1hZ2VcbiAgICBjb25zdCBjcmVhdGVSZXNpemVIYW5kbGUgPSAoXG4gICAgICBjdXJzb3I6IHN0cmluZyxcbiAgICAgIHBvc2l0aW9uU3R5bGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICAgICAgcmVzaXplQ2FsbGJhY2s6IChkZWx0YVg6IG51bWJlciwgZGVsdGFZOiBudW1iZXIpID0+IHZvaWRcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgaGFuZGxlLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICAgIGhhbmRsZS5zdHlsZS53aWR0aCA9ICcxMHB4JztcbiAgICAgIGhhbmRsZS5zdHlsZS5oZWlnaHQgPSAnMTBweCc7XG4gICAgICBoYW5kbGUuc3R5bGUuYmFja2dyb3VuZCA9ICdyZ2JhKDAsIDAsIDAsIDAuNSknO1xuICAgICAgaGFuZGxlLnN0eWxlLmN1cnNvciA9IGN1cnNvcjtcbiAgICAgIE9iamVjdC5hc3NpZ24oaGFuZGxlLnN0eWxlLCBwb3NpdGlvblN0eWxlcyk7XG4gIFxuICAgICAgaGFuZGxlLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIChyZXNpemVFdmVudCkgPT4ge1xuICAgICAgICBpc1Jlc2l6aW5nID0gdHJ1ZTtcbiAgICAgICAgc3RhcnRYID0gcmVzaXplRXZlbnQuY2xpZW50WDtcbiAgICAgICAgc3RhcnRZID0gcmVzaXplRXZlbnQuY2xpZW50WTtcbiAgICAgICAgc3RhcnRXaWR0aCA9IGltZy5vZmZzZXRXaWR0aDtcbiAgICAgICAgc3RhcnRIZWlnaHQgPSBpbWcub2Zmc2V0SGVpZ2h0O1xuICBcbiAgICAgICAgY29uc3Qgb25Nb3VzZU1vdmUgPSAobW92ZUV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgaWYgKGlzUmVzaXppbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlbHRhWCA9IG1vdmVFdmVudC5jbGllbnRYIC0gc3RhcnRYO1xuICAgICAgICAgICAgY29uc3QgZGVsdGFZID0gbW92ZUV2ZW50LmNsaWVudFkgLSBzdGFydFk7XG4gICAgICAgICAgICByZXNpemVDYWxsYmFjayhkZWx0YVgsIGRlbHRhWSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICBcbiAgICAgICAgY29uc3Qgb25Nb3VzZVVwID0gKCkgPT4ge1xuICAgICAgICAgIGlzUmVzaXppbmcgPSBmYWxzZTtcbiAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XG4gICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XG4gICAgICAgIH07XG4gIFxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xuICAgICAgfSk7XG4gIFxuICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChoYW5kbGUpO1xuICAgIH07XG4gIFxuICAgIC8vIEFkZCByZXNpemluZyBoYW5kbGVzIHRvIHRoZSB3cmFwcGVyIGZvciB0aGUgaW1hZ2VcbiAgICBjcmVhdGVSZXNpemVIYW5kbGUoXG4gICAgICAnbnctcmVzaXplJyxcbiAgICAgIHsgdG9wOiAnLTVweCcsIGxlZnQ6ICctNXB4JyB9LFxuICAgICAgKGRlbHRhWCwgZGVsdGFZKSA9PiB7XG4gICAgICAgIGltZy5zdHlsZS53aWR0aCA9IGAke3N0YXJ0V2lkdGggLSBkZWx0YVh9cHhgO1xuICAgICAgICBpbWcuc3R5bGUuaGVpZ2h0ID0gYCR7c3RhcnRIZWlnaHQgLSBkZWx0YVl9cHhgO1xuICAgICAgfVxuICAgICk7XG4gICAgY3JlYXRlUmVzaXplSGFuZGxlKFxuICAgICAgJ3NlLXJlc2l6ZScsXG4gICAgICB7IGJvdHRvbTogJy01cHgnLCByaWdodDogJy01cHgnIH0sXG4gICAgICAoZGVsdGFYLCBkZWx0YVkpID0+IHtcbiAgICAgICAgaW1nLnN0eWxlLndpZHRoID0gYCR7c3RhcnRXaWR0aCArIGRlbHRhWH1weGA7XG4gICAgICAgIGltZy5zdHlsZS5oZWlnaHQgPSBgJHtzdGFydEhlaWdodCArIGRlbHRhWX1weGA7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuICBcblxuICBpbnNlcnRJbWFnZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGlmIChpbnB1dD8uZmlsZXMpIHtcbiAgICAgIEFycmF5LmZyb20oaW5wdXQuZmlsZXMpLmZvckVhY2goZmlsZSA9PiB7XG4gICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgIHJlYWRlci5vbmxvYWQgPSAoZTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgaW1hZ2VVcmwgPSBlLnRhcmdldC5yZXN1bHQ7XG4gICAgICAgICAgdGhpcy51cGxvYWRlZEltYWdlcy5wdXNoKGltYWdlVXJsKTsgLy8gU3RvcmUgaW1hZ2UgVVJMIGluIHRoZSBhcnJheVxuICAgICAgICB9O1xuICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBcblxuICBjb252ZXJ0SW1hZ2UoZmlsZTogRmlsZSk6IFByb21pc2U8RmlsZT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoZmlsZS50eXBlICE9PSAnaW1hZ2UvcG5nJykge1xuICAgICAgICByZXNvbHZlKGZpbGUpOyAvLyBSZXR1cm4gdGhlIG9yaWdpbmFsIGZpbGUgaWYgaXQncyBub3QgYSBQTkdcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICBcbiAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgXG4gICAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xuICAgICAgICBpbWcuc3JjID0gZS50YXJnZXQucmVzdWx0O1xuICBcbiAgICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgXG4gICAgICAgICAgaWYgKCFjdHgpIHtcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0ZhaWxlZCB0byBnZXQgY2FudmFzIGNvbnRleHQnKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICBcbiAgICAgICAgICBjYW52YXMud2lkdGggPSBpbWcud2lkdGg7XG4gICAgICAgICAgY2FudmFzLmhlaWdodCA9IGltZy5oZWlnaHQ7XG4gIFxuICAgICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwKTtcbiAgICAgICAgICBjYW52YXMudG9CbG9iKFxuICAgICAgICAgICAgYmxvYiA9PiB7XG4gICAgICAgICAgICAgIGlmIChibG9iKSB7XG4gICAgICAgICAgICAgICAgY29uc3QganBnRmlsZSA9IG5ldyBGaWxlKFtibG9iXSwgZmlsZS5uYW1lLnJlcGxhY2UoL1xcLnBuZyQvLCAnLmpwZycpLCB7IHR5cGU6ICdpbWFnZS9qcGVnJyB9KTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGpwZ0ZpbGUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0ZhaWxlZCB0byBjb252ZXJ0IFBORyB0byBKUEcnKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnaW1hZ2UvanBlZycsXG4gICAgICAgICAgICAwLjk1IC8vIFF1YWxpdHkgZmFjdG9yIGZvciBKUEVHXG4gICAgICAgICAgKTtcbiAgICAgICAgfTtcbiAgICAgIH07XG4gIFxuICAgICAgcmVhZGVyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QobmV3IEVycm9yKCdGYWlsZWQgdG8gcmVhZCB0aGUgZmlsZScpKTtcbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAgIH0pO1xuICB9XG4gIFxuICBcbiAgXG5cbiAgLy8gaW5zZXJ0SW1hZ2VCeURyYWcoaW1hZ2VVcmw6IHN0cmluZyk6IHZvaWQge1xuICAvLyAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5lZGl0b3InKSBhcyBIVE1MRWxlbWVudDtcbiAgLy8gICBpZiAoIWVkaXRvcikge1xuICAvLyAgICAgY29uc29sZS5lcnJvcignRWRpdG9yIGVsZW1lbnQgbm90IGZvdW5kLicpO1xuICAvLyAgICAgcmV0dXJuO1xuICAvLyAgIH1cblxuICAvLyAgIGNvbnN0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICAvLyAgIGltZy5zcmMgPSBpbWFnZVVybDtcbiAgLy8gICBpbWcuc3R5bGUubWF4V2lkdGggPSAnMTAwJSc7XG4gIC8vICAgaW1nLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAvLyAgIGltZy5zdHlsZS53aWR0aCA9ICczMDBweCc7IFxuICAvLyAgIGltZy5zdHlsZS5oZWlnaHQgPSAnYXV0byc7XG5cbiAgLy8gICBlZGl0b3IuYXBwZW5kQ2hpbGQoaW1nKTtcbiAgLy8gfVxuICBcblxuICBpbnNlcnRJbWFnZVRvRWRpdG9yKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBmaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xuICAgIGlmIChmaWxlKSB7XG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgaW1hZ2VVcmwgPSBlLnRhcmdldC5yZXN1bHQ7XG4gICAgICAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5lZGl0b3InKSBhcyBIVE1MRWxlbWVudDtcbiAgXG4gICAgICAgIGlmICghZWRpdG9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRWRpdG9yIGVsZW1lbnQgbm90IGZvdW5kLicpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICBcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgd3JhcHBlci5jb250ZW50RWRpdGFibGUgPSAnZmFsc2UnOyBcbiAgICAgICAgd3JhcHBlci5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XG4gICAgICAgIHdyYXBwZXIuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xuICAgICAgICB3cmFwcGVyLnN0eWxlLmJvcmRlciA9ICcxcHggZGFzaGVkICNjY2MnOyBcbiAgICAgICAgd3JhcHBlci5zdHlsZS5tYXJnaW4gPSAnMTBweCc7XG4gICAgICAgIHdyYXBwZXIuc3R5bGUucGFkZGluZyA9ICc1cHgnO1xuICAgICAgICB3cmFwcGVyLnN0eWxlLmJvcmRlckJsb2NrQ29sb3IgPSAnIzAwN0JGRic7XG4gIFxuICAgICAgICBcbiAgICAgICAgY29uc3QgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG4gICAgICAgIGltZy5zcmMgPSBpbWFnZVVybDtcbiAgICAgICAgaW1nLnN0eWxlLm1heFdpZHRoID0gJzEwMCUnO1xuICAgICAgICBpbWcuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgIGltZy5zdHlsZS53aWR0aCA9ICczMDBweCc7IFxuICAgICAgICBpbWcuc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nO1xuICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKGltZyk7XG4gIFxuICAgICAgICBcbiAgICAgICAgbGV0IGlzUmVzaXppbmcgPSBmYWxzZTtcbiAgICAgICAgbGV0IHN0YXJ0WCA9IDA7XG4gICAgICAgIGxldCBzdGFydFkgPSAwO1xuICAgICAgICBsZXQgc3RhcnRXaWR0aCA9IDA7XG4gICAgICAgIGxldCBzdGFydEhlaWdodCA9IDA7XG4gIFxuICAgICAgICBjb25zdCBjcmVhdGVSZXNpemVIYW5kbGUgPSAoXG4gICAgICAgICAgY3Vyc29yOiBzdHJpbmcsXG4gICAgICAgICAgcG9zaXRpb25TdHlsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gICAgICAgICAgcmVzaXplQ2FsbGJhY2s6IChkZWx0YVg6IG51bWJlciwgZGVsdGFZOiBudW1iZXIpID0+IHZvaWRcbiAgICAgICAgKSA9PiB7XG4gICAgICAgICAgY29uc3QgaGFuZGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgaGFuZGxlLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICAgICAgICBoYW5kbGUuc3R5bGUud2lkdGggPSAnMTBweCc7XG4gICAgICAgICAgaGFuZGxlLnN0eWxlLmhlaWdodCA9ICcxMHB4JztcbiAgICAgICAgICBoYW5kbGUuc3R5bGUuYmFja2dyb3VuZCA9ICdyZ2JhKDAsIDAsIDAsIDAuNSknO1xuICAgICAgICAgIGhhbmRsZS5zdHlsZS5jdXJzb3IgPSBjdXJzb3I7XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihoYW5kbGUuc3R5bGUsIHBvc2l0aW9uU3R5bGVzKTtcbiAgXG4gICAgICAgICAgaGFuZGxlLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIChyZXNpemVFdmVudCkgPT4ge1xuICAgICAgICAgICAgaXNSZXNpemluZyA9IHRydWU7XG4gICAgICAgICAgICBzdGFydFggPSByZXNpemVFdmVudC5jbGllbnRYO1xuICAgICAgICAgICAgc3RhcnRZID0gcmVzaXplRXZlbnQuY2xpZW50WTtcbiAgICAgICAgICAgIHN0YXJ0V2lkdGggPSBpbWcub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICBzdGFydEhlaWdodCA9IGltZy5vZmZzZXRIZWlnaHQ7XG4gIFxuICAgICAgICAgICAgY29uc3Qgb25Nb3VzZU1vdmUgPSAobW92ZUV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChpc1Jlc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVsdGFYID0gbW92ZUV2ZW50LmNsaWVudFggLSBzdGFydFg7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVsdGFZID0gbW92ZUV2ZW50LmNsaWVudFkgLSBzdGFydFk7XG4gICAgICAgICAgICAgICAgcmVzaXplQ2FsbGJhY2soZGVsdGFYLCBkZWx0YVkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICBcbiAgICAgICAgICAgIGNvbnN0IG9uTW91c2VVcCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgaXNSZXNpemluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XG4gICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xuICAgICAgICAgICAgfTtcbiAgXG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcbiAgICAgICAgICB9KTtcbiAgXG4gICAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChoYW5kbGUpO1xuICAgICAgICB9O1xuICBcbiAgICAgICAgXG4gICAgICAgIGNyZWF0ZVJlc2l6ZUhhbmRsZShcbiAgICAgICAgICAnbnctcmVzaXplJyxcbiAgICAgICAgICB7IHRvcDogJy01cHgnLCBsZWZ0OiAnLTVweCcgfSxcbiAgICAgICAgICAoZGVsdGFYLCBkZWx0YVkpID0+IHtcbiAgICAgICAgICAgIGltZy5zdHlsZS53aWR0aCA9IGAke3N0YXJ0V2lkdGggLSBkZWx0YVh9cHhgO1xuICAgICAgICAgICAgaW1nLnN0eWxlLmhlaWdodCA9IGAke3N0YXJ0SGVpZ2h0IC0gZGVsdGFZfXB4YDtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIGNyZWF0ZVJlc2l6ZUhhbmRsZShcbiAgICAgICAgICAnc2UtcmVzaXplJyxcbiAgICAgICAgICB7IGJvdHRvbTogJy01cHgnLCByaWdodDogJy01cHgnIH0sXG4gICAgICAgICAgKGRlbHRhWCwgZGVsdGFZKSA9PiB7XG4gICAgICAgICAgICBpbWcuc3R5bGUud2lkdGggPSBgJHtzdGFydFdpZHRoICsgZGVsdGFYfXB4YDtcbiAgICAgICAgICAgIGltZy5zdHlsZS5oZWlnaHQgPSBgJHtzdGFydEhlaWdodCArIGRlbHRhWX1weGA7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICBcbiAgICAgICAgXG4gICAgICAgIGVkaXRvci5hcHBlbmRDaGlsZCh3cmFwcGVyKTtcbiAgXG4gICAgICAgIFxuICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdcXHUyMDBCJyk7IFxuICAgICAgICBlZGl0b3IuYXBwZW5kQ2hpbGQodGV4dE5vZGUpO1xuICAgICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICAgIHJhbmdlLnNldFN0YXJ0QWZ0ZXIod3JhcHBlcik7XG4gICAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpO1xuICBcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgICB9XG4gIH1cbiAgXG4gIFxuXG4gIFxuXG5cbiAgb3BlblRhYmxlRGlhbG9nKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5yb3dzID0gMTsgXG4gICAgdGhpcy5jb2xzID0gMTtcblxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy50YWJsZURpYWxvZywge1xuICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgdG9wOiBgJHtldmVudC5jbGllbnRZfXB4YCxcbiAgICAgICAgbGVmdDogYCR7ZXZlbnQuY2xpZW50WH1weGAsXG4gICAgICB9LFxuICAgICAgcGFuZWxDbGFzczogJ2N1c3RvbS1kaWFsb2ctY29udGFpbmVyJ1xuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5pbnNlcnRUYWJsZShyZXN1bHQucm93cywgcmVzdWx0LmNvbHMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlUHJldmlldyhjb2xzOiBudW1iZXIsIHJvd3M6IG51bWJlcikge1xuICAgIHRoaXMuY29scyA9IGNvbHM7XG4gICAgdGhpcy5yb3dzID0gcm93cztcbiAgfVxuXG4gIHVwZGF0ZVNlbGVjdGlvbihjb2xJbmRleDogbnVtYmVyLCByb3dJbmRleDogbnVtYmVyLCBkaWFsb2dSZWY6IGFueSkge1xuICAgIHRoaXMuY29scyA9IGNvbEluZGV4O1xuICAgIHRoaXMucm93cyA9IHJvd0luZGV4O1xuICAgIGRpYWxvZ1JlZi5jbG9zZSh7IHJvd3M6IHRoaXMucm93cywgY29sczogdGhpcy5jb2xzIH0pOyAvLyBDbG9zZSBkaWFsb2cgd2l0aCBzZWxlY3Rpb25cbiAgfVxuICBcbiAgXG5cbiAgbWFrZUZpcnN0Um93SGVhZGVyKCk6IHZvaWQge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICBcbiAgICAvLyBDaGVjayBpZiBzZWxlY3Rpb24gaXMgaW5zaWRlIHRoZSBlZGl0b3JcbiAgICBpZiAoIXRoaXMuaXNTZWxlY3Rpb25JbnNpZGVFZGl0b3IoZWRpdG9yLCBzZWxlY3Rpb24pKSB7XG4gICAgICBhbGVydCgnUGxlYXNlIHBsYWNlIHRoZSBjdXJzb3IgaW5zaWRlIHRoZSB0YWJsZSB0byBtYWtlIHRoZSBmaXJzdCByb3cgYSBoZWFkZXIuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICBcbiAgICAvLyBGaW5kIHRoZSBjbG9zZXN0IHRhYmxlIHRvIHRoZSBzZWxlY3Rpb25cbiAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xuICAgIGNvbnN0IHNlbGVjdGVkTm9kZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyO1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5maW5kQ2xvc2VzdFRhYmxlKHNlbGVjdGVkTm9kZSk7XG4gIFxuICAgIGlmICghdGFibGUpIHtcbiAgICAgIGFsZXJ0KCdObyB0YWJsZSBmb3VuZCBuZWFyIHRoZSBjdXJzb3IuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICBcbiAgICAvLyBDb252ZXJ0IHRoZSBmaXJzdCByb3cgY2VsbHMgdG8gaGVhZGVyIGNlbGxzXG4gICAgY29uc3QgZmlyc3RSb3cgPSB0YWJsZS5yb3dzWzBdO1xuICAgIGlmIChmaXJzdFJvdykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaXJzdFJvdy5jZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjZWxsID0gZmlyc3RSb3cuY2VsbHNbaV07XG4gICAgICAgIGNvbnN0IHRoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGgnKTtcbiAgICAgICAgdGguaW5uZXJIVE1MID0gY2VsbC5pbm5lckhUTUw7XG4gICAgICAgIHRoLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInO1xuICAgICAgICB0aC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnI0YxRjFGMCc7XG4gICAgICAgIHRoLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgYmxhY2snO1xuICAgICAgICB0aC5zdHlsZS5ib3JkZXJDb2xsYXBzZSA9ICdjb2xsYXBzZSc7XG4gICAgICAgIHRoLnN0eWxlLnBhZGRpbmcgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjZWxsKS5wYWRkaW5nOyAvLyBSZXRhaW4gcGFkZGluZ1xuICAgICAgICB0aC5zdHlsZS53aWR0aCA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGNlbGwpLndpZHRoOyAvLyBSZXRhaW4gd2lkdGhcbiAgICAgICAgdGguc3R5bGUuaGVpZ2h0ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoY2VsbCkuaGVpZ2h0O1xuICAgICAgICBmaXJzdFJvdy5yZXBsYWNlQ2hpbGQodGgsIGNlbGwpO1xuICAgICAgfVxuICAgIH1cbiAgXG4gICAgZWRpdG9yLmZvY3VzKCk7XG4gIH1cbiAgXG4gIHByaXZhdGUgZmluZENsb3Nlc3RUYWJsZShub2RlOiBOb2RlKTogSFRNTFRhYmxlRWxlbWVudCB8IG51bGwge1xuICAgIHdoaWxlIChub2RlICYmIG5vZGUgIT09IGRvY3VtZW50KSB7XG4gICAgICBpZiAobm9kZS5ub2RlTmFtZSA9PT0gJ1RBQkxFJykge1xuICAgICAgICByZXR1cm4gbm9kZSBhcyBIVE1MVGFibGVFbGVtZW50O1xuICAgICAgfVxuICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZSE7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIFxuICBcbiAgaW5zZXJ0VGFibGUocm93czogc3RyaW5nLCBjb2xzOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCByb3dDb3VudCA9IHBhcnNlSW50KHJvd3MsIDEwKTtcbiAgICBjb25zdCBjb2xDb3VudCA9IHBhcnNlSW50KGNvbHMsIDEwKTtcbiAgXG4gICAgaWYgKGlzTmFOKHJvd0NvdW50KSB8fCBpc05hTihjb2xDb3VudCkgfHwgcm93Q291bnQgPCAxIHx8IGNvbENvdW50IDwgMSkge1xuICAgICAgYWxlcnQoJ1BsZWFzZSBlbnRlciB2YWxpZCBudW1iZXJzIGZvciByb3dzIGFuZCBjb2x1bW5zLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgXG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gIFxuICAgIC8vIEVuc3VyZSBzZWxlY3Rpb24gaXMgaW5zaWRlIHRoZSBlZGl0b3JcbiAgICBpZiAoIXRoaXMuaXNTZWxlY3Rpb25JbnNpZGVFZGl0b3IoZWRpdG9yLCBzZWxlY3Rpb24pKSB7XG4gICAgICAvLyBBcHBlbmQgdGhlIHRhYmxlIGF0IHRoZSBlbmQgaWYgc2VsZWN0aW9uIGlzIG91dHNpZGUgZWRpdG9yXG4gICAgICB0aGlzLmFwcGVuZFRhYmxlKGVkaXRvciwgcm93Q291bnQsIGNvbENvdW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIFxuICAgIC8vIFByb2NlZWQgdG8gaW5zZXJ0IHRoZSB0YWJsZSBpZiBzZWxlY3Rpb24gaXMgdmFsaWRcbiAgICBjb25zdCB0YWJsZUhUTUwgPSB0aGlzLmNyZWF0ZVRhYmxlSFRNTChyb3dDb3VudCwgY29sQ291bnQpO1xuICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XG4gICAgcmFuZ2UuZGVsZXRlQ29udGVudHMoKTsgLy8gUmVtb3ZlIGFueSBzZWxlY3RlZCBjb250ZW50XG4gIFxuICAgIGNvbnN0IHRlbXBEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB0ZW1wRGl2LmlubmVySFRNTCA9IHRhYmxlSFRNTDtcbiAgXG4gICAgcmFuZ2UuaW5zZXJ0Tm9kZSh0ZW1wRGl2LmZpcnN0Q2hpbGQhKTsgLy8gSW5zZXJ0IHRoZSB0YWJsZVxuICBcbiAgICAvLyBNb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIGZpcnN0IGNlbGwgb2YgdGhlIG5ldyB0YWJsZVxuICAgIHRoaXMuc2V0Q3Vyc29yVG9GaXJzdENlbGwodGVtcERpdi5maXJzdENoaWxkIGFzIEhUTUxFbGVtZW50KTtcbiAgICBlZGl0b3IuZm9jdXMoKTtcbiAgfVxuICBcbiAgLy8gSGVscGVyIGZ1bmN0aW9uOiBDcmVhdGUgdGFibGUgSFRNTFxuICBwcml2YXRlIGNyZWF0ZVRhYmxlSFRNTChyb3dDb3VudDogbnVtYmVyLCBjb2xDb3VudDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBsZXQgdGFibGVIVE1MID0gJzx0YWJsZSBib3JkZXI9XCIxXCIgc3R5bGU9XCJib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyBtYXJnaW46NXB4XCI+JztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd0NvdW50OyBpKyspIHtcbiAgICAgIHRhYmxlSFRNTCArPSAnPHRyPic7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbENvdW50OyBqKyspIHtcbiAgICAgICAgdGFibGVIVE1MICs9IGA8dGQgc3R5bGU9XCJmb250LXNpemU6IDE0cHg7IG1pbi13aWR0aDogMS41ZW07IGhlaWdodDogMmVtOyBwYWRkaW5nOiAuNGVtOyBib3JkZXI6IDFweCBzb2xpZCBibGFja1wiIFxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cInRleHRib3hcIiBjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCI+PC90ZD5gO1xuICAgICAgfVxuICAgICAgdGFibGVIVE1MICs9ICc8L3RyPic7XG4gICAgfVxuICAgIHRhYmxlSFRNTCArPSAnPC90YWJsZT4nO1xuICAgIHJldHVybiB0YWJsZUhUTUw7XG4gIH1cbiAgXG4gIFxuICAvLyBIZWxwZXIgZnVuY3Rpb246IEFwcGVuZCBhIHRhYmxlIGF0IHRoZSBlbmQgb2YgdGhlIGVkaXRvclxuICBwcml2YXRlIGFwcGVuZFRhYmxlKGVkaXRvcjogSFRNTEVsZW1lbnQsIHJvd0NvdW50OiBudW1iZXIsIGNvbENvdW50OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCB0YWJsZUhUTUwgPSB0aGlzLmNyZWF0ZVRhYmxlSFRNTChyb3dDb3VudCwgY29sQ291bnQpO1xuICAgIGVkaXRvci5pbm5lckhUTUwgKz0gdGFibGVIVE1MO1xuICBcbiAgICAvLyBTZXQgY3Vyc29yIGluc2lkZSB0aGUgZmlyc3QgY2VsbCBvZiB0aGUgbmV3IHRhYmxlXG4gICAgY29uc3QgbGFzdEluc2VydGVkVGFibGUgPSBlZGl0b3IucXVlcnlTZWxlY3RvcigndGFibGU6bGFzdC1jaGlsZCcpIGFzIEhUTUxFbGVtZW50O1xuICAgIHRoaXMuc2V0Q3Vyc29yVG9GaXJzdENlbGwobGFzdEluc2VydGVkVGFibGUpO1xuICAgIGVkaXRvci5mb2N1cygpO1xuICB9XG4gIFxuICAvLyBIZWxwZXIgZnVuY3Rpb246IENoZWNrIGlmIHNlbGVjdGlvbiBpcyBpbnNpZGUgdGhlIGVkaXRvclxuICBwcml2YXRlIGlzU2VsZWN0aW9uSW5zaWRlRWRpdG9yKGVkaXRvcjogSFRNTEVsZW1lbnQsIHNlbGVjdGlvbjogU2VsZWN0aW9uKTogYm9vbGVhbiB7XG4gICAgaWYgKCFzZWxlY3Rpb24ucmFuZ2VDb3VudCkgcmV0dXJuIGZhbHNlO1xuICAgIGxldCBub2RlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCkuY29tbW9uQW5jZXN0b3JDb250YWluZXI7XG4gIFxuICAgIC8vIFRyYXZlcnNlIHVwIHRvIHNlZSBpZiB0aGUgbm9kZSBiZWxvbmdzIHRvIHRoZSBlZGl0b3JcbiAgICB3aGlsZSAobm9kZSkge1xuICAgICAgaWYgKG5vZGUgPT09IGVkaXRvcikgcmV0dXJuIHRydWU7XG4gICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlITtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIFxuICAvLyBIZWxwZXIgZnVuY3Rpb246IE1vdmUgY3Vyc29yIHRvIHRoZSBmaXJzdCBjZWxsXG4gIC8vIHByaXZhdGUgc2V0Q3Vyc29yVG9GaXJzdENlbGwodGFibGU6IEhUTUxFbGVtZW50KSB7XG4gIC8vICAgY29uc3QgZmlyc3RDZWxsID0gdGFibGUucXVlcnlTZWxlY3RvcigndHI6Zmlyc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQnKSBhcyBIVE1MRWxlbWVudDtcbiAgXG4gIC8vICAgaWYgKGZpcnN0Q2VsbCkge1xuICAvLyAgICAgY29uc3QgbmV3UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAvLyAgICAgbmV3UmFuZ2Uuc2V0U3RhcnQoZmlyc3RDZWxsLCAwKTsgLy8gU3RhcnQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgY2VsbFxuICAvLyAgICAgbmV3UmFuZ2UuY29sbGFwc2UodHJ1ZSk7XG4gIFxuICAvLyAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAvLyAgICAgc2VsZWN0aW9uIS5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgLy8gICAgIHNlbGVjdGlvbiEuYWRkUmFuZ2UobmV3UmFuZ2UpO1xuICAvLyAgIH1cbiAgLy8gfVxuXG4gIHByaXZhdGUgc2V0Q3Vyc29yVG9GaXJzdENlbGwodGFibGU6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3QgZmlyc3RDZWxsID0gdGFibGUucXVlcnlTZWxlY3RvcigndHI6Zmlyc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQsIHRyOmZpcnN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkJykgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBpZiAoZmlyc3RDZWxsKSB7XG4gICAgICAgIC8vIEVuc3VyZSB0aGUgY2VsbCBpcyBjb250ZW50ZWRpdGFibGVcbiAgICAgICAgZmlyc3RDZWxsLnNldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJywgJ3RydWUnKTtcblxuICAgICAgICAvLyBGb2N1cyB0aGUgY2VsbFxuICAgICAgICBmaXJzdENlbGwuZm9jdXMoKTtcblxuICAgICAgICAvLyBDcmVhdGUgYSByYW5nZSBhbmQgcGxhY2UgdGhlIGN1cnNvciBhdCB0aGUgc3RhcnQgb2YgdGhlIGNlbGxcbiAgICAgICAgY29uc3QgbmV3UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgICBuZXdSYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZmlyc3RDZWxsKTsgLy8gU2VsZWN0IHRoZSBjb250ZW50cyBvZiB0aGUgY2VsbFxuICAgICAgICBuZXdSYW5nZS5jb2xsYXBzZSh0cnVlKTsgLy8gQ29sbGFwc2UgdG8gdGhlIHN0YXJ0XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UobmV3UmFuZ2UpO1xuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgXG4gIFxuXG4gIGluc2VydFBhZ2VCcmVhaygpOiB2b2lkIHtcbiAgICBjb25zdCBwYWdlQnJlYWsgPSBgPGRpdiBzdHlsZT1cInBhZ2UtYnJlYWstYWZ0ZXI6IGFsd2F5cztcIj48YnIgLz48L2Rpdj5gO1xuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRIVE1MJywgZmFsc2UsIHBhZ2VCcmVhayk7XG4gIH1cblxuICBzdWJtaXRDb250ZW50KCk6IHZvaWQge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgY29udGVudCA9IGVkaXRvci5pbm5lckhUTUw7IC8vIEdldCB0aGUgSFRNTCBjb250ZW50IGZyb20gdGhlIGVkaXRvclxuICAgIGNvbnN0IHBsYWluVGV4dENvbnRlbnQgPSBlZGl0b3IuaW5uZXJUZXh0OyAvLyBPcHRpb25hbGx5LCBnZXQgcGxhaW4gdGV4dCBjb250ZW50XG5cbiAgICAvLyBGb3IgZGVtb25zdHJhdGlvbiwgeW91IGNhbiBsb2cgaXQgb3IgcHJvY2VzcyBpdCBhcyBuZWVkZWRcbiAgICB0aGlzLm9uQ2hhbmdlKGNvbnRlbnQpO1xuXG4gICAgLy8gRXhhbXBsZTogWW91IGNvdWxkIHNlbmQgdGhpcyBkYXRhIHRvIGEgc2VydmVyIG9yIHVzZSBpdCBlbHNld2hlcmUgaW4geW91ciBhcHBsaWNhdGlvblxuICAgIC8vIHRoaXMueW91clNlcnZpY2Uuc3VibWl0Q29udGVudCh7IGNvbnRlbnQgfSk7IC8vIFJlcGxhY2Ugd2l0aCB5b3VyIHNlcnZpY2UgY2FsbFxuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJkaW1lbnNpb25cIj5cclxuXHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInJpY2gtdGV4dC1lZGl0b3JcIj5cclxuICAgICAgPCEtLSBUb29sYmFyIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidG9vbGJhclwiPlxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJzZWxlY3Qtd3JhcHBlclwiIChjaGFuZ2UpPVwic2V0SGVhZGluZygkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlBcIj5QYXJhZ3JhcGg8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiSDFcIj5IMTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJIMlwiPkgyPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkgzXCI+SDM8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiSDRcIj5INDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJINVwiPkg1PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkg2XCI+SDY8L29wdGlvbj5cclxuICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICA8YnV0dG9uICAoY2xpY2spPVwiZm9ybWF0KCdib2xkJylcIiBhcmlhLWxhYmVsPVwiQm9sZFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5mb3JtYXRfYm9sZDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZm9ybWF0KCdpdGFsaWMnKVwiIGFyaWEtbGFiZWw9XCJJdGFsaWNcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+Zm9ybWF0X2l0YWxpYzwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZm9ybWF0KCd1bmRlcmxpbmUnKVwiIGFyaWEtbGFiZWw9XCJVbmRlcmxpbmVcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+Zm9ybWF0X3VuZGVybGluZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPGJ1dHRvbiAgKGNsaWNrKT1cImZvcm1hdCgnc3RyaWtldGhyb3VnaCcpXCIgYXJpYS1sYWJlbD1cIlN0cmlrZXRocm91Z2hcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+c3RyaWtldGhyb3VnaF9zPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJmb3JtYXQoJ2p1c3RpZnlMZWZ0JylcIiBhcmlhLWxhYmVsPVwiQWxpZ24gTGVmdFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5mb3JtYXRfYWxpZ25fbGVmdDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZm9ybWF0KCdqdXN0aWZ5Q2VudGVyJylcIiBhcmlhLWxhYmVsPVwiQ2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPmZvcm1hdF9hbGlnbl9jZW50ZXI8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImZvcm1hdCgnanVzdGlmeVJpZ2h0JylcIiBhcmlhLWxhYmVsPVwiQWxpZ24gUmlnaHRcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+Zm9ybWF0X2FsaWduX3JpZ2h0PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJmb3JtYXQoJ2p1c3RpZnlGdWxsJylcIiBhcmlhLWxhYmVsPVwiSnVzdGlmeVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5mb3JtYXRfYWxpZ25fanVzdGlmeTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZm9ybWF0KCdpbnNlcnRVbm9yZGVyZWRMaXN0JylcIiBhcmlhLWxhYmVsPVwiVW5vcmRlcmVkIExpc3RcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+Zm9ybWF0X2xpc3RfYnVsbGV0ZWQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImZvcm1hdCgnaW5zZXJ0T3JkZXJlZExpc3QnKVwiIGFyaWEtbGFiZWw9XCJPcmRlcmVkIExpc3RcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+Zm9ybWF0X2xpc3RfbnVtYmVyZWQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgXHJcbiAgICBcclxuICAgICAgICAgICAgPGJ1dHRvbiBjb2xvcj1cInNlY29uZGFyeVwiIGFyaWEtbGFiZWw9XCJJbnNlcnQgSW1hZ2VcIiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTsgZGlzcGxheTogaW5saW5lLWZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyO1wiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIiBcclxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiaW5zZXJ0SW1hZ2VUb0VkaXRvcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAtNTAlOyB0b3A6IDA7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7IG9wYWNpdHk6IDA7IGN1cnNvcjogcG9pbnRlcjtcIlxyXG4gICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCIgXHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICA8bWF0LWljb24gc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZTtcIj5pbnNlcnRfcGhvdG9fb3V0bGluZWQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJvcGVuVGFibGVEaWFsb2coJGV2ZW50KVwiIGNvbG9yPVwic2Vjb25kYXJ5XCIgYXJpYS1sYWJlbD1cIkNob29zZSB0YWJsZSByb3dzIGFuZCBjb2x1bW5zXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPmJvcmRlcl9hbGw8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtYi0xXCIgKGNsaWNrKT1cIm1ha2VGaXJzdFJvd0hlYWRlcigpXCIgY29sb3I9XCJzZWNvbmRhcnlcIiBhcmlhLWxhYmVsPVwiTWFrZSBIZWFkZXJcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTogMjBweDtcIiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5cclxuICAgICAgICAgICAgICAgIHBhZ2VfaGVhZGVyXHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgXHJcbiAgICAgIDwhLS0gRWRpdGFibGUgQXJlYSAtLT5cclxuICAgICAgIDwhLS0gKGtleXByZXNzKT1cIm9uQ29udGVudENoYW5nZSgpXCIgbmVlZCB0byBiZSBpbmNsdWRlZCAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImVkaXRvclwiIGlkPVwiZWRpdG9yXCIgY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiICNlZGl0b3IgIChpbnB1dCk9XCJzdWJtaXRDb250ZW50KClcIiAoYmx1cik9XCJvbkJsdXIoKVwiIChkcm9wKT1cImRyb3AoJGV2ZW50KVwiIChkcmFnb3Zlcik9XCJhbGxvd0Ryb3AoJGV2ZW50KVwiID5cclxuICAgICAgICAgIDwhLS0gWW91ciBjb250ZW50IGdvZXMgaGVyZSAtLT4gXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgXHJcbiAgICA8L2Rpdj5cclxuICAgIFxyXG4gICAgPCEtLSA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjbGFzcz1cInN1Ym1pdFwiIChjbGljayk9XCJzdWJtaXRDb250ZW50KClcIj5TdWJtaXQ8L2J1dHRvbj4gLS0+XHJcbiAgICBcclxuICAgIFxyXG4gICAgPG5nLXRlbXBsYXRlICN0YWJsZURpYWxvZyBsZXQtZGlhbG9nUmVmPVwiZGlhbG9nUmVmXCI+XHJcbiAgICA8aDIgbWF0LWRpYWxvZy10aXRsZT5DaG9vc2UgVGFibGUgU2l6ZTwvaDI+XHJcbiAgICA8bWF0LWRpYWxvZy1jb250ZW50PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JpZC1jb250YWluZXJcIj5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgY2VsbCBvZiBncmlkOyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgJ2dyaWQtaXRlbSc6IHRydWUsXHJcbiAgICAgICAgICAgICdoaWdobGlnaHRlZCc6IGkgJSA3IDwgY29scyAmJiBNYXRoLmZsb29yKGkgLyA3KSA8IHJvd3NcclxuICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgKG1vdXNlZW50ZXIpPVwidXBkYXRlUHJldmlldyhpICUgNyArIDEsIE1hdGguZmxvb3IoaSAvIDcpICsgMSlcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInVwZGF0ZVNlbGVjdGlvbihpICUgNyArIDEsIE1hdGguZmxvb3IoaSAvIDcpICsgMSwgZGlhbG9nUmVmKVwiXHJcbiAgICAgICAgPjwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPHA+e3sgcm93cyB9fSB4IHt7IGNvbHMgfX0gPC9wPlxyXG4gICAgPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgXHJcbiAgICA8ZGl2PlxyXG4gICAgICA8aW5wdXQgY2xhc3M9XCJtdC0yXCIgdHlwZT1cImZpbGVcIiBwbGFjZWhvbGRlcj1cIlVwbG9hZCB5b3VyIGltYWdlcyBoZXJlLi4uXCIgKGNoYW5nZSk9XCJpbnNlcnRJbWFnZSgkZXZlbnQpXCIgYWNjZXB0PVwiaW1hZ2UvcG5nLGltYWdlLypcIiBtdWx0aXBsZSAgLz5cclxuICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZGVkLWltYWdlc1wiICpuZ0lmPVwidXBsb2FkZWRJbWFnZXMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGltYWdlVXJsIG9mIHVwbG9hZGVkSW1hZ2VzOyBsZXQgaSA9IGluZGV4XCIgY2xhc3M9XCJpbWFnZS1wcmV2aWV3XCI+XHJcbiAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VVcmxcIiBhbHQ9XCJVcGxvYWRlZCBJbWFnZVwiIFxyXG4gICAgICAgICAgICAgIGRyYWdnYWJsZT1cInRydWVcIiAgd2lkdGg9XCIxMDBweFwiIGhlaWdodD1cIjEwMHB4XCJcclxuICAgICAgICAgICAgICAoZHJhZ3N0YXJ0KT1cImRyYWcoJGV2ZW50LCBpbWFnZVVybClcIiAvPlxyXG4gICAgICAgICAgPG1hdC1pY29uIHN0eWxlPVwiY29sb3I6IHJlZDtcclxuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVwiIChjbGljayk9XCJyZW1vdmVJbWFnZShpKVwiPmNhbmNlbDwvbWF0LWljb24+XHJcbiAgICAgICAgICBcclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIFxyXG4gICAgPC9kaXY+XHJcbiAgICBcclxuICAgIFxyXG4gICAgXHJcbiAgICBcclxuICAgIFxyXG4gICAgXHJcbiAgICBcclxuICAgICJdfQ==
|
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
import { NgModule } from '@angular/core';
|
|
2
2
|
import { RapidTextEditorComponent } from './rapid-text-editor.component';
|
|
3
3
|
//Mat Modules
|
|
4
|
-
import { MatDialogModule } from '@angular/material/dialog';
|
|
5
4
|
import { MatIconModule } from '@angular/material/icon';
|
|
5
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
6
|
+
import { MatDialogModule } from '@angular/material/dialog';
|
|
6
7
|
import { CommonModule } from '@angular/common';
|
|
7
8
|
import * as i0 from "@angular/core";
|
|
8
9
|
export class RapidTextEditorModule {
|
|
9
10
|
}
|
|
10
11
|
RapidTextEditorModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: RapidTextEditorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
11
12
|
RapidTextEditorModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: RapidTextEditorModule, declarations: [RapidTextEditorComponent], imports: [CommonModule,
|
|
12
|
-
MatDialogModule,
|
|
13
13
|
MatIconModule,
|
|
14
|
+
MatButtonModule,
|
|
14
15
|
MatDialogModule], exports: [RapidTextEditorComponent] });
|
|
15
16
|
RapidTextEditorModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: RapidTextEditorModule, imports: [[
|
|
16
17
|
CommonModule,
|
|
17
|
-
MatDialogModule,
|
|
18
18
|
MatIconModule,
|
|
19
|
+
MatButtonModule,
|
|
19
20
|
MatDialogModule
|
|
20
21
|
]] });
|
|
21
22
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: RapidTextEditorModule, decorators: [{
|
|
@@ -26,8 +27,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
|
|
|
26
27
|
],
|
|
27
28
|
imports: [
|
|
28
29
|
CommonModule,
|
|
29
|
-
MatDialogModule,
|
|
30
30
|
MatIconModule,
|
|
31
|
+
MatButtonModule,
|
|
31
32
|
MatDialogModule
|
|
32
33
|
],
|
|
33
34
|
exports: [
|
|
@@ -35,4 +36,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
|
|
|
35
36
|
]
|
|
36
37
|
}]
|
|
37
38
|
}] });
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFwaWQtdGV4dC1lZGl0b3IubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvcmFwaWQtdGV4dC1lZGl0b3Ivc3JjL2xpYi9yYXBpZC10ZXh0LWVkaXRvci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUV6RSxhQUFhO0FBQ2IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQWdCL0MsTUFBTSxPQUFPLHFCQUFxQjs7bUhBQXJCLHFCQUFxQjtvSEFBckIscUJBQXFCLGlCQVo5Qix3QkFBd0IsYUFHeEIsWUFBWTtRQUNaLGFBQWE7UUFDYixlQUFlO1FBQ2YsZUFBZSxhQUdmLHdCQUF3QjtvSEFHZixxQkFBcUIsWUFWdkI7WUFDUCxZQUFZO1lBQ1osYUFBYTtZQUNiLGVBQWU7WUFDZixlQUFlO1NBQ2hCOzRGQUtVLHFCQUFxQjtrQkFkakMsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osd0JBQXdCO3FCQUN6QjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsZUFBZTtxQkFDaEI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLHdCQUF3QjtxQkFDekI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmFwaWRUZXh0RWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi9yYXBpZC10ZXh0LWVkaXRvci5jb21wb25lbnQnO1xuXG4vL01hdCBNb2R1bGVzXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0RGlhbG9nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIFJhcGlkVGV4dEVkaXRvckNvbXBvbmVudFxuICBdLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgIE1hdERpYWxvZ01vZHVsZVxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgUmFwaWRUZXh0RWRpdG9yQ29tcG9uZW50XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgUmFwaWRUZXh0RWRpdG9yTW9kdWxlIHsgfVxuIl19
|