@hmcts/ccd-case-ui-toolkit 7.1.51-ongoing-accessibility-v1 → 7.1.51

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 (110) hide show
  1. package/esm2022/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.mjs +154 -33
  2. package/esm2022/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.mjs +103 -43
  3. package/esm2022/lib/shared/components/case-editor/case-editor.module.mjs +7 -4
  4. package/esm2022/lib/shared/components/case-editor/services/case-flag-state.service.mjs +7 -1
  5. package/esm2022/lib/shared/components/case-list/case-list.component.mjs +20 -23
  6. package/esm2022/lib/shared/components/case-viewer/case-event-trigger/case-event-trigger.component.mjs +14 -4
  7. package/esm2022/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.mjs +15 -5
  8. package/esm2022/lib/shared/components/pagination/pagination.component.mjs +6 -8
  9. package/esm2022/lib/shared/components/palette/base-field/abstract-field-write-journey.component.mjs +95 -0
  10. package/esm2022/lib/shared/components/palette/base-field/abstract-journey.component.mjs +81 -0
  11. package/esm2022/lib/shared/components/palette/base-field/index.mjs +3 -1
  12. package/esm2022/lib/shared/components/palette/case-file-view/components/case-file-view-folder-selector/case-file-view-folder-selector.component.mjs +6 -6
  13. package/esm2022/lib/shared/components/palette/case-file-view/components/shared/case-file-view-overlay-menu/case-file-view-overlay-menu.component.mjs +13 -15
  14. package/esm2022/lib/shared/components/palette/case-flag/components/add-comments/add-comments.component.mjs +30 -21
  15. package/esm2022/lib/shared/components/palette/case-flag/components/case-flag-summary-list/case-flag-summary-list.component.mjs +3 -3
  16. package/esm2022/lib/shared/components/palette/case-flag/components/confirm-flag-status/confirm-flag-status.component.mjs +25 -22
  17. package/esm2022/lib/shared/components/palette/case-flag/components/manage-case-flags/manage-case-flags.component.mjs +154 -36
  18. package/esm2022/lib/shared/components/palette/case-flag/components/search-language-interpreter/search-language-interpreter.component.mjs +33 -29
  19. package/esm2022/lib/shared/components/palette/case-flag/components/select-flag-location/select-flag-location.component.mjs +33 -28
  20. package/esm2022/lib/shared/components/palette/case-flag/components/select-flag-type/select-flag-type.component.mjs +177 -71
  21. package/esm2022/lib/shared/components/palette/case-flag/components/update-flag/update-flag-add-translation-form/update-flag-add-translation-form.component.mjs +32 -28
  22. package/esm2022/lib/shared/components/palette/case-flag/components/update-flag/update-flag.component.mjs +123 -105
  23. package/esm2022/lib/shared/components/palette/case-flag/read-case-flag-field.component.mjs +31 -4
  24. package/esm2022/lib/shared/components/palette/case-flag/write-case-flag-field.component.mjs +147 -33
  25. package/esm2022/lib/shared/components/palette/linked-cases/components/before-you-start/before-you-start.component.mjs +44 -23
  26. package/esm2022/lib/shared/components/palette/linked-cases/components/check-your-answers/check-your-answers.component.mjs +29 -7
  27. package/esm2022/lib/shared/components/palette/linked-cases/components/link-cases/link-cases.component.mjs +84 -50
  28. package/esm2022/lib/shared/components/palette/linked-cases/components/no-linked-cases/no-linked-cases.component.mjs +13 -9
  29. package/esm2022/lib/shared/components/palette/linked-cases/components/unlink-cases/unlink-cases.component.mjs +84 -44
  30. package/esm2022/lib/shared/components/palette/linked-cases/services/linked-cases.service.mjs +25 -2
  31. package/esm2022/lib/shared/components/palette/linked-cases/write-linked-cases-field.component.mjs +110 -30
  32. package/esm2022/lib/shared/components/palette/palette.module.mjs +2 -2
  33. package/esm2022/lib/shared/domain/index.mjs +2 -1
  34. package/esm2022/lib/shared/domain/journey/index.mjs +3 -0
  35. package/esm2022/lib/shared/domain/journey/journey-instigator.model.mjs +2 -0
  36. package/esm2022/lib/shared/domain/journey/journey.model.mjs +2 -0
  37. package/esm2022/lib/shared/pipes/complex/ccd-page-fields.pipe.mjs +2 -2
  38. package/esm2022/lib/shared/services/index.mjs +2 -1
  39. package/esm2022/lib/shared/services/journey/index.mjs +2 -0
  40. package/esm2022/lib/shared/services/journey/multipage-component-state.service.mjs +117 -0
  41. package/fesm2022/hmcts-ccd-case-ui-toolkit.mjs +1894 -825
  42. package/fesm2022/hmcts-ccd-case-ui-toolkit.mjs.map +1 -1
  43. package/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.d.ts +19 -3
  44. package/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.d.ts.map +1 -1
  45. package/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.d.ts +11 -2
  46. package/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.d.ts.map +1 -1
  47. package/lib/shared/components/case-editor/case-editor.module.d.ts.map +1 -1
  48. package/lib/shared/components/case-editor/services/case-flag-state.service.d.ts +3 -0
  49. package/lib/shared/components/case-editor/services/case-flag-state.service.d.ts.map +1 -1
  50. package/lib/shared/components/case-viewer/case-event-trigger/case-event-trigger.component.d.ts +2 -1
  51. package/lib/shared/components/case-viewer/case-event-trigger/case-event-trigger.component.d.ts.map +1 -1
  52. package/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.d.ts +5 -1
  53. package/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.d.ts.map +1 -1
  54. package/lib/shared/components/palette/base-field/abstract-field-write-journey.component.d.ts +30 -0
  55. package/lib/shared/components/palette/base-field/abstract-field-write-journey.component.d.ts.map +1 -0
  56. package/lib/shared/components/palette/base-field/abstract-journey.component.d.ts +27 -0
  57. package/lib/shared/components/palette/base-field/abstract-journey.component.d.ts.map +1 -0
  58. package/lib/shared/components/palette/base-field/index.d.ts +2 -0
  59. package/lib/shared/components/palette/base-field/index.d.ts.map +1 -1
  60. package/lib/shared/components/palette/case-file-view/components/shared/case-file-view-overlay-menu/case-file-view-overlay-menu.component.d.ts +0 -1
  61. package/lib/shared/components/palette/case-file-view/components/shared/case-file-view-overlay-menu/case-file-view-overlay-menu.component.d.ts.map +1 -1
  62. package/lib/shared/components/palette/case-flag/components/add-comments/add-comments.component.d.ts +4 -2
  63. package/lib/shared/components/palette/case-flag/components/add-comments/add-comments.component.d.ts.map +1 -1
  64. package/lib/shared/components/palette/case-flag/components/confirm-flag-status/confirm-flag-status.component.d.ts +4 -2
  65. package/lib/shared/components/palette/case-flag/components/confirm-flag-status/confirm-flag-status.component.d.ts.map +1 -1
  66. package/lib/shared/components/palette/case-flag/components/manage-case-flags/manage-case-flags.component.d.ts +16 -4
  67. package/lib/shared/components/palette/case-flag/components/manage-case-flags/manage-case-flags.component.d.ts.map +1 -1
  68. package/lib/shared/components/palette/case-flag/components/search-language-interpreter/search-language-interpreter.component.d.ts +6 -3
  69. package/lib/shared/components/palette/case-flag/components/search-language-interpreter/search-language-interpreter.component.d.ts.map +1 -1
  70. package/lib/shared/components/palette/case-flag/components/select-flag-location/select-flag-location.component.d.ts +5 -2
  71. package/lib/shared/components/palette/case-flag/components/select-flag-location/select-flag-location.component.d.ts.map +1 -1
  72. package/lib/shared/components/palette/case-flag/components/select-flag-type/select-flag-type.component.d.ts +21 -6
  73. package/lib/shared/components/palette/case-flag/components/select-flag-type/select-flag-type.component.d.ts.map +1 -1
  74. package/lib/shared/components/palette/case-flag/components/update-flag/update-flag-add-translation-form/update-flag-add-translation-form.component.d.ts +5 -2
  75. package/lib/shared/components/palette/case-flag/components/update-flag/update-flag-add-translation-form/update-flag-add-translation-form.component.d.ts.map +1 -1
  76. package/lib/shared/components/palette/case-flag/components/update-flag/update-flag.component.d.ts +7 -3
  77. package/lib/shared/components/palette/case-flag/components/update-flag/update-flag.component.d.ts.map +1 -1
  78. package/lib/shared/components/palette/case-flag/read-case-flag-field.component.d.ts +1 -0
  79. package/lib/shared/components/palette/case-flag/read-case-flag-field.component.d.ts.map +1 -1
  80. package/lib/shared/components/palette/case-flag/write-case-flag-field.component.d.ts +18 -6
  81. package/lib/shared/components/palette/case-flag/write-case-flag-field.component.d.ts.map +1 -1
  82. package/lib/shared/components/palette/linked-cases/components/before-you-start/before-you-start.component.d.ts +6 -4
  83. package/lib/shared/components/palette/linked-cases/components/before-you-start/before-you-start.component.d.ts.map +1 -1
  84. package/lib/shared/components/palette/linked-cases/components/check-your-answers/check-your-answers.component.d.ts +8 -3
  85. package/lib/shared/components/palette/linked-cases/components/check-your-answers/check-your-answers.component.d.ts.map +1 -1
  86. package/lib/shared/components/palette/linked-cases/components/link-cases/link-cases.component.d.ts +8 -3
  87. package/lib/shared/components/palette/linked-cases/components/link-cases/link-cases.component.d.ts.map +1 -1
  88. package/lib/shared/components/palette/linked-cases/components/no-linked-cases/no-linked-cases.component.d.ts +5 -2
  89. package/lib/shared/components/palette/linked-cases/components/no-linked-cases/no-linked-cases.component.d.ts.map +1 -1
  90. package/lib/shared/components/palette/linked-cases/components/unlink-cases/unlink-cases.component.d.ts +9 -3
  91. package/lib/shared/components/palette/linked-cases/components/unlink-cases/unlink-cases.component.d.ts.map +1 -1
  92. package/lib/shared/components/palette/linked-cases/services/linked-cases.service.d.ts +8 -0
  93. package/lib/shared/components/palette/linked-cases/services/linked-cases.service.d.ts.map +1 -1
  94. package/lib/shared/components/palette/linked-cases/write-linked-cases-field.component.d.ts +10 -3
  95. package/lib/shared/components/palette/linked-cases/write-linked-cases-field.component.d.ts.map +1 -1
  96. package/lib/shared/domain/index.d.ts +1 -0
  97. package/lib/shared/domain/index.d.ts.map +1 -1
  98. package/lib/shared/domain/journey/index.d.ts +3 -0
  99. package/lib/shared/domain/journey/index.d.ts.map +1 -0
  100. package/lib/shared/domain/journey/journey-instigator.model.d.ts +5 -0
  101. package/lib/shared/domain/journey/journey-instigator.model.d.ts.map +1 -0
  102. package/lib/shared/domain/journey/journey.model.d.ts +19 -0
  103. package/lib/shared/domain/journey/journey.model.d.ts.map +1 -0
  104. package/lib/shared/services/index.d.ts +1 -0
  105. package/lib/shared/services/index.d.ts.map +1 -1
  106. package/lib/shared/services/journey/index.d.ts +2 -0
  107. package/lib/shared/services/journey/index.d.ts.map +1 -0
  108. package/lib/shared/services/journey/multipage-component-state.service.d.ts +26 -0
  109. package/lib/shared/services/journey/multipage-component-state.service.d.ts.map +1 -0
  110. package/package.json +1 -1
@@ -1,11 +1,13 @@
1
1
  import { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';
2
2
  import { FormControl, FormGroup } from '@angular/forms';
3
+ import { cloneDeep } from 'lodash';
3
4
  import { FieldsUtils } from '../../../../../services/fields';
4
5
  import { CaseFlagDisplayContextParameter, CaseFlagFieldState, CaseFlagStatus, CaseFlagWizardStepTitle, SelectFlagErrorMessage } from '../../enums';
6
+ import { AbstractJourneyComponent } from '../../../base-field';
5
7
  import * as i0 from "@angular/core";
6
8
  const _c0 = a0 => ({ "form-group-error": a0 });
7
9
  function ManageCaseFlagsComponent_div_7_Template(rf, ctx) { if (rf & 1) {
8
- i0.ɵɵelementStart(0, "div", 9)(1, "span", 10);
10
+ i0.ɵɵelementStart(0, "div", 8)(1, "span", 9);
9
11
  i0.ɵɵtext(2);
10
12
  i0.ɵɵpipe(3, "rpxTranslate");
11
13
  i0.ɵɵelementEnd();
@@ -20,33 +22,25 @@ function ManageCaseFlagsComponent_div_7_Template(rf, ctx) { if (rf & 1) {
20
22
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(5, 4, ctx_r0.manageCaseFlagSelectedErrorMessage), " ");
21
23
  } }
22
24
  function ManageCaseFlagsComponent_div_9_Template(rf, ctx) { if (rf & 1) {
23
- i0.ɵɵelementStart(0, "div", 11);
24
- i0.ɵɵelement(1, "input", 12)(2, "label", 13);
25
+ const _r2 = i0.ɵɵgetCurrentView();
26
+ i0.ɵɵelementStart(0, "div", 10)(1, "input", 11);
27
+ i0.ɵɵlistener("change", function ManageCaseFlagsComponent_div_9_Template_input_change_1_listener() { const flagDisplay_r3 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onFlagSelectionChange(flagDisplay_r3)); });
28
+ i0.ɵɵelementEnd();
29
+ i0.ɵɵelement(2, "label", 12);
25
30
  i0.ɵɵpipe(3, "manageCaseFlagsLabelDisplay");
26
31
  i0.ɵɵelementEnd();
27
32
  } if (rf & 2) {
28
- const flagDisplay_r2 = ctx.$implicit;
29
- const i_r3 = ctx.index;
33
+ const flagDisplay_r3 = ctx.$implicit;
34
+ const i_r4 = ctx.index;
30
35
  const ctx_r0 = i0.ɵɵnextContext();
31
36
  i0.ɵɵadvance();
32
- i0.ɵɵpropertyInterpolate1("id", "flag-selection-", i_r3, "");
33
- i0.ɵɵproperty("name", ctx_r0.selectedControlName)("value", flagDisplay_r2)("formControlName", ctx_r0.selectedControlName);
37
+ i0.ɵɵpropertyInterpolate1("id", "flag-selection-", i_r4, "");
38
+ i0.ɵɵproperty("checked", ctx_r0.isSelected(flagDisplay_r3));
34
39
  i0.ɵɵadvance();
35
- i0.ɵɵpropertyInterpolate1("for", "flag-selection-", i_r3, "");
36
- i0.ɵɵproperty("innerHtml", i0.ɵɵpipeBind1(3, 8, flagDisplay_r2), i0.ɵɵsanitizeHtml);
37
- } }
38
- function ManageCaseFlagsComponent_div_10_Template(rf, ctx) { if (rf & 1) {
39
- const _r4 = i0.ɵɵgetCurrentView();
40
- i0.ɵɵelementStart(0, "div", 14)(1, "button", 15);
41
- i0.ɵɵlistener("click", function ManageCaseFlagsComponent_div_10_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onNext()); });
42
- i0.ɵɵtext(2);
43
- i0.ɵɵpipe(3, "rpxTranslate");
44
- i0.ɵɵelementEnd()();
45
- } if (rf & 2) {
46
- i0.ɵɵadvance(2);
47
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 1, "Next"));
40
+ i0.ɵɵpropertyInterpolate1("for", "flag-selection-", i_r4, "");
41
+ i0.ɵɵproperty("innerHtml", i0.ɵɵpipeBind1(3, 6, flagDisplay_r3), i0.ɵɵsanitizeHtml);
48
42
  } }
49
- export class ManageCaseFlagsComponent {
43
+ export class ManageCaseFlagsComponent extends AbstractJourneyComponent {
50
44
  formGroup;
51
45
  flagsData;
52
46
  caseTitle;
@@ -60,8 +54,23 @@ export class ManageCaseFlagsComponent {
60
54
  noFlagsError = false;
61
55
  selectedControlName = 'selectedManageCaseLocation';
62
56
  excludedFlagStatuses = [CaseFlagStatus.INACTIVE, CaseFlagStatus.NOT_APPROVED];
57
+ cachedControls;
63
58
  ngOnInit() {
64
59
  this.manageCaseFlagTitle = this.setManageCaseFlagTitle(this.displayContextParameter);
60
+ let originalStatus;
61
+ let originalIdToFlag;
62
+ // if the user has progressed to CYA and then navigated away, the flag they selected will be set as inactive, we need to reset this
63
+ const locationControl = this.formGroup.get(this.selectedControlName);
64
+ if (locationControl) {
65
+ originalStatus = locationControl?.value?.originalStatus;
66
+ originalIdToFlag = locationControl?.value?.flagDetailDisplay.flagDetail.id;
67
+ this.cachedControls = cloneDeep(this.formGroup.controls);
68
+ Object.keys(this.formGroup.controls).forEach((controlName) => {
69
+ if (controlName !== this.selectedControlName) {
70
+ this.formGroup.removeControl(controlName);
71
+ }
72
+ });
73
+ }
65
74
  // Map flags instances to objects for display, filtering out any where the original status is either "Inactive" or
66
75
  // "Not approved"
67
76
  /* istanbul ignore else */
@@ -71,7 +80,7 @@ export class ManageCaseFlagsComponent {
71
80
  if (flagsInstance.flags.details && flagsInstance.flags.details.length > 0) {
72
81
  displayData = [
73
82
  ...displayData,
74
- ...flagsInstance.flags.details.map((detail) => this.mapFlagDetailForDisplay(detail, flagsInstance))
83
+ ...flagsInstance.flags.details.map((detail) => this.mapFlagDetailForDisplay(detail, flagsInstance, originalStatus, originalIdToFlag))
75
84
  ];
76
85
  }
77
86
  return displayData;
@@ -87,7 +96,80 @@ export class ManageCaseFlagsComponent {
87
96
  this.onNoFlagsError();
88
97
  }
89
98
  }
90
- mapFlagDetailForDisplay(flagDetail, flagsInstance) {
99
+ onFlagSelectionChange(selectedFlag) {
100
+ // Update the form control value
101
+ this.formGroup.get(this.selectedControlName).setValue(selectedFlag);
102
+ const flagDisplayMap = new Map(this.flagsDisplayData.map((fd) => [this.getFlagID(fd), fd]));
103
+ this.updateFlagDetails(flagDisplayMap);
104
+ }
105
+ updateFlagDetails(flagDisplayMap) {
106
+ const updateDetails = (details, valueAccessor = (detail) => detail.value) => {
107
+ details.forEach((detail) => {
108
+ const matching = flagDisplayMap.get(detail.id);
109
+ if (matching) {
110
+ if (valueAccessor) {
111
+ valueAccessor(detail).status = matching.originalStatus;
112
+ }
113
+ else {
114
+ detail.status = matching.originalStatus;
115
+ }
116
+ }
117
+ });
118
+ };
119
+ // Iterate over each flagData item and update the corresponding flag details
120
+ for (const flagData of this.flagsData) {
121
+ const { caseField, flags } = flagData;
122
+ if (caseField) {
123
+ this.updateCaseFieldDetails(caseField, updateDetails);
124
+ }
125
+ // If flags.details exists at the root of flagData, update directly (status is not nested under value)
126
+ if (flags?.details) {
127
+ updateDetails(flags.details, null);
128
+ }
129
+ }
130
+ }
131
+ updateCaseFieldDetails(caseField, updateDetails) {
132
+ // For caseField._value.flags.details
133
+ if (caseField._value?.flags?.details) {
134
+ updateDetails(caseField._value.flags.details);
135
+ }
136
+ // For caseField.formatted_value.flags.details
137
+ if (caseField.formatted_value?.flags?.details) {
138
+ updateDetails(caseField.formatted_value.flags.details);
139
+ }
140
+ // If caseField._value is an array, check each element's nested flags.details
141
+ if (Array.isArray(caseField._value)) {
142
+ caseField._value.forEach((val) => {
143
+ if (val.value?.flags?.details) {
144
+ updateDetails(val.value.flags.details);
145
+ }
146
+ });
147
+ }
148
+ // If caseField.formatted_value is an array, check each element's nested flags.details
149
+ if (Array.isArray(caseField.formatted_value)) {
150
+ caseField.formatted_value.forEach((val) => {
151
+ if (val.value?.flags?.details) {
152
+ updateDetails(val.value.flags.details);
153
+ }
154
+ });
155
+ }
156
+ // For caseField.formatted_value.details (not nested under flags)
157
+ if (caseField.formatted_value?.details) {
158
+ updateDetails(caseField.formatted_value.details);
159
+ }
160
+ // For caseField._value.details (not nested under flags)
161
+ if (caseField._value?.details) {
162
+ updateDetails(caseField._value.details);
163
+ }
164
+ }
165
+ isSelected(flagDisplay) {
166
+ const selectedFlag = this.formGroup.get(this.selectedControlName)?.value;
167
+ return selectedFlag && this.getFlagID(selectedFlag) === this.getFlagID(flagDisplay);
168
+ }
169
+ getFlagID(flag) {
170
+ return flag?.flagDetailDisplay?.flagDetail?.id || '';
171
+ }
172
+ mapFlagDetailForDisplay(flagDetail, flagsInstance, originalStatusFromFG, originalPathToFlag) {
91
173
  // Reset the flag status with the original persisted status. This is needed because ngOnInit() needs to filter
92
174
  // out any "Inactive" or "Not approved" flags based on their status *before* modification. If the user changes a
93
175
  // flag's status then decides to return to the start of the flag update journey, the flag's status would no
@@ -110,15 +192,16 @@ export class ManageCaseFlagsComponent {
110
192
  }
111
193
  if (formattedValue && FieldsUtils.isNonEmptyObject(formattedValue)) {
112
194
  const originalFlagDetail = formattedValue.details?.find((detail) => detail.id === flagDetail.id);
195
+ const statusToUse = this.getStatusToUse(flagsInstance, originalPathToFlag, originalStatusFromFG, originalFlagDetail);
113
196
  if (originalFlagDetail) {
114
- originalStatus = originalFlagDetail.value?.status;
197
+ originalStatus = statusToUse;
115
198
  flagDetail.flagComment = originalFlagDetail.value?.flagComment;
116
199
  flagDetail.flagComment_cy = originalFlagDetail.value?.flagComment_cy;
117
200
  flagDetail.otherDescription = originalFlagDetail.value?.otherDescription;
118
201
  flagDetail.otherDescription_cy = originalFlagDetail.value?.otherDescription_cy;
119
202
  }
120
203
  }
121
- return {
204
+ let returnObj = {
122
205
  flagDetailDisplay: {
123
206
  partyName: flagsInstance.flags?.partyName,
124
207
  flagDetail,
@@ -130,6 +213,25 @@ export class ManageCaseFlagsComponent {
130
213
  roleOnCase: flagsInstance.flags?.roleOnCase,
131
214
  originalStatus
132
215
  };
216
+ if (originalPathToFlag === flagDetail.id) {
217
+ returnObj = { ...returnObj, originalStatus };
218
+ }
219
+ return returnObj;
220
+ }
221
+ getStatusToUse(flagsInstance, originalPathToFlag, originalStatusFromFG, originalFlagDetail) {
222
+ let statusToUse = '';
223
+ if (originalFlagDetail.id === originalPathToFlag) {
224
+ if (originalStatusFromFG) {
225
+ statusToUse = originalStatusFromFG === originalFlagDetail.value?.status ? originalFlagDetail.value?.status : originalStatusFromFG;
226
+ }
227
+ else {
228
+ statusToUse = originalFlagDetail.value?.status;
229
+ }
230
+ }
231
+ else {
232
+ statusToUse = originalFlagDetail.value?.status;
233
+ }
234
+ return statusToUse;
133
235
  }
134
236
  onNext() {
135
237
  // Validate flag selection
@@ -180,8 +282,27 @@ export class ManageCaseFlagsComponent {
180
282
  errorMessages: this.errorMessages
181
283
  });
182
284
  }
183
- static ɵfac = function ManageCaseFlagsComponent_Factory(t) { return new (t || ManageCaseFlagsComponent)(); };
184
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ManageCaseFlagsComponent, selectors: [["ccd-manage-case-flags"]], inputs: { formGroup: "formGroup", flagsData: "flagsData", caseTitle: "caseTitle", displayContextParameter: "displayContextParameter" }, outputs: { caseFlagStateEmitter: "caseFlagStateEmitter" }, decls: 11, vars: 10, consts: [[3, "formGroup"], [1, "govuk-form-group", 3, "ngClass"], ["aria-describedby", "manage-case-flag-heading", 1, "govuk-fieldset"], [1, "govuk-fieldset__legend", "govuk-fieldset__legend--m"], ["id", "manage-case-flag-heading", 1, "govuk-fieldset__heading"], ["id", "manage-case-flag-not-selected-error-message", "class", "govuk-error-message", 4, "ngIf"], ["data-module", "govuk-radios", "id", "conditional-radios-list", 1, "govuk-radios", "govuk-radios--conditional"], ["class", "govuk-radios__item", 4, "ngFor", "ngForOf"], ["class", "govuk-button-group", 4, "ngIf"], ["id", "manage-case-flag-not-selected-error-message", 1, "govuk-error-message"], [1, "govuk-visually-hidden"], [1, "govuk-radios__item"], ["type", "radio", 1, "govuk-radios__input", 3, "id", "name", "value", "formControlName"], [1, "govuk-label", "govuk-radios__label", 3, "for", "innerHtml"], [1, "govuk-button-group"], ["type", "button", 1, "button", "button-primary", 3, "click"]], template: function ManageCaseFlagsComponent_Template(rf, ctx) { if (rf & 1) {
285
+ next() {
286
+ this.onNext();
287
+ const cachedControl = this.cachedControls?.[this.selectedControlName];
288
+ if (cachedControl && this.getFlagID(cachedControl.value) === this.getFlagID(this.formGroup.value[this.selectedControlName])) {
289
+ this.reapplyCachedControls();
290
+ }
291
+ if (this.errorMessages.length === 0) {
292
+ super.next();
293
+ }
294
+ }
295
+ reapplyCachedControls() {
296
+ if (this.cachedControls) {
297
+ Object.keys(this.cachedControls).forEach((controlName) => {
298
+ if (!this.formGroup.contains(controlName)) {
299
+ this.formGroup.addControl(controlName, this.cachedControls[controlName]);
300
+ }
301
+ });
302
+ }
303
+ }
304
+ static ɵfac = /*@__PURE__*/ (() => { let ɵManageCaseFlagsComponent_BaseFactory; return function ManageCaseFlagsComponent_Factory(t) { return (ɵManageCaseFlagsComponent_BaseFactory || (ɵManageCaseFlagsComponent_BaseFactory = i0.ɵɵgetInheritedFactory(ManageCaseFlagsComponent)))(t || ManageCaseFlagsComponent); }; })();
305
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ManageCaseFlagsComponent, selectors: [["ccd-manage-case-flags"]], inputs: { formGroup: "formGroup", flagsData: "flagsData", caseTitle: "caseTitle", displayContextParameter: "displayContextParameter" }, outputs: { caseFlagStateEmitter: "caseFlagStateEmitter" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 10, vars: 9, consts: [[3, "formGroup"], [1, "govuk-form-group", 3, "ngClass"], ["aria-describedby", "manage-case-flag-heading", 1, "govuk-fieldset"], [1, "govuk-fieldset__legend", "govuk-fieldset__legend--m"], ["id", "manage-case-flag-heading", 1, "govuk-fieldset__heading"], ["id", "manage-case-flag-not-selected-error-message", "class", "govuk-error-message", 4, "ngIf"], ["data-module", "govuk-radios", "id", "conditional-radios-list", 1, "govuk-radios", "govuk-radios--conditional"], ["class", "govuk-radios__item", 4, "ngFor", "ngForOf"], ["id", "manage-case-flag-not-selected-error-message", 1, "govuk-error-message"], [1, "govuk-visually-hidden"], [1, "govuk-radios__item"], ["type", "radio", 1, "govuk-radios__input", 3, "change", "id", "checked"], [1, "govuk-label", "govuk-radios__label", 3, "for", "innerHtml"]], template: function ManageCaseFlagsComponent_Template(rf, ctx) { if (rf & 1) {
185
306
  i0.ɵɵelementContainerStart(0, 0);
186
307
  i0.ɵɵelementStart(1, "div", 1)(2, "fieldset", 2)(3, "legend", 3)(4, "h1", 4);
187
308
  i0.ɵɵtext(5);
@@ -189,27 +310,24 @@ export class ManageCaseFlagsComponent {
189
310
  i0.ɵɵelementEnd()();
190
311
  i0.ɵɵtemplate(7, ManageCaseFlagsComponent_div_7_Template, 6, 6, "div", 5);
191
312
  i0.ɵɵelementStart(8, "div", 6);
192
- i0.ɵɵtemplate(9, ManageCaseFlagsComponent_div_9_Template, 4, 10, "div", 7);
313
+ i0.ɵɵtemplate(9, ManageCaseFlagsComponent_div_9_Template, 4, 8, "div", 7);
193
314
  i0.ɵɵelementEnd()()();
194
315
  i0.ɵɵelementContainerEnd();
195
- i0.ɵɵtemplate(10, ManageCaseFlagsComponent_div_10_Template, 4, 3, "div", 8);
196
316
  } if (rf & 2) {
197
317
  i0.ɵɵproperty("formGroup", ctx.formGroup);
198
318
  i0.ɵɵadvance();
199
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(8, _c0, ctx.errorMessages.length > 0));
319
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(7, _c0, ctx.errorMessages.length > 0));
200
320
  i0.ɵɵadvance(4);
201
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(6, 6, ctx.manageCaseFlagTitle), " ");
321
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(6, 5, ctx.manageCaseFlagTitle), " ");
202
322
  i0.ɵɵadvance(2);
203
323
  i0.ɵɵproperty("ngIf", ctx.manageCaseFlagSelectedErrorMessage);
204
324
  i0.ɵɵadvance(2);
205
325
  i0.ɵɵproperty("ngForOf", ctx.flagsDisplayData);
206
- i0.ɵɵadvance();
207
- i0.ɵɵproperty("ngIf", !ctx.noFlagsError);
208
326
  } }, styles: [".flag-name-and-description{font-weight:700}\n"], encapsulation: 2 });
209
327
  }
210
328
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ManageCaseFlagsComponent, [{
211
329
  type: Component,
212
- args: [{ selector: 'ccd-manage-case-flags', encapsulation: ViewEncapsulation.None, template: "<ng-container [formGroup]=\"formGroup\">\n <div class=\"govuk-form-group\" [ngClass]=\"{'form-group-error': errorMessages.length > 0}\">\n <fieldset class=\"govuk-fieldset\" aria-describedby=\"manage-case-flag-heading\">\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--m\">\n <h1 id=\"manage-case-flag-heading\" class=\"govuk-fieldset__heading\">\n {{manageCaseFlagTitle | rpxTranslate}}\n </h1>\n </legend>\n <div id=\"manage-case-flag-not-selected-error-message\" class=\"govuk-error-message\"\n *ngIf=\"manageCaseFlagSelectedErrorMessage\">\n <span class=\"govuk-visually-hidden\">{{'Error:' | rpxTranslate}}</span> {{manageCaseFlagSelectedErrorMessage | rpxTranslate}}\n </div>\n <div class=\"govuk-radios govuk-radios--conditional\" data-module=\"govuk-radios\" id=\"conditional-radios-list\">\n <div class=\"govuk-radios__item\" *ngFor=\"let flagDisplay of flagsDisplayData; index as i\">\n <input class=\"govuk-radios__input\" id=\"flag-selection-{{i}}\" [name]=\"selectedControlName\"\n type=\"radio\" [value]=\"flagDisplay\" [formControlName]=\"selectedControlName\"/>\n <label class=\"govuk-label govuk-radios__label\" for=\"flag-selection-{{i}}\" [innerHtml]=\"flagDisplay | manageCaseFlagsLabelDisplay\"></label>\n </div>\n </div>\n </fieldset>\n </div>\n</ng-container>\n\n<div class=\"govuk-button-group\" *ngIf=\"!noFlagsError\">\n <button class=\"button button-primary\" type=\"button\" (click)=\"onNext()\">{{'Next' | rpxTranslate}}</button>\n</div>\n", styles: [".flag-name-and-description{font-weight:700}\n"] }]
330
+ args: [{ selector: 'ccd-manage-case-flags', encapsulation: ViewEncapsulation.None, template: "<ng-container [formGroup]=\"formGroup\">\n <div class=\"govuk-form-group\" [ngClass]=\"{'form-group-error': errorMessages.length > 0}\">\n <fieldset class=\"govuk-fieldset\" aria-describedby=\"manage-case-flag-heading\">\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--m\">\n <h1 id=\"manage-case-flag-heading\" class=\"govuk-fieldset__heading\">\n {{manageCaseFlagTitle | rpxTranslate}}\n </h1>\n </legend>\n <div id=\"manage-case-flag-not-selected-error-message\" class=\"govuk-error-message\"\n *ngIf=\"manageCaseFlagSelectedErrorMessage\">\n <span class=\"govuk-visually-hidden\">{{'Error:' | rpxTranslate}}</span> {{manageCaseFlagSelectedErrorMessage | rpxTranslate}}\n </div>\n <div class=\"govuk-radios govuk-radios--conditional\" data-module=\"govuk-radios\" id=\"conditional-radios-list\">\n <div class=\"govuk-radios__item\" *ngFor=\"let flagDisplay of flagsDisplayData; index as i\">\n <input class=\"govuk-radios__input\" id=\"flag-selection-{{i}}\"\n type=\"radio\"\n [checked]=\"isSelected(flagDisplay)\"\n (change)=\"onFlagSelectionChange(flagDisplay)\"/>\n <label class=\"govuk-label govuk-radios__label\" for=\"flag-selection-{{i}}\" [innerHtml]=\"flagDisplay | manageCaseFlagsLabelDisplay\"></label>\n </div>\n </div>\n </fieldset>\n </div>\n</ng-container>", styles: [".flag-name-and-description{font-weight:700}\n"] }]
213
331
  }], null, { formGroup: [{
214
332
  type: Input
215
333
  }], flagsData: [{
@@ -221,5 +339,5 @@ export class ManageCaseFlagsComponent {
221
339
  }], caseFlagStateEmitter: [{
222
340
  type: Output
223
341
  }] }); })();
224
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ManageCaseFlagsComponent, { className: "ManageCaseFlagsComponent", filePath: "lib/shared/components/palette/case-flag/components/manage-case-flags/manage-case-flags.component.ts", lineNumber: 14 }); })();
225
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlLWNhc2UtZmxhZ3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvY2FzZS1mbGFnL2NvbXBvbmVudHMvbWFuYWdlLWNhc2UtZmxhZ3MvbWFuYWdlLWNhc2UtZmxhZ3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvY2FzZS1mbGFnL2NvbXBvbmVudHMvbWFuYWdlLWNhc2UtZmxhZ3MvbWFuYWdlLWNhc2UtZmxhZ3MuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUU3RCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLHVCQUF1QixFQUFFLHNCQUFzQixFQUFFLE1BQU0sYUFBYSxDQUFDOzs7O0lDSzNJLEFBRkYsOEJBQzZDLGVBQ1A7SUFBQSxZQUEyQjs7SUFBQSxpQkFBTztJQUFDLFlBQ3pFOztJQUFBLGlCQUFNOzs7SUFEZ0MsZUFBMkI7SUFBM0Isb0RBQTJCO0lBQVEsZUFDekU7SUFEeUUsZ0dBQ3pFOzs7SUFFRSwrQkFBeUY7SUFHdkYsQUFGQSw0QkFDOEUsZ0JBQzREOztJQUM1SSxpQkFBTTs7Ozs7SUFIK0IsY0FBeUI7SUFBekIs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QkFBc0I7WUFDcEUsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO1NBQ2xDLENBQUMsQ0FBQztJQUNMLENBQUM7a0ZBOUlVLHdCQUF3Qjs2REFBeEIsd0JBQXdCO1lDYnJDLGdDQUFzQztZQUk5QixBQURGLEFBREYsQUFERiw4QkFBeUYsa0JBQ1YsZ0JBQ1YsWUFDRztZQUNoRSxZQUNGOztZQUNGLEFBREUsaUJBQUssRUFDRTtZQUNULHlFQUM2QztZQUc3Qyw4QkFBNEc7WUFDMUcsMEVBQXlGO1lBTy9GLEFBREUsQUFERSxpQkFBTSxFQUNHLEVBQ1A7O1lBR1IsMkVBQXNEOztZQXZCeEMseUNBQXVCO1lBQ0wsY0FBMEQ7WUFBMUQsa0ZBQTBEO1lBSWhGLGVBQ0Y7WUFERSw4RUFDRjtZQUdDLGVBQXdDO1lBQXhDLDZEQUF3QztZQUllLGVBQXFCO1lBQXJCLDhDQUFxQjtZQVVwRCxjQUFtQjtZQUFuQix3Q0FBbUI7OztpRkRWdkMsd0JBQXdCO2NBTnBDLFNBQVM7MkJBQ0UsdUJBQXVCLGlCQUdsQixpQkFBaUIsQ0FBQyxJQUFJO2dCQUdyQixTQUFTO2tCQUF4QixLQUFLO1lBQ1UsU0FBUztrQkFBeEIsS0FBSztZQUNVLFNBQVM7a0JBQXhCLEtBQUs7WUFDVSx1QkFBdUI7a0JBQXRDLEtBQUs7WUFDVyxvQkFBb0I7a0JBQXBDLE1BQU07O2tGQUxJLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vZG9tYWluJztcbmltcG9ydCB7IEZpZWxkc1V0aWxzIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2VydmljZXMvZmllbGRzJztcbmltcG9ydCB7IENhc2VGbGFnU3RhdGUsIEZsYWdEZXRhaWwsIEZsYWdEZXRhaWxEaXNwbGF5V2l0aEZvcm1Hcm91cFBhdGgsIEZsYWdzLCBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoIH0gZnJvbSAnLi4vLi4vZG9tYWluJztcbmltcG9ydCB7IENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIsIENhc2VGbGFnRmllbGRTdGF0ZSwgQ2FzZUZsYWdTdGF0dXMsIENhc2VGbGFnV2l6YXJkU3RlcFRpdGxlLCBTZWxlY3RGbGFnRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY2QtbWFuYWdlLWNhc2UtZmxhZ3MnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWFuYWdlLWNhc2UtZmxhZ3MuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tYW5hZ2UtY2FzZS1mbGFncy5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIE1hbmFnZUNhc2VGbGFnc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHB1YmxpYyBmb3JtR3JvdXA6IEZvcm1Hcm91cDtcbiAgQElucHV0KCkgcHVibGljIGZsYWdzRGF0YTogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aFtdO1xuICBASW5wdXQoKSBwdWJsaWMgY2FzZVRpdGxlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHB1YmxpYyBkaXNwbGF5Q29udGV4dFBhcmFtZXRlcjogc3RyaW5nO1xuICBAT3V0cHV0KCkgcHVibGljIGNhc2VGbGFnU3RhdGVFbWl0dGVyOiBFdmVudEVtaXR0ZXI8Q2FzZUZsYWdTdGF0ZT4gPSBuZXcgRXZlbnRFbWl0dGVyPENhc2VGbGFnU3RhdGU+KCk7XG5cbiAgcHVibGljIG1hbmFnZUNhc2VGbGFnVGl0bGU6IENhc2VGbGFnV2l6YXJkU3RlcFRpdGxlO1xuICBwdWJsaWMgZXJyb3JNZXNzYWdlczogRXJyb3JNZXNzYWdlW10gPSBbXTtcbiAgcHVibGljIG1hbmFnZUNhc2VGbGFnU2VsZWN0ZWRFcnJvck1lc3NhZ2U6IFNlbGVjdEZsYWdFcnJvck1lc3NhZ2UgPSBudWxsO1xuICBwdWJsaWMgZmxhZ3NEaXNwbGF5RGF0YTogRmxhZ0RldGFpbERpc3BsYXlXaXRoRm9ybUdyb3VwUGF0aFtdO1xuICBwdWJsaWMgZmxhZ3M6IEZsYWdzO1xuICBwdWJsaWMgbm9GbGFnc0Vycm9yID0gZmFsc2U7XG4gIHB1YmxpYyByZWFkb25seSBzZWxlY3RlZENvbnRyb2xOYW1lID0gJ3NlbGVjdGVkTWFuYWdlQ2FzZUxvY2F0aW9uJztcbiAgcHJpdmF0ZSByZWFkb25seSBleGNsdWRlZEZsYWdTdGF0dXNlczogQ2FzZUZsYWdTdGF0dXNbXSA9IFtDYXNlRmxhZ1N0YXR1cy5JTkFDVElWRSwgQ2FzZUZsYWdTdGF0dXMuTk9UX0FQUFJPVkVEXTtcblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5tYW5hZ2VDYXNlRmxhZ1RpdGxlID0gdGhpcy5zZXRNYW5hZ2VDYXNlRmxhZ1RpdGxlKHRoaXMuZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIpO1xuXG4gICAgLy8gTWFwIGZsYWdzIGluc3RhbmNlcyB0byBvYmplY3RzIGZvciBkaXNwbGF5LCBmaWx0ZXJpbmcgb3V0IGFueSB3aGVyZSB0aGUgb3JpZ2luYWwgc3RhdHVzIGlzIGVpdGhlciBcIkluYWN0aXZlXCIgb3JcbiAgICAvLyBcIk5vdCBhcHByb3ZlZFwiXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy5mbGFnc0RhdGEpIHtcbiAgICAgIHRoaXMuZmxhZ3NEaXNwbGF5RGF0YSA9IHRoaXMuZmxhZ3NEYXRhLnJlZHVjZSgoZGlzcGxheURhdGEsIGZsYWdzSW5zdGFuY2UpID0+IHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKGZsYWdzSW5zdGFuY2UuZmxhZ3MuZGV0YWlscyAmJiBmbGFnc0luc3RhbmNlLmZsYWdzLmRldGFpbHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGRpc3BsYXlEYXRhID0gW1xuICAgICAgICAgICAgLi4uZGlzcGxheURhdGEsXG4gICAgICAgICAgICAuLi5mbGFnc0luc3RhbmNlLmZsYWdzLmRldGFpbHMubWFwKChkZXRhaWwpID0+IHRoaXMubWFwRmxhZ0RldGFpbEZvckRpc3BsYXkoZGV0YWlsLCBmbGFnc0luc3RhbmNlKSlcbiAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkaXNwbGF5RGF0YTtcbiAgICAgIH0sIFtdKS5maWx0ZXIoKGZsYWdGb3JEaXNwbGF5KSA9PiAhdGhpcy5leGNsdWRlZEZsYWdTdGF0dXNlcy5pbmNsdWRlcyhmbGFnRm9yRGlzcGxheS5vcmlnaW5hbFN0YXR1cyBhcyBDYXNlRmxhZ1N0YXR1cykpO1xuICAgIH1cblxuICAgIC8vIEFkZCBhIEZvcm1Db250cm9sIGZvciB0aGUgc2VsZWN0ZWQgY2FzZSBmbGFnIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBmbGFncyBpbnN0YW5jZSByZW1haW5pbmcgYWZ0ZXIgbWFwcGluZ1xuICAgIGlmICh0aGlzLmZsYWdzRGlzcGxheURhdGEgJiYgdGhpcy5mbGFnc0Rpc3BsYXlEYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmFkZENvbnRyb2wodGhpcy5zZWxlY3RlZENvbnRyb2xOYW1lLCBuZXcgRm9ybUNvbnRyb2wobnVsbCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBmbGFncyBkaXNwbGF5IGRhdGEgbWVhbnMgdGhlcmUgYXJlIG5vIGZsYWdzIHRvIHNlbGVjdCBmcm9tLiBUaGUgdXNlciBjYW5ub3QgcHJvY2VlZCB3aXRoIGEgZmxhZyB1cGRhdGUuXG4gICAgICAvLyAoV2lsbCBuZWVkIHRvIGJlIGV4dGVuZGVkIHRvIGNoZWNrIGZvciBjYXNlLWxldmVsIGZsYWdzIGluIGZ1dHVyZSlcbiAgICAgIHRoaXMub25Ob0ZsYWdzRXJyb3IoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbWFwRmxhZ0RldGFpbEZvckRpc3BsYXkoZmxhZ0RldGFpbDogRmxhZ0RldGFpbCwgZmxhZ3NJbnN0YW5jZTogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aCk6IEZsYWdEZXRhaWxEaXNwbGF5V2l0aEZvcm1Hcm91cFBhdGgge1xuICAgIC8vIFJlc2V0IHRoZSBmbGFnIHN0YXR1cyB3aXRoIHRoZSBvcmlnaW5hbCBwZXJzaXN0ZWQgc3RhdHVzLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIG5nT25Jbml0KCkgbmVlZHMgdG8gZmlsdGVyXG4gICAgLy8gb3V0IGFueSBcIkluYWN0aXZlXCIgb3IgXCJOb3QgYXBwcm92ZWRcIiBmbGFncyBiYXNlZCBvbiB0aGVpciBzdGF0dXMgKmJlZm9yZSogbW9kaWZpY2F0aW9uLiBJZiB0aGUgdXNlciBjaGFuZ2VzIGFcbiAgICAvLyBmbGFnJ3Mgc3RhdHVzIHRoZW4gZGVjaWRlcyB0byByZXR1cm4gdG8gdGhlIHN0YXJ0IG9mIHRoZSBmbGFnIHVwZGF0ZSBqb3VybmV5LCB0aGUgZmxhZydzIHN0YXR1cyB3b3VsZCBub1xuICAgIC8vIGxvbmdlciByZWZsZWN0IGl0cyBhY3R1YWwgKnBlcnNpc3RlZCogc3RhdHVzXG4gICAgLy8gQWxzbyByZXNldCBjb21tZW50cyBhbmQgZGVzY3JpcHRpb24gZmllbGRzIChib3RoIEVuZ2xpc2ggYW5kIFdlbHNoKSB3aXRoIHRoZSBvcmlnaW5hbCBwZXJzaXN0ZWQgZGF0YSwgdG8gYXZvaWRcbiAgICAvLyB0aGUgVUkgY2FjaGluZyBhbnkgY2hhbmdlcyB0aGF0IHRoZSB1c2VyIG1pZ2h0IG5vdCB3YW50IHBlcnNpc3RlZCwgaWYgdGhleSBzdGFydCBvdmVyIGFuZCBkb24ndCBpbnRlbmQgdG8gYWRkXG4gICAgLy8gdHJhbnNsYXRpb25zIHN1YnNlcXVlbnRseVxuICAgIGxldCBvcmlnaW5hbFN0YXR1czogc3RyaW5nO1xuICAgIGxldCBmb3JtYXR0ZWRWYWx1ZSA9IGZsYWdzSW5zdGFuY2UuY2FzZUZpZWxkPy5mb3JtYXR0ZWRfdmFsdWU7XG4gICAgLy8gVXNlIHRoZSBwYXRoVG9GbGFnc0Zvcm1Hcm91cCBwcm9wZXJ0eSBmcm9tIHRoZSBzZWxlY3RlZCBmbGFnIGxvY2F0aW9uIHRvIGRyaWxsIGRvd24gdG8gdGhlIGNvcnJlY3QgcGFydCBvZiB0aGVcbiAgICAvLyBDYXNlRmllbGQgZm9ybWF0dGVkX3ZhbHVlIGZyb20gd2hpY2ggdG8gZ2V0IHRoZSBvcmlnaW5hbCBwZXJzaXN0ZWQgZGF0YVxuICAgIGNvbnN0IHBhdGhUb1ZhbHVlID0gZmxhZ3NJbnN0YW5jZS5wYXRoVG9GbGFnc0Zvcm1Hcm91cDtcbiAgICAvLyBSb290LWxldmVsIEZsYWdzIENhc2VGaWVsZHMgZG9uJ3QgaGF2ZSBhIGRvdC1kZWxpbWl0ZWQgcGF0aCAtIGp1c3QgdGhlIENhc2VGaWVsZCBJRCBpdHNlbGYgLSBzbyBkb24ndCBkcmlsbCBkb3duXG4gICAgaWYgKHBhdGhUb1ZhbHVlLmluZGV4T2YoJy4nKSA+IC0xKSB7XG4gICAgICBwYXRoVG9WYWx1ZS5zbGljZShwYXRoVG9WYWx1ZS5pbmRleE9mKCcuJykgKyAxKS5zcGxpdCgnLicpLmZvckVhY2goKHBhcnQpID0+IHtcbiAgICAgICAgaWYgKGZvcm1hdHRlZFZhbHVlICYmIEZpZWxkc1V0aWxzLmlzTm9uRW1wdHlPYmplY3QoZm9ybWF0dGVkVmFsdWUpKSB7XG4gICAgICAgICAgZm9ybWF0dGVkVmFsdWUgPSBmb3JtYXR0ZWRWYWx1ZVtwYXJ0XTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChmb3JtYXR0ZWRWYWx1ZSAmJiBGaWVsZHNVdGlscy5pc05vbkVtcHR5T2JqZWN0KGZvcm1hdHRlZFZhbHVlKSkge1xuICAgICAgY29uc3Qgb3JpZ2luYWxGbGFnRGV0YWlsID0gZm9ybWF0dGVkVmFsdWUuZGV0YWlscz8uZmluZCgoZGV0YWlsKSA9PiBkZXRhaWwuaWQgPT09IGZsYWdEZXRhaWwuaWQpO1xuICAgICAgaWYgKG9yaWdpbmFsRmxhZ0RldGFpbCkge1xuICAgICAgICBvcmlnaW5hbFN0YXR1cyA9IG9yaWdpbmFsRmxhZ0RldGFpbC52YWx1ZT8uc3RhdHVzO1xuICAgICAgICBmbGFnRGV0YWlsLmZsYWdDb21tZW50ID0gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlPy5mbGFnQ29tbWVudDtcbiAgICAgICAgZmxhZ0RldGFpbC5mbGFnQ29tbWVudF9jeSA9IG9yaWdpbmFsRmxhZ0RldGFpbC52YWx1ZT8uZmxhZ0NvbW1lbnRfY3k7XG4gICAgICAgIGZsYWdEZXRhaWwub3RoZXJEZXNjcmlwdGlvbiA9IG9yaWdpbmFsRmxhZ0RldGFpbC52YWx1ZT8ub3RoZXJEZXNjcmlwdGlvbjtcbiAgICAgICAgZmxhZ0RldGFpbC5vdGhlckRlc2NyaXB0aW9uX2N5ID0gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlPy5vdGhlckRlc2NyaXB0aW9uX2N5O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZmxhZ0RldGFpbERpc3BsYXk6IHtcbiAgICAgICAgcGFydHlOYW1lOiBmbGFnc0luc3RhbmNlLmZsYWdzPy5wYXJ0eU5hbWUsXG4gICAgICAgIGZsYWdEZXRhaWwsXG4gICAgICAgIGZsYWdzQ2FzZUZpZWxkSWQ6IGZsYWdzSW5zdGFuY2UuY2FzZUZpZWxkPy5pZCxcbiAgICAgICAgdmlzaWJpbGl0eTogZmxhZ3NJbnN0YW5jZS5mbGFncz8udmlzaWJpbGl0eVxuICAgICAgfSxcbiAgICAgIHBhdGhUb0ZsYWdzRm9ybUdyb3VwOiBmbGFnc0luc3RhbmNlLnBhdGhUb0ZsYWdzRm9ybUdyb3VwLFxuICAgICAgY2FzZUZpZWxkOiBmbGFnc0luc3RhbmNlLmNhc2VGaWVsZCxcbiAgICAgIHJvbGVPbkNhc2U6IGZsYWdzSW5zdGFuY2UuZmxhZ3M/LnJvbGVPbkNhc2UsXG4gICAgICBvcmlnaW5hbFN0YXR1c1xuICAgIH07XG4gIH1cblxuICBwdWJsaWMgb25OZXh0KCk6IHZvaWQge1xuICAgIC8vIFZhbGlkYXRlIGZsYWcgc2VsZWN0aW9uXG4gICAgdGhpcy52YWxpZGF0ZVNlbGVjdGlvbigpO1xuICAgIC8vIFJldHVybiBjYXNlIGZsYWcgZmllbGQgc3RhdGUsIGVycm9yIG1lc3NhZ2VzLCBhbmQgZmxhZyBzZWxlY3Rpb24gdG8gdGhlIHBhcmVudFxuICAgIHRoaXMuY2FzZUZsYWdTdGF0ZUVtaXR0ZXIuZW1pdCh7XG4gICAgICBjdXJyZW50Q2FzZUZsYWdGaWVsZFN0YXRlOiBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19NQU5BR0VfQ0FTRV9GTEFHUyxcbiAgICAgIGVycm9yTWVzc2FnZXM6IHRoaXMuZXJyb3JNZXNzYWdlcyxcbiAgICAgIHNlbGVjdGVkRmxhZzogdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMuc2VsZWN0ZWRDb250cm9sTmFtZSkudmFsdWVcbiAgICAgICAgPyB0aGlzLmZvcm1Hcm91cC5nZXQodGhpcy5zZWxlY3RlZENvbnRyb2xOYW1lKS52YWx1ZSBhcyBGbGFnRGV0YWlsRGlzcGxheVdpdGhGb3JtR3JvdXBQYXRoXG4gICAgICAgIDogbnVsbFxuICAgIH0pO1xuXG4gICAgd2luZG93LnNjcm9sbFRvKDAsIDApO1xuICB9XG5cbiAgcHVibGljIHNldE1hbmFnZUNhc2VGbGFnVGl0bGUoZGlzcGxheUNvbnRleHRQYXJhbWV0ZXI6IHN0cmluZyk6IENhc2VGbGFnV2l6YXJkU3RlcFRpdGxlIHtcbiAgICBzd2l0Y2ggKGRpc3BsYXlDb250ZXh0UGFyYW1ldGVyKSB7XG4gICAgICBjYXNlIENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIuVVBEQVRFOlxuICAgICAgY2FzZSBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLlVQREFURV8yX1BPSU5UXzE6XG4gICAgICAgIHJldHVybiBDYXNlRmxhZ1dpemFyZFN0ZXBUaXRsZS5NQU5BR0VfQ0FTRV9GTEFHUztcbiAgICAgIGNhc2UgQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlci5VUERBVEVfRVhURVJOQUw6XG4gICAgICAgIHJldHVybiBDYXNlRmxhZ1dpemFyZFN0ZXBUaXRsZS5NQU5BR0VfU1VQUE9SVDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBDYXNlRmxhZ1dpemFyZFN0ZXBUaXRsZS5OT05FO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy5tYW5hZ2VDYXNlRmxhZ1NlbGVjdGVkRXJyb3JNZXNzYWdlID0gbnVsbDtcbiAgICB0aGlzLmVycm9yTWVzc2FnZXMgPSBbXTtcbiAgICBpZiAoIXRoaXMuZm9ybUdyb3VwLmdldCh0aGlzLnNlbGVjdGVkQ29udHJvbE5hbWUpLnZhbHVlKSB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSB0aGlzLmRpc3BsYXlDb250ZXh0UGFyYW1ldGVyID09PSBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLlVQREFURV9FWFRFUk5BTCA/XG4gICAgICAgIFNlbGVjdEZsYWdFcnJvck1lc3NhZ2UuTUFOQUdFX1NVUFBPUlRfRkxBR19OT1RfU0VMRUNURUQgOiBTZWxlY3RGbGFnRXJyb3JNZXNzYWdlLk1BTkFHRV9DQVNFX0ZMQUdTX0ZMQUdfTk9UX1NFTEVDVEVEO1xuICAgICAgdGhpcy5tYW5hZ2VDYXNlRmxhZ1NlbGVjdGVkRXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlO1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2VzLnB1c2goe1xuICAgICAgICB0aXRsZTogJycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBlcnJvck1lc3NhZ2UsXG4gICAgICAgIGZpZWxkSWQ6ICdjb25kaXRpb25hbC1yYWRpb3MtbGlzdCdcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb25Ob0ZsYWdzRXJyb3IoKTogdm9pZCB7XG4gICAgLy8gU2V0IGVycm9yIGZsYWcgb24gY29tcG9uZW50IHRvIHJlbW92ZSB0aGUgXCJOZXh0XCIgYnV0dG9uICh1c2VyIGNhbm5vdCBwcm9jZWVkIHdpdGggZmxhZyBjcmVhdGlvbilcbiAgICB0aGlzLm5vRmxhZ3NFcnJvciA9IHRydWU7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2VzID0gW107XG4gICAgdGhpcy5lcnJvck1lc3NhZ2VzLnB1c2goeyB0aXRsZTogJycsIGRlc2NyaXB0aW9uOiBTZWxlY3RGbGFnRXJyb3JNZXNzYWdlLk5PX0ZMQUdTLCBmaWVsZElkOiAnY29uZGl0aW9uYWwtcmFkaW9zLWxpc3QnIH0pO1xuICAgIC8vIFJldHVybiBjYXNlIGZsYWcgZmllbGQgc3RhdGUgYW5kIGVycm9yIG1lc3NhZ2VzIHRvIHRoZSBwYXJlbnRcbiAgICB0aGlzLmNhc2VGbGFnU3RhdGVFbWl0dGVyLmVtaXQoe1xuICAgICAgY3VycmVudENhc2VGbGFnRmllbGRTdGF0ZTogQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfTUFOQUdFX0NBU0VfRkxBR1MsXG4gICAgICBlcnJvck1lc3NhZ2VzOiB0aGlzLmVycm9yTWVzc2FnZXNcbiAgICB9KTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuICA8ZGl2IGNsYXNzPVwiZ292dWstZm9ybS1ncm91cFwiIFtuZ0NsYXNzXT1cInsnZm9ybS1ncm91cC1lcnJvcic6IGVycm9yTWVzc2FnZXMubGVuZ3RoID4gMH1cIj5cbiAgICA8ZmllbGRzZXQgY2xhc3M9XCJnb3Z1ay1maWVsZHNldFwiIGFyaWEtZGVzY3JpYmVkYnk9XCJtYW5hZ2UtY2FzZS1mbGFnLWhlYWRpbmdcIj5cbiAgICAgIDxsZWdlbmQgY2xhc3M9XCJnb3Z1ay1maWVsZHNldF9fbGVnZW5kIGdvdnVrLWZpZWxkc2V0X19sZWdlbmQtLW1cIj5cbiAgICAgICAgPGgxIGlkPVwibWFuYWdlLWNhc2UtZmxhZy1oZWFkaW5nXCIgY2xhc3M9XCJnb3Z1ay1maWVsZHNldF9faGVhZGluZ1wiPlxuICAgICAgICAgIHt7bWFuYWdlQ2FzZUZsYWdUaXRsZSB8IHJweFRyYW5zbGF0ZX19XG4gICAgICAgIDwvaDE+XG4gICAgICA8L2xlZ2VuZD5cbiAgICAgIDxkaXYgaWQ9XCJtYW5hZ2UtY2FzZS1mbGFnLW5vdC1zZWxlY3RlZC1lcnJvci1tZXNzYWdlXCIgY2xhc3M9XCJnb3Z1ay1lcnJvci1tZXNzYWdlXCJcbiAgICAgICAgKm5nSWY9XCJtYW5hZ2VDYXNlRmxhZ1NlbGVjdGVkRXJyb3JNZXNzYWdlXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZ292dWstdmlzdWFsbHktaGlkZGVuXCI+e3snRXJyb3I6JyB8IHJweFRyYW5zbGF0ZX19PC9zcGFuPiB7e21hbmFnZUNhc2VGbGFnU2VsZWN0ZWRFcnJvck1lc3NhZ2UgfCBycHhUcmFuc2xhdGV9fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstcmFkaW9zIGdvdnVrLXJhZGlvcy0tY29uZGl0aW9uYWxcIiBkYXRhLW1vZHVsZT1cImdvdnVrLXJhZGlvc1wiIGlkPVwiY29uZGl0aW9uYWwtcmFkaW9zLWxpc3RcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLXJhZGlvc19faXRlbVwiICpuZ0Zvcj1cImxldCBmbGFnRGlzcGxheSBvZiBmbGFnc0Rpc3BsYXlEYXRhOyBpbmRleCBhcyBpXCI+XG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiZ292dWstcmFkaW9zX19pbnB1dFwiIGlkPVwiZmxhZy1zZWxlY3Rpb24te3tpfX1cIiBbbmFtZV09XCJzZWxlY3RlZENvbnRyb2xOYW1lXCJcbiAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiIFt2YWx1ZV09XCJmbGFnRGlzcGxheVwiIFtmb3JtQ29udHJvbE5hbWVdPVwic2VsZWN0ZWRDb250cm9sTmFtZVwiLz5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJnb3Z1ay1sYWJlbCBnb3Z1ay1yYWRpb3NfX2xhYmVsXCIgZm9yPVwiZmxhZy1zZWxlY3Rpb24te3tpfX1cIiBbaW5uZXJIdG1sXT1cImZsYWdEaXNwbGF5IHwgbWFuYWdlQ2FzZUZsYWdzTGFiZWxEaXNwbGF5XCI+PC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2ZpZWxkc2V0PlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG48ZGl2IGNsYXNzPVwiZ292dWstYnV0dG9uLWdyb3VwXCIgKm5nSWY9XCIhbm9GbGFnc0Vycm9yXCI+XG4gIDxidXR0b24gY2xhc3M9XCJidXR0b24gYnV0dG9uLXByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uTmV4dCgpXCI+e3snTmV4dCcgfCBycHhUcmFuc2xhdGV9fTwvYnV0dG9uPlxuPC9kaXY+XG4iXX0=
342
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ManageCaseFlagsComponent, { className: "ManageCaseFlagsComponent", filePath: "lib/shared/components/palette/case-flag/components/manage-case-flags/manage-case-flags.component.ts", lineNumber: 16 }); })();
343
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlLWNhc2UtZmxhZ3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvY2FzZS1mbGFnL2NvbXBvbmVudHMvbWFuYWdlLWNhc2UtZmxhZ3MvbWFuYWdlLWNhc2UtZmxhZ3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvY2FzZS1mbGFnL2NvbXBvbmVudHMvbWFuYWdlLWNhc2UtZmxhZ3MvbWFuYWdlLWNhc2UtZmxhZ3MuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQW1CLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRW5DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUU3RCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLHVCQUF1QixFQUFFLHNCQUFzQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ25KLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7O0lDR3ZELEFBRkYsOEJBQzZDLGNBQ1A7SUFBQSxZQUEyQjs7SUFBQSxpQkFBTztJQUFDLFlBQ3pFOztJQUFBLGlCQUFNOzs7SUFEZ0MsZUFBMkI7SUFBM0Isb0RBQTJCO0lBQVEsZUFDekU7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Q0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtnQkFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7b0JBQzFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBQzNFLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDOzZQQTVSVSx3QkFBd0IsU0FBeEIsd0JBQXdCOzZEQUF4Qix3QkFBd0I7WUNmckMsZ0NBQXNDO1lBSTlCLEFBREYsQUFERixBQURGLDhCQUF5RixrQkFDVixnQkFDVixZQUNHO1lBQ2hFLFlBQ0Y7O1lBQ0YsQUFERSxpQkFBSyxFQUNFO1lBQ1QseUVBQzZDO1lBRzdDLDhCQUE0RztZQUMxRyx5RUFBeUY7WUFTL0YsQUFERSxBQURFLGlCQUFNLEVBQ0csRUFDUDs7O1lBdEJNLHlDQUF1QjtZQUNMLGNBQTBEO1lBQTFELGtGQUEwRDtZQUloRixlQUNGO1lBREUsOEVBQ0Y7WUFHQyxlQUF3QztZQUF4Qyw2REFBd0M7WUFJZSxlQUFxQjtZQUFyQiw4Q0FBcUI7OztpRkRFeEUsd0JBQXdCO2NBTnBDLFNBQVM7MkJBQ0UsdUJBQXVCLGlCQUdsQixpQkFBaUIsQ0FBQyxJQUFJO2dCQUdyQixTQUFTO2tCQUF4QixLQUFLO1lBQ1UsU0FBUztrQkFBeEIsS0FBSztZQUNVLFNBQVM7a0JBQXhCLEtBQUs7WUFDVSx1QkFBdUI7a0JBQXRDLEtBQUs7WUFDVyxvQkFBb0I7a0JBQXBDLE1BQU07O2tGQUxJLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQ2FzZUZpZWxkLCBFcnJvck1lc3NhZ2UsIEpvdXJuZXkgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9kb21haW4nO1xuaW1wb3J0IHsgRmllbGRzVXRpbHMgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zZXJ2aWNlcy9maWVsZHMnO1xuaW1wb3J0IHsgQ2FzZUZsYWdTdGF0ZSwgRmxhZ0RldGFpbCwgRmxhZ0RldGFpbERpc3BsYXlXaXRoRm9ybUdyb3VwUGF0aCwgRmxhZ3MsIEZsYWdzV2l0aEZvcm1Hcm91cFBhdGggfSBmcm9tICcuLi8uLi9kb21haW4nO1xuaW1wb3J0IHsgQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlciwgQ2FzZUZsYWdGaWVsZFN0YXRlLCBDYXNlRmxhZ1N0YXR1cywgQ2FzZUZsYWdXaXphcmRTdGVwVGl0bGUsIFNlbGVjdEZsYWdFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBBYnN0cmFjdEpvdXJuZXlDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9iYXNlLWZpZWxkJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NkLW1hbmFnZS1jYXNlLWZsYWdzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21hbmFnZS1jYXNlLWZsYWdzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWFuYWdlLWNhc2UtZmxhZ3MuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBNYW5hZ2VDYXNlRmxhZ3NDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdEpvdXJuZXlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEpvdXJuZXkge1xuICBASW5wdXQoKSBwdWJsaWMgZm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gIEBJbnB1dCgpIHB1YmxpYyBmbGFnc0RhdGE6IEZsYWdzV2l0aEZvcm1Hcm91cFBhdGhbXTtcbiAgQElucHV0KCkgcHVibGljIGNhc2VUaXRsZTogc3RyaW5nO1xuICBASW5wdXQoKSBwdWJsaWMgZGlzcGxheUNvbnRleHRQYXJhbWV0ZXI6IHN0cmluZztcbiAgQE91dHB1dCgpIHB1YmxpYyBjYXNlRmxhZ1N0YXRlRW1pdHRlcjogRXZlbnRFbWl0dGVyPENhc2VGbGFnU3RhdGU+ID0gbmV3IEV2ZW50RW1pdHRlcjxDYXNlRmxhZ1N0YXRlPigpO1xuXG4gIHB1YmxpYyBtYW5hZ2VDYXNlRmxhZ1RpdGxlOiBDYXNlRmxhZ1dpemFyZFN0ZXBUaXRsZTtcbiAgcHVibGljIGVycm9yTWVzc2FnZXM6IEVycm9yTWVzc2FnZVtdID0gW107XG4gIHB1YmxpYyBtYW5hZ2VDYXNlRmxhZ1NlbGVjdGVkRXJyb3JNZXNzYWdlOiBTZWxlY3RGbGFnRXJyb3JNZXNzYWdlID0gbnVsbDtcbiAgcHVibGljIGZsYWdzRGlzcGxheURhdGE6IEZsYWdEZXRhaWxEaXNwbGF5V2l0aEZvcm1Hcm91cFBhdGhbXTtcbiAgcHVibGljIGZsYWdzOiBGbGFncztcbiAgcHVibGljIG5vRmxhZ3NFcnJvciA9IGZhbHNlO1xuICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0ZWRDb250cm9sTmFtZSA9ICdzZWxlY3RlZE1hbmFnZUNhc2VMb2NhdGlvbic7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXhjbHVkZWRGbGFnU3RhdHVzZXM6IENhc2VGbGFnU3RhdHVzW10gPSBbQ2FzZUZsYWdTdGF0dXMuSU5BQ1RJVkUsIENhc2VGbGFnU3RhdHVzLk5PVF9BUFBST1ZFRF07XG4gIHB1YmxpYyBjYWNoZWRDb250cm9sczp7XG4gICAgW2tleTogc3RyaW5nXTogQWJzdHJhY3RDb250cm9sO1xuICB9O1xuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm1hbmFnZUNhc2VGbGFnVGl0bGUgPSB0aGlzLnNldE1hbmFnZUNhc2VGbGFnVGl0bGUodGhpcy5kaXNwbGF5Q29udGV4dFBhcmFtZXRlcik7XG4gICAgbGV0IG9yaWdpbmFsU3RhdHVzOiBzdHJpbmc7XG4gICAgbGV0IG9yaWdpbmFsSWRUb0ZsYWc6IHN0cmluZztcbiAgICAvLyBpZiB0aGUgdXNlciBoYXMgcHJvZ3Jlc3NlZCB0byBDWUEgYW5kIHRoZW4gbmF2aWdhdGVkIGF3YXksIHRoZSBmbGFnIHRoZXkgc2VsZWN0ZWQgd2lsbCBiZSBzZXQgYXMgaW5hY3RpdmUsIHdlIG5lZWQgdG8gcmVzZXQgdGhpc1xuICAgIGNvbnN0IGxvY2F0aW9uQ29udHJvbCA9IHRoaXMuZm9ybUdyb3VwLmdldCh0aGlzLnNlbGVjdGVkQ29udHJvbE5hbWUpO1xuICAgIGlmIChsb2NhdGlvbkNvbnRyb2wpIHtcbiAgICAgIG9yaWdpbmFsU3RhdHVzID0gbG9jYXRpb25Db250cm9sPy52YWx1ZT8ub3JpZ2luYWxTdGF0dXM7XG4gICAgICBvcmlnaW5hbElkVG9GbGFnID0gbG9jYXRpb25Db250cm9sPy52YWx1ZT8uZmxhZ0RldGFpbERpc3BsYXkuZmxhZ0RldGFpbC5pZDtcbiAgICAgIHRoaXMuY2FjaGVkQ29udHJvbHMgPSBjbG9uZURlZXAodGhpcy5mb3JtR3JvdXAuY29udHJvbHMpO1xuICAgICAgT2JqZWN0LmtleXModGhpcy5mb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goKGNvbnRyb2xOYW1lKSA9PiB7XG4gICAgICAgIGlmIChjb250cm9sTmFtZSAhPT0gdGhpcy5zZWxlY3RlZENvbnRyb2xOYW1lKSB7XG4gICAgICAgICAgdGhpcy5mb3JtR3JvdXAucmVtb3ZlQ29udHJvbChjb250cm9sTmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIE1hcCBmbGFncyBpbnN0YW5jZXMgdG8gb2JqZWN0cyBmb3IgZGlzcGxheSwgZmlsdGVyaW5nIG91dCBhbnkgd2hlcmUgdGhlIG9yaWdpbmFsIHN0YXR1cyBpcyBlaXRoZXIgXCJJbmFjdGl2ZVwiIG9yXG4gICAgLy8gXCJOb3QgYXBwcm92ZWRcIlxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMuZmxhZ3NEYXRhKSB7XG4gICAgICB0aGlzLmZsYWdzRGlzcGxheURhdGEgPSB0aGlzLmZsYWdzRGF0YS5yZWR1Y2UoKGRpc3BsYXlEYXRhLCBmbGFnc0luc3RhbmNlKSA9PiB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChmbGFnc0luc3RhbmNlLmZsYWdzLmRldGFpbHMgJiYgZmxhZ3NJbnN0YW5jZS5mbGFncy5kZXRhaWxzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBkaXNwbGF5RGF0YSA9IFtcbiAgICAgICAgICAgIC4uLmRpc3BsYXlEYXRhLFxuICAgICAgICAgICAgLi4uZmxhZ3NJbnN0YW5jZS5mbGFncy5kZXRhaWxzLm1hcCgoZGV0YWlsKSA9PiB0aGlzLm1hcEZsYWdEZXRhaWxGb3JEaXNwbGF5KGRldGFpbCwgZmxhZ3NJbnN0YW5jZSwgb3JpZ2luYWxTdGF0dXMsIG9yaWdpbmFsSWRUb0ZsYWcpKVxuICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRpc3BsYXlEYXRhO1xuICAgICAgfSwgW10pLmZpbHRlcigoZmxhZ0ZvckRpc3BsYXkpID0+ICF0aGlzLmV4Y2x1ZGVkRmxhZ1N0YXR1c2VzLmluY2x1ZGVzKGZsYWdGb3JEaXNwbGF5Lm9yaWdpbmFsU3RhdHVzIGFzIENhc2VGbGFnU3RhdHVzKSk7XG4gICAgfVxuICAgIC8vIEFkZCBhIEZvcm1Db250cm9sIGZvciB0aGUgc2VsZWN0ZWQgY2FzZSBmbGFnIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBmbGFncyBpbnN0YW5jZSByZW1haW5pbmcgYWZ0ZXIgbWFwcGluZ1xuICAgIGlmICh0aGlzLmZsYWdzRGlzcGxheURhdGEgJiYgdGhpcy5mbGFnc0Rpc3BsYXlEYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmFkZENvbnRyb2wodGhpcy5zZWxlY3RlZENvbnRyb2xOYW1lLCBuZXcgRm9ybUNvbnRyb2wobnVsbCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBmbGFncyBkaXNwbGF5IGRhdGEgbWVhbnMgdGhlcmUgYXJlIG5vIGZsYWdzIHRvIHNlbGVjdCBmcm9tLiBUaGUgdXNlciBjYW5ub3QgcHJvY2VlZCB3aXRoIGEgZmxhZyB1cGRhdGUuXG4gICAgICAvLyAoV2lsbCBuZWVkIHRvIGJlIGV4dGVuZGVkIHRvIGNoZWNrIGZvciBjYXNlLWxldmVsIGZsYWdzIGluIGZ1dHVyZSlcbiAgICAgIHRoaXMub25Ob0ZsYWdzRXJyb3IoKTtcbiAgICB9XG4gIH1cblxuICBvbkZsYWdTZWxlY3Rpb25DaGFuZ2Uoc2VsZWN0ZWRGbGFnOiBGb3JtQ29udHJvbCk6IHZvaWQge1xuICAgIC8vIFVwZGF0ZSB0aGUgZm9ybSBjb250cm9sIHZhbHVlXG4gICAgdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMuc2VsZWN0ZWRDb250cm9sTmFtZSkuc2V0VmFsdWUoc2VsZWN0ZWRGbGFnKTtcblxuICAgIGNvbnN0IGZsYWdEaXNwbGF5TWFwID0gbmV3IE1hcChcbiAgICAgIHRoaXMuZmxhZ3NEaXNwbGF5RGF0YS5tYXAoKGZkKSA9PiBbdGhpcy5nZXRGbGFnSUQoZmQpLCBmZF0pXG4gICAgKTtcblxuICAgIHRoaXMudXBkYXRlRmxhZ0RldGFpbHMoZmxhZ0Rpc3BsYXlNYXApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGbGFnRGV0YWlscyhmbGFnRGlzcGxheU1hcDogTWFwPHN0cmluZywgRmxhZ0RldGFpbERpc3BsYXlXaXRoRm9ybUdyb3VwUGF0aD4pOiB2b2lkIHtcbiAgICBjb25zdCB1cGRhdGVEZXRhaWxzID0gKFxuICAgICAgZGV0YWlsczogYW55W10sXG4gICAgICB2YWx1ZUFjY2Vzc29yOiAoKGRldGFpbDogYW55KSA9PiBhbnkpIHwgbnVsbCA9IChkZXRhaWwpID0+IGRldGFpbC52YWx1ZVxuICAgICkgPT4ge1xuICAgICAgZGV0YWlscy5mb3JFYWNoKChkZXRhaWwpID0+IHtcbiAgICAgICAgY29uc3QgbWF0Y2hpbmcgPSBmbGFnRGlzcGxheU1hcC5nZXQoZGV0YWlsLmlkKTtcbiAgICAgICAgaWYgKG1hdGNoaW5nKSB7XG4gICAgICAgICAgaWYgKHZhbHVlQWNjZXNzb3IpIHtcbiAgICAgICAgICAgIHZhbHVlQWNjZXNzb3IoZGV0YWlsKS5zdGF0dXMgPSBtYXRjaGluZy5vcmlnaW5hbFN0YXR1cztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGV0YWlsLnN0YXR1cyA9IG1hdGNoaW5nLm9yaWdpbmFsU3RhdHVzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vIEl0ZXJhdGUgb3ZlciBlYWNoIGZsYWdEYXRhIGl0ZW0gYW5kIHVwZGF0ZSB0aGUgY29ycmVzcG9uZGluZyBmbGFnIGRldGFpbHNcbiAgICBmb3IgKGNvbnN0IGZsYWdEYXRhIG9mIHRoaXMuZmxhZ3NEYXRhKSB7XG4gICAgICBjb25zdCB7IGNhc2VGaWVsZCwgZmxhZ3MgfSA9IGZsYWdEYXRhO1xuICAgICAgaWYgKGNhc2VGaWVsZCkge1xuICAgICAgICB0aGlzLnVwZGF0ZUNhc2VGaWVsZERldGFpbHMoY2FzZUZpZWxkLCB1cGRhdGVEZXRhaWxzKTtcbiAgICAgIH1cbiAgICAgIC8vIElmIGZsYWdzLmRldGFpbHMgZXhpc3RzIGF0IHRoZSByb290IG9mIGZsYWdEYXRhLCB1cGRhdGUgZGlyZWN0bHkgKHN0YXR1cyBpcyBub3QgbmVzdGVkIHVuZGVyIHZhbHVlKVxuICAgICAgaWYgKGZsYWdzPy5kZXRhaWxzKSB7XG4gICAgICAgIHVwZGF0ZURldGFpbHMoZmxhZ3MuZGV0YWlscywgbnVsbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDYXNlRmllbGREZXRhaWxzKGNhc2VGaWVsZDogQ2FzZUZpZWxkLCB1cGRhdGVEZXRhaWxzOiAoZGV0YWlsczogYW55W10sIHZhbHVlQWNjZXNzb3I/OiAoKGRldGFpbDogYW55KSA9PiBhbnkpIHwgbnVsbCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIC8vIEZvciBjYXNlRmllbGQuX3ZhbHVlLmZsYWdzLmRldGFpbHNcbiAgICBpZiAoY2FzZUZpZWxkLl92YWx1ZT8uZmxhZ3M/LmRldGFpbHMpIHtcbiAgICAgIHVwZGF0ZURldGFpbHMoY2FzZUZpZWxkLl92YWx1ZS5mbGFncy5kZXRhaWxzKTtcbiAgICB9XG4gICAgLy8gRm9yIGNhc2VGaWVsZC5mb3JtYXR0ZWRfdmFsdWUuZmxhZ3MuZGV0YWlsc1xuICAgIGlmIChjYXNlRmllbGQuZm9ybWF0dGVkX3ZhbHVlPy5mbGFncz8uZGV0YWlscykge1xuICAgICAgdXBkYXRlRGV0YWlscyhjYXNlRmllbGQuZm9ybWF0dGVkX3ZhbHVlLmZsYWdzLmRldGFpbHMpO1xuICAgIH1cbiAgICAvLyBJZiBjYXNlRmllbGQuX3ZhbHVlIGlzIGFuIGFycmF5LCBjaGVjayBlYWNoIGVsZW1lbnQncyBuZXN0ZWQgZmxhZ3MuZGV0YWlsc1xuICAgIGlmIChBcnJheS5pc0FycmF5KGNhc2VGaWVsZC5fdmFsdWUpKSB7XG4gICAgICBjYXNlRmllbGQuX3ZhbHVlLmZvckVhY2goKHZhbCkgPT4ge1xuICAgICAgICBpZiAodmFsLnZhbHVlPy5mbGFncz8uZGV0YWlscykge1xuICAgICAgICAgIHVwZGF0ZURldGFpbHModmFsLnZhbHVlLmZsYWdzLmRldGFpbHMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gSWYgY2FzZUZpZWxkLmZvcm1hdHRlZF92YWx1ZSBpcyBhbiBhcnJheSwgY2hlY2sgZWFjaCBlbGVtZW50J3MgbmVzdGVkIGZsYWdzLmRldGFpbHNcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjYXNlRmllbGQuZm9ybWF0dGVkX3ZhbHVlKSkge1xuICAgICAgY2FzZUZpZWxkLmZvcm1hdHRlZF92YWx1ZS5mb3JFYWNoKCh2YWwpID0+IHtcbiAgICAgICAgaWYgKHZhbC52YWx1ZT8uZmxhZ3M/LmRldGFpbHMpIHtcbiAgICAgICAgICB1cGRhdGVEZXRhaWxzKHZhbC52YWx1ZS5mbGFncy5kZXRhaWxzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIEZvciBjYXNlRmllbGQuZm9ybWF0dGVkX3ZhbHVlLmRldGFpbHMgKG5vdCBuZXN0ZWQgdW5kZXIgZmxhZ3MpXG4gICAgaWYgKGNhc2VGaWVsZC5mb3JtYXR0ZWRfdmFsdWU/LmRldGFpbHMpIHtcbiAgICAgIHVwZGF0ZURldGFpbHMoY2FzZUZpZWxkLmZvcm1hdHRlZF92YWx1ZS5kZXRhaWxzKTtcbiAgICB9XG4gICAgLy8gRm9yIGNhc2VGaWVsZC5fdmFsdWUuZGV0YWlscyAobm90IG5lc3RlZCB1bmRlciBmbGFncylcbiAgICBpZiAoY2FzZUZpZWxkLl92YWx1ZT8uZGV0YWlscykge1xuICAgICAgdXBkYXRlRGV0YWlscyhjYXNlRmllbGQuX3ZhbHVlLmRldGFpbHMpO1xuICAgIH1cbiAgfVxuXG4gIGlzU2VsZWN0ZWQoZmxhZ0Rpc3BsYXk6IEZsYWdEZXRhaWxEaXNwbGF5V2l0aEZvcm1Hcm91cFBhdGgpOiBib29sZWFuIHtcbiAgICBjb25zdCBzZWxlY3RlZEZsYWcgPSB0aGlzLmZvcm1Hcm91cC5nZXQodGhpcy5zZWxlY3RlZENvbnRyb2xOYW1lKT8udmFsdWU7XG4gICAgcmV0dXJuIHNlbGVjdGVkRmxhZyAmJiB0aGlzLmdldEZsYWdJRChzZWxlY3RlZEZsYWcpID09PSB0aGlzLmdldEZsYWdJRChmbGFnRGlzcGxheSk7XG4gIH1cblxuICBnZXRGbGFnSUQoZmxhZzogRmxhZ0RldGFpbERpc3BsYXlXaXRoRm9ybUdyb3VwUGF0aCkge1xuICAgIHJldHVybiBmbGFnPy5mbGFnRGV0YWlsRGlzcGxheT8uZmxhZ0RldGFpbD8uaWQgfHwgJyc7XG4gIH1cblxuICBwdWJsaWMgbWFwRmxhZ0RldGFpbEZvckRpc3BsYXkoZmxhZ0RldGFpbDogRmxhZ0RldGFpbCwgZmxhZ3NJbnN0YW5jZTogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aCwgb3JpZ2luYWxTdGF0dXNGcm9tRkc6IHN0cmluZywgb3JpZ2luYWxQYXRoVG9GbGFnOiBzdHJpbmcpOiBGbGFnRGV0YWlsRGlzcGxheVdpdGhGb3JtR3JvdXBQYXRoIHtcbiAgICAvLyBSZXNldCB0aGUgZmxhZyBzdGF0dXMgd2l0aCB0aGUgb3JpZ2luYWwgcGVyc2lzdGVkIHN0YXR1cy4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBuZ09uSW5pdCgpIG5lZWRzIHRvIGZpbHRlclxuICAgIC8vIG91dCBhbnkgXCJJbmFjdGl2ZVwiIG9yIFwiTm90IGFwcHJvdmVkXCIgZmxhZ3MgYmFzZWQgb24gdGhlaXIgc3RhdHVzICpiZWZvcmUqIG1vZGlmaWNhdGlvbi4gSWYgdGhlIHVzZXIgY2hhbmdlcyBhXG4gICAgLy8gZmxhZydzIHN0YXR1cyB0aGVuIGRlY2lkZXMgdG8gcmV0dXJuIHRvIHRoZSBzdGFydCBvZiB0aGUgZmxhZyB1cGRhdGUgam91cm5leSwgdGhlIGZsYWcncyBzdGF0dXMgd291bGQgbm9cbiAgICAvLyBsb25nZXIgcmVmbGVjdCBpdHMgYWN0dWFsICpwZXJzaXN0ZWQqIHN0YXR1c1xuICAgIC8vIEFsc28gcmVzZXQgY29tbWVudHMgYW5kIGRlc2NyaXB0aW9uIGZpZWxkcyAoYm90aCBFbmdsaXNoIGFuZCBXZWxzaCkgd2l0aCB0aGUgb3JpZ2luYWwgcGVyc2lzdGVkIGRhdGEsIHRvIGF2b2lkXG4gICAgLy8gdGhlIFVJIGNhY2hpbmcgYW55IGNoYW5nZXMgdGhhdCB0aGUgdXNlciBtaWdodCBub3Qgd2FudCBwZXJzaXN0ZWQsIGlmIHRoZXkgc3RhcnQgb3ZlciBhbmQgZG9uJ3QgaW50ZW5kIHRvIGFkZFxuICAgIC8vIHRyYW5zbGF0aW9ucyBzdWJzZXF1ZW50bHlcbiAgICBsZXQgb3JpZ2luYWxTdGF0dXM6IHN0cmluZztcbiAgICBsZXQgZm9ybWF0dGVkVmFsdWUgPSBmbGFnc0luc3RhbmNlLmNhc2VGaWVsZD8uZm9ybWF0dGVkX3ZhbHVlO1xuICAgIC8vIFVzZSB0aGUgcGF0aFRvRmxhZ3NGb3JtR3JvdXAgcHJvcGVydHkgZnJvbSB0aGUgc2VsZWN0ZWQgZmxhZyBsb2NhdGlvbiB0byBkcmlsbCBkb3duIHRvIHRoZSBjb3JyZWN0IHBhcnQgb2YgdGhlXG4gICAgLy8gQ2FzZUZpZWxkIGZvcm1hdHRlZF92YWx1ZSBmcm9tIHdoaWNoIHRvIGdldCB0aGUgb3JpZ2luYWwgcGVyc2lzdGVkIGRhdGFcbiAgICBjb25zdCBwYXRoVG9WYWx1ZSA9IGZsYWdzSW5zdGFuY2UucGF0aFRvRmxhZ3NGb3JtR3JvdXA7XG4gICAgLy8gUm9vdC1sZXZlbCBGbGFncyBDYXNlRmllbGRzIGRvbid0IGhhdmUgYSBkb3QtZGVsaW1pdGVkIHBhdGggLSBqdXN0IHRoZSBDYXNlRmllbGQgSUQgaXRzZWxmIC0gc28gZG9uJ3QgZHJpbGwgZG93blxuICAgIGlmIChwYXRoVG9WYWx1ZS5pbmRleE9mKCcuJykgPiAtMSkge1xuICAgICAgcGF0aFRvVmFsdWUuc2xpY2UocGF0aFRvVmFsdWUuaW5kZXhPZignLicpICsgMSkuc3BsaXQoJy4nKS5mb3JFYWNoKChwYXJ0KSA9PiB7XG4gICAgICAgIGlmIChmb3JtYXR0ZWRWYWx1ZSAmJiBGaWVsZHNVdGlscy5pc05vbkVtcHR5T2JqZWN0KGZvcm1hdHRlZFZhbHVlKSkge1xuICAgICAgICAgIGZvcm1hdHRlZFZhbHVlID0gZm9ybWF0dGVkVmFsdWVbcGFydF07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoZm9ybWF0dGVkVmFsdWUgJiYgRmllbGRzVXRpbHMuaXNOb25FbXB0eU9iamVjdChmb3JtYXR0ZWRWYWx1ZSkpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsRmxhZ0RldGFpbCA9IGZvcm1hdHRlZFZhbHVlLmRldGFpbHM/LmZpbmQoKGRldGFpbCkgPT4gZGV0YWlsLmlkID09PSBmbGFnRGV0YWlsLmlkKTtcbiAgICAgIGNvbnN0IHN0YXR1c1RvVXNlID0gdGhpcy5nZXRTdGF0dXNUb1VzZShmbGFnc0luc3RhbmNlLCBvcmlnaW5hbFBhdGhUb0ZsYWcsIG9yaWdpbmFsU3RhdHVzRnJvbUZHLCBvcmlnaW5hbEZsYWdEZXRhaWwpO1xuICAgICAgaWYgKG9yaWdpbmFsRmxhZ0RldGFpbCkge1xuICAgICAgICBvcmlnaW5hbFN0YXR1cyA9IHN0YXR1c1RvVXNlO1xuICAgICAgICBmbGFnRGV0YWlsLmZsYWdDb21tZW50ID0gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlPy5mbGFnQ29tbWVudDtcbiAgICAgICAgZmxhZ0RldGFpbC5mbGFnQ29tbWVudF9jeSA9IG9yaWdpbmFsRmxhZ0RldGFpbC52YWx1ZT8uZmxhZ0NvbW1lbnRfY3k7XG4gICAgICAgIGZsYWdEZXRhaWwub3RoZXJEZXNjcmlwdGlvbiA9IG9yaWdpbmFsRmxhZ0RldGFpbC52YWx1ZT8ub3RoZXJEZXNjcmlwdGlvbjtcbiAgICAgICAgZmxhZ0RldGFpbC5vdGhlckRlc2NyaXB0aW9uX2N5ID0gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlPy5vdGhlckRlc2NyaXB0aW9uX2N5O1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgcmV0dXJuT2JqID0ge1xuICAgICAgZmxhZ0RldGFpbERpc3BsYXk6IHtcbiAgICAgICAgcGFydHlOYW1lOiBmbGFnc0luc3RhbmNlLmZsYWdzPy5wYXJ0eU5hbWUsXG4gICAgICAgIGZsYWdEZXRhaWwsXG4gICAgICAgIGZsYWdzQ2FzZUZpZWxkSWQ6IGZsYWdzSW5zdGFuY2UuY2FzZUZpZWxkPy5pZCxcbiAgICAgICAgdmlzaWJpbGl0eTogZmxhZ3NJbnN0YW5jZS5mbGFncz8udmlzaWJpbGl0eVxuICAgICAgfSxcbiAgICAgIHBhdGhUb0ZsYWdzRm9ybUdyb3VwOiBmbGFnc0luc3RhbmNlLnBhdGhUb0ZsYWdzRm9ybUdyb3VwLFxuICAgICAgY2FzZUZpZWxkOiBmbGFnc0luc3RhbmNlLmNhc2VGaWVsZCxcbiAgICAgIHJvbGVPbkNhc2U6IGZsYWdzSW5zdGFuY2UuZmxhZ3M/LnJvbGVPbkNhc2UsXG4gICAgICBvcmlnaW5hbFN0YXR1c1xuICAgIH07XG4gICAgaWYgKG9yaWdpbmFsUGF0aFRvRmxhZyA9PT0gZmxhZ0RldGFpbC5pZCkge1xuICAgICAgcmV0dXJuT2JqID0geyAuLi5yZXR1cm5PYmosIG9yaWdpbmFsU3RhdHVzIH07XG4gICAgfVxuICAgIHJldHVybiByZXR1cm5PYmo7XG4gIH1cblxuICBwdWJsaWMgZ2V0U3RhdHVzVG9Vc2UoZmxhZ3NJbnN0YW5jZTogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aCwgb3JpZ2luYWxQYXRoVG9GbGFnOiBzdHJpbmcsIG9yaWdpbmFsU3RhdHVzRnJvbUZHOiBzdHJpbmcsIG9yaWdpbmFsRmxhZ0RldGFpbDogQ2FzZUZpZWxkKTogc3RyaW5ne1xuICAgIGxldCBzdGF0dXNUb1VzZSA9ICcnO1xuICAgIGlmIChvcmlnaW5hbEZsYWdEZXRhaWwuaWQgPT09IG9yaWdpbmFsUGF0aFRvRmxhZykge1xuICAgICAgaWYgKG9yaWdpbmFsU3RhdHVzRnJvbUZHKSB7XG4gICAgICAgIHN0YXR1c1RvVXNlID0gb3JpZ2luYWxTdGF0dXNGcm9tRkcgPT09IG9yaWdpbmFsRmxhZ0RldGFpbC52YWx1ZT8uc3RhdHVzID8gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlPy5zdGF0dXMgOiBvcmlnaW5hbFN0YXR1c0Zyb21GRztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXR1c1RvVXNlID0gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlPy5zdGF0dXM7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXR1c1RvVXNlID0gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlPy5zdGF0dXM7XG4gICAgfVxuICAgIHJldHVybiBzdGF0dXNUb1VzZTtcbiAgfVxuXG4gIHB1YmxpYyBvbk5leHQoKTogdm9pZCB7XG4gICAgLy8gVmFsaWRhdGUgZmxhZyBzZWxlY3Rpb25cbiAgICB0aGlzLnZhbGlkYXRlU2VsZWN0aW9uKCk7XG4gICAgLy8gUmV0dXJuIGNhc2UgZmxhZyBmaWVsZCBzdGF0ZSwgZXJyb3IgbWVzc2FnZXMsIGFuZCBmbGFnIHNlbGVjdGlvbiB0byB0aGUgcGFyZW50XG4gICAgdGhpcy5jYXNlRmxhZ1N0YXRlRW1pdHRlci5lbWl0KHtcbiAgICAgIGN1cnJlbnRDYXNlRmxhZ0ZpZWxkU3RhdGU6IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX01BTkFHRV9DQVNFX0ZMQUdTLFxuICAgICAgZXJyb3JNZXNzYWdlczogdGhpcy5lcnJvck1lc3NhZ2VzLFxuICAgICAgc2VsZWN0ZWRGbGFnOiB0aGlzLmZvcm1Hcm91cC5nZXQodGhpcy5zZWxlY3RlZENvbnRyb2xOYW1lKS52YWx1ZVxuICAgICAgICA/IHRoaXMuZm9ybUdyb3VwLmdldCh0aGlzLnNlbGVjdGVkQ29udHJvbE5hbWUpLnZhbHVlIGFzIEZsYWdEZXRhaWxEaXNwbGF5V2l0aEZvcm1Hcm91cFBhdGhcbiAgICAgICAgOiBudWxsXG4gICAgfSk7XG5cbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gIH1cblxuICBwdWJsaWMgc2V0TWFuYWdlQ2FzZUZsYWdUaXRsZShkaXNwbGF5Q29udGV4dFBhcmFtZXRlcjogc3RyaW5nKTogQ2FzZUZsYWdXaXphcmRTdGVwVGl0bGUge1xuICAgIHN3aXRjaCAoZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIpIHtcbiAgICAgIGNhc2UgQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlci5VUERBVEU6XG4gICAgICBjYXNlIENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIuVVBEQVRFXzJfUE9JTlRfMTpcbiAgICAgICAgcmV0dXJuIENhc2VGbGFnV2l6YXJkU3RlcFRpdGxlLk1BTkFHRV9DQVNFX0ZMQUdTO1xuICAgICAgY2FzZSBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLlVQREFURV9FWFRFUk5BTDpcbiAgICAgICAgcmV0dXJuIENhc2VGbGFnV2l6YXJkU3RlcFRpdGxlLk1BTkFHRV9TVVBQT1JUO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIENhc2VGbGFnV2l6YXJkU3RlcFRpdGxlLk5PTkU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLm1hbmFnZUNhc2VGbGFnU2VsZWN0ZWRFcnJvck1lc3NhZ2UgPSBudWxsO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlcyA9IFtdO1xuICAgIGlmICghdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMuc2VsZWN0ZWRDb250cm9sTmFtZSkudmFsdWUpIHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHRoaXMuZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIgPT09IENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIuVVBEQVRFX0VYVEVSTkFMID9cbiAgICAgICAgU2VsZWN0RmxhZ0Vycm9yTWVzc2FnZS5NQU5BR0VfU1VQUE9SVF9GTEFHX05PVF9TRUxFQ1RFRCA6IFNlbGVjdEZsYWdFcnJvck1lc3NhZ2UuTUFOQUdFX0NBU0VfRkxBR1NfRkxBR19OT1RfU0VMRUNURUQ7XG4gICAgICB0aGlzLm1hbmFnZUNhc2VGbGFnU2VsZWN0ZWRFcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7XG4gICAgICB0aGlzLmVycm9yTWVzc2FnZXMucHVzaCh7XG4gICAgICAgIHRpdGxlOiAnJyxcbiAgICAgICAgZGVzY3JpcHRpb246IGVycm9yTWVzc2FnZSxcbiAgICAgICAgZmllbGRJZDogJ2NvbmRpdGlvbmFsLXJhZGlvcy1saXN0J1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvbk5vRmxhZ3NFcnJvcigpOiB2b2lkIHtcbiAgICAvLyBTZXQgZXJyb3IgZmxhZyBvbiBjb21wb25lbnQgdG8gcmVtb3ZlIHRoZSBcIk5leHRcIiBidXR0b24gKHVzZXIgY2Fubm90IHByb2NlZWQgd2l0aCBmbGFnIGNyZWF0aW9uKVxuICAgIHRoaXMubm9GbGFnc0Vycm9yID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZXMgPSBbXTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZXMucHVzaCh7IHRpdGxlOiAnJywgZGVzY3JpcHRpb246IFNlbGVjdEZsYWdFcnJvck1lc3NhZ2UuTk9fRkxBR1MsIGZpZWxkSWQ6ICdjb25kaXRpb25hbC1yYWRpb3MtbGlzdCcgfSk7XG4gICAgLy8gUmV0dXJuIGNhc2UgZmxhZyBmaWVsZCBzdGF0ZSBhbmQgZXJyb3IgbWVzc2FnZXMgdG8gdGhlIHBhcmVudFxuICAgIHRoaXMuY2FzZUZsYWdTdGF0ZUVtaXR0ZXIuZW1pdCh7XG4gICAgICBjdXJyZW50Q2FzZUZsYWdGaWVsZFN0YXRlOiBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19NQU5BR0VfQ0FTRV9GTEFHUyxcbiAgICAgIGVycm9yTWVzc2FnZXM6IHRoaXMuZXJyb3JNZXNzYWdlc1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5leHQoKSB7XG4gICAgdGhpcy5vbk5leHQoKTtcbiAgICBjb25zdCBjYWNoZWRDb250cm9sID0gdGhpcy5jYWNoZWRDb250cm9scz8uW3RoaXMuc2VsZWN0ZWRDb250cm9sTmFtZV07XG4gICAgaWYgKGNhY2hlZENvbnRyb2wgJiYgdGhpcy5nZXRGbGFnSUQoY2FjaGVkQ29udHJvbC52YWx1ZSkgPT09IHRoaXMuZ2V0RmxhZ0lEKHRoaXMuZm9ybUdyb3VwLnZhbHVlW3RoaXMuc2VsZWN0ZWRDb250cm9sTmFtZV0pKSB7XG4gICAgICB0aGlzLnJlYXBwbHlDYWNoZWRDb250cm9scygpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVycm9yTWVzc2FnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBzdXBlci5uZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlYXBwbHlDYWNoZWRDb250cm9scygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jYWNoZWRDb250cm9scykge1xuICAgICAgT2JqZWN0LmtleXModGhpcy5jYWNoZWRDb250cm9scykuZm9yRWFjaCgoY29udHJvbE5hbWUpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1Hcm91cC5jb250YWlucyhjb250cm9sTmFtZSkpIHtcbiAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5hZGRDb250cm9sKGNvbnRyb2xOYW1lLCB0aGlzLmNhY2hlZENvbnRyb2xzW2NvbnRyb2xOYW1lXSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuICA8ZGl2IGNsYXNzPVwiZ292dWstZm9ybS1ncm91cFwiIFtuZ0NsYXNzXT1cInsnZm9ybS1ncm91cC1lcnJvcic6IGVycm9yTWVzc2FnZXMubGVuZ3RoID4gMH1cIj5cbiAgICA8ZmllbGRzZXQgY2xhc3M9XCJnb3Z1ay1maWVsZHNldFwiIGFyaWEtZGVzY3JpYmVkYnk9XCJtYW5hZ2UtY2FzZS1mbGFnLWhlYWRpbmdcIj5cbiAgICAgIDxsZWdlbmQgY2xhc3M9XCJnb3Z1ay1maWVsZHNldF9fbGVnZW5kIGdvdnVrLWZpZWxkc2V0X19sZWdlbmQtLW1cIj5cbiAgICAgICAgPGgxIGlkPVwibWFuYWdlLWNhc2UtZmxhZy1oZWFkaW5nXCIgY2xhc3M9XCJnb3Z1ay1maWVsZHNldF9faGVhZGluZ1wiPlxuICAgICAgICAgIHt7bWFuYWdlQ2FzZUZsYWdUaXRsZSB8IHJweFRyYW5zbGF0ZX19XG4gICAgICAgIDwvaDE+XG4gICAgICA8L2xlZ2VuZD5cbiAgICAgIDxkaXYgaWQ9XCJtYW5hZ2UtY2FzZS1mbGFnLW5vdC1zZWxlY3RlZC1lcnJvci1tZXNzYWdlXCIgY2xhc3M9XCJnb3Z1ay1lcnJvci1tZXNzYWdlXCJcbiAgICAgICAgKm5nSWY9XCJtYW5hZ2VDYXNlRmxhZ1NlbGVjdGVkRXJyb3JNZXNzYWdlXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZ292dWstdmlzdWFsbHktaGlkZGVuXCI+e3snRXJyb3I6JyB8IHJweFRyYW5zbGF0ZX19PC9zcGFuPiB7e21hbmFnZUNhc2VGbGFnU2VsZWN0ZWRFcnJvck1lc3NhZ2UgfCBycHhUcmFuc2xhdGV9fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstcmFkaW9zIGdvdnVrLXJhZGlvcy0tY29uZGl0aW9uYWxcIiBkYXRhLW1vZHVsZT1cImdvdnVrLXJhZGlvc1wiIGlkPVwiY29uZGl0aW9uYWwtcmFkaW9zLWxpc3RcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLXJhZGlvc19faXRlbVwiICpuZ0Zvcj1cImxldCBmbGFnRGlzcGxheSBvZiBmbGFnc0Rpc3BsYXlEYXRhOyBpbmRleCBhcyBpXCI+XG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiZ292dWstcmFkaW9zX19pbnB1dFwiIGlkPVwiZmxhZy1zZWxlY3Rpb24te3tpfX1cIlxuICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cImlzU2VsZWN0ZWQoZmxhZ0Rpc3BsYXkpXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwib25GbGFnU2VsZWN0aW9uQ2hhbmdlKGZsYWdEaXNwbGF5KVwiLz5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJnb3Z1ay1sYWJlbCBnb3Z1ay1yYWRpb3NfX2xhYmVsXCIgZm9yPVwiZmxhZy1zZWxlY3Rpb24te3tpfX1cIiBbaW5uZXJIdG1sXT1cImZsYWdEaXNwbGF5IHwgbWFuYWdlQ2FzZUZsYWdzTGFiZWxEaXNwbGF5XCI+PC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2ZpZWxkc2V0PlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPiJdfQ==