@hmcts/ccd-case-ui-toolkit 6.13.10-rc1 → 6.13.10-show-condition-code-fix

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 (115) hide show
  1. package/bundles/hmcts-ccd-case-ui-toolkit.umd.js +6532 -9321
  2. package/bundles/hmcts-ccd-case-ui-toolkit.umd.js.map +1 -1
  3. package/bundles/hmcts-ccd-case-ui-toolkit.umd.min.js +1 -1
  4. package/bundles/hmcts-ccd-case-ui-toolkit.umd.min.js.map +1 -1
  5. package/esm2015/lib/shared/commons/case-edit-data/case-edit-data.service.js +1 -19
  6. package/esm2015/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.js +1 -6
  7. package/esm2015/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.js +1 -7
  8. package/esm2015/lib/shared/components/case-editor/services/cases.service.js +1 -7
  9. package/esm2015/lib/shared/components/palette/case-file-view/case-file-view-field-read.component.js +2 -2
  10. package/esm2015/lib/shared/components/palette/index.js +6 -3
  11. package/esm2015/lib/shared/components/palette/palette.module.js +7 -51
  12. package/esm2015/lib/shared/components/palette/palette.service.js +7 -19
  13. package/esm2015/lib/shared/pipes/complex/ccd-read-fields-filter.pipe.js +2 -2
  14. package/esm2015/lib/shared/pipes/index.js +1 -3
  15. package/esm2015/lib/shared/pipes/pipes.module.js +4 -12
  16. package/esm2015/lib/shared/services/common-data-service/common-data-service.js +1 -1
  17. package/esm2015/lib/shared/services/fields/fields.utils.js +1 -7
  18. package/esm2015/lib/shared/services/form/form-value.service.js +2 -33
  19. package/fesm2015/hmcts-ccd-case-ui-toolkit.js +6007 -8485
  20. package/fesm2015/hmcts-ccd-case-ui-toolkit.js.map +1 -1
  21. package/lib/shared/commons/case-edit-data/case-edit-data.service.d.ts +0 -13
  22. package/lib/shared/commons/case-edit-data/case-edit-data.service.d.ts.map +1 -1
  23. package/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.d.ts.map +1 -1
  24. package/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.d.ts +0 -1
  25. package/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.d.ts.map +1 -1
  26. package/lib/shared/components/case-editor/services/cases.service.d.ts +0 -2
  27. package/lib/shared/components/case-editor/services/cases.service.d.ts.map +1 -1
  28. package/lib/shared/components/palette/case-file-view/case-file-view-field-read.component.d.ts.map +1 -1
  29. package/lib/shared/components/palette/index.d.ts +5 -2
  30. package/lib/shared/components/palette/index.d.ts.map +1 -1
  31. package/lib/shared/components/palette/palette.module.d.ts +58 -67
  32. package/lib/shared/components/palette/palette.module.d.ts.map +1 -1
  33. package/lib/shared/components/palette/palette.service.d.ts.map +1 -1
  34. package/lib/shared/pipes/index.d.ts +0 -2
  35. package/lib/shared/pipes/index.d.ts.map +1 -1
  36. package/lib/shared/pipes/pipes.module.d.ts +2 -4
  37. package/lib/shared/pipes/pipes.module.d.ts.map +1 -1
  38. package/lib/shared/services/common-data-service/common-data-service.d.ts.map +1 -1
  39. package/lib/shared/services/fields/fields.utils.d.ts +0 -1
  40. package/lib/shared/services/fields/fields.utils.d.ts.map +1 -1
  41. package/lib/shared/services/form/form-value.service.d.ts +0 -14
  42. package/lib/shared/services/form/form-value.service.d.ts.map +1 -1
  43. package/package.json +1 -1
  44. package/esm2015/lib/shared/components/palette/linked-cases/components/before-you-start/before-you-start.component.js +0 -126
  45. package/esm2015/lib/shared/components/palette/linked-cases/components/check-your-answers/check-your-answers.component.js +0 -220
  46. package/esm2015/lib/shared/components/palette/linked-cases/components/index.js +0 -8
  47. package/esm2015/lib/shared/components/palette/linked-cases/components/link-cases/link-cases.component.js +0 -572
  48. package/esm2015/lib/shared/components/palette/linked-cases/components/linked-cases-table/linked-cases-from-table.component.js +0 -219
  49. package/esm2015/lib/shared/components/palette/linked-cases/components/linked-cases-table/linked-cases-to-table.component.js +0 -285
  50. package/esm2015/lib/shared/components/palette/linked-cases/components/no-linked-cases/no-linked-cases.component.js +0 -79
  51. package/esm2015/lib/shared/components/palette/linked-cases/components/unlink-cases/unlink-cases.component.js +0 -214
  52. package/esm2015/lib/shared/components/palette/linked-cases/domain/index.js +0 -3
  53. package/esm2015/lib/shared/components/palette/linked-cases/domain/linked-cases-state.model.js +0 -2
  54. package/esm2015/lib/shared/components/palette/linked-cases/domain/linked-cases.model.js +0 -21
  55. package/esm2015/lib/shared/components/palette/linked-cases/enums/index.js +0 -2
  56. package/esm2015/lib/shared/components/palette/linked-cases/enums/write-linked-cases-field.enum.js +0 -35
  57. package/esm2015/lib/shared/components/palette/linked-cases/index.js +0 -6
  58. package/esm2015/lib/shared/components/palette/linked-cases/read-linked-cases-field.component.js +0 -183
  59. package/esm2015/lib/shared/components/palette/linked-cases/services/index.js +0 -2
  60. package/esm2015/lib/shared/components/palette/linked-cases/services/linked-cases.service.js +0 -134
  61. package/esm2015/lib/shared/components/palette/linked-cases/utils/validators.utils.js +0 -27
  62. package/esm2015/lib/shared/components/palette/linked-cases/write-linked-cases-field.component.js +0 -272
  63. package/esm2015/lib/shared/domain/definition/display-context-enum.model.js +0 -12
  64. package/esm2015/lib/shared/pipes/link-cases-from-reason-code/ccd-link-cases-from-reason-code.pipe.js +0 -28
  65. package/esm2015/lib/shared/pipes/link-cases-from-reason-code/index.js +0 -2
  66. package/esm2015/lib/shared/pipes/link-cases-reason-code/ccd-link-cases-reason-code.pipe.js +0 -28
  67. package/esm2015/lib/shared/pipes/link-cases-reason-code/index.js +0 -2
  68. package/lib/shared/components/palette/linked-cases/components/before-you-start/before-you-start.component.d.ts +0 -23
  69. package/lib/shared/components/palette/linked-cases/components/before-you-start/before-you-start.component.d.ts.map +0 -1
  70. package/lib/shared/components/palette/linked-cases/components/check-your-answers/check-your-answers.component.d.ts +0 -18
  71. package/lib/shared/components/palette/linked-cases/components/check-your-answers/check-your-answers.component.d.ts.map +0 -1
  72. package/lib/shared/components/palette/linked-cases/components/index.d.ts +0 -8
  73. package/lib/shared/components/palette/linked-cases/components/index.d.ts.map +0 -1
  74. package/lib/shared/components/palette/linked-cases/components/link-cases/link-cases.component.d.ts +0 -49
  75. package/lib/shared/components/palette/linked-cases/components/link-cases/link-cases.component.d.ts.map +0 -1
  76. package/lib/shared/components/palette/linked-cases/components/linked-cases-table/linked-cases-from-table.component.d.ts +0 -38
  77. package/lib/shared/components/palette/linked-cases/components/linked-cases-table/linked-cases-from-table.component.d.ts.map +0 -1
  78. package/lib/shared/components/palette/linked-cases/components/linked-cases-table/linked-cases-to-table.component.d.ts +0 -47
  79. package/lib/shared/components/palette/linked-cases/components/linked-cases-table/linked-cases-to-table.component.d.ts.map +0 -1
  80. package/lib/shared/components/palette/linked-cases/components/no-linked-cases/no-linked-cases.component.d.ts +0 -18
  81. package/lib/shared/components/palette/linked-cases/components/no-linked-cases/no-linked-cases.component.d.ts.map +0 -1
  82. package/lib/shared/components/palette/linked-cases/components/unlink-cases/unlink-cases.component.d.ts +0 -38
  83. package/lib/shared/components/palette/linked-cases/components/unlink-cases/unlink-cases.component.d.ts.map +0 -1
  84. package/lib/shared/components/palette/linked-cases/domain/index.d.ts +0 -3
  85. package/lib/shared/components/palette/linked-cases/domain/index.d.ts.map +0 -1
  86. package/lib/shared/components/palette/linked-cases/domain/linked-cases-state.model.d.ts +0 -12
  87. package/lib/shared/components/palette/linked-cases/domain/linked-cases-state.model.d.ts.map +0 -1
  88. package/lib/shared/components/palette/linked-cases/domain/linked-cases.model.d.ts +0 -68
  89. package/lib/shared/components/palette/linked-cases/domain/linked-cases.model.d.ts.map +0 -1
  90. package/lib/shared/components/palette/linked-cases/enums/index.d.ts +0 -2
  91. package/lib/shared/components/palette/linked-cases/enums/index.d.ts.map +0 -1
  92. package/lib/shared/components/palette/linked-cases/enums/write-linked-cases-field.enum.d.ts +0 -31
  93. package/lib/shared/components/palette/linked-cases/enums/write-linked-cases-field.enum.d.ts.map +0 -1
  94. package/lib/shared/components/palette/linked-cases/index.d.ts +0 -6
  95. package/lib/shared/components/palette/linked-cases/index.d.ts.map +0 -1
  96. package/lib/shared/components/palette/linked-cases/read-linked-cases-field.component.d.ts +0 -38
  97. package/lib/shared/components/palette/linked-cases/read-linked-cases-field.component.d.ts.map +0 -1
  98. package/lib/shared/components/palette/linked-cases/services/index.d.ts +0 -2
  99. package/lib/shared/components/palette/linked-cases/services/index.d.ts.map +0 -1
  100. package/lib/shared/components/palette/linked-cases/services/linked-cases.service.d.ts +0 -44
  101. package/lib/shared/components/palette/linked-cases/services/linked-cases.service.d.ts.map +0 -1
  102. package/lib/shared/components/palette/linked-cases/utils/validators.utils.d.ts +0 -10
  103. package/lib/shared/components/palette/linked-cases/utils/validators.utils.d.ts.map +0 -1
  104. package/lib/shared/components/palette/linked-cases/write-linked-cases-field.component.d.ts +0 -43
  105. package/lib/shared/components/palette/linked-cases/write-linked-cases-field.component.d.ts.map +0 -1
  106. package/lib/shared/domain/definition/display-context-enum.model.d.ts +0 -10
  107. package/lib/shared/domain/definition/display-context-enum.model.d.ts.map +0 -1
  108. package/lib/shared/pipes/link-cases-from-reason-code/ccd-link-cases-from-reason-code.pipe.d.ts +0 -12
  109. package/lib/shared/pipes/link-cases-from-reason-code/ccd-link-cases-from-reason-code.pipe.d.ts.map +0 -1
  110. package/lib/shared/pipes/link-cases-from-reason-code/index.d.ts +0 -2
  111. package/lib/shared/pipes/link-cases-from-reason-code/index.d.ts.map +0 -1
  112. package/lib/shared/pipes/link-cases-reason-code/ccd-link-cases-reason-code.pipe.d.ts +0 -12
  113. package/lib/shared/pipes/link-cases-reason-code/ccd-link-cases-reason-code.pipe.d.ts.map +0 -1
  114. package/lib/shared/pipes/link-cases-reason-code/index.d.ts +0 -2
  115. package/lib/shared/pipes/link-cases-reason-code/index.d.ts.map +0 -1
@@ -1,572 +0,0 @@
1
- import { Component, EventEmitter, Output } from '@angular/core';
2
- import { FormBuilder, Validators } from '@angular/forms';
3
- import * as moment from 'moment';
4
- import { throwError } from 'rxjs';
5
- import { CasesService } from '../../../../case-editor/services/cases.service';
6
- import { LinkedCasesErrorMessages, LinkedCasesPages, Patterns } from '../../enums';
7
- import { LinkedCasesService } from '../../services/linked-cases.service';
8
- import { ValidatorsUtils } from '../../utils/validators.utils';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "../../../../case-editor/services/cases.service";
11
- import * as i2 from "@angular/forms";
12
- import * as i3 from "../../utils/validators.utils";
13
- import * as i4 from "../../services/linked-cases.service";
14
- function LinkCasesComponent_div_8_span_4_Template(rf, ctx) { if (rf & 1) {
15
- i0.ɵɵelementStart(0, "span", 30);
16
- i0.ɵɵelementStart(1, "span", 31);
17
- i0.ɵɵtext(2, "Error:");
18
- i0.ɵɵelementEnd();
19
- i0.ɵɵtext(3);
20
- i0.ɵɵelementEnd();
21
- } if (rf & 2) {
22
- const ctx_r4 = i0.ɵɵnextContext(2);
23
- i0.ɵɵadvance(3);
24
- i0.ɵɵtextInterpolate1(" ", ctx_r4.caseNumberError, " ");
25
- } }
26
- function LinkCasesComponent_div_8_span_11_Template(rf, ctx) { if (rf & 1) {
27
- i0.ɵɵelementStart(0, "span", 30);
28
- i0.ɵɵelementStart(1, "span", 31);
29
- i0.ɵɵtext(2, "Error:");
30
- i0.ɵɵelementEnd();
31
- i0.ɵɵtext(3);
32
- i0.ɵɵelementEnd();
33
- } if (rf & 2) {
34
- const ctx_r5 = i0.ɵɵnextContext(2);
35
- i0.ɵɵadvance(3);
36
- i0.ɵɵtextInterpolate1(" ", ctx_r5.caseReasonError, " ");
37
- } }
38
- function LinkCasesComponent_div_8_div_13_Template(rf, ctx) { if (rf & 1) {
39
- const _r12 = i0.ɵɵgetCurrentView();
40
- i0.ɵɵelementStart(0, "div", 32);
41
- i0.ɵɵelementStart(1, "input", 33);
42
- i0.ɵɵlistener("change", function LinkCasesComponent_div_8_div_13_Template_input_change_1_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r11 = i0.ɵɵnextContext(2); return ctx_r11.toggleLinkCaseReasonOtherComments($event); });
43
- i0.ɵɵelementEnd();
44
- i0.ɵɵelementStart(2, "label", 34);
45
- i0.ɵɵtext(3);
46
- i0.ɵɵelementEnd();
47
- i0.ɵɵelementEnd();
48
- } if (rf & 2) {
49
- const reason_r9 = ctx.$implicit;
50
- const pos_r10 = ctx.index;
51
- i0.ɵɵproperty("formGroupName", pos_r10);
52
- i0.ɵɵadvance(1);
53
- i0.ɵɵpropertyInterpolate("id", reason_r9.key);
54
- i0.ɵɵproperty("value", reason_r9.value_en);
55
- i0.ɵɵadvance(1);
56
- i0.ɵɵpropertyInterpolate("for", reason_r9.key);
57
- i0.ɵɵadvance(1);
58
- i0.ɵɵtextInterpolate(reason_r9.value_en);
59
- } }
60
- function LinkCasesComponent_div_8_div_14_span_3_Template(rf, ctx) { if (rf & 1) {
61
- i0.ɵɵelementStart(0, "span", 30);
62
- i0.ɵɵelementStart(1, "span", 31);
63
- i0.ɵɵtext(2, "Error:");
64
- i0.ɵɵelementEnd();
65
- i0.ɵɵtext(3);
66
- i0.ɵɵelementEnd();
67
- } if (rf & 2) {
68
- const ctx_r13 = i0.ɵɵnextContext(3);
69
- i0.ɵɵadvance(3);
70
- i0.ɵɵtextInterpolate1(" ", ctx_r13.caseReasonCommentsError, " ");
71
- } }
72
- const _c0 = function (a0) { return { "govuk-form-group--error": a0 }; };
73
- function LinkCasesComponent_div_8_div_14_Template(rf, ctx) { if (rf & 1) {
74
- i0.ɵɵelementStart(0, "div", 35);
75
- i0.ɵɵelementStart(1, "h3", 22);
76
- i0.ɵɵtext(2, "Comments");
77
- i0.ɵɵelementEnd();
78
- i0.ɵɵtemplate(3, LinkCasesComponent_div_8_div_14_span_3_Template, 4, 1, "span", 6);
79
- i0.ɵɵelementStart(4, "textarea", 36);
80
- i0.ɵɵtext(5, " ");
81
- i0.ɵɵelementEnd();
82
- i0.ɵɵelementStart(6, "div", 37);
83
- i0.ɵɵtext(7, " You can enter up to 100 characters ");
84
- i0.ɵɵelementEnd();
85
- i0.ɵɵelementEnd();
86
- } if (rf & 2) {
87
- const ctx_r7 = i0.ɵɵnextContext(2);
88
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(2, _c0, !!ctx_r7.caseReasonCommentsError));
89
- i0.ɵɵadvance(3);
90
- i0.ɵɵproperty("ngIf", ctx_r7.caseReasonCommentsError);
91
- } }
92
- function LinkCasesComponent_div_8_span_17_Template(rf, ctx) { if (rf & 1) {
93
- i0.ɵɵelementStart(0, "span", 30);
94
- i0.ɵɵelementStart(1, "span", 31);
95
- i0.ɵɵtext(2, "Error:");
96
- i0.ɵɵelementEnd();
97
- i0.ɵɵtext(3);
98
- i0.ɵɵelementEnd();
99
- } if (rf & 2) {
100
- const ctx_r8 = i0.ɵɵnextContext(2);
101
- i0.ɵɵadvance(3);
102
- i0.ɵɵtextInterpolate1(" ", ctx_r8.caseSelectionError, " ");
103
- } }
104
- function LinkCasesComponent_div_8_Template(rf, ctx) { if (rf & 1) {
105
- const _r15 = i0.ɵɵgetCurrentView();
106
- i0.ɵɵelementStart(0, "div", 21);
107
- i0.ɵɵelementStart(1, "div", 5);
108
- i0.ɵɵelementStart(2, "h3", 22);
109
- i0.ɵɵtext(3, "Enter case reference");
110
- i0.ɵɵelementEnd();
111
- i0.ɵɵtemplate(4, LinkCasesComponent_div_8_span_4_Template, 4, 1, "span", 6);
112
- i0.ɵɵelement(5, "input", 23);
113
- i0.ɵɵelementEnd();
114
- i0.ɵɵelementStart(6, "div", 24);
115
- i0.ɵɵelementStart(7, "h3", 22);
116
- i0.ɵɵtext(8, "Why should these cases be linked?");
117
- i0.ɵɵelementEnd();
118
- i0.ɵɵelementStart(9, "div", 25);
119
- i0.ɵɵtext(10, " Select all that apply. ");
120
- i0.ɵɵelementEnd();
121
- i0.ɵɵtemplate(11, LinkCasesComponent_div_8_span_11_Template, 4, 1, "span", 6);
122
- i0.ɵɵelementStart(12, "div", 26);
123
- i0.ɵɵtemplate(13, LinkCasesComponent_div_8_div_13_Template, 4, 5, "div", 27);
124
- i0.ɵɵelementEnd();
125
- i0.ɵɵelementEnd();
126
- i0.ɵɵtemplate(14, LinkCasesComponent_div_8_div_14_Template, 8, 4, "div", 28);
127
- i0.ɵɵelement(15, "br");
128
- i0.ɵɵelement(16, "br");
129
- i0.ɵɵtemplate(17, LinkCasesComponent_div_8_span_17_Template, 4, 1, "span", 6);
130
- i0.ɵɵelementStart(18, "button", 29);
131
- i0.ɵɵlistener("click", function LinkCasesComponent_div_8_Template_button_click_18_listener() { i0.ɵɵrestoreView(_r15); const ctx_r14 = i0.ɵɵnextContext(); return ctx_r14.submitCaseInfo(); });
132
- i0.ɵɵtext(19, "Propose case link");
133
- i0.ɵɵelementEnd();
134
- i0.ɵɵelementEnd();
135
- } if (rf & 2) {
136
- const ctx_r0 = i0.ɵɵnextContext();
137
- i0.ɵɵproperty("formGroup", ctx_r0.linkCaseForm);
138
- i0.ɵɵadvance(1);
139
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(8, _c0, !!ctx_r0.caseNumberError));
140
- i0.ɵɵadvance(3);
141
- i0.ɵɵproperty("ngIf", ctx_r0.caseNumberError);
142
- i0.ɵɵadvance(2);
143
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(10, _c0, !!ctx_r0.caseReasonError));
144
- i0.ɵɵadvance(5);
145
- i0.ɵɵproperty("ngIf", ctx_r0.caseReasonError);
146
- i0.ɵɵadvance(2);
147
- i0.ɵɵproperty("ngForOf", ctx_r0.linkCaseReasons);
148
- i0.ɵɵadvance(1);
149
- i0.ɵɵproperty("ngIf", ctx_r0.showComments);
150
- i0.ɵɵadvance(3);
151
- i0.ɵɵproperty("ngIf", ctx_r0.caseSelectionError);
152
- } }
153
- function LinkCasesComponent_span_13_Template(rf, ctx) { if (rf & 1) {
154
- i0.ɵɵelementStart(0, "span", 30);
155
- i0.ɵɵelementStart(1, "span", 31);
156
- i0.ɵɵtext(2, "Error:");
157
- i0.ɵɵelementEnd();
158
- i0.ɵɵtext(3);
159
- i0.ɵɵelementEnd();
160
- } if (rf & 2) {
161
- const ctx_r1 = i0.ɵɵnextContext();
162
- i0.ɵɵadvance(3);
163
- i0.ɵɵtextInterpolate1(" ", ctx_r1.noSelectedCaseError, " ");
164
- } }
165
- function LinkCasesComponent_tr_31_span_15_Template(rf, ctx) { if (rf & 1) {
166
- i0.ɵɵelementStart(0, "span");
167
- i0.ɵɵtext(1);
168
- i0.ɵɵpipe(2, "ccdLinkCasesReasonValue");
169
- i0.ɵɵelement(3, "br");
170
- i0.ɵɵelementEnd();
171
- } if (rf & 2) {
172
- const reason_r19 = ctx.$implicit;
173
- i0.ɵɵadvance(1);
174
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(2, 1, reason_r19));
175
- } }
176
- const _c1 = function (a0) { return { "table-group-error": a0 }; };
177
- function LinkCasesComponent_tr_31_Template(rf, ctx) { if (rf & 1) {
178
- const _r21 = i0.ɵɵgetCurrentView();
179
- i0.ɵɵelementStart(0, "tr", 10);
180
- i0.ɵɵelementStart(1, "td", 38);
181
- i0.ɵɵelement(2, "div", 39);
182
- i0.ɵɵelementStart(3, "span");
183
- i0.ɵɵtext(4);
184
- i0.ɵɵelement(5, "br");
185
- i0.ɵɵtext(6);
186
- i0.ɵɵpipe(7, "ccdCaseReference");
187
- i0.ɵɵelementEnd();
188
- i0.ɵɵelementEnd();
189
- i0.ɵɵelementStart(8, "td", 40);
190
- i0.ɵɵtext(9);
191
- i0.ɵɵelementEnd();
192
- i0.ɵɵelementStart(10, "td", 38);
193
- i0.ɵɵtext(11);
194
- i0.ɵɵelementEnd();
195
- i0.ɵɵelementStart(12, "td", 40);
196
- i0.ɵɵtext(13);
197
- i0.ɵɵelementEnd();
198
- i0.ɵɵelementStart(14, "td", 38);
199
- i0.ɵɵtemplate(15, LinkCasesComponent_tr_31_span_15_Template, 4, 3, "span", 41);
200
- i0.ɵɵelementEnd();
201
- i0.ɵɵelementStart(16, "td", 38);
202
- i0.ɵɵelementStart(17, "a", 42);
203
- i0.ɵɵlistener("click", function LinkCasesComponent_tr_31_Template_a_click_17_listener() { i0.ɵɵrestoreView(_r21); const pos_r17 = ctx.index; const case_r16 = ctx.$implicit; const ctx_r20 = i0.ɵɵnextContext(); return ctx_r20.onSelectedLinkedCaseRemove(pos_r17, case_r16.caseReference); });
204
- i0.ɵɵtext(18, "Remove");
205
- i0.ɵɵelementEnd();
206
- i0.ɵɵelementEnd();
207
- i0.ɵɵelementEnd();
208
- } if (rf & 2) {
209
- const case_r16 = ctx.$implicit;
210
- const ctx_r2 = i0.ɵɵnextContext();
211
- i0.ɵɵadvance(2);
212
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(12, _c1, ctx_r2.caseSelectionError && case_r16.caseReference === ctx_r2.linkCaseForm.value.caseNumber));
213
- i0.ɵɵadvance(2);
214
- i0.ɵɵtextInterpolate1("", case_r16.caseName, " ");
215
- i0.ɵɵadvance(2);
216
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(7, 10, case_r16.caseReference), "");
217
- i0.ɵɵadvance(2);
218
- i0.ɵɵproperty("title", case_r16.caseTypeDescription);
219
- i0.ɵɵadvance(1);
220
- i0.ɵɵtextInterpolate(case_r16.caseType);
221
- i0.ɵɵadvance(2);
222
- i0.ɵɵtextInterpolate(case_r16.caseService);
223
- i0.ɵɵadvance(1);
224
- i0.ɵɵproperty("title", case_r16.caseStateDescription);
225
- i0.ɵɵadvance(1);
226
- i0.ɵɵtextInterpolate(case_r16.caseState);
227
- i0.ɵɵadvance(2);
228
- i0.ɵɵproperty("ngForOf", case_r16.reasons);
229
- i0.ɵɵadvance(2);
230
- i0.ɵɵattribute("id", case_r16.caseReference);
231
- } }
232
- function LinkCasesComponent_tr_32_Template(rf, ctx) { if (rf & 1) {
233
- i0.ɵɵelementStart(0, "tr", 10);
234
- i0.ɵɵelementStart(1, "td", 43);
235
- i0.ɵɵtext(2, " None ");
236
- i0.ɵɵelementEnd();
237
- i0.ɵɵelementEnd();
238
- } }
239
- export class LinkCasesComponent {
240
- constructor(casesService, fb, validatorsUtils, linkedCasesService) {
241
- this.casesService = casesService;
242
- this.fb = fb;
243
- this.validatorsUtils = validatorsUtils;
244
- this.linkedCasesService = linkedCasesService;
245
- this.linkedCasesStateEmitter = new EventEmitter();
246
- this.errorMessages = [];
247
- this.selectedCases = [];
248
- this.showComments = false;
249
- this.ISO_FORMAT = 'YYYY-MM-DDTHH:mm:ss.SSS';
250
- }
251
- ngOnInit() {
252
- this.caseId = this.linkedCasesService.caseId;
253
- this.caseName = this.linkedCasesService.caseName;
254
- this.linkCaseReasons = this.linkedCasesService.linkCaseReasons;
255
- this.initForm();
256
- if (this.linkedCasesService.editMode) {
257
- // this may have includes the currently added one but yet to be submitted.
258
- this.selectedCases = this.linkedCasesService.linkedCases;
259
- }
260
- else if (this.linkedCasesService.initialCaseLinks.length !== this.linkedCasesService.caseFieldValue.length) {
261
- this.linkedCasesService.linkedCases = this.linkedCasesService.initialCaseLinks;
262
- }
263
- }
264
- initForm() {
265
- this.linkCaseForm = this.fb.group({
266
- caseNumber: ['', [Validators.minLength(16), this.validatorsUtils.regexPattern(Patterns.CASE_REF)]],
267
- reasonType: this.getReasonTypeFormArray,
268
- otherDescription: ['', [Validators.maxLength(100)]]
269
- });
270
- }
271
- get getReasonTypeFormArray() {
272
- return this.fb.array(this.linkCaseReasons.map((val) => this.fb.group({
273
- key: [val.key],
274
- value_en: [val.value_en],
275
- value_cy: [val.value_cy],
276
- hint_text_en: [val.hint_text_en],
277
- hint_text_cy: [val.hint_text_cy],
278
- lov_order: [val.lov_order],
279
- parent_key: [val.parent_key],
280
- selected: [!!val.selected],
281
- })), this.validatorsUtils.formArraySelectedValidator());
282
- }
283
- toggleLinkCaseReasonOtherComments(event) {
284
- this.linkCaseReasons.find(reason => reason.value_en === event.target.value).selected = event.target.checked;
285
- this.showComments = this.linkCaseReasons.find(reason => reason.value_en === 'Other').selected;
286
- }
287
- submitCaseInfo() {
288
- this.errorMessages = [];
289
- this.caseReasonError = null;
290
- this.caseReasonCommentsError = null;
291
- this.caseNumberError = null;
292
- this.caseSelectionError = null;
293
- this.noSelectedCaseError = null;
294
- if (this.linkCaseForm.valid &&
295
- !this.isCaseSelected(this.selectedCases) &&
296
- !this.isCaseSelected(this.linkedCasesService.linkedCases) &&
297
- !this.isCaseSelectedSameAsCurrentCase() &&
298
- !this.isOtherOptionSelectedButOtherDescriptionNotEntered()) {
299
- this.getCaseInfo();
300
- }
301
- else {
302
- this.showErrorInfo();
303
- }
304
- }
305
- isCaseSelected(linkedCases) {
306
- if (linkedCases.length === 0) {
307
- return false;
308
- }
309
- const caseNumber = this.linkCaseForm.value.caseNumber;
310
- return !!linkedCases.find((caseLink) => caseLink.caseReference.split('-').join('') === caseNumber.split('-').join(''));
311
- }
312
- isCaseSelectedSameAsCurrentCase() {
313
- return this.linkCaseForm.value.caseNumber.split('-').join('') === this.linkedCasesService.caseId.split('-').join('');
314
- }
315
- isOtherOptionSelectedButOtherDescriptionNotEntered() {
316
- return this.showComments && this.linkCaseForm.value.otherDescription.trim().length === 0;
317
- }
318
- showErrorInfo() {
319
- if (this.linkCaseForm.controls.caseNumber.invalid) {
320
- this.caseNumberError = LinkedCasesErrorMessages.CaseNumberError;
321
- this.errorMessages.push({
322
- title: 'dummy-case-number',
323
- description: LinkedCasesErrorMessages.CaseNumberError,
324
- fieldId: 'caseNumber',
325
- });
326
- }
327
- if (this.linkCaseForm.controls.reasonType.invalid) {
328
- this.caseReasonError = LinkedCasesErrorMessages.ReasonSelectionError;
329
- this.errorMessages.push({
330
- title: 'dummy-case-reason',
331
- description: LinkedCasesErrorMessages.ReasonSelectionError,
332
- fieldId: 'caseReason',
333
- });
334
- }
335
- if (this.linkCaseForm.controls.reasonType.valid
336
- && this.linkCaseReasons.find(reason => reason.value_en === 'Other').selected) {
337
- if (this.linkCaseForm.controls.otherDescription.value.trim().length === 0) {
338
- this.caseReasonCommentsError = LinkedCasesErrorMessages.otherDescriptionError;
339
- this.errorMessages.push({
340
- title: 'dummy-case-reason-comments',
341
- description: LinkedCasesErrorMessages.otherDescriptionError,
342
- fieldId: 'otherDescription',
343
- });
344
- }
345
- if (this.linkCaseForm.controls.otherDescription.value.trim().length > 100) {
346
- this.caseReasonCommentsError = LinkedCasesErrorMessages.otherDescriptionMaxLengthError;
347
- this.errorMessages.push({
348
- title: 'dummy-case-reason-comments',
349
- description: LinkedCasesErrorMessages.otherDescriptionMaxLengthError,
350
- fieldId: 'otherDescription',
351
- });
352
- }
353
- }
354
- if (this.isCaseSelected(this.selectedCases)) {
355
- this.caseSelectionError = LinkedCasesErrorMessages.CaseProposedError;
356
- this.errorMessages.push({
357
- title: 'dummy-case-number',
358
- description: LinkedCasesErrorMessages.CaseProposedError,
359
- fieldId: 'caseNumber',
360
- });
361
- }
362
- if (this.isCaseSelected(this.linkedCasesService.linkedCases)) {
363
- this.caseSelectionError = LinkedCasesErrorMessages.CasesLinkedError;
364
- this.errorMessages.push({
365
- title: 'dummy-case-number',
366
- description: LinkedCasesErrorMessages.CasesLinkedError,
367
- fieldId: 'caseNumber',
368
- });
369
- }
370
- if (this.linkCaseForm.value.caseNumber.split('-').join('') === this.linkedCasesService.caseId.split('-').join('')) {
371
- this.errorMessages.push({
372
- title: 'dummy-case-number',
373
- description: LinkedCasesErrorMessages.ProposedCaseWithIn,
374
- fieldId: 'caseNumber',
375
- });
376
- }
377
- window.scrollTo(0, 0);
378
- this.emitLinkedCasesState(false);
379
- }
380
- getCaseInfo() {
381
- const caseNumberData = this.linkCaseForm.value.caseNumber.replace(/[- ]/g, '');
382
- this.casesService
383
- .getCaseViewV2(caseNumberData)
384
- .subscribe((caseView) => {
385
- this.linkedCasesService.caseDetails = caseView;
386
- const caseLink = {
387
- caseReference: caseView.case_id,
388
- reasons: this.getSelectedCaseReasons(),
389
- createdDateTime: moment(new Date()).format(this.ISO_FORMAT),
390
- caseType: caseView.case_type.name || '',
391
- caseTypeDescription: caseView.case_type.description || '',
392
- caseState: caseView.state.name || '',
393
- caseStateDescription: caseView.state.description || '',
394
- caseService: caseView.case_type && caseView.case_type.jurisdiction && caseView.case_type.jurisdiction.description || '',
395
- caseName: this.linkedCasesService.getCaseName(caseView),
396
- };
397
- const ccdApiCaseLinkData = {
398
- CaseReference: caseView.case_id,
399
- CaseType: caseView.case_type.id,
400
- CreatedDateTime: moment(new Date()).format(this.ISO_FORMAT),
401
- ReasonForLink: this.getSelectedCCDTypeCaseReason()
402
- };
403
- if (!this.linkedCasesService.caseFieldValue) {
404
- this.linkedCasesService.caseFieldValue = [];
405
- }
406
- this.linkedCasesService.caseFieldValue.push({ id: caseView.case_id.toString(), value: ccdApiCaseLinkData });
407
- this.selectedCases.push(caseLink);
408
- this.linkCaseReasons.forEach(reason => reason.selected = false);
409
- this.initForm();
410
- this.emitLinkedCasesState(false);
411
- }, (error) => {
412
- this.caseNumberError = LinkedCasesErrorMessages.CaseCheckAgainError;
413
- this.errorMessages.push({
414
- title: 'dummy-case-number',
415
- description: LinkedCasesErrorMessages.CaseCheckAgainError,
416
- fieldId: 'caseNumber',
417
- });
418
- this.emitLinkedCasesState(false);
419
- window.scrollTo(0, 0);
420
- return throwError(error);
421
- });
422
- }
423
- // Return linked cases state and error messages to the parent
424
- emitLinkedCasesState(isNavigateToNextPage) {
425
- this.linkedCasesStateEmitter.emit({
426
- currentLinkedCasesPage: LinkedCasesPages.LINK_CASE,
427
- errorMessages: this.errorMessages,
428
- navigateToNextPage: isNavigateToNextPage,
429
- });
430
- }
431
- getSelectedCaseReasons() {
432
- const selectedReasons = [];
433
- this.linkCaseForm.controls.reasonType.value.forEach((selectedReason) => {
434
- if (selectedReason.selected) {
435
- selectedReasons.push({
436
- Reason: selectedReason.key,
437
- OtherDescription: selectedReason.value_en === 'Other'
438
- ? this.linkCaseForm.controls.otherDescription.value
439
- : ''
440
- });
441
- }
442
- });
443
- return selectedReasons;
444
- }
445
- getSelectedCCDTypeCaseReason() {
446
- const selectedReasons = [];
447
- this.linkCaseForm.controls.reasonType.value.forEach((selectedReason) => {
448
- if (selectedReason.selected) {
449
- selectedReasons.push({
450
- value: {
451
- Reason: selectedReason.key,
452
- OtherDescription: selectedReason.value_en === 'Other'
453
- ? this.linkCaseForm.controls.otherDescription.value
454
- : ''
455
- }
456
- });
457
- }
458
- });
459
- return selectedReasons;
460
- }
461
- onSelectedLinkedCaseRemove(pos, selectedCaseReference) {
462
- const caseFieldValue = this.linkedCasesService.caseFieldValue || [];
463
- const updatedItems = caseFieldValue.filter(item => item.value && item.value.CaseReference !== selectedCaseReference);
464
- if (updatedItems) {
465
- this.linkedCasesService.caseFieldValue = updatedItems;
466
- }
467
- this.selectedCases.splice(pos, 1);
468
- }
469
- onNext() {
470
- this.errorMessages = [];
471
- this.caseReasonError = null;
472
- this.caseNumberError = null;
473
- this.caseSelectionError = null;
474
- this.noSelectedCaseError = null;
475
- let navigateToNextPage = true;
476
- if (this.selectedCases.length) {
477
- this.linkedCasesService.linkedCases = this.selectedCases;
478
- }
479
- else {
480
- this.noSelectedCaseError = LinkedCasesErrorMessages.CaseSelectionError;
481
- this.errorMessages.push({
482
- title: 'dummy-case-selection',
483
- description: LinkedCasesErrorMessages.CaseSelectionError,
484
- fieldId: 'caseReason',
485
- });
486
- navigateToNextPage = false;
487
- }
488
- this.emitLinkedCasesState(navigateToNextPage);
489
- }
490
- }
491
- LinkCasesComponent.ɵfac = function LinkCasesComponent_Factory(t) { return new (t || LinkCasesComponent)(i0.ɵɵdirectiveInject(i1.CasesService), i0.ɵɵdirectiveInject(i2.FormBuilder), i0.ɵɵdirectiveInject(i3.ValidatorsUtils), i0.ɵɵdirectiveInject(i4.LinkedCasesService)); };
492
- LinkCasesComponent.ɵcmp = i0.ɵɵdefineComponent({ type: LinkCasesComponent, selectors: [["ccd-link-cases"]], outputs: { linkedCasesStateEmitter: "linkedCasesStateEmitter" }, decls: 36, vars: 11, consts: [[1, "govuk-grid-row"], [1, "govuk-grid-column-full"], [1, "govuk-caption-l"], [1, "govuk-heading-xl"], ["class", "form-group", 3, "formGroup", 4, "ngIf"], ["id", "caseNumber", 1, "govuk-form-group", 3, "ngClass"], ["class", "govuk-error-message", 4, "ngIf"], [1, "govuk-table"], [1, "govuk-table__caption", "govuk-table__caption--m"], [1, "govuk-table__head"], [1, "govuk-table__row"], ["scope", "col", "width", "300", 1, "govuk-table__header"], ["scope", "col", "width", "150", 1, "govuk-table__header"], ["scope", "col", "width", "200", 1, "govuk-table__header"], ["scope", "col", "width", "400", 1, "govuk-table__header"], ["scope", "col", "width", "50", 1, "govuk-table__header"], [1, "govuk-table__body"], ["class", "govuk-table__row", 4, "ngFor", "ngForOf"], ["class", "govuk-table__row", 4, "ngIf"], [1, "govuk-button-group"], ["type", "button", "id", "next-button", 1, "button", "button-primary", 3, "click"], [1, "form-group", 3, "formGroup"], [1, "govuk-heading-s"], ["formControlName", "caseNumber", "id", "width-20", "name", "width-20", "type", "text", 1, "govuk-input", "govuk-input--width-20"], [1, "govuk-!-margin-top-3", 3, "ngClass"], ["id", "waste-hint", 1, "govuk-hint"], ["data-module", "govuk-checkboxes", "formArrayName", "reasonType", "id", "caseReason", 1, "govuk-checkboxes"], ["class", "govuk-checkboxes__item", 3, "formGroupName", 4, "ngFor", "ngForOf"], ["id", "other-description-char-limit-error", "class", "govuk-!-margin-top-3", 3, "ngClass", 4, "ngIf"], ["id", "propose", "type", "button", "data-module", "govuk-button", 1, "govuk-button", "govuk-button--secondary", 3, "click"], [1, "govuk-error-message"], [1, "govuk-visually-hidden"], [1, "govuk-checkboxes__item", 3, "formGroupName"], ["formControlName", "selected", "name", "pos", "type", "checkbox", 1, "govuk-checkboxes__input", 3, "id", "value", "change"], [1, "govuk-label", "govuk-checkboxes__label", 3, "for"], ["id", "other-description-char-limit-error", 1, "govuk-!-margin-top-3", 3, "ngClass"], ["id", "otherDescription", "name", "otherDescription", "formControlName", "otherDescription", "rows", "5", "aria-describedby", "other-description-hint other-description-char-limit-info other-description-char-limit-error", 1, "govuk-textarea", "govuk-input--width-30"], ["id", "other-description-char-limit-info", "aria-live", "polite", 1, "govuk-hint", "govuk-character-count__message"], [1, "govuk-table__cell"], [1, "govuk-form-group--error", 3, "ngClass"], [1, "govuk-table__cell", 3, "title"], [4, "ngFor", "ngForOf"], [1, "govuk-link", "no-visited-state", 3, "click"], ["colspan", "6", 1, "govuk-table__cell"]], template: function LinkCasesComponent_Template(rf, ctx) { if (rf & 1) {
493
- i0.ɵɵelementStart(0, "div", 0);
494
- i0.ɵɵelementStart(1, "div", 1);
495
- i0.ɵɵelementStart(2, "div");
496
- i0.ɵɵelementStart(3, "span", 2);
497
- i0.ɵɵtext(4);
498
- i0.ɵɵpipe(5, "ccdCaseReference");
499
- i0.ɵɵelementEnd();
500
- i0.ɵɵelementStart(6, "h1", 3);
501
- i0.ɵɵtext(7, "Select a\u00A0case you want to link to this case");
502
- i0.ɵɵelementEnd();
503
- i0.ɵɵtemplate(8, LinkCasesComponent_div_8_Template, 20, 12, "div", 4);
504
- i0.ɵɵelement(9, "hr");
505
- i0.ɵɵelement(10, "br");
506
- i0.ɵɵelement(11, "br");
507
- i0.ɵɵelementStart(12, "div", 5);
508
- i0.ɵɵtemplate(13, LinkCasesComponent_span_13_Template, 4, 1, "span", 6);
509
- i0.ɵɵelementStart(14, "table", 7);
510
- i0.ɵɵelementStart(15, "caption", 8);
511
- i0.ɵɵtext(16, "Proposed case links ");
512
- i0.ɵɵelementEnd();
513
- i0.ɵɵelementStart(17, "thead", 9);
514
- i0.ɵɵelementStart(18, "tr", 10);
515
- i0.ɵɵelementStart(19, "th", 11);
516
- i0.ɵɵtext(20, "Case name and number");
517
- i0.ɵɵelementEnd();
518
- i0.ɵɵelementStart(21, "th", 12);
519
- i0.ɵɵtext(22, "Case type ");
520
- i0.ɵɵelementEnd();
521
- i0.ɵɵelementStart(23, "th", 13);
522
- i0.ɵɵtext(24, "Service");
523
- i0.ɵɵelementEnd();
524
- i0.ɵɵelementStart(25, "th", 13);
525
- i0.ɵɵtext(26, "State");
526
- i0.ɵɵelementEnd();
527
- i0.ɵɵelementStart(27, "th", 14);
528
- i0.ɵɵtext(28, "Reasons for case link");
529
- i0.ɵɵelementEnd();
530
- i0.ɵɵelement(29, "th", 15);
531
- i0.ɵɵelementEnd();
532
- i0.ɵɵelementEnd();
533
- i0.ɵɵelementStart(30, "tbody", 16);
534
- i0.ɵɵtemplate(31, LinkCasesComponent_tr_31_Template, 19, 14, "tr", 17);
535
- i0.ɵɵtemplate(32, LinkCasesComponent_tr_32_Template, 3, 0, "tr", 18);
536
- i0.ɵɵelementEnd();
537
- i0.ɵɵelementEnd();
538
- i0.ɵɵelementEnd();
539
- i0.ɵɵelementStart(33, "div", 19);
540
- i0.ɵɵelementStart(34, "button", 20);
541
- i0.ɵɵlistener("click", function LinkCasesComponent_Template_button_click_34_listener() { return ctx.onNext(); });
542
- i0.ɵɵtext(35, "Next");
543
- i0.ɵɵelementEnd();
544
- i0.ɵɵelementEnd();
545
- i0.ɵɵelementEnd();
546
- i0.ɵɵelementEnd();
547
- i0.ɵɵelementEnd();
548
- } if (rf & 2) {
549
- i0.ɵɵadvance(4);
550
- i0.ɵɵtextInterpolate2("Link cases to ", ctx.caseName, " ", i0.ɵɵpipeBind1(5, 7, ctx.caseId), "");
551
- i0.ɵɵadvance(4);
552
- i0.ɵɵproperty("ngIf", ctx.linkCaseForm);
553
- i0.ɵɵadvance(4);
554
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(9, _c0, !!ctx.noSelectedCaseError));
555
- i0.ɵɵadvance(1);
556
- i0.ɵɵproperty("ngIf", ctx.noSelectedCaseError);
557
- i0.ɵɵadvance(18);
558
- i0.ɵɵproperty("ngForOf", ctx.selectedCases);
559
- i0.ɵɵadvance(1);
560
- i0.ɵɵproperty("ngIf", !ctx.selectedCases.length);
561
- } }, styles: [".no-visited-state[_ngcontent-%COMP%]{color:#1d70b8;cursor:pointer}.no-visited-state[_ngcontent-%COMP%]:hover{color:#003078}.govuk-checkboxes[_ngcontent-%COMP%]{display:flex;flex-direction:column;flex-wrap:wrap;max-height:500px;width:100%;overflow-x:auto;overflow-y:hidden;padding-top:5px}.govuk-checkboxes[_ngcontent-%COMP%] .govuk-checkboxes__item[_ngcontent-%COMP%]{display:flex} .govuk-width-container .screen-990 .width-50{width:100%}.govuk-table__row[_ngcontent-%COMP%]{position:relative}.govuk-table__row[_ngcontent-%COMP%] .table-group-error[_ngcontent-%COMP%]{position:absolute;height:calc(100% - 20px);margin-left:-15px}"] });
562
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LinkCasesComponent, [{
563
- type: Component,
564
- args: [{
565
- selector: 'ccd-link-cases',
566
- styleUrls: ['./link-cases.component.scss'],
567
- templateUrl: './link-cases.component.html',
568
- }]
569
- }], function () { return [{ type: i1.CasesService }, { type: i2.FormBuilder }, { type: i3.ValidatorsUtils }, { type: i4.LinkedCasesService }]; }, { linkedCasesStateEmitter: [{
570
- type: Output
571
- }] }); })();
572
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay1jYXNlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL2NvbXBvbmVudHMvcGFsZXR0ZS9saW5rZWQtY2FzZXMvY29tcG9uZW50cy9saW5rLWNhc2VzL2xpbmstY2FzZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvbGlua2VkLWNhc2VzL2NvbXBvbmVudHMvbGluay1jYXNlcy9saW5rLWNhc2VzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQWEsV0FBVyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHbEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBUTlFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7Ozs7O0lDUnJELGdDQUEwRDtJQUN4RCxnQ0FBb0M7SUFBQSxzQkFBTTtJQUFBLGlCQUFPO0lBQUMsWUFDcEQ7SUFBQSxpQkFBTzs7O0lBRDZDLGVBQ3BEO0lBRG9ELHVEQUNwRDs7O0lB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M0IsK0JBQXdEO1FBQUEscUNBQW9CO1FBQUEsaUJBQUs7UUFDakYsK0JBQXdEO1FBQUEsMkJBQVU7UUFBQSxpQkFBSztRQUN2RSwrQkFBd0Q7UUFBQSx3QkFBTztRQUFBLGlCQUFLO1FBQ3BFLCtCQUF3RDtRQUFBLHNCQUFLO1FBQUEsaUJBQUs7UUFDbEUsK0JBQXdEO1FBQUEsc0NBQXFCO1FBQUEsaUJBQUs7UUFDbEYsMEJBQTREO1FBQzlELGlCQUFLO1FBQ1AsaUJBQVE7UUFDUixrQ0FBaUM7UUFDL0Isc0VBY0s7UUFDTCxvRUFJSztRQUNQLGlCQUFRO1FBQ1YsaUJBQVE7UUFDVixpQkFBTTtRQUNOLGdDQUFnQztRQUM5QixtQ0FBd0Y7UUFBbkIsZ0dBQVMsWUFBUSxJQUFDO1FBQUMscUJBQUk7UUFBQSxpQkFBUztRQUN2RyxpQkFBTTtRQUNSLGlCQUFNO1FBQ1IsaUJBQU07UUFDUixpQkFBTTs7UUE5RjhCLGVBQXdEO1FBQXhELGdHQUF3RDtRQUVsQyxlQUFrQjtRQUFsQix1Q0FBa0I7UUErQ3hCLGVBQThEO1FBQTlELCtFQUE4RDtRQUN2RSxlQUF5QjtRQUF6Qiw4Q0FBeUI7UUFnQlYsZ0JBQWtCO1FBQWxCLDJDQUFrQjtRQWVsQyxlQUEyQjtRQUEzQixnREFBMkI7O3VGRDdEeEQsa0JBQWtCO2NBTDlCLFNBQVM7ZUFBQztnQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO2dCQUMxQixTQUFTLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQztnQkFDMUMsV0FBVyxFQUFFLDZCQUE2QjthQUMzQzt3SkFHUSx1QkFBdUI7a0JBRDdCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ2FzZVZpZXcsIEVycm9yTWVzc2FnZSwgSHR0cEVycm9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vZG9tYWluJztcbmltcG9ydCB7IExvdlJlZkRhdGFNb2RlbCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NlcnZpY2VzL2NvbW1vbi1kYXRhLXNlcnZpY2UvY29tbW9uLWRhdGEtc2VydmljZSc7XG5pbXBvcnQgeyBDYXNlc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9jYXNlLWVkaXRvci9zZXJ2aWNlcy9jYXNlcy5zZXJ2aWNlJztcbmltcG9ydCB7IExpbmtlZENhc2VzU3RhdGUgfSBmcm9tICcuLi8uLi9kb21haW4nO1xuaW1wb3J0IHtcbiAgQ2FzZUxpbmssXG4gIENDRENhc2VMaW5rVHlwZSxcbiAgTGlua0Nhc2VSZWFzb24sXG4gIExpbmtSZWFzb25cbn0gZnJvbSAnLi4vLi4vZG9tYWluL2xpbmtlZC1jYXNlcy5tb2RlbCc7XG5pbXBvcnQgeyBMaW5rZWRDYXNlc0Vycm9yTWVzc2FnZXMsIExpbmtlZENhc2VzUGFnZXMsIFBhdHRlcm5zIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHsgTGlua2VkQ2FzZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbGlua2VkLWNhc2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVmFsaWRhdG9yc1V0aWxzIH0gZnJvbSAnLi4vLi4vdXRpbHMvdmFsaWRhdG9ycy51dGlscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjZC1saW5rLWNhc2VzJyxcbiAgc3R5bGVVcmxzOiBbJy4vbGluay1jYXNlcy5jb21wb25lbnQuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vbGluay1jYXNlcy5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIExpbmtDYXNlc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgbGlua2VkQ2FzZXNTdGF0ZUVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxMaW5rZWRDYXNlc1N0YXRlPiA9IG5ldyBFdmVudEVtaXR0ZXI8TGlua2VkQ2FzZXNTdGF0ZT4oKTtcblxuICBwdWJsaWMgZXJyb3JNZXNzYWdlczogRXJyb3JNZXNzYWdlW10gPSBbXTtcbiAgcHVibGljIGxpbmtDYXNlRm9ybTogRm9ybUdyb3VwO1xuICBwdWJsaWMgc2VsZWN0ZWRDYXNlczogQ2FzZUxpbmtbXSA9IFtdO1xuICBwdWJsaWMgY2FzZU51bWJlckVycm9yOiBzdHJpbmc7XG4gIHB1YmxpYyBjYXNlUmVhc29uRXJyb3I6IHN0cmluZztcbiAgcHVibGljIGNhc2VSZWFzb25Db21tZW50c0Vycm9yOiBzdHJpbmc7XG4gIHB1YmxpYyBjYXNlU2VsZWN0aW9uRXJyb3I6IHN0cmluZztcbiAgcHVibGljIG5vU2VsZWN0ZWRDYXNlRXJyb3I6IHN0cmluZztcbiAgcHVibGljIGNhc2VJZDogc3RyaW5nO1xuICBwdWJsaWMgY2FzZU5hbWU6IHN0cmluZztcbiAgcHVibGljIGxpbmtDYXNlUmVhc29uczogTG92UmVmRGF0YU1vZGVsW107XG4gIHB1YmxpYyBzaG93Q29tbWVudHMgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBJU09fRk9STUFUID0gJ1lZWVktTU0tRERUSEg6bW06c3MuU1NTJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhc2VzU2VydmljZTogQ2FzZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdmFsaWRhdG9yc1V0aWxzOiBWYWxpZGF0b3JzVXRpbHMsXG4gICAgcHJpdmF0ZSByZWFkb25seSBsaW5rZWRDYXNlc1NlcnZpY2U6IExpbmtlZENhc2VzU2VydmljZSkgeyB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY2FzZUlkID0gdGhpcy5saW5rZWRDYXNlc1NlcnZpY2UuY2FzZUlkO1xuICAgIHRoaXMuY2FzZU5hbWUgPSB0aGlzLmxpbmtlZENhc2VzU2VydmljZS5jYXNlTmFtZTtcbiAgICB0aGlzLmxpbmtDYXNlUmVhc29ucyA9IHRoaXMubGlua2VkQ2FzZXNTZXJ2aWNlLmxpbmtDYXNlUmVhc29ucztcbiAgICB0aGlzLmluaXRGb3JtKCk7XG4gICAgaWYgKHRoaXMubGlua2VkQ2FzZXNTZXJ2aWNlLmVkaXRNb2RlKSB7XG4gICAgICAvLyB0aGlzIG1heSBoYXZlIGluY2x1ZGVzIHRoZSBjdXJyZW50bHkgYWRkZWQgb25lIGJ1dCB5ZXQgdG8gYmUgc3VibWl0dGVkLlxuICAgICAgdGhpcy5zZWxlY3RlZENhc2VzID0gdGhpcy5saW5rZWRDYXNlc1NlcnZpY2UubGlua2VkQ2FzZXM7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxpbmtlZENhc2VzU2VydmljZS5pbml0aWFsQ2FzZUxpbmtzLmxlbmd0aCAhPT0gdGhpcy5saW5rZWRDYXNlc1NlcnZpY2UuY2FzZUZpZWxkVmFsdWUubGVuZ3RoKSB7XG4gICAgICB0aGlzLmxpbmtlZENhc2VzU2VydmljZS5saW5rZWRDYXNlcyA9IHRoaXMubGlua2VkQ2FzZXNTZXJ2aWNlLmluaXRpYWxDYXNlTGlua3M7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGluaXRGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMubGlua0Nhc2VGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBjYXNlTnVtYmVyOiBbJycsIFtWYWxpZGF0b3JzLm1pbkxlbmd0aCgxNiksIHRoaXMudmFsaWRhdG9yc1V0aWxzLnJlZ2V4UGF0dGVybihQYXR0ZXJucy5DQVNFX1JFRildXSxcbiAgICAgIHJlYXNvblR5cGU6IHRoaXMuZ2V0UmVhc29uVHlwZUZvcm1BcnJheSxcbiAgICAgIG90aGVyRGVzY3JpcHRpb246IFsnJywgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDEwMCldXVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldCBnZXRSZWFzb25UeXBlRm9ybUFycmF5KCk6IEZvcm1BcnJheSB7XG4gICAgcmV0dXJuIHRoaXMuZmIuYXJyYXkoXG4gICAgICB0aGlzLmxpbmtDYXNlUmVhc29ucy5tYXAoKHZhbCkgPT5cbiAgICAgICAgdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAga2V5OiBbdmFsLmtleV0sXG4gICAgICAgICAgdmFsdWVfZW46IFt2YWwudmFsdWVfZW5dLFxuICAgICAgICAgIHZhbHVlX2N5OiBbdmFsLnZhbHVlX2N5XSxcbiAgICAgICAgICBoaW50X3RleHRfZW46IFt2YWwuaGludF90ZXh0X2VuXSxcbiAgICAgICAgICBoaW50X3RleHRfY3k6IFt2YWwuaGludF90ZXh0X2N5XSxcbiAgICAgICAgICBsb3Zfb3JkZXI6IFt2YWwubG92X29yZGVyXSxcbiAgICAgICAgICBwYXJlbnRfa2V5OiBbdmFsLnBhcmVudF9rZXldLFxuICAgICAgICAgIHNlbGVjdGVkOiBbISF2YWwuc2VsZWN0ZWRdLFxuICAgICAgICB9KVxuICAgICAgKSxcbiAgICAgIHRoaXMudmFsaWRhdG9yc1V0aWxzLmZvcm1BcnJheVNlbGVjdGVkVmFsaWRhdG9yKClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZUxpbmtDYXNlUmVhc29uT3RoZXJDb21tZW50cyhldmVudDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5saW5rQ2FzZVJlYXNvbnMuZmluZChyZWFzb24gPT4gcmVhc29uLnZhbHVlX2VuID09PSBldmVudC50YXJnZXQudmFsdWUpLnNlbGVjdGVkID0gZXZlbnQudGFyZ2V0LmNoZWNrZWQ7XG4gICAgdGhpcy5zaG93Q29tbWVudHMgPSB0aGlzLmxpbmtDYXNlUmVhc29ucy5maW5kKHJlYXNvbiA9PiByZWFzb24udmFsdWVfZW4gPT09ICdPdGhlcicpLnNlbGVjdGVkO1xuICB9XG5cbiAgcHVibGljIHN1Ym1pdENhc2VJbmZvKCk6IHZvaWQge1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlcyA9IFtdO1xuICAgIHRoaXMuY2FzZVJlYXNvbkVycm9yID0gbnVsbDtcbiAgICB0aGlzLmNhc2VSZWFzb25Db21tZW50c0Vycm9yID0gbnVsbDtcbiAgICB0aGlzLmNhc2VOdW1iZXJFcnJvciA9IG51bGw7XG4gICAgdGhpcy5jYXNlU2VsZWN0aW9uRXJyb3IgPSBudWxsO1xuICAgIHRoaXMubm9TZWxlY3RlZENhc2VFcnJvciA9IG51bGw7XG4gICAgaWYgKFxuICAgICAgdGhpcy5saW5rQ2FzZUZvcm0udmFsaWQgJiZcbiAgICAgICF0aGlzLmlzQ2FzZVNlbGVjdGVkKHRoaXMuc2VsZWN0ZWRDYXNlcykgJiZcbiAgICAgICF0aGlzLmlzQ2FzZVNlbGVjdGVkKHRoaXMubGlua2VkQ2FzZXNTZXJ2aWNlLmxpbmtlZENhc2VzKSAmJlxuICAgICAgIXRoaXMuaXNDYXNlU2VsZWN0ZWRTYW1lQXNDdXJyZW50Q2FzZSgpICYmXG4gICAgICAhdGhpcy5pc090aGVyT3B0aW9uU2VsZWN0ZWRCdXRPdGhlckRlc2NyaXB0aW9uTm90RW50ZXJlZCgpXG4gICAgKSB7XG4gICAgICB0aGlzLmdldENhc2VJbmZvKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2hvd0Vycm9ySW5mbygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc0Nhc2VTZWxlY3RlZChsaW5rZWRDYXNlczogQ2FzZUxpbmtbXSk6IGJvb2xlYW4ge1xuICAgIGlmIChsaW5rZWRDYXNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgY2FzZU51bWJlciA9IHRoaXMubGlua0Nhc2VGb3JtLnZhbHVlLmNhc2VOdW1iZXI7XG4gICAgcmV0dXJuICEhbGlua2VkQ2FzZXMuZmluZChcbiAgICAgIChjYXNlTGluaykgPT4gY2FzZUxpbmsuY2FzZVJlZmVyZW5jZS5zcGxpdCgnLScpLmpvaW4oJycpID09PSBjYXNlTnVtYmVyLnNwbGl0KCctJykuam9pbignJylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0Nhc2VTZWxlY3RlZFNhbWVBc0N1cnJlbnRDYXNlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxpbmtDYXNlRm9ybS52YWx1ZS5jYXNlTnVtYmVyLnNwbGl0KCctJykuam9pbignJykgPT09IHRoaXMubGlua2VkQ2FzZXNTZXJ2aWNlLmNhc2VJZC5zcGxpdCgnLScpLmpvaW4oJycpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc090aGVyT3B0aW9uU2VsZWN0ZWRCdXRPdGhlckRlc2NyaXB0aW9uTm90RW50ZXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaG93Q29tbWVudHMgJiYgdGhpcy5saW5rQ2FzZUZvcm0udmFsdWUub3RoZXJEZXNjcmlwdGlvbi50cmltKCkubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgcHVibGljIHNob3dFcnJvckluZm8oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubGlua0Nhc2VGb3JtLmNvbnRyb2xzLmNhc2VOdW1iZXIuaW52YWxpZCkge1xuICAgICAgdGhpcy5jYXNlTnVtYmVyRXJyb3IgPSBMaW5rZWRDYXNlc0Vycm9yTWVzc2FnZXMuQ2FzZU51bWJlckVycm9yO1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2VzLnB1c2goe1xuICAgICAgICB0aXRsZTogJ2R1bW15LWNhc2UtbnVtYmVyJyxcbiAgICAgICAgZGVzY3JpcHRpb246IExpbmtlZENhc2VzRXJyb3JNZXNzYWdlcy5DYXNlTnVtYmVyRXJyb3IsXG4gICAgICAgIGZpZWxkSWQ6ICdjYXNlTnVtYmVyJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5saW5rQ2FzZUZvcm0uY29udHJvbHMucmVhc29uVHlwZS5pbnZhbGlkKSB7XG4gICAgICB0aGlzLmNhc2VSZWFzb25FcnJvciA9IExpbmtlZENhc2VzRXJyb3JNZXNzYWdlcy5SZWFzb25TZWxlY3Rpb25FcnJvcjtcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlcy5wdXNoKHtcbiAgICAgICAgdGl0bGU6ICdkdW1teS1jYXNlLXJlYXNvbicsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBMaW5rZWRDYXNlc0Vycm9yTWVzc2FnZXMuUmVhc29uU2VsZWN0aW9uRXJyb3IsXG4gICAgICAgIGZpZWxkSWQ6ICdjYXNlUmVhc29uJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5saW5rQ2FzZUZvcm0uY29udHJvbHMucmVhc29uVHlwZS52YWxpZFxuICAgICAgICAmJiB0aGlzLmxpbmtDYXNlUmVhc29ucy5maW5kKHJlYXNvbiA9PiByZWFzb24udmFsdWVfZW4gPT09ICdPdGhlcicpLnNlbGVjdGVkKSB7XG4gICAgICBpZiAodGhpcy5saW5rQ2FzZUZvcm0uY29udHJvbHMub3RoZXJEZXNjcmlwdGlvbi52YWx1ZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMuY2FzZVJlYXNvbkNvbW1lbnRzRXJyb3IgPSBMaW5rZWRDYXNlc0Vycm9yTWVzc2FnZXMub3RoZXJEZXNjcmlwdGlvbkVycm9yO1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZXMucHVzaCh7XG4gICAgICAgICAgdGl0bGU6ICdkdW1teS1jYXNlLXJlYXNvbi1jb21tZW50cycsXG4gICAgICAgICAgZGVzY3JpcHRpb246IExpbmtlZENhc2VzRXJyb3JNZXNzYWdlcy5vdGhlckRlc2NyaXB0aW9uRXJyb3IsXG4gICAgICAgICAgZmllbGRJZDogJ290aGVyRGVzY3JpcHRpb24nLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmxpbmtDYXNlRm9ybS5jb250cm9scy5vdGhlckRlc2NyaXB0aW9uLnZhbHVlLnRyaW0oKS5sZW5ndGggPiAxMDApIHtcbiAgICAgICAgdGhpcy5jYXNlUmVhc29uQ29tbWVudHNFcnJvciA9IExpbmtlZENhc2VzRXJyb3JNZXNzYWdlcy5vdGhlckRlc2NyaXB0aW9uTWF4TGVuZ3RoRXJyb3I7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlcy5wdXNoKHtcbiAgICAgICAgICB0aXRsZTogJ2R1bW15LWNhc2UtcmVhc29uLWNvbW1lbnRzJyxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogTGlua2VkQ2FzZXNFcnJvck1lc3NhZ2VzLm90aGVyRGVzY3JpcHRpb25NYXhMZW5ndGhFcnJvcixcbiAgICAgICAgICBmaWVsZElkOiAnb3RoZXJEZXNjcmlwdGlvbicsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5pc0Nhc2VTZWxlY3RlZCh0aGlzLnNlbGVjdGVkQ2FzZXMpKSB7XG4gICAgICB0aGlzLmNhc2VTZWxlY3Rpb25FcnJvciA9IExpbmtlZENhc2VzRXJyb3JNZXNzYWdlcy5DYXNlUHJvcG9zZWRFcnJvcjtcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlcy5wdXNoKHtcbiAgICAgICAgdGl0bGU6ICdkdW1teS1jYXNlLW51bWJlcicsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBMaW5rZWRDYXNlc0Vycm9yTWVzc2FnZXMuQ2FzZVByb3Bvc2VkRXJyb3IsXG4gICAgICAgIGZpZWxkSWQ6ICdjYXNlTnVtYmVyJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc0Nhc2VTZWxlY3RlZCh0aGlzLmxpbmtlZENhc2VzU2VydmljZS5saW5rZWRDYXNlcykpIHtcbiAgICAgIHRoaXMuY2FzZVNlbGVjdGlvbkVycm9yID0gTGlua2VkQ2FzZXNFcnJvck1lc3NhZ2VzLkNhc2VzTGlua2VkRXJyb3I7XG4gICAgICB0aGlzLmVycm9yTWVzc2FnZXMucHVzaCh7XG4gICAgICAgIHRpdGxlOiAnZHVtbXktY2FzZS1udW1iZXInLFxuICAgICAgICBkZXNjcmlwdGlvbjogTGlua2VkQ2FzZXNFcnJvck1lc3NhZ2VzLkNhc2VzTGlua2VkRXJyb3IsXG4gICAgICAgIGZpZWxkSWQ6ICdjYXNlTnVtYmVyJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5saW5rQ2FzZUZvcm0udmFsdWUuY2FzZU51bWJlci5zcGxpdCgnLScpLmpvaW4oJycpID09PSB0aGlzLmxpbmtlZENhc2VzU2VydmljZS5jYXNlSWQuc3BsaXQoJy0nKS5qb2luKCcnKSkge1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2VzLnB1c2goe1xuICAgICAgICB0aXRsZTogJ2R1bW15LWNhc2UtbnVtYmVyJyxcbiAgICAgICAgZGVzY3JpcHRpb246IExpbmtlZENhc2VzRXJyb3JNZXNzYWdlcy5Qcm9wb3NlZENhc2VXaXRoSW4sXG4gICAgICAgIGZpZWxkSWQ6ICdjYXNlTnVtYmVyJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gICAgdGhpcy5lbWl0TGlua2VkQ2FzZXNTdGF0ZShmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2FzZUluZm8oKTogdm9pZCB7XG4gICAgY29uc3QgY2FzZU51bWJlckRhdGEgPSB0aGlzLmxpbmtDYXNlRm9ybS52YWx1ZS5jYXNlTnVtYmVyLnJlcGxhY2UoL1stIF0vZywgJycpO1xuICAgIHRoaXMuY2FzZXNTZXJ2aWNlXG4gICAgICAuZ2V0Q2FzZVZpZXdWMihjYXNlTnVtYmVyRGF0YSlcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIChjYXNlVmlldzogQ2FzZVZpZXcpID0+IHtcbiAgICAgICAgICB0aGlzLmxpbmtlZENhc2VzU2VydmljZS5jYXNlRGV0YWlscyA9IGNhc2VWaWV3O1xuICAgICAgICAgIGNvbnN0IGNhc2VMaW5rOiBDYXNlTGluayA9IHtcbiAgICAgICAgICAgIGNhc2VSZWZlcmVuY2U6IGNhc2VWaWV3LmNhc2VfaWQsXG4gICAgICAgICAgICByZWFzb25zOiB0aGlzLmdldFNlbGVjdGVkQ2FzZVJlYXNvbnMoKSxcbiAgICAgICAgICAgIGNyZWF0ZWREYXRlVGltZTogbW9tZW50KG5ldyBEYXRlKCkpLmZvcm1hdCh0aGlzLklTT19GT1JNQVQpLFxuICAgICAgICAgICAgY2FzZVR5cGU6IGNhc2VWaWV3LmNhc2VfdHlwZS5uYW1lIHx8ICcnLFxuICAgICAgICAgICAgY2FzZVR5cGVEZXNjcmlwdGlvbjogY2FzZVZpZXcuY2FzZV90eXBlLmRlc2NyaXB0aW9uIHx8ICcnLFxuICAgICAgICAgICAgY2FzZVN0YXRlOiBjYXNlVmlldy5zdGF0ZS5uYW1lIHx8ICcnLFxuICAgICAgICAgICAgY2FzZVN0YXRlRGVzY3JpcHRpb246IGNhc2VWaWV3LnN0YXRlLmRlc2NyaXB0aW9uIHx8ICcnLFxuICAgICAgICAgICAgY2FzZVNlcnZpY2U6IGNhc2VWaWV3LmNhc2VfdHlwZSAmJiBjYXNlVmlldy5jYXNlX3R5cGUuanVyaXNkaWN0aW9uICYmIGNhc2VWaWV3LmNhc2VfdHlwZS5qdXJpc2RpY3Rpb24uZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgICAgICBjYXNlTmFtZTogdGhpcy5saW5rZWRDYXNlc1NlcnZpY2UuZ2V0Q2FzZU5hbWUoY2FzZVZpZXcpLFxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgY2NkQXBpQ2FzZUxpbmtEYXRhOiBDQ0RDYXNlTGlua1R5cGUgPSB7XG4gICAgICAgICAgICBDYXNlUmVmZXJlbmNlOiBjYXNlVmlldy5jYXNlX2lkLFxuICAgICAgICAgICAgQ2FzZVR5cGU6IGNhc2VWaWV3LmNhc2VfdHlwZS5pZCxcbiAgICAgICAgICAgIENyZWF0ZWREYXRlVGltZTogbW9tZW50KG5ldyBEYXRlKCkpLmZvcm1hdCh0aGlzLklTT19GT1JNQVQpLFxuICAgICAgICAgICAgUmVhc29uRm9yTGluazogdGhpcy5nZXRTZWxlY3RlZENDRFR5cGVDYXNlUmVhc29uKClcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCF0aGlzLmxpbmtlZENhc2VzU2VydmljZS5jYXNlRmllbGRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5saW5rZWRDYXNlc1NlcnZpY2UuY2FzZUZpZWxkVmFsdWUgPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5saW5rZWRDYXNlc1NlcnZpY2UuY2FzZUZpZWxkVmFsdWUucHVzaCh7IGlkOiBjYXNlVmlldy5jYXNlX2lkLnRvU3RyaW5nKCksIHZhbHVlOiBjY2RBcGlDYXNlTGlua0RhdGEgfSk7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENhc2VzLnB1c2goY2FzZUxpbmspO1xuICAgICAgICAgIHRoaXMubGlua0Nhc2VSZWFzb25zLmZvckVhY2gocmVhc29uID0+IHJlYXNvbi5zZWxlY3RlZCA9IGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmluaXRGb3JtKCk7XG4gICAgICAgICAgdGhpcy5lbWl0TGlua2VkQ2FzZXNTdGF0ZShmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogSHR0cEVycm9yKSA9PiB7XG4gICAgICAgICAgdGhpcy5jYXNlTnVtYmVyRXJyb3IgPSBMaW5rZWRDYXNlc0Vycm9yTWVzc2FnZXMuQ2FzZUNoZWNrQWdhaW5FcnJvcjtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZXMucHVzaCh7XG4gICAgICAgICAgICB0aXRsZTogJ2R1bW15LWNhc2UtbnVtYmVyJyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBMaW5rZWRDYXNlc0Vycm9yTWVzc2FnZXMuQ2FzZUNoZWNrQWdhaW5FcnJvcixcbiAgICAgICAgICAgIGZpZWxkSWQ6ICdjYXNlTnVtYmVyJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmVtaXRMaW5rZWRDYXNlc1N0YXRlKGZhbHNlKTtcbiAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgLy8gUmV0dXJuIGxpbmtlZCBjYXNlcyBzdGF0ZSBhbmQgZXJyb3IgbWVzc2FnZXMgdG8gdGhlIHBhcmVudFxuICBwdWJsaWMgZW1pdExpbmtlZENhc2VzU3RhdGUoaXNOYXZpZ2F0ZVRvTmV4dFBhZ2U6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmxpbmtlZENhc2VzU3RhdGVFbWl0dGVyLmVtaXQoe1xuICAgICAgY3VycmVudExpbmtlZENhc2VzUGFnZTogTGlua2VkQ2FzZXNQYWdlcy5MSU5LX0NBU0UsXG4gICAgICBlcnJvck1lc3NhZ2VzOiB0aGlzLmVycm9yTWVzc2FnZXMsXG4gICAgICBuYXZpZ2F0ZVRvTmV4dFBhZ2U6IGlzTmF2aWdhdGVUb05leHRQYWdlLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldFNlbGVjdGVkQ2FzZVJlYXNvbnMoKTogTGlua1JlYXNvbltdIHtcbiAgICBjb25zdCBzZWxlY3RlZFJlYXNvbnMgPSBbXTtcbiAgICB0aGlzLmxpbmtDYXNlRm9ybS5jb250cm9scy5yZWFzb25UeXBlLnZhbHVlLmZvckVhY2goXG4gICAgICAoc2VsZWN0ZWRSZWFzb246IExpbmtDYXNlUmVhc29uKSA9PiB7XG4gICAgICAgIGlmIChzZWxlY3RlZFJlYXNvbi5zZWxlY3RlZCkge1xuICAgICAgICAgIHNlbGVjdGVkUmVhc29ucy5wdXNoKHtcbiAgICAgICAgICAgIFJlYXNvbjogc2VsZWN0ZWRSZWFzb24ua2V5LFxuICAgICAgICAgICAgT3RoZXJEZXNjcmlwdGlvbjogc2VsZWN0ZWRSZWFzb24udmFsdWVfZW4gPT09ICdPdGhlcidcbiAgICAgICAgICAgICAgPyB0aGlzLmxpbmtDYXNlRm9ybS5jb250cm9scy5vdGhlckRlc2NyaXB0aW9uLnZhbHVlXG4gICAgICAgICAgICAgIDogJydcbiAgICAgICAgICB9IGFzIExpbmtSZWFzb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgICByZXR1cm4gc2VsZWN0ZWRSZWFzb25zO1xuICB9XG5cbiAgcHVibGljIGdldFNlbGVjdGVkQ0NEVHlwZUNhc2VSZWFzb24oKTogTGlua1JlYXNvbltdIHtcbiAgICBjb25zdCBzZWxlY3RlZFJlYXNvbnMgPSBbXTtcbiAgICB0aGlzLmxpbmtDYXNlRm9ybS5jb250cm9scy5yZWFzb25UeXBlLnZhbHVlLmZvckVhY2goXG4gICAgICAoc2VsZWN0ZWRSZWFzb246IExpbmtDYXNlUmVhc29uKSA9PiB7XG4gICAgICAgIGlmIChzZWxlY3RlZFJlYXNvbi5zZWxlY3RlZCkge1xuICAgICAgICAgIHNlbGVjdGVkUmVhc29ucy5wdXNoKHtcbiAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgIFJlYXNvbjogc2VsZWN0ZWRSZWFzb24ua2V5LFxuICAgICAgICAgICAgICBPdGhlckRlc2NyaXB0aW9uOiBzZWxlY3RlZFJlYXNvbi52YWx1ZV9lbiA9PT0gJ090aGVyJ1xuICAgICAgICAgICAgICAgID8gdGhpcy5saW5rQ2FzZUZvcm0uY29udHJvbHMub3RoZXJEZXNjcmlwdGlvbi52YWx1ZVxuICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gICAgcmV0dXJuIHNlbGVjdGVkUmVhc29ucztcbiAgfVxuXG4gIHB1YmxpYyBvblNlbGVjdGVkTGlua2VkQ2FzZVJlbW92ZShwb3MsIHNlbGVjdGVkQ2FzZVJlZmVyZW5jZSk6IHZvaWQge1xuICAgIGNvbnN0IGNhc2VGaWVsZFZhbHVlID0gdGhpcy5saW5rZWRDYXNlc1NlcnZpY2UuY2FzZUZpZWxkVmFsdWUgfHwgW107XG4gICAgY29uc3QgdXBkYXRlZEl0ZW1zID0gY2FzZUZpZWxkVmFsdWUuZmlsdGVyKGl0ZW0gPT4gaXRlbS52YWx1ZSAmJiBpdGVtLnZhbHVlLkNhc2VSZWZlcmVuY2UgIT09IHNlbGVjdGVkQ2FzZVJlZmVyZW5jZSk7XG4gICAgaWYgKHVwZGF0ZWRJdGVtcykge1xuICAgICAgdGhpcy5saW5rZWRDYXNlc1NlcnZpY2UuY2FzZUZpZWxkVmFsdWUgPSB1cGRhdGVkSXRlbXM7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRDYXNlcy5zcGxpY2UocG9zLCAxKTtcbiAgfVxuXG4gIHB1YmxpYyBvbk5leHQoKTogdm9pZCB7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2VzID0gW107XG4gICAgdGhpcy5jYXNlUmVhc29uRXJyb3IgPSBudWxsO1xuICAgIHRoaXMuY2FzZU51bWJlckVycm9yID0gbnVsbDtcbiAgICB0aGlzLmNhc2VTZWxlY3Rpb25FcnJvciA9IG51bGw7XG4gICAgdGhpcy5ub1NlbGVjdGVkQ2FzZUVycm9yID0gbnVsbDtcbiAgICBsZXQgbmF2aWdhdGVUb05leHRQYWdlID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5zZWxlY3RlZENhc2VzLmxlbmd0aCkge1xuICAgICAgdGhpcy5saW5rZWRDYXNlc1NlcnZpY2UubGlua2VkQ2FzZXMgPSB0aGlzLnNlbGVjdGVkQ2FzZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubm9TZWxlY3RlZENhc2VFcnJvciA9IExpbmtlZENhc2VzRXJyb3JNZXNzYWdlcy5DYXNlU2VsZWN0aW9uRXJyb3I7XG4gICAgICB0aGlzLmVycm9yTWVzc2FnZXMucHVzaCh7XG4gICAgICAgIHRpdGxlOiAnZHVtbXktY2FzZS1zZWxlY3Rpb24nLFxuICAgICAgICBkZXNjcmlwdGlvbjogTGlua2VkQ2FzZXNFcnJvck1lc3NhZ2VzLkNhc2VTZWxlY3Rpb25FcnJvcixcbiAgICAgICAgZmllbGRJZDogJ2Nhc2VSZWFzb24nLFxuICAgICAgfSk7XG4gICAgICBuYXZpZ2F0ZVRvTmV4dFBhZ2UgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5lbWl0TGlua2VkQ2FzZXNTdGF0ZShuYXZpZ2F0ZVRvTmV4dFBhZ2UpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1yb3dcIj5cbiAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtY29sdW1uLWZ1bGxcIj5cbiAgICA8ZGl2PlxuICAgICAgPHNwYW4gY2xhc3M9XCJnb3Z1ay1jYXB0aW9uLWxcIj5MaW5rIGNhc2VzIHRvIHt7Y2FzZU5hbWV9fSB7e2Nhc2VJZCB8IGNjZENhc2VSZWZlcmVuY2V9fTwvc3Bhbj5cbiAgICAgIDxoMSBjbGFzcz1cImdvdnVrLWhlYWRpbmcteGxcIj5TZWxlY3QgYSZuYnNwO2Nhc2UgeW91IHdhbnQgdG8gbGluayB0byB0aGlzIGNhc2U8L2gxPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiBbZm9ybUdyb3VwXT1cImxpbmtDYXNlRm9ybVwiICpuZ0lmPVwibGlua0Nhc2VGb3JtXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1mb3JtLWdyb3VwXCIgaWQ9XCJjYXNlTnVtYmVyXCIgW25nQ2xhc3NdPVwieydnb3Z1ay1mb3JtLWdyb3VwLS1lcnJvcic6ICEhY2FzZU51bWJlckVycm9yfVwiPlxuICAgICAgICAgIDxoMyBjbGFzcz1cImdvdnVrLWhlYWRpbmctc1wiPkVudGVyIGNhc2UgcmVmZXJlbmNlPC9oMz5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImdvdnVrLWVycm9yLW1lc3NhZ2VcIiAqbmdJZj1cImNhc2VOdW1iZXJFcnJvclwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJnb3Z1ay12aXN1YWxseS1oaWRkZW5cIj5FcnJvcjo8L3NwYW4+IHt7Y2FzZU51bWJlckVycm9yfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiZ292dWstaW5wdXQgZ292dWstaW5wdXQtLXdpZHRoLTIwXCIgZm9ybUNvbnRyb2xOYW1lPVwiY2FzZU51bWJlclwiIGlkPVwid2lkdGgtMjBcIiBuYW1lPVwid2lkdGgtMjBcIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieydnb3Z1ay1mb3JtLWdyb3VwLS1lcnJvcic6ICEhY2FzZVJlYXNvbkVycm9yfVwiIGNsYXNzPVwiZ292dWstIS1tYXJnaW4tdG9wLTNcIj5cbiAgICAgICAgICA8aDMgY2xhc3M9XCJnb3Z1ay1oZWFkaW5nLXNcIj5XaHkgc2hvdWxkIHRoZXNlIGNhc2VzIGJlIGxpbmtlZD88L2gzPlxuICAgICAgICAgIDxkaXYgaWQ9XCJ3YXN0ZS1oaW50XCIgY2xhc3M9XCJnb3Z1ay1oaW50XCI+XG4gICAgICAgICAgICBTZWxlY3QgYWxsIHRoYXQgYXBwbHkuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJnb3Z1ay1lcnJvci1tZXNzYWdlXCIgKm5nSWY9XCJjYXNlUmVhc29uRXJyb3JcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ292dWstdmlzdWFsbHktaGlkZGVuXCI+RXJyb3I6PC9zcGFuPiB7e2Nhc2VSZWFzb25FcnJvcn19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1jaGVja2JveGVzXCIgZGF0YS1tb2R1bGU9XCJnb3Z1ay1jaGVja2JveGVzXCIgZm9ybUFycmF5TmFtZT1cInJlYXNvblR5cGVcIiBpZD1cImNhc2VSZWFzb25cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1jaGVja2JveGVzX19pdGVtXCIgKm5nRm9yPVwibGV0IHJlYXNvbiBvZiBsaW5rQ2FzZVJlYXNvbnM7aW5kZXggYXMgcG9zXCIgW2Zvcm1Hcm91cE5hbWVdPVwicG9zXCI+XG4gICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImdvdnVrLWNoZWNrYm94ZXNfX2lucHV0XCIgaWQ9XCJ7e3JlYXNvbi5rZXl9fVwiIGZvcm1Db250cm9sTmFtZT1cInNlbGVjdGVkXCIgbmFtZT1cInBvc1wiXG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCIgW3ZhbHVlXT1cInJlYXNvbi52YWx1ZV9lblwiIChjaGFuZ2UpPVwidG9nZ2xlTGlua0Nhc2VSZWFzb25PdGhlckNvbW1lbnRzKCRldmVudClcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZ292dWstbGFiZWwgZ292dWstY2hlY2tib3hlc19fbGFiZWxcIiBmb3I9XCJ7e3JlYXNvbi5rZXl9fVwiPnt7cmVhc29uLnZhbHVlX2VufX08L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGlkPVwib3RoZXItZGVzY3JpcHRpb24tY2hhci1saW1pdC1lcnJvclwiIFtuZ0NsYXNzXT1cInsnZ292dWstZm9ybS1ncm91cC0tZXJyb3InOiAhIWNhc2VSZWFzb25Db21tZW50c0Vycm9yfVwiIGNsYXNzPVwiZ292dWstIS1tYXJnaW4tdG9wLTNcIiAqbmdJZj1cInNob3dDb21tZW50c1wiPlxuICAgICAgICAgIDxoMyBjbGFzcz1cImdvdnVrLWhlYWRpbmctc1wiPkNvbW1lbnRzPC9oMz5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImdvdnVrLWVycm9yLW1lc3NhZ2VcIiAqbmdJZj1cImNhc2VSZWFzb25Db21tZW50c0Vycm9yXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImdvdnVrLXZpc3VhbGx5LWhpZGRlblwiPkVycm9yOjwvc3Bhbj4ge3tjYXNlUmVhc29uQ29tbWVudHNFcnJvcn19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImdvdnVrLXRleHRhcmVhIGdvdnVrLWlucHV0LS13aWR0aC0zMFwiIGlkPVwib3RoZXJEZXNjcmlwdGlvblwiXG4gICAgICAgICAgICBuYW1lPVwib3RoZXJEZXNjcmlwdGlvblwiIGZvcm1Db250cm9sTmFtZT1cIm90aGVyRGVzY3JpcHRpb25cIiByb3dzPVwiNVwiXG4gICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PVwib3RoZXItZGVzY3JpcHRpb24taGludCBvdGhlci1kZXNjcmlwdGlvbi1jaGFyLWxpbWl0LWluZm8gb3RoZXItZGVzY3JpcHRpb24tY2hhci1saW1pdC1lcnJvclwiPlxuICAgICAgICAgIDwvdGV4dGFyZWE+XG4gICAgICAgICAgPGRpdiBpZD1cIm90aGVyLWRlc2NyaXB0aW9uLWNoYXItbGltaXQtaW5mb1wiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiIGNsYXNzPVwiZ292dWstaGludCBnb3Z1ay1jaGFyYWN0ZXItY291bnRfX21lc3NhZ2VcIj5cbiAgICAgICAgICAgIFlvdSBjYW4gZW50ZXIgdXAgdG8gMTAwIGNoYXJhY3RlcnNcbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxicj48YnI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZ292dWstZXJyb3ItbWVzc2FnZVwiICpuZ0lmPVwiY2FzZVNlbGVjdGlvbkVycm9yXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJnb3Z1ay12aXN1YWxseS1oaWRkZW5cIj5FcnJvcjo8L3NwYW4+IHt7Y2FzZVNlbGVjdGlvbkVycm9yfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8YnV0dG9uIGlkPVwicHJvcG9zZVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImdvdnVrLWJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeVwiIGRhdGEtbW9kdWxlPVwiZ292dWstYnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2spPVwic3VibWl0Q2FzZUluZm8oKVwiPlByb3Bvc2UgY2FzZSBsaW5rPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxocj5cbiAgICAgIDxicj48YnI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZm9ybS1ncm91cFwiIGlkPVwiY2FzZU51bWJlclwiIFtuZ0NsYXNzXT1cInsnZ292dWstZm9ybS1ncm91cC0tZXJyb3InOiAhIW5vU2VsZWN0ZWRDYXNlRXJyb3J9XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZ292dWstZXJyb3ItbWVzc2FnZVwiICpuZ0lmPVwibm9TZWxlY3RlZENhc2VFcnJvclwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ292dWstdmlzdWFsbHktaGlkZGVuXCI+RXJyb3I6PC9zcGFuPiB7e25vU2VsZWN0ZWRDYXNlRXJyb3J9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICAgICAgPGNhcHRpb24gY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2FwdGlvbiBnb3Z1ay10YWJsZV9fY2FwdGlvbi0tbVwiPlByb3Bvc2VkIGNhc2UgbGlua3MgPC9jYXB0aW9uPlxuICAgICAgICAgIDx0aGVhZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkXCI+XG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHdpZHRoPVwiMzAwXCI+Q2FzZSBuYW1lIGFuZCBudW1iZXI8L3RoPlxuICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiB3aWR0aD1cIjE1MFwiPkNhc2UgdHlwZSA8L3RoPlxuICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiB3aWR0aD1cIjIwMFwiPlNlcnZpY2U8L3RoPlxuICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiB3aWR0aD1cIjIwMFwiPlN0YXRlPC90aD5cbiAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgd2lkdGg9XCI0MDBcIj5SZWFzb25zIGZvciBjYXNlIGxpbms8L3RoPlxuICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiB3aWR0aD1cIjUwXCI+PC90aD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiPlxuICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiICpuZ0Zvcj1cImxldCBjYXNlIG9mIHNlbGVjdGVkQ2FzZXM7IGxldCBwb3MgPSBpbmRleFwiPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1mb3JtLWdyb3VwLS1lcnJvclwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3RhYmxlLWdyb3VwLWVycm9yJzpjYXNlU2VsZWN0aW9uRXJyb3IgJiYgY2FzZS5jYXNlUmVmZXJlbmNlID09PSBsaW5rQ2FzZUZvcm0udmFsdWUuY2FzZU51bWJlcn1cIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57e2Nhc2UuY2FzZU5hbWV9fSA8YnI+IHt7Y2FzZS5jYXNlUmVmZXJlbmNlIHwgY2NkQ2FzZVJlZmVyZW5jZX19PC9zcGFuPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiIFt0aXRsZV09XCJjYXNlLmNhc2VUeXBlRGVzY3JpcHRpb25cIj57e2Nhc2UuY2FzZVR5cGV9fTwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3tjYXNlLmNhc2VTZXJ2aWNlfX08L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiIFt0aXRsZV09XCJjYXNlLmNhc2VTdGF0ZURlc2NyaXB0aW9uXCI+e3tjYXNlLmNhc2VTdGF0ZX19PC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIj48c3BhblxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHJlYXNvbiBvZiBjYXNlLnJlYXNvbnNcIj57e3JlYXNvbiB8IGNjZExpbmtDYXNlc1JlYXNvblZhbHVlfX08YnI+PC9zcGFuPjwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+PGEgW2F0dHIuaWRdPVwiY2FzZS5jYXNlUmVmZXJlbmNlXCIgKGNsaWNrKT1cIm9uU2VsZWN0ZWRMaW5rZWRDYXNlUmVtb3ZlKHBvcywgY2FzZS5jYXNlUmVmZXJlbmNlKTtcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJnb3Z1ay1saW5rIG5vLXZpc2l0ZWQtc3RhdGVcIj5SZW1vdmU8L2E+PC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCIgKm5nSWY9XCIhc2VsZWN0ZWRDYXNlcy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIiBjb2xzcGFuPVwiNlwiPlxuICAgICAgICAgICAgICAgIE5vbmVcbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgPC90YWJsZT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWJ1dHRvbi1ncm91cFwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGJ1dHRvbi1wcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiIGlkPVwibmV4dC1idXR0b25cIiAoY2xpY2spPVwib25OZXh0KClcIj5OZXh0PC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==