vcomply-workflow-engine 2.9.67 → 2.9.68

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.
Files changed (21) hide show
  1. package/bundles/vcomply-workflow-engine.umd.js +37 -19
  2. package/bundles/vcomply-workflow-engine.umd.js.map +1 -1
  3. package/esm2015/lib/sharedComponents/approval-workflow/approval-create-form/approval-create-form.component.js +20 -4
  4. package/esm2015/lib/sharedComponents/approval-workflow/approval-create-form/approval-create-form.component.ngfactory.js +83 -54
  5. package/esm2015/lib/sharedComponents/approval-workflow/approval-create-form/approval-create-form.component.ngsummary.json +1 -1
  6. package/esm2015/lib/sharedComponents/approval-workflow/approval-workflow-list/approval-workflow-list.component.js +2 -2
  7. package/esm2015/lib/sharedComponents/approval-workflow/approval-workflow-list/approval-workflow-list.component.ngfactory.js +9 -9
  8. package/esm2015/lib/sharedComponents/format-and-evidence/format-and-evidence.component.js +2 -2
  9. package/esm2015/lib/sharedComponents/format-and-evidence/format-and-evidence.component.ngfactory.js +8 -8
  10. package/esm2015/lib/sharedComponents/select-approvers/select-approvers.component.js +2 -1
  11. package/esm2015/lib/workflow-engine-container/workflow-engine-container.component.js +2 -2
  12. package/esm2015/lib/workflow-engine-container/workflow-engine-container.component.ngfactory.js +80 -65
  13. package/esm2015/lib/workflow-policy/workflow-policy.component.js +14 -13
  14. package/esm2015/lib/workflow-policy/workflow-policy.component.ngfactory.js +151 -151
  15. package/esm2015/lib/workflow-program/create-program-ui/user-group-list/user-group-list.component.js +2 -2
  16. package/esm2015/lib/workflow-program/create-program-ui/user-group-list/user-group-list.component.ngfactory.js +4 -4
  17. package/fesm2015/vcomply-workflow-engine.js +37 -19
  18. package/fesm2015/vcomply-workflow-engine.js.map +1 -1
  19. package/lib/sharedComponents/approval-workflow/approval-create-form/approval-create-form.component.d.ts +2 -0
  20. package/package.json +1 -1
  21. package/vcomply-workflow-engine.metadata.json +1 -1
@@ -99,13 +99,17 @@ export class ApprovalCreateFormComponent {
99
99
  this.enableApprovalLevel = false;
100
100
  }
101
101
  deleteLevel(index) {
102
+ var _a;
102
103
  // Approver Level delete
104
+ console.log('this.approvalWorkflows ===>', this.approvalWorkflows);
103
105
  this.approvalWorkflows.splice(index, 1);
106
+ this.levels = ((_a = this.approvalWorkflows) === null || _a === void 0 ? void 0 : _a.length) + 1;
104
107
  for (let i = index; i < this.approvalWorkflows.length; i++) {
105
108
  if (this.approvalWorkflows[index]['level1'] ===
106
109
  this.approvalWorkflows[index]['alias_name']) {
107
110
  this.approvalWorkflows[index]['alias_name'] = `Level ${i + 1}`;
108
111
  }
112
+ console.log(' `Level ${i + 1}` ==>', `Level ${i + 1}`);
109
113
  this.approvalWorkflows[index]['level1'] = `Level ${i + 1}`;
110
114
  }
111
115
  }
@@ -145,6 +149,10 @@ export class ApprovalCreateFormComponent {
145
149
  organisation_id: this.authService.getOrganizationId(),
146
150
  delete_flag: 0,
147
151
  Is_approval: 1,
152
+ description: {
153
+ attachments: [],
154
+ text: this.createDescription,
155
+ },
148
156
  };
149
157
  if (this.mode === 'EDIT') {
150
158
  this._editWorkflow(payload);
@@ -176,10 +184,12 @@ export class ApprovalCreateFormComponent {
176
184
  });
177
185
  }
178
186
  populateApprover() {
187
+ var _a;
188
+ console.log(' this.approverDetails ==>', this.approverDetails);
179
189
  const { workflow_name, approval_workflow, description, category_arr } = this.approverDetails;
180
190
  this.workflowName = workflow_name;
181
191
  this.approvalWorkflows = approval_workflow;
182
- this.description = description;
192
+ this.createDescription = (_a = description === null || description === void 0 ? void 0 : description.text) !== null && _a !== void 0 ? _a : '';
183
193
  const categoryDetails = category_arr.map((category) => {
184
194
  return {
185
195
  item_id: category === null || category === void 0 ? void 0 : category.cal_category_id,
@@ -190,21 +200,27 @@ export class ApprovalCreateFormComponent {
190
200
  custom_tags: [],
191
201
  };
192
202
  });
203
+ this.selectedCategoryId = category_arr.map((category) => category === null || category === void 0 ? void 0 : category.cal_category_id);
193
204
  this.filteredCategory = categoryDetails;
194
205
  }
195
206
  closeForm() {
196
207
  this.saveApprovalWorkflow.emit();
197
208
  }
198
209
  deselectUser(approver, index) {
199
- var _a, _b;
210
+ var _a, _b, _c;
200
211
  const removeIndex = (_a = this.approvalWorkflows[index]) === null || _a === void 0 ? void 0 : _a.approvers.findIndex((ele) => (ele === null || ele === void 0 ? void 0 : ele.member_id) === (approver === null || approver === void 0 ? void 0 : approver.member_id));
201
212
  (_b = this.approvalWorkflows[index]) === null || _b === void 0 ? void 0 : _b.approvers.splice(removeIndex, 1);
213
+ this.approvalWorkflows = this.approvalWorkflows.filter((workflow) => { var _a; return (_a = workflow.approvers) === null || _a === void 0 ? void 0 : _a.length; });
214
+ this.levels = ((_c = this.approvalWorkflows) === null || _c === void 0 ? void 0 : _c.length) + 1;
215
+ }
216
+ approvalNameSelection(type, event) {
217
+ this.approvalName = event ? type : '';
202
218
  }
203
219
  }
204
220
  ApprovalCreateFormComponent.decorators = [
205
221
  { type: Component, args: [{
206
222
  selector: 'app-approval-create-form',
207
- template: "<div class=\"approval-workflow-dialog\">\r\n <div\r\n class=\"approval-workflow-dialog-head vx-d-flex vx-align-center vx-justify-between vx-pl-4 vx-pr-4\"\r\n >\r\n <div class=\"vx-fs-14 vx-fw-500 vx-label-txt\">\r\n <button (click)=\"closeCreateForm()\" class=\"back-btn vx-p-0 vx-m-0\">\r\n <i class=\"icons vx-mr-1\">&#xe91d;</i></button\r\n >Select Approval Workflow\r\n </div>\r\n </div>\r\n <div class=\"approval-workflow-dialog-body\">\r\n <app-no-data\r\n *ngIf=\"!approverWorkFlowList.length && !enableApprovalCreate\"\r\n [noDataImage]=\"\r\n 'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/approval-workflow.svg'\r\n \"\r\n [noDataText]=\"\r\n 'You did not set any approval workflow.<br>Click on the <strong>Create An Approval Workflow</strong> button to begin.'\r\n \"\r\n [noDataButton]=\"'CREATE AN APPROVAL WORKFLOW'\"\r\n [button]=\"'approval'\"\r\n (buttonAction)=\"createApprovalAction($event)\"\r\n ></app-no-data>\r\n\r\n <div\r\n *ngIf=\"enableApprovalCreate || enableCreateForm\"\r\n class=\"approval-workflow-dialog-body-inner vx-d-flex vx-align-center vx-justify-center\"\r\n >\r\n <div class=\"approval-workflow-form\">\r\n <!-- Workflow Name -->\r\n <div class=\"approval-workflow-form-row vx-mb-5\">\r\n <div class=\"form-left\">\r\n <img\r\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/what.svg\"\r\n />\r\n </div>\r\n <div class=\"form-right\">\r\n <div\r\n class=\"label-heading vx-fs-11 vx-fw-500 vx-tt-uppercase vx-tt-uppercase vx-mb-2\"\r\n >\r\n WORKFLOW NAME <span class=\"required vx-fs-14 vx-fw-500\">*</span>\r\n </div>\r\n <input\r\n class=\"textField\"\r\n type=\"text\"\r\n [(ngModel)]=\"workflowName\"\r\n placeholder=\"Name of the approval workflow\"\r\n />\r\n <div class=\"vx-mt-2\">\r\n <marx-editor\r\n [editorConfig]=\"description\"\r\n [(ngModel)]=\"createDescription\"\r\n ></marx-editor>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Policy Category -->\r\n <div class=\"approval-workflow-form-row vx-mb-5\">\r\n <div class=\"form-left\">\r\n <img\r\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/category.svg\"\r\n />\r\n </div>\r\n <div class=\"form-right\">\r\n <div\r\n class=\"label-heading vx-fs-11 vx-fw-500 vx-tt-uppercase vx-tt-uppercase vx-mb-2\"\r\n >\r\n SELECT POLICY CATEGORY\r\n <span class=\"required vx-fs-14 vx-fw-500\">*</span>\r\n </div>\r\n <div\r\n *ngIf=\"filteredCategory?.length === 0\"\r\n (click)=\"enableCategory(true)\"\r\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\r\n [class.disabled]=\"false\"\r\n >\r\n <div\r\n class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\r\n >\r\n Select the policy category that this approval<br />workflow\r\n applies to\r\n </div>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"filteredCategory?.length > 0\"\r\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\r\n >\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-1 vx-pr-2\"\r\n >\r\n <ng-container\r\n *ngFor=\"\r\n let category of filteredCategory | slice : 0 : 1;\r\n let catIndex = index\r\n \"\r\n >\r\n <i\r\n (click)=\"removeCategory(category)\"\r\n class=\"icons cross vx-fs-12 vx-paragraph-txt vx-mr-1 vx-ml-1\"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"category?.item_name\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{ category?.item_name }}</span\r\n >\r\n </ng-container>\r\n <button\r\n *ngIf=\"filteredCategory?.length > 1\"\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"policyOwnerPopover.popover()\"\r\n placement=\"right\"\r\n >\r\n +{{ filteredCategory?.length - 1 }}\r\n </button>\r\n </div>\r\n <app-popover #policyOwnerPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let category of filteredCategory | slice : 1\">\r\n <div class=\"avatar-card\">\r\n <span\r\n class=\"value\"\r\n [appTooltip]=\"category?.item_name\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >\r\n <i (click)=\"removeCategory(category)\" class=\"icons\"\r\n >&#xe90d;</i\r\n >\r\n {{ category?.item_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <button\r\n filteredCategory\r\n (click)=\"enableCategory(true)\"\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\r\n >\r\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Approval Workflow -->\r\n <div class=\"approval-workflow-form-row vx-mb-5\">\r\n <div class=\"form-left\">\r\n <img\r\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/approval.svg\"\r\n />\r\n </div>\r\n <div class=\"form-right\">\r\n <div\r\n class=\"label-heading vx-fs-11 vx-fw-500 vx-tt-uppercase vx-tt-uppercase vx-mb-2\"\r\n >\r\n APPROVERS & APPROVAL WORKFLOW\r\n <span class=\"required vx-fs-14 vx-fw-500\">*</span>\r\n </div>\r\n <div\r\n *ngIf=\"approvalWorkflows?.length === 0\"\r\n (click)=\"addLevelsClicked(true)\"\r\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\r\n [class.disabled]=\"false\"\r\n >\r\n <div\r\n class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\r\n >\r\n Select approvers and select the order of approval\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"approvalWorkflows?.length > 0\">\r\n <div\r\n *ngFor=\"\r\n let approvalWorkflow of approvalWorkflows;\r\n let i = index\r\n \"\r\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between vx-mb-2\"\r\n >\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div class=\"level-left vx-d-flex vx-align-center\">\r\n <div class=\"vx-d-block\">\r\n <div\r\n class=\"level-name vx-fs-9 vx-fw-500 vx-paragraph-txt vx-tt-uppercase vx-lh-3\"\r\n [appTooltip]=\"approvalWorkflow?.alias_name\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >\r\n {{ approvalWorkflow?.alias_name }}\r\n </div>\r\n <div\r\n class=\"vx-fs-9 vx-fw-500 vx-label-txt vx-tt-uppercase vx-lh-3\"\r\n >\r\n {{ approvalWorkflow?.type }}\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-1 vx-pr-2 vx-ml-2\"\r\n >\r\n <i (click)=\"deselectUser(approvalWorkflow?.approvers[0],i)\"\r\n class=\"icons cross vx-fs-12 vx-paragraph-txt vx-mr-1 vx-ml-1\"\r\n >&#xe9ae;</i\r\n >\r\n <div *ngIf=\"\r\n approvalWorkflow?.type?.toLowerCase() === 'sequential' &&\r\n approvalWorkflow?.approvers?.length < 2\r\n \"\r\n class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\"\r\n >\r\n {{\r\n 1 == approvalWorkflow?.approvers?.length\r\n ? \"Final\"\r\n : 1\r\n }}\r\n </div>\r\n <div\r\n *ngIf=\"approvalWorkflow?.approvers?.length > 1 && approvalWorkflow?.type?.toLowerCase() === 'sequential'\"\r\n class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\"\r\n >\r\n 1\r\n </div>\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"approvalWorkflow?.approvers[0]?.member_name\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{ approvalWorkflow?.approvers[0]?.member_name }}</span\r\n >\r\n <button\r\n *ngIf=\"approvalWorkflow?.approvers?.length > 1\"\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"workflowPopover.popover()\"\r\n placement=\"right\"\r\n >\r\n + {{ approvalWorkflow?.approvers?.length - 1 }}\r\n </button>\r\n </div>\r\n <app-popover #workflowPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"\r\n let approver of approvalWorkflow?.approvers\r\n | slice : 1;\r\n let j = index\r\n \"\r\n >\r\n <div class=\"avatar-card\">\r\n <span\r\n class=\"value\"\r\n [appTooltip]=\"approver?.member_name\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >\r\n <i (click)=\"deselectUser(approver,i)\" class=\"icons\">&#xe90d;</i>\r\n <span *ngIf=\"approvalWorkflow?.type?.toLowerCase() === 'sequential'\"\r\n class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\"\r\n >{{\r\n j+1 ===\r\n approvalWorkflow?.approvers?.length - 1\r\n ? \"Final\"\r\n : j + 2\r\n }}</span\r\n >\r\n {{ approver?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <button\r\n (click)=\"editApproval(approvalWorkflow, i)\"\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\r\n >\r\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\r\n </button>\r\n <button\r\n (click)=\"deleteLevel(i)\"\r\n class=\"deleteBtn vx-fs-11 vx-fw-600 vx-tt-uppercase vx-p-0 vx-m-0 vx-ml-4 vx-d-flex vx-align-center\"\r\n >\r\n <i class=\"icons vx-mr-1\">&#xe9ae;</i> DELETE\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <button\r\n *ngIf=\"approvalWorkflows?.length > 0\"\r\n (click)=\"addLevelsClicked(true)\"\r\n class=\"addMoreBtn vx-fs-11 vx-fw-500 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-mt-1\"\r\n >\r\n + ADD MORE LEVELS\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <vui-floating-bar\r\n *ngIf=\"enableApprovalCreate || enableCreateForm\"\r\n [nextDisabled]=\"\r\n workflowName?.trim() === '' ||\r\n approvalWorkflows?.length === 0 ||\r\n filteredCategory?.length === 0\r\n \"\r\n (closeList)=\"closeCreateForm()\"\r\n (closeEvent)=\"nextClick()\"\r\n ></vui-floating-bar>\r\n </div>\r\n</div>\r\n\r\n<!-- [selectedItems]=\"policyForm.selectedCategories\" -->\r\n\r\n<app-select-approvers\r\n *ngIf=\"enableApprovalLevel\"\r\n [allApprovers]=\"allApprovers\"\r\n (closeSelectApprover)=\"closeSelectApprover()\"\r\n (selectedApprover)=\"selectedApprover($event)\"\r\n [levels]=\"levels\"\r\n [editApprovalData]=\"editApprovalData\"\r\n></app-select-approvers>\r\n\r\n<app-checkbox-list\r\n *ngIf=\"enablePolicyCategory\"\r\n [config]=\"categoryConfig\"\r\n [twoColumn]=\"false\"\r\n [itemsList]=\"selectedCategory\"\r\n [identifierKey]=\"'_id'\"\r\n [displayKey]=\"'item_name'\"\r\n [tooltipKey]=\"'item_name'\"\r\n (saveList)=\"saveCategoryList($event)\"\r\n (closeList)=\"closeCategoryList()\"\r\n [selectedItems]=\"filteredCategory\"\r\n>\r\n</app-checkbox-list>\r\n",
223
+ template: "<div class=\"approval-workflow-dialog\">\r\n <div\r\n class=\"approval-workflow-dialog-head vx-d-flex vx-align-center vx-justify-between vx-pl-4 vx-pr-4\"\r\n >\r\n <div class=\"vx-fs-14 vx-fw-500 vx-label-txt\">\r\n <button (click)=\"closeCreateForm()\" class=\"back-btn vx-p-0 vx-m-0\">\r\n <i class=\"icons vx-mr-1\">&#xe91d;</i></button\r\n >Select Approval Workflow\r\n </div>\r\n </div>\r\n <div class=\"approval-workflow-dialog-body\">\r\n <app-no-data\r\n *ngIf=\"!approverWorkFlowList.length && !enableApprovalCreate\"\r\n [noDataImage]=\"\r\n 'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/approval-workflow.svg'\r\n \"\r\n [noDataText]=\"\r\n 'You did not set any approval workflow.<br>Click on the <strong>Create An Approval Workflow</strong> button to begin.'\r\n \"\r\n [noDataButton]=\"'CREATE AN APPROVAL WORKFLOW'\"\r\n [button]=\"'approval'\"\r\n (buttonAction)=\"createApprovalAction($event)\"\r\n ></app-no-data>\r\n\r\n <div\r\n *ngIf=\"enableApprovalCreate || enableCreateForm\"\r\n class=\"approval-workflow-dialog-body-inner vx-d-flex vx-align-center vx-justify-center\"\r\n >\r\n <div class=\"approval-workflow-form\">\r\n <!-- Workflow Name -->\r\n <div class=\"approval-workflow-form-row vx-mb-5\">\r\n <div class=\"form-left\">\r\n <img\r\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/what.svg\"\r\n />\r\n </div>\r\n <div class=\"form-right\">\r\n <div\r\n class=\"label-heading vx-fs-11 vx-fw-500 vx-tt-uppercase vx-tt-uppercase vx-mb-2\"\r\n >\r\n WORKFLOW NAME <span class=\"required vx-fs-14 vx-fw-500\">*</span>\r\n </div>\r\n <input *ngIf=\"!workflowName?.length || approvalName === 'name'\"\r\n (keydown)=\"approvalName = 'name'\"\r\n (focusin)=\"approvalNameSelection('name',true)\"\r\n (focusout)=\"approvalNameSelection('name',false)\"\r\n class=\"textField\"\r\n type=\"text\"\r\n [(ngModel)]=\"workflowName\"\r\n placeholder=\"Name of the approval workflow\"\r\n />\r\n <div *ngIf=\"workflowName?.length && approvalName !== 'name'\"\r\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\r\n >\r\n <div class=\"selectBoxText vx-fs-13 vx-paragraph-txt\" [appTooltip]=\"workflowName\" placement=\"bottom-left\"\r\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">\r\n {{workflowName}}\r\n </div>\r\n <button (click)=\"approvalNameSelection('name', true)\"\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\r\n >\r\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\r\n </button>\r\n </div>\r\n <div class=\"vx-mt-2\">\r\n <marx-editor\r\n [editorConfig]=\"description\"\r\n [(ngModel)]=\"createDescription\"\r\n ></marx-editor>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Policy Category -->\r\n <div class=\"approval-workflow-form-row vx-mb-5\">\r\n <div class=\"form-left\">\r\n <img\r\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/category.svg\"\r\n />\r\n </div>\r\n <div class=\"form-right\">\r\n <div\r\n class=\"label-heading vx-fs-11 vx-fw-500 vx-tt-uppercase vx-tt-uppercase vx-mb-2\"\r\n >\r\n SELECT POLICY CATEGORY\r\n <span class=\"required vx-fs-14 vx-fw-500\">*</span>\r\n </div>\r\n <div\r\n *ngIf=\"filteredCategory?.length === 0\"\r\n (click)=\"enableCategory(true)\"\r\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\r\n [class.disabled]=\"false\"\r\n >\r\n <div\r\n class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\r\n >\r\n Select the policy category that this approval<br />workflow\r\n applies to\r\n </div>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"filteredCategory?.length > 0\"\r\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\r\n >\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-1 vx-pr-2\"\r\n >\r\n <ng-container\r\n *ngFor=\"\r\n let category of filteredCategory | slice : 0 : 1;\r\n let catIndex = index\r\n \"\r\n >\r\n <i\r\n (click)=\"removeCategory(category)\"\r\n class=\"icons cross vx-fs-12 vx-paragraph-txt vx-mr-1 vx-ml-1\"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"category?.item_name\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{ category?.item_name }}</span\r\n >\r\n </ng-container>\r\n <button\r\n *ngIf=\"filteredCategory?.length > 1\"\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"policyOwnerPopover.popover()\"\r\n placement=\"right\"\r\n >\r\n +{{ filteredCategory?.length - 1 }}\r\n </button>\r\n </div>\r\n <app-popover #policyOwnerPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let category of filteredCategory | slice : 1\">\r\n <div class=\"avatar-card\">\r\n <span\r\n class=\"value\"\r\n [appTooltip]=\"category?.item_name\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >\r\n <i (click)=\"removeCategory(category)\" class=\"icons\"\r\n >&#xe90d;</i\r\n >\r\n {{ category?.item_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <button\r\n filteredCategory\r\n (click)=\"enableCategory(true)\"\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\r\n >\r\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Approval Workflow -->\r\n <div class=\"approval-workflow-form-row vx-mb-5\">\r\n <div class=\"form-left\">\r\n <img\r\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/approval.svg\"\r\n />\r\n </div>\r\n <div class=\"form-right\">\r\n <div\r\n class=\"label-heading vx-fs-11 vx-fw-500 vx-tt-uppercase vx-tt-uppercase vx-mb-2\"\r\n >\r\n APPROVERS & APPROVAL WORKFLOW\r\n <span class=\"required vx-fs-14 vx-fw-500\">*</span>\r\n </div>\r\n <div\r\n *ngIf=\"approvalWorkflows?.length === 0\"\r\n (click)=\"addLevelsClicked(true)\"\r\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\r\n [class.disabled]=\"false\"\r\n >\r\n <div\r\n class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\r\n >\r\n Select approvers and select the order of approval\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"approvalWorkflows?.length > 0\">\r\n <div\r\n *ngFor=\"\r\n let approvalWorkflow of approvalWorkflows;\r\n let i = index\r\n \"\r\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between vx-mb-2\"\r\n >\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div class=\"level-left vx-d-flex vx-align-center\">\r\n <div class=\"vx-d-block\">\r\n <div\r\n class=\"level-name vx-fs-9 vx-fw-500 vx-paragraph-txt vx-tt-uppercase vx-lh-3\"\r\n [appTooltip]=\"approvalWorkflow?.alias_name\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >\r\n {{ approvalWorkflow?.alias_name }}\r\n </div>\r\n <div\r\n class=\"vx-fs-9 vx-fw-500 vx-label-txt vx-tt-uppercase vx-lh-3\"\r\n >\r\n {{ approvalWorkflow?.type }}\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-1 vx-pr-2 vx-ml-2\"\r\n >\r\n <i (click)=\"deselectUser(approvalWorkflow?.approvers[0],i)\"\r\n class=\"icons cross vx-fs-12 vx-paragraph-txt vx-mr-1 vx-ml-1\"\r\n >&#xe9ae;</i\r\n >\r\n <div *ngIf=\"\r\n approvalWorkflow?.type?.toLowerCase() === 'sequential' &&\r\n approvalWorkflow?.approvers?.length < 2\r\n \"\r\n class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\"\r\n >\r\n {{\r\n 1 == approvalWorkflow?.approvers?.length\r\n ? \"Final\"\r\n : 1\r\n }}\r\n </div>\r\n <div\r\n *ngIf=\"approvalWorkflow?.approvers?.length > 1 && approvalWorkflow?.type?.toLowerCase() === 'sequential'\"\r\n class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\"\r\n >\r\n 1\r\n </div>\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"approvalWorkflow?.approvers[0]?.member_name\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{ approvalWorkflow?.approvers[0]?.member_name }}</span\r\n >\r\n <button\r\n *ngIf=\"approvalWorkflow?.approvers?.length > 1\"\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"workflowPopover.popover()\"\r\n placement=\"right\"\r\n >\r\n + {{ approvalWorkflow?.approvers?.length - 1 }}\r\n </button>\r\n </div>\r\n <app-popover #workflowPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"\r\n let approver of approvalWorkflow?.approvers\r\n | slice : 1;\r\n let j = index\r\n \"\r\n >\r\n <div class=\"avatar-card\">\r\n <span\r\n class=\"value\"\r\n [appTooltip]=\"approver?.member_name\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >\r\n <i (click)=\"deselectUser(approver,i)\" class=\"icons\">&#xe90d;</i>\r\n <span *ngIf=\"approvalWorkflow?.type?.toLowerCase() === 'sequential'\"\r\n class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\"\r\n >{{\r\n j+1 ===\r\n approvalWorkflow?.approvers?.length - 1\r\n ? \"Final\"\r\n : j + 2\r\n }}</span\r\n >\r\n {{ approver?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <button\r\n (click)=\"editApproval(approvalWorkflow, i)\"\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\r\n >\r\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\r\n </button>\r\n <button\r\n (click)=\"deleteLevel(i)\"\r\n class=\"deleteBtn vx-fs-11 vx-fw-600 vx-tt-uppercase vx-p-0 vx-m-0 vx-ml-4 vx-d-flex vx-align-center\"\r\n >\r\n <i class=\"icons vx-mr-1\">&#xe9ae;</i> DELETE\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <button\r\n *ngIf=\"approvalWorkflows?.length > 0\"\r\n (click)=\"addLevelsClicked(true)\"\r\n class=\"addMoreBtn vx-fs-11 vx-fw-500 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-mt-1\"\r\n >\r\n + ADD MORE LEVELS\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <vui-floating-bar\r\n *ngIf=\"enableApprovalCreate || enableCreateForm\"\r\n [nextDisabled]=\"\r\n workflowName?.trim() === '' ||\r\n approvalWorkflows?.length === 0 ||\r\n filteredCategory?.length === 0\r\n \"\r\n (closeList)=\"closeCreateForm()\"\r\n (closeEvent)=\"nextClick()\"\r\n ></vui-floating-bar>\r\n </div>\r\n</div>\r\n\r\n<!-- [selectedItems]=\"policyForm.selectedCategories\" -->\r\n\r\n<app-select-approvers\r\n *ngIf=\"enableApprovalLevel\"\r\n [allApprovers]=\"allApprovers\"\r\n (closeSelectApprover)=\"closeSelectApprover()\"\r\n (selectedApprover)=\"selectedApprover($event)\"\r\n [levels]=\"levels\"\r\n [editApprovalData]=\"editApprovalData\"\r\n></app-select-approvers>\r\n\r\n<app-checkbox-list\r\n *ngIf=\"enablePolicyCategory\"\r\n [config]=\"categoryConfig\"\r\n [twoColumn]=\"false\"\r\n [itemsList]=\"selectedCategory\"\r\n [identifierKey]=\"'_id'\"\r\n [displayKey]=\"'item_name'\"\r\n [tooltipKey]=\"'item_name'\"\r\n (saveList)=\"saveCategoryList($event)\"\r\n (closeList)=\"closeCategoryList()\"\r\n [selectedItems]=\"filteredCategory\"\r\n>\r\n</app-checkbox-list>\r\n",
208
224
  styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";@import\"https://cdn.v-comply.com/design-system/css/alignment/alignment.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";::ng-deep .approval-workflow-dialog{position:fixed;top:0;right:500px;bottom:0;left:0}::ng-deep .approval-workflow-dialog:before{background:#1e5dd3;content:\"\";position:absolute;top:0;left:0;right:0;width:100%;height:3px}::ng-deep .approval-workflow-dialog-head{background:#fbfbfb;height:2.75rem;border-bottom:1px solid #f1f1f1}::ng-deep .approval-workflow-dialog-head button.back-btn{background:transparent;border-radius:0;border:none}::ng-deep .approval-workflow-dialog-body{background:#fff;height:calc(100vh - 2.75rem);padding:2rem}::ng-deep .approval-workflow-dialog-body-inner{height:calc(100vh - 10.75rem);overflow:hidden;overflow-y:auto;margin-bottom:1rem;padding-right:.5rem;width:calc(100% + .5rem)}::ng-deep .approval-workflow-dialog-body-inner::-webkit-scrollbar-track{background-color:#fff;position:absolute}::ng-deep .approval-workflow-dialog-body-inner::-webkit-scrollbar{width:3px;height:3px;background-color:transparent;position:absolute}::ng-deep .approval-workflow-dialog-body-inner::-webkit-scrollbar-thumb{border-radius:3px;background-color:#dbdbdb;position:absolute}::ng-deep .approval-workflow-dialog-body-inner .approval-workflow-form{width:30.75rem;max-height:calc(100vh - 10.75rem)}::ng-deep .approval-workflow-dialog-body-inner .approval-workflow-form-row{position:relative}::ng-deep .approval-workflow-dialog-body-inner .approval-workflow-form-row .form-left{position:absolute;top:30px;left:0}::ng-deep .approval-workflow-dialog-body-inner .approval-workflow-form-row .form-left img{width:2.5rem;height:2.5rem}::ng-deep .approval-workflow-dialog-body-inner .approval-workflow-form-row .form-right{padding-left:3.75rem}::ng-deep .approval-workflow-dialog-body-inner .approval-workflow-form-row .form-right .label-heading .required{color:#eb2424;position:relative;top:-.125rem}::ng-deep .approval-workflow-dialog-body-inner .approval-workflow-form-row .form-right button.addMoreBtn{background:transparent;border-radius:0;border:none}::ng-deep .approval-workflow-dialog-body vui-floating-bar .reviewer-floating-bar{padding:0!important}\n"]
209
225
  },] }
210
226
  ];
@@ -223,4 +239,4 @@ ApprovalCreateFormComponent.propDecorators = {
223
239
  saveApprovalWorkflow: [{ type: Output }],
224
240
  closeCreateClicked: [{ type: Output }]
225
241
  };
226
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwcm92YWwtY3JlYXRlLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdngtd29ya2Zsb3ctZW5naW5lL3NyYy9saWIvc2hhcmVkQ29tcG9uZW50cy9hcHByb3ZhbC13b3JrZmxvdy9hcHByb3ZhbC1jcmVhdGUtZm9ybS9hcHByb3ZhbC1jcmVhdGUtZm9ybS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQU8xRSxNQUFNLE9BQU8sMkJBQTJCO0lBb0N0QyxZQUNVLFdBQXdCLEVBQ3hCLGFBQTRCO1FBRDVCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBckN0Qyx5QkFBb0IsR0FBWSxLQUFLLENBQUM7UUFDdEMsd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBQ3JDLHlCQUFvQixHQUFZLEtBQUssQ0FBQztRQUN0QyxpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQUMxQiwwQkFBcUIsR0FBVSxFQUFFLENBQUM7UUFDbEMsMEJBQXFCLEdBQVUsRUFBRSxDQUFDO1FBQ2xDLHNCQUFpQixHQUFVLEVBQUUsQ0FBQztRQUM5QixxQkFBZ0IsR0FBVSxFQUFFLENBQUM7UUFDN0IsV0FBTSxHQUFXLENBQUMsQ0FBQztRQUNuQixtQkFBYyxHQUFHO1lBQ2YsVUFBVSxFQUFFLGlCQUFpQjtZQUM3QixvQkFBb0IsRUFBRSxtQkFBbUI7WUFDekMsa0JBQWtCLEVBQUUscUJBQXFCO1lBQ3pDLGlCQUFpQixFQUFFLGlCQUFpQjtZQUNwQyxhQUFhLEVBQUUs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RUFBRSxLQUFVOztRQUNwQyxNQUFNLFdBQVcsR0FBRyxNQUFBLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsMENBQUUsU0FBUyxDQUFDLFNBQVMsQ0FDcEUsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLENBQUEsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLFNBQVMsT0FBSyxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsU0FBUyxDQUFBLENBQ3JELENBQUM7UUFDRixNQUFBLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsMENBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQzs7O1lBdlBGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsMEJBQTBCO2dCQUNwQyw0OGVBQW9EOzthQUVyRDs7O1lBUFEsV0FBVztZQUNYLGFBQWE7OzttQkFnQ25CLEtBQUs7OEJBQ0wsS0FBSzttQ0FDTCxLQUFLOytCQUNMLEtBQUs7MkJBQ0wsS0FBSzsrQkFDTCxLQUFLO2dDQUNMLEtBQUs7bUNBRUwsTUFBTTtpQ0FDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBFZGl0b3JDb25maWcgfSBmcm9tICd2Y29tcGx5LWVkaXRvcic7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vd29ya2Zsb3ctc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUG9saWN5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3dvcmtmbG93LXNlcnZpY2VzL3BvbGljeS5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWFwcHJvdmFsLWNyZWF0ZS1mb3JtJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYXBwcm92YWwtY3JlYXRlLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2FwcHJvdmFsLWNyZWF0ZS1mb3JtLmNvbXBvbmVudC5sZXNzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBcHByb3ZhbENyZWF0ZUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIGVuYWJsZUFwcHJvdmFsQ3JlYXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZW5hYmxlQXBwcm92YWxMZXZlbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGVuYWJsZVBvbGljeUNhdGVnb3J5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgd29ya2Zsb3dOYW1lOiBzdHJpbmcgPSAnJztcclxuICBzZWxlY3RBcHByb3ZhbFBheWxvYWQ6IGFueVtdID0gW107XHJcbiAgY3JlYXRlQXBwcm92YWxQYXlsb2FkOiBhbnlbXSA9IFtdO1xyXG4gIGFwcHJvdmFsV29ya2Zsb3dzOiBhbnlbXSA9IFtdO1xyXG4gIGZpbHRlcmVkQ2F0ZWdvcnk6IGFueVtdID0gW107XHJcbiAgbGV2ZWxzOiBudW1iZXIgPSAxO1xyXG4gIGNhdGVnb3J5Q29uZmlnID0ge1xyXG4gICAgcGFuZWxUaXRsZTogJ1NlbGVjdCBDYXRlZ29yeScsXHJcbiAgICBmbG9hdGluZ1RleHRTaW5ndWxhcjogJ0NhdGVnb3J5IHNlbGVjdGVkJyxcclxuICAgIGZsb2F0aW5nVGV4dFBsdXJhbDogJ0NhdGVnb3JpZXMgc2VsZWN0ZWQnLFxyXG4gICAgc2VhcmNoUGxhY2Vob2xkZXI6ICdTZWFyY2ggQ2F0ZWdvcnknLFxyXG4gICAgc2VhcmNoRW5hYmxlZDogdHJ1ZSxcclxuICAgIHNlbGVjdEFsbEVuYWJsZWQ6IHRydWUsXHJcbiAgICB3b3JrZmxvdzogJ3BvbGljeScsXHJcbiAgfTtcclxuICBzZWxlY3RlZENhdDogYW55W10gPSBbXTtcclxuICBlZGl0QXBwcm92YWxEYXRhOiBhbnlbXSA9IFtdO1xyXG4gIGVkaXRJbmRleDogbnVtYmVyID0gLTE7XHJcbiAgY3JlYXRlRGVzY3JpcHRpb246IHN0cmluZyA9ICcnO1xyXG4gIHNlbGVjdGVkQ2F0ZWdvcnlJZDogYW55W10gPSBbXTtcclxuXHJcbiAgQElucHV0KCkgbW9kZTogJ0NSRUFURScgfCAnRURJVCcgPSAnQ1JFQVRFJztcclxuICBASW5wdXQoKSBhcHByb3ZlckRldGFpbHM6IGFueTtcclxuICBASW5wdXQoKSBhcHByb3ZlcldvcmtGbG93TGlzdCE6IGFueTtcclxuICBASW5wdXQoKSBlbmFibGVDcmVhdGVGb3JtITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBhbGxBcHByb3ZlcnMhOiBhbnk7XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRDYXRlZ29yeSE6IGFueTtcclxuICBASW5wdXQoKSBlZGl0V29ya2Zsb3dMZXZlbDogYW55O1xyXG5cclxuICBAT3V0cHV0KCkgc2F2ZUFwcHJvdmFsV29ya2Zsb3cgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNsb3NlQ3JlYXRlQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUgcG9saWN5U2VydmljZTogUG9saWN5U2VydmljZVxyXG4gICkge31cclxuXHJcbiAgZGVzY3JpcHRpb246IEVkaXRvckNvbmZpZyA9IHtcclxuICAgIG1vZGU6ICdwcmltZScsXHJcbiAgICBjb2xvclBhbGV0dGU6IHRydWUsXHJcbiAgICBsaW5rOiB0cnVlLFxyXG4gICAgcGxhY2Vob2xkZXI6ICdBZGQgYSBkZXNjcmlwdGlvbiBmb3IgdGhpcyBwb2xpY3knLFxyXG4gIH07XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMubW9kZSA9PSAnRURJVCcpIHtcclxuICAgICAgdGhpcy5wb3B1bGF0ZUFwcHJvdmVyKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5lZGl0V29ya2Zsb3dMZXZlbD8uZWRpdExldmVsKSB7XHJcbiAgICAgIHRoaXMuZWRpdEFwcHJvdmFsKFxyXG4gICAgICAgIHRoaXMuZWRpdFdvcmtmbG93TGV2ZWw/LmVkaXRMZXZlbCxcclxuICAgICAgICB0aGlzLmVkaXRXb3JrZmxvd0xldmVsPy5pbmRleFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY3JlYXRlQXBwcm92YWxBY3Rpb24oZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKGV2ZW50LnRvTG93ZXJDYXNlKCkgPT09ICdhcHByb3ZhbCcpIHtcclxuICAgICAgdGhpcy5lbmFibGVBcHByb3ZhbENyZWF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRMZXZlbHNDbGlja2VkKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuZW5hYmxlQXBwcm92YWxMZXZlbCA9IGV2ZW50O1xyXG4gICAgaWYgKGV2ZW50KSB0aGlzLmxldmVscysrO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2F0ZWdvcnlJZChjYXRlZ29yeTogYW55KSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkQ2F0ZWdvcnlJZCA9IGNhdGVnb3J5Lm1hcCgoY2F0OiBhbnkpID0+IGNhdC5pdGVtX2lkKTtcclxuICB9XHJcblxyXG4gIHNhdmVDYXRlZ29yeUxpc3QoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZENhdCA9IGV2ZW50O1xyXG4gICAgdGhpcy5maWx0ZXJTZWxlY3RlZENhdGVnb3J5KGV2ZW50KTtcclxuICAgIHRoaXMuZW5hYmxlUG9saWN5Q2F0ZWdvcnkgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGZpbHRlclNlbGVjdGVkQ2F0ZWdvcnkoc2VsZWN0ZWRDYXRlZ29yeTogYW55KSB7XHJcbiAgICB0aGlzLmZpbHRlcmVkQ2F0ZWdvcnkgPSB0aGlzLnNlbGVjdGVkQ2F0ZWdvcnkuZmlsdGVyKChjYXRlZ29yeTogYW55KSA9PlxyXG4gICAgICBzZWxlY3RlZENhdGVnb3J5LmluY2x1ZGVzKGNhdGVnb3J5Ll9pZClcclxuICAgICk7XHJcbiAgICB0aGlzLmdldENhdGVnb3J5SWQodGhpcy5maWx0ZXJlZENhdGVnb3J5KTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUNhdGVnb3J5KGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IGNhdGVnb3J5SW5kZXggPSB0aGlzLmZpbHRlcmVkQ2F0ZWdvcnkuZmluZEluZGV4KFxyXG4gICAgICAoY2F0ZWdvcnk6IGFueSkgPT4gY2F0ZWdvcnk/Lml0ZW1faWQgPT09IGV2ZW50Py5pdGVtX2lkXHJcbiAgICApO1xyXG4gICAgdGhpcy5maWx0ZXJlZENhdGVnb3J5Py5zcGxpY2UoY2F0ZWdvcnlJbmRleCwgMSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZUNhdGVnb3J5TGlzdCgpIHtcclxuICAgIHRoaXMuZW5hYmxlUG9saWN5Q2F0ZWdvcnkgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGVuYWJsZUNhdGVnb3J5KGV2ZW50OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmVuYWJsZVBvbGljeUNhdGVnb3J5ID0gZXZlbnQ7XHJcbiAgfVxyXG5cclxuICBjbG9zZVNlbGVjdEFwcHJvdmVyKCkge1xyXG4gICAgdGhpcy5lbmFibGVBcHByb3ZhbExldmVsID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RlZEFwcHJvdmVyKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0QXBwcm92YWxQYXlsb2FkID0gZXZlbnQ7XHJcbiAgICBpZiAodGhpcy5lZGl0SW5kZXggIT09IC0xKSB7XHJcbiAgICAgIHRoaXMuYXBwcm92YWxXb3JrZmxvd3M/LnNwbGljZSh0aGlzLmVkaXRJbmRleCwgMSk7XHJcbiAgICAgIHRoaXMuYXBwcm92YWxXb3JrZmxvd3M/LnNwbGljZSh0aGlzLmVkaXRJbmRleCwgMCwgZXZlbnRbMF0pO1xyXG4gICAgICB0aGlzLmVkaXRJbmRleCA9IC0xO1xyXG4gICAgICB0aGlzLmVkaXRBcHByb3ZhbERhdGEgPSBbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYXBwcm92YWxXb3JrZmxvd3MucHVzaChldmVudFswXSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5lbmFibGVBcHByb3ZhbExldmVsID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBkZWxldGVMZXZlbChpbmRleDogYW55KSB7XHJcbiAgICAvLyBBcHByb3ZlciBMZXZlbCBkZWxldGVcclxuICAgIHRoaXMuYXBwcm92YWxXb3JrZmxvd3Muc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIGZvciAobGV0IGkgPSBpbmRleDsgaSA8IHRoaXMuYXBwcm92YWxXb3JrZmxvd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuYXBwcm92YWxXb3JrZmxvd3NbaW5kZXhdWydsZXZlbDEnXSA9PT1cclxuICAgICAgICB0aGlzLmFwcHJvdmFsV29ya2Zsb3dzW2luZGV4XVsnYWxpYXNfbmFtZSddXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuYXBwcm92YWxXb3JrZmxvd3NbaW5kZXhdWydhbGlhc19uYW1lJ10gPSBgTGV2ZWwgJHtpICsgMX1gO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYXBwcm92YWxXb3JrZmxvd3NbaW5kZXhdWydsZXZlbDEnXSA9IGBMZXZlbCAke2kgKyAxfWA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGVja0xldmVsKCkge1xyXG4gICAgaWYgKHRoaXMubGV2ZWxzID09PSAwKSB7XHJcbiAgICAgIHRoaXMubGV2ZWxzID0gMTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVkaXRBcHByb3ZhbChhcHByb3ZhbDogYW55LCBpbmRleDogYW55KSB7XHJcbiAgICB0aGlzLmVkaXRBcHByb3ZhbERhdGEgPSBbYXBwcm92YWxdO1xyXG4gICAgdGhpcy5lZGl0SW5kZXggPSBpbmRleDtcclxuICAgIHRoaXMuZW5hYmxlQXBwcm92YWxMZXZlbCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBjbG9zZUNyZWF0ZUZvcm0oKSB7XHJcbiAgICB0aGlzLmNsb3NlQ3JlYXRlQ2xpY2tlZC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBuZXh0Q2xpY2soKSB7XHJcbiAgICB0aGlzLnJlbW92ZU1lbWJlck5hbWVLZXkoKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZU1lbWJlck5hbWVLZXkoKSB7XHJcbiAgICB0aGlzLmFwcHJvdmFsV29ya2Zsb3dzID0gdGhpcy5hcHByb3ZhbFdvcmtmbG93cy5tYXAoXHJcbiAgICAgICh7XHJcbiAgICAgICAgYXBwcm92ZXJzLFxyXG4gICAgICAgIC4uLnJlc3RcclxuICAgICAgfToge1xyXG4gICAgICAgIGFwcHJvdmVyczogQXJyYXk8eyBba2V5OiBzdHJpbmddOiBhbnkgfT47XHJcbiAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xyXG4gICAgICB9KSA9PiAoe1xyXG4gICAgICAgIC4uLnJlc3QsXHJcbiAgICAgICAgYXBwcm92ZXJzOiBhcHByb3ZlcnMubWFwKFxyXG4gICAgICAgICAgKHsgbWVtYmVyX25hbWUsIC4uLnJlc3QgfTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkgPT4gKHsgLi4ucmVzdCB9KVxyXG4gICAgICAgICksXHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgdGhpcy5nZW5lcmF0ZVBheWxvYWQoKTtcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlUGF5bG9hZCgpIHtcclxuICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgIHdvcmtmbG93X21vZHVsZTogJ1BPTElDWScsXHJcbiAgICAgIHdvcmtmbG93X25hbWU6IHRoaXMud29ya2Zsb3dOYW1lLFxyXG4gICAgICBjYXRlZ29yeV9pZDogdGhpcy5zZWxlY3RlZENhdGVnb3J5SWQsXHJcbiAgICAgIGFwcHJvdmFsX3dvcmtmbG93OiB0aGlzLmFwcHJvdmFsV29ya2Zsb3dzLFxyXG4gICAgICBjcmVhdGVkX2J5OiB0aGlzLmF1dGhTZXJ2aWNlLmdldE1lbWJlcklkKCksXHJcbiAgICAgIG9yZ2FuaXNhdGlvbl9pZDogdGhpcy5hdXRoU2VydmljZS5nZXRPcmdhbml6YXRpb25JZCgpLFxyXG4gICAgICBkZWxldGVfZmxhZzogMCxcclxuICAgICAgSXNfYXBwcm92YWw6IDEsXHJcbiAgICB9O1xyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ0VESVQnKSB7XHJcbiAgICAgIHRoaXMuX2VkaXRXb3JrZmxvdyhwYXlsb2FkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3JlYXRlTmV3V29ya2Zsb3cocGF5bG9hZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjcmVhdGVOZXdXb3JrZmxvdyhwYXlsb2FkOiBhbnkpIHtcclxuICAgIHRoaXMucG9saWN5U2VydmljZS5jcmVhdGVBcHByb3ZhbFdvcmtmbG93KHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2F2ZUFwcHJvdmFsV29ya2Zsb3cuZW1pdCh0cnVlKTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIF9lZGl0V29ya2Zsb3cocGF5bG9hZDogYW55KSB7XHJcbiAgICB0aGlzLnBvbGljeVNlcnZpY2VcclxuICAgICAgLmVkaXRBcHByb3ZhbFdvcmtmbG93KHBheWxvYWQsIHRoaXMuYXBwcm92ZXJEZXRhaWxzLl9pZClcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNhdmVBcHByb3ZhbFdvcmtmbG93LmVtaXQodHJ1ZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICBwb3B1bGF0ZUFwcHJvdmVyKCkge1xyXG4gICAgY29uc3QgeyB3b3JrZmxvd19uYW1lLCBhcHByb3ZhbF93b3JrZmxvdywgZGVzY3JpcHRpb24sIGNhdGVnb3J5X2FyciB9ID1cclxuICAgICAgdGhpcy5hcHByb3ZlckRldGFpbHM7XHJcbiAgICB0aGlzLndvcmtmbG93TmFtZSA9IHdvcmtmbG93X25hbWU7XHJcbiAgICB0aGlzLmFwcHJvdmFsV29ya2Zsb3dzID0gYXBwcm92YWxfd29ya2Zsb3c7XHJcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XHJcbiAgICBjb25zdCBjYXRlZ29yeURldGFpbHMgPSBjYXRlZ29yeV9hcnIubWFwKChjYXRlZ29yeTogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaXRlbV9pZDogY2F0ZWdvcnk/LmNhbF9jYXRlZ29yeV9pZCxcclxuICAgICAgICBpdGVtX25hbWU6IGNhdGVnb3J5Py5jYXRlZ29yeV9uYW1lLFxyXG4gICAgICAgIF9pZDogY2F0ZWdvcnk/Ll9pZCxcclxuICAgICAgICBwYXJlbnRfaXRlbXM6IFtdLFxyXG4gICAgICAgIHBhcmVudF9pdGVtX2lkczogW10sXHJcbiAgICAgICAgY3VzdG9tX3RhZ3M6IFtdLFxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmZpbHRlcmVkQ2F0ZWdvcnkgPSBjYXRlZ29yeURldGFpbHM7XHJcbiAgfVxyXG5cclxuICBjbG9zZUZvcm0oKSB7XHJcbiAgICB0aGlzLnNhdmVBcHByb3ZhbFdvcmtmbG93LmVtaXQoKTtcclxuICB9XHJcblxyXG4gIGRlc2VsZWN0VXNlcihhcHByb3ZlcjogYW55LCBpbmRleDogYW55KSB7XHJcbiAgICBjb25zdCByZW1vdmVJbmRleCA9IHRoaXMuYXBwcm92YWxXb3JrZmxvd3NbaW5kZXhdPy5hcHByb3ZlcnMuZmluZEluZGV4KFxyXG4gICAgICAoZWxlOiBhbnkpID0+IGVsZT8ubWVtYmVyX2lkID09PSBhcHByb3Zlcj8ubWVtYmVyX2lkXHJcbiAgICApO1xyXG4gICAgdGhpcy5hcHByb3ZhbFdvcmtmbG93c1tpbmRleF0/LmFwcHJvdmVycy5zcGxpY2UocmVtb3ZlSW5kZXgsIDEpO1xyXG4gIH1cclxufVxyXG4iXX0=
242
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwcm92YWwtY3JlYXRlLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdngtd29ya2Zsb3ctZW5naW5lL3NyYy9saWIvc2hhcmVkQ29tcG9uZW50cy9hcHByb3ZhbC13b3JrZmxvdy9hcHByb3ZhbC1jcmVhdGUtZm9ybS9hcHByb3ZhbC1jcmVhdGUtZm9ybS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQU8xRSxNQUFNLE9BQU8sMkJBQTJCO0lBcUN0QyxZQUNVLFdBQXdCLEVBQ3hCLGFBQTRCO1FBRDVCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBdEN0Qyx5QkFBb0IsR0FBWSxLQUFLLENBQUM7UUFDdEMsd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBQ3JDLHlCQUFvQixHQUFZLEtBQUssQ0FBQztRQUN0QyxpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQUMxQiwwQkFBcUIsR0FBVSxFQUFFLENBQUM7UUFDbEMsMEJBQXFCLEdBQVUsRUFBRSxDQUFDO1FBQ2xDLHNCQUFpQixHQUFVLEVBQUUsQ0FBQztRQUM5QixxQkFBZ0IsR0FBVSxFQUFFLENBQUM7UUFDN0IsV0FBTSxHQUFXLENBQUMsQ0FBQztRQUNuQixtQkFBYyxHQUFHO1lBQ2YsVUFBVSxFQUFFLGlCQUFpQjtZQUM3QixvQkFBb0IsRUFBRSxtQkFBbUI7WUFDekMsa0JBQWtCLEVBQUUscUJBQXFCO1lBQ3pDLGlCQUFpQixFQUFFLGlCQUFpQjtZQUNwQyxhQUFhLEVBQUUs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QUFDLFFBQWEsRUFBRSxFQUFFLFdBQUMsT0FBQSxNQUFBLFFBQVEsQ0FBQyxTQUFTLDBDQUFFLE1BQU0sQ0FBQSxFQUFBLENBQzlDLENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUEsTUFBQSxJQUFJLENBQUMsaUJBQWlCLDBDQUFFLE1BQU0sSUFBRyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELHFCQUFxQixDQUFDLElBQVMsRUFBRSxLQUFjO1FBQzdDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN4QyxDQUFDOzs7WUEzUUYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSwwQkFBMEI7Z0JBQ3BDLHE5Z0JBQW9EOzthQUVyRDs7O1lBUFEsV0FBVztZQUNYLGFBQWE7OzttQkFpQ25CLEtBQUs7OEJBQ0wsS0FBSzttQ0FDTCxLQUFLOytCQUNMLEtBQUs7MkJBQ0wsS0FBSzsrQkFDTCxLQUFLO2dDQUNMLEtBQUs7bUNBRUwsTUFBTTtpQ0FDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBFZGl0b3JDb25maWcgfSBmcm9tICd2Y29tcGx5LWVkaXRvcic7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vd29ya2Zsb3ctc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUG9saWN5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3dvcmtmbG93LXNlcnZpY2VzL3BvbGljeS5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWFwcHJvdmFsLWNyZWF0ZS1mb3JtJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYXBwcm92YWwtY3JlYXRlLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2FwcHJvdmFsLWNyZWF0ZS1mb3JtLmNvbXBvbmVudC5sZXNzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBcHByb3ZhbENyZWF0ZUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIGVuYWJsZUFwcHJvdmFsQ3JlYXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZW5hYmxlQXBwcm92YWxMZXZlbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGVuYWJsZVBvbGljeUNhdGVnb3J5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgd29ya2Zsb3dOYW1lOiBzdHJpbmcgPSAnJztcclxuICBzZWxlY3RBcHByb3ZhbFBheWxvYWQ6IGFueVtdID0gW107XHJcbiAgY3JlYXRlQXBwcm92YWxQYXlsb2FkOiBhbnlbXSA9IFtdO1xyXG4gIGFwcHJvdmFsV29ya2Zsb3dzOiBhbnlbXSA9IFtdO1xyXG4gIGZpbHRlcmVkQ2F0ZWdvcnk6IGFueVtdID0gW107XHJcbiAgbGV2ZWxzOiBudW1iZXIgPSAxO1xyXG4gIGNhdGVnb3J5Q29uZmlnID0ge1xyXG4gICAgcGFuZWxUaXRsZTogJ1NlbGVjdCBDYXRlZ29yeScsXHJcbiAgICBmbG9hdGluZ1RleHRTaW5ndWxhcjogJ0NhdGVnb3J5IHNlbGVjdGVkJyxcclxuICAgIGZsb2F0aW5nVGV4dFBsdXJhbDogJ0NhdGVnb3JpZXMgc2VsZWN0ZWQnLFxyXG4gICAgc2VhcmNoUGxhY2Vob2xkZXI6ICdTZWFyY2ggQ2F0ZWdvcnknLFxyXG4gICAgc2VhcmNoRW5hYmxlZDogdHJ1ZSxcclxuICAgIHNlbGVjdEFsbEVuYWJsZWQ6IHRydWUsXHJcbiAgICB3b3JrZmxvdzogJ3BvbGljeScsXHJcbiAgfTtcclxuICBzZWxlY3RlZENhdDogYW55W10gPSBbXTtcclxuICBlZGl0QXBwcm92YWxEYXRhOiBhbnlbXSA9IFtdO1xyXG4gIGVkaXRJbmRleDogbnVtYmVyID0gLTE7XHJcbiAgY3JlYXRlRGVzY3JpcHRpb246IHN0cmluZyA9ICcnO1xyXG4gIHNlbGVjdGVkQ2F0ZWdvcnlJZDogYW55W10gPSBbXTtcclxuICBhcHByb3ZhbE5hbWUhOiBhbnk7XHJcblxyXG4gIEBJbnB1dCgpIG1vZGU6ICdDUkVBVEUnIHwgJ0VESVQnID0gJ0NSRUFURSc7XHJcbiAgQElucHV0KCkgYXBwcm92ZXJEZXRhaWxzOiBhbnk7XHJcbiAgQElucHV0KCkgYXBwcm92ZXJXb3JrRmxvd0xpc3QhOiBhbnk7XHJcbiAgQElucHV0KCkgZW5hYmxlQ3JlYXRlRm9ybSE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgYWxsQXBwcm92ZXJzITogYW55O1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkQ2F0ZWdvcnkhOiBhbnk7XHJcbiAgQElucHV0KCkgZWRpdFdvcmtmbG93TGV2ZWw6IGFueTtcclxuXHJcbiAgQE91dHB1dCgpIHNhdmVBcHByb3ZhbFdvcmtmbG93ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBjbG9zZUNyZWF0ZUNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHBvbGljeVNlcnZpY2U6IFBvbGljeVNlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIGRlc2NyaXB0aW9uOiBFZGl0b3JDb25maWcgPSB7XHJcbiAgICBtb2RlOiAncHJpbWUnLFxyXG4gICAgY29sb3JQYWxldHRlOiB0cnVlLFxyXG4gICAgbGluazogdHJ1ZSxcclxuICAgIHBsYWNlaG9sZGVyOiAnQWRkIGEgZGVzY3JpcHRpb24gZm9yIHRoaXMgcG9saWN5JyxcclxuICB9O1xyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLm1vZGUgPT0gJ0VESVQnKSB7XHJcbiAgICAgIHRoaXMucG9wdWxhdGVBcHByb3ZlcigpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZWRpdFdvcmtmbG93TGV2ZWw/LmVkaXRMZXZlbCkge1xyXG4gICAgICB0aGlzLmVkaXRBcHByb3ZhbChcclxuICAgICAgICB0aGlzLmVkaXRXb3JrZmxvd0xldmVsPy5lZGl0TGV2ZWwsXHJcbiAgICAgICAgdGhpcy5lZGl0V29ya2Zsb3dMZXZlbD8uaW5kZXhcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNyZWF0ZUFwcHJvdmFsQWN0aW9uKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChldmVudC50b0xvd2VyQ2FzZSgpID09PSAnYXBwcm92YWwnKSB7XHJcbiAgICAgIHRoaXMuZW5hYmxlQXBwcm92YWxDcmVhdGUgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkTGV2ZWxzQ2xpY2tlZChldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmVuYWJsZUFwcHJvdmFsTGV2ZWwgPSBldmVudDtcclxuICAgIGlmIChldmVudCkgdGhpcy5sZXZlbHMrKztcclxuICB9XHJcblxyXG4gIGdldENhdGVnb3J5SWQoY2F0ZWdvcnk6IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZENhdGVnb3J5SWQgPSBjYXRlZ29yeS5tYXAoKGNhdDogYW55KSA9PiBjYXQuaXRlbV9pZCk7XHJcbiAgfVxyXG5cclxuICBzYXZlQ2F0ZWdvcnlMaXN0KGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRDYXQgPSBldmVudDtcclxuICAgIHRoaXMuZmlsdGVyU2VsZWN0ZWRDYXRlZ29yeShldmVudCk7XHJcbiAgICB0aGlzLmVuYWJsZVBvbGljeUNhdGVnb3J5ID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJTZWxlY3RlZENhdGVnb3J5KHNlbGVjdGVkQ2F0ZWdvcnk6IGFueSkge1xyXG4gICAgdGhpcy5maWx0ZXJlZENhdGVnb3J5ID0gdGhpcy5zZWxlY3RlZENhdGVnb3J5LmZpbHRlcigoY2F0ZWdvcnk6IGFueSkgPT5cclxuICAgICAgc2VsZWN0ZWRDYXRlZ29yeS5pbmNsdWRlcyhjYXRlZ29yeS5faWQpXHJcbiAgICApO1xyXG4gICAgdGhpcy5nZXRDYXRlZ29yeUlkKHRoaXMuZmlsdGVyZWRDYXRlZ29yeSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVDYXRlZ29yeShldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBjYXRlZ29yeUluZGV4ID0gdGhpcy5maWx0ZXJlZENhdGVnb3J5LmZpbmRJbmRleChcclxuICAgICAgKGNhdGVnb3J5OiBhbnkpID0+IGNhdGVnb3J5Py5pdGVtX2lkID09PSBldmVudD8uaXRlbV9pZFxyXG4gICAgKTtcclxuICAgIHRoaXMuZmlsdGVyZWRDYXRlZ29yeT8uc3BsaWNlKGNhdGVnb3J5SW5kZXgsIDEpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VDYXRlZ29yeUxpc3QoKSB7XHJcbiAgICB0aGlzLmVuYWJsZVBvbGljeUNhdGVnb3J5ID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBlbmFibGVDYXRlZ29yeShldmVudDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5lbmFibGVQb2xpY3lDYXRlZ29yeSA9IGV2ZW50O1xyXG4gIH1cclxuXHJcbiAgY2xvc2VTZWxlY3RBcHByb3ZlcigpIHtcclxuICAgIHRoaXMuZW5hYmxlQXBwcm92YWxMZXZlbCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRBcHByb3ZlcihldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnNlbGVjdEFwcHJvdmFsUGF5bG9hZCA9IGV2ZW50O1xyXG4gICAgaWYgKHRoaXMuZWRpdEluZGV4ICE9PSAtMSkge1xyXG4gICAgICB0aGlzLmFwcHJvdmFsV29ya2Zsb3dzPy5zcGxpY2UodGhpcy5lZGl0SW5kZXgsIDEpO1xyXG4gICAgICB0aGlzLmFwcHJvdmFsV29ya2Zsb3dzPy5zcGxpY2UodGhpcy5lZGl0SW5kZXgsIDAsIGV2ZW50WzBdKTtcclxuICAgICAgdGhpcy5lZGl0SW5kZXggPSAtMTtcclxuICAgICAgdGhpcy5lZGl0QXBwcm92YWxEYXRhID0gW107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFwcHJvdmFsV29ya2Zsb3dzLnB1c2goZXZlbnRbMF0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZW5hYmxlQXBwcm92YWxMZXZlbCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlTGV2ZWwoaW5kZXg6IGFueSkge1xyXG4gICAgLy8gQXBwcm92ZXIgTGV2ZWwgZGVsZXRlXHJcbiAgICBjb25zb2xlLmxvZygndGhpcy5hcHByb3ZhbFdvcmtmbG93cyA9PT0+JywgdGhpcy5hcHByb3ZhbFdvcmtmbG93cyk7XHJcbiAgICB0aGlzLmFwcHJvdmFsV29ya2Zsb3dzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB0aGlzLmxldmVscyA9IHRoaXMuYXBwcm92YWxXb3JrZmxvd3M/Lmxlbmd0aCArIDE7XHJcbiAgICBmb3IgKGxldCBpID0gaW5kZXg7IGkgPCB0aGlzLmFwcHJvdmFsV29ya2Zsb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmFwcHJvdmFsV29ya2Zsb3dzW2luZGV4XVsnbGV2ZWwxJ10gPT09XHJcbiAgICAgICAgdGhpcy5hcHByb3ZhbFdvcmtmbG93c1tpbmRleF1bJ2FsaWFzX25hbWUnXVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmFwcHJvdmFsV29ya2Zsb3dzW2luZGV4XVsnYWxpYXNfbmFtZSddID0gYExldmVsICR7aSArIDF9YDtcclxuICAgICAgfVxyXG4gICAgICBjb25zb2xlLmxvZygnIGBMZXZlbCAke2kgKyAxfWAgPT0+JywgYExldmVsICR7aSArIDF9YCk7XHJcbiAgICAgIHRoaXMuYXBwcm92YWxXb3JrZmxvd3NbaW5kZXhdWydsZXZlbDEnXSA9IGBMZXZlbCAke2kgKyAxfWA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGVja0xldmVsKCkge1xyXG4gICAgaWYgKHRoaXMubGV2ZWxzID09PSAwKSB7XHJcbiAgICAgIHRoaXMubGV2ZWxzID0gMTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVkaXRBcHByb3ZhbChhcHByb3ZhbDogYW55LCBpbmRleDogYW55KSB7XHJcbiAgICB0aGlzLmVkaXRBcHByb3ZhbERhdGEgPSBbYXBwcm92YWxdO1xyXG4gICAgdGhpcy5lZGl0SW5kZXggPSBpbmRleDtcclxuICAgIHRoaXMuZW5hYmxlQXBwcm92YWxMZXZlbCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBjbG9zZUNyZWF0ZUZvcm0oKSB7XHJcbiAgICB0aGlzLmNsb3NlQ3JlYXRlQ2xpY2tlZC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBuZXh0Q2xpY2soKSB7XHJcbiAgICB0aGlzLnJlbW92ZU1lbWJlck5hbWVLZXkoKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZU1lbWJlck5hbWVLZXkoKSB7XHJcbiAgICB0aGlzLmFwcHJvdmFsV29ya2Zsb3dzID0gdGhpcy5hcHByb3ZhbFdvcmtmbG93cy5tYXAoXHJcbiAgICAgICh7XHJcbiAgICAgICAgYXBwcm92ZXJzLFxyXG4gICAgICAgIC4uLnJlc3RcclxuICAgICAgfToge1xyXG4gICAgICAgIGFwcHJvdmVyczogQXJyYXk8eyBba2V5OiBzdHJpbmddOiBhbnkgfT47XHJcbiAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xyXG4gICAgICB9KSA9PiAoe1xyXG4gICAgICAgIC4uLnJlc3QsXHJcbiAgICAgICAgYXBwcm92ZXJzOiBhcHByb3ZlcnMubWFwKFxyXG4gICAgICAgICAgKHsgbWVtYmVyX25hbWUsIC4uLnJlc3QgfTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkgPT4gKHsgLi4ucmVzdCB9KVxyXG4gICAgICAgICksXHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgdGhpcy5nZW5lcmF0ZVBheWxvYWQoKTtcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlUGF5bG9hZCgpIHtcclxuICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgIHdvcmtmbG93X21vZHVsZTogJ1BPTElDWScsXHJcbiAgICAgIHdvcmtmbG93X25hbWU6IHRoaXMud29ya2Zsb3dOYW1lLFxyXG4gICAgICBjYXRlZ29yeV9pZDogdGhpcy5zZWxlY3RlZENhdGVnb3J5SWQsXHJcbiAgICAgIGFwcHJvdmFsX3dvcmtmbG93OiB0aGlzLmFwcHJvdmFsV29ya2Zsb3dzLFxyXG4gICAgICBjcmVhdGVkX2J5OiB0aGlzLmF1dGhTZXJ2aWNlLmdldE1lbWJlcklkKCksXHJcbiAgICAgIG9yZ2FuaXNhdGlvbl9pZDogdGhpcy5hdXRoU2VydmljZS5nZXRPcmdhbml6YXRpb25JZCgpLFxyXG4gICAgICBkZWxldGVfZmxhZzogMCxcclxuICAgICAgSXNfYXBwcm92YWw6IDEsXHJcbiAgICAgIGRlc2NyaXB0aW9uOiB7XHJcbiAgICAgICAgYXR0YWNobWVudHM6IFtdLFxyXG4gICAgICAgIHRleHQ6IHRoaXMuY3JlYXRlRGVzY3JpcHRpb24sXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ0VESVQnKSB7XHJcbiAgICAgIHRoaXMuX2VkaXRXb3JrZmxvdyhwYXlsb2FkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3JlYXRlTmV3V29ya2Zsb3cocGF5bG9hZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjcmVhdGVOZXdXb3JrZmxvdyhwYXlsb2FkOiBhbnkpIHtcclxuICAgIHRoaXMucG9saWN5U2VydmljZS5jcmVhdGVBcHByb3ZhbFdvcmtmbG93KHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2F2ZUFwcHJvdmFsV29ya2Zsb3cuZW1pdCh0cnVlKTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIF9lZGl0V29ya2Zsb3cocGF5bG9hZDogYW55KSB7XHJcbiAgICB0aGlzLnBvbGljeVNlcnZpY2VcclxuICAgICAgLmVkaXRBcHByb3ZhbFdvcmtmbG93KHBheWxvYWQsIHRoaXMuYXBwcm92ZXJEZXRhaWxzLl9pZClcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNhdmVBcHByb3ZhbFdvcmtmbG93LmVtaXQodHJ1ZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICBwb3B1bGF0ZUFwcHJvdmVyKCkge1xyXG4gICAgY29uc29sZS5sb2coJyB0aGlzLmFwcHJvdmVyRGV0YWlscyA9PT4nLCB0aGlzLmFwcHJvdmVyRGV0YWlscyk7XHJcbiAgICBjb25zdCB7IHdvcmtmbG93X25hbWUsIGFwcHJvdmFsX3dvcmtmbG93LCBkZXNjcmlwdGlvbiwgY2F0ZWdvcnlfYXJyIH0gPVxyXG4gICAgICB0aGlzLmFwcHJvdmVyRGV0YWlscztcclxuICAgIHRoaXMud29ya2Zsb3dOYW1lID0gd29ya2Zsb3dfbmFtZTtcclxuICAgIHRoaXMuYXBwcm92YWxXb3JrZmxvd3MgPSBhcHByb3ZhbF93b3JrZmxvdztcclxuICAgIHRoaXMuY3JlYXRlRGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbj8udGV4dCA/PyAnJztcclxuICAgIGNvbnN0IGNhdGVnb3J5RGV0YWlscyA9IGNhdGVnb3J5X2Fyci5tYXAoKGNhdGVnb3J5OiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBpdGVtX2lkOiBjYXRlZ29yeT8uY2FsX2NhdGVnb3J5X2lkLFxyXG4gICAgICAgIGl0ZW1fbmFtZTogY2F0ZWdvcnk/LmNhdGVnb3J5X25hbWUsXHJcbiAgICAgICAgX2lkOiBjYXRlZ29yeT8uX2lkLFxyXG4gICAgICAgIHBhcmVudF9pdGVtczogW10sXHJcbiAgICAgICAgcGFyZW50X2l0ZW1faWRzOiBbXSxcclxuICAgICAgICBjdXN0b21fdGFnczogW10sXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc2VsZWN0ZWRDYXRlZ29yeUlkID0gY2F0ZWdvcnlfYXJyLm1hcChcclxuICAgICAgKGNhdGVnb3J5OiBhbnkpID0+IGNhdGVnb3J5Py5jYWxfY2F0ZWdvcnlfaWRcclxuICAgICk7XHJcbiAgICB0aGlzLmZpbHRlcmVkQ2F0ZWdvcnkgPSBjYXRlZ29yeURldGFpbHM7XHJcbiAgfVxyXG5cclxuICBjbG9zZUZvcm0oKSB7XHJcbiAgICB0aGlzLnNhdmVBcHByb3ZhbFdvcmtmbG93LmVtaXQoKTtcclxuICB9XHJcblxyXG4gIGRlc2VsZWN0VXNlcihhcHByb3ZlcjogYW55LCBpbmRleDogYW55KSB7XHJcbiAgICBjb25zdCByZW1vdmVJbmRleCA9IHRoaXMuYXBwcm92YWxXb3JrZmxvd3NbaW5kZXhdPy5hcHByb3ZlcnMuZmluZEluZGV4KFxyXG4gICAgICAoZWxlOiBhbnkpID0+IGVsZT8ubWVtYmVyX2lkID09PSBhcHByb3Zlcj8ubWVtYmVyX2lkXHJcbiAgICApO1xyXG4gICAgdGhpcy5hcHByb3ZhbFdvcmtmbG93c1tpbmRleF0/LmFwcHJvdmVycy5zcGxpY2UocmVtb3ZlSW5kZXgsIDEpO1xyXG4gICAgdGhpcy5hcHByb3ZhbFdvcmtmbG93cyA9IHRoaXMuYXBwcm92YWxXb3JrZmxvd3MuZmlsdGVyKFxyXG4gICAgICAod29ya2Zsb3c6IGFueSkgPT4gd29ya2Zsb3cuYXBwcm92ZXJzPy5sZW5ndGhcclxuICAgICk7XHJcbiAgICB0aGlzLmxldmVscyA9IHRoaXMuYXBwcm92YWxXb3JrZmxvd3M/Lmxlbmd0aCArIDE7XHJcbiAgfVxyXG5cclxuICBhcHByb3ZhbE5hbWVTZWxlY3Rpb24odHlwZTogYW55LCBldmVudDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5hcHByb3ZhbE5hbWUgPSBldmVudCA/IHR5cGUgOiAnJztcclxuICB9XHJcbn1cclxuIl19