@adins/ucviewgeneric 3.4.11-canary.0 → 3.4.12-canary.0

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.
@@ -7,21 +7,24 @@ import { CookieService } from "ngx-cookie";
7
7
  import * as CryptoJS from "crypto-js";
8
8
  import { GridViewObj } from "./model/grid-view-obj.model";
9
9
  import { InputGridObj } from "./model/input-grid-obj.model";
10
+ import { NgxRouterService } from '@adins/fe-core';
10
11
  import * as i0 from "@angular/core";
11
12
  import * as i1 from "@angular/router";
12
13
  import * as i2 from "@angular/common/http";
13
14
  import * as i3 from "@ngx-translate/core";
14
15
  import * as i4 from "ngx-cookie";
15
- import * as i5 from "@adins/uc-subsection";
16
- import * as i6 from "@adins/uctable";
17
- import * as i7 from "@angular/common";
18
- import * as i8 from "@ng-bootstrap/ng-bootstrap";
16
+ import * as i5 from "@adins/fe-core";
17
+ import * as i6 from "@adins/uc-subsection";
18
+ import * as i7 from "@adins/uctable";
19
+ import * as i8 from "@angular/common";
20
+ import * as i9 from "@ng-bootstrap/ng-bootstrap";
19
21
  export class UcviewgenericComponent {
20
- constructor(route, http, translateService, cookieService) {
22
+ constructor(route, http, translateService, cookieService, ngxRouter) {
21
23
  this.route = route;
22
24
  this.http = http;
23
25
  this.translateService = translateService;
24
26
  this.cookieService = cookieService;
27
+ this.ngxRouter = ngxRouter;
25
28
  this.viewGenericObj = new UcViewGenericObj();
26
29
  this.gridViewObj = new GridViewObj();
27
30
  this.refresh = new EventEmitter();
@@ -33,7 +36,7 @@ export class UcviewgenericComponent {
33
36
  this.IsCard = true;
34
37
  this.isCollapsed = false;
35
38
  this.route.queryParams.subscribe((params) => {
36
- this.getList = params;
39
+ this.getList = this.ngxRouter.getQueryParams(params.params);
37
40
  });
38
41
  this.translateService.setDefaultLang("en");
39
42
  this.translateService.use(localStorage.getItem("lang") || "en");
@@ -86,9 +89,9 @@ export class UcviewgenericComponent {
86
89
  const inputGridObj = new InputGridObj();
87
90
  inputGridObj.dataInput = gridView.tableInput;
88
91
  inputGridObj.resultData = { Data: [] };
89
- inputGridObj.isSubsection = gridView.isSubsection ?? false;
90
- inputGridObj.usePagination = gridView.usePagination ?? true;
91
- inputGridObj.title = gridView.title ?? "";
92
+ inputGridObj.isSubsection = gridView.isSubsection || false;
93
+ inputGridObj.usePagination = gridView.usePagination || true;
94
+ inputGridObj.title = gridView.title || "";
92
95
  await this.GetGridViewData(gridView.getData, inputGridObj);
93
96
  this.inputGridViewObjs.push(inputGridObj);
94
97
  });
@@ -319,7 +322,7 @@ export class UcviewgenericComponent {
319
322
  this.viewList.subsection[i].fullpath =
320
323
  this.viewList.subsection[i].mainInfoUrl;
321
324
  }
322
- const reqObj = this.viewList.subsection[i].reqObj ?? this.getList;
325
+ const reqObj = this.viewList.subsection[i].reqObj || this.getList;
323
326
  if (this.viewList.subsection[i].reqObj !== undefined) {
324
327
  for (const [key, value] of Object.entries(this.viewList.subsection[i].reqObj)) {
325
328
  reqObj[key] = this.getList[value] || this.viewGenericObj.dicts[value];
@@ -378,7 +381,8 @@ export class UcviewgenericComponent {
378
381
  arrList[param[i].type] = param[i].property;
379
382
  }
380
383
  }
381
- return arrList;
384
+ // Set state of data to router service
385
+ return this.ngxRouter.createQueryParams(arrList);
382
386
  }
383
387
  genRouterLink(urlLink) {
384
388
  let tempLink = urlLink;
@@ -592,12 +596,12 @@ export class UcviewgenericComponent {
592
596
  return condition;
593
597
  }
594
598
  }
595
- /** @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 }], target: i0.ɵɵFactoryTarget.Component });
596
- /** @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: i5.UcSubsectionComponent, selector: "lib-ucSubsection", inputs: ["title", "panel", "id", "legacy"], outputs: ["collapse"] }, { type: i6.UctableComponent, selector: "lib-uctable", inputs: ["pageSize", "gridObj", "notify", "dicts", "standalone", "classPadding"], outputs: ["callback", "cbUpdateDict"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i8.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": i7.DecimalPipe, "date": i7.DatePipe } });
599
+ /** @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 });
600
+ /** @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 } });
597
601
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: UcviewgenericComponent, decorators: [{
598
602
  type: Component,
599
603
  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"] }]
600
- }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.HttpClient }, { type: i3.TranslateService }, { type: i4.CookieService }]; }, propDecorators: { viewGenericObj: [{
604
+ }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.HttpClient }, { type: i3.TranslateService }, { type: i4.CookieService }, { type: i5.NgxRouterService }]; }, propDecorators: { viewGenericObj: [{
601
605
  type: Input
602
606
  }], gridViewObj: [{
603
607
  type: Input
@@ -606,4 +610,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
606
610
  }], callback: [{
607
611
  type: Output
608
612
  }] } });
609
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWN2aWV3Z2VuZXJpYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy91Y3ZpZXdnZW5lcmljL3NyYy9saWIvdWN2aWV3Z2VuZXJpYy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy91Y3ZpZXdnZW5lcmljL3NyYy9saWIvdWN2aWV3Z2VuZXJpYy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUMzQyxPQUFPLEtBQUssUUFBUSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7Ozs7Ozs7O0FBTzVELE1BQU0sT0FBTyxzQkFBc0I7SUFpQmpDLFlBQ1UsS0FBcUIsRUFDckIsSUFBZ0IsRUFDaEIsZ0JBQWtDLEVBQ2xDLGFBQTRCO1FBSDVCLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQXBCN0IsbUJBQWMsR0FBcUIsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFE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dEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDSSxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBVY1ZpZXdHZW5lcmljT2JqIH0gZnJvbSBcIi4vbW9kZWwvdWMtdmlldy1nZW5lcmljLW9iai5tb2RlbFwiO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcclxuaW1wb3J0IHsgQ29va2llU2VydmljZSB9IGZyb20gXCJuZ3gtY29va2llXCI7XHJcbmltcG9ydCAqIGFzIENyeXB0b0pTIGZyb20gXCJjcnlwdG8tanNcIjtcclxuaW1wb3J0IHsgR3JpZFZpZXdPYmogfSBmcm9tIFwiLi9tb2RlbC9ncmlkLXZpZXctb2JqLm1vZGVsXCI7XHJcbmltcG9ydCB7IElucHV0R3JpZE9iaiB9IGZyb20gXCIuL21vZGVsL2lucHV0LWdyaWQtb2JqLm1vZGVsXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJsaWItdWN2aWV3Z2VuZXJpY1wiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vdWN2aWV3Z2VuZXJpYy5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogWycuL3Vjdmlld2dlbmVyaWMuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFVjdmlld2dlbmVyaWNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIHZpZXdHZW5lcmljT2JqOiBVY1ZpZXdHZW5lcmljT2JqID0gbmV3IFVjVmlld0dlbmVyaWNPYmooKTtcclxuICBASW5wdXQoKSBncmlkVmlld09iajogR3JpZFZpZXdPYmogPSBuZXcgR3JpZFZpZXdPYmooKTtcclxuICBASW5wdXQoKSByZWZyZXNoOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgQE91dHB1dCgpIGNhbGxiYWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgVXNlckFjY2VzczogYW55ID0gSlNPTi5wYXJzZShcclxuICAgIHRoaXMuR2V0Q29va2llKHRoaXMuY29va2llU2VydmljZSwgXCJVc2VyQWNjZXNzXCIpXHJcbiAgKTtcclxuICBpbnB1dEdyaWRWaWV3T2JqczogQXJyYXk8SW5wdXRHcmlkT2JqPiA9IG5ldyBBcnJheTxJbnB1dEdyaWRPYmo+KCk7XHJcbiAgdmlld0xpc3Q6IGFueSA9IFwiXCI7XHJcbiAgZ2V0TGlzdDogYW55O1xyXG4gIHZpZXdJbmZvT2JqTGlzdDogYW55O1xyXG4gIGlzUmVhZHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBJc0NhcmQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGlzQ29sbGFwc2VkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvb2tpZVNlcnZpY2U6IENvb2tpZVNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKChwYXJhbXMpID0+IHtcclxuICAgICAgdGhpcy5nZXRMaXN0ID0gcGFyYW1zO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnNldERlZmF1bHRMYW5nKFwiZW5cIik7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudXNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwibGFuZ1wiKSB8fCBcImVuXCIpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICAvLyBFWFBFUklNRU5UQUwgQmFzZVZpZXcgQVBJXHJcbiAgICAvLyBUT0RPOiByZW1vdmUgYWZ0ZXIgc3RhYmxlXHJcbiAgICBpZiAodGhpcy52aWV3R2VuZXJpY09iai5FeHBlcmltZW50YWwgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnZpZXdHZW5lcmljT2JqLkV4cGVyaW1lbnRhbCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gRU5EIEVYUEVSSU1FTlRBTFxyXG5cclxuICAgIHRoaXMuaW5pdGlhdGVGb3JtKCk7XHJcbiAgICB0aGlzLkNoZWNrSXNDYXJkKCk7XHJcblxyXG4gICAgdGhpcy5yZWZyZXNoLnN1YnNjcmliZShpc1VwZGF0ZSA9PiB7XHJcbiAgICAgIGlmICghaXNVcGRhdGUpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFJlZnJlc2ggdmlldyBjb250ZW50XHJcbiAgICAgIHRoaXMuaW5pdGlhdGVGb3JtKCk7XHJcbiAgICAgIHRoaXMucmVmcmVzaC5lbWl0KGZhbHNlKTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBvbkNvbGxhcHNlKGV2KSB7XHJcbiAgICB0aGlzLmlzQ29sbGFwc2VkID0gISFldj8uaXNDb2xsYXBzZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIENoZWNrSXNDYXJkKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnZpZXdHZW5lcmljT2JqLklzQ2FyZCA9PSB1bmRlZmluZWQgfHxcclxuICAgICAgdGhpcy52aWV3R2VuZXJpY09iai5Jc0NhcmQgPT0gbnVsbFxyXG4gICAgKVxyXG4gICAgICByZXR1cm47XHJcbiAgICB0aGlzLklzQ2FyZCA9IHRoaXMudmlld0dlbmVyaWNPYmouSXNDYXJkO1xyXG4gIH1cclxuXHJcbiAgaW5pdGlhdGVGb3JtKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnZpZXdHZW5lcmljT2JqLmRhdGFJbnB1dCAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMudmlld0dlbmVyaWNPYmouZGF0YUlucHV0KS5sZW5ndGggIT09IDBcclxuICAgICkge1xyXG4gICAgICB0aGlzLnNldENvbmZpZ3VyYXRpb24oeyAuLi50aGlzLnZpZXdHZW5lcmljT2JqLmRhdGFJbnB1dCB9KTtcclxuICAgICAgdGhpcy5ncmlkVmlld09iai5ncmlkVmlld3MgPSB0aGlzLnZpZXdHZW5lcmljT2JqLmRhdGFJbnB1dC5zdWJzZWN0aW9uWzBdPy5ncmlkVmlld3MgfHwgW107XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUdyaWRWaWV3cygpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5nZXRKU09OKHRoaXMudmlld0dlbmVyaWNPYmoudmlld0lucHV0KS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgdGhpcy5zZXRDb25maWd1cmF0aW9uKGRhdGEpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmluaXRpYWxpemVHcmlkVmlld3MoKTtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpemVHcmlkVmlld3MoKSB7XHJcbiAgICBpZiAodGhpcy5ncmlkVmlld09iaiAmJiB0aGlzLmdyaWRWaWV3T2JqLmdyaWRWaWV3cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZ3JpZFZpZXdPYmouZ3JpZFZpZXdzLm1hcChhc3luYyAoZ3JpZFZpZXcpID0+IHtcclxuICAgICAgY29uc3QgaW5wdXRHcmlkT2JqID0gbmV3IElucHV0R3JpZE9iaigpO1xyXG4gICAgICBpbnB1dEdyaWRPYmouZGF0YUlucHV0ID0gZ3JpZFZpZXcudGFibGVJbnB1dDtcclxuICAgICAgaW5wdXRHcmlkT2JqLnJlc3VsdERhdGEgPSB7IERhdGE6IFtdIH07XHJcbiAgICAgIGlucHV0R3JpZE9iai5pc1N1YnNlY3Rpb24gPSBncmlkVmlldy5pc1N1YnNlY3Rpb24gPz8gZmFsc2U7XHJcbiAgICAgIGlucHV0R3JpZE9iai51c2VQYWdpbmF0aW9uID0gZ3JpZFZpZXcudXNlUGFnaW5hdGlvbiA/PyB0cnVlO1xyXG4gICAgICBpbnB1dEdyaWRPYmoudGl0bGUgPSBncmlkVmlldy50aXRsZSA/PyBcIlwiO1xyXG4gICAgICBhd2FpdCB0aGlzLkdldEdyaWRWaWV3RGF0YShncmlkVmlldy5nZXREYXRhLCBpbnB1dEdyaWRPYmopO1xyXG4gICAgICB0aGlzLmlucHV0R3JpZFZpZXdPYmpzLnB1c2goaW5wdXRHcmlkT2JqKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0RW52aXJvbm1lbnQoZW52aSkge1xyXG4gICAgY29uc3QgZmlsdGVyZWRFbnZpcyA9IHRoaXMudmlld0dlbmVyaWNPYmoubGlzdEVudmlyb25tZW50cy5maWx0ZXIoXHJcbiAgICAgICh2KSA9PiB2LmVudmlyb25tZW50ID09IGVudmlcclxuICAgICk7XHJcbiAgICByZXR1cm4gZmlsdGVyZWRFbnZpcy5sZW5ndGggPiAwID8gZmlsdGVyZWRFbnZpc1swXSA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBhc3luYyBHZXRHcmlkVmlld0RhdGEobWV0YTogYW55LCBpbnB1dEdyaWRPYmo6IElucHV0R3JpZE9iaikge1xyXG4gICAgbGV0IHRlbXBsTGlzdERhdGEgPSBbXTtcclxuICAgIGNvbnN0IGVudmlVcmwgPSBtZXRhLmVudmlyb25tZW50ICYmIHRoaXMuZ2V0RW52aXJvbm1lbnQobWV0YS5lbnZpcm9ubWVudCk7XHJcbiAgICBhd2FpdCB0aGlzLmh0dHBcclxuICAgICAgLnBvc3QoZW52aVVybCA/IGVudmlVcmwudXJsICsgbWV0YS5hcGlQYXRoIDogbWV0YS5hcGlQYXRoLCBtZXRhLnJlcU9iailcclxuICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIHRlbXBsTGlzdERhdGEgPSByZXNwb25zZVttZXRhLmN1c3RvbU9iak5hbWUgfHwgXCJSZXR1cm5PYmplY3RcIl07XHJcbiAgICAgICAgaW5wdXRHcmlkT2JqLmFwaVVybCA9IG1ldGEuYXBpUGF0aDtcclxuICAgICAgICBpbnB1dEdyaWRPYmoucmVzdWx0RGF0YVtcIkRhdGFcIl0gPSBuZXcgQXJyYXkoKTtcclxuICAgICAgICBpbnB1dEdyaWRPYmoucmVzdWx0RGF0YS5EYXRhID0gdGVtcGxMaXN0RGF0YTtcclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBncmlkRXZlbnQoZXYpIHtcclxuICAgIHRoaXMuY2FsbGJhY2tGdW5jdGlvbihldi5Sb3dPYmosIGV2LktleSk7XHJcbiAgfVxyXG5cclxuICBzZXRDb25maWd1cmF0aW9uKGRhdGEpIHtcclxuICAgIHRoaXMudmlld0xpc3QgPSBkYXRhO1xyXG4gICAgdGhpcy52aWV3SW5mb09iakxpc3QgPSBbXTtcclxuXHJcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbi5sZW5ndGg7IGorKykge1xyXG4gICAgICB0aGlzLnZpZXdJbmZvT2JqTGlzdC5wdXNoKGopO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ucXVlcnlzdHJpbmcgIT0gbnVsbCAmJlxyXG4gICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5xdWVyeXN0cmluZy5uYW1lICE9IFwiXCJcclxuICAgICAgKSB7XHJcbiAgICAgICAgbGV0IHF1ZXJ5T2JqOiBhbnk7XHJcbiAgICAgICAgaWYgKHRoaXMudmlld0dlbmVyaWNPYmoud2hlcmVWYWx1ZS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLnF1ZXJ5c3RyaW5nLndoZXJlUXVlcnkgPSAoPGFueT4oXHJcbiAgICAgICAgICAgIE9iamVjdFxyXG4gICAgICAgICAgKSkudmFsdWVzKHRoaXMuZ2V0TGlzdCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5xdWVyeXN0cmluZy53aGVyZVF1ZXJ5ID1cclxuICAgICAgICAgICAgdGhpcy52aWV3R2VuZXJpY09iai53aGVyZVZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvUGF0aCAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1BhdGggIT0gXCJcIlxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLnZpZXdHZW5lcmljT2JqLnZpZXdFbnZpcm9ubWVudCAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgICAgdGhpcy52aWV3R2VuZXJpY09iai52aWV3RW52aXJvbm1lbnQgIT0gXCJcIlxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5mdWxscGF0aCA9XHJcbiAgICAgICAgICAgICAgdGhpcy52aWV3R2VuZXJpY09iai52aWV3RW52aXJvbm1lbnQgK1xyXG4gICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1BhdGg7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0uZnVsbHBhdGggPVxyXG4gICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1VybDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLmZ1bGxwYXRoID1cclxuICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvVXJsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRVhQRVJJTUVOVEFMIEJhc2VWaWV3IEFQSVxyXG4gICAgICAgIC8vIFRPRE86IHJlbW92ZSBhZnRlciBzdGFibGVcclxuICAgICAgICBpZiAodGhpcy52aWV3R2VuZXJpY09iai5FeHBlcmltZW50YWwpIHtcclxuICAgICAgICAgIGNvbnN0IF9lbnZpcm9ubWVudFVybCA9IHRoaXMudmlld0dlbmVyaWNPYmoudmlld0Vudmlyb25tZW50LnN1YnN0cmluZygwLCB0aGlzLnZpZXdHZW5lcmljT2JqLnZpZXdFbnZpcm9ubWVudC5sZW5ndGgtMyk7XHJcbiAgICAgICAgICBjb25zdCBfcXJ5VmlldyA9IHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5xdWVyeXN0cmluZy5uYW1lO1xyXG4gICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLmZ1bGxwYXRoID0gYCR7X2Vudmlyb25tZW50VXJsfS92MS9CYXNlVmlldy8ke19xcnlWaWV3fWBcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRU5EIEVYUEVSSU1FTlRBTFxyXG5cclxuICAgICAgICBxdWVyeU9iaiA9IHtcclxuICAgICAgICAgIHF1ZXJ5c3RyaW5nOiB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ucXVlcnlzdHJpbmcsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmh0dHBcclxuICAgICAgICAgIC5wb3N0KHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5mdWxscGF0aCwgcXVlcnlPYmopXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnZpZXdJbmZvT2JqTGlzdFtpXSA9IHJlc3BvbnNlW1wiRGF0YVwiXVswXTtcclxuXHJcbiAgICAgICAgICAgICAgZm9yIChcclxuICAgICAgICAgICAgICAgIGxldCB5ID0gMDtcclxuICAgICAgICAgICAgICAgIHkgPCB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm8ubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgeSsrXHJcbiAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5wcm9wZXJ0eUxpc3QgIT1cclxuICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQgJiZcclxuICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLnByb3BlcnR5TGlzdC5sZW5ndGggIT1cclxuICAgICAgICAgICAgICAgICAgICAwXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHlMaXN0ID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0ucHJvcGVydHlMaXN0O1xyXG4gICAgICAgICAgICAgICAgICBsZXQgY29uY2F0ID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgZm9yIChsZXQgeiA9IDA7IHogPCBwcm9wZXJ0eUxpc3QubGVuZ3RoOyB6KyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25jYXQgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgY29uY2F0ICtcclxuICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TGlzdFt6XS5wcmVmaXggK1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3SW5mb09iakxpc3RbaV1bcHJvcGVydHlMaXN0W3pdLnByb3BlcnR5XSArXHJcbiAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUxpc3Rbel0uc3VmZml4O1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5jb25jYXQgPSBjb25jYXQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy9zd2l0Y2ggY2FzZVxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS50eXBlID09IFwic3dpdGNoXCIpIHtcclxuICAgICAgICAgICAgICAgICAgZm9yIChcclxuICAgICAgICAgICAgICAgICAgICBsZXQgeiA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgeiA8IHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5jYXNlLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICB6KytcclxuICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IEVtcHR5ID0gbmV3IEFycmF5PGJvb2xlYW4+KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmNhc2Vbel0uSGlkZGVuID1cclxuICAgICAgICAgICAgICAgICAgICAgIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vY2hlY2sgaGlkZUlmRW1wdHlcclxuICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uY2FzZVt6XS5yZXN1bHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmhpZGVJZkVtcHR5ICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmNhc2Vbel0ucmVzdWx0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5oaWRlSWZFbXB0eSAhPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5jYXNlW3pdLnJlc3VsdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC50eXBlICE9IFwiY29uY2F0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBFbXB0eS5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0luZm9PYmpMaXN0W2ldW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmNhc2Vbel1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlc3VsdC5wcm9wZXJ0eVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0gIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdJbmZvT2JqTGlzdFtpXVtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmNhc2Vbel1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVzdWx0LnByb3BlcnR5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdICE9IG51bGwgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0luZm9PYmpMaXN0W2ldW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uY2FzZVt6XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXN1bHQucHJvcGVydHlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gIT0gXCJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0eXBlIGNvbmNhdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmNhc2Vbel0ucmVzdWx0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHJvcGVydHlMaXN0ICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5jYXNlW3pdLnJlc3VsdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnByb3BlcnR5TGlzdC5sZW5ndGggIT0gMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eUxpc3QgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmNhc2Vbel1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlc3VsdC5wcm9wZXJ0eUxpc3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmNhdCA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYSA9IDA7IGEgPCBwcm9wZXJ0eUxpc3QubGVuZ3RoOyBhKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmNhdCA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmNhdCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TGlzdFthXS5wcmVmaXggK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdJbmZvT2JqTGlzdFtpXVtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUxpc3RbYV0ucHJvcGVydHlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TGlzdFthXS5zdWZmaXg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbXB0eS5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdJbmZvT2JqTGlzdFtpXVtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUxpc3RbYV0ucHJvcGVydHlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdJbmZvT2JqTGlzdFtpXVtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TGlzdFthXS5wcm9wZXJ0eVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gIT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0luZm9PYmpMaXN0W2ldW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlMaXN0W2FdLnByb3BlcnR5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSAhPSBcIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmNhc2VbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXS5yZXN1bHQuY29uY2F0ID0gY29uY2F0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBFbXB0eS5pbmNsdWRlcyh0cnVlKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uY2FzZVt6XS5yZXN1bHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAuaGlkZUlmRW1wdHlcclxuICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uY2FzZVt6XS5IaWRkZW4gPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5pc0hpZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvL2NvbmNhdFxyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uY2FzZVt6XS5yZXN1bHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAucHJvcGVydHlMaXN0ICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uY2FzZVt6XS5yZXN1bHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAucHJvcGVydHlMaXN0Lmxlbmd0aCAhPSAwXHJcbiAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHlMaXN0ID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uY2FzZVt6XS5yZXN1bHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wcm9wZXJ0eUxpc3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb25jYXQgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBhID0gMDsgYSA8IHByb3BlcnR5TGlzdC5sZW5ndGg7IGErKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmNhdCA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25jYXQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlMaXN0W2FdLnByZWZpeCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdJbmZvT2JqTGlzdFtpXVtwcm9wZXJ0eUxpc3RbYV0ucHJvcGVydHldICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TGlzdFthXS5zdWZmaXg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmNhc2VbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgelxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdLnJlc3VsdC5jb25jYXQgPSBjb25jYXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0udHlwZSA9PSBcImxpbmtcIiAmJlxyXG4gICAgICAgICAgICAgICAgICAodGhpcy52aWV3R2VuZXJpY09iai5uYXZpZ2F0aW9uQ29uc3QgIT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3R2VuZXJpY09iai5uYXZpZ2F0aW9uQ29uc3QgIT0gbnVsbClcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgdGVtcExpbmsgPVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0dlbmVyaWNPYmoubmF2aWdhdGlvbkNvbnN0W1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLnBhdGhcclxuICAgICAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgICBpZiAodGVtcExpbmsgIT0gdW5kZWZpbmVkICYmIHRlbXBMaW5rICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0ucGF0aCA9IHRlbXBMaW5rO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS50eXBlID09IFwibGlua1wiICYmXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudmlld0dlbmVyaWNPYmoubGlzdEVudmlyb25tZW50cyAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgICAgICAgICAgdGhpcy52aWV3R2VuZXJpY09iai5saXN0RW52aXJvbm1lbnRzLmxlbmd0aCAhPSAwXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgZm9yIChcclxuICAgICAgICAgICAgICAgICAgICBsZXQgeiA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgeiA8IHRoaXMudmlld0dlbmVyaWNPYmoubGlzdEVudmlyb25tZW50cy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgeisrXHJcbiAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5lbnZpcm9ubWVudCA9PVxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3R2VuZXJpY09iai5saXN0RW52aXJvbm1lbnRzW3pdLmVudmlyb25tZW50XHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uaXNGdWxscGF0aCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uZnVsbHBhdGggPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdHZW5lcmljT2JqLmxpc3RFbnZpcm9ubWVudHNbel0udXJsICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLnBhdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS50eXBlID09IFwibGlua1wiXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmlzRnVsbHBhdGggPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmZ1bGxwYXRoID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0ucGF0aDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5pc1JlYWR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1BhdGggIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9QYXRoICE9IFwiXCJcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLmVudmlyb25tZW50ICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9QYXRoICE9IFwiXCJcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBmb3IgKFxyXG4gICAgICAgICAgICAgIGxldCB6ID0gMDtcclxuICAgICAgICAgICAgICB6IDwgdGhpcy52aWV3R2VuZXJpY09iai5saXN0RW52aXJvbm1lbnRzLmxlbmd0aDtcclxuICAgICAgICAgICAgICB6KytcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLmVudmlyb25tZW50ID09XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdHZW5lcmljT2JqLmxpc3RFbnZpcm9ubWVudHNbel0uZW52aXJvbm1lbnRcclxuICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5mdWxscGF0aCA9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudmlld0dlbmVyaWNPYmoubGlzdEVudmlyb25tZW50c1t6XS51cmwgK1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9QYXRoO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLnZpZXdHZW5lcmljT2JqLnZpZXdFbnZpcm9ubWVudCAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgICAgdGhpcy52aWV3R2VuZXJpY09iai52aWV3RW52aXJvbm1lbnQgIT0gXCJcIlxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5mdWxscGF0aCA9XHJcbiAgICAgICAgICAgICAgdGhpcy52aWV3R2VuZXJpY09iai52aWV3RW52aXJvbm1lbnQgK1xyXG4gICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1BhdGg7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0uZnVsbHBhdGggPVxyXG4gICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1VybDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLmZ1bGxwYXRoID1cclxuICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvVXJsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcmVxT2JqID0gdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLnJlcU9iaiA/PyB0aGlzLmdldExpc3Q7XHJcbiAgICAgICAgaWYgKHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5yZXFPYmogIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoXHJcbiAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5yZXFPYmpcclxuICAgICAgICAgICkpIHtcclxuICAgICAgICAgICAgcmVxT2JqW2tleV0gPSB0aGlzLmdldExpc3RbdmFsdWUgYXMgc3RyaW5nXSB8fCB0aGlzLnZpZXdHZW5lcmljT2JqLmRpY3RzW3ZhbHVlIGFzIHN0cmluZ107XHJcbiAgICAgICAgICAgIGlmIChyZXFPYmpba2V5XSA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICByZXFPYmpba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmh0dHAucG9zdCh0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0uZnVsbHBhdGgsIHJlcU9iaikuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ucmVzT2JqTmFtZSA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLnJlc09iak5hbWUgPT09IFwiXCJcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy52aWV3SW5mb09iakxpc3RbaV0gPSByZXNwb25zZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnZpZXdJbmZvT2JqTGlzdFtpXSA9XHJcbiAgICAgICAgICAgICAgICByZXNwb25zZVt0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ucmVzT2JqTmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5pc1JlYWR5ID0gdHJ1ZTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRKU09OKHVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIEdldENvb2tpZShjb29raWVTZXJ2aWNlOiBDb29raWVTZXJ2aWNlLCBrZXk6IHN0cmluZykge1xyXG4gICAgbGV0IHZhbHVlID0gY29va2llU2VydmljZS5nZXQoa2V5KTtcclxuICAgIGlmICh2YWx1ZSA9PSB1bmRlZmluZWQgfHwgdmFsdWUudHJpbSgpID09IFwiXCIpIHJldHVybiBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXMuRGVjcnlwdFN0cmluZyh2YWx1ZSwgXCJBZEluc0ZPVTEyMzQ1Njc4XCIpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBEZWNyeXB0U3RyaW5nKGNoaXBwZXJUZXh0OiBzdHJpbmcsIGNoaXBwZXJLZXk6IHN0cmluZykge1xyXG4gICAgaWYgKFxyXG4gICAgICBjaGlwcGVyS2V5ID09IHVuZGVmaW5lZCB8fFxyXG4gICAgICBjaGlwcGVyS2V5LnRyaW0oKSA9PSBcIlwiIHx8XHJcbiAgICAgIGNoaXBwZXJUZXh0ID09IHVuZGVmaW5lZCB8fFxyXG4gICAgICBjaGlwcGVyVGV4dC50cmltKCkgPT0gXCJcIlxyXG4gICAgKVxyXG4gICAgICByZXR1cm4gY2hpcHBlclRleHQ7XHJcbiAgICBsZXQgY2hpcHBlcktleUFyciA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKGNoaXBwZXJLZXkpO1xyXG4gICAgbGV0IGl2ID0gQ3J5cHRvSlMubGliLldvcmRBcnJheS5jcmVhdGUoWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdKTtcclxuICAgIGxldCBkZWNyeXB0ZWQgPSBDcnlwdG9KUy5BRVMuZGVjcnlwdChjaGlwcGVyVGV4dCwgY2hpcHBlcktleUFyciwge1xyXG4gICAgICBpdjogaXYsXHJcbiAgICB9KTtcclxuICAgIGxldCBwbGFpblRleHQgPSBkZWNyeXB0ZWQudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLlV0ZjgpO1xyXG4gICAgcmV0dXJuIHBsYWluVGV4dDtcclxuICB9XHJcblxyXG4gIGdlbkFjdGlvbih2aWV3T2JqLCBwYXJhbSkge1xyXG4gICAgbGV0IGFyckxpc3QgPSB7fTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFtLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB2aWV3T2JqW3BhcmFtW2ldLnR5cGVdICE9IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgIHZpZXdPYmpbcGFyYW1baV0ucHJvcGVydHldICE9IHVuZGVmaW5lZFxyXG4gICAgICApIHtcclxuICAgICAgICBhcnJMaXN0W3BhcmFtW2ldLnR5cGVdID0gdmlld09ialtwYXJhbVtpXS5wcm9wZXJ0eV07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYXJyTGlzdFtwYXJhbVtpXS50eXBlXSA9IHBhcmFtW2ldLnByb3BlcnR5O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXJyTGlzdDtcclxuICB9XHJcblxyXG4gIGdlblJvdXRlckxpbmsodXJsTGluazogc3RyaW5nKSB7XHJcbiAgICBsZXQgdGVtcExpbmsgPSB1cmxMaW5rO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnZpZXdHZW5lcmljT2JqLm5hdmlnYXRpb25Db25zdCAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgdGhpcy52aWV3R2VuZXJpY09iai5uYXZpZ2F0aW9uQ29uc3RbdXJsTGlua10gIT0gbnVsbFxyXG4gICAgKSB7XHJcbiAgICAgIHRlbXBMaW5rID0gdGhpcy52aWV3R2VuZXJpY09iai5uYXZpZ2F0aW9uQ29uc3RbdXJsTGlua107XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGVtcExpbms7XHJcbiAgfVxyXG5cclxuICByZWRpcmVjdEZ1bGxQYXRoKGZ1bGxwYXRoOiBzdHJpbmcsIHBhcmFtOiBPYmplY3QsIHRhcmdldDogc3RyaW5nLCBpdGVtOiBhbnkpIHtcclxuICAgIGxldCBxdWVyeVBhcmFtID0gXCJcIjtcclxuICAgIGxldCBfZnVsbHBhdGggPSBmdWxscGF0aCB8fCBcIlwiO1xyXG4gICAgXHJcbiAgICBpZiAoX2Z1bGxwYXRoID09IFwiXCIpIHtcclxuICAgICAgX2Z1bGxwYXRoID0gdGhpcy5nZW5GdWxscGF0aChpdGVtLmVudmlyb25tZW50LCBpdGVtLnBhdGgpXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgTGlzdE9iaiA9IE9iamVjdC5rZXlzKHBhcmFtKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTGlzdE9iai5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAocXVlcnlQYXJhbSAhPSBcIlwiKSB7XHJcbiAgICAgICAgcXVlcnlQYXJhbSA9IHF1ZXJ5UGFyYW0gKyBcIiZcIiArIExpc3RPYmpbaV0gKyBcIj1cIiArIHBhcmFtW0xpc3RPYmpbaV1dO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHF1ZXJ5UGFyYW0gPSBMaXN0T2JqW2ldICsgXCI9XCIgKyBwYXJhbVtMaXN0T2JqW2ldXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgd2luZG93Lm9wZW4oX2Z1bGxwYXRoICsgXCI/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==
613
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWN2aWV3Z2VuZXJpYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy91Y3ZpZXdnZW5lcmljL3NyYy9saWIvdWN2aWV3Z2VuZXJpYy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy91Y3ZpZXdnZW5lcmljL3NyYy9saWIvdWN2aWV3Z2VuZXJpYy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUMzQyxPQUFPLEtBQUssUUFBUSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7OztBQU9sRCxNQUFNLE9BQU8sc0JBQXNCO0lBaUJqQyxZQUNVLEtBQXFCLEVBQ3JCLElBQWdCLEVBQ2hCLGdCQUFrQyxFQUNsQyxhQUE0QixFQUM1QixTQUEyQjtRQUozQixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsa0JBQWEsR0FB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QUFHLEtBQUssQ0FBQzt3QkFDbEIsTUFBTTtxQkFDUDtpQkFDRjthQUNGO1NBQ0Y7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDOzt1SUEvc0JVLHNCQUFzQjsySEFBdEIsc0JBQXNCLDBMQ2pCbkMsczVkQXFMQTs0RkRwS2Esc0JBQXNCO2tCQUxsQyxTQUFTOytCQUNFLG1CQUFtQjt3TkFLcEIsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDSSxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBVY1ZpZXdHZW5lcmljT2JqIH0gZnJvbSBcIi4vbW9kZWwvdWMtdmlldy1nZW5lcmljLW9iai5tb2RlbFwiO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcclxuaW1wb3J0IHsgQ29va2llU2VydmljZSB9IGZyb20gXCJuZ3gtY29va2llXCI7XHJcbmltcG9ydCAqIGFzIENyeXB0b0pTIGZyb20gXCJjcnlwdG8tanNcIjtcclxuaW1wb3J0IHsgR3JpZFZpZXdPYmogfSBmcm9tIFwiLi9tb2RlbC9ncmlkLXZpZXctb2JqLm1vZGVsXCI7XHJcbmltcG9ydCB7IElucHV0R3JpZE9iaiB9IGZyb20gXCIuL21vZGVsL2lucHV0LWdyaWQtb2JqLm1vZGVsXCI7XHJcbmltcG9ydCB7IE5neFJvdXRlclNlcnZpY2UgfSBmcm9tICdAYWRpbnMvZmUtY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJsaWItdWN2aWV3Z2VuZXJpY1wiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vdWN2aWV3Z2VuZXJpYy5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogWycuL3Vjdmlld2dlbmVyaWMuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFVjdmlld2dlbmVyaWNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIHZpZXdHZW5lcmljT2JqOiBVY1ZpZXdHZW5lcmljT2JqID0gbmV3IFVjVmlld0dlbmVyaWNPYmooKTtcclxuICBASW5wdXQoKSBncmlkVmlld09iajogR3JpZFZpZXdPYmogPSBuZXcgR3JpZFZpZXdPYmooKTtcclxuICBASW5wdXQoKSByZWZyZXNoOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgQE91dHB1dCgpIGNhbGxiYWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgVXNlckFjY2VzczogYW55ID0gSlNPTi5wYXJzZShcclxuICAgIHRoaXMuR2V0Q29va2llKHRoaXMuY29va2llU2VydmljZSwgXCJVc2VyQWNjZXNzXCIpXHJcbiAgKTtcclxuICBpbnB1dEdyaWRWaWV3T2JqczogQXJyYXk8SW5wdXRHcmlkT2JqPiA9IG5ldyBBcnJheTxJbnB1dEdyaWRPYmo+KCk7XHJcbiAgdmlld0xpc3Q6IGFueSA9IFwiXCI7XHJcbiAgZ2V0TGlzdDogYW55O1xyXG4gIHZpZXdJbmZvT2JqTGlzdDogYW55O1xyXG4gIGlzUmVhZHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBJc0NhcmQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGlzQ29sbGFwc2VkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvb2tpZVNlcnZpY2U6IENvb2tpZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5neFJvdXRlcjogTmd4Um91dGVyU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtcykgPT4ge1xyXG4gICAgICB0aGlzLmdldExpc3QgPSB0aGlzLm5neFJvdXRlci5nZXRRdWVyeVBhcmFtcyhwYXJhbXMucGFyYW1zKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zZXREZWZhdWx0TGFuZyhcImVuXCIpO1xyXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnVzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImxhbmdcIikgfHwgXCJlblwiKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgLy8gRVhQRVJJTUVOVEFMIEJhc2VWaWV3IEFQSVxyXG4gICAgLy8gVE9ETzogcmVtb3ZlIGFmdGVyIHN0YWJsZVxyXG4gICAgaWYgKHRoaXMudmlld0dlbmVyaWNPYmouRXhwZXJpbWVudGFsID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy52aWV3R2VuZXJpY09iai5FeHBlcmltZW50YWwgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIEVORCBFWFBFUklNRU5UQUxcclxuXHJcbiAgICB0aGlzLmluaXRpYXRlRm9ybSgpO1xyXG4gICAgdGhpcy5DaGVja0lzQ2FyZCgpO1xyXG5cclxuICAgIHRoaXMucmVmcmVzaC5zdWJzY3JpYmUoaXNVcGRhdGUgPT4ge1xyXG4gICAgICBpZiAoIWlzVXBkYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBSZWZyZXNoIHZpZXcgY29udGVudFxyXG4gICAgICB0aGlzLmluaXRpYXRlRm9ybSgpO1xyXG4gICAgICB0aGlzLnJlZnJlc2guZW1pdChmYWxzZSk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgb25Db2xsYXBzZShldikge1xyXG4gICAgdGhpcy5pc0NvbGxhcHNlZCA9ICEhZXY/LmlzQ29sbGFwc2VkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBDaGVja0lzQ2FyZCgpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy52aWV3R2VuZXJpY09iai5Jc0NhcmQgPT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgIHRoaXMudmlld0dlbmVyaWNPYmouSXNDYXJkID09IG51bGxcclxuICAgIClcclxuICAgICAgcmV0dXJuO1xyXG4gICAgdGhpcy5Jc0NhcmQgPSB0aGlzLnZpZXdHZW5lcmljT2JqLklzQ2FyZDtcclxuICB9XHJcblxyXG4gIGluaXRpYXRlRm9ybSgpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy52aWV3R2VuZXJpY09iai5kYXRhSW5wdXQgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnZpZXdHZW5lcmljT2JqLmRhdGFJbnB1dCkubGVuZ3RoICE9PSAwXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zZXRDb25maWd1cmF0aW9uKHsgLi4udGhpcy52aWV3R2VuZXJpY09iai5kYXRhSW5wdXQgfSk7XHJcbiAgICAgIHRoaXMuZ3JpZFZpZXdPYmouZ3JpZFZpZXdzID0gdGhpcy52aWV3R2VuZXJpY09iai5kYXRhSW5wdXQuc3Vic2VjdGlvblswXT8uZ3JpZFZpZXdzIHx8IFtdO1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVHcmlkVmlld3MoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZ2V0SlNPTih0aGlzLnZpZXdHZW5lcmljT2JqLnZpZXdJbnB1dCkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgIHRoaXMuc2V0Q29uZmlndXJhdGlvbihkYXRhKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5pbml0aWFsaXplR3JpZFZpZXdzKCk7XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplR3JpZFZpZXdzKCkge1xyXG4gICAgaWYgKHRoaXMuZ3JpZFZpZXdPYmogJiYgdGhpcy5ncmlkVmlld09iai5ncmlkVmlld3MubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmdyaWRWaWV3T2JqLmdyaWRWaWV3cy5tYXAoYXN5bmMgKGdyaWRWaWV3KSA9PiB7XHJcbiAgICAgIGNvbnN0IGlucHV0R3JpZE9iaiA9IG5ldyBJbnB1dEdyaWRPYmooKTtcclxuICAgICAgaW5wdXRHcmlkT2JqLmRhdGFJbnB1dCA9IGdyaWRWaWV3LnRhYmxlSW5wdXQ7XHJcbiAgICAgIGlucHV0R3JpZE9iai5yZXN1bHREYXRhID0geyBEYXRhOiBbXSB9O1xyXG4gICAgICBpbnB1dEdyaWRPYmouaXNTdWJzZWN0aW9uID0gZ3JpZFZpZXcuaXNTdWJzZWN0aW9uIHx8IGZhbHNlO1xyXG4gICAgICBpbnB1dEdyaWRPYmoudXNlUGFnaW5hdGlvbiA9IGdyaWRWaWV3LnVzZVBhZ2luYXRpb24gfHwgdHJ1ZTtcclxuICAgICAgaW5wdXRHcmlkT2JqLnRpdGxlID0gZ3JpZFZpZXcudGl0bGUgfHwgXCJcIjtcclxuICAgICAgYXdhaXQgdGhpcy5HZXRHcmlkVmlld0RhdGEoZ3JpZFZpZXcuZ2V0RGF0YSwgaW5wdXRHcmlkT2JqKTtcclxuICAgICAgdGhpcy5pbnB1dEdyaWRWaWV3T2Jqcy5wdXNoKGlucHV0R3JpZE9iaik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldEVudmlyb25tZW50KGVudmkpIHtcclxuICAgIGNvbnN0IGZpbHRlcmVkRW52aXMgPSB0aGlzLnZpZXdHZW5lcmljT2JqLmxpc3RFbnZpcm9ubWVudHMuZmlsdGVyKFxyXG4gICAgICAodikgPT4gdi5lbnZpcm9ubWVudCA9PSBlbnZpXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIGZpbHRlcmVkRW52aXMubGVuZ3RoID4gMCA/IGZpbHRlcmVkRW52aXNbMF0gOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgR2V0R3JpZFZpZXdEYXRhKG1ldGE6IGFueSwgaW5wdXRHcmlkT2JqOiBJbnB1dEdyaWRPYmopIHtcclxuICAgIGxldCB0ZW1wbExpc3REYXRhID0gW107XHJcbiAgICBjb25zdCBlbnZpVXJsID0gbWV0YS5lbnZpcm9ubWVudCAmJiB0aGlzLmdldEVudmlyb25tZW50KG1ldGEuZW52aXJvbm1lbnQpO1xyXG4gICAgYXdhaXQgdGhpcy5odHRwXHJcbiAgICAgIC5wb3N0KGVudmlVcmwgPyBlbnZpVXJsLnVybCArIG1ldGEuYXBpUGF0aCA6IG1ldGEuYXBpUGF0aCwgbWV0YS5yZXFPYmopXHJcbiAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcclxuICAgICAgICB0ZW1wbExpc3REYXRhID0gcmVzcG9uc2VbbWV0YS5jdXN0b21PYmpOYW1lIHx8IFwiUmV0dXJuT2JqZWN0XCJdO1xyXG4gICAgICAgIGlucHV0R3JpZE9iai5hcGlVcmwgPSBtZXRhLmFwaVBhdGg7XHJcbiAgICAgICAgaW5wdXRHcmlkT2JqLnJlc3VsdERhdGFbXCJEYXRhXCJdID0gbmV3IEFycmF5KCk7XHJcbiAgICAgICAgaW5wdXRHcmlkT2JqLnJlc3VsdERhdGEuRGF0YSA9IHRlbXBsTGlzdERhdGE7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ3JpZEV2ZW50KGV2KSB7XHJcbiAgICB0aGlzLmNhbGxiYWNrRnVuY3Rpb24oZXYuUm93T2JqLCBldi5LZXkpO1xyXG4gIH1cclxuXHJcbiAgc2V0Q29uZmlndXJhdGlvbihkYXRhKSB7XHJcbiAgICB0aGlzLnZpZXdMaXN0ID0gZGF0YTtcclxuICAgIHRoaXMudmlld0luZm9PYmpMaXN0ID0gW107XHJcblxyXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb24ubGVuZ3RoOyBqKyspIHtcclxuICAgICAgdGhpcy52aWV3SW5mb09iakxpc3QucHVzaChqKTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLnF1ZXJ5c3RyaW5nICE9IG51bGwgJiZcclxuICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ucXVlcnlzdHJpbmcubmFtZSAhPSBcIlwiXHJcbiAgICAgICkge1xyXG4gICAgICAgIGxldCBxdWVyeU9iajogYW55O1xyXG4gICAgICAgIGlmICh0aGlzLnZpZXdHZW5lcmljT2JqLndoZXJlVmFsdWUubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5xdWVyeXN0cmluZy53aGVyZVF1ZXJ5ID0gKDxhbnk+KFxyXG4gICAgICAgICAgICBPYmplY3RcclxuICAgICAgICAgICkpLnZhbHVlcyh0aGlzLmdldExpc3QpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ucXVlcnlzdHJpbmcud2hlcmVRdWVyeSA9XHJcbiAgICAgICAgICAgIHRoaXMudmlld0dlbmVyaWNPYmoud2hlcmVWYWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1BhdGggIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9QYXRoICE9IFwiXCJcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy52aWV3R2VuZXJpY09iai52aWV3RW52aXJvbm1lbnQgIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgIHRoaXMudmlld0dlbmVyaWNPYmoudmlld0Vudmlyb25tZW50ICE9IFwiXCJcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0uZnVsbHBhdGggPVxyXG4gICAgICAgICAgICAgIHRoaXMudmlld0dlbmVyaWNPYmoudmlld0Vudmlyb25tZW50ICtcclxuICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9QYXRoO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLmZ1bGxwYXRoID1cclxuICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9Vcmw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5mdWxscGF0aCA9XHJcbiAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1VybDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEVYUEVSSU1FTlRBTCBCYXNlVmlldyBBUElcclxuICAgICAgICAvLyBUT0RPOiByZW1vdmUgYWZ0ZXIgc3RhYmxlXHJcbiAgICAgICAgaWYgKHRoaXMudmlld0dlbmVyaWNPYmouRXhwZXJpbWVudGFsKSB7XHJcbiAgICAgICAgICBjb25zdCBfZW52aXJvbm1lbnRVcmwgPSB0aGlzLnZpZXdHZW5lcmljT2JqLnZpZXdFbnZpcm9ubWVudC5zdWJzdHJpbmcoMCwgdGhpcy52aWV3R2VuZXJpY09iai52aWV3RW52aXJvbm1lbnQubGVuZ3RoLTMpO1xyXG4gICAgICAgICAgY29uc3QgX3FyeVZpZXcgPSB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ucXVlcnlzdHJpbmcubmFtZTtcclxuICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5mdWxscGF0aCA9IGAke19lbnZpcm9ubWVudFVybH0vdjEvQmFzZVZpZXcvJHtfcXJ5Vmlld31gXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEVORCBFWFBFUklNRU5UQUxcclxuXHJcbiAgICAgICAgcXVlcnlPYmogPSB7XHJcbiAgICAgICAgICBxdWVyeXN0cmluZzogdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLnF1ZXJ5c3RyaW5nLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5odHRwXHJcbiAgICAgICAgICAucG9zdCh0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0uZnVsbHBhdGgsIHF1ZXJ5T2JqKVxyXG4gICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy52aWV3SW5mb09iakxpc3RbaV0gPSByZXNwb25zZVtcIkRhdGFcIl1bMF07XHJcblxyXG4gICAgICAgICAgICAgIGZvciAoXHJcbiAgICAgICAgICAgICAgICBsZXQgeSA9IDA7XHJcbiAgICAgICAgICAgICAgICB5IDwgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIHkrK1xyXG4gICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0ucHJvcGVydHlMaXN0ICE9XHJcbiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5wcm9wZXJ0eUxpc3QubGVuZ3RoICE9XHJcbiAgICAgICAgICAgICAgICAgICAgMFxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5TGlzdCA9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLnByb3BlcnR5TGlzdDtcclxuICAgICAgICAgICAgICAgICAgbGV0IGNvbmNhdCA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgIGZvciAobGV0IHogPSAwOyB6IDwgcHJvcGVydHlMaXN0Lmxlbmd0aDsgeisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uY2F0ID1cclxuICAgICAgICAgICAgICAgICAgICAgIGNvbmNhdCArXHJcbiAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUxpc3Rbel0ucHJlZml4ICtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0luZm9PYmpMaXN0W2ldW3Byb3BlcnR5TGlzdFt6XS5wcm9wZXJ0eV0gK1xyXG4gICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlMaXN0W3pdLnN1ZmZpeDtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uY29uY2F0ID0gY29uY2F0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vc3dpdGNoIGNhc2VcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0udHlwZSA9PSBcInN3aXRjaFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgIGZvciAoXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHogPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHogPCB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uY2FzZS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgeisrXHJcbiAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBFbXB0eSA9IG5ldyBBcnJheTxib29sZWFuPigpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5jYXNlW3pdLkhpZGRlbiA9XHJcbiAgICAgICAgICAgICAgICAgICAgICBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAvL2NoZWNrIGhpZGVJZkVtcHR5XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmNhc2Vbel0ucmVzdWx0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5oaWRlSWZFbXB0eSAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5jYXNlW3pdLnJlc3VsdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuaGlkZUlmRW1wdHkgIT0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uY2FzZVt6XS5yZXN1bHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAudHlwZSAhPSBcImNvbmNhdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgRW1wdHkucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdJbmZvT2JqTGlzdFtpXVtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5jYXNlW3pdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXN1bHQucHJvcGVydHlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBdICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3SW5mb09iakxpc3RbaV1bXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5jYXNlW3pdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlc3VsdC5wcm9wZXJ0eVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSAhPSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdJbmZvT2JqTGlzdFtpXVtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmNhc2Vbel1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVzdWx0LnByb3BlcnR5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdICE9IFwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHlwZSBjb25jYXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5jYXNlW3pdLnJlc3VsdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnByb3BlcnR5TGlzdCAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uY2FzZVt6XS5yZXN1bHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wcm9wZXJ0eUxpc3QubGVuZ3RoICE9IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHlMaXN0ID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5jYXNlW3pdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXN1bHQucHJvcGVydHlMaXN0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb25jYXQgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGEgPSAwOyBhIDwgcHJvcGVydHlMaXN0Lmxlbmd0aDsgYSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25jYXQgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25jYXQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUxpc3RbYV0ucHJlZml4ICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3SW5mb09iakxpc3RbaV1bXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlMaXN0W2FdLnByb3BlcnR5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUxpc3RbYV0uc3VmZml4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRW1wdHkucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3SW5mb09iakxpc3RbaV1bXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlMaXN0W2FdLnByb3BlcnR5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3SW5mb09iakxpc3RbaV1bXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUxpc3RbYV0ucHJvcGVydHlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdICE9IG51bGwgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdJbmZvT2JqTGlzdFtpXVtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TGlzdFthXS5wcm9wZXJ0eVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gIT0gXCJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5jYXNlW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgelxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0ucmVzdWx0LmNvbmNhdCA9IGNvbmNhdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgRW1wdHkuaW5jbHVkZXModHJ1ZSkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmNhc2Vbel0ucmVzdWx0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmhpZGVJZkVtcHR5XHJcbiAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmNhc2Vbel0uSGlkZGVuID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uaXNIaWRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy9jb25jYXRcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmNhc2Vbel0ucmVzdWx0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnByb3BlcnR5TGlzdCAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmNhc2Vbel0ucmVzdWx0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnByb3BlcnR5TGlzdC5sZW5ndGggIT0gMFxyXG4gICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5TGlzdCA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmNhc2Vbel0ucmVzdWx0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHJvcGVydHlMaXN0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29uY2F0ID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYSA9IDA7IGEgPCBwcm9wZXJ0eUxpc3QubGVuZ3RoOyBhKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25jYXQgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uY2F0ICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TGlzdFthXS5wcmVmaXggK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3SW5mb09iakxpc3RbaV1bcHJvcGVydHlMaXN0W2FdLnByb3BlcnR5XSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUxpc3RbYV0uc3VmZml4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5jYXNlW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHpcclxuICAgICAgICAgICAgICAgICAgICAgICAgXS5yZXN1bHQuY29uY2F0ID0gY29uY2F0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLnR5cGUgPT0gXCJsaW5rXCIgJiZcclxuICAgICAgICAgICAgICAgICAgKHRoaXMudmlld0dlbmVyaWNPYmoubmF2aWdhdGlvbkNvbnN0ICE9IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0dlbmVyaWNPYmoubmF2aWdhdGlvbkNvbnN0ICE9IG51bGwpXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IHRlbXBMaW5rID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdHZW5lcmljT2JqLm5hdmlnYXRpb25Db25zdFtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5wYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgICAgaWYgKHRlbXBMaW5rICE9IHVuZGVmaW5lZCAmJiB0ZW1wTGluayAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLnBhdGggPSB0ZW1wTGluaztcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0udHlwZSA9PSBcImxpbmtcIiAmJlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnZpZXdHZW5lcmljT2JqLmxpc3RFbnZpcm9ubWVudHMgIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudmlld0dlbmVyaWNPYmoubGlzdEVudmlyb25tZW50cy5sZW5ndGggIT0gMFxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgIGZvciAoXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHogPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHogPCB0aGlzLnZpZXdHZW5lcmljT2JqLmxpc3RFbnZpcm9ubWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgIHorK1xyXG4gICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uZW52aXJvbm1lbnQgPT1cclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0dlbmVyaWNPYmoubGlzdEVudmlyb25tZW50c1t6XS5lbnZpcm9ubWVudFxyXG4gICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmlzRnVsbHBhdGggPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmZ1bGxwYXRoID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3R2VuZXJpY09iai5saXN0RW52aXJvbm1lbnRzW3pdLnVybCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5wYXRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0udHlwZSA9PSBcImxpbmtcIlxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5pc0Z1bGxwYXRoID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5mdWxscGF0aCA9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLnBhdGg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuaXNSZWFkeSA9IHRydWU7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9QYXRoICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvUGF0aCAhPSBcIlwiXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5lbnZpcm9ubWVudCAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvUGF0aCAhPSBcIlwiXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgZm9yIChcclxuICAgICAgICAgICAgICBsZXQgeiA9IDA7XHJcbiAgICAgICAgICAgICAgeiA8IHRoaXMudmlld0dlbmVyaWNPYmoubGlzdEVudmlyb25tZW50cy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgeisrXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5lbnZpcm9ubWVudCA9PVxyXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3R2VuZXJpY09iai5saXN0RW52aXJvbm1lbnRzW3pdLmVudmlyb25tZW50XHJcbiAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0uZnVsbHBhdGggPVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnZpZXdHZW5lcmljT2JqLmxpc3RFbnZpcm9ubWVudHNbel0udXJsICtcclxuICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvUGF0aDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgdGhpcy52aWV3R2VuZXJpY09iai52aWV3RW52aXJvbm1lbnQgIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgIHRoaXMudmlld0dlbmVyaWNPYmoudmlld0Vudmlyb25tZW50ICE9IFwiXCJcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0uZnVsbHBhdGggPVxyXG4gICAgICAgICAgICAgIHRoaXMudmlld0dlbmVyaWNPYmoudmlld0Vudmlyb25tZW50ICtcclxuICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9QYXRoO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLmZ1bGxwYXRoID1cclxuICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9Vcmw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5mdWxscGF0aCA9XHJcbiAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1VybDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHJlcU9iaiA9IHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5yZXFPYmogfHwgdGhpcy5nZXRMaXN0O1xyXG4gICAgICAgIGlmICh0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ucmVxT2JqICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKFxyXG4gICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ucmVxT2JqXHJcbiAgICAgICAgICApKSB7XHJcbiAgICAgICAgICAgIHJlcU9ialtrZXldID0gdGhpcy5nZXRMaXN0W3ZhbHVlIGFzIHN0cmluZ10gfHwgdGhpcy52aWV3R2VuZXJpY09iai5kaWN0c1t2YWx1ZSBhcyBzdHJpbmddO1xyXG4gICAgICAgICAgICBpZiAocmVxT2JqW2tleV0gPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgcmVxT2JqW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5odHRwLnBvc3QodGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLmZ1bGxwYXRoLCByZXFPYmopLnN1YnNjcmliZShcclxuICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLnJlc09iak5hbWUgPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5yZXNPYmpOYW1lID09PSBcIlwiXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHRoaXMudmlld0luZm9PYmpMaXN0W2ldID0gcmVzcG9uc2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy52aWV3SW5mb09iakxpc3RbaV0gPVxyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VbdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLnJlc09iak5hbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuaXNSZWFkeSA9IHRydWU7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SlNPTih1cmw6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh1cmwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBHZXRDb29raWUoY29va2llU2VydmljZTogQ29va2llU2VydmljZSwga2V5OiBzdHJpbmcpIHtcclxuICAgIGxldCB2YWx1ZSA9IGNvb2tpZVNlcnZpY2UuZ2V0KGtleSk7XHJcbiAgICBpZiAodmFsdWUgPT0gdW5kZWZpbmVkIHx8IHZhbHVlLnRyaW0oKSA9PSBcIlwiKSByZXR1cm4gbnVsbDtcclxuICAgIHJldHVybiB0aGlzLkRlY3J5cHRTdHJpbmcodmFsdWUsIFwiQWRJbnNGT1UxMjM0NTY3OFwiKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgRGVjcnlwdFN0cmluZyhjaGlwcGVyVGV4dDogc3RyaW5nLCBjaGlwcGVyS2V5OiBzdHJpbmcpIHtcclxuICAgIGlmIChcclxuICAgICAgY2hpcHBlcktleSA9PSB1bmRlZmluZWQgfHxcclxuICAgICAgY2hpcHBlcktleS50cmltKCkgPT0gXCJcIiB8fFxyXG4gICAgICBjaGlwcGVyVGV4dCA9PSB1bmRlZmluZWQgfHxcclxuICAgICAgY2hpcHBlclRleHQudHJpbSgpID09IFwiXCJcclxuICAgIClcclxuICAgICAgcmV0dXJuIGNoaXBwZXJUZXh0O1xyXG4gICAgbGV0IGNoaXBwZXJLZXlBcnIgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShjaGlwcGVyS2V5KTtcclxuICAgIGxldCBpdiA9IENyeXB0b0pTLmxpYi5Xb3JkQXJyYXkuY3JlYXRlKFsweDAwLCAweDAwLCAweDAwLCAweDAwXSk7XHJcbiAgICBsZXQgZGVjcnlwdGVkID0gQ3J5cHRvSlMuQUVTLmRlY3J5cHQoY2hpcHBlclRleHQsIGNoaXBwZXJLZXlBcnIsIHtcclxuICAgICAgaXY6IGl2LFxyXG4gICAgfSk7XHJcbiAgICBsZXQgcGxhaW5UZXh0ID0gZGVjcnlwdGVkLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcclxuICAgIHJldHVybiBwbGFpblRleHQ7XHJcbiAgfVxyXG5cclxuICBnZW5BY3Rpb24odmlld09iaiwgcGFyYW0pIHtcclxuICAgIGxldCBhcnJMaXN0OiBhbnkgPSB7fTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFtLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB2aWV3T2JqW3BhcmFtW2ldLnR5cGVdICE9IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgIHZpZXdPYmpbcGFyYW1baV0ucHJvcGVydHldICE9IHVuZGVmaW5lZFxyXG4gICAgICApIHtcclxuICAgICAgICBhcnJMaXN0W3BhcmFtW2ldLnR5cGVdID0gdmlld09ialtwYXJhbVtpXS5wcm9wZXJ0eV07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYXJyTGlzdFtwYXJhbVtpXS50eXBlXSA9IHBhcmFtW2ldLnByb3BlcnR5O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2V0IHN0YXRlIG9mIGRhdGEgdG8gcm91dGVyIHNlcnZpY2VcclxuICAgIHJldHVybiB0aGlzLm5neFJvdXRlci5jcmVhdGVRdWVyeVBhcmFtcyhhcnJMaXN0KTtcclxuICB9XHJcblxyXG4gIGdlblJvdXRlckxpbmsodXJsTGluazogc3RyaW5nKSB7XHJcbiAgICBsZXQgdGVtcExpbmsgPSB1cmxMaW5rO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnZpZXdHZW5lcmljT2JqLm5hdmlnYXRpb25Db25zdCAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgdGhpcy52aWV3R2VuZXJpY09iai5uYXZpZ2F0aW9uQ29uc3RbdXJsTGlua10gIT0gbnVsbFxyXG4gICAgKSB7XHJcbiAgICAgIHRlbXBMaW5rID0gdGhpcy52aWV3R2VuZXJpY09iai5uYXZpZ2F0aW9uQ29uc3RbdXJsTGlua107XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGVtcExpbms7XHJcbiAgfVxyXG5cclxuICByZWRpcmVjdEZ1bGxQYXRoKGZ1bGxwYXRoOiBzdHJpbmcsIHBhcmFtOiBPYmplY3QsIHRhcmdldDogc3RyaW5nLCBpdGVtOiBhbnkpIHtcclxuICAgIGxldCBxdWVyeVBhcmFtID0gXCJcIjtcclxuICAgIGxldCBfZnVsbHBhdGggPSBmdWxscGF0aCB8fCBcIlwiO1xyXG4gICAgXHJcbiAgICBpZiAoX2Z1bGxwYXRoID09IFwiXCIpIHtcclxuICAgICAgX2Z1bGxwYXRoID0gdGhpcy5nZW5GdWxscGF0aChpdGVtLmVudmlyb25tZW50LCBpdGVtLnBhdGgpXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgTGlzdE9iaiA9IE9iamVjdC5rZXlzKHBhcmFtKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTGlzdE9iai5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAocXVlcnlQYXJhbSAhPSBcIlwiKSB7XHJcbiAgICAgICAgcXVlcnlQYXJhbSA9IHF1ZXJ5UGFyYW0gKyBcIiZcIiArIExpc3RPYmpbaV0gKyBcIj1cIiArIHBhcmFtW0xpc3RPYmpbaV1dO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHF1ZXJ5UGFyYW0gPSBMaXN0T2JqW2ldICsgXCI9XCIgKyBwYXJhbVtMaXN0T2JqW2ldXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgd2luZG93Lm9wZW4oX2Z1bGxwYXRoICsgXCI/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==