vcomply-workflow-engine 2.5.3 → 2.5.4
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.
- package/bundles/vcomply-workflow-engine.umd.js +370 -220
- package/bundles/vcomply-workflow-engine.umd.js.map +1 -1
- package/esm2015/lib/more-option/more-option.component.js +66 -3
- package/esm2015/lib/more-option/more-option.component.ngfactory.js +9 -9
- package/esm2015/lib/sharedComponents/framework-list/framework-list.component.js +8 -3
- package/esm2015/lib/sharedComponents/program-listing/program-listing.component.js +3 -3
- package/esm2015/lib/sharedComponents/program-listing/program-listing.component.ngfactory.js +6 -6
- package/esm2015/lib/ui-kit/popover/popover.component.js +5 -4
- package/esm2015/lib/ui-kit/popover-hover/popover-hover.component.js +5 -4
- package/esm2015/lib/workflow-engine-container/workflow-engine-container.component.js +5 -4
- package/esm2015/lib/workflow-engine.module.js +3 -1
- package/esm2015/lib/workflow-engine.module.ngfactory.js +1 -1
- package/esm2015/lib/workflow-program/create-program-ui/create-program-ui.module.ngfactory.js +1 -1
- package/esm2015/lib/workflow-program/create-program-ui/pipes/array-concat.pipe.js +12 -0
- package/esm2015/lib/workflow-program/create-program-ui/pipes/array-concat.pipe.ngsummary.json +1 -0
- package/esm2015/lib/workflow-program/create-program-ui/role-list/role-list.component.js +2 -2
- package/esm2015/lib/workflow-program/create-program-ui/user-group-list/user-group-list.component.js +35 -4
- package/esm2015/lib/workflow-program/create-program-ui/user-group-list/user-group-list.component.ngfactory.js +11 -4
- package/esm2015/lib/workflow-program/create-program-ui/user-group-list/user-group-list.component.ngsummary.json +1 -1
- package/esm2015/lib/workflow-program/workflow-program.component.js +27 -8
- package/esm2015/lib/workflow-program/workflow-program.component.ngfactory.js +438 -445
- package/esm2015/lib/workflow-program/workflow-program.component.ngsummary.json +1 -1
- package/esm2015/lib/workflow-services/programs.service.js +8 -7
- package/esm2015/lib/workflow-services/responsibility.service.js +5 -2
- package/esm2015/vcomply-workflow-engine.js +189 -188
- package/esm2015/vcomply-workflow-engine.ngsummary.json +1 -1
- package/fesm2015/vcomply-workflow-engine.js +171 -34
- package/fesm2015/vcomply-workflow-engine.js.map +1 -1
- package/lib/sharedComponents/framework-list/framework-list.component.d.ts +1 -1
- package/lib/workflow-program/create-program-ui/pipes/array-concat.pipe.d.ts +4 -0
- package/lib/workflow-program/create-program-ui/user-group-list/user-group-list.component.d.ts +6 -0
- package/lib/workflow-program/workflow-program.component.d.ts +1 -0
- package/lib/workflow-services/programs.service.d.ts +1 -1
- package/lib/workflow-services/responsibility.service.d.ts +1 -1
- package/package.json +1 -1
- package/vcomply-workflow-engine.d.ts +188 -187
- package/vcomply-workflow-engine.metadata.json +1 -1
|
@@ -30,7 +30,7 @@ export class WorkflowProgramComponent {
|
|
|
30
30
|
this.panelTitleOwner = "Select Owner(s)";
|
|
31
31
|
this.panelTitleReviewer = "Select Reviewer(s)";
|
|
32
32
|
this.panelTitleAssignee = "Select Assignee(s)";
|
|
33
|
-
this.panelTitleApprover = "Select Approver
|
|
33
|
+
this.panelTitleApprover = "Select Approver";
|
|
34
34
|
this.isApproverDisabled = false;
|
|
35
35
|
this.loader = false;
|
|
36
36
|
this.showSmiley = false;
|
|
@@ -80,7 +80,8 @@ export class WorkflowProgramComponent {
|
|
|
80
80
|
program_assessments: [[]],
|
|
81
81
|
evidence_required: [false],
|
|
82
82
|
allow_any_file_key_evidence: [false],
|
|
83
|
-
custom_fields: [[]]
|
|
83
|
+
custom_fields: [[]],
|
|
84
|
+
program_state: 0,
|
|
84
85
|
});
|
|
85
86
|
//exceptional handling of custom fields
|
|
86
87
|
this.showAddCustomField = true;
|
|
@@ -265,7 +266,7 @@ export class WorkflowProgramComponent {
|
|
|
265
266
|
switch (type) {
|
|
266
267
|
case 'ROLE': {
|
|
267
268
|
this.showConfirmation = true;
|
|
268
|
-
const systemRoles = evt === null || evt === void 0 ? void 0 : evt.filter((ele) => (ele === null || ele === void 0 ? void 0 : ele.
|
|
269
|
+
const systemRoles = evt === null || evt === void 0 ? void 0 : evt.filter((ele) => { var _a, _b; return (((_a = ele === null || ele === void 0 ? void 0 : ele.roleName) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === 'key admin' || ((_b = ele === null || ele === void 0 ? void 0 : ele.roleName) === null || _b === void 0 ? void 0 : _b.toLowerCase()) === 'admin'); });
|
|
269
270
|
const patchVal = this.uniqueByProp([...systemRoles, ...evt], '_id');
|
|
270
271
|
if (!isEqual(this.controls.program_roles.value.sort(), patchVal.sort())) {
|
|
271
272
|
this.setFormField('program_roles', patchVal);
|
|
@@ -611,8 +612,8 @@ export class WorkflowProgramComponent {
|
|
|
611
612
|
next: (res) => {
|
|
612
613
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
613
614
|
this.lists.ROLES = res;
|
|
614
|
-
const defaultSystemVal = (_d = (_c = (_b = (_a = this.lists) === null || _a === void 0 ? void 0 : _a.ROLES) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.filter((ele) => (ele === null || ele === void 0 ? void 0 : ele.
|
|
615
|
-
const defaultVal = (_g = (_f = (_e = this.lists) === null || _e === void 0 ? void 0 : _e.ROLES) === null || _f === void 0 ? void 0 : _f.data) === null || _g === void 0 ? void 0 : _g.filter((ele) => (ele === null || ele === void 0 ? void 0 : ele.
|
|
615
|
+
const defaultSystemVal = (_d = (_c = (_b = (_a = this.lists) === null || _a === void 0 ? void 0 : _a.ROLES) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.filter((ele) => { var _a, _b; return (((_a = ele === null || ele === void 0 ? void 0 : ele.roleName) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === 'key admin' || ((_b = ele === null || ele === void 0 ? void 0 : ele.roleName) === null || _b === void 0 ? void 0 : _b.toLowerCase()) === 'admin'); })) === null || _d === void 0 ? void 0 : _d.map((ele) => ele === null || ele === void 0 ? void 0 : ele._id);
|
|
616
|
+
const defaultVal = (_g = (_f = (_e = this.lists) === null || _e === void 0 ? void 0 : _e.ROLES) === null || _f === void 0 ? void 0 : _f.data) === null || _g === void 0 ? void 0 : _g.filter((ele) => { var _a, _b; return (((_a = ele === null || ele === void 0 ? void 0 : ele.roleName) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === 'key admin' || ((_b = ele === null || ele === void 0 ? void 0 : ele.roleName) === null || _b === void 0 ? void 0 : _b.toLowerCase()) === 'admin'); });
|
|
616
617
|
this.lists.SYSTEM_ROLE_IDS = defaultSystemVal;
|
|
617
618
|
if (this.mode !== 'EDIT') {
|
|
618
619
|
this.setFormField('program_roles', defaultVal);
|
|
@@ -963,8 +964,10 @@ export class WorkflowProgramComponent {
|
|
|
963
964
|
program_assessments: [],
|
|
964
965
|
evidence_required: false,
|
|
965
966
|
allow_any_file_key_evidence: false,
|
|
966
|
-
custom_fields: []
|
|
967
|
+
custom_fields: [],
|
|
968
|
+
program_state: 0,
|
|
967
969
|
};
|
|
970
|
+
this.resetAdditionalOption();
|
|
968
971
|
this.programForm.reset();
|
|
969
972
|
this.programForm.patchValue(DEFAULT_VALUES);
|
|
970
973
|
this.editorData = {
|
|
@@ -972,6 +975,7 @@ export class WorkflowProgramComponent {
|
|
|
972
975
|
programDescription: ''
|
|
973
976
|
};
|
|
974
977
|
this.loader = false;
|
|
978
|
+
this.isNameExists = false;
|
|
975
979
|
this.fetchRoles();
|
|
976
980
|
this.refreshForm.emit(true);
|
|
977
981
|
this.form.nativeElement.scrollIntoView({ behavior: 'smooth', block: 'start' });
|
|
@@ -996,6 +1000,7 @@ export class WorkflowProgramComponent {
|
|
|
996
1000
|
this.setFormField('performance_calculation', res === null || res === void 0 ? void 0 : res.calculate_past_upcoming_event);
|
|
997
1001
|
this.setFormField('recurring_frequency', res === null || res === void 0 ? void 0 : res.program_frequency);
|
|
998
1002
|
this.setFormField('lock_scope_change', res === null || res === void 0 ? void 0 : res.lock_scope);
|
|
1003
|
+
this.setFormField('program_state', res === null || res === void 0 ? void 0 : res.state);
|
|
999
1004
|
const rc = res.rc_details.map((ele) => { return Object.assign(Object.assign({}, ele), { item_name: ele === null || ele === void 0 ? void 0 : ele.rc_name, item_id: ele === null || ele === void 0 ? void 0 : ele.rc_id }); });
|
|
1000
1005
|
this.setFormField('rc', rc);
|
|
1001
1006
|
this.setFormField('evidence_required', res === null || res === void 0 ? void 0 : res.evidence_upload_flag);
|
|
@@ -1135,11 +1140,25 @@ export class WorkflowProgramComponent {
|
|
|
1135
1140
|
//future need to add group condition here to prepopulate the data while editing.
|
|
1136
1141
|
});
|
|
1137
1142
|
}
|
|
1143
|
+
resetAdditionalOption() {
|
|
1144
|
+
this.additionalOption.ROLES = false;
|
|
1145
|
+
this.additionalOption.OWNERS = false;
|
|
1146
|
+
this.additionalOption.APPROVER = false;
|
|
1147
|
+
this.additionalOption.PROGRAM_FREQUENCY = false;
|
|
1148
|
+
this.additionalOption.SCOPE_CHANGES = false;
|
|
1149
|
+
this.additionalOption.RC = false;
|
|
1150
|
+
this.additionalOption.ASSIGNEES = false;
|
|
1151
|
+
this.additionalOption.REVIEWER = false;
|
|
1152
|
+
this.additionalOption.OVERSEER = false;
|
|
1153
|
+
this.additionalOption.ASSESSMENT = false;
|
|
1154
|
+
this.additionalOption.FORMATE_EVIDENCE = false;
|
|
1155
|
+
this.additionalOption.CUSTOM_FIELDS = false;
|
|
1156
|
+
}
|
|
1138
1157
|
}
|
|
1139
1158
|
WorkflowProgramComponent.decorators = [
|
|
1140
1159
|
{ type: Component, args: [{
|
|
1141
1160
|
selector: 'app-workflow-program',
|
|
1142
|
-
template: "<div class=\"workflow-program\" #form>\r\n <form novalidate [formGroup]=\"programForm\">\r\n <!-- Program Category Type -->\r\n <form-field [checked]=\"controls?.program_type?.value > -1\" [active]=\"false\" [disabled]=\"sideElements.includes(activeList)\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/issue-type.svg'\">\r\n <label class=\"vx-control-panel\">PROGRAM TYPE <span class=\"required\">*</span></label>\r\n <tab-selector formControlName=\"program_type\" [displayArray]=\"constants?.categoryType\"></tab-selector>\r\n <!-- <p *ngIf=\"program_name?.invalid\" class=\"error-message\">Add a program type</p> -->\r\n </form-field>\r\n\r\n <!-- Program Category Name -->\r\n <form-field [checked]=\"controls?.program_name?.value?.trim()?.length\" [active]=\"false\" [disabled]=\"sideElements.includes(activeList)\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/what.svg'\">\r\n <label class=\"vx-control-panel\">PROGRAM NAME <span class=\"required\">*</span></label>\r\n <input InputTrim formControlName=\"program_name\" type=\"text\"\r\n placeholder=\"What is the Program name?\">\r\n\r\n <p *ngIf=\"controls?.program_name?.errors && controls?.program_name?.touched\" class=\"error-message\">Enter a\r\n name for this Program.</p>\r\n <p *ngIf=\"isNameExists\" class=\"error-message\">Program name already exists.</p>\r\n <div class=\"upload-files vx-d-flex vx-align-center vx-flex-wrap vx-mt-1\">\r\n <file-pill *ngFor=\"let attachment of controls?.description_attachment?.value |slice:0:2\"\r\n [extension]=\"attachment?.org_file?.split('.').pop()\" [name]=\"attachment?.org_file\"\r\n [disabled]=\"attachment?.uploading\" (delete)=\"deleteAttachment('DESCRIPTION',attachment)\">\r\n </file-pill>\r\n <button *ngIf=\"controls?.description_attachment?.value?.length > 2\" class=\"file-count\" appPopover (click)=\"uploadFile.popover()\" placement=\"right\">+{{controls?.description_attachment?.value?.length - 2}}</button>\r\n <app-popover #uploadFile [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li class=\"vx-p-2\" *ngFor=\"let attachment of controls?.description_attachment?.value|slice:2\">\r\n <file-pill [extension]=\"attachment?.org_file?.split('.').pop()\" [name]=\"attachment?.org_file\"\r\n [disabled]=\"attachment?.uploading\" (delete)=\"deleteAttachment('DESCRIPTION',attachment)\"></file-pill>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n <marx-editor [(ngModel)]=\"editorData.programDescription\" [ngModelOptions]=\"{standalone: true}\"\r\n (sendSavedFiles)=\"selectFile('DESCRIPTION',$event)\"\r\n (ngModelChange)=\"setFormField('program_description',$event)\" [editorConfig]=\"constants?.description\">\r\n </marx-editor>\r\n\r\n </form-field>\r\n\r\n <!-- Objective -->\r\n <form-field [checked]=\"controls?.program_objective?.value?.trim()?.length\" [active]=\"activeList === 'OBJECTIVE'\" [disabled]=\"sideElements.includes(activeList) && activeList !== 'OBJECTIVE'\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/objectives.svg'\">\r\n <label class=\"vx-control-panel\">OBJECTIVE\r\n <!-- <span class=\"required\">*</span> -->\r\n </label>\r\n <marx-editor [(ngModel)]=\"editorData.programObjective\" [ngModelOptions]=\"{standalone: true}\"\r\n (sendSavedFiles)=\"selectFile('OBJECTIVE',$event)\"\r\n (ngModelChange)=\"setFormField('program_objective',$event, true)\" [editorConfig]=\"constants?.objective\">\r\n </marx-editor>\r\n <!-- <p *ngIf=\"!isObjectiveValid\" class=\"error-message\">Specify the objective for this Program.</p> -->\r\n </form-field>\r\n\r\n <!-- Roles -->\r\n <form-field [checked]=\"controls?.program_roles?.value?.length \" [active]=\"activeList === 'ROLE'\" [disabled]=\"sideElements.includes(activeList) && activeList !== 'ROLE'\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/roles.svg'\">\r\n <label class=\"vx-control-panel\">ROLE(S) <span class=\"required\">*</span><i class=\"icons\" [appTooltip]=\"'Role(s) let you specify the users that can be selected as Program owners and approvers.'\" placement=\"bottom\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i></label>\r\n <input-with-pill [placeholder]=\"'Which user roles have access to this program?'\"\r\n (select)=\"activateList('ROLE')\">\r\n <div class=\"selected\" *ngIf=\"controls?.program_roles?.value?.length\">\r\n <div class=\"chip-container\">\r\n <div class=\"chip-inner\">\r\n <span class=\"chip\"><i *ngIf=\"!lists.SYSTEM_ROLE_IDS.includes(controls?.program_roles?.value[0]?._id)\"\r\n (click)=\"remove(controls?.program_roles?.value[0],'ROLE')\"\r\n class=\"icons\"></i>{{controls?.program_roles?.value[0]?.roleName}}</span>\r\n <button *ngIf=\"controls?.program_roles?.value?.length > 1\" class=\"count\" appPopover\r\n (click)=\"role.popover()\" placement=\"right\">\r\n +{{controls?.program_roles?.value?.length - 1}}</button>\r\n </div>\r\n </div>\r\n <button *ngIf=\"activeList!=='ROLE'\" class=\"edit\" type=\"button\" (click)=\"activateList('ROLE')\"><i class=\"icons\"></i>\r\n Edit</button>\r\n </div>\r\n </input-with-pill>\r\n <p *ngIf=\"false\" class=\"error-message\">Add a role(s)</p>\r\n <app-popover #role [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let data of controls?.program_roles?.value | slice:1\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i *ngIf=\"!lists.SYSTEM_ROLE_IDS.includes(data?._id)\" class=\"icons\"\r\n (click)=\"removeRole(data,'ROLE')\"></i>\r\n {{data?.roleName}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </form-field>\r\n\r\n <!-- Owners -->\r\n <form-field [checked]=\"controls?.program_owners.value?.length > 0 || controls?.program_owners_group.value?.length > 0\" [active]=\"activeList === 'OWNER'\" [disabled]=\"sideElements.includes(activeList) && activeList !== 'OWNER'\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/owner.svg'\">\r\n <label class=\"vx-control-panel\">OWNER(S) <span class=\"required\">*</span><i class=\"icons\" [appTooltip]=\"'An owner is a user responsible for managing a Program. By default, the Key Admin and all users designated as Admins are selected as Program owners. Only users selected as owners can edit and make changes to the program and its associated responsibilities.'\" placement=\"bottom\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i></label>\r\n <input-with-pill [placeholder]=\"'Who is responsible for managing this program?'\"\r\n (select)=\"activateList('OWNER')\">\r\n <div class=\"selected\" *ngIf=\"controls?.program_owners.value[0]\">\r\n <div class=\"chip-container\">\r\n <div class=\"chip-inner\">\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">USER(S)</span></span>\r\n <button class=\"count user\" appPopover (click)=\"owner.popover()\" placement=\"right\">{{controls?.program_owners?.value?.length}}</button>\r\n </div>\r\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"controls?.program_owners_group?.value?.length && controls?.program_owners?.value?.length\">&</span>\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_owners_group?.value?.length\">\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">GROUP(S)</span></span>\r\n <button *ngIf=\"controls?.program_owners_group?.value?.length\" class=\"count\" appPopover (click)=\"group.popover()\" placement=\"right\">{{controls?.program_owners_group?.value?.length }}</button>\r\n </div>\r\n </div>\r\n <button *ngIf=\"activeList!=='OWNER'\" [class.disabled]=\"controls?.all_user_in_role?.value\" (click)=\"activateList('OWNER')\"\r\n class=\"edit\" type=\"button\"><i class=\"icons\"></i>Edit</button>\r\n </div>\r\n </input-with-pill>\r\n <p *ngIf=\"false\" class=\"error-message\">Add a owner(s)</p>\r\n <div class=\"vx-d-flex vx-align-center vx-justify-end vx-mt-2\">\r\n <div class=\"vx-fs-11 vx-fw-500 vx-paragraph-txt vx-tt-uppercase vx-mr-2\">ALL USERS ASSOCIATED WITH THE\r\n SELECTED ROLES</div>\r\n <switch formControlName=\"all_user_in_role\" (change)=\"selectAllRoleOwner($event)\"></switch>\r\n </div>\r\n <app-popover #owner [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let owner of controls?.program_owners?.value \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i *ngIf=\"!['ADMIN','KEY_ADMIN','LOGGED_IN'].includes(owner?.user_role)\"\r\n class=\"icons\" (click)=\"remove(owner,'OWNER')\"></i>\r\n {{owner?.member_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #group [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let owner of controls?.program_owners_group?.value \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i *ngIf=\"!['ADMIN','KEY_ADMIN','LOGGED_IN'].includes(owner?.user_role)\"\r\n class=\"icons\" (click)=\"remove(owner,'OWNER_GROUP')\"></i>\r\n {{owner?.member_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </form-field>\r\n\r\n <!-- Approvers -->\r\n <form-field [checked]=\"controls?.program_approver?.value?.length\" [active]=\"activeList === 'APPROVER'\" [disabled]=\"(sideElements.includes(activeList) && activeList !== 'APPROVER')\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/approval.svg'\">\r\n <label class=\"vx-control-panel\">APPROVER(S) <i class=\"icons\" [appTooltip]=\"'An approver is a user who is responsible for approving a Program. If an approver is selected, the Program can be started only after approval.'\" placement=\"bottom\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i></label>\r\n <input-with-pill [placeholder]=\"'Who is responsible for approving this program?'\"\r\n [disabled]=\"isApproverDisabled\" (select)=\"activateList('APPROVER')\">\r\n <div class=\"selected\" *ngIf=\"controls?.program_approver?.value[0]\">\r\n <div class=\"chip-container\">\r\n <div class=\"chip-inner\">\r\n <i *ngIf=\"isApproverDisabled === false\" (click)=\"remove(controls?.program_approver?.value[0],'APPROVER')\"\r\n class=\"icons vx-fs-9 vx-mr-1 cross\"></i>{{controls?.program_approver?.value[0]?.member_name}}\r\n </div>\r\n </div>\r\n <button *ngIf=\"(activeList!=='APPROVER') && isApproverDisabled === false\"(click)=\"activateList('APPROVER')\" class=\"edit\" type=\"button\"><i\r\n class=\"icons\"></i>Edit</button>\r\n </div>\r\n </input-with-pill>\r\n </form-field>\r\n\r\n <!-- Performance Calculated -->\r\n <form-field [checked]=\"controls?.performance_calculation?.value\" [active]=\"activeList === 'PERFORMANCE'\" [disabled]=\"sideElements.includes(activeList) && activeList !== 'PERFORMANCE'\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/performance-calc.svg'\">\r\n <label class=\"vx-control-panel\">HOW SHOULD THE PERFORMANCE OF THIS PROGRAM BE CALCULATED?</label>\r\n <tab-selector formControlName=\"performance_calculation\" [displayArray]=\"constants?.performanceCalculation\">\r\n </tab-selector>\r\n </form-field>\r\n <div class=\"scope-label vx-fs-10 vx-txt-white vx-tt-uppercase vx-pl-1 vx-pr-1 vx-mb-5 vx-lh-4 vx-d-inline-block\">PROGRAM SCOPE</div> <i class=\"icons info-icon vx-fs-12 vx-txt-blue vx-ml-1\" [appTooltip]=\"'The scope lets you define the frequency of the Program and set up default assignees, overseers, reviewers, assessments, and Responsibility Centers for the responsibilities associated with this Program.'\" placement=\"bottom\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i>\r\n\r\n <!-- Program Frequency -->\r\n <form-field [checked]=\"[true,false].includes(controls?.recurring_frequency?.value)\" [active]=\"activeList === 'FREQUENCY'\" [disabled]=\"sideElements.includes(activeList) && activeList !== 'FREQUENCY'\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/recurring.svg'\">\r\n <label class=\"vx-control-panel\">PROGRAM FREQUENCY <i class=\"icons\" [appTooltip]=\"'The Program Frequency lets you specify if a Program is recurring. If a Program is not recurring, then the Program will complete its lifecycle on the last day of your organization\u2019s business cycle. Additionally, all responsibilities associated with the Program will also complete their lifecycle on the same day.'\" placement=\"bottom\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i></label>\r\n <div class=\"upload-format\">\r\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\r\n <span class=\"text vx-mb-0\">Is this program recurring?</span>\r\n <div class=\"radio-group program\">\r\n <app-cs-radio [name]=\"'recurring_frequency'\" [checked]=\"controls?.recurring_frequency?.value\"\r\n (checkedEvent)=\"setFormField('recurring_frequency',true)\">YES</app-cs-radio>\r\n <app-cs-radio [name]=\"'recurring_frequency'\" [checked]=\"!controls?.recurring_frequency?.value\"\r\n (checkedEvent)=\"setFormField('recurring_frequency',false)\">NO</app-cs-radio>\r\n </div>\r\n </div>\r\n </div>\r\n </form-field>\r\n\r\n <!-- Scope Changes -->\r\n <form-field [checked]=\"[true,false].includes(controls?.lock_scope_change?.value)\" [active]=\"activeList === 'SCOPE'\" [disabled]=\"sideElements.includes(activeList) && activeList !== 'SCOPE'\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/lock-scope.svg'\">\r\n <label class=\"vx-control-panel\">SCOPE CHANGES <i class=\"icons\" [appTooltip]=\"'If scope changes are locked, the owners cannot add or remove any new responsibilities and program categories once a Program has started.'\" placement=\"bottom\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i></label>\r\n <div class=\"upload-format\">\r\n <span class=\"text\">Would you like to <span class=\"vx-label-txt vx-fw-500\">lock changes</span> to the program\r\n scope?</span>\r\n <div class=\"radio-group program\">\r\n <app-cs-radio [name]=\"'lock_scope_change'\" [checked]=\"controls?.lock_scope_change?.value\"\r\n (checkedEvent)=\"setFormField('lock_scope_change',true)\">YES</app-cs-radio>\r\n <app-cs-radio [name]=\"'lock_scope_change'\" [checked]=\"!controls?.lock_scope_change?.value\"\r\n (checkedEvent)=\"setFormField('lock_scope_change',false)\">NO</app-cs-radio>\r\n </div>\r\n </div>\r\n </form-field>\r\n\r\n <!-- Framework -->\r\n <!-- <form-field [checked]=\"false\" [active]=\"activeList === 'FRAMEWORK'\" [disabled]=\"sideElements.includes(activeList) && activeList !== 'FRAMEWORK'\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/category.svg'\">\r\n <label class=\"vx-control-panel\">FRAMEWORK</label>\r\n <input-with-pill [placeholder]=\"'Select a framework that this Program relates to'\" (select)=\"activateList('FRAMEWORK')\">\r\n <div class=\"selected\" *ngIf=\"controls?.framework?.value?.framework_name\">\r\n <div class=\"chip-container\">\r\n <div class=\"chip-inner\">\r\n <span class=\"chip\"><i (click)=\"remove(controls?.framework.value,'FRAMEWORK')\" class=\"icons\"></i>{{controls?.framework?.value?.framework_name}}</span>\r\n <button class=\"count\" appPopover (click)=\"framework.popover()\" placement=\"right\">+5</button>\r\n </div>\r\n </div>\r\n <button *ngIf=\"activeList!=='FRAMEWORK'\" (click)=\"activateList('FRAMEWORK')\" class=\"edit\" type=\"button\"><i class=\"icons\"></i> Edit</button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #framework [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let data of [1, 1, 1, 1, 1, 1, 1]\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\"></i>\r\n Manage framework name\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </form-field> -->\r\n\r\n <!-- Responsibility Center -->\r\n <form-field [checked]=\"controls?.rc?.value?.length\" [active]=\"activeList === 'RC'\" [disabled]=\"sideElements.includes(activeList) && activeList !== 'RC'\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/responsibility-center.svg'\">\r\n <label class=\"vx-control-panel\">RESPONSIBILITY CENTER <i class=\"icons\" [appTooltip]=\"'Responsibility Centers represent your organizational and operational infrastructure. You can associate one or more Responsibility Centers with a Program. Thereafter, all the responsibilities within this Program can only be linked with the associated Responsibility Centers.'\" placement=\"bottom\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i></label>\r\n <input-with-pill [selectDiv]=\"true\" (select)=\"activateList('RC')\"\r\n [placeholder]=\"'Which Responsibility Center(s) can be linked to the responsibilities associated with this Program?'\">\r\n <div class=\"selected\" *ngIf=\"controls?.rc?.value && controls?.rc?.value?.length\">\r\n <div class=\"chip-container\">\r\n <div class=\"chip-inner\">\r\n <span class=\"chip\"><i class=\"icons\"\r\n (click)=\"remove(controls?.rc?.value[0],'RC')\"></i>{{controls?.rc?.value[0]?.item_name}}</span>\r\n <button *ngIf=\"controls?.rc?.value?.length > 1\" class=\"count\" appPopover\r\n (click)=\"rc.popover()\" placement=\"right\">+{{controls?.rc?.value?.length -1 }}</button>\r\n </div>\r\n </div>\r\n <button *ngIf=\"activeList!=='RC'\" class=\"edit\" type=\"button\" (click)=\"activateList('RC')\"><i class=\"icons\"></i>\r\n Edit</button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #rc [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let rc of controls?.rc?.value |slice:1\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove(rc,'RC')\"></i>\r\n {{rc?.item_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </form-field>\r\n\r\n <!-- Assignee -->\r\n <form-field [checked]=\"controls?.program_assignee?.value?.length || controls?.program_default_assignee?.value?.length ||controls?.program_default_assignee?.value?.length || controls?.program_default_assignee_group?.value?.length\"\r\n [active]=\"['ASSIGNEE','DEFAULT_ASSIGNEE']?.includes(activeList)\" [disabled]=\"sideElements?.includes(activeList) && !['ASSIGNEE','DEFAULT_ASSIGNEE'].includes(activeList)\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/who.svg'\">\r\n <label class=\"vx-control-panel\" [class.disabled]=\"activeList === 'DEFAULT_ASSIGNEE'\">ASSIGNEE(S) <i class=\"icons\" [appTooltip]=\"'Assignees are users to whom you can assign a responsibility. While creating a Program, you can select the set of assignees responsible for completing responsibilities within this Program.'\" placement=\"bottom\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i> </label>\r\n <input-with-pill [selectDiv]=\"true\" [disabled]=\"activeList === 'DEFAULT_ASSIGNEE'\" [placeholder]=\"'Who is responsible for completing the responsibilities within this Program?\r\n\r\n '\"\r\n (select)=\"activateList('ASSIGNEE')\">\r\n <div class=\"selected\" *ngIf=\"controls?.program_assignee?.value?.length || controls?.program_assignee_group?.value?.length\">\r\n <div class=\"chip-container\">\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_assignee?.value?.length\">\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">USER(S)</span></span>\r\n <button class=\"count user\" appPopover (click)=\"assignee.popover()\" placement=\"right\">{{controls?.program_assignee?.value?.length}}</button>\r\n </div>\r\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"controls?.program_assignee_group?.value?.length && controls?.program_assignee?.value?.length\">&</span>\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_assignee_group?.value?.length\">\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">GROUP(S)</span></span>\r\n <button *ngIf=\"controls?.program_assignee_group?.value?.length\" class=\"count\" appPopover (click)=\"assignee_group.popover()\" placement=\"right\">{{controls?.program_assignee_group?.value?.length }}</button>\r\n </div>\r\n </div>\r\n <button *ngIf=\"activeList!=='ASSIGNEE'\" class=\"edit\" type=\"button\" (click)=\"activateList('ASSIGNEE')\"><i class=\"icons\"></i> Edit</button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #assignee [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let assignee of controls?.program_assignee?.value\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i (click)=\"remove(assignee,'ASSIGNEE')\" class=\"icons\"></i>\r\n {{assignee?.member_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #assignee_group [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let group of controls?.program_assignee_group?.value\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i (click)=\"remove(group,'ASSIGNEE_GROUP')\" class=\"icons\"></i>\r\n {{group?.group_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <label class=\"vx-control-panel\" [class.disabled]=\"activeList === 'ASSIGNEE'\">DEFAULT ASSIGNEE(S) <i class=\"icons\" [appTooltip]=\"'This option lets you specify the default assignees for all new responsibilities associated with a Program. If a default assignee is selected, the user will automatically be selected as an assignee within the \\'Create a Responsibility\\' form. However, the assignor can make changes, if required.'\" placement=\"bottom\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i></label>\r\n <input-with-pill [selectDiv]=\"true\" [disabled]=\"activeList === 'ASSIGNEE'\" [placeholder]=\"'Which persons will be selected as the default assignees for the responsibilities within this Program?'\" (select)=\"activateList('DEFAULT_ASSIGNEE')\">\r\n <div class=\"selected\" *ngIf=\"controls?.program_default_assignee?.value?.length || controls?.program_default_assignee_group?.value?.length\">\r\n <div class=\"chip-container\">\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_default_assignee?.value?.length\">\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">USER(S)</span></span>\r\n <button class=\"count user\" appPopover (click)=\"defaultAssignee.popover()\" placement=\"right\">{{controls?.program_default_assignee?.value?.length}}</button>\r\n </div>\r\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"controls?.program_default_assignee_group?.value?.length && controls?.program_default_assignee?.value?.length\">&</span>\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_default_assignee_group?.value?.length\">\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">GROUP(S)</span></span>\r\n <button *ngIf=\"controls?.program_default_assignee_group?.value?.length\" class=\"count\" appPopover (click)=\"defaultAssigneeGroup.popover()\" placement=\"right\">{{controls?.program_default_assignee_group?.value?.length }}</button>\r\n </div>\r\n </div>\r\n <button *ngIf=\"activeList!=='DEFAULT_ASSIGNEE'\" (click)=\"activateList('DEFAULT_ASSIGNEE')\" class=\"edit\" type=\"button\"><i class=\"icons\"></i> Edit</button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #defaultAssignee [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let assignee of controls?.program_default_assignee?.value \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i (click)=\"remove(assignee,'DEFAULT_ASSIGNEE')\" class=\"icons\"></i>\r\n {{assignee?.member_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #defaultAssigneeGroup [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let group of controls?.program_default_assignee_group?.value\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i (click)=\"remove(assignee,'DEFAULT_ASSIGNEE_GROUP')\" class=\"icons\"></i>\r\n {{group?.group_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <div class=\"radio-group-selector\" [class.disabled]=\"activeList === 'ASSIGNEE'\">\r\n <app-cs-radio [name]=\"'assignee'\" [checked]=\"controls?.assignee_completion_criteria?.value === 'ALL'\" (checkedEvent)=\"setFormField('assignee_completion_criteria', 'ALL')\">\r\n ALL SELECTED PERSONS NEED TO COMPLETE THIS <i class=\"icons\"\r\n [appTooltip]=\"'If selected, separate responsibilities will be created for each person.'\"\r\n placement=\"bottom-right\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\" ></i>\r\n </app-cs-radio>\r\n <app-cs-radio [name]=\"'assignee'\" [checked]=\"controls?.assignee_completion_criteria?.value === 'ANYONE'\" (checkedEvent)=\"setFormField('assignee_completion_criteria', 'ANYONE')\">\r\n ANY SELECTED PERSON CAN COMPLETE THIS <i class=\"icons\"\r\n [appTooltip]=\"'If selected, only one responsibility will be created.'\" placement=\"bottom-right\"\r\n delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i>\r\n </app-cs-radio>\r\n </div>\r\n </form-field>\r\n\r\n <!-- Reviewer -->\r\n <form-field [appScrollInView]=\"scrollToBottom\" *ngIf=\"additionalOption?.REVIEWER\"\r\n [checked]=\"controls?.program_reviewer?.value?.length || controls?.program_default_reviewer?.value?.length ||controls?.program_default_reviewer?.value?.length || controls?.program_default_reviewer_group?.value?.length\"\r\n [active]=\"['REVIEWER','DEFAULT_REVIEWER']?.includes(activeList)\" [disabled]=\"sideElements?.includes(activeList) && !['REVIEWER','DEFAULT_REVIEWER'].includes(activeList)\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/reviewer.svg'\">\r\n <label [class.disabled]=\"activeList === 'DEFAULT_REVIEWER'\" class=\"vx-control-panel\">Reviewer(s) <i class=\"icons\" [appTooltip]=\"'Reviewers are users who can review a responsibility after it has been completed. While creating a Program, you can select the set of reviewers responsible for reviewing responsibilities within this Program.'\" placement=\"bottom\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i></label>\r\n <input-with-pill [selectDiv]=\"true\" [disabled]=\"activeList === 'DEFAULT_REVIEWER'\" [placeholder]=\"'Who is responsible for reviewing the responsibilities within this Program?'\" (select)=\"activateList('REVIEWER')\">\r\n <div class=\"selected\" *ngIf=\"controls?.program_reviewer?.value?.length || controls?.program_reviewer_group?.value?.length\">\r\n\r\n <div class=\"chip-container\">\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_reviewer?.value?.length\">\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">USER(S)</span></span>\r\n <button class=\"count user\" appPopover (click)=\"reviewer.popover()\" placement=\"right\">{{controls?.program_reviewer?.value?.length}}</button>\r\n </div>\r\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"controls?.program_reviewer_group?.value?.length && controls?.program_reviewer?.value?.length\">&</span>\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_reviewer_group?.value?.length\">\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">GROUP(S)</span></span>\r\n <button *ngIf=\"controls?.program_reviewer_group?.value?.length\" class=\"count\" appPopover (click)=\"reviewerGroup.popover()\" placement=\"right\">{{controls?.program_reviewer_group?.value?.length }}</button>\r\n </div>\r\n </div>\r\n <button *ngIf=\"activeList!=='REVIEWER'\" (click)=\"activateList('REVIEWER')\" class=\"edit\" type=\"button\"><i class=\"icons\"></i> Edit</button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #reviewer [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let reviewer of controls?.program_reviewer?.value\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i (click)=\"remove(reviewer,'REVIEWER')\" class=\"icons\"></i>\r\n {{reviewer?.member_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #reviewerGroup [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let group of controls?.program_reviewer_group?.value\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i (click)=\"remove(group,'REVIEWER_GROUP')\" class=\"icons\"></i>\r\n {{group?.group_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <label [class.disabled]=\"activeList === 'REVIEWER'\" class=\"vx-control-panel\">DEFAULT Reviewer(S) <i class=\"icons\" [appTooltip]=\"'This option lets you specify the default reviewers for all new responsibilities associated with a Program. If a default reviewer is selected, the user will automatically be selected as a reviewer within the \\'Create a Responsibility\\' form. However, the assignor can make changes to this setting, if required.'\" placement=\"bottom\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i></label>\r\n <input-with-pill [selectDiv]=\"true\" [disabled]=\"activeList === 'REVIEWER'\" [placeholder]=\"'Which persons will be selected as the default reviewers for the responsibilities within this Program?'\" (select)=\"activateList('DEFAULT_REVIEWER')\">\r\n <div class=\"selected\" *ngIf=\"controls?.program_default_reviewer?.value?.length || controls?.program_default_reviewer_group?.value?.length\">\r\n <div class=\"chip-container\">\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_default_reviewer?.value?.length\">\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">USER(S)</span></span>\r\n <button class=\"count user\" appPopover (click)=\"defaultReviewer.popover()\" placement=\"right\">{{controls?.program_default_reviewer?.value?.length}}</button>\r\n </div>\r\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"controls?.program_default_reviewer_group?.value?.length && controls?.program_default_reviewer?.value?.length\">&</span>\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_default_reviewer_group?.value?.length\">\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">GROUP(S)</span></span>\r\n <button *ngIf=\"controls?.program_default_reviewer_group?.value?.length\" class=\"count\" appPopover (click)=\"assignee_group.popover()\" placement=\"right\">{{controls?.program_default_reviewer_group?.value?.length }}</button>\r\n </div>\r\n </div>\r\n <button *ngIf=\"activeList!=='DEFAULT_REVIEWER'\" (click)=\"activateList('DEFAULT_REVIEWER')\" class=\"edit\" type=\"button\"><i class=\"icons\"></i> Edit</button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #defaultReviewer [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let reviewer of controls?.program_default_reviewer?.value\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i (click)=\"remove(reviewer,'DEFAULT_REVIEWER')\" class=\"icons\"></i>\r\n {{reviewer?.member_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #defaultReviewerGroup [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let group of controls?.program_default_reviewer_group?.value \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i (click)=\"remove(group,'DEFAULT_REVIEWER_GROUP')\" class=\"icons\"></i>\r\n {{group?.group_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <div class=\"radio-group-selector\" [class.disabled]=\"activeList === 'REVIEWER'\">\r\n <app-cs-radio [name]=\"'reviewer'\" [checked]=\"controls?.reviewer_completion_criteria?.value == 'SEQUENTIAL'\" (checkedEvent)=\"setFormField('reviewer_completion_criteria', 'SEQUENTIAL')\">\r\n SEQUENTIAL <i class=\"icons\"\r\n [appTooltip]=\"'The responsibility will be sent for review one at a time in the sequence defined by you.'\"\r\n placement=\"bottom-right\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i>\r\n </app-cs-radio>\r\n <app-cs-radio [name]=\"'reviewer'\" [checked]=\"controls?.reviewer_completion_criteria?.value == 'ANYONE'\" (checkedEvent)=\"setFormField('reviewer_completion_criteria', 'ANYONE')\">\r\n ANY REVIEWER CAN MARK THIS AS REVIEWED <i class=\"icons\"\r\n [appTooltip]=\"'The responsibility will be sent for review to all reviewers at the same time. If anyone of the reviewer reviews the responsibility, it will be considered as reviewed.'\"\r\n placement=\"bottom-right\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i>\r\n </app-cs-radio>\r\n </div>\r\n </form-field>\r\n\r\n <!-- Overseer -->\r\n <form-field [appScrollInView]=\"scrollToBottom\" *ngIf=\"additionalOption?.OVERSEER\"\r\n [checked]=\"controls?.program_overseer?.value?.length || controls?.program_default_overseer?.value?.length ||controls?.program_default_overseer?.value?.length || controls?.program_default_overseer_group?.value?.length\"\r\n [active]=\"activeList === 'OVERSEER'\" [disabled]=\"sideElements?.includes(activeList) && !['OVERSEER','DEFAULT_OVERSEER','DEFAULT_FAILED_OVERSEER'].includes(activeList)\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/oversight.svg'\">\r\n <label class=\"vx-control-panel\" [class.disabled]=\"['DEFAULT_OVERSEER','DEFAULT_FAILED_OVERSEER'].includes(activeList)\">Overseer <i class=\"icons\" [appTooltip]=\"'Overseers refer to the users who can oversee a responsibility and receive email updates when a responsibility is completed or not completed. While creating a Program, this options lets you restrict the users who can oversee the responsibilities associated with the Program.'\" placement=\"bottom\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i></label>\r\n <input-with-pill [selectDiv]=\"true\" [disabled]=\"['DEFAULT_OVERSEER','DEFAULT_FAILED_OVERSEER'].includes(activeList)\" [placeholder]=\"'Who is responsible for overseeing the responsibilities within this Program?'\" (select)=\"activateList('OVERSEER')\">\r\n <div class=\"selected\" *ngIf=\"controls?.program_overseer?.value?.length || controls?.program_overseer_group?.value?.length\">\r\n <div class=\"chip-container\">\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_overseer?.value?.length\">\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">USER(S)</span></span>\r\n <button class=\"count user\" appPopover (click)=\"overseers.popover()\" placement=\"right\">{{controls?.program_overseer?.value?.length}}</button>\r\n </div>\r\n\r\n <span *ngIf=\"controls?.program_overseer_group?.value?.length && controls?.program_overseer?.value?.length \" class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\">&</span>\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_overseer_group?.value?.length \">\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">GROUP(S)</span></span>\r\n <button class=\"count\" appPopover (click)=\"overseerGroup.popover()\" placement=\"right\">{{controls?.program_overseer_group?.value?.length}}</button>\r\n </div>\r\n </div>\r\n\r\n <button *ngIf=\"activeList!=='OVERSEER'\" (click)=\"activateList('OVERSEER')\" class=\"edit\" type=\"button\"><i class=\"icons\"></i> Edit</button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #overseers [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let overseer of controls?.program_overseer?.value\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove(overseer,'OVERSEER')\"></i> {{overseer?.member_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #overseerGroup [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let group of controls?.program_overseer_group?.value\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i (click)=\"remove(group,'OVERSEER_GROUP')\" class=\"icons\"></i> {{group?.group_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <ng-container [class.disabled]=\"activeList === 'OVERSEER'\">\r\n <label class=\"vx-control-panel\" [class.disabled]=\"['OVERSEER'].includes(activeList)\">DEFAULT Overseer <i class=\"icons\" [appTooltip]=\"'This option lets you specify the default overseers for all new responsibilities associated with a Program. If a default overseer is selected, the user will automatically be selected as an overseer within the \\'Create a Responsibility\\' form. However, the assignor can make changes to this setting, if required.'\" placement=\"bottom\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i></label>\r\n <input-with-pill [disabled]=\"['OVERSEER','DEFAULT_FAILED_OVERSEER'].includes(activeList)\" [selectDiv]=\"true\" [placeholder]=\"'Which persons will be selected as the default overseers for the responsibilities within this Program?'\" (select)=\"activateList('DEFAULT_OVERSEER')\">\r\n <div class=\"selected\" *ngIf=\"controls?.program_default_overseer?.value?.length || controls?.program_default_overseer_group?.value?.length\">\r\n <div class=\"chip-container\">\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_default_overseer?.value?.length\">\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">USER(S)</span></span>\r\n <button class=\"count user\" appPopover (click)=\"overseersDefault.popover()\" placement=\"right\">{{controls?.program_default_overseer?.value?.length}}</button>\r\n </div>\r\n\r\n <span *ngIf=\"controls?.program_default_overseer_group?.value?.length && controls?.program_default_overseer?.value?.length\" class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\">&</span>\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_default_overseer_group?.value?.length \">\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">GROUP(S)</span></span>\r\n <button class=\"count\" appPopover (click)=\"overseerDefaultGroup.popover()\" placement=\"right\">{{controls?.program_default_overseer_group?.value?.length}}</button>\r\n </div>\r\n </div>\r\n <button *ngIf=\"activeList!=='DEFAULT_OVERSEER'\" (click)=\"activateList('DEFAULT_OVERSEER')\" class=\"edit\" type=\"button\"><i class=\"icons\"></i> Edit</button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #overseersDefault [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let overseer of controls?.program_default_overseer?.value\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove(overseer,'DEFAULT_OVERSEER')\"></i> {{overseer?.member_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #overseerDefaultGroup [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let group of controls?.program_default_overseer_group?.value\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i (click)=\"remove(group,'DEFAULT_OVERSEER_GROUP')\" class=\"icons\"></i> {{group?.group_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <label class=\"vx-control-panel\" > </label>\r\n <input-with-pill class=\"vx-mt-2\" [selectDiv]=\"true\" [line]=\"3\" [disabled]=\"['OVERSEER','DEFAULT_OVERSEER'].includes(activeList)\" [placeholder]=\"'Which persons will be selected as the default overseers for responsibilities that are not completed within this Program?'\" (select)=\"activateList('DEFAULT_FAILED_OVERSEER')\">\r\n <div class=\"selected\" *ngIf=\"controls?.program_default_failed_overseer?.value?.length || controls?.program_default_failed_overseer_group?.value?.length\">\r\n <div class=\"chip-container\">\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_default_failed_overseer?.value?.length\">\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">USER(S)</span></span>\r\n <button class=\"count user\" appPopover (click)=\"overseersDefaultFail.popover()\" placement=\"right\">{{controls?.program_default_failed_overseer?.value?.length}}</button>\r\n </div>\r\n\r\n <span *ngIf=\"controls?.program_default_failed_overseer_group?.value?.length && controls?.program_default_failed_overseer?.value?.length\" class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\">&</span>\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_default_failed_overseer_group?.value?.length \">\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">GROUP(S)</span></span>\r\n <button class=\"count\" appPopover (click)=\"overseerDefaultFailGroup.popover()\" placement=\"right\">{{controls?.program_default_failed_overseer_group?.value?.length}}</button>\r\n </div>\r\n </div>\r\n <button *ngIf=\"activeList!=='DEFAULT_FAILED_OVERSEER'\" (click)=\"activateList('DEFAULT_FAILED_OVERSEER')\" class=\"edit\" type=\"button\"><i class=\"icons\"></i> Edit</button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #overseersDefaultFail [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let overseer of controls?.program_default_failed_overseer?.value\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove(overseer,'DEFAULT_FAILED_OVERSEER')\"></i> {{overseer?.member_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #overseerDefaultFailGroup [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let group of controls?.program_default_failed_overseer_group?.value\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i (click)=\"remove(group,'DEFAULT_FAILED_OVERSEER_GROUP')\" class=\"icons\"></i> {{group?.group_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n</ng-container>\r\n </form-field>\r\n\r\n <!-- Assessment -->\r\n <form-field [appScrollInView]=\"scrollToBottom\" *ngIf=\"additionalOption?.ASSESSMENT\"\r\n [checked]=\"controls?.program_assessments?.value?.length\"\r\n [active]=\"activeList === 'ASSESSMENT'\" [disabled]=\"sideElements.includes(activeList) && activeList !== 'ASSESSMENT'\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/assessments.svg'\">\r\n <label class=\"vx-control-panel\">ASSESSMENTS <i class=\"icons\" [appTooltip]=\"'Assessments allows you to associate outcome based questionnaires or self-assessment questionnaires with a responsibility. This option lets you specify which assessments can be linked with responsibilities within a Program.'\" placement=\"bottom\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i></label>\r\n <input-with-pill [selectDiv]=\"true\" [placeholder]=\"'Which assessments can be linked to the responsibilities within this Program?'\" (select)=\"activateList('ASSESSMENT')\">\r\n <div class=\"selected\" *ngIf=\"controls?.program_assessments?.value?.length\">\r\n <div class=\"chip-container\">\r\n <ng-container *ngIf=\"(controls?.program_assessments?.value | assessmentResolver) as assessments\">\r\n <div class=\"chip-inner\">\r\n <span class=\"chip\"><i class=\"icons\"\r\n (click)=\"remove(assessments[0],'ASSESSMENT')\"></i>{{assessments[0]?.assessment_name}} </span>\r\n <button *ngIf=\"assessments?.length > 1\" class=\"count\" appPopover\r\n (click)=\"program_assessments.popover()\" placement=\"right\">+{{assessments?.length -1 }}</button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <button *ngIf=\"activeList!=='ASSESSMENT'\" class=\"edit\" type=\"button\" (click)=\"activateList('ASSESSMENT')\"><i class=\"icons\"></i>\r\n Edit</button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #program_assessments [dontCloseonClick]=\"true\">\r\n <ng-container >\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n\r\n <li *ngFor=\"let assessment of (controls?.program_assessments?.value | assessmentResolver) | slice:1\">\r\n <div class=\"avatar-card\" >\r\n <span class=\"value\">\r\n <i (click)=\"remove(assessment,'ASSESSMENT')\" class=\"icons\" ></i> {{assessment?.assessment_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </ng-container>\r\n </app-popover>\r\n </form-field>\r\n\r\n\r\n <!-- Format & Evidence -->\r\n <form-field [appScrollInView]=\"scrollToBottom\" *ngIf=\"additionalOption?.FORMATE_EVIDENCE\" [checked]=\"[true,false].includes(controls?.evidence_required?.value)\"\r\n [active]=\"false\" [disabled]=\"sideElements.includes(activeList)\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/format-evidence.svg'\">\r\n <label class=\"vx-control-panel\">Evidence <i class=\"icons\" [appTooltip]=\"'This option lets you specify if the evidence of completion of a responsibility within a Program needs to be uploaded. If \u2018Yes\u2019 is selected, the assignees for all responsibilities associated with the Program will be required to upload evidence while completing the responsibility. However, the assignor can make changes to this setting if required.'\" placement=\"bottom\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i></label>\r\n <div class=\"upload-format\">\r\n\r\n <span class=\"text\">Do all responsibilities within this program require evidence?</span>\r\n <div class=\"radio-group program\">\r\n <app-cs-radio [name]=\"'evidence_required'\" [checked]=\"controls?.evidence_required?.value\"\r\n (checkedEvent)=\"setFormField('evidence_required',true)\">YES</app-cs-radio>\r\n <app-cs-radio [name]=\"'evidence_required'\" [checked]=\"!controls?.evidence_required?.value\"\r\n (checkedEvent)=\"setFormField('evidence_required',false)\">NO</app-cs-radio>\r\n </div>\r\n </div>\r\n <!-- <div class=\"vx-d-flex vx-align-center vx-justify-end vx-mt-2\">\r\n <div class=\"vx-fs-11 vx-fw-500 vx-paragraph-txt vx-tt-uppercase vx-mr-2\">Allow any file to be marked as\r\n key\r\n evidence</div>\r\n <switch formControlName=\"allow_any_file_key_evidence\"\r\n (change)=\"setFormField('allow_any_file_key_evidence',$event?.target?.checked)\"></switch>\r\n </div> -->\r\n </form-field>\r\n\r\n\r\n <!-- Custom Field -->\r\n <form-field [appScrollInView]=\"scrollToBottom\" *ngIf=\"additionalOption?.CUSTOM_FIELDS\" [checked]=\"controls?.custom_fields?.value?.length\"\r\n [active]=\"false\" [disabled]=\"sideElements.includes(activeList)\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/custom-fields.svg'\">\r\n <label class=\"vx-control-panel\">CUSTOM FIELDS <i class=\"icons\" [appTooltip]=\"'Custom fields enable you to add additional meta data to a responsibility.'\" placement=\"bottom\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i></label>\r\n <custom-field formControlName=\"custom_fields\"></custom-field>\r\n </form-field>\r\n </form>\r\n</div>\r\n\r\n\r\n<!-- list of roles -->\r\n<role-list *ngIf=\"activeList === 'ROLE'\" [selected]=\"controls?.program_roles?.value | refDisconnect\" [loading]=\"listLoadingState.ROLES\"\r\n [list]=\"lists?.ROLES?.data ?? []\" (save)=\"listAction($event,'ROLE')\" (cancel)=\"fieldDeselector('ROLE')\"></role-list>\r\n\r\n<!-- list of frameworks -->\r\n<app-define-framework-listing (cancel)=\"fieldDeselector('FRAMEWORK')\" (next)=\"listAction($event,'FRAMEWORK')\" [mode]=\"mode\" [selectedFramework]=\"controls?.framework?.value\"></app-define-framework-listing>\r\n<!-- list of responsibility center -->\r\n<app-responsibility-centers-list *ngIf=\"activeList === 'RC'\" [responsibilityCentersList]=\"lists?.RC ?? []\"\r\n [radioSelection]=\"false\" [rcIdKey]=\"'rc_id'\" (closeRcList)=\"fieldDeselector('RC')\"\r\n (saveSelectedList)=\"listAction($event,'RC')\" [selectedResponsibilityCenters]=\"controls?.rc?.value | refDisconnect\">\r\n</app-responsibility-centers-list>\r\n<!-- render userlist with group -->\r\n\r\n<user-group-list *ngIf=\"activeList === 'OWNER'\" [groupEnabled]=\"true\" [singleSelect]=\"false\" [loading]=\"listLoadingState.USERS\"\r\n [nonRemovableUserIds]=\"lists.NON_REMOVABLE_OWNERS | listToId : 'member_id'\" [userlist]=\"lists?.OWNERS?.data ?? []\"\r\n [selectedUsers]=\"controls?.program_owners?.value | refDisconnect\"\r\n (fetchUserData)=\"fetchUsersAssociatedWithRoles(false,$event)\" [userListInfo]=\"lists?.OWNERS\"\r\n [groupListInfo]=\"lists?.OWNERS_GROUPS\" [groupList]=\"lists?.OWNERS_GROUPS?.data ?? []\"\r\n [selectedGroups]=\"controls?.program_owners_group?.value | refDisconnect\" (save)=\"listAction($event,'OWNER')\"\r\n (cancel)=\"fieldDeselector('OWNER')\" [panelTitle]=\"panelTitleOwner\"></user-group-list>\r\n<user-group-list *ngIf=\"activeList === 'APPROVER'\" [groupEnabled]=\"false\" [singleSelect]=\"true\"\r\n [userlist]=\"lists?.APPROVERS?.data ?? []\" [selectedUsers]=\"controls?.program_approver?.value | refDisconnect\"\r\n [userListInfo]=\"lists?.APPROVERS\" (save)=\"listAction($event,'APPROVER')\" (cancel)=\"fieldDeselector('APPROVER')\" [panelTitle]=\"panelTitleApprover\">\r\n</user-group-list>\r\n<user-group-list *ngIf=\"activeList === 'ASSIGNEE'\" [groupEnabled]=\"true\" [singleSelect]=\"false\"\r\n [userlist]=\"lists?.ASSIGNEES ?? []\" [selectedUsers]=\"controls?.program_assignee?.value | refDisconnect\" [groupList]=\"lists?.ASSIGNEES_GROUP ?? []\"\r\n [selectedGroups]=\"controls?.program_assignee_group?.value | refDisconnect\"\r\n [userListInfo]=\"lists?.ASSIGNEES\" (save)=\"listAction($event,'ASSIGNEE')\" (cancel)=\"fieldDeselector('ASSIGNEE')\" [panelTitle]=\"panelTitleAssignee\">\r\n</user-group-list>\r\n<user-group-list *ngIf=\"activeList === 'DEFAULT_ASSIGNEE'\" [groupEnabled]=\"true\" [singleSelect]=\"false\"\r\n [userlist]=\"lists?.DEFAULT_ASSIGNEES ?? []\" [selectedUsers]=\"controls?.program_default_assignee?.value | refDisconnect\" [groupList]=\"lists?.DEFAULT_ASSIGNEES_GROUP ?? []\"\r\n [selectedGroups]=\"controls?.program_default_assignee_group?.value | refDisconnect\"\r\n [userListInfo]=\"lists?.DEFAULT_ASSIGNEE\" (save)=\"listAction($event,'DEFAULT_ASSIGNEE')\" (cancel)=\"fieldDeselector('DEFAULT_ASSIGNEE')\">\r\n</user-group-list>\r\n\r\n<user-group-list *ngIf=\"activeList === 'REVIEWER'\" [groupEnabled]=\"false\" [singleSelect]=\"false\"\r\n [userlist]=\"lists?.REVIEWERS ?? []\" [selectedUsers]=\"controls?.program_reviewer?.value | refDisconnect\" [groupList]=\"lists?.REVIEWERS_GROUP ?? []\"\r\n [selectedGroups]=\"controls?.program_reviewer_group?.value | refDisconnect\"\r\n [userListInfo]=\"lists?.REVIEWERS\" (save)=\"listAction($event,'REVIEWER')\" (cancel)=\"fieldDeselector('REVIEWER')\" [panelTitle]=\"panelTitleReviewer\">\r\n</user-group-list>\r\n<user-group-list *ngIf=\"activeList === 'DEFAULT_REVIEWER'\" [groupEnabled]=\"false\" [singleSelect]=\"false\"\r\n [userlist]=\"lists?.DEFAULT_REVIEWERS ?? []\" [selectedUsers]=\"controls?.program_default_reviewer?.value | refDisconnect\" [groupList]=\"lists?.DEFAULT_REVIEWERS_GROUP ?? []\"\r\n [selectedGroups]=\"controls?.program_default_reviewer_group?.value | refDisconnect\"\r\n [userListInfo]=\"lists?.DEFAULT_REVIEWERS\" (save)=\"listAction($event,'DEFAULT_REVIEWER')\" (cancel)=\"fieldDeselector('DEFAULT_REVIEWER')\" [panelTitle]=\"panelTitleDefaultReviewer\">\r\n</user-group-list>\r\n<user-group-list *ngIf=\"activeList === 'OVERSEER'\" [groupEnabled]=\"false\" [singleSelect]=\"false\"\r\n [userlist]=\"lists?.OVERSEERS ?? []\" [selectedUsers]=\"controls?.program_overseer?.value | refDisconnect\" [groupList]=\"lists?.OVERSEERS_GROUP ?? []\"\r\n [selectedGroups]=\"controls?.program_overseer_group?.value | refDisconnect\"\r\n [userListInfo]=\"lists?.OVERSEES\" (save)=\"listAction($event,'OVERSEER')\" (cancel)=\"fieldDeselector('OVERSEER')\">\r\n</user-group-list>\r\n<user-group-list *ngIf=\"activeList === 'DEFAULT_OVERSEER'\" [groupEnabled]=\"false\" [singleSelect]=\"false\"\r\n [userlist]=\"lists?.DEFAULT_OVERSEERS ?? []\" [selectedUsers]=\"controls?.program_default_overseer?.value | refDisconnect\" [groupList]=\"lists?.DEFAULT_OVERSEERS_GROUP ?? []\"\r\n [selectedGroups]=\"controls?.program_default_overseer_group?.value | refDisconnect\"\r\n [userListInfo]=\"lists?.DEFAULT_OVERSEERS\" (save)=\"listAction($event,'DEFAULT_OVERSEER')\" (cancel)=\"fieldDeselector('DEFAULT_OVERSEER')\">\r\n</user-group-list>\r\n<user-group-list *ngIf=\"activeList === 'DEFAULT_FAILED_OVERSEER'\" [groupEnabled]=\"false\" [singleSelect]=\"false\"\r\n [userlist]=\"lists?.DEFAULT_OVERSEERS ?? []\" [selectedUsers]=\"controls?.program_default_failed_overseer?.value | refDisconnect\" [groupList]=\"lists?.DEFAULT_OVERSEERS_GROUP ?? []\"\r\n [selectedGroups]=\"controls?.program_default_failed_overseer_group?.value | refDisconnect\"\r\n [userListInfo]=\"lists?.DEFAULT_OVERSEERS\" (save)=\"listAction($event,'DEFAULT_FAILED_OVERSEER')\" (cancel)=\"fieldDeselector('DEFAULT_FAILED_OVERSEER')\">\r\n</user-group-list>\r\n<assessment-picker *ngIf=\"activeList === 'ASSESSMENT'\" [selectedAssessment]=\"controls?.program_assessments?.value\" (cancelAssessment)=\"fieldDeselector('ASSESSMENT')\" (onAssessmentSelect)=\"listAction($event,'ASSESSMENT')\"></assessment-picker>\r\n<app-loader-inline *ngIf=\"loader\"></app-loader-inline>\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",
|
|
1161
|
+
template: "<div class=\"workflow-program\" #form>\r\n <form novalidate [formGroup]=\"programForm\">\r\n <!-- Program Category Type -->\r\n <form-field [checked]=\"controls?.program_type?.value > -1\" [active]=\"false\" [disabled]=\"sideElements.includes(activeList)\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/issue-type.svg'\">\r\n <label class=\"vx-control-panel\">PROGRAM TYPE <span class=\"required\">*</span></label>\r\n <tab-selector formControlName=\"program_type\" [displayArray]=\"constants?.categoryType\"></tab-selector>\r\n <!-- <p *ngIf=\"program_name?.invalid\" class=\"error-message\">Add a program type</p> -->\r\n </form-field>\r\n\r\n <!-- Program Category Name -->\r\n <form-field [checked]=\"controls?.program_name?.value?.trim()?.length\" [active]=\"false\" [disabled]=\"sideElements.includes(activeList)\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/what.svg'\">\r\n <label class=\"vx-control-panel\">PROGRAM NAME <span class=\"required\">*</span></label>\r\n <input InputTrim formControlName=\"program_name\" type=\"text\"\r\n placeholder=\"What is the Program name?\">\r\n\r\n <p *ngIf=\"controls?.program_name?.errors && controls?.program_name?.touched\" class=\"error-message\">Enter a\r\n name for this Program.</p>\r\n <p *ngIf=\"isNameExists\" class=\"error-message\">Program name already exists.</p>\r\n <div class=\"upload-files vx-d-flex vx-align-center vx-flex-wrap vx-mt-1\">\r\n <file-pill *ngFor=\"let attachment of controls?.description_attachment?.value |slice:0:2\"\r\n [extension]=\"attachment?.org_file?.split('.').pop()\" [name]=\"attachment?.org_file\"\r\n [disabled]=\"attachment?.uploading\" (delete)=\"deleteAttachment('DESCRIPTION',attachment)\">\r\n </file-pill>\r\n <button *ngIf=\"controls?.description_attachment?.value?.length > 2\" class=\"file-count\" appPopover (click)=\"uploadFile.popover()\" placement=\"right\">+{{controls?.description_attachment?.value?.length - 2}}</button>\r\n <app-popover #uploadFile [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li class=\"vx-p-2\" *ngFor=\"let attachment of controls?.description_attachment?.value|slice:2\">\r\n <file-pill [extension]=\"attachment?.org_file?.split('.').pop()\" [name]=\"attachment?.org_file\"\r\n [disabled]=\"attachment?.uploading\" (delete)=\"deleteAttachment('DESCRIPTION',attachment)\"></file-pill>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n <marx-editor [(ngModel)]=\"editorData.programDescription\" [ngModelOptions]=\"{standalone: true}\"\r\n (sendSavedFiles)=\"selectFile('DESCRIPTION',$event)\"\r\n (ngModelChange)=\"setFormField('program_description',$event)\" [editorConfig]=\"constants?.description\">\r\n </marx-editor>\r\n\r\n </form-field>\r\n\r\n <!-- Objective -->\r\n <form-field [checked]=\"controls?.program_objective?.value?.trim()?.length\" [active]=\"activeList === 'OBJECTIVE'\" [disabled]=\"sideElements.includes(activeList) && activeList !== 'OBJECTIVE'\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/objectives.svg'\">\r\n <label class=\"vx-control-panel\">OBJECTIVE\r\n <!-- <span class=\"required\">*</span> -->\r\n </label>\r\n <marx-editor [(ngModel)]=\"editorData.programObjective\" [ngModelOptions]=\"{standalone: true}\"\r\n (sendSavedFiles)=\"selectFile('OBJECTIVE',$event)\"\r\n (ngModelChange)=\"setFormField('program_objective',$event, true)\" [editorConfig]=\"constants?.objective\">\r\n </marx-editor>\r\n <!-- <p *ngIf=\"!isObjectiveValid\" class=\"error-message\">Specify the objective for this Program.</p> -->\r\n </form-field>\r\n\r\n <!-- Roles -->\r\n <form-field *ngIf=\"additionalOption?.ROLES\" [checked]=\"controls?.program_roles?.value?.length \" [active]=\"activeList === 'ROLE'\" [disabled]=\"sideElements.includes(activeList) && activeList !== 'ROLE'\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/roles.svg'\">\r\n <label class=\"vx-control-panel\">ROLE(S) <span class=\"required\">*</span><i class=\"icons\" [appTooltip]=\"'Role(s) let you specify the users that can be selected as Program owners and approvers.'\" placement=\"bottom\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i></label>\r\n <input-with-pill [placeholder]=\"'Which user roles have access to this program?'\"\r\n (select)=\"activateList('ROLE')\">\r\n <div class=\"selected\" *ngIf=\"controls?.program_roles?.value?.length\">\r\n <div class=\"chip-container\">\r\n <div class=\"chip-inner\">\r\n <span class=\"chip\"><i *ngIf=\"!lists.SYSTEM_ROLE_IDS.includes(controls?.program_roles?.value[0]?._id)\"\r\n (click)=\"remove(controls?.program_roles?.value[0],'ROLE')\"\r\n class=\"icons\"></i>{{controls?.program_roles?.value[0]?.roleName}}</span>\r\n <button *ngIf=\"controls?.program_roles?.value?.length > 1\" class=\"count\" appPopover\r\n (click)=\"role.popover()\" placement=\"right\">\r\n +{{controls?.program_roles?.value?.length - 1}}</button>\r\n </div>\r\n </div>\r\n <button *ngIf=\"activeList!=='ROLE'\" class=\"edit\" type=\"button\" (click)=\"activateList('ROLE')\"><i class=\"icons\"></i>\r\n Edit</button>\r\n </div>\r\n </input-with-pill>\r\n <p *ngIf=\"false\" class=\"error-message\">Add a role(s)</p>\r\n <app-popover #role [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let data of controls?.program_roles?.value | slice:1\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i *ngIf=\"!lists.SYSTEM_ROLE_IDS.includes(data?._id)\" class=\"icons\"\r\n (click)=\"removeRole(data,'ROLE')\"></i>\r\n {{data?.roleName}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </form-field>\r\n\r\n <!-- Owners -->\r\n <form-field *ngIf=\"additionalOption?.OWNERS\" [checked]=\"controls?.program_owners.value?.length > 0 || controls?.program_owners_group.value?.length > 0\" [active]=\"activeList === 'OWNER'\" [disabled]=\"sideElements.includes(activeList) && activeList !== 'OWNER'\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/owner.svg'\">\r\n <label class=\"vx-control-panel\">OWNER(S) <span class=\"required\">*</span><i class=\"icons\" [appTooltip]=\"'An owner is a user responsible for managing a Program. By default, the Key Admin and all users designated as Admins are selected as Program owners. Only users selected as owners can edit and make changes to the program and its associated responsibilities.'\" placement=\"bottom\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i></label>\r\n <input-with-pill [placeholder]=\"'Who is responsible for managing this program?'\"\r\n (select)=\"activateList('OWNER')\">\r\n <div class=\"selected\" *ngIf=\"controls?.program_owners.value[0]\">\r\n <div class=\"chip-container\">\r\n <div class=\"chip-inner\">\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">USER(S)</span></span>\r\n <button class=\"count user\" appPopover (click)=\"owner.popover()\" placement=\"right\">{{controls?.program_owners?.value?.length}}</button>\r\n </div>\r\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"controls?.program_owners_group?.value?.length && controls?.program_owners?.value?.length\">&</span>\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_owners_group?.value?.length\">\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">GROUP(S)</span></span>\r\n <button *ngIf=\"controls?.program_owners_group?.value?.length\" class=\"count\" appPopover (click)=\"group.popover()\" placement=\"right\">{{controls?.program_owners_group?.value?.length }}</button>\r\n </div>\r\n </div>\r\n <button *ngIf=\"activeList!=='OWNER'\" [class.disabled]=\"controls?.all_user_in_role?.value\" (click)=\"activateList('OWNER')\"\r\n class=\"edit\" type=\"button\"><i class=\"icons\"></i>Edit</button>\r\n </div>\r\n </input-with-pill>\r\n <p *ngIf=\"false\" class=\"error-message\">Add a owner(s)</p>\r\n <div class=\"vx-d-flex vx-align-center vx-justify-end vx-mt-2\">\r\n <div class=\"vx-fs-11 vx-fw-500 vx-paragraph-txt vx-tt-uppercase vx-mr-2\">ALL USERS ASSOCIATED WITH THE\r\n SELECTED ROLES</div>\r\n <switch formControlName=\"all_user_in_role\" (change)=\"selectAllRoleOwner($event)\"></switch>\r\n </div>\r\n <app-popover #owner [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let owner of controls?.program_owners?.value \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i *ngIf=\"!['ADMIN','KEY_ADMIN','LOGGED_IN'].includes(owner?.user_role)\"\r\n class=\"icons\" (click)=\"remove(owner,'OWNER')\"></i>\r\n {{owner?.member_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #group [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let owner of controls?.program_owners_group?.value \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i *ngIf=\"!['ADMIN','KEY_ADMIN','LOGGED_IN'].includes(owner?.user_role)\"\r\n class=\"icons\" (click)=\"remove(owner,'OWNER_GROUP')\"></i>\r\n {{owner?.member_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </form-field>\r\n\r\n <!-- Approvers -->\r\n <form-field *ngIf=\"additionalOption?.APPROVER\" [checked]=\"controls?.program_approver?.value?.length\" [active]=\"activeList === 'APPROVER'\" [disabled]=\"(sideElements.includes(activeList) && activeList !== 'APPROVER')\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/approval.svg'\">\r\n <label class=\"vx-control-panel\">APPROVER <i class=\"icons\" [appTooltip]=\"'An approver is a user who is responsible for approving a Program. If an approver is selected, the Program can be started only after approval.'\" placement=\"bottom\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i></label>\r\n <input-with-pill [placeholder]=\"'Who is responsible for approving this program?'\"\r\n [disabled]=\"isApproverDisabled\" (select)=\"activateList('APPROVER')\">\r\n <div class=\"selected\" *ngIf=\"controls?.program_approver?.value[0]\">\r\n <div class=\"chip-container\">\r\n <div class=\"chip-inner\">\r\n <i *ngIf=\"isApproverDisabled === false\" (click)=\"remove(controls?.program_approver?.value[0],'APPROVER')\"\r\n class=\"icons vx-fs-9 vx-mr-1 cross\"></i>{{controls?.program_approver?.value[0]?.member_name}}\r\n </div>\r\n </div>\r\n <button *ngIf=\"(activeList!=='APPROVER') && isApproverDisabled === false\"(click)=\"activateList('APPROVER')\" class=\"edit\" type=\"button\"><i\r\n class=\"icons\"></i>Edit</button>\r\n </div>\r\n </input-with-pill>\r\n </form-field>\r\n\r\n <!-- Performance Calculated -->\r\n <!-- <form-field [checked]=\"controls?.performance_calculation?.value\" [active]=\"activeList === 'PERFORMANCE'\" [disabled]=\"sideElements.includes(activeList) && activeList !== 'PERFORMANCE'\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/performance-calc.svg'\">\r\n <label class=\"vx-control-panel\">HOW SHOULD THE PERFORMANCE OF THIS PROGRAM BE CALCULATED?</label>\r\n <tab-selector formControlName=\"performance_calculation\" [displayArray]=\"constants?.performanceCalculation\">\r\n </tab-selector>\r\n </form-field> -->\r\n <!-- <div class=\"scope-label vx-fs-10 vx-txt-white vx-tt-uppercase vx-pl-1 vx-pr-1 vx-mb-5 vx-lh-4 vx-d-inline-block\">PROGRAM SCOPE</div> <i class=\"icons info-icon vx-fs-12 vx-txt-blue vx-ml-1\" [appTooltip]=\"'The scope lets you define the frequency of the Program and set up default assignees, overseers, reviewers, assessments, and Responsibility Centers for the responsibilities associated with this Program.'\" placement=\"bottom\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i> -->\r\n\r\n <!-- Program Frequency -->\r\n <form-field *ngIf=\"additionalOption?.PROGRAM_FREQUENCY\" [checked]=\"[true,false].includes(controls?.recurring_frequency?.value)\" [active]=\"activeList === 'FREQUENCY'\" [disabled]=\"sideElements.includes(activeList) && activeList !== 'FREQUENCY'\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/recurring.svg'\">\r\n <label class=\"vx-control-panel\">PROGRAM FREQUENCY <i class=\"icons\" [appTooltip]=\"'The Program Frequency lets you specify if a Program is recurring. If a Program is not recurring, then the Program will complete its lifecycle on the last day of your organization\u2019s business cycle. Additionally, all responsibilities associated with the Program will also complete their lifecycle on the same day.'\" placement=\"bottom\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i></label>\r\n <div class=\"upload-format\">\r\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\r\n <span class=\"text vx-mb-0\">Is this program recurring?</span>\r\n <div class=\"radio-group program\">\r\n <app-cs-radio [name]=\"'recurring_frequency'\" [checked]=\"controls?.recurring_frequency?.value\"\r\n (checkedEvent)=\"setFormField('recurring_frequency',true)\">YES</app-cs-radio>\r\n <app-cs-radio [name]=\"'recurring_frequency'\" [checked]=\"!controls?.recurring_frequency?.value\"\r\n (checkedEvent)=\"setFormField('recurring_frequency',false)\">NO</app-cs-radio>\r\n </div>\r\n </div>\r\n </div>\r\n </form-field>\r\n\r\n <!-- Scope Changes -->\r\n <form-field *ngIf=\"additionalOption?.SCOPE_CHANGES\" [checked]=\"[true,false].includes(controls?.lock_scope_change?.value)\" [active]=\"activeList === 'SCOPE'\" [disabled]=\"sideElements.includes(activeList) && activeList !== 'SCOPE'\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/lock-scope.svg'\">\r\n <label class=\"vx-control-panel\">SCOPE CHANGES <i class=\"icons\" [appTooltip]=\"'If scope changes are locked, the owners cannot add or remove any new responsibilities and program categories once a Program has started.'\" placement=\"bottom\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i></label>\r\n <div class=\"upload-format\">\r\n <span class=\"text\">Would you like to <span class=\"vx-label-txt vx-fw-500\">lock changes</span> to the program\r\n scope?</span>\r\n <div class=\"radio-group program\">\r\n <app-cs-radio [name]=\"'lock_scope_change'\" [checked]=\"controls?.lock_scope_change?.value\"\r\n (checkedEvent)=\"setFormField('lock_scope_change',true)\">YES</app-cs-radio>\r\n <app-cs-radio [name]=\"'lock_scope_change'\" [checked]=\"!controls?.lock_scope_change?.value\"\r\n (checkedEvent)=\"setFormField('lock_scope_change',false)\">NO</app-cs-radio>\r\n </div>\r\n </div>\r\n </form-field>\r\n\r\n <!-- Framework -->\r\n <!-- <form-field [checked]=\"false\" [active]=\"activeList === 'FRAMEWORK'\" [disabled]=\"sideElements.includes(activeList) && activeList !== 'FRAMEWORK'\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/category.svg'\">\r\n <label class=\"vx-control-panel\">FRAMEWORK</label>\r\n <input-with-pill [placeholder]=\"'Select a framework that this Program relates to'\" (select)=\"activateList('FRAMEWORK')\">\r\n <div class=\"selected\" *ngIf=\"controls?.framework?.value?.framework_name\">\r\n <div class=\"chip-container\">\r\n <div class=\"chip-inner\">\r\n <span class=\"chip\"><i (click)=\"remove(controls?.framework.value,'FRAMEWORK')\" class=\"icons\"></i>{{controls?.framework?.value?.framework_name}}</span>\r\n <button class=\"count\" appPopover (click)=\"framework.popover()\" placement=\"right\">+5</button>\r\n </div>\r\n </div>\r\n <button *ngIf=\"activeList!=='FRAMEWORK'\" (click)=\"activateList('FRAMEWORK')\" class=\"edit\" type=\"button\"><i class=\"icons\"></i> Edit</button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #framework [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let data of [1, 1, 1, 1, 1, 1, 1]\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\"></i>\r\n Manage framework name\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </form-field> -->\r\n\r\n <!-- Responsibility Center -->\r\n <form-field *ngIf=\"additionalOption?.RC\" [checked]=\"controls?.rc?.value?.length\" [active]=\"activeList === 'RC'\" [disabled]=\"sideElements.includes(activeList) && activeList !== 'RC'\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/responsibility-center.svg'\">\r\n <label class=\"vx-control-panel\">RESPONSIBILITY CENTER <i class=\"icons\" [appTooltip]=\"'Responsibility Centers represent your organizational and operational infrastructure. You can associate one or more Responsibility Centers with a Program. Thereafter, all the responsibilities within this Program can only be linked with the associated Responsibility Centers.'\" placement=\"bottom\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i></label>\r\n <input-with-pill [selectDiv]=\"true\" (select)=\"activateList('RC')\"\r\n [placeholder]=\"'Which Responsibility Center(s) can be linked to the responsibilities associated with this Program?'\">\r\n <div class=\"selected\" *ngIf=\"controls?.rc?.value && controls?.rc?.value?.length\">\r\n <div class=\"chip-container\">\r\n <div class=\"chip-inner\">\r\n <span class=\"chip\"><i class=\"icons\"\r\n (click)=\"remove(controls?.rc?.value[0],'RC')\"></i>{{controls?.rc?.value[0]?.item_name}}</span>\r\n <button *ngIf=\"controls?.rc?.value?.length > 1\" class=\"count\" appPopover\r\n (click)=\"rc.popover()\" placement=\"right\">+{{controls?.rc?.value?.length -1 }}</button>\r\n </div>\r\n </div>\r\n <button *ngIf=\"activeList!=='RC'\" class=\"edit\" type=\"button\" (click)=\"activateList('RC')\"><i class=\"icons\"></i>\r\n Edit</button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #rc [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let rc of controls?.rc?.value |slice:1\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove(rc,'RC')\"></i>\r\n {{rc?.item_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </form-field>\r\n\r\n <!-- Assignee -->\r\n <form-field *ngIf=\"additionalOption?.ASSIGNEES\" [checked]=\"controls?.program_assignee?.value?.length || controls?.program_default_assignee?.value?.length ||controls?.program_default_assignee?.value?.length || controls?.program_default_assignee_group?.value?.length\"\r\n [active]=\"['ASSIGNEE','DEFAULT_ASSIGNEE']?.includes(activeList)\" [disabled]=\"sideElements?.includes(activeList) && !['ASSIGNEE','DEFAULT_ASSIGNEE'].includes(activeList)\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/who.svg'\">\r\n <label class=\"vx-control-panel\" [class.disabled]=\"activeList === 'DEFAULT_ASSIGNEE'\">ASSIGNEE(S) <i class=\"icons\" [appTooltip]=\"'Assignees are users to whom you can assign a responsibility. While creating a Program, you can select the set of assignees responsible for completing responsibilities within this Program.'\" placement=\"bottom\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i> </label>\r\n <input-with-pill [selectDiv]=\"true\" [disabled]=\"activeList === 'DEFAULT_ASSIGNEE'\" [placeholder]=\"'Who is responsible for completing the responsibilities within this Program?\r\n\r\n '\"\r\n (select)=\"activateList('ASSIGNEE')\">\r\n <div class=\"selected\" *ngIf=\"controls?.program_assignee?.value?.length || controls?.program_assignee_group?.value?.length\">\r\n <div class=\"chip-container\">\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_assignee?.value?.length\">\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">USER(S)</span></span>\r\n <button class=\"count user\" appPopover (click)=\"assignee.popover()\" placement=\"right\">{{controls?.program_assignee?.value?.length}}</button>\r\n </div>\r\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"controls?.program_assignee_group?.value?.length && controls?.program_assignee?.value?.length\">&</span>\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_assignee_group?.value?.length\">\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">GROUP(S)</span></span>\r\n <button *ngIf=\"controls?.program_assignee_group?.value?.length\" class=\"count\" appPopover (click)=\"assignee_group.popover()\" placement=\"right\">{{controls?.program_assignee_group?.value?.length }}</button>\r\n </div>\r\n </div>\r\n <button *ngIf=\"activeList!=='ASSIGNEE'\" class=\"edit\" type=\"button\" (click)=\"activateList('ASSIGNEE')\"><i class=\"icons\"></i> Edit</button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #assignee [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let assignee of controls?.program_assignee?.value\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i (click)=\"remove(assignee,'ASSIGNEE')\" class=\"icons\"></i>\r\n {{assignee?.member_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #assignee_group [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let group of controls?.program_assignee_group?.value\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i (click)=\"remove(group,'ASSIGNEE_GROUP')\" class=\"icons\"></i>\r\n {{group?.group_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <label class=\"vx-control-panel\" [class.disabled]=\"activeList === 'ASSIGNEE'\">DEFAULT ASSIGNEE(S) <i class=\"icons\" [appTooltip]=\"'This option lets you specify the default assignees for all new responsibilities associated with a Program. If a default assignee is selected, the user will automatically be selected as an assignee within the \\'Create a Responsibility\\' form. However, the assignor can make changes, if required.'\" placement=\"bottom\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i></label>\r\n <input-with-pill [selectDiv]=\"true\" [disabled]=\"activeList === 'ASSIGNEE'\" [placeholder]=\"'Which persons will be selected as the default assignees for the responsibilities within this Program?'\" (select)=\"activateList('DEFAULT_ASSIGNEE')\">\r\n <div class=\"selected\" *ngIf=\"controls?.program_default_assignee?.value?.length || controls?.program_default_assignee_group?.value?.length\">\r\n <div class=\"chip-container\">\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_default_assignee?.value?.length\">\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">USER(S)</span></span>\r\n <button class=\"count user\" appPopover (click)=\"defaultAssignee.popover()\" placement=\"right\">{{controls?.program_default_assignee?.value?.length}}</button>\r\n </div>\r\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"controls?.program_default_assignee_group?.value?.length && controls?.program_default_assignee?.value?.length\">&</span>\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_default_assignee_group?.value?.length\">\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">GROUP(S)</span></span>\r\n <button *ngIf=\"controls?.program_default_assignee_group?.value?.length\" class=\"count\" appPopover (click)=\"defaultAssigneeGroup.popover()\" placement=\"right\">{{controls?.program_default_assignee_group?.value?.length }}</button>\r\n </div>\r\n </div>\r\n <button *ngIf=\"activeList!=='DEFAULT_ASSIGNEE'\" (click)=\"activateList('DEFAULT_ASSIGNEE')\" class=\"edit\" type=\"button\"><i class=\"icons\"></i> Edit</button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #defaultAssignee [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let assignee of controls?.program_default_assignee?.value \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i (click)=\"remove(assignee,'DEFAULT_ASSIGNEE')\" class=\"icons\"></i>\r\n {{assignee?.member_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #defaultAssigneeGroup [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let group of controls?.program_default_assignee_group?.value\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i (click)=\"remove(assignee,'DEFAULT_ASSIGNEE_GROUP')\" class=\"icons\"></i>\r\n {{group?.group_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <div class=\"radio-group-selector\" [class.disabled]=\"activeList === 'ASSIGNEE'\">\r\n <app-cs-radio [name]=\"'assignee'\" [checked]=\"controls?.assignee_completion_criteria?.value === 'ALL'\" (checkedEvent)=\"setFormField('assignee_completion_criteria', 'ALL')\">\r\n ALL SELECTED PERSONS NEED TO COMPLETE THIS <i class=\"icons\"\r\n [appTooltip]=\"'If selected, separate responsibilities will be created for each person.'\"\r\n placement=\"bottom-right\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\" ></i>\r\n </app-cs-radio>\r\n <app-cs-radio [name]=\"'assignee'\" [checked]=\"controls?.assignee_completion_criteria?.value === 'ANYONE'\" (checkedEvent)=\"setFormField('assignee_completion_criteria', 'ANYONE')\">\r\n ANY SELECTED PERSON CAN COMPLETE THIS <i class=\"icons\"\r\n [appTooltip]=\"'If selected, only one responsibility will be created.'\" placement=\"bottom-right\"\r\n delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i>\r\n </app-cs-radio>\r\n </div>\r\n </form-field>\r\n\r\n <!-- Reviewer -->\r\n <form-field [appScrollInView]=\"scrollToBottom\" *ngIf=\"additionalOption?.REVIEWER\"\r\n [checked]=\"controls?.program_reviewer?.value?.length || controls?.program_default_reviewer?.value?.length ||controls?.program_default_reviewer?.value?.length || controls?.program_default_reviewer_group?.value?.length\"\r\n [active]=\"['REVIEWER','DEFAULT_REVIEWER']?.includes(activeList)\" [disabled]=\"sideElements?.includes(activeList) && !['REVIEWER','DEFAULT_REVIEWER'].includes(activeList)\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/reviewer.svg'\">\r\n <label [class.disabled]=\"activeList === 'DEFAULT_REVIEWER'\" class=\"vx-control-panel\">Reviewer(s) <i class=\"icons\" [appTooltip]=\"'Reviewers are users who can review a responsibility after it has been completed. While creating a Program, you can select the set of reviewers responsible for reviewing responsibilities within this Program.'\" placement=\"bottom\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i></label>\r\n <input-with-pill [selectDiv]=\"true\" [disabled]=\"activeList === 'DEFAULT_REVIEWER'\" [placeholder]=\"'Who is responsible for reviewing the responsibilities within this Program?'\" (select)=\"activateList('REVIEWER')\">\r\n <div class=\"selected\" *ngIf=\"controls?.program_reviewer?.value?.length || controls?.program_reviewer_group?.value?.length\">\r\n\r\n <div class=\"chip-container\">\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_reviewer?.value?.length\">\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">USER(S)</span></span>\r\n <button class=\"count user\" appPopover (click)=\"reviewer.popover()\" placement=\"right\">{{controls?.program_reviewer?.value?.length}}</button>\r\n </div>\r\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"controls?.program_reviewer_group?.value?.length && controls?.program_reviewer?.value?.length\">&</span>\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_reviewer_group?.value?.length\">\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">GROUP(S)</span></span>\r\n <button *ngIf=\"controls?.program_reviewer_group?.value?.length\" class=\"count\" appPopover (click)=\"reviewerGroup.popover()\" placement=\"right\">{{controls?.program_reviewer_group?.value?.length }}</button>\r\n </div>\r\n </div>\r\n <button *ngIf=\"activeList!=='REVIEWER'\" (click)=\"activateList('REVIEWER')\" class=\"edit\" type=\"button\"><i class=\"icons\"></i> Edit</button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #reviewer [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let reviewer of controls?.program_reviewer?.value\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i (click)=\"remove(reviewer,'REVIEWER')\" class=\"icons\"></i>\r\n {{reviewer?.member_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #reviewerGroup [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let group of controls?.program_reviewer_group?.value\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i (click)=\"remove(group,'REVIEWER_GROUP')\" class=\"icons\"></i>\r\n {{group?.group_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <label [class.disabled]=\"activeList === 'REVIEWER'\" class=\"vx-control-panel\">DEFAULT Reviewer(S) <i class=\"icons\" [appTooltip]=\"'This option lets you specify the default reviewers for all new responsibilities associated with a Program. If a default reviewer is selected, the user will automatically be selected as a reviewer within the \\'Create a Responsibility\\' form. However, the assignor can make changes to this setting, if required.'\" placement=\"bottom\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i></label>\r\n <input-with-pill [selectDiv]=\"true\" [disabled]=\"activeList === 'REVIEWER'\" [placeholder]=\"'Which persons will be selected as the default reviewers for the responsibilities within this Program?'\" (select)=\"activateList('DEFAULT_REVIEWER')\">\r\n <div class=\"selected\" *ngIf=\"controls?.program_default_reviewer?.value?.length || controls?.program_default_reviewer_group?.value?.length\">\r\n <div class=\"chip-container\">\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_default_reviewer?.value?.length\">\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">USER(S)</span></span>\r\n <button class=\"count user\" appPopover (click)=\"defaultReviewer.popover()\" placement=\"right\">{{controls?.program_default_reviewer?.value?.length}}</button>\r\n </div>\r\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"controls?.program_default_reviewer_group?.value?.length && controls?.program_default_reviewer?.value?.length\">&</span>\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_default_reviewer_group?.value?.length\">\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">GROUP(S)</span></span>\r\n <button *ngIf=\"controls?.program_default_reviewer_group?.value?.length\" class=\"count\" appPopover (click)=\"assignee_group.popover()\" placement=\"right\">{{controls?.program_default_reviewer_group?.value?.length }}</button>\r\n </div>\r\n </div>\r\n <button *ngIf=\"activeList!=='DEFAULT_REVIEWER'\" (click)=\"activateList('DEFAULT_REVIEWER')\" class=\"edit\" type=\"button\"><i class=\"icons\"></i> Edit</button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #defaultReviewer [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let reviewer of controls?.program_default_reviewer?.value\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i (click)=\"remove(reviewer,'DEFAULT_REVIEWER')\" class=\"icons\"></i>\r\n {{reviewer?.member_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #defaultReviewerGroup [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let group of controls?.program_default_reviewer_group?.value \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i (click)=\"remove(group,'DEFAULT_REVIEWER_GROUP')\" class=\"icons\"></i>\r\n {{group?.group_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <div class=\"radio-group-selector\" [class.disabled]=\"activeList === 'REVIEWER'\">\r\n <app-cs-radio [name]=\"'reviewer'\" [checked]=\"controls?.reviewer_completion_criteria?.value == 'SEQUENTIAL'\" (checkedEvent)=\"setFormField('reviewer_completion_criteria', 'SEQUENTIAL')\">\r\n SEQUENTIAL <i class=\"icons\"\r\n [appTooltip]=\"'The responsibility will be sent for review one at a time in the sequence defined by you.'\"\r\n placement=\"bottom-right\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i>\r\n </app-cs-radio>\r\n <app-cs-radio [name]=\"'reviewer'\" [checked]=\"controls?.reviewer_completion_criteria?.value == 'ANYONE'\" (checkedEvent)=\"setFormField('reviewer_completion_criteria', 'ANYONE')\">\r\n ANY REVIEWER CAN MARK THIS AS REVIEWED <i class=\"icons\"\r\n [appTooltip]=\"'The responsibility will be sent for review to all reviewers at the same time. If anyone of the reviewer reviews the responsibility, it will be considered as reviewed.'\"\r\n placement=\"bottom-right\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i>\r\n </app-cs-radio>\r\n </div>\r\n </form-field>\r\n\r\n <!-- Overseer -->\r\n <form-field [appScrollInView]=\"scrollToBottom\" *ngIf=\"additionalOption?.OVERSEER\"\r\n [checked]=\"controls?.program_overseer?.value?.length || controls?.program_default_overseer?.value?.length ||controls?.program_default_overseer?.value?.length || controls?.program_default_overseer_group?.value?.length\"\r\n [active]=\"activeList === 'OVERSEER'\" [disabled]=\"sideElements?.includes(activeList) && !['OVERSEER','DEFAULT_OVERSEER','DEFAULT_FAILED_OVERSEER'].includes(activeList)\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/oversight.svg'\">\r\n <label class=\"vx-control-panel\" [class.disabled]=\"['DEFAULT_OVERSEER','DEFAULT_FAILED_OVERSEER'].includes(activeList)\">Overseer <i class=\"icons\" [appTooltip]=\"'Overseers refer to the users who can oversee a responsibility and receive email updates when a responsibility is completed or not completed. While creating a Program, this options lets you restrict the users who can oversee the responsibilities associated with the Program.'\" placement=\"bottom\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i></label>\r\n <input-with-pill [selectDiv]=\"true\" [disabled]=\"['DEFAULT_OVERSEER','DEFAULT_FAILED_OVERSEER'].includes(activeList)\" [placeholder]=\"'Who is responsible for overseeing the responsibilities within this Program?'\" (select)=\"activateList('OVERSEER')\">\r\n <div class=\"selected\" *ngIf=\"controls?.program_overseer?.value?.length || controls?.program_overseer_group?.value?.length\">\r\n <div class=\"chip-container\">\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_overseer?.value?.length\">\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">USER(S)</span></span>\r\n <button class=\"count user\" appPopover (click)=\"overseers.popover()\" placement=\"right\">{{controls?.program_overseer?.value?.length}}</button>\r\n </div>\r\n\r\n <span *ngIf=\"controls?.program_overseer_group?.value?.length && controls?.program_overseer?.value?.length \" class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\">&</span>\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_overseer_group?.value?.length \">\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">GROUP(S)</span></span>\r\n <button class=\"count\" appPopover (click)=\"overseerGroup.popover()\" placement=\"right\">{{controls?.program_overseer_group?.value?.length}}</button>\r\n </div>\r\n </div>\r\n\r\n <button *ngIf=\"activeList!=='OVERSEER'\" (click)=\"activateList('OVERSEER')\" class=\"edit\" type=\"button\"><i class=\"icons\"></i> Edit</button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #overseers [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let overseer of controls?.program_overseer?.value\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove(overseer,'OVERSEER')\"></i> {{overseer?.member_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #overseerGroup [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let group of controls?.program_overseer_group?.value\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i (click)=\"remove(group,'OVERSEER_GROUP')\" class=\"icons\"></i> {{group?.group_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <ng-container [class.disabled]=\"activeList === 'OVERSEER'\">\r\n <label class=\"vx-control-panel\" [class.disabled]=\"['OVERSEER'].includes(activeList)\">DEFAULT Overseer <i class=\"icons\" [appTooltip]=\"'This option lets you specify the default overseers for all new responsibilities associated with a Program. If a default overseer is selected, the user will automatically be selected as an overseer within the \\'Create a Responsibility\\' form. However, the assignor can make changes to this setting, if required.'\" placement=\"bottom\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i></label>\r\n <input-with-pill [disabled]=\"['OVERSEER','DEFAULT_FAILED_OVERSEER'].includes(activeList)\" [selectDiv]=\"true\" [placeholder]=\"'Which persons will be selected as the default overseers for the responsibilities within this Program?'\" (select)=\"activateList('DEFAULT_OVERSEER')\">\r\n <div class=\"selected\" *ngIf=\"controls?.program_default_overseer?.value?.length || controls?.program_default_overseer_group?.value?.length\">\r\n <div class=\"chip-container\">\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_default_overseer?.value?.length\">\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">USER(S)</span></span>\r\n <button class=\"count user\" appPopover (click)=\"overseersDefault.popover()\" placement=\"right\">{{controls?.program_default_overseer?.value?.length}}</button>\r\n </div>\r\n\r\n <span *ngIf=\"controls?.program_default_overseer_group?.value?.length && controls?.program_default_overseer?.value?.length\" class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\">&</span>\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_default_overseer_group?.value?.length \">\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">GROUP(S)</span></span>\r\n <button class=\"count\" appPopover (click)=\"overseerDefaultGroup.popover()\" placement=\"right\">{{controls?.program_default_overseer_group?.value?.length}}</button>\r\n </div>\r\n </div>\r\n <button *ngIf=\"activeList!=='DEFAULT_OVERSEER'\" (click)=\"activateList('DEFAULT_OVERSEER')\" class=\"edit\" type=\"button\"><i class=\"icons\"></i> Edit</button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #overseersDefault [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let overseer of controls?.program_default_overseer?.value\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove(overseer,'DEFAULT_OVERSEER')\"></i> {{overseer?.member_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #overseerDefaultGroup [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let group of controls?.program_default_overseer_group?.value\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i (click)=\"remove(group,'DEFAULT_OVERSEER_GROUP')\" class=\"icons\"></i> {{group?.group_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <label class=\"vx-control-panel\" > </label>\r\n <input-with-pill class=\"vx-mt-2\" [selectDiv]=\"true\" [line]=\"3\" [disabled]=\"['OVERSEER','DEFAULT_OVERSEER'].includes(activeList)\" [placeholder]=\"'Which persons will be selected as the default overseers for responsibilities that are not completed within this Program?'\" (select)=\"activateList('DEFAULT_FAILED_OVERSEER')\">\r\n <div class=\"selected\" *ngIf=\"controls?.program_default_failed_overseer?.value?.length || controls?.program_default_failed_overseer_group?.value?.length\">\r\n <div class=\"chip-container\">\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_default_failed_overseer?.value?.length\">\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">USER(S)</span></span>\r\n <button class=\"count user\" appPopover (click)=\"overseersDefaultFail.popover()\" placement=\"right\">{{controls?.program_default_failed_overseer?.value?.length}}</button>\r\n </div>\r\n\r\n <span *ngIf=\"controls?.program_default_failed_overseer_group?.value?.length && controls?.program_default_failed_overseer?.value?.length\" class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\">&</span>\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_default_failed_overseer_group?.value?.length \">\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">GROUP(S)</span></span>\r\n <button class=\"count\" appPopover (click)=\"overseerDefaultFailGroup.popover()\" placement=\"right\">{{controls?.program_default_failed_overseer_group?.value?.length}}</button>\r\n </div>\r\n </div>\r\n <button *ngIf=\"activeList!=='DEFAULT_FAILED_OVERSEER'\" (click)=\"activateList('DEFAULT_FAILED_OVERSEER')\" class=\"edit\" type=\"button\"><i class=\"icons\"></i> Edit</button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #overseersDefaultFail [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let overseer of controls?.program_default_failed_overseer?.value\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove(overseer,'DEFAULT_FAILED_OVERSEER')\"></i> {{overseer?.member_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #overseerDefaultFailGroup [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let group of controls?.program_default_failed_overseer_group?.value\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i (click)=\"remove(group,'DEFAULT_FAILED_OVERSEER_GROUP')\" class=\"icons\"></i> {{group?.group_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n</ng-container>\r\n </form-field>\r\n\r\n <!-- Assessment -->\r\n <form-field [appScrollInView]=\"scrollToBottom\" *ngIf=\"additionalOption?.ASSESSMENT\"\r\n [checked]=\"controls?.program_assessments?.value?.length\"\r\n [active]=\"activeList === 'ASSESSMENT'\" [disabled]=\"sideElements.includes(activeList) && activeList !== 'ASSESSMENT'\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/assessments.svg'\">\r\n <label class=\"vx-control-panel\">ASSESSMENTS <i class=\"icons\" [appTooltip]=\"'Assessments allows you to associate outcome based questionnaires or self-assessment questionnaires with a responsibility. This option lets you specify which assessments can be linked with responsibilities within a Program.'\" placement=\"bottom\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i></label>\r\n <input-with-pill [selectDiv]=\"true\" [placeholder]=\"'Which assessments can be linked to the responsibilities within this Program?'\" (select)=\"activateList('ASSESSMENT')\">\r\n <div class=\"selected\" *ngIf=\"controls?.program_assessments?.value?.length\">\r\n <div class=\"chip-container\">\r\n <ng-container *ngIf=\"(controls?.program_assessments?.value | assessmentResolver) as assessments\">\r\n <div class=\"chip-inner\">\r\n <span class=\"chip\"><i class=\"icons\"\r\n (click)=\"remove(assessments[0],'ASSESSMENT')\"></i>{{assessments[0]?.assessment_name}} </span>\r\n <button *ngIf=\"assessments?.length > 1\" class=\"count\" appPopover\r\n (click)=\"program_assessments.popover()\" placement=\"right\">+{{assessments?.length -1 }}</button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <button *ngIf=\"activeList!=='ASSESSMENT'\" class=\"edit\" type=\"button\" (click)=\"activateList('ASSESSMENT')\"><i class=\"icons\"></i>\r\n Edit</button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #program_assessments [dontCloseonClick]=\"true\">\r\n <ng-container >\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n\r\n <li *ngFor=\"let assessment of (controls?.program_assessments?.value | assessmentResolver) | slice:1\">\r\n <div class=\"avatar-card\" >\r\n <span class=\"value\">\r\n <i (click)=\"remove(assessment,'ASSESSMENT')\" class=\"icons\" ></i> {{assessment?.assessment_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </ng-container>\r\n </app-popover>\r\n </form-field>\r\n\r\n\r\n <!-- Format & Evidence -->\r\n <form-field [appScrollInView]=\"scrollToBottom\" *ngIf=\"additionalOption?.FORMATE_EVIDENCE\" [checked]=\"[true,false].includes(controls?.evidence_required?.value)\"\r\n [active]=\"false\" [disabled]=\"sideElements.includes(activeList)\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/format-evidence.svg'\">\r\n <label class=\"vx-control-panel\">Evidence <i class=\"icons\" [appTooltip]=\"'This option lets you specify if the evidence of completion of a responsibility within a Program needs to be uploaded. If \u2018Yes\u2019 is selected, the assignees for all responsibilities associated with the Program will be required to upload evidence while completing the responsibility. However, the assignor can make changes to this setting if required.'\" placement=\"bottom\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i></label>\r\n <div class=\"upload-format\">\r\n\r\n <span class=\"text\">Do all responsibilities within this program require evidence?</span>\r\n <div class=\"radio-group program\">\r\n <app-cs-radio [name]=\"'evidence_required'\" [checked]=\"controls?.evidence_required?.value\"\r\n (checkedEvent)=\"setFormField('evidence_required',true)\">YES</app-cs-radio>\r\n <app-cs-radio [name]=\"'evidence_required'\" [checked]=\"!controls?.evidence_required?.value\"\r\n (checkedEvent)=\"setFormField('evidence_required',false)\">NO</app-cs-radio>\r\n </div>\r\n </div>\r\n <!-- <div class=\"vx-d-flex vx-align-center vx-justify-end vx-mt-2\">\r\n <div class=\"vx-fs-11 vx-fw-500 vx-paragraph-txt vx-tt-uppercase vx-mr-2\">Allow any file to be marked as\r\n key\r\n evidence</div>\r\n <switch formControlName=\"allow_any_file_key_evidence\"\r\n (change)=\"setFormField('allow_any_file_key_evidence',$event?.target?.checked)\"></switch>\r\n </div> -->\r\n </form-field>\r\n\r\n\r\n <!-- Custom Field -->\r\n <form-field [appScrollInView]=\"scrollToBottom\" *ngIf=\"additionalOption?.CUSTOM_FIELDS\" [checked]=\"controls?.custom_fields?.value?.length\"\r\n [active]=\"false\" [disabled]=\"sideElements.includes(activeList)\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/custom-fields.svg'\">\r\n <label class=\"vx-control-panel\">CUSTOM FIELDS <i class=\"icons\" [appTooltip]=\"'Custom fields enable you to add additional meta data to a responsibility.'\" placement=\"bottom\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i></label>\r\n <custom-field formControlName=\"custom_fields\"></custom-field>\r\n </form-field>\r\n </form>\r\n</div>\r\n\r\n\r\n<!-- list of roles -->\r\n<role-list *ngIf=\"activeList === 'ROLE'\" [selected]=\"controls?.program_roles?.value | refDisconnect\" [loading]=\"listLoadingState.ROLES\"\r\n [list]=\"lists?.ROLES?.data ?? []\" (save)=\"listAction($event,'ROLE')\" (cancel)=\"fieldDeselector('ROLE')\"></role-list>\r\n\r\n<!-- list of frameworks -->\r\n<app-define-framework-listing (cancel)=\"fieldDeselector('FRAMEWORK')\" (next)=\"listAction($event,'FRAMEWORK')\" [mode]=\"mode\" [selectedFramework]=\"controls?.framework?.value\"></app-define-framework-listing>\r\n<!-- list of responsibility center -->\r\n<app-responsibility-centers-list *ngIf=\"activeList === 'RC'\" [responsibilityCentersList]=\"lists?.RC ?? []\"\r\n [radioSelection]=\"false\" [rcIdKey]=\"'rc_id'\" (closeRcList)=\"fieldDeselector('RC')\"\r\n (saveSelectedList)=\"listAction($event,'RC')\" [selectedResponsibilityCenters]=\"controls?.rc?.value | refDisconnect\">\r\n</app-responsibility-centers-list>\r\n<!-- render userlist with group -->\r\n\r\n<user-group-list *ngIf=\"activeList === 'OWNER'\" [groupEnabled]=\"true\" [singleSelect]=\"false\" [loading]=\"listLoadingState.USERS\"\r\n [nonRemovableUserIds]=\"lists.NON_REMOVABLE_OWNERS | listToId : 'member_id'\" [userlist]=\"lists?.OWNERS?.data ?? []\"\r\n [selectedUsers]=\"controls?.program_owners?.value | refDisconnect\"\r\n (fetchUserData)=\"fetchUsersAssociatedWithRoles(false,$event)\" [userListInfo]=\"lists?.OWNERS\"\r\n [groupListInfo]=\"lists?.OWNERS_GROUPS\" [groupList]=\"lists?.OWNERS_GROUPS?.data ?? []\"\r\n [selectedGroups]=\"controls?.program_owners_group?.value | refDisconnect\" (save)=\"listAction($event,'OWNER')\"\r\n (cancel)=\"fieldDeselector('OWNER')\" [panelTitle]=\"panelTitleOwner\"></user-group-list>\r\n<user-group-list *ngIf=\"activeList === 'APPROVER'\" [groupEnabled]=\"false\" [singleSelect]=\"true\"\r\n [userlist]=\"lists?.APPROVERS?.data ?? []\" [selectedUsers]=\"controls?.program_approver?.value | refDisconnect\"\r\n [userListInfo]=\"lists?.APPROVERS\" (save)=\"listAction($event,'APPROVER')\" (cancel)=\"fieldDeselector('APPROVER')\" [panelTitle]=\"panelTitleApprover\">\r\n</user-group-list>\r\n<user-group-list *ngIf=\"activeList === 'ASSIGNEE'\" [groupEnabled]=\"true\" [singleSelect]=\"false\"\r\n [userlist]=\"lists?.ASSIGNEES ?? []\" [selectedUsers]=\"controls?.program_assignee?.value | refDisconnect\" [groupList]=\"lists?.ASSIGNEES_GROUP ?? []\"\r\n [selectedGroups]=\"controls?.program_assignee_group?.value | refDisconnect\"\r\n [userListInfo]=\"lists?.ASSIGNEES\" (save)=\"listAction($event,'ASSIGNEE')\" (cancel)=\"fieldDeselector('ASSIGNEE')\" [panelTitle]=\"panelTitleAssignee\"\r\n [defaultSelectedUsers]=\"controls?.program_default_assignee?.value | refDisconnect\" [userType]=\"'assignees'\">\r\n</user-group-list>\r\n<user-group-list *ngIf=\"activeList === 'DEFAULT_ASSIGNEE'\" [groupEnabled]=\"true\" [singleSelect]=\"false\"\r\n [userlist]=\"lists?.DEFAULT_ASSIGNEES ?? []\" [selectedUsers]=\"controls?.program_default_assignee?.value | refDisconnect\" [groupList]=\"lists?.DEFAULT_ASSIGNEES_GROUP ?? []\"\r\n [selectedGroups]=\"controls?.program_default_assignee_group?.value | refDisconnect\"\r\n [userListInfo]=\"lists?.DEFAULT_ASSIGNEE\" (save)=\"listAction($event,'DEFAULT_ASSIGNEE')\" (cancel)=\"fieldDeselector('DEFAULT_ASSIGNEE')\">\r\n</user-group-list>\r\n\r\n<user-group-list *ngIf=\"activeList === 'REVIEWER'\" [groupEnabled]=\"false\" [singleSelect]=\"false\"\r\n [userlist]=\"lists?.REVIEWERS ?? []\" [selectedUsers]=\"controls?.program_reviewer?.value | refDisconnect\" [groupList]=\"lists?.REVIEWERS_GROUP ?? []\"\r\n [selectedGroups]=\"controls?.program_reviewer_group?.value | refDisconnect\"\r\n [userListInfo]=\"lists?.REVIEWERS\" (save)=\"listAction($event,'REVIEWER')\" (cancel)=\"fieldDeselector('REVIEWER')\" [panelTitle]=\"panelTitleReviewer\"\r\n [defaultSelectedUsers]=\"controls?.program_default_reviewer?.value | refDisconnect\" [userType]=\"'reviewers'\">\r\n</user-group-list>\r\n<user-group-list *ngIf=\"activeList === 'DEFAULT_REVIEWER'\" [groupEnabled]=\"false\" [singleSelect]=\"false\"\r\n [userlist]=\"lists?.DEFAULT_REVIEWERS ?? []\" [selectedUsers]=\"controls?.program_default_reviewer?.value | refDisconnect\" [groupList]=\"lists?.DEFAULT_REVIEWERS_GROUP ?? []\"\r\n [selectedGroups]=\"controls?.program_default_reviewer_group?.value | refDisconnect\"\r\n [userListInfo]=\"lists?.DEFAULT_REVIEWERS\" (save)=\"listAction($event,'DEFAULT_REVIEWER')\" (cancel)=\"fieldDeselector('DEFAULT_REVIEWER')\" [panelTitle]=\"panelTitleDefaultReviewer\">\r\n</user-group-list>\r\n<user-group-list *ngIf=\"activeList === 'OVERSEER'\" [groupEnabled]=\"false\" [singleSelect]=\"false\"\r\n [userlist]=\"lists?.OVERSEERS ?? []\" [selectedUsers]=\"controls?.program_overseer?.value | refDisconnect\" [groupList]=\"lists?.OVERSEERS_GROUP ?? []\"\r\n [selectedGroups]=\"controls?.program_overseer_group?.value | refDisconnect\"\r\n [userListInfo]=\"lists?.OVERSEES\" (save)=\"listAction($event,'OVERSEER')\" (cancel)=\"fieldDeselector('OVERSEER')\"\r\n [defaultSelectedUsers]=\"controls?.program_default_overseer?.value | refDisconnect | arrayConcat: controls?.program_default_failed_overseer?.value\" [userType]=\"'overseers'\">\r\n</user-group-list>\r\n<user-group-list *ngIf=\"activeList === 'DEFAULT_OVERSEER'\" [groupEnabled]=\"false\" [singleSelect]=\"false\"\r\n [userlist]=\"lists?.DEFAULT_OVERSEERS ?? []\" [selectedUsers]=\"controls?.program_default_overseer?.value | refDisconnect\" [groupList]=\"lists?.DEFAULT_OVERSEERS_GROUP ?? []\"\r\n [selectedGroups]=\"controls?.program_default_overseer_group?.value | refDisconnect\"\r\n [userListInfo]=\"lists?.DEFAULT_OVERSEERS\" (save)=\"listAction($event,'DEFAULT_OVERSEER')\" (cancel)=\"fieldDeselector('DEFAULT_OVERSEER')\">\r\n</user-group-list>\r\n<user-group-list *ngIf=\"activeList === 'DEFAULT_FAILED_OVERSEER'\" [groupEnabled]=\"false\" [singleSelect]=\"false\"\r\n [userlist]=\"lists?.DEFAULT_OVERSEERS ?? []\" [selectedUsers]=\"controls?.program_default_failed_overseer?.value | refDisconnect\" [groupList]=\"lists?.DEFAULT_OVERSEERS_GROUP ?? []\"\r\n [selectedGroups]=\"controls?.program_default_failed_overseer_group?.value | refDisconnect\"\r\n [userListInfo]=\"lists?.DEFAULT_OVERSEERS\" (save)=\"listAction($event,'DEFAULT_FAILED_OVERSEER')\" (cancel)=\"fieldDeselector('DEFAULT_FAILED_OVERSEER')\">\r\n</user-group-list>\r\n<assessment-picker *ngIf=\"activeList === 'ASSESSMENT'\" [selectedAssessment]=\"controls?.program_assessments?.value\" (cancelAssessment)=\"fieldDeselector('ASSESSMENT')\" (onAssessmentSelect)=\"listAction($event,'ASSESSMENT')\"></assessment-picker>\r\n<app-loader-inline *ngIf=\"loader\"></app-loader-inline>\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",
|
|
1143
1162
|
styles: ["@import url(\"https://cdn.v-comply.com/design-system/css/icons/icons.css\");@import url(\"https://cdn.v-comply.com/design-system/css/display/display.css\");@import url(\"https://cdn.v-comply.com/design-system/css/alignment/alignment.css\");@import url(\"https://cdn.v-comply.com/design-system/css/text/text.css\");@import url(\"https://cdn.v-comply.com/design-system/css/color/color.css\");@import url(\"https://cdn.v-comply.com/design-system/css/padding/padding.css\");@import url(\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\");@import url(\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\");@import url(\"https://cdn.v-comply.com/design-system/css/margin/margin.css\");@import url(\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\");@import url(\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\");@import url(\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\");@import url(\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\");::ng-deep .workflow-program{display:block;position:relative}::ng-deep .workflow-program .scope-label{background:#747576;border-radius:.125rem;position:relative;z-index:1}::ng-deep .workflow-program .scope-label:before{background:#f1f1f1;content:\"\";position:absolute;top:.5rem;left:7rem;width:20rem;height:1px;z-index:-1}::ng-deep .workflow-program .scope-label:after{background:#f1f1f1;content:\"\";position:absolute;top:.5rem;left:-2.5rem;width:2.5rem;height:1px;z-index:-1}::ng-deep .workflow-program .scope-label .required{position:absolute;top:0;right:-.625rem}::ng-deep .workflow-program .info-icon{position:relative;top:.125rem;cursor:pointer}::ng-deep .workflow-program .date-picker .picker-group{width:calc(50% - .125rem);position:relative}::ng-deep .workflow-program .date-picker .picker-group:focus-within{border-color:#1e5dd3;box-shadow:0 0 5px rgba(30,93,211,.27)}::ng-deep .workflow-program .date-picker .picker-group input{height:2.5rem;border-radius:.25rem;border:1px solid #dbdbdb;background:#fff;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;padding:0 2rem 0 .75rem;outline:none}::ng-deep .workflow-program .date-picker .picker-group input:focus,::ng-deep .workflow-program .date-picker .picker-group input:hover{border-color:#1e5dd3;box-shadow:0 0 5px rgba(30,93,211,.27)}::ng-deep .workflow-program .date-picker .picker-group input::-moz-placeholder{color:#747576;font-size:13px}::ng-deep .workflow-program .date-picker .picker-group input::placeholder{color:#747576;font-size:13px}::ng-deep .workflow-program .date-picker .picker-group input:-ms-input-placeholder{color:#747576;font-size:13px}::ng-deep .workflow-program .date-picker .picker-group input::-ms-input-placeholder{color:#747576;font-size:13px}::ng-deep .workflow-program .date-picker .picker-group i{height:1rem;width:1rem;position:absolute;right:.75rem;top:.625rem;pointer-events:none}::ng-deep .workflow-program .program-type-field{background:#f8f8f8;border:1px solid #dbdbdb;border-radius:4px;height:40px;display:flex;align-items:center;justify-content:space-between;padding:4px;position:relative;z-index:1}::ng-deep .workflow-program .program-type-field .type-item{position:relative}::ng-deep .workflow-program .program-type-field .type-item:first-of-type{width:6.25rem}::ng-deep .workflow-program .program-type-field .type-item:nth-child(2){width:5.75rem}::ng-deep .workflow-program .program-type-field .type-item:nth-child(2).active~.background-glider{transform:translate(6.4375rem);width:5.75rem}::ng-deep .workflow-program .program-type-field .type-item:nth-child(3){width:8.625rem}::ng-deep .workflow-program .program-type-field .type-item:nth-child(3).active~.background-glider{transform:translate(12.375rem);width:8.625rem}::ng-deep .workflow-program .program-type-field .type-item:last-of-type{width:5.25rem}::ng-deep .workflow-program .program-type-field .type-item:last-of-type.active~.background-glider{transform:translate(21.1875rem);width:5.25rem}::ng-deep .workflow-program .program-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:center}::ng-deep .workflow-program .program-type-field .type-item button.disabled{background:transparent!important;color:#dbdbdb!important;filter:unset!important;opacity:unset!important;pointer-events:none}::ng-deep .workflow-program .program-type-field .type-item .info{color:#1e5dd3;font-size:12px;position:absolute;top:10px;right:12px;cursor:pointer}::ng-deep .workflow-program .program-type-field .type-item.active button{color:#1e5dd3!important}::ng-deep .workflow-program .program-type-field .background-glider{background:#fff;border-radius:4px;box-shadow:0 1px 3px #161b2f26;position:absolute;display:flex;width:6.25rem;height:32px;z-index:-1;transition:.25s ease-out}::ng-deep .workflow-program .vx-form-group .upload-files .file-item{background:#f1f1f1;border:1px solid #dbdbdb;border-radius:.25rem;padding-left:.125rem}::ng-deep .workflow-program .vx-form-group .upload-files .file-item .file-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:8.5rem}::ng-deep .workflow-program .vx-form-group .upload-files .file-item button.delete-btn{background:transparent;border-radius:0;border:none;border-left:1px solid #dbdbdb;height:1.625rem}::ng-deep .workflow-program .vx-form-group .upload-files button.file-count{background:#1e5dd3;border-radius:.125rem;border:none;color:#fff;font-size:11px;display:flex;align-items:center;justify-content:center;min-width:28px;height:28px;padding:0;margin:4px 0 0 4px}::ng-deep .workflow-program .vx-form-group .upload-format .radio-group app-cs-radio{height:1.375rem}::ng-deep .workflow-program .vx-form-group .default-selected{background:#fbfbfb;border:1px solid #f1f1f1;border-radius:.25rem;margin-top:.5rem}::ng-deep .workflow-program .vx-form-group .default-selected .selected{border-radius:0;border:none;background:none}::ng-deep .workflow-program .vx-form-group .default-selected .default-radio{border-top:1px solid #f1f1f1}::ng-deep .workflow-program .vx-form-group .default-selected .default-radio app-cs-radio{margin-top:0!important}::ng-deep .workflow-program .vx-form-group .default-selected .default-radio app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .workflow-program .vx-form-group .default-selected .default-radio app-cs-radio label.radio-item span.radio{position:absolute;top:.5rem;left:.75rem}::ng-deep .workflow-program .vx-form-group .default-selected .default-radio app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;padding:.5rem .5rem .5rem 2.25rem;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .workflow-program .vx-form-group .default-selected .default-radio app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .workflow-program .vx-form-group .default-selected .default-radio app-cs-radio label.radio-item svg{position:absolute;top:.5rem;left:.75rem}::ng-deep .workflow-program .vx-form-group .selected .custom-text{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;max-height:2.4rem}::ng-deep .workflow-program .vx-form-group .selected button.cross-btn{background:transparent;border-radius:0;border:0;padding:0}::ng-deep .workflow-program .vx-form-group .custom-input{position:relative}::ng-deep .workflow-program .vx-form-group .custom-input input{padding-right:2rem}::ng-deep .workflow-program .vx-form-group .custom-input button.cross-btn{background:transparent;border-radius:0;border:0;position:absolute;top:.875rem;right:.625rem}::ng-deep .workflow-program .vx-form-group button.add-more-btn{background:transparent;border-radius:0;border:none;padding:0}::ng-deep app-popover .action-list ul.action-item .avatar-card .value{text-transform:none!important}::ng-deep app-popover .action-list ul.action-item li file-pill .file-item{background:transparent!important;border:none!important;border-radius:0!important;padding:0!important;margin:0!important}::ng-deep app-popover .action-list ul.action-item li file-pill .file-name{width:100%!important;max-width:100%!important}::ng-deep app-popover .action-list ul.action-item li file-pill button.delete-btn{border:none!important;padding-right:0!important}.disabled{opacity:.4;pointer-events:none;filter:grayscale(1)}", "@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;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select: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;font-size:16px;font-weight:400;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 label.vx-control-panel i.depreciation-icon{color:#e4b700;font-size:16px;position:relative;top:3px}::ng-deep .vx-form-group label.vx-control-panel .checkpoint-version{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:10px;font-weight:600;line-height:14px;margin-left:4px;padding:0 2px}::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;font-weight:400}::ng-deep .vx-form-group .input:-ms-input-placeholder,::ng-deep .vx-form-group input[type=text]:-ms-input-placeholder{color:#747576;font-weight:400}::ng-deep .vx-form-group .input::placeholder,::ng-deep .vx-form-group input[type=text]::placeholder{color:#747576;font-weight:400}::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;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}::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.first-field{z-index:2}::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;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}::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 .chip-container .chip-inner{background:#fff;border-radius:2px;box-shadow:0 2px 4px #1e5dd31a;line-height:24px;padding:0 4px 0 8px;display:flex;align-items:center}::ng-deep .vx-form-group .selected .chip-container .chip-inner .chip{background:transparent;border-radius:0;box-shadow:none;height:auto;line-height:unset;padding:0;color:#747576;max-width:300px}::ng-deep .vx-form-group .selected .chip-container .chip-inner button.count{border-radius:20px;height:16px;padding:0 6px;border:none;font-size:9px;line-height:16px;margin-left:4px;min-width:20px}::ng-deep .vx-form-group .selected .chip-container .chip-inner button.count.user{background:#34aa44}::ng-deep .vx-form-group .selected .chip-container .chip-inner i.cross{cursor:pointer}::ng-deep .vx-form-group .selected button.count{background:#1e5dd3;border-radius:2px;height:24px;padding:0 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%}::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;position:static}::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;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select: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.disabled{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;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)}::ng-deep .radio-group-selector app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .radio-group-selector app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .radio-group-selector app-cs-radio label.radio-item .radio,::ng-deep .radio-group-selector app-cs-radio label.radio-item .radiomark{position:absolute!important;top:9px;left:12px}::ng-deep .radio-group-selector app-cs-radio label.radio-item .value{font-size:11px!important;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!important;max-width:100%!important;font-weight:500!important;color:#707070!important}::ng-deep .radio-group-selector app-cs-radio label.radio-item .value i{font-size:12px;color:#1e5dd3}::ng-deep .radio-group-selector app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}@-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:18px;min-width:18px}::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}"]
|
|
1144
1163
|
},] }
|
|
1145
1164
|
];
|
|
@@ -1164,4 +1183,4 @@ WorkflowProgramComponent.propDecorators = {
|
|
|
1164
1183
|
programId: [{ type: Input }],
|
|
1165
1184
|
programType: [{ type: Input }]
|
|
1166
1185
|
};
|
|
1167
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctcHJvZ3JhbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92eC13b3JrZmxvdy1lbmdpbmUvc3JjL2xpYi93b3JrZmxvdy1wcm9ncmFtL3dvcmtmbG93LXByb2dyYW0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckgsT0FBTyxFQUFFLFdBQVcsRUFBZSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUU1QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDeEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFPeEMsTUFBTSxPQUFPLHdCQUF3QjtJQTRCbkMsWUFBb0IsRUFBZSxFQUFVLGNBQStCLEVBQVUsV0FBd0IsRUFBUyxZQUF5QjtRQUE1SCxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQVUsbUJBQWMsR0FBZCxjQUFjLENBQWlCO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBUyxpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQTNCaEosY0FBUyxHQUFHLFNBQVMsQ0FBQztRQUd0QixzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFFaEIsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ25DLG1C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O1lBQ2hGLGdCQUFnQixFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDO1lBQ3pELHNCQUFzQixFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDO1lBQ3JFLHdCQUF3QixFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDO1lBQ3pFLDhCQUE4QixFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxDQUFDO1lBQ3JGLDRCQUE0QixFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLDhCQUE4QixDQUFDO1lBQ2pGLHdCQUF3QixFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDO1lBQ3pFLDhCQUE4QixFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxDQUFDO1lBQ3JGLGdCQUFnQixFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDO1lBQ3pELHNCQUFzQixFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDO1lBQ3JFLGdCQUFnQixFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDO1lBQ3pELHNCQUFzQixFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDO1lBQ3JFLHdCQUF3QixFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDO1lBQ3pFLDhCQUE4QixFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxDQUFDO1lBQ3JGLCtCQUErQixFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxDQUFDO1lBQ3ZGLHFDQUFxQyxFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLHVDQUF1QyxDQUFD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Ryx1QkFBSCxHQUFHLENBQUUsMEJBQTBCLE1BQUksTUFBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsMEJBQTBCLDBDQUFFLE1BQU0sQ0FBQSxFQUFDO29CQUM1RSxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBTyxFQUFFLEVBQUUsQ0FBQyxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsMEJBQTBCLENBQUMsUUFBUSxDQUFDLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO29CQUN2RyxJQUFJLENBQUMsWUFBWSxDQUFDLGdDQUFnQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2lCQUMvRDtZQUNILENBQUM7WUFFRCwwR0FBMEc7WUFDMUcsZ0ZBQWdGO1NBQ2xGLENBQUMsQ0FBQTtJQUNULENBQUM7OztZQWhxQ0EsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxzQkFBc0I7Z0JBQ2hDLDY3akVBQWdEOzthQUVqRDs7O1lBYlEsV0FBVztZQUtYLGVBQWU7WUFEZixXQUFXO1lBRVgsWUFBWTs7O21CQVdsQixTQUFTLFNBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTt5QkFFdEMsU0FBUyxTQUFDLFlBQVk7NEJBQ3RCLE1BQU07NkJBQ04sTUFBTTs0QkFDTixNQUFNO29DQUNOLE1BQU07Z0NBQ04sTUFBTTswQkFDTixNQUFNOzBDQUNOLE1BQU07NkJBQ04sTUFBTTttQkFJTixLQUFLO3dCQUNMLEtBQUs7MEJBQ0wsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IGNsb25lRGVlcCwgaXNFcXVhbCB9IGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCB7IERhdGVQaWNrZXJDb21wb25lbnQgfSBmcm9tICduZzItZGF0ZS1waWNrZXInO1xyXG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgdGFrZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IFByb2dyYW1zU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL3Byb2dyYW1zLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVaUtpdFNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy91aS1raXQuc2VydmljZSc7XHJcbmltcG9ydCB7IENPTlNUQU5UUyB9IGZyb20gJy4vY29uc3RhbnRzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXdvcmtmbG93LXByb2dyYW0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi93b3JrZmxvdy1wcm9ncmFtLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi93b3JrZmxvdy1wcm9ncmFtLmNvbXBvbmVudC5sZXNzJywgJy4uL2Zvcm1zLmxlc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgV29ya2Zsb3dQcm9ncmFtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBjb25zdGFudHMgPSBDT05TVEFOVFM7XHJcbiAgc2hvd0NvbmZpcm1hdGlvbjogYW55O1xyXG4gIEBWaWV3Q2hpbGQoJ2Zvcm0nLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgZm9ybSAhOiBFbGVtZW50UmVmO1xyXG4gIGRhdGVQaWNrZXJPdmVybGF5ID0gZmFsc2U7XHJcbiAgQFZpZXdDaGlsZCgnZGF0ZVBpY2tlcicpIGRhdGVQaWNrZXIhOiBEYXRlUGlja2VyQ29tcG9uZW50O1xyXG4gIEBPdXRwdXQoKSBwaWNrZXJDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBwb3B1bGF0ZU9wdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgY2xvc2VXb3JrZmxvdyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgc2hvd0NvbmZpcm1hdGlvbkFsZXJ0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBkaXNjb25uZWN0UmVmcmVzaCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcmVmcmVzaEZvcm0gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGhpZGVFbGVtZW50c0Zyb21Nb3JlT3B0aW9ucyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25SZW1vdmluZ1JvbGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIHNjcm9sbFRvQm90dG9tITogYm9vbGVhbjtcclxuXHJcbiAgLy8gQWxsIElucHV0IGZpZWxkc1xyXG4gIEBJbnB1dCgpIG1vZGU6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIHByb2dyYW1JZDogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgcHJvZ3JhbVR5cGU6IG51bWJlciA9IDE7XHJcblxyXG4gIHBhbmVsVGl0bGVEZWZhdWx0UmV2aWV3ZXIgPSBcIlNlbGVjdCBEZWZhdWx0IFJldmlld2VyKHMpXCI7XHJcbiAgcGFuZWxUaXRsZU93bmVyID0gXCJTZWxlY3QgT3duZXIocylcIjtcclxuICBwYW5lbFRpdGxlUmV2aWV3ZXIgPSBcIlNlbGVjdCBSZXZpZXdlcihzKVwiO1xyXG4gIHBhbmVsVGl0bGVBc3NpZ25lZSA9IFwiU2VsZWN0IEFzc2lnbmVlKHMpXCI7XHJcbiAgcGFuZWxUaXRsZUFwcHJvdmVyID0gXCJTZWxlY3QgIEFwcHJvdmVyKHMpXCJcclxuICBpc0FwcHJvdmVyRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsIHByaXZhdGUgcHJvZ3JhbVNlcnZpY2U6IFByb2dyYW1zU2VydmljZSwgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UscHJpdmF0ZSB1aUtpdFNlcnZpY2U6VWlLaXRTZXJ2aWNlKSB7IH1cclxuICBwdWJsaWMgbm9XaGl0ZXNwYWNlVmFsaWRhdG9yKGNvbnRyb2w6IEZvcm1Db250cm9sKSB7XHJcbiAgICBjb25zdCBpc1doaXRlc3BhY2UgPSAoY29udHJvbC52YWx1ZSB8fCAnJykudHJpbSgpLmxlbmd0aCA9PT0gMDtcclxuICAgIGNvbnN0IGlzVmFsaWQgPSAhaXNXaGl0ZXNwYWNlO1xyXG4gICAgcmV0dXJuIGlzVmFsaWQgPyBudWxsIDogeyAnd2hpdGVzcGFjZSc6IHRydWUgfTtcclxuICB9XHJcbiAgcHVibGljIGJsYW5rQXJyYXlWYWxpZGF0b3IoY29udHJvbDogRm9ybUNvbnRyb2wpIHtcclxuICAgIGNvbnN0IGlzQmxhbmsgPSBjb250cm9sLnZhbHVlPy5maWx0ZXIoKGVsZTphbnkpPT4gZWxlKT8ubGVuZ3RoID09PSAwO1xyXG4gICAgY29uc3QgaXNWYWxpZCA9ICFpc0JsYW5rO1xyXG4gICAgcmV0dXJuIGlzVmFsaWQgPyBudWxsIDogeyAnYmxhbmsnOiB0cnVlIH07XHJcbiAgfVxyXG4gbG9hZGVyID0gZmFsc2U7XHJcbiBzaG93U21pbGV5ID0gZmFsc2U7XHJcbiBhY3Rpb25CdXR0b25zID0gW1xyXG4gIHsgYnV0dG9uVGV4dDogJ0FkZCBNb3JlIFByb2dyYW1zJywgY2xhc3M6ICd3aGl0ZS1idG4nLCBpZDogJ2FkZE1vcmUnIH0sXHJcbiAgeyBidXR0b25UZXh0OiAnVmlldyBQcm9ncmFtJywgY2xhc3M6ICdibHVlLWJ0bicsIGlkOiAndmlld1Byb2dyYW0nIH0sXHJcbl07XHJcbnNtaWxleU1lc3NhZ2UgPSBgWW91J3JlIEFsbCBTZXQhYDtcclxuY3JlYXRlZFByb2dyYW1JZCA9ICcnO1xyXG4gIGlzT2JqZWN0aXZlVmFsaWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGlzTmFtZUV4aXN0czogYm9vbGVhbiA9ZmFsc2U7XHJcbiAgLy9mb3JtIGJvZHkgZm9yIHByb2dyYW0gbWV0YSBkYXRhXHJcbiAgcHJvZ3JhbUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgIHByb2dyYW1fdHlwZTogW3RoaXMucHJvZ3JhbVR5cGUsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbigwKSwgVmFsaWRhdG9ycy5tYXgoMyldXSxcclxuICAgIHByb2dyYW1fbmFtZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgdGhpcy5ub1doaXRlc3BhY2VWYWxpZGF0b3JdXSxcclxuICAgIHByb2dyYW1fZGVzY3JpcHRpb246IFsnJ10sXHJcbiAgICBwcm9ncmFtX2Rlc2NyaXB0aW9uX2F0dGFjaG1lbnRzOiBbW11dLFxyXG4gICAgcHJvZ3JhbV9vYmplY3RpdmU6IFsnJ10sXHJcbiAgIC8vIHByb2dyYW1fb2JqZWN0aXZlOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCB0aGlzLm5vV2hpdGVzcGFjZVZhbGlkYXRvcl1dLFxyXG4gICAgcHJvZ3JhbV9vYmplY3RpdmVfYXR0YWNobWVudHM6IFtbXV0sXHJcbiAgICBwcm9ncmFtX3JvbGVzOiBbW10sIFtWYWxpZGF0b3JzLnJlcXVpcmVkLHRoaXMuYmxhbmtBcnJheVZhbGlkYXRvcl1dLFxyXG4gICAgYWxsX3VzZXJfaW5fcm9sZTogW2ZhbHNlXSxcclxuICAgIHByb2dyYW1fb3duZXJzOiBbW10sIFtWYWxpZGF0b3JzLnJlcXVpcmVkLHRoaXMuYmxhbmtBcnJheVZhbGlkYXRvcl1dLFxyXG4gICAgcHJvZ3JhbV9vd25lcnNfZ3JvdXAgOltbXV0sXHJcbiAgICBwcm9ncmFtX2FwcHJvdmVyOiBbW11dLFxyXG4gICAgcGVyZm9ybWFuY2VfY2FsY3VsYXRpb246IFsnUEFTVF9FVkVOVCcsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICByZWN1cnJpbmdfZnJlcXVlbmN5OiBbdHJ1ZSxbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgbG9ja19zY29wZV9jaGFuZ2U6IFtmYWxzZSxbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgZnJhbWV3b3JrOiBbXSxcclxuICAgIHJjOiBbW11dLFxyXG4gICAgcHJvZ3JhbV9hc3NpZ25lZTogW1tdXSxcclxuICAgIHByb2dyYW1fYXNzaWduZWVfZ3JvdXA6IFtbXV0sXHJcbiAgICBwcm9ncmFtX2RlZmF1bHRfYXNzaWduZWU6IFtbXV0sXHJcbiAgICBwcm9ncmFtX2RlZmF1bHRfYXNzaWduZWVfZ3JvdXA6IFtbXV0sXHJcbiAgICBhc3NpZ25lZV9jb21wbGV0aW9uX2NyaXRlcmlhOiBbJ0FOWU9ORSddLFxyXG4gICAgcHJvZ3JhbV9yZXZpZXdlcjogW1tdXSxcclxuICAgIHByb2dyYW1fcmV2aWV3ZXJfZ3JvdXA6IFtbXV0sXHJcbiAgICBwcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXI6IFtbXV0sXHJcbiAgICBwcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXJfZ3JvdXA6IFtbXV0sXHJcbiAgICByZXZpZXdlcl9jb21wbGV0aW9uX2NyaXRlcmlhOiBbJ1NFUVVFTlRJQUwnXSxcclxuICAgIHByb2dyYW1fb3ZlcnNlZXI6IFtbXV0sXHJcbiAgICBwcm9ncmFtX292ZXJzZWVyX2dyb3VwOiBbW11dLFxyXG4gICAgcHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyOiBbW11dLFxyXG4gICAgcHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyX2dyb3VwOiBbW11dLFxyXG4gICAgcHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2VlcjogW1tdXSxcclxuICAgIHByb2dyYW1fZGVmYXVsdF9mYWlsZWRfb3ZlcnNlZXJfZ3JvdXA6IFtbXV0sXHJcbiAgICBwcm9ncmFtX2Fzc2Vzc21lbnRzOiBbW11dLFxyXG4gICAgZXZpZGVuY2VfcmVxdWlyZWQ6IFtmYWxzZV0sXHJcbiAgICBhbGxvd19hbnlfZmlsZV9rZXlfZXZpZGVuY2U6IFtmYWxzZV0sXHJcbiAgICBjdXN0b21fZmllbGRzOiBbW11dXHJcbiAgfSk7XHJcblxyXG4gIC8vZXhjZXB0aW9uYWwgaGFuZGxpbmcgb2YgY3VzdG9tIGZpZWxkc1xyXG5cclxuICAgc2hvd0FkZEN1c3RvbUZpZWxkID0gdHJ1ZTtcclxuICAvL1Byb2dyYW0gb2JqZWN0aXZlIGFuZCBkZXNjcmlwaW9uIGFyZSBleHBsZWN0bHkgZGVjbGFyZWQgYXMgdGhleSBhcmUgdXNpbmcgbWFyeCBlZGl0b3Igd2hpY2ggZG9lcyBub3Qgc3VwcG9ydHMgUmVhY3RpdmUgZm9ybXMgYmluZGluZ1xyXG4gIGVkaXRvckRhdGEgPSB7XHJcbiAgICBwcm9ncmFtT2JqZWN0aXZlOiAnJyxcclxuICAgIHByb2dyYW1EZXNjcmlwdGlvbjogJydcclxuICB9XHJcblxyXG4gIHNlbGVjdGVkQXNzZXNzbWVudCE6IGFueTtcclxuXHJcblxyXG5cclxuICBjdXJyZW50VXNlcigpIHtcclxuICAgIGNvbnN0IHVzZXIgPSB0aGlzLmF1dGhTZXJ2aWNlLnRva2VuSW5mbygpXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBtZW1iZXJfZW1haWw6IHVzZXI/LmVtYWlsLFxyXG4gICAgICBtZW1iZXJfaWQ6IHVzZXI/LmlkLFxyXG4gICAgICBtZW1iZXJfbmFtZTogdXNlcj8ubmFtZSxcclxuICAgICAgdXNlcl9yb2xlOiBcIkxPR0dFRF9JTlwiLFxyXG4gICAgICBfaWQ6IFwiXCJcclxuICAgIH1cclxuXHJcbiAgfVxyXG4gIC8vU2V0cyB0aGUgdmFsdWUgb2YgYSBmb3JtIGNvbnRyb2xcclxuICBzZXRGb3JtRmllbGQoY29udHJvbE5hbWU6IHN0cmluZywgdmFsdWU6IGFueSwgaXNGcm9tRm9ybT86IGJvb2xlYW4pIHtcclxuICAgIGxldCBwYXRjaDogYW55ID0ge307XHJcbiAgICBwYXRjaFtjb250cm9sTmFtZV0gPSB2YWx1ZTtcclxuICAgIHRoaXMucHJvZ3JhbUZvcm0ucGF0Y2hWYWx1ZShwYXRjaCk7XHJcbiAgICB0aGlzLmNvbnRyb2xzW2NvbnRyb2xOYW1lXT8ubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgaWYoaXNGcm9tRm9ybSAmJiBjb250cm9sTmFtZSA9PT0gJ3Byb2dyYW1fb2JqZWN0aXZlJyAmJiAhdmFsdWUucmVwbGFjZSgvJm5ic3A7L2csICcgJykudHJpbSgpKSB0aGlzLmlzT2JqZWN0aXZlVmFsaWQgPSBmYWxzZTtcclxuICAgIGVsc2UgdGhpcy5pc09iamVjdGl2ZVZhbGlkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vUmV0dXJucyB3ZWF0aGVyIHRoZSBmb3JtIGlzIHZhbGlkIG9yIG5vdFxyXG4gIGdldCBmb3JtVmFsaWQoKSB7XHJcbiAgICBpZiAodGhpcy5wcm9ncmFtRm9ybS52YWxpZCAmJiB0aGlzLmVkaXRvckRhdGE/LnByb2dyYW1PYmplY3RpdmU/LnJlcGxhY2UoLyZuYnNwOy9nLCAnICcpPy50cmltKCk/Lmxlbmd0aCApIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb250cm9sczogYW55ID0ge1xyXG4gICAgcHJvZ3JhbV9uYW1lOiB0aGlzLnByb2dyYW1Gb3JtLmdldCgncHJvZ3JhbV9uYW1lJyksXHJcbiAgICBwcm9ncmFtX3R5cGU6dGhpcy5wcm9ncmFtRm9ybS5nZXQoJ3Byb2dyYW1fdHlwZScpLFxyXG4gICAgcHJvZ3JhbV9vYmplY3RpdmU6IHRoaXMucHJvZ3JhbUZvcm0uZ2V0KCdwcm9ncmFtX29iamVjdGl2ZScpLFxyXG4gICAgcHJvZ3JhbV9yb2xlczogdGhpcy5wcm9ncmFtRm9ybS5nZXQoJ3Byb2dyYW1fcm9sZXMnKSxcclxuICAgIHByb2dyYW1fb3duZXJzOiB0aGlzLnByb2dyYW1Gb3JtLmdldCgncHJvZ3JhbV9vd25lcnMnKSxcclxuICAgIHByb2dyYW1fb3duZXJzX2dyb3VwOiB0aGlzLnByb2dyYW1Gb3JtLmdldCgncHJvZ3JhbV9vd25lcnNfZ3JvdXAnKSxcclxuICAgIGFsbF91c2VyX2luX3JvbGU6IHRoaXMucHJvZ3JhbUZvcm0uZ2V0KCdhbGxfdXNlcl9pbl9yb2xlJyksXHJcbiAgICBwcm9ncmFtX2FwcHJvdmVyOiB0aGlzLnByb2dyYW1Gb3JtLmdldCgncHJvZ3JhbV9hcHByb3ZlcicpLFxyXG4gICAgZGVzY3JpcHRpb25fYXR0YWNobWVudDogdGhpcy5wcm9ncmFtRm9ybS5nZXQoJ3Byb2dyYW1fZGVzY3JpcHRpb25fYXR0YWNobWVudHMnKSxcclxuICAgIG9iamVjdGl2ZV9hdHRhY2htZW50czogdGhpcy5wcm9ncmFtRm9ybS5nZXQoJ3Byb2dyYW1fb2JqZWN0aXZlX2F0dGFjaG1lbnRzJyksXHJcbiAgICBwZXJmb3JtYW5jZV9jYWxjdWxhdGlvbjp0aGlzLnByb2dyYW1Gb3JtLmdldCgncGVyZm9ybWFuY2VfY2FsY3VsYXRpb24nKSxcclxuICAgIHJlY3VycmluZ19mcmVxdWVuY3k6IHRoaXMucHJvZ3JhbUZvcm0uZ2V0KCdyZWN1cnJpbmdfZnJlcXVlbmN5JyksXHJcbiAgICBsb2NrX3Njb3BlX2NoYW5nZTogdGhpcy5wcm9ncmFtRm9ybS5nZXQoJ2xvY2tfc2NvcGVfY2hhbmdlJyksXHJcbiAgICByYzogdGhpcy5wcm9ncmFtRm9ybS5nZXQoJ3JjJyksXHJcbiAgICBldmlkZW5jZV9yZXF1aXJlZDogdGhpcy5wcm9ncmFtRm9ybS5nZXQoJ2V2aWRlbmNlX3JlcXVpcmVkJyksXHJcbiAgICBmcmFtZXdvcms6IHRoaXMucHJvZ3JhbUZvcm0uZ2V0KCdmcmFtZXdvcmsnKSxcclxuICAgIGFsbG93X2FueV9maWxlX2tleV9ldmlkZW5jZTogdGhpcy5wcm9ncmFtRm9ybS5nZXQoJ2FsbG93X2FueV9maWxlX2tleV9ldmlkZW5jZScpLFxyXG4gICAgcHJvZ3JhbV9hc3NpZ25lZTp0aGlzLnByb2dyYW1Gb3JtLmdldCgncHJvZ3JhbV9hc3NpZ25lZScpLFxyXG4gICAgcHJvZ3JhbV9hc3NpZ25lZV9ncm91cDp0aGlzLnByb2dyYW1Gb3JtLmdldCgncHJvZ3JhbV9hc3NpZ25lZV9ncm91cCcpLFxyXG4gICAgcHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlOnRoaXMucHJvZ3JhbUZvcm0uZ2V0KCdwcm9ncmFtX2RlZmF1bHRfYXNzaWduZWUnKSxcclxuICAgIHByb2dyYW1fZGVmYXVsdF9hc3NpZ25lZV9ncm91cDp0aGlzLnByb2dyYW1Gb3JtLmdldCgncHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlX2dyb3VwJyksXHJcbiAgICBhc3NpZ25lZV9jb21wbGV0aW9uX2NyaXRlcmlhOnRoaXMucHJvZ3JhbUZvcm0uZ2V0KCdhc3NpZ25lZV9jb21wbGV0aW9uX2NyaXRlcmlhJyksXHJcbiAgICBwcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXI6dGhpcy5wcm9ncmFtRm9ybS5nZXQoJ3Byb2dyYW1fZGVmYXVsdF9yZXZpZXdlcicpLFxyXG4gICAgcHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyX2dyb3VwOnRoaXMucHJvZ3JhbUZvcm0uZ2V0KCdwcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXJfZ3JvdXAnKSxcclxuICAgIHByb2dyYW1fcmV2aWV3ZXI6dGhpcy5wcm9ncmFtRm9ybS5nZXQoJ3Byb2dyYW1fcmV2aWV3ZXInKSxcclxuICAgIHByb2dyYW1fcmV2aWV3ZXJfZ3JvdXA6dGhpcy5wcm9ncmFtRm9ybS5nZXQoJ3Byb2dyYW1fcmV2aWV3ZXJfZ3JvdXAnKSxcclxuICAgIHByb2dyYW1fb3ZlcnNlZXI6dGhpcy5wcm9ncmFtRm9ybS5nZXQoJ3Byb2dyYW1fb3ZlcnNlZXInKSxcclxuICAgIHByb2dyYW1fb3ZlcnNlZXJfZ3JvdXA6dGhpcy5wcm9ncmFtRm9ybS5nZXQoJ3Byb2dyYW1fb3ZlcnNlZXJfZ3JvdXAnKSxcclxuICAgIHByb2dyYW1fZGVmYXVsdF9vdmVyc2Vlcjp0aGlzLnByb2dyYW1Gb3JtLmdldCgncHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyJyksXHJcbiAgICBwcm9ncmFtX2RlZmF1bHRfb3ZlcnNlZXJfZ3JvdXA6dGhpcy5wcm9ncmFtRm9ybS5nZXQoJ3Byb2dyYW1fZGVmYXVsdF9vdmVyc2Vlcl9ncm91cCcpLFxyXG4gICAgcHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2Vlcjp0aGlzLnByb2dyYW1Gb3JtLmdldCgncHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2VlcicpLFxyXG4gICAgcHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2Vlcl9ncm91cDp0aGlzLnByb2dyYW1Gb3JtLmdldCgncHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2Vlcl9ncm91cCcpLFxyXG4gICAgcmV2aWV3ZXJfY29tcGxldGlvbl9jcml0ZXJpYSA6IHRoaXMucHJvZ3JhbUZvcm0uZ2V0KCdyZXZpZXdlcl9jb21wbGV0aW9uX2NyaXRlcmlhJyksXHJcbiAgICBwcm9ncmFtX2Fzc2Vzc21lbnRzOiB0aGlzLnByb2dyYW1Gb3JtLmdldCgncHJvZ3JhbV9hc3Nlc3NtZW50cycpLFxyXG4gICAgY3VzdG9tX2ZpZWxkczogdGhpcy5wcm9ncmFtRm9ybS5nZXQoJ2N1c3RvbV9maWVsZHMnKSxcclxuICAgIGlzQXBwcm92ZXJEaXNhYmxlZDogdGhpcy5wcm9ncmFtRm9ybS5nZXQoJ2lzQXBwcm92ZXJEaXNhYmxlZCcpLFxyXG4gIH1cclxuXHJcbiAgbGlzdHM6IGFueSA9IHtcclxuICAgIFJPTEVTOiBbXSxcclxuICAgIE9XTkVSUzogW10sXHJcbiAgICBPV05FUlNfR1JPVVBTOltdLFxyXG4gICAgQVBQUk9WRVJTOltdLFxyXG4gICAgUkVWSUVXRVJTOiBbXSxcclxuICAgIFJFVklFV0VSU19HUk9VUDpbXSxcclxuICAgIEFTU0lHTkVFUzogW10sXHJcbiAgICBBU1NJR05FRVNfR1JPVVAgOltdLFxyXG4gICAgREVGQVVMVF9BU1NJR05FRVM6W10sXHJcbiAgICBERUZBVUxUX0FTU0lHTkVFU19HUk9VUDpbXSxcclxuICAgIERFRkFVTFRfUkVWSUVXRVJTOltdLFxyXG4gICAgREVGQVVMVF9SRVZJRVdFUlNfR1JPVVA6W10sXHJcbiAgICBPVkVSU0VFUlM6IFtdLFxyXG4gICAgT1ZFUlNFRVJTX0dST1VQOltdLFxyXG4gICAgREVGQVVMVF9PVkVSU0VFUlM6IFtdLFxyXG4gICAgREVGQVVMVF9PVkVSU0VFUlNfR1JPVVA6W10sXHJcbiAgICBSQzogW10sXHJcbiAgICBOT05fUkVNT1ZBQkxFX09XTkVSUzogW10sXHJcbiAgICBBTExfVVNFUjpbXSxcclxuICAgIEFMTF9HUk9VUDpbXSxcclxuICAgIFNZU1RFTV9ST0xFX0lEUzpbXVxyXG4gIH1cclxuXHJcblxyXG5cclxuICBsaXN0TG9hZGluZ1N0YXRlID0ge1xyXG4gICAgUk9MRVM6ZmFsc2UsXHJcbiAgICBVU0VSUzpmYWxzZSxcclxuICAgIEdST1VQOmZhbHNlLFxyXG4gICAgUkM6ZmFsc2UsXHJcbiAgfVxyXG4gIHNpZGVFbGVtZW50cyA9IFsnUk9MRScsJ1JDJywnT1dORVInLCdBU1NJR05FRScsJ0FQUFJPVkVSJywnREVGQVVMVF9BU1NJR05FRScsJ1JFVklFV0VSJywnREVGQVVMVF9SRVZJRVdFUicsJ0FTU0VTU01FTlQnLCdGUkFNRVdPUksnLCdPVkVSU0VFUicsJ0RFRkFVTFRfRkFJTEVEX09WRVJTRUVSJywnREVGQVVMVF9PVkVSU0VFUicsJ09WRVJTRUVSJ107XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fdHlwZScsIHRoaXMucHJvZ3JhbVR5cGUpO1xyXG4gICAgaWYodGhpcy5tb2RlID09PSAnRURJVCcpIHtcclxuICAgICAgdGhpcy5nZXRQcm9ncmFtRGV0YWlscygpO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIHRoaXMuZmV0Y2hPcmdhbml6YXRpb25Vc2VycygpO1xyXG4gICAgICB0aGlzLmZldGNoT3JnYW5pemF0aW9uR3JvdXAoKTtcclxuICAgIH1cclxuICAgIHRoaXMuZmV0Y2hSb2xlcygpO1xyXG4gICAgdGhpcy5mZXRjaFJDKCk7XHJcblxyXG4gIH1cclxuICBnZXQgdmFsaWQoKSB7XHJcbiAgIHJldHVybiB0aGlzLnByb2dyYW1Gb3JtLnZhbGlkXHJcbiAgfVxyXG5cclxuICBhZGRpdGlvbmFsT3B0aW9uOiBhbnkgPSB7Li4uQ09OU1RBTlRTLmFkZGl0aW9uYWxPcHRpb259O1xyXG4gIGFjdGl2ZUxpc3QgPSAnJyBcclxuICAvKipcclxuICAgKiAjIyMjIERlc2NyaXB0aW9uXHJcbiAgICogUG9wdWxhdGVzIG9wdGlvbmFsIGZpZWxkcyBzdGF0dXMgZm9yIHRoZSBvcHRpb25hbCBmaWVsZHNcclxuICAgKi9cclxuICBwb3B1bGF0ZU9wdGlvbmFsRmllbGRzKCkge1xyXG4gICAgY29uc3QgYWN0aXZhdGVkT3B0aW9ucyA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5hZGRpdGlvbmFsT3B0aW9uKSkge1xyXG4gICAgICBpZiAodGhpcy5hZGRpdGlvbmFsT3B0aW9uW2tleV0gPT09IHRydWUpIHtcclxuICAgICAgICBhY3RpdmF0ZWRPcHRpb25zLnB1c2goa2V5KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5wb3B1bGF0ZU9wdGlvbi5lbWl0KGFjdGl2YXRlZE9wdGlvbnMpO1xyXG4gIH1cclxuICBhZGRNb3JlSW5mbyhldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmFkZGl0aW9uYWxPcHRpb25bZXZlbnQuY29kZV0gPSBldmVudC5jaGVja2VkO1xyXG4gICAgdGhpcy5zY3JvbGxUb0JvdHRvbSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyBmdW5jdGlvbiB0byBhdXRvbWF0ZSBmb3JtIHZhbHVlIGNoYW5nZSBoYW5kbmdcclxuICBmb3JtQ2hhbmdlTGlzdG5lcigpIHtcclxuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpO1xyXG4gICAgZmllbGRzLmZvckVhY2goKGVsZTogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuY29udHJvbHNbZWxlXT8udmFsdWVDaGFuZ2VzLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHsgdGhpcy5oYW5kbGVGb3JtRmllbGRDaGFuZ2UoZWxlLCByZXMpIH1cclxuICAgICAgfSlcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBoYW5kbGVGb3JtRmllbGRDaGFuZ2UoY29udHJvbDogc3RyaW5nLCBwYXlsb2FkPzogYW55KSB7XHJcbiAgICBzd2l0Y2ggKGNvbnRyb2wpIHtcclxuICAgICAgY2FzZSAncHJvZ3JhbV9yb2xlcyc6IHtcclxuICAgICAgICB0aGlzLmZldGNoVXNlcnNBc3NvY2lhdGVkV2l0aFJvbGVzKClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWN0aXZhdGVMaXN0KGV2dDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmFjdGl2ZUxpc3QgPSBldnQ7XHJcbiAgICB0aGlzLnBpY2tlckNoYW5nZWQuZW1pdCh0cnVlKTtcclxuICB9XHJcblxyXG4gIGxpc3RBY3Rpb24oZXZ0OiBhbnksIHR5cGU6IGFueSkge1xyXG4gICAgY29uc29sZS5sb2coXCJldnQgPT09PlwiLCBldnQsIHR5cGUpXHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAnUk9MRSc6IHtcclxuICAgICAgICB0aGlzLnNob3dDb25maXJtYXRpb24gPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IHN5c3RlbVJvbGVzID0gZXZ0Py5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGU/LnJvbGVUeXBlID09PSBcInN5c3RlbSByb2xlXCIpO1xyXG4gICAgICAgIGNvbnN0IHBhdGNoVmFsID0gdGhpcy51bmlxdWVCeVByb3AoWy4uLnN5c3RlbVJvbGVzLCAuLi5ldnRdLCAnX2lkJyk7XHJcbiAgICAgICAgaWYgKCFpc0VxdWFsKHRoaXMuY29udHJvbHMucHJvZ3JhbV9yb2xlcy52YWx1ZS5zb3J0KCksIHBhdGNoVmFsLnNvcnQoKSkpIHtcclxuICAgICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX3JvbGVzJywgcGF0Y2hWYWwpO1xyXG4gICAgICAgICAgICB0aGlzLmZldGNoVXNlcnNBc3NvY2lhdGVkV2l0aFJvbGVzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hHcm91cHNBc3NvY2lhdGVkV2l0aFJvbGVzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZmllbGREZXNlbGVjdG9yKHR5cGUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ1JDJzoge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwicm9sZVwiLGV2dClcclxuICAgICAgICBjb25zdCByYyA9IHRoaXMuc2V0TGlzdCh0aGlzLmxpc3RzLlJDLCBldnQsICdpdGVtX2lkJylcclxuICAgICAgICBjb25zb2xlLmxvZyhcInNldHJjXCIscmMpXHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3JjJywgdGhpcy51bmlxdWVCeVByb3AocmMsICdpdGVtX2lkJykpO1xyXG4gICAgICAgIHRoaXMuZmllbGREZXNlbGVjdG9yKHR5cGUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ09XTkVSJyA6e1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX293bmVycycsIHRoaXMudW5pcXVlQnlQcm9wKGV2dD8udXNlcnMsICdtZW1iZXJfaWQnKSk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fb3duZXJzX2dyb3VwJywgdGhpcy51bmlxdWVCeVByb3AoZXZ0Py5ncm91cHMsICdncm91cF9pZCcpKTtcclxuICAgICAgICB0aGlzLmZpZWxkRGVzZWxlY3Rvcih0eXBlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdBUFBST1ZFUic6e1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2FwcHJvdmVyJywgdGhpcy51bmlxdWVCeVByb3AoZXZ0Py51c2VycywgJ21lbWJlcl9pZCcpKTtcclxuICAgICAgICB0aGlzLmZpZWxkRGVzZWxlY3Rvcih0eXBlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdBU1NJR05FRSc6e1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2Fzc2lnbmVlJywgdGhpcy51bmlxdWVCeVByb3AoZXZ0Py51c2VycywgJ21lbWJlcl9pZCcpKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9hc3NpZ25lZV9ncm91cCcsIHRoaXMudW5pcXVlQnlQcm9wKGV2dD8uZ3JvdXBzLCAnZ3JvdXBfaWQnKSk7XHJcbiAgICAgICAgdGhpcy5maWVsZERlc2VsZWN0b3IodHlwZSk7XHJcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0QXNzaWduZWUoZXZ0KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdERUZBVUxUX0FTU0lHTkVFJzp7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fZGVmYXVsdF9hc3NpZ25lZScsIHRoaXMudW5pcXVlQnlQcm9wKGV2dD8udXNlcnMsICdtZW1iZXJfaWQnKSk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fZGVmYXVsdF9hc3NpZ25lZV9ncm91cCcsIHRoaXMudW5pcXVlQnlQcm9wKGV2dD8uZ3JvdXBzLCAnZ3JvdXBfaWQnKSk7XHJcbiAgICAgICAgdGhpcy5maWVsZERlc2VsZWN0b3IodHlwZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnUkVWSUVXRVInOntcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9yZXZpZXdlcicsIHRoaXMudW5pcXVlQnlQcm9wKGV2dD8udXNlcnMsICdtZW1iZXJfaWQnKSk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fcmV2aWV3ZXJfZ3JvdXAnLCB0aGlzLnVuaXF1ZUJ5UHJvcChldnQ/Lmdyb3VwcywgJ2dyb3VwX2lkJykpO1xyXG4gICAgICAgIHRoaXMuZmllbGREZXNlbGVjdG9yKHR5cGUpO1xyXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdFJldmlld2VyKGV2dCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnREVGQVVMVF9SRVZJRVdFUic6e1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXInLCB0aGlzLnVuaXF1ZUJ5UHJvcChldnQ/LnVzZXJzLCAnbWVtYmVyX2lkJykpO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXJfZ3JvdXAnLCB0aGlzLnVuaXF1ZUJ5UHJvcChldnQ/Lmdyb3VwcywgJ2dyb3VwX2lkJykpO1xyXG4gICAgICAgIHRoaXMuZmllbGREZXNlbGVjdG9yKHR5cGUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ09WRVJTRUVSJzp7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fb3ZlcnNlZXInLCB0aGlzLnVuaXF1ZUJ5UHJvcChldnQ/LnVzZXJzLCAnbWVtYmVyX2lkJykpO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX292ZXJzZWVyX2dyb3VwJywgdGhpcy51bmlxdWVCeVByb3AoZXZ0Py5ncm91cHMsICdncm91cF9pZCcpKTtcclxuICAgICAgICB0aGlzLmZpZWxkRGVzZWxlY3Rvcih0eXBlKTtcclxuICAgICAgICB0aGlzLnNldERlZmF1bHRPdmVyc2VlcihldnQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0RFRkFVTFRfT1ZFUlNFRVInOntcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyJywgdGhpcy51bmlxdWVCeVByb3AoZXZ0Py51c2VycywgJ21lbWJlcl9pZCcpKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyX2dyb3VwJywgdGhpcy51bmlxdWVCeVByb3AoZXZ0Py5ncm91cHMsICdncm91cF9pZCcpKTtcclxuICAgICAgICB0aGlzLmZpZWxkRGVzZWxlY3Rvcih0eXBlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdERUZBVUxUX0ZBSUxFRF9PVkVSU0VFUic6e1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyJywgdGhpcy51bmlxdWVCeVByb3AoZXZ0Py51c2VycywgJ21lbWJlcl9pZCcpKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2Vlcl9ncm91cCcsIHRoaXMudW5pcXVlQnlQcm9wKGV2dD8uZ3JvdXBzLCAnZ3JvdXBfaWQnKSk7XHJcbiAgICAgICAgdGhpcy5maWVsZERlc2VsZWN0b3IodHlwZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnQVNTRVNTTUVOVCc6e1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2Fzc2Vzc21lbnRzJywgZXZ0KTtcclxuICAgICAgICB0aGlzLmZpZWxkRGVzZWxlY3Rvcih0eXBlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdGUkFNRVdPUksnOntcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgnZnJhbWV3b3JrJywgZXZ0KTtcclxuICAgICAgICB0aGlzLmZpZWxkRGVzZWxlY3Rvcih0eXBlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlKGV2dDogYW55LCB0eXBlOiBhbnkpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlICdST0xFJzoge1xyXG4gICAgICAgIGxldCBtc2cgPSAnJztcclxuICAgICAgICBtc2cgPSAnSWYgeW91IGNoYW5nZSB0aGUgcm9sZXMsIGFueSB1bnNhdmVkIGNoYW5nZXMgd291bGQgYmUgbG9zdC4nXHJcbiAgICAgICAgY29uc3Qgcm9sZXMgPSB0aGlzLmNvbnRyb2xzPy5wcm9ncmFtX3JvbGVzPy52YWx1ZT8uZmlsdGVyKChlbGU6IGFueSkgPT4gZWxlPy5faWQgIT09IGV2dD8uX2lkKTtcclxuICAgICAgICB0aGlzLmxpc3RBY3Rpb24ocm9sZXMsJ1JPTEUnKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9yb2xlcycsIHJvbGVzKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdSQyc6IHtcclxuICAgICAgICBjb25zdCByY3MgPSB0aGlzLmNvbnRyb2xzPy5yYz8udmFsdWU/LmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZT8uaXRlbV9pZCAhPT0gZXZ0Py5pdGVtX2lkKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncmMnLCByY3MpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ09XTkVSJzp7XHJcbiAgICAgICAgY29uc3Qgb3duZXJzID0gdGhpcy5jb250cm9scz8ucHJvZ3JhbV9vd25lcnM/LnZhbHVlPy5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGU/Lm1lbWJlcl9pZCAhPT0gZXZ0Py5tZW1iZXJfaWQpO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX293bmVycycsIG93bmVycyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnT1dORVJfR1JPVVAnOntcclxuICAgICAgICBjb25zdCBvd25lcnNfZ3JvdXAgPSB0aGlzLmNvbnRyb2xzPy5wcm9ncmFtX293bmVyc19ncm91cD8udmFsdWU/LmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZT8uZ3JvdXBfaWQgIT09IGV2dD8uZ3JvdXBfaWQpO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX293bmVyc19ncm91cCcsIG93bmVyc19ncm91cCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnQVBQUk9WRVInOntcclxuICAgICAgICBjb25zdCBhcHByb3ZlciA9IHRoaXMuY29udHJvbHM/LnByb2dyYW1fYXBwcm92ZXI/LnZhbHVlPy5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGU/Lm1lbWJlcl9pZCAhPT0gZXZ0Py5tZW1iZXJfaWQpO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2FwcHJvdmVyJywgYXBwcm92ZXIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0FTU0lHTkVFJzp7XHJcbiAgICAgICAgY29uc3QgYXNzaWduZWUgPSB0aGlzLmNvbnRyb2xzPy5wcm9ncmFtX2Fzc2lnbmVlPy52YWx1ZT8uZmlsdGVyKChlbGU6IGFueSkgPT4gZWxlPy5tZW1iZXJfaWQgIT09IGV2dD8ubWVtYmVyX2lkKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9hc3NpZ25lZScsIGFzc2lnbmVlKTtcclxuICAgICAgICB0aGlzLnNldERlZmF1bHRBc3NpZ25lZU9uUmVtb3ZlKGV2dCx0eXBlKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0FTU0lHTkVFX0dST1VQJzp7XHJcbiAgICAgICAgY29uc3QgYXNzaWduZWVfZ3JvdXAgPSB0aGlzLmNvbnRyb2xzPy5wcm9ncmFtX2Fzc2lnbmVlX2dyb3VwPy52YWx1ZT8uZmlsdGVyKChlbGU6IGFueSkgPT4gZWxlPy5ncm91cF9pZCAhPT0gZXZ0Py5ncm91cF9pZCk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fYXNzaWduZWVfZ3JvdXAnLCBhc3NpZ25lZV9ncm91cCk7XHJcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0QXNzaWduZWVPblJlbW92ZShldnQsdHlwZSlcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdERUZBVUxUX0FTU0lHTkVFJzp7XHJcbiAgICAgICAgY29uc3QgYXNzaWduZWUgPSB0aGlzLmNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfYXNzaWduZWU/LnZhbHVlPy5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGU/Lm1lbWJlcl9pZCAhPT0gZXZ0Py5tZW1iZXJfaWQpO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2RlZmF1bHRfYXNzaWduZWUnLCBhc3NpZ25lZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnREVGQVVMVF9BU1NJR05FRV9HUk9VUCc6e1xyXG4gICAgICAgIGNvbnN0IGFzc2lnbmVlX2dyb3VwID0gdGhpcy5jb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlX2dyb3VwPy52YWx1ZT8uZmlsdGVyKChlbGU6IGFueSkgPT4gZWxlPy5ncm91cF9pZCAhPT0gZXZ0Py5ncm91cF9pZCk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fZGVmYXVsdF9hc3NpZ25lZV9ncm91cCcsIGFzc2lnbmVlX2dyb3VwKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdSRVZJRVdFUic6e1xyXG4gICAgICAgIGNvbnN0IHJldmlld2VyID0gdGhpcy5jb250cm9scz8ucHJvZ3JhbV9yZXZpZXdlcj8udmFsdWU/LmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZT8ubWVtYmVyX2lkICE9PSBldnQ/Lm1lbWJlcl9pZCk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fcmV2aWV3ZXInLCByZXZpZXdlcik7XHJcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0UmV2aWV3ZXJPblJlbW92ZShldnQsdHlwZSlcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdSRVZJRVdFUl9HUk9VUCc6e1xyXG4gICAgICAgIGNvbnN0IHJldmlld2VyX2dyb3VwID0gdGhpcy5jb250cm9scz8ucHJvZ3JhbV9yZXZpZXdlcl9ncm91cD8udmFsdWU/LmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZT8uZ3JvdXBfaWQgIT09IGV2dD8uZ3JvdXBfaWQpO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX3Jldmlld2VyX2dyb3VwJywgcmV2aWV3ZXJfZ3JvdXApO1xyXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdFJldmlld2VyT25SZW1vdmUoZXZ0LHR5cGUpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnREVGQVVMVF9SRVZJRVdFUic6e1xyXG4gICAgICAgIGNvbnN0IHJldmlld2VyID0gdGhpcy5jb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyPy52YWx1ZT8uZmlsdGVyKChlbGU6IGFueSkgPT4gZWxlPy5tZW1iZXJfaWQgIT09IGV2dD8ubWVtYmVyX2lkKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyJywgcmV2aWV3ZXIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0RFRkFVTFRfUkVWSUVXRVJfR1JPVVAnOntcclxuICAgICAgICBjb25zdCByZXZpZXdlcl9ncm91cCA9IHRoaXMuY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9yZXZpZXdlcl9ncm91cD8udmFsdWU/LmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZT8uZ3JvdXBfaWQgIT09IGV2dD8uZ3JvdXBfaWQpO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXJfZ3JvdXAnLCByZXZpZXdlcl9ncm91cCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnT1ZFUlNFRVInOntcclxuICAgICAgICBjb25zdCBvdmVyc2VlciA9IHRoaXMuY29udHJvbHM/LnByb2dyYW1fb3ZlcnNlZXI/LnZhbHVlPy5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGU/Lm1lbWJlcl9pZCAhPT0gZXZ0Py5tZW1iZXJfaWQpO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX292ZXJzZWVyJywgb3ZlcnNlZXIpO1xyXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdE92ZXJzZWVyT25SZW1vdmUoZXZ0LHR5cGUpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnT1ZFUlNFRVJfR1JPVVAnOntcclxuICAgICAgICBjb25zdCBvdmVyc2Vlcl9ncm91cCA9IHRoaXMuY29udHJvbHM/LnByb2dyYW1fb3ZlcnNlZXJfZ3JvdXA/LnZhbHVlPy5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGU/Lmdyb3VwX2lkICE9PSBldnQ/Lmdyb3VwX2lkKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9vdmVyc2Vlcl9ncm91cCcsIG92ZXJzZWVyX2dyb3VwKTtcclxuICAgICAgICB0aGlzLnNldERlZmF1bHRPdmVyc2Vlck9uUmVtb3ZlKGV2dCx0eXBlKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0RFRkFVTFRfT1ZFUlNFRVInOntcclxuICAgICAgICBjb25zdCBvdmVyc2VlciA9IHRoaXMuY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9vdmVyc2Vlcj8udmFsdWU/LmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZT8ubWVtYmVyX2lkICE9PSBldnQ/Lm1lbWJlcl9pZCk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fZGVmYXVsdF9vdmVyc2VlcicsIG92ZXJzZWVyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdERUZBVUxUX09WRVJTRUVSX0dST1VQJzp7XHJcbiAgICAgICAgY29uc3Qgb3ZlcnNlZXJfZ3JvdXAgPSB0aGlzLmNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfb3ZlcnNlZXJfZ3JvdXA/LnZhbHVlPy5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGU/Lmdyb3VwX2lkICE9PSBldnQ/Lmdyb3VwX2lkKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyX2dyb3VwJywgb3ZlcnNlZXJfZ3JvdXApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0RFRkFVTFRfRkFJTEVEX09WRVJTRUVSJzp7XHJcbiAgICAgICAgY29uc3Qgb3ZlcnNlZXIgPSB0aGlzLmNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyPy52YWx1ZT8uZmlsdGVyKChlbGU6IGFueSkgPT4gZWxlPy5tZW1iZXJfaWQgIT09IGV2dD8ubWVtYmVyX2lkKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2VlcicsIG92ZXJzZWVyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdERUZBVUxUX0ZBSUxFRF9PVkVSU0VFUl9HUk9VUCc6e1xyXG4gICAgICAgIGNvbnN0IG92ZXJzZWVyX2dyb3VwID0gdGhpcy5jb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2Vlcl9ncm91cD8udmFsdWU/LmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZT8uZ3JvdXBfaWQgIT09IGV2dD8uZ3JvdXBfaWQpO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyX2dyb3VwJywgb3ZlcnNlZXJfZ3JvdXApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0FTU0VTU01FTlQnIDp7XHJcblxyXG4gICAgICAgIGxldCBjdXJyZW50ID0gY2xvbmVEZWVwKHRoaXMuY29udHJvbHMucHJvZ3JhbV9hc3Nlc3NtZW50cz8udmFsdWUpO1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gY3VycmVudC5maW5kSW5kZXgoKGVsZTogYW55KSA9PiBlbGUuY2F0ZWdvcnlfaWQgPT0gZXZ0LmNhdGVnb3J5X2lkKTtcclxuICAgICAgICBjdXJyZW50W2luZGV4XS5hc3Nlc3NtZW50SWRzID0gY3VycmVudFtpbmRleF0uYXNzZXNzbWVudElkcy5maWx0ZXIoKGFzc2Vzc21lbnQ6IGFueSkgPT4gYXNzZXNzbWVudC5pZCAhPT0gZXZ0LmlkKTtcclxuICAgICAgICBpZihjdXJyZW50W2luZGV4XS5hc3Nlc3NtZW50SWRzLmxlbmd0aCAgPT09IDApICBjdXJyZW50LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgdGhpcy5saXN0QWN0aW9uKGN1cnJlbnQsICdBU1NFU1NNRU5UJyk7XHJcbiAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdGUkFNRVdPUksnIDp7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ2ZyYW1ld29yaycsIG51bGwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlUm9sZShldnQ6IGFueSl7XHJcbiAgICB0aGlzLm9uUmVtb3ZpbmdSb2xlLmVtaXQoZXZ0KTtcclxuICB9XHJcblxyXG5cclxuICAvL2JlbG93IDQgZnVuY3Rpb25zIGNhbiBiZSBlYXNpbHR5IGNvbWJpbmVkIGludG8gb25lIGFzIHRoZXkgZm9sbG93IHNhbWUga2luZCBvZiBwYXR0ZXJuIG9yIGNhbiBiZSBvZmZsb2FkZWQgdG8gYSBleHRlcm5hbCBzZXJ2aWNlXHJcbiAgc2V0RGVmYXVsdEFzc2lnbmVlKGV2dDphbnkpe1xyXG4gICAgaWYoZXZ0Py51c2Vycz8ubGVuZ3RoIHx8IGV2dD8uZ3JvdXBzPy5sZW5ndGgpe1xyXG4gICAgICB0aGlzLmxpc3RzLkRFRkFVTFRfQVNTSUdORUVTID0gdGhpcy51bmlxdWVCeVByb3AoZXZ0Py51c2VycywgJ21lbWJlcl9pZCcpO1xyXG4gICAgICB0aGlzLmxpc3RzLkRFRkFVTFRfQVNTSUdORUVTX0dST1VQID0gdGhpcy51bmlxdWVCeVByb3AoZXZ0Py5ncm91cHMsICdncm91cF9pZCcpO1xyXG5cclxuICAgIH1lbHNle1xyXG4gICAgICB0aGlzLmxpc3RzLkRFRkFVTFRfQVNTSUdORUVTID0gdGhpcy5saXN0cy5BTExfVVNFUjtcclxuICAgICAgdGhpcy5saXN0cy5ERUZBVUxUX0FTU0lHTkVFU19HUk9VUCA9IHRoaXMubGlzdHMuQUxMX0dST1VQO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYXNzaWduZWVNYXAgPSAgZXZ0Py51c2Vycz8ubWFwKChlbGU6YW55KSA9PiBlbGU/Lm1lbWJlcl9pZCk7XHJcbiAgICBsZXQgY3VycmVudERlZmF1bHRBc3NpZ25lZSA9IHRoaXMuY29udHJvbHMucHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlPy52YWx1ZTtcclxuICAgIGN1cnJlbnREZWZhdWx0QXNzaWduZWUgPSBjdXJyZW50RGVmYXVsdEFzc2lnbmVlLmZpbHRlcigoZWxlOmFueSk9PiBhc3NpZ25lZU1hcC5pbmNsdWRlcyhlbGU/Lm1lbWJlcl9pZCkpO1xyXG4gICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fZGVmYXVsdF9hc3NpZ25lZScsIGN1cnJlbnREZWZhdWx0QXNzaWduZWUpO1xyXG4gIH1cclxuXHJcbiAgc2V0RGVmYXVsdEFzc2lnbmVlT25SZW1vdmUoZXZ0OmFueSx0eXBlOmFueSl7XHJcbiAgIHN3aXRjaCh0eXBlKXtcclxuICAgICBjYXNlICdBU1NJR05FRScgOntcclxuICAgICAgIHRoaXMubGlzdHMuREVGQVVMVF9BU1NJR05FRVMgPSB0aGlzLmxpc3RzLkRFRkFVTFRfQVNTSUdORUVTLmZpbHRlcigoZWxlOmFueSkgPT4gZWxlPy5tZW1iZXJfaWQgIT09IGV2dD8ubWVtYmVyX2lkKTtcclxuICAgICAgIGNvbnN0IGRlZmF1bHRBc3NpZ25lZSA9IHRoaXMuY29udHJvbHMucHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlPy52YWx1ZTtcclxuICAgICAgIGNvbnN0IGFzc2lnbmVlID0gZGVmYXVsdEFzc2lnbmVlLmZpbHRlcigoZWxlOmFueSkgPT4gIGVsZT8ubWVtYmVyX2lkICE9PSBldnQ/Lm1lbWJlcl9pZClcclxuICAgICAgIGlmKCFhc3NpZ25lZT8ubGVuZ3RoKXtcclxuICAgICAgICAgdGhpcy5saXN0cy5ERUZBVUxUX0FTU0lHTkVFUyA9IHRoaXMubGlzdHMuQUxMX1VTRVI7XHJcbiAgICAgICB9XHJcbiAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlJywgYXNzaWduZWUpO1xyXG5cclxuXHJcbiAgICAgIGJyZWFrO1xyXG4gICAgIH1cclxuICAgICBjYXNlICdBU1NJR05FRV9HUk9VUCc6e1xyXG4gICAgICB0aGlzLmxpc3RzLkRFRkFVTFRfQVNTSUdORUVTX0dST1VQID0gdGhpcy5saXN0cy5ERUZBVUxUX0FTU0lHTkVFU19HUk9VUC5maWx0ZXIoKGVsZTphbnkpID0+IGVsZT8uZ3JvdXBfaWQgIT09IGV2dD8uZ3JvdXBfaWQpO1xyXG4gICAgICBjb25zdCBkZWZhdWx0QXNzaWduZWVHcm91cCA9IHRoaXMuY29udHJvbHMucHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlX2dyb3VwPy52YWx1ZTtcclxuICAgICAgY29uc3QgYXNzaWduZWVHcm91cCA9IGRlZmF1bHRBc3NpZ25lZUdyb3VwLmZpbHRlcigoZWxlOmFueSkgPT4gIGVsZT8uZ3JvdXBfaWQgIT09IGV2dD8uZ3JvdXBfaWQpXHJcbiAgICAgIGlmKCFhc3NpZ25lZUdyb3VwPy5sZW5ndGgpe1xyXG4gICAgICAgIHRoaXMubGlzdHMuREVGQVVMVF9BU1NJR05FRVNfR1JPVVAgPSB0aGlzLmxpc3RzLkFMTF9HUk9VUDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlX2dyb3VwJywgYXNzaWduZWVHcm91cCk7XHJcbiAgICAgfVxyXG4gICB9XHJcbiAgfVxyXG4gIHNldERlZmF1bHRSZXZpZXdlcihldnQ6YW55KXtcclxuICAgIGlmKGV2dD8udXNlcnM/Lmxlbmd0aCB8fCBldnQ/Lmdyb3Vwcz8ubGVuZ3RoKXtcclxuICAgICAgdGhpcy5saXN0cy5ERUZBVUxUX1JFVklFV0VSUyA9IHRoaXMudW5pcXVlQnlQcm9wKGV2dD8udXNlcnMsICdtZW1iZXJfaWQnKTtcclxuICAgICAgdGhpcy5saXN0cy5ERUZBVUxUX1JFVklFV0VSU19HUk9VUCA9IHRoaXMudW5pcXVlQnlQcm9wKGV2dD8uZ3JvdXBzLCAnZ3JvdXBfaWQnKTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgIHRoaXMubGlzdHMuREVGQVVMVF9SRVZJRVdFUlMgPSB0aGlzLmxpc3RzLkFMTF9VU0VSO1xyXG4gICAgICB0aGlzLmxpc3RzLkRFRkFVTFRfUkVWSUVXRVJTX0dST1VQID0gdGhpcy5saXN0cy5BTExfR1JPVVA7XHJcbiAgICB9XHJcbiAgICBjb25zdCByZXZpZXdlck1hcCA9ICBldnQ/LnVzZXJzPy5tYXAoKGVsZTphbnkpID0+IGVsZT8ubWVtYmVyX2lkKTsgICBcclxuICAgIGxldCBjdXJyZW50RGVmYXVsdFJldmlld2VyID0gdGhpcy5jb250cm9scy5wcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXI/LnZhbHVlOyAgIFxyXG4gICAgY3VycmVudERlZmF1bHRSZXZpZXdlciA9IGN1cnJlbnREZWZhdWx0UmV2aWV3ZXIuZmlsdGVyKChlbGU6YW55KT0+IHJldmlld2VyTWFwLmluY2x1ZGVzKGVsZT8ubWVtYmVyX2lkKSk7XHJcbiAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyJywgY3VycmVudERlZmF1bHRSZXZpZXdlcik7XHJcbiAgfVxyXG4gIHNldERlZmF1bHRPdmVyc2VlcihldnQ6YW55KXtcclxuICAgIGlmKGV2dD8udXNlcnM/Lmxlbmd0aCB8fCBldnQ/Lmdyb3Vwcz8ubGVuZ3RoKXtcclxuICAgICAgdGhpcy5saXN0cy5ERUZBVUxUX09WRVJTRUVSUyA9IHRoaXMudW5pcXVlQnlQcm9wKGV2dD8udXNlcnMsICdtZW1iZXJfaWQnKTtcclxuICAgICAgdGhpcy5saXN0cy5ERUZBVUxUX09WRVJTRUVSU19HUk9VUCA9IHRoaXMudW5pcXVlQnlQcm9wKGV2dD8uZ3JvdXBzLCAnZ3JvdXBfaWQnKTtcclxuXHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5saXN0cy5ERUZBVUxUX09WRVJTRUVSUyA9IHRoaXMubGlzdHMuQUxMX1VTRVI7XHJcbiAgICAgIHRoaXMubGlzdHMuREVGQVVMVF9PVkVSU0VFUlNfR1JPVVAgPSB0aGlzLmxpc3RzLkFMTF9HUk9VUDtcclxuICAgIH1cclxuICAgIGNvbnN0IG92ZXJzZWVyTWFwID0gIGV2dD8udXNlcnM/Lm1hcCgoZWxlOmFueSkgPT4gZWxlPy5tZW1iZXJfaWQpO1xyXG4gICAgbGV0IGN1cnJlbnREZWZhdWx0UmV2aWV3ZXIgPSB0aGlzLmNvbnRyb2xzLnByb2dyYW1fZGVmYXVsdF9vdmVyc2Vlcj8udmFsdWU7XHJcbiAgICBsZXQgY3VycmVudERlZmF1bHRGYWlsUmV2aWV3ZXIgPSB0aGlzLmNvbnRyb2xzLnByb2dyYW1fZGVmYXVsdF9mYWlsZWRfb3ZlcnNlZXI/LnZhbHVlO1xyXG4gICAgY3VycmVudERlZmF1bHRSZXZpZXdlciA9IGN1cnJlbnREZWZhdWx0UmV2aWV3ZXIuZmlsdGVyKChlbGU6YW55KT0+IG92ZXJzZWVyTWFwLmluY2x1ZGVzKGVsZT8ubWVtYmVyX2lkKSk7XHJcbiAgICBjdXJyZW50RGVmYXVsdEZhaWxSZXZpZXdlciA9IGN1cnJlbnREZWZhdWx0UmV2aWV3ZXIuZmlsdGVyKChlbGU6YW55KT0+IG92ZXJzZWVyTWFwLmluY2x1ZGVzKGVsZT8ubWVtYmVyX2lkKSk7XHJcbiAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyJywgY3VycmVudERlZmF1bHRSZXZpZXdlcik7XHJcbiAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2VlcicsIGN1cnJlbnREZWZhdWx0RmFpbFJldmlld2VyKTtcclxuICB9XHJcbiAgc2V0RGVmYXVsdFJldmlld2VyT25SZW1vdmUoZXZ0OmFueSx0eXBlOmFueSl7XHJcbiAgIHN3aXRjaCh0eXBlKXtcclxuICAgICBjYXNlICdSRVZJRVdFUicgOntcclxuICAgICAgIHRoaXMubGlzdHMuREVGQVVMVF9SRVZJRVdFUlMgPSB0aGlzLmxpc3RzLkRFRkFVTFRfUkVWSUVXRVJTLmZpbHRlcigoZWxlOmFueSkgPT4gZWxlPy5tZW1iZXJfaWQgIT09IGV2dD8ubWVtYmVyX2lkKTtcclxuICAgICAgIGNvbnN0IGRlZmF1bHRSZXZpZXdlciA9IHRoaXMuY29udHJvbHMucHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyPy52YWx1ZTtcclxuICAgICAgIGNvbnN0IHJldmlld2VyID0gZGVmYXVsdFJldmlld2VyLmZpbHRlcigoZWxlOmFueSkgPT4gIGVsZT8ubWVtYmVyX2lkICE9PSBldnQ/Lm1lbWJlcl9pZClcclxuICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXInLCByZXZpZXdlcik7XHJcblxyXG4gICAgICBicmVhaztcclxuICAgICB9XHJcbiAgICAgY2FzZSAnUkVWSUVXRVJfR1JPVVAnOntcclxuICAgICAgdGhpcy5saXN0cy5ERUZBVUxUX1JFVklFV0VSU19HUk9VUCA9IHRoaXMubGlzdHMuREVGQVVMVF9SRVZJRVdFUlNfR1JPVVAuZmlsdGVyKChlbGU6YW55KSA9PiBlbGU/Lmdyb3VwX2lkICE9PSBldnQ/Lmdyb3VwX2lkKTtcclxuICAgICAgY29uc3QgZGVmYXVsdFJldmlld2VyR3JvdXAgPSB0aGlzLmNvbnRyb2xzLnByb2dyYW1fZGVmYXVsdF9yZXZpZXdlcl9ncm91cD8udmFsdWU7XHJcbiAgICAgIGNvbnN0IHJldmlld2VyR3JvdXAgPSBkZWZhdWx0UmV2aWV3ZXJHcm91cC5maWx0ZXIoKGVsZTphbnkpID0+ICBlbGU/Lmdyb3VwX2lkICE9PSBldnQ/Lmdyb3VwX2lkKVxyXG4gICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyX2dyb3VwJywgcmV2aWV3ZXJHcm91cCk7XHJcbiAgICAgfVxyXG4gICB9XHJcbiAgfVxyXG4gIHNldERlZmF1bHRPdmVyc2Vlck9uUmVtb3ZlKGV2dDphbnksdHlwZTphbnkpe1xyXG4gICAgc3dpdGNoKHR5cGUpe1xyXG4gICAgICBjYXNlICdPVkVSU0VFUicgOntcclxuICAgICAgICB0aGlzLmxpc3RzLkRFRkFVTFRfT1ZFUlNFRVJTID0gdGhpcy5saXN0cy5ERUZBVUxUX09WRVJTRUVSUy5maWx0ZXIoKGVsZTphbnkpID0+IGVsZT8ubWVtYmVyX2lkICE9PSBldnQ/Lm1lbWJlcl9pZCk7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdE92ZXJzZWVyID0gdGhpcy5jb250cm9scy5wcm9ncmFtX2RlZmF1bHRfb3ZlcnNlZXI/LnZhbHVlO1xyXG4gICAgICAgIGNvbnN0IG92ZXJzZWVyID0gZGVmYXVsdE92ZXJzZWVyLmZpbHRlcigoZWxlOmFueSkgPT4gIGVsZT8ubWVtYmVyX2lkICE9PSBldnQ/Lm1lbWJlcl9pZClcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyJywgb3ZlcnNlZXIpO1xyXG5cclxuICAgICAgICBjb25zdCBkZWZhdWx0RmFpbE92ZXJzZWVyID0gdGhpcy5jb250cm9scy5wcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyPy52YWx1ZTtcclxuICAgICAgICBjb25zdCBvdmVyc2VlckZhaWwgPSBkZWZhdWx0RmFpbE92ZXJzZWVyLmZpbHRlcigoZWxlOmFueSkgPT4gIGVsZT8ubWVtYmVyX2lkICE9PSBldnQ/Lm1lbWJlcl9pZClcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2VlcicsIG92ZXJzZWVyRmFpbCk7XHJcblxyXG4gICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnT1ZFUlNFRVJfR1JPVVAnOntcclxuICAgICAgIHRoaXMubGlzdHMuREVGQVVMVF9PVkVSU0VFUlNfR1JPVVAgPSB0aGlzLmxpc3RzLkRFRkFVTFRfT1ZFUlNFRVJTX0dST1VQLmZpbHRlcigoZWxlOmFueSkgPT4gZWxlPy5ncm91cF9pZCAhPT0gZXZ0Py5ncm91cF9pZCk7XHJcbiAgICAgICBjb25zdCBkZWZhdWx0T3ZlcnNlZXJHcm91cCA9IHRoaXMuY29udHJvbHMucHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyX2dyb3VwPy52YWx1ZTtcclxuICAgICAgIGNvbnN0IG92ZXJzZWVyR3JvdXAgPSBkZWZhdWx0T3ZlcnNlZXJHcm91cC5maWx0ZXIoKGVsZTphbnkpID0+ICBlbGU/Lmdyb3VwX2lkICE9PSBldnQ/Lmdyb3VwX2lkKVxyXG4gICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fZGVmYXVsdF9vdmVyc2Vlcl9ncm91cCcsIG92ZXJzZWVyR3JvdXApO1xyXG5cclxuICAgICAgIGNvbnN0IGRlZmF1bHRPdmVyc2VlckZhaWxlZEdyb3VwID0gdGhpcy5jb250cm9scy5wcm9ncmFtX2RlZmF1bHRfb3ZlcnNlZXJfZ3JvdXA/LnZhbHVlO1xyXG4gICAgICAgY29uc3Qgb3ZlcnNlZXJGYWlsZWRHcm91cCA9IGRlZmF1bHRPdmVyc2VlckZhaWxlZEdyb3VwLmZpbHRlcigoZWxlOmFueSkgPT4gIGVsZT8uZ3JvdXBfaWQgIT09IGV2dD8uZ3JvdXBfaWQpXHJcbiAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2Vlcl9ncm91cCcsIG92ZXJzZWVyRmFpbGVkR3JvdXApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgIH1cclxuXHJcblxyXG5cclxuICBmaWVsZERlc2VsZWN0b3IodHlwZTogYW55KSB7XHJcbiAgICB0aGlzLmFjdGl2ZUxpc3QgPSAnJztcclxuICAgIHRoaXMucGlja2VyQ2hhbmdlZC5lbWl0KGZhbHNlKTtcclxuICAgIHRoaXMubWFya2FzVG91Y2hlZFNlbGVjdG9yKHR5cGUpXHJcbiAgfVxyXG4gIG1hcmthc1RvdWNoZWRTZWxlY3RvcihmaWVsZE5hbWU6YW55KXtcclxuICAgIGNvbnN0IHR5cGVGaWVsZDphbnkgPSB7XHJcbiAgICAgIFJPTEU6J3Byb2dyYW1fcm9sZXMnLFxyXG4gICAgICBBUFBST1ZFUjoncHJvZ3JhbV9hcHByb3ZlcicsXHJcbiAgICAgIE9XTkVSOidwcm9ncmFtX293bmVycycsXHJcbiAgICAgIE9XTkVSX0dST1VQOidwcm9ncmFtX293bmVyc19ncm91cCdcclxuICAgICB9XHJcbiAgICAgdGhpcy5jb250cm9sc1t0eXBlRmllbGRbZmllbGROYW1lXV0/Lm1hcmtBc1RvdWNoZWQoKTtcclxuICB9XHJcblxyXG4gIGZldGNoUm9sZXMoKSB7XHJcbiAgICB0aGlzLnByb2dyYW1TZXJ2aWNlLmdldFJvbGVzKCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5saXN0cy5ST0xFUyA9IHJlcztcclxuICAgICAgICBjb25zdCBkZWZhdWx0U3lzdGVtVmFsID0gdGhpcy5saXN0cz8uUk9MRVM/LmRhdGE/LmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZT8ucm9sZVR5cGUgPT09IFwic3lzdGVtIHJvbGVcIik/Lm1hcCgoZWxlOmFueSkgPT4gZWxlPy5faWQpO1xyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRWYWwgPSB0aGlzLmxpc3RzPy5ST0xFUz8uZGF0YT8uZmlsdGVyKChlbGU6IGFueSkgPT4gZWxlPy5yb2xlVHlwZSA9PT0gXCJzeXN0ZW0gcm9sZVwiKTtcclxuICAgICAgdGhpcy5saXN0cy5TWVNURU1fUk9MRV9JRFMgPSBkZWZhdWx0U3lzdGVtVmFsO1xyXG4gICAgICAgIGlmKHRoaXMubW9kZSAhPT0gJ0VESVQnKXtcclxuICAgICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX3JvbGVzJywgZGVmYXVsdFZhbCk7XHJcbiAgICAgICAgICB0aGlzLmZldGNoVXNlcnNBc3NvY2lhdGVkV2l0aFJvbGVzKCk7XHJcbiAgICAgICAgICB0aGlzLmZldGNoR3JvdXBzQXNzb2NpYXRlZFdpdGhSb2xlcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHsgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgLy9mZXRjaCB0aGUgbGlzdCBvZiByZXNwb25zaWJpbGl0aWVzIGNlbnRlclxyXG4gIGZldGNoUkMoKSB7XHJcbiAgICB0aGlzLnByb2dyYW1TZXJ2aWNlLmdldFJlc3BvbnNpYmlsaXR5Q2VudGVyTGlzdCgpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMubGlzdHMuUkMgPSByZXM7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHsgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG5cclxuICBmZXRjaFVzZXJzQXNzb2NpYXRlZFdpdGhSb2xlcygpIHtcclxuICAgIGNvbnN0IHJvbGVJZHMgPSB0aGlzLmNvbnRyb2xzLnByb2dyYW1fcm9sZXM/LnZhbHVlPy5tYXAoKGVsZTogYW55KSA9PiBlbGU/Ll9pZCk7XHJcbiAgIC8vIGlmIChmZXRjaEFsbCkge1xyXG4gICAgICB0aGlzLnByb2dyYW1TZXJ2aWNlLmZldGNoQWxsUm9sZVVzZXJzKHJvbGVJZHMpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxpc3RzLk9XTkVSUyA9IHJlcztcclxuICAgICAgICAgIHRoaXMubGlzdHMuQVBQUk9WRVJTID0gcmVzO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJyZXNkZWZcIixyZXM/LmRhdGEpXHJcbiAgICAgICAgICBpZighcmVzPy5kYXRhPy5tYXAoKGVsZTphbnkpID0+IGVsZT8ubWVtYmVyX2lkKT8uaW5jbHVkZXModGhpcy5jb250cm9scy5wcm9ncmFtX2FwcHJvdmVyPy52YWx1ZVswXT8ubWVtYmVyX2lkKSl7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2FwcHJvdmVyJywgW10pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoaXMuY29udHJvbHM/LmFsbF91c2VyX2luX3JvbGU/LnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX293bmVycycsIHJlcz8uZGF0YSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldERlZmF1bHRPd25lcnMocmVzPy5kYXRhKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHsgfVxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgZmV0Y2hHcm91cHNBc3NvY2lhdGVkV2l0aFJvbGVzKCl7XHJcbiAgICBjb25zdCByb2xlSWRzID0gdGhpcy5jb250cm9scy5wcm9ncmFtX3JvbGVzPy52YWx1ZT8ubWFwKChlbGU6IGFueSkgPT4gZWxlPy5faWQpO1xyXG4gICAgIHRoaXMucHJvZ3JhbVNlcnZpY2UuZmV0Y2hBbGxSb2xlR3JvdXBzKHJvbGVJZHMpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDoocmVzOmFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5saXN0cy5PV05FUlNfR1JPVVBTID0gcmVzO1xyXG4gICAgICAgICAgY29uc3Qgcm9sZUlkczogQXJyYXk8c3RyaW5nPiAgPSB0aGlzLmNvbnRyb2xzLnByb2dyYW1fcm9sZXM/LnZhbHVlLm1hcCgoZWxlOiBhbnkpID0+IGVsZS5faWQpXHJcbiAgICAgICAgIGNvbnN0IGdyb3VwRGV0YWlscyA9ICB0aGlzLmNvbnRyb2xzLnByb2dyYW1fb3duZXJzX2dyb3VwPy52YWx1ZS5maWx0ZXIoKHJvbGVJZDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmKHJvbGVJZC5yb2xlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICBsZXQgaXNTYW1lUm9sZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHJvbGVJZC5yb2xlcy5mb3JFYWNoKChyb2xlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmKHJvbGVJZHMuaW5jbHVkZXMocm9sZS5yb2xlSWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlzU2FtZVJvbGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgaWYoaXNTYW1lUm9sZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJvbGVJZDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX293bmVyc19ncm91cCcsIGdyb3VwRGV0YWlscyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgfSlcclxuICB9XHJcblxyXG4gIHNldERlZmF1bHRPd25lcnModXNlckxpc3Q6IGFueSkge1xyXG4gICAgY29uc3QgbG9nZ2VkSW51c2VyID0gdGhpcy5jdXJyZW50VXNlcigpO1xyXG4gICAgY29uc3QgZGVmYXVsdE93bmVyID0gdXNlckxpc3QuZmlsdGVyKChlbGU6IGFueSkgPT4gWydBRE1JTicsICdLRVlfQURNSU4nXS5pbmNsdWRlcyhlbGU/LnVzZXJfcm9sZSkgJiYgZWxlPy5tZW1iZXJfaWQgIT0gbG9nZ2VkSW51c2VyPy5tZW1iZXJfaWQpO1xyXG4gICAgdGhpcy5saXN0cy5OT05fUkVNT1ZBQkxFX09XTkVSUyA9IHRoaXMudW5pcXVlQnlQcm9wKFsuLi5bbG9nZ2VkSW51c2VyXSwgLi4uZGVmYXVsdE93bmVyXSwgJ21lbWJlcl9pZCcpO1xyXG4gICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fb3duZXJzJywgdGhpcy5saXN0cy5OT05fUkVNT1ZBQkxFX09XTkVSUyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZmV0Y2hPcmdhbml6YXRpb25Vc2VycyhkYXRhPzogYW55KXtcclxuICAgIHRoaXMubGlzdExvYWRpbmdTdGF0ZS5VU0VSUyA9IHRydWU7XHJcbiAgICB0aGlzLnByb2dyYW1TZXJ2aWNlLmZldGNoQWxsT3JnVXNlcigpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6KHJlczphbnkpPT57XHJcbiAgICAgICAgdGhpcy5saXN0cy5BTExfVVNFUiA9IHJlcztcclxuICAgICAgICB0aGlzLmxpc3RzLkFTU0lHTkVFUyA9IHJlcztcclxuICAgICAgICB0aGlzLmxpc3RzLlJFVklFV0VSUyA9IHJlcztcclxuICAgICAgICB0aGlzLmxpc3RzLk9WRVJTRUVSUyA9IHJlcztcclxuICAgICAgICBpZih0aGlzLm1vZGUgIT09J0VESVQnKXtcclxuICAgICAgICAgIHRoaXMubGlzdHMuREVGQVVMVF9BU1NJR05FRVMgPSByZXM7XHJcbiAgICAgICAgICB0aGlzLmxpc3RzLkRFRkFVTFRfUkVWSUVXRVJTID0gcmVzO1xyXG4gICAgICAgICAgdGhpcy5saXN0cy5ERUZBVUxUX09WRVJTRUVSUyA9IHJlcztcclxuICAgICAgICB9ZWxzZSBpZih0aGlzLm1vZGUgPT09ICdFRElUJyl7XHJcbiAgICAgICAgICAgaWYoIXRoaXMuY29udHJvbHMucHJvZ3JhbV9hc3NpZ25lZT8udmFsdWU/Lmxlbmd0aCl7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdHMuREVGQVVMVF9BU1NJR05FRVMgPSByZXM7XHJcbiAgICAgICAgICAgfVxyXG4gICAgICAgICAgIGlmKCF0aGlzLmNvbnRyb2xzLnByb2dyYW1fcmV2aWV3ZXI/LnZhbHVlPy5sZW5ndGgpe1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RzLkRFRkFVTFRfUkVWSUVXRVJTID0gcmVzO1xyXG4gICAgICAgICAgIH1cclxuICAgICAgICAgICBpZighdGhpcy5jb250cm9scy5wcm9ncmFtX292ZXJzZWVyPy52YWx1ZT8ubGVuZ3RoKXtcclxuICAgICAgICAgICAgdGhpcy5saXN0cy5ERUZBVUxUX09WRVJTRUVSUyA9IHJlcztcclxuICAgICAgICAgICB9ICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5saXN0TG9hZGluZ1N0YXRlLlVTRVJTID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOigpPT57dGhpcy5saXN0TG9hZGluZ1N0YXRlLlVTRVJTID0gZmFsc2U7fVxyXG4gICAgfSlcclxuICB9XHJcblxyXG5cclxuICBmZXRjaE9yZ2FuaXphdGlvbkdyb3VwKGRhdGE/OiBhbnkpe1xyXG4gICAgdGhpcy5wcm9ncmFtU2VydmljZS5mZXRjaENvbXBsaWFuY2VHcm91cHMoKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgbmV4dDoocmVzOmFueSk9PntcclxuICAgICAgICAgdGhpcy5saXN0cy5BTExfR1JPVVAgPSByZXM7XHJcblxyXG4gICAgICAgICB0aGlzLmxpc3RzLkFTU0lHTkVFU19HUk9VUCA9IHJlcztcclxuICAgICAgICAgdGhpcy5saXN0cy5SRVZJRVdFUlNfR1JPVVAgPSByZXM7XHJcblxyXG4gICAgICAgICB0aGlzLmxpc3RzLk9WRVJTRUVSU19HUk9VUCA9IHJlcztcclxuXHJcbiAgICAgICAgIGlmKHRoaXMubW9kZSAhPT0nRURJVCcpe1xyXG4gICAgICAgICAgdGhpcy5saXN0cy5ERUZBVUxUX0FTU0lHTkVFU19HUk9VUCA9IHJlcztcclxuICAgICAgICAgIHRoaXMubGlzdHMuREVGQVVMVF9SRVZJRVdFUlNfR1JPVVAgPSByZXM7XHJcbiAgICAgICAgICB0aGlzLmxpc3RzLkRFRkFVTFRfT1ZFUlNFRVJTX0dST1VQID0gcmVzO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgIGVycm9yOihlcnI6YW55KT0+e31cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBmaWxlVXBsb2FkVHJhY2tlciA9IHtcclxuICAgIGRlc2NyaXB0aW9uOiBbXSxcclxuICAgIG9iamVjdGl2ZTogW11cclxuICB9XHJcblxyXG4gIHNlbGVjdEZpbGUodHlwZTogYW55LCBmaWxlczogYW55KSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBmaWxlcy5sZW5ndGggLSAxOyBpKyspIHtcclxuICAgICAgY29uc3QgbmFtZSA9IGZpbGVzW2ldLmZpbGUubmFtZSA/PyAnJztcclxuICAgICAgdGhpcy51cGxvYWRGaWxlcyh0eXBlLCBmaWxlc1tpXS5maWxlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwbG9hZEZpbGVzKHR5cGU6ICdERVNDUklQVElPTicgfCAnT0JKRUNUSVZFJywgZmlsZTogYW55KSB7XHJcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgZmlsZSk7XHJcbiAgICBjb25zdCBkZXN0aW5hdGlvblN0cmluZyA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uSWQoKS50b1N0cmluZygpO1xyXG4gICAgY29uc3QgZHVtbXlGaWxlID0ge1xyXG4gICAgICBmaWxlX3VybF9wYXRoOiBgJHtmaWxlPy5uYW1lfWAsXHJcbiAgICAgIG5hbWU6IGAke2ZpbGU/Lm5hbWV9YCxcclxuICAgICAgdXBsb2FkaW5nOiB0cnVlLFxyXG4gICAgICBvcmdfZmlsZTogYCR7ZmlsZT8ubmFtZX1gXHJcbiAgICB9XHJcbiAgICBpZiAodHlwZSA9PT0gJ0RFU0NSSVBUSU9OJykge1xyXG4gICAgICBsZXQgZGVzY3JpcHRpb24gPSB0aGlzLmNvbnRyb2xzPy5kZXNjcmlwdGlvbl9hdHRhY2htZW50Py52YWx1ZSA/PyBbXTtcclxuICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fZGVzY3JpcHRpb25fYXR0YWNobWVudHMnLCBbLi4uZGVzY3JpcHRpb24sIC4uLltkdW1teUZpbGVdXSlcclxuICAgICAgdGhpcy5wcm9ncmFtU2VydmljZS51cGxvYWRGaWxlcyhmb3JtRGF0YSwgZGVzdGluYXRpb25TdHJpbmcpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBkZXNjcmlwdGlvbiA9IHRoaXMuY29udHJvbHM/LmRlc2NyaXB0aW9uX2F0dGFjaG1lbnQ/LnZhbHVlID8/IFtdO1xyXG4gICAgICAgICAgbGV0IGRlc2NyaXB0aW9uSW5kZXggPSBkZXNjcmlwdGlvbi5maW5kSW5kZXgoKGVsZTogYW55KSA9PiBlbGU/Lm9yZ19maWxlID09PSByZXM/Lm9yZ19maWxlKTtcclxuICAgICAgICAgIGRlc2NyaXB0aW9uW2Rlc2NyaXB0aW9uSW5kZXhdID0gcmVzXHJcbiAgICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZXNjcmlwdGlvbl9hdHRhY2htZW50cycsIHRoaXMudW5pcXVlQnlQcm9wKGRlc2NyaXB0aW9uLCAnb3JnX2ZpbGUnKSlcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgIGRlc2NyaXB0aW9uID0gdGhpcy5jb250cm9scz8uZGVzY3JpcHRpb25fYXR0YWNobWVudD8udmFsdWUgPz8gW107XHJcbiAgICAgICAgICBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uLmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZT8ub3JnX2ZpbGUgIT09IGZpbGU/Lm5hbWUpO1xyXG4gICAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fZGVzY3JpcHRpb25fYXR0YWNobWVudHMnLCB0aGlzLnVuaXF1ZUJ5UHJvcChkZXNjcmlwdGlvbiwgJ29yZ19maWxlJykpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnT0JKRUNUSVZFJykge1xyXG4gICAgICBsZXQgZGVzY3JpcHRpb24gPSB0aGlzLmNvbnRyb2xzPy5kZXNjcmlwdGlvbl9hdHRhY2htZW50Py52YWx1ZSA/PyBbXTtcclxuICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fZGVzY3JpcHRpb25fYXR0YWNobWVudHMnLCBbLi4uZGVzY3JpcHRpb24sIC4uLltkdW1teUZpbGVdXSlcclxuICAgICAgdGhpcy5wcm9ncmFtU2VydmljZS51cGxvYWRGaWxlcyhmb3JtRGF0YSwgZGVzdGluYXRpb25TdHJpbmcpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBkZXNjcmlwdGlvbiA9IHRoaXMuY29udHJvbHM/LmRlc2NyaXB0aW9uX2F0dGFjaG1lbnQ/LnZhbHVlID8/IFtdO1xyXG4gICAgICAgICAgbGV0IGRlc2NyaXB0aW9uSW5kZXggPSBkZXNjcmlwdGlvbi5maW5kSW5kZXgoKGVsZTogYW55KSA9PiBlbGU/Lm9yZ19maWxlID09PSByZXM/Lm9yZ19maWxlKTtcclxuICAgICAgICAgIGRlc2NyaXB0aW9uW2Rlc2NyaXB0aW9uSW5kZXhdID0gcmVzXHJcbiAgICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZXNjcmlwdGlvbl9hdHRhY2htZW50cycsIHRoaXMudW5pcXVlQnlQcm9wKGRlc2NyaXB0aW9uLCAnb3JnX2ZpbGUnKSlcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgIGRlc2NyaXB0aW9uID0gdGhpcy5jb250cm9scz8uZGVzY3JpcHRpb25fYXR0YWNobWVudD8udmFsdWUgPz8gW107XHJcbiAgICAgICAgICBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uLmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZT8ub3JnX2ZpbGUgIT09IGZpbGU/Lm5hbWUpO1xyXG4gICAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fZGVzY3JpcHRpb25fYXR0YWNobWVudHMnLCB0aGlzLnVuaXF1ZUJ5UHJvcChkZXNjcmlwdGlvbiwgJ29yZ19maWxlJykpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGRlbGV0ZUF0dGFjaG1lbnQodHlwZTogJ0RFU0NSSVBUSU9OJyB8ICdPQkpFQ1RJVkUnLCBmaWxlOiBhbnkpIHtcclxuICAgIGlmICh0eXBlID09PSAnREVTQ1JJUFRJT04nKSB7XHJcbiAgICAgIGxldCBkZXNjcmlwdGlvbiA9IHRoaXMuY29udHJvbHM/LmRlc2NyaXB0aW9uX2F0dGFjaG1lbnQ/LnZhbHVlID8/IFtdO1xyXG4gICAgICBpZiAoZGVzY3JpcHRpb24pIHtcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uLmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZT8ub3JnX2ZpbGUgIT09IGZpbGU/Lm9yZ19maWxlKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZXNjcmlwdGlvbl9hdHRhY2htZW50cycsIGRlc2NyaXB0aW9uKVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdPQkpFQ1RJVkUnKSB7XHJcbiAgICAgIGxldCBvYmplY3RpdmUgPSB0aGlzLmNvbnRyb2xzPy5vYmplY3RpdmVfYXR0YWNobWVudHM/LnZhbHVlID8/IFtdO1xyXG4gICAgICBpZiAob2JqZWN0aXZlKSB7XHJcbiAgICAgICAgb2JqZWN0aXZlID0gb2JqZWN0aXZlLmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZT8ub3JnX2ZpbGUgIT09IGZpbGU/Lm9yZ19maWxlKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZXNjcmlwdGlvbl9hdHRhY2htZW50cycsIG9iamVjdGl2ZSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIHNlbGVjdEFsbFJvbGVPd25lcihldnQ6IGFueSkge1xyXG4gICAgLy9uZWVkIHRvIGZldGNoIGFsbCB0aGUgdXNlcnMgZm9yIGFsbCB0aGUgc2VsZWN0ZWQgcm9sZXNcclxuICAgIGxldCByb2xlSWQgPSBbXTtcclxuICAgIGlmKGV2dD8udGFyZ2V0Py5jaGVja2VkKXtcclxuICAgICAgIHJvbGVJZCA9IHRoaXMuY29udHJvbHMucHJvZ3JhbV9yb2xlcz8udmFsdWU/Lm1hcCgoZWxlOiBhbnkpID0+IGVsZT8uX2lkKTtcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmxvZyhcInRoaXMuY29udHJvbHMucHJvZ3JhbV9yb2xlcz8udmFsdWUgPT0+XCIsIHRoaXMuY29udHJvbHMucHJvZ3JhbV9yb2xlcz8udmFsdWUpO1xyXG4gICAgICByb2xlSWQgPSB0aGlzLmNvbnRyb2xzLnByb2dyYW1fcm9sZXM/LnZhbHVlPy5tYXAoKGVsZTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYoWydrZXkgYWRtaW4nLCAnYWRtaW4nXS5pbmNsdWRlcyhlbGUucm9sZU5hbWUudG9Mb3dlckNhc2UoKSkgKSB7XHJcbiAgICAgICAgICByZXR1cm4gZWxlPy5faWRcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2coXCJ0aGlzLmNvbnRyb2xzLnByb2dyYW1fb3duZXJzPy52YWx1ZSA9PT5cIixyb2xlSWQsICB0aGlzLmNvbnRyb2xzLnByb2dyYW1fb3duZXJzPy52YWx1ZSlcclxuICAgIHRoaXMucHJvZ3JhbVNlcnZpY2UuZmV0Y2hBbGxSb2xlVXNlcnMocm9sZUlkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCB1c2VyID0gdGhpcy51bmlxdWVCeVByb3AoWy4uLnJlcz8uZGF0YV0sICdtZW1iZXJfaWQnKVxyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX293bmVycycsIHVzZXIpO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7IH1cclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcblxyXG5cclxuICAvKipcclxuICAgKiAjIyMjIERlc2NyaXB0aW9uXHJcbiAgICpcclxuICAgKiBSZXR1cm5zIHRoZSB1bmlxdWUgYXJyYXkgb2Ygb2JqZWN0IGJhc2VkIG9uIHVuaXF1ZSBrZXlcclxuICAgKiBAcGFyYW0gYXJyYXlcclxuICAgKiBAcGFyYW0ga2V5XHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICB1bmlxdWVCeVByb3AoYXJyYXk6IGFueSwga2V5OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBBcnJheS5mcm9tKFxyXG4gICAgICBhcnJheVxyXG4gICAgICAgIC5yZWR1Y2UoXHJcbiAgICAgICAgICAoYWNjOiBhbnksIGl0ZW06IGFueSkgPT4gKFxyXG4gICAgICAgICAgICBpdGVtICYmIGl0ZW1ba2V5XSAmJiBhY2Muc2V0KGl0ZW1ba2V5XSwgaXRlbSksXHJcbiAgICAgICAgICAgIGFjY1xyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIG5ldyBNYXAoKVxyXG4gICAgICAgIClcclxuICAgICAgICAudmFsdWVzKClcclxuICAgICk7XHJcbiAgfVxyXG4gIHNldExpc3QobGlzdDogYW55W10sIGlkczogYW55W10sIGtleTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBkYXRhOiBhbnkgPSBbXTtcclxuICAgIGlkcy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgaW5kZXggPSBsaXN0LmZpbmRJbmRleCgobGlzdEVsZW1lbnQ6IGFueSkgPT4gbGlzdEVsZW1lbnRba2V5XSA9PSBlbGVtZW50KTtcclxuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgIGRhdGEucHVzaChsaXN0W2luZGV4XSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gICBzYXZlUHJvZ3JhbSgpe1xyXG4gICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgICBsZXQgcGF5bG9hZCA9ICB0aGlzLnByb2dyYW1TZXJ2aWNlLmJ1aWxkUGF5bG9hZCh0aGlzLnByb2dyYW1Gb3JtLHRoaXMpO1xyXG4gICAgICBpZihwYXlsb2FkICYmIHRoaXMubW9kZSA9PT0gJ0NSRUFURScpe1xyXG4gICAgICB0aGlzLnByb2dyYW1TZXJ2aWNlLnNhdmVQcm9ncmFtKHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6KHJlczphbnkpPT57XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNob3dTbWlsZXkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzU21pbGV5T24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlZFByb2dyYW1JZCA9IHJlcy5faWRcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6KGVycjphbnkpPT57XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnVpS2l0U2VydmljZS5pc1NtaWxleU9uID0gZmFsc2U7XHJcbiAgICAgICAgaWYoZXJyLmVycm9yLm1lc3NhZ2UgPT0gXCJDYXRlZ29yeSBhbHJlYWR5IGV4aXN0LlwiKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRoaXMuaXNOYW1lRXhpc3RzID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgIH1cclxuICAgICAgfSlcclxuICAgfVxyXG4gICBpZihwYXlsb2FkICYmIHRoaXMubW9kZSA9PT0gJ0VESVQnKXtcclxuICAgIHRoaXMucHJvZ3JhbVNlcnZpY2UudXBkYXRlUHJvZ3JhbShwYXlsb2FkLCB0aGlzLnByb2dyYW1JZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDoocmVzOmFueSk9PntcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2hvd1NtaWxleSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy51aUtpdFNlcnZpY2UuaXNTbWlsZXlPbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVkUHJvZ3JhbUlkID0gcmVzLl9pZDtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6KGVycjphbnkpPT57XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnVpS2l0U2VydmljZS5pc1NtaWxleU9uID0gZmFsc2U7XHJcbiAgICAgICAgaWYoZXJyLmVycm9yLm1lc3NhZ2UgPT0gXCJDYXRlZ29yeSBhbHJlYWR5IGV4aXN0LlwiKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRoaXMuaXNOYW1lRXhpc3RzID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiB9XHJcbiAgfVxyXG5cclxuICBhY3Rpb24oZXZlbnQ6IHN0cmluZykge1xyXG4gICAgY29uc29sZS5sb2coZXZlbnQpXHJcbiAgICBzd2l0Y2ggKGV2ZW50KSB7XHJcbiAgICAgIGNhc2UgJ2FkZE1vcmUnOlxyXG4gICAgICAgIHRoaXMucmVzZXRGb3JtKCk7XHJcbiAgICAgICAgdGhpcy5wb3B1bGF0ZU9wdGlvbmFsRmllbGRzKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3ZpZXdQcm9ncmFtJzpcclxuICAgICAgIHRoaXMudmlld1Byb2dyYW1zKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB2aWV3UHJvZ3JhbXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc2Nvbm5lY3RSZWZyZXNoLmVtaXQoZmFsc2UpO1xyXG4gICAgbGV0IHVybDogc3RyaW5nO1xyXG4gICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ob3N0LnN0YXJ0c1dpdGgoJ2xvY2FsaG9zdCcpKSB7XHJcbiAgICAgIHVybCA9ICdodHRwOi8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdXJsID0gJ2h0dHBzOi8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh3aW5kb3cubG9jYXRpb24uaG9zdC5zdGFydHNXaXRoKCdsb2NhbGhvc3QnKSkge1xyXG4gICAgICB1cmwgKz0gJy9wcm9ncmFtLXdvcmtyb29tP2lkPScgKyB0aGlzLmNyZWF0ZWRQcm9ncmFtSWQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB1cmwgKz0gJy9wcm9ncmFtL3Byb2dyYW0td29ya3Jvb20/aWQ9JyArIHRoaXMuY3JlYXRlZFByb2dyYW1JZDtcclxuICAgIH1cclxuXHJcbiAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHVybDtcclxuICAgIGNvbnNvbGUubG9nKFwidGhpcy5jcmVhdGVkUHJvZ3JhbUlkID09PlwiLCB0aGlzLmNyZWF0ZWRQcm9ncmFtSWQpXHJcblxyXG4gIH1cclxuICByZXNldEZvcm0oKXtcclxuICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzU21pbGV5T24gPSBmYWxzZTtcclxuICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20gPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd1NtaWxleSA9IGZhbHNlO1xyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICBjb25zdCAgREVGQVVMVF9WQUxVRVMgPSB7XHJcbiAgICBwcm9ncmFtX3R5cGU6MSxcclxuICAgIHByb2dyYW1fbmFtZTonJyxcclxuICAgIHByb2dyYW1fZGVzY3JpcHRpb246JycsXHJcbiAgICBwcm9ncmFtX2Rlc2NyaXB0aW9uX2F0dGFjaG1lbnRzOltdLFxyXG4gICAgcHJvZ3JhbV9vYmplY3RpdmU6JycsXHJcbiAgICBwcm9ncmFtX29iamVjdGl2ZV9hdHRhY2htZW50czpbXSxcclxuICAgIHByb2dyYW1fcm9sZXM6W10sXHJcbiAgICBhbGxfdXNlcl9pbl9yb2xlOmZhbHNlLFxyXG4gICAgcHJvZ3JhbV9vd25lcnM6W10sXHJcbiAgICBwcm9ncmFtX293bmVyc19ncm91cDpbXSxcclxuICAgIHByb2dyYW1fYXBwcm92ZXI6W10sXHJcbiAgICBwZXJmb3JtYW5jZV9jYWxjdWxhdGlvbjogXCJQQVNUX0VWRU5UXCIsXHJcbiAgICByZWN1cnJpbmdfZnJlcXVlbmN5OmZhbHNlLFxyXG4gICAgbG9ja19zY29wZV9jaGFuZ2U6ZmFsc2UsXHJcbiAgICBmcmFtZXdvcms6W10sXHJcbiAgICByYzpbXSxcclxuICAgIHByb2dyYW1fYXNzaWduZWU6IFtdLFxyXG4gICAgcHJvZ3JhbV9hc3NpZ25lZV9ncm91cDogW10sXHJcbiAgICBwcm9ncmFtX2RlZmF1bHRfYXNzaWduZWU6IFtdLFxyXG4gICAgcHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlX2dyb3VwOiBbXSxcclxuICAgIGFzc2lnbmVlX2NvbXBsZXRpb25fY3JpdGVyaWE6ICdBTllPTkUnLFxyXG4gICAgcHJvZ3JhbV9yZXZpZXdlcjogW10sXHJcbiAgICBwcm9ncmFtX3Jldmlld2VyX2dyb3VwOiBbXSxcclxuICAgIHByb2dyYW1fZGVmYXVsdF9yZXZpZXdlcjogW10sXHJcbiAgICBwcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXJfZ3JvdXA6IFtdLFxyXG4gICAgcmV2aWV3ZXJfY29tcGxldGlvbl9jcml0ZXJpYTogJ1NFUVVFTlRJQUwnLFxyXG4gICAgcHJvZ3JhbV9vdmVyc2VlcjogW10sXHJcbiAgICBwcm9ncmFtX292ZXJzZWVyX2dyb3VwOiBbXSxcclxuICAgIHByb2dyYW1fZGVmYXVsdF9vdmVyc2VlcjogW10sXHJcbiAgICBwcm9ncmFtX2RlZmF1bHRfb3ZlcnNlZXJfZ3JvdXA6IFtdLFxyXG4gICAgcHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2VlcjogW10sXHJcbiAgICBwcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyX2dyb3VwOiBbXSxcclxuICAgIHByb2dyYW1fYXNzZXNzbWVudHM6IFtdLFxyXG4gICAgZXZpZGVuY2VfcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgYWxsb3dfYW55X2ZpbGVfa2V5X2V2aWRlbmNlOiBmYWxzZSxcclxuICAgIGN1c3RvbV9maWVsZHM6IFtdXHJcbiAgIH1cclxuICAgdGhpcy5wcm9ncmFtRm9ybS5yZXNldCgpO1xyXG4gICB0aGlzLnByb2dyYW1Gb3JtLnBhdGNoVmFsdWUoREVGQVVMVF9WQUxVRVMpO1xyXG4gICB0aGlzLmVkaXRvckRhdGEgID0ge1xyXG4gICAgcHJvZ3JhbU9iamVjdGl2ZTogJycsXHJcbiAgICBwcm9ncmFtRGVzY3JpcHRpb246ICcnXHJcbiAgfVxyXG4gIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgIHRoaXMuZmV0Y2hSb2xlcygpO1xyXG4gICB0aGlzLnJlZnJlc2hGb3JtLmVtaXQodHJ1ZSk7XHJcbiAgIHRoaXMuZm9ybS5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ3N0YXJ0JyB9KTtcclxuICB9XHJcblxyXG5cclxuICBjbG9zZVNtaWxleShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnNob3dTbWlsZXkgPSBmYWxzZTtcclxuICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzU21pbGV5T24gPSBmYWxzZTtcclxuICAgIHRoaXMuY2xvc2VXb3JrZmxvdy5lbWl0KHsgZXZ0OiAnJywgY29uZmlybTogZmFsc2UgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgcHJvZ3JhbSBkZXRhaWxzIHdoZW4gdXNlciBpcyB0cnlpbmcgdG8gZWRpdCBwcm9ncmFtXHJcbiAgICovXHJcbiAgZ2V0UHJvZ3JhbURldGFpbHMoKSB7XHJcbiAgICB0aGlzLnByb2dyYW1TZXJ2aWNlLmdldFByb2dyYW0odGhpcy5wcm9ncmFtSWQpLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9uYW1lJywgcmVzPy5uYW1lKTtcclxuICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fdHlwZScsIHJlcz8ucHJvZ3JhbVR5cGUpO1xyXG4gICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9vYmplY3RpdmUnLCByZXM/LnByb2dyYW1fb2JqZWN0aXZlPy50ZXh0KTtcclxuICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ2FsbF91c2VyX2luX3JvbGUnLCByZXM/LmFsbF91c2VyX2luX3JvbGUpO1xyXG4gICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZXNjcmlwdGlvbl9hdHRhY2htZW50cycsIHJlcz8uZGVzY3JpcHRpb24/LmF0dGFjaG1lbnRzKTtcclxuICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fb2JqZWN0aXZlX2F0dGFjaG1lbnRzJywgcmVzPy5wcm9ncmFtX29iamVjdGl2ZT8uYXR0YWNobWVudHMpO1xyXG4gICAgICB0aGlzLnNldEZvcm1GaWVsZCgncGVyZm9ybWFuY2VfY2FsY3VsYXRpb24nLCByZXM/LmNhbGN1bGF0ZV9wYXN0X3VwY29taW5nX2V2ZW50KTtcclxuICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3JlY3VycmluZ19mcmVxdWVuY3knLCByZXM/LnByb2dyYW1fZnJlcXVlbmN5KTtcclxuICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ2xvY2tfc2NvcGVfY2hhbmdlJywgcmVzPy5sb2NrX3Njb3BlKTtcclxuICAgICAgY29uc3QgcmMgPSByZXMucmNfZGV0YWlscy5tYXAoKGVsZTphbnkpID0+IHtyZXR1cm4gey4uLmVsZSxpdGVtX25hbWUgOiBlbGU/LnJjX25hbWUsaXRlbV9pZDogZWxlPy5yY19pZH19KVxyXG4gICAgICB0aGlzLnNldEZvcm1GaWVsZCgncmMnLHJjKTtcclxuICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ2V2aWRlbmNlX3JlcXVpcmVkJywgcmVzPy5ldmlkZW5jZV91cGxvYWRfZmxhZyk7XHJcbiAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdhbGxvd19hbnlfZmlsZV9rZXlfZXZpZGVuY2UnLCByZXM/LmlzX2tleV9ldmlkZW5jZSk7XHJcbiAgICAgIGlmKHJlcz8uZXZpZGVuY2VfdXBsb2FkX2ZsYWcgfHwgcmVzPy5pc19rZXlfZXZpZGVuY2Upe1xyXG4gICAgICAgIHRoaXMuYWRkaXRpb25hbE9wdGlvbi5GT1JNQVRFX0VWSURFTkNFID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnBvcHVsYXRlT3B0aW9uYWxGaWVsZHMoKVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdhc3NpZ25lZV9jb21wbGV0aW9uX2NyaXRlcmlhJywgcmVzLmRlZmF1bHRfYXNzaWduZWVfdHlwZSk7XHJcbiAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdyZXZpZXdlcl9jb21wbGV0aW9uX2NyaXRlcmlhJywgcmVzLmRlZmF1bHRfcmV2aWV3ZXJzX3R5cGUpO1xyXG5cclxuICAgICAgdGhpcy5lZGl0b3JEYXRhLnByb2dyYW1EZXNjcmlwdGlvbiA9IHJlcy5kZXNjcmlwdGlvbj8udGV4dDtcclxuICAgICAgdGhpcy5lZGl0b3JEYXRhLnByb2dyYW1PYmplY3RpdmUgPSByZXMucHJvZ3JhbV9vYmplY3RpdmU/LnRleHQ7XHJcbiAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdmcmFtZXdvcmsnLHsuLi5yZXMuZnJhbWV3b3JrX2RldGFpbHMsLi4ue19pZDpyZXM/LmZyYW1ld29ya19kZXRhaWxzPy5mcmFtZXdvcmtfaWR9fSlcclxuICAgICAgY29uc3Qgcm9sZSA9IHJlcz8ucm9sZXM/Lm1hcCgoZWxlOmFueSkgPT4gIHtyZXR1cm4ge19pZDplbGU/LnJvbGVJZCxyb2xlTmFtZTplbGU/LnJvbGVOYW1lLCBsaWNlbnNlVHlwZTplbGU/LmxpY2Vuc2VUeXBlfX0pXHJcbiAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX3JvbGVzJywgcm9sZSk7XHJcbiAgICAgIGlmKHJlcy5hc3Nlc3NtZW50RGF0YS5sZW5ndGgpIHtcclxuICAgICAgICByZXMuYXNzZXNzbWVudERhdGEgPSByZXMuYXNzZXNzbWVudERhdGEubWFwKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHsuLi5lbGUsIGFzc2Vzc21lbnRJZHM6IGVsZT8uYXNzZXNzbWVudHMubWFwKChhc3Nlc3M6YW55KSA9PiB7IHJldHVybiB7Li4uYXNzZXNzLGlkOmFzc2Vzcz8uX2lkfX0pfX1cclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2Fzc2Vzc21lbnRzJywgcmVzLmFzc2Vzc21lbnREYXRhKTtcclxuICAgICAgICB0aGlzLmFkZGl0aW9uYWxPcHRpb24uQVNTRVNTTUVOVCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wb3B1bGF0ZU9wdGlvbmFsRmllbGRzKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmKHJlcy5jdXN0b21fZmllbGRzLmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdjdXN0b21fZmllbGRzJywgcmVzLmN1c3RvbV9maWVsZHMpO1xyXG4gICAgICAgIHRoaXMuYWRkaXRpb25hbE9wdGlvbi5DVVNUT01fRklFTERTID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnBvcHVsYXRlT3B0aW9uYWxGaWVsZHMoKTtcclxuXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pc0FwcHJvdmVyRGlzYWJsZWQgPSByZXM/LmlzQXBwcm92ZXJEaXNhYmxlZCA/PyBmYWxzZTtcclxuICAgICAgdGhpcy5wb3B1bGF0ZU1lbWJlcnMocmVzKTtcclxuICAgICAgdGhpcy5wb3B1bGF0ZUdyb3VwcyhyZXMpO1xyXG4gICAgICB0aGlzLmZldGNoVXNlcnNBc3NvY2lhdGVkV2l0aFJvbGVzKCk7XHJcbiAgICAgIHRoaXMuZmV0Y2hHcm91cHNBc3NvY2lhdGVkV2l0aFJvbGVzKCk7XHJcbiAgICAgIHRoaXMuZmV0Y2hPcmdhbml6YXRpb25Hcm91cCgpO1xyXG4gICAgICB0aGlzLmZldGNoT3JnYW5pemF0aW9uVXNlcnMoKTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuXHJcbnBvcHVsYXRlTWVtYmVycyhyZXM6YW55KXtcclxuICBjb25zdCBpZHM9IFtcclxuICAgIC4uLm5ldyBTZXQoW1xyXG4gICAgICAuLi4ocmVzPy5vd25lcnMgPz8gW10pLFxyXG4gICAgICAuLi4ocmVzPy5hcHByb3ZlcnMgPz8gW10pLFxyXG4gICAgICAuLi4ocmVzPy5hc3NpZ25lZV9pZHMgPz8gW10pLFxyXG4gICAgICAuLi4ocmVzPy5kZWZhdWx0X2Fzc2lnbmVlX2lkcyA/PyBbXSksXHJcbiAgICAgIC4uLihyZXM/LnJldmlld2VycyA/PyBbXSksXHJcbiAgICAgIC4uLihyZXM/LmRlZmF1bHRfcmV2aWV3ZXJzID8/IFtdKSxcclxuICAgICAgLi4uKHJlcz8ub3ZlcnNlZXJzPy5jY19lbWFpbCA/PyBbXSksXHJcbiAgICAgIC4uLihyZXM/Lm92ZXJzZWVycz8uZmFpbHVyZV9jY19lbWFpbCA/PyBbXSkuZmlsdGVyKChlbGU6YW55KSA9PiBlbGUpLFxyXG4gICAgICAuLi4ocmVzPy5kZWZhdWx0X292ZXJzZWVycz8uY2NfZW1haWwgPz8gW10pLFxyXG4gICAgICAuLi4ocmVzPy5kZWZhdWx0X292ZXJzZWVycz8uZmFpbHVyZV9jY19lbWFpbCA/PyBbXSkuZmlsdGVyKChlbGU6YW55KSA9PiBlbGUpXHJcbiAgICAgXSldXHJcbiAgICAgICB0aGlzLnByb2dyYW1TZXJ2aWNlLmdldE1lbWViZXJCeUlkcyhpZHMpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OihyZXNwb25zZTphbnkpPT57XHJcbiAgICAgICAgICAgIGlmKHJlcy5vd25lcnMgJiYgcmVzPy5vd25lcnM/Lmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgY29uc3Qgb3duZXJzID0gcmVzcG9uc2UuZmlsdGVyKChlbGU6YW55KSA9PiByZXM/Lm93bmVycy5pbmNsdWRlcyhlbGU/Lm1lbWJlcl9pZCkpO1xyXG4gICAgICAgICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9vd25lcnMnLCBvd25lcnMpO1xyXG4gICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihyZXMuYXBwcm92ZXJzICYmIHJlcz8uYXBwcm92ZXJzPy5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgIGNvbnN0IGFwcHJvdmVycyA9IHJlc3BvbnNlLmZpbHRlcigoZWxlOmFueSkgPT4gcmVzPy5hcHByb3ZlcnMuaW5jbHVkZXMoZWxlPy5tZW1iZXJfaWQpKTtcclxuICAgICAgICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9hcHByb3ZlcicsIGFwcHJvdmVycyk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHJlcz8uYXNzaWduZWVfaWRzICYmIHJlcz8uYXNzaWduZWVfaWRzPy5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgIGNvbnN0IGFzc2lnbmVlID0gcmVzcG9uc2UuZmlsdGVyKChlbGU6YW55KSA9PiByZXM/LmFzc2lnbmVlX2lkcy5pbmNsdWRlcyhlbGU/Lm1lbWJlcl9pZCkpO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2Fzc2lnbmVlJywgYXNzaWduZWUpO1xyXG4gICAgICAgICAgICAgIHRoaXMubGlzdHMuREVGQVVMVF9BU1NJR05FRVMgPSBhc3NpZ25lZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihyZXM/LmRlZmF1bHRfYXNzaWduZWVfaWRzICYmIHJlcz8uZGVmYXVsdF9hc3NpZ25lZV9pZHM/Lmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgY29uc3QgYXNzaWduZWUgPSByZXNwb25zZS5maWx0ZXIoKGVsZTphbnkpID0+IHJlcz8uZGVmYXVsdF9hc3NpZ25lZV9pZHMuaW5jbHVkZXMoZWxlPy5tZW1iZXJfaWQpKTtcclxuICAgICAgICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlJywgYXNzaWduZWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHJlcz8ucmV2aWV3ZXJzICYmIHJlcz8ucmV2aWV3ZXJzPy5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgIGNvbnN0IHJldmlld2VycyA9IHJlc3BvbnNlLmZpbHRlcigoZWxlOmFueSkgPT4gcmVzPy5yZXZpZXdlcnMuaW5jbHVkZXMoZWxlPy5tZW1iZXJfaWQpKTtcclxuICAgICAgICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9yZXZpZXdlcicsIHJldmlld2Vycyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5saXN0cy5ERUZBVUxUX1JFVklFV0VSUyA9IHJldmlld2VycztcclxuICAgICAgICAgICAgICB0aGlzLmFkZGl0aW9uYWxPcHRpb24uUkVWSUVXRVIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMucG9wdWxhdGVPcHRpb25hbEZpZWxkcygpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYocmVzPy5kZWZhdWx0X3Jldmlld2VycyAmJiByZXM/LmRlZmF1bHRfcmV2aWV3ZXJzPy5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgIGNvbnN0IHJldmlld2VycyA9IHJlc3BvbnNlLmZpbHRlcigoZWxlOmFueSkgPT4gcmVzPy5kZWZhdWx0X3Jldmlld2Vycy5pbmNsdWRlcyhlbGU/Lm1lbWJlcl9pZCkpO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXInLCByZXZpZXdlcnMpO1xyXG4gICAgICAgICAgICAgIHRoaXMuYWRkaXRpb25hbE9wdGlvbi5SRVZJRVdFUiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZU9wdGlvbmFsRmllbGRzKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihyZXM/Lm92ZXJzZWVycyAmJiByZXM/Lm92ZXJzZWVycz8uY2NfZW1haWw/Lmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjYyA9IHJlc3BvbnNlLmZpbHRlcigoZWxlOmFueSkgPT4gcmVzPy5vdmVyc2VlcnM/LmNjX2VtYWlsLmluY2x1ZGVzKGVsZT8ubWVtYmVyX2lkKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9vdmVyc2VlcicsIGNjKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdHMuREVGQVVMVF9PVkVSU0VFUlMgPSBjYztcclxuICAgICAgICAgICAgICB0aGlzLmFkZGl0aW9uYWxPcHRpb24uT1ZFUlNFRVIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMucG9wdWxhdGVPcHRpb25hbEZpZWxkcygpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKHJlcz8uZGVmYXVsdF9vdmVyc2VlcnMgJiYgKHJlcz8uZGVmYXVsdF9vdmVyc2VlcnM/LmNjX2VtYWlsPy5sZW5ndGggfHwgcmVzPy5kZWZhdWx0X292ZXJzZWVycz8uZmFpbHVyZV9jY19lbWFpbD8ubGVuZ3RoKSl7XHJcbiAgICAgICAgICAgICAgaWYocmVzPy5kZWZhdWx0X292ZXJzZWVycz8uY2NfZW1haWw/Lmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkZWZhdWx0Q0MgPSByZXNwb25zZS5maWx0ZXIoKGVsZTphbnkpID0+IHJlcz8uZGVmYXVsdF9vdmVyc2VlcnM/LmNjX2VtYWlsLmluY2x1ZGVzKGVsZT8ubWVtYmVyX2lkKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyJywgZGVmYXVsdENDKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYocmVzPy5kZWZhdWx0X292ZXJzZWVycz8uZmFpbHVyZV9jY19lbWFpbD8ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZhaWxDQyA9IHJlc3BvbnNlLmZpbHRlcigoZWxlOmFueSkgPT4gcmVzPy5kZWZhdWx0X292ZXJzZWVycz8uZmFpbHVyZV9jY19lbWFpbC5pbmNsdWRlcyhlbGU/Lm1lbWJlcl9pZCkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fZGVmYXVsdF9mYWlsZWRfb3ZlcnNlZXInLCBmYWlsQ0MpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5hZGRpdGlvbmFsT3B0aW9uLk9WRVJTRUVSID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZU9wdGlvbmFsRmllbGRzKClcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgIH0pXHJcbn1cclxuXHJcblxyXG5wb3B1bGF0ZUdyb3VwcyhyZXM6YW55KXtcclxuICBjb25zdCBpZHM9IFtcclxuICAgIC4uLm5ldyBTZXQoW1xyXG4gICAgICAuLi4ocmVzPy5vd25lcnNfZ3JvdXAgPz8gW10pLFxyXG4gICAgICAuLi4ocmVzPy5hc3NpZ25lZV9ncm91cF9pZHMgPz8gW10pLFxyXG4gICAgICAuLi4ocmVzPy5kZWZhdWx0X2Fzc2lnbmVlX2dyb3VwX2lkcyA/PyBbXSksXHJcbiAgICAgXSldXHJcbiAgICAgICB0aGlzLnByb2dyYW1TZXJ2aWNlLmdldE1lbWJlckJ5R3JvdXBzKGlkcykuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6KHJlc3A6YW55KT0+e1xyXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IHJlc3A/LmRhdGE7XHJcbiAgICAgICAgICAgIGlmKHJlcy5vd25lcnNfZ3JvdXAgJiYgcmVzPy5vd25lcnNfZ3JvdXA/Lmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgY29uc3Qgb3duZXJzID0gcmVzcG9uc2UuZmlsdGVyKChlbGU6YW55KSA9PiByZXM/Lm93bmVyc19ncm91cC5pbmNsdWRlcyhlbGU/Lmdyb3VwX2lkKSk7XHJcbiAgICAgICAgICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX293bmVyc19ncm91cCcsIG93bmVycyk7XHJcbiAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHJlcy5hc3NpZ25lZV9ncm91cF9pZHMgJiYgcmVzPy5hc3NpZ25lZV9ncm91cF9pZHM/Lmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgY29uc3QgYXNzaWduZWUgPSByZXNwb25zZS5maWx0ZXIoKGVsZTphbnkpID0+IHJlcz8uYXNzaWduZWVfZ3JvdXBfaWRzLmluY2x1ZGVzKGVsZT8uZ3JvdXBfaWQpKTtcclxuICAgICAgICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9hc3NpZ25lZV9ncm91cCcsIGFzc2lnbmVlKTtcclxuICAgICAgICAgICAgICB0aGlzLmxpc3RzLkRFRkFVTFRfQVNTSUdORUVTX0dST1VQID0gYXNzaWduZWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYocmVzPy5kZWZhdWx0X2Fzc2lnbmVlX2dyb3VwX2lkcyAmJiByZXM/LmRlZmF1bHRfYXNzaWduZWVfZ3JvdXBfaWRzPy5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgIGNvbnN0IGFzc2lnbmVlID0gcmVzcG9uc2UuZmlsdGVyKChlbGU6YW55KSA9PiByZXM/LmRlZmF1bHRfYXNzaWduZWVfZ3JvdXBfaWRzLmluY2x1ZGVzKGVsZT8uZ3JvdXBfaWQpKTtcclxuICAgICAgICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlX2dyb3VwJywgYXNzaWduZWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gQXMgb2Ygbm93IGdyb3VwcyBoYXMgYmVlbiByZW1vdmVkIGZyb20gcmV2aWV3ZXIgYW5kIG92ZXJzZWVlciBpZiB0aGlzIGdyb3VwIGZlYXR1cmUgZ2V0cyBpbmNvcGVyYXRlZCBpblxyXG4gICAgICAgICAgLy9mdXR1cmUgbmVlZCB0byBhZGQgZ3JvdXAgY29uZGl0aW9uIGhlcmUgdG8gcHJlcG9wdWxhdGUgdGhlIGRhdGEgd2hpbGUgZWRpdGluZy5cclxuICAgICAgIH0pXHJcbn1cclxuXHJcblxyXG59XHJcbiJdfQ==
|
|
1186
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctcHJvZ3JhbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92eC13b3JrZmxvdy1lbmdpbmUvc3JjL2xpYi93b3JrZmxvdy1wcm9ncmFtL3dvcmtmbG93LXByb2dyYW0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckgsT0FBTyxFQUFFLFdBQVcsRUFBZSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUU1QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDeEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFPeEMsTUFBTSxPQUFPLHdCQUF3QjtJQTRCbkMsWUFBb0IsRUFBZSxFQUFVLGNBQStCLEVBQVUsV0FBd0IsRUFBUyxZQUF5QjtRQUE1SCxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQVUsbUJBQWMsR0FBZCxjQUFjLENBQWlCO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBUyxpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQTNCaEosY0FBUyxHQUFHLFNBQVMsQ0FBQztRQUd0QixzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFFaEIsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ25DLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNwQyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbkMsMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMzQyxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3ZDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqQyxnQ0FBMkIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2pELG1CQUFjLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFHakUsbUJBQW1CO1FBQ1YsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUNsQixjQUFTLEdBQVcsRUFBRSxDQUFDO1FBQ3ZCLGdCQUFXLEdBQVcsQ0FBQyxDQUFDO1FBRWpDLDhCQUF5QixHQUFHLDRCQUE0QixDQUFDO1FBQ3pELG9CQUFlLEdBQUcsaUJBQWlCLENBQUM7UUFDcEMsdUJBQWtCLEdBQUcsb0JBQW9CLENBQUM7UUFDMUMsdUJBQWtCLEdBQUcsb0JBQW9CLENBQUM7UUFDMUMsdUJBQWtCLEdBQUcsa0JBQWtCLENBQUE7UUFDdkMsdUJBQWtCLEdBQVksS0FBSyxDQUFDO1FBYXJDLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFDZixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLGtCQUFhLEdBQUc7WUFDZixFQUFFLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUU7WUFDdEUsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRTtTQUNyRSxDQUFDO1FBQ0Ysa0JBQWEsR0FBRyxpQkFBaUIsQ0FBQztRQUNsQyxxQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDcEIscUJBQWdCLEdBQVksSUFBSSxDQUFDO1FBQ2pDLGlCQUFZLEdBQVcsS0FBSyxDQUFDO1FBQzdCLGlDQUFpQztRQUNqQyxnQkFBVyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQzFCLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdGLFlBQVksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDckUsbUJBQW1CLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDekIsK0JBQStCLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDckMsaUJBQWlCLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDeEIsOEVBQThFO1lBQzdFLDZCQUE2QixFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ25DLGFBQWEsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDbkUsZ0JBQWdCLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDekIsY0FBYyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUNwRSxvQkFBb0IsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUMxQixnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUN0Qix1QkFBdUIsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM5RCxtQkFBbUIsRUFBRSxDQUFDLElBQUksRUFBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNqRCxpQkFBaUIsRUFBRSxDQUFDLEtBQUssRUFBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNoRCxTQUFTLEVBQUUsRUFBRTtZQUNiLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNSLGdCQUFnQixFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3RCLHNCQUFzQixFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzVCLHdCQUF3QixFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzlCLDhCQUE4QixFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3BDLDRCQUE0QixFQUFFLENBQUMsUUFBUSxDQUFDO1lBQ3hDLGdCQUFnQixFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3RCLHNCQUFzQixFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzVCLHdCQUF3QixFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzlCLDhCQUE4QixFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3BDLDRCQUE0QixFQUFFLENBQUMsWUFBWSxDQUFDO1lBQzVDLGdCQUFnQixFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3RCLHNCQUFzQixFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzVCLHdCQUF3QixFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzlCLDhCQUE4QixFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3BDLCtCQUErQixFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3JDLHFDQUFxQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzNDLG1CQUFtQixFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3pCLGlCQUFpQixFQUFFLENBQUMsS0FBSyxDQUFDO1lBQzFCLDJCQUEyQixFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ3BDLGFBQWEsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNuQixhQUFhLEVBQUUsQ0FBQztTQUNqQixDQUFDLENBQUM7UUFFSCx1Q0FBdUM7UUFFdEMsdUJBQWtCLEdBQUcsSUFBSSxDQUFDO1FBQzNCLHNJQUFzSTtRQUN0SSxlQUFVLEdBQUc7WUFDWCxnQkFBZ0IsRUFBRSxFQUFFO1lBQ3BCLGtCQUFrQixFQUFFLEVBQUU7U0FDdkIsQ0FBQTtRQW9DRCxhQUFRLEdBQVE7WUFDZCxZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDO1lBQ2xELFlBQVksRUFBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUM7WUFDakQsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUM7WUFDNUQsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQztZQUNwRCxjQUFjLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUM7WUFDdEQsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUM7WUFDbEUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUM7WUFDMUQsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUM7WUFDMUQsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsaUNBQWlDLENBQUM7WUFDL0UscUJBQXFCLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsK0JBQStCLENBQUM7WUFDNUUsdUJBQXVCLEVBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUM7WUFDdkUsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUM7WUFDaEUsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUM7WUFDNUQsRUFBRSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztZQUM5QixpQkFBaUIsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQztZQUM1RCxTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDO1lBQzVDLDJCQUEyQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLDZCQUE2QixDQUFDO1lBQ2hGLGdCQUFnQixFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDO1lBQ3pELHNCQUFzQixFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDO1lBQ3JFLHdCQUF3QixFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDO1lBQ3pFLDhCQUE4QixFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxDQUFDO1lBQ3JGLDRCQUE0QixFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLDhCQUE4QixDQUFDO1lBQ2pGLHdCQUF3QixFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDO1lBQ3pFLDhCQUE4QixFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxDQUFDO1lBQ3JGLGdCQUFnQixFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDO1lBQ3pELHNCQUFzQixFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDO1lBQ3JFLGdCQUFnQixFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDO1lBQ3pELHNCQUFzQixFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDO1lBQ3JFLHdCQUF3QixFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDO1lBQ3pFLDhCQUE4QixFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxDQUFDO1lBQ3JGLCtCQUErQixFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxDQUFDO1lBQ3ZGLHFDQUFxQyxFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMs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TTswQ0FDTixNQUFNOzZCQUNOLE1BQU07bUJBSU4sS0FBSzt3QkFDTCxLQUFLOzBCQUNMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBjbG9uZURlZXAsIGlzRXF1YWwgfSBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgeyBEYXRlUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnbmcyLWRhdGUtcGlja2VyJztcclxuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRha2UgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcm9ncmFtc1NlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9wcm9ncmFtcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVWlLaXRTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvdWkta2l0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDT05TVEFOVFMgfSBmcm9tICcuL2NvbnN0YW50cyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC13b3JrZmxvdy1wcm9ncmFtJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vd29ya2Zsb3ctcHJvZ3JhbS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vd29ya2Zsb3ctcHJvZ3JhbS5jb21wb25lbnQubGVzcycsICcuLi9mb3Jtcy5sZXNzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFdvcmtmbG93UHJvZ3JhbUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgY29uc3RhbnRzID0gQ09OU1RBTlRTO1xyXG4gIHNob3dDb25maXJtYXRpb246IGFueTtcclxuICBAVmlld0NoaWxkKCdmb3JtJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGZvcm0gITogRWxlbWVudFJlZjtcclxuICBkYXRlUGlja2VyT3ZlcmxheSA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoJ2RhdGVQaWNrZXInKSBkYXRlUGlja2VyITogRGF0ZVBpY2tlckNvbXBvbmVudDtcclxuICBAT3V0cHV0KCkgcGlja2VyQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcG9wdWxhdGVPcHRpb24gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNsb3NlV29ya2Zsb3cgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHNob3dDb25maXJtYXRpb25BbGVydCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZGlzY29ubmVjdFJlZnJlc2ggPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHJlZnJlc2hGb3JtID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBoaWRlRWxlbWVudHNGcm9tTW9yZU9wdGlvbnMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uUmVtb3ZpbmdSb2xlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBzY3JvbGxUb0JvdHRvbSE6IGJvb2xlYW47XHJcblxyXG4gIC8vIEFsbCBJbnB1dCBmaWVsZHNcclxuICBASW5wdXQoKSBtb2RlOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBwcm9ncmFtSWQ6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIHByb2dyYW1UeXBlOiBudW1iZXIgPSAxO1xyXG5cclxuICBwYW5lbFRpdGxlRGVmYXVsdFJldmlld2VyID0gXCJTZWxlY3QgRGVmYXVsdCBSZXZpZXdlcihzKVwiO1xyXG4gIHBhbmVsVGl0bGVPd25lciA9IFwiU2VsZWN0IE93bmVyKHMpXCI7XHJcbiAgcGFuZWxUaXRsZVJldmlld2VyID0gXCJTZWxlY3QgUmV2aWV3ZXIocylcIjtcclxuICBwYW5lbFRpdGxlQXNzaWduZWUgPSBcIlNlbGVjdCBBc3NpZ25lZShzKVwiO1xyXG4gIHBhbmVsVGl0bGVBcHByb3ZlciA9IFwiU2VsZWN0ICBBcHByb3ZlclwiXHJcbiAgaXNBcHByb3ZlckRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLCBwcml2YXRlIHByb2dyYW1TZXJ2aWNlOiBQcm9ncmFtc1NlcnZpY2UsIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLHByaXZhdGUgdWlLaXRTZXJ2aWNlOlVpS2l0U2VydmljZSkgeyB9XHJcbiAgcHVibGljIG5vV2hpdGVzcGFjZVZhbGlkYXRvcihjb250cm9sOiBGb3JtQ29udHJvbCkge1xyXG4gICAgY29uc3QgaXNXaGl0ZXNwYWNlID0gKGNvbnRyb2wudmFsdWUgfHwgJycpLnRyaW0oKS5sZW5ndGggPT09IDA7XHJcbiAgICBjb25zdCBpc1ZhbGlkID0gIWlzV2hpdGVzcGFjZTtcclxuICAgIHJldHVybiBpc1ZhbGlkID8gbnVsbCA6IHsgJ3doaXRlc3BhY2UnOiB0cnVlIH07XHJcbiAgfVxyXG4gIHB1YmxpYyBibGFua0FycmF5VmFsaWRhdG9yKGNvbnRyb2w6IEZvcm1Db250cm9sKSB7XHJcbiAgICBjb25zdCBpc0JsYW5rID0gY29udHJvbC52YWx1ZT8uZmlsdGVyKChlbGU6YW55KT0+IGVsZSk/Lmxlbmd0aCA9PT0gMDtcclxuICAgIGNvbnN0IGlzVmFsaWQgPSAhaXNCbGFuaztcclxuICAgIHJldHVybiBpc1ZhbGlkID8gbnVsbCA6IHsgJ2JsYW5rJzogdHJ1ZSB9O1xyXG4gIH1cclxuIGxvYWRlciA9IGZhbHNlO1xyXG4gc2hvd1NtaWxleSA9IGZhbHNlO1xyXG4gYWN0aW9uQnV0dG9ucyA9IFtcclxuICB7IGJ1dHRvblRleHQ6ICdBZGQgTW9yZSBQcm9ncmFtcycsIGNsYXNzOiAnd2hpdGUtYnRuJywgaWQ6ICdhZGRNb3JlJyB9LFxyXG4gIHsgYnV0dG9uVGV4dDogJ1ZpZXcgUHJvZ3JhbScsIGNsYXNzOiAnYmx1ZS1idG4nLCBpZDogJ3ZpZXdQcm9ncmFtJyB9LFxyXG5dO1xyXG5zbWlsZXlNZXNzYWdlID0gYFlvdSdyZSBBbGwgU2V0IWA7XHJcbmNyZWF0ZWRQcm9ncmFtSWQgPSAnJztcclxuICBpc09iamVjdGl2ZVZhbGlkOiBib29sZWFuID0gdHJ1ZTtcclxuICBpc05hbWVFeGlzdHM6IGJvb2xlYW4gPWZhbHNlO1xyXG4gIC8vZm9ybSBib2R5IGZvciBwcm9ncmFtIG1ldGEgZGF0YVxyXG4gIHByb2dyYW1Gb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICBwcm9ncmFtX3R5cGU6IFt0aGlzLnByb2dyYW1UeXBlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW4oMCksIFZhbGlkYXRvcnMubWF4KDMpXV0sXHJcbiAgICBwcm9ncmFtX25hbWU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIHRoaXMubm9XaGl0ZXNwYWNlVmFsaWRhdG9yXV0sXHJcbiAgICBwcm9ncmFtX2Rlc2NyaXB0aW9uOiBbJyddLFxyXG4gICAgcHJvZ3JhbV9kZXNjcmlwdGlvbl9hdHRhY2htZW50czogW1tdXSxcclxuICAgIHByb2dyYW1fb2JqZWN0aXZlOiBbJyddLFxyXG4gICAvLyBwcm9ncmFtX29iamVjdGl2ZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgdGhpcy5ub1doaXRlc3BhY2VWYWxpZGF0b3JdXSxcclxuICAgIHByb2dyYW1fb2JqZWN0aXZlX2F0dGFjaG1lbnRzOiBbW11dLFxyXG4gICAgcHJvZ3JhbV9yb2xlczogW1tdLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCx0aGlzLmJsYW5rQXJyYXlWYWxpZGF0b3JdXSxcclxuICAgIGFsbF91c2VyX2luX3JvbGU6IFtmYWxzZV0sXHJcbiAgICBwcm9ncmFtX293bmVyczogW1tdLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCx0aGlzLmJsYW5rQXJyYXlWYWxpZGF0b3JdXSxcclxuICAgIHByb2dyYW1fb3duZXJzX2dyb3VwIDpbW11dLFxyXG4gICAgcHJvZ3JhbV9hcHByb3ZlcjogW1tdXSxcclxuICAgIHBlcmZvcm1hbmNlX2NhbGN1bGF0aW9uOiBbJ1BBU1RfRVZFTlQnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgcmVjdXJyaW5nX2ZyZXF1ZW5jeTogW3RydWUsW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgIGxvY2tfc2NvcGVfY2hhbmdlOiBbZmFsc2UsW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgIGZyYW1ld29yazogW10sXHJcbiAgICByYzogW1tdXSxcclxuICAgIHByb2dyYW1fYXNzaWduZWU6IFtbXV0sXHJcbiAgICBwcm9ncmFtX2Fzc2lnbmVlX2dyb3VwOiBbW11dLFxyXG4gICAgcHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlOiBbW11dLFxyXG4gICAgcHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlX2dyb3VwOiBbW11dLFxyXG4gICAgYXNzaWduZWVfY29tcGxldGlvbl9jcml0ZXJpYTogWydBTllPTkUnXSxcclxuICAgIHByb2dyYW1fcmV2aWV3ZXI6IFtbXV0sXHJcbiAgICBwcm9ncmFtX3Jldmlld2VyX2dyb3VwOiBbW11dLFxyXG4gICAgcHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyOiBbW11dLFxyXG4gICAgcHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyX2dyb3VwOiBbW11dLFxyXG4gICAgcmV2aWV3ZXJfY29tcGxldGlvbl9jcml0ZXJpYTogWydTRVFVRU5USUFMJ10sXHJcbiAgICBwcm9ncmFtX292ZXJzZWVyOiBbW11dLFxyXG4gICAgcHJvZ3JhbV9vdmVyc2Vlcl9ncm91cDogW1tdXSxcclxuICAgIHByb2dyYW1fZGVmYXVsdF9vdmVyc2VlcjogW1tdXSxcclxuICAgIHByb2dyYW1fZGVmYXVsdF9vdmVyc2Vlcl9ncm91cDogW1tdXSxcclxuICAgIHByb2dyYW1fZGVmYXVsdF9mYWlsZWRfb3ZlcnNlZXI6IFtbXV0sXHJcbiAgICBwcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyX2dyb3VwOiBbW11dLFxyXG4gICAgcHJvZ3JhbV9hc3Nlc3NtZW50czogW1tdXSxcclxuICAgIGV2aWRlbmNlX3JlcXVpcmVkOiBbZmFsc2VdLFxyXG4gICAgYWxsb3dfYW55X2ZpbGVfa2V5X2V2aWRlbmNlOiBbZmFsc2VdLFxyXG4gICAgY3VzdG9tX2ZpZWxkczogW1tdXSxcclxuICAgIHByb2dyYW1fc3RhdGU6IDAsXHJcbiAgfSk7XHJcblxyXG4gIC8vZXhjZXB0aW9uYWwgaGFuZGxpbmcgb2YgY3VzdG9tIGZpZWxkc1xyXG5cclxuICAgc2hvd0FkZEN1c3RvbUZpZWxkID0gdHJ1ZTtcclxuICAvL1Byb2dyYW0gb2JqZWN0aXZlIGFuZCBkZXNjcmlwaW9uIGFyZSBleHBsZWN0bHkgZGVjbGFyZWQgYXMgdGhleSBhcmUgdXNpbmcgbWFyeCBlZGl0b3Igd2hpY2ggZG9lcyBub3Qgc3VwcG9ydHMgUmVhY3RpdmUgZm9ybXMgYmluZGluZ1xyXG4gIGVkaXRvckRhdGEgPSB7XHJcbiAgICBwcm9ncmFtT2JqZWN0aXZlOiAnJyxcclxuICAgIHByb2dyYW1EZXNjcmlwdGlvbjogJydcclxuICB9XHJcblxyXG4gIHNlbGVjdGVkQXNzZXNzbWVudCE6IGFueTtcclxuXHJcblxyXG5cclxuICBjdXJyZW50VXNlcigpIHtcclxuICAgIGNvbnN0IHVzZXIgPSB0aGlzLmF1dGhTZXJ2aWNlLnRva2VuSW5mbygpXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBtZW1iZXJfZW1haWw6IHVzZXI/LmVtYWlsLFxyXG4gICAgICBtZW1iZXJfaWQ6IHVzZXI/LmlkLFxyXG4gICAgICBtZW1iZXJfbmFtZTogdXNlcj8ubmFtZSxcclxuICAgICAgdXNlcl9yb2xlOiBcIkxPR0dFRF9JTlwiLFxyXG4gICAgICBfaWQ6IFwiXCJcclxuICAgIH1cclxuXHJcbiAgfVxyXG4gIC8vU2V0cyB0aGUgdmFsdWUgb2YgYSBmb3JtIGNvbnRyb2xcclxuICBzZXRGb3JtRmllbGQoY29udHJvbE5hbWU6IHN0cmluZywgdmFsdWU6IGFueSwgaXNGcm9tRm9ybT86IGJvb2xlYW4pIHtcclxuICAgIGxldCBwYXRjaDogYW55ID0ge307XHJcbiAgICBwYXRjaFtjb250cm9sTmFtZV0gPSB2YWx1ZTtcclxuICAgIHRoaXMucHJvZ3JhbUZvcm0ucGF0Y2hWYWx1ZShwYXRjaCk7XHJcbiAgICB0aGlzLmNvbnRyb2xzW2NvbnRyb2xOYW1lXT8ubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgaWYoaXNGcm9tRm9ybSAmJiBjb250cm9sTmFtZSA9PT0gJ3Byb2dyYW1fb2JqZWN0aXZlJyAmJiAhdmFsdWUucmVwbGFjZSgvJm5ic3A7L2csICcgJykudHJpbSgpKSB0aGlzLmlzT2JqZWN0aXZlVmFsaWQgPSBmYWxzZTtcclxuICAgIGVsc2UgdGhpcy5pc09iamVjdGl2ZVZhbGlkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vUmV0dXJucyB3ZWF0aGVyIHRoZSBmb3JtIGlzIHZhbGlkIG9yIG5vdFxyXG4gIGdldCBmb3JtVmFsaWQoKSB7XHJcbiAgICBpZiAodGhpcy5wcm9ncmFtRm9ybS52YWxpZCAmJiB0aGlzLmVkaXRvckRhdGE/LnByb2dyYW1PYmplY3RpdmU/LnJlcGxhY2UoLyZuYnNwOy9nLCAnICcpPy50cmltKCk/Lmxlbmd0aCApIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb250cm9sczogYW55ID0ge1xyXG4gICAgcHJvZ3JhbV9uYW1lOiB0aGlzLnByb2dyYW1Gb3JtLmdldCgncHJvZ3JhbV9uYW1lJyksXHJcbiAgICBwcm9ncmFtX3R5cGU6dGhpcy5wcm9ncmFtRm9ybS5nZXQoJ3Byb2dyYW1fdHlwZScpLFxyXG4gICAgcHJvZ3JhbV9vYmplY3RpdmU6IHRoaXMucHJvZ3JhbUZvcm0uZ2V0KCdwcm9ncmFtX29iamVjdGl2ZScpLFxyXG4gICAgcHJvZ3JhbV9yb2xlczogdGhpcy5wcm9ncmFtRm9ybS5nZXQoJ3Byb2dyYW1fcm9sZXMnKSxcclxuICAgIHByb2dyYW1fb3duZXJzOiB0aGlzLnByb2dyYW1Gb3JtLmdldCgncHJvZ3JhbV9vd25lcnMnKSxcclxuICAgIHByb2dyYW1fb3duZXJzX2dyb3VwOiB0aGlzLnByb2dyYW1Gb3JtLmdldCgncHJvZ3JhbV9vd25lcnNfZ3JvdXAnKSxcclxuICAgIGFsbF91c2VyX2luX3JvbGU6IHRoaXMucHJvZ3JhbUZvcm0uZ2V0KCdhbGxfdXNlcl9pbl9yb2xlJyksXHJcbiAgICBwcm9ncmFtX2FwcHJvdmVyOiB0aGlzLnByb2dyYW1Gb3JtLmdldCgncHJvZ3JhbV9hcHByb3ZlcicpLFxyXG4gICAgZGVzY3JpcHRpb25fYXR0YWNobWVudDogdGhpcy5wcm9ncmFtRm9ybS5nZXQoJ3Byb2dyYW1fZGVzY3JpcHRpb25fYXR0YWNobWVudHMnKSxcclxuICAgIG9iamVjdGl2ZV9hdHRhY2htZW50czogdGhpcy5wcm9ncmFtRm9ybS5nZXQoJ3Byb2dyYW1fb2JqZWN0aXZlX2F0dGFjaG1lbnRzJyksXHJcbiAgICBwZXJmb3JtYW5jZV9jYWxjdWxhdGlvbjp0aGlzLnByb2dyYW1Gb3JtLmdldCgncGVyZm9ybWFuY2VfY2FsY3VsYXRpb24nKSxcclxuICAgIHJlY3VycmluZ19mcmVxdWVuY3k6IHRoaXMucHJvZ3JhbUZvcm0uZ2V0KCdyZWN1cnJpbmdfZnJlcXVlbmN5JyksXHJcbiAgICBsb2NrX3Njb3BlX2NoYW5nZTogdGhpcy5wcm9ncmFtRm9ybS5nZXQoJ2xvY2tfc2NvcGVfY2hhbmdlJyksXHJcbiAgICByYzogdGhpcy5wcm9ncmFtRm9ybS5nZXQoJ3JjJyksXHJcbiAgICBldmlkZW5jZV9yZXF1aXJlZDogdGhpcy5wcm9ncmFtRm9ybS5nZXQoJ2V2aWRlbmNlX3JlcXVpcmVkJyksXHJcbiAgICBmcmFtZXdvcms6IHRoaXMucHJvZ3JhbUZvcm0uZ2V0KCdmcmFtZXdvcmsnKSxcclxuICAgIGFsbG93X2FueV9maWxlX2tleV9ldmlkZW5jZTogdGhpcy5wcm9ncmFtRm9ybS5nZXQoJ2FsbG93X2FueV9maWxlX2tleV9ldmlkZW5jZScpLFxyXG4gICAgcHJvZ3JhbV9hc3NpZ25lZTp0aGlzLnByb2dyYW1Gb3JtLmdldCgncHJvZ3JhbV9hc3NpZ25lZScpLFxyXG4gICAgcHJvZ3JhbV9hc3NpZ25lZV9ncm91cDp0aGlzLnByb2dyYW1Gb3JtLmdldCgncHJvZ3JhbV9hc3NpZ25lZV9ncm91cCcpLFxyXG4gICAgcHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlOnRoaXMucHJvZ3JhbUZvcm0uZ2V0KCdwcm9ncmFtX2RlZmF1bHRfYXNzaWduZWUnKSxcclxuICAgIHByb2dyYW1fZGVmYXVsdF9hc3NpZ25lZV9ncm91cDp0aGlzLnByb2dyYW1Gb3JtLmdldCgncHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlX2dyb3VwJyksXHJcbiAgICBhc3NpZ25lZV9jb21wbGV0aW9uX2NyaXRlcmlhOnRoaXMucHJvZ3JhbUZvcm0uZ2V0KCdhc3NpZ25lZV9jb21wbGV0aW9uX2NyaXRlcmlhJyksXHJcbiAgICBwcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXI6dGhpcy5wcm9ncmFtRm9ybS5nZXQoJ3Byb2dyYW1fZGVmYXVsdF9yZXZpZXdlcicpLFxyXG4gICAgcHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyX2dyb3VwOnRoaXMucHJvZ3JhbUZvcm0uZ2V0KCdwcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXJfZ3JvdXAnKSxcclxuICAgIHByb2dyYW1fcmV2aWV3ZXI6dGhpcy5wcm9ncmFtRm9ybS5nZXQoJ3Byb2dyYW1fcmV2aWV3ZXInKSxcclxuICAgIHByb2dyYW1fcmV2aWV3ZXJfZ3JvdXA6dGhpcy5wcm9ncmFtRm9ybS5nZXQoJ3Byb2dyYW1fcmV2aWV3ZXJfZ3JvdXAnKSxcclxuICAgIHByb2dyYW1fb3ZlcnNlZXI6dGhpcy5wcm9ncmFtRm9ybS5nZXQoJ3Byb2dyYW1fb3ZlcnNlZXInKSxcclxuICAgIHByb2dyYW1fb3ZlcnNlZXJfZ3JvdXA6dGhpcy5wcm9ncmFtRm9ybS5nZXQoJ3Byb2dyYW1fb3ZlcnNlZXJfZ3JvdXAnKSxcclxuICAgIHByb2dyYW1fZGVmYXVsdF9vdmVyc2Vlcjp0aGlzLnByb2dyYW1Gb3JtLmdldCgncHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyJyksXHJcbiAgICBwcm9ncmFtX2RlZmF1bHRfb3ZlcnNlZXJfZ3JvdXA6dGhpcy5wcm9ncmFtRm9ybS5nZXQoJ3Byb2dyYW1fZGVmYXVsdF9vdmVyc2Vlcl9ncm91cCcpLFxyXG4gICAgcHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2Vlcjp0aGlzLnByb2dyYW1Gb3JtLmdldCgncHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2VlcicpLFxyXG4gICAgcHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2Vlcl9ncm91cDp0aGlzLnByb2dyYW1Gb3JtLmdldCgncHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2Vlcl9ncm91cCcpLFxyXG4gICAgcmV2aWV3ZXJfY29tcGxldGlvbl9jcml0ZXJpYSA6IHRoaXMucHJvZ3JhbUZvcm0uZ2V0KCdyZXZpZXdlcl9jb21wbGV0aW9uX2NyaXRlcmlhJyksXHJcbiAgICBwcm9ncmFtX2Fzc2Vzc21lbnRzOiB0aGlzLnByb2dyYW1Gb3JtLmdldCgncHJvZ3JhbV9hc3Nlc3NtZW50cycpLFxyXG4gICAgY3VzdG9tX2ZpZWxkczogdGhpcy5wcm9ncmFtRm9ybS5nZXQoJ2N1c3RvbV9maWVsZHMnKSxcclxuICAgIGlzQXBwcm92ZXJEaXNhYmxlZDogdGhpcy5wcm9ncmFtRm9ybS5nZXQoJ2lzQXBwcm92ZXJEaXNhYmxlZCcpLFxyXG4gIH1cclxuXHJcbiAgbGlzdHM6IGFueSA9IHtcclxuICAgIFJPTEVTOiBbXSxcclxuICAgIE9XTkVSUzogW10sXHJcbiAgICBPV05FUlNfR1JPVVBTOltdLFxyXG4gICAgQVBQUk9WRVJTOltdLFxyXG4gICAgUkVWSUVXRVJTOiBbXSxcclxuICAgIFJFVklFV0VSU19HUk9VUDpbXSxcclxuICAgIEFTU0lHTkVFUzogW10sXHJcbiAgICBBU1NJR05FRVNfR1JPVVAgOltdLFxyXG4gICAgREVGQVVMVF9BU1NJR05FRVM6W10sXHJcbiAgICBERUZBVUxUX0FTU0lHTkVFU19HUk9VUDpbXSxcclxuICAgIERFRkFVTFRfUkVWSUVXRVJTOltdLFxyXG4gICAgREVGQVVMVF9SRVZJRVdFUlNfR1JPVVA6W10sXHJcbiAgICBPVkVSU0VFUlM6IFtdLFxyXG4gICAgT1ZFUlNFRVJTX0dST1VQOltdLFxyXG4gICAgREVGQVVMVF9PVkVSU0VFUlM6IFtdLFxyXG4gICAgREVGQVVMVF9PVkVSU0VFUlNfR1JPVVA6W10sXHJcbiAgICBSQzogW10sXHJcbiAgICBOT05fUkVNT1ZBQkxFX09XTkVSUzogW10sXHJcbiAgICBBTExfVVNFUjpbXSxcclxuICAgIEFMTF9HUk9VUDpbXSxcclxuICAgIFNZU1RFTV9ST0xFX0lEUzpbXVxyXG4gIH1cclxuXHJcblxyXG5cclxuICBsaXN0TG9hZGluZ1N0YXRlID0ge1xyXG4gICAgUk9MRVM6ZmFsc2UsXHJcbiAgICBVU0VSUzpmYWxzZSxcclxuICAgIEdST1VQOmZhbHNlLFxyXG4gICAgUkM6ZmFsc2UsXHJcbiAgfVxyXG4gIHNpZGVFbGVtZW50cyA9IFsnUk9MRScsJ1JDJywnT1dORVInLCdBU1NJR05FRScsJ0FQUFJPVkVSJywnREVGQVVMVF9BU1NJR05FRScsJ1JFVklFV0VSJywnREVGQVVMVF9SRVZJRVdFUicsJ0FTU0VTU01FTlQnLCdGUkFNRVdPUksnLCdPVkVSU0VFUicsJ0RFRkFVTFRfRkFJTEVEX09WRVJTRUVSJywnREVGQVVMVF9PVkVSU0VFUicsJ09WRVJTRUVSJ107XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fdHlwZScsIHRoaXMucHJvZ3JhbVR5cGUpO1xyXG4gICAgaWYodGhpcy5tb2RlID09PSAnRURJVCcpIHtcclxuICAgICAgdGhpcy5nZXRQcm9ncmFtRGV0YWlscygpO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIHRoaXMuZmV0Y2hPcmdhbml6YXRpb25Vc2VycygpO1xyXG4gICAgICB0aGlzLmZldGNoT3JnYW5pemF0aW9uR3JvdXAoKTtcclxuICAgIH1cclxuICAgIHRoaXMuZmV0Y2hSb2xlcygpO1xyXG4gICAgdGhpcy5mZXRjaFJDKCk7XHJcblxyXG4gIH1cclxuICBnZXQgdmFsaWQoKSB7XHJcbiAgIHJldHVybiB0aGlzLnByb2dyYW1Gb3JtLnZhbGlkXHJcbiAgfVxyXG5cclxuICBhZGRpdGlvbmFsT3B0aW9uOiBhbnkgPSB7Li4uQ09OU1RBTlRTLmFkZGl0aW9uYWxPcHRpb259O1xyXG4gIGFjdGl2ZUxpc3QgPSAnJyBcclxuICAvKipcclxuICAgKiAjIyMjIERlc2NyaXB0aW9uXHJcbiAgICogUG9wdWxhdGVzIG9wdGlvbmFsIGZpZWxkcyBzdGF0dXMgZm9yIHRoZSBvcHRpb25hbCBmaWVsZHNcclxuICAgKi9cclxuICBwb3B1bGF0ZU9wdGlvbmFsRmllbGRzKCkge1xyXG4gICAgY29uc3QgYWN0aXZhdGVkT3B0aW9ucyA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5hZGRpdGlvbmFsT3B0aW9uKSkge1xyXG4gICAgICBpZiAodGhpcy5hZGRpdGlvbmFsT3B0aW9uW2tleV0gPT09IHRydWUpIHtcclxuICAgICAgICBhY3RpdmF0ZWRPcHRpb25zLnB1c2goa2V5KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5wb3B1bGF0ZU9wdGlvbi5lbWl0KGFjdGl2YXRlZE9wdGlvbnMpO1xyXG4gIH1cclxuICBhZGRNb3JlSW5mbyhldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmFkZGl0aW9uYWxPcHRpb25bZXZlbnQuY29kZV0gPSBldmVudC5jaGVja2VkO1xyXG4gICAgdGhpcy5zY3JvbGxUb0JvdHRvbSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyBmdW5jdGlvbiB0byBhdXRvbWF0ZSBmb3JtIHZhbHVlIGNoYW5nZSBoYW5kbmdcclxuICBmb3JtQ2hhbmdlTGlzdG5lcigpIHtcclxuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpO1xyXG4gICAgZmllbGRzLmZvckVhY2goKGVsZTogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuY29udHJvbHNbZWxlXT8udmFsdWVDaGFuZ2VzLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHsgdGhpcy5oYW5kbGVGb3JtRmllbGRDaGFuZ2UoZWxlLCByZXMpIH1cclxuICAgICAgfSlcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBoYW5kbGVGb3JtRmllbGRDaGFuZ2UoY29udHJvbDogc3RyaW5nLCBwYXlsb2FkPzogYW55KSB7XHJcbiAgICBzd2l0Y2ggKGNvbnRyb2wpIHtcclxuICAgICAgY2FzZSAncHJvZ3JhbV9yb2xlcyc6IHtcclxuICAgICAgICB0aGlzLmZldGNoVXNlcnNBc3NvY2lhdGVkV2l0aFJvbGVzKClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWN0aXZhdGVMaXN0KGV2dDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmFjdGl2ZUxpc3QgPSBldnQ7XHJcbiAgICB0aGlzLnBpY2tlckNoYW5nZWQuZW1pdCh0cnVlKTtcclxuICB9XHJcblxyXG4gIGxpc3RBY3Rpb24oZXZ0OiBhbnksIHR5cGU6IGFueSkge1xyXG4gICAgY29uc29sZS5sb2coXCJldnQgPT09PlwiLCBldnQsIHR5cGUpXHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAnUk9MRSc6IHtcclxuICAgICAgICB0aGlzLnNob3dDb25maXJtYXRpb24gPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IHN5c3RlbVJvbGVzID0gZXZ0Py5maWx0ZXIoKGVsZTogYW55KSA9PiAoZWxlPy5yb2xlTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gJ2tleSBhZG1pbicgfHwgZWxlPy5yb2xlTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gJ2FkbWluJykpO1xyXG4gICAgICAgIGNvbnN0IHBhdGNoVmFsID0gdGhpcy51bmlxdWVCeVByb3AoWy4uLnN5c3RlbVJvbGVzLCAuLi5ldnRdLCAnX2lkJyk7XHJcbiAgICAgICAgaWYgKCFpc0VxdWFsKHRoaXMuY29udHJvbHMucHJvZ3JhbV9yb2xlcy52YWx1ZS5zb3J0KCksIHBhdGNoVmFsLnNvcnQoKSkpIHtcclxuICAgICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX3JvbGVzJywgcGF0Y2hWYWwpO1xyXG4gICAgICAgICAgICB0aGlzLmZldGNoVXNlcnNBc3NvY2lhdGVkV2l0aFJvbGVzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hHcm91cHNBc3NvY2lhdGVkV2l0aFJvbGVzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZmllbGREZXNlbGVjdG9yKHR5cGUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ1JDJzoge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwicm9sZVwiLGV2dClcclxuICAgICAgICBjb25zdCByYyA9IHRoaXMuc2V0TGlzdCh0aGlzLmxpc3RzLlJDLCBldnQsICdpdGVtX2lkJylcclxuICAgICAgICBjb25zb2xlLmxvZyhcInNldHJjXCIscmMpXHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3JjJywgdGhpcy51bmlxdWVCeVByb3AocmMsICdpdGVtX2lkJykpO1xyXG4gICAgICAgIHRoaXMuZmllbGREZXNlbGVjdG9yKHR5cGUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ09XTkVSJyA6e1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX293bmVycycsIHRoaXMudW5pcXVlQnlQcm9wKGV2dD8udXNlcnMsICdtZW1iZXJfaWQnKSk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fb3duZXJzX2dyb3VwJywgdGhpcy51bmlxdWVCeVByb3AoZXZ0Py5ncm91cHMsICdncm91cF9pZCcpKTtcclxuICAgICAgICB0aGlzLmZpZWxkRGVzZWxlY3Rvcih0eXBlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdBUFBST1ZFUic6e1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2FwcHJvdmVyJywgdGhpcy51bmlxdWVCeVByb3AoZXZ0Py51c2VycywgJ21lbWJlcl9pZCcpKTtcclxuICAgICAgICB0aGlzLmZpZWxkRGVzZWxlY3Rvcih0eXBlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdBU1NJR05FRSc6e1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2Fzc2lnbmVlJywgdGhpcy51bmlxdWVCeVByb3AoZXZ0Py51c2VycywgJ21lbWJlcl9pZCcpKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9hc3NpZ25lZV9ncm91cCcsIHRoaXMudW5pcXVlQnlQcm9wKGV2dD8uZ3JvdXBzLCAnZ3JvdXBfaWQnKSk7XHJcbiAgICAgICAgdGhpcy5maWVsZERlc2VsZWN0b3IodHlwZSk7XHJcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0QXNzaWduZWUoZXZ0KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdERUZBVUxUX0FTU0lHTkVFJzp7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fZGVmYXVsdF9hc3NpZ25lZScsIHRoaXMudW5pcXVlQnlQcm9wKGV2dD8udXNlcnMsICdtZW1iZXJfaWQnKSk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fZGVmYXVsdF9hc3NpZ25lZV9ncm91cCcsIHRoaXMudW5pcXVlQnlQcm9wKGV2dD8uZ3JvdXBzLCAnZ3JvdXBfaWQnKSk7XHJcbiAgICAgICAgdGhpcy5maWVsZERlc2VsZWN0b3IodHlwZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnUkVWSUVXRVInOntcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9yZXZpZXdlcicsIHRoaXMudW5pcXVlQnlQcm9wKGV2dD8udXNlcnMsICdtZW1iZXJfaWQnKSk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fcmV2aWV3ZXJfZ3JvdXAnLCB0aGlzLnVuaXF1ZUJ5UHJvcChldnQ/Lmdyb3VwcywgJ2dyb3VwX2lkJykpO1xyXG4gICAgICAgIHRoaXMuZmllbGREZXNlbGVjdG9yKHR5cGUpO1xyXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdFJldmlld2VyKGV2dCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnREVGQVVMVF9SRVZJRVdFUic6e1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXInLCB0aGlzLnVuaXF1ZUJ5UHJvcChldnQ/LnVzZXJzLCAnbWVtYmVyX2lkJykpO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXJfZ3JvdXAnLCB0aGlzLnVuaXF1ZUJ5UHJvcChldnQ/Lmdyb3VwcywgJ2dyb3VwX2lkJykpO1xyXG4gICAgICAgIHRoaXMuZmllbGREZXNlbGVjdG9yKHR5cGUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ09WRVJTRUVSJzp7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fb3ZlcnNlZXInLCB0aGlzLnVuaXF1ZUJ5UHJvcChldnQ/LnVzZXJzLCAnbWVtYmVyX2lkJykpO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX292ZXJzZWVyX2dyb3VwJywgdGhpcy51bmlxdWVCeVByb3AoZXZ0Py5ncm91cHMsICdncm91cF9pZCcpKTtcclxuICAgICAgICB0aGlzLmZpZWxkRGVzZWxlY3Rvcih0eXBlKTtcclxuICAgICAgICB0aGlzLnNldERlZmF1bHRPdmVyc2VlcihldnQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0RFRkFVTFRfT1ZFUlNFRVInOntcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyJywgdGhpcy51bmlxdWVCeVByb3AoZXZ0Py51c2VycywgJ21lbWJlcl9pZCcpKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyX2dyb3VwJywgdGhpcy51bmlxdWVCeVByb3AoZXZ0Py5ncm91cHMsICdncm91cF9pZCcpKTtcclxuICAgICAgICB0aGlzLmZpZWxkRGVzZWxlY3Rvcih0eXBlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdERUZBVUxUX0ZBSUxFRF9PVkVSU0VFUic6e1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyJywgdGhpcy51bmlxdWVCeVByb3AoZXZ0Py51c2VycywgJ21lbWJlcl9pZCcpKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2Vlcl9ncm91cCcsIHRoaXMudW5pcXVlQnlQcm9wKGV2dD8uZ3JvdXBzLCAnZ3JvdXBfaWQnKSk7XHJcbiAgICAgICAgdGhpcy5maWVsZERlc2VsZWN0b3IodHlwZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnQVNTRVNTTUVOVCc6e1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2Fzc2Vzc21lbnRzJywgZXZ0KTtcclxuICAgICAgICB0aGlzLmZpZWxkRGVzZWxlY3Rvcih0eXBlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdGUkFNRVdPUksnOntcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgnZnJhbWV3b3JrJywgZXZ0KTtcclxuICAgICAgICB0aGlzLmZpZWxkRGVzZWxlY3Rvcih0eXBlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlKGV2dDogYW55LCB0eXBlOiBhbnkpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlICdST0xFJzoge1xyXG4gICAgICAgIGxldCBtc2cgPSAnJztcclxuICAgICAgICBtc2cgPSAnSWYgeW91IGNoYW5nZSB0aGUgcm9sZXMsIGFueSB1bnNhdmVkIGNoYW5nZXMgd291bGQgYmUgbG9zdC4nXHJcbiAgICAgICAgY29uc3Qgcm9sZXMgPSB0aGlzLmNvbnRyb2xzPy5wcm9ncmFtX3JvbGVzPy52YWx1ZT8uZmlsdGVyKChlbGU6IGFueSkgPT4gZWxlPy5faWQgIT09IGV2dD8uX2lkKTtcclxuICAgICAgICB0aGlzLmxpc3RBY3Rpb24ocm9sZXMsJ1JPTEUnKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9yb2xlcycsIHJvbGVzKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdSQyc6IHtcclxuICAgICAgICBjb25zdCByY3MgPSB0aGlzLmNvbnRyb2xzPy5yYz8udmFsdWU/LmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZT8uaXRlbV9pZCAhPT0gZXZ0Py5pdGVtX2lkKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncmMnLCByY3MpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ09XTkVSJzp7XHJcbiAgICAgICAgY29uc3Qgb3duZXJzID0gdGhpcy5jb250cm9scz8ucHJvZ3JhbV9vd25lcnM/LnZhbHVlPy5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGU/Lm1lbWJlcl9pZCAhPT0gZXZ0Py5tZW1iZXJfaWQpO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX293bmVycycsIG93bmVycyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnT1dORVJfR1JPVVAnOntcclxuICAgICAgICBjb25zdCBvd25lcnNfZ3JvdXAgPSB0aGlzLmNvbnRyb2xzPy5wcm9ncmFtX293bmVyc19ncm91cD8udmFsdWU/LmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZT8uZ3JvdXBfaWQgIT09IGV2dD8uZ3JvdXBfaWQpO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX293bmVyc19ncm91cCcsIG93bmVyc19ncm91cCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnQVBQUk9WRVInOntcclxuICAgICAgICBjb25zdCBhcHByb3ZlciA9IHRoaXMuY29udHJvbHM/LnByb2dyYW1fYXBwcm92ZXI/LnZhbHVlPy5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGU/Lm1lbWJlcl9pZCAhPT0gZXZ0Py5tZW1iZXJfaWQpO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2FwcHJvdmVyJywgYXBwcm92ZXIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0FTU0lHTkVFJzp7XHJcbiAgICAgICAgY29uc3QgYXNzaWduZWUgPSB0aGlzLmNvbnRyb2xzPy5wcm9ncmFtX2Fzc2lnbmVlPy52YWx1ZT8uZmlsdGVyKChlbGU6IGFueSkgPT4gZWxlPy5tZW1iZXJfaWQgIT09IGV2dD8ubWVtYmVyX2lkKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9hc3NpZ25lZScsIGFzc2lnbmVlKTtcclxuICAgICAgICB0aGlzLnNldERlZmF1bHRBc3NpZ25lZU9uUmVtb3ZlKGV2dCx0eXBlKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0FTU0lHTkVFX0dST1VQJzp7XHJcbiAgICAgICAgY29uc3QgYXNzaWduZWVfZ3JvdXAgPSB0aGlzLmNvbnRyb2xzPy5wcm9ncmFtX2Fzc2lnbmVlX2dyb3VwPy52YWx1ZT8uZmlsdGVyKChlbGU6IGFueSkgPT4gZWxlPy5ncm91cF9pZCAhPT0gZXZ0Py5ncm91cF9pZCk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fYXNzaWduZWVfZ3JvdXAnLCBhc3NpZ25lZV9ncm91cCk7XHJcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0QXNzaWduZWVPblJlbW92ZShldnQsdHlwZSlcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdERUZBVUxUX0FTU0lHTkVFJzp7XHJcbiAgICAgICAgY29uc3QgYXNzaWduZWUgPSB0aGlzLmNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfYXNzaWduZWU/LnZhbHVlPy5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGU/Lm1lbWJlcl9pZCAhPT0gZXZ0Py5tZW1iZXJfaWQpO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2RlZmF1bHRfYXNzaWduZWUnLCBhc3NpZ25lZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnREVGQVVMVF9BU1NJR05FRV9HUk9VUCc6e1xyXG4gICAgICAgIGNvbnN0IGFzc2lnbmVlX2dyb3VwID0gdGhpcy5jb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlX2dyb3VwPy52YWx1ZT8uZmlsdGVyKChlbGU6IGFueSkgPT4gZWxlPy5ncm91cF9pZCAhPT0gZXZ0Py5ncm91cF9pZCk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fZGVmYXVsdF9hc3NpZ25lZV9ncm91cCcsIGFzc2lnbmVlX2dyb3VwKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdSRVZJRVdFUic6e1xyXG4gICAgICAgIGNvbnN0IHJldmlld2VyID0gdGhpcy5jb250cm9scz8ucHJvZ3JhbV9yZXZpZXdlcj8udmFsdWU/LmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZT8ubWVtYmVyX2lkICE9PSBldnQ/Lm1lbWJlcl9pZCk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fcmV2aWV3ZXInLCByZXZpZXdlcik7XHJcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0UmV2aWV3ZXJPblJlbW92ZShldnQsdHlwZSlcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdSRVZJRVdFUl9HUk9VUCc6e1xyXG4gICAgICAgIGNvbnN0IHJldmlld2VyX2dyb3VwID0gdGhpcy5jb250cm9scz8ucHJvZ3JhbV9yZXZpZXdlcl9ncm91cD8udmFsdWU/LmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZT8uZ3JvdXBfaWQgIT09IGV2dD8uZ3JvdXBfaWQpO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX3Jldmlld2VyX2dyb3VwJywgcmV2aWV3ZXJfZ3JvdXApO1xyXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdFJldmlld2VyT25SZW1vdmUoZXZ0LHR5cGUpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnREVGQVVMVF9SRVZJRVdFUic6e1xyXG4gICAgICAgIGNvbnN0IHJldmlld2VyID0gdGhpcy5jb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyPy52YWx1ZT8uZmlsdGVyKChlbGU6IGFueSkgPT4gZWxlPy5tZW1iZXJfaWQgIT09IGV2dD8ubWVtYmVyX2lkKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyJywgcmV2aWV3ZXIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0RFRkFVTFRfUkVWSUVXRVJfR1JPVVAnOntcclxuICAgICAgICBjb25zdCByZXZpZXdlcl9ncm91cCA9IHRoaXMuY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9yZXZpZXdlcl9ncm91cD8udmFsdWU/LmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZT8uZ3JvdXBfaWQgIT09IGV2dD8uZ3JvdXBfaWQpO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXJfZ3JvdXAnLCByZXZpZXdlcl9ncm91cCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnT1ZFUlNFRVInOntcclxuICAgICAgICBjb25zdCBvdmVyc2VlciA9IHRoaXMuY29udHJvbHM/LnByb2dyYW1fb3ZlcnNlZXI/LnZhbHVlPy5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGU/Lm1lbWJlcl9pZCAhPT0gZXZ0Py5tZW1iZXJfaWQpO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX292ZXJzZWVyJywgb3ZlcnNlZXIpO1xyXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdE92ZXJzZWVyT25SZW1vdmUoZXZ0LHR5cGUpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnT1ZFUlNFRVJfR1JPVVAnOntcclxuICAgICAgICBjb25zdCBvdmVyc2Vlcl9ncm91cCA9IHRoaXMuY29udHJvbHM/LnByb2dyYW1fb3ZlcnNlZXJfZ3JvdXA/LnZhbHVlPy5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGU/Lmdyb3VwX2lkICE9PSBldnQ/Lmdyb3VwX2lkKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9vdmVyc2Vlcl9ncm91cCcsIG92ZXJzZWVyX2dyb3VwKTtcclxuICAgICAgICB0aGlzLnNldERlZmF1bHRPdmVyc2Vlck9uUmVtb3ZlKGV2dCx0eXBlKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0RFRkFVTFRfT1ZFUlNFRVInOntcclxuICAgICAgICBjb25zdCBvdmVyc2VlciA9IHRoaXMuY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9vdmVyc2Vlcj8udmFsdWU/LmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZT8ubWVtYmVyX2lkICE9PSBldnQ/Lm1lbWJlcl9pZCk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fZGVmYXVsdF9vdmVyc2VlcicsIG92ZXJzZWVyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdERUZBVUxUX09WRVJTRUVSX0dST1VQJzp7XHJcbiAgICAgICAgY29uc3Qgb3ZlcnNlZXJfZ3JvdXAgPSB0aGlzLmNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfb3ZlcnNlZXJfZ3JvdXA/LnZhbHVlPy5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGU/Lmdyb3VwX2lkICE9PSBldnQ/Lmdyb3VwX2lkKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyX2dyb3VwJywgb3ZlcnNlZXJfZ3JvdXApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0RFRkFVTFRfRkFJTEVEX09WRVJTRUVSJzp7XHJcbiAgICAgICAgY29uc3Qgb3ZlcnNlZXIgPSB0aGlzLmNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyPy52YWx1ZT8uZmlsdGVyKChlbGU6IGFueSkgPT4gZWxlPy5tZW1iZXJfaWQgIT09IGV2dD8ubWVtYmVyX2lkKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2VlcicsIG92ZXJzZWVyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdERUZBVUxUX0ZBSUxFRF9PVkVSU0VFUl9HUk9VUCc6e1xyXG4gICAgICAgIGNvbnN0IG92ZXJzZWVyX2dyb3VwID0gdGhpcy5jb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2Vlcl9ncm91cD8udmFsdWU/LmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZT8uZ3JvdXBfaWQgIT09IGV2dD8uZ3JvdXBfaWQpO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyX2dyb3VwJywgb3ZlcnNlZXJfZ3JvdXApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0FTU0VTU01FTlQnIDp7XHJcblxyXG4gICAgICAgIGxldCBjdXJyZW50ID0gY2xvbmVEZWVwKHRoaXMuY29udHJvbHMucHJvZ3JhbV9hc3Nlc3NtZW50cz8udmFsdWUpO1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gY3VycmVudC5maW5kSW5kZXgoKGVsZTogYW55KSA9PiBlbGUuY2F0ZWdvcnlfaWQgPT0gZXZ0LmNhdGVnb3J5X2lkKTtcclxuICAgICAgICBjdXJyZW50W2luZGV4XS5hc3Nlc3NtZW50SWRzID0gY3VycmVudFtpbmRleF0uYXNzZXNzbWVudElkcy5maWx0ZXIoKGFzc2Vzc21lbnQ6IGFueSkgPT4gYXNzZXNzbWVudC5pZCAhPT0gZXZ0LmlkKTtcclxuICAgICAgICBpZihjdXJyZW50W2luZGV4XS5hc3Nlc3NtZW50SWRzLmxlbmd0aCAgPT09IDApICBjdXJyZW50LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgdGhpcy5saXN0QWN0aW9uKGN1cnJlbnQsICdBU1NFU1NNRU5UJyk7XHJcbiAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdGUkFNRVdPUksnIDp7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ2ZyYW1ld29yaycsIG51bGwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlUm9sZShldnQ6IGFueSl7XHJcbiAgICB0aGlzLm9uUmVtb3ZpbmdSb2xlLmVtaXQoZXZ0KTtcclxuICB9XHJcblxyXG5cclxuICAvL2JlbG93IDQgZnVuY3Rpb25zIGNhbiBiZSBlYXNpbHR5IGNvbWJpbmVkIGludG8gb25lIGFzIHRoZXkgZm9sbG93IHNhbWUga2luZCBvZiBwYXR0ZXJuIG9yIGNhbiBiZSBvZmZsb2FkZWQgdG8gYSBleHRlcm5hbCBzZXJ2aWNlXHJcbiAgc2V0RGVmYXVsdEFzc2lnbmVlKGV2dDphbnkpe1xyXG4gICAgaWYoZXZ0Py51c2Vycz8ubGVuZ3RoIHx8IGV2dD8uZ3JvdXBzPy5sZW5ndGgpe1xyXG4gICAgICB0aGlzLmxpc3RzLkRFRkFVTFRfQVNTSUdORUVTID0gdGhpcy51bmlxdWVCeVByb3AoZXZ0Py51c2VycywgJ21lbWJlcl9pZCcpO1xyXG4gICAgICB0aGlzLmxpc3RzLkRFRkFVTFRfQVNTSUdORUVTX0dST1VQID0gdGhpcy51bmlxdWVCeVByb3AoZXZ0Py5ncm91cHMsICdncm91cF9pZCcpO1xyXG5cclxuICAgIH1lbHNle1xyXG4gICAgICB0aGlzLmxpc3RzLkRFRkFVTFRfQVNTSUdORUVTID0gdGhpcy5saXN0cy5BTExfVVNFUjtcclxuICAgICAgdGhpcy5saXN0cy5ERUZBVUxUX0FTU0lHTkVFU19HUk9VUCA9IHRoaXMubGlzdHMuQUxMX0dST1VQO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYXNzaWduZWVNYXAgPSAgZXZ0Py51c2Vycz8ubWFwKChlbGU6YW55KSA9PiBlbGU/Lm1lbWJlcl9pZCk7XHJcbiAgICBsZXQgY3VycmVudERlZmF1bHRBc3NpZ25lZSA9IHRoaXMuY29udHJvbHMucHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlPy52YWx1ZTtcclxuICAgIGN1cnJlbnREZWZhdWx0QXNzaWduZWUgPSBjdXJyZW50RGVmYXVsdEFzc2lnbmVlLmZpbHRlcigoZWxlOmFueSk9PiBhc3NpZ25lZU1hcC5pbmNsdWRlcyhlbGU/Lm1lbWJlcl9pZCkpO1xyXG4gICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fZGVmYXVsdF9hc3NpZ25lZScsIGN1cnJlbnREZWZhdWx0QXNzaWduZWUpO1xyXG4gIH1cclxuXHJcbiAgc2V0RGVmYXVsdEFzc2lnbmVlT25SZW1vdmUoZXZ0OmFueSx0eXBlOmFueSl7XHJcbiAgIHN3aXRjaCh0eXBlKXtcclxuICAgICBjYXNlICdBU1NJR05FRScgOntcclxuICAgICAgIHRoaXMubGlzdHMuREVGQVVMVF9BU1NJR05FRVMgPSB0aGlzLmxpc3RzLkRFRkFVTFRfQVNTSUdORUVTLmZpbHRlcigoZWxlOmFueSkgPT4gZWxlPy5tZW1iZXJfaWQgIT09IGV2dD8ubWVtYmVyX2lkKTtcclxuICAgICAgIGNvbnN0IGRlZmF1bHRBc3NpZ25lZSA9IHRoaXMuY29udHJvbHMucHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlPy52YWx1ZTtcclxuICAgICAgIGNvbnN0IGFzc2lnbmVlID0gZGVmYXVsdEFzc2lnbmVlLmZpbHRlcigoZWxlOmFueSkgPT4gIGVsZT8ubWVtYmVyX2lkICE9PSBldnQ/Lm1lbWJlcl9pZClcclxuICAgICAgIGlmKCFhc3NpZ25lZT8ubGVuZ3RoKXtcclxuICAgICAgICAgdGhpcy5saXN0cy5ERUZBVUxUX0FTU0lHTkVFUyA9IHRoaXMubGlzdHMuQUxMX1VTRVI7XHJcbiAgICAgICB9XHJcbiAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlJywgYXNzaWduZWUpO1xyXG5cclxuXHJcbiAgICAgIGJyZWFrO1xyXG4gICAgIH1cclxuICAgICBjYXNlICdBU1NJR05FRV9HUk9VUCc6e1xyXG4gICAgICB0aGlzLmxpc3RzLkRFRkFVTFRfQVNTSUdORUVTX0dST1VQID0gdGhpcy5saXN0cy5ERUZBVUxUX0FTU0lHTkVFU19HUk9VUC5maWx0ZXIoKGVsZTphbnkpID0+IGVsZT8uZ3JvdXBfaWQgIT09IGV2dD8uZ3JvdXBfaWQpO1xyXG4gICAgICBjb25zdCBkZWZhdWx0QXNzaWduZWVHcm91cCA9IHRoaXMuY29udHJvbHMucHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlX2dyb3VwPy52YWx1ZTtcclxuICAgICAgY29uc3QgYXNzaWduZWVHcm91cCA9IGRlZmF1bHRBc3NpZ25lZUdyb3VwLmZpbHRlcigoZWxlOmFueSkgPT4gIGVsZT8uZ3JvdXBfaWQgIT09IGV2dD8uZ3JvdXBfaWQpXHJcbiAgICAgIGlmKCFhc3NpZ25lZUdyb3VwPy5sZW5ndGgpe1xyXG4gICAgICAgIHRoaXMubGlzdHMuREVGQVVMVF9BU1NJR05FRVNfR1JPVVAgPSB0aGlzLmxpc3RzLkFMTF9HUk9VUDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlX2dyb3VwJywgYXNzaWduZWVHcm91cCk7XHJcbiAgICAgfVxyXG4gICB9XHJcbiAgfVxyXG4gIHNldERlZmF1bHRSZXZpZXdlcihldnQ6YW55KXtcclxuICAgIGlmKGV2dD8udXNlcnM/Lmxlbmd0aCB8fCBldnQ/Lmdyb3Vwcz8ubGVuZ3RoKXtcclxuICAgICAgdGhpcy5saXN0cy5ERUZBVUxUX1JFVklFV0VSUyA9IHRoaXMudW5pcXVlQnlQcm9wKGV2dD8udXNlcnMsICdtZW1iZXJfaWQnKTtcclxuICAgICAgdGhpcy5saXN0cy5ERUZBVUxUX1JFVklFV0VSU19HUk9VUCA9IHRoaXMudW5pcXVlQnlQcm9wKGV2dD8uZ3JvdXBzLCAnZ3JvdXBfaWQnKTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgIHRoaXMubGlzdHMuREVGQVVMVF9SRVZJRVdFUlMgPSB0aGlzLmxpc3RzLkFMTF9VU0VSO1xyXG4gICAgICB0aGlzLmxpc3RzLkRFRkFVTFRfUkVWSUVXRVJTX0dST1VQID0gdGhpcy5saXN0cy5BTExfR1JPVVA7XHJcbiAgICB9XHJcbiAgICBjb25zdCByZXZpZXdlck1hcCA9ICBldnQ/LnVzZXJzPy5tYXAoKGVsZTphbnkpID0+IGVsZT8ubWVtYmVyX2lkKTsgICBcclxuICAgIGxldCBjdXJyZW50RGVmYXVsdFJldmlld2VyID0gdGhpcy5jb250cm9scy5wcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXI/LnZhbHVlOyAgIFxyXG4gICAgY3VycmVudERlZmF1bHRSZXZpZXdlciA9IGN1cnJlbnREZWZhdWx0UmV2aWV3ZXIuZmlsdGVyKChlbGU6YW55KT0+IHJldmlld2VyTWFwLmluY2x1ZGVzKGVsZT8ubWVtYmVyX2lkKSk7XHJcbiAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyJywgY3VycmVudERlZmF1bHRSZXZpZXdlcik7XHJcbiAgfVxyXG4gIHNldERlZmF1bHRPdmVyc2VlcihldnQ6YW55KXtcclxuICAgIGlmKGV2dD8udXNlcnM/Lmxlbmd0aCB8fCBldnQ/Lmdyb3Vwcz8ubGVuZ3RoKXtcclxuICAgICAgdGhpcy5saXN0cy5ERUZBVUxUX09WRVJTRUVSUyA9IHRoaXMudW5pcXVlQnlQcm9wKGV2dD8udXNlcnMsICdtZW1iZXJfaWQnKTtcclxuICAgICAgdGhpcy5saXN0cy5ERUZBVUxUX09WRVJTRUVSU19HUk9VUCA9IHRoaXMudW5pcXVlQnlQcm9wKGV2dD8uZ3JvdXBzLCAnZ3JvdXBfaWQnKTtcclxuXHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5saXN0cy5ERUZBVUxUX09WRVJTRUVSUyA9IHRoaXMubGlzdHMuQUxMX1VTRVI7XHJcbiAgICAgIHRoaXMubGlzdHMuREVGQVVMVF9PVkVSU0VFUlNfR1JPVVAgPSB0aGlzLmxpc3RzLkFMTF9HUk9VUDtcclxuICAgIH1cclxuICAgIGNvbnN0IG92ZXJzZWVyTWFwID0gIGV2dD8udXNlcnM/Lm1hcCgoZWxlOmFueSkgPT4gZWxlPy5tZW1iZXJfaWQpO1xyXG4gICAgbGV0IGN1cnJlbnREZWZhdWx0UmV2aWV3ZXIgPSB0aGlzLmNvbnRyb2xzLnByb2dyYW1fZGVmYXVsdF9vdmVyc2Vlcj8udmFsdWU7XHJcbiAgICBsZXQgY3VycmVudERlZmF1bHRGYWlsUmV2aWV3ZXIgPSB0aGlzLmNvbnRyb2xzLnByb2dyYW1fZGVmYXVsdF9mYWlsZWRfb3ZlcnNlZXI/LnZhbHVlO1xyXG4gICAgY3VycmVudERlZmF1bHRSZXZpZXdlciA9IGN1cnJlbnREZWZhdWx0UmV2aWV3ZXIuZmlsdGVyKChlbGU6YW55KT0+IG92ZXJzZWVyTWFwLmluY2x1ZGVzKGVsZT8ubWVtYmVyX2lkKSk7XHJcbiAgICBjdXJyZW50RGVmYXVsdEZhaWxSZXZpZXdlciA9IGN1cnJlbnREZWZhdWx0UmV2aWV3ZXIuZmlsdGVyKChlbGU6YW55KT0+IG92ZXJzZWVyTWFwLmluY2x1ZGVzKGVsZT8ubWVtYmVyX2lkKSk7XHJcbiAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyJywgY3VycmVudERlZmF1bHRSZXZpZXdlcik7XHJcbiAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2VlcicsIGN1cnJlbnREZWZhdWx0RmFpbFJldmlld2VyKTtcclxuICB9XHJcbiAgc2V0RGVmYXVsdFJldmlld2VyT25SZW1vdmUoZXZ0OmFueSx0eXBlOmFueSl7XHJcbiAgIHN3aXRjaCh0eXBlKXtcclxuICAgICBjYXNlICdSRVZJRVdFUicgOntcclxuICAgICAgIHRoaXMubGlzdHMuREVGQVVMVF9SRVZJRVdFUlMgPSB0aGlzLmxpc3RzLkRFRkFVTFRfUkVWSUVXRVJTLmZpbHRlcigoZWxlOmFueSkgPT4gZWxlPy5tZW1iZXJfaWQgIT09IGV2dD8ubWVtYmVyX2lkKTtcclxuICAgICAgIGNvbnN0IGRlZmF1bHRSZXZpZXdlciA9IHRoaXMuY29udHJvbHMucHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyPy52YWx1ZTtcclxuICAgICAgIGNvbnN0IHJldmlld2VyID0gZGVmYXVsdFJldmlld2VyLmZpbHRlcigoZWxlOmFueSkgPT4gIGVsZT8ubWVtYmVyX2lkICE9PSBldnQ/Lm1lbWJlcl9pZClcclxuICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXInLCByZXZpZXdlcik7XHJcblxyXG4gICAgICBicmVhaztcclxuICAgICB9XHJcbiAgICAgY2FzZSAnUkVWSUVXRVJfR1JPVVAnOntcclxuICAgICAgdGhpcy5saXN0cy5ERUZBVUxUX1JFVklFV0VSU19HUk9VUCA9IHRoaXMubGlzdHMuREVGQVVMVF9SRVZJRVdFUlNfR1JPVVAuZmlsdGVyKChlbGU6YW55KSA9PiBlbGU/Lmdyb3VwX2lkICE9PSBldnQ/Lmdyb3VwX2lkKTtcclxuICAgICAgY29uc3QgZGVmYXVsdFJldmlld2VyR3JvdXAgPSB0aGlzLmNvbnRyb2xzLnByb2dyYW1fZGVmYXVsdF9yZXZpZXdlcl9ncm91cD8udmFsdWU7XHJcbiAgICAgIGNvbnN0IHJldmlld2VyR3JvdXAgPSBkZWZhdWx0UmV2aWV3ZXJHcm91cC5maWx0ZXIoKGVsZTphbnkpID0+ICBlbGU/Lmdyb3VwX2lkICE9PSBldnQ/Lmdyb3VwX2lkKVxyXG4gICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyX2dyb3VwJywgcmV2aWV3ZXJHcm91cCk7XHJcbiAgICAgfVxyXG4gICB9XHJcbiAgfVxyXG4gIHNldERlZmF1bHRPdmVyc2Vlck9uUmVtb3ZlKGV2dDphbnksdHlwZTphbnkpe1xyXG4gICAgc3dpdGNoKHR5cGUpe1xyXG4gICAgICBjYXNlICdPVkVSU0VFUicgOntcclxuICAgICAgICB0aGlzLmxpc3RzLkRFRkFVTFRfT1ZFUlNFRVJTID0gdGhpcy5saXN0cy5ERUZBVUxUX09WRVJTRUVSUy5maWx0ZXIoKGVsZTphbnkpID0+IGVsZT8ubWVtYmVyX2lkICE9PSBldnQ/Lm1lbWJlcl9pZCk7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdE92ZXJzZWVyID0gdGhpcy5jb250cm9scy5wcm9ncmFtX2RlZmF1bHRfb3ZlcnNlZXI/LnZhbHVlO1xyXG4gICAgICAgIGNvbnN0IG92ZXJzZWVyID0gZGVmYXVsdE92ZXJzZWVyLmZpbHRlcigoZWxlOmFueSkgPT4gIGVsZT8ubWVtYmVyX2lkICE9PSBldnQ/Lm1lbWJlcl9pZClcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyJywgb3ZlcnNlZXIpO1xyXG5cclxuICAgICAgICBjb25zdCBkZWZhdWx0RmFpbE92ZXJzZWVyID0gdGhpcy5jb250cm9scy5wcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyPy52YWx1ZTtcclxuICAgICAgICBjb25zdCBvdmVyc2VlckZhaWwgPSBkZWZhdWx0RmFpbE92ZXJzZWVyLmZpbHRlcigoZWxlOmFueSkgPT4gIGVsZT8ubWVtYmVyX2lkICE9PSBldnQ/Lm1lbWJlcl9pZClcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2VlcicsIG92ZXJzZWVyRmFpbCk7XHJcblxyXG4gICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnT1ZFUlNFRVJfR1JPVVAnOntcclxuICAgICAgIHRoaXMubGlzdHMuREVGQVVMVF9PVkVSU0VFUlNfR1JPVVAgPSB0aGlzLmxpc3RzLkRFRkFVTFRfT1ZFUlNFRVJTX0dST1VQLmZpbHRlcigoZWxlOmFueSkgPT4gZWxlPy5ncm91cF9pZCAhPT0gZXZ0Py5ncm91cF9pZCk7XHJcbiAgICAgICBjb25zdCBkZWZhdWx0T3ZlcnNlZXJHcm91cCA9IHRoaXMuY29udHJvbHMucHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyX2dyb3VwPy52YWx1ZTtcclxuICAgICAgIGNvbnN0IG92ZXJzZWVyR3JvdXAgPSBkZWZhdWx0T3ZlcnNlZXJHcm91cC5maWx0ZXIoKGVsZTphbnkpID0+ICBlbGU/Lmdyb3VwX2lkICE9PSBldnQ/Lmdyb3VwX2lkKVxyXG4gICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fZGVmYXVsdF9vdmVyc2Vlcl9ncm91cCcsIG92ZXJzZWVyR3JvdXApO1xyXG5cclxuICAgICAgIGNvbnN0IGRlZmF1bHRPdmVyc2VlckZhaWxlZEdyb3VwID0gdGhpcy5jb250cm9scy5wcm9ncmFtX2RlZmF1bHRfb3ZlcnNlZXJfZ3JvdXA/LnZhbHVlO1xyXG4gICAgICAgY29uc3Qgb3ZlcnNlZXJGYWlsZWRHcm91cCA9IGRlZmF1bHRPdmVyc2VlckZhaWxlZEdyb3VwLmZpbHRlcigoZWxlOmFueSkgPT4gIGVsZT8uZ3JvdXBfaWQgIT09IGV2dD8uZ3JvdXBfaWQpXHJcbiAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2Vlcl9ncm91cCcsIG92ZXJzZWVyRmFpbGVkR3JvdXApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgIH1cclxuXHJcblxyXG5cclxuICBmaWVsZERlc2VsZWN0b3IodHlwZTogYW55KSB7XHJcbiAgICB0aGlzLmFjdGl2ZUxpc3QgPSAnJztcclxuICAgIHRoaXMucGlja2VyQ2hhbmdlZC5lbWl0KGZhbHNlKTtcclxuICAgIHRoaXMubWFya2FzVG91Y2hlZFNlbGVjdG9yKHR5cGUpXHJcbiAgfVxyXG4gIG1hcmthc1RvdWNoZWRTZWxlY3RvcihmaWVsZE5hbWU6YW55KXtcclxuICAgIGNvbnN0IHR5cGVGaWVsZDphbnkgPSB7XHJcbiAgICAgIFJPTEU6J3Byb2dyYW1fcm9sZXMnLFxyXG4gICAgICBBUFBST1ZFUjoncHJvZ3JhbV9hcHByb3ZlcicsXHJcbiAgICAgIE9XTkVSOidwcm9ncmFtX293bmVycycsXHJcbiAgICAgIE9XTkVSX0dST1VQOidwcm9ncmFtX293bmVyc19ncm91cCdcclxuICAgICB9XHJcbiAgICAgdGhpcy5jb250cm9sc1t0eXBlRmllbGRbZmllbGROYW1lXV0/Lm1hcmtBc1RvdWNoZWQoKTtcclxuICB9XHJcblxyXG4gIGZldGNoUm9sZXMoKSB7XHJcbiAgICB0aGlzLnByb2dyYW1TZXJ2aWNlLmdldFJvbGVzKCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5saXN0cy5ST0xFUyA9IHJlcztcclxuICAgICAgICBjb25zdCBkZWZhdWx0U3lzdGVtVmFsID0gdGhpcy5saXN0cz8uUk9MRVM/LmRhdGE/LmZpbHRlcigoZWxlOiBhbnkpID0+IChlbGU/LnJvbGVOYW1lPy50b0xvd2VyQ2FzZSgpID09PSAna2V5IGFkbWluJyB8fCBlbGU/LnJvbGVOYW1lPy50b0xvd2VyQ2FzZSgpID09PSAnYWRtaW4nKSk/Lm1hcCgoZWxlOmFueSkgPT4gZWxlPy5faWQpO1xyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRWYWwgPSB0aGlzLmxpc3RzPy5ST0xFUz8uZGF0YT8uZmlsdGVyKChlbGU6IGFueSkgPT4gKGVsZT8ucm9sZU5hbWU/LnRvTG93ZXJDYXNlKCkgPT09ICdrZXkgYWRtaW4nIHx8IGVsZT8ucm9sZU5hbWU/LnRvTG93ZXJDYXNlKCkgPT09ICdhZG1pbicpKTtcclxuICAgICAgdGhpcy5saXN0cy5TWVNURU1fUk9MRV9JRFMgPSBkZWZhdWx0U3lzdGVtVmFsO1xyXG4gICAgICAgIGlmKHRoaXMubW9kZSAhPT0gJ0VESVQnKXtcclxuICAgICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX3JvbGVzJywgZGVmYXVsdFZhbCk7XHJcbiAgICAgICAgICB0aGlzLmZldGNoVXNlcnNBc3NvY2lhdGVkV2l0aFJvbGVzKCk7XHJcbiAgICAgICAgICB0aGlzLmZldGNoR3JvdXBzQXNzb2NpYXRlZFdpdGhSb2xlcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHsgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgLy9mZXRjaCB0aGUgbGlzdCBvZiByZXNwb25zaWJpbGl0aWVzIGNlbnRlclxyXG4gIGZldGNoUkMoKSB7XHJcbiAgICB0aGlzLnByb2dyYW1TZXJ2aWNlLmdldFJlc3BvbnNpYmlsaXR5Q2VudGVyTGlzdCgpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMubGlzdHMuUkMgPSByZXM7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHsgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG5cclxuICBmZXRjaFVzZXJzQXNzb2NpYXRlZFdpdGhSb2xlcygpIHtcclxuICAgIGNvbnN0IHJvbGVJZHMgPSB0aGlzLmNvbnRyb2xzLnByb2dyYW1fcm9sZXM/LnZhbHVlPy5tYXAoKGVsZTogYW55KSA9PiBlbGU/Ll9pZCk7XHJcbiAgIC8vIGlmIChmZXRjaEFsbCkge1xyXG4gICAgICB0aGlzLnByb2dyYW1TZXJ2aWNlLmZldGNoQWxsUm9sZVVzZXJzKHJvbGVJZHMpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxpc3RzLk9XTkVSUyA9IHJlcztcclxuICAgICAgICAgIHRoaXMubGlzdHMuQVBQUk9WRVJTID0gcmVzO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJyZXNkZWZcIixyZXM/LmRhdGEpXHJcbiAgICAgICAgICBpZighcmVzPy5kYXRhPy5tYXAoKGVsZTphbnkpID0+IGVsZT8ubWVtYmVyX2lkKT8uaW5jbHVkZXModGhpcy5jb250cm9scy5wcm9ncmFtX2FwcHJvdmVyPy52YWx1ZVswXT8ubWVtYmVyX2lkKSl7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2FwcHJvdmVyJywgW10pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoaXMuY29udHJvbHM/LmFsbF91c2VyX2luX3JvbGU/LnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX293bmVycycsIHJlcz8uZGF0YSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldERlZmF1bHRPd25lcnMocmVzPy5kYXRhKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHsgfVxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgZmV0Y2hHcm91cHNBc3NvY2lhdGVkV2l0aFJvbGVzKCl7XHJcbiAgICBjb25zdCByb2xlSWRzID0gdGhpcy5jb250cm9scy5wcm9ncmFtX3JvbGVzPy52YWx1ZT8ubWFwKChlbGU6IGFueSkgPT4gZWxlPy5faWQpO1xyXG4gICAgIHRoaXMucHJvZ3JhbVNlcnZpY2UuZmV0Y2hBbGxSb2xlR3JvdXBzKHJvbGVJZHMpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDoocmVzOmFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5saXN0cy5PV05FUlNfR1JPVVBTID0gcmVzO1xyXG4gICAgICAgICAgY29uc3Qgcm9sZUlkczogQXJyYXk8c3RyaW5nPiAgPSB0aGlzLmNvbnRyb2xzLnByb2dyYW1fcm9sZXM/LnZhbHVlLm1hcCgoZWxlOiBhbnkpID0+IGVsZS5faWQpXHJcbiAgICAgICAgIGNvbnN0IGdyb3VwRGV0YWlscyA9ICB0aGlzLmNvbnRyb2xzLnByb2dyYW1fb3duZXJzX2dyb3VwPy52YWx1ZS5maWx0ZXIoKHJvbGVJZDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmKHJvbGVJZC5yb2xlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICBsZXQgaXNTYW1lUm9sZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHJvbGVJZC5yb2xlcy5mb3JFYWNoKChyb2xlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmKHJvbGVJZHMuaW5jbHVkZXMocm9sZS5yb2xlSWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlzU2FtZVJvbGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgaWYoaXNTYW1lUm9sZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJvbGVJZDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX293bmVyc19ncm91cCcsIGdyb3VwRGV0YWlscyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgfSlcclxuICB9XHJcblxyXG4gIHNldERlZmF1bHRPd25lcnModXNlckxpc3Q6IGFueSkge1xyXG4gICAgY29uc3QgbG9nZ2VkSW51c2VyID0gdGhpcy5jdXJyZW50VXNlcigpO1xyXG4gICAgY29uc3QgZGVmYXVsdE93bmVyID0gdXNlckxpc3QuZmlsdGVyKChlbGU6IGFueSkgPT4gWydBRE1JTicsICdLRVlfQURNSU4nXS5pbmNsdWRlcyhlbGU/LnVzZXJfcm9sZSkgJiYgZWxlPy5tZW1iZXJfaWQgIT0gbG9nZ2VkSW51c2VyPy5tZW1iZXJfaWQpO1xyXG4gICAgdGhpcy5saXN0cy5OT05fUkVNT1ZBQkxFX09XTkVSUyA9IHRoaXMudW5pcXVlQnlQcm9wKFsuLi5bbG9nZ2VkSW51c2VyXSwgLi4uZGVmYXVsdE93bmVyXSwgJ21lbWJlcl9pZCcpO1xyXG4gICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fb3duZXJzJywgdGhpcy5saXN0cy5OT05fUkVNT1ZBQkxFX09XTkVSUyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZmV0Y2hPcmdhbml6YXRpb25Vc2VycyhkYXRhPzogYW55KXtcclxuICAgIHRoaXMubGlzdExvYWRpbmdTdGF0ZS5VU0VSUyA9IHRydWU7XHJcbiAgICB0aGlzLnByb2dyYW1TZXJ2aWNlLmZldGNoQWxsT3JnVXNlcigpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6KHJlczphbnkpPT57XHJcbiAgICAgICAgdGhpcy5saXN0cy5BTExfVVNFUiA9IHJlcztcclxuICAgICAgICB0aGlzLmxpc3RzLkFTU0lHTkVFUyA9IHJlcztcclxuICAgICAgICB0aGlzLmxpc3RzLlJFVklFV0VSUyA9IHJlcztcclxuICAgICAgICB0aGlzLmxpc3RzLk9WRVJTRUVSUyA9IHJlcztcclxuICAgICAgICBpZih0aGlzLm1vZGUgIT09J0VESVQnKXtcclxuICAgICAgICAgIHRoaXMubGlzdHMuREVGQVVMVF9BU1NJR05FRVMgPSByZXM7XHJcbiAgICAgICAgICB0aGlzLmxpc3RzLkRFRkFVTFRfUkVWSUVXRVJTID0gcmVzO1xyXG4gICAgICAgICAgdGhpcy5saXN0cy5ERUZBVUxUX09WRVJTRUVSUyA9IHJlcztcclxuICAgICAgICB9ZWxzZSBpZih0aGlzLm1vZGUgPT09ICdFRElUJyl7XHJcbiAgICAgICAgICAgaWYoIXRoaXMuY29udHJvbHMucHJvZ3JhbV9hc3NpZ25lZT8udmFsdWU/Lmxlbmd0aCl7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdHMuREVGQVVMVF9BU1NJR05FRVMgPSByZXM7XHJcbiAgICAgICAgICAgfVxyXG4gICAgICAgICAgIGlmKCF0aGlzLmNvbnRyb2xzLnByb2dyYW1fcmV2aWV3ZXI/LnZhbHVlPy5sZW5ndGgpe1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RzLkRFRkFVTFRfUkVWSUVXRVJTID0gcmVzO1xyXG4gICAgICAgICAgIH1cclxuICAgICAgICAgICBpZighdGhpcy5jb250cm9scy5wcm9ncmFtX292ZXJzZWVyPy52YWx1ZT8ubGVuZ3RoKXtcclxuICAgICAgICAgICAgdGhpcy5saXN0cy5ERUZBVUxUX09WRVJTRUVSUyA9IHJlcztcclxuICAgICAgICAgICB9ICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5saXN0TG9hZGluZ1N0YXRlLlVTRVJTID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOigpPT57dGhpcy5saXN0TG9hZGluZ1N0YXRlLlVTRVJTID0gZmFsc2U7fVxyXG4gICAgfSlcclxuICB9XHJcblxyXG5cclxuICBmZXRjaE9yZ2FuaXphdGlvbkdyb3VwKGRhdGE/OiBhbnkpe1xyXG4gICAgdGhpcy5wcm9ncmFtU2VydmljZS5mZXRjaENvbXBsaWFuY2VHcm91cHMoKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgbmV4dDoocmVzOmFueSk9PntcclxuICAgICAgICAgdGhpcy5saXN0cy5BTExfR1JPVVAgPSByZXM7XHJcblxyXG4gICAgICAgICB0aGlzLmxpc3RzLkFTU0lHTkVFU19HUk9VUCA9IHJlcztcclxuICAgICAgICAgdGhpcy5saXN0cy5SRVZJRVdFUlNfR1JPVVAgPSByZXM7XHJcblxyXG4gICAgICAgICB0aGlzLmxpc3RzLk9WRVJTRUVSU19HUk9VUCA9IHJlcztcclxuXHJcbiAgICAgICAgIGlmKHRoaXMubW9kZSAhPT0nRURJVCcpe1xyXG4gICAgICAgICAgdGhpcy5saXN0cy5ERUZBVUxUX0FTU0lHTkVFU19HUk9VUCA9IHJlcztcclxuICAgICAgICAgIHRoaXMubGlzdHMuREVGQVVMVF9SRVZJRVdFUlNfR1JPVVAgPSByZXM7XHJcbiAgICAgICAgICB0aGlzLmxpc3RzLkRFRkFVTFRfT1ZFUlNFRVJTX0dST1VQID0gcmVzO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgIGVycm9yOihlcnI6YW55KT0+e31cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBmaWxlVXBsb2FkVHJhY2tlciA9IHtcclxuICAgIGRlc2NyaXB0aW9uOiBbXSxcclxuICAgIG9iamVjdGl2ZTogW11cclxuICB9XHJcblxyXG4gIHNlbGVjdEZpbGUodHlwZTogYW55LCBmaWxlczogYW55KSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBmaWxlcy5sZW5ndGggLSAxOyBpKyspIHtcclxuICAgICAgY29uc3QgbmFtZSA9IGZpbGVzW2ldLmZpbGUubmFtZSA/PyAnJztcclxuICAgICAgdGhpcy51cGxvYWRGaWxlcyh0eXBlLCBmaWxlc1tpXS5maWxlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwbG9hZEZpbGVzKHR5cGU6ICdERVNDUklQVElPTicgfCAnT0JKRUNUSVZFJywgZmlsZTogYW55KSB7XHJcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgZmlsZSk7XHJcbiAgICBjb25zdCBkZXN0aW5hdGlvblN0cmluZyA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uSWQoKS50b1N0cmluZygpO1xyXG4gICAgY29uc3QgZHVtbXlGaWxlID0ge1xyXG4gICAgICBmaWxlX3VybF9wYXRoOiBgJHtmaWxlPy5uYW1lfWAsXHJcbiAgICAgIG5hbWU6IGAke2ZpbGU/Lm5hbWV9YCxcclxuICAgICAgdXBsb2FkaW5nOiB0cnVlLFxyXG4gICAgICBvcmdfZmlsZTogYCR7ZmlsZT8ubmFtZX1gXHJcbiAgICB9XHJcbiAgICBpZiAodHlwZSA9PT0gJ0RFU0NSSVBUSU9OJykge1xyXG4gICAgICBsZXQgZGVzY3JpcHRpb24gPSB0aGlzLmNvbnRyb2xzPy5kZXNjcmlwdGlvbl9hdHRhY2htZW50Py52YWx1ZSA/PyBbXTtcclxuICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fZGVzY3JpcHRpb25fYXR0YWNobWVudHMnLCBbLi4uZGVzY3JpcHRpb24sIC4uLltkdW1teUZpbGVdXSlcclxuICAgICAgdGhpcy5wcm9ncmFtU2VydmljZS51cGxvYWRGaWxlcyhmb3JtRGF0YSwgZGVzdGluYXRpb25TdHJpbmcpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBkZXNjcmlwdGlvbiA9IHRoaXMuY29udHJvbHM/LmRlc2NyaXB0aW9uX2F0dGFjaG1lbnQ/LnZhbHVlID8/IFtdO1xyXG4gICAgICAgICAgbGV0IGRlc2NyaXB0aW9uSW5kZXggPSBkZXNjcmlwdGlvbi5maW5kSW5kZXgoKGVsZTogYW55KSA9PiBlbGU/Lm9yZ19maWxlID09PSByZXM/Lm9yZ19maWxlKTtcclxuICAgICAgICAgIGRlc2NyaXB0aW9uW2Rlc2NyaXB0aW9uSW5kZXhdID0gcmVzXHJcbiAgICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZXNjcmlwdGlvbl9hdHRhY2htZW50cycsIHRoaXMudW5pcXVlQnlQcm9wKGRlc2NyaXB0aW9uLCAnb3JnX2ZpbGUnKSlcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgIGRlc2NyaXB0aW9uID0gdGhpcy5jb250cm9scz8uZGVzY3JpcHRpb25fYXR0YWNobWVudD8udmFsdWUgPz8gW107XHJcbiAgICAgICAgICBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uLmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZT8ub3JnX2ZpbGUgIT09IGZpbGU/Lm5hbWUpO1xyXG4gICAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fZGVzY3JpcHRpb25fYXR0YWNobWVudHMnLCB0aGlzLnVuaXF1ZUJ5UHJvcChkZXNjcmlwdGlvbiwgJ29yZ19maWxlJykpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnT0JKRUNUSVZFJykge1xyXG4gICAgICBsZXQgZGVzY3JpcHRpb24gPSB0aGlzLmNvbnRyb2xzPy5kZXNjcmlwdGlvbl9hdHRhY2htZW50Py52YWx1ZSA/PyBbXTtcclxuICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fZGVzY3JpcHRpb25fYXR0YWNobWVudHMnLCBbLi4uZGVzY3JpcHRpb24sIC4uLltkdW1teUZpbGVdXSlcclxuICAgICAgdGhpcy5wcm9ncmFtU2VydmljZS51cGxvYWRGaWxlcyhmb3JtRGF0YSwgZGVzdGluYXRpb25TdHJpbmcpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBkZXNjcmlwdGlvbiA9IHRoaXMuY29udHJvbHM/LmRlc2NyaXB0aW9uX2F0dGFjaG1lbnQ/LnZhbHVlID8/IFtdO1xyXG4gICAgICAgICAgbGV0IGRlc2NyaXB0aW9uSW5kZXggPSBkZXNjcmlwdGlvbi5maW5kSW5kZXgoKGVsZTogYW55KSA9PiBlbGU/Lm9yZ19maWxlID09PSByZXM/Lm9yZ19maWxlKTtcclxuICAgICAgICAgIGRlc2NyaXB0aW9uW2Rlc2NyaXB0aW9uSW5kZXhdID0gcmVzXHJcbiAgICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZXNjcmlwdGlvbl9hdHRhY2htZW50cycsIHRoaXMudW5pcXVlQnlQcm9wKGRlc2NyaXB0aW9uLCAnb3JnX2ZpbGUnKSlcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgIGRlc2NyaXB0aW9uID0gdGhpcy5jb250cm9scz8uZGVzY3JpcHRpb25fYXR0YWNobWVudD8udmFsdWUgPz8gW107XHJcbiAgICAgICAgICBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uLmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZT8ub3JnX2ZpbGUgIT09IGZpbGU/Lm5hbWUpO1xyXG4gICAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fZGVzY3JpcHRpb25fYXR0YWNobWVudHMnLCB0aGlzLnVuaXF1ZUJ5UHJvcChkZXNjcmlwdGlvbiwgJ29yZ19maWxlJykpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGRlbGV0ZUF0dGFjaG1lbnQodHlwZTogJ0RFU0NSSVBUSU9OJyB8ICdPQkpFQ1RJVkUnLCBmaWxlOiBhbnkpIHtcclxuICAgIGlmICh0eXBlID09PSAnREVTQ1JJUFRJT04nKSB7XHJcbiAgICAgIGxldCBkZXNjcmlwdGlvbiA9IHRoaXMuY29udHJvbHM/LmRlc2NyaXB0aW9uX2F0dGFjaG1lbnQ/LnZhbHVlID8/IFtdO1xyXG4gICAgICBpZiAoZGVzY3JpcHRpb24pIHtcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uLmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZT8ub3JnX2ZpbGUgIT09IGZpbGU/Lm9yZ19maWxlKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZXNjcmlwdGlvbl9hdHRhY2htZW50cycsIGRlc2NyaXB0aW9uKVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdPQkpFQ1RJVkUnKSB7XHJcbiAgICAgIGxldCBvYmplY3RpdmUgPSB0aGlzLmNvbnRyb2xzPy5vYmplY3RpdmVfYXR0YWNobWVudHM/LnZhbHVlID8/IFtdO1xyXG4gICAgICBpZiAob2JqZWN0aXZlKSB7XHJcbiAgICAgICAgb2JqZWN0aXZlID0gb2JqZWN0aXZlLmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZT8ub3JnX2ZpbGUgIT09IGZpbGU/Lm9yZ19maWxlKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZXNjcmlwdGlvbl9hdHRhY2htZW50cycsIG9iamVjdGl2ZSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIHNlbGVjdEFsbFJvbGVPd25lcihldnQ6IGFueSkge1xyXG4gICAgLy9uZWVkIHRvIGZldGNoIGFsbCB0aGUgdXNlcnMgZm9yIGFsbCB0aGUgc2VsZWN0ZWQgcm9sZXNcclxuICAgIGxldCByb2xlSWQgPSBbXTtcclxuICAgIGlmKGV2dD8udGFyZ2V0Py5jaGVja2VkKXtcclxuICAgICAgIHJvbGVJZCA9IHRoaXMuY29udHJvbHMucHJvZ3JhbV9yb2xlcz8udmFsdWU/Lm1hcCgoZWxlOiBhbnkpID0+IGVsZT8uX2lkKTtcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmxvZyhcInRoaXMuY29udHJvbHMucHJvZ3JhbV9yb2xlcz8udmFsdWUgPT0+XCIsIHRoaXMuY29udHJvbHMucHJvZ3JhbV9yb2xlcz8udmFsdWUpO1xyXG4gICAgICByb2xlSWQgPSB0aGlzLmNvbnRyb2xzLnByb2dyYW1fcm9sZXM/LnZhbHVlPy5tYXAoKGVsZTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYoWydrZXkgYWRtaW4nLCAnYWRtaW4nXS5pbmNsdWRlcyhlbGUucm9sZU5hbWUudG9Mb3dlckNhc2UoKSkgKSB7XHJcbiAgICAgICAgICByZXR1cm4gZWxlPy5faWRcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2coXCJ0aGlzLmNvbnRyb2xzLnByb2dyYW1fb3duZXJzPy52YWx1ZSA9PT5cIixyb2xlSWQsICB0aGlzLmNvbnRyb2xzLnByb2dyYW1fb3duZXJzPy52YWx1ZSlcclxuICAgIHRoaXMucHJvZ3JhbVNlcnZpY2UuZmV0Y2hBbGxSb2xlVXNlcnMocm9sZUlkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCB1c2VyID0gdGhpcy51bmlxdWVCeVByb3AoWy4uLnJlcz8uZGF0YV0sICdtZW1iZXJfaWQnKVxyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX293bmVycycsIHVzZXIpO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7IH1cclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcblxyXG5cclxuICAvKipcclxuICAgKiAjIyMjIERlc2NyaXB0aW9uXHJcbiAgICpcclxuICAgKiBSZXR1cm5zIHRoZSB1bmlxdWUgYXJyYXkgb2Ygb2JqZWN0IGJhc2VkIG9uIHVuaXF1ZSBrZXlcclxuICAgKiBAcGFyYW0gYXJyYXlcclxuICAgKiBAcGFyYW0ga2V5XHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICB1bmlxdWVCeVByb3AoYXJyYXk6IGFueSwga2V5OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBBcnJheS5mcm9tKFxyXG4gICAgICBhcnJheVxyXG4gICAgICAgIC5yZWR1Y2UoXHJcbiAgICAgICAgICAoYWNjOiBhbnksIGl0ZW06IGFueSkgPT4gKFxyXG4gICAgICAgICAgICBpdGVtICYmIGl0ZW1ba2V5XSAmJiBhY2Muc2V0KGl0ZW1ba2V5XSwgaXRlbSksXHJcbiAgICAgICAgICAgIGFjY1xyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIG5ldyBNYXAoKVxyXG4gICAgICAgIClcclxuICAgICAgICAudmFsdWVzKClcclxuICAgICk7XHJcbiAgfVxyXG4gIHNldExpc3QobGlzdDogYW55W10sIGlkczogYW55W10sIGtleTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBkYXRhOiBhbnkgPSBbXTtcclxuICAgIGlkcy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgaW5kZXggPSBsaXN0LmZpbmRJbmRleCgobGlzdEVsZW1lbnQ6IGFueSkgPT4gbGlzdEVsZW1lbnRba2V5XSA9PSBlbGVtZW50KTtcclxuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgIGRhdGEucHVzaChsaXN0W2luZGV4XSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gICBzYXZlUHJvZ3JhbSgpe1xyXG4gICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgICBsZXQgcGF5bG9hZCA9ICB0aGlzLnByb2dyYW1TZXJ2aWNlLmJ1aWxkUGF5bG9hZCh0aGlzLnByb2dyYW1Gb3JtLHRoaXMpO1xyXG4gICAgICBpZihwYXlsb2FkICYmIHRoaXMubW9kZSA9PT0gJ0NSRUFURScpe1xyXG4gICAgICB0aGlzLnByb2dyYW1TZXJ2aWNlLnNhdmVQcm9ncmFtKHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6KHJlczphbnkpPT57XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNob3dTbWlsZXkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzU21pbGV5T24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlZFByb2dyYW1JZCA9IHJlcy5faWRcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6KGVycjphbnkpPT57XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnVpS2l0U2VydmljZS5pc1NtaWxleU9uID0gZmFsc2U7XHJcbiAgICAgICAgaWYoZXJyLmVycm9yLm1lc3NhZ2UgPT0gXCJDYXRlZ29yeSBhbHJlYWR5IGV4aXN0LlwiKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRoaXMuaXNOYW1lRXhpc3RzID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgIH1cclxuICAgICAgfSlcclxuICAgfVxyXG4gICBpZihwYXlsb2FkICYmIHRoaXMubW9kZSA9PT0gJ0VESVQnKXtcclxuICAgIHRoaXMucHJvZ3JhbVNlcnZpY2UudXBkYXRlUHJvZ3JhbShwYXlsb2FkLCB0aGlzLnByb2dyYW1JZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDoocmVzOmFueSk9PntcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2hvd1NtaWxleSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy51aUtpdFNlcnZpY2UuaXNTbWlsZXlPbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVkUHJvZ3JhbUlkID0gcmVzLl9pZDtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6KGVycjphbnkpPT57XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnVpS2l0U2VydmljZS5pc1NtaWxleU9uID0gZmFsc2U7XHJcbiAgICAgICAgaWYoZXJyLmVycm9yLm1lc3NhZ2UgPT0gXCJDYXRlZ29yeSBhbHJlYWR5IGV4aXN0LlwiKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRoaXMuaXNOYW1lRXhpc3RzID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiB9XHJcbiAgfVxyXG5cclxuICBhY3Rpb24oZXZlbnQ6IHN0cmluZykge1xyXG4gICAgY29uc29sZS5sb2coZXZlbnQpXHJcbiAgICBzd2l0Y2ggKGV2ZW50KSB7XHJcbiAgICAgIGNhc2UgJ2FkZE1vcmUnOlxyXG4gICAgICAgIHRoaXMucmVzZXRGb3JtKCk7XHJcbiAgICAgICAgdGhpcy5wb3B1bGF0ZU9wdGlvbmFsRmllbGRzKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3ZpZXdQcm9ncmFtJzpcclxuICAgICAgIHRoaXMudmlld1Byb2dyYW1zKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB2aWV3UHJvZ3JhbXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc2Nvbm5lY3RSZWZyZXNoLmVtaXQoZmFsc2UpO1xyXG4gICAgbGV0IHVybDogc3RyaW5nO1xyXG4gICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ob3N0LnN0YXJ0c1dpdGgoJ2xvY2FsaG9zdCcpKSB7XHJcbiAgICAgIHVybCA9ICdodHRwOi8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdXJsID0gJ2h0dHBzOi8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh3aW5kb3cubG9jYXRpb24uaG9zdC5zdGFydHNXaXRoKCdsb2NhbGhvc3QnKSkge1xyXG4gICAgICB1cmwgKz0gJy9wcm9ncmFtLXdvcmtyb29tP2lkPScgKyB0aGlzLmNyZWF0ZWRQcm9ncmFtSWQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB1cmwgKz0gJy9wcm9ncmFtL3Byb2dyYW0td29ya3Jvb20/aWQ9JyArIHRoaXMuY3JlYXRlZFByb2dyYW1JZDtcclxuICAgIH1cclxuXHJcbiAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHVybDtcclxuICAgIGNvbnNvbGUubG9nKFwidGhpcy5jcmVhdGVkUHJvZ3JhbUlkID09PlwiLCB0aGlzLmNyZWF0ZWRQcm9ncmFtSWQpXHJcblxyXG4gIH1cclxuICByZXNldEZvcm0oKXtcclxuICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzU21pbGV5T24gPSBmYWxzZTtcclxuICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20gPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd1NtaWxleSA9IGZhbHNlO1xyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICBjb25zdCAgREVGQVVMVF9WQUxVRVMgPSB7XHJcbiAgICBwcm9ncmFtX3R5cGU6MSxcclxuICAgIHByb2dyYW1fbmFtZTonJyxcclxuICAgIHByb2dyYW1fZGVzY3JpcHRpb246JycsXHJcbiAgICBwcm9ncmFtX2Rlc2NyaXB0aW9uX2F0dGFjaG1lbnRzOltdLFxyXG4gICAgcHJvZ3JhbV9vYmplY3RpdmU6JycsXHJcbiAgICBwcm9ncmFtX29iamVjdGl2ZV9hdHRhY2htZW50czpbXSxcclxuICAgIHByb2dyYW1fcm9sZXM6W10sXHJcbiAgICBhbGxfdXNlcl9pbl9yb2xlOmZhbHNlLFxyXG4gICAgcHJvZ3JhbV9vd25lcnM6W10sXHJcbiAgICBwcm9ncmFtX293bmVyc19ncm91cDpbXSxcclxuICAgIHByb2dyYW1fYXBwcm92ZXI6W10sXHJcbiAgICBwZXJmb3JtYW5jZV9jYWxjdWxhdGlvbjogXCJQQVNUX0VWRU5UXCIsXHJcbiAgICByZWN1cnJpbmdfZnJlcXVlbmN5OmZhbHNlLFxyXG4gICAgbG9ja19zY29wZV9jaGFuZ2U6ZmFsc2UsXHJcbiAgICBmcmFtZXdvcms6W10sXHJcbiAgICByYzpbXSxcclxuICAgIHByb2dyYW1fYXNzaWduZWU6IFtdLFxyXG4gICAgcHJvZ3JhbV9hc3NpZ25lZV9ncm91cDogW10sXHJcbiAgICBwcm9ncmFtX2RlZmF1bHRfYXNzaWduZWU6IFtdLFxyXG4gICAgcHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlX2dyb3VwOiBbXSxcclxuICAgIGFzc2lnbmVlX2NvbXBsZXRpb25fY3JpdGVyaWE6ICdBTllPTkUnLFxyXG4gICAgcHJvZ3JhbV9yZXZpZXdlcjogW10sXHJcbiAgICBwcm9ncmFtX3Jldmlld2VyX2dyb3VwOiBbXSxcclxuICAgIHByb2dyYW1fZGVmYXVsdF9yZXZpZXdlcjogW10sXHJcbiAgICBwcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXJfZ3JvdXA6IFtdLFxyXG4gICAgcmV2aWV3ZXJfY29tcGxldGlvbl9jcml0ZXJpYTogJ1NFUVVFTlRJQUwnLFxyXG4gICAgcHJvZ3JhbV9vdmVyc2VlcjogW10sXHJcbiAgICBwcm9ncmFtX292ZXJzZWVyX2dyb3VwOiBbXSxcclxuICAgIHByb2dyYW1fZGVmYXVsdF9vdmVyc2VlcjogW10sXHJcbiAgICBwcm9ncmFtX2RlZmF1bHRfb3ZlcnNlZXJfZ3JvdXA6IFtdLFxyXG4gICAgcHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2VlcjogW10sXHJcbiAgICBwcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyX2dyb3VwOiBbXSxcclxuICAgIHByb2dyYW1fYXNzZXNzbWVudHM6IFtdLFxyXG4gICAgZXZpZGVuY2VfcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgYWxsb3dfYW55X2ZpbGVfa2V5X2V2aWRlbmNlOiBmYWxzZSxcclxuICAgIGN1c3RvbV9maWVsZHM6IFtdLFxyXG4gICAgcHJvZ3JhbV9zdGF0ZTogMCxcclxuICAgfVxyXG4gICB0aGlzLnJlc2V0QWRkaXRpb25hbE9wdGlvbigpO1xyXG4gICB0aGlzLnByb2dyYW1Gb3JtLnJlc2V0KCk7XHJcbiAgIHRoaXMucHJvZ3JhbUZvcm0ucGF0Y2hWYWx1ZShERUZBVUxUX1ZBTFVFUyk7XHJcbiAgIHRoaXMuZWRpdG9yRGF0YSAgPSB7XHJcbiAgICBwcm9ncmFtT2JqZWN0aXZlOiAnJyxcclxuICAgIHByb2dyYW1EZXNjcmlwdGlvbjogJydcclxuICB9XHJcbiAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICB0aGlzLmlzTmFtZUV4aXN0cyA9IGZhbHNlO1xyXG4gICB0aGlzLmZldGNoUm9sZXMoKTtcclxuICAgdGhpcy5yZWZyZXNoRm9ybS5lbWl0KHRydWUpO1xyXG4gICB0aGlzLmZvcm0ubmF0aXZlRWxlbWVudC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdzdGFydCcgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgY2xvc2VTbWlsZXkoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5zaG93U21pbGV5ID0gZmFsc2U7XHJcbiAgICB0aGlzLnVpS2l0U2VydmljZS5pc1NtaWxleU9uID0gZmFsc2U7XHJcbiAgICB0aGlzLmNsb3NlV29ya2Zsb3cuZW1pdCh7IGV2dDogJycsIGNvbmZpcm06IGZhbHNlIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHByb2dyYW0gZGV0YWlscyB3aGVuIHVzZXIgaXMgdHJ5aW5nIHRvIGVkaXQgcHJvZ3JhbVxyXG4gICAqL1xyXG4gIGdldFByb2dyYW1EZXRhaWxzKCkge1xyXG4gICAgdGhpcy5wcm9ncmFtU2VydmljZS5nZXRQcm9ncmFtKHRoaXMucHJvZ3JhbUlkKS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fbmFtZScsIHJlcz8ubmFtZSk7XHJcbiAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX3R5cGUnLCByZXM/LnByb2dyYW1UeXBlKTtcclxuICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fb2JqZWN0aXZlJywgcmVzPy5wcm9ncmFtX29iamVjdGl2ZT8udGV4dCk7XHJcbiAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdhbGxfdXNlcl9pbl9yb2xlJywgcmVzPy5hbGxfdXNlcl9pbl9yb2xlKTtcclxuICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fZGVzY3JpcHRpb25fYXR0YWNobWVudHMnLCByZXM/LmRlc2NyaXB0aW9uPy5hdHRhY2htZW50cyk7XHJcbiAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX29iamVjdGl2ZV9hdHRhY2htZW50cycsIHJlcz8ucHJvZ3JhbV9vYmplY3RpdmU/LmF0dGFjaG1lbnRzKTtcclxuICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3BlcmZvcm1hbmNlX2NhbGN1bGF0aW9uJywgcmVzPy5jYWxjdWxhdGVfcGFzdF91cGNvbWluZ19ldmVudCk7XHJcbiAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdyZWN1cnJpbmdfZnJlcXVlbmN5JywgcmVzPy5wcm9ncmFtX2ZyZXF1ZW5jeSk7XHJcbiAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdsb2NrX3Njb3BlX2NoYW5nZScsIHJlcz8ubG9ja19zY29wZSk7XHJcbiAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX3N0YXRlJywgcmVzPy5zdGF0ZSk7XHJcbiAgICAgIGNvbnN0IHJjID0gcmVzLnJjX2RldGFpbHMubWFwKChlbGU6YW55KSA9PiB7cmV0dXJuIHsuLi5lbGUsaXRlbV9uYW1lIDogZWxlPy5yY19uYW1lLGl0ZW1faWQ6IGVsZT8ucmNfaWR9fSlcclxuICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3JjJyxyYyk7XHJcbiAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdldmlkZW5jZV9yZXF1aXJlZCcsIHJlcz8uZXZpZGVuY2VfdXBsb2FkX2ZsYWcpO1xyXG4gICAgICB0aGlzLnNldEZvcm1GaWVsZCgnYWxsb3dfYW55X2ZpbGVfa2V5X2V2aWRlbmNlJywgcmVzPy5pc19rZXlfZXZpZGVuY2UpO1xyXG4gICAgICBpZihyZXM/LmV2aWRlbmNlX3VwbG9hZF9mbGFnIHx8IHJlcz8uaXNfa2V5X2V2aWRlbmNlKXtcclxuICAgICAgICB0aGlzLmFkZGl0aW9uYWxPcHRpb24uRk9STUFURV9FVklERU5DRSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wb3B1bGF0ZU9wdGlvbmFsRmllbGRzKClcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNldEZvcm1GaWVsZCgnYXNzaWduZWVfY29tcGxldGlvbl9jcml0ZXJpYScsIHJlcy5kZWZhdWx0X2Fzc2lnbmVlX3R5cGUpO1xyXG4gICAgICB0aGlzLnNldEZvcm1GaWVsZCgncmV2aWV3ZXJfY29tcGxldGlvbl9jcml0ZXJpYScsIHJlcy5kZWZhdWx0X3Jldmlld2Vyc190eXBlKTtcclxuXHJcbiAgICAgIHRoaXMuZWRpdG9yRGF0YS5wcm9ncmFtRGVzY3JpcHRpb24gPSByZXMuZGVzY3JpcHRpb24/LnRleHQ7XHJcbiAgICAgIHRoaXMuZWRpdG9yRGF0YS5wcm9ncmFtT2JqZWN0aXZlID0gcmVzLnByb2dyYW1fb2JqZWN0aXZlPy50ZXh0O1xyXG4gICAgICB0aGlzLnNldEZvcm1GaWVsZCgnZnJhbWV3b3JrJyx7Li4ucmVzLmZyYW1ld29ya19kZXRhaWxzLC4uLntfaWQ6cmVzPy5mcmFtZXdvcmtfZGV0YWlscz8uZnJhbWV3b3JrX2lkfX0pXHJcbiAgICAgIGNvbnN0IHJvbGUgPSByZXM/LnJvbGVzPy5tYXAoKGVsZTphbnkpID0+ICB7cmV0dXJuIHtfaWQ6ZWxlPy5yb2xlSWQscm9sZU5hbWU6ZWxlPy5yb2xlTmFtZSwgbGljZW5zZVR5cGU6ZWxlPy5saWNlbnNlVHlwZX19KVxyXG4gICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9yb2xlcycsIHJvbGUpO1xyXG4gICAgICBpZihyZXMuYXNzZXNzbWVudERhdGEubGVuZ3RoKSB7XHJcbiAgICAgICAgcmVzLmFzc2Vzc21lbnREYXRhID0gcmVzLmFzc2Vzc21lbnREYXRhLm1hcCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7Li4uZWxlLCBhc3Nlc3NtZW50SWRzOiBlbGU/LmFzc2Vzc21lbnRzLm1hcCgoYXNzZXNzOmFueSkgPT4geyByZXR1cm4gey4uLmFzc2VzcyxpZDphc3Nlc3M/Ll9pZH19KX19XHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9hc3Nlc3NtZW50cycsIHJlcy5hc3Nlc3NtZW50RGF0YSk7XHJcbiAgICAgICAgdGhpcy5hZGRpdGlvbmFsT3B0aW9uLkFTU0VTU01FTlQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucG9wdWxhdGVPcHRpb25hbEZpZWxkcygpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZihyZXMuY3VzdG9tX2ZpZWxkcy5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgnY3VzdG9tX2ZpZWxkcycsIHJlcy5jdXN0b21fZmllbGRzKTtcclxuICAgICAgICB0aGlzLmFkZGl0aW9uYWxPcHRpb24uQ1VTVE9NX0ZJRUxEUyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wb3B1bGF0ZU9wdGlvbmFsRmllbGRzKCk7XHJcblxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaXNBcHByb3ZlckRpc2FibGVkID0gcmVzPy5pc0FwcHJvdmVyRGlzYWJsZWQgPz8gZmFsc2U7XHJcbiAgICAgIHRoaXMucG9wdWxhdGVNZW1iZXJzKHJlcyk7XHJcbiAgICAgIHRoaXMucG9wdWxhdGVHcm91cHMocmVzKTtcclxuICAgICAgdGhpcy5mZXRjaFVzZXJzQXNzb2NpYXRlZFdpdGhSb2xlcygpO1xyXG4gICAgICB0aGlzLmZldGNoR3JvdXBzQXNzb2NpYXRlZFdpdGhSb2xlcygpO1xyXG4gICAgICB0aGlzLmZldGNoT3JnYW5pemF0aW9uR3JvdXAoKTtcclxuICAgICAgdGhpcy5mZXRjaE9yZ2FuaXphdGlvblVzZXJzKCk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcblxyXG5wb3B1bGF0ZU1lbWJlcnMocmVzOmFueSl7XHJcbiAgY29uc3QgaWRzPSBbXHJcbiAgICAuLi5uZXcgU2V0KFtcclxuICAgICAgLi4uKHJlcz8ub3duZXJzID8/IFtdKSxcclxuICAgICAgLi4uKHJlcz8uYXBwcm92ZXJzID8/IFtdKSxcclxuICAgICAgLi4uKHJlcz8uYXNzaWduZWVfaWRzID8/IFtdKSxcclxuICAgICAgLi4uKHJlcz8uZGVmYXVsdF9hc3NpZ25lZV9pZHMgPz8gW10pLFxyXG4gICAgICAuLi4ocmVzPy5yZXZpZXdlcnMgPz8gW10pLFxyXG4gICAgICAuLi4ocmVzPy5kZWZhdWx0X3Jldmlld2VycyA/PyBbXSksXHJcbiAgICAgIC4uLihyZXM/Lm92ZXJzZWVycz8uY2NfZW1haWwgPz8gW10pLFxyXG4gICAgICAuLi4ocmVzPy5vdmVyc2VlcnM/LmZhaWx1cmVfY2NfZW1haWwgPz8gW10pLmZpbHRlcigoZWxlOmFueSkgPT4gZWxlKSxcclxuICAgICAgLi4uKHJlcz8uZGVmYXVsdF9vdmVyc2VlcnM/LmNjX2VtYWlsID8/IFtdKSxcclxuICAgICAgLi4uKHJlcz8uZGVmYXVsdF9vdmVyc2VlcnM/LmZhaWx1cmVfY2NfZW1haWwgPz8gW10pLmZpbHRlcigoZWxlOmFueSkgPT4gZWxlKVxyXG4gICAgIF0pXVxyXG4gICAgICAgdGhpcy5wcm9ncmFtU2VydmljZS5nZXRNZW1lYmVyQnlJZHMoaWRzKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDoocmVzcG9uc2U6YW55KT0+e1xyXG4gICAgICAgICAgICBpZihyZXMub3duZXJzICYmIHJlcz8ub3duZXJzPy5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgIGNvbnN0IG93bmVycyA9IHJlc3BvbnNlLmZpbHRlcigoZWxlOmFueSkgPT4gcmVzPy5vd25lcnMuaW5jbHVkZXMoZWxlPy5tZW1iZXJfaWQpKTtcclxuICAgICAgICAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fb3duZXJzJywgb3duZXJzKTtcclxuICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYocmVzLmFwcHJvdmVycyAmJiByZXM/LmFwcHJvdmVycz8ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICBjb25zdCBhcHByb3ZlcnMgPSByZXNwb25zZS5maWx0ZXIoKGVsZTphbnkpID0+IHJlcz8uYXBwcm92ZXJzLmluY2x1ZGVzKGVsZT8ubWVtYmVyX2lkKSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fYXBwcm92ZXInLCBhcHByb3ZlcnMpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihyZXM/LmFzc2lnbmVlX2lkcyAmJiByZXM/LmFzc2lnbmVlX2lkcz8ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICBjb25zdCBhc3NpZ25lZSA9IHJlc3BvbnNlLmZpbHRlcigoZWxlOmFueSkgPT4gcmVzPy5hc3NpZ25lZV9pZHMuaW5jbHVkZXMoZWxlPy5tZW1iZXJfaWQpKTtcclxuICAgICAgICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9hc3NpZ25lZScsIGFzc2lnbmVlKTtcclxuICAgICAgICAgICAgICB0aGlzLmxpc3RzLkRFRkFVTFRfQVNTSUdORUVTID0gYXNzaWduZWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYocmVzPy5kZWZhdWx0X2Fzc2lnbmVlX2lkcyAmJiByZXM/LmRlZmF1bHRfYXNzaWduZWVfaWRzPy5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgIGNvbnN0IGFzc2lnbmVlID0gcmVzcG9uc2UuZmlsdGVyKChlbGU6YW55KSA9PiByZXM/LmRlZmF1bHRfYXNzaWduZWVfaWRzLmluY2x1ZGVzKGVsZT8ubWVtYmVyX2lkKSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fZGVmYXVsdF9hc3NpZ25lZScsIGFzc2lnbmVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihyZXM/LnJldmlld2VycyAmJiByZXM/LnJldmlld2Vycz8ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICBjb25zdCByZXZpZXdlcnMgPSByZXNwb25zZS5maWx0ZXIoKGVsZTphbnkpID0+IHJlcz8ucmV2aWV3ZXJzLmluY2x1ZGVzKGVsZT8ubWVtYmVyX2lkKSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fcmV2aWV3ZXInLCByZXZpZXdlcnMpO1xyXG4gICAgICAgICAgICAgIHRoaXMubGlzdHMuREVGQVVMVF9SRVZJRVdFUlMgPSByZXZpZXdlcnM7XHJcbiAgICAgICAgICAgICAgdGhpcy5hZGRpdGlvbmFsT3B0aW9uLlJFVklFV0VSID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLnBvcHVsYXRlT3B0aW9uYWxGaWVsZHMoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHJlcz8uZGVmYXVsdF9yZXZpZXdlcnMgJiYgcmVzPy5kZWZhdWx0X3Jldmlld2Vycz8ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICBjb25zdCByZXZpZXdlcnMgPSByZXNwb25zZS5maWx0ZXIoKGVsZTphbnkpID0+IHJlcz8uZGVmYXVsdF9yZXZpZXdlcnMuaW5jbHVkZXMoZWxlPy5tZW1iZXJfaWQpKTtcclxuICAgICAgICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyJywgcmV2aWV3ZXJzKTtcclxuICAgICAgICAgICAgICB0aGlzLmFkZGl0aW9uYWxPcHRpb24uUkVWSUVXRVIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMucG9wdWxhdGVPcHRpb25hbEZpZWxkcygpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYocmVzPy5vdmVyc2VlcnMgJiYgcmVzPy5vdmVyc2VlcnM/LmNjX2VtYWlsPy5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2MgPSByZXNwb25zZS5maWx0ZXIoKGVsZTphbnkpID0+IHJlcz8ub3ZlcnNlZXJzPy5jY19lbWFpbC5pbmNsdWRlcyhlbGU/Lm1lbWJlcl9pZCkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fb3ZlcnNlZXInLCBjYyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RzLkRFRkFVTFRfT1ZFUlNFRVJTID0gY2M7XHJcbiAgICAgICAgICAgICAgdGhpcy5hZGRpdGlvbmFsT3B0aW9uLk9WRVJTRUVSID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLnBvcHVsYXRlT3B0aW9uYWxGaWVsZHMoKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZihyZXM/LmRlZmF1bHRfb3ZlcnNlZXJzICYmIChyZXM/LmRlZmF1bHRfb3ZlcnNlZXJzPy5jY19lbWFpbD8ubGVuZ3RoIHx8IHJlcz8uZGVmYXVsdF9vdmVyc2VlcnM/LmZhaWx1cmVfY2NfZW1haWw/Lmxlbmd0aCkpe1xyXG4gICAgICAgICAgICAgIGlmKHJlcz8uZGVmYXVsdF9vdmVyc2VlcnM/LmNjX2VtYWlsPy5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGVmYXVsdENDID0gcmVzcG9uc2UuZmlsdGVyKChlbGU6YW55KSA9PiByZXM/LmRlZmF1bHRfb3ZlcnNlZXJzPy5jY19lbWFpbC5pbmNsdWRlcyhlbGU/Lm1lbWJlcl9pZCkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fZGVmYXVsdF9vdmVyc2VlcicsIGRlZmF1bHRDQyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmKHJlcz8uZGVmYXVsdF9vdmVyc2VlcnM/LmZhaWx1cmVfY2NfZW1haWw/Lmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmYWlsQ0MgPSByZXNwb25zZS5maWx0ZXIoKGVsZTphbnkpID0+IHJlcz8uZGVmYXVsdF9vdmVyc2VlcnM/LmZhaWx1cmVfY2NfZW1haWwuaW5jbHVkZXMoZWxlPy5tZW1iZXJfaWQpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyJywgZmFpbENDKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuYWRkaXRpb25hbE9wdGlvbi5PVkVSU0VFUiA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMucG9wdWxhdGVPcHRpb25hbEZpZWxkcygpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICB9KVxyXG59XHJcblxyXG5cclxucG9wdWxhdGVHcm91cHMocmVzOmFueSl7XHJcbiAgY29uc3QgaWRzPSBbXHJcbiAgICAuLi5uZXcgU2V0KFtcclxuICAgICAgLi4uKHJlcz8ub3duZXJzX2dyb3VwID8/IFtdKSxcclxuICAgICAgLi4uKHJlcz8uYXNzaWduZWVfZ3JvdXBfaWRzID8/IFtdKSxcclxuICAgICAgLi4uKHJlcz8uZGVmYXVsdF9hc3NpZ25lZV9ncm91cF9pZHMgPz8gW10pLFxyXG4gICAgIF0pXVxyXG4gICAgICAgdGhpcy5wcm9ncmFtU2VydmljZS5nZXRNZW1iZXJCeUdyb3VwcyhpZHMpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OihyZXNwOmFueSk9PntcclxuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSByZXNwPy5kYXRhO1xyXG4gICAgICAgICAgICBpZihyZXMub3duZXJzX2dyb3VwICYmIHJlcz8ub3duZXJzX2dyb3VwPy5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgIGNvbnN0IG93bmVycyA9IHJlc3BvbnNlLmZpbHRlcigoZWxlOmFueSkgPT4gcmVzPy5vd25lcnNfZ3JvdXAuaW5jbHVkZXMoZWxlPy5ncm91cF9pZCkpO1xyXG4gICAgICAgICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9vd25lcnNfZ3JvdXAnLCBvd25lcnMpO1xyXG4gICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihyZXMuYXNzaWduZWVfZ3JvdXBfaWRzICYmIHJlcz8uYXNzaWduZWVfZ3JvdXBfaWRzPy5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgIGNvbnN0IGFzc2lnbmVlID0gcmVzcG9uc2UuZmlsdGVyKChlbGU6YW55KSA9PiByZXM/LmFzc2lnbmVlX2dyb3VwX2lkcy5pbmNsdWRlcyhlbGU/Lmdyb3VwX2lkKSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fYXNzaWduZWVfZ3JvdXAnLCBhc3NpZ25lZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5saXN0cy5ERUZBVUxUX0FTU0lHTkVFU19HUk9VUCA9IGFzc2lnbmVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHJlcz8uZGVmYXVsdF9hc3NpZ25lZV9ncm91cF9pZHMgJiYgcmVzPy5kZWZhdWx0X2Fzc2lnbmVlX2dyb3VwX2lkcz8ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICBjb25zdCBhc3NpZ25lZSA9IHJlc3BvbnNlLmZpbHRlcigoZWxlOmFueSkgPT4gcmVzPy5kZWZhdWx0X2Fzc2lnbmVlX2dyb3VwX2lkcy5pbmNsdWRlcyhlbGU/Lmdyb3VwX2lkKSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fZGVmYXVsdF9hc3NpZ25lZV9ncm91cCcsIGFzc2lnbmVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIEFzIG9mIG5vdyBncm91cHMgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHJldmlld2VyIGFuZCBvdmVyc2VlZXIgaWYgdGhpcyBncm91cCBmZWF0dXJlIGdldHMgaW5jb3BlcmF0ZWQgaW5cclxuICAgICAgICAgIC8vZnV0dXJlIG5lZWQgdG8gYWRkIGdyb3VwIGNvbmRpdGlvbiBoZXJlIHRvIHByZXBvcHVsYXRlIHRoZSBkYXRhIHdoaWxlIGVkaXRpbmcuXHJcbiAgICAgICB9KVxyXG59XHJcblxyXG4gIHJlc2V0QWRkaXRpb25hbE9wdGlvbigpIHtcclxuICAgIHRoaXMuYWRkaXRpb25hbE9wdGlvbi5ST0xFUyA9IGZhbHNlO1xyXG4gICAgdGhpcy5hZGRpdGlvbmFsT3B0aW9uLk9XTkVSUyA9IGZhbHNlO1xyXG4gICAgdGhpcy5hZGRpdGlvbmFsT3B0aW9uLkFQUFJPVkVSID0gZmFsc2U7XHJcbiAgICB0aGlzLmFkZGl0aW9uYWxPcHRpb24uUFJPR1JBTV9GUkVRVUVOQ1kgPSBmYWxzZTtcclxuICAgIHRoaXMuYWRkaXRpb25hbE9wdGlvbi5TQ09QRV9DSEFOR0VTID0gZmFsc2U7XHJcbiAgICB0aGlzLmFkZGl0aW9uYWxPcHRpb24uUkMgPSBmYWxzZTtcclxuICAgIHRoaXMuYWRkaXRpb25hbE9wdGlvbi5BU1NJR05FRVMgPSBmYWxzZTtcclxuICAgIHRoaXMuYWRkaXRpb25hbE9wdGlvbi5SRVZJRVdFUiA9IGZhbHNlO1xyXG4gICAgdGhpcy5hZGRpdGlvbmFsT3B0aW9uLk9WRVJTRUVSID0gZmFsc2U7XHJcbiAgICB0aGlzLmFkZGl0aW9uYWxPcHRpb24uQVNTRVNTTUVOVCA9IGZhbHNlO1xyXG4gICAgdGhpcy5hZGRpdGlvbmFsT3B0aW9uLkZPUk1BVEVfRVZJREVOQ0UgPSBmYWxzZTtcclxuICAgIHRoaXMuYWRkaXRpb25hbE9wdGlvbi5DVVNUT01fRklFTERTID0gZmFsc2U7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|