@bnsights/bbsf-admin-portal 1.0.4 → 1.0.8
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/bnsights-bbsf-admin-portal-1.0.8.tgz +0 -0
- package/bundles/bnsights-bbsf-admin-portal.umd.js +8335 -3660
- package/bundles/bnsights-bbsf-admin-portal.umd.js.map +1 -1
- package/esm2015/lib/Pages/ActiveDirectories/active-directory-add/active-directory-add.component.js +2 -2
- package/esm2015/lib/Pages/account/account-routing.module.js +9 -1
- package/esm2015/lib/Pages/account/account.component.js +15 -6
- package/esm2015/lib/Pages/account/account.module.js +19 -8
- package/esm2015/lib/Pages/account/activation/activation.component.js +91 -0
- package/esm2015/lib/Pages/account/forgot-password/forgot-password.component.js +54 -0
- package/esm2015/lib/Pages/account/rest-password/rest-password.component.js +89 -0
- package/esm2015/lib/Pages/account/upload-license/upload-license.component.js +70 -0
- package/esm2015/lib/Pages/configurations/configuration/configuration.component.js +203 -184
- package/esm2015/lib/Pages/core/authentication/auth.guard.js +10 -4
- package/esm2015/lib/Pages/core/authentication/auth.service.js +1 -2
- package/esm2015/lib/Pages/departments/department/department.component.js +12 -9
- package/esm2015/lib/Pages/departments/department-info/department-info.component.js +1 -1
- package/esm2015/lib/Pages/departments/departments.module.js +6 -4
- package/esm2015/lib/Pages/helpCenter/help-center/help-center.component.js +9 -9
- package/esm2015/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.js +9 -9
- package/esm2015/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.js +9 -9
- package/esm2015/lib/Pages/home/home.component.js +2 -2
- package/esm2015/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.js +1 -1
- package/esm2015/lib/Pages/jobs/jobs/jobs.component.js +1 -1
- package/esm2015/lib/Pages/localizations/localizations.component.js +10 -11
- package/esm2015/lib/Pages/lookups/lookup/lookup.component.js +10 -10
- package/esm2015/lib/Pages/lookups/lookup-group/lookup-group.component.js +5 -5
- package/esm2015/lib/Pages/lookups/lookup-item/lookup-item.component.js +5 -5
- package/esm2015/lib/Pages/notifications/add/add.component.js +11 -13
- package/esm2015/lib/Pages/notifications/edit/edit.component.js +11 -13
- package/esm2015/lib/Pages/notifications/master-layouts/master-layouts.component.js +1 -1
- package/esm2015/lib/Pages/notifications/template-info/template-info.component.js +5 -5
- package/esm2015/lib/Pages/notifications/templates/templates.component.js +9 -9
- package/esm2015/lib/Pages/providers/provider/provider.component.js +2 -1
- package/esm2015/lib/Pages/publicHolidays/public-holiday/public-holiday.component.js +78 -84
- package/esm2015/lib/Pages/roles/permission-set-info/permission-set-info.component.js +1 -1
- package/esm2015/lib/Pages/roles/permissions/permissions.component.js +5 -5
- package/esm2015/lib/Pages/roles/permissionsets/permissionsets.component.js +5 -5
- package/esm2015/lib/Pages/sectors/department-info/department-info.component.js +1 -1
- package/esm2015/lib/Pages/sectors/sector/sector.component.js +5 -5
- package/esm2015/lib/Pages/sectors/sector-info/sector-info.component.js +1 -1
- package/esm2015/lib/Pages/shared/Enums/ConditionRHSType.js +6 -0
- package/esm2015/lib/Pages/shared/Enums/ConfigurationScope.js +8 -0
- package/esm2015/lib/Pages/shared/Enums/ConfigurationType.js +8 -0
- package/esm2015/lib/Pages/shared/Enums/ConfigurationValueSource.js +6 -0
- package/esm2015/lib/Pages/shared/Enums/WFActivityType.js +12 -0
- package/esm2015/lib/Pages/shared/Enums/WFVariableDataType.js +14 -0
- package/esm2015/lib/Pages/shared/Services/AccountService.service.js +41 -0
- package/esm2015/lib/Pages/shared/Services/DepartmentService.service.js +1 -1
- package/esm2015/lib/Pages/shared/Services/WorkFlowVersionService.service.js +24 -0
- package/esm2015/lib/Pages/shared/Services/WorkflowActivityService.service.js +32 -5
- package/esm2015/lib/Pages/shared/Services/WorkflowInstanceService.service.js +24 -0
- package/esm2015/lib/Pages/shared/Services/WorkflowLogVariablesService.service.js +24 -0
- package/esm2015/lib/Pages/shared/Services/WorkflowService.service.js +12 -4
- package/esm2015/lib/Pages/shared/Services/WorkflowVariablesService.service.js +12 -6
- package/esm2015/lib/Pages/shared/models/AccountModels/forgotPasswordModel.js +6 -0
- package/esm2015/lib/Pages/shared/models/DepartmentModels/DepartmentModel.js +3 -2
- package/esm2015/lib/Pages/shared/models/UserModels/ActivationModel.js +3 -0
- package/esm2015/lib/Pages/shared/models/WorkflowModels/WFActivityVariablesModel.js +8 -0
- package/esm2015/lib/Pages/users/users.component.js +7 -6
- package/esm2015/lib/Pages/workflows/activity/workflow-activity-add/workflow-activity-add.component.js +535 -0
- package/esm2015/lib/Pages/workflows/activity/workflow-activity-edit/workflow-activity-edit.component.js +852 -0
- package/esm2015/lib/Pages/workflows/instance-info/instance-info.component.js +309 -0
- package/esm2015/lib/Pages/workflows/tabs/tabs.component.js +611 -430
- package/esm2015/lib/Pages/workflows/version-info/version-info.component.js +143 -0
- package/esm2015/lib/Pages/workflows/workflow/workflow.component.js +136 -148
- package/esm2015/lib/Pages/workflows/workflows-routing.module.js +9 -1
- package/esm2015/lib/Pages/workflows/workflows.module.js +7 -3
- package/esm2015/lib/masterlayout.component.js +1 -2
- package/esm2015/lib/masterlayout.module.js +2 -4
- package/esm2015/public-api.js +2 -1
- package/fesm2015/bnsights-bbsf-admin-portal.js +7678 -3098
- package/fesm2015/bnsights-bbsf-admin-portal.js.map +1 -1
- package/lib/Pages/account/account.component.d.ts +5 -1
- package/lib/Pages/account/account.module.d.ts +11 -6
- package/lib/Pages/account/activation/activation.component.d.ts +32 -0
- package/lib/Pages/account/forgot-password/forgot-password.component.d.ts +23 -0
- package/lib/Pages/account/rest-password/rest-password.component.d.ts +32 -0
- package/lib/Pages/account/upload-license/upload-license.component.d.ts +25 -0
- package/lib/Pages/configurations/configuration/configuration.component.d.ts +12 -8
- package/lib/Pages/core/authentication/auth.guard.d.ts +1 -0
- package/lib/Pages/departments/department/department.component.d.ts +3 -2
- package/lib/Pages/departments/department-info/department-info.component.d.ts +1 -1
- package/lib/Pages/helpCenter/help-center/help-center.component.d.ts +1 -1
- package/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.d.ts +1 -1
- package/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.d.ts +1 -1
- package/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.d.ts +1 -1
- package/lib/Pages/jobs/jobs/jobs.component.d.ts +6 -6
- package/lib/Pages/localizations/localizations.component.d.ts +1 -1
- package/lib/Pages/lookups/lookup/lookup.component.d.ts +1 -1
- package/lib/Pages/lookups/lookup-group/lookup-group.component.d.ts +1 -1
- package/lib/Pages/lookups/lookup-item/lookup-item.component.d.ts +1 -1
- package/lib/Pages/notifications/master-layouts/master-layouts.component.d.ts +1 -1
- package/lib/Pages/notifications/templates/templates.component.d.ts +1 -1
- package/lib/Pages/providers/provider/provider.component.d.ts +1 -1
- package/lib/Pages/publicHolidays/public-holiday/public-holiday.component.d.ts +12 -15
- package/lib/Pages/roles/permission-set-info/permission-set-info.component.d.ts +1 -1
- package/lib/Pages/roles/permissions/permissions.component.d.ts +1 -1
- package/lib/Pages/roles/permissionsets/permissionsets.component.d.ts +1 -1
- package/lib/Pages/sectors/department-info/department-info.component.d.ts +1 -1
- package/lib/Pages/sectors/sector/sector.component.d.ts +1 -1
- package/lib/Pages/sectors/sector-info/sector-info.component.d.ts +1 -1
- package/lib/Pages/shared/Enums/ConditionRHSType.d.ts +4 -0
- package/lib/Pages/shared/Enums/ConfigurationScope.d.ts +5 -0
- package/lib/Pages/shared/Enums/ConfigurationType.d.ts +6 -0
- package/lib/Pages/shared/Enums/ConfigurationValueSource.d.ts +4 -0
- package/lib/Pages/shared/Enums/WFActivityType.d.ts +10 -0
- package/lib/Pages/shared/Enums/WFVariableDataType.d.ts +12 -0
- package/lib/Pages/shared/Services/AccountService.service.d.ts +17 -0
- package/lib/Pages/shared/Services/ActiveDirectoryService.service.d.ts +8 -8
- package/lib/Pages/shared/Services/ConfigurationsService.service.d.ts +7 -7
- package/lib/Pages/shared/Services/DepartmentService.service.d.ts +7 -7
- package/lib/Pages/shared/Services/EmailHeaderAndFooterTemplateService.Service.d.ts +5 -5
- package/lib/Pages/shared/Services/HelpCenterService.service.d.ts +8 -8
- package/lib/Pages/shared/Services/ImpersonationRuleService.service.d.ts +5 -5
- package/lib/Pages/shared/Services/JobsService.service.d.ts +1 -1
- package/lib/Pages/shared/Services/LicenseService.service.d.ts +2 -2
- package/lib/Pages/shared/Services/LogsService.d.ts +1 -1
- package/lib/Pages/shared/Services/LookupGroupsService.service.d.ts +4 -4
- package/lib/Pages/shared/Services/LookupService.service.d.ts +14 -14
- package/lib/Pages/shared/Services/PermissionSetService.service.d.ts +8 -8
- package/lib/Pages/shared/Services/PermissionsService.service.d.ts +5 -5
- package/lib/Pages/shared/Services/PublicHolidayService.service.d.ts +6 -6
- package/lib/Pages/shared/Services/SectorService.service.d.ts +7 -7
- package/lib/Pages/shared/Services/TemplateService.service.d.ts +20 -20
- package/lib/Pages/shared/Services/WorkFlowVersionService.service.d.ts +10 -0
- package/lib/Pages/shared/Services/WorkflowActivityService.service.d.ts +9 -3
- package/lib/Pages/shared/Services/WorkflowInstanceService.service.d.ts +10 -0
- package/lib/Pages/shared/Services/WorkflowLogVariablesService.service.d.ts +10 -0
- package/lib/Pages/shared/Services/WorkflowService.service.d.ts +5 -3
- package/lib/Pages/shared/Services/WorkflowVariablesService.service.d.ts +5 -4
- package/lib/Pages/shared/Services/localizationsService.service .d.ts +12 -12
- package/lib/Pages/shared/Services/provider.service.d.ts +10 -10
- package/lib/Pages/shared/Services/userService.service.d.ts +14 -14
- package/lib/Pages/shared/models/AccountModels/forgotPasswordModel.d.ts +3 -0
- package/lib/Pages/shared/models/DepartmentModels/DepartmentModel.d.ts +9 -8
- package/lib/Pages/shared/models/UserModels/ActivationModel.d.ts +10 -0
- package/lib/Pages/shared/models/WorkflowModels/WFActivityVariablesModel.d.ts +13 -0
- package/lib/Pages/users/users.component.d.ts +1 -1
- package/lib/Pages/workflows/activity/workflow-activity-add/workflow-activity-add.component.d.ts +77 -0
- package/lib/Pages/workflows/activity/workflow-activity-edit/workflow-activity-edit.component.d.ts +83 -0
- package/lib/Pages/workflows/instance-info/instance-info.component.d.ts +81 -0
- package/lib/Pages/workflows/tabs/tabs.component.d.ts +73 -80
- package/lib/Pages/workflows/version-info/version-info.component.d.ts +41 -0
- package/lib/Pages/workflows/workflow/workflow.component.d.ts +26 -29
- package/lib/Pages/workflows/workflows.module.d.ts +19 -15
- package/package.json +5 -3
- package/public-api.d.ts +1 -0
- package/src/lib/assets/sass/core/components/_variables.scss +1 -1
- package/src/lib/assets/sass/custom-styles-rtl.scss +5 -0
- package/src/lib/assets/sass/custom-styles.scss +38 -0
|
@@ -0,0 +1,852 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { Component } from '@angular/core';
|
|
3
|
+
import { FormGroup } from '@angular/forms';
|
|
4
|
+
import { CheckBoxOptions, ControlLayout, DropdownOptions, EnglishArabicDTO, FormOptions, InputType, MultiLingualTextAreaOptions, MultiLingualTextBoxOptions, TextBoxOptions, ToggleSlideOptions } from '@bnsights/bbsf-controls';
|
|
5
|
+
import { PageInfoService } from '../../../../../public-api';
|
|
6
|
+
import { ConditionRHSType } from '../../../shared/Enums/ConditionRHSType';
|
|
7
|
+
import { ParticipantType } from '../../../shared/Enums/ParticipantType';
|
|
8
|
+
import { WFActivityType } from '../../../shared/Enums/WFActivityType';
|
|
9
|
+
import { ParticipantModel } from '../../../shared/models/ImpersonationRuleModels/ParticipantModel';
|
|
10
|
+
import { WFActivityModel } from '../../../shared/models/WorkflowModels/WFActivityModel';
|
|
11
|
+
import { WFActivityOutcomeModel } from '../../../shared/models/WorkflowModels/WFActivityOutcomeModel';
|
|
12
|
+
import * as i0 from "@angular/core";
|
|
13
|
+
import * as i1 from "../../../shared/Services/WorkflowActivityService.service";
|
|
14
|
+
import * as i2 from "../../../../../public-api";
|
|
15
|
+
import * as i3 from "@bnsights/bbsf-utilities";
|
|
16
|
+
import * as i4 from "@angular/router";
|
|
17
|
+
import * as i5 from "@bnsights/bbsf-controls";
|
|
18
|
+
import * as i6 from "@angular/common";
|
|
19
|
+
export class WorkflowActivityEditComponent {
|
|
20
|
+
constructor(workflowActivityService, pageInfoService, utilityService, activatedRoute, router, requestHandlerService, bbsfTranslateService) {
|
|
21
|
+
this.workflowActivityService = workflowActivityService;
|
|
22
|
+
this.pageInfoService = pageInfoService;
|
|
23
|
+
this.utilityService = utilityService;
|
|
24
|
+
this.activatedRoute = activatedRoute;
|
|
25
|
+
this.router = router;
|
|
26
|
+
this.requestHandlerService = requestHandlerService;
|
|
27
|
+
this.bbsfTranslateService = bbsfTranslateService;
|
|
28
|
+
//Page requirements
|
|
29
|
+
this.isEditFormLoaded = false;
|
|
30
|
+
//Edit Activity shared controls
|
|
31
|
+
this.editworkflowActivityForm = new FormGroup({});
|
|
32
|
+
this.editworkflowActivityFormOptions = new FormOptions;
|
|
33
|
+
this.showActivityType = false;
|
|
34
|
+
//Shared Participant type and data (Non Published only)
|
|
35
|
+
this.showParticipantContainer = false;
|
|
36
|
+
this.showParticipantPermssionSet = false;
|
|
37
|
+
//Dynamic Types Controls //(Approval,Action,Percentage)
|
|
38
|
+
this.showDynamicControls = false;
|
|
39
|
+
//Static types controls (Email,Sleep) (Non published only)
|
|
40
|
+
//Email Type Controls //+ initialize participant
|
|
41
|
+
this.showStaticControls = false;
|
|
42
|
+
//Condition type controls
|
|
43
|
+
this.showConditionControls = false;
|
|
44
|
+
this.showConditionRHSWFVariable = false;
|
|
45
|
+
//Shared required lists
|
|
46
|
+
this.ActivityTypeList = [];
|
|
47
|
+
//Outcomes (dynamic,condition)
|
|
48
|
+
this.outcomesOptions = [];
|
|
49
|
+
this.outcomesCount = 0;
|
|
50
|
+
this.showOutcomesContainer = false;
|
|
51
|
+
//RequiredLists
|
|
52
|
+
this.taskTypeList = [];
|
|
53
|
+
this.participantTypeList = [];
|
|
54
|
+
this.participantDataList = [];
|
|
55
|
+
this.nextActivityList = [];
|
|
56
|
+
//ConditionTypeRequiredLists
|
|
57
|
+
this.conditionLHSWFVariableList = [];
|
|
58
|
+
this.conditionRHSWFVariableList = [];
|
|
59
|
+
this.conditionRHSTypeList = [];
|
|
60
|
+
this.conditionList = [];
|
|
61
|
+
//Edit functions
|
|
62
|
+
this.getEditWFActivityModel = () => {
|
|
63
|
+
let paramArray = [];
|
|
64
|
+
let ResultModel = this.editworkflowActivityForm.value;
|
|
65
|
+
let editModel = new WFActivityModel();
|
|
66
|
+
editModel.ID = this.activityModel.id;
|
|
67
|
+
editModel.Name.English = ResultModel.name.English;
|
|
68
|
+
editModel.Name.Arabic = ResultModel.name.Arabic;
|
|
69
|
+
editModel.VersionID = Number(this.versionID);
|
|
70
|
+
editModel.ActivityTypeItemID = this.activityTypeID;
|
|
71
|
+
editModel.SysName = ResultModel.sysName;
|
|
72
|
+
//If participant exists
|
|
73
|
+
if (ResultModel.participantTypes != undefined) {
|
|
74
|
+
editModel.ParticipantDTO = new ParticipantModel();
|
|
75
|
+
editModel.ParticipantDTO = new ParticipantModel();
|
|
76
|
+
editModel.ParticipantDTO.ParticipantTypeItemIDsString = ResultModel.participantTypes.toString();
|
|
77
|
+
if (ResultModel.participantTypes.includes(ParticipantType.PermissionSet)) {
|
|
78
|
+
editModel.ParticipantDTO.PermissionSetIDsString = ResultModel.participantPermissionSet.toString();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
switch (Number(this.activityTypeID)) {
|
|
82
|
+
case WFActivityType.Approval:
|
|
83
|
+
case WFActivityType.Action:
|
|
84
|
+
case WFActivityType.PercentageTask:
|
|
85
|
+
editModel.TaskName.English = ResultModel.dynamicTaskName.English;
|
|
86
|
+
editModel.TaskName.Arabic = ResultModel.dynamicTaskName.Arabic;
|
|
87
|
+
editModel.TaskDescription.English = ResultModel.dynamicTaskDescription.English;
|
|
88
|
+
editModel.TaskDescription.Arabic = ResultModel.dynamicTaskDescription.Arabic;
|
|
89
|
+
editModel.TaskURL = ResultModel.dynamicTaskURL;
|
|
90
|
+
editModel.TaskCorrlTypeID = ResultModel.dynamicTaskType != null ? Number(ResultModel.dynamicTaskType) : null;
|
|
91
|
+
editModel.CanCompleteFromTME = ResultModel.dynamicCanComplete;
|
|
92
|
+
break;
|
|
93
|
+
case WFActivityType.Start:
|
|
94
|
+
case WFActivityType.Email:
|
|
95
|
+
case WFActivityType.Sleep:
|
|
96
|
+
if (!this.isPublished) {
|
|
97
|
+
editModel.NormalOutcomeName.English = ResultModel.staticOutcomeName.English;
|
|
98
|
+
editModel.NormalOutcomeName.Arabic = ResultModel.staticOutcomeName.Arabic;
|
|
99
|
+
editModel.OutcomeSysName = ResultModel.staticOutcomeSysName;
|
|
100
|
+
editModel.NextActivityID = ResultModel.staticOutcomeNextActivity != null ? Number(ResultModel.staticOutcomeNextActivity) : null;
|
|
101
|
+
editModel.CanAddComment = ResultModel.staticOutcomeCanAddComment;
|
|
102
|
+
}
|
|
103
|
+
break;
|
|
104
|
+
case WFActivityType.Condition:
|
|
105
|
+
editModel.LHSVariableID = ResultModel.conditionLHSDropDown != null ? Number(ResultModel.conditionLHSDropDown) : null;
|
|
106
|
+
editModel.RHSVariableID = ResultModel.conditionRHSDropDown != null ? Number(ResultModel.conditionRHSDropDown) : null;
|
|
107
|
+
editModel.RHSTypeItemID = ResultModel.conditionRHSTypeDropDown != null ? Number(ResultModel.conditionRHSTypeDropDown) : null;
|
|
108
|
+
editModel.OperatorTypeItemID = ResultModel.conditionsDropDown != null ? Number(ResultModel.conditionsDropDown) : null;
|
|
109
|
+
editModel.RHSValue = ResultModel.conditionRHSValue != undefined ? ResultModel.conditionRHSValue : null;
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
//Set Outcomes (dynamic,condition types)
|
|
113
|
+
for (let j = 0; j < this.outcomesCount; j++) {
|
|
114
|
+
let outcomeID = ResultModel["outcomeID" + j];
|
|
115
|
+
if (outcomeID == undefined)
|
|
116
|
+
continue;
|
|
117
|
+
let outcomeName = ResultModel["outcomeName" + j];
|
|
118
|
+
let outcomeSysName;
|
|
119
|
+
let outComeCanEditSysName = ResultModel["outcomeCanEditSysName" + j];
|
|
120
|
+
if (outComeCanEditSysName)
|
|
121
|
+
outcomeSysName = ResultModel["outcomeDecisionSysName" + j];
|
|
122
|
+
else
|
|
123
|
+
outcomeSysName = ResultModel["outcomeHiddeneSysName" + j];
|
|
124
|
+
let outcomeActivity = ResultModel["outcomeNextActivityTypes" + j];
|
|
125
|
+
let outcomeCanAddComment = ResultModel["outcomeCanAddComment" + j];
|
|
126
|
+
let activityOutcome = new WFActivityOutcomeModel();
|
|
127
|
+
activityOutcome.Id = outcomeID;
|
|
128
|
+
activityOutcome.NameEN = outcomeName.English;
|
|
129
|
+
activityOutcome.NameAR = outcomeName.Arabic;
|
|
130
|
+
activityOutcome.OutcomeSysName = outcomeSysName;
|
|
131
|
+
activityOutcome.NextActivityID = outcomeActivity != null ? Number(outcomeActivity) : null;
|
|
132
|
+
activityOutcome.CanAddComment = outcomeCanAddComment;
|
|
133
|
+
editModel.Outcomes.push(activityOutcome);
|
|
134
|
+
}
|
|
135
|
+
paramArray.push(editModel);
|
|
136
|
+
return paramArray;
|
|
137
|
+
};
|
|
138
|
+
this.getEditWFActivityFunction = (editModel) => {
|
|
139
|
+
if (this.isPublished)
|
|
140
|
+
return this.workflowActivityService.editPublishedActivity(editModel);
|
|
141
|
+
else
|
|
142
|
+
return this.workflowActivityService.editActivity(editModel);
|
|
143
|
+
};
|
|
144
|
+
this.onEditSuccess = (result) => {
|
|
145
|
+
this.cancelEdit();
|
|
146
|
+
};
|
|
147
|
+
this.activatedRoute.params.subscribe(params => {
|
|
148
|
+
this.activityIDEnc = params['activityid'];
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
ngOnInit() {
|
|
152
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
153
|
+
this.bbsfTranslateService.onLangChange.subscribe((event) => {
|
|
154
|
+
this.ngOnInit();
|
|
155
|
+
});
|
|
156
|
+
PageInfoService.PageTitle = this.utilityService.getResourceValue("EditWorkflowActivity");
|
|
157
|
+
PageInfoService.PageBreadcrumbs = [
|
|
158
|
+
{ title: this.utilityService.getResourceValue("Home"), path: '/Admin/Home', isSeparator: false, isActive: false },
|
|
159
|
+
{ title: '', path: '', isSeparator: true, isActive: false },
|
|
160
|
+
{ title: this.utilityService.getResourceValue("WorkFlows"), path: '/Admin/Workflows/workflow', isSeparator: false, isActive: false },
|
|
161
|
+
{ title: '', path: '', isSeparator: true, isActive: false }
|
|
162
|
+
];
|
|
163
|
+
this.pageInfoService.calculateTitle();
|
|
164
|
+
this.pageInfoService.calculateBreadcrumbs();
|
|
165
|
+
this.initializePage();
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
//Initialize edit model and required DDLs
|
|
169
|
+
initializePage() {
|
|
170
|
+
this.workflowActivityService.getEditWorkFlowActivityData(this.activityIDEnc).subscribe((result) => {
|
|
171
|
+
let resultObj = result;
|
|
172
|
+
this.activityModel = resultObj.model;
|
|
173
|
+
var list = resultObj.list;
|
|
174
|
+
this.ActivityTypeList = resultObj.activityList;
|
|
175
|
+
this.nextActivityList = list.activities;
|
|
176
|
+
this.activityTypeID = this.activityModel.activityTypeItemID;
|
|
177
|
+
this.isPublished = this.activityModel.isPublished;
|
|
178
|
+
this.versionID = this.activityModel.versionID;
|
|
179
|
+
this.editworkflowActivityForm = new FormGroup({});
|
|
180
|
+
this.editworkflowActivityFormOptions = new FormOptions();
|
|
181
|
+
this.editworkflowActivityFormOptions.FormGroup = this.editworkflowActivityForm;
|
|
182
|
+
this.editworkflowActivityFormOptions.GetModelFunction = this.getEditWFActivityModel;
|
|
183
|
+
this.editworkflowActivityFormOptions.ServiceSubmitFunction = this.getEditWFActivityFunction;
|
|
184
|
+
this.editworkflowActivityFormOptions.OnSuccessHandler = this.onEditSuccess;
|
|
185
|
+
let name = new EnglishArabicDTO();
|
|
186
|
+
name.English = this.activityModel.name.english;
|
|
187
|
+
name.Arabic = this.activityModel.name.arabic;
|
|
188
|
+
this.name = new MultiLingualTextBoxOptions();
|
|
189
|
+
this.name.Name = "name";
|
|
190
|
+
this.name.ArabicLabelKey = "NameInArabic";
|
|
191
|
+
this.name.EnglishLabelKey = "NameInEnglish";
|
|
192
|
+
this.name.IsRequired = true;
|
|
193
|
+
this.name.Value = name;
|
|
194
|
+
let outcomesResult = this.getActivityOutcomesOptions(this.activityModel.outcomes, this.isPublished);
|
|
195
|
+
this.outcomesOptions = outcomesResult[0];
|
|
196
|
+
this.outcomesCount = outcomesResult[1];
|
|
197
|
+
this.showActivityType = false;
|
|
198
|
+
if (this.isPublished) {
|
|
199
|
+
switch (Number(this.activityTypeID)) {
|
|
200
|
+
case WFActivityType.Approval:
|
|
201
|
+
case WFActivityType.Action:
|
|
202
|
+
case WFActivityType.PercentageTask:
|
|
203
|
+
this.taskTypeList = list.tasks;
|
|
204
|
+
let taskName = new EnglishArabicDTO();
|
|
205
|
+
taskName.English = this.activityModel.taskName.english;
|
|
206
|
+
taskName.Arabic = this.activityModel.taskName.arabic;
|
|
207
|
+
let taskDescription = new EnglishArabicDTO();
|
|
208
|
+
taskDescription.English = this.activityModel.taskDescription.english;
|
|
209
|
+
taskDescription.Arabic = this.activityModel.taskDescription.arabic;
|
|
210
|
+
this.dynamicTaskName = new MultiLingualTextBoxOptions();
|
|
211
|
+
this.dynamicTaskName.Name = "dynamicTaskName";
|
|
212
|
+
this.dynamicTaskName.ArabicLabelKey = "TaskNameInArabic";
|
|
213
|
+
this.dynamicTaskName.EnglishLabelKey = "TaskNameInEnglish";
|
|
214
|
+
this.dynamicTaskName.Value = taskName;
|
|
215
|
+
this.dynamicTaskDescription = new MultiLingualTextAreaOptions();
|
|
216
|
+
this.dynamicTaskDescription.Name = "dynamicTaskDescription";
|
|
217
|
+
this.dynamicTaskDescription.ArabicLabelKey = "TaskDescriptionInArabic";
|
|
218
|
+
this.dynamicTaskDescription.EnglishLabelKey = "TaskDescriptionInEnglish";
|
|
219
|
+
this.dynamicTaskDescription.Value = taskDescription;
|
|
220
|
+
this.dynamicTaskURL = new TextBoxOptions();
|
|
221
|
+
this.dynamicTaskURL.Name = "dynamicTaskURL";
|
|
222
|
+
this.dynamicTaskURL.LabelKey = "TaskURL";
|
|
223
|
+
this.dynamicTaskURL.Type = InputType.Text;
|
|
224
|
+
this.dynamicTaskURL.Value = this.activityModel.taskURL;
|
|
225
|
+
this.dynamicTaskType = new DropdownOptions();
|
|
226
|
+
this.dynamicTaskType.Name = "dynamicTaskType";
|
|
227
|
+
this.dynamicTaskType.LabelKey = "TaskType";
|
|
228
|
+
this.dynamicTaskType.DataSource = this.taskTypeList;
|
|
229
|
+
this.dynamicTaskType.SingleSelection = true;
|
|
230
|
+
this.dynamicTaskType.AllowSearchFilter = true;
|
|
231
|
+
this.dynamicTaskType.IsRequired = true;
|
|
232
|
+
this.dynamicTaskType.SelectedItems = this.taskTypeList.filter((item) => { return parseInt(item.key) == this.activityModel.taskCorrlTypeID; }).map((item) => item.key)[0];
|
|
233
|
+
;
|
|
234
|
+
this.dynamicCanComplete = new ToggleSlideOptions();
|
|
235
|
+
this.dynamicCanComplete.Name = "dynamicCanComplete";
|
|
236
|
+
this.dynamicCanComplete.LabelKey = "CanCompleteFromTME";
|
|
237
|
+
this.dynamicCanComplete.ViewType = ControlLayout.Horizontal;
|
|
238
|
+
this.dynamicCanComplete.Value = this.activityModel.canCompleteFromTME;
|
|
239
|
+
this.showDynamicControls = true;
|
|
240
|
+
break;
|
|
241
|
+
case WFActivityType.Condition:
|
|
242
|
+
this.conditionLHSWFVariableList = list.wfVariables;
|
|
243
|
+
this.conditionRHSWFVariableList = list.wfVariables;
|
|
244
|
+
this.conditionRHSTypeList = list.rhsTypes;
|
|
245
|
+
this.conditionList = list.conditions;
|
|
246
|
+
this.conditionLHSDropDown = new DropdownOptions();
|
|
247
|
+
this.conditionLHSDropDown.Name = "conditionLHSDropDown";
|
|
248
|
+
this.conditionLHSDropDown.HideLabel = true;
|
|
249
|
+
this.conditionLHSDropDown.Placeholder = "WorkflowVariables";
|
|
250
|
+
this.conditionLHSDropDown.DataSource = this.conditionLHSWFVariableList;
|
|
251
|
+
this.conditionLHSDropDown.SingleSelection = true;
|
|
252
|
+
this.conditionLHSDropDown.AllowSearchFilter = true;
|
|
253
|
+
this.conditionLHSDropDown.IsRequired = true;
|
|
254
|
+
this.conditionLHSDropDown.SelectedItems = this.conditionLHSWFVariableList.filter((item) => { return parseInt(item.key) == this.activityModel.lhsVariableID; }).map((item) => item.key)[0];
|
|
255
|
+
;
|
|
256
|
+
this.conditionsDropDown = new DropdownOptions();
|
|
257
|
+
this.conditionsDropDown.Name = "conditionsDropDown";
|
|
258
|
+
this.conditionsDropDown.HideLabel = true;
|
|
259
|
+
this.conditionsDropDown.Placeholder = "Condition";
|
|
260
|
+
this.conditionsDropDown.DataSource = this.conditionList;
|
|
261
|
+
this.conditionsDropDown.SingleSelection = true;
|
|
262
|
+
this.conditionsDropDown.IsRequired = true;
|
|
263
|
+
this.conditionsDropDown.SelectedItems = this.conditionList.filter((item) => { return parseInt(item.key) == this.activityModel.operatorTypeItemID; }).map((item) => item.key)[0];
|
|
264
|
+
;
|
|
265
|
+
this.conditionRHSTypeDropDown = new DropdownOptions();
|
|
266
|
+
this.conditionRHSTypeDropDown.Name = "conditionRHSTypeDropDown";
|
|
267
|
+
this.conditionRHSTypeDropDown.HideLabel = true;
|
|
268
|
+
this.conditionRHSTypeDropDown.DataSource = this.conditionRHSTypeList;
|
|
269
|
+
this.conditionRHSTypeDropDown.SingleSelection = true;
|
|
270
|
+
this.conditionRHSTypeDropDown.IsRequired = true;
|
|
271
|
+
this.conditionRHSTypeDropDown.SelectedItems = this.conditionRHSTypeList.filter((item) => { return parseInt(item.key) == this.activityModel.rhsTypeItemID; }).map((item) => item.key)[0];
|
|
272
|
+
;
|
|
273
|
+
if (this.activityModel.rhsTypeItemID == ConditionRHSType.Variable) {
|
|
274
|
+
this.conditionRHSDropDown = new DropdownOptions();
|
|
275
|
+
this.conditionRHSDropDown.Name = "conditionRHSDropDown";
|
|
276
|
+
this.conditionRHSDropDown.HideLabel = true;
|
|
277
|
+
this.conditionRHSDropDown.Placeholder = "WorkflowVariables";
|
|
278
|
+
this.conditionRHSDropDown.DataSource = this.conditionRHSWFVariableList;
|
|
279
|
+
this.conditionRHSDropDown.SingleSelection = true;
|
|
280
|
+
this.conditionRHSDropDown.IsRequired = true;
|
|
281
|
+
this.conditionRHSDropDown.SelectedItems = this.conditionRHSWFVariableList.filter((item) => { return parseInt(item.key) == this.activityModel.rhsVariableID; }).map((item) => item.key)[0];
|
|
282
|
+
;
|
|
283
|
+
this.showConditionRHSWFVariable = true;
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
this.conditionRHSValue = new TextBoxOptions();
|
|
287
|
+
this.conditionRHSValue.Name = "conditionRHSValue";
|
|
288
|
+
this.conditionRHSValue.HideLabel = true;
|
|
289
|
+
this.conditionRHSValue.Placeholder = "Value";
|
|
290
|
+
this.conditionRHSValue.Type = InputType.Text;
|
|
291
|
+
this.conditionRHSValue.IsRequired = true;
|
|
292
|
+
this.conditionRHSValue.Value = this.activityModel.rhsValue;
|
|
293
|
+
this.showConditionRHSWFVariable = false;
|
|
294
|
+
}
|
|
295
|
+
this.showConditionControls = true;
|
|
296
|
+
break;
|
|
297
|
+
}
|
|
298
|
+
this.showOutcomesContainer = true;
|
|
299
|
+
}
|
|
300
|
+
else {
|
|
301
|
+
this.sysName = new TextBoxOptions();
|
|
302
|
+
this.sysName.Name = "sysName";
|
|
303
|
+
this.sysName.LabelKey = "SysName";
|
|
304
|
+
this.sysName.Type = InputType.Text;
|
|
305
|
+
this.sysName.IsRequired = true;
|
|
306
|
+
this.sysName.Value = this.activityModel.sysName;
|
|
307
|
+
if (this.activityModel.activityTypeItemID != WFActivityType.Start) {
|
|
308
|
+
this.showActivityType = true;
|
|
309
|
+
this.activityType = new DropdownOptions();
|
|
310
|
+
this.activityType.Name = "activityType";
|
|
311
|
+
this.activityType.LabelKey = "ActivityType";
|
|
312
|
+
this.activityType.DataSource = this.ActivityTypeList;
|
|
313
|
+
this.activityType.SingleSelection = true;
|
|
314
|
+
this.activityType.AllowSearchFilter = true;
|
|
315
|
+
this.activityType.IsRequired = true;
|
|
316
|
+
this.activityType.SelectedItems = this.ActivityTypeList.filter((item) => { return parseInt(item.key) == this.activityTypeID; }).map((item) => item.key)[0];
|
|
317
|
+
;
|
|
318
|
+
}
|
|
319
|
+
switch (Number(this.activityModel.activityTypeItemID)) {
|
|
320
|
+
case WFActivityType.Approval:
|
|
321
|
+
case WFActivityType.Action:
|
|
322
|
+
case WFActivityType.PercentageTask:
|
|
323
|
+
this.taskTypeList = list.tasks;
|
|
324
|
+
this.participantTypeList = list.participants.participantTypes;
|
|
325
|
+
this.participantDataList = list.participants.participantData;
|
|
326
|
+
let taskName = new EnglishArabicDTO();
|
|
327
|
+
taskName.English = this.activityModel.taskName.english;
|
|
328
|
+
taskName.Arabic = this.activityModel.taskName.arabic;
|
|
329
|
+
let taskDescription = new EnglishArabicDTO();
|
|
330
|
+
taskDescription.English = this.activityModel.taskDescription.english;
|
|
331
|
+
taskDescription.Arabic = this.activityModel.taskDescription.arabic;
|
|
332
|
+
//Initialize required controls for approval
|
|
333
|
+
let selectedParticipantTypes = this.activityModel.participantTypeItemIDsStringList.map((i) => Number(i));
|
|
334
|
+
this.participantTypes = new DropdownOptions();
|
|
335
|
+
this.participantTypes.Name = "participantTypes";
|
|
336
|
+
this.participantTypes.LabelKey = "ParticipantTypes";
|
|
337
|
+
this.participantTypes.DataSource = this.participantTypeList;
|
|
338
|
+
this.participantTypes.SingleSelection = false;
|
|
339
|
+
this.participantTypes.AllowSearchFilter = true;
|
|
340
|
+
this.participantTypes.IsRequired = true;
|
|
341
|
+
this.participantTypes.SelectedItems = this.participantTypeList.filter(function (tag) {
|
|
342
|
+
return selectedParticipantTypes.indexOf(parseInt(tag.key)) >= 0;
|
|
343
|
+
}).map((item) => item.key);
|
|
344
|
+
if (selectedParticipantTypes.includes(Number(ParticipantType.PermissionSet))) {
|
|
345
|
+
let selectedPermissionSets = this.activityModel.participantPermsetsIDsString.map((i) => Number(i));
|
|
346
|
+
this.participantPermissionSet = new DropdownOptions();
|
|
347
|
+
this.participantPermissionSet.Name = "participantPermissionSet";
|
|
348
|
+
this.participantPermissionSet.LabelKey = "PermissionSet";
|
|
349
|
+
this.participantPermissionSet.DataSource = this.participantDataList;
|
|
350
|
+
this.participantPermissionSet.SingleSelection = false;
|
|
351
|
+
this.participantPermissionSet.AllowSearchFilter = true;
|
|
352
|
+
this.participantPermissionSet.SelectedItems = this.participantDataList.filter(function (tag) {
|
|
353
|
+
return selectedPermissionSets.indexOf(parseInt(tag.key)) >= 0;
|
|
354
|
+
}).map((item) => item.key);
|
|
355
|
+
this.showParticipantPermssionSet = true;
|
|
356
|
+
}
|
|
357
|
+
this.dynamicTaskName = new MultiLingualTextBoxOptions();
|
|
358
|
+
this.dynamicTaskName.Name = "dynamicTaskName";
|
|
359
|
+
this.dynamicTaskName.ArabicLabelKey = "TaskNameInArabic";
|
|
360
|
+
this.dynamicTaskName.EnglishLabelKey = "TaskNameInEnglish";
|
|
361
|
+
this.dynamicTaskName.Value = taskName;
|
|
362
|
+
this.dynamicTaskDescription = new MultiLingualTextAreaOptions();
|
|
363
|
+
this.dynamicTaskDescription.Name = "dynamicTaskDescription";
|
|
364
|
+
this.dynamicTaskDescription.ArabicLabelKey = "TaskDescriptionInArabic";
|
|
365
|
+
this.dynamicTaskDescription.EnglishLabelKey = "TaskDescriptionInEnglish";
|
|
366
|
+
this.dynamicTaskDescription.Value = taskDescription;
|
|
367
|
+
this.dynamicTaskURL = new TextBoxOptions();
|
|
368
|
+
this.dynamicTaskURL.Name = "dynamicTaskURL";
|
|
369
|
+
this.dynamicTaskURL.LabelKey = "TaskURL";
|
|
370
|
+
this.dynamicTaskURL.Type = InputType.Text;
|
|
371
|
+
this.dynamicTaskURL.Value = this.activityModel.taskURL;
|
|
372
|
+
this.dynamicTaskType = new DropdownOptions();
|
|
373
|
+
this.dynamicTaskType.Name = "dynamicTaskType";
|
|
374
|
+
this.dynamicTaskType.LabelKey = "TaskType";
|
|
375
|
+
this.dynamicTaskType.DataSource = this.taskTypeList;
|
|
376
|
+
this.dynamicTaskType.SingleSelection = true;
|
|
377
|
+
this.dynamicTaskType.AllowSearchFilter = true;
|
|
378
|
+
this.dynamicTaskType.IsRequired = true;
|
|
379
|
+
this.dynamicTaskType.SelectedItems = this.taskTypeList.filter((item) => { return parseInt(item.key) == this.activityModel.taskCorrlTypeID; }).map((item) => item.key)[0];
|
|
380
|
+
;
|
|
381
|
+
this.dynamicCanComplete = new ToggleSlideOptions();
|
|
382
|
+
this.dynamicCanComplete.Name = "dynamicCanComplete";
|
|
383
|
+
this.dynamicCanComplete.LabelKey = "CanCompleteFromTME";
|
|
384
|
+
this.dynamicCanComplete.ViewType = ControlLayout.Horizontal;
|
|
385
|
+
this.dynamicCanComplete.Value = this.activityModel.canCompleteFromTME;
|
|
386
|
+
this.showDynamicControls = true;
|
|
387
|
+
this.showParticipantContainer = true;
|
|
388
|
+
this.showOutcomesContainer = true;
|
|
389
|
+
break;
|
|
390
|
+
case WFActivityType.Start:
|
|
391
|
+
case WFActivityType.Email:
|
|
392
|
+
case WFActivityType.Sleep:
|
|
393
|
+
if (Number(this.activityModel.activityTypeItemID) == WFActivityType.Email) {
|
|
394
|
+
this.participantTypeList = list.participants.participantTypes;
|
|
395
|
+
this.participantDataList = list.participants.participantData;
|
|
396
|
+
let selectedParticipantTypes = this.activityModel.participantTypeItemIDsStringList.map((i) => Number(i));
|
|
397
|
+
this.participantTypes = new DropdownOptions();
|
|
398
|
+
this.participantTypes.Name = "participantTypes";
|
|
399
|
+
this.participantTypes.LabelKey = "ParticipantTypes";
|
|
400
|
+
this.participantTypes.DataSource = this.participantTypeList;
|
|
401
|
+
this.participantTypes.SingleSelection = false;
|
|
402
|
+
this.participantTypes.AllowSearchFilter = true;
|
|
403
|
+
this.participantTypes.IsRequired = true;
|
|
404
|
+
this.participantTypes.SelectedItems = this.participantTypeList.filter(function (tag) {
|
|
405
|
+
return selectedParticipantTypes.indexOf(parseInt(tag.key)) >= 0;
|
|
406
|
+
}).map((item) => item.key);
|
|
407
|
+
if (selectedParticipantTypes.includes(Number(ParticipantType.PermissionSet))) {
|
|
408
|
+
let selectedPermissionSets = this.activityModel.participantPermsetsIDsString.map((i) => Number(i));
|
|
409
|
+
this.participantPermissionSet = new DropdownOptions();
|
|
410
|
+
this.participantPermissionSet.Name = "participantPermissionSet";
|
|
411
|
+
this.participantPermissionSet.LabelKey = "PermissionSet";
|
|
412
|
+
this.participantPermissionSet.DataSource = this.participantDataList;
|
|
413
|
+
this.participantPermissionSet.SingleSelection = false;
|
|
414
|
+
this.participantPermissionSet.AllowSearchFilter = true;
|
|
415
|
+
this.participantPermissionSet.SelectedItems = this.participantDataList.filter(function (tag) {
|
|
416
|
+
return selectedPermissionSets.indexOf(parseInt(tag.key)) >= 0;
|
|
417
|
+
}).map((item) => item.key);
|
|
418
|
+
this.showParticipantPermssionSet = true;
|
|
419
|
+
}
|
|
420
|
+
this.showParticipantContainer = true;
|
|
421
|
+
}
|
|
422
|
+
let name = new EnglishArabicDTO();
|
|
423
|
+
name.Arabic = this.activityModel.normalOutcomeName.arabic;
|
|
424
|
+
name.English = this.activityModel.normalOutcomeName.english;
|
|
425
|
+
this.staticOutcomeName = new MultiLingualTextBoxOptions();
|
|
426
|
+
this.staticOutcomeName.Name = "staticOutcomeName";
|
|
427
|
+
this.staticOutcomeName.ArabicLabelKey = "OutcomeNameInArabic";
|
|
428
|
+
this.staticOutcomeName.EnglishLabelKey = "OutcomeNameInEnglish";
|
|
429
|
+
this.staticOutcomeName.IsRequired = true;
|
|
430
|
+
this.staticOutcomeName.Value = name;
|
|
431
|
+
this.staticOutcomeSysName = new TextBoxOptions();
|
|
432
|
+
this.staticOutcomeSysName.Name = "staticOutcomeSysName";
|
|
433
|
+
this.staticOutcomeSysName.LabelKey = "DecisionSysName";
|
|
434
|
+
this.staticOutcomeSysName.Type = InputType.Text;
|
|
435
|
+
this.staticOutcomeSysName.IsRequired = true;
|
|
436
|
+
this.staticOutcomeSysName.Value = this.activityModel.outcomeSysName;
|
|
437
|
+
this.staticOutcomeNextActivity = new DropdownOptions();
|
|
438
|
+
this.staticOutcomeNextActivity.Name = "staticOutcomeNextActivity";
|
|
439
|
+
this.staticOutcomeNextActivity.LabelKey = "NextActivity";
|
|
440
|
+
this.staticOutcomeNextActivity.DataSource = this.nextActivityList;
|
|
441
|
+
this.staticOutcomeNextActivity.SingleSelection = true;
|
|
442
|
+
this.staticOutcomeNextActivity.AllowSearchFilter = true;
|
|
443
|
+
this.staticOutcomeNextActivity.IsRequired = true;
|
|
444
|
+
this.staticOutcomeNextActivity.SelectedItems = this.nextActivityList.filter((item) => { return parseInt(item.key) == this.activityModel.nextActivityID; }).map((item) => item.key)[0];
|
|
445
|
+
;
|
|
446
|
+
this.staticOutcomeCanAddComment = new ToggleSlideOptions();
|
|
447
|
+
this.staticOutcomeCanAddComment.Name = "staticOutcomeCanAddComment";
|
|
448
|
+
this.staticOutcomeCanAddComment.LabelKey = "CanAddComment";
|
|
449
|
+
this.staticOutcomeCanAddComment.ViewType = ControlLayout.Horizontal;
|
|
450
|
+
this.staticOutcomeCanAddComment.Value = this.activityModel.canAddComment;
|
|
451
|
+
this.showStaticControls = true;
|
|
452
|
+
break;
|
|
453
|
+
case WFActivityType.Condition:
|
|
454
|
+
this.conditionLHSWFVariableList = list.wfVariables;
|
|
455
|
+
this.conditionRHSWFVariableList = list.wfVariables;
|
|
456
|
+
this.conditionRHSTypeList = list.rhsTypes;
|
|
457
|
+
this.conditionList = list.conditions;
|
|
458
|
+
this.conditionLHSDropDown = new DropdownOptions();
|
|
459
|
+
this.conditionLHSDropDown.Name = "conditionLHSDropDown";
|
|
460
|
+
this.conditionLHSDropDown.HideLabel = true;
|
|
461
|
+
this.conditionLHSDropDown.Placeholder = "WorkflowVariables";
|
|
462
|
+
this.conditionLHSDropDown.DataSource = this.conditionLHSWFVariableList;
|
|
463
|
+
this.conditionLHSDropDown.SingleSelection = true;
|
|
464
|
+
this.conditionLHSDropDown.AllowSearchFilter = true;
|
|
465
|
+
this.conditionLHSDropDown.IsRequired = true;
|
|
466
|
+
this.conditionLHSDropDown.SelectedItems = this.conditionLHSWFVariableList.filter((item) => { return parseInt(item.key) == this.activityModel.lhsVariableID; }).map((item) => item.key)[0];
|
|
467
|
+
;
|
|
468
|
+
this.conditionsDropDown = new DropdownOptions();
|
|
469
|
+
this.conditionsDropDown.Name = "conditionsDropDown";
|
|
470
|
+
this.conditionsDropDown.HideLabel = true;
|
|
471
|
+
this.conditionsDropDown.Placeholder = "Condition";
|
|
472
|
+
this.conditionsDropDown.DataSource = this.conditionList;
|
|
473
|
+
this.conditionsDropDown.SingleSelection = true;
|
|
474
|
+
this.conditionsDropDown.IsRequired = true;
|
|
475
|
+
this.conditionsDropDown.SelectedItems = this.conditionList.filter((item) => { return parseInt(item.key) == this.activityModel.operatorTypeItemID; }).map((item) => item.key)[0];
|
|
476
|
+
;
|
|
477
|
+
this.conditionRHSTypeDropDown = new DropdownOptions();
|
|
478
|
+
this.conditionRHSTypeDropDown.Name = "conditionRHSTypeDropDown";
|
|
479
|
+
this.conditionRHSTypeDropDown.HideLabel = true;
|
|
480
|
+
this.conditionRHSTypeDropDown.DataSource = this.conditionRHSTypeList;
|
|
481
|
+
this.conditionRHSTypeDropDown.SingleSelection = true;
|
|
482
|
+
this.conditionRHSTypeDropDown.IsRequired = true;
|
|
483
|
+
this.conditionRHSTypeDropDown.SelectedItems = this.conditionRHSTypeList.filter((item) => { return parseInt(item.key) == this.activityModel.rhsTypeItemID; }).map((item) => item.key)[0];
|
|
484
|
+
;
|
|
485
|
+
if (this.activityModel.rhsTypeItemID == ConditionRHSType.Variable) {
|
|
486
|
+
this.conditionRHSDropDown = new DropdownOptions();
|
|
487
|
+
this.conditionRHSDropDown.Name = "conditionRHSDropDown";
|
|
488
|
+
this.conditionRHSDropDown.HideLabel = true;
|
|
489
|
+
this.conditionRHSDropDown.Placeholder = "WorkflowVariables";
|
|
490
|
+
this.conditionRHSDropDown.DataSource = this.conditionRHSWFVariableList;
|
|
491
|
+
this.conditionRHSDropDown.SingleSelection = true;
|
|
492
|
+
this.conditionRHSDropDown.IsRequired = true;
|
|
493
|
+
this.conditionRHSDropDown.SelectedItems = this.conditionRHSWFVariableList.filter((item) => { return parseInt(item.key) == this.activityModel.rhsVariableID; }).map((item) => item.key)[0];
|
|
494
|
+
;
|
|
495
|
+
this.showConditionRHSWFVariable = true;
|
|
496
|
+
}
|
|
497
|
+
else {
|
|
498
|
+
this.conditionRHSValue = new TextBoxOptions();
|
|
499
|
+
this.conditionRHSValue.Name = "conditionRHSValue";
|
|
500
|
+
this.conditionRHSValue.HideLabel = true;
|
|
501
|
+
this.conditionRHSValue.Placeholder = "Value";
|
|
502
|
+
this.conditionRHSValue.Type = InputType.Text;
|
|
503
|
+
this.conditionRHSValue.IsRequired = true;
|
|
504
|
+
this.conditionRHSValue.Value = this.activityModel.rhsValue;
|
|
505
|
+
this.showConditionRHSWFVariable = false;
|
|
506
|
+
}
|
|
507
|
+
this.showConditionControls = true;
|
|
508
|
+
this.showOutcomesContainer = true;
|
|
509
|
+
break;
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
this.isEditFormLoaded = true;
|
|
513
|
+
});
|
|
514
|
+
}
|
|
515
|
+
//Outcome functions
|
|
516
|
+
getActivityOutcomesOptions(outComes, isPublished) {
|
|
517
|
+
let outcomesOptions = [];
|
|
518
|
+
let outcomesCount = 0;
|
|
519
|
+
for (let i = 0; i < outComes.length; i++) {
|
|
520
|
+
let currentOutcome = outComes[i];
|
|
521
|
+
let objectOutcomeOptions = [];
|
|
522
|
+
let outcomeID = new TextBoxOptions();
|
|
523
|
+
outcomeID.Name = "outcomeID" + i;
|
|
524
|
+
outcomeID.HideLabel = true;
|
|
525
|
+
outcomeID.Type = InputType.Text;
|
|
526
|
+
outcomeID.Value = currentOutcome.id;
|
|
527
|
+
let name = new EnglishArabicDTO();
|
|
528
|
+
name.English = currentOutcome.nameEN;
|
|
529
|
+
name.Arabic = currentOutcome.nameAR;
|
|
530
|
+
let outcomeName = new MultiLingualTextBoxOptions();
|
|
531
|
+
outcomeName.Name = "outcomeName" + i;
|
|
532
|
+
outcomeName.ArabicLabelKey = "NameInArabic";
|
|
533
|
+
outcomeName.EnglishLabelKey = "NameInEnglish";
|
|
534
|
+
outcomeName.Value = name;
|
|
535
|
+
outcomeName.IsRequired = true;
|
|
536
|
+
let outcomeNextActivityTypes = new DropdownOptions();
|
|
537
|
+
outcomeNextActivityTypes.Name = "outcomeNextActivityTypes" + i;
|
|
538
|
+
outcomeNextActivityTypes.LabelKey = "Activity";
|
|
539
|
+
outcomeNextActivityTypes.DataSource = this.nextActivityList;
|
|
540
|
+
outcomeNextActivityTypes.SingleSelection = true;
|
|
541
|
+
outcomeNextActivityTypes.AllowSearchFilter = true;
|
|
542
|
+
outcomeNextActivityTypes.SelectedItems = this.nextActivityList.filter((item) => { return parseInt(item.key) == currentOutcome.nextActivityID; }).map((item) => item.key)[0];
|
|
543
|
+
;
|
|
544
|
+
let outcomeCanEdit;
|
|
545
|
+
outcomeCanEdit = currentOutcome.canEdit;
|
|
546
|
+
let outcomeHiddeneSysName = new TextBoxOptions();
|
|
547
|
+
outcomeHiddeneSysName.Name = "outcomeHiddeneSysName" + i;
|
|
548
|
+
outcomeHiddeneSysName.Type = InputType.Text;
|
|
549
|
+
outcomeHiddeneSysName.Value = currentOutcome.outcomeSysName;
|
|
550
|
+
let outcomeCanEditSysName = new CheckBoxOptions();
|
|
551
|
+
outcomeCanEditSysName.Name = "outcomeCanEditSysName" + i;
|
|
552
|
+
outcomeCanEditSysName.Value = currentOutcome.canEditSysName;
|
|
553
|
+
if (!isPublished) {
|
|
554
|
+
let outcomeDecisionSysName = new TextBoxOptions();
|
|
555
|
+
outcomeDecisionSysName.Name = "outcomeDecisionSysName" + i;
|
|
556
|
+
outcomeDecisionSysName.LabelKey = "DecisionSysName";
|
|
557
|
+
outcomeDecisionSysName.Type = InputType.Text;
|
|
558
|
+
outcomeDecisionSysName.Value = currentOutcome.outcomeSysName;
|
|
559
|
+
outcomeDecisionSysName.IsDisabled = !currentOutcome.canEditSysName;
|
|
560
|
+
outcomeDecisionSysName.IsRequired = true;
|
|
561
|
+
let outcomeCanAddComment = new CheckBoxOptions();
|
|
562
|
+
outcomeCanAddComment.Name = "outcomeCanAddComment" + i;
|
|
563
|
+
outcomeCanAddComment.Value = currentOutcome.canAddComment;
|
|
564
|
+
outcomeCanAddComment.LabelKey = "CanAddComment";
|
|
565
|
+
objectOutcomeOptions.push(outcomeID, outcomeName, outcomeDecisionSysName, outcomeNextActivityTypes, outcomeCanAddComment, outcomeCanEdit, outcomeHiddeneSysName, outcomeCanEditSysName);
|
|
566
|
+
}
|
|
567
|
+
else
|
|
568
|
+
objectOutcomeOptions.push(outcomeID, outcomeName, outcomeNextActivityTypes, outcomeCanEdit, outcomeHiddeneSysName, outcomeCanEditSysName);
|
|
569
|
+
outcomesOptions.push(objectOutcomeOptions);
|
|
570
|
+
outcomesCount += 1;
|
|
571
|
+
}
|
|
572
|
+
return [outcomesOptions, outcomesCount];
|
|
573
|
+
}
|
|
574
|
+
addWFActivityOutcome() {
|
|
575
|
+
let index = this.outcomesCount;
|
|
576
|
+
let objectOutcomeOptions = [];
|
|
577
|
+
let outcomeID = new TextBoxOptions();
|
|
578
|
+
outcomeID.Name = "outcomeID" + index;
|
|
579
|
+
outcomeID.HideLabel = true;
|
|
580
|
+
outcomeID.Type = InputType.Text;
|
|
581
|
+
outcomeID.Value = 0;
|
|
582
|
+
let outcomeName = new MultiLingualTextBoxOptions();
|
|
583
|
+
outcomeName.Name = "outcomeName" + index;
|
|
584
|
+
outcomeName.ArabicLabelKey = "NameInArabic";
|
|
585
|
+
outcomeName.EnglishLabelKey = "NameInEnglish";
|
|
586
|
+
outcomeName.IsRequired = true;
|
|
587
|
+
let outcomeDecisionSysName = new TextBoxOptions();
|
|
588
|
+
outcomeDecisionSysName.Name = "outcomeDecisionSysName" + index;
|
|
589
|
+
outcomeDecisionSysName.LabelKey = "DecisionSysName";
|
|
590
|
+
outcomeDecisionSysName.Type = InputType.Text;
|
|
591
|
+
outcomeDecisionSysName.IsRequired = true;
|
|
592
|
+
let outcomeNextActivityTypes = new DropdownOptions();
|
|
593
|
+
outcomeNextActivityTypes.Name = "outcomeNextActivityTypes" + index;
|
|
594
|
+
outcomeNextActivityTypes.LabelKey = "Activity";
|
|
595
|
+
outcomeNextActivityTypes.DataSource = this.nextActivityList;
|
|
596
|
+
outcomeNextActivityTypes.SingleSelection = true;
|
|
597
|
+
outcomeNextActivityTypes.AllowSearchFilter = true;
|
|
598
|
+
let outcomeCanAddComment = new CheckBoxOptions();
|
|
599
|
+
outcomeCanAddComment.Name = "outcomeCanAddComment" + index;
|
|
600
|
+
outcomeCanAddComment.LabelKey = "CanAddComment";
|
|
601
|
+
let outcomeCanEdit;
|
|
602
|
+
outcomeCanEdit = true;
|
|
603
|
+
let outcomeHiddeneSysName = new TextBoxOptions();
|
|
604
|
+
outcomeHiddeneSysName.Name = "outcomeHiddeneSysName" + index;
|
|
605
|
+
outcomeHiddeneSysName.Type = InputType.Text;
|
|
606
|
+
let outcomeCanEditSysName = new CheckBoxOptions();
|
|
607
|
+
outcomeCanEditSysName.Name = "outcomeCanEditSysName" + index;
|
|
608
|
+
outcomeCanEditSysName.Value = true;
|
|
609
|
+
objectOutcomeOptions.push(outcomeID, outcomeName, outcomeDecisionSysName, outcomeNextActivityTypes, outcomeCanAddComment, outcomeCanEdit, outcomeHiddeneSysName, outcomeCanEditSysName);
|
|
610
|
+
this.outcomesOptions.push(objectOutcomeOptions);
|
|
611
|
+
this.outcomesCount += 1;
|
|
612
|
+
}
|
|
613
|
+
deleteOutcome(deletedOutcome) {
|
|
614
|
+
debugger;
|
|
615
|
+
let deletedOutcomeIndex = this.outcomesOptions.indexOf(deletedOutcome);
|
|
616
|
+
if (deletedOutcomeIndex !== -1) {
|
|
617
|
+
this.outcomesOptions.splice(deletedOutcomeIndex, 1);
|
|
618
|
+
for (var i = 0; i < deletedOutcome.length; i++) {
|
|
619
|
+
this.editworkflowActivityForm.removeControl(deletedOutcome[i].Name);
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
//On changes events
|
|
624
|
+
activityTypeOnChange(activityType) {
|
|
625
|
+
//Reset controls, outcomes and flags
|
|
626
|
+
this.resetAllActivityTypeControls();
|
|
627
|
+
this.outcomesOptions = [];
|
|
628
|
+
this.outcomesCount = 0;
|
|
629
|
+
this.showParticipantContainer = false;
|
|
630
|
+
this.showDynamicControls = false;
|
|
631
|
+
this.showStaticControls = false;
|
|
632
|
+
this.showConditionControls = false;
|
|
633
|
+
this.showConditionRHSWFVariable = false;
|
|
634
|
+
this.showOutcomesContainer = false;
|
|
635
|
+
this.activityTypeID = activityType;
|
|
636
|
+
this.workflowActivityService.getActivityOutcomes(this.versionID, activityType).subscribe((result) => {
|
|
637
|
+
var resultObj = result;
|
|
638
|
+
var model = resultObj.model;
|
|
639
|
+
var list = resultObj.list;
|
|
640
|
+
this.nextActivityList = list.activities;
|
|
641
|
+
switch (Number(activityType)) {
|
|
642
|
+
case WFActivityType.Approval:
|
|
643
|
+
case WFActivityType.Action:
|
|
644
|
+
case WFActivityType.PercentageTask:
|
|
645
|
+
this.taskTypeList = list.tasks;
|
|
646
|
+
this.participantTypeList = list.participants.participantTypes;
|
|
647
|
+
this.participantDataList = list.participants.participantData;
|
|
648
|
+
//Initialize required controls for approval
|
|
649
|
+
this.participantTypes = new DropdownOptions();
|
|
650
|
+
this.participantTypes.Name = "participantTypes";
|
|
651
|
+
this.participantTypes.LabelKey = "ParticipantTypes";
|
|
652
|
+
this.participantTypes.DataSource = this.participantTypeList;
|
|
653
|
+
this.participantTypes.SingleSelection = false;
|
|
654
|
+
this.participantTypes.AllowSearchFilter = true;
|
|
655
|
+
this.participantTypes.IsRequired = true;
|
|
656
|
+
this.dynamicTaskName = new MultiLingualTextBoxOptions();
|
|
657
|
+
this.dynamicTaskName.Name = "dynamicTaskName";
|
|
658
|
+
this.dynamicTaskName.ArabicLabelKey = "TaskNameInArabic";
|
|
659
|
+
this.dynamicTaskName.EnglishLabelKey = "TaskNameInEnglish";
|
|
660
|
+
this.dynamicTaskDescription = new MultiLingualTextAreaOptions();
|
|
661
|
+
this.dynamicTaskDescription.Name = "dynamicTaskDescription";
|
|
662
|
+
this.dynamicTaskDescription.ArabicLabelKey = "TaskDescriptionInArabic";
|
|
663
|
+
this.dynamicTaskDescription.EnglishLabelKey = "TaskDescriptionInEnglish";
|
|
664
|
+
this.dynamicTaskURL = new TextBoxOptions();
|
|
665
|
+
this.dynamicTaskURL.Name = "dynamicTaskURL";
|
|
666
|
+
this.dynamicTaskURL.LabelKey = "TaskURL";
|
|
667
|
+
this.dynamicTaskURL.Type = InputType.Text;
|
|
668
|
+
this.dynamicTaskType = new DropdownOptions();
|
|
669
|
+
this.dynamicTaskType.Name = "dynamicTaskType";
|
|
670
|
+
this.dynamicTaskType.LabelKey = "TaskType";
|
|
671
|
+
this.dynamicTaskType.DataSource = this.taskTypeList;
|
|
672
|
+
this.dynamicTaskType.SingleSelection = true;
|
|
673
|
+
this.dynamicTaskType.AllowSearchFilter = true;
|
|
674
|
+
this.dynamicTaskType.IsRequired = true;
|
|
675
|
+
this.dynamicCanComplete = new ToggleSlideOptions();
|
|
676
|
+
this.dynamicCanComplete.Name = "dynamicCanComplete";
|
|
677
|
+
this.dynamicCanComplete.LabelKey = "CanCompleteFromTME";
|
|
678
|
+
this.dynamicCanComplete.ViewType = ControlLayout.Horizontal;
|
|
679
|
+
this.dynamicCanComplete.Value = model.canCompleteFromTME;
|
|
680
|
+
let outcomesResult = this.getActivityOutcomesOptions(model.outcomes, false);
|
|
681
|
+
this.outcomesOptions = outcomesResult[0];
|
|
682
|
+
this.outcomesCount = outcomesResult[1];
|
|
683
|
+
this.showDynamicControls = true;
|
|
684
|
+
this.showParticipantContainer = true;
|
|
685
|
+
this.showOutcomesContainer = true;
|
|
686
|
+
break;
|
|
687
|
+
case WFActivityType.Email:
|
|
688
|
+
case WFActivityType.Sleep:
|
|
689
|
+
let name = new EnglishArabicDTO();
|
|
690
|
+
name.Arabic = model.normalOutcomeName.arabic;
|
|
691
|
+
name.English = model.normalOutcomeName.english;
|
|
692
|
+
this.staticOutcomeName = new MultiLingualTextBoxOptions();
|
|
693
|
+
this.staticOutcomeName.Name = "staticOutcomeName";
|
|
694
|
+
this.staticOutcomeName.ArabicLabelKey = "OutcomeNameInArabic";
|
|
695
|
+
this.staticOutcomeName.EnglishLabelKey = "OutcomeNameInEnglish";
|
|
696
|
+
this.staticOutcomeName.IsRequired = true;
|
|
697
|
+
this.staticOutcomeName.Value = name;
|
|
698
|
+
this.staticOutcomeSysName = new TextBoxOptions();
|
|
699
|
+
this.staticOutcomeSysName.Name = "staticOutcomeSysName";
|
|
700
|
+
this.staticOutcomeSysName.LabelKey = "DecisionSysName";
|
|
701
|
+
this.staticOutcomeSysName.Type = InputType.Text;
|
|
702
|
+
this.staticOutcomeSysName.IsRequired = true;
|
|
703
|
+
this.staticOutcomeNextActivity = new DropdownOptions();
|
|
704
|
+
this.staticOutcomeNextActivity.Name = "staticOutcomeNextActivity";
|
|
705
|
+
this.staticOutcomeNextActivity.LabelKey = "NextActivity";
|
|
706
|
+
this.staticOutcomeNextActivity.DataSource = this.nextActivityList;
|
|
707
|
+
this.staticOutcomeNextActivity.SingleSelection = true;
|
|
708
|
+
this.staticOutcomeNextActivity.AllowSearchFilter = true;
|
|
709
|
+
this.staticOutcomeNextActivity.IsRequired = true;
|
|
710
|
+
this.staticOutcomeCanAddComment = new ToggleSlideOptions();
|
|
711
|
+
this.staticOutcomeCanAddComment.Name = "staticOutcomeCanAddComment";
|
|
712
|
+
this.staticOutcomeCanAddComment.LabelKey = "CanAddComment";
|
|
713
|
+
this.staticOutcomeCanAddComment.ViewType = ControlLayout.Horizontal;
|
|
714
|
+
this.staticOutcomeCanAddComment.Value = model.canAddComment;
|
|
715
|
+
this.showStaticControls = true;
|
|
716
|
+
break;
|
|
717
|
+
case WFActivityType.Condition:
|
|
718
|
+
this.conditionLHSWFVariableList = list.wfVariables;
|
|
719
|
+
this.conditionRHSWFVariableList = list.wfVariables;
|
|
720
|
+
this.conditionRHSTypeList = list.rhsTypes;
|
|
721
|
+
this.conditionList = list.conditions;
|
|
722
|
+
this.conditionLHSDropDown = new DropdownOptions();
|
|
723
|
+
this.conditionLHSDropDown.Name = "conditionLHSDropDown";
|
|
724
|
+
this.conditionLHSDropDown.HideLabel = true;
|
|
725
|
+
this.conditionLHSDropDown.Placeholder = "WorkflowVariables";
|
|
726
|
+
this.conditionLHSDropDown.DataSource = this.conditionLHSWFVariableList;
|
|
727
|
+
this.conditionLHSDropDown.SingleSelection = true;
|
|
728
|
+
this.conditionLHSDropDown.AllowSearchFilter = true;
|
|
729
|
+
this.conditionLHSDropDown.IsRequired = true;
|
|
730
|
+
this.conditionsDropDown = new DropdownOptions();
|
|
731
|
+
this.conditionsDropDown.Name = "conditionsDropDown";
|
|
732
|
+
this.conditionsDropDown.HideLabel = true;
|
|
733
|
+
this.conditionsDropDown.Placeholder = "Condition";
|
|
734
|
+
this.conditionsDropDown.DataSource = this.conditionList;
|
|
735
|
+
this.conditionsDropDown.SingleSelection = true;
|
|
736
|
+
this.conditionsDropDown.IsRequired = true;
|
|
737
|
+
let selectedRHSType = this.conditionRHSTypeList.filter((item) => { return item.key == ConditionRHSType.Variable; }).map((item) => item.key)[0];
|
|
738
|
+
this.conditionRHSTypeDropDown = new DropdownOptions();
|
|
739
|
+
this.conditionRHSTypeDropDown.Name = "conditionRHSTypeDropDown";
|
|
740
|
+
this.conditionRHSTypeDropDown.HideLabel = true;
|
|
741
|
+
this.conditionRHSTypeDropDown.DataSource = this.conditionRHSTypeList;
|
|
742
|
+
this.conditionRHSTypeDropDown.SingleSelection = true;
|
|
743
|
+
this.conditionRHSTypeDropDown.IsRequired = true;
|
|
744
|
+
this.conditionRHSTypeDropDown.SelectedItems = selectedRHSType;
|
|
745
|
+
this.conditionRHSDropDown = new DropdownOptions();
|
|
746
|
+
this.conditionRHSDropDown.Name = "conditionRHSDropDown";
|
|
747
|
+
this.conditionRHSDropDown.HideLabel = true;
|
|
748
|
+
this.conditionRHSDropDown.Placeholder = "WorkflowVariables";
|
|
749
|
+
this.conditionRHSDropDown.DataSource = this.conditionRHSWFVariableList;
|
|
750
|
+
this.conditionRHSDropDown.SingleSelection = true;
|
|
751
|
+
this.conditionRHSDropDown.IsRequired = true;
|
|
752
|
+
let conditionOutcomesResult = this.getActivityOutcomesOptions(model.outcomes, false);
|
|
753
|
+
this.outcomesOptions = conditionOutcomesResult[0];
|
|
754
|
+
this.outcomesCount = conditionOutcomesResult[1];
|
|
755
|
+
this.showConditionControls = true;
|
|
756
|
+
this.showConditionRHSWFVariable = true;
|
|
757
|
+
this.showOutcomesContainer = true;
|
|
758
|
+
break;
|
|
759
|
+
}
|
|
760
|
+
this.canAddOutcome = this.showOutcomesContainer ? model.canAddOutcome : false;
|
|
761
|
+
});
|
|
762
|
+
}
|
|
763
|
+
conditionRHSTypeOnChange(type) {
|
|
764
|
+
if (type == ConditionRHSType.Variable) {
|
|
765
|
+
this.editworkflowActivityForm.removeControl("conditionRHSValue");
|
|
766
|
+
this.conditionRHSDropDown = new DropdownOptions();
|
|
767
|
+
this.conditionRHSDropDown.Name = "conditionRHSDropDown";
|
|
768
|
+
this.conditionRHSDropDown.HideLabel = true;
|
|
769
|
+
this.conditionRHSDropDown.Placeholder = "WorkflowVariables";
|
|
770
|
+
this.conditionRHSDropDown.DataSource = this.conditionRHSWFVariableList;
|
|
771
|
+
this.conditionRHSDropDown.SingleSelection = true;
|
|
772
|
+
this.conditionRHSDropDown.IsRequired = true;
|
|
773
|
+
this.showConditionRHSWFVariable = true;
|
|
774
|
+
}
|
|
775
|
+
else {
|
|
776
|
+
this.editworkflowActivityForm.removeControl("conditionRHSDropDown");
|
|
777
|
+
this.conditionRHSValue = new TextBoxOptions();
|
|
778
|
+
this.conditionRHSValue.Name = "conditionRHSValue";
|
|
779
|
+
this.conditionRHSValue.HideLabel = true;
|
|
780
|
+
this.conditionRHSValue.Placeholder = "Value";
|
|
781
|
+
this.conditionRHSValue.Type = InputType.Text;
|
|
782
|
+
this.conditionRHSValue.IsRequired = true;
|
|
783
|
+
this.showConditionRHSWFVariable = false;
|
|
784
|
+
}
|
|
785
|
+
}
|
|
786
|
+
participantTypeOnChange(participantType) {
|
|
787
|
+
if (participantType == ParticipantType.PermissionSet) {
|
|
788
|
+
this.participantPermissionSet = new DropdownOptions();
|
|
789
|
+
this.participantPermissionSet.Name = "participantPermissionSet";
|
|
790
|
+
this.participantPermissionSet.LabelKey = "PermissionSet";
|
|
791
|
+
this.participantPermissionSet.DataSource = this.participantDataList;
|
|
792
|
+
this.participantPermissionSet.SingleSelection = false;
|
|
793
|
+
this.participantPermissionSet.AllowSearchFilter = true;
|
|
794
|
+
this.showParticipantPermssionSet = true;
|
|
795
|
+
}
|
|
796
|
+
else {
|
|
797
|
+
this.editworkflowActivityForm.removeControl("participantPermissionSet");
|
|
798
|
+
this.showParticipantPermssionSet = false;
|
|
799
|
+
}
|
|
800
|
+
}
|
|
801
|
+
//Reset type
|
|
802
|
+
resetAllActivityTypeControls() {
|
|
803
|
+
this.editworkflowActivityForm.removeControl("participantTypes");
|
|
804
|
+
this.editworkflowActivityForm.removeControl("participantPermissionSet");
|
|
805
|
+
this.editworkflowActivityForm.removeControl("participantPermissionSet");
|
|
806
|
+
this.editworkflowActivityForm.removeControl("dynamicTaskName");
|
|
807
|
+
this.editworkflowActivityForm.removeControl("dynamicTaskDescription");
|
|
808
|
+
this.editworkflowActivityForm.removeControl("dynamicTaskURL");
|
|
809
|
+
this.editworkflowActivityForm.removeControl("dynamicTaskType");
|
|
810
|
+
this.editworkflowActivityForm.removeControl("dynamicCanComplete");
|
|
811
|
+
this.editworkflowActivityForm.removeControl("staticOutcomeName");
|
|
812
|
+
this.editworkflowActivityForm.removeControl("staticOutcomeSysName");
|
|
813
|
+
this.editworkflowActivityForm.removeControl("staticOutcomeNextActivity");
|
|
814
|
+
this.editworkflowActivityForm.removeControl("staticOutcomeCanAddComment");
|
|
815
|
+
this.editworkflowActivityForm.removeControl("conditionLHSDropDown");
|
|
816
|
+
this.editworkflowActivityForm.removeControl("conditionsDropDown");
|
|
817
|
+
this.editworkflowActivityForm.removeControl("conditionRHSTypeDropDown");
|
|
818
|
+
this.editworkflowActivityForm.removeControl("conditionRHSDropDown");
|
|
819
|
+
this.editworkflowActivityForm.removeControl("conditionRHSValue");
|
|
820
|
+
//Remove outcomes controls
|
|
821
|
+
let ResultModel = this.editworkflowActivityForm.value;
|
|
822
|
+
for (let i = 0; i < this.outcomesCount; i++) {
|
|
823
|
+
let outcomeID = ResultModel["outcomeID" + i];
|
|
824
|
+
if (outcomeID == undefined)
|
|
825
|
+
continue;
|
|
826
|
+
this.editworkflowActivityForm.removeControl("outcomeID" + i);
|
|
827
|
+
this.editworkflowActivityForm.removeControl("outcomeName" + i);
|
|
828
|
+
this.editworkflowActivityForm.removeControl("outcomeDecisionSysName" + i);
|
|
829
|
+
this.editworkflowActivityForm.removeControl("outcomeHiddeneSysName" + i);
|
|
830
|
+
this.editworkflowActivityForm.removeControl("outcomeNextActivityTypes" + i);
|
|
831
|
+
this.editworkflowActivityForm.removeControl("outcomeCanAddComment" + i);
|
|
832
|
+
}
|
|
833
|
+
}
|
|
834
|
+
//Cancel
|
|
835
|
+
cancelEdit() {
|
|
836
|
+
this.router.navigate(['/Admin/Workflows/workflow/']);
|
|
837
|
+
}
|
|
838
|
+
//On destroy
|
|
839
|
+
ngOnDestroy() {
|
|
840
|
+
this.requestHandlerService.destroyHandler();
|
|
841
|
+
}
|
|
842
|
+
}
|
|
843
|
+
WorkflowActivityEditComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: WorkflowActivityEditComponent, deps: [{ token: i1.WorkflowActivityService }, { token: i2.PageInfoService }, { token: i3.UtilityService }, { token: i4.ActivatedRoute }, { token: i4.Router }, { token: i3.RequestHandlerService }, { token: i3.BBSFTranslateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
844
|
+
WorkflowActivityEditComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: WorkflowActivityEditComponent, selector: "lib-workflow-activity-edit", ngImport: i0, template: "<div class=\"container-fluid\">\r\n <div class=\"card card-custom-h\" *ngIf=\"isEditFormLoaded\">\r\n <div class=\"card-body py-3\">\r\n <BBSF-Form [options]=\"editworkflowActivityFormOptions\">\r\n <!--Start shared controls container-->\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"name\" [group]=\"editworkflowActivityForm\"></BBSF-MultiLingualTextBox>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"row\" *ngIf=\"!isPublished\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"sysName\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\" *ngIf=\"showActivityType\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"activityType\" [group]=\"editworkflowActivityForm\" (OnChange)=\"activityTypeOnChange($event)\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <!--End shared controls container-->\r\n <!--Start participant container-->\r\n <div id=\"participantContainer\" *ngIf=\"showParticipantContainer\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"participantTypes\" [group]=\"editworkflowActivityForm\" (OnChange)=\"participantTypeOnChange($event)\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"showParticipantPermssionSet\" class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"participantPermissionSet\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n </div>\r\n <!--End participant container-->\r\n <!--Start static controls-->\r\n <div *ngIf=\"showStaticControls\" id=\"staticContainer\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"staticOutcomeName\" [group]=\"editworkflowActivityForm\"></BBSF-MultiLingualTextBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"staticOutcomeSysName\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"staticOutcomeNextActivity\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-Toggleslide [options]=\"staticOutcomeCanAddComment\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-Toggleslide>\r\n </div>\r\n </div>\r\n </div>\r\n <!--End static controls-->\r\n <!--Start dynamic controls-->\r\n <div *ngIf=\"showDynamicControls\" id=\"dynamicContainer\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"dynamicTaskName\" [group]=\"editworkflowActivityForm\"></BBSF-MultiLingualTextBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextArea [options]=\"dynamicTaskDescription\" [group]=\"editworkflowActivityForm\"></BBSF-MultiLingualTextArea>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"dynamicTaskURL\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"dynamicTaskType\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-Toggleslide [options]=\"dynamicCanComplete\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-Toggleslide>\r\n </div>\r\n </div>\r\n </div>\r\n <!--End dynamic controls-->\r\n <!--Start condition controls-->\r\n <div *ngIf=\"showConditionControls\" id=\"conditionContainer\">\r\n <div class=\"table-responsive\">\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer table-w-control\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"LeftHandSide\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Condition\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"RightHandSideType\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"RightHandSide\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr>\r\n <td>\r\n <BBSF-DropdownList [options]=\"conditionLHSDropDown\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-DropdownList>\r\n </td>\r\n <td>\r\n <BBSF-DropdownList [options]=\"conditionsDropDown\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-DropdownList>\r\n </td>\r\n <td>\r\n <BBSF-DropdownList [options]=\"conditionRHSTypeDropDown\" [group]=\"editworkflowActivityForm\" (OnChange)=\"conditionRHSTypeOnChange($event)\">\r\n </BBSF-DropdownList>\r\n </td>\r\n <td *ngIf=\"showConditionRHSWFVariable; else conditionTxtValue\">\r\n <BBSF-DropdownList [options]=\"conditionRHSDropDown\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-DropdownList>\r\n </td>\r\n <ng-template #conditionTxtValue>\r\n <td>\r\n <BBSF-TextBox [options]=\"conditionRHSValue\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n </ng-template>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <!--End condition controls-->\r\n <!--Start outcomes container-->\r\n <div *ngIf=\"showOutcomesContainer\" id=\"outcomesContainer\" class=\"row\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer table-w-control\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Decision\")}}</th>\r\n <th class=\"min-w-150px\"></th>\r\n <th *ngIf=\"!isPublished\" class=\"min-w-150px\"></th>\r\n <th *ngIf=\"!isPublished\" class=\"min-w-150px\"></th>\r\n <th *ngIf=\"!isPublished\" class=\"min-w-150px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\" *ngIf=\"isPublished;else notPublishedOutcomes\">\r\n <tr *ngFor=\"let option of outcomesOptions;let i=index;\">\r\n <td>\r\n <!--ID-->\r\n <BBSF-TextBox [hidden]=\"true\" [options]=\"option[0]\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-TextBox>\r\n <!--Name-->\r\n <BBSF-MultiLingualTextBox [options]=\"option[1]\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-MultiLingualTextBox>\r\n </td>\r\n <td>\r\n <!--NextActivity-->\r\n <BBSF-DropdownList [options]=\"option[2]\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-DropdownList>\r\n </td>\r\n </tr>\r\n </tbody>\r\n\r\n <ng-template #notPublishedOutcomes>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let option of outcomesOptions;let i=index;\">\r\n\r\n <td>\r\n <!--ID-->\r\n <BBSF-TextBox [hidden]=\"true\" [options]=\"option[0]\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-TextBox>\r\n <!--Name-->\r\n <BBSF-MultiLingualTextBox [options]=\"option[1]\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-MultiLingualTextBox>\r\n </td>\r\n <td>\r\n <!--SysName-->\r\n <BBSF-TextBox [options]=\"option[2]\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-TextBox>\r\n <!--hidden SysName-->\r\n <BBSF-TextBox [hidden]=\"true\" [options]=\"option[6]\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-TextBox>\r\n <!--can edit SysName-->\r\n <BBSF-CheckBox [hidden]=\"true\" [options]=\"option[7]\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-CheckBox>\r\n </td>\r\n <td>\r\n <!--NextActivity-->\r\n <BBSF-DropdownList [options]=\"option[3]\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-DropdownList>\r\n </td>\r\n <td>\r\n <!--CanAddComment-->\r\n <BBSF-CheckBox [options]=\"option[4]\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-CheckBox>\r\n </td>\r\n\r\n <td>\r\n <!--if outcome Can Edit-->\r\n <a *ngIf=\"option[5]\" class=\"btn btn-icon btn-light-danger btn-sm\" (click)=\"deleteOutcome(option)\">\r\n <i class=\" fa fa-trash hidden\" aria-hidden=\"true\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"canAddOutcome\">\r\n <td colspan=\"5\">\r\n <button type=\"button\" class=\"w-100 btn btn-success\" (click)=\"addWFActivityOutcome()\">\r\n {{utilityService.getResourceValue(\"AddNewRecord\")}}\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </ng-template>\r\n\r\n </table>\r\n </div>\r\n\r\n </div>\r\n <!--End outcomes container-->\r\n\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" class=\"btn btn-light me-3 btn-sm\" (click)=\"cancelEdit()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n", components: [{ type: i5.ɵv, selector: "BBSF-Form", inputs: ["options"] }, { type: i5.ɵc, selector: "BBSF-MultiLingualTextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i5.ɵd, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i5.ɵh, selector: "BBSF-DropdownList", inputs: ["group", "options"], outputs: ["OnChange", "onClear"] }, { type: i5.ɵj, selector: "BBSF-Toggleslide", inputs: ["group", "options"] }, { type: i5.ɵf, selector: "BBSF-MultiLingualTextArea", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i5.ɵg, selector: "BBSF-CheckBox", inputs: ["group", "options"], outputs: ["OnChange"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
845
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: WorkflowActivityEditComponent, decorators: [{
|
|
846
|
+
type: Component,
|
|
847
|
+
args: [{
|
|
848
|
+
selector: 'lib-workflow-activity-edit',
|
|
849
|
+
templateUrl: './workflow-activity-edit.component.html'
|
|
850
|
+
}]
|
|
851
|
+
}], ctorParameters: function () { return [{ type: i1.WorkflowActivityService }, { type: i2.PageInfoService }, { type: i3.UtilityService }, { type: i4.ActivatedRoute }, { type: i4.Router }, { type: i3.RequestHandlerService }, { type: i3.BBSFTranslateService }]; } });
|
|
852
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctYWN0aXZpdHktZWRpdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL3dvcmtmbG93cy9hY3Rpdml0eS93b3JrZmxvdy1hY3Rpdml0eS1lZGl0L3dvcmtmbG93LWFjdGl2aXR5LWVkaXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy93b3JrZmxvd3MvYWN0aXZpdHkvd29ya2Zsb3ctYWN0aXZpdHktZWRpdC93b3JrZmxvdy1hY3Rpdml0eS1lZGl0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSwyQkFBMkIsRUFBRSwwQkFBMEIsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUdqTyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDMUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpRUFBaUUsQ0FBQztBQUNuRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDeEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sOERBQThELENBQUM7Ozs7Ozs7O0FBT3RHLE1BQU0sT0FBTyw2QkFBNkI7SUF1RXhDLFlBQW9CLHVCQUFnRCxFQUFVLGVBQWdDLEVBQVMsY0FBOEIsRUFDM0ksY0FBOEIsRUFBVSxNQUFjLEVBQVUscUJBQTRDLEVBQzVHLG9CQUEwQztRQUZoQyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBQVUsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQVMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzNJLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSwwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzVHLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUF4RXBELG1CQUFtQjtRQUNuQixxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFPbEMsK0JBQStCO1FBQy9CLDZCQUF3QixHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLG9DQUErQixHQUFHLElBQUksV0FBVyxDQUFDO1FBSWxELHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQU1sQyx1REFBdUQ7UUFDdkQsNkJBQXdCLEdBQVksS0FBSyxDQUFDO1FBQzFDLGdDQUEyQixHQUFZLEtBQUssQ0FBQztRQUk3Qyx1REFBdUQ7UUFDdkQsd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBT3JDLDBEQUEwRDtRQUMxRCxnREFBZ0Q7UUFDaEQsdUJBQWtCLEdBQVksS0FBSyxDQUFDO1FBTXBDLHlCQUF5QjtRQUN6QiwwQkFBcUIsR0FBWSxLQUFLLENBQUM7UUFNdkMsK0JBQTBCLEdBQVksS0FBSyxDQUFDO1FBRTVDLHVCQUF1QjtRQUN2QixxQkFBZ0IsR0FBVSxFQUFFLENBQUM7UUFFN0IsOEJBQThCO1FBQzlCLG9CQUFlLEdBQVUsRUFBRSxDQUFDO1FBQzVCLGtCQUFhLEdBQVcsQ0FBQyxDQUFDO1FBQzFCLDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQUU5QixlQUFlO1FBQ2YsaUJBQVksR0FBRyxFQUFFLENBQUM7UUFDbEIsd0JBQW1CLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLHdCQUFtQixHQUFHLEVBQUUsQ0FBQztRQUN6QixxQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFFdEIsNEJBQTRCO1FBQzVCLCtCQUEwQixHQUFHLEVBQUUsQ0FBQztRQUNoQywrQkFBMEIsR0FBRyxFQUFFLENBQUM7UUFDaEMseUJBQW9CLEdBQUcsRUFBRSxDQUFDO1FBQzFCLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBZ2FuQixnQkFBZ0I7UUFDaEIsMkJBQXNCLEdBQUcsR0FBRyxFQUFFO1lBQzVCLElBQUksVUFBVSxHQUFVLEVBQUUsQ0FBQztZQUMzQixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDO1lBQ3RELElBQUksU0FBUyxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7WUFDdEMsU0FBUyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUNyQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUNsRCxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNoRCxTQUFTLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDN0MsU0FBUyxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7WUFFbkQsU0FBUyxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFBO1lBR3ZDLHVCQUF1QjtZQUN2QixJQUFJLFdBQVcsQ0FBQyxnQkFBZ0IsSUFBSSxTQUFTLEVBQUU7Z0JBQzdDLFNBQVMsQ0FBQyxjQUFjLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO2dCQUNsRCxTQUFTLENBQUMsY0FBYyxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztnQkFDbEQsU0FBUyxDQUFDLGNBQWMsQ0FBQyw0QkFBNEIsR0FBRyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2hHLElBQUksV0FBVyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLEVBQUU7b0JBQ3hFLFNBQVMsQ0FBQyxjQUFjLENBQUMsc0JBQXNCLEdBQUcsV0FBVyxDQUFDLHdCQUF3QixDQUFDLFFBQVEsRUFBRSxDQUFDO2lCQUNuRzthQUNGO1lBQ0QsUUFBUSxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFO2dCQUNuQyxLQUFLLGNBQWMsQ0FBQyxRQUFRLENBQUM7Z0JBQzdCLEtBQUssY0FBYyxDQUFDLE1BQU0sQ0FBQztnQkFDM0IsS0FBSyxjQUFjLENBQUMsY0FBYztvQkFDaEMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUM7b0JBQ2pFLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDO29CQUMvRCxTQUFTLENBQUMsZUFBZSxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDO29CQUMvRSxTQUFTLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDO29CQUM3RSxTQUFTLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUM7b0JBQy9DLFNBQVMsQ0FBQyxlQUFlLEdBQUcsV0FBVyxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztvQkFDN0csU0FBUyxDQUFDLGtCQUFrQixHQUFHLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQztvQkFDOUQsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyxLQUFLLENBQUM7Z0JBQzFCLEtBQUssY0FBYyxDQUFDLEtBQUssQ0FBQztnQkFDMUIsS0FBSyxjQUFjLENBQUMsS0FBSztvQkFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7d0JBQ3JCLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQzt3QkFDNUUsU0FBUyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDO3dCQUMxRSxTQUFTLENBQUMsY0FBYyxHQUFHLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQzt3QkFDNUQsU0FBUyxDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUMseUJBQXlCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzt3QkFDaEksU0FBUyxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUMsMEJBQTBCLENBQUM7cUJBQ2xFO29CQUNELE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsU0FBUztvQkFDM0IsU0FBUyxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUMsb0JBQW9CLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztvQkFDckgsU0FBUyxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUMsb0JBQW9CLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztvQkFDckgsU0FBUyxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUMsd0JBQXdCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztvQkFDN0gsU0FBUyxDQUFDLGtCQUFrQixHQUFHLFdBQVcsQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO29CQUN0SCxTQUFTLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxpQkFBaUIsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO29CQUN2RyxNQUFNO2FBRVQ7WUFDRCx3Q0FBd0M7WUFDeEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzNDLElBQUksU0FBUyxHQUFHLFdBQVcsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzdDLElBQUksU0FBUyxJQUFJLFNBQVM7b0JBQ3hCLFNBQVM7Z0JBRVgsSUFBSSxXQUFXLEdBQUcsV0FBVyxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFFakQsSUFBSSxjQUFzQixDQUFDO2dCQUMzQixJQUFJLHFCQUFxQixHQUFHLFdBQVcsQ0FBQyx1QkFBdUIsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDckUsSUFBSSxxQkFBcUI7b0JBQ3ZCLGNBQWMsR0FBRyxXQUFXLENBQUMsd0JBQXdCLEdBQUcsQ0FBQyxDQUFDLENBQUM7O29CQUUzRCxjQUFjLEdBQUcsV0FBVyxDQUFDLHVCQUF1QixHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUU1RCxJQUFJLGVBQWUsR0FBRyxXQUFXLENBQUMsMEJBQTBCLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xFLElBQUksb0JBQW9CLEdBQUcsV0FBVyxDQUFDLHNCQUFzQixHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUVuRSxJQUFJLGVBQWUsR0FBMkIsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO2dCQUMzRSxlQUFlLENBQUMsRUFBRSxHQUFHLFNBQVMsQ0FBQztnQkFDL0IsZUFBZSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDO2dCQUM3QyxlQUFlLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7Z0JBQzVDLGVBQWUsQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO2dCQUNoRCxlQUFlLENBQUMsY0FBYyxHQUFHLGVBQWUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUMxRixlQUFlLENBQUMsYUFBYSxHQUFHLG9CQUFvQixDQUFDO2dCQUVyRCxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQzthQUMxQztZQUdELFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDM0IsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQyxDQUFBO1FBQ0QsOEJBQXlCLEdBQUcsQ0FBQyxTQUFTLEVBQW1CLEVBQUU7WUFDekQsSUFBSSxJQUFJLENBQUMsV0FBVztnQkFDbEIsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUM7O2dCQUVyRSxPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFBO1FBQ0Qsa0JBQWEsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwQixDQUFDLENBQUE7UUE1ZkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzVDLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRTVDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNLLFFBQVE7O1lBRVosSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDekQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLENBQUMsQ0FBQyxDQUFBO1lBRUYsZUFBZSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLHNCQUFzQixDQUFDLENBQUM7WUFDekYsZUFBZSxDQUFDLGVBQWUsR0FBRztnQkFDaEMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRTtnQkFDakgsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFO2dCQUMzRCxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxFQUFFLElBQUksRUFBRSwyQkFBMkIsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUU7Z0JBQ3BJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRTthQUM1RCxDQUFDO1lBQ0YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsZUFBZSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3hCLENBQUM7S0FBQTtJQUVELHlDQUF5QztJQUN6QyxjQUFjO1FBQ1osSUFBSSxDQUFDLHVCQUF1QixDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNoRyxJQUFJLFNBQVMsR0FBRyxNQUFhLENBQUM7WUFDOUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO1lBQ3JDLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDMUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUM7WUFDL0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDeEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDO1lBQzVELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUM7WUFDbEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQztZQUU5QyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUE7WUFDakQsSUFBSSxDQUFDLCtCQUErQixHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7WUFDekQsSUFBSSxDQUFDLCtCQUErQixDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUE7WUFDOUUsSUFBSSxDQUFDLCtCQUErQixDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztZQUNwRixJQUFJLENBQUMsK0JBQStCLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDO1lBQzVGLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBRTNFLElBQUksSUFBSSxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUMvQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUM3QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksMEJBQTBCLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7WUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1lBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztZQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBRXZCLElBQUksY0FBYyxHQUFRLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDekcsSUFBSSxDQUFDLGVBQWUsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLGFBQWEsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFdkMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztZQUU5QixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ3BCLFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRTtvQkFDbkMsS0FBSyxjQUFjLENBQUMsUUFBUSxDQUFDO29CQUM3QixLQUFLLGNBQWMsQ0FBQyxNQUFNLENBQUM7b0JBQzNCLEtBQUssY0FBYyxDQUFDLGNBQWM7d0JBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQzt3QkFFL0IsSUFBSSxRQUFRLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO3dCQUN0QyxRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQzt3QkFDdkQsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7d0JBRXJELElBQUksZUFBZSxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQzt3QkFDN0MsZUFBZSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUM7d0JBQ3JFLGVBQWUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDO3dCQUVuRSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksMEJBQTBCLEVBQUUsQ0FBQzt3QkFDeEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUM7d0JBQzlDLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxHQUFHLGtCQUFrQixDQUFDO3dCQUN6RCxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsR0FBRyxtQkFBbUIsQ0FBQzt3QkFDM0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDO3dCQUV0QyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSwyQkFBMkIsRUFBRSxDQUFDO3dCQUNoRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxHQUFHLHdCQUF3QixDQUFDO3dCQUM1RCxJQUFJLENBQUMsc0JBQXNCLENBQUMsY0FBYyxHQUFHLHlCQUF5QixDQUFDO3dCQUN2RSxJQUFJLENBQUMsc0JBQXNCLENBQUMsZUFBZSxHQUFHLDBCQUEwQixDQUFDO3dCQUN6RSxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQzt3QkFFcEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO3dCQUMzQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQzt3QkFDNUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO3dCQUN6QyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO3dCQUMxQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQzt3QkFFdkQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO3dCQUM3QyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQTt3QkFDN0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFBO3dCQUMxQyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFBO3dCQUNuRCxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7d0JBQzVDLElBQUksQ0FBQyxlQUFlLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO3dCQUM5QyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7d0JBQ3ZDLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFBQSxDQUFDO3dCQUUxSyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO3dCQUNuRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxHQUFHLG9CQUFvQixDQUFDO3dCQUNwRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxHQUFHLG9CQUFvQixDQUFDO3dCQUN4RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUM7d0JBQzVELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQzt3QkFFdEUsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQzt3QkFDaEMsTUFBTTtvQkFDUixLQUFLLGNBQWMsQ0FBQyxTQUFTO3dCQUMzQixJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQzt3QkFDbkQsSUFBSSxDQUFDLDBCQUEwQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7d0JBQ25ELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO3dCQUMxQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7d0JBRXJDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO3dCQUNsRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxHQUFHLHNCQUFzQixDQUFBO3dCQUN2RCxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQTt3QkFDMUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQTt3QkFDM0QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQUE7d0JBQ3RFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO3dCQUNqRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO3dCQUNuRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQzt3QkFDNUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFBQSxDQUFDO3dCQUUzTCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQzt3QkFDaEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksR0FBRyxvQkFBb0IsQ0FBQTt3QkFDbkQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUE7d0JBQ3hDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFBO3dCQUNqRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUE7d0JBQ3ZELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO3dCQUMvQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQzt3QkFDMUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFBQSxDQUFDO3dCQUVqTCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQzt3QkFDdEQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksR0FBRywwQkFBMEIsQ0FBQTt3QkFDL0QsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUE7d0JBQzlDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFBO3dCQUNwRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQzt3QkFDckQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7d0JBQ2hELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQUEsQ0FBQzt3QkFHekwsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUU7NEJBQ2pFLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDOzRCQUNsRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxHQUFHLHNCQUFzQixDQUFBOzRCQUN2RCxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQTs0QkFDMUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQTs0QkFDM0QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQUE7NEJBQ3RFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDOzRCQUNqRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQzs0QkFDNUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFBQSxDQUFDOzRCQUUzTCxJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDO3lCQUN4Qzs2QkFDSTs0QkFDSCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQzs0QkFDOUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksR0FBRyxtQkFBbUIsQ0FBQzs0QkFDbEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7NEJBQ3hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDOzRCQUM3QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7NEJBQzdDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDOzRCQUN6QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDOzRCQUUzRCxJQUFJLENBQUMsMEJBQTBCLEdBQUcsS0FBSyxDQUFDO3lCQUN6Qzt3QkFFRCxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO3dCQUNsQyxNQUFNO2lCQUNUO2dCQUVELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7YUFDbkM7aUJBQ0k7Z0JBQ0gsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztnQkFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2dCQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQztnQkFFaEQsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixJQUFJLGNBQWMsQ0FBQyxLQUFLLEVBQUU7b0JBQ2pFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7b0JBRTdCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztvQkFDMUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFBO29CQUN2QyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsR0FBRyxjQUFjLENBQUE7b0JBQzNDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQTtvQkFDcEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO29CQUN6QyxJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztvQkFDM0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO29CQUNwQyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUFBLENBQUM7aUJBQzdKO2dCQUVELFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsRUFBRTtvQkFDckQsS0FBSyxjQUFjLENBQUMsUUFBUSxDQUFDO29CQUM3QixLQUFLLGNBQWMsQ0FBQyxNQUFNLENBQUM7b0JBQzNCLEtBQUssY0FBYyxDQUFDLGNBQWM7d0JBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQzt3QkFDL0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUM7d0JBQzlELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQzt3QkFFN0QsSUFBSSxRQUFRLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO3dCQUN0QyxRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQzt3QkFDdkQsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7d0JBRXJELElBQUksZUFBZSxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQzt3QkFDN0MsZUFBZSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUM7d0JBQ3JFLGVBQWUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDO3dCQUNuRSwyQ0FBMkM7d0JBQzNDLElBQUksd0JBQXdCLEdBQWEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQ0FBZ0MsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNuSCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQzt3QkFDOUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksR0FBRyxrQkFBa0IsQ0FBQTt3QkFDL0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQTt3QkFDbkQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUE7d0JBQzNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO3dCQUM5QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO3dCQUMvQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQzt3QkFDeEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFVBQVUsR0FBRzs0QkFDakYsT0FBTyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDbEUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBRTNCLElBQUksd0JBQXdCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRTs0QkFDNUUsSUFBSSxzQkFBc0IsR0FBYSxJQUFJLENBQUMsYUFBYSxDQUFDLDRCQUE0QixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBRTdHLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDOzRCQUN0RCxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxHQUFHLDBCQUEwQixDQUFBOzRCQUMvRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxHQUFHLGVBQWUsQ0FBQTs0QkFDeEQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUE7NEJBQ25FLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDOzRCQUN0RCxJQUFJLENBQUMsd0JBQXdCLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDOzRCQUN2RCxJQUFJLENBQUMsd0JBQXdCLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHO2dDQUN6RixPQUFPLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUNoRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFFM0IsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQzt5QkFDekM7d0JBRUQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLDBCQUEwQixFQUFFLENBQUM7d0JBQ3hELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDO3dCQUM5QyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsR0FBRyxrQkFBa0IsQ0FBQzt3QkFDekQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLEdBQUcsbUJBQW1CLENBQUM7d0JBQzNELElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQzt3QkFFdEMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksMkJBQTJCLEVBQUUsQ0FBQzt3QkFDaEUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksR0FBRyx3QkFBd0IsQ0FBQzt3QkFDNUQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGNBQWMsR0FBRyx5QkFBeUIsQ0FBQzt3QkFDdkUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsR0FBRywwQkFBMEIsQ0FBQzt3QkFDekUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssR0FBRyxlQUFlLENBQUM7d0JBRXBELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQzt3QkFDM0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUM7d0JBQzVDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQzt3QkFDekMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQzt3QkFDMUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7d0JBRXZELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQzt3QkFDN0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUE7d0JBQzdDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQTt3QkFDMUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQTt3QkFDbkQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO3dCQUM1QyxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQzt3QkFDOUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO3dCQUN2QyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQUEsQ0FBQzt3QkFFMUssSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQzt3QkFDbkQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksR0FBRyxvQkFBb0IsQ0FBQzt3QkFDcEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsR0FBRyxvQkFBb0IsQ0FBQzt3QkFDeEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDO3dCQUM1RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUM7d0JBRXRFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7d0JBQ2hDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUM7d0JBQ3JDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7d0JBQ2xDLE1BQU07b0JBQ1IsS0FBSyxjQUFjLENBQUMsS0FBSyxDQUFDO29CQUMxQixLQUFLLGNBQWMsQ0FBQyxLQUFLLENBQUM7b0JBQzFCLEtBQUssY0FBYyxDQUFDLEtBQUs7d0JBQ3ZCLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsSUFBSSxjQUFjLENBQUMsS0FBSyxFQUFFOzRCQUN6RSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQzs0QkFDOUQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDOzRCQUU3RCxJQUFJLHdCQUF3QixHQUFhLElBQUksQ0FBQyxhQUFhLENBQUMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDbkgsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7NEJBQzlDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcsa0JBQWtCLENBQUE7NEJBQy9DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEdBQUcsa0JBQWtCLENBQUE7NEJBQ25ELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFBOzRCQUMzRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQzs0QkFDOUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQzs0QkFDL0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7NEJBQ3hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUc7Z0NBQ2pGLE9BQU8sd0JBQXdCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQ2xFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUUzQixJQUFJLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUU7Z0NBQzVFLElBQUksc0JBQXNCLEdBQWEsSUFBSSxDQUFDLGFBQWEsQ0FBQyw0QkFBNEIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dDQUU3RyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztnQ0FDdEQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksR0FBRywwQkFBMEIsQ0FBQTtnQ0FDL0QsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsR0FBRyxlQUFlLENBQUE7Z0NBQ3hELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFBO2dDQUNuRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztnQ0FDdEQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztnQ0FDdkQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFVBQVUsR0FBRztvQ0FDekYsT0FBTyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQ0FDaEUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0NBQzNCLElBQUksQ0FBQywyQkFBMkIsR0FBRyxJQUFJLENBQUM7NkJBQ3pDOzRCQUNELElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUM7eUJBQ3RDO3dCQUNELElBQUksSUFBSSxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQzt3QkFDbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQzt3QkFDMUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQzt3QkFFNUQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksMEJBQTBCLEVBQUUsQ0FBQzt3QkFDMUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksR0FBRyxtQkFBbUIsQ0FBQzt3QkFDbEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsR0FBRyxxQkFBcUIsQ0FBQzt3QkFDOUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsR0FBRyxzQkFBc0IsQ0FBQzt3QkFDaEUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7d0JBQ3pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO3dCQUVwQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQzt3QkFDakQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksR0FBRyxzQkFBc0IsQ0FBQzt3QkFDeEQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQzt3QkFDdkQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO3dCQUNoRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQzt3QkFDNUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQzt3QkFFcEUsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7d0JBQ3ZELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLEdBQUcsMkJBQTJCLENBQUE7d0JBQ2pFLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFBO3dCQUN4RCxJQUFJLENBQUMseUJBQXlCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQTt3QkFDakUsSUFBSSxDQUFDLHlCQUF5QixDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7d0JBQ3RELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7d0JBQ3hELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO3dCQUNqRCxJQUFJLENBQUMseUJBQXlCLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUFBLENBQUM7d0JBRXZMLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7d0JBQzNELElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLEdBQUcsNEJBQTRCLENBQUM7d0JBQ3BFLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxRQUFRLEdBQUcsZUFBZSxDQUFDO3dCQUMzRCxJQUFJLENBQUMsMEJBQTBCLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUM7d0JBQ3BFLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUM7d0JBRXpFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7d0JBQy9CLE1BQU07b0JBQ1IsS0FBSyxjQUFjLENBQUMsU0FBUzt3QkFDM0IsSUFBSSxDQUFDLDBCQUEwQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7d0JBQ25ELElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO3dCQUNuRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzt3QkFDMUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO3dCQUVyQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQzt3QkFDbEQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksR0FBRyxzQkFBc0IsQ0FBQTt3QkFDdkQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUE7d0JBQzFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLEdBQUcsbUJBQW1CLENBQUE7d0JBQzNELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFBO3dCQUN0RSxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQzt3QkFDakQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQzt3QkFDbkQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7d0JBQzVDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQUEsQ0FBQzt3QkFFM0wsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7d0JBQ2hELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEdBQUcsb0JBQW9CLENBQUE7d0JBQ25ELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFBO3dCQUN4QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQTt3QkFDakQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFBO3dCQUN2RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQzt3QkFDL0MsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7d0JBQzFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQUEsQ0FBQzt3QkFFakwsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7d0JBQ3RELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLEdBQUcsMEJBQTBCLENBQUE7d0JBQy9ELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFBO3dCQUM5QyxJQUFJLENBQUMsd0JBQXdCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQTt3QkFDcEUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7d0JBQ3JELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO3dCQUNoRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUFBLENBQUM7d0JBRXpMLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLElBQUksZ0JBQWdCLENBQUMsUUFBUSxFQUFFOzRCQUNqRSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQzs0QkFDbEQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksR0FBRyxzQkFBc0IsQ0FBQTs0QkFDdkQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUE7NEJBQzFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLEdBQUcsbUJBQW1CLENBQUE7NEJBQzNELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFBOzRCQUN0RSxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQzs0QkFDakQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7NEJBQzVDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQUEsQ0FBQzs0QkFFM0wsSUFBSSxDQUFDLDBCQUEwQixHQUFHLElBQUksQ0FBQzt5QkFDeEM7NkJBQ0k7NEJBQ0gsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7NEJBQzlDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsbUJBQW1CLENBQUM7NEJBQ2xELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDOzRCQUN4QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQzs0QkFDN0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDOzRCQUM3QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQzs0QkFDekMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQzs0QkFFM0QsSUFBSSxDQUFDLDBCQUEwQixHQUFHLEtBQUssQ0FBQzt5QkFDekM7d0JBQ0QsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQzt3QkFDbEMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQzt3QkFDbEMsTUFBTTtpQkFDVDthQUdGO1lBRUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFvR0QsbUJBQW1CO0lBQ25CLDBCQUEwQixDQUFDLFFBQWUsRUFBRSxXQUFvQjtRQUM5RCxJQUFJLGVBQWUsR0FBVSxFQUFFLENBQUM7UUFDaEMsSUFBSSxhQUFhLEdBQVcsQ0FBQyxDQUFDO1FBRTlCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hDLElBQUksY0FBYyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQyxJQUFJLG9CQUFvQixHQUFVLEVBQUUsQ0FBQztZQUVyQyxJQUFJLFNBQVMsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ3JDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsV0FBVyxHQUFHLENBQUMsQ0FBQztZQUNqQyxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUMzQixTQUFTLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDaEMsU0FBUyxDQUFDLEtBQUssR0FBRyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBRXBDLElBQUksSUFBSSxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsT0FBTyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUM7WUFDckMsSUFBSSxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDO1lBRXBDLElBQUksV0FBVyxHQUFHLElBQUksMEJBQTBCLEVBQUUsQ0FBQztZQUNuRCxXQUFXLENBQUMsSUFBSSxHQUFHLGFBQWEsR0FBRyxDQUFDLENBQUM7WUFDckMsV0FBVyxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7WUFDNUMsV0FBVyxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7WUFDOUMsV0FBVyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDekIsV0FBVyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFFOUIsSUFBSSx3QkFBd0IsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3JELHdCQUF3QixDQUFDLElBQUksR0FBRywwQkFBMEIsR0FBRyxDQUFDLENBQUM7WUFDL0Qsd0JBQXdCLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQTtZQUM5Qyx3QkFBd0IsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFBO1lBQzNELHdCQUF3QixDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDaEQsd0JBQXdCLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1lBQ2xELHdCQUF3QixDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQUEsQ0FBQztZQUU3SyxJQUFJLGNBQXVCLENBQUM7WUFDNUIsY0FBYyxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUM7WUFFeEMsSUFBSSxxQkFBcUIsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ2pELHFCQUFxQixDQUFDLElBQUksR0FBRyx1QkFBdUIsR0FBRyxDQUFDLENBQUM7WUFDekQscUJBQXFCLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDNUMscUJBQXFCLENBQUMsS0FBSyxHQUFHLGNBQWMsQ0FBQyxjQUFjLENBQUM7WUFFNUQsSUFBSSxxQkFBcUIsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ2xELHFCQUFxQixDQUFDLElBQUksR0FBRyx1QkFBdUIsR0FBRyxDQUFDLENBQUM7WUFDekQscUJBQXFCLENBQUMsS0FBSyxHQUFHLGNBQWMsQ0FBQyxjQUFjLENBQUM7WUFFNUQsSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDaEIsSUFBSSxzQkFBc0IsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUNsRCxzQkFBc0IsQ0FBQyxJQUFJLEdBQUcsd0JBQXdCLEdBQUcsQ0FBQyxDQUFDO2dCQUMzRCxzQkFBc0IsQ0FBQyxRQUFRLEdBQUcsaUJBQWlCLENBQUM7Z0JBQ3BELHNCQUFzQixDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO2dCQUM3QyxzQkFBc0IsQ0FBQyxLQUFLLEdBQUcsY0FBYyxDQUFDLGNBQWMsQ0FBQztnQkFDN0Qsc0JBQXNCLENBQUMsVUFBVSxHQUFHLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQztnQkFDbkUsc0JBQXNCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztnQkFFekMsSUFBSSxvQkFBb0IsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUNqRCxvQkFBb0IsQ0FBQyxJQUFJLEdBQUcsc0JBQXNCLEdBQUcsQ0FBQyxDQUFDO2dCQUN2RCxvQkFBb0IsQ0FBQyxLQUFLLEdBQUcsY0FBYyxDQUFDLGFBQWEsQ0FBQztnQkFDMUQsb0JBQW9CLENBQUMsUUFBUSxHQUFHLGVBQWUsQ0FBQztnQkFFaEQsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsc0JBQXNCLEVBQUUsd0JBQXdCLEVBQ2hHLG9CQUFvQixFQUFFLGNBQWMsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO2FBQ3ZGOztnQkFFQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSx3QkFBd0IsRUFBRSxjQUFjLEVBQUUscUJBQXFCLEVBQUUscUJBQXFCLENBQUMsQ0FBQztZQUU1SSxlQUFlLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDM0MsYUFBYSxJQUFJLENBQUMsQ0FBQztTQUVwQjtRQUNELE9BQU8sQ0FBQyxlQUFlLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUNELG9CQUFvQjtRQUNsQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBRS9CLElBQUksb0JBQW9CLEdBQVUsRUFBRSxDQUFDO1FBRXJDLElBQUksU0FBUyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7UUFDckMsU0FBUyxDQUFDLElBQUksR0FBRyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3JDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQzNCLFNBQVMsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztRQUNoQyxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUVwQixJQUFJLFdBQVcsR0FBRyxJQUFJLDBCQUEwQixFQUFFLENBQUM7UUFDbkQsV0FBVyxDQUFDLElBQUksR0FBRyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3pDLFdBQVcsQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1FBQzVDLFdBQVcsQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO1FBQzlDLFdBQVcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBRTlCLElBQUksc0JBQXNCLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUNsRCxzQkFBc0IsQ0FBQyxJQUFJLEdBQUcsd0JBQXdCLEdBQUcsS0FBSyxDQUFDO1FBQy9ELHNCQUFzQixDQUFDLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQztRQUNwRCxzQkFBc0IsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztRQUM3QyxzQkFBc0IsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBRXpDLElBQUksd0JBQXdCLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUNyRCx3QkFBd0IsQ0FBQyxJQUFJLEdBQUcsMEJBQTBCLEdBQUcsS0FBSyxDQUFDO1FBQ25FLHdCQUF3QixDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUE7UUFDOUMsd0JBQXdCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQTtRQUMzRCx3QkFBd0IsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ2hELHdCQUF3QixDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUVsRCxJQUFJLG9CQUFvQixHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7UUFDakQsb0JBQW9CLENBQUMsSUFBSSxHQUFHLHNCQUFzQixHQUFHLEtBQUssQ0FBQztRQUMzRCxvQkFBb0IsQ0FBQyxRQUFRLEdBQUcsZUFBZSxDQUFDO1FBRWhELElBQUksY0FBdUIsQ0FBQztRQUM1QixjQUFjLEdBQUcsSUFBSSxDQUFDO1FBRXRCLElBQUkscUJBQXFCLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUNqRCxxQkFBcUIsQ0FBQyxJQUFJLEdBQUcsdUJBQXVCLEdBQUcsS0FBSyxDQUFDO1FBQzdELHFCQUFxQixDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO1FBRTVDLElBQUkscUJBQXFCLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUNsRCxxQkFBcUIsQ0FBQyxJQUFJLEdBQUcsdUJBQXVCLEdBQUcsS0FBSyxDQUFDO1FBQzdELHFCQUFxQixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFFbkMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsc0JBQXNCLEVBQUUsd0JBQXdCLEVBQUUsb0JBQW9CLEVBQ3RILGNBQWMsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1FBRWhFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUM7SUFFMUIsQ0FBQztJQUNELGFBQWEsQ0FBQyxjQUFtQjtRQUMvQixRQUFRLENBQUM7UUFDVCxJQUFJLG1CQUFtQixHQUFXLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQy9FLElBQUksbUJBQW1CLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDOUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDcEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzlDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3JFO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsbUJBQW1CO0lBQ25CLG9CQUFvQixDQUFDLFlBQVk7UUFDL0Isb0NBQW9DO1FBQ3BDLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxLQUFLLENBQUM7UUFDdEMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztRQUNqQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFDbkMsSUFBSSxDQUFDLDBCQUEwQixHQUFHLEtBQUssQ0FBQztRQUN4QyxJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBRW5DLElBQUksQ0FBQyxjQUFjLEdBQUcsWUFBWSxDQUFDO1FBQ25DLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ2xHLElBQUksU0FBUyxHQUFHLE1BQWEsQ0FBQztZQUM5QixJQUFJLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO1lBQzVCLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDMUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7WUFFeEMsUUFBUSxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQzVCLEtBQUssY0FBYyxDQUFDLFFBQVEsQ0FBQztnQkFDN0IsS0FBSyxjQUFjLENBQUMsTUFBTSxDQUFDO2dCQUMzQixLQUFLLGNBQWMsQ0FBQyxjQUFjO29CQUNoQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7b0JBQy9CLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDO29CQUM5RCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUM7b0JBRTdELDJDQUEyQztvQkFDM0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7b0JBQzlDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcsa0JBQWtCLENBQUE7b0JBQy9DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEdBQUcsa0JBQWtCLENBQUE7b0JBQ25ELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFBO29CQUMzRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztvQkFDOUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztvQkFDL0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7b0JBRXhDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSwwQkFBMEIsRUFBRSxDQUFDO29CQUN4RCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQztvQkFDOUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLEdBQUcsa0JBQWtCLENBQUM7b0JBQ3pELElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxHQUFHLG1CQUFtQixDQUFDO29CQUUzRCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSwyQkFBMkIsRUFBRSxDQUFDO29CQUNoRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxHQUFHLHdCQUF3QixDQUFDO29CQUM1RCxJQUFJLENBQUMsc0JBQXNCLENBQUMsY0FBYyxHQUFHLHlCQUF5QixDQUFDO29CQUN2RSxJQUFJLENBQUMsc0JBQXNCLENBQUMsZUFBZSxHQUFHLDBCQUEwQixDQUFDO29CQUV6RSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7b0JBQzNDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDO29CQUM1QyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7b0JBQ3pDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7b0JBRTFDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztvQkFDN0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUE7b0JBQzdDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQTtvQkFDMUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQTtvQkFDbkQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO29CQUM1QyxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztvQkFDOUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO29CQUV2QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO29CQUNuRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxHQUFHLG9CQUFvQixDQUFDO29CQUNwRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxHQUFHLG9CQUFvQixDQUFDO29CQUN4RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUM7b0JBQzVELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixDQUFDO29CQUV6RCxJQUFJLGNBQWMsR0FBUSxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBQyxLQUFLLENBQUMsQ0FBQztvQkFDaEYsSUFBSSxDQUFDLGVBQWUsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3pDLElBQUksQ0FBQyxhQUFhLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUV2QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO29CQUNoQyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDO29CQUNyQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO29CQUNsQyxNQUFNO2dCQUNSLEtBQUssY0FBYyxDQUFDLEtBQUssQ0FBQztnQkFDMUIsS0FBSyxjQUFjLENBQUMsS0FBSztvQkFFdkIsSUFBSSxJQUFJLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO29CQUNsQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUM7b0JBQzdDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQztvQkFFL0MsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksMEJBQTBCLEVBQUUsQ0FBQztvQkFDMUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksR0FBRyxtQkFBbUIsQ0FBQztvQkFDbEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsR0FBRyxxQkFBcUIsQ0FBQztvQkFDOUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsR0FBRyxzQkFBc0IsQ0FBQztvQkFDaEUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7b0JBQ3pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO29CQUVwQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztvQkFDakQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksR0FBRyxzQkFBc0IsQ0FBQztvQkFDeEQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQztvQkFDdkQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO29CQUNoRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztvQkFFNUMsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7b0JBQ3ZELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLEdBQUcsMkJBQTJCLENBQUE7b0JBQ2pFLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFBO29CQUN4RCxJQUFJLENBQUMseUJBQXlCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQTtvQkFDakUsSUFBSSxDQUFDLHlCQUF5QixDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7b0JBQ3RELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7b0JBQ3hELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO29CQUVqRCxJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO29CQUMzRCxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxHQUFHLDRCQUE0QixDQUFDO29CQUNwRSxJQUFJLENBQUMsMEJBQTBCLENBQUMsUUFBUSxHQUFHLGVBQWUsQ0FBQztvQkFDM0QsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDO29CQUNwRSxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUM7b0JBRTVELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7b0JBQy9CLE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsU0FBUztvQkFDM0IsSUFBSSxDQUFDLDBCQUEwQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7b0JBQ25ELElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO29CQUNuRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztvQkFDMUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO29CQUVyQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztvQkFDbEQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksR0FBRyxzQkFBc0IsQ0FBQTtvQkFDdkQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUE7b0JBQzFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLEdBQUcsbUJBQW1CLENBQUE7b0JBQzNELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFBO29CQUN0RSxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztvQkFDakQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztvQkFDbkQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7b0JBRTVDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO29CQUNoRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxHQUFHLG9CQUFvQixDQUFBO29CQUNuRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQTtvQkFDeEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUE7b0JBQ2pELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQTtvQkFDdkQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7b0JBQy9DLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO29CQUUxQyxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxPQUFPLElBQUksQ0FBQyxHQUFHLElBQUksZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQy9JLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO29CQUN0RCxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxHQUFHLDBCQUEwQixDQUFBO29CQUMvRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQTtvQkFDOUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUE7b0JBQ3BFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO29CQUNyRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztvQkFDaEQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGFBQWEsR0FBRyxlQUFlLENBQUM7b0JBRTlELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO29CQUNsRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxHQUFHLHNCQUFzQixDQUFBO29CQUN2RCxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQTtvQkFDMUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQTtvQkFDM0QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQUE7b0JBQ3RFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO29CQUNqRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztvQkFFNUMsSUFBSSx1QkFBdUIsR0FBUSxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDMUYsSUFBSSxDQUFDLGVBQWUsR0FBRyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbEQsSUFBSSxDQUFDLGFBQWEsR0FBRyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFFaEQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztvQkFDbEMsSUFBSSxDQUFDLDBCQUEwQixHQUFHLElBQUksQ0FBQztvQkFDdkMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztvQkFDbEMsTUFBTTthQUNUO1lBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUVoRixDQUFDLENBQUMsQ0FBQztJQUVMLENBQUM7SUFDRCx3QkFBd0IsQ0FBQyxJQUFJO1FBQzNCLElBQUksSUFBSSxJQUFJLGdCQUFnQixDQUFDLFFBQVEsRUFBRTtZQUNyQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUFDLENBQUE7WUFFaEUsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7WUFDbEQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksR0FBRyxzQkFBc0IsQ0FBQTtZQUN2RCxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQTtZQUMxQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxHQUFHLG1CQUFtQixDQUFBO1lBQzNELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFBO1lBQ3RFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQ2pELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBRTVDLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUM7U0FDeEM7YUFDSTtZQUNILElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsQ0FBQTtZQUVuRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUM5QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxHQUFHLG1CQUFtQixDQUFDO1lBQ2xELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDO1lBQzdDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztZQUM3QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUV6QyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsS0FBSyxDQUFDO1NBRXpDO0lBQ0gsQ0FBQztJQUNELHVCQUF1QixDQUFDLGVBQWU7UUFDckMsSUFBSSxlQUFlLElBQUksZUFBZSxDQUFDLGFBQWEsRUFBRTtZQUNwRCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUN0RCxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxHQUFHLDBCQUEwQixDQUFBO1lBQy9ELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLEdBQUcsZUFBZSxDQUFBO1lBQ3hELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFBO1lBQ25FLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1lBQ3RELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7WUFFdkQsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQztTQUN6QzthQUNJO1lBQ0gsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGFBQWEsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1lBQ3hFLElBQUksQ0FBQywyQkFBMkIsR0FBRyxLQUFLLENBQUM7U0FDMUM7SUFHSCxDQUFDO0lBRUQsWUFBWTtJQUNaLDRCQUE0QjtRQUMxQixJQUFJLENBQUMsd0JBQXdCLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGFBQWEsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsd0JBQXdCLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsd0JBQXdCLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRWxFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGFBQWEsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUUxRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsd0JBQXdCLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBRWpFLDBCQUEwQjtRQUMxQixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDO1FBQ3RELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzNDLElBQUksU0FBUyxHQUFHLFdBQVcsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDN0MsSUFBSSxTQUFTLElBQUksU0FBUztnQkFDeEIsU0FBUztZQUVYLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzdELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQy9ELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsd0JBQXdCLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN6RSxJQUFJLENBQUMsd0JBQXdCLENBQUMsYUFBYSxDQUFDLDBCQUEwQixHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzVFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsc0JBQXNCLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FFekU7SUFDSCxDQUFDO0lBRUQsUUFBUTtJQUNSLFVBQVU7UUFDUixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsWUFBWTtJQUNaLFdBQVc7UUFDVCxJQUFJLENBQUMscUJBQXFCLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDOUMsQ0FBQzs7MkhBajlCVSw2QkFBNkI7K0dBQTdCLDZCQUE2QixrRUNuQjFDLDgxWEEyUEE7NEZEeE9hLDZCQUE2QjtrQkFKekMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsNEJBQTRCO29CQUN0QyxXQUFXLEVBQUUseUNBQXlDO2lCQUN2RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IENoZWNrQm94T3B0aW9ucywgQ29udHJvbExheW91dCwgRHJvcGRvd25PcHRpb25zLCBFbmdsaXNoQXJhYmljRFRPLCBGb3JtT3B0aW9ucywgSW5wdXRUeXBlLCBNdWx0aUxpbmd1YWxUZXh0QXJlYU9wdGlvbnMsIE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zLCBUZXh0Qm94T3B0aW9ucywgVG9nZ2xlU2xpZGVPcHRpb25zIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtY29udHJvbHMnO1xyXG5pbXBvcnQgeyBCQlNGVHJhbnNsYXRlU2VydmljZSwgUmVxdWVzdEhhbmRsZXJTZXJ2aWNlLCBVdGlsaXR5U2VydmljZSB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLXV0aWxpdGllcyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUGFnZUluZm9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vcHVibGljLWFwaSc7XHJcbmltcG9ydCB7IENvbmRpdGlvblJIU1R5cGUgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvRW51bXMvQ29uZGl0aW9uUkhTVHlwZSc7XHJcbmltcG9ydCB7IFBhcnRpY2lwYW50VHlwZSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9FbnVtcy9QYXJ0aWNpcGFudFR5cGUnO1xyXG5pbXBvcnQgeyBXRkFjdGl2aXR5VHlwZSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9FbnVtcy9XRkFjdGl2aXR5VHlwZSc7XHJcbmltcG9ydCB7IFBhcnRpY2lwYW50TW9kZWwgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvbW9kZWxzL0ltcGVyc29uYXRpb25SdWxlTW9kZWxzL1BhcnRpY2lwYW50TW9kZWwnO1xyXG5pbXBvcnQgeyBXRkFjdGl2aXR5TW9kZWwgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvbW9kZWxzL1dvcmtmbG93TW9kZWxzL1dGQWN0aXZpdHlNb2RlbCc7XHJcbmltcG9ydCB7IFdGQWN0aXZpdHlPdXRjb21lTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvbW9kZWxzL1dvcmtmbG93TW9kZWxzL1dGQWN0aXZpdHlPdXRjb21lTW9kZWwnO1xyXG5pbXBvcnQgeyBXb3JrZmxvd0FjdGl2aXR5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9TZXJ2aWNlcy9Xb3JrZmxvd0FjdGl2aXR5U2VydmljZS5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXdvcmtmbG93LWFjdGl2aXR5LWVkaXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi93b3JrZmxvdy1hY3Rpdml0eS1lZGl0LmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgV29ya2Zsb3dBY3Rpdml0eUVkaXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIC8vUGFnZSByZXF1aXJlbWVudHNcclxuICBpc0VkaXRGb3JtTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdmVyc2lvbklEOiBudW1iZXI7XHJcbiAgYWN0aXZpdHlJRDogbnVtYmVyO1xyXG4gIGFjdGl2aXR5SURFbmM6IHN0cmluZztcclxuICBhY3Rpdml0eU1vZGVsOiBhbnk7XHJcbiAgaXNQdWJsaXNoZWQ6IGJvb2xlYW47XHJcblxyXG4gIC8vRWRpdCBBY3Rpdml0eSBzaGFyZWQgY29udHJvbHNcclxuICBlZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBlZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zO1xyXG4gIG5hbWU6IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zO1xyXG4gIGNhbkFkZE91dGNvbWU6IGJvb2xlYW47XHJcbiAgYWN0aXZpdHlUeXBlSUQ6IG51bWJlcjtcclxuICBzaG93QWN0aXZpdHlUeXBlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vTm9uIHB1Ymxpc2hlZCBBY3Rpdml0eSBjb250cm9sc1xyXG4gIHN5c05hbWU6IFRleHRCb3hPcHRpb25zO1xyXG4gIGFjdGl2aXR5VHlwZTogRHJvcGRvd25PcHRpb25zO1xyXG5cclxuICAvL1NoYXJlZCBQYXJ0aWNpcGFudCB0eXBlIGFuZCBkYXRhIChOb24gUHVibGlzaGVkIG9ubHkpXHJcbiAgc2hvd1BhcnRpY2lwYW50Q29udGFpbmVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd1BhcnRpY2lwYW50UGVybXNzaW9uU2V0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcGFydGljaXBhbnRUeXBlczogRHJvcGRvd25PcHRpb25zO1xyXG4gIHBhcnRpY2lwYW50UGVybWlzc2lvblNldDogRHJvcGRvd25PcHRpb25zO1xyXG5cclxuICAvL0R5bmFtaWMgVHlwZXMgQ29udHJvbHMgLy8oQXBwcm92YWwsQWN0aW9uLFBlcmNlbnRhZ2UpXHJcbiAgc2hvd0R5bmFtaWNDb250cm9sczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGR5bmFtaWNUYXNrTmFtZTogTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnM7XHJcbiAgZHluYW1pY1Rhc2tEZXNjcmlwdGlvbjogTXVsdGlMaW5ndWFsVGV4dEFyZWFPcHRpb25zO1xyXG4gIGR5bmFtaWNUYXNrVVJMOiBUZXh0Qm94T3B0aW9ucztcclxuICBkeW5hbWljVGFza1R5cGU6IERyb3Bkb3duT3B0aW9uczsgXHJcbiAgZHluYW1pY0NhbkNvbXBsZXRlOiBUb2dnbGVTbGlkZU9wdGlvbnM7XHJcblxyXG4gIC8vU3RhdGljIHR5cGVzIGNvbnRyb2xzIChFbWFpbCxTbGVlcCkgKE5vbiBwdWJsaXNoZWQgb25seSlcclxuICAvL0VtYWlsIFR5cGUgQ29udHJvbHMgLy8rIGluaXRpYWxpemUgcGFydGljaXBhbnRcclxuICBzaG93U3RhdGljQ29udHJvbHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzdGF0aWNPdXRjb21lTmFtZTogTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnM7XHJcbiAgc3RhdGljT3V0Y29tZVN5c05hbWU6IFRleHRCb3hPcHRpb25zO1xyXG4gIHN0YXRpY091dGNvbWVOZXh0QWN0aXZpdHk6IERyb3Bkb3duT3B0aW9ucztcclxuICBzdGF0aWNPdXRjb21lQ2FuQWRkQ29tbWVudDogVG9nZ2xlU2xpZGVPcHRpb25zO1xyXG5cclxuICAvL0NvbmRpdGlvbiB0eXBlIGNvbnRyb2xzXHJcbiAgc2hvd0NvbmRpdGlvbkNvbnRyb2xzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY29uZGl0aW9uTEhTRHJvcERvd246IERyb3Bkb3duT3B0aW9ucztcclxuICBjb25kaXRpb25zRHJvcERvd246IERyb3Bkb3duT3B0aW9ucztcclxuICBjb25kaXRpb25SSFNUeXBlRHJvcERvd246IERyb3Bkb3duT3B0aW9ucztcclxuICBjb25kaXRpb25SSFNEcm9wRG93bjogRHJvcGRvd25PcHRpb25zO1xyXG4gIGNvbmRpdGlvblJIU1ZhbHVlOiBUZXh0Qm94T3B0aW9ucztcclxuICBzaG93Q29uZGl0aW9uUkhTV0ZWYXJpYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvL1NoYXJlZCByZXF1aXJlZCBsaXN0c1xyXG4gIEFjdGl2aXR5VHlwZUxpc3Q6IGFueVtdID0gW107XHJcblxyXG4gIC8vT3V0Y29tZXMgKGR5bmFtaWMsY29uZGl0aW9uKVxyXG4gIG91dGNvbWVzT3B0aW9uczogYW55W10gPSBbXTtcclxuICBvdXRjb21lc0NvdW50OiBudW1iZXIgPSAwO1xyXG4gIHNob3dPdXRjb21lc0NvbnRhaW5lciA9IGZhbHNlO1xyXG5cclxuICAvL1JlcXVpcmVkTGlzdHNcclxuICB0YXNrVHlwZUxpc3QgPSBbXTtcclxuICBwYXJ0aWNpcGFudFR5cGVMaXN0ID0gW107XHJcbiAgcGFydGljaXBhbnREYXRhTGlzdCA9IFtdO1xyXG4gIG5leHRBY3Rpdml0eUxpc3QgPSBbXTtcclxuXHJcbiAgLy9Db25kaXRpb25UeXBlUmVxdWlyZWRMaXN0c1xyXG4gIGNvbmRpdGlvbkxIU1dGVmFyaWFibGVMaXN0ID0gW107XHJcbiAgY29uZGl0aW9uUkhTV0ZWYXJpYWJsZUxpc3QgPSBbXTtcclxuICBjb25kaXRpb25SSFNUeXBlTGlzdCA9IFtdO1xyXG4gIGNvbmRpdGlvbkxpc3QgPSBbXTtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHdvcmtmbG93QWN0aXZpdHlTZXJ2aWNlOiBXb3JrZmxvd0FjdGl2aXR5U2VydmljZSwgcHJpdmF0ZSBwYWdlSW5mb1NlcnZpY2U6IFBhZ2VJbmZvU2VydmljZSwgcHVibGljIHV0aWxpdHlTZXJ2aWNlOiBVdGlsaXR5U2VydmljZSxcclxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLCBwcml2YXRlIHJvdXRlcjogUm91dGVyLCBwcml2YXRlIHJlcXVlc3RIYW5kbGVyU2VydmljZTogUmVxdWVzdEhhbmRsZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBiYnNmVHJhbnNsYXRlU2VydmljZTogQkJTRlRyYW5zbGF0ZVNlcnZpY2UpIHtcclxuICAgIHRoaXMuYWN0aXZhdGVkUm91dGUucGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xyXG4gICAgICB0aGlzLmFjdGl2aXR5SURFbmMgPSBwYXJhbXNbJ2FjdGl2aXR5aWQnXTtcclxuXHJcbiAgICB9KTtcclxuICB9XHJcbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcblxyXG4gICAgdGhpcy5iYnNmVHJhbnNsYXRlU2VydmljZS5vbkxhbmdDaGFuZ2Uuc3Vic2NyaWJlKChldmVudCkgPT4ge1xyXG4gICAgICB0aGlzLm5nT25Jbml0KCk7XHJcbiAgICB9KVxyXG5cclxuICAgIFBhZ2VJbmZvU2VydmljZS5QYWdlVGl0bGUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFZGl0V29ya2Zsb3dBY3Rpdml0eVwiKTtcclxuICAgIFBhZ2VJbmZvU2VydmljZS5QYWdlQnJlYWRjcnVtYnMgPSBbXHJcbiAgICAgIHsgdGl0bGU6IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkhvbWVcIiksIHBhdGg6ICcvQWRtaW4vSG9tZScsIGlzU2VwYXJhdG9yOiBmYWxzZSwgaXNBY3RpdmU6IGZhbHNlIH0sXHJcbiAgICAgIHsgdGl0bGU6ICcnLCBwYXRoOiAnJywgaXNTZXBhcmF0b3I6IHRydWUsIGlzQWN0aXZlOiBmYWxzZSB9LFxyXG4gICAgICB7IHRpdGxlOiB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJXb3JrRmxvd3NcIiksIHBhdGg6ICcvQWRtaW4vV29ya2Zsb3dzL3dvcmtmbG93JywgaXNTZXBhcmF0b3I6IGZhbHNlLCBpc0FjdGl2ZTogZmFsc2UgfSxcclxuICAgICAgeyB0aXRsZTogJycsIHBhdGg6ICcnLCBpc1NlcGFyYXRvcjogdHJ1ZSwgaXNBY3RpdmU6IGZhbHNlIH1cclxuICAgIF07XHJcbiAgICB0aGlzLnBhZ2VJbmZvU2VydmljZS5jYWxjdWxhdGVUaXRsZSgpO1xyXG4gICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlQnJlYWRjcnVtYnMoKTtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZVBhZ2UoKTtcclxuICB9XHJcblxyXG4gIC8vSW5pdGlhbGl6ZSBlZGl0IG1vZGVsIGFuZCByZXF1aXJlZCBERExzXHJcbiAgaW5pdGlhbGl6ZVBhZ2UoKSB7XHJcbiAgICB0aGlzLndvcmtmbG93QWN0aXZpdHlTZXJ2aWNlLmdldEVkaXRXb3JrRmxvd0FjdGl2aXR5RGF0YSh0aGlzLmFjdGl2aXR5SURFbmMpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGxldCByZXN1bHRPYmogPSByZXN1bHQgYXMgYW55O1xyXG4gICAgICB0aGlzLmFjdGl2aXR5TW9kZWwgPSByZXN1bHRPYmoubW9kZWw7XHJcbiAgICAgIHZhciBsaXN0ID0gcmVzdWx0T2JqLmxpc3Q7XHJcbiAgICAgIHRoaXMuQWN0aXZpdHlUeXBlTGlzdCA9IHJlc3VsdE9iai5hY3Rpdml0eUxpc3Q7XHJcbiAgICAgIHRoaXMubmV4dEFjdGl2aXR5TGlzdCA9IGxpc3QuYWN0aXZpdGllcztcclxuICAgICAgdGhpcy5hY3Rpdml0eVR5cGVJRCA9IHRoaXMuYWN0aXZpdHlNb2RlbC5hY3Rpdml0eVR5cGVJdGVtSUQ7XHJcbiAgICAgIHRoaXMuaXNQdWJsaXNoZWQgPSB0aGlzLmFjdGl2aXR5TW9kZWwuaXNQdWJsaXNoZWQ7XHJcbiAgICAgIHRoaXMudmVyc2lvbklEID0gdGhpcy5hY3Rpdml0eU1vZGVsLnZlcnNpb25JRDtcclxuXHJcbiAgICAgIHRoaXMuZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSlcclxuICAgICAgdGhpcy5lZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtT3B0aW9ucy5Gb3JtR3JvdXAgPSB0aGlzLmVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybVxyXG4gICAgICB0aGlzLmVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybU9wdGlvbnMuR2V0TW9kZWxGdW5jdGlvbiA9IHRoaXMuZ2V0RWRpdFdGQWN0aXZpdHlNb2RlbDtcclxuICAgICAgdGhpcy5lZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm1PcHRpb25zLlNlcnZpY2VTdWJtaXRGdW5jdGlvbiA9IHRoaXMuZ2V0RWRpdFdGQWN0aXZpdHlGdW5jdGlvbjtcclxuICAgICAgdGhpcy5lZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm1PcHRpb25zLk9uU3VjY2Vzc0hhbmRsZXIgPSB0aGlzLm9uRWRpdFN1Y2Nlc3M7XHJcblxyXG4gICAgICBsZXQgbmFtZSA9IG5ldyBFbmdsaXNoQXJhYmljRFRPKCk7XHJcbiAgICAgIG5hbWUuRW5nbGlzaCA9IHRoaXMuYWN0aXZpdHlNb2RlbC5uYW1lLmVuZ2xpc2g7XHJcbiAgICAgIG5hbWUuQXJhYmljID0gdGhpcy5hY3Rpdml0eU1vZGVsLm5hbWUuYXJhYmljO1xyXG4gICAgICB0aGlzLm5hbWUgPSBuZXcgTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5uYW1lLk5hbWUgPSBcIm5hbWVcIjtcclxuICAgICAgdGhpcy5uYW1lLkFyYWJpY0xhYmVsS2V5ID0gXCJOYW1lSW5BcmFiaWNcIjtcclxuICAgICAgdGhpcy5uYW1lLkVuZ2xpc2hMYWJlbEtleSA9IFwiTmFtZUluRW5nbGlzaFwiO1xyXG4gICAgICB0aGlzLm5hbWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMubmFtZS5WYWx1ZSA9IG5hbWU7XHJcblxyXG4gICAgICBsZXQgb3V0Y29tZXNSZXN1bHQ6IGFueSA9IHRoaXMuZ2V0QWN0aXZpdHlPdXRjb21lc09wdGlvbnModGhpcy5hY3Rpdml0eU1vZGVsLm91dGNvbWVzLCB0aGlzLmlzUHVibGlzaGVkKTtcclxuICAgICAgdGhpcy5vdXRjb21lc09wdGlvbnMgPSBvdXRjb21lc1Jlc3VsdFswXTtcclxuICAgICAgdGhpcy5vdXRjb21lc0NvdW50ID0gb3V0Y29tZXNSZXN1bHRbMV07XHJcblxyXG4gICAgICB0aGlzLnNob3dBY3Rpdml0eVR5cGUgPSBmYWxzZTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmlzUHVibGlzaGVkKSB7XHJcbiAgICAgICAgc3dpdGNoIChOdW1iZXIodGhpcy5hY3Rpdml0eVR5cGVJRCkpIHtcclxuICAgICAgICAgIGNhc2UgV0ZBY3Rpdml0eVR5cGUuQXBwcm92YWw6XHJcbiAgICAgICAgICBjYXNlIFdGQWN0aXZpdHlUeXBlLkFjdGlvbjpcclxuICAgICAgICAgIGNhc2UgV0ZBY3Rpdml0eVR5cGUuUGVyY2VudGFnZVRhc2s6XHJcbiAgICAgICAgICAgIHRoaXMudGFza1R5cGVMaXN0ID0gbGlzdC50YXNrcztcclxuXHJcbiAgICAgICAgICAgIGxldCB0YXNrTmFtZSA9IG5ldyBFbmdsaXNoQXJhYmljRFRPKCk7XHJcbiAgICAgICAgICAgIHRhc2tOYW1lLkVuZ2xpc2ggPSB0aGlzLmFjdGl2aXR5TW9kZWwudGFza05hbWUuZW5nbGlzaDtcclxuICAgICAgICAgICAgdGFza05hbWUuQXJhYmljID0gdGhpcy5hY3Rpdml0eU1vZGVsLnRhc2tOYW1lLmFyYWJpYztcclxuXHJcbiAgICAgICAgICAgIGxldCB0YXNrRGVzY3JpcHRpb24gPSBuZXcgRW5nbGlzaEFyYWJpY0RUTygpO1xyXG4gICAgICAgICAgICB0YXNrRGVzY3JpcHRpb24uRW5nbGlzaCA9IHRoaXMuYWN0aXZpdHlNb2RlbC50YXNrRGVzY3JpcHRpb24uZW5nbGlzaDtcclxuICAgICAgICAgICAgdGFza0Rlc2NyaXB0aW9uLkFyYWJpYyA9IHRoaXMuYWN0aXZpdHlNb2RlbC50YXNrRGVzY3JpcHRpb24uYXJhYmljO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5keW5hbWljVGFza05hbWUgPSBuZXcgTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljVGFza05hbWUuTmFtZSA9IFwiZHluYW1pY1Rhc2tOYW1lXCI7XHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tOYW1lLkFyYWJpY0xhYmVsS2V5ID0gXCJUYXNrTmFtZUluQXJhYmljXCI7XHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tOYW1lLkVuZ2xpc2hMYWJlbEtleSA9IFwiVGFza05hbWVJbkVuZ2xpc2hcIjtcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljVGFza05hbWUuVmFsdWUgPSB0YXNrTmFtZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tEZXNjcmlwdGlvbiA9IG5ldyBNdWx0aUxpbmd1YWxUZXh0QXJlYU9wdGlvbnMoKTtcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljVGFza0Rlc2NyaXB0aW9uLk5hbWUgPSBcImR5bmFtaWNUYXNrRGVzY3JpcHRpb25cIjtcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljVGFza0Rlc2NyaXB0aW9uLkFyYWJpY0xhYmVsS2V5ID0gXCJUYXNrRGVzY3JpcHRpb25JbkFyYWJpY1wiO1xyXG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNUYXNrRGVzY3JpcHRpb24uRW5nbGlzaExhYmVsS2V5ID0gXCJUYXNrRGVzY3JpcHRpb25JbkVuZ2xpc2hcIjtcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljVGFza0Rlc2NyaXB0aW9uLlZhbHVlID0gdGFza0Rlc2NyaXB0aW9uO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5keW5hbWljVGFza1VSTCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNUYXNrVVJMLk5hbWUgPSBcImR5bmFtaWNUYXNrVVJMXCI7XHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tVUkwuTGFiZWxLZXkgPSBcIlRhc2tVUkxcIjtcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljVGFza1VSTC5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tVUkwuVmFsdWUgPSB0aGlzLmFjdGl2aXR5TW9kZWwudGFza1VSTDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tUeXBlID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNUYXNrVHlwZS5OYW1lID0gXCJkeW5hbWljVGFza1R5cGVcIlxyXG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNUYXNrVHlwZS5MYWJlbEtleSA9IFwiVGFza1R5cGVcIlxyXG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNUYXNrVHlwZS5EYXRhU291cmNlID0gdGhpcy50YXNrVHlwZUxpc3RcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljVGFza1R5cGUuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljVGFza1R5cGUuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNUYXNrVHlwZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljVGFza1R5cGUuU2VsZWN0ZWRJdGVtcyA9IHRoaXMudGFza1R5cGVMaXN0LmZpbHRlcigoaXRlbSkgPT4geyByZXR1cm4gcGFyc2VJbnQoaXRlbS5rZXkpID09IHRoaXMuYWN0aXZpdHlNb2RlbC50YXNrQ29ycmxUeXBlSUQ7IH0pLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpWzBdOztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY0NhbkNvbXBsZXRlID0gbmV3IFRvZ2dsZVNsaWRlT3B0aW9ucygpO1xyXG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNDYW5Db21wbGV0ZS5OYW1lID0gXCJkeW5hbWljQ2FuQ29tcGxldGVcIjtcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljQ2FuQ29tcGxldGUuTGFiZWxLZXkgPSBcIkNhbkNvbXBsZXRlRnJvbVRNRVwiO1xyXG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNDYW5Db21wbGV0ZS5WaWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuSG9yaXpvbnRhbDtcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljQ2FuQ29tcGxldGUuVmFsdWUgPSB0aGlzLmFjdGl2aXR5TW9kZWwuY2FuQ29tcGxldGVGcm9tVE1FO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zaG93RHluYW1pY0NvbnRyb2xzID0gdHJ1ZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFdGQWN0aXZpdHlUeXBlLkNvbmRpdGlvbjpcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25MSFNXRlZhcmlhYmxlTGlzdCA9IGxpc3Qud2ZWYXJpYWJsZXM7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTV0ZWYXJpYWJsZUxpc3QgPSBsaXN0LndmVmFyaWFibGVzO1xyXG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvblJIU1R5cGVMaXN0ID0gbGlzdC5yaHNUeXBlcztcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25MaXN0ID0gbGlzdC5jb25kaXRpb25zO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25MSFNEcm9wRG93biA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25MSFNEcm9wRG93bi5OYW1lID0gXCJjb25kaXRpb25MSFNEcm9wRG93blwiXHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uTEhTRHJvcERvd24uSGlkZUxhYmVsID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbkxIU0Ryb3BEb3duLlBsYWNlaG9sZGVyID0gXCJXb3JrZmxvd1ZhcmlhYmxlc1wiXHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uTEhTRHJvcERvd24uRGF0YVNvdXJjZSA9IHRoaXMuY29uZGl0aW9uTEhTV0ZWYXJpYWJsZUxpc3RcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25MSFNEcm9wRG93bi5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbkxIU0Ryb3BEb3duLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25MSFNEcm9wRG93bi5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25MSFNEcm9wRG93bi5TZWxlY3RlZEl0ZW1zID0gdGhpcy5jb25kaXRpb25MSFNXRlZhcmlhYmxlTGlzdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIHBhcnNlSW50KGl0ZW0ua2V5KSA9PSB0aGlzLmFjdGl2aXR5TW9kZWwubGhzVmFyaWFibGVJRDsgfSkubWFwKChpdGVtKSA9PiBpdGVtLmtleSlbMF07O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25zRHJvcERvd24gPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uc0Ryb3BEb3duLk5hbWUgPSBcImNvbmRpdGlvbnNEcm9wRG93blwiXHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uc0Ryb3BEb3duLkhpZGVMYWJlbCA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25zRHJvcERvd24uUGxhY2Vob2xkZXIgPSBcIkNvbmRpdGlvblwiXHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uc0Ryb3BEb3duLkRhdGFTb3VyY2UgPSB0aGlzLmNvbmRpdGlvbkxpc3RcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25zRHJvcERvd24uU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25zRHJvcERvd24uSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uc0Ryb3BEb3duLlNlbGVjdGVkSXRlbXMgPSB0aGlzLmNvbmRpdGlvbkxpc3QuZmlsdGVyKChpdGVtKSA9PiB7IHJldHVybiBwYXJzZUludChpdGVtLmtleSkgPT0gdGhpcy5hY3Rpdml0eU1vZGVsLm9wZXJhdG9yVHlwZUl0ZW1JRDsgfSkubWFwKChpdGVtKSA9PiBpdGVtLmtleSlbMF07O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNUeXBlRHJvcERvd24gPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTVHlwZURyb3BEb3duLk5hbWUgPSBcImNvbmRpdGlvblJIU1R5cGVEcm9wRG93blwiXHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTVHlwZURyb3BEb3duLkhpZGVMYWJlbCA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNUeXBlRHJvcERvd24uRGF0YVNvdXJjZSA9IHRoaXMuY29uZGl0aW9uUkhTVHlwZUxpc3RcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNUeXBlRHJvcERvd24uU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNUeXBlRHJvcERvd24uSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTVHlwZURyb3BEb3duLlNlbGVjdGVkSXRlbXMgPSB0aGlzLmNvbmRpdGlvblJIU1R5cGVMaXN0LmZpbHRlcigoaXRlbSkgPT4geyByZXR1cm4gcGFyc2VJbnQoaXRlbS5rZXkpID09IHRoaXMuYWN0aXZpdHlNb2RlbC5yaHNUeXBlSXRlbUlEOyB9KS5tYXAoKGl0ZW0pID0+IGl0ZW0ua2V5KVswXTs7XHJcblxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZpdHlNb2RlbC5yaHNUeXBlSXRlbUlEID09IENvbmRpdGlvblJIU1R5cGUuVmFyaWFibGUpIHtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvblJIU0Ryb3BEb3duID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTRHJvcERvd24uTmFtZSA9IFwiY29uZGl0aW9uUkhTRHJvcERvd25cIlxyXG4gICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTRHJvcERvd24uSGlkZUxhYmVsID0gdHJ1ZVxyXG4gICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTRHJvcERvd24uUGxhY2Vob2xkZXIgPSBcIldvcmtmbG93VmFyaWFibGVzXCJcclxuICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvblJIU0Ryb3BEb3duLkRhdGFTb3VyY2UgPSB0aGlzLmNvbmRpdGlvblJIU1dGVmFyaWFibGVMaXN0XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNEcm9wRG93bi5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTRHJvcERvd24uSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNEcm9wRG93bi5TZWxlY3RlZEl0ZW1zID0gdGhpcy5jb25kaXRpb25SSFNXRlZhcmlhYmxlTGlzdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIHBhcnNlSW50KGl0ZW0ua2V5KSA9PSB0aGlzLmFjdGl2aXR5TW9kZWwucmhzVmFyaWFibGVJRDsgfSkubWFwKChpdGVtKSA9PiBpdGVtLmtleSlbMF07O1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLnNob3dDb25kaXRpb25SSFNXRlZhcmlhYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvblJIU1ZhbHVlID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNWYWx1ZS5OYW1lID0gXCJjb25kaXRpb25SSFNWYWx1ZVwiO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTVmFsdWUuSGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvblJIU1ZhbHVlLlBsYWNlaG9sZGVyID0gXCJWYWx1ZVwiO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTVmFsdWUuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTVmFsdWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNWYWx1ZS5WYWx1ZSA9IHRoaXMuYWN0aXZpdHlNb2RlbC5yaHNWYWx1ZTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5zaG93Q29uZGl0aW9uUkhTV0ZWYXJpYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNob3dDb25kaXRpb25Db250cm9scyA9IHRydWU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zaG93T3V0Y29tZXNDb250YWluZXIgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3lzTmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgIHRoaXMuc3lzTmFtZS5OYW1lID0gXCJzeXNOYW1lXCI7XHJcbiAgICAgICAgdGhpcy5zeXNOYW1lLkxhYmVsS2V5ID0gXCJTeXNOYW1lXCI7XHJcbiAgICAgICAgdGhpcy5zeXNOYW1lLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgICB0aGlzLnN5c05hbWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zeXNOYW1lLlZhbHVlID0gdGhpcy5hY3Rpdml0eU1vZGVsLnN5c05hbWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmFjdGl2aXR5TW9kZWwuYWN0aXZpdHlUeXBlSXRlbUlEICE9IFdGQWN0aXZpdHlUeXBlLlN0YXJ0KSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dBY3Rpdml0eVR5cGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgIHRoaXMuYWN0aXZpdHlUeXBlID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgICAgdGhpcy5hY3Rpdml0eVR5cGUuTmFtZSA9IFwiYWN0aXZpdHlUeXBlXCJcclxuICAgICAgICAgIHRoaXMuYWN0aXZpdHlUeXBlLkxhYmVsS2V5ID0gXCJBY3Rpdml0eVR5cGVcIlxyXG4gICAgICAgICAgdGhpcy5hY3Rpdml0eVR5cGUuRGF0YVNvdXJjZSA9IHRoaXMuQWN0aXZpdHlUeXBlTGlzdFxyXG4gICAgICAgICAgdGhpcy5hY3Rpdml0eVR5cGUuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuYWN0aXZpdHlUeXBlLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuYWN0aXZpdHlUeXBlLklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5hY3Rpdml0eVR5cGUuU2VsZWN0ZWRJdGVtcyA9IHRoaXMuQWN0aXZpdHlUeXBlTGlzdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIHBhcnNlSW50KGl0ZW0ua2V5KSA9PSB0aGlzLmFjdGl2aXR5VHlwZUlEOyB9KS5tYXAoKGl0ZW0pID0+IGl0ZW0ua2V5KVswXTs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2ggKE51bWJlcih0aGlzLmFjdGl2aXR5TW9kZWwuYWN0aXZpdHlUeXBlSXRlbUlEKSkge1xyXG4gICAgICAgICAgY2FzZSBXRkFjdGl2aXR5VHlwZS5BcHByb3ZhbDpcclxuICAgICAgICAgIGNhc2UgV0ZBY3Rpdml0eVR5cGUuQWN0aW9uOlxyXG4gICAgICAgICAgY2FzZSBXRkFjdGl2aXR5VHlwZS5QZXJjZW50YWdlVGFzazpcclxuICAgICAgICAgICAgdGhpcy50YXNrVHlwZUxpc3QgPSBsaXN0LnRhc2tzO1xyXG4gICAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50VHlwZUxpc3QgPSBsaXN0LnBhcnRpY2lwYW50cy5wYXJ0aWNpcGFudFR5cGVzO1xyXG4gICAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50RGF0YUxpc3QgPSBsaXN0LnBhcnRpY2lwYW50cy5wYXJ0aWNpcGFudERhdGE7XHJcblxyXG4gICAgICAgICAgICBsZXQgdGFza05hbWUgPSBuZXcgRW5nbGlzaEFyYWJpY0RUTygpO1xyXG4gICAgICAgICAgICB0YXNrTmFtZS5FbmdsaXNoID0gdGhpcy5hY3Rpdml0eU1vZGVsLnRhc2tOYW1lLmVuZ2xpc2g7XHJcbiAgICAgICAgICAgIHRhc2tOYW1lLkFyYWJpYyA9IHRoaXMuYWN0aXZpdHlNb2RlbC50YXNrTmFtZS5hcmFiaWM7XHJcblxyXG4gICAgICAgICAgICBsZXQgdGFza0Rlc2NyaXB0aW9uID0gbmV3IEVuZ2xpc2hBcmFiaWNEVE8oKTtcclxuICAgICAgICAgICAgdGFza0Rlc2NyaXB0aW9uLkVuZ2xpc2ggPSB0aGlzLmFjdGl2aXR5TW9kZWwudGFza0Rlc2NyaXB0aW9uLmVuZ2xpc2g7XHJcbiAgICAgICAgICAgIHRhc2tEZXNjcmlwdGlvbi5BcmFiaWMgPSB0aGlzLmFjdGl2aXR5TW9kZWwudGFza0Rlc2NyaXB0aW9uLmFyYWJpYztcclxuICAgICAgICAgICAgLy9Jbml0aWFsaXplIHJlcXVpcmVkIGNvbnRyb2xzIGZvciBhcHByb3ZhbFxyXG4gICAgICAgICAgICBsZXQgc2VsZWN0ZWRQYXJ0aWNpcGFudFR5cGVzOiBudW1iZXJbXSA9IHRoaXMuYWN0aXZpdHlNb2RlbC5wYXJ0aWNpcGFudFR5cGVJdGVtSURzU3RyaW5nTGlzdC5tYXAoKGkpID0+IE51bWJlcihpKSk7XHJcbiAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRUeXBlcyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgICAgdGhpcy5wYXJ0aWNpcGFudFR5cGVzLk5hbWUgPSBcInBhcnRpY2lwYW50VHlwZXNcIlxyXG4gICAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50VHlwZXMuTGFiZWxLZXkgPSBcIlBhcnRpY2lwYW50VHlwZXNcIlxyXG4gICAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50VHlwZXMuRGF0YVNvdXJjZSA9IHRoaXMucGFydGljaXBhbnRUeXBlTGlzdFxyXG4gICAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50VHlwZXMuU2luZ2xlU2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRUeXBlcy5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRUeXBlcy5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5wYXJ0aWNpcGFudFR5cGVzLlNlbGVjdGVkSXRlbXMgPSB0aGlzLnBhcnRpY2lwYW50VHlwZUxpc3QuZmlsdGVyKGZ1bmN0aW9uICh0YWcpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRQYXJ0aWNpcGFudFR5cGVzLmluZGV4T2YocGFyc2VJbnQodGFnLmtleSkpID49IDA7XHJcbiAgICAgICAgICAgIH0pLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkUGFydGljaXBhbnRUeXBlcy5pbmNsdWRlcyhOdW1iZXIoUGFydGljaXBhbnRUeXBlLlBlcm1pc3Npb25TZXQpKSkge1xyXG4gICAgICAgICAgICAgIGxldCBzZWxlY3RlZFBlcm1pc3Npb25TZXRzOiBudW1iZXJbXSA9IHRoaXMuYWN0aXZpdHlNb2RlbC5wYXJ0aWNpcGFudFBlcm1zZXRzSURzU3RyaW5nLm1hcCgoaSkgPT4gTnVtYmVyKGkpKTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5wYXJ0aWNpcGFudFBlcm1pc3Npb25TZXQgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYXJ0aWNpcGFudFBlcm1pc3Npb25TZXQuTmFtZSA9IFwicGFydGljaXBhbnRQZXJtaXNzaW9uU2V0XCJcclxuICAgICAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50UGVybWlzc2lvblNldC5MYWJlbEtleSA9IFwiUGVybWlzc2lvblNldFwiXHJcbiAgICAgICAgICAgICAgdGhpcy5wYXJ0aWNpcGFudFBlcm1pc3Npb25TZXQuRGF0YVNvdXJjZSA9IHRoaXMucGFydGljaXBhbnREYXRhTGlzdFxyXG4gICAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRQZXJtaXNzaW9uU2V0LlNpbmdsZVNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRQZXJtaXNzaW9uU2V0LkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50UGVybWlzc2lvblNldC5TZWxlY3RlZEl0ZW1zID0gdGhpcy5wYXJ0aWNpcGFudERhdGFMaXN0LmZpbHRlcihmdW5jdGlvbiAodGFnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRQZXJtaXNzaW9uU2V0cy5pbmRleE9mKHBhcnNlSW50KHRhZy5rZXkpKSA+PSAwO1xyXG4gICAgICAgICAgICAgIH0pLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLnNob3dQYXJ0aWNpcGFudFBlcm1zc2lvblNldCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tOYW1lID0gbmV3IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tOYW1lLk5hbWUgPSBcImR5bmFtaWNUYXNrTmFtZVwiO1xyXG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNUYXNrTmFtZS5BcmFiaWNMYWJlbEtleSA9IFwiVGFza05hbWVJbkFyYWJpY1wiO1xyXG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNUYXNrTmFtZS5FbmdsaXNoTGFiZWxLZXkgPSBcIlRhc2tOYW1lSW5FbmdsaXNoXCI7XHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tOYW1lLlZhbHVlID0gdGFza05hbWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNUYXNrRGVzY3JpcHRpb24gPSBuZXcgTXVsdGlMaW5ndWFsVGV4dEFyZWFPcHRpb25zKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tEZXNjcmlwdGlvbi5OYW1lID0gXCJkeW5hbWljVGFza0Rlc2NyaXB0aW9uXCI7XHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tEZXNjcmlwdGlvbi5BcmFiaWNMYWJlbEtleSA9IFwiVGFza0Rlc2NyaXB0aW9uSW5BcmFiaWNcIjtcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljVGFza0Rlc2NyaXB0aW9uLkVuZ2xpc2hMYWJlbEtleSA9IFwiVGFza0Rlc2NyaXB0aW9uSW5FbmdsaXNoXCI7XHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tEZXNjcmlwdGlvbi5WYWx1ZSA9IHRhc2tEZXNjcmlwdGlvbjtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tVUkwgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljVGFza1VSTC5OYW1lID0gXCJkeW5hbWljVGFza1VSTFwiO1xyXG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNUYXNrVVJMLkxhYmVsS2V5ID0gXCJUYXNrVVJMXCI7XHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tVUkwuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNUYXNrVVJMLlZhbHVlID0gdGhpcy5hY3Rpdml0eU1vZGVsLnRhc2tVUkw7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNUYXNrVHlwZSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljVGFza1R5cGUuTmFtZSA9IFwiZHluYW1pY1Rhc2tUeXBlXCJcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljVGFza1R5cGUuTGFiZWxLZXkgPSBcIlRhc2tUeXBlXCJcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljVGFza1R5cGUuRGF0YVNvdXJjZSA9IHRoaXMudGFza1R5cGVMaXN0XHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tUeXBlLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tUeXBlLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljVGFza1R5cGUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tUeXBlLlNlbGVjdGVkSXRlbXMgPSB0aGlzLnRhc2tUeXBlTGlzdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIHBhcnNlSW50KGl0ZW0ua2V5KSA9PSB0aGlzLmFjdGl2aXR5TW9kZWwudGFza0NvcnJsVHlwZUlEOyB9KS5tYXAoKGl0ZW0pID0+IGl0ZW0ua2V5KVswXTs7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNDYW5Db21wbGV0ZSA9IG5ldyBUb2dnbGVTbGlkZU9wdGlvbnMoKTtcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljQ2FuQ29tcGxldGUuTmFtZSA9IFwiZHluYW1pY0NhbkNvbXBsZXRlXCI7XHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY0NhbkNvbXBsZXRlLkxhYmVsS2V5ID0gXCJDYW5Db21wbGV0ZUZyb21UTUVcIjtcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljQ2FuQ29tcGxldGUuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0Lkhvcml6b250YWw7XHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY0NhbkNvbXBsZXRlLlZhbHVlID0gdGhpcy5hY3Rpdml0eU1vZGVsLmNhbkNvbXBsZXRlRnJvbVRNRTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0R5bmFtaWNDb250cm9scyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1BhcnRpY2lwYW50Q29udGFpbmVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zaG93T3V0Y29tZXNDb250YWluZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgV0ZBY3Rpdml0eVR5cGUuU3RhcnQ6XHJcbiAgICAgICAgICBjYXNlIFdGQWN0aXZpdHlUeXBlLkVtYWlsOlxyXG4gICAgICAgICAgY2FzZSBXRkFjdGl2aXR5VHlwZS5TbGVlcDpcclxuICAgICAgICAgICAgaWYgKE51bWJlcih0aGlzLmFjdGl2aXR5TW9kZWwuYWN0aXZpdHlUeXBlSXRlbUlEKSA9PSBXRkFjdGl2aXR5VHlwZS5FbWFpbCkge1xyXG4gICAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRUeXBlTGlzdCA9IGxpc3QucGFydGljaXBhbnRzLnBhcnRpY2lwYW50VHlwZXM7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYXJ0aWNpcGFudERhdGFMaXN0ID0gbGlzdC5wYXJ0aWNpcGFudHMucGFydGljaXBhbnREYXRhO1xyXG5cclxuICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWRQYXJ0aWNpcGFudFR5cGVzOiBudW1iZXJbXSA9IHRoaXMuYWN0aXZpdHlNb2RlbC5wYXJ0aWNpcGFudFR5cGVJdGVtSURzU3RyaW5nTGlzdC5tYXAoKGkpID0+IE51bWJlcihpKSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYXJ0aWNpcGFudFR5cGVzID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRUeXBlcy5OYW1lID0gXCJwYXJ0aWNpcGFudFR5cGVzXCJcclxuICAgICAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50VHlwZXMuTGFiZWxLZXkgPSBcIlBhcnRpY2lwYW50VHlwZXNcIlxyXG4gICAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRUeXBlcy5EYXRhU291cmNlID0gdGhpcy5wYXJ0aWNpcGFudFR5cGVMaXN0XHJcbiAgICAgICAgICAgICAgdGhpcy5wYXJ0aWNpcGFudFR5cGVzLlNpbmdsZVNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRUeXBlcy5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYXJ0aWNpcGFudFR5cGVzLklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRUeXBlcy5TZWxlY3RlZEl0ZW1zID0gdGhpcy5wYXJ0aWNpcGFudFR5cGVMaXN0LmZpbHRlcihmdW5jdGlvbiAodGFnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRQYXJ0aWNpcGFudFR5cGVzLmluZGV4T2YocGFyc2VJbnQodGFnLmtleSkpID49IDA7XHJcbiAgICAgICAgICAgICAgfSkubWFwKChpdGVtKSA9PiBpdGVtLmtleSk7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChzZWxlY3RlZFBhcnRpY2lwYW50VHlwZXMuaW5jbHVkZXMoTnVtYmVyKFBhcnRpY2lwYW50VHlwZS5QZXJtaXNzaW9uU2V0KSkpIHtcclxuICAgICAgICAgICAgICAgIGxldCBzZWxlY3RlZFBlcm1pc3Npb25TZXRzOiBudW1iZXJbXSA9IHRoaXMuYWN0aXZpdHlNb2RlbC5wYXJ0aWNpcGFudFBlcm1zZXRzSURzU3RyaW5nLm1hcCgoaSkgPT4gTnVtYmVyKGkpKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50UGVybWlzc2lvblNldCA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRQZXJtaXNzaW9uU2V0Lk5hbWUgPSBcInBhcnRpY2lwYW50UGVybWlzc2lvblNldFwiXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50UGVybWlzc2lvblNldC5MYWJlbEtleSA9IFwiUGVybWlzc2lvblNldFwiXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50UGVybWlzc2lvblNldC5EYXRhU291cmNlID0gdGhpcy5wYXJ0aWNpcGFudERhdGFMaXN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50UGVybWlzc2lvblNldC5TaW5nbGVTZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRQZXJtaXNzaW9uU2V0LkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRQZXJtaXNzaW9uU2V0LlNlbGVjdGVkSXRlbXMgPSB0aGlzLnBhcnRpY2lwYW50RGF0YUxpc3QuZmlsdGVyKGZ1bmN0aW9uICh0YWcpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGVkUGVybWlzc2lvblNldHMuaW5kZXhPZihwYXJzZUludCh0YWcua2V5KSkgPj0gMDtcclxuICAgICAgICAgICAgICAgIH0pLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93UGFydGljaXBhbnRQZXJtc3Npb25TZXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLnNob3dQYXJ0aWNpcGFudENvbnRhaW5lciA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IG5hbWUgPSBuZXcgRW5nbGlzaEFyYWJpY0RUTygpO1xyXG4gICAgICAgICAgICBuYW1lLkFyYWJpYyA9IHRoaXMuYWN0aXZpdHlNb2RlbC5ub3JtYWxPdXRjb21lTmFtZS5hcmFiaWM7XHJcbiAgICAgICAgICAgIG5hbWUuRW5nbGlzaCA9IHRoaXMuYWN0aXZpdHlNb2RlbC5ub3JtYWxPdXRjb21lTmFtZS5lbmdsaXNoO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0aWNPdXRjb21lTmFtZSA9IG5ldyBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRpY091dGNvbWVOYW1lLk5hbWUgPSBcInN0YXRpY091dGNvbWVOYW1lXCI7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZU5hbWUuQXJhYmljTGFiZWxLZXkgPSBcIk91dGNvbWVOYW1lSW5BcmFiaWNcIjtcclxuICAgICAgICAgICAgdGhpcy5zdGF0aWNPdXRjb21lTmFtZS5FbmdsaXNoTGFiZWxLZXkgPSBcIk91dGNvbWVOYW1lSW5FbmdsaXNoXCI7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZU5hbWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZU5hbWUuVmFsdWUgPSBuYW1lO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0aWNPdXRjb21lU3lzTmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRpY091dGNvbWVTeXNOYW1lLk5hbWUgPSBcInN0YXRpY091dGNvbWVTeXNOYW1lXCI7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZVN5c05hbWUuTGFiZWxLZXkgPSBcIkRlY2lzaW9uU3lzTmFtZVwiO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRpY091dGNvbWVTeXNOYW1lLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgICAgICAgdGhpcy5zdGF0aWNPdXRjb21lU3lzTmFtZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0aWNPdXRjb21lU3lzTmFtZS5WYWx1ZSA9IHRoaXMuYWN0aXZpdHlNb2RlbC5vdXRjb21lU3lzTmFtZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZU5leHRBY3Rpdml0eSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0aWNPdXRjb21lTmV4dEFjdGl2aXR5Lk5hbWUgPSBcInN0YXRpY091dGNvbWVOZXh0QWN0aXZpdHlcIlxyXG4gICAgICAgICAgICB0aGlzLnN0YXRpY091dGNvbWVOZXh0QWN0aXZpdHkuTGFiZWxLZXkgPSBcIk5leHRBY3Rpdml0eVwiXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZU5leHRBY3Rpdml0eS5EYXRhU291cmNlID0gdGhpcy5uZXh0QWN0aXZpdHlMaXN0XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZU5leHRBY3Rpdml0eS5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRpY091dGNvbWVOZXh0QWN0aXZpdHkuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRpY091dGNvbWVOZXh0QWN0aXZpdHkuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZU5leHRBY3Rpdml0eS5TZWxlY3RlZEl0ZW1zID0gdGhpcy5uZXh0QWN0aXZpdHlMaXN0LmZpbHRlcigoaXRlbSkgPT4geyByZXR1cm4gcGFyc2VJbnQoaXRlbS5rZXkpID09IHRoaXMuYWN0aXZpdHlNb2RlbC5uZXh0QWN0aXZpdHlJRDsgfSkubWFwKChpdGVtKSA9PiBpdGVtLmtleSlbMF07O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0aWNPdXRjb21lQ2FuQWRkQ29tbWVudCA9IG5ldyBUb2dnbGVTbGlkZU9wdGlvbnMoKTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0aWNPdXRjb21lQ2FuQWRkQ29tbWVudC5OYW1lID0gXCJzdGF0aWNPdXRjb21lQ2FuQWRkQ29tbWVudFwiO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRpY091dGNvbWVDYW5BZGRDb21tZW50LkxhYmVsS2V5ID0gXCJDYW5BZGRDb21tZW50XCI7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZUNhbkFkZENvbW1lbnQuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0Lkhvcml6b250YWw7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZUNhbkFkZENvbW1lbnQuVmFsdWUgPSB0aGlzLmFjdGl2aXR5TW9kZWwuY2FuQWRkQ29tbWVudDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1N0YXRpY0NvbnRyb2xzID0gdHJ1ZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFdGQWN0aXZpdHlUeXBlLkNvbmRpdGlvbjpcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25MSFNXRlZhcmlhYmxlTGlzdCA9IGxpc3Qud2ZWYXJpYWJsZXM7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTV0ZWYXJpYWJsZUxpc3QgPSBsaXN0LndmVmFyaWFibGVzO1xyXG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvblJIU1R5cGVMaXN0ID0gbGlzdC5yaHNUeXBlcztcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25MaXN0ID0gbGlzdC5jb25kaXRpb25zO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25MSFNEcm9wRG93biA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25MSFNEcm9wRG93bi5OYW1lID0gXCJjb25kaXRpb25MSFNEcm9wRG93blwiXHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uTEhTRHJvcERvd24uSGlkZUxhYmVsID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbkxIU0Ryb3BEb3duLlBsYWNlaG9sZGVyID0gXCJXb3JrZmxvd1ZhcmlhYmxlc1wiXHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uTEhTRHJvcERvd24uRGF0YVNvdXJjZSA9IHRoaXMuY29uZGl0aW9uTEhTV0ZWYXJpYWJsZUxpc3RcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25MSFNEcm9wRG93bi5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbkxIU0Ryb3BEb3duLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25MSFNEcm9wRG93bi5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25MSFNEcm9wRG93bi5TZWxlY3RlZEl0ZW1zID0gdGhpcy5jb25kaXRpb25MSFNXRlZhcmlhYmxlTGlzdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIHBhcnNlSW50KGl0ZW0ua2V5KSA9PSB0aGlzLmFjdGl2aXR5TW9kZWwubGhzVmFyaWFibGVJRDsgfSkubWFwKChpdGVtKSA9PiBpdGVtLmtleSlbMF07O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25zRHJvcERvd24gPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uc0Ryb3BEb3duLk5hbWUgPSBcImNvbmRpdGlvbnNEcm9wRG93blwiXHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uc0Ryb3BEb3duLkhpZGVMYWJlbCA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25zRHJvcERvd24uUGxhY2Vob2xkZXIgPSBcIkNvbmRpdGlvblwiXHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uc0Ryb3BEb3duLkRhdGFTb3VyY2UgPSB0aGlzLmNvbmRpdGlvbkxpc3RcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25zRHJvcERvd24uU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25zRHJvcERvd24uSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uc0Ryb3BEb3duLlNlbGVjdGVkSXRlbXMgPSB0aGlzLmNvbmRpdGlvbkxpc3QuZmlsdGVyKChpdGVtKSA9PiB7IHJldHVybiBwYXJzZUludChpdGVtLmtleSkgPT0gdGhpcy5hY3Rpdml0eU1vZGVsLm9wZXJhdG9yVHlwZUl0ZW1JRDsgfSkubWFwKChpdGVtKSA9PiBpdGVtLmtleSlbMF07O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNUeXBlRHJvcERvd24gPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTVHlwZURyb3BEb3duLk5hbWUgPSBcImNvbmRpdGlvblJIU1R5cGVEcm9wRG93blwiXHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTVHlwZURyb3BEb3duLkhpZGVMYWJlbCA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNUeXBlRHJvcERvd24uRGF0YVNvdXJjZSA9IHRoaXMuY29uZGl0aW9uUkhTVHlwZUxpc3RcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNUeXBlRHJvcERvd24uU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNUeXBlRHJvcERvd24uSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTVHlwZURyb3BEb3duLlNlbGVjdGVkSXRlbXMgPSB0aGlzLmNvbmRpdGlvblJIU1R5cGVMaXN0LmZpbHRlcigoaXRlbSkgPT4geyByZXR1cm4gcGFyc2VJbnQoaXRlbS5rZXkpID09IHRoaXMuYWN0aXZpdHlNb2RlbC5yaHNUeXBlSXRlbUlEOyB9KS5tYXAoKGl0ZW0pID0+IGl0ZW0ua2V5KVswXTs7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5hY3Rpdml0eU1vZGVsLnJoc1R5cGVJdGVtSUQgPT0gQ29uZGl0aW9uUkhTVHlwZS5WYXJpYWJsZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTRHJvcERvd24gPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNEcm9wRG93bi5OYW1lID0gXCJjb25kaXRpb25SSFNEcm9wRG93blwiXHJcbiAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNEcm9wRG93bi5IaWRlTGFiZWwgPSB0cnVlXHJcbiAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNEcm9wRG93bi5QbGFjZWhvbGRlciA9IFwiV29ya2Zsb3dWYXJpYWJsZXNcIlxyXG4gICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTRHJvcERvd24uRGF0YVNvdXJjZSA9IHRoaXMuY29uZGl0aW9uUkhTV0ZWYXJpYWJsZUxpc3RcclxuICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvblJIU0Ryb3BEb3duLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNEcm9wRG93bi5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvblJIU0Ryb3BEb3duLlNlbGVjdGVkSXRlbXMgPSB0aGlzLmNvbmRpdGlvblJIU1dGVmFyaWFibGVMaXN0LmZpbHRlcigoaXRlbSkgPT4geyByZXR1cm4gcGFyc2VJbnQoaXRlbS5rZXkpID09IHRoaXMuYWN0aXZpdHlNb2RlbC5yaHNWYXJpYWJsZUlEOyB9KS5tYXAoKGl0ZW0pID0+IGl0ZW0ua2V5KVswXTs7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuc2hvd0NvbmRpdGlvblJIU1dGVmFyaWFibGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTVmFsdWUgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvblJIU1ZhbHVlLk5hbWUgPSBcImNvbmRpdGlvblJIU1ZhbHVlXCI7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNWYWx1ZS5IaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTVmFsdWUuUGxhY2Vob2xkZXIgPSBcIlZhbHVlXCI7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNWYWx1ZS5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNWYWx1ZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvblJIU1ZhbHVlLlZhbHVlID0gdGhpcy5hY3Rpdml0eU1vZGVsLnJoc1ZhbHVlO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLnNob3dDb25kaXRpb25SSFNXRlZhcmlhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zaG93Q29uZGl0aW9uQ29udHJvbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dPdXRjb21lc0NvbnRhaW5lciA9IHRydWU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmlzRWRpdEZvcm1Mb2FkZWQgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvL0VkaXQgZnVuY3Rpb25zXHJcbiAgZ2V0RWRpdFdGQWN0aXZpdHlNb2RlbCA9ICgpID0+IHtcclxuICAgIGxldCBwYXJhbUFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IFJlc3VsdE1vZGVsID0gdGhpcy5lZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm0udmFsdWU7XHJcbiAgICBsZXQgZWRpdE1vZGVsID0gbmV3IFdGQWN0aXZpdHlNb2RlbCgpO1xyXG4gICAgZWRpdE1vZGVsLklEID0gdGhpcy5hY3Rpdml0eU1vZGVsLmlkO1xyXG4gICAgZWRpdE1vZGVsLk5hbWUuRW5nbGlzaCA9IFJlc3VsdE1vZGVsLm5hbWUuRW5nbGlzaDtcclxuICAgIGVkaXRNb2RlbC5OYW1lLkFyYWJpYyA9IFJlc3VsdE1vZGVsLm5hbWUuQXJhYmljO1xyXG4gICAgZWRpdE1vZGVsLlZlcnNpb25JRCA9IE51bWJlcih0aGlzLnZlcnNpb25JRCk7XHJcbiAgICBlZGl0TW9kZWwuQWN0aXZpdHlUeXBlSXRlbUlEID0gdGhpcy5hY3Rpdml0eVR5cGVJRDtcclxuXHJcbiAgICBlZGl0TW9kZWwuU3lzTmFtZSA9IFJlc3VsdE1vZGVsLnN5c05hbWVcclxuXHJcblxyXG4gICAgLy9JZiBwYXJ0aWNpcGFudCBleGlzdHNcclxuICAgIGlmIChSZXN1bHRNb2RlbC5wYXJ0aWNpcGFudFR5cGVzICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBlZGl0TW9kZWwuUGFydGljaXBhbnREVE8gPSBuZXcgUGFydGljaXBhbnRNb2RlbCgpO1xyXG4gICAgICBlZGl0TW9kZWwuUGFydGljaXBhbnREVE8gPSBuZXcgUGFydGljaXBhbnRNb2RlbCgpO1xyXG4gICAgICBlZGl0TW9kZWwuUGFydGljaXBhbnREVE8uUGFydGljaXBhbnRUeXBlSXRlbUlEc1N0cmluZyA9IFJlc3VsdE1vZGVsLnBhcnRpY2lwYW50VHlwZXMudG9TdHJpbmcoKTtcclxuICAgICAgaWYgKFJlc3VsdE1vZGVsLnBhcnRpY2lwYW50VHlwZXMuaW5jbHVkZXMoUGFydGljaXBhbnRUeXBlLlBlcm1pc3Npb25TZXQpKSB7XHJcbiAgICAgICAgZWRpdE1vZGVsLlBhcnRpY2lwYW50RFRPLlBlcm1pc3Npb25TZXRJRHNTdHJpbmcgPSBSZXN1bHRNb2RlbC5wYXJ0aWNpcGFudFBlcm1pc3Npb25TZXQudG9TdHJpbmcoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3dpdGNoIChOdW1iZXIodGhpcy5hY3Rpdml0eVR5cGVJRCkpIHtcclxuICAgICAgY2FzZSBXRkFjdGl2aXR5VHlwZS5BcHByb3ZhbDpcclxuICAgICAgY2FzZSBXRkFjdGl2aXR5VHlwZS5BY3Rpb246XHJcbiAgICAgIGNhc2UgV0ZBY3Rpdml0eVR5cGUuUGVyY2VudGFnZVRhc2s6XHJcbiAgICAgICAgZWRpdE1vZGVsLlRhc2tOYW1lLkVuZ2xpc2ggPSBSZXN1bHRNb2RlbC5keW5hbWljVGFza05hbWUuRW5nbGlzaDtcclxuICAgICAgICBlZGl0TW9kZWwuVGFza05hbWUuQXJhYmljID0gUmVzdWx0TW9kZWwuZHluYW1pY1Rhc2tOYW1lLkFyYWJpYztcclxuICAgICAgICBlZGl0TW9kZWwuVGFza0Rlc2NyaXB0aW9uLkVuZ2xpc2ggPSBSZXN1bHRNb2RlbC5keW5hbWljVGFza0Rlc2NyaXB0aW9uLkVuZ2xpc2g7XHJcbiAgICAgICAgZWRpdE1vZGVsLlRhc2tEZXNjcmlwdGlvbi5BcmFiaWMgPSBSZXN1bHRNb2RlbC5keW5hbWljVGFza0Rlc2NyaXB0aW9uLkFyYWJpYztcclxuICAgICAgICBlZGl0TW9kZWwuVGFza1VSTCA9IFJlc3VsdE1vZGVsLmR5bmFtaWNUYXNrVVJMO1xyXG4gICAgICAgIGVkaXRNb2RlbC5UYXNrQ29ycmxUeXBlSUQgPSBSZXN1bHRNb2RlbC5keW5hbWljVGFza1R5cGUgIT0gbnVsbCA/IE51bWJlcihSZXN1bHRNb2RlbC5keW5hbWljVGFza1R5cGUpIDogbnVsbDtcclxuICAgICAgICBlZGl0TW9kZWwuQ2FuQ29tcGxldGVGcm9tVE1FID0gUmVzdWx0TW9kZWwuZHluYW1pY0NhbkNvbXBsZXRlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFdGQWN0aXZpdHlUeXBlLlN0YXJ0OlxyXG4gICAgICBjYXNlIFdGQWN0aXZpdHlUeXBlLkVtYWlsOlxyXG4gICAgICBjYXNlIFdGQWN0aXZpdHlUeXBlLlNsZWVwOlxyXG4gICAgICAgIGlmICghdGhpcy5pc1B1Ymxpc2hlZCkge1xyXG4gICAgICAgICAgZWRpdE1vZGVsLk5vcm1hbE91dGNvbWVOYW1lLkVuZ2xpc2ggPSBSZXN1bHRNb2RlbC5zdGF0aWNPdXRjb21lTmFtZS5FbmdsaXNoO1xyXG4gICAgICAgICAgZWRpdE1vZGVsLk5vcm1hbE91dGNvbWVOYW1lLkFyYWJpYyA9IFJlc3VsdE1vZGVsLnN0YXRpY091dGNvbWVOYW1lLkFyYWJpYztcclxuICAgICAgICAgIGVkaXRNb2RlbC5PdXRjb21lU3lzTmFtZSA9IFJlc3VsdE1vZGVsLnN0YXRpY091dGNvbWVTeXNOYW1lO1xyXG4gICAgICAgICAgZWRpdE1vZGVsLk5leHRBY3Rpdml0eUlEID0gUmVzdWx0TW9kZWwuc3RhdGljT3V0Y29tZU5leHRBY3Rpdml0eSAhPSBudWxsID8gTnVtYmVyKFJlc3VsdE1vZGVsLnN0YXRpY091dGNvbWVOZXh0QWN0aXZpdHkpIDogbnVsbDtcclxuICAgICAgICAgIGVkaXRNb2RlbC5DYW5BZGRDb21tZW50ID0gUmVzdWx0TW9kZWwuc3RhdGljT3V0Y29tZUNhbkFkZENvbW1lbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFdGQWN0aXZpdHlUeXBlLkNvbmRpdGlvbjpcclxuICAgICAgICBlZGl0TW9kZWwuTEhTVmFyaWFibGVJRCA9IFJlc3VsdE1vZGVsLmNvbmRpdGlvbkxIU0Ryb3BEb3duICE9IG51bGwgPyBOdW1iZXIoUmVzdWx0TW9kZWwuY29uZGl0aW9uTEhTRHJvcERvd24pIDogbnVsbDtcclxuICAgICAgICBlZGl0TW9kZWwuUkhTVmFyaWFibGVJRCA9IFJlc3VsdE1vZGVsLmNvbmRpdGlvblJIU0Ryb3BEb3duICE9IG51bGwgPyBOdW1iZXIoUmVzdWx0TW9kZWwuY29uZGl0aW9uUkhTRHJvcERvd24pIDogbnVsbDtcclxuICAgICAgICBlZGl0TW9kZWwuUkhTVHlwZUl0ZW1JRCA9IFJlc3VsdE1vZGVsLmNvbmRpdGlvblJIU1R5cGVEcm9wRG93biAhPSBudWxsID8gTnVtYmVyKFJlc3VsdE1vZGVsLmNvbmRpdGlvblJIU1R5cGVEcm9wRG93bikgOiBudWxsO1xyXG4gICAgICAgIGVkaXRNb2RlbC5PcGVyYXRvclR5cGVJdGVtSUQgPSBSZXN1bHRNb2RlbC5jb25kaXRpb25zRHJvcERvd24gIT0gbnVsbCA/IE51bWJlcihSZXN1bHRNb2RlbC5jb25kaXRpb25zRHJvcERvd24pIDogbnVsbDtcclxuICAgICAgICBlZGl0TW9kZWwuUkhTVmFsdWUgPSBSZXN1bHRNb2RlbC5jb25kaXRpb25SSFNWYWx1ZSAhPSB1bmRlZmluZWQgPyBSZXN1bHRNb2RlbC5jb25kaXRpb25SSFNWYWx1ZSA6IG51bGw7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgfVxyXG4gICAgLy9TZXQgT3V0Y29tZXMgKGR5bmFtaWMsY29uZGl0aW9uIHR5cGVzKVxyXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLm91dGNvbWVzQ291bnQ7IGorKykge1xyXG4gICAgICBsZXQgb3V0Y29tZUlEID0gUmVzdWx0TW9kZWxbXCJvdXRjb21lSURcIiArIGpdO1xyXG4gICAgICBpZiAob3V0Y29tZUlEID09IHVuZGVmaW5lZClcclxuICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgIGxldCBvdXRjb21lTmFtZSA9IFJlc3VsdE1vZGVsW1wib3V0Y29tZU5hbWVcIiArIGpdO1xyXG5cclxuICAgICAgbGV0IG91dGNvbWVTeXNOYW1lOiBzdHJpbmc7XHJcbiAgICAgIGxldCBvdXRDb21lQ2FuRWRpdFN5c05hbWUgPSBSZXN1bHRNb2RlbFtcIm91dGNvbWVDYW5FZGl0U3lzTmFtZVwiICsgal07XHJcbiAgICAgIGlmIChvdXRDb21lQ2FuRWRpdFN5c05hbWUpXHJcbiAgICAgICAgb3V0Y29tZVN5c05hbWUgPSBSZXN1bHRNb2RlbFtcIm91dGNvbWVEZWNpc2lvblN5c05hbWVcIiArIGpdO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgb3V0Y29tZVN5c05hbWUgPSBSZXN1bHRNb2RlbFtcIm91dGNvbWVIaWRkZW5lU3lzTmFtZVwiICsgal07XHJcblxyXG4gICAgICBsZXQgb3V0Y29tZUFjdGl2aXR5ID0gUmVzdWx0TW9kZWxbXCJvdXRjb21lTmV4dEFjdGl2aXR5VHlwZXNcIiArIGpdO1xyXG4gICAgICBsZXQgb3V0Y29tZUNhbkFkZENvbW1lbnQgPSBSZXN1bHRNb2RlbFtcIm91dGNvbWVDYW5BZGRDb21tZW50XCIgKyBqXTtcclxuXHJcbiAgICAgIGxldCBhY3Rpdml0eU91dGNvbWU6IFdGQWN0aXZpdHlPdXRjb21lTW9kZWwgPSBuZXcgV0ZBY3Rpdml0eU91dGNvbWVNb2RlbCgpO1xyXG4gICAgICBhY3Rpdml0eU91dGNvbWUuSWQgPSBvdXRjb21lSUQ7XHJcbiAgICAgIGFjdGl2aXR5T3V0Y29tZS5OYW1lRU4gPSBvdXRjb21lTmFtZS5FbmdsaXNoO1xyXG4gICAgICBhY3Rpdml0eU91dGNvbWUuTmFtZUFSID0gb3V0Y29tZU5hbWUuQXJhYmljO1xyXG4gICAgICBhY3Rpdml0eU91dGNvbWUuT3V0Y29tZVN5c05hbWUgPSBvdXRjb21lU3lzTmFtZTtcclxuICAgICAgYWN0aXZpdHlPdXRjb21lLk5leHRBY3Rpdml0eUlEID0gb3V0Y29tZUFjdGl2aXR5ICE9IG51bGwgPyBOdW1iZXIob3V0Y29tZUFjdGl2aXR5KSA6IG51bGw7XHJcbiAgICAgIGFjdGl2aXR5T3V0Y29tZS5DYW5BZGRDb21tZW50ID0gb3V0Y29tZUNhbkFkZENvbW1lbnQ7XHJcblxyXG4gICAgICBlZGl0TW9kZWwuT3V0Y29tZXMucHVzaChhY3Rpdml0eU91dGNvbWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwYXJhbUFycmF5LnB1c2goZWRpdE1vZGVsKTtcclxuICAgIHJldHVybiBwYXJhbUFycmF5O1xyXG4gIH1cclxuICBnZXRFZGl0V0ZBY3Rpdml0eUZ1bmN0aW9uID0gKGVkaXRNb2RlbCk6IE9ic2VydmFibGU8YW55PiA9PiB7XHJcbiAgICBpZiAodGhpcy5pc1B1Ymxpc2hlZClcclxuICAgICAgcmV0dXJuIHRoaXMud29ya2Zsb3dBY3Rpdml0eVNlcnZpY2UuZWRpdFB1Ymxpc2hlZEFjdGl2aXR5KGVkaXRNb2RlbCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHJldHVybiB0aGlzLndvcmtmbG93QWN0aXZpdHlTZXJ2aWNlLmVkaXRBY3Rpdml0eShlZGl0TW9kZWwpO1xyXG4gIH1cclxuICBvbkVkaXRTdWNjZXNzID0gKHJlc3VsdCkgPT4ge1xyXG4gICAgdGhpcy5jYW5jZWxFZGl0KCk7XHJcbiAgfVxyXG5cclxuICAvL091dGNvbWUgZnVuY3Rpb25zXHJcbiAgZ2V0QWN0aXZpdHlPdXRjb21lc09wdGlvbnMob3V0Q29tZXM6IGFueVtdLCBpc1B1Ymxpc2hlZDogYm9vbGVhbikge1xyXG4gICAgbGV0IG91dGNvbWVzT3B0aW9uczogYW55W10gPSBbXTtcclxuICAgIGxldCBvdXRjb21lc0NvdW50OiBudW1iZXIgPSAwO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0Q29tZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGN1cnJlbnRPdXRjb21lID0gb3V0Q29tZXNbaV07XHJcbiAgICAgIGxldCBvYmplY3RPdXRjb21lT3B0aW9uczogYW55W10gPSBbXTtcclxuXHJcbiAgICAgIGxldCBvdXRjb21lSUQgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgb3V0Y29tZUlELk5hbWUgPSBcIm91dGNvbWVJRFwiICsgaTtcclxuICAgICAgb3V0Y29tZUlELkhpZGVMYWJlbCA9IHRydWU7XHJcbiAgICAgIG91dGNvbWVJRC5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgIG91dGNvbWVJRC5WYWx1ZSA9IGN1cnJlbnRPdXRjb21lLmlkO1xyXG5cclxuICAgICAgbGV0IG5hbWUgPSBuZXcgRW5nbGlzaEFyYWJpY0RUTygpO1xyXG4gICAgICBuYW1lLkVuZ2xpc2ggPSBjdXJyZW50T3V0Y29tZS5uYW1lRU47XHJcbiAgICAgIG5hbWUuQXJhYmljID0gY3VycmVudE91dGNvbWUubmFtZUFSO1xyXG5cclxuICAgICAgbGV0IG91dGNvbWVOYW1lID0gbmV3IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIG91dGNvbWVOYW1lLk5hbWUgPSBcIm91dGNvbWVOYW1lXCIgKyBpO1xyXG4gICAgICBvdXRjb21lTmFtZS5BcmFiaWNMYWJlbEtleSA9IFwiTmFtZUluQXJhYmljXCI7XHJcbiAgICAgIG91dGNvbWVOYW1lLkVuZ2xpc2hMYWJlbEtleSA9IFwiTmFtZUluRW5nbGlzaFwiO1xyXG4gICAgICBvdXRjb21lTmFtZS5WYWx1ZSA9IG5hbWU7XHJcbiAgICAgIG91dGNvbWVOYW1lLklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgbGV0IG91dGNvbWVOZXh0QWN0aXZpdHlUeXBlcyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgb3V0Y29tZU5leHRBY3Rpdml0eVR5cGVzLk5hbWUgPSBcIm91dGNvbWVOZXh0QWN0aXZpdHlUeXBlc1wiICsgaTtcclxuICAgICAgb3V0Y29tZU5leHRBY3Rpdml0eVR5cGVzLkxhYmVsS2V5ID0gXCJBY3Rpdml0eVwiXHJcbiAgICAgIG91dGNvbWVOZXh0QWN0aXZpdHlUeXBlcy5EYXRhU291cmNlID0gdGhpcy5uZXh0QWN0aXZpdHlMaXN0XHJcbiAgICAgIG91dGNvbWVOZXh0QWN0aXZpdHlUeXBlcy5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICBvdXRjb21lTmV4dEFjdGl2aXR5VHlwZXMuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICBvdXRjb21lTmV4dEFjdGl2aXR5VHlwZXMuU2VsZWN0ZWRJdGVtcyA9IHRoaXMubmV4dEFjdGl2aXR5TGlzdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIHBhcnNlSW50KGl0ZW0ua2V5KSA9PSBjdXJyZW50T3V0Y29tZS5uZXh0QWN0aXZpdHlJRDsgfSkubWFwKChpdGVtKSA9PiBpdGVtLmtleSlbMF07O1xyXG5cclxuICAgICAgbGV0IG91dGNvbWVDYW5FZGl0OiBib29sZWFuO1xyXG4gICAgICBvdXRjb21lQ2FuRWRpdCA9IGN1cnJlbnRPdXRjb21lLmNhbkVkaXQ7XHJcblxyXG4gICAgICBsZXQgb3V0Y29tZUhpZGRlbmVTeXNOYW1lID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIG91dGNvbWVIaWRkZW5lU3lzTmFtZS5OYW1lID0gXCJvdXRjb21lSGlkZGVuZVN5c05hbWVcIiArIGk7XHJcbiAgICAgIG91dGNvbWVIaWRkZW5lU3lzTmFtZS5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgIG91dGNvbWVIaWRkZW5lU3lzTmFtZS5WYWx1ZSA9IGN1cnJlbnRPdXRjb21lLm91dGNvbWVTeXNOYW1lO1xyXG5cclxuICAgICAgbGV0IG91dGNvbWVDYW5FZGl0U3lzTmFtZSA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgICAgb3V0Y29tZUNhbkVkaXRTeXNOYW1lLk5hbWUgPSBcIm91dGNvbWVDYW5FZGl0U3lzTmFtZVwiICsgaTtcclxuICAgICAgb3V0Y29tZUNhbkVkaXRTeXNOYW1lLlZhbHVlID0gY3VycmVudE91dGNvbWUuY2FuRWRpdFN5c05hbWU7XHJcblxyXG4gICAgICBpZiAoIWlzUHVibGlzaGVkKSB7XHJcbiAgICAgICAgbGV0IG91dGNvbWVEZWNpc2lvblN5c05hbWUgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgICBvdXRjb21lRGVjaXNpb25TeXNOYW1lLk5hbWUgPSBcIm91dGNvbWVEZWNpc2lvblN5c05hbWVcIiArIGk7XHJcbiAgICAgICAgb3V0Y29tZURlY2lzaW9uU3lzTmFtZS5MYWJlbEtleSA9IFwiRGVjaXNpb25TeXNOYW1lXCI7XHJcbiAgICAgICAgb3V0Y29tZURlY2lzaW9uU3lzTmFtZS5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgICAgb3V0Y29tZURlY2lzaW9uU3lzTmFtZS5WYWx1ZSA9IGN1cnJlbnRPdXRjb21lLm91dGNvbWVTeXNOYW1lO1xyXG4gICAgICAgIG91dGNvbWVEZWNpc2lvblN5c05hbWUuSXNEaXNhYmxlZCA9ICFjdXJyZW50T3V0Y29tZS5jYW5FZGl0U3lzTmFtZTtcclxuICAgICAgICBvdXRjb21lRGVjaXNpb25TeXNOYW1lLklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICBsZXQgb3V0Y29tZUNhbkFkZENvbW1lbnQgPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgb3V0Y29tZUNhbkFkZENvbW1lbnQuTmFtZSA9IFwib3V0Y29tZUNhbkFkZENvbW1lbnRcIiArIGk7XHJcbiAgICAgICAgb3V0Y29tZUNhbkFkZENvbW1lbnQuVmFsdWUgPSBjdXJyZW50T3V0Y29tZS5jYW5BZGRDb21tZW50O1xyXG4gICAgICAgIG91dGNvbWVDYW5BZGRDb21tZW50LkxhYmVsS2V5ID0gXCJDYW5BZGRDb21tZW50XCI7XHJcblxyXG4gICAgICAgIG9iamVjdE91dGNvbWVPcHRpb25zLnB1c2gob3V0Y29tZUlELCBvdXRjb21lTmFtZSwgb3V0Y29tZURlY2lzaW9uU3lzTmFtZSwgb3V0Y29tZU5leHRBY3Rpdml0eVR5cGVzLFxyXG4gICAgICAgICAgb3V0Y29tZUNhbkFkZENvbW1lbnQsIG91dGNvbWVDYW5FZGl0LCBvdXRjb21lSGlkZGVuZVN5c05hbWUsIG91dGNvbWVDYW5FZGl0U3lzTmFtZSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZVxyXG4gICAgICAgIG9iamVjdE91dGNvbWVPcHRpb25zLnB1c2gob3V0Y29tZUlELCBvdXRjb21lTmFtZSwgb3V0Y29tZU5leHRBY3Rpdml0eVR5cGVzLCBvdXRjb21lQ2FuRWRpdCwgb3V0Y29tZUhpZGRlbmVTeXNOYW1lLCBvdXRjb21lQ2FuRWRpdFN5c05hbWUpO1xyXG5cclxuICAgICAgb3V0Y29tZXNPcHRpb25zLnB1c2gob2JqZWN0T3V0Y29tZU9wdGlvbnMpO1xyXG4gICAgICBvdXRjb21lc0NvdW50ICs9IDE7XHJcblxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFtvdXRjb21lc09wdGlvbnMsIG91dGNvbWVzQ291bnRdO1xyXG4gIH1cclxuICBhZGRXRkFjdGl2aXR5T3V0Y29tZSgpIHtcclxuICAgIGxldCBpbmRleCA9IHRoaXMub3V0Y29tZXNDb3VudDtcclxuXHJcbiAgICBsZXQgb2JqZWN0T3V0Y29tZU9wdGlvbnM6IGFueVtdID0gW107XHJcblxyXG4gICAgbGV0IG91dGNvbWVJRCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgb3V0Y29tZUlELk5hbWUgPSBcIm91dGNvbWVJRFwiICsgaW5kZXg7XHJcbiAgICBvdXRjb21lSUQuSGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgIG91dGNvbWVJRC5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICBvdXRjb21lSUQuVmFsdWUgPSAwO1xyXG5cclxuICAgIGxldCBvdXRjb21lTmFtZSA9IG5ldyBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgb3V0Y29tZU5hbWUuTmFtZSA9IFwib3V0Y29tZU5hbWVcIiArIGluZGV4O1xyXG4gICAgb3V0Y29tZU5hbWUuQXJhYmljTGFiZWxLZXkgPSBcIk5hbWVJbkFyYWJpY1wiO1xyXG4gICAgb3V0Y29tZU5hbWUuRW5nbGlzaExhYmVsS2V5ID0gXCJOYW1lSW5FbmdsaXNoXCI7XHJcbiAgICBvdXRjb21lTmFtZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICBsZXQgb3V0Y29tZURlY2lzaW9uU3lzTmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgb3V0Y29tZURlY2lzaW9uU3lzTmFtZS5OYW1lID0gXCJvdXRjb21lRGVjaXNpb25TeXNOYW1lXCIgKyBpbmRleDtcclxuICAgIG91dGNvbWVEZWNpc2lvblN5c05hbWUuTGFiZWxLZXkgPSBcIkRlY2lzaW9uU3lzTmFtZVwiO1xyXG4gICAgb3V0Y29tZURlY2lzaW9uU3lzTmFtZS5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICBvdXRjb21lRGVjaXNpb25TeXNOYW1lLklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgIGxldCBvdXRjb21lTmV4dEFjdGl2aXR5VHlwZXMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICBvdXRjb21lTmV4dEFjdGl2aXR5VHlwZXMuTmFtZSA9IFwib3V0Y29tZU5leHRBY3Rpdml0eVR5cGVzXCIgKyBpbmRleDtcclxuICAgIG91dGNvbWVOZXh0QWN0aXZpdHlUeXBlcy5MYWJlbEtleSA9IFwiQWN0aXZpdHlcIlxyXG4gICAgb3V0Y29tZU5leHRBY3Rpdml0eVR5cGVzLkRhdGFTb3VyY2UgPSB0aGlzLm5leHRBY3Rpdml0eUxpc3RcclxuICAgIG91dGNvbWVOZXh0QWN0aXZpdHlUeXBlcy5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgb3V0Y29tZU5leHRBY3Rpdml0eVR5cGVzLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuXHJcbiAgICBsZXQgb3V0Y29tZUNhbkFkZENvbW1lbnQgPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICBvdXRjb21lQ2FuQWRkQ29tbWVudC5OYW1lID0gXCJvdXRjb21lQ2FuQWRkQ29tbWVudFwiICsgaW5kZXg7XHJcbiAgICBvdXRjb21lQ2FuQWRkQ29tbWVudC5MYWJlbEtleSA9IFwiQ2FuQWRkQ29tbWVudFwiO1xyXG5cclxuICAgIGxldCBvdXRjb21lQ2FuRWRpdDogYm9vbGVhbjtcclxuICAgIG91dGNvbWVDYW5FZGl0ID0gdHJ1ZTtcclxuXHJcbiAgICBsZXQgb3V0Y29tZUhpZGRlbmVTeXNOYW1lID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICBvdXRjb21lSGlkZGVuZVN5c05hbWUuTmFtZSA9IFwib3V0Y29tZUhpZGRlbmVTeXNOYW1lXCIgKyBpbmRleDtcclxuICAgIG91dGNvbWVIaWRkZW5lU3lzTmFtZS5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcblxyXG4gICAgbGV0IG91dGNvbWVDYW5FZGl0U3lzTmFtZSA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgIG91dGNvbWVDYW5FZGl0U3lzTmFtZS5OYW1lID0gXCJvdXRjb21lQ2FuRWRpdFN5c05hbWVcIiArIGluZGV4O1xyXG4gICAgb3V0Y29tZUNhbkVkaXRTeXNOYW1lLlZhbHVlID0gdHJ1ZTtcclxuXHJcbiAgICBvYmplY3RPdXRjb21lT3B0aW9ucy5wdXNoKG91dGNvbWVJRCwgb3V0Y29tZU5hbWUsIG91dGNvbWVEZWNpc2lvblN5c05hbWUsIG91dGNvbWVOZXh0QWN0aXZpdHlUeXBlcywgb3V0Y29tZUNhbkFkZENvbW1lbnQsXHJcbiAgICAgIG91dGNvbWVDYW5FZGl0LCBvdXRjb21lSGlkZGVuZVN5c05hbWUsIG91dGNvbWVDYW5FZGl0U3lzTmFtZSk7XHJcblxyXG4gICAgdGhpcy5vdXRjb21lc09wdGlvbnMucHVzaChvYmplY3RPdXRjb21lT3B0aW9ucyk7XHJcbiAgICB0aGlzLm91dGNvbWVzQ291bnQgKz0gMTtcclxuXHJcbiAgfVxyXG4gIGRlbGV0ZU91dGNvbWUoZGVsZXRlZE91dGNvbWU6IGFueSkge1xyXG4gICAgZGVidWdnZXI7XHJcbiAgICBsZXQgZGVsZXRlZE91dGNvbWVJbmRleDogbnVtYmVyID0gdGhpcy5vdXRjb21lc09wdGlvbnMuaW5kZXhPZihkZWxldGVkT3V0Y29tZSk7XHJcbiAgICBpZiAoZGVsZXRlZE91dGNvbWVJbmRleCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5vdXRjb21lc09wdGlvbnMuc3BsaWNlKGRlbGV0ZWRPdXRjb21lSW5kZXgsIDEpO1xyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGV0ZWRPdXRjb21lLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm0ucmVtb3ZlQ29udHJvbChkZWxldGVkT3V0Y29tZVtpXS5OYW1lKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9PbiBjaGFuZ2VzIGV2ZW50c1xyXG4gIGFjdGl2aXR5VHlwZU9uQ2hhbmdlKGFjdGl2aXR5VHlwZSkge1xyXG4gICAgLy9SZXNldCBjb250cm9scywgb3V0Y29tZXMgYW5kIGZsYWdzXHJcbiAgICB0aGlzLnJlc2V0QWxsQWN0aXZpdHlUeXBlQ29udHJvbHMoKTtcclxuICAgIHRoaXMub3V0Y29tZXNPcHRpb25zID0gW107XHJcbiAgICB0aGlzLm91dGNvbWVzQ291bnQgPSAwO1xyXG4gICAgdGhpcy5zaG93UGFydGljaXBhbnRDb250YWluZXIgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0R5bmFtaWNDb250cm9scyA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93U3RhdGljQ29udHJvbHMgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0NvbmRpdGlvbkNvbnRyb2xzID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dDb25kaXRpb25SSFNXRlZhcmlhYmxlID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dPdXRjb21lc0NvbnRhaW5lciA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuYWN0aXZpdHlUeXBlSUQgPSBhY3Rpdml0eVR5cGU7XHJcbiAgICB0aGlzLndvcmtmbG93QWN0aXZpdHlTZXJ2aWNlLmdldEFjdGl2aXR5T3V0Y29tZXModGhpcy52ZXJzaW9uSUQsIGFjdGl2aXR5VHlwZSkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgdmFyIHJlc3VsdE9iaiA9IHJlc3VsdCBhcyBhbnk7XHJcbiAgICAgIHZhciBtb2RlbCA9IHJlc3VsdE9iai5tb2RlbDtcclxuICAgICAgdmFyIGxpc3QgPSByZXN1bHRPYmoubGlzdDtcclxuICAgICAgdGhpcy5uZXh0QWN0aXZpdHlMaXN0ID0gbGlzdC5hY3Rpdml0aWVzO1xyXG5cclxuICAgICAgc3dpdGNoIChOdW1iZXIoYWN0aXZpdHlUeXBlKSkge1xyXG4gICAgICAgIGNhc2UgV0ZBY3Rpdml0eVR5cGUuQXBwcm92YWw6XHJcbiAgICAgICAgY2FzZSBXRkFjdGl2aXR5VHlwZS5BY3Rpb246XHJcbiAgICAgICAgY2FzZSBXRkFjdGl2aXR5VHlwZS5QZXJjZW50YWdlVGFzazpcclxuICAgICAgICAgIHRoaXMudGFza1R5cGVMaXN0ID0gbGlzdC50YXNrcztcclxuICAgICAgICAgIHRoaXMucGFydGljaXBhbnRUeXBlTGlzdCA9IGxpc3QucGFydGljaXBhbnRzLnBhcnRpY2lwYW50VHlwZXM7XHJcbiAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50RGF0YUxpc3QgPSBsaXN0LnBhcnRpY2lwYW50cy5wYXJ0aWNpcGFudERhdGE7XHJcblxyXG4gICAgICAgICAgLy9Jbml0aWFsaXplIHJlcXVpcmVkIGNvbnRyb2xzIGZvciBhcHByb3ZhbFxyXG4gICAgICAgICAgdGhpcy5wYXJ0aWNpcGFudFR5cGVzID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgICAgdGhpcy5wYXJ0aWNpcGFudFR5cGVzLk5hbWUgPSBcInBhcnRpY2lwYW50VHlwZXNcIlxyXG4gICAgICAgICAgdGhpcy5wYXJ0aWNpcGFudFR5cGVzLkxhYmVsS2V5ID0gXCJQYXJ0aWNpcGFudFR5cGVzXCJcclxuICAgICAgICAgIHRoaXMucGFydGljaXBhbnRUeXBlcy5EYXRhU291cmNlID0gdGhpcy5wYXJ0aWNpcGFudFR5cGVMaXN0XHJcbiAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50VHlwZXMuU2luZ2xlU2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50VHlwZXMuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5wYXJ0aWNpcGFudFR5cGVzLklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tOYW1lID0gbmV3IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgICB0aGlzLmR5bmFtaWNUYXNrTmFtZS5OYW1lID0gXCJkeW5hbWljVGFza05hbWVcIjtcclxuICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tOYW1lLkFyYWJpY0xhYmVsS2V5ID0gXCJUYXNrTmFtZUluQXJhYmljXCI7XHJcbiAgICAgICAgICB0aGlzLmR5bmFtaWNUYXNrTmFtZS5FbmdsaXNoTGFiZWxLZXkgPSBcIlRhc2tOYW1lSW5FbmdsaXNoXCI7XHJcblxyXG4gICAgICAgICAgdGhpcy5keW5hbWljVGFza0Rlc2NyaXB0aW9uID0gbmV3IE11bHRpTGluZ3VhbFRleHRBcmVhT3B0aW9ucygpO1xyXG4gICAgICAgICAgdGhpcy5keW5hbWljVGFza0Rlc2NyaXB0aW9uLk5hbWUgPSBcImR5bmFtaWNUYXNrRGVzY3JpcHRpb25cIjtcclxuICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tEZXNjcmlwdGlvbi5BcmFiaWNMYWJlbEtleSA9IFwiVGFza0Rlc2NyaXB0aW9uSW5BcmFiaWNcIjtcclxuICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tEZXNjcmlwdGlvbi5FbmdsaXNoTGFiZWxLZXkgPSBcIlRhc2tEZXNjcmlwdGlvbkluRW5nbGlzaFwiO1xyXG5cclxuICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tVUkwgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tVUkwuTmFtZSA9IFwiZHluYW1pY1Rhc2tVUkxcIjtcclxuICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tVUkwuTGFiZWxLZXkgPSBcIlRhc2tVUkxcIjtcclxuICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tVUkwuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG5cclxuICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tUeXBlID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgICAgdGhpcy5keW5hbWljVGFza1R5cGUuTmFtZSA9IFwiZHluYW1pY1Rhc2tUeXBlXCJcclxuICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tUeXBlLkxhYmVsS2V5ID0gXCJUYXNrVHlwZVwiXHJcbiAgICAgICAgICB0aGlzLmR5bmFtaWNUYXNrVHlwZS5EYXRhU291cmNlID0gdGhpcy50YXNrVHlwZUxpc3RcclxuICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tUeXBlLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmR5bmFtaWNUYXNrVHlwZS5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmR5bmFtaWNUYXNrVHlwZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICB0aGlzLmR5bmFtaWNDYW5Db21wbGV0ZSA9IG5ldyBUb2dnbGVTbGlkZU9wdGlvbnMoKTtcclxuICAgICAgICAgIHRoaXMuZHluYW1pY0NhbkNvbXBsZXRlLk5hbWUgPSBcImR5bmFtaWNDYW5Db21wbGV0ZVwiO1xyXG4gICAgICAgICAgdGhpcy5keW5hbWljQ2FuQ29tcGxldGUuTGFiZWxLZXkgPSBcIkNhbkNvbXBsZXRlRnJvbVRNRVwiO1xyXG4gICAgICAgICAgdGhpcy5keW5hbWljQ2FuQ29tcGxldGUuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0Lkhvcml6b250YWw7XHJcbiAgICAgICAgICB0aGlzLmR5bmFtaWNDYW5Db21wbGV0ZS5WYWx1ZSA9IG1vZGVsLmNhbkNvbXBsZXRlRnJvbVRNRTtcclxuXHJcbiAgICAgICAgICBsZXQgb3V0Y29tZXNSZXN1bHQ6IGFueSA9IHRoaXMuZ2V0QWN0aXZpdHlPdXRjb21lc09wdGlvbnMobW9kZWwub3V0Y29tZXMsZmFsc2UpO1xyXG4gICAgICAgICAgdGhpcy5vdXRjb21lc09wdGlvbnMgPSBvdXRjb21lc1Jlc3VsdFswXTtcclxuICAgICAgICAgIHRoaXMub3V0Y29tZXNDb3VudCA9IG91dGNvbWVzUmVzdWx0WzFdO1xyXG5cclxuICAgICAgICAgIHRoaXMuc2hvd0R5bmFtaWNDb250cm9scyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnNob3dQYXJ0aWNpcGFudENvbnRhaW5lciA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnNob3dPdXRjb21lc0NvbnRhaW5lciA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFdGQWN0aXZpdHlUeXBlLkVtYWlsOlxyXG4gICAgICAgIGNhc2UgV0ZBY3Rpdml0eVR5cGUuU2xlZXA6XHJcblxyXG4gICAgICAgICAgbGV0IG5hbWUgPSBuZXcgRW5nbGlzaEFyYWJpY0RUTygpO1xyXG4gICAgICAgICAgbmFtZS5BcmFiaWMgPSBtb2RlbC5ub3JtYWxPdXRjb21lTmFtZS5hcmFiaWM7XHJcbiAgICAgICAgICBuYW1lLkVuZ2xpc2ggPSBtb2RlbC5ub3JtYWxPdXRjb21lTmFtZS5lbmdsaXNoO1xyXG5cclxuICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZU5hbWUgPSBuZXcgTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZU5hbWUuTmFtZSA9IFwic3RhdGljT3V0Y29tZU5hbWVcIjtcclxuICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZU5hbWUuQXJhYmljTGFiZWxLZXkgPSBcIk91dGNvbWVOYW1lSW5BcmFiaWNcIjtcclxuICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZU5hbWUuRW5nbGlzaExhYmVsS2V5ID0gXCJPdXRjb21lTmFtZUluRW5nbGlzaFwiO1xyXG4gICAgICAgICAgdGhpcy5zdGF0aWNPdXRjb21lTmFtZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZU5hbWUuVmFsdWUgPSBuYW1lO1xyXG5cclxuICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZVN5c05hbWUgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZVN5c05hbWUuTmFtZSA9IFwic3RhdGljT3V0Y29tZVN5c05hbWVcIjtcclxuICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZVN5c05hbWUuTGFiZWxLZXkgPSBcIkRlY2lzaW9uU3lzTmFtZVwiO1xyXG4gICAgICAgICAgdGhpcy5zdGF0aWNPdXRjb21lU3lzTmFtZS5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgICAgICB0aGlzLnN0YXRpY091dGNvbWVTeXNOYW1lLklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZU5leHRBY3Rpdml0eSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZU5leHRBY3Rpdml0eS5OYW1lID0gXCJzdGF0aWNPdXRjb21lTmV4dEFjdGl2aXR5XCJcclxuICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZU5leHRBY3Rpdml0eS5MYWJlbEtleSA9IFwiTmV4dEFjdGl2aXR5XCJcclxuICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZU5leHRBY3Rpdml0eS5EYXRhU291cmNlID0gdGhpcy5uZXh0QWN0aXZpdHlMaXN0XHJcbiAgICAgICAgICB0aGlzLnN0YXRpY091dGNvbWVOZXh0QWN0aXZpdHkuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZU5leHRBY3Rpdml0eS5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnN0YXRpY091dGNvbWVOZXh0QWN0aXZpdHkuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgdGhpcy5zdGF0aWNPdXRjb21lQ2FuQWRkQ29tbWVudCA9IG5ldyBUb2dnbGVTbGlkZU9wdGlvbnMoKTtcclxuICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZUNhbkFkZENvbW1lbnQuTmFtZSA9IFwic3RhdGljT3V0Y29tZUNhbkFkZENvbW1lbnRcIjtcclxuICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZUNhbkFkZENvbW1lbnQuTGFiZWxLZXkgPSBcIkNhbkFkZENvbW1lbnRcIjtcclxuICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZUNhbkFkZENvbW1lbnQuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0Lkhvcml6b250YWw7XHJcbiAgICAgICAgICB0aGlzLnN0YXRpY091dGNvbWVDYW5BZGRDb21tZW50LlZhbHVlID0gbW9kZWwuY2FuQWRkQ29tbWVudDtcclxuXHJcbiAgICAgICAgICB0aGlzLnNob3dTdGF0aWNDb250cm9scyA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFdGQWN0aXZpdHlUeXBlLkNvbmRpdGlvbjpcclxuICAgICAgICAgIHRoaXMuY29uZGl0aW9uTEhTV0ZWYXJpYWJsZUxpc3QgPSBsaXN0LndmVmFyaWFibGVzO1xyXG4gICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNXRlZhcmlhYmxlTGlzdCA9IGxpc3Qud2ZWYXJpYWJsZXM7XHJcbiAgICAgICAgICB0aGlzLmNvbmRpdGlvblJIU1R5cGVMaXN0ID0gbGlzdC5yaHNUeXBlcztcclxuICAgICAgICAgIHRoaXMuY29uZGl0aW9uTGlzdCA9IGxpc3QuY29uZGl0aW9ucztcclxuXHJcbiAgICAgICAgICB0aGlzLmNvbmRpdGlvbkxIU0Ryb3BEb3duID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgICAgdGhpcy5jb25kaXRpb25MSFNEcm9wRG93bi5OYW1lID0gXCJjb25kaXRpb25MSFNEcm9wRG93blwiXHJcbiAgICAgICAgICB0aGlzLmNvbmRpdGlvbkxIU0Ryb3BEb3duLkhpZGVMYWJlbCA9IHRydWVcclxuICAgICAgICAgIHRoaXMuY29uZGl0aW9uTEhTRHJvcERvd24uUGxhY2Vob2xkZXIgPSBcIldvcmtmbG93VmFyaWFibGVzXCJcclxuICAgICAgICAgIHRoaXMuY29uZGl0aW9uTEhTRHJvcERvd24uRGF0YVNvdXJjZSA9IHRoaXMuY29uZGl0aW9uTEhTV0ZWYXJpYWJsZUxpc3RcclxuICAgICAgICAgIHRoaXMuY29uZGl0aW9uTEhTRHJvcERvd24uU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuY29uZGl0aW9uTEhTRHJvcERvd24uQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5jb25kaXRpb25MSFNEcm9wRG93bi5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICB0aGlzLmNvbmRpdGlvbnNEcm9wRG93biA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgIHRoaXMuY29uZGl0aW9uc0Ryb3BEb3duLk5hbWUgPSBcImNvbmRpdGlvbnNEcm9wRG93blwiXHJcbiAgICAgICAgICB0aGlzLmNvbmRpdGlvbnNEcm9wRG93bi5IaWRlTGFiZWwgPSB0cnVlXHJcbiAgICAgICAgICB0aGlzLmNvbmRpdGlvbnNEcm9wRG93bi5QbGFjZWhvbGRlciA9IFwiQ29uZGl0aW9uXCJcclxuICAgICAgICAgIHRoaXMuY29uZGl0aW9uc0Ryb3BEb3duLkRhdGFTb3VyY2UgPSB0aGlzLmNvbmRpdGlvbkxpc3RcclxuICAgICAgICAgIHRoaXMuY29uZGl0aW9uc0Ryb3BEb3duLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmNvbmRpdGlvbnNEcm9wRG93bi5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICBsZXQgc2VsZWN0ZWRSSFNUeXBlID0gdGhpcy5jb25kaXRpb25SSFNUeXBlTGlzdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIGl0ZW0ua2V5ID09IENvbmRpdGlvblJIU1R5cGUuVmFyaWFibGU7IH0pLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpWzBdO1xyXG4gICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNUeXBlRHJvcERvd24gPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICB0aGlzLmNvbmRpdGlvblJIU1R5cGVEcm9wRG93bi5OYW1lID0gXCJjb25kaXRpb25SSFNUeXBlRHJvcERvd25cIlxyXG4gICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNUeXBlRHJvcERvd24uSGlkZUxhYmVsID0gdHJ1ZVxyXG4gICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNUeXBlRHJvcERvd24uRGF0YVNvdXJjZSA9IHRoaXMuY29uZGl0aW9uUkhTVHlwZUxpc3RcclxuICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTVHlwZURyb3BEb3duLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmNvbmRpdGlvblJIU1R5cGVEcm9wRG93bi5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTVHlwZURyb3BEb3duLlNlbGVjdGVkSXRlbXMgPSBzZWxlY3RlZFJIU1R5cGU7XHJcblxyXG4gICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNEcm9wRG93biA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTRHJvcERvd24uTmFtZSA9IFwiY29uZGl0aW9uUkhTRHJvcERvd25cIlxyXG4gICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNEcm9wRG93bi5IaWRlTGFiZWwgPSB0cnVlXHJcbiAgICAgICAgICB0aGlzLmNvbmRpdGlvblJIU0Ryb3BEb3duLlBsYWNlaG9sZGVyID0gXCJXb3JrZmxvd1ZhcmlhYmxlc1wiXHJcbiAgICAgICAgICB0aGlzLmNvbmRpdGlvblJIU0Ryb3BEb3duLkRhdGFTb3VyY2UgPSB0aGlzLmNvbmRpdGlvblJIU1dGVmFyaWFibGVMaXN0XHJcbiAgICAgICAgICB0aGlzLmNvbmRpdGlvblJIU0Ryb3BEb3duLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmNvbmRpdGlvblJIU0Ryb3BEb3duLklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgIGxldCBjb25kaXRpb25PdXRjb21lc1Jlc3VsdDogYW55ID0gdGhpcy5nZXRBY3Rpdml0eU91dGNvbWVzT3B0aW9ucyhtb2RlbC5vdXRjb21lcywgZmFsc2UpO1xyXG4gICAgICAgICAgdGhpcy5vdXRjb21lc09wdGlvbnMgPSBjb25kaXRpb25PdXRjb21lc1Jlc3VsdFswXTtcclxuICAgICAgICAgIHRoaXMub3V0Y29tZXNDb3VudCA9IGNvbmRpdGlvbk91dGNvbWVzUmVzdWx0WzFdO1xyXG5cclxuICAgICAgICAgIHRoaXMuc2hvd0NvbmRpdGlvbkNvbnRyb2xzID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuc2hvd0NvbmRpdGlvblJIU1dGVmFyaWFibGUgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5zaG93T3V0Y29tZXNDb250YWluZXIgPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jYW5BZGRPdXRjb21lID0gdGhpcy5zaG93T3V0Y29tZXNDb250YWluZXIgPyBtb2RlbC5jYW5BZGRPdXRjb21lIDogZmFsc2U7XHJcblxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuICBjb25kaXRpb25SSFNUeXBlT25DaGFuZ2UodHlwZSkge1xyXG4gICAgaWYgKHR5cGUgPT0gQ29uZGl0aW9uUkhTVHlwZS5WYXJpYWJsZSkge1xyXG4gICAgICB0aGlzLmVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybS5yZW1vdmVDb250cm9sKFwiY29uZGl0aW9uUkhTVmFsdWVcIilcclxuXHJcbiAgICAgIHRoaXMuY29uZGl0aW9uUkhTRHJvcERvd24gPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuY29uZGl0aW9uUkhTRHJvcERvd24uTmFtZSA9IFwiY29uZGl0aW9uUkhTRHJvcERvd25cIlxyXG4gICAgICB0aGlzLmNvbmRpdGlvblJIU0Ryb3BEb3duLkhpZGVMYWJlbCA9IHRydWVcclxuICAgICAgdGhpcy5jb25kaXRpb25SSFNEcm9wRG93bi5QbGFjZWhvbGRlciA9IFwiV29ya2Zsb3dWYXJpYWJsZXNcIlxyXG4gICAgICB0aGlzLmNvbmRpdGlvblJIU0Ryb3BEb3duLkRhdGFTb3VyY2UgPSB0aGlzLmNvbmRpdGlvblJIU1dGVmFyaWFibGVMaXN0XHJcbiAgICAgIHRoaXMuY29uZGl0aW9uUkhTRHJvcERvd24uU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jb25kaXRpb25SSFNEcm9wRG93bi5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuc2hvd0NvbmRpdGlvblJIU1dGVmFyaWFibGUgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtLnJlbW92ZUNvbnRyb2woXCJjb25kaXRpb25SSFNEcm9wRG93blwiKVxyXG5cclxuICAgICAgdGhpcy5jb25kaXRpb25SSFNWYWx1ZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLmNvbmRpdGlvblJIU1ZhbHVlLk5hbWUgPSBcImNvbmRpdGlvblJIU1ZhbHVlXCI7XHJcbiAgICAgIHRoaXMuY29uZGl0aW9uUkhTVmFsdWUuSGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jb25kaXRpb25SSFNWYWx1ZS5QbGFjZWhvbGRlciA9IFwiVmFsdWVcIjtcclxuICAgICAgdGhpcy5jb25kaXRpb25SSFNWYWx1ZS5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgIHRoaXMuY29uZGl0aW9uUkhTVmFsdWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLnNob3dDb25kaXRpb25SSFNXRlZhcmlhYmxlID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuICBwYXJ0aWNpcGFudFR5cGVPbkNoYW5nZShwYXJ0aWNpcGFudFR5cGUpIHtcclxuICAgIGlmIChwYXJ0aWNpcGFudFR5cGUgPT0gUGFydGljaXBhbnRUeXBlLlBlcm1pc3Npb25TZXQpIHtcclxuICAgICAgdGhpcy5wYXJ0aWNpcGFudFBlcm1pc3Npb25TZXQgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMucGFydGljaXBhbnRQZXJtaXNzaW9uU2V0Lk5hbWUgPSBcInBhcnRpY2lwYW50UGVybWlzc2lvblNldFwiXHJcbiAgICAgIHRoaXMucGFydGljaXBhbnRQZXJtaXNzaW9uU2V0LkxhYmVsS2V5ID0gXCJQZXJtaXNzaW9uU2V0XCJcclxuICAgICAgdGhpcy5wYXJ0aWNpcGFudFBlcm1pc3Npb25TZXQuRGF0YVNvdXJjZSA9IHRoaXMucGFydGljaXBhbnREYXRhTGlzdFxyXG4gICAgICB0aGlzLnBhcnRpY2lwYW50UGVybWlzc2lvblNldC5TaW5nbGVTZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5wYXJ0aWNpcGFudFBlcm1pc3Npb25TZXQuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG5cclxuICAgICAgdGhpcy5zaG93UGFydGljaXBhbnRQZXJtc3Npb25TZXQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtLnJlbW92ZUNvbnRyb2woXCJwYXJ0aWNpcGFudFBlcm1pc3Npb25TZXRcIik7XHJcbiAgICAgIHRoaXMuc2hvd1BhcnRpY2lwYW50UGVybXNzaW9uU2V0ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG5cclxuICB9XHJcblxyXG4gIC8vUmVzZXQgdHlwZVxyXG4gIHJlc2V0QWxsQWN0aXZpdHlUeXBlQ29udHJvbHMoKSB7XHJcbiAgICB0aGlzLmVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybS5yZW1vdmVDb250cm9sKFwicGFydGljaXBhbnRUeXBlc1wiKTtcclxuICAgIHRoaXMuZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtLnJlbW92ZUNvbnRyb2woXCJwYXJ0aWNpcGFudFBlcm1pc3Npb25TZXRcIik7XHJcbiAgICB0aGlzLmVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybS5yZW1vdmVDb250cm9sKFwicGFydGljaXBhbnRQZXJtaXNzaW9uU2V0XCIpO1xyXG4gICAgdGhpcy5lZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm0ucmVtb3ZlQ29udHJvbChcImR5bmFtaWNUYXNrTmFtZVwiKTtcclxuICAgIHRoaXMuZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtLnJlbW92ZUNvbnRyb2woXCJkeW5hbWljVGFza0Rlc2NyaXB0aW9uXCIpO1xyXG4gICAgdGhpcy5lZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm0ucmVtb3ZlQ29udHJvbChcImR5bmFtaWNUYXNrVVJMXCIpO1xyXG4gICAgdGhpcy5lZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm0ucmVtb3ZlQ29udHJvbChcImR5bmFtaWNUYXNrVHlwZVwiKTtcclxuICAgIHRoaXMuZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtLnJlbW92ZUNvbnRyb2woXCJkeW5hbWljQ2FuQ29tcGxldGVcIik7XHJcblxyXG4gICAgdGhpcy5lZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm0ucmVtb3ZlQ29udHJvbChcInN0YXRpY091dGNvbWVOYW1lXCIpO1xyXG4gICAgdGhpcy5lZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm0ucmVtb3ZlQ29udHJvbChcInN0YXRpY091dGNvbWVTeXNOYW1lXCIpO1xyXG4gICAgdGhpcy5lZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm0ucmVtb3ZlQ29udHJvbChcInN0YXRpY091dGNvbWVOZXh0QWN0aXZpdHlcIik7XHJcbiAgICB0aGlzLmVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybS5yZW1vdmVDb250cm9sKFwic3RhdGljT3V0Y29tZUNhbkFkZENvbW1lbnRcIik7XHJcblxyXG4gICAgdGhpcy5lZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm0ucmVtb3ZlQ29udHJvbChcImNvbmRpdGlvbkxIU0Ryb3BEb3duXCIpO1xyXG4gICAgdGhpcy5lZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm0ucmVtb3ZlQ29udHJvbChcImNvbmRpdGlvbnNEcm9wRG93blwiKTtcclxuICAgIHRoaXMuZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtLnJlbW92ZUNvbnRyb2woXCJjb25kaXRpb25SSFNUeXBlRHJvcERvd25cIik7XHJcbiAgICB0aGlzLmVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybS5yZW1vdmVDb250cm9sKFwiY29uZGl0aW9uUkhTRHJvcERvd25cIik7XHJcbiAgICB0aGlzLmVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybS5yZW1vdmVDb250cm9sKFwiY29uZGl0aW9uUkhTVmFsdWVcIik7XHJcblxyXG4gICAgLy9SZW1vdmUgb3V0Y29tZXMgY29udHJvbHNcclxuICAgIGxldCBSZXN1bHRNb2RlbCA9IHRoaXMuZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtLnZhbHVlO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm91dGNvbWVzQ291bnQ7IGkrKykge1xyXG4gICAgICBsZXQgb3V0Y29tZUlEID0gUmVzdWx0TW9kZWxbXCJvdXRjb21lSURcIiArIGldO1xyXG4gICAgICBpZiAob3V0Y29tZUlEID09IHVuZGVmaW5lZClcclxuICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgIHRoaXMuZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtLnJlbW92ZUNvbnRyb2woXCJvdXRjb21lSURcIiArIGkpO1xyXG4gICAgICB0aGlzLmVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybS5yZW1vdmVDb250cm9sKFwib3V0Y29tZU5hbWVcIiArIGkpO1xyXG4gICAgICB0aGlzLmVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybS5yZW1vdmVDb250cm9sKFwib3V0Y29tZURlY2lzaW9uU3lzTmFtZVwiICsgaSk7XHJcbiAgICAgIHRoaXMuZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtLnJlbW92ZUNvbnRyb2woXCJvdXRjb21lSGlkZGVuZVN5c05hbWVcIiArIGkpO1xyXG4gICAgICB0aGlzLmVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybS5yZW1vdmVDb250cm9sKFwib3V0Y29tZU5leHRBY3Rpdml0eVR5cGVzXCIgKyBpKTtcclxuICAgICAgdGhpcy5lZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm0ucmVtb3ZlQ29udHJvbChcIm91dGNvbWVDYW5BZGRDb21tZW50XCIgKyBpKTtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL0NhbmNlbFxyXG4gIGNhbmNlbEVkaXQoKSB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9BZG1pbi9Xb3JrZmxvd3Mvd29ya2Zsb3cvJ10pO1xyXG4gIH1cclxuXHJcbiAgLy9PbiBkZXN0cm95XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlcXVlc3RIYW5kbGVyU2VydmljZS5kZXN0cm95SGFuZGxlcigpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XHJcbiAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1jdXN0b20taFwiICpuZ0lmPVwiaXNFZGl0Rm9ybUxvYWRlZFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zXCI+XHJcbiAgICAgIDxCQlNGLUZvcm0gW29wdGlvbnNdPVwiZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtT3B0aW9uc1wiPlxyXG4gICAgICAgIDwhLS1TdGFydCBzaGFyZWQgY29udHJvbHMgY29udGFpbmVyLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94IFtvcHRpb25zXT1cIm5hbWVcIiBbZ3JvdXBdPVwiZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtXCI+PC9CQlNGLU11bHRpTGluZ3VhbFRleHRCb3g+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cIiFpc1B1Ymxpc2hlZFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cInN5c05hbWVcIiBbZ3JvdXBdPVwiZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cInNob3dBY3Rpdml0eVR5cGVcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cImFjdGl2aXR5VHlwZVwiIFtncm91cF09XCJlZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm1cIiAoT25DaGFuZ2UpPVwiYWN0aXZpdHlUeXBlT25DaGFuZ2UoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLUVuZCBzaGFyZWQgY29udHJvbHMgY29udGFpbmVyLS0+XHJcbiAgICAgICAgPCEtLVN0YXJ0IHBhcnRpY2lwYW50IGNvbnRhaW5lci0tPlxyXG4gICAgICAgIDxkaXYgaWQ9XCJwYXJ0aWNpcGFudENvbnRhaW5lclwiICpuZ0lmPVwic2hvd1BhcnRpY2lwYW50Q29udGFpbmVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwicGFydGljaXBhbnRUeXBlc1wiIFtncm91cF09XCJlZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm1cIiAoT25DaGFuZ2UpPVwicGFydGljaXBhbnRUeXBlT25DaGFuZ2UoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dQYXJ0aWNpcGFudFBlcm1zc2lvblNldFwiIGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwicGFydGljaXBhbnRQZXJtaXNzaW9uU2V0XCIgW2dyb3VwXT1cImVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLUVuZCBwYXJ0aWNpcGFudCBjb250YWluZXItLT5cclxuICAgICAgICA8IS0tU3RhcnQgc3RhdGljIGNvbnRyb2xzLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dTdGF0aWNDb250cm9sc1wiIGlkPVwic3RhdGljQ29udGFpbmVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94IFtvcHRpb25zXT1cInN0YXRpY091dGNvbWVOYW1lXCIgW2dyb3VwXT1cImVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiPjwvQkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwic3RhdGljT3V0Y29tZVN5c05hbWVcIiBbZ3JvdXBdPVwiZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cInN0YXRpY091dGNvbWVOZXh0QWN0aXZpdHlcIiBbZ3JvdXBdPVwiZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICA8QkJTRi1Ub2dnbGVzbGlkZSBbb3B0aW9uc109XCJzdGF0aWNPdXRjb21lQ2FuQWRkQ29tbWVudFwiIFtncm91cF09XCJlZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm1cIj5cclxuICAgICAgICAgICAgICA8L0JCU0YtVG9nZ2xlc2xpZGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLUVuZCBzdGF0aWMgY29udHJvbHMtLT5cclxuICAgICAgICA8IS0tU3RhcnQgZHluYW1pYyBjb250cm9scy0tPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93RHluYW1pY0NvbnRyb2xzXCIgaWQ9XCJkeW5hbWljQ29udGFpbmVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94IFtvcHRpb25zXT1cImR5bmFtaWNUYXNrTmFtZVwiIFtncm91cF09XCJlZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm1cIj48L0JCU0YtTXVsdGlMaW5ndWFsVGV4dEJveD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0QXJlYSBbb3B0aW9uc109XCJkeW5hbWljVGFza0Rlc2NyaXB0aW9uXCIgW2dyb3VwXT1cImVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiPjwvQkJTRi1NdWx0aUxpbmd1YWxUZXh0QXJlYT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cImR5bmFtaWNUYXNrVVJMXCIgW2dyb3VwXT1cImVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJkeW5hbWljVGFza1R5cGVcIiBbZ3JvdXBdPVwiZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICA8QkJTRi1Ub2dnbGVzbGlkZSBbb3B0aW9uc109XCJkeW5hbWljQ2FuQ29tcGxldGVcIiBbZ3JvdXBdPVwiZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgPC9CQlNGLVRvZ2dsZXNsaWRlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS1FbmQgZHluYW1pYyBjb250cm9scy0tPlxyXG4gICAgICAgIDwhLS1TdGFydCBjb25kaXRpb24gY29udHJvbHMtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0NvbmRpdGlvbkNvbnRyb2xzXCIgaWQ9XCJjb25kaXRpb25Db250YWluZXJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGFsaWduLW1pZGRsZSB0YWJsZS1yb3ctZGFzaGVkIGZzLTYgZ3ktNSBkYXRhVGFibGUgbm8tZm9vdGVyIHRhYmxlLXctY29udHJvbFwiPlxyXG4gICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcbiAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTGVmdEhhbmRTaWRlXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNvbmRpdGlvblwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJSaWdodEhhbmRTaWRlVHlwZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJSaWdodEhhbmRTaWRlXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cImNvbmRpdGlvbkxIU0Ryb3BEb3duXCIgW2dyb3VwXT1cImVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiY29uZGl0aW9uc0Ryb3BEb3duXCIgW2dyb3VwXT1cImVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiY29uZGl0aW9uUkhTVHlwZURyb3BEb3duXCIgW2dyb3VwXT1cImVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiIChPbkNoYW5nZSk9XCJjb25kaXRpb25SSFNUeXBlT25DaGFuZ2UoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInNob3dDb25kaXRpb25SSFNXRlZhcmlhYmxlOyBlbHNlIGNvbmRpdGlvblR4dFZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cImNvbmRpdGlvblJIU0Ryb3BEb3duXCIgW2dyb3VwXT1cImVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY29uZGl0aW9uVHh0VmFsdWU+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJjb25kaXRpb25SSFNWYWx1ZVwiIFtncm91cF09XCJlZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tRW5kIGNvbmRpdGlvbiBjb250cm9scy0tPlxyXG4gICAgICAgIDwhLS1TdGFydCBvdXRjb21lcyBjb250YWluZXItLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd091dGNvbWVzQ29udGFpbmVyXCIgaWQ9XCJvdXRjb21lc0NvbnRhaW5lclwiIGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgICAgICA8IS0tIGJlZ2luOjpUYWJsZSAtLT5cclxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXIgdGFibGUtdy1jb250cm9sXCI+XHJcbiAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwidGV4dC1zdGFydCB0ZXh0LWdyYXktNDAwIGZ3LWJvbGRlciBmcy03IHRleHQtdXBwZXJjYXNlIGdzLTBcIj5cclxuICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZWNpc2lvblwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj48L3RoPlxyXG4gICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCIhaXNQdWJsaXNoZWRcIiBjbGFzcz1cIm1pbi13LTE1MHB4XCI+PC90aD5cclxuICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwiIWlzUHVibGlzaGVkXCIgY2xhc3M9XCJtaW4tdy0xNTBweFwiPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cIiFpc1B1Ymxpc2hlZFwiIGNsYXNzPVwibWluLXctMTUwcHhcIj48L3RoPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiICpuZ0lmPVwiaXNQdWJsaXNoZWQ7ZWxzZSBub3RQdWJsaXNoZWRPdXRjb21lc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8dHIgICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygb3V0Y29tZXNPcHRpb25zO2xldCBpPWluZGV4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS1JRC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbaGlkZGVuXT1cInRydWVcIiBbb3B0aW9uc109XCJvcHRpb25bMF1cIiBbZ3JvdXBdPVwiZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS1OYW1lLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94IFtvcHRpb25zXT1cIm9wdGlvblsxXVwiIFtncm91cF09XCJlZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLU5leHRBY3Rpdml0eS0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIm9wdGlvblsyXVwiIFtncm91cF09XCJlZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICA8L3Rib2R5PlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm90UHVibGlzaGVkT3V0Y29tZXM+XHJcbiAgICAgICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG91dGNvbWVzT3B0aW9ucztsZXQgaT1pbmRleDtcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1JRC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtoaWRkZW5dPVwidHJ1ZVwiIFtvcHRpb25zXT1cIm9wdGlvblswXVwiIFtncm91cF09XCJlZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1OYW1lLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLU11bHRpTGluZ3VhbFRleHRCb3ggW29wdGlvbnNdPVwib3B0aW9uWzFdXCIgW2dyb3VwXT1cImVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtTXVsdGlMaW5ndWFsVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TeXNOYW1lLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwib3B0aW9uWzJdXCIgW2dyb3VwXT1cImVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLWhpZGRlbiBTeXNOYW1lLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW2hpZGRlbl09XCJ0cnVlXCIgW29wdGlvbnNdPVwib3B0aW9uWzZdXCIgW2dyb3VwXT1cImVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLWNhbiBlZGl0IFN5c05hbWUtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtQ2hlY2tCb3ggW2hpZGRlbl09XCJ0cnVlXCIgW29wdGlvbnNdPVwib3B0aW9uWzddXCIgW2dyb3VwXT1cImVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtQ2hlY2tCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tTmV4dEFjdGl2aXR5LS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJvcHRpb25bM11cIiBbZ3JvdXBdPVwiZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tQ2FuQWRkQ29tbWVudC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1DaGVja0JveCBbb3B0aW9uc109XCJvcHRpb25bNF1cIiBbZ3JvdXBdPVwiZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1DaGVja0JveD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0taWYgb3V0Y29tZSBDYW4gRWRpdC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSAqbmdJZj1cIm9wdGlvbls1XVwiIGNsYXNzPVwiYnRuIGJ0bi1pY29uIGJ0bi1saWdodC1kYW5nZXIgYnRuLXNtXCIgKGNsaWNrKT1cImRlbGV0ZU91dGNvbWUob3B0aW9uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiIGZhIGZhLXRyYXNoIGhpZGRlblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ciAqbmdJZj1cImNhbkFkZE91dGNvbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInctMTAwIGJ0biBidG4tc3VjY2Vzc1wiIChjbGljayk9XCJhZGRXRkFjdGl2aXR5T3V0Y29tZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWRkTmV3UmVjb3JkXCIpfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tRW5kIG91dGNvbWVzIGNvbnRhaW5lci0tPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCIgKGNsaWNrKT1cImNhbmNlbEVkaXQoKVwiPlxyXG4gICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDYW5jZWxMYWJlbFwiKX19XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNhdmVMYWJlbFwiKX19PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvQkJTRi1Gb3JtPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG48L2Rpdj5cclxuIl19
|