vcomply-workflow-engine 4.0.4 → 4.0.6

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.
@@ -0,0 +1,5 @@
1
+ export const MULTIPLE_RISKS = {
2
+ LINKED_GRC: 'Linked GRC Object(s)',
3
+ GRC_ERROR_MESSAGE: 'The selected GRC object is not linked to the correct Responsibility Center. Therefore, this GRC object will not be associated with this risk.',
4
+ };
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlwbGUtcmlza3MuY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdngtd29ya2Zsb3ctZW5naW5lL3NyYy9saWIvY29uc3RhbnRzL211bHRpcGxlLXJpc2tzLmNvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUc7SUFDNUIsVUFBVSxFQUFFLHNCQUFzQjtJQUNsQyxpQkFBaUIsRUFDZiwrSUFBK0k7Q0FDbEosQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBNVUxUSVBMRV9SSVNLUyA9IHtcclxuICBMSU5LRURfR1JDOiAnTGlua2VkIEdSQyBPYmplY3QocyknLFxyXG4gIEdSQ19FUlJPUl9NRVNTQUdFOlxyXG4gICAgJ1RoZSBzZWxlY3RlZCBHUkMgb2JqZWN0IGlzIG5vdCBsaW5rZWQgdG8gdGhlIGNvcnJlY3QgUmVzcG9uc2liaWxpdHkgQ2VudGVyLiBUaGVyZWZvcmUsIHRoaXMgR1JDIG9iamVjdCB3aWxsIG5vdCBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcyByaXNrLicsXHJcbn07XHJcbiJdfQ==
@@ -1,4 +1,5 @@
1
1
  import { Component, Input, EventEmitter, Output, } from '@angular/core';
2
+ import { MULTIPLE_RISKS } from '../../constants/multiple-risks.constants';
2
3
  import * as i0 from "@angular/core";
3
4
  import * as i1 from "@angular/common";
4
5
  import * as i2 from "../../ui-kit/tooltip/tooltip.directive";
@@ -6,10 +7,13 @@ import * as i3 from "../v-loader/loader-inline/loader-inline.component";
6
7
  export class BulkViewComponent {
7
8
  constructor() {
8
9
  this.loader = false;
10
+ this.ffLinkedGrcObjects = false;
9
11
  this.submitRiskBulkUpload = new EventEmitter();
10
12
  this.cancel = new EventEmitter();
11
13
  this.finalRisks = 0;
12
14
  this.showCompleteAssessmentButton = false;
15
+ this.LINKED_GRC = MULTIPLE_RISKS.LINKED_GRC;
16
+ this.GRC_ERROR_MESSAGE = MULTIPLE_RISKS.GRC_ERROR_MESSAGE;
13
17
  }
14
18
  ngOnChanges() {
15
19
  if (this.riskBulkUpload) {
@@ -50,11 +54,11 @@ export class BulkViewComponent {
50
54
  this.cancel.emit();
51
55
  }
52
56
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BulkViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
53
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: BulkViewComponent, selector: "app-bulk-view", inputs: { riskBulkUpload: "riskBulkUpload", templateInfo: "templateInfo", fileName: "fileName", assessmentDaysEnable: "assessmentDaysEnable", defaultOwner: "defaultOwner", loader: "loader" }, outputs: { submitRiskBulkUpload: "submitRiskBulkUpload", cancel: "cancel" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"bulk-view\">\r\n <div class=\"bulk-view-head\">\r\n <h2 class=\"bulk-view-title\">\r\n {{ fileName }}\r\n </h2>\r\n </div>\r\n <div class=\"bulk-view-body\">\r\n <div class=\"exel-view\">\r\n <div class=\"exel-view-row head\">\r\n <div class=\"exel-view-column sl-no\">#</div>\r\n <div\r\n class=\"exel-view-column\"\r\n [class.two-column]=\"heading && i === 5\"\r\n *ngFor=\"let heading of riskBulkUpload?.header; let i = index\"\r\n [class.large]=\"heading && heading.startsWith('Inherent')\"\r\n >\r\n <ng-container\r\n *ngIf=\"heading && !heading.startsWith('Inherent') && !(i === 5)\"\r\n >\r\n {{ heading.includes(\"*\") ? heading.replace(\"*\", \"\") : heading }}\r\n <span *ngIf=\"heading.includes('*')\" class=\"required\">*</span>\r\n </ng-container>\r\n <ng-container *ngIf=\"heading && heading.startsWith('Inherent')\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Inherent Risk Assessment</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\">\r\n <div\r\n class=\"exel-view-column\"\r\n *ngFor=\"\r\n let weightAgeFactor of riskBulkUpload.weightFactors\r\n | slice : 2\r\n \"\r\n >\r\n {{ weightAgeFactor }}\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"heading && i === 5\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">\r\n {{ heading.includes(\"*\") ? heading.replace(\"*\", \"\") : heading }}\r\n <span *ngIf=\"heading.includes('*')\" class=\"required\">*</span>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div\r\n class=\"exel-view-column\"\r\n *ngFor=\"\r\n let weightAgeFactor of riskBulkUpload?.weightFactors\r\n | slice : 0 : 2\r\n \"\r\n >\r\n {{\r\n weightAgeFactor.includes(\"*\")\r\n ? weightAgeFactor.replace(\"*\", \"\")\r\n : weightAgeFactor\r\n }}\r\n <span *ngIf=\"weightAgeFactor.includes('*')\" class=\"required\"\r\n >*</span\r\n >\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div\r\n class=\"exel-view-row\"\r\n *ngFor=\"let risk of riskBulkUpload.risks; let i = index\"\r\n >\r\n <div class=\"exel-view-column sl-no\" [class.error]=\"!risk.isValid\">\r\n {{ i + 1 }}\r\n </div>\r\n\r\n <div class=\"exel-view-column\" [class.error]=\"!risk?.riskName\">\r\n {{ risk?.riskName }}\r\n <i\r\n *ngIf=\"!risk?.riskName\"\r\n class=\"icons\"\r\n [appTooltip]=\"'Risk Name must be populated.'\"\r\n placement=\"bottom-right\"\r\n type=\"white\"\r\n delay=\"0\"\r\n [tooltipMandatory]=\"true\"\r\n >&#xe932;</i\r\n >\r\n </div>\r\n\r\n <div class=\"exel-view-column\">{{ risk?.description }}</div>\r\n\r\n <div class=\"exel-view-column\" [class.error]=\"!risk?.rcName\">\r\n {{ risk?.rcName }}\r\n <i\r\n *ngIf=\"!risk?.rcName\"\r\n class=\"icons\"\r\n [appTooltip]=\"'Assign this risk to a Responsibility Center.'\"\r\n placement=\"bottom-right\"\r\n type=\"white\"\r\n delay=\"0\"\r\n [tooltipMandatory]=\"true\"\r\n >&#xe932;</i\r\n >\r\n </div>\r\n <div class=\"exel-view-column\">{{ risk?.owner }}</div>\r\n <div class=\"exel-view-column\">{{ risk?.riskOwner }}</div>\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column\" [class.error]=\"!risk?.isValidFrequency\">\r\n {{ risk?.frequency }}\r\n <i\r\n *ngIf=\"!risk?.isValidFrequency\"\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'Set a frequency for the completion of the inherent risk assessment.'\r\n \"\r\n placement=\"bottom-right\"\r\n type=\"white\"\r\n delay=\"0\"\r\n [tooltipMandatory]=\"true\"\r\n >&#xe932;</i\r\n >\r\n </div>\r\n <div class=\"exel-view-column\" [class.error]=\"false\">\r\n {{ risk?.emailReminder }}\r\n </div>\r\n </div>\r\n <div\r\n class=\"exel-view-column\"\r\n [class.error]=\"\r\n (risk?.owner && risk?.owner == risk?.overseer) ||\r\n (!risk?.owner && defaultOwner == risk?.overseer)\r\n \"\r\n >\r\n {{ risk?.overseer }}\r\n <i\r\n *ngIf=\"\r\n (risk?.owner && risk?.owner == risk?.overseer) ||\r\n (!risk?.owner && defaultOwner == risk?.overseer)\r\n \"\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n (risk?.owner\r\n ? 'The Risk Owner cannot also be the'\r\n : 'You cannot be a') +\r\n ' Oversight of the risk. Select another user as the Oversight of this risk.'\r\n \"\r\n placement=\"bottom-right\"\r\n type=\"white\"\r\n delay=\"0\"\r\n [tooltipMandatory]=\"true\"\r\n >&#xe932;</i\r\n >\r\n </div>\r\n <div\r\n *ngIf=\"\r\n riskBulkUpload?.header &&\r\n riskBulkUpload?.header?.includes('Recommended Mitigation Priority')\r\n \"\r\n class=\"exel-view-column\"\r\n >\r\n {{ risk?.mitigationPriority }}\r\n </div>\r\n <div class=\"exel-view-column\">{{ risk?.mitigationPlans }}</div>\r\n <div class=\"exel-view-column\">{{ risk?.riskLabel }}</div>\r\n <!-- <div class=\"exel-view-column\" *ngIf=\"assessmentDaysEnable\" [class.error]=\"!risk?.assessmentDeadLine\">\r\n {{risk?.assessmentDeadLine}}\r\n <i *ngIf=\"!risk?.assessmentDeadLine\" class=\"icons\"\r\n [appTooltip]=\"'Set a deadline for the completion of the inherent risk assessment.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\">&#xe932;</i>\r\n </div> -->\r\n <div class=\"exel-view-row multi-column\">\r\n <div\r\n class=\"exel-view-column\"\r\n [class.error]=\"\r\n risk?.likelihood &&\r\n !templateInfo?.likelihood.includes(risk?.likelihood)\r\n \"\r\n >\r\n {{ risk?.likelihood }}\r\n </div>\r\n <div\r\n class=\"exel-view-column\"\r\n [class.error]=\"\r\n risk?.impact && !templateInfo?.impact.includes(risk?.impact)\r\n \"\r\n >\r\n {{ risk?.impact }}\r\n </div>\r\n <div\r\n class=\"exel-view-column\"\r\n [class.error]=\"\r\n risk?.velocity && !templateInfo?.velocity.includes(risk?.velocity)\r\n \"\r\n *ngIf=\"riskBulkUpload?.weightFactors?.includes('Velocity')\"\r\n >\r\n {{ risk?.velocity }}\r\n </div>\r\n <div\r\n class=\"exel-view-column\"\r\n [class.error]=\"\r\n risk?.vulnerability &&\r\n !templateInfo?.vulnerability.includes(risk?.vulnerability)\r\n \"\r\n *ngIf=\"riskBulkUpload?.weightFactors?.includes('Vulnerability')\"\r\n >\r\n {{ risk?.vulnerability }}\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n riskBulkUpload?.header &&\r\n riskBulkUpload?.header?.includes(\r\n 'Do you want to apply the same risk ratings for all Responsibility Centers?'\r\n )\r\n \"\r\n class=\"exel-view-column\"\r\n >\r\n {{ risk?.applySameRiskRating }}\r\n </div>\r\n <!-- <div class=\"exel-view-column\">{{risk?.customField1}}</div>\r\n <div class=\"exel-view-column\">{{risk?.customField2}}</div> -->\r\n\r\n <ng-container *ngIf=\"risk?.customTag\">\r\n <div class=\"exel-view-column\" *ngFor=\"let tag of risk?.customTag\">\r\n {{ tag?.custom_tag_value }}\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"bulk-view-footer\">\r\n <div class=\"left\">\r\n <p>\r\n {{ finalRisks }} out of {{ riskBulkUpload?.risks?.length }} risks will\r\n be added to the Risk Register.\r\n </p>\r\n </div>\r\n <div class=\"right\">\r\n <button (click)=\"close()\">Cancel</button>\r\n <button\r\n (click)=\"submit(false)\"\r\n [disabled]=\"finalRisks < 1\"\r\n class=\"blue\"\r\n >\r\n Add Risks\r\n </button>\r\n <button\r\n (click)=\"submit(true)\"\r\n *ngIf=\"showCompleteAssessmentButton\"\r\n [disabled]=\"finalRisks < 1\"\r\n class=\"blue\"\r\n >\r\n Add Risks And Complete Assessment\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <app-loader-inline *ngIf=\"loader\"></app-loader-inline>\r\n</div>\r\n", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";::-webkit-scrollbar-thumb,::-webkit-scrollbar-thumb:hover{background:#747576;border-radius:16px}::-webkit-scrollbar{height:15px}.bulk-view{position:fixed;inset:0;z-index:11}.bulk-view-head{height:60px;padding:20px 24px;background:#161b2f;display:flex;justify-content:flex-start}.bulk-view-title{font-size:16px;line-height:20px;font-weight:400;margin:0;color:#fff}.bulk-view-body{height:calc(100vh - 110px);overflow:auto;width:100%;background:#fff}.bulk-view-body .exel-view{display:block}.bulk-view-body .exel-view-row{display:flex;width:100%}.bulk-view-body .exel-view-row.head .exel-view-column{font-weight:500;font-size:14px;min-height:26px;background:#f1f1f1;padding:0}.bulk-view-body .exel-view-row.two-column .exel-view-column,.bulk-view-body .exel-view-row.three-column .exel-view-column,.bulk-view-body .exel-view-row.four-column .exel-view-column{min-width:250px!important}.bulk-view-body .exel-view-row.multi-column .exel-view-column{width:140px;min-width:140px}.bulk-view-body .exel-view-column{width:300px;min-width:300px;padding:0 10px;border-right:1px solid #dcdcdc;border-bottom:1px solid #dcdcdc;display:flex;align-items:center;justify-content:center;text-align:center;word-break:break-all;line-height:16px;font-size:12px;color:#161b2f;flex-wrap:wrap;position:relative}.bulk-view-body .exel-view-column.two-column{width:500px;min-width:500px!important}.bulk-view-body .exel-view-column.three-column{width:750px;min-width:750px!important}.bulk-view-body .exel-view-column.four-column{width:1000px;min-width:1000px!important}.bulk-view-body .exel-view-column i.icons{position:absolute;top:8px;right:10px;cursor:pointer;color:#d93b41}.bulk-view-body .exel-view-column.large{width:100%;min-width:auto}.bulk-view-body .exel-view-column.error{border:1px solid #eb2424}.bulk-view-body .exel-view-column span.required{color:#eb2424}.bulk-view-body .exel-view-column .exel-view-row .exel-view-column{width:100%}.bulk-view-body .exel-view-column.sl-no{background:#f1f1f1;width:60px;min-width:60px;min-height:30px;font-weight:400}.bulk-view-footer{height:50px;box-shadow:0 0 15px #1e5dd259;padding:10px 20px;position:fixed;width:100%;bottom:0;display:flex;align-items:center;justify-content:space-between;background:#fff}.bulk-view-footer .left p{color:#747576;font-size:13px;font-weight:500;margin:0}.bulk-view-footer .right button{font-size:12px;background:#fff;border:1px solid #dcdcdc;color:#747576;border-radius:2px;padding:8px 18px;cursor:pointer;text-transform:uppercase}.bulk-view-footer .right button+button{margin-left:4px}.bulk-view-footer .right button.blue{color:#fff;background:#1e5dd3}.bulk-view-footer .right button:disabled{background:#f1f1f1;border-color:#f1f1f1;pointer-events:none;cursor:not-allowed;color:#747576}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ToolTipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "placement", "type", "tooltipMandatory", "showTooltip", "animate"] }, { kind: "component", type: i3.LoaderInlineComponent, selector: "app-loader-inline" }, { kind: "pipe", type: i1.SlicePipe, name: "slice" }] }); }
57
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: BulkViewComponent, selector: "app-bulk-view", inputs: { riskBulkUpload: "riskBulkUpload", templateInfo: "templateInfo", fileName: "fileName", assessmentDaysEnable: "assessmentDaysEnable", defaultOwner: "defaultOwner", loader: "loader", ffLinkedGrcObjects: "ffLinkedGrcObjects" }, outputs: { submitRiskBulkUpload: "submitRiskBulkUpload", cancel: "cancel" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"bulk-view\">\r\n <div class=\"bulk-view-head\">\r\n <h2 class=\"bulk-view-title\">\r\n {{ fileName }}\r\n </h2>\r\n </div>\r\n <div class=\"bulk-view-body\">\r\n <div class=\"exel-view\">\r\n <div class=\"exel-view-row head\">\r\n <div class=\"exel-view-column sl-no\">#</div>\r\n <div\r\n class=\"exel-view-column\"\r\n [class.two-column]=\"heading && i === 5\"\r\n *ngFor=\"let heading of riskBulkUpload?.header; let i = index\"\r\n [class.large]=\"heading && heading.startsWith('Inherent')\"\r\n >\r\n <ng-container\r\n *ngIf=\"heading && !heading.startsWith('Inherent') && !(i === 5)\"\r\n >\r\n {{ heading.includes(\"*\") ? heading.replace(\"*\", \"\") : heading }}\r\n <span *ngIf=\"heading.includes('*')\" class=\"required\">*</span>\r\n </ng-container>\r\n <ng-container *ngIf=\"heading && heading.startsWith('Inherent')\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Inherent Risk Assessment</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\">\r\n <div\r\n class=\"exel-view-column\"\r\n *ngFor=\"\r\n let weightAgeFactor of riskBulkUpload.weightFactors\r\n | slice : 2\r\n \"\r\n >\r\n {{ weightAgeFactor }}\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"heading && i === 5\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">\r\n {{ heading.includes(\"*\") ? heading.replace(\"*\", \"\") : heading }}\r\n <span *ngIf=\"heading.includes('*')\" class=\"required\">*</span>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div\r\n class=\"exel-view-column\"\r\n *ngFor=\"\r\n let weightAgeFactor of riskBulkUpload?.weightFactors\r\n | slice : 0 : 2\r\n \"\r\n >\r\n {{\r\n weightAgeFactor.includes(\"*\")\r\n ? weightAgeFactor.replace(\"*\", \"\")\r\n : weightAgeFactor\r\n }}\r\n <span *ngIf=\"weightAgeFactor.includes('*')\" class=\"required\"\r\n >*</span\r\n >\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div\r\n class=\"exel-view-row\"\r\n *ngFor=\"let risk of riskBulkUpload.risks; let i = index\"\r\n >\r\n <div class=\"exel-view-column sl-no\" [class.error]=\"!risk.isValid\">\r\n {{ i + 1 }}\r\n </div>\r\n\r\n <div class=\"exel-view-column\" [class.error]=\"!risk?.riskName\">\r\n {{ risk?.riskName }}\r\n <i\r\n *ngIf=\"!risk?.riskName\"\r\n class=\"icons\"\r\n [appTooltip]=\"'Risk Name must be populated.'\"\r\n placement=\"bottom-right\"\r\n type=\"white\"\r\n delay=\"0\"\r\n [tooltipMandatory]=\"true\"\r\n >&#xe932;</i\r\n >\r\n </div>\r\n\r\n <div class=\"exel-view-column\">{{ risk?.description }}</div>\r\n\r\n <div class=\"exel-view-column\" [class.error]=\"!risk?.rcName\">\r\n {{ risk?.rcName }}\r\n <i\r\n *ngIf=\"!risk?.rcName\"\r\n class=\"icons\"\r\n [appTooltip]=\"'Assign this risk to a Responsibility Center.'\"\r\n placement=\"bottom-right\"\r\n type=\"white\"\r\n delay=\"0\"\r\n [tooltipMandatory]=\"true\"\r\n >&#xe932;</i\r\n >\r\n </div>\r\n <div class=\"exel-view-column\">{{ risk?.owner }}</div>\r\n <div class=\"exel-view-column\">{{ risk?.riskOwner }}</div>\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column\" [class.error]=\"!risk?.isValidFrequency\">\r\n {{ risk?.frequency }}\r\n <i\r\n *ngIf=\"!risk?.isValidFrequency\"\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'Set a frequency for the completion of the inherent risk assessment.'\r\n \"\r\n placement=\"bottom-right\"\r\n type=\"white\"\r\n delay=\"0\"\r\n [tooltipMandatory]=\"true\"\r\n >&#xe932;</i\r\n >\r\n </div>\r\n <div class=\"exel-view-column\" [class.error]=\"false\">\r\n {{ risk?.emailReminder }}\r\n </div>\r\n </div>\r\n <div\r\n class=\"exel-view-column\"\r\n [class.error]=\"\r\n (risk?.owner && risk?.owner == risk?.overseer) ||\r\n (!risk?.owner && defaultOwner == risk?.overseer)\r\n \"\r\n >\r\n {{ risk?.overseer }}\r\n <i\r\n *ngIf=\"\r\n (risk?.owner && risk?.owner == risk?.overseer) ||\r\n (!risk?.owner && defaultOwner == risk?.overseer)\r\n \"\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n (risk?.owner\r\n ? 'The Risk Owner cannot also be the'\r\n : 'You cannot be a') +\r\n ' Oversight of the risk. Select another user as the Oversight of this risk.'\r\n \"\r\n placement=\"bottom-right\"\r\n type=\"white\"\r\n delay=\"0\"\r\n [tooltipMandatory]=\"true\"\r\n >&#xe932;</i\r\n >\r\n </div>\r\n <div\r\n *ngIf=\"\r\n riskBulkUpload?.header &&\r\n riskBulkUpload?.header?.includes('Recommended Mitigation Priority')\r\n \"\r\n class=\"exel-view-column\"\r\n >\r\n {{ risk?.mitigationPriority }}\r\n </div>\r\n <div class=\"exel-view-column\">{{ risk?.mitigationPlans }}</div>\r\n <div class=\"exel-view-column\">{{ risk?.riskLabel }}</div>\r\n <!-- <div class=\"exel-view-column\" *ngIf=\"assessmentDaysEnable\" [class.error]=\"!risk?.assessmentDeadLine\">\r\n {{risk?.assessmentDeadLine}}\r\n <i *ngIf=\"!risk?.assessmentDeadLine\" class=\"icons\"\r\n [appTooltip]=\"'Set a deadline for the completion of the inherent risk assessment.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\">&#xe932;</i>\r\n </div> -->\r\n <div class=\"exel-view-row multi-column\">\r\n <div\r\n class=\"exel-view-column\"\r\n [class.error]=\"\r\n risk?.likelihood &&\r\n !templateInfo?.likelihood.includes(risk?.likelihood)\r\n \"\r\n >\r\n {{ risk?.likelihood }}\r\n </div>\r\n <div\r\n class=\"exel-view-column\"\r\n [class.error]=\"\r\n risk?.impact && !templateInfo?.impact.includes(risk?.impact)\r\n \"\r\n >\r\n {{ risk?.impact }}\r\n </div>\r\n <div\r\n class=\"exel-view-column\"\r\n [class.error]=\"\r\n risk?.velocity && !templateInfo?.velocity.includes(risk?.velocity)\r\n \"\r\n *ngIf=\"riskBulkUpload?.weightFactors?.includes('Velocity')\"\r\n >\r\n {{ risk?.velocity }}\r\n </div>\r\n <div\r\n class=\"exel-view-column\"\r\n [class.error]=\"\r\n risk?.vulnerability &&\r\n !templateInfo?.vulnerability.includes(risk?.vulnerability)\r\n \"\r\n *ngIf=\"riskBulkUpload?.weightFactors?.includes('Vulnerability')\"\r\n >\r\n {{ risk?.vulnerability }}\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n riskBulkUpload?.header &&\r\n riskBulkUpload?.header?.includes(\r\n 'Do you want to apply the same risk ratings for all Responsibility Centers?'\r\n )\r\n \"\r\n class=\"exel-view-column\"\r\n >\r\n {{ risk?.applySameRiskRating }}\r\n </div>\r\n <div\r\n *ngIf=\"\r\n ffLinkedGrcObjects &&\r\n riskBulkUpload?.header &&\r\n riskBulkUpload?.header?.includes(LINKED_GRC)\r\n \"\r\n class=\"exel-view-column\"\r\n [class.error]=\"risk?.isGrcNotValid\"\r\n >\r\n {{ risk?.linkedGrcObject }}\r\n <i\r\n *ngIf=\"risk?.isGrcNotValid\"\r\n class=\"icons\"\r\n [appTooltip]=\"GRC_ERROR_MESSAGE\"\r\n placement=\"bottom-right\"\r\n type=\"white\"\r\n delay=\"0\"\r\n [tooltipMandatory]=\"true\"\r\n >&#xe932;</i\r\n >\r\n </div>\r\n <!-- <div class=\"exel-view-column\">{{risk?.customField1}}</div>\r\n <div class=\"exel-view-column\">{{risk?.customField2}}</div> -->\r\n\r\n <ng-container *ngIf=\"risk?.customTag\">\r\n <div class=\"exel-view-column\" *ngFor=\"let tag of risk?.customTag\">\r\n {{ tag?.custom_tag_value }}\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"bulk-view-footer\">\r\n <div class=\"left\">\r\n <p>\r\n {{ finalRisks }} out of {{ riskBulkUpload?.risks?.length }} risks will\r\n be added to the Risk Register.\r\n </p>\r\n </div>\r\n <div class=\"right\">\r\n <button (click)=\"close()\">Cancel</button>\r\n <button\r\n (click)=\"submit(false)\"\r\n [disabled]=\"finalRisks < 1\"\r\n class=\"blue\"\r\n >\r\n Add Risks\r\n </button>\r\n <button\r\n (click)=\"submit(true)\"\r\n *ngIf=\"showCompleteAssessmentButton\"\r\n [disabled]=\"finalRisks < 1\"\r\n class=\"blue\"\r\n >\r\n Add Risks And Complete Assessment\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <app-loader-inline *ngIf=\"loader\"></app-loader-inline>\r\n</div>\r\n", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";::-webkit-scrollbar-thumb,::-webkit-scrollbar-thumb:hover{background:#747576;border-radius:16px}::-webkit-scrollbar{height:15px}.bulk-view{position:fixed;inset:0;z-index:11}.bulk-view-head{height:60px;padding:20px 24px;background:#161b2f;display:flex;justify-content:flex-start}.bulk-view-title{font-size:16px;line-height:20px;font-weight:400;margin:0;color:#fff}.bulk-view-body{height:calc(100vh - 110px);overflow:auto;width:100%;background:#fff}.bulk-view-body .exel-view{display:block}.bulk-view-body .exel-view-row{display:flex;width:100%}.bulk-view-body .exel-view-row.head .exel-view-column{font-weight:500;font-size:14px;min-height:26px;background:#f1f1f1;padding:0}.bulk-view-body .exel-view-row.two-column .exel-view-column,.bulk-view-body .exel-view-row.three-column .exel-view-column,.bulk-view-body .exel-view-row.four-column .exel-view-column{min-width:250px!important}.bulk-view-body .exel-view-row.multi-column .exel-view-column{width:140px;min-width:140px}.bulk-view-body .exel-view-column{width:300px;min-width:300px;padding:0 10px;border-right:1px solid #dcdcdc;border-bottom:1px solid #dcdcdc;display:flex;align-items:center;justify-content:center;text-align:center;word-break:break-all;line-height:16px;font-size:12px;color:#161b2f;flex-wrap:wrap;position:relative}.bulk-view-body .exel-view-column.two-column{width:500px;min-width:500px!important}.bulk-view-body .exel-view-column.three-column{width:750px;min-width:750px!important}.bulk-view-body .exel-view-column.four-column{width:1000px;min-width:1000px!important}.bulk-view-body .exel-view-column i.icons{position:absolute;top:8px;right:10px;cursor:pointer;color:#d93b41}.bulk-view-body .exel-view-column.large{width:100%;min-width:auto}.bulk-view-body .exel-view-column.error{border:1px solid #eb2424}.bulk-view-body .exel-view-column span.required{color:#eb2424}.bulk-view-body .exel-view-column .exel-view-row .exel-view-column{width:100%}.bulk-view-body .exel-view-column.sl-no{background:#f1f1f1;width:60px;min-width:60px;min-height:30px;font-weight:400}.bulk-view-footer{height:50px;box-shadow:0 0 15px #1e5dd259;padding:10px 20px;position:fixed;width:100%;bottom:0;display:flex;align-items:center;justify-content:space-between;background:#fff}.bulk-view-footer .left p{color:#747576;font-size:13px;font-weight:500;margin:0}.bulk-view-footer .right button{font-size:12px;background:#fff;border:1px solid #dcdcdc;color:#747576;border-radius:2px;padding:8px 18px;cursor:pointer;text-transform:uppercase}.bulk-view-footer .right button+button{margin-left:4px}.bulk-view-footer .right button.blue{color:#fff;background:#1e5dd3}.bulk-view-footer .right button:disabled{background:#f1f1f1;border-color:#f1f1f1;pointer-events:none;cursor:not-allowed;color:#747576}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ToolTipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "placement", "type", "tooltipMandatory", "showTooltip", "animate"] }, { kind: "component", type: i3.LoaderInlineComponent, selector: "app-loader-inline" }, { kind: "pipe", type: i1.SlicePipe, name: "slice" }] }); }
54
58
  }
55
59
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BulkViewComponent, decorators: [{
56
60
  type: Component,
57
- args: [{ selector: 'app-bulk-view', template: "<div class=\"bulk-view\">\r\n <div class=\"bulk-view-head\">\r\n <h2 class=\"bulk-view-title\">\r\n {{ fileName }}\r\n </h2>\r\n </div>\r\n <div class=\"bulk-view-body\">\r\n <div class=\"exel-view\">\r\n <div class=\"exel-view-row head\">\r\n <div class=\"exel-view-column sl-no\">#</div>\r\n <div\r\n class=\"exel-view-column\"\r\n [class.two-column]=\"heading && i === 5\"\r\n *ngFor=\"let heading of riskBulkUpload?.header; let i = index\"\r\n [class.large]=\"heading && heading.startsWith('Inherent')\"\r\n >\r\n <ng-container\r\n *ngIf=\"heading && !heading.startsWith('Inherent') && !(i === 5)\"\r\n >\r\n {{ heading.includes(\"*\") ? heading.replace(\"*\", \"\") : heading }}\r\n <span *ngIf=\"heading.includes('*')\" class=\"required\">*</span>\r\n </ng-container>\r\n <ng-container *ngIf=\"heading && heading.startsWith('Inherent')\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Inherent Risk Assessment</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\">\r\n <div\r\n class=\"exel-view-column\"\r\n *ngFor=\"\r\n let weightAgeFactor of riskBulkUpload.weightFactors\r\n | slice : 2\r\n \"\r\n >\r\n {{ weightAgeFactor }}\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"heading && i === 5\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">\r\n {{ heading.includes(\"*\") ? heading.replace(\"*\", \"\") : heading }}\r\n <span *ngIf=\"heading.includes('*')\" class=\"required\">*</span>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div\r\n class=\"exel-view-column\"\r\n *ngFor=\"\r\n let weightAgeFactor of riskBulkUpload?.weightFactors\r\n | slice : 0 : 2\r\n \"\r\n >\r\n {{\r\n weightAgeFactor.includes(\"*\")\r\n ? weightAgeFactor.replace(\"*\", \"\")\r\n : weightAgeFactor\r\n }}\r\n <span *ngIf=\"weightAgeFactor.includes('*')\" class=\"required\"\r\n >*</span\r\n >\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div\r\n class=\"exel-view-row\"\r\n *ngFor=\"let risk of riskBulkUpload.risks; let i = index\"\r\n >\r\n <div class=\"exel-view-column sl-no\" [class.error]=\"!risk.isValid\">\r\n {{ i + 1 }}\r\n </div>\r\n\r\n <div class=\"exel-view-column\" [class.error]=\"!risk?.riskName\">\r\n {{ risk?.riskName }}\r\n <i\r\n *ngIf=\"!risk?.riskName\"\r\n class=\"icons\"\r\n [appTooltip]=\"'Risk Name must be populated.'\"\r\n placement=\"bottom-right\"\r\n type=\"white\"\r\n delay=\"0\"\r\n [tooltipMandatory]=\"true\"\r\n >&#xe932;</i\r\n >\r\n </div>\r\n\r\n <div class=\"exel-view-column\">{{ risk?.description }}</div>\r\n\r\n <div class=\"exel-view-column\" [class.error]=\"!risk?.rcName\">\r\n {{ risk?.rcName }}\r\n <i\r\n *ngIf=\"!risk?.rcName\"\r\n class=\"icons\"\r\n [appTooltip]=\"'Assign this risk to a Responsibility Center.'\"\r\n placement=\"bottom-right\"\r\n type=\"white\"\r\n delay=\"0\"\r\n [tooltipMandatory]=\"true\"\r\n >&#xe932;</i\r\n >\r\n </div>\r\n <div class=\"exel-view-column\">{{ risk?.owner }}</div>\r\n <div class=\"exel-view-column\">{{ risk?.riskOwner }}</div>\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column\" [class.error]=\"!risk?.isValidFrequency\">\r\n {{ risk?.frequency }}\r\n <i\r\n *ngIf=\"!risk?.isValidFrequency\"\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'Set a frequency for the completion of the inherent risk assessment.'\r\n \"\r\n placement=\"bottom-right\"\r\n type=\"white\"\r\n delay=\"0\"\r\n [tooltipMandatory]=\"true\"\r\n >&#xe932;</i\r\n >\r\n </div>\r\n <div class=\"exel-view-column\" [class.error]=\"false\">\r\n {{ risk?.emailReminder }}\r\n </div>\r\n </div>\r\n <div\r\n class=\"exel-view-column\"\r\n [class.error]=\"\r\n (risk?.owner && risk?.owner == risk?.overseer) ||\r\n (!risk?.owner && defaultOwner == risk?.overseer)\r\n \"\r\n >\r\n {{ risk?.overseer }}\r\n <i\r\n *ngIf=\"\r\n (risk?.owner && risk?.owner == risk?.overseer) ||\r\n (!risk?.owner && defaultOwner == risk?.overseer)\r\n \"\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n (risk?.owner\r\n ? 'The Risk Owner cannot also be the'\r\n : 'You cannot be a') +\r\n ' Oversight of the risk. Select another user as the Oversight of this risk.'\r\n \"\r\n placement=\"bottom-right\"\r\n type=\"white\"\r\n delay=\"0\"\r\n [tooltipMandatory]=\"true\"\r\n >&#xe932;</i\r\n >\r\n </div>\r\n <div\r\n *ngIf=\"\r\n riskBulkUpload?.header &&\r\n riskBulkUpload?.header?.includes('Recommended Mitigation Priority')\r\n \"\r\n class=\"exel-view-column\"\r\n >\r\n {{ risk?.mitigationPriority }}\r\n </div>\r\n <div class=\"exel-view-column\">{{ risk?.mitigationPlans }}</div>\r\n <div class=\"exel-view-column\">{{ risk?.riskLabel }}</div>\r\n <!-- <div class=\"exel-view-column\" *ngIf=\"assessmentDaysEnable\" [class.error]=\"!risk?.assessmentDeadLine\">\r\n {{risk?.assessmentDeadLine}}\r\n <i *ngIf=\"!risk?.assessmentDeadLine\" class=\"icons\"\r\n [appTooltip]=\"'Set a deadline for the completion of the inherent risk assessment.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\">&#xe932;</i>\r\n </div> -->\r\n <div class=\"exel-view-row multi-column\">\r\n <div\r\n class=\"exel-view-column\"\r\n [class.error]=\"\r\n risk?.likelihood &&\r\n !templateInfo?.likelihood.includes(risk?.likelihood)\r\n \"\r\n >\r\n {{ risk?.likelihood }}\r\n </div>\r\n <div\r\n class=\"exel-view-column\"\r\n [class.error]=\"\r\n risk?.impact && !templateInfo?.impact.includes(risk?.impact)\r\n \"\r\n >\r\n {{ risk?.impact }}\r\n </div>\r\n <div\r\n class=\"exel-view-column\"\r\n [class.error]=\"\r\n risk?.velocity && !templateInfo?.velocity.includes(risk?.velocity)\r\n \"\r\n *ngIf=\"riskBulkUpload?.weightFactors?.includes('Velocity')\"\r\n >\r\n {{ risk?.velocity }}\r\n </div>\r\n <div\r\n class=\"exel-view-column\"\r\n [class.error]=\"\r\n risk?.vulnerability &&\r\n !templateInfo?.vulnerability.includes(risk?.vulnerability)\r\n \"\r\n *ngIf=\"riskBulkUpload?.weightFactors?.includes('Vulnerability')\"\r\n >\r\n {{ risk?.vulnerability }}\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n riskBulkUpload?.header &&\r\n riskBulkUpload?.header?.includes(\r\n 'Do you want to apply the same risk ratings for all Responsibility Centers?'\r\n )\r\n \"\r\n class=\"exel-view-column\"\r\n >\r\n {{ risk?.applySameRiskRating }}\r\n </div>\r\n <!-- <div class=\"exel-view-column\">{{risk?.customField1}}</div>\r\n <div class=\"exel-view-column\">{{risk?.customField2}}</div> -->\r\n\r\n <ng-container *ngIf=\"risk?.customTag\">\r\n <div class=\"exel-view-column\" *ngFor=\"let tag of risk?.customTag\">\r\n {{ tag?.custom_tag_value }}\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"bulk-view-footer\">\r\n <div class=\"left\">\r\n <p>\r\n {{ finalRisks }} out of {{ riskBulkUpload?.risks?.length }} risks will\r\n be added to the Risk Register.\r\n </p>\r\n </div>\r\n <div class=\"right\">\r\n <button (click)=\"close()\">Cancel</button>\r\n <button\r\n (click)=\"submit(false)\"\r\n [disabled]=\"finalRisks < 1\"\r\n class=\"blue\"\r\n >\r\n Add Risks\r\n </button>\r\n <button\r\n (click)=\"submit(true)\"\r\n *ngIf=\"showCompleteAssessmentButton\"\r\n [disabled]=\"finalRisks < 1\"\r\n class=\"blue\"\r\n >\r\n Add Risks And Complete Assessment\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <app-loader-inline *ngIf=\"loader\"></app-loader-inline>\r\n</div>\r\n", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";::-webkit-scrollbar-thumb,::-webkit-scrollbar-thumb:hover{background:#747576;border-radius:16px}::-webkit-scrollbar{height:15px}.bulk-view{position:fixed;inset:0;z-index:11}.bulk-view-head{height:60px;padding:20px 24px;background:#161b2f;display:flex;justify-content:flex-start}.bulk-view-title{font-size:16px;line-height:20px;font-weight:400;margin:0;color:#fff}.bulk-view-body{height:calc(100vh - 110px);overflow:auto;width:100%;background:#fff}.bulk-view-body .exel-view{display:block}.bulk-view-body .exel-view-row{display:flex;width:100%}.bulk-view-body .exel-view-row.head .exel-view-column{font-weight:500;font-size:14px;min-height:26px;background:#f1f1f1;padding:0}.bulk-view-body .exel-view-row.two-column .exel-view-column,.bulk-view-body .exel-view-row.three-column .exel-view-column,.bulk-view-body .exel-view-row.four-column .exel-view-column{min-width:250px!important}.bulk-view-body .exel-view-row.multi-column .exel-view-column{width:140px;min-width:140px}.bulk-view-body .exel-view-column{width:300px;min-width:300px;padding:0 10px;border-right:1px solid #dcdcdc;border-bottom:1px solid #dcdcdc;display:flex;align-items:center;justify-content:center;text-align:center;word-break:break-all;line-height:16px;font-size:12px;color:#161b2f;flex-wrap:wrap;position:relative}.bulk-view-body .exel-view-column.two-column{width:500px;min-width:500px!important}.bulk-view-body .exel-view-column.three-column{width:750px;min-width:750px!important}.bulk-view-body .exel-view-column.four-column{width:1000px;min-width:1000px!important}.bulk-view-body .exel-view-column i.icons{position:absolute;top:8px;right:10px;cursor:pointer;color:#d93b41}.bulk-view-body .exel-view-column.large{width:100%;min-width:auto}.bulk-view-body .exel-view-column.error{border:1px solid #eb2424}.bulk-view-body .exel-view-column span.required{color:#eb2424}.bulk-view-body .exel-view-column .exel-view-row .exel-view-column{width:100%}.bulk-view-body .exel-view-column.sl-no{background:#f1f1f1;width:60px;min-width:60px;min-height:30px;font-weight:400}.bulk-view-footer{height:50px;box-shadow:0 0 15px #1e5dd259;padding:10px 20px;position:fixed;width:100%;bottom:0;display:flex;align-items:center;justify-content:space-between;background:#fff}.bulk-view-footer .left p{color:#747576;font-size:13px;font-weight:500;margin:0}.bulk-view-footer .right button{font-size:12px;background:#fff;border:1px solid #dcdcdc;color:#747576;border-radius:2px;padding:8px 18px;cursor:pointer;text-transform:uppercase}.bulk-view-footer .right button+button{margin-left:4px}.bulk-view-footer .right button.blue{color:#fff;background:#1e5dd3}.bulk-view-footer .right button:disabled{background:#f1f1f1;border-color:#f1f1f1;pointer-events:none;cursor:not-allowed;color:#747576}\n"] }]
61
+ args: [{ selector: 'app-bulk-view', template: "<div class=\"bulk-view\">\r\n <div class=\"bulk-view-head\">\r\n <h2 class=\"bulk-view-title\">\r\n {{ fileName }}\r\n </h2>\r\n </div>\r\n <div class=\"bulk-view-body\">\r\n <div class=\"exel-view\">\r\n <div class=\"exel-view-row head\">\r\n <div class=\"exel-view-column sl-no\">#</div>\r\n <div\r\n class=\"exel-view-column\"\r\n [class.two-column]=\"heading && i === 5\"\r\n *ngFor=\"let heading of riskBulkUpload?.header; let i = index\"\r\n [class.large]=\"heading && heading.startsWith('Inherent')\"\r\n >\r\n <ng-container\r\n *ngIf=\"heading && !heading.startsWith('Inherent') && !(i === 5)\"\r\n >\r\n {{ heading.includes(\"*\") ? heading.replace(\"*\", \"\") : heading }}\r\n <span *ngIf=\"heading.includes('*')\" class=\"required\">*</span>\r\n </ng-container>\r\n <ng-container *ngIf=\"heading && heading.startsWith('Inherent')\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Inherent Risk Assessment</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\">\r\n <div\r\n class=\"exel-view-column\"\r\n *ngFor=\"\r\n let weightAgeFactor of riskBulkUpload.weightFactors\r\n | slice : 2\r\n \"\r\n >\r\n {{ weightAgeFactor }}\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"heading && i === 5\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">\r\n {{ heading.includes(\"*\") ? heading.replace(\"*\", \"\") : heading }}\r\n <span *ngIf=\"heading.includes('*')\" class=\"required\">*</span>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div\r\n class=\"exel-view-column\"\r\n *ngFor=\"\r\n let weightAgeFactor of riskBulkUpload?.weightFactors\r\n | slice : 0 : 2\r\n \"\r\n >\r\n {{\r\n weightAgeFactor.includes(\"*\")\r\n ? weightAgeFactor.replace(\"*\", \"\")\r\n : weightAgeFactor\r\n }}\r\n <span *ngIf=\"weightAgeFactor.includes('*')\" class=\"required\"\r\n >*</span\r\n >\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div\r\n class=\"exel-view-row\"\r\n *ngFor=\"let risk of riskBulkUpload.risks; let i = index\"\r\n >\r\n <div class=\"exel-view-column sl-no\" [class.error]=\"!risk.isValid\">\r\n {{ i + 1 }}\r\n </div>\r\n\r\n <div class=\"exel-view-column\" [class.error]=\"!risk?.riskName\">\r\n {{ risk?.riskName }}\r\n <i\r\n *ngIf=\"!risk?.riskName\"\r\n class=\"icons\"\r\n [appTooltip]=\"'Risk Name must be populated.'\"\r\n placement=\"bottom-right\"\r\n type=\"white\"\r\n delay=\"0\"\r\n [tooltipMandatory]=\"true\"\r\n >&#xe932;</i\r\n >\r\n </div>\r\n\r\n <div class=\"exel-view-column\">{{ risk?.description }}</div>\r\n\r\n <div class=\"exel-view-column\" [class.error]=\"!risk?.rcName\">\r\n {{ risk?.rcName }}\r\n <i\r\n *ngIf=\"!risk?.rcName\"\r\n class=\"icons\"\r\n [appTooltip]=\"'Assign this risk to a Responsibility Center.'\"\r\n placement=\"bottom-right\"\r\n type=\"white\"\r\n delay=\"0\"\r\n [tooltipMandatory]=\"true\"\r\n >&#xe932;</i\r\n >\r\n </div>\r\n <div class=\"exel-view-column\">{{ risk?.owner }}</div>\r\n <div class=\"exel-view-column\">{{ risk?.riskOwner }}</div>\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column\" [class.error]=\"!risk?.isValidFrequency\">\r\n {{ risk?.frequency }}\r\n <i\r\n *ngIf=\"!risk?.isValidFrequency\"\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'Set a frequency for the completion of the inherent risk assessment.'\r\n \"\r\n placement=\"bottom-right\"\r\n type=\"white\"\r\n delay=\"0\"\r\n [tooltipMandatory]=\"true\"\r\n >&#xe932;</i\r\n >\r\n </div>\r\n <div class=\"exel-view-column\" [class.error]=\"false\">\r\n {{ risk?.emailReminder }}\r\n </div>\r\n </div>\r\n <div\r\n class=\"exel-view-column\"\r\n [class.error]=\"\r\n (risk?.owner && risk?.owner == risk?.overseer) ||\r\n (!risk?.owner && defaultOwner == risk?.overseer)\r\n \"\r\n >\r\n {{ risk?.overseer }}\r\n <i\r\n *ngIf=\"\r\n (risk?.owner && risk?.owner == risk?.overseer) ||\r\n (!risk?.owner && defaultOwner == risk?.overseer)\r\n \"\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n (risk?.owner\r\n ? 'The Risk Owner cannot also be the'\r\n : 'You cannot be a') +\r\n ' Oversight of the risk. Select another user as the Oversight of this risk.'\r\n \"\r\n placement=\"bottom-right\"\r\n type=\"white\"\r\n delay=\"0\"\r\n [tooltipMandatory]=\"true\"\r\n >&#xe932;</i\r\n >\r\n </div>\r\n <div\r\n *ngIf=\"\r\n riskBulkUpload?.header &&\r\n riskBulkUpload?.header?.includes('Recommended Mitigation Priority')\r\n \"\r\n class=\"exel-view-column\"\r\n >\r\n {{ risk?.mitigationPriority }}\r\n </div>\r\n <div class=\"exel-view-column\">{{ risk?.mitigationPlans }}</div>\r\n <div class=\"exel-view-column\">{{ risk?.riskLabel }}</div>\r\n <!-- <div class=\"exel-view-column\" *ngIf=\"assessmentDaysEnable\" [class.error]=\"!risk?.assessmentDeadLine\">\r\n {{risk?.assessmentDeadLine}}\r\n <i *ngIf=\"!risk?.assessmentDeadLine\" class=\"icons\"\r\n [appTooltip]=\"'Set a deadline for the completion of the inherent risk assessment.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\">&#xe932;</i>\r\n </div> -->\r\n <div class=\"exel-view-row multi-column\">\r\n <div\r\n class=\"exel-view-column\"\r\n [class.error]=\"\r\n risk?.likelihood &&\r\n !templateInfo?.likelihood.includes(risk?.likelihood)\r\n \"\r\n >\r\n {{ risk?.likelihood }}\r\n </div>\r\n <div\r\n class=\"exel-view-column\"\r\n [class.error]=\"\r\n risk?.impact && !templateInfo?.impact.includes(risk?.impact)\r\n \"\r\n >\r\n {{ risk?.impact }}\r\n </div>\r\n <div\r\n class=\"exel-view-column\"\r\n [class.error]=\"\r\n risk?.velocity && !templateInfo?.velocity.includes(risk?.velocity)\r\n \"\r\n *ngIf=\"riskBulkUpload?.weightFactors?.includes('Velocity')\"\r\n >\r\n {{ risk?.velocity }}\r\n </div>\r\n <div\r\n class=\"exel-view-column\"\r\n [class.error]=\"\r\n risk?.vulnerability &&\r\n !templateInfo?.vulnerability.includes(risk?.vulnerability)\r\n \"\r\n *ngIf=\"riskBulkUpload?.weightFactors?.includes('Vulnerability')\"\r\n >\r\n {{ risk?.vulnerability }}\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n riskBulkUpload?.header &&\r\n riskBulkUpload?.header?.includes(\r\n 'Do you want to apply the same risk ratings for all Responsibility Centers?'\r\n )\r\n \"\r\n class=\"exel-view-column\"\r\n >\r\n {{ risk?.applySameRiskRating }}\r\n </div>\r\n <div\r\n *ngIf=\"\r\n ffLinkedGrcObjects &&\r\n riskBulkUpload?.header &&\r\n riskBulkUpload?.header?.includes(LINKED_GRC)\r\n \"\r\n class=\"exel-view-column\"\r\n [class.error]=\"risk?.isGrcNotValid\"\r\n >\r\n {{ risk?.linkedGrcObject }}\r\n <i\r\n *ngIf=\"risk?.isGrcNotValid\"\r\n class=\"icons\"\r\n [appTooltip]=\"GRC_ERROR_MESSAGE\"\r\n placement=\"bottom-right\"\r\n type=\"white\"\r\n delay=\"0\"\r\n [tooltipMandatory]=\"true\"\r\n >&#xe932;</i\r\n >\r\n </div>\r\n <!-- <div class=\"exel-view-column\">{{risk?.customField1}}</div>\r\n <div class=\"exel-view-column\">{{risk?.customField2}}</div> -->\r\n\r\n <ng-container *ngIf=\"risk?.customTag\">\r\n <div class=\"exel-view-column\" *ngFor=\"let tag of risk?.customTag\">\r\n {{ tag?.custom_tag_value }}\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"bulk-view-footer\">\r\n <div class=\"left\">\r\n <p>\r\n {{ finalRisks }} out of {{ riskBulkUpload?.risks?.length }} risks will\r\n be added to the Risk Register.\r\n </p>\r\n </div>\r\n <div class=\"right\">\r\n <button (click)=\"close()\">Cancel</button>\r\n <button\r\n (click)=\"submit(false)\"\r\n [disabled]=\"finalRisks < 1\"\r\n class=\"blue\"\r\n >\r\n Add Risks\r\n </button>\r\n <button\r\n (click)=\"submit(true)\"\r\n *ngIf=\"showCompleteAssessmentButton\"\r\n [disabled]=\"finalRisks < 1\"\r\n class=\"blue\"\r\n >\r\n Add Risks And Complete Assessment\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <app-loader-inline *ngIf=\"loader\"></app-loader-inline>\r\n</div>\r\n", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";::-webkit-scrollbar-thumb,::-webkit-scrollbar-thumb:hover{background:#747576;border-radius:16px}::-webkit-scrollbar{height:15px}.bulk-view{position:fixed;inset:0;z-index:11}.bulk-view-head{height:60px;padding:20px 24px;background:#161b2f;display:flex;justify-content:flex-start}.bulk-view-title{font-size:16px;line-height:20px;font-weight:400;margin:0;color:#fff}.bulk-view-body{height:calc(100vh - 110px);overflow:auto;width:100%;background:#fff}.bulk-view-body .exel-view{display:block}.bulk-view-body .exel-view-row{display:flex;width:100%}.bulk-view-body .exel-view-row.head .exel-view-column{font-weight:500;font-size:14px;min-height:26px;background:#f1f1f1;padding:0}.bulk-view-body .exel-view-row.two-column .exel-view-column,.bulk-view-body .exel-view-row.three-column .exel-view-column,.bulk-view-body .exel-view-row.four-column .exel-view-column{min-width:250px!important}.bulk-view-body .exel-view-row.multi-column .exel-view-column{width:140px;min-width:140px}.bulk-view-body .exel-view-column{width:300px;min-width:300px;padding:0 10px;border-right:1px solid #dcdcdc;border-bottom:1px solid #dcdcdc;display:flex;align-items:center;justify-content:center;text-align:center;word-break:break-all;line-height:16px;font-size:12px;color:#161b2f;flex-wrap:wrap;position:relative}.bulk-view-body .exel-view-column.two-column{width:500px;min-width:500px!important}.bulk-view-body .exel-view-column.three-column{width:750px;min-width:750px!important}.bulk-view-body .exel-view-column.four-column{width:1000px;min-width:1000px!important}.bulk-view-body .exel-view-column i.icons{position:absolute;top:8px;right:10px;cursor:pointer;color:#d93b41}.bulk-view-body .exel-view-column.large{width:100%;min-width:auto}.bulk-view-body .exel-view-column.error{border:1px solid #eb2424}.bulk-view-body .exel-view-column span.required{color:#eb2424}.bulk-view-body .exel-view-column .exel-view-row .exel-view-column{width:100%}.bulk-view-body .exel-view-column.sl-no{background:#f1f1f1;width:60px;min-width:60px;min-height:30px;font-weight:400}.bulk-view-footer{height:50px;box-shadow:0 0 15px #1e5dd259;padding:10px 20px;position:fixed;width:100%;bottom:0;display:flex;align-items:center;justify-content:space-between;background:#fff}.bulk-view-footer .left p{color:#747576;font-size:13px;font-weight:500;margin:0}.bulk-view-footer .right button{font-size:12px;background:#fff;border:1px solid #dcdcdc;color:#747576;border-radius:2px;padding:8px 18px;cursor:pointer;text-transform:uppercase}.bulk-view-footer .right button+button{margin-left:4px}.bulk-view-footer .right button.blue{color:#fff;background:#1e5dd3}.bulk-view-footer .right button:disabled{background:#f1f1f1;border-color:#f1f1f1;pointer-events:none;cursor:not-allowed;color:#747576}\n"] }]
58
62
  }], propDecorators: { riskBulkUpload: [{
59
63
  type: Input
60
64
  }], templateInfo: [{
@@ -67,9 +71,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
67
71
  type: Input
68
72
  }], loader: [{
69
73
  type: Input
74
+ }], ffLinkedGrcObjects: [{
75
+ type: Input
70
76
  }], submitRiskBulkUpload: [{
71
77
  type: Output
72
78
  }], cancel: [{
73
79
  type: Output
74
80
  }] } });
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVsay12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL3NoYXJlZENvbXBvbmVudHMvYnVsay12aWV3L2J1bGstdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92eC13b3JrZmxvdy1lbmdpbmUvc3JjL2xpYi9zaGFyZWRDb21wb25lbnRzL2J1bGstdmlldy9idWxrLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsWUFBWSxFQUNaLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFPdkIsTUFBTSxPQUFPLGlCQUFpQjtJQUw5QjtRQVdXLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFFZCx5QkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzFDLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXRDLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFDZixpQ0FBNEIsR0FBRyxLQUFLLENBQUM7S0E0Q3RDO0lBMUNDLFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7WUFDcEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7Z0JBQzlDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtvQkFDaEIsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUM7aUJBQ3RCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO1lBQzlDLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxhQUFhLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBRTtnQkFDbkQsSUFBSSxJQUFJLEVBQUUsVUFBVSxJQUFJLElBQUksRUFBRSxNQUFNLEVBQUU7b0JBQ3BDLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUM7aUJBQzFDO2FBQ0Y7aUJBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLGFBQWEsRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFO2dCQUMxRCxJQUNFLElBQUksRUFBRSxVQUFVO29CQUNoQixJQUFJLEVBQUUsTUFBTTtvQkFDWixDQUFDLElBQUksRUFBRSxRQUFRLElBQUksSUFBSSxFQUFFLGFBQWEsQ0FBQyxFQUN2QztvQkFDQSxJQUFJLENBQUMsNEJBQTRCLEdBQUcsSUFBSSxDQUFDO2lCQUMxQzthQUNGO2lCQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxhQUFhLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBRTtnQkFDMUQsSUFDRSxJQUFJLEVBQUUsVUFBVTtvQkFDaEIsSUFBSSxFQUFFLE1BQU07b0JBQ1osSUFBSSxFQUFFLFFBQVE7b0JBQ2QsSUFBSSxFQUFFLGFBQWEsRUFDbkI7b0JBQ0EsSUFBSSxDQUFDLDRCQUE0QixHQUFHLElBQUksQ0FBQztpQkFDMUM7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU0sQ0FBQyxrQkFBdUI7UUFDNUIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyQixDQUFDOytHQXZEVSxpQkFBaUI7bUdBQWpCLGlCQUFpQix1VkNiOUIsZ3NUQWlRQTs7NEZEcFBhLGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDRSxlQUFlOzhCQUtoQixjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUksb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBPdXRwdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtYnVsay12aWV3JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYnVsay12aWV3LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9idWxrLXZpZXcuY29tcG9uZW50Lmxlc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEJ1bGtWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcclxuICBASW5wdXQoKSByaXNrQnVsa1VwbG9hZCE6IGFueTtcclxuICBASW5wdXQoKSB0ZW1wbGF0ZUluZm8hOiBhbnk7XHJcbiAgQElucHV0KCkgZmlsZU5hbWUhOiBhbnk7XHJcbiAgQElucHV0KCkgYXNzZXNzbWVudERheXNFbmFibGUhOiBhbnk7XHJcbiAgQElucHV0KCkgZGVmYXVsdE93bmVyITogYW55O1xyXG4gIEBJbnB1dCgpIGxvYWRlciA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KCkgc3VibWl0Umlza0J1bGtVcGxvYWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgZmluYWxSaXNrcyA9IDA7XHJcbiAgc2hvd0NvbXBsZXRlQXNzZXNzbWVudEJ1dHRvbiA9IGZhbHNlO1xyXG5cclxuICBuZ09uQ2hhbmdlcygpIHtcclxuICAgIGlmICh0aGlzLnJpc2tCdWxrVXBsb2FkKSB7XHJcbiAgICAgIHRoaXMuZmluYWxSaXNrcyA9IDA7XHJcbiAgICAgIHRoaXMucmlza0J1bGtVcGxvYWQucmlza3MuZm9yRWFjaCgocmlzazogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJpc2suaXNWYWxpZCkge1xyXG4gICAgICAgICAgdGhpcy5maW5hbFJpc2tzICs9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMucmlza0J1bGtVcGxvYWQucmlza3MuZm9yRWFjaCgocmlzazogYW55KSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnJpc2tCdWxrVXBsb2FkPy53ZWlnaHRGYWN0b3JzPy5sZW5ndGggPT0gNCkge1xyXG4gICAgICAgIGlmIChyaXNrPy5saWtlbGlob29kICYmIHJpc2s/LmltcGFjdCkge1xyXG4gICAgICAgICAgdGhpcy5zaG93Q29tcGxldGVBc3Nlc3NtZW50QnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5yaXNrQnVsa1VwbG9hZD8ud2VpZ2h0RmFjdG9ycz8ubGVuZ3RoID09IDUpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICByaXNrPy5saWtlbGlob29kICYmXHJcbiAgICAgICAgICByaXNrPy5pbXBhY3QgJiZcclxuICAgICAgICAgIChyaXNrPy52ZWxvY2l0eSB8fCByaXNrPy52dWxuZXJhYmlsaXR5KVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5zaG93Q29tcGxldGVBc3Nlc3NtZW50QnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5yaXNrQnVsa1VwbG9hZD8ud2VpZ2h0RmFjdG9ycz8ubGVuZ3RoID09IDYpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICByaXNrPy5saWtlbGlob29kICYmXHJcbiAgICAgICAgICByaXNrPy5pbXBhY3QgJiZcclxuICAgICAgICAgIHJpc2s/LnZlbG9jaXR5ICYmXHJcbiAgICAgICAgICByaXNrPy52dWxuZXJhYmlsaXR5XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dDb21wbGV0ZUFzc2Vzc21lbnRCdXR0b24gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzdWJtaXQoY29tcGxldGVBc3Nlc3NtZW50OiBhbnkpIHtcclxuICAgIHRoaXMuc3VibWl0Umlza0J1bGtVcGxvYWQuZW1pdChjb21wbGV0ZUFzc2Vzc21lbnQpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICB0aGlzLmNhbmNlbC5lbWl0KCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJidWxrLXZpZXdcIj5cclxuICA8ZGl2IGNsYXNzPVwiYnVsay12aWV3LWhlYWRcIj5cclxuICAgIDxoMiBjbGFzcz1cImJ1bGstdmlldy10aXRsZVwiPlxyXG4gICAgICB7eyBmaWxlTmFtZSB9fVxyXG4gICAgPC9oMj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiYnVsay12aWV3LWJvZHlcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXdcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1yb3cgaGVhZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uIHNsLW5vXCI+IzwvZGl2PlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiXHJcbiAgICAgICAgICBbY2xhc3MudHdvLWNvbHVtbl09XCJoZWFkaW5nICYmIGkgPT09IDVcIlxyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGhlYWRpbmcgb2Ygcmlza0J1bGtVcGxvYWQ/LmhlYWRlcjsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICBbY2xhc3MubGFyZ2VdPVwiaGVhZGluZyAmJiBoZWFkaW5nLnN0YXJ0c1dpdGgoJ0luaGVyZW50JylcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgKm5nSWY9XCJoZWFkaW5nICYmICFoZWFkaW5nLnN0YXJ0c1dpdGgoJ0luaGVyZW50JykgJiYgIShpID09PSA1KVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IGhlYWRpbmcuaW5jbHVkZXMoXCIqXCIpID8gaGVhZGluZy5yZXBsYWNlKFwiKlwiLCBcIlwiKSA6IGhlYWRpbmcgfX1cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJoZWFkaW5nLmluY2x1ZGVzKCcqJylcIiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRpbmcgJiYgaGVhZGluZy5zdGFydHNXaXRoKCdJbmhlcmVudCcpXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctcm93XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW4gbGFyZ2VcIj5JbmhlcmVudCBSaXNrIEFzc2Vzc21lbnQ8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctcm93IG11bHRpLWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgbGV0IHdlaWdodEFnZUZhY3RvciBvZiByaXNrQnVsa1VwbG9hZC53ZWlnaHRGYWN0b3JzXHJcbiAgICAgICAgICAgICAgICAgICAgfCBzbGljZSA6IDJcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3sgd2VpZ2h0QWdlRmFjdG9yIH19XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGluZyAmJiBpID09PSA1XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctcm93XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW4gbGFyZ2VcIj5cclxuICAgICAgICAgICAgICAgIHt7IGhlYWRpbmcuaW5jbHVkZXMoXCIqXCIpID8gaGVhZGluZy5yZXBsYWNlKFwiKlwiLCBcIlwiKSA6IGhlYWRpbmcgfX1cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaGVhZGluZy5pbmNsdWRlcygnKicpXCIgY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LXJvdyBtdWx0aS1jb2x1bW5cIiBbY2xhc3MudHdvLWNvbHVtbl09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCJcclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICBsZXQgd2VpZ2h0QWdlRmFjdG9yIG9mIHJpc2tCdWxrVXBsb2FkPy53ZWlnaHRGYWN0b3JzXHJcbiAgICAgICAgICAgICAgICAgICAgfCBzbGljZSA6IDAgOiAyXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgICAgIHdlaWdodEFnZUZhY3Rvci5pbmNsdWRlcyhcIipcIilcclxuICAgICAgICAgICAgICAgICAgICA/IHdlaWdodEFnZUZhY3Rvci5yZXBsYWNlKFwiKlwiLCBcIlwiKVxyXG4gICAgICAgICAgICAgICAgICAgIDogd2VpZ2h0QWdlRmFjdG9yXHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ3ZWlnaHRBZ2VGYWN0b3IuaW5jbHVkZXMoJyonKVwiIGNsYXNzPVwicmVxdWlyZWRcIlxyXG4gICAgICAgICAgICAgICAgICA+Kjwvc3BhblxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiZXhlbC12aWV3LXJvd1wiXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IHJpc2sgb2Ygcmlza0J1bGtVcGxvYWQucmlza3M7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW4gc2wtbm9cIiBbY2xhc3MuZXJyb3JdPVwiIXJpc2suaXNWYWxpZFwiPlxyXG4gICAgICAgICAge3sgaSArIDEgfX1cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIiBbY2xhc3MuZXJyb3JdPVwiIXJpc2s/LnJpc2tOYW1lXCI+XHJcbiAgICAgICAgICB7eyByaXNrPy5yaXNrTmFtZSB9fVxyXG4gICAgICAgICAgPGlcclxuICAgICAgICAgICAgKm5nSWY9XCIhcmlzaz8ucmlza05hbWVcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImljb25zXCJcclxuICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiJ1Jpc2sgTmFtZSBtdXN0IGJlIHBvcHVsYXRlZC4nXCJcclxuICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCJcclxuICAgICAgICAgICAgdHlwZT1cIndoaXRlXCJcclxuICAgICAgICAgICAgZGVsYXk9XCIwXCJcclxuICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgID4mI3hlOTMyOzwvaVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPnt7IHJpc2s/LmRlc2NyaXB0aW9uIH19PC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCIgW2NsYXNzLmVycm9yXT1cIiFyaXNrPy5yY05hbWVcIj5cclxuICAgICAgICAgIHt7IHJpc2s/LnJjTmFtZSB9fVxyXG4gICAgICAgICAgPGlcclxuICAgICAgICAgICAgKm5nSWY9XCIhcmlzaz8ucmNOYW1lXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXHJcbiAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIidBc3NpZ24gdGhpcyByaXNrIHRvIGEgUmVzcG9uc2liaWxpdHkgQ2VudGVyLidcIlxyXG4gICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIlxyXG4gICAgICAgICAgICB0eXBlPVwid2hpdGVcIlxyXG4gICAgICAgICAgICBkZWxheT1cIjBcIlxyXG4gICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgPiYjeGU5MzI7PC9pXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj57eyByaXNrPy5vd25lciB9fTwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+e3sgcmlzaz8ucmlza093bmVyIH19PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1yb3cgbXVsdGktY29sdW1uXCIgW2NsYXNzLnR3by1jb2x1bW5dPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIiBbY2xhc3MuZXJyb3JdPVwiIXJpc2s/LmlzVmFsaWRGcmVxdWVuY3lcIj5cclxuICAgICAgICAgICAge3sgcmlzaz8uZnJlcXVlbmN5IH19XHJcbiAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCIhcmlzaz8uaXNWYWxpZEZyZXF1ZW5jeVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXHJcbiAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiXHJcbiAgICAgICAgICAgICAgICAnU2V0IGEgZnJlcXVlbmN5IGZvciB0aGUgY29tcGxldGlvbiBvZiB0aGUgaW5oZXJlbnQgcmlzayBhc3Nlc3NtZW50LidcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiXHJcbiAgICAgICAgICAgICAgdHlwZT1cIndoaXRlXCJcclxuICAgICAgICAgICAgICBkZWxheT1cIjBcIlxyXG4gICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgID4mI3hlOTMyOzwvaVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCIgW2NsYXNzLmVycm9yXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgIHt7IHJpc2s/LmVtYWlsUmVtaW5kZXIgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiXHJcbiAgICAgICAgICBbY2xhc3MuZXJyb3JdPVwiXHJcbiAgICAgICAgICAgIChyaXNrPy5vd25lciAmJiByaXNrPy5vd25lciA9PSByaXNrPy5vdmVyc2VlcikgfHxcclxuICAgICAgICAgICAgKCFyaXNrPy5vd25lciAmJiBkZWZhdWx0T3duZXIgPT0gcmlzaz8ub3ZlcnNlZXIpXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7IHJpc2s/Lm92ZXJzZWVyIH19XHJcbiAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgIChyaXNrPy5vd25lciAmJiByaXNrPy5vd25lciA9PSByaXNrPy5vdmVyc2VlcikgfHxcclxuICAgICAgICAgICAgICAoIXJpc2s/Lm93bmVyICYmIGRlZmF1bHRPd25lciA9PSByaXNrPy5vdmVyc2VlcilcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXHJcbiAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxyXG4gICAgICAgICAgICAgIChyaXNrPy5vd25lclxyXG4gICAgICAgICAgICAgICAgPyAnVGhlIFJpc2sgT3duZXIgY2Fubm90IGFsc28gYmUgdGhlJ1xyXG4gICAgICAgICAgICAgICAgOiAnWW91IGNhbm5vdCBiZSBhJykgK1xyXG4gICAgICAgICAgICAgICcgT3ZlcnNpZ2h0IG9mIHRoZSByaXNrLiBTZWxlY3QgYW5vdGhlciB1c2VyIGFzIHRoZSBPdmVyc2lnaHQgb2YgdGhpcyByaXNrLidcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCJcclxuICAgICAgICAgICAgdHlwZT1cIndoaXRlXCJcclxuICAgICAgICAgICAgZGVsYXk9XCIwXCJcclxuICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgID4mI3hlOTMyOzwvaVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHJpc2tCdWxrVXBsb2FkPy5oZWFkZXIgJiZcclxuICAgICAgICAgICAgcmlza0J1bGtVcGxvYWQ/LmhlYWRlcj8uaW5jbHVkZXMoJ1JlY29tbWVuZGVkIE1pdGlnYXRpb24gUHJpb3JpdHknKVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgIGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgcmlzaz8ubWl0aWdhdGlvblByaW9yaXR5IH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj57eyByaXNrPy5taXRpZ2F0aW9uUGxhbnMgfX08L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPnt7IHJpc2s/LnJpc2tMYWJlbCB9fTwvZGl2PlxyXG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIiAqbmdJZj1cImFzc2Vzc21lbnREYXlzRW5hYmxlXCIgW2NsYXNzLmVycm9yXT1cIiFyaXNrPy5hc3Nlc3NtZW50RGVhZExpbmVcIj5cclxuICAgICAgICAgICAgICAgICAge3tyaXNrPy5hc3Nlc3NtZW50RGVhZExpbmV9fVxyXG4gICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIiFyaXNrPy5hc3Nlc3NtZW50RGVhZExpbmVcIiBjbGFzcz1cImljb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIidTZXQgYSBkZWFkbGluZSBmb3IgdGhlIGNvbXBsZXRpb24gb2YgdGhlIGluaGVyZW50IHJpc2sgYXNzZXNzbWVudC4nXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiIHR5cGU9XCJ3aGl0ZVwiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIj4mI3hlOTMyOzwvaT5cclxuICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1yb3cgbXVsdGktY29sdW1uXCI+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5lcnJvcl09XCJcclxuICAgICAgICAgICAgICByaXNrPy5saWtlbGlob29kICYmXHJcbiAgICAgICAgICAgICAgIXRlbXBsYXRlSW5mbz8ubGlrZWxpaG9vZC5pbmNsdWRlcyhyaXNrPy5saWtlbGlob29kKVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7eyByaXNrPy5saWtlbGlob29kIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCJcclxuICAgICAgICAgICAgW2NsYXNzLmVycm9yXT1cIlxyXG4gICAgICAgICAgICAgIHJpc2s/LmltcGFjdCAmJiAhdGVtcGxhdGVJbmZvPy5pbXBhY3QuaW5jbHVkZXMocmlzaz8uaW1wYWN0KVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7eyByaXNrPy5pbXBhY3QgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIlxyXG4gICAgICAgICAgICBbY2xhc3MuZXJyb3JdPVwiXHJcbiAgICAgICAgICAgICAgcmlzaz8udmVsb2NpdHkgJiYgIXRlbXBsYXRlSW5mbz8udmVsb2NpdHkuaW5jbHVkZXMocmlzaz8udmVsb2NpdHkpXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwicmlza0J1bGtVcGxvYWQ/LndlaWdodEZhY3RvcnM/LmluY2x1ZGVzKCdWZWxvY2l0eScpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3sgcmlzaz8udmVsb2NpdHkgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIlxyXG4gICAgICAgICAgICBbY2xhc3MuZXJyb3JdPVwiXHJcbiAgICAgICAgICAgICAgcmlzaz8udnVsbmVyYWJpbGl0eSAmJlxyXG4gICAgICAgICAgICAgICF0ZW1wbGF0ZUluZm8/LnZ1bG5lcmFiaWxpdHkuaW5jbHVkZXMocmlzaz8udnVsbmVyYWJpbGl0eSlcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJyaXNrQnVsa1VwbG9hZD8ud2VpZ2h0RmFjdG9ycz8uaW5jbHVkZXMoJ1Z1bG5lcmFiaWxpdHknKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IHJpc2s/LnZ1bG5lcmFiaWxpdHkgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHJpc2tCdWxrVXBsb2FkPy5oZWFkZXIgJiZcclxuICAgICAgICAgICAgcmlza0J1bGtVcGxvYWQ/LmhlYWRlcj8uaW5jbHVkZXMoXHJcbiAgICAgICAgICAgICAgJ0RvIHlvdSB3YW50IHRvIGFwcGx5IHRoZSBzYW1lIHJpc2sgcmF0aW5ncyBmb3IgYWxsIFJlc3BvbnNpYmlsaXR5IENlbnRlcnM/J1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyByaXNrPy5hcHBseVNhbWVSaXNrUmF0aW5nIH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPnt7cmlzaz8uY3VzdG9tRmllbGQxfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPnt7cmlzaz8uY3VzdG9tRmllbGQyfX08L2Rpdj4gLS0+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyaXNrPy5jdXN0b21UYWdcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCIgKm5nRm9yPVwibGV0IHRhZyBvZiByaXNrPy5jdXN0b21UYWdcIj5cclxuICAgICAgICAgICAge3sgdGFnPy5jdXN0b21fdGFnX3ZhbHVlIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJidWxrLXZpZXctZm9vdGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCI+XHJcbiAgICAgICAgPHA+XHJcbiAgICAgICAgICB7eyBmaW5hbFJpc2tzIH19IG91dCBvZiB7eyByaXNrQnVsa1VwbG9hZD8ucmlza3M/Lmxlbmd0aCB9fSByaXNrcyB3aWxsXHJcbiAgICAgICAgICBiZSBhZGRlZCB0byB0aGUgUmlzayBSZWdpc3Rlci5cclxuICAgICAgICA8L3A+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cclxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjbG9zZSgpXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgKGNsaWNrKT1cInN1Ym1pdChmYWxzZSlcIlxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImZpbmFsUmlza3MgPCAxXCJcclxuICAgICAgICAgIGNsYXNzPVwiYmx1ZVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgQWRkIFJpc2tzXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgKGNsaWNrKT1cInN1Ym1pdCh0cnVlKVwiXHJcbiAgICAgICAgICAqbmdJZj1cInNob3dDb21wbGV0ZUFzc2Vzc21lbnRCdXR0b25cIlxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImZpbmFsUmlza3MgPCAxXCJcclxuICAgICAgICAgIGNsYXNzPVwiYmx1ZVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgQWRkIFJpc2tzIEFuZCBDb21wbGV0ZSBBc3Nlc3NtZW50XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGFwcC1sb2FkZXItaW5saW5lICpuZ0lmPVwibG9hZGVyXCI+PC9hcHAtbG9hZGVyLWlubGluZT5cclxuPC9kaXY+XHJcbiJdfQ==
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVsay12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL3NoYXJlZENvbXBvbmVudHMvYnVsay12aWV3L2J1bGstdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92eC13b3JrZmxvdy1lbmdpbmUvc3JjL2xpYi9zaGFyZWRDb21wb25lbnRzL2J1bGstdmlldy9idWxrLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsWUFBWSxFQUNaLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMENBQTBDLENBQUM7Ozs7O0FBTzFFLE1BQU0sT0FBTyxpQkFBaUI7SUFMOUI7UUFXVyxXQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ2YsdUJBQWtCLEdBQVksS0FBSyxDQUFDO1FBRW5DLHlCQUFvQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDMUMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFdEMsZUFBVSxHQUFHLENBQUMsQ0FBQztRQUNmLGlDQUE0QixHQUFHLEtBQUssQ0FBQztRQUNyQyxlQUFVLEdBQUcsY0FBYyxDQUFDLFVBQVUsQ0FBQztRQUN2QyxzQkFBaUIsR0FBRyxjQUFjLENBQUMsaUJBQWlCLENBQUM7S0E0Q3REO0lBMUNDLFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7WUFDcEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7Z0JBQzlDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtvQkFDaEIsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUM7aUJBQ3RCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO1lBQzlDLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxhQUFhLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBRTtnQkFDbkQsSUFBSSxJQUFJLEVBQUUsVUFBVSxJQUFJLElBQUksRUFBRSxNQUFNLEVBQUU7b0JBQ3BDLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUM7aUJBQzFDO2FBQ0Y7aUJBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLGFBQWEsRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFO2dCQUMxRCxJQUNFLElBQUksRUFBRSxVQUFVO29CQUNoQixJQUFJLEVBQUUsTUFBTTtvQkFDWixDQUFDLElBQUksRUFBRSxRQUFRLElBQUksSUFBSSxFQUFFLGFBQWEsQ0FBQyxFQUN2QztvQkFDQSxJQUFJLENBQUMsNEJBQTRCLEdBQUcsSUFBSSxDQUFDO2lCQUMxQzthQUNGO2lCQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxhQUFhLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBRTtnQkFDMUQsSUFDRSxJQUFJLEVBQUUsVUFBVTtvQkFDaEIsSUFBSSxFQUFFLE1BQU07b0JBQ1osSUFBSSxFQUFFLFFBQVE7b0JBQ2QsSUFBSSxFQUFFLGFBQWEsRUFDbkI7b0JBQ0EsSUFBSSxDQUFDLDRCQUE0QixHQUFHLElBQUksQ0FBQztpQkFDMUM7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU0sQ0FBQyxrQkFBdUI7UUFDNUIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyQixDQUFDOytHQTFEVSxpQkFBaUI7bUdBQWpCLGlCQUFpQixpWUNkOUIsMDJVQXNSQTs7NEZEeFFhLGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDRSxlQUFlOzhCQUtoQixjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUVJLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgT3V0cHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTVVMVElQTEVfUklTS1MgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvbXVsdGlwbGUtcmlza3MuY29uc3RhbnRzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWJ1bGstdmlldycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2J1bGstdmlldy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYnVsay12aWV3LmNvbXBvbmVudC5sZXNzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCdWxrVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XHJcbiAgQElucHV0KCkgcmlza0J1bGtVcGxvYWQhOiBhbnk7XHJcbiAgQElucHV0KCkgdGVtcGxhdGVJbmZvITogYW55O1xyXG4gIEBJbnB1dCgpIGZpbGVOYW1lITogYW55O1xyXG4gIEBJbnB1dCgpIGFzc2Vzc21lbnREYXlzRW5hYmxlITogYW55O1xyXG4gIEBJbnB1dCgpIGRlZmF1bHRPd25lciE6IGFueTtcclxuICBASW5wdXQoKSBsb2FkZXIgPSBmYWxzZTtcclxuICBASW5wdXQoKSBmZkxpbmtlZEdyY09iamVjdHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIHN1Ym1pdFJpc2tCdWxrVXBsb2FkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBjYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIGZpbmFsUmlza3MgPSAwO1xyXG4gIHNob3dDb21wbGV0ZUFzc2Vzc21lbnRCdXR0b24gPSBmYWxzZTtcclxuICBMSU5LRURfR1JDID0gTVVMVElQTEVfUklTS1MuTElOS0VEX0dSQztcclxuICBHUkNfRVJST1JfTUVTU0FHRSA9IE1VTFRJUExFX1JJU0tTLkdSQ19FUlJPUl9NRVNTQUdFO1xyXG5cclxuICBuZ09uQ2hhbmdlcygpIHtcclxuICAgIGlmICh0aGlzLnJpc2tCdWxrVXBsb2FkKSB7XHJcbiAgICAgIHRoaXMuZmluYWxSaXNrcyA9IDA7XHJcbiAgICAgIHRoaXMucmlza0J1bGtVcGxvYWQucmlza3MuZm9yRWFjaCgocmlzazogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJpc2suaXNWYWxpZCkge1xyXG4gICAgICAgICAgdGhpcy5maW5hbFJpc2tzICs9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMucmlza0J1bGtVcGxvYWQucmlza3MuZm9yRWFjaCgocmlzazogYW55KSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnJpc2tCdWxrVXBsb2FkPy53ZWlnaHRGYWN0b3JzPy5sZW5ndGggPT0gNCkge1xyXG4gICAgICAgIGlmIChyaXNrPy5saWtlbGlob29kICYmIHJpc2s/LmltcGFjdCkge1xyXG4gICAgICAgICAgdGhpcy5zaG93Q29tcGxldGVBc3Nlc3NtZW50QnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5yaXNrQnVsa1VwbG9hZD8ud2VpZ2h0RmFjdG9ycz8ubGVuZ3RoID09IDUpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICByaXNrPy5saWtlbGlob29kICYmXHJcbiAgICAgICAgICByaXNrPy5pbXBhY3QgJiZcclxuICAgICAgICAgIChyaXNrPy52ZWxvY2l0eSB8fCByaXNrPy52dWxuZXJhYmlsaXR5KVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5zaG93Q29tcGxldGVBc3Nlc3NtZW50QnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5yaXNrQnVsa1VwbG9hZD8ud2VpZ2h0RmFjdG9ycz8ubGVuZ3RoID09IDYpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICByaXNrPy5saWtlbGlob29kICYmXHJcbiAgICAgICAgICByaXNrPy5pbXBhY3QgJiZcclxuICAgICAgICAgIHJpc2s/LnZlbG9jaXR5ICYmXHJcbiAgICAgICAgICByaXNrPy52dWxuZXJhYmlsaXR5XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dDb21wbGV0ZUFzc2Vzc21lbnRCdXR0b24gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzdWJtaXQoY29tcGxldGVBc3Nlc3NtZW50OiBhbnkpIHtcclxuICAgIHRoaXMuc3VibWl0Umlza0J1bGtVcGxvYWQuZW1pdChjb21wbGV0ZUFzc2Vzc21lbnQpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICB0aGlzLmNhbmNlbC5lbWl0KCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJidWxrLXZpZXdcIj5cclxuICA8ZGl2IGNsYXNzPVwiYnVsay12aWV3LWhlYWRcIj5cclxuICAgIDxoMiBjbGFzcz1cImJ1bGstdmlldy10aXRsZVwiPlxyXG4gICAgICB7eyBmaWxlTmFtZSB9fVxyXG4gICAgPC9oMj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiYnVsay12aWV3LWJvZHlcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXdcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1yb3cgaGVhZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uIHNsLW5vXCI+IzwvZGl2PlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiXHJcbiAgICAgICAgICBbY2xhc3MudHdvLWNvbHVtbl09XCJoZWFkaW5nICYmIGkgPT09IDVcIlxyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGhlYWRpbmcgb2Ygcmlza0J1bGtVcGxvYWQ/LmhlYWRlcjsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICBbY2xhc3MubGFyZ2VdPVwiaGVhZGluZyAmJiBoZWFkaW5nLnN0YXJ0c1dpdGgoJ0luaGVyZW50JylcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgKm5nSWY9XCJoZWFkaW5nICYmICFoZWFkaW5nLnN0YXJ0c1dpdGgoJ0luaGVyZW50JykgJiYgIShpID09PSA1KVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IGhlYWRpbmcuaW5jbHVkZXMoXCIqXCIpID8gaGVhZGluZy5yZXBsYWNlKFwiKlwiLCBcIlwiKSA6IGhlYWRpbmcgfX1cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJoZWFkaW5nLmluY2x1ZGVzKCcqJylcIiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRpbmcgJiYgaGVhZGluZy5zdGFydHNXaXRoKCdJbmhlcmVudCcpXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctcm93XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW4gbGFyZ2VcIj5JbmhlcmVudCBSaXNrIEFzc2Vzc21lbnQ8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctcm93IG11bHRpLWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgbGV0IHdlaWdodEFnZUZhY3RvciBvZiByaXNrQnVsa1VwbG9hZC53ZWlnaHRGYWN0b3JzXHJcbiAgICAgICAgICAgICAgICAgICAgfCBzbGljZSA6IDJcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3sgd2VpZ2h0QWdlRmFjdG9yIH19XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGluZyAmJiBpID09PSA1XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctcm93XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW4gbGFyZ2VcIj5cclxuICAgICAgICAgICAgICAgIHt7IGhlYWRpbmcuaW5jbHVkZXMoXCIqXCIpID8gaGVhZGluZy5yZXBsYWNlKFwiKlwiLCBcIlwiKSA6IGhlYWRpbmcgfX1cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaGVhZGluZy5pbmNsdWRlcygnKicpXCIgY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LXJvdyBtdWx0aS1jb2x1bW5cIiBbY2xhc3MudHdvLWNvbHVtbl09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCJcclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICBsZXQgd2VpZ2h0QWdlRmFjdG9yIG9mIHJpc2tCdWxrVXBsb2FkPy53ZWlnaHRGYWN0b3JzXHJcbiAgICAgICAgICAgICAgICAgICAgfCBzbGljZSA6IDAgOiAyXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgICAgIHdlaWdodEFnZUZhY3Rvci5pbmNsdWRlcyhcIipcIilcclxuICAgICAgICAgICAgICAgICAgICA/IHdlaWdodEFnZUZhY3Rvci5yZXBsYWNlKFwiKlwiLCBcIlwiKVxyXG4gICAgICAgICAgICAgICAgICAgIDogd2VpZ2h0QWdlRmFjdG9yXHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ3ZWlnaHRBZ2VGYWN0b3IuaW5jbHVkZXMoJyonKVwiIGNsYXNzPVwicmVxdWlyZWRcIlxyXG4gICAgICAgICAgICAgICAgICA+Kjwvc3BhblxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiZXhlbC12aWV3LXJvd1wiXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IHJpc2sgb2Ygcmlza0J1bGtVcGxvYWQucmlza3M7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW4gc2wtbm9cIiBbY2xhc3MuZXJyb3JdPVwiIXJpc2suaXNWYWxpZFwiPlxyXG4gICAgICAgICAge3sgaSArIDEgfX1cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIiBbY2xhc3MuZXJyb3JdPVwiIXJpc2s/LnJpc2tOYW1lXCI+XHJcbiAgICAgICAgICB7eyByaXNrPy5yaXNrTmFtZSB9fVxyXG4gICAgICAgICAgPGlcclxuICAgICAgICAgICAgKm5nSWY9XCIhcmlzaz8ucmlza05hbWVcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImljb25zXCJcclxuICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiJ1Jpc2sgTmFtZSBtdXN0IGJlIHBvcHVsYXRlZC4nXCJcclxuICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCJcclxuICAgICAgICAgICAgdHlwZT1cIndoaXRlXCJcclxuICAgICAgICAgICAgZGVsYXk9XCIwXCJcclxuICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgID4mI3hlOTMyOzwvaVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPnt7IHJpc2s/LmRlc2NyaXB0aW9uIH19PC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCIgW2NsYXNzLmVycm9yXT1cIiFyaXNrPy5yY05hbWVcIj5cclxuICAgICAgICAgIHt7IHJpc2s/LnJjTmFtZSB9fVxyXG4gICAgICAgICAgPGlcclxuICAgICAgICAgICAgKm5nSWY9XCIhcmlzaz8ucmNOYW1lXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXHJcbiAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIidBc3NpZ24gdGhpcyByaXNrIHRvIGEgUmVzcG9uc2liaWxpdHkgQ2VudGVyLidcIlxyXG4gICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIlxyXG4gICAgICAgICAgICB0eXBlPVwid2hpdGVcIlxyXG4gICAgICAgICAgICBkZWxheT1cIjBcIlxyXG4gICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgPiYjeGU5MzI7PC9pXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj57eyByaXNrPy5vd25lciB9fTwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+e3sgcmlzaz8ucmlza093bmVyIH19PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1yb3cgbXVsdGktY29sdW1uXCIgW2NsYXNzLnR3by1jb2x1bW5dPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIiBbY2xhc3MuZXJyb3JdPVwiIXJpc2s/LmlzVmFsaWRGcmVxdWVuY3lcIj5cclxuICAgICAgICAgICAge3sgcmlzaz8uZnJlcXVlbmN5IH19XHJcbiAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCIhcmlzaz8uaXNWYWxpZEZyZXF1ZW5jeVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXHJcbiAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiXHJcbiAgICAgICAgICAgICAgICAnU2V0IGEgZnJlcXVlbmN5IGZvciB0aGUgY29tcGxldGlvbiBvZiB0aGUgaW5oZXJlbnQgcmlzayBhc3Nlc3NtZW50LidcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiXHJcbiAgICAgICAgICAgICAgdHlwZT1cIndoaXRlXCJcclxuICAgICAgICAgICAgICBkZWxheT1cIjBcIlxyXG4gICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgID4mI3hlOTMyOzwvaVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCIgW2NsYXNzLmVycm9yXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgIHt7IHJpc2s/LmVtYWlsUmVtaW5kZXIgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiXHJcbiAgICAgICAgICBbY2xhc3MuZXJyb3JdPVwiXHJcbiAgICAgICAgICAgIChyaXNrPy5vd25lciAmJiByaXNrPy5vd25lciA9PSByaXNrPy5vdmVyc2VlcikgfHxcclxuICAgICAgICAgICAgKCFyaXNrPy5vd25lciAmJiBkZWZhdWx0T3duZXIgPT0gcmlzaz8ub3ZlcnNlZXIpXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7IHJpc2s/Lm92ZXJzZWVyIH19XHJcbiAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgIChyaXNrPy5vd25lciAmJiByaXNrPy5vd25lciA9PSByaXNrPy5vdmVyc2VlcikgfHxcclxuICAgICAgICAgICAgICAoIXJpc2s/Lm93bmVyICYmIGRlZmF1bHRPd25lciA9PSByaXNrPy5vdmVyc2VlcilcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXHJcbiAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxyXG4gICAgICAgICAgICAgIChyaXNrPy5vd25lclxyXG4gICAgICAgICAgICAgICAgPyAnVGhlIFJpc2sgT3duZXIgY2Fubm90IGFsc28gYmUgdGhlJ1xyXG4gICAgICAgICAgICAgICAgOiAnWW91IGNhbm5vdCBiZSBhJykgK1xyXG4gICAgICAgICAgICAgICcgT3ZlcnNpZ2h0IG9mIHRoZSByaXNrLiBTZWxlY3QgYW5vdGhlciB1c2VyIGFzIHRoZSBPdmVyc2lnaHQgb2YgdGhpcyByaXNrLidcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCJcclxuICAgICAgICAgICAgdHlwZT1cIndoaXRlXCJcclxuICAgICAgICAgICAgZGVsYXk9XCIwXCJcclxuICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgID4mI3hlOTMyOzwvaVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHJpc2tCdWxrVXBsb2FkPy5oZWFkZXIgJiZcclxuICAgICAgICAgICAgcmlza0J1bGtVcGxvYWQ/LmhlYWRlcj8uaW5jbHVkZXMoJ1JlY29tbWVuZGVkIE1pdGlnYXRpb24gUHJpb3JpdHknKVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgIGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgcmlzaz8ubWl0aWdhdGlvblByaW9yaXR5IH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj57eyByaXNrPy5taXRpZ2F0aW9uUGxhbnMgfX08L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPnt7IHJpc2s/LnJpc2tMYWJlbCB9fTwvZGl2PlxyXG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIiAqbmdJZj1cImFzc2Vzc21lbnREYXlzRW5hYmxlXCIgW2NsYXNzLmVycm9yXT1cIiFyaXNrPy5hc3Nlc3NtZW50RGVhZExpbmVcIj5cclxuICAgICAgICAgICAgICAgICAge3tyaXNrPy5hc3Nlc3NtZW50RGVhZExpbmV9fVxyXG4gICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIiFyaXNrPy5hc3Nlc3NtZW50RGVhZExpbmVcIiBjbGFzcz1cImljb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIidTZXQgYSBkZWFkbGluZSBmb3IgdGhlIGNvbXBsZXRpb24gb2YgdGhlIGluaGVyZW50IHJpc2sgYXNzZXNzbWVudC4nXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiIHR5cGU9XCJ3aGl0ZVwiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIj4mI3hlOTMyOzwvaT5cclxuICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1yb3cgbXVsdGktY29sdW1uXCI+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5lcnJvcl09XCJcclxuICAgICAgICAgICAgICByaXNrPy5saWtlbGlob29kICYmXHJcbiAgICAgICAgICAgICAgIXRlbXBsYXRlSW5mbz8ubGlrZWxpaG9vZC5pbmNsdWRlcyhyaXNrPy5saWtlbGlob29kKVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7eyByaXNrPy5saWtlbGlob29kIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCJcclxuICAgICAgICAgICAgW2NsYXNzLmVycm9yXT1cIlxyXG4gICAgICAgICAgICAgIHJpc2s/LmltcGFjdCAmJiAhdGVtcGxhdGVJbmZvPy5pbXBhY3QuaW5jbHVkZXMocmlzaz8uaW1wYWN0KVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7eyByaXNrPy5pbXBhY3QgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIlxyXG4gICAgICAgICAgICBbY2xhc3MuZXJyb3JdPVwiXHJcbiAgICAgICAgICAgICAgcmlzaz8udmVsb2NpdHkgJiYgIXRlbXBsYXRlSW5mbz8udmVsb2NpdHkuaW5jbHVkZXMocmlzaz8udmVsb2NpdHkpXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwicmlza0J1bGtVcGxvYWQ/LndlaWdodEZhY3RvcnM/LmluY2x1ZGVzKCdWZWxvY2l0eScpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3sgcmlzaz8udmVsb2NpdHkgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIlxyXG4gICAgICAgICAgICBbY2xhc3MuZXJyb3JdPVwiXHJcbiAgICAgICAgICAgICAgcmlzaz8udnVsbmVyYWJpbGl0eSAmJlxyXG4gICAgICAgICAgICAgICF0ZW1wbGF0ZUluZm8/LnZ1bG5lcmFiaWxpdHkuaW5jbHVkZXMocmlzaz8udnVsbmVyYWJpbGl0eSlcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJyaXNrQnVsa1VwbG9hZD8ud2VpZ2h0RmFjdG9ycz8uaW5jbHVkZXMoJ1Z1bG5lcmFiaWxpdHknKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IHJpc2s/LnZ1bG5lcmFiaWxpdHkgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHJpc2tCdWxrVXBsb2FkPy5oZWFkZXIgJiZcclxuICAgICAgICAgICAgcmlza0J1bGtVcGxvYWQ/LmhlYWRlcj8uaW5jbHVkZXMoXHJcbiAgICAgICAgICAgICAgJ0RvIHlvdSB3YW50IHRvIGFwcGx5IHRoZSBzYW1lIHJpc2sgcmF0aW5ncyBmb3IgYWxsIFJlc3BvbnNpYmlsaXR5IENlbnRlcnM/J1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyByaXNrPy5hcHBseVNhbWVSaXNrUmF0aW5nIH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgZmZMaW5rZWRHcmNPYmplY3RzICYmXHJcbiAgICAgICAgICAgIHJpc2tCdWxrVXBsb2FkPy5oZWFkZXIgJiZcclxuICAgICAgICAgICAgcmlza0J1bGtVcGxvYWQ/LmhlYWRlcj8uaW5jbHVkZXMoTElOS0VEX0dSQylcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgICBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIlxyXG4gICAgICAgICAgW2NsYXNzLmVycm9yXT1cInJpc2s/LmlzR3JjTm90VmFsaWRcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7IHJpc2s/LmxpbmtlZEdyY09iamVjdCB9fVxyXG4gICAgICAgICAgPGlcclxuICAgICAgICAgICAgKm5nSWY9XCJyaXNrPy5pc0dyY05vdFZhbGlkXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXHJcbiAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIkdSQ19FUlJPUl9NRVNTQUdFXCJcclxuICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCJcclxuICAgICAgICAgICAgdHlwZT1cIndoaXRlXCJcclxuICAgICAgICAgICAgZGVsYXk9XCIwXCJcclxuICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgID4mI3hlOTMyOzwvaVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj57e3Jpc2s/LmN1c3RvbUZpZWxkMX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj57e3Jpc2s/LmN1c3RvbUZpZWxkMn19PC9kaXY+IC0tPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicmlzaz8uY3VzdG9tVGFnXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiICpuZ0Zvcj1cImxldCB0YWcgb2Ygcmlzaz8uY3VzdG9tVGFnXCI+XHJcbiAgICAgICAgICAgIHt7IHRhZz8uY3VzdG9tX3RhZ192YWx1ZSB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYnVsay12aWV3LWZvb3RlclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiPlxyXG4gICAgICAgIDxwPlxyXG4gICAgICAgICAge3sgZmluYWxSaXNrcyB9fSBvdXQgb2Yge3sgcmlza0J1bGtVcGxvYWQ/LnJpc2tzPy5sZW5ndGggfX0gcmlza3Mgd2lsbFxyXG4gICAgICAgICAgYmUgYWRkZWQgdG8gdGhlIFJpc2sgUmVnaXN0ZXIuXHJcbiAgICAgICAgPC9wPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XHJcbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xvc2UoKVwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIChjbGljayk9XCJzdWJtaXQoZmFsc2UpXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCJmaW5hbFJpc2tzIDwgMVwiXHJcbiAgICAgICAgICBjbGFzcz1cImJsdWVcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIEFkZCBSaXNrc1xyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIChjbGljayk9XCJzdWJtaXQodHJ1ZSlcIlxyXG4gICAgICAgICAgKm5nSWY9XCJzaG93Q29tcGxldGVBc3Nlc3NtZW50QnV0dG9uXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCJmaW5hbFJpc2tzIDwgMVwiXHJcbiAgICAgICAgICBjbGFzcz1cImJsdWVcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIEFkZCBSaXNrcyBBbmQgQ29tcGxldGUgQXNzZXNzbWVudFxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxhcHAtbG9hZGVyLWlubGluZSAqbmdJZj1cImxvYWRlclwiPjwvYXBwLWxvYWRlci1pbmxpbmU+XHJcbjwvZGl2PlxyXG4iXX0=