rapid-text-editor 1.1.0 → 1.1.1

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.
@@ -911,6 +911,9 @@ export class RapidTextEditorComponent {
911
911
  this.insertImageInEditor(data);
912
912
  this.closeSignDialog();
913
913
  }
914
+ undoSignDialog() {
915
+ this.signaturePad.clear();
916
+ }
914
917
  }
915
918
  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 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
916
919
  RapidTextEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: RapidTextEditorComponent, selector: "rapid-text-editor", inputs: { contentCapture: "contentCapture", height: "height", width: "width", iconColor: "iconColor", editorOptions: "editorOptions" }, outputs: { contentChange: "contentChange" }, providers: [
@@ -919,7 +922,7 @@ RapidTextEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0
919
922
  useExisting: forwardRef(() => RapidTextEditorComponent),
920
923
  multi: true
921
924
  }
922
- ], viewQueries: [{ propertyName: "editor", first: true, predicate: ["editor"], descendants: true, static: true }, { propertyName: "tableDialog", first: true, predicate: ["tableDialog"], descendants: true }, { propertyName: "signatureDialog", first: true, predicate: ["signatureDialog"], descendants: true }, { propertyName: "signaturePad", first: true, predicate: ["sigPad"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"dimension\" >\r\n <div class=\"rich-text-editor\">\r\n <!-- Toolbar -->\r\n <div class=\"toolbar\">\r\n <select *ngIf=\"editorOptions?.options?.textFormat ?? true\" class=\"select-wrapper\" [(ngModel)]=\"selectedHead\" (change)=\"setHeading($event)\">\r\n <option value=\"P\" style=\"font-size: 14px !important;\">Paragraph</option>\r\n <option value=\"H1\" style=\"font-size: 32px !important; font-weight: bold !important;\">H1</option>\r\n <option value=\"H2\" style=\"font-size: 28px !important; font-weight: bold !important;\">H2</option>\r\n <option value=\"H3\" style=\"font-size: 24px !important; font-weight: bold !important;\">H3</option>\r\n <option value=\"H4\" style=\"font-size: 20px !important; font-weight: bold !important;\">H4</option>\r\n <option value=\"H5\" style=\"font-size: 18px !important; font-weight: 600 !important;\">H5</option>\r\n <option value=\"H6\" style=\"font-size: 16px !important; font-weight: 600 !important;\">H6</option>\r\n </select>\r\n <select *ngIf=\"editorOptions?.options?.fontSize ?? true\" class=\"select-wrapper\" [(ngModel)]=\"selectedFont\"\r\n (change)=\"setFontSize($event)\">\r\n <option style=\"font-size: 12px !important;\" value=\"12\">12px</option>\r\n <option style=\"font-size: 14px !important;\" value=\"14\" selected>14px</option>\r\n <option style=\"font-size: 16px !important;\" value=\"16\">16px</option>\r\n <option style=\"font-size: 18px !important;\" value=\"18\">18px</option>\r\n <option style=\"font-size: 20px !important;\" value=\"20\">20px</option> \r\n <option style=\"font-size: 24px !important;\" value=\"24\">24px</option>\r\n <option style=\"font-size: 28px !important;\" value=\"28\">28px</option>\r\n <option style=\"font-size: 32px !important;\" value=\"32\">32px</option>\r\n <option style=\"font-size: 48px !important;\" value=\"48\">48px</option>\r\n </select>\r\n <button *ngIf=\"editorOptions?.options?.bold ?? true\" (click)=\"format('bold')\" type=\"button\" aria-label=\"Bold\" title=\"Bold\" >\r\n <svg [attr.fill]=\"iconColor\" viewBox=\"-6.5 0 28 32\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <title>bold</title> <path d=\"M0 25.531v1.344c1.063-0.031 1.938-0.063 2.563-0.094 0.625 0 1.094-0.031 1.313-0.031 1.656-0.125 3.063-0.219 4.281-0.188l2.813 0.063c2.438 0 4.25-0.313 5.75-1 0.719-0.344 1.344-0.844 1.969-1.531 0.469-0.469 0.813-1.031 1.031-1.656 0.25-0.844 0.375-1.594 0.375-2.281 0-2.5-1.719-4.625-5.094-5.406 0.531-0.25 1.031-0.5 1.375-0.688s0.625-0.313 0.781-0.438c1.188-0.875 1.781-1.906 1.781-3.281 0-0.594-0.094-1.188-0.281-1.719-0.375-1.094-1.219-2-2.406-2.563-0.531-0.313-1.031-0.469-1.375-0.531-0.938-0.25-1.844-0.375-2.719-0.375h-1.094c-0.219 0-0.406 0-0.531-0.031h-0.5c-0.063 0-0.156 0-0.25 0.031h-0.625l-5.406 0.156-3.719 0.094 0.063 1.188c0.875 0.125 1.406 0.188 1.625 0.188 0.438 0 0.781 0.094 0.969 0.219 0.094 0 0.156 0.063 0.188 0.125 0.063 0.219 0.125 0.688 0.156 1.563 0.063 1.563 0.063 2.813 0.063 3.75 0.031 0.969 0.031 1.625 0.094 2v7.031c0 1.219-0.031 2.125-0.156 2.75-0.031 0.219-0.125 0.438-0.281 0.688-0.438 0.188-1 0.375-1.75 0.469-0.375 0.063-0.719 0.125-1 0.156zM7.719 14.281v-2.469c0.063-1.719 0-2.969-0.031-3.969-0.063-0.438-0.063-0.844-0.063-1.063 0.75-0.156 1.344-0.219 1.844-0.219 1.625 0 2.844 0.344 3.656 1.094 0.813 0.688 1.219 1.563 1.219 2.656 0 2.969-1.75 4.094-5.063 4.094-0.563 0-1.094-0.031-1.563-0.125zM7.719 20.406v-4.5c0.313-0.063 0.75-0.125 1.438-0.125 1.594-0.031 2.813 0.125 3.563 0.438 1.531 0.563 2.594 2.188 2.594 4.344 0 1.031-0.219 1.844-0.563 2.563-0.375 0.719-0.906 1.219-1.719 1.594-1.656 0.781-3.719 0.719-5.125 0.125-0.094-0.25-0.125-0.438-0.125-0.594z\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.italic ?? true\" (click)=\"format('italic')\" type=\"button\" aria-label=\"Italic\" title=\"Italic\">\r\n <svg viewBox=\"4 0 20 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"Edit / Italic\"> <path id=\"Vector\" d=\"M8 19H10M10 19H12M10 19L14 5M12 5H14M14 5H16\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.underline ?? true\" (click)=\"format('underline')\" type=\"button\" aria-label=\"Underline\" title=\"Underline\">\r\n <svg viewBox=\"4 0 18 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"Edit / Underline\"> <path id=\"Vector\" d=\"M6 19H18M8 5V11C8 13.2091 9.79086 15 12 15C14.2091 15 16 13.2091 16 11V5\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.strikethrough ?? true\" (click)=\"format('strikethrough')\" type=\"button\" aria-label=\"Strikethrough\" title=\"Strikethrough\">\r\n <svg viewBox=\"4 0 20 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"Edit / Strikethrough\"> <path id=\"Vector\" d=\"M12.0005 12.0001C12.8959 12.0001 13.7749 12.1925 14.5457 12.5571C14.8939 12.7218 15.2146 12.9192 15.5009 13.1437C15.8484 13.4162 16.1457 13.729 16.3822 14.0732C16.8136 14.7009 17.0263 15.4096 16.9982 16.1256C16.97 16.8416 16.702 17.5385 16.2222 18.1433C15.7424 18.7481 15.0684 19.2386 14.2705 19.5638C13.4727 19.889 12.5802 20.0373 11.6865 19.9923C10.7928 19.9473 9.93104 19.7108 9.19043 19.3082C8.44982 18.9055 7.85782 18.3514 7.47656 17.7032M12.0005 12.0001H4M12.0005 12.0001H20M16.5243 6.29718C16.143 5.649 15.5512 5.09462 14.8105 4.69197C14.0699 4.28932 13.2076 4.05287 12.314 4.00789C11.4203 3.96291 10.5278 4.11091 9.72998 4.43613C8.93213 4.76135 8.25812 5.25205 7.77832 5.85689C7.29852 6.46173 7.03057 7.15885 7.00244 7.87485C6.9942 8.08463 7.00669 8.29345 7.03924 8.50014\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.alignLeft ?? true\" (click)=\"format('justifyLeft')\" type=\"button\" aria-label=\"Align Left\" title=\"Align Left\" >\r\n <svg viewBox=\"0 0 16 16\" [attr.fill]=\"iconColor\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M11 1H1V3H11V1Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M1 5H15V7H1V5Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M11 9H1V11H11V9Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 13H1V15H15V13Z\" [attr.fill]=\"iconColor\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.alignCenter ?? true\" (click)=\"format('justifyCenter')\" type=\"button\" aria-label=\"Center\" title=\"Align Center\" >\r\n <svg viewBox=\"0 0 16 16\" [attr.fill]=\"iconColor\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M15 1H1V3H15V1Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M1 5H15V7H1V5Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 9H1V11H15V9Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M11 13H1V15H11V13Z\" [attr.fill]=\"iconColor\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.alignRight ?? true\" (click)=\"format('justifyRight')\" type=\"button\" aria-label=\"Align Right\" title=\"Align Right\" >\r\n <svg viewBox=\"0 0 16 16\" [attr.fill]=\"iconColor\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M15 1H5V3H15V1Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M1 5H15V7H1V5Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 9H5V11H15V9Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 13H1V15H15V13Z\" [attr.fill]=\"iconColor\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.justify ?? true\" (click)=\"format('justifyFull')\" type=\"button\" aria-label=\"Justify\" title=\"Justify\" >\r\n <svg [attr.fill]=\"iconColor\" viewBox=\"0 -2.5 29 29\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"><path d=\"m1.334 2.666h26.665c.011 0 .024.001.037.001.737 0 1.334-.597 1.334-1.334s-.597-1.334-1.334-1.334c-.013 0-.026 0-.039.001h.002-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002z\"></path><path d=\"m27.999 5.333h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.011 0 .024.001.037.001.737 0 1.334-.597 1.334-1.334s-.597-1.334-1.334-1.334c-.013 0-.026 0-.039.001z\"></path><path d=\"m27.999 10.667h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.72-.021 1.296-.61 1.296-1.333s-.576-1.312-1.294-1.333z\"></path><path d=\"m27.999 21.333h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.72-.021 1.296-.61 1.296-1.333s-.576-1.312-1.294-1.333z\"></path><path d=\"m27.999 16h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.72-.021 1.296-.61 1.296-1.333s-.576-1.312-1.294-1.333z\"></path></g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.bulletList ?? true\" (click)=\"format('insertUnorderedList')\" type=\"button\" aria-label=\"Unordered List\" title=\"Bullet List\" >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" [attr.fill]=\"iconColor\" viewBox=\"0 0 36 48\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"><path d=\"M8 21c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zM8 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zm0 24.33c-1.47 0-2.67 1.19-2.67 2.67s1.2 2.67 2.67 2.67 2.67-1.19 2.67-2.67-1.2-2.67-2.67-2.67zM14 38h28v-4H14v4zm0-12h28v-4H14v4zm0-16v4h28v-4H14z\"></path></g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.numberedList ?? true\" (click)=\"format('insertOrderedList')\" type=\"button\" aria-label=\"Ordered List\" title=\"Numbered List\" >\r\n <svg [attr.fill]=\"iconColor\" version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 94.479 94.479\" xml:space=\"preserve\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g> <g> <path d=\"M92.479,6.821H26.823c-1.104,0-2,0.896-2,2V19.58c0,1.104,0.896,2,2,2h65.656c1.104,0,2-0.896,2-2V8.821 C94.479,7.717,93.584,6.821,92.479,6.821z\"></path> <path d=\"M92.479,40.457H26.823c-1.104,0-2,0.896-2,2v10.761c0,1.104,0.896,2,2,2h65.656c1.104,0,2-0.896,2-2V42.457 C94.479,41.352,93.584,40.457,92.479,40.457z\"></path> <path d=\"M92.479,75.109H26.823c-1.104,0-2,0.896-2,2v10.759c0,1.104,0.896,2,2,2h65.656c1.104,0,2-0.896,2-2V77.109 C94.479,76.004,93.584,75.109,92.479,75.109z\"></path> <path d=\"M1.842,11.104c0.423,0.051,0.848-0.08,1.167-0.36l0.914-0.799v12.973c0,0.828,0.672,1.5,1.5,1.5h1.546 c0.828,0,1.5-0.672,1.5-1.5V5.567c0-0.828-0.672-1.5-1.5-1.5H5.378c-0.356,0-0.701,0.127-0.973,0.358L0.527,7.728 c-0.589,0.501-0.7,1.369-0.256,2.003l0.522,0.745C1.04,10.825,1.42,11.053,1.842,11.104z\"></path> <path d=\"M2.546,37.5c-0.647,0.23-1.056,0.872-0.99,1.556l0.096,0.999c0.048,0.497,0.339,0.938,0.778,1.176 c0.438,0.238,0.967,0.243,1.409,0.011c1.18-0.615,1.923-0.775,2.922-0.534c0.71,0.163,1.188,0.586,1.438,1.225 c0.378,1.143,0.395,2.957-2.854,6.873l-2.506,2.996c-0.589,0.688-0.99,1.119-1.302,1.404c-0.312,0.284-0.488,0.688-0.488,1.107 v1.475c0,0.828,0.672,1.5,1.5,1.5h9.132c0.828,0,1.5-0.672,1.5-1.5V55.01c0-0.828-0.672-1.5-1.5-1.5H6.896 c0.458-0.515,1.037-1.211,1.716-2.063c2.803-3.468,5.061-6.645,4.292-10.376c-0.309-1.672-1.247-2.966-2.731-3.752 c-0.826-0.424-1.879-0.639-3.127-0.639C5.629,36.68,4.031,36.971,2.546,37.5z\"></path> <path d=\"M10.491,79.516c0.25-0.135,0.487-0.289,0.74-0.483c1.718-1.313,1.801-3.335,1.786-3.885 c-0.001-1.878-0.712-3.318-2.166-4.401c-1.026-0.77-2.534-1.177-4.361-1.177c-1.347,0-2.787,0.212-4.057,0.596 c-0.668,0.202-1.107,0.839-1.063,1.533l0.058,0.88c0.031,0.471,0.28,0.896,0.673,1.155c0.394,0.259,0.886,0.319,1.327,0.159 c0.864-0.307,1.571-0.45,2.223-0.45c0.229,0,0.457,0.019,0.722,0.063c0.94,0.127,1.563,0.549,1.9,1.283 c0.237,0.52,0.19,1.445-0.083,1.885c-0.654,1.014-2.438,1.217-3.443,1.25c-0.81,0.024-1.453,0.688-1.453,1.498v0.658 c0,0.828,0.687,1.5,1.515,1.5c1.575,0,2.311,0.309,2.596,0.485c0.737,0.465,1.065,1.043,1.066,1.918 c0.025,0.912-0.348,1.606-1.129,2.121c-1.014,0.651-2.64,0.647-4.505,0.032c-0.438-0.146-0.918-0.082-1.302,0.175 c-0.384,0.255-0.629,0.672-0.665,1.132l-0.068,0.872C0.75,88.973,1.135,89.588,1.75,89.83c0.33,0.13,0.551,0.183,1.022,0.281 c0.857,0.196,1.84,0.302,2.842,0.302c1.493,0,4.248-0.247,5.944-1.919c1.657-1.69,1.974-4.11,1.56-5.729 C12.636,80.704,11.461,79.946,10.491,79.516z\"></path> </g> </g> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.image ?? true\" aria-label=\"Insert Image\" type=\"button\"\r\n style=\"position: relative; display: inline-flex; align-items: center; justify-content: center;\" title=\"Insert Image\" >\r\n <input type=\"file\" accept=\".png,.jpg,.jpeg\" (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 <svg viewBox=\"2 1 20 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M14.2647 15.9377L12.5473 14.2346C11.758 13.4519 11.3633 13.0605 10.9089 12.9137C10.5092 12.7845 10.079 12.7845 9.67922 12.9137C9.22485 13.0605 8.83017 13.4519 8.04082 14.2346L4.04193 18.2622M14.2647 15.9377L14.606 15.5991C15.412 14.7999 15.8149 14.4003 16.2773 14.2545C16.6839 14.1262 17.1208 14.1312 17.5244 14.2688C17.9832 14.4253 18.3769 14.834 19.1642 15.6515L20 16.5001M14.2647 15.9377L18.22 19.9628M18.22 19.9628C17.8703 20 17.4213 20 16.8 20H7.2C6.07989 20 5.51984 20 5.09202 19.782C4.7157 19.5903 4.40973 19.2843 4.21799 18.908C4.12583 18.7271 4.07264 18.5226 4.04193 18.2622M18.22 19.9628C18.5007 19.9329 18.7175 19.8791 18.908 19.782C19.2843 19.5903 19.5903 19.2843 19.782 18.908C20 18.4802 20 17.9201 20 16.8V13M11 4H7.2C6.07989 4 5.51984 4 5.09202 4.21799C4.7157 4.40973 4.40973 4.71569 4.21799 5.09202C4 5.51984 4 6.0799 4 7.2V16.8C4 17.4466 4 17.9066 4.04193 18.2622M18 9V6M18 6V3M18 6H21M18 6H15\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.table ?? true\" (click)=\"openTableDialog($event)\" type=\"button\" title=\"Table\"\r\n aria-label=\"Choose table rows and columns\">\r\n <svg width=\"26px\" height=\"26px\" viewBox=\"2 12 20 3\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M3 9H21M3 15H21M9 9L9 20M15 9L15 20M6.2 20H17.8C18.9201 20 19.4802 20 19.908 19.782C20.2843 19.5903 20.5903 19.2843 20.782 18.908C21 18.4802 21 17.9201 21 16.8V7.2C21 6.0799 21 5.51984 20.782 5.09202C20.5903 4.71569 20.2843 4.40973 19.908 4.21799C19.4802 4 18.9201 4 17.8 4H6.2C5.0799 4 4.51984 4 4.09202 4.21799C3.71569 4.40973 3.40973 4.71569 3.21799 5.09202C3 5.51984 3 6.07989 3 7.2V16.8C3 17.9201 3 18.4802 3.21799 18.908C3.40973 19.2843 3.71569 19.5903 4.09202 19.782C4.51984 20 5.07989 20 6.2 20Z\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.tableHeader ?? true\" class=\"mb-1\" (click)=\"makeFirstRowHeader()\" type=\"button\" aria-label=\"Make Header\" title=\"Table Header\" >\r\n <svg [attr.fill]=\"iconColor\" viewBox=\"0 0 1920 1920\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M213.333 0C95.5126 0 0 95.5126 0 213.333V1706.67C0 1824.49 95.5126 1920 213.333 1920H1706.67C1824.49 1920 1920 1824.49 1920 1706.67V213.333C1920 95.5126 1824.49 0 1706.67 0H213.333ZM266.667 746.667C237.211 746.667 213.333 722.788 213.333 693.333V373.333C213.333 343.878 237.211 320 266.667 320H1653.33C1682.79 320 1706.67 343.878 1706.67 373.333V693.333C1706.67 722.788 1682.79 746.667 1653.33 746.667H266.667Z\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.signature ?? true\" (click)=\"openSignatureDialog()\" type=\"button\" title=\"Signature\"\r\n aria-label=\"Choose table rows and columns\">\r\n <svg viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" fill=\"#000000\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools --> <desc>Created with Sketch.</desc> <g id=\"\uD83D\uDD0D-Product-Icons\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\"> <g id=\"ic_fluent_signature_28_regular\" fill=\"#212121\" fill-rule=\"nonzero\"> <path d=\"M16.4798956,21.0019578 L16.75,21 C17.9702352,21 18.6112441,21.5058032 19.4020627,22.7041662 L19.7958278,23.3124409 C20.1028266,23.766938 20.2944374,23.9573247 20.535784,24.0567929 C20.9684873,24.2351266 21.3271008,24.1474446 22.6440782,23.5133213 L23.0473273,23.3170319 C23.8709982,22.9126711 24.4330286,22.6811606 25.0680983,22.5223931 C25.4699445,22.4219316 25.8771453,22.6662521 25.9776069,23.0680983 C26.0780684,23.4699445 25.8337479,23.8771453 25.4319017,23.9776069 C25.0371606,24.0762922 24.6589465,24.2178819 24.1641364,24.4458997 L23.0054899,25.0032673 C21.4376302,25.7436944 20.9059009,25.8317321 19.964216,25.4436275 C19.3391237,25.1860028 18.9836765,24.813298 18.4635639,24.0180227 L18.2688903,23.7140849 C17.7071112,22.8288731 17.4057794,22.5384538 16.8688444,22.5036655 L16.75,22.5 C16.2017306,22.5 16.0933104,22.5684572 14.009281,24.1150241 C12.2670395,25.4079488 10.9383359,26.0254984 9.24864243,26.0254984 C7.18872869,26.0254984 5.24773367,25.647067 3.43145875,24.8905363 L6.31377803,24.2241784 C7.25769404,24.4250762 8.23567143,24.5254984 9.24864243,24.5254984 C10.5393035,24.5254984 11.609129,24.0282691 13.1153796,22.9104743 L14.275444,22.0545488 C15.5468065,21.1304903 15.8296113,21.016032 16.4798956,21.0019578 L16.4798956,21.0019578 Z M22.7770988,3.22208979 C24.4507223,4.8957133 24.4507566,7.60916079 22.7771889,9.28281324 L21.741655,10.3184475 C22.8936263,11.7199657 22.8521526,13.2053774 21.7811031,14.279556 L18.7800727,17.2805874 L18.7800727,17.2805874 C18.4870374,17.5733384 18.0121637,17.573108 17.7194126,17.2800727 C17.4266616,16.9870374 17.426892,16.5121637 17.7199273,16.2194126 L20.7188969,13.220444 C21.2039571,12.7339668 21.2600021,12.1299983 20.678941,11.3818945 L10.0845437,21.9761011 C9.78635459,22.2743053 9.41036117,22.482705 8.99944703,22.5775313 L2.91864463,23.9807934 C2.37859061,24.1054212 1.89457875,23.6214094 2.0192066,23.0813554 L3.42247794,17.0005129 C3.51729557,16.5896365 3.72566589,16.2136736 4.0238276,15.9154968 L16.7165019,3.22217992 C18.3900415,1.54855555 21.1034349,1.54851059 22.7770988,3.22208979 Z M17.7771889,4.28281324 L5.08451462,16.9761302 C4.98512738,17.0755224 4.91567061,17.2008434 4.88406473,17.3378022 L3.7506248,22.2493752 L8.66215777,21.1159445 C8.79912915,21.0843357 8.92446029,21.0148692 9.02385665,20.9154678 L21.7165019,8.22217992 C22.8043063,7.13432049 22.8042862,5.37060478 21.7164588,4.2827701 C20.6285914,3.19496507 18.8649506,3.19499653 17.7771889,4.28281324 Z\" id=\"\uD83C\uDFA8-Color\"> </path> </g> </g> </g></svg>\r\n </button>\r\n\r\n </div>\r\n <div class=\"editor\" id=\"editor\" contenteditable=\"true\" #editor (input)=\"submitContent()\" (blur)=\"onBlur()\" (keyup)=\"onEditorKeyUp($event)\" (mouseup)=\"updateCurrentFormat()\"\r\n (drop)=\"drop($event)\" (dragover)=\"allowDrop($event)\">\r\n </div>\r\n </div>\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 *ngFor=\"let cell of grid; let i = index\" [ngClass]=\"{\r\n 'grid-item': true,\r\n 'highlighted': i % 7 < cols && Math.floor(i / 7) < rows\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)\"></div>\r\n </div>\r\n <p>{{ rows }} x {{ cols }} </p>\r\n </mat-dialog-content>\r\n </ng-template> -->\r\n\r\n <!-- Table Dialog -->\r\n <div\r\n class=\"modal fade\"\r\n id=\"tableDialog\"\r\n tabindex=\"-1\"\r\n data-bs-backdrop=\"false\"\r\n >\r\n <div class=\"modal-dialog modal-sm position-absolute\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"m-0\" style=\"font-size: 18px !important; font-weight: 500;\" >Choose Table Size</h5>\r\n </div>\r\n\r\n <div class=\"modal-body\">\r\n <div class=\"grid-container\">\r\n <div\r\n *ngFor=\"let cell of grid; let i = index\"\r\n class=\"grid-item\"\r\n [class.highlighted]=\"i % 7 < cols && Math.floor(i / 7) < rows\"\r\n (mouseenter)=\"updatePreview(i % 7 + 1, Math.floor(i / 7) + 1)\"\r\n (click)=\"updateSelection(i % 7 + 1, Math.floor(i / 7) + 1)\"\r\n ></div>\r\n </div>\r\n <p class=\"text-center mt-2\">{{ rows }} x {{ cols }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <!-- Signature Dialog -->\r\n <div class=\"modal fade\" id=\"signatureDialog\" tabindex=\"-1\">\r\n <div class=\"modal-dialog modal-lg modal-dialog-centered\">\r\n <div class=\"modal-content\">\r\n\r\n <div class=\"modal-header\">\r\n <h5 class=\"m-0\" style=\"font-size: 18px !important; font-weight: 500;\" >Draw a Signature</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\"></button>\r\n </div>\r\n\r\n <div class=\"modal-body text-center\">\r\n <signature-pad\r\n #sigPad\r\n [options]=\"signaturePadOptions\"\r\n class=\"sign\">\r\n </signature-pad>\r\n </div>\r\n\r\n <div class=\"p-3 d-flex justify-content-between align-items-center gap-2 \">\r\n <button type=\"button\" class=\"signClose\" (click)=\"closeSignDialog()\">\r\n Close\r\n </button>\r\n <button type=\"button\" class=\"signSubmit\" (click)=\"submitSignDialog()\">\r\n Submit\r\n </button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <!-- <ng-template #signatureDialog let-dialogRef=\"dialogRef\">\r\n <h2 mat-dialog-title>Draw a Signature</h2>\r\n <signature-pad #sigPad [options]=\"signaturePadOptions\" class=\"sign\" ></signature-pad>\r\n <div class=\"action\" >\r\n <button type=\"button\" class=\"normal\" (click)=\"closeSignDialog(dialogRef)\" > Close </button>\r\n <button type=\"button\" class=\"submit\" (click)=\"submitSignDialog(dialogRef)\" > Submit </button>\r\n </div>\r\n \r\n </ng-template> -->\r\n\r\n\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.dimension{height:100%}.rich-text-editor{border:1px solid #ccc;border-radius:5px;font-family:Calibri;height:100%}::ng-deep .editor{position:relative;min-height:300px;padding:5px;overflow-y:auto;font-family:Calibri;outline:none!important;font-size:14px;height:auto}::ng-deep .editor table{width:100%}::ng-deep .editor table,::ng-deep .editor th,::ng-deep .editor td{border:1px solid black;border-collapse:collapse}::ng-deep .editor th,::ng-deep .editor td{padding:.4rem}::ng-deep .editor th{background-color:#f3f3f3}.fs-12{font-size:12px!important}.fs-13{font-size:13px!important}.fs-14{font-size:14px!important}.fs-16{font-size:16px!important}.fs-18{font-size:18px!important}.fs-20{font-size:20px!important}.fs-24{font-size:24px!important}.fs-28{font-size:28px!important}.editor h1{font-size:32px!important;font-weight:700!important;margin:0}.editor h2{font-size:28px!important;font-weight:700!important;margin:0}.editor h3{font-size:24px!important;font-weight:700!important;margin:0}.editor h4{font-size:20px!important;font-weight:700!important;margin:0}.editor h5{font-size:18px!important;font-weight:600!important;margin:0}.editor h6{font-size:16px!important;font-weight:600!important;margin:0}.editor p{font-size:14px!important;font-weight:400;margin:0}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:70px}.select-wrapper select{appearance:none;width:100%;padding:10px 40px 10px 15px;font-size:16px;color:#333;background-color:#f4f4f4;border:1px solid #ddd;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-bottom:1px solid #ccc;gap:10px}.select-wrapper{padding:8px;font-size:14px;border:1px solid #ddd;cursor:pointer;background-color:#fff}.select-wrapper:focus{outline:none;border-color:#007bff}button{border:none;border-radius:5px;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center}button:hover{color:#007bff}.tooltip{position:relative;display:inline-block;border-bottom:1px dotted black;cursor:pointer}.tooltiptext{visibility:hidden;width:130px;background-color:#000;color:#fff;text-align:center;border-radius:6px;padding:5px 0;position:absolute;z-index:1}.tooltip:hover .tooltiptext{visibility:visible}mat-icon{font-size:20px!important;color:inherit!important}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}.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{min-height:300px;padding:20px;position:relative}.remove_btn{position:relative;top:10px}.image-resize-wrapper{position:relative;display:inline-block}.image-resize-wrapper .resizer{width:10px;height:10px;background:#007bff;position:absolute;bottom:0;right:0;cursor:se-resize;border-radius:50%}.normal{width:50%;height:100%;border:1px solid red;border-radius:5px;color:red;padding:10px;font-size:16px}.normal:hover{color:red}.submit{width:50%;height:100%;border:none;border-radius:5px;color:#fff;padding:10px;background-color:#151544}.submit:hover{color:#fff}.action{margin-top:10px;padding:10px;display:flex;width:100%;justify-content:end;align-items:center;gap:5px}::ng-deep .sign canvas{border:1px dotted #ccc}.grid-container{display:grid;grid-template-columns:repeat(7,30px);grid-gap:4px;gap:4px;justify-content:center}.grid-item{width:30px;height:30px;border:1px solid #ccc;cursor:pointer}.grid-item.highlighted{background-color:#0d6efd}.sign{border:1px solid #ccc;width:100%;height:200px}.signClose{padding:16px;background-color:red;width:fit-content;color:#fff;border:none;border-radius:3px}.signClose:hover{background-color:#fff;color:red;border:1px solid red;border-radius:3px}.signSubmit{padding:16px;background-color:green;width:fit-content;color:#fff;border:none;border-radius:3px}.signSubmit:hover{background-color:#fff;color:green;border:1px solid green;border-radius:3px}\n"], components: [{ type: i2.SignaturePad, selector: "signature-pad", inputs: ["options"], outputs: ["onBeginEvent", "onEndEvent"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
925
+ ], viewQueries: [{ propertyName: "editor", first: true, predicate: ["editor"], descendants: true, static: true }, { propertyName: "tableDialog", first: true, predicate: ["tableDialog"], descendants: true }, { propertyName: "signatureDialog", first: true, predicate: ["signatureDialog"], descendants: true }, { propertyName: "signaturePad", first: true, predicate: ["sigPad"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"dimension\" >\r\n <div class=\"rich-text-editor\">\r\n <!-- Toolbar -->\r\n <div class=\"toolbar\">\r\n <select *ngIf=\"editorOptions?.options?.textFormat ?? true\" class=\"select-wrapper\" [(ngModel)]=\"selectedHead\" (change)=\"setHeading($event)\">\r\n <option value=\"P\" style=\"font-size: 14px !important;\">Paragraph</option>\r\n <option value=\"H1\" style=\"font-size: 32px !important; font-weight: bold !important;\">H1</option>\r\n <option value=\"H2\" style=\"font-size: 28px !important; font-weight: bold !important;\">H2</option>\r\n <option value=\"H3\" style=\"font-size: 24px !important; font-weight: bold !important;\">H3</option>\r\n <option value=\"H4\" style=\"font-size: 20px !important; font-weight: bold !important;\">H4</option>\r\n <option value=\"H5\" style=\"font-size: 18px !important; font-weight: 600 !important;\">H5</option>\r\n <option value=\"H6\" style=\"font-size: 16px !important; font-weight: 600 !important;\">H6</option>\r\n </select>\r\n <select *ngIf=\"editorOptions?.options?.fontSize ?? true\" class=\"select-wrapper\" [(ngModel)]=\"selectedFont\"\r\n (change)=\"setFontSize($event)\">\r\n <option style=\"font-size: 12px !important;\" value=\"12\">12px</option>\r\n <option style=\"font-size: 14px !important;\" value=\"14\" selected>14px</option>\r\n <option style=\"font-size: 16px !important;\" value=\"16\">16px</option>\r\n <option style=\"font-size: 18px !important;\" value=\"18\">18px</option>\r\n <option style=\"font-size: 20px !important;\" value=\"20\">20px</option> \r\n <option style=\"font-size: 24px !important;\" value=\"24\">24px</option>\r\n <option style=\"font-size: 28px !important;\" value=\"28\">28px</option>\r\n <option style=\"font-size: 32px !important;\" value=\"32\">32px</option>\r\n <option style=\"font-size: 48px !important;\" value=\"48\">48px</option>\r\n </select>\r\n <button *ngIf=\"editorOptions?.options?.bold ?? true\" (click)=\"format('bold')\" type=\"button\" aria-label=\"Bold\" title=\"Bold\" >\r\n <svg [attr.fill]=\"iconColor\" viewBox=\"-6.5 0 28 32\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <title>bold</title> <path d=\"M0 25.531v1.344c1.063-0.031 1.938-0.063 2.563-0.094 0.625 0 1.094-0.031 1.313-0.031 1.656-0.125 3.063-0.219 4.281-0.188l2.813 0.063c2.438 0 4.25-0.313 5.75-1 0.719-0.344 1.344-0.844 1.969-1.531 0.469-0.469 0.813-1.031 1.031-1.656 0.25-0.844 0.375-1.594 0.375-2.281 0-2.5-1.719-4.625-5.094-5.406 0.531-0.25 1.031-0.5 1.375-0.688s0.625-0.313 0.781-0.438c1.188-0.875 1.781-1.906 1.781-3.281 0-0.594-0.094-1.188-0.281-1.719-0.375-1.094-1.219-2-2.406-2.563-0.531-0.313-1.031-0.469-1.375-0.531-0.938-0.25-1.844-0.375-2.719-0.375h-1.094c-0.219 0-0.406 0-0.531-0.031h-0.5c-0.063 0-0.156 0-0.25 0.031h-0.625l-5.406 0.156-3.719 0.094 0.063 1.188c0.875 0.125 1.406 0.188 1.625 0.188 0.438 0 0.781 0.094 0.969 0.219 0.094 0 0.156 0.063 0.188 0.125 0.063 0.219 0.125 0.688 0.156 1.563 0.063 1.563 0.063 2.813 0.063 3.75 0.031 0.969 0.031 1.625 0.094 2v7.031c0 1.219-0.031 2.125-0.156 2.75-0.031 0.219-0.125 0.438-0.281 0.688-0.438 0.188-1 0.375-1.75 0.469-0.375 0.063-0.719 0.125-1 0.156zM7.719 14.281v-2.469c0.063-1.719 0-2.969-0.031-3.969-0.063-0.438-0.063-0.844-0.063-1.063 0.75-0.156 1.344-0.219 1.844-0.219 1.625 0 2.844 0.344 3.656 1.094 0.813 0.688 1.219 1.563 1.219 2.656 0 2.969-1.75 4.094-5.063 4.094-0.563 0-1.094-0.031-1.563-0.125zM7.719 20.406v-4.5c0.313-0.063 0.75-0.125 1.438-0.125 1.594-0.031 2.813 0.125 3.563 0.438 1.531 0.563 2.594 2.188 2.594 4.344 0 1.031-0.219 1.844-0.563 2.563-0.375 0.719-0.906 1.219-1.719 1.594-1.656 0.781-3.719 0.719-5.125 0.125-0.094-0.25-0.125-0.438-0.125-0.594z\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.italic ?? true\" (click)=\"format('italic')\" type=\"button\" aria-label=\"Italic\" title=\"Italic\">\r\n <svg viewBox=\"4 0 20 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"Edit / Italic\"> <path id=\"Vector\" d=\"M8 19H10M10 19H12M10 19L14 5M12 5H14M14 5H16\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.underline ?? true\" (click)=\"format('underline')\" type=\"button\" aria-label=\"Underline\" title=\"Underline\">\r\n <svg viewBox=\"4 0 18 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"Edit / Underline\"> <path id=\"Vector\" d=\"M6 19H18M8 5V11C8 13.2091 9.79086 15 12 15C14.2091 15 16 13.2091 16 11V5\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.strikethrough ?? true\" (click)=\"format('strikethrough')\" type=\"button\" aria-label=\"Strikethrough\" title=\"Strikethrough\">\r\n <svg viewBox=\"4 0 20 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"Edit / Strikethrough\"> <path id=\"Vector\" d=\"M12.0005 12.0001C12.8959 12.0001 13.7749 12.1925 14.5457 12.5571C14.8939 12.7218 15.2146 12.9192 15.5009 13.1437C15.8484 13.4162 16.1457 13.729 16.3822 14.0732C16.8136 14.7009 17.0263 15.4096 16.9982 16.1256C16.97 16.8416 16.702 17.5385 16.2222 18.1433C15.7424 18.7481 15.0684 19.2386 14.2705 19.5638C13.4727 19.889 12.5802 20.0373 11.6865 19.9923C10.7928 19.9473 9.93104 19.7108 9.19043 19.3082C8.44982 18.9055 7.85782 18.3514 7.47656 17.7032M12.0005 12.0001H4M12.0005 12.0001H20M16.5243 6.29718C16.143 5.649 15.5512 5.09462 14.8105 4.69197C14.0699 4.28932 13.2076 4.05287 12.314 4.00789C11.4203 3.96291 10.5278 4.11091 9.72998 4.43613C8.93213 4.76135 8.25812 5.25205 7.77832 5.85689C7.29852 6.46173 7.03057 7.15885 7.00244 7.87485C6.9942 8.08463 7.00669 8.29345 7.03924 8.50014\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.alignLeft ?? true\" (click)=\"format('justifyLeft')\" type=\"button\" aria-label=\"Align Left\" title=\"Align Left\" >\r\n <svg viewBox=\"0 0 16 16\" [attr.fill]=\"iconColor\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M11 1H1V3H11V1Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M1 5H15V7H1V5Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M11 9H1V11H11V9Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 13H1V15H15V13Z\" [attr.fill]=\"iconColor\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.alignCenter ?? true\" (click)=\"format('justifyCenter')\" type=\"button\" aria-label=\"Center\" title=\"Align Center\" >\r\n <svg viewBox=\"0 0 16 16\" [attr.fill]=\"iconColor\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M15 1H1V3H15V1Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M1 5H15V7H1V5Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 9H1V11H15V9Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M11 13H1V15H11V13Z\" [attr.fill]=\"iconColor\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.alignRight ?? true\" (click)=\"format('justifyRight')\" type=\"button\" aria-label=\"Align Right\" title=\"Align Right\" >\r\n <svg viewBox=\"0 0 16 16\" [attr.fill]=\"iconColor\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M15 1H5V3H15V1Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M1 5H15V7H1V5Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 9H5V11H15V9Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 13H1V15H15V13Z\" [attr.fill]=\"iconColor\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.justify ?? true\" (click)=\"format('justifyFull')\" type=\"button\" aria-label=\"Justify\" title=\"Justify\" >\r\n <svg [attr.fill]=\"iconColor\" viewBox=\"0 -2.5 29 29\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"><path d=\"m1.334 2.666h26.665c.011 0 .024.001.037.001.737 0 1.334-.597 1.334-1.334s-.597-1.334-1.334-1.334c-.013 0-.026 0-.039.001h.002-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002z\"></path><path d=\"m27.999 5.333h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.011 0 .024.001.037.001.737 0 1.334-.597 1.334-1.334s-.597-1.334-1.334-1.334c-.013 0-.026 0-.039.001z\"></path><path d=\"m27.999 10.667h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.72-.021 1.296-.61 1.296-1.333s-.576-1.312-1.294-1.333z\"></path><path d=\"m27.999 21.333h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.72-.021 1.296-.61 1.296-1.333s-.576-1.312-1.294-1.333z\"></path><path d=\"m27.999 16h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.72-.021 1.296-.61 1.296-1.333s-.576-1.312-1.294-1.333z\"></path></g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.bulletList ?? true\" (click)=\"format('insertUnorderedList')\" type=\"button\" aria-label=\"Unordered List\" title=\"Bullet List\" >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" [attr.fill]=\"iconColor\" viewBox=\"0 0 36 48\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"><path d=\"M8 21c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zM8 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zm0 24.33c-1.47 0-2.67 1.19-2.67 2.67s1.2 2.67 2.67 2.67 2.67-1.19 2.67-2.67-1.2-2.67-2.67-2.67zM14 38h28v-4H14v4zm0-12h28v-4H14v4zm0-16v4h28v-4H14z\"></path></g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.numberedList ?? true\" (click)=\"format('insertOrderedList')\" type=\"button\" aria-label=\"Ordered List\" title=\"Numbered List\" >\r\n <svg [attr.fill]=\"iconColor\" version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 94.479 94.479\" xml:space=\"preserve\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g> <g> <path d=\"M92.479,6.821H26.823c-1.104,0-2,0.896-2,2V19.58c0,1.104,0.896,2,2,2h65.656c1.104,0,2-0.896,2-2V8.821 C94.479,7.717,93.584,6.821,92.479,6.821z\"></path> <path d=\"M92.479,40.457H26.823c-1.104,0-2,0.896-2,2v10.761c0,1.104,0.896,2,2,2h65.656c1.104,0,2-0.896,2-2V42.457 C94.479,41.352,93.584,40.457,92.479,40.457z\"></path> <path d=\"M92.479,75.109H26.823c-1.104,0-2,0.896-2,2v10.759c0,1.104,0.896,2,2,2h65.656c1.104,0,2-0.896,2-2V77.109 C94.479,76.004,93.584,75.109,92.479,75.109z\"></path> <path d=\"M1.842,11.104c0.423,0.051,0.848-0.08,1.167-0.36l0.914-0.799v12.973c0,0.828,0.672,1.5,1.5,1.5h1.546 c0.828,0,1.5-0.672,1.5-1.5V5.567c0-0.828-0.672-1.5-1.5-1.5H5.378c-0.356,0-0.701,0.127-0.973,0.358L0.527,7.728 c-0.589,0.501-0.7,1.369-0.256,2.003l0.522,0.745C1.04,10.825,1.42,11.053,1.842,11.104z\"></path> <path d=\"M2.546,37.5c-0.647,0.23-1.056,0.872-0.99,1.556l0.096,0.999c0.048,0.497,0.339,0.938,0.778,1.176 c0.438,0.238,0.967,0.243,1.409,0.011c1.18-0.615,1.923-0.775,2.922-0.534c0.71,0.163,1.188,0.586,1.438,1.225 c0.378,1.143,0.395,2.957-2.854,6.873l-2.506,2.996c-0.589,0.688-0.99,1.119-1.302,1.404c-0.312,0.284-0.488,0.688-0.488,1.107 v1.475c0,0.828,0.672,1.5,1.5,1.5h9.132c0.828,0,1.5-0.672,1.5-1.5V55.01c0-0.828-0.672-1.5-1.5-1.5H6.896 c0.458-0.515,1.037-1.211,1.716-2.063c2.803-3.468,5.061-6.645,4.292-10.376c-0.309-1.672-1.247-2.966-2.731-3.752 c-0.826-0.424-1.879-0.639-3.127-0.639C5.629,36.68,4.031,36.971,2.546,37.5z\"></path> <path d=\"M10.491,79.516c0.25-0.135,0.487-0.289,0.74-0.483c1.718-1.313,1.801-3.335,1.786-3.885 c-0.001-1.878-0.712-3.318-2.166-4.401c-1.026-0.77-2.534-1.177-4.361-1.177c-1.347,0-2.787,0.212-4.057,0.596 c-0.668,0.202-1.107,0.839-1.063,1.533l0.058,0.88c0.031,0.471,0.28,0.896,0.673,1.155c0.394,0.259,0.886,0.319,1.327,0.159 c0.864-0.307,1.571-0.45,2.223-0.45c0.229,0,0.457,0.019,0.722,0.063c0.94,0.127,1.563,0.549,1.9,1.283 c0.237,0.52,0.19,1.445-0.083,1.885c-0.654,1.014-2.438,1.217-3.443,1.25c-0.81,0.024-1.453,0.688-1.453,1.498v0.658 c0,0.828,0.687,1.5,1.515,1.5c1.575,0,2.311,0.309,2.596,0.485c0.737,0.465,1.065,1.043,1.066,1.918 c0.025,0.912-0.348,1.606-1.129,2.121c-1.014,0.651-2.64,0.647-4.505,0.032c-0.438-0.146-0.918-0.082-1.302,0.175 c-0.384,0.255-0.629,0.672-0.665,1.132l-0.068,0.872C0.75,88.973,1.135,89.588,1.75,89.83c0.33,0.13,0.551,0.183,1.022,0.281 c0.857,0.196,1.84,0.302,2.842,0.302c1.493,0,4.248-0.247,5.944-1.919c1.657-1.69,1.974-4.11,1.56-5.729 C12.636,80.704,11.461,79.946,10.491,79.516z\"></path> </g> </g> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.image ?? true\" aria-label=\"Insert Image\" type=\"button\"\r\n style=\"position: relative; display: inline-flex; align-items: center; justify-content: center;\" title=\"Insert Image\" >\r\n <input type=\"file\" accept=\".png,.jpg,.jpeg\" (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 <svg viewBox=\"2 1 20 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M14.2647 15.9377L12.5473 14.2346C11.758 13.4519 11.3633 13.0605 10.9089 12.9137C10.5092 12.7845 10.079 12.7845 9.67922 12.9137C9.22485 13.0605 8.83017 13.4519 8.04082 14.2346L4.04193 18.2622M14.2647 15.9377L14.606 15.5991C15.412 14.7999 15.8149 14.4003 16.2773 14.2545C16.6839 14.1262 17.1208 14.1312 17.5244 14.2688C17.9832 14.4253 18.3769 14.834 19.1642 15.6515L20 16.5001M14.2647 15.9377L18.22 19.9628M18.22 19.9628C17.8703 20 17.4213 20 16.8 20H7.2C6.07989 20 5.51984 20 5.09202 19.782C4.7157 19.5903 4.40973 19.2843 4.21799 18.908C4.12583 18.7271 4.07264 18.5226 4.04193 18.2622M18.22 19.9628C18.5007 19.9329 18.7175 19.8791 18.908 19.782C19.2843 19.5903 19.5903 19.2843 19.782 18.908C20 18.4802 20 17.9201 20 16.8V13M11 4H7.2C6.07989 4 5.51984 4 5.09202 4.21799C4.7157 4.40973 4.40973 4.71569 4.21799 5.09202C4 5.51984 4 6.0799 4 7.2V16.8C4 17.4466 4 17.9066 4.04193 18.2622M18 9V6M18 6V3M18 6H21M18 6H15\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.table ?? true\" (click)=\"openTableDialog($event)\" type=\"button\" title=\"Table\"\r\n aria-label=\"Choose table rows and columns\">\r\n <svg width=\"26px\" height=\"26px\" viewBox=\"2 12 20 3\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M3 9H21M3 15H21M9 9L9 20M15 9L15 20M6.2 20H17.8C18.9201 20 19.4802 20 19.908 19.782C20.2843 19.5903 20.5903 19.2843 20.782 18.908C21 18.4802 21 17.9201 21 16.8V7.2C21 6.0799 21 5.51984 20.782 5.09202C20.5903 4.71569 20.2843 4.40973 19.908 4.21799C19.4802 4 18.9201 4 17.8 4H6.2C5.0799 4 4.51984 4 4.09202 4.21799C3.71569 4.40973 3.40973 4.71569 3.21799 5.09202C3 5.51984 3 6.07989 3 7.2V16.8C3 17.9201 3 18.4802 3.21799 18.908C3.40973 19.2843 3.71569 19.5903 4.09202 19.782C4.51984 20 5.07989 20 6.2 20Z\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.tableHeader ?? true\" class=\"mb-1\" (click)=\"makeFirstRowHeader()\" type=\"button\" aria-label=\"Make Header\" title=\"Table Header\" >\r\n <svg [attr.fill]=\"iconColor\" viewBox=\"0 0 1920 1920\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M213.333 0C95.5126 0 0 95.5126 0 213.333V1706.67C0 1824.49 95.5126 1920 213.333 1920H1706.67C1824.49 1920 1920 1824.49 1920 1706.67V213.333C1920 95.5126 1824.49 0 1706.67 0H213.333ZM266.667 746.667C237.211 746.667 213.333 722.788 213.333 693.333V373.333C213.333 343.878 237.211 320 266.667 320H1653.33C1682.79 320 1706.67 343.878 1706.67 373.333V693.333C1706.67 722.788 1682.79 746.667 1653.33 746.667H266.667Z\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.signature ?? true\" (click)=\"openSignatureDialog()\" type=\"button\" title=\"Signature\"\r\n aria-label=\"Choose table rows and columns\">\r\n <svg viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" fill=\"#000000\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools --> <desc>Created with Sketch.</desc> <g id=\"\uD83D\uDD0D-Product-Icons\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\"> <g id=\"ic_fluent_signature_28_regular\" fill=\"#212121\" fill-rule=\"nonzero\"> <path d=\"M16.4798956,21.0019578 L16.75,21 C17.9702352,21 18.6112441,21.5058032 19.4020627,22.7041662 L19.7958278,23.3124409 C20.1028266,23.766938 20.2944374,23.9573247 20.535784,24.0567929 C20.9684873,24.2351266 21.3271008,24.1474446 22.6440782,23.5133213 L23.0473273,23.3170319 C23.8709982,22.9126711 24.4330286,22.6811606 25.0680983,22.5223931 C25.4699445,22.4219316 25.8771453,22.6662521 25.9776069,23.0680983 C26.0780684,23.4699445 25.8337479,23.8771453 25.4319017,23.9776069 C25.0371606,24.0762922 24.6589465,24.2178819 24.1641364,24.4458997 L23.0054899,25.0032673 C21.4376302,25.7436944 20.9059009,25.8317321 19.964216,25.4436275 C19.3391237,25.1860028 18.9836765,24.813298 18.4635639,24.0180227 L18.2688903,23.7140849 C17.7071112,22.8288731 17.4057794,22.5384538 16.8688444,22.5036655 L16.75,22.5 C16.2017306,22.5 16.0933104,22.5684572 14.009281,24.1150241 C12.2670395,25.4079488 10.9383359,26.0254984 9.24864243,26.0254984 C7.18872869,26.0254984 5.24773367,25.647067 3.43145875,24.8905363 L6.31377803,24.2241784 C7.25769404,24.4250762 8.23567143,24.5254984 9.24864243,24.5254984 C10.5393035,24.5254984 11.609129,24.0282691 13.1153796,22.9104743 L14.275444,22.0545488 C15.5468065,21.1304903 15.8296113,21.016032 16.4798956,21.0019578 L16.4798956,21.0019578 Z M22.7770988,3.22208979 C24.4507223,4.8957133 24.4507566,7.60916079 22.7771889,9.28281324 L21.741655,10.3184475 C22.8936263,11.7199657 22.8521526,13.2053774 21.7811031,14.279556 L18.7800727,17.2805874 L18.7800727,17.2805874 C18.4870374,17.5733384 18.0121637,17.573108 17.7194126,17.2800727 C17.4266616,16.9870374 17.426892,16.5121637 17.7199273,16.2194126 L20.7188969,13.220444 C21.2039571,12.7339668 21.2600021,12.1299983 20.678941,11.3818945 L10.0845437,21.9761011 C9.78635459,22.2743053 9.41036117,22.482705 8.99944703,22.5775313 L2.91864463,23.9807934 C2.37859061,24.1054212 1.89457875,23.6214094 2.0192066,23.0813554 L3.42247794,17.0005129 C3.51729557,16.5896365 3.72566589,16.2136736 4.0238276,15.9154968 L16.7165019,3.22217992 C18.3900415,1.54855555 21.1034349,1.54851059 22.7770988,3.22208979 Z M17.7771889,4.28281324 L5.08451462,16.9761302 C4.98512738,17.0755224 4.91567061,17.2008434 4.88406473,17.3378022 L3.7506248,22.2493752 L8.66215777,21.1159445 C8.79912915,21.0843357 8.92446029,21.0148692 9.02385665,20.9154678 L21.7165019,8.22217992 C22.8043063,7.13432049 22.8042862,5.37060478 21.7164588,4.2827701 C20.6285914,3.19496507 18.8649506,3.19499653 17.7771889,4.28281324 Z\" id=\"\uD83C\uDFA8-Color\"> </path> </g> </g> </g></svg>\r\n </button>\r\n\r\n </div>\r\n <div class=\"editor\" id=\"editor\" contenteditable=\"true\" #editor (input)=\"submitContent()\" (blur)=\"onBlur()\" (keyup)=\"onEditorKeyUp($event)\" (mouseup)=\"updateCurrentFormat()\"\r\n (drop)=\"drop($event)\" (dragover)=\"allowDrop($event)\">\r\n </div>\r\n </div>\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 *ngFor=\"let cell of grid; let i = index\" [ngClass]=\"{\r\n 'grid-item': true,\r\n 'highlighted': i % 7 < cols && Math.floor(i / 7) < rows\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)\"></div>\r\n </div>\r\n <p>{{ rows }} x {{ cols }} </p>\r\n </mat-dialog-content>\r\n </ng-template> -->\r\n\r\n <!-- Table Dialog -->\r\n <div\r\n class=\"modal fade\"\r\n id=\"tableDialog\"\r\n tabindex=\"-1\"\r\n data-bs-backdrop=\"false\"\r\n >\r\n <div class=\"modal-dialog modal-sm position-absolute\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"m-0\" style=\"font-size: 18px !important; font-weight: 500;\" >Choose Table Size</h5>\r\n </div>\r\n\r\n <div class=\"modal-body\">\r\n <div class=\"grid-container\">\r\n <div\r\n *ngFor=\"let cell of grid; let i = index\"\r\n class=\"grid-item\"\r\n [class.highlighted]=\"i % 7 < cols && Math.floor(i / 7) < rows\"\r\n (mouseenter)=\"updatePreview(i % 7 + 1, Math.floor(i / 7) + 1)\"\r\n (click)=\"updateSelection(i % 7 + 1, Math.floor(i / 7) + 1)\"\r\n ></div>\r\n </div>\r\n <p class=\"text-center mt-2\">{{ rows }} x {{ cols }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <!-- Signature Dialog -->\r\n <div class=\"modal fade\" id=\"signatureDialog\" tabindex=\"-1\">\r\n <div class=\"modal-dialog modal-lg modal-dialog-centered\">\r\n <div class=\"modal-content\">\r\n\r\n <div class=\"modal-header\">\r\n <h5 class=\"m-0\" style=\"font-size: 18px !important; font-weight: 500;\" >Draw a Signature</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\"></button>\r\n </div>\r\n\r\n <div class=\"modal-body text-center\">\r\n <signature-pad\r\n #sigPad\r\n [options]=\"signaturePadOptions\"\r\n class=\"sign\">\r\n </signature-pad>\r\n </div>\r\n\r\n <div class=\"p-3 d-flex justify-content-between align-items-center gap-2 \">\r\n <button type=\"button\" class=\"signClose\" (click)=\"closeSignDialog()\">\r\n Close\r\n </button>\r\n <div class=\"d-flex justify-content-start align-items-center gap-2\" >\r\n <button type=\"button\" class=\"signReset\" (click)=\"undoSignDialog()\">\r\n Reset\r\n </button>\r\n <button type=\"button\" class=\"signSubmit\" (click)=\"submitSignDialog()\">\r\n Submit\r\n </button>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <!-- <ng-template #signatureDialog let-dialogRef=\"dialogRef\">\r\n <h2 mat-dialog-title>Draw a Signature</h2>\r\n <signature-pad #sigPad [options]=\"signaturePadOptions\" class=\"sign\" ></signature-pad>\r\n <div class=\"action\" >\r\n <button type=\"button\" class=\"normal\" (click)=\"closeSignDialog(dialogRef)\" > Close </button>\r\n <button type=\"button\" class=\"submit\" (click)=\"submitSignDialog(dialogRef)\" > Submit </button>\r\n </div>\r\n \r\n </ng-template> -->\r\n\r\n\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.dimension{height:100%}.rich-text-editor{border:1px solid #ccc;border-radius:5px;font-family:Calibri;height:100%}::ng-deep .editor{position:relative;min-height:300px;padding:5px;overflow-y:auto;font-family:Calibri;outline:none!important;font-size:14px;height:auto}::ng-deep .editor table{width:100%}::ng-deep .editor table,::ng-deep .editor th,::ng-deep .editor td{border:1px solid black;border-collapse:collapse}::ng-deep .editor th,::ng-deep .editor td{padding:.4rem}::ng-deep .editor th{background-color:#f3f3f3}.fs-12{font-size:12px!important}.fs-13{font-size:13px!important}.fs-14{font-size:14px!important}.fs-16{font-size:16px!important}.fs-18{font-size:18px!important}.fs-20{font-size:20px!important}.fs-24{font-size:24px!important}.fs-28{font-size:28px!important}.editor h1{font-size:32px!important;font-weight:700!important;margin:0}.editor h2{font-size:28px!important;font-weight:700!important;margin:0}.editor h3{font-size:24px!important;font-weight:700!important;margin:0}.editor h4{font-size:20px!important;font-weight:700!important;margin:0}.editor h5{font-size:18px!important;font-weight:600!important;margin:0}.editor h6{font-size:16px!important;font-weight:600!important;margin:0}.editor p{font-size:14px!important;font-weight:400;margin:0}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:70px}.select-wrapper select{appearance:none;width:100%;padding:10px 40px 10px 15px;font-size:16px;color:#333;background-color:#f4f4f4;border:1px solid #ddd;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-bottom:1px solid #ccc;gap:10px}.select-wrapper{padding:8px;font-size:14px;border:1px solid #ddd;cursor:pointer;background-color:#fff}.select-wrapper:focus{outline:none;border-color:#007bff}button{border:none;border-radius:5px;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center}button:hover{color:#007bff}.tooltip{position:relative;display:inline-block;border-bottom:1px dotted black;cursor:pointer}.tooltiptext{visibility:hidden;width:130px;background-color:#000;color:#fff;text-align:center;border-radius:6px;padding:5px 0;position:absolute;z-index:1}.tooltip:hover .tooltiptext{visibility:visible}mat-icon{font-size:20px!important;color:inherit!important}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}.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{min-height:300px;padding:20px;position:relative}.remove_btn{position:relative;top:10px}.image-resize-wrapper{position:relative;display:inline-block}.image-resize-wrapper .resizer{width:10px;height:10px;background:#007bff;position:absolute;bottom:0;right:0;cursor:se-resize;border-radius:50%}.normal{width:50%;height:100%;border:1px solid red;border-radius:5px;color:red;padding:10px;font-size:16px}.normal:hover{color:red}.submit{width:50%;height:100%;border:none;border-radius:5px;color:#fff;padding:10px;background-color:#151544}.submit:hover{color:#fff}.action{margin-top:10px;padding:10px;display:flex;width:100%;justify-content:end;align-items:center;gap:5px}::ng-deep .sign canvas{border:1px dotted #ccc}.grid-container{display:grid;grid-template-columns:repeat(7,30px);grid-gap:4px;gap:4px;justify-content:center}.grid-item{width:30px;height:30px;border:1px solid #ccc;cursor:pointer}.grid-item.highlighted{background-color:#0d6efd}.sign{border:1px solid #ccc;width:100%;height:200px}.signClose{padding:16px;background-color:red;width:fit-content;color:#fff;border:none;border-radius:3px}.signClose:hover{background-color:#fff;color:red;border:1px solid red;border-radius:3px}.signReset{padding:16px;background-color:#4682b4;width:fit-content;color:#fff;border:none;border-radius:3px}.signSubmit{padding:16px;background-color:green;width:fit-content;color:#fff;border:none;border-radius:3px}.signSubmit:hover{background-color:#fff;color:green;border:1px solid green;border-radius:3px}.signReset:hover{background-color:#fff;color:#4682b4;border:1px solid steelblue;border-radius:3px}\n"], components: [{ type: i2.SignaturePad, selector: "signature-pad", inputs: ["options"], outputs: ["onBeginEvent", "onEndEvent"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
923
926
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: RapidTextEditorComponent, decorators: [{
924
927
  type: Component,
925
928
  args: [{ selector: 'rapid-text-editor', providers: [
@@ -928,7 +931,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
928
931
  useExisting: forwardRef(() => RapidTextEditorComponent),
929
932
  multi: true
930
933
  }
931
- ], template: "<div class=\"dimension\" >\r\n <div class=\"rich-text-editor\">\r\n <!-- Toolbar -->\r\n <div class=\"toolbar\">\r\n <select *ngIf=\"editorOptions?.options?.textFormat ?? true\" class=\"select-wrapper\" [(ngModel)]=\"selectedHead\" (change)=\"setHeading($event)\">\r\n <option value=\"P\" style=\"font-size: 14px !important;\">Paragraph</option>\r\n <option value=\"H1\" style=\"font-size: 32px !important; font-weight: bold !important;\">H1</option>\r\n <option value=\"H2\" style=\"font-size: 28px !important; font-weight: bold !important;\">H2</option>\r\n <option value=\"H3\" style=\"font-size: 24px !important; font-weight: bold !important;\">H3</option>\r\n <option value=\"H4\" style=\"font-size: 20px !important; font-weight: bold !important;\">H4</option>\r\n <option value=\"H5\" style=\"font-size: 18px !important; font-weight: 600 !important;\">H5</option>\r\n <option value=\"H6\" style=\"font-size: 16px !important; font-weight: 600 !important;\">H6</option>\r\n </select>\r\n <select *ngIf=\"editorOptions?.options?.fontSize ?? true\" class=\"select-wrapper\" [(ngModel)]=\"selectedFont\"\r\n (change)=\"setFontSize($event)\">\r\n <option style=\"font-size: 12px !important;\" value=\"12\">12px</option>\r\n <option style=\"font-size: 14px !important;\" value=\"14\" selected>14px</option>\r\n <option style=\"font-size: 16px !important;\" value=\"16\">16px</option>\r\n <option style=\"font-size: 18px !important;\" value=\"18\">18px</option>\r\n <option style=\"font-size: 20px !important;\" value=\"20\">20px</option> \r\n <option style=\"font-size: 24px !important;\" value=\"24\">24px</option>\r\n <option style=\"font-size: 28px !important;\" value=\"28\">28px</option>\r\n <option style=\"font-size: 32px !important;\" value=\"32\">32px</option>\r\n <option style=\"font-size: 48px !important;\" value=\"48\">48px</option>\r\n </select>\r\n <button *ngIf=\"editorOptions?.options?.bold ?? true\" (click)=\"format('bold')\" type=\"button\" aria-label=\"Bold\" title=\"Bold\" >\r\n <svg [attr.fill]=\"iconColor\" viewBox=\"-6.5 0 28 32\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <title>bold</title> <path d=\"M0 25.531v1.344c1.063-0.031 1.938-0.063 2.563-0.094 0.625 0 1.094-0.031 1.313-0.031 1.656-0.125 3.063-0.219 4.281-0.188l2.813 0.063c2.438 0 4.25-0.313 5.75-1 0.719-0.344 1.344-0.844 1.969-1.531 0.469-0.469 0.813-1.031 1.031-1.656 0.25-0.844 0.375-1.594 0.375-2.281 0-2.5-1.719-4.625-5.094-5.406 0.531-0.25 1.031-0.5 1.375-0.688s0.625-0.313 0.781-0.438c1.188-0.875 1.781-1.906 1.781-3.281 0-0.594-0.094-1.188-0.281-1.719-0.375-1.094-1.219-2-2.406-2.563-0.531-0.313-1.031-0.469-1.375-0.531-0.938-0.25-1.844-0.375-2.719-0.375h-1.094c-0.219 0-0.406 0-0.531-0.031h-0.5c-0.063 0-0.156 0-0.25 0.031h-0.625l-5.406 0.156-3.719 0.094 0.063 1.188c0.875 0.125 1.406 0.188 1.625 0.188 0.438 0 0.781 0.094 0.969 0.219 0.094 0 0.156 0.063 0.188 0.125 0.063 0.219 0.125 0.688 0.156 1.563 0.063 1.563 0.063 2.813 0.063 3.75 0.031 0.969 0.031 1.625 0.094 2v7.031c0 1.219-0.031 2.125-0.156 2.75-0.031 0.219-0.125 0.438-0.281 0.688-0.438 0.188-1 0.375-1.75 0.469-0.375 0.063-0.719 0.125-1 0.156zM7.719 14.281v-2.469c0.063-1.719 0-2.969-0.031-3.969-0.063-0.438-0.063-0.844-0.063-1.063 0.75-0.156 1.344-0.219 1.844-0.219 1.625 0 2.844 0.344 3.656 1.094 0.813 0.688 1.219 1.563 1.219 2.656 0 2.969-1.75 4.094-5.063 4.094-0.563 0-1.094-0.031-1.563-0.125zM7.719 20.406v-4.5c0.313-0.063 0.75-0.125 1.438-0.125 1.594-0.031 2.813 0.125 3.563 0.438 1.531 0.563 2.594 2.188 2.594 4.344 0 1.031-0.219 1.844-0.563 2.563-0.375 0.719-0.906 1.219-1.719 1.594-1.656 0.781-3.719 0.719-5.125 0.125-0.094-0.25-0.125-0.438-0.125-0.594z\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.italic ?? true\" (click)=\"format('italic')\" type=\"button\" aria-label=\"Italic\" title=\"Italic\">\r\n <svg viewBox=\"4 0 20 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"Edit / Italic\"> <path id=\"Vector\" d=\"M8 19H10M10 19H12M10 19L14 5M12 5H14M14 5H16\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.underline ?? true\" (click)=\"format('underline')\" type=\"button\" aria-label=\"Underline\" title=\"Underline\">\r\n <svg viewBox=\"4 0 18 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"Edit / Underline\"> <path id=\"Vector\" d=\"M6 19H18M8 5V11C8 13.2091 9.79086 15 12 15C14.2091 15 16 13.2091 16 11V5\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.strikethrough ?? true\" (click)=\"format('strikethrough')\" type=\"button\" aria-label=\"Strikethrough\" title=\"Strikethrough\">\r\n <svg viewBox=\"4 0 20 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"Edit / Strikethrough\"> <path id=\"Vector\" d=\"M12.0005 12.0001C12.8959 12.0001 13.7749 12.1925 14.5457 12.5571C14.8939 12.7218 15.2146 12.9192 15.5009 13.1437C15.8484 13.4162 16.1457 13.729 16.3822 14.0732C16.8136 14.7009 17.0263 15.4096 16.9982 16.1256C16.97 16.8416 16.702 17.5385 16.2222 18.1433C15.7424 18.7481 15.0684 19.2386 14.2705 19.5638C13.4727 19.889 12.5802 20.0373 11.6865 19.9923C10.7928 19.9473 9.93104 19.7108 9.19043 19.3082C8.44982 18.9055 7.85782 18.3514 7.47656 17.7032M12.0005 12.0001H4M12.0005 12.0001H20M16.5243 6.29718C16.143 5.649 15.5512 5.09462 14.8105 4.69197C14.0699 4.28932 13.2076 4.05287 12.314 4.00789C11.4203 3.96291 10.5278 4.11091 9.72998 4.43613C8.93213 4.76135 8.25812 5.25205 7.77832 5.85689C7.29852 6.46173 7.03057 7.15885 7.00244 7.87485C6.9942 8.08463 7.00669 8.29345 7.03924 8.50014\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.alignLeft ?? true\" (click)=\"format('justifyLeft')\" type=\"button\" aria-label=\"Align Left\" title=\"Align Left\" >\r\n <svg viewBox=\"0 0 16 16\" [attr.fill]=\"iconColor\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M11 1H1V3H11V1Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M1 5H15V7H1V5Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M11 9H1V11H11V9Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 13H1V15H15V13Z\" [attr.fill]=\"iconColor\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.alignCenter ?? true\" (click)=\"format('justifyCenter')\" type=\"button\" aria-label=\"Center\" title=\"Align Center\" >\r\n <svg viewBox=\"0 0 16 16\" [attr.fill]=\"iconColor\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M15 1H1V3H15V1Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M1 5H15V7H1V5Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 9H1V11H15V9Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M11 13H1V15H11V13Z\" [attr.fill]=\"iconColor\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.alignRight ?? true\" (click)=\"format('justifyRight')\" type=\"button\" aria-label=\"Align Right\" title=\"Align Right\" >\r\n <svg viewBox=\"0 0 16 16\" [attr.fill]=\"iconColor\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M15 1H5V3H15V1Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M1 5H15V7H1V5Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 9H5V11H15V9Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 13H1V15H15V13Z\" [attr.fill]=\"iconColor\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.justify ?? true\" (click)=\"format('justifyFull')\" type=\"button\" aria-label=\"Justify\" title=\"Justify\" >\r\n <svg [attr.fill]=\"iconColor\" viewBox=\"0 -2.5 29 29\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"><path d=\"m1.334 2.666h26.665c.011 0 .024.001.037.001.737 0 1.334-.597 1.334-1.334s-.597-1.334-1.334-1.334c-.013 0-.026 0-.039.001h.002-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002z\"></path><path d=\"m27.999 5.333h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.011 0 .024.001.037.001.737 0 1.334-.597 1.334-1.334s-.597-1.334-1.334-1.334c-.013 0-.026 0-.039.001z\"></path><path d=\"m27.999 10.667h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.72-.021 1.296-.61 1.296-1.333s-.576-1.312-1.294-1.333z\"></path><path d=\"m27.999 21.333h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.72-.021 1.296-.61 1.296-1.333s-.576-1.312-1.294-1.333z\"></path><path d=\"m27.999 16h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.72-.021 1.296-.61 1.296-1.333s-.576-1.312-1.294-1.333z\"></path></g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.bulletList ?? true\" (click)=\"format('insertUnorderedList')\" type=\"button\" aria-label=\"Unordered List\" title=\"Bullet List\" >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" [attr.fill]=\"iconColor\" viewBox=\"0 0 36 48\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"><path d=\"M8 21c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zM8 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zm0 24.33c-1.47 0-2.67 1.19-2.67 2.67s1.2 2.67 2.67 2.67 2.67-1.19 2.67-2.67-1.2-2.67-2.67-2.67zM14 38h28v-4H14v4zm0-12h28v-4H14v4zm0-16v4h28v-4H14z\"></path></g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.numberedList ?? true\" (click)=\"format('insertOrderedList')\" type=\"button\" aria-label=\"Ordered List\" title=\"Numbered List\" >\r\n <svg [attr.fill]=\"iconColor\" version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 94.479 94.479\" xml:space=\"preserve\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g> <g> <path d=\"M92.479,6.821H26.823c-1.104,0-2,0.896-2,2V19.58c0,1.104,0.896,2,2,2h65.656c1.104,0,2-0.896,2-2V8.821 C94.479,7.717,93.584,6.821,92.479,6.821z\"></path> <path d=\"M92.479,40.457H26.823c-1.104,0-2,0.896-2,2v10.761c0,1.104,0.896,2,2,2h65.656c1.104,0,2-0.896,2-2V42.457 C94.479,41.352,93.584,40.457,92.479,40.457z\"></path> <path d=\"M92.479,75.109H26.823c-1.104,0-2,0.896-2,2v10.759c0,1.104,0.896,2,2,2h65.656c1.104,0,2-0.896,2-2V77.109 C94.479,76.004,93.584,75.109,92.479,75.109z\"></path> <path d=\"M1.842,11.104c0.423,0.051,0.848-0.08,1.167-0.36l0.914-0.799v12.973c0,0.828,0.672,1.5,1.5,1.5h1.546 c0.828,0,1.5-0.672,1.5-1.5V5.567c0-0.828-0.672-1.5-1.5-1.5H5.378c-0.356,0-0.701,0.127-0.973,0.358L0.527,7.728 c-0.589,0.501-0.7,1.369-0.256,2.003l0.522,0.745C1.04,10.825,1.42,11.053,1.842,11.104z\"></path> <path d=\"M2.546,37.5c-0.647,0.23-1.056,0.872-0.99,1.556l0.096,0.999c0.048,0.497,0.339,0.938,0.778,1.176 c0.438,0.238,0.967,0.243,1.409,0.011c1.18-0.615,1.923-0.775,2.922-0.534c0.71,0.163,1.188,0.586,1.438,1.225 c0.378,1.143,0.395,2.957-2.854,6.873l-2.506,2.996c-0.589,0.688-0.99,1.119-1.302,1.404c-0.312,0.284-0.488,0.688-0.488,1.107 v1.475c0,0.828,0.672,1.5,1.5,1.5h9.132c0.828,0,1.5-0.672,1.5-1.5V55.01c0-0.828-0.672-1.5-1.5-1.5H6.896 c0.458-0.515,1.037-1.211,1.716-2.063c2.803-3.468,5.061-6.645,4.292-10.376c-0.309-1.672-1.247-2.966-2.731-3.752 c-0.826-0.424-1.879-0.639-3.127-0.639C5.629,36.68,4.031,36.971,2.546,37.5z\"></path> <path d=\"M10.491,79.516c0.25-0.135,0.487-0.289,0.74-0.483c1.718-1.313,1.801-3.335,1.786-3.885 c-0.001-1.878-0.712-3.318-2.166-4.401c-1.026-0.77-2.534-1.177-4.361-1.177c-1.347,0-2.787,0.212-4.057,0.596 c-0.668,0.202-1.107,0.839-1.063,1.533l0.058,0.88c0.031,0.471,0.28,0.896,0.673,1.155c0.394,0.259,0.886,0.319,1.327,0.159 c0.864-0.307,1.571-0.45,2.223-0.45c0.229,0,0.457,0.019,0.722,0.063c0.94,0.127,1.563,0.549,1.9,1.283 c0.237,0.52,0.19,1.445-0.083,1.885c-0.654,1.014-2.438,1.217-3.443,1.25c-0.81,0.024-1.453,0.688-1.453,1.498v0.658 c0,0.828,0.687,1.5,1.515,1.5c1.575,0,2.311,0.309,2.596,0.485c0.737,0.465,1.065,1.043,1.066,1.918 c0.025,0.912-0.348,1.606-1.129,2.121c-1.014,0.651-2.64,0.647-4.505,0.032c-0.438-0.146-0.918-0.082-1.302,0.175 c-0.384,0.255-0.629,0.672-0.665,1.132l-0.068,0.872C0.75,88.973,1.135,89.588,1.75,89.83c0.33,0.13,0.551,0.183,1.022,0.281 c0.857,0.196,1.84,0.302,2.842,0.302c1.493,0,4.248-0.247,5.944-1.919c1.657-1.69,1.974-4.11,1.56-5.729 C12.636,80.704,11.461,79.946,10.491,79.516z\"></path> </g> </g> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.image ?? true\" aria-label=\"Insert Image\" type=\"button\"\r\n style=\"position: relative; display: inline-flex; align-items: center; justify-content: center;\" title=\"Insert Image\" >\r\n <input type=\"file\" accept=\".png,.jpg,.jpeg\" (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 <svg viewBox=\"2 1 20 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M14.2647 15.9377L12.5473 14.2346C11.758 13.4519 11.3633 13.0605 10.9089 12.9137C10.5092 12.7845 10.079 12.7845 9.67922 12.9137C9.22485 13.0605 8.83017 13.4519 8.04082 14.2346L4.04193 18.2622M14.2647 15.9377L14.606 15.5991C15.412 14.7999 15.8149 14.4003 16.2773 14.2545C16.6839 14.1262 17.1208 14.1312 17.5244 14.2688C17.9832 14.4253 18.3769 14.834 19.1642 15.6515L20 16.5001M14.2647 15.9377L18.22 19.9628M18.22 19.9628C17.8703 20 17.4213 20 16.8 20H7.2C6.07989 20 5.51984 20 5.09202 19.782C4.7157 19.5903 4.40973 19.2843 4.21799 18.908C4.12583 18.7271 4.07264 18.5226 4.04193 18.2622M18.22 19.9628C18.5007 19.9329 18.7175 19.8791 18.908 19.782C19.2843 19.5903 19.5903 19.2843 19.782 18.908C20 18.4802 20 17.9201 20 16.8V13M11 4H7.2C6.07989 4 5.51984 4 5.09202 4.21799C4.7157 4.40973 4.40973 4.71569 4.21799 5.09202C4 5.51984 4 6.0799 4 7.2V16.8C4 17.4466 4 17.9066 4.04193 18.2622M18 9V6M18 6V3M18 6H21M18 6H15\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.table ?? true\" (click)=\"openTableDialog($event)\" type=\"button\" title=\"Table\"\r\n aria-label=\"Choose table rows and columns\">\r\n <svg width=\"26px\" height=\"26px\" viewBox=\"2 12 20 3\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M3 9H21M3 15H21M9 9L9 20M15 9L15 20M6.2 20H17.8C18.9201 20 19.4802 20 19.908 19.782C20.2843 19.5903 20.5903 19.2843 20.782 18.908C21 18.4802 21 17.9201 21 16.8V7.2C21 6.0799 21 5.51984 20.782 5.09202C20.5903 4.71569 20.2843 4.40973 19.908 4.21799C19.4802 4 18.9201 4 17.8 4H6.2C5.0799 4 4.51984 4 4.09202 4.21799C3.71569 4.40973 3.40973 4.71569 3.21799 5.09202C3 5.51984 3 6.07989 3 7.2V16.8C3 17.9201 3 18.4802 3.21799 18.908C3.40973 19.2843 3.71569 19.5903 4.09202 19.782C4.51984 20 5.07989 20 6.2 20Z\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.tableHeader ?? true\" class=\"mb-1\" (click)=\"makeFirstRowHeader()\" type=\"button\" aria-label=\"Make Header\" title=\"Table Header\" >\r\n <svg [attr.fill]=\"iconColor\" viewBox=\"0 0 1920 1920\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M213.333 0C95.5126 0 0 95.5126 0 213.333V1706.67C0 1824.49 95.5126 1920 213.333 1920H1706.67C1824.49 1920 1920 1824.49 1920 1706.67V213.333C1920 95.5126 1824.49 0 1706.67 0H213.333ZM266.667 746.667C237.211 746.667 213.333 722.788 213.333 693.333V373.333C213.333 343.878 237.211 320 266.667 320H1653.33C1682.79 320 1706.67 343.878 1706.67 373.333V693.333C1706.67 722.788 1682.79 746.667 1653.33 746.667H266.667Z\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.signature ?? true\" (click)=\"openSignatureDialog()\" type=\"button\" title=\"Signature\"\r\n aria-label=\"Choose table rows and columns\">\r\n <svg viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" fill=\"#000000\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools --> <desc>Created with Sketch.</desc> <g id=\"\uD83D\uDD0D-Product-Icons\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\"> <g id=\"ic_fluent_signature_28_regular\" fill=\"#212121\" fill-rule=\"nonzero\"> <path d=\"M16.4798956,21.0019578 L16.75,21 C17.9702352,21 18.6112441,21.5058032 19.4020627,22.7041662 L19.7958278,23.3124409 C20.1028266,23.766938 20.2944374,23.9573247 20.535784,24.0567929 C20.9684873,24.2351266 21.3271008,24.1474446 22.6440782,23.5133213 L23.0473273,23.3170319 C23.8709982,22.9126711 24.4330286,22.6811606 25.0680983,22.5223931 C25.4699445,22.4219316 25.8771453,22.6662521 25.9776069,23.0680983 C26.0780684,23.4699445 25.8337479,23.8771453 25.4319017,23.9776069 C25.0371606,24.0762922 24.6589465,24.2178819 24.1641364,24.4458997 L23.0054899,25.0032673 C21.4376302,25.7436944 20.9059009,25.8317321 19.964216,25.4436275 C19.3391237,25.1860028 18.9836765,24.813298 18.4635639,24.0180227 L18.2688903,23.7140849 C17.7071112,22.8288731 17.4057794,22.5384538 16.8688444,22.5036655 L16.75,22.5 C16.2017306,22.5 16.0933104,22.5684572 14.009281,24.1150241 C12.2670395,25.4079488 10.9383359,26.0254984 9.24864243,26.0254984 C7.18872869,26.0254984 5.24773367,25.647067 3.43145875,24.8905363 L6.31377803,24.2241784 C7.25769404,24.4250762 8.23567143,24.5254984 9.24864243,24.5254984 C10.5393035,24.5254984 11.609129,24.0282691 13.1153796,22.9104743 L14.275444,22.0545488 C15.5468065,21.1304903 15.8296113,21.016032 16.4798956,21.0019578 L16.4798956,21.0019578 Z M22.7770988,3.22208979 C24.4507223,4.8957133 24.4507566,7.60916079 22.7771889,9.28281324 L21.741655,10.3184475 C22.8936263,11.7199657 22.8521526,13.2053774 21.7811031,14.279556 L18.7800727,17.2805874 L18.7800727,17.2805874 C18.4870374,17.5733384 18.0121637,17.573108 17.7194126,17.2800727 C17.4266616,16.9870374 17.426892,16.5121637 17.7199273,16.2194126 L20.7188969,13.220444 C21.2039571,12.7339668 21.2600021,12.1299983 20.678941,11.3818945 L10.0845437,21.9761011 C9.78635459,22.2743053 9.41036117,22.482705 8.99944703,22.5775313 L2.91864463,23.9807934 C2.37859061,24.1054212 1.89457875,23.6214094 2.0192066,23.0813554 L3.42247794,17.0005129 C3.51729557,16.5896365 3.72566589,16.2136736 4.0238276,15.9154968 L16.7165019,3.22217992 C18.3900415,1.54855555 21.1034349,1.54851059 22.7770988,3.22208979 Z M17.7771889,4.28281324 L5.08451462,16.9761302 C4.98512738,17.0755224 4.91567061,17.2008434 4.88406473,17.3378022 L3.7506248,22.2493752 L8.66215777,21.1159445 C8.79912915,21.0843357 8.92446029,21.0148692 9.02385665,20.9154678 L21.7165019,8.22217992 C22.8043063,7.13432049 22.8042862,5.37060478 21.7164588,4.2827701 C20.6285914,3.19496507 18.8649506,3.19499653 17.7771889,4.28281324 Z\" id=\"\uD83C\uDFA8-Color\"> </path> </g> </g> </g></svg>\r\n </button>\r\n\r\n </div>\r\n <div class=\"editor\" id=\"editor\" contenteditable=\"true\" #editor (input)=\"submitContent()\" (blur)=\"onBlur()\" (keyup)=\"onEditorKeyUp($event)\" (mouseup)=\"updateCurrentFormat()\"\r\n (drop)=\"drop($event)\" (dragover)=\"allowDrop($event)\">\r\n </div>\r\n </div>\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 *ngFor=\"let cell of grid; let i = index\" [ngClass]=\"{\r\n 'grid-item': true,\r\n 'highlighted': i % 7 < cols && Math.floor(i / 7) < rows\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)\"></div>\r\n </div>\r\n <p>{{ rows }} x {{ cols }} </p>\r\n </mat-dialog-content>\r\n </ng-template> -->\r\n\r\n <!-- Table Dialog -->\r\n <div\r\n class=\"modal fade\"\r\n id=\"tableDialog\"\r\n tabindex=\"-1\"\r\n data-bs-backdrop=\"false\"\r\n >\r\n <div class=\"modal-dialog modal-sm position-absolute\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"m-0\" style=\"font-size: 18px !important; font-weight: 500;\" >Choose Table Size</h5>\r\n </div>\r\n\r\n <div class=\"modal-body\">\r\n <div class=\"grid-container\">\r\n <div\r\n *ngFor=\"let cell of grid; let i = index\"\r\n class=\"grid-item\"\r\n [class.highlighted]=\"i % 7 < cols && Math.floor(i / 7) < rows\"\r\n (mouseenter)=\"updatePreview(i % 7 + 1, Math.floor(i / 7) + 1)\"\r\n (click)=\"updateSelection(i % 7 + 1, Math.floor(i / 7) + 1)\"\r\n ></div>\r\n </div>\r\n <p class=\"text-center mt-2\">{{ rows }} x {{ cols }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <!-- Signature Dialog -->\r\n <div class=\"modal fade\" id=\"signatureDialog\" tabindex=\"-1\">\r\n <div class=\"modal-dialog modal-lg modal-dialog-centered\">\r\n <div class=\"modal-content\">\r\n\r\n <div class=\"modal-header\">\r\n <h5 class=\"m-0\" style=\"font-size: 18px !important; font-weight: 500;\" >Draw a Signature</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\"></button>\r\n </div>\r\n\r\n <div class=\"modal-body text-center\">\r\n <signature-pad\r\n #sigPad\r\n [options]=\"signaturePadOptions\"\r\n class=\"sign\">\r\n </signature-pad>\r\n </div>\r\n\r\n <div class=\"p-3 d-flex justify-content-between align-items-center gap-2 \">\r\n <button type=\"button\" class=\"signClose\" (click)=\"closeSignDialog()\">\r\n Close\r\n </button>\r\n <button type=\"button\" class=\"signSubmit\" (click)=\"submitSignDialog()\">\r\n Submit\r\n </button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <!-- <ng-template #signatureDialog let-dialogRef=\"dialogRef\">\r\n <h2 mat-dialog-title>Draw a Signature</h2>\r\n <signature-pad #sigPad [options]=\"signaturePadOptions\" class=\"sign\" ></signature-pad>\r\n <div class=\"action\" >\r\n <button type=\"button\" class=\"normal\" (click)=\"closeSignDialog(dialogRef)\" > Close </button>\r\n <button type=\"button\" class=\"submit\" (click)=\"submitSignDialog(dialogRef)\" > Submit </button>\r\n </div>\r\n \r\n </ng-template> -->\r\n\r\n\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.dimension{height:100%}.rich-text-editor{border:1px solid #ccc;border-radius:5px;font-family:Calibri;height:100%}::ng-deep .editor{position:relative;min-height:300px;padding:5px;overflow-y:auto;font-family:Calibri;outline:none!important;font-size:14px;height:auto}::ng-deep .editor table{width:100%}::ng-deep .editor table,::ng-deep .editor th,::ng-deep .editor td{border:1px solid black;border-collapse:collapse}::ng-deep .editor th,::ng-deep .editor td{padding:.4rem}::ng-deep .editor th{background-color:#f3f3f3}.fs-12{font-size:12px!important}.fs-13{font-size:13px!important}.fs-14{font-size:14px!important}.fs-16{font-size:16px!important}.fs-18{font-size:18px!important}.fs-20{font-size:20px!important}.fs-24{font-size:24px!important}.fs-28{font-size:28px!important}.editor h1{font-size:32px!important;font-weight:700!important;margin:0}.editor h2{font-size:28px!important;font-weight:700!important;margin:0}.editor h3{font-size:24px!important;font-weight:700!important;margin:0}.editor h4{font-size:20px!important;font-weight:700!important;margin:0}.editor h5{font-size:18px!important;font-weight:600!important;margin:0}.editor h6{font-size:16px!important;font-weight:600!important;margin:0}.editor p{font-size:14px!important;font-weight:400;margin:0}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:70px}.select-wrapper select{appearance:none;width:100%;padding:10px 40px 10px 15px;font-size:16px;color:#333;background-color:#f4f4f4;border:1px solid #ddd;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-bottom:1px solid #ccc;gap:10px}.select-wrapper{padding:8px;font-size:14px;border:1px solid #ddd;cursor:pointer;background-color:#fff}.select-wrapper:focus{outline:none;border-color:#007bff}button{border:none;border-radius:5px;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center}button:hover{color:#007bff}.tooltip{position:relative;display:inline-block;border-bottom:1px dotted black;cursor:pointer}.tooltiptext{visibility:hidden;width:130px;background-color:#000;color:#fff;text-align:center;border-radius:6px;padding:5px 0;position:absolute;z-index:1}.tooltip:hover .tooltiptext{visibility:visible}mat-icon{font-size:20px!important;color:inherit!important}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}.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{min-height:300px;padding:20px;position:relative}.remove_btn{position:relative;top:10px}.image-resize-wrapper{position:relative;display:inline-block}.image-resize-wrapper .resizer{width:10px;height:10px;background:#007bff;position:absolute;bottom:0;right:0;cursor:se-resize;border-radius:50%}.normal{width:50%;height:100%;border:1px solid red;border-radius:5px;color:red;padding:10px;font-size:16px}.normal:hover{color:red}.submit{width:50%;height:100%;border:none;border-radius:5px;color:#fff;padding:10px;background-color:#151544}.submit:hover{color:#fff}.action{margin-top:10px;padding:10px;display:flex;width:100%;justify-content:end;align-items:center;gap:5px}::ng-deep .sign canvas{border:1px dotted #ccc}.grid-container{display:grid;grid-template-columns:repeat(7,30px);grid-gap:4px;gap:4px;justify-content:center}.grid-item{width:30px;height:30px;border:1px solid #ccc;cursor:pointer}.grid-item.highlighted{background-color:#0d6efd}.sign{border:1px solid #ccc;width:100%;height:200px}.signClose{padding:16px;background-color:red;width:fit-content;color:#fff;border:none;border-radius:3px}.signClose:hover{background-color:#fff;color:red;border:1px solid red;border-radius:3px}.signSubmit{padding:16px;background-color:green;width:fit-content;color:#fff;border:none;border-radius:3px}.signSubmit:hover{background-color:#fff;color:green;border:1px solid green;border-radius:3px}\n"] }]
934
+ ], template: "<div class=\"dimension\" >\r\n <div class=\"rich-text-editor\">\r\n <!-- Toolbar -->\r\n <div class=\"toolbar\">\r\n <select *ngIf=\"editorOptions?.options?.textFormat ?? true\" class=\"select-wrapper\" [(ngModel)]=\"selectedHead\" (change)=\"setHeading($event)\">\r\n <option value=\"P\" style=\"font-size: 14px !important;\">Paragraph</option>\r\n <option value=\"H1\" style=\"font-size: 32px !important; font-weight: bold !important;\">H1</option>\r\n <option value=\"H2\" style=\"font-size: 28px !important; font-weight: bold !important;\">H2</option>\r\n <option value=\"H3\" style=\"font-size: 24px !important; font-weight: bold !important;\">H3</option>\r\n <option value=\"H4\" style=\"font-size: 20px !important; font-weight: bold !important;\">H4</option>\r\n <option value=\"H5\" style=\"font-size: 18px !important; font-weight: 600 !important;\">H5</option>\r\n <option value=\"H6\" style=\"font-size: 16px !important; font-weight: 600 !important;\">H6</option>\r\n </select>\r\n <select *ngIf=\"editorOptions?.options?.fontSize ?? true\" class=\"select-wrapper\" [(ngModel)]=\"selectedFont\"\r\n (change)=\"setFontSize($event)\">\r\n <option style=\"font-size: 12px !important;\" value=\"12\">12px</option>\r\n <option style=\"font-size: 14px !important;\" value=\"14\" selected>14px</option>\r\n <option style=\"font-size: 16px !important;\" value=\"16\">16px</option>\r\n <option style=\"font-size: 18px !important;\" value=\"18\">18px</option>\r\n <option style=\"font-size: 20px !important;\" value=\"20\">20px</option> \r\n <option style=\"font-size: 24px !important;\" value=\"24\">24px</option>\r\n <option style=\"font-size: 28px !important;\" value=\"28\">28px</option>\r\n <option style=\"font-size: 32px !important;\" value=\"32\">32px</option>\r\n <option style=\"font-size: 48px !important;\" value=\"48\">48px</option>\r\n </select>\r\n <button *ngIf=\"editorOptions?.options?.bold ?? true\" (click)=\"format('bold')\" type=\"button\" aria-label=\"Bold\" title=\"Bold\" >\r\n <svg [attr.fill]=\"iconColor\" viewBox=\"-6.5 0 28 32\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <title>bold</title> <path d=\"M0 25.531v1.344c1.063-0.031 1.938-0.063 2.563-0.094 0.625 0 1.094-0.031 1.313-0.031 1.656-0.125 3.063-0.219 4.281-0.188l2.813 0.063c2.438 0 4.25-0.313 5.75-1 0.719-0.344 1.344-0.844 1.969-1.531 0.469-0.469 0.813-1.031 1.031-1.656 0.25-0.844 0.375-1.594 0.375-2.281 0-2.5-1.719-4.625-5.094-5.406 0.531-0.25 1.031-0.5 1.375-0.688s0.625-0.313 0.781-0.438c1.188-0.875 1.781-1.906 1.781-3.281 0-0.594-0.094-1.188-0.281-1.719-0.375-1.094-1.219-2-2.406-2.563-0.531-0.313-1.031-0.469-1.375-0.531-0.938-0.25-1.844-0.375-2.719-0.375h-1.094c-0.219 0-0.406 0-0.531-0.031h-0.5c-0.063 0-0.156 0-0.25 0.031h-0.625l-5.406 0.156-3.719 0.094 0.063 1.188c0.875 0.125 1.406 0.188 1.625 0.188 0.438 0 0.781 0.094 0.969 0.219 0.094 0 0.156 0.063 0.188 0.125 0.063 0.219 0.125 0.688 0.156 1.563 0.063 1.563 0.063 2.813 0.063 3.75 0.031 0.969 0.031 1.625 0.094 2v7.031c0 1.219-0.031 2.125-0.156 2.75-0.031 0.219-0.125 0.438-0.281 0.688-0.438 0.188-1 0.375-1.75 0.469-0.375 0.063-0.719 0.125-1 0.156zM7.719 14.281v-2.469c0.063-1.719 0-2.969-0.031-3.969-0.063-0.438-0.063-0.844-0.063-1.063 0.75-0.156 1.344-0.219 1.844-0.219 1.625 0 2.844 0.344 3.656 1.094 0.813 0.688 1.219 1.563 1.219 2.656 0 2.969-1.75 4.094-5.063 4.094-0.563 0-1.094-0.031-1.563-0.125zM7.719 20.406v-4.5c0.313-0.063 0.75-0.125 1.438-0.125 1.594-0.031 2.813 0.125 3.563 0.438 1.531 0.563 2.594 2.188 2.594 4.344 0 1.031-0.219 1.844-0.563 2.563-0.375 0.719-0.906 1.219-1.719 1.594-1.656 0.781-3.719 0.719-5.125 0.125-0.094-0.25-0.125-0.438-0.125-0.594z\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.italic ?? true\" (click)=\"format('italic')\" type=\"button\" aria-label=\"Italic\" title=\"Italic\">\r\n <svg viewBox=\"4 0 20 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"Edit / Italic\"> <path id=\"Vector\" d=\"M8 19H10M10 19H12M10 19L14 5M12 5H14M14 5H16\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.underline ?? true\" (click)=\"format('underline')\" type=\"button\" aria-label=\"Underline\" title=\"Underline\">\r\n <svg viewBox=\"4 0 18 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"Edit / Underline\"> <path id=\"Vector\" d=\"M6 19H18M8 5V11C8 13.2091 9.79086 15 12 15C14.2091 15 16 13.2091 16 11V5\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.strikethrough ?? true\" (click)=\"format('strikethrough')\" type=\"button\" aria-label=\"Strikethrough\" title=\"Strikethrough\">\r\n <svg viewBox=\"4 0 20 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"Edit / Strikethrough\"> <path id=\"Vector\" d=\"M12.0005 12.0001C12.8959 12.0001 13.7749 12.1925 14.5457 12.5571C14.8939 12.7218 15.2146 12.9192 15.5009 13.1437C15.8484 13.4162 16.1457 13.729 16.3822 14.0732C16.8136 14.7009 17.0263 15.4096 16.9982 16.1256C16.97 16.8416 16.702 17.5385 16.2222 18.1433C15.7424 18.7481 15.0684 19.2386 14.2705 19.5638C13.4727 19.889 12.5802 20.0373 11.6865 19.9923C10.7928 19.9473 9.93104 19.7108 9.19043 19.3082C8.44982 18.9055 7.85782 18.3514 7.47656 17.7032M12.0005 12.0001H4M12.0005 12.0001H20M16.5243 6.29718C16.143 5.649 15.5512 5.09462 14.8105 4.69197C14.0699 4.28932 13.2076 4.05287 12.314 4.00789C11.4203 3.96291 10.5278 4.11091 9.72998 4.43613C8.93213 4.76135 8.25812 5.25205 7.77832 5.85689C7.29852 6.46173 7.03057 7.15885 7.00244 7.87485C6.9942 8.08463 7.00669 8.29345 7.03924 8.50014\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.alignLeft ?? true\" (click)=\"format('justifyLeft')\" type=\"button\" aria-label=\"Align Left\" title=\"Align Left\" >\r\n <svg viewBox=\"0 0 16 16\" [attr.fill]=\"iconColor\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M11 1H1V3H11V1Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M1 5H15V7H1V5Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M11 9H1V11H11V9Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 13H1V15H15V13Z\" [attr.fill]=\"iconColor\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.alignCenter ?? true\" (click)=\"format('justifyCenter')\" type=\"button\" aria-label=\"Center\" title=\"Align Center\" >\r\n <svg viewBox=\"0 0 16 16\" [attr.fill]=\"iconColor\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M15 1H1V3H15V1Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M1 5H15V7H1V5Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 9H1V11H15V9Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M11 13H1V15H11V13Z\" [attr.fill]=\"iconColor\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.alignRight ?? true\" (click)=\"format('justifyRight')\" type=\"button\" aria-label=\"Align Right\" title=\"Align Right\" >\r\n <svg viewBox=\"0 0 16 16\" [attr.fill]=\"iconColor\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M15 1H5V3H15V1Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M1 5H15V7H1V5Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 9H5V11H15V9Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 13H1V15H15V13Z\" [attr.fill]=\"iconColor\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.justify ?? true\" (click)=\"format('justifyFull')\" type=\"button\" aria-label=\"Justify\" title=\"Justify\" >\r\n <svg [attr.fill]=\"iconColor\" viewBox=\"0 -2.5 29 29\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"><path d=\"m1.334 2.666h26.665c.011 0 .024.001.037.001.737 0 1.334-.597 1.334-1.334s-.597-1.334-1.334-1.334c-.013 0-.026 0-.039.001h.002-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002z\"></path><path d=\"m27.999 5.333h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.011 0 .024.001.037.001.737 0 1.334-.597 1.334-1.334s-.597-1.334-1.334-1.334c-.013 0-.026 0-.039.001z\"></path><path d=\"m27.999 10.667h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.72-.021 1.296-.61 1.296-1.333s-.576-1.312-1.294-1.333z\"></path><path d=\"m27.999 21.333h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.72-.021 1.296-.61 1.296-1.333s-.576-1.312-1.294-1.333z\"></path><path d=\"m27.999 16h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.72-.021 1.296-.61 1.296-1.333s-.576-1.312-1.294-1.333z\"></path></g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.bulletList ?? true\" (click)=\"format('insertUnorderedList')\" type=\"button\" aria-label=\"Unordered List\" title=\"Bullet List\" >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" [attr.fill]=\"iconColor\" viewBox=\"0 0 36 48\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"><path d=\"M8 21c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zM8 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zm0 24.33c-1.47 0-2.67 1.19-2.67 2.67s1.2 2.67 2.67 2.67 2.67-1.19 2.67-2.67-1.2-2.67-2.67-2.67zM14 38h28v-4H14v4zm0-12h28v-4H14v4zm0-16v4h28v-4H14z\"></path></g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.numberedList ?? true\" (click)=\"format('insertOrderedList')\" type=\"button\" aria-label=\"Ordered List\" title=\"Numbered List\" >\r\n <svg [attr.fill]=\"iconColor\" version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 94.479 94.479\" xml:space=\"preserve\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g> <g> <path d=\"M92.479,6.821H26.823c-1.104,0-2,0.896-2,2V19.58c0,1.104,0.896,2,2,2h65.656c1.104,0,2-0.896,2-2V8.821 C94.479,7.717,93.584,6.821,92.479,6.821z\"></path> <path d=\"M92.479,40.457H26.823c-1.104,0-2,0.896-2,2v10.761c0,1.104,0.896,2,2,2h65.656c1.104,0,2-0.896,2-2V42.457 C94.479,41.352,93.584,40.457,92.479,40.457z\"></path> <path d=\"M92.479,75.109H26.823c-1.104,0-2,0.896-2,2v10.759c0,1.104,0.896,2,2,2h65.656c1.104,0,2-0.896,2-2V77.109 C94.479,76.004,93.584,75.109,92.479,75.109z\"></path> <path d=\"M1.842,11.104c0.423,0.051,0.848-0.08,1.167-0.36l0.914-0.799v12.973c0,0.828,0.672,1.5,1.5,1.5h1.546 c0.828,0,1.5-0.672,1.5-1.5V5.567c0-0.828-0.672-1.5-1.5-1.5H5.378c-0.356,0-0.701,0.127-0.973,0.358L0.527,7.728 c-0.589,0.501-0.7,1.369-0.256,2.003l0.522,0.745C1.04,10.825,1.42,11.053,1.842,11.104z\"></path> <path d=\"M2.546,37.5c-0.647,0.23-1.056,0.872-0.99,1.556l0.096,0.999c0.048,0.497,0.339,0.938,0.778,1.176 c0.438,0.238,0.967,0.243,1.409,0.011c1.18-0.615,1.923-0.775,2.922-0.534c0.71,0.163,1.188,0.586,1.438,1.225 c0.378,1.143,0.395,2.957-2.854,6.873l-2.506,2.996c-0.589,0.688-0.99,1.119-1.302,1.404c-0.312,0.284-0.488,0.688-0.488,1.107 v1.475c0,0.828,0.672,1.5,1.5,1.5h9.132c0.828,0,1.5-0.672,1.5-1.5V55.01c0-0.828-0.672-1.5-1.5-1.5H6.896 c0.458-0.515,1.037-1.211,1.716-2.063c2.803-3.468,5.061-6.645,4.292-10.376c-0.309-1.672-1.247-2.966-2.731-3.752 c-0.826-0.424-1.879-0.639-3.127-0.639C5.629,36.68,4.031,36.971,2.546,37.5z\"></path> <path d=\"M10.491,79.516c0.25-0.135,0.487-0.289,0.74-0.483c1.718-1.313,1.801-3.335,1.786-3.885 c-0.001-1.878-0.712-3.318-2.166-4.401c-1.026-0.77-2.534-1.177-4.361-1.177c-1.347,0-2.787,0.212-4.057,0.596 c-0.668,0.202-1.107,0.839-1.063,1.533l0.058,0.88c0.031,0.471,0.28,0.896,0.673,1.155c0.394,0.259,0.886,0.319,1.327,0.159 c0.864-0.307,1.571-0.45,2.223-0.45c0.229,0,0.457,0.019,0.722,0.063c0.94,0.127,1.563,0.549,1.9,1.283 c0.237,0.52,0.19,1.445-0.083,1.885c-0.654,1.014-2.438,1.217-3.443,1.25c-0.81,0.024-1.453,0.688-1.453,1.498v0.658 c0,0.828,0.687,1.5,1.515,1.5c1.575,0,2.311,0.309,2.596,0.485c0.737,0.465,1.065,1.043,1.066,1.918 c0.025,0.912-0.348,1.606-1.129,2.121c-1.014,0.651-2.64,0.647-4.505,0.032c-0.438-0.146-0.918-0.082-1.302,0.175 c-0.384,0.255-0.629,0.672-0.665,1.132l-0.068,0.872C0.75,88.973,1.135,89.588,1.75,89.83c0.33,0.13,0.551,0.183,1.022,0.281 c0.857,0.196,1.84,0.302,2.842,0.302c1.493,0,4.248-0.247,5.944-1.919c1.657-1.69,1.974-4.11,1.56-5.729 C12.636,80.704,11.461,79.946,10.491,79.516z\"></path> </g> </g> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.image ?? true\" aria-label=\"Insert Image\" type=\"button\"\r\n style=\"position: relative; display: inline-flex; align-items: center; justify-content: center;\" title=\"Insert Image\" >\r\n <input type=\"file\" accept=\".png,.jpg,.jpeg\" (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 <svg viewBox=\"2 1 20 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M14.2647 15.9377L12.5473 14.2346C11.758 13.4519 11.3633 13.0605 10.9089 12.9137C10.5092 12.7845 10.079 12.7845 9.67922 12.9137C9.22485 13.0605 8.83017 13.4519 8.04082 14.2346L4.04193 18.2622M14.2647 15.9377L14.606 15.5991C15.412 14.7999 15.8149 14.4003 16.2773 14.2545C16.6839 14.1262 17.1208 14.1312 17.5244 14.2688C17.9832 14.4253 18.3769 14.834 19.1642 15.6515L20 16.5001M14.2647 15.9377L18.22 19.9628M18.22 19.9628C17.8703 20 17.4213 20 16.8 20H7.2C6.07989 20 5.51984 20 5.09202 19.782C4.7157 19.5903 4.40973 19.2843 4.21799 18.908C4.12583 18.7271 4.07264 18.5226 4.04193 18.2622M18.22 19.9628C18.5007 19.9329 18.7175 19.8791 18.908 19.782C19.2843 19.5903 19.5903 19.2843 19.782 18.908C20 18.4802 20 17.9201 20 16.8V13M11 4H7.2C6.07989 4 5.51984 4 5.09202 4.21799C4.7157 4.40973 4.40973 4.71569 4.21799 5.09202C4 5.51984 4 6.0799 4 7.2V16.8C4 17.4466 4 17.9066 4.04193 18.2622M18 9V6M18 6V3M18 6H21M18 6H15\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.table ?? true\" (click)=\"openTableDialog($event)\" type=\"button\" title=\"Table\"\r\n aria-label=\"Choose table rows and columns\">\r\n <svg width=\"26px\" height=\"26px\" viewBox=\"2 12 20 3\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M3 9H21M3 15H21M9 9L9 20M15 9L15 20M6.2 20H17.8C18.9201 20 19.4802 20 19.908 19.782C20.2843 19.5903 20.5903 19.2843 20.782 18.908C21 18.4802 21 17.9201 21 16.8V7.2C21 6.0799 21 5.51984 20.782 5.09202C20.5903 4.71569 20.2843 4.40973 19.908 4.21799C19.4802 4 18.9201 4 17.8 4H6.2C5.0799 4 4.51984 4 4.09202 4.21799C3.71569 4.40973 3.40973 4.71569 3.21799 5.09202C3 5.51984 3 6.07989 3 7.2V16.8C3 17.9201 3 18.4802 3.21799 18.908C3.40973 19.2843 3.71569 19.5903 4.09202 19.782C4.51984 20 5.07989 20 6.2 20Z\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.tableHeader ?? true\" class=\"mb-1\" (click)=\"makeFirstRowHeader()\" type=\"button\" aria-label=\"Make Header\" title=\"Table Header\" >\r\n <svg [attr.fill]=\"iconColor\" viewBox=\"0 0 1920 1920\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M213.333 0C95.5126 0 0 95.5126 0 213.333V1706.67C0 1824.49 95.5126 1920 213.333 1920H1706.67C1824.49 1920 1920 1824.49 1920 1706.67V213.333C1920 95.5126 1824.49 0 1706.67 0H213.333ZM266.667 746.667C237.211 746.667 213.333 722.788 213.333 693.333V373.333C213.333 343.878 237.211 320 266.667 320H1653.33C1682.79 320 1706.67 343.878 1706.67 373.333V693.333C1706.67 722.788 1682.79 746.667 1653.33 746.667H266.667Z\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.signature ?? true\" (click)=\"openSignatureDialog()\" type=\"button\" title=\"Signature\"\r\n aria-label=\"Choose table rows and columns\">\r\n <svg viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" fill=\"#000000\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools --> <desc>Created with Sketch.</desc> <g id=\"\uD83D\uDD0D-Product-Icons\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\"> <g id=\"ic_fluent_signature_28_regular\" fill=\"#212121\" fill-rule=\"nonzero\"> <path d=\"M16.4798956,21.0019578 L16.75,21 C17.9702352,21 18.6112441,21.5058032 19.4020627,22.7041662 L19.7958278,23.3124409 C20.1028266,23.766938 20.2944374,23.9573247 20.535784,24.0567929 C20.9684873,24.2351266 21.3271008,24.1474446 22.6440782,23.5133213 L23.0473273,23.3170319 C23.8709982,22.9126711 24.4330286,22.6811606 25.0680983,22.5223931 C25.4699445,22.4219316 25.8771453,22.6662521 25.9776069,23.0680983 C26.0780684,23.4699445 25.8337479,23.8771453 25.4319017,23.9776069 C25.0371606,24.0762922 24.6589465,24.2178819 24.1641364,24.4458997 L23.0054899,25.0032673 C21.4376302,25.7436944 20.9059009,25.8317321 19.964216,25.4436275 C19.3391237,25.1860028 18.9836765,24.813298 18.4635639,24.0180227 L18.2688903,23.7140849 C17.7071112,22.8288731 17.4057794,22.5384538 16.8688444,22.5036655 L16.75,22.5 C16.2017306,22.5 16.0933104,22.5684572 14.009281,24.1150241 C12.2670395,25.4079488 10.9383359,26.0254984 9.24864243,26.0254984 C7.18872869,26.0254984 5.24773367,25.647067 3.43145875,24.8905363 L6.31377803,24.2241784 C7.25769404,24.4250762 8.23567143,24.5254984 9.24864243,24.5254984 C10.5393035,24.5254984 11.609129,24.0282691 13.1153796,22.9104743 L14.275444,22.0545488 C15.5468065,21.1304903 15.8296113,21.016032 16.4798956,21.0019578 L16.4798956,21.0019578 Z M22.7770988,3.22208979 C24.4507223,4.8957133 24.4507566,7.60916079 22.7771889,9.28281324 L21.741655,10.3184475 C22.8936263,11.7199657 22.8521526,13.2053774 21.7811031,14.279556 L18.7800727,17.2805874 L18.7800727,17.2805874 C18.4870374,17.5733384 18.0121637,17.573108 17.7194126,17.2800727 C17.4266616,16.9870374 17.426892,16.5121637 17.7199273,16.2194126 L20.7188969,13.220444 C21.2039571,12.7339668 21.2600021,12.1299983 20.678941,11.3818945 L10.0845437,21.9761011 C9.78635459,22.2743053 9.41036117,22.482705 8.99944703,22.5775313 L2.91864463,23.9807934 C2.37859061,24.1054212 1.89457875,23.6214094 2.0192066,23.0813554 L3.42247794,17.0005129 C3.51729557,16.5896365 3.72566589,16.2136736 4.0238276,15.9154968 L16.7165019,3.22217992 C18.3900415,1.54855555 21.1034349,1.54851059 22.7770988,3.22208979 Z M17.7771889,4.28281324 L5.08451462,16.9761302 C4.98512738,17.0755224 4.91567061,17.2008434 4.88406473,17.3378022 L3.7506248,22.2493752 L8.66215777,21.1159445 C8.79912915,21.0843357 8.92446029,21.0148692 9.02385665,20.9154678 L21.7165019,8.22217992 C22.8043063,7.13432049 22.8042862,5.37060478 21.7164588,4.2827701 C20.6285914,3.19496507 18.8649506,3.19499653 17.7771889,4.28281324 Z\" id=\"\uD83C\uDFA8-Color\"> </path> </g> </g> </g></svg>\r\n </button>\r\n\r\n </div>\r\n <div class=\"editor\" id=\"editor\" contenteditable=\"true\" #editor (input)=\"submitContent()\" (blur)=\"onBlur()\" (keyup)=\"onEditorKeyUp($event)\" (mouseup)=\"updateCurrentFormat()\"\r\n (drop)=\"drop($event)\" (dragover)=\"allowDrop($event)\">\r\n </div>\r\n </div>\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 *ngFor=\"let cell of grid; let i = index\" [ngClass]=\"{\r\n 'grid-item': true,\r\n 'highlighted': i % 7 < cols && Math.floor(i / 7) < rows\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)\"></div>\r\n </div>\r\n <p>{{ rows }} x {{ cols }} </p>\r\n </mat-dialog-content>\r\n </ng-template> -->\r\n\r\n <!-- Table Dialog -->\r\n <div\r\n class=\"modal fade\"\r\n id=\"tableDialog\"\r\n tabindex=\"-1\"\r\n data-bs-backdrop=\"false\"\r\n >\r\n <div class=\"modal-dialog modal-sm position-absolute\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"m-0\" style=\"font-size: 18px !important; font-weight: 500;\" >Choose Table Size</h5>\r\n </div>\r\n\r\n <div class=\"modal-body\">\r\n <div class=\"grid-container\">\r\n <div\r\n *ngFor=\"let cell of grid; let i = index\"\r\n class=\"grid-item\"\r\n [class.highlighted]=\"i % 7 < cols && Math.floor(i / 7) < rows\"\r\n (mouseenter)=\"updatePreview(i % 7 + 1, Math.floor(i / 7) + 1)\"\r\n (click)=\"updateSelection(i % 7 + 1, Math.floor(i / 7) + 1)\"\r\n ></div>\r\n </div>\r\n <p class=\"text-center mt-2\">{{ rows }} x {{ cols }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <!-- Signature Dialog -->\r\n <div class=\"modal fade\" id=\"signatureDialog\" tabindex=\"-1\">\r\n <div class=\"modal-dialog modal-lg modal-dialog-centered\">\r\n <div class=\"modal-content\">\r\n\r\n <div class=\"modal-header\">\r\n <h5 class=\"m-0\" style=\"font-size: 18px !important; font-weight: 500;\" >Draw a Signature</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\"></button>\r\n </div>\r\n\r\n <div class=\"modal-body text-center\">\r\n <signature-pad\r\n #sigPad\r\n [options]=\"signaturePadOptions\"\r\n class=\"sign\">\r\n </signature-pad>\r\n </div>\r\n\r\n <div class=\"p-3 d-flex justify-content-between align-items-center gap-2 \">\r\n <button type=\"button\" class=\"signClose\" (click)=\"closeSignDialog()\">\r\n Close\r\n </button>\r\n <div class=\"d-flex justify-content-start align-items-center gap-2\" >\r\n <button type=\"button\" class=\"signReset\" (click)=\"undoSignDialog()\">\r\n Reset\r\n </button>\r\n <button type=\"button\" class=\"signSubmit\" (click)=\"submitSignDialog()\">\r\n Submit\r\n </button>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <!-- <ng-template #signatureDialog let-dialogRef=\"dialogRef\">\r\n <h2 mat-dialog-title>Draw a Signature</h2>\r\n <signature-pad #sigPad [options]=\"signaturePadOptions\" class=\"sign\" ></signature-pad>\r\n <div class=\"action\" >\r\n <button type=\"button\" class=\"normal\" (click)=\"closeSignDialog(dialogRef)\" > Close </button>\r\n <button type=\"button\" class=\"submit\" (click)=\"submitSignDialog(dialogRef)\" > Submit </button>\r\n </div>\r\n \r\n </ng-template> -->\r\n\r\n\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.dimension{height:100%}.rich-text-editor{border:1px solid #ccc;border-radius:5px;font-family:Calibri;height:100%}::ng-deep .editor{position:relative;min-height:300px;padding:5px;overflow-y:auto;font-family:Calibri;outline:none!important;font-size:14px;height:auto}::ng-deep .editor table{width:100%}::ng-deep .editor table,::ng-deep .editor th,::ng-deep .editor td{border:1px solid black;border-collapse:collapse}::ng-deep .editor th,::ng-deep .editor td{padding:.4rem}::ng-deep .editor th{background-color:#f3f3f3}.fs-12{font-size:12px!important}.fs-13{font-size:13px!important}.fs-14{font-size:14px!important}.fs-16{font-size:16px!important}.fs-18{font-size:18px!important}.fs-20{font-size:20px!important}.fs-24{font-size:24px!important}.fs-28{font-size:28px!important}.editor h1{font-size:32px!important;font-weight:700!important;margin:0}.editor h2{font-size:28px!important;font-weight:700!important;margin:0}.editor h3{font-size:24px!important;font-weight:700!important;margin:0}.editor h4{font-size:20px!important;font-weight:700!important;margin:0}.editor h5{font-size:18px!important;font-weight:600!important;margin:0}.editor h6{font-size:16px!important;font-weight:600!important;margin:0}.editor p{font-size:14px!important;font-weight:400;margin:0}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:70px}.select-wrapper select{appearance:none;width:100%;padding:10px 40px 10px 15px;font-size:16px;color:#333;background-color:#f4f4f4;border:1px solid #ddd;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-bottom:1px solid #ccc;gap:10px}.select-wrapper{padding:8px;font-size:14px;border:1px solid #ddd;cursor:pointer;background-color:#fff}.select-wrapper:focus{outline:none;border-color:#007bff}button{border:none;border-radius:5px;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center}button:hover{color:#007bff}.tooltip{position:relative;display:inline-block;border-bottom:1px dotted black;cursor:pointer}.tooltiptext{visibility:hidden;width:130px;background-color:#000;color:#fff;text-align:center;border-radius:6px;padding:5px 0;position:absolute;z-index:1}.tooltip:hover .tooltiptext{visibility:visible}mat-icon{font-size:20px!important;color:inherit!important}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}.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{min-height:300px;padding:20px;position:relative}.remove_btn{position:relative;top:10px}.image-resize-wrapper{position:relative;display:inline-block}.image-resize-wrapper .resizer{width:10px;height:10px;background:#007bff;position:absolute;bottom:0;right:0;cursor:se-resize;border-radius:50%}.normal{width:50%;height:100%;border:1px solid red;border-radius:5px;color:red;padding:10px;font-size:16px}.normal:hover{color:red}.submit{width:50%;height:100%;border:none;border-radius:5px;color:#fff;padding:10px;background-color:#151544}.submit:hover{color:#fff}.action{margin-top:10px;padding:10px;display:flex;width:100%;justify-content:end;align-items:center;gap:5px}::ng-deep .sign canvas{border:1px dotted #ccc}.grid-container{display:grid;grid-template-columns:repeat(7,30px);grid-gap:4px;gap:4px;justify-content:center}.grid-item{width:30px;height:30px;border:1px solid #ccc;cursor:pointer}.grid-item.highlighted{background-color:#0d6efd}.sign{border:1px solid #ccc;width:100%;height:200px}.signClose{padding:16px;background-color:red;width:fit-content;color:#fff;border:none;border-radius:3px}.signClose:hover{background-color:#fff;color:red;border:1px solid red;border-radius:3px}.signReset{padding:16px;background-color:#4682b4;width:fit-content;color:#fff;border:none;border-radius:3px}.signSubmit{padding:16px;background-color:green;width:fit-content;color:#fff;border:none;border-radius:3px}.signSubmit:hover{background-color:#fff;color:green;border:1px solid green;border-radius:3px}.signReset:hover{background-color:#fff;color:#4682b4;border:1px solid steelblue;border-radius:3px}\n"] }]
932
935
  }], ctorParameters: function () { return [{ type: i1.MatDialog }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { contentCapture: [{
933
936
  type: Input
934
937
  }], height: [{
@@ -955,4 +958,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
955
958
  type: ViewChild,
956
959
  args: ['sigPad']
957
960
  }] } });
958
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFwaWQtdGV4dC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvcmFwaWQtdGV4dC1lZGl0b3Ivc3JjL2xpYi9yYXBpZC10ZXh0LWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9yYXBpZC10ZXh0LWVkaXRvci9zcmMvbGliL3JhcGlkLXRleHQtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFFLE1BQU0sRUFBVSxTQUFTLEVBQTBCLFVBQVUsRUFBRSxZQUFZLEVBQXdELE1BQU0sZUFBZSxDQUFDO0FBRWhNLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUd6RSxPQUFPLEtBQUssU0FBUyxNQUFNLFdBQVcsQ0FBQzs7Ozs7O0FBb0N2QyxNQUFNLE9BQU8sd0JBQXdCO0lBbURuQyxZQUFvQixNQUFpQixFQUMzQixFQUFjLEVBQ2QsUUFBbUIsRUFDbkIsS0FBaUIsRUFDakIsT0FBMEI7UUFKaEIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUMzQixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ2QsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQ2pCLFlBQU8sR0FBUCxPQUFPLENBQW1CO1FBckQ1Qix5QkFBb0IsR0FBb0I7WUFDOUMsT0FBTyxFQUFFO2dCQUNQLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixRQUFRLEVBQUUsSUFBSTtnQkFDZCxJQUFJLEVBQUUsSUFBSTtnQkFDVixNQUFNLEVBQUUsSUFBSTtnQkFDWixTQUFTLEVBQUUsSUFBSTtnQkFDZixhQUFhLEVBQUUsSUFBSTtnQkFDbkIsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixP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Q3ZELEtBQUssRUFBRSxJQUFJO1NBQ1o7S0FDRiwwYkN0Q0gsbWl4QkF1TEE7NEZEOUlhLHdCQUF3QjtrQkFicEMsU0FBUzsrQkFDRSxtQkFBbUIsYUFHbEI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUseUJBQXlCLENBQUM7NEJBQ3ZELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGOzBNQTJCUSxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDa0IsYUFBYTtzQkFBcEMsS0FBSzt1QkFBQyxlQUFlO2dCQUNaLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ2dDLE1BQU07c0JBQTVDLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDWCxXQUFXO3NCQUFwQyxTQUFTO3VCQUFDLGFBQWE7Z0JBQ00sZUFBZTtzQkFBNUMsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBQ1AsWUFBWTtzQkFBaEMsU0FBUzt1QkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT3V0cHV0LCBPbkluaXQsIFZpZXdDaGlsZCwgT25DaGFuZ2VzLCBUZW1wbGF0ZVJlZiwgZm9yd2FyZFJlZiwgRXZlbnRFbWl0dGVyLCBBZnRlclZpZXdJbml0LCBTaW1wbGVDaGFuZ2UsIFNpbXBsZUNoYW5nZXMsIFJlbmRlcmVyMn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU2lnbmF0dXJlUGFkIH0gZnJvbSAnYW5ndWxhcjItc2lnbmF0dXJlcGFkJztcclxuaW1wb3J0ICogYXMgYm9vdHN0cmFwIGZyb20gJ2Jvb3RzdHJhcCc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJERWRpdG9yT3B0aW9ucyB7XHJcbiAgb3B0aW9uczoge1xyXG4gICAgdGV4dEZvcm1hdD86IGJvb2xlYW4sXHJcbiAgICBmb250U2l6ZT86IGJvb2xlYW4sXHJcbiAgICBib2xkOiBib29sZWFuLFxyXG4gICAgaXRhbGljOiBib29sZWFuLFxyXG4gICAgdW5kZXJsaW5lOiBib29sZWFuLFxyXG4gICAgc3RyaWtldGhyb3VnaDogYm9vbGVhbixcclxuICAgIGFsaWduTGVmdDogYm9vbGVhbixcclxuICAgIGFsaWduUmlnaHQ6IGJvb2xlYW4sXHJcbiAgICBhbGlnbkNlbnRlcjogYm9vbGVhbixcclxuICAgIGp1c3RpZnk6IGJvb2xlYW4sXHJcbiAgICBidWxsZXRMaXN0OiBib29sZWFuLFxyXG4gICAgbnVtYmVyZWRMaXN0OiBib29sZWFuLFxyXG4gICAgaW1hZ2U/OiBib29sZWFuLFxyXG4gICAgdGFibGU/OiBib29sZWFuLCBcclxuICAgIHRhYmxlSGVhZGVyPzogYm9vbGVhbixcclxuICAgIHNpZ25hdHVyZT86IGJvb2xlYW5cclxuICB9XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncmFwaWQtdGV4dC1lZGl0b3InLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yYXBpZC10ZXh0LWVkaXRvci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcmFwaWQtdGV4dC1lZGl0b3IuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFJhcGlkVGV4dEVkaXRvckNvbXBvbmVudCksXHJcbiAgICAgIG11bHRpOiB0cnVlXHJcbiAgICB9XHJcbiAgXVxyXG4gIFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmFwaWRUZXh0RWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcclxuXHJcbiAgcHJpdmF0ZSBkZWZhdWx0RWRpdG9yT3B0aW9uczogUkRFZGl0b3JPcHRpb25zID0ge1xyXG4gICAgb3B0aW9uczoge1xyXG4gICAgICB0ZXh0Rm9ybWF0OiB0cnVlLFxyXG4gICAgICBmb250U2l6ZTogdHJ1ZSxcclxuICAgICAgYm9sZDogdHJ1ZSxcclxuICAgICAgaXRhbGljOiB0cnVlLFxyXG4gICAgICB1bmRlcmxpbmU6IHRydWUsXHJcbiAgICAgIHN0cmlrZXRocm91Z2g6IHRydWUsXHJcbiAgICAgIGFsaWduTGVmdDogdHJ1ZSxcclxuICAgICAgYWxpZ25SaWdodDogdHJ1ZSxcclxuICAgICAgYWxpZ25DZW50ZXI6IHRydWUsXHJcbiAgICAgIGp1c3RpZnk6IHRydWUsXHJcbiAgICAgIGJ1bGxldExpc3Q6IHRydWUsXHJcbiAgICAgIG51bWJlcmVkTGlzdDogdHJ1ZSxcclxuICAgICAgaW1hZ2U6IHRydWUsXHJcbiAgICAgIHRhYmxlOiB0cnVlLFxyXG4gICAgICB0YWJsZUhlYWRlcjogdHJ1ZSxcclxuICAgICAgc2lnbmF0dXJlOiB0cnVlXHJcbiAgICB9XHJcbiAgfTtcclxuXHJcblxyXG4gIEBJbnB1dCgpIGNvbnRlbnRDYXB0dXJlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaGVpZ2h0OiBzdHJpbmcgPSBcImF1dG9cIjtcclxuICBASW5wdXQoKSB3aWR0aDogc3RyaW5nID0gXCJhdXRvXCI7XHJcbiAgQElucHV0KCkgaWNvbkNvbG9yOiBzdHJpbmcgPSAnIzMzMzMzMydcclxuICBASW5wdXQoJ2VkaXRvck9wdGlvbnMnKSBlZGl0b3JPcHRpb25zITogUkRFZGl0b3JPcHRpb25zO1xyXG4gIEBPdXRwdXQoKSBjb250ZW50Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgQFZpZXdDaGlsZCgnZWRpdG9yJywgeyBzdGF0aWM6IHRydWUgfSkgZWRpdG9yITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCd0YWJsZURpYWxvZycpIHRhYmxlRGlhbG9nITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCdzaWduYXR1cmVEaWFsb2cnKSBzaWduYXR1cmVEaWFsb2chOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ3NpZ1BhZCcpIHNpZ25hdHVyZVBhZCE6IFNpZ25hdHVyZVBhZDtcclxuXHJcbiAgcHJpdmF0ZSBlZGl0b3JDb250ZW50OiBzdHJpbmcgPSAnJztcclxuICByb3dzOiBudW1iZXIgPSAxO1xyXG4gIGNvbHM6IG51bWJlciA9IDE7XHJcbiAgZ3JpZCA9IEFycmF5KDQ5KS5maWxsKDApO1xyXG4gIE1hdGggPSBNYXRoO1xyXG4gIHVwbG9hZGVkSW1hZ2VzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHNlbGVjdGVkUm93cyE6IGFueTtcclxuICBzZWxlY3RlZENvbHMhOiBhbnk7XHJcblxyXG4gIFxyXG4gIHNpZ25hdHVyZVBhZE9wdGlvbnMgPSB7XHJcbiAgICBtaW5XaWR0aDogMSxcclxuICAgIGNhbnZhc1dpZHRoOiA0MDAsXHJcbiAgICBjYW52YXNIZWlnaHQ6IDIwMFxyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csIFxyXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZiwgXHJcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsIFxyXG4gICAgcHJpdmF0ZSBlbFJlZjogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgX2NoYW5nZTogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHtcclxuICAgIGNvbnNvbGUubG9nKCdCdWlsZCAtMScpXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNvbnRlbnRDYXB0dXJlKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdDb250ZW50IGNhcHR1cmUgaXMgZW5hYmxlZC4nKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdDb250ZW50IGNhcHR1cmUgaXMgZGlzYWJsZWQuJyk7XHJcbiAgICB9XHJcbiAgICBpZighdGhpcy5lZGl0b3JPcHRpb25zKXtcclxuICAgICAgdGhpcy5lZGl0b3JPcHRpb25zID0gdGhpcy5kZWZhdWx0RWRpdG9yT3B0aW9ucztcclxuICAgIH1cclxuICAgIC8vIHRoaXMuaW5pdGlhbGl6ZUVkaXRvckNvbnRlbnQoJycpO1xyXG4gICAgLy8gdGhpcy5lbnN1cmVQYXJhZ3JhcGhBbmRGb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ2hlaWdodCddIHx8IGNoYW5nZXNbJ3dpZHRoJ10pIHtcclxuICAgICAgdGhpcy5hcHBseURpbWVuc2lvbnMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlEaW1lbnNpb25zKCk6IHZvaWQge1xyXG4gICAgY29uc3QgZGltZW5zaW9uRWxlbWVudCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZGltZW5zaW9uJyk7XHJcbiAgICBpZiAodGhpcy53aWR0aCkge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGRpbWVuc2lvbkVsZW1lbnQsICd3aWR0aCcsIHRoaXMud2lkdGgpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmljaFRleHRFZGl0b3JFbGVtZW50ID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5yaWNoLXRleHQtZWRpdG9yJyk7XHJcbiAgICBpZih0aGlzLmhlaWdodCl7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUocmljaFRleHRFZGl0b3JFbGVtZW50LCAnaGVpZ2h0JywgJ2F1dG8nKTtcclxuICAgIH1lbHNle1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHJpY2hUZXh0RWRpdG9yRWxlbWVudCwgJ2hlaWdodCcsICcxMDAlJyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5oZWlnaHQpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShkaW1lbnNpb25FbGVtZW50LCAnaGVpZ2h0JywgJ2F1dG8nKTtcclxuICAgIH1lbHNle1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGRpbWVuc2lvbkVsZW1lbnQsICdoZWlnaHQnLCAnMTAwJScpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZWRpdG9yRWxlbWVudCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yJyk7XHJcbiAgICBpZih0aGlzLmhlaWdodCl7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZWRpdG9yRWxlbWVudCwgJ2hlaWdodCcsIHRoaXMuaGVpZ2h0KTtcclxuICAgIH0gICAgXHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcblxyXG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5lZGl0b3InKTtcclxuICAgIFxyXG4gICAgaWYgKGVkaXRvciAmJiAoZWRpdG9yLmlubmVySFRNTC50cmltKCkgPT09IFwiXCIgfHwgZWRpdG9yLmlubmVySFRNTC50cmltKCkgPT09IFwiPGJyPlwiKSkge1xyXG4gICAgICAvLyBlZGl0b3IuZm9jdXMoKTtcclxuICAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xyXG4gICAgICByYW5nZS5zZXRTdGFydChlZGl0b3IsIDApO1xyXG4gICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTtcclxuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XHJcbiAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xyXG4gICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XHJcbiAgICAgIH1cclxuICAgICAgZWRpdG9yLmlubmVySFRNTCA9ICc8cCBzdHlsZT1cImZvbnQtc2l6ZToxNHB4OyBmb250LXdlaWdodDpub3JtYWw7XCI+XFx1MjAwQjwvcD4nXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRWRpdG9yIGVsZW1lbnQgbm90IGZvdW5kLicpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4gdGhpcy51cGRhdGVDdXJyZW50Rm9ybWF0KCkpO1xyXG4gICAgICBvYnNlcnZlci5vYnNlcnZlKHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQsIHtcclxuICAgICAgICBjaGlsZExpc3Q6IHRydWUsXHJcbiAgICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcclxuICAgICAgICBzdWJ0cmVlOiB0cnVlXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50LmJsdXIoKTtcclxuXHJcbiAgICAvLyB0aGlzLmluaXRpYWxpemVFZGl0b3JDb250ZW50KCcnKTtcclxuICAgIC8vIHRoaXMuZW5zdXJlUGFyYWdyYXBoQW5kRm9jdXMoKTtcclxuXHJcbiAgfVxyXG5cclxuICBlbnN1cmVQYXJhZ3JhcGhBbmRGb2N1cygpIHtcclxuXHJcbiAgICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XHJcbiAgICBpZiAoIWVkaXRvcikgcmV0dXJuO1xyXG5cclxuICAgIC8vIElmIGVkaXRvciBpcyBlbXB0eSBvciBkb2Vzbid0IGhhdmUgYSA8cD4gYXMgdGhlIGxhc3QgZWxlbWVudFxyXG4gICAgaWYgKCFlZGl0b3IuaW5uZXJIVE1MLnRyaW0oKSkge1xyXG4gICAgICBlZGl0b3IuaW5uZXJIVE1MID0gJzxwIHN0eWxlPVwiZm9udC1zaXplOjE0cHg7IGZvbnQtd2VpZ2h0Om5vcm1hbDtcIj5cXHUyMDBCPC9wPic7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBmaXJzdENoaWxkID0gZWRpdG9yLmZpcnN0Q2hpbGQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgIGlmICghZmlyc3RDaGlsZCB8fCBmaXJzdENoaWxkLnRhZ05hbWUgIT09ICdQJykge1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBlZGl0b3IuaW5uZXJIVE1MO1xyXG4gICAgICAgIGVkaXRvci5pbm5lckhUTUwgPSBgPHAgc3R5bGU9XCJmb250LXNpemU6MTRweDsgZm9udC13ZWlnaHQ6bm9ybWFsO1wiPiR7Y29udGVudH08L3A+YDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHAgPSBlZGl0b3IucXVlcnlTZWxlY3RvcigncCcpO1xyXG4gICAgaWYgKHApIHtcclxuICAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xyXG4gICAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMocCk7XHJcbiAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpOyBcclxuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XHJcbiAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xyXG4gICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBGb2N1cyB0aGUgZWRpdG9yXHJcbiAgICBlZGl0b3IuZm9jdXMoKTtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpemVFZGl0b3JDb250ZW50KGRhdGE6IHN0cmluZykge1xyXG4gICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xyXG4gICAgaWYgKCFlZGl0b3IpIHJldHVybjtcclxuXHJcbiAgICAvLyBJZiBjb250ZW50IGhhcyBubyBIVE1MIHRhZ3MsIHdyYXAgd2l0aCA8cD5cclxuICAgIGNvbnN0IGhhc0h0bWxUYWdzID0gLzxbXj5dKz4vLnRlc3QoZGF0YSk7XHJcbiAgICBpZiAoIWhhc0h0bWxUYWdzKSB7XHJcbiAgICAgIGVkaXRvci5pbm5lckhUTUwgPSBgPHAgc3R5bGU9XCJmb250LXNpemU6MTRweDsgZm9udC13ZWlnaHQ6IG5vcm1hbDtcIj4ke2RhdGF9PC9wPmA7XHJcbiAgICAgIC8vIHRoaXMuZW5zdXJlUGFyYWdyYXBoQW5kRm9jdXMoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGVkaXRvci5pbm5lckhUTUwgPSBkYXRhO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgfVxyXG5cclxuXHJcbiAgb25Db250ZW50Q2hhbmdlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29udGVudENhcHR1cmUpIHtcclxuICAgICAgY29uc3QgZWRpdG9yID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5lZGl0b3InKTtcclxuICAgICAgaWYgKGVkaXRvcikge1xyXG4gICAgICAgIHRoaXMuZWRpdG9yQ29udGVudCA9IGVkaXRvci5pbm5lckhUTUw7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0NhcHR1cmVkIENvbnRlbnQgKENoaWxkKTonLCB0aGlzLmVkaXRvckNvbnRlbnQpO1xyXG4gICAgICAgIHRoaXMuY29udGVudENoYW5nZS5lbWl0KHRoaXMuZWRpdG9yQ29udGVudCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRWRpdG9yIGVsZW1lbnQgbm90IGZvdW5kLicpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDb250ZW50KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5lZGl0b3JDb250ZW50O1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRIZWFkOiBhbnkgPSAnUCc7XHJcbiAgc2VsZWN0ZWRGb250OiBhbnkgPSAnMTQnO1xyXG5cclxuICBwdWJsaWMgb25DaGFuZ2UgPSAoY29udGVudDogc3RyaW5nKSA9PiB7XHJcbiAgICBpZiAodGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPT0gJzxicj4nIHx8IHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID09ICcnKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRIZWFkID0gJ1AnO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRm9udCA9ICcxNCc7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9jaGFuZ2UuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgb25Ub3VjaGVkID0gKCkgPT4geyB9O1xyXG5cclxuICB3cml0ZVZhbHVlKGNvbnRlbnQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZWRpdG9yICYmIHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSBjb250ZW50IHx8ICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKGNvbnRlbnQ6IHN0cmluZykgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICBvbkJsdXIoKSB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gc2V0Rm9udFNpemUoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgLy8gICBjb25zdCBzZWxlY3QgPSBldmVudC50YXJnZXQgYXMgSFRNTFNlbGVjdEVsZW1lbnQ7XHJcbiAgLy8gICBjb25zdCBzaXplID0gc2VsZWN0LnZhbHVlO1xyXG4gIC8vICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gIC8vICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHJldHVybjtcclxuICAvLyAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XHJcbiAgLy8gICBpZiAoIXJhbmdlLmNvbGxhcHNlZCkge1xyXG4gIC8vICAgICBjb25zdCBwYXJlbnQgPSBzZWxlY3Rpb24uYW5jaG9yTm9kZT8ucGFyZW50RWxlbWVudDtcclxuICAvLyAgICAgaWYgKFxyXG4gIC8vICAgICAgIHBhcmVudCAmJlxyXG4gIC8vICAgICAgIHBhcmVudC5jbGFzc0xpc3QgJiZcclxuICAvLyAgICAgICBBcnJheS5mcm9tKHBhcmVudC5jbGFzc0xpc3QpLnNvbWUoKGM6IHN0cmluZykgPT4gYy5zdGFydHNXaXRoKCdmcy0nKSlcclxuICAvLyAgICAgKSB7XHJcbiAgLy8gICAgICAgcGFyZW50LnN0eWxlLmZvbnRTaXplID0gYCR7c2l6ZX1weGA7XHJcbiAgLy8gICAgICAgcGFyZW50LmNsYXNzTmFtZSA9IGBmcy0ke3NpemV9YDtcclxuICAvLyAgICAgfSBlbHNlIHtcclxuICAvLyAgICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG4gIC8vICAgICAgIHNwYW4uc3R5bGUuZm9udFNpemUgPSBgJHtzaXplfXB4YDtcclxuICAvLyAgICAgICBzcGFuLmNsYXNzTGlzdC5hZGQoYGZzLSR7c2l6ZX1gKTtcclxuICAvLyAgICAgICByYW5nZS5zdXJyb3VuZENvbnRlbnRzKHNwYW4pO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9XHJcbiAgLy8gICBlbHNlIHtcclxuICAvLyAgICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcclxuICAvLyAgICAgc3Bhbi5zdHlsZS5mb250U2l6ZSA9IGAke3NpemV9cHhgO1xyXG4gIC8vICAgICBzcGFuLmNsYXNzTGlzdC5hZGQoYGZzLSR7c2l6ZX1gKTtcclxuICAvLyAgICAgc3Bhbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnXFx1MjAwQicpKTsgLy8gemVyby13aWR0aCBzcGFjZVxyXG4gIC8vICAgICByYW5nZS5pbnNlcnROb2RlKHNwYW4pO1xyXG4gIC8vICAgICBjb25zdCBuZXdSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XHJcbiAgLy8gICAgIG5ld1JhbmdlLnNldFN0YXJ0KHNwYW4uZmlyc3RDaGlsZCBhcyBOb2RlLCAxKTtcclxuICAvLyAgICAgbmV3UmFuZ2UuY29sbGFwc2UodHJ1ZSk7XHJcbiAgLy8gICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAvLyAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKG5ld1JhbmdlKTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIG9uRWRpdG9yS2V5VXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIC8vIGhhbmRsZSBFbnRlciBvciBhcnJvdyBrZXlzXHJcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcgfHwgZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcgfHwgZXZlbnQua2V5ID09PSAnQXJyb3dVcCcgfHwgZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJyB8fCBldmVudC5rZXkgPT09ICdCYWNrU3BhY2UnICkge1xyXG4gICAgICB0aGlzLnVwZGF0ZUN1cnJlbnRGb3JtYXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUN1cnJlbnRGb3JtYXQoKSB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGFuY2hvck5vZGUgPSBzZWxlY3Rpb24uYW5jaG9yTm9kZTtcclxuICAgIGlmICghYW5jaG9yTm9kZSkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBwYXJlbnRFbGVtID0gYW5jaG9yTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcclxuICAgICAgPyAoYW5jaG9yTm9kZSBhcyBIVE1MRWxlbWVudClcclxuICAgICAgOiAoYW5jaG9yTm9kZS5wYXJlbnRFbGVtZW50IGFzIEhUTUxFbGVtZW50KTtcclxuXHJcbiAgICBpZiAoIXBhcmVudEVsZW0pIHJldHVybjtcclxuXHJcbiAgICBsZXQgZGV0ZWN0ZWRIZWFkID0gJ1AnO1xyXG4gICAgbGV0IGRldGVjdGVkRm9udCA9ICcxNCc7IC8vIGRlZmF1bHRcclxuXHJcbiAgICAvLyBUcmF2ZXJzZSB1cHdhcmQgdG8gZGV0ZWN0IGZvcm1hdHRpbmdcclxuICAgIHdoaWxlIChwYXJlbnRFbGVtICYmIHBhcmVudEVsZW0gIT09IHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgY29uc3QgdGFnID0gcGFyZW50RWxlbS50YWdOYW1lLnRvVXBwZXJDYXNlKCk7XHJcblxyXG4gICAgICAvLyBEZXRlY3QgaGVhZGluZ1xyXG4gICAgICBpZiAoWydIMScsICdIMicsICdIMycsICdINCcsICdINScsICdINicsICdQJ10uaW5jbHVkZXModGFnKSkge1xyXG4gICAgICAgIGRldGVjdGVkSGVhZCA9IHRhZztcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gRGV0ZWN0IGlubGluZSBmb250LXNpemUgZnJvbSBzdHlsZSBvciBjbGFzc1xyXG4gICAgICBjb25zdCBmb250U2l6ZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHBhcmVudEVsZW0pLmZvbnRTaXplO1xyXG4gICAgICBpZiAoZm9udFNpemUpIHtcclxuICAgICAgICBjb25zdCBweCA9IHBhcnNlSW50KGZvbnRTaXplLnJlcGxhY2UoJ3B4JywgJycpLCAxMCk7XHJcbiAgICAgICAgaWYgKCFpc05hTihweCkpIHtcclxuICAgICAgICAgIGRldGVjdGVkRm9udCA9IHB4LnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBicmVhazsgLy8gZm91bmQgdGhlIGNsb3Nlc3QgdmFsaWQgZm9udCBzaXplXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBwYXJlbnRFbGVtID0gcGFyZW50RWxlbS5wYXJlbnRFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFVwZGF0ZSBib3VuZCBwcm9wZXJ0aWVzIGlmIGNoYW5nZWRcclxuICAgIGxldCBjaGFuZ2VkID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEhlYWQgIT09IGRldGVjdGVkSGVhZCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSGVhZCA9IGRldGVjdGVkSGVhZDtcclxuICAgICAgY2hhbmdlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEZvbnQgIT09IGRldGVjdGVkRm9udCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRm9udCA9IGRldGVjdGVkRm9udDtcclxuICAgICAgY2hhbmdlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNoYW5nZWQpIHtcclxuICAgICAgdGhpcy5fY2hhbmdlLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBzZXRGb250U2l6ZShldmVudDogRXZlbnQpIHtcclxuICAgIGNvbnN0IHNlbGVjdCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MU2VsZWN0RWxlbWVudDtcclxuICAgIGNvbnN0IHNpemUgPSBzZWxlY3QudmFsdWU7XHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcblxyXG4gICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHJldHVybjtcclxuXHJcbiAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xyXG5cclxuICAgIGlmICghcmFuZ2UuY29sbGFwc2VkKSB7XHJcbiAgICAgIC8vIE5vbi1lbXB0eSBzZWxlY3Rpb25cclxuICAgICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcclxuICAgICAgc3Bhbi5zdHlsZS5zZXRQcm9wZXJ0eSgnZm9udC1zaXplJywgYCR7c2l6ZX1weGAsICdpbXBvcnRhbnQnKTtcclxuICAgICAgc3Bhbi5jbGFzc0xpc3QuYWRkKGBmcy0ke3NpemV9YCk7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgcmFuZ2Uuc3Vycm91bmRDb250ZW50cyhzcGFuKTtcclxuICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgLy8gSWYgc2VsZWN0aW9uIHNwYW5zIG11bHRpcGxlIGVsZW1lbnRzLCB1c2UgZXhlY0NvbW1hbmQgZmFsbGJhY2tcclxuICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnZm9udFNpemUnLCBmYWxzZSwgJzcnKTsgLy8gdGVtcG9yYXJ5IGxhcmdlc3Qgc2l6ZVxyXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2ZvbnRbc2l6ZT1cIjdcIl0nKS5mb3JFYWNoKChlbDogSFRNTEVsZW1lbnQpID0+IHtcclxuICAgICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgnc2l6ZScpO1xyXG4gICAgICAgICAgZWwuc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtc2l6ZScsIGAke3NpemV9cHhgLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgICBlbC5jbGFzc0xpc3QuYWRkKGBmcy0ke3NpemV9YCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIENvbGxhcHNlZCBzZWxlY3Rpb24gKG5vIHRleHQgc2VsZWN0ZWQpXHJcbiAgICAgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XHJcbiAgICAgIHNwYW4uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtc2l6ZScsIGAke3NpemV9cHhgLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgIHNwYW4uY2xhc3NMaXN0LmFkZChgZnMtJHtzaXplfWApO1xyXG4gICAgICBzcGFuLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdcXHUyMDBCJykpOyAvLyB6ZXJvLXdpZHRoIHNwYWNlXHJcbiAgICAgIHJhbmdlLmluc2VydE5vZGUoc3Bhbik7XHJcblxyXG4gICAgICAvLyBNb3ZlIGN1cnNvciBpbnNpZGUgc3BhblxyXG4gICAgICBjb25zdCBuZXdSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XHJcbiAgICAgIG5ld1JhbmdlLnNldFN0YXJ0KHNwYW4uZmlyc3RDaGlsZCBhcyBOb2RlLCAxKTtcclxuICAgICAgbmV3UmFuZ2UuY29sbGFwc2UodHJ1ZSk7XHJcbiAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKG5ld1JhbmdlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudC5pbm5lckhUTUw7XHJcbiAgICB0aGlzLm9uQ2hhbmdlKGNvbnRlbnQpO1xyXG4gICAgdGhpcy51cGRhdGVDdXJyZW50Rm9ybWF0KCk7XHJcbiAgICB0aGlzLl9jaGFuZ2UuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgc2V0SGVhZGluZyhldmVudDogRXZlbnQpIHtcclxuICAgIGNvbnN0IHNlbGVjdCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MU2VsZWN0RWxlbWVudDtcclxuICAgIGNvbnN0IHRhZyA9IHNlbGVjdC52YWx1ZTtcclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcclxuICAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcclxuICAgIGlmICghZWRpdG9yKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgbmV3RWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTtcclxuXHJcbiAgICBzd2l0Y2ggKHRhZykge1xyXG4gICAgICBjYXNlICdIMSc6XHJcbiAgICAgICAgbmV3RWxlbS5zdHlsZS5zZXRQcm9wZXJ0eSgnZm9udC1zaXplJywgJzMycHgnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgbmV3RWxlbS5zdHlsZS5zZXRQcm9wZXJ0eSgnZm9udC13ZWlnaHQnLCAnYm9sZCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnSDInOlxyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtc2l6ZScsICcyOHB4JywgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtd2VpZ2h0JywgJ2JvbGQnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0gzJzpcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXNpemUnLCAnMjRweCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXdlaWdodCcsICdib2xkJywgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdINCc6XHJcbiAgICAgICAgbmV3RWxlbS5zdHlsZS5zZXRQcm9wZXJ0eSgnZm9udC1zaXplJywgJzIwcHgnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgbmV3RWxlbS5zdHlsZS5zZXRQcm9wZXJ0eSgnZm9udC13ZWlnaHQnLCAnYm9sZCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnSDUnOlxyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtc2l6ZScsICcxOHB4JywgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtd2VpZ2h0JywgJzYwMCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnSDYnOlxyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtc2l6ZScsICcxNnB4JywgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtd2VpZ2h0JywgJzYwMCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnUCc6XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgbmV3RWxlbS5zdHlsZS5zZXRQcm9wZXJ0eSgnZm9udC1zaXplJywgJzE0cHgnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgbmV3RWxlbS5zdHlsZS5zZXRQcm9wZXJ0eSgnZm9udC13ZWlnaHQnLCAnbm9ybWFsJywgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNlbGVjdGVkVGV4dCA9IHNlbGVjdGlvbi50b1N0cmluZygpO1xyXG4gICAgaWYgKHNlbGVjdGVkVGV4dCkge1xyXG4gICAgICBuZXdFbGVtLnRleHRDb250ZW50ID0gc2VsZWN0ZWRUZXh0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbmV3RWxlbS5pbm5lckhUTUwgPSAnXFx1MjAwQic7IC8vIEtlZXBzIGN1cnNvciB2aXNpYmxlXHJcbiAgICB9XHJcblxyXG4gICAgcmFuZ2UuZGVsZXRlQ29udGVudHMoKTtcclxuICAgIHJhbmdlLmluc2VydE5vZGUobmV3RWxlbSk7XHJcblxyXG4gICAgY29uc3QgbmV3UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xyXG4gICAgbmV3UmFuZ2Uuc2V0U3RhcnQobmV3RWxlbSwgbmV3RWxlbS5jaGlsZE5vZGVzLmxlbmd0aCk7XHJcbiAgICBuZXdSYW5nZS5jb2xsYXBzZSh0cnVlKTtcclxuICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgIHNlbGVjdGlvbi5hZGRSYW5nZShuZXdSYW5nZSk7XHJcblxyXG4gICAgZWRpdG9yLmZvY3VzKCk7XHJcblxyXG4gICAgdGhpcy5fY2hhbmdlLmRldGVjdENoYW5nZXMoKTtcclxuICAgIGNvbnN0IGlucHV0RXZlbnQgPSBuZXcgRXZlbnQoJ2lucHV0JywgeyBidWJibGVzOiB0cnVlIH0pO1xyXG4gICAgZWRpdG9yLmRpc3BhdGNoRXZlbnQoaW5wdXRFdmVudCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZm9ybWF0KGNvbW1hbmQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoY29tbWFuZCwgZmFsc2UsICcnKTtcclxuICB9XHJcblxyXG4gIC8vSW1hZ2UgU2VjdGlvblxyXG5cclxuICBhbGxvd0Ryb3AoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xyXG4gICAgLy9ldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gSGFuZGxlIGltYWdlIGRyYWcgc3RhcnRcclxuICBkcmFnKGV2ZW50OiBEcmFnRXZlbnQsIGltYWdlVXJsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGV2ZW50LmRhdGFUcmFuc2Zlcj8uc2V0RGF0YShcInRleHRcIiwgaW1hZ2VVcmwpO1xyXG4gIH1cclxuXHJcbiAgLy8gSGFuZGxlIGRyb3AgZXZlbnQgaW4gdGhlIGVkaXRvclxyXG4gIGRyb3AoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xyXG4gICAgLy8gZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcblxyXG4gIC8vIGJpbmRJbWFnZUNsaWNrRXZlbnRzKCkge1xyXG4gIC8vICAgY29uc3QgZWRpdG9yRWwgPSB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50O1xyXG4gIC8vICAgY29uc3QgaW1hZ2VzID0gZWRpdG9yRWwucXVlcnlTZWxlY3RvckFsbCgnaW1nJyk7XHJcblxyXG4gIC8vICAgaW1hZ2VzLmZvckVhY2goaW1nID0+IHtcclxuICAvLyAgICAgLy8gQXZvaWQgZG91YmxlLWJpbmRpbmdcclxuICAvLyAgICAgaW1nLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkltYWdlQ2xpY2sgYXMgYW55KTtcclxuICAvLyAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkltYWdlQ2xpY2suYmluZCh0aGlzKSk7XHJcbiAgLy8gICB9KTtcclxuICAvLyB9XHJcblxyXG4gIC8vIG9uSW1hZ2VDbGljayhldmVudDogTW91c2VFdmVudCkge1xyXG4gIC8vICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgLy8gICBjb25zdCBpbWcgPSBldmVudC50YXJnZXQgYXMgSFRNTEltYWdlRWxlbWVudDtcclxuICAvLyAgIHRoaXMuZW5hYmxlSW1hZ2VSZXNpemUoaW1nKTtcclxuICAvLyB9XHJcblxyXG4gIC8vIGVuYWJsZUltYWdlUmVzaXplKGltZzogSFRNTEltYWdlRWxlbWVudCkge1xyXG4gIC8vICAgLy8gUmVtb3ZlIGFueSBleGlzdGluZyByZXNpemUgaGFuZGxlcyBmaXJzdFxyXG4gIC8vICAgdGhpcy5yZW1vdmVJbWFnZVJlc2l6ZUhhbmRsZXMoKTtcclxuXHJcbiAgLy8gICBjb25zdCB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgLy8gICB3cmFwcGVyLmNsYXNzTGlzdC5hZGQoJ2ltYWdlLXJlc2l6ZS13cmFwcGVyJyk7XHJcbiAgLy8gICBpbWcucGFyZW50Tm9kZT8uaW5zZXJ0QmVmb3JlKHdyYXBwZXIsIGltZyk7XHJcbiAgLy8gICB3cmFwcGVyLmFwcGVuZENoaWxkKGltZyk7XHJcblxyXG4gIC8vICAgLy8gQWRkIHJlc2l6YWJsZSBoYW5kbGVzXHJcbiAgLy8gICBjb25zdCByZXNpemVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgLy8gICByZXNpemVyLmNsYXNzTGlzdC5hZGQoJ3Jlc2l6ZXInKTtcclxuICAvLyAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQocmVzaXplcik7XHJcblxyXG4gIC8vICAgLy8gSGFuZGxlIHJlc2l6aW5nIGxvZ2ljXHJcbiAgLy8gICBsZXQgc3RhcnRYID0gMCwgc3RhcnRZID0gMCwgc3RhcnRXaWR0aCA9IDAsIHN0YXJ0SGVpZ2h0ID0gMDtcclxuXHJcbiAgLy8gICByZXNpemVyLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIChlOiBNb3VzZUV2ZW50KSA9PiB7XHJcbiAgLy8gICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAvLyAgICAgc3RhcnRYID0gZS5jbGllbnRYO1xyXG4gIC8vICAgICBzdGFydFkgPSBlLmNsaWVudFk7XHJcbiAgLy8gICAgIHN0YXJ0V2lkdGggPSBpbWcud2lkdGg7XHJcbiAgLy8gICAgIHN0YXJ0SGVpZ2h0ID0gaW1nLmhlaWdodDtcclxuXHJcbiAgLy8gICAgIGNvbnN0IG9uTW91c2VNb3ZlID0gKGU6IE1vdXNlRXZlbnQpID0+IHtcclxuICAvLyAgICAgICBjb25zdCBuZXdXaWR0aCA9IHN0YXJ0V2lkdGggKyAoZS5jbGllbnRYIC0gc3RhcnRYKTtcclxuICAvLyAgICAgICBjb25zdCBuZXdIZWlnaHQgPSBzdGFydEhlaWdodCArIChlLmNsaWVudFkgLSBzdGFydFkpO1xyXG4gIC8vICAgICAgIGltZy5zdHlsZS53aWR0aCA9IGAke25ld1dpZHRofXB4YDtcclxuICAvLyAgICAgICBpbWcuc3R5bGUuaGVpZ2h0ID0gYCR7bmV3SGVpZ2h0fXB4YDtcclxuICAvLyAgICAgfTtcclxuXHJcbiAgLy8gICAgIGNvbnN0IG9uTW91c2VVcCA9ICgpID0+IHtcclxuICAvLyAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XHJcbiAgLy8gICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XHJcbiAgLy8gICAgIH07XHJcblxyXG4gIC8vICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XHJcbiAgLy8gICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xyXG4gIC8vICAgfSk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyByZW1vdmVJbWFnZVJlc2l6ZUhhbmRsZXMoKSB7XHJcbiAgLy8gICBjb25zdCBleGlzdGluZyA9IHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmltYWdlLXJlc2l6ZS13cmFwcGVyJyk7XHJcbiAgLy8gICBpZiAoZXhpc3RpbmcpIHtcclxuICAvLyAgICAgY29uc3QgaW1nID0gZXhpc3RpbmcucXVlcnlTZWxlY3RvcignaW1nJyk7XHJcbiAgLy8gICAgIGlmIChpbWcpIHtcclxuICAvLyAgICAgICBleGlzdGluZy5wYXJlbnROb2RlPy5pbnNlcnRCZWZvcmUoaW1nLCBleGlzdGluZyk7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgICAgZXhpc3RpbmcucmVtb3ZlKCk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuXHJcbiAgcmVtb3ZlSW1hZ2UoaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy51cGxvYWRlZEltYWdlcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gIH1cclxuXHJcbiAgaW5zZXJ0SW1hZ2VJbkVkaXRvcihpbWFnZVVybDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yJykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBpZiAoIWVkaXRvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdFZGl0b3IgZWxlbWVudCBub3QgZm91bmQuJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDcmVhdGUgaW1hZ2UgZWxlbWVudFxyXG4gICAgY29uc3QgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XHJcbiAgICBpbWcuc3JjID0gaW1hZ2VVcmw7XHJcbiAgICBpbWcuc3R5bGUubWF4V2lkdGggPSAnMTAwJSc7XHJcbiAgICBpbWcuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICBpbWcuc3R5bGUud2lkdGggPSAnMzAwcHgnO1xyXG4gICAgaW1nLnN0eWxlLmhlaWdodCA9ICdhdXRvJztcclxuXHJcbiAgICAvLyBDcmVhdGUgYSB3cmFwcGVyIGFyb3VuZCB0aGUgaW1hZ2UgdG8gYWxsb3cgcmVzaXppbmdcclxuICAgIGNvbnN0IHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgIHdyYXBwZXIuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnO1xyXG4gICAgd3JhcHBlci5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7ICAvLyBFbnN1cmVzIHRoZSB3cmFwcGVyIG9ubHkgdGFrZXMgdXAgc3BhY2UgZm9yIHRoZSBpbWFnZVxyXG4gICAgd3JhcHBlci5zdHlsZS5tYXJnaW4gPSAnMTBweCc7XHJcbiAgICB3cmFwcGVyLnN0eWxlLnBhZGRpbmcgPSAnNXB4JztcclxuICAgIHdyYXBwZXIuc3R5bGUuYm9yZGVyID0gJzFweCBkYXNoZWQgI2NjYyc7IC8vIE9wdGlvbmFsIGJvcmRlciB0byBpbmRpY2F0ZSB0aGUgaW1hZ2UgYXJlYVxyXG5cclxuICAgIC8vIEFwcGVuZCB0aGUgaW1hZ2UgdG8gdGhlIHdyYXBwZXJcclxuICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoaW1nKTtcclxuXHJcbiAgICAvLyBBcHBlbmQgdGhlIHdyYXBwZXIgdG8gdGhlIGVkaXRvclxyXG4gICAgZWRpdG9yLmFwcGVuZENoaWxkKHdyYXBwZXIpO1xyXG5cclxuICAgIC8vIE1ha2UgdGhlIGltYWdlIHJlc2l6YWJsZVxyXG4gICAgdGhpcy5tYWtlSW1hZ2VSZXNpemFibGUod3JhcHBlciwgaW1nKTtcclxuXHJcbiAgICAvLyBPcHRpb25hbGx5LCBhZGQgYSB0ZXh0IG5vZGUgdG8gbWFpbnRhaW4gY3Vyc29yIHBvc2l0aW9uIGFmdGVyIGFwcGVuZGluZyB0aGUgaW1hZ2VcclxuICAgIGNvbnN0IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ1xcdTIwMEInKTsgIC8vIEludmlzaWJsZSBjaGFyYWN0ZXIgdG8gbWFpbnRhaW4gcG9zaXRpb25cclxuICAgIGVkaXRvci5hcHBlbmRDaGlsZCh0ZXh0Tm9kZSk7XHJcblxyXG4gICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xyXG4gICAgcmFuZ2Uuc2V0U3RhcnRBZnRlcih3cmFwcGVyKTtcclxuICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpO1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgIGlmIChzZWxlY3Rpb24pIHtcclxuICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xyXG4gICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbWFrZUltYWdlUmVzaXphYmxlKHdyYXBwZXI6IEhUTUxFbGVtZW50LCBpbWc6IEhUTUxJbWFnZUVsZW1lbnQpOiB2b2lkIHtcclxuICAgIGxldCBpc1Jlc2l6aW5nID0gZmFsc2U7XHJcbiAgICBsZXQgc3RhcnRYID0gMDtcclxuICAgIGxldCBzdGFydFkgPSAwO1xyXG4gICAgbGV0IHN0YXJ0V2lkdGggPSAwO1xyXG4gICAgbGV0IHN0YXJ0SGVpZ2h0ID0gMDtcclxuXHJcbiAgICAvLyBDcmVhdGUgcmVzaXplIGhhbmRsZXMgZm9yIHRoZSBpbWFnZVxyXG4gICAgY29uc3QgY3JlYXRlUmVzaXplSGFuZGxlID0gKFxyXG4gICAgICBjdXJzb3I6IHN0cmluZyxcclxuICAgICAgcG9zaXRpb25TdHlsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXHJcbiAgICAgIHJlc2l6ZUNhbGxiYWNrOiAoZGVsdGFYOiBudW1iZXIsIGRlbHRhWTogbnVtYmVyKSA9PiB2b2lkXHJcbiAgICApID0+IHtcclxuICAgICAgY29uc3QgaGFuZGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgIGhhbmRsZS5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XHJcbiAgICAgIGhhbmRsZS5zdHlsZS53aWR0aCA9ICcxMHB4JztcclxuICAgICAgaGFuZGxlLnN0eWxlLmhlaWdodCA9ICcxMHB4JztcclxuICAgICAgaGFuZGxlLnN0eWxlLmJhY2tncm91bmQgPSAncmdiYSgwLCAwLCAwLCAwLjUpJztcclxuICAgICAgaGFuZGxlLnN0eWxlLmN1cnNvciA9IGN1cnNvcjtcclxuICAgICAgT2JqZWN0LmFzc2lnbihoYW5kbGUuc3R5bGUsIHBvc2l0aW9uU3R5bGVzKTtcclxuXHJcbiAgICAgIGhhbmRsZS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAocmVzaXplRXZlbnQpID0+IHtcclxuICAgICAgICBpc1Jlc2l6aW5nID0gdHJ1ZTtcclxuICAgICAgICBzdGFydFggPSByZXNpemVFdmVudC5jbGllbnRYO1xyXG4gICAgICAgIHN0YXJ0WSA9IHJlc2l6ZUV2ZW50LmNsaWVudFk7XHJcbiAgICAgICAgc3RhcnRXaWR0aCA9IGltZy5vZmZzZXRXaWR0aDtcclxuICAgICAgICBzdGFydEhlaWdodCA9IGltZy5vZmZzZXRIZWlnaHQ7XHJcblxyXG4gICAgICAgIGNvbnN0IG9uTW91c2VNb3ZlID0gKG1vdmVFdmVudDogTW91c2VFdmVudCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGlzUmVzaXppbmcpIHtcclxuICAgICAgICAgICAgY29uc3QgZGVsdGFYID0gbW92ZUV2ZW50LmNsaWVudFggLSBzdGFydFg7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlbHRhWSA9IG1vdmVFdmVudC5jbGllbnRZIC0gc3RhcnRZO1xyXG4gICAgICAgICAgICByZXNpemVDYWxsYmFjayhkZWx0YVgsIGRlbHRhWSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3Qgb25Nb3VzZVVwID0gKCkgPT4ge1xyXG4gICAgICAgICAgaXNSZXNpemluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xyXG4gICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoaGFuZGxlKTtcclxuICAgIH07XHJcblxyXG4gICAgLy8gQWRkIHJlc2l6aW5nIGhhbmRsZXMgdG8gdGhlIHdyYXBwZXIgZm9yIHRoZSBpbWFnZVxyXG4gICAgY3JlYXRlUmVzaXplSGFuZGxlKFxyXG4gICAgICAnbnctcmVzaXplJyxcclxuICAgICAgeyB0b3A6ICctNXB4JywgbGVmdDogJy01cHgnIH0sXHJcbiAgICAgIChkZWx0YVgsIGRlbHRhWSkgPT4ge1xyXG4gICAgICAgIGltZy5zdHlsZS53aWR0aCA9IGAke3N0YXJ0V2lkdGggLSBkZWx0YVh9cHhgO1xyXG4gICAgICAgIGltZy5zdHlsZS5oZWlnaHQgPSBgJHtzdGFydEhlaWdodCAtIGRlbHRhWX1weGA7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICBjcmVhdGVSZXNpemVIYW5kbGUoXHJcbiAgICAgICdzZS1yZXNpemUnLFxyXG4gICAgICB7IGJvdHRvbTogJy01cHgnLCByaWdodDogJy01cHgnIH0sXHJcbiAgICAgIChkZWx0YVgsIGRlbHRhWSkgPT4ge1xyXG4gICAgICAgIGltZy5zdHlsZS53aWR0aCA9IGAke3N0YXJ0V2lkdGggKyBkZWx0YVh9cHhgO1xyXG4gICAgICAgIGltZy5zdHlsZS5oZWlnaHQgPSBgJHtzdGFydEhlaWdodCArIGRlbHRhWX1weGA7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpbnNlcnRJbWFnZShldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICBpZiAoaW5wdXQ/LmZpbGVzKSB7XHJcbiAgICAgIEFycmF5LmZyb20oaW5wdXQuZmlsZXMpLmZvckVhY2goZmlsZSA9PiB7XHJcbiAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgaW1hZ2VVcmwgPSBlLnRhcmdldC5yZXN1bHQ7XHJcbiAgICAgICAgICB0aGlzLnVwbG9hZGVkSW1hZ2VzLnB1c2goaW1hZ2VVcmwpOyAvLyBTdG9yZSBpbWFnZSBVUkwgaW4gdGhlIGFycmF5XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb252ZXJ0SW1hZ2UoZmlsZTogRmlsZSk6IFByb21pc2U8RmlsZT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgaWYgKGZpbGUudHlwZSAhPT0gJ2ltYWdlL3BuZycpIHtcclxuICAgICAgICByZXNvbHZlKGZpbGUpOyAvLyBSZXR1cm4gdGhlIG9yaWdpbmFsIGZpbGUgaWYgaXQncyBub3QgYSBQTkdcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xyXG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG5cclxuICAgICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcclxuICAgICAgICBpbWcuc3JjID0gZS50YXJnZXQucmVzdWx0O1xyXG5cclxuICAgICAgICBpbWcub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuXHJcbiAgICAgICAgICBpZiAoIWN0eCkge1xyXG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdGYWlsZWQgdG8gZ2V0IGNhbnZhcyBjb250ZXh0JykpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY2FudmFzLndpZHRoID0gaW1nLndpZHRoO1xyXG4gICAgICAgICAgY2FudmFzLmhlaWdodCA9IGltZy5oZWlnaHQ7XHJcblxyXG4gICAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDAsIDApO1xyXG4gICAgICAgICAgY2FudmFzLnRvQmxvYihcclxuICAgICAgICAgICAgYmxvYiA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGJsb2IpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGpwZ0ZpbGUgPSBuZXcgRmlsZShbYmxvYl0sIGZpbGUubmFtZS5yZXBsYWNlKC9cXC5wbmckLywgJy5qcGcnKSwgeyB0eXBlOiAnaW1hZ2UvanBlZycgfSk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKGpwZ0ZpbGUpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdGYWlsZWQgdG8gY29udmVydCBQTkcgdG8gSlBHJykpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgJ2ltYWdlL2pwZWcnLFxyXG4gICAgICAgICAgICAwLjk1IC8vIFF1YWxpdHkgZmFjdG9yIGZvciBKUEVHXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH07XHJcblxyXG4gICAgICByZWFkZXIub25lcnJvciA9ICgpID0+IHJlamVjdChuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZWFkIHRoZSBmaWxlJykpO1xyXG4gICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBpbnNlcnRJbWFnZVRvRWRpdG9yKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XHJcbiAgICBsZXQgZmlsZVR5cGVzID0gWydpbWFnZS9qcGVnJywgJ2ltYWdlL3BuZycsICdpbWFnZS9qcGcnXTtcclxuXHJcbiAgICBpZighZmlsZVR5cGVzLmluY2x1ZGVzKGZpbGUudHlwZSkpXHJcbiAgICAgIHJldHVybjtcclxuICAgIFxyXG4gICAgaWYgKGZpbGUpIHtcclxuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBpbWFnZVVybCA9IGUudGFyZ2V0LnJlc3VsdDtcclxuICAgICAgICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yJykgYXMgSFRNTEVsZW1lbnQ7XHJcblxyXG4gICAgICAgIGlmICghZWRpdG9yKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFZGl0b3IgZWxlbWVudCBub3QgZm91bmQuJyk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICB3cmFwcGVyLmNvbnRlbnRFZGl0YWJsZSA9ICdmYWxzZSc7XHJcbiAgICAgICAgd3JhcHBlci5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XHJcbiAgICAgICAgd3JhcHBlci5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7XHJcbiAgICAgICAgd3JhcHBlci5zdHlsZS5ib3JkZXIgPSAnMXB4IGRhc2hlZCAjY2NjJztcclxuICAgICAgICB3cmFwcGVyLnN0eWxlLm1hcmdpbiA9ICcxMHB4JztcclxuICAgICAgICB3cmFwcGVyLnN0eWxlLnBhZGRpbmcgPSAnNXB4JztcclxuICAgICAgICB3cmFwcGVyLnN0eWxlLmJvcmRlckJsb2NrQ29sb3IgPSAnIzAwN0JGRic7XHJcbiAgICAgICAgY29uc3QgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XHJcbiAgICAgICAgaW1nLnNyYyA9IGltYWdlVXJsO1xyXG4gICAgICAgIGltZy5zdHlsZS5tYXhXaWR0aCA9ICcxMDAlJztcclxuICAgICAgICBpbWcuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgaW1nLnN0eWxlLndpZHRoID0gJzMwMHB4JztcclxuICAgICAgICBpbWcuc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nO1xyXG4gICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoaW1nKTtcclxuICAgICAgICBsZXQgaXNSZXNpemluZyA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBzdGFydFggPSAwO1xyXG4gICAgICAgIGxldCBzdGFydFkgPSAwO1xyXG4gICAgICAgIGxldCBzdGFydFdpZHRoID0gMDtcclxuICAgICAgICBsZXQgc3RhcnRIZWlnaHQgPSAwO1xyXG5cclxuICAgICAgICBjb25zdCBjcmVhdGVSZXNpemVIYW5kbGUgPSAoXHJcbiAgICAgICAgICBjdXJzb3I6IHN0cmluZyxcclxuICAgICAgICAgIHBvc2l0aW9uU3R5bGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxyXG4gICAgICAgICAgcmVzaXplQ2FsbGJhY2s6IChkZWx0YVg6IG51bWJlciwgZGVsdGFZOiBudW1iZXIpID0+IHZvaWRcclxuICAgICAgICApID0+IHtcclxuICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgICAgaGFuZGxlLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcclxuICAgICAgICAgIGhhbmRsZS5zdHlsZS53aWR0aCA9ICcxMHB4JztcclxuICAgICAgICAgIGhhbmRsZS5zdHlsZS5oZWlnaHQgPSAnMTBweCc7XHJcbiAgICAgICAgICBoYW5kbGUuc3R5bGUuYmFja2dyb3VuZCA9ICdyZ2JhKDAsIDAsIDAsIDAuNSknO1xyXG4gICAgICAgICAgaGFuZGxlLnN0eWxlLmN1cnNvciA9IGN1cnNvcjtcclxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oaGFuZGxlLnN0eWxlLCBwb3NpdGlvblN0eWxlcyk7XHJcblxyXG4gICAgICAgICAgaGFuZGxlLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIChyZXNpemVFdmVudCkgPT4ge1xyXG4gICAgICAgICAgICBpc1Jlc2l6aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgc3RhcnRYID0gcmVzaXplRXZlbnQuY2xpZW50WDtcclxuICAgICAgICAgICAgc3RhcnRZID0gcmVzaXplRXZlbnQuY2xpZW50WTtcclxuICAgICAgICAgICAgc3RhcnRXaWR0aCA9IGltZy5vZmZzZXRXaWR0aDtcclxuICAgICAgICAgICAgc3RhcnRIZWlnaHQgPSBpbWcub2Zmc2V0SGVpZ2h0O1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgb25Nb3VzZU1vdmUgPSAobW92ZUV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGlzUmVzaXppbmcpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRlbHRhWCA9IG1vdmVFdmVudC5jbGllbnRYIC0gc3RhcnRYO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGVsdGFZID0gbW92ZUV2ZW50LmNsaWVudFkgLSBzdGFydFk7XHJcbiAgICAgICAgICAgICAgICByZXNpemVDYWxsYmFjayhkZWx0YVgsIGRlbHRhWSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBvbk1vdXNlVXAgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgaXNSZXNpemluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcclxuICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKGhhbmRsZSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjcmVhdGVSZXNpemVIYW5kbGUoXHJcbiAgICAgICAgICAnbnctcmVzaXplJyxcclxuICAgICAgICAgIHsgdG9wOiAnLTVweCcsIGxlZnQ6ICctNXB4JyB9LFxyXG4gICAgICAgICAgKGRlbHRhWCwgZGVsdGFZKSA9PiB7XHJcbiAgICAgICAgICAgIGltZy5zdHlsZS53aWR0aCA9IGAke3N0YXJ0V2lkdGggLSBkZWx0YVh9cHhgO1xyXG4gICAgICAgICAgICBpbWcuc3R5bGUuaGVpZ2h0ID0gYCR7c3RhcnRIZWlnaHQgLSBkZWx0YVl9cHhgO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY3JlYXRlUmVzaXplSGFuZGxlKFxyXG4gICAgICAgICAgJ3NlLXJlc2l6ZScsXHJcbiAgICAgICAgICB7IGJvdHRvbTogJy01cHgnLCByaWdodDogJy01cHgnIH0sXHJcbiAgICAgICAgICAoZGVsdGFYLCBkZWx0YVkpID0+IHtcclxuICAgICAgICAgICAgaW1nLnN0eWxlLndpZHRoID0gYCR7c3RhcnRXaWR0aCArIGRlbHRhWH1weGA7XHJcbiAgICAgICAgICAgIGltZy5zdHlsZS5oZWlnaHQgPSBgJHtzdGFydEhlaWdodCArIGRlbHRhWX1weGA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICBlZGl0b3IuYXBwZW5kQ2hpbGQod3JhcHBlcik7XHJcbiAgICAgICAgY29uc3QgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnXFx1MjAwQicpO1xyXG4gICAgICAgIGVkaXRvci5hcHBlbmRDaGlsZCh0ZXh0Tm9kZSk7XHJcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xyXG4gICAgICAgIHJhbmdlLnNldFN0YXJ0QWZ0ZXIod3JhcHBlcik7XHJcbiAgICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgICAgIGlmIChzZWxlY3Rpb24pIHtcclxuICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9wZW5UYWJsZURpYWxvZyhldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgY29uc3QgbW9kYWxFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWJsZURpYWxvZycpITtcclxuICAgIGNvbnN0IGRpYWxvZyA9IG1vZGFsRWwucXVlcnlTZWxlY3RvcignLm1vZGFsLWRpYWxvZycpIGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgIC8vIE9mZnNldCBzbyBpdCBkb2Vzbid0IHN0aWNrIGV4YWN0bHkgdG8gY3Vyc29yXHJcbiAgICBjb25zdCBPRkZTRVRfWCA9IDEwO1xyXG4gICAgY29uc3QgT0ZGU0VUX1kgPSAxMDtcclxuXHJcbiAgICBkaWFsb2cuc3R5bGUubGVmdCA9IGV2ZW50LmNsaWVudFggKyBPRkZTRVRfWCArICdweCc7XHJcbiAgICBkaWFsb2cuc3R5bGUudG9wID0gZXZlbnQuY2xpZW50WSArIE9GRlNFVF9ZICsgJ3B4JztcclxuXHJcbiAgICBjb25zdCBtb2RhbCA9IG5ldyBib290c3RyYXAuTW9kYWwobW9kYWxFbCwge1xyXG4gICAgICBiYWNrZHJvcDogZmFsc2UsXHJcbiAgICAgIGtleWJvYXJkOiB0cnVlXHJcbiAgICB9KTtcclxuXHJcbiAgICBtb2RhbC5zaG93KCk7XHJcbiAgfVxyXG5cclxuICBvcGVuU2lnbmF0dXJlRGlhbG9nKCkge1xyXG4gICAgY29uc3QgbW9kYWwgPSBuZXcgYm9vdHN0cmFwLk1vZGFsKFxyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2lnbmF0dXJlRGlhbG9nJykhXHJcbiAgICApO1xyXG4gICAgbW9kYWwuc2hvdygpO1xyXG4gIH1cclxuXHJcbiAgLy8gb3BlblRhYmxlRGlhbG9nKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgLy8gICB0aGlzLmluc2VydE1hcmtlcigpO1xyXG4gIC8vICAgdGhpcy5yb3dzID0gMTtcclxuICAvLyAgIHRoaXMuY29scyA9IDE7XHJcblxyXG4gIC8vICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLnRhYmxlRGlhbG9nLCB7XHJcbiAgLy8gICAgIHBvc2l0aW9uOiB7XHJcbiAgLy8gICAgICAgdG9wOiBgJHtldmVudC5jbGllbnRZfXB4YCxcclxuICAvLyAgICAgICBsZWZ0OiBgJHtldmVudC5jbGllbnRYfXB4YCxcclxuICAvLyAgICAgfSxcclxuICAvLyAgICAgcGFuZWxDbGFzczogJ2N1c3RvbS1kaWFsb2ctY29udGFpbmVyJ1xyXG4gIC8vICAgfSk7XHJcblxyXG4gIC8vICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAvLyAgICAgaWYgKHJlc3VsdCkge1xyXG4gIC8vICAgICAgIHRoaXMuaW5zZXJ0VGFibGUocmVzdWx0LnJvd3MsIHJlc3VsdC5jb2xzKTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfSk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBvcGVuU2lnbmF0dXJlRGlhbG9nKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgLy8gICB0aGlzLmluc2VydE1hcmtlcigpO1xyXG5cclxuICAvLyAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5zaWduYXR1cmVEaWFsb2csIHtcclxuICAvLyAgICAgcG9zaXRpb246IHtcclxuICAvLyAgICAgICAvLyB0b3A6IGAke2V2ZW50LmNsaWVudFl9cHhgLFxyXG4gIC8vICAgICAgIC8vIGxlZnQ6IGAke2V2ZW50LmNsaWVudFh9cHhgLFxyXG4gIC8vICAgICAgIHRvcDogJzMwcHgnXHJcbiAgLy8gICAgIH0sXHJcbiAgLy8gICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAvLyAgICAgcGFuZWxDbGFzczogJ2N1c3RvbS1kaWFsb2ctY29udGFpbmVyJ1xyXG4gIC8vICAgfSk7XHJcblxyXG4gIC8vICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAvLyAgICAgaWYocmVzdWx0KVxyXG4gIC8vICAgICAgIC8vIHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICs9IGA8aW1nIHNyYz0ke3Jlc3VsdH0gYWx0PSdTaWduYXR1cmUnIC8+YFxyXG4gIC8vICAgICB0aGlzLmluc2VydEltYWdlSW5FZGl0b3IocmVzdWx0KTtcclxuICAvLyAgIH0pO1xyXG4gIC8vIH1cclxuXHJcbiAgdXBkYXRlUHJldmlldyhjb2xzOiBudW1iZXIsIHJvd3M6IG51bWJlcikge1xyXG4gICAgdGhpcy5jb2xzID0gY29scztcclxuICAgIHRoaXMucm93cyA9IHJvd3M7XHJcbiAgfVxyXG5cclxuICAvLyB1cGRhdGVTZWxlY3Rpb24oY29sSW5kZXg6IG51bWJlciwgcm93SW5kZXg6IG51bWJlcikge1xyXG4gIC8vICAgdGhpcy5jb2xzID0gY29sSW5kZXg7XHJcbiAgLy8gICB0aGlzLnJvd3MgPSByb3dJbmRleDtcclxuICAvLyAgIGRpYWxvZ1JlZi5jbG9zZSh7IHJvd3M6IHRoaXMucm93cywgY29sczogdGhpcy5jb2xzIH0pOyAvLyBDbG9zZSBkaWFsb2cgd2l0aCBzZWxlY3Rpb25cclxuICAvLyB9XHJcblxyXG4gIHVwZGF0ZVNlbGVjdGlvbihjb2xJbmRleDogbnVtYmVyLCByb3dJbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkQ29scyA9IGNvbEluZGV4O1xyXG4gICAgdGhpcy5zZWxlY3RlZFJvd3MgPSByb3dJbmRleDtcclxuXHJcbiAgICAvLyBJbnNlcnQgdGFibGUgaW1tZWRpYXRlbHkgKE1hdGVyaWFsIGFmdGVyQ2xvc2VkIHJlcGxhY2VtZW50KVxyXG4gICAgdGhpcy5pbnNlcnRUYWJsZSh0aGlzLnNlbGVjdGVkUm93cywgdGhpcy5zZWxlY3RlZENvbHMpO1xyXG5cclxuICAgIC8vIENsb3NlIG1vZGFsXHJcbiAgICBjb25zdCBtb2RhbEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhYmxlRGlhbG9nJyk7XHJcbiAgICBjb25zdCBtb2RhbCA9IGJvb3RzdHJhcC5Nb2RhbC5nZXRJbnN0YW5jZShtb2RhbEVsISk7XHJcbiAgICBtb2RhbD8uaGlkZSgpO1xyXG4gIH1cclxuXHJcblxyXG4gIG1ha2VGaXJzdFJvd0hlYWRlcigpOiB2b2lkIHtcclxuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICAvLyBDaGVjayBpZiBzZWxlY3Rpb24gaXMgaW5zaWRlIHRoZSBlZGl0b3JcclxuICAgIGlmICghdGhpcy5pc1NlbGVjdGlvbkluc2lkZUVkaXRvcihlZGl0b3IsIHNlbGVjdGlvbikpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gRmluZCB0aGUgY2xvc2VzdCB0YWJsZSB0byB0aGUgc2VsZWN0aW9uXHJcbiAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWROb2RlID0gcmFuZ2Uuc3RhcnRDb250YWluZXI7XHJcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMuZmluZENsb3Nlc3RUYWJsZShzZWxlY3RlZE5vZGUpO1xyXG4gICAgaWYgKCF0YWJsZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBDb252ZXJ0IHRoZSBmaXJzdCByb3cgY2VsbHMgdG8gaGVhZGVyIGNlbGxzXHJcbiAgICBjb25zdCBmaXJzdFJvdyA9IHRhYmxlLnJvd3NbMF07XHJcbiAgICBpZiAoZmlyc3RSb3cpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaXJzdFJvdy5jZWxscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGNlbGwgPSBmaXJzdFJvdy5jZWxsc1tpXTtcclxuICAgICAgICBjb25zdCB0aCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RoJyk7XHJcbiAgICAgICAgdGguaW5uZXJIVE1MID0gY2VsbC5pbm5lckhUTUw7XHJcbiAgICAgICAgdGguc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcbiAgICAgICAgdGguc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyNGMUYxRjAnO1xyXG4gICAgICAgIHRoLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgYmxhY2snO1xyXG4gICAgICAgIHRoLnN0eWxlLmJvcmRlckNvbGxhcHNlID0gJ2NvbGxhcHNlJztcclxuICAgICAgICB0aC5zdHlsZS5wYWRkaW5nID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoY2VsbCkucGFkZGluZzsgLy8gUmV0YWluIHBhZGRpbmdcclxuICAgICAgICB0aC5zdHlsZS53aWR0aCA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGNlbGwpLndpZHRoOyAvLyBSZXRhaW4gd2lkdGhcclxuICAgICAgICB0aC5zdHlsZS5oZWlnaHQgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjZWxsKS5oZWlnaHQ7XHJcbiAgICAgICAgZmlyc3RSb3cucmVwbGFjZUNoaWxkKHRoLCBjZWxsKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWRpdG9yLmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmRDbG9zZXN0VGFibGUobm9kZTogTm9kZSk6IEhUTUxUYWJsZUVsZW1lbnQgfCBudWxsIHtcclxuICAgIHdoaWxlIChub2RlICYmIG5vZGUgIT09IGRvY3VtZW50KSB7XHJcbiAgICAgIGlmIChub2RlLm5vZGVOYW1lID09PSAnVEFCTEUnKSB7XHJcbiAgICAgICAgcmV0dXJuIG5vZGUgYXMgSFRNTFRhYmxlRWxlbWVudDtcclxuICAgICAgfVxyXG4gICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlITtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbnNlcnRNYXJrZXIoKTogdm9pZCB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkge1xyXG4gICAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApLmNsb25lUmFuZ2UoKTtcclxuICAgICAgY29uc3QgbWFya2VyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG4gICAgICBtYXJrZXIuaWQgPSAndGFibGUtbWFya2VyJztcclxuICAgICAgbWFya2VyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgIHJhbmdlLmluc2VydE5vZGUobWFya2VyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluc2VydFRhYmxlKHJvd3M6IGFueSwgY29sczogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCByb3dDb3VudCA9IHBhcnNlSW50KHJvd3MsIDEwKTtcclxuICAgIGNvbnN0IGNvbENvdW50ID0gcGFyc2VJbnQoY29scywgMTApO1xyXG5cclxuICAgIGlmIChpc05hTihyb3dDb3VudCkgfHwgaXNOYU4oY29sQ291bnQpIHx8IHJvd0NvdW50IDwgMSB8fCBjb2xDb3VudCA8IDEpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBjb25zdCBtYXJrZXIgPSBlZGl0b3IucXVlcnlTZWxlY3RvcignI3RhYmxlLW1hcmtlcicpO1xyXG5cclxuICAgIGNvbnN0IHRhYmxlSFRNTCA9IHRoaXMuY3JlYXRlVGFibGVIVE1MKHJvd0NvdW50LCBjb2xDb3VudCk7XHJcbiAgICBjb25zdCB0ZW1wRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICB0ZW1wRGl2LmlubmVySFRNTCA9IHRhYmxlSFRNTDtcclxuICAgIGNvbnN0IHRhYmxlID0gdGVtcERpdi5maXJzdEVsZW1lbnRDaGlsZDtcclxuXHJcbiAgICBpZiAobWFya2VyICYmIHRhYmxlKSB7XHJcbiAgICAgIG1hcmtlci5wYXJlbnROb2RlIS5yZXBsYWNlQ2hpbGQodGFibGUsIG1hcmtlcik7XHJcbiAgICAgIHRoaXMuc2V0Q3Vyc29yVG9GaXJzdENlbGwodGFibGUgYXMgSFRNTEVsZW1lbnQpO1xyXG4gICAgICBlZGl0b3IuZm9jdXMoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGZhbGxiYWNrIGlmIG5vIG1hcmtlciwganVzdCBhcHBlbmRcclxuICAgICAgdGhpcy5hcHBlbmRUYWJsZShlZGl0b3IsIHJvd0NvdW50LCBjb2xDb3VudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZVRhYmxlSFRNTChyb3dDb3VudDogbnVtYmVyLCBjb2xDb3VudDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGxldCB0YWJsZUhUTUwgPSAnPHRhYmxlIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4OyB3aWR0aDogMTAwJTsgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XCI+JztcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93Q291bnQ7IGkrKykge1xyXG4gICAgICB0YWJsZUhUTUwgKz0gJzx0cj4nO1xyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbENvdW50OyBqKyspIHtcclxuICAgICAgICB0YWJsZUhUTUwgKz0gYDx0ZCBzdHlsZT1cImJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyBoZWlnaHQ6IDJlbTsgcGFkZGluZzogLjRlbTsgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cInRleHRib3hcIj48L3RkPmA7XHJcbiAgICAgIH1cclxuICAgICAgdGFibGVIVE1MICs9ICc8L3RyPic7XHJcbiAgICB9XHJcbiAgICB0YWJsZUhUTUwgKz0gJzwvdGFibGU+JztcclxuICAgIHJldHVybiB0YWJsZUhUTUw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGVuZFRhYmxlKGVkaXRvcjogSFRNTEVsZW1lbnQsIHJvd0NvdW50OiBudW1iZXIsIGNvbENvdW50OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGNvbnN0IHRhYmxlSFRNTCA9IHRoaXMuY3JlYXRlVGFibGVIVE1MKHJvd0NvdW50LCBjb2xDb3VudCk7XHJcbiAgICBlZGl0b3IuaW5uZXJIVE1MICs9IHRhYmxlSFRNTDtcclxuICAgIGNvbnN0IGxhc3RJbnNlcnRlZFRhYmxlID0gZWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJ3RhYmxlOmxhc3QtY2hpbGQnKSBhcyBIVE1MRWxlbWVudDtcclxuICAgIHRoaXMuc2V0Q3Vyc29yVG9GaXJzdENlbGwobGFzdEluc2VydGVkVGFibGUpO1xyXG4gICAgZWRpdG9yLmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzU2VsZWN0aW9uSW5zaWRlRWRpdG9yKGVkaXRvcjogSFRNTEVsZW1lbnQsIHNlbGVjdGlvbjogU2VsZWN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXNlbGVjdGlvbi5yYW5nZUNvdW50KSByZXR1cm4gZmFsc2U7XHJcbiAgICBsZXQgbm9kZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyO1xyXG4gICAgd2hpbGUgKG5vZGUpIHtcclxuICAgICAgaWYgKG5vZGUgPT09IGVkaXRvcikgcmV0dXJuIHRydWU7XHJcbiAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGUhO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRDdXJzb3JUb0ZpcnN0Q2VsbCh0YWJsZTogSFRNTEVsZW1lbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZpcnN0Q2VsbCA9IHRhYmxlLnF1ZXJ5U2VsZWN0b3IoJ3RyOmZpcnN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkLCB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCcpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgaWYgKGZpcnN0Q2VsbCkge1xyXG4gICAgICAvLyBmaXJzdENlbGwuc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCAndHJ1ZScpO1xyXG4gICAgICBmaXJzdENlbGwuZm9jdXMoKTtcclxuICAgICAgY29uc3QgbmV3UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xyXG4gICAgICBuZXdSYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZmlyc3RDZWxsKTsgLy8gU2VsZWN0IHRoZSBjb250ZW50cyBvZiB0aGUgY2VsbFxyXG4gICAgICBuZXdSYW5nZS5jb2xsYXBzZSh0cnVlKTsgLy8gQ29sbGFwc2UgdG8gdGhlIHN0YXJ0XHJcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgaWYgKHNlbGVjdGlvbikge1xyXG4gICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UobmV3UmFuZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbnNlcnRQYWdlQnJlYWsoKTogdm9pZCB7XHJcbiAgICBjb25zdCBwYWdlQnJlYWsgPSBgPGRpdiBzdHlsZT1cInBhZ2UtYnJlYWstYWZ0ZXI6IGFsd2F5cztcIj48YnIgLz48L2Rpdj5gO1xyXG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydEhUTUwnLCBmYWxzZSwgcGFnZUJyZWFrKTtcclxuICB9XHJcblxyXG4gIHN1Ym1pdENvbnRlbnQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50O1xyXG4gICAgaWYoIWVkaXRvcikgcmV0dXJuO1xyXG4gICAgY29uc3QgY29udGVudCA9IGVkaXRvci5pbm5lckhUTUw7IC8vIEdldCB0aGUgSFRNTCBjb250ZW50IGZyb20gdGhlIGVkaXRvclxyXG4gICAgY29uc3QgcGxhaW5UZXh0Q29udGVudCA9IGVkaXRvci5pbm5lclRleHQ7IC8vIE9wdGlvbmFsbHksIGdldCBwbGFpbiB0ZXh0IGNvbnRlbnRcclxuICAgIGlmICghZWRpdG9yLmlubmVySFRNTC50cmltKCkpIHtcclxuICAgICAgZWRpdG9yLmlubmVySFRNTCA9ICc8cCBzdHlsZT1cImZvbnQtc2l6ZToxNHB4OyBmb250LXdlaWdodDpub3JtYWw7XCI+XFx1MjAwQjwvcD4nO1xyXG4gICAgICAvLyB0aGlzLmVuc3VyZVBhcmFncmFwaEFuZEZvY3VzKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uQ2hhbmdlKGNvbnRlbnQpO1xyXG4gIH1cclxuXHJcbiAgLy9TaWduYXR1cmVcclxuXHJcbiAgY2xvc2VTaWduRGlhbG9nKCkge1xyXG4gICAgY29uc3QgbW9kYWxFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaWduYXR1cmVEaWFsb2cnKTtcclxuICAgIGNvbnN0IG1vZGFsID0gYm9vdHN0cmFwLk1vZGFsLmdldEluc3RhbmNlKG1vZGFsRWwhKTtcclxuICAgIG1vZGFsPy5oaWRlKCk7XHJcbiAgfVxyXG5cclxuICBzdWJtaXRTaWduRGlhbG9nKCkge1xyXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuc2lnbmF0dXJlUGFkLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJyk7XHJcbiAgICBjb25zb2xlLmxvZyhkYXRhKTtcclxuICAgIHRoaXMuaW5zZXJ0SW1hZ2VJbkVkaXRvcihkYXRhKTtcclxuICAgIHRoaXMuY2xvc2VTaWduRGlhbG9nKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJkaW1lbnNpb25cIiA+XHJcbiAgPGRpdiBjbGFzcz1cInJpY2gtdGV4dC1lZGl0b3JcIj5cclxuICAgIDwhLS0gVG9vbGJhciAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJ0b29sYmFyXCI+XHJcbiAgICAgIDxzZWxlY3QgKm5nSWY9XCJlZGl0b3JPcHRpb25zPy5vcHRpb25zPy50ZXh0Rm9ybWF0ID8/IHRydWVcIiBjbGFzcz1cInNlbGVjdC13cmFwcGVyXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEhlYWRcIiAoY2hhbmdlKT1cInNldEhlYWRpbmcoJGV2ZW50KVwiPlxyXG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCJQXCIgc3R5bGU9XCJmb250LXNpemU6IDE0cHggIWltcG9ydGFudDtcIj5QYXJhZ3JhcGg8L29wdGlvbj5cclxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiSDFcIiBzdHlsZT1cImZvbnQtc2l6ZTogMzJweCAhaW1wb3J0YW50OyBmb250LXdlaWdodDogYm9sZCAhaW1wb3J0YW50O1wiPkgxPC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkgyXCIgc3R5bGU9XCJmb250LXNpemU6IDI4cHggIWltcG9ydGFudDsgZm9udC13ZWlnaHQ6IGJvbGQgIWltcG9ydGFudDtcIj5IMjwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCJIM1wiIHN0eWxlPVwiZm9udC1zaXplOiAyNHB4ICFpbXBvcnRhbnQ7IGZvbnQtd2VpZ2h0OiBib2xkICFpbXBvcnRhbnQ7XCI+SDM8L29wdGlvbj5cclxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiSDRcIiBzdHlsZT1cImZvbnQtc2l6ZTogMjBweCAhaW1wb3J0YW50OyBmb250LXdlaWdodDogYm9sZCAhaW1wb3J0YW50O1wiPkg0PC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkg1XCIgc3R5bGU9XCJmb250LXNpemU6IDE4cHggIWltcG9ydGFudDsgZm9udC13ZWlnaHQ6IDYwMCAhaW1wb3J0YW50O1wiPkg1PC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkg2XCIgc3R5bGU9XCJmb250LXNpemU6IDE2cHggIWltcG9ydGFudDsgZm9udC13ZWlnaHQ6IDYwMCAhaW1wb3J0YW50O1wiPkg2PC9vcHRpb24+XHJcbiAgICAgIDwvc2VsZWN0PlxyXG4gICAgICA8c2VsZWN0ICpuZ0lmPVwiZWRpdG9yT3B0aW9ucz8ub3B0aW9ucz8uZm9udFNpemUgPz8gdHJ1ZVwiIGNsYXNzPVwic2VsZWN0LXdyYXBwZXJcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRm9udFwiXHJcbiAgICAgICAgKGNoYW5nZSk9XCJzZXRGb250U2l6ZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgPG9wdGlvbiBzdHlsZT1cImZvbnQtc2l6ZTogMTJweCAhaW1wb3J0YW50O1wiIHZhbHVlPVwiMTJcIj4xMnB4PC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiBzdHlsZT1cImZvbnQtc2l6ZTogMTRweCAhaW1wb3J0YW50O1wiIHZhbHVlPVwiMTRcIiBzZWxlY3RlZD4xNHB4PC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiBzdHlsZT1cImZvbnQtc2l6ZTogMTZweCAhaW1wb3J0YW50O1wiIHZhbHVlPVwiMTZcIj4xNnB4PC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiBzdHlsZT1cImZvbnQtc2l6ZTogMThweCAhaW1wb3J0YW50O1wiIHZhbHVlPVwiMThcIj4xOHB4PC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiBzdHlsZT1cImZvbnQtc2l6ZTogMjBweCAhaW1wb3J0YW50O1wiIHZhbHVlPVwiMjBcIj4yMHB4PC9vcHRpb24+ICBcclxuICAgICAgICA8b3B0aW9uIHN0eWxlPVwiZm9udC1zaXplOiAyNHB4ICFpbXBvcnRhbnQ7XCIgdmFsdWU9XCIyNFwiPjI0cHg8L29wdGlvbj5cclxuICAgICAgICA8b3B0aW9uIHN0eWxlPVwiZm9udC1zaXplOiAyOHB4ICFpbXBvcnRhbnQ7XCIgdmFsdWU9XCIyOFwiPjI4cHg8L29wdGlvbj5cclxuICAgICAgICA8b3B0aW9uIHN0eWxlPVwiZm9udC1zaXplOiAzMnB4ICFpbXBvcnRhbnQ7XCIgdmFsdWU9XCIzMlwiPjMycHg8L29wdGlvbj5cclxuICAgICAgICA8b3B0aW9uIHN0eWxlPVwiZm9udC1zaXplOiA0OHB4ICFpbXBvcnRhbnQ7XCIgdmFsdWU9XCI0OFwiPjQ4cHg8L29wdGlvbj5cclxuICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJlZGl0b3JPcHRpb25zPy5vcHRpb25zPy5ib2xkID8/IHRydWVcIiAoY2xpY2spPVwiZm9ybWF0KCdib2xkJylcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIkJvbGRcIiB0aXRsZT1cIkJvbGRcIiA+XHJcbiAgICAgICAgPHN2ZyAgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIiB2aWV3Qm94PVwiLTYuNSAwIDI4IDMyXCIgdmVyc2lvbj1cIjEuMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48ZyBpZD1cIlNWR1JlcG9fYmdDYXJyaWVyXCIgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9fdHJhY2VyQ2FycmllclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9faWNvbkNhcnJpZXJcIj4gPHRpdGxlPmJvbGQ8L3RpdGxlPiA8cGF0aCBkPVwiTTAgMjUuNTMxdjEuMzQ0YzEuMDYzLTAuMDMxIDEuOTM4LTAuMDYzIDIuNTYzLTAuMDk0IDAuNjI1IDAgMS4wOTQtMC4wMzEgMS4zMTMtMC4wMzEgMS42NTYtMC4xMjUgMy4wNjMtMC4yMTkgNC4yODEtMC4xODhsMi44MTMgMC4wNjNjMi40MzggMCA0LjI1LTAuMzEzIDUuNzUtMSAwLjcxOS0wLjM0NCAxLjM0NC0wLjg0NCAxLjk2OS0xLjUzMSAwLjQ2OS0wLjQ2OSAwLjgxMy0xLjAzMSAxLjAzMS0xLjY1NiAwLjI1LTAuODQ0IDAuMzc1LTEuNTk0IDAuMzc1LTIuMjgxIDAtMi41LTEuNzE5LTQuNjI1LTUuMDk0LTUuNDA2IDAuNTMxLTAuMjUgMS4wMzEtMC41IDEuMzc1LTAuNjg4czAuNjI1LTAuMzEzIDAuNzgxLTAuNDM4YzEuMTg4LTAuODc1IDEuNzgxLTEuOTA2IDEuNzgxLTMuMjgxIDAtMC41OTQtMC4wOTQtMS4xODgtMC4yODEtMS43MTktMC4zNzUtMS4wOTQtMS4yMTktMi0yLjQwNi0yLjU2My0wLjUzMS0wLjMxMy0xLjAzMS0wLjQ2OS0xLjM3NS0wLjUzMS0wLjkzOC0wLjI1LTEuODQ0LTAuMzc1LTIuNzE5LTAuMzc1aC0xLjA5NGMtMC4yMTkgMC0wLjQwNiAwLTAuNTMxLTAuMDMxaC0wLjVjLTAuMDYzIDAtMC4xNTYgMC0wLjI1IDAuMDMxaC0wLjYyNWwtNS40MDYgMC4xNTYtMy43MTkgMC4wOTQgMC4wNjMgMS4xODhjMC44NzUgMC4xMjUgMS40MDYgMC4xODggMS42MjUgMC4xODggMC40MzggMCAwLjc4MSAwLjA5NCAwLjk2OSAwLjIxOSAwLjA5NCAwIDAuMTU2IDAuMDYzIDAuMTg4IDAuMTI1IDAuMDYzIDAuMjE5IDAuMTI1IDAuNjg4IDAuMTU2IDEuNTYzIDAuMDYzIDEuNTYzIDAuMDYzIDIuODEzIDAuMDYzIDMuNzUgMC4wMzEgMC45NjkgMC4wMzEgMS42MjUgMC4wOTQgMnY3LjAzMWMwIDEuMjE5LTAuMDMxIDIuMTI1LTAuMTU2IDIuNzUtMC4wMzEgMC4yMTktMC4xMjUgMC40MzgtMC4yODEgMC42ODgtMC40MzggMC4xODgtMSAwLjM3NS0xLjc1IDAuNDY5LTAuMzc1IDAuMDYzLTAuNzE5IDAuMTI1LTEgMC4xNTZ6TTcuNzE5IDE0LjI4MXYtMi40NjljMC4wNjMtMS43MTkgMC0yLjk2OS0wLjAzMS0zLjk2OS0wLjA2My0wLjQzOC0wLjA2My0wLjg0NC0wLjA2My0xLjA2MyAwLjc1LTAuMTU2IDEuMzQ0LTAuMjE5IDEuODQ0LTAuMjE5IDEuNjI1IDAgMi44NDQgMC4zNDQgMy42NTYgMS4wOTQgMC44MTMgMC42ODggMS4yMTkgMS41NjMgMS4yMTkgMi42NTYgMCAyLjk2OS0xLjc1IDQuMDk0LTUuMDYzIDQuMDk0LTAuNTYzIDAtMS4wOTQtMC4wMzEtMS41NjMtMC4xMjV6TTcuNzE5IDIwLjQwNnYtNC41YzAuMzEzLTAuMDYzIDAuNzUtMC4xMjUgMS40MzgtMC4xMjUgMS41OTQtMC4wMzEgMi44MTMgMC4xMjUgMy41NjMgMC40MzggMS41MzEgMC41NjMgMi41OTQgMi4xODggMi41OTQgNC4zNDQgMCAxLjAzMS0wLjIxOSAxLjg0NC0wLjU2MyAyLjU2My0wLjM3NSAwLjcxOS0wLjkwNiAxLjIxOS0xLjcxOSAxLjU5NC0xLjY1NiAwLjc4MS0zLjcxOSAwLjcxOS01LjEyNSAwLjEyNS0wLjA5NC0wLjI1LTAuMTI1LTAuNDM4LTAuMTI1LTAuNTk0elwiPjwvcGF0aD4gPC9nPjwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJlZGl0b3JPcHRpb25zPy5vcHRpb25zPy5pdGFsaWMgPz8gdHJ1ZVwiIChjbGljayk9XCJmb3JtYXQoJ2l0YWxpYycpXCIgdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJJdGFsaWNcIiB0aXRsZT1cIkl0YWxpY1wiPlxyXG4gICAgICAgIDxzdmcgdmlld0JveD1cIjQgMCAyMCAyMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPiA8ZyBpZD1cIkVkaXQgLyBJdGFsaWNcIj4gPHBhdGggaWQ9XCJWZWN0b3JcIiBkPVwiTTggMTlIMTBNMTAgMTlIMTJNMTAgMTlMMTQgNU0xMiA1SDE0TTE0IDVIMTZcIiBbYXR0ci5zdHJva2VdPVwiaWNvbkNvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcGF0aD4gPC9nPiA8L2c+PC9zdmc+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImVkaXRvck9wdGlvbnM/Lm9wdGlvbnM/LnVuZGVybGluZSA/PyB0cnVlXCIgKGNsaWNrKT1cImZvcm1hdCgndW5kZXJsaW5lJylcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIlVuZGVybGluZVwiIHRpdGxlPVwiVW5kZXJsaW5lXCI+XHJcbiAgICAgICAgPHN2ZyB2aWV3Qm94PVwiNCAwIDE4IDIyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGcgaWQ9XCJTVkdSZXBvX2JnQ2FycmllclwiIHN0cm9rZS13aWR0aD1cIjBcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+IDxnIGlkPVwiRWRpdCAvIFVuZGVybGluZVwiPiA8cGF0aCBpZD1cIlZlY3RvclwiIGQ9XCJNNiAxOUgxOE04IDVWMTFDOCAxMy4yMDkxIDkuNzkwODYgMTUgMTIgMTVDMTQuMjA5MSAxNSAxNiAxMy4yMDkxIDE2IDExVjVcIiBbYXR0ci5zdHJva2VdPVwiaWNvbkNvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcGF0aD4gPC9nPiA8L2c+PC9zdmc+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImVkaXRvck9wdGlvbnM/Lm9wdGlvbnM/LnN0cmlrZXRocm91Z2ggPz8gdHJ1ZVwiIChjbGljayk9XCJmb3JtYXQoJ3N0cmlrZXRocm91Z2gnKVwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiU3RyaWtldGhyb3VnaFwiIHRpdGxlPVwiU3RyaWtldGhyb3VnaFwiPlxyXG4gICAgICAgIDxzdmcgdmlld0JveD1cIjQgMCAyMCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPiA8ZyBpZD1cIkVkaXQgLyBTdHJpa2V0aHJvdWdoXCI+IDxwYXRoIGlkPVwiVmVjdG9yXCIgZD1cIk0xMi4wMDA1IDEyLjAwMDFDMTIuODk1OSAxMi4wMDAxIDEzLjc3NDkgMTIuMTkyNSAxNC41NDU3IDEyLjU1NzFDMTQuODkzOSAxMi43MjE4IDE1LjIxNDYgMTIuOTE5MiAxNS41MDA5IDEzLjE0MzdDMTUuODQ4NCAxMy40MTYyIDE2LjE0NTcgMTMuNzI5IDE2LjM4MjIgMTQuMDczMkMxNi44MTM2IDE0LjcwMDkgMTcuMDI2MyAxNS40MDk2IDE2Ljk5ODIgMTYuMTI1NkMxNi45NyAxNi44NDE2IDE2LjcwMiAxNy41Mzg1IDE2LjIyMjIgMTguMTQzM0MxNS43NDI0IDE4Ljc0ODEgMTUuMDY4NCAxOS4yMzg2IDE0LjI3MDUgMTkuNTYzOEMxMy40NzI3IDE5Ljg4OSAxMi41ODAyIDIwLjAzNzMgMTEuNjg2NSAxOS45OTIzQzEwLjc5MjggMTkuOTQ3MyA5LjkzMTA0IDE5LjcxMDggOS4xOTA0MyAxOS4zMDgyQzguNDQ5ODIgMTguOTA1NSA3Ljg1NzgyIDE4LjM1MTQgNy40NzY1NiAxNy43MDMyTTEyLjAwMDUgMTIuMDAwMUg0TTEyLjAwMDUgMTIuMDAwMUgyME0xNi41MjQzIDYuMjk3MThDMTYuMTQzIDUuNjQ5IDE1LjU1MTIgNS4wOTQ2MiAxNC44MTA1IDQuNjkxOTdDMTQuMDY5OSA0LjI4OTMyIDEzLjIwNzYgNC4wNTI4NyAxMi4zMTQgNC4wMDc4OUMxMS40MjAzIDMuOTYyOTEgMTAuNTI3OCA0LjExMDkxIDkuNzI5OTggNC40MzYxM0M4LjkzMjEzIDQuNzYxMzUgOC4yNTgxMiA1LjI1MjA1IDcuNzc4MzIgNS44NTY4OUM3LjI5ODUyIDYuNDYxNzMgNy4wMzA1NyA3LjE1ODg1IDcuMDAyNDQgNy44NzQ4NUM2Ljk5NDIgOC4wODQ2MyA3LjAwNjY5IDguMjkzNDUgNy4wMzkyNCA4LjUwMDE0XCIgW2F0dHIuc3Ryb2tlXT1cImljb25Db2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+IDwvZz4gPC9nPjwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJlZGl0b3JPcHRpb25zPy5vcHRpb25zPy5hbGlnbkxlZnQgPz8gdHJ1ZVwiIChjbGljayk9XCJmb3JtYXQoJ2p1c3RpZnlMZWZ0JylcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIkFsaWduIExlZnRcIiB0aXRsZT1cIkFsaWduIExlZnRcIiA+XHJcbiAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAxNiAxNlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPiA8cGF0aCBkPVwiTTExIDFIMVYzSDExVjFaXCIgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIj48L3BhdGg+IDxwYXRoIGQ9XCJNMSA1SDE1VjdIMVY1WlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCI+PC9wYXRoPiA8cGF0aCBkPVwiTTExIDlIMVYxMUgxMVY5WlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCI+PC9wYXRoPiA8cGF0aCBkPVwiTTE1IDEzSDFWMTVIMTVWMTNaXCIgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIj48L3BhdGg+IDwvZz48L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwiZWRpdG9yT3B0aW9ucz8ub3B0aW9ucz8uYWxpZ25DZW50ZXIgPz8gdHJ1ZVwiIChjbGljayk9XCJmb3JtYXQoJ2p1c3RpZnlDZW50ZXInKVwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiQ2VudGVyXCIgdGl0bGU9XCJBbGlnbiBDZW50ZXJcIiA+XHJcbiAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAxNiAxNlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPiA8cGF0aCBkPVwiTTE1IDFIMVYzSDE1VjFaXCIgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIj48L3BhdGg+IDxwYXRoIGQ9XCJNMSA1SDE1VjdIMVY1WlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCI+PC9wYXRoPiA8cGF0aCBkPVwiTTE1IDlIMVYxMUgxNVY5WlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCI+PC9wYXRoPiA8cGF0aCBkPVwiTTExIDEzSDFWMTVIMTFWMTNaXCIgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIj48L3BhdGg+IDwvZz48L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwiZWRpdG9yT3B0aW9ucz8ub3B0aW9ucz8uYWxpZ25SaWdodCA/PyB0cnVlXCIgKGNsaWNrKT1cImZvcm1hdCgnanVzdGlmeVJpZ2h0JylcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIkFsaWduIFJpZ2h0XCIgdGl0bGU9XCJBbGlnbiBSaWdodFwiID5cclxuICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48ZyBpZD1cIlNWR1JlcG9fYmdDYXJyaWVyXCIgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9fdHJhY2VyQ2FycmllclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9faWNvbkNhcnJpZXJcIj4gPHBhdGggZD1cIk0xNSAxSDVWM0gxNVYxWlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCI+PC9wYXRoPiA8cGF0aCBkPVwiTTEgNUgxNVY3SDFWNVpcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiPjwvcGF0aD4gPHBhdGggZD1cIk0xNSA5SDVWMTFIMTVWOVpcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiPjwvcGF0aD4gPHBhdGggZD1cIk0xNSAxM0gxVjE1SDE1VjEzWlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCI+PC9wYXRoPiA8L2c+PC9zdmc+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImVkaXRvck9wdGlvbnM/Lm9wdGlvbnM/Lmp1c3RpZnkgPz8gdHJ1ZVwiIChjbGljayk9XCJmb3JtYXQoJ2p1c3RpZnlGdWxsJylcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIkp1c3RpZnlcIiB0aXRsZT1cIkp1c3RpZnlcIiA+XHJcbiAgICAgICAgPHN2ZyBbYXR0ci5maWxsXT1cImljb25Db2xvclwiIHZpZXdCb3g9XCIwIC0yLjUgMjkgMjlcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGcgaWQ9XCJTVkdSZXBvX2JnQ2FycmllclwiIHN0cm9rZS13aWR0aD1cIjBcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+PHBhdGggZD1cIm0xLjMzNCAyLjY2NmgyNi42NjVjLjAxMSAwIC4wMjQuMDAxLjAzNy4wMDEuNzM3IDAgMS4zMzQtLjU5NyAxLjMzNC0xLjMzNHMtLjU5Ny0xLjMzNC0xLjMzNC0xLjMzNGMtLjAxMyAwLS4wMjYgMC0uMDM5LjAwMWguMDAyLTI2LjY2NWMtLjcyLjAyMS0xLjI5Ni42MS0xLjI5NiAxLjMzM3MuNTc2IDEuMzEyIDEuMjk0IDEuMzMzaC4wMDJ6XCI+PC9wYXRoPjxwYXRoIGQ9XCJtMjcuOTk5IDUuMzMzaC0yNi42NjVjLS43Mi4wMjEtMS4yOTYuNjEtMS4yOTYgMS4zMzNzLjU3NiAxLjMxMiAxLjI5NCAxLjMzM2guMDAyIDI2LjY2NWMuMDExIDAgLjAyNC4wMDEuMDM3LjAwMS43MzcgMCAxLjMzNC0uNTk3IDEuMzM0LTEuMzM0cy0uNTk3LTEuMzM0LTEuMzM0LTEuMzM0Yy0uMDEzIDAtLjAyNiAwLS4wMzkuMDAxelwiPjwvcGF0aD48cGF0aCBkPVwibTI3Ljk5OSAxMC42NjdoLTI2LjY2NWMtLjcyLjAyMS0xLjI5Ni42MS0xLjI5NiAxLjMzM3MuNTc2IDEuMzEyIDEuMjk0IDEuMzMzaC4wMDIgMjYuNjY1Yy43Mi0uMDIxIDEuMjk2LS42MSAxLjI5Ni0xLjMzM3MtLjU3Ni0xLjMxMi0xLjI5NC0xLjMzM3pcIj48L3BhdGg+PHBhdGggZD1cIm0yNy45OTkgMjEuMzMzaC0yNi42NjVjLS43Mi4wMjEtMS4yOTYuNjEtMS4yOTYgMS4zMzNzLjU3NiAxLjMxMiAxLjI5NCAxLjMzM2guMDAyIDI2LjY2NWMuNzItLjAyMSAxLjI5Ni0uNjEgMS4yOTYtMS4zMzNzLS41NzYtMS4zMTItMS4yOTQtMS4zMzN6XCI+PC9wYXRoPjxwYXRoIGQ9XCJtMjcuOTk5IDE2aC0yNi42NjVjLS43Mi4wMjEtMS4yOTYuNjEtMS4yOTYgMS4zMzNzLjU3NiAxLjMxMiAxLjI5NCAxLjMzM2guMDAyIDI2LjY2NWMuNzItLjAyMSAxLjI5Ni0uNjEgMS4yOTYtMS4zMzNzLS41NzYtMS4zMTItMS4yOTQtMS4zMzN6XCI+PC9wYXRoPjwvZz48L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwiZWRpdG9yT3B0aW9ucz8ub3B0aW9ucz8uYnVsbGV0TGlzdCA/PyB0cnVlXCIgKGNsaWNrKT1cImZvcm1hdCgnaW5zZXJ0VW5vcmRlcmVkTGlzdCcpXCIgdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJVbm9yZGVyZWQgTGlzdFwiIHRpdGxlPVwiQnVsbGV0IExpc3RcIiA+XHJcbiAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIiB2aWV3Qm94PVwiMCAwIDM2IDQ4XCI+PGcgaWQ9XCJTVkdSZXBvX2JnQ2FycmllclwiIHN0cm9rZS13aWR0aD1cIjBcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+PHBhdGggZD1cIk04IDIxYy0xLjY2IDAtMyAxLjM0LTMgM3MxLjM0IDMgMyAzIDMtMS4zNCAzLTMtMS4zNC0zLTMtM3pNOCA5Yy0xLjY2IDAtMyAxLjM0LTMgM3MxLjM0IDMgMyAzIDMtMS4zNCAzLTMtMS4zNC0zLTMtM3ptMCAyNC4zM2MtMS40NyAwLTIuNjcgMS4xOS0yLjY3IDIuNjdzMS4yIDIuNjcgMi42NyAyLjY3IDIuNjctMS4xOSAyLjY3LTIuNjctMS4yLTIuNjctMi42Ny0yLjY3ek0xNCAzOGgyOHYtNEgxNHY0em0wLTEyaDI4di00SDE0djR6bTAtMTZ2NGgyOHYtNEgxNHpcIj48L3BhdGg+PC9nPjwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJlZGl0b3JPcHRpb25zPy5vcHRpb25zPy5udW1iZXJlZExpc3QgPz8gdHJ1ZVwiIChjbGljayk9XCJmb3JtYXQoJ2luc2VydE9yZGVyZWRMaXN0JylcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIk9yZGVyZWQgTGlzdFwiIHRpdGxlPVwiTnVtYmVyZWQgTGlzdFwiID5cclxuICAgICAgICA8c3ZnIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCIgdmVyc2lvbj1cIjEuMVwiIGlkPVwiQ2FwYV8xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiIHZpZXdCb3g9XCIwIDAgOTQuNDc5IDk0LjQ3OVwiIHhtbDpzcGFjZT1cInByZXNlcnZlXCI+PGcgaWQ9XCJTVkdSZXBvX2JnQ2FycmllclwiIHN0cm9rZS13aWR0aD1cIjBcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+IDxnPiA8Zz4gPHBhdGggZD1cIk05Mi40NzksNi44MjFIMjYuODIzYy0xLjEwNCwwLTIsMC44OTYtMiwyVjE5LjU4YzAsMS4xMDQsMC44OTYsMiwyLDJoNjUuNjU2YzEuMTA0LDAsMi0wLjg5NiwyLTJWOC44MjEgQzk0LjQ3OSw3LjcxNyw5My41ODQsNi44MjEsOTIuNDc5LDYuODIxelwiPjwvcGF0aD4gPHBhdGggZD1cIk05Mi40NzksNDAuNDU3SDI2LjgyM2MtMS4xMDQsMC0yLDAuODk2LTIsMnYxMC43NjFjMCwxLjEwNCwwLjg5NiwyLDIsMmg2NS42NTZjMS4xMDQsMCwyLTAuODk2LDItMlY0Mi40NTcgQzk0LjQ3OSw0MS4zNTIsOTMuNTg0LDQwLjQ1Nyw5Mi40NzksNDAuNDU3elwiPjwvcGF0aD4gPHBhdGggZD1cIk05Mi40NzksNzUuMTA5SDI2LjgyM2MtMS4xMDQsMC0yLDAuODk2LTIsMnYxMC43NTljMCwxLjEwNCwwLjg5NiwyLDIsMmg2NS42NTZjMS4xMDQsMCwyLTAuODk2LDItMlY3Ny4xMDkgQzk0LjQ3OSw3Ni4wMDQsOTMuNTg0LDc1LjEwOSw5Mi40NzksNzUuMTA5elwiPjwvcGF0aD4gPHBhdGggZD1cIk0xLjg0MiwxMS4xMDRjMC40MjMsMC4wNTEsMC44NDgtMC4wOCwxLjE2Ny0wLjM2bDAuOTE0LTAuNzk5djEyLjk3M2MwLDAuODI4LDAuNjcyLDEuNSwxLjUsMS41aDEuNTQ2IGMwLjgyOCwwLDEuNS0wLjY3MiwxLjUtMS41VjUuNTY3YzAtMC44MjgtMC42NzItMS41LTEuNS0xLjVINS4zNzhjLTAuMzU2LDAtMC43MDEsMC4xMjctMC45NzMsMC4zNThMMC41MjcsNy43MjggYy0wLjU4OSwwLjUwMS0wLjcsMS4zNjktMC4yNTYsMi4wMDNsMC41MjIsMC43NDVDMS4wNCwxMC44MjUsMS40MiwxMS4wNTMsMS44NDIsMTEuMTA0elwiPjwvcGF0aD4gPHBhdGggZD1cIk0yLjU0NiwzNy41Yy0wLjY0NywwLjIzLTEuMDU2LDAuODcyLTAuOTksMS41NTZsMC4wOTYsMC45OTljMC4wNDgsMC40OTcsMC4zMzksMC45MzgsMC43NzgsMS4xNzYgYzAuNDM4LDAuMjM4LDAuOTY3LDAuMjQzLDEuNDA5LDAuMDExYzEuMTgtMC42MTUsMS45MjMtMC43NzUsMi45MjItMC41MzRjMC43MSwwLjE2MywxLjE4OCwwLjU4NiwxLjQzOCwxLjIyNSBjMC4zNzgsMS4xNDMsMC4zOTUsMi45NTctMi44NTQsNi44NzNsLTIuNTA2LDIuOTk2Yy0wLjU4OSwwLjY4OC0wLjk5LDEuMTE5LTEuMzAyLDEuNDA0Yy0wLjMxMiwwLjI4NC0wLjQ4OCwwLjY4OC0wLjQ4OCwxLjEwNyB2MS40NzVjMCwwLjgyOCwwLjY3MiwxLjUsMS41LDEuNWg5LjEzMmMwLjgyOCwwLDEuNS0wLjY3MiwxLjUtMS41VjU1LjAxYzAtMC44MjgtMC42NzItMS41LTEuNS0xLjVINi44OTYgYzAuNDU4LTAuNTE1LDEuMDM3LTEuMjExLDEuNzE2LTIuMDYzYzIuODAzLTMuNDY4LDUuMDYxLTYuNjQ1LDQuMjkyLTEwLjM3NmMtMC4zMDktMS42NzItMS4yNDctMi45NjYtMi43MzEtMy43NTIgYy0wLjgyNi0wLjQyNC0xLjg3OS0wLjYzOS0zLjEyNy0wLjYzOUM1LjYyOSwzNi42OCw0LjAzMSwzNi45NzEsMi41NDYsMzcuNXpcIj48L3BhdGg+IDxwYXRoIGQ9XCJNMTAuNDkxLDc5LjUxNmMwLjI1LTAuMTM1LDAuNDg3LTAuMjg5LDAuNzQtMC40ODNjMS43MTgtMS4zMTMsMS44MDEtMy4zMzUsMS43ODYtMy44ODUgYy0wLjAwMS0xLjg3OC0wLjcxMi0zLjMxOC0yLjE2Ni00LjQwMWMtMS4wMjYtMC43Ny0yLjUzNC0xLjE3Ny00LjM2MS0xLjE3N2MtMS4zNDcsMC0yLjc4NywwLjIxMi00LjA1NywwLjU5NiBjLTAuNjY4LDAuMjAyLTEuMTA3LDAuODM5LTEuMDYzLDEuNTMzbDAuMDU4LDAuODhjMC4wMzEsMC40NzEsMC4yOCwwLjg5NiwwLjY3MywxLjE1NWMwLjM5NCwwLjI1OSwwLjg4NiwwLjMxOSwxLjMyNywwLjE1OSBjMC44NjQtMC4zMDcsMS41NzEtMC40NSwyLjIyMy0wLjQ1YzAuMjI5LDAsMC40NTcsMC4wMTksMC43MjIsMC4wNjNjMC45NCwwLjEyNywxLjU2MywwLjU0OSwxLjksMS4yODMgYzAuMjM3LDAuNTIsMC4xOSwxLjQ0NS0wLjA4MywxLjg4NWMtMC42NTQsMS4wMTQtMi40MzgsMS4yMTctMy40NDMsMS4yNWMtMC44MSwwLjAyNC0xLjQ1MywwLjY4OC0xLjQ1MywxLjQ5OHYwLjY1OCBjMCwwLjgyOCwwLjY4NywxLjUsMS41MTUsMS41YzEuNTc1LDAsMi4zMTEsMC4zMDksMi41OTYsMC40ODVjMC43MzcsMC40NjUsMS4wNjUsMS4wNDMsMS4wNjYsMS45MTggYzAuMDI1LDAuOTEyLTAuMzQ4LDEuNjA2LTEuMTI5LDIuMTIxYy0xLjAxNCwwLjY1MS0yLjY0LDAuNjQ3LTQuNTA1LDAuMDMyYy0wLjQzOC0wLjE0Ni0wLjkxOC0wLjA4Mi0xLjMwMiwwLjE3NSBjLTAuMzg0LDAuMjU1LTAuNjI5LDAuNjcyLTAuNjY1LDEuMTMybC0wLjA2OCwwLjg3MkMwLjc1LDg4Ljk3MywxLjEzNSw4OS41ODgsMS43NSw4OS44M2MwLjMzLDAuMTMsMC41NTEsMC4xODMsMS4wMjIsMC4yODEgYzAuODU3LDAuMTk2LDEuODQsMC4zMDIsMi44NDIsMC4zMDJjMS40OTMsMCw0LjI0OC0wLjI0Nyw1Ljk0NC0xLjkxOWMxLjY1Ny0xLjY5LDEuOTc0LTQuMTEsMS41Ni01LjcyOSBDMTIuNjM2LDgwLjcwNCwxMS40NjEsNzkuOTQ2LDEwLjQ5MSw3OS41MTZ6XCI+PC9wYXRoPiA8L2c+IDwvZz4gPC9nPjwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJlZGl0b3JPcHRpb25zPy5vcHRpb25zPy5pbWFnZSA/PyB0cnVlXCIgYXJpYS1sYWJlbD1cIkluc2VydCBJbWFnZVwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlOyBkaXNwbGF5OiBpbmxpbmUtZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XCIgdGl0bGU9XCJJbnNlcnQgSW1hZ2VcIiA+XHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgYWNjZXB0PVwiLnBuZywuanBnLC5qcGVnXCIgIChjaGFuZ2UpPVwiaW5zZXJ0SW1hZ2VUb0VkaXRvcigkZXZlbnQpXCJcclxuICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAtNTAlOyB0b3A6IDA7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7IG9wYWNpdHk6IDA7IGN1cnNvcjogcG9pbnRlcjtcIlxyXG4gICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cclxuICAgICAgICA8c3ZnIHZpZXdCb3g9XCIyIDEgMjAgMjJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48ZyBpZD1cIlNWR1JlcG9fYmdDYXJyaWVyXCIgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9fdHJhY2VyQ2FycmllclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9faWNvbkNhcnJpZXJcIj4gPHBhdGggZD1cIk0xNC4yNjQ3IDE1LjkzNzdMMTIuNTQ3MyAxNC4yMzQ2QzExLjc1OCAxMy40NTE5IDExLjM2MzMgMTMuMDYwNSAxMC45MDg5IDEyLjkxMzdDMTAuNTA5MiAxMi43ODQ1IDEwLjA3OSAxMi43ODQ1IDkuNjc5MjIgMTIuOTEzN0M5LjIyNDg1IDEzLjA2MDUgOC44MzAxNyAxMy40NTE5IDguMDQwODIgMTQuMjM0Nkw0LjA0MTkzIDE4LjI2MjJNMTQuMjY0NyAxNS45Mzc3TDE0LjYwNiAxNS41OTkxQzE1LjQxMiAxNC43OTk5IDE1LjgxNDkgMTQuNDAwMyAxNi4yNzczIDE0LjI1NDVDMTYuNjgzOSAxNC4xMjYyIDE3LjEyMDggMTQuMTMxMiAxNy41MjQ0IDE0LjI2ODhDMTcuOTgzMiAxNC40MjUzIDE4LjM3NjkgMTQuODM0IDE5LjE2NDIgMTUuNjUxNUwyMCAxNi41MDAxTTE0LjI2NDcgMTUuOTM3N0wxOC4yMiAxOS45NjI4TTE4LjIyIDE5Ljk2MjhDMTcuODcwMyAyMCAxNy40MjEzIDIwIDE2LjggMjBINy4yQzYuMDc5ODkgMjAgNS41MTk4NCAyMCA1LjA5MjAyIDE5Ljc4MkM0LjcxNTcgMTkuNTkwMyA0LjQwOTczIDE5LjI4NDMgNC4yMTc5OSAxOC45MDhDNC4xMjU4MyAxOC43MjcxIDQuMDcyNjQgMTguNTIyNiA0LjA0MTkzIDE4LjI2MjJNMTguMjIgMTkuOTYyOEMxOC41MDA3IDE5LjkzMjkgMTguNzE3NSAxOS44NzkxIDE4LjkwOCAxOS43ODJDMTkuMjg0MyAxOS41OTAzIDE5LjU5MDMgMTkuMjg0MyAxOS43ODIgMTguOTA4QzIwIDE4LjQ4MDIgMjAgMTcuOTIwMSAyMCAxNi44VjEzTTExIDRINy4yQzYuMDc5ODkgNCA1LjUxOTg0IDQgNS4wOTIwMiA0LjIxNzk5QzQuNzE1NyA0LjQwOTczIDQuNDA5NzMgNC43MTU2OSA0LjIxNzk5IDUuMDkyMDJDNCA1LjUxOTg0IDQgNi4wNzk5IDQgNy4yVjE2LjhDNCAxNy40NDY2IDQgMTcuOTA2NiA0LjA0MTkzIDE4LjI2MjJNMTggOVY2TTE4IDZWM00xOCA2SDIxTTE4IDZIMTVcIiBbYXR0ci5zdHJva2VdPVwiaWNvbkNvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcGF0aD4gPC9nPjwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJlZGl0b3JPcHRpb25zPy5vcHRpb25zPy50YWJsZSA/PyB0cnVlXCIgKGNsaWNrKT1cIm9wZW5UYWJsZURpYWxvZygkZXZlbnQpXCIgdHlwZT1cImJ1dHRvblwiICB0aXRsZT1cIlRhYmxlXCJcclxuICAgICAgICBhcmlhLWxhYmVsPVwiQ2hvb3NlIHRhYmxlIHJvd3MgYW5kIGNvbHVtbnNcIj5cclxuICAgICAgICA8c3ZnIHdpZHRoPVwiMjZweFwiIGhlaWdodD1cIjI2cHhcIiB2aWV3Qm94PVwiMiAxMiAyMCAzXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGcgaWQ9XCJTVkdSZXBvX2JnQ2FycmllclwiIHN0cm9rZS13aWR0aD1cIjBcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+IDxwYXRoIGQ9XCJNMyA5SDIxTTMgMTVIMjFNOSA5TDkgMjBNMTUgOUwxNSAyME02LjIgMjBIMTcuOEMxOC45MjAxIDIwIDE5LjQ4MDIgMjAgMTkuOTA4IDE5Ljc4MkMyMC4yODQzIDE5LjU5MDMgMjAuNTkwMyAxOS4yODQzIDIwLjc4MiAxOC45MDhDMjEgMTguNDgwMiAyMSAxNy45MjAxIDIxIDE2LjhWNy4yQzIxIDYuMDc5OSAyMSA1LjUxOTg0IDIwLjc4MiA1LjA5MjAyQzIwLjU5MDMgNC43MTU2OSAyMC4yODQzIDQuNDA5NzMgMTkuOTA4IDQuMjE3OTlDMTkuNDgwMiA0IDE4LjkyMDEgNCAxNy44IDRINi4yQzUuMDc5OSA0IDQuNTE5ODQgNCA0LjA5MjAyIDQuMjE3OTlDMy43MTU2OSA0LjQwOTczIDMuNDA5NzMgNC43MTU2OSAzLjIxNzk5IDUuMDkyMDJDMyA1LjUxOTg0IDMgNi4wNzk4OSAzIDcuMlYxNi44QzMgMTcuOTIwMSAzIDE4LjQ4MDIgMy4yMTc5OSAxOC45MDhDMy40MDk3MyAxOS4yODQzIDMuNzE1NjkgMTkuNTkwMyA0LjA5MjAyIDE5Ljc4MkM0LjUxOTg0IDIwIDUuMDc5ODkgMjAgNi4yIDIwWlwiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPiA8L2c+PC9zdmc+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImVkaXRvck9wdGlvbnM/Lm9wdGlvbnM/LnRhYmxlSGVhZGVyID8/IHRydWVcIiBjbGFzcz1cIm1iLTFcIiAoY2xpY2spPVwibWFrZUZpcnN0Um93SGVhZGVyKClcIiB0eXBlPVwiYnV0dG9uXCIgIGFyaWEtbGFiZWw9XCJNYWtlIEhlYWRlclwiIHRpdGxlPVwiVGFibGUgSGVhZGVyXCIgPlxyXG4gICAgICAgIDxzdmcgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIiB2aWV3Qm94PVwiMCAwIDE5MjAgMTkyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48ZyBpZD1cIlNWR1JlcG9fYmdDYXJyaWVyXCIgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9fdHJhY2VyQ2FycmllclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9faWNvbkNhcnJpZXJcIj4gPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTIxMy4zMzMgMEM5NS41MTI2IDAgMCA5NS41MTI2IDAgMjEzLjMzM1YxNzA2LjY3QzAgMTgyNC40OSA5NS41MTI2IDE5MjAgMjEzLjMzMyAxOTIwSDE3MDYuNjdDMTgyNC40OSAxOTIwIDE5MjAgMTgyNC40OSAxOTIwIDE3MDYuNjdWMjEzLjMzM0MxOTIwIDk1LjUxMjYgMTgyNC40OSAwIDE3MDYuNjcgMEgyMTMuMzMzWk0yNjYuNjY3IDc0Ni42NjdDMjM3LjIxMSA3NDYuNjY3IDIxMy4zMzMgNzIyLjc4OCAyMTMuMzMzIDY5My4zMzNWMzczLjMzM0MyMTMuMzMzIDM0My44NzggMjM3LjIxMSAzMjAgMjY2LjY2NyAzMjBIMTY1My4zM0MxNjgyLjc5IDMyMCAxNzA2LjY3IDM0My44NzggMTcwNi42NyAzNzMuMzMzVjY5My4zMzNDMTcwNi42NyA3MjIuNzg4IDE2ODIuNzkgNzQ2LjY2NyAxNjUzLjMzIDc0Ni42NjdIMjY2LjY2N1pcIj48L3BhdGg+IDwvZz48L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwiZWRpdG9yT3B0aW9ucz8ub3B0aW9ucz8uc2lnbmF0dXJlID8/IHRydWVcIiAoY2xpY2spPVwib3BlblNpZ25hdHVyZURpYWxvZygpXCIgdHlwZT1cImJ1dHRvblwiICB0aXRsZT1cIlNpZ25hdHVyZVwiXHJcbiAgICAgICAgYXJpYS1sYWJlbD1cIkNob29zZSB0YWJsZSByb3dzIGFuZCBjb2x1bW5zXCI+XHJcbiAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDI4IDI4XCIgdmVyc2lvbj1cIjEuMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIiBmaWxsPVwiIzAwMDAwMFwiPjxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPiA8IS0tIFVwbG9hZGVkIHRvOiBTVkcgUmVwbywgd3d3LnN2Z3JlcG8uY29tLCBHZW5lcmF0b3I6IFNWRyBSZXBvIE1peGVyIFRvb2xzIC0tPiA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4gPGcgaWQ9XCLwn5SNLVByb2R1Y3QtSWNvbnNcIiBzdHJva2U9XCJub25lXCIgc3Ryb2tlLXdpZHRoPVwiMVwiIGZpbGw9XCJub25lXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPiA8ZyBpZD1cImljX2ZsdWVudF9zaWduYXR1cmVfMjhfcmVndWxhclwiIGZpbGw9XCIjMjEyMTIxXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiPiA8cGF0aCBkPVwiTTE2LjQ3OTg5NTYsMjEuMDAxOTU3OCBMMTYuNzUsMjEgQzE3Ljk3MDIzNTIsMjEgMTguNjExMjQ0MSwyMS41MDU4MDMyIDE5LjQwMjA2MjcsMjIuNzA0MTY2MiBMMTkuNzk1ODI3OCwyMy4zMTI0NDA5IEMyMC4xMDI4MjY2LDIzLjc2NjkzOCAyMC4yOTQ0Mzc0LDIzLjk1NzMyNDcgMjAuNTM1Nzg0LDI0LjA1Njc5MjkgQzIwLjk2ODQ4NzMsMjQuMjM1MTI2NiAyMS4zMjcxMDA4LDI0LjE0NzQ0NDYgMjIuNjQ0MDc4MiwyMy41MTMzMjEzIEwyMy4wNDczMjczLDIzLjMxNzAzMTkgQzIzLjg3MDk5ODIsMjIuOTEyNjcxMSAyNC40MzMwMjg2LDIyLjY4MTE2MDYgMjUuMDY4MDk4MywyMi41MjIzOTMxIEMyNS40Njk5NDQ1LDIyLjQyMTkzMTYgMjUuODc3MTQ1MywyMi42NjYyNTIxIDI1Ljk3NzYwNjksMjMuMDY4MDk4MyBDMjYuMDc4MDY4NCwyMy40Njk5NDQ1IDI1LjgzMzc0NzksMjMuODc3MTQ1MyAyNS40MzE5MDE3LDIzLjk3NzYwNjkgQzI1LjAzNzE2MDYsMjQuMDc2MjkyMiAyNC42NTg5NDY1LDI0LjIxNzg4MTkgMjQuMTY0MTM2NCwyNC40NDU4OTk3IEwyMy4wMDU0ODk5LDI1LjAwMzI2NzMgQzIxLjQzNzYzMDIsMjUuNzQzNjk0NCAyMC45MDU5MDA5LDI1LjgzMTczMjEgMTkuOTY0MjE2LDI1LjQ0MzYyNzUgQzE5LjMzOTEyMzcsMjUuMTg2MDAyOCAxOC45ODM2NzY1LDI0LjgxMzI5OCAxOC40NjM1NjM5LDI0LjAxODAyMjcgTDE4LjI2ODg5MDMsMjMuNzE0MDg0OSBDMTcuNzA3MTExMiwyMi44Mjg4NzMxIDE3LjQwNTc3OTQsMjIuNTM4NDUzOCAxNi44Njg4NDQ0LDIyLjUwMzY2NTUgTDE2Ljc1LDIyLjUgQzE2LjIwMTczMDYsMjIuNSAxNi4wOTMzMTA0LDIyLjU2ODQ1NzIgMTQuMDA5MjgxLDI0LjExNTAyNDEgQzEyLjI2NzAzOTUsMjUuNDA3OTQ4OCAxMC45MzgzMzU5LDI2LjAyNTQ5ODQgOS4yNDg2NDI0MywyNi4wMjU0OTg0IEM3LjE4ODcyODY5LDI2LjAyNTQ5ODQgNS4yNDc3MzM2NywyNS42NDcwNjcgMy40MzE0NTg3NSwyNC44OTA1MzYzIEw2LjMxMzc3ODAzLDI0LjIyNDE3ODQgQzcuMjU3Njk0MDQsMjQuNDI1MDc2MiA4LjIzNTY3MTQzLDI0LjUyNTQ5ODQgOS4yNDg2NDI0MywyNC41MjU0OTg0IEMxMC41MzkzMDM1LDI0LjUyNTQ5ODQgMTEuNjA5MTI5LDI0LjAyODI2OTEgMTMuMTE1Mzc5NiwyMi45MTA0NzQzIEwxNC4yNzU0NDQsMjIuMDU0NTQ4OCBDMTUuNTQ2ODA2NSwyMS4xMzA0OTAzIDE1LjgyOTYxMTMsMjEuMDE2MDMyIDE2LjQ3OTg5NTYsMjEuMDAxOTU3OCBMMTYuNDc5ODk1NiwyMS4wMDE5NTc4IFogTTIyLjc3NzA5ODgsMy4yMjIwODk3OSBDMjQuNDUwNzIyMyw0Ljg5NTcxMzMgMjQuNDUwNzU2Niw3LjYwOTE2MDc5IDIyLjc3NzE4ODksOS4yODI4MTMyNCBMMjEuNzQxNjU1LDEwLjMxODQ0NzUgQzIyLjg5MzYyNjMsMTEuNzE5OTY1NyAyMi44NTIxNTI2LDEzLjIwNTM3NzQgMjEuNzgxMTAzMSwxNC4yNzk1NTYgTDE4Ljc4MDA3MjcsMTcuMjgwNTg3NCBMMTguNzgwMDcyNywxNy4yODA1ODc0IEMxOC40ODcwMzc0LDE3LjU3MzMzODQgMTguMDEyMTYzNywxNy41NzMxMDggMTcuNzE5NDEyNiwxNy4yODAwNzI3IEMxNy40MjY2NjE2LDE2Ljk4NzAzNzQgMTcuNDI2ODkyLDE2LjUxMjE2MzcgMTcuNzE5OTI3MywxNi4yMTk0MTI2IEwyMC43MTg4OTY5LDEzLjIyMDQ0NCBDMjEuMjAzOTU3MSwxMi43MzM5NjY4IDIxLjI2MDAwMjEsMTIuMTI5OTk4MyAyMC42Nzg5NDEsMTEuMzgxODk0NSBMMTAuMDg0NTQzNywyMS45NzYxMDExIEM5Ljc4NjM1NDU5LDIyLjI3NDMwNTMgOS40MTAzNjExNywyMi40ODI3MDUgOC45OTk0NDcwMywyMi41Nzc1MzEzIEwyLjkxODY0NDYzLDIzLjk4MDc5MzQgQzIuMzc4NTkwNjEsMjQuMTA1NDIxMiAxLjg5NDU3ODc1LDIzLjYyMTQwOTQgMi4wMTkyMDY2LDIzLjA4MTM1NTQgTDMuNDIyNDc3OTQsMTcuMDAwNTEyOSBDMy41MTcyOTU1NywxNi41ODk2MzY1IDMuNzI1NjY1ODksMTYuMjEzNjczNiA0LjAyMzgyNzYsMTUuOTE1NDk2OCBMMTYuNzE2NTAxOSwzLjIyMjE3OTkyIEMxOC4zOTAwNDE1LDEuNTQ4NTU1NTUgMjEuMTAzNDM0OSwxLjU0ODUxMDU5IDIyLjc3NzA5ODgsMy4yMjIwODk3OSBaIE0xNy43NzcxODg5LDQuMjgyODEzMjQgTDUuMDg0NTE0NjIsMTYuOTc2MTMwMiBDNC45ODUxMjczOCwxNy4wNzU1MjI0IDQuOTE1NjcwNjEsMTcuMjAwODQzNCA0Ljg4NDA2NDczLDE3LjMzNzgwMjIgTDMuNzUwNjI0OCwyMi4yNDkzNzUyIEw4LjY2MjE1Nzc3LDIxLjExNTk0NDUgQzguNzk5MTI5MTUsMjEuMDg0MzM1NyA4LjkyNDQ2MDI5LDIxLjAxNDg2OTIgOS4wMjM4NTY2NSwyMC45MTU0Njc4IEwyMS43MTY1MDE5LDguMjIyMTc5OTIgQzIyLjgwNDMwNjMsNy4xMzQzMjA0OSAyMi44MDQyODYyLDUuMzcwNjA0NzggMjEuNzE2NDU4OCw0LjI4Mjc3MDEgQzIwLjYyODU5MTQsMy4xOTQ5NjUwNyAxOC44NjQ5NTA2LDMuMTk0OTk2NTMgMTcuNzc3MTg4OSw0LjI4MjgxMzI0IFpcIiBpZD1cIvCfjqgtQ29sb3JcIj4gPC9wYXRoPiA8L2c+IDwvZz4gPC9nPjwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJlZGl0b3JcIiBpZD1cImVkaXRvclwiIGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIiAjZWRpdG9yIChpbnB1dCk9XCJzdWJtaXRDb250ZW50KClcIiAoYmx1cik9XCJvbkJsdXIoKVwiIChrZXl1cCk9XCJvbkVkaXRvcktleVVwKCRldmVudClcIiAobW91c2V1cCk9XCJ1cGRhdGVDdXJyZW50Rm9ybWF0KClcIlxyXG4gICAgICAoZHJvcCk9XCJkcm9wKCRldmVudClcIiAoZHJhZ292ZXIpPVwiYWxsb3dEcm9wKCRldmVudClcIj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuXHJcbiAgPCEtLSA8bmctdGVtcGxhdGUgI3RhYmxlRGlhbG9nIGxldC1kaWFsb2dSZWY9XCJkaWFsb2dSZWZcIj5cclxuICAgIDxoMiBtYXQtZGlhbG9nLXRpdGxlPkNob29zZSBUYWJsZSBTaXplPC9oMj5cclxuICAgIDxtYXQtZGlhbG9nLWNvbnRlbnQ+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJncmlkLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNlbGwgb2YgZ3JpZDsgbGV0IGkgPSBpbmRleFwiIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAnZ3JpZC1pdGVtJzogdHJ1ZSxcclxuICAgICAgICAnaGlnaGxpZ2h0ZWQnOiBpICUgNyA8IGNvbHMgJiYgTWF0aC5mbG9vcihpIC8gNykgPCByb3dzXHJcbiAgICAgIH1cIiAobW91c2VlbnRlcik9XCJ1cGRhdGVQcmV2aWV3KGkgJSA3ICsgMSwgTWF0aC5mbG9vcihpIC8gNykgKyAxKVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwidXBkYXRlU2VsZWN0aW9uKGkgJSA3ICsgMSwgTWF0aC5mbG9vcihpIC8gNykgKyAxLCBkaWFsb2dSZWYpXCI+PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8cD57eyByb3dzIH19IHgge3sgY29scyB9fSA8L3A+XHJcbiAgICA8L21hdC1kaWFsb2ctY29udGVudD5cclxuICA8L25nLXRlbXBsYXRlPiAtLT5cclxuXHJcbiAgPCEtLSBUYWJsZSBEaWFsb2cgLS0+XHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJtb2RhbCBmYWRlXCJcclxuICAgIGlkPVwidGFibGVEaWFsb2dcIlxyXG4gICAgdGFiaW5kZXg9XCItMVwiXHJcbiAgICBkYXRhLWJzLWJhY2tkcm9wPVwiZmFsc2VcIlxyXG4gID5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2cgbW9kYWwtc20gcG9zaXRpb24tYWJzb2x1dGVcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICA8aDUgY2xhc3M9XCJtLTBcIiBzdHlsZT1cImZvbnQtc2l6ZTogMThweCAhaW1wb3J0YW50OyBmb250LXdlaWdodDogNTAwO1wiID5DaG9vc2UgVGFibGUgU2l6ZTwvaDU+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZC1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjZWxsIG9mIGdyaWQ7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZ3JpZC1pdGVtXCJcclxuICAgICAgICAgICAgICBbY2xhc3MuaGlnaGxpZ2h0ZWRdPVwiaSAlIDcgPCBjb2xzICYmIE1hdGguZmxvb3IoaSAvIDcpIDwgcm93c1wiXHJcbiAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwidXBkYXRlUHJldmlldyhpICUgNyArIDEsIE1hdGguZmxvb3IoaSAvIDcpICsgMSlcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJ1cGRhdGVTZWxlY3Rpb24oaSAlIDcgKyAxLCBNYXRoLmZsb29yKGkgLyA3KSArIDEpXCJcclxuICAgICAgICAgICAgPjwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8cCBjbGFzcz1cInRleHQtY2VudGVyIG10LTJcIj57eyByb3dzIH19IHgge3sgY29scyB9fTwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcblxyXG4gIDwhLS0gU2lnbmF0dXJlIERpYWxvZyAtLT5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwgZmFkZVwiIGlkPVwic2lnbmF0dXJlRGlhbG9nXCIgdGFiaW5kZXg9XCItMVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC1sZyBtb2RhbC1kaWFsb2ctY2VudGVyZWRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgPGg1IGNsYXNzPVwibS0wXCIgc3R5bGU9XCJmb250LXNpemU6IDE4cHggIWltcG9ydGFudDsgZm9udC13ZWlnaHQ6IDUwMDtcIiA+RHJhdyBhIFNpZ25hdHVyZTwvaDU+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICA8c2lnbmF0dXJlLXBhZFxyXG4gICAgICAgICAgICAjc2lnUGFkXHJcbiAgICAgICAgICAgIFtvcHRpb25zXT1cInNpZ25hdHVyZVBhZE9wdGlvbnNcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInNpZ25cIj5cclxuICAgICAgICAgIDwvc2lnbmF0dXJlLXBhZD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInAtMyBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIFwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzaWduQ2xvc2VcIiAoY2xpY2spPVwiY2xvc2VTaWduRGlhbG9nKClcIj5cclxuICAgICAgICAgICAgQ2xvc2VcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzaWduU3VibWl0XCIgKGNsaWNrKT1cInN1Ym1pdFNpZ25EaWFsb2coKVwiPlxyXG4gICAgICAgICAgICBTdWJtaXRcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcblxyXG5cclxuICA8IS0tIDxuZy10ZW1wbGF0ZSAjc2lnbmF0dXJlRGlhbG9nIGxldC1kaWFsb2dSZWY9XCJkaWFsb2dSZWZcIj5cclxuICAgIDxoMiBtYXQtZGlhbG9nLXRpdGxlPkRyYXcgYSBTaWduYXR1cmU8L2gyPlxyXG4gICAgPHNpZ25hdHVyZS1wYWQgI3NpZ1BhZCBbb3B0aW9uc109XCJzaWduYXR1cmVQYWRPcHRpb25zXCIgY2xhc3M9XCJzaWduXCIgPjwvc2lnbmF0dXJlLXBhZD5cclxuICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25cIiA+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibm9ybWFsXCIgKGNsaWNrKT1cImNsb3NlU2lnbkRpYWxvZyhkaWFsb2dSZWYpXCIgPiBDbG9zZSA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzdWJtaXRcIiAoY2xpY2spPVwic3VibWl0U2lnbkRpYWxvZyhkaWFsb2dSZWYpXCIgPiBTdWJtaXQgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIFxyXG4gIDwvbmctdGVtcGxhdGU+IC0tPlxyXG5cclxuXHJcbjwvZGl2PlxyXG4iXX0=
961
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFwaWQtdGV4dC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvcmFwaWQtdGV4dC1lZGl0b3Ivc3JjL2xpYi9yYXBpZC10ZXh0LWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9yYXBpZC10ZXh0LWVkaXRvci9zcmMvbGliL3JhcGlkLXRleHQtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFFLE1BQU0sRUFBVSxTQUFTLEVBQTBCLFVBQVUsRUFBRSxZQUFZLEVBQXdELE1BQU0sZUFBZSxDQUFDO0FBRWhNLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUd6RSxPQUFPLEtBQUssU0FBUyxNQUFNLFdBQVcsQ0FBQzs7Ozs7O0FBb0N2QyxNQUFNLE9BQU8sd0JBQXdCO0lBbURuQyxZQUFvQixNQUFpQixFQUMzQixFQUFjLEVBQ2QsUUFBbUIsRUFDbkIsS0FBaUIsRUFDakIsT0FBMEI7UUFKaEIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUMzQixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ2QsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQ2pCLFlBQU8sR0FBUCxPQUFPLENBQW1CO1FBckQ1Qix5QkFBb0IsR0FBb0I7WUFDOUMsT0FBTyxFQUFFO2dCQUNQLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixRQUFRLEVBQUUsSUFBSTtnQkFDZCxJQUFJLEVBQUUsSUFBSTtnQkFDVixNQUFNLEVBQUUsSUFBSTtnQkFDWixTQUFTLEVBQUUsSUFBSTtnQkFDZixhQUFhLEVBQUUsSUFBSTtnQkFDbkIsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixP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QkFBaUI7WUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztZQUN2RCxLQUFLLEVBQUUsSUFBSTtTQUNaO0tBQ0YsMGJDdENILDB4eEJBNExBOzRGRG5KYSx3QkFBd0I7a0JBYnBDLFNBQVM7K0JBQ0UsbUJBQW1CLGFBR2xCO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHlCQUF5QixDQUFDOzRCQUN2RCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjswTUEyQlEsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ2tCLGFBQWE7c0JBQXBDLEtBQUs7dUJBQUMsZUFBZTtnQkFDWixhQUFhO3NCQUF0QixNQUFNO2dCQUNnQyxNQUFNO3NCQUE1QyxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ1gsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhO2dCQUNNLGVBQWU7c0JBQTVDLFNBQVM7dUJBQUMsaUJBQWlCO2dCQUNQLFlBQVk7c0JBQWhDLFNBQVM7dUJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE91dHB1dCwgT25Jbml0LCBWaWV3Q2hpbGQsIE9uQ2hhbmdlcywgVGVtcGxhdGVSZWYsIGZvcndhcmRSZWYsIEV2ZW50RW1pdHRlciwgQWZ0ZXJWaWV3SW5pdCwgU2ltcGxlQ2hhbmdlLCBTaW1wbGVDaGFuZ2VzLCBSZW5kZXJlcjJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNpZ25hdHVyZVBhZCB9IGZyb20gJ2FuZ3VsYXIyLXNpZ25hdHVyZXBhZCc7XHJcbmltcG9ydCAqIGFzIGJvb3RzdHJhcCBmcm9tICdib290c3RyYXAnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSREVkaXRvck9wdGlvbnMge1xyXG4gIG9wdGlvbnM6IHtcclxuICAgIHRleHRGb3JtYXQ/OiBib29sZWFuLFxyXG4gICAgZm9udFNpemU/OiBib29sZWFuLFxyXG4gICAgYm9sZDogYm9vbGVhbixcclxuICAgIGl0YWxpYzogYm9vbGVhbixcclxuICAgIHVuZGVybGluZTogYm9vbGVhbixcclxuICAgIHN0cmlrZXRocm91Z2g6IGJvb2xlYW4sXHJcbiAgICBhbGlnbkxlZnQ6IGJvb2xlYW4sXHJcbiAgICBhbGlnblJpZ2h0OiBib29sZWFuLFxyXG4gICAgYWxpZ25DZW50ZXI6IGJvb2xlYW4sXHJcbiAgICBqdXN0aWZ5OiBib29sZWFuLFxyXG4gICAgYnVsbGV0TGlzdDogYm9vbGVhbixcclxuICAgIG51bWJlcmVkTGlzdDogYm9vbGVhbixcclxuICAgIGltYWdlPzogYm9vbGVhbixcclxuICAgIHRhYmxlPzogYm9vbGVhbiwgXHJcbiAgICB0YWJsZUhlYWRlcj86IGJvb2xlYW4sXHJcbiAgICBzaWduYXR1cmU/OiBib29sZWFuXHJcbiAgfVxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3JhcGlkLXRleHQtZWRpdG9yJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmFwaWQtdGV4dC1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3JhcGlkLXRleHQtZWRpdG9yLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBSYXBpZFRleHRFZGl0b3JDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgfVxyXG4gIF1cclxuICBcclxufSlcclxuZXhwb3J0IGNsYXNzIFJhcGlkVGV4dEVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gIHByaXZhdGUgZGVmYXVsdEVkaXRvck9wdGlvbnM6IFJERWRpdG9yT3B0aW9ucyA9IHtcclxuICAgIG9wdGlvbnM6IHtcclxuICAgICAgdGV4dEZvcm1hdDogdHJ1ZSxcclxuICAgICAgZm9udFNpemU6IHRydWUsXHJcbiAgICAgIGJvbGQ6IHRydWUsXHJcbiAgICAgIGl0YWxpYzogdHJ1ZSxcclxuICAgICAgdW5kZXJsaW5lOiB0cnVlLFxyXG4gICAgICBzdHJpa2V0aHJvdWdoOiB0cnVlLFxyXG4gICAgICBhbGlnbkxlZnQ6IHRydWUsXHJcbiAgICAgIGFsaWduUmlnaHQ6IHRydWUsXHJcbiAgICAgIGFsaWduQ2VudGVyOiB0cnVlLFxyXG4gICAgICBqdXN0aWZ5OiB0cnVlLFxyXG4gICAgICBidWxsZXRMaXN0OiB0cnVlLFxyXG4gICAgICBudW1iZXJlZExpc3Q6IHRydWUsXHJcbiAgICAgIGltYWdlOiB0cnVlLFxyXG4gICAgICB0YWJsZTogdHJ1ZSxcclxuICAgICAgdGFibGVIZWFkZXI6IHRydWUsXHJcbiAgICAgIHNpZ25hdHVyZTogdHJ1ZVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG5cclxuICBASW5wdXQoKSBjb250ZW50Q2FwdHVyZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGhlaWdodDogc3RyaW5nID0gXCJhdXRvXCI7XHJcbiAgQElucHV0KCkgd2lkdGg6IHN0cmluZyA9IFwiYXV0b1wiO1xyXG4gIEBJbnB1dCgpIGljb25Db2xvcjogc3RyaW5nID0gJyMzMzMzMzMnXHJcbiAgQElucHV0KCdlZGl0b3JPcHRpb25zJykgZWRpdG9yT3B0aW9ucyE6IFJERWRpdG9yT3B0aW9ucztcclxuICBAT3V0cHV0KCkgY29udGVudENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBWaWV3Q2hpbGQoJ2VkaXRvcicsIHsgc3RhdGljOiB0cnVlIH0pIGVkaXRvciE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgndGFibGVEaWFsb2cnKSB0YWJsZURpYWxvZyE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnc2lnbmF0dXJlRGlhbG9nJykgc2lnbmF0dXJlRGlhbG9nITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCdzaWdQYWQnKSBzaWduYXR1cmVQYWQhOiBTaWduYXR1cmVQYWQ7XHJcblxyXG4gIHByaXZhdGUgZWRpdG9yQ29udGVudDogc3RyaW5nID0gJyc7XHJcbiAgcm93czogbnVtYmVyID0gMTtcclxuICBjb2xzOiBudW1iZXIgPSAxO1xyXG4gIGdyaWQgPSBBcnJheSg0OSkuZmlsbCgwKTtcclxuICBNYXRoID0gTWF0aDtcclxuICB1cGxvYWRlZEltYWdlczogc3RyaW5nW10gPSBbXTtcclxuICBzZWxlY3RlZFJvd3MhOiBhbnk7XHJcbiAgc2VsZWN0ZWRDb2xzITogYW55O1xyXG5cclxuICBcclxuICBzaWduYXR1cmVQYWRPcHRpb25zID0ge1xyXG4gICAgbWluV2lkdGg6IDEsXHJcbiAgICBjYW52YXNXaWR0aDogNDAwLFxyXG4gICAgY2FudmFzSGVpZ2h0OiAyMDBcclxuICB9O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLCBcclxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsIFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLCBcclxuICAgIHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIF9jaGFuZ2U6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgKSB7XHJcbiAgICBjb25zb2xlLmxvZygnQnVpbGQgLTEnKVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb250ZW50Q2FwdHVyZSkge1xyXG4gICAgICBjb25zb2xlLmxvZygnQ29udGVudCBjYXB0dXJlIGlzIGVuYWJsZWQuJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmxvZygnQ29udGVudCBjYXB0dXJlIGlzIGRpc2FibGVkLicpO1xyXG4gICAgfVxyXG4gICAgaWYoIXRoaXMuZWRpdG9yT3B0aW9ucyl7XHJcbiAgICAgIHRoaXMuZWRpdG9yT3B0aW9ucyA9IHRoaXMuZGVmYXVsdEVkaXRvck9wdGlvbnM7XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLmluaXRpYWxpemVFZGl0b3JDb250ZW50KCcnKTtcclxuICAgIC8vIHRoaXMuZW5zdXJlUGFyYWdyYXBoQW5kRm9jdXMoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydoZWlnaHQnXSB8fCBjaGFuZ2VzWyd3aWR0aCddKSB7XHJcbiAgICAgIHRoaXMuYXBwbHlEaW1lbnNpb25zKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5RGltZW5zaW9ucygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRpbWVuc2lvbkVsZW1lbnQgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmRpbWVuc2lvbicpO1xyXG4gICAgaWYgKHRoaXMud2lkdGgpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShkaW1lbnNpb25FbGVtZW50LCAnd2lkdGgnLCB0aGlzLndpZHRoKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHJpY2hUZXh0RWRpdG9yRWxlbWVudCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcucmljaC10ZXh0LWVkaXRvcicpO1xyXG4gICAgaWYodGhpcy5oZWlnaHQpe1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHJpY2hUZXh0RWRpdG9yRWxlbWVudCwgJ2hlaWdodCcsICdhdXRvJyk7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShyaWNoVGV4dEVkaXRvckVsZW1lbnQsICdoZWlnaHQnLCAnMTAwJScpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaGVpZ2h0KSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZGltZW5zaW9uRWxlbWVudCwgJ2hlaWdodCcsICdhdXRvJyk7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShkaW1lbnNpb25FbGVtZW50LCAnaGVpZ2h0JywgJzEwMCUnKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGVkaXRvckVsZW1lbnQgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmVkaXRvcicpO1xyXG4gICAgaWYodGhpcy5oZWlnaHQpe1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGVkaXRvckVsZW1lbnQsICdoZWlnaHQnLCB0aGlzLmhlaWdodCk7XHJcbiAgICB9ICAgIFxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG5cclxuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yJyk7XHJcbiAgICBcclxuICAgIGlmIChlZGl0b3IgJiYgKGVkaXRvci5pbm5lckhUTUwudHJpbSgpID09PSBcIlwiIHx8IGVkaXRvci5pbm5lckhUTUwudHJpbSgpID09PSBcIjxicj5cIikpIHtcclxuICAgICAgLy8gZWRpdG9yLmZvY3VzKCk7XHJcbiAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgICAgcmFuZ2Uuc2V0U3RhcnQoZWRpdG9yLCAwKTtcclxuICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgaWYgKHNlbGVjdGlvbikge1xyXG4gICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xyXG4gICAgICB9XHJcbiAgICAgIGVkaXRvci5pbm5lckhUTUwgPSAnPHAgc3R5bGU9XCJmb250LXNpemU6MTRweDsgZm9udC13ZWlnaHQ6bm9ybWFsO1wiPlxcdTIwMEI8L3A+J1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0VkaXRvciBlbGVtZW50IG5vdCBmb3VuZC4nKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHRoaXMudXBkYXRlQ3VycmVudEZvcm1hdCgpKTtcclxuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50LCB7XHJcbiAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxyXG4gICAgICAgIGNoYXJhY3RlckRhdGE6IHRydWUsXHJcbiAgICAgICAgc3VidHJlZTogdHJ1ZVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudC5ibHVyKCk7XHJcblxyXG4gICAgLy8gdGhpcy5pbml0aWFsaXplRWRpdG9yQ29udGVudCgnJyk7XHJcbiAgICAvLyB0aGlzLmVuc3VyZVBhcmFncmFwaEFuZEZvY3VzKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgZW5zdXJlUGFyYWdyYXBoQW5kRm9jdXMoKSB7XHJcblxyXG4gICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xyXG4gICAgaWYgKCFlZGl0b3IpIHJldHVybjtcclxuXHJcbiAgICAvLyBJZiBlZGl0b3IgaXMgZW1wdHkgb3IgZG9lc24ndCBoYXZlIGEgPHA+IGFzIHRoZSBsYXN0IGVsZW1lbnRcclxuICAgIGlmICghZWRpdG9yLmlubmVySFRNTC50cmltKCkpIHtcclxuICAgICAgZWRpdG9yLmlubmVySFRNTCA9ICc8cCBzdHlsZT1cImZvbnQtc2l6ZToxNHB4OyBmb250LXdlaWdodDpub3JtYWw7XCI+XFx1MjAwQjwvcD4nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZmlyc3RDaGlsZCA9IGVkaXRvci5maXJzdENoaWxkIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICBpZiAoIWZpcnN0Q2hpbGQgfHwgZmlyc3RDaGlsZC50YWdOYW1lICE9PSAnUCcpIHtcclxuICAgICAgICBjb25zdCBjb250ZW50ID0gZWRpdG9yLmlubmVySFRNTDtcclxuICAgICAgICBlZGl0b3IuaW5uZXJIVE1MID0gYDxwIHN0eWxlPVwiZm9udC1zaXplOjE0cHg7IGZvbnQtd2VpZ2h0Om5vcm1hbDtcIj4ke2NvbnRlbnR9PC9wPmA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwID0gZWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJ3AnKTtcclxuICAgIGlmIChwKSB7XHJcbiAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKHApO1xyXG4gICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTsgXHJcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgaWYgKHNlbGVjdGlvbikge1xyXG4gICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRm9jdXMgdGhlIGVkaXRvclxyXG4gICAgZWRpdG9yLmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplRWRpdG9yQ29udGVudChkYXRhOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcclxuICAgIGlmICghZWRpdG9yKSByZXR1cm47XHJcblxyXG4gICAgLy8gSWYgY29udGVudCBoYXMgbm8gSFRNTCB0YWdzLCB3cmFwIHdpdGggPHA+XHJcbiAgICBjb25zdCBoYXNIdG1sVGFncyA9IC88W14+XSs+Ly50ZXN0KGRhdGEpO1xyXG4gICAgaWYgKCFoYXNIdG1sVGFncykge1xyXG4gICAgICBlZGl0b3IuaW5uZXJIVE1MID0gYDxwIHN0eWxlPVwiZm9udC1zaXplOjE0cHg7IGZvbnQtd2VpZ2h0OiBub3JtYWw7XCI+JHtkYXRhfTwvcD5gO1xyXG4gICAgICAvLyB0aGlzLmVuc3VyZVBhcmFncmFwaEFuZEZvY3VzKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBlZGl0b3IuaW5uZXJIVE1MID0gZGF0YTtcclxuICAgIH1cclxuICAgIFxyXG4gIH1cclxuXHJcblxyXG4gIG9uQ29udGVudENoYW5nZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNvbnRlbnRDYXB0dXJlKSB7XHJcbiAgICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yJyk7XHJcbiAgICAgIGlmIChlZGl0b3IpIHtcclxuICAgICAgICB0aGlzLmVkaXRvckNvbnRlbnQgPSBlZGl0b3IuaW5uZXJIVE1MO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdDYXB0dXJlZCBDb250ZW50IChDaGlsZCk6JywgdGhpcy5lZGl0b3JDb250ZW50KTtcclxuICAgICAgICB0aGlzLmNvbnRlbnRDaGFuZ2UuZW1pdCh0aGlzLmVkaXRvckNvbnRlbnQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0VkaXRvciBlbGVtZW50IG5vdCBmb3VuZC4nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Q29udGVudCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yQ29udGVudDtcclxuICB9XHJcblxyXG4gIHNlbGVjdGVkSGVhZDogYW55ID0gJ1AnO1xyXG4gIHNlbGVjdGVkRm9udDogYW55ID0gJzE0JztcclxuXHJcbiAgcHVibGljIG9uQ2hhbmdlID0gKGNvbnRlbnQ6IHN0cmluZykgPT4ge1xyXG4gICAgaWYgKHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID09ICc8YnI+JyB8fCB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9PSAnJykge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSGVhZCA9ICdQJztcclxuICAgICAgdGhpcy5zZWxlY3RlZEZvbnQgPSAnMTQnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fY2hhbmdlLmRldGVjdENoYW5nZXMoKTtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIG9uVG91Y2hlZCA9ICgpID0+IHsgfTtcclxuXHJcbiAgd3JpdGVWYWx1ZShjb250ZW50OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmVkaXRvciAmJiB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgIHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gY29udGVudCB8fCAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChjb250ZW50OiBzdHJpbmcpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgb25CbHVyKCkge1xyXG4gICAgdGhpcy5vblRvdWNoZWQoKTtcclxuICB9XHJcblxyXG4gIC8vIHNldEZvbnRTaXplKGV2ZW50OiBFdmVudCkge1xyXG4gIC8vICAgY29uc3Qgc2VsZWN0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxTZWxlY3RFbGVtZW50O1xyXG4gIC8vICAgY29uc3Qgc2l6ZSA9IHNlbGVjdC52YWx1ZTtcclxuICAvLyAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAvLyAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKSByZXR1cm47XHJcbiAgLy8gICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xyXG4gIC8vICAgaWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcclxuICAvLyAgICAgY29uc3QgcGFyZW50ID0gc2VsZWN0aW9uLmFuY2hvck5vZGU/LnBhcmVudEVsZW1lbnQ7XHJcbiAgLy8gICAgIGlmIChcclxuICAvLyAgICAgICBwYXJlbnQgJiZcclxuICAvLyAgICAgICBwYXJlbnQuY2xhc3NMaXN0ICYmXHJcbiAgLy8gICAgICAgQXJyYXkuZnJvbShwYXJlbnQuY2xhc3NMaXN0KS5zb21lKChjOiBzdHJpbmcpID0+IGMuc3RhcnRzV2l0aCgnZnMtJykpXHJcbiAgLy8gICAgICkge1xyXG4gIC8vICAgICAgIHBhcmVudC5zdHlsZS5mb250U2l6ZSA9IGAke3NpemV9cHhgO1xyXG4gIC8vICAgICAgIHBhcmVudC5jbGFzc05hbWUgPSBgZnMtJHtzaXplfWA7XHJcbiAgLy8gICAgIH0gZWxzZSB7XHJcbiAgLy8gICAgICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcclxuICAvLyAgICAgICBzcGFuLnN0eWxlLmZvbnRTaXplID0gYCR7c2l6ZX1weGA7XHJcbiAgLy8gICAgICAgc3Bhbi5jbGFzc0xpc3QuYWRkKGBmcy0ke3NpemV9YCk7XHJcbiAgLy8gICAgICAgcmFuZ2Uuc3Vycm91bmRDb250ZW50cyhzcGFuKTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vICAgZWxzZSB7XHJcbiAgLy8gICAgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XHJcbiAgLy8gICAgIHNwYW4uc3R5bGUuZm9udFNpemUgPSBgJHtzaXplfXB4YDtcclxuICAvLyAgICAgc3Bhbi5jbGFzc0xpc3QuYWRkKGBmcy0ke3NpemV9YCk7XHJcbiAgLy8gICAgIHNwYW4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ1xcdTIwMEInKSk7IC8vIHplcm8td2lkdGggc3BhY2VcclxuICAvLyAgICAgcmFuZ2UuaW5zZXJ0Tm9kZShzcGFuKTtcclxuICAvLyAgICAgY29uc3QgbmV3UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xyXG4gIC8vICAgICBuZXdSYW5nZS5zZXRTdGFydChzcGFuLmZpcnN0Q2hpbGQgYXMgTm9kZSwgMSk7XHJcbiAgLy8gICAgIG5ld1JhbmdlLmNvbGxhcHNlKHRydWUpO1xyXG4gIC8vICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgLy8gICAgIHNlbGVjdGlvbi5hZGRSYW5nZShuZXdSYW5nZSk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICBvbkVkaXRvcktleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAvLyBoYW5kbGUgRW50ZXIgb3IgYXJyb3cga2V5c1xyXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyB8fCBldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicgfHwgZXZlbnQua2V5ID09PSAnQmFja1NwYWNlJyApIHtcclxuICAgICAgdGhpcy51cGRhdGVDdXJyZW50Rm9ybWF0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVDdXJyZW50Rm9ybWF0KCkge1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBhbmNob3JOb2RlID0gc2VsZWN0aW9uLmFuY2hvck5vZGU7XHJcbiAgICBpZiAoIWFuY2hvck5vZGUpIHJldHVybjtcclxuXHJcbiAgICBsZXQgcGFyZW50RWxlbSA9IGFuY2hvck5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXHJcbiAgICAgID8gKGFuY2hvck5vZGUgYXMgSFRNTEVsZW1lbnQpXHJcbiAgICAgIDogKGFuY2hvck5vZGUucGFyZW50RWxlbWVudCBhcyBIVE1MRWxlbWVudCk7XHJcblxyXG4gICAgaWYgKCFwYXJlbnRFbGVtKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGRldGVjdGVkSGVhZCA9ICdQJztcclxuICAgIGxldCBkZXRlY3RlZEZvbnQgPSAnMTQnOyAvLyBkZWZhdWx0XHJcblxyXG4gICAgLy8gVHJhdmVyc2UgdXB3YXJkIHRvIGRldGVjdCBmb3JtYXR0aW5nXHJcbiAgICB3aGlsZSAocGFyZW50RWxlbSAmJiBwYXJlbnRFbGVtICE9PSB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgIGNvbnN0IHRhZyA9IHBhcmVudEVsZW0udGFnTmFtZS50b1VwcGVyQ2FzZSgpO1xyXG5cclxuICAgICAgLy8gRGV0ZWN0IGhlYWRpbmdcclxuICAgICAgaWYgKFsnSDEnLCAnSDInLCAnSDMnLCAnSDQnLCAnSDUnLCAnSDYnLCAnUCddLmluY2x1ZGVzKHRhZykpIHtcclxuICAgICAgICBkZXRlY3RlZEhlYWQgPSB0YWc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIERldGVjdCBpbmxpbmUgZm9udC1zaXplIGZyb20gc3R5bGUgb3IgY2xhc3NcclxuICAgICAgY29uc3QgZm9udFNpemUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnRFbGVtKS5mb250U2l6ZTtcclxuICAgICAgaWYgKGZvbnRTaXplKSB7XHJcbiAgICAgICAgY29uc3QgcHggPSBwYXJzZUludChmb250U2l6ZS5yZXBsYWNlKCdweCcsICcnKSwgMTApO1xyXG4gICAgICAgIGlmICghaXNOYU4ocHgpKSB7XHJcbiAgICAgICAgICBkZXRlY3RlZEZvbnQgPSBweC50b1N0cmluZygpO1xyXG4gICAgICAgICAgYnJlYWs7IC8vIGZvdW5kIHRoZSBjbG9zZXN0IHZhbGlkIGZvbnQgc2l6ZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcGFyZW50RWxlbSA9IHBhcmVudEVsZW0ucGFyZW50RWxlbWVudCBhcyBIVE1MRWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBVcGRhdGUgYm91bmQgcHJvcGVydGllcyBpZiBjaGFuZ2VkXHJcbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRIZWFkICE9PSBkZXRlY3RlZEhlYWQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEhlYWQgPSBkZXRlY3RlZEhlYWQ7XHJcbiAgICAgIGNoYW5nZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGb250ICE9PSBkZXRlY3RlZEZvbnQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZvbnQgPSBkZXRlY3RlZEZvbnQ7XHJcbiAgICAgIGNoYW5nZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMuX2NoYW5nZS5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgc2V0Rm9udFNpemUoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBjb25zdCBzZWxlY3QgPSBldmVudC50YXJnZXQgYXMgSFRNTFNlbGVjdEVsZW1lbnQ7XHJcbiAgICBjb25zdCBzaXplID0gc2VsZWN0LnZhbHVlO1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG5cclxuICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcclxuXHJcbiAgICBpZiAoIXJhbmdlLmNvbGxhcHNlZCkge1xyXG4gICAgICAvLyBOb24tZW1wdHkgc2VsZWN0aW9uXHJcbiAgICAgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XHJcbiAgICAgIHNwYW4uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtc2l6ZScsIGAke3NpemV9cHhgLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgIHNwYW4uY2xhc3NMaXN0LmFkZChgZnMtJHtzaXplfWApO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHJhbmdlLnN1cnJvdW5kQ29udGVudHMoc3Bhbik7XHJcbiAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIC8vIElmIHNlbGVjdGlvbiBzcGFucyBtdWx0aXBsZSBlbGVtZW50cywgdXNlIGV4ZWNDb21tYW5kIGZhbGxiYWNrXHJcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2ZvbnRTaXplJywgZmFsc2UsICc3Jyk7IC8vIHRlbXBvcmFyeSBsYXJnZXN0IHNpemVcclxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdmb250W3NpemU9XCI3XCJdJykuZm9yRWFjaCgoZWw6IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ3NpemUnKTtcclxuICAgICAgICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXNpemUnLCBgJHtzaXplfXB4YCwgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgICAgZWwuY2xhc3NMaXN0LmFkZChgZnMtJHtzaXplfWApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBDb2xsYXBzZWQgc2VsZWN0aW9uIChubyB0ZXh0IHNlbGVjdGVkKVxyXG4gICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG4gICAgICBzcGFuLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXNpemUnLCBgJHtzaXplfXB4YCwgJ2ltcG9ydGFudCcpO1xyXG4gICAgICBzcGFuLmNsYXNzTGlzdC5hZGQoYGZzLSR7c2l6ZX1gKTtcclxuICAgICAgc3Bhbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnXFx1MjAwQicpKTsgLy8gemVyby13aWR0aCBzcGFjZVxyXG4gICAgICByYW5nZS5pbnNlcnROb2RlKHNwYW4pO1xyXG5cclxuICAgICAgLy8gTW92ZSBjdXJzb3IgaW5zaWRlIHNwYW5cclxuICAgICAgY29uc3QgbmV3UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xyXG4gICAgICBuZXdSYW5nZS5zZXRTdGFydChzcGFuLmZpcnN0Q2hpbGQgYXMgTm9kZSwgMSk7XHJcbiAgICAgIG5ld1JhbmdlLmNvbGxhcHNlKHRydWUpO1xyXG4gICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShuZXdSYW5nZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MO1xyXG4gICAgdGhpcy5vbkNoYW5nZShjb250ZW50KTtcclxuICAgIHRoaXMudXBkYXRlQ3VycmVudEZvcm1hdCgpO1xyXG4gICAgdGhpcy5fY2hhbmdlLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHNldEhlYWRpbmcoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBjb25zdCBzZWxlY3QgPSBldmVudC50YXJnZXQgYXMgSFRNTFNlbGVjdEVsZW1lbnQ7XHJcbiAgICBjb25zdCB0YWcgPSBzZWxlY3QudmFsdWU7XHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XHJcbiAgICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XHJcbiAgICBpZiAoIWVkaXRvcikgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IG5ld0VsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XHJcblxyXG4gICAgc3dpdGNoICh0YWcpIHtcclxuICAgICAgY2FzZSAnSDEnOlxyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtc2l6ZScsICczMnB4JywgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtd2VpZ2h0JywgJ2JvbGQnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0gyJzpcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXNpemUnLCAnMjhweCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXdlaWdodCcsICdib2xkJywgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdIMyc6XHJcbiAgICAgICAgbmV3RWxlbS5zdHlsZS5zZXRQcm9wZXJ0eSgnZm9udC1zaXplJywgJzI0cHgnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgbmV3RWxlbS5zdHlsZS5zZXRQcm9wZXJ0eSgnZm9udC13ZWlnaHQnLCAnYm9sZCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnSDQnOlxyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtc2l6ZScsICcyMHB4JywgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtd2VpZ2h0JywgJ2JvbGQnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0g1JzpcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXNpemUnLCAnMThweCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXdlaWdodCcsICc2MDAnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0g2JzpcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXNpemUnLCAnMTZweCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXdlaWdodCcsICc2MDAnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ1AnOlxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtc2l6ZScsICcxNHB4JywgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtd2VpZ2h0JywgJ25vcm1hbCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZFRleHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTtcclxuICAgIGlmIChzZWxlY3RlZFRleHQpIHtcclxuICAgICAgbmV3RWxlbS50ZXh0Q29udGVudCA9IHNlbGVjdGVkVGV4dDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG5ld0VsZW0uaW5uZXJIVE1MID0gJ1xcdTIwMEInOyAvLyBLZWVwcyBjdXJzb3IgdmlzaWJsZVxyXG4gICAgfVxyXG5cclxuICAgIHJhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7XHJcbiAgICByYW5nZS5pbnNlcnROb2RlKG5ld0VsZW0pO1xyXG5cclxuICAgIGNvbnN0IG5ld1JhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgIG5ld1JhbmdlLnNldFN0YXJ0KG5ld0VsZW0sIG5ld0VsZW0uY2hpbGROb2Rlcy5sZW5ndGgpO1xyXG4gICAgbmV3UmFuZ2UuY29sbGFwc2UodHJ1ZSk7XHJcbiAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICBzZWxlY3Rpb24uYWRkUmFuZ2UobmV3UmFuZ2UpO1xyXG5cclxuICAgIGVkaXRvci5mb2N1cygpO1xyXG5cclxuICAgIHRoaXMuX2NoYW5nZS5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICBjb25zdCBpbnB1dEV2ZW50ID0gbmV3IEV2ZW50KCdpbnB1dCcsIHsgYnViYmxlczogdHJ1ZSB9KTtcclxuICAgIGVkaXRvci5kaXNwYXRjaEV2ZW50KGlucHV0RXZlbnQpO1xyXG4gIH1cclxuXHJcblxyXG4gIGZvcm1hdChjb21tYW5kOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKGNvbW1hbmQsIGZhbHNlLCAnJyk7XHJcbiAgfVxyXG5cclxuICAvL0ltYWdlIFNlY3Rpb25cclxuXHJcbiAgYWxsb3dEcm9wKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcclxuICAgIC8vZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcblxyXG4gIC8vIEhhbmRsZSBpbWFnZSBkcmFnIHN0YXJ0XHJcbiAgZHJhZyhldmVudDogRHJhZ0V2ZW50LCBpbWFnZVVybDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBldmVudC5kYXRhVHJhbnNmZXI/LnNldERhdGEoXCJ0ZXh0XCIsIGltYWdlVXJsKTtcclxuICB9XHJcblxyXG4gIC8vIEhhbmRsZSBkcm9wIGV2ZW50IGluIHRoZSBlZGl0b3JcclxuICBkcm9wKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcclxuICAgIC8vIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG5cclxuICAvLyBiaW5kSW1hZ2VDbGlja0V2ZW50cygpIHtcclxuICAvLyAgIGNvbnN0IGVkaXRvckVsID0gdGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudDtcclxuICAvLyAgIGNvbnN0IGltYWdlcyA9IGVkaXRvckVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ2ltZycpO1xyXG5cclxuICAvLyAgIGltYWdlcy5mb3JFYWNoKGltZyA9PiB7XHJcbiAgLy8gICAgIC8vIEF2b2lkIGRvdWJsZS1iaW5kaW5nXHJcbiAgLy8gICAgIGltZy5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25JbWFnZUNsaWNrIGFzIGFueSk7XHJcbiAgLy8gICAgIGltZy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25JbWFnZUNsaWNrLmJpbmQodGhpcykpO1xyXG4gIC8vICAgfSk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBvbkltYWdlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAvLyAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIC8vICAgY29uc3QgaW1nID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbWFnZUVsZW1lbnQ7XHJcbiAgLy8gICB0aGlzLmVuYWJsZUltYWdlUmVzaXplKGltZyk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBlbmFibGVJbWFnZVJlc2l6ZShpbWc6IEhUTUxJbWFnZUVsZW1lbnQpIHtcclxuICAvLyAgIC8vIFJlbW92ZSBhbnkgZXhpc3RpbmcgcmVzaXplIGhhbmRsZXMgZmlyc3RcclxuICAvLyAgIHRoaXMucmVtb3ZlSW1hZ2VSZXNpemVIYW5kbGVzKCk7XHJcblxyXG4gIC8vICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gIC8vICAgd3JhcHBlci5jbGFzc0xpc3QuYWRkKCdpbWFnZS1yZXNpemUtd3JhcHBlcicpO1xyXG4gIC8vICAgaW1nLnBhcmVudE5vZGU/Lmluc2VydEJlZm9yZSh3cmFwcGVyLCBpbWcpO1xyXG4gIC8vICAgd3JhcHBlci5hcHBlbmRDaGlsZChpbWcpO1xyXG5cclxuICAvLyAgIC8vIEFkZCByZXNpemFibGUgaGFuZGxlc1xyXG4gIC8vICAgY29uc3QgcmVzaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gIC8vICAgcmVzaXplci5jbGFzc0xpc3QuYWRkKCdyZXNpemVyJyk7XHJcbiAgLy8gICB3cmFwcGVyLmFwcGVuZENoaWxkKHJlc2l6ZXIpO1xyXG5cclxuICAvLyAgIC8vIEhhbmRsZSByZXNpemluZyBsb2dpY1xyXG4gIC8vICAgbGV0IHN0YXJ0WCA9IDAsIHN0YXJ0WSA9IDAsIHN0YXJ0V2lkdGggPSAwLCBzdGFydEhlaWdodCA9IDA7XHJcblxyXG4gIC8vICAgcmVzaXplci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAoZTogTW91c2VFdmVudCkgPT4ge1xyXG4gIC8vICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgLy8gICAgIHN0YXJ0WCA9IGUuY2xpZW50WDtcclxuICAvLyAgICAgc3RhcnRZID0gZS5jbGllbnRZO1xyXG4gIC8vICAgICBzdGFydFdpZHRoID0gaW1nLndpZHRoO1xyXG4gIC8vICAgICBzdGFydEhlaWdodCA9IGltZy5oZWlnaHQ7XHJcblxyXG4gIC8vICAgICBjb25zdCBvbk1vdXNlTW92ZSA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XHJcbiAgLy8gICAgICAgY29uc3QgbmV3V2lkdGggPSBzdGFydFdpZHRoICsgKGUuY2xpZW50WCAtIHN0YXJ0WCk7XHJcbiAgLy8gICAgICAgY29uc3QgbmV3SGVpZ2h0ID0gc3RhcnRIZWlnaHQgKyAoZS5jbGllbnRZIC0gc3RhcnRZKTtcclxuICAvLyAgICAgICBpbWcuc3R5bGUud2lkdGggPSBgJHtuZXdXaWR0aH1weGA7XHJcbiAgLy8gICAgICAgaW1nLnN0eWxlLmhlaWdodCA9IGAke25ld0hlaWdodH1weGA7XHJcbiAgLy8gICAgIH07XHJcblxyXG4gIC8vICAgICBjb25zdCBvbk1vdXNlVXAgPSAoKSA9PiB7XHJcbiAgLy8gICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xyXG4gIC8vICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xyXG4gIC8vICAgICB9O1xyXG5cclxuICAvLyAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xyXG4gIC8vICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcclxuICAvLyAgIH0pO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gcmVtb3ZlSW1hZ2VSZXNpemVIYW5kbGVzKCkge1xyXG4gIC8vICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5pbWFnZS1yZXNpemUtd3JhcHBlcicpO1xyXG4gIC8vICAgaWYgKGV4aXN0aW5nKSB7XHJcbiAgLy8gICAgIGNvbnN0IGltZyA9IGV4aXN0aW5nLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpO1xyXG4gIC8vICAgICBpZiAoaW1nKSB7XHJcbiAgLy8gICAgICAgZXhpc3RpbmcucGFyZW50Tm9kZT8uaW5zZXJ0QmVmb3JlKGltZywgZXhpc3RpbmcpO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICAgIGV4aXN0aW5nLnJlbW92ZSgpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcblxyXG4gIHJlbW92ZUltYWdlKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMudXBsb2FkZWRJbWFnZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICB9XHJcblxyXG4gIGluc2VydEltYWdlSW5FZGl0b3IoaW1hZ2VVcmw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmVkaXRvcicpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgaWYgKCFlZGl0b3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRWRpdG9yIGVsZW1lbnQgbm90IGZvdW5kLicpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ3JlYXRlIGltYWdlIGVsZW1lbnRcclxuICAgIGNvbnN0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgaW1nLnNyYyA9IGltYWdlVXJsO1xyXG4gICAgaW1nLnN0eWxlLm1heFdpZHRoID0gJzEwMCUnO1xyXG4gICAgaW1nLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgaW1nLnN0eWxlLndpZHRoID0gJzMwMHB4JztcclxuICAgIGltZy5zdHlsZS5oZWlnaHQgPSAnYXV0byc7XHJcblxyXG4gICAgLy8gQ3JlYXRlIGEgd3JhcHBlciBhcm91bmQgdGhlIGltYWdlIHRvIGFsbG93IHJlc2l6aW5nXHJcbiAgICBjb25zdCB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICB3cmFwcGVyLnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcclxuICAgIHdyYXBwZXIuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snOyAgLy8gRW5zdXJlcyB0aGUgd3JhcHBlciBvbmx5IHRha2VzIHVwIHNwYWNlIGZvciB0aGUgaW1hZ2VcclxuICAgIHdyYXBwZXIuc3R5bGUubWFyZ2luID0gJzEwcHgnO1xyXG4gICAgd3JhcHBlci5zdHlsZS5wYWRkaW5nID0gJzVweCc7XHJcbiAgICB3cmFwcGVyLnN0eWxlLmJvcmRlciA9ICcxcHggZGFzaGVkICNjY2MnOyAvLyBPcHRpb25hbCBib3JkZXIgdG8gaW5kaWNhdGUgdGhlIGltYWdlIGFyZWFcclxuXHJcbiAgICAvLyBBcHBlbmQgdGhlIGltYWdlIHRvIHRoZSB3cmFwcGVyXHJcbiAgICB3cmFwcGVyLmFwcGVuZENoaWxkKGltZyk7XHJcblxyXG4gICAgLy8gQXBwZW5kIHRoZSB3cmFwcGVyIHRvIHRoZSBlZGl0b3JcclxuICAgIGVkaXRvci5hcHBlbmRDaGlsZCh3cmFwcGVyKTtcclxuXHJcbiAgICAvLyBNYWtlIHRoZSBpbWFnZSByZXNpemFibGVcclxuICAgIHRoaXMubWFrZUltYWdlUmVzaXphYmxlKHdyYXBwZXIsIGltZyk7XHJcblxyXG4gICAgLy8gT3B0aW9uYWxseSwgYWRkIGEgdGV4dCBub2RlIHRvIG1haW50YWluIGN1cnNvciBwb3NpdGlvbiBhZnRlciBhcHBlbmRpbmcgdGhlIGltYWdlXHJcbiAgICBjb25zdCB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdcXHUyMDBCJyk7ICAvLyBJbnZpc2libGUgY2hhcmFjdGVyIHRvIG1haW50YWluIHBvc2l0aW9uXHJcbiAgICBlZGl0b3IuYXBwZW5kQ2hpbGQodGV4dE5vZGUpO1xyXG5cclxuICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgIHJhbmdlLnNldFN0YXJ0QWZ0ZXIod3JhcHBlcik7XHJcbiAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTtcclxuXHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICBpZiAoc2VsZWN0aW9uKSB7XHJcbiAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1ha2VJbWFnZVJlc2l6YWJsZSh3cmFwcGVyOiBIVE1MRWxlbWVudCwgaW1nOiBIVE1MSW1hZ2VFbGVtZW50KTogdm9pZCB7XHJcbiAgICBsZXQgaXNSZXNpemluZyA9IGZhbHNlO1xyXG4gICAgbGV0IHN0YXJ0WCA9IDA7XHJcbiAgICBsZXQgc3RhcnRZID0gMDtcclxuICAgIGxldCBzdGFydFdpZHRoID0gMDtcclxuICAgIGxldCBzdGFydEhlaWdodCA9IDA7XHJcblxyXG4gICAgLy8gQ3JlYXRlIHJlc2l6ZSBoYW5kbGVzIGZvciB0aGUgaW1hZ2VcclxuICAgIGNvbnN0IGNyZWF0ZVJlc2l6ZUhhbmRsZSA9IChcclxuICAgICAgY3Vyc29yOiBzdHJpbmcsXHJcbiAgICAgIHBvc2l0aW9uU3R5bGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxyXG4gICAgICByZXNpemVDYWxsYmFjazogKGRlbHRhWDogbnVtYmVyLCBkZWx0YVk6IG51bWJlcikgPT4gdm9pZFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGNvbnN0IGhhbmRsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICBoYW5kbGUuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xyXG4gICAgICBoYW5kbGUuc3R5bGUud2lkdGggPSAnMTBweCc7XHJcbiAgICAgIGhhbmRsZS5zdHlsZS5oZWlnaHQgPSAnMTBweCc7XHJcbiAgICAgIGhhbmRsZS5zdHlsZS5iYWNrZ3JvdW5kID0gJ3JnYmEoMCwgMCwgMCwgMC41KSc7XHJcbiAgICAgIGhhbmRsZS5zdHlsZS5jdXJzb3IgPSBjdXJzb3I7XHJcbiAgICAgIE9iamVjdC5hc3NpZ24oaGFuZGxlLnN0eWxlLCBwb3NpdGlvblN0eWxlcyk7XHJcblxyXG4gICAgICBoYW5kbGUuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKHJlc2l6ZUV2ZW50KSA9PiB7XHJcbiAgICAgICAgaXNSZXNpemluZyA9IHRydWU7XHJcbiAgICAgICAgc3RhcnRYID0gcmVzaXplRXZlbnQuY2xpZW50WDtcclxuICAgICAgICBzdGFydFkgPSByZXNpemVFdmVudC5jbGllbnRZO1xyXG4gICAgICAgIHN0YXJ0V2lkdGggPSBpbWcub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgc3RhcnRIZWlnaHQgPSBpbWcub2Zmc2V0SGVpZ2h0O1xyXG5cclxuICAgICAgICBjb25zdCBvbk1vdXNlTW92ZSA9IChtb3ZlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcclxuICAgICAgICAgIGlmIChpc1Jlc2l6aW5nKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlbHRhWCA9IG1vdmVFdmVudC5jbGllbnRYIC0gc3RhcnRYO1xyXG4gICAgICAgICAgICBjb25zdCBkZWx0YVkgPSBtb3ZlRXZlbnQuY2xpZW50WSAtIHN0YXJ0WTtcclxuICAgICAgICAgICAgcmVzaXplQ2FsbGJhY2soZGVsdGFYLCBkZWx0YVkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IG9uTW91c2VVcCA9ICgpID0+IHtcclxuICAgICAgICAgIGlzUmVzaXppbmcgPSBmYWxzZTtcclxuICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcclxuICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKGhhbmRsZSk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIEFkZCByZXNpemluZyBoYW5kbGVzIHRvIHRoZSB3cmFwcGVyIGZvciB0aGUgaW1hZ2VcclxuICAgIGNyZWF0ZVJlc2l6ZUhhbmRsZShcclxuICAgICAgJ253LXJlc2l6ZScsXHJcbiAgICAgIHsgdG9wOiAnLTVweCcsIGxlZnQ6ICctNXB4JyB9LFxyXG4gICAgICAoZGVsdGFYLCBkZWx0YVkpID0+IHtcclxuICAgICAgICBpbWcuc3R5bGUud2lkdGggPSBgJHtzdGFydFdpZHRoIC0gZGVsdGFYfXB4YDtcclxuICAgICAgICBpbWcuc3R5bGUuaGVpZ2h0ID0gYCR7c3RhcnRIZWlnaHQgLSBkZWx0YVl9cHhgO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgY3JlYXRlUmVzaXplSGFuZGxlKFxyXG4gICAgICAnc2UtcmVzaXplJyxcclxuICAgICAgeyBib3R0b206ICctNXB4JywgcmlnaHQ6ICctNXB4JyB9LFxyXG4gICAgICAoZGVsdGFYLCBkZWx0YVkpID0+IHtcclxuICAgICAgICBpbWcuc3R5bGUud2lkdGggPSBgJHtzdGFydFdpZHRoICsgZGVsdGFYfXB4YDtcclxuICAgICAgICBpbWcuc3R5bGUuaGVpZ2h0ID0gYCR7c3RhcnRIZWlnaHQgKyBkZWx0YVl9cHhgO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgaW5zZXJ0SW1hZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgaWYgKGlucHV0Py5maWxlcykge1xyXG4gICAgICBBcnJheS5mcm9tKGlucHV0LmZpbGVzKS5mb3JFYWNoKGZpbGUgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGltYWdlVXJsID0gZS50YXJnZXQucmVzdWx0O1xyXG4gICAgICAgICAgdGhpcy51cGxvYWRlZEltYWdlcy5wdXNoKGltYWdlVXJsKTsgLy8gU3RvcmUgaW1hZ2UgVVJMIGluIHRoZSBhcnJheVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29udmVydEltYWdlKGZpbGU6IEZpbGUpOiBQcm9taXNlPEZpbGU+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGlmIChmaWxlLnR5cGUgIT09ICdpbWFnZS9wbmcnKSB7XHJcbiAgICAgICAgcmVzb2x2ZShmaWxlKTsgLy8gUmV0dXJuIHRoZSBvcmlnaW5hbCBmaWxlIGlmIGl0J3Mgbm90IGEgUE5HXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgaW1nLnNyYyA9IGUudGFyZ2V0LnJlc3VsdDtcclxuXHJcbiAgICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcblxyXG4gICAgICAgICAgaWYgKCFjdHgpIHtcclxuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignRmFpbGVkIHRvIGdldCBjYW52YXMgY29udGV4dCcpKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNhbnZhcy53aWR0aCA9IGltZy53aWR0aDtcclxuICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBpbWcuaGVpZ2h0O1xyXG5cclxuICAgICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwKTtcclxuICAgICAgICAgIGNhbnZhcy50b0Jsb2IoXHJcbiAgICAgICAgICAgIGJsb2IgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChibG9iKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBqcGdGaWxlID0gbmV3IEZpbGUoW2Jsb2JdLCBmaWxlLm5hbWUucmVwbGFjZSgvXFwucG5nJC8sICcuanBnJyksIHsgdHlwZTogJ2ltYWdlL2pwZWcnIH0pO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShqcGdGaWxlKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignRmFpbGVkIHRvIGNvbnZlcnQgUE5HIHRvIEpQRycpKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICdpbWFnZS9qcGVnJyxcclxuICAgICAgICAgICAgMC45NSAvLyBRdWFsaXR5IGZhY3RvciBmb3IgSlBFR1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9O1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgcmVhZGVyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QobmV3IEVycm9yKCdGYWlsZWQgdG8gcmVhZCB0aGUgZmlsZScpKTtcclxuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgaW5zZXJ0SW1hZ2VUb0VkaXRvcihldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBmaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xyXG4gICAgbGV0IGZpbGVUeXBlcyA9IFsnaW1hZ2UvanBlZycsICdpbWFnZS9wbmcnLCAnaW1hZ2UvanBnJ107XHJcblxyXG4gICAgaWYoIWZpbGVUeXBlcy5pbmNsdWRlcyhmaWxlLnR5cGUpKVxyXG4gICAgICByZXR1cm47XHJcbiAgICBcclxuICAgIGlmIChmaWxlKSB7XHJcbiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgaW1hZ2VVcmwgPSBlLnRhcmdldC5yZXN1bHQ7XHJcbiAgICAgICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmVkaXRvcicpIGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgICAgICBpZiAoIWVkaXRvcikge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRWRpdG9yIGVsZW1lbnQgbm90IGZvdW5kLicpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgd3JhcHBlci5jb250ZW50RWRpdGFibGUgPSAnZmFsc2UnO1xyXG4gICAgICAgIHdyYXBwZXIuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnO1xyXG4gICAgICAgIHdyYXBwZXIuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xyXG4gICAgICAgIHdyYXBwZXIuc3R5bGUuYm9yZGVyID0gJzFweCBkYXNoZWQgI2NjYyc7XHJcbiAgICAgICAgd3JhcHBlci5zdHlsZS5tYXJnaW4gPSAnMTBweCc7XHJcbiAgICAgICAgd3JhcHBlci5zdHlsZS5wYWRkaW5nID0gJzVweCc7XHJcbiAgICAgICAgd3JhcHBlci5zdHlsZS5ib3JkZXJCbG9ja0NvbG9yID0gJyMwMDdCRkYnO1xyXG4gICAgICAgIGNvbnN0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgICAgIGltZy5zcmMgPSBpbWFnZVVybDtcclxuICAgICAgICBpbWcuc3R5bGUubWF4V2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgaW1nLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIGltZy5zdHlsZS53aWR0aCA9ICczMDBweCc7XHJcbiAgICAgICAgaW1nLnN0eWxlLmhlaWdodCA9ICdhdXRvJztcclxuICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKGltZyk7XHJcbiAgICAgICAgbGV0IGlzUmVzaXppbmcgPSBmYWxzZTtcclxuICAgICAgICBsZXQgc3RhcnRYID0gMDtcclxuICAgICAgICBsZXQgc3RhcnRZID0gMDtcclxuICAgICAgICBsZXQgc3RhcnRXaWR0aCA9IDA7XHJcbiAgICAgICAgbGV0IHN0YXJ0SGVpZ2h0ID0gMDtcclxuXHJcbiAgICAgICAgY29uc3QgY3JlYXRlUmVzaXplSGFuZGxlID0gKFxyXG4gICAgICAgICAgY3Vyc29yOiBzdHJpbmcsXHJcbiAgICAgICAgICBwb3NpdGlvblN0eWxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcclxuICAgICAgICAgIHJlc2l6ZUNhbGxiYWNrOiAoZGVsdGFYOiBudW1iZXIsIGRlbHRhWTogbnVtYmVyKSA9PiB2b2lkXHJcbiAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBoYW5kbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICAgIGhhbmRsZS5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XHJcbiAgICAgICAgICBoYW5kbGUuc3R5bGUud2lkdGggPSAnMTBweCc7XHJcbiAgICAgICAgICBoYW5kbGUuc3R5bGUuaGVpZ2h0ID0gJzEwcHgnO1xyXG4gICAgICAgICAgaGFuZGxlLnN0eWxlLmJhY2tncm91bmQgPSAncmdiYSgwLCAwLCAwLCAwLjUpJztcclxuICAgICAgICAgIGhhbmRsZS5zdHlsZS5jdXJzb3IgPSBjdXJzb3I7XHJcbiAgICAgICAgICBPYmplY3QuYXNzaWduKGhhbmRsZS5zdHlsZSwgcG9zaXRpb25TdHlsZXMpO1xyXG5cclxuICAgICAgICAgIGhhbmRsZS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAocmVzaXplRXZlbnQpID0+IHtcclxuICAgICAgICAgICAgaXNSZXNpemluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIHN0YXJ0WCA9IHJlc2l6ZUV2ZW50LmNsaWVudFg7XHJcbiAgICAgICAgICAgIHN0YXJ0WSA9IHJlc2l6ZUV2ZW50LmNsaWVudFk7XHJcbiAgICAgICAgICAgIHN0YXJ0V2lkdGggPSBpbWcub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgICAgIHN0YXJ0SGVpZ2h0ID0gaW1nLm9mZnNldEhlaWdodDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9uTW91c2VNb3ZlID0gKG1vdmVFdmVudDogTW91c2VFdmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChpc1Jlc2l6aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkZWx0YVggPSBtb3ZlRXZlbnQuY2xpZW50WCAtIHN0YXJ0WDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRlbHRhWSA9IG1vdmVFdmVudC5jbGllbnRZIC0gc3RhcnRZO1xyXG4gICAgICAgICAgICAgICAgcmVzaXplQ2FsbGJhY2soZGVsdGFYLCBkZWx0YVkpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3Qgb25Nb3VzZVVwID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlzUmVzaXppbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XHJcbiAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChoYW5kbGUpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY3JlYXRlUmVzaXplSGFuZGxlKFxyXG4gICAgICAgICAgJ253LXJlc2l6ZScsXHJcbiAgICAgICAgICB7IHRvcDogJy01cHgnLCBsZWZ0OiAnLTVweCcgfSxcclxuICAgICAgICAgIChkZWx0YVgsIGRlbHRhWSkgPT4ge1xyXG4gICAgICAgICAgICBpbWcuc3R5bGUud2lkdGggPSBgJHtzdGFydFdpZHRoIC0gZGVsdGFYfXB4YDtcclxuICAgICAgICAgICAgaW1nLnN0eWxlLmhlaWdodCA9IGAke3N0YXJ0SGVpZ2h0IC0gZGVsdGFZfXB4YDtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIGNyZWF0ZVJlc2l6ZUhhbmRsZShcclxuICAgICAgICAgICdzZS1yZXNpemUnLFxyXG4gICAgICAgICAgeyBib3R0b206ICctNXB4JywgcmlnaHQ6ICctNXB4JyB9LFxyXG4gICAgICAgICAgKGRlbHRhWCwgZGVsdGFZKSA9PiB7XHJcbiAgICAgICAgICAgIGltZy5zdHlsZS53aWR0aCA9IGAke3N0YXJ0V2lkdGggKyBkZWx0YVh9cHhgO1xyXG4gICAgICAgICAgICBpbWcuc3R5bGUuaGVpZ2h0ID0gYCR7c3RhcnRIZWlnaHQgKyBkZWx0YVl9cHhgO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZWRpdG9yLmFwcGVuZENoaWxkKHdyYXBwZXIpO1xyXG4gICAgICAgIGNvbnN0IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ1xcdTIwMEInKTtcclxuICAgICAgICBlZGl0b3IuYXBwZW5kQ2hpbGQodGV4dE5vZGUpO1xyXG4gICAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgICAgICByYW5nZS5zZXRTdGFydEFmdGVyKHdyYXBwZXIpO1xyXG4gICAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgICBpZiAoc2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVuVGFibGVEaWFsb2coZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGNvbnN0IG1vZGFsRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFibGVEaWFsb2cnKSE7XHJcbiAgICBjb25zdCBkaWFsb2cgPSBtb2RhbEVsLnF1ZXJ5U2VsZWN0b3IoJy5tb2RhbC1kaWFsb2cnKSBhcyBIVE1MRWxlbWVudDtcclxuXHJcbiAgICAvLyBPZmZzZXQgc28gaXQgZG9lc24ndCBzdGljayBleGFjdGx5IHRvIGN1cnNvclxyXG4gICAgY29uc3QgT0ZGU0VUX1ggPSAxMDtcclxuICAgIGNvbnN0IE9GRlNFVF9ZID0gMTA7XHJcblxyXG4gICAgZGlhbG9nLnN0eWxlLmxlZnQgPSBldmVudC5jbGllbnRYICsgT0ZGU0VUX1ggKyAncHgnO1xyXG4gICAgZGlhbG9nLnN0eWxlLnRvcCA9IGV2ZW50LmNsaWVudFkgKyBPRkZTRVRfWSArICdweCc7XHJcblxyXG4gICAgY29uc3QgbW9kYWwgPSBuZXcgYm9vdHN0cmFwLk1vZGFsKG1vZGFsRWwsIHtcclxuICAgICAgYmFja2Ryb3A6IGZhbHNlLFxyXG4gICAgICBrZXlib2FyZDogdHJ1ZVxyXG4gICAgfSk7XHJcblxyXG4gICAgbW9kYWwuc2hvdygpO1xyXG4gIH1cclxuXHJcbiAgb3BlblNpZ25hdHVyZURpYWxvZygpIHtcclxuICAgIGNvbnN0IG1vZGFsID0gbmV3IGJvb3RzdHJhcC5Nb2RhbChcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NpZ25hdHVyZURpYWxvZycpIVxyXG4gICAgKTtcclxuICAgIG1vZGFsLnNob3coKTtcclxuICB9XHJcblxyXG4gIC8vIG9wZW5UYWJsZURpYWxvZyhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gIC8vICAgdGhpcy5pbnNlcnRNYXJrZXIoKTtcclxuICAvLyAgIHRoaXMucm93cyA9IDE7XHJcbiAgLy8gICB0aGlzLmNvbHMgPSAxO1xyXG5cclxuICAvLyAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy50YWJsZURpYWxvZywge1xyXG4gIC8vICAgICBwb3NpdGlvbjoge1xyXG4gIC8vICAgICAgIHRvcDogYCR7ZXZlbnQuY2xpZW50WX1weGAsXHJcbiAgLy8gICAgICAgbGVmdDogYCR7ZXZlbnQuY2xpZW50WH1weGAsXHJcbiAgLy8gICAgIH0sXHJcbiAgLy8gICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tZGlhbG9nLWNvbnRhaW5lcidcclxuICAvLyAgIH0pO1xyXG5cclxuICAvLyAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgLy8gICAgIGlmIChyZXN1bHQpIHtcclxuICAvLyAgICAgICB0aGlzLmluc2VydFRhYmxlKHJlc3VsdC5yb3dzLCByZXN1bHQuY29scyk7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH0pO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gb3BlblNpZ25hdHVyZURpYWxvZyhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gIC8vICAgdGhpcy5pbnNlcnRNYXJrZXIoKTtcclxuXHJcbiAgLy8gICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuc2lnbmF0dXJlRGlhbG9nLCB7XHJcbiAgLy8gICAgIHBvc2l0aW9uOiB7XHJcbiAgLy8gICAgICAgLy8gdG9wOiBgJHtldmVudC5jbGllbnRZfXB4YCxcclxuICAvLyAgICAgICAvLyBsZWZ0OiBgJHtldmVudC5jbGllbnRYfXB4YCxcclxuICAvLyAgICAgICB0b3A6ICczMHB4J1xyXG4gIC8vICAgICB9LFxyXG4gIC8vICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgLy8gICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tZGlhbG9nLWNvbnRhaW5lcidcclxuICAvLyAgIH0pO1xyXG5cclxuICAvLyAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgLy8gICAgIGlmKHJlc3VsdClcclxuICAvLyAgICAgICAvLyB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArPSBgPGltZyBzcmM9JHtyZXN1bHR9IGFsdD0nU2lnbmF0dXJlJyAvPmBcclxuICAvLyAgICAgdGhpcy5pbnNlcnRJbWFnZUluRWRpdG9yKHJlc3VsdCk7XHJcbiAgLy8gICB9KTtcclxuICAvLyB9XHJcblxyXG4gIHVwZGF0ZVByZXZpZXcoY29sczogbnVtYmVyLCByb3dzOiBudW1iZXIpIHtcclxuICAgIHRoaXMuY29scyA9IGNvbHM7XHJcbiAgICB0aGlzLnJvd3MgPSByb3dzO1xyXG4gIH1cclxuXHJcbiAgLy8gdXBkYXRlU2VsZWN0aW9uKGNvbEluZGV4OiBudW1iZXIsIHJvd0luZGV4OiBudW1iZXIpIHtcclxuICAvLyAgIHRoaXMuY29scyA9IGNvbEluZGV4O1xyXG4gIC8vICAgdGhpcy5yb3dzID0gcm93SW5kZXg7XHJcbiAgLy8gICBkaWFsb2dSZWYuY2xvc2UoeyByb3dzOiB0aGlzLnJvd3MsIGNvbHM6IHRoaXMuY29scyB9KTsgLy8gQ2xvc2UgZGlhbG9nIHdpdGggc2VsZWN0aW9uXHJcbiAgLy8gfVxyXG5cclxuICB1cGRhdGVTZWxlY3Rpb24oY29sSW5kZXg6IG51bWJlciwgcm93SW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5zZWxlY3RlZENvbHMgPSBjb2xJbmRleDtcclxuICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gcm93SW5kZXg7XHJcblxyXG4gICAgLy8gSW5zZXJ0IHRhYmxlIGltbWVkaWF0ZWx5IChNYXRlcmlhbCBhZnRlckNsb3NlZCByZXBsYWNlbWVudClcclxuICAgIHRoaXMuaW5zZXJ0VGFibGUodGhpcy5zZWxlY3RlZFJvd3MsIHRoaXMuc2VsZWN0ZWRDb2xzKTtcclxuXHJcbiAgICAvLyBDbG9zZSBtb2RhbFxyXG4gICAgY29uc3QgbW9kYWxFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWJsZURpYWxvZycpO1xyXG4gICAgY29uc3QgbW9kYWwgPSBib290c3RyYXAuTW9kYWwuZ2V0SW5zdGFuY2UobW9kYWxFbCEpO1xyXG4gICAgbW9kYWw/LmhpZGUoKTtcclxuICB9XHJcblxyXG5cclxuICBtYWtlRmlyc3RSb3dIZWFkZXIoKTogdm9pZCB7XHJcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50O1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgLy8gQ2hlY2sgaWYgc2VsZWN0aW9uIGlzIGluc2lkZSB0aGUgZWRpdG9yXHJcbiAgICBpZiAoIXRoaXMuaXNTZWxlY3Rpb25JbnNpZGVFZGl0b3IoZWRpdG9yLCBzZWxlY3Rpb24pKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIEZpbmQgdGhlIGNsb3Nlc3QgdGFibGUgdG8gdGhlIHNlbGVjdGlvblxyXG4gICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcclxuICAgIGNvbnN0IHNlbGVjdGVkTm9kZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyO1xyXG4gICAgY29uc3QgdGFibGUgPSB0aGlzLmZpbmRDbG9zZXN0VGFibGUoc2VsZWN0ZWROb2RlKTtcclxuICAgIGlmICghdGFibGUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gQ29udmVydCB0aGUgZmlyc3Qgcm93IGNlbGxzIHRvIGhlYWRlciBjZWxsc1xyXG4gICAgY29uc3QgZmlyc3RSb3cgPSB0YWJsZS5yb3dzWzBdO1xyXG4gICAgaWYgKGZpcnN0Um93KSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlyc3RSb3cuY2VsbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBjZWxsID0gZmlyc3RSb3cuY2VsbHNbaV07XHJcbiAgICAgICAgY29uc3QgdGggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0aCcpO1xyXG4gICAgICAgIHRoLmlubmVySFRNTCA9IGNlbGwuaW5uZXJIVE1MO1xyXG4gICAgICAgIHRoLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgICAgIHRoLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICcjRjFGMUYwJztcclxuICAgICAgICB0aC5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkIGJsYWNrJztcclxuICAgICAgICB0aC5zdHlsZS5ib3JkZXJDb2xsYXBzZSA9ICdjb2xsYXBzZSc7XHJcbiAgICAgICAgdGguc3R5bGUucGFkZGluZyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGNlbGwpLnBhZGRpbmc7IC8vIFJldGFpbiBwYWRkaW5nXHJcbiAgICAgICAgdGguc3R5bGUud2lkdGggPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjZWxsKS53aWR0aDsgLy8gUmV0YWluIHdpZHRoXHJcbiAgICAgICAgdGguc3R5bGUuaGVpZ2h0ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoY2VsbCkuaGVpZ2h0O1xyXG4gICAgICAgIGZpcnN0Um93LnJlcGxhY2VDaGlsZCh0aCwgY2VsbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVkaXRvci5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaW5kQ2xvc2VzdFRhYmxlKG5vZGU6IE5vZGUpOiBIVE1MVGFibGVFbGVtZW50IHwgbnVsbCB7XHJcbiAgICB3aGlsZSAobm9kZSAmJiBub2RlICE9PSBkb2N1bWVudCkge1xyXG4gICAgICBpZiAobm9kZS5ub2RlTmFtZSA9PT0gJ1RBQkxFJykge1xyXG4gICAgICAgIHJldHVybiBub2RlIGFzIEhUTUxUYWJsZUVsZW1lbnQ7XHJcbiAgICAgIH1cclxuICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZSE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5zZXJ0TWFya2VyKCk6IHZvaWQge1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHtcclxuICAgICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKS5jbG9uZVJhbmdlKCk7XHJcbiAgICAgIGNvbnN0IG1hcmtlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcclxuICAgICAgbWFya2VyLmlkID0gJ3RhYmxlLW1hcmtlcic7XHJcbiAgICAgIG1hcmtlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICByYW5nZS5pbnNlcnROb2RlKG1hcmtlcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbnNlcnRUYWJsZShyb3dzOiBhbnksIGNvbHM6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3Qgcm93Q291bnQgPSBwYXJzZUludChyb3dzLCAxMCk7XHJcbiAgICBjb25zdCBjb2xDb3VudCA9IHBhcnNlSW50KGNvbHMsIDEwKTtcclxuXHJcbiAgICBpZiAoaXNOYU4ocm93Q291bnQpIHx8IGlzTmFOKGNvbENvdW50KSB8fCByb3dDb3VudCA8IDEgfHwgY29sQ291bnQgPCAxKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50O1xyXG4gICAgY29uc3QgbWFya2VyID0gZWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJyN0YWJsZS1tYXJrZXInKTtcclxuXHJcbiAgICBjb25zdCB0YWJsZUhUTUwgPSB0aGlzLmNyZWF0ZVRhYmxlSFRNTChyb3dDb3VudCwgY29sQ291bnQpO1xyXG4gICAgY29uc3QgdGVtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgdGVtcERpdi5pbm5lckhUTUwgPSB0YWJsZUhUTUw7XHJcbiAgICBjb25zdCB0YWJsZSA9IHRlbXBEaXYuZmlyc3RFbGVtZW50Q2hpbGQ7XHJcblxyXG4gICAgaWYgKG1hcmtlciAmJiB0YWJsZSkge1xyXG4gICAgICBtYXJrZXIucGFyZW50Tm9kZSEucmVwbGFjZUNoaWxkKHRhYmxlLCBtYXJrZXIpO1xyXG4gICAgICB0aGlzLnNldEN1cnNvclRvRmlyc3RDZWxsKHRhYmxlIGFzIEhUTUxFbGVtZW50KTtcclxuICAgICAgZWRpdG9yLmZvY3VzKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBmYWxsYmFjayBpZiBubyBtYXJrZXIsIGp1c3QgYXBwZW5kXHJcbiAgICAgIHRoaXMuYXBwZW5kVGFibGUoZWRpdG9yLCByb3dDb3VudCwgY29sQ291bnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVUYWJsZUhUTUwocm93Q291bnQ6IG51bWJlciwgY29sQ291bnQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgdGFibGVIVE1MID0gJzx0YWJsZSBzdHlsZT1cImZvbnQtc2l6ZTogMTRweDsgd2lkdGg6IDEwMCU7IGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1wiPic7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd0NvdW50OyBpKyspIHtcclxuICAgICAgdGFibGVIVE1MICs9ICc8dHI+JztcclxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2xDb3VudDsgaisrKSB7XHJcbiAgICAgICAgdGFibGVIVE1MICs9IGA8dGQgc3R5bGU9XCJib3JkZXI6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgaGVpZ2h0OiAyZW07IHBhZGRpbmc6IC40ZW07IFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJ0ZXh0Ym94XCI+PC90ZD5gO1xyXG4gICAgICB9XHJcbiAgICAgIHRhYmxlSFRNTCArPSAnPC90cj4nO1xyXG4gICAgfVxyXG4gICAgdGFibGVIVE1MICs9ICc8L3RhYmxlPic7XHJcbiAgICByZXR1cm4gdGFibGVIVE1MO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBlbmRUYWJsZShlZGl0b3I6IEhUTUxFbGVtZW50LCByb3dDb3VudDogbnVtYmVyLCBjb2xDb3VudDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBjb25zdCB0YWJsZUhUTUwgPSB0aGlzLmNyZWF0ZVRhYmxlSFRNTChyb3dDb3VudCwgY29sQ291bnQpO1xyXG4gICAgZWRpdG9yLmlubmVySFRNTCArPSB0YWJsZUhUTUw7XHJcbiAgICBjb25zdCBsYXN0SW5zZXJ0ZWRUYWJsZSA9IGVkaXRvci5xdWVyeVNlbGVjdG9yKCd0YWJsZTpsYXN0LWNoaWxkJykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICB0aGlzLnNldEN1cnNvclRvRmlyc3RDZWxsKGxhc3RJbnNlcnRlZFRhYmxlKTtcclxuICAgIGVkaXRvci5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc1NlbGVjdGlvbkluc2lkZUVkaXRvcihlZGl0b3I6IEhUTUxFbGVtZW50LCBzZWxlY3Rpb246IFNlbGVjdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFzZWxlY3Rpb24ucmFuZ2VDb3VudCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgbGV0IG5vZGUgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKS5jb21tb25BbmNlc3RvckNvbnRhaW5lcjtcclxuICAgIHdoaWxlIChub2RlKSB7XHJcbiAgICAgIGlmIChub2RlID09PSBlZGl0b3IpIHJldHVybiB0cnVlO1xyXG4gICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlITtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Q3Vyc29yVG9GaXJzdENlbGwodGFibGU6IEhUTUxFbGVtZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBmaXJzdENlbGwgPSB0YWJsZS5xdWVyeVNlbGVjdG9yKCd0cjpmaXJzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCwgdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQnKSBhcyBIVE1MRWxlbWVudDtcclxuICAgIGlmIChmaXJzdENlbGwpIHtcclxuICAgICAgLy8gZmlyc3RDZWxsLnNldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJywgJ3RydWUnKTtcclxuICAgICAgZmlyc3RDZWxsLmZvY3VzKCk7XHJcbiAgICAgIGNvbnN0IG5ld1JhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgICAgbmV3UmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGZpcnN0Q2VsbCk7IC8vIFNlbGVjdCB0aGUgY29udGVudHMgb2YgdGhlIGNlbGxcclxuICAgICAgbmV3UmFuZ2UuY29sbGFwc2UodHJ1ZSk7IC8vIENvbGxhcHNlIHRvIHRoZSBzdGFydFxyXG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICAgIGlmIChzZWxlY3Rpb24pIHtcclxuICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKG5ld1JhbmdlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5zZXJ0UGFnZUJyZWFrKCk6IHZvaWQge1xyXG4gICAgY29uc3QgcGFnZUJyZWFrID0gYDxkaXYgc3R5bGU9XCJwYWdlLWJyZWFrLWFmdGVyOiBhbHdheXM7XCI+PGJyIC8+PC9kaXY+YDtcclxuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRIVE1MJywgZmFsc2UsIHBhZ2VCcmVhayk7XHJcbiAgfVxyXG5cclxuICBzdWJtaXRDb250ZW50KCk6IHZvaWQge1xyXG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudDtcclxuICAgIGlmKCFlZGl0b3IpIHJldHVybjtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSBlZGl0b3IuaW5uZXJIVE1MOyAvLyBHZXQgdGhlIEhUTUwgY29udGVudCBmcm9tIHRoZSBlZGl0b3JcclxuICAgIGNvbnN0IHBsYWluVGV4dENvbnRlbnQgPSBlZGl0b3IuaW5uZXJUZXh0OyAvLyBPcHRpb25hbGx5LCBnZXQgcGxhaW4gdGV4dCBjb250ZW50XHJcbiAgICBpZiAoIWVkaXRvci5pbm5lckhUTUwudHJpbSgpKSB7XHJcbiAgICAgIGVkaXRvci5pbm5lckhUTUwgPSAnPHAgc3R5bGU9XCJmb250LXNpemU6MTRweDsgZm9udC13ZWlnaHQ6bm9ybWFsO1wiPlxcdTIwMEI8L3A+JztcclxuICAgICAgLy8gdGhpcy5lbnN1cmVQYXJhZ3JhcGhBbmRGb2N1cygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vbkNoYW5nZShjb250ZW50KTtcclxuICB9XHJcblxyXG4gIC8vU2lnbmF0dXJlXHJcblxyXG4gIGNsb3NlU2lnbkRpYWxvZygpIHtcclxuICAgIGNvbnN0IG1vZGFsRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2lnbmF0dXJlRGlhbG9nJyk7XHJcbiAgICBjb25zdCBtb2RhbCA9IGJvb3RzdHJhcC5Nb2RhbC5nZXRJbnN0YW5jZShtb2RhbEVsISk7XHJcbiAgICBtb2RhbD8uaGlkZSgpO1xyXG4gIH1cclxuXHJcbiAgc3VibWl0U2lnbkRpYWxvZygpIHtcclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnNpZ25hdHVyZVBhZC50b0RhdGFVUkwoJ2ltYWdlL3BuZycpO1xyXG4gICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICB0aGlzLmluc2VydEltYWdlSW5FZGl0b3IoZGF0YSk7XHJcbiAgICB0aGlzLmNsb3NlU2lnbkRpYWxvZygpO1xyXG4gIH1cclxuXHJcbiAgdW5kb1NpZ25EaWFsb2coKXtcclxuICAgIHRoaXMuc2lnbmF0dXJlUGFkLmNsZWFyKCk7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZGltZW5zaW9uXCIgPlxyXG4gIDxkaXYgY2xhc3M9XCJyaWNoLXRleHQtZWRpdG9yXCI+XHJcbiAgICA8IS0tIFRvb2xiYXIgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwidG9vbGJhclwiPlxyXG4gICAgICA8c2VsZWN0ICpuZ0lmPVwiZWRpdG9yT3B0aW9ucz8ub3B0aW9ucz8udGV4dEZvcm1hdCA/PyB0cnVlXCIgY2xhc3M9XCJzZWxlY3Qtd3JhcHBlclwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRIZWFkXCIgKGNoYW5nZSk9XCJzZXRIZWFkaW5nKCRldmVudClcIj5cclxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiUFwiIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4ICFpbXBvcnRhbnQ7XCI+UGFyYWdyYXBoPC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkgxXCIgc3R5bGU9XCJmb250LXNpemU6IDMycHggIWltcG9ydGFudDsgZm9udC13ZWlnaHQ6IGJvbGQgIWltcG9ydGFudDtcIj5IMTwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCJIMlwiIHN0eWxlPVwiZm9udC1zaXplOiAyOHB4ICFpbXBvcnRhbnQ7IGZvbnQtd2VpZ2h0OiBib2xkICFpbXBvcnRhbnQ7XCI+SDI8L29wdGlvbj5cclxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiSDNcIiBzdHlsZT1cImZvbnQtc2l6ZTogMjRweCAhaW1wb3J0YW50OyBmb250LXdlaWdodDogYm9sZCAhaW1wb3J0YW50O1wiPkgzPC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkg0XCIgc3R5bGU9XCJmb250LXNpemU6IDIwcHggIWltcG9ydGFudDsgZm9udC13ZWlnaHQ6IGJvbGQgIWltcG9ydGFudDtcIj5INDwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCJINVwiIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4ICFpbXBvcnRhbnQ7IGZvbnQtd2VpZ2h0OiA2MDAgIWltcG9ydGFudDtcIj5INTwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCJINlwiIHN0eWxlPVwiZm9udC1zaXplOiAxNnB4ICFpbXBvcnRhbnQ7IGZvbnQtd2VpZ2h0OiA2MDAgIWltcG9ydGFudDtcIj5INjwvb3B0aW9uPlxyXG4gICAgICA8L3NlbGVjdD5cclxuICAgICAgPHNlbGVjdCAqbmdJZj1cImVkaXRvck9wdGlvbnM/Lm9wdGlvbnM/LmZvbnRTaXplID8/IHRydWVcIiBjbGFzcz1cInNlbGVjdC13cmFwcGVyXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEZvbnRcIlxyXG4gICAgICAgIChjaGFuZ2UpPVwic2V0Rm9udFNpemUoJGV2ZW50KVwiPlxyXG4gICAgICAgIDxvcHRpb24gc3R5bGU9XCJmb250LXNpemU6IDEycHggIWltcG9ydGFudDtcIiB2YWx1ZT1cIjEyXCI+MTJweDwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gc3R5bGU9XCJmb250LXNpemU6IDE0cHggIWltcG9ydGFudDtcIiB2YWx1ZT1cIjE0XCIgc2VsZWN0ZWQ+MTRweDwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gc3R5bGU9XCJmb250LXNpemU6IDE2cHggIWltcG9ydGFudDtcIiB2YWx1ZT1cIjE2XCI+MTZweDwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gc3R5bGU9XCJmb250LXNpemU6IDE4cHggIWltcG9ydGFudDtcIiB2YWx1ZT1cIjE4XCI+MThweDwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gc3R5bGU9XCJmb250LXNpemU6IDIwcHggIWltcG9ydGFudDtcIiB2YWx1ZT1cIjIwXCI+MjBweDwvb3B0aW9uPiAgXHJcbiAgICAgICAgPG9wdGlvbiBzdHlsZT1cImZvbnQtc2l6ZTogMjRweCAhaW1wb3J0YW50O1wiIHZhbHVlPVwiMjRcIj4yNHB4PC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiBzdHlsZT1cImZvbnQtc2l6ZTogMjhweCAhaW1wb3J0YW50O1wiIHZhbHVlPVwiMjhcIj4yOHB4PC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiBzdHlsZT1cImZvbnQtc2l6ZTogMzJweCAhaW1wb3J0YW50O1wiIHZhbHVlPVwiMzJcIj4zMnB4PC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiBzdHlsZT1cImZvbnQtc2l6ZTogNDhweCAhaW1wb3J0YW50O1wiIHZhbHVlPVwiNDhcIj40OHB4PC9vcHRpb24+XHJcbiAgICAgIDwvc2VsZWN0PlxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwiZWRpdG9yT3B0aW9ucz8ub3B0aW9ucz8uYm9sZCA/PyB0cnVlXCIgKGNsaWNrKT1cImZvcm1hdCgnYm9sZCcpXCIgdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJCb2xkXCIgdGl0bGU9XCJCb2xkXCIgPlxyXG4gICAgICAgIDxzdmcgIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCIgdmlld0JveD1cIi02LjUgMCAyOCAzMlwiIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGcgaWQ9XCJTVkdSZXBvX2JnQ2FycmllclwiIHN0cm9rZS13aWR0aD1cIjBcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+IDx0aXRsZT5ib2xkPC90aXRsZT4gPHBhdGggZD1cIk0wIDI1LjUzMXYxLjM0NGMxLjA2My0wLjAzMSAxLjkzOC0wLjA2MyAyLjU2My0wLjA5NCAwLjYyNSAwIDEuMDk0LTAuMDMxIDEuMzEzLTAuMDMxIDEuNjU2LTAuMTI1IDMuMDYzLTAuMjE5IDQuMjgxLTAuMTg4bDIuODEzIDAuMDYzYzIuNDM4IDAgNC4yNS0wLjMxMyA1Ljc1LTEgMC43MTktMC4zNDQgMS4zNDQtMC44NDQgMS45NjktMS41MzEgMC40NjktMC40NjkgMC44MTMtMS4wMzEgMS4wMzEtMS42NTYgMC4yNS0wLjg0NCAwLjM3NS0xLjU5NCAwLjM3NS0yLjI4MSAwLTIuNS0xLjcxOS00LjYyNS01LjA5NC01LjQwNiAwLjUzMS0wLjI1IDEuMDMxLTAuNSAxLjM3NS0wLjY4OHMwLjYyNS0wLjMxMyAwLjc4MS0wLjQzOGMxLjE4OC0wLjg3NSAxLjc4MS0xLjkwNiAxLjc4MS0zLjI4MSAwLTAuNTk0LTAuMDk0LTEuMTg4LTAuMjgxLTEuNzE5LTAuMzc1LTEuMDk0LTEuMjE5LTItMi40MDYtMi41NjMtMC41MzEtMC4zMTMtMS4wMzEtMC40NjktMS4zNzUtMC41MzEtMC45MzgtMC4yNS0xLjg0NC0wLjM3NS0yLjcxOS0wLjM3NWgtMS4wOTRjLTAuMjE5IDAtMC40MDYgMC0wLjUzMS0wLjAzMWgtMC41Yy0wLjA2MyAwLTAuMTU2IDAtMC4yNSAwLjAzMWgtMC42MjVsLTUuNDA2IDAuMTU2LTMuNzE5IDAuMDk0IDAuMDYzIDEuMTg4YzAuODc1IDAuMTI1IDEuNDA2IDAuMTg4IDEuNjI1IDAuMTg4IDAuNDM4IDAgMC43ODEgMC4wOTQgMC45NjkgMC4yMTkgMC4wOTQgMCAwLjE1NiAwLjA2MyAwLjE4OCAwLjEyNSAwLjA2MyAwLjIxOSAwLjEyNSAwLjY4OCAwLjE1NiAxLjU2MyAwLjA2MyAxLjU2MyAwLjA2MyAyLjgxMyAwLjA2MyAzLjc1IDAuMDMxIDAuOTY5IDAuMDMxIDEuNjI1IDAuMDk0IDJ2Ny4wMzFjMCAxLjIxOS0wLjAzMSAyLjEyNS0wLjE1NiAyLjc1LTAuMDMxIDAuMjE5LTAuMTI1IDAuNDM4LTAuMjgxIDAuNjg4LTAuNDM4IDAuMTg4LTEgMC4zNzUtMS43NSAwLjQ2OS0wLjM3NSAwLjA2My0wLjcxOSAwLjEyNS0xIDAuMTU2ek03LjcxOSAxNC4yODF2LTIuNDY5YzAuMDYzLTEuNzE5IDAtMi45NjktMC4wMzEtMy45NjktMC4wNjMtMC40MzgtMC4wNjMtMC44NDQtMC4wNjMtMS4wNjMgMC43NS0wLjE1NiAxLjM0NC0wLjIxOSAxLjg0NC0wLjIxOSAxLjYyNSAwIDIuODQ0IDAuMzQ0IDMuNjU2IDEuMDk0IDAuODEzIDAuNjg4IDEuMjE5IDEuNTYzIDEuMjE5IDIuNjU2IDAgMi45NjktMS43NSA0LjA5NC01LjA2MyA0LjA5NC0wLjU2MyAwLTEuMDk0LTAuMDMxLTEuNTYzLTAuMTI1ek03LjcxOSAyMC40MDZ2LTQuNWMwLjMxMy0wLjA2MyAwLjc1LTAuMTI1IDEuNDM4LTAuMTI1IDEuNTk0LTAuMDMxIDIuODEzIDAuMTI1IDMuNTYzIDAuNDM4IDEuNTMxIDAuNTYzIDIuNTk0IDIuMTg4IDIuNTk0IDQuMzQ0IDAgMS4wMzEtMC4yMTkgMS44NDQtMC41NjMgMi41NjMtMC4zNzUgMC43MTktMC45MDYgMS4yMTktMS43MTkgMS41OTQtMS42NTYgMC43ODEtMy43MTkgMC43MTktNS4xMjUgMC4xMjUtMC4wOTQtMC4yNS0wLjEyNS0wLjQzOC0wLjEyNS0wLjU5NHpcIj48L3BhdGg+IDwvZz48L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwiZWRpdG9yT3B0aW9ucz8ub3B0aW9ucz8uaXRhbGljID8/IHRydWVcIiAoY2xpY2spPVwiZm9ybWF0KCdpdGFsaWMnKVwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiSXRhbGljXCIgdGl0bGU9XCJJdGFsaWNcIj5cclxuICAgICAgICA8c3ZnIHZpZXdCb3g9XCI0IDAgMjAgMjJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48ZyBpZD1cIlNWR1JlcG9fYmdDYXJyaWVyXCIgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9fdHJhY2VyQ2FycmllclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9faWNvbkNhcnJpZXJcIj4gPGcgaWQ9XCJFZGl0IC8gSXRhbGljXCI+IDxwYXRoIGlkPVwiVmVjdG9yXCIgZD1cIk04IDE5SDEwTTEwIDE5SDEyTTEwIDE5TDE0IDVNMTIgNUgxNE0xNCA1SDE2XCIgW2F0dHIuc3Ryb2tlXT1cImljb25Db2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+IDwvZz4gPC9nPjwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJlZGl0b3JPcHRpb25zPy5vcHRpb25zPy51bmRlcmxpbmUgPz8gdHJ1ZVwiIChjbGljayk9XCJmb3JtYXQoJ3VuZGVybGluZScpXCIgdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJVbmRlcmxpbmVcIiB0aXRsZT1cIlVuZGVybGluZVwiPlxyXG4gICAgICAgIDxzdmcgdmlld0JveD1cIjQgMCAxOCAyMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPiA8ZyBpZD1cIkVkaXQgLyBVbmRlcmxpbmVcIj4gPHBhdGggaWQ9XCJWZWN0b3JcIiBkPVwiTTYgMTlIMThNOCA1VjExQzggMTMuMjA5MSA5Ljc5MDg2IDE1IDEyIDE1QzE0LjIwOTEgMTUgMTYgMTMuMjA5MSAxNiAxMVY1XCIgW2F0dHIuc3Ryb2tlXT1cImljb25Db2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+IDwvZz4gPC9nPjwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJlZGl0b3JPcHRpb25zPy5vcHRpb25zPy5zdHJpa2V0aHJvdWdoID8/IHRydWVcIiAoY2xpY2spPVwiZm9ybWF0KCdzdHJpa2V0aHJvdWdoJylcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIlN0cmlrZXRocm91Z2hcIiB0aXRsZT1cIlN0cmlrZXRocm91Z2hcIj5cclxuICAgICAgICA8c3ZnIHZpZXdCb3g9XCI0IDAgMjAgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48ZyBpZD1cIlNWR1JlcG9fYmdDYXJyaWVyXCIgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9fdHJhY2VyQ2FycmllclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9faWNvbkNhcnJpZXJcIj4gPGcgaWQ9XCJFZGl0IC8gU3RyaWtldGhyb3VnaFwiPiA8cGF0aCBpZD1cIlZlY3RvclwiIGQ9XCJNMTIuMDAwNSAxMi4wMDAxQzEyLjg5NTkgMTIuMDAwMSAxMy43NzQ5IDEyLjE5MjUgMTQuNTQ1NyAxMi41NTcxQzE0Ljg5MzkgMTIuNzIxOCAxNS4yMTQ2IDEyLjkxOTIgMTUuNTAwOSAxMy4xNDM3QzE1Ljg0ODQgMTMuNDE2MiAxNi4xNDU3IDEzLjcyOSAxNi4zODIyIDE0LjA3MzJDMTYuODEzNiAxNC43MDA5IDE3LjAyNjMgMTUuNDA5NiAxNi45OTgyIDE2LjEyNTZDMTYuOTcgMTYuODQxNiAxNi43MDIgMTcuNTM4NSAxNi4yMjIyIDE4LjE0MzNDMTUuNzQyNCAxOC43NDgxIDE1LjA2ODQgMTkuMjM4NiAxNC4yNzA1IDE5LjU2MzhDMTMuNDcyNyAxOS44ODkgMTIuNTgwMiAyMC4wMzczIDExLjY4NjUgMTkuOTkyM0MxMC43OTI4IDE5Ljk0NzMgOS45MzEwNCAxOS43MTA4IDkuMTkwNDMgMTkuMzA4MkM4LjQ0OTgyIDE4LjkwNTUgNy44NTc4MiAxOC4zNTE0IDcuNDc2NTYgMTcuNzAzMk0xMi4wMDA1IDEyLjAwMDFINE0xMi4wMDA1IDEyLjAwMDFIMjBNMTYuNTI0MyA2LjI5NzE4QzE2LjE0MyA1LjY0OSAxNS41NTEyIDUuMDk0NjIgMTQuODEwNSA0LjY5MTk3QzE0LjA2OTkgNC4yODkzMiAxMy4yMDc2IDQuMDUyODcgMTIuMzE0IDQuMDA3ODlDMTEuNDIwMyAzLjk2MjkxIDEwLjUyNzggNC4xMTA5MSA5LjcyOTk4IDQuNDM2MTNDOC45MzIxMyA0Ljc2MTM1IDguMjU4MTIgNS4yNTIwNSA3Ljc3ODMyIDUuODU2ODlDNy4yOTg1MiA2LjQ2MTczIDcuMDMwNTcgNy4xNTg4NSA3LjAwMjQ0IDcuODc0ODVDNi45OTQyIDguMDg0NjMgNy4wMDY2OSA4LjI5MzQ1IDcuMDM5MjQgOC41MDAxNFwiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPiA8L2c+IDwvZz48L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwiZWRpdG9yT3B0aW9ucz8ub3B0aW9ucz8uYWxpZ25MZWZ0ID8/IHRydWVcIiAoY2xpY2spPVwiZm9ybWF0KCdqdXN0aWZ5TGVmdCcpXCIgdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJBbGlnbiBMZWZ0XCIgdGl0bGU9XCJBbGlnbiBMZWZ0XCIgPlxyXG4gICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48ZyBpZD1cIlNWR1JlcG9fYmdDYXJyaWVyXCIgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9fdHJhY2VyQ2FycmllclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9faWNvbkNhcnJpZXJcIj4gPHBhdGggZD1cIk0xMSAxSDFWM0gxMVYxWlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCI+PC9wYXRoPiA8cGF0aCBkPVwiTTEgNUgxNVY3SDFWNVpcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiPjwvcGF0aD4gPHBhdGggZD1cIk0xMSA5SDFWMTFIMTFWOVpcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiPjwvcGF0aD4gPHBhdGggZD1cIk0xNSAxM0gxVjE1SDE1VjEzWlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCI+PC9wYXRoPiA8L2c+PC9zdmc+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImVkaXRvck9wdGlvbnM/Lm9wdGlvbnM/LmFsaWduQ2VudGVyID8/IHRydWVcIiAoY2xpY2spPVwiZm9ybWF0KCdqdXN0aWZ5Q2VudGVyJylcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIkNlbnRlclwiIHRpdGxlPVwiQWxpZ24gQ2VudGVyXCIgPlxyXG4gICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48ZyBpZD1cIlNWR1JlcG9fYmdDYXJyaWVyXCIgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9fdHJhY2VyQ2FycmllclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9faWNvbkNhcnJpZXJcIj4gPHBhdGggZD1cIk0xNSAxSDFWM0gxNVYxWlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCI+PC9wYXRoPiA8cGF0aCBkPVwiTTEgNUgxNVY3SDFWNVpcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiPjwvcGF0aD4gPHBhdGggZD1cIk0xNSA5SDFWMTFIMTVWOVpcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiPjwvcGF0aD4gPHBhdGggZD1cIk0xMSAxM0gxVjE1SDExVjEzWlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCI+PC9wYXRoPiA8L2c+PC9zdmc+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImVkaXRvck9wdGlvbnM/Lm9wdGlvbnM/LmFsaWduUmlnaHQgPz8gdHJ1ZVwiIChjbGljayk9XCJmb3JtYXQoJ2p1c3RpZnlSaWdodCcpXCIgdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJBbGlnbiBSaWdodFwiIHRpdGxlPVwiQWxpZ24gUmlnaHRcIiA+XHJcbiAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGcgaWQ9XCJTVkdSZXBvX2JnQ2FycmllclwiIHN0cm9rZS13aWR0aD1cIjBcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+IDxwYXRoIGQ9XCJNMTUgMUg1VjNIMTVWMVpcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiPjwvcGF0aD4gPHBhdGggZD1cIk0xIDVIMTVWN0gxVjVaXCIgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIj48L3BhdGg+IDxwYXRoIGQ9XCJNMTUgOUg1VjExSDE1VjlaXCIgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIj48L3BhdGg+IDxwYXRoIGQ9XCJNMTUgMTNIMVYxNUgxNVYxM1pcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiPjwvcGF0aD4gPC9nPjwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJlZGl0b3JPcHRpb25zPy5vcHRpb25zPy5qdXN0aWZ5ID8/IHRydWVcIiAoY2xpY2spPVwiZm9ybWF0KCdqdXN0aWZ5RnVsbCcpXCIgdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJKdXN0aWZ5XCIgdGl0bGU9XCJKdXN0aWZ5XCIgPlxyXG4gICAgICAgIDxzdmcgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIiB2aWV3Qm94PVwiMCAtMi41IDI5IDI5XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPjxwYXRoIGQ9XCJtMS4zMzQgMi42NjZoMjYuNjY1Yy4wMTEgMCAuMDI0LjAwMS4wMzcuMDAxLjczNyAwIDEuMzM0LS41OTcgMS4zMzQtMS4zMzRzLS41OTctMS4zMzQtMS4zMzQtMS4zMzRjLS4wMTMgMC0uMDI2IDAtLjAzOS4wMDFoLjAwMi0yNi42NjVjLS43Mi4wMjEtMS4yOTYuNjEtMS4yOTYgMS4zMzNzLjU3NiAxLjMxMiAxLjI5NCAxLjMzM2guMDAyelwiPjwvcGF0aD48cGF0aCBkPVwibTI3Ljk5OSA1LjMzM2gtMjYuNjY1Yy0uNzIuMDIxLTEuMjk2LjYxLTEuMjk2IDEuMzMzcy41NzYgMS4zMTIgMS4yOTQgMS4zMzNoLjAwMiAyNi42NjVjLjAxMSAwIC4wMjQuMDAxLjAzNy4wMDEuNzM3IDAgMS4zMzQtLjU5NyAxLjMzNC0xLjMzNHMtLjU5Ny0xLjMzNC0xLjMzNC0xLjMzNGMtLjAxMyAwLS4wMjYgMC0uMDM5LjAwMXpcIj48L3BhdGg+PHBhdGggZD1cIm0yNy45OTkgMTAuNjY3aC0yNi42NjVjLS43Mi4wMjEtMS4yOTYuNjEtMS4yOTYgMS4zMzNzLjU3NiAxLjMxMiAxLjI5NCAxLjMzM2guMDAyIDI2LjY2NWMuNzItLjAyMSAxLjI5Ni0uNjEgMS4yOTYtMS4zMzNzLS41NzYtMS4zMTItMS4yOTQtMS4zMzN6XCI+PC9wYXRoPjxwYXRoIGQ9XCJtMjcuOTk5IDIxLjMzM2gtMjYuNjY1Yy0uNzIuMDIxLTEuMjk2LjYxLTEuMjk2IDEuMzMzcy41NzYgMS4zMTIgMS4yOTQgMS4zMzNoLjAwMiAyNi42NjVjLjcyLS4wMjEgMS4yOTYtLjYxIDEuMjk2LTEuMzMzcy0uNTc2LTEuMzEyLTEuMjk0LTEuMzMzelwiPjwvcGF0aD48cGF0aCBkPVwibTI3Ljk5OSAxNmgtMjYuNjY1Yy0uNzIuMDIxLTEuMjk2LjYxLTEuMjk2IDEuMzMzcy41NzYgMS4zMTIgMS4yOTQgMS4zMzNoLjAwMiAyNi42NjVjLjcyLS4wMjEgMS4yOTYtLjYxIDEuMjk2LTEuMzMzcy0uNTc2LTEuMzEyLTEuMjk0LTEuMzMzelwiPjwvcGF0aD48L2c+PC9zdmc+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImVkaXRvck9wdGlvbnM/Lm9wdGlvbnM/LmJ1bGxldExpc3QgPz8gdHJ1ZVwiIChjbGljayk9XCJmb3JtYXQoJ2luc2VydFVub3JkZXJlZExpc3QnKVwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiVW5vcmRlcmVkIExpc3RcIiB0aXRsZT1cIkJ1bGxldCBMaXN0XCIgPlxyXG4gICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCIgdmlld0JveD1cIjAgMCAzNiA0OFwiPjxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPjxwYXRoIGQ9XCJNOCAyMWMtMS42NiAwLTMgMS4zNC0zIDNzMS4zNCAzIDMgMyAzLTEuMzQgMy0zLTEuMzQtMy0zLTN6TTggOWMtMS42NiAwLTMgMS4zNC0zIDNzMS4zNCAzIDMgMyAzLTEuMzQgMy0zLTEuMzQtMy0zLTN6bTAgMjQuMzNjLTEuNDcgMC0yLjY3IDEuMTktMi42NyAyLjY3czEuMiAyLjY3IDIuNjcgMi42NyAyLjY3LTEuMTkgMi42Ny0yLjY3LTEuMi0yLjY3LTIuNjctMi42N3pNMTQgMzhoMjh2LTRIMTR2NHptMC0xMmgyOHYtNEgxNHY0em0wLTE2djRoMjh2LTRIMTR6XCI+PC9wYXRoPjwvZz48L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwiZWRpdG9yT3B0aW9ucz8ub3B0aW9ucz8ubnVtYmVyZWRMaXN0ID8/IHRydWVcIiAoY2xpY2spPVwiZm9ybWF0KCdpbnNlcnRPcmRlcmVkTGlzdCcpXCIgdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJPcmRlcmVkIExpc3RcIiB0aXRsZT1cIk51bWJlcmVkIExpc3RcIiA+XHJcbiAgICAgICAgPHN2ZyBbYXR0ci5maWxsXT1cImljb25Db2xvclwiIHZlcnNpb249XCIxLjFcIiBpZD1cIkNhcGFfMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIiB2aWV3Qm94PVwiMCAwIDk0LjQ3OSA5NC40NzlcIiB4bWw6c3BhY2U9XCJwcmVzZXJ2ZVwiPjxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPiA8Zz4gPGc+IDxwYXRoIGQ9XCJNOTIuNDc5LDYuODIxSDI2LjgyM2MtMS4xMDQsMC0yLDAuODk2LTIsMlYxOS41OGMwLDEuMTA0LDAuODk2LDIsMiwyaDY1LjY1NmMxLjEwNCwwLDItMC44OTYsMi0yVjguODIxIEM5NC40NzksNy43MTcsOTMuNTg0LDYuODIxLDkyLjQ3OSw2LjgyMXpcIj48L3BhdGg+IDxwYXRoIGQ9XCJNOTIuNDc5LDQwLjQ1N0gyNi44MjNjLTEuMTA0LDAtMiwwLjg5Ni0yLDJ2MTAuNzYxYzAsMS4xMDQsMC44OTYsMiwyLDJoNjUuNjU2YzEuMTA0LDAsMi0wLjg5NiwyLTJWNDIuNDU3IEM5NC40NzksNDEuMzUyLDkzLjU4NCw0MC40NTcsOTIuNDc5LDQwLjQ1N3pcIj48L3BhdGg+IDxwYXRoIGQ9XCJNOTIuNDc5LDc1LjEwOUgyNi44MjNjLTEuMTA0LDAtMiwwLjg5Ni0yLDJ2MTAuNzU5YzAsMS4xMDQsMC44OTYsMiwyLDJoNjUuNjU2YzEuMTA0LDAsMi0wLjg5NiwyLTJWNzcuMTA5IEM5NC40NzksNzYuMDA0LDkzLjU4NCw3NS4xMDksOTIuNDc5LDc1LjEwOXpcIj48L3BhdGg+IDxwYXRoIGQ9XCJNMS44NDIsMTEuMTA0YzAuNDIzLDAuMDUxLDAuODQ4LTAuMDgsMS4xNjctMC4zNmwwLjkxNC0wLjc5OXYxMi45NzNjMCwwLjgyOCwwLjY3MiwxLjUsMS41LDEuNWgxLjU0NiBjMC44MjgsMCwxLjUtMC42NzIsMS41LTEuNVY1LjU2N2MwLTAuODI4LTAuNjcyLTEuNS0xLjUtMS41SDUuMzc4Yy0wLjM1NiwwLTAuNzAxLDAuMTI3LTAuOTczLDAuMzU4TDAuNTI3LDcuNzI4IGMtMC41ODksMC41MDEtMC43LDEuMzY5LTAuMjU2LDIuMDAzbDAuNTIyLDAuNzQ1QzEuMDQsMTAuODI1LDEuNDIsMTEuMDUzLDEuODQyLDExLjEwNHpcIj48L3BhdGg+IDxwYXRoIGQ9XCJNMi41NDYsMzcuNWMtMC42NDcsMC4yMy0xLjA1NiwwLjg3Mi0wLjk5LDEuNTU2bDAuMDk2LDAuOTk5YzAuMDQ4LDAuNDk3LDAuMzM5LDAuOTM4LDAuNzc4LDEuMTc2IGMwLjQzOCwwLjIzOCwwLjk2NywwLjI0MywxLjQwOSwwLjAxMWMxLjE4LTAuNjE1LDEuOTIzLTAuNzc1LDIuOTIyLTAuNTM0YzAuNzEsMC4xNjMsMS4xODgsMC41ODYsMS40MzgsMS4yMjUgYzAuMzc4LDEuMTQzLDAuMzk1LDIuOTU3LTIuODU0LDYuODczbC0yLjUwNiwyLjk5NmMtMC41ODksMC42ODgtMC45OSwxLjExOS0xLjMwMiwxLjQwNGMtMC4zMTIsMC4yODQtMC40ODgsMC42ODgtMC40ODgsMS4xMDcgdjEuNDc1YzAsMC44MjgsMC42NzIsMS41LDEuNSwxLjVoOS4xMzJjMC44MjgsMCwxLjUtMC42NzIsMS41LTEuNVY1NS4wMWMwLTAuODI4LTAuNjcyLTEuNS0xLjUtMS41SDYuODk2IGMwLjQ1OC0wLjUxNSwxLjAzNy0xLjIxMSwxLjcxNi0yLjA2M2MyLjgwMy0zLjQ2OCw1LjA2MS02LjY0NSw0LjI5Mi0xMC4zNzZjLTAuMzA5LTEuNjcyLTEuMjQ3LTIuOTY2LTIuNzMxLTMuNzUyIGMtMC44MjYtMC40MjQtMS44NzktMC42MzktMy4xMjctMC42MzlDNS42MjksMzYuNjgsNC4wMzEsMzYuOTcxLDIuNTQ2LDM3LjV6XCI+PC9wYXRoPiA8cGF0aCBkPVwiTTEwLjQ5MSw3OS41MTZjMC4yNS0wLjEzNSwwLjQ4Ny0wLjI4OSwwLjc0LTAuNDgzYzEuNzE4LTEuMzEzLDEuODAxLTMuMzM1LDEuNzg2LTMuODg1IGMtMC4wMDEtMS44NzgtMC43MTItMy4zMTgtMi4xNjYtNC40MDFjLTEuMDI2LTAuNzctMi41MzQtMS4xNzctNC4zNjEtMS4xNzdjLTEuMzQ3LDAtMi43ODcsMC4yMTItNC4wNTcsMC41OTYgYy0wLjY2OCwwLjIwMi0xLjEwNywwLjgzOS0xLjA2MywxLjUzM2wwLjA1OCwwLjg4YzAuMDMxLDAuNDcxLDAuMjgsMC44OTYsMC42NzMsMS4xNTVjMC4zOTQsMC4yNTksMC44ODYsMC4zMTksMS4zMjcsMC4xNTkgYzAuODY0LTAuMzA3LDEuNTcxLTAuNDUsMi4yMjMtMC40NWMwLjIyOSwwLDAuNDU3LDAuMDE5LDAuNzIyLDAuMDYzYzAuOTQsMC4xMjcsMS41NjMsMC41NDksMS45LDEuMjgzIGMwLjIzNywwLjUyLDAuMTksMS40NDUtMC4wODMsMS44ODVjLTAuNjU0LDEuMDE0LTIuNDM4LDEuMjE3LTMuNDQzLDEuMjVjLTAuODEsMC4wMjQtMS40NTMsMC42ODgtMS40NTMsMS40OTh2MC42NTggYzAsMC44MjgsMC42ODcsMS41LDEuNTE1LDEuNWMxLjU3NSwwLDIuMzExLDAuMzA5LDIuNTk2LDAuNDg1YzAuNzM3LDAuNDY1LDEuMDY1LDEuMDQzLDEuMDY2LDEuOTE4IGMwLjAyNSwwLjkxMi0wLjM0OCwxLjYwNi0xLjEyOSwyLjEyMWMtMS4wMTQsMC42NTEtMi42NCwwLjY0Ny00LjUwNSwwLjAzMmMtMC40MzgtMC4xNDYtMC45MTgtMC4wODItMS4zMDIsMC4xNzUgYy0wLjM4NCwwLjI1NS0wLjYyOSwwLjY3Mi0wLjY2NSwxLjEzMmwtMC4wNjgsMC44NzJDMC43NSw4OC45NzMsMS4xMzUsODkuNTg4LDEuNzUsODkuODNjMC4zMywwLjEzLDAuNTUxLDAuMTgzLDEuMDIyLDAuMjgxIGMwLjg1NywwLjE5NiwxLjg0LDAuMzAyLDIuODQyLDAuMzAyYzEuNDkzLDAsNC4yNDgtMC4yNDcsNS45NDQtMS45MTljMS42NTctMS42OSwxLjk3NC00LjExLDEuNTYtNS43MjkgQzEyLjYzNiw4MC43MDQsMTEuNDYxLDc5Ljk0NiwxMC40OTEsNzkuNTE2elwiPjwvcGF0aD4gPC9nPiA8L2c+IDwvZz48L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwiZWRpdG9yT3B0aW9ucz8ub3B0aW9ucz8uaW1hZ2UgPz8gdHJ1ZVwiIGFyaWEtbGFiZWw9XCJJbnNlcnQgSW1hZ2VcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTsgZGlzcGxheTogaW5saW5lLWZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyO1wiIHRpdGxlPVwiSW5zZXJ0IEltYWdlXCIgPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIGFjY2VwdD1cIi5wbmcsLmpwZywuanBlZ1wiICAoY2hhbmdlKT1cImluc2VydEltYWdlVG9FZGl0b3IoJGV2ZW50KVwiXHJcbiAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogLTUwJTsgdG9wOiAwOyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyBvcGFjaXR5OiAwOyBjdXJzb3I6IHBvaW50ZXI7XCJcclxuICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XHJcbiAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMiAxIDIwIDIyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGcgaWQ9XCJTVkdSZXBvX2JnQ2FycmllclwiIHN0cm9rZS13aWR0aD1cIjBcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+IDxwYXRoIGQ9XCJNMTQuMjY0NyAxNS45Mzc3TDEyLjU0NzMgMTQuMjM0NkMxMS43NTggMTMuNDUxOSAxMS4zNjMzIDEzLjA2MDUgMTAuOTA4OSAxMi45MTM3QzEwLjUwOTIgMTIuNzg0NSAxMC4wNzkgMTIuNzg0NSA5LjY3OTIyIDEyLjkxMzdDOS4yMjQ4NSAxMy4wNjA1IDguODMwMTcgMTMuNDUxOSA4LjA0MDgyIDE0LjIzNDZMNC4wNDE5MyAxOC4yNjIyTTE0LjI2NDcgMTUuOTM3N0wxNC42MDYgMTUuNTk5MUMxNS40MTIgMTQuNzk5OSAxNS44MTQ5IDE0LjQwMDMgMTYuMjc3MyAxNC4yNTQ1QzE2LjY4MzkgMTQuMTI2MiAxNy4xMjA4IDE0LjEzMTIgMTcuNTI0NCAxNC4yNjg4QzE3Ljk4MzIgMTQuNDI1MyAxOC4zNzY5IDE0LjgzNCAxOS4xNjQyIDE1LjY1MTVMMjAgMTYuNTAwMU0xNC4yNjQ3IDE1LjkzNzdMMTguMjIgMTkuOTYyOE0xOC4yMiAxOS45NjI4QzE3Ljg3MDMgMjAgMTcuNDIxMyAyMCAxNi44IDIwSDcuMkM2LjA3OTg5IDIwIDUuNTE5ODQgMjAgNS4wOTIwMiAxOS43ODJDNC43MTU3IDE5LjU5MDMgNC40MDk3MyAxOS4yODQzIDQuMjE3OTkgMTguOTA4QzQuMTI1ODMgMTguNzI3MSA0LjA3MjY0IDE4LjUyMjYgNC4wNDE5MyAxOC4yNjIyTTE4LjIyIDE5Ljk2MjhDMTguNTAwNyAxOS45MzI5IDE4LjcxNzUgMTkuODc5MSAxOC45MDggMTkuNzgyQzE5LjI4NDMgMTkuNTkwMyAxOS41OTAzIDE5LjI4NDMgMTkuNzgyIDE4LjkwOEMyMCAxOC40ODAyIDIwIDE3LjkyMDEgMjAgMTYuOFYxM00xMSA0SDcuMkM2LjA3OTg5IDQgNS41MTk4NCA0IDUuMDkyMDIgNC4yMTc5OUM0LjcxNTcgNC40MDk3MyA0LjQwOTczIDQuNzE1NjkgNC4yMTc5OSA1LjA5MjAyQzQgNS41MTk4NCA0IDYuMDc5OSA0IDcuMlYxNi44QzQgMTcuNDQ2NiA0IDE3LjkwNjYgNC4wNDE5MyAxOC4yNjIyTTE4IDlWNk0xOCA2VjNNMTggNkgyMU0xOCA2SDE1XCIgW2F0dHIuc3Ryb2tlXT1cImljb25Db2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+IDwvZz48L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwiZWRpdG9yT3B0aW9ucz8ub3B0aW9ucz8udGFibGUgPz8gdHJ1ZVwiIChjbGljayk9XCJvcGVuVGFibGVEaWFsb2coJGV2ZW50KVwiIHR5cGU9XCJidXR0b25cIiAgdGl0bGU9XCJUYWJsZVwiXHJcbiAgICAgICAgYXJpYS1sYWJlbD1cIkNob29zZSB0YWJsZSByb3dzIGFuZCBjb2x1bW5zXCI+XHJcbiAgICAgICAgPHN2ZyB3aWR0aD1cIjI2cHhcIiBoZWlnaHQ9XCIyNnB4XCIgdmlld0JveD1cIjIgMTIgMjAgM1wiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPiA8cGF0aCBkPVwiTTMgOUgyMU0zIDE1SDIxTTkgOUw5IDIwTTE1IDlMMTUgMjBNNi4yIDIwSDE3LjhDMTguOTIwMSAyMCAxOS40ODAyIDIwIDE5LjkwOCAxOS43ODJDMjAuMjg0MyAxOS41OTAzIDIwLjU5MDMgMTkuMjg0MyAyMC43ODIgMTguOTA4QzIxIDE4LjQ4MDIgMjEgMTcuOTIwMSAyMSAxNi44VjcuMkMyMSA2LjA3OTkgMjEgNS41MTk4NCAyMC43ODIgNS4wOTIwMkMyMC41OTAzIDQuNzE1NjkgMjAuMjg0MyA0LjQwOTczIDE5LjkwOCA0LjIxNzk5QzE5LjQ4MDIgNCAxOC45MjAxIDQgMTcuOCA0SDYuMkM1LjA3OTkgNCA0LjUxOTg0IDQgNC4wOTIwMiA0LjIxNzk5QzMuNzE1NjkgNC40MDk3MyAzLjQwOTczIDQuNzE1NjkgMy4yMTc5OSA1LjA5MjAyQzMgNS41MTk4NCAzIDYuMDc5ODkgMyA3LjJWMTYuOEMzIDE3LjkyMDEgMyAxOC40ODAyIDMuMjE3OTkgMTguOTA4QzMuNDA5NzMgMTkuMjg0MyAzLjcxNTY5IDE5LjU5MDMgNC4wOTIwMiAxOS43ODJDNC41MTk4NCAyMCA1LjA3OTg5IDIwIDYuMiAyMFpcIiBbYXR0ci5zdHJva2VdPVwiaWNvbkNvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcGF0aD4gPC9nPjwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJlZGl0b3JPcHRpb25zPy5vcHRpb25zPy50YWJsZUhlYWRlciA/PyB0cnVlXCIgY2xhc3M9XCJtYi0xXCIgKGNsaWNrKT1cIm1ha2VGaXJzdFJvd0hlYWRlcigpXCIgdHlwZT1cImJ1dHRvblwiICBhcmlhLWxhYmVsPVwiTWFrZSBIZWFkZXJcIiB0aXRsZT1cIlRhYmxlIEhlYWRlclwiID5cclxuICAgICAgICA8c3ZnIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCIgdmlld0JveD1cIjAgMCAxOTIwIDE5MjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGcgaWQ9XCJTVkdSZXBvX2JnQ2FycmllclwiIHN0cm9rZS13aWR0aD1cIjBcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+IDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCIgZD1cIk0yMTMuMzMzIDBDOTUuNTEyNiAwIDAgOTUuNTEyNiAwIDIxMy4zMzNWMTcwNi42N0MwIDE4MjQuNDkgOTUuNTEyNiAxOTIwIDIxMy4zMzMgMTkyMEgxNzA2LjY3QzE4MjQuNDkgMTkyMCAxOTIwIDE4MjQuNDkgMTkyMCAxNzA2LjY3VjIxMy4zMzNDMTkyMCA5NS41MTI2IDE4MjQuNDkgMCAxNzA2LjY3IDBIMjEzLjMzM1pNMjY2LjY2NyA3NDYuNjY3QzIzNy4yMTEgNzQ2LjY2NyAyMTMuMzMzIDcyMi43ODggMjEzLjMzMyA2OTMuMzMzVjM3My4zMzNDMjEzLjMzMyAzNDMuODc4IDIzNy4yMTEgMzIwIDI2Ni42NjcgMzIwSDE2NTMuMzNDMTY4Mi43OSAzMjAgMTcwNi42NyAzNDMuODc4IDE3MDYuNjcgMzczLjMzM1Y2OTMuMzMzQzE3MDYuNjcgNzIyLjc4OCAxNjgyLjc5IDc0Ni42NjcgMTY1My4zMyA3NDYuNjY3SDI2Ni42NjdaXCI+PC9wYXRoPiA8L2c+PC9zdmc+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImVkaXRvck9wdGlvbnM/Lm9wdGlvbnM/LnNpZ25hdHVyZSA/PyB0cnVlXCIgKGNsaWNrKT1cIm9wZW5TaWduYXR1cmVEaWFsb2coKVwiIHR5cGU9XCJidXR0b25cIiAgdGl0bGU9XCJTaWduYXR1cmVcIlxyXG4gICAgICAgIGFyaWEtbGFiZWw9XCJDaG9vc2UgdGFibGUgcm93cyBhbmQgY29sdW1uc1wiPlxyXG4gICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAyOCAyOFwiIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIgZmlsbD1cIiMwMDAwMDBcIj48ZyBpZD1cIlNWR1JlcG9fYmdDYXJyaWVyXCIgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9fdHJhY2VyQ2FycmllclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9faWNvbkNhcnJpZXJcIj4gPCEtLSBVcGxvYWRlZCB0bzogU1ZHIFJlcG8sIHd3dy5zdmdyZXBvLmNvbSwgR2VuZXJhdG9yOiBTVkcgUmVwbyBNaXhlciBUb29scyAtLT4gPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+IDxnIGlkPVwi8J+UjS1Qcm9kdWN0LUljb25zXCIgc3Ryb2tlPVwibm9uZVwiIHN0cm9rZS13aWR0aD1cIjFcIiBmaWxsPVwibm9uZVwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj4gPGcgaWQ9XCJpY19mbHVlbnRfc2lnbmF0dXJlXzI4X3JlZ3VsYXJcIiBmaWxsPVwiIzIxMjEyMVwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIj4gPHBhdGggZD1cIk0xNi40Nzk4OTU2LDIxLjAwMTk1NzggTDE2Ljc1LDIxIEMxNy45NzAyMzUyLDIxIDE4LjYxMTI0NDEsMjEuNTA1ODAzMiAxOS40MDIwNjI3LDIyLjcwNDE2NjIgTDE5Ljc5NTgyNzgsMjMuMzEyNDQwOSBDMjAuMTAyODI2NiwyMy43NjY5MzggMjAuMjk0NDM3NCwyMy45NTczMjQ3IDIwLjUzNTc4NCwyNC4wNTY3OTI5IEMyMC45Njg0ODczLDI0LjIzNTEyNjYgMjEuMzI3MTAwOCwyNC4xNDc0NDQ2IDIyLjY0NDA3ODIsMjMuNTEzMzIxMyBMMjMuMDQ3MzI3MywyMy4zMTcwMzE5IEMyMy44NzA5OTgyLDIyLjkxMjY3MTEgMjQuNDMzMDI4NiwyMi42ODExNjA2IDI1LjA2ODA5ODMsMjIuNTIyMzkzMSBDMjUuNDY5OTQ0NSwyMi40MjE5MzE2IDI1Ljg3NzE0NTMsMjIuNjY2MjUyMSAyNS45Nzc2MDY5LDIzLjA2ODA5ODMgQzI2LjA3ODA2ODQsMjMuNDY5OTQ0NSAyNS44MzM3NDc5LDIzLjg3NzE0NTMgMjUuNDMxOTAxNywyMy45Nzc2MDY5IEMyNS4wMzcxNjA2LDI0LjA3NjI5MjIgMjQuNjU4OTQ2NSwyNC4yMTc4ODE5IDI0LjE2NDEzNjQsMjQuNDQ1ODk5NyBMMjMuMDA1NDg5OSwyNS4wMDMyNjczIEMyMS40Mzc2MzAyLDI1Ljc0MzY5NDQgMjAuOTA1OTAwOSwyNS44MzE3MzIxIDE5Ljk2NDIxNiwyNS40NDM2Mjc1IEMxOS4zMzkxMjM3LDI1LjE4NjAwMjggMTguOTgzNjc2NSwyNC44MTMyOTggMTguNDYzNTYzOSwyNC4wMTgwMjI3IEwxOC4yNjg4OTAzLDIzLjcxNDA4NDkgQzE3LjcwNzExMTIsMjIuODI4ODczMSAxNy40MDU3Nzk0LDIyLjUzODQ1MzggMTYuODY4ODQ0NCwyMi41MDM2NjU1IEwxNi43NSwyMi41IEMxNi4yMDE3MzA2LDIyLjUgMTYuMDkzMzEwNCwyMi41Njg0NTcyIDE0LjAwOTI4MSwyNC4xMTUwMjQxIEMxMi4yNjcwMzk1LDI1LjQwNzk0ODggMTAuOTM4MzM1OSwyNi4wMjU0OTg0IDkuMjQ4NjQyNDMsMjYuMDI1NDk4NCBDNy4xODg3Mjg2OSwyNi4wMjU0OTg0IDUuMjQ3NzMzNjcsMjUuNjQ3MDY3IDMuNDMxNDU4NzUsMjQuODkwNTM2MyBMNi4zMTM3NzgwMywyNC4yMjQxNzg0IEM3LjI1NzY5NDA0LDI0LjQyNTA3NjIgOC4yMzU2NzE0MywyNC41MjU0OTg0IDkuMjQ4NjQyNDMsMjQuNTI1NDk4NCBDMTAuNTM5MzAzNSwyNC41MjU0OTg0IDExLjYwOTEyOSwyNC4wMjgyNjkxIDEzLjExNTM3OTYsMjIuOTEwNDc0MyBMMTQuMjc1NDQ0LDIyLjA1NDU0ODggQzE1LjU0NjgwNjUsMjEuMTMwNDkwMyAxNS44Mjk2MTEzLDIxLjAxNjAzMiAxNi40Nzk4OTU2LDIxLjAwMTk1NzggTDE2LjQ3OTg5NTYsMjEuMDAxOTU3OCBaIE0yMi43NzcwOTg4LDMuMjIyMDg5NzkgQzI0LjQ1MDcyMjMsNC44OTU3MTMzIDI0LjQ1MDc1NjYsNy42MDkxNjA3OSAyMi43NzcxODg5LDkuMjgyODEzMjQgTDIxLjc0MTY1NSwxMC4zMTg0NDc1IEMyMi44OTM2MjYzLDExLjcxOTk2NTcgMjIuODUyMTUyNiwxMy4yMDUzNzc0IDIxLjc4MTEwMzEsMTQuMjc5NTU2IEwxOC43ODAwNzI3LDE3LjI4MDU4NzQgTDE4Ljc4MDA3MjcsMTcuMjgwNTg3NCBDMTguNDg3MDM3NCwxNy41NzMzMzg0IDE4LjAxMjE2MzcsMTcuNTczMTA4IDE3LjcxOTQxMjYsMTcuMjgwMDcyNyBDMTcuNDI2NjYxNiwxNi45ODcwMzc0IDE3LjQyNjg5MiwxNi41MTIxNjM3IDE3LjcxOTkyNzMsMTYuMjE5NDEyNiBMMjAuNzE4ODk2OSwxMy4yMjA0NDQgQzIxLjIwMzk1NzEsMTIuNzMzOTY2OCAyMS4yNjAwMDIxLDEyLjEyOTk5ODMgMjAuNjc4OTQxLDExLjM4MTg5NDUgTDEwLjA4NDU0MzcsMjEuOTc2MTAxMSBDOS43ODYzNTQ1OSwyMi4yNzQzMDUzIDkuNDEwMzYxMTcsMjIuNDgyNzA1IDguOTk5NDQ3MDMsMjIuNTc3NTMxMyBMMi45MTg2NDQ2MywyMy45ODA3OTM0IEMyLjM3ODU5MDYxLDI0LjEwNTQyMTIgMS44OTQ1Nzg3NSwyMy42MjE0MDk0IDIuMDE5MjA2NiwyMy4wODEzNTU0IEwzLjQyMjQ3Nzk0LDE3LjAwMDUxMjkgQzMuNTE3Mjk1NTcsMTYuNTg5NjM2NSAzLjcyNTY2NTg5LDE2LjIxMzY3MzYgNC4wMjM4Mjc2LDE1LjkxNTQ5NjggTDE2LjcxNjUwMTksMy4yMjIxNzk5MiBDMTguMzkwMDQxNSwxLjU0ODU1NTU1IDIxLjEwMzQzNDksMS41NDg1MTA1OSAyMi43NzcwOTg4LDMuMjIyMDg5NzkgWiBNMTcuNzc3MTg4OSw0LjI4MjgxMzI0IEw1LjA4NDUxNDYyLDE2Ljk3NjEzMDIgQzQuOTg1MTI3MzgsMTcuMDc1NTIyNCA0LjkxNTY3MDYxLDE3LjIwMDg0MzQgNC44ODQwNjQ3MywxNy4zMzc4MDIyIEwzLjc1MDYyNDgsMjIuMjQ5Mzc1MiBMOC42NjIxNTc3NywyMS4xMTU5NDQ1IEM4Ljc5OTEyOTE1LDIxLjA4NDMzNTcgOC45MjQ0NjAyOSwyMS4wMTQ4NjkyIDkuMDIzODU2NjUsMjAuOTE1NDY3OCBMMjEuNzE2NTAxOSw4LjIyMjE3OTkyIEMyMi44MDQzMDYzLDcuMTM0MzIwNDkgMjIuODA0Mjg2Miw1LjM3MDYwNDc4IDIxLjcxNjQ1ODgsNC4yODI3NzAxIEMyMC42Mjg1OTE0LDMuMTk0OTY1MDcgMTguODY0OTUwNiwzLjE5NDk5NjUzIDE3Ljc3NzE4ODksNC4yODI4MTMyNCBaXCIgaWQ9XCLwn46oLUNvbG9yXCI+IDwvcGF0aD4gPC9nPiA8L2c+IDwvZz48L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZWRpdG9yXCIgaWQ9XCJlZGl0b3JcIiBjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCIgI2VkaXRvciAoaW5wdXQpPVwic3VibWl0Q29udGVudCgpXCIgKGJsdXIpPVwib25CbHVyKClcIiAoa2V5dXApPVwib25FZGl0b3JLZXlVcCgkZXZlbnQpXCIgKG1vdXNldXApPVwidXBkYXRlQ3VycmVudEZvcm1hdCgpXCJcclxuICAgICAgKGRyb3ApPVwiZHJvcCgkZXZlbnQpXCIgKGRyYWdvdmVyKT1cImFsbG93RHJvcCgkZXZlbnQpXCI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcblxyXG4gIDwhLS0gPG5nLXRlbXBsYXRlICN0YWJsZURpYWxvZyBsZXQtZGlhbG9nUmVmPVwiZGlhbG9nUmVmXCI+XHJcbiAgICA8aDIgbWF0LWRpYWxvZy10aXRsZT5DaG9vc2UgVGFibGUgU2l6ZTwvaDI+XHJcbiAgICA8bWF0LWRpYWxvZy1jb250ZW50PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JpZC1jb250YWluZXJcIj5cclxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjZWxsIG9mIGdyaWQ7IGxldCBpID0gaW5kZXhcIiBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgJ2dyaWQtaXRlbSc6IHRydWUsXHJcbiAgICAgICAgJ2hpZ2hsaWdodGVkJzogaSAlIDcgPCBjb2xzICYmIE1hdGguZmxvb3IoaSAvIDcpIDwgcm93c1xyXG4gICAgICB9XCIgKG1vdXNlZW50ZXIpPVwidXBkYXRlUHJldmlldyhpICUgNyArIDEsIE1hdGguZmxvb3IoaSAvIDcpICsgMSlcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInVwZGF0ZVNlbGVjdGlvbihpICUgNyArIDEsIE1hdGguZmxvb3IoaSAvIDcpICsgMSwgZGlhbG9nUmVmKVwiPjwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPHA+e3sgcm93cyB9fSB4IHt7IGNvbHMgfX0gPC9wPlxyXG4gICAgPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XHJcbiAgPC9uZy10ZW1wbGF0ZT4gLS0+XHJcblxyXG4gIDwhLS0gVGFibGUgRGlhbG9nIC0tPlxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwibW9kYWwgZmFkZVwiXHJcbiAgICBpZD1cInRhYmxlRGlhbG9nXCJcclxuICAgIHRhYmluZGV4PVwiLTFcIlxyXG4gICAgZGF0YS1icy1iYWNrZHJvcD1cImZhbHNlXCJcclxuICA+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLXNtIHBvc2l0aW9uLWFic29sdXRlXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgPGg1IGNsYXNzPVwibS0wXCIgc3R5bGU9XCJmb250LXNpemU6IDE4cHggIWltcG9ydGFudDsgZm9udC13ZWlnaHQ6IDUwMDtcIiA+Q2hvb3NlIFRhYmxlIFNpemU8L2g1PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY2VsbCBvZiBncmlkOyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImdyaWQtaXRlbVwiXHJcbiAgICAgICAgICAgICAgW2NsYXNzLmhpZ2hsaWdodGVkXT1cImkgJSA3IDwgY29scyAmJiBNYXRoLmZsb29yKGkgLyA3KSA8IHJvd3NcIlxyXG4gICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cInVwZGF0ZVByZXZpZXcoaSAlIDcgKyAxLCBNYXRoLmZsb29yKGkgLyA3KSArIDEpXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwidXBkYXRlU2VsZWN0aW9uKGkgJSA3ICsgMSwgTWF0aC5mbG9vcihpIC8gNykgKyAxKVwiXHJcbiAgICAgICAgICAgID48L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWNlbnRlciBtdC0yXCI+e3sgcm93cyB9fSB4IHt7IGNvbHMgfX08L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG5cclxuICA8IS0tIFNpZ25hdHVyZSBEaWFsb2cgLS0+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsIGZhZGVcIiBpZD1cInNpZ25hdHVyZURpYWxvZ1wiIHRhYmluZGV4PVwiLTFcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2cgbW9kYWwtbGcgbW9kYWwtZGlhbG9nLWNlbnRlcmVkXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgIDxoNSBjbGFzcz1cIm0tMFwiIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4ICFpbXBvcnRhbnQ7IGZvbnQtd2VpZ2h0OiA1MDA7XCIgPkRyYXcgYSBTaWduYXR1cmU8L2g1PlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2VcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiPjwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgPHNpZ25hdHVyZS1wYWRcclxuICAgICAgICAgICAgI3NpZ1BhZFxyXG4gICAgICAgICAgICBbb3B0aW9uc109XCJzaWduYXR1cmVQYWRPcHRpb25zXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJzaWduXCI+XHJcbiAgICAgICAgICA8L3NpZ25hdHVyZS1wYWQ+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwLTMgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBcIj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2lnbkNsb3NlXCIgKGNsaWNrKT1cImNsb3NlU2lnbkRpYWxvZygpXCI+XHJcbiAgICAgICAgICAgIENsb3NlXHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LXN0YXJ0IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiID5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzaWduUmVzZXRcIiAoY2xpY2spPVwidW5kb1NpZ25EaWFsb2coKVwiPlxyXG4gICAgICAgICAgICAgIFJlc2V0XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInNpZ25TdWJtaXRcIiAoY2xpY2spPVwic3VibWl0U2lnbkRpYWxvZygpXCI+XHJcbiAgICAgICAgICAgICAgU3VibWl0XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuXHJcblxyXG4gIDwhLS0gPG5nLXRlbXBsYXRlICNzaWduYXR1cmVEaWFsb2cgbGV0LWRpYWxvZ1JlZj1cImRpYWxvZ1JlZlwiPlxyXG4gICAgPGgyIG1hdC1kaWFsb2ctdGl0bGU+RHJhdyBhIFNpZ25hdHVyZTwvaDI+XHJcbiAgICA8c2lnbmF0dXJlLXBhZCAjc2lnUGFkIFtvcHRpb25zXT1cInNpZ25hdHVyZVBhZE9wdGlvbnNcIiBjbGFzcz1cInNpZ25cIiA+PC9zaWduYXR1cmUtcGFkPlxyXG4gICAgPGRpdiBjbGFzcz1cImFjdGlvblwiID5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJub3JtYWxcIiAoY2xpY2spPVwiY2xvc2VTaWduRGlhbG9nKGRpYWxvZ1JlZilcIiA+IENsb3NlIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInN1Ym1pdFwiIChjbGljayk9XCJzdWJtaXRTaWduRGlhbG9nKGRpYWxvZ1JlZilcIiA+IFN1Ym1pdCA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgXHJcbiAgPC9uZy10ZW1wbGF0ZT4gLS0+XHJcblxyXG5cclxuPC9kaXY+XHJcbiJdfQ==