vcomply-workflow-engine 1.0.2 → 1.1.2

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 +38 -13
  2. package/bundles/vcomply-workflow-engine.umd.js.map +1 -1
  3. package/esm2015/lib/log-an-issue/log-an-issue.component.js +17 -6
  4. package/esm2015/lib/log-an-issue/log-an-issue.component.ngfactory.js +108 -100
  5. package/esm2015/lib/log-an-issue/log-an-issue.component.ngsummary.json +1 -1
  6. package/esm2015/lib/sharedComponents/assessment-editor/create-assessment-container/create-assessment-container.component.js +14 -4
  7. package/esm2015/lib/sharedComponents/assessment-editor/create-assessment-container/create-assessment-container.component.ngfactory.js +46 -38
  8. package/esm2015/lib/sharedComponents/assessment-editor/create-assessment-container/create-assessment-container.component.ngsummary.json +1 -1
  9. package/esm2015/lib/sharedComponents/bulk-responsibility-view/bulk-responsibility-view.component.js +2 -2
  10. package/esm2015/lib/sharedComponents/bulk-responsibility-view/bulk-responsibility-view.component.ngfactory.js +5 -4
  11. package/esm2015/lib/workflow-assessment/import-an-assessment/import-an-assessment.component.js +3 -3
  12. package/esm2015/lib/workflow-assessment/import-an-assessment/import-an-assessment.component.ngfactory.js +2 -2
  13. package/esm2015/lib/workflow-engine.module.ngfactory.js +1 -1
  14. package/esm2015/lib/workflow-services/log-issue.service.js +2 -3
  15. package/fesm2015/vcomply-workflow-engine.js +33 -13
  16. package/fesm2015/vcomply-workflow-engine.js.map +1 -1
  17. package/lib/log-an-issue/log-an-issue.component.d.ts +1 -0
  18. package/lib/sharedComponents/assessment-editor/create-assessment-container/create-assessment-container.component.d.ts +3 -1
  19. package/lib/workflow-assessment/import-an-assessment/import-an-assessment.component.d.ts +1 -1
  20. package/package.json +1 -1
  21. package/vcomply-workflow-engine.metadata.json +1 -1
@@ -70,7 +70,7 @@ export class LogAnIssueComponent {
70
70
  issueCategory: [],
71
71
  issueCustomTag: [],
72
72
  issueRC: [],
73
- issueType: [],
73
+ issueType: 'issue',
74
74
  isAssignToMyself: false,
75
75
  entrustTo: [],
76
76
  issueDueDate: '',
@@ -85,7 +85,7 @@ export class LogAnIssueComponent {
85
85
  issueCCUsers: [],
86
86
  failureCCUsers: [],
87
87
  linkedControlRisk: [],
88
- linkageType: 'RISK'
88
+ linkageType: 'RISK',
89
89
  };
90
90
  this.AttachmentTrack = [[], [], []];
91
91
  this.additionalOptionStatus = {
@@ -369,7 +369,7 @@ export class LogAnIssueComponent {
369
369
  this.pickerChanged.emit(false);
370
370
  }
371
371
  selectorAction(evt, type) {
372
- var _a, _b, _c, _e, _f, _g, _h;
372
+ var _a, _b, _c, _e, _f, _g, _h, _j;
373
373
  console.log(evt, type);
374
374
  switch (type) {
375
375
  case 'ISSUE_CATEGORY': {
@@ -404,6 +404,12 @@ export class LogAnIssueComponent {
404
404
  }
405
405
  case 'ISSUE_WHO': {
406
406
  this.logIssueForm.entrustTo = this.idToArray(evt, this.listData.userList, 'employee_id');
407
+ if (((_g = this.logIssueForm.entrustTo[0]) === null || _g === void 0 ? void 0 : _g.my_member_id) === this.currentUser.id) {
408
+ this.logIssueForm.isAssignToMyself = true;
409
+ }
410
+ else {
411
+ this.logIssueForm.isAssignToMyself = false;
412
+ }
407
413
  this.fieldDeselector(type);
408
414
  if ((evt === null || evt === void 0 ? void 0 : evt.length) > 0) {
409
415
  this.removeError('entrustTo');
@@ -427,7 +433,7 @@ export class LogAnIssueComponent {
427
433
  }
428
434
  case 'ISSUE_CONTROL_RISK':
429
435
  this.logIssueForm.linkedControlRisk = this.idToArray(evt, this.listData.linkageList, 'itemId');
430
- this.logIssueForm.linkageType = (_h = (_g = this.logIssueForm) === null || _g === void 0 ? void 0 : _g.linkedControlRisk[0]) === null || _h === void 0 ? void 0 : _h.itemType;
436
+ this.logIssueForm.linkageType = (_j = (_h = this.logIssueForm) === null || _h === void 0 ? void 0 : _h.linkedControlRisk[0]) === null || _j === void 0 ? void 0 : _j.itemType;
431
437
  this.fieldDeselector(type);
432
438
  break;
433
439
  }
@@ -454,6 +460,7 @@ export class LogAnIssueComponent {
454
460
  if (itemIndex !== -1) {
455
461
  this.logIssueForm.entrustTo.splice(itemIndex, 1);
456
462
  }
463
+ this.logIssueForm.isAssignToMyself = false;
457
464
  break;
458
465
  }
459
466
  case 'ISSUE_TYPE': {
@@ -488,9 +495,13 @@ export class LogAnIssueComponent {
488
495
  assignMyself(event) {
489
496
  this.removeError('entrustTo');
490
497
  this.logIssueForm.entrustTo = [];
498
+ if (event) {
499
+ this.logIssueForm.entrustTo = this.listData.userList.filter((emplist) => emplist.my_member_id === this.currentUser.id);
500
+ }
491
501
  }
492
502
  setException(type) { this.logIssueForm.exceptionType = type; }
493
503
  setEvidence(type) { this.logIssueForm.evidenceRequired = type; }
504
+ setIssueType(type) { this.logIssueForm.issueType = type; }
494
505
  addMoreInfo(event) {
495
506
  this.additionalOptionStatus[event.code] = event.checked;
496
507
  this.scrollToBottom = true;
@@ -865,7 +876,7 @@ export class LogAnIssueComponent {
865
876
  LogAnIssueComponent.decorators = [
866
877
  { type: Component, args: [{
867
878
  selector: 'app-log-an-issue',
868
- template: "<!-- <p>log-an-issue works!</p> -->\r\n<div class=\"log-an-issue\" *ngIf=\"!showSmiley\">\r\n <div class=\"form-group-row\" *ngIf=\"['COMPLIANCE_WORKROOM'].includes(openedFrom)\">\r\n <div class=\"left\" [class.checked]=\"false\">\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">\r\n Linked to\r\n </label>\r\n\r\n <div class=\"selected\">\r\n <div class=\"chip-container\">\r\n <span class=\"chip\">\r\n {{reponsibilityData?.responsibilityName}}</span>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group-row\" *ngIf=\"['AUDIT_WORKROOM','VIEW_AUDIT_EXECUTION_SUMMARY','EXECUTE_AUDIT_PLAN'].includes(openedFrom)\">\r\n <div class=\"left\" [class.checked]=\"false\">\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">\r\n Issue linked with\r\n </label>\r\n <div class=\"selected\">\r\n <div class=\"chip-container\">\r\n <span class=\"chip\">\r\n {{issueDetails?.auditPlanName}}</span>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"form-group-row\" *ngIf=\"['VIEW_AUDIT_EXECUTION_SUMMARY','EXECUTE_AUDIT_PLAN'].includes(openedFrom) || isRiskControlVisible\" [class.active]=\"activeField === 'ISSUE_CONTROL_RISK'\"\r\n [class.disabled]=\"activeField && activeField !== 'ISSUE_CONTROL_RISK' && sideSelectorElements.includes(activeField)\">\r\n <div class=\"left\" [class.checked]=\"logIssueForm?.linkedControlRisk?.length > 0 \">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/category.svg\" alt=\"\"\r\n *ngIf=\"logIssueForm?.linkedControlRisk?.length === 0 || activeField === 'ISSUE_CONTROL_RISK' \" />\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"logIssueForm?.linkedControlRisk?.length > 0 && activeField !== 'ISSUE_CONTROL_RISK'\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Select a control or risk</label>\r\n <div class=\"select\" *ngIf=\"!logIssueForm?.linkedControlRisk || logIssueForm?.linkedControlRisk?.length === 0\">\r\n <input (click)=\"setActiveFieldSelector('ISSUE_CONTROL_RISK','ISSUE_CONTROL_RISK')\" type=\"text\"\r\n placeholder=\"Select a control or risk.\" readonly>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"logIssueForm?.linkedControlRisk?.length > 0\">\r\n <div class=\"chip-container\">\r\n <span class=\"chip\"><i class=\"icons\"\r\n (click)=\"deleteItem('ISSUE_CONTROL_RISK',logIssueForm?.linkedControlRisk[0])\">&#xe90d;</i>{{logIssueForm?.linkedControlRisk[0]?.itemControlName}}</span>\r\n </div>\r\n <button class=\"edit\" *ngIf=\"activeField !=='ISSUE_CONTROL_RISK'\" type=\"button\"\r\n (click)=\"setActiveFieldSelector('ISSUE_CONTROL_RISK','ISSUE_CONTROL_RISK')\"><i\r\n class=\"icons\">&#xe90c;</i>Edit</button>\r\n </div>\r\n </div>\r\n <div class=\"vx-form-group\" *ngFor=\"let tag of logIssueForm.issueCustomTag|keyvalue\">\r\n <!-- {{logIssueForm.issueCustomTag|json}} -->\r\n <label class=\"vx-control-panel\">{{tag?.value?.custom_tag_name}}</label>\r\n <input type=\"text\" [placeholder]=\"tag?.value?.custom_tag_name\" [(ngModel)]=\"tag.value.custom_tag_value\">\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n <div class=\"form-group-row\"\r\n [class.disabled]=\"activeField && activeField !== 'ISSUE_TITLE' && sideSelectorElements.includes(activeField)\">\r\n <div class=\"left\" [class.checked]=\"logIssueForm.issueName.trim().length\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/what.svg\" alt=\"name\"\r\n *ngIf=\"!logIssueForm.issueName.trim().length || activeField === 'ISSUE_TITLE'\">\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"logIssueForm.issueName.trim().length && activeField !== 'ISSUE_TITLE'\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">\r\n Issue Title <span class=\"required\">*</span>\r\n </label>\r\n <input type=\"text\" placeholder=\"Enter issue Title\" [(ngModel)]=\"logIssueForm.issueName\"\r\n (focusin)=\"setActiveFieldSelector('ISSUE_TITLE','ISSUE_TITLE')\"\r\n (keyup)=\"logIssueForm.issueName?.trim()?.length > 0 ? removeError('issueName'): null\"\r\n (focusout)=\"setActiveFieldSelector('','')\" *ngIf=\"logIssueForm.issueName =='' || activeSelector === 'ISSUE_TITLE'\">\r\n <div class=\"selected\" *ngIf=\"logIssueForm.issueName.length && activeSelector !== 'ISSUE_TITLE'\">\r\n <div class=\"chip-container\">\r\n <span class=\"value\">{{logIssueForm.issueName}}</span>\r\n </div>\r\n <button class=\"edit\" (click)=\"setActiveFieldSelector('ISSUE_TITLE','ISSUE_TITLE')\" type=\"button\"><i class=\"icons\">&#xe9ba;</i> Edit</button>\r\n </div>\r\n <p class=\"error-message\" *ngIf=\"fieldsWithError.includes('issueName')\">Enter a name for this issue.</p>\r\n <ng-container *ngIf=\"AttachmentTrack[0]?.length > 0 \">\r\n <div class=\"file-list\" *ngFor=\"let uploadingFile of AttachmentTrack[0]\">\r\n <div class=\"file-container\">\r\n <span class=\"file-name\">{{uploadingFile}}</span>\r\n <!-- <button>\r\n <i class=\"icons\">&#xe90d;</i>\r\n </button> -->\r\n </div>\r\n <app-line-loader [loaderHeight]=\"2\"></app-line-loader>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"logIssueForm?.issueDescriptionAttachements?.length > 0\">\r\n <div class=\"file-list\" *ngFor=\"let file of logIssueForm?.issueDescriptionAttachements\">\r\n <div class=\"file-container\">\r\n <span class=\"file-name\">{{file?.name}}</span>\r\n <button>\r\n <i class=\"icons\" (click)=\"deleteFile(file,'ISSUE_DESCRIPTION')\">&#xe90d;</i>\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <marx-editor [editorConfig]=\"{mode: 'prime',file:false,\r\n colorPalette: true,\r\n link: true,\r\n placeholder: 'Description'}\" [(ngModel)]=\"logIssueForm.issueDescription\"\r\n (sendSavedFiles)=\"selectFile('ISSUE_DESCRIPTION',$event)\" (clickOutside)=\"checkDescription()\"></marx-editor>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group-row\" [class.active]=\"activeField === 'ISSUE_CATEGORY'\"\r\n [class.disabled]=\"activeField && activeField !== 'ISSUE_CATEGORY' && sideSelectorElements.includes(activeField)\">\r\n <div class=\"left\" [class.checked]=\"logIssueForm?.issueCategory?.length > 0 \">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/category.svg\" alt=\"\"\r\n *ngIf=\"logIssueForm?.issueCategory?.length === 0 || activeField === 'ISSUE_CATEGORY' \" />\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"logIssueForm?.issueCategory?.length > 0 && activeField !== 'ISSUE_CATEGORY'\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Issue Category</label>\r\n <div class=\"select\" *ngIf=\"!logIssueForm?.issueCategory || logIssueForm?.issueCategory?.length === 0\">\r\n <input (click)=\"setActiveFieldSelector('ISSUE_CATEGORY','ISSUE_CATEGORY')\" type=\"text\"\r\n placeholder=\"Select a category for this issue\" readonly>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"logIssueForm?.issueCategory?.length > 0\">\r\n <div class=\"chip-container\">\r\n <span class=\"chip\"><i class=\"icons\"\r\n (click)=\"deleteItem('ISSUE_CATEGORY',logIssueForm?.issueCategory[0])\">&#xe90d;</i>{{logIssueForm?.issueCategory[0]?.category_name}}</span>\r\n </div>\r\n <button class=\"edit\" *ngIf=\"activeField !=='ISSUE_CATEGORY'\" type=\"button\"\r\n (click)=\"setActiveFieldSelector('ISSUE_CATEGORY','ISSUE_CATEGORY')\"><i\r\n class=\"icons\">&#xe9ba;</i>Edit</button>\r\n </div>\r\n <p class=\"error-message\" *ngIf=\"fieldsWithError.includes('issueCategory')\">Select an issue\r\n category.</p>\r\n </div>\r\n <div class=\"vx-form-group\" *ngFor=\"let tag of logIssueForm.issueCustomTag\">\r\n <!-- {{logIssueForm.issueCustomTag|json}} -->\r\n <label class=\"vx-control-panel\">{{tag?.name}}</label>\r\n <input type=\"text\" [placeholder]=\"tag?.name\" [(ngModel)]=\"tag.value\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group-row\" *ngIf=\"isRCVisible\" [class.active]=\"false\"\r\n [class.disabled]=\"activeField && activeField !== 'ISSUE_RC' && sideSelectorElements.includes(activeField)\"\r\n >\r\n <div class=\"left\" [class.checked]=\"logIssueForm?.issueRC?.length > 0\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/responsibility-center.svg\" alt=\"\" *ngIf=\"logIssueForm?.issueRC?.length === 0\">\r\n\r\n <svg class=\"checkIcon\" *ngIf=\"logIssueForm?.issueRC?.length > 0 && activeField !== 'ISSUE_RC'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Responsibility Center\r\n <span class=\"required\" *ngIf=\"isRCMandatory\">*</span>\r\n </label>\r\n <div class=\"select\" *ngIf=\"!logIssueForm?.issueRC || logIssueForm?.issueRC?.length === 0\">\r\n <input (click)=\"setActiveFieldSelector('ISSUE_RC','ISSUE_RC')\" type=\"text\"\r\n placeholder=\"Select Responsibility Center(s)\" readonly>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"logIssueForm?.issueRC?.length > 0\">\r\n <div class=\"chip-container\">\r\n <span class=\"chip\"><i class=\"icons\" *ngIf=\"!isRCPreSelected\"\r\n (click)=\"deleteItem('ISSUE_RC',logIssueForm?.issueRC[0])\">&#xe90d;</i>{{logIssueForm?.issueRC[0]?.item_name}}</span>\r\n </div>\r\n <button *ngIf=\"activeField !=='ISSUE_RC' && !isRCPreSelected\" class=\"edit\" type=\"button\"\r\n (click)=\"setActiveFieldSelector('ISSUE_RC','ISSUE_RC')\"><i\r\n class=\"icons\">&#xe9ba;</i>Edit</button>\r\n </div>\r\n <p class=\"error-message\" *ngIf=\"fieldsWithError.includes('issueRC')\">Select the Responsibility Center associated with this issue.</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group-row\"\r\n [class.disabled]=\"activeField && activeField !== 'ISSUE_WHO' && sideSelectorElements.includes(activeField)\">\r\n <div class=\"left\" [class.checked]=\"logIssueForm?.entrustTo?.length > 0\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/who.svg\" alt=\"im\"\r\n *ngIf=\"(logIssueForm?.entrustTo?.length === 0 && !logIssueForm?.isAssignToMyself) || activeField === 'ISSUE_WHO' \">\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"(logIssueForm?.entrustTo?.length > 0 || logIssueForm?.isAssignToMyself ) && activeField !== 'ISSUE_WHO'\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Who? <span class=\"required\">*</span></label>\r\n <div class=\"select\" [class.disabled]=\"logIssueForm?.isAssignToMyself\"\r\n *ngIf=\"!logIssueForm?.entrustTo || logIssueForm?.entrustTo?.length === 0\">\r\n <input (click)=\"setActiveFieldSelector('ISSUE_WHO','ISSUE_WHO')\"\r\n [disabled]=\"logIssueForm?.isAssignToMyself\" type=\"text\"\r\n placeholder=\"Who is responsible for completing the responsibility?\" readonly>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"logIssueForm?.entrustTo?.length > 0\">\r\n <div class=\"chip-container\">\r\n <span class=\"chip\"><i class=\"icons\"\r\n (click)=\"deleteItem('ISSUE_WHO',logIssueForm?.entrustTo[0])\">&#xe90d;</i>{{logIssueForm?.entrustTo[0]?.employee_name}}</span>\r\n </div>\r\n <button *ngIf=\"activeField !=='ISSUE_WHO'\" class=\"edit\" type=\"button\"\r\n (click)=\"setActiveFieldSelector('ISSUE_WHO','ISSUE_WHO')\"><i\r\n class=\"icons\">&#xe9ba;</i>Edit</button>\r\n </div>\r\n <p class=\"error-message\" *ngIf=\"fieldsWithError.includes('entrustTo')\">Select the person responsible for resolving this issue.</p>\r\n <div class=\"switch-row align-right\" [class.disabled]=\"activeField === 'ISSUE_WHO'\">\r\n <app-cs-switch [disabled]=\"activeField === 'ISSUE_WHO'\" [(ngValue)]=\"logIssueForm.isAssignToMyself\" (ngValueChange)=\"assignMyself($event)\">OR\r\n ASSIGN TO MYSELF\r\n </app-cs-switch>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group-row\"\r\n [class.disabled]=\"activeField && activeField !== 'ISSUE_DATE_TIME' && sideSelectorElements.includes(activeField)\">\r\n <div class=\"left\" [class.checked]=\"logIssueForm?.issueDueDate \">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/when.svg\" alt=\"im\"\r\n *ngIf=\"!logIssueForm?.issueDueDate || activeField === 'ISSUE_DATE_TIME' \">\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"logIssueForm?.issueDueDate && activeField !== 'ISSUE_DATE_TIME'\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Maximum Time to Resolve <span class=\"required\">*</span></label>\r\n <div class=\"date-time-picker\">\r\n <div class=\"picker-group\">\r\n <input type=\"text\" readonly placeholder=\"Set a deadline.\"\r\n [value]=\"logIssueForm.issueDueDate | date: 'dd MMM yyyy'\" (click)=\"openDatePicker();\">\r\n <i class=\"icons\">&#xe92d;</i>\r\n <dp-date-picker #datePicker (onSelect)=\"datePickerOverlay = false;closeDatePicker($event);removeError('issueDueDate')\" [config]=\"dateConfig\"\r\n [(ngModel)]=\"logIssueForm.issueDueDate\" >\r\n </dp-date-picker>\r\n <div class=\"vx-overlay\" (click)=\"closeDatePicker($event)\" *ngIf=\"datePickerOverlay\"></div>\r\n </div>\r\n\r\n <div class=\"picker-group\">\r\n\r\n <input (mouseover)=\"setCurrentTime()\" [(ngModel)]=\"logIssueForm.issueDueTime\" [value]=\"logIssueForm.issueDueTime\" readonly\r\n class=\"time\" aria-label=\"12hr format\" [ngxTimepicker]=\"dailyTime\" placeholder=\"Select Time\"\r\n type=\"text\" [min]=\"currentTime\" readonly>\r\n <i class=\"icons\">&#xe955;</i>\r\n <ngx-material-timepicker (opened)=\"setActiveFieldSelector('ISSUE_DATE_TIME', 'ISSUE_DATE_TIME')\"\r\n (closed)=\"setActiveFieldSelector('','')\" #dailyTime [defaultTime]=\"'11:59 pm'\">\r\n </ngx-material-timepicker>\r\n </div>\r\n\r\n </div>\r\n <p class=\"error-message\" *ngIf=\"fieldsWithError.includes('issueDueDate')\">Select the date by which this issue needs to be resolved.</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group-row\" [class.disabled]=\"activeField && sideSelectorElements.includes(activeField)\">\r\n <div class=\"left\" [class.checked]=\"logIssueForm.issueRecommendation\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/recommended-action.svg\" alt=\"im\" *ngIf=\"!(logIssueForm.issueRecommendation | spaceBreaker).length\">\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"(logIssueForm.issueRecommendation | spaceBreaker).length>0\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Recommended Actions <span class=\"required\">*</span></label>\r\n <ng-container *ngIf=\"AttachmentTrack[1]?.length > 0 \">\r\n <div class=\"file-list\" *ngFor=\"let uploadingFile of AttachmentTrack[1]\">\r\n <div class=\"file-container\">\r\n <span class=\"file-name\">{{uploadingFile}}</span>\r\n <!-- <button>\r\n <i class=\"icons\">&#xe90d;</i>\r\n </button> -->\r\n </div>\r\n <app-line-loader [loaderHeight]=\"2\"></app-line-loader>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"logIssueForm?.recommendedActionsAttachments?.length > 0\">\r\n <div class=\"file-list\" *ngFor=\"let file of logIssueForm?.recommendedActionsAttachments\">\r\n <div class=\"file-container\">\r\n <span class=\"file-name\">{{file?.name}}</span>\r\n <button>\r\n <i class=\"icons\" (click)=\"deleteFile(file,'RECOMMENDED_ACTIONS')\">&#xe90d;</i>\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <marx-editor [(ngModel)]=\"logIssueForm.issueRecommendation\" [editorConfig]=\"{mode: 'prime',\r\n colorPalette: true,\r\n link: true,\r\n file:true,\r\n placeholder: 'Recommended actions'}\" (ngModelChange)=\"logIssueForm?.issueRecommendation?.trim()?.length > 0 ? removeError('issueRecommendation'):null\"\r\n (clickOutside)=\"checkDescription()\" (sendSavedFiles)=\"selectFile('RECOMMENDED_ACTIONS',$event)\"></marx-editor>\r\n <p class=\"error-message\" *ngIf=\"fieldsWithError.includes('issueRecommendation')\">Specify the recommended actions to resolve this issue.</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group-row\" *ngIf=\"!hiddenList.includes('RISK_CLASSIFICATION')\" [class.disabled]=\"activeField && sideSelectorElements.includes(activeField)\">\r\n <div class=\"left\" [class.checked]=\"logIssueForm.issueRiskRating\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/risks.svg\" alt=\"im\" *ngIf=\"!logIssueForm?.issueRiskRating\">\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"logIssueForm?.issueRiskRating\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Risk Classification</label>\r\n <div class=\"classification\">\r\n <label class=\"low\" *ngFor=\" let class of riskClassification\" [ngClass]=\"[class.class]\">\r\n <input type=\"radio\" name=\"classification\" [value]=\"class.value\"\r\n [checked]=\"logIssueForm?.issueRiskRating === class.value\"\r\n [(ngModel)]=\"logIssueForm.issueRiskRating\">\r\n <span>{{class.name}}</span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"additionalOptionStatus.EXCEPTION_TYPE\"\r\n [class.disabled]=\"activeField && sideSelectorElements.includes(activeField)\">\r\n <div class=\"left\" [class.checked]=\"logIssueForm?.exceptionType > -1\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/exception-type.svg\" alt=\"im\" *ngIf=\"logIssueForm?.exceptionType === null\">\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"logIssueForm?.exceptionType > -1\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">\r\n Exception Type\r\n </label>\r\n <app-cs-radio class=\"main-filed\" [value]=\"1\" [checked]=\"logIssueForm?.exceptionType === 1\"\r\n (checkedEvent)=\"setException(1)\">Design Exception\r\n <!-- <i class=\"icons\">&#xe91f;</i> -->\r\n </app-cs-radio>\r\n <app-cs-radio class=\"main-filed\" [value]=\"2\" [checked]=\"logIssueForm?.exceptionType === 2\"\r\n (checkedEvent)=\"setException(2)\">Effectiveness Exception\r\n <!-- <i class=\"icons\">&#xe91f;</i> -->\r\n </app-cs-radio>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" [class.active]=\"activeField === 'ISSUE_TYPE'\"\r\n [class.disabled]=\"activeField && activeField !== 'ISSUE_TYPE' && sideSelectorElements.includes(activeField)\"\r\n *ngIf=\"additionalOptionStatus.ISSUE_TYPE\">\r\n <div class=\"left\" [class.checked]=\"logIssueForm?.issueType?.length > 0\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/issue-type.svg\" alt=\"\"\r\n *ngIf=\"logIssueForm?.issueType?.length === 0 || activeField === 'ISSUE_TYPE' \">\r\n\r\n <svg class=\"checkIcon\" *ngIf=\"logIssueForm?.issueType?.length > 0 && activeField !== 'ISSUE_TYPE'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Issue Type</label>\r\n <div class=\"select\" *ngIf=\"!logIssueForm?.issueType || logIssueForm?.issueType?.length === 0\">\r\n <input (click)=\"setActiveFieldSelector('ISSUE_TYPE','ISSUE_TYPE')\" type=\"text\"\r\n placeholder=\"Select the Issue Type associated with this issue.\" readonly>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"logIssueForm?.issueType?.length > 0\">\r\n <div class=\"chip-container\">\r\n <span class=\"chip\"><i class=\"icons\"\r\n (click)=\"deleteItem('ISSUE_TYPE',logIssueForm?.issueType[0])\">&#xe90d;</i>{{logIssueForm?.issueType[0]?.issue_type_name}}</span>\r\n </div>\r\n <button *ngIf=\"activeField !=='ISSUE_TYPE'\" class=\"edit\" type=\"button\"\r\n (click)=\"setActiveFieldSelector('ISSUE_TYPE','ISSUE_TYPE')\"><i\r\n class=\"icons\">&#xe9ba;</i>Edit</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"additionalOptionStatus.PRIORITY\"\r\n [class.disabled]=\"activeField && sideSelectorElements.includes(activeField)\">\r\n <div class=\"left\" [class.checked]=\"logIssueForm?.issuePriority\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/priority.svg\" alt=\"im\" *ngIf=\"!logIssueForm?.issuePriority\">\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"logIssueForm?.issuePriority > 0\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Priority</label>\r\n <div class=\"classification\">\r\n <label *ngFor=\" let priority of riskPrority\" [ngClass]=\"[priority.class]\">\r\n <input type=\"radio\" name=\"classification-priority\" [value]=\"priority.value\"\r\n [checked]=\"logIssueForm?.issuePriority === priority.value\"\r\n [(ngModel)]=\"logIssueForm.issuePriority\">\r\n <span>{{priority.name}}</span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"additionalOptionStatus.ASSOCIATED_RISKS\"\r\n [class.disabled]=\"activeField && sideSelectorElements.includes(activeField)\">\r\n <div class=\"left\" [class.checked]=\"logIssueForm.issueAssociatedRisk\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/associated-risks.svg\" alt=\"im\" *ngIf=\"!logIssueForm?.issueAssociatedRisk.trim().length\">\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"logIssueForm?.issueAssociatedRisk.trim().length\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Associated Risks </label>\r\n <ng-container *ngIf=\"AttachmentTrack[2]?.length > 0 \">\r\n <div class=\"file-list\" *ngFor=\"let uploadingFile of AttachmentTrack[2]\">\r\n <div class=\"file-container\">\r\n <span class=\"file-name\">{{uploadingFile}}</span>\r\n <!-- <button>\r\n <i class=\"icons\">&#xe90d;</i>\r\n </button> -->\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"logIssueForm?.associatedRisksAttachments?.length > 0\">\r\n <div class=\"file-list\" *ngFor=\"let file of logIssueForm?.associatedRisksAttachments\">\r\n <div class=\"file-container\">\r\n <span class=\"file-name\">{{file?.name}}</span>\r\n <button>\r\n <i class=\"icons\" (click)=\"deleteFile(file,'ASSOCIATED_RISKS')\">&#xe90d;</i>\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <marx-editor [(ngModel)]=\"logIssueForm.issueAssociatedRisk\" [editorConfig]=\"{mode: 'prime',\r\n colorPalette: true,\r\n link: true,\r\n file:false,\r\n placeholder: 'Associated Risks'}\" (clickOutside)=\"checkDescription()\" (sendSavedFiles)=\"selectFile('ASSOCIATED_RISKS',$event)\"></marx-editor>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" [class.active]=\"false\" *ngIf=\"additionalOptionStatus.OVERSIGHT\"\r\n [class.disabled]=\"activeField && !(['ISSUE_CC','ISSUE_FCC'].includes(activeField)) && sideSelectorElements.includes(activeField)\">\r\n <div class=\"left\"\r\n [class.checked]=\"logIssueForm?.issueCCUsers?.length > 0 || logIssueForm?.failureCCUsers?.length > 0\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/oversight.svg\" alt=\"\"\r\n *ngIf=\"(logIssueForm?.issueCCUsers?.length === 0 && logIssueForm?.failureCCUsers?.length === 0)|| activeField === 'ISSUE_CC'|| activeField === 'ISSUE_FCC' \">\r\n\r\n <svg class=\"checkIcon\"\r\n *ngIf=\"logIssueForm?.issueCCUsers?.length > 0 || logIssueForm?.failureCCUsers?.length > 0 && activeField !== 'ISSUE_CC'|| activeField !== 'ISSUE_FCC'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Overseer </label>\r\n <div class=\"select\" *ngIf=\"!logIssueForm?.issueCCUsers || logIssueForm?.issueCCUsers?.length === 0\">\r\n <input type=\"text\" (click)=\"setActiveFieldSelector('ISSUE_CC','ISSUE_CC')\"\r\n placeholder=\"Who should have oversight of this issue?\" readonly>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"logIssueForm?.issueCCUsers?.length > 0\">\r\n <div class=\"chip-container\">\r\n <span class=\"chip\"><i class=\"icons\"\r\n (click)=\"deleteItem('ISSUE_CC',logIssueForm?.issueCCUsers[0])\">&#xe90d;</i>{{logIssueForm?.issueCCUsers[0]?.employee_name}}</span>\r\n <button class=\"count\" *ngIf=\"logIssueForm?.issueCCUsers?.length > 1\" type=\"button\" appPopover\r\n (click)=\"CC.popover()\" placement=\"right\">+\r\n {{logIssueForm?.issueCCUsers?.slice(1).length}}</button>\r\n <app-popover #CC [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let cc of logIssueForm?.issueCCUsers | slice: 1; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"deleteItem('ISSUE_CC',cc)\">&#xe90d;</i>\r\n {{cc?.employee_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 <button *ngIf=\"activeField !=='ISSUE_CC'\" class=\"edit\" type=\"button\"\r\n (click)=\"setActiveFieldSelector('ISSUE_CC','ISSUE_CC')\"><i\r\n class=\"icons\">&#xe9ba;</i>Edit</button>\r\n </div>\r\n <div class=\"select\" *ngIf=\"!logIssueForm?.failureCCUsers || logIssueForm?.failureCCUsers?.length === 0\">\r\n <input (click)=\"setActiveFieldSelector('ISSUE_FCC','ISSUE_FCC')\" type=\"text\"\r\n placeholder=\"Who should be notified if the issue is not resolved?\" readonly>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"logIssueForm?.failureCCUsers?.length > 0\">\r\n <div class=\"chip-container\">\r\n <span class=\"chip\"><i class=\"icons\"\r\n (click)=\"deleteItem('ISSUE_FCC',logIssueForm?.failureCCUsers[0])\">&#xe90d;</i>{{logIssueForm?.failureCCUsers[0]?.employee_name}}</span>\r\n <button class=\"count\" *ngIf=\"logIssueForm?.failureCCUsers?.length > 1\" type=\"button\" appPopover\r\n (click)=\"FCC.popover()\" placement=\"right\">+\r\n {{logIssueForm?.failureCCUsers?.slice(1).length}}</button>\r\n <app-popover #FCC [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let fcc of logIssueForm?.failureCCUsers | slice: 1; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"deleteItem('ISSUE_FCC',fcc)\">&#xe90d;</i>\r\n {{fcc?.employee_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 <button *ngIf=\"activeField !=='ISSUE_FCC'\" class=\"edit\" type=\"button\"\r\n (click)=\"setActiveFieldSelector('ISSUE_FCC','ISSUE_FCC')\"><i\r\n class=\"icons\">&#xe9ba;</i>Edit</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"additionalOptionStatus.EVIDENCE\"\r\n [class.disabled]=\"activeField && sideSelectorElements.includes(activeField)\">\r\n <div class=\"left\" [class.checked]=\"true\">\r\n <!-- <img src=\"https://cdn.v-comply.com/format-evidence.svg\" alt=\"im\"> -->\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">\r\n Evidence\r\n </label>\r\n <div class=\"upload-format\">\r\n <span class=\"text\">Do you want evidence of completion of the issue to be uploaded?</span>\r\n <div class=\"radio-group\">\r\n <app-cs-radio [name]=\"'file-evidence'\" [value]=\"1\"\r\n [checked]=\"logIssueForm?.evidenceRequired === 1\" (checkedEvent)=\"setEvidence(1)\">Yes\r\n </app-cs-radio>\r\n <app-cs-radio [name]=\"'file-evidence'\" [value]=\"0\"\r\n [checked]=\"logIssueForm?.evidenceRequired === 0\" (checkedEvent)=\"setEvidence(0)\">No\r\n </app-cs-radio>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<app-loader-inline *ngIf=\"loader\"></app-loader-inline>\r\n<app-radio-list [config]=\"selectorConfig?.ISSUE_CATGORY\" [itemsList]=\"listData?.categoryList\"\r\n [selectedItems]=\"logIssueForm.issueCategory\" [identifierKey]=\"'category_id'\"\r\n [displayKey]=\"'category_name'\" *ngIf=\"activeSelector==='ISSUE_CATEGORY'\"\r\n (saveList)=\"selectorAction($event,'ISSUE_CATEGORY')\" (closeList)=\"fieldDeselector('ISSUE_CATEGORY')\">\r\n</app-radio-list>\r\n\r\n<app-radio-list [config]=\"selectorConfig?.ISSUE_RC\" [itemsList]=\"listData?.rcList\"\r\n [selectedItems]=\"logIssueForm.issueRC\" [identifierKey]=\"'rc_id'\" [displayKey]=\"'rc_name'\"\r\n *ngIf=\"activeSelector==='ISSUE_RC'\" (saveList)=\"selectorAction($event,'ISSUE_RC')\"\r\n (closeList)=\"fieldDeselector('ISSUE_RC')\"></app-radio-list>\r\n\r\n<app-radio-list [config]=\"selectorConfig?.ISSUE_WHO\" [itemsList]=\"listData?.userList\" [twoColumn]=\"true\"\r\n [selectedItems]=\"logIssueForm.entrustTo\" [identifierKey]=\"'employee_id'\" [displayKey]=\"'employee_name'\" [tooltipKey]=\"'employee_email'\"\r\n *ngIf=\"activeSelector==='ISSUE_WHO'\" (saveList)=\"selectorAction($event,'ISSUE_WHO')\"\r\n (closeList)=\"fieldDeselector('ISSUE_WHO')\"></app-radio-list>\r\n\r\n<app-radio-list [config]=\"selectorConfig?.ISSUE_TYPE\" [itemsList]=\"listData?.issueTypeList\"\r\n [selectedItems]=\"logIssueForm.issueType\" [identifierKey]=\"'issue_id'\" [displayKey]=\"'issue_type_name'\"\r\n *ngIf=\"activeSelector==='ISSUE_TYPE'\" (saveList)=\"selectorAction($event,'ISSUE_TYPE')\"\r\n (closeList)=\"fieldDeselector('ISSUE_TYPE')\"></app-radio-list>\r\n\r\n<app-checkbox-list [config]=\"selectorConfig?.ISSUE_CC\" [twoColumn]=\"true\"\r\n [itemsList]=\"listData.userList|userFilter:'employee_email':logIssueForm.entrustTo:{'employee_email':currentUser?.email}\"\r\n [selectedItems]=\"logIssueForm.issueCCUsers\" [identifierKey]=\"'employee_email'\" [displayKey]=\"'employee_name'\" [tooltipKey]=\"'employee_email'\"\r\n *ngIf=\"activeSelector==='ISSUE_CC'\" (saveList)=\"selectorAction($event,'ISSUE_CC')\"\r\n (closeList)=\"fieldDeselector('ISSUE_CC')\"></app-checkbox-list>\r\n\r\n<app-checkbox-list [config]=\"selectorConfig?.ISSUE_FCC\" [twoColumn]=\"true\"\r\n [itemsList]=\"listData.userList|userFilter:'employee_email':logIssueForm.entrustTo:{'employee_email':currentUser?.email}\"\r\n [selectedItems]=\"logIssueForm.failureCCUsers\" [identifierKey]=\"'employee_email'\" [displayKey]=\"'employee_name'\" [tooltipKey]=\"'employee_email'\"\r\n *ngIf=\"activeSelector==='ISSUE_FCC'\" (saveList)=\"selectorAction($event,'ISSUE_FCC')\"\r\n (closeList)=\"fieldDeselector('ISSUE_FCC')\"></app-checkbox-list>\r\n\r\n<app-responsibility-risk-selector [loading]=\"isRiskControlLoading\" *ngIf=\"activeSelector==='ISSUE_CONTROL_RISK'\"\r\n (closeList)=\"fieldDeselector('ISSUE_CONTROL_RISK')\" (fetchList)=\"getLinkage(issueDetails?.auditObjId, $event)\"\r\n (saveList)=\"selectorAction($event,'ISSUE_CONTROL_RISK')\"\r\n[activeEntity]=\"logIssueForm?.linkageType\" [listItems]=\"listData?.linkageList\" [selectedItems]=\"logIssueForm?.linkedControlRisk\"></app-responsibility-risk-selector>\r\n\r\n<app-smiley-dialog-inline\r\n *ngIf=\"showSmiley\"\r\n [message]=\"smileyMessage\"\r\n [actionButtons]=\"actionButtons\"\r\n (action)=\"action($event)\"\r\n (closeSmiley)=\"closeSmiley($event)\">\r\n</app-smiley-dialog-inline>\r\n",
879
+ template: "<!-- <p>log-an-issue works!</p> -->\r\n<div class=\"log-an-issue\" *ngIf=\"!showSmiley\">\r\n <div class=\"form-group-row\" *ngIf=\"['COMPLIANCE_WORKROOM'].includes(openedFrom)\">\r\n <div class=\"left\" [class.checked]=\"false\">\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">\r\n Linked to\r\n </label>\r\n\r\n <div class=\"selected\">\r\n <div class=\"chip-container\">\r\n <span class=\"chip\">\r\n {{reponsibilityData?.responsibilityName}}</span>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group-row\" *ngIf=\"['AUDIT_WORKROOM','VIEW_AUDIT_EXECUTION_SUMMARY','EXECUTE_AUDIT_PLAN'].includes(openedFrom)\">\r\n <div class=\"left\" [class.checked]=\"false\">\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">\r\n Issue linked with\r\n </label>\r\n <div class=\"selected\">\r\n <div class=\"chip-container\">\r\n <span class=\"chip\">\r\n {{issueDetails?.auditPlanName}}</span>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"form-group-row\" *ngIf=\"['VIEW_AUDIT_EXECUTION_SUMMARY','EXECUTE_AUDIT_PLAN'].includes(openedFrom) || isRiskControlVisible\" [class.active]=\"activeField === 'ISSUE_CONTROL_RISK'\"\r\n [class.disabled]=\"activeField && activeField !== 'ISSUE_CONTROL_RISK' && sideSelectorElements.includes(activeField)\">\r\n <div class=\"left\" [class.checked]=\"logIssueForm?.linkedControlRisk?.length > 0 \">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/category.svg\" alt=\"\"\r\n *ngIf=\"logIssueForm?.linkedControlRisk?.length === 0 || activeField === 'ISSUE_CONTROL_RISK' \" />\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"logIssueForm?.linkedControlRisk?.length > 0 && activeField !== 'ISSUE_CONTROL_RISK'\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Select a control or risk</label>\r\n <div class=\"select\" *ngIf=\"!logIssueForm?.linkedControlRisk || logIssueForm?.linkedControlRisk?.length === 0\">\r\n <input (click)=\"setActiveFieldSelector('ISSUE_CONTROL_RISK','ISSUE_CONTROL_RISK')\" type=\"text\"\r\n placeholder=\"Select a control or risk.\" readonly>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"logIssueForm?.linkedControlRisk?.length > 0\">\r\n <div class=\"chip-container\">\r\n <span class=\"chip\"><i class=\"icons\"\r\n (click)=\"deleteItem('ISSUE_CONTROL_RISK',logIssueForm?.linkedControlRisk[0])\">&#xe90d;</i>{{logIssueForm?.linkedControlRisk[0]?.itemControlName}}</span>\r\n </div>\r\n <button class=\"edit\" *ngIf=\"activeField !=='ISSUE_CONTROL_RISK'\" type=\"button\"\r\n (click)=\"setActiveFieldSelector('ISSUE_CONTROL_RISK','ISSUE_CONTROL_RISK')\"><i\r\n class=\"icons\">&#xe90c;</i>Edit</button>\r\n </div>\r\n </div>\r\n <div class=\"vx-form-group\" *ngFor=\"let tag of logIssueForm.issueCustomTag|keyvalue\">\r\n <!-- {{logIssueForm.issueCustomTag|json}} -->\r\n <label class=\"vx-control-panel\">{{tag?.value?.custom_tag_name}}</label>\r\n <input type=\"text\" [placeholder]=\"tag?.value?.custom_tag_name\" [(ngModel)]=\"tag.value.custom_tag_value\">\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n <div class=\"form-group-row\"\r\n [class.disabled]=\"activeField && activeField !== 'ISSUE_TITLE' && sideSelectorElements.includes(activeField)\">\r\n <div class=\"left\" [class.checked]=\"logIssueForm.issueName.trim().length\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/what.svg\" alt=\"name\"\r\n *ngIf=\"!logIssueForm.issueName.trim().length || activeField === 'ISSUE_TITLE'\">\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"logIssueForm.issueName.trim().length && activeField !== 'ISSUE_TITLE'\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">\r\n Issue Title <span class=\"required\">*</span>\r\n </label>\r\n <input type=\"text\" placeholder=\"Add a name for this issue\" [(ngModel)]=\"logIssueForm.issueName\"\r\n (focusin)=\"setActiveFieldSelector('ISSUE_TITLE','ISSUE_TITLE')\"\r\n (keyup)=\"logIssueForm.issueName?.trim()?.length > 0 ? removeError('issueName'): null\"\r\n (focusout)=\"setActiveFieldSelector('','')\" *ngIf=\"logIssueForm.issueName =='' || activeSelector === 'ISSUE_TITLE'\">\r\n <div class=\"selected\" *ngIf=\"logIssueForm.issueName.length && activeSelector !== 'ISSUE_TITLE'\">\r\n <div class=\"chip-container\">\r\n <span class=\"value\">{{logIssueForm.issueName}}</span>\r\n </div>\r\n <button class=\"edit\" (click)=\"setActiveFieldSelector('ISSUE_TITLE','ISSUE_TITLE')\" type=\"button\"><i class=\"icons\">&#xe9ba;</i> Edit</button>\r\n </div>\r\n <p class=\"error-message\" *ngIf=\"fieldsWithError.includes('issueName')\">Enter a name for this issue.</p>\r\n <ng-container *ngIf=\"AttachmentTrack[0]?.length > 0 \">\r\n <div class=\"file-list\" *ngFor=\"let uploadingFile of AttachmentTrack[0]\">\r\n <div class=\"file-container\">\r\n <span class=\"file-name\">{{uploadingFile}}</span>\r\n <!-- <button>\r\n <i class=\"icons\">&#xe90d;</i>\r\n </button> -->\r\n </div>\r\n <app-line-loader [loaderHeight]=\"2\"></app-line-loader>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"logIssueForm?.issueDescriptionAttachements?.length > 0\">\r\n <div class=\"file-list\" *ngFor=\"let file of logIssueForm?.issueDescriptionAttachements\">\r\n <div class=\"file-container\">\r\n <span class=\"file-name\">{{file?.name}}</span>\r\n <button>\r\n <i class=\"icons\" (click)=\"deleteFile(file,'ISSUE_DESCRIPTION')\">&#xe90d;</i>\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <marx-editor [editorConfig]=\"{mode: 'prime',file:false,\r\n colorPalette: true,\r\n link: true,\r\n placeholder: 'Description'}\" [(ngModel)]=\"logIssueForm.issueDescription\"\r\n (sendSavedFiles)=\"selectFile('ISSUE_DESCRIPTION',$event)\" (clickOutside)=\"checkDescription()\"></marx-editor>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- issue type start-->\r\n <div class=\"form-group-row\"\r\n [class.disabled]=\"activeField && activeField !== 'ISSUE_TITLE' && sideSelectorElements.includes(activeField)\">\r\n <div class=\"left\" [class.checked]=\"logIssueForm.issueName.trim().length\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/what.svg\" alt=\"name\"\r\n *ngIf=\"!logIssueForm.issueName.trim().length || activeField === 'ISSUE_TITLE'\">\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"logIssueForm.issueName.trim().length && activeField !== 'ISSUE_TITLE'\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">\r\n Issue Type\r\n </label>\r\n <app-cs-radio class=\"main-filed\" [checked]=\"logIssueForm?.issueType === 'issue'\"\r\n (checkedEvent)=\"setIssueType('issue')\">Issue\r\n <!-- <i class=\"icons\">&#xe91f;</i> -->\r\n </app-cs-radio>\r\n <app-cs-radio class=\"main-filed\" [checked]=\"logIssueForm?.issueType === 'incident'\"\r\n (checkedEvent)=\"setIssueType('incident')\">Incident\r\n <!-- <i class=\"icons\">&#xe91f;</i> -->\r\n </app-cs-radio>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- issue type end -->\r\n\r\n <div class=\"form-group-row\" [class.active]=\"activeField === 'ISSUE_CATEGORY'\"\r\n [class.disabled]=\"activeField && activeField !== 'ISSUE_CATEGORY' && sideSelectorElements.includes(activeField)\">\r\n <div class=\"left\" [class.checked]=\"logIssueForm?.issueCategory?.length > 0 \">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/category.svg\" alt=\"\"\r\n *ngIf=\"logIssueForm?.issueCategory?.length === 0 || activeField === 'ISSUE_CATEGORY' \" />\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"logIssueForm?.issueCategory?.length > 0 && activeField !== 'ISSUE_CATEGORY'\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Issue Category</label>\r\n <div class=\"select\" *ngIf=\"!logIssueForm?.issueCategory || logIssueForm?.issueCategory?.length === 0\">\r\n <input (click)=\"setActiveFieldSelector('ISSUE_CATEGORY','ISSUE_CATEGORY')\" type=\"text\"\r\n placeholder=\"Select a category for this issue\" readonly>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"logIssueForm?.issueCategory?.length > 0\">\r\n <div class=\"chip-container\">\r\n <span class=\"chip\"><i class=\"icons\"\r\n (click)=\"deleteItem('ISSUE_CATEGORY',logIssueForm?.issueCategory[0])\">&#xe90d;</i>{{logIssueForm?.issueCategory[0]?.category_name}}</span>\r\n </div>\r\n <button class=\"edit\" *ngIf=\"activeField !=='ISSUE_CATEGORY'\" type=\"button\"\r\n (click)=\"setActiveFieldSelector('ISSUE_CATEGORY','ISSUE_CATEGORY')\"><i\r\n class=\"icons\">&#xe9ba;</i>Edit</button>\r\n </div>\r\n <p class=\"error-message\" *ngIf=\"fieldsWithError.includes('issueCategory')\">Select an issue\r\n category.</p>\r\n </div>\r\n <div class=\"vx-form-group\" *ngFor=\"let tag of logIssueForm.issueCustomTag\">\r\n <!-- {{logIssueForm.issueCustomTag|json}} -->\r\n <label class=\"vx-control-panel\">{{tag?.name}}</label>\r\n <input type=\"text\" [placeholder]=\"tag?.name\" [(ngModel)]=\"tag.value\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group-row\" *ngIf=\"isRCVisible\" [class.active]=\"false\"\r\n [class.disabled]=\"activeField && activeField !== 'ISSUE_RC' && sideSelectorElements.includes(activeField)\"\r\n >\r\n <div class=\"left\" [class.checked]=\"logIssueForm?.issueRC?.length > 0\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/responsibility-center.svg\" alt=\"\" *ngIf=\"logIssueForm?.issueRC?.length === 0\">\r\n\r\n <svg class=\"checkIcon\" *ngIf=\"logIssueForm?.issueRC?.length > 0 && activeField !== 'ISSUE_RC'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Responsibility Center\r\n <span class=\"required\" *ngIf=\"isRCMandatory\">*</span>\r\n </label>\r\n <div class=\"select\" *ngIf=\"!logIssueForm?.issueRC || logIssueForm?.issueRC?.length === 0\">\r\n <input (click)=\"setActiveFieldSelector('ISSUE_RC','ISSUE_RC')\" type=\"text\"\r\n placeholder=\"Select Responsibility Center(s)\" readonly>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"logIssueForm?.issueRC?.length > 0\">\r\n <div class=\"chip-container\">\r\n <span class=\"chip\"><i class=\"icons\" *ngIf=\"!isRCPreSelected\"\r\n (click)=\"deleteItem('ISSUE_RC',logIssueForm?.issueRC[0])\">&#xe90d;</i>{{logIssueForm?.issueRC[0]?.item_name}}</span>\r\n </div>\r\n <button *ngIf=\"activeField !=='ISSUE_RC' && !isRCPreSelected\" class=\"edit\" type=\"button\"\r\n (click)=\"setActiveFieldSelector('ISSUE_RC','ISSUE_RC')\"><i\r\n class=\"icons\">&#xe9ba;</i>Edit</button>\r\n </div>\r\n <p class=\"error-message\" *ngIf=\"fieldsWithError.includes('issueRC')\">Select the Responsibility Center associated with this issue.</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group-row\"\r\n [class.disabled]=\"activeField && activeField !== 'ISSUE_WHO' && sideSelectorElements.includes(activeField)\">\r\n <div class=\"left\" [class.checked]=\"logIssueForm?.entrustTo?.length > 0\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/who.svg\" alt=\"im\"\r\n *ngIf=\"(logIssueForm?.entrustTo?.length === 0 && !logIssueForm?.isAssignToMyself) || activeField === 'ISSUE_WHO' \">\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"(logIssueForm?.entrustTo?.length > 0 || logIssueForm?.isAssignToMyself ) && activeField !== 'ISSUE_WHO'\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Who? <span class=\"required\">*</span></label>\r\n <div class=\"select\" [class.disabled]=\"logIssueForm?.isAssignToMyself\"\r\n *ngIf=\"!logIssueForm?.entrustTo || logIssueForm?.entrustTo?.length === 0\">\r\n <input (click)=\"setActiveFieldSelector('ISSUE_WHO','ISSUE_WHO')\"\r\n [disabled]=\"logIssueForm?.isAssignToMyself\" type=\"text\"\r\n placeholder=\"Who is responsible for completing the responsibility?\" readonly>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"logIssueForm?.entrustTo?.length > 0\">\r\n <div class=\"chip-container\">\r\n <span class=\"chip\"><i class=\"icons\"\r\n (click)=\"deleteItem('ISSUE_WHO',logIssueForm?.entrustTo[0])\">&#xe90d;</i>{{logIssueForm?.entrustTo[0]?.employee_name}}</span>\r\n </div>\r\n <button *ngIf=\"activeField !=='ISSUE_WHO'\" class=\"edit\" type=\"button\"\r\n (click)=\"setActiveFieldSelector('ISSUE_WHO','ISSUE_WHO')\"><i\r\n class=\"icons\">&#xe9ba;</i>Edit</button>\r\n </div>\r\n <p class=\"error-message\" *ngIf=\"fieldsWithError.includes('entrustTo')\">Select the person responsible for resolving this issue.</p>\r\n <div class=\"switch-row align-right\" [class.disabled]=\"activeField === 'ISSUE_WHO'\">\r\n <app-cs-switch [disabled]=\"activeField === 'ISSUE_WHO'\" [(ngValue)]=\"logIssueForm.isAssignToMyself\" (ngValueChange)=\"assignMyself($event)\">OR\r\n ASSIGN TO MYSELF\r\n </app-cs-switch>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group-row\"\r\n [class.disabled]=\"activeField && activeField !== 'ISSUE_DATE_TIME' && sideSelectorElements.includes(activeField)\">\r\n <div class=\"left\" [class.checked]=\"logIssueForm?.issueDueDate \">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/when.svg\" alt=\"im\"\r\n *ngIf=\"!logIssueForm?.issueDueDate || activeField === 'ISSUE_DATE_TIME' \">\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"logIssueForm?.issueDueDate && activeField !== 'ISSUE_DATE_TIME'\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Maximum Time to Resolve <span class=\"required\">*</span></label>\r\n <div class=\"date-time-picker\">\r\n <div class=\"picker-group\">\r\n <input type=\"text\" readonly placeholder=\"Set a deadline.\"\r\n [value]=\"logIssueForm.issueDueDate | date: 'dd MMM yyyy'\" (click)=\"openDatePicker();\">\r\n <i class=\"icons\">&#xe92d;</i>\r\n <dp-date-picker #datePicker (onSelect)=\"datePickerOverlay = false;closeDatePicker($event);removeError('issueDueDate')\" [config]=\"dateConfig\"\r\n [(ngModel)]=\"logIssueForm.issueDueDate\" >\r\n </dp-date-picker>\r\n <div class=\"vx-overlay\" (click)=\"closeDatePicker($event)\" *ngIf=\"datePickerOverlay\"></div>\r\n </div>\r\n\r\n <div class=\"picker-group\">\r\n\r\n <input (mouseover)=\"setCurrentTime()\" [(ngModel)]=\"logIssueForm.issueDueTime\" [value]=\"logIssueForm.issueDueTime\" readonly\r\n class=\"time\" aria-label=\"12hr format\" [ngxTimepicker]=\"dailyTime\" placeholder=\"Select Time\"\r\n type=\"text\" [min]=\"currentTime\" readonly>\r\n <i class=\"icons\">&#xe955;</i>\r\n <ngx-material-timepicker (opened)=\"setActiveFieldSelector('ISSUE_DATE_TIME', 'ISSUE_DATE_TIME')\"\r\n (closed)=\"setActiveFieldSelector('','')\" #dailyTime [defaultTime]=\"'11:59 pm'\">\r\n </ngx-material-timepicker>\r\n </div>\r\n\r\n </div>\r\n <p class=\"error-message\" *ngIf=\"fieldsWithError.includes('issueDueDate')\">Select the date by which this issue needs to be resolved.</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group-row\" [class.disabled]=\"activeField && sideSelectorElements.includes(activeField)\">\r\n <div class=\"left\" [class.checked]=\"logIssueForm.issueRecommendation\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/recommended-action.svg\" alt=\"im\" *ngIf=\"!(logIssueForm.issueRecommendation | spaceBreaker).length\">\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"(logIssueForm.issueRecommendation | spaceBreaker).length>0\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Recommended Actions <span class=\"required\">*</span></label>\r\n <ng-container *ngIf=\"AttachmentTrack[1]?.length > 0 \">\r\n <div class=\"file-list\" *ngFor=\"let uploadingFile of AttachmentTrack[1]\">\r\n <div class=\"file-container\">\r\n <span class=\"file-name\">{{uploadingFile}}</span>\r\n <!-- <button>\r\n <i class=\"icons\">&#xe90d;</i>\r\n </button> -->\r\n </div>\r\n <app-line-loader [loaderHeight]=\"2\"></app-line-loader>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"logIssueForm?.recommendedActionsAttachments?.length > 0\">\r\n <div class=\"file-list\" *ngFor=\"let file of logIssueForm?.recommendedActionsAttachments\">\r\n <div class=\"file-container\">\r\n <span class=\"file-name\">{{file?.name}}</span>\r\n <button>\r\n <i class=\"icons\" (click)=\"deleteFile(file,'RECOMMENDED_ACTIONS')\">&#xe90d;</i>\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <marx-editor [(ngModel)]=\"logIssueForm.issueRecommendation\" [editorConfig]=\"{mode: 'prime',\r\n colorPalette: true,\r\n link: true,\r\n file:true,\r\n placeholder: 'Recommended actions'}\" (ngModelChange)=\"logIssueForm?.issueRecommendation?.trim()?.length > 0 ? removeError('issueRecommendation'):null\"\r\n (clickOutside)=\"checkDescription()\" (sendSavedFiles)=\"selectFile('RECOMMENDED_ACTIONS',$event)\"></marx-editor>\r\n <p class=\"error-message\" *ngIf=\"fieldsWithError.includes('issueRecommendation')\">Specify the recommended actions to resolve this issue.</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group-row\" *ngIf=\"!hiddenList.includes('RISK_CLASSIFICATION')\" [class.disabled]=\"activeField && sideSelectorElements.includes(activeField)\">\r\n <div class=\"left\" [class.checked]=\"logIssueForm.issueRiskRating\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/risks.svg\" alt=\"im\" *ngIf=\"!logIssueForm?.issueRiskRating\">\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"logIssueForm?.issueRiskRating\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Risk Classification</label>\r\n <div class=\"classification\">\r\n <label class=\"low\" *ngFor=\" let class of riskClassification\" [ngClass]=\"[class.class]\">\r\n <input type=\"radio\" name=\"classification\" [value]=\"class.value\"\r\n [checked]=\"logIssueForm?.issueRiskRating === class.value\"\r\n [(ngModel)]=\"logIssueForm.issueRiskRating\">\r\n <span>{{class.name}}</span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"additionalOptionStatus.EXCEPTION_TYPE\"\r\n [class.disabled]=\"activeField && sideSelectorElements.includes(activeField)\">\r\n <div class=\"left\" [class.checked]=\"logIssueForm?.exceptionType > -1\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/exception-type.svg\" alt=\"im\" *ngIf=\"logIssueForm?.exceptionType === null\">\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"logIssueForm?.exceptionType > -1\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">\r\n Exception Type\r\n </label>\r\n <app-cs-radio class=\"main-filed\" [value]=\"1\" [checked]=\"logIssueForm?.exceptionType === 1\"\r\n (checkedEvent)=\"setException(1)\">Design Exception\r\n <!-- <i class=\"icons\">&#xe91f;</i> -->\r\n </app-cs-radio>\r\n <app-cs-radio class=\"main-filed\" [value]=\"2\" [checked]=\"logIssueForm?.exceptionType === 2\"\r\n (checkedEvent)=\"setException(2)\">Effectiveness Exception\r\n <!-- <i class=\"icons\">&#xe91f;</i> -->\r\n </app-cs-radio>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" [class.active]=\"activeField === 'ISSUE_TYPE'\"\r\n [class.disabled]=\"activeField && activeField !== 'ISSUE_TYPE' && sideSelectorElements.includes(activeField)\"\r\n *ngIf=\"additionalOptionStatus.ISSUE_TYPE\">\r\n <div class=\"left\" [class.checked]=\"logIssueForm?.issueType?.length > 0\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/issue-type.svg\" alt=\"\"\r\n *ngIf=\"logIssueForm?.issueType?.length === 0 || activeField === 'ISSUE_TYPE' \">\r\n\r\n <svg class=\"checkIcon\" *ngIf=\"logIssueForm?.issueType?.length > 0 && activeField !== 'ISSUE_TYPE'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Issue Type</label>\r\n <div class=\"select\" *ngIf=\"!logIssueForm?.issueType || logIssueForm?.issueType?.length === 0\">\r\n <input (click)=\"setActiveFieldSelector('ISSUE_TYPE','ISSUE_TYPE')\" type=\"text\"\r\n placeholder=\"Select the Issue Type associated with this issue.\" readonly>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"logIssueForm?.issueType?.length > 0\">\r\n <div class=\"chip-container\">\r\n <span class=\"chip\"><i class=\"icons\"\r\n (click)=\"deleteItem('ISSUE_TYPE',logIssueForm?.issueType[0])\">&#xe90d;</i>{{logIssueForm?.issueType[0]?.issue_type_name}}</span>\r\n </div>\r\n <button *ngIf=\"activeField !=='ISSUE_TYPE'\" class=\"edit\" type=\"button\"\r\n (click)=\"setActiveFieldSelector('ISSUE_TYPE','ISSUE_TYPE')\"><i\r\n class=\"icons\">&#xe9ba;</i>Edit</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"additionalOptionStatus.PRIORITY\"\r\n [class.disabled]=\"activeField && sideSelectorElements.includes(activeField)\">\r\n <div class=\"left\" [class.checked]=\"logIssueForm?.issuePriority\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/priority.svg\" alt=\"im\" *ngIf=\"!logIssueForm?.issuePriority\">\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"logIssueForm?.issuePriority > 0\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Priority</label>\r\n <div class=\"classification\">\r\n <label *ngFor=\" let priority of riskPrority\" [ngClass]=\"[priority.class]\">\r\n <input type=\"radio\" name=\"classification-priority\" [value]=\"priority.value\"\r\n [checked]=\"logIssueForm?.issuePriority === priority.value\"\r\n [(ngModel)]=\"logIssueForm.issuePriority\">\r\n <span>{{priority.name}}</span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"additionalOptionStatus.ASSOCIATED_RISKS\"\r\n [class.disabled]=\"activeField && sideSelectorElements.includes(activeField)\">\r\n <div class=\"left\" [class.checked]=\"logIssueForm.issueAssociatedRisk\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/associated-risks.svg\" alt=\"im\" *ngIf=\"!logIssueForm?.issueAssociatedRisk.trim().length\">\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"logIssueForm?.issueAssociatedRisk.trim().length\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Associated Risks </label>\r\n <ng-container *ngIf=\"AttachmentTrack[2]?.length > 0 \">\r\n <div class=\"file-list\" *ngFor=\"let uploadingFile of AttachmentTrack[2]\">\r\n <div class=\"file-container\">\r\n <span class=\"file-name\">{{uploadingFile}}</span>\r\n <!-- <button>\r\n <i class=\"icons\">&#xe90d;</i>\r\n </button> -->\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"logIssueForm?.associatedRisksAttachments?.length > 0\">\r\n <div class=\"file-list\" *ngFor=\"let file of logIssueForm?.associatedRisksAttachments\">\r\n <div class=\"file-container\">\r\n <span class=\"file-name\">{{file?.name}}</span>\r\n <button>\r\n <i class=\"icons\" (click)=\"deleteFile(file,'ASSOCIATED_RISKS')\">&#xe90d;</i>\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <marx-editor [(ngModel)]=\"logIssueForm.issueAssociatedRisk\" [editorConfig]=\"{mode: 'prime',\r\n colorPalette: true,\r\n link: true,\r\n file:false,\r\n placeholder: 'Associated Risks'}\" (clickOutside)=\"checkDescription()\" (sendSavedFiles)=\"selectFile('ASSOCIATED_RISKS',$event)\"></marx-editor>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" [class.active]=\"false\" *ngIf=\"additionalOptionStatus.OVERSIGHT\"\r\n [class.disabled]=\"activeField && !(['ISSUE_CC','ISSUE_FCC'].includes(activeField)) && sideSelectorElements.includes(activeField)\">\r\n <div class=\"left\"\r\n [class.checked]=\"logIssueForm?.issueCCUsers?.length > 0 || logIssueForm?.failureCCUsers?.length > 0\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/oversight.svg\" alt=\"\"\r\n *ngIf=\"(logIssueForm?.issueCCUsers?.length === 0 && logIssueForm?.failureCCUsers?.length === 0)|| activeField === 'ISSUE_CC'|| activeField === 'ISSUE_FCC' \">\r\n\r\n <svg class=\"checkIcon\"\r\n *ngIf=\"logIssueForm?.issueCCUsers?.length > 0 || logIssueForm?.failureCCUsers?.length > 0 && activeField !== 'ISSUE_CC'|| activeField !== 'ISSUE_FCC'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Overseer </label>\r\n <div class=\"select\" *ngIf=\"!logIssueForm?.issueCCUsers || logIssueForm?.issueCCUsers?.length === 0\">\r\n <input type=\"text\" (click)=\"setActiveFieldSelector('ISSUE_CC','ISSUE_CC')\"\r\n placeholder=\"Who should have oversight of this issue?\" readonly>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"logIssueForm?.issueCCUsers?.length > 0\">\r\n <div class=\"chip-container\">\r\n <span class=\"chip\"><i class=\"icons\"\r\n (click)=\"deleteItem('ISSUE_CC',logIssueForm?.issueCCUsers[0])\">&#xe90d;</i>{{logIssueForm?.issueCCUsers[0]?.employee_name}}</span>\r\n <button class=\"count\" *ngIf=\"logIssueForm?.issueCCUsers?.length > 1\" type=\"button\" appPopover\r\n (click)=\"CC.popover()\" placement=\"right\">+\r\n {{logIssueForm?.issueCCUsers?.slice(1).length}}</button>\r\n <app-popover #CC [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let cc of logIssueForm?.issueCCUsers | slice: 1; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"deleteItem('ISSUE_CC',cc)\">&#xe90d;</i>\r\n {{cc?.employee_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 <button *ngIf=\"activeField !=='ISSUE_CC'\" class=\"edit\" type=\"button\"\r\n (click)=\"setActiveFieldSelector('ISSUE_CC','ISSUE_CC')\"><i\r\n class=\"icons\">&#xe9ba;</i>Edit</button>\r\n </div>\r\n <div class=\"select\" *ngIf=\"!logIssueForm?.failureCCUsers || logIssueForm?.failureCCUsers?.length === 0\">\r\n <input (click)=\"setActiveFieldSelector('ISSUE_FCC','ISSUE_FCC')\" type=\"text\"\r\n placeholder=\"Who should be notified if the issue is not resolved?\" readonly>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"logIssueForm?.failureCCUsers?.length > 0\">\r\n <div class=\"chip-container\">\r\n <span class=\"chip\"><i class=\"icons\"\r\n (click)=\"deleteItem('ISSUE_FCC',logIssueForm?.failureCCUsers[0])\">&#xe90d;</i>{{logIssueForm?.failureCCUsers[0]?.employee_name}}</span>\r\n <button class=\"count\" *ngIf=\"logIssueForm?.failureCCUsers?.length > 1\" type=\"button\" appPopover\r\n (click)=\"FCC.popover()\" placement=\"right\">+\r\n {{logIssueForm?.failureCCUsers?.slice(1).length}}</button>\r\n <app-popover #FCC [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let fcc of logIssueForm?.failureCCUsers | slice: 1; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"deleteItem('ISSUE_FCC',fcc)\">&#xe90d;</i>\r\n {{fcc?.employee_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 <button *ngIf=\"activeField !=='ISSUE_FCC'\" class=\"edit\" type=\"button\"\r\n (click)=\"setActiveFieldSelector('ISSUE_FCC','ISSUE_FCC')\"><i\r\n class=\"icons\">&#xe9ba;</i>Edit</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"additionalOptionStatus.EVIDENCE\"\r\n [class.disabled]=\"activeField && sideSelectorElements.includes(activeField)\">\r\n <div class=\"left\" [class.checked]=\"true\">\r\n <!-- <img src=\"https://cdn.v-comply.com/format-evidence.svg\" alt=\"im\"> -->\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">\r\n Evidence\r\n </label>\r\n <div class=\"upload-format\">\r\n <span class=\"text\">Do you want evidence of completion of the issue to be uploaded?</span>\r\n <div class=\"radio-group\">\r\n <app-cs-radio [name]=\"'file-evidence'\" [value]=\"1\"\r\n [checked]=\"logIssueForm?.evidenceRequired === 1\" (checkedEvent)=\"setEvidence(1)\">Yes\r\n </app-cs-radio>\r\n <app-cs-radio [name]=\"'file-evidence'\" [value]=\"0\"\r\n [checked]=\"logIssueForm?.evidenceRequired === 0\" (checkedEvent)=\"setEvidence(0)\">No\r\n </app-cs-radio>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<app-loader-inline *ngIf=\"loader\"></app-loader-inline>\r\n<app-radio-list [config]=\"selectorConfig?.ISSUE_CATGORY\" [itemsList]=\"listData?.categoryList\"\r\n [selectedItems]=\"logIssueForm.issueCategory\" [identifierKey]=\"'category_id'\"\r\n [displayKey]=\"'category_name'\" *ngIf=\"activeSelector==='ISSUE_CATEGORY'\"\r\n (saveList)=\"selectorAction($event,'ISSUE_CATEGORY')\" (closeList)=\"fieldDeselector('ISSUE_CATEGORY')\">\r\n</app-radio-list>\r\n\r\n<app-radio-list [config]=\"selectorConfig?.ISSUE_RC\" [itemsList]=\"listData?.rcList\"\r\n [selectedItems]=\"logIssueForm.issueRC\" [identifierKey]=\"'rc_id'\" [displayKey]=\"'rc_name'\"\r\n *ngIf=\"activeSelector==='ISSUE_RC'\" (saveList)=\"selectorAction($event,'ISSUE_RC')\"\r\n (closeList)=\"fieldDeselector('ISSUE_RC')\"></app-radio-list>\r\n\r\n<app-radio-list [config]=\"selectorConfig?.ISSUE_WHO\" [itemsList]=\"listData?.userList\" [twoColumn]=\"true\"\r\n [selectedItems]=\"logIssueForm.entrustTo\" [identifierKey]=\"'employee_id'\" [displayKey]=\"'employee_name'\" [tooltipKey]=\"'employee_email'\"\r\n *ngIf=\"activeSelector==='ISSUE_WHO'\" (saveList)=\"selectorAction($event,'ISSUE_WHO')\"\r\n (closeList)=\"fieldDeselector('ISSUE_WHO')\"></app-radio-list>\r\n\r\n<app-radio-list [config]=\"selectorConfig?.ISSUE_TYPE\" [itemsList]=\"listData?.issueTypeList\"\r\n [selectedItems]=\"logIssueForm.issueType\" [identifierKey]=\"'issue_id'\" [displayKey]=\"'issue_type_name'\"\r\n *ngIf=\"activeSelector==='ISSUE_TYPE'\" (saveList)=\"selectorAction($event,'ISSUE_TYPE')\"\r\n (closeList)=\"fieldDeselector('ISSUE_TYPE')\"></app-radio-list>\r\n\r\n<app-checkbox-list [config]=\"selectorConfig?.ISSUE_CC\" [twoColumn]=\"true\"\r\n [itemsList]=\"listData.userList|userFilter:'employee_email':logIssueForm.entrustTo:{'employee_email':currentUser?.email}\"\r\n [selectedItems]=\"logIssueForm.issueCCUsers\" [identifierKey]=\"'employee_email'\" [displayKey]=\"'employee_name'\" [tooltipKey]=\"'employee_email'\"\r\n *ngIf=\"activeSelector==='ISSUE_CC'\" (saveList)=\"selectorAction($event,'ISSUE_CC')\"\r\n (closeList)=\"fieldDeselector('ISSUE_CC')\"></app-checkbox-list>\r\n\r\n<app-checkbox-list [config]=\"selectorConfig?.ISSUE_FCC\" [twoColumn]=\"true\"\r\n [itemsList]=\"listData.userList|userFilter:'employee_email':logIssueForm.entrustTo:{'employee_email':currentUser?.email}\"\r\n [selectedItems]=\"logIssueForm.failureCCUsers\" [identifierKey]=\"'employee_email'\" [displayKey]=\"'employee_name'\" [tooltipKey]=\"'employee_email'\"\r\n *ngIf=\"activeSelector==='ISSUE_FCC'\" (saveList)=\"selectorAction($event,'ISSUE_FCC')\"\r\n (closeList)=\"fieldDeselector('ISSUE_FCC')\"></app-checkbox-list>\r\n\r\n<app-responsibility-risk-selector [loading]=\"isRiskControlLoading\" *ngIf=\"activeSelector==='ISSUE_CONTROL_RISK'\"\r\n (closeList)=\"fieldDeselector('ISSUE_CONTROL_RISK')\" (fetchList)=\"getLinkage(issueDetails?.auditObjId, $event)\"\r\n (saveList)=\"selectorAction($event,'ISSUE_CONTROL_RISK')\"\r\n[activeEntity]=\"logIssueForm?.linkageType\" [listItems]=\"listData?.linkageList\" [selectedItems]=\"logIssueForm?.linkedControlRisk\"></app-responsibility-risk-selector>\r\n\r\n<app-smiley-dialog-inline\r\n *ngIf=\"showSmiley\"\r\n [message]=\"smileyMessage\"\r\n [actionButtons]=\"actionButtons\"\r\n (action)=\"action($event)\"\r\n (closeSmiley)=\"closeSmiley($event)\">\r\n</app-smiley-dialog-inline>\r\n",
869
880
  styles: ["@import url(\"https://cdn.v-comply.com/design-system/css/icons/icons.css\");::ng-deep .log-an-issue{position:relative}", "@import url(\"https://cdn.v-comply.com/design-system/css/icons/icons.css\");::-webkit-scrollbar-track{background-color:#f1f1f1;position:absolute}::-webkit-scrollbar{width:3px;height:3px;background-color:transparent;position:absolute}::-webkit-scrollbar-thumb{border-radius:3px;background-color:#dbdbdb;position:absolute}input::-webkit-inner-spin-button,input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}button{font-family:Poppins,sans-serif}::ng-deep .vx-form-group{display:block;position:relative;margin-bottom:20px}::ng-deep .vx-form-group:after{content:\"\";display:block;clear:both}::ng-deep .vx-form-group .select{position:relative}::ng-deep .vx-form-group .select:after{border-left-color:#707070;border-bottom:1px solid #707070;border-right:1px solid #707070;border-top-color:#707070;content:\"\";display:inline-block;right:15px;position:absolute;top:calc(50% - 4px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .vx-form-group .select input{cursor:pointer;padding-right:30px!important}::ng-deep .vx-form-group .select .custom-input{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;outline:none;padding:3px 12px;line-height:16px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;cursor:pointer}::ng-deep .vx-form-group .select .custom-input:empty:not(:focus):before{content:attr(aria-placeholder);line-height:16px;font-size:13px;width:94%;display:block;pointer-events:none;opacity:.8}::ng-deep .vx-form-group .select .custom-input:hover{border-color:#1e5dd3;box-shadow:0 0 5px rgba(30,93,211,.27)}::ng-deep .vx-form-group .select .custom-input.frequency-custom-input{padding-right:116px}::ng-deep .vx-form-group .select+app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .select+app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:5px;text-transform:uppercase}::ng-deep .vx-form-group .select+app-cs-radio{margin-top:8px!important}::ng-deep .vx-form-group .select~app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group .select.button-sec:after{display:none}::ng-deep .vx-form-group .select.button-sec button{background:transparent;border:none;display:inline-flex;float:right;color:#1e5dd3;text-transform:uppercase;font-weight:600;cursor:pointer;font-size:11px;position:absolute;top:12px;right:8px;padding:0;margin:0}::ng-deep .vx-form-group .select+.vx-control-panel{margin-top:8px}::ng-deep .vx-form-group .select+.selected{margin-top:8px}::ng-deep .vx-form-group .select.select{margin-top:8px}::ng-deep .vx-form-group .upload-format{border:1px solid #dbdbdb;border-radius:4px;padding:8px 12px;display:block}::ng-deep .vx-form-group .upload-format span.text{line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;display:block;margin-bottom:6px}::ng-deep .vx-form-group .upload-format .radio-group{display:flex}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio{display:inline-block}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;margin-left:8px}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio+app-cs-radio{margin-left:12px}::ng-deep .vx-form-group .upload-format~.upload-format{margin-top:4px}::ng-deep .vx-form-group .form-tab{display:flex;justify-content:flex-start}::ng-deep .vx-form-group .form-tab button{background:transparent;color:#161b2f;font-size:11px;line-height:16px;text-transform:uppercase;cursor:pointer;padding:8px 8px 8px 0;border:none;outline:none;font-weight:500}::ng-deep .vx-form-group .form-tab button:disabled{opacity:.5;pointer-events:none}::ng-deep .vx-form-group .form-tab button+button{padding:8px}::ng-deep .vx-form-group .form-tab button.active{color:#1e5dd3}::ng-deep .vx-form-group .tab-group{border:1px solid #dbdbdb;border-radius:4px;padding:0;display:block;position:relative}::ng-deep .vx-form-group .tab-group .upload-file{padding:16px 24px;display:flex;align-items:center}::ng-deep .vx-form-group .tab-group .upload-file .image{width:80px;margin-right:20px}::ng-deep .vx-form-group .tab-group .upload-file .browse{display:flex;align-items:center;justify-content:center;width:calc(100% - 100px);text-align:center}::ng-deep .vx-form-group .tab-group .upload-file .browse span{display:inline-block;font-size:12px;color:#747576;line-height:16px;padding:0 4px}::ng-deep .vx-form-group .tab-group .upload-file .browse .label{font-size:11px;color:#1e5dd3;line-height:16px;font-weight:600;text-transform:uppercase;margin:0;padding:0}::ng-deep .vx-form-group .tab-group .upload-file .browse .label input{opacity:0;position:absolute;top:0;margin:0;padding:0;right:0;bottom:0;left:0;cursor:pointer;width:100%}::ng-deep .vx-form-group .tab-group.active{border-color:#1e5dd3}::ng-deep .vx-form-group .tab-group.uploaded{margin-top:4px}::ng-deep .vx-form-group .tab-group.uploaded .upload-file{padding:12px \u200B24px}::ng-deep .vx-form-group .tab-group.uploaded .upload-file .image{display:none}::ng-deep .vx-form-group .tab-group.uploaded .upload-file .browse{width:100%}::ng-deep .vx-form-group .tab-group+label.vx-form-group{margin-top:8px;margin-bottom:4px}::ng-deep .vx-form-group .file-list{background:#fbfbfb;border:1px solid #f1f1f1;border-radius:4px;padding:12px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;position:relative}::ng-deep .vx-form-group .file-list span.file-name{color:#747576;line-height:16px;font-size:11px;font-weight:400;cursor:pointer;max-width:calc(100% - 20px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}::ng-deep .vx-form-group .file-list .button-group{display:flex}::ng-deep .vx-form-group .file-list button{font-size:12px;color:#eb2424;cursor:pointer;display:flex;padding:0;border:none;outline:none;background:transparent}::ng-deep .vx-form-group .file-list button.edit{color:#1e5dd3}::ng-deep .vx-form-group .file-list button+button{margin-left:16px}::ng-deep .vx-form-group .file-list+.file-list{margin-top:4px}::ng-deep .vx-form-group .file-list .file-container{display:flex;justify-content:space-between;width:100%}::ng-deep .vx-form-group .file-list.policy{background:#fff}::ng-deep .vx-form-group .file-list cs-select{position:relative;margin-top:8px;width:100%}::ng-deep .vx-form-group .file-list cs-select .selection-wrap .input-group input.value{height:32px!important;font-size:11px!important}::ng-deep .vx-form-group .file-list cs-select .selection-wrap .input-group i{right:12px!important;top:12px!important}::ng-deep .vx-form-group .file-list app-line-loader{display:block;position:absolute;left:10px;right:10px;bottom:0}::ng-deep .vx-form-group label.vx-control-panel{color:#161b2f;font-size:11px;font-weight:500;line-height:16px;margin-bottom:8px;display:block;text-transform:uppercase;width:100%;margin-top:4px;text-align:left}::ng-deep .vx-form-group label.vx-control-panel.custom-tag{font-size:10px}::ng-deep .vx-form-group label.vx-control-panel.vx-mt-8{margin-top:8px}::ng-deep .vx-form-group label.vx-control-panel span.required{color:#eb2424;position:relative;top:-2px}::ng-deep .vx-form-group label.vx-control-panel .button{background:transparent;border:none;display:inline-flex;float:right;color:#1e5dd3;text-transform:uppercase;font-weight:600;cursor:pointer;font-size:11px;padding:0;margin:0}::ng-deep .vx-form-group label.vx-control-panel app-cs-switch{float:right;display:block}::ng-deep .vx-form-group label.vx-control-panel i{margin-left:8px;font-size:12px;color:#1e5dd3;cursor:pointer;position:relative;top:1px}::ng-deep .vx-form-group .input,::ng-deep .vx-form-group input[type=text]{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;outline:none;padding:8px 12px;line-height:20px;font-size:13px;color:#747576;transition:all .2s ease-in-out;width:100%;font-weight:400}::ng-deep .vx-form-group .input::-moz-placeholder,::ng-deep .vx-form-group input[type=text]::-moz-placeholder{color:#747576}::ng-deep .vx-form-group .input:-ms-input-placeholder,::ng-deep .vx-form-group input[type=text]:-ms-input-placeholder{color:#747576}::ng-deep .vx-form-group .input::placeholder,::ng-deep .vx-form-group input[type=text]::placeholder{color:#747576}::ng-deep .vx-form-group .input:focus,::ng-deep .vx-form-group .input:hover,::ng-deep .vx-form-group input[type=text]:focus,::ng-deep .vx-form-group input[type=text]:hover{border-color:#1e5dd3;box-shadow:0 0 5px rgba(30,93,211,.27)}::ng-deep .vx-form-group .input.error,::ng-deep .vx-form-group input[type=text].error{border-color:#eb2424;color:#eb2424;margin-bottom:4px}::ng-deep .vx-form-group .input.error:focus,::ng-deep .vx-form-group input[type=text].error:focus{box-shadow:0 0 5px rgba(211,30,30,.27)}::ng-deep .vx-form-group .input:disabled,::ng-deep .vx-form-group input[type=text]:disabled{background:#f1f1f1;cursor:not-allowed}::ng-deep .vx-form-group .input:disabled:hover,::ng-deep .vx-form-group input[type=text]:disabled:hover{border-color:#dbdbdb;box-shadow:none}::ng-deep .vx-form-group .input span.text,::ng-deep .vx-form-group input[type=text] span.text{font-size:13px;color:#747576;font-weight:400;display:block;width:100%}::ng-deep .vx-form-group .input .input-group,::ng-deep .vx-form-group input[type=text] .input-group{display:flex;align-items:center}::ng-deep .vx-form-group .input .input-group.counter,::ng-deep .vx-form-group input[type=text] .input-group.counter{min-width:96px;width:96px}::ng-deep .vx-form-group .input .input-group.counter button,::ng-deep .vx-form-group input[type=text] .input-group.counter button{height:24px;width:24px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;color:#747576;font-size:8px;cursor:pointer;outline:none}::ng-deep .vx-form-group .input .input-group.counter input,::ng-deep .vx-form-group input[type=text] .input-group.counter input{-webkit-appearance:textfield;-moz-appearance:textfield;height:24px;width:calc(100% - 48px);border:1px solid #f1f1f1;outline:none;padding:0 6px;text-align:center}::ng-deep .vx-form-group .input .input-group.counter input::-webkit-inner-spin-button,::ng-deep .vx-form-group .input .input-group.counter input::-webkit-outer-spin-button,::ng-deep .vx-form-group input[type=text] .input-group.counter input::-webkit-inner-spin-button,::ng-deep .vx-form-group input[type=text] .input-group.counter input::-webkit-outer-spin-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;margin:0}::ng-deep .vx-form-group .input+.file-list,::ng-deep .vx-form-group input[type=text]+.file-list{margin-top:8px}::ng-deep .vx-form-group .input::-moz-placeholder,::ng-deep .vx-form-group input[type=text]::-moz-placeholder{font-size:13px}::ng-deep .vx-form-group .input::placeholder,::ng-deep .vx-form-group input[type=text]::placeholder{font-size:13px}::ng-deep .vx-form-group .input:-ms-input-placeholder,::ng-deep .vx-form-group input[type=text]:-ms-input-placeholder{font-size:13px}::ng-deep .vx-form-group .input::-ms-input-placeholder,::ng-deep .vx-form-group input[type=text]::-ms-input-placeholder{font-size:13px}::ng-deep .vx-form-group .classification{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;padding:8px 12px;display:flex;justify-content:space-between}::ng-deep .vx-form-group .classification label{width:100%;position:relative;z-index:1;margin:0 4px 0 0}::ng-deep .vx-form-group .classification label span{display:block;width:100%;height:24px;border:1px solid #f1f1f1;border-radius:2px;line-height:24px;font-size:10px;text-align:center;color:#747576;font-weight:500;position:relative;text-transform:uppercase}::ng-deep .vx-form-group .classification label span:before{height:2px;content:\"\";top:0;right:0;left:0;border-radius:2px;position:absolute;transition:all .2s ease-in-out}::ng-deep .vx-form-group .classification label input{opacity:0;position:absolute;top:0;right:0;bottom:0;left:0;margin:0;padding:0;width:100%;height:100%;cursor:pointer;z-index:1}::ng-deep .vx-form-group .classification label input:checked+span{color:#fff}::ng-deep .vx-form-group .classification label input:checked+span:before{bottom:0;height:100%;z-index:-1}::ng-deep .vx-form-group .classification label.low span:before{background:#34aa44}::ng-deep .vx-form-group .classification label.low-med span:before{background:#f2bf19}::ng-deep .vx-form-group .classification label.med-high span:before{background:#f29619}::ng-deep .vx-form-group .classification label.high span:before{background:#eb2424}::ng-deep .vx-form-group .classification label:last-of-type{margin-right:0}::ng-deep .vx-form-group .input{display:flex;align-items:center}::ng-deep .vx-form-group .selected{height:40px;border-radius:4px;border:1px solid #f1f1f1;background:#fbfbfb;outline:none;padding:8px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;display:flex;align-items:center;position:relative;justify-content:space-between}::ng-deep .vx-form-group .selected .chip-container{display:flex;width:calc(100% - 60px);align-items:center}::ng-deep .vx-form-group .selected .chip-container.checkpoints{width:calc(100% - 120px)}::ng-deep .vx-form-group .selected .chip-container span.chip{background:#fff;border-radius:2px;box-shadow:0 0 3px #1e5dd31a;height:24px;padding:0 8px;color:#1e5dd3;font-size:12px;display:block;width:auto;max-width:100%;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:24px}::ng-deep .vx-form-group .selected .chip-container span.chip.disabled{background:#f1f1f1;box-shadow:none;color:#747576}::ng-deep .vx-form-group .selected .chip-container span.chip i{font-weight:400;margin-right:8px;cursor:pointer;font-size:10px;position:relative;top:1px}::ng-deep .vx-form-group .selected .chip-container span.chip span.step{background:#1e5dd3;border-radius:2px;color:#fff;font-size:9px;line-height:14px;padding:0 4px;font-weight:400;text-align:center;min-width:auto;margin-right:4px}::ng-deep .vx-form-group .selected .chip-container span.chip+span.chip{margin-left:4px}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question{display:flex;align-items:center;justify-content:space-between;width:100%}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question span.value{color:#1e5dd3;font-size:12px;font-weight:400;line-height:24px;padding:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:calc(100% - 80px)}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question span.label{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:9px;font-weight:600;text-transform:uppercase;padding-left:4px;padding-right:4px;line-height:12px;margin-left:8px}::ng-deep .vx-form-group .selected .chip-container span.value{color:#747576;font-size:13px;line-height:20px;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:calc(100% - 52px);padding:0 4px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text{color:#747576;font-size:10px;font-weight:500;padding:0 8px;width:122px;line-height:14px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text.first{position:relative;min-width:162px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text.first:before{background:#f1f1f1;content:\"\";position:absolute;top:0;right:0;height:calc(100% + 12px);width:1px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text .no{color:#1e5dd3}::ng-deep .vx-form-group .selected .chip-container.plus span.chip{max-width:calc(50% - 35px)}::ng-deep .vx-form-group .selected .chip-container.more-one span.chip{max-width:50%}::ng-deep .vx-form-group .selected button.count{background:#1e5dd3;border-radius:2px;height:24px;padding:2px 8px;border:1px solid #1e5dd3;cursor:pointer;outline:none;color:#fff;font:13px;font-weight:500;line-height:20px;white-space:nowrap;margin-left:8px}::ng-deep .vx-form-group .selected button.edit{border:1px solid #f1f1f1;border-radius:2px;background:#fff;outline:none;cursor:pointer;display:block;height:24px;padding:0 5px 0 4px;font-size:11px;font-weight:500;color:#1e5dd3;text-transform:uppercase;white-space:nowrap;margin-left:8px}::ng-deep .vx-form-group .selected button.edit i{font-weight:400;font-size:8px;margin-right:4px}::ng-deep .vx-form-group .selected button.close-btn{background:transparent;border:none;padding:0;margin-left:8px;font-size:10px;color:#c7381b;display:flex;align-items:center}::ng-deep .vx-form-group .selected .workflow-label{min-width:92px;padding:4px;text-align:center;margin-left:-8px;margin-right:8px;border-right:1px solid #f1f1f1}::ng-deep .vx-form-group .selected .workflow-label p{margin:0;display:block;text-transform:uppercase}::ng-deep .vx-form-group .selected .workflow-label p.title{font-size:9px;line-height:12px;color:#161b2f;font-weight:500}::ng-deep .vx-form-group .selected .workflow-label p.description{font-size:11px;line-height:16px;color:#161b2f;font-weight:600}::ng-deep .vx-form-group .selected .workflow-label+.chip-container{width:calc(100% - 148px)}::ng-deep .vx-form-group .selected+.selected{margin-top:8px}::ng-deep .vx-form-group .selected+app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .selected+app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:5px;text-transform:uppercase}::ng-deep .vx-form-group .selected+app-cs-switch.who-toggle label.cs-switch span.value{color:#747576}::ng-deep .vx-form-group .selected+app-cs-radio{margin-top:8px!important}::ng-deep .vx-form-group .selected~app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group .selected.readOnly{pointer-events:none}::ng-deep .vx-form-group .selected span.chip{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .vx-form-group .select-list{position:absolute;background:#fff;box-shadow:0 0 5px #1e5dd3;top:100%;right:0;left:0;z-index:2}::ng-deep .vx-form-group .select-list .vx-radio-group label.vx-radio-item{width:100%;padding:12px 16px}::ng-deep .vx-form-group .select-list .vx-radio-group label.vx-radio-item:hover{background:#f8f8f8}::ng-deep .vx-form-group marx-editor{margin-top:8px;display:block}::ng-deep .vx-form-group marx-editor .editor-container{border-radius:4px;border:1px solid #dbdbdb}::ng-deep .vx-form-group marx-editor .editor-container .editable-block{min-height:60px;padding:11px 15px;max-height:100px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%}@media not all and (min-resolution:0.001dpcm){@supports (-webkit-appearance:none){::ng-deep .vx-form-group marx-editor .editor-container .editable-block:before{opacity:.72}}}::ng-deep .vx-form-group marx-editor .editor-container .editable-block ul{padding:0 0 0 10px;margin-top:0}::ng-deep .vx-form-group marx-editor .editor-container .editable-block ul li{list-style:disc}::ng-deep .vx-form-group marx-editor .editor-container .editable-block ol{padding:0 0 0 10px;margin-top:0}::ng-deep .vx-form-group marx-editor .editor-container .editable-block ol li{list-style:decimal}::ng-deep .vx-form-group marx-editor .editor-container .editor-tools{z-index:1;border-top:1px solid #dbdbdb;transition:none;border-radius:0 0 3px 3px}::ng-deep .vx-form-group marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep .vx-form-group marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:22px}::ng-deep .vx-form-group marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button.submit{width:80px!important;line-height:22px;justify-content:center}::ng-deep .vx-form-group marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col .popover.small ul.option-list li button{width:100%!important;height:auto!important}::ng-deep .vx-form-group marx-editor .editor-container:focus-within{border-color:#1e5dd3!important}::ng-deep .vx-form-group marx-editor .editor-container:focus-within .editor-tools{border-color:#1e5dd3!important}::ng-deep .vx-form-group marx-editor .editor-container:hover{border-color:#1e5dd3!important}::ng-deep .vx-form-group marx-editor .editor-container:hover .editor-tools{border-color:#1e5dd3!important}::ng-deep .vx-form-group marx-editor+app-cs-switch{margin-top:8px}::ng-deep .vx-form-group app-cs-switch label.cs-switch span.value{font-size:11px;color:#747576;text-transform:uppercase}::ng-deep .vx-form-group app-cs-switch+app-cs-switch{margin-top:8px}::ng-deep .vx-form-group .date-time-picker{display:flex;justify-content:space-between;height:40px;border-radius:4px;border:1px solid #dbdbdb;padding:11px 0}::ng-deep .vx-form-group .date-time-picker:focus-within{border-color:#1e5dd3;box-shadow:0 0 5px rgba(30,93,211,.27)}::ng-deep .vx-form-group .date-time-picker .picker-group{width:50%;position:relative;display:flex;align-items:center}::ng-deep .vx-form-group .date-time-picker .picker-group:first-of-type{border-right:1px solid #dbdbdb}::ng-deep .vx-form-group .date-time-picker .picker-group:only-of-type{border:none;width:100%}::ng-deep .vx-form-group .date-time-picker .picker-group input{height:38px;background:#fff;line-height:38px;font-size:13px;color:#747576;transition:all .2s ease-in-out;width:100%;font-weight:400;border:none;padding:0 12px 0 34px;outline:none}::ng-deep .vx-form-group .date-time-picker .picker-group input:focus,::ng-deep .vx-form-group .date-time-picker .picker-group input:hover{box-shadow:none;border:none}::ng-deep .vx-form-group .date-time-picker .picker-group input::-moz-placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group input::placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group input:-ms-input-placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group input::-ms-input-placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group i{display:flex;justify-content:center;align-items:center;height:16px;width:16px;position:absolute;left:12px;top:0;color:#bcbcbc;font-size:16px;pointer-events:none}::ng-deep .vx-form-group app-cs-radio.main-filed{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;color:#707070}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group .switch-row{display:flex}::ng-deep .vx-form-group .switch-row app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .switch-row app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:0;text-transform:uppercase;color:#747576!important}::ng-deep .vx-form-group .switch-row app-cs-switch label.cs-switch span.value i{display:inline-flex;font-size:11px;cursor:pointer;color:#1e5dd3;align-items:center;line-height:16px;margin:0 4px}::ng-deep .vx-form-group .switch-row app-cs-switch+app-cs-switch{margin-left:8px}::ng-deep .vx-form-group .switch-row.align-right{justify-content:flex-end}::ng-deep .vx-form-group .switch-row.align-right label.cs-switch span.value{margin-right:8px}::ng-deep .vx-form-group .risk-type-field{background:#f8f8f8;border:1px solid #dbdbdb;border-radius:4px;height:40px;display:flex;align-items:center;padding:4px;position:relative;z-index:1}::ng-deep .vx-form-group .risk-type-field .type-item{width:50%;position:relative}::ng-deep .vx-form-group .risk-type-field .type-item button{background:transparent;border:none;border-radius:0;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase;width:100%;height:32px;padding:0 12px;text-align:left}::ng-deep .vx-form-group .risk-type-field .type-item button.disabled{background:transparent!important;color:#dbdbdb!important;filter:unset!important;opacity:unset!important;pointer-events:none}::ng-deep .vx-form-group .risk-type-field .type-item .info{color:#1e5dd3;font-size:12px;position:absolute;top:10px;right:12px;cursor:pointer}::ng-deep .vx-form-group .risk-type-field .type-item.active button{color:#1e5dd3!important}::ng-deep .vx-form-group .risk-type-field .type-item:nth-child(2).active~.background-glider{transform:translate(100%)}::ng-deep .vx-form-group .risk-type-field .background-glider{background:#fff;border-radius:4px;box-shadow:0 1px 3px #161b2f26;position:absolute;display:flex;width:208px;height:32px;z-index:-1;transition:.25s ease-out}.left{width:36px;height:36px;margin-top:30px;margin-left:-58px;margin-right:20px;display:flex;justify-content:center;align-items:center;position:relative;z-index:10;border-radius:50%}.left.deadline-completed{margin-top:18px}.left.checked{background:transparent}.left img{width:36px}.left .checkIcon{width:32px;height:32px;background:#fff;border-radius:50%;stroke-width:4;stroke:#34aa44;stroke-miterlimit:10;box-shadow:inset 0 0 0 #34aa44;-webkit-animation:fillCheck .4s ease-in-out .4s forwards,scale .3s ease-in-out .9s both;animation:fillCheck .4s ease-in-out .4s forwards,scale .3s ease-in-out .9s both;margin-top:0}.left .checkIcon__circle{stroke-dasharray:166;stroke-dashoffset:166;stroke-width:2;stroke-miterlimit:10;stroke:#34aa44;fill:none;-webkit-animation:strokeCheck .6s cubic-bezier(.65,0,.45,1) forwards;animation:strokeCheck .6s cubic-bezier(.65,0,.45,1) forwards}.left .checkIcon__check{transform-origin:50% 50%;stroke-dasharray:48;stroke-dashoffset:48;-webkit-animation:strokeCheck .3s cubic-bezier(.65,0,.45,1) .8s forwards;animation:strokeCheck .3s cubic-bezier(.65,0,.45,1) .8s forwards}.right{width:100%}.right span.indicator{position:absolute;top:36px;left:-16px;font-size:12px;color:#f0b819;cursor:pointer}.form-group-row{display:flex;position:relative;transition:all .2s ease-in-out}.form-group-row.hide{opacity:0;transition:all .2s ease-in-out}.form-group-row.disabled{pointer-events:none;filter:grayscale(1);z-index:2}.form-group-row.disabled .left{position:relative}.form-group-row.disabled .left:before{content:\"\";position:absolute;top:2px;right:0;bottom:0;left:2px;background:#fff;opacity:.7;border-radius:50%;width:32px;height:32px}.form-group-row.disabled .right{opacity:.3}.form-group-row.active{pointer-events:none;filter:grayscale(0);z-index:2;opacity:1}.form-group-row.active .right .vx-form-group .custom-input,.form-group-row.active .right .vx-form-group input{border-color:#1e5dd3;box-shadow:0 0 5px rgba(30,93,211,.27)}@-webkit-keyframes strokeCheck{to{stroke-dashoffset:0}}@keyframes strokeCheck{to{stroke-dashoffset:0}}@-webkit-keyframes fillCheck{to{box-shadow:inset 0 0 0 2px #34aa44}}@keyframes fillCheck{to{box-shadow:inset 0 0 0 2px #34aa44}}.action-list{width:220px}.action-list ul{padding:0;margin:0;-webkit-animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both;background:#fff;box-shadow:0 3px 6px #1c5bd140;border-radius:4px;max-height:220px;overflow:auto}.action-list ul.action-item{display:block}.action-list ul.action-item li{list-style:none;border:none;border-bottom:1px solid #f1f1f1;display:block;width:100%;padding:0;background:transparent;border-radius:0;margin:0;height:auto;justify-content:flex-start;box-shadow:none}.action-list ul.action-item li button{color:#6e717e;text-align:left;text-decoration:none;cursor:pointer;background:transparent;font-size:12px;text-transform:capitalize;display:flex;width:100%;padding:7.5px 11px;border:none}.action-list ul.action-item li button i{font-size:17px;margin-right:10px;color:#1c5bd1}.action-list ul.action-item li button:hover{background:#f3f3f3}.action-list ul.action-item li .avatar-card{display:flex;align-items:center;width:100%;padding:7.5px}.action-list ul.action-item li .avatar-card.within-con{display:block}.action-list ul.action-item li .avatar-card .avatar{height:24px;width:24px!important;overflow:hidden;background:#4681ef;color:#fff;font-size:10px;display:inline-flex;margin-right:5px;border-radius:50%;align-items:center;justify-content:center;text-transform:uppercase}.action-list ul.action-item li .avatar-card .avatar img{width:100%}.action-list ul.action-item li .avatar-card .avatar+span.value{width:calc(100% - 29px)}.action-list ul.action-item li .avatar-card span.value{width:100%;color:#6e717e;text-decoration:none;background:transparent;font-size:12px;text-transform:capitalize;display:block;font-weight:400;-moz-text-align-last:left;text-align-last:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:20px}.action-list ul.action-item li .avatar-card span.value i{font-size:8px;color:#1c5bd1;cursor:pointer;margin-right:5px}.action-list ul.action-item li .avatar-card.no-image{display:block}.action-list ul.action-item li .avatar-card.no-image span.value{width:100%;display:block}.action-list ul.action-item li .chip-item{color:#1e5dd3;padding:10px;display:flex;align-items:center}.action-list ul.action-item li .chip-item i{margin-right:7px;font-size:10px;cursor:pointer;display:inline-flex}.action-list ul.action-item li .chip-item span{display:block;width:auto;max-width:calc(100% - 17px);font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.action-list ul.action-item li .chip-item span.chip-block{display:block;width:100%}.action-list ul.action-item li .chip-item span.id{font-size:9px}.action-list ul.action-item li .within{display:flex;align-items:center;justify-content:flex-start}.action-list ul.action-item li .within .block{background:#f1f1f1;border-radius:2px;padding:0 2px;line-height:14px;font-size:9px;font-weight:500;color:#042e7d;margin-right:6px;display:block;text-transform:uppercase}.action-list ul.action-item li .within .data{width:100%;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#747576;font-size:11px;font-weight:400;line-height:17px}.action-list ul.action-item li:first-child{-webkit-animation:action-list-open .25s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open .25s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(2){-webkit-animation:action-list-open .35s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open .35s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(3){-webkit-animation:action-list-open .45s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open .45s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(4){-webkit-animation:action-list-open .55s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open .55s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(5){-webkit-animation:action-list-open .65s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open .65s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(6){-webkit-animation:action-list-open .75s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open .75s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(7){-webkit-animation:action-list-open .85s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open .85s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(8){-webkit-animation:action-list-open .95s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open .95s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(9){-webkit-animation:action-list-open 1.05s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open 1.05s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(10){-webkit-animation:action-list-open 1.15s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open 1.15s cubic-bezier(.25,.46,.45,.94) both}@-webkit-keyframes action-list-open{0%{transform:translateY(50px)}to{transform:translateY(0)}}@keyframes action-list-open{0%{transform:translateY(50px)}to{transform:translateY(0)}}@-webkit-keyframes scale-up-center{0%{transform:scale(.5);opacity:0}to{transform:scale(1);opacity:1}}@keyframes scale-up-center{0%{transform:scale(.5);opacity:0}to{transform:scale(1);opacity:1}}p.error-message{font-size:11px;font-weight:400;color:#eb2424;line-height:16px;margin-top:8px;margin-bottom:0}.edit-loader{position:absolute;top:-3px;left:-3px;width:46px;height:46px;transform:rotate(180deg)}.circular-loader{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;height:100%;transform-origin:center center;width:100%;position:absolute;top:0;left:0;margin:auto}.loader-path{stroke-dasharray:150,200;stroke-dashoffset:-10;-webkit-animation:dash 1.5s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite;stroke-linecap:round}@-webkit-keyframes rotate{to{transform:rotate(1turn)}}@keyframes rotate{to{transform:rotate(1turn)}}@-webkit-keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35}to{stroke-dasharray:89,200;stroke-dashoffset:-124}}@keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35}to{stroke-dasharray:89,200;stroke-dashoffset:-124}}::ng-deep .dropdown{position:fixed;background:#fff;box-shadow:0 3px 6px #00000029;padding:24px 0;z-index:9;max-height:calc(100vh - 200px);overflow:auto}::ng-deep .dropdown ul.dropdown-list{padding:0 20px;margin:0;display:block}::ng-deep .dropdown ul.dropdown-list li{list-style:none}::ng-deep .dropdown ul.dropdown-list li app-cs-radio{display:flex}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item span.radio{position:absolute;top:12px;left:12px}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item span.value{padding:11px 12px 11px 32px;width:100%;border:1px solid #bcbcbc;border-radius:4px;margin-left:0;max-width:100%}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item svg{position:absolute;top:12px;left:12px}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item input[type=radio]:checked~span.value{background:#e8feeb;border-color:#34aa44}::ng-deep .dropdown ul.dropdown-list li+li{margin-top:8px}app-smiley-dialog{position:relative;z-index:10}app-smiley-dialog-inline{position:absolute;top:-3px;right:0;bottom:0;z-index:999;width:520px;height:calc(100vh + 3px)}::ng-deep .vx-overlay{position:fixed;z-index:3;top:0;right:0;bottom:0;left:0}dp-date-picker{width:100%;position:fixed!important;z-index:14;top:-40px;left:0}dp-date-picker input{width:100%;border:none;opacity:0;pointer-events:none}dp-date-picker input:focus{outline:none}dp-date-picker .dp-popup{width:412px;box-shadow:0 0 20px #161b2f26;background-color:#fff;border-radius:4px;-webkit-animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both}dp-date-picker .dp-popup dp-day-calendar,dp-date-picker .dp-popup dp-month-calendar{width:100%;pointer-events:auto}dp-date-picker .dp-popup dp-day-calendar button,dp-date-picker .dp-popup dp-month-calendar button{background:transparent;border:none;outline:none}dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-left,dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-right,dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn,dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-left,dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-right,dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:50%;font-size:14px}dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-left:hover,dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-right:hover,dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn:hover,dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-left:hover,dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-right:hover,dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn:hover{background-color:#f3f3f3}dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn,dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn{display:none}dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn:before,dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn:before{content:\"\";height:10px;width:10px;border-radius:50%;background:#000;display:inline-flex}dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week,dp-date-picker .dp-popup dp-day-calendar .dp-weekdays,dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week,dp-date-picker .dp-popup dp-month-calendar .dp-weekdays{display:flex;justify-content:space-around}dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week .dp-calendar-weekday,dp-date-picker .dp-popup dp-day-calendar .dp-weekdays .dp-calendar-weekday,dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week .dp-calendar-weekday,dp-date-picker .dp-popup dp-month-calendar .dp-weekdays .dp-calendar-weekday{width:52px;border-left:none;border-bottom-color:#fff;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase}dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button,dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button,dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button,dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button{width:40px;height:40px;border-radius:50%;display:inline-flex;justify-content:center;align-items:center}dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button:hover,dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button:hover,dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button:hover,dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button:hover{background-color:#f3f3f3}dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button.dp-selected,dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button.dp-selected,dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button.dp-selected,dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button.dp-selected{background:#1e5dd3}dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button.dp-current-day,dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button.dp-current-day,dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button.dp-current-day,dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button.dp-current-day{border:1px solid rgba(0,0,0,.38);color:#1e5dd3;background-color:#fff}dp-date-picker .dp-popup dp-day-calendar .dp-day-calendar-container,dp-date-picker .dp-popup dp-month-calendar .dp-day-calendar-container{padding:20px;border-radius:2px}dp-date-picker .dp-popup dp-day-calendar .dp-calendar-nav-container,dp-date-picker .dp-popup dp-month-calendar .dp-calendar-nav-container{display:flex;margin:0 0 20px;border:none}dp-date-picker .dp-popup dp-day-calendar .dp-calendar-nav-container .dp-nav-header button,dp-date-picker .dp-popup dp-month-calendar .dp-calendar-nav-container .dp-nav-header button{color:#000;font-size:17px;font-weight:500;margin:0 0 0 12px;padding:0}dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container,dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container{width:80px;display:flex}dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button,dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button{margin:0!important}dp-date-picker .dp-popup dp-day-calendar .dp-calendar-wrapper,dp-date-picker .dp-popup dp-month-calendar .dp-calendar-wrapper{border:none}dp-date-picker .dp-open+div{position:fixed!important;top:0!important;right:0!important;bottom:0!important;left:0!important;display:flex;justify-content:center;align-items:center;z-index:99;pointer-events:none;background:rgba(0,0,0,.3)}@-webkit-keyframes slide-bottom{0%{transform:translateY(-100px)}to{transform:translateY(0)}}@keyframes slide-bottom{0%{transform:translateY(-100px)}to{transform:translateY(0)}}::ng-deep span.file{display:block;width:20px;min-width:20px;border-radius:0 0 2px 2px;position:relative;margin-right:5px;border:1px solid #747576;border-top:none;margin-top:5px;background:#fff}::ng-deep span.file.table{margin-right:8px;width:20px}::ng-deep span.file.table i{font-size:8px}::ng-deep span.file.table .format{height:8px;font-size:7px;line-height:8px;font-weight:400}::ng-deep span.file:before{position:absolute;border-radius:0;top:-4px;right:-1px;content:\"\";height:4px;width:4px;display:block;background:linear-gradient(45deg,#747576,#747576 1%,#747576 50%,rgba(41,137,216,0) 51%,rgba(125,185,232,0));filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file:after{height:4px;left:-1px;right:3px;border-top:1px solid;border-right:none;border-left:1px solid;content:\"\";top:-4px;position:absolute;border-radius:2px 0 0 0;background:#fff}::ng-deep span.file .format{height:10px;font-size:6px;text-transform:uppercase;background:transparent;font-weight:600;text-align:center;display:block;line-height:10px}::ng-deep span.file i{font-size:10px;height:10px;display:flex;align-items:center;justify-content:center;color:#dbdbdb}::ng-deep span.file.docx{width:22px!important}::ng-deep span.file.pdf,::ng-deep span.file.template{border-color:#f31c39}::ng-deep span.file.pdf:before,::ng-deep span.file.template:before{background:linear-gradient(45deg,#f31c39,#f31c39 50%,rgba(41,137,216,0) 51%,rgba(125,185,232,0));filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#f31c39\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.pdf:after,::ng-deep span.file.template:after{border-color:#f31c39}::ng-deep span.file.pdf .format,::ng-deep span.file.template .format{color:#f31c39}::ng-deep span.file.css,::ng-deep span.file.less,::ng-deep span.file.scss,::ng-deep span.file.xls,::ng-deep span.file.xlsx{border-color:#34aa44}::ng-deep span.file.css:before,::ng-deep span.file.less:before,::ng-deep span.file.scss:before,::ng-deep span.file.xls:before,::ng-deep span.file.xlsx:before{background:linear-gradient(45deg,#34aa44,#34aa44 1%,#34aa44 50%,rgba(41,137,216,0) 51%,rgba(125,185,232,0));filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.css:after,::ng-deep span.file.less:after,::ng-deep span.file.scss:after,::ng-deep span.file.xls:after,::ng-deep span.file.xlsx:after{border-color:#34aa44;color:#34aa44}::ng-deep span.file.css .format,::ng-deep span.file.less .format,::ng-deep span.file.scss .format,::ng-deep span.file.xls .format,::ng-deep span.file.xlsx .format{color:#34aa44}::ng-deep span.file.doc,::ng-deep span.file.docx,::ng-deep span.file.psd{border-color:#1e5dd3}::ng-deep span.file.doc:before,::ng-deep span.file.docx:before,::ng-deep span.file.psd:before{background:linear-gradient(45deg,#1e5dd3,#1e5dd3 1%,#1e5dd3 50%,rgba(41,137,216,0) 51%,rgba(125,185,232,0));filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.doc:after,::ng-deep span.file.docx:after,::ng-deep span.file.psd:after{border-color:#1e5dd3}::ng-deep span.file.doc .format,::ng-deep span.file.docx .format,::ng-deep span.file.psd .format{color:#1e5dd3}::ng-deep span.file.ai,::ng-deep span.file.html,::ng-deep span.file.jpeg,::ng-deep span.file.jpg,::ng-deep span.file.png,::ng-deep span.file.ppt{border-color:#f6882f}::ng-deep span.file.ai:before,::ng-deep span.file.html:before,::ng-deep span.file.jpeg:before,::ng-deep span.file.jpg:before,::ng-deep span.file.png:before,::ng-deep span.file.ppt:before{background:linear-gradient(45deg,#f6882f,#f6882f 1%,#f6882f 50%,rgba(41,137,216,0) 51%,rgba(125,185,232,0));filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.ai:after,::ng-deep span.file.html:after,::ng-deep span.file.jpeg:after,::ng-deep span.file.jpg:after,::ng-deep span.file.png:after,::ng-deep span.file.ppt:after{border-color:#f6882f}::ng-deep span.file.ai .format,::ng-deep span.file.html .format,::ng-deep span.file.jpeg .format,::ng-deep span.file.jpg .format,::ng-deep span.file.png .format,::ng-deep span.file.ppt .format{color:#f6882f}::ng-deep span.file.php{border-color:#7aa6f7}::ng-deep span.file.php:before{background:linear-gradient(45deg,#7aa6f7,#7aa6f7 1%,#7aa6f7 50%,rgba(41,137,216,0) 51%,rgba(125,185,232,0));filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.php:after{border-color:#7aa6f7}::ng-deep span.file.php .format{color:#7aa6f7}::ng-deep ngx-material-timepicker-container .timepicker-backdrop-overlay{background-color:rgba(0,0,0,.05)!important;z-index:9999999999!important}::ng-deep ngx-material-timepicker-container .timepicker-overlay{z-index:9999999999!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker{width:232px!important;border-radius:2px!important;box-shadow:0 4px 30px #161b2f26!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header{background-color:#fff!important;padding:0!important;border-radius:2px 2px 0 0}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container{display:block!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time{color:#000!important;width:150px!important;margin:0 auto;line-height:60px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control{font-size:40px;background-color:transparent!important;color:#000!important;font-weight:600;text-align:right;caret-color:transparent;outline:none;font-family:Poppins;line-height:56px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control:focus,::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control:hover{background-color:transparent!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control:last-of-type .timepicker-dial__control{text-align:left}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time span{padding:0 8px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period{display:flex!important;width:182px;margin:0 auto!important;background:#f1f1f1;padding:4px 10px;border-radius:20px;position:relative}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period:before{background:#f1f1f1;content:\"\";position:absolute;top:15px;left:-25px;width:calc(100% + 50px);height:2px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period{flex-direction:unset!important;position:relative;z-index:1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period:after{content:\"\";position:absolute;right:-12px;top:0;border-left:14px solid #f1f1f1;border-bottom:12px solid transparent;border-top:12px solid transparent;z-index:-1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period:before{content:\"\";position:absolute;left:-18px;top:0;border-right:14px solid #f1f1f1;border-bottom:12px solid transparent;border-top:12px solid transparent;z-index:-1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button{font-size:11px;background-color:transparent;padding:0;border-radius:20px;color:#747576;font-weight:600;font-family:Poppins;width:84px;height:24px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button.timepicker-dial__item_active{background:#fff!important;color:#1e5dd3!important;box-shadow:0 1px 2px #dbdbdb}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button+button{margin-left:0!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face{width:200px!important;height:200px!important;padding:10px!important;background:transparent!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer{height:calc(224px / 2 - 20px)!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer span{color:#000}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer span.active{color:#fff}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__clock-hand{height:80px!important;top:calc(50% - 80px)!important;background-color:#1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number>span.active{background-color:#1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__clock-hand_minute:before{border:4px solid #1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions{display:flex!important;padding:10px 0 0!important;background:#fff!important;justify-content:space-around!important;border-radius:0 0 2px 2px!important;overflow:hidden}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div:first-child ngx-material-timepicker-button button.timepicker-button{background:#f8f8f8;color:#1e5dd3}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div ngx-material-timepicker-button button.timepicker-button{line-height:28px!important;width:100%;background:#1e5dd3;color:#fff;border-radius:0!important;height:32px!important;width:116px!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div ngx-material-timepicker-button button.timepicker-button span{font-weight:500!important;font-size:11px;font-family:Poppins}"]
870
881
  },] }
871
882
  ];
@@ -890,4 +901,4 @@ LogAnIssueComponent.propDecorators = {
890
901
  disconnectRefresh: [{ type: Output }],
891
902
  datePicker: [{ type: ViewChild, args: ['datePicker',] }]
892
903
  };
893
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLWFuLWlzc3VlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL2xvZy1hbi1pc3N1ZS9sb2ctYW4taXNzdWUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUdwSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDeEUsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFTakMsTUFBTSxPQUFPLG1CQUFtQjtJQTRLOUIsWUFBb0IsVUFBMkIsRUFBVSxXQUF3QixFQUFVLFlBQTBCLEVBQVUsUUFBeUI7UUFBcEksZUFBVSxHQUFWLFVBQVUsQ0FBaUI7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFVLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUF6Sy9JLHNCQUFpQixHQUFHO1lBQzNCLGdCQUFnQixFQUFFLElBQUk7WUFDdEIsa0JBQWtCLEVBQUUsRUFBRTtZQUN0QixJQUFJLEVBQUMsSUFBSTtZQUNULHNCQUFzQixFQUFFLEVBQUU7U0FDM0IsQ0FBQztRQUNPLGlCQUFZLEdBQUU7WUFDckIsV0FBVyxFQUFHLElBQUk7WUFDaEIsYUFBYSxFQUFHLEVBQUU7WUFDbEIsSUFBSSxFQUFFLElBQUk7WUFDVixVQUFVLEVBQUMsSUFBSTtTQUNsQixDQUFBO1FBQ1EsU0FBSSxHQUFHLFFBQVEsQ0FBQztRQUdmLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNuQyxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDcEMsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ25DLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2hDLHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFHakQsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFDdkIsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzFCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBRXRCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUNmLGtCQUFhLEdBQUcsOEJBQThCLENBQUM7UUFFL0MseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBQzdCLGtCQUFhLEdBQUc7WUFDZCxFQUFFLFVBQVUsRUFBRSxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUU7WUFDdkUsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRTtTQUNqRSxDQUFDO1FBRUYsZ0JBQVcsR0FBaUI7WUFDMUIsaUJBQWlCO1lBQ2pCLFlBQVksRUFBRSxJQUFJO1lBQ2xCLElBQUksRUFBRSxJQUFJO1lBQ1YsV0FBVyxFQUFFLGFBQWE7U0FDM0IsQ0FBQztRQUVGLGVBQVUsR0FBRztZQUNYLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLE1BQU0sRUFBRSxhQUFhO1lBQ3JCLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLFdBQVcsRUFBQyxLQUFLO1lBQ2pCLFdBQVcsRUFBQyxLQUFLO1lBQ2pCLEdBQUcsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtTQUNyQyxDQUFDO1FBQ0YsYUFBUSxHQUFPO1lBQ2IsYUFBYSxFQUFFLEVBQUU7WUFDakIsUUFBUSxFQUFFLEVBQUU7WUFDWixZQUFZLEVBQUUsRUFBRTtZQUNoQixNQUFNLEVBQUUsRUFBRTtZQUNWLFdBQVcsRUFBQyxFQUFFO1NBQ2YsQ0FBQztRQUNGLGlCQUFZLEdBQVE7WUFDbEIsU0FBUyxFQUFFLEVBQUU7WUFDYixnQkFBZ0IsRUFBRSxDQUFDO1lBQ25CLGdCQUFnQixFQUFFLEVBQUU7WUFDcEIsNEJBQTRCLEVBQUUsRUFBRTtZQUNoQyxhQUFhLEVBQUUsRUFBRTtZQUNqQixjQUFjLEVBQUUsRUFBRTtZQUNsQixPQUFPLEVBQUUsRUFBRTtZQUNYLFNBQVMsRUFBRSxFQUFFO1lBQ2IsZ0JBQWdCLEVBQUUsS0FBSztZQUN2QixTQUFTLEVBQUUsRUFBRTtZQUNiLFlBQVksRUFBRSxFQUFFO1lBQ2hCLFlBQVksRUFBRSxVQUFVO1lBQ3hCLGFBQWEsRUFBRSxDQUFDO1lBQ2hCLGVBQWUsRUFBRSxDQUFDO1lBQ2xCLGFBQWEsRUFBRSxDQUFDO1lBQ2hCLG1CQUFtQixFQUFFLEVBQUU7WUFDdkIsNkJBQTZCLEVBQUMsRUFBRTtZQUNoQyxtQkFBbUIsRUFBRSxFQUFFO1lBQ3ZCLDBCQUEwQixFQUFDLEVBQUU7WUFDN0IsWUFBWSxFQUFFLEVBQUU7WUFDaEIsY0FBYyxFQUFFLEVBQUU7WUFDbEIsaUJBQWlCLEVBQUMsRUFBRTtZQUNwQixXQUFXLEVBQUcsTUFBTTtTQUVyQixDQUFDO1FBQ0Ysb0JBQWUsR0FBUSxDQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEMsMkJBQXNCLEdBQVE7WUFDNUIsY0FBYyxFQUFFLEtBQUs7WUFDckIsUUFBUSxFQUFFLEtBQUs7WUFDZixRQUFRLEVBQUUsS0FBSztZQUNmLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLGdCQUFnQixFQUFFLEtBQUs7WUFDdkIsU0FBUyxFQUFFLEtBQUs7U0FDakIsQ0FBQztRQUNGLHVCQUFrQixHQUFHO1lBQ25CLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDdkMsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtZQUNsRCxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFO1lBQ3BELEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7U0FDMUMsQ0FBQztRQUNGLGdCQUFXLEdBQUc7WUFDWixFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1lBQ3ZDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7WUFDOUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtTQUUxQyxDQUFDO1FBRUYseUJBQW9CLEdBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDcEksbUJBQWMsR0FBRztZQUNmLGFBQWEsRUFBRTtnQkFDYixVQUFVLEVBQUUsdUJBQXVCO2dCQUNuQyxvQkFBb0IsRUFBRSxtQkFBbUI7Z0JBQ3pDLGlCQUFpQixFQUFFLHVCQUF1QjtnQkFDMUMsYUFBYSxFQUFFLElBQUk7Z0JBQ25CLFVBQVUsRUFBRSxxQkFBcUI7YUFDbEM7WUFDRCxRQUFRLEVBQUU7Z0JBQ1IsVUFBVSxFQUFFLDhCQUE4QjtnQkFDMUMsb0JBQW9CLEVBQUUsK0JBQStCO2dCQUNyRCxpQkFBaUIsRUFBRSw4QkFBOEI7Z0JBQ2pELGFBQWEsRUFBRSxJQUFJO2dCQUNuQixVQUFVLEVBQUUsaUNBQWlDO2FBQzlDO1lBQ0QsU0FBUyxFQUFFO2dCQUNULFVBQVUsRUFBRSxhQUFhO2dCQUN6QixvQkFBb0IsRUFBRSxlQUFlO2dCQUNyQyxpQkFBaUIsRUFBRSxhQUFhO2dCQUNoQyxhQUFhLEVBQUUsSUFBSTtnQkFDbkIsVUFBVSxFQUFFLGdCQUFnQjthQUM3QjtZQUNELFVBQVUsRUFBRTtnQkFDVixVQUFVLEVBQUUsbUJBQW1CO2dCQUMvQixvQkFBb0IsRUFBRSxxQkFBcUI7Z0JBQzNDLGlCQUFpQixFQUFFLG1CQUFtQjtnQkFDdEMsYUFBYSxFQUFFLElBQUk7Z0JBQ25CLFVBQVUsRUFBRSxzQkFBc0I7YUFDbkM7WUFDRCxRQUFRLEVBQUU7Z0JBQ1IsVUFBVSxFQUFFLGdCQUFnQjtnQkFDNUIsb0JBQW9CLEVBQUUsZUFBZTtnQkFDckMsaUJBQWlCLEVBQUUsYUFBYTtnQkFDaEMsYUFBYSxFQUFFLElBQUk7Z0JBQ25CLGdCQUFnQixFQUFFLElBQUk7Z0JBQ3RCLFVBQVUsRUFBRSxnQkFBZ0I7YUFDN0I7WUFDRCxTQUFTLEVBQUU7Z0JBQ1QsVUFBVSxFQUFFLGdCQUFnQjtnQkFDNUIsb0JBQW9CLEVBQUUsZUFBZTtnQkFDckMsaUJBQWlCLEVBQUUsYUFBYTtnQkFDaEMsYUFBYSxFQUFFLElBQUk7Z0JBQ25CLGdCQUFnQixFQUFFLElBQUk7Z0JBQ3RCLFVBQVUsRUFBRSxnQkFBZ0I7YUFDN0I7U0FDRixDQUFDO1FBRUYsb0JBQWUsR0FBUSxFQUFFLENBQUM7UUFDMUIsZUFBVSxHQUFVLEVBQUUsQ0FBQztRQUV2QixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNqQixtQkFBYyxHQUFHLEVBQUUsQ0FBQztRQUNwQixzQkFBaUIsR0FBUSxFQUFFLENBQUM7UUFDNUIsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDZjs7U0FFQztRQUNILG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLGdCQUFXLEdBQUcsSUFBSSxDQUFBO1FBQ2xCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBRXRCLHlCQUFvQixHQUFHLEtBQUssQ0FBQztJQUMrSCxDQUFDO0lBQzdKLFFBQVE7UUFDTixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQy9ELElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ3pCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7YUFDN0M7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxlQUFlO1FBQ1osSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUdELGNBQWM7UUFDWixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsY0FBYztRQUNaLElBQUksS0FBSyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdkIsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUMxRSxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUMvRSxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUM7YUFDaks7aUJBQU07Z0JBQ0wsT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDO2FBQ3RMO1NBQ0Y7YUFBTTtZQUNMLE9BQU8sVUFBVSxDQUFDO1NBQ25CO0lBQ0gsQ0FBQztJQUNELGNBQWM7UUFDWixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDO0lBQzVELENBQUM7SUFDRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUNsQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ3JELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzVCLENBQUMsRUFBRSxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDakMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsYUFBYTtRQUNYLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNwRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztZQUM3QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM1QixDQUFDLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUNoQixJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQzFELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEdBQUcsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLElBQUksQ0FBQztZQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFLLEVBQUMsRUFBRSxDQUFDLENBQUEsQ0FBQyxhQUFELENBQUMsdUJBQUQsQ0FBQyxDQUFFLGFBQWEsTUFBSyxlQUFlLENBQUMsQ0FBQTtZQUM5RyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM1QixDQUFDLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUNoQixJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxVQUFVLENBQUMsMkJBQTJCLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNuRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztZQUMzQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkIsQ0FBQyxFQUFFLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDaEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUNqQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxhQUFhOztRQUNYLElBQUcsQ0FBQSxNQUFBLElBQUksQ0FBQyxpQkFBaUIsMENBQUUsSUFBSSxLQUFJLElBQUksQ0FBQyxVQUFVLEtBQUsscUJBQXFCLEVBQUM7WUFDM0UsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEdBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQSxDQUFDLENBQUEsRUFBRSxDQUFDO1lBQzlJLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLEVBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7U0FDOU07YUFBSyxJQUFHLENBQUEsTUFBQSxJQUFJLENBQUMsWUFBWSwwQ0FBRSxJQUFJLEtBQUksQ0FBQyxnQkFBZ0IsRUFBQyw4QkFBOEIsRUFBQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUM7WUFDbkksSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEdBQUcsQ0FBQSxNQUFBLElBQUksQ0FBQyxZQUFZLDBDQUFFLElBQUksRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBSyxFQUFFLEVBQUUsV0FBQyxPQUFBLENBQUMsQ0FBQyxLQUFLLE1BQUssTUFBQSxJQUFJLENBQUMsWUFBWSwwQ0FBRSxJQUFJLENBQUEsQ0FBQSxFQUFBLENBQUMsQ0FBQSxDQUFDLENBQUEsRUFBRSxDQUFDO1NBQ3RJO1FBRUQsSUFBRyxNQUFBLE1BQUEsSUFBSSxDQUFDLFlBQVksMENBQUUsT0FBTywwQ0FBRSxNQUFNLEVBQUM7WUFDcEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7U0FDN0I7YUFBSTtZQUNILElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1NBQzlCO1FBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5RUFBeUUsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtRQUM5RyxJQUFHLENBQUMsQ0FBQyxDQUFBLE1BQUEsSUFBSSxDQUFDLGlCQUFpQiwwQ0FBRSxJQUFJLE1BQUksTUFBQSxJQUFJLENBQUMsWUFBWSwwQ0FBRSxJQUFJLENBQUEsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUMsZ0JBQWdCLEVBQUMsOEJBQThCLEVBQUMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFDO1lBQ3hMLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1NBQ3hCO2FBQUk7WUFDSCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztTQUN6QjtJQUVILENBQUM7SUFFRCxpQkFBaUI7O1FBRWIsSUFBRyxDQUFDLDhCQUE4QixFQUFDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBQztZQUVqRixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQUEsSUFBSSxDQUFDLFlBQVksMENBQUUsVUFBVSxFQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUE7U0FDN0U7SUFDTCxDQUFDO0lBR0QsVUFBVSxDQUFDLE9BQVcsRUFBRSxJQUFXOztRQUNqQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLE1BQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFDLElBQUksQ0FBQywwQ0FBRSxTQUFTLENBQUMsQ0FBQyxJQUFRLEVBQUMsRUFBRTtZQUNsRSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUNuRSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsR0FBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFTLEVBQUUsS0FBUyxFQUFFLElBQVEsRUFBRSxFQUFFLENBQ3JHLEtBQUssS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUNsQyxDQUFDLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUMsUUFBUSxDQUMzRCxDQUFDLENBQ0gsQ0FBQTtZQUNLLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7WUFDbEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3JDLENBQUMsRUFBQyxDQUFDLEtBQVMsRUFBQyxFQUFFO1lBQ2QsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQTtJQUNMLENBQUM7SUFDRDs7O09BR0c7SUFDSCxrQkFBa0I7UUFDaEIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztTQUNuQzthQUFNO1lBQ0wsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQ25DLElBQUcsSUFBSSxDQUFDLElBQUksS0FBRyxNQUFNLEVBQUM7Z0JBQ3BCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2FBQzFCO1NBRUY7SUFDSCxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsV0FBVyxDQUFDLFFBQWdCO1FBQzFCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3JELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3ZDO0lBQ0gsQ0FBQztJQUNELGNBQWM7UUFDWixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQzlCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxpQkFBaUIsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFDRCxlQUFlLENBQUMsR0FBUTs7UUFDdEIsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNSLE9BQU87U0FDUjtRQUNELElBQUksTUFBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsSUFBSSwwQ0FBRSxFQUFFLEVBQUU7WUFDakIsSUFBSSxVQUFVLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUE7WUFDOUYsTUFBTSxTQUFTLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsSUFBSSwwQ0FBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwRCxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsSUFBSSwwQ0FBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLE1BQUEsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLElBQUksMENBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDeEQsTUFBTSxPQUFPLEdBQUcsR0FBRyxTQUFTLElBQUksVUFBVSxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQzFELElBQUksQ0FBQSxNQUFBLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxJQUFJLDBDQUFFLEVBQUUsT0FBSyxNQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSwwQ0FBRSxFQUFFLENBQUEsRUFBRTtnQkFDeEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDO2dCQUM1QyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7YUFDdkI7U0FDRjtRQUNELElBQUksTUFBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsSUFBSSwwQ0FBRSxFQUFFLEVBQUU7WUFDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEdBQUcsTUFBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsSUFBSSwwQ0FBRSxFQUFFLENBQUM7U0FDaEQ7UUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQy9CLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELHNCQUFzQixDQUFDLFdBQW1CLEVBQUUsY0FBdUI7UUFDakUsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ25GLE1BQU0sVUFBVSxHQUFHLENBQUMsVUFBVSxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQzNILElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUNwQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMvQjtJQUVILENBQUM7SUFFRCxlQUFlLENBQUMsSUFBUztRQUN2QixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsY0FBYyxDQUFDLEdBQVEsRUFBRSxJQUFTOztRQUNoQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUN0QixRQUFRLElBQUksRUFBRTtZQUNaLEtBQUssZ0JBQWdCLENBQUMsQ0FBQztnQkFDckIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDLENBQUM7Z0JBQ2pHLE9BQU8sQ0FBQyxHQUFHLENBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDM0IsSUFBSSxDQUFBLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxNQUFNLElBQUcsQ0FBQyxFQUFFO29CQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUE7aUJBQUU7Z0JBQzFELElBQUcsTUFBQSxNQUFBLE1BQUEsSUFBSSxDQUFDLFlBQVksMENBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQywwQ0FBRSxXQUFXLDBDQUFFLE1BQU0sRUFBQztvQkFDMUQsTUFBTSxHQUFHLEdBQU8sRUFBRSxDQUFBO29CQUNsQixNQUFBLE1BQUEsSUFBSSxDQUFDLFlBQVksMENBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQywwQ0FBRSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBVyxFQUFFLEVBQUU7d0JBQ2xFLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBQyxJQUFJLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFBO29CQUN6QyxDQUFDLENBQUMsQ0FBQztvQkFDSCxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsR0FBRyxHQUFHLENBQUM7aUJBQ3hDO3FCQUFJO29CQUNILElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztpQkFDdkM7Z0JBQ0QsTUFBTTthQUNQO1lBQ0QsK0ZBQStGO1lBQy9GLEtBQUssVUFBVSxDQUFDLENBQUM7Z0JBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUE7Z0JBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUMvRSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMzQixJQUFJLENBQUEsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLE1BQU0sSUFBRyxDQUFDLEVBQUU7b0JBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQTtpQkFBRTtnQkFDcEQsTUFBTTthQUNQO1lBQ0QsS0FBSyxXQUFXLENBQUMsQ0FBQztnQkFDaEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7Z0JBQ3pGLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzNCLElBQUksQ0FBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsTUFBTSxJQUFHLENBQUMsRUFBRTtvQkFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFBO2lCQUFFO2dCQUN0RCxNQUFNO2FBQ1A7WUFDRCxLQUFLLFlBQVksQ0FBQyxDQUFDO2dCQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDM0YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDM0IsTUFBTTthQUNQO1lBQ0QsS0FBSyxVQUFVLENBQUMsQ0FBQztnQkFDZixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUMvRixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMzQixNQUFNO2FBQ1A7WUFDRCxLQUFLLFdBQVcsQ0FBQyxDQUFDO2dCQUNoQixJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUNqRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMzQixNQUFNO2FBQ1A7WUFFRCxLQUFLLG9CQUFvQjtnQkFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDL0YsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEdBQUksTUFBQSxNQUFBLElBQUksQ0FBQyxZQUFZLDBDQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQywwQ0FBRSxRQUFRLENBQUM7Z0JBQ25GLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzNCLE1BQU07U0FDVDtRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBUyxFQUFFLE9BQVk7UUFDaEMsUUFBUSxJQUFJLEVBQUU7WUFDWixLQUFLLGdCQUFnQixDQUFDLENBQUM7Z0JBQ3JCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsS0FBSyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3JILElBQUksU0FBUyxLQUFLLENBQUMsQ0FBQyxFQUFFO29CQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQUU7Z0JBQy9FLE1BQU07YUFDUDtZQUNELEtBQUssVUFBVSxDQUFDLENBQUM7Z0JBQ2YsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkcsSUFBSSxTQUFTLEtBQUssQ0FBQyxDQUFDLEVBQUU7b0JBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFBRTtnQkFDekUsTUFBTTthQUNQO1lBQ0QsS0FBSyxXQUFXLENBQUMsQ0FBQztnQkFDaEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxLQUFLLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDakgsSUFBSSxTQUFTLEtBQUssQ0FBQyxDQUFDLEVBQUU7b0JBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFBRTtnQkFDM0UsTUFBTTthQUNQO1lBQ0QsS0FBSyxZQUFZLENBQUMsQ0FBQztnQkFDakIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDM0csSUFBSSxTQUFTLEtBQUssQ0FBQyxDQUFDLEVBQUU7b0JBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFBRTtnQkFDM0UsTUFBTTthQUNQO1lBQ0QsS0FBSyxVQUFVLENBQUMsQ0FBQztnQkFDZixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLEtBQUssT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUMxSCxJQUFJLFNBQVMsS0FBSyxDQUFDLENBQUMsRUFBRTtvQkFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUFFO2dCQUM5RSxNQUFNO2FBQ1A7WUFDRCxLQUFLLFdBQVcsQ0FBQyxDQUFDO2dCQUNoQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLEtBQUssT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUM1SCxJQUFJLFNBQVMsS0FBSyxDQUFDLENBQUMsRUFBRTtvQkFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUFFO2dCQUNoRixNQUFNO2FBQ1A7WUFDRCxLQUFLLG9CQUFvQjtnQkFDdkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMvRyxJQUFJLFNBQVMsS0FBSyxDQUFDLENBQUMsRUFBRTtvQkFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQUU7Z0JBQ25GLE1BQU07U0FDVDtJQUNILENBQUM7SUFDRCxZQUFZLENBQUMsS0FBVTtRQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQzdCLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUVuQyxDQUFDO0lBQ0QsWUFBWSxDQUFDLElBQVMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25FLFdBQVcsQ0FBQyxJQUFTLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRXJFLFdBQVcsQ0FBQyxLQUFVO1FBQ3BCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUN4RCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztJQUM3QixDQUFDO0lBQ0QsU0FBUyxDQUFDLGFBQWtCLEVBQUUsU0FBYyxFQUFFLFNBQWM7UUFDMUQsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDO1FBQy9CLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQztRQUN2QixNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUM7UUFDdEIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQU8sRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9ELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUNILGlFQUFpRTtJQUNoRSxVQUFVLENBQUMsSUFBVyxFQUFDLEtBQVM7O1FBQy9CLFFBQVEsSUFBSSxFQUFFO1lBQ1osS0FBSyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUN4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQzFDLE1BQU0sSUFBSSxHQUFHLE1BQUEsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLG1DQUFJLEVBQUUsQ0FBQztvQkFDdEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ25DLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBQyxJQUFJLENBQUMsQ0FBQztpQkFDckM7Z0JBQ0MsTUFBTTthQUNKO1lBQ04sS0FBSyxxQkFBcUIsQ0FBQyxDQUFBO2dCQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQzFDLE1BQU0sSUFBSSxHQUFHLE1BQUEsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLG1DQUFJLEVBQUUsQ0FBQztvQkFDdEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ25DLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBQyxJQUFJLENBQUMsQ0FBQztpQkFDckM7Z0JBQ0QsTUFBTTthQUNQO1lBQ0QsS0FBSyxrQkFBa0IsQ0FBQyxDQUFBO2dCQUN0QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQzFDLE1BQU0sSUFBSSxHQUFHLE1BQUEsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLG1DQUFJLEVBQUUsQ0FBQztvQkFDdEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ25DLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBQyxJQUFJLENBQUMsQ0FBQztpQkFDckM7Z0JBQ0YsTUFBTTthQUNOO1NBQ0g7SUFDRixDQUFDO0lBR0MsVUFBVSxDQUFDLElBQVMsRUFBQyxJQUFXO1FBQzlCLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBRTtRQUNwQixRQUFPLElBQUksRUFBQztZQUNWLEtBQUssbUJBQW1CLENBQUMsQ0FBQTtnQkFDdkIsVUFBVSxHQUFHLENBQUMsQ0FBQztnQkFDZixNQUFNO2FBQ1A7WUFDRCxLQUFLLHFCQUFxQixDQUFDLENBQUE7Z0JBQ3pCLFVBQVUsR0FBRyxDQUFDLENBQUM7Z0JBQ2YsTUFBTTthQUNQO1lBQ0QsS0FBSyxrQkFBa0IsQ0FBQyxDQUFBO2dCQUN0QixVQUFVLEdBQUcsQ0FBQyxDQUFDO2dCQUNmLE1BQU07YUFDUDtTQUNGO1FBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNoQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM5QixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMxRSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLEdBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUNwRSxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBRVgsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLElBQUksQ0FBQyxDQUFDO1lBQ25FLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUNoQixJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDbkQ7WUFFRCxRQUFPLElBQUksRUFBQztnQkFDVixLQUFLLG1CQUFtQixDQUFDLENBQUE7b0JBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN6RCxNQUFNO2lCQUNQO2dCQUNELEtBQUsscUJBQXFCLENBQUMsQ0FBQTtvQkFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzFELE1BQU07aUJBQ1A7Z0JBQ0QsS0FBSyxrQkFBa0IsQ0FBQyxDQUFBO29CQUN0QixJQUFJLENBQUMsWUFBWSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDdkQsTUFBTTtpQkFDUDthQUNGO1FBQ0gsQ0FBQyxFQUNELENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDUixNQUFNLEtBQUssR0FBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkUsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNuRDtRQUVILENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFTLEVBQUMsSUFBVzs7UUFDOUIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbkIsUUFBTyxJQUFJLEVBQUM7WUFDVixLQUFLLG1CQUFtQixDQUFDLENBQUE7Z0JBQ3ZCLFNBQVMsR0FBRyxNQUFBLE1BQUEsSUFBSSxDQUFDLFlBQVksQ0FBQyw0QkFBNEIsMENBQUUsU0FBUyxDQUFDLENBQUMsWUFBaUIsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLG1DQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUM1SSxNQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsNEJBQTRCLDBDQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JFLE1BQU07YUFDUDtZQUNELEtBQUsscUJBQXFCLENBQUMsQ0FBQTtnQkFDekIsU0FBUyxHQUFHLE1BQUEsTUFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLDZCQUE2QiwwQ0FBRSxTQUFTLENBQUMsQ0FBQyxZQUFpQixFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsbUNBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQzdJLE1BQUEsSUFBSSxDQUFDLFlBQVksQ0FBQyw2QkFBNkIsMENBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDdEUsTUFBTTthQUNQO1lBQ0QsS0FBSyxrQkFBa0IsQ0FBQyxDQUFBO2dCQUN0QixTQUFTLEdBQUcsTUFBQSxNQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsMEJBQTBCLDBDQUFFLFNBQVMsQ0FBQyxDQUFDLFlBQWlCLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQ0FBSSxDQUFDLENBQUMsQ0FBQztnQkFDMUksTUFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLDBCQUEwQiwwQ0FBRSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNuRSxNQUFNO2FBQ1A7U0FDRjtJQUNILENBQUM7SUFPRixRQUFROztRQUNOLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDMUMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUM7WUFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNoSDtRQUVELElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzFGLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3BDLE9BQU87U0FDUjtRQUNBLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUVsRixJQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFDO1lBQzFCLE9BQU8sQ0FBQyxjQUFjLEdBQUcsRUFBRSxNQUFNLEVBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUMsQ0FBQztZQUM3RyxJQUFJLElBQUksQ0FBRSxVQUFVLEtBQUsscUJBQXFCLEtBQUksTUFBQSxJQUFJLENBQUMsaUJBQWlCLDBDQUFFLGdCQUFnQixDQUFBLEVBQUM7Z0JBQ3pGLE9BQU8sQ0FBQyxjQUFjLEdBQUcsRUFBRSxTQUFTLEVBQUcsTUFBQSxJQUFJLENBQUMsaUJBQWlCLDBDQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRyxNQUFNLEVBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFBLElBQUksQ0FBQyxpQkFBaUIsMENBQUUsc0JBQXNCLEVBQUUsQ0FBRTthQUN4TTtZQUNELElBQUcsQ0FBQyw4QkFBOEIsRUFBQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUM7Z0JBQzVFLElBQUcsQ0FBQSxNQUFBLElBQUksQ0FBQyxZQUFZLDBDQUFFLFdBQVcsS0FBSSxDQUFBLE1BQUEsSUFBSSxDQUFDLFlBQVksMENBQUUsaUJBQWlCLENBQUMsTUFBTSxJQUFHLENBQUMsRUFBQztvQkFDbkYsSUFBRyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFBLElBQUksQ0FBQyxZQUFZLDBDQUFFLFdBQVcsQ0FBQyxFQUFDO3dCQUNyRSxPQUFPLENBQUMsY0FBYyxDQUFDLFNBQVMsR0FBRyxNQUFBLE1BQUEsSUFBSSxDQUFDLFlBQVksMENBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLDBDQUFFLE1BQU0sQ0FBQztxQkFDcEY7aUJBQ0Y7YUFDUDtZQUNELElBQUcsQ0FBQyxnQkFBZ0IsRUFBQyw4QkFBOEIsRUFBQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUM7Z0JBQ2pHLElBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUM7b0JBQy9CLE9BQU8sQ0FBQyxjQUFjLENBQUMsU0FBUyxHQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDO2lCQUNuRTthQUNIO1NBQ0Q7UUFFRCxJQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFDO1lBQ3RCLE9BQU8sQ0FBQyxZQUFZLEdBQUcsTUFBQSxJQUFJLENBQUMsV0FBVywwQ0FBRSxjQUFjLENBQUM7U0FDekQ7UUFDQSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUE7UUFDbEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDbkMsSUFBRyxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBQztZQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUN2RSxJQUFJLENBQUMsYUFBYSxHQUFHLDZCQUE2QixDQUFDO2dCQUNuRCxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztnQkFDckIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztnQkFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQTtnQkFDbEMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3pCLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRTtnQkFDVCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztnQkFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO2dCQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxrR0FBa0csQ0FBQyxDQUFDO1lBQ3pILENBQUMsQ0FBQyxDQUFDO1NBQ0Y7YUFBSyxJQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBQztZQUNqRSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDMUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2dCQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO2dCQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN6QixDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztnQkFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0dBQWtHLENBQUMsQ0FBQztZQUN6SCxDQUFDLENBQUMsQ0FBQztTQUNGO0lBRUgsQ0FBQztJQUNELFdBQVcsQ0FBQyxHQUFTO1FBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUNyQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUNGOzs7O09BSUc7SUFDSCxhQUFhLENBQUMsR0FBUSxFQUFFLE9BQVc7UUFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBQyxHQUFHLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQ0QsTUFBTSxDQUFDLEdBQVE7UUFDYixJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUM7WUFDckIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUNyQyw2Q0FBNkM7U0FDOUM7YUFDSSxJQUFHLEdBQUcsS0FBSyxXQUFXLEVBQUM7WUFDMUIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ2xCO0lBRUEsQ0FBQztJQUVELFNBQVM7O1FBQ1IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxJQUFJLEdBQVcsQ0FBQztRQUNoQixJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUNoRCxHQUFHLEdBQUcsU0FBUyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1NBQ3hDO2FBQU07WUFDTCxHQUFHLEdBQUcsVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1NBQ3pDO1FBRUQsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDaEQsR0FBRyxJQUFJLHdCQUF3QixJQUFHLE1BQUEsSUFBSSxDQUFDLFNBQVMsMENBQUUsR0FBRyxDQUFBLENBQUM7U0FDdkQ7YUFBTTtZQUNMLEdBQUcsSUFBSSw4QkFBOEIsSUFBRyxNQUFBLElBQUksQ0FBQyxTQUFTLDBDQUFFLEdBQUcsQ0FBQSxDQUFDO1NBQzdEO1FBQ0QsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0lBQzdCLENBQUM7SUFFTjs7T0FFRztJQUNILHNCQUFzQjtRQUNwQixNQUFNLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUM1QixLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUM7WUFDekQsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFDO2dCQUM1QyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDNUI7U0FDRjtRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUNEOztPQUVHO0lBQ0gsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFRLEVBQUMsRUFBRTtZQUNsRSxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBQyxJQUFJLENBQUMsQ0FBQTtZQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3pCLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUNEOzs7T0FHRztJQUNHLFlBQVksQ0FBQyxTQUFlOzs7WUFDaEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7WUFDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQ25DLE1BQU0sWUFBWSxHQUFHLE1BQUEsU0FBUyxDQUFDLGlCQUFpQiwwQ0FBRSxjQUFjLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVFLElBQUksQ0FBQyxZQUFZLEdBQUc7Z0JBQ2xCLFNBQVMsRUFBRyxNQUFBLFNBQVMsQ0FBQyxLQUFLLG1DQUFJLEVBQUU7Z0JBQ2pDLGdCQUFnQixFQUFFLE1BQUEsTUFBQSxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsUUFBUSwwQ0FBRSxhQUFhLG1DQUFFLENBQUM7Z0JBQ3ZELGdCQUFnQixFQUFFLENBQUEsTUFBQSxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsV0FBVywwQ0FBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDLE1BQUEsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsMENBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQSxFQUFFO2dCQUN0Riw0QkFBNEIsRUFBRSxDQUFBLE1BQUEsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLFdBQVcsMENBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQyxNQUFBLFNBQVMsYUFBVCxTQUFTLHVCQUFULFNBQVMsQ0FBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLDBDQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUEsRUFBRTtnQkFDekcsYUFBYSxFQUFFLENBQUEsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLFdBQVcsRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxNQUFLLFNBQVMsYUFBVCxTQUFTLHVCQUFULFNBQVMsQ0FBRSxXQUFXLENBQUEsQ0FBQyxDQUFBLENBQUMsQ0FBQSxFQUFFO2dCQUNqSSxjQUFjLEVBQUcsTUFBQSxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsV0FBVyxtQ0FBSSxFQUFFO2dCQUM3QyxPQUFPLEVBQUUsQ0FBQSxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQUssU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLEtBQUssQ0FBQSxDQUFDLENBQUEsQ0FBQyxDQUFBLEVBQUU7Z0JBQ25HLFNBQVMsRUFBRSxFQUFFO2dCQUNiLDZCQUE2QixFQUFDLENBQUEsTUFBQSxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsY0FBYywwQ0FBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDLE1BQUEsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsMENBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQSxFQUFFO2dCQUMvRywwQkFBMEIsRUFBQyxFQUFFO2dCQUM3QixnQkFBZ0IsRUFBSSxDQUFBLFNBQVMsYUFBVCxTQUFTLHVCQUFULFNBQVMsQ0FBRSxXQUFXLE1BQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSztnQkFDbEYsU0FBUyxFQUFFLENBQUEsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLFdBQVcsTUFBSyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLE1BQUssU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLFdBQVcsQ0FBQSxDQUFFO2dCQUNwSixZQUFZLEVBQUUsQ0FBQSxNQUFBLFNBQVMsYUFBVCxTQUFTLHVCQUFULFNBQVMsQ0FBRSxpQkFBaUIsMENBQUUsY0FBYyxFQUFBLENBQUMsQ0FBRSxNQUFNLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUEsQ0FBQyxDQUFBLEVBQUU7Z0JBQ2xJLFlBQVksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUM7Z0JBQ2pHLGFBQWEsRUFBRSxNQUFBLFNBQVMsQ0FBQyxjQUFjLG1DQUFJLENBQUM7Z0JBQzVDLGVBQWUsRUFBRSxNQUFBLFNBQVMsQ0FBQyxVQUFVLG1DQUFJLENBQUM7Z0JBQzFDLGFBQWEsRUFBRSxNQUFBLFNBQVMsQ0FBQyxRQUFRLG1DQUFJLENBQUM7Z0JBQ3RDLG1CQUFtQixFQUFFLENBQUEsTUFBQSxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsY0FBYywwQ0FBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDLE1BQUEsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsMENBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQSxFQUFFO2dCQUMvRixtQkFBbUIsRUFBRSxDQUFBLE1BQUEsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLGVBQWUsMENBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQyxNQUFBLFNBQVMsYUFBVCxTQUFTLHVCQUFULFNBQVMsQ0FBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLDBDQUFFLElBQUksQ0FBQyxDQUFDLENBQUEsRUFBRTtnQkFDakcsWUFBWSxFQUFFLENBQUEsTUFBQSxTQUFTLENBQUMsUUFBUSwwQ0FBRSxRQUFRLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBQyxNQUFBLFNBQVMsQ0FBQyxRQUFRLDBDQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQSxFQUFFO2dCQUM1SSxjQUFjLEVBQUUsQ0FBQSxNQUFBLFNBQVMsQ0FBQyxRQUFRLDBDQUFFLGdCQUFnQixDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUMsTUFBQSxTQUFTLENBQUMsUUFBUSwwQ0FBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQSxFQUFFO2dCQUM5SixpQkFBaUIsRUFBQyxFQUFFO2dCQUNwQixXQUFXLEVBQUcsZ0JBQWdCO2FBQy9CLENBQUM7WUFDRixPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUE7WUFDM0MsSUFBRyxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBQztnQkFDdEIsQ0FBQSxNQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTywwQ0FBRSxNQUFNLElBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQ25HLHlHQUF5RztnQkFDekcsQ0FBQyxDQUFBLE1BQUEsU0FBUyxDQUFDLGNBQWMsMENBQUUsTUFBTSxNQUFLLFFBQVEsS0FBSSxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsS0FBSyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO2dCQUNqSSx5REFBeUQ7Z0JBQ3pELHlGQUF5RjtnQkFDekYscURBQXFEO2dCQUNyRCxzQ0FBc0M7Z0JBQ3RDLElBQUk7Z0JBQ0osbURBQW1EO2dCQUNuRCxtRkFBbUY7Z0JBQ25GLDRDQUE0QztnQkFDNUMsc0NBQXNDO2dCQUN0QyxJQUFJO2FBQ0w7WUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7O0tBQ2xDO0lBQ0Q7OztPQUdHO0lBQ0gsZ0JBQWdCLENBQUMsU0FBYTtRQUM1QixJQUFJLENBQUMsc0JBQXNCLEdBQUc7WUFDNUIsY0FBYyxFQUFFLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSztZQUN2RCxRQUFRLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUEsS0FBSztZQUN4RCxRQUFRLEVBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLO1lBQzVDLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLGdCQUFnQixFQUFHLFNBQVMsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQSxDQUFDLENBQUEsS0FBSztZQUNySCxTQUFTLEVBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUs7U0FDdEgsQ0FBQztRQUNGLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFDRDs7Ozs7T0FLRztJQUNILG9CQUFvQixDQUFDLFdBQWUsRUFBRSxZQUFnQjtRQUNyRCxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFRLEVBQUMsRUFBRTtZQUNqQyxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBVyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM3RixJQUFHLFNBQVMsRUFBQztnQkFDWCxPQUFPLFNBQVMsQ0FBQzthQUNsQjtRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUNEOztPQUVHO0lBQ0gsY0FBYztRQUNYLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzdCLElBQUksQ0FBQyxZQUFZLEdBQUc7WUFDbEIsU0FBUyxFQUFHLEVBQUU7WUFDZCxnQkFBZ0IsRUFBRSxDQUFDO1lBQ25CLGdCQUFnQixFQUFFLEVBQUU7WUFDcEIsNEJBQTRCLEVBQUUsRUFBRTtZQUNoQyw2QkFBNkIsRUFBQyxFQUFFO1lBQ2hDLDBCQUEwQixFQUFDLEVBQUU7WUFDN0IsYUFBYSxFQUFFLEVBQUU7WUFDakIsY0FBYyxFQUFHLEVBQUU7WUFDbkIsT0FBTyxFQUFFLEVBQUU7WUFDWCxTQUFTLEVBQUUsRUFBRTtZQUNiLGdCQUFnQixFQUFHLEtBQUs7WUFDeEIsU0FBUyxFQUFFLEVBQUU7WUFDYixZQUFZLEVBQUUsRUFBRTtZQUNoQixZQUFZLEVBQUUsVUFBVTtZQUN4QixhQUFhLEVBQUUsQ0FBQztZQUNoQixlQUFlLEVBQUUsQ0FBQztZQUNsQixhQUFhLEVBQUUsQ0FBQztZQUNoQixtQkFBbUIsRUFBRSxFQUFFO1lBQ3ZCLG1CQUFtQixFQUFFLEVBQUU7WUFDdkIsWUFBWSxFQUFFLEVBQUU7WUFDaEIsY0FBYyxFQUFFLEVBQUU7U0FDbkIsQ0FBQztRQUNGLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsRUFBQztZQUN4RCxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1NBQzNDO1FBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyw4QkFBOEIsQ0FBQztRQUNwRCxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQztRQUNyQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFDRCxnQkFBZ0I7UUFDZixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLElBQUksTUFBTSxFQUFFO1lBQ2hELElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1NBQ3pDO1FBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixJQUFJLE1BQU0sRUFBRTtZQUNuRCxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztTQUM1QztRQUNELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsSUFBSSxNQUFNLEVBQUU7WUFDbkQsSUFBSSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUM7U0FDNUM7SUFDSCxDQUFDOzs7WUEvMkJBLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsa0JBQWtCO2dCQUM1QiwrbjJDQUE0Qzs7YUFFN0M7OztZQWZRLGVBQWU7WUFEZixXQUFXO1lBTVgsWUFBWTtZQUNaLGVBQWU7Ozt5QkFXckIsS0FBSztzQkFDTCxLQUFLO2dDQUNMLEtBQUs7MkJBTUwsS0FBSzttQkFNTCxLQUFLO3FCQUNMLEtBQUs7bUNBQ0wsS0FBSzs0QkFDTCxNQUFNOzZCQUNOLE1BQU07NEJBQ04sTUFBTTt5QkFDTixNQUFNO2dDQUNOLE1BQU07eUJBRU4sU0FBUyxTQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMb2dJc3N1ZVNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9sb2ctaXNzdWUuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEVkaXRvckNvbmZpZyB9IGZyb20gJ3Zjb21wbHktZWRpdG9yJztcclxuaW1wb3J0IHsgRGF0ZVBpY2tlckNvbXBvbmVudCB9IGZyb20gJ25nMi1kYXRlLXBpY2tlcic7XHJcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCB7IFVpS2l0U2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL3VpLWtpdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU25hY2tCYXJTZXJ2aWNlIH0gZnJvbSAnLi4vdWkta2l0L3NuYWNrLWJhci9zbmFjay1iYXIuc2VydmljZSc7XHJcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBJc3N1ZUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL2lzc3VlLWRhdGEnO1xyXG5pbXBvcnQgeyBUSElTX0VYUFIgfSBmcm9tICdAYW5ndWxhci9jb21waWxlci9zcmMvb3V0cHV0L291dHB1dF9hc3QnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtbG9nLWFuLWlzc3VlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbG9nLWFuLWlzc3VlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9sb2ctYW4taXNzdWUuY29tcG9uZW50Lmxlc3MnLCAnLi4vZm9ybXMubGVzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMb2dBbklzc3VlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xyXG4gIEBJbnB1dCgpIG9wZW5lZEZyb20gITogYW55O1xyXG4gIEBJbnB1dCgpIGlzc3VlSWQgITogYW55O1xyXG4gIEBJbnB1dCgpIHJlcG9uc2liaWxpdHlEYXRhID0geyAvLyBvbmx5IHVzZWQgYnkgbG9nIGFuIGlzc3VlXHJcbiAgICByZXNwb25zaWJpbGl0eUlkOiBudWxsLFxyXG4gICAgcmVzcG9uc2liaWxpdHlOYW1lOiAnJyxcclxuICAgIHJjSWQ6bnVsbCxcclxuICAgIHJlc3BvbnNpYmlsaXR5T2JqZWN0SWQ6ICcnXHJcbiAgfTtcclxuICBASW5wdXQoKSBpc3N1ZURldGFpbHMgPXtcclxuICAgIGF1ZGl0UGxhbklkIDogbnVsbCxcclxuICAgICAgYXVkaXRQbGFuTmFtZSAgOicnLFxyXG4gICAgICByY0lkOiBudWxsLFxyXG4gICAgICBhdWRpdE9iaklkOm51bGxcclxuICB9XHJcbiAgQElucHV0KCkgbW9kZSA9ICdDUkVBVEUnO1xyXG4gIEBJbnB1dCgpIGNvbmZpZyAhOiBJc3N1ZUNvbmZpZ3VyYXRpb247XHJcbiAgQElucHV0KCkgcmVzcG9uc2liaWxpdGllc0RhdGE6IGFueTtcclxuICBAT3V0cHV0KCkgcGlja2VyQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcG9wdWxhdGVPcHRpb24gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNsb3NlV29ya2Zsb3cgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG1vZGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGRpc2Nvbm5lY3RSZWZyZXNoID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIGN1cnJlbnRVc2VyICE6IGFueTtcclxuICBAVmlld0NoaWxkKCdkYXRlUGlja2VyJykgZGF0ZVBpY2tlciE6IERhdGVQaWNrZXJDb21wb25lbnQ7XHJcbiAgc2Nyb2xsVG9Cb3R0b20gPSBmYWxzZTtcclxuICBkYXRlUGlja2VyT3ZlcmxheSA9IGZhbHNlO1xyXG4gIHNob3dEYXRlRXJyb3IgPSBmYWxzZTtcclxuICBzZWxlY3RlZERhdGU6IGFueTtcclxuICBzaG93U21pbGV5ID0gZmFsc2U7XHJcbiAgbG9hZGVyID0gZmFsc2U7XHJcbiAgc21pbGV5TWVzc2FnZSA9IGBUaGUgaXNzdWUgaGFzIGJlZW4gcmVwb3J0ZWQuYDtcclxuICBpc3N1ZURhdGEgITogYW55O1xyXG4gIGlzUmlza0NvbnRyb2xMb2FkaW5nID0gZmFsc2U7XHJcbiAgYWN0aW9uQnV0dG9ucyA9IFtcclxuICAgIHsgYnV0dG9uVGV4dDogJ1JlcG9ydCBNb3JlIElzc3VlcycsIGNsYXNzOiAnd2hpdGUtYnRuJywgaWQ6ICdhZGRNb3JlJyB9LFxyXG4gICAgeyBidXR0b25UZXh0OiAnVmlldyBJc3N1ZScsIGNsYXNzOiAnYmx1ZS1idG4nLCBpZDogJ3ZpZXdJc3N1ZScgfSxcclxuICBdO1xyXG4gIGNyZWF0ZWREYXRhICE6IGFueTtcclxuICBkZXNjcmlwdGlvbjogRWRpdG9yQ29uZmlnID0ge1xyXG4gICAgLy8gbW9kZTogJ3ByaW1lJyxcclxuICAgIGNvbG9yUGFsZXR0ZTogdHJ1ZSxcclxuICAgIGxpbms6IHRydWUsXHJcbiAgICBwbGFjZWhvbGRlcjogJ0Rlc2NyaXB0aW9uJyxcclxuICB9O1xyXG5cclxuICBkYXRlQ29uZmlnID0ge1xyXG4gICAgZGlzYWJsZUtleXByZXNzOiB0cnVlLFxyXG4gICAgZm9ybWF0OiAnREQgTU1NIFlZWVknLFxyXG4gICAgdW5TZWxlY3RPbkNsaWNrOiB0cnVlLFxyXG4gICAgb3Blbk9uQ2xpY2s6ZmFsc2UsXHJcbiAgICBvcGVuT25Gb2N1czpmYWxzZSxcclxuICAgIG1pbjogbmV3IERhdGUoKS5nZXREYXRlKCkudG9TdHJpbmcoKSxcclxuICB9O1xyXG4gIGxpc3REYXRhOmFueSA9IHtcclxuICAgIGlzc3VlVHlwZUxpc3Q6IFtdLFxyXG4gICAgdXNlckxpc3Q6IFtdLFxyXG4gICAgY2F0ZWdvcnlMaXN0OiBbXSxcclxuICAgIHJjTGlzdDogW10sXHJcbiAgICBsaW5rYWdlTGlzdDpbXVxyXG4gIH07XHJcbiAgbG9nSXNzdWVGb3JtOiBhbnkgPSB7XHJcbiAgICBpc3N1ZU5hbWU6ICcnLFxyXG4gICAgZXZpZGVuY2VSZXF1aXJlZDogMCxcclxuICAgIGlzc3VlRGVzY3JpcHRpb246ICcnLFxyXG4gICAgaXNzdWVEZXNjcmlwdGlvbkF0dGFjaGVtZW50czogW10sXHJcbiAgICBpc3N1ZUNhdGVnb3J5OiBbXSxcclxuICAgIGlzc3VlQ3VzdG9tVGFnOiBbXSxcclxuICAgIGlzc3VlUkM6IFtdLFxyXG4gICAgaXNzdWVUeXBlOiBbXSxcclxuICAgIGlzQXNzaWduVG9NeXNlbGY6IGZhbHNlLFxyXG4gICAgZW50cnVzdFRvOiBbXSxcclxuICAgIGlzc3VlRHVlRGF0ZTogJycsXHJcbiAgICBpc3N1ZUR1ZVRpbWU6ICcxMTo1OSBwbScsXHJcbiAgICBleGNlcHRpb25UeXBlOiAxLFxyXG4gICAgaXNzdWVSaXNrUmF0aW5nOiAxLFxyXG4gICAgaXNzdWVQcmlvcml0eTogMSxcclxuICAgIGlzc3VlUmVjb21tZW5kYXRpb246ICcnLFxyXG4gICAgcmVjb21tZW5kZWRBY3Rpb25zQXR0YWNobWVudHM6W10sXHJcbiAgICBpc3N1ZUFzc29jaWF0ZWRSaXNrOiAnJyxcclxuICAgIGFzc29jaWF0ZWRSaXNrc0F0dGFjaG1lbnRzOltdLFxyXG4gICAgaXNzdWVDQ1VzZXJzOiBbXSxcclxuICAgIGZhaWx1cmVDQ1VzZXJzOiBbXSxcclxuICAgIGxpbmtlZENvbnRyb2xSaXNrOltdLFxyXG4gICAgbGlua2FnZVR5cGUgOiAnUklTSydcclxuXHJcbiAgfTtcclxuICBBdHRhY2htZW50VHJhY2s6IGFueSA9IFtbXSxbXSxbXV07XHJcbiAgYWRkaXRpb25hbE9wdGlvblN0YXR1czogYW55ID0ge1xyXG4gICAgRVhDRVBUSU9OX1RZUEU6IGZhbHNlLFxyXG4gICAgRVZJREVOQ0U6IGZhbHNlLFxyXG4gICAgUFJJT1JJVFk6IGZhbHNlLFxyXG4gICAgSVNTVUVfVFlQRTogZmFsc2UsXHJcbiAgICBBU1NPQ0lBVEVEX1JJU0tTOiBmYWxzZSxcclxuICAgIE9WRVJTSUdIVDogZmFsc2VcclxuICB9O1xyXG4gIHJpc2tDbGFzc2lmaWNhdGlvbiA9IFtcclxuICAgIHsgbmFtZTogJ0xPVycsIHZhbHVlOiAxLCBjbGFzczogJ2xvdycgfSxcclxuICAgIHsgbmFtZTogJ0xPVy1NZWRpdW0nLCB2YWx1ZTogMiwgY2xhc3M6ICdsb3ctbWVkJyB9LFxyXG4gICAgeyBuYW1lOiAnTWVkaXVtLUhpZ2gnLCB2YWx1ZTogMywgY2xhc3M6ICdtZWQtaGlnaCcgfSxcclxuICAgIHsgbmFtZTogJ0hpZ2gnLCB2YWx1ZTogNCwgY2xhc3M6ICdoaWdoJyB9XHJcbiAgXTtcclxuICByaXNrUHJvcml0eSA9IFtcclxuICAgIHsgbmFtZTogJ0xPVycsIHZhbHVlOiAxLCBjbGFzczogJ2xvdycgfSxcclxuICAgIHsgbmFtZTogJ01FRElVTScsIHZhbHVlOiAyLCBjbGFzczogJ2xvdy1tZWQnIH0sXHJcbiAgICB7IG5hbWU6ICdISUdIJywgdmFsdWU6IDMsIGNsYXNzOiAnaGlnaCcgfSxcclxuXHJcbiAgXTtcclxuXHJcbiAgc2lkZVNlbGVjdG9yRWxlbWVudHM6IGFueSA9IFsnSVNTVUVfQ0FURUdPUlknLCAnSVNTVUVfUkMnLCAnSVNTVUVfV0hPJywgJ0lTU1VFX1RZUEUnLCAnSVNTVUVfQ0MnLCAnSVNTVUVfRkNDJywnSVNTVUVfQ09OVFJPTF9SSVNLJ107XHJcbiAgc2VsZWN0b3JDb25maWcgPSB7XHJcbiAgICBJU1NVRV9DQVRHT1JZOiB7XHJcbiAgICAgIHBhbmVsVGl0bGU6ICdTZWxlY3QgSXNzdWUgQ2F0ZWdvcnknLFxyXG4gICAgICBmbG9hdGluZ1RleHRTaW5ndWxhcjogJ0NhdGVnb3J5IHNlbGVjdGVkJyxcclxuICAgICAgc2VhcmNoUGxhY2Vob2xkZXI6ICdTZWFyY2ggSXNzdWUgQ2F0ZWdvcnknLFxyXG4gICAgICBzZWFyY2hFbmFibGVkOiB0cnVlLFxyXG4gICAgICBub0RhdGFUZXh0OiAnTm8gQ2F0ZWdvcmllcyBGb3VuZCdcclxuICAgIH0sXHJcbiAgICBJU1NVRV9SQzoge1xyXG4gICAgICBwYW5lbFRpdGxlOiAnU2VsZWN0IFJlc3BvbnNpYmlsaXR5IENlbnRlcicsXHJcbiAgICAgIGZsb2F0aW5nVGV4dFNpbmd1bGFyOiAnUmVzcG9uc2liaWx0eSBjZW50ZXIgc2VsZWN0ZWQnLFxyXG4gICAgICBzZWFyY2hQbGFjZWhvbGRlcjogJ1NlYXJjaCBSZXNwb25zaWJpbGl0eSBDZW50ZXInLFxyXG4gICAgICBzZWFyY2hFbmFibGVkOiB0cnVlLFxyXG4gICAgICBub0RhdGFUZXh0OiAnTm8gUmVzcG9uc2liaWxpdHkgQ2VudGVycyBGb3VuZCdcclxuICAgIH0sXHJcbiAgICBJU1NVRV9XSE86IHtcclxuICAgICAgcGFuZWxUaXRsZTogJ1NlbGVjdCBVc2VyJyxcclxuICAgICAgZmxvYXRpbmdUZXh0U2luZ3VsYXI6ICdVc2VyIHNlbGVjdGVkJyxcclxuICAgICAgc2VhcmNoUGxhY2Vob2xkZXI6ICdTZWFyY2ggVXNlcicsXHJcbiAgICAgIHNlYXJjaEVuYWJsZWQ6IHRydWUsXHJcbiAgICAgIG5vRGF0YVRleHQ6ICdObyBVc2VycyBGb3VuZCdcclxuICAgIH0sXHJcbiAgICBJU1NVRV9UWVBFOiB7XHJcbiAgICAgIHBhbmVsVGl0bGU6ICdTZWxlY3QgSXNzdWUgVHlwZScsXHJcbiAgICAgIGZsb2F0aW5nVGV4dFNpbmd1bGFyOiAnSXNzdWUgVHlwZSBzZWxlY3RlZCcsXHJcbiAgICAgIHNlYXJjaFBsYWNlaG9sZGVyOiAnU2VhcmNoIElzc3VlIFR5cGUnLFxyXG4gICAgICBzZWFyY2hFbmFibGVkOiB0cnVlLFxyXG4gICAgICBub0RhdGFUZXh0OiAnTm8gSXNzdWUgVHlwZXMgRm91bmQnXHJcbiAgICB9LFxyXG4gICAgSVNTVUVfQ0M6IHtcclxuICAgICAgcGFuZWxUaXRsZTogJ1NlbGVjdCB1c2VyKHMpJyxcclxuICAgICAgZmxvYXRpbmdUZXh0U2luZ3VsYXI6ICdVc2VyIHNlbGVjdGVkJyxcclxuICAgICAgc2VhcmNoUGxhY2Vob2xkZXI6ICdTZWFyY2ggVXNlcicsXHJcbiAgICAgIHNlYXJjaEVuYWJsZWQ6IHRydWUsXHJcbiAgICAgIHNlbGVjdEFsbEVuYWJsZWQ6IHRydWUsXHJcbiAgICAgIG5vRGF0YVRleHQ6ICdObyBVc2VycyBGb3VuZCdcclxuICAgIH0sXHJcbiAgICBJU1NVRV9GQ0M6IHtcclxuICAgICAgcGFuZWxUaXRsZTogJ1NlbGVjdCB1c2VyKHMpJyxcclxuICAgICAgZmxvYXRpbmdUZXh0U2luZ3VsYXI6ICdVc2VyIHNlbGVjdGVkJyxcclxuICAgICAgc2VhcmNoUGxhY2Vob2xkZXI6ICdTZWFyY2ggVXNlcicsXHJcbiAgICAgIHNlYXJjaEVuYWJsZWQ6IHRydWUsXHJcbiAgICAgIHNlbGVjdEFsbEVuYWJsZWQ6IHRydWUsXHJcbiAgICAgIG5vRGF0YVRleHQ6ICdObyBVc2VycyBGb3VuZCdcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBmaWVsZHNXaXRoRXJyb3I6IGFueSA9IFtdO1xyXG4gIGhpZGRlbkxpc3Q6IGFueVtdID0gW107XHJcblxyXG4gIGFjdGl2ZUZpZWxkID0gJyc7XHJcbiAgYWN0aXZlU2VsZWN0b3IgPSAnJztcclxuICBsaXN0TG9hZGluZ1N0YXR1czogYW55ID0gW107XHJcbiAgY3VycmVudFRpbWUgPSAnJztcclxuICAgIC8qKlxyXG4gICAqIGlzUkNQcmVTZWxlY3RlZCxpc1JDVmlzaWJsZSBhcmUgdmFyaWFibGUgdXNlZCB0byBzZXQgdGhlIHZpc2liaWxpdHkgb2YgcmMgZmllbGQgYW5kIGVkaXQgYnV0dG9uIGluIGNlcnRhaW4gY29uZGl0aW9uc1xyXG4gICAqL1xyXG4gIGlzUkNQcmVTZWxlY3RlZCA9IGZhbHNlO1xyXG4gIGlzUkNWaXNpYmxlID0gdHJ1ZVxyXG4gIGlzUkNNYW5kYXRvcnkgPSBmYWxzZTtcclxuICBkYXRhRm9yRWRpdCAhOmFueTtcclxuICBpc1Jpc2tDb250cm9sVmlzaWJsZSA9IGZhbHNlO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9nU2VydmljZTogTG9nSXNzdWVTZXJ2aWNlLCBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSwgcHJpdmF0ZSB1aUtpdFNlcnZpY2U6IFVpS2l0U2VydmljZSwgcHJpdmF0ZSBzbmFja0JhcjogU25hY2tCYXJTZXJ2aWNlKSB7IH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY3VycmVudFRpbWUgPSB0aGlzLmdldEN1cnJlbnRUaW1lKCk7XHJcbiAgICB0aGlzLnBpY2tlckNoYW5nZWQuZW1pdChmYWxzZSk7XHJcbiAgICB0aGlzLnNldFVzZXJEZXRhaWxzKCk7XHJcbiAgICB0aGlzLmZldGNoSXNzdWVUeXBlcygpO1xyXG4gICAgdGhpcy5mZXRjaFVzZXJMaXN0KCk7XHJcbiAgICB0aGlzLmZldGNoQ2F0ZWdvcnlMaXN0KCk7XHJcbiAgICB0aGlzLmZldGNoUkNMaXN0KCk7XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldE9yZ2FuaXphdGlvbkRldGFpbHMoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGlmICghcmVzLmVuYWJsZV9yaXNrY2xhc3MpIHtcclxuICAgICAgICB0aGlzLmhpZGRlbkxpc3QucHVzaCgnUklTS19DTEFTU0lGSUNBVElPTicpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgIHRoaXMuZmV0Y2hDb250cm9sUmlza3MoKTtcclxuICAgICB0aGlzLmRlY2lkZVJDbWFuZGF0b3J5KCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcygpIHtcclxuICAgIHRoaXMuY3VycmVudFRpbWUgPSB0aGlzLmdldEN1cnJlbnRUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBkZWNpZGVSQ21hbmRhdG9yeSgpe1xyXG4gICAgdGhpcy5pc1JDTWFuZGF0b3J5ID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuXHJcbiAgc2V0Q3VycmVudFRpbWUoKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRUaW1lID0gdGhpcy5nZXRDdXJyZW50VGltZSgpO1xyXG4gIH1cclxuICBnZXRDdXJyZW50VGltZSgpIHtcclxuICAgIGxldCB0b2RheSA9IG5ldyBEYXRlKCk7XHJcbiAgICBpZiAodG9kYXkuZ2V0RGF0ZSgpID09PSBuZXcgRGF0ZSh0aGlzLmxvZ0lzc3VlRm9ybS5pc3N1ZUR1ZURhdGUpLmdldERhdGUoKSkge1xyXG4gICAgICBpZiAodG9kYXkuZ2V0SG91cnMoKSA8IDEyICYmIHRvZGF5LmdldE1pbnV0ZXMoKSA8IDU5ICYmIHRvZGF5LmdldFNlY29uZHMoKSA8IDU5KSB7XHJcbiAgICAgICAgcmV0dXJuIGAkeyh0b2RheS5nZXRIb3VycygpIDwgMTApID8gJzAnICsgdG9kYXkuZ2V0SG91cnMoKSA6IHRvZGF5LmdldEhvdXJzKCl9OiR7KHRvZGF5LmdldE1pbnV0ZXMoKSA8IDEwKSA/ICcwJyArIHRvZGF5LmdldE1pbnV0ZXMoKSA6IHRvZGF5LmdldE1pbnV0ZXMoKX0gYW1gO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBgJHsoKHRvZGF5LmdldEhvdXJzKCkgLSAxMikgPCAxMCkgPyAnMCcgKyAodG9kYXkuZ2V0SG91cnMoKSAtIDEyKSA6ICh0b2RheS5nZXRIb3VycygpIC0gMTIpfTokeyh0b2RheS5nZXRNaW51dGVzKCkgPCAxMCkgPyAnMCcgKyB0b2RheS5nZXRNaW51dGVzKCkgOiB0b2RheS5nZXRNaW51dGVzKCl9IHBtYDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICcwMDowMCBhbSc7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNldFVzZXJEZXRhaWxzKCkge1xyXG4gICAgdGhpcy5jdXJyZW50VXNlciA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0VXNlckRldGFpbHMoKS51c2VyO1xyXG4gIH1cclxuICBmZXRjaElzc3VlVHlwZXMoKSB7XHJcbiAgICB0aGlzLmxpc3RMb2FkaW5nU3RhdHVzWzBdID0gZmFsc2U7XHJcbiAgICB0aGlzLmNoZWNrQWxsTGlzdExvYWRlZCgpO1xyXG4gICAgdGhpcy5sb2dTZXJ2aWNlLmdldElzc3VlVHlwZXMoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMubGlzdExvYWRpbmdTdGF0dXNbMF0gPSB0cnVlO1xyXG4gICAgICB0aGlzLmxpc3REYXRhLmlzc3VlVHlwZUxpc3QgPSByZXM7XHJcbiAgICAgIHRoaXMuY2hlY2tBbGxMaXN0TG9hZGVkKCk7XHJcbiAgICB9LCAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmxpc3RMb2FkaW5nU3RhdHVzWzBdID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jaGVja0FsbExpc3RMb2FkZWQoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBmZXRjaFVzZXJMaXN0KCkge1xyXG4gICAgdGhpcy5saXN0TG9hZGluZ1N0YXR1c1sxXSA9IGZhbHNlO1xyXG4gICAgdGhpcy5sb2dTZXJ2aWNlLmdldE9yZ1Blb3BsZSgpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5saXN0TG9hZGluZ1N0YXR1c1sxXSA9IHRydWU7XHJcbiAgICAgIHRoaXMubGlzdERhdGEudXNlckxpc3QgPSByZXM7XHJcbiAgICAgIHRoaXMuY2hlY2tBbGxMaXN0TG9hZGVkKCk7XHJcbiAgICB9LCAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmxpc3RMb2FkaW5nU3RhdHVzWzFdID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jaGVja0FsbExpc3RMb2FkZWQoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZmV0Y2hDYXRlZ29yeUxpc3QoKSB7XHJcbiAgICB0aGlzLmxpc3RMb2FkaW5nU3RhdHVzWzJdID0gZmFsc2U7XHJcbiAgICB0aGlzLmxvZ1NlcnZpY2UuZ2V0SXNzdWVDYXRlZ29yaWVzKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmxpc3RMb2FkaW5nU3RhdHVzWzJdID0gdHJ1ZTtcclxuICAgICAgdGhpcy5saXN0RGF0YS5jYXRlZ29yeUxpc3QgPSByZXM/LmRhdGE7XHJcbiAgICAgIHRoaXMubGlzdERhdGEuY2F0ZWdvcnlMaXN0ID0gdGhpcy5saXN0RGF0YS5jYXRlZ29yeUxpc3QuZmlsdGVyKChlOmFueSk9PiBlPy5jYXRlZ29yeV9uYW1lICE9PSAnVW5jYXRlZ29yaXplZCcpXHJcbiAgICAgIHRoaXMuY2hlY2tBbGxMaXN0TG9hZGVkKCk7XHJcbiAgICB9LCAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmxpc3RMb2FkaW5nU3RhdHVzWzJdID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jaGVja0FsbExpc3RMb2FkZWQoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZmV0Y2hSQ0xpc3QoKSB7XHJcbiAgICB0aGlzLmxpc3RMb2FkaW5nU3RhdHVzWzNdID0gZmFsc2U7XHJcbiAgICB0aGlzLmxvZ1NlcnZpY2UuZ2V0UmVzcG9uc2liaWxpdHlDZW50ZXJMaXN0KCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmxpc3RMb2FkaW5nU3RhdHVzWzNdID0gdHJ1ZTtcclxuICAgICAgdGhpcy5saXN0RGF0YS5yY0xpc3QgPSByZXM7XHJcbiAgICAgIHRoaXMuY2hlY2tBbGxMaXN0TG9hZGVkKCk7XHJcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRSQygpO1xyXG4gICAgfSwgKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5saXN0TG9hZGluZ1N0YXR1c1szXSA9IHRydWU7XHJcbiAgICAgIHRoaXMuY2hlY2tBbGxMaXN0TG9hZGVkKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFNlbGVjdGVkUkMoKXtcclxuICAgIGlmKHRoaXMucmVwb25zaWJpbGl0eURhdGE/LnJjSWQgJiYgdGhpcy5vcGVuZWRGcm9tID09PSAnQ09NUExJQU5DRV9XT1JLUk9PTScpe1xyXG4gICAgICB0aGlzLmxvZ0lzc3VlRm9ybS5pc3N1ZVJDID0gIHRoaXMucmVwb25zaWJpbGl0eURhdGEucmNJZCA/IHRoaXMubGlzdERhdGEucmNMaXN0LmZpbHRlcigoZTphbnkpID0+IGUucmNfaWQgPT09IHRoaXMucmVwb25zaWJpbGl0eURhdGEucmNJZCk6W107XHJcbiAgICAgIGNvbnNvbGUubG9nKFwidGhpcy5sb2dJc3N1ZUZvcm0uaXNzdWVSQyAgPT0+XCIsdGhpcy5sb2dJc3N1ZUZvcm0uaXNzdWVSQywgdGhpcy5saXN0RGF0YS5yY0xpc3QgLCAgdGhpcy5yZXBvbnNpYmlsaXR5RGF0YS5yY0lkLCB0aGlzLmxpc3REYXRhLnJjTGlzdC5maWx0ZXIoKGU6YW55KSA9PiBlLnJjX2lkID09PSB0aGlzLnJlcG9uc2liaWxpdHlEYXRhLnJjSWQpKVxyXG4gICAgfWVsc2UgaWYodGhpcy5pc3N1ZURldGFpbHM/LnJjSWQgJiYgWydBVURJVF9XT1JLUk9PTScsJ1ZJRVdfQVVESVRfRVhFQ1VUSU9OX1NVTU1BUlknLCdFWEVDVVRFX0FVRElUX1BMQU4nXS5pbmNsdWRlcyh0aGlzLm9wZW5lZEZyb20pKXtcclxuICAgICAgdGhpcy5sb2dJc3N1ZUZvcm0uaXNzdWVSQyA9IHRoaXMuaXNzdWVEZXRhaWxzPy5yY0lkID8gdGhpcy5saXN0RGF0YS5yY0xpc3QuZmlsdGVyKChlOmFueSkgPT4gZS5yY19pZCA9PT0gdGhpcy5pc3N1ZURldGFpbHM/LnJjSWQpOltdO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKHRoaXMubG9nSXNzdWVGb3JtPy5pc3N1ZVJDPy5sZW5ndGgpe1xyXG4gICAgICB0aGlzLmlzUkNQcmVTZWxlY3RlZCA9IHRydWU7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5pc1JDUHJlU2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKFwidGhpcy5yZXBvbnNpYmlsaXR5RGF0YXRoaXMucmVwb25zaWJpbGl0eURhdGF0aGlzLnJlcG9uc2liaWxpdHlEYXRhID09PT5cIiwgdGhpcy5yZXBvbnNpYmlsaXR5RGF0YSlcclxuICAgIGlmKCEodGhpcy5yZXBvbnNpYmlsaXR5RGF0YT8ucmNJZCB8fCB0aGlzLmlzc3VlRGV0YWlscz8ucmNJZCkgJiYgWydDT01QTElBTkNFX1dPUktST09NJywnQVVESVRfV09SS1JPT00nLCdWSUVXX0FVRElUX0VYRUNVVElPTl9TVU1NQVJZJywnRVhFQ1VURV9BVURJVF9QTEFOJ10uaW5jbHVkZXModGhpcy5vcGVuZWRGcm9tKSl7XHJcbiAgICB0aGlzLmlzUkNWaXNpYmxlID0gZmFsc2U7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5pc1JDVmlzaWJsZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgZmV0Y2hDb250cm9sUmlza3MoKXtcclxuXHJcbiAgICAgIGlmKFsnVklFV19BVURJVF9FWEVDVVRJT05fU1VNTUFSWScsJ0VYRUNVVEVfQVVESVRfUExBTiddLmluY2x1ZGVzKHRoaXMub3BlbmVkRnJvbSkpe1xyXG5cclxuICAgICAgICB0aGlzLmdldExpbmthZ2UodGhpcy5pc3N1ZURldGFpbHM/LmF1ZGl0T2JqSWQsdGhpcy5sb2dJc3N1ZUZvcm0ubGlua2FnZVR5cGUpXHJcbiAgICAgIH1cclxuICB9XHJcblxyXG5cclxuICBnZXRMaW5rYWdlKGF1ZGl0SWQ6YW55LCB0eXBlOnN0cmluZyl7XHJcbiAgICB0aGlzLmlzUmlza0NvbnRyb2xMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMubG9nU2VydmljZS5nZXRDb250cm9sUmlzayhhdWRpdElkLHR5cGUpPy5zdWJzY3JpYmUoKGRhdGE6YW55KT0+e1xyXG4gICAgICB0aGlzLmxpc3REYXRhLmxpbmthZ2VMaXN0ID0gWy4uLnRoaXMubGlzdERhdGEubGlua2FnZUxpc3QsLi4uZGF0YV07XHJcbiAgICAgIHRoaXMubGlzdERhdGEubGlua2FnZUxpc3QgPSAgdGhpcy5saXN0RGF0YS5saW5rYWdlTGlzdC5maWx0ZXIoKHRoaW5nOmFueSwgaW5kZXg6YW55LCBzZWxmOmFueSkgPT5cclxuICBpbmRleCA9PT0gc2VsZi5maW5kSW5kZXgoKHQ6YW55KSA9PiAoXHJcbiAgICB0Lml0ZW1JZCA9PT0gdGhpbmcuaXRlbUlkICYmIHQuaXRlbVR5cGUgPT09IHRoaW5nLml0ZW1UeXBlXHJcbiAgKSlcclxuKVxyXG4gICAgICB0aGlzLmlzUmlza0NvbnRyb2xMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwibGlua2FnZVwiLHRoaXMubGlzdERhdGEpXHJcbiAgICAgfSwoZXJyb3I6YW55KT0+e1xyXG4gICAgICB0aGlzLmlzUmlza0NvbnRyb2xMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgfSlcclxuICB9XHJcbiAgLyoqXHJcbiAgICogVGhpcyBmdW5jdGlvaiBjaGVjayB3ZWF0aGVyIGFsbCB0aGUgcmVxdWlyZWQgbGlzdHMgYXJlIGxvYWRlZFxyXG4gICAqIElmIGxvYWRlZCBoaWRlcyB0aGUgbG9hZGVyIG90aGVyd2lzZSBzaG93cyB0aGUgbG9hZGVyLlxyXG4gICAqL1xyXG4gIGNoZWNrQWxsTGlzdExvYWRlZCgpIHtcclxuICAgIGlmICh0aGlzLmxpc3RMb2FkaW5nU3RhdHVzLmluY2x1ZGVzKGZhbHNlKSkge1xyXG4gICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIGlmKHRoaXMubW9kZT09PSdFRElUJyl7XHJcbiAgICAgICAgdGhpcy5mZXRjaElzc3VlRGV0YWlscygpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBSZW1vdmVzIGVycm9yIGZyb20gdGhlIGZpZWxzIHdpdGggZXJyb3IgdG8gcmVtb3ZlIHRoZSBlcnJvciBtZXNzYWcgZnJvbSB0aGUgVUlcclxuICAgKiBAcGFyYW0gZXJyb3JLZXkgZXJyb3IgSWRlbnRpZmllciB1c2VkIHRvIHNob3cgZXJyb3IgaW4gc3BlY2lmaWMgZmllbGRzLlxyXG4gICAqL1xyXG4gIHJlbW92ZUVycm9yKGVycm9yS2V5OiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5maWVsZHNXaXRoRXJyb3IuaW5kZXhPZihlcnJvcktleSk7XHJcbiAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICB0aGlzLmZpZWxkc1dpdGhFcnJvci5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfVxyXG4gIH1cclxuICBvcGVuRGF0ZVBpY2tlcigpIHtcclxuICAgIHRoaXMuZGF0ZVBpY2tlci5hcGkub3BlbigpO1xyXG4gICAgdGhpcy5kYXRlUGlja2VyT3ZlcmxheSA9IHRydWU7XHJcbiAgICB0aGlzLnNldEFjdGl2ZUZpZWxkU2VsZWN0b3IoJ0lTU1VFX0RBVEVfVElNRScsICdJU1NVRV9EQVRFX1RJTUUnKTtcclxuICB9XHJcbiAgY2xvc2VEYXRlUGlja2VyKGV2dDogYW55KSB7XHJcbiAgICBpZiAoIWV2dCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoZXZ0Py5kYXRlPy5fZCkge1xyXG4gICAgICBsZXQgbW9udGhBcnJheSA9IFsnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYyddXHJcbiAgICAgIGNvbnN0IGRhdGVWYWx1ZSA9IG5ldyBEYXRlKGV2dD8uZGF0ZT8uX2QpLmdldERhdGUoKTtcclxuICAgICAgY29uc3QgbW9udGhWYWx1ZSA9IG1vbnRoQXJyYXlbbmV3IERhdGUoZXZ0Py5kYXRlPy5fZCkuZ2V0TW9udGgoKV07XHJcbiAgICAgIGNvbnN0IHllYXJWYWx1ZSA9IG5ldyBEYXRlKGV2dD8uZGF0ZT8uX2QpLmdldEZ1bGxZZWFyKCk7XHJcbiAgICAgIGNvbnN0IGRhdGVTdHIgPSBgJHtkYXRlVmFsdWV9ICR7bW9udGhWYWx1ZX0gJHt5ZWFyVmFsdWV9YDtcclxuICAgICAgaWYgKGV2dD8uZGF0ZT8uX2QgIT09IHRoaXMubG9nSXNzdWVGb3JtLmlzc3VlRHVlRGF0ZT8uX2QpIHtcclxuICAgICAgICB0aGlzLmxvZ0lzc3VlRm9ybS5pc3N1ZUR1ZVRpbWUgPSBcIjExOjU5IFBNXCI7XHJcbiAgICAgICAgdGhpcy5zZXRDdXJyZW50VGltZSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoZXZ0Py5kYXRlPy5fZCkge1xyXG4gICAgICB0aGlzLmxvZ0lzc3VlRm9ybS5pc3N1ZUR1ZURhdGUgPSBldnQ/LmRhdGU/Ll9kO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kYXRlUGlja2VyLmFwaS5jbG9zZSgpO1xyXG4gICAgdGhpcy5kYXRlUGlja2VyT3ZlcmxheSA9IGZhbHNlO1xyXG4gICAgdGhpcy5zZXRBY3RpdmVGaWVsZFNlbGVjdG9yKCcnLCAnJyk7XHJcbiAgfVxyXG5cclxuICBzZXRBY3RpdmVGaWVsZFNlbGVjdG9yKGFjdGl2ZUZpZWxkOiBzdHJpbmcsIGFjdGl2ZVNlbGVjdG9yPzogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmFjdGl2ZUZpZWxkID0gYWN0aXZlRmllbGQ7XHJcbiAgICAoYWN0aXZlU2VsZWN0b3IgPyB0aGlzLmFjdGl2ZVNlbGVjdG9yID0gYWN0aXZlU2VsZWN0b3IgOiB0aGlzLmFjdGl2ZVNlbGVjdG9yID0gJycpO1xyXG4gICAgY29uc3Qgc2xpZGVyVHlwZSA9IFsnSVNTVUVfUkMnLCAnSVNTVUVfQ0FURUdPUlknLCAnSVNTVUVfVFlQRScsICdJU1NVRV9DQycsICdJU1NVRV9GQ0MnLCAnSVNTVUVfV0hPJywnSVNTVUVfQ09OVFJPTF9SSVNLJ107XHJcbiAgICBpZiAoc2xpZGVyVHlwZS5pbmNsdWRlcyhhY3RpdmVGaWVsZCkpIHtcclxuICAgICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQodHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgZmllbGREZXNlbGVjdG9yKHR5cGU6IGFueSkge1xyXG4gICAgdGhpcy5hY3RpdmVTZWxlY3RvciA9ICcnO1xyXG4gICAgdGhpcy5hY3RpdmVGaWVsZCA9ICcnO1xyXG4gICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0b3JBY3Rpb24oZXZ0OiBhbnksIHR5cGU6IGFueSkge1xyXG4gICAgY29uc29sZS5sb2coZXZ0LCB0eXBlKVxyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgJ0lTU1VFX0NBVEVHT1JZJzoge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGV2dCk7XHJcbiAgICAgICAgdGhpcy5sb2dJc3N1ZUZvcm0uaXNzdWVDYXRlZ29yeSA9IHRoaXMuaWRUb0FycmF5KGV2dCwgdGhpcy5saXN0RGF0YS5jYXRlZ29yeUxpc3QsICdjYXRlZ29yeV9pZCcpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCB0aGlzLmxvZ0lzc3VlRm9ybS5pc3N1ZUNhdGVnb3J5KTtcclxuICAgICAgICB0aGlzLmZpZWxkRGVzZWxlY3Rvcih0eXBlKTtcclxuICAgICAgICBpZiAoZXZ0Py5sZW5ndGggPiAwKSB7IHRoaXMucmVtb3ZlRXJyb3IoJ2lzc3VlQ2F0ZWdvcnknKSB9XHJcbiAgICAgICAgaWYodGhpcy5sb2dJc3N1ZUZvcm0/Lmlzc3VlQ2F0ZWdvcnlbMF0/LmN1c3RvbV90YWdzPy5sZW5ndGgpe1xyXG4gICAgICAgICAgY29uc3QgdGFnOmFueSA9IFtdXHJcbiAgICAgICAgICB0aGlzLmxvZ0lzc3VlRm9ybT8uaXNzdWVDYXRlZ29yeVswXT8uY3VzdG9tX3RhZ3MuZm9yRWFjaCgoZWxlbWVudDphbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICB0YWcucHVzaCh7bmFtZTplbGVtZW50LCB2YWx1ZTonJ30pXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMubG9nSXNzdWVGb3JtLmlzc3VlQ3VzdG9tVGFnID0gdGFnO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgdGhpcy5sb2dJc3N1ZUZvcm0uaXNzdWVDdXN0b21UYWcgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgLy9bXCJpc3N1ZU5hbWVcIiwgXCJpc3N1ZUNhdGVnb3J5XCIsIFwiaXNzdWVSQ1wiLCBcImVudHJ1c3RUb1wiLCBcImlzc3VlRHVlRGF0ZVwiLCBcImlzc3VlUmVjb21tZW5kYXRpb25cIl1cclxuICAgICAgY2FzZSAnSVNTVUVfUkMnOiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZXZ0LCB0eXBlKVxyXG4gICAgICAgIHRoaXMubG9nSXNzdWVGb3JtLmlzc3VlUkMgPSB0aGlzLmlkVG9BcnJheShldnQsIHRoaXMubGlzdERhdGEucmNMaXN0LCAncmNfaWQnKTtcclxuICAgICAgICB0aGlzLmZpZWxkRGVzZWxlY3Rvcih0eXBlKTtcclxuICAgICAgICBpZiAoZXZ0Py5sZW5ndGggPiAwKSB7IHRoaXMucmVtb3ZlRXJyb3IoJ2lzc3VlUkMnKSB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnSVNTVUVfV0hPJzoge1xyXG4gICAgICAgIHRoaXMubG9nSXNzdWVGb3JtLmVudHJ1c3RUbyA9IHRoaXMuaWRUb0FycmF5KGV2dCwgdGhpcy5saXN0RGF0YS51c2VyTGlzdCwgJ2VtcGxveWVlX2lkJyk7XHJcbiAgICAgICAgdGhpcy5maWVsZERlc2VsZWN0b3IodHlwZSk7XHJcbiAgICAgICAgaWYgKGV2dD8ubGVuZ3RoID4gMCkgeyB0aGlzLnJlbW92ZUVycm9yKCdlbnRydXN0VG8nKSB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnSVNTVUVfVFlQRSc6IHtcclxuICAgICAgICB0aGlzLmxvZ0lzc3VlRm9ybS5pc3N1ZVR5cGUgPSB0aGlzLmlkVG9BcnJheShldnQsIHRoaXMubGlzdERhdGEuaXNzdWVUeXBlTGlzdCwgJ2lzc3VlX2lkJyk7XHJcbiAgICAgICAgdGhpcy5maWVsZERlc2VsZWN0b3IodHlwZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnSVNTVUVfQ0MnOiB7XHJcbiAgICAgICAgdGhpcy5sb2dJc3N1ZUZvcm0uaXNzdWVDQ1VzZXJzID0gdGhpcy5pZFRvQXJyYXkoZXZ0LCB0aGlzLmxpc3REYXRhLnVzZXJMaXN0LCAnZW1wbG95ZWVfZW1haWwnKTtcclxuICAgICAgICB0aGlzLmZpZWxkRGVzZWxlY3Rvcih0eXBlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdJU1NVRV9GQ0MnOiB7XHJcbiAgICAgICAgdGhpcy5sb2dJc3N1ZUZvcm0uZmFpbHVyZUNDVXNlcnMgPSB0aGlzLmlkVG9BcnJheShldnQsIHRoaXMubGlzdERhdGEudXNlckxpc3QsICdlbXBsb3llZV9lbWFpbCcpO1xyXG4gICAgICAgIHRoaXMuZmllbGREZXNlbGVjdG9yKHR5cGUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjYXNlICdJU1NVRV9DT05UUk9MX1JJU0snOlxyXG4gICAgICAgIHRoaXMubG9nSXNzdWVGb3JtLmxpbmtlZENvbnRyb2xSaXNrID0gdGhpcy5pZFRvQXJyYXkoZXZ0LCB0aGlzLmxpc3REYXRhLmxpbmthZ2VMaXN0LCAnaXRlbUlkJyk7XHJcbiAgICAgICAgdGhpcy5sb2dJc3N1ZUZvcm0ubGlua2FnZVR5cGUgPSAgdGhpcy5sb2dJc3N1ZUZvcm0/LmxpbmtlZENvbnRyb2xSaXNrWzBdPy5pdGVtVHlwZTtcclxuICAgICAgICB0aGlzLmZpZWxkRGVzZWxlY3Rvcih0eXBlKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHRoaXMucGlja2VyQ2hhbmdlZC5lbWl0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZUl0ZW0odHlwZTogYW55LCBlbGVtZW50OiBhbnkpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlICdJU1NVRV9DQVRFR09SWSc6IHtcclxuICAgICAgICBjb25zdCBpdGVtSW5kZXggPSB0aGlzLmxvZ0lzc3VlRm9ybS5pc3N1ZUNhdGVnb3J5LmZpbmRJbmRleCgoaXRlbTogYW55KSA9PiBpdGVtLmNhdGVnb3J5X2lkID09PSBlbGVtZW50LmNhdGVnb3J5X2lkKTtcclxuICAgICAgICBpZiAoaXRlbUluZGV4ICE9PSAtMSkgeyB0aGlzLmxvZ0lzc3VlRm9ybS5pc3N1ZUNhdGVnb3J5LnNwbGljZShpdGVtSW5kZXgsIDEpOyB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnSVNTVUVfUkMnOiB7XHJcbiAgICAgICAgY29uc3QgaXRlbUluZGV4ID0gdGhpcy5sb2dJc3N1ZUZvcm0uaXNzdWVSQy5maW5kSW5kZXgoKGl0ZW06IGFueSkgPT4gaXRlbS5yY19pZCA9PT0gZWxlbWVudC5yY19pZCk7XHJcbiAgICAgICAgaWYgKGl0ZW1JbmRleCAhPT0gLTEpIHsgdGhpcy5sb2dJc3N1ZUZvcm0uaXNzdWVSQy5zcGxpY2UoaXRlbUluZGV4LCAxKTsgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0lTU1VFX1dITyc6IHtcclxuICAgICAgICBjb25zdCBpdGVtSW5kZXggPSB0aGlzLmxvZ0lzc3VlRm9ybS5lbnRydXN0VG8uZmluZEluZGV4KChpdGVtOiBhbnkpID0+IGl0ZW0uZW1wbG95ZWVfaWQgPT09IGVsZW1lbnQuZW1wbG95ZWVfaWQpO1xyXG4gICAgICAgIGlmIChpdGVtSW5kZXggIT09IC0xKSB7IHRoaXMubG9nSXNzdWVGb3JtLmVudHJ1c3RUby5zcGxpY2UoaXRlbUluZGV4LCAxKTsgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0lTU1VFX1RZUEUnOiB7XHJcbiAgICAgICAgY29uc3QgaXRlbUluZGV4ID0gdGhpcy5sb2dJc3N1ZUZvcm0uaXNzdWVUeXBlLmZpbmRJbmRleCgoaXRlbTogYW55KSA9PiBpdGVtLmlzc3VlX2lkID09PSBlbGVtZW50Lmlzc3VlX2lkKTtcclxuICAgICAgICBpZiAoaXRlbUluZGV4ICE9PSAtMSkgeyB0aGlzLmxvZ0lzc3VlRm9ybS5pc3N1ZVR5cGUuc3BsaWNlKGl0ZW1JbmRleCwgMSk7IH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdJU1NVRV9DQyc6IHtcclxuICAgICAgICBjb25zdCBpdGVtSW5kZXggPSB0aGlzLmxvZ0lzc3VlRm9ybS5pc3N1ZUNDVXNlcnMuZmluZEluZGV4KChpdGVtOiBhbnkpID0+IGl0ZW0uZW1wbG95ZWVfZW1haWwgPT09IGVsZW1lbnQuZW1wbG95ZWVfZW1haWwpO1xyXG4gICAgICAgIGlmIChpdGVtSW5kZXggIT09IC0xKSB7IHRoaXMubG9nSXNzdWVGb3JtLmlzc3VlQ0NVc2Vycy5zcGxpY2UoaXRlbUluZGV4LCAxKTsgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0lTU1VFX0ZDQyc6IHtcclxuICAgICAgICBjb25zdCBpdGVtSW5kZXggPSB0aGlzLmxvZ0lzc3VlRm9ybS5mYWlsdXJlQ0NVc2Vycy5maW5kSW5kZXgoKGl0ZW06IGFueSkgPT4gaXRlbS5lbXBsb3llZV9lbWFpbCA9PT0gZWxlbWVudC5lbXBsb3llZV9lbWFpbCk7XHJcbiAgICAgICAgaWYgKGl0ZW1JbmRleCAhPT0gLTEpIHsgdGhpcy5sb2dJc3N1ZUZvcm0uZmFpbHVyZUNDVXNlcnMuc3BsaWNlKGl0ZW1JbmRleCwgMSk7IH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdJU1NVRV9DT05UUk9MX1JJU0snOlxyXG4gICAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IHRoaXMubG9nSXNzdWVGb3JtLmxpbmtlZENvbnRyb2xSaXNrLmZpbmRJbmRleCgoaXRlbTogYW55KSA9PiBpdGVtLml0ZW1JZCA9PT0gZWxlbWVudC5pdGVtSWQpO1xyXG4gICAgICAgIGlmIChpdGVtSW5kZXggIT09IC0xKSB7IHRoaXMubG9nSXNzdWVGb3JtLmxpbmtlZENvbnRyb2xSaXNrLnNwbGljZShpdGVtSW5kZXgsIDEpOyB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGFzc2lnbk15c2VsZihldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnJlbW92ZUVycm9yKCdlbnRydXN0VG8nKVxyXG4gICAgdGhpcy5sb2dJc3N1ZUZvcm0uZW50cnVzdFRvID0gW107XHJcblxyXG4gIH1cclxuICBzZXRFeGNlcHRpb24odHlwZTogYW55KSB7IHRoaXMubG9nSXNzdWVGb3JtLmV4Y2VwdGlvblR5cGUgPSB0eXBlOyB9XHJcbiAgc2V0RXZpZGVuY2UodHlwZTogYW55KSB7IHRoaXMubG9nSXNzdWVGb3JtLmV2aWRlbmNlUmVxdWlyZWQgPSB0eXBlOyB9XHJcblxyXG4gIGFkZE1vcmVJbmZvKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuYWRkaXRpb25hbE9wdGlvblN0YXR1c1tldmVudC5jb2RlXSA9IGV2ZW50LmNoZWNrZWQ7XHJcbiAgICB0aGlzLnNjcm9sbFRvQm90dG9tID0gdHJ1ZTtcclxuICB9XHJcbiAgaWRUb0FycmF5KHNlbGVjdGVkSXRlbXM6IGFueSwgbGlzdEl0ZW1zOiBhbnksIGZpbHRlcmtleTogYW55KSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZCA9IHNlbGVjdGVkSXRlbXM7XHJcbiAgICBjb25zdCBsaXN0ID0gbGlzdEl0ZW1zO1xyXG4gICAgY29uc3Qga2V5ID0gZmlsdGVya2V5O1xyXG4gICAgY29uc3QgeCA9IGxpc3QuZmlsdGVyKChlbDogYW55KSA9PiBzZWxlY3RlZC5pbmNsdWRlcyhlbFtrZXldKSk7XHJcbiAgICByZXR1cm4geDtcclxuICB9XHJcbi8vL0NvZGUgYmV0d2VlbiA1MDMgdG8gNjA4IGNhbiBiZSBvcHRpbWl6ZWQgdG8gcmVtb3ZlIGR1cGxpY2F0aW9uXHJcbiBzZWxlY3RGaWxlKHR5cGU6c3RyaW5nLGZpbGVzOmFueSl7XHJcbiAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICBjYXNlICdJU1NVRV9ERVNDUklQVElPTic6IHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gZmlsZXMubGVuZ3RoIC0gMTsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgbmFtZSA9IGZpbGVzW2ldLmZpbGUubmFtZSA/PyAnJztcclxuICAgICAgICB0aGlzLkF0dGFjaG1lbnRUcmFja1swXS5wdXNoKG5hbWUpO1xyXG4gICAgICAgIHRoaXMudXBsb2FkRmlsZShmaWxlc1tpXS5maWxlLHR5cGUpO1xyXG4gICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgIH1cclxuICAgIGNhc2UgJ1JFQ09NTUVOREVEX0FDVElPTlMnOntcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gZmlsZXMubGVuZ3RoIC0gMTsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgbmFtZSA9IGZpbGVzW2ldLmZpbGUubmFtZSA/PyAnJztcclxuICAgICAgICB0aGlzLkF0dGFjaG1lbnRUcmFja1sxXS5wdXNoKG5hbWUpO1xyXG4gICAgICAgIHRoaXMudXBsb2FkRmlsZShmaWxlc1tpXS5maWxlLHR5cGUpO1xyXG4gICAgICB9XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgY2FzZSAnQVNTT0NJQVRFRF9SSVNLUyc6e1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBmaWxlcy5sZW5ndGggLSAxOyBpKyspIHtcclxuICAgICAgICBjb25zdCBuYW1lID0gZmlsZXNbaV0uZmlsZS5uYW1lID8/ICcnO1xyXG4gICAgICAgIHRoaXMuQXR0YWNobWVudFRyYWNrWzJdLnB1c2gobmFtZSk7XHJcbiAgICAgICAgdGhpcy51cGxvYWRGaWxlKGZpbGVzW2ldLmZpbGUsdHlwZSk7XHJcbiAgICAgIH1cclxuICAgICBicmVhaztcclxuICAgIH1cclxuIH1cclxufVxyXG5cclxuXHJcbiAgdXBsb2FkRmlsZShmaWxlOiBhbnksdHlwZTpzdHJpbmcpIHtcclxuICAgIGxldCB0cmFja0luZGV4ID0gMCA7XHJcbiAgICBzd2l0Y2godHlwZSl7XHJcbiAgICAgIGNhc2UgJ0lTU1VFX0RFU0NSSVBUSU9OJzp7XHJcbiAgICAgICAgdHJhY2tJbmRleCA9IDA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnUkVDT01NRU5ERURfQUNUSU9OUyc6e1xyXG4gICAgICAgIHRyYWNrSW5kZXggPSAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0FTU09DSUFURURfUklTS1MnOntcclxuICAgICAgICB0cmFja0luZGV4ID0gMjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlKTtcclxuICAgIGNvbnN0IGRlc3RpbmF0aW9uU3RyaW5nID0gdGhpcy5hdXRoU2VydmljZS5nZXRPcmdhbml6YXRpb25JZCgpLnRvU3RyaW5nKCk7XHJcbiAgICB0aGlzLmxvZ1NlcnZpY2UudXBsb2FkRmlsZXMoZm9ybURhdGEsIGRlc3RpbmF0aW9uU3RyaW5nKycvJykuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzOiBhbnkpID0+IHtcclxuXHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLkF0dGFjaG1lbnRUcmFja1t0cmFja0luZGV4XS5pbmRleE9mKGZpbGU/Lm5hbWUpO1xyXG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgIHRoaXMuQXR0YWNobWVudFRyYWNrW3RyYWNrSW5kZXhdLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2godHlwZSl7XHJcbiAgICAgICAgICBjYXNlICdJU1NVRV9ERVNDUklQVElPTic6e1xyXG4gICAgICAgICAgICB0aGlzLmxvZ0lzc3VlRm9ybS5pc3N1ZURlc2NyaXB0aW9uQXR0YWNoZW1lbnRzLnB1c2gocmVzKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjYXNlICdSRUNPTU1FTkRFRF9BQ1RJT05TJzp7XHJcbiAgICAgICAgICAgIHRoaXMubG9nSXNzdWVGb3JtLnJlY29tbWVuZGVkQWN0aW9uc0F0dGFjaG1lbnRzLnB1c2gocmVzKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjYXNlICdBU1NPQ0lBVEVEX1JJU0tTJzp7XHJcbiAgICAgICAgICAgIHRoaXMubG9nSXNzdWVGb3JtLmFzc29jaWF0ZWRSaXNrc0F0dGFjaG1lbnRzLnB1c2gocmVzKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICBjb25zdCBpbmRleCA9ICB0aGlzLkF0dGFjaG1lbnRUcmFja1t0cmFja0luZGV4XS5pbmRleE9mKGZpbGUubmFtZSk7XHJcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgdGhpcy5BdHRhY2htZW50VHJhY2tbdHJhY2tJbmRleF0uc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlRmlsZShmaWxlOiBhbnksdHlwZTpzdHJpbmcpIHtcclxuICAgIGxldCBmaWxlSW5kZXggPSAtMTtcclxuICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgY2FzZSAnSVNTVUVfREVTQ1JJUFRJT04nOntcclxuICAgICAgICBmaWxlSW5kZXggPSB0aGlzLmxvZ0lzc3VlRm9ybS5pc3N1ZURlc2NyaXB0aW9uQXR0YWNoZW1lbnRzPy5maW5kSW5kZXgoKGN1cnJlbnRGaWxlczogYW55KSA9PiBjdXJyZW50RmlsZXMub3JnX2ZpbGUgPT09IGZpbGUub3JnX2ZpbGUpID8/IC0xO1xyXG4gICAgICAgIHRoaXMubG9nSXNzdWVGb3JtLmlzc3VlRGVzY3JpcHRpb25BdHRhY2hlbWVudHM/LnNwbGljZShmaWxlSW5kZXgsIDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ1JFQ09NTUVOREVEX0FDVElPTlMnOntcclxuICAgICAgICBmaWxlSW5kZXggPSB0aGlzLmxvZ0lzc3VlRm9ybS5yZWNvbW1lbmRlZEFjdGlvbnNBdHRhY2htZW50cz8uZmluZEluZGV4KChjdXJyZW50RmlsZXM6IGFueSkgPT4gY3VycmVudEZpbGVzLm9yZ19maWxlID09PSBmaWxlLm9yZ19maWxlKSA/PyAtMTtcclxuICAgICAgICB0aGlzLmxvZ0lzc3VlRm9ybS5yZWNvbW1lbmRlZEFjdGlvbnNBdHRhY2htZW50cz8uc3BsaWNlKGZpbGVJbmRleCwgMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnQVNTT0NJQVRFRF9SSVNLUyc6e1xyXG4gICAgICAgIGZpbGVJbmRleCA9IHRoaXMubG9nSXNzdWVGb3JtLmFzc29jaWF0ZWRSaXNrc0F0dGFjaG1lbnRzPy5maW5kSW5kZXgoKGN1cnJlbnRGaWxlczogYW55KSA9PiBjdXJyZW50RmlsZXMub3JnX2ZpbGUgPT09IGZpbGUub3JnX2ZpbGUpID8/IC0xO1xyXG4gICAgICAgIHRoaXMubG9nSXNzdWVGb3JtLmFzc29jaWF0ZWRSaXNrc0F0dGFjaG1lbnRzPy5zcGxpY2UoZmlsZUluZGV4LCAxKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuIGFkZElzc3VlKCl7XHJcbiAgIGNvbnN0IGZvcm0gPSBjbG9uZURlZXAodGhpcy5sb2dJc3N1ZUZvcm0pO1xyXG4gICBpZiAoZm9ybS5pc0Fzc2lnblRvTXlzZWxmKXtcclxuICAgICBmb3JtLmVudHJ1c3RUbyA9IHRoaXMubGlzdERhdGEudXNlckxpc3QuZmlsdGVyKChlbXBsaXN0OiBhbnkpID0+IGVtcGxpc3QubXlfbWVtYmVyX2lkID09PSB0aGlzLmN1cnJlbnRVc2VyLmlkKTtcclxuICAgfVxyXG5cclxuICAgdGhpcy5maWVsZHNXaXRoRXJyb3IgPSBbXTtcclxuICAgdGhpcy5maWVsZHNXaXRoRXJyb3IgPSB0aGlzLmxvZ1NlcnZpY2UudmFsaWRhdGUoZm9ybSwgdGhpcy5vcGVuZWRGcm9tLHRoaXMuaXNSQ01hbmRhdG9yeSk7XHJcbiAgIGlmICh0aGlzLmZpZWxkc1dpdGhFcnJvci5sZW5ndGggPiAwICl7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG4gICBjb25zdCBQQVlMT0FEID0gdGhpcy5sb2dTZXJ2aWNlLnBheWxvYWRCdWlsZGVyKGZvcm0sIHRoaXMuYWRkaXRpb25hbE9wdGlvblN0YXR1cyk7XHJcblxyXG4gICBpZih0aGlzLm1vZGUgPT09ICdDUkVBVEUnKXtcclxuICAgUEFZTE9BRC5saW5rYWdlX29iamVjdCA9IHsgc291cmNlIDogdGhpcy5vcGVuZWRGcm9tLCB0eXBlOicnLCB0eXBlX2lkOiAwLCBzb3VyY2VfaWQ6IDAsIHNvdXJjZV9vYmplY3RfaWQ6ICcnfTtcclxuICAgIGlmICh0aGlzLiBvcGVuZWRGcm9tID09PSAnQ09NUExJQU5DRV9XT1JLUk9PTScgJiYgdGhpcy5yZXBvbnNpYmlsaXR5RGF0YT8ucmVzcG9uc2liaWxpdHlJZCl7XHJcbiAgICAgIFBBWUxPQUQubGlua2FnZV9vYmplY3QgPSB7IHNvdXJjZV9pZDogIHRoaXMucmVwb25zaWJpbGl0eURhdGE/LnJlc3BvbnNpYmlsaXR5SWQsIHR5cGU6ICcnLCB0eXBlX2lkOiAwLCAgc291cmNlIDogdGhpcy5vcGVuZWRGcm9tLCBzb3VyY2Vfb2JqZWN0X2lkOiB0aGlzLnJlcG9uc2liaWxpdHlEYXRhPy5yZXNwb25zaWJpbGl0eU9iamVjdElkIH0gO1xyXG4gICB9XHJcbiAgIGlmKFsnVklFV19BVURJVF9FWEVDVVRJT05fU1VNTUFSWScsJ0VYRUNVVEVfQVVESVRfUExBTiddLmluY2x1ZGVzKHRoaXMub3BlbmVkRnJvbSkpe1xyXG4gICAgICAgICAgaWYodGhpcy5sb2dJc3N1ZUZvcm0/LmxpbmthZ2VUeXBlICYmIHRoaXMubG9nSXNzdWVGb3JtPy5saW5rZWRDb250cm9sUmlzay5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgaWYoWydSSVNLJywgJ1JFU1BPTlNJQklMSVRZJ10uaW5jbHVkZXModGhpcy5sb2dJc3N1ZUZvcm0/LmxpbmthZ2VUeXBlKSl7XHJcbiAgICAgICAgICAgICAgUEFZTE9BRC5saW5rYWdlX29iamVjdC5zb3VyY2VfaWQgPSB0aGlzLmxvZ0lzc3VlRm9ybT8ubGlua2VkQ29udHJvbFJpc2tbMF0/Lml0ZW1JZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICB9XHJcbiAgIGlmKFsnQVVESVRfV09SS1JPT00nLCdWSUVXX0FVRElUX0VYRUNVVElPTl9TVU1NQVJZJywnRVhFQ1VURV9BVURJVF9QTEFOJ10uaW5jbHVkZXModGhpcy5vcGVuZWRGcm9tKSl7XHJcbiAgICAgIGlmKHRoaXMuaXNzdWVEZXRhaWxzLmF1ZGl0UGxhbklkKXtcclxuICAgICAgICBQQVlMT0FELmxpbmthZ2Vfb2JqZWN0LnNvdXJjZV9pZCA9ICB0aGlzLmlzc3VlRGV0YWlscy5hdWRpdFBsYW5JZDtcclxuICAgICAgfVxyXG4gICB9XHJcbiAgfVxyXG5cclxuICBpZih0aGlzLm1vZGUgPT09ICdFRElUJyl7XHJcbiAgICBQQVlMT0FELklzc3VlTGlua2FnZSA9IHRoaXMuZGF0YUZvckVkaXQ/LmxpbmthZ2Vfb2JqZWN0O1xyXG4gIH1cclxuICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IHRydWVcclxuICBjb25zb2xlLmxvZygnUEFZTE9BRCA9PT0+JywgUEFZTE9BRClcclxuICAgaWYodGhpcy5tb2RlID09PSAnRURJVCcpe1xyXG4gICAgdGhpcy5sb2dTZXJ2aWNlLnVwZGF0ZUlzc3VlKFBBWUxPQUQsdGhpcy5pc3N1ZUlkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc21pbGV5TWVzc2FnZSA9IGBUaGUgaXNzdWUgaGFzIGJlZW4gdXBkYXRlZC5gO1xyXG4gICAgICB0aGlzLmlzc3VlRGF0YSA9IHJlcztcclxuICAgICAgdGhpcy5zaG93U21pbGV5ID0gdHJ1ZTtcclxuICAgICAgdGhpcy51aUtpdFNlcnZpY2UuaXNTbWlsZXlPbiA9IHRydWU7XHJcbiAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gZmFsc2VcclxuICAgICAgdGhpcy5yZXNldElzc3VlRm9ybSgpO1xyXG4gICB9LCBlcnJvciA9PiB7XHJcbiAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IGZhbHNlO1xyXG4gICAgIHRoaXMuc25hY2tCYXIuc2hvdygnT09QUyEgU29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIHRoZSBwYWdlIGNvdWxkIG5vdCBiZSBsb2FkZWQuIENvdWxkIHlvdSBwbGVhc2UgdHJ5IG9uZSBtb3JlIHRpbWU/Jyk7XHJcbiAgIH0pO1xyXG4gICB9ZWxzZSBpZih0aGlzLm1vZGUgPT09ICdDUkVBVEUnIHx8IHRoaXMubW9kZSA9PT0gJycgfHwgIXRoaXMubW9kZSl7XHJcbiAgICB0aGlzLmxvZ1NlcnZpY2UuY3JlYXRlSXNzdWUoUEFZTE9BRCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmlzc3VlRGF0YSA9IHJlcztcclxuICAgICAgdGhpcy5zaG93U21pbGV5ID0gdHJ1ZTtcclxuICAgICAgdGhpcy51aUtpdFNlcnZpY2UuaXNTbWlsZXlPbiA9IHRydWU7XHJcbiAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucmVzZXRJc3N1ZUZvcm0oKTtcclxuICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSBmYWxzZTtcclxuICAgICB0aGlzLnNuYWNrQmFyLnNob3coJ09PUFMhIFNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB0aGUgcGFnZSBjb3VsZCBub3QgYmUgbG9hZGVkLiBDb3VsZCB5b3UgcGxlYXNlIHRyeSBvbmUgbW9yZSB0aW1lPycpO1xyXG4gICB9KTtcclxuICAgfVxyXG5cclxuIH1cclxuIGNsb3NlU21pbGV5KGV2dD86IGFueSl7XHJcbiAgdGhpcy5zaG93U21pbGV5ID0gZmFsc2U7XHJcbiAgdGhpcy51aUtpdFNlcnZpY2UuaXNTbWlsZXlPbiA9IGZhbHNlO1xyXG4gIHRoaXMuY2xvc2VXb3JrRmxvdyh0aGlzLmlzc3VlRGF0YSxmYWxzZSk7XHJcbiB9XHJcbi8qKlxyXG4gKiBDbG9zZXMgd29ya2Zsb3cgZW5naW5lXHJcbiAqIEBwYXJhbSBldnRcclxuICogQHBhcmFtIGNvbmZpcm1cclxuICovXHJcbmNsb3NlV29ya0Zsb3coZXZ0OiBhbnksIGNvbmZpcm06YW55KXtcclxuICAgdGhpcy5jbG9zZVdvcmtmbG93LmVtaXQoe2V2dCwgY29uZmlybX0pO1xyXG4gfVxyXG4gYWN0aW9uKGV2dDogYW55KXtcclxuICAgaWYgKGV2dCA9PT0gJ2FkZE1vcmUnKXtcclxuICAgIHRoaXMucmVzZXRJc3N1ZUZvcm0oKTtcclxuICAgIHRoaXMuc2hvd1NtaWxleSA9IGZhbHNlO1xyXG4gICAgdGhpcy51aUtpdFNlcnZpY2UuaXNTbWlsZXlPbiA9IGZhbHNlO1xyXG4gICAgLy8gdGhpcy5jbG9zZVdvcmtGbG93KHRoaXMuaXNzdWVEYXRhLCBmYWxzZSk7XHJcbiAgfVxyXG4gIGVsc2UgaWYoZXZ0ID09PSAndmlld0lzc3VlJyl7XHJcbiAgICB0aGlzLnZpZXdJc3N1ZSgpO1xyXG4gIH1cclxuXHJcbiAgIH1cclxuXHJcbiAgIHZpZXdJc3N1ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzY29ubmVjdFJlZnJlc2guZW1pdChmYWxzZSk7XHJcbiAgICAgICBsZXQgdXJsOiBzdHJpbmc7XHJcbiAgICAgICBpZiAod2luZG93LmxvY2F0aW9uLmhvc3Quc3RhcnRzV2l0aCgnbG9jYWxob3N0JykpIHtcclxuICAgICAgICAgdXJsID0gJ2h0dHA6Ly8nICsgd2luZG93LmxvY2F0aW9uLmhvc3Q7XHJcbiAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICB1cmwgPSAnaHR0cHM6Ly8nICsgd2luZG93LmxvY2F0aW9uLmhvc3Q7XHJcbiAgICAgICB9XHJcblxyXG4gICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ob3N0LnN0YXJ0c1dpdGgoJ2xvY2FsaG9zdCcpKSB7XHJcbiAgICAgICAgIHVybCArPSAnL2lzc3VlL2lzc3VlLXdvcmtyb29tLycgKyB0aGlzLmlzc3VlRGF0YT8uX2lkO1xyXG4gICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgdXJsICs9ICcvYXVkaXQvaXNzdWUvaXNzdWUtd29ya3Jvb20vJyArIHRoaXMuaXNzdWVEYXRhPy5faWQ7XHJcbiAgICAgICB9XHJcbiAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHVybDtcclxuICAgICB9XHJcblxyXG4vKipcclxuICogUG9wdWxhdGUgdGhlIHRpY2ttYXJrIG9mIG9wdGlvbmFsIGZpZWxkc1xyXG4gKi9cclxucG9wdWxhdGVPcHRpb25hbEZpZWxkcygpe1xyXG4gIGNvbnN0IGFjdGl2YXRlZE9wdGlvbnMgPSBbXTtcclxuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzLmFkZGl0aW9uYWxPcHRpb25TdGF0dXMpKXtcclxuICAgIGlmICh0aGlzLmFkZGl0aW9uYWxPcHRpb25TdGF0dXNba2V5XSA9PT0gdHJ1ZSl7XHJcbiAgICAgIGFjdGl2YXRlZE9wdGlvbnMucHVzaChrZXkpO1xyXG4gICAgfVxyXG4gIH1cclxuICB0aGlzLnBvcHVsYXRlT3B0aW9uLmVtaXQoYWN0aXZhdGVkT3B0aW9ucyk7XHJcbn1cclxuLyoqXHJcbiAqIEZldGNocyBpc3N1ZSBkZXRhaWxzIHdoZW4gaW4gZWRpdCBtb2RlIGJhc2VkIG9uIHRoZSBpbnB1dCBpZCBwYXNzZWRcclxuICovXHJcbmZldGNoSXNzdWVEZXRhaWxzKCl7XHJcbiAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gdHJ1ZTtcclxuICB0aGlzLmxvZ1NlcnZpY2UuZ2V0SXNzdWVEZXRhaWxzKHRoaXMuaXNzdWVJZCkuc3Vic2NyaWJlKChkYXRhOmFueSk9PntcclxuICAgIGNvbnNvbGUubG9nKFwiaXNzdWUgRGF0YVwiLGRhdGEpXHJcbiAgICB0aGlzLnBvcHVsYXRlRm9ybShkYXRhKVxyXG4gIH0pXHJcbn1cclxuLyoqXHJcbiAqIFBvcHVsYXRlcyB0aGUgaXNzdWUgZm9ybSB3aGVuIGluIGVkaXQgbW9kZVxyXG4gKiBAcGFyYW0gaXNzdWVEYXRhIGlzc3VlIGRhdGEgZmV0Y2hlZCBmcm9tIEFQSVxyXG4gKi9cclxuYXN5bmMgcG9wdWxhdGVGb3JtKGlzc3VlRGF0YSA6IGFueSl7XHJcbiAgdGhpcy5kYXRhRm9yRWRpdCA9IGlzc3VlRGF0YTtcclxuICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gZmFsc2U7XHJcbiAgY29uc3QgaXNzdWVEdWVEYXRlID0gaXNzdWVEYXRhLmZyZXF1ZW5jeV9kZXRhaWxzPy5mcmVxdWVuY3lfZGF0ZS5zcGxpdCgnLScpO1xyXG4gIHRoaXMubG9nSXNzdWVGb3JtID0ge1xyXG4gICAgaXNzdWVOYW1lIDogaXNzdWVEYXRhLnRpdGxlID8/ICcnLFxyXG4gICAgZXZpZGVuY2VSZXF1aXJlZDogaXNzdWVEYXRhPy5ldmlkZW5jZT8uZXZpZGVuY2VfZmxhZz8/MCxcclxuICAgIGlzc3VlRGVzY3JpcHRpb246IGlzc3VlRGF0YT8uZGVzY3JpcHRpb24/Lmxlbmd0aCA/IGlzc3VlRGF0YT8uZGVzY3JpcHRpb25bMF0/LnRleHQgOicnLFxyXG4gICAgaXNzdWVEZXNjcmlwdGlvbkF0dGFjaGVtZW50czogaXNzdWVEYXRhPy5kZXNjcmlwdGlvbj8ubGVuZ3RoID8gaXNzdWVEYXRhPy5kZXNjcmlwdGlvblswXT8uYXR0YWNobWVudHMgOltdLFxyXG4gICAgaXNzdWVDYXRlZ29yeTogaXNzdWVEYXRhPy5jYXRlZ29yeV9pZCA/IHRoaXMubGlzdERhdGEuY2F0ZWdvcnlMaXN0LmZpbHRlcigoZTphbnkpID0+IGUuY2F0ZWdvcnlfaWQgPT09IGlzc3VlRGF0YT8uY2F0ZWdvcnlfaWQpOltdLFxyXG4gICAgaXNzdWVDdXN0b21UYWcgOiBpc3N1ZURhdGE/LmN1c3RvbV90YWdzID8/IFtdLFxyXG4gICAgaXNzdWVSQzogaXNzdWVEYXRhPy5yY19pZCA/IHRoaXMubGlzdERhdGEucmNMaXN0LmZpbHRlcigoZTphbnkpID0+IGUucmNfaWQgPT09IGlzc3VlRGF0YT8ucmNfaWQpOltdLFxyXG4gICAgaXNzdWVUeXBlOiBbXSxcclxuICAgIHJlY29tbWVuZGVkQWN0aW9uc0F0dGFjaG1lbnRzOmlzc3VlRGF0YT8ucmVjb21tZW5kYXRpb24/Lmxlbmd0aCA/IGlzc3VlRGF0YT8ucmVjb21tZW5kYXRpb25bMF0/LmF0dGFjaG1lbnRzIDpbXSxcclxuICAgIGFzc29jaWF0ZWRSaXNrc0F0dGFjaG1lbnRzOltdLFxyXG4gICAgaXNBc3NpZ25Ub015c2VsZiA6ICBpc3N1ZURhdGE/LmFzc2lnbmVlX2lkID09PSB0aGlzLmN1cnJlbnRVc2VyLmlkICA/IHRydWUgOiBmYWxzZSxcclxuICAgIGVudHJ1c3RUbzogaXNzdWVEYXRhPy5hc3NpZ25lZV9pZCA9PT0gdGhpcy5jdXJyZW50VXNlci5pZCA/IFtdOiB0aGlzLmxpc3REYXRhLnVzZXJMaXN0LmZpbHRlcigoZTphbnkpID0+IGUubXlfbWVtYmVyX2lkID09PSBpc3N1ZURhdGE/LmFzc2lnbmVlX2lkICksXHJcbiAgICBpc3N1ZUR1ZURhdGU6IGlzc3VlRGF0YT8uZnJlcXVlbmN5X2RldGFpbHM/LmZyZXF1ZW5jeV9kYXRlPyAgbW9tZW50KGAke2lzc3VlRHVlRGF0ZVswXX0tJHtpc3N1ZUR1ZURhdGVbMV19LSR7aXNzdWVEdWVEYXRlWzJdfWApOicnLFxyXG4gICAgaXNzdWVEdWVUaW1lOiB0aGlzLmxvZ1NlcnZpY2UuY29udmVydEZyb20yNFRvMTJGb3JtYXQoaXNzdWVEYXRhLmZyZXF1ZW5jeV9kZXRhaWxzLmZyZXF1ZW5jeV90aW1lKSxcclxuICAgIGV4Y2VwdGlvblR5cGU6IGlzc3VlRGF0YS5leGNlcHRpb25fdHlwZSA/PyAxLFxyXG4gICAgaXNzdWVSaXNrUmF0aW5nOiBpc3N1ZURhdGEucmlza19jbGFzcyA/PyAxLFxyXG4gICAgaXNzdWVQcmlvcml0eTogaXNzdWVEYXRhLnByaW9yaXR5ID8/IDEsXHJcbiAgICBpc3N1ZVJlY29tbWVuZGF0aW9uOiBpc3N1ZURhdGE/LnJlY29tbWVuZGF0aW9uPy5sZW5ndGggPyBpc3N1ZURhdGE/LnJlY29tbWVuZGF0aW9uWzBdPy50ZXh0IDonJyxcclxuICAgIGlzc3VlQXNzb2NpYXRlZFJpc2s6IGlzc3VlRGF0YT8uYXNzb2NpYXRlZF9yaXNrPy5sZW5ndGggPyBpc3N1ZURhdGE/LmFzc29jaWF0ZWRfcmlza1swXT8udGV4dCA6JycsXHJcbiAgICBpc3N1ZUNDVXNlcnM6IGlzc3VlRGF0YS5vdmVyc2Vlcj8uY2NfZW1haWwubGVuZ3RoID8gYXdhaXQgdGhpcy5nZW5lcmF0ZU92ZXJzZWVyTGlzdCh0aGlzLmxpc3REYXRhLnVzZXJMaXN0LGlzc3VlRGF0YS5vdmVyc2Vlcj8uY2NfZW1haWwpIDpbXSxcclxuICAgIGZhaWx1cmVDQ1VzZXJzOiBpc3N1ZURhdGEub3ZlcnNlZXI/LmZhaWx1cmVfY2NfZW1haWwubGVuZ3RoID8gYXdhaXQgdGhpcy5nZW5lcmF0ZU92ZXJzZWVyTGlzdCh0aGlzLmxpc3REYXRhLnVzZXJMaXN0LGlzc3VlRGF0YS5vdmVyc2Vlcj8uZmFpbHVyZV9jY19lbWFpbCkgOltdLFxyXG4gICAgbGlua2VkQ29udHJvbFJpc2s6W10sXHJcbiAgICBsaW5rYWdlVHlwZSA6ICdSRVNQT05TSUJJTElUWSdcclxuICB9O1xyXG4gIGNvbnNvbGUubG9nKFwiQWZ0ZXIgSW5pdFwiLHRoaXMubG9nSXNzdWVGb3JtKVxyXG4gIGlmKHRoaXMubW9kZSA9PT0gJ0VESVQnKXtcclxuICAgIHRoaXMubG9nSXNzdWVGb3JtLmlzc3VlUkM/Lmxlbmd0aCA+IDAgPyB0aGlzLmlzUkNQcmVTZWxlY3RlZCA9IHRydWUgOiB0aGlzLmlzUkNQcmVTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgLy8gaXNzdWVEYXRhLmxpbmthZ2Vfb2JqZWN0Py5zb3VyY2UgPT09ICdHTE9CQUwnPyB0aGlzLmlzUkNNYW5kYXRvcnkgPSB0cnVlIDogdGhpcy5pc1JDTWFuZGF0b3J5ID0gZmFsc2U7XHJcbiAgICAoaXNzdWVEYXRhLmxpbmthZ2Vfb2JqZWN0Py5zb3VyY2UgPT09ICdHTE9CQUwnICYmIGlzc3VlRGF0YT8ucmNfaWQpID8gdGhpcy5pc1JDUHJlU2VsZWN0ZWQgPSBmYWxzZSA6IHRoaXMuaXNSQ1ByZVNlbGVjdGVkID0gdHJ1ZTtcclxuICAgIC8vIGlmKGlzc3VlRGF0YS5saW5rYWdlX29iamVjdD8uY29tcGxpYW5jZT8uaWRzPy5sZW5ndGgpe1xyXG4gICAgLy8gICB0aGlzLmxvZ0lzc3VlRm9ybS5saW5rZWRDb250cm9sUmlzayA9IGlzc3VlRGF0YS5saW5rYWdlX29iamVjdD8uY29tcGxpYW5jZT8uaWRzPz9bXSxcclxuICAgIC8vICAgdGhpcy5sb2dJc3N1ZUZvcm0ubGlua2FnZVR5cGUgPSAnUkVTUE9OU0lCSUxJVFknXHJcbiAgICAvLyAgIHRoaXMuaXNSaXNrQ29udHJvbFZpc2libGUgPSB0cnVlO1xyXG4gICAgLy8gfVxyXG4gICAgLy8gaWYoaXNzdWVEYXRhLmxpbmthZ2Vfb2JqZWN0Py5yaXNrPy5pZHM/Lmxlbmd0aCl7XHJcbiAgICAvLyAgIHRoaXMubG9nSXNzdWVGb3JtLmxpbmtlZENvbnRyb2xSaXNrID0gaXNzdWVEYXRhLmxpbmthZ2Vfb2JqZWN0Py5yaXNrPy5pZHM/P1tdLFxyXG4gICAgLy8gICB0aGlzLmxvZ0lzc3VlRm9ybS5saW5rYWdlVHlwZSA9ICdSSVNLJztcclxuICAgIC8vICAgdGhpcy5pc1Jpc2tDb250cm9sVmlzaWJsZSA9IHRydWU7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG4gIHRoaXMuc2V0T3B0aW9uYWxGaWVsZChpc3N1ZURhdGEpO1xyXG59XHJcbi8qKlxyXG4gKiBTZXRzIHRoZSB2aXNpYmlsaXR5IG9mIG9wdGlvbmFsIGZpZWxkc1xyXG4gKiBAcGFyYW0gaXNzdWVEYXRhICBpc3N1ZSBkYXRhIGZldGNoZWQgZnJvbSBBUElcclxuICovXHJcbnNldE9wdGlvbmFsRmllbGQoaXNzdWVEYXRhOmFueSl7XHJcbiAgdGhpcy5hZGRpdGlvbmFsT3B0aW9uU3RhdHVzID0ge1xyXG4gICAgRVhDRVBUSU9OX1RZUEU6IGlzc3VlRGF0YS5leGNlcHRpb25fdHlwZSA/IHRydWUgOiBmYWxzZSxcclxuICAgIEVWSURFTkNFOiBpc3N1ZURhdGEuZXZpZGVuY2UuZXZpZGVuY2VfZmxhZyA/IHRydWUgOmZhbHNlLFxyXG4gICAgUFJJT1JJVFk6ICBpc3N1ZURhdGEucHJpb3JpdHkgPyB0cnVlIDogZmFsc2UsXHJcbiAgICBJU1NVRV9UWVBFOiBmYWxzZSxcclxuICAgIEFTU09DSUFURURfUklTS1MgOiBpc3N1ZURhdGEuYXNzb2NpYXRlZF9yaXNrLmxlbmd0aCA/IChpc3N1ZURhdGEuYXNzb2NpYXRlZF9yaXNrWzBdLnRleHQubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlKTpmYWxzZSxcclxuICAgIE9WRVJTSUdIVCA6IChpc3N1ZURhdGEub3ZlcnNlZXIuY2NfZW1haWwubGVuZ3RoID4gMCB8fCBpc3N1ZURhdGEub3ZlcnNlZXIuZmFpbHVyZV9jY19lbWFpbC5sZW5ndGggPiAwKSA/IHRydWUgOiBmYWxzZVxyXG4gIH07XHJcbiAgdGhpcy5wb3B1bGF0ZU9wdGlvbmFsRmllbGRzKCk7XHJcbn1cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBsaXN0IG9mIHNlbGVjdGVkIG92ZXJzZWVyXHJcbiAqIEBwYXJhbSBhbGxVc2VyTGlzdCBsaXN0IG9mIGFsbCB1c2VycyBpbiB0aGUgb3JnYW56YXRpb25cclxuICogQHBhcmFtIG92ZXJzZWVyTGlzdCAgbGl0IG9mIHRoZSBvdmVyc2VlciB0aGF0IG5lZWRzIHRvIGJlIGZpbHRlcmVkXHJcbiAqIEByZXR1cm5zICBsaXN0IG9mIGFycmF5IGNvbnRhaW5pbmcgdGhlIHVzZXJzIG9iamVjdHNcclxuICovXHJcbmdlbmVyYXRlT3ZlcnNlZXJMaXN0KGFsbFVzZXJMaXN0OmFueSwgb3ZlcnNlZXJMaXN0OmFueSApe1xyXG4gcmV0dXJuIG92ZXJzZWVyTGlzdC5tYXAoKHVzZXI6YW55KT0+e1xyXG4gICAgY29uc3QgZm91bmRVc2VyID0gYWxsVXNlckxpc3QuZmluZCgoZWxlbWVudDphbnkpID0+IGVsZW1lbnQubXlfbWVtYmVyX2lkID09PSB1c2VyLm1lbWJlcl9pZCk7XHJcbiAgICBpZihmb3VuZFVzZXIpe1xyXG4gICAgICByZXR1cm4gZm91bmRVc2VyO1xyXG4gICAgfVxyXG4gIH0pXHJcbn1cclxuLyoqXHJcbiAqIFJlc2V0cyBpc3N1ZSBmb3JtXHJcbiAqL1xyXG5yZXNldElzc3VlRm9ybSgpe1xyXG4gICB0aGlzLnNjcm9sbFRvQm90dG9tID0gZmFsc2U7XHJcbiAgdGhpcy5sb2dJc3N1ZUZvcm0gPSB7XHJcbiAgICBpc3N1ZU5hbWUgOiAnJyxcclxuICAgIGV2aWRlbmNlUmVxdWlyZWQ6IDAsXHJcbiAgICBpc3N1ZURlc2NyaXB0aW9uOiAnJyxcclxuICAgIGlzc3VlRGVzY3JpcHRpb25BdHRhY2hlbWVudHM6IFtdLFxyXG4gICAgcmVjb21tZW5kZWRBY3Rpb25zQXR0YWNobWVudHM6W10sXHJcbiAgICBhc3NvY2lhdGVkUmlza3NBdHRhY2htZW50czpbXSxcclxuICAgIGlzc3VlQ2F0ZWdvcnk6IFtdLFxyXG4gICAgaXNzdWVDdXN0b21UYWcgOiBbXSxcclxuICAgIGlzc3VlUkM6IFtdLFxyXG4gICAgaXNzdWVUeXBlOiBbXSxcclxuICAgIGlzQXNzaWduVG9NeXNlbGYgOiBmYWxzZSxcclxuICAgIGVudHJ1c3RUbzogW10sXHJcbiAgICBpc3N1ZUR1ZURhdGU6ICcnLFxyXG4gICAgaXNzdWVEdWVUaW1lOiAnMTE6NTkgUE0nLFxyXG4gICAgZXhjZXB0aW9uVHlwZTogMSxcclxuICAgIGlzc3VlUmlza1JhdGluZzogMSxcclxuICAgIGlzc3VlUHJpb3JpdHk6IDEsXHJcbiAgICBpc3N1ZVJlY29tbWVuZGF0aW9uOiAnJyxcclxuICAgIGlzc3VlQXNzb2NpYXRlZFJpc2s6ICcnLFxyXG4gICAgaXNzdWVDQ1VzZXJzOiBbXSxcclxuICAgIGZhaWx1cmVDQ1VzZXJzOiBbXVxyXG4gIH07XHJcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5hZGRpdGlvbmFsT3B0aW9uU3RhdHVzKSl7XHJcbiAgICAgdGhpcy5hZGRpdGlvbmFsT3B0aW9uU3RhdHVzW2tleV0gPSBmYWxzZTtcclxuICB9XHJcbiAgdGhpcy5zbWlsZXlNZXNzYWdlID0gYFRoZSBpc3N1ZSBoYXMgYmVlbiByZXBvcnRlZC5gO1xyXG4gIHRoaXMubW9kZSA9ICdDUkVBVEUnO1xyXG4gIHRoaXMubW9kZUNoYW5nZS5lbWl0KHRoaXMubW9kZSk7XHJcbiAgdGhpcy5wb3B1bGF0ZU9wdGlvbmFsRmllbGRzKCk7XHJcbiAgdGhpcy5zZXRTZWxlY3RlZFJDKCk7XHJcbiB9XHJcbiBjaGVja0Rlc2NyaXB0aW9uKCkge1xyXG4gIGlmICh0aGlzLmxvZ0lzc3VlRm9ybS5pc3N1ZURlc2NyaXB0aW9uID09ICc8YnI+Jykge1xyXG4gICAgdGhpcy5sb2dJc3N1ZUZvcm0uaXNzdWVEZXNjcmlwdGlvbiA9ICcnO1xyXG4gIH1cclxuICBpZiAodGhpcy5sb2dJc3N1ZUZvcm0uaXNzdWVSZWNvbW1lbmRhdGlvbiA9PSAnPGJyPicpIHtcclxuICAgIHRoaXMubG9nSXNzdWVGb3JtLmlzc3VlUmVjb21tZW5kYXRpb24gPSAnJztcclxuICB9XHJcbiAgaWYgKHRoaXMubG9nSXNzdWVGb3JtLmlzc3VlQXNzb2NpYXRlZFJpc2sgPT0gJzxicj4nKSB7XHJcbiAgICB0aGlzLmxvZ0lzc3VlRm9ybS5pc3N1ZUFzc29jaWF0ZWRSaXNrID0gJyc7XHJcbiAgfVxyXG59XHJcbn1cclxuIl19
904
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLWFuLWlzc3VlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL2xvZy1hbi1pc3N1ZS9sb2ctYW4taXNzdWUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUdwSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDeEUsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFTakMsTUFBTSxPQUFPLG1CQUFtQjtJQTRLOUIsWUFBb0IsVUFBMkIsRUFBVSxXQUF3QixFQUFVLFlBQTBCLEVBQVUsUUFBeUI7UUFBcEksZUFBVSxHQUFWLFVBQVUsQ0FBaUI7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFVLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUF6Sy9JLHNCQUFpQixHQUFHO1lBQzNCLGdCQUFnQixFQUFFLElBQUk7WUFDdEIsa0JBQWtCLEVBQUUsRUFBRTtZQUN0QixJQUFJLEVBQUMsSUFBSTtZQUNULHNCQUFzQixFQUFFLEVBQUU7U0FDM0IsQ0FBQztRQUNPLGlCQUFZLEdBQUU7WUFDckIsV0FBVyxFQUFHLElBQUk7WUFDaEIsYUFBYSxFQUFHLEVBQUU7WUFDbEIsSUFBSSxFQUFFLElBQUk7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QUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztTQUM1QztRQUNELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsSUFBSSxNQUFNLEVBQUU7WUFDbkQsSUFBSSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUM7U0FDNUM7SUFDSCxDQUFDOzs7WUF6M0JBLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsa0JBQWtCO2dCQUM1QixzMjVDQUE0Qzs7YUFFN0M7OztZQWZRLGVBQWU7WUFEZixXQUFXO1lBTVgsWUFBWTtZQUNaLGVBQWU7Ozt5QkFXckIsS0FBSztzQkFDTCxLQUFLO2dDQUNMLEtBQUs7MkJBTUwsS0FBSzttQkFNTCxLQUFLO3FCQUNMLEtBQUs7bUNBQ0wsS0FBSzs0QkFDTCxNQUFNOzZCQUNOLE1BQU07NEJBQ04sTUFBTTt5QkFDTixNQUFNO2dDQUNOLE1BQU07eUJBRU4sU0FBUyxTQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMb2dJc3N1ZVNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9sb2ctaXNzdWUuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEVkaXRvckNvbmZpZyB9IGZyb20gJ3Zjb21wbHktZWRpdG9yJztcclxuaW1wb3J0IHsgRGF0ZVBpY2tlckNvbXBvbmVudCB9IGZyb20gJ25nMi1kYXRlLXBpY2tlcic7XHJcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCB7IFVpS2l0U2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL3VpLWtpdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU25hY2tCYXJTZXJ2aWNlIH0gZnJvbSAnLi4vdWkta2l0L3NuYWNrLWJhci9zbmFjay1iYXIuc2VydmljZSc7XHJcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBJc3N1ZUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL2lzc3VlLWRhdGEnO1xyXG5pbXBvcnQgeyBUSElTX0VYUFIgfSBmcm9tICdAYW5ndWxhci9jb21waWxlci9zcmMvb3V0cHV0L291dHB1dF9hc3QnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtbG9nLWFuLWlzc3VlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbG9nLWFuLWlzc3VlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9sb2ctYW4taXNzdWUuY29tcG9uZW50Lmxlc3MnLCAnLi4vZm9ybXMubGVzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMb2dBbklzc3VlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xyXG4gIEBJbnB1dCgpIG9wZW5lZEZyb20gITogYW55O1xyXG4gIEBJbnB1dCgpIGlzc3VlSWQgITogYW55O1xyXG4gIEBJbnB1dCgpIHJlcG9uc2liaWxpdHlEYXRhID0geyAvLyBvbmx5IHVzZWQgYnkgbG9nIGFuIGlzc3VlXHJcbiAgICByZXNwb25zaWJpbGl0eUlkOiBudWxsLFxyXG4gICAgcmVzcG9uc2liaWxpdHlOYW1lOiAnJyxcclxuICAgIHJjSWQ6bnVsbCxcclxuICAgIHJlc3BvbnNpYmlsaXR5T2JqZWN0SWQ6ICcnXHJcbiAgfTtcclxuICBASW5wdXQoKSBpc3N1ZURldGFpbHMgPXtcclxuICAgIGF1ZGl0UGxhbklkIDogbnVsbCxcclxuICAgICAgYXVkaXRQbGFuTmFtZSAgOicnLFxyXG4gICAgICByY0lkOiBudWxsLFxyXG4gICAgICBhdWRpdE9iaklkOm51bGxcclxuICB9XHJcbiAgQElucHV0KCkgbW9kZSA9ICdDUkVBVEUnO1xyXG4gIEBJbnB1dCgpIGNvbmZpZyAhOiBJc3N1ZUNvbmZpZ3VyYXRpb247XHJcbiAgQElucHV0KCkgcmVzcG9uc2liaWxpdGllc0RhdGE6IGFueTtcclxuICBAT3V0cHV0KCkgcGlja2VyQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcG9wdWxhdGVPcHRpb24gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNsb3NlV29ya2Zsb3cgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG1vZGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGRpc2Nvbm5lY3RSZWZyZXNoID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIGN1cnJlbnRVc2VyICE6IGFueTtcclxuICBAVmlld0NoaWxkKCdkYXRlUGlja2VyJykgZGF0ZVBpY2tlciE6IERhdGVQaWNrZXJDb21wb25lbnQ7XHJcbiAgc2Nyb2xsVG9Cb3R0b20gPSBmYWxzZTtcclxuICBkYXRlUGlja2VyT3ZlcmxheSA9IGZhbHNlO1xyXG4gIHNob3dEYXRlRXJyb3IgPSBmYWxzZTtcclxuICBzZWxlY3RlZERhdGU6IGFueTtcclxuICBzaG93U21pbGV5ID0gZmFsc2U7XHJcbiAgbG9hZGVyID0gZmFsc2U7XHJcbiAgc21pbGV5TWVzc2FnZSA9IGBUaGUgaXNzdWUgaGFzIGJlZW4gcmVwb3J0ZWQuYDtcclxuICBpc3N1ZURhdGEgITogYW55O1xyXG4gIGlzUmlza0NvbnRyb2xMb2FkaW5nID0gZmFsc2U7XHJcbiAgYWN0aW9uQnV0dG9ucyA9IFtcclxuICAgIHsgYnV0dG9uVGV4dDogJ1JlcG9ydCBNb3JlIElzc3VlcycsIGNsYXNzOiAnd2hpdGUtYnRuJywgaWQ6ICdhZGRNb3JlJyB9LFxyXG4gICAgeyBidXR0b25UZXh0OiAnVmlldyBJc3N1ZScsIGNsYXNzOiAnYmx1ZS1idG4nLCBpZDogJ3ZpZXdJc3N1ZScgfSxcclxuICBdO1xyXG4gIGNyZWF0ZWREYXRhICE6IGFueTtcclxuICBkZXNjcmlwdGlvbjogRWRpdG9yQ29uZmlnID0ge1xyXG4gICAgLy8gbW9kZTogJ3ByaW1lJyxcclxuICAgIGNvbG9yUGFsZXR0ZTogdHJ1ZSxcclxuICAgIGxpbms6IHRydWUsXHJcbiAgICBwbGFjZWhvbGRlcjogJ0Rlc2NyaXB0aW9uJyxcclxuICB9O1xyXG5cclxuICBkYXRlQ29uZmlnID0ge1xyXG4gICAgZGlzYWJsZUtleXByZXNzOiB0cnVlLFxyXG4gICAgZm9ybWF0OiAnREQgTU1NIFlZWVknLFxyXG4gICAgdW5TZWxlY3RPbkNsaWNrOiB0cnVlLFxyXG4gICAgb3Blbk9uQ2xpY2s6ZmFsc2UsXHJcbiAgICBvcGVuT25Gb2N1czpmYWxzZSxcclxuICAgIG1pbjogbmV3IERhdGUoKS5nZXREYXRlKCkudG9TdHJpbmcoKSxcclxuICB9O1xyXG4gIGxpc3REYXRhOmFueSA9IHtcclxuICAgIGlzc3VlVHlwZUxpc3Q6IFtdLFxyXG4gICAgdXNlckxpc3Q6IFtdLFxyXG4gICAgY2F0ZWdvcnlMaXN0OiBbXSxcclxuICAgIHJjTGlzdDogW10sXHJcbiAgICBsaW5rYWdlTGlzdDpbXVxyXG4gIH07XHJcbiAgbG9nSXNzdWVGb3JtOiBhbnkgPSB7XHJcbiAgICBpc3N1ZU5hbWU6ICcnLFxyXG4gICAgZXZpZGVuY2VSZXF1aXJlZDogMCxcclxuICAgIGlzc3VlRGVzY3JpcHRpb246ICcnLFxyXG4gICAgaXNzdWVEZXNjcmlwdGlvbkF0dGFjaGVtZW50czogW10sXHJcbiAgICBpc3N1ZUNhdGVnb3J5OiBbXSxcclxuICAgIGlzc3VlQ3VzdG9tVGFnOiBbXSxcclxuICAgIGlzc3VlUkM6IFtdLFxyXG4gICAgaXNzdWVUeXBlOiAnaXNzdWUnLFxyXG4gICAgaXNBc3NpZ25Ub015c2VsZjogZmFsc2UsXHJcbiAgICBlbnRydXN0VG86IFtdLFxyXG4gICAgaXNzdWVEdWVEYXRlOiAnJyxcclxuICAgIGlzc3VlRHVlVGltZTogJzExOjU5IHBtJyxcclxuICAgIGV4Y2VwdGlvblR5cGU6IDEsXHJcbiAgICBpc3N1ZVJpc2tSYXRpbmc6IDEsXHJcbiAgICBpc3N1ZVByaW9yaXR5OiAxLFxyXG4gICAgaXNzdWVSZWNvbW1lbmRhdGlvbjogJycsXHJcbiAgICByZWNvbW1lbmRlZEFjdGlvbnNBdHRhY2htZW50czpbXSxcclxuICAgIGlzc3VlQXNzb2NpYXRlZFJpc2s6ICcnLFxyXG4gICAgYXNzb2NpYXRlZFJpc2tzQXR0YWNobWVudHM6W10sXHJcbiAgICBpc3N1ZUNDVXNlcnM6IFtdLFxyXG4gICAgZmFpbHVyZUNDVXNlcnM6IFtdLFxyXG4gICAgbGlua2VkQ29udHJvbFJpc2s6W10sXHJcbiAgICBsaW5rYWdlVHlwZSA6ICdSSVNLJyxcclxuXHJcbiAgfTtcclxuICBBdHRhY2htZW50VHJhY2s6IGFueSA9IFtbXSxbXSxbXV07XHJcbiAgYWRkaXRpb25hbE9wdGlvblN0YXR1czogYW55ID0ge1xyXG4gICAgRVhDRVBUSU9OX1RZUEU6IGZhbHNlLFxyXG4gICAgRVZJREVOQ0U6IGZhbHNlLFxyXG4gICAgUFJJT1JJVFk6IGZhbHNlLFxyXG4gICAgSVNTVUVfVFlQRTogZmFsc2UsXHJcbiAgICBBU1NPQ0lBVEVEX1JJU0tTOiBmYWxzZSxcclxuICAgIE9WRVJTSUdIVDogZmFsc2VcclxuICB9O1xyXG4gIHJpc2tDbGFzc2lmaWNhdGlvbiA9IFtcclxuICAgIHsgbmFtZTogJ0xPVycsIHZhbHVlOiAxLCBjbGFzczogJ2xvdycgfSxcclxuICAgIHsgbmFtZTogJ0xPVy1NZWRpdW0nLCB2YWx1ZTogMiwgY2xhc3M6ICdsb3ctbWVkJyB9LFxyXG4gICAgeyBuYW1lOiAnTWVkaXVtLUhpZ2gnLCB2YWx1ZTogMywgY2xhc3M6ICdtZWQtaGlnaCcgfSxcclxuICAgIHsgbmFtZTogJ0hpZ2gnLCB2YWx1ZTogNCwgY2xhc3M6ICdoaWdoJyB9XHJcbiAgXTtcclxuICByaXNrUHJvcml0eSA9IFtcclxuICAgIHsgbmFtZTogJ0xPVycsIHZhbHVlOiAxLCBjbGFzczogJ2xvdycgfSxcclxuICAgIHsgbmFtZTogJ01FRElVTScsIHZhbHVlOiAyLCBjbGFzczogJ2xvdy1tZWQnIH0sXHJcbiAgICB7IG5hbWU6ICdISUdIJywgdmFsdWU6IDMsIGNsYXNzOiAnaGlnaCcgfSxcclxuXHJcbiAgXTtcclxuXHJcbiAgc2lkZVNlbGVjdG9yRWxlbWVudHM6IGFueSA9IFsnSVNTVUVfQ0FURUdPUlknLCAnSVNTVUVfUkMnLCAnSVNTVUVfV0hPJywgJ0lTU1VFX1RZUEUnLCAnSVNTVUVfQ0MnLCAnSVNTVUVfRkNDJywnSVNTVUVfQ09OVFJPTF9SSVNLJ107XHJcbiAgc2VsZWN0b3JDb25maWcgPSB7XHJcbiAgICBJU1NVRV9DQVRHT1JZOiB7XHJcbiAgICAgIHBhbmVsVGl0bGU6ICdTZWxlY3QgSXNzdWUgQ2F0ZWdvcnknLFxyXG4gICAgICBmbG9hdGluZ1RleHRTaW5ndWxhcjogJ0NhdGVnb3J5IHNlbGVjdGVkJyxcclxuICAgICAgc2VhcmNoUGxhY2Vob2xkZXI6ICdTZWFyY2ggSXNzdWUgQ2F0ZWdvcnknLFxyXG4gICAgICBzZWFyY2hFbmFibGVkOiB0cnVlLFxyXG4gICAgICBub0RhdGFUZXh0OiAnTm8gQ2F0ZWdvcmllcyBGb3VuZCdcclxuICAgIH0sXHJcbiAgICBJU1NVRV9SQzoge1xyXG4gICAgICBwYW5lbFRpdGxlOiAnU2VsZWN0IFJlc3BvbnNpYmlsaXR5IENlbnRlcicsXHJcbiAgICAgIGZsb2F0aW5nVGV4dFNpbmd1bGFyOiAnUmVzcG9uc2liaWx0eSBjZW50ZXIgc2VsZWN0ZWQnLFxyXG4gICAgICBzZWFyY2hQbGFjZWhvbGRlcjogJ1NlYXJjaCBSZXNwb25zaWJpbGl0eSBDZW50ZXInLFxyXG4gICAgICBzZWFyY2hFbmFibGVkOiB0cnVlLFxyXG4gICAgICBub0RhdGFUZXh0OiAnTm8gUmVzcG9uc2liaWxpdHkgQ2VudGVycyBGb3VuZCdcclxuICAgIH0sXHJcbiAgICBJU1NVRV9XSE86IHtcclxuICAgICAgcGFuZWxUaXRsZTogJ1NlbGVjdCBVc2VyJyxcclxuICAgICAgZmxvYXRpbmdUZXh0U2luZ3VsYXI6ICdVc2VyIHNlbGVjdGVkJyxcclxuICAgICAgc2VhcmNoUGxhY2Vob2xkZXI6ICdTZWFyY2ggVXNlcicsXHJcbiAgICAgIHNlYXJjaEVuYWJsZWQ6IHRydWUsXHJcbiAgICAgIG5vRGF0YVRleHQ6ICdObyBVc2VycyBGb3VuZCdcclxuICAgIH0sXHJcbiAgICBJU1NVRV9UWVBFOiB7XHJcbiAgICAgIHBhbmVsVGl0bGU6ICdTZWxlY3QgSXNzdWUgVHlwZScsXHJcbiAgICAgIGZsb2F0aW5nVGV4dFNpbmd1bGFyOiAnSXNzdWUgVHlwZSBzZWxlY3RlZCcsXHJcbiAgICAgIHNlYXJjaFBsYWNlaG9sZGVyOiAnU2VhcmNoIElzc3VlIFR5cGUnLFxyXG4gICAgICBzZWFyY2hFbmFibGVkOiB0cnVlLFxyXG4gICAgICBub0RhdGFUZXh0OiAnTm8gSXNzdWUgVHlwZXMgRm91bmQnXHJcbiAgICB9LFxyXG4gICAgSVNTVUVfQ0M6IHtcclxuICAgICAgcGFuZWxUaXRsZTogJ1NlbGVjdCB1c2VyKHMpJyxcclxuICAgICAgZmxvYXRpbmdUZXh0U2luZ3VsYXI6ICdVc2VyIHNlbGVjdGVkJyxcclxuICAgICAgc2VhcmNoUGxhY2Vob2xkZXI6ICdTZWFyY2ggVXNlcicsXHJcbiAgICAgIHNlYXJjaEVuYWJsZWQ6IHRydWUsXHJcbiAgICAgIHNlbGVjdEFsbEVuYWJsZWQ6IHRydWUsXHJcbiAgICAgIG5vRGF0YVRleHQ6ICdObyBVc2VycyBGb3VuZCdcclxuICAgIH0sXHJcbiAgICBJU1NVRV9GQ0M6IHtcclxuICAgICAgcGFuZWxUaXRsZTogJ1NlbGVjdCB1c2VyKHMpJyxcclxuICAgICAgZmxvYXRpbmdUZXh0U2luZ3VsYXI6ICdVc2VyIHNlbGVjdGVkJyxcclxuICAgICAgc2VhcmNoUGxhY2Vob2xkZXI6ICdTZWFyY2ggVXNlcicsXHJcbiAgICAgIHNlYXJjaEVuYWJsZWQ6IHRydWUsXHJcbiAgICAgIHNlbGVjdEFsbEVuYWJsZWQ6IHRydWUsXHJcbiAgICAgIG5vRGF0YVRleHQ6ICdObyBVc2VycyBGb3VuZCdcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBmaWVsZHNXaXRoRXJyb3I6IGFueSA9IFtdO1xyXG4gIGhpZGRlbkxpc3Q6IGFueVtdID0gW107XHJcblxyXG4gIGFjdGl2ZUZpZWxkID0gJyc7XHJcbiAgYWN0aXZlU2VsZWN0b3IgPSAnJztcclxuICBsaXN0TG9hZGluZ1N0YXR1czogYW55ID0gW107XHJcbiAgY3VycmVudFRpbWUgPSAnJztcclxuICAgIC8qKlxyXG4gICAqIGlzUkNQcmVTZWxlY3RlZCxpc1JDVmlzaWJsZSBhcmUgdmFyaWFibGUgdXNlZCB0byBzZXQgdGhlIHZpc2liaWxpdHkgb2YgcmMgZmllbGQgYW5kIGVkaXQgYnV0dG9uIGluIGNlcnRhaW4gY29uZGl0aW9uc1xyXG4gICAqL1xyXG4gIGlzUkNQcmVTZWxlY3RlZCA9IGZhbHNlO1xyXG4gIGlzUkNWaXNpYmxlID0gdHJ1ZVxyXG4gIGlzUkNNYW5kYXRvcnkgPSBmYWxzZTtcclxuICBkYXRhRm9yRWRpdCAhOmFueTtcclxuICBpc1Jpc2tDb250cm9sVmlzaWJsZSA9IGZhbHNlO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9nU2VydmljZTogTG9nSXNzdWVTZXJ2aWNlLCBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSwgcHJpdmF0ZSB1aUtpdFNlcnZpY2U6IFVpS2l0U2VydmljZSwgcHJpdmF0ZSBzbmFja0JhcjogU25hY2tCYXJTZXJ2aWNlKSB7IH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY3VycmVudFRpbWUgPSB0aGlzLmdldEN1cnJlbnRUaW1lKCk7XHJcbiAgICB0aGlzLnBpY2tlckNoYW5nZWQuZW1pdChmYWxzZSk7XHJcbiAgICB0aGlzLnNldFVzZXJEZXRhaWxzKCk7XHJcbiAgICB0aGlzLmZldGNoSXNzdWVUeXBlcygpO1xyXG4gICAgdGhpcy5mZXRjaFVzZXJMaXN0KCk7XHJcbiAgICB0aGlzLmZldGNoQ2F0ZWdvcnlMaXN0KCk7XHJcbiAgICB0aGlzLmZldGNoUkNMaXN0KCk7XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldE9yZ2FuaXphdGlvbkRldGFpbHMoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGlmICghcmVzLmVuYWJsZV9yaXNrY2xhc3MpIHtcclxuICAgICAgICB0aGlzLmhpZGRlbkxpc3QucHVzaCgnUklTS19DTEFTU0lGSUNBVElPTicpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICB0aGlzLmZldGNoQ29udHJvbFJpc2tzKCk7XHJcbiAgICAgdGhpcy5kZWNpZGVSQ21hbmRhdG9yeSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRUaW1lID0gdGhpcy5nZXRDdXJyZW50VGltZSgpO1xyXG4gIH1cclxuXHJcbiAgZGVjaWRlUkNtYW5kYXRvcnkoKXtcclxuICAgIHRoaXMuaXNSQ01hbmRhdG9yeSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcblxyXG4gIHNldEN1cnJlbnRUaW1lKCkge1xyXG4gICAgdGhpcy5jdXJyZW50VGltZSA9IHRoaXMuZ2V0Q3VycmVudFRpbWUoKTtcclxuICB9XHJcbiAgZ2V0Q3VycmVudFRpbWUoKSB7XHJcbiAgICBsZXQgdG9kYXkgPSBuZXcgRGF0ZSgpO1xyXG4gICAgaWYgKHRvZGF5LmdldERhdGUoKSA9PT0gbmV3IERhdGUodGhpcy5sb2dJc3N1ZUZvcm0uaXNzdWVEdWVEYXRlKS5nZXREYXRlKCkpIHtcclxuICAgICAgaWYgKHRvZGF5LmdldEhvdXJzKCkgPCAxMiAmJiB0b2RheS5nZXRNaW51dGVzKCkgPCA1OSAmJiB0b2RheS5nZXRTZWNvbmRzKCkgPCA1OSkge1xyXG4gICAgICAgIHJldHVybiBgJHsodG9kYXkuZ2V0SG91cnMoKSA8IDEwKSA/ICcwJyArIHRvZGF5LmdldEhvdXJzKCkgOiB0b2RheS5nZXRIb3VycygpfTokeyh0b2RheS5nZXRNaW51dGVzKCkgPCAxMCkgPyAnMCcgKyB0b2RheS5nZXRNaW51dGVzKCkgOiB0b2RheS5nZXRNaW51dGVzKCl9IGFtYDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gYCR7KCh0b2RheS5nZXRIb3VycygpIC0gMTIpIDwgMTApID8gJzAnICsgKHRvZGF5LmdldEhvdXJzKCkgLSAxMikgOiAodG9kYXkuZ2V0SG91cnMoKSAtIDEyKX06JHsodG9kYXkuZ2V0TWludXRlcygpIDwgMTApID8gJzAnICsgdG9kYXkuZ2V0TWludXRlcygpIDogdG9kYXkuZ2V0TWludXRlcygpfSBwbWA7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnMDA6MDAgYW0nO1xyXG4gICAgfVxyXG4gIH1cclxuICBzZXRVc2VyRGV0YWlscygpIHtcclxuICAgIHRoaXMuY3VycmVudFVzZXIgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJEZXRhaWxzKCkudXNlcjtcclxuICB9XHJcbiAgZmV0Y2hJc3N1ZVR5cGVzKCkge1xyXG4gICAgdGhpcy5saXN0TG9hZGluZ1N0YXR1c1swXSA9IGZhbHNlO1xyXG4gICAgdGhpcy5jaGVja0FsbExpc3RMb2FkZWQoKTtcclxuICAgIHRoaXMubG9nU2VydmljZS5nZXRJc3N1ZVR5cGVzKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmxpc3RMb2FkaW5nU3RhdHVzWzBdID0gdHJ1ZTtcclxuICAgICAgdGhpcy5saXN0RGF0YS5pc3N1ZVR5cGVMaXN0ID0gcmVzO1xyXG4gICAgICB0aGlzLmNoZWNrQWxsTGlzdExvYWRlZCgpO1xyXG4gICAgfSwgKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5saXN0TG9hZGluZ1N0YXR1c1swXSA9IHRydWU7XHJcbiAgICAgIHRoaXMuY2hlY2tBbGxMaXN0TG9hZGVkKCk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgZmV0Y2hVc2VyTGlzdCgpIHtcclxuICAgIHRoaXMubGlzdExvYWRpbmdTdGF0dXNbMV0gPSBmYWxzZTtcclxuICAgIHRoaXMubG9nU2VydmljZS5nZXRPcmdQZW9wbGUoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMubGlzdExvYWRpbmdTdGF0dXNbMV0gPSB0cnVlO1xyXG4gICAgICB0aGlzLmxpc3REYXRhLnVzZXJMaXN0ID0gcmVzO1xyXG4gICAgICB0aGlzLmNoZWNrQWxsTGlzdExvYWRlZCgpO1xyXG4gICAgfSwgKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5saXN0TG9hZGluZ1N0YXR1c1sxXSA9IHRydWU7XHJcbiAgICAgIHRoaXMuY2hlY2tBbGxMaXN0TG9hZGVkKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGZldGNoQ2F0ZWdvcnlMaXN0KCkge1xyXG4gICAgdGhpcy5saXN0TG9hZGluZ1N0YXR1c1syXSA9IGZhbHNlO1xyXG4gICAgdGhpcy5sb2dTZXJ2aWNlLmdldElzc3VlQ2F0ZWdvcmllcygpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5saXN0TG9hZGluZ1N0YXR1c1syXSA9IHRydWU7XHJcbiAgICAgIHRoaXMubGlzdERhdGEuY2F0ZWdvcnlMaXN0ID0gcmVzPy5kYXRhO1xyXG4gICAgICB0aGlzLmxpc3REYXRhLmNhdGVnb3J5TGlzdCA9IHRoaXMubGlzdERhdGEuY2F0ZWdvcnlMaXN0LmZpbHRlcigoZTphbnkpPT4gZT8uY2F0ZWdvcnlfbmFtZSAhPT0gJ1VuY2F0ZWdvcml6ZWQnKVxyXG4gICAgICB0aGlzLmNoZWNrQWxsTGlzdExvYWRlZCgpO1xyXG4gICAgfSwgKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5saXN0TG9hZGluZ1N0YXR1c1syXSA9IHRydWU7XHJcbiAgICAgIHRoaXMuY2hlY2tBbGxMaXN0TG9hZGVkKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGZldGNoUkNMaXN0KCkge1xyXG4gICAgdGhpcy5saXN0TG9hZGluZ1N0YXR1c1szXSA9IGZhbHNlO1xyXG4gICAgdGhpcy5sb2dTZXJ2aWNlLmdldFJlc3BvbnNpYmlsaXR5Q2VudGVyTGlzdCgpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5saXN0TG9hZGluZ1N0YXR1c1szXSA9IHRydWU7XHJcbiAgICAgIHRoaXMubGlzdERhdGEucmNMaXN0ID0gcmVzO1xyXG4gICAgICB0aGlzLmNoZWNrQWxsTGlzdExvYWRlZCgpO1xyXG4gICAgICB0aGlzLnNldFNlbGVjdGVkUkMoKTtcclxuICAgIH0sIChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMubGlzdExvYWRpbmdTdGF0dXNbM10gPSB0cnVlO1xyXG4gICAgICB0aGlzLmNoZWNrQWxsTGlzdExvYWRlZCgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRTZWxlY3RlZFJDKCl7XHJcbiAgICBpZih0aGlzLnJlcG9uc2liaWxpdHlEYXRhPy5yY0lkICYmIHRoaXMub3BlbmVkRnJvbSA9PT0gJ0NPTVBMSUFOQ0VfV09SS1JPT00nKXtcclxuICAgICAgdGhpcy5sb2dJc3N1ZUZvcm0uaXNzdWVSQyA9ICB0aGlzLnJlcG9uc2liaWxpdHlEYXRhLnJjSWQgPyB0aGlzLmxpc3REYXRhLnJjTGlzdC5maWx0ZXIoKGU6YW55KSA9PiBlLnJjX2lkID09PSB0aGlzLnJlcG9uc2liaWxpdHlEYXRhLnJjSWQpOltdO1xyXG4gICAgICBjb25zb2xlLmxvZyhcInRoaXMubG9nSXNzdWVGb3JtLmlzc3VlUkMgID09PlwiLHRoaXMubG9nSXNzdWVGb3JtLmlzc3VlUkMsIHRoaXMubGlzdERhdGEucmNMaXN0ICwgIHRoaXMucmVwb25zaWJpbGl0eURhdGEucmNJZCwgdGhpcy5saXN0RGF0YS5yY0xpc3QuZmlsdGVyKChlOmFueSkgPT4gZS5yY19pZCA9PT0gdGhpcy5yZXBvbnNpYmlsaXR5RGF0YS5yY0lkKSlcclxuICAgIH1lbHNlIGlmKHRoaXMuaXNzdWVEZXRhaWxzPy5yY0lkICYmIFsnQVVESVRfV09SS1JPT00nLCdWSUVXX0FVRElUX0VYRUNVVElPTl9TVU1NQVJZJywnRVhFQ1VURV9BVURJVF9QTEFOJ10uaW5jbHVkZXModGhpcy5vcGVuZWRGcm9tKSl7XHJcbiAgICAgIHRoaXMubG9nSXNzdWVGb3JtLmlzc3VlUkMgPSB0aGlzLmlzc3VlRGV0YWlscz8ucmNJZCA/IHRoaXMubGlzdERhdGEucmNMaXN0LmZpbHRlcigoZTphbnkpID0+IGUucmNfaWQgPT09IHRoaXMuaXNzdWVEZXRhaWxzPy5yY0lkKTpbXTtcclxuICAgIH1cclxuXHJcbiAgICBpZih0aGlzLmxvZ0lzc3VlRm9ybT8uaXNzdWVSQz8ubGVuZ3RoKXtcclxuICAgICAgdGhpcy5pc1JDUHJlU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIHRoaXMuaXNSQ1ByZVNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhcInRoaXMucmVwb25zaWJpbGl0eURhdGF0aGlzLnJlcG9uc2liaWxpdHlEYXRhdGhpcy5yZXBvbnNpYmlsaXR5RGF0YSA9PT0+XCIsIHRoaXMucmVwb25zaWJpbGl0eURhdGEpXHJcbiAgICBpZighKHRoaXMucmVwb25zaWJpbGl0eURhdGE/LnJjSWQgfHwgdGhpcy5pc3N1ZURldGFpbHM/LnJjSWQpICYmIFsnQ09NUExJQU5DRV9XT1JLUk9PTScsJ0FVRElUX1dPUktST09NJywnVklFV19BVURJVF9FWEVDVVRJT05fU1VNTUFSWScsJ0VYRUNVVEVfQVVESVRfUExBTiddLmluY2x1ZGVzKHRoaXMub3BlbmVkRnJvbSkpe1xyXG4gICAgdGhpcy5pc1JDVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIHRoaXMuaXNSQ1Zpc2libGUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGZldGNoQ29udHJvbFJpc2tzKCl7XHJcblxyXG4gICAgICBpZihbJ1ZJRVdfQVVESVRfRVhFQ1VUSU9OX1NVTU1BUlknLCdFWEVDVVRFX0FVRElUX1BMQU4nXS5pbmNsdWRlcyh0aGlzLm9wZW5lZEZyb20pKXtcclxuXHJcbiAgICAgICAgdGhpcy5nZXRMaW5rYWdlKHRoaXMuaXNzdWVEZXRhaWxzPy5hdWRpdE9iaklkLHRoaXMubG9nSXNzdWVGb3JtLmxpbmthZ2VUeXBlKVxyXG4gICAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0TGlua2FnZShhdWRpdElkOmFueSwgdHlwZTpzdHJpbmcpe1xyXG4gICAgdGhpcy5pc1Jpc2tDb250cm9sTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmxvZ1NlcnZpY2UuZ2V0Q29udHJvbFJpc2soYXVkaXRJZCx0eXBlKT8uc3Vic2NyaWJlKChkYXRhOmFueSk9PntcclxuICAgICAgdGhpcy5saXN0RGF0YS5saW5rYWdlTGlzdCA9IFsuLi50aGlzLmxpc3REYXRhLmxpbmthZ2VMaXN0LC4uLmRhdGFdO1xyXG4gICAgICB0aGlzLmxpc3REYXRhLmxpbmthZ2VMaXN0ID0gIHRoaXMubGlzdERhdGEubGlua2FnZUxpc3QuZmlsdGVyKCh0aGluZzphbnksIGluZGV4OmFueSwgc2VsZjphbnkpID0+XHJcbiAgaW5kZXggPT09IHNlbGYuZmluZEluZGV4KCh0OmFueSkgPT4gKFxyXG4gICAgdC5pdGVtSWQgPT09IHRoaW5nLml0ZW1JZCAmJiB0Lml0ZW1UeXBlID09PSB0aGluZy5pdGVtVHlwZVxyXG4gICkpXHJcbilcclxuICAgICAgdGhpcy5pc1Jpc2tDb250cm9sTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICBjb25zb2xlLmxvZyhcImxpbmthZ2VcIix0aGlzLmxpc3REYXRhKVxyXG4gICAgIH0sKGVycm9yOmFueSk9PntcclxuICAgICAgdGhpcy5pc1Jpc2tDb250cm9sTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgIH0pXHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFRoaXMgZnVuY3Rpb2ogY2hlY2sgd2VhdGhlciBhbGwgdGhlIHJlcXVpcmVkIGxpc3RzIGFyZSBsb2FkZWRcclxuICAgKiBJZiBsb2FkZWQgaGlkZXMgdGhlIGxvYWRlciBvdGhlcndpc2Ugc2hvd3MgdGhlIGxvYWRlci5cclxuICAgKi9cclxuICBjaGVja0FsbExpc3RMb2FkZWQoKSB7XHJcbiAgICBpZiAodGhpcy5saXN0TG9hZGluZ1N0YXR1cy5pbmNsdWRlcyhmYWxzZSkpIHtcclxuICAgICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IGZhbHNlO1xyXG4gICAgICBpZih0aGlzLm1vZGU9PT0nRURJVCcpe1xyXG4gICAgICAgIHRoaXMuZmV0Y2hJc3N1ZURldGFpbHMoKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlcyBlcnJvciBmcm9tIHRoZSBmaWVscyB3aXRoIGVycm9yIHRvIHJlbW92ZSB0aGUgZXJyb3IgbWVzc2FnIGZyb20gdGhlIFVJXHJcbiAgICogQHBhcmFtIGVycm9yS2V5IGVycm9yIElkZW50aWZpZXIgdXNlZCB0byBzaG93IGVycm9yIGluIHNwZWNpZmljIGZpZWxkcy5cclxuICAgKi9cclxuICByZW1vdmVFcnJvcihlcnJvcktleTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZmllbGRzV2l0aEVycm9yLmluZGV4T2YoZXJyb3JLZXkpO1xyXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgdGhpcy5maWVsZHNXaXRoRXJyb3Iuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH1cclxuICB9XHJcbiAgb3BlbkRhdGVQaWNrZXIoKSB7XHJcbiAgICB0aGlzLmRhdGVQaWNrZXIuYXBpLm9wZW4oKTtcclxuICAgIHRoaXMuZGF0ZVBpY2tlck92ZXJsYXkgPSB0cnVlO1xyXG4gICAgdGhpcy5zZXRBY3RpdmVGaWVsZFNlbGVjdG9yKCdJU1NVRV9EQVRFX1RJTUUnLCAnSVNTVUVfREFURV9USU1FJyk7XHJcbiAgfVxyXG4gIGNsb3NlRGF0ZVBpY2tlcihldnQ6IGFueSkge1xyXG4gICAgaWYgKCFldnQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGV2dD8uZGF0ZT8uX2QpIHtcclxuICAgICAgbGV0IG1vbnRoQXJyYXkgPSBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdKdW4nLCAnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEZWMnXVxyXG4gICAgICBjb25zdCBkYXRlVmFsdWUgPSBuZXcgRGF0ZShldnQ/LmRhdGU/Ll9kKS5nZXREYXRlKCk7XHJcbiAgICAgIGNvbnN0IG1vbnRoVmFsdWUgPSBtb250aEFycmF5W25ldyBEYXRlKGV2dD8uZGF0ZT8uX2QpLmdldE1vbnRoKCldO1xyXG4gICAgICBjb25zdCB5ZWFyVmFsdWUgPSBuZXcgRGF0ZShldnQ/LmRhdGU/Ll9kKS5nZXRGdWxsWWVhcigpO1xyXG4gICAgICBjb25zdCBkYXRlU3RyID0gYCR7ZGF0ZVZhbHVlfSAke21vbnRoVmFsdWV9ICR7eWVhclZhbHVlfWA7XHJcbiAgICAgIGlmIChldnQ/LmRhdGU/Ll9kICE9PSB0aGlzLmxvZ0lzc3VlRm9ybS5pc3N1ZUR1ZURhdGU/Ll9kKSB7XHJcbiAgICAgICAgdGhpcy5sb2dJc3N1ZUZvcm0uaXNzdWVEdWVUaW1lID0gXCIxMTo1OSBQTVwiO1xyXG4gICAgICAgIHRoaXMuc2V0Q3VycmVudFRpbWUoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGV2dD8uZGF0ZT8uX2QpIHtcclxuICAgICAgdGhpcy5sb2dJc3N1ZUZvcm0uaXNzdWVEdWVEYXRlID0gZXZ0Py5kYXRlPy5fZDtcclxuICAgIH1cclxuICAgIHRoaXMuZGF0ZVBpY2tlci5hcGkuY2xvc2UoKTtcclxuICAgIHRoaXMuZGF0ZVBpY2tlck92ZXJsYXkgPSBmYWxzZTtcclxuICAgIHRoaXMuc2V0QWN0aXZlRmllbGRTZWxlY3RvcignJywgJycpO1xyXG4gIH1cclxuXHJcbiAgc2V0QWN0aXZlRmllbGRTZWxlY3RvcihhY3RpdmVGaWVsZDogc3RyaW5nLCBhY3RpdmVTZWxlY3Rvcj86IHN0cmluZykge1xyXG4gICAgdGhpcy5hY3RpdmVGaWVsZCA9IGFjdGl2ZUZpZWxkO1xyXG4gICAgKGFjdGl2ZVNlbGVjdG9yID8gdGhpcy5hY3RpdmVTZWxlY3RvciA9IGFjdGl2ZVNlbGVjdG9yIDogdGhpcy5hY3RpdmVTZWxlY3RvciA9ICcnKTtcclxuICAgIGNvbnN0IHNsaWRlclR5cGUgPSBbJ0lTU1VFX1JDJywgJ0lTU1VFX0NBVEVHT1JZJywgJ0lTU1VFX1RZUEUnLCAnSVNTVUVfQ0MnLCAnSVNTVUVfRkNDJywgJ0lTU1VFX1dITycsJ0lTU1VFX0NPTlRST0xfUklTSyddO1xyXG4gICAgaWYgKHNsaWRlclR5cGUuaW5jbHVkZXMoYWN0aXZlRmllbGQpKSB7XHJcbiAgICAgIHRoaXMucGlja2VyQ2hhbmdlZC5lbWl0KHRydWUpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGZpZWxkRGVzZWxlY3Rvcih0eXBlOiBhbnkpIHtcclxuICAgIHRoaXMuYWN0aXZlU2VsZWN0b3IgPSAnJztcclxuICAgIHRoaXMuYWN0aXZlRmllbGQgPSAnJztcclxuICAgIHRoaXMucGlja2VyQ2hhbmdlZC5lbWl0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdG9yQWN0aW9uKGV2dDogYW55LCB0eXBlOiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKGV2dCwgdHlwZSlcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlICdJU1NVRV9DQVRFR09SWSc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhldnQpO1xyXG4gICAgICAgIHRoaXMubG9nSXNzdWVGb3JtLmlzc3VlQ2F0ZWdvcnkgPSB0aGlzLmlkVG9BcnJheShldnQsIHRoaXMubGlzdERhdGEuY2F0ZWdvcnlMaXN0LCAnY2F0ZWdvcnlfaWQnKTtcclxuICAgICAgICBjb25zb2xlLmxvZyggdGhpcy5sb2dJc3N1ZUZvcm0uaXNzdWVDYXRlZ29yeSk7XHJcbiAgICAgICAgdGhpcy5maWVsZERlc2VsZWN0b3IodHlwZSk7XHJcbiAgICAgICAgaWYgKGV2dD8ubGVuZ3RoID4gMCkgeyB0aGlzLnJlbW92ZUVycm9yKCdpc3N1ZUNhdGVnb3J5JykgfVxyXG4gICAgICAgIGlmKHRoaXMubG9nSXNzdWVGb3JtPy5pc3N1ZUNhdGVnb3J5WzBdPy5jdXN0b21fdGFncz8ubGVuZ3RoKXtcclxuICAgICAgICAgIGNvbnN0IHRhZzphbnkgPSBbXVxyXG4gICAgICAgICAgdGhpcy5sb2dJc3N1ZUZvcm0/Lmlzc3VlQ2F0ZWdvcnlbMF0/LmN1c3RvbV90YWdzLmZvckVhY2goKGVsZW1lbnQ6YW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgdGFnLnB1c2goe25hbWU6ZWxlbWVudCwgdmFsdWU6Jyd9KVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLmxvZ0lzc3VlRm9ybS5pc3N1ZUN1c3RvbVRhZyA9IHRhZztcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgIHRoaXMubG9nSXNzdWVGb3JtLmlzc3VlQ3VzdG9tVGFnID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIC8vW1wiaXNzdWVOYW1lXCIsIFwiaXNzdWVDYXRlZ29yeVwiLCBcImlzc3VlUkNcIiwgXCJlbnRydXN0VG9cIiwgXCJpc3N1ZUR1ZURhdGVcIiwgXCJpc3N1ZVJlY29tbWVuZGF0aW9uXCJdXHJcbiAgICAgIGNhc2UgJ0lTU1VFX1JDJzoge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGV2dCwgdHlwZSlcclxuICAgICAgICB0aGlzLmxvZ0lzc3VlRm9ybS5pc3N1ZVJDID0gdGhpcy5pZFRvQXJyYXkoZXZ0LCB0aGlzLmxpc3REYXRhLnJjTGlzdCwgJ3JjX2lkJyk7XHJcbiAgICAgICAgdGhpcy5maWVsZERlc2VsZWN0b3IodHlwZSk7XHJcbiAgICAgICAgaWYgKGV2dD8ubGVuZ3RoID4gMCkgeyB0aGlzLnJlbW92ZUVycm9yKCdpc3N1ZVJDJykgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0lTU1VFX1dITyc6IHtcclxuICAgICAgICB0aGlzLmxvZ0lzc3VlRm9ybS5lbnRydXN0VG8gPSB0aGlzLmlkVG9BcnJheShldnQsIHRoaXMubGlzdERhdGEudXNlckxpc3QsICdlbXBsb3llZV9pZCcpO1xyXG4gICAgICAgIGlmKHRoaXMubG9nSXNzdWVGb3JtLmVudHJ1c3RUb1swXT8ubXlfbWVtYmVyX2lkID09PSB0aGlzLmN1cnJlbnRVc2VyLmlkKXtcclxuICAgICAgICAgIHRoaXMubG9nSXNzdWVGb3JtLmlzQXNzaWduVG9NeXNlbGYgPSB0cnVlO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgdGhpcy5sb2dJc3N1ZUZvcm0uaXNBc3NpZ25Ub015c2VsZiA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZpZWxkRGVzZWxlY3Rvcih0eXBlKTtcclxuICAgICAgICBpZiAoZXZ0Py5sZW5ndGggPiAwKSB7IHRoaXMucmVtb3ZlRXJyb3IoJ2VudHJ1c3RUbycpIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdJU1NVRV9UWVBFJzoge1xyXG4gICAgICAgIHRoaXMubG9nSXNzdWVGb3JtLmlzc3VlVHlwZSA9IHRoaXMuaWRUb0FycmF5KGV2dCwgdGhpcy5saXN0RGF0YS5pc3N1ZVR5cGVMaXN0LCAnaXNzdWVfaWQnKTtcclxuICAgICAgICB0aGlzLmZpZWxkRGVzZWxlY3Rvcih0eXBlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdJU1NVRV9DQyc6IHtcclxuICAgICAgICB0aGlzLmxvZ0lzc3VlRm9ybS5pc3N1ZUNDVXNlcnMgPSB0aGlzLmlkVG9BcnJheShldnQsIHRoaXMubGlzdERhdGEudXNlckxpc3QsICdlbXBsb3llZV9lbWFpbCcpO1xyXG4gICAgICAgIHRoaXMuZmllbGREZXNlbGVjdG9yKHR5cGUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0lTU1VFX0ZDQyc6IHtcclxuICAgICAgICB0aGlzLmxvZ0lzc3VlRm9ybS5mYWlsdXJlQ0NVc2VycyA9IHRoaXMuaWRUb0FycmF5KGV2dCwgdGhpcy5saXN0RGF0YS51c2VyTGlzdCwgJ2VtcGxveWVlX2VtYWlsJyk7XHJcbiAgICAgICAgdGhpcy5maWVsZERlc2VsZWN0b3IodHlwZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNhc2UgJ0lTU1VFX0NPTlRST0xfUklTSyc6XHJcbiAgICAgICAgdGhpcy5sb2dJc3N1ZUZvcm0ubGlua2VkQ29udHJvbFJpc2sgPSB0aGlzLmlkVG9BcnJheShldnQsIHRoaXMubGlzdERhdGEubGlua2FnZUxpc3QsICdpdGVtSWQnKTtcclxuICAgICAgICB0aGlzLmxvZ0lzc3VlRm9ybS5saW5rYWdlVHlwZSA9ICB0aGlzLmxvZ0lzc3VlRm9ybT8ubGlua2VkQ29udHJvbFJpc2tbMF0/Lml0ZW1UeXBlO1xyXG4gICAgICAgIHRoaXMuZmllbGREZXNlbGVjdG9yKHR5cGUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlSXRlbSh0eXBlOiBhbnksIGVsZW1lbnQ6IGFueSkge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgJ0lTU1VFX0NBVEVHT1JZJzoge1xyXG4gICAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IHRoaXMubG9nSXNzdWVGb3JtLmlzc3VlQ2F0ZWdvcnkuZmluZEluZGV4KChpdGVtOiBhbnkpID0+IGl0ZW0uY2F0ZWdvcnlfaWQgPT09IGVsZW1lbnQuY2F0ZWdvcnlfaWQpO1xyXG4gICAgICAgIGlmIChpdGVtSW5kZXggIT09IC0xKSB7IHRoaXMubG9nSXNzdWVGb3JtLmlzc3VlQ2F0ZWdvcnkuc3BsaWNlKGl0ZW1JbmRleCwgMSk7IH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdJU1NVRV9SQyc6IHtcclxuICAgICAgICBjb25zdCBpdGVtSW5kZXggPSB0aGlzLmxvZ0lzc3VlRm9ybS5pc3N1ZVJDLmZpbmRJbmRleCgoaXRlbTogYW55KSA9PiBpdGVtLnJjX2lkID09PSBlbGVtZW50LnJjX2lkKTtcclxuICAgICAgICBpZiAoaXRlbUluZGV4ICE9PSAtMSkgeyB0aGlzLmxvZ0lzc3VlRm9ybS5pc3N1ZVJDLnNwbGljZShpdGVtSW5kZXgsIDEpOyB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnSVNTVUVfV0hPJzoge1xyXG4gICAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IHRoaXMubG9nSXNzdWVGb3JtLmVudHJ1c3RUby5maW5kSW5kZXgoKGl0ZW06IGFueSkgPT4gaXRlbS5lbXBsb3llZV9pZCA9PT0gZWxlbWVudC5lbXBsb3llZV9pZCk7XHJcbiAgICAgICAgaWYgKGl0ZW1JbmRleCAhPT0gLTEpIHsgdGhpcy5sb2dJc3N1ZUZvcm0uZW50cnVzdFRvLnNwbGljZShpdGVtSW5kZXgsIDEpOyB9XHJcbiAgICAgICAgdGhpcy5sb2dJc3N1ZUZvcm0uaXNBc3NpZ25Ub015c2VsZiA9IGZhbHNlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0lTU1VFX1RZUEUnOiB7XHJcbiAgICAgICAgY29uc3QgaXRlbUluZGV4ID0gdGhpcy5sb2dJc3N1ZUZvcm0uaXNzdWVUeXBlLmZpbmRJbmRleCgoaXRlbTogYW55KSA9PiBpdGVtLmlzc3VlX2lkID09PSBlbGVtZW50Lmlzc3VlX2lkKTtcclxuICAgICAgICBpZiAoaXRlbUluZGV4ICE9PSAtMSkgeyB0aGlzLmxvZ0lzc3VlRm9ybS5pc3N1ZVR5cGUuc3BsaWNlKGl0ZW1JbmRleCwgMSk7IH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdJU1NVRV9DQyc6IHtcclxuICAgICAgICBjb25zdCBpdGVtSW5kZXggPSB0aGlzLmxvZ0lzc3VlRm9ybS5pc3N1ZUNDVXNlcnMuZmluZEluZGV4KChpdGVtOiBhbnkpID0+IGl0ZW0uZW1wbG95ZWVfZW1haWwgPT09IGVsZW1lbnQuZW1wbG95ZWVfZW1haWwpO1xyXG4gICAgICAgIGlmIChpdGVtSW5kZXggIT09IC0xKSB7IHRoaXMubG9nSXNzdWVGb3JtLmlzc3VlQ0NVc2Vycy5zcGxpY2UoaXRlbUluZGV4LCAxKTsgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0lTU1VFX0ZDQyc6IHtcclxuICAgICAgICBjb25zdCBpdGVtSW5kZXggPSB0aGlzLmxvZ0lzc3VlRm9ybS5mYWlsdXJlQ0NVc2Vycy5maW5kSW5kZXgoKGl0ZW06IGFueSkgPT4gaXRlbS5lbXBsb3llZV9lbWFpbCA9PT0gZWxlbWVudC5lbXBsb3llZV9lbWFpbCk7XHJcbiAgICAgICAgaWYgKGl0ZW1JbmRleCAhPT0gLTEpIHsgdGhpcy5sb2dJc3N1ZUZvcm0uZmFpbHVyZUNDVXNlcnMuc3BsaWNlKGl0ZW1JbmRleCwgMSk7IH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdJU1NVRV9DT05UUk9MX1JJU0snOlxyXG4gICAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IHRoaXMubG9nSXNzdWVGb3JtLmxpbmtlZENvbnRyb2xSaXNrLmZpbmRJbmRleCgoaXRlbTogYW55KSA9PiBpdGVtLml0ZW1JZCA9PT0gZWxlbWVudC5pdGVtSWQpO1xyXG4gICAgICAgIGlmIChpdGVtSW5kZXggIT09IC0xKSB7IHRoaXMubG9nSXNzdWVGb3JtLmxpbmtlZENvbnRyb2xSaXNrLnNwbGljZShpdGVtSW5kZXgsIDEpOyB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGFzc2lnbk15c2VsZihldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnJlbW92ZUVycm9yKCdlbnRydXN0VG8nKVxyXG4gICAgdGhpcy5sb2dJc3N1ZUZvcm0uZW50cnVzdFRvID0gW107XHJcbiAgICBpZihldmVudCl7XHJcbiAgICAgIHRoaXMubG9nSXNzdWVGb3JtLmVudHJ1c3RUbyA9IHRoaXMubGlzdERhdGEudXNlckxpc3QuZmlsdGVyKChlbXBsaXN0OiBhbnkpID0+IGVtcGxpc3QubXlfbWVtYmVyX2lkID09PSB0aGlzLmN1cnJlbnRVc2VyLmlkKTtcclxuICAgIH1cclxuICB9XHJcbiAgc2V0RXhjZXB0aW9uKHR5cGU6IGFueSkgeyB0aGlzLmxvZ0lzc3VlRm9ybS5leGNlcHRpb25UeXBlID0gdHlwZTsgfVxyXG4gIHNldEV2aWRlbmNlKHR5cGU6IGFueSkgeyB0aGlzLmxvZ0lzc3VlRm9ybS5ldmlkZW5jZVJlcXVpcmVkID0gdHlwZTsgfVxyXG4gIHNldElzc3VlVHlwZSh0eXBlOiBhbnkpIHsgdGhpcy5sb2dJc3N1ZUZvcm0uaXNzdWVUeXBlID0gdHlwZTsgfVxyXG5cclxuICBhZGRNb3JlSW5mbyhldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmFkZGl0aW9uYWxPcHRpb25TdGF0dXNbZXZlbnQuY29kZV0gPSBldmVudC5jaGVja2VkO1xyXG4gICAgdGhpcy5zY3JvbGxUb0JvdHRvbSA9IHRydWU7XHJcbiAgfVxyXG4gIGlkVG9BcnJheShzZWxlY3RlZEl0ZW1zOiBhbnksIGxpc3RJdGVtczogYW55LCBmaWx0ZXJrZXk6IGFueSkge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBzZWxlY3RlZEl0ZW1zO1xyXG4gICAgY29uc3QgbGlzdCA9IGxpc3RJdGVtcztcclxuICAgIGNvbnN0IGtleSA9IGZpbHRlcmtleTtcclxuICAgIGNvbnN0IHggPSBsaXN0LmZpbHRlcigoZWw6IGFueSkgPT4gc2VsZWN0ZWQuaW5jbHVkZXMoZWxba2V5XSkpO1xyXG4gICAgcmV0dXJuIHg7XHJcbiAgfVxyXG4vLy9Db2RlIGJldHdlZW4gNTAzIHRvIDYwOCBjYW4gYmUgb3B0aW1pemVkIHRvIHJlbW92ZSBkdXBsaWNhdGlvblxyXG4gc2VsZWN0RmlsZSh0eXBlOnN0cmluZyxmaWxlczphbnkpe1xyXG4gIHN3aXRjaCAodHlwZSkge1xyXG4gICAgY2FzZSAnSVNTVUVfREVTQ1JJUFRJT04nOiB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IGZpbGVzLmxlbmd0aCAtIDE7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IG5hbWUgPSBmaWxlc1tpXS5maWxlLm5hbWUgPz8gJyc7XHJcbiAgICAgICAgdGhpcy5BdHRhY2htZW50VHJhY2tbMF0ucHVzaChuYW1lKTtcclxuICAgICAgICB0aGlzLnVwbG9hZEZpbGUoZmlsZXNbaV0uZmlsZSx0eXBlKTtcclxuICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAgICB9XHJcbiAgICBjYXNlICdSRUNPTU1FTkRFRF9BQ1RJT05TJzp7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IGZpbGVzLmxlbmd0aCAtIDE7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IG5hbWUgPSBmaWxlc1tpXS5maWxlLm5hbWUgPz8gJyc7XHJcbiAgICAgICAgdGhpcy5BdHRhY2htZW50VHJhY2tbMV0ucHVzaChuYW1lKTtcclxuICAgICAgICB0aGlzLnVwbG9hZEZpbGUoZmlsZXNbaV0uZmlsZSx0eXBlKTtcclxuICAgICAgfVxyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuICAgIGNhc2UgJ0FTU09DSUFURURfUklTS1MnOntcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gZmlsZXMubGVuZ3RoIC0gMTsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgbmFtZSA9IGZpbGVzW2ldLmZpbGUubmFtZSA/PyAnJztcclxuICAgICAgICB0aGlzLkF0dGFjaG1lbnRUcmFja1syXS5wdXNoKG5hbWUpO1xyXG4gICAgICAgIHRoaXMudXBsb2FkRmlsZShmaWxlc1tpXS5maWxlLHR5cGUpO1xyXG4gICAgICB9XHJcbiAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiB9XHJcbn1cclxuXHJcblxyXG4gIHVwbG9hZEZpbGUoZmlsZTogYW55LHR5cGU6c3RyaW5nKSB7XHJcbiAgICBsZXQgdHJhY2tJbmRleCA9IDAgO1xyXG4gICAgc3dpdGNoKHR5cGUpe1xyXG4gICAgICBjYXNlICdJU1NVRV9ERVNDUklQVElPTic6e1xyXG4gICAgICAgIHRyYWNrSW5kZXggPSAwO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ1JFQ09NTUVOREVEX0FDVElPTlMnOntcclxuICAgICAgICB0cmFja0luZGV4ID0gMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdBU1NPQ0lBVEVEX1JJU0tTJzp7XHJcbiAgICAgICAgdHJhY2tJbmRleCA9IDI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgZmlsZSk7XHJcbiAgICBjb25zdCBkZXN0aW5hdGlvblN0cmluZyA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uSWQoKS50b1N0cmluZygpO1xyXG4gICAgdGhpcy5sb2dTZXJ2aWNlLnVwbG9hZEZpbGVzKGZvcm1EYXRhLCBkZXN0aW5hdGlvblN0cmluZysnLycpLnN1YnNjcmliZShcclxuICAgICAgKHJlczogYW55KSA9PiB7XHJcblxyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5BdHRhY2htZW50VHJhY2tbdHJhY2tJbmRleF0uaW5kZXhPZihmaWxlPy5uYW1lKTtcclxuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICB0aGlzLkF0dGFjaG1lbnRUcmFja1t0cmFja0luZGV4XS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoKHR5cGUpe1xyXG4gICAgICAgICAgY2FzZSAnSVNTVUVfREVTQ1JJUFRJT04nOntcclxuICAgICAgICAgICAgdGhpcy5sb2dJc3N1ZUZvcm0uaXNzdWVEZXNjcmlwdGlvbkF0dGFjaGVtZW50cy5wdXNoKHJlcyk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2FzZSAnUkVDT01NRU5ERURfQUNUSU9OUyc6e1xyXG4gICAgICAgICAgICB0aGlzLmxvZ0lzc3VlRm9ybS5yZWNvbW1lbmRlZEFjdGlvbnNBdHRhY2htZW50cy5wdXNoKHJlcyk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2FzZSAnQVNTT0NJQVRFRF9SSVNLUyc6e1xyXG4gICAgICAgICAgICB0aGlzLmxvZ0lzc3VlRm9ybS5hc3NvY2lhdGVkUmlza3NBdHRhY2htZW50cy5wdXNoKHJlcyk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSAgdGhpcy5BdHRhY2htZW50VHJhY2tbdHJhY2tJbmRleF0uaW5kZXhPZihmaWxlLm5hbWUpO1xyXG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgIHRoaXMuQXR0YWNobWVudFRyYWNrW3RyYWNrSW5kZXhdLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZUZpbGUoZmlsZTogYW55LHR5cGU6c3RyaW5nKSB7XHJcbiAgICBsZXQgZmlsZUluZGV4ID0gLTE7XHJcbiAgICBzd2l0Y2godHlwZSl7XHJcbiAgICAgIGNhc2UgJ0lTU1VFX0RFU0NSSVBUSU9OJzp7XHJcbiAgICAgICAgZmlsZUluZGV4ID0gdGhpcy5sb2dJc3N1ZUZvcm0uaXNzdWVEZXNjcmlwdGlvbkF0dGFjaGVtZW50cz8uZmluZEluZGV4KChjdXJyZW50RmlsZXM6IGFueSkgPT4gY3VycmVudEZpbGVzLm9yZ19maWxlID09PSBmaWxlLm9yZ19maWxlKSA/PyAtMTtcclxuICAgICAgICB0aGlzLmxvZ0lzc3VlRm9ybS5pc3N1ZURlc2NyaXB0aW9uQXR0YWNoZW1lbnRzPy5zcGxpY2UoZmlsZUluZGV4LCAxKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdSRUNPTU1FTkRFRF9BQ1RJT05TJzp7XHJcbiAgICAgICAgZmlsZUluZGV4ID0gdGhpcy5sb2dJc3N1ZUZvcm0ucmVjb21tZW5kZWRBY3Rpb25zQXR0YWNobWVudHM/LmZpbmRJbmRleCgoY3VycmVudEZpbGVzOiBhbnkpID0+IGN1cnJlbnRGaWxlcy5vcmdfZmlsZSA9PT0gZmlsZS5vcmdfZmlsZSkgPz8gLTE7XHJcbiAgICAgICAgdGhpcy5sb2dJc3N1ZUZvcm0ucmVjb21tZW5kZWRBY3Rpb25zQXR0YWNobWVudHM/LnNwbGljZShmaWxlSW5kZXgsIDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0FTU09DSUFURURfUklTS1MnOntcclxuICAgICAgICBmaWxlSW5kZXggPSB0aGlzLmxvZ0lzc3VlRm9ybS5hc3NvY2lhdGVkUmlza3NBdHRhY2htZW50cz8uZmluZEluZGV4KChjdXJyZW50RmlsZXM6IGFueSkgPT4gY3VycmVudEZpbGVzLm9yZ19maWxlID09PSBmaWxlLm9yZ19maWxlKSA/PyAtMTtcclxuICAgICAgICB0aGlzLmxvZ0lzc3VlRm9ybS5hc3NvY2lhdGVkUmlza3NBdHRhY2htZW50cz8uc3BsaWNlKGZpbGVJbmRleCwgMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbiBhZGRJc3N1ZSgpe1xyXG4gICBjb25zdCBmb3JtID0gY2xvbmVEZWVwKHRoaXMubG9nSXNzdWVGb3JtKTtcclxuICAgaWYgKGZvcm0uaXNBc3NpZ25Ub015c2VsZil7XHJcbiAgICAgZm9ybS5lbnRydXN0VG8gPSB0aGlzLmxpc3REYXRhLnVzZXJMaXN0LmZpbHRlcigoZW1wbGlzdDogYW55KSA9PiBlbXBsaXN0Lm15X21lbWJlcl9pZCA9PT0gdGhpcy5jdXJyZW50VXNlci5pZCk7XHJcbiAgIH1cclxuXHJcbiAgIHRoaXMuZmllbGRzV2l0aEVycm9yID0gW107XHJcbiAgIHRoaXMuZmllbGRzV2l0aEVycm9yID0gdGhpcy5sb2dTZXJ2aWNlLnZhbGlkYXRlKGZvcm0sIHRoaXMub3BlbmVkRnJvbSx0aGlzLmlzUkNNYW5kYXRvcnkpO1xyXG4gICBpZiAodGhpcy5maWVsZHNXaXRoRXJyb3IubGVuZ3RoID4gMCApe1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuICAgY29uc3QgUEFZTE9BRCA9IHRoaXMubG9nU2VydmljZS5wYXlsb2FkQnVpbGRlcihmb3JtLCB0aGlzLmFkZGl0aW9uYWxPcHRpb25TdGF0dXMpO1xyXG5cclxuICAgaWYodGhpcy5tb2RlID09PSAnQ1JFQVRFJyl7XHJcbiAgIFBBWUxPQUQubGlua2FnZV9vYmplY3QgPSB7IHNvdXJjZSA6IHRoaXMub3BlbmVkRnJvbSwgdHlwZTonJywgdHlwZV9pZDogMCwgc291cmNlX2lkOiAwLCBzb3VyY2Vfb2JqZWN0X2lkOiAnJ307XHJcbiAgICBpZiAodGhpcy4gb3BlbmVkRnJvbSA9PT0gJ0NPTVBMSUFOQ0VfV09SS1JPT00nICYmIHRoaXMucmVwb25zaWJpbGl0eURhdGE/LnJlc3BvbnNpYmlsaXR5SWQpe1xyXG4gICAgICBQQVlMT0FELmxpbmthZ2Vfb2JqZWN0ID0geyBzb3VyY2VfaWQ6ICB0aGlzLnJlcG9uc2liaWxpdHlEYXRhPy5yZXNwb25zaWJpbGl0eUlkLCB0eXBlOiAnJywgdHlwZV9pZDogMCwgIHNvdXJjZSA6IHRoaXMub3BlbmVkRnJvbSwgc291cmNlX29iamVjdF9pZDogdGhpcy5yZXBvbnNpYmlsaXR5RGF0YT8ucmVzcG9uc2liaWxpdHlPYmplY3RJZCB9IDtcclxuICAgfVxyXG4gICBpZihbJ1ZJRVdfQVVESVRfRVhFQ1VUSU9OX1NVTU1BUlknLCdFWEVDVVRFX0FVRElUX1BMQU4nXS5pbmNsdWRlcyh0aGlzLm9wZW5lZEZyb20pKXtcclxuICAgICAgICAgIGlmKHRoaXMubG9nSXNzdWVGb3JtPy5saW5rYWdlVHlwZSAmJiB0aGlzLmxvZ0lzc3VlRm9ybT8ubGlua2VkQ29udHJvbFJpc2subGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgIGlmKFsnUklTSycsICdSRVNQT05TSUJJTElUWSddLmluY2x1ZGVzKHRoaXMubG9nSXNzdWVGb3JtPy5saW5rYWdlVHlwZSkpe1xyXG4gICAgICAgICAgICAgIFBBWUxPQUQubGlua2FnZV9vYmplY3Quc291cmNlX2lkID0gdGhpcy5sb2dJc3N1ZUZvcm0/LmxpbmtlZENvbnRyb2xSaXNrWzBdPy5pdGVtSWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgfVxyXG4gICBpZihbJ0FVRElUX1dPUktST09NJywnVklFV19BVURJVF9FWEVDVVRJT05fU1VNTUFSWScsJ0VYRUNVVEVfQVVESVRfUExBTiddLmluY2x1ZGVzKHRoaXMub3BlbmVkRnJvbSkpe1xyXG4gICAgICBpZih0aGlzLmlzc3VlRGV0YWlscy5hdWRpdFBsYW5JZCl7XHJcbiAgICAgICAgUEFZTE9BRC5saW5rYWdlX29iamVjdC5zb3VyY2VfaWQgPSAgdGhpcy5pc3N1ZURldGFpbHMuYXVkaXRQbGFuSWQ7XHJcbiAgICAgIH1cclxuICAgfVxyXG4gIH1cclxuXHJcbiAgaWYodGhpcy5tb2RlID09PSAnRURJVCcpe1xyXG4gICAgUEFZTE9BRC5Jc3N1ZUxpbmthZ2UgPSB0aGlzLmRhdGFGb3JFZGl0Py5saW5rYWdlX29iamVjdDtcclxuICB9XHJcbiAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSB0cnVlXHJcbiAgY29uc29sZS5sb2coJ1BBWUxPQUQgPT09PicsIFBBWUxPQUQpXHJcbiAgIGlmKHRoaXMubW9kZSA9PT0gJ0VESVQnKXtcclxuICAgIHRoaXMubG9nU2VydmljZS51cGRhdGVJc3N1ZShQQVlMT0FELHRoaXMuaXNzdWVJZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNtaWxleU1lc3NhZ2UgPSBgVGhlIGlzc3VlIGhhcyBiZWVuIHVwZGF0ZWQuYDtcclxuICAgICAgdGhpcy5pc3N1ZURhdGEgPSByZXM7XHJcbiAgICAgIHRoaXMuc2hvd1NtaWxleSA9IHRydWU7XHJcbiAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzU21pbGV5T24gPSB0cnVlO1xyXG4gICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IGZhbHNlXHJcbiAgICAgIHRoaXMucmVzZXRJc3N1ZUZvcm0oKTtcclxuICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSBmYWxzZTtcclxuICAgICB0aGlzLnNuYWNrQmFyLnNob3coJ09PUFMhIFNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB0aGUgcGFnZSBjb3VsZCBub3QgYmUgbG9hZGVkLiBDb3VsZCB5b3UgcGxlYXNlIHRyeSBvbmUgbW9yZSB0aW1lPycpO1xyXG4gICB9KTtcclxuICAgfWVsc2UgaWYodGhpcy5tb2RlID09PSAnQ1JFQVRFJyB8fCB0aGlzLm1vZGUgPT09ICcnIHx8ICF0aGlzLm1vZGUpe1xyXG4gICAgdGhpcy5sb2dTZXJ2aWNlLmNyZWF0ZUlzc3VlKFBBWUxPQUQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5pc3N1ZURhdGEgPSByZXM7XHJcbiAgICAgIHRoaXMuc2hvd1NtaWxleSA9IHRydWU7XHJcbiAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzU21pbGV5T24gPSB0cnVlO1xyXG4gICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnJlc2V0SXNzdWVGb3JtKCk7XHJcbiAgIH0sIGVycm9yID0+IHtcclxuICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgdGhpcy5zbmFja0Jhci5zaG93KCdPT1BTISBTb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgdGhlIHBhZ2UgY291bGQgbm90IGJlIGxvYWRlZC4gQ291bGQgeW91IHBsZWFzZSB0cnkgb25lIG1vcmUgdGltZT8nKTtcclxuICAgfSk7XHJcbiAgIH1cclxuXHJcbiB9XHJcbiBjbG9zZVNtaWxleShldnQ/OiBhbnkpe1xyXG4gIHRoaXMuc2hvd1NtaWxleSA9IGZhbHNlO1xyXG4gIHRoaXMudWlLaXRTZXJ2aWNlLmlzU21pbGV5T24gPSBmYWxzZTtcclxuICB0aGlzLmNsb3NlV29ya0Zsb3codGhpcy5pc3N1ZURhdGEsZmFsc2UpO1xyXG4gfVxyXG4vKipcclxuICogQ2xvc2VzIHdvcmtmbG93IGVuZ2luZVxyXG4gKiBAcGFyYW0gZXZ0XHJcbiAqIEBwYXJhbSBjb25maXJtXHJcbiAqL1xyXG5jbG9zZVdvcmtGbG93KGV2dDogYW55LCBjb25maXJtOmFueSl7XHJcbiAgIHRoaXMuY2xvc2VXb3JrZmxvdy5lbWl0KHtldnQsIGNvbmZpcm19KTtcclxuIH1cclxuIGFjdGlvbihldnQ6IGFueSl7XHJcbiAgIGlmIChldnQgPT09ICdhZGRNb3JlJyl7XHJcbiAgICB0aGlzLnJlc2V0SXNzdWVGb3JtKCk7XHJcbiAgICB0aGlzLnNob3dTbWlsZXkgPSBmYWxzZTtcclxuICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzU21pbGV5T24gPSBmYWxzZTtcclxuICAgIC8vIHRoaXMuY2xvc2VXb3JrRmxvdyh0aGlzLmlzc3VlRGF0YSwgZmFsc2UpO1xyXG4gIH1cclxuICBlbHNlIGlmKGV2dCA9PT0gJ3ZpZXdJc3N1ZScpe1xyXG4gICAgdGhpcy52aWV3SXNzdWUoKTtcclxuICB9XHJcblxyXG4gICB9XHJcblxyXG4gICB2aWV3SXNzdWUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc2Nvbm5lY3RSZWZyZXNoLmVtaXQoZmFsc2UpO1xyXG4gICAgICAgbGV0IHVybDogc3RyaW5nO1xyXG4gICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ob3N0LnN0YXJ0c1dpdGgoJ2xvY2FsaG9zdCcpKSB7XHJcbiAgICAgICAgIHVybCA9ICdodHRwOi8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0O1xyXG4gICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgdXJsID0gJ2h0dHBzOi8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0O1xyXG4gICAgICAgfVxyXG5cclxuICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24uaG9zdC5zdGFydHNXaXRoKCdsb2NhbGhvc3QnKSkge1xyXG4gICAgICAgICB1cmwgKz0gJy9pc3N1ZS9pc3N1ZS13b3Jrcm9vbS8nICsgdGhpcy5pc3N1ZURhdGE/Ll9pZDtcclxuICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgIHVybCArPSAnL2F1ZGl0L2lzc3VlL2lzc3VlLXdvcmtyb29tLycgKyB0aGlzLmlzc3VlRGF0YT8uX2lkO1xyXG4gICAgICAgfVxyXG4gICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB1cmw7XHJcbiAgICAgfVxyXG5cclxuLyoqXHJcbiAqIFBvcHVsYXRlIHRoZSB0aWNrbWFyayBvZiBvcHRpb25hbCBmaWVsZHNcclxuICovXHJcbnBvcHVsYXRlT3B0aW9uYWxGaWVsZHMoKXtcclxuICBjb25zdCBhY3RpdmF0ZWRPcHRpb25zID0gW107XHJcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5hZGRpdGlvbmFsT3B0aW9uU3RhdHVzKSl7XHJcbiAgICBpZiAodGhpcy5hZGRpdGlvbmFsT3B0aW9uU3RhdHVzW2tleV0gPT09IHRydWUpe1xyXG4gICAgICBhY3RpdmF0ZWRPcHRpb25zLnB1c2goa2V5KTtcclxuICAgIH1cclxuICB9XHJcbiAgdGhpcy5wb3B1bGF0ZU9wdGlvbi5lbWl0KGFjdGl2YXRlZE9wdGlvbnMpO1xyXG59XHJcbi8qKlxyXG4gKiBGZXRjaHMgaXNzdWUgZGV0YWlscyB3aGVuIGluIGVkaXQgbW9kZSBiYXNlZCBvbiB0aGUgaW5wdXQgaWQgcGFzc2VkXHJcbiAqL1xyXG5mZXRjaElzc3VlRGV0YWlscygpe1xyXG4gIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IHRydWU7XHJcbiAgdGhpcy5sb2dTZXJ2aWNlLmdldElzc3VlRGV0YWlscyh0aGlzLmlzc3VlSWQpLnN1YnNjcmliZSgoZGF0YTphbnkpPT57XHJcbiAgICBjb25zb2xlLmxvZyhcImlzc3VlIERhdGFcIixkYXRhKVxyXG4gICAgdGhpcy5wb3B1bGF0ZUZvcm0oZGF0YSlcclxuICB9KVxyXG59XHJcbi8qKlxyXG4gKiBQb3B1bGF0ZXMgdGhlIGlzc3VlIGZvcm0gd2hlbiBpbiBlZGl0IG1vZGVcclxuICogQHBhcmFtIGlzc3VlRGF0YSBpc3N1ZSBkYXRhIGZldGNoZWQgZnJvbSBBUElcclxuICovXHJcbmFzeW5jIHBvcHVsYXRlRm9ybShpc3N1ZURhdGEgOiBhbnkpe1xyXG4gIHRoaXMuZGF0YUZvckVkaXQgPSBpc3N1ZURhdGE7XHJcbiAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IGZhbHNlO1xyXG4gIGNvbnN0IGlzc3VlRHVlRGF0ZSA9IGlzc3VlRGF0YS5mcmVxdWVuY3lfZGV0YWlscz8uZnJlcXVlbmN5X2RhdGUuc3BsaXQoJy0nKTtcclxuICB0aGlzLmxvZ0lzc3VlRm9ybSA9IHtcclxuICAgIGlzc3VlTmFtZSA6IGlzc3VlRGF0YS50aXRsZSA/PyAnJyxcclxuICAgIGV2aWRlbmNlUmVxdWlyZWQ6IGlzc3VlRGF0YT8uZXZpZGVuY2U/LmV2aWRlbmNlX2ZsYWc/PzAsXHJcbiAgICBpc3N1ZURlc2NyaXB0aW9uOiBpc3N1ZURhdGE/LmRlc2NyaXB0aW9uPy5sZW5ndGggPyBpc3N1ZURhdGE/LmRlc2NyaXB0aW9uWzBdPy50ZXh0IDonJyxcclxuICAgIGlzc3VlRGVzY3JpcHRpb25BdHRhY2hlbWVudHM6IGlzc3VlRGF0YT8uZGVzY3JpcHRpb24/Lmxlbmd0aCA/IGlzc3VlRGF0YT8uZGVzY3JpcHRpb25bMF0/LmF0dGFjaG1lbnRzIDpbXSxcclxuICAgIGlzc3VlQ2F0ZWdvcnk6IGlzc3VlRGF0YT8uY2F0ZWdvcnlfaWQgPyB0aGlzLmxpc3REYXRhLmNhdGVnb3J5TGlzdC5maWx0ZXIoKGU6YW55KSA9PiBlLmNhdGVnb3J5X2lkID09PSBpc3N1ZURhdGE/LmNhdGVnb3J5X2lkKTpbXSxcclxuICAgIGlzc3VlQ3VzdG9tVGFnIDogaXNzdWVEYXRhPy5jdXN0b21fdGFncyA/PyBbXSxcclxuICAgIGlzc3VlUkM6IGlzc3VlRGF0YT8ucmNfaWQgPyB0aGlzLmxpc3REYXRhLnJjTGlzdC5maWx0ZXIoKGU6YW55KSA9PiBlLnJjX2lkID09PSBpc3N1ZURhdGE/LnJjX2lkKTpbXSxcclxuICAgIGlzc3VlVHlwZTogW10sXHJcbiAgICByZWNvbW1lbmRlZEFjdGlvbnNBdHRhY2htZW50czppc3N1ZURhdGE/LnJlY29tbWVuZGF0aW9uPy5sZW5ndGggPyBpc3N1ZURhdGE/LnJlY29tbWVuZGF0aW9uWzBdPy5hdHRhY2htZW50cyA6W10sXHJcbiAgICBhc3NvY2lhdGVkUmlza3NBdHRhY2htZW50czpbXSxcclxuICAgIGlzQXNzaWduVG9NeXNlbGYgOiAgaXNzdWVEYXRhPy5hc3NpZ25lZV9pZCA9PT0gdGhpcy5jdXJyZW50VXNlci5pZCAgPyB0cnVlIDogZmFsc2UsXHJcbiAgICBlbnRydXN0VG86IGlzc3VlRGF0YT8uYXNzaWduZWVfaWQgPT09IHRoaXMuY3VycmVudFVzZXIuaWQgPyBbXTogdGhpcy5saXN0RGF0YS51c2VyTGlzdC5maWx0ZXIoKGU6YW55KSA9PiBlLm15X21lbWJlcl9pZCA9PT0gaXNzdWVEYXRhPy5hc3NpZ25lZV9pZCApLFxyXG4gICAgaXNzdWVEdWVEYXRlOiBpc3N1ZURhdGE/LmZyZXF1ZW5jeV9kZXRhaWxzPy5mcmVxdWVuY3lfZGF0ZT8gIG1vbWVudChgJHtpc3N1ZUR1ZURhdGVbMF19LSR7aXNzdWVEdWVEYXRlWzFdfS0ke2lzc3VlRHVlRGF0ZVsyXX1gKTonJyxcclxuICAgIGlzc3VlRHVlVGltZTogdGhpcy5sb2dTZXJ2aWNlLmNvbnZlcnRGcm9tMjRUbzEyRm9ybWF0KGlzc3VlRGF0YS5mcmVxdWVuY3lfZGV0YWlscy5mcmVxdWVuY3lfdGltZSksXHJcbiAgICBleGNlcHRpb25UeXBlOiBpc3N1ZURhdGEuZXhjZXB0aW9uX3R5cGUgPz8gMSxcclxuICAgIGlzc3VlUmlza1JhdGluZzogaXNzdWVEYXRhLnJpc2tfY2xhc3MgPz8gMSxcclxuICAgIGlzc3VlUHJpb3JpdHk6IGlzc3VlRGF0YS5wcmlvcml0eSA/PyAxLFxyXG4gICAgaXNzdWVSZWNvbW1lbmRhdGlvbjogaXNzdWVEYXRhPy5yZWNvbW1lbmRhdGlvbj8ubGVuZ3RoID8gaXNzdWVEYXRhPy5yZWNvbW1lbmRhdGlvblswXT8udGV4dCA6JycsXHJcbiAgICBpc3N1ZUFzc29jaWF0ZWRSaXNrOiBpc3N1ZURhdGE/LmFzc29jaWF0ZWRfcmlzaz8ubGVuZ3RoID8gaXNzdWVEYXRhPy5hc3NvY2lhdGVkX3Jpc2tbMF0/LnRleHQgOicnLFxyXG4gICAgaXNzdWVDQ1VzZXJzOiBpc3N1ZURhdGEub3ZlcnNlZXI/LmNjX2VtYWlsLmxlbmd0aCA/IGF3YWl0IHRoaXMuZ2VuZXJhdGVPdmVyc2Vlckxpc3QodGhpcy5saXN0RGF0YS51c2VyTGlzdCxpc3N1ZURhdGEub3ZlcnNlZXI/LmNjX2VtYWlsKSA6W10sXHJcbiAgICBmYWlsdXJlQ0NVc2VyczogaXNzdWVEYXRhLm92ZXJzZWVyPy5mYWlsdXJlX2NjX2VtYWlsLmxlbmd0aCA/IGF3YWl0IHRoaXMuZ2VuZXJhdGVPdmVyc2Vlckxpc3QodGhpcy5saXN0RGF0YS51c2VyTGlzdCxpc3N1ZURhdGEub3ZlcnNlZXI/LmZhaWx1cmVfY2NfZW1haWwpIDpbXSxcclxuICAgIGxpbmtlZENvbnRyb2xSaXNrOltdLFxyXG4gICAgbGlua2FnZVR5cGUgOiAnUkVTUE9OU0lCSUxJVFknXHJcbiAgfTtcclxuICBjb25zb2xlLmxvZyhcIkFmdGVyIEluaXRcIix0aGlzLmxvZ0lzc3VlRm9ybSlcclxuICBpZih0aGlzLm1vZGUgPT09ICdFRElUJyl7XHJcbiAgICB0aGlzLmxvZ0lzc3VlRm9ybS5pc3N1ZVJDPy5sZW5ndGggPiAwID8gdGhpcy5pc1JDUHJlU2VsZWN0ZWQgPSB0cnVlIDogdGhpcy5pc1JDUHJlU2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgIC8vIGlzc3VlRGF0YS5saW5rYWdlX29iamVjdD8uc291cmNlID09PSAnR0xPQkFMJz8gdGhpcy5pc1JDTWFuZGF0b3J5ID0gdHJ1ZSA6IHRoaXMuaXNSQ01hbmRhdG9yeSA9IGZhbHNlO1xyXG4gICAgKGlzc3VlRGF0YS5saW5rYWdlX29iamVjdD8uc291cmNlID09PSAnR0xPQkFMJyAmJiBpc3N1ZURhdGE/LnJjX2lkKSA/IHRoaXMuaXNSQ1ByZVNlbGVjdGVkID0gZmFsc2UgOiB0aGlzLmlzUkNQcmVTZWxlY3RlZCA9IHRydWU7XHJcbiAgICAvLyBpZihpc3N1ZURhdGEubGlua2FnZV9vYmplY3Q/LmNvbXBsaWFuY2U/Lmlkcz8ubGVuZ3RoKXtcclxuICAgIC8vICAgdGhpcy5sb2dJc3N1ZUZvcm0ubGlua2VkQ29udHJvbFJpc2sgPSBpc3N1ZURhdGEubGlua2FnZV9vYmplY3Q/LmNvbXBsaWFuY2U/Lmlkcz8/W10sXHJcbiAgICAvLyAgIHRoaXMubG9nSXNzdWVGb3JtLmxpbmthZ2VUeXBlID0gJ1JFU1BPTlNJQklMSVRZJ1xyXG4gICAgLy8gICB0aGlzLmlzUmlza0NvbnRyb2xWaXNpYmxlID0gdHJ1ZTtcclxuICAgIC8vIH1cclxuICAgIC8vIGlmKGlzc3VlRGF0YS5saW5rYWdlX29iamVjdD8ucmlzaz8uaWRzPy5sZW5ndGgpe1xyXG4gICAgLy8gICB0aGlzLmxvZ0lzc3VlRm9ybS5saW5rZWRDb250cm9sUmlzayA9IGlzc3VlRGF0YS5saW5rYWdlX29iamVjdD8ucmlzaz8uaWRzPz9bXSxcclxuICAgIC8vICAgdGhpcy5sb2dJc3N1ZUZvcm0ubGlua2FnZVR5cGUgPSAnUklTSyc7XHJcbiAgICAvLyAgIHRoaXMuaXNSaXNrQ29udHJvbFZpc2libGUgPSB0cnVlO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuICB0aGlzLnNldE9wdGlvbmFsRmllbGQoaXNzdWVEYXRhKTtcclxufVxyXG4vKipcclxuICogU2V0cyB0aGUgdmlzaWJpbGl0eSBvZiBvcHRpb25hbCBmaWVsZHNcclxuICogQHBhcmFtIGlzc3VlRGF0YSAgaXNzdWUgZGF0YSBmZXRjaGVkIGZyb20gQVBJXHJcbiAqL1xyXG5zZXRPcHRpb25hbEZpZWxkKGlzc3VlRGF0YTphbnkpe1xyXG4gIHRoaXMuYWRkaXRpb25hbE9wdGlvblN0YXR1cyA9IHtcclxuICAgIEVYQ0VQVElPTl9UWVBFOiBpc3N1ZURhdGEuZXhjZXB0aW9uX3R5cGUgPyB0cnVlIDogZmFsc2UsXHJcbiAgICBFVklERU5DRTogaXNzdWVEYXRhLmV2aWRlbmNlLmV2aWRlbmNlX2ZsYWcgPyB0cnVlIDpmYWxzZSxcclxuICAgIFBSSU9SSVRZOiAgaXNzdWVEYXRhLnByaW9yaXR5ID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgSVNTVUVfVFlQRTogZmFsc2UsXHJcbiAgICBBU1NPQ0lBVEVEX1JJU0tTIDogaXNzdWVEYXRhLmFzc29jaWF0ZWRfcmlzay5sZW5ndGggPyAoaXNzdWVEYXRhLmFzc29jaWF0ZWRfcmlza1swXS50ZXh0Lmxlbmd0aCA/IHRydWUgOiBmYWxzZSk6ZmFsc2UsXHJcbiAgICBPVkVSU0lHSFQgOiAoaXNzdWVEYXRhLm92ZXJzZWVyLmNjX2VtYWlsLmxlbmd0aCA+IDAgfHwgaXNzdWVEYXRhLm92ZXJzZWVyLmZhaWx1cmVfY2NfZW1haWwubGVuZ3RoID4gMCkgPyB0cnVlIDogZmFsc2VcclxuICB9O1xyXG4gIHRoaXMucG9wdWxhdGVPcHRpb25hbEZpZWxkcygpO1xyXG59XHJcbi8qKlxyXG4gKiBHZW5lcmF0ZXMgbGlzdCBvZiBzZWxlY3RlZCBvdmVyc2VlclxyXG4gKiBAcGFyYW0gYWxsVXNlckxpc3QgbGlzdCBvZiBhbGwgdXNlcnMgaW4gdGhlIG9yZ2FuemF0aW9uXHJcbiAqIEBwYXJhbSBvdmVyc2Vlckxpc3QgIGxpdCBvZiB0aGUgb3ZlcnNlZXIgdGhhdCBuZWVkcyB0byBiZSBmaWx0ZXJlZFxyXG4gKiBAcmV0dXJucyAgbGlzdCBvZiBhcnJheSBjb250YWluaW5nIHRoZSB1c2VycyBvYmplY3RzXHJcbiAqL1xyXG5nZW5lcmF0ZU92ZXJzZWVyTGlzdChhbGxVc2VyTGlzdDphbnksIG92ZXJzZWVyTGlzdDphbnkgKXtcclxuIHJldHVybiBvdmVyc2Vlckxpc3QubWFwKCh1c2VyOmFueSk9PntcclxuICAgIGNvbnN0IGZvdW5kVXNlciA9IGFsbFVzZXJMaXN0LmZpbmQoKGVsZW1lbnQ6YW55KSA9PiBlbGVtZW50Lm15X21lbWJlcl9pZCA9PT0gdXNlci5tZW1iZXJfaWQpO1xyXG4gICAgaWYoZm91bmRVc2VyKXtcclxuICAgICAgcmV0dXJuIGZvdW5kVXNlcjtcclxuICAgIH1cclxuICB9KVxyXG59XHJcbi8qKlxyXG4gKiBSZXNldHMgaXNzdWUgZm9ybVxyXG4gKi9cclxucmVzZXRJc3N1ZUZvcm0oKXtcclxuICAgdGhpcy5zY3JvbGxUb0JvdHRvbSA9IGZhbHNlO1xyXG4gIHRoaXMubG9nSXNzdWVGb3JtID0ge1xyXG4gICAgaXNzdWVOYW1lIDogJycsXHJcbiAgICBldmlkZW5jZVJlcXVpcmVkOiAwLFxyXG4gICAgaXNzdWVEZXNjcmlwdGlvbjogJycsXHJcbiAgICBpc3N1ZURlc2NyaXB0aW9uQXR0YWNoZW1lbnRzOiBbXSxcclxuICAgIHJlY29tbWVuZGVkQWN0aW9uc0F0dGFjaG1lbnRzOltdLFxyXG4gICAgYXNzb2NpYXRlZFJpc2tzQXR0YWNobWVudHM6W10sXHJcbiAgICBpc3N1ZUNhdGVnb3J5OiBbXSxcclxuICAgIGlzc3VlQ3VzdG9tVGFnIDogW10sXHJcbiAgICBpc3N1ZVJDOiBbXSxcclxuICAgIGlzc3VlVHlwZTogW10sXHJcbiAgICBpc0Fzc2lnblRvTXlzZWxmIDogZmFsc2UsXHJcbiAgICBlbnRydXN0VG86IFtdLFxyXG4gICAgaXNzdWVEdWVEYXRlOiAnJyxcclxuICAgIGlzc3VlRHVlVGltZTogJzExOjU5IFBNJyxcclxuICAgIGV4Y2VwdGlvblR5cGU6IDEsXHJcbiAgICBpc3N1ZVJpc2tSYXRpbmc6IDEsXHJcbiAgICBpc3N1ZVByaW9yaXR5OiAxLFxyXG4gICAgaXNzdWVSZWNvbW1lbmRhdGlvbjogJycsXHJcbiAgICBpc3N1ZUFzc29jaWF0ZWRSaXNrOiAnJyxcclxuICAgIGlzc3VlQ0NVc2VyczogW10sXHJcbiAgICBmYWlsdXJlQ0NVc2VyczogW11cclxuICB9O1xyXG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMuYWRkaXRpb25hbE9wdGlvblN0YXR1cykpe1xyXG4gICAgIHRoaXMuYWRkaXRpb25hbE9wdGlvblN0YXR1c1trZXldID0gZmFsc2U7XHJcbiAgfVxyXG4gIHRoaXMuc21pbGV5TWVzc2FnZSA9IGBUaGUgaXNzdWUgaGFzIGJlZW4gcmVwb3J0ZWQuYDtcclxuICB0aGlzLm1vZGUgPSAnQ1JFQVRFJztcclxuICB0aGlzLm1vZGVDaGFuZ2UuZW1pdCh0aGlzLm1vZGUpO1xyXG4gIHRoaXMucG9wdWxhdGVPcHRpb25hbEZpZWxkcygpO1xyXG4gIHRoaXMuc2V0U2VsZWN0ZWRSQygpO1xyXG4gfVxyXG4gY2hlY2tEZXNjcmlwdGlvbigpIHtcclxuICBpZiAodGhpcy5sb2dJc3N1ZUZvcm0uaXNzdWVEZXNjcmlwdGlvbiA9PSAnPGJyPicpIHtcclxuICAgIHRoaXMubG9nSXNzdWVGb3JtLmlzc3VlRGVzY3JpcHRpb24gPSAnJztcclxuICB9XHJcbiAgaWYgKHRoaXMubG9nSXNzdWVGb3JtLmlzc3VlUmVjb21tZW5kYXRpb24gPT0gJzxicj4nKSB7XHJcbiAgICB0aGlzLmxvZ0lzc3VlRm9ybS5pc3N1ZVJlY29tbWVuZGF0aW9uID0gJyc7XHJcbiAgfVxyXG4gIGlmICh0aGlzLmxvZ0lzc3VlRm9ybS5pc3N1ZUFzc29jaWF0ZWRSaXNrID09ICc8YnI+Jykge1xyXG4gICAgdGhpcy5sb2dJc3N1ZUZvcm0uaXNzdWVBc3NvY2lhdGVkUmlzayA9ICcnO1xyXG4gIH1cclxufVxyXG59XHJcbiJdfQ==