@bnsights/bbsf-admin-portal 1.1.4 → 1.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/README.md +6 -2
  2. package/bnsights-bbsf-admin-portal-1.1.6.tgz +0 -0
  3. package/esm2022/lib/Pages/ActiveDirectories/active-directories.component.mjs +1 -1
  4. package/esm2022/lib/Pages/ActiveDirectories/active-directory/active-directory.component.mjs +146 -146
  5. package/esm2022/lib/Pages/ActiveDirectories/active-directory-add/active-directory-add.component.mjs +152 -152
  6. package/esm2022/lib/Pages/_layout/components/aside/aside-menu/aside-menu.component.mjs +1 -1
  7. package/esm2022/lib/Pages/_layout/components/aside/aside.component.mjs +1 -1
  8. package/esm2022/lib/Pages/anonymouslayout/activation/activation.component.mjs +15 -15
  9. package/esm2022/lib/Pages/anonymouslayout/anonymouslayout-routing.module.mjs +1 -1
  10. package/esm2022/lib/Pages/anonymouslayout/anonymouslayout.component.mjs +1 -1
  11. package/esm2022/lib/Pages/anonymouslayout/error/error.component.mjs +7 -7
  12. package/esm2022/lib/Pages/anonymouslayout/forgot-password/forgot-password.component.mjs +12 -12
  13. package/esm2022/lib/Pages/anonymouslayout/login/login.component.mjs +19 -19
  14. package/esm2022/lib/Pages/anonymouslayout/rest-password/rest-password.component.mjs +15 -15
  15. package/esm2022/lib/Pages/anonymouslayout/upload-license/upload-license.component.mjs +12 -12
  16. package/esm2022/lib/Pages/configurations/auth-configuration/auth-configuration-edit/auth-configuration-edit.component.mjs +102 -102
  17. package/esm2022/lib/Pages/configurations/auth-configuration/auth-configuration.component.mjs +7 -7
  18. package/esm2022/lib/Pages/configurations/configuration/configuration.component.mjs +271 -271
  19. package/esm2022/lib/Pages/core/auth.module.mjs +1 -1
  20. package/esm2022/lib/Pages/core/authentication/admin.guard.mjs +1 -1
  21. package/esm2022/lib/Pages/core/authentication/auth.guard.mjs +3 -3
  22. package/esm2022/lib/Pages/departments/department/department.component.mjs +48 -48
  23. package/esm2022/lib/Pages/departments/department-info/department-info.component.mjs +32 -32
  24. package/esm2022/lib/Pages/documents/add-document/add-document.component.mjs +52 -52
  25. package/esm2022/lib/Pages/documents/document-master-layouts/document-master-layouts.component.mjs +20 -20
  26. package/esm2022/lib/Pages/documents/document-template-info/document-template-info.component.mjs +100 -100
  27. package/esm2022/lib/Pages/documents/document-templates/document-templates.component.mjs +151 -151
  28. package/esm2022/lib/Pages/documents/edit-document/edit-document.component.mjs +72 -72
  29. package/esm2022/lib/Pages/documents/edit-document-template/edit-document-template.component.mjs +27 -27
  30. package/esm2022/lib/Pages/empty-data/empty-data.component.mjs +1 -1
  31. package/esm2022/lib/Pages/empty-data/empty-data.module.mjs +1 -1
  32. package/esm2022/lib/Pages/helpCenter/help-center/help-center.component.mjs +84 -84
  33. package/esm2022/lib/Pages/helpCenter/help-center-preview/help-center-preview.component.mjs +1 -1
  34. package/esm2022/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.mjs +56 -56
  35. package/esm2022/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.mjs +58 -58
  36. package/esm2022/lib/Pages/home/home.component.mjs +7 -7
  37. package/esm2022/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.mjs +129 -129
  38. package/esm2022/lib/Pages/jobs/jobs/jobs.component.mjs +14 -14
  39. package/esm2022/lib/Pages/license/license/license.component.mjs +11 -11
  40. package/esm2022/lib/Pages/localizations/localizations-replace-text/localizations-replace-text.component.mjs +41 -41
  41. package/esm2022/lib/Pages/localizations/localizations.component.mjs +125 -125
  42. package/esm2022/lib/Pages/logs/log/log.component.mjs +11 -11
  43. package/esm2022/lib/Pages/lookups/lookup/lookup.component.mjs +120 -120
  44. package/esm2022/lib/Pages/lookups/lookup-group/lookup-group.component.mjs +34 -34
  45. package/esm2022/lib/Pages/lookups/lookup-item/lookup-item.component.mjs +83 -83
  46. package/esm2022/lib/Pages/notifications/add-notification/add-notification.component.mjs +35 -35
  47. package/esm2022/lib/Pages/notifications/edit-email/edit-email.component.mjs +53 -53
  48. package/esm2022/lib/Pages/notifications/edit-notification/edit-notification.component.mjs +50 -50
  49. package/esm2022/lib/Pages/notifications/edit-sms/edit-sms.component.mjs +16 -16
  50. package/esm2022/lib/Pages/notifications/master-layouts/master-layouts.component.mjs +20 -20
  51. package/esm2022/lib/Pages/notifications/template-info/template-info.component.mjs +135 -135
  52. package/esm2022/lib/Pages/notifications/templates/templates.component.mjs +186 -186
  53. package/esm2022/lib/Pages/providers/provider/provider.component.mjs +122 -122
  54. package/esm2022/lib/Pages/publicHolidays/public-holiday/public-holiday.component.mjs +120 -120
  55. package/esm2022/lib/Pages/roles/permission-set-info/permission-set-info.component.mjs +29 -29
  56. package/esm2022/lib/Pages/roles/permissions/permissions.component.mjs +57 -57
  57. package/esm2022/lib/Pages/roles/permissionsets/permissionsets.component.mjs +79 -79
  58. package/esm2022/lib/Pages/sectors/sector/sector.component.mjs +35 -35
  59. package/esm2022/lib/Pages/sectors/sector-info/sector-info.component.mjs +27 -27
  60. package/esm2022/lib/Pages/sectors/sectors-department-info/sectors-department-info.component.mjs +27 -27
  61. package/esm2022/lib/Pages/shared/Services/AccountService.service.mjs +1 -1
  62. package/esm2022/lib/Pages/shared/Services/ActiveDirectoryService.service.mjs +1 -1
  63. package/esm2022/lib/Pages/shared/Services/AnonymousLayoutService.service.mjs +1 -1
  64. package/esm2022/lib/Pages/shared/Services/DepartmentService.service.mjs +1 -1
  65. package/esm2022/lib/Pages/shared/Services/DocumentHeaderAndFooterTemplate.service.mjs +1 -1
  66. package/esm2022/lib/Pages/shared/Services/DocumentTemplateService.service.mjs +1 -1
  67. package/esm2022/lib/Pages/shared/Services/EmailHeaderAndFooterTemplateService.Service.mjs +1 -1
  68. package/esm2022/lib/Pages/shared/Services/HelpCenterService.service.mjs +1 -1
  69. package/esm2022/lib/Pages/shared/Services/ImpersonationRuleService.service.mjs +1 -1
  70. package/esm2022/lib/Pages/shared/Services/JobsService.service.mjs +1 -1
  71. package/esm2022/lib/Pages/shared/Services/LicenseService.service.mjs +1 -1
  72. package/esm2022/lib/Pages/shared/Services/LogsService.mjs +1 -1
  73. package/esm2022/lib/Pages/shared/Services/LookupGroupsService.service.mjs +1 -1
  74. package/esm2022/lib/Pages/shared/Services/LookupService.service.mjs +1 -1
  75. package/esm2022/lib/Pages/shared/Services/PermissionSetService.service.mjs +1 -1
  76. package/esm2022/lib/Pages/shared/Services/PermissionsService.service.mjs +1 -1
  77. package/esm2022/lib/Pages/shared/Services/PublicHolidayService.service.mjs +1 -1
  78. package/esm2022/lib/Pages/shared/Services/SectorService.service.mjs +1 -1
  79. package/esm2022/lib/Pages/shared/Services/TemplateService.service.mjs +1 -1
  80. package/esm2022/lib/Pages/shared/Services/WorkflowActivityService.service.mjs +1 -1
  81. package/esm2022/lib/Pages/shared/Services/WorkflowService.service.mjs +1 -1
  82. package/esm2022/lib/Pages/shared/Services/WorkflowVariablesService.service.mjs +1 -1
  83. package/esm2022/lib/Pages/shared/Services/localizationsService.service .mjs +1 -1
  84. package/esm2022/lib/Pages/shared/Services/provider.service.mjs +1 -1
  85. package/esm2022/lib/Pages/shared/components/external-url/external-url.component.mjs +36 -36
  86. package/esm2022/lib/Pages/shared/components/survey/add-survey/add-survey.component.mjs +74 -74
  87. package/esm2022/lib/Pages/shared/components/survey/delete-survey/delete-survey.component.mjs +8 -8
  88. package/esm2022/lib/Pages/shared/components/survey/duplicate-survey/duplicate-survey.component.mjs +10 -10
  89. package/esm2022/lib/Pages/shared/components/survey/edit-survey/edit-survey.component.mjs +89 -89
  90. package/esm2022/lib/Pages/shared/components/survey/submissions/delete-submission/delete-submission.component.mjs +7 -7
  91. package/esm2022/lib/Pages/shared/components/survey/submissions/eliminate-submission/eliminate-submission.component.mjs +9 -9
  92. package/esm2022/lib/Pages/shared/components/survey/submissions/uneliminate-submission/uneliminate-submission.component.mjs +10 -10
  93. package/esm2022/lib/Pages/shared/components/survey/survey-info/add-question/add-question.component.mjs +222 -222
  94. package/esm2022/lib/Pages/shared/components/survey/survey-info/delete-question/delete-question.component.mjs +7 -7
  95. package/esm2022/lib/Pages/shared/components/survey/survey-info/edit-question/edit-question.component.mjs +257 -257
  96. package/esm2022/lib/Pages/shared/components/survey/survey-info/preview/preview.component.mjs +25 -25
  97. package/esm2022/lib/Pages/shared/components/survey/survey-info/publish-survey/publish-survey.component.mjs +24 -24
  98. package/esm2022/lib/Pages/shared/components/survey/survey-info/result-question/result.component.mjs +6 -6
  99. package/esm2022/lib/Pages/shared/components/survey/survey-info/survey-info.component.mjs +52 -52
  100. package/esm2022/lib/Pages/shared/components/survey/survey-info/take-survey/take-survey.component.mjs +16 -16
  101. package/esm2022/lib/Pages/shared/components/survey/survey-info/unpublish-survey/unpublish-survey.component.mjs +20 -20
  102. package/esm2022/lib/Pages/shared/components/survey/survey.component.mjs +69 -69
  103. package/esm2022/lib/Pages/shared/components/survey-form/survey-form.component.mjs +180 -180
  104. package/esm2022/lib/Pages/shared/models/SurveyModels/survey-question-option.mjs +3 -3
  105. package/esm2022/lib/Pages/users/users.component.mjs +190 -190
  106. package/esm2022/lib/Pages/workflows/activity/workflow-activity-add/workflow-activity-add.component.mjs +176 -176
  107. package/esm2022/lib/Pages/workflows/activity/workflow-activity-edit/workflow-activity-edit.component.mjs +364 -364
  108. package/esm2022/lib/Pages/workflows/instance-info/instance-info.component.mjs +67 -67
  109. package/esm2022/lib/Pages/workflows/tabs/tabs.component.mjs +227 -227
  110. package/esm2022/lib/Pages/workflows/version-info/version-info.component.mjs +31 -31
  111. package/esm2022/lib/Pages/workflows/workflow/workflow.component.mjs +56 -56
  112. package/fesm2022/bnsights-bbsf-admin-portal.mjs +5187 -5187
  113. package/fesm2022/bnsights-bbsf-admin-portal.mjs.map +1 -1
  114. package/lib/Pages/ActiveDirectories/active-directories.component.d.ts +0 -1
  115. package/lib/Pages/configurations/auth-configuration/auth-configuration-edit/auth-configuration-edit.component.d.ts +2 -2
  116. package/lib/Pages/workflows/tabs/tabs.component.d.ts +1 -1
  117. package/package.json +3 -3
  118. package/esm2022/bnsights-test-test-admin-portal.mjs +0 -5
  119. package/fesm2022/bnsights-test-test-admin-portal.mjs +0 -27181
  120. package/fesm2022/bnsights-test-test-admin-portal.mjs.map +0 -1
@@ -53,81 +53,81 @@ export class SurveyFormComponent {
53
53
  ///TextBox
54
54
  case SurveyOptionType.Text.toLocaleLowerCase():
55
55
  var Text = new TextBoxOptions();
56
- Text.Name = 'q' + element.iD_GUID;
57
- Text.LabelValue = this.utilityService.isCurrentLanguageArabic()
56
+ Text.name = 'q' + element.iD_GUID;
57
+ Text.labelValue = this.utilityService.isCurrentLanguageArabic()
58
58
  ? element.text.arabic + `.${element.questionTypeItemID}`
59
59
  : element.text.english + `.${element.questionTypeItemID}`;
60
- Text.HideLabel = false;
61
- Text.IsRequired = element.isRelatedToSurveyQuestion
60
+ Text.hideLabel = false;
61
+ Text.isRequired = element.isRelatedToSurveyQuestion
62
62
  ? false
63
63
  : element.options.isRequired;
64
- Text.IsReadonly = element.isRelatedToSurveyQuestion;
65
- Text.IsDisabled = this.options.Readonly;
66
- Text.LabelExtraClasses = this.labelClass;
67
- Text.ViewType = ControlLayout.Vertical;
68
- Text.LabelDescription = this.utilityService.isCurrentLanguageArabic()
64
+ Text.isReadonly = element.isRelatedToSurveyQuestion;
65
+ Text.isDisabled = this.options.Readonly;
66
+ Text.labelExtraClasses = this.labelClass;
67
+ Text.viewType = ControlLayout.Vertical;
68
+ Text.labelDescription = this.utilityService.isCurrentLanguageArabic()
69
69
  ? element.options.description.arabic
70
70
  : element.options.description.english;
71
71
  if (element.value.text)
72
- Text.Value = element.value.text;
72
+ Text.value = element.value.text;
73
73
  if (element.options.maxLength)
74
- Text.MaxLength = element.options.maxLength;
74
+ Text.maxLength = element.options.maxLength;
75
75
  if (element.options.minLength)
76
- Text.MinLength = element.options.minLength;
77
- Text.Type = InputType.Text;
76
+ Text.minLength = element.options.minLength;
77
+ Text.type = InputType.Text;
78
78
  if (element.isRelatedToSurveyQuestion)
79
79
  this.checkList.push(Text);
80
80
  this.renderComponentService.renderDynamicComponent(viewContainerRef, SurveyFormItemComponent, this.filedGroup, Text, element.options.size);
81
81
  break;
82
82
  case SurveyOptionType.Email.toLocaleLowerCase():
83
83
  let Email = new TextBoxOptions();
84
- Email.Name = 'q' + element.iD_GUID;
85
- Email.LabelValue = this.utilityService.isCurrentLanguageArabic()
84
+ Email.name = 'q' + element.iD_GUID;
85
+ Email.labelValue = this.utilityService.isCurrentLanguageArabic()
86
86
  ? element.text.arabic + `.${element.questionTypeItemID}`
87
87
  : element.text.english + `.${element.questionTypeItemID}`;
88
- Email.HideLabel = false;
89
- Email.LabelExtraClasses = this.labelClass;
90
- Email.IsRequired = element.isRelatedToSurveyQuestion
88
+ Email.hideLabel = false;
89
+ Email.labelExtraClasses = this.labelClass;
90
+ Email.isRequired = element.isRelatedToSurveyQuestion
91
91
  ? false
92
92
  : element.options.isRequired;
93
- Email.IsReadonly = element.isRelatedToSurveyQuestion;
94
- Email.ViewType = ControlLayout.Vertical;
95
- Email.IsDisabled = this.options.Readonly;
96
- Email.LabelDescription = this.utilityService.isCurrentLanguageArabic()
93
+ Email.isReadonly = element.isRelatedToSurveyQuestion;
94
+ Email.viewType = ControlLayout.Vertical;
95
+ Email.isDisabled = this.options.Readonly;
96
+ Email.labelDescription = this.utilityService.isCurrentLanguageArabic()
97
97
  ? element.options.description.arabic
98
98
  : element.options.description.english;
99
- Email.Type = InputType.Email;
99
+ Email.type = InputType.Email;
100
100
  if (element.value.text)
101
- Email.Value = element.value.text;
101
+ Email.value = element.value.text;
102
102
  if (element.isRelatedToSurveyQuestion)
103
103
  this.checkList.push(Email);
104
104
  this.renderComponentService.renderDynamicComponent(viewContainerRef, SurveyFormItemComponent, this.filedGroup, Email, element.options.size);
105
105
  break;
106
106
  case SurveyOptionType.Number.toLocaleLowerCase():
107
107
  let Number = new TextBoxOptions();
108
- Number.Name = 'q' + element.iD_GUID;
109
- Number.HideLabel = false;
110
- Number.LabelExtraClasses = this.labelClass;
111
- Number.LabelValue = this.utilityService.isCurrentLanguageArabic()
108
+ Number.name = 'q' + element.iD_GUID;
109
+ Number.hideLabel = false;
110
+ Number.labelExtraClasses = this.labelClass;
111
+ Number.labelValue = this.utilityService.isCurrentLanguageArabic()
112
112
  ? element.text.arabic + `.${element.questionTypeItemID}`
113
113
  : element.text.english + `.${element.questionTypeItemID}`;
114
- Number.IsRequired = element.isRelatedToSurveyQuestion
114
+ Number.isRequired = element.isRelatedToSurveyQuestion
115
115
  ? false
116
116
  : element.options.isRequired;
117
- Number.IsReadonly = element.isRelatedToSurveyQuestion;
118
- Number.ViewType = ControlLayout.Vertical;
119
- Number.IsDisabled = this.options.Readonly;
120
- Number.LabelDescription =
117
+ Number.isReadonly = element.isRelatedToSurveyQuestion;
118
+ Number.viewType = ControlLayout.Vertical;
119
+ Number.isDisabled = this.options.Readonly;
120
+ Number.labelDescription =
121
121
  this.utilityService.isCurrentLanguageArabic()
122
122
  ? element.options.description.arabic
123
123
  : element.options.description.english;
124
- Number.Type = InputType.Number;
124
+ Number.type = InputType.Number;
125
125
  let rangeNumber = new RangeNumber();
126
- rangeNumber.To = element.options.maxLength;
127
- rangeNumber.From = element.options.minLength;
128
- Number.NumberRange = rangeNumber;
126
+ rangeNumber.to = element.options.maxLength;
127
+ rangeNumber.from = element.options.minLength;
128
+ Number.numberRange = rangeNumber;
129
129
  if (element.value.text)
130
- Number.Value = element.value.text;
130
+ Number.value = element.value.text;
131
131
  if (element.isRelatedToSurveyQuestion)
132
132
  this.checkList.push(Number);
133
133
  this.renderComponentService.renderDynamicComponent(viewContainerRef, SurveyFormItemComponent, this.filedGroup, Number, element.options.size);
@@ -135,53 +135,53 @@ export class SurveyFormComponent {
135
135
  ///DateTime
136
136
  case SurveyOptionType.Date.toLocaleLowerCase():
137
137
  let Date = new DatePickerOptions();
138
- Date.Name = 'q' + element.iD_GUID;
139
- Date.HideLabel = false;
140
- Date.LabelExtraClasses = this.labelClass;
141
- Date.LabelValue = this.utilityService.isCurrentLanguageArabic()
138
+ Date.name = 'q' + element.iD_GUID;
139
+ Date.hideLabel = false;
140
+ Date.labelExtraClasses = this.labelClass;
141
+ Date.labelValue = this.utilityService.isCurrentLanguageArabic()
142
142
  ? element.text.arabic + `.${element.questionTypeItemID}`
143
143
  : element.text.english + `.${element.questionTypeItemID}`;
144
- Date.IsRequired = element.isRelatedToSurveyQuestion
144
+ Date.isRequired = element.isRelatedToSurveyQuestion
145
145
  ? false
146
146
  : element.options.isRequired;
147
- Date.IsReadonly = element.isRelatedToSurveyQuestion;
148
- Date.ViewType = ControlLayout.Vertical;
149
- Date.IsDisabled = this.options.Readonly;
150
- Date.LabelDescription = this.utilityService.isCurrentLanguageArabic()
147
+ Date.isReadonly = element.isRelatedToSurveyQuestion;
148
+ Date.viewType = ControlLayout.Vertical;
149
+ Date.isDisabled = this.options.Readonly;
150
+ Date.labelDescription = this.utilityService.isCurrentLanguageArabic()
151
151
  ? element.options.description.arabic
152
152
  : element.options.description.english;
153
- Date.PickerType = PickerType.Calendar;
154
- Date.SelectMode = SelectMode.Single;
155
- Date.StartView = StartView.Month;
153
+ Date.pickerType = PickerType.Calendar;
154
+ Date.selectMode = SelectMode.Single;
155
+ Date.startView = StartView.Month;
156
156
  if (element.value.dateTime)
157
- Date.Value = element.value.dateTime;
157
+ Date.value = element.value.dateTime;
158
158
  if (element.isRelatedToSurveyQuestion)
159
159
  this.checkList.push(Date);
160
160
  this.renderComponentService.renderDynamicComponent(viewContainerRef, SurveyFormItemComponent, this.filedGroup, Date, element.options.size);
161
161
  break;
162
162
  case SurveyOptionType.DateTime.toLocaleLowerCase():
163
163
  let DateTime = new DatePickerOptions();
164
- DateTime.Name = 'q' + element.iD_GUID;
165
- DateTime.HideLabel = false;
166
- DateTime.LabelExtraClasses = this.labelClass;
167
- DateTime.LabelValue = this.utilityService.isCurrentLanguageArabic()
164
+ DateTime.name = 'q' + element.iD_GUID;
165
+ DateTime.hideLabel = false;
166
+ DateTime.labelExtraClasses = this.labelClass;
167
+ DateTime.labelValue = this.utilityService.isCurrentLanguageArabic()
168
168
  ? element.text.arabic + `.${element.questionTypeItemID}`
169
169
  : element.text.english + `.${element.questionTypeItemID}`;
170
- DateTime.IsRequired = element.isRelatedToSurveyQuestion
170
+ DateTime.isRequired = element.isRelatedToSurveyQuestion
171
171
  ? false
172
172
  : element.options.isRequired;
173
- DateTime.IsReadonly = element.isRelatedToSurveyQuestion;
174
- DateTime.ViewType = ControlLayout.Vertical;
175
- DateTime.IsDisabled = this.options.Readonly;
176
- DateTime.LabelDescription =
173
+ DateTime.isReadonly = element.isRelatedToSurveyQuestion;
174
+ DateTime.viewType = ControlLayout.Vertical;
175
+ DateTime.isDisabled = this.options.Readonly;
176
+ DateTime.labelDescription =
177
177
  this.utilityService.isCurrentLanguageArabic()
178
178
  ? element.options.description.arabic
179
179
  : element.options.description.english;
180
- DateTime.PickerType = PickerType.Both;
181
- DateTime.SelectMode = SelectMode.Single;
182
- DateTime.StartView = StartView.Month;
180
+ DateTime.pickerType = PickerType.Both;
181
+ DateTime.selectMode = SelectMode.Single;
182
+ DateTime.startView = StartView.Month;
183
183
  if (element.value.dateTime)
184
- DateTime.Value = element.value.dateTime;
184
+ DateTime.value = element.value.dateTime;
185
185
  if (element.isRelatedToSurveyQuestion)
186
186
  this.checkList.push(DateTime);
187
187
  this.renderComponentService.renderDynamicComponent(viewContainerRef, SurveyFormItemComponent, this.filedGroup, DateTime, element.options.size);
@@ -189,22 +189,22 @@ export class SurveyFormComponent {
189
189
  //Dropdown
190
190
  case SurveyOptionType.SingleSelect.toLocaleLowerCase():
191
191
  let SingleSelect = new DropdownOptions();
192
- SingleSelect.Name = 'q' + element.iD_GUID;
193
- SingleSelect.HideLabel = false;
194
- SingleSelect.LabelExtraClasses = this.labelClass;
195
- SingleSelect.LabelValue =
192
+ SingleSelect.name = 'q' + element.iD_GUID;
193
+ SingleSelect.hideLabel = false;
194
+ SingleSelect.labelExtraClasses = this.labelClass;
195
+ SingleSelect.labelValue =
196
196
  this.utilityService.isCurrentLanguageArabic()
197
197
  ? element.text.arabic + `.${element.questionTypeItemID}`
198
198
  : element.text.english + `.${element.questionTypeItemID}`;
199
- SingleSelect.IsRequired = element.isRelatedToSurveyQuestion
199
+ SingleSelect.isRequired = element.isRelatedToSurveyQuestion
200
200
  ? false
201
201
  : element.options.isRequired;
202
- SingleSelect.IsReadonly = element.isRelatedToSurveyQuestion;
203
- SingleSelect.Placeholder =
202
+ SingleSelect.isReadonly = element.isRelatedToSurveyQuestion;
203
+ SingleSelect.placeholder =
204
204
  this.utilityService.getResourceValue('DefaultOptionText');
205
- SingleSelect.ViewType = ControlLayout.Vertical;
206
- SingleSelect.IsDisabled = this.options.Readonly;
207
- SingleSelect.LabelDescription =
205
+ SingleSelect.viewType = ControlLayout.Vertical;
206
+ SingleSelect.isDisabled = this.options.Readonly;
207
+ SingleSelect.labelDescription =
208
208
  this.utilityService.isCurrentLanguageArabic()
209
209
  ? element.options.description.arabic
210
210
  : element.options.description.english;
@@ -218,31 +218,31 @@ export class SurveyFormComponent {
218
218
  : option.name.english;
219
219
  dataSource.push(item);
220
220
  }
221
- SingleSelect.DataSource = dataSource;
222
- SingleSelect.SingleSelection = true;
223
- SingleSelect.ShowCheckbox = false;
224
- SingleSelect.AllowSearchFilter = true;
221
+ SingleSelect.dataSource = dataSource;
222
+ SingleSelect.singleSelection = true;
223
+ SingleSelect.showCheckbox = false;
224
+ SingleSelect.allowSearchFilter = true;
225
225
  if (element.value.selectedIDs)
226
- SingleSelect.SelectedItems = element.value.selectedIDs[0];
226
+ SingleSelect.selectedItems = element.value.selectedIDs[0];
227
227
  if (element.isRelatedToSurveyQuestion)
228
228
  this.checkList.push(SingleSelect);
229
229
  this.renderComponentService.renderDynamicComponent(viewContainerRef, SurveyFormItemComponent, this.filedGroup, SingleSelect, element.options.size);
230
230
  break;
231
231
  case SurveyOptionType.RadioButton.toLocaleLowerCase():
232
232
  let radioButton = new RadioButtonOptions();
233
- radioButton.Name = 'q' + element.iD_GUID;
234
- radioButton.HideLabel = false;
235
- radioButton.LabelExtraClasses = this.labelClass;
236
- radioButton.LabelValue = this.utilityService.isCurrentLanguageArabic()
233
+ radioButton.name = 'q' + element.iD_GUID;
234
+ radioButton.hideLabel = false;
235
+ radioButton.labelExtraClasses = this.labelClass;
236
+ radioButton.labelValue = this.utilityService.isCurrentLanguageArabic()
237
237
  ? element.text.arabic + `.${element.questionTypeItemID}`
238
238
  : element.text.english + `.${element.questionTypeItemID}`;
239
- radioButton.IsRequired = element.isRelatedToSurveyQuestion
239
+ radioButton.isRequired = element.isRelatedToSurveyQuestion
240
240
  ? false
241
241
  : element.options.isRequired;
242
- radioButton.IsReadonly = element.isRelatedToSurveyQuestion;
243
- radioButton.ViewType = ControlLayout.Vertical;
244
- radioButton.IsDisabled = this.options.Readonly;
245
- radioButton.LabelDescription =
242
+ radioButton.isReadonly = element.isRelatedToSurveyQuestion;
243
+ radioButton.viewType = ControlLayout.Vertical;
244
+ radioButton.isDisabled = this.options.Readonly;
245
+ radioButton.labelDescription =
246
246
  this.utilityService.isCurrentLanguageArabic()
247
247
  ? element.options.description.arabic
248
248
  : element.options.description.english;
@@ -256,31 +256,31 @@ export class SurveyFormComponent {
256
256
  : option.name.english;
257
257
  dataSourceRadio.push(item);
258
258
  }
259
- radioButton.Items = dataSourceRadio;
259
+ radioButton.items = dataSourceRadio;
260
260
  if (element.value.selectedIDs)
261
- radioButton.Value = element.value.selectedIDs[0];
261
+ radioButton.value = element.value.selectedIDs[0];
262
262
  if (element.isRelatedToSurveyQuestion)
263
263
  this.checkList.push(radioButton);
264
264
  this.renderComponentService.renderDynamicComponent(viewContainerRef, SurveyFormItemComponent, this.filedGroup, radioButton, element.options.size);
265
265
  break;
266
266
  case SurveyOptionType.MultipleSelect.toLocaleLowerCase():
267
267
  let MulipleSelect = new DropdownOptions();
268
- MulipleSelect.Name = 'q' + element.iD_GUID;
269
- MulipleSelect.HideLabel = false;
270
- MulipleSelect.LabelExtraClasses = this.labelClass;
271
- MulipleSelect.LabelValue =
268
+ MulipleSelect.name = 'q' + element.iD_GUID;
269
+ MulipleSelect.hideLabel = false;
270
+ MulipleSelect.labelExtraClasses = this.labelClass;
271
+ MulipleSelect.labelValue =
272
272
  this.utilityService.isCurrentLanguageArabic()
273
273
  ? element.text.arabic + `.${element.questionTypeItemID}`
274
274
  : element.text.english + `.${element.questionTypeItemID}`;
275
- MulipleSelect.IsRequired = element.isRelatedToSurveyQuestion
275
+ MulipleSelect.isRequired = element.isRelatedToSurveyQuestion
276
276
  ? false
277
277
  : element.options.isRequired;
278
- MulipleSelect.IsReadonly = element.isRelatedToSurveyQuestion;
279
- MulipleSelect.Placeholder =
278
+ MulipleSelect.isReadonly = element.isRelatedToSurveyQuestion;
279
+ MulipleSelect.placeholder =
280
280
  this.utilityService.getResourceValue('DefaultOptionText');
281
- MulipleSelect.ViewType = ControlLayout.Vertical;
282
- MulipleSelect.IsDisabled = this.options.Readonly;
283
- MulipleSelect.LabelDescription =
281
+ MulipleSelect.viewType = ControlLayout.Vertical;
282
+ MulipleSelect.isDisabled = this.options.Readonly;
283
+ MulipleSelect.labelDescription =
284
284
  this.utilityService.isCurrentLanguageArabic()
285
285
  ? element.options.description.arabic
286
286
  : element.options.description.english;
@@ -294,40 +294,40 @@ export class SurveyFormComponent {
294
294
  : option.name.english;
295
295
  multipleSelectDataSource.push(item);
296
296
  }
297
- MulipleSelect.DataSource = multipleSelectDataSource;
298
- MulipleSelect.SingleSelection = false;
299
- MulipleSelect.ShowCheckbox = false;
300
- MulipleSelect.AllowSearchFilter = true;
297
+ MulipleSelect.dataSource = multipleSelectDataSource;
298
+ MulipleSelect.singleSelection = false;
299
+ MulipleSelect.showCheckbox = false;
300
+ MulipleSelect.allowSearchFilter = true;
301
301
  if (element.value.selectedIDs)
302
- MulipleSelect.SelectedItems = element.value.selectedIDs;
302
+ MulipleSelect.selectedItems = element.value.selectedIDs;
303
303
  if (element.isRelatedToSurveyQuestion)
304
304
  this.checkList.push(MulipleSelect);
305
305
  this.renderComponentService.renderDynamicComponent(viewContainerRef, SurveyFormItemComponent, this.filedGroup, MulipleSelect, element.options.size);
306
306
  break;
307
307
  case SurveyOptionType.Country.toLocaleLowerCase():
308
308
  let Country = new DropdownOptions();
309
- Country.Name = 'q' + element.iD_GUID;
310
- Country.HideLabel = false;
311
- Country.LabelExtraClasses = this.labelClass;
312
- Country.LabelValue = this.utilityService.isCurrentLanguageArabic()
309
+ Country.name = 'q' + element.iD_GUID;
310
+ Country.hideLabel = false;
311
+ Country.labelExtraClasses = this.labelClass;
312
+ Country.labelValue = this.utilityService.isCurrentLanguageArabic()
313
313
  ? element.text.arabic + `.${element.questionTypeItemID}`
314
314
  : element.text.english + `.${element.questionTypeItemID}`;
315
- Country.IsRequired = element.isRelatedToSurveyQuestion
315
+ Country.isRequired = element.isRelatedToSurveyQuestion
316
316
  ? false
317
317
  : element.options.isRequired;
318
- Country.IsReadonly = element.isRelatedToSurveyQuestion;
319
- Country.ViewType = ControlLayout.Vertical;
320
- Country.IsDisabled = this.options.Readonly;
321
- Country.LabelDescription =
318
+ Country.isReadonly = element.isRelatedToSurveyQuestion;
319
+ Country.viewType = ControlLayout.Vertical;
320
+ Country.isDisabled = this.options.Readonly;
321
+ Country.labelDescription =
322
322
  this.utilityService.isCurrentLanguageArabic()
323
323
  ? element.options.description.arabic
324
324
  : element.options.description.english;
325
- Country.SingleSelection = true;
326
- Country.ShowCheckbox = false;
327
- Country.AllowSearchFilter = true;
328
- Country.DataSource = element.options.dataSource;
325
+ Country.singleSelection = true;
326
+ Country.showCheckbox = false;
327
+ Country.allowSearchFilter = true;
328
+ Country.dataSource = element.options.dataSource;
329
329
  if (element.value.selectedIDs)
330
- Country.SelectedItems = element.value.selectedIDs[0];
330
+ Country.selectedItems = element.value.selectedIDs[0];
331
331
  if (element.isRelatedToSurveyQuestion)
332
332
  this.checkList.push(Country);
333
333
  this.renderComponentService.renderDynamicComponent(viewContainerRef, SurveyFormItemComponent, this.filedGroup, Country, element.options.size);
@@ -335,25 +335,25 @@ export class SurveyFormComponent {
335
335
  //FileUpload
336
336
  case SurveyOptionType.MultiFile.toLocaleLowerCase():
337
337
  let MultiFile = new FileUploadOptions();
338
- MultiFile.Name = 'q' + element.iD_GUID;
339
- MultiFile.HideLabel = false;
340
- MultiFile.LabelExtraClasses = this.labelClass;
341
- MultiFile.LabelValue = this.utilityService.isCurrentLanguageArabic()
338
+ MultiFile.name = 'q' + element.iD_GUID;
339
+ MultiFile.hideLabel = false;
340
+ MultiFile.labelExtraClasses = this.labelClass;
341
+ MultiFile.labelValue = this.utilityService.isCurrentLanguageArabic()
342
342
  ? element.text.arabic + `.${element.questionTypeItemID}`
343
343
  : element.text.english + `.${element.questionTypeItemID}`;
344
- MultiFile.IsRequired = element.isRelatedToSurveyQuestion
344
+ MultiFile.isRequired = element.isRelatedToSurveyQuestion
345
345
  ? false
346
346
  : element.options.isRequired;
347
- MultiFile.IsReadonly = element.isRelatedToSurveyQuestion;
348
- MultiFile.ViewType = ControlLayout.Vertical;
349
- MultiFile.IsDisabled = this.options.Readonly;
350
- MultiFile.LabelDescription =
347
+ MultiFile.isReadonly = element.isRelatedToSurveyQuestion;
348
+ MultiFile.viewType = ControlLayout.Vertical;
349
+ MultiFile.isDisabled = this.options.Readonly;
350
+ MultiFile.labelDescription =
351
351
  this.utilityService.isCurrentLanguageArabic()
352
352
  ? element.options.description.arabic
353
353
  : element.options.description.english;
354
- MultiFile.MaxSizeForAllFilesInMB = element.options.maxFileSizeInMB;
355
- MultiFile.MaxNoOfFiles = element.options.maxFileCount;
356
- MultiFile.IsMultipleFile = true;
354
+ MultiFile.maxSizeForAllFilesInMB = element.options.maxFileSizeInMB;
355
+ MultiFile.maxNoOfFiles = element.options.maxFileCount;
356
+ MultiFile.isMultipleFile = true;
357
357
  let acceptedTypes = [];
358
358
  for (let index = 0; index < element.options.allowedExtensions.length; index++) {
359
359
  const elementValue = element.options.allowedExtensions[index];
@@ -377,10 +377,10 @@ export class SurveyFormComponent {
377
377
  break;
378
378
  }
379
379
  }
380
- MultiFile.FileUploadAcceptsTypes = acceptedTypes;
380
+ MultiFile.fileUploadAcceptsTypes = acceptedTypes;
381
381
  if (element.value.fileCorrelationDTO) {
382
382
  let model = this.toCamel(element.value.fileCorrelationDTO);
383
- MultiFile.Value = model;
383
+ MultiFile.value = model;
384
384
  }
385
385
  if (element.isRelatedToSurveyQuestion)
386
386
  this.checkList.push(MultiFile);
@@ -388,22 +388,22 @@ export class SurveyFormComponent {
388
388
  break;
389
389
  case SurveyOptionType.File.toLocaleLowerCase():
390
390
  let File = new FileUploadOptions();
391
- File.Name = 'q' + element.iD_GUID;
392
- File.HideLabel = false;
393
- File.LabelExtraClasses = this.labelClass;
394
- File.LabelValue = this.utilityService.isCurrentLanguageArabic()
391
+ File.name = 'q' + element.iD_GUID;
392
+ File.hideLabel = false;
393
+ File.labelExtraClasses = this.labelClass;
394
+ File.labelValue = this.utilityService.isCurrentLanguageArabic()
395
395
  ? element.text.arabic + `.${element.questionTypeItemID}`
396
396
  : element.text.english + `.${element.questionTypeItemID}`;
397
- File.IsRequired = element.isRelatedToSurveyQuestion
397
+ File.isRequired = element.isRelatedToSurveyQuestion
398
398
  ? false
399
399
  : element.options.isRequired;
400
- File.IsReadonly = element.isRelatedToSurveyQuestion;
401
- File.ViewType = ControlLayout.Vertical;
402
- File.IsDisabled = this.options.Readonly;
403
- File.LabelDescription = this.utilityService.isCurrentLanguageArabic()
400
+ File.isReadonly = element.isRelatedToSurveyQuestion;
401
+ File.viewType = ControlLayout.Vertical;
402
+ File.isDisabled = this.options.Readonly;
403
+ File.labelDescription = this.utilityService.isCurrentLanguageArabic()
404
404
  ? element.options.description.arabic
405
405
  : element.options.description.english;
406
- File.FileMaxSizeInMB = element.options.maxFileSizeInMB;
406
+ File.fileMaxSizeInMB = element.options.maxFileSizeInMB;
407
407
  let acceptedTypesFile = [];
408
408
  debugger;
409
409
  for (let index = 0; index < element.options.allowedExtensions.length; index++) {
@@ -430,9 +430,9 @@ export class SurveyFormComponent {
430
430
  }
431
431
  if (element.value.fileDTO) {
432
432
  let model = this.toCamel(element.value.fileDTO);
433
- File.Value = model;
433
+ File.value = model;
434
434
  }
435
- File.FileUploadAcceptsTypes = acceptedTypesFile;
435
+ File.fileUploadAcceptsTypes = acceptedTypesFile;
436
436
  if (element.isRelatedToSurveyQuestion)
437
437
  this.checkList.push(File);
438
438
  this.renderComponentService.renderDynamicComponent(viewContainerRef, SurveyFormItemComponent, this.filedGroup, File, element.options.size);
@@ -440,59 +440,59 @@ export class SurveyFormComponent {
440
440
  //ImageUpload
441
441
  case SurveyOptionType.Image.toLocaleLowerCase():
442
442
  let Image = new ImageUploadOptions();
443
- Image.Name = 'q' + element.iD_GUID;
444
- Image.HideLabel = false;
445
- Image.LabelExtraClasses = this.labelClass;
446
- Image.LabelValue = this.utilityService.isCurrentLanguageArabic()
443
+ Image.name = 'q' + element.iD_GUID;
444
+ Image.hideLabel = false;
445
+ Image.labelExtraClasses = this.labelClass;
446
+ Image.labelValue = this.utilityService.isCurrentLanguageArabic()
447
447
  ? element.text.arabic + `.${element.questionTypeItemID}`
448
448
  : element.text.english + `.${element.questionTypeItemID}`;
449
- Image.IsRequired = element.isRelatedToSurveyQuestion
449
+ Image.isRequired = element.isRelatedToSurveyQuestion
450
450
  ? false
451
451
  : element.options.isRequired;
452
- Image.IsReadonly = element.isRelatedToSurveyQuestion;
453
- Image.ViewType = ControlLayout.Vertical;
454
- Image.IsDisabled = this.options.Readonly;
455
- Image.LabelDescription = this.utilityService.isCurrentLanguageArabic()
452
+ Image.isReadonly = element.isRelatedToSurveyQuestion;
453
+ Image.viewType = ControlLayout.Vertical;
454
+ Image.isDisabled = this.options.Readonly;
455
+ Image.labelDescription = this.utilityService.isCurrentLanguageArabic()
456
456
  ? element.options.description.arabic
457
457
  : element.options.description.english;
458
458
  if (element.options.maxFileSizeInMB)
459
- Image.FileMaxSizeInMB = element.options.maxFileSizeInMB;
459
+ Image.fileMaxSizeInMB = element.options.maxFileSizeInMB;
460
460
  if (element.isRelatedToSurveyQuestion)
461
461
  this.checkList.push(Image);
462
462
  if (element.value.fileDTO)
463
- Image.Value = element.value.fileDTO;
463
+ Image.value = element.value.fileDTO;
464
464
  this.renderComponentService.renderDynamicComponent(viewContainerRef, SurveyFormItemComponent, this.filedGroup, Image, element.options.size);
465
465
  break;
466
466
  //MultilineText
467
467
  case SurveyOptionType.MultilineText.toLocaleLowerCase():
468
468
  let MultilineText = new TextAreaOptions();
469
- MultilineText.Name = 'q' + element.iD_GUID;
470
- MultilineText.HideLabel = false;
471
- MultilineText.LabelExtraClasses = this.labelClass;
472
- MultilineText.LabelValue =
469
+ MultilineText.name = 'q' + element.iD_GUID;
470
+ MultilineText.hideLabel = false;
471
+ MultilineText.labelExtraClasses = this.labelClass;
472
+ MultilineText.labelValue =
473
473
  this.utilityService.isCurrentLanguageArabic()
474
474
  ? element.text.arabic + `.${element.questionTypeItemID}`
475
475
  : element.text.english + `.${element.questionTypeItemID}`;
476
- MultilineText.IsRequired = element.isRelatedToSurveyQuestion
476
+ MultilineText.isRequired = element.isRelatedToSurveyQuestion
477
477
  ? false
478
478
  : element.options.isRequired;
479
- MultilineText.IsReadonly = element.isRelatedToSurveyQuestion;
480
- MultilineText.ViewType = ControlLayout.Vertical;
481
- MultilineText.IsDisabled = this.options.Readonly;
482
- MultilineText.LabelDescription =
479
+ MultilineText.isReadonly = element.isRelatedToSurveyQuestion;
480
+ MultilineText.viewType = ControlLayout.Vertical;
481
+ MultilineText.isDisabled = this.options.Readonly;
482
+ MultilineText.labelDescription =
483
483
  this.utilityService.isCurrentLanguageArabic()
484
484
  ? element.options.description.arabic
485
485
  : element.options.description.english;
486
486
  if (element.options.maxLength)
487
- MultilineText.MaxLength = element.options.maxLength;
487
+ MultilineText.maxLength = element.options.maxLength;
488
488
  if (element.options.minLength)
489
- MultilineText.MinLength = element.options.minLength;
490
- MultilineText.Rows = element.options.rows;
489
+ MultilineText.minLength = element.options.minLength;
490
+ MultilineText.rows = element.options.rows;
491
491
  if (element.value.text)
492
- MultilineText.Value = element.value.text;
492
+ MultilineText.value = element.value.text;
493
493
  if (element.isRelatedToSurveyQuestion)
494
494
  this.checkList.push(MultilineText);
495
- MultilineText.ForceDirection =
495
+ MultilineText.forceDirection =
496
496
  this.utilityService.isCurrentLanguageArabic()
497
497
  ? ForceDirection.Arabic
498
498
  : ForceDirection.English;
@@ -501,20 +501,20 @@ export class SurveyFormComponent {
501
501
  //HTML
502
502
  case SurveyOptionType.Boolean.toLocaleLowerCase():
503
503
  let Boolean = new ToggleSlideOptions();
504
- Boolean.Name = 'q' + element.iD_GUID;
505
- Boolean.LabelExtraClasses = this.labelClass;
506
- Boolean.ViewType = ControlLayout.Vertical;
507
- Boolean.IsReadonly = element.isRelatedToSurveyQuestion;
508
- Boolean.IsDisabled = this.options.Readonly;
509
- Boolean.HideLabel = false;
504
+ Boolean.name = 'q' + element.iD_GUID;
505
+ Boolean.labelExtraClasses = this.labelClass;
506
+ Boolean.viewType = ControlLayout.Vertical;
507
+ Boolean.isReadonly = element.isRelatedToSurveyQuestion;
508
+ Boolean.isDisabled = this.options.Readonly;
509
+ Boolean.hideLabel = false;
510
510
  if (element.value.boolean)
511
- Boolean.Value = element.value.boolean;
511
+ Boolean.value = element.value.boolean;
512
512
  if (element.isRelatedToSurveyQuestion)
513
513
  this.checkList.push(Boolean);
514
- Boolean.LabelValue = this.utilityService.isCurrentLanguageArabic()
514
+ Boolean.labelValue = this.utilityService.isCurrentLanguageArabic()
515
515
  ? element.text.arabic + `.${element.questionTypeItemID}`
516
516
  : element.text.english + `.${element.questionTypeItemID}`;
517
- Boolean.LabelDescription =
517
+ Boolean.labelDescription =
518
518
  this.utilityService.isCurrentLanguageArabic()
519
519
  ? element.options.description.arabic
520
520
  : element.options.description.english;
@@ -693,4 +693,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImpor
693
693
  type: ViewChild,
694
694
  args: [NgForm]
695
695
  }] } });
696
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VydmV5LWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy9zaGFyZWQvY29tcG9uZW50cy9zdXJ2ZXktZm9ybS9zdXJ2ZXktZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL3NoYXJlZC9jb21wb25lbnRzL3N1cnZleS1mb3JtL3N1cnZleS1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRixPQUFPLEVBQ0wsYUFBYSxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUFvQixlQUFlLEVBQ2pGLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFDL0Ysa0JBQWtCLEVBQUUsV0FBVyxFQUEwQixVQUFVLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFDL0YsY0FBYyxFQUFFLGtCQUFrQixFQUNuQyxNQUFNLHlCQUF5QixDQUFDO0FBR2pDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRW5GLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQzs7Ozs7O0FBT3pGLE1BQU0sT0FBTyxt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QUFDLGtCQUFrQixDQUFDLGtFQUtwQixXQUFXLHdGQUNYLHFCQUFxQixtRkFXckIsTUFBTSxnRENwQ25CLDRGQUlBOzsyRkRpQmEsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGFBQWEsYUFFWixDQUFDLGtCQUFrQixDQUFDO2tMQUd0QixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNvQyxNQUFNO3NCQUEvQyxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRWhDLE9BQU87c0JBRGQsU0FBUzt1QkFBQyxxQkFBcUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBV2hDLGdCQUFnQjtzQkFBbEMsU0FBUzt1QkFBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtR3JvdXBEaXJlY3RpdmUsIE5nRm9ybSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtcclxuICBDb250cm9sTGF5b3V0LCBEYXRlUGlja2VyT3B0aW9ucywgRHJvcGRvd25MaXN0Q29tcG9uZW50LCBEcm9wZG93bkxpc3RJdGVtLCBEcm9wZG93bk9wdGlvbnMsXHJcbiAgRmlsZURUTywgRmlsZVR5cGUsIEZpbGVVcGxvYWRPcHRpb25zLCBGb3JjZURpcmVjdGlvbiwgSW1hZ2VVcGxvYWRPcHRpb25zLCBJbnB1dFR5cGUsIFBpY2tlclR5cGUsXHJcbiAgUmFkaW9CdXR0b25PcHRpb25zLCBSYW5nZU51bWJlciwgUmVuZGVyQ29tcG9uZW50U2VydmljZSwgU2VsZWN0TW9kZSwgU3RhcnRWaWV3LCBUZXh0QXJlYU9wdGlvbnMsXHJcbiAgVGV4dEJveE9wdGlvbnMsIFRvZ2dsZVNsaWRlT3B0aW9uc1xyXG59IGZyb20gJ0BibnNpZ2h0cy9iYnNmLWNvbnRyb2xzJztcclxuaW1wb3J0IHsgVXRpbGl0eVNlcnZpY2UgfSBmcm9tICdAYm5zaWdodHMvYmJzZi11dGlsaXRpZXMnO1xyXG5cclxuaW1wb3J0IHsgU3VydmV5T3B0aW9uVHlwZSB9IGZyb20gJy4uLy4uL0VudW1zL0VudW1zJztcclxuaW1wb3J0IHsgU3VydmV5RmlsZWRWYWx1ZURUTyB9IGZyb20gJy4uLy4uL21vZGVscy9TdXJ2ZXlNb2RlbHMvc3VydmV5LWZpbGVkLXZhbHVlJztcclxuaW1wb3J0IHsgU3VydmV5Rm9ybU9wdGlvbnMgfSBmcm9tICcuLi8uLi9tb2RlbHMvU3VydmV5TW9kZWxzL3N1cnZleS1mb3JtLW9wdGlvbnMnO1xyXG5pbXBvcnQgeyBBZERpcmVjdGl2ZSB9IGZyb20gJy4uL0FkRGlyZWN0aXZlJztcclxuaW1wb3J0IHsgU3VydmV5Rm9ybUl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9zdXJ2ZXktZm9ybS1pdGVtL3N1cnZleS1mb3JtLWl0ZW0uY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc3VydmV5LWZvcm0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zdXJ2ZXktZm9ybS5jb21wb25lbnQuaHRtbCcsXHJcbiAgcHJvdmlkZXJzOiBbRm9ybUdyb3VwRGlyZWN0aXZlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFN1cnZleUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIGdyb3VwOiBGb3JtR3JvdXA7XHJcbiAgQElucHV0KCkgb3B0aW9uczogU3VydmV5Rm9ybU9wdGlvbnM7XHJcbiAgQFZpZXdDaGlsZChBZERpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgYWRIb3N0ITogQWREaXJlY3RpdmU7XHJcbiAgQFZpZXdDaGlsZChEcm9wZG93bkxpc3RDb21wb25lbnQsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIHByaXZhdGUgbXlDaGlsZDogRHJvcGRvd25MaXN0Q29tcG9uZW50O1xyXG5cclxuICBmaWxlZEdyb3VwOiBGb3JtR3JvdXA7XHJcbiAgcmVzdWx0OiBTdXJ2ZXlGaWxlZFZhbHVlRFRPW10gPSBbXTtcclxuICBjaGlsZElkTGlzdDogc3RyaW5nW10gPSBbXTtcclxuICBjaGlsZFF1ZXN0aW9uTGlzdDogYW55W10gPSBbXTtcclxuICBhcmVhT2ZGb2N1c0NvbnRyb2xOYW1lOiBzdHJpbmc7XHJcbiAgY2hhbGxlbmdlQ29udHJvbE5hbWU6IHN0cmluZztcclxuICBhcmVhT2ZGb2N1c0NvbnRyb2xJbmRleCA9IDA7XHJcbiAgY2hhbGxlbmdlQ29udHJvbEluZGV4ID0gMDtcclxuICBAVmlld0NoaWxkKE5nRm9ybSkgZG9jdW1lbnRFZGl0Rm9ybSE6IE5nRm9ybTtcclxuICBpc0RlbGV0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNoZWNrTGlzdDogYW55W10gPSBbXTtcclxuICBzaG93ZWRDaGlsZFF1ZXN0aW9uOiBhbnlbXSA9IFtdO1xyXG4gIFRleHRDb250ZXh0OiBhbnk7XHJcbiAgaXNGaXJzdFZhbGlkOiBib29sZWFuID0gdHJ1ZTtcclxuICBsYWJlbENsYXNzOiBzdHJpbmcgPSAnVGVzdHRzYWRmdic7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSByZW5kZXJDb21wb25lbnRTZXJ2aWNlOiBSZW5kZXJDb21wb25lbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1dGlsaXR5U2VydmljZTogVXRpbGl0eVNlcnZpY2UsXHJcbiAgICBwdWJsaWMgVGV4dENvbnRyb2xIb3N0OiBGb3JtR3JvdXBEaXJlY3RpdmVcclxuICApIHsgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3Qgdmlld0NvbnRhaW5lclJlZiA9IHRoaXMuYWRIb3N0LnZpZXdDb250YWluZXJSZWY7XHJcbiAgICB2aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XHJcbiAgICB0aGlzLmZpbGVkR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgIHRoaXMuZ3JvdXAuYWRkQ29udHJvbCh0aGlzLm9wdGlvbnMuTmFtZSwgdGhpcy5maWxlZEdyb3VwKTtcclxuXHJcbiAgICB0aGlzLmdyb3VwLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdHcm91cCcsIGUpO1xyXG4gICAgfSk7XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5vcHRpb25zLlF1ZXN0aW9uTGlzdC5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLm9wdGlvbnMuUXVlc3Rpb25MaXN0W2luZGV4XTtcclxuXHJcbiAgICAgIHN3aXRjaCAoZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUQpIHtcclxuICAgICAgICAvLy9UZXh0Qm94XHJcblxyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5UZXh0LnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICB2YXIgVGV4dCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgICAgVGV4dC5OYW1lID0gJ3EnICsgZWxlbWVudC5pRF9HVUlEO1xyXG4gICAgICAgICAgVGV4dC5MYWJlbFZhbHVlID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC50ZXh0LmFyYWJpYyArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gXHJcbiAgICAgICAgICAgIDogZWxlbWVudC50ZXh0LmVuZ2xpc2ggKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YDtcclxuICAgICAgICAgIFRleHQuSGlkZUxhYmVsID0gZmFsc2U7XHJcbiAgICAgICAgICBUZXh0LklzUmVxdWlyZWQgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb25cclxuICAgICAgICAgICAgPyBmYWxzZVxyXG4gICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgVGV4dC5Jc1JlYWRvbmx5ID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uO1xyXG4gICAgICAgICAgVGV4dC5Jc0Rpc2FibGVkID0gdGhpcy5vcHRpb25zLlJlYWRvbmx5O1xyXG4gICAgICAgICAgVGV4dC5MYWJlbEV4dHJhQ2xhc3NlcyA9IHRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIFRleHQuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgICAgVGV4dC5MYWJlbERlc2NyaXB0aW9uID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpY1xyXG4gICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUudGV4dCkgVGV4dC5WYWx1ZSA9IGVsZW1lbnQudmFsdWUudGV4dDtcclxuICAgICAgICAgIGlmIChlbGVtZW50Lm9wdGlvbnMubWF4TGVuZ3RoKVxyXG4gICAgICAgICAgICBUZXh0Lk1heExlbmd0aCA9IGVsZW1lbnQub3B0aW9ucy5tYXhMZW5ndGg7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5vcHRpb25zLm1pbkxlbmd0aClcclxuICAgICAgICAgICAgVGV4dC5NaW5MZW5ndGggPSBlbGVtZW50Lm9wdGlvbnMubWluTGVuZ3RoO1xyXG4gICAgICAgICAgVGV4dC5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uKSB0aGlzLmNoZWNrTGlzdC5wdXNoKFRleHQpO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8U3VydmV5Rm9ybUl0ZW1Db21wb25lbnQ+KFxyXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgICAgICBTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwLFxyXG4gICAgICAgICAgICBUZXh0LFxyXG4gICAgICAgICAgICBlbGVtZW50Lm9wdGlvbnMuc2l6ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuRW1haWwudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgIGxldCBFbWFpbCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgICAgRW1haWwuTmFtZSA9ICdxJyArIGVsZW1lbnQuaURfR1VJRDtcclxuICAgICAgICAgIEVtYWlsLkxhYmVsVmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgPyBlbGVtZW50LnRleHQuYXJhYmljICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWBcclxuICAgICAgICAgICAgOiBlbGVtZW50LnRleHQuZW5nbGlzaCArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gO1xyXG4gICAgICAgICAgRW1haWwuSGlkZUxhYmVsID0gZmFsc2U7XHJcbiAgICAgICAgICBFbWFpbC5MYWJlbEV4dHJhQ2xhc3NlcyA9IHRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIEVtYWlsLklzUmVxdWlyZWQgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb25cclxuICAgICAgICAgICAgPyBmYWxzZVxyXG4gICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgRW1haWwuSXNSZWFkb25seSA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbjtcclxuICAgICAgICAgIEVtYWlsLlZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgICAgIEVtYWlsLklzRGlzYWJsZWQgPSB0aGlzLm9wdGlvbnMuUmVhZG9ubHk7XHJcbiAgICAgICAgICBFbWFpbC5MYWJlbERlc2NyaXB0aW9uID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpY1xyXG4gICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG4gICAgICAgICAgRW1haWwuVHlwZSA9IElucHV0VHlwZS5FbWFpbDtcclxuICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlLnRleHQpIEVtYWlsLlZhbHVlID0gZWxlbWVudC52YWx1ZS50ZXh0O1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbikgdGhpcy5jaGVja0xpc3QucHVzaChFbWFpbCk7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgICAgIFN1cnZleUZvcm1JdGVtQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmZpbGVkR3JvdXAsXHJcbiAgICAgICAgICAgIEVtYWlsLFxyXG4gICAgICAgICAgICBlbGVtZW50Lm9wdGlvbnMuc2l6ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5OdW1iZXIudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgIGxldCBOdW1iZXIgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgICAgIE51bWJlci5OYW1lID0gJ3EnICsgZWxlbWVudC5pRF9HVUlEO1xyXG4gICAgICAgICAgTnVtYmVyLkhpZGVMYWJlbCA9IGZhbHNlO1xyXG4gICAgICAgICAgTnVtYmVyLkxhYmVsRXh0cmFDbGFzc2VzID0gdGhpcy5sYWJlbENsYXNzO1xyXG4gICAgICAgICAgTnVtYmVyLkxhYmVsVmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgPyBlbGVtZW50LnRleHQuYXJhYmljICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWBcclxuICAgICAgICAgICAgOiBlbGVtZW50LnRleHQuZW5nbGlzaCArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gO1xyXG4gICAgICAgICAgTnVtYmVyLklzUmVxdWlyZWQgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb25cclxuICAgICAgICAgICAgPyBmYWxzZVxyXG4gICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgTnVtYmVyLklzUmVhZG9ubHkgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb247XHJcbiAgICAgICAgICBOdW1iZXIuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgICAgTnVtYmVyLklzRGlzYWJsZWQgPSB0aGlzLm9wdGlvbnMuUmVhZG9ubHk7XHJcbiAgICAgICAgICBOdW1iZXIuTGFiZWxEZXNjcmlwdGlvbiA9XHJcbiAgICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICAgID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpY1xyXG4gICAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmVuZ2xpc2g7XHJcbiAgICAgICAgICBOdW1iZXIuVHlwZSA9IElucHV0VHlwZS5OdW1iZXI7XHJcbiAgICAgICAgICBsZXQgcmFuZ2VOdW1iZXIgPSBuZXcgUmFuZ2VOdW1iZXIoKTtcclxuICAgICAgICAgIHJhbmdlTnVtYmVyLlRvID0gZWxlbWVudC5vcHRpb25zLm1heExlbmd0aDtcclxuICAgICAgICAgIHJhbmdlTnVtYmVyLkZyb20gPSBlbGVtZW50Lm9wdGlvbnMubWluTGVuZ3RoO1xyXG4gICAgICAgICAgTnVtYmVyLk51bWJlclJhbmdlID0gcmFuZ2VOdW1iZXI7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC52YWx1ZS50ZXh0KSBOdW1iZXIuVmFsdWUgPSBlbGVtZW50LnZhbHVlLnRleHQ7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uKSB0aGlzLmNoZWNrTGlzdC5wdXNoKE51bWJlcik7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgICAgIFN1cnZleUZvcm1JdGVtQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmZpbGVkR3JvdXAsXHJcbiAgICAgICAgICAgIE51bWJlcixcclxuICAgICAgICAgICAgZWxlbWVudC5vcHRpb25zLnNpemVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvLy9EYXRlVGltZVxyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5EYXRlLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICBsZXQgRGF0ZSA9IG5ldyBEYXRlUGlja2VyT3B0aW9ucygpO1xyXG4gICAgICAgICAgRGF0ZS5OYW1lID0gJ3EnICsgZWxlbWVudC5pRF9HVUlEO1xyXG4gICAgICAgICAgRGF0ZS5IaWRlTGFiZWwgPSBmYWxzZTtcclxuICAgICAgICAgIERhdGUuTGFiZWxFeHRyYUNsYXNzZXMgPSB0aGlzLmxhYmVsQ2xhc3M7XHJcbiAgICAgICAgICBEYXRlLkxhYmVsVmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgPyBlbGVtZW50LnRleHQuYXJhYmljICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWBcclxuICAgICAgICAgICAgOiBlbGVtZW50LnRleHQuZW5nbGlzaCArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gO1xyXG4gICAgICAgICAgRGF0ZS5Jc1JlcXVpcmVkID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uXHJcbiAgICAgICAgICAgID8gZmFsc2VcclxuICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIERhdGUuSXNSZWFkb25seSA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbjtcclxuICAgICAgICAgIERhdGUuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgICAgRGF0ZS5Jc0Rpc2FibGVkID0gdGhpcy5vcHRpb25zLlJlYWRvbmx5O1xyXG4gICAgICAgICAgRGF0ZS5MYWJlbERlc2NyaXB0aW9uID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpY1xyXG4gICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG4gICAgICAgICAgRGF0ZS5QaWNrZXJUeXBlID0gUGlja2VyVHlwZS5DYWxlbmRhcjtcclxuICAgICAgICAgIERhdGUuU2VsZWN0TW9kZSA9IFNlbGVjdE1vZGUuU2luZ2xlO1xyXG4gICAgICAgICAgRGF0ZS5TdGFydFZpZXcgPSBTdGFydFZpZXcuTW9udGg7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC52YWx1ZS5kYXRlVGltZSkgRGF0ZS5WYWx1ZSA9IGVsZW1lbnQudmFsdWUuZGF0ZVRpbWU7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uKSB0aGlzLmNoZWNrTGlzdC5wdXNoKERhdGUpO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8U3VydmV5Rm9ybUl0ZW1Db21wb25lbnQ+KFxyXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgICAgICBTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwLFxyXG4gICAgICAgICAgICBEYXRlLFxyXG4gICAgICAgICAgICBlbGVtZW50Lm9wdGlvbnMuc2l6ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5EYXRlVGltZS50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgbGV0IERhdGVUaW1lID0gbmV3IERhdGVQaWNrZXJPcHRpb25zKCk7XHJcbiAgICAgICAgICBEYXRlVGltZS5OYW1lID0gJ3EnICsgZWxlbWVudC5pRF9HVUlEO1xyXG4gICAgICAgICAgRGF0ZVRpbWUuSGlkZUxhYmVsID0gZmFsc2U7XHJcbiAgICAgICAgICBEYXRlVGltZS5MYWJlbEV4dHJhQ2xhc3NlcyA9IHRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIERhdGVUaW1lLkxhYmVsVmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgPyBlbGVtZW50LnRleHQuYXJhYmljICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWBcclxuICAgICAgICAgICAgOiBlbGVtZW50LnRleHQuZW5nbGlzaCArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gO1xyXG4gICAgICAgICAgRGF0ZVRpbWUuSXNSZXF1aXJlZCA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvblxyXG4gICAgICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBEYXRlVGltZS5Jc1JlYWRvbmx5ID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uO1xyXG4gICAgICAgICAgRGF0ZVRpbWUuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgICAgRGF0ZVRpbWUuSXNEaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5SZWFkb25seTtcclxuICAgICAgICAgIERhdGVUaW1lLkxhYmVsRGVzY3JpcHRpb24gPVxyXG4gICAgICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgICA/IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5hcmFiaWNcclxuICAgICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG4gICAgICAgICAgRGF0ZVRpbWUuUGlja2VyVHlwZSA9IFBpY2tlclR5cGUuQm90aDtcclxuICAgICAgICAgIERhdGVUaW1lLlNlbGVjdE1vZGUgPSBTZWxlY3RNb2RlLlNpbmdsZTtcclxuICAgICAgICAgIERhdGVUaW1lLlN0YXJ0VmlldyA9IFN0YXJ0Vmlldy5Nb250aDtcclxuICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlLmRhdGVUaW1lKSBEYXRlVGltZS5WYWx1ZSA9IGVsZW1lbnQudmFsdWUuZGF0ZVRpbWU7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uKSB0aGlzLmNoZWNrTGlzdC5wdXNoKERhdGVUaW1lKTtcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFN1cnZleUZvcm1JdGVtQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZixcclxuICAgICAgICAgICAgU3VydmV5Rm9ybUl0ZW1Db21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZmlsZWRHcm91cCxcclxuICAgICAgICAgICAgRGF0ZVRpbWUsXHJcbiAgICAgICAgICAgIGVsZW1lbnQub3B0aW9ucy5zaXplXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy9Ecm9wZG93blxyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5TaW5nbGVTZWxlY3QudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgIGxldCBTaW5nbGVTZWxlY3QgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICBTaW5nbGVTZWxlY3QuTmFtZSA9ICdxJyArIGVsZW1lbnQuaURfR1VJRDtcclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC5IaWRlTGFiZWwgPSBmYWxzZTtcclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC5MYWJlbEV4dHJhQ2xhc3NlcyA9IHRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC5MYWJlbFZhbHVlID1cclxuICAgICAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgICAgPyBlbGVtZW50LnRleHQuYXJhYmljICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWBcclxuICAgICAgICAgICAgICA6IGVsZW1lbnQudGV4dC5lbmdsaXNoICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWA7XHJcbiAgICAgICAgICBTaW5nbGVTZWxlY3QuSXNSZXF1aXJlZCA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvblxyXG4gICAgICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBTaW5nbGVTZWxlY3QuSXNSZWFkb25seSA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbjtcclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC5QbGFjZWhvbGRlciA9XHJcbiAgICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnRGVmYXVsdE9wdGlvblRleHQnKTtcclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC5WaWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuVmVydGljYWw7XHJcbiAgICAgICAgICBTaW5nbGVTZWxlY3QuSXNEaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5SZWFkb25seTtcclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC5MYWJlbERlc2NyaXB0aW9uID1cclxuICAgICAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgICAgPyBlbGVtZW50Lm9wdGlvbnMuZGVzY3JpcHRpb24uYXJhYmljXHJcbiAgICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuZGVzY3JpcHRpb24uZW5nbGlzaDtcclxuICAgICAgICAgIGxldCBkYXRhU291cmNlOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGVsZW1lbnQucXVlc3Rpb25PcHRpb25zLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICBjb25zdCBvcHRpb24gPSBlbGVtZW50LnF1ZXN0aW9uT3B0aW9uc1tpbmRleF07XHJcbiAgICAgICAgICAgIGxldCBpdGVtOiBhbnkgPSB7fTtcclxuICAgICAgICAgICAgaXRlbS5rZXkgPSBvcHRpb24uaURfR1VJRDtcclxuICAgICAgICAgICAgaXRlbS52YWx1ZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICAgID8gb3B0aW9uLm5hbWUuYXJhYmljXHJcbiAgICAgICAgICAgICAgOiBvcHRpb24ubmFtZS5lbmdsaXNoO1xyXG4gICAgICAgICAgICBkYXRhU291cmNlLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBTaW5nbGVTZWxlY3QuRGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XHJcbiAgICAgICAgICBTaW5nbGVTZWxlY3QuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC5TaG93Q2hlY2tib3ggPSBmYWxzZTtcclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC52YWx1ZS5zZWxlY3RlZElEcylcclxuICAgICAgICAgICAgU2luZ2xlU2VsZWN0LlNlbGVjdGVkSXRlbXMgPSBlbGVtZW50LnZhbHVlLnNlbGVjdGVkSURzWzBdO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbilcclxuICAgICAgICAgICAgdGhpcy5jaGVja0xpc3QucHVzaChTaW5nbGVTZWxlY3QpO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8U3VydmV5Rm9ybUl0ZW1Db21wb25lbnQ+KFxyXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgICAgICBTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwLFxyXG4gICAgICAgICAgICBTaW5nbGVTZWxlY3QsXHJcbiAgICAgICAgICAgIGVsZW1lbnQub3B0aW9ucy5zaXplXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLlJhZGlvQnV0dG9uLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICBsZXQgcmFkaW9CdXR0b24gPSBuZXcgUmFkaW9CdXR0b25PcHRpb25zKCk7XHJcbiAgICAgICAgICByYWRpb0J1dHRvbi5OYW1lID0gJ3EnICsgZWxlbWVudC5pRF9HVUlEO1xyXG4gICAgICAgICAgcmFkaW9CdXR0b24uSGlkZUxhYmVsID0gZmFsc2U7XHJcbiAgICAgICAgICByYWRpb0J1dHRvbi5MYWJlbEV4dHJhQ2xhc3NlcyA9IHRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIHJhZGlvQnV0dG9uLkxhYmVsVmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgPyBlbGVtZW50LnRleHQuYXJhYmljICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWBcclxuICAgICAgICAgICAgOiBlbGVtZW50LnRleHQuZW5nbGlzaCArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gO1xyXG4gICAgICAgICAgcmFkaW9CdXR0b24uSXNSZXF1aXJlZCA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvblxyXG4gICAgICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICByYWRpb0J1dHRvbi5Jc1JlYWRvbmx5ID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uO1xyXG4gICAgICAgICAgcmFkaW9CdXR0b24uVmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgICAgcmFkaW9CdXR0b24uSXNEaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5SZWFkb25seTtcclxuICAgICAgICAgIHJhZGlvQnV0dG9uLkxhYmVsRGVzY3JpcHRpb24gPVxyXG4gICAgICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgICA/IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5hcmFiaWNcclxuICAgICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG4gICAgICAgICAgbGV0IGRhdGFTb3VyY2VSYWRpbzogYW55W10gPSBbXTtcclxuICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBlbGVtZW50LnF1ZXN0aW9uT3B0aW9ucy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gZWxlbWVudC5xdWVzdGlvbk9wdGlvbnNbaW5kZXhdO1xyXG4gICAgICAgICAgICBsZXQgaXRlbTogYW55ID0ge307XHJcbiAgICAgICAgICAgIGl0ZW0uVmFsdWUgPSBvcHRpb24uaURfR1VJRDtcclxuICAgICAgICAgICAgaXRlbS5UZXh0ID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgICAgPyBvcHRpb24ubmFtZS5hcmFiaWNcclxuICAgICAgICAgICAgICA6IG9wdGlvbi5uYW1lLmVuZ2xpc2g7XHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2VSYWRpby5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmFkaW9CdXR0b24uSXRlbXMgPSBkYXRhU291cmNlUmFkaW87XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC52YWx1ZS5zZWxlY3RlZElEcylcclxuICAgICAgICAgICAgcmFkaW9CdXR0b24uVmFsdWUgPSBlbGVtZW50LnZhbHVlLnNlbGVjdGVkSURzWzBdO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbilcclxuICAgICAgICAgICAgdGhpcy5jaGVja0xpc3QucHVzaChyYWRpb0J1dHRvbik7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgICAgIFN1cnZleUZvcm1JdGVtQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmZpbGVkR3JvdXAsXHJcbiAgICAgICAgICAgIHJhZGlvQnV0dG9uLFxyXG4gICAgICAgICAgICBlbGVtZW50Lm9wdGlvbnMuc2l6ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5NdWx0aXBsZVNlbGVjdC50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgbGV0IE11bGlwbGVTZWxlY3QgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICBNdWxpcGxlU2VsZWN0Lk5hbWUgPSAncScgKyBlbGVtZW50LmlEX0dVSUQ7XHJcbiAgICAgICAgICBNdWxpcGxlU2VsZWN0LkhpZGVMYWJlbCA9IGZhbHNlO1xyXG4gICAgICAgICAgTXVsaXBsZVNlbGVjdC5MYWJlbEV4dHJhQ2xhc3NlcyA9IHRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIE11bGlwbGVTZWxlY3QuTGFiZWxWYWx1ZSA9XHJcbiAgICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICAgID8gZWxlbWVudC50ZXh0LmFyYWJpYyArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gXHJcbiAgICAgICAgICAgICAgOiBlbGVtZW50LnRleHQuZW5nbGlzaCArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gO1xyXG4gICAgICAgICAgTXVsaXBsZVNlbGVjdC5Jc1JlcXVpcmVkID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uXHJcbiAgICAgICAgICAgID8gZmFsc2VcclxuICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIE11bGlwbGVTZWxlY3QuSXNSZWFkb25seSA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbjtcclxuICAgICAgICAgIE11bGlwbGVTZWxlY3QuUGxhY2Vob2xkZXIgPVxyXG4gICAgICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0RlZmF1bHRPcHRpb25UZXh0Jyk7XHJcbiAgICAgICAgICBNdWxpcGxlU2VsZWN0LlZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgICAgIE11bGlwbGVTZWxlY3QuSXNEaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5SZWFkb25seTtcclxuICAgICAgICAgIE11bGlwbGVTZWxlY3QuTGFiZWxEZXNjcmlwdGlvbiA9XHJcbiAgICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICAgID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpY1xyXG4gICAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmVuZ2xpc2g7XHJcbiAgICAgICAgICBsZXQgbXVsdGlwbGVTZWxlY3REYXRhU291cmNlOiBEcm9wZG93bkxpc3RJdGVtW10gPSBbXTtcclxuICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBlbGVtZW50LnF1ZXN0aW9uT3B0aW9ucy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gZWxlbWVudC5xdWVzdGlvbk9wdGlvbnNbaW5kZXhdO1xyXG4gICAgICAgICAgICBsZXQgaXRlbTogYW55ID0ge307XHJcbiAgICAgICAgICAgIGl0ZW0ua2V5ID0gb3B0aW9uLmlEX0dVSUQ7XHJcbiAgICAgICAgICAgIGl0ZW0udmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgICA/IG9wdGlvbi5uYW1lLmFyYWJpY1xyXG4gICAgICAgICAgICAgIDogb3B0aW9uLm5hbWUuZW5nbGlzaDtcclxuICAgICAgICAgICAgbXVsdGlwbGVTZWxlY3REYXRhU291cmNlLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBNdWxpcGxlU2VsZWN0LkRhdGFTb3VyY2UgPSBtdWx0aXBsZVNlbGVjdERhdGFTb3VyY2U7XHJcbiAgICAgICAgICBNdWxpcGxlU2VsZWN0LlNpbmdsZVNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgTXVsaXBsZVNlbGVjdC5TaG93Q2hlY2tib3ggPSBmYWxzZTtcclxuICAgICAgICAgIE11bGlwbGVTZWxlY3QuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUuc2VsZWN0ZWRJRHMpXHJcbiAgICAgICAgICAgIE11bGlwbGVTZWxlY3QuU2VsZWN0ZWRJdGVtcyA9IGVsZW1lbnQudmFsdWUuc2VsZWN0ZWRJRHM7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uKVxyXG4gICAgICAgICAgICB0aGlzLmNoZWNrTGlzdC5wdXNoKE11bGlwbGVTZWxlY3QpO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8U3VydmV5Rm9ybUl0ZW1Db21wb25lbnQ+KFxyXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgICAgICBTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwLFxyXG4gICAgICAgICAgICBNdWxpcGxlU2VsZWN0LFxyXG4gICAgICAgICAgICBlbGVtZW50Lm9wdGlvbnMuc2l6ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5Db3VudHJ5LnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICBsZXQgQ291bnRyeSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgIENvdW50cnkuTmFtZSA9ICdxJyArIGVsZW1lbnQuaURfR1VJRDtcclxuICAgICAgICAgIENvdW50cnkuSGlkZUxhYmVsID0gZmFsc2U7XHJcbiAgICAgICAgICBDb3VudHJ5LkxhYmVsRXh0cmFDbGFzc2VzID0gdGhpcy5sYWJlbENsYXNzO1xyXG4gICAgICAgICAgQ291bnRyeS5MYWJlbFZhbHVlID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC50ZXh0LmFyYWJpYyArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gXHJcbiAgICAgICAgICAgIDogZWxlbWVudC50ZXh0LmVuZ2xpc2ggKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YDtcclxuICAgICAgICAgIENvdW50cnkuSXNSZXF1aXJlZCA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvblxyXG4gICAgICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBDb3VudHJ5LklzUmVhZG9ubHkgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb247XHJcbiAgICAgICAgICBDb3VudHJ5LlZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgICAgIENvdW50cnkuSXNEaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5SZWFkb25seTtcclxuICAgICAgICAgIENvdW50cnkuTGFiZWxEZXNjcmlwdGlvbiA9XHJcbiAgICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICAgID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpY1xyXG4gICAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmVuZ2xpc2g7XHJcbiAgICAgICAgICBDb3VudHJ5LlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICBDb3VudHJ5LlNob3dDaGVja2JveCA9IGZhbHNlO1xyXG4gICAgICAgICAgQ291bnRyeS5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgICAgICBDb3VudHJ5LkRhdGFTb3VyY2UgPSBlbGVtZW50Lm9wdGlvbnMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlLnNlbGVjdGVkSURzKVxyXG4gICAgICAgICAgICBDb3VudHJ5LlNlbGVjdGVkSXRlbXMgPSBlbGVtZW50LnZhbHVlLnNlbGVjdGVkSURzWzBdO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbikgdGhpcy5jaGVja0xpc3QucHVzaChDb3VudHJ5KTtcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFN1cnZleUZvcm1JdGVtQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZixcclxuICAgICAgICAgICAgU3VydmV5Rm9ybUl0ZW1Db21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZmlsZWRHcm91cCxcclxuICAgICAgICAgICAgQ291bnRyeSxcclxuICAgICAgICAgICAgZWxlbWVudC5vcHRpb25zLnNpemVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvL0ZpbGVVcGxvYWRcclxuICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuTXVsdGlGaWxlLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICBsZXQgTXVsdGlGaWxlID0gbmV3IEZpbGVVcGxvYWRPcHRpb25zKCk7XHJcbiAgICAgICAgICBNdWx0aUZpbGUuTmFtZSA9ICdxJyArIGVsZW1lbnQuaURfR1VJRDtcclxuICAgICAgICAgIE11bHRpRmlsZS5IaWRlTGFiZWwgPSBmYWxzZTtcclxuICAgICAgICAgIE11bHRpRmlsZS5MYWJlbEV4dHJhQ2xhc3NlcyA9IHRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIE11bHRpRmlsZS5MYWJlbFZhbHVlID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC50ZXh0LmFyYWJpYyArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gXHJcbiAgICAgICAgICAgIDogZWxlbWVudC50ZXh0LmVuZ2xpc2ggKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YDtcclxuICAgICAgICAgIE11bHRpRmlsZS5Jc1JlcXVpcmVkID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uXHJcbiAgICAgICAgICAgID8gZmFsc2VcclxuICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIE11bHRpRmlsZS5Jc1JlYWRvbmx5ID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uO1xyXG4gICAgICAgICAgTXVsdGlGaWxlLlZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgICAgIE11bHRpRmlsZS5Jc0Rpc2FibGVkID0gdGhpcy5vcHRpb25zLlJlYWRvbmx5O1xyXG4gICAgICAgICAgTXVsdGlGaWxlLkxhYmVsRGVzY3JpcHRpb24gPVxyXG4gICAgICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgICA/IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5hcmFiaWNcclxuICAgICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG4gICAgICAgICAgTXVsdGlGaWxlLk1heFNpemVGb3JBbGxGaWxlc0luTUIgPSBlbGVtZW50Lm9wdGlvbnMubWF4RmlsZVNpemVJbk1CO1xyXG4gICAgICAgICAgTXVsdGlGaWxlLk1heE5vT2ZGaWxlcyA9IGVsZW1lbnQub3B0aW9ucy5tYXhGaWxlQ291bnQ7XHJcbiAgICAgICAgICBNdWx0aUZpbGUuSXNNdWx0aXBsZUZpbGUgPSB0cnVlO1xyXG4gICAgICAgICAgbGV0IGFjY2VwdGVkVHlwZXM6IEZpbGVUeXBlW10gPSBbXTtcclxuICAgICAgICAgIGZvciAoXHJcbiAgICAgICAgICAgIGxldCBpbmRleCA9IDA7XHJcbiAgICAgICAgICAgIGluZGV4IDwgZWxlbWVudC5vcHRpb25zLmFsbG93ZWRFeHRlbnNpb25zLmxlbmd0aDtcclxuICAgICAgICAgICAgaW5kZXgrK1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRWYWx1ZSA9IGVsZW1lbnQub3B0aW9ucy5hbGxvd2VkRXh0ZW5zaW9uc1tpbmRleF07XHJcbiAgICAgICAgICAgIHN3aXRjaCAoZWxlbWVudFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgY2FzZSAnMCc6XHJcbiAgICAgICAgICAgICAgICBhY2NlcHRlZFR5cGVzLnB1c2goRmlsZVR5cGUuUERGKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgJzEnOlxyXG4gICAgICAgICAgICAgICAgYWNjZXB0ZWRUeXBlcy5wdXNoKEZpbGVUeXBlLldvcmQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAnMic6XHJcbiAgICAgICAgICAgICAgICBhY2NlcHRlZFR5cGVzLnB1c2goRmlsZVR5cGUuRXhjZWwpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAnMyc6XHJcbiAgICAgICAgICAgICAgICBhY2NlcHRlZFR5cGVzLnB1c2goRmlsZVR5cGUuSW1hZ2VUeXBlcyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBjYXNlICcxNSc6XHJcbiAgICAgICAgICAgICAgICBhY2NlcHRlZFR5cGVzLnB1c2goRmlsZVR5cGUuUG93ZXJQb2ludCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIE11bHRpRmlsZS5GaWxlVXBsb2FkQWNjZXB0c1R5cGVzID0gYWNjZXB0ZWRUeXBlcztcclxuICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlLmZpbGVDb3JyZWxhdGlvbkRUTykge1xyXG4gICAgICAgICAgICBsZXQgbW9kZWwgPSB0aGlzLnRvQ2FtZWwoZWxlbWVudC52YWx1ZS5maWxlQ29ycmVsYXRpb25EVE8pO1xyXG4gICAgICAgICAgICBNdWx0aUZpbGUuVmFsdWUgPSBtb2RlbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb24pIHRoaXMuY2hlY2tMaXN0LnB1c2goTXVsdGlGaWxlKTtcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFN1cnZleUZvcm1JdGVtQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZixcclxuICAgICAgICAgICAgU3VydmV5Rm9ybUl0ZW1Db21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZmlsZWRHcm91cCxcclxuICAgICAgICAgICAgTXVsdGlGaWxlLFxyXG4gICAgICAgICAgICBlbGVtZW50Lm9wdGlvbnMuc2l6ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5GaWxlLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICBsZXQgRmlsZSA9IG5ldyBGaWxlVXBsb2FkT3B0aW9ucygpO1xyXG4gICAgICAgICAgRmlsZS5OYW1lID0gJ3EnICsgZWxlbWVudC5pRF9HVUlEO1xyXG4gICAgICAgICAgRmlsZS5IaWRlTGFiZWwgPSBmYWxzZTtcclxuICAgICAgICAgIEZpbGUuTGFiZWxFeHRyYUNsYXNzZXMgPSB0aGlzLmxhYmVsQ2xhc3M7XHJcbiAgICAgICAgICBGaWxlLkxhYmVsVmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgPyBlbGVtZW50LnRleHQuYXJhYmljICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWBcclxuICAgICAgICAgICAgOiBlbGVtZW50LnRleHQuZW5nbGlzaCArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gO1xyXG4gICAgICAgICAgRmlsZS5Jc1JlcXVpcmVkID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uXHJcbiAgICAgICAgICAgID8gZmFsc2VcclxuICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIEZpbGUuSXNSZWFkb25seSA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbjtcclxuICAgICAgICAgIEZpbGUuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgICAgRmlsZS5Jc0Rpc2FibGVkID0gdGhpcy5vcHRpb25zLlJlYWRvbmx5O1xyXG4gICAgICAgICAgRmlsZS5MYWJlbERlc2NyaXB0aW9uID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpY1xyXG4gICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG4gICAgICAgICAgRmlsZS5GaWxlTWF4U2l6ZUluTUIgPSBlbGVtZW50Lm9wdGlvbnMubWF4RmlsZVNpemVJbk1CO1xyXG5cclxuICAgICAgICAgIGxldCBhY2NlcHRlZFR5cGVzRmlsZTogRmlsZVR5cGVbXSA9IFtdO1xyXG4gICAgICAgICAgZGVidWdnZXI7XHJcbiAgICAgICAgICBmb3IgKFxyXG4gICAgICAgICAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgICAgICAgICBpbmRleCA8IGVsZW1lbnQub3B0aW9ucy5hbGxvd2VkRXh0ZW5zaW9ucy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGluZGV4KytcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50VmFsdWUgPSBlbGVtZW50Lm9wdGlvbnMuYWxsb3dlZEV4dGVuc2lvbnNbaW5kZXhdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGVsZW1lbnRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgIGNhc2UgJzAnOlxyXG4gICAgICAgICAgICAgICAgYWNjZXB0ZWRUeXBlc0ZpbGUucHVzaChGaWxlVHlwZS5QREYpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAnMSc6XHJcbiAgICAgICAgICAgICAgICBhY2NlcHRlZFR5cGVzRmlsZS5wdXNoKEZpbGVUeXBlLldvcmQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAnMic6XHJcbiAgICAgICAgICAgICAgICBhY2NlcHRlZFR5cGVzRmlsZS5wdXNoKEZpbGVUeXBlLkV4Y2VsKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgJzMnOlxyXG4gICAgICAgICAgICAgICAgYWNjZXB0ZWRUeXBlc0ZpbGUucHVzaChGaWxlVHlwZS5JbWFnZVR5cGVzKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgJzE1JzpcclxuICAgICAgICAgICAgICAgIGFjY2VwdGVkVHlwZXNGaWxlLnB1c2goRmlsZVR5cGUuUG93ZXJQb2ludCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlLmZpbGVEVE8pIHtcclxuICAgICAgICAgICAgbGV0IG1vZGVsID0gdGhpcy50b0NhbWVsKGVsZW1lbnQudmFsdWUuZmlsZURUTykgYXMgRmlsZURUTztcclxuICAgICAgICAgICAgRmlsZS5WYWx1ZSA9IG1vZGVsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgRmlsZS5GaWxlVXBsb2FkQWNjZXB0c1R5cGVzID0gYWNjZXB0ZWRUeXBlc0ZpbGU7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uKSB0aGlzLmNoZWNrTGlzdC5wdXNoKEZpbGUpO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8U3VydmV5Rm9ybUl0ZW1Db21wb25lbnQ+KFxyXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgICAgICBTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwLFxyXG4gICAgICAgICAgICBGaWxlLFxyXG4gICAgICAgICAgICBlbGVtZW50Lm9wdGlvbnMuc2l6ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vSW1hZ2VVcGxvYWRcclxuICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuSW1hZ2UudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgIGxldCBJbWFnZSA9IG5ldyBJbWFnZVVwbG9hZE9wdGlvbnMoKTtcclxuICAgICAgICAgIEltYWdlLk5hbWUgPSAncScgKyBlbGVtZW50LmlEX0dVSUQ7XHJcbiAgICAgICAgICBJbWFnZS5IaWRlTGFiZWwgPSBmYWxzZTtcclxuICAgICAgICAgIEltYWdlLkxhYmVsRXh0cmFDbGFzc2VzID0gdGhpcy5sYWJlbENsYXNzO1xyXG4gICAgICAgICAgSW1hZ2UuTGFiZWxWYWx1ZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICA/IGVsZW1lbnQudGV4dC5hcmFiaWMgKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YFxyXG4gICAgICAgICAgICA6IGVsZW1lbnQudGV4dC5lbmdsaXNoICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWA7XHJcbiAgICAgICAgICBJbWFnZS5Jc1JlcXVpcmVkID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uXHJcbiAgICAgICAgICAgID8gZmFsc2VcclxuICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIEltYWdlLklzUmVhZG9ubHkgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb247XHJcbiAgICAgICAgICBJbWFnZS5WaWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuVmVydGljYWw7XHJcbiAgICAgICAgICBJbWFnZS5Jc0Rpc2FibGVkID0gdGhpcy5vcHRpb25zLlJlYWRvbmx5O1xyXG4gICAgICAgICAgSW1hZ2UuTGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICA/IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5hcmFiaWNcclxuICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuZGVzY3JpcHRpb24uZW5nbGlzaDtcclxuICAgICAgICAgIGlmIChlbGVtZW50Lm9wdGlvbnMubWF4RmlsZVNpemVJbk1CKVxyXG4gICAgICAgICAgICBJbWFnZS5GaWxlTWF4U2l6ZUluTUIgPSBlbGVtZW50Lm9wdGlvbnMubWF4RmlsZVNpemVJbk1CO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbikgdGhpcy5jaGVja0xpc3QucHVzaChJbWFnZSk7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC52YWx1ZS5maWxlRFRPKSBJbWFnZS5WYWx1ZSA9IGVsZW1lbnQudmFsdWUuZmlsZURUTztcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFN1cnZleUZvcm1JdGVtQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZixcclxuICAgICAgICAgICAgU3VydmV5Rm9ybUl0ZW1Db21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZmlsZWRHcm91cCxcclxuICAgICAgICAgICAgSW1hZ2UsXHJcbiAgICAgICAgICAgIGVsZW1lbnQub3B0aW9ucy5zaXplXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy9NdWx0aWxpbmVUZXh0XHJcbiAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLk11bHRpbGluZVRleHQudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgIGxldCBNdWx0aWxpbmVUZXh0ID0gbmV3IFRleHRBcmVhT3B0aW9ucygpO1xyXG4gICAgICAgICAgTXVsdGlsaW5lVGV4dC5OYW1lID0gJ3EnICsgZWxlbWVudC5pRF9HVUlEO1xyXG4gICAgICAgICAgTXVsdGlsaW5lVGV4dC5IaWRlTGFiZWwgPSBmYWxzZTtcclxuICAgICAgICAgIE11bHRpbGluZVRleHQuTGFiZWxFeHRyYUNsYXNzZXMgPSB0aGlzLmxhYmVsQ2xhc3M7XHJcbiAgICAgICAgICBNdWx0aWxpbmVUZXh0LkxhYmVsVmFsdWUgPVxyXG4gICAgICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgICA/IGVsZW1lbnQudGV4dC5hcmFiaWMgKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YFxyXG4gICAgICAgICAgICAgIDogZWxlbWVudC50ZXh0LmVuZ2xpc2ggKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YDtcclxuICAgICAgICAgIE11bHRpbGluZVRleHQuSXNSZXF1aXJlZCA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvblxyXG4gICAgICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBNdWx0aWxpbmVUZXh0LklzUmVhZG9ubHkgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb247XHJcbiAgICAgICAgICBNdWx0aWxpbmVUZXh0LlZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgICAgIE11bHRpbGluZVRleHQuSXNEaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5SZWFkb25seTtcclxuICAgICAgICAgIE11bHRpbGluZVRleHQuTGFiZWxEZXNjcmlwdGlvbiA9XHJcbiAgICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICAgID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpY1xyXG4gICAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmVuZ2xpc2g7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5vcHRpb25zLm1heExlbmd0aClcclxuICAgICAgICAgICAgTXVsdGlsaW5lVGV4dC5NYXhMZW5ndGggPSBlbGVtZW50Lm9wdGlvbnMubWF4TGVuZ3RoO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQub3B0aW9ucy5taW5MZW5ndGgpXHJcbiAgICAgICAgICAgIE11bHRpbGluZVRleHQuTWluTGVuZ3RoID0gZWxlbWVudC5vcHRpb25zLm1pbkxlbmd0aDtcclxuICAgICAgICAgIE11bHRpbGluZVRleHQuUm93cyA9IGVsZW1lbnQub3B0aW9ucy5yb3dzO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUudGV4dCkgTXVsdGlsaW5lVGV4dC5WYWx1ZSA9IGVsZW1lbnQudmFsdWUudGV4dDtcclxuICAgICAgICAgIGlmIChlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb24pXHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0LnB1c2goTXVsdGlsaW5lVGV4dCk7XHJcbiAgICAgICAgICBNdWx0aWxpbmVUZXh0LkZvcmNlRGlyZWN0aW9uID1cclxuICAgICAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgICAgPyBGb3JjZURpcmVjdGlvbi5BcmFiaWNcclxuICAgICAgICAgICAgICA6IEZvcmNlRGlyZWN0aW9uLkVuZ2xpc2g7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgICAgIFN1cnZleUZvcm1JdGVtQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmZpbGVkR3JvdXAsXHJcbiAgICAgICAgICAgIE11bHRpbGluZVRleHQsXHJcbiAgICAgICAgICAgIGVsZW1lbnQub3B0aW9ucy5zaXplXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy9IVE1MXHJcbiAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLkJvb2xlYW4udG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgIGxldCBCb29sZWFuID0gbmV3IFRvZ2dsZVNsaWRlT3B0aW9ucygpO1xyXG4gICAgICAgICAgQm9vbGVhbi5OYW1lID0gJ3EnICsgZWxlbWVudC5pRF9HVUlEO1xyXG4gICAgICAgICAgQm9vbGVhbi5MYWJlbEV4dHJhQ2xhc3NlcyA9IHRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIEJvb2xlYW4uVmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgICAgQm9vbGVhbi5Jc1JlYWRvbmx5ID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uO1xyXG4gICAgICAgICAgQm9vbGVhbi5Jc0Rpc2FibGVkID0gdGhpcy5vcHRpb25zLlJlYWRvbmx5O1xyXG4gICAgICAgICAgQm9vbGVhbi5IaWRlTGFiZWwgPSBmYWxzZTtcclxuICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlLmJvb2xlYW4pIEJvb2xlYW4uVmFsdWUgPSBlbGVtZW50LnZhbHVlLmJvb2xlYW47XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uKSB0aGlzLmNoZWNrTGlzdC5wdXNoKEJvb2xlYW4pO1xyXG4gICAgICAgICAgQm9vbGVhbi5MYWJlbFZhbHVlID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC50ZXh0LmFyYWJpYyArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gXHJcbiAgICAgICAgICAgIDogZWxlbWVudC50ZXh0LmVuZ2xpc2ggKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YDtcclxuICAgICAgICAgIEJvb2xlYW4uTGFiZWxEZXNjcmlwdGlvbiA9XHJcbiAgICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICAgID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpY1xyXG4gICAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmVuZ2xpc2g7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgICAgIFN1cnZleUZvcm1JdGVtQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmZpbGVkR3JvdXAsXHJcbiAgICAgICAgICAgIEJvb2xlYW4sXHJcbiAgICAgICAgICAgIGVsZW1lbnQub3B0aW9ucy5zaXplXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy9Mb2NhdGlvblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5SZWFkb25seSlcclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuY2hlY2tMaXN0Lmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrTGlzdFtpbmRleF0uVmFsdWUpIHtcclxuICAgICAgICAgIHRoaXMuY2hlY2tMaXN0W2luZGV4XS5Jc1JlYWRvbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgdGhpcy5maWxlZEdyb3VwLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKGVzKSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuZmlsZWRHcm91cCk7XHJcbiAgICAgIHRoaXMucmVzdWx0ID0gW107XHJcbiAgICAgIHRoaXMuc2hvd2VkQ2hpbGRRdWVzdGlvbiA9IFtdO1xyXG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmZpbGVkR3JvdXAuY29udHJvbHMpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5maWxlZEdyb3VwLmNvbnRyb2xzLCBrZXkpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBsZXQgc2NvcmUgPSAwO1xyXG4gICAgICAgICAgbGV0IGVsZW1lbnQgPSB0aGlzLmZpbGVkR3JvdXAuY29udHJvbHNba2V5XTtcclxuICAgICAgICAgIGxldCBpZCA9IGtleS5yZXBsYWNlKCdxJywgJycpO1xyXG4gICAgICAgICAgdmFyIGZpbHRlcmVkSXRlbSA9IHRoaXMub3B0aW9ucy5RdWVzdGlvbkxpc3QuZmlsdGVyKFxyXG4gICAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5pRF9HVUlEID09IGlkXHJcbiAgICAgICAgICApWzBdO1xyXG5cclxuICAgICAgICAgIGxldCBpdGVtID0gbmV3IFN1cnZleUZpbGVkVmFsdWVEVE8oKTtcclxuICAgICAgICAgIGl0ZW0uUXVlc3Rpb25GaWVsZElEID0gaWQ7XHJcbiAgICAgICAgICBpdGVtLlF1ZXN0aW9uVHlwZUl0ZW1JRCA9IGZpbHRlcmVkSXRlbS5xdWVzdGlvblR5cGVJdGVtSUQ7XHJcbiAgICAgICAgICBzd2l0Y2ggKGZpbHRlcmVkSXRlbS5xdWVzdGlvblR5cGVJdGVtSUQpIHtcclxuICAgICAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLlRleHQudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgICAgICBpdGVtLlRleHQgPSBlbGVtZW50LnZhbHVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuRW1haWwudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgICAgICBpdGVtLlRleHQgPSBlbGVtZW50LnZhbHVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuTnVtYmVyLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICAgICAgaXRlbS5UZXh0ID0gZWxlbWVudC52YWx1ZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLk11bHRpbGluZVRleHQudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgICAgICBpdGVtLlRleHQgPSBlbGVtZW50LnZhbHVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuQm9vbGVhbi50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgICAgIGl0ZW0uQm9vbGVhbiA9IGVsZW1lbnQudmFsdWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5EYXRlLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICAgICAgaXRlbS5EYXRlVGltZSA9IGVsZW1lbnQudmFsdWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuRGF0ZVRpbWUudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgICAgICBpdGVtLkRhdGVUaW1lID0gZWxlbWVudC52YWx1ZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLlNpbmdsZVNlbGVjdC50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgICAgIGl0ZW0uU2VsZWN0ZWRJRHMgPSBbZWxlbWVudC52YWx1ZV07XHJcbiAgICAgICAgICAgICAgdGhpcy5hZGRTaG93ZWRDaGlsZFF1ZXN0aW9ucyhlbGVtZW50LnZhbHVlKTtcclxuICAgICAgICAgICAgICBkZWJ1Z2dlcjtcclxuICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRJdGVtLmlzQWxsb3dTY29yaW5nKVxyXG4gICAgICAgICAgICAgICAgc2NvcmUgPSBmaWx0ZXJlZEl0ZW0ucXVlc3Rpb25PcHRpb25zLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgKGl0ZW0pID0+IGl0ZW0uaURfR1VJRCA9PSBlbGVtZW50LnZhbHVlXHJcbiAgICAgICAgICAgICAgICApWzBdPy5zY29yZVxyXG4gICAgICAgICAgICAgICAgICA/IGZpbHRlcmVkSXRlbS5xdWVzdGlvbk9wdGlvbnM/LmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5pRF9HVUlEID09IGVsZW1lbnQudmFsdWVcclxuICAgICAgICAgICAgICAgICAgKVswXS5zY29yZVxyXG4gICAgICAgICAgICAgICAgICA6IDA7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5SYWRpb0J1dHRvbi50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgICAgIGl0ZW0uU2VsZWN0ZWRJRHMgPSBbZWxlbWVudC52YWx1ZV07XHJcbiAgICAgICAgICAgICAgdGhpcy5hZGRTaG93ZWRDaGlsZFF1ZXN0aW9ucyhlbGVtZW50LnZhbHVlKTtcclxuICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRJdGVtLmlzQWxsb3dTY29yaW5nKVxyXG4gICAgICAgICAgICAgICAgc2NvcmUgPSBmaWx0ZXJlZEl0ZW0ucXVlc3Rpb25PcHRpb25zLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgKGl0ZW0pID0+IGl0ZW0uaURfR1VJRCA9PSBlbGVtZW50LnZhbHVlXHJcbiAgICAgICAgICAgICAgICApWzBdPy5zY29yZVxyXG4gICAgICAgICAgICAgICAgICA/IGZpbHRlcmVkSXRlbS5xdWVzdGlvbk9wdGlvbnM/LmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5pRF9HVUlEID09IGVsZW1lbnQudmFsdWVcclxuICAgICAgICAgICAgICAgICAgKVswXS5zY29yZVxyXG4gICAgICAgICAgICAgICAgICA6IDA7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5NdWx0aXBsZVNlbGVjdC50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgICAgIGl0ZW0uU2VsZWN0ZWRJRHMgPSBlbGVtZW50LnZhbHVlO1xyXG4gICAgICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlKVxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGVsZW1lbnQudmFsdWUubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBlbGVtZW50LnZhbHVlW2luZGV4XTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5hZGRTaG93ZWRDaGlsZFF1ZXN0aW9ucyhpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlcmVkSXRlbS5pc0FsbG93U2NvcmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzY29yZVZhbHVlID0gZmlsdGVyZWRJdGVtLnF1ZXN0aW9uT3B0aW9ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAoaXRlbU9wdGlvbnMpID0+IGl0ZW1PcHRpb25zLmlEX0dVSUQgPT0gaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgIClbMF0/LnNjb3JlXHJcbiAgICAgICAgICAgICAgICAgICAgICA/IGZpbHRlcmVkSXRlbS5xdWVzdGlvbk9wdGlvbnM/LmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW1PcHRpb25zKSA9PiBpdGVtT3B0aW9ucy5pRF9HVUlEID09IGl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgIClbMF0uc2NvcmVcclxuICAgICAgICAgICAgICAgICAgICAgIDogMDtcclxuICAgICAgICAgICAgICAgICAgICBzY29yZSA9IHNjb3JlVmFsdWUgKyBzY29yZTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuQ291bnRyeS50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgICAgIGl0ZW0uU2VsZWN0ZWRJRHMgPSBbZWxlbWVudC52YWx1ZV07XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5JbWFnZS50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgICAgIGl0ZW0uRmlsZURUTyA9IGVsZW1lbnQudmFsdWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5GaWxlLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUpXHJcbiAgICAgICAgICAgICAgICBpdGVtLkZpbGVEVE8gPSBlbGVtZW50LnZhbHVlLkZpbGVcclxuICAgICAgICAgICAgICAgICAgPyBlbGVtZW50LnZhbHVlLkZpbGVcclxuICAgICAgICAgICAgICAgICAgOiBlbGVtZW50LnZhbHVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuTXVsdGlGaWxlLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICAgICAgaXRlbS5GaWxlQ29ycmVsYXRpb25EVE8gPSBlbGVtZW50LnZhbHVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZmlsdGVyZWRJdGVtLnZhbHVlID0gaXRlbTtcclxuICAgICAgICAgIGZpbHRlcmVkSXRlbS52YWx1ZS5zY29yZSA9IHNjb3JlO1xyXG4gICAgICAgICAgdGhpcy5yZXN1bHQucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5vcHRpb25zLlZhbHVlc0xpc3QgPSB0aGlzLnJlc3VsdDtcclxuICAgICAgdGhpcy5jaGFuZ2VIaWRkZW5RdWVzdGlvbnNTdGF0dXMoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYWRkU2hvd2VkQ2hpbGRRdWVzdGlvbnMobmV3S2V5KSB7XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5vcHRpb25zLlF1ZXN0aW9uTGlzdC5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgdmFyIHF1ZXN0aW9uT3B0aW9uID0gdGhpcy5vcHRpb25zLlF1ZXN0aW9uTGlzdFtpbmRleF0ucXVlc3Rpb25PcHRpb25zO1xyXG4gICAgICBsZXQgT3B0aW9uID0gcXVlc3Rpb25PcHRpb24uZmlsdGVyKCh4KSA9PiB4LmlEX0dVSUQgPT09IG5ld0tleSlbMF07XHJcbiAgICAgIGlmIChPcHRpb24gJiYgT3B0aW9uPy5saW5rZWRRdWVzdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBPcHRpb24ubGlua2VkUXVlc3Rpb25zLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgY29uc3QgbGlua2VkUXVlc3Rpb24gPSBPcHRpb24ubGlua2VkUXVlc3Rpb25zW2luZGV4XTtcclxuICAgICAgICAgIGxldCBjaGVja0lzUXVlc3Rpb25FeGlzdCA9IHRoaXMuc2hvd2VkQ2hpbGRRdWVzdGlvbi5zb21lKFxyXG4gICAgICAgICAgICAoeCkgPT4geCA9PT0gYHEke2xpbmtlZFF1ZXN0aW9ufWBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpZiAoIWNoZWNrSXNRdWVzdGlvbkV4aXN0KVxyXG4gICAgICAgICAgICB0aGlzLnNob3dlZENoaWxkUXVlc3Rpb24ucHVzaChgcSR7bGlua2VkUXVlc3Rpb259YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VIaWRkZW5RdWVzdGlvbnNTdGF0dXMoKSB7XHJcbiAgICBsZXQgcXVlc3Rpb25zID0gdGhpcy5zaG93ZWRDaGlsZFF1ZXN0aW9uO1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuY2hlY2tMaXN0Lmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBsZXQgY2hlY2tJZkV4aXN0ID0gdGhpcy5zaG93ZWRDaGlsZFF1ZXN0aW9uLnNvbWUoXHJcbiAgICAgICAgKHgpID0+IHggPT09IHRoaXMuY2hlY2tMaXN0W2luZGV4XS5OYW1lXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChjaGVja0lmRXhpc3QpIHtcclxuICAgICAgICBsZXQgcXVlc3Rpb25JZCA9IHRoaXMuY2hlY2tMaXN0W2luZGV4XS5OYW1lLnJlcGxhY2UoJ3EnLCAnJyk7XHJcbiAgICAgICAgbGV0IFF1ZXN0aW9uID0gdGhpcy5vcHRpb25zLlF1ZXN0aW9uTGlzdC5maWx0ZXIoXHJcbiAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5pRF9HVUlEID09IHF1ZXN0aW9uSWRcclxuICAgICAgICApWzBdO1xyXG4gICAgICAgIHRoaXMuY2hlY2tMaXN0W2luZGV4XS5Jc1JlYWRvbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKFF1ZXN0aW9uLm9wdGlvbnMuaXNSZXF1aXJlZCAmJiAhdGhpcy5jaGVja0xpc3RbaW5kZXhdLklzUmVxdWlyZWQpIHtcclxuICAgICAgICAgIHRoaXMuY2hlY2tMaXN0W2luZGV4XS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuZmlsZWRHcm91cFxyXG4gICAgICAgICAgICAuZ2V0KHRoaXMuY2hlY2tMaXN0W2luZGV4XS5OYW1lKVxyXG4gICAgICAgICAgICAuYWRkVmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwLmdldCh0aGlzLmNoZWNrTGlzdFtpbmRleF0uTmFtZSkudmFsdWUgPT0gbnVsbCB8fFxyXG4gICAgICAgICAgICB0aGlzLmZpbGVkR3JvdXAuZ2V0KHRoaXMuY2hlY2tMaXN0W2luZGV4XS5OYW1lKS52YWx1ZSA9PVxyXG4gICAgICAgICAgICB1bmRlZmluZWQgfHxcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwLmdldCh0aGlzLmNoZWNrTGlzdFtpbmRleF0uTmFtZSkudmFsdWUgPT0gJydcclxuICAgICAgICAgIClcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwXHJcbiAgICAgICAgICAgICAgLmdldCh0aGlzLmNoZWNrTGlzdFtpbmRleF0uTmFtZSlcclxuICAgICAgICAgICAgICAuc2V0RXJyb3JzKHsgcmVxdWlyZWQ6IHRydWUgfSk7XHJcbiAgICAgICAgICBlbHNlIHRoaXMuZmlsZWRHcm91cC5nZXQodGhpcy5jaGVja0xpc3RbaW5kZXhdLk5hbWUpLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jaGVja0xpc3RbaW5kZXhdLklzUmVhZG9ubHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY2hlY2tMaXN0W2luZGV4XS5Jc1JlcXVpcmVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jaGVja0xpc3RbaW5kZXhdLlZhbHVlID0gbnVsbDtcclxuICAgICAgICB0aGlzLmZpbGVkR3JvdXAuY29udHJvbHNbdGhpcy5jaGVja0xpc3RbaW5kZXhdLk5hbWVdLnJlbW92ZVZhbGlkYXRvcnMoXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpbGVkR3JvdXAuZ2V0KHRoaXMuY2hlY2tMaXN0W2luZGV4XS5OYW1lKS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvQ2FtZWwgPSAob2JqKSA9PiB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XHJcbiAgICAgIHJldHVybiBvYmoubWFwKCh2KSA9PiB0aGlzLnRvQ2FtZWwodikpO1xyXG4gICAgfSBlbHNlIGlmIChvYmogIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xyXG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5yZWR1Y2VSaWdodChcclxuICAgICAgICAocmVzdWx0LCBrZXkpID0+ICh7XHJcbiAgICAgICAgICAuLi5yZXN1bHQsXHJcbiAgICAgICAgICBbKGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKSB8fCBrZXkpLnRvU3RyaW5nKCldOlxyXG4gICAgICAgICAgICB0aGlzLnRvQ2FtZWwob2JqW2tleV0pLFxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHt9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JqO1xyXG4gIH07XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInN1cnZleS1wcmV2aWV3XCI+XHJcbiAgICA8bmctdGVtcGxhdGUgYWRIb3N0PjwvbmctdGVtcGxhdGU+XHJcbjwvZGl2PlxyXG5cclxuIl19
696
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VydmV5LWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy9zaGFyZWQvY29tcG9uZW50cy9zdXJ2ZXktZm9ybS9zdXJ2ZXktZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL3NoYXJlZC9jb21wb25lbnRzL3N1cnZleS1mb3JtL3N1cnZleS1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRixPQUFPLEVBQ0wsYUFBYSxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUFvQixlQUFlLEVBQ2pGLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFDL0Ysa0JBQWtCLEVBQUUsV0FBVyxFQUEwQixVQUFVLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFDL0YsY0FBYyxFQUFFLGtCQUFrQixFQUNuQyxNQUFNLHlCQUF5QixDQUFDO0FBR2pDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRW5GLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQzs7Ozs7O0FBT3pGLE1BQU0sT0FBTyxt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QUFDLGtCQUFrQixDQUFDLGtFQUtwQixXQUFXLHdGQUNYLHFCQUFxQixtRkFXckIsTUFBTSxnRENwQ25CLDRGQUlBOzsyRkRpQmEsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGFBQWEsYUFFWixDQUFDLGtCQUFrQixDQUFDO2tMQUd0QixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNvQyxNQUFNO3NCQUEvQyxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRWhDLE9BQU87c0JBRGQsU0FBUzt1QkFBQyxxQkFBcUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBV2hDLGdCQUFnQjtzQkFBbEMsU0FBUzt1QkFBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtR3JvdXBEaXJlY3RpdmUsIE5nRm9ybSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtcclxuICBDb250cm9sTGF5b3V0LCBEYXRlUGlja2VyT3B0aW9ucywgRHJvcGRvd25MaXN0Q29tcG9uZW50LCBEcm9wZG93bkxpc3RJdGVtLCBEcm9wZG93bk9wdGlvbnMsXHJcbiAgRmlsZURUTywgRmlsZVR5cGUsIEZpbGVVcGxvYWRPcHRpb25zLCBGb3JjZURpcmVjdGlvbiwgSW1hZ2VVcGxvYWRPcHRpb25zLCBJbnB1dFR5cGUsIFBpY2tlclR5cGUsXHJcbiAgUmFkaW9CdXR0b25PcHRpb25zLCBSYW5nZU51bWJlciwgUmVuZGVyQ29tcG9uZW50U2VydmljZSwgU2VsZWN0TW9kZSwgU3RhcnRWaWV3LCBUZXh0QXJlYU9wdGlvbnMsXHJcbiAgVGV4dEJveE9wdGlvbnMsIFRvZ2dsZVNsaWRlT3B0aW9uc1xyXG59IGZyb20gJ0BibnNpZ2h0cy9iYnNmLWNvbnRyb2xzJztcclxuaW1wb3J0IHsgVXRpbGl0eVNlcnZpY2UgfSBmcm9tICdAYm5zaWdodHMvYmJzZi11dGlsaXRpZXMnO1xyXG5cclxuaW1wb3J0IHsgU3VydmV5T3B0aW9uVHlwZSB9IGZyb20gJy4uLy4uL0VudW1zL0VudW1zJztcclxuaW1wb3J0IHsgU3VydmV5RmlsZWRWYWx1ZURUTyB9IGZyb20gJy4uLy4uL21vZGVscy9TdXJ2ZXlNb2RlbHMvc3VydmV5LWZpbGVkLXZhbHVlJztcclxuaW1wb3J0IHsgU3VydmV5Rm9ybU9wdGlvbnMgfSBmcm9tICcuLi8uLi9tb2RlbHMvU3VydmV5TW9kZWxzL3N1cnZleS1mb3JtLW9wdGlvbnMnO1xyXG5pbXBvcnQgeyBBZERpcmVjdGl2ZSB9IGZyb20gJy4uL0FkRGlyZWN0aXZlJztcclxuaW1wb3J0IHsgU3VydmV5Rm9ybUl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9zdXJ2ZXktZm9ybS1pdGVtL3N1cnZleS1mb3JtLWl0ZW0uY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc3VydmV5LWZvcm0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zdXJ2ZXktZm9ybS5jb21wb25lbnQuaHRtbCcsXHJcbiAgcHJvdmlkZXJzOiBbRm9ybUdyb3VwRGlyZWN0aXZlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFN1cnZleUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIGdyb3VwOiBGb3JtR3JvdXA7XHJcbiAgQElucHV0KCkgb3B0aW9uczogU3VydmV5Rm9ybU9wdGlvbnM7XHJcbiAgQFZpZXdDaGlsZChBZERpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgYWRIb3N0ITogQWREaXJlY3RpdmU7XHJcbiAgQFZpZXdDaGlsZChEcm9wZG93bkxpc3RDb21wb25lbnQsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIHByaXZhdGUgbXlDaGlsZDogRHJvcGRvd25MaXN0Q29tcG9uZW50O1xyXG5cclxuICBmaWxlZEdyb3VwOiBGb3JtR3JvdXA7XHJcbiAgcmVzdWx0OiBTdXJ2ZXlGaWxlZFZhbHVlRFRPW10gPSBbXTtcclxuICBjaGlsZElkTGlzdDogc3RyaW5nW10gPSBbXTtcclxuICBjaGlsZFF1ZXN0aW9uTGlzdDogYW55W10gPSBbXTtcclxuICBhcmVhT2ZGb2N1c0NvbnRyb2xOYW1lOiBzdHJpbmc7XHJcbiAgY2hhbGxlbmdlQ29udHJvbE5hbWU6IHN0cmluZztcclxuICBhcmVhT2ZGb2N1c0NvbnRyb2xJbmRleCA9IDA7XHJcbiAgY2hhbGxlbmdlQ29udHJvbEluZGV4ID0gMDtcclxuICBAVmlld0NoaWxkKE5nRm9ybSkgZG9jdW1lbnRFZGl0Rm9ybSE6IE5nRm9ybTtcclxuICBpc0RlbGV0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNoZWNrTGlzdDogYW55W10gPSBbXTtcclxuICBzaG93ZWRDaGlsZFF1ZXN0aW9uOiBhbnlbXSA9IFtdO1xyXG4gIFRleHRDb250ZXh0OiBhbnk7XHJcbiAgaXNGaXJzdFZhbGlkOiBib29sZWFuID0gdHJ1ZTtcclxuICBsYWJlbENsYXNzOiBzdHJpbmcgPSAnVGVzdHRzYWRmdic7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSByZW5kZXJDb21wb25lbnRTZXJ2aWNlOiBSZW5kZXJDb21wb25lbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1dGlsaXR5U2VydmljZTogVXRpbGl0eVNlcnZpY2UsXHJcbiAgICBwdWJsaWMgVGV4dENvbnRyb2xIb3N0OiBGb3JtR3JvdXBEaXJlY3RpdmVcclxuICApIHsgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3Qgdmlld0NvbnRhaW5lclJlZiA9IHRoaXMuYWRIb3N0LnZpZXdDb250YWluZXJSZWY7XHJcbiAgICB2aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XHJcbiAgICB0aGlzLmZpbGVkR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgIHRoaXMuZ3JvdXAuYWRkQ29udHJvbCh0aGlzLm9wdGlvbnMuTmFtZSwgdGhpcy5maWxlZEdyb3VwKTtcclxuXHJcbiAgICB0aGlzLmdyb3VwLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdHcm91cCcsIGUpO1xyXG4gICAgfSk7XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5vcHRpb25zLlF1ZXN0aW9uTGlzdC5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLm9wdGlvbnMuUXVlc3Rpb25MaXN0W2luZGV4XTtcclxuXHJcbiAgICAgIHN3aXRjaCAoZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUQpIHtcclxuICAgICAgICAvLy9UZXh0Qm94XHJcblxyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5UZXh0LnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICB2YXIgVGV4dCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgICAgVGV4dC5uYW1lID0gJ3EnICsgZWxlbWVudC5pRF9HVUlEO1xyXG4gICAgICAgICAgVGV4dC5sYWJlbFZhbHVlID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC50ZXh0LmFyYWJpYyArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gXHJcbiAgICAgICAgICAgIDogZWxlbWVudC50ZXh0LmVuZ2xpc2ggKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YDtcclxuICAgICAgICAgIFRleHQuaGlkZUxhYmVsID0gZmFsc2U7XHJcbiAgICAgICAgICBUZXh0LmlzUmVxdWlyZWQgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb25cclxuICAgICAgICAgICAgPyBmYWxzZVxyXG4gICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgVGV4dC5pc1JlYWRvbmx5ID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uO1xyXG4gICAgICAgICAgVGV4dC5pc0Rpc2FibGVkID0gdGhpcy5vcHRpb25zLlJlYWRvbmx5O1xyXG4gICAgICAgICAgVGV4dC5sYWJlbEV4dHJhQ2xhc3NlcyA9IHRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIFRleHQudmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgICAgVGV4dC5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpY1xyXG4gICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUudGV4dCkgVGV4dC52YWx1ZSA9IGVsZW1lbnQudmFsdWUudGV4dDtcclxuICAgICAgICAgIGlmIChlbGVtZW50Lm9wdGlvbnMubWF4TGVuZ3RoKVxyXG4gICAgICAgICAgICBUZXh0Lm1heExlbmd0aCA9IGVsZW1lbnQub3B0aW9ucy5tYXhMZW5ndGg7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5vcHRpb25zLm1pbkxlbmd0aClcclxuICAgICAgICAgICAgVGV4dC5taW5MZW5ndGggPSBlbGVtZW50Lm9wdGlvbnMubWluTGVuZ3RoO1xyXG4gICAgICAgICAgVGV4dC50eXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uKSB0aGlzLmNoZWNrTGlzdC5wdXNoKFRleHQpO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8U3VydmV5Rm9ybUl0ZW1Db21wb25lbnQ+KFxyXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgICAgICBTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwLFxyXG4gICAgICAgICAgICBUZXh0LFxyXG4gICAgICAgICAgICBlbGVtZW50Lm9wdGlvbnMuc2l6ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuRW1haWwudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgIGxldCBFbWFpbCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgICAgRW1haWwubmFtZSA9ICdxJyArIGVsZW1lbnQuaURfR1VJRDtcclxuICAgICAgICAgIEVtYWlsLmxhYmVsVmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgPyBlbGVtZW50LnRleHQuYXJhYmljICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWBcclxuICAgICAgICAgICAgOiBlbGVtZW50LnRleHQuZW5nbGlzaCArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gO1xyXG4gICAgICAgICAgRW1haWwuaGlkZUxhYmVsID0gZmFsc2U7XHJcbiAgICAgICAgICBFbWFpbC5sYWJlbEV4dHJhQ2xhc3NlcyA9IHRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIEVtYWlsLmlzUmVxdWlyZWQgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb25cclxuICAgICAgICAgICAgPyBmYWxzZVxyXG4gICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgRW1haWwuaXNSZWFkb25seSA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbjtcclxuICAgICAgICAgIEVtYWlsLnZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgICAgIEVtYWlsLmlzRGlzYWJsZWQgPSB0aGlzLm9wdGlvbnMuUmVhZG9ubHk7XHJcbiAgICAgICAgICBFbWFpbC5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpY1xyXG4gICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG4gICAgICAgICAgRW1haWwudHlwZSA9IElucHV0VHlwZS5FbWFpbDtcclxuICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlLnRleHQpIEVtYWlsLnZhbHVlID0gZWxlbWVudC52YWx1ZS50ZXh0O1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbikgdGhpcy5jaGVja0xpc3QucHVzaChFbWFpbCk7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgICAgIFN1cnZleUZvcm1JdGVtQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmZpbGVkR3JvdXAsXHJcbiAgICAgICAgICAgIEVtYWlsLFxyXG4gICAgICAgICAgICBlbGVtZW50Lm9wdGlvbnMuc2l6ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5OdW1iZXIudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgIGxldCBOdW1iZXIgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgICAgIE51bWJlci5uYW1lID0gJ3EnICsgZWxlbWVudC5pRF9HVUlEO1xyXG4gICAgICAgICAgTnVtYmVyLmhpZGVMYWJlbCA9IGZhbHNlO1xyXG4gICAgICAgICAgTnVtYmVyLmxhYmVsRXh0cmFDbGFzc2VzID0gdGhpcy5sYWJlbENsYXNzO1xyXG4gICAgICAgICAgTnVtYmVyLmxhYmVsVmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgPyBlbGVtZW50LnRleHQuYXJhYmljICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWBcclxuICAgICAgICAgICAgOiBlbGVtZW50LnRleHQuZW5nbGlzaCArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gO1xyXG4gICAgICAgICAgTnVtYmVyLmlzUmVxdWlyZWQgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb25cclxuICAgICAgICAgICAgPyBmYWxzZVxyXG4gICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgTnVtYmVyLmlzUmVhZG9ubHkgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb247XHJcbiAgICAgICAgICBOdW1iZXIudmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgICAgTnVtYmVyLmlzRGlzYWJsZWQgPSB0aGlzLm9wdGlvbnMuUmVhZG9ubHk7XHJcbiAgICAgICAgICBOdW1iZXIubGFiZWxEZXNjcmlwdGlvbiA9XHJcbiAgICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICAgID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpY1xyXG4gICAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmVuZ2xpc2g7XHJcbiAgICAgICAgICBOdW1iZXIudHlwZSA9IElucHV0VHlwZS5OdW1iZXI7XHJcbiAgICAgICAgICBsZXQgcmFuZ2VOdW1iZXIgPSBuZXcgUmFuZ2VOdW1iZXIoKTtcclxuICAgICAgICAgIHJhbmdlTnVtYmVyLnRvID0gZWxlbWVudC5vcHRpb25zLm1heExlbmd0aDtcclxuICAgICAgICAgIHJhbmdlTnVtYmVyLmZyb20gPSBlbGVtZW50Lm9wdGlvbnMubWluTGVuZ3RoO1xyXG4gICAgICAgICAgTnVtYmVyLm51bWJlclJhbmdlID0gcmFuZ2VOdW1iZXI7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC52YWx1ZS50ZXh0KSBOdW1iZXIudmFsdWUgPSBlbGVtZW50LnZhbHVlLnRleHQ7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uKSB0aGlzLmNoZWNrTGlzdC5wdXNoKE51bWJlcik7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgICAgIFN1cnZleUZvcm1JdGVtQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmZpbGVkR3JvdXAsXHJcbiAgICAgICAgICAgIE51bWJlcixcclxuICAgICAgICAgICAgZWxlbWVudC5vcHRpb25zLnNpemVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvLy9EYXRlVGltZVxyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5EYXRlLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICBsZXQgRGF0ZSA9IG5ldyBEYXRlUGlja2VyT3B0aW9ucygpO1xyXG4gICAgICAgICAgRGF0ZS5uYW1lID0gJ3EnICsgZWxlbWVudC5pRF9HVUlEO1xyXG4gICAgICAgICAgRGF0ZS5oaWRlTGFiZWwgPSBmYWxzZTtcclxuICAgICAgICAgIERhdGUubGFiZWxFeHRyYUNsYXNzZXMgPSB0aGlzLmxhYmVsQ2xhc3M7XHJcbiAgICAgICAgICBEYXRlLmxhYmVsVmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgPyBlbGVtZW50LnRleHQuYXJhYmljICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWBcclxuICAgICAgICAgICAgOiBlbGVtZW50LnRleHQuZW5nbGlzaCArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gO1xyXG4gICAgICAgICAgRGF0ZS5pc1JlcXVpcmVkID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uXHJcbiAgICAgICAgICAgID8gZmFsc2VcclxuICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIERhdGUuaXNSZWFkb25seSA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbjtcclxuICAgICAgICAgIERhdGUudmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgICAgRGF0ZS5pc0Rpc2FibGVkID0gdGhpcy5vcHRpb25zLlJlYWRvbmx5O1xyXG4gICAgICAgICAgRGF0ZS5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpY1xyXG4gICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG4gICAgICAgICAgRGF0ZS5waWNrZXJUeXBlID0gUGlja2VyVHlwZS5DYWxlbmRhcjtcclxuICAgICAgICAgIERhdGUuc2VsZWN0TW9kZSA9IFNlbGVjdE1vZGUuU2luZ2xlO1xyXG4gICAgICAgICAgRGF0ZS5zdGFydFZpZXcgPSBTdGFydFZpZXcuTW9udGg7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC52YWx1ZS5kYXRlVGltZSkgRGF0ZS52YWx1ZSA9IGVsZW1lbnQudmFsdWUuZGF0ZVRpbWU7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uKSB0aGlzLmNoZWNrTGlzdC5wdXNoKERhdGUpO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8U3VydmV5Rm9ybUl0ZW1Db21wb25lbnQ+KFxyXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgICAgICBTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwLFxyXG4gICAgICAgICAgICBEYXRlLFxyXG4gICAgICAgICAgICBlbGVtZW50Lm9wdGlvbnMuc2l6ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5EYXRlVGltZS50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgbGV0IERhdGVUaW1lID0gbmV3IERhdGVQaWNrZXJPcHRpb25zKCk7XHJcbiAgICAgICAgICBEYXRlVGltZS5uYW1lID0gJ3EnICsgZWxlbWVudC5pRF9HVUlEO1xyXG4gICAgICAgICAgRGF0ZVRpbWUuaGlkZUxhYmVsID0gZmFsc2U7XHJcbiAgICAgICAgICBEYXRlVGltZS5sYWJlbEV4dHJhQ2xhc3NlcyA9IHRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIERhdGVUaW1lLmxhYmVsVmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgPyBlbGVtZW50LnRleHQuYXJhYmljICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWBcclxuICAgICAgICAgICAgOiBlbGVtZW50LnRleHQuZW5nbGlzaCArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gO1xyXG4gICAgICAgICAgRGF0ZVRpbWUuaXNSZXF1aXJlZCA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvblxyXG4gICAgICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBEYXRlVGltZS5pc1JlYWRvbmx5ID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uO1xyXG4gICAgICAgICAgRGF0ZVRpbWUudmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgICAgRGF0ZVRpbWUuaXNEaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5SZWFkb25seTtcclxuICAgICAgICAgIERhdGVUaW1lLmxhYmVsRGVzY3JpcHRpb24gPVxyXG4gICAgICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgICA/IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5hcmFiaWNcclxuICAgICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG4gICAgICAgICAgRGF0ZVRpbWUucGlja2VyVHlwZSA9IFBpY2tlclR5cGUuQm90aDtcclxuICAgICAgICAgIERhdGVUaW1lLnNlbGVjdE1vZGUgPSBTZWxlY3RNb2RlLlNpbmdsZTtcclxuICAgICAgICAgIERhdGVUaW1lLnN0YXJ0VmlldyA9IFN0YXJ0Vmlldy5Nb250aDtcclxuICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlLmRhdGVUaW1lKSBEYXRlVGltZS52YWx1ZSA9IGVsZW1lbnQudmFsdWUuZGF0ZVRpbWU7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uKSB0aGlzLmNoZWNrTGlzdC5wdXNoKERhdGVUaW1lKTtcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFN1cnZleUZvcm1JdGVtQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZixcclxuICAgICAgICAgICAgU3VydmV5Rm9ybUl0ZW1Db21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZmlsZWRHcm91cCxcclxuICAgICAgICAgICAgRGF0ZVRpbWUsXHJcbiAgICAgICAgICAgIGVsZW1lbnQub3B0aW9ucy5zaXplXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy9Ecm9wZG93blxyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5TaW5nbGVTZWxlY3QudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgIGxldCBTaW5nbGVTZWxlY3QgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICBTaW5nbGVTZWxlY3QubmFtZSA9ICdxJyArIGVsZW1lbnQuaURfR1VJRDtcclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC5oaWRlTGFiZWwgPSBmYWxzZTtcclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC5sYWJlbEV4dHJhQ2xhc3NlcyA9IHRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC5sYWJlbFZhbHVlID1cclxuICAgICAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgICAgPyBlbGVtZW50LnRleHQuYXJhYmljICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWBcclxuICAgICAgICAgICAgICA6IGVsZW1lbnQudGV4dC5lbmdsaXNoICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWA7XHJcbiAgICAgICAgICBTaW5nbGVTZWxlY3QuaXNSZXF1aXJlZCA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvblxyXG4gICAgICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBTaW5nbGVTZWxlY3QuaXNSZWFkb25seSA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbjtcclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC5wbGFjZWhvbGRlciA9XHJcbiAgICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnRGVmYXVsdE9wdGlvblRleHQnKTtcclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC52aWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuVmVydGljYWw7XHJcbiAgICAgICAgICBTaW5nbGVTZWxlY3QuaXNEaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5SZWFkb25seTtcclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC5sYWJlbERlc2NyaXB0aW9uID1cclxuICAgICAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgICAgPyBlbGVtZW50Lm9wdGlvbnMuZGVzY3JpcHRpb24uYXJhYmljXHJcbiAgICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuZGVzY3JpcHRpb24uZW5nbGlzaDtcclxuICAgICAgICAgIGxldCBkYXRhU291cmNlOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGVsZW1lbnQucXVlc3Rpb25PcHRpb25zLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICBjb25zdCBvcHRpb24gPSBlbGVtZW50LnF1ZXN0aW9uT3B0aW9uc1tpbmRleF07XHJcbiAgICAgICAgICAgIGxldCBpdGVtOiBhbnkgPSB7fTtcclxuICAgICAgICAgICAgaXRlbS5rZXkgPSBvcHRpb24uaURfR1VJRDtcclxuICAgICAgICAgICAgaXRlbS52YWx1ZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICAgID8gb3B0aW9uLm5hbWUuYXJhYmljXHJcbiAgICAgICAgICAgICAgOiBvcHRpb24ubmFtZS5lbmdsaXNoO1xyXG4gICAgICAgICAgICBkYXRhU291cmNlLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBTaW5nbGVTZWxlY3QuZGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XHJcbiAgICAgICAgICBTaW5nbGVTZWxlY3Quc2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC5zaG93Q2hlY2tib3ggPSBmYWxzZTtcclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC5hbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC52YWx1ZS5zZWxlY3RlZElEcylcclxuICAgICAgICAgICAgU2luZ2xlU2VsZWN0LnNlbGVjdGVkSXRlbXMgPSBlbGVtZW50LnZhbHVlLnNlbGVjdGVkSURzWzBdO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbilcclxuICAgICAgICAgICAgdGhpcy5jaGVja0xpc3QucHVzaChTaW5nbGVTZWxlY3QpO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8U3VydmV5Rm9ybUl0ZW1Db21wb25lbnQ+KFxyXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgICAgICBTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwLFxyXG4gICAgICAgICAgICBTaW5nbGVTZWxlY3QsXHJcbiAgICAgICAgICAgIGVsZW1lbnQub3B0aW9ucy5zaXplXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLlJhZGlvQnV0dG9uLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICBsZXQgcmFkaW9CdXR0b24gPSBuZXcgUmFkaW9CdXR0b25PcHRpb25zKCk7XHJcbiAgICAgICAgICByYWRpb0J1dHRvbi5uYW1lID0gJ3EnICsgZWxlbWVudC5pRF9HVUlEO1xyXG4gICAgICAgICAgcmFkaW9CdXR0b24uaGlkZUxhYmVsID0gZmFsc2U7XHJcbiAgICAgICAgICByYWRpb0J1dHRvbi5sYWJlbEV4dHJhQ2xhc3NlcyA9IHRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIHJhZGlvQnV0dG9uLmxhYmVsVmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgPyBlbGVtZW50LnRleHQuYXJhYmljICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWBcclxuICAgICAgICAgICAgOiBlbGVtZW50LnRleHQuZW5nbGlzaCArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gO1xyXG4gICAgICAgICAgcmFkaW9CdXR0b24uaXNSZXF1aXJlZCA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvblxyXG4gICAgICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICByYWRpb0J1dHRvbi5pc1JlYWRvbmx5ID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uO1xyXG4gICAgICAgICAgcmFkaW9CdXR0b24udmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgICAgcmFkaW9CdXR0b24uaXNEaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5SZWFkb25seTtcclxuICAgICAgICAgIHJhZGlvQnV0dG9uLmxhYmVsRGVzY3JpcHRpb24gPVxyXG4gICAgICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgICA/IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5hcmFiaWNcclxuICAgICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG4gICAgICAgICAgbGV0IGRhdGFTb3VyY2VSYWRpbzogYW55W10gPSBbXTtcclxuICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBlbGVtZW50LnF1ZXN0aW9uT3B0aW9ucy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gZWxlbWVudC5xdWVzdGlvbk9wdGlvbnNbaW5kZXhdO1xyXG4gICAgICAgICAgICBsZXQgaXRlbTogYW55ID0ge307XHJcbiAgICAgICAgICAgIGl0ZW0uVmFsdWUgPSBvcHRpb24uaURfR1VJRDtcclxuICAgICAgICAgICAgaXRlbS5UZXh0ID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgICAgPyBvcHRpb24ubmFtZS5hcmFiaWNcclxuICAgICAgICAgICAgICA6IG9wdGlvbi5uYW1lLmVuZ2xpc2g7XHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2VSYWRpby5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmFkaW9CdXR0b24uaXRlbXMgPSBkYXRhU291cmNlUmFkaW87XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC52YWx1ZS5zZWxlY3RlZElEcylcclxuICAgICAgICAgICAgcmFkaW9CdXR0b24udmFsdWUgPSBlbGVtZW50LnZhbHVlLnNlbGVjdGVkSURzWzBdO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbilcclxuICAgICAgICAgICAgdGhpcy5jaGVja0xpc3QucHVzaChyYWRpb0J1dHRvbik7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgICAgIFN1cnZleUZvcm1JdGVtQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmZpbGVkR3JvdXAsXHJcbiAgICAgICAgICAgIHJhZGlvQnV0dG9uLFxyXG4gICAgICAgICAgICBlbGVtZW50Lm9wdGlvbnMuc2l6ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5NdWx0aXBsZVNlbGVjdC50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgbGV0IE11bGlwbGVTZWxlY3QgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICBNdWxpcGxlU2VsZWN0Lm5hbWUgPSAncScgKyBlbGVtZW50LmlEX0dVSUQ7XHJcbiAgICAgICAgICBNdWxpcGxlU2VsZWN0LmhpZGVMYWJlbCA9IGZhbHNlO1xyXG4gICAgICAgICAgTXVsaXBsZVNlbGVjdC5sYWJlbEV4dHJhQ2xhc3NlcyA9IHRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIE11bGlwbGVTZWxlY3QubGFiZWxWYWx1ZSA9XHJcbiAgICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICAgID8gZWxlbWVudC50ZXh0LmFyYWJpYyArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gXHJcbiAgICAgICAgICAgICAgOiBlbGVtZW50LnRleHQuZW5nbGlzaCArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gO1xyXG4gICAgICAgICAgTXVsaXBsZVNlbGVjdC5pc1JlcXVpcmVkID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uXHJcbiAgICAgICAgICAgID8gZmFsc2VcclxuICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIE11bGlwbGVTZWxlY3QuaXNSZWFkb25seSA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbjtcclxuICAgICAgICAgIE11bGlwbGVTZWxlY3QucGxhY2Vob2xkZXIgPVxyXG4gICAgICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0RlZmF1bHRPcHRpb25UZXh0Jyk7XHJcbiAgICAgICAgICBNdWxpcGxlU2VsZWN0LnZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgICAgIE11bGlwbGVTZWxlY3QuaXNEaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5SZWFkb25seTtcclxuICAgICAgICAgIE11bGlwbGVTZWxlY3QubGFiZWxEZXNjcmlwdGlvbiA9XHJcbiAgICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICAgID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpY1xyXG4gICAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmVuZ2xpc2g7XHJcbiAgICAgICAgICBsZXQgbXVsdGlwbGVTZWxlY3REYXRhU291cmNlOiBEcm9wZG93bkxpc3RJdGVtW10gPSBbXTtcclxuICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBlbGVtZW50LnF1ZXN0aW9uT3B0aW9ucy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gZWxlbWVudC5xdWVzdGlvbk9wdGlvbnNbaW5kZXhdO1xyXG4gICAgICAgICAgICBsZXQgaXRlbTogYW55ID0ge307XHJcbiAgICAgICAgICAgIGl0ZW0ua2V5ID0gb3B0aW9uLmlEX0dVSUQ7XHJcbiAgICAgICAgICAgIGl0ZW0udmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgICA/IG9wdGlvbi5uYW1lLmFyYWJpY1xyXG4gICAgICAgICAgICAgIDogb3B0aW9uLm5hbWUuZW5nbGlzaDtcclxuICAgICAgICAgICAgbXVsdGlwbGVTZWxlY3REYXRhU291cmNlLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBNdWxpcGxlU2VsZWN0LmRhdGFTb3VyY2UgPSBtdWx0aXBsZVNlbGVjdERhdGFTb3VyY2U7XHJcbiAgICAgICAgICBNdWxpcGxlU2VsZWN0LnNpbmdsZVNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgTXVsaXBsZVNlbGVjdC5zaG93Q2hlY2tib3ggPSBmYWxzZTtcclxuICAgICAgICAgIE11bGlwbGVTZWxlY3QuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUuc2VsZWN0ZWRJRHMpXHJcbiAgICAgICAgICAgIE11bGlwbGVTZWxlY3Quc2VsZWN0ZWRJdGVtcyA9IGVsZW1lbnQudmFsdWUuc2VsZWN0ZWRJRHM7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uKVxyXG4gICAgICAgICAgICB0aGlzLmNoZWNrTGlzdC5wdXNoKE11bGlwbGVTZWxlY3QpO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8U3VydmV5Rm9ybUl0ZW1Db21wb25lbnQ+KFxyXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgICAgICBTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwLFxyXG4gICAgICAgICAgICBNdWxpcGxlU2VsZWN0LFxyXG4gICAgICAgICAgICBlbGVtZW50Lm9wdGlvbnMuc2l6ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5Db3VudHJ5LnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICBsZXQgQ291bnRyeSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgIENvdW50cnkubmFtZSA9ICdxJyArIGVsZW1lbnQuaURfR1VJRDtcclxuICAgICAgICAgIENvdW50cnkuaGlkZUxhYmVsID0gZmFsc2U7XHJcbiAgICAgICAgICBDb3VudHJ5LmxhYmVsRXh0cmFDbGFzc2VzID0gdGhpcy5sYWJlbENsYXNzO1xyXG4gICAgICAgICAgQ291bnRyeS5sYWJlbFZhbHVlID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC50ZXh0LmFyYWJpYyArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gXHJcbiAgICAgICAgICAgIDogZWxlbWVudC50ZXh0LmVuZ2xpc2ggKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YDtcclxuICAgICAgICAgIENvdW50cnkuaXNSZXF1aXJlZCA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvblxyXG4gICAgICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBDb3VudHJ5LmlzUmVhZG9ubHkgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb247XHJcbiAgICAgICAgICBDb3VudHJ5LnZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgICAgIENvdW50cnkuaXNEaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5SZWFkb25seTtcclxuICAgICAgICAgIENvdW50cnkubGFiZWxEZXNjcmlwdGlvbiA9XHJcbiAgICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICAgID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpY1xyXG4gICAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmVuZ2xpc2g7XHJcbiAgICAgICAgICBDb3VudHJ5LnNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICBDb3VudHJ5LnNob3dDaGVja2JveCA9IGZhbHNlO1xyXG4gICAgICAgICAgQ291bnRyeS5hbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgICAgICBDb3VudHJ5LmRhdGFTb3VyY2UgPSBlbGVtZW50Lm9wdGlvbnMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlLnNlbGVjdGVkSURzKVxyXG4gICAgICAgICAgICBDb3VudHJ5LnNlbGVjdGVkSXRlbXMgPSBlbGVtZW50LnZhbHVlLnNlbGVjdGVkSURzWzBdO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbikgdGhpcy5jaGVja0xpc3QucHVzaChDb3VudHJ5KTtcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFN1cnZleUZvcm1JdGVtQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZixcclxuICAgICAgICAgICAgU3VydmV5Rm9ybUl0ZW1Db21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZmlsZWRHcm91cCxcclxuICAgICAgICAgICAgQ291bnRyeSxcclxuICAgICAgICAgICAgZWxlbWVudC5vcHRpb25zLnNpemVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvL0ZpbGVVcGxvYWRcclxuICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuTXVsdGlGaWxlLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICBsZXQgTXVsdGlGaWxlID0gbmV3IEZpbGVVcGxvYWRPcHRpb25zKCk7XHJcbiAgICAgICAgICBNdWx0aUZpbGUubmFtZSA9ICdxJyArIGVsZW1lbnQuaURfR1VJRDtcclxuICAgICAgICAgIE11bHRpRmlsZS5oaWRlTGFiZWwgPSBmYWxzZTtcclxuICAgICAgICAgIE11bHRpRmlsZS5sYWJlbEV4dHJhQ2xhc3NlcyA9IHRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIE11bHRpRmlsZS5sYWJlbFZhbHVlID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC50ZXh0LmFyYWJpYyArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gXHJcbiAgICAgICAgICAgIDogZWxlbWVudC50ZXh0LmVuZ2xpc2ggKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YDtcclxuICAgICAgICAgIE11bHRpRmlsZS5pc1JlcXVpcmVkID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uXHJcbiAgICAgICAgICAgID8gZmFsc2VcclxuICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIE11bHRpRmlsZS5pc1JlYWRvbmx5ID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uO1xyXG4gICAgICAgICAgTXVsdGlGaWxlLnZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgICAgIE11bHRpRmlsZS5pc0Rpc2FibGVkID0gdGhpcy5vcHRpb25zLlJlYWRvbmx5O1xyXG4gICAgICAgICAgTXVsdGlGaWxlLmxhYmVsRGVzY3JpcHRpb24gPVxyXG4gICAgICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgICA/IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5hcmFiaWNcclxuICAgICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG4gICAgICAgICAgTXVsdGlGaWxlLm1heFNpemVGb3JBbGxGaWxlc0luTUIgPSBlbGVtZW50Lm9wdGlvbnMubWF4RmlsZVNpemVJbk1CO1xyXG4gICAgICAgICAgTXVsdGlGaWxlLm1heE5vT2ZGaWxlcyA9IGVsZW1lbnQub3B0aW9ucy5tYXhGaWxlQ291bnQ7XHJcbiAgICAgICAgICBNdWx0aUZpbGUuaXNNdWx0aXBsZUZpbGUgPSB0cnVlO1xyXG4gICAgICAgICAgbGV0IGFjY2VwdGVkVHlwZXM6IEZpbGVUeXBlW10gPSBbXTtcclxuICAgICAgICAgIGZvciAoXHJcbiAgICAgICAgICAgIGxldCBpbmRleCA9IDA7XHJcbiAgICAgICAgICAgIGluZGV4IDwgZWxlbWVudC5vcHRpb25zLmFsbG93ZWRFeHRlbnNpb25zLmxlbmd0aDtcclxuICAgICAgICAgICAgaW5kZXgrK1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRWYWx1ZSA9IGVsZW1lbnQub3B0aW9ucy5hbGxvd2VkRXh0ZW5zaW9uc1tpbmRleF07XHJcbiAgICAgICAgICAgIHN3aXRjaCAoZWxlbWVudFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgY2FzZSAnMCc6XHJcbiAgICAgICAgICAgICAgICBhY2NlcHRlZFR5cGVzLnB1c2goRmlsZVR5cGUuUERGKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgJzEnOlxyXG4gICAgICAgICAgICAgICAgYWNjZXB0ZWRUeXBlcy5wdXNoKEZpbGVUeXBlLldvcmQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAnMic6XHJcbiAgICAgICAgICAgICAgICBhY2NlcHRlZFR5cGVzLnB1c2goRmlsZVR5cGUuRXhjZWwpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAnMyc6XHJcbiAgICAgICAgICAgICAgICBhY2NlcHRlZFR5cGVzLnB1c2goRmlsZVR5cGUuSW1hZ2VUeXBlcyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBjYXNlICcxNSc6XHJcbiAgICAgICAgICAgICAgICBhY2NlcHRlZFR5cGVzLnB1c2goRmlsZVR5cGUuUG93ZXJQb2ludCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIE11bHRpRmlsZS5maWxlVXBsb2FkQWNjZXB0c1R5cGVzID0gYWNjZXB0ZWRUeXBlcztcclxuICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlLmZpbGVDb3JyZWxhdGlvbkRUTykge1xyXG4gICAgICAgICAgICBsZXQgbW9kZWwgPSB0aGlzLnRvQ2FtZWwoZWxlbWVudC52YWx1ZS5maWxlQ29ycmVsYXRpb25EVE8pO1xyXG4gICAgICAgICAgICBNdWx0aUZpbGUudmFsdWUgPSBtb2RlbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb24pIHRoaXMuY2hlY2tMaXN0LnB1c2goTXVsdGlGaWxlKTtcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFN1cnZleUZvcm1JdGVtQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZixcclxuICAgICAgICAgICAgU3VydmV5Rm9ybUl0ZW1Db21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZmlsZWRHcm91cCxcclxuICAgICAgICAgICAgTXVsdGlGaWxlLFxyXG4gICAgICAgICAgICBlbGVtZW50Lm9wdGlvbnMuc2l6ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5GaWxlLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICBsZXQgRmlsZSA9IG5ldyBGaWxlVXBsb2FkT3B0aW9ucygpO1xyXG4gICAgICAgICAgRmlsZS5uYW1lID0gJ3EnICsgZWxlbWVudC5pRF9HVUlEO1xyXG4gICAgICAgICAgRmlsZS5oaWRlTGFiZWwgPSBmYWxzZTtcclxuICAgICAgICAgIEZpbGUubGFiZWxFeHRyYUNsYXNzZXMgPSB0aGlzLmxhYmVsQ2xhc3M7XHJcbiAgICAgICAgICBGaWxlLmxhYmVsVmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgPyBlbGVtZW50LnRleHQuYXJhYmljICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWBcclxuICAgICAgICAgICAgOiBlbGVtZW50LnRleHQuZW5nbGlzaCArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gO1xyXG4gICAgICAgICAgRmlsZS5pc1JlcXVpcmVkID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uXHJcbiAgICAgICAgICAgID8gZmFsc2VcclxuICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIEZpbGUuaXNSZWFkb25seSA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbjtcclxuICAgICAgICAgIEZpbGUudmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgICAgRmlsZS5pc0Rpc2FibGVkID0gdGhpcy5vcHRpb25zLlJlYWRvbmx5O1xyXG4gICAgICAgICAgRmlsZS5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpY1xyXG4gICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG4gICAgICAgICAgRmlsZS5maWxlTWF4U2l6ZUluTUIgPSBlbGVtZW50Lm9wdGlvbnMubWF4RmlsZVNpemVJbk1CO1xyXG5cclxuICAgICAgICAgIGxldCBhY2NlcHRlZFR5cGVzRmlsZTogRmlsZVR5cGVbXSA9IFtdO1xyXG4gICAgICAgICAgZGVidWdnZXI7XHJcbiAgICAgICAgICBmb3IgKFxyXG4gICAgICAgICAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgICAgICAgICBpbmRleCA8IGVsZW1lbnQub3B0aW9ucy5hbGxvd2VkRXh0ZW5zaW9ucy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGluZGV4KytcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50VmFsdWUgPSBlbGVtZW50Lm9wdGlvbnMuYWxsb3dlZEV4dGVuc2lvbnNbaW5kZXhdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGVsZW1lbnRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgIGNhc2UgJzAnOlxyXG4gICAgICAgICAgICAgICAgYWNjZXB0ZWRUeXBlc0ZpbGUucHVzaChGaWxlVHlwZS5QREYpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAnMSc6XHJcbiAgICAgICAgICAgICAgICBhY2NlcHRlZFR5cGVzRmlsZS5wdXNoKEZpbGVUeXBlLldvcmQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAnMic6XHJcbiAgICAgICAgICAgICAgICBhY2NlcHRlZFR5cGVzRmlsZS5wdXNoKEZpbGVUeXBlLkV4Y2VsKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgJzMnOlxyXG4gICAgICAgICAgICAgICAgYWNjZXB0ZWRUeXBlc0ZpbGUucHVzaChGaWxlVHlwZS5JbWFnZVR5cGVzKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgJzE1JzpcclxuICAgICAgICAgICAgICAgIGFjY2VwdGVkVHlwZXNGaWxlLnB1c2goRmlsZVR5cGUuUG93ZXJQb2ludCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlLmZpbGVEVE8pIHtcclxuICAgICAgICAgICAgbGV0IG1vZGVsID0gdGhpcy50b0NhbWVsKGVsZW1lbnQudmFsdWUuZmlsZURUTykgYXMgRmlsZURUTztcclxuICAgICAgICAgICAgRmlsZS52YWx1ZSA9IG1vZGVsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgRmlsZS5maWxlVXBsb2FkQWNjZXB0c1R5cGVzID0gYWNjZXB0ZWRUeXBlc0ZpbGU7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uKSB0aGlzLmNoZWNrTGlzdC5wdXNoKEZpbGUpO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8U3VydmV5Rm9ybUl0ZW1Db21wb25lbnQ+KFxyXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgICAgICBTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwLFxyXG4gICAgICAgICAgICBGaWxlLFxyXG4gICAgICAgICAgICBlbGVtZW50Lm9wdGlvbnMuc2l6ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vSW1hZ2VVcGxvYWRcclxuICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuSW1hZ2UudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgIGxldCBJbWFnZSA9IG5ldyBJbWFnZVVwbG9hZE9wdGlvbnMoKTtcclxuICAgICAgICAgIEltYWdlLm5hbWUgPSAncScgKyBlbGVtZW50LmlEX0dVSUQ7XHJcbiAgICAgICAgICBJbWFnZS5oaWRlTGFiZWwgPSBmYWxzZTtcclxuICAgICAgICAgIEltYWdlLmxhYmVsRXh0cmFDbGFzc2VzID0gdGhpcy5sYWJlbENsYXNzO1xyXG4gICAgICAgICAgSW1hZ2UubGFiZWxWYWx1ZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICA/IGVsZW1lbnQudGV4dC5hcmFiaWMgKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YFxyXG4gICAgICAgICAgICA6IGVsZW1lbnQudGV4dC5lbmdsaXNoICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWA7XHJcbiAgICAgICAgICBJbWFnZS5pc1JlcXVpcmVkID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uXHJcbiAgICAgICAgICAgID8gZmFsc2VcclxuICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIEltYWdlLmlzUmVhZG9ubHkgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb247XHJcbiAgICAgICAgICBJbWFnZS52aWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuVmVydGljYWw7XHJcbiAgICAgICAgICBJbWFnZS5pc0Rpc2FibGVkID0gdGhpcy5vcHRpb25zLlJlYWRvbmx5O1xyXG4gICAgICAgICAgSW1hZ2UubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICA/IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5hcmFiaWNcclxuICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuZGVzY3JpcHRpb24uZW5nbGlzaDtcclxuICAgICAgICAgIGlmIChlbGVtZW50Lm9wdGlvbnMubWF4RmlsZVNpemVJbk1CKVxyXG4gICAgICAgICAgICBJbWFnZS5maWxlTWF4U2l6ZUluTUIgPSBlbGVtZW50Lm9wdGlvbnMubWF4RmlsZVNpemVJbk1CO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbikgdGhpcy5jaGVja0xpc3QucHVzaChJbWFnZSk7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC52YWx1ZS5maWxlRFRPKSBJbWFnZS52YWx1ZSA9IGVsZW1lbnQudmFsdWUuZmlsZURUTztcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFN1cnZleUZvcm1JdGVtQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZixcclxuICAgICAgICAgICAgU3VydmV5Rm9ybUl0ZW1Db21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZmlsZWRHcm91cCxcclxuICAgICAgICAgICAgSW1hZ2UsXHJcbiAgICAgICAgICAgIGVsZW1lbnQub3B0aW9ucy5zaXplXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy9NdWx0aWxpbmVUZXh0XHJcbiAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLk11bHRpbGluZVRleHQudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgIGxldCBNdWx0aWxpbmVUZXh0ID0gbmV3IFRleHRBcmVhT3B0aW9ucygpO1xyXG4gICAgICAgICAgTXVsdGlsaW5lVGV4dC5uYW1lID0gJ3EnICsgZWxlbWVudC5pRF9HVUlEO1xyXG4gICAgICAgICAgTXVsdGlsaW5lVGV4dC5oaWRlTGFiZWwgPSBmYWxzZTtcclxuICAgICAgICAgIE11bHRpbGluZVRleHQubGFiZWxFeHRyYUNsYXNzZXMgPSB0aGlzLmxhYmVsQ2xhc3M7XHJcbiAgICAgICAgICBNdWx0aWxpbmVUZXh0LmxhYmVsVmFsdWUgPVxyXG4gICAgICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgICA/IGVsZW1lbnQudGV4dC5hcmFiaWMgKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YFxyXG4gICAgICAgICAgICAgIDogZWxlbWVudC50ZXh0LmVuZ2xpc2ggKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YDtcclxuICAgICAgICAgIE11bHRpbGluZVRleHQuaXNSZXF1aXJlZCA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvblxyXG4gICAgICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBNdWx0aWxpbmVUZXh0LmlzUmVhZG9ubHkgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb247XHJcbiAgICAgICAgICBNdWx0aWxpbmVUZXh0LnZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgICAgIE11bHRpbGluZVRleHQuaXNEaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5SZWFkb25seTtcclxuICAgICAgICAgIE11bHRpbGluZVRleHQubGFiZWxEZXNjcmlwdGlvbiA9XHJcbiAgICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICAgID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpY1xyXG4gICAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmVuZ2xpc2g7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5vcHRpb25zLm1heExlbmd0aClcclxuICAgICAgICAgICAgTXVsdGlsaW5lVGV4dC5tYXhMZW5ndGggPSBlbGVtZW50Lm9wdGlvbnMubWF4TGVuZ3RoO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQub3B0aW9ucy5taW5MZW5ndGgpXHJcbiAgICAgICAgICAgIE11bHRpbGluZVRleHQubWluTGVuZ3RoID0gZWxlbWVudC5vcHRpb25zLm1pbkxlbmd0aDtcclxuICAgICAgICAgIE11bHRpbGluZVRleHQucm93cyA9IGVsZW1lbnQub3B0aW9ucy5yb3dzO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUudGV4dCkgTXVsdGlsaW5lVGV4dC52YWx1ZSA9IGVsZW1lbnQudmFsdWUudGV4dDtcclxuICAgICAgICAgIGlmIChlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb24pXHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0LnB1c2goTXVsdGlsaW5lVGV4dCk7XHJcbiAgICAgICAgICBNdWx0aWxpbmVUZXh0LmZvcmNlRGlyZWN0aW9uID1cclxuICAgICAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgICAgPyBGb3JjZURpcmVjdGlvbi5BcmFiaWNcclxuICAgICAgICAgICAgICA6IEZvcmNlRGlyZWN0aW9uLkVuZ2xpc2g7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgICAgIFN1cnZleUZvcm1JdGVtQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmZpbGVkR3JvdXAsXHJcbiAgICAgICAgICAgIE11bHRpbGluZVRleHQsXHJcbiAgICAgICAgICAgIGVsZW1lbnQub3B0aW9ucy5zaXplXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy9IVE1MXHJcbiAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLkJvb2xlYW4udG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgIGxldCBCb29sZWFuID0gbmV3IFRvZ2dsZVNsaWRlT3B0aW9ucygpO1xyXG4gICAgICAgICAgQm9vbGVhbi5uYW1lID0gJ3EnICsgZWxlbWVudC5pRF9HVUlEO1xyXG4gICAgICAgICAgQm9vbGVhbi5sYWJlbEV4dHJhQ2xhc3NlcyA9IHRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIEJvb2xlYW4udmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgICAgQm9vbGVhbi5pc1JlYWRvbmx5ID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uO1xyXG4gICAgICAgICAgQm9vbGVhbi5pc0Rpc2FibGVkID0gdGhpcy5vcHRpb25zLlJlYWRvbmx5O1xyXG4gICAgICAgICAgQm9vbGVhbi5oaWRlTGFiZWwgPSBmYWxzZTtcclxuICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlLmJvb2xlYW4pIEJvb2xlYW4udmFsdWUgPSBlbGVtZW50LnZhbHVlLmJvb2xlYW47XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uKSB0aGlzLmNoZWNrTGlzdC5wdXNoKEJvb2xlYW4pO1xyXG4gICAgICAgICAgQm9vbGVhbi5sYWJlbFZhbHVlID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC50ZXh0LmFyYWJpYyArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gXHJcbiAgICAgICAgICAgIDogZWxlbWVudC50ZXh0LmVuZ2xpc2ggKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YDtcclxuICAgICAgICAgIEJvb2xlYW4ubGFiZWxEZXNjcmlwdGlvbiA9XHJcbiAgICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICAgID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpY1xyXG4gICAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmVuZ2xpc2g7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgICAgIFN1cnZleUZvcm1JdGVtQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmZpbGVkR3JvdXAsXHJcbiAgICAgICAgICAgIEJvb2xlYW4sXHJcbiAgICAgICAgICAgIGVsZW1lbnQub3B0aW9ucy5zaXplXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy9Mb2NhdGlvblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5SZWFkb25seSlcclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuY2hlY2tMaXN0Lmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrTGlzdFtpbmRleF0uVmFsdWUpIHtcclxuICAgICAgICAgIHRoaXMuY2hlY2tMaXN0W2luZGV4XS5Jc1JlYWRvbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgdGhpcy5maWxlZEdyb3VwLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKGVzKSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuZmlsZWRHcm91cCk7XHJcbiAgICAgIHRoaXMucmVzdWx0ID0gW107XHJcbiAgICAgIHRoaXMuc2hvd2VkQ2hpbGRRdWVzdGlvbiA9IFtdO1xyXG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmZpbGVkR3JvdXAuY29udHJvbHMpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5maWxlZEdyb3VwLmNvbnRyb2xzLCBrZXkpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBsZXQgc2NvcmUgPSAwO1xyXG4gICAgICAgICAgbGV0IGVsZW1lbnQgPSB0aGlzLmZpbGVkR3JvdXAuY29udHJvbHNba2V5XTtcclxuICAgICAgICAgIGxldCBpZCA9IGtleS5yZXBsYWNlKCdxJywgJycpO1xyXG4gICAgICAgICAgdmFyIGZpbHRlcmVkSXRlbSA9IHRoaXMub3B0aW9ucy5RdWVzdGlvbkxpc3QuZmlsdGVyKFxyXG4gICAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5pRF9HVUlEID09IGlkXHJcbiAgICAgICAgICApWzBdO1xyXG5cclxuICAgICAgICAgIGxldCBpdGVtID0gbmV3IFN1cnZleUZpbGVkVmFsdWVEVE8oKTtcclxuICAgICAgICAgIGl0ZW0uUXVlc3Rpb25GaWVsZElEID0gaWQ7XHJcbiAgICAgICAgICBpdGVtLlF1ZXN0aW9uVHlwZUl0ZW1JRCA9IGZpbHRlcmVkSXRlbS5xdWVzdGlvblR5cGVJdGVtSUQ7XHJcbiAgICAgICAgICBzd2l0Y2ggKGZpbHRlcmVkSXRlbS5xdWVzdGlvblR5cGVJdGVtSUQpIHtcclxuICAgICAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLlRleHQudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgICAgICBpdGVtLlRleHQgPSBlbGVtZW50LnZhbHVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuRW1haWwudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgICAgICBpdGVtLlRleHQgPSBlbGVtZW50LnZhbHVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuTnVtYmVyLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICAgICAgaXRlbS5UZXh0ID0gZWxlbWVudC52YWx1ZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLk11bHRpbGluZVRleHQudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgICAgICBpdGVtLlRleHQgPSBlbGVtZW50LnZhbHVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuQm9vbGVhbi50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgICAgIGl0ZW0uQm9vbGVhbiA9IGVsZW1lbnQudmFsdWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5EYXRlLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICAgICAgaXRlbS5EYXRlVGltZSA9IGVsZW1lbnQudmFsdWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuRGF0ZVRpbWUudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgICAgICBpdGVtLkRhdGVUaW1lID0gZWxlbWVudC52YWx1ZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLlNpbmdsZVNlbGVjdC50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgICAgIGl0ZW0uU2VsZWN0ZWRJRHMgPSBbZWxlbWVudC52YWx1ZV07XHJcbiAgICAgICAgICAgICAgdGhpcy5hZGRTaG93ZWRDaGlsZFF1ZXN0aW9ucyhlbGVtZW50LnZhbHVlKTtcclxuICAgICAgICAgICAgICBkZWJ1Z2dlcjtcclxuICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRJdGVtLmlzQWxsb3dTY29yaW5nKVxyXG4gICAgICAgICAgICAgICAgc2NvcmUgPSBmaWx0ZXJlZEl0ZW0ucXVlc3Rpb25PcHRpb25zLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgKGl0ZW0pID0+IGl0ZW0uaURfR1VJRCA9PSBlbGVtZW50LnZhbHVlXHJcbiAgICAgICAgICAgICAgICApWzBdPy5zY29yZVxyXG4gICAgICAgICAgICAgICAgICA/IGZpbHRlcmVkSXRlbS5xdWVzdGlvbk9wdGlvbnM/LmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5pRF9HVUlEID09IGVsZW1lbnQudmFsdWVcclxuICAgICAgICAgICAgICAgICAgKVswXS5zY29yZVxyXG4gICAgICAgICAgICAgICAgICA6IDA7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5SYWRpb0J1dHRvbi50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgICAgIGl0ZW0uU2VsZWN0ZWRJRHMgPSBbZWxlbWVudC52YWx1ZV07XHJcbiAgICAgICAgICAgICAgdGhpcy5hZGRTaG93ZWRDaGlsZFF1ZXN0aW9ucyhlbGVtZW50LnZhbHVlKTtcclxuICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRJdGVtLmlzQWxsb3dTY29yaW5nKVxyXG4gICAgICAgICAgICAgICAgc2NvcmUgPSBmaWx0ZXJlZEl0ZW0ucXVlc3Rpb25PcHRpb25zLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgKGl0ZW0pID0+IGl0ZW0uaURfR1VJRCA9PSBlbGVtZW50LnZhbHVlXHJcbiAgICAgICAgICAgICAgICApWzBdPy5zY29yZVxyXG4gICAgICAgICAgICAgICAgICA/IGZpbHRlcmVkSXRlbS5xdWVzdGlvbk9wdGlvbnM/LmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5pRF9HVUlEID09IGVsZW1lbnQudmFsdWVcclxuICAgICAgICAgICAgICAgICAgKVswXS5zY29yZVxyXG4gICAgICAgICAgICAgICAgICA6IDA7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5NdWx0aXBsZVNlbGVjdC50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgICAgIGl0ZW0uU2VsZWN0ZWRJRHMgPSBlbGVtZW50LnZhbHVlO1xyXG4gICAgICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlKVxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGVsZW1lbnQudmFsdWUubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBlbGVtZW50LnZhbHVlW2luZGV4XTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5hZGRTaG93ZWRDaGlsZFF1ZXN0aW9ucyhpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlcmVkSXRlbS5pc0FsbG93U2NvcmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzY29yZVZhbHVlID0gZmlsdGVyZWRJdGVtLnF1ZXN0aW9uT3B0aW9ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAoaXRlbU9wdGlvbnMpID0+IGl0ZW1PcHRpb25zLmlEX0dVSUQgPT0gaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgIClbMF0/LnNjb3JlXHJcbiAgICAgICAgICAgICAgICAgICAgICA/IGZpbHRlcmVkSXRlbS5xdWVzdGlvbk9wdGlvbnM/LmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW1PcHRpb25zKSA9PiBpdGVtT3B0aW9ucy5pRF9HVUlEID09IGl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgIClbMF0uc2NvcmVcclxuICAgICAgICAgICAgICAgICAgICAgIDogMDtcclxuICAgICAgICAgICAgICAgICAgICBzY29yZSA9IHNjb3JlVmFsdWUgKyBzY29yZTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuQ291bnRyeS50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgICAgIGl0ZW0uU2VsZWN0ZWRJRHMgPSBbZWxlbWVudC52YWx1ZV07XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5JbWFnZS50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgICAgIGl0ZW0uRmlsZURUTyA9IGVsZW1lbnQudmFsdWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5GaWxlLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUpXHJcbiAgICAgICAgICAgICAgICBpdGVtLkZpbGVEVE8gPSBlbGVtZW50LnZhbHVlLkZpbGVcclxuICAgICAgICAgICAgICAgICAgPyBlbGVtZW50LnZhbHVlLkZpbGVcclxuICAgICAgICAgICAgICAgICAgOiBlbGVtZW50LnZhbHVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuTXVsdGlGaWxlLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICAgICAgaXRlbS5GaWxlQ29ycmVsYXRpb25EVE8gPSBlbGVtZW50LnZhbHVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZmlsdGVyZWRJdGVtLnZhbHVlID0gaXRlbTtcclxuICAgICAgICAgIGZpbHRlcmVkSXRlbS52YWx1ZS5zY29yZSA9IHNjb3JlO1xyXG4gICAgICAgICAgdGhpcy5yZXN1bHQucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5vcHRpb25zLlZhbHVlc0xpc3QgPSB0aGlzLnJlc3VsdDtcclxuICAgICAgdGhpcy5jaGFuZ2VIaWRkZW5RdWVzdGlvbnNTdGF0dXMoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYWRkU2hvd2VkQ2hpbGRRdWVzdGlvbnMobmV3S2V5KSB7XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5vcHRpb25zLlF1ZXN0aW9uTGlzdC5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgdmFyIHF1ZXN0aW9uT3B0aW9uID0gdGhpcy5vcHRpb25zLlF1ZXN0aW9uTGlzdFtpbmRleF0ucXVlc3Rpb25PcHRpb25zO1xyXG4gICAgICBsZXQgT3B0aW9uID0gcXVlc3Rpb25PcHRpb24uZmlsdGVyKCh4KSA9PiB4LmlEX0dVSUQgPT09IG5ld0tleSlbMF07XHJcbiAgICAgIGlmIChPcHRpb24gJiYgT3B0aW9uPy5saW5rZWRRdWVzdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBPcHRpb24ubGlua2VkUXVlc3Rpb25zLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgY29uc3QgbGlua2VkUXVlc3Rpb24gPSBPcHRpb24ubGlua2VkUXVlc3Rpb25zW2luZGV4XTtcclxuICAgICAgICAgIGxldCBjaGVja0lzUXVlc3Rpb25FeGlzdCA9IHRoaXMuc2hvd2VkQ2hpbGRRdWVzdGlvbi5zb21lKFxyXG4gICAgICAgICAgICAoeCkgPT4geCA9PT0gYHEke2xpbmtlZFF1ZXN0aW9ufWBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpZiAoIWNoZWNrSXNRdWVzdGlvbkV4aXN0KVxyXG4gICAgICAgICAgICB0aGlzLnNob3dlZENoaWxkUXVlc3Rpb24ucHVzaChgcSR7bGlua2VkUXVlc3Rpb259YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VIaWRkZW5RdWVzdGlvbnNTdGF0dXMoKSB7XHJcbiAgICBsZXQgcXVlc3Rpb25zID0gdGhpcy5zaG93ZWRDaGlsZFF1ZXN0aW9uO1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuY2hlY2tMaXN0Lmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBsZXQgY2hlY2tJZkV4aXN0ID0gdGhpcy5zaG93ZWRDaGlsZFF1ZXN0aW9uLnNvbWUoXHJcbiAgICAgICAgKHgpID0+IHggPT09IHRoaXMuY2hlY2tMaXN0W2luZGV4XS5OYW1lXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChjaGVja0lmRXhpc3QpIHtcclxuICAgICAgICBsZXQgcXVlc3Rpb25JZCA9IHRoaXMuY2hlY2tMaXN0W2luZGV4XS5OYW1lLnJlcGxhY2UoJ3EnLCAnJyk7XHJcbiAgICAgICAgbGV0IFF1ZXN0aW9uID0gdGhpcy5vcHRpb25zLlF1ZXN0aW9uTGlzdC5maWx0ZXIoXHJcbiAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5pRF9HVUlEID09IHF1ZXN0aW9uSWRcclxuICAgICAgICApWzBdO1xyXG4gICAgICAgIHRoaXMuY2hlY2tMaXN0W2luZGV4XS5Jc1JlYWRvbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKFF1ZXN0aW9uLm9wdGlvbnMuaXNSZXF1aXJlZCAmJiAhdGhpcy5jaGVja0xpc3RbaW5kZXhdLklzUmVxdWlyZWQpIHtcclxuICAgICAgICAgIHRoaXMuY2hlY2tMaXN0W2luZGV4XS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuZmlsZWRHcm91cFxyXG4gICAgICAgICAgICAuZ2V0KHRoaXMuY2hlY2tMaXN0W2luZGV4XS5OYW1lKVxyXG4gICAgICAgICAgICAuYWRkVmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwLmdldCh0aGlzLmNoZWNrTGlzdFtpbmRleF0uTmFtZSkudmFsdWUgPT0gbnVsbCB8fFxyXG4gICAgICAgICAgICB0aGlzLmZpbGVkR3JvdXAuZ2V0KHRoaXMuY2hlY2tMaXN0W2luZGV4XS5OYW1lKS52YWx1ZSA9PVxyXG4gICAgICAgICAgICB1bmRlZmluZWQgfHxcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwLmdldCh0aGlzLmNoZWNrTGlzdFtpbmRleF0uTmFtZSkudmFsdWUgPT0gJydcclxuICAgICAgICAgIClcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwXHJcbiAgICAgICAgICAgICAgLmdldCh0aGlzLmNoZWNrTGlzdFtpbmRleF0uTmFtZSlcclxuICAgICAgICAgICAgICAuc2V0RXJyb3JzKHsgcmVxdWlyZWQ6IHRydWUgfSk7XHJcbiAgICAgICAgICBlbHNlIHRoaXMuZmlsZWRHcm91cC5nZXQodGhpcy5jaGVja0xpc3RbaW5kZXhdLk5hbWUpLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jaGVja0xpc3RbaW5kZXhdLklzUmVhZG9ubHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY2hlY2tMaXN0W2luZGV4XS5Jc1JlcXVpcmVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jaGVja0xpc3RbaW5kZXhdLlZhbHVlID0gbnVsbDtcclxuICAgICAgICB0aGlzLmZpbGVkR3JvdXAuY29udHJvbHNbdGhpcy5jaGVja0xpc3RbaW5kZXhdLk5hbWVdLnJlbW92ZVZhbGlkYXRvcnMoXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpbGVkR3JvdXAuZ2V0KHRoaXMuY2hlY2tMaXN0W2luZGV4XS5OYW1lKS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvQ2FtZWwgPSAob2JqKSA9PiB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XHJcbiAgICAgIHJldHVybiBvYmoubWFwKCh2KSA9PiB0aGlzLnRvQ2FtZWwodikpO1xyXG4gICAgfSBlbHNlIGlmIChvYmogIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xyXG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5yZWR1Y2VSaWdodChcclxuICAgICAgICAocmVzdWx0LCBrZXkpID0+ICh7XHJcbiAgICAgICAgICAuLi5yZXN1bHQsXHJcbiAgICAgICAgICBbKGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKSB8fCBrZXkpLnRvU3RyaW5nKCldOlxyXG4gICAgICAgICAgICB0aGlzLnRvQ2FtZWwob2JqW2tleV0pLFxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHt9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JqO1xyXG4gIH07XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInN1cnZleS1wcmV2aWV3XCI+XHJcbiAgICA8bmctdGVtcGxhdGUgYWRIb3N0PjwvbmctdGVtcGxhdGU+XHJcbjwvZGl2PlxyXG5cclxuIl19