verben-workflow-ui 0.5.37 → 0.5.39

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.
@@ -16,7 +16,6 @@ import * as i3 from "@angular/router";
16
16
  import * as i4 from "./form-fields.service";
17
17
  import * as i5 from "@angular/common";
18
18
  import * as i6 from "verben-ng-ui";
19
- import * as i7 from "verben-workflow-ui/src/lib/components/form-control";
20
19
  var TaskUserPropertyName;
21
20
  (function (TaskUserPropertyName) {
22
21
  TaskUserPropertyName["User"] = "User";
@@ -907,11 +906,11 @@ export class FormFieldsComponent {
907
906
  }
908
907
  }
909
908
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldsComponent, deps: [{ token: i1.UtilService }, { token: i1.HttpWebRequestService }, { token: i0.ChangeDetectorRef }, { token: i2.FormBuilder }, { token: i1.EnvironmentService }, { token: i3.Router }, { token: i3.ActivatedRoute }, { token: i4.FormsFieldService }, { token: i5.Location }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
910
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldsComponent, selector: "lib-form-fields", inputs: { path: "path", application: "application", pageSize: "pageSize", searchDebounceTime: "searchDebounceTime" }, outputs: { onViewProcessClicked: "onViewProcessClicked" }, viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true, static: true }, { propertyName: "cardDataView", first: true, predicate: ["vdcv"], descendants: true }, { propertyName: "dataView", first: true, predicate: ["vdv"], descendants: true }, { propertyName: "tableView", first: true, predicate: ["dt"], descendants: true }], ngImport: i0, template: "<header class=\"rounded-lg shadow-lg flex justify-between items-center px-6 py-2 bg-[#D4A00773]\">\n<div class=\"flex items-center gap-10\">\n <h4 class=\"font-semibold\">{{formName}}</h4>\n <span class=\"flex items-center gap-1\">\n Ref ID:\n <span>{{Id}}</span>\n </span>\n</div>\n<div class=\"flex gap-3 items-center\">\n <verbena-button [pd]=\"'6px'\" class=\"verben-primary-button\" (click)=\"saveAllProperties()\" text=\"Save All\"></verbena-button>\n <verben-svg (click)=\"goBack()\" class=\"cursor-pointer\" [width]=\"17\" [height]=\"17\" [icon]=\"'close'\"></verben-svg>\n</div>\n</header>\n<div #messageLog class=\"flex flex-col gap-4 message-log-container\">\n <verben-data-view #vdv [viewState]=\"{\n isSearch: true,\n isColumn: true,\n isFilter: true,\n isSort: true,\n isExport: true,\n isSelect: true,\n isCreate: true,\n isToggle:true,\n }\" [buttonClass]=\"'my-custom-button-class'\" [iconClass]=\"'my-icon-class'\"\n [showSortChild]=\"showSort\" [showColumnChild]=\"showColumn\"\n [activeIconClass]=\"'my-active-icon-class'\" [selectedColumnCount]=\"selectedColumnTableCount\" [selectedSortCount]=\"selectedSortTableCount\"\n [selectedFilterTableCount]=\"selectedFilterTableCount\" [showFilterChild]=\"showFilter\" [searchValue]=\"searchTerm\"\n (viewChange)=\"onViewChange($event)\" (stateChange)=\"onStateChange($event)\" (onSearchChange)=\"onSearch($event)\">\n <div class=\"mt-2\" table-content>\n <lib-data-table #dt [data]=\"data[0].Properties\" [columns]=\"visibleColumnDef\" [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\">\n <ng-container libColumn=\"select\">\n <ng-template #cell let-isSelected=\"isSelected\" let-toggleRowSelection=\"toggleRowSelection\">\n <input type=\"checkbox\" [checked]=\"isSelected\" (change)=\"toggleRowSelection()\" />\n </ng-template>\n <ng-template #header let-allRowsSelected=\"allRowsSelected\" let-someRowsSelected=\"someRowsSelected\"\n let-toggleAllRows=\"toggleAllRows\">\n <input type=\"checkbox\" [checked]=\"allRowsSelected()\" [indeterminate]=\"someRowsSelected()\"\n (change)=\"toggleAllRows()\" />\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"name\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value.Name }}\n </ng-template>\n <ng-template #cellEdit let-row=\"row\" let-updateValue=\"updateValue\" let-value>\n <verbena-input inputContainerClass=\"w-fit\" [(ngModel)]=\"row.Name\"></verbena-input>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"propertyName\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ row.PropertyName }}\n </ng-template>\n <ng-template #cellEdit let-row=\"row\" let-updateValue=\"updateValue\" let-value>\n <verbena-input (keydown)=\"onKeyDown($event, row)\"\n (paste)=\"onPaste($event, row)\"\n (input)=\"onInput($event, row)\" inputContainerClass=\"w-fit\" [(ngModel)]=\"row.PropertyName\"></verbena-input>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"minValue\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value }}\n </ng-template>\n <ng-template #cellEdit let-row=\"row\" let-updateValue=\"updateValue\" let-value>\n <verbena-input [type]=\"'number'\" [ngModel]=\"getStringValue(row, 'MinValue')\"\n (valueChange)=\"convertToInt($event, row, 'MinValue')\" inputContainerClass=\"w-[130px]\"></verbena-input>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"maxValue\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value }}\n </ng-template>\n <ng-template #cellEdit let-row=\"row\" let-updateValue=\"updateValue\" let-value>\n <verbena-input [type]=\"'number'\" inputContainerClass=\"w-[130px]\" [ngModel]=\"getStringValue(row, 'MaxValue')\"\n (valueChange)=\"convertToInt($event, row, 'MaxValue')\"></verbena-input>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"defaultValue\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value }}\n </ng-template>\n <ng-template #cellEdit let-row=\"row\" let-updateValue=\"updateValue\" let-value>\n <verbena-input [type]=\"'text'\" inputContainerClass=\"w-[130px]\"\n [(ngModel)]=\"row.DefaultValue\"></verbena-input>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"dataType\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value }}\n </ng-template>\n <ng-template #cellEdit let-row=\"row\" let-updateValue=\"updateValue\" let-value>\n <div class=\"flex flex-col gap-1\">\n <verben-drop-down width=\"100%\" placeholder=\"Change Data Type\" [(options)]=\"dataType\"\n [(ngModel)]=\"row.DataType\">\n </verben-drop-down>\n </div>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"isRequired\">\n <ng-template #cell let-row=\"row\" let-value>\n <verben-svg *ngIf=\"value === true\" [icon]=\"'check'\"></verben-svg>\n <verben-svg *ngIf=\"value === false\" [icon]=\"'error'\"></verben-svg>\n </ng-template>\n <ng-template #cellEdit let-row=\"row\" let-updateValue=\"updateValue\" let-value>\n <verbena-switch [onColor]=\"'#1A237E'\" [(ngModel)]=\"row.IsRequired\"></verbena-switch>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-isEditing=\"isEditing\" let-toggleRowEdit=\"toggleRowEdit\" let-row=\"row\" let-value>\n <verben-pop-Up [customStyles]=\"{'z-index': '99'}\" [dropdownOpen]=\"openDropdownId===row.id\"\n [enableMouseLeave]=\"false\" (close)=\"onClose()\">\n <verben-svg class=\"cursor-pointer actions-icon\" (click)=\"openDropdown(row)\" dropdown-trigger\n icon=\"list\"></verben-svg>\n <div class=\"pop-up-content flex flex-col\" *ngIf=\"openDropdownId===row.Id\" dropdown-content>\n <div (click)=\"toggleRowEdit()\" class=\"pop-up-value cursor-pointer\">Edit</div>\n <div (click)=\"deleteProperty(row.Id)\" class=\"pop-up-value cursor-pointer\">Delete</div>\n </div>\n </verben-pop-Up>\n </ng-template>\n <ng-template #cellEdit let-isEditing=\"isEditing\" let-toggleRowEdit=\"toggleRowEdit\" let-row=\"row\" let-value>\n <div class=\"flex gap-2 items-center\">\n <verben-svg icon=\"check\" [width]=\"15\" [height]=\"15\"\n (click)=\"saveViaTable(row, toggleRowEdit)\"></verben-svg>\n <verben-svg (click)=\"toggleRowEdit(); deleteProperty(row.Id)\" icon=\"delete\" [width]=\"15\" [height]=\"15\"></verben-svg>\n <verben-svg icon=\"cardViewAlt\" [width]=\"15\" [height]=\"15\" (click)=\"goToCardView(value)\"></verben-svg>\n </div>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n <div card-content>\n <verben-card-data-view borderRadius=\"12px\" #vdcv dataId=\"Id\" border=\"5px\" [cardDataList]=\"cardData\"\n rbgColor=\"#f5f6f9\" mg=\"0px\">\n <verben-left-card-data-view class=\"space-y-7\">\n <verben-left-card-data #vlcd [parent]=\"vdcv\" dataId=\"id\"\n class=\"bg-secondary-100 rounded-xl border-primary border-[1px]\" [cardDataList]=\"cardData\">\n <ng-template #card let-item>\n <div (click)=\"userCardClicked(item)\" class=\"flex cursor-pointer h-[max-content]\">\n <!-- <verben-svg [width]=\"15\" [height]=\"15\" (click)=\"toggleChildren(item); $event.stopPropagation()\"\n [ngClass]=\"item.children && item.children.length?'visible':'invisible'\"\n class=\"items-center flex pr-1 cursor-pointer\" [icon]=\"item.isChildrenExpanded?'minus':'plus'\" /> -->\n <div class=\"flex w-full bg-secondary rounded-xl\">\n <div class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\" [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"></div>\n <div class=\"py-3 px-4 flex-1 h-[100%]\">\n <div class=\"flex items-start flex-1 gap-1 justify-between h-[100%]\">\n <div class=\"flex flex-col flex-1 card-min-height justify-between h-[100%]\">\n <div class=\"flex justify-between mr-4\">\n <div>\n <h3 class=\"my-0 font-bold text-[#404040] leading-[19.5px]\">\n {{ item.data.Name }}\n </h3>\n <span class=\"flex items-center gap-1 mt-2\">\n <span class=\"!text-[10px] text-[#404040]\">Data Type:</span>\n <span class=\"!text-[13px] font-bold\">{{\n item.data.DataType\n }}</span>\n </span>\n </div>\n\n <div>\n <span class=\"!text-[10px] text-[#404040]\">Default Value:</span>\n <p class=\"!text-[12px]\">\n {{ item.data.DefaultValue }}\n </p>\n </div>\n </div>\n </div>\n\n <!-- <div class=\"flex items-end h-[100%]\">\n <span class=\"enum-val {{item.data.Status}}\">{{item.data.Status}}</span>\n </div> -->\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n <verben-right-card-data-view>\n <ng-template #parent>\n <div *ngIf=\"currentData\" class=\"flex flex-col rounded-xl h-full w-full relative gap-6\">\n <verbena-input name=\"Name\" label=\"Name\" \n \n [(ngModel)]=\"currentData.data.Name\" />\n <verbena-input name=\"Name\" label=\"Property Name\" (keydown)=\"onKeyDown($event, currentData.data)\"\n (paste)=\"onPaste($event, currentData.data)\"\n (input)=\"onInput($event, currentData.data)\"\n \n [(ngModel)]=\"currentData.data.PropertyName\" />\n <div class=\"flex flex-col gap-1\">\n <div>Data Type</div>\n <verben-drop-down width=\"100%\" placeholder=\"Change Data Type\" [(options)]=\"dataType\"\n [(ngModel)]=\"currentData.data.DataType\" (ngModelChange)=\"onDropDownChange($event)\">\n </verben-drop-down>\n </div>\n\n <div *ngIf=\"currentData.data.DataType==='SingleSelection' || currentData.data.DataType==='MultiSelection'\">\n <p class=\"mb-2\">Enter Options</p>\n <verben-chip [placeholder]=\"'Enter Options'\" [(ngModel)]=\"chipArray\" (onChange)=\"onChipChange($event)\"></verben-chip>\n </div>\n <div>\n <verbena-input\n [placeHolder]=\"'Enter default text'\"\n [(ngModel)]=\"currentData.data.DefaultValue\"\n name=\"DefaultValue\"\n label=\"Default Value (optional)\"\n\n />\n \n \n </div>\n <div>\n <p class=\"mb-2\">Required</p>\n\n <verbena-switch [onColor]=\"'#1A237E'\" [(ngModel)]=\"currentData.data.IsRequired\"></verbena-switch>\n </div>\n <div *ngIf=\"currentData.data.DataType==='Number'||currentData.data.DataType==='Text' \" class=\" flex flex-col gap-6\">\n <verbena-input\n [type]=\"'number'\"\n name=\"minValue\"\n label=\"Min Value\"\n [ngModel]=\"getStringValue(currentData.data, 'MinValue')\"\n (valueChange)=\"\n convertToInt($event, currentData.data, 'MinValue')\n \" />\n <verbena-input [type]=\"'number'\" name=\"maxValue\" label=\"Max Value\" (ngModelChange)=\"updateTable()\"\n [ngModel]=\"getStringValue(currentData.data, 'MaxValue')\" (valueChange)=\"\n convertToInt($event, currentData.data, 'MaxValue')\n \" />\n </div>\n <!-- buttons -->\n <div class=\"flex justify-between w-full bottom-8 left-0 right-0\">\n <verbena-button (click)=\"deleteProperty(currentData.data.Id)\" class=\"verben-delete-button\" text=\"Delete\"></verbena-button>\n <div class=\"flex gap-3\">\n <verbena-button class=\"verben-switch-button\" (click)=\"goToTableView()\"\n text=\"Switch To Table\"></verbena-button>\n <!-- <verbena-button class=\"verben-primary-button\" (click)=\"saveUser()\" text=\"Save\"></verbena-button> -->\n </div>\n </div>\n </div>\n </ng-template>\n </verben-right-card-data-view>\n <!-- <verben-right-card-data-view>\n yeshhhhhh\n </verben-right-card-data-view> -->\n\n <verben-card-data-view-footer>\n <div class=\"flex gap-2 justify-between\">\n <div *ngIf=\"!vdcv.hasCurrentItem()\" class=\"message-log-button-container flex justify-between\">\n <verbena-button [fontWeight]=\"'bold'\" [bgColor]=\"'#8E8D87'\" [borderRadius]=\"'4px'\" [textColor]=\"'#fff'\"\n [text]=\"'Delete'\">\n </verbena-button>\n </div>\n <div class=\"flex {{\n vdcv.hasCurrentItem() ? 'flex-1' : ''\n }} justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData.length }} records loaded</span>\n </div>\n </div>\n </verben-card-data-view-footer>\n </verben-card-data-view>\n </div>\n <div column-content>\n <verben-visible-column (resetFilter)=\"getProperties(Id, showColumn)\" (columnsUpdated)=\"onColumnsUpdated($event)\" [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\" boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"400px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" [columns]=\"visibleColumns\"\n [displayedColumns]=\"5\"></verben-visible-column>\n </div>\n <div filter-content>\n <verben-table-filter (resetSortData)=\"getProperties(Id, showFilter)\" (filtersApplied)=\"onFilterApplied($event)\" [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\" boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"420px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" tertiaryColor=\"#404040\" [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"></verben-table-filter>\n </div>\n <div sort-content>\n <verben-sort-table (resetSortData)=\"getProperties(Id, showSort)\" (selectedOptions)=\"onSortUpdated($event)\" [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\" boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"400px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" tertiaryColor=\"#404040\" [enableDragAndDrop]=\"true\"\n [sortOptions]=\"sortOptions\"></verben-sort-table>\n </div>\n <div export-content>\n <lib-data-export [data]=\"data[0].Properties\" (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export>\n </div>\n </verben-data-view>\n <div *ngIf=\"vdv.isTableView\" class=\"flex gap-2 justify-between\">\n <div class=\"message-log-button-container flex justify-between\">\n <verbena-button [fontWeight]=\"'bold'\" [bgColor]=\"'#8E8D87'\" [borderRadius]=\"'4px'\" [textColor]=\"'#fff'\"\n [text]=\"'Delete'\">\n </verbena-button>\n </div>\n <div class=\"flex justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData.length }} records loaded</span>\n <button (click)=\"loadMore()\" class=\"load-more view-links\">\n Load more\n </button>\n </div>\n </div>\n</div>\n<div class=\"w-[400px] bg-white p-4 shadow-lg border\">\n <form-control [dataType]=\"dataType2\" [formProperties]=\"data[0].Properties\"></form-control>\n</div>\n", styles: [".view-links{font-size:14px!important;color:#00f;font-weight:600;cursor:pointer}.view-links:hover{text-decoration:underline;text-underline-offset:3px}.context-banner{background-color:#d4a00773}.card-min-height{gap:10px}::ng-deep .childrenPadding{max-height:300px;overflow-y:auto}::ng-deep .toolbar{margin-bottom:15px}::ng-deep .master-only-container{margin:0!important;padding:0!important}::ng-deep .master-detail-container{margin:0!important;padding:0!important}.pop-up-content{border-radius:4px;background-color:#fff;border:1px solid rgba(212,161,7,.5)}.pop-up-value{padding:10px 20px}.pop-up-content>div:nth-child(1){border-bottom:4px solid #FFE681}.enum-val{padding:2px 10px;width:100%;min-width:max-content;text-align:center}.enum-val.Active{background-color:#d6f3e6;color:#2db76f}.enum-val.InActive{background-color:#ffdfdf;color:#eb5757}.toggle-container{width:53px;padding:1px;color:#fff;height:22px;position:relative;background-color:#1a237e;border-radius:2rem;cursor:pointer}.toggle-circle{width:50%;height:100%;position:absolute;left:0;padding:5px;top:0;background-color:#fff;border-radius:50%;transform:scale(1);transition:transform .3s}.translate-100{transform:translate(100%)}.translate-0{transform:translate(0)}.toggle-text-on{display:block;font-size:12px;margin-left:4px}.toggle-text-off{display:block;font-size:12px;margin-right:4px;text-align:right}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.DataTableComponent, selector: "lib-data-table", inputs: ["data", "columns", "dataKey", "formGroupConfig", "groupBy", "useVirtualScroll", "virtualScrollItemSize", "styleConfig"], outputs: ["rowEdit", "rowSave", "rowRevert", "rowDelete", "selectionChange"] }, { kind: "directive", type: i6.ColumnDirective, selector: "[libColumn]", inputs: ["libColumn"] }, { kind: "component", type: i6.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "component", type: i6.VerbenPopUpComponent, selector: "verben-pop-Up", inputs: ["dropdownOpen", "dropdownWidth", "color", "customStyles", "popUpClass", "border", "borderRadius", "enableMouseLeave", "cdkPosition"], outputs: ["dropdownOpenChange", "close"] }, { kind: "component", type: i6.DataViewComponent, selector: "verben-data-view", inputs: ["buttonClass", "iconClass", "activeIconClass", "columnCustomClass", "filterCustomClass", "sortCustomClass", "extendCustomClass", "exportCustomClass", "selectCustomClass", "importCustomClass", "zIndex", "createCustomClass", "tableIcon", "cardIcon", "cardClass", "tableClass", "searchKey", "searchValue", "viewState", "searchTemplate", "importTemplate", "columnTemplate", "extendTemplate", "filterTemplate", "sortTemplate", "children", "exportTemplate", "createTemplate", "selectedColumnCount", "selectedSortCount", "selectedFilterTableCount", "inputWidth", "milliseconds", "showColumnChild", "showSortChild", "showFilterChild", "showImportChild", "showExportChild", "showExtendChild", "create", "showSelected", "isTableView"], outputs: ["viewChange", "stateChange", "onSearchChange"] }, { kind: "component", type: i6.VerbenaButtonComponent, selector: "verbena-button", inputs: ["text", "icon", "useIcon", "svgPosition", "iconPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "svgSize", "weight", "variant", "styleType", "svg", "svgWidth", "svgHeight", "iconColor", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }, { kind: "component", type: i6.CardDataViewComponent, selector: "verben-card-data-view", inputs: ["pd", "mg", "lHeight", "rHeight", "rWidth", "lWidth", "textColor", "lbgColor", "rbgColor", "border", "display", "borderRadius", "activeCss", "inActiveCss", "displayAsRow", "cardDataList", "dataId", "totalRecords", "footer", "noOfVisibleChildren", "showEditIcon", "onItemClick", "onCardChildClick"], outputs: ["editClicked", "loadMoreClick"] }, { kind: "component", type: i6.LeftCardDataComponent, selector: "verben-left-card-data", inputs: ["pd", "mg", "height", "weight", "activeCss", "inActiveCss", "cardDataList", "iconCollapse", "iconExpanded", "parent", "dataId"] }, { kind: "component", type: i6.LeftCardDataViewComponent, selector: "verben-left-card-data-view", inputs: ["cardDataList"] }, { kind: "component", type: i6.RightCardDataViewComponent, selector: "verben-right-card-data-view", inputs: ["parentData", "chilData", "meth"] }, { kind: "component", type: i6.CardDataViewFooterComponent, selector: "verben-card-data-view-footer" }, { kind: "component", type: i6.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i6.TableFilterComponent, selector: "verben-table-filter", inputs: ["filterOptions", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "maxFilterLength", "tooltip"], outputs: ["filtersApplied", "resetSortData"] }, { kind: "component", type: i6.VisibleColumnComponent, selector: "verben-visible-column", inputs: ["columns", "items", "enableDragAndDrop", "displayedColumns", "showMore", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "closeColumn"], outputs: ["columnsUpdated", "resetFilter"] }, { kind: "component", type: i6.SortTableComponent, selector: "verben-sort-table", inputs: ["enableDragAndDrop", "sortOptions", "resetText", "displayedOptions", "propertyText", "showMoreText", "sortButtonText", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "containerHeight"], outputs: ["selectedOptions", "resetSortData"] }, { kind: "component", type: i6.DataExportComponent, selector: "lib-data-export", inputs: ["columns", "data", "dataFetchUrl", "dataQueryParameters"], outputs: ["exportDataEvent"] }, { kind: "component", type: i6.VerbenaInputComponent, selector: "verbena-input", inputs: ["label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "fontSize", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "component", type: i6.VerbenaSwitchComponent, selector: "verbena-switch", inputs: ["label", "checked", "disabled", "offColor", "onColor", "onText", "offText", "width", "height", "customStyles"], outputs: ["change"] }, { kind: "component", type: i7.FormControlComponent, selector: "form-control", inputs: ["dataType", "value", "boolInputType", "formProperties"] }, { kind: "component", type: i6.ChipComponent, selector: "verben-chip", inputs: ["width", "placeholder", "max", "styleClass", "separator", "disabled", "required", "invalidMessage", "errorPosition"], outputs: ["onChange"] }] });
909
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldsComponent, selector: "lib-form-fields", inputs: { path: "path", application: "application", pageSize: "pageSize", searchDebounceTime: "searchDebounceTime" }, outputs: { onViewProcessClicked: "onViewProcessClicked" }, viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true, static: true }, { propertyName: "cardDataView", first: true, predicate: ["vdcv"], descendants: true }, { propertyName: "dataView", first: true, predicate: ["vdv"], descendants: true }, { propertyName: "tableView", first: true, predicate: ["dt"], descendants: true }], ngImport: i0, template: "<header class=\"rounded-lg shadow-lg flex justify-between items-center px-6 py-2 bg-[#D4A00773]\">\n<div class=\"flex items-center gap-10\">\n <h4 class=\"font-semibold\">{{formName}}</h4>\n <span class=\"flex items-center gap-1\">\n Ref ID:\n <span>{{Id}}</span>\n </span>\n</div>\n<div class=\"flex gap-3 items-center\">\n <verbena-button [pd]=\"'6px'\" class=\"verben-primary-button\" (click)=\"saveAllProperties()\" text=\"Save All\"></verbena-button>\n <verben-svg (click)=\"goBack()\" class=\"cursor-pointer\" [width]=\"17\" [height]=\"17\" [icon]=\"'close'\"></verben-svg>\n</div>\n</header>\n<div #messageLog class=\"flex flex-col gap-4 message-log-container\">\n <verben-data-view #vdv [viewState]=\"{\n isSearch: true,\n isColumn: true,\n isFilter: true,\n isSort: true,\n isExport: true,\n isSelect: true,\n isCreate: true,\n isToggle:true,\n }\" [buttonClass]=\"'my-custom-button-class'\" [iconClass]=\"'my-icon-class'\"\n [showSortChild]=\"showSort\" [showColumnChild]=\"showColumn\"\n [activeIconClass]=\"'my-active-icon-class'\" [selectedColumnCount]=\"selectedColumnTableCount\" [selectedSortCount]=\"selectedSortTableCount\"\n [selectedFilterTableCount]=\"selectedFilterTableCount\" [showFilterChild]=\"showFilter\" [searchValue]=\"searchTerm\"\n (viewChange)=\"onViewChange($event)\" (stateChange)=\"onStateChange($event)\" (onSearchChange)=\"onSearch($event)\">\n <div class=\"mt-2\" table-content>\n <lib-data-table #dt [data]=\"data[0].Properties\" [columns]=\"visibleColumnDef\" [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\">\n <ng-container libColumn=\"select\">\n <ng-template #cell let-isSelected=\"isSelected\" let-toggleRowSelection=\"toggleRowSelection\">\n <input type=\"checkbox\" [checked]=\"isSelected\" (change)=\"toggleRowSelection()\" />\n </ng-template>\n <ng-template #header let-allRowsSelected=\"allRowsSelected\" let-someRowsSelected=\"someRowsSelected\"\n let-toggleAllRows=\"toggleAllRows\">\n <input type=\"checkbox\" [checked]=\"allRowsSelected()\" [indeterminate]=\"someRowsSelected()\"\n (change)=\"toggleAllRows()\" />\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"name\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value.Name }}\n </ng-template>\n <ng-template #cellEdit let-row=\"row\" let-updateValue=\"updateValue\" let-value>\n <verbena-input inputContainerClass=\"w-fit\" [(ngModel)]=\"row.Name\"></verbena-input>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"propertyName\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ row.PropertyName }}\n </ng-template>\n <ng-template #cellEdit let-row=\"row\" let-updateValue=\"updateValue\" let-value>\n <verbena-input (keydown)=\"onKeyDown($event, row)\"\n (paste)=\"onPaste($event, row)\"\n (input)=\"onInput($event, row)\" inputContainerClass=\"w-fit\" [(ngModel)]=\"row.PropertyName\"></verbena-input>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"minValue\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value }}\n </ng-template>\n <ng-template #cellEdit let-row=\"row\" let-updateValue=\"updateValue\" let-value>\n <verbena-input [type]=\"'number'\" [ngModel]=\"getStringValue(row, 'MinValue')\"\n (valueChange)=\"convertToInt($event, row, 'MinValue')\" inputContainerClass=\"w-[130px]\"></verbena-input>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"maxValue\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value }}\n </ng-template>\n <ng-template #cellEdit let-row=\"row\" let-updateValue=\"updateValue\" let-value>\n <verbena-input [type]=\"'number'\" inputContainerClass=\"w-[130px]\" [ngModel]=\"getStringValue(row, 'MaxValue')\"\n (valueChange)=\"convertToInt($event, row, 'MaxValue')\"></verbena-input>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"defaultValue\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value }}\n </ng-template>\n <ng-template #cellEdit let-row=\"row\" let-updateValue=\"updateValue\" let-value>\n <verbena-input [type]=\"'text'\" inputContainerClass=\"w-[130px]\"\n [(ngModel)]=\"row.DefaultValue\"></verbena-input>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"dataType\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value }}\n </ng-template>\n <ng-template #cellEdit let-row=\"row\" let-updateValue=\"updateValue\" let-value>\n <div class=\"flex flex-col gap-1\">\n <verben-drop-down width=\"100%\" placeholder=\"Change Data Type\" [(options)]=\"dataType\"\n [(ngModel)]=\"row.DataType\">\n </verben-drop-down>\n </div>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"isRequired\">\n <ng-template #cell let-row=\"row\" let-value>\n <verben-svg *ngIf=\"value === true\" [icon]=\"'check'\"></verben-svg>\n <verben-svg *ngIf=\"value === false\" [icon]=\"'error'\"></verben-svg>\n </ng-template>\n <ng-template #cellEdit let-row=\"row\" let-updateValue=\"updateValue\" let-value>\n <verbena-switch [onColor]=\"'#1A237E'\" [(ngModel)]=\"row.IsRequired\"></verbena-switch>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-isEditing=\"isEditing\" let-toggleRowEdit=\"toggleRowEdit\" let-row=\"row\" let-value>\n <verben-pop-Up [customStyles]=\"{'z-index': '99'}\" [dropdownOpen]=\"openDropdownId===row.id\"\n [enableMouseLeave]=\"false\" (close)=\"onClose()\">\n <verben-svg class=\"cursor-pointer actions-icon\" (click)=\"openDropdown(row)\" dropdown-trigger\n icon=\"list\"></verben-svg>\n <div class=\"pop-up-content flex flex-col\" *ngIf=\"openDropdownId===row.Id\" dropdown-content>\n <div (click)=\"toggleRowEdit()\" class=\"pop-up-value cursor-pointer\">Edit</div>\n <div (click)=\"deleteProperty(row.Id)\" class=\"pop-up-value cursor-pointer\">Delete</div>\n </div>\n </verben-pop-Up>\n </ng-template>\n <ng-template #cellEdit let-isEditing=\"isEditing\" let-toggleRowEdit=\"toggleRowEdit\" let-row=\"row\" let-value>\n <div class=\"flex gap-2 items-center\">\n <verben-svg icon=\"check\" [width]=\"15\" [height]=\"15\"\n (click)=\"saveViaTable(row, toggleRowEdit)\"></verben-svg>\n <verben-svg (click)=\"toggleRowEdit(); deleteProperty(row.Id)\" icon=\"delete\" [width]=\"15\" [height]=\"15\"></verben-svg>\n <verben-svg icon=\"cardViewAlt\" [width]=\"15\" [height]=\"15\" (click)=\"goToCardView(value)\"></verben-svg>\n </div>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n <div card-content>\n <verben-card-data-view borderRadius=\"12px\" #vdcv dataId=\"Id\" border=\"5px\" [cardDataList]=\"cardData\"\n rbgColor=\"#f5f6f9\" mg=\"0px\">\n <verben-left-card-data-view class=\"space-y-7\">\n <verben-left-card-data #vlcd [parent]=\"vdcv\" dataId=\"id\"\n class=\"bg-secondary-100 rounded-xl border-primary border-[1px]\" [cardDataList]=\"cardData\">\n <ng-template #card let-item>\n <div (click)=\"userCardClicked(item)\" class=\"flex cursor-pointer h-[max-content]\">\n <!-- <verben-svg [width]=\"15\" [height]=\"15\" (click)=\"toggleChildren(item); $event.stopPropagation()\"\n [ngClass]=\"item.children && item.children.length?'visible':'invisible'\"\n class=\"items-center flex pr-1 cursor-pointer\" [icon]=\"item.isChildrenExpanded?'minus':'plus'\" /> -->\n <div class=\"flex w-full bg-secondary rounded-xl\">\n <div class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\" [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"></div>\n <div class=\"py-3 px-4 flex-1 h-[100%]\">\n <div class=\"flex items-start flex-1 gap-1 justify-between h-[100%]\">\n <div class=\"flex flex-col flex-1 card-min-height justify-between h-[100%]\">\n <div class=\"flex justify-between mr-4\">\n <div>\n <h3 class=\"my-0 font-bold text-[#404040] leading-[19.5px]\">\n {{ item.data.Name }}\n </h3>\n <span class=\"flex items-center gap-1 mt-2\">\n <span class=\"!text-[10px] text-[#404040]\">Data Type:</span>\n <span class=\"!text-[13px] font-bold\">{{\n item.data.DataType\n }}</span>\n </span>\n </div>\n\n <div>\n <span class=\"!text-[10px] text-[#404040]\">Default Value:</span>\n <p class=\"!text-[12px]\">\n {{ item.data.DefaultValue }}\n </p>\n </div>\n </div>\n </div>\n\n <!-- <div class=\"flex items-end h-[100%]\">\n <span class=\"enum-val {{item.data.Status}}\">{{item.data.Status}}</span>\n </div> -->\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n <verben-right-card-data-view>\n <ng-template #parent>\n <div *ngIf=\"currentData\" class=\"flex flex-col rounded-xl h-full w-full relative gap-6\">\n <verbena-input name=\"Name\" label=\"Name\" \n \n [(ngModel)]=\"currentData.data.Name\" />\n <verbena-input name=\"Name\" label=\"Property Name\" (keydown)=\"onKeyDown($event, currentData.data)\"\n (paste)=\"onPaste($event, currentData.data)\"\n (input)=\"onInput($event, currentData.data)\"\n \n [(ngModel)]=\"currentData.data.PropertyName\" />\n <div class=\"flex flex-col gap-1\">\n <div>Data Type</div>\n <verben-drop-down width=\"100%\" placeholder=\"Change Data Type\" [(options)]=\"dataType\"\n [(ngModel)]=\"currentData.data.DataType\" (ngModelChange)=\"onDropDownChange($event)\">\n </verben-drop-down>\n </div>\n\n <div *ngIf=\"currentData.data.DataType==='SingleSelection' || currentData.data.DataType==='MultiSelection'\">\n <p class=\"mb-2\">Enter Options</p>\n <verben-chip [placeholder]=\"'Enter Options'\" [(ngModel)]=\"chipArray\" (onChange)=\"onChipChange($event)\"></verben-chip>\n </div>\n <div>\n <verbena-input\n [placeHolder]=\"'Enter default text'\"\n [(ngModel)]=\"currentData.data.DefaultValue\"\n name=\"DefaultValue\"\n label=\"Default Value (optional)\"\n\n />\n \n \n </div>\n <div>\n <p class=\"mb-2\">Required</p>\n\n <verbena-switch [onColor]=\"'#1A237E'\" [(ngModel)]=\"currentData.data.IsRequired\"></verbena-switch>\n </div>\n <div *ngIf=\"currentData.data.DataType==='Number'||currentData.data.DataType==='Text' \" class=\" flex flex-col gap-6\">\n <verbena-input\n [type]=\"'number'\"\n name=\"minValue\"\n label=\"Min Value\"\n [ngModel]=\"getStringValue(currentData.data, 'MinValue')\"\n (valueChange)=\"\n convertToInt($event, currentData.data, 'MinValue')\n \" />\n <verbena-input [type]=\"'number'\" name=\"maxValue\" label=\"Max Value\" (ngModelChange)=\"updateTable()\"\n [ngModel]=\"getStringValue(currentData.data, 'MaxValue')\" (valueChange)=\"\n convertToInt($event, currentData.data, 'MaxValue')\n \" />\n </div>\n <!-- buttons -->\n <div class=\"flex justify-between w-full bottom-8 left-0 right-0\">\n <verbena-button (click)=\"deleteProperty(currentData.data.Id)\" class=\"verben-delete-button\" text=\"Delete\"></verbena-button>\n <div class=\"flex gap-3\">\n <verbena-button class=\"verben-switch-button\" (click)=\"goToTableView()\"\n text=\"Switch To Table\"></verbena-button>\n <!-- <verbena-button class=\"verben-primary-button\" (click)=\"saveUser()\" text=\"Save\"></verbena-button> -->\n </div>\n </div>\n </div>\n </ng-template>\n </verben-right-card-data-view>\n <!-- <verben-right-card-data-view>\n yeshhhhhh\n </verben-right-card-data-view> -->\n\n <verben-card-data-view-footer>\n <div class=\"flex gap-2 justify-between\">\n <div *ngIf=\"!vdcv.hasCurrentItem()\" class=\"message-log-button-container flex justify-between\">\n <verbena-button [fontWeight]=\"'bold'\" [bgColor]=\"'#8E8D87'\" [borderRadius]=\"'4px'\" [textColor]=\"'#fff'\"\n [text]=\"'Delete'\">\n </verbena-button>\n </div>\n <div class=\"flex {{\n vdcv.hasCurrentItem() ? 'flex-1' : ''\n }} justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData.length }} records loaded</span>\n </div>\n </div>\n </verben-card-data-view-footer>\n </verben-card-data-view>\n </div>\n <div column-content>\n <verben-visible-column (resetFilter)=\"getProperties(Id, showColumn)\" (columnsUpdated)=\"onColumnsUpdated($event)\" [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\" boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"400px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" [columns]=\"visibleColumns\"\n [displayedColumns]=\"5\"></verben-visible-column>\n </div>\n <div filter-content>\n <verben-table-filter (resetSortData)=\"getProperties(Id, showFilter)\" (filtersApplied)=\"onFilterApplied($event)\" [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\" boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"420px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" tertiaryColor=\"#404040\" [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"></verben-table-filter>\n </div>\n <div sort-content>\n <verben-sort-table (resetSortData)=\"getProperties(Id, showSort)\" (selectedOptions)=\"onSortUpdated($event)\" [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\" boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"400px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" tertiaryColor=\"#404040\" [enableDragAndDrop]=\"true\"\n [sortOptions]=\"sortOptions\"></verben-sort-table>\n </div>\n <div export-content>\n <lib-data-export [data]=\"data[0].Properties\" (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export>\n </div>\n </verben-data-view>\n <div *ngIf=\"vdv.isTableView\" class=\"flex gap-2 justify-between\">\n <div class=\"message-log-button-container flex justify-between\">\n <verbena-button [fontWeight]=\"'bold'\" [bgColor]=\"'#8E8D87'\" [borderRadius]=\"'4px'\" [textColor]=\"'#fff'\"\n [text]=\"'Delete'\">\n </verbena-button>\n </div>\n <div class=\"flex justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData.length }} records loaded</span>\n <button (click)=\"loadMore()\" class=\"load-more view-links\">\n Load more\n </button>\n </div>\n </div>\n</div>\n<!-- <div class=\"w-[400px] bg-white p-4 shadow-lg border\">\n <form-control [dataType]=\"dataType2\" [formProperties]=\"data[0].Properties\"></form-control>\n</div> -->\n", styles: [".view-links{font-size:14px!important;color:#00f;font-weight:600;cursor:pointer}.view-links:hover{text-decoration:underline;text-underline-offset:3px}.context-banner{background-color:#d4a00773}.card-min-height{gap:10px}::ng-deep .childrenPadding{max-height:300px;overflow-y:auto}::ng-deep .toolbar{margin-bottom:15px}::ng-deep .master-only-container{margin:0!important;padding:0!important}::ng-deep .master-detail-container{margin:0!important;padding:0!important}.pop-up-content{border-radius:4px;background-color:#fff;border:1px solid rgba(212,161,7,.5)}.pop-up-value{padding:10px 20px}.pop-up-content>div:nth-child(1){border-bottom:4px solid #FFE681}.enum-val{padding:2px 10px;width:100%;min-width:max-content;text-align:center}.enum-val.Active{background-color:#d6f3e6;color:#2db76f}.enum-val.InActive{background-color:#ffdfdf;color:#eb5757}.toggle-container{width:53px;padding:1px;color:#fff;height:22px;position:relative;background-color:#1a237e;border-radius:2rem;cursor:pointer}.toggle-circle{width:50%;height:100%;position:absolute;left:0;padding:5px;top:0;background-color:#fff;border-radius:50%;transform:scale(1);transition:transform .3s}.translate-100{transform:translate(100%)}.translate-0{transform:translate(0)}.toggle-text-on{display:block;font-size:12px;margin-left:4px}.toggle-text-off{display:block;font-size:12px;margin-right:4px;text-align:right}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.DataTableComponent, selector: "lib-data-table", inputs: ["data", "columns", "dataKey", "formGroupConfig", "groupBy", "useVirtualScroll", "virtualScrollItemSize", "styleConfig"], outputs: ["rowEdit", "rowSave", "rowRevert", "rowDelete", "selectionChange"] }, { kind: "directive", type: i6.ColumnDirective, selector: "[libColumn]", inputs: ["libColumn"] }, { kind: "component", type: i6.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "component", type: i6.VerbenPopUpComponent, selector: "verben-pop-Up", inputs: ["dropdownOpen", "dropdownWidth", "color", "customStyles", "popUpClass", "border", "borderRadius", "enableMouseLeave", "cdkPosition"], outputs: ["dropdownOpenChange", "close"] }, { kind: "component", type: i6.DataViewComponent, selector: "verben-data-view", inputs: ["buttonClass", "iconClass", "activeIconClass", "columnCustomClass", "filterCustomClass", "sortCustomClass", "extendCustomClass", "exportCustomClass", "selectCustomClass", "importCustomClass", "zIndex", "createCustomClass", "tableIcon", "cardIcon", "cardClass", "tableClass", "searchKey", "searchValue", "viewState", "searchTemplate", "importTemplate", "columnTemplate", "extendTemplate", "filterTemplate", "sortTemplate", "children", "exportTemplate", "createTemplate", "selectedColumnCount", "selectedSortCount", "selectedFilterTableCount", "inputWidth", "milliseconds", "showColumnChild", "showSortChild", "showFilterChild", "showImportChild", "showExportChild", "showExtendChild", "create", "showSelected", "isTableView"], outputs: ["viewChange", "stateChange", "onSearchChange"] }, { kind: "component", type: i6.VerbenaButtonComponent, selector: "verbena-button", inputs: ["text", "icon", "useIcon", "svgPosition", "iconPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "svgSize", "weight", "variant", "styleType", "svg", "svgWidth", "svgHeight", "iconColor", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }, { kind: "component", type: i6.CardDataViewComponent, selector: "verben-card-data-view", inputs: ["pd", "mg", "lHeight", "rHeight", "rWidth", "lWidth", "textColor", "lbgColor", "rbgColor", "border", "display", "borderRadius", "activeCss", "inActiveCss", "displayAsRow", "cardDataList", "dataId", "totalRecords", "footer", "noOfVisibleChildren", "showEditIcon", "onItemClick", "onCardChildClick"], outputs: ["editClicked", "loadMoreClick"] }, { kind: "component", type: i6.LeftCardDataComponent, selector: "verben-left-card-data", inputs: ["pd", "mg", "height", "weight", "activeCss", "inActiveCss", "cardDataList", "iconCollapse", "iconExpanded", "parent", "dataId"] }, { kind: "component", type: i6.LeftCardDataViewComponent, selector: "verben-left-card-data-view", inputs: ["cardDataList"] }, { kind: "component", type: i6.RightCardDataViewComponent, selector: "verben-right-card-data-view", inputs: ["parentData", "chilData", "meth"] }, { kind: "component", type: i6.CardDataViewFooterComponent, selector: "verben-card-data-view-footer" }, { kind: "component", type: i6.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i6.TableFilterComponent, selector: "verben-table-filter", inputs: ["filterOptions", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "maxFilterLength", "tooltip"], outputs: ["filtersApplied", "resetSortData"] }, { kind: "component", type: i6.VisibleColumnComponent, selector: "verben-visible-column", inputs: ["columns", "items", "enableDragAndDrop", "displayedColumns", "showMore", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "closeColumn"], outputs: ["columnsUpdated", "resetFilter"] }, { kind: "component", type: i6.SortTableComponent, selector: "verben-sort-table", inputs: ["enableDragAndDrop", "sortOptions", "resetText", "displayedOptions", "propertyText", "showMoreText", "sortButtonText", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "containerHeight"], outputs: ["selectedOptions", "resetSortData"] }, { kind: "component", type: i6.DataExportComponent, selector: "lib-data-export", inputs: ["columns", "data", "dataFetchUrl", "dataQueryParameters"], outputs: ["exportDataEvent"] }, { kind: "component", type: i6.VerbenaInputComponent, selector: "verbena-input", inputs: ["label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "fontSize", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "component", type: i6.VerbenaSwitchComponent, selector: "verbena-switch", inputs: ["label", "checked", "disabled", "offColor", "onColor", "onText", "offText", "width", "height", "customStyles"], outputs: ["change"] }, { kind: "component", type: i6.ChipComponent, selector: "verben-chip", inputs: ["width", "placeholder", "max", "styleClass", "separator", "disabled", "required", "invalidMessage", "errorPosition"], outputs: ["onChange"] }] });
911
910
  }
912
911
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldsComponent, decorators: [{
913
912
  type: Component,
914
- args: [{ selector: 'lib-form-fields', template: "<header class=\"rounded-lg shadow-lg flex justify-between items-center px-6 py-2 bg-[#D4A00773]\">\n<div class=\"flex items-center gap-10\">\n <h4 class=\"font-semibold\">{{formName}}</h4>\n <span class=\"flex items-center gap-1\">\n Ref ID:\n <span>{{Id}}</span>\n </span>\n</div>\n<div class=\"flex gap-3 items-center\">\n <verbena-button [pd]=\"'6px'\" class=\"verben-primary-button\" (click)=\"saveAllProperties()\" text=\"Save All\"></verbena-button>\n <verben-svg (click)=\"goBack()\" class=\"cursor-pointer\" [width]=\"17\" [height]=\"17\" [icon]=\"'close'\"></verben-svg>\n</div>\n</header>\n<div #messageLog class=\"flex flex-col gap-4 message-log-container\">\n <verben-data-view #vdv [viewState]=\"{\n isSearch: true,\n isColumn: true,\n isFilter: true,\n isSort: true,\n isExport: true,\n isSelect: true,\n isCreate: true,\n isToggle:true,\n }\" [buttonClass]=\"'my-custom-button-class'\" [iconClass]=\"'my-icon-class'\"\n [showSortChild]=\"showSort\" [showColumnChild]=\"showColumn\"\n [activeIconClass]=\"'my-active-icon-class'\" [selectedColumnCount]=\"selectedColumnTableCount\" [selectedSortCount]=\"selectedSortTableCount\"\n [selectedFilterTableCount]=\"selectedFilterTableCount\" [showFilterChild]=\"showFilter\" [searchValue]=\"searchTerm\"\n (viewChange)=\"onViewChange($event)\" (stateChange)=\"onStateChange($event)\" (onSearchChange)=\"onSearch($event)\">\n <div class=\"mt-2\" table-content>\n <lib-data-table #dt [data]=\"data[0].Properties\" [columns]=\"visibleColumnDef\" [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\">\n <ng-container libColumn=\"select\">\n <ng-template #cell let-isSelected=\"isSelected\" let-toggleRowSelection=\"toggleRowSelection\">\n <input type=\"checkbox\" [checked]=\"isSelected\" (change)=\"toggleRowSelection()\" />\n </ng-template>\n <ng-template #header let-allRowsSelected=\"allRowsSelected\" let-someRowsSelected=\"someRowsSelected\"\n let-toggleAllRows=\"toggleAllRows\">\n <input type=\"checkbox\" [checked]=\"allRowsSelected()\" [indeterminate]=\"someRowsSelected()\"\n (change)=\"toggleAllRows()\" />\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"name\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value.Name }}\n </ng-template>\n <ng-template #cellEdit let-row=\"row\" let-updateValue=\"updateValue\" let-value>\n <verbena-input inputContainerClass=\"w-fit\" [(ngModel)]=\"row.Name\"></verbena-input>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"propertyName\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ row.PropertyName }}\n </ng-template>\n <ng-template #cellEdit let-row=\"row\" let-updateValue=\"updateValue\" let-value>\n <verbena-input (keydown)=\"onKeyDown($event, row)\"\n (paste)=\"onPaste($event, row)\"\n (input)=\"onInput($event, row)\" inputContainerClass=\"w-fit\" [(ngModel)]=\"row.PropertyName\"></verbena-input>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"minValue\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value }}\n </ng-template>\n <ng-template #cellEdit let-row=\"row\" let-updateValue=\"updateValue\" let-value>\n <verbena-input [type]=\"'number'\" [ngModel]=\"getStringValue(row, 'MinValue')\"\n (valueChange)=\"convertToInt($event, row, 'MinValue')\" inputContainerClass=\"w-[130px]\"></verbena-input>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"maxValue\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value }}\n </ng-template>\n <ng-template #cellEdit let-row=\"row\" let-updateValue=\"updateValue\" let-value>\n <verbena-input [type]=\"'number'\" inputContainerClass=\"w-[130px]\" [ngModel]=\"getStringValue(row, 'MaxValue')\"\n (valueChange)=\"convertToInt($event, row, 'MaxValue')\"></verbena-input>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"defaultValue\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value }}\n </ng-template>\n <ng-template #cellEdit let-row=\"row\" let-updateValue=\"updateValue\" let-value>\n <verbena-input [type]=\"'text'\" inputContainerClass=\"w-[130px]\"\n [(ngModel)]=\"row.DefaultValue\"></verbena-input>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"dataType\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value }}\n </ng-template>\n <ng-template #cellEdit let-row=\"row\" let-updateValue=\"updateValue\" let-value>\n <div class=\"flex flex-col gap-1\">\n <verben-drop-down width=\"100%\" placeholder=\"Change Data Type\" [(options)]=\"dataType\"\n [(ngModel)]=\"row.DataType\">\n </verben-drop-down>\n </div>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"isRequired\">\n <ng-template #cell let-row=\"row\" let-value>\n <verben-svg *ngIf=\"value === true\" [icon]=\"'check'\"></verben-svg>\n <verben-svg *ngIf=\"value === false\" [icon]=\"'error'\"></verben-svg>\n </ng-template>\n <ng-template #cellEdit let-row=\"row\" let-updateValue=\"updateValue\" let-value>\n <verbena-switch [onColor]=\"'#1A237E'\" [(ngModel)]=\"row.IsRequired\"></verbena-switch>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-isEditing=\"isEditing\" let-toggleRowEdit=\"toggleRowEdit\" let-row=\"row\" let-value>\n <verben-pop-Up [customStyles]=\"{'z-index': '99'}\" [dropdownOpen]=\"openDropdownId===row.id\"\n [enableMouseLeave]=\"false\" (close)=\"onClose()\">\n <verben-svg class=\"cursor-pointer actions-icon\" (click)=\"openDropdown(row)\" dropdown-trigger\n icon=\"list\"></verben-svg>\n <div class=\"pop-up-content flex flex-col\" *ngIf=\"openDropdownId===row.Id\" dropdown-content>\n <div (click)=\"toggleRowEdit()\" class=\"pop-up-value cursor-pointer\">Edit</div>\n <div (click)=\"deleteProperty(row.Id)\" class=\"pop-up-value cursor-pointer\">Delete</div>\n </div>\n </verben-pop-Up>\n </ng-template>\n <ng-template #cellEdit let-isEditing=\"isEditing\" let-toggleRowEdit=\"toggleRowEdit\" let-row=\"row\" let-value>\n <div class=\"flex gap-2 items-center\">\n <verben-svg icon=\"check\" [width]=\"15\" [height]=\"15\"\n (click)=\"saveViaTable(row, toggleRowEdit)\"></verben-svg>\n <verben-svg (click)=\"toggleRowEdit(); deleteProperty(row.Id)\" icon=\"delete\" [width]=\"15\" [height]=\"15\"></verben-svg>\n <verben-svg icon=\"cardViewAlt\" [width]=\"15\" [height]=\"15\" (click)=\"goToCardView(value)\"></verben-svg>\n </div>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n <div card-content>\n <verben-card-data-view borderRadius=\"12px\" #vdcv dataId=\"Id\" border=\"5px\" [cardDataList]=\"cardData\"\n rbgColor=\"#f5f6f9\" mg=\"0px\">\n <verben-left-card-data-view class=\"space-y-7\">\n <verben-left-card-data #vlcd [parent]=\"vdcv\" dataId=\"id\"\n class=\"bg-secondary-100 rounded-xl border-primary border-[1px]\" [cardDataList]=\"cardData\">\n <ng-template #card let-item>\n <div (click)=\"userCardClicked(item)\" class=\"flex cursor-pointer h-[max-content]\">\n <!-- <verben-svg [width]=\"15\" [height]=\"15\" (click)=\"toggleChildren(item); $event.stopPropagation()\"\n [ngClass]=\"item.children && item.children.length?'visible':'invisible'\"\n class=\"items-center flex pr-1 cursor-pointer\" [icon]=\"item.isChildrenExpanded?'minus':'plus'\" /> -->\n <div class=\"flex w-full bg-secondary rounded-xl\">\n <div class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\" [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"></div>\n <div class=\"py-3 px-4 flex-1 h-[100%]\">\n <div class=\"flex items-start flex-1 gap-1 justify-between h-[100%]\">\n <div class=\"flex flex-col flex-1 card-min-height justify-between h-[100%]\">\n <div class=\"flex justify-between mr-4\">\n <div>\n <h3 class=\"my-0 font-bold text-[#404040] leading-[19.5px]\">\n {{ item.data.Name }}\n </h3>\n <span class=\"flex items-center gap-1 mt-2\">\n <span class=\"!text-[10px] text-[#404040]\">Data Type:</span>\n <span class=\"!text-[13px] font-bold\">{{\n item.data.DataType\n }}</span>\n </span>\n </div>\n\n <div>\n <span class=\"!text-[10px] text-[#404040]\">Default Value:</span>\n <p class=\"!text-[12px]\">\n {{ item.data.DefaultValue }}\n </p>\n </div>\n </div>\n </div>\n\n <!-- <div class=\"flex items-end h-[100%]\">\n <span class=\"enum-val {{item.data.Status}}\">{{item.data.Status}}</span>\n </div> -->\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n <verben-right-card-data-view>\n <ng-template #parent>\n <div *ngIf=\"currentData\" class=\"flex flex-col rounded-xl h-full w-full relative gap-6\">\n <verbena-input name=\"Name\" label=\"Name\" \n \n [(ngModel)]=\"currentData.data.Name\" />\n <verbena-input name=\"Name\" label=\"Property Name\" (keydown)=\"onKeyDown($event, currentData.data)\"\n (paste)=\"onPaste($event, currentData.data)\"\n (input)=\"onInput($event, currentData.data)\"\n \n [(ngModel)]=\"currentData.data.PropertyName\" />\n <div class=\"flex flex-col gap-1\">\n <div>Data Type</div>\n <verben-drop-down width=\"100%\" placeholder=\"Change Data Type\" [(options)]=\"dataType\"\n [(ngModel)]=\"currentData.data.DataType\" (ngModelChange)=\"onDropDownChange($event)\">\n </verben-drop-down>\n </div>\n\n <div *ngIf=\"currentData.data.DataType==='SingleSelection' || currentData.data.DataType==='MultiSelection'\">\n <p class=\"mb-2\">Enter Options</p>\n <verben-chip [placeholder]=\"'Enter Options'\" [(ngModel)]=\"chipArray\" (onChange)=\"onChipChange($event)\"></verben-chip>\n </div>\n <div>\n <verbena-input\n [placeHolder]=\"'Enter default text'\"\n [(ngModel)]=\"currentData.data.DefaultValue\"\n name=\"DefaultValue\"\n label=\"Default Value (optional)\"\n\n />\n \n \n </div>\n <div>\n <p class=\"mb-2\">Required</p>\n\n <verbena-switch [onColor]=\"'#1A237E'\" [(ngModel)]=\"currentData.data.IsRequired\"></verbena-switch>\n </div>\n <div *ngIf=\"currentData.data.DataType==='Number'||currentData.data.DataType==='Text' \" class=\" flex flex-col gap-6\">\n <verbena-input\n [type]=\"'number'\"\n name=\"minValue\"\n label=\"Min Value\"\n [ngModel]=\"getStringValue(currentData.data, 'MinValue')\"\n (valueChange)=\"\n convertToInt($event, currentData.data, 'MinValue')\n \" />\n <verbena-input [type]=\"'number'\" name=\"maxValue\" label=\"Max Value\" (ngModelChange)=\"updateTable()\"\n [ngModel]=\"getStringValue(currentData.data, 'MaxValue')\" (valueChange)=\"\n convertToInt($event, currentData.data, 'MaxValue')\n \" />\n </div>\n <!-- buttons -->\n <div class=\"flex justify-between w-full bottom-8 left-0 right-0\">\n <verbena-button (click)=\"deleteProperty(currentData.data.Id)\" class=\"verben-delete-button\" text=\"Delete\"></verbena-button>\n <div class=\"flex gap-3\">\n <verbena-button class=\"verben-switch-button\" (click)=\"goToTableView()\"\n text=\"Switch To Table\"></verbena-button>\n <!-- <verbena-button class=\"verben-primary-button\" (click)=\"saveUser()\" text=\"Save\"></verbena-button> -->\n </div>\n </div>\n </div>\n </ng-template>\n </verben-right-card-data-view>\n <!-- <verben-right-card-data-view>\n yeshhhhhh\n </verben-right-card-data-view> -->\n\n <verben-card-data-view-footer>\n <div class=\"flex gap-2 justify-between\">\n <div *ngIf=\"!vdcv.hasCurrentItem()\" class=\"message-log-button-container flex justify-between\">\n <verbena-button [fontWeight]=\"'bold'\" [bgColor]=\"'#8E8D87'\" [borderRadius]=\"'4px'\" [textColor]=\"'#fff'\"\n [text]=\"'Delete'\">\n </verbena-button>\n </div>\n <div class=\"flex {{\n vdcv.hasCurrentItem() ? 'flex-1' : ''\n }} justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData.length }} records loaded</span>\n </div>\n </div>\n </verben-card-data-view-footer>\n </verben-card-data-view>\n </div>\n <div column-content>\n <verben-visible-column (resetFilter)=\"getProperties(Id, showColumn)\" (columnsUpdated)=\"onColumnsUpdated($event)\" [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\" boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"400px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" [columns]=\"visibleColumns\"\n [displayedColumns]=\"5\"></verben-visible-column>\n </div>\n <div filter-content>\n <verben-table-filter (resetSortData)=\"getProperties(Id, showFilter)\" (filtersApplied)=\"onFilterApplied($event)\" [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\" boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"420px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" tertiaryColor=\"#404040\" [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"></verben-table-filter>\n </div>\n <div sort-content>\n <verben-sort-table (resetSortData)=\"getProperties(Id, showSort)\" (selectedOptions)=\"onSortUpdated($event)\" [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\" boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"400px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" tertiaryColor=\"#404040\" [enableDragAndDrop]=\"true\"\n [sortOptions]=\"sortOptions\"></verben-sort-table>\n </div>\n <div export-content>\n <lib-data-export [data]=\"data[0].Properties\" (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export>\n </div>\n </verben-data-view>\n <div *ngIf=\"vdv.isTableView\" class=\"flex gap-2 justify-between\">\n <div class=\"message-log-button-container flex justify-between\">\n <verbena-button [fontWeight]=\"'bold'\" [bgColor]=\"'#8E8D87'\" [borderRadius]=\"'4px'\" [textColor]=\"'#fff'\"\n [text]=\"'Delete'\">\n </verbena-button>\n </div>\n <div class=\"flex justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData.length }} records loaded</span>\n <button (click)=\"loadMore()\" class=\"load-more view-links\">\n Load more\n </button>\n </div>\n </div>\n</div>\n<div class=\"w-[400px] bg-white p-4 shadow-lg border\">\n <form-control [dataType]=\"dataType2\" [formProperties]=\"data[0].Properties\"></form-control>\n</div>\n", styles: [".view-links{font-size:14px!important;color:#00f;font-weight:600;cursor:pointer}.view-links:hover{text-decoration:underline;text-underline-offset:3px}.context-banner{background-color:#d4a00773}.card-min-height{gap:10px}::ng-deep .childrenPadding{max-height:300px;overflow-y:auto}::ng-deep .toolbar{margin-bottom:15px}::ng-deep .master-only-container{margin:0!important;padding:0!important}::ng-deep .master-detail-container{margin:0!important;padding:0!important}.pop-up-content{border-radius:4px;background-color:#fff;border:1px solid rgba(212,161,7,.5)}.pop-up-value{padding:10px 20px}.pop-up-content>div:nth-child(1){border-bottom:4px solid #FFE681}.enum-val{padding:2px 10px;width:100%;min-width:max-content;text-align:center}.enum-val.Active{background-color:#d6f3e6;color:#2db76f}.enum-val.InActive{background-color:#ffdfdf;color:#eb5757}.toggle-container{width:53px;padding:1px;color:#fff;height:22px;position:relative;background-color:#1a237e;border-radius:2rem;cursor:pointer}.toggle-circle{width:50%;height:100%;position:absolute;left:0;padding:5px;top:0;background-color:#fff;border-radius:50%;transform:scale(1);transition:transform .3s}.translate-100{transform:translate(100%)}.translate-0{transform:translate(0)}.toggle-text-on{display:block;font-size:12px;margin-left:4px}.toggle-text-off{display:block;font-size:12px;margin-right:4px;text-align:right}\n"] }]
913
+ args: [{ selector: 'lib-form-fields', template: "<header class=\"rounded-lg shadow-lg flex justify-between items-center px-6 py-2 bg-[#D4A00773]\">\n<div class=\"flex items-center gap-10\">\n <h4 class=\"font-semibold\">{{formName}}</h4>\n <span class=\"flex items-center gap-1\">\n Ref ID:\n <span>{{Id}}</span>\n </span>\n</div>\n<div class=\"flex gap-3 items-center\">\n <verbena-button [pd]=\"'6px'\" class=\"verben-primary-button\" (click)=\"saveAllProperties()\" text=\"Save All\"></verbena-button>\n <verben-svg (click)=\"goBack()\" class=\"cursor-pointer\" [width]=\"17\" [height]=\"17\" [icon]=\"'close'\"></verben-svg>\n</div>\n</header>\n<div #messageLog class=\"flex flex-col gap-4 message-log-container\">\n <verben-data-view #vdv [viewState]=\"{\n isSearch: true,\n isColumn: true,\n isFilter: true,\n isSort: true,\n isExport: true,\n isSelect: true,\n isCreate: true,\n isToggle:true,\n }\" [buttonClass]=\"'my-custom-button-class'\" [iconClass]=\"'my-icon-class'\"\n [showSortChild]=\"showSort\" [showColumnChild]=\"showColumn\"\n [activeIconClass]=\"'my-active-icon-class'\" [selectedColumnCount]=\"selectedColumnTableCount\" [selectedSortCount]=\"selectedSortTableCount\"\n [selectedFilterTableCount]=\"selectedFilterTableCount\" [showFilterChild]=\"showFilter\" [searchValue]=\"searchTerm\"\n (viewChange)=\"onViewChange($event)\" (stateChange)=\"onStateChange($event)\" (onSearchChange)=\"onSearch($event)\">\n <div class=\"mt-2\" table-content>\n <lib-data-table #dt [data]=\"data[0].Properties\" [columns]=\"visibleColumnDef\" [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\">\n <ng-container libColumn=\"select\">\n <ng-template #cell let-isSelected=\"isSelected\" let-toggleRowSelection=\"toggleRowSelection\">\n <input type=\"checkbox\" [checked]=\"isSelected\" (change)=\"toggleRowSelection()\" />\n </ng-template>\n <ng-template #header let-allRowsSelected=\"allRowsSelected\" let-someRowsSelected=\"someRowsSelected\"\n let-toggleAllRows=\"toggleAllRows\">\n <input type=\"checkbox\" [checked]=\"allRowsSelected()\" [indeterminate]=\"someRowsSelected()\"\n (change)=\"toggleAllRows()\" />\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"name\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value.Name }}\n </ng-template>\n <ng-template #cellEdit let-row=\"row\" let-updateValue=\"updateValue\" let-value>\n <verbena-input inputContainerClass=\"w-fit\" [(ngModel)]=\"row.Name\"></verbena-input>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"propertyName\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ row.PropertyName }}\n </ng-template>\n <ng-template #cellEdit let-row=\"row\" let-updateValue=\"updateValue\" let-value>\n <verbena-input (keydown)=\"onKeyDown($event, row)\"\n (paste)=\"onPaste($event, row)\"\n (input)=\"onInput($event, row)\" inputContainerClass=\"w-fit\" [(ngModel)]=\"row.PropertyName\"></verbena-input>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"minValue\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value }}\n </ng-template>\n <ng-template #cellEdit let-row=\"row\" let-updateValue=\"updateValue\" let-value>\n <verbena-input [type]=\"'number'\" [ngModel]=\"getStringValue(row, 'MinValue')\"\n (valueChange)=\"convertToInt($event, row, 'MinValue')\" inputContainerClass=\"w-[130px]\"></verbena-input>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"maxValue\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value }}\n </ng-template>\n <ng-template #cellEdit let-row=\"row\" let-updateValue=\"updateValue\" let-value>\n <verbena-input [type]=\"'number'\" inputContainerClass=\"w-[130px]\" [ngModel]=\"getStringValue(row, 'MaxValue')\"\n (valueChange)=\"convertToInt($event, row, 'MaxValue')\"></verbena-input>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"defaultValue\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value }}\n </ng-template>\n <ng-template #cellEdit let-row=\"row\" let-updateValue=\"updateValue\" let-value>\n <verbena-input [type]=\"'text'\" inputContainerClass=\"w-[130px]\"\n [(ngModel)]=\"row.DefaultValue\"></verbena-input>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"dataType\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value }}\n </ng-template>\n <ng-template #cellEdit let-row=\"row\" let-updateValue=\"updateValue\" let-value>\n <div class=\"flex flex-col gap-1\">\n <verben-drop-down width=\"100%\" placeholder=\"Change Data Type\" [(options)]=\"dataType\"\n [(ngModel)]=\"row.DataType\">\n </verben-drop-down>\n </div>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"isRequired\">\n <ng-template #cell let-row=\"row\" let-value>\n <verben-svg *ngIf=\"value === true\" [icon]=\"'check'\"></verben-svg>\n <verben-svg *ngIf=\"value === false\" [icon]=\"'error'\"></verben-svg>\n </ng-template>\n <ng-template #cellEdit let-row=\"row\" let-updateValue=\"updateValue\" let-value>\n <verbena-switch [onColor]=\"'#1A237E'\" [(ngModel)]=\"row.IsRequired\"></verbena-switch>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-isEditing=\"isEditing\" let-toggleRowEdit=\"toggleRowEdit\" let-row=\"row\" let-value>\n <verben-pop-Up [customStyles]=\"{'z-index': '99'}\" [dropdownOpen]=\"openDropdownId===row.id\"\n [enableMouseLeave]=\"false\" (close)=\"onClose()\">\n <verben-svg class=\"cursor-pointer actions-icon\" (click)=\"openDropdown(row)\" dropdown-trigger\n icon=\"list\"></verben-svg>\n <div class=\"pop-up-content flex flex-col\" *ngIf=\"openDropdownId===row.Id\" dropdown-content>\n <div (click)=\"toggleRowEdit()\" class=\"pop-up-value cursor-pointer\">Edit</div>\n <div (click)=\"deleteProperty(row.Id)\" class=\"pop-up-value cursor-pointer\">Delete</div>\n </div>\n </verben-pop-Up>\n </ng-template>\n <ng-template #cellEdit let-isEditing=\"isEditing\" let-toggleRowEdit=\"toggleRowEdit\" let-row=\"row\" let-value>\n <div class=\"flex gap-2 items-center\">\n <verben-svg icon=\"check\" [width]=\"15\" [height]=\"15\"\n (click)=\"saveViaTable(row, toggleRowEdit)\"></verben-svg>\n <verben-svg (click)=\"toggleRowEdit(); deleteProperty(row.Id)\" icon=\"delete\" [width]=\"15\" [height]=\"15\"></verben-svg>\n <verben-svg icon=\"cardViewAlt\" [width]=\"15\" [height]=\"15\" (click)=\"goToCardView(value)\"></verben-svg>\n </div>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n <div card-content>\n <verben-card-data-view borderRadius=\"12px\" #vdcv dataId=\"Id\" border=\"5px\" [cardDataList]=\"cardData\"\n rbgColor=\"#f5f6f9\" mg=\"0px\">\n <verben-left-card-data-view class=\"space-y-7\">\n <verben-left-card-data #vlcd [parent]=\"vdcv\" dataId=\"id\"\n class=\"bg-secondary-100 rounded-xl border-primary border-[1px]\" [cardDataList]=\"cardData\">\n <ng-template #card let-item>\n <div (click)=\"userCardClicked(item)\" class=\"flex cursor-pointer h-[max-content]\">\n <!-- <verben-svg [width]=\"15\" [height]=\"15\" (click)=\"toggleChildren(item); $event.stopPropagation()\"\n [ngClass]=\"item.children && item.children.length?'visible':'invisible'\"\n class=\"items-center flex pr-1 cursor-pointer\" [icon]=\"item.isChildrenExpanded?'minus':'plus'\" /> -->\n <div class=\"flex w-full bg-secondary rounded-xl\">\n <div class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\" [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"></div>\n <div class=\"py-3 px-4 flex-1 h-[100%]\">\n <div class=\"flex items-start flex-1 gap-1 justify-between h-[100%]\">\n <div class=\"flex flex-col flex-1 card-min-height justify-between h-[100%]\">\n <div class=\"flex justify-between mr-4\">\n <div>\n <h3 class=\"my-0 font-bold text-[#404040] leading-[19.5px]\">\n {{ item.data.Name }}\n </h3>\n <span class=\"flex items-center gap-1 mt-2\">\n <span class=\"!text-[10px] text-[#404040]\">Data Type:</span>\n <span class=\"!text-[13px] font-bold\">{{\n item.data.DataType\n }}</span>\n </span>\n </div>\n\n <div>\n <span class=\"!text-[10px] text-[#404040]\">Default Value:</span>\n <p class=\"!text-[12px]\">\n {{ item.data.DefaultValue }}\n </p>\n </div>\n </div>\n </div>\n\n <!-- <div class=\"flex items-end h-[100%]\">\n <span class=\"enum-val {{item.data.Status}}\">{{item.data.Status}}</span>\n </div> -->\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n <verben-right-card-data-view>\n <ng-template #parent>\n <div *ngIf=\"currentData\" class=\"flex flex-col rounded-xl h-full w-full relative gap-6\">\n <verbena-input name=\"Name\" label=\"Name\" \n \n [(ngModel)]=\"currentData.data.Name\" />\n <verbena-input name=\"Name\" label=\"Property Name\" (keydown)=\"onKeyDown($event, currentData.data)\"\n (paste)=\"onPaste($event, currentData.data)\"\n (input)=\"onInput($event, currentData.data)\"\n \n [(ngModel)]=\"currentData.data.PropertyName\" />\n <div class=\"flex flex-col gap-1\">\n <div>Data Type</div>\n <verben-drop-down width=\"100%\" placeholder=\"Change Data Type\" [(options)]=\"dataType\"\n [(ngModel)]=\"currentData.data.DataType\" (ngModelChange)=\"onDropDownChange($event)\">\n </verben-drop-down>\n </div>\n\n <div *ngIf=\"currentData.data.DataType==='SingleSelection' || currentData.data.DataType==='MultiSelection'\">\n <p class=\"mb-2\">Enter Options</p>\n <verben-chip [placeholder]=\"'Enter Options'\" [(ngModel)]=\"chipArray\" (onChange)=\"onChipChange($event)\"></verben-chip>\n </div>\n <div>\n <verbena-input\n [placeHolder]=\"'Enter default text'\"\n [(ngModel)]=\"currentData.data.DefaultValue\"\n name=\"DefaultValue\"\n label=\"Default Value (optional)\"\n\n />\n \n \n </div>\n <div>\n <p class=\"mb-2\">Required</p>\n\n <verbena-switch [onColor]=\"'#1A237E'\" [(ngModel)]=\"currentData.data.IsRequired\"></verbena-switch>\n </div>\n <div *ngIf=\"currentData.data.DataType==='Number'||currentData.data.DataType==='Text' \" class=\" flex flex-col gap-6\">\n <verbena-input\n [type]=\"'number'\"\n name=\"minValue\"\n label=\"Min Value\"\n [ngModel]=\"getStringValue(currentData.data, 'MinValue')\"\n (valueChange)=\"\n convertToInt($event, currentData.data, 'MinValue')\n \" />\n <verbena-input [type]=\"'number'\" name=\"maxValue\" label=\"Max Value\" (ngModelChange)=\"updateTable()\"\n [ngModel]=\"getStringValue(currentData.data, 'MaxValue')\" (valueChange)=\"\n convertToInt($event, currentData.data, 'MaxValue')\n \" />\n </div>\n <!-- buttons -->\n <div class=\"flex justify-between w-full bottom-8 left-0 right-0\">\n <verbena-button (click)=\"deleteProperty(currentData.data.Id)\" class=\"verben-delete-button\" text=\"Delete\"></verbena-button>\n <div class=\"flex gap-3\">\n <verbena-button class=\"verben-switch-button\" (click)=\"goToTableView()\"\n text=\"Switch To Table\"></verbena-button>\n <!-- <verbena-button class=\"verben-primary-button\" (click)=\"saveUser()\" text=\"Save\"></verbena-button> -->\n </div>\n </div>\n </div>\n </ng-template>\n </verben-right-card-data-view>\n <!-- <verben-right-card-data-view>\n yeshhhhhh\n </verben-right-card-data-view> -->\n\n <verben-card-data-view-footer>\n <div class=\"flex gap-2 justify-between\">\n <div *ngIf=\"!vdcv.hasCurrentItem()\" class=\"message-log-button-container flex justify-between\">\n <verbena-button [fontWeight]=\"'bold'\" [bgColor]=\"'#8E8D87'\" [borderRadius]=\"'4px'\" [textColor]=\"'#fff'\"\n [text]=\"'Delete'\">\n </verbena-button>\n </div>\n <div class=\"flex {{\n vdcv.hasCurrentItem() ? 'flex-1' : ''\n }} justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData.length }} records loaded</span>\n </div>\n </div>\n </verben-card-data-view-footer>\n </verben-card-data-view>\n </div>\n <div column-content>\n <verben-visible-column (resetFilter)=\"getProperties(Id, showColumn)\" (columnsUpdated)=\"onColumnsUpdated($event)\" [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\" boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"400px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" [columns]=\"visibleColumns\"\n [displayedColumns]=\"5\"></verben-visible-column>\n </div>\n <div filter-content>\n <verben-table-filter (resetSortData)=\"getProperties(Id, showFilter)\" (filtersApplied)=\"onFilterApplied($event)\" [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\" boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"420px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" tertiaryColor=\"#404040\" [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"></verben-table-filter>\n </div>\n <div sort-content>\n <verben-sort-table (resetSortData)=\"getProperties(Id, showSort)\" (selectedOptions)=\"onSortUpdated($event)\" [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\" boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"400px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" tertiaryColor=\"#404040\" [enableDragAndDrop]=\"true\"\n [sortOptions]=\"sortOptions\"></verben-sort-table>\n </div>\n <div export-content>\n <lib-data-export [data]=\"data[0].Properties\" (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export>\n </div>\n </verben-data-view>\n <div *ngIf=\"vdv.isTableView\" class=\"flex gap-2 justify-between\">\n <div class=\"message-log-button-container flex justify-between\">\n <verbena-button [fontWeight]=\"'bold'\" [bgColor]=\"'#8E8D87'\" [borderRadius]=\"'4px'\" [textColor]=\"'#fff'\"\n [text]=\"'Delete'\">\n </verbena-button>\n </div>\n <div class=\"flex justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData.length }} records loaded</span>\n <button (click)=\"loadMore()\" class=\"load-more view-links\">\n Load more\n </button>\n </div>\n </div>\n</div>\n<!-- <div class=\"w-[400px] bg-white p-4 shadow-lg border\">\n <form-control [dataType]=\"dataType2\" [formProperties]=\"data[0].Properties\"></form-control>\n</div> -->\n", styles: [".view-links{font-size:14px!important;color:#00f;font-weight:600;cursor:pointer}.view-links:hover{text-decoration:underline;text-underline-offset:3px}.context-banner{background-color:#d4a00773}.card-min-height{gap:10px}::ng-deep .childrenPadding{max-height:300px;overflow-y:auto}::ng-deep .toolbar{margin-bottom:15px}::ng-deep .master-only-container{margin:0!important;padding:0!important}::ng-deep .master-detail-container{margin:0!important;padding:0!important}.pop-up-content{border-radius:4px;background-color:#fff;border:1px solid rgba(212,161,7,.5)}.pop-up-value{padding:10px 20px}.pop-up-content>div:nth-child(1){border-bottom:4px solid #FFE681}.enum-val{padding:2px 10px;width:100%;min-width:max-content;text-align:center}.enum-val.Active{background-color:#d6f3e6;color:#2db76f}.enum-val.InActive{background-color:#ffdfdf;color:#eb5757}.toggle-container{width:53px;padding:1px;color:#fff;height:22px;position:relative;background-color:#1a237e;border-radius:2rem;cursor:pointer}.toggle-circle{width:50%;height:100%;position:absolute;left:0;padding:5px;top:0;background-color:#fff;border-radius:50%;transform:scale(1);transition:transform .3s}.translate-100{transform:translate(100%)}.translate-0{transform:translate(0)}.toggle-text-on{display:block;font-size:12px;margin-left:4px}.toggle-text-off{display:block;font-size:12px;margin-right:4px;text-align:right}\n"] }]
915
914
  }], ctorParameters: () => [{ type: i1.UtilService }, { type: i1.HttpWebRequestService }, { type: i0.ChangeDetectorRef }, { type: i2.FormBuilder }, { type: i1.EnvironmentService }, { type: i3.Router }, { type: i3.ActivatedRoute }, { type: i4.FormsFieldService }, { type: i5.Location }, { type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { path: [{
916
915
  type: Input
917
916
  }], fileInput: [{
@@ -935,4 +934,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
935
934
  }], onViewProcessClicked: [{
936
935
  type: Output
937
936
  }] } });
938
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvY29tcG9uZW50cy9mb3JtLWdyb3VwL2Zvcm0tZmllbGRzL2Zvcm0tZmllbGRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS1ncm91cC9mb3JtLWZpZWxkcy9mb3JtLWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBS0wsa0JBQWtCLEVBQ2xCLGNBQWMsR0FNZixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBR2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUV2RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBR2hFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7Ozs7O0FBTTdELElBQUssb0JBU0o7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LEVBQUUsSUFBSSxFQUFFO2dCQUNyQixZQUFZO3NCQUE5QixTQUFTO3VCQUFDLE1BQU07Z0JBQ0MsUUFBUTtzQkFBekIsU0FBUzt1QkFBQyxLQUFLO2dCQUNDLFNBQVM7c0JBQXpCLFNBQVM7dUJBQUMsSUFBSTtnQkFDTixXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNJLG9CQUFvQjtzQkFBN0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBSZW5kZXJlcjIsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDYXJkRGF0YSxcbiAgQ2FyZERhdGFWaWV3Q29tcG9uZW50LFxuICBDaGlwQ2hhbmdlRXZlbnQsXG4gIENvbHVtbkRlZmluaXRpb24sXG4gIENvbmRpdGlvbmFsT3B0aW9ucyxcbiAgRGF0YUZpbHRlclR5cGUsXG4gIERhdGFUYWJsZUNvbXBvbmVudCxcbiAgRGF0YVZpZXdDb21wb25lbnQsXG4gIERyb3Bkb3duQ2hhbmdlRXZlbnQsXG4gIERyb3Bkb3duTG9hZEV2ZW50LFxuICBJRGF0YUZpbHRlcixcbn0gZnJvbSAndmVyYmVuLW5nLXVpJztcbmltcG9ydCB7IGJhc2VTdHlsZSB9IGZyb20gJy4uL2Jhc2UtdGFibGUtc3R5bGUnO1xuaW1wb3J0IHsgVXRpbFNlcnZpY2UgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBIdHRwV2ViUmVxdWVzdFNlcnZpY2UgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlIH0gZnJvbSAndmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvbW9kZWxzJztcbmltcG9ydCB7IFBhZ2VkUmVzdWx0IH0gZnJvbSAndmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvbW9kZWxzJztcbmltcG9ydCB7IFNlYXJjaFByb3BlcnR5VmFsdWUgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgU2VhcmNoT3BlcmF0b3IgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgU2VhcmNoUHJvcGVydHlTaWduIH0gZnJvbSAndmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvbW9kZWxzJztcbmltcG9ydCB7IEVudmlyb25tZW50U2VydmljZSB9IGZyb20gJ3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL3NlcnZpY2VzJztcbmltcG9ydCB7IFNlYXJjaFByb3BlcnR5VmFsdWVUeXBlIH0gZnJvbSAndmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvbW9kZWxzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU3RhdHVzIH0gZnJvbSAndmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvbW9kZWxzJztcbmltcG9ydCB7IE9iamVjdFN0YXRlIH0gZnJvbSAndmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvbW9kZWxzJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEYXRhVHlwZSB9IGZyb20gJ3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL21vZGVscyc7XG5pbXBvcnQgeyBGb3Jtc0ZpZWxkU2VydmljZSB9IGZyb20gJy4vZm9ybS1maWVsZHMuc2VydmljZSc7XG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3JtRW50aXR5IH0gZnJvbSAndmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvbW9kZWxzJztcbmltcG9ydCB7IEZvcm1Qcm9wZXJ0eSB9IGZyb20gJ3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL21vZGVscyc7XG5cbmVudW0gVGFza1VzZXJQcm9wZXJ0eU5hbWUge1xuICBVc2VyID0gJ1VzZXInLFxuICBEYXRlID0gJ0RhdGUnLFxuICBSb2xlID0gJ1JvbGUnLFxuICBTZXJ2aWNlID0gJ1NlcnZpY2UnLFxuICBBcHBsaWNhdGlvbiA9ICdBcHBsaWNhdGlvbicsXG4gIFRlbmFudCA9ICdUZW5hbnQnLFxuICBFbWFpbCA9ICdFbWFpbCcsXG4gIFN0YXR1cyA9ICdTdGF0dXMnLFxufVxuZW51bSBUYXNrVXNlclByb3BlcnR5TWFwIHtcbiAgVXNlciA9ICdOYW1lJyxcbiAgRGF0ZSA9ICdDcmVhdGVkQXQnLFxuICBSb2xlID0gJ1JvbGVJRCcsXG4gIFNlcnZpY2UgPSAnU2VydmljZU5hbWUnLFxuICBBcHBsaWNhdGlvbiA9ICdBcHBsaWNhdGlvbicsXG4gIFRlbmFudCA9ICdUZW5hbnRJZCcsXG4gIEVtYWlsID0gJ01haWxBZGRyZXNzJyxcbiAgU3RhdHVzID0gJ1N0YXR1cycsXG59XG5cbmVudW0gRmlsdGVyVHlwZXMge1xuICBCZWZvcmUgPSBTZWFyY2hQcm9wZXJ0eVNpZ24uTFQsXG4gIE9uID0gU2VhcmNoUHJvcGVydHlTaWduLkVRLFxuICBBZnRlciA9IFNlYXJjaFByb3BlcnR5U2lnbi5HVCxcbiAgTkVRID0gU2VhcmNoUHJvcGVydHlTaWduLk5FUSxcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWZvcm0tZmllbGRzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0tZmllbGRzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2Zvcm0tZmllbGRzLmNvbXBvbmVudC5jc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtRmllbGRzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgdmlzaWJsZUNvbHVtbkRlZjogQ29sdW1uRGVmaW5pdGlvbjxGb3JtUHJvcGVydHk+W10gPSBbXTtcbiAgc3R5bGVzID0gYmFzZVN0eWxlO1xuICBkYXRhOiBGb3JtRW50aXR5W10gPSBbXTtcbiAgaGlkZU1pbk1heDogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHBhdGg6IHN0cmluZyA9ICcvZG9jdW1lbnRhdGlvbi93b3JrZmxvdy1mb3Jtcy9maWVsZHMnO1xuICBjYXJkRGF0YTogQ2FyZERhdGFbXSA9IFtdO1xuICBxdWVyeVBhcmFtczogYW55ID0ge307XG4gIHNob3dTb3J0OiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dDb2x1bW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgY3VycmVudERhdGE6IENhcmREYXRhIHwgbnVsbCA9IG51bGw7XG4gIEBWaWV3Q2hpbGQoJ2ZpbGVJbnB1dCcsIHsgc3RhdGljOiB0cnVlIH0pIGZpbGVJbnB1dCE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3ZkY3YnKSBjYXJkRGF0YVZpZXchOiBDYXJkRGF0YVZpZXdDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ3ZkdicpIGRhdGFWaWV3ITogRGF0YVZpZXdDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ2R0JykgdGFibGVWaWV3ITogRGF0YVRhYmxlQ29tcG9uZW50PEZvcm1FbnRpdHk+O1xuICBASW5wdXQoKSBhcHBsaWNhdGlvbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIHBhZ2VTaXplOiBudW1iZXIgPSAxMDtcbiAgQElucHV0KCkgc2VhcmNoRGVib3VuY2VUaW1lOiBudW1iZXIgPSA1MDA7XG4gIEBPdXRwdXQoKSBvblZpZXdQcm9jZXNzQ2xpY2tlZDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIGN1cnJlbnRFeHBhbmRlZENhcmQ6IENhcmREYXRhIHwgbnVsbCA9IG51bGw7XG4gIHBhZ2VTdGF0ZTogUGFnZWRSZXN1bHQ8Rm9ybUVudGl0eT4gfCBudWxsID0gbnVsbDtcbiAgaXNPcGVuOiBib29sZWFuID0gZmFsc2U7XG4gIG9wZW5Ecm9wZG93bklkOiBzdHJpbmcgfCBudWxsIHwgbnVtYmVyID0gbnVsbDtcbiAgY3VycmVudEZpbHRlcnM6IElEYXRhRmlsdGVyW10gPSBbXTtcbiAgY3VycmVudFNvcnRzOiBJRGF0YUZpbHRlcltdID0gW107XG4gIHNlbGVjdGVkRmlsdGVyVGFibGVDb3VudDogbnVtYmVyID0gMDtcbiAgc2VsZWN0ZWRTb3J0VGFibGVDb3VudDogbnVtYmVyID0gMDtcbiAgc2VsZWN0ZWRDb2x1bW5UYWJsZUNvdW50OiBudW1iZXIgPSAwO1xuICBzaG93RmlsdGVyOiBib29sZWFuID0gZmFsc2U7XG4gIGZvcm1OYW1lOiBzdHJpbmcgPSAnJztcbiAgc2VhcmNoVGVybSQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gIHByb3BlcnRpZXM6IEZvcm1Qcm9wZXJ0eVtdID0gW107XG4gIHNlYXJjaFRlcm06IHN0cmluZyA9ICcnO1xuICBza2lwID0gMDtcbiAgY2hpcEFycmF5OiBzdHJpbmdbXSA9IFtdO1xuICBJZDogc3RyaW5nID0gJyc7XG4gIGNoaXBzOiBhbnk7XG4gIHN0YXR1c09wdGlvbnM6IFN0YXR1c1tdID0gT2JqZWN0LnZhbHVlcyhTdGF0dXMpO1xuICBkYXRhVHlwZTogRGF0YVR5cGVbXSA9IE9iamVjdC52YWx1ZXMoRGF0YVR5cGUpO1xuICBkYXRhVHlwZTI6IERhdGFUeXBlID0gRGF0YVR5cGUuVGV4dDtcbiAgdXNlcnM6IEZvcm1FbnRpdHlbXSA9IFtdO1xuXG4gIHZpc2libGVDb2x1bW5zOiBJRGF0YUZpbHRlcltdID0gW107XG5cbiAgZmlsdGVyQXJyYXk6IElEYXRhRmlsdGVyW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJ05hbWUnLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuU3RyaW5nLFxuICAgICAgY2hlY2tlZDogZmFsc2UsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnRGF0YVR5cGUnLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuU3RyaW5nLFxuICAgICAgY2hlY2tlZDogZmFsc2UsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnRGVmYXVsdFZhbHVlJyxcbiAgICAgIHR5cGU6IERhdGFGaWx0ZXJUeXBlLlN0cmluZyxcbiAgICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIH0sXG5cbiAgICB7XG4gICAgICBuYW1lOiAnVmFsdWUnLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuU3RyaW5nLFxuICAgICAgY2hlY2tlZDogZmFsc2UsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnTWF4VmFsdWUnLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuTnVtYmVyLFxuICAgICAgY2hlY2tlZDogZmFsc2UsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnTWluVmFsdWUnLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuU3RyaW5nLFxuICAgICAgY2hlY2tlZDogZmFsc2UsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnSXNSZXF1aXJlZCcsXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5Cb29sLFxuICAgICAgY2hlY2tlZDogZmFsc2UsXG4gICAgfSxcbiAgXTtcblxuICBzb3J0T3B0aW9uczogSURhdGFGaWx0ZXJbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnTmFtZScsXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5TdHJpbmcsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdEYXRhVHlwZScsXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5TdHJpbmcsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdEZWZhdWx0VmFsdWUnLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuU3RyaW5nLFxuICAgICAgY2hlY2tlZDogZmFsc2UsXG4gICAgfSxcblxuICAgIHtcbiAgICAgIG5hbWU6ICdWYWx1ZScsXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5TdHJpbmcsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdNYXhWYWx1ZScsXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5OdW1iZXIsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdNaW5WYWx1ZScsXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5TdHJpbmcsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdJc1JlcXVpcmVkJyxcbiAgICAgIHR5cGU6IERhdGFGaWx0ZXJUeXBlLkJvb2wsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICBdO1xuXG4gIHByaXZhdGUgY3VycmVudFNlYXJjaFRlcm06IHN0cmluZyA9ICcnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdXRpbFNlcnZpY2U6IFV0aWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2VydmVyOiBIdHRwV2ViUmVxdWVzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgZW52U3ZjOiBFbnZpcm9ubWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHRhc2tVc2Vyc1N2YzogRm9ybXNGaWVsZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfbG9jYXRpb246IExvY2F0aW9uLFxuICAgIHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyXG4gICkge1xuICAgIHRoaXMudmlzaWJsZUNvbHVtbkRlZiA9IHRhc2tVc2Vyc1N2Yy5mb3JtRmllbGRDb2x1bW5zO1xuICAgIHRoaXMudmlzaWJsZUNvbHVtbnMgPSB0YXNrVXNlcnNTdmMuZm9ybUZpZWxkQ29sdW1ucy5tYXAoKGNvbCkgPT4gKHtcbiAgICAgIGNoZWNrZWQ6IHRydWUsXG4gICAgICBuYW1lOiB0eXBlb2YgY29sLmhlYWRlciA9PT0gJ3N0cmluZycgPyBjb2wuaGVhZGVyIDogY29sLmlkLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuQm9vbCxcbiAgICB9KSk7XG4gIH1cbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zZWFyY2hUZXJtJFxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuc2VhcmNoRGVib3VuY2VUaW1lKSkgLy8gQWRqdXN0IGRlYm91bmNlIHRpbWUgaGVyZSAoaW4gbXMpXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jIChzZWFyY2hUZXJtKSA9PiB7XG4gICAgICAgIHRoaXMuY3VycmVudFNlYXJjaFRlcm0gPSBzZWFyY2hUZXJtO1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbHRlcnNBbmRTb3J0cyh0cnVlKTtcbiAgICAgIH0pO1xuICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKChwYXJhbXMpID0+IHtcbiAgICAgIGNvbnN0IElkID0gcGFyYW1zWydGb3JtSWQnXTtcbiAgICAgIGNvbnN0IE5hbWUgPSBwYXJhbXNbJ05hbWUnXTtcbiAgICAgIHRoaXMuSWQgPSBJZDtcbiAgICAgIHRoaXMuZm9ybU5hbWUgPSBOYW1lO1xuICAgICAgaWYgKElkKSB7XG4gICAgICAgIHRoaXMuZ2V0UHJvcGVydGllcyhJZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgb25DaGlwQ2hhbmdlKGNoaXBzOiBDaGlwQ2hhbmdlRXZlbnQpIHtcbiAgICB0aGlzLmNoaXBzID0gY2hpcHM7XG4gIH1cbiAgYXN5bmMgcG9zdFNlYXJjaChwYXlsb2FkOiBhbnkpIHtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSSh0cnVlKTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnNlcnZlci5wb3N0KFxuICAgICAgYEZvcm0vU2VhcmNoRm9ybUVudGl0aWVzLzAvJHt0aGlzLnBhZ2VTaXplfWAsXG4gICAgICBwYXlsb2FkXG4gICAgKTtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG5cbiAgICBpZiAocmVzIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93RXJyb3IoJ0Vycm9yIG9jY3VycmVkIHdoaWxlIHNlYXJjaGluZy4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYWdlU3RhdGUgPSByZXMgYXMgUGFnZWRSZXN1bHQ8Rm9ybUVudGl0eT47XG4gICAgY29uc3QgcmVzdWx0ID0gcGFnZVN0YXRlPy5SZXN1bHQ7XG5cbiAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dJbmZvKCdObyByZXN1bHRzIGZvdW5kLicpO1xuICAgICAgdGhpcy5kYXRhID0gW107XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQXNzaWduIGFuZCBlbnN1cmUgUHJvcGVydGllcyBleGlzdFxuICAgIHRoaXMuZGF0YSA9IHJlc3VsdC5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAuLi5pdGVtLFxuICAgICAgUHJvcGVydGllczogaXRlbS5Qcm9wZXJ0aWVzIHx8IFtdLFxuICAgIH0pKTtcblxuICAgIHRoaXMuc2V0VXBDYXJkRGF0YSgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBvbkRyb3BEb3duQ2hhbmdlKGV2ZW50OiBzdHJpbmcpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIHRoaXMuY2hlY2tNaW5NYXgoZXZlbnQpO1xuICAgIH1cbiAgfVxuICBhc3luYyBnZXRQcm9wZXJ0aWVzKFxuICAgIElkOiBzdHJpbmcsXG4gICAgc2hvdzogYm9vbGVhbiA9IGZhbHNlXG4gICk6IFByb21pc2U8Rm9ybUVudGl0eVtdIHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKHRoaXMuc2hvd0NvbHVtbikge1xuICAgICAgdGhpcy5zaG93Q29sdW1uID0gZmFsc2U7XG4gICAgICB0aGlzLnNlbGVjdGVkQ29sdW1uVGFibGVDb3VudCA9IDA7XG4gICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNob3dGaWx0ZXIpIHtcbiAgICAgIHRoaXMuc2hvd0ZpbHRlciA9IGZhbHNlO1xuICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlclRhYmxlQ291bnQgPSAwO1xuXG4gICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNob3dTb3J0KSB7XG4gICAgICB0aGlzLnNob3dTb3J0ID0gZmFsc2U7XG4gICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICB0aGlzLnNlbGVjdGVkU29ydFRhYmxlQ291bnQgPSAwO1xuICAgIH1cblxuICAgIHZhciBwYXlsb2FkOiBTZWFyY2hQcm9wZXJ0eVZhbHVlW10gPSBbXG4gICAgICB7XG4gICAgICAgIFByb3BlcnR5TmFtZTogYENvZGVgLFxuICAgICAgICBFbnRpdHlWYWx1ZTogSWQsXG4gICAgICAgIE9wZXJhdG9yOiBTZWFyY2hPcGVyYXRvci5BbmQsXG4gICAgICAgIFNpZ246IFNlYXJjaFByb3BlcnR5U2lnbi5FUSxcbiAgICAgICAgVHlwZTogU2VhcmNoUHJvcGVydHlWYWx1ZVR5cGUuU3RyaW5nLFxuICAgICAgfSxcbiAgICBdO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2VydmVyLnBvc3QoXG4gICAgICBgRm9ybS9TZWFyY2hGb3JtRW50aXRpZXMvJHt0aGlzLnNraXB9LyR7dGhpcy5wYWdlU2l6ZX1gLFxuICAgICAgcGF5bG9hZFxuICAgICk7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcmVzdWx0ID0gKHJlcyBhcyBQYWdlZFJlc3VsdDxGb3JtRW50aXR5PikuUmVzdWx0O1xuICAgICAgdGhpcy5kYXRhID0gcmVzdWx0O1xuICAgICAgdGhpcy5kYXRhLmZvckVhY2goKHgpID0+XG4gICAgICAgIHguUHJvcGVydGllcy5mb3JFYWNoKChwLCBpKSA9PiAocC5JZCA9IGkudG9TdHJpbmcoKSkpXG4gICAgICApO1xuICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gdGhpcy5kYXRhWzBdLlByb3BlcnRpZXM7XG4gICAgICBjb25zb2xlLmxvZyh0aGlzLnByb3BlcnRpZXMsICdqamonKTtcblxuICAgICAgdGhpcy5zZXRVcENhcmREYXRhKCk7XG4gICAgICBzaG93ID0gZmFsc2U7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIG9uVXNlclNlbGVjdGVkKGV2ZW50OiBEcm9wZG93bkNoYW5nZUV2ZW50LCBpdGVtOiBGb3JtRW50aXR5KSB7XG4gICAgY29uc3QgdXNlciA9IHRoaXMudXNlcnMuZmluZCgoeCkgPT4geC5OYW1lID09IGV2ZW50LnZhbHVlKTtcbiAgICBpZiAodXNlcikge1xuICAgICAgaXRlbS5OYW1lID0gdXNlci5OYW1lO1xuICAgICAgaXRlbS5EZXNjcmlwdGlvbiA9IHVzZXIuRGVzY3JpcHRpb247XG4gICAgICBpdGVtLlByb3BlcnRpZXMgPSB1c2VyLlByb3BlcnRpZXM7XG4gICAgICBpdGVtLklzVmFsaWRhdGVkID0gdXNlci5Jc1ZhbGlkYXRlZDtcbiAgICB9XG4gIH1cbiAgb25DbGVhcihldmVudDogRXZlbnQsIGl0ZW06IEZvcm1FbnRpdHkpIHtcbiAgICBpdGVtLk5hbWUgPSAnJztcbiAgICBpdGVtLkRlc2NyaXB0aW9uID0gJyc7XG4gICAgaXRlbS5Qcm9wZXJ0aWVzID0gW107XG4gICAgaXRlbS5Jc1ZhbGlkYXRlZCA9IGZhbHNlO1xuICB9XG4gIGFzeW5jIGdldEZvcm1zKCk6IFByb21pc2U8Rm9ybUVudGl0eVtdIHwgdW5kZWZpbmVkPiB7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZXJ2ZXIuZ2V0KFxuICAgICAgYEZvcm0vR2V0Rm9ybUVudGl0aWVzV2l0aFBhcmFtcy9Hcm91cC8wLyR7dGhpcy5wYWdlU2l6ZX1gLFxuICAgICAgdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuV29ya0Zsb3dBUElcbiAgICApO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKGZhbHNlKTtcbiAgICBpZiAocmVzIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYWdlU3RhdGUgPSByZXMgYXMgUGFnZWRSZXN1bHQ8Rm9ybUVudGl0eT47XG4gICAgICB2YXIgcmVzdWx0ID0gKHJlcyBhcyBQYWdlZFJlc3VsdDxGb3JtRW50aXR5PikuUmVzdWx0O1xuICAgICAgdGhpcy5kYXRhID0gcmVzdWx0O1xuICAgICAgdGhpcy5zZXRVcENhcmREYXRhKCk7XG4gICAgICB0aGlzLnByb3BlcnRpZXMgPSByZXN1bHRbMF0uUHJvcGVydGllcztcblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cbiAgZ2V0SXRlbUxhYmVsKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMudXNlcnMuZmluZCgodXNlcikgPT4gdXNlci5OYW1lID09PSBuYW1lKTtcbiAgICBjb25zdCBvdGhlckNoZWNrID0gdGhpcy5kYXRhLmZpbmQoKGRhdGEpID0+IGRhdGEuTmFtZSA9PT0gbmFtZSk7XG4gICAgcmV0dXJuIGl0ZW0gPyBpdGVtLk5hbWUgOiBvdGhlckNoZWNrID8gb3RoZXJDaGVjay5OYW1lIDogJyc7XG4gIH1cblxuICBnZXRBc3luY0xhYmVsKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGEuZmluZCgoeCkgPT4geC5OYW1lID09IHZhbHVlKTtcblxuICAgIHJldHVybiBkYXRhID8gZGF0YS5OYW1lIDogJyc7XG4gIH1cblxuICBhc3luYyBsb2FkTW9yZSgpIHtcbiAgICBpZiAoIXRoaXMucGFnZVN0YXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuICAgIGNvbnN0IHJlcyA9XG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXJzLmxlbmd0aCA+IDAgfHxcbiAgICAgIHRoaXMuY3VycmVudFNvcnRzLmxlbmd0aCA+IDAgfHxcbiAgICAgIHRoaXMuY3VycmVudFNlYXJjaFRlcm0udHJpbSgpLmxlbmd0aCA+IDBcbiAgICAgICAgPyBhd2FpdCB0aGlzLmxvYWRNb3JlRmlsdGVyc0FuZFNvcnRzKClcbiAgICAgICAgOiBhd2FpdCB0aGlzLnNlcnZlci5nZXQoXG4gICAgICAgICAgICBgVGFza1VzZXIvR2V0VGFza1VzZXJzLyR7dGhpcy5wYWdlU3RhdGUuU2tpcH0vJHt0aGlzLnBhZ2VTaXplfWAsXG4gICAgICAgICAgICB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5Xb3JrRmxvd0FQSVxuICAgICAgICAgICk7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFnZVN0YXRlID0gcmVzIGFzIFBhZ2VkUmVzdWx0PEZvcm1FbnRpdHk+O1xuICAgICAgdmFyIHJlc3VsdCA9IChyZXMgYXMgUGFnZWRSZXN1bHQ8Rm9ybUVudGl0eT4pLlJlc3VsdDtcblxuICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLmNvbmNhdChcbiAgICAgICAgcmVzdWx0Lm1hcCgoeCkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi54LFxuICAgICAgICAgICAgaWQ6IHguTmFtZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIHRoaXMuc2V0VXBDYXJkRGF0YUV4dHJhKHJlc3VsdCk7XG4gICAgfVxuICB9XG4gIGNhcmRDbGlja2VkKGl0ZW06IENhcmREYXRhLCB0b2dnbGVWaWV3OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0aGlzLmN1cnJlbnREYXRhID0gdGhpcy5jYXJkRGF0YVZpZXcub25JdGVtQ2xpY2soaXRlbSk7XG4gICAgaWYgKHRvZ2dsZVZpZXcpIHtcbiAgICAgIHRoaXMuZGF0YVZpZXcudG9nZ2xlVmlldygpO1xuICAgIH1cbiAgfVxuICB0b2dnbGVDaGlsZHJlbihpdGVtOiBDYXJkRGF0YSkge1xuICAgIHZhciBjdXJyVG9nZ2xlU3RhdGUgPSBpdGVtLmlzQ2hpbGRyZW5FeHBhbmRlZDtcbiAgICB0aGlzLmNhcmREYXRhLmZvckVhY2goKF8pID0+IHtcbiAgICAgIF8uaXNDaGlsZHJlbkV4cGFuZGVkID0gZmFsc2U7XG4gICAgfSk7XG4gICAgaXRlbS5pc0NoaWxkcmVuRXhwYW5kZWQgPSAhY3VyclRvZ2dsZVN0YXRlO1xuICAgIGlmIChpdGVtLmlzQ2hpbGRyZW5FeHBhbmRlZCkge1xuICAgICAgdGhpcy5jdXJyZW50RXhwYW5kZWRDYXJkID0gaXRlbTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJyZW50RXhwYW5kZWRDYXJkID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgc2V0VXBDYXJkRGF0YSgpIHtcbiAgICBjb25zdCBjYXJkRGF0YTogQ2FyZERhdGFbXSA9IHRoaXMuZGF0YVswXT8uUHJvcGVydGllcz8ubWFwKCh4KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi54LFxuICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgIHRpdGxlOiB4Lk5hbWUsXG4gICAgICAgIGRhdGE6IHgsXG4gICAgICAgIGJvZHk6IFtdLFxuICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgdGhpcy5jYXJkRGF0YSA9IGNhcmREYXRhOyAvLyBBc3NpZ24gdGhlIHRyYW5zZm9ybWVkIGFycmF5IHRvIGBjYXJkRGF0YWBcbiAgfVxuXG4gIG9wZW5Ecm9wZG93bihpdGVtOiBGb3JtUHJvcGVydHkpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5Ecm9wZG93bklkID0gdGhpcy5vcGVuRHJvcGRvd25JZCA9PT0gaXRlbS5JZCA/IG51bGwgOiBpdGVtLklkO1xuICB9XG5cbiAgY2xvc2VQb3BVcChyb3c6IEZvcm1Qcm9wZXJ0eSk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9wZW5Ecm9wZG93bklkID09PSByb3cuSWQpIHtcbiAgICAgIHRoaXMub3BlbkRyb3Bkb3duSWQgPSBudWxsOyAvLyBQcm9wZXJseSByZXNldCB3aGVuIGNsb3NpbmdcbiAgICB9XG4gICAgdGhpcy5vbkNsb3NlKCk7IC8vIENhbGwgYW55IGFkZGl0aW9uYWwgbG9naWMgZm9yIGNsb3N1cmVcbiAgfVxuICBzZXRVcENhcmREYXRhRXh0cmEoYmFzZURhdGE6IEZvcm1FbnRpdHlbXSkge1xuICAgIGNvbnN0IGNhcmREYXRhOiBDYXJkRGF0YVtdID0gYmFzZURhdGEubWFwKCh4KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgIHRpdGxlOiB4Lk5hbWUsXG4gICAgICAgIGRhdGE6IHgsXG4gICAgICAgIGJvZHk6IFtdLFxuICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHRoaXMuY2FyZERhdGEgPSB0aGlzLmNhcmREYXRhLmNvbmNhdChjYXJkRGF0YSk7XG4gIH1cblxuICBnb1RvQ2FyZFZpZXcoZGF0YTogRm9ybVByb3BlcnR5KSB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuY2FyZERhdGEuZmluZCgoeCkgPT4geC5kYXRhID09IGRhdGEpO1xuICAgIGlmIChpdGVtKSB7XG4gICAgICB0aGlzLnVzZXJDYXJkQ2xpY2tlZChpdGVtLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBnb1RvVGFibGVWaWV3KCkge1xuICAgIGlmICghdGhpcy5jdXJyZW50RGF0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmRhdGFWaWV3LnRvZ2dsZVZpZXcoKTtcbiAgICBjb25zdCBpZCA9IHRoaXMuY3VycmVudERhdGEuZGF0YSA/IHRoaXMuY3VycmVudERhdGEuZGF0YS5JZCA6ICcnO1xuICAgIGlmIChpZC50cmltKCkubGVuZ3RoID4gMCAmJiAhdGhpcy50YWJsZVZpZXcuaXNSb3dFZGl0aW5nKGlkKSkge1xuICAgICAgdGhpcy50YWJsZVZpZXcudG9nZ2xlUm93RWRpdChpZCk7XG4gICAgfVxuICB9XG5cbiAgdmlld1Byb2Nlc3Nlcyhjb2RlOiBzdHJpbmcpIHtcbiAgICBpZiAoY29kZS50cmltKCkubGVuZ3RoID09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vblZpZXdQcm9jZXNzQ2xpY2tlZC5lbWl0KGNvZGUpO1xuICB9XG5cbiAgdXNlckNhcmRDbGlja2VkKGl0ZW06IENhcmREYXRhLCB0b2dnbGVWaWV3OiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICB0aGlzLmNhcmREYXRhLmZvckVhY2goKGNhcmQpID0+IChjYXJkLnNlbGVjdGVkID0gZmFsc2UpKTtcbiAgICBpdGVtLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICB0aGlzLmN1cnJlbnREYXRhID0gdGhpcy5jYXJkRGF0YVZpZXcub25JdGVtQ2xpY2soaXRlbSk7XG4gICAgdGhpcy5jaGlwQXJyYXkgPSBKU09OLnBhcnNlKHRoaXMuY3VycmVudERhdGE/LmRhdGEuVmFsdWUpO1xuICAgIGlmICh0b2dnbGVWaWV3KSB7XG4gICAgICB0aGlzLmRhdGFWaWV3LnRvZ2dsZVZpZXcoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzYXZlRm9ybVByb3BlcnR5KCkge1xuICAgIGlmICghdGhpcy5jdXJyZW50RGF0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZvcm1Qcm9wZXJ0eTogRm9ybUVudGl0eVtdID0gdGhpcy5kYXRhO1xuXG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gQVBJIGNhbGwgdG8gc2F2ZSB1c2VyXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnNlcnZlci5wb3N0KFxuICAgICAgICBgRm9ybS9TYXZlRm9ybUVudGl0aWVzYCxcbiAgICAgICAgZm9ybVByb3BlcnR5LFxuICAgICAgICB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5Xb3JrRmxvd0FQSVxuICAgICAgKTtcblxuICAgICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuXG4gICAgICBpZiAoIShyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSkge1xuICAgICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dTdWNjZXNzKCdGb3JtIHByb3BlcnR5IHNhdmVkIHN1Y2Nlc3NmdWxseScpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlcyBhcyBGb3JtRW50aXR5W107XG4gICAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCB1c2VyUmVzdWx0ID0gcmVzdWx0WzBdO1xuXG4gICAgICAgICAgY29uc3QgaXRlbUluZGV4ID0gdGhpcy5kYXRhLmZpbmRJbmRleChcbiAgICAgICAgICAgICh4KSA9PiB4ID09PSB0aGlzLmN1cnJlbnREYXRhPy5kYXRhXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gICAgICAvLyBPcHRpb25hbDogSGFuZGxlIGVycm9ycyBpZiBuZWVkZWRcbiAgICB9XG4gIH1cbiAgc3RyaW5naWZ5KHZhbDogYW55KSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbCk7XG4gIH1cbiAgZ2VuZXJhdGVVbmlxdWVJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnXycgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSk7XG4gIH1cblxuICBhZGRPclVwZGF0ZUZvcm1Qcm9wZXJ0eShmb3JtOiBGb3JtRW50aXR5LCBwcm9wZXJ0eTogRm9ybVByb3BlcnR5KTogdm9pZCB7XG4gICAgaWYgKCFwcm9wZXJ0eS5pZCkge1xuICAgICAgcHJvcGVydHkuaWQgPSB0aGlzLmdlbmVyYXRlVW5pcXVlSWQoKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbmRleCA9IGZvcm0uUHJvcGVydGllcy5maW5kSW5kZXgoKHApID0+IHAuaWQgPT09IHByb3BlcnR5LmlkKTtcblxuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIGZvcm0uUHJvcGVydGllc1tpbmRleF0gPSB7IC4uLnByb3BlcnR5IH07IC8vIHVwZGF0ZVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3JtLlByb3BlcnRpZXMucHVzaCh7IC4uLnByb3BlcnR5IH0pOyAvLyBhZGRcbiAgICB9XG5cbiAgICBmb3JtLkRhdGFTdGF0ZSA9XG4gICAgICBmb3JtLkRhdGFTdGF0ZSA9PT0gT2JqZWN0U3RhdGUuTmV3XG4gICAgICAgID8gT2JqZWN0U3RhdGUuTmV3XG4gICAgICAgIDogT2JqZWN0U3RhdGUuQ2hhbmdlZDtcbiAgfVxuZGVsZXRlUHJvcGVydHkocHJvcGVydHlJZDogc3RyaW5nKSB7XG4gIGlmICghdGhpcy5kYXRhIHx8IHRoaXMuZGF0YS5sZW5ndGggPT09IDApIHJldHVybjtcblxuICBjb25zdCBmb3JtID0gdGhpcy5kYXRhWzBdO1xuICBmb3JtLlByb3BlcnRpZXMgPSBmb3JtLlByb3BlcnRpZXMuZmlsdGVyKFxuICAgIChwOiBGb3JtUHJvcGVydHkpID0+IHAuSWQgIT09IHByb3BlcnR5SWRcbiAgKTtcblxuICB0aGlzLmNhcmREYXRhID0gdGhpcy5jYXJkRGF0YS5maWx0ZXIoYyA9PiBjLmRhdGEuSWQgIT09IHByb3BlcnR5SWQpO1xuXG4gXG4gIGlmICh0aGlzLmN1cnJlbnREYXRhICYmIHRoaXMuY3VycmVudERhdGEuZGF0YS5JZCA9PT0gcHJvcGVydHlJZCkge1xuICAgIHRoaXMuY3VycmVudERhdGEgPSBudWxsO1xuICAgIHRoaXMuY2FyZERhdGFWaWV3LmNsZWFyRGF0YSgpOyBcbiAgfVxuXG4gIFxuICB0aGlzLmRhdGEgPSBbLi4udGhpcy5kYXRhXTtcblxuICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dJbmZvKFwiUHJvcGVydHkgcmVtb3ZlZFwiKTtcbn1cblxuXG5hc3luYyBzYXZlQWxsUHJvcGVydGllcygpIHtcbiAgaWYgKCF0aGlzLmRhdGEgfHwgdGhpcy5kYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGZvcm0gPSB0aGlzLmRhdGFbMF07XG5mb3JtLlByb3BlcnRpZXMuZm9yRWFjaCgocHJvcDogRm9ybVByb3BlcnR5LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gIHByb3AuSWQgPSBpbmRleC50b1N0cmluZygpO1xuICBwcm9wLk1heFZhbHVlID0gTnVtYmVyKHByb3AuTWF4VmFsdWUpO1xuICBwcm9wLk1pblZhbHVlID0gTnVtYmVyKHByb3AuTWluVmFsdWUpO1xuICBwcm9wLk9wdGlvbnMgPSBBcnJheS5pc0FycmF5KHByb3AuT3B0aW9ucylcbiAgICA/IHByb3AuT3B0aW9ucy5qb2luKFwiLFwiKVxuICAgIDogcHJvcC5PcHRpb25zID8/IFwiXCI7XG4gIHByb3AuVmFsdWUgPSBwcm9wLlZhbHVlID8/IFwiXCI7XG59KTtcblxuXG4gXG4gIFxuICBcblxuICBjb25zdCBpbnZhbGlkID0gZm9ybS5Qcm9wZXJ0aWVzLmZpbmQoXG4gICAgKHApID0+ICFwLk5hbWUgfHwgcC5OYW1lLnRyaW0oKS5sZW5ndGggPT09IDBcbiAgKTtcbiAgaWYgKGludmFsaWQpIHtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dJbmZvKFwiTmFtZSBjYW5ub3QgYmUgZW1wdHlcIik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZm9ybS5EYXRhU3RhdGUgPSBPYmplY3RTdGF0ZS5DaGFuZ2VkO1xuXG4gIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuXG4gIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2VydmVyLnBvc3QoXG4gICAgXCJGb3JtL1NhdmVGb3JtRW50aXRpZXNcIixcbiAgICBbZm9ybV0sXG4gICAgdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuV29ya0Zsb3dBUElcbiAgKTtcblxuICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG5cbiAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dFcnJvcihcIkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHNhdmluZ1wiKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dTdWNjZXNzKFwiRm9ybSBwcm9wZXJ0aWVzIHNhdmVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgIFxuXG4gICAgXG4gIH1cbn1cblxuXG5cblxuICBhc3luYyBzYXZlVmlhVGFibGUocm93OiBGb3JtUHJvcGVydHksIGNhbGxCYWNrOiAoKSA9PiBhbnkpIHtcbiAgICBpZiAoIXJvdykgcmV0dXJuO1xuXG4gICAgY29uc3QgcHJvcGVydHk6IEZvcm1Qcm9wZXJ0eSA9IHJvdyBhcyBGb3JtUHJvcGVydHk7XG4gICAgcHJvcGVydHkuTWF4VmFsdWUgPSBOdW1iZXIocHJvcGVydHkuTWF4VmFsdWUpO1xuICAgIHByb3BlcnR5Lk1pblZhbHVlID0gTnVtYmVyKHByb3BlcnR5Lk1pblZhbHVlKTtcbiAgICBwcm9wZXJ0eS5PcHRpb25zID0gdGhpcy5jaGlwQXJyYXk/LnRvU3RyaW5nKCk7XG4gICAgcHJvcGVydHkuVmFsdWUgPSAnJztcblxuICAgIGlmICghcHJvcGVydHkuTmFtZSB8fCBwcm9wZXJ0eS5OYW1lLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd0luZm8oJ05hbWUgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG5cbiAgICBjb25zdCBmb3JtID0gdGhpcy5kYXRhWzBdO1xuICAgIGNvbnN0IGluZGV4ID0gZm9ybS5Qcm9wZXJ0aWVzLmZpbmRJbmRleCgocCkgPT4gcC5pZCA9PT0gcHJvcGVydHkuaWQpO1xuXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIGZvcm0uUHJvcGVydGllc1tpbmRleF0gPSBwcm9wZXJ0eTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9ybS5Qcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuICAgIH1cblxuICAgIGZvcm0uRGF0YVN0YXRlID1cbiAgICAgIGZvcm0uRGF0YVN0YXRlID09PSBPYmplY3RTdGF0ZS5OZXdcbiAgICAgICAgPyBPYmplY3RTdGF0ZS5OZXdcbiAgICAgICAgOiBPYmplY3RTdGF0ZS5DaGFuZ2VkO1xuXG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZXJ2ZXIucG9zdChcbiAgICAgICdGb3JtL1NhdmVGb3JtRW50aXRpZXMnLFxuICAgICAgdGhpcy5kYXRhLFxuICAgICAgdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuV29ya0Zsb3dBUElcbiAgICApO1xuXG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuXG4gICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd0Vycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBzYXZpbmcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93U3VjY2VzcygnRm9ybSBwcm9wZXJ0eSBzYXZlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlcyBhcyBGb3JtRW50aXR5W107XG4gICAgICB0aGlzLmNsb3NlUG9wVXAocm93KTtcbiAgICAgIGNhbGxCYWNrKCk7XG4gICAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgdXBkYXRlZEZvcm0gPSByZXN1bHRbMF07XG4gICAgICAgIHRoaXMuZGF0YVswXS5Qcm9wZXJ0aWVzID0gdXBkYXRlZEZvcm0uUHJvcGVydGllcztcbiAgICAgICAgdGhpcy5kYXRhID0gWy4uLnRoaXMuZGF0YV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlSXNWYWxpZGF0ZSh2YWx1ZTogYm9vbGVhbiwgcm93OiBGb3JtUHJvcGVydHkpOiB2b2lkIHtcbiAgICBjb25zdCBuZXdWYWx1ZSA9ICF2YWx1ZTtcbiAgICByb3cuSXNSZXF1aXJlZCA9IG5ld1ZhbHVlO1xuICAgIGNvbnNvbGUubG9nKHJvdyk7XG4gIH1cbm9uS2V5RG93bihlOiBLZXlib2FyZEV2ZW50LCBkYXRhOiBGb3JtUHJvcGVydHkpIHtcbiAgLy8gYWxsb3cgbmF2aWdhdGlvbiAvIGNvbnRyb2wga2V5c1xuICBjb25zdCBhbGxvd2VkID0gW1xuICAgICdCYWNrc3BhY2UnLCdEZWxldGUnLCdBcnJvd0xlZnQnLCdBcnJvd1JpZ2h0JywnQXJyb3dVcCcsJ0Fycm93RG93bicsXG4gICAgJ1RhYicsJ0VudGVyJywnSG9tZScsJ0VuZCcsJ0VzY2FwZSdcbiAgXTtcbiAgaWYgKGFsbG93ZWQuaW5jbHVkZXMoZS5rZXkpKSByZXR1cm47XG5cbiAgLy8gYmxvY2sgdGhlIFNwYWNlIGtleSAoY292ZXJzIG1vZGVybiAmIG9sZCBicm93c2VycylcbiAgaWYgKGUua2V5ID09PSAnICcgfHwgZS5jb2RlID09PSAnU3BhY2UnIHx8IGUua2V5ID09PSAnU3BhY2ViYXInKSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHJldHVybjtcbiAgfVxufVxuXG5vblBhc3RlKGU6IENsaXBib2FyZEV2ZW50LCBkYXRhOiBGb3JtUHJvcGVydHkpIHtcblxuICBlLnByZXZlbnREZWZhdWx0KCk7XG4gIGNvbnN0IHBhc3RlZCA9IGUuY2xpcGJvYXJkRGF0YT8uZ2V0RGF0YSgndGV4dCcpID8/ICcnO1xuICBjb25zdCBjbGVhbmVkID0gcGFzdGVkLnJlcGxhY2UoL1xccysvZywgJycpO1xuICBjb25zdCBpbnB1dCA9IGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG5cbiBcbiAgY29uc3Qgc3RhcnQgPSBpbnB1dC5zZWxlY3Rpb25TdGFydCA/PyBpbnB1dC52YWx1ZS5sZW5ndGg7XG4gIGNvbnN0IGVuZCA9IGlucHV0LnNlbGVjdGlvbkVuZCA/PyBzdGFydDtcbiAgY29uc3QgbmV3VmFsID0gaW5wdXQudmFsdWUuc2xpY2UoMCwgc3RhcnQpICsgY2xlYW5lZCArIGlucHV0LnZhbHVlLnNsaWNlKGVuZCk7XG5cbiAgaW5wdXQudmFsdWUgPSBuZXdWYWw7XG4gIGRhdGEuUHJvcGVydHlOYW1lID0gbmV3VmFsO1xuICB0aGlzLnVwZGF0ZVRhYmxlPy4oKTtcbn1cblxub25JbnB1dChlOiBFdmVudCwgZGF0YTogRm9ybVByb3BlcnR5KSB7XG5cbiAgY29uc3QgaW5wdXQgPSBlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICBjb25zdCBjbGVhbmVkID0gaW5wdXQudmFsdWUucmVwbGFjZSgvXFxzKy9nLCAnJyk7XG4gIGlmIChpbnB1dC52YWx1ZSAhPT0gY2xlYW5lZCkge1xuICAgIGNvbnN0IHBvcyA9IGlucHV0LnNlbGVjdGlvblN0YXJ0ID8/IGNsZWFuZWQubGVuZ3RoO1xuICAgIGlucHV0LnZhbHVlID0gY2xlYW5lZDtcblxuICAgIGNvbnN0IG5ld1BvcyA9IE1hdGgubWluKHBvcywgY2xlYW5lZC5sZW5ndGgpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4gaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2UobmV3UG9zLCBuZXdQb3MpLCAwKTtcbiAgfVxuICBkYXRhLlByb3BlcnR5TmFtZSA9IGNsZWFuZWQ7XG4gIHRoaXMudXBkYXRlVGFibGU/LigpO1xufVxuXG4gIHVwZGF0ZVRhYmxlKCkge1xuICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5tYXAoKHgpID0+IHgpO1xuXG4gIH1cblxuICBjb252ZXJ0VG9JbnQodmFsdWU6IGFueSwgZGF0YTogYW55LCBwcm9wOiBzdHJpbmcpIHtcbiAgICBkYXRhW3Byb3BdID0gcGFyc2VJbnQodmFsdWUpO1xuICB9XG4gIGdldFN0cmluZ1ZhbHVlKGRhdGE6IGFueSwgcHJvcDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZGF0YVtwcm9wXS50b1N0cmluZygpO1xuICB9XG5cbiAgY2hlY2tNaW5NYXgodmFsdWU6IHN0cmluZykge1xuICAgIHZhciBzaG93TWlubWF4ID0gZmFsc2U7XG4gICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgY2FzZSAnU3RyaW5nJzpcbiAgICAgICAgc2hvd01pbm1heCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnSW50JzpcbiAgICAgICAgc2hvd01pbm1heCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRGVjaW1hbCc6XG4gICAgICAgIHNob3dNaW5tYXggPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Zsb2F0JzpcbiAgICAgICAgc2hvd01pbm1heCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgc2hvd01pbm1heCA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuICh0aGlzLmhpZGVNaW5NYXggPSBzaG93TWlubWF4KTtcbiAgfVxuXG4gIG5hdmlnYXRlVG9GaWVsZHMoKSB7XG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLnF1ZXJ5UGFyYW1zO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgJHt0aGlzLnBhdGh9YF0sIHsgcXVlcnlQYXJhbXMgfSk7XG4gIH1cbiAgb25DbG9zZSgpIHtcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICB9XG5cbiAgZ29CYWNrKCkge1xuICAgIHRoaXMuX2xvY2F0aW9uLmJhY2soKTtcbiAgfVxuICBpc0Ryb3Bkb3duT3BlbihpdGVtOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5vcGVuRHJvcGRvd25JZCA9PT0gaXRlbS5pZDtcbiAgfVxuXG4gIG9uVmlld0NoYW5nZShpc0dyaWRWaWV3OiBib29sZWFuKTogdm9pZCB7fVxuXG5vblN0YXRlQ2hhbmdlKGV2ZW50OiB7IGtleTogc3RyaW5nOyB2YWx1ZTogYm9vbGVhbiB9KTogdm9pZCB7XG4gIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgY2FzZSAnY3JlYXRlJzpcbiAgICAgIGNvbnN0IG5ld0lkID0gYHByb3AtJHtEYXRlLm5vdygpfWA7IFxuXG4gICAgICB2YXIgbmV3VXNlcjogRm9ybVByb3BlcnR5ID0ge1xuICAgICAgICBNYXhWYWx1ZTogMTAwLFxuICAgICAgICBOYW1lOiAnJyxcbiAgICAgICAgVmFsdWU6ICcnLFxuICAgICAgICBNaW5WYWx1ZTogMTAwLFxuICAgICAgICBPcHRpb25zOiAnJyxcbiAgICAgICAgSXNSZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIERhdGFUeXBlOiBEYXRhVHlwZS5UZXh0LFxuICAgICAgICBEZWZhdWx0VmFsdWU6ICcnLFxuICAgICAgICBQcm9wZXJ0eU5hbWU6ICcnLFxuICAgICAgICBpZDogbmV3SWQsXG4gICAgICAgIElkOiBuZXdJZCxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuY2hpcEFycmF5ID0gW107XG5cbiAgICAgIGNvbnN0IGNhcmREYXRhOiBDYXJkRGF0YSA9IHtcbiAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICB0aXRsZTogbmV3VXNlci5OYW1lLFxuICAgICAgICBkYXRhOiBuZXdVc2VyLFxuICAgICAgICBib2R5OiBbXSxcbiAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgfTtcbiAgaWYgKHRoaXMuZGF0YSAmJiB0aGlzLmRhdGEubGVuZ3RoID4gMCkge1xuICAgIHRoaXMuZGF0YVswXS5Qcm9wZXJ0aWVzID0gW1xuICAgICAgLi4uKHRoaXMuZGF0YVswXS5Qcm9wZXJ0aWVzID8/IFtdKSxcbiAgICAgIG5ld1VzZXJcbiAgICBdO1xuICB9XG4gICAgICB0aGlzLmNhcmREYXRhLnB1c2goY2FyZERhdGEpO1xuICAgICAgdGhpcy51c2VyQ2FyZENsaWNrZWQoY2FyZERhdGEpO1xuICAgICAgXG4gICAgICB0aGlzLmRhdGFWaWV3LmlzVGFibGVWaWV3ID0gZmFsc2U7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2ZpbHRlcic6XG4gICAgICB0aGlzLnNob3dGaWx0ZXIgPSBldmVudC52YWx1ZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc29ydCc6XG4gICAgICB0aGlzLnNob3dTb3J0ID0gZXZlbnQudmFsdWU7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2NvbHVtbic6XG4gICAgICB0aGlzLnNob3dDb2x1bW4gPSBldmVudC52YWx1ZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGJyZWFrO1xuICB9XG59XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5za2lwID0gMDtcbiAgICB0aGlzLnBhZ2VTaXplID0gMTA7XG4gIH1cbiAgYXN5bmMgb25TZWFyY2goZXZlbnQ6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfSkge1xuICAgIHRoaXMuc2VhcmNoVGVybSA9IGV2ZW50LnZhbHVlO1xuICAgIHRoaXMucmVzZXQoKTtcbiAgICBpZiAoIXRoaXMuc2VhcmNoVGVybSkge1xuICAgICAgdGhpcy5nZXRQcm9wZXJ0aWVzKHRoaXMuSWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2VydmVyLmdldChcbiAgICAgICAgYEZvcm0vR2V0Rm9ybUVudGl0aWVzV2l0aFBhcmFtLyR7dGhpcy5zZWFyY2hUZXJtfS8ke3RoaXMuc2tpcH0vJHt0aGlzLnBhZ2VTaXplfS9DcmVhdGVkQXQvYXNjYFxuICAgICAgKTtcbiAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKGZhbHNlKTtcblxuICAgICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZHVyaW5nIHNlYXJjaDonLCByZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wYWdlU3RhdGUgPSByZXMgYXMgUGFnZWRSZXN1bHQ8Rm9ybUVudGl0eT47XG4gICAgICAgIHZhciByZXN1bHQgPSAocmVzIGFzIFBhZ2VkUmVzdWx0PEZvcm1FbnRpdHk+KS5SZXN1bHQ7XG4gICAgICAgIHRoaXMuZGF0YSA9IHJlc3VsdDtcblxuICAgICAgICB0aGlzLnNldFVwQ2FyZERhdGEoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignU2VhcmNoIGVycm9yOicsIGVycm9yKTtcbiAgICB9IGZpbmFsbHkge1xuICAgIH1cbiAgfVxuICBzaG93VGFibGVWaWV3OiBib29sZWFuID0gZmFsc2U7XG4gIG9uU2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGVkUm93czogRm9ybVByb3BlcnR5W10pIHt9XG4gIHJldHJ5TWVzc2FnZSgpIHt9XG5cbiAgb25Db2x1bW5zVXBkYXRlZCh1cGRhdGVkQ29sdW1uczogSURhdGFGaWx0ZXJbXSkge1xuICAgIGNvbnN0IHVwZGF0ZWRDb2x1bW5EZWY6IENvbHVtbkRlZmluaXRpb248Rm9ybVByb3BlcnR5PltdID0gW107XG4gICAgdGhpcy5zaG93Q29sdW1uID0gZmFsc2U7XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtblRhYmxlQ291bnQgPSB1cGRhdGVkQ29sdW1ucy5sZW5ndGg7XG4gICAgdXBkYXRlZENvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGluZ0NvbCA9IHRoaXMudGFza1VzZXJzU3ZjLmZvcm1GaWVsZENvbHVtbnMuZmluZChcbiAgICAgICAgKGNvbHVtbikgPT4gY29sdW1uLmhlYWRlciA9PT0gY29sLm5hbWUgfHwgY29sdW1uLmlkID09PSBjb2wubmFtZVxuICAgICAgKTtcbiAgICAgIGlmIChtYXRjaGluZ0NvbCkge1xuICAgICAgICB1cGRhdGVkQ29sdW1uRGVmLnB1c2gobWF0Y2hpbmdDb2wpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy52aXNpYmxlQ29sdW1uRGVmID0gWy4uLnVwZGF0ZWRDb2x1bW5EZWZdO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRmlsdGVyc0FuZFNvcnRzKGlzU2VhcmNoOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAoIWlzU2VhcmNoKSB7XG4gICAgICB0aGlzLmRhdGFWaWV3Lm9uQ2xlYXJTZWFyY2goKTtcbiAgICAgIHRoaXMuY3VycmVudFNlYXJjaFRlcm0gPSAnJztcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIGNvbnN0IGNsaWNrRXZlbnQgPSBuZXcgTW91c2VFdmVudCgnY2xpY2snLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgICAgIHZpZXc6IHdpbmRvdyxcbiAgICAgIH0pO1xuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjbGlja0V2ZW50KTtcbiAgICB9XG4gICAgdmFyIHBheWxvYWQ6IFNlYXJjaFByb3BlcnR5VmFsdWVbXSA9IHRoaXMuY3VycmVudEZpbHRlcnMubWFwKCh4KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBQcm9wZXJ0eU5hbWU6XG4gICAgICAgICAgVGFza1VzZXJQcm9wZXJ0eU1hcFt4Lm5hbWUgYXMga2V5b2YgdHlwZW9mIFRhc2tVc2VyUHJvcGVydHlNYXBdLFxuICAgICAgICBFbnRpdHlWYWx1ZTogeC52YWx1ZSxcbiAgICAgICAgT3BlcmF0b3I6IFNlYXJjaE9wZXJhdG9yLkFuZCxcbiAgICAgICAgU2lnbjpcbiAgICAgICAgICB4LmNvbmRpdGlvbiAmJiBPYmplY3Qua2V5cyhGaWx0ZXJUeXBlcykuaW5jbHVkZXMoeC5jb25kaXRpb24pXG4gICAgICAgICAgICA/IChGaWx0ZXJUeXBlc1tcbiAgICAgICAgICAgICAgICB4LmNvbmRpdGlvbiBhcyBrZXlvZiB0eXBlb2YgRmlsdGVyVHlwZXNcbiAgICAgICAgICAgICAgXSBhcyB1bmtub3duIGFzIFNlYXJjaFByb3BlcnR5U2lnbilcbiAgICAgICAgICAgIDogU2VhcmNoUHJvcGVydHlTaWduLkVRLFxuICAgICAgICBUeXBlOlxuICAgICAgICAgIHgubmFtZSA9PSBUYXNrVXNlclByb3BlcnR5TmFtZS5EYXRlXG4gICAgICAgICAgICA/IFNlYXJjaFByb3BlcnR5VmFsdWVUeXBlLkRhdGVcbiAgICAgICAgICAgIDogU2VhcmNoUHJvcGVydHlWYWx1ZVR5cGUuU3RyaW5nLFxuICAgICAgfTtcbiAgICB9KTtcbiAgICAvLyBwYXlsb2FkLnB1c2goe1xuICAgIC8vICAgUHJvcGVydHlOYW1lOiAnQVBJS2V5JyxcbiAgICAvLyAgIEVudGl0eVZhbHVlOiB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5BUElLZXksXG4gICAgLy8gICBPcGVyYXRvcjogU2VhcmNoT3BlcmF0b3IuQW5kLFxuICAgIC8vICAgU2lnbjogU2VhcmNoUHJvcGVydHlTaWduLkVRLFxuICAgIC8vIH0pO1xuICAgIGNvbnN0IHNvcnRQYXJhbTogeyBQYXJhbTogc3RyaW5nOyBPcmRlcjogc3RyaW5nIH0gfCBudWxsID1cbiAgICAgIHRoaXMuY3VycmVudFNvcnRzLmxlbmd0aCA+IDBcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBQYXJhbTpcbiAgICAgICAgICAgICAgVGFza1VzZXJQcm9wZXJ0eU1hcFtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTb3J0c1swXS5uYW1lIGFzIGtleW9mIHR5cGVvZiBUYXNrVXNlclByb3BlcnR5TWFwXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBPcmRlcjogdGhpcy5jdXJyZW50U29ydHNbMF0udmFsdWUsXG4gICAgICAgICAgfVxuICAgICAgICA6IG51bGw7XG4gICAgY29uc3Qgc2VhcmNoVGVybUV4aXN0cyA9IHRoaXMuY3VycmVudFNlYXJjaFRlcm0udHJpbSgpLmxlbmd0aCA+IDA7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG4gICAgY29uc3QgcmVzID0gc2VhcmNoVGVybUV4aXN0c1xuICAgICAgPyBhd2FpdCB0aGlzLnNlcnZlci5nZXQoXG4gICAgICAgICAgYFRhc2tVc2VyL0dldFRhc2tVc2VyV2l0aFBhcmFtLyR7dGhpcy5jdXJyZW50U2VhcmNoVGVybS50cmltKCl9LzAvJHtcbiAgICAgICAgICAgIHRoaXMucGFnZVNpemVcbiAgICAgICAgICB9YCxcbiAgICAgICAgICB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5Xb3JrRmxvd0FQSVxuICAgICAgICApXG4gICAgICA6IGF3YWl0IHRoaXMuc2VydmVyLnBvc3QoXG4gICAgICAgICAgc29ydFBhcmFtXG4gICAgICAgICAgICA/IGBUYXNrVXNlci9TZWFyY2hUYXNrVXNlcnMvMC8ke3RoaXMucGFnZVNpemV9LyR7c29ydFBhcmFtLlBhcmFtfS8ke3NvcnRQYXJhbS5PcmRlcn1gXG4gICAgICAgICAgICA6IGBUYXNrVXNlci9TZWFyY2hUYXNrVXNlcnMvMC8ke3RoaXMucGFnZVNpemV9YCxcbiAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgICAgICk7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXJzID0gW107XG4gICAgICB0aGlzLmN1cnJlbnRTb3J0cyA9IFtdO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYWdlU3RhdGUgPSByZXMgYXMgUGFnZWRSZXN1bHQ8Rm9ybUVudGl0eT47XG4gICAgICB2YXIgcmVzdWx0ID0gKHJlcyBhcyBQYWdlZFJlc3VsdDxGb3JtRW50aXR5PikuUmVzdWx0O1xuICAgICAgdGhpcy5kYXRhID0gcmVzdWx0Lm1hcCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLngsXG4gICAgICAgICAgaWQ6IHguSWQsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2V0VXBDYXJkRGF0YSgpO1xuICAgIH1cbiAgfVxuICBhc3luYyBsb2FkTW9yZUZpbHRlcnNBbmRTb3J0cygpOiBQcm9taXNlPFxuICAgIFBhZ2VkUmVzdWx0PEZvcm1FbnRpdHk+IHwgdW5kZWZpbmVkXG4gID4ge1xuICAgIGlmICghdGhpcy5wYWdlU3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHBheWxvYWQ6IFNlYXJjaFByb3BlcnR5VmFsdWVbXSA9IHRoaXMuY3VycmVudEZpbHRlcnMubWFwKCh4KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBQcm9wZXJ0eU5hbWU6XG4gICAgICAgICAgVGFza1VzZXJQcm9wZXJ0eU1hcFt4Lm5hbWUgYXMga2V5b2YgdHlwZW9mIFRhc2tVc2VyUHJvcGVydHlNYXBdLFxuICAgICAgICBFbnRpdHlWYWx1ZTogeC52YWx1ZSxcbiAgICAgICAgT3BlcmF0b3I6IFNlYXJjaE9wZXJhdG9yLkFuZCxcbiAgICAgICAgU2lnbjpcbiAgICAgICAgICB4LmNvbmRpdGlvbiAmJiBPYmplY3Qua2V5cyhGaWx0ZXJUeXBlcykuaW5jbHVkZXMoeC5jb25kaXRpb24pXG4gICAgICAgICAgICA/IChGaWx0ZXJUeXBlc1tcbiAgICAgICAgICAgICAgICB4LmNvbmRpdGlvbiBhcyBrZXlvZiB0eXBlb2YgRmlsdGVyVHlwZXNcbiAgICAgICAgICAgICAgXSBhcyB1bmtub3duIGFzIFNlYXJjaFByb3BlcnR5U2lnbilcbiAgICAgICAgICAgIDogU2VhcmNoUHJvcGVydHlTaWduLkVRLFxuICAgICAgICBUeXBlOlxuICAgICAgICAgIHgubmFtZSA9PSBUYXNrVXNlclByb3BlcnR5TmFtZS5EYXRlXG4gICAgICAgICAgICA/IFNlYXJjaFByb3BlcnR5VmFsdWVUeXBlLkRhdGVcbiAgICAgICAgICAgIDogU2VhcmNoUHJvcGVydHlWYWx1ZVR5cGUuU3RyaW5nLFxuICAgICAgfTtcbiAgICB9KTtcbiAgICBjb25zdCBzb3J0UGFyYW06IHsgUGFyYW06IHN0cmluZzsgT3JkZXI6IHN0cmluZyB9IHwgbnVsbCA9XG4gICAgICB0aGlzLmN1cnJlbnRTb3J0cy5sZW5ndGggPiAwXG4gICAgICAgID8ge1xuICAgICAgICAgICAgUGFyYW06XG4gICAgICAgICAgICAgIFRhc2tVc2VyUHJvcGVydHlNYXBbXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U29ydHNbMF0ubmFtZSBhcyBrZXlvZiB0eXBlb2YgVGFza1VzZXJQcm9wZXJ0eU1hcFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgT3JkZXI6IHRoaXMuY3VycmVudFNvcnRzWzBdLnZhbHVlLFxuICAgICAgICAgIH1cbiAgICAgICAgOiBudWxsO1xuICAgIGNvbnN0IHNlYXJjaFRlcm1FeGlzdHMgPSB0aGlzLmN1cnJlbnRTZWFyY2hUZXJtLnRyaW0oKS5sZW5ndGggPiAwO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuICAgIGNvbnN0IHJlcyA9IHNlYXJjaFRlcm1FeGlzdHNcbiAgICAgID8gYXdhaXQgdGhpcy5zZXJ2ZXIuZ2V0KFxuICAgICAgICAgIGBUYXNrVXNlci9HZXRUYXNrVXNlcldpdGhQYXJhbS8ke3RoaXMuY3VycmVudFNlYXJjaFRlcm0udHJpbSgpfS8ke1xuICAgICAgICAgICAgdGhpcy5wYWdlU3RhdGUuU2tpcFxuICAgICAgICAgIH0vJHt0aGlzLnBhZ2VTaXplfWAsXG4gICAgICAgICAgdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuV29ya0Zsb3dBUElcbiAgICAgICAgKVxuICAgICAgOiBhd2FpdCB0aGlzLnNlcnZlci5wb3N0KFxuICAgICAgICAgIHNvcnRQYXJhbVxuICAgICAgICAgICAgPyBgVGFza1VzZXIvU2VhcmNoVGFza1VzZXJzLyR7dGhpcy5wYWdlU3RhdGUuU2tpcH0vJHt0aGlzLnBhZ2VTaXplfS8ke3NvcnRQYXJhbS5QYXJhbX0vJHtzb3J0UGFyYW0uT3JkZXJ9YFxuICAgICAgICAgICAgOiBgVGFza1VzZXIvU2VhcmNoVGFza1VzZXJzLyR7dGhpcy5wYWdlU3RhdGUuU2tpcH0vJHt0aGlzLnBhZ2VTaXplfWAsXG4gICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgICB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5Xb3JrRmxvd0FQSVxuICAgICAgICApO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKGZhbHNlKTtcbiAgICBpZiAocmVzIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHJlc3VsdCA9IHJlcyBhcyBQYWdlZFJlc3VsdDxGb3JtRW50aXR5PjtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9XG4gIG9uRmlsdGVyQXBwbGllZChhcHBsaWVkRmlsdGVyOiBJRGF0YUZpbHRlcltdKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXBwbGllZEZpbHRlcikpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJUYWJsZUNvdW50ID0gYXBwbGllZEZpbHRlci5sZW5ndGg7XG5cbiAgICAgIHRoaXMuc2hvd0ZpbHRlciA9IGZhbHNlO1xuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBhcHBsaWVkRmlsdGVyXG4gICAgICAgIC5maWx0ZXIoKGZpbHRlcikgPT4gZmlsdGVyLmNoZWNrZWQpXG4gICAgICAgIC5tYXAoKGZpbHRlcikgPT4gKHtcbiAgICAgICAgICBQcm9wZXJ0eU5hbWU6IGZpbHRlci5uYW1lLFxuICAgICAgICAgIEVudGl0eVZhbHVlOiBmaWx0ZXIudmFsdWUsXG4gICAgICAgICAgVHlwZTogZmlsdGVyLnR5cGUsXG4gICAgICAgICAgT3BlcmF0b3I6ICdBbmQnLFxuICAgICAgICAgIFNpZ246IHRoaXMuZ2V0Q29uZGl0aW9uKGZpbHRlci5jb25kaXRpb24pLFxuICAgICAgICB9KSk7XG5cbiAgICAgIHRoaXMucG9zdFNlYXJjaChxdWVyeVBhcmFtcyk7XG4gICAgfVxuICB9XG4gIGdldENvbmRpdGlvbih2YWx1ZTogYW55KSB7XG4gICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgY2FzZSBDb25kaXRpb25hbE9wdGlvbnMuT246XG4gICAgICAgIHJldHVybiBTZWFyY2hQcm9wZXJ0eVNpZ24uRVE7XG4gICAgICBjYXNlIENvbmRpdGlvbmFsT3B0aW9ucy5BZnRlcjpcbiAgICAgICAgcmV0dXJuIFNlYXJjaFByb3BlcnR5U2lnbi5FUTtcbiAgICAgIGNhc2UgQ29uZGl0aW9uYWxPcHRpb25zLkJlZm9yZTpcbiAgICAgICAgcmV0dXJuIFNlYXJjaFByb3BlcnR5U2lnbi5MVDtcbiAgICAgIGNhc2UgQ29uZGl0aW9uYWxPcHRpb25zLk5vdEVxdWFsOlxuICAgICAgICByZXR1cm4gU2VhcmNoUHJvcGVydHlTaWduLk5FUTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgb25Tb3J0VXBkYXRlZCh1cGRhdGVkU29ydHM6IElEYXRhRmlsdGVyW10pIHtcbiAgICB0aGlzLmN1cnJlbnRTb3J0cyA9IHVwZGF0ZWRTb3J0cztcbiAgICB0aGlzLnNob3dTb3J0ID0gZmFsc2U7XG4gICAgdGhpcy5zZWxlY3RlZFNvcnRUYWJsZUNvdW50ID0gdXBkYXRlZFNvcnRzLmxlbmd0aDtcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcnNBbmRTb3J0cygpO1xuICB9XG5cbiAgaGFuZGxlU2VhcmNoKGV2ZW50OiB7IGtleTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0pIHtcbiAgICB0aGlzLnNlYXJjaFRlcm0kLm5leHQoZXZlbnQudmFsdWUpO1xuICB9XG5cbiAgaGFuZGxlRXhwb3J0KGV4cG9ydGVkRGF0YTogUGFydGlhbDxhbnk+W10pIHtcbiAgICAvLyBjb25zb2xlLmxvZygnRXhwb3J0ZWQgZGF0YTonLCBleHBvcnRlZERhdGEpO1xuICAgIHRoaXMuZG93bmxvYWRDU1YoZXhwb3J0ZWREYXRhKTtcbiAgfVxuICBwcml2YXRlIGRvd25sb2FkQ1NWKGRhdGE6IFBhcnRpYWw8YW55PltdKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IE9iamVjdC5rZXlzKGRhdGFbMF0pO1xuICAgIGNvbnN0IGNzdkNvbnRlbnQgPSBbXG4gICAgICBoZWFkZXJzLmpvaW4oJywnKSxcbiAgICAgIC4uLmRhdGEubWFwKChyb3cpID0+IGhlYWRlcnMubWFwKChoZWFkZXIpID0+IHJvd1toZWFkZXJdKS5qb2luKCcsJykpLFxuICAgIF0uam9pbignXFxuJyk7XG5cbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2NzdkNvbnRlbnRdLCB7IHR5cGU6ICd0ZXh0L2NzdjtjaGFyc2V0PXV0Zi04OycgfSk7XG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBpZiAobGluay5kb3dubG9hZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB1cmwpO1xuICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgJ2V4cG9ydC5jc3YnKTtcbiAgICAgIGxpbmsuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICAgIGxpbmsuY2xpY2soKTtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XG4gICAgfVxuICB9XG59XG4iLCI8aGVhZGVyIGNsYXNzPVwicm91bmRlZC1sZyBzaGFkb3ctbGcgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIHB4LTYgcHktMiBiZy1bI0Q0QTAwNzczXVwiPlxuPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xMFwiPlxuICAgIDxoNCBjbGFzcz1cImZvbnQtc2VtaWJvbGRcIj57e2Zvcm1OYW1lfX08L2g0PlxuICAgIDxzcGFuIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIj5cbiAgICAgIFJlZiBJRDpcbiAgICAgIDxzcGFuPnt7SWR9fTwvc3Bhbj5cbiAgICA8L3NwYW4+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJmbGV4IGdhcC0zIGl0ZW1zLWNlbnRlclwiPlxuICAgIDx2ZXJiZW5hLWJ1dHRvbiBbcGRdPVwiJzZweCdcIiBjbGFzcz1cInZlcmJlbi1wcmltYXJ5LWJ1dHRvblwiIChjbGljayk9XCJzYXZlQWxsUHJvcGVydGllcygpXCIgdGV4dD1cIlNhdmUgQWxsXCI+PC92ZXJiZW5hLWJ1dHRvbj5cbiAgICAgIDx2ZXJiZW4tc3ZnIChjbGljayk9XCJnb0JhY2soKVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiBbd2lkdGhdPVwiMTdcIiBbaGVpZ2h0XT1cIjE3XCIgW2ljb25dPVwiJ2Nsb3NlJ1wiPjwvdmVyYmVuLXN2Zz5cbjwvZGl2PlxuPC9oZWFkZXI+XG48ZGl2ICNtZXNzYWdlTG9nIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtNCBtZXNzYWdlLWxvZy1jb250YWluZXJcIj5cbiAgPHZlcmJlbi1kYXRhLXZpZXcgI3ZkdiBbdmlld1N0YXRlXT1cIntcbiAgICAgICAgaXNTZWFyY2g6IHRydWUsXG4gICAgICAgIGlzQ29sdW1uOiB0cnVlLFxuICAgICAgICBpc0ZpbHRlcjogdHJ1ZSxcbiAgICAgICAgaXNTb3J0OiB0cnVlLFxuICAgICAgICBpc0V4cG9ydDogdHJ1ZSxcbiAgICAgICAgaXNTZWxlY3Q6IHRydWUsXG4gICAgICAgIGlzQ3JlYXRlOiB0cnVlLFxuICAgICAgICBpc1RvZ2dsZTp0cnVlLFxuICAgICAgfVwiIFtidXR0b25DbGFzc109XCInbXktY3VzdG9tLWJ1dHRvbi1jbGFzcydcIiBbaWNvbkNsYXNzXT1cIidteS1pY29uLWNsYXNzJ1wiXG4gICAgICBbc2hvd1NvcnRDaGlsZF09XCJzaG93U29ydFwiIFtzaG93Q29sdW1uQ2hpbGRdPVwic2hvd0NvbHVtblwiXG4gICAgW2FjdGl2ZUljb25DbGFzc109XCInbXktYWN0aXZlLWljb24tY2xhc3MnXCIgW3NlbGVjdGVkQ29sdW1uQ291bnRdPVwic2VsZWN0ZWRDb2x1bW5UYWJsZUNvdW50XCIgW3NlbGVjdGVkU29ydENvdW50XT1cInNlbGVjdGVkU29ydFRhYmxlQ291bnRcIlxuICAgIFtzZWxlY3RlZEZpbHRlclRhYmxlQ291bnRdPVwic2VsZWN0ZWRGaWx0ZXJUYWJsZUNvdW50XCIgW3Nob3dGaWx0ZXJDaGlsZF09XCJzaG93RmlsdGVyXCIgW3NlYXJjaFZhbHVlXT1cInNlYXJjaFRlcm1cIlxuICAgICh2aWV3Q2hhbmdlKT1cIm9uVmlld0NoYW5nZSgkZXZlbnQpXCIgKHN0YXRlQ2hhbmdlKT1cIm9uU3RhdGVDaGFuZ2UoJGV2ZW50KVwiIChvblNlYXJjaENoYW5nZSk9XCJvblNlYXJjaCgkZXZlbnQpXCI+XG4gICAgPGRpdiBjbGFzcz1cIm10LTJcIiB0YWJsZS1jb250ZW50PlxuICAgICAgPGxpYi1kYXRhLXRhYmxlICNkdCBbZGF0YV09XCJkYXRhWzBdLlByb3BlcnRpZXNcIiBbY29sdW1uc109XCJ2aXNpYmxlQ29sdW1uRGVmXCIgW3N0eWxlQ29uZmlnXT1cInN0eWxlc1wiXG4gICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cInNlbGVjdFwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbCBsZXQtaXNTZWxlY3RlZD1cImlzU2VsZWN0ZWRcIiBsZXQtdG9nZ2xlUm93U2VsZWN0aW9uPVwidG9nZ2xlUm93U2VsZWN0aW9uXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwiaXNTZWxlY3RlZFwiIChjaGFuZ2UpPVwidG9nZ2xlUm93U2VsZWN0aW9uKClcIiAvPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNoZWFkZXIgbGV0LWFsbFJvd3NTZWxlY3RlZD1cImFsbFJvd3NTZWxlY3RlZFwiIGxldC1zb21lUm93c1NlbGVjdGVkPVwic29tZVJvd3NTZWxlY3RlZFwiXG4gICAgICAgICAgICBsZXQtdG9nZ2xlQWxsUm93cz1cInRvZ2dsZUFsbFJvd3NcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJhbGxSb3dzU2VsZWN0ZWQoKVwiIFtpbmRldGVybWluYXRlXT1cInNvbWVSb3dzU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlQWxsUm93cygpXCIgLz5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJuYW1lXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC1yb3c9XCJyb3dcIiBsZXQtdmFsdWU+XG4gICAgICAgICAgICB7eyB2YWx1ZS5OYW1lIH19XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGxFZGl0IGxldC1yb3c9XCJyb3dcIiBsZXQtdXBkYXRlVmFsdWU9XCJ1cGRhdGVWYWx1ZVwiIGxldC12YWx1ZT5cbiAgICAgICAgICAgIDx2ZXJiZW5hLWlucHV0IGlucHV0Q29udGFpbmVyQ2xhc3M9XCJ3LWZpdFwiIFsobmdNb2RlbCldPVwicm93Lk5hbWVcIj48L3ZlcmJlbmEtaW5wdXQ+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cInByb3BlcnR5TmFtZVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbCBsZXQtcm93PVwicm93XCIgbGV0LXZhbHVlPlxuICAgICAgICAgICAge3sgcm93LlByb3BlcnR5TmFtZSB9fVxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsRWRpdCBsZXQtcm93PVwicm93XCIgbGV0LXVwZGF0ZVZhbHVlPVwidXBkYXRlVmFsdWVcIiBsZXQtdmFsdWU+XG4gICAgICAgICAgICA8dmVyYmVuYS1pbnB1dCAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudCwgcm93KVwiXG4gIChwYXN0ZSk9XCJvblBhc3RlKCRldmVudCwgcm93KVwiXG4gIChpbnB1dCk9XCJvbklucHV0KCRldmVudCwgcm93KVwiIGlucHV0Q29udGFpbmVyQ2xhc3M9XCJ3LWZpdFwiIFsobmdNb2RlbCldPVwicm93LlByb3BlcnR5TmFtZVwiPjwvdmVyYmVuYS1pbnB1dD5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJtaW5WYWx1ZVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbCBsZXQtcm93PVwicm93XCIgbGV0LXZhbHVlPlxuICAgICAgICAgICAge3sgdmFsdWUgfX1cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbEVkaXQgbGV0LXJvdz1cInJvd1wiIGxldC11cGRhdGVWYWx1ZT1cInVwZGF0ZVZhbHVlXCIgbGV0LXZhbHVlPlxuICAgICAgICAgICAgPHZlcmJlbmEtaW5wdXQgW3R5cGVdPVwiJ251bWJlcidcIiBbbmdNb2RlbF09XCJnZXRTdHJpbmdWYWx1ZShyb3csICdNaW5WYWx1ZScpXCJcbiAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImNvbnZlcnRUb0ludCgkZXZlbnQsIHJvdywgJ01pblZhbHVlJylcIiBpbnB1dENvbnRhaW5lckNsYXNzPVwidy1bMTMwcHhdXCI+PC92ZXJiZW5hLWlucHV0PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cIm1heFZhbHVlXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC1yb3c9XCJyb3dcIiBsZXQtdmFsdWU+XG4gICAgICAgICAgICB7eyB2YWx1ZSB9fVxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsRWRpdCBsZXQtcm93PVwicm93XCIgbGV0LXVwZGF0ZVZhbHVlPVwidXBkYXRlVmFsdWVcIiBsZXQtdmFsdWU+XG4gICAgICAgICAgICA8dmVyYmVuYS1pbnB1dCBbdHlwZV09XCInbnVtYmVyJ1wiIGlucHV0Q29udGFpbmVyQ2xhc3M9XCJ3LVsxMzBweF1cIiBbbmdNb2RlbF09XCJnZXRTdHJpbmdWYWx1ZShyb3csICdNYXhWYWx1ZScpXCJcbiAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImNvbnZlcnRUb0ludCgkZXZlbnQsIHJvdywgJ01heFZhbHVlJylcIj48L3ZlcmJlbmEtaW5wdXQ+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwiZGVmYXVsdFZhbHVlXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC1yb3c9XCJyb3dcIiBsZXQtdmFsdWU+XG4gICAgICAgICAgICB7eyB2YWx1ZSB9fVxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsRWRpdCBsZXQtcm93PVwicm93XCIgbGV0LXVwZGF0ZVZhbHVlPVwidXBkYXRlVmFsdWVcIiBsZXQtdmFsdWU+XG4gICAgICAgICAgICA8dmVyYmVuYS1pbnB1dCBbdHlwZV09XCIndGV4dCdcIiBpbnB1dENvbnRhaW5lckNsYXNzPVwidy1bMTMwcHhdXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3cuRGVmYXVsdFZhbHVlXCI+PC92ZXJiZW5hLWlucHV0PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cImRhdGFUeXBlXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC1yb3c9XCJyb3dcIiBsZXQtdmFsdWU+XG4gICAgICAgICAgICB7eyB2YWx1ZSB9fVxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsRWRpdCBsZXQtcm93PVwicm93XCIgbGV0LXVwZGF0ZVZhbHVlPVwidXBkYXRlVmFsdWVcIiBsZXQtdmFsdWU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMVwiPlxuICAgICAgICAgICAgICA8dmVyYmVuLWRyb3AtZG93biB3aWR0aD1cIjEwMCVcIiBwbGFjZWhvbGRlcj1cIkNoYW5nZSBEYXRhIFR5cGVcIiBbKG9wdGlvbnMpXT1cImRhdGFUeXBlXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvdy5EYXRhVHlwZVwiPlxuICAgICAgICAgICAgICA8L3ZlcmJlbi1kcm9wLWRvd24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cImlzUmVxdWlyZWRcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LXJvdz1cInJvd1wiIGxldC12YWx1ZT5cbiAgICAgICAgICAgIDx2ZXJiZW4tc3ZnICpuZ0lmPVwidmFsdWUgPT09IHRydWVcIiBbaWNvbl09XCInY2hlY2snXCI+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgICAgPHZlcmJlbi1zdmcgKm5nSWY9XCJ2YWx1ZSA9PT0gZmFsc2VcIiBbaWNvbl09XCInZXJyb3InXCI+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsRWRpdCBsZXQtcm93PVwicm93XCIgbGV0LXVwZGF0ZVZhbHVlPVwidXBkYXRlVmFsdWVcIiBsZXQtdmFsdWU+XG4gICAgICAgICAgICA8dmVyYmVuYS1zd2l0Y2ggW29uQ29sb3JdPVwiJyMxQTIzN0UnXCIgWyhuZ01vZGVsKV09XCJyb3cuSXNSZXF1aXJlZFwiPjwvdmVyYmVuYS1zd2l0Y2g+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJhY3Rpb25zXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC1pc0VkaXRpbmc9XCJpc0VkaXRpbmdcIiBsZXQtdG9nZ2xlUm93RWRpdD1cInRvZ2dsZVJvd0VkaXRcIiBsZXQtcm93PVwicm93XCIgbGV0LXZhbHVlPlxuICAgICAgICAgICAgPHZlcmJlbi1wb3AtVXAgW2N1c3RvbVN0eWxlc109XCJ7J3otaW5kZXgnOiAnOTknfVwiIFtkcm9wZG93bk9wZW5dPVwib3BlbkRyb3Bkb3duSWQ9PT1yb3cuaWRcIlxuICAgICAgICAgICAgICBbZW5hYmxlTW91c2VMZWF2ZV09XCJmYWxzZVwiIChjbG9zZSk9XCJvbkNsb3NlKClcIj5cbiAgICAgICAgICAgICAgPHZlcmJlbi1zdmcgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBhY3Rpb25zLWljb25cIiAoY2xpY2spPVwib3BlbkRyb3Bkb3duKHJvdylcIiBkcm9wZG93bi10cmlnZ2VyXG4gICAgICAgICAgICAgICAgaWNvbj1cImxpc3RcIj48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3AtdXAtY29udGVudCBmbGV4IGZsZXgtY29sXCIgKm5nSWY9XCJvcGVuRHJvcGRvd25JZD09PXJvdy5JZFwiIGRyb3Bkb3duLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwidG9nZ2xlUm93RWRpdCgpXCIgY2xhc3M9XCJwb3AtdXAtdmFsdWUgY3Vyc29yLXBvaW50ZXJcIj5FZGl0PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiZGVsZXRlUHJvcGVydHkocm93LklkKVwiIGNsYXNzPVwicG9wLXVwLXZhbHVlIGN1cnNvci1wb2ludGVyXCI+RGVsZXRlPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC92ZXJiZW4tcG9wLVVwPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsRWRpdCBsZXQtaXNFZGl0aW5nPVwiaXNFZGl0aW5nXCIgbGV0LXRvZ2dsZVJvd0VkaXQ9XCJ0b2dnbGVSb3dFZGl0XCIgbGV0LXJvdz1cInJvd1wiIGxldC12YWx1ZT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8dmVyYmVuLXN2ZyBpY29uPVwiY2hlY2tcIiBbd2lkdGhdPVwiMTVcIiBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZVZpYVRhYmxlKHJvdywgdG9nZ2xlUm93RWRpdClcIj48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgICAgIDx2ZXJiZW4tc3ZnIChjbGljayk9XCJ0b2dnbGVSb3dFZGl0KCk7IGRlbGV0ZVByb3BlcnR5KHJvdy5JZClcIiBpY29uPVwiZGVsZXRlXCIgIFt3aWR0aF09XCIxNVwiIFtoZWlnaHRdPVwiMTVcIj48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgICAgIDx2ZXJiZW4tc3ZnIGljb249XCJjYXJkVmlld0FsdFwiIFt3aWR0aF09XCIxNVwiIFtoZWlnaHRdPVwiMTVcIiAoY2xpY2spPVwiZ29Ub0NhcmRWaWV3KHZhbHVlKVwiPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9saWItZGF0YS10YWJsZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNhcmQtY29udGVudD5cbiAgICAgIDx2ZXJiZW4tY2FyZC1kYXRhLXZpZXcgYm9yZGVyUmFkaXVzPVwiMTJweFwiICN2ZGN2IGRhdGFJZD1cIklkXCIgYm9yZGVyPVwiNXB4XCIgW2NhcmREYXRhTGlzdF09XCJjYXJkRGF0YVwiXG4gICAgICAgIHJiZ0NvbG9yPVwiI2Y1ZjZmOVwiIG1nPVwiMHB4XCI+XG4gICAgICAgIDx2ZXJiZW4tbGVmdC1jYXJkLWRhdGEtdmlldyBjbGFzcz1cInNwYWNlLXktN1wiPlxuICAgICAgICAgIDx2ZXJiZW4tbGVmdC1jYXJkLWRhdGEgI3ZsY2QgW3BhcmVudF09XCJ2ZGN2XCIgZGF0YUlkPVwiaWRcIlxuICAgICAgICAgICAgY2xhc3M9XCJiZy1zZWNvbmRhcnktMTAwIHJvdW5kZWQteGwgYm9yZGVyLXByaW1hcnkgYm9yZGVyLVsxcHhdXCIgW2NhcmREYXRhTGlzdF09XCJjYXJkRGF0YVwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjYXJkIGxldC1pdGVtPlxuICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJ1c2VyQ2FyZENsaWNrZWQoaXRlbSlcIiBjbGFzcz1cImZsZXggY3Vyc29yLXBvaW50ZXIgaC1bbWF4LWNvbnRlbnRdXCI+XG4gICAgICAgICAgICAgICAgPCEtLSA8dmVyYmVuLXN2ZyBbd2lkdGhdPVwiMTVcIiBbaGVpZ2h0XT1cIjE1XCIgKGNsaWNrKT1cInRvZ2dsZUNoaWxkcmVuKGl0ZW0pOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJpdGVtLmNoaWxkcmVuICYmIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoPyd2aXNpYmxlJzonaW52aXNpYmxlJ1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaXRlbXMtY2VudGVyIGZsZXggIHByLTEgY3Vyc29yLXBvaW50ZXJcIiBbaWNvbl09XCJpdGVtLmlzQ2hpbGRyZW5FeHBhbmRlZD8nbWludXMnOidwbHVzJ1wiIC8+IC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBiZy1zZWNvbmRhcnkgcm91bmRlZC14bFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMyByb3VuZGVkLXhsIHJvdW5kZWQtdHItbm9uZSByb3VuZGVkLWJyLW5vbmVcIiBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtLnNlbGVjdGVkID8gJ2JnLXByaW1hcnknIDogJ2JnLXNlY29uZGFyeS0yMDAnXG4gICAgICAgICAgICAgICAgICAgIFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTMgcHgtNCBmbGV4LTEgaC1bMTAwJV1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtc3RhcnQgZmxleC0xIGdhcC0xIGp1c3RpZnktYmV0d2VlbiBoLVsxMDAlXVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGZsZXgtMSBjYXJkLW1pbi1oZWlnaHQganVzdGlmeS1iZXR3ZWVuIGgtWzEwMCVdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gbXItNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cIm15LTAgZm9udC1ib2xkIHRleHQtWyM0MDQwNDBdIGxlYWRpbmctWzE5LjVweF1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uZGF0YS5OYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiIXRleHQtWzEwcHhdIHRleHQtWyM0MDQwNDBdXCI+RGF0YSBUeXBlOjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiIXRleHQtWzEzcHhdIGZvbnQtYm9sZFwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZGF0YS5EYXRhVHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCIhdGV4dC1bMTBweF0gdGV4dC1bIzQwNDA0MF1cIj5EZWZhdWx0IFZhbHVlOjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIiF0ZXh0LVsxMnB4XVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5kYXRhLkRlZmF1bHRWYWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtZW5kIGgtWzEwMCVdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZW51bS12YWwge3tpdGVtLmRhdGEuU3RhdHVzfX1cIj57e2l0ZW0uZGF0YS5TdGF0dXN9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvdmVyYmVuLWxlZnQtY2FyZC1kYXRhPlxuICAgICAgICA8L3ZlcmJlbi1sZWZ0LWNhcmQtZGF0YS12aWV3PlxuICAgICAgICA8dmVyYmVuLXJpZ2h0LWNhcmQtZGF0YS12aWV3PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcGFyZW50PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImN1cnJlbnREYXRhXCIgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHJvdW5kZWQteGwgaC1mdWxsIHctZnVsbCByZWxhdGl2ZSBnYXAtNlwiPlxuICAgICAgICAgICAgICA8dmVyYmVuYS1pbnB1dCBuYW1lPVwiTmFtZVwiIGxhYmVsPVwiTmFtZVwiIFxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImN1cnJlbnREYXRhLmRhdGEuTmFtZVwiIC8+XG4gICAgICAgICAgICAgICAgPHZlcmJlbmEtaW5wdXQgbmFtZT1cIk5hbWVcIiBsYWJlbD1cIlByb3BlcnR5IE5hbWVcIiAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudCwgY3VycmVudERhdGEuZGF0YSlcIlxuICAocGFzdGUpPVwib25QYXN0ZSgkZXZlbnQsIGN1cnJlbnREYXRhLmRhdGEpXCJcbiAgKGlucHV0KT1cIm9uSW5wdXQoJGV2ZW50LCBjdXJyZW50RGF0YS5kYXRhKVwiXG4gICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImN1cnJlbnREYXRhLmRhdGEuUHJvcGVydHlOYW1lXCIgLz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2PkRhdGEgVHlwZTwvZGl2PlxuICAgICAgICAgICAgICAgIDx2ZXJiZW4tZHJvcC1kb3duIHdpZHRoPVwiMTAwJVwiIHBsYWNlaG9sZGVyPVwiQ2hhbmdlIERhdGEgVHlwZVwiIFsob3B0aW9ucyldPVwiZGF0YVR5cGVcIlxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50RGF0YS5kYXRhLkRhdGFUeXBlXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25Ecm9wRG93bkNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPC92ZXJiZW4tZHJvcC1kb3duPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY3VycmVudERhdGEuZGF0YS5EYXRhVHlwZT09PSdTaW5nbGVTZWxlY3Rpb24nIHx8IGN1cnJlbnREYXRhLmRhdGEuRGF0YVR5cGU9PT0nTXVsdGlTZWxlY3Rpb24nXCI+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0yXCI+RW50ZXIgT3B0aW9uczwvcD5cbiAgICAgICAgICAgICAgICA8dmVyYmVuLWNoaXAgW3BsYWNlaG9sZGVyXT1cIidFbnRlciBPcHRpb25zJ1wiIFsobmdNb2RlbCldPVwiY2hpcEFycmF5XCIgKG9uQ2hhbmdlKT1cIm9uQ2hpcENoYW5nZSgkZXZlbnQpXCI+PC92ZXJiZW4tY2hpcD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDx2ZXJiZW5hLWlucHV0XG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZUhvbGRlcl09XCInRW50ZXIgZGVmYXVsdCB0ZXh0J1wiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY3VycmVudERhdGEuZGF0YS5EZWZhdWx0VmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwiRGVmYXVsdFZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJEZWZhdWx0IFZhbHVlIChvcHRpb25hbClcIlxuXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICBcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMlwiPlJlcXVpcmVkPC9wPlxuXG4gICAgICAgICAgICAgICAgPHZlcmJlbmEtc3dpdGNoIFtvbkNvbG9yXT1cIicjMUEyMzdFJ1wiIFsobmdNb2RlbCldPVwiY3VycmVudERhdGEuZGF0YS5Jc1JlcXVpcmVkXCI+PC92ZXJiZW5hLXN3aXRjaD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY3VycmVudERhdGEuZGF0YS5EYXRhVHlwZT09PSdOdW1iZXInfHxjdXJyZW50RGF0YS5kYXRhLkRhdGFUeXBlPT09J1RleHQnIFwiIGNsYXNzPVwiIGZsZXggZmxleC1jb2wgZ2FwLTZcIj5cbiAgICAgICAgICAgICAgPHZlcmJlbmEtaW5wdXRcbiAgICAgICAgICAgICAgW3R5cGVdPVwiJ251bWJlcidcIlxuICAgICAgICAgICAgICBuYW1lPVwibWluVmFsdWVcIlxuICAgICAgICAgICAgICBsYWJlbD1cIk1pbiBWYWx1ZVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cImdldFN0cmluZ1ZhbHVlKGN1cnJlbnREYXRhLmRhdGEsICdNaW5WYWx1ZScpXCJcbiAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIlxuICAgICAgICAgICAgICAgIGNvbnZlcnRUb0ludCgkZXZlbnQsIGN1cnJlbnREYXRhLmRhdGEsICdNaW5WYWx1ZScpXG4gICAgICAgICAgICAgIFwiIC8+XG4gICAgICAgICAgICAgICAgPHZlcmJlbmEtaW5wdXQgW3R5cGVdPVwiJ251bWJlcidcIiBuYW1lPVwibWF4VmFsdWVcIiBsYWJlbD1cIk1heCBWYWx1ZVwiIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZVRhYmxlKClcIlxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZ2V0U3RyaW5nVmFsdWUoY3VycmVudERhdGEuZGF0YSwgJ01heFZhbHVlJylcIiAodmFsdWVDaGFuZ2UpPVwiXG4gICAgICAgICAgICAgICAgY29udmVydFRvSW50KCRldmVudCwgY3VycmVudERhdGEuZGF0YSwgJ01heFZhbHVlJylcbiAgICAgICAgICAgICAgXCIgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwhLS0gYnV0dG9ucyAtLT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIHctZnVsbCBib3R0b20tOCBsZWZ0LTAgcmlnaHQtMFwiPlxuICAgICAgICAgICAgICAgIDx2ZXJiZW5hLWJ1dHRvbiAoY2xpY2spPVwiZGVsZXRlUHJvcGVydHkoY3VycmVudERhdGEuZGF0YS5JZClcIiBjbGFzcz1cInZlcmJlbi1kZWxldGUtYnV0dG9uXCIgdGV4dD1cIkRlbGV0ZVwiPjwvdmVyYmVuYS1idXR0b24+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTNcIj5cbiAgICAgICAgICAgICAgICAgIDx2ZXJiZW5hLWJ1dHRvbiBjbGFzcz1cInZlcmJlbi1zd2l0Y2gtYnV0dG9uXCIgKGNsaWNrKT1cImdvVG9UYWJsZVZpZXcoKVwiXG4gICAgICAgICAgICAgICAgICAgIHRleHQ9XCJTd2l0Y2ggVG8gVGFibGVcIj48L3ZlcmJlbmEtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPCEtLSA8dmVyYmVuYS1idXR0b24gY2xhc3M9XCJ2ZXJiZW4tcHJpbWFyeS1idXR0b25cIiAoY2xpY2spPVwic2F2ZVVzZXIoKVwiIHRleHQ9XCJTYXZlXCI+PC92ZXJiZW5hLWJ1dHRvbj4gLS0+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC92ZXJiZW4tcmlnaHQtY2FyZC1kYXRhLXZpZXc+XG4gICAgICAgIDwhLS0gPHZlcmJlbi1yaWdodC1jYXJkLWRhdGEtdmlldz5cbiAgICAgICAgICAgIHllc2hoaGhoaFxuICAgICAgICAgIDwvdmVyYmVuLXJpZ2h0LWNhcmQtZGF0YS12aWV3PiAtLT5cblxuICAgICAgICA8dmVyYmVuLWNhcmQtZGF0YS12aWV3LWZvb3Rlcj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMiBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhdmRjdi5oYXNDdXJyZW50SXRlbSgpXCIgY2xhc3M9XCJtZXNzYWdlLWxvZy1idXR0b24tY29udGFpbmVyIGZsZXgganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgIDx2ZXJiZW5hLWJ1dHRvbiBbZm9udFdlaWdodF09XCInYm9sZCdcIiBbYmdDb2xvcl09XCInIzhFOEQ4NydcIiBbYm9yZGVyUmFkaXVzXT1cIic0cHgnXCIgW3RleHRDb2xvcl09XCInI2ZmZidcIlxuICAgICAgICAgICAgICAgIFt0ZXh0XT1cIidEZWxldGUnXCI+XG4gICAgICAgICAgICAgIDwvdmVyYmVuYS1idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHt7XG4gICAgICAgICAgICAgICAgdmRjdi5oYXNDdXJyZW50SXRlbSgpID8gJ2ZsZXgtMScgOiAnJ1xuICAgICAgICAgICAgICB9fSBqdXN0aWZ5LWVuZCBpdGVtcy1jZW50ZXIgZ2FwLTVcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWdpbmF0b3ItdGV4dFwiPnt7IGNhcmREYXRhLmxlbmd0aCB9fSByZWNvcmRzIGxvYWRlZDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3ZlcmJlbi1jYXJkLWRhdGEtdmlldy1mb290ZXI+XG4gICAgICA8L3ZlcmJlbi1jYXJkLWRhdGEtdmlldz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNvbHVtbi1jb250ZW50PlxuICAgICAgPHZlcmJlbi12aXNpYmxlLWNvbHVtbiAocmVzZXRGaWx0ZXIpPVwiZ2V0UHJvcGVydGllcyhJZCwgc2hvd0NvbHVtbilcIiAoY29sdW1uc1VwZGF0ZWQpPVwib25Db2x1bW5zVXBkYXRlZCgkZXZlbnQpXCIgW2JvcmRlcl09XCInMXB4IHNvbGlkIHJnYmEoMjEyLCAxNjAsIDcsIDEpJ1wiXG4gICAgICAgIGJvcmRlclJhZGl1cz1cIjEwcHhcIiBib3hTaGFkb3c9XCIycHggMnB4IDJweCAwcHggc2lsdmVyXCIgYmdDb2xvcj1cIndoaXRlXCIgd2lkdGg9XCI0MDBweFwiIHRleHRDb2xvcj1cImJsYWNrXCIgcGQ9XCIxcmVtXCJcbiAgICAgICAgcHJpbWFyeUNvbG9yPVwiI0ZGRTY4MVwiIHNlY29uZGFyeUNvbG9yPVwiIzM0NzlFOVwiIFtjb2x1bW5zXT1cInZpc2libGVDb2x1bW5zXCJcbiAgICAgICAgW2Rpc3BsYXllZENvbHVtbnNdPVwiNVwiPjwvdmVyYmVuLXZpc2libGUtY29sdW1uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgZmlsdGVyLWNvbnRlbnQ+XG4gICAgICA8dmVyYmVuLXRhYmxlLWZpbHRlciAocmVzZXRTb3J0RGF0YSk9XCJnZXRQcm9wZXJ0aWVzKElkLCBzaG93RmlsdGVyKVwiIChmaWx0ZXJzQXBwbGllZCk9XCJvbkZpbHRlckFwcGxpZWQoJGV2ZW50KVwiIFtib3JkZXJdPVwiJzFweCBzb2xpZCByZ2JhKDIxMiwgMTYwLCA3LCAxKSdcIlxuICAgICAgICBib3JkZXJSYWRpdXM9XCIxMHB4XCIgYm94U2hhZG93PVwiMnB4IDJweCAycHggMHB4IHNpbHZlclwiIGJnQ29sb3I9XCJ3aGl0ZVwiIHdpZHRoPVwiNDIwcHhcIiB0ZXh0Q29sb3I9XCJibGFja1wiIHBkPVwiMXJlbVwiXG4gICAgICAgIHByaW1hcnlDb2xvcj1cIiNGRkU2ODFcIiBzZWNvbmRhcnlDb2xvcj1cIiMzNDc5RTlcIiB0ZXJ0aWFyeUNvbG9yPVwiIzQwNDA0MFwiIFtmaWx0ZXJPcHRpb25zXT1cImZpbHRlckFycmF5XCJcbiAgICAgICAgW21heEZpbHRlckxlbmd0aF09XCIzXCI+PC92ZXJiZW4tdGFibGUtZmlsdGVyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgc29ydC1jb250ZW50PlxuICAgICAgPHZlcmJlbi1zb3J0LXRhYmxlIChyZXNldFNvcnREYXRhKT1cImdldFByb3BlcnRpZXMoSWQsIHNob3dTb3J0KVwiIChzZWxlY3RlZE9wdGlvbnMpPVwib25Tb3J0VXBkYXRlZCgkZXZlbnQpXCIgW2JvcmRlcl09XCInMXB4IHNvbGlkIHJnYmEoMjEyLCAxNjAsIDcsIDEpJ1wiXG4gICAgICAgIGJvcmRlclJhZGl1cz1cIjEwcHhcIiBib3hTaGFkb3c9XCIycHggMnB4IDJweCAwcHggc2lsdmVyXCIgYmdDb2xvcj1cIndoaXRlXCIgd2lkdGg9XCI0MDBweFwiIHRleHRDb2xvcj1cImJsYWNrXCIgcGQ9XCIxcmVtXCJcbiAgICAgICAgcHJpbWFyeUNvbG9yPVwiI0ZGRTY4MVwiIHNlY29uZGFyeUNvbG9yPVwiIzM0NzlFOVwiIHRlcnRpYXJ5Q29sb3I9XCIjNDA0MDQwXCIgW2VuYWJsZURyYWdBbmREcm9wXT1cInRydWVcIlxuICAgICAgICBbc29ydE9wdGlvbnNdPVwic29ydE9wdGlvbnNcIj48L3ZlcmJlbi1zb3J0LXRhYmxlPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgZXhwb3J0LWNvbnRlbnQ+XG4gICAgICA8bGliLWRhdGEtZXhwb3J0IFtkYXRhXT1cImRhdGFbMF0uUHJvcGVydGllc1wiIChleHBvcnREYXRhRXZlbnQpPVwiaGFuZGxlRXhwb3J0KCRldmVudClcIj5cbiAgICAgIDwvbGliLWRhdGEtZXhwb3J0PlxuICAgIDwvZGl2PlxuICA8L3ZlcmJlbi1kYXRhLXZpZXc+XG4gIDxkaXYgKm5nSWY9XCJ2ZHYuaXNUYWJsZVZpZXdcIiBjbGFzcz1cImZsZXggZ2FwLTIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgPGRpdiBjbGFzcz1cIm1lc3NhZ2UtbG9nLWJ1dHRvbi1jb250YWluZXIgZmxleCBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgIDx2ZXJiZW5hLWJ1dHRvbiBbZm9udFdlaWdodF09XCInYm9sZCdcIiBbYmdDb2xvcl09XCInIzhFOEQ4NydcIiBbYm9yZGVyUmFkaXVzXT1cIic0cHgnXCIgW3RleHRDb2xvcl09XCInI2ZmZidcIlxuICAgICAgICBbdGV4dF09XCInRGVsZXRlJ1wiPlxuICAgICAgPC92ZXJiZW5hLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZCBpdGVtcy1jZW50ZXIgZ2FwLTVcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwicGFnaW5hdG9yLXRleHRcIj57eyBjYXJkRGF0YS5sZW5ndGggfX0gcmVjb3JkcyBsb2FkZWQ8L3NwYW4+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJsb2FkTW9yZSgpXCIgY2xhc3M9XCJsb2FkLW1vcmUgdmlldy1saW5rc1wiPlxuICAgICAgICBMb2FkIG1vcmVcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cInctWzQwMHB4XSBiZy13aGl0ZSBwLTQgc2hhZG93LWxnIGJvcmRlclwiPlxuICA8Zm9ybS1jb250cm9sICBbZGF0YVR5cGVdPVwiZGF0YVR5cGUyXCIgW2Zvcm1Qcm9wZXJ0aWVzXT1cImRhdGFbMF0uUHJvcGVydGllc1wiPjwvZm9ybS1jb250cm9sPlxuPC9kaXY+XG4iXX0=
937
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvY29tcG9uZW50cy9mb3JtLWdyb3VwL2Zvcm0tZmllbGRzL2Zvcm0tZmllbGRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS1ncm91cC9mb3JtLWZpZWxkcy9mb3JtLWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBS0wsa0JBQWtCLEVBQ2xCLGNBQWMsR0FNZixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBR2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUV2RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBR2hFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7Ozs7QUFNN0QsSUFBSyxvQkFTSjtB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RUFBRSxJQUFJLEVBQUU7Z0JBQ3JCLFlBQVk7c0JBQTlCLFNBQVM7dUJBQUMsTUFBTTtnQkFDQyxRQUFRO3NCQUF6QixTQUFTO3VCQUFDLEtBQUs7Z0JBQ0MsU0FBUztzQkFBekIsU0FBUzt1QkFBQyxJQUFJO2dCQUNOLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0ksb0JBQW9CO3NCQUE3QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFJlbmRlcmVyMixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENhcmREYXRhLFxuICBDYXJkRGF0YVZpZXdDb21wb25lbnQsXG4gIENoaXBDaGFuZ2VFdmVudCxcbiAgQ29sdW1uRGVmaW5pdGlvbixcbiAgQ29uZGl0aW9uYWxPcHRpb25zLFxuICBEYXRhRmlsdGVyVHlwZSxcbiAgRGF0YVRhYmxlQ29tcG9uZW50LFxuICBEYXRhVmlld0NvbXBvbmVudCxcbiAgRHJvcGRvd25DaGFuZ2VFdmVudCxcbiAgRHJvcGRvd25Mb2FkRXZlbnQsXG4gIElEYXRhRmlsdGVyLFxufSBmcm9tICd2ZXJiZW4tbmctdWknO1xuaW1wb3J0IHsgYmFzZVN0eWxlIH0gZnJvbSAnLi4vYmFzZS10YWJsZS1zdHlsZSc7XG5pbXBvcnQgeyBVdGlsU2VydmljZSB9IGZyb20gJ3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL3NlcnZpY2VzJztcbmltcG9ydCB7IEh0dHBXZWJSZXF1ZXN0U2VydmljZSB9IGZyb20gJ3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL3NlcnZpY2VzJztcbmltcG9ydCB7IEVycm9yUmVzcG9uc2UgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgUGFnZWRSZXN1bHQgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgU2VhcmNoUHJvcGVydHlWYWx1ZSB9IGZyb20gJ3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL21vZGVscyc7XG5pbXBvcnQgeyBTZWFyY2hPcGVyYXRvciB9IGZyb20gJ3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL21vZGVscyc7XG5pbXBvcnQgeyBTZWFyY2hQcm9wZXJ0eVNpZ24gfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnRTZXJ2aWNlIH0gZnJvbSAndmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvc2VydmljZXMnO1xuaW1wb3J0IHsgU2VhcmNoUHJvcGVydHlWYWx1ZVR5cGUgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBTdGF0dXMgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgT2JqZWN0U3RhdGUgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IERhdGFUeXBlIH0gZnJvbSAndmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvbW9kZWxzJztcbmltcG9ydCB7IEZvcm1zRmllbGRTZXJ2aWNlIH0gZnJvbSAnLi9mb3JtLWZpZWxkcy5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1FbnRpdHkgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgRm9ybVByb3BlcnR5IH0gZnJvbSAndmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvbW9kZWxzJztcblxuZW51bSBUYXNrVXNlclByb3BlcnR5TmFtZSB7XG4gIFVzZXIgPSAnVXNlcicsXG4gIERhdGUgPSAnRGF0ZScsXG4gIFJvbGUgPSAnUm9sZScsXG4gIFNlcnZpY2UgPSAnU2VydmljZScsXG4gIEFwcGxpY2F0aW9uID0gJ0FwcGxpY2F0aW9uJyxcbiAgVGVuYW50ID0gJ1RlbmFudCcsXG4gIEVtYWlsID0gJ0VtYWlsJyxcbiAgU3RhdHVzID0gJ1N0YXR1cycsXG59XG5lbnVtIFRhc2tVc2VyUHJvcGVydHlNYXAge1xuICBVc2VyID0gJ05hbWUnLFxuICBEYXRlID0gJ0NyZWF0ZWRBdCcsXG4gIFJvbGUgPSAnUm9sZUlEJyxcbiAgU2VydmljZSA9ICdTZXJ2aWNlTmFtZScsXG4gIEFwcGxpY2F0aW9uID0gJ0FwcGxpY2F0aW9uJyxcbiAgVGVuYW50ID0gJ1RlbmFudElkJyxcbiAgRW1haWwgPSAnTWFpbEFkZHJlc3MnLFxuICBTdGF0dXMgPSAnU3RhdHVzJyxcbn1cblxuZW51bSBGaWx0ZXJUeXBlcyB7XG4gIEJlZm9yZSA9IFNlYXJjaFByb3BlcnR5U2lnbi5MVCxcbiAgT24gPSBTZWFyY2hQcm9wZXJ0eVNpZ24uRVEsXG4gIEFmdGVyID0gU2VhcmNoUHJvcGVydHlTaWduLkdULFxuICBORVEgPSBTZWFyY2hQcm9wZXJ0eVNpZ24uTkVRLFxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItZm9ybS1maWVsZHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1maWVsZHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZm9ybS1maWVsZHMuY29tcG9uZW50LmNzcycsXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1GaWVsZHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICB2aXNpYmxlQ29sdW1uRGVmOiBDb2x1bW5EZWZpbml0aW9uPEZvcm1Qcm9wZXJ0eT5bXSA9IFtdO1xuICBzdHlsZXMgPSBiYXNlU3R5bGU7XG4gIGRhdGE6IEZvcm1FbnRpdHlbXSA9IFtdO1xuICBoaWRlTWluTWF4OiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgcGF0aDogc3RyaW5nID0gJy9kb2N1bWVudGF0aW9uL3dvcmtmbG93LWZvcm1zL2ZpZWxkcyc7XG4gIGNhcmREYXRhOiBDYXJkRGF0YVtdID0gW107XG4gIHF1ZXJ5UGFyYW1zOiBhbnkgPSB7fTtcbiAgc2hvd1NvcnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd0NvbHVtbjogYm9vbGVhbiA9IGZhbHNlO1xuICBjdXJyZW50RGF0YTogQ2FyZERhdGEgfCBudWxsID0gbnVsbDtcbiAgQFZpZXdDaGlsZCgnZmlsZUlucHV0JywgeyBzdGF0aWM6IHRydWUgfSkgZmlsZUlucHV0ITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgndmRjdicpIGNhcmREYXRhVmlldyE6IENhcmREYXRhVmlld0NvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgndmR2JykgZGF0YVZpZXchOiBEYXRhVmlld0NvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnZHQnKSB0YWJsZVZpZXchOiBEYXRhVGFibGVDb21wb25lbnQ8Rm9ybUVudGl0eT47XG4gIEBJbnB1dCgpIGFwcGxpY2F0aW9uOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgcGFnZVNpemU6IG51bWJlciA9IDEwO1xuICBASW5wdXQoKSBzZWFyY2hEZWJvdW5jZVRpbWU6IG51bWJlciA9IDUwMDtcbiAgQE91dHB1dCgpIG9uVmlld1Byb2Nlc3NDbGlja2VkOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgY3VycmVudEV4cGFuZGVkQ2FyZDogQ2FyZERhdGEgfCBudWxsID0gbnVsbDtcbiAgcGFnZVN0YXRlOiBQYWdlZFJlc3VsdDxGb3JtRW50aXR5PiB8IG51bGwgPSBudWxsO1xuICBpc09wZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgb3BlbkRyb3Bkb3duSWQ6IHN0cmluZyB8IG51bGwgfCBudW1iZXIgPSBudWxsO1xuICBjdXJyZW50RmlsdGVyczogSURhdGFGaWx0ZXJbXSA9IFtdO1xuICBjdXJyZW50U29ydHM6IElEYXRhRmlsdGVyW10gPSBbXTtcbiAgc2VsZWN0ZWRGaWx0ZXJUYWJsZUNvdW50OiBudW1iZXIgPSAwO1xuICBzZWxlY3RlZFNvcnRUYWJsZUNvdW50OiBudW1iZXIgPSAwO1xuICBzZWxlY3RlZENvbHVtblRhYmxlQ291bnQ6IG51bWJlciA9IDA7XG4gIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZm9ybU5hbWU6IHN0cmluZyA9ICcnO1xuICBzZWFyY2hUZXJtJCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgcHJvcGVydGllczogRm9ybVByb3BlcnR5W10gPSBbXTtcbiAgc2VhcmNoVGVybTogc3RyaW5nID0gJyc7XG4gIHNraXAgPSAwO1xuICBjaGlwQXJyYXk6IHN0cmluZ1tdID0gW107XG4gIElkOiBzdHJpbmcgPSAnJztcbiAgY2hpcHM6IGFueTtcbiAgc3RhdHVzT3B0aW9uczogU3RhdHVzW10gPSBPYmplY3QudmFsdWVzKFN0YXR1cyk7XG4gIGRhdGFUeXBlOiBEYXRhVHlwZVtdID0gT2JqZWN0LnZhbHVlcyhEYXRhVHlwZSk7XG4gIGRhdGFUeXBlMjogRGF0YVR5cGUgPSBEYXRhVHlwZS5UZXh0O1xuICB1c2VyczogRm9ybUVudGl0eVtdID0gW107XG5cbiAgdmlzaWJsZUNvbHVtbnM6IElEYXRhRmlsdGVyW10gPSBbXTtcblxuICBmaWx0ZXJBcnJheTogSURhdGFGaWx0ZXJbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnTmFtZScsXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5TdHJpbmcsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdEYXRhVHlwZScsXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5TdHJpbmcsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdEZWZhdWx0VmFsdWUnLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuU3RyaW5nLFxuICAgICAgY2hlY2tlZDogZmFsc2UsXG4gICAgfSxcblxuICAgIHtcbiAgICAgIG5hbWU6ICdWYWx1ZScsXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5TdHJpbmcsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdNYXhWYWx1ZScsXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5OdW1iZXIsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdNaW5WYWx1ZScsXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5TdHJpbmcsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdJc1JlcXVpcmVkJyxcbiAgICAgIHR5cGU6IERhdGFGaWx0ZXJUeXBlLkJvb2wsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICBdO1xuXG4gIHNvcnRPcHRpb25zOiBJRGF0YUZpbHRlcltdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdOYW1lJyxcbiAgICAgIHR5cGU6IERhdGFGaWx0ZXJUeXBlLlN0cmluZyxcbiAgICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0RhdGFUeXBlJyxcbiAgICAgIHR5cGU6IERhdGFGaWx0ZXJUeXBlLlN0cmluZyxcbiAgICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0RlZmF1bHRWYWx1ZScsXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5TdHJpbmcsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuXG4gICAge1xuICAgICAgbmFtZTogJ1ZhbHVlJyxcbiAgICAgIHR5cGU6IERhdGFGaWx0ZXJUeXBlLlN0cmluZyxcbiAgICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ01heFZhbHVlJyxcbiAgICAgIHR5cGU6IERhdGFGaWx0ZXJUeXBlLk51bWJlcixcbiAgICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ01pblZhbHVlJyxcbiAgICAgIHR5cGU6IERhdGFGaWx0ZXJUeXBlLlN0cmluZyxcbiAgICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0lzUmVxdWlyZWQnLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuQm9vbCxcbiAgICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIH0sXG4gIF07XG5cbiAgcHJpdmF0ZSBjdXJyZW50U2VhcmNoVGVybTogc3RyaW5nID0gJyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB1dGlsU2VydmljZTogVXRpbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZXJ2ZXI6IEh0dHBXZWJSZXF1ZXN0U2VydmljZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBlbnZTdmM6IEVudmlyb25tZW50U2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgdGFza1VzZXJzU3ZjOiBGb3Jtc0ZpZWxkU2VydmljZSxcbiAgICBwcml2YXRlIF9sb2NhdGlvbjogTG9jYXRpb24sXG4gICAgcHJpdmF0ZSBlbFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjJcbiAgKSB7XG4gICAgdGhpcy52aXNpYmxlQ29sdW1uRGVmID0gdGFza1VzZXJzU3ZjLmZvcm1GaWVsZENvbHVtbnM7XG4gICAgdGhpcy52aXNpYmxlQ29sdW1ucyA9IHRhc2tVc2Vyc1N2Yy5mb3JtRmllbGRDb2x1bW5zLm1hcCgoY29sKSA9PiAoe1xuICAgICAgY2hlY2tlZDogdHJ1ZSxcbiAgICAgIG5hbWU6IHR5cGVvZiBjb2wuaGVhZGVyID09PSAnc3RyaW5nJyA/IGNvbC5oZWFkZXIgOiBjb2wuaWQsXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5Cb29sLFxuICAgIH0pKTtcbiAgfVxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnNlYXJjaFRlcm0kXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUodGhpcy5zZWFyY2hEZWJvdW5jZVRpbWUpKSAvLyBBZGp1c3QgZGVib3VuY2UgdGltZSBoZXJlIChpbiBtcylcbiAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKHNlYXJjaFRlcm0pID0+IHtcbiAgICAgICAgdGhpcy5jdXJyZW50U2VhcmNoVGVybSA9IHNlYXJjaFRlcm07XG4gICAgICAgIHRoaXMudXBkYXRlRmlsdGVyc0FuZFNvcnRzKHRydWUpO1xuICAgICAgfSk7XG4gICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtcykgPT4ge1xuICAgICAgY29uc3QgSWQgPSBwYXJhbXNbJ0Zvcm1JZCddO1xuICAgICAgY29uc3QgTmFtZSA9IHBhcmFtc1snTmFtZSddO1xuICAgICAgdGhpcy5JZCA9IElkO1xuICAgICAgdGhpcy5mb3JtTmFtZSA9IE5hbWU7XG4gICAgICBpZiAoSWQpIHtcbiAgICAgICAgdGhpcy5nZXRQcm9wZXJ0aWVzKElkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBvbkNoaXBDaGFuZ2UoY2hpcHM6IENoaXBDaGFuZ2VFdmVudCkge1xuICAgIHRoaXMuY2hpcHMgPSBjaGlwcztcbiAgfVxuICBhc3luYyBwb3N0U2VhcmNoKHBheWxvYWQ6IGFueSkge1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2VydmVyLnBvc3QoXG4gICAgICBgRm9ybS9TZWFyY2hGb3JtRW50aXRpZXMvMC8ke3RoaXMucGFnZVNpemV9YCxcbiAgICAgIHBheWxvYWRcbiAgICApO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKGZhbHNlKTtcblxuICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dFcnJvcignRXJyb3Igb2NjdXJyZWQgd2hpbGUgc2VhcmNoaW5nLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhZ2VTdGF0ZSA9IHJlcyBhcyBQYWdlZFJlc3VsdDxGb3JtRW50aXR5PjtcbiAgICBjb25zdCByZXN1bHQgPSBwYWdlU3RhdGU/LlJlc3VsdDtcblxuICAgIGlmICghcmVzdWx0IHx8IHJlc3VsdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd0luZm8oJ05vIHJlc3VsdHMgZm91bmQuJyk7XG4gICAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBBc3NpZ24gYW5kIGVuc3VyZSBQcm9wZXJ0aWVzIGV4aXN0XG4gICAgdGhpcy5kYXRhID0gcmVzdWx0Lm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgIC4uLml0ZW0sXG4gICAgICBQcm9wZXJ0aWVzOiBpdGVtLlByb3BlcnRpZXMgfHwgW10sXG4gICAgfSkpO1xuXG4gICAgdGhpcy5zZXRVcENhcmREYXRhKCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIG9uRHJvcERvd25DaGFuZ2UoZXZlbnQ6IHN0cmluZykge1xuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy5jaGVja01pbk1heChldmVudCk7XG4gICAgfVxuICB9XG4gIGFzeW5jIGdldFByb3BlcnRpZXMoXG4gICAgSWQ6IHN0cmluZyxcbiAgICBzaG93OiBib29sZWFuID0gZmFsc2VcbiAgKTogUHJvbWlzZTxGb3JtRW50aXR5W10gfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAodGhpcy5zaG93Q29sdW1uKSB7XG4gICAgICB0aGlzLnNob3dDb2x1bW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5UYWJsZUNvdW50ID0gMDtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2hvd0ZpbHRlcikge1xuICAgICAgdGhpcy5zaG93RmlsdGVyID0gZmFsc2U7XG4gICAgICB0aGlzLnNlbGVjdGVkRmlsdGVyVGFibGVDb3VudCA9IDA7XG5cbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2hvd1NvcnQpIHtcbiAgICAgIHRoaXMuc2hvd1NvcnQgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRTb3J0VGFibGVDb3VudCA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHBheWxvYWQ6IFNlYXJjaFByb3BlcnR5VmFsdWVbXSA9IFtcbiAgICAgIHtcbiAgICAgICAgUHJvcGVydHlOYW1lOiBgQ29kZWAsXG4gICAgICAgIEVudGl0eVZhbHVlOiBJZCxcbiAgICAgICAgT3BlcmF0b3I6IFNlYXJjaE9wZXJhdG9yLkFuZCxcbiAgICAgICAgU2lnbjogU2VhcmNoUHJvcGVydHlTaWduLkVRLFxuICAgICAgICBUeXBlOiBTZWFyY2hQcm9wZXJ0eVZhbHVlVHlwZS5TdHJpbmcsXG4gICAgICB9LFxuICAgIF07XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZXJ2ZXIucG9zdChcbiAgICAgIGBGb3JtL1NlYXJjaEZvcm1FbnRpdGllcy8ke3RoaXMuc2tpcH0vJHt0aGlzLnBhZ2VTaXplfWAsXG4gICAgICBwYXlsb2FkXG4gICAgKTtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciByZXN1bHQgPSAocmVzIGFzIFBhZ2VkUmVzdWx0PEZvcm1FbnRpdHk+KS5SZXN1bHQ7XG4gICAgICB0aGlzLmRhdGEgPSByZXN1bHQ7XG4gICAgICB0aGlzLmRhdGEuZm9yRWFjaCgoeCkgPT5cbiAgICAgICAgeC5Qcm9wZXJ0aWVzLmZvckVhY2goKHAsIGkpID0+IChwLklkID0gaS50b1N0cmluZygpKSlcbiAgICAgICk7XG4gICAgICB0aGlzLnByb3BlcnRpZXMgPSB0aGlzLmRhdGFbMF0uUHJvcGVydGllcztcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMucHJvcGVydGllcywgJ2pqaicpO1xuXG4gICAgICB0aGlzLnNldFVwQ2FyZERhdGEoKTtcbiAgICAgIHNob3cgPSBmYWxzZTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9XG5cbiAgb25Vc2VyU2VsZWN0ZWQoZXZlbnQ6IERyb3Bkb3duQ2hhbmdlRXZlbnQsIGl0ZW06IEZvcm1FbnRpdHkpIHtcbiAgICBjb25zdCB1c2VyID0gdGhpcy51c2Vycy5maW5kKCh4KSA9PiB4Lk5hbWUgPT0gZXZlbnQudmFsdWUpO1xuICAgIGlmICh1c2VyKSB7XG4gICAgICBpdGVtLk5hbWUgPSB1c2VyLk5hbWU7XG4gICAgICBpdGVtLkRlc2NyaXB0aW9uID0gdXNlci5EZXNjcmlwdGlvbjtcbiAgICAgIGl0ZW0uUHJvcGVydGllcyA9IHVzZXIuUHJvcGVydGllcztcbiAgICAgIGl0ZW0uSXNWYWxpZGF0ZWQgPSB1c2VyLklzVmFsaWRhdGVkO1xuICAgIH1cbiAgfVxuICBvbkNsZWFyKGV2ZW50OiBFdmVudCwgaXRlbTogRm9ybUVudGl0eSkge1xuICAgIGl0ZW0uTmFtZSA9ICcnO1xuICAgIGl0ZW0uRGVzY3JpcHRpb24gPSAnJztcbiAgICBpdGVtLlByb3BlcnRpZXMgPSBbXTtcbiAgICBpdGVtLklzVmFsaWRhdGVkID0gZmFsc2U7XG4gIH1cbiAgYXN5bmMgZ2V0Rm9ybXMoKTogUHJvbWlzZTxGb3JtRW50aXR5W10gfCB1bmRlZmluZWQ+IHtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSSh0cnVlKTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnNlcnZlci5nZXQoXG4gICAgICBgRm9ybS9HZXRGb3JtRW50aXRpZXNXaXRoUGFyYW1zL0dyb3VwLzAvJHt0aGlzLnBhZ2VTaXplfWAsXG4gICAgICB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5Xb3JrRmxvd0FQSVxuICAgICk7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhZ2VTdGF0ZSA9IHJlcyBhcyBQYWdlZFJlc3VsdDxGb3JtRW50aXR5PjtcbiAgICAgIHZhciByZXN1bHQgPSAocmVzIGFzIFBhZ2VkUmVzdWx0PEZvcm1FbnRpdHk+KS5SZXN1bHQ7XG4gICAgICB0aGlzLmRhdGEgPSByZXN1bHQ7XG4gICAgICB0aGlzLnNldFVwQ2FyZERhdGEoKTtcbiAgICAgIHRoaXMucHJvcGVydGllcyA9IHJlc3VsdFswXS5Qcm9wZXJ0aWVzO1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuICBnZXRJdGVtTGFiZWwobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy51c2Vycy5maW5kKCh1c2VyKSA9PiB1c2VyLk5hbWUgPT09IG5hbWUpO1xuICAgIGNvbnN0IG90aGVyQ2hlY2sgPSB0aGlzLmRhdGEuZmluZCgoZGF0YSkgPT4gZGF0YS5OYW1lID09PSBuYW1lKTtcbiAgICByZXR1cm4gaXRlbSA/IGl0ZW0uTmFtZSA6IG90aGVyQ2hlY2sgPyBvdGhlckNoZWNrLk5hbWUgOiAnJztcbiAgfVxuXG4gIGdldEFzeW5jTGFiZWwodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YS5maW5kKCh4KSA9PiB4Lk5hbWUgPT0gdmFsdWUpO1xuXG4gICAgcmV0dXJuIGRhdGEgPyBkYXRhLk5hbWUgOiAnJztcbiAgfVxuXG4gIGFzeW5jIGxvYWRNb3JlKCkge1xuICAgIGlmICghdGhpcy5wYWdlU3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG4gICAgY29uc3QgcmVzID1cbiAgICAgIHRoaXMuY3VycmVudEZpbHRlcnMubGVuZ3RoID4gMCB8fFxuICAgICAgdGhpcy5jdXJyZW50U29ydHMubGVuZ3RoID4gMCB8fFxuICAgICAgdGhpcy5jdXJyZW50U2VhcmNoVGVybS50cmltKCkubGVuZ3RoID4gMFxuICAgICAgICA/IGF3YWl0IHRoaXMubG9hZE1vcmVGaWx0ZXJzQW5kU29ydHMoKVxuICAgICAgICA6IGF3YWl0IHRoaXMuc2VydmVyLmdldChcbiAgICAgICAgICAgIGBUYXNrVXNlci9HZXRUYXNrVXNlcnMvJHt0aGlzLnBhZ2VTdGF0ZS5Ta2lwfS8ke3RoaXMucGFnZVNpemV9YCxcbiAgICAgICAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgICAgICAgKTtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYWdlU3RhdGUgPSByZXMgYXMgUGFnZWRSZXN1bHQ8Rm9ybUVudGl0eT47XG4gICAgICB2YXIgcmVzdWx0ID0gKHJlcyBhcyBQYWdlZFJlc3VsdDxGb3JtRW50aXR5PikuUmVzdWx0O1xuXG4gICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEuY29uY2F0KFxuICAgICAgICByZXN1bHQubWFwKCh4KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLngsXG4gICAgICAgICAgICBpZDogeC5OYW1lLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgdGhpcy5zZXRVcENhcmREYXRhRXh0cmEocmVzdWx0KTtcbiAgICB9XG4gIH1cbiAgY2FyZENsaWNrZWQoaXRlbTogQ2FyZERhdGEsIHRvZ2dsZVZpZXc6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHRoaXMuY3VycmVudERhdGEgPSB0aGlzLmNhcmREYXRhVmlldy5vbkl0ZW1DbGljayhpdGVtKTtcbiAgICBpZiAodG9nZ2xlVmlldykge1xuICAgICAgdGhpcy5kYXRhVmlldy50b2dnbGVWaWV3KCk7XG4gICAgfVxuICB9XG4gIHRvZ2dsZUNoaWxkcmVuKGl0ZW06IENhcmREYXRhKSB7XG4gICAgdmFyIGN1cnJUb2dnbGVTdGF0ZSA9IGl0ZW0uaXNDaGlsZHJlbkV4cGFuZGVkO1xuICAgIHRoaXMuY2FyZERhdGEuZm9yRWFjaCgoXykgPT4ge1xuICAgICAgXy5pc0NoaWxkcmVuRXhwYW5kZWQgPSBmYWxzZTtcbiAgICB9KTtcbiAgICBpdGVtLmlzQ2hpbGRyZW5FeHBhbmRlZCA9ICFjdXJyVG9nZ2xlU3RhdGU7XG4gICAgaWYgKGl0ZW0uaXNDaGlsZHJlbkV4cGFuZGVkKSB7XG4gICAgICB0aGlzLmN1cnJlbnRFeHBhbmRlZENhcmQgPSBpdGVtO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnJlbnRFeHBhbmRlZENhcmQgPSBudWxsO1xuICAgIH1cbiAgfVxuICBzZXRVcENhcmREYXRhKCkge1xuICAgIGNvbnN0IGNhcmREYXRhOiBDYXJkRGF0YVtdID0gdGhpcy5kYXRhWzBdPy5Qcm9wZXJ0aWVzPy5tYXAoKHgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLngsXG4gICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgdGl0bGU6IHguTmFtZSxcbiAgICAgICAgZGF0YTogeCxcbiAgICAgICAgYm9keTogW10sXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICB0aGlzLmNhcmREYXRhID0gY2FyZERhdGE7IC8vIEFzc2lnbiB0aGUgdHJhbnNmb3JtZWQgYXJyYXkgdG8gYGNhcmREYXRhYFxuICB9XG5cbiAgb3BlbkRyb3Bkb3duKGl0ZW06IEZvcm1Qcm9wZXJ0eSk6IHZvaWQge1xuICAgIHRoaXMub3BlbkRyb3Bkb3duSWQgPSB0aGlzLm9wZW5Ecm9wZG93bklkID09PSBpdGVtLklkID8gbnVsbCA6IGl0ZW0uSWQ7XG4gIH1cblxuICBjbG9zZVBvcFVwKHJvdzogRm9ybVByb3BlcnR5KTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3BlbkRyb3Bkb3duSWQgPT09IHJvdy5JZCkge1xuICAgICAgdGhpcy5vcGVuRHJvcGRvd25JZCA9IG51bGw7IC8vIFByb3Blcmx5IHJlc2V0IHdoZW4gY2xvc2luZ1xuICAgIH1cbiAgICB0aGlzLm9uQ2xvc2UoKTsgLy8gQ2FsbCBhbnkgYWRkaXRpb25hbCBsb2dpYyBmb3IgY2xvc3VyZVxuICB9XG4gIHNldFVwQ2FyZERhdGFFeHRyYShiYXNlRGF0YTogRm9ybUVudGl0eVtdKSB7XG4gICAgY29uc3QgY2FyZERhdGE6IENhcmREYXRhW10gPSBiYXNlRGF0YS5tYXAoKHgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgdGl0bGU6IHguTmFtZSxcbiAgICAgICAgZGF0YTogeCxcbiAgICAgICAgYm9keTogW10sXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5jYXJkRGF0YSA9IHRoaXMuY2FyZERhdGEuY29uY2F0KGNhcmREYXRhKTtcbiAgfVxuXG4gIGdvVG9DYXJkVmlldyhkYXRhOiBGb3JtUHJvcGVydHkpIHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5jYXJkRGF0YS5maW5kKCh4KSA9PiB4LmRhdGEgPT0gZGF0YSk7XG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIHRoaXMudXNlckNhcmRDbGlja2VkKGl0ZW0sIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGdvVG9UYWJsZVZpZXcoKSB7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnREYXRhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZGF0YVZpZXcudG9nZ2xlVmlldygpO1xuICAgIGNvbnN0IGlkID0gdGhpcy5jdXJyZW50RGF0YS5kYXRhID8gdGhpcy5jdXJyZW50RGF0YS5kYXRhLklkIDogJyc7XG4gICAgaWYgKGlkLnRyaW0oKS5sZW5ndGggPiAwICYmICF0aGlzLnRhYmxlVmlldy5pc1Jvd0VkaXRpbmcoaWQpKSB7XG4gICAgICB0aGlzLnRhYmxlVmlldy50b2dnbGVSb3dFZGl0KGlkKTtcbiAgICB9XG4gIH1cblxuICB2aWV3UHJvY2Vzc2VzKGNvZGU6IHN0cmluZykge1xuICAgIGlmIChjb2RlLnRyaW0oKS5sZW5ndGggPT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm9uVmlld1Byb2Nlc3NDbGlja2VkLmVtaXQoY29kZSk7XG4gIH1cblxuICB1c2VyQ2FyZENsaWNrZWQoaXRlbTogQ2FyZERhdGEsIHRvZ2dsZVZpZXc6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgIHRoaXMuY2FyZERhdGEuZm9yRWFjaCgoY2FyZCkgPT4gKGNhcmQuc2VsZWN0ZWQgPSBmYWxzZSkpO1xuICAgIGl0ZW0uc2VsZWN0ZWQgPSB0cnVlO1xuICAgIHRoaXMuY3VycmVudERhdGEgPSB0aGlzLmNhcmREYXRhVmlldy5vbkl0ZW1DbGljayhpdGVtKTtcbiAgICB0aGlzLmNoaXBBcnJheSA9IEpTT04ucGFyc2UodGhpcy5jdXJyZW50RGF0YT8uZGF0YS5WYWx1ZSk7XG4gICAgaWYgKHRvZ2dsZVZpZXcpIHtcbiAgICAgIHRoaXMuZGF0YVZpZXcudG9nZ2xlVmlldygpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNhdmVGb3JtUHJvcGVydHkoKSB7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnREYXRhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZm9ybVByb3BlcnR5OiBGb3JtRW50aXR5W10gPSB0aGlzLmRhdGE7XG5cbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSSh0cnVlKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBBUEkgY2FsbCB0byBzYXZlIHVzZXJcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2VydmVyLnBvc3QoXG4gICAgICAgIGBGb3JtL1NhdmVGb3JtRW50aXRpZXNgLFxuICAgICAgICBmb3JtUHJvcGVydHksXG4gICAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgICApO1xuXG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG5cbiAgICAgIGlmICghKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpKSB7XG4gICAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ0Zvcm0gcHJvcGVydHkgc2F2ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVzIGFzIEZvcm1FbnRpdHlbXTtcbiAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHVzZXJSZXN1bHQgPSByZXN1bHRbMF07XG5cbiAgICAgICAgICBjb25zdCBpdGVtSW5kZXggPSB0aGlzLmRhdGEuZmluZEluZGV4KFxuICAgICAgICAgICAgKHgpID0+IHggPT09IHRoaXMuY3VycmVudERhdGE/LmRhdGFcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKGZhbHNlKTtcbiAgICAgIC8vIE9wdGlvbmFsOiBIYW5kbGUgZXJyb3JzIGlmIG5lZWRlZFxuICAgIH1cbiAgfVxuICBzdHJpbmdpZnkodmFsOiBhbnkpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsKTtcbiAgfVxuICBnZW5lcmF0ZVVuaXF1ZUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdfJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCA5KTtcbiAgfVxuXG4gIGFkZE9yVXBkYXRlRm9ybVByb3BlcnR5KGZvcm06IEZvcm1FbnRpdHksIHByb3BlcnR5OiBGb3JtUHJvcGVydHkpOiB2b2lkIHtcbiAgICBpZiAoIXByb3BlcnR5LmlkKSB7XG4gICAgICBwcm9wZXJ0eS5pZCA9IHRoaXMuZ2VuZXJhdGVVbmlxdWVJZCgpO1xuICAgIH1cblxuICAgIGNvbnN0IGluZGV4ID0gZm9ybS5Qcm9wZXJ0aWVzLmZpbmRJbmRleCgocCkgPT4gcC5pZCA9PT0gcHJvcGVydHkuaWQpO1xuXG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgZm9ybS5Qcm9wZXJ0aWVzW2luZGV4XSA9IHsgLi4ucHJvcGVydHkgfTsgLy8gdXBkYXRlXG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcm0uUHJvcGVydGllcy5wdXNoKHsgLi4ucHJvcGVydHkgfSk7IC8vIGFkZFxuICAgIH1cblxuICAgIGZvcm0uRGF0YVN0YXRlID1cbiAgICAgIGZvcm0uRGF0YVN0YXRlID09PSBPYmplY3RTdGF0ZS5OZXdcbiAgICAgICAgPyBPYmplY3RTdGF0ZS5OZXdcbiAgICAgICAgOiBPYmplY3RTdGF0ZS5DaGFuZ2VkO1xuICB9XG5kZWxldGVQcm9wZXJ0eShwcm9wZXJ0eUlkOiBzdHJpbmcpIHtcbiAgaWYgKCF0aGlzLmRhdGEgfHwgdGhpcy5kYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gIGNvbnN0IGZvcm0gPSB0aGlzLmRhdGFbMF07XG4gIGZvcm0uUHJvcGVydGllcyA9IGZvcm0uUHJvcGVydGllcy5maWx0ZXIoXG4gICAgKHA6IEZvcm1Qcm9wZXJ0eSkgPT4gcC5JZCAhPT0gcHJvcGVydHlJZFxuICApO1xuXG4gIHRoaXMuY2FyZERhdGEgPSB0aGlzLmNhcmREYXRhLmZpbHRlcihjID0+IGMuZGF0YS5JZCAhPT0gcHJvcGVydHlJZCk7XG5cbiBcbiAgaWYgKHRoaXMuY3VycmVudERhdGEgJiYgdGhpcy5jdXJyZW50RGF0YS5kYXRhLklkID09PSBwcm9wZXJ0eUlkKSB7XG4gICAgdGhpcy5jdXJyZW50RGF0YSA9IG51bGw7XG4gICAgdGhpcy5jYXJkRGF0YVZpZXcuY2xlYXJEYXRhKCk7IFxuICB9XG5cbiAgXG4gIHRoaXMuZGF0YSA9IFsuLi50aGlzLmRhdGFdO1xuXG4gIHRoaXMudXRpbFNlcnZpY2Uuc2hvd0luZm8oXCJQcm9wZXJ0eSByZW1vdmVkXCIpO1xufVxuXG5cbmFzeW5jIHNhdmVBbGxQcm9wZXJ0aWVzKCkge1xuICBpZiAoIXRoaXMuZGF0YSB8fCB0aGlzLmRhdGEubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZm9ybSA9IHRoaXMuZGF0YVswXTtcbmZvcm0uUHJvcGVydGllcy5mb3JFYWNoKChwcm9wOiBGb3JtUHJvcGVydHksIGluZGV4OiBudW1iZXIpID0+IHtcbiAgcHJvcC5JZCA9IGluZGV4LnRvU3RyaW5nKCk7XG4gIHByb3AuTWF4VmFsdWUgPSBOdW1iZXIocHJvcC5NYXhWYWx1ZSk7XG4gIHByb3AuTWluVmFsdWUgPSBOdW1iZXIocHJvcC5NaW5WYWx1ZSk7XG4gIHByb3AuT3B0aW9ucyA9IEFycmF5LmlzQXJyYXkocHJvcC5PcHRpb25zKVxuICAgID8gcHJvcC5PcHRpb25zLmpvaW4oXCIsXCIpXG4gICAgOiBwcm9wLk9wdGlvbnMgPz8gXCJcIjtcbiAgcHJvcC5WYWx1ZSA9IHByb3AuVmFsdWUgPz8gXCJcIjtcbn0pO1xuXG5cbiBcbiAgXG4gIFxuXG4gIGNvbnN0IGludmFsaWQgPSBmb3JtLlByb3BlcnRpZXMuZmluZChcbiAgICAocCkgPT4gIXAuTmFtZSB8fCBwLk5hbWUudHJpbSgpLmxlbmd0aCA9PT0gMFxuICApO1xuICBpZiAoaW52YWxpZCkge1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd0luZm8oXCJOYW1lIGNhbm5vdCBiZSBlbXB0eVwiKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBmb3JtLkRhdGFTdGF0ZSA9IE9iamVjdFN0YXRlLkNoYW5nZWQ7XG5cbiAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG5cbiAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZXJ2ZXIucG9zdChcbiAgICBcIkZvcm0vU2F2ZUZvcm1FbnRpdGllc1wiLFxuICAgIFtmb3JtXSxcbiAgICB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5Xb3JrRmxvd0FQSVxuICApO1xuXG4gIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKGZhbHNlKTtcblxuICBpZiAocmVzIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd0Vycm9yKFwiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgc2F2aW5nXCIpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd1N1Y2Nlc3MoXCJGb3JtIHByb3BlcnRpZXMgc2F2ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xuICAgXG5cbiAgICBcbiAgfVxufVxuXG5cblxuXG4gIGFzeW5jIHNhdmVWaWFUYWJsZShyb3c6IEZvcm1Qcm9wZXJ0eSwgY2FsbEJhY2s6ICgpID0+IGFueSkge1xuICAgIGlmICghcm93KSByZXR1cm47XG5cbiAgICBjb25zdCBwcm9wZXJ0eTogRm9ybVByb3BlcnR5ID0gcm93IGFzIEZvcm1Qcm9wZXJ0eTtcbiAgICBwcm9wZXJ0eS5NYXhWYWx1ZSA9IE51bWJlcihwcm9wZXJ0eS5NYXhWYWx1ZSk7XG4gICAgcHJvcGVydHkuTWluVmFsdWUgPSBOdW1iZXIocHJvcGVydHkuTWluVmFsdWUpO1xuICAgIHByb3BlcnR5Lk9wdGlvbnMgPSB0aGlzLmNoaXBBcnJheT8udG9TdHJpbmcoKTtcbiAgICBwcm9wZXJ0eS5WYWx1ZSA9ICcnO1xuXG4gICAgaWYgKCFwcm9wZXJ0eS5OYW1lIHx8IHByb3BlcnR5Lk5hbWUudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93SW5mbygnTmFtZSBjYW5ub3QgYmUgZW1wdHknKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSSh0cnVlKTtcblxuICAgIGNvbnN0IGZvcm0gPSB0aGlzLmRhdGFbMF07XG4gICAgY29uc3QgaW5kZXggPSBmb3JtLlByb3BlcnRpZXMuZmluZEluZGV4KChwKSA9PiBwLmlkID09PSBwcm9wZXJ0eS5pZCk7XG5cbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgZm9ybS5Qcm9wZXJ0aWVzW2luZGV4XSA9IHByb3BlcnR5O1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3JtLlByb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgfVxuXG4gICAgZm9ybS5EYXRhU3RhdGUgPVxuICAgICAgZm9ybS5EYXRhU3RhdGUgPT09IE9iamVjdFN0YXRlLk5ld1xuICAgICAgICA/IE9iamVjdFN0YXRlLk5ld1xuICAgICAgICA6IE9iamVjdFN0YXRlLkNoYW5nZWQ7XG5cbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnNlcnZlci5wb3N0KFxuICAgICAgJ0Zvcm0vU2F2ZUZvcm1FbnRpdGllcycsXG4gICAgICB0aGlzLmRhdGEsXG4gICAgICB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5Xb3JrRmxvd0FQSVxuICAgICk7XG5cbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG5cbiAgICBpZiAocmVzIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93RXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHNhdmluZycpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dTdWNjZXNzKCdGb3JtIHByb3BlcnR5IHNhdmVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVzIGFzIEZvcm1FbnRpdHlbXTtcbiAgICAgIHRoaXMuY2xvc2VQb3BVcChyb3cpO1xuICAgICAgY2FsbEJhY2soKTtcbiAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCB1cGRhdGVkRm9ybSA9IHJlc3VsdFswXTtcbiAgICAgICAgdGhpcy5kYXRhWzBdLlByb3BlcnRpZXMgPSB1cGRhdGVkRm9ybS5Qcm9wZXJ0aWVzO1xuICAgICAgICB0aGlzLmRhdGEgPSBbLi4udGhpcy5kYXRhXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0b2dnbGVJc1ZhbGlkYXRlKHZhbHVlOiBib29sZWFuLCByb3c6IEZvcm1Qcm9wZXJ0eSk6IHZvaWQge1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gIXZhbHVlO1xuICAgIHJvdy5Jc1JlcXVpcmVkID0gbmV3VmFsdWU7XG4gICAgY29uc29sZS5sb2cocm93KTtcbiAgfVxub25LZXlEb3duKGU6IEtleWJvYXJkRXZlbnQsIGRhdGE6IEZvcm1Qcm9wZXJ0eSkge1xuICAvLyBhbGxvdyBuYXZpZ2F0aW9uIC8gY29udHJvbCBrZXlzXG4gIGNvbnN0IGFsbG93ZWQgPSBbXG4gICAgJ0JhY2tzcGFjZScsJ0RlbGV0ZScsJ0Fycm93TGVmdCcsJ0Fycm93UmlnaHQnLCdBcnJvd1VwJywnQXJyb3dEb3duJyxcbiAgICAnVGFiJywnRW50ZXInLCdIb21lJywnRW5kJywnRXNjYXBlJ1xuICBdO1xuICBpZiAoYWxsb3dlZC5pbmNsdWRlcyhlLmtleSkpIHJldHVybjtcblxuICAvLyBibG9jayB0aGUgU3BhY2Uga2V5IChjb3ZlcnMgbW9kZXJuICYgb2xkIGJyb3dzZXJzKVxuICBpZiAoZS5rZXkgPT09ICcgJyB8fCBlLmNvZGUgPT09ICdTcGFjZScgfHwgZS5rZXkgPT09ICdTcGFjZWJhcicpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgcmV0dXJuO1xuICB9XG59XG5cbm9uUGFzdGUoZTogQ2xpcGJvYXJkRXZlbnQsIGRhdGE6IEZvcm1Qcm9wZXJ0eSkge1xuXG4gIGUucHJldmVudERlZmF1bHQoKTtcbiAgY29uc3QgcGFzdGVkID0gZS5jbGlwYm9hcmREYXRhPy5nZXREYXRhKCd0ZXh0JykgPz8gJyc7XG4gIGNvbnN0IGNsZWFuZWQgPSBwYXN0ZWQucmVwbGFjZSgvXFxzKy9nLCAnJyk7XG4gIGNvbnN0IGlucHV0ID0gZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcblxuIFxuICBjb25zdCBzdGFydCA9IGlucHV0LnNlbGVjdGlvblN0YXJ0ID8/IGlucHV0LnZhbHVlLmxlbmd0aDtcbiAgY29uc3QgZW5kID0gaW5wdXQuc2VsZWN0aW9uRW5kID8/IHN0YXJ0O1xuICBjb25zdCBuZXdWYWwgPSBpbnB1dC52YWx1ZS5zbGljZSgwLCBzdGFydCkgKyBjbGVhbmVkICsgaW5wdXQudmFsdWUuc2xpY2UoZW5kKTtcblxuICBpbnB1dC52YWx1ZSA9IG5ld1ZhbDtcbiAgZGF0YS5Qcm9wZXJ0eU5hbWUgPSBuZXdWYWw7XG4gIHRoaXMudXBkYXRlVGFibGU/LigpO1xufVxuXG5vbklucHV0KGU6IEV2ZW50LCBkYXRhOiBGb3JtUHJvcGVydHkpIHtcblxuICBjb25zdCBpbnB1dCA9IGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gIGNvbnN0IGNsZWFuZWQgPSBpbnB1dC52YWx1ZS5yZXBsYWNlKC9cXHMrL2csICcnKTtcbiAgaWYgKGlucHV0LnZhbHVlICE9PSBjbGVhbmVkKSB7XG4gICAgY29uc3QgcG9zID0gaW5wdXQuc2VsZWN0aW9uU3RhcnQgPz8gY2xlYW5lZC5sZW5ndGg7XG4gICAgaW5wdXQudmFsdWUgPSBjbGVhbmVkO1xuXG4gICAgY29uc3QgbmV3UG9zID0gTWF0aC5taW4ocG9zLCBjbGVhbmVkLmxlbmd0aCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShuZXdQb3MsIG5ld1BvcyksIDApO1xuICB9XG4gIGRhdGEuUHJvcGVydHlOYW1lID0gY2xlYW5lZDtcbiAgdGhpcy51cGRhdGVUYWJsZT8uKCk7XG59XG5cbiAgdXBkYXRlVGFibGUoKSB7XG4gICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLm1hcCgoeCkgPT4geCk7XG5cbiAgfVxuXG4gIGNvbnZlcnRUb0ludCh2YWx1ZTogYW55LCBkYXRhOiBhbnksIHByb3A6IHN0cmluZykge1xuICAgIGRhdGFbcHJvcF0gPSBwYXJzZUludCh2YWx1ZSk7XG4gIH1cbiAgZ2V0U3RyaW5nVmFsdWUoZGF0YTogYW55LCBwcm9wOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBkYXRhW3Byb3BdLnRvU3RyaW5nKCk7XG4gIH1cblxuICBjaGVja01pbk1heCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdmFyIHNob3dNaW5tYXggPSBmYWxzZTtcbiAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICBjYXNlICdTdHJpbmcnOlxuICAgICAgICBzaG93TWlubWF4ID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdJbnQnOlxuICAgICAgICBzaG93TWlubWF4ID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdEZWNpbWFsJzpcbiAgICAgICAgc2hvd01pbm1heCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRmxvYXQnOlxuICAgICAgICBzaG93TWlubWF4ID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBzaG93TWlubWF4ID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gKHRoaXMuaGlkZU1pbk1heCA9IHNob3dNaW5tYXgpO1xuICB9XG5cbiAgbmF2aWdhdGVUb0ZpZWxkcygpIHtcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHRoaXMucXVlcnlQYXJhbXM7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Ake3RoaXMucGF0aH1gXSwgeyBxdWVyeVBhcmFtcyB9KTtcbiAgfVxuICBvbkNsb3NlKCkge1xuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gIH1cblxuICBnb0JhY2soKSB7XG4gICAgdGhpcy5fbG9jYXRpb24uYmFjaygpO1xuICB9XG4gIGlzRHJvcGRvd25PcGVuKGl0ZW06IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm9wZW5Ecm9wZG93bklkID09PSBpdGVtLmlkO1xuICB9XG5cbiAgb25WaWV3Q2hhbmdlKGlzR3JpZFZpZXc6IGJvb2xlYW4pOiB2b2lkIHt9XG5cbm9uU3RhdGVDaGFuZ2UoZXZlbnQ6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBib29sZWFuIH0pOiB2b2lkIHtcbiAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICBjYXNlICdjcmVhdGUnOlxuICAgICAgY29uc3QgbmV3SWQgPSBgcHJvcC0ke0RhdGUubm93KCl9YDsgXG5cbiAgICAgIHZhciBuZXdVc2VyOiBGb3JtUHJvcGVydHkgPSB7XG4gICAgICAgIE1heFZhbHVlOiAxMDAsXG4gICAgICAgIE5hbWU6ICcnLFxuICAgICAgICBWYWx1ZTogJycsXG4gICAgICAgIE1pblZhbHVlOiAxMDAsXG4gICAgICAgIE9wdGlvbnM6ICcnLFxuICAgICAgICBJc1JlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgRGF0YVR5cGU6IERhdGFUeXBlLlRleHQsXG4gICAgICAgIERlZmF1bHRWYWx1ZTogJycsXG4gICAgICAgIFByb3BlcnR5TmFtZTogJycsXG4gICAgICAgIGlkOiBuZXdJZCxcbiAgICAgICAgSWQ6IG5ld0lkLFxuICAgICAgfTtcblxuICAgICAgdGhpcy5jaGlwQXJyYXkgPSBbXTtcblxuICAgICAgY29uc3QgY2FyZERhdGE6IENhcmREYXRhID0ge1xuICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgIHRpdGxlOiBuZXdVc2VyLk5hbWUsXG4gICAgICAgIGRhdGE6IG5ld1VzZXIsXG4gICAgICAgIGJvZHk6IFtdLFxuICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICB9O1xuICBpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgdGhpcy5kYXRhWzBdLlByb3BlcnRpZXMgPSBbXG4gICAgICAuLi4odGhpcy5kYXRhWzBdLlByb3BlcnRpZXMgPz8gW10pLFxuICAgICAgbmV3VXNlclxuICAgIF07XG4gIH1cbiAgICAgIHRoaXMuY2FyZERhdGEucHVzaChjYXJkRGF0YSk7XG4gICAgICB0aGlzLnVzZXJDYXJkQ2xpY2tlZChjYXJkRGF0YSk7XG4gICAgICBcbiAgICAgIHRoaXMuZGF0YVZpZXcuaXNUYWJsZVZpZXcgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZmlsdGVyJzpcbiAgICAgIHRoaXMuc2hvd0ZpbHRlciA9IGV2ZW50LnZhbHVlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzb3J0JzpcbiAgICAgIHRoaXMuc2hvd1NvcnQgPSBldmVudC52YWx1ZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnY29sdW1uJzpcbiAgICAgIHRoaXMuc2hvd0NvbHVtbiA9IGV2ZW50LnZhbHVlO1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgYnJlYWs7XG4gIH1cbn1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLnNraXAgPSAwO1xuICAgIHRoaXMucGFnZVNpemUgPSAxMDtcbiAgfVxuICBhc3luYyBvblNlYXJjaChldmVudDogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9KSB7XG4gICAgdGhpcy5zZWFyY2hUZXJtID0gZXZlbnQudmFsdWU7XG4gICAgdGhpcy5yZXNldCgpO1xuICAgIGlmICghdGhpcy5zZWFyY2hUZXJtKSB7XG4gICAgICB0aGlzLmdldFByb3BlcnRpZXModGhpcy5JZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZXJ2ZXIuZ2V0KFxuICAgICAgICBgRm9ybS9HZXRGb3JtRW50aXRpZXNXaXRoUGFyYW0vJHt0aGlzLnNlYXJjaFRlcm19LyR7dGhpcy5za2lwfS8ke3RoaXMucGFnZVNpemV9L0NyZWF0ZWRBdC9hc2NgXG4gICAgICApO1xuICAgICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuXG4gICAgICBpZiAocmVzIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkdXJpbmcgc2VhcmNoOicsIHJlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBhZ2VTdGF0ZSA9IHJlcyBhcyBQYWdlZFJlc3VsdDxGb3JtRW50aXR5PjtcbiAgICAgICAgdmFyIHJlc3VsdCA9IChyZXMgYXMgUGFnZWRSZXN1bHQ8Rm9ybUVudGl0eT4pLlJlc3VsdDtcbiAgICAgICAgdGhpcy5kYXRhID0gcmVzdWx0O1xuXG4gICAgICAgIHRoaXMuc2V0VXBDYXJkRGF0YSgpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdTZWFyY2ggZXJyb3I6JywgZXJyb3IpO1xuICAgIH0gZmluYWxseSB7XG4gICAgfVxuICB9XG4gIHNob3dUYWJsZVZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgb25TZWxlY3Rpb25DaGFuZ2Uoc2VsZWN0ZWRSb3dzOiBGb3JtUHJvcGVydHlbXSkge31cbiAgcmV0cnlNZXNzYWdlKCkge31cblxuICBvbkNvbHVtbnNVcGRhdGVkKHVwZGF0ZWRDb2x1bW5zOiBJRGF0YUZpbHRlcltdKSB7XG4gICAgY29uc3QgdXBkYXRlZENvbHVtbkRlZjogQ29sdW1uRGVmaW5pdGlvbjxGb3JtUHJvcGVydHk+W10gPSBbXTtcbiAgICB0aGlzLnNob3dDb2x1bW4gPSBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1uVGFibGVDb3VudCA9IHVwZGF0ZWRDb2x1bW5zLmxlbmd0aDtcbiAgICB1cGRhdGVkQ29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoaW5nQ29sID0gdGhpcy50YXNrVXNlcnNTdmMuZm9ybUZpZWxkQ29sdW1ucy5maW5kKFxuICAgICAgICAoY29sdW1uKSA9PiBjb2x1bW4uaGVhZGVyID09PSBjb2wubmFtZSB8fCBjb2x1bW4uaWQgPT09IGNvbC5uYW1lXG4gICAgICApO1xuICAgICAgaWYgKG1hdGNoaW5nQ29sKSB7XG4gICAgICAgIHVwZGF0ZWRDb2x1bW5EZWYucHVzaChtYXRjaGluZ0NvbCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnZpc2libGVDb2x1bW5EZWYgPSBbLi4udXBkYXRlZENvbHVtbkRlZl07XG4gIH1cblxuICBhc3luYyB1cGRhdGVGaWx0ZXJzQW5kU29ydHMoaXNTZWFyY2g6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGlmICghaXNTZWFyY2gpIHtcbiAgICAgIHRoaXMuZGF0YVZpZXcub25DbGVhclNlYXJjaCgpO1xuICAgICAgdGhpcy5jdXJyZW50U2VhcmNoVGVybSA9ICcnO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgY29uc3QgY2xpY2tFdmVudCA9IG5ldyBNb3VzZUV2ZW50KCdjbGljaycsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZSxcbiAgICAgICAgdmlldzogd2luZG93LFxuICAgICAgfSk7XG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGNsaWNrRXZlbnQpO1xuICAgIH1cbiAgICB2YXIgcGF5bG9hZDogU2VhcmNoUHJvcGVydHlWYWx1ZVtdID0gdGhpcy5jdXJyZW50RmlsdGVycy5tYXAoKHgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFByb3BlcnR5TmFtZTpcbiAgICAgICAgICBUYXNrVXNlclByb3BlcnR5TWFwW3gubmFtZSBhcyBrZXlvZiB0eXBlb2YgVGFza1VzZXJQcm9wZXJ0eU1hcF0sXG4gICAgICAgIEVudGl0eVZhbHVlOiB4LnZhbHVlLFxuICAgICAgICBPcGVyYXRvcjogU2VhcmNoT3BlcmF0b3IuQW5kLFxuICAgICAgICBTaWduOlxuICAgICAgICAgIHguY29uZGl0aW9uICYmIE9iamVjdC5rZXlzKEZpbHRlclR5cGVzKS5pbmNsdWRlcyh4LmNvbmRpdGlvbilcbiAgICAgICAgICAgID8gKEZpbHRlclR5cGVzW1xuICAgICAgICAgICAgICAgIHguY29uZGl0aW9uIGFzIGtleW9mIHR5cGVvZiBGaWx0ZXJUeXBlc1xuICAgICAgICAgICAgICBdIGFzIHVua25vd24gYXMgU2VhcmNoUHJvcGVydHlTaWduKVxuICAgICAgICAgICAgOiBTZWFyY2hQcm9wZXJ0eVNpZ24uRVEsXG4gICAgICAgIFR5cGU6XG4gICAgICAgICAgeC5uYW1lID09IFRhc2tVc2VyUHJvcGVydHlOYW1lLkRhdGVcbiAgICAgICAgICAgID8gU2VhcmNoUHJvcGVydHlWYWx1ZVR5cGUuRGF0ZVxuICAgICAgICAgICAgOiBTZWFyY2hQcm9wZXJ0eVZhbHVlVHlwZS5TdHJpbmcsXG4gICAgICB9O1xuICAgIH0pO1xuICAgIC8vIHBheWxvYWQucHVzaCh7XG4gICAgLy8gICBQcm9wZXJ0eU5hbWU6ICdBUElLZXknLFxuICAgIC8vICAgRW50aXR5VmFsdWU6IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleSxcbiAgICAvLyAgIE9wZXJhdG9yOiBTZWFyY2hPcGVyYXRvci5BbmQsXG4gICAgLy8gICBTaWduOiBTZWFyY2hQcm9wZXJ0eVNpZ24uRVEsXG4gICAgLy8gfSk7XG4gICAgY29uc3Qgc29ydFBhcmFtOiB7IFBhcmFtOiBzdHJpbmc7IE9yZGVyOiBzdHJpbmcgfSB8IG51bGwgPVxuICAgICAgdGhpcy5jdXJyZW50U29ydHMubGVuZ3RoID4gMFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIFBhcmFtOlxuICAgICAgICAgICAgICBUYXNrVXNlclByb3BlcnR5TWFwW1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFNvcnRzWzBdLm5hbWUgYXMga2V5b2YgdHlwZW9mIFRhc2tVc2VyUHJvcGVydHlNYXBcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIE9yZGVyOiB0aGlzLmN1cnJlbnRTb3J0c1swXS52YWx1ZSxcbiAgICAgICAgICB9XG4gICAgICAgIDogbnVsbDtcbiAgICBjb25zdCBzZWFyY2hUZXJtRXhpc3RzID0gdGhpcy5jdXJyZW50U2VhcmNoVGVybS50cmltKCkubGVuZ3RoID4gMDtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSSh0cnVlKTtcbiAgICBjb25zdCByZXMgPSBzZWFyY2hUZXJtRXhpc3RzXG4gICAgICA/IGF3YWl0IHRoaXMuc2VydmVyLmdldChcbiAgICAgICAgICBgVGFza1VzZXIvR2V0VGFza1VzZXJXaXRoUGFyYW0vJHt0aGlzLmN1cnJlbnRTZWFyY2hUZXJtLnRyaW0oKX0vMC8ke1xuICAgICAgICAgICAgdGhpcy5wYWdlU2l6ZVxuICAgICAgICAgIH1gLFxuICAgICAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgICAgIClcbiAgICAgIDogYXdhaXQgdGhpcy5zZXJ2ZXIucG9zdChcbiAgICAgICAgICBzb3J0UGFyYW1cbiAgICAgICAgICAgID8gYFRhc2tVc2VyL1NlYXJjaFRhc2tVc2Vycy8wLyR7dGhpcy5wYWdlU2l6ZX0vJHtzb3J0UGFyYW0uUGFyYW19LyR7c29ydFBhcmFtLk9yZGVyfWBcbiAgICAgICAgICAgIDogYFRhc2tVc2VyL1NlYXJjaFRhc2tVc2Vycy8wLyR7dGhpcy5wYWdlU2l6ZX1gLFxuICAgICAgICAgIHBheWxvYWQsXG4gICAgICAgICAgdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuV29ya0Zsb3dBUElcbiAgICAgICAgKTtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlcnMgPSBbXTtcbiAgICAgIHRoaXMuY3VycmVudFNvcnRzID0gW107XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhZ2VTdGF0ZSA9IHJlcyBhcyBQYWdlZFJlc3VsdDxGb3JtRW50aXR5PjtcbiAgICAgIHZhciByZXN1bHQgPSAocmVzIGFzIFBhZ2VkUmVzdWx0PEZvcm1FbnRpdHk+KS5SZXN1bHQ7XG4gICAgICB0aGlzLmRhdGEgPSByZXN1bHQubWFwKCh4KSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ueCxcbiAgICAgICAgICBpZDogeC5JZCxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zZXRVcENhcmREYXRhKCk7XG4gICAgfVxuICB9XG4gIGFzeW5jIGxvYWRNb3JlRmlsdGVyc0FuZFNvcnRzKCk6IFByb21pc2U8XG4gICAgUGFnZWRSZXN1bHQ8Rm9ybUVudGl0eT4gfCB1bmRlZmluZWRcbiAgPiB7XG4gICAgaWYgKCF0aGlzLnBhZ2VTdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcGF5bG9hZDogU2VhcmNoUHJvcGVydHlWYWx1ZVtdID0gdGhpcy5jdXJyZW50RmlsdGVycy5tYXAoKHgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFByb3BlcnR5TmFtZTpcbiAgICAgICAgICBUYXNrVXNlclByb3BlcnR5TWFwW3gubmFtZSBhcyBrZXlvZiB0eXBlb2YgVGFza1VzZXJQcm9wZXJ0eU1hcF0sXG4gICAgICAgIEVudGl0eVZhbHVlOiB4LnZhbHVlLFxuICAgICAgICBPcGVyYXRvcjogU2VhcmNoT3BlcmF0b3IuQW5kLFxuICAgICAgICBTaWduOlxuICAgICAgICAgIHguY29uZGl0aW9uICYmIE9iamVjdC5rZXlzKEZpbHRlclR5cGVzKS5pbmNsdWRlcyh4LmNvbmRpdGlvbilcbiAgICAgICAgICAgID8gKEZpbHRlclR5cGVzW1xuICAgICAgICAgICAgICAgIHguY29uZGl0aW9uIGFzIGtleW9mIHR5cGVvZiBGaWx0ZXJUeXBlc1xuICAgICAgICAgICAgICBdIGFzIHVua25vd24gYXMgU2VhcmNoUHJvcGVydHlTaWduKVxuICAgICAgICAgICAgOiBTZWFyY2hQcm9wZXJ0eVNpZ24uRVEsXG4gICAgICAgIFR5cGU6XG4gICAgICAgICAgeC5uYW1lID09IFRhc2tVc2VyUHJvcGVydHlOYW1lLkRhdGVcbiAgICAgICAgICAgID8gU2VhcmNoUHJvcGVydHlWYWx1ZVR5cGUuRGF0ZVxuICAgICAgICAgICAgOiBTZWFyY2hQcm9wZXJ0eVZhbHVlVHlwZS5TdHJpbmcsXG4gICAgICB9O1xuICAgIH0pO1xuICAgIGNvbnN0IHNvcnRQYXJhbTogeyBQYXJhbTogc3RyaW5nOyBPcmRlcjogc3RyaW5nIH0gfCBudWxsID1cbiAgICAgIHRoaXMuY3VycmVudFNvcnRzLmxlbmd0aCA+IDBcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBQYXJhbTpcbiAgICAgICAgICAgICAgVGFza1VzZXJQcm9wZXJ0eU1hcFtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTb3J0c1swXS5uYW1lIGFzIGtleW9mIHR5cGVvZiBUYXNrVXNlclByb3BlcnR5TWFwXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBPcmRlcjogdGhpcy5jdXJyZW50U29ydHNbMF0udmFsdWUsXG4gICAgICAgICAgfVxuICAgICAgICA6IG51bGw7XG4gICAgY29uc3Qgc2VhcmNoVGVybUV4aXN0cyA9IHRoaXMuY3VycmVudFNlYXJjaFRlcm0udHJpbSgpLmxlbmd0aCA+IDA7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG4gICAgY29uc3QgcmVzID0gc2VhcmNoVGVybUV4aXN0c1xuICAgICAgPyBhd2FpdCB0aGlzLnNlcnZlci5nZXQoXG4gICAgICAgICAgYFRhc2tVc2VyL0dldFRhc2tVc2VyV2l0aFBhcmFtLyR7dGhpcy5jdXJyZW50U2VhcmNoVGVybS50cmltKCl9LyR7XG4gICAgICAgICAgICB0aGlzLnBhZ2VTdGF0ZS5Ta2lwXG4gICAgICAgICAgfS8ke3RoaXMucGFnZVNpemV9YCxcbiAgICAgICAgICB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5Xb3JrRmxvd0FQSVxuICAgICAgICApXG4gICAgICA6IGF3YWl0IHRoaXMuc2VydmVyLnBvc3QoXG4gICAgICAgICAgc29ydFBhcmFtXG4gICAgICAgICAgICA/IGBUYXNrVXNlci9TZWFyY2hUYXNrVXNlcnMvJHt0aGlzLnBhZ2VTdGF0ZS5Ta2lwfS8ke3RoaXMucGFnZVNpemV9LyR7c29ydFBhcmFtLlBhcmFtfS8ke3NvcnRQYXJhbS5PcmRlcn1gXG4gICAgICAgICAgICA6IGBUYXNrVXNlci9TZWFyY2hUYXNrVXNlcnMvJHt0aGlzLnBhZ2VTdGF0ZS5Ta2lwfS8ke3RoaXMucGFnZVNpemV9YCxcbiAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgICAgICk7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcmVzdWx0ID0gcmVzIGFzIFBhZ2VkUmVzdWx0PEZvcm1FbnRpdHk+O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cbiAgb25GaWx0ZXJBcHBsaWVkKGFwcGxpZWRGaWx0ZXI6IElEYXRhRmlsdGVyW10pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhcHBsaWVkRmlsdGVyKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlclRhYmxlQ291bnQgPSBhcHBsaWVkRmlsdGVyLmxlbmd0aDtcblxuICAgICAgdGhpcy5zaG93RmlsdGVyID0gZmFsc2U7XG4gICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IGFwcGxpZWRGaWx0ZXJcbiAgICAgICAgLmZpbHRlcigoZmlsdGVyKSA9PiBmaWx0ZXIuY2hlY2tlZClcbiAgICAgICAgLm1hcCgoZmlsdGVyKSA9PiAoe1xuICAgICAgICAgIFByb3BlcnR5TmFtZTogZmlsdGVyLm5hbWUsXG4gICAgICAgICAgRW50aXR5VmFsdWU6IGZpbHRlci52YWx1ZSxcbiAgICAgICAgICBUeXBlOiBmaWx0ZXIudHlwZSxcbiAgICAgICAgICBPcGVyYXRvcjogJ0FuZCcsXG4gICAgICAgICAgU2lnbjogdGhpcy5nZXRDb25kaXRpb24oZmlsdGVyLmNvbmRpdGlvbiksXG4gICAgICAgIH0pKTtcblxuICAgICAgdGhpcy5wb3N0U2VhcmNoKHF1ZXJ5UGFyYW1zKTtcbiAgICB9XG4gIH1cbiAgZ2V0Q29uZGl0aW9uKHZhbHVlOiBhbnkpIHtcbiAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICBjYXNlIENvbmRpdGlvbmFsT3B0aW9ucy5PbjpcbiAgICAgICAgcmV0dXJuIFNlYXJjaFByb3BlcnR5U2lnbi5FUTtcbiAgICAgIGNhc2UgQ29uZGl0aW9uYWxPcHRpb25zLkFmdGVyOlxuICAgICAgICByZXR1cm4gU2VhcmNoUHJvcGVydHlTaWduLkVRO1xuICAgICAgY2FzZSBDb25kaXRpb25hbE9wdGlvbnMuQmVmb3JlOlxuICAgICAgICByZXR1cm4gU2VhcmNoUHJvcGVydHlTaWduLkxUO1xuICAgICAgY2FzZSBDb25kaXRpb25hbE9wdGlvbnMuTm90RXF1YWw6XG4gICAgICAgIHJldHVybiBTZWFyY2hQcm9wZXJ0eVNpZ24uTkVRO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfVxuICBvblNvcnRVcGRhdGVkKHVwZGF0ZWRTb3J0czogSURhdGFGaWx0ZXJbXSkge1xuICAgIHRoaXMuY3VycmVudFNvcnRzID0gdXBkYXRlZFNvcnRzO1xuICAgIHRoaXMuc2hvd1NvcnQgPSBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdGVkU29ydFRhYmxlQ291bnQgPSB1cGRhdGVkU29ydHMubGVuZ3RoO1xuICAgIHRoaXMudXBkYXRlRmlsdGVyc0FuZFNvcnRzKCk7XG4gIH1cblxuICBoYW5kbGVTZWFyY2goZXZlbnQ6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfSkge1xuICAgIHRoaXMuc2VhcmNoVGVybSQubmV4dChldmVudC52YWx1ZSk7XG4gIH1cblxuICBoYW5kbGVFeHBvcnQoZXhwb3J0ZWREYXRhOiBQYXJ0aWFsPGFueT5bXSkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdFeHBvcnRlZCBkYXRhOicsIGV4cG9ydGVkRGF0YSk7XG4gICAgdGhpcy5kb3dubG9hZENTVihleHBvcnRlZERhdGEpO1xuICB9XG4gIHByaXZhdGUgZG93bmxvYWRDU1YoZGF0YTogUGFydGlhbDxhbnk+W10pIHtcbiAgICBjb25zdCBoZWFkZXJzID0gT2JqZWN0LmtleXMoZGF0YVswXSk7XG4gICAgY29uc3QgY3N2Q29udGVudCA9IFtcbiAgICAgIGhlYWRlcnMuam9pbignLCcpLFxuICAgICAgLi4uZGF0YS5tYXAoKHJvdykgPT4gaGVhZGVycy5tYXAoKGhlYWRlcikgPT4gcm93W2hlYWRlcl0pLmpvaW4oJywnKSksXG4gICAgXS5qb2luKCdcXG4nKTtcblxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbY3N2Q29udGVudF0sIHsgdHlwZTogJ3RleHQvY3N2O2NoYXJzZXQ9dXRmLTg7JyB9KTtcbiAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGlmIChsaW5rLmRvd25sb2FkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIHVybCk7XG4gICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCAnZXhwb3J0LmNzdicpO1xuICAgICAgbGluay5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgbGluay5jbGljaygpO1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxoZWFkZXIgY2xhc3M9XCJyb3VuZGVkLWxnIHNoYWRvdy1sZyBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgcHgtNiBweS0yIGJnLVsjRDRBMDA3NzNdXCI+XG48ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEwXCI+XG4gICAgPGg0IGNsYXNzPVwiZm9udC1zZW1pYm9sZFwiPnt7Zm9ybU5hbWV9fTwvaDQ+XG4gICAgPHNwYW4gY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiPlxuICAgICAgUmVmIElEOlxuICAgICAgPHNwYW4+e3tJZH19PC9zcGFuPlxuICAgIDwvc3Bhbj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cImZsZXggZ2FwLTMgaXRlbXMtY2VudGVyXCI+XG4gICAgPHZlcmJlbmEtYnV0dG9uIFtwZF09XCInNnB4J1wiIGNsYXNzPVwidmVyYmVuLXByaW1hcnktYnV0dG9uXCIgKGNsaWNrKT1cInNhdmVBbGxQcm9wZXJ0aWVzKClcIiB0ZXh0PVwiU2F2ZSBBbGxcIj48L3ZlcmJlbmEtYnV0dG9uPlxuICAgICAgPHZlcmJlbi1zdmcgKGNsaWNrKT1cImdvQmFjaygpXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIFt3aWR0aF09XCIxN1wiIFtoZWlnaHRdPVwiMTdcIiBbaWNvbl09XCInY2xvc2UnXCI+PC92ZXJiZW4tc3ZnPlxuPC9kaXY+XG48L2hlYWRlcj5cbjxkaXYgI21lc3NhZ2VMb2cgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC00IG1lc3NhZ2UtbG9nLWNvbnRhaW5lclwiPlxuICA8dmVyYmVuLWRhdGEtdmlldyAjdmR2IFt2aWV3U3RhdGVdPVwie1xuICAgICAgICBpc1NlYXJjaDogdHJ1ZSxcbiAgICAgICAgaXNDb2x1bW46IHRydWUsXG4gICAgICAgIGlzRmlsdGVyOiB0cnVlLFxuICAgICAgICBpc1NvcnQ6IHRydWUsXG4gICAgICAgIGlzRXhwb3J0OiB0cnVlLFxuICAgICAgICBpc1NlbGVjdDogdHJ1ZSxcbiAgICAgICAgaXNDcmVhdGU6IHRydWUsXG4gICAgICAgIGlzVG9nZ2xlOnRydWUsXG4gICAgICB9XCIgW2J1dHRvbkNsYXNzXT1cIidteS1jdXN0b20tYnV0dG9uLWNsYXNzJ1wiIFtpY29uQ2xhc3NdPVwiJ215LWljb24tY2xhc3MnXCJcbiAgICAgIFtzaG93U29ydENoaWxkXT1cInNob3dTb3J0XCIgW3Nob3dDb2x1bW5DaGlsZF09XCJzaG93Q29sdW1uXCJcbiAgICBbYWN0aXZlSWNvbkNsYXNzXT1cIidteS1hY3RpdmUtaWNvbi1jbGFzcydcIiBbc2VsZWN0ZWRDb2x1bW5Db3VudF09XCJzZWxlY3RlZENvbHVtblRhYmxlQ291bnRcIiBbc2VsZWN0ZWRTb3J0Q291bnRdPVwic2VsZWN0ZWRTb3J0VGFibGVDb3VudFwiXG4gICAgW3NlbGVjdGVkRmlsdGVyVGFibGVDb3VudF09XCJzZWxlY3RlZEZpbHRlclRhYmxlQ291bnRcIiBbc2hvd0ZpbHRlckNoaWxkXT1cInNob3dGaWx0ZXJcIiBbc2VhcmNoVmFsdWVdPVwic2VhcmNoVGVybVwiXG4gICAgKHZpZXdDaGFuZ2UpPVwib25WaWV3Q2hhbmdlKCRldmVudClcIiAoc3RhdGVDaGFuZ2UpPVwib25TdGF0ZUNoYW5nZSgkZXZlbnQpXCIgKG9uU2VhcmNoQ2hhbmdlKT1cIm9uU2VhcmNoKCRldmVudClcIj5cbiAgICA8ZGl2IGNsYXNzPVwibXQtMlwiIHRhYmxlLWNvbnRlbnQ+XG4gICAgICA8bGliLWRhdGEtdGFibGUgI2R0IFtkYXRhXT1cImRhdGFbMF0uUHJvcGVydGllc1wiIFtjb2x1bW5zXT1cInZpc2libGVDb2x1bW5EZWZcIiBbc3R5bGVDb25maWddPVwic3R5bGVzXCJcbiAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwic2VsZWN0XCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC1pc1NlbGVjdGVkPVwiaXNTZWxlY3RlZFwiIGxldC10b2dnbGVSb3dTZWxlY3Rpb249XCJ0b2dnbGVSb3dTZWxlY3Rpb25cIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJpc1NlbGVjdGVkXCIgKGNoYW5nZSk9XCJ0b2dnbGVSb3dTZWxlY3Rpb24oKVwiIC8+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2hlYWRlciBsZXQtYWxsUm93c1NlbGVjdGVkPVwiYWxsUm93c1NlbGVjdGVkXCIgbGV0LXNvbWVSb3dzU2VsZWN0ZWQ9XCJzb21lUm93c1NlbGVjdGVkXCJcbiAgICAgICAgICAgIGxldC10b2dnbGVBbGxSb3dzPVwidG9nZ2xlQWxsUm93c1wiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cImFsbFJvd3NTZWxlY3RlZCgpXCIgW2luZGV0ZXJtaW5hdGVdPVwic29tZVJvd3NTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVBbGxSb3dzKClcIiAvPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cIm5hbWVcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LXJvdz1cInJvd1wiIGxldC12YWx1ZT5cbiAgICAgICAgICAgIHt7IHZhbHVlLk5hbWUgfX1cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbEVkaXQgbGV0LXJvdz1cInJvd1wiIGxldC11cGRhdGVWYWx1ZT1cInVwZGF0ZVZhbHVlXCIgbGV0LXZhbHVlPlxuICAgICAgICAgICAgPHZlcmJlbmEtaW5wdXQgaW5wdXRDb250YWluZXJDbGFzcz1cInctZml0XCIgWyhuZ01vZGVsKV09XCJyb3cuTmFtZVwiPjwvdmVyYmVuYS1pbnB1dD5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwicHJvcGVydHlOYW1lXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC1yb3c9XCJyb3dcIiBsZXQtdmFsdWU+XG4gICAgICAgICAgICB7eyByb3cuUHJvcGVydHlOYW1lIH19XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGxFZGl0IGxldC1yb3c9XCJyb3dcIiBsZXQtdXBkYXRlVmFsdWU9XCJ1cGRhdGVWYWx1ZVwiIGxldC12YWx1ZT5cbiAgICAgICAgICAgIDx2ZXJiZW5hLWlucHV0ICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50LCByb3cpXCJcbiAgKHBhc3RlKT1cIm9uUGFzdGUoJGV2ZW50LCByb3cpXCJcbiAgKGlucHV0KT1cIm9uSW5wdXQoJGV2ZW50LCByb3cpXCIgaW5wdXRDb250YWluZXJDbGFzcz1cInctZml0XCIgWyhuZ01vZGVsKV09XCJyb3cuUHJvcGVydHlOYW1lXCI+PC92ZXJiZW5hLWlucHV0PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cIm1pblZhbHVlXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC1yb3c9XCJyb3dcIiBsZXQtdmFsdWU+XG4gICAgICAgICAgICB7eyB2YWx1ZSB9fVxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsRWRpdCBsZXQtcm93PVwicm93XCIgbGV0LXVwZGF0ZVZhbHVlPVwidXBkYXRlVmFsdWVcIiBsZXQtdmFsdWU+XG4gICAgICAgICAgICA8dmVyYmVuYS1pbnB1dCBbdHlwZV09XCInbnVtYmVyJ1wiIFtuZ01vZGVsXT1cImdldFN0cmluZ1ZhbHVlKHJvdywgJ01pblZhbHVlJylcIlxuICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiY29udmVydFRvSW50KCRldmVudCwgcm93LCAnTWluVmFsdWUnKVwiIGlucHV0Q29udGFpbmVyQ2xhc3M9XCJ3LVsxMzBweF1cIj48L3ZlcmJlbmEtaW5wdXQ+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwibWF4VmFsdWVcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LXJvdz1cInJvd1wiIGxldC12YWx1ZT5cbiAgICAgICAgICAgIHt7IHZhbHVlIH19XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGxFZGl0IGxldC1yb3c9XCJyb3dcIiBsZXQtdXBkYXRlVmFsdWU9XCJ1cGRhdGVWYWx1ZVwiIGxldC12YWx1ZT5cbiAgICAgICAgICAgIDx2ZXJiZW5hLWlucHV0IFt0eXBlXT1cIidudW1iZXInXCIgaW5wdXRDb250YWluZXJDbGFzcz1cInctWzEzMHB4XVwiIFtuZ01vZGVsXT1cImdldFN0cmluZ1ZhbHVlKHJvdywgJ01heFZhbHVlJylcIlxuICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiY29udmVydFRvSW50KCRldmVudCwgcm93LCAnTWF4VmFsdWUnKVwiPjwvdmVyYmVuYS1pbnB1dD5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJkZWZhdWx0VmFsdWVcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LXJvdz1cInJvd1wiIGxldC12YWx1ZT5cbiAgICAgICAgICAgIHt7IHZhbHVlIH19XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGxFZGl0IGxldC1yb3c9XCJyb3dcIiBsZXQtdXBkYXRlVmFsdWU9XCJ1cGRhdGVWYWx1ZVwiIGxldC12YWx1ZT5cbiAgICAgICAgICAgIDx2ZXJiZW5hLWlucHV0IFt0eXBlXT1cIid0ZXh0J1wiIGlucHV0Q29udGFpbmVyQ2xhc3M9XCJ3LVsxMzBweF1cIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvdy5EZWZhdWx0VmFsdWVcIj48L3ZlcmJlbmEtaW5wdXQ+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwiZGF0YVR5cGVcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LXJvdz1cInJvd1wiIGxldC12YWx1ZT5cbiAgICAgICAgICAgIHt7IHZhbHVlIH19XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGxFZGl0IGxldC1yb3c9XCJyb3dcIiBsZXQtdXBkYXRlVmFsdWU9XCJ1cGRhdGVWYWx1ZVwiIGxldC12YWx1ZT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0xXCI+XG4gICAgICAgICAgICAgIDx2ZXJiZW4tZHJvcC1kb3duIHdpZHRoPVwiMTAwJVwiIHBsYWNlaG9sZGVyPVwiQ2hhbmdlIERhdGEgVHlwZVwiIFsob3B0aW9ucyldPVwiZGF0YVR5cGVcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93LkRhdGFUeXBlXCI+XG4gICAgICAgICAgICAgIDwvdmVyYmVuLWRyb3AtZG93bj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwiaXNSZXF1aXJlZFwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbCBsZXQtcm93PVwicm93XCIgbGV0LXZhbHVlPlxuICAgICAgICAgICAgPHZlcmJlbi1zdmcgKm5nSWY9XCJ2YWx1ZSA9PT0gdHJ1ZVwiIFtpY29uXT1cIidjaGVjaydcIj48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgICA8dmVyYmVuLXN2ZyAqbmdJZj1cInZhbHVlID09PSBmYWxzZVwiIFtpY29uXT1cIidlcnJvcidcIj48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGxFZGl0IGxldC1yb3c9XCJyb3dcIiBsZXQtdXBkYXRlVmFsdWU9XCJ1cGRhdGVWYWx1ZVwiIGxldC12YWx1ZT5cbiAgICAgICAgICAgIDx2ZXJiZW5hLXN3aXRjaCBbb25Db2xvcl09XCInIzFBMjM3RSdcIiBbKG5nTW9kZWwpXT1cInJvdy5Jc1JlcXVpcmVkXCI+PC92ZXJiZW5hLXN3aXRjaD5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cImFjdGlvbnNcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LWlzRWRpdGluZz1cImlzRWRpdGluZ1wiIGxldC10b2dnbGVSb3dFZGl0PVwidG9nZ2xlUm93RWRpdFwiIGxldC1yb3c9XCJyb3dcIiBsZXQtdmFsdWU+XG4gICAgICAgICAgICA8dmVyYmVuLXBvcC1VcCBbY3VzdG9tU3R5bGVzXT1cInsnei1pbmRleCc6ICc5OSd9XCIgW2Ryb3Bkb3duT3Blbl09XCJvcGVuRHJvcGRvd25JZD09PXJvdy5pZFwiXG4gICAgICAgICAgICAgIFtlbmFibGVNb3VzZUxlYXZlXT1cImZhbHNlXCIgKGNsb3NlKT1cIm9uQ2xvc2UoKVwiPlxuICAgICAgICAgICAgICA8dmVyYmVuLXN2ZyBjbGFzcz1cImN1cnNvci1wb2ludGVyIGFjdGlvbnMtaWNvblwiIChjbGljayk9XCJvcGVuRHJvcGRvd24ocm93KVwiIGRyb3Bkb3duLXRyaWdnZXJcbiAgICAgICAgICAgICAgICBpY29uPVwibGlzdFwiPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcC11cC1jb250ZW50IGZsZXggZmxleC1jb2xcIiAqbmdJZj1cIm9wZW5Ecm9wZG93bklkPT09cm93LklkXCIgZHJvcGRvd24tY29udGVudD5cbiAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJ0b2dnbGVSb3dFZGl0KClcIiBjbGFzcz1cInBvcC11cC12YWx1ZSBjdXJzb3ItcG9pbnRlclwiPkVkaXQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJkZWxldGVQcm9wZXJ0eShyb3cuSWQpXCIgY2xhc3M9XCJwb3AtdXAtdmFsdWUgY3Vyc29yLXBvaW50ZXJcIj5EZWxldGU8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3ZlcmJlbi1wb3AtVXA+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGxFZGl0IGxldC1pc0VkaXRpbmc9XCJpc0VkaXRpbmdcIiBsZXQtdG9nZ2xlUm93RWRpdD1cInRvZ2dsZVJvd0VkaXRcIiBsZXQtcm93PVwicm93XCIgbGV0LXZhbHVlPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTIgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDx2ZXJiZW4tc3ZnIGljb249XCJjaGVja1wiIFt3aWR0aF09XCIxNVwiIFtoZWlnaHRdPVwiMTVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzYXZlVmlhVGFibGUocm93LCB0b2dnbGVSb3dFZGl0KVwiPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICAgICAgPHZlcmJlbi1zdmcgKGNsaWNrKT1cInRvZ2dsZVJvd0VkaXQoKTsgZGVsZXRlUHJvcGVydHkocm93LklkKVwiIGljb249XCJkZWxldGVcIiAgW3dpZHRoXT1cIjE1XCIgW2hlaWdodF09XCIxNVwiPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICAgICAgPHZlcmJlbi1zdmcgaWNvbj1cImNhcmRWaWV3QWx0XCIgW3dpZHRoXT1cIjE1XCIgW2hlaWdodF09XCIxNVwiIChjbGljayk9XCJnb1RvQ2FyZFZpZXcodmFsdWUpXCI+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2xpYi1kYXRhLXRhYmxlPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2FyZC1jb250ZW50PlxuICAgICAgPHZlcmJlbi1jYXJkLWRhdGEtdmlldyBib3JkZXJSYWRpdXM9XCIxMnB4XCIgI3ZkY3YgZGF0YUlkPVwiSWRcIiBib3JkZXI9XCI1cHhcIiBbY2FyZERhdGFMaXN0XT1cImNhcmREYXRhXCJcbiAgICAgICAgcmJnQ29sb3I9XCIjZjVmNmY5XCIgbWc9XCIwcHhcIj5cbiAgICAgICAgPHZlcmJlbi1sZWZ0LWNhcmQtZGF0YS12aWV3IGNsYXNzPVwic3BhY2UteS03XCI+XG4gICAgICAgICAgPHZlcmJlbi1sZWZ0LWNhcmQtZGF0YSAjdmxjZCBbcGFyZW50XT1cInZkY3ZcIiBkYXRhSWQ9XCJpZFwiXG4gICAgICAgICAgICBjbGFzcz1cImJnLXNlY29uZGFyeS0xMDAgcm91bmRlZC14bCBib3JkZXItcHJpbWFyeSBib3JkZXItWzFweF1cIiBbY2FyZERhdGFMaXN0XT1cImNhcmREYXRhXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NhcmQgbGV0LWl0ZW0+XG4gICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cInVzZXJDYXJkQ2xpY2tlZChpdGVtKVwiIGNsYXNzPVwiZmxleCBjdXJzb3ItcG9pbnRlciBoLVttYXgtY29udGVudF1cIj5cbiAgICAgICAgICAgICAgICA8IS0tIDx2ZXJiZW4tc3ZnIFt3aWR0aF09XCIxNVwiIFtoZWlnaHRdPVwiMTVcIiAoY2xpY2spPVwidG9nZ2xlQ2hpbGRyZW4oaXRlbSk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIml0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGg/J3Zpc2libGUnOidpbnZpc2libGUnXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpdGVtcy1jZW50ZXIgZmxleCAgcHItMSBjdXJzb3ItcG9pbnRlclwiIFtpY29uXT1cIml0ZW0uaXNDaGlsZHJlbkV4cGFuZGVkPydtaW51cyc6J3BsdXMnXCIgLz4gLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsIGJnLXNlY29uZGFyeSByb3VuZGVkLXhsXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0zIHJvdW5kZWQteGwgcm91bmRlZC10ci1ub25lIHJvdW5kZWQtYnItbm9uZVwiIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc2VsZWN0ZWQgPyAnYmctcHJpbWFyeScgOiAnYmctc2Vjb25kYXJ5LTIwMCdcbiAgICAgICAgICAgICAgICAgICAgXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHktMyBweC00IGZsZXgtMSBoLVsxMDAlXVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1zdGFydCBmbGV4LTEgZ2FwLTEganVzdGlmeS1iZXR3ZWVuIGgtWzEwMCVdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZmxleC0xIGNhcmQtbWluLWhlaWdodCBqdXN0aWZ5LWJldHdlZW4gaC1bMTAwJV1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBtci00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwibXktMCBmb250LWJvbGQgdGV4dC1bIzQwNDA0MF0gbGVhZGluZy1bMTkuNXB4XVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5kYXRhLk5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCIhdGV4dC1bMTBweF0gdGV4dC1bIzQwNDA0MF1cIj5EYXRhIFR5cGU6PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCIhdGV4dC1bMTNweF0gZm9udC1ib2xkXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5kYXRhLkRhdGFUeXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIiF0ZXh0LVsxMHB4XSB0ZXh0LVsjNDA0MDQwXVwiPkRlZmF1bHQgVmFsdWU6PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiIXRleHQtWzEycHhdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmRhdGEuRGVmYXVsdFZhbHVlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1lbmQgaC1bMTAwJV1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbnVtLXZhbCB7e2l0ZW0uZGF0YS5TdGF0dXN9fVwiPnt7aXRlbS5kYXRhLlN0YXR1c319PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC92ZXJiZW4tbGVmdC1jYXJkLWRhdGE+XG4gICAgICAgIDwvdmVyYmVuLWxlZnQtY2FyZC1kYXRhLXZpZXc+XG4gICAgICAgIDx2ZXJiZW4tcmlnaHQtY2FyZC1kYXRhLXZpZXc+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNwYXJlbnQ+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY3VycmVudERhdGFcIiBjbGFzcz1cImZsZXggZmxleC1jb2wgcm91bmRlZC14bCBoLWZ1bGwgdy1mdWxsIHJlbGF0aXZlIGdhcC02XCI+XG4gICAgICAgICAgICAgIDx2ZXJiZW5hLWlucHV0IG5hbWU9XCJOYW1lXCIgbGFiZWw9XCJOYW1lXCIgXG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY3VycmVudERhdGEuZGF0YS5OYW1lXCIgLz5cbiAgICAgICAgICAgICAgICA8dmVyYmVuYS1pbnB1dCBuYW1lPVwiTmFtZVwiIGxhYmVsPVwiUHJvcGVydHkgTmFtZVwiICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50LCBjdXJyZW50RGF0YS5kYXRhKVwiXG4gIChwYXN0ZSk9XCJvblBhc3RlKCRldmVudCwgY3VycmVudERhdGEuZGF0YSlcIlxuICAoaW5wdXQpPVwib25JbnB1dCgkZXZlbnQsIGN1cnJlbnREYXRhLmRhdGEpXCJcbiAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY3VycmVudERhdGEuZGF0YS5Qcm9wZXJ0eU5hbWVcIiAvPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMVwiPlxuICAgICAgICAgICAgICAgIDxkaXY+RGF0YSBUeXBlPC9kaXY+XG4gICAgICAgICAgICAgICAgPHZlcmJlbi1kcm9wLWRvd24gd2lkdGg9XCIxMDAlXCIgcGxhY2Vob2xkZXI9XCJDaGFuZ2UgRGF0YSBUeXBlXCIgWyhvcHRpb25zKV09XCJkYXRhVHlwZVwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImN1cnJlbnREYXRhLmRhdGEuRGF0YVR5cGVcIiAobmdNb2RlbENoYW5nZSk9XCJvbkRyb3BEb3duQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICA8L3ZlcmJlbi1kcm9wLWRvd24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjdXJyZW50RGF0YS5kYXRhLkRhdGFUeXBlPT09J1NpbmdsZVNlbGVjdGlvbicgfHwgY3VycmVudERhdGEuZGF0YS5EYXRhVHlwZT09PSdNdWx0aVNlbGVjdGlvbidcIj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTJcIj5FbnRlciBPcHRpb25zPC9wPlxuICAgICAgICAgICAgICAgIDx2ZXJiZW4tY2hpcCBbcGxhY2Vob2xkZXJdPVwiJ0VudGVyIE9wdGlvbnMnXCIgWyhuZ01vZGVsKV09XCJjaGlwQXJyYXlcIiAob25DaGFuZ2UpPVwib25DaGlwQ2hhbmdlKCRldmVudClcIj48L3ZlcmJlbi1jaGlwPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPHZlcmJlbmEtaW5wdXRcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlSG9sZGVyXT1cIidFbnRlciBkZWZhdWx0IHRleHQnXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50RGF0YS5kYXRhLkRlZmF1bHRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJEZWZhdWx0VmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIkRlZmF1bHQgVmFsdWUgKG9wdGlvbmFsKVwiXG5cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgIFxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0yXCI+UmVxdWlyZWQ8L3A+XG5cbiAgICAgICAgICAgICAgICA8dmVyYmVuYS1zd2l0Y2ggW29uQ29sb3JdPVwiJyMxQTIzN0UnXCIgWyhuZ01vZGVsKV09XCJjdXJyZW50RGF0YS5kYXRhLklzUmVxdWlyZWRcIj48L3ZlcmJlbmEtc3dpdGNoPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjdXJyZW50RGF0YS5kYXRhLkRhdGFUeXBlPT09J051bWJlcid8fGN1cnJlbnREYXRhLmRhdGEuRGF0YVR5cGU9PT0nVGV4dCcgXCIgY2xhc3M9XCIgZmxleCBmbGV4LWNvbCBnYXAtNlwiPlxuICAgICAgICAgICAgICA8dmVyYmVuYS1pbnB1dFxuICAgICAgICAgICAgICBbdHlwZV09XCInbnVtYmVyJ1wiXG4gICAgICAgICAgICAgIG5hbWU9XCJtaW5WYWx1ZVwiXG4gICAgICAgICAgICAgIGxhYmVsPVwiTWluIFZhbHVlXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZ2V0U3RyaW5nVmFsdWUoY3VycmVudERhdGEuZGF0YSwgJ01pblZhbHVlJylcIlxuICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiXG4gICAgICAgICAgICAgICAgY29udmVydFRvSW50KCRldmVudCwgY3VycmVudERhdGEuZGF0YSwgJ01pblZhbHVlJylcbiAgICAgICAgICAgICAgXCIgLz5cbiAgICAgICAgICAgICAgICA8dmVyYmVuYS1pbnB1dCBbdHlwZV09XCInbnVtYmVyJ1wiIG5hbWU9XCJtYXhWYWx1ZVwiIGxhYmVsPVwiTWF4IFZhbHVlXCIgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlVGFibGUoKVwiXG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJnZXRTdHJpbmdWYWx1ZShjdXJyZW50RGF0YS5kYXRhLCAnTWF4VmFsdWUnKVwiICh2YWx1ZUNoYW5nZSk9XCJcbiAgICAgICAgICAgICAgICBjb252ZXJ0VG9JbnQoJGV2ZW50LCBjdXJyZW50RGF0YS5kYXRhLCAnTWF4VmFsdWUnKVxuICAgICAgICAgICAgICBcIiAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPCEtLSBidXR0b25zIC0tPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gdy1mdWxsIGJvdHRvbS04IGxlZnQtMCByaWdodC0wXCI+XG4gICAgICAgICAgICAgICAgPHZlcmJlbmEtYnV0dG9uIChjbGljayk9XCJkZWxldGVQcm9wZXJ0eShjdXJyZW50RGF0YS5kYXRhLklkKVwiIGNsYXNzPVwidmVyYmVuLWRlbGV0ZS1idXR0b25cIiB0ZXh0PVwiRGVsZXRlXCI+PC92ZXJiZW5hLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtM1wiPlxuICAgICAgICAgICAgICAgICAgPHZlcmJlbmEtYnV0dG9uIGNsYXNzPVwidmVyYmVuLXN3aXRjaC1idXR0b25cIiAoY2xpY2spPVwiZ29Ub1RhYmxlVmlldygpXCJcbiAgICAgICAgICAgICAgICAgICAgdGV4dD1cIlN3aXRjaCBUbyBUYWJsZVwiPjwvdmVyYmVuYS1idXR0b24+XG4gICAgICAgICAgICAgICAgICA8IS0tIDx2ZXJiZW5hLWJ1dHRvbiBjbGFzcz1cInZlcmJlbi1wcmltYXJ5LWJ1dHRvblwiIChjbGljayk9XCJzYXZlVXNlcigpXCIgdGV4dD1cIlNhdmVcIj48L3ZlcmJlbmEtYnV0dG9uPiAtLT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3ZlcmJlbi1yaWdodC1jYXJkLWRhdGEtdmlldz5cbiAgICAgICAgPCEtLSA8dmVyYmVuLXJpZ2h0LWNhcmQtZGF0YS12aWV3PlxuICAgICAgICAgICAgeWVzaGhoaGhoXG4gICAgICAgICAgPC92ZXJiZW4tcmlnaHQtY2FyZC1kYXRhLXZpZXc+IC0tPlxuXG4gICAgICAgIDx2ZXJiZW4tY2FyZC1kYXRhLXZpZXctZm9vdGVyPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiF2ZGN2Lmhhc0N1cnJlbnRJdGVtKClcIiBjbGFzcz1cIm1lc3NhZ2UtbG9nLWJ1dHRvbi1jb250YWluZXIgZmxleCBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgPHZlcmJlbmEtYnV0dG9uIFtmb250V2VpZ2h0XT1cIidib2xkJ1wiIFtiZ0NvbG9yXT1cIicjOEU4RDg3J1wiIFtib3JkZXJSYWRpdXNdPVwiJzRweCdcIiBbdGV4dENvbG9yXT1cIicjZmZmJ1wiXG4gICAgICAgICAgICAgICAgW3RleHRdPVwiJ0RlbGV0ZSdcIj5cbiAgICAgICAgICAgICAgPC92ZXJiZW5hLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgge3tcbiAgICAgICAgICAgICAgICB2ZGN2Lmhhc0N1cnJlbnRJdGVtKCkgPyAnZmxleC0xJyA6ICcnXG4gICAgICAgICAgICAgIH19IGp1c3RpZnktZW5kIGl0ZW1zLWNlbnRlciBnYXAtNVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2luYXRvci10ZXh0XCI+e3sgY2FyZERhdGEubGVuZ3RoIH19IHJlY29yZHMgbG9hZGVkPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdmVyYmVuLWNhcmQtZGF0YS12aWV3LWZvb3Rlcj5cbiAgICAgIDwvdmVyYmVuLWNhcmQtZGF0YS12aWV3PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY29sdW1uLWNvbnRlbnQ+XG4gICAgICA8dmVyYmVuLXZpc2libGUtY29sdW1uIChyZXNldEZpbHRlcik9XCJnZXRQcm9wZXJ0aWVzKElkLCBzaG93Q29sdW1uKVwiIChjb2x1bW5zVXBkYXRlZCk9XCJvbkNvbHVtbnNVcGRhdGVkKCRldmVudClcIiBbYm9yZGVyXT1cIicxcHggc29saWQgcmdiYSgyMTIsIDE2MCwgNywgMSknXCJcbiAgICAgICAgYm9yZGVyUmFkaXVzPVwiMTBweFwiIGJveFNoYWRvdz1cIjJweCAycHggMnB4IDBweCBzaWx2ZXJcIiBiZ0NvbG9yPVwid2hpdGVcIiB3aWR0aD1cIjQwMHB4XCIgdGV4dENvbG9yPVwiYmxhY2tcIiBwZD1cIjFyZW1cIlxuICAgICAgICBwcmltYXJ5Q29sb3I9XCIjRkZFNjgxXCIgc2Vjb25kYXJ5Q29sb3I9XCIjMzQ3OUU5XCIgW2NvbHVtbnNdPVwidmlzaWJsZUNvbHVtbnNcIlxuICAgICAgICBbZGlzcGxheWVkQ29sdW1uc109XCI1XCI+PC92ZXJiZW4tdmlzaWJsZS1jb2x1bW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBmaWx0ZXItY29udGVudD5cbiAgICAgIDx2ZXJiZW4tdGFibGUtZmlsdGVyIChyZXNldFNvcnREYXRhKT1cImdldFByb3BlcnRpZXMoSWQsIHNob3dGaWx0ZXIpXCIgKGZpbHRlcnNBcHBsaWVkKT1cIm9uRmlsdGVyQXBwbGllZCgkZXZlbnQpXCIgW2JvcmRlcl09XCInMXB4IHNvbGlkIHJnYmEoMjEyLCAxNjAsIDcsIDEpJ1wiXG4gICAgICAgIGJvcmRlclJhZGl1cz1cIjEwcHhcIiBib3hTaGFkb3c9XCIycHggMnB4IDJweCAwcHggc2lsdmVyXCIgYmdDb2xvcj1cIndoaXRlXCIgd2lkdGg9XCI0MjBweFwiIHRleHRDb2xvcj1cImJsYWNrXCIgcGQ9XCIxcmVtXCJcbiAgICAgICAgcHJpbWFyeUNvbG9yPVwiI0ZGRTY4MVwiIHNlY29uZGFyeUNvbG9yPVwiIzM0NzlFOVwiIHRlcnRpYXJ5Q29sb3I9XCIjNDA0MDQwXCIgW2ZpbHRlck9wdGlvbnNdPVwiZmlsdGVyQXJyYXlcIlxuICAgICAgICBbbWF4RmlsdGVyTGVuZ3RoXT1cIjNcIj48L3ZlcmJlbi10YWJsZS1maWx0ZXI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBzb3J0LWNvbnRlbnQ+XG4gICAgICA8dmVyYmVuLXNvcnQtdGFibGUgKHJlc2V0U29ydERhdGEpPVwiZ2V0UHJvcGVydGllcyhJZCwgc2hvd1NvcnQpXCIgKHNlbGVjdGVkT3B0aW9ucyk9XCJvblNvcnRVcGRhdGVkKCRldmVudClcIiBbYm9yZGVyXT1cIicxcHggc29saWQgcmdiYSgyMTIsIDE2MCwgNywgMSknXCJcbiAgICAgICAgYm9yZGVyUmFkaXVzPVwiMTBweFwiIGJveFNoYWRvdz1cIjJweCAycHggMnB4IDBweCBzaWx2ZXJcIiBiZ0NvbG9yPVwid2hpdGVcIiB3aWR0aD1cIjQwMHB4XCIgdGV4dENvbG9yPVwiYmxhY2tcIiBwZD1cIjFyZW1cIlxuICAgICAgICBwcmltYXJ5Q29sb3I9XCIjRkZFNjgxXCIgc2Vjb25kYXJ5Q29sb3I9XCIjMzQ3OUU5XCIgdGVydGlhcnlDb2xvcj1cIiM0MDQwNDBcIiBbZW5hYmxlRHJhZ0FuZERyb3BdPVwidHJ1ZVwiXG4gICAgICAgIFtzb3J0T3B0aW9uc109XCJzb3J0T3B0aW9uc1wiPjwvdmVyYmVuLXNvcnQtdGFibGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBleHBvcnQtY29udGVudD5cbiAgICAgIDxsaWItZGF0YS1leHBvcnQgW2RhdGFdPVwiZGF0YVswXS5Qcm9wZXJ0aWVzXCIgKGV4cG9ydERhdGFFdmVudCk9XCJoYW5kbGVFeHBvcnQoJGV2ZW50KVwiPlxuICAgICAgPC9saWItZGF0YS1leHBvcnQ+XG4gICAgPC9kaXY+XG4gIDwvdmVyYmVuLWRhdGEtdmlldz5cbiAgPGRpdiAqbmdJZj1cInZkdi5pc1RhYmxlVmlld1wiIGNsYXNzPVwiZmxleCBnYXAtMiBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICA8ZGl2IGNsYXNzPVwibWVzc2FnZS1sb2ctYnV0dG9uLWNvbnRhaW5lciBmbGV4IGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgPHZlcmJlbmEtYnV0dG9uIFtmb250V2VpZ2h0XT1cIidib2xkJ1wiIFtiZ0NvbG9yXT1cIicjOEU4RDg3J1wiIFtib3JkZXJSYWRpdXNdPVwiJzRweCdcIiBbdGV4dENvbG9yXT1cIicjZmZmJ1wiXG4gICAgICAgIFt0ZXh0XT1cIidEZWxldGUnXCI+XG4gICAgICA8L3ZlcmJlbmEtYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kIGl0ZW1zLWNlbnRlciBnYXAtNVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJwYWdpbmF0b3ItdGV4dFwiPnt7IGNhcmREYXRhLmxlbmd0aCB9fSByZWNvcmRzIGxvYWRlZDwvc3Bhbj5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cImxvYWRNb3JlKClcIiBjbGFzcz1cImxvYWQtbW9yZSB2aWV3LWxpbmtzXCI+XG4gICAgICAgIExvYWQgbW9yZVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG48IS0tIDxkaXYgY2xhc3M9XCJ3LVs0MDBweF0gYmctd2hpdGUgcC00IHNoYWRvdy1sZyBib3JkZXJcIj5cbiAgPGZvcm0tY29udHJvbCAgW2RhdGFUeXBlXT1cImRhdGFUeXBlMlwiIFtmb3JtUHJvcGVydGllc109XCJkYXRhWzBdLlByb3BlcnRpZXNcIj48L2Zvcm0tY29udHJvbD5cbjwvZGl2PiAtLT5cbiJdfQ==