@adins/ucviewgeneric 3.4.13-canary.0 → 3.4.13

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.
@@ -17,7 +17,6 @@ import * as i5 from "@adins/fe-core";
17
17
  import * as i6 from "@adins/uc-subsection";
18
18
  import * as i7 from "@adins/uctable";
19
19
  import * as i8 from "@angular/common";
20
- import * as i9 from "@ng-bootstrap/ng-bootstrap";
21
20
  export class UcviewgenericComponent {
22
21
  constructor(route, http, translateService, cookieService, ngxRouter) {
23
22
  this.route = route;
@@ -601,10 +600,10 @@ export class UcviewgenericComponent {
601
600
  }
602
601
  }
603
602
  /** @nocollapse */ UcviewgenericComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: UcviewgenericComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.HttpClient }, { token: i3.TranslateService }, { token: i4.CookieService }, { token: i5.NgxRouterService }], target: i0.ɵɵFactoryTarget.Component });
604
- /** @nocollapse */ UcviewgenericComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: UcviewgenericComponent, selector: "lib-ucviewgeneric", inputs: { viewGenericObj: "viewGenericObj", gridViewObj: "gridViewObj", refresh: "refresh" }, outputs: { callback: "callback" }, ngImport: i0, template: "<!-- DO NOT BEAUTIFY / PRETTIFY THIS FILE - will cause the label cannot be highlighted/selected for copy -->\r\n<section id=\"horizontal-form-layouts\">\r\n\t<div class=\"row text-left\">\r\n\t\t<div class=\"col-md-12\">\r\n\t\t\t<div [ngClass]=\"IsCard ? 'card' : ''\" *ngIf=\"isReady\">\r\n\t\t\t\t<!-- <div class=\"pl-3 mb-2 mt-2\" *ngIf=\"viewList?.title != ''\">\r\n\t\t\t\t\t<h4 class=\"card-title ucSearch-title\" id=\"horz-layout-colored-controls\" translate>{{viewList.title}}</h4>\r\n\t\t\t\t</div> -->\r\n\t\t\t\t<div class=\"card-body\" *ngFor=\"let ss of viewList?.subsection;let i = index;\">\r\n\t\t\t\t\t<div>\r\n\t\t\t\t\t\t<lib-ucSubsection *ngIf=\"ss.subsection != ''\" [id]=\"ss.subSectionId + 'id'\" [title]=\"ss.subSectionTitle\"\r\n\t\t\t\t\t\t\t[panel]=\"ss.subSectionId\" [legacy]=\"false\" (collapse)=\"onCollapse($event)\">\r\n\t\t\t\t\t\t</lib-ucSubsection>\r\n\t\t\t\t\t\t<div class=\"form-body border-top border-bottom\" [id]='ss.subSectionId' [(ngbCollapse)]=\"isCollapsed\">\r\n\t\t\t\t\t <div class=\"p-3\">\r\n\t\t\t\t\t\t\t<div class=\"form-group row\">\r\n\t\t\t\t\t\t\t\t<div *ngFor=\"let mi of ss?.mainInfo\"\r\n\t\t\t\t\t\t\t\t\t[ngClass]=\"{ 'col-xxl-2 col-xl-3 col-lg-4 col-md-6 col-xs-12 py-2': mi.isHide == undefined || !mi.isHide || (viewInfoObjList[i][mi.property] != '' && viewInfoObjList[i][mi.property] != null)}\">\r\n\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t*ngIf=\"mi.isHide == undefined || !mi.isHide || (viewInfoObjList[i][mi.property] != '' && viewInfoObjList[i][mi.property] != null)\">\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"col-md-12\" *ngIf=\"mi.type != 'switch'\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t<label class=\"label-control label-field\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"mi.customClassLabel != undefined ? mi.customClassLabel : ''\" translate>{{mi.label}}</label>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"col-md-12\" *ngIf=\"mi.type == 'switch'\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t<div *ngFor=\"let case of mi?.case\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div *ngIf=\"switchCase(viewInfoObjList[i],case)\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<label class=\"label-control label-field\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"mi.customClassLabel != undefined ? mi.customClassLabel : ''\" translate>{{case.result.label}}</label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t<div *ngIf=\"viewInfoObjList[i] != undefined\" class=\"col-md-12\" [ngClass]=\"{ 'text-left': mi.position == 'left',\r\n\t\t\t\t\t\t\t\t\t\t 'text-right': mi.position == 'right', 'text-center': mi.position == 'center' }\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t*ngIf=\"(mi.type == 'boolean' && viewInfoObjList[i][mi.property] != null) || (viewInfoObjList[i][mi.property] != '' && viewInfoObjList[i][mi.property] != null) || mi.type == 'switch' || mi.type =='concat'; then nonEmptyLabel else emptyLabel\"></span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<ng-template #emptyLabel>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<label *ngIf=\"mi.type == 'blank'\"></label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<label *ngIf=\"mi.type != 'blank'\" class=\"label-control label-field\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttranslate>-</label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<ng-template #nonEmptyLabel>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"mi.type == 'text'\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<label\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t*ngIf=\"viewInfoObjList[i][mi.property] != '' && viewInfoObjList[i][mi.property] != null\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"label-control breakword item-field\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>{{ viewInfoObjList[i][mi.property] }}</label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<label\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t*ngIf=\"viewInfoObjList[i][mi.property] == '' || viewInfoObjList[i][mi.property] == null\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"label-control label-field\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>-\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<label *ngIf=\"mi.type == 'currency'\" class=\"label-control item-field\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>{{ viewInfoObjList[i][mi.property] | number: mi?.precision ? mi?.precision : '0.2' :'en-US' }} <span *ngIf=\"mi?.IsPrcnt\">&nbsp;%</span> </label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<label *ngIf=\"mi.type == 'date'\" class=\"label-control item-field\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>{{ viewInfoObjList[i][mi.property] | date: (mi?.dateFormat) ? mi?.dateFormat : 'dd-MMM-yyyy' }} </label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<label *ngIf=\"mi.type == 'link'\" class=\"label-control item-field\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a *ngIf=\"!mi?.isFullpath\" [routerLink]=\"genRouterLink(mi.path)\" [target]=\"mi.target\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[queryParams]=\"genAction(viewInfoObjList[i], mi.param)\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"(mi.isCurrency != undefined && mi.isCurrency)\">{{ viewInfoObjList[i][mi.property] | number:'.2':'en-US' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"(mi.isCurrency == undefined || !mi.isCurrency)\">{{ viewInfoObjList[i][mi.property] }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a *ngIf=\"mi?.isFullpath\" href=\"javascript:void(0);\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"redirectFullPath(mi.fullpath, genAction(viewInfoObjList[i], mi.param), mi.target, mi)\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"(mi.isCurrency != undefined && mi.isCurrency)\">{{ viewInfoObjList[i][mi.property] | number:'.2':'en-US' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"(mi.isCurrency == undefined || !mi.isCurrency)\">{{ viewInfoObjList[i][mi.property] }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<label *ngIf=\"mi.type == 'callback'\" class=\"label-control label-field\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"javascript:void(0);\" (click)=\"callbackFunction(viewInfoObjList[i], mi.key)\">{{ viewInfoObjList[i][mi.property] }}</a>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<textarea *ngIf=\"mi.type == 'textarea'\" class=\"form-control\" readonly\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttranslate>{{ viewInfoObjList[i][mi.property] }}</textarea>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"mi.type == 'boolean'\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<label class=\"label-control item-field\" *ngIf=\"viewInfoObjList[i][mi.property] == true\">Yes</label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<label class=\"label-control item-field\" *ngIf=\"viewInfoObjList[i][mi.property] == false\">No</label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<!-- <label\r\n\t\t\t\t\t\t\t\t\t\t *ngIf=\"viewInfoObjList[i][mi.property] == '' || viewInfoObjList[i][mi.property] == null\">-</label> -->\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"mi.type == 'concat'\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<label class=\"label-control breakword item-field\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>{{ mi.concat }}</label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"mi.type == 'switch'\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngFor=\"let cs of mi?.case\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"switchCase(viewInfoObjList[i],cs) && !cs.Hidden\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"label-control breakword item-field\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttranslate *ngIf=\"cs.result.type == 'text'\">{{ viewInfoObjList[i][cs.result.property] }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"cs.result.type == 'decimal'\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<label class=\"label-control breakword item-field\" [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttranslate>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>{{ viewInfoObjList[i][cs.result.property] | number: cs.result.precision ? cs.result.precision : '0.2' :'en-US' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"cs.result.IsPrcnt\">&nbsp;%</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"cs.result.type == 'date'\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<label class=\"label-control breakword item-field\" [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttranslate>{{ viewInfoObjList[i][cs.result.property] | date: 'dd-MMM-yyyy' }}</label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"cs.result.type == 'link'\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"label-control item-field\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttranslate>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a [target]=\"cs.result.target\" [routerLink]=\"genRouterLink(cs.result.path)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[queryParams]=\"genAction(viewInfoObjList[i],cs.result.param)\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"(mi.isCurrency != undefined && mi.isCurrency)\">{{ viewInfoObjList[i][cs.result.property] | number:'.2':'en-US' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"(mi.isCurrency == undefined || !mi.isCurrency)\">{{ viewInfoObjList[i][cs.result.property] }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"cs.result.type == 'boolean'\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<label class=\"label-control breakword item-field\" [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttranslate>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"viewInfoObjList[i][cs.result.property] == 'true' || viewInfoObjList[i][cs.result.property] == true\">Yes</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"viewInfoObjList[i][cs.result.property] == 'false' || viewInfoObjList[i][cs.result.property] == false\">No</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"cs.result.type == 'concat'\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<label class=\"label-control breakword item-field\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>{{ cs.result.concat }}</label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"cs.result.type == 'callback'\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t*ngIf=\"cs.result.isText != undefined && cs.result.isText; then textCallback else iconCallback\"></span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ng-template #textCallback>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"a-link\" href=\"javascript:void(0);\" (click)=\"callbackFunction(viewInfoObjList[i], cs.result.key)\">{{ viewInfoObjList[i][cs.result.property] }}</a>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ng-template #iconCallback>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a [ngClass]=\"[cs.result.tooltip != undefined && cs.result.tooltip != '' ? 'tooltips' : '', cs.result.anchor == undefined || cs.result.anchor == '' ? 'a-link p-0' : cs.result.anchor]\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"callbackFunction(viewInfoObjList[i], cs.result.key)\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"font-medium-3 mr-2\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\" cs.result.icon == undefined || cs.result.icon == '' ? 'ft-edit-2' : cs.result.icon \">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</i>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"cs.result.tooltip != undefined && cs.result.tooltip != ''\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"cs.result.tooltip != undefined && cs.result.tooltip != '' ? 'tooltipstext' : ''\">{{ cs.result.tooltip }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t\t<div class=\"grid-view pb-3\" *ngIf=\"gridViewObj.gridViews.length > 0\">\r\n\t\t\t\t\t\t\t\t<div *ngFor=\"let gridView of inputGridViewObjs; let i = index\">\r\n\t\t\t\t\t\t\t\t\t<lib-ucSubsection\r\n\t\t\t\t\t\t\t\t\t\t*ngIf=\"gridViewObj.gridViews[i].subsection && gridViewObj.gridViews[i].subsection !== ''\"\r\n\t\t\t\t\t\t\t\t\t\t[id]=\"'grid-subsection-id'+i\"\r\n\t\t\t\t\t\t\t\t\t\t[title]=\"gridViewObj.gridViews[i].subsection\"\r\n\t\t\t\t\t\t\t\t\t\t[panel]=\"'grid-subsection-panel-'+i\">\r\n\t\t\t\t\t\t\t\t\t</lib-ucSubsection>\r\n\t\t\t\t\t\t\t\t\t<div class=\"form-body\" [id]=\"'grid-subsection-panel-'+i\">\r\n<!-- <lib-ucgridview [gridInput]=\"gridView\" (callback)=\"gridEvent($event)\" (isRefresh)=\"GetGridViewData(gridViewObj.gridViews[i], gridView)\"></lib-ucgridview>-->\r\n\t\t\t\t\t\t\t\t\t\t<lib-uctable [gridObj]=\"gridView\" [standalone]=\"false\" (callback)=\"gridEvent($event)\" [classPadding]=\"'px-0'\"></lib-uctable>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</section>\r\n", styles: [".label-field{color:var(--gray-font-2, #A1A3A5);font-size:12px!important;font-weight:500}.item-field{color:var(--Black_1, #3A4060);font-size:14px!important}.label-control{padding:0!important}.label-control>a{color:var(--blue, #246CFE)}.a-link{color:var(--blue, #246CFE);font-size:14px!important}@media (min-width: 1366px){.col-xxl-2{flex:0 0 20%;max-width:20%}}\n"], components: [{ type: i6.UcSubsectionComponent, selector: "lib-ucSubsection", inputs: ["title", "panel", "id", "legacy"], outputs: ["collapse"] }, { type: i7.UctableComponent, selector: "lib-uctable", inputs: ["pageSize", "gridObj", "notify", "dicts", "standalone", "classPadding"], outputs: ["callback", "cbUpdateDict"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.NgbCollapse, selector: "[ngbCollapse]", inputs: ["animation", "ngbCollapse"], outputs: ["ngbCollapseChange", "shown", "hidden"], exportAs: ["ngbCollapse"] }, { type: i3.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { type: i1.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }], pipes: { "number": i8.DecimalPipe, "date": i8.DatePipe } });
603
+ /** @nocollapse */ UcviewgenericComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: UcviewgenericComponent, selector: "lib-ucviewgeneric", inputs: { viewGenericObj: "viewGenericObj", gridViewObj: "gridViewObj", refresh: "refresh" }, outputs: { callback: "callback" }, ngImport: i0, template: "<section id=\"horizontal-form-layouts\">\r\n <div class=\"row text-left\">\r\n <div class=\"col-md-12\">\r\n <div [ngClass]=\"IsCard ? 'card' : ''\" *ngIf=\"isReady\">\r\n <div class=\"pl-3 mb-2 mt-2\" *ngIf=\"viewList?.title != ''\">\r\n <h4 class=\"card-title ucSearch-title\" id=\"horz-layout-colored-controls\" translate>{{viewList.title}}</h4>\r\n </div>\r\n <div class=\"card-body\" *ngFor=\"let ss of viewList?.subsection;let i = index;\">\r\n <div class=\"px-3\">\r\n <lib-ucSubsection *ngIf=\"ss.subsection != ''\" [id]=\"ss.subSectionId + 'id'\" [title]=\"ss.subSectionTitle\"\r\n [panel]=\"ss.subSectionId\">\r\n </lib-ucSubsection>\r\n <div class=\"form-body\" [id]='ss.subSectionId'>\r\n <div class=\"form-group row\">\r\n <div *ngFor=\"let mi of ss?.mainInfo\"\r\n [ngClass]=\"{ 'col-md-6': mi.isHide == undefined || !mi.isHide || (viewInfoObjList[i][mi.property] != '' && viewInfoObjList[i][mi.property] != null)}\">\r\n <span\r\n *ngIf=\"mi.isHide == undefined || !mi.isHide || (viewInfoObjList[i][mi.property] != '' && viewInfoObjList[i][mi.property] != null)\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\" *ngIf=\"mi.type != 'switch'\">\r\n <label class=\"label-control\"\r\n [ngClass]=\"mi.customClassLabel != undefined ? mi.customClassLabel : ''\" translate>{{mi.label}}</label>\r\n </div>\r\n <div class=\"col-md-6\" *ngIf=\"mi.type == 'switch'\">\r\n <div *ngFor=\"let case of mi?.case\">\r\n <div *ngIf=\"switchCase(viewInfoObjList[i],case)\">\r\n <label class=\"label-control\"\r\n [ngClass]=\"mi.customClassLabel != undefined ? mi.customClassLabel : ''\" translate>{{case.result.label}}</label>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"viewInfoObjList[i] != undefined\" class=\"col-md-6\" [ngClass]=\"{ 'text-left': mi.position == 'left',\r\n 'text-right': mi.position == 'right', 'text-center': mi.position == 'center' }\">\r\n <span\r\n *ngIf=\"(mi.type == 'boolean' && viewInfoObjList[i][mi.property] != null) || (viewInfoObjList[i][mi.property] != '' && viewInfoObjList[i][mi.property] != null) || mi.type == 'switch' || mi.type =='concat'; then nonEmptyLabel else emptyLabel\"></span>\r\n <ng-template #emptyLabel>\r\n <label *ngIf=\"mi.type == 'blank'\"></label>\r\n <label *ngIf=\"mi.type != 'blank'\" class=\"label-control\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n translate>-</label>\r\n </ng-template>\r\n <ng-template #nonEmptyLabel>\r\n <span *ngIf=\"mi.type == 'text'\">\r\n <label\r\n *ngIf=\"viewInfoObjList[i][mi.property] != '' && viewInfoObjList[i][mi.property] != null\"\r\n class=\"label-control breakword\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n {{ viewInfoObjList[i][mi.property] }}\r\n </label>\r\n <label\r\n *ngIf=\"viewInfoObjList[i][mi.property] == '' || viewInfoObjList[i][mi.property] == null\"\r\n class=\"label-control\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>-\r\n </label>\r\n </span>\r\n <label *ngIf=\"mi.type == 'currency'\" class=\"label-control\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n {{ viewInfoObjList[i][mi.property] | number: mi?.precision ? mi?.precision : '0.2' :'en-US'}} <span *ngIf=\"mi?.IsPrcnt\">&nbsp;%</span> </label>\r\n <label *ngIf=\"mi.type == 'date'\" class=\"label-control\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n {{ viewInfoObjList[i][mi.property] | date: (mi?.dateFormat) ? mi?.dateFormat : 'dd-MMM-yyyy'}} </label>\r\n <label *ngIf=\"mi.type == 'link'\" class=\"label-control\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n <a *ngIf=\"!mi?.isFullpath\" [routerLink]=\"genRouterLink(mi.path)\" [target]=\"mi.target\"\r\n [queryParams]=\"genAction(viewInfoObjList[i], mi.param)\">\r\n <span *ngIf=\"(mi.isCurrency != undefined && mi.isCurrency)\">{{\r\n viewInfoObjList[i][mi.property] | number:'.2':'en-US' }}</span>\r\n <span *ngIf=\"(mi.isCurrency == undefined || !mi.isCurrency)\">{{\r\n viewInfoObjList[i][mi.property] }}</span>\r\n </a>\r\n <a *ngIf=\"mi?.isFullpath\" href=\"javascript:void(0);\"\r\n (click)=\"redirectFullPath(mi.fullpath, genAction(viewInfoObjList[i], mi.param), mi.target, mi)\">\r\n <span *ngIf=\"(mi.isCurrency != undefined && mi.isCurrency)\">{{\r\n viewInfoObjList[i][mi.property] | number:'.2':'en-US' }}</span>\r\n <span *ngIf=\"(mi.isCurrency == undefined || !mi.isCurrency)\">{{\r\n viewInfoObjList[i][mi.property] }}</span>\r\n </a>\r\n </label>\r\n <label *ngIf=\"mi.type == 'callback'\" class=\"label-control\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n <a href=\"javascript:void(0);\" (click)=\"callbackFunction(viewInfoObjList[i], mi.key)\">\r\n {{ viewInfoObjList[i][mi.property] }}\r\n </a>\r\n </label>\r\n <textarea *ngIf=\"mi.type == 'textarea'\" class=\"form-control\" readonly\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n translate> {{ viewInfoObjList[i][mi.property] }} </textarea>\r\n <span *ngIf=\"mi.type == 'boolean'\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n <label class=\"label-control\" *ngIf=\"viewInfoObjList[i][mi.property] == true\">Yes</label>\r\n <label class=\"label-control\" *ngIf=\"viewInfoObjList[i][mi.property] == false\">No</label>\r\n <!-- <label\r\n *ngIf=\"viewInfoObjList[i][mi.property] == '' || viewInfoObjList[i][mi.property] == null\">-</label> -->\r\n </span>\r\n <span *ngIf=\"mi.type == 'concat'\">\r\n <label class=\"label-control breakword\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n {{ mi.concat }}\r\n </label>\r\n </span>\r\n <span *ngIf=\"mi.type == 'switch'\">\r\n <span *ngFor=\"let cs of mi?.case\">\r\n <span *ngIf=\"switchCase(viewInfoObjList[i],cs) && !cs.Hidden\">\r\n <span class=\"label-control breakword\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n translate *ngIf=\"cs.result.type == 'text'\">{{ viewInfoObjList[i][cs.result.property]\r\n }}\r\n </span>\r\n <span *ngIf=\"cs.result.type == 'decimal'\">\r\n <label class=\"label-control breakword\" [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n translate>\r\n <span>\r\n {{ viewInfoObjList[i][cs.result.property] | number: cs.result.precision ? cs.result.precision : '0.2' :'en-US' }}</span> \r\n <span *ngIf=\"cs.result.IsPrcnt\">&nbsp;%</span>\r\n </label>\r\n </span>\r\n <span *ngIf=\"cs.result.type == 'date'\">\r\n <label class=\"label-control breakword\" [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n translate>\r\n {{ viewInfoObjList[i][cs.result.property] | date: 'dd-MMM-yyyy' }}\r\n </label>\r\n </span>\r\n <span *ngIf=\"cs.result.type == 'link'\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n translate>\r\n <a [target]=\"cs.result.target\" [routerLink]=\"genRouterLink(cs.result.path)\"\r\n [queryParams]=\"genAction(viewInfoObjList[i],cs.result.param)\">\r\n <span *ngIf=\"(mi.isCurrency != undefined && mi.isCurrency)\">{{\r\n viewInfoObjList[i][cs.result.property] | number:'.2':'en-US' }}</span>\r\n <span *ngIf=\"(mi.isCurrency == undefined || !mi.isCurrency)\">{{\r\n viewInfoObjList[i][cs.result.property] }}</span>\r\n </a>\r\n </span>\r\n <span *ngIf=\"cs.result.type == 'boolean'\">\r\n <label class=\"label-control breakword\" [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n translate>\r\n <span *ngIf=\"viewInfoObjList[i][cs.result.property] == 'true' || viewInfoObjList[i][cs.result.property] == true\">Yes</span>\r\n <span *ngIf=\"viewInfoObjList[i][cs.result.property] == 'false' || viewInfoObjList[i][cs.result.property] == false\">No</span>\r\n </label>\r\n </span>\r\n <span *ngIf=\"cs.result.type == 'concat'\">\r\n <label class=\"label-control breakword\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n {{ cs.result.concat }}\r\n </label>\r\n </span>\r\n <span *ngIf=\"cs.result.type == 'callback'\">\r\n <span\r\n *ngIf=\"cs.result.isText != undefined && cs.result.isText; then textCallback else iconCallback\"></span>\r\n <ng-template #textCallback>\r\n <span>\r\n <a href=\"javascript:void(0);\" (click)=\"callbackFunction(viewInfoObjList[i], cs.result.key)\">{{\r\n viewInfoObjList[i][cs.result.property] }}</a>\r\n </span>\r\n </ng-template>\r\n <ng-template #iconCallback>\r\n <span>\r\n <a [ngClass]=\"[cs.result.tooltip != undefined && cs.result.tooltip != '' ? 'tooltips' : '', cs.result.anchor == undefined || cs.result.anchor == '' ? 'success p-0' : cs.result.anchor]\"\r\n (click)=\"callbackFunction(viewInfoObjList[i], cs.result.key)\">\r\n <i class=\"font-medium-3 mr-2\"\r\n [ngClass]=\" cs.result.icon == undefined || cs.result.icon == '' ? 'ft-edit-2' : cs.result.icon \">\r\n </i>\r\n <span *ngIf=\"cs.result.tooltip != undefined && cs.result.tooltip != ''\"\r\n [ngClass]=\"cs.result.tooltip != undefined && cs.result.tooltip != '' ? 'tooltipstext' : ''\">\r\n {{cs.result.tooltip}}\r\n </span>\r\n </a>\r\n </span>\r\n </ng-template>\r\n </span>\r\n </span>\r\n </span>\r\n </span>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid-view\" *ngIf=\"gridViewObj.gridViews.length > 0\">\r\n <div *ngFor=\"let gridView of inputGridViewObjs; let i = index\">\r\n <lib-ucSubsection\r\n *ngIf=\"gridViewObj.gridViews[i].subsection && gridViewObj.gridViews[i].subsection !== ''\"\r\n [id]=\"'grid-subsection-id'+i\"\r\n [title]=\"gridViewObj.gridViews[i].subsection\"\r\n [panel]=\"'grid-subsection-panel-'+i\">\r\n </lib-ucSubsection>\r\n <div class=\"form-body\" [id]=\"'grid-subsection-panel-'+i\">\r\n<!-- <lib-ucgridview [gridInput]=\"gridView\" (callback)=\"gridEvent($event)\" (isRefresh)=\"GetGridViewData(gridViewObj.gridViews[i], gridView)\"></lib-ucgridview>-->\r\n <lib-uctable [gridObj]=\"gridView\" [standalone]=\"false\" (callback)=\"gridEvent($event)\"></lib-uctable>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</section>\r\n", components: [{ type: i6.UcSubsectionComponent, selector: "lib-ucSubsection", inputs: ["title", "panel", "id", "legacy"], outputs: ["collapse"] }, { type: i7.UctableComponent, selector: "lib-uctable", inputs: ["pageSize", "gridObj", "notify", "dicts", "standalone", "classPadding"], outputs: ["callback", "cbUpdateDict"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }], pipes: { "number": i8.DecimalPipe, "date": i8.DatePipe } });
605
604
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: UcviewgenericComponent, decorators: [{
606
605
  type: Component,
607
- args: [{ selector: "lib-ucviewgeneric", template: "<!-- DO NOT BEAUTIFY / PRETTIFY THIS FILE - will cause the label cannot be highlighted/selected for copy -->\r\n<section id=\"horizontal-form-layouts\">\r\n\t<div class=\"row text-left\">\r\n\t\t<div class=\"col-md-12\">\r\n\t\t\t<div [ngClass]=\"IsCard ? 'card' : ''\" *ngIf=\"isReady\">\r\n\t\t\t\t<!-- <div class=\"pl-3 mb-2 mt-2\" *ngIf=\"viewList?.title != ''\">\r\n\t\t\t\t\t<h4 class=\"card-title ucSearch-title\" id=\"horz-layout-colored-controls\" translate>{{viewList.title}}</h4>\r\n\t\t\t\t</div> -->\r\n\t\t\t\t<div class=\"card-body\" *ngFor=\"let ss of viewList?.subsection;let i = index;\">\r\n\t\t\t\t\t<div>\r\n\t\t\t\t\t\t<lib-ucSubsection *ngIf=\"ss.subsection != ''\" [id]=\"ss.subSectionId + 'id'\" [title]=\"ss.subSectionTitle\"\r\n\t\t\t\t\t\t\t[panel]=\"ss.subSectionId\" [legacy]=\"false\" (collapse)=\"onCollapse($event)\">\r\n\t\t\t\t\t\t</lib-ucSubsection>\r\n\t\t\t\t\t\t<div class=\"form-body border-top border-bottom\" [id]='ss.subSectionId' [(ngbCollapse)]=\"isCollapsed\">\r\n\t\t\t\t\t <div class=\"p-3\">\r\n\t\t\t\t\t\t\t<div class=\"form-group row\">\r\n\t\t\t\t\t\t\t\t<div *ngFor=\"let mi of ss?.mainInfo\"\r\n\t\t\t\t\t\t\t\t\t[ngClass]=\"{ 'col-xxl-2 col-xl-3 col-lg-4 col-md-6 col-xs-12 py-2': mi.isHide == undefined || !mi.isHide || (viewInfoObjList[i][mi.property] != '' && viewInfoObjList[i][mi.property] != null)}\">\r\n\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t*ngIf=\"mi.isHide == undefined || !mi.isHide || (viewInfoObjList[i][mi.property] != '' && viewInfoObjList[i][mi.property] != null)\">\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"col-md-12\" *ngIf=\"mi.type != 'switch'\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t<label class=\"label-control label-field\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"mi.customClassLabel != undefined ? mi.customClassLabel : ''\" translate>{{mi.label}}</label>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"col-md-12\" *ngIf=\"mi.type == 'switch'\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t<div *ngFor=\"let case of mi?.case\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div *ngIf=\"switchCase(viewInfoObjList[i],case)\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<label class=\"label-control label-field\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"mi.customClassLabel != undefined ? mi.customClassLabel : ''\" translate>{{case.result.label}}</label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t<div *ngIf=\"viewInfoObjList[i] != undefined\" class=\"col-md-12\" [ngClass]=\"{ 'text-left': mi.position == 'left',\r\n\t\t\t\t\t\t\t\t\t\t 'text-right': mi.position == 'right', 'text-center': mi.position == 'center' }\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t*ngIf=\"(mi.type == 'boolean' && viewInfoObjList[i][mi.property] != null) || (viewInfoObjList[i][mi.property] != '' && viewInfoObjList[i][mi.property] != null) || mi.type == 'switch' || mi.type =='concat'; then nonEmptyLabel else emptyLabel\"></span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<ng-template #emptyLabel>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<label *ngIf=\"mi.type == 'blank'\"></label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<label *ngIf=\"mi.type != 'blank'\" class=\"label-control label-field\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttranslate>-</label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<ng-template #nonEmptyLabel>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"mi.type == 'text'\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<label\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t*ngIf=\"viewInfoObjList[i][mi.property] != '' && viewInfoObjList[i][mi.property] != null\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"label-control breakword item-field\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>{{ viewInfoObjList[i][mi.property] }}</label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<label\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t*ngIf=\"viewInfoObjList[i][mi.property] == '' || viewInfoObjList[i][mi.property] == null\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"label-control label-field\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>-\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<label *ngIf=\"mi.type == 'currency'\" class=\"label-control item-field\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>{{ viewInfoObjList[i][mi.property] | number: mi?.precision ? mi?.precision : '0.2' :'en-US' }} <span *ngIf=\"mi?.IsPrcnt\">&nbsp;%</span> </label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<label *ngIf=\"mi.type == 'date'\" class=\"label-control item-field\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>{{ viewInfoObjList[i][mi.property] | date: (mi?.dateFormat) ? mi?.dateFormat : 'dd-MMM-yyyy' }} </label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<label *ngIf=\"mi.type == 'link'\" class=\"label-control item-field\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a *ngIf=\"!mi?.isFullpath\" [routerLink]=\"genRouterLink(mi.path)\" [target]=\"mi.target\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[queryParams]=\"genAction(viewInfoObjList[i], mi.param)\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"(mi.isCurrency != undefined && mi.isCurrency)\">{{ viewInfoObjList[i][mi.property] | number:'.2':'en-US' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"(mi.isCurrency == undefined || !mi.isCurrency)\">{{ viewInfoObjList[i][mi.property] }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a *ngIf=\"mi?.isFullpath\" href=\"javascript:void(0);\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"redirectFullPath(mi.fullpath, genAction(viewInfoObjList[i], mi.param), mi.target, mi)\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"(mi.isCurrency != undefined && mi.isCurrency)\">{{ viewInfoObjList[i][mi.property] | number:'.2':'en-US' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"(mi.isCurrency == undefined || !mi.isCurrency)\">{{ viewInfoObjList[i][mi.property] }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<label *ngIf=\"mi.type == 'callback'\" class=\"label-control label-field\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"javascript:void(0);\" (click)=\"callbackFunction(viewInfoObjList[i], mi.key)\">{{ viewInfoObjList[i][mi.property] }}</a>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<textarea *ngIf=\"mi.type == 'textarea'\" class=\"form-control\" readonly\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttranslate>{{ viewInfoObjList[i][mi.property] }}</textarea>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"mi.type == 'boolean'\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<label class=\"label-control item-field\" *ngIf=\"viewInfoObjList[i][mi.property] == true\">Yes</label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<label class=\"label-control item-field\" *ngIf=\"viewInfoObjList[i][mi.property] == false\">No</label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<!-- <label\r\n\t\t\t\t\t\t\t\t\t\t *ngIf=\"viewInfoObjList[i][mi.property] == '' || viewInfoObjList[i][mi.property] == null\">-</label> -->\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"mi.type == 'concat'\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<label class=\"label-control breakword item-field\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>{{ mi.concat }}</label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"mi.type == 'switch'\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngFor=\"let cs of mi?.case\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"switchCase(viewInfoObjList[i],cs) && !cs.Hidden\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"label-control breakword item-field\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttranslate *ngIf=\"cs.result.type == 'text'\">{{ viewInfoObjList[i][cs.result.property] }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"cs.result.type == 'decimal'\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<label class=\"label-control breakword item-field\" [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttranslate>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>{{ viewInfoObjList[i][cs.result.property] | number: cs.result.precision ? cs.result.precision : '0.2' :'en-US' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"cs.result.IsPrcnt\">&nbsp;%</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"cs.result.type == 'date'\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<label class=\"label-control breakword item-field\" [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttranslate>{{ viewInfoObjList[i][cs.result.property] | date: 'dd-MMM-yyyy' }}</label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"cs.result.type == 'link'\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"label-control item-field\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttranslate>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a [target]=\"cs.result.target\" [routerLink]=\"genRouterLink(cs.result.path)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[queryParams]=\"genAction(viewInfoObjList[i],cs.result.param)\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"(mi.isCurrency != undefined && mi.isCurrency)\">{{ viewInfoObjList[i][cs.result.property] | number:'.2':'en-US' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"(mi.isCurrency == undefined || !mi.isCurrency)\">{{ viewInfoObjList[i][cs.result.property] }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"cs.result.type == 'boolean'\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<label class=\"label-control breakword item-field\" [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttranslate>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"viewInfoObjList[i][cs.result.property] == 'true' || viewInfoObjList[i][cs.result.property] == true\">Yes</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"viewInfoObjList[i][cs.result.property] == 'false' || viewInfoObjList[i][cs.result.property] == false\">No</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"cs.result.type == 'concat'\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<label class=\"label-control breakword item-field\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>{{ cs.result.concat }}</label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"cs.result.type == 'callback'\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t*ngIf=\"cs.result.isText != undefined && cs.result.isText; then textCallback else iconCallback\"></span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ng-template #textCallback>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"a-link\" href=\"javascript:void(0);\" (click)=\"callbackFunction(viewInfoObjList[i], cs.result.key)\">{{ viewInfoObjList[i][cs.result.property] }}</a>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ng-template #iconCallback>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a [ngClass]=\"[cs.result.tooltip != undefined && cs.result.tooltip != '' ? 'tooltips' : '', cs.result.anchor == undefined || cs.result.anchor == '' ? 'a-link p-0' : cs.result.anchor]\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"callbackFunction(viewInfoObjList[i], cs.result.key)\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"font-medium-3 mr-2\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\" cs.result.icon == undefined || cs.result.icon == '' ? 'ft-edit-2' : cs.result.icon \">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</i>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"cs.result.tooltip != undefined && cs.result.tooltip != ''\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"cs.result.tooltip != undefined && cs.result.tooltip != '' ? 'tooltipstext' : ''\">{{ cs.result.tooltip }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t\t<div class=\"grid-view pb-3\" *ngIf=\"gridViewObj.gridViews.length > 0\">\r\n\t\t\t\t\t\t\t\t<div *ngFor=\"let gridView of inputGridViewObjs; let i = index\">\r\n\t\t\t\t\t\t\t\t\t<lib-ucSubsection\r\n\t\t\t\t\t\t\t\t\t\t*ngIf=\"gridViewObj.gridViews[i].subsection && gridViewObj.gridViews[i].subsection !== ''\"\r\n\t\t\t\t\t\t\t\t\t\t[id]=\"'grid-subsection-id'+i\"\r\n\t\t\t\t\t\t\t\t\t\t[title]=\"gridViewObj.gridViews[i].subsection\"\r\n\t\t\t\t\t\t\t\t\t\t[panel]=\"'grid-subsection-panel-'+i\">\r\n\t\t\t\t\t\t\t\t\t</lib-ucSubsection>\r\n\t\t\t\t\t\t\t\t\t<div class=\"form-body\" [id]=\"'grid-subsection-panel-'+i\">\r\n<!-- <lib-ucgridview [gridInput]=\"gridView\" (callback)=\"gridEvent($event)\" (isRefresh)=\"GetGridViewData(gridViewObj.gridViews[i], gridView)\"></lib-ucgridview>-->\r\n\t\t\t\t\t\t\t\t\t\t<lib-uctable [gridObj]=\"gridView\" [standalone]=\"false\" (callback)=\"gridEvent($event)\" [classPadding]=\"'px-0'\"></lib-uctable>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</section>\r\n", styles: [".label-field{color:var(--gray-font-2, #A1A3A5);font-size:12px!important;font-weight:500}.item-field{color:var(--Black_1, #3A4060);font-size:14px!important}.label-control{padding:0!important}.label-control>a{color:var(--blue, #246CFE)}.a-link{color:var(--blue, #246CFE);font-size:14px!important}@media (min-width: 1366px){.col-xxl-2{flex:0 0 20%;max-width:20%}}\n"] }]
606
+ args: [{ selector: "lib-ucviewgeneric", template: "<section id=\"horizontal-form-layouts\">\r\n <div class=\"row text-left\">\r\n <div class=\"col-md-12\">\r\n <div [ngClass]=\"IsCard ? 'card' : ''\" *ngIf=\"isReady\">\r\n <div class=\"pl-3 mb-2 mt-2\" *ngIf=\"viewList?.title != ''\">\r\n <h4 class=\"card-title ucSearch-title\" id=\"horz-layout-colored-controls\" translate>{{viewList.title}}</h4>\r\n </div>\r\n <div class=\"card-body\" *ngFor=\"let ss of viewList?.subsection;let i = index;\">\r\n <div class=\"px-3\">\r\n <lib-ucSubsection *ngIf=\"ss.subsection != ''\" [id]=\"ss.subSectionId + 'id'\" [title]=\"ss.subSectionTitle\"\r\n [panel]=\"ss.subSectionId\">\r\n </lib-ucSubsection>\r\n <div class=\"form-body\" [id]='ss.subSectionId'>\r\n <div class=\"form-group row\">\r\n <div *ngFor=\"let mi of ss?.mainInfo\"\r\n [ngClass]=\"{ 'col-md-6': mi.isHide == undefined || !mi.isHide || (viewInfoObjList[i][mi.property] != '' && viewInfoObjList[i][mi.property] != null)}\">\r\n <span\r\n *ngIf=\"mi.isHide == undefined || !mi.isHide || (viewInfoObjList[i][mi.property] != '' && viewInfoObjList[i][mi.property] != null)\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\" *ngIf=\"mi.type != 'switch'\">\r\n <label class=\"label-control\"\r\n [ngClass]=\"mi.customClassLabel != undefined ? mi.customClassLabel : ''\" translate>{{mi.label}}</label>\r\n </div>\r\n <div class=\"col-md-6\" *ngIf=\"mi.type == 'switch'\">\r\n <div *ngFor=\"let case of mi?.case\">\r\n <div *ngIf=\"switchCase(viewInfoObjList[i],case)\">\r\n <label class=\"label-control\"\r\n [ngClass]=\"mi.customClassLabel != undefined ? mi.customClassLabel : ''\" translate>{{case.result.label}}</label>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"viewInfoObjList[i] != undefined\" class=\"col-md-6\" [ngClass]=\"{ 'text-left': mi.position == 'left',\r\n 'text-right': mi.position == 'right', 'text-center': mi.position == 'center' }\">\r\n <span\r\n *ngIf=\"(mi.type == 'boolean' && viewInfoObjList[i][mi.property] != null) || (viewInfoObjList[i][mi.property] != '' && viewInfoObjList[i][mi.property] != null) || mi.type == 'switch' || mi.type =='concat'; then nonEmptyLabel else emptyLabel\"></span>\r\n <ng-template #emptyLabel>\r\n <label *ngIf=\"mi.type == 'blank'\"></label>\r\n <label *ngIf=\"mi.type != 'blank'\" class=\"label-control\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n translate>-</label>\r\n </ng-template>\r\n <ng-template #nonEmptyLabel>\r\n <span *ngIf=\"mi.type == 'text'\">\r\n <label\r\n *ngIf=\"viewInfoObjList[i][mi.property] != '' && viewInfoObjList[i][mi.property] != null\"\r\n class=\"label-control breakword\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n {{ viewInfoObjList[i][mi.property] }}\r\n </label>\r\n <label\r\n *ngIf=\"viewInfoObjList[i][mi.property] == '' || viewInfoObjList[i][mi.property] == null\"\r\n class=\"label-control\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>-\r\n </label>\r\n </span>\r\n <label *ngIf=\"mi.type == 'currency'\" class=\"label-control\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n {{ viewInfoObjList[i][mi.property] | number: mi?.precision ? mi?.precision : '0.2' :'en-US'}} <span *ngIf=\"mi?.IsPrcnt\">&nbsp;%</span> </label>\r\n <label *ngIf=\"mi.type == 'date'\" class=\"label-control\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n {{ viewInfoObjList[i][mi.property] | date: (mi?.dateFormat) ? mi?.dateFormat : 'dd-MMM-yyyy'}} </label>\r\n <label *ngIf=\"mi.type == 'link'\" class=\"label-control\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n <a *ngIf=\"!mi?.isFullpath\" [routerLink]=\"genRouterLink(mi.path)\" [target]=\"mi.target\"\r\n [queryParams]=\"genAction(viewInfoObjList[i], mi.param)\">\r\n <span *ngIf=\"(mi.isCurrency != undefined && mi.isCurrency)\">{{\r\n viewInfoObjList[i][mi.property] | number:'.2':'en-US' }}</span>\r\n <span *ngIf=\"(mi.isCurrency == undefined || !mi.isCurrency)\">{{\r\n viewInfoObjList[i][mi.property] }}</span>\r\n </a>\r\n <a *ngIf=\"mi?.isFullpath\" href=\"javascript:void(0);\"\r\n (click)=\"redirectFullPath(mi.fullpath, genAction(viewInfoObjList[i], mi.param), mi.target, mi)\">\r\n <span *ngIf=\"(mi.isCurrency != undefined && mi.isCurrency)\">{{\r\n viewInfoObjList[i][mi.property] | number:'.2':'en-US' }}</span>\r\n <span *ngIf=\"(mi.isCurrency == undefined || !mi.isCurrency)\">{{\r\n viewInfoObjList[i][mi.property] }}</span>\r\n </a>\r\n </label>\r\n <label *ngIf=\"mi.type == 'callback'\" class=\"label-control\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n <a href=\"javascript:void(0);\" (click)=\"callbackFunction(viewInfoObjList[i], mi.key)\">\r\n {{ viewInfoObjList[i][mi.property] }}\r\n </a>\r\n </label>\r\n <textarea *ngIf=\"mi.type == 'textarea'\" class=\"form-control\" readonly\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n translate> {{ viewInfoObjList[i][mi.property] }} </textarea>\r\n <span *ngIf=\"mi.type == 'boolean'\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n <label class=\"label-control\" *ngIf=\"viewInfoObjList[i][mi.property] == true\">Yes</label>\r\n <label class=\"label-control\" *ngIf=\"viewInfoObjList[i][mi.property] == false\">No</label>\r\n <!-- <label\r\n *ngIf=\"viewInfoObjList[i][mi.property] == '' || viewInfoObjList[i][mi.property] == null\">-</label> -->\r\n </span>\r\n <span *ngIf=\"mi.type == 'concat'\">\r\n <label class=\"label-control breakword\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n {{ mi.concat }}\r\n </label>\r\n </span>\r\n <span *ngIf=\"mi.type == 'switch'\">\r\n <span *ngFor=\"let cs of mi?.case\">\r\n <span *ngIf=\"switchCase(viewInfoObjList[i],cs) && !cs.Hidden\">\r\n <span class=\"label-control breakword\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n translate *ngIf=\"cs.result.type == 'text'\">{{ viewInfoObjList[i][cs.result.property]\r\n }}\r\n </span>\r\n <span *ngIf=\"cs.result.type == 'decimal'\">\r\n <label class=\"label-control breakword\" [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n translate>\r\n <span>\r\n {{ viewInfoObjList[i][cs.result.property] | number: cs.result.precision ? cs.result.precision : '0.2' :'en-US' }}</span> \r\n <span *ngIf=\"cs.result.IsPrcnt\">&nbsp;%</span>\r\n </label>\r\n </span>\r\n <span *ngIf=\"cs.result.type == 'date'\">\r\n <label class=\"label-control breakword\" [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n translate>\r\n {{ viewInfoObjList[i][cs.result.property] | date: 'dd-MMM-yyyy' }}\r\n </label>\r\n </span>\r\n <span *ngIf=\"cs.result.type == 'link'\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n translate>\r\n <a [target]=\"cs.result.target\" [routerLink]=\"genRouterLink(cs.result.path)\"\r\n [queryParams]=\"genAction(viewInfoObjList[i],cs.result.param)\">\r\n <span *ngIf=\"(mi.isCurrency != undefined && mi.isCurrency)\">{{\r\n viewInfoObjList[i][cs.result.property] | number:'.2':'en-US' }}</span>\r\n <span *ngIf=\"(mi.isCurrency == undefined || !mi.isCurrency)\">{{\r\n viewInfoObjList[i][cs.result.property] }}</span>\r\n </a>\r\n </span>\r\n <span *ngIf=\"cs.result.type == 'boolean'\">\r\n <label class=\"label-control breakword\" [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n translate>\r\n <span *ngIf=\"viewInfoObjList[i][cs.result.property] == 'true' || viewInfoObjList[i][cs.result.property] == true\">Yes</span>\r\n <span *ngIf=\"viewInfoObjList[i][cs.result.property] == 'false' || viewInfoObjList[i][cs.result.property] == false\">No</span>\r\n </label>\r\n </span>\r\n <span *ngIf=\"cs.result.type == 'concat'\">\r\n <label class=\"label-control breakword\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n {{ cs.result.concat }}\r\n </label>\r\n </span>\r\n <span *ngIf=\"cs.result.type == 'callback'\">\r\n <span\r\n *ngIf=\"cs.result.isText != undefined && cs.result.isText; then textCallback else iconCallback\"></span>\r\n <ng-template #textCallback>\r\n <span>\r\n <a href=\"javascript:void(0);\" (click)=\"callbackFunction(viewInfoObjList[i], cs.result.key)\">{{\r\n viewInfoObjList[i][cs.result.property] }}</a>\r\n </span>\r\n </ng-template>\r\n <ng-template #iconCallback>\r\n <span>\r\n <a [ngClass]=\"[cs.result.tooltip != undefined && cs.result.tooltip != '' ? 'tooltips' : '', cs.result.anchor == undefined || cs.result.anchor == '' ? 'success p-0' : cs.result.anchor]\"\r\n (click)=\"callbackFunction(viewInfoObjList[i], cs.result.key)\">\r\n <i class=\"font-medium-3 mr-2\"\r\n [ngClass]=\" cs.result.icon == undefined || cs.result.icon == '' ? 'ft-edit-2' : cs.result.icon \">\r\n </i>\r\n <span *ngIf=\"cs.result.tooltip != undefined && cs.result.tooltip != ''\"\r\n [ngClass]=\"cs.result.tooltip != undefined && cs.result.tooltip != '' ? 'tooltipstext' : ''\">\r\n {{cs.result.tooltip}}\r\n </span>\r\n </a>\r\n </span>\r\n </ng-template>\r\n </span>\r\n </span>\r\n </span>\r\n </span>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid-view\" *ngIf=\"gridViewObj.gridViews.length > 0\">\r\n <div *ngFor=\"let gridView of inputGridViewObjs; let i = index\">\r\n <lib-ucSubsection\r\n *ngIf=\"gridViewObj.gridViews[i].subsection && gridViewObj.gridViews[i].subsection !== ''\"\r\n [id]=\"'grid-subsection-id'+i\"\r\n [title]=\"gridViewObj.gridViews[i].subsection\"\r\n [panel]=\"'grid-subsection-panel-'+i\">\r\n </lib-ucSubsection>\r\n <div class=\"form-body\" [id]=\"'grid-subsection-panel-'+i\">\r\n<!-- <lib-ucgridview [gridInput]=\"gridView\" (callback)=\"gridEvent($event)\" (isRefresh)=\"GetGridViewData(gridViewObj.gridViews[i], gridView)\"></lib-ucgridview>-->\r\n <lib-uctable [gridObj]=\"gridView\" [standalone]=\"false\" (callback)=\"gridEvent($event)\"></lib-uctable>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</section>\r\n" }]
608
607
  }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.HttpClient }, { type: i3.TranslateService }, { type: i4.CookieService }, { type: i5.NgxRouterService }]; }, propDecorators: { viewGenericObj: [{
609
608
  type: Input
610
609
  }], gridViewObj: [{
@@ -614,4 +613,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
614
613
  }], callback: [{
615
614
  type: Output
616
615
  }] } });
617
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWN2aWV3Z2VuZXJpYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy91Y3ZpZXdnZW5lcmljL3NyYy9saWIvdWN2aWV3Z2VuZXJpYy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy91Y3ZpZXdnZW5lcmljL3NyYy9saWIvdWN2aWV3Z2VuZXJpYy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWxELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDM0MsT0FBTyxLQUFLLFFBQVEsTUFBTSxXQUFXLENBQUM7QUFDdEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7QUFPbEQsTUFBTSxPQUFPLHNCQUFzQjtJQWlCakMsWUFDVSxLQUFxQixFQUNyQixJQUFnQixFQUNoQixnQkFBa0MsRUFDbEMsYUFBNEIsRUFDNUIsU0FBMkI7UUFKM0IsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xD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RSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQ3BDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FDeEMsSUFBSSxDQUFDLENBQUMsRUFDUDt3QkFDQSxTQUFTLEdBQUcsSUFBSSxDQUFDO3FCQUNsQjt5QkFBTTt3QkFDTCxTQUFTLEdBQUcsS0FBSyxDQUFDO3dCQUNsQixNQUFNO3FCQUNQO2lCQUNGO2FBQ0Y7U0FDRjtRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7O3VJQW50QlUsc0JBQXNCOzJIQUF0QixzQkFBc0IsMExDakJuQyxzNWRBcUxBOzRGRHBLYSxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0UsbUJBQW1CO3dOQUtwQixjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNJLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBpc0Rldk1vZGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgVWNWaWV3R2VuZXJpY09iaiB9IGZyb20gXCIuL21vZGVsL3VjLXZpZXctZ2VuZXJpYy1vYmoubW9kZWxcIjtcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XHJcbmltcG9ydCB7IENvb2tpZVNlcnZpY2UgfSBmcm9tIFwibmd4LWNvb2tpZVwiO1xyXG5pbXBvcnQgKiBhcyBDcnlwdG9KUyBmcm9tIFwiY3J5cHRvLWpzXCI7XHJcbmltcG9ydCB7IEdyaWRWaWV3T2JqIH0gZnJvbSBcIi4vbW9kZWwvZ3JpZC12aWV3LW9iai5tb2RlbFwiO1xyXG5pbXBvcnQgeyBJbnB1dEdyaWRPYmogfSBmcm9tIFwiLi9tb2RlbC9pbnB1dC1ncmlkLW9iai5tb2RlbFwiO1xyXG5pbXBvcnQgeyBOZ3hSb3V0ZXJTZXJ2aWNlIH0gZnJvbSAnQGFkaW5zL2ZlLWNvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwibGliLXVjdmlld2dlbmVyaWNcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3Vjdmlld2dlbmVyaWMuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFsnLi91Y3ZpZXdnZW5lcmljLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVY3ZpZXdnZW5lcmljQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSB2aWV3R2VuZXJpY09iajogVWNWaWV3R2VuZXJpY09iaiA9IG5ldyBVY1ZpZXdHZW5lcmljT2JqKCk7XHJcbiAgQElucHV0KCkgZ3JpZFZpZXdPYmo6IEdyaWRWaWV3T2JqID0gbmV3IEdyaWRWaWV3T2JqKCk7XHJcbiAgQElucHV0KCkgcmVmcmVzaDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIEBPdXRwdXQoKSBjYWxsYmFjazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIFVzZXJBY2Nlc3M6IGFueSA9IEpTT04ucGFyc2UoXHJcbiAgICB0aGlzLkdldENvb2tpZSh0aGlzLmNvb2tpZVNlcnZpY2UsIFwiVXNlckFjY2Vzc1wiKVxyXG4gICk7XHJcbiAgaW5wdXRHcmlkVmlld09ianM6IEFycmF5PElucHV0R3JpZE9iaj4gPSBuZXcgQXJyYXk8SW5wdXRHcmlkT2JqPigpO1xyXG4gIHZpZXdMaXN0OiBhbnkgPSBcIlwiO1xyXG4gIGdldExpc3Q6IGFueTtcclxuICB2aWV3SW5mb09iakxpc3Q6IGFueTtcclxuICBpc1JlYWR5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgSXNDYXJkOiBib29sZWFuID0gdHJ1ZTtcclxuICBpc0NvbGxhcHNlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb29raWVTZXJ2aWNlOiBDb29raWVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBuZ3hSb3V0ZXI6IE5neFJvdXRlclNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKChwYXJhbXMpID0+IHtcclxuICAgICAgdGhpcy5nZXRMaXN0ID0gdGhpcy5uZ3hSb3V0ZXIuZ2V0UXVlcnlQYXJhbXMocGFyYW1zLnBhcmFtcyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc2V0RGVmYXVsdExhbmcoXCJlblwiKTtcclxuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS51c2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJsYW5nXCIpIHx8IFwiZW5cIik7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIC8vIEVYUEVSSU1FTlRBTCBCYXNlVmlldyBBUElcclxuICAgIC8vIFRPRE86IHJlbW92ZSBhZnRlciBzdGFibGVcclxuICAgIGlmICh0aGlzLnZpZXdHZW5lcmljT2JqLkV4cGVyaW1lbnRhbCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMudmlld0dlbmVyaWNPYmouRXhwZXJpbWVudGFsID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBFTkQgRVhQRVJJTUVOVEFMXHJcblxyXG4gICAgdGhpcy5pbml0aWF0ZUZvcm0oKTtcclxuICAgIHRoaXMuQ2hlY2tJc0NhcmQoKTtcclxuXHJcbiAgICB0aGlzLnJlZnJlc2guc3Vic2NyaWJlKGlzVXBkYXRlID0+IHtcclxuICAgICAgaWYgKCFpc1VwZGF0ZSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gUmVmcmVzaCB2aWV3IGNvbnRlbnRcclxuICAgICAgdGhpcy5pbml0aWF0ZUZvcm0oKTtcclxuICAgICAgdGhpcy5yZWZyZXNoLmVtaXQoZmFsc2UpO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG9uQ29sbGFwc2UoZXYpIHtcclxuICAgIHRoaXMuaXNDb2xsYXBzZWQgPSAhIWV2Py5pc0NvbGxhcHNlZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgQ2hlY2tJc0NhcmQoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMudmlld0dlbmVyaWNPYmouSXNDYXJkID09IHVuZGVmaW5lZCB8fFxyXG4gICAgICB0aGlzLnZpZXdHZW5lcmljT2JqLklzQ2FyZCA9PSBudWxsXHJcbiAgICApXHJcbiAgICAgIHJldHVybjtcclxuICAgIHRoaXMuSXNDYXJkID0gdGhpcy52aWV3R2VuZXJpY09iai5Jc0NhcmQ7XHJcbiAgfVxyXG5cclxuICBpbml0aWF0ZUZvcm0oKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMudmlld0dlbmVyaWNPYmouZGF0YUlucHV0ICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgT2JqZWN0LmtleXModGhpcy52aWV3R2VuZXJpY09iai5kYXRhSW5wdXQpLmxlbmd0aCAhPT0gMFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuc2V0Q29uZmlndXJhdGlvbih7IC4uLnRoaXMudmlld0dlbmVyaWNPYmouZGF0YUlucHV0IH0pO1xyXG4gICAgICB0aGlzLmdyaWRWaWV3T2JqLmdyaWRWaWV3cyA9IHRoaXMudmlld0dlbmVyaWNPYmouZGF0YUlucHV0LnN1YnNlY3Rpb25bMF0/LmdyaWRWaWV3cyB8fCBbXTtcclxuICAgICAgdGhpcy5pbml0aWFsaXplR3JpZFZpZXdzKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmdldEpTT04odGhpcy52aWV3R2VuZXJpY09iai52aWV3SW5wdXQpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xyXG4gICAgICB0aGlzLnNldENvbmZpZ3VyYXRpb24oZGF0YSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZUdyaWRWaWV3cygpO1xyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZUdyaWRWaWV3cygpIHtcclxuICAgIGlmICh0aGlzLmdyaWRWaWV3T2JqICYmIHRoaXMuZ3JpZFZpZXdPYmouZ3JpZFZpZXdzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5ncmlkVmlld09iai5ncmlkVmlld3MubWFwKGFzeW5jIChncmlkVmlldykgPT4ge1xyXG4gICAgICBjb25zdCBpbnB1dEdyaWRPYmogPSBuZXcgSW5wdXRHcmlkT2JqKCk7XHJcbiAgICAgIGlucHV0R3JpZE9iai5kYXRhSW5wdXQgPSBncmlkVmlldy50YWJsZUlucHV0O1xyXG4gICAgICBpbnB1dEdyaWRPYmoucmVzdWx0RGF0YSA9IHsgRGF0YTogW10gfTtcclxuICAgICAgaW5wdXRHcmlkT2JqLmlzU3Vic2VjdGlvbiA9IGdyaWRWaWV3LmlzU3Vic2VjdGlvbiB8fCBmYWxzZTtcclxuICAgICAgaW5wdXRHcmlkT2JqLnVzZVBhZ2luYXRpb24gPSBncmlkVmlldy51c2VQYWdpbmF0aW9uIHx8IHRydWU7XHJcbiAgICAgIGlucHV0R3JpZE9iai50aXRsZSA9IGdyaWRWaWV3LnRpdGxlIHx8IFwiXCI7XHJcbiAgICAgIGF3YWl0IHRoaXMuR2V0R3JpZFZpZXdEYXRhKGdyaWRWaWV3LmdldERhdGEsIGlucHV0R3JpZE9iaik7XHJcbiAgICAgIHRoaXMuaW5wdXRHcmlkVmlld09ianMucHVzaChpbnB1dEdyaWRPYmopO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRFbnZpcm9ubWVudChlbnZpKSB7XHJcbiAgICBjb25zdCBmaWx0ZXJlZEVudmlzID0gdGhpcy52aWV3R2VuZXJpY09iai5saXN0RW52aXJvbm1lbnRzLmZpbHRlcihcclxuICAgICAgKHYpID0+IHYuZW52aXJvbm1lbnQgPT0gZW52aVxyXG4gICAgKTtcclxuICAgIHJldHVybiBmaWx0ZXJlZEVudmlzLmxlbmd0aCA+IDAgPyBmaWx0ZXJlZEVudmlzWzBdIDogbnVsbDtcclxuICB9XHJcblxyXG4gIGFzeW5jIEdldEdyaWRWaWV3RGF0YShtZXRhOiBhbnksIGlucHV0R3JpZE9iajogSW5wdXRHcmlkT2JqKSB7XHJcbiAgICBsZXQgdGVtcGxMaXN0RGF0YSA9IFtdO1xyXG4gICAgY29uc3QgZW52aVVybCA9IG1ldGEuZW52aXJvbm1lbnQgJiYgdGhpcy5nZXRFbnZpcm9ubWVudChtZXRhLmVudmlyb25tZW50KTtcclxuICAgIGF3YWl0IHRoaXMuaHR0cFxyXG4gICAgICAucG9zdChlbnZpVXJsID8gZW52aVVybC51cmwgKyBtZXRhLmFwaVBhdGggOiBtZXRhLmFwaVBhdGgsIG1ldGEucmVxT2JqKVxyXG4gICAgICAudG9Qcm9taXNlKClcclxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgdGVtcGxMaXN0RGF0YSA9IHJlc3BvbnNlW21ldGEuY3VzdG9tT2JqTmFtZSB8fCBcIlJldHVybk9iamVjdFwiXTtcclxuICAgICAgICBpbnB1dEdyaWRPYmouYXBpVXJsID0gbWV0YS5hcGlQYXRoO1xyXG4gICAgICAgIGlucHV0R3JpZE9iai5yZXN1bHREYXRhW1wiRGF0YVwiXSA9IG5ldyBBcnJheSgpO1xyXG4gICAgICAgIGlucHV0R3JpZE9iai5yZXN1bHREYXRhLkRhdGEgPSB0ZW1wbExpc3REYXRhO1xyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGdyaWRFdmVudChldikge1xyXG4gICAgdGhpcy5jYWxsYmFja0Z1bmN0aW9uKGV2LlJvd09iaiwgZXYuS2V5KTtcclxuICB9XHJcblxyXG4gIHNldENvbmZpZ3VyYXRpb24oZGF0YSkge1xyXG4gICAgdGhpcy52aWV3TGlzdCA9IGRhdGE7XHJcbiAgICB0aGlzLnZpZXdJbmZvT2JqTGlzdCA9IFtdO1xyXG5cclxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgIHRoaXMudmlld0luZm9PYmpMaXN0LnB1c2goaik7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb24ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5xdWVyeXN0cmluZyAhPSBudWxsICYmXHJcbiAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLnF1ZXJ5c3RyaW5nLm5hbWUgIT0gXCJcIlxyXG4gICAgICApIHtcclxuICAgICAgICBsZXQgcXVlcnlPYmo6IGFueTtcclxuICAgICAgICBpZiAodGhpcy52aWV3R2VuZXJpY09iai53aGVyZVZhbHVlLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ucXVlcnlzdHJpbmcud2hlcmVRdWVyeSA9ICg8YW55PihcclxuICAgICAgICAgICAgT2JqZWN0XHJcbiAgICAgICAgICApKS52YWx1ZXModGhpcy5nZXRMaXN0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLnF1ZXJ5c3RyaW5nLndoZXJlUXVlcnkgPVxyXG4gICAgICAgICAgICB0aGlzLnZpZXdHZW5lcmljT2JqLndoZXJlVmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9QYXRoICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvUGF0aCAhPSBcIlwiXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMudmlld0dlbmVyaWNPYmoudmlld0Vudmlyb25tZW50ICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgICB0aGlzLnZpZXdHZW5lcmljT2JqLnZpZXdFbnZpcm9ubWVudCAhPSBcIlwiXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLmZ1bGxwYXRoID1cclxuICAgICAgICAgICAgICB0aGlzLnZpZXdHZW5lcmljT2JqLnZpZXdFbnZpcm9ubWVudCArXHJcbiAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvUGF0aDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5mdWxscGF0aCA9XHJcbiAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvVXJsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0uZnVsbHBhdGggPVxyXG4gICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9Vcmw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBFWFBFUklNRU5UQUwgQmFzZVZpZXcgQVBJXHJcbiAgICAgICAgLy8gVE9ETzogcmVtb3ZlIGFmdGVyIHN0YWJsZVxyXG4gICAgICAgIGlmICh0aGlzLnZpZXdHZW5lcmljT2JqLkV4cGVyaW1lbnRhbCkge1xyXG4gICAgICAgICAgY29uc3QgX2Vudmlyb25tZW50VXJsID0gdGhpcy52aWV3R2VuZXJpY09iai52aWV3RW52aXJvbm1lbnQuc3Vic3RyaW5nKDAsIHRoaXMudmlld0dlbmVyaWNPYmoudmlld0Vudmlyb25tZW50Lmxlbmd0aC0zKTtcclxuICAgICAgICAgIGNvbnN0IF9xcnlWaWV3ID0gdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLnF1ZXJ5c3RyaW5nLm5hbWU7XHJcbiAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0uZnVsbHBhdGggPSBgJHtfZW52aXJvbm1lbnRVcmx9L3YxL0Jhc2VWaWV3LyR7X3FyeVZpZXd9YFxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBFTkQgRVhQRVJJTUVOVEFMXHJcblxyXG4gICAgICAgIHF1ZXJ5T2JqID0ge1xyXG4gICAgICAgICAgcXVlcnlzdHJpbmc6IHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5xdWVyeXN0cmluZyxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuaHR0cFxyXG4gICAgICAgICAgLnBvc3QodGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLmZ1bGxwYXRoLCBxdWVyeU9iailcclxuICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMudmlld0luZm9PYmpMaXN0W2ldID0gcmVzcG9uc2VbXCJEYXRhXCJdWzBdO1xyXG5cclxuICAgICAgICAgICAgICBmb3IgKFxyXG4gICAgICAgICAgICAgICAgbGV0IHkgPSAwO1xyXG4gICAgICAgICAgICAgICAgeSA8IHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mby5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICB5KytcclxuICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLnByb3BlcnR5TGlzdCAhPVxyXG4gICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0ucHJvcGVydHlMaXN0Lmxlbmd0aCAhPVxyXG4gICAgICAgICAgICAgICAgICAgIDBcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eUxpc3QgPVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5wcm9wZXJ0eUxpc3Q7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBjb25jYXQgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICBmb3IgKGxldCB6ID0gMDsgeiA8IHByb3BlcnR5TGlzdC5sZW5ndGg7IHorKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbmNhdCA9XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25jYXQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlMaXN0W3pdLnByZWZpeCArXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdJbmZvT2JqTGlzdFtpXVtwcm9wZXJ0eUxpc3Rbel0ucHJvcGVydHldICtcclxuICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TGlzdFt6XS5zdWZmaXg7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmNvbmNhdCA9IGNvbmNhdDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvL3N3aXRjaCBjYXNlXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLnR5cGUgPT0gXCJzd2l0Y2hcIikge1xyXG4gICAgICAgICAgICAgICAgICBmb3IgKFxyXG4gICAgICAgICAgICAgICAgICAgIGxldCB6ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICB6IDwgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmNhc2UubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgIHorK1xyXG4gICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgRW1wdHkgPSBuZXcgQXJyYXk8Ym9vbGVhbj4oKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uY2FzZVt6XS5IaWRkZW4gPVxyXG4gICAgICAgICAgICAgICAgICAgICAgZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9jaGVjayBoaWRlSWZFbXB0eVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5jYXNlW3pdLnJlc3VsdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuaGlkZUlmRW1wdHkgIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uY2FzZVt6XS5yZXN1bHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmhpZGVJZkVtcHR5ICE9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmNhc2Vbel0ucmVzdWx0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnR5cGUgIT0gXCJjb25jYXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEVtcHR5LnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3SW5mb09iakxpc3RbaV1bXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uY2FzZVt6XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVzdWx0LnByb3BlcnR5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXSAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0luZm9PYmpMaXN0W2ldW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uY2FzZVt6XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXN1bHQucHJvcGVydHlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gIT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3SW5mb09iakxpc3RbaV1bXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5jYXNlW3pdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlc3VsdC5wcm9wZXJ0eVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSAhPSBcIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHR5cGUgY29uY2F0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uY2FzZVt6XS5yZXN1bHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wcm9wZXJ0eUxpc3QgIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmNhc2Vbel0ucmVzdWx0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHJvcGVydHlMaXN0Lmxlbmd0aCAhPSAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5TGlzdCA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uY2FzZVt6XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVzdWx0LnByb3BlcnR5TGlzdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29uY2F0ID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBhID0gMDsgYSA8IHByb3BlcnR5TGlzdC5sZW5ndGg7IGErKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uY2F0ID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uY2F0ICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlMaXN0W2FdLnByZWZpeCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0luZm9PYmpMaXN0W2ldW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TGlzdFthXS5wcm9wZXJ0eVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlMaXN0W2FdLnN1ZmZpeDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVtcHR5LnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0luZm9PYmpMaXN0W2ldW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TGlzdFthXS5wcm9wZXJ0eVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0luZm9PYmpMaXN0W2ldW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlMaXN0W2FdLnByb3BlcnR5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSAhPSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3SW5mb09iakxpc3RbaV1bXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUxpc3RbYV0ucHJvcGVydHlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdICE9IFwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uY2FzZVtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBdLnJlc3VsdC5jb25jYXQgPSBjb25jYXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEVtcHR5LmluY2x1ZGVzKHRydWUpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5jYXNlW3pdLnJlc3VsdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5oaWRlSWZFbXB0eVxyXG4gICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5jYXNlW3pdLkhpZGRlbiA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmlzSGlkZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vY29uY2F0XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5jYXNlW3pdLnJlc3VsdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5wcm9wZXJ0eUxpc3QgIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5jYXNlW3pdLnJlc3VsdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5wcm9wZXJ0eUxpc3QubGVuZ3RoICE9IDBcclxuICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eUxpc3QgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5jYXNlW3pdLnJlc3VsdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnByb3BlcnR5TGlzdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmNhdCA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGEgPSAwOyBhIDwgcHJvcGVydHlMaXN0Lmxlbmd0aDsgYSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uY2F0ID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmNhdCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUxpc3RbYV0ucHJlZml4ICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0luZm9PYmpMaXN0W2ldW3Byb3BlcnR5TGlzdFthXS5wcm9wZXJ0eV0gK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlMaXN0W2FdLnN1ZmZpeDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uY2FzZVtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0ucmVzdWx0LmNvbmNhdCA9IGNvbmNhdDtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS50eXBlID09IFwibGlua1wiICYmXHJcbiAgICAgICAgICAgICAgICAgICh0aGlzLnZpZXdHZW5lcmljT2JqLm5hdmlnYXRpb25Db25zdCAhPSB1bmRlZmluZWQgfHxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdHZW5lcmljT2JqLm5hdmlnYXRpb25Db25zdCAhPSBudWxsKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCB0ZW1wTGluayA9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3R2VuZXJpY09iai5uYXZpZ2F0aW9uQ29uc3RbXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0ucGF0aFxyXG4gICAgICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0ZW1wTGluayAhPSB1bmRlZmluZWQgJiYgdGVtcExpbmsgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5wYXRoID0gdGVtcExpbms7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLnR5cGUgPT0gXCJsaW5rXCIgJiZcclxuICAgICAgICAgICAgICAgICAgdGhpcy52aWV3R2VuZXJpY09iai5saXN0RW52aXJvbm1lbnRzICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnZpZXdHZW5lcmljT2JqLmxpc3RFbnZpcm9ubWVudHMubGVuZ3RoICE9IDBcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICBmb3IgKFxyXG4gICAgICAgICAgICAgICAgICAgIGxldCB6ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICB6IDwgdGhpcy52aWV3R2VuZXJpY09iai5saXN0RW52aXJvbm1lbnRzLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICB6KytcclxuICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmVudmlyb25tZW50ID09XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdHZW5lcmljT2JqLmxpc3RFbnZpcm9ubWVudHNbel0uZW52aXJvbm1lbnRcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5pc0Z1bGxwYXRoID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5mdWxscGF0aCA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0dlbmVyaWNPYmoubGlzdEVudmlyb25tZW50c1t6XS51cmwgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0ucGF0aDtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLnR5cGUgPT0gXCJsaW5rXCJcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uaXNGdWxscGF0aCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uZnVsbHBhdGggPVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5wYXRoO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLmlzUmVhZHkgPSB0cnVlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvUGF0aCAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1BhdGggIT0gXCJcIlxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0uZW52aXJvbm1lbnQgIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1BhdGggIT0gXCJcIlxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGZvciAoXHJcbiAgICAgICAgICAgICAgbGV0IHogPSAwO1xyXG4gICAgICAgICAgICAgIHogPCB0aGlzLnZpZXdHZW5lcmljT2JqLmxpc3RFbnZpcm9ubWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgIHorK1xyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0uZW52aXJvbm1lbnQgPT1cclxuICAgICAgICAgICAgICAgIHRoaXMudmlld0dlbmVyaWNPYmoubGlzdEVudmlyb25tZW50c1t6XS5lbnZpcm9ubWVudFxyXG4gICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLmZ1bGxwYXRoID1cclxuICAgICAgICAgICAgICAgICAgdGhpcy52aWV3R2VuZXJpY09iai5saXN0RW52aXJvbm1lbnRzW3pdLnVybCArXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1BhdGg7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMudmlld0dlbmVyaWNPYmoudmlld0Vudmlyb25tZW50ICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgICB0aGlzLnZpZXdHZW5lcmljT2JqLnZpZXdFbnZpcm9ubWVudCAhPSBcIlwiXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLmZ1bGxwYXRoID1cclxuICAgICAgICAgICAgICB0aGlzLnZpZXdHZW5lcmljT2JqLnZpZXdFbnZpcm9ubWVudCArXHJcbiAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvUGF0aDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5mdWxscGF0aCA9XHJcbiAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvVXJsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0uZnVsbHBhdGggPVxyXG4gICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9Vcmw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCByZXFPYmogPSB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ucmVxT2JqIHx8IHRoaXMuZ2V0TGlzdDtcclxuICAgICAgICBpZiAodGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLnJlcU9iaiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhcclxuICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLnJlcU9ialxyXG4gICAgICAgICAgKSkge1xyXG4gICAgICAgICAgICByZXFPYmpba2V5XSA9IHRoaXMuZ2V0TGlzdFt2YWx1ZSBhcyBzdHJpbmddIHx8IHRoaXMudmlld0dlbmVyaWNPYmouZGljdHNbdmFsdWUgYXMgc3RyaW5nXTtcclxuICAgICAgICAgICAgaWYgKHJlcU9ialtrZXldID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgIHJlcU9ialtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaHR0cC5wb3N0KHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5mdWxscGF0aCwgcmVxT2JqKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5yZXNPYmpOYW1lID09PSB1bmRlZmluZWQgfHxcclxuICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ucmVzT2JqTmFtZSA9PT0gXCJcIlxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICB0aGlzLnZpZXdJbmZvT2JqTGlzdFtpXSA9IHJlc3BvbnNlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMudmlld0luZm9PYmpMaXN0W2ldID1cclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlW3RoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5yZXNPYmpOYW1lXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmlzUmVhZHkgPSB0cnVlO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEpTT04odXJsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodXJsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgR2V0Q29va2llKGNvb2tpZVNlcnZpY2U6IENvb2tpZVNlcnZpY2UsIGtleTogc3RyaW5nKSB7XHJcbiAgICBsZXQgdmFsdWUgPSBjb29raWVTZXJ2aWNlLmdldChrZXkpO1xyXG4gICAgaWYgKHZhbHVlID09IHVuZGVmaW5lZCB8fCB2YWx1ZS50cmltKCkgPT0gXCJcIikgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCBfa2V5ID0gdGhpcy52aWV3R2VuZXJpY09iaj8uZW52aXJvbm1lbnQ/LkNoaXBwZXJLZXlDb29raWUgPz8gXCJBZEluc0ZPVTEyMzQ1Njc4XCI7XHJcbiAgICByZXR1cm4gdGhpcy5EZWNyeXB0U3RyaW5nKHZhbHVlLCBfa2V5KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgRGVjcnlwdFN0cmluZyhjaGlwcGVyVGV4dDogc3RyaW5nLCBjaGlwcGVyS2V5OiBzdHJpbmcpIHtcclxuICAgIGlmIChcclxuICAgICAgY2hpcHBlcktleSA9PSB1bmRlZmluZWQgfHxcclxuICAgICAgY2hpcHBlcktleS50cmltKCkgPT0gXCJcIiB8fFxyXG4gICAgICBjaGlwcGVyVGV4dCA9PSB1bmRlZmluZWQgfHxcclxuICAgICAgY2hpcHBlclRleHQudHJpbSgpID09IFwiXCJcclxuICAgIClcclxuICAgICAgcmV0dXJuIGNoaXBwZXJUZXh0O1xyXG4gICAgbGV0IGNoaXBwZXJLZXlBcnIgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShjaGlwcGVyS2V5KTtcclxuICAgIGxldCBpdiA9IENyeXB0b0pTLmxpYi5Xb3JkQXJyYXkuY3JlYXRlKFsweDAwLCAweDAwLCAweDAwLCAweDAwXSk7XHJcbiAgICBsZXQgZGVjcnlwdGVkID0gQ3J5cHRvSlMuQUVTLmRlY3J5cHQoY2hpcHBlclRleHQsIGNoaXBwZXJLZXlBcnIsIHtcclxuICAgICAgaXY6IGl2LFxyXG4gICAgfSk7XHJcbiAgICBsZXQgcGxhaW5UZXh0ID0gZGVjcnlwdGVkLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcclxuICAgIHJldHVybiBwbGFpblRleHQ7XHJcbiAgfVxyXG5cclxuICBnZW5BY3Rpb24odmlld09iaiwgcGFyYW0pIHtcclxuICAgIGxldCBhcnJMaXN0OiBhbnkgPSB7fTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFtLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB2aWV3T2JqW3BhcmFtW2ldLnR5cGVdICE9IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgIHZpZXdPYmpbcGFyYW1baV0ucHJvcGVydHldICE9IHVuZGVmaW5lZFxyXG4gICAgICApIHtcclxuICAgICAgICBhcnJMaXN0W3BhcmFtW2ldLnR5cGVdID0gdmlld09ialtwYXJhbVtpXS5wcm9wZXJ0eV07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYXJyTGlzdFtwYXJhbVtpXS50eXBlXSA9IHBhcmFtW2ldLnByb3BlcnR5O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2V0IHN0YXRlIG9mIGRhdGEgdG8gcm91dGVyIHNlcnZpY2VcclxuICAgIGlmICghaXNEZXZNb2RlKCkgJiYgKHRoaXMudmlld0dlbmVyaWNPYmo/LmVudmlyb25tZW50Py51c2VTYWZlVXJsID8/IGZhbHNlKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5uZ3hSb3V0ZXIuY3JlYXRlUXVlcnlQYXJhbXMoYXJyTGlzdCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXJyTGlzdDtcclxuICB9XHJcblxyXG4gIGdlblJvdXRlckxpbmsodXJsTGluazogc3RyaW5nKSB7XHJcbiAgICBsZXQgdGVtcExpbmsgPSB1cmxMaW5rO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnZpZXdHZW5lcmljT2JqLm5hdmlnYXRpb25Db25zdCAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgdGhpcy52aWV3R2VuZXJpY09iai5uYXZpZ2F0aW9uQ29uc3RbdXJsTGlua10gIT0gbnVsbFxyXG4gICAgKSB7XHJcbiAgICAgIHRlbXBMaW5rID0gdGhpcy52aWV3R2VuZXJpY09iai5uYXZpZ2F0aW9uQ29uc3RbdXJsTGlua107XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGVtcExpbms7XHJcbiAgfVxyXG5cclxuICByZWRpcmVjdEZ1bGxQYXRoKGZ1bGxwYXRoOiBzdHJpbmcsIHBhcmFtOiBPYmplY3QsIHRhcmdldDogc3RyaW5nLCBpdGVtOiBhbnkpIHtcclxuICAgIGxldCBxdWVyeVBhcmFtID0gXCJcIjtcclxuICAgIGxldCBfZnVsbHBhdGggPSBmdWxscGF0aCB8fCBcIlwiO1xyXG4gICAgXHJcbiAgICBpZiAoX2Z1bGxwYXRoID09IFwiXCIpIHtcclxuICAgICAgX2Z1bGxwYXRoID0gdGhpcy5nZW5GdWxscGF0aChpdGVtLmVudmlyb25tZW50LCBpdGVtLnBhdGgpXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgTGlzdE9iaiA9IE9iamVjdC5rZXlzKHBhcmFtKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTGlzdE9iai5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAocXVlcnlQYXJhbSAhPSBcIlwiKSB7XHJcbiAgICAgICAgcXVlcnlQYXJhbSA9IHF1ZXJ5UGFyYW0gKyBcIiZcIiArIExpc3RPYmpbaV0gKyBcIj1cIiArIHBhcmFtW0xpc3RPYmpbaV1dO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHF1ZXJ5UGFyYW0gPSBMaXN0T2JqW2ldICsgXCI9XCIgKyBwYXJhbVtMaXN0T2JqW2ldXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgd2luZG93Lm9wZW4oX2Z1bGxwYXRoICsgXCI/XCIgKyBxdWVyeVBhcmFtLCB0YXJnZXQpO1xyXG4gIH1cclxuXHJcbiAgZ2VuRnVsbHBhdGgoZW52aXJvbm1lbnQ6IHN0cmluZywgcGF0aDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBfZW52aSA9IHRoaXMuZ2V0RW52aXJvbm1lbnQoZW52aXJvbm1lbnQpO1xyXG4gICAgaWYgKF9lbnZpID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBlbnZpcm9ubWVudCArIHBhdGg7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIF9lbnZpLnVybCArIHBhdGg7XHJcbiAgfVxyXG5cclxuICBjYWxsYmFja0Z1bmN0aW9uKGl0ZW0sIGtleTogc3RyaW5nID0gXCJcIikge1xyXG4gICAgbGV0IENCT2JqID0ge1xyXG4gICAgICBWaWV3T2JqOiBpdGVtLFxyXG4gICAgICBLZXk6IGtleSxcclxuICAgIH07XHJcbiAgICB0aGlzLmNhbGxiYWNrLmVtaXQoQ0JPYmopO1xyXG4gIH1cclxuXHJcbiAgc3dpdGNoQ2FzZShpdGVtLCBjb25kTGlzdCkge1xyXG4gICAgbGV0IGNvbmRpdGlvbiA9IGZhbHNlO1xyXG4gICAgaWYgKCFpdGVtKSByZXR1cm4gZmFsc2U7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbmRMaXN0LmNvbmRpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0ucmVzdHJpY3Rpb24gPT0gXCJFUVwiKSB7XHJcbiAgICAgICAgaWYgKGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0uaXNVc2VyICE9IHRydWUpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgaXRlbVtjb25kTGlzdC5jb25kaXRpb25zW2ldLnByb3BlcnR5XSA9PVxyXG4gICAgICAgICAgICBjb25kTGlzdC5jb25kaXRpb25zW2ldLnZhbHVlXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBpdGVtW2NvbmRMaXN0LmNvbmRpdGlvbnNbaV0ucHJvcGVydHldID09IHRoaXMuVXNlckFjY2Vzc1tcIlVzZXJOYW1lXCJdXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoY29uZExpc3QuY29uZGl0aW9uc1tpXS5yZXN0cmljdGlvbiA9PSBcIk5FUVwiKSB7XHJcbiAgICAgICAgaWYgKGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0uaXNVc2VyICE9IHRydWUpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgaXRlbVtjb25kTGlzdC5jb25kaXRpb25zW2ldLnByb3BlcnR5XSAhPVxyXG4gICAgICAgICAgICBjb25kTGlzdC5jb25kaXRpb25zW2ldLnZhbHVlXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBpdGVtW2NvbmRMaXN0LmNvbmRpdGlvbnNbaV0ucHJvcGVydHldICE9IHRoaXMuVXNlckFjY2Vzc1tcIlVzZXJOYW1lXCJdXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoY29uZExpc3QuY29uZGl0aW9uc1tpXS5yZXN0cmljdGlvbiA9PSBcIkdUXCIpIHtcclxuICAgICAgICBpZiAoY29uZExpc3QuY29uZGl0aW9uc1tpXS5pc1VzZXIgIT0gdHJ1ZSkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBpdGVtW2NvbmRMaXN0LmNvbmRpdGlvbnNbaV0ucHJvcGVydHldID4gY29uZExpc3QuY29uZGl0aW9uc1tpXS52YWx1ZVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgaXRlbVtjb25kTGlzdC5jb25kaXRpb25zW2ldLnByb3BlcnR5XSA+IHRoaXMuVXNlckFjY2Vzc1tcIlVzZXJOYW1lXCJdXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoY29uZExpc3QuY29uZGl0aW9uc1tpXS5yZXN0cmljdGlvbiA9PSBcIkdURVwiKSB7XHJcbiAgICAgICAgaWYgKGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0uaXNVc2VyICE9IHRydWUpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgaXRlbVtjb25kTGlzdC5jb25kaXRpb25zW2ldLnByb3BlcnR5XSA+PVxyXG4gICAgICAgICAgICBjb25kTGlzdC5jb25kaXRpb25zW2ldLnZhbHVlXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBpdGVtW2NvbmRMaXN0LmNvbmRpdGlvbnNbaV0ucHJvcGVydHldID49IHRoaXMuVXNlckFjY2Vzc1tcIlVzZXJOYW1lXCJdXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoY29uZExpc3QuY29uZGl0aW9uc1tpXS5yZXN0cmljdGlvbiA9PSBcIkxUXCIpIHtcclxuICAgICAgICBpZiAoY29uZExpc3QuY29uZGl0aW9uc1tpXS5pc1VzZXIgIT0gdHJ1ZSkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBpdGVtW2NvbmRMaXN0LmNvbmRpdGlvbnNbaV0ucHJvcGVydHldIDwgY29uZExpc3QuY29uZGl0aW9uc1tpXS52YWx1ZVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgaXRlbVtjb25kTGlzdC5jb25kaXRpb25zW2ldLnByb3BlcnR5XSA8IHRoaXMuVXNlckFjY2Vzc1tcIlVzZXJOYW1lXCJdXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoY29uZExpc3QuY29uZGl0aW9uc1tpXS5yZXN0cmljdGlvbiA9PSBcIkxURVwiKSB7XHJcbiAgICAgICAgaWYgKGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0uaXNVc2VyICE9IHRydWUpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgaXRlbVtjb25kTGlzdC5jb25kaXRpb25zW2ldLnByb3BlcnR5XSA8PVxyXG4gICAgICAgICAgICBjb25kTGlzdC5jb25kaXRpb25zW2ldLnZhbHVlXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBpdGVtW2NvbmRMaXN0LmNvbmRpdGlvbnNbaV0ucHJvcGVydHldIDw9IHRoaXMuVXNlckFjY2Vzc1tcIlVzZXJOYW1lXCJdXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoY29uZExpc3QuY29uZGl0aW9uc1tpXS5yZXN0cmljdGlvbiA9PSBcIklOXCIpIHtcclxuICAgICAgICBpZiAoY29uZExpc3QuY29uZGl0aW9uc1tpXS5pc1VzZXIgIT0gdHJ1ZSkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBjb25kTGlzdC5jb25kaXRpb25zW2ldLnZhbHVlLmZpbmRJbmRleChcclxuICAgICAgICAgICAgICAoeCkgPT4geCA9PSBpdGVtW2NvbmRMaXN0LmNvbmRpdGlvbnNbaV0ucHJvcGVydHldXHJcbiAgICAgICAgICAgICkgPj0gMFxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgY29uZExpc3QuY29uZGl0aW9uc1tpXS52YWx1ZS5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgKHgpID0+IHggPT0gdGhpcy5Vc2VyQWNjZXNzW1wiVXNlck5hbWVcIl1cclxuICAgICAgICAgICAgKSA+PSAwXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoY29uZExpc3QuY29uZGl0aW9uc1tpXS5yZXN0cmljdGlvbiA9PSBcIk5JTlwiKSB7XHJcbiAgICAgICAgaWYgKGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0uaXNVc2VyICE9IHRydWUpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgY29uZExpc3QuY29uZGl0aW9uc1tpXS52YWx1ZS5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgKHgpID0+IHggPT0gaXRlbVtjb25kTGlzdC5jb25kaXRpb25zW2ldLnByb3BlcnR5XVxyXG4gICAgICAgICAgICApID09IC0xXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBjb25kTGlzdC5jb25kaXRpb25zW2ldLnZhbHVlLmZpbmRJbmRleChcclxuICAgICAgICAgICAgICAoeCkgPT4geCA9PSB0aGlzLlVzZXJBY2Nlc3NbXCJVc2VyTmFtZVwiXVxyXG4gICAgICAgICAgICApID09IC0xXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjb25kaXRpb247XHJcbiAgfVxyXG59XHJcbiIsIjwhLS0gRE8gTk9UIEJFQVVUSUZZIC8gUFJFVFRJRlkgVEhJUyBGSUxFIC0gd2lsbCBjYXVzZSB0aGUgbGFiZWwgY2Fubm90IGJlIGhpZ2hsaWdodGVkL3NlbGVjdGVkIGZvciBjb3B5IC0tPlxyXG48c2VjdGlvbiBpZD1cImhvcml6b250YWwtZm9ybS1sYXlvdXRzXCI+XHJcblx0PGRpdiBjbGFzcz1cInJvdyB0ZXh0LWxlZnRcIj5cclxuXHRcdDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuXHRcdFx0PGRpdiBbbmdDbGFzc109XCJJc0NhcmQgPyAnY2FyZCcgOiAnJ1wiICpuZ0lmPVwiaXNSZWFkeVwiPlxyXG5cdFx0XHRcdDwhLS0gPGRpdiBjbGFzcz1cInBsLTMgbWItMiBtdC0yXCIgKm5nSWY9XCJ2aWV3TGlzdD8udGl0bGUgIT0gJydcIj5cclxuXHRcdFx0XHRcdDxoNCBjbGFzcz1cImNhcmQtdGl0bGUgdWNTZWFyY2gtdGl0bGVcIiBpZD1cImhvcnotbGF5b3V0LWNvbG9yZWQtY29udHJvbHNcIiB0cmFuc2xhdGU+e3t2aWV3TGlzdC50aXRsZX19PC9oND5cclxuXHRcdFx0XHQ8L2Rpdj4gLS0+XHJcblx0XHRcdFx0PGRpdiBjbGFzcz1cImNhcmQtYm9keVwiICpuZ0Zvcj1cImxldCBzcyBvZiB2aWV3TGlzdD8uc3Vic2VjdGlvbjtsZXQgaSA9IGluZGV4O1wiPlxyXG5cdFx0XHRcdFx0PGRpdj5cclxuXHRcdFx0XHRcdFx0PGxpYi11Y1N1YnNlY3Rpb24gKm5nSWY9XCJzcy5zdWJzZWN0aW9uICE9ICcnXCIgW2lkXT1cInNzLnN1YlNlY3Rpb25JZCArICdpZCdcIiBbdGl0bGVdPVwic3Muc3ViU2VjdGlvblRpdGxlXCJcclxuXHRcdFx0XHRcdFx0XHRbcGFuZWxdPVwic3Muc3ViU2VjdGlvbklkXCIgW2xlZ2FjeV09XCJmYWxzZVwiIChjb2xsYXBzZSk9XCJvbkNvbGxhcHNlKCRldmVudClcIj5cclxuXHRcdFx0XHRcdFx0PC9saWItdWNTdWJzZWN0aW9uPlxyXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1ib2R5IGJvcmRlci10b3AgYm9yZGVyLWJvdHRvbVwiIFtpZF09J3NzLnN1YlNlY3Rpb25JZCcgWyhuZ2JDb2xsYXBzZSldPVwiaXNDb2xsYXBzZWRcIj5cclxuXHRcdFx0XHRcdCAgPGRpdiBjbGFzcz1cInAtM1wiPlxyXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PGRpdiAqbmdGb3I9XCJsZXQgbWkgb2Ygc3M/Lm1haW5JbmZvXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0W25nQ2xhc3NdPVwieyAnY29sLXh4bC0yIGNvbC14bC0zIGNvbC1sZy00IGNvbC1tZC02IGNvbC14cy0xMiBweS0yJzogbWkuaXNIaWRlID09IHVuZGVmaW5lZCB8fCAhbWkuaXNIaWRlIHx8ICh2aWV3SW5mb09iakxpc3RbaV1bbWkucHJvcGVydHldICE9ICcnICYmIHZpZXdJbmZvT2JqTGlzdFtpXVttaS5wcm9wZXJ0eV0gIT0gbnVsbCl9XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Km5nSWY9XCJtaS5pc0hpZGUgPT0gdW5kZWZpbmVkIHx8ICFtaS5pc0hpZGUgfHwgKHZpZXdJbmZvT2JqTGlzdFtpXVttaS5wcm9wZXJ0eV0gIT0gJycgJiYgdmlld0luZm9PYmpMaXN0W2ldW21pLnByb3BlcnR5XSAhPSBudWxsKVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIiAqbmdJZj1cIm1pLnR5cGUgIT0gJ3N3aXRjaCdcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwibGFiZWwtY29udHJvbCBsYWJlbC1maWVsZFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W25nQ2xhc3NdPVwibWkuY3VzdG9tQ2xhc3NMYWJlbCAhPSB1bmRlZmluZWQgPyBtaS5jdXN0b21DbGFzc0xhYmVsIDogJydcIiB0cmFuc2xhdGU+e3ttaS5sYWJlbH19PC9sYWJlbD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiICpuZ0lmPVwibWkudHlwZSA9PSAnc3dpdGNoJ1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2ICpuZ0Zvcj1cImxldCBjYXNlIG9mIG1pPy5jYXNlXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiAqbmdJZj1cInN3aXRjaENhc2Uodmlld0luZm9PYmpMaXN0W2ldLGNhc2UpXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgY2xhc3M9XCJsYWJlbC1jb250cm9sIGxhYmVsLWZpZWxkXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W25nQ2xhc3NdPVwibWkuY3VzdG9tQ2xhc3NMYWJlbCAhPSB1bmRlZmluZWQgPyBtaS5jdXN0b21DbGFzc0xhYmVsIDogJydcIiB0cmFuc2xhdGU+e3tjYXNlLnJlc3VsdC5sYWJlbH19PC9sYWJlbD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgKm5nSWY9XCJ2aWV3SW5mb09iakxpc3RbaV0gIT0gdW5kZWZpbmVkXCIgY2xhc3M9XCJjb2wtbWQtMTJcIiBbbmdDbGFzc109XCJ7ICd0ZXh0LWxlZnQnOiBtaS5wb3NpdGlvbiA9PSAnbGVmdCcsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICd0ZXh0LXJpZ2h0JzogbWkucG9zaXRpb24gPT0gJ3JpZ2h0JywgJ3RleHQtY2VudGVyJzogbWkucG9zaXRpb24gPT0gJ2NlbnRlcicgfVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCpuZ0lmPVwiKG1pLnR5cGUgPT0gJ2Jvb2xlYW4nICYmIHZpZXdJbmZvT2JqTGlzdFtpXVttaS5wcm9wZXJ0eV0gIT0gbnVsbCkgfHwgKHZpZXdJbmZvT2JqTGlzdFtpXVttaS5wcm9wZXJ0eV0gIT0gJycgJiYgdmlld0luZm9PYmpMaXN0W2ldW21pLnByb3BlcnR5XSAhPSBudWxsKSB8fCBtaS50eXBlID09ICdzd2l0Y2gnIHx8IG1pLnR5cGUgPT0nY29uY2F0JzsgdGhlbiBub25FbXB0eUxhYmVsIGVsc2UgZW1wdHlMYWJlbFwiPjwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlICNlbXB0eUxhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCAqbmdJZj1cIm1pLnR5cGUgPT0gJ2JsYW5rJ1wiPjwvbGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsICpuZ0lmPVwibWkudHlwZSAhPSAnYmxhbmsnXCIgY2xhc3M9XCJsYWJlbC1jb250cm9sIGxhYmVsLWZpZWxkXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtuZ0NsYXNzXT1cIm1pLmN1c3RvbUNsYXNzUHJvcGVydHkgIT0gdW5kZWZpbmVkID8gbWkuY3VzdG9tQ2xhc3NQcm9wZXJ0eSA6ICcnXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRyYW5zbGF0ZT4tPC9sYWJlbD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlICNub25FbXB0eUxhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuICpuZ0lmPVwibWkudHlwZSA9PSAndGV4dCdcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQqbmdJZj1cInZpZXdJbmZvT2JqTGlzdFtpXVttaS5wcm9wZXJ0eV0gIT0gJycgJiYgdmlld0luZm9PYmpMaXN0W2ldW21pLnByb3BlcnR5XSAhPSBudWxsXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJsYWJlbC1jb250cm9sIGJyZWFrd29yZCBpdGVtLWZpZWxkXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W25nQ2xhc3NdPVwibWkuY3VzdG9tQ2xhc3NQcm9wZXJ0eSAhPSB1bmRlZmluZWQgPyBtaS5jdXN0b21DbGFzc1Byb3BlcnR5IDogJydcIiB0cmFuc2xhdGU+e3sgdmlld0luZm9PYmpMaXN0W2ldW21pLnByb3BlcnR5XSB9fTwvbGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Km5nSWY9XCJ2aWV3SW5mb09iakxpc3RbaV1bbWkucHJvcGVydHldID09ICcnIHx8IHZpZXdJbmZvT2JqTGlzdFtpXVttaS5wcm9wZXJ0eV0gPT0gbnVsbFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwibGFiZWwtY29udHJvbCBsYWJlbC1maWVsZFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtuZ0NsYXNzXT1cIm1pLmN1c3RvbUNsYXNzUHJvcGVydHkgIT0gdW5kZWZpbmVkID8gbWkuY3VzdG9tQ2xhc3NQcm9wZXJ0eSA6ICcnXCIgdHJhbnNsYXRlPi1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvbGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCAqbmdJZj1cIm1pLnR5cGUgPT0gJ2N1cnJlbmN5J1wiIGNsYXNzPVwibGFiZWwtY29udHJvbCBpdGVtLWZpZWxkXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtuZ0NsYXNzXT1cIm1pLmN1c3RvbUNsYXNzUHJvcGVydHkgIT0gdW5kZWZpbmVkID8gbWkuY3VzdG9tQ2xhc3NQcm9wZXJ0eSA6ICcnXCIgdHJhbnNsYXRlPnt7IHZpZXdJbmZvT2JqTGlzdFtpXVttaS5wcm9wZXJ0eV0gfCBudW1iZXI6IG1pPy5wcmVjaXNpb24gPyBtaT8ucHJlY2lzaW9uIDogJzAuMicgOidlbi1VUycgfX0gPHNwYW4gKm5nSWY9XCJtaT8uSXNQcmNudFwiPiZuYnNwOyU8L3NwYW4+IDwvbGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsICpuZ0lmPVwibWkudHlwZSA9PSAnZGF0ZSdcIiBjbGFzcz1cImxhYmVsLWNvbnRyb2wgaXRlbS1maWVsZFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbbmdDbGFzc109XCJtaS5jdXN0b21DbGFzc1Byb3BlcnR5ICE9IHVuZGVmaW5lZCA/IG1pLmN1c3RvbUNsYXNzUHJvcGVydHkgOiAnJ1wiIHRyYW5zbGF0ZT57eyB2aWV3SW5mb09iakxpc3RbaV1bbWkucHJvcGVydHldIHwgZGF0ZTogKG1pPy5kYXRlRm9ybWF0KSA/IG1pPy5kYXRlRm9ybWF0IDogJ2RkLU1NTS15eXl5JyB9fSA8L2xhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCAqbmdJZj1cIm1pLnR5cGUgPT0gJ2xpbmsnXCIgY2xhc3M9XCJsYWJlbC1jb250cm9sIGl0ZW0tZmllbGRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W25nQ2xhc3NdPVwibWkuY3VzdG9tQ2xhc3NQcm9wZXJ0eSAhPSB1bmRlZmluZWQgPyBtaS5jdXN0b21DbGFzc1Byb3BlcnR5IDogJydcIiB0cmFuc2xhdGU+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8YSAqbmdJZj1cIiFtaT8uaXNGdWxscGF0aFwiIFtyb3V0ZXJMaW5rXT1cImdlblJvdXRlckxpbmsobWkucGF0aClcIiBbdGFyZ2V0XT1cIm1pLnRhcmdldFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtxdWVyeVBhcmFtc109XCJnZW5BY3Rpb24odmlld0luZm9PYmpMaXN0W2ldLCBtaS5wYXJhbSlcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gKm5nSWY9XCIobWkuaXNDdXJyZW5jeSAhPSB1bmRlZmluZWQgJiYgbWkuaXNDdXJyZW5jeSlcIj57eyB2aWV3SW5mb09iakxpc3RbaV1bbWkucHJvcGVydHldIHwgbnVtYmVyOicuMic6J2VuLVVTJyB9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gKm5nSWY9XCIobWkuaXNDdXJyZW5jeSA9PSB1bmRlZmluZWQgfHwgIW1pLmlzQ3VycmVuY3kpXCI+e3sgdmlld0luZm9PYmpMaXN0W2ldW21pLnByb3BlcnR5XSB9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvYT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxhICpuZ0lmPVwibWk/LmlzRnVsbHBhdGhcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdChjbGljayk9XCJyZWRpcmVjdEZ1bGxQYXRoKG1pLmZ1bGxwYXRoLCBnZW5BY3Rpb24odmlld0luZm9PYmpMaXN0W2ldLCBtaS5wYXJhbSksIG1pLnRhcmdldCwgbWkpXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuICpuZ0lmPVwiKG1pLmlzQ3VycmVuY3kgIT0gdW5kZWZpbmVkICYmIG1pLmlzQ3VycmVuY3kpXCI+e3sgdmlld0luZm9PYmpMaXN0W2ldW21pLnByb3BlcnR5XSB8IG51bWJlcjonLjInOidlbi1VUycgfX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuICpuZ0lmPVwiKG1pLmlzQ3VycmVuY3kgPT0gdW5kZWZpbmVkIHx8ICFtaS5pc0N1cnJlbmN5KVwiPnt7IHZpZXdJbmZvT2JqTGlzdFtpXVttaS5wcm9wZXJ0eV0gfX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2E+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9sYWJlbD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgKm5nSWY9XCJtaS50eXBlID09ICdjYWxsYmFjaydcIiBjbGFzcz1cImxhYmVsLWNvbnRyb2wgbGFiZWwtZmllbGRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W25nQ2xhc3NdPVwibWkuY3VzdG9tQ2xhc3NQcm9wZXJ0eSAhPSB1bmRlZmluZWQgPyBtaS5jdXN0b21DbGFzc1Byb3BlcnR5IDogJydcIiB0cmFuc2xhdGU+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIChjbGljayk9XCJjYWxsYmFja0Z1bmN0aW9uKHZpZXdJbmZvT2JqTGlzdFtpXSwgbWkua2V5KVwiPnt7IHZpZXdJbmZvT2JqTGlzdFtpXVttaS5wcm9wZXJ0eV0gfX08L2E+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9sYWJlbD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dGFyZWEgKm5nSWY9XCJtaS50eXBlID09ICd0ZXh0YXJlYSdcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJlYWRvbmx5XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbbmdDbGFzc109XCJtaS5jdXN0b21DbGFzc1Byb3BlcnR5ICE9IHVuZGVmaW5lZCA/IG1pLmN1c3RvbUNsYXNzUHJvcGVydHkgOiAnJ1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0cmFuc2xhdGU+e3sgdmlld0luZm9PYmpMaXN0W2ldW21pLnByb3BlcnR5XSB9fTwvdGV4dGFyZWE+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gKm5nSWY9XCJtaS50eXBlID09ICdib29sZWFuJ1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbbmdDbGFzc109XCJtaS5jdXN0b21DbGFzc1Byb3BlcnR5ICE9IHVuZGVmaW5lZCA/IG1pLmN1c3RvbUNsYXNzUHJvcGVydHkgOiAnJ1wiIHRyYW5zbGF0ZT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cImxhYmVsLWNvbnRyb2wgaXRlbS1maWVsZFwiICpuZ0lmPVwidmlld0luZm9PYmpMaXN0W2ldW21pLnByb3BlcnR5XSA9PSB0cnVlXCI+WWVzPC9sYWJlbD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cImxhYmVsLWNvbnRyb2wgaXRlbS1maWVsZFwiICpuZ0lmPVwidmlld0luZm9PYmpMaXN0W2ldW21pLnByb3BlcnR5XSA9PSBmYWxzZVwiPk5vPC9sYWJlbD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwhLS0gPGxhYmVsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICpuZ0lmPVwidmlld0luZm9PYmpMaXN0W2ldW21pLnByb3BlcnR5XSA9PSAnJyB8fCB2aWV3SW5mb09iakxpc3RbaV1bbWkucHJvcGVydHldID09IG51bGxcIj4tPC9sYWJlbD4gLS0+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuICpuZ0lmPVwibWkudHlwZSA9PSAnY29uY2F0J1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwibGFiZWwtY29udHJvbCBicmVha3dvcmQgaXRlbS1maWVsZFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtuZ0NsYXNzXT1cIm1pLmN1c3RvbUNsYXNzUHJvcGVydHkgIT0gdW5kZWZpbmVkID8gbWkuY3VzdG9tQ2xhc3NQcm9wZXJ0eSA6ICcnXCIgdHJhbnNsYXRlPnt7IG1pLmNvbmNhdCB9fTwvbGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuICpuZ0lmPVwibWkudHlwZSA9PSAnc3dpdGNoJ1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gKm5nRm9yPVwibGV0IGNzIG9mIG1pPy5jYXNlXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuICpuZ0lmPVwic3dpdGNoQ2FzZSh2aWV3SW5mb09iakxpc3RbaV0sY3MpICYmICFjcy5IaWRkZW5cIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImxhYmVsLWNvbnRyb2wgYnJlYWt3b3JkIGl0ZW0tZmllbGRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W25nQ2xhc3NdPVwibWkuY3VzdG9tQ2xhc3NQcm9wZXJ0eSAhPSB1bmRlZmluZWQgPyBtaS5jdXN0b21DbGFzc1Byb3BlcnR5IDogJydcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHJhbnNsYXRlICpuZ0lmPVwiY3MucmVzdWx0LnR5cGUgPT0gJ3RleHQnXCI+e3sgdmlld0luZm9PYmpMaXN0W2ldW2NzLnJlc3VsdC5wcm9wZXJ0eV0gfX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gKm5nSWY9XCJjcy5yZXN1bHQudHlwZSA9PSAnZGVjaW1hbCdcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cImxhYmVsLWNvbnRyb2wgYnJlYWt3b3JkIGl0ZW0tZmllbGRcIiBbbmdDbGFzc109XCJtaS5jdXN0b21DbGFzc1Byb3BlcnR5ICE9IHVuZGVmaW5lZCA/IG1pLmN1c3RvbUNsYXNzUHJvcGVydHkgOiAnJ1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRyYW5zbGF0ZT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuPnt7IHZpZXdJbmZvT2JqTGlzdFtpXVtjcy5yZXN1bHQucHJvcGVydHldIHwgbnVtYmVyOiBjcy5yZXN1bHQucHJlY2lzaW9uID8gY3MucmVzdWx0LnByZWNpc2lvbiA6ICcwLjInIDonZW4tVVMnIH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gKm5nSWY9XCJjcy5yZXN1bHQuSXNQcmNudFwiPiZuYnNwOyU8L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2xhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiAqbmdJZj1cImNzLnJlc3VsdC50eXBlID09ICdkYXRlJ1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwibGFiZWwtY29udHJvbCBicmVha3dvcmQgaXRlbS1maWVsZFwiIFtuZ0NsYXNzXT1cIm1pLmN1c3RvbUNsYXNzUHJvcGVydHkgIT0gdW5kZWZpbmVkID8gbWkuY3VzdG9tQ2xhc3NQcm9wZXJ0eSA6ICcnXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHJhbnNsYXRlPnt7IHZpZXdJbmZvT2JqTGlzdFtpXVtjcy5yZXN1bHQucHJvcGVydHldIHwgZGF0ZTogJ2RkLU1NTS15eXl5JyB9fTwvbGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuICpuZ0lmPVwiY3MucmVzdWx0LnR5cGUgPT0gJ2xpbmsnXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtuZ0NsYXNzXT1cIm1pLmN1c3RvbUNsYXNzUHJvcGVydHkgIT0gdW5kZWZpbmVkID8gbWkuY3VzdG9tQ2xhc3NQcm9wZXJ0eSA6ICcnXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwibGFiZWwtY29udHJvbCBpdGVtLWZpZWxkXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRyYW5zbGF0ZT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxhIFt0YXJnZXRdPVwiY3MucmVzdWx0LnRhcmdldFwiIFtyb3V0ZXJMaW5rXT1cImdlblJvdXRlckxpbmsoY3MucmVzdWx0LnBhdGgpXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W3F1ZXJ5UGFyYW1zXT1cImdlbkFjdGlvbih2aWV3SW5mb09iakxpc3RbaV0sY3MucmVzdWx0LnBhcmFtKVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiAqbmdJZj1cIihtaS5pc0N1cnJlbmN5ICE9IHVuZGVmaW5lZCAmJiBtaS5pc0N1cnJlbmN5KVwiPnt7IHZpZXdJbmZvT2JqTGlzdFtpXVtjcy5yZXN1bHQucHJvcGVydHldIHwgbnVtYmVyOicuMic6J2VuLVVTJyB9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gKm5nSWY9XCIobWkuaXNDdXJyZW5jeSA9PSB1bmRlZmluZWQgfHwgIW1pLmlzQ3VycmVuY3kpXCI+e3sgdmlld0luZm9PYmpMaXN0W2ldW2NzLnJlc3VsdC5wcm9wZXJ0eV0gfX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2E+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuICpuZ0lmPVwiY3MucmVzdWx0LnR5cGUgPT0gJ2Jvb2xlYW4nXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgY2xhc3M9XCJsYWJlbC1jb250cm9sIGJyZWFrd29yZCBpdGVtLWZpZWxkXCIgW25nQ2xhc3NdPVwibWkuY3VzdG9tQ2xhc3NQcm9wZXJ0eSAhPSB1bmRlZmluZWQgPyBtaS5jdXN0b21DbGFzc1Byb3BlcnR5IDogJydcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0cmFuc2xhdGU+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuICpuZ0lmPVwidmlld0luZm9PYmpMaXN0W2ldW2NzLnJlc3VsdC5wcm9wZXJ0eV0gPT0gJ3RydWUnIHx8IHZpZXdJbmZvT2JqTGlzdFtpXVtjcy5yZXN1bHQucHJvcGVydHldID09IHRydWVcIj5ZZXM8L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuICpuZ0lmPVwidmlld0luZm9PYmpMaXN0W2ldW2NzLnJlc3VsdC5wcm9wZXJ0eV0gPT0gJ2ZhbHNlJyB8fCB2aWV3SW5mb09iakxpc3RbaV1bY3MucmVzdWx0LnByb3BlcnR5XSA9PSBmYWxzZVwiPk5vPC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9sYWJlbD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gKm5nSWY9XCJjcy5yZXN1bHQudHlwZSA9PSAnY29uY2F0J1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwibGFiZWwtY29udHJvbCBicmVha3dvcmQgaXRlbS1maWVsZFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtuZ0NsYXNzXT1cIm1pLmN1c3RvbUNsYXNzUHJvcGVydHkgIT0gdW5kZWZpbmVkID8gbWkuY3VzdG9tQ2xhc3NQcm9wZXJ0eSA6ICcnXCIgdHJhbnNsYXRlPnt7IGNzLnJlc3VsdC5jb25jYXQgfX08L2xhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiAqbmdJZj1cImNzLnJlc3VsdC50eXBlID09ICdjYWxsYmFjaydcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCpuZ0lmPVwiY3MucmVzdWx0LmlzVGV4dCAhPSB1bmRlZmluZWQgJiYgY3MucmVzdWx0LmlzVGV4dDsgdGhlbiB0ZXh0Q2FsbGJhY2sgZWxzZSBpY29uQ2FsbGJhY2tcIj48L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgI3RleHRDYWxsYmFjaz5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGEgY2xhc3M9XCJhLWxpbmtcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIChjbGljayk9XCJjYWxsYmFja0Z1bmN0aW9uKHZpZXdJbmZvT2JqTGlzdFtpXSwgY3MucmVzdWx0LmtleSlcIj57eyB2aWV3SW5mb09iakxpc3RbaV1bY3MucmVzdWx0LnByb3BlcnR5XSB9fTwvYT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSAjaWNvbkNhbGxiYWNrPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8YSBbbmdDbGFzc109XCJbY3MucmVzdWx0LnRvb2x0aXAgIT0gdW5kZWZpbmVkICYmIGNzLnJlc3VsdC50b29sdGlwICE9ICcnID8gJ3Rvb2x0aXBzJyA6ICcnLCBjcy5yZXN1bHQuYW5jaG9yID09IHVuZGVmaW5lZCB8fCBjcy5yZXN1bHQuYW5jaG9yID09ICcnID8gJ2EtbGluayBwLTAnIDogY3MucmVzdWx0LmFuY2hvcl1cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cImNhbGxiYWNrRnVuY3Rpb24odmlld0luZm9PYmpMaXN0W2ldLCBjcy5yZXN1bHQua2V5KVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGkgY2xhc3M9XCJmb250LW1lZGl1bS0zIG1yLTJcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbbmdDbGFzc109XCIgY3MucmVzdWx0Lmljb24gPT0gdW5kZWZpbmVkIHx8IGNzLnJlc3VsdC5pY29uID09ICcnID8gJ2Z0LWVkaXQtMicgOiBjcy5yZXN1bHQuaWNvbiBcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvaT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuICpuZ0lmPVwiY3MucmVzdWx0LnRvb2x0aXAgIT0gdW5kZWZpbmVkICYmIGNzLnJlc3VsdC50b29sdGlwICE9ICcnXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W25nQ2xhc3NdPVwiY3MucmVzdWx0LnRvb2x0aXAgIT0gdW5kZWZpbmVkICYmIGNzLnJlc3VsdC50b29sdGlwICE9ICcnID8gJ3Rvb2x0aXBzdGV4dCcgOiAnJ1wiPnt7IGNzLnJlc3VsdC50b29sdGlwIH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvYT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvbmctdGVtcGxhdGU+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cclxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZ3JpZC12aWV3IHBiLTNcIiAqbmdJZj1cImdyaWRWaWV3T2JqLmdyaWRWaWV3cy5sZW5ndGggPiAwXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8ZGl2ICpuZ0Zvcj1cImxldCBncmlkVmlldyBvZiBpbnB1dEdyaWRWaWV3T2JqczsgbGV0IGkgPSBpbmRleFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8bGliLXVjU3Vic2VjdGlvblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCpuZ0lmPVwiZ3JpZFZpZXdPYmouZ3JpZFZpZXdzW2ldLnN1YnNlY3Rpb24gJiYgZ3JpZFZpZXdPYmouZ3JpZFZpZXdzW2ldLnN1YnNlY3Rpb24gIT09ICcnXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRbaWRdPVwiJ2dyaWQtc3Vic2VjdGlvbi1pZCcraVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0W3RpdGxlXT1cImdyaWRWaWV3T2JqLmdyaWRWaWV3c1tpXS5zdWJzZWN0aW9uXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRbcGFuZWxdPVwiJ2dyaWQtc3Vic2VjdGlvbi1wYW5lbC0nK2lcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC9saWItdWNTdWJzZWN0aW9uPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1ib2R5XCIgW2lkXT1cIidncmlkLXN1YnNlY3Rpb24tcGFuZWwtJytpXCI+XHJcbjwhLS0gICAgICAgICAgICAgICAgICAgIDxsaWItdWNncmlkdmlldyBbZ3JpZElucHV0XT1cImdyaWRWaWV3XCIgKGNhbGxiYWNrKT1cImdyaWRFdmVudCgkZXZlbnQpXCIgKGlzUmVmcmVzaCk9XCJHZXRHcmlkVmlld0RhdGEoZ3JpZFZpZXdPYmouZ3JpZFZpZXdzW2ldLCBncmlkVmlldylcIj48L2xpYi11Y2dyaWR2aWV3Pi0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxsaWItdWN0YWJsZSBbZ3JpZE9ial09XCJncmlkVmlld1wiIFtzdGFuZGFsb25lXT1cImZhbHNlXCIgKGNhbGxiYWNrKT1cImdyaWRFdmVudCgkZXZlbnQpXCIgW2NsYXNzUGFkZGluZ109XCIncHgtMCdcIj48L2xpYi11Y3RhYmxlPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdDwvZGl2PlxyXG5cdDwvZGl2PlxyXG48L3NlY3Rpb24+XHJcbiJdfQ==
616
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWN2aWV3Z2VuZXJpYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy91Y3ZpZXdnZW5lcmljL3NyYy9saWIvdWN2aWV3Z2VuZXJpYy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy91Y3ZpZXdnZW5lcmljL3NyYy9saWIvdWN2aWV3Z2VuZXJpYy1sZWdhY3kuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVsRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzNDLE9BQU8sS0FBSyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7QUFPbEQsTUFBTSxPQUFPLHNCQUFzQjtJQWlCakMsWUFDVSxLQUFxQixFQUNyQixJQUFnQixFQUNoQixnQkFBa0MsRUFDbEMsYUFBNEIsRUFDNUIsU0FBMkI7UUFKM0IsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtC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Q0wsSUFDRSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQ3BDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FDeEMsSUFBSSxDQUFDLENBQUMsRUFDUDt3QkFDQSxTQUFTLEdBQUcsSUFBSSxDQUFDO3FCQUNsQjt5QkFBTTt3QkFDTCxTQUFTLEdBQUcsS0FBSyxDQUFDO3dCQUNsQixNQUFNO3FCQUNQO2lCQUNGO2FBQ0Y7U0FDRjtRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7O3VJQW50QlUsc0JBQXNCOzJIQUF0QixzQkFBc0IsMExDakJuQyx1cGVBeU1BOzRGRHhMYSxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0UsbUJBQW1CO3dOQUtwQixjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNJLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBpc0Rldk1vZGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgVWNWaWV3R2VuZXJpY09iaiB9IGZyb20gXCIuL21vZGVsL3VjLXZpZXctZ2VuZXJpYy1vYmoubW9kZWxcIjtcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XHJcbmltcG9ydCB7IENvb2tpZVNlcnZpY2UgfSBmcm9tIFwibmd4LWNvb2tpZVwiO1xyXG5pbXBvcnQgKiBhcyBDcnlwdG9KUyBmcm9tIFwiY3J5cHRvLWpzXCI7XHJcbmltcG9ydCB7IEdyaWRWaWV3T2JqIH0gZnJvbSBcIi4vbW9kZWwvZ3JpZC12aWV3LW9iai5tb2RlbFwiO1xyXG5pbXBvcnQgeyBJbnB1dEdyaWRPYmogfSBmcm9tIFwiLi9tb2RlbC9pbnB1dC1ncmlkLW9iai5tb2RlbFwiO1xyXG5pbXBvcnQgeyBOZ3hSb3V0ZXJTZXJ2aWNlIH0gZnJvbSAnQGFkaW5zL2ZlLWNvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwibGliLXVjdmlld2dlbmVyaWNcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3Vjdmlld2dlbmVyaWMtbGVnYWN5LmNvbXBvbmVudC5odG1sXCIsXHJcbiAgLy8gc3R5bGVVcmxzOiBbJy4vdWN2aWV3Z2VuZXJpYy5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVWN2aWV3Z2VuZXJpY0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgdmlld0dlbmVyaWNPYmo6IFVjVmlld0dlbmVyaWNPYmogPSBuZXcgVWNWaWV3R2VuZXJpY09iaigpO1xyXG4gIEBJbnB1dCgpIGdyaWRWaWV3T2JqOiBHcmlkVmlld09iaiA9IG5ldyBHcmlkVmlld09iaigpO1xyXG4gIEBJbnB1dCgpIHJlZnJlc2g6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICBAT3V0cHV0KCkgY2FsbGJhY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBVc2VyQWNjZXNzOiBhbnkgPSBKU09OLnBhcnNlKFxyXG4gICAgdGhpcy5HZXRDb29raWUodGhpcy5jb29raWVTZXJ2aWNlLCBcIlVzZXJBY2Nlc3NcIilcclxuICApO1xyXG4gIGlucHV0R3JpZFZpZXdPYmpzOiBBcnJheTxJbnB1dEdyaWRPYmo+ID0gbmV3IEFycmF5PElucHV0R3JpZE9iaj4oKTtcclxuICB2aWV3TGlzdDogYW55ID0gXCJcIjtcclxuICBnZXRMaXN0OiBhbnk7XHJcbiAgdmlld0luZm9PYmpMaXN0OiBhbnk7XHJcbiAgaXNSZWFkeTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIElzQ2FyZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgaXNDb2xsYXBzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgY29va2llU2VydmljZTogQ29va2llU2VydmljZSxcclxuICAgIHByaXZhdGUgbmd4Um91dGVyOiBOZ3hSb3V0ZXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSgocGFyYW1zKSA9PiB7XHJcbiAgICAgIHRoaXMuZ2V0TGlzdCA9IHRoaXMubmd4Um91dGVyLmdldFF1ZXJ5UGFyYW1zKHBhcmFtcy5wYXJhbXMpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnNldERlZmF1bHRMYW5nKFwiZW5cIik7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudXNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwibGFuZ1wiKSB8fCBcImVuXCIpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICAvLyBFWFBFUklNRU5UQUwgQmFzZVZpZXcgQVBJXHJcbiAgICAvLyBUT0RPOiByZW1vdmUgYWZ0ZXIgc3RhYmxlXHJcbiAgICBpZiAodGhpcy52aWV3R2VuZXJpY09iai5FeHBlcmltZW50YWwgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnZpZXdHZW5lcmljT2JqLkV4cGVyaW1lbnRhbCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gRU5EIEVYUEVSSU1FTlRBTFxyXG5cclxuICAgIHRoaXMuaW5pdGlhdGVGb3JtKCk7XHJcbiAgICB0aGlzLkNoZWNrSXNDYXJkKCk7XHJcblxyXG4gICAgdGhpcy5yZWZyZXNoLnN1YnNjcmliZShpc1VwZGF0ZSA9PiB7XHJcbiAgICAgIGlmICghaXNVcGRhdGUpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFJlZnJlc2ggdmlldyBjb250ZW50XHJcbiAgICAgIHRoaXMuaW5pdGlhdGVGb3JtKCk7XHJcbiAgICAgIHRoaXMucmVmcmVzaC5lbWl0KGZhbHNlKTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBvbkNvbGxhcHNlKGV2KSB7XHJcbiAgICB0aGlzLmlzQ29sbGFwc2VkID0gISFldj8uaXNDb2xsYXBzZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIENoZWNrSXNDYXJkKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnZpZXdHZW5lcmljT2JqLklzQ2FyZCA9PSB1bmRlZmluZWQgfHxcclxuICAgICAgdGhpcy52aWV3R2VuZXJpY09iai5Jc0NhcmQgPT0gbnVsbFxyXG4gICAgKVxyXG4gICAgICByZXR1cm47XHJcbiAgICB0aGlzLklzQ2FyZCA9IHRoaXMudmlld0dlbmVyaWNPYmouSXNDYXJkO1xyXG4gIH1cclxuXHJcbiAgaW5pdGlhdGVGb3JtKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnZpZXdHZW5lcmljT2JqLmRhdGFJbnB1dCAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMudmlld0dlbmVyaWNPYmouZGF0YUlucHV0KS5sZW5ndGggIT09IDBcclxuICAgICkge1xyXG4gICAgICB0aGlzLnNldENvbmZpZ3VyYXRpb24oeyAuLi50aGlzLnZpZXdHZW5lcmljT2JqLmRhdGFJbnB1dCB9KTtcclxuICAgICAgdGhpcy5ncmlkVmlld09iai5ncmlkVmlld3MgPSB0aGlzLnZpZXdHZW5lcmljT2JqLmRhdGFJbnB1dC5zdWJzZWN0aW9uWzBdPy5ncmlkVmlld3MgfHwgW107XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUdyaWRWaWV3cygpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5nZXRKU09OKHRoaXMudmlld0dlbmVyaWNPYmoudmlld0lucHV0KS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgdGhpcy5zZXRDb25maWd1cmF0aW9uKGRhdGEpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmluaXRpYWxpemVHcmlkVmlld3MoKTtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpemVHcmlkVmlld3MoKSB7XHJcbiAgICBpZiAodGhpcy5ncmlkVmlld09iaiAmJiB0aGlzLmdyaWRWaWV3T2JqLmdyaWRWaWV3cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZ3JpZFZpZXdPYmouZ3JpZFZpZXdzLm1hcChhc3luYyAoZ3JpZFZpZXcpID0+IHtcclxuICAgICAgY29uc3QgaW5wdXRHcmlkT2JqID0gbmV3IElucHV0R3JpZE9iaigpO1xyXG4gICAgICBpbnB1dEdyaWRPYmouZGF0YUlucHV0ID0gZ3JpZFZpZXcudGFibGVJbnB1dDtcclxuICAgICAgaW5wdXRHcmlkT2JqLnJlc3VsdERhdGEgPSB7IERhdGE6IFtdIH07XHJcbiAgICAgIGlucHV0R3JpZE9iai5pc1N1YnNlY3Rpb24gPSBncmlkVmlldy5pc1N1YnNlY3Rpb24gfHwgZmFsc2U7XHJcbiAgICAgIGlucHV0R3JpZE9iai51c2VQYWdpbmF0aW9uID0gZ3JpZFZpZXcudXNlUGFnaW5hdGlvbiB8fCB0cnVlO1xyXG4gICAgICBpbnB1dEdyaWRPYmoudGl0bGUgPSBncmlkVmlldy50aXRsZSB8fCBcIlwiO1xyXG4gICAgICBhd2FpdCB0aGlzLkdldEdyaWRWaWV3RGF0YShncmlkVmlldy5nZXREYXRhLCBpbnB1dEdyaWRPYmopO1xyXG4gICAgICB0aGlzLmlucHV0R3JpZFZpZXdPYmpzLnB1c2goaW5wdXRHcmlkT2JqKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0RW52aXJvbm1lbnQoZW52aSkge1xyXG4gICAgY29uc3QgZmlsdGVyZWRFbnZpcyA9IHRoaXMudmlld0dlbmVyaWNPYmoubGlzdEVudmlyb25tZW50cy5maWx0ZXIoXHJcbiAgICAgICh2KSA9PiB2LmVudmlyb25tZW50ID09IGVudmlcclxuICAgICk7XHJcbiAgICByZXR1cm4gZmlsdGVyZWRFbnZpcy5sZW5ndGggPiAwID8gZmlsdGVyZWRFbnZpc1swXSA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBhc3luYyBHZXRHcmlkVmlld0RhdGEobWV0YTogYW55LCBpbnB1dEdyaWRPYmo6IElucHV0R3JpZE9iaikge1xyXG4gICAgbGV0IHRlbXBsTGlzdERhdGEgPSBbXTtcclxuICAgIGNvbnN0IGVudmlVcmwgPSBtZXRhLmVudmlyb25tZW50ICYmIHRoaXMuZ2V0RW52aXJvbm1lbnQobWV0YS5lbnZpcm9ubWVudCk7XHJcbiAgICBhd2FpdCB0aGlzLmh0dHBcclxuICAgICAgLnBvc3QoZW52aVVybCA/IGVudmlVcmwudXJsICsgbWV0YS5hcGlQYXRoIDogbWV0YS5hcGlQYXRoLCBtZXRhLnJlcU9iailcclxuICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIHRlbXBsTGlzdERhdGEgPSByZXNwb25zZVttZXRhLmN1c3RvbU9iak5hbWUgfHwgXCJSZXR1cm5PYmplY3RcIl07XHJcbiAgICAgICAgaW5wdXRHcmlkT2JqLmFwaVVybCA9IG1ldGEuYXBpUGF0aDtcclxuICAgICAgICBpbnB1dEdyaWRPYmoucmVzdWx0RGF0YVtcIkRhdGFcIl0gPSBuZXcgQXJyYXkoKTtcclxuICAgICAgICBpbnB1dEdyaWRPYmoucmVzdWx0RGF0YS5EYXRhID0gdGVtcGxMaXN0RGF0YTtcclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBncmlkRXZlbnQoZXYpIHtcclxuICAgIHRoaXMuY2FsbGJhY2tGdW5jdGlvbihldi5Sb3dPYmosIGV2LktleSk7XHJcbiAgfVxyXG5cclxuICBzZXRDb25maWd1cmF0aW9uKGRhdGEpIHtcclxuICAgIHRoaXMudmlld0xpc3QgPSBkYXRhO1xyXG4gICAgdGhpcy52aWV3SW5mb09iakxpc3QgPSBbXTtcclxuXHJcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbi5sZW5ndGg7IGorKykge1xyXG4gICAgICB0aGlzLnZpZXdJbmZvT2JqTGlzdC5wdXNoKGopO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ucXVlcnlzdHJpbmcgIT0gbnVsbCAmJlxyXG4gICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5xdWVyeXN0cmluZy5uYW1lICE9IFwiXCJcclxuICAgICAgKSB7XHJcbiAgICAgICAgbGV0IHF1ZXJ5T2JqOiBhbnk7XHJcbiAgICAgICAgaWYgKHRoaXMudmlld0dlbmVyaWNPYmoud2hlcmVWYWx1ZS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLnF1ZXJ5c3RyaW5nLndoZXJlUXVlcnkgPSAoPGFueT4oXHJcbiAgICAgICAgICAgIE9iamVjdFxyXG4gICAgICAgICAgKSkudmFsdWVzKHRoaXMuZ2V0TGlzdCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5xdWVyeXN0cmluZy53aGVyZVF1ZXJ5ID1cclxuICAgICAgICAgICAgdGhpcy52aWV3R2VuZXJpY09iai53aGVyZVZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvUGF0aCAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1BhdGggIT0gXCJcIlxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLnZpZXdHZW5lcmljT2JqLnZpZXdFbnZpcm9ubWVudCAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgICAgdGhpcy52aWV3R2VuZXJpY09iai52aWV3RW52aXJvbm1lbnQgIT0gXCJcIlxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5mdWxscGF0aCA9XHJcbiAgICAgICAgICAgICAgdGhpcy52aWV3R2VuZXJpY09iai52aWV3RW52aXJvbm1lbnQgK1xyXG4gICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1BhdGg7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0uZnVsbHBhdGggPVxyXG4gICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1VybDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLmZ1bGxwYXRoID1cclxuICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvVXJsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRVhQRVJJTUVOVEFMIEJhc2VWaWV3IEFQSVxyXG4gICAgICAgIC8vIFRPRE86IHJlbW92ZSBhZnRlciBzdGFibGVcclxuICAgICAgICBpZiAodGhpcy52aWV3R2VuZXJpY09iai5FeHBlcmltZW50YWwpIHtcclxuICAgICAgICAgIGNvbnN0IF9lbnZpcm9ubWVudFVybCA9IHRoaXMudmlld0dlbmVyaWNPYmoudmlld0Vudmlyb25tZW50LnN1YnN0cmluZygwLCB0aGlzLnZpZXdHZW5lcmljT2JqLnZpZXdFbnZpcm9ubWVudC5sZW5ndGgtMyk7XHJcbiAgICAgICAgICBjb25zdCBfcXJ5VmlldyA9IHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5xdWVyeXN0cmluZy5uYW1lO1xyXG4gICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLmZ1bGxwYXRoID0gYCR7X2Vudmlyb25tZW50VXJsfS92MS9CYXNlVmlldy8ke19xcnlWaWV3fWBcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRU5EIEVYUEVSSU1FTlRBTFxyXG5cclxuICAgICAgICBxdWVyeU9iaiA9IHtcclxuICAgICAgICAgIHF1ZXJ5c3RyaW5nOiB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ucXVlcnlzdHJpbmcsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmh0dHBcclxuICAgICAgICAgIC5wb3N0KHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5mdWxscGF0aCwgcXVlcnlPYmopXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnZpZXdJbmZvT2JqTGlzdFtpXSA9IHJlc3BvbnNlW1wiRGF0YVwiXVswXTtcclxuXHJcbiAgICAgICAgICAgICAgZm9yIChcclxuICAgICAgICAgICAgICAgIGxldCB5ID0gMDtcclxuICAgICAgICAgICAgICAgIHkgPCB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm8ubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgeSsrXHJcbiAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5wcm9wZXJ0eUxpc3QgIT1cclxuICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQgJiZcclxuICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLnByb3BlcnR5TGlzdC5sZW5ndGggIT1cclxuICAgICAgICAgICAgICAgICAgICAwXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHlMaXN0ID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0ucHJvcGVydHlMaXN0O1xyXG4gICAgICAgICAgICAgICAgICBsZXQgY29uY2F0ID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgZm9yIChsZXQgeiA9IDA7IHogPCBwcm9wZXJ0eUxpc3QubGVuZ3RoOyB6KyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25jYXQgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgY29uY2F0ICtcclxuICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TGlzdFt6XS5wcmVmaXggK1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3SW5mb09iakxpc3RbaV1bcHJvcGVydHlMaXN0W3pdLnByb3BlcnR5XSArXHJcbiAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUxpc3Rbel0uc3VmZml4O1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5jb25jYXQgPSBjb25jYXQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy9zd2l0Y2ggY2FzZVxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS50eXBlID09IFwic3dpdGNoXCIpIHtcclxuICAgICAgICAgICAgICAgICAgZm9yIChcclxuICAgICAgICAgICAgICAgICAgICBsZXQgeiA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgeiA8IHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5jYXNlLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICB6KytcclxuICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IEVtcHR5ID0gbmV3IEFycmF5PGJvb2xlYW4+KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmNhc2Vbel0uSGlkZGVuID1cclxuICAgICAgICAgICAgICAgICAgICAgIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vY2hlY2sgaGlkZUlmRW1wdHlcclxuICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uY2FzZVt6XS5yZXN1bHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmhpZGVJZkVtcHR5ICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmNhc2Vbel0ucmVzdWx0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5oaWRlSWZFbXB0eSAhPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5jYXNlW3pdLnJlc3VsdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC50eXBlICE9IFwiY29uY2F0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBFbXB0eS5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0luZm9PYmpMaXN0W2ldW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmNhc2Vbel1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlc3VsdC5wcm9wZXJ0eVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0gIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdJbmZvT2JqTGlzdFtpXVtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmNhc2Vbel1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVzdWx0LnByb3BlcnR5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdICE9IG51bGwgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0luZm9PYmpMaXN0W2ldW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uY2FzZVt6XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXN1bHQucHJvcGVydHlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gIT0gXCJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0eXBlIGNvbmNhdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmNhc2Vbel0ucmVzdWx0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHJvcGVydHlMaXN0ICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5jYXNlW3pdLnJlc3VsdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnByb3BlcnR5TGlzdC5sZW5ndGggIT0gMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eUxpc3QgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmNhc2Vbel1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlc3VsdC5wcm9wZXJ0eUxpc3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmNhdCA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYSA9IDA7IGEgPCBwcm9wZXJ0eUxpc3QubGVuZ3RoOyBhKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmNhdCA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmNhdCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TGlzdFthXS5wcmVmaXggK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdJbmZvT2JqTGlzdFtpXVtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUxpc3RbYV0ucHJvcGVydHlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TGlzdFthXS5zdWZmaXg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbXB0eS5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdJbmZvT2JqTGlzdFtpXVtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUxpc3RbYV0ucHJvcGVydHlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdJbmZvT2JqTGlzdFtpXVtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TGlzdFthXS5wcm9wZXJ0eVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gIT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0luZm9PYmpMaXN0W2ldW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlMaXN0W2FdLnByb3BlcnR5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSAhPSBcIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmNhc2VbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXS5yZXN1bHQuY29uY2F0ID0gY29uY2F0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBFbXB0eS5pbmNsdWRlcyh0cnVlKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uY2FzZVt6XS5yZXN1bHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAuaGlkZUlmRW1wdHlcclxuICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uY2FzZVt6XS5IaWRkZW4gPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5pc0hpZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvL2NvbmNhdFxyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uY2FzZVt6XS5yZXN1bHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAucHJvcGVydHlMaXN0ICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uY2FzZVt6XS5yZXN1bHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAucHJvcGVydHlMaXN0Lmxlbmd0aCAhPSAwXHJcbiAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHlMaXN0ID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uY2FzZVt6XS5yZXN1bHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wcm9wZXJ0eUxpc3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb25jYXQgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBhID0gMDsgYSA8IHByb3BlcnR5TGlzdC5sZW5ndGg7IGErKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmNhdCA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25jYXQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlMaXN0W2FdLnByZWZpeCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdJbmZvT2JqTGlzdFtpXVtwcm9wZXJ0eUxpc3RbYV0ucHJvcGVydHldICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TGlzdFthXS5zdWZmaXg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmNhc2VbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgelxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdLnJlc3VsdC5jb25jYXQgPSBjb25jYXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0udHlwZSA9PSBcImxpbmtcIiAmJlxyXG4gICAgICAgICAgICAgICAgICAodGhpcy52aWV3R2VuZXJpY09iai5uYXZpZ2F0aW9uQ29uc3QgIT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3R2VuZXJpY09iai5uYXZpZ2F0aW9uQ29uc3QgIT0gbnVsbClcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgdGVtcExpbmsgPVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0dlbmVyaWNPYmoubmF2aWdhdGlvbkNvbnN0W1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLnBhdGhcclxuICAgICAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgICBpZiAodGVtcExpbmsgIT0gdW5kZWZpbmVkICYmIHRlbXBMaW5rICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0ucGF0aCA9IHRlbXBMaW5rO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS50eXBlID09IFwibGlua1wiICYmXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudmlld0dlbmVyaWNPYmoubGlzdEVudmlyb25tZW50cyAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgICAgICAgICAgdGhpcy52aWV3R2VuZXJpY09iai5saXN0RW52aXJvbm1lbnRzLmxlbmd0aCAhPSAwXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgZm9yIChcclxuICAgICAgICAgICAgICAgICAgICBsZXQgeiA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgeiA8IHRoaXMudmlld0dlbmVyaWNPYmoubGlzdEVudmlyb25tZW50cy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgeisrXHJcbiAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5lbnZpcm9ubWVudCA9PVxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3R2VuZXJpY09iai5saXN0RW52aXJvbm1lbnRzW3pdLmVudmlyb25tZW50XHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uaXNGdWxscGF0aCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uZnVsbHBhdGggPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdHZW5lcmljT2JqLmxpc3RFbnZpcm9ubWVudHNbel0udXJsICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLnBhdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS50eXBlID09IFwibGlua1wiXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmlzRnVsbHBhdGggPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmZ1bGxwYXRoID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0ucGF0aDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5pc1JlYWR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1BhdGggIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9QYXRoICE9IFwiXCJcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLmVudmlyb25tZW50ICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9QYXRoICE9IFwiXCJcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBmb3IgKFxyXG4gICAgICAgICAgICAgIGxldCB6ID0gMDtcclxuICAgICAgICAgICAgICB6IDwgdGhpcy52aWV3R2VuZXJpY09iai5saXN0RW52aXJvbm1lbnRzLmxlbmd0aDtcclxuICAgICAgICAgICAgICB6KytcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLmVudmlyb25tZW50ID09XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdHZW5lcmljT2JqLmxpc3RFbnZpcm9ubWVudHNbel0uZW52aXJvbm1lbnRcclxuICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5mdWxscGF0aCA9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudmlld0dlbmVyaWNPYmoubGlzdEVudmlyb25tZW50c1t6XS51cmwgK1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9QYXRoO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLnZpZXdHZW5lcmljT2JqLnZpZXdFbnZpcm9ubWVudCAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgICAgdGhpcy52aWV3R2VuZXJpY09iai52aWV3RW52aXJvbm1lbnQgIT0gXCJcIlxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5mdWxscGF0aCA9XHJcbiAgICAgICAgICAgICAgdGhpcy52aWV3R2VuZXJpY09iai52aWV3RW52aXJvbm1lbnQgK1xyXG4gICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1BhdGg7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0uZnVsbHBhdGggPVxyXG4gICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1VybDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLmZ1bGxwYXRoID1cclxuICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvVXJsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcmVxT2JqID0gdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLnJlcU9iaiB8fCB0aGlzLmdldExpc3Q7XHJcbiAgICAgICAgaWYgKHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5yZXFPYmogIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoXHJcbiAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5yZXFPYmpcclxuICAgICAgICAgICkpIHtcclxuICAgICAgICAgICAgcmVxT2JqW2tleV0gPSB0aGlzLmdldExpc3RbdmFsdWUgYXMgc3RyaW5nXSB8fCB0aGlzLnZpZXdHZW5lcmljT2JqLmRpY3RzW3ZhbHVlIGFzIHN0cmluZ107XHJcbiAgICAgICAgICAgIGlmIChyZXFPYmpba2V5XSA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICByZXFPYmpba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmh0dHAucG9zdCh0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0uZnVsbHBhdGgsIHJlcU9iaikuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ucmVzT2JqTmFtZSA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLnJlc09iak5hbWUgPT09IFwiXCJcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy52aWV3SW5mb09iakxpc3RbaV0gPSByZXNwb25zZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnZpZXdJbmZvT2JqTGlzdFtpXSA9XHJcbiAgICAgICAgICAgICAgICByZXNwb25zZVt0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ucmVzT2JqTmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5pc1JlYWR5ID0gdHJ1ZTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRKU09OKHVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIEdldENvb2tpZShjb29raWVTZXJ2aWNlOiBDb29raWVTZXJ2aWNlLCBrZXk6IHN0cmluZykge1xyXG4gICAgbGV0IHZhbHVlID0gY29va2llU2VydmljZS5nZXQoa2V5KTtcclxuICAgIGlmICh2YWx1ZSA9PSB1bmRlZmluZWQgfHwgdmFsdWUudHJpbSgpID09IFwiXCIpIHJldHVybiBudWxsO1xyXG4gICAgY29uc3QgX2tleSA9IHRoaXMudmlld0dlbmVyaWNPYmo/LmVudmlyb25tZW50Py5DaGlwcGVyS2V5Q29va2llID8/IFwiQWRJbnNGT1UxMjM0NTY3OFwiO1xyXG4gICAgcmV0dXJuIHRoaXMuRGVjcnlwdFN0cmluZyh2YWx1ZSwgX2tleSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIERlY3J5cHRTdHJpbmcoY2hpcHBlclRleHQ6IHN0cmluZywgY2hpcHBlcktleTogc3RyaW5nKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIGNoaXBwZXJLZXkgPT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgIGNoaXBwZXJLZXkudHJpbSgpID09IFwiXCIgfHxcclxuICAgICAgY2hpcHBlclRleHQgPT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgIGNoaXBwZXJUZXh0LnRyaW0oKSA9PSBcIlwiXHJcbiAgICApXHJcbiAgICAgIHJldHVybiBjaGlwcGVyVGV4dDtcclxuICAgIGxldCBjaGlwcGVyS2V5QXJyID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoY2hpcHBlcktleSk7XHJcbiAgICBsZXQgaXYgPSBDcnlwdG9KUy5saWIuV29yZEFycmF5LmNyZWF0ZShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMF0pO1xyXG4gICAgbGV0IGRlY3J5cHRlZCA9IENyeXB0b0pTLkFFUy5kZWNyeXB0KGNoaXBwZXJUZXh0LCBjaGlwcGVyS2V5QXJyLCB7XHJcbiAgICAgIGl2OiBpdixcclxuICAgIH0pO1xyXG4gICAgbGV0IHBsYWluVGV4dCA9IGRlY3J5cHRlZC50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XHJcbiAgICByZXR1cm4gcGxhaW5UZXh0O1xyXG4gIH1cclxuXHJcbiAgZ2VuQWN0aW9uKHZpZXdPYmosIHBhcmFtKSB7XHJcbiAgICBsZXQgYXJyTGlzdDogYW55ID0ge307XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJhbS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdmlld09ialtwYXJhbVtpXS50eXBlXSAhPSB1bmRlZmluZWQgfHxcclxuICAgICAgICB2aWV3T2JqW3BhcmFtW2ldLnByb3BlcnR5XSAhPSB1bmRlZmluZWRcclxuICAgICAgKSB7XHJcbiAgICAgICAgYXJyTGlzdFtwYXJhbVtpXS50eXBlXSA9IHZpZXdPYmpbcGFyYW1baV0ucHJvcGVydHldO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGFyckxpc3RbcGFyYW1baV0udHlwZV0gPSBwYXJhbVtpXS5wcm9wZXJ0eTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFNldCBzdGF0ZSBvZiBkYXRhIHRvIHJvdXRlciBzZXJ2aWNlXHJcbiAgICBpZiAoIWlzRGV2TW9kZSgpICYmICh0aGlzLnZpZXdHZW5lcmljT2JqPy5lbnZpcm9ubWVudD8udXNlU2FmZVVybCA/PyBmYWxzZSkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMubmd4Um91dGVyLmNyZWF0ZVF1ZXJ5UGFyYW1zKGFyckxpc3QpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyckxpc3Q7XHJcbiAgfVxyXG5cclxuICBnZW5Sb3V0ZXJMaW5rKHVybExpbms6IHN0cmluZykge1xyXG4gICAgbGV0IHRlbXBMaW5rID0gdXJsTGluaztcclxuICAgIGlmIChcclxuICAgICAgdGhpcy52aWV3R2VuZXJpY09iai5uYXZpZ2F0aW9uQ29uc3QgIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIHRoaXMudmlld0dlbmVyaWNPYmoubmF2aWdhdGlvbkNvbnN0W3VybExpbmtdICE9IG51bGxcclxuICAgICkge1xyXG4gICAgICB0ZW1wTGluayA9IHRoaXMudmlld0dlbmVyaWNPYmoubmF2aWdhdGlvbkNvbnN0W3VybExpbmtdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRlbXBMaW5rO1xyXG4gIH1cclxuXHJcbiAgcmVkaXJlY3RGdWxsUGF0aChmdWxscGF0aDogc3RyaW5nLCBwYXJhbTogT2JqZWN0LCB0YXJnZXQ6IHN0cmluZywgaXRlbTogYW55KSB7XHJcbiAgICBsZXQgcXVlcnlQYXJhbSA9IFwiXCI7XHJcbiAgICBsZXQgX2Z1bGxwYXRoID0gZnVsbHBhdGggfHwgXCJcIjtcclxuICAgIFxyXG4gICAgaWYgKF9mdWxscGF0aCA9PSBcIlwiKSB7XHJcbiAgICAgIF9mdWxscGF0aCA9IHRoaXMuZ2VuRnVsbHBhdGgoaXRlbS5lbnZpcm9ubWVudCwgaXRlbS5wYXRoKVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IExpc3RPYmogPSBPYmplY3Qua2V5cyhwYXJhbSk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IExpc3RPYmoubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKHF1ZXJ5UGFyYW0gIT0gXCJcIikge1xyXG4gICAgICAgIHF1ZXJ5UGFyYW0gPSBxdWVyeVBhcmFtICsgXCImXCIgKyBMaXN0T2JqW2ldICsgXCI9XCIgKyBwYXJhbVtMaXN0T2JqW2ldXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBxdWVyeVBhcmFtID0gTGlzdE9ialtpXSArIFwiPVwiICsgcGFyYW1bTGlzdE9ialtpXV07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHdpbmRvdy5vcGVuKF9mdWxscGF0aCArIFwiP1wiICsgcXVlcnlQYXJhbSwgdGFyZ2V0KTtcclxuICB9XHJcblxyXG4gIGdlbkZ1bGxwYXRoKGVudmlyb25tZW50OiBzdHJpbmcsIHBhdGg6IHN0cmluZykge1xyXG4gICAgY29uc3QgX2VudmkgPSB0aGlzLmdldEVudmlyb25tZW50KGVudmlyb25tZW50KTtcclxuICAgIGlmIChfZW52aSA9PT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gZW52aXJvbm1lbnQgKyBwYXRoO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBfZW52aS51cmwgKyBwYXRoO1xyXG4gIH1cclxuXHJcbiAgY2FsbGJhY2tGdW5jdGlvbihpdGVtLCBrZXk6IHN0cmluZyA9IFwiXCIpIHtcclxuICAgIGxldCBDQk9iaiA9IHtcclxuICAgICAgVmlld09iajogaXRlbSxcclxuICAgICAgS2V5OiBrZXksXHJcbiAgICB9O1xyXG4gICAgdGhpcy5jYWxsYmFjay5lbWl0KENCT2JqKTtcclxuICB9XHJcblxyXG4gIHN3aXRjaENhc2UoaXRlbSwgY29uZExpc3QpIHtcclxuICAgIGxldCBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgIGlmICghaXRlbSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25kTGlzdC5jb25kaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChjb25kTGlzdC5jb25kaXRpb25zW2ldLnJlc3RyaWN0aW9uID09IFwiRVFcIikge1xyXG4gICAgICAgIGlmIChjb25kTGlzdC5jb25kaXRpb25zW2ldLmlzVXNlciAhPSB0cnVlKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGl0ZW1bY29uZExpc3QuY29uZGl0aW9uc1tpXS5wcm9wZXJ0eV0gPT1cclxuICAgICAgICAgICAgY29uZExpc3QuY29uZGl0aW9uc1tpXS52YWx1ZVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgaXRlbVtjb25kTGlzdC5jb25kaXRpb25zW2ldLnByb3BlcnR5XSA9PSB0aGlzLlVzZXJBY2Nlc3NbXCJVc2VyTmFtZVwiXVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0ucmVzdHJpY3Rpb24gPT0gXCJORVFcIikge1xyXG4gICAgICAgIGlmIChjb25kTGlzdC5jb25kaXRpb25zW2ldLmlzVXNlciAhPSB0cnVlKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGl0ZW1bY29uZExpc3QuY29uZGl0aW9uc1tpXS5wcm9wZXJ0eV0gIT1cclxuICAgICAgICAgICAgY29uZExpc3QuY29uZGl0aW9uc1tpXS52YWx1ZVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgaXRlbVtjb25kTGlzdC5jb25kaXRpb25zW2ldLnByb3BlcnR5XSAhPSB0aGlzLlVzZXJBY2Nlc3NbXCJVc2VyTmFtZVwiXVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0ucmVzdHJpY3Rpb24gPT0gXCJHVFwiKSB7XHJcbiAgICAgICAgaWYgKGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0uaXNVc2VyICE9IHRydWUpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgaXRlbVtjb25kTGlzdC5jb25kaXRpb25zW2ldLnByb3BlcnR5XSA+IGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0udmFsdWVcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGl0ZW1bY29uZExpc3QuY29uZGl0aW9uc1tpXS5wcm9wZXJ0eV0gPiB0aGlzLlVzZXJBY2Nlc3NbXCJVc2VyTmFtZVwiXVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0ucmVzdHJpY3Rpb24gPT0gXCJHVEVcIikge1xyXG4gICAgICAgIGlmIChjb25kTGlzdC5jb25kaXRpb25zW2ldLmlzVXNlciAhPSB0cnVlKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGl0ZW1bY29uZExpc3QuY29uZGl0aW9uc1tpXS5wcm9wZXJ0eV0gPj1cclxuICAgICAgICAgICAgY29uZExpc3QuY29uZGl0aW9uc1tpXS52YWx1ZVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgaXRlbVtjb25kTGlzdC5jb25kaXRpb25zW2ldLnByb3BlcnR5XSA+PSB0aGlzLlVzZXJBY2Nlc3NbXCJVc2VyTmFtZVwiXVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0ucmVzdHJpY3Rpb24gPT0gXCJMVFwiKSB7XHJcbiAgICAgICAgaWYgKGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0uaXNVc2VyICE9IHRydWUpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgaXRlbVtjb25kTGlzdC5jb25kaXRpb25zW2ldLnByb3BlcnR5XSA8IGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0udmFsdWVcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGl0ZW1bY29uZExpc3QuY29uZGl0aW9uc1tpXS5wcm9wZXJ0eV0gPCB0aGlzLlVzZXJBY2Nlc3NbXCJVc2VyTmFtZVwiXVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0ucmVzdHJpY3Rpb24gPT0gXCJMVEVcIikge1xyXG4gICAgICAgIGlmIChjb25kTGlzdC5jb25kaXRpb25zW2ldLmlzVXNlciAhPSB0cnVlKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGl0ZW1bY29uZExpc3QuY29uZGl0aW9uc1tpXS5wcm9wZXJ0eV0gPD1cclxuICAgICAgICAgICAgY29uZExpc3QuY29uZGl0aW9uc1tpXS52YWx1ZVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgaXRlbVtjb25kTGlzdC5jb25kaXRpb25zW2ldLnByb3BlcnR5XSA8PSB0aGlzLlVzZXJBY2Nlc3NbXCJVc2VyTmFtZVwiXVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0ucmVzdHJpY3Rpb24gPT0gXCJJTlwiKSB7XHJcbiAgICAgICAgaWYgKGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0uaXNVc2VyICE9IHRydWUpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgY29uZExpc3QuY29uZGl0aW9uc1tpXS52YWx1ZS5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgKHgpID0+IHggPT0gaXRlbVtjb25kTGlzdC5jb25kaXRpb25zW2ldLnByb3BlcnR5XVxyXG4gICAgICAgICAgICApID49IDBcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0udmFsdWUuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICh4KSA9PiB4ID09IHRoaXMuVXNlckFjY2Vzc1tcIlVzZXJOYW1lXCJdXHJcbiAgICAgICAgICAgICkgPj0gMFxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0ucmVzdHJpY3Rpb24gPT0gXCJOSU5cIikge1xyXG4gICAgICAgIGlmIChjb25kTGlzdC5jb25kaXRpb25zW2ldLmlzVXNlciAhPSB0cnVlKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0udmFsdWUuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICh4KSA9PiB4ID09IGl0ZW1bY29uZExpc3QuY29uZGl0aW9uc1tpXS5wcm9wZXJ0eV1cclxuICAgICAgICAgICAgKSA9PSAtMVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgY29uZExpc3QuY29uZGl0aW9uc1tpXS52YWx1ZS5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgKHgpID0+IHggPT0gdGhpcy5Vc2VyQWNjZXNzW1wiVXNlck5hbWVcIl1cclxuICAgICAgICAgICAgKSA9PSAtMVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29uZGl0aW9uO1xyXG4gIH1cclxufVxyXG4iLCI8c2VjdGlvbiBpZD1cImhvcml6b250YWwtZm9ybS1sYXlvdXRzXCI+XHJcbiAgPGRpdiBjbGFzcz1cInJvdyB0ZXh0LWxlZnRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgPGRpdiBbbmdDbGFzc109XCJJc0NhcmQgPyAnY2FyZCcgOiAnJ1wiICpuZ0lmPVwiaXNSZWFkeVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwbC0zIG1iLTIgbXQtMlwiICpuZ0lmPVwidmlld0xpc3Q/LnRpdGxlICE9ICcnXCI+XHJcbiAgICAgICAgICA8aDQgY2xhc3M9XCJjYXJkLXRpdGxlIHVjU2VhcmNoLXRpdGxlXCIgaWQ9XCJob3J6LWxheW91dC1jb2xvcmVkLWNvbnRyb2xzXCIgdHJhbnNsYXRlPnt7dmlld0xpc3QudGl0bGV9fTwvaDQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiICpuZ0Zvcj1cImxldCBzcyBvZiB2aWV3TGlzdD8uc3Vic2VjdGlvbjtsZXQgaSA9IGluZGV4O1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTNcIj5cclxuICAgICAgICAgICAgPGxpYi11Y1N1YnNlY3Rpb24gKm5nSWY9XCJzcy5zdWJzZWN0aW9uICE9ICcnXCIgW2lkXT1cInNzLnN1YlNlY3Rpb25JZCArICdpZCdcIiBbdGl0bGVdPVwic3Muc3ViU2VjdGlvblRpdGxlXCJcclxuICAgICAgICAgICAgICBbcGFuZWxdPVwic3Muc3ViU2VjdGlvbklkXCI+XHJcbiAgICAgICAgICAgIDwvbGliLXVjU3Vic2VjdGlvbj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tYm9keVwiIFtpZF09J3NzLnN1YlNlY3Rpb25JZCc+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBtaSBvZiBzcz8ubWFpbkluZm9cIlxyXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdjb2wtbWQtNic6IG1pLmlzSGlkZSA9PSB1bmRlZmluZWQgfHwgIW1pLmlzSGlkZSB8fCAodmlld0luZm9PYmpMaXN0W2ldW21pLnByb3BlcnR5XSAhPSAnJyAmJiB2aWV3SW5mb09iakxpc3RbaV1bbWkucHJvcGVydHldICE9IG51bGwpfVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwibWkuaXNIaWRlID09IHVuZGVmaW5lZCB8fCAhbWkuaXNIaWRlIHx8ICh2aWV3SW5mb09iakxpc3RbaV1bbWkucHJvcGVydHldICE9ICcnICYmIHZpZXdJbmZvT2JqTGlzdFtpXVttaS5wcm9wZXJ0eV0gIT0gbnVsbClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdJZj1cIm1pLnR5cGUgIT0gJ3N3aXRjaCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwtY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwibWkuY3VzdG9tQ2xhc3NMYWJlbCAhPSB1bmRlZmluZWQgPyBtaS5jdXN0b21DbGFzc0xhYmVsIDogJydcIiB0cmFuc2xhdGU+e3ttaS5sYWJlbH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgKm5nSWY9XCJtaS50eXBlID09ICdzd2l0Y2gnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNhc2Ugb2YgbWk/LmNhc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic3dpdGNoQ2FzZSh2aWV3SW5mb09iakxpc3RbaV0sY2FzZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJtaS5jdXN0b21DbGFzc0xhYmVsICE9IHVuZGVmaW5lZCA/IG1pLmN1c3RvbUNsYXNzTGFiZWwgOiAnJ1wiIHRyYW5zbGF0ZT57e2Nhc2UucmVzdWx0LmxhYmVsfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInZpZXdJbmZvT2JqTGlzdFtpXSAhPSB1bmRlZmluZWRcIiBjbGFzcz1cImNvbC1tZC02XCIgW25nQ2xhc3NdPVwieyAndGV4dC1sZWZ0JzogbWkucG9zaXRpb24gPT0gJ2xlZnQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAndGV4dC1yaWdodCc6IG1pLnBvc2l0aW9uID09ICdyaWdodCcsICd0ZXh0LWNlbnRlcic6IG1pLnBvc2l0aW9uID09ICdjZW50ZXInIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIihtaS50eXBlID09ICdib29sZWFuJyAmJiB2aWV3SW5mb09iakxpc3RbaV1bbWkucHJvcGVydHldICE9IG51bGwpIHx8ICh2aWV3SW5mb09iakxpc3RbaV1bbWkucHJvcGVydHldICE9ICcnICYmIHZpZXdJbmZvT2JqTGlzdFtpXVttaS5wcm9wZXJ0eV0gIT0gbnVsbCkgfHwgbWkudHlwZSA9PSAnc3dpdGNoJyB8fCBtaS50eXBlID09J2NvbmNhdCc7IHRoZW4gbm9uRW1wdHlMYWJlbCBlbHNlIGVtcHR5TGFiZWxcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHlMYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgKm5nSWY9XCJtaS50eXBlID09ICdibGFuaydcIj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIm1pLnR5cGUgIT0gJ2JsYW5rJ1wiIGNsYXNzPVwibGFiZWwtY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJtaS5jdXN0b21DbGFzc1Byb3BlcnR5ICE9IHVuZGVmaW5lZCA/IG1pLmN1c3RvbUNsYXNzUHJvcGVydHkgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGU+LTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9uRW1wdHlMYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm1pLnR5cGUgPT0gJ3RleHQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ2aWV3SW5mb09iakxpc3RbaV1bbWkucHJvcGVydHldICE9ICcnICYmIHZpZXdJbmZvT2JqTGlzdFtpXVttaS5wcm9wZXJ0eV0gIT0gbnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGFiZWwtY29udHJvbCBicmVha3dvcmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJtaS5jdXN0b21DbGFzc1Byb3BlcnR5ICE9IHVuZGVmaW5lZCA/IG1pLmN1c3RvbUNsYXNzUHJvcGVydHkgOiAnJ1wiIHRyYW5zbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdmlld0luZm9PYmpMaXN0W2ldW21pLnByb3BlcnR5XSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInZpZXdJbmZvT2JqTGlzdFtpXVttaS5wcm9wZXJ0eV0gPT0gJycgfHwgdmlld0luZm9PYmpMaXN0W2ldW21pLnByb3BlcnR5XSA9PSBudWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsYWJlbC1jb250cm9sXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwibWkuY3VzdG9tQ2xhc3NQcm9wZXJ0eSAhPSB1bmRlZmluZWQgPyBtaS5jdXN0b21DbGFzc1Byb3BlcnR5IDogJydcIiB0cmFuc2xhdGU+LVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwibWkudHlwZSA9PSAnY3VycmVuY3knXCIgY2xhc3M9XCJsYWJlbC1jb250cm9sXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIm1pLmN1c3RvbUNsYXNzUHJvcGVydHkgIT0gdW5kZWZpbmVkID8gbWkuY3VzdG9tQ2xhc3NQcm9wZXJ0eSA6ICcnXCIgdHJhbnNsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdmlld0luZm9PYmpMaXN0W2ldW21pLnByb3BlcnR5XSB8IG51bWJlcjogbWk/LnByZWNpc2lvbiA/IG1pPy5wcmVjaXNpb24gOiAnMC4yJyA6J2VuLVVTJ319IDxzcGFuICpuZ0lmPVwibWk/LklzUHJjbnRcIj4mbmJzcDslPC9zcGFuPiA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIm1pLnR5cGUgPT0gJ2RhdGUnXCIgY2xhc3M9XCJsYWJlbC1jb250cm9sXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIm1pLmN1c3RvbUNsYXNzUHJvcGVydHkgIT0gdW5kZWZpbmVkID8gbWkuY3VzdG9tQ2xhc3NQcm9wZXJ0eSA6ICcnXCIgdHJhbnNsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdmlld0luZm9PYmpMaXN0W2ldW21pLnByb3BlcnR5XSB8IGRhdGU6IChtaT8uZGF0ZUZvcm1hdCkgPyBtaT8uZGF0ZUZvcm1hdCA6ICdkZC1NTU0teXl5eSd9fSA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIm1pLnR5cGUgPT0gJ2xpbmsnXCIgY2xhc3M9XCJsYWJlbC1jb250cm9sXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIm1pLmN1c3RvbUNsYXNzUHJvcGVydHkgIT0gdW5kZWZpbmVkID8gbWkuY3VzdG9tQ2xhc3NQcm9wZXJ0eSA6ICcnXCIgdHJhbnNsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCIhbWk/LmlzRnVsbHBhdGhcIiBbcm91dGVyTGlua109XCJnZW5Sb3V0ZXJMaW5rKG1pLnBhdGgpXCIgW3RhcmdldF09XCJtaS50YXJnZXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcXVlcnlQYXJhbXNdPVwiZ2VuQWN0aW9uKHZpZXdJbmZvT2JqTGlzdFtpXSwgbWkucGFyYW0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiKG1pLmlzQ3VycmVuY3kgIT0gdW5kZWZpbmVkICYmIG1pLmlzQ3VycmVuY3kpXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3SW5mb09iakxpc3RbaV1bbWkucHJvcGVydHldIHwgbnVtYmVyOicuMic6J2VuLVVTJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIobWkuaXNDdXJyZW5jeSA9PSB1bmRlZmluZWQgfHwgIW1pLmlzQ3VycmVuY3kpXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3SW5mb09iakxpc3RbaV1bbWkucHJvcGVydHldIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCJtaT8uaXNGdWxscGF0aFwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlZGlyZWN0RnVsbFBhdGgobWkuZnVsbHBhdGgsIGdlbkFjdGlvbih2aWV3SW5mb09iakxpc3RbaV0sIG1pLnBhcmFtKSwgbWkudGFyZ2V0LCBtaSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIobWkuaXNDdXJyZW5jeSAhPSB1bmRlZmluZWQgJiYgbWkuaXNDdXJyZW5jeSlcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJbmZvT2JqTGlzdFtpXVttaS5wcm9wZXJ0eV0gfCBudW1iZXI6Jy4yJzonZW4tVVMnIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIihtaS5pc0N1cnJlbmN5ID09IHVuZGVmaW5lZCB8fCAhbWkuaXNDdXJyZW5jeSlcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJbmZvT2JqTGlzdFtpXVttaS5wcm9wZXJ0eV0gfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgKm5nSWY9XCJtaS50eXBlID09ICdjYWxsYmFjaydcIiBjbGFzcz1cImxhYmVsLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwibWkuY3VzdG9tQ2xhc3NQcm9wZXJ0eSAhPSB1bmRlZmluZWQgPyBtaS5jdXN0b21DbGFzc1Byb3BlcnR5IDogJydcIiB0cmFuc2xhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIChjbGljayk9XCJjYWxsYmFja0Z1bmN0aW9uKHZpZXdJbmZvT2JqTGlzdFtpXSwgbWkua2V5KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB2aWV3SW5mb09iakxpc3RbaV1bbWkucHJvcGVydHldIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgKm5nSWY9XCJtaS50eXBlID09ICd0ZXh0YXJlYSdcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJlYWRvbmx5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJtaS5jdXN0b21DbGFzc1Byb3BlcnR5ICE9IHVuZGVmaW5lZCA/IG1pLmN1c3RvbUNsYXNzUHJvcGVydHkgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGU+IHt7IHZpZXdJbmZvT2JqTGlzdFtpXVttaS5wcm9wZXJ0eV0gfX0gPC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm1pLnR5cGUgPT0gJ2Jvb2xlYW4nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIm1pLmN1c3RvbUNsYXNzUHJvcGVydHkgIT0gdW5kZWZpbmVkID8gbWkuY3VzdG9tQ2xhc3NQcm9wZXJ0eSA6ICcnXCIgdHJhbnNsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwtY29udHJvbFwiICpuZ0lmPVwidmlld0luZm9PYmpMaXN0W2ldW21pLnByb3BlcnR5XSA9PSB0cnVlXCI+WWVzPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsLWNvbnRyb2xcIiAqbmdJZj1cInZpZXdJbmZvT2JqTGlzdFtpXVttaS5wcm9wZXJ0eV0gPT0gZmFsc2VcIj5ObzwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxsYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInZpZXdJbmZvT2JqTGlzdFtpXVttaS5wcm9wZXJ0eV0gPT0gJycgfHwgdmlld0luZm9PYmpMaXN0W2ldW21pLnByb3BlcnR5XSA9PSBudWxsXCI+LTwvbGFiZWw+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm1pLnR5cGUgPT0gJ2NvbmNhdCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsLWNvbnRyb2wgYnJlYWt3b3JkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwibWkuY3VzdG9tQ2xhc3NQcm9wZXJ0eSAhPSB1bmRlZmluZWQgPyBtaS5jdXN0b21DbGFzc1Byb3BlcnR5IDogJydcIiB0cmFuc2xhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG1pLmNvbmNhdCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJtaS50eXBlID09ICdzd2l0Y2gnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgY3Mgb2YgbWk/LmNhc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzd2l0Y2hDYXNlKHZpZXdJbmZvT2JqTGlzdFtpXSxjcykgJiYgIWNzLkhpZGRlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwtY29udHJvbCBicmVha3dvcmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwibWkuY3VzdG9tQ2xhc3NQcm9wZXJ0eSAhPSB1bmRlZmluZWQgPyBtaS5jdXN0b21DbGFzc1Byb3BlcnR5IDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlICpuZ0lmPVwiY3MucmVzdWx0LnR5cGUgPT0gJ3RleHQnXCI+e3sgdmlld0luZm9PYmpMaXN0W2ldW2NzLnJlc3VsdC5wcm9wZXJ0eV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY3MucmVzdWx0LnR5cGUgPT0gJ2RlY2ltYWwnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbC1jb250cm9sIGJyZWFrd29yZFwiIFtuZ0NsYXNzXT1cIm1pLmN1c3RvbUNsYXNzUHJvcGVydHkgIT0gdW5kZWZpbmVkID8gbWkuY3VzdG9tQ2xhc3NQcm9wZXJ0eSA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHZpZXdJbmZvT2JqTGlzdFtpXVtjcy5yZXN1bHQucHJvcGVydHldIHwgbnVtYmVyOiBjcy5yZXN1bHQucHJlY2lzaW9uID8gY3MucmVzdWx0LnByZWNpc2lvbiA6ICcwLjInIDonZW4tVVMnIH19PC9zcGFuPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjcy5yZXN1bHQuSXNQcmNudFwiPiZuYnNwOyU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNzLnJlc3VsdC50eXBlID09ICdkYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwtY29udHJvbCBicmVha3dvcmRcIiBbbmdDbGFzc109XCJtaS5jdXN0b21DbGFzc1Byb3BlcnR5ICE9IHVuZGVmaW5lZCA/IG1pLmN1c3RvbUNsYXNzUHJvcGVydHkgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdmlld0luZm9PYmpMaXN0W2ldW2NzLnJlc3VsdC5wcm9wZXJ0eV0gfCBkYXRlOiAnZGQtTU1NLXl5eXknIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNzLnJlc3VsdC50eXBlID09ICdsaW5rJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJtaS5jdXN0b21DbGFzc1Byb3BlcnR5ICE9IHVuZGVmaW5lZCA/IG1pLmN1c3RvbUNsYXNzUHJvcGVydHkgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBbdGFyZ2V0XT1cImNzLnJlc3VsdC50YXJnZXRcIiBbcm91dGVyTGlua109XCJnZW5Sb3V0ZXJMaW5rKGNzLnJlc3VsdC5wYXRoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtxdWVyeVBhcmFtc109XCJnZW5BY3Rpb24odmlld0luZm9PYmpMaXN0W2ldLGNzLnJlc3VsdC5wYXJhbSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIobWkuaXNDdXJyZW5jeSAhPSB1bmRlZmluZWQgJiYgbWkuaXNDdXJyZW5jeSlcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJbmZvT2JqTGlzdFtpXVtjcy5yZXN1bHQucHJvcGVydHldIHwgbnVtYmVyOicuMic6J2VuLVVTJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIobWkuaXNDdXJyZW5jeSA9PSB1bmRlZmluZWQgfHwgIW1pLmlzQ3VycmVuY3kpXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3SW5mb09iakxpc3RbaV1bY3MucmVzdWx0LnByb3BlcnR5XSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjcy5yZXN1bHQudHlwZSA9PSAnYm9vbGVhbidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsLWNvbnRyb2wgYnJlYWt3b3JkXCIgW25nQ2xhc3NdPVwibWkuY3VzdG9tQ2xhc3NQcm9wZXJ0eSAhPSB1bmRlZmluZWQgPyBtaS5jdXN0b21DbGFzc1Byb3BlcnR5IDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidmlld0luZm9PYmpMaXN0W2ldW2NzLnJlc3VsdC5wcm9wZXJ0eV0gPT0gJ3RydWUnIHx8IHZpZXdJbmZvT2JqTGlzdFtpXVtjcy5yZXN1bHQucHJvcGVydHldID09IHRydWVcIj5ZZXM8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidmlld0luZm9PYmpMaXN0W2ldW2NzLnJlc3VsdC5wcm9wZXJ0eV0gPT0gJ2ZhbHNlJyB8fCB2aWV3SW5mb09iakxpc3RbaV1bY3MucmVzdWx0LnByb3BlcnR5XSA9PSBmYWxzZVwiPk5vPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjcy5yZXN1bHQudHlwZSA9PSAnY29uY2F0J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwtY29udHJvbCBicmVha3dvcmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJtaS5jdXN0b21DbGFzc1Byb3BlcnR5ICE9IHVuZGVmaW5lZCA/IG1pLmN1c3RvbUNsYXNzUHJvcGVydHkgOiAnJ1wiIHRyYW5zbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY3MucmVzdWx0LmNvbmNhdCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjcy5yZXN1bHQudHlwZSA9PSAnY2FsbGJhY2snXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNzLnJlc3VsdC5pc1RleHQgIT0gdW5kZWZpbmVkICYmIGNzLnJlc3VsdC5pc1RleHQ7IHRoZW4gdGV4dENhbGxiYWNrIGVsc2UgaWNvbkNhbGxiYWNrXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN0ZXh0Q2FsbGJhY2s+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCIgKGNsaWNrKT1cImNhbGxiYWNrRnVuY3Rpb24odmlld0luZm9PYmpMaXN0W2ldLCBjcy5yZXN1bHQua2V5KVwiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3SW5mb09iakxpc3RbaV1bY3MucmVzdWx0LnByb3BlcnR5XSB9fTwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaWNvbkNhbGxiYWNrPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBbbmdDbGFzc109XCJbY3MucmVzdWx0LnRvb2x0aXAgIT0gdW5kZWZpbmVkICYmIGNzLnJlc3VsdC50b29sdGlwICE9ICcnID8gJ3Rvb2x0aXBzJyA6ICcnLCBjcy5yZXN1bHQuYW5jaG9yID09IHVuZGVmaW5lZCB8fCBjcy5yZXN1bHQuYW5jaG9yID09ICcnID8gJ3N1Y2Nlc3MgcC0wJyA6IGNzLnJlc3VsdC5hbmNob3JdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYWxsYmFja0Z1bmN0aW9uKHZpZXdJbmZvT2JqTGlzdFtpXSwgY3MucmVzdWx0LmtleSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZm9udC1tZWRpdW0tMyBtci0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiIGNzLnJlc3VsdC5pY29uID09IHVuZGVmaW5lZCB8fCBjcy5yZXN1bHQuaWNvbiA9PSAnJyA/ICdmdC1lZGl0LTInIDogY3MucmVzdWx0Lmljb24gXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNzLnJlc3VsdC50b29sdGlwICE9IHVuZGVmaW5lZCAmJiBjcy5yZXN1bHQudG9vbHRpcCAhPSAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNzLnJlc3VsdC50b29sdGlwICE9IHVuZGVmaW5lZCAmJiBjcy5yZXN1bHQudG9vbHRpcCAhPSAnJyA/ICd0b29sdGlwc3RleHQnIDogJydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tjcy5yZXN1bHQudG9vbHRpcH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQtdmlld1wiICpuZ0lmPVwiZ3JpZFZpZXdPYmouZ3JpZFZpZXdzLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGdyaWRWaWV3IG9mIGlucHV0R3JpZFZpZXdPYmpzOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsaWItdWNTdWJzZWN0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJncmlkVmlld09iai5ncmlkVmlld3NbaV0uc3Vic2VjdGlvbiAmJiBncmlkVmlld09iai5ncmlkVmlld3NbaV0uc3Vic2VjdGlvbiAhPT0gJydcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCInZ3JpZC1zdWJzZWN0aW9uLWlkJytpXCJcclxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiZ3JpZFZpZXdPYmouZ3JpZFZpZXdzW2ldLnN1YnNlY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwYW5lbF09XCInZ3JpZC1zdWJzZWN0aW9uLXBhbmVsLScraVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L2xpYi11Y1N1YnNlY3Rpb24+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWJvZHlcIiBbaWRdPVwiJ2dyaWQtc3Vic2VjdGlvbi1wYW5lbC0nK2lcIj5cclxuPCEtLSAgICAgICAgICAgICAgICAgICAgPGxpYi11Y2dyaWR2aWV3IFtncmlkSW5wdXRdPVwiZ3JpZFZpZXdcIiAoY2FsbGJhY2spPVwiZ3JpZEV2ZW50KCRldmVudClcIiAoaXNSZWZyZXNoKT1cIkdldEdyaWRWaWV3RGF0YShncmlkVmlld09iai5ncmlkVmlld3NbaV0sIGdyaWRWaWV3KVwiPjwvbGliLXVjZ3JpZHZpZXc+LS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpYi11Y3RhYmxlIFtncmlkT2JqXT1cImdyaWRWaWV3XCIgW3N0YW5kYWxvbmVdPVwiZmFsc2VcIiAoY2FsbGJhY2spPVwiZ3JpZEV2ZW50KCRldmVudClcIj48L2xpYi11Y3RhYmxlPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L3NlY3Rpb24+XHJcbiJdfQ==