mis-crystal-design-system 18.2.16 → 18.2.17

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.
@@ -21,7 +21,7 @@ const _c16 = () => ({ display: "flex" });
21
21
  const _c17 = () => ({ "margin-right": "4px" });
22
22
  function TableComponent_mis_table_filter_1_Template(rf, ctx) { if (rf & 1) {
23
23
  const _r1 = i0.ɵɵgetCurrentView();
24
- i0.ɵɵelementStart(0, "mis-table-filter", 13, 1);
24
+ i0.ɵɵelementStart(0, "mis-table-filter", 12, 1);
25
25
  i0.ɵɵlistener("filtersApplied", function TableComponent_mis_table_filter_1_Template_mis_table_filter_filtersApplied_0_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.updateAppliedFilters($event)); });
26
26
  i0.ɵɵelementEnd();
27
27
  } if (rf & 2) {
@@ -29,7 +29,7 @@ function TableComponent_mis_table_filter_1_Template(rf, ctx) { if (rf & 1) {
29
29
  i0.ɵɵproperty("containerStyles", ctx_r1.filterContainerStyles())("filtersData", ctx_r1.filterData());
30
30
  } }
31
31
  function TableComponent_div_5_p_2_Template(rf, ctx) { if (rf & 1) {
32
- i0.ɵɵelementStart(0, "p", 20);
32
+ i0.ɵɵelementStart(0, "p", 19);
33
33
  i0.ɵɵtext(1);
34
34
  i0.ɵɵelementEnd();
35
35
  } if (rf & 2) {
@@ -38,16 +38,16 @@ function TableComponent_div_5_p_2_Template(rf, ctx) { if (rf & 1) {
38
38
  i0.ɵɵtextInterpolate1(" ", (colHeader_r4 == null ? null : colHeader_r4.data) || " ", " ");
39
39
  } }
40
40
  function TableComponent_div_5_span_3_span_1_Template(rf, ctx) { if (rf & 1) {
41
- i0.ɵɵelement(0, "span", 25);
41
+ i0.ɵɵelement(0, "span", 24);
42
42
  } }
43
43
  function TableComponent_div_5_span_3_Template(rf, ctx) { if (rf & 1) {
44
44
  const _r5 = i0.ɵɵgetCurrentView();
45
- i0.ɵɵelementStart(0, "span", 21);
45
+ i0.ɵɵelementStart(0, "span", 20);
46
46
  i0.ɵɵlistener("click", function TableComponent_div_5_span_3_Template_span_click_0_listener($event) { i0.ɵɵrestoreView(_r5); const colHeader_r4 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(); ctx_r1.filterData.set(colHeader_r4.filters); ctx_r1.toggleFilter(colHeader_r4.data); return i0.ɵɵresetView($event.stopPropagation()); });
47
- i0.ɵɵtemplate(1, TableComponent_div_5_span_3_span_1_Template, 1, 0, "span", 22);
47
+ i0.ɵɵtemplate(1, TableComponent_div_5_span_3_span_1_Template, 1, 0, "span", 21);
48
48
  i0.ɵɵnamespaceSVG();
49
- i0.ɵɵelementStart(2, "svg", 23);
50
- i0.ɵɵelement(3, "path", 24);
49
+ i0.ɵɵelementStart(2, "svg", 22);
50
+ i0.ɵɵelement(3, "path", 23);
51
51
  i0.ɵɵelementEnd()();
52
52
  } if (rf & 2) {
53
53
  let tmp_5_0;
@@ -58,9 +58,9 @@ function TableComponent_div_5_span_3_Template(rf, ctx) { if (rf & 1) {
58
58
  } }
59
59
  function TableComponent_div_5_span_4_Template(rf, ctx) { if (rf & 1) {
60
60
  const _r6 = i0.ɵɵgetCurrentView();
61
- i0.ɵɵelementStart(0, "span", 26);
61
+ i0.ɵɵelementStart(0, "span", 25);
62
62
  i0.ɵɵlistener("click", function TableComponent_div_5_span_4_Template_span_click_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); ctx_r1.toggleCheckbox(); return i0.ɵɵresetView($event.stopPropagation()); });
63
- i0.ɵɵelement(1, "mis-checkbox", 27);
63
+ i0.ɵɵelement(1, "mis-checkbox", 26);
64
64
  i0.ɵɵelementEnd();
65
65
  } if (rf & 2) {
66
66
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -69,7 +69,7 @@ function TableComponent_div_5_span_4_Template(rf, ctx) { if (rf & 1) {
69
69
  } }
70
70
  function TableComponent_div_5_span_5_Template(rf, ctx) { if (rf & 1) {
71
71
  const _r7 = i0.ɵɵgetCurrentView();
72
- i0.ɵɵelementStart(0, "span", 28);
72
+ i0.ɵɵelementStart(0, "span", 27);
73
73
  i0.ɵɵlistener("sortChange", function TableComponent_div_5_span_5_Template_span_sortChange_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onSortChange($event)); });
74
74
  i0.ɵɵelementEnd();
75
75
  } if (rf & 2) {
@@ -79,16 +79,16 @@ function TableComponent_div_5_span_5_Template(rf, ctx) { if (rf & 1) {
79
79
  } }
80
80
  function TableComponent_div_5_6_ng_template_0_Template(rf, ctx) { }
81
81
  function TableComponent_div_5_6_Template(rf, ctx) { if (rf & 1) {
82
- i0.ɵɵtemplate(0, TableComponent_div_5_6_ng_template_0_Template, 0, 0, "ng-template", 29);
82
+ i0.ɵɵtemplate(0, TableComponent_div_5_6_ng_template_0_Template, 0, 0, "ng-template", 28);
83
83
  } if (rf & 2) {
84
84
  const colHeader_r4 = i0.ɵɵnextContext().$implicit;
85
85
  i0.ɵɵproperty("customComponent", colHeader_r4 == null ? null : colHeader_r4.componentRef)("data", colHeader_r4.data);
86
86
  } }
87
87
  function TableComponent_div_5_Template(rf, ctx) { if (rf & 1) {
88
88
  const _r3 = i0.ɵɵgetCurrentView();
89
- i0.ɵɵelementStart(0, "div", 14, 2);
89
+ i0.ɵɵelementStart(0, "div", 13, 2);
90
90
  i0.ɵɵlistener("click", function TableComponent_div_5_Template_div_click_0_listener() { const colHeader_r4 = i0.ɵɵrestoreView(_r3).$implicit; return i0.ɵɵresetView((colHeader_r4 == null ? null : colHeader_r4.action) ? colHeader_r4 == null ? null : colHeader_r4.action(colHeader_r4) : null); });
91
- i0.ɵɵtemplate(2, TableComponent_div_5_p_2_Template, 2, 1, "p", 15)(3, TableComponent_div_5_span_3_Template, 4, 1, "span", 16)(4, TableComponent_div_5_span_4_Template, 2, 1, "span", 17)(5, TableComponent_div_5_span_5_Template, 1, 4, "span", 18)(6, TableComponent_div_5_6_Template, 1, 2, null, 19);
91
+ i0.ɵɵtemplate(2, TableComponent_div_5_p_2_Template, 2, 1, "p", 14)(3, TableComponent_div_5_span_3_Template, 4, 1, "span", 15)(4, TableComponent_div_5_span_4_Template, 2, 1, "span", 16)(5, TableComponent_div_5_span_5_Template, 1, 4, "span", 17)(6, TableComponent_div_5_6_Template, 1, 2, null, 18);
92
92
  i0.ɵɵelementEnd();
93
93
  } if (rf & 2) {
94
94
  const colHeader_r4 = ctx.$implicit;
@@ -106,7 +106,7 @@ function TableComponent_div_5_Template(rf, ctx) { if (rf & 1) {
106
106
  } }
107
107
  function TableComponent_div_7_div_2_div_2_ng_container_1_Template(rf, ctx) { if (rf & 1) {
108
108
  i0.ɵɵelementContainerStart(0);
109
- i0.ɵɵelement(1, "span", 40);
109
+ i0.ɵɵelement(1, "span", 39);
110
110
  i0.ɵɵelementContainerEnd();
111
111
  } if (rf & 2) {
112
112
  const col_r12 = i0.ɵɵnextContext(2).$implicit;
@@ -123,8 +123,8 @@ function TableComponent_div_7_div_2_div_2_ng_template_2_Template(rf, ctx) { if (
123
123
  i0.ɵɵtextInterpolate(col_r12);
124
124
  } }
125
125
  function TableComponent_div_7_div_2_div_2_Template(rf, ctx) { if (rf & 1) {
126
- i0.ɵɵelementStart(0, "div", 38);
127
- i0.ɵɵtemplate(1, TableComponent_div_7_div_2_div_2_ng_container_1_Template, 2, 1, "ng-container", 39)(2, TableComponent_div_7_div_2_div_2_ng_template_2_Template, 2, 1, "ng-template", null, 3, i0.ɵɵtemplateRefExtractor);
126
+ i0.ɵɵelementStart(0, "div", 37);
127
+ i0.ɵɵtemplate(1, TableComponent_div_7_div_2_div_2_ng_container_1_Template, 2, 1, "ng-container", 38)(2, TableComponent_div_7_div_2_div_2_ng_template_2_Template, 2, 1, "ng-template", null, 3, i0.ɵɵtemplateRefExtractor);
128
128
  i0.ɵɵelementEnd();
129
129
  } if (rf & 2) {
130
130
  let tmp_10_0;
@@ -139,7 +139,7 @@ function TableComponent_div_7_div_2_div_2_Template(rf, ctx) { if (rf & 1) {
139
139
  } }
140
140
  function TableComponent_div_7_div_2_3_ng_template_0_Template(rf, ctx) { }
141
141
  function TableComponent_div_7_div_2_3_Template(rf, ctx) { if (rf & 1) {
142
- i0.ɵɵtemplate(0, TableComponent_div_7_div_2_3_ng_template_0_Template, 0, 0, "ng-template", 29);
142
+ i0.ɵɵtemplate(0, TableComponent_div_7_div_2_3_ng_template_0_Template, 0, 0, "ng-template", 28);
143
143
  } if (rf & 2) {
144
144
  const ctx_r15 = i0.ɵɵnextContext();
145
145
  const col_r12 = ctx_r15.$implicit;
@@ -149,7 +149,7 @@ function TableComponent_div_7_div_2_3_Template(rf, ctx) { if (rf & 1) {
149
149
  } }
150
150
  function TableComponent_div_7_div_2_mis_actions_cell_4_Template(rf, ctx) { if (rf & 1) {
151
151
  const _r17 = i0.ɵɵgetCurrentView();
152
- i0.ɵɵelementStart(0, "mis-actions-cell", 41);
152
+ i0.ɵɵelementStart(0, "mis-actions-cell", 40);
153
153
  i0.ɵɵlistener("actionClick", function TableComponent_div_7_div_2_mis_actions_cell_4_Template_mis_actions_cell_actionClick_0_listener($event) { i0.ɵɵrestoreView(_r17); const rowIndex_r15 = i0.ɵɵnextContext(2).index; const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onActionClick($event, rowIndex_r15)); });
154
154
  i0.ɵɵelementEnd();
155
155
  } if (rf & 2) {
@@ -163,10 +163,10 @@ function TableComponent_div_7_div_2_mis_actions_cell_4_Template(rf, ctx) { if (r
163
163
  } }
164
164
  function TableComponent_div_7_div_2_Template(rf, ctx) { if (rf & 1) {
165
165
  const _r10 = i0.ɵɵgetCurrentView();
166
- i0.ɵɵelementStart(0, "div", 34);
166
+ i0.ɵɵelementStart(0, "div", 33);
167
167
  i0.ɵɵlistener("click", function TableComponent_div_7_div_2_Template_div_click_0_listener() { let tmp_9_0; const ctx_r10 = i0.ɵɵrestoreView(_r10); const col_r12 = ctx_r10.$implicit; const colIndex_r13 = ctx_r10.index; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(((tmp_9_0 = ctx_r1.tableConfig()) == null ? null : tmp_9_0.colConfig[colIndex_r13] == null ? null : tmp_9_0.colConfig[colIndex_r13].action) && ((tmp_9_0 = ctx_r1.tableConfig()) == null ? null : tmp_9_0.colConfig[colIndex_r13] == null ? null : tmp_9_0.colConfig[colIndex_r13].actionType) !== "checkbox" ? (tmp_9_0 = ctx_r1.tableConfig()) == null ? null : tmp_9_0.colConfig[colIndex_r13] == null ? null : tmp_9_0.colConfig[colIndex_r13].action(col_r12) : null); });
168
- i0.ɵɵelementStart(1, "div", 35);
169
- i0.ɵɵtemplate(2, TableComponent_div_7_div_2_div_2_Template, 4, 9, "div", 36)(3, TableComponent_div_7_div_2_3_Template, 1, 2, null, 19)(4, TableComponent_div_7_div_2_mis_actions_cell_4_Template, 1, 5, "mis-actions-cell", 37);
168
+ i0.ɵɵelementStart(1, "div", 34);
169
+ i0.ɵɵtemplate(2, TableComponent_div_7_div_2_div_2_Template, 4, 9, "div", 35)(3, TableComponent_div_7_div_2_3_Template, 1, 2, null, 18)(4, TableComponent_div_7_div_2_mis_actions_cell_4_Template, 1, 5, "mis-actions-cell", 36);
170
170
  i0.ɵɵelementEnd()();
171
171
  } if (rf & 2) {
172
172
  let tmp_8_0;
@@ -190,7 +190,7 @@ function TableComponent_div_7_div_2_Template(rf, ctx) { if (rf & 1) {
190
190
  } }
191
191
  function TableComponent_div_7_div_3_ng_container_1_Template(rf, ctx) { if (rf & 1) {
192
192
  i0.ɵɵelementContainerStart(0);
193
- i0.ɵɵelementStart(1, "div", 43);
193
+ i0.ɵɵelementStart(1, "div", 42);
194
194
  i0.ɵɵtext(2, " Loading... ");
195
195
  i0.ɵɵelementEnd();
196
196
  i0.ɵɵelementContainerEnd();
@@ -200,7 +200,7 @@ function TableComponent_div_7_div_3_ng_container_1_Template(rf, ctx) { if (rf &
200
200
  } }
201
201
  function TableComponent_div_7_div_3_ng_container_2_Template(rf, ctx) { if (rf & 1) {
202
202
  i0.ɵɵelementContainerStart(0);
203
- i0.ɵɵelementStart(1, "div", 43);
203
+ i0.ɵɵelementStart(1, "div", 42);
204
204
  i0.ɵɵtext(2, " No Data Available... ");
205
205
  i0.ɵɵelementEnd();
206
206
  i0.ɵɵelementContainerEnd();
@@ -210,7 +210,7 @@ function TableComponent_div_7_div_3_ng_container_2_Template(rf, ctx) { if (rf &
210
210
  } }
211
211
  function TableComponent_div_7_div_3_ng_container_3_Template(rf, ctx) { if (rf & 1) {
212
212
  i0.ɵɵelementContainerStart(0);
213
- i0.ɵɵelement(1, "sub-table", 44);
213
+ i0.ɵɵelement(1, "sub-table", 43);
214
214
  i0.ɵɵelementContainerEnd();
215
215
  } if (rf & 2) {
216
216
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -218,8 +218,8 @@ function TableComponent_div_7_div_3_ng_container_3_Template(rf, ctx) { if (rf &
218
218
  i0.ɵɵproperty("config", ctx_r1.subTableconfig())("tableData", ctx_r1.subTableData());
219
219
  } }
220
220
  function TableComponent_div_7_div_3_Template(rf, ctx) { if (rf & 1) {
221
- i0.ɵɵelementStart(0, "div", 42);
222
- i0.ɵɵtemplate(1, TableComponent_div_7_div_3_ng_container_1_Template, 3, 2, "ng-container", 19)(2, TableComponent_div_7_div_3_ng_container_2_Template, 3, 2, "ng-container", 19)(3, TableComponent_div_7_div_3_ng_container_3_Template, 2, 2, "ng-container", 19);
221
+ i0.ɵɵelementStart(0, "div", 41);
222
+ i0.ɵɵtemplate(1, TableComponent_div_7_div_3_ng_container_1_Template, 3, 2, "ng-container", 18)(2, TableComponent_div_7_div_3_ng_container_2_Template, 3, 2, "ng-container", 18)(3, TableComponent_div_7_div_3_ng_container_3_Template, 2, 2, "ng-container", 18);
223
223
  i0.ɵɵelementEnd();
224
224
  } if (rf & 2) {
225
225
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -232,11 +232,11 @@ function TableComponent_div_7_div_3_Template(rf, ctx) { if (rf & 1) {
232
232
  } }
233
233
  function TableComponent_div_7_Template(rf, ctx) { if (rf & 1) {
234
234
  const _r8 = i0.ɵɵgetCurrentView();
235
- i0.ɵɵelementStart(0, "div", 30)(1, "div", 31);
235
+ i0.ɵɵelementStart(0, "div", 29)(1, "div", 30);
236
236
  i0.ɵɵlistener("click", function TableComponent_div_7_Template_div_click_1_listener() { const i_r9 = i0.ɵɵrestoreView(_r8).index; const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.selectRow(i_r9)); });
237
- i0.ɵɵtemplate(2, TableComponent_div_7_div_2_Template, 5, 15, "div", 32);
237
+ i0.ɵɵtemplate(2, TableComponent_div_7_div_2_Template, 5, 15, "div", 31);
238
238
  i0.ɵɵelementEnd();
239
- i0.ɵɵtemplate(3, TableComponent_div_7_div_3_Template, 4, 3, "div", 33);
239
+ i0.ɵɵtemplate(3, TableComponent_div_7_div_3_Template, 4, 3, "div", 32);
240
240
  i0.ɵɵelementEnd();
241
241
  } if (rf & 2) {
242
242
  let tmp_7_0;
@@ -252,20 +252,20 @@ function TableComponent_div_7_Template(rf, ctx) { if (rf & 1) {
252
252
  i0.ɵɵadvance();
253
253
  i0.ɵɵproperty("ngIf", ((tmp_9_0 = ctx_r1.tableConfig()) == null ? null : tmp_9_0.canExpand) && ctx_r1.expandedIndex() === i_r9);
254
254
  } }
255
- function TableComponent_Conditional_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
255
+ function TableComponent_Conditional_8_Conditional_4_Template(rf, ctx) { if (rf & 1) {
256
256
  const _r20 = i0.ɵɵgetCurrentView();
257
257
  i0.ɵɵelementStart(0, "div", 46)(1, "mis-dropdown", 52);
258
- i0.ɵɵlistener("onChange", function TableComponent_Conditional_9_Conditional_3_Template_mis_dropdown_onChange_1_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onPageSizeChange($event)); });
258
+ i0.ɵɵlistener("onChange", function TableComponent_Conditional_8_Conditional_4_Template_mis_dropdown_onChange_1_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onPageSizeChange($event)); });
259
259
  i0.ɵɵelementEnd()();
260
260
  } if (rf & 2) {
261
261
  const ctx_r1 = i0.ɵɵnextContext(2);
262
262
  i0.ɵɵadvance();
263
263
  i0.ɵɵproperty("data", ctx_r1.pageSizeOptions())("selectedItem", ctx_r1.selectedPageSizeOption())("width", "90px")("height", "32px")("searchEnabled", false)("dropdownListHeight", "100px");
264
264
  } }
265
- function TableComponent_Conditional_9_ng_container_8_div_1_span_1_Template(rf, ctx) { if (rf & 1) {
265
+ function TableComponent_Conditional_8_ng_container_9_div_1_span_1_Template(rf, ctx) { if (rf & 1) {
266
266
  const _r21 = i0.ɵɵgetCurrentView();
267
267
  i0.ɵɵelementStart(0, "span", 56);
268
- i0.ɵɵlistener("click", function TableComponent_Conditional_9_ng_container_8_div_1_span_1_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r21); const pageNumber_r22 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.updateSelectedPage(pageNumber_r22)); });
268
+ i0.ɵɵlistener("click", function TableComponent_Conditional_8_ng_container_9_div_1_span_1_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r21); const pageNumber_r22 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.updateSelectedPage(pageNumber_r22)); });
269
269
  i0.ɵɵtext(1);
270
270
  i0.ɵɵelementEnd();
271
271
  } if (rf & 2) {
@@ -275,8 +275,8 @@ function TableComponent_Conditional_9_ng_container_8_div_1_span_1_Template(rf, c
275
275
  i0.ɵɵadvance();
276
276
  i0.ɵɵtextInterpolate(pageNumber_r22);
277
277
  } }
278
- function TableComponent_Conditional_9_ng_container_8_div_1_span_2_Template(rf, ctx) { if (rf & 1) {
279
- i0.ɵɵelementStart(0, "span", 57)(1, "div", 43);
278
+ function TableComponent_Conditional_8_ng_container_9_div_1_span_2_Template(rf, ctx) { if (rf & 1) {
279
+ i0.ɵɵelementStart(0, "span", 57)(1, "div", 42);
280
280
  i0.ɵɵelement(2, "span", 58)(3, "span", 58)(4, "span", 59);
281
281
  i0.ɵɵelementEnd()();
282
282
  } if (rf & 2) {
@@ -287,9 +287,9 @@ function TableComponent_Conditional_9_ng_container_8_div_1_span_2_Template(rf, c
287
287
  i0.ɵɵadvance();
288
288
  i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction0(5, _c17));
289
289
  } }
290
- function TableComponent_Conditional_9_ng_container_8_div_1_Template(rf, ctx) { if (rf & 1) {
290
+ function TableComponent_Conditional_8_ng_container_9_div_1_Template(rf, ctx) { if (rf & 1) {
291
291
  i0.ɵɵelementStart(0, "div");
292
- i0.ɵɵtemplate(1, TableComponent_Conditional_9_ng_container_8_div_1_span_1_Template, 2, 4, "span", 54)(2, TableComponent_Conditional_9_ng_container_8_div_1_span_2_Template, 5, 6, "span", 55);
292
+ i0.ɵɵtemplate(1, TableComponent_Conditional_8_ng_container_9_div_1_span_1_Template, 2, 4, "span", 54)(2, TableComponent_Conditional_8_ng_container_9_div_1_span_2_Template, 5, 6, "span", 55);
293
293
  i0.ɵɵelementEnd();
294
294
  } if (rf & 2) {
295
295
  const pageNumber_r22 = ctx.$implicit;
@@ -298,43 +298,43 @@ function TableComponent_Conditional_9_ng_container_8_div_1_Template(rf, ctx) { i
298
298
  i0.ɵɵadvance();
299
299
  i0.ɵɵproperty("ngIf", pageNumber_r22 == 0);
300
300
  } }
301
- function TableComponent_Conditional_9_ng_container_8_Template(rf, ctx) { if (rf & 1) {
301
+ function TableComponent_Conditional_8_ng_container_9_Template(rf, ctx) { if (rf & 1) {
302
302
  i0.ɵɵelementContainerStart(0);
303
- i0.ɵɵtemplate(1, TableComponent_Conditional_9_ng_container_8_div_1_Template, 3, 2, "div", 53);
303
+ i0.ɵɵtemplate(1, TableComponent_Conditional_8_ng_container_9_div_1_Template, 3, 2, "div", 53);
304
304
  i0.ɵɵelementContainerEnd();
305
305
  } if (rf & 2) {
306
306
  const ctx_r1 = i0.ɵɵnextContext(2);
307
307
  i0.ɵɵadvance();
308
308
  i0.ɵɵproperty("ngForOf", ctx_r1.pages());
309
309
  } }
310
- function TableComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
310
+ function TableComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
311
311
  const _r19 = i0.ɵɵgetCurrentView();
312
- i0.ɵɵelementStart(0, "div", 12)(1, "p", 45);
313
- i0.ɵɵtext(2);
312
+ i0.ɵɵelementStart(0, "div", 11)(1, "div", 44)(2, "p", 45);
313
+ i0.ɵɵtext(3);
314
314
  i0.ɵɵelementEnd();
315
- i0.ɵɵtemplate(3, TableComponent_Conditional_9_Conditional_3_Template, 2, 6, "div", 46);
316
- i0.ɵɵelementStart(4, "div", 47)(5, "span", 48);
317
- i0.ɵɵlistener("click", function TableComponent_Conditional_9_Template_span_click_5_listener() { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.selectedPage() > 1 && ctx_r1.updateSelectedPage(ctx_r1.selectedPage() - 1)); });
315
+ i0.ɵɵtemplate(4, TableComponent_Conditional_8_Conditional_4_Template, 2, 6, "div", 46);
316
+ i0.ɵɵelementStart(5, "div", 47)(6, "span", 48);
317
+ i0.ɵɵlistener("click", function TableComponent_Conditional_8_Template_span_click_6_listener() { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.selectedPage() > 1 && ctx_r1.updateSelectedPage(ctx_r1.selectedPage() - 1)); });
318
318
  i0.ɵɵnamespaceSVG();
319
- i0.ɵɵelementStart(6, "svg", 49);
320
- i0.ɵɵelement(7, "path", 50);
319
+ i0.ɵɵelementStart(7, "svg", 49);
320
+ i0.ɵɵelement(8, "path", 50);
321
321
  i0.ɵɵelementEnd()();
322
- i0.ɵɵtemplate(8, TableComponent_Conditional_9_ng_container_8_Template, 2, 1, "ng-container", 19);
322
+ i0.ɵɵtemplate(9, TableComponent_Conditional_8_ng_container_9_Template, 2, 1, "ng-container", 18);
323
323
  i0.ɵɵnamespaceHTML();
324
- i0.ɵɵelementStart(9, "span", 48);
325
- i0.ɵɵlistener("click", function TableComponent_Conditional_9_Template_span_click_9_listener() { let tmp_3_0; i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.selectedPage() < ((tmp_3_0 = ctx_r1.tableConfig().paginationConfig) == null ? null : tmp_3_0.noOfPages) && ctx_r1.updateSelectedPage(ctx_r1.selectedPage() + 1)); });
324
+ i0.ɵɵelementStart(10, "span", 48);
325
+ i0.ɵɵlistener("click", function TableComponent_Conditional_8_Template_span_click_10_listener() { let tmp_3_0; i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.selectedPage() < ((tmp_3_0 = ctx_r1.tableConfig().paginationConfig) == null ? null : tmp_3_0.noOfPages) && ctx_r1.updateSelectedPage(ctx_r1.selectedPage() + 1)); });
326
326
  i0.ɵɵnamespaceSVG();
327
- i0.ɵɵelementStart(10, "svg", 49);
328
- i0.ɵɵelement(11, "path", 51);
329
- i0.ɵɵelementEnd()()()();
327
+ i0.ɵɵelementStart(11, "svg", 49);
328
+ i0.ɵɵelement(12, "path", 51);
329
+ i0.ɵɵelementEnd()()()()();
330
330
  } if (rf & 2) {
331
331
  let tmp_5_0;
332
332
  let tmp_6_0;
333
333
  const ctx_r1 = i0.ɵɵnextContext();
334
- i0.ɵɵadvance(2);
334
+ i0.ɵɵadvance(3);
335
335
  i0.ɵɵtextInterpolate3(" Showing ", (ctx_r1.selectedPage() - 1) * ctx_r1.tableConfig().paginationConfig.rowsPerPage + 1, "-", (ctx_r1.selectedPage() - 1) * ctx_r1.tableConfig().paginationConfig.rowsPerPage + ctx_r1.tableLength(), " of ", ctx_r1.tableConfig().paginationConfig.totalNoOfRows, " items ");
336
336
  i0.ɵɵadvance();
337
- i0.ɵɵconditional(ctx_r1.showPageSizeDropdown() ? 3 : -1);
337
+ i0.ɵɵconditional(ctx_r1.showPageSizeDropdown() ? 4 : -1);
338
338
  i0.ɵɵadvance(2);
339
339
  i0.ɵɵclassProp("page-nav-inactive", ctx_r1.selectedPage() === 1);
340
340
  i0.ɵɵadvance(3);
@@ -872,7 +872,7 @@ export class TableComponent {
872
872
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.filter = _t.first);
873
873
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.table = _t.first);
874
874
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.colHeaders = _t);
875
- } }, inputs: { tableConfig: [1, "tableConfig"], subTableconfig: [1, "subTableconfig"], tableDataLoading: [1, "tableDataLoading"], expandedIndex: [1, "expandedIndex"], tableData: [1, "tableData"], subTableData: [1, "subTableData"], subTableDataLoading: [1, "subTableDataLoading"], currentSort: [1, "currentSort"] }, outputs: { filtersUpdated: "filtersUpdated", pageSelected: "pageSelected", pageSizeChanged: "pageSizeChanged", sortChange: "sortChange", headerAction: "headerAction" }, features: [i0.ɵɵNgOnChangesFeature], decls: 10, vars: 15, consts: [["table", ""], ["filter", ""], ["colHeaderRef", ""], ["plainText", ""], ["id", "main-container", 3, "ngStyle"], [3, "containerStyles", "filtersData", "filtersApplied", 4, "ngIf"], ["id", "table-container", 3, "ngClass"], ["id", "col-headers-container", 3, "ngStyle"], ["class", "col-header", 3, "ngStyle", "click", 4, "ngFor", "ngForOf"], ["id", "data-container"], ["class", "row-wrapper", 4, "ngFor", "ngForOf"], ["id", "pagination-content-container"], ["id", "pagination-container"], [3, "filtersApplied", "containerStyles", "filtersData"], [1, "col-header", 3, "click", "ngStyle"], ["class", "col-header-text", 4, "ngIf"], ["class", "filter-icon", 3, "click", 4, "ngIf"], ["class", "checkbox-icon", 3, "click", 4, "ngIf"], ["appSortIcons", "", "class", "sort-icon", 3, "column", "activeSort", "activeSorts", "multiColumnSort", "sortChange", 4, "ngIf"], [4, "ngIf"], [1, "col-header-text"], [1, "filter-icon", 3, "click"], ["id", "filter-active", 4, "ngIf"], ["fill", "none", "height", "10", "viewBox", "0 0 13 10", "width", "13", "xmlns", "http://www.w3.org/2000/svg"], ["clip-rule", "evenodd", "d", "M4.97546 10H7.64213V8H4.97546V10ZM0.308472 0V2H12.3085V0H0.308472ZM2.30847 6H10.3085V4H2.30847V6Z", "fill", "#181F33", "fill-rule", "evenodd"], ["id", "filter-active"], [1, "checkbox-icon", 3, "click"], [3, "checked"], ["appSortIcons", "", 1, "sort-icon", 3, "sortChange", "column", "activeSort", "activeSorts", "multiColumnSort"], ["customTableCell", "", 3, "customComponent", "data"], [1, "row-wrapper"], [1, "t-row", 3, "click", "ngClass", "ngStyle"], ["class", "t-col-container", 3, "ngStyle", "ngClass", "click", 4, "ngFor", "ngForOf"], ["class", "sub-row", 4, "ngIf"], [1, "t-col-container", 3, "click", "ngStyle", "ngClass"], [1, "t-col", 3, "ngStyle"], ["class", "t-col-text", 3, "ngStyle", "ngClass", 4, "ngIf"], [3, "cellData", "config", "ngClass", "actionClick", 4, "ngIf"], [1, "t-col-text", 3, "ngStyle", "ngClass"], [4, "ngIf", "ngIfElse"], [3, "innerHTML"], [3, "actionClick", "cellData", "config", "ngClass"], [1, "sub-row"], [3, "ngStyle"], [3, "config", "tableData"], ["id", "pagination-text"], [1, "page-size-selector"], ["id", "pages-container"], [1, "page", 3, "click"], ["fill", "none", "height", "10", "viewBox", "0 0 7 10", "width", "7", "xmlns", "http://www.w3.org/2000/svg"], ["clip-rule", "evenodd", "d", "M0.857405 5.56295C0.855794 5.56139 0.854188 5.55982 0.852588 5.55824C0.695955 5.40408 0.617641 5.20203 0.617647 4.99998C0.617641 4.79793 0.695955 4.59588 0.852588 4.44172C0.854188 4.44014 0.855794 4.43858 0.857404 4.43702L5.13066 0.231231C5.44392 -0.0770771 5.9518 -0.0770771 6.26506 0.231231C6.57831 0.53954 6.57831 1.03941 6.26506 1.34772L2.5542 4.99998L6.26506 8.65225C6.57831 8.96055 6.57831 9.46042 6.26506 9.76873C5.9518 10.077 5.44392 10.077 5.13066 9.76873L0.857405 5.56295Z", "fill", "#181F33", "fill-rule", "evenodd"], ["clip-rule", "evenodd", "d", "M6.1426 5.56295C6.14421 5.56139 6.14581 5.55982 6.14741 5.55824C6.30405 5.40408 6.38236 5.20203 6.38236 4.99998C6.38236 4.79793 6.30405 4.59588 6.14741 4.44172C6.14581 4.44014 6.14421 4.43858 6.1426 4.43702L1.86934 0.231231C1.55608 -0.0770771 1.0482 -0.0770771 0.734942 0.231231C0.421688 0.53954 0.421688 1.03941 0.734942 1.34772L4.4458 4.99998L0.734941 8.65225C0.421686 8.96055 0.421686 9.46042 0.734941 9.76873C1.0482 10.077 1.55608 10.077 1.86934 9.76873L6.1426 5.56295Z", "fill", "#181F33", "fill-rule", "evenodd"], [1, "page-size-dropdown", 3, "onChange", "data", "selectedItem", "width", "height", "searchEnabled", "dropdownListHeight"], [4, "ngFor", "ngForOf"], ["class", "page page-jumping-enabled", 3, "ngClass", "click", 4, "ngIf"], ["class", "page-seperator", 4, "ngIf"], [1, "page", "page-jumping-enabled", 3, "click", "ngClass"], [1, "page-seperator"], [1, "dot", 3, "ngStyle"], [1, "dot"]], template: function TableComponent_Template(rf, ctx) { if (rf & 1) {
875
+ } }, inputs: { tableConfig: [1, "tableConfig"], subTableconfig: [1, "subTableconfig"], tableDataLoading: [1, "tableDataLoading"], expandedIndex: [1, "expandedIndex"], tableData: [1, "tableData"], subTableData: [1, "subTableData"], subTableDataLoading: [1, "subTableDataLoading"], currentSort: [1, "currentSort"] }, outputs: { filtersUpdated: "filtersUpdated", pageSelected: "pageSelected", pageSizeChanged: "pageSizeChanged", sortChange: "sortChange", headerAction: "headerAction" }, features: [i0.ɵɵNgOnChangesFeature], decls: 9, vars: 15, consts: [["table", ""], ["filter", ""], ["colHeaderRef", ""], ["plainText", ""], ["id", "main-container", 3, "ngStyle"], [3, "containerStyles", "filtersData", "filtersApplied", 4, "ngIf"], ["id", "table-container", 3, "ngClass"], ["id", "col-headers-container", 3, "ngStyle"], ["class", "col-header", 3, "ngStyle", "click", 4, "ngFor", "ngForOf"], ["id", "data-container"], ["class", "row-wrapper", 4, "ngFor", "ngForOf"], ["id", "pagination-content-container"], [3, "filtersApplied", "containerStyles", "filtersData"], [1, "col-header", 3, "click", "ngStyle"], ["class", "col-header-text", 4, "ngIf"], ["class", "filter-icon", 3, "click", 4, "ngIf"], ["class", "checkbox-icon", 3, "click", 4, "ngIf"], ["appSortIcons", "", "class", "sort-icon", 3, "column", "activeSort", "activeSorts", "multiColumnSort", "sortChange", 4, "ngIf"], [4, "ngIf"], [1, "col-header-text"], [1, "filter-icon", 3, "click"], ["id", "filter-active", 4, "ngIf"], ["fill", "none", "height", "10", "viewBox", "0 0 13 10", "width", "13", "xmlns", "http://www.w3.org/2000/svg"], ["clip-rule", "evenodd", "d", "M4.97546 10H7.64213V8H4.97546V10ZM0.308472 0V2H12.3085V0H0.308472ZM2.30847 6H10.3085V4H2.30847V6Z", "fill", "#181F33", "fill-rule", "evenodd"], ["id", "filter-active"], [1, "checkbox-icon", 3, "click"], [3, "checked"], ["appSortIcons", "", 1, "sort-icon", 3, "sortChange", "column", "activeSort", "activeSorts", "multiColumnSort"], ["customTableCell", "", 3, "customComponent", "data"], [1, "row-wrapper"], [1, "t-row", 3, "click", "ngClass", "ngStyle"], ["class", "t-col-container", 3, "ngStyle", "ngClass", "click", 4, "ngFor", "ngForOf"], ["class", "sub-row", 4, "ngIf"], [1, "t-col-container", 3, "click", "ngStyle", "ngClass"], [1, "t-col", 3, "ngStyle"], ["class", "t-col-text", 3, "ngStyle", "ngClass", 4, "ngIf"], [3, "cellData", "config", "ngClass", "actionClick", 4, "ngIf"], [1, "t-col-text", 3, "ngStyle", "ngClass"], [4, "ngIf", "ngIfElse"], [3, "innerHTML"], [3, "actionClick", "cellData", "config", "ngClass"], [1, "sub-row"], [3, "ngStyle"], [3, "config", "tableData"], ["id", "pagination-container"], ["id", "pagination-text"], [1, "page-size-selector"], ["id", "pages-container"], [1, "page", 3, "click"], ["fill", "none", "height", "10", "viewBox", "0 0 7 10", "width", "7", "xmlns", "http://www.w3.org/2000/svg"], ["clip-rule", "evenodd", "d", "M0.857405 5.56295C0.855794 5.56139 0.854188 5.55982 0.852588 5.55824C0.695955 5.40408 0.617641 5.20203 0.617647 4.99998C0.617641 4.79793 0.695955 4.59588 0.852588 4.44172C0.854188 4.44014 0.855794 4.43858 0.857404 4.43702L5.13066 0.231231C5.44392 -0.0770771 5.9518 -0.0770771 6.26506 0.231231C6.57831 0.53954 6.57831 1.03941 6.26506 1.34772L2.5542 4.99998L6.26506 8.65225C6.57831 8.96055 6.57831 9.46042 6.26506 9.76873C5.9518 10.077 5.44392 10.077 5.13066 9.76873L0.857405 5.56295Z", "fill", "#181F33", "fill-rule", "evenodd"], ["clip-rule", "evenodd", "d", "M6.1426 5.56295C6.14421 5.56139 6.14581 5.55982 6.14741 5.55824C6.30405 5.40408 6.38236 5.20203 6.38236 4.99998C6.38236 4.79793 6.30405 4.59588 6.14741 4.44172C6.14581 4.44014 6.14421 4.43858 6.1426 4.43702L1.86934 0.231231C1.55608 -0.0770771 1.0482 -0.0770771 0.734942 0.231231C0.421688 0.53954 0.421688 1.03941 0.734942 1.34772L4.4458 4.99998L0.734941 8.65225C0.421686 8.96055 0.421686 9.46042 0.734941 9.76873C1.0482 10.077 1.55608 10.077 1.86934 9.76873L6.1426 5.56295Z", "fill", "#181F33", "fill-rule", "evenodd"], [1, "page-size-dropdown", 3, "onChange", "data", "selectedItem", "width", "height", "searchEnabled", "dropdownListHeight"], [4, "ngFor", "ngForOf"], ["class", "page page-jumping-enabled", 3, "ngClass", "click", 4, "ngIf"], ["class", "page-seperator", 4, "ngIf"], [1, "page", "page-jumping-enabled", 3, "click", "ngClass"], [1, "page-seperator"], [1, "dot", 3, "ngStyle"], [1, "dot"]], template: function TableComponent_Template(rf, ctx) { if (rf & 1) {
876
876
  i0.ɵɵelementStart(0, "div", 4);
877
877
  i0.ɵɵtemplate(1, TableComponent_mis_table_filter_1_Template, 2, 2, "mis-table-filter", 5);
878
878
  i0.ɵɵelementStart(2, "div", 6, 0)(4, "div", 7);
@@ -881,9 +881,8 @@ export class TableComponent {
881
881
  i0.ɵɵelementStart(6, "div", 9);
882
882
  i0.ɵɵtemplate(7, TableComponent_div_7_Template, 4, 11, "div", 10);
883
883
  i0.ɵɵelementEnd()();
884
- i0.ɵɵelementStart(8, "div", 11);
885
- i0.ɵɵtemplate(9, TableComponent_Conditional_9_Template, 12, 9, "div", 12);
886
- i0.ɵɵelementEnd()();
884
+ i0.ɵɵtemplate(8, TableComponent_Conditional_8_Template, 13, 9, "div", 11);
885
+ i0.ɵɵelementEnd();
887
886
  } if (rf & 2) {
888
887
  let tmp_5_0;
889
888
  i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction3(7, _c3, ctx.getContainerHeight(), ctx.getContainerWidth(), ctx.tableConfig().canScrollHorizontally ? "auto" : "unset"));
@@ -897,13 +896,13 @@ export class TableComponent {
897
896
  i0.ɵɵproperty("ngForOf", (tmp_5_0 = ctx.tableConfig()) == null ? null : tmp_5_0.colHeaderConfig);
898
897
  i0.ɵɵadvance(2);
899
898
  i0.ɵɵproperty("ngForOf", ctx.tableData());
900
- i0.ɵɵadvance(2);
901
- i0.ɵɵconditional(ctx.shouldShowPagination() ? 9 : -1);
899
+ i0.ɵɵadvance();
900
+ i0.ɵɵconditional(ctx.shouldShowPagination() ? 8 : -1);
902
901
  } }, styles: ["#main-container[_ngcontent-%COMP%]{font-family:Lato,sans-serif;position:relative}.no-scrollbar[_ngcontent-%COMP%]::-webkit-scrollbar{width:0}.scrollbar[_ngcontent-%COMP%]::-webkit-scrollbar{width:8px;height:8px;border-radius:15px}.scrollbar[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:var(--text-tertiary, #929DAB);border-radius:15px}#table-container[_ngcontent-%COMP%]{height:inherit;overflow-y:auto}.scroll-horizontally[_ngcontent-%COMP%]{height:inherit;width:fit-content;overflow-y:unset!important;overflow-x:visible}#col-headers-container[_ngcontent-%COMP%]{display:flex;align-items:center;position:sticky;background-color:var(--bg-primary, #FFFFFF);width:100%;z-index:1;min-height:44px;border-bottom:1px solid var(--border-primary, #E0E0E0);top:0;left:0;right:0}.col-header[_ngcontent-%COMP%]{padding:0 16px;display:flex;align-items:center;height:100%}.col-header-text[_ngcontent-%COMP%]{font-style:normal;font-weight:700;line-height:20px;display:flex;align-items:center;letter-spacing:.2px;margin:0}.sort-icon[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center}.filter-icon[_ngcontent-%COMP%]{margin-left:8px;padding:0 8px;position:relative;cursor:pointer}#filter-active[_ngcontent-%COMP%]{height:8px;width:8px;background:var(--brand-accent, #10ADAE);border-radius:50%;position:absolute;top:4px;right:4px}.sub-row[_ngcontent-%COMP%]{height:auto;border-bottom:none}.loader[_ngcontent-%COMP%] .mat-progress-spinner circle, .mat-spinner[_ngcontent-%COMP%] circle[_ngcontent-%COMP%]{stroke:var(--brand-primary, #0937B2)}.t-row[_ngcontent-%COMP%]{display:flex;min-height:44px;background-color:var(--bg-primary, #FFFFFF);width:100%;border-bottom:1px solid var(--border-primary, #E0E0E0)}.t-row[_ngcontent-%COMP%]:hover{background-color:var(--brand-primary-hover, #F0F3FA)}.active-row[_ngcontent-%COMP%]{background-color:var(--brand-primary-active, #DAE1F3);border-bottom:1px solid rgba(0,0,0,.12)!important}.t-col-container[_ngcontent-%COMP%]{padding:0 16px;overflow-wrap:anywhere;min-width:0}.t-row-hover[_ngcontent-%COMP%]:hover{background-color:#0000}.t-col-container-hover[_ngcontent-%COMP%]:hover{background-color:var(--brand-primary-active, #DAE1F3)}.t-col-container-hover[_ngcontent-%COMP%]:first-child{border-left:1px solid var(--border-primary, #E0E0E0)}.t-col-container-hover[_ngcontent-%COMP%]{border-right:1px solid var(--border-primary, #E0E0E0)}.t-col[_ngcontent-%COMP%]{display:flex;align-items:center;height:100%}.t-col-text[_ngcontent-%COMP%]{font-style:normal;font-weight:400;font-size:14px;line-height:20px;display:flex;align-items:center;letter-spacing:.2px;margin:0}.text-ellipsis[_ngcontent-%COMP%]{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}#pagination-container[_ngcontent-%COMP%], #pagination-content-container[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;align-items:center;height:56px}#pagination-text[_ngcontent-%COMP%]{font-style:normal;font-weight:400;font-size:12px;line-height:18px;letter-spacing:.4px;color:var(--text-secondary, #6A737D);margin:0 16px 0 0}#pages-container[_ngcontent-%COMP%]{display:flex;margin-right:32px}.page[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;box-sizing:border-box;border-radius:4px;width:32px;height:32px;font-size:14px;line-height:20px;letter-spacing:.2px;color:var(--text-secondary, #6A737D);margin-right:8px;cursor:pointer}.page.page-jumping-enabled[_ngcontent-%COMP%]{border:1px solid var(--text-secondary, #6A737D)}.page-seperator[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;width:32px;height:32px;margin-right:8px}.dot[_ngcontent-%COMP%]{height:3px;width:3px;border-radius:50%;background:var(--text-secondary, #6A737D)}.page-active[_ngcontent-%COMP%]{color:var(--brand-primary, #0937B2);border:1px solid var(--brand-primary, #0937B2)}.sort-icon[_ngcontent-%COMP%]{display:inline-flex;align-items:center;margin-left:4px;cursor:pointer}.sort-icon[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:16px;height:16px;transition:opacity .2s ease}.sort-icon[_ngcontent-%COMP%] img[_ngcontent-%COMP%]:hover{opacity:.8}.disabled-row[_ngcontent-%COMP%] .t-col-container[_ngcontent-%COMP%]{opacity:.4;pointer-events:none}.disabled-row[_ngcontent-%COMP%] .t-col-container[_ngcontent-%COMP%]:has(mis-actions-cell){opacity:1;pointer-events:auto}.row[_ngcontent-%COMP%]{transition:background-color .2s}.row[_ngcontent-%COMP%]:hover:not(.disabled-row), .row.selected[_ngcontent-%COMP%]:not(.disabled-row){background-color:var(--brand-primary-active, #DAE1F3)}.disabled-row[_ngcontent-%COMP%] .t-col-container[_ngcontent-%COMP%]{pointer-events:none;opacity:.4}.disabled-row[_ngcontent-%COMP%] .t-col-container[_ngcontent-%COMP%]:has(mis-actions-cell){pointer-events:auto!important;opacity:1!important;color:inherit!important}mis-actions-cell.disable-actions[_ngcontent-%COMP%]{pointer-events:none;opacity:.4;filter:grayscale(.5)}.page-nav-inactive[_ngcontent-%COMP%]{pointer-events:none;opacity:.5;cursor:default}.page-size-selector[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;margin-right:16px}.collapsed-cell[_ngcontent-%COMP%]{overflow:hidden!important;white-space:nowrap!important;text-overflow:ellipsis!important;display:block}@supports (-webkit-line-clamp: 2){.collapsed-cell[_ngcontent-%COMP%]{display:-webkit-box!important;-webkit-box-orient:vertical!important;-webkit-line-clamp:var(--collapsed-lines, 2);white-space:normal!important}}"] }); }
903
902
  }
904
903
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TableComponent, [{
905
904
  type: Component,
906
- args: [{ selector: "mis-table", template: "<div\n [ngStyle]=\"{\n height: getContainerHeight(),\n width: getContainerWidth(),\n 'overflow-x': tableConfig().canScrollHorizontally ? 'auto' : 'unset'\n }\"\n id=\"main-container\"\n>\n <mis-table-filter\n #filter\n (filtersApplied)=\"updateAppliedFilters($event)\"\n *ngIf=\"showFilter()\"\n [containerStyles]=\"filterContainerStyles()\"\n [filtersData]=\"filterData()\"\n ></mis-table-filter>\n <div\n #table\n id=\"table-container\"\n [ngClass]=\"{ 'no-scrollbar': expandedIndex() < 0, scrollbar: !(expandedIndex() < 0), 'scroll-horizontally': tableConfig().canScrollHorizontally }\"\n >\n <div\n [ngStyle]=\"getColHeadersRowStyles()\"\n id=\"col-headers-container\"\n >\n <div\n #colHeaderRef\n (click)=\"colHeader?.action ? colHeader?.action(colHeader) : null\"\n *ngFor=\"let colHeader of tableConfig()?.colHeaderConfig\"\n class=\"col-header\"\n [ngStyle]=\"{\n width: colHeader?.style?.width || '',\n cursor: colHeader.action ? 'pointer' : 'default',\n 'justify-content': colHeader?.style?.justifyContent\n ? colHeader?.style?.justifyContent\n : colHeader.type === 'number'\n ? 'flex-end'\n : 'space-between'\n }\"\n >\n <p *ngIf=\"colHeader?.type !== 'custom' && colHeader?.type !== 'checkbox'\" class=\"col-header-text\">\n {{ colHeader?.data || \" \" }}\n </p>\n <span\n (click)=\"filterData.set(colHeader.filters); toggleFilter(colHeader.data); $event.stopPropagation()\"\n *ngIf=\"colHeader?.type !== 'custom' && colHeader?.filters && colHeader?.filters?.length > 0\"\n class=\"filter-icon\"\n >\n <span *ngIf=\"appliedFilters()[colHeader.data]?.length > 0\" id=\"filter-active\"></span>\n <svg fill=\"none\" height=\"10\" viewBox=\"0 0 13 10\" width=\"13\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n clip-rule=\"evenodd\"\n d=\"M4.97546 10H7.64213V8H4.97546V10ZM0.308472 0V2H12.3085V0H0.308472ZM2.30847 6H10.3085V4H2.30847V6Z\"\n fill=\"#181F33\"\n fill-rule=\"evenodd\"\n />\n </svg>\n </span>\n <span\n (click)=\"toggleCheckbox(); $event.stopPropagation()\"\n *ngIf=\"colHeader?.type === 'checkbox'\"\n class=\"checkbox-icon\"\n >\n <mis-checkbox [checked]=\"selectAllCheckbox()\"></mis-checkbox>\n </span>\n <span *ngIf=\"colHeader?.isSortable && !colHeader?.filters\" appSortIcons\n [column]=\"colHeader\"\n [activeSort]=\"currentSort()\"\n [activeSorts]=\"multiColumnSort()\"\n [multiColumnSort]=\"tableConfig().multiColumnSort\"\n (sortChange)=\"onSortChange($event)\"\n class=\"sort-icon\">\n </span>\n <ng-template *ngIf=\"colHeader?.type === 'custom'\" customTableCell [customComponent]=\"colHeader?.componentRef\" [data]=\"colHeader.data\"></ng-template>\n </div>\n </div>\n \n <div id=\"data-container\">\n <div class=\"row-wrapper\" *ngFor=\"let row of tableData(); let i = index; let rowIndex = index\">\n <div\n class=\"t-row\"\n [ngClass]=\"{ 't-row-hover': tableConfig().cellHover, 'active-row': activeRowIndex().includes(i) }\"\n [ngStyle]=\"{ 'min-height': tableConfig()?.rowConfig?.height ? tableConfig().rowConfig.height : '44px' }\"\n (click)=\"selectRow(i)\"\n [class.disabled-row]=\"isRowDisabled(row)\"\n >\n <div\n (click)=\"tableConfig()?.colConfig[colIndex]?.action && tableConfig()?.colConfig[colIndex]?.actionType !== 'checkbox' ? tableConfig()?.colConfig[colIndex]?.action(col) : null\"\n *ngFor=\"let col of row; let colIndex = index\"\n [ngStyle]=\"{\n width: tableConfig()?.colConfig[colIndex]?.style?.width || tableConfig()?.colHeaderConfig[colIndex]?.style?.width || ''\n }\"\n class=\"t-col-container\"\n [ngClass]=\"{ 't-col-container-hover': tableConfig().cellHover }\"\n >\n <div\n class=\"t-col\"\n [style]=\"tableConfig().colConfig[colIndex]?.style\"\n [ngStyle]=\"{\n width: '100%',\n cursor: tableConfig().colConfig[colIndex]?.action ? 'pointer' : 'default',\n 'justify-content': tableConfig().colConfig[colIndex]?.style?.justifyContent\n ? tableConfig().colConfig[colIndex]?.style?.justifyContent\n : tableConfig().colConfig[colIndex]?.type === 'number'\n ? 'flex-end'\n : 'space-between'\n }\"\n >\n <div\n *ngIf=\"tableConfig().colConfig[colIndex]?.type !== 'custom' && tableConfig().colConfig[colIndex]?.type !== 'actions'\"\n [ngStyle]=\"{\n color: tableConfig()?.colConfig[colIndex]?.style?.color || '',\n '--collapsed-lines': previewLines() || 3\n }\"\n [ngClass]=\"{\n 'collapsed-cell': collapseColIndex() == colIndex && expandedMap()[rowIndex]\n }\"\n class=\"t-col-text\"\n >\n <!-- Render as HTML -->\n <ng-container *ngIf=\"tableConfig().colConfig[colIndex]?.type === 'html'; else plainText\">\n <span [innerHTML]=\"col\"></span>\n </ng-container>\n \n <!-- Render as plain text -->\n <ng-template #plainText>\n <span>{{ col }}</span>\n </ng-template>\n </div>\n \n <ng-template\n *ngIf=\"tableConfig().colConfig[colIndex]?.type === 'custom'\"\n [customComponent]=\"tableConfig().colConfig[colIndex].componentRef\"\n [data]=\"col\"\n customTableCell\n ></ng-template>\n <mis-actions-cell\n *ngIf=\"tableConfig().colConfig[colIndex]?.type === 'actions'\"\n [cellData]=\"col\"\n [config]=\"tableConfig().colConfig[colIndex]\"\n (actionClick)=\"onActionClick($event, rowIndex)\"\n [ngClass]=\"{\n 'disable-actions': (tableConfig().colConfig[colIndex]?.actionType === 'checkbox' || tableConfig().colConfig[colIndex]?.actionType === 'row-collapse') && isRowDisabled(row)\n }\"\n ></mis-actions-cell>\n\n </div>\n </div>\n </div>\n <div *ngIf=\"tableConfig()?.canExpand && expandedIndex() === i\" class=\"sub-row\">\n <ng-container *ngIf=\"subTableDataLoading()\">\n <div [ngStyle]=\"{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n padding: '16px'\n }\">\n Loading...\n </div>\n </ng-container>\n \n <ng-container *ngIf=\"!subTableDataLoading() && subTableData().length === 0\">\n <div [ngStyle]=\"{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n padding: '16px'\n }\">\n No Data Available...\n </div>\n </ng-container>\n \n <ng-container *ngIf=\"!subTableDataLoading() && subTableData().length > 0\">\n <sub-table [config]=\"subTableconfig()\" [tableData]=\"subTableData()\"></sub-table>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n <div id=\"pagination-content-container\">\n @if(shouldShowPagination()){\n <div \n id=\"pagination-container\"\n >\n <p id=\"pagination-text\">\n Showing\n {{ (selectedPage() - 1) * tableConfig().paginationConfig.rowsPerPage + 1 }}-{{\n (selectedPage() - 1) * tableConfig().paginationConfig.rowsPerPage + tableLength()\n }}\n of {{ tableConfig().paginationConfig.totalNoOfRows }} items\n </p>\n @if(showPageSizeDropdown()) {\n <div class=\"page-size-selector\">\n <mis-dropdown\n [data]=\"pageSizeOptions()\"\n [selectedItem]=\"selectedPageSizeOption()\"\n [width]=\"'90px'\"\n [height]=\"'32px'\"\n [searchEnabled]=\"false\"\n [dropdownListHeight]=\"'100px'\"\n (onChange)=\"onPageSizeChange($event)\"\n class=\"page-size-dropdown\"\n ></mis-dropdown>\n </div>\n }\n <div id=\"pages-container\">\n <span (click)=\"selectedPage() > 1 && updateSelectedPage(selectedPage() - 1)\" class=\"page\" [class.page-nav-inactive]=\"selectedPage() === 1\">\n <svg fill=\"none\" height=\"10\" viewBox=\"0 0 7 10\" width=\"7\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n clip-rule=\"evenodd\"\n d=\"M0.857405 5.56295C0.855794 5.56139 0.854188 5.55982 0.852588 5.55824C0.695955 5.40408 0.617641 5.20203 0.617647 4.99998C0.617641 4.79793 0.695955 4.59588 0.852588 4.44172C0.854188 4.44014 0.855794 4.43858 0.857404 4.43702L5.13066 0.231231C5.44392 -0.0770771 5.9518 -0.0770771 6.26506 0.231231C6.57831 0.53954 6.57831 1.03941 6.26506 1.34772L2.5542 4.99998L6.26506 8.65225C6.57831 8.96055 6.57831 9.46042 6.26506 9.76873C5.9518 10.077 5.44392 10.077 5.13066 9.76873L0.857405 5.56295Z\"\n fill=\"#181F33\"\n fill-rule=\"evenodd\"\n />\n </svg>\n </span>\n <!-- Page numbers (only show if disablePageJumping is false) -->\n <ng-container *ngIf=\"!tableConfig().paginationConfig?.disablePageJumping\">\n <div *ngFor=\"let pageNumber of pages()\">\n <span\n (click)=\"updateSelectedPage(pageNumber)\"\n *ngIf=\"pageNumber != 0\"\n [ngClass]=\"{ 'page-active': pageNumber === selectedPage() }\"\n class=\"page page-jumping-enabled\"\n >{{ pageNumber }}</span>\n <span *ngIf=\"pageNumber == 0\" class=\"page-seperator\">\n <div [ngStyle]=\"{ display: 'flex' }\">\n <span class=\"dot\" [ngStyle]=\"{ 'margin-right': '4px' }\"></span>\n <span class=\"dot\" [ngStyle]=\"{ 'margin-right': '4px' }\"></span>\n <span class=\"dot\"></span>\n </div> \n </span>\n </div>\n </ng-container>\n \n <span [class.page-nav-inactive]=\"selectedPage() === tableConfig().paginationConfig?.noOfPages\"\n (click)=\"selectedPage() < tableConfig().paginationConfig?.noOfPages && updateSelectedPage(selectedPage() + 1)\" class=\"page\">\n <svg fill=\"none\" height=\"10\" viewBox=\"0 0 7 10\" width=\"7\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n clip-rule=\"evenodd\"\n d=\"M6.1426 5.56295C6.14421 5.56139 6.14581 5.55982 6.14741 5.55824C6.30405 5.40408 6.38236 5.20203 6.38236 4.99998C6.38236 4.79793 6.30405 4.59588 6.14741 4.44172C6.14581 4.44014 6.14421 4.43858 6.1426 4.43702L1.86934 0.231231C1.55608 -0.0770771 1.0482 -0.0770771 0.734942 0.231231C0.421688 0.53954 0.421688 1.03941 0.734942 1.34772L4.4458 4.99998L0.734941 8.65225C0.421686 8.96055 0.421686 9.46042 0.734941 9.76873C1.0482 10.077 1.55608 10.077 1.86934 9.76873L6.1426 5.56295Z\"\n fill=\"#181F33\"\n fill-rule=\"evenodd\"\n />\n </svg>\n </span>\n </div>\n </div>\n }\n </div>\n</div>\n", styles: ["#main-container{font-family:Lato,sans-serif;position:relative}.no-scrollbar::-webkit-scrollbar{width:0}.scrollbar::-webkit-scrollbar{width:8px;height:8px;border-radius:15px}.scrollbar::-webkit-scrollbar-thumb{background:var(--text-tertiary, #929DAB);border-radius:15px}#table-container{height:inherit;overflow-y:auto}.scroll-horizontally{height:inherit;width:fit-content;overflow-y:unset!important;overflow-x:visible}#col-headers-container{display:flex;align-items:center;position:sticky;background-color:var(--bg-primary, #FFFFFF);width:100%;z-index:1;min-height:44px;border-bottom:1px solid var(--border-primary, #E0E0E0);top:0;left:0;right:0}.col-header{padding:0 16px;display:flex;align-items:center;height:100%}.col-header-text{font-style:normal;font-weight:700;line-height:20px;display:flex;align-items:center;letter-spacing:.2px;margin:0}.sort-icon{display:flex;justify-content:center;align-items:center}.filter-icon{margin-left:8px;padding:0 8px;position:relative;cursor:pointer}#filter-active{height:8px;width:8px;background:var(--brand-accent, #10ADAE);border-radius:50%;position:absolute;top:4px;right:4px}.sub-row{height:auto;border-bottom:none}.loader ::ng-deep .mat-progress-spinner circle,.mat-spinner circle{stroke:var(--brand-primary, #0937B2)}.t-row{display:flex;min-height:44px;background-color:var(--bg-primary, #FFFFFF);width:100%;border-bottom:1px solid var(--border-primary, #E0E0E0)}.t-row:hover{background-color:var(--brand-primary-hover, #F0F3FA)}.active-row{background-color:var(--brand-primary-active, #DAE1F3);border-bottom:1px solid rgba(0,0,0,.12)!important}.t-col-container{padding:0 16px;overflow-wrap:anywhere;min-width:0}.t-row-hover:hover{background-color:#0000}.t-col-container-hover:hover{background-color:var(--brand-primary-active, #DAE1F3)}.t-col-container-hover:first-child{border-left:1px solid var(--border-primary, #E0E0E0)}.t-col-container-hover{border-right:1px solid var(--border-primary, #E0E0E0)}.t-col{display:flex;align-items:center;height:100%}.t-col-text{font-style:normal;font-weight:400;font-size:14px;line-height:20px;display:flex;align-items:center;letter-spacing:.2px;margin:0}.text-ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}#pagination-container,#pagination-content-container{display:flex;justify-content:flex-end;align-items:center;height:56px}#pagination-text{font-style:normal;font-weight:400;font-size:12px;line-height:18px;letter-spacing:.4px;color:var(--text-secondary, #6A737D);margin:0 16px 0 0}#pages-container{display:flex;margin-right:32px}.page{display:flex;justify-content:center;align-items:center;box-sizing:border-box;border-radius:4px;width:32px;height:32px;font-size:14px;line-height:20px;letter-spacing:.2px;color:var(--text-secondary, #6A737D);margin-right:8px;cursor:pointer}.page.page-jumping-enabled{border:1px solid var(--text-secondary, #6A737D)}.page-seperator{display:flex;justify-content:center;align-items:center;width:32px;height:32px;margin-right:8px}.dot{height:3px;width:3px;border-radius:50%;background:var(--text-secondary, #6A737D)}.page-active{color:var(--brand-primary, #0937B2);border:1px solid var(--brand-primary, #0937B2)}.sort-icon{display:inline-flex;align-items:center;margin-left:4px;cursor:pointer}.sort-icon img{width:16px;height:16px;transition:opacity .2s ease}.sort-icon img:hover{opacity:.8}.disabled-row .t-col-container{opacity:.4;pointer-events:none}.disabled-row .t-col-container:has(mis-actions-cell){opacity:1;pointer-events:auto}.row{transition:background-color .2s}.row:hover:not(.disabled-row),.row.selected:not(.disabled-row){background-color:var(--brand-primary-active, #DAE1F3)}.disabled-row .t-col-container{pointer-events:none;opacity:.4}.disabled-row .t-col-container:has(mis-actions-cell){pointer-events:auto!important;opacity:1!important;color:inherit!important}mis-actions-cell.disable-actions{pointer-events:none;opacity:.4;filter:grayscale(.5)}.page-nav-inactive{pointer-events:none;opacity:.5;cursor:default}.page-size-selector{display:flex;align-items:center;gap:8px;margin-right:16px}.collapsed-cell{overflow:hidden!important;white-space:nowrap!important;text-overflow:ellipsis!important;display:block}@supports (-webkit-line-clamp: 2){.collapsed-cell{display:-webkit-box!important;-webkit-box-orient:vertical!important;-webkit-line-clamp:var(--collapsed-lines, 2);white-space:normal!important}}\n"] }]
905
+ args: [{ selector: "mis-table", template: "<div\n [ngStyle]=\"{\n height: getContainerHeight(),\n width: getContainerWidth(),\n 'overflow-x': tableConfig().canScrollHorizontally ? 'auto' : 'unset'\n }\"\n id=\"main-container\"\n>\n <mis-table-filter\n #filter\n (filtersApplied)=\"updateAppliedFilters($event)\"\n *ngIf=\"showFilter()\"\n [containerStyles]=\"filterContainerStyles()\"\n [filtersData]=\"filterData()\"\n ></mis-table-filter>\n <div\n #table\n id=\"table-container\"\n [ngClass]=\"{ 'no-scrollbar': expandedIndex() < 0, scrollbar: !(expandedIndex() < 0), 'scroll-horizontally': tableConfig().canScrollHorizontally }\"\n >\n <div\n [ngStyle]=\"getColHeadersRowStyles()\"\n id=\"col-headers-container\"\n >\n <div\n #colHeaderRef\n (click)=\"colHeader?.action ? colHeader?.action(colHeader) : null\"\n *ngFor=\"let colHeader of tableConfig()?.colHeaderConfig\"\n class=\"col-header\"\n [ngStyle]=\"{\n width: colHeader?.style?.width || '',\n cursor: colHeader.action ? 'pointer' : 'default',\n 'justify-content': colHeader?.style?.justifyContent\n ? colHeader?.style?.justifyContent\n : colHeader.type === 'number'\n ? 'flex-end'\n : 'space-between'\n }\"\n >\n <p *ngIf=\"colHeader?.type !== 'custom' && colHeader?.type !== 'checkbox'\" class=\"col-header-text\">\n {{ colHeader?.data || \" \" }}\n </p>\n <span\n (click)=\"filterData.set(colHeader.filters); toggleFilter(colHeader.data); $event.stopPropagation()\"\n *ngIf=\"colHeader?.type !== 'custom' && colHeader?.filters && colHeader?.filters?.length > 0\"\n class=\"filter-icon\"\n >\n <span *ngIf=\"appliedFilters()[colHeader.data]?.length > 0\" id=\"filter-active\"></span>\n <svg fill=\"none\" height=\"10\" viewBox=\"0 0 13 10\" width=\"13\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n clip-rule=\"evenodd\"\n d=\"M4.97546 10H7.64213V8H4.97546V10ZM0.308472 0V2H12.3085V0H0.308472ZM2.30847 6H10.3085V4H2.30847V6Z\"\n fill=\"#181F33\"\n fill-rule=\"evenodd\"\n />\n </svg>\n </span>\n <span\n (click)=\"toggleCheckbox(); $event.stopPropagation()\"\n *ngIf=\"colHeader?.type === 'checkbox'\"\n class=\"checkbox-icon\"\n >\n <mis-checkbox [checked]=\"selectAllCheckbox()\"></mis-checkbox>\n </span>\n <span *ngIf=\"colHeader?.isSortable && !colHeader?.filters\" appSortIcons\n [column]=\"colHeader\"\n [activeSort]=\"currentSort()\"\n [activeSorts]=\"multiColumnSort()\"\n [multiColumnSort]=\"tableConfig().multiColumnSort\"\n (sortChange)=\"onSortChange($event)\"\n class=\"sort-icon\">\n </span>\n <ng-template *ngIf=\"colHeader?.type === 'custom'\" customTableCell [customComponent]=\"colHeader?.componentRef\" [data]=\"colHeader.data\"></ng-template>\n </div>\n </div>\n \n <div id=\"data-container\">\n <div class=\"row-wrapper\" *ngFor=\"let row of tableData(); let i = index; let rowIndex = index\">\n <div\n class=\"t-row\"\n [ngClass]=\"{ 't-row-hover': tableConfig().cellHover, 'active-row': activeRowIndex().includes(i) }\"\n [ngStyle]=\"{ 'min-height': tableConfig()?.rowConfig?.height ? tableConfig().rowConfig.height : '44px' }\"\n (click)=\"selectRow(i)\"\n [class.disabled-row]=\"isRowDisabled(row)\"\n >\n <div\n (click)=\"tableConfig()?.colConfig[colIndex]?.action && tableConfig()?.colConfig[colIndex]?.actionType !== 'checkbox' ? tableConfig()?.colConfig[colIndex]?.action(col) : null\"\n *ngFor=\"let col of row; let colIndex = index\"\n [ngStyle]=\"{\n width: tableConfig()?.colConfig[colIndex]?.style?.width || tableConfig()?.colHeaderConfig[colIndex]?.style?.width || ''\n }\"\n class=\"t-col-container\"\n [ngClass]=\"{ 't-col-container-hover': tableConfig().cellHover }\"\n >\n <div\n class=\"t-col\"\n [style]=\"tableConfig().colConfig[colIndex]?.style\"\n [ngStyle]=\"{\n width: '100%',\n cursor: tableConfig().colConfig[colIndex]?.action ? 'pointer' : 'default',\n 'justify-content': tableConfig().colConfig[colIndex]?.style?.justifyContent\n ? tableConfig().colConfig[colIndex]?.style?.justifyContent\n : tableConfig().colConfig[colIndex]?.type === 'number'\n ? 'flex-end'\n : 'space-between'\n }\"\n >\n <div\n *ngIf=\"tableConfig().colConfig[colIndex]?.type !== 'custom' && tableConfig().colConfig[colIndex]?.type !== 'actions'\"\n [ngStyle]=\"{\n color: tableConfig()?.colConfig[colIndex]?.style?.color || '',\n '--collapsed-lines': previewLines() || 3\n }\"\n [ngClass]=\"{\n 'collapsed-cell': collapseColIndex() == colIndex && expandedMap()[rowIndex]\n }\"\n class=\"t-col-text\"\n >\n <!-- Render as HTML -->\n <ng-container *ngIf=\"tableConfig().colConfig[colIndex]?.type === 'html'; else plainText\">\n <span [innerHTML]=\"col\"></span>\n </ng-container>\n \n <!-- Render as plain text -->\n <ng-template #plainText>\n <span>{{ col }}</span>\n </ng-template>\n </div>\n \n <ng-template\n *ngIf=\"tableConfig().colConfig[colIndex]?.type === 'custom'\"\n [customComponent]=\"tableConfig().colConfig[colIndex].componentRef\"\n [data]=\"col\"\n customTableCell\n ></ng-template>\n <mis-actions-cell\n *ngIf=\"tableConfig().colConfig[colIndex]?.type === 'actions'\"\n [cellData]=\"col\"\n [config]=\"tableConfig().colConfig[colIndex]\"\n (actionClick)=\"onActionClick($event, rowIndex)\"\n [ngClass]=\"{\n 'disable-actions': (tableConfig().colConfig[colIndex]?.actionType === 'checkbox' || tableConfig().colConfig[colIndex]?.actionType === 'row-collapse') && isRowDisabled(row)\n }\"\n ></mis-actions-cell>\n\n </div>\n </div>\n </div>\n <div *ngIf=\"tableConfig()?.canExpand && expandedIndex() === i\" class=\"sub-row\">\n <ng-container *ngIf=\"subTableDataLoading()\">\n <div [ngStyle]=\"{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n padding: '16px'\n }\">\n Loading...\n </div>\n </ng-container>\n \n <ng-container *ngIf=\"!subTableDataLoading() && subTableData().length === 0\">\n <div [ngStyle]=\"{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n padding: '16px'\n }\">\n No Data Available...\n </div>\n </ng-container>\n \n <ng-container *ngIf=\"!subTableDataLoading() && subTableData().length > 0\">\n <sub-table [config]=\"subTableconfig()\" [tableData]=\"subTableData()\"></sub-table>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n @if(shouldShowPagination()){\n <div id=\"pagination-content-container\">\n <div \n id=\"pagination-container\"\n >\n <p id=\"pagination-text\">\n Showing\n {{ (selectedPage() - 1) * tableConfig().paginationConfig.rowsPerPage + 1 }}-{{\n (selectedPage() - 1) * tableConfig().paginationConfig.rowsPerPage + tableLength()\n }}\n of {{ tableConfig().paginationConfig.totalNoOfRows }} items\n </p>\n @if(showPageSizeDropdown()) {\n <div class=\"page-size-selector\">\n <mis-dropdown\n [data]=\"pageSizeOptions()\"\n [selectedItem]=\"selectedPageSizeOption()\"\n [width]=\"'90px'\"\n [height]=\"'32px'\"\n [searchEnabled]=\"false\"\n [dropdownListHeight]=\"'100px'\"\n (onChange)=\"onPageSizeChange($event)\"\n class=\"page-size-dropdown\"\n ></mis-dropdown>\n </div>\n }\n <div id=\"pages-container\">\n <span (click)=\"selectedPage() > 1 && updateSelectedPage(selectedPage() - 1)\" class=\"page\" [class.page-nav-inactive]=\"selectedPage() === 1\">\n <svg fill=\"none\" height=\"10\" viewBox=\"0 0 7 10\" width=\"7\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n clip-rule=\"evenodd\"\n d=\"M0.857405 5.56295C0.855794 5.56139 0.854188 5.55982 0.852588 5.55824C0.695955 5.40408 0.617641 5.20203 0.617647 4.99998C0.617641 4.79793 0.695955 4.59588 0.852588 4.44172C0.854188 4.44014 0.855794 4.43858 0.857404 4.43702L5.13066 0.231231C5.44392 -0.0770771 5.9518 -0.0770771 6.26506 0.231231C6.57831 0.53954 6.57831 1.03941 6.26506 1.34772L2.5542 4.99998L6.26506 8.65225C6.57831 8.96055 6.57831 9.46042 6.26506 9.76873C5.9518 10.077 5.44392 10.077 5.13066 9.76873L0.857405 5.56295Z\"\n fill=\"#181F33\"\n fill-rule=\"evenodd\"\n />\n </svg>\n </span>\n <!-- Page numbers (only show if disablePageJumping is false) -->\n <ng-container *ngIf=\"!tableConfig().paginationConfig?.disablePageJumping\">\n <div *ngFor=\"let pageNumber of pages()\">\n <span\n (click)=\"updateSelectedPage(pageNumber)\"\n *ngIf=\"pageNumber != 0\"\n [ngClass]=\"{ 'page-active': pageNumber === selectedPage() }\"\n class=\"page page-jumping-enabled\"\n >{{ pageNumber }}</span>\n <span *ngIf=\"pageNumber == 0\" class=\"page-seperator\">\n <div [ngStyle]=\"{ display: 'flex' }\">\n <span class=\"dot\" [ngStyle]=\"{ 'margin-right': '4px' }\"></span>\n <span class=\"dot\" [ngStyle]=\"{ 'margin-right': '4px' }\"></span>\n <span class=\"dot\"></span>\n </div> \n </span>\n </div>\n </ng-container>\n \n <span [class.page-nav-inactive]=\"selectedPage() === tableConfig().paginationConfig?.noOfPages\"\n (click)=\"selectedPage() < tableConfig().paginationConfig?.noOfPages && updateSelectedPage(selectedPage() + 1)\" class=\"page\">\n <svg fill=\"none\" height=\"10\" viewBox=\"0 0 7 10\" width=\"7\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n clip-rule=\"evenodd\"\n d=\"M6.1426 5.56295C6.14421 5.56139 6.14581 5.55982 6.14741 5.55824C6.30405 5.40408 6.38236 5.20203 6.38236 4.99998C6.38236 4.79793 6.30405 4.59588 6.14741 4.44172C6.14581 4.44014 6.14421 4.43858 6.1426 4.43702L1.86934 0.231231C1.55608 -0.0770771 1.0482 -0.0770771 0.734942 0.231231C0.421688 0.53954 0.421688 1.03941 0.734942 1.34772L4.4458 4.99998L0.734941 8.65225C0.421686 8.96055 0.421686 9.46042 0.734941 9.76873C1.0482 10.077 1.55608 10.077 1.86934 9.76873L6.1426 5.56295Z\"\n fill=\"#181F33\"\n fill-rule=\"evenodd\"\n />\n </svg>\n </span>\n </div>\n </div>\n </div>\n }\n</div>\n", styles: ["#main-container{font-family:Lato,sans-serif;position:relative}.no-scrollbar::-webkit-scrollbar{width:0}.scrollbar::-webkit-scrollbar{width:8px;height:8px;border-radius:15px}.scrollbar::-webkit-scrollbar-thumb{background:var(--text-tertiary, #929DAB);border-radius:15px}#table-container{height:inherit;overflow-y:auto}.scroll-horizontally{height:inherit;width:fit-content;overflow-y:unset!important;overflow-x:visible}#col-headers-container{display:flex;align-items:center;position:sticky;background-color:var(--bg-primary, #FFFFFF);width:100%;z-index:1;min-height:44px;border-bottom:1px solid var(--border-primary, #E0E0E0);top:0;left:0;right:0}.col-header{padding:0 16px;display:flex;align-items:center;height:100%}.col-header-text{font-style:normal;font-weight:700;line-height:20px;display:flex;align-items:center;letter-spacing:.2px;margin:0}.sort-icon{display:flex;justify-content:center;align-items:center}.filter-icon{margin-left:8px;padding:0 8px;position:relative;cursor:pointer}#filter-active{height:8px;width:8px;background:var(--brand-accent, #10ADAE);border-radius:50%;position:absolute;top:4px;right:4px}.sub-row{height:auto;border-bottom:none}.loader ::ng-deep .mat-progress-spinner circle,.mat-spinner circle{stroke:var(--brand-primary, #0937B2)}.t-row{display:flex;min-height:44px;background-color:var(--bg-primary, #FFFFFF);width:100%;border-bottom:1px solid var(--border-primary, #E0E0E0)}.t-row:hover{background-color:var(--brand-primary-hover, #F0F3FA)}.active-row{background-color:var(--brand-primary-active, #DAE1F3);border-bottom:1px solid rgba(0,0,0,.12)!important}.t-col-container{padding:0 16px;overflow-wrap:anywhere;min-width:0}.t-row-hover:hover{background-color:#0000}.t-col-container-hover:hover{background-color:var(--brand-primary-active, #DAE1F3)}.t-col-container-hover:first-child{border-left:1px solid var(--border-primary, #E0E0E0)}.t-col-container-hover{border-right:1px solid var(--border-primary, #E0E0E0)}.t-col{display:flex;align-items:center;height:100%}.t-col-text{font-style:normal;font-weight:400;font-size:14px;line-height:20px;display:flex;align-items:center;letter-spacing:.2px;margin:0}.text-ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}#pagination-container,#pagination-content-container{display:flex;justify-content:flex-end;align-items:center;height:56px}#pagination-text{font-style:normal;font-weight:400;font-size:12px;line-height:18px;letter-spacing:.4px;color:var(--text-secondary, #6A737D);margin:0 16px 0 0}#pages-container{display:flex;margin-right:32px}.page{display:flex;justify-content:center;align-items:center;box-sizing:border-box;border-radius:4px;width:32px;height:32px;font-size:14px;line-height:20px;letter-spacing:.2px;color:var(--text-secondary, #6A737D);margin-right:8px;cursor:pointer}.page.page-jumping-enabled{border:1px solid var(--text-secondary, #6A737D)}.page-seperator{display:flex;justify-content:center;align-items:center;width:32px;height:32px;margin-right:8px}.dot{height:3px;width:3px;border-radius:50%;background:var(--text-secondary, #6A737D)}.page-active{color:var(--brand-primary, #0937B2);border:1px solid var(--brand-primary, #0937B2)}.sort-icon{display:inline-flex;align-items:center;margin-left:4px;cursor:pointer}.sort-icon img{width:16px;height:16px;transition:opacity .2s ease}.sort-icon img:hover{opacity:.8}.disabled-row .t-col-container{opacity:.4;pointer-events:none}.disabled-row .t-col-container:has(mis-actions-cell){opacity:1;pointer-events:auto}.row{transition:background-color .2s}.row:hover:not(.disabled-row),.row.selected:not(.disabled-row){background-color:var(--brand-primary-active, #DAE1F3)}.disabled-row .t-col-container{pointer-events:none;opacity:.4}.disabled-row .t-col-container:has(mis-actions-cell){pointer-events:auto!important;opacity:1!important;color:inherit!important}mis-actions-cell.disable-actions{pointer-events:none;opacity:.4;filter:grayscale(.5)}.page-nav-inactive{pointer-events:none;opacity:.5;cursor:default}.page-size-selector{display:flex;align-items:center;gap:8px;margin-right:16px}.collapsed-cell{overflow:hidden!important;white-space:nowrap!important;text-overflow:ellipsis!important;display:block}@supports (-webkit-line-clamp: 2){.collapsed-cell{display:-webkit-box!important;-webkit-box-orient:vertical!important;-webkit-line-clamp:var(--collapsed-lines, 2);white-space:normal!important}}\n"] }]
907
906
  }], () => [{ type: i0.Renderer2 }], { filter: [{
908
907
  type: ViewChild,
909
908
  args: ["filter"]
@@ -915,4 +914,4 @@ export class TableComponent {
915
914
  args: ["table"]
916
915
  }] }); })();
917
916
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TableComponent, { className: "TableComponent" }); })();
918
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFNVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFFBQVEsRUFJVCxNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDWnJDLCtDQU1DO0lBSkMseU5BQWtCLG1DQUE0QixLQUFDO0lBSWhELGlCQUFtQjs7O0lBRGxCLEFBREEsZ0VBQTJDLG9DQUNmOzs7SUEwQnhCLDZCQUFrRztJQUNoRyxZQUNGO0lBQUEsaUJBQUk7OztJQURGLGNBQ0Y7SUFERSx5RkFDRjs7O0lBTUUsMkJBQXFGOzs7O0lBTHZGLGdDQUlDO0lBSEMsa05BQVMsMkNBQWlDLEVBQUUsc0NBQTRCLHdCQUFFLHdCQUF3QixLQUFDO0lBSW5HLCtFQUE4RTs7SUFDOUUsK0JBQStGO0lBQzdGLDJCQUtFO0lBRU4sQUFERSxpQkFBTSxFQUNEOzs7OztJQVRFLGNBQWtEO0lBQWxELG1IQUFrRDs7OztJQVUzRCxnQ0FJQztJQUhDLGdLQUFTLHVCQUFnQix3QkFBRSx3QkFBd0IsS0FBQztJQUlwRCxtQ0FBNkQ7SUFDL0QsaUJBQU87OztJQURTLGNBQStCO0lBQS9CLG9EQUErQjs7OztJQUUvQyxnQ0FNb0I7SUFEbEIsZ01BQWMsMkJBQW9CLEtBQUM7SUFFckMsaUJBQU87Ozs7SUFITCxBQURBLEFBREEsQUFEQSxxQ0FBb0Isb0NBQ1EseUNBQ0sseURBQ2dCOzs7O0lBSXJELHdGQUFz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a0o7WUFHbEosZUFBb0M7WUFBcEMsc0RBQW9DO1lBTVYsY0FBaUM7WUFBakMsZ0dBQWlDO1lBa0RoQixlQUFnQjtZQUFoQix5Q0FBZ0I7WUFzRzNELGVBb0VDO1lBcEVELHFEQW9FQzs7O2lGRDNOUSxjQUFjO2NBTDFCLFNBQVM7MkJBQ0UsV0FBVzswQ0FzQkEsTUFBTTtrQkFBMUIsU0FBUzttQkFBQyxRQUFRO1lBQ1csVUFBVTtrQkFBdkMsWUFBWTttQkFBQyxjQUFjO1lBaURSLEtBQUs7a0JBQXhCLFNBQVM7bUJBQUMsT0FBTzs7a0ZBcEVQLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBRdWVyeUxpc3QsXG4gIFJlbmRlcmVyMixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbiAgY29tcHV0ZWQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgdW50cmFja2VkXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBGaWx0ZXIsIFRhYmxlRmlsdGVyQ29tcG9uZW50IH0gZnJvbSBcIi4vZmlsdGVyL2ZpbHRlci5jb21wb25lbnRcIjtcbmltcG9ydCB7IFNvcnRTdGF0ZSB9IGZyb20gXCIuL3NvcnQtaWNvbnMuZGlyZWN0aXZlXCI7XG5pbXBvcnQgeyBlZmZlY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRHJvcGRvd25JdGVtIH0gZnJvbSBcIm1pcy1jcnlzdGFsLWRlc2lnbi1zeXN0ZW0vZHJvcGRvd25cIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcIm1pcy10YWJsZVwiLFxuICB0ZW1wbGF0ZVVybDogXCJ0YWJsZS5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcInRhYmxlLmNvbXBvbmVudC5jc3NcIl1cbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG4gIC8vIEluaXRpYWxpemUgd2l0aCAtMSB0byBpbmRpY2F0ZSBubyByb3cgaXMgY29sb3JlZCBhdCB0aGUgYmVnaW5uaW5nXG4gIGFjdGl2ZVJvd0luZGV4ID0gc2lnbmFsPG51bWJlcltdPihbXSk7XG4gIGhhc0NoZWNrYm94QWN0aW9ucyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHNlbGVjdEFsbENoZWNrYm94ID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcblxuICAvLyBGaWx0ZXIgcmVsYXRlZCB2YXJpYWJsZXNcbiAgc2hvd0ZpbHRlciA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIGZpbHRlck5hbWUgPSBzaWduYWw8c3RyaW5nPihcIlwiKTtcbiAgZmlsdGVyRGF0YSA9IHNpZ25hbDxBcnJheTxGaWx0ZXI+PihbXSk7XG4gIGZpbHRlckNvbnRhaW5lclN0eWxlcyA9IHNpZ25hbDxhbnk+KHt9KTtcbiAgYXBwbGllZEZpbHRlcnMgPSBzaWduYWw8eyBba2V5OiBzdHJpbmddOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PiB9Pih7fSk7XG4gIFxuICAvLyBDb252ZXJ0IG91dHB1dHMgdG8gc2lnbmFsLWJhc2VkIG91dHB1dHNcbiAgZmlsdGVyc1VwZGF0ZWQgPSBvdXRwdXQ8e1xuICAgIFtrZXk6IHN0cmluZ106IEFycmF5PHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0+O1xuICB9PigpO1xuXG4gIEBWaWV3Q2hpbGQoXCJmaWx0ZXJcIikgZmlsdGVyOiBUYWJsZUZpbHRlckNvbXBvbmVudCB8IGFueTtcbiAgQFZpZXdDaGlsZHJlbihcImNvbEhlYWRlclJlZlwiKSBjb2xIZWFkZXJzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj4gfCBhbnk7XG5cbiAgLy8gUGFnaW5hdGlvbiByZWxhdGVkIHZhcmlhYmxlc1xuICBwYWdlcyA9IHNpZ25hbDxBcnJheTxudW1iZXI+PihbXSk7XG4gIHRhYmxlTGVuZ3RoID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHNlbGVjdGVkUGFnZSA9IHNpZ25hbDxudW1iZXI+KDEpOyAvLyBJbnRlcm5hbCBzdGF0ZSBmb3Igc2VsZWN0ZWQgcGFnZSAtIHRoaXMgaXMgdGhlIHNvdXJjZSBvZiB0cnV0aFxuICBwcml2YXRlIGlzSW50ZXJuYWxQYWdlVXBkYXRlID0gZmFsc2U7IC8vIEZsYWcgdG8gcHJldmVudCBlZmZlY3QgZnJvbSBvdmVyd3JpdGluZyBkdXJpbmcgdXNlci1pbml0aWF0ZWQgdXBkYXRlc1xuICBcbiAgLyoqXG4gICAqIExFR0FDWSBDT0RFIFdPUktBUk9VTkQ6IFRyYWNrIHVzZXItaW5pdGlhdGVkIHBhZ2Ugc2VsZWN0aW9ucyB0byBwcmV2ZW50IGNvbmZpZyBvdmVyd3JpdGVzLlxuICAgKiBcbiAgICogU29tZSBsZWdhY3kgcGFyZW50IGNvbXBvbmVudHMgZG9uJ3QgdXBkYXRlIHRhYmxlQ29uZmlnLnBhZ2luYXRpb25Db25maWcuc2VsZWN0ZWRQYWdlIHdoZW5cbiAgICogdGhlIHBhZ2UgY2hhbmdlcy4gVGhpcyBjYXVzZXMgdGhlIGVmZmVjdCB0byBvdmVyd3JpdGUgdXNlciBzZWxlY3Rpb25zIHdpdGggc3RhbGUgY29uZmlnIHZhbHVlcy5cbiAgICogXG4gICAqIElERUFMIFNPTFVUSU9OOiBQYXJlbnQgY29tcG9uZW50cyBzaG91bGQgYWx3YXlzIHVwZGF0ZSBjb25maWcuc2VsZWN0ZWRQYWdlIGluIHRoZWlyXG4gICAqIHBhZ2VTZWxlY3RlZCBldmVudCBoYW5kbGVyLiBUaGlzIHdvcmthcm91bmQgcHJvdGVjdHMgdXNlciBhY3Rpb25zIHVudGlsIGxlZ2FjeSBjb2RlXG4gICAqIGNhbiBiZSB1cGRhdGVkLlxuICAgKiBcbiAgICogVE9ETzogUmVtb3ZlIHRoaXMgd29ya2Fyb3VuZCBvbmNlIGFsbCBwYXJlbnQgY29tcG9uZW50cyBwcm9wZXJseSB1cGRhdGUgY29uZmlnLnNlbGVjdGVkUGFnZVxuICAgKi9cbiAgcHJpdmF0ZSB1c2VyU2VsZWN0ZWRQYWdlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgXG4gIHBhZ2VTZWxlY3RlZCA9IG91dHB1dDxudW1iZXI+KCk7XG4gIHBhZ2VTaXplQ2hhbmdlZCA9IG91dHB1dDxudW1iZXI+KCk7XG4gIHBhZ2VTaXplT3B0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLnRhYmxlQ29uZmlnKCk/LnBhZ2luYXRpb25Db25maWc7XG4gICAgaWYgKCFjb25maWc/LnBhZ2VTaXplcyB8fCAhQXJyYXkuaXNBcnJheShjb25maWcucGFnZVNpemVzKSB8fCAhY29uZmlnLnBhZ2VTaXplcz8ubGVuZ3RoKSByZXR1cm4gW107XG4gIFxuICAgIHJldHVybiBjb25maWcucGFnZVNpemVzPy5tYXAob3B0aW9uID0+ICh7XG4gICAgICBsYWJlbDogb3B0aW9uPy50b1N0cmluZygpIHx8ICcnLFxuICAgICAgdmFsdWU6IG9wdGlvbj8udG9TdHJpbmcoKSB8fCAnJyxcbiAgICB9KSkgfHwgW107XG4gIH0pO1xuXG4gIHNob3dQYWdlU2l6ZURyb3Bkb3duID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiAhIXRoaXMudGFibGVDb25maWcoKT8ucGFnaW5hdGlvbkNvbmZpZz8uc2hvd1BhZ2VTaXplRHJvcGRvd247XG4gIH0pO1xuXG4gIHNlbGVjdGVkUGFnZVNpemVPcHRpb24gPSBzaWduYWw8RHJvcGRvd25JdGVtPih7IGxhYmVsOiBcIlwiLCB2YWx1ZTogXCJcIiB9KTtcblxuICAvLyBDb252ZXJ0IGlucHV0cyB0byBzaWduYWwtYmFzZWQgaW5wdXRzXG4gIHRhYmxlQ29uZmlnID0gaW5wdXQ8VGFibGVDb25maWc+KCk7XG4gIHN1YlRhYmxlY29uZmlnID0gaW5wdXQ8VGFibGVDb25maWc+KCk7XG4gIHRhYmxlRGF0YUxvYWRpbmcgPSBpbnB1dDxib29sZWFuPigpO1xuICBleHBhbmRlZEluZGV4ID0gaW5wdXQ8bnVtYmVyPigpO1xuICB0YWJsZURhdGEgPSBpbnB1dDxBcnJheTxBcnJheTxhbnk+Pj4oW10pO1xuICBzdWJUYWJsZURhdGEgPSBpbnB1dDxBcnJheTxBcnJheTxhbnk+Pj4oW10pO1xuICBzdWJUYWJsZURhdGFMb2FkaW5nID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgY3VycmVudFNvcnQgPSBpbnB1dDx7Y29sdW1uOiBzdHJpbmcsIGRpcmVjdGlvbjogJ0FTQycgfCAnREVTQycgfCAnJ30gfCBudWxsPigpO1xuICBAVmlld0NoaWxkKFwidGFibGVcIikgdGFibGU6IEVsZW1lbnRSZWYgfCBhbnk7XG4gIGNvbGxhcHNlQ29sSW5kZXggPSBzaWduYWw8bnVtYmVyPigtMSk7XG4gIHByZXZpZXdMaW5lcyA9IHNpZ25hbDxudW1iZXI+KDApO1xuICByb3dDb2xsYXBzZUNvbmZpZ0luZGV4ID0gc2lnbmFsPG51bWJlcj4oLTEpO1xuICBleHBhbmRlZE1hcCA9IHNpZ25hbDxSZWNvcmQ8c3RyaW5nLCBib29sZWFuPj4oe30pO1xuXG5cbiAgLy8gU29ydGluZyByZWxhdGVkIHByb3BlcnRpZXNcbiAgbXVsdGlDb2x1bW5Tb3J0ID0gc2lnbmFsPFNvcnRTdGF0ZVtdPihbXSk7XG4gIHNvcnRDaGFuZ2UgPSBvdXRwdXQ8U29ydFN0YXRlPigpO1xuICBoZWFkZXJBY3Rpb24gPSBvdXRwdXQ8eyB0eXBlOiBzdHJpbmc7IHBheWxvYWQ/OiBhbnkgfT4oKTtcblxuICBcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgdGhpcy50YWJsZUxlbmd0aC5zZXQodGhpcy50YWJsZURhdGEoKT8ubGVuZ3RoID8/IDApO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy50YWJsZUNvbmZpZygpO1xuICAgICAgICBcbiAgICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcuYWN0aXZlUm93SW5kZXggIT09IG51bGwgJiYgY29uZmlnLmFjdGl2ZVJvd0luZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZVJvd0luZGV4ID0gY29uZmlnLmFjdGl2ZVJvd0luZGV4O1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVSb3dJbmRleC5zZXQoQXJyYXkuaXNBcnJheShhY3RpdmVSb3dJbmRleCkgPyBhY3RpdmVSb3dJbmRleCA6IFthY3RpdmVSb3dJbmRleF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucm93Q29sbGFwc2VDb25maWdJbmRleCgpICE9PSAtMSkge1xuICAgICAgICAgICAgIHRoaXMuYnVpbGRFeHBhbmRlZE1hcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gLS0tIFBBR0lOQVRJT04gUEFHRSBBUlJBWSBMT0dJQyAoTU9WRUQvUkVQTEFDRUQgaW5pdGlhbGl6ZVBhZ2luYXRpb24pIC0tLVxuICAgICAgICBjb25zdCBsZW4gPSBjb25maWc/LnBhZ2luYXRpb25Db25maWc/Lm5vT2ZQYWdlcztcbiAgICAgICAgY29uc3QgZGlzYWJsZVBhZ2VKdW1waW5nID0gY29uZmlnPy5wYWdpbmF0aW9uQ29uZmlnPy5kaXNhYmxlUGFnZUp1bXBpbmc7XG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogTEVHQUNZIENPREUgV09SS0FST1VORDogUHJvdGVjdCB1c2VyLWluaXRpYXRlZCBwYWdlIHNlbGVjdGlvbnMgZnJvbSBjb25maWcgb3ZlcndyaXRlcy5cbiAgICAgICAgICogXG4gICAgICAgICAqIFdoZW4gdXNlcnMgY2xpY2sgcGFnaW5hdGlvbiBhcnJvd3MsIHdlIHVwZGF0ZSBpbnRlcm5hbCBzdGF0ZSBpbW1lZGlhdGVseS4gSG93ZXZlcixcbiAgICAgICAgICogc29tZSBsZWdhY3kgcGFyZW50IGNvbXBvbmVudHMgZG9uJ3QgdXBkYXRlIGNvbmZpZy5zZWxlY3RlZFBhZ2UsIGNhdXNpbmcgdGhlIGVmZmVjdFxuICAgICAgICAgKiB0byBydW4gd2l0aCBzdGFsZSBjb25maWcgdmFsdWVzIHRoYXQgd291bGQgb3ZlcndyaXRlIHRoZSB1c2VyJ3Mgc2VsZWN0aW9uLlxuICAgICAgICAgKiBcbiAgICAgICAgICogU3RyYXRlZ3k6IFRyZWF0IGludGVybmFsIHN0YXRlIGFzIHNvdXJjZSBvZiB0cnV0aCBmb3IgdXNlci1pbml0aWF0ZWQgY2hhbmdlcy5cbiAgICAgICAgICogT25seSBzeW5jIGZyb20gY29uZmlnIHdoZW4gaXQncyBzYWZlIChub3QgYSB1c2VyLXNlbGVjdGVkIHBhZ2UpLlxuICAgICAgICAgKiBcbiAgICAgICAgICogSURFQUw6IFBhcmVudCBzaG91bGQgYWx3YXlzIHVwZGF0ZSBjb25maWcuc2VsZWN0ZWRQYWdlIGluIHBhZ2VTZWxlY3RlZCBoYW5kbGVyLlxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3QgY3VycmVudFNlbGVjdGVkUGFnZSA9IHRoaXMuc2VsZWN0ZWRQYWdlKCk7XG4gICAgICAgIGNvbnN0IGNvbmZpZ1NlbGVjdGVkUGFnZSA9IGNvbmZpZz8ucGFnaW5hdGlvbkNvbmZpZz8uc2VsZWN0ZWRQYWdlO1xuICAgICAgICBjb25zdCBpc1VzZXJTZWxlY3RlZFBhZ2UgPSB0aGlzLnVzZXJTZWxlY3RlZFBhZ2UgIT09IG51bGwgJiYgY3VycmVudFNlbGVjdGVkUGFnZSA9PT0gdGhpcy51c2VyU2VsZWN0ZWRQYWdlO1xuICAgICAgICBcbiAgICAgICAgaWYgKCF0aGlzLmlzSW50ZXJuYWxQYWdlVXBkYXRlKSB7XG4gICAgICAgICAgLy8gT25seSBzeW5jIGZyb20gY29uZmlnIGlmOlxuICAgICAgICAgIC8vIDEuIENvbmZpZyBoYXMgYSBzZWxlY3RlZFBhZ2UgdmFsdWVcbiAgICAgICAgICAvLyAyLiBDdXJyZW50IHBhZ2UgaXMgTk9UIGEgdXNlci1pbml0aWF0ZWQgc2VsZWN0aW9uIChwcm90ZWN0IHVzZXIgYWN0aW9ucylcbiAgICAgICAgICAvLyAzLiBDb25maWcgdmFsdWUgaXMgdmFsaWQgYW5kIGRpZmZlcmVudCBmcm9tIGN1cnJlbnRcbiAgICAgICAgICBpZiAoY29uZmlnU2VsZWN0ZWRQYWdlICE9PSB1bmRlZmluZWQgJiYgY29uZmlnU2VsZWN0ZWRQYWdlICE9PSBudWxsICYmICFpc1VzZXJTZWxlY3RlZFBhZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IG1heFBhZ2VzID0gY29uZmlnPy5wYWdpbmF0aW9uQ29uZmlnPy5ub09mUGFnZXMgfHwgMTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50U2VsZWN0ZWRQYWdlICE9PSBjb25maWdTZWxlY3RlZFBhZ2UgJiYgXG4gICAgICAgICAgICAgICAgY29uZmlnU2VsZWN0ZWRQYWdlID49IDEgJiYgXG4gICAgICAgICAgICAgICAgY29uZmlnU2VsZWN0ZWRQYWdlIDw9IG1heFBhZ2VzKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQYWdlLnNldChjb25maWdTZWxlY3RlZFBhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICAvLyBJZiBjb25maWcgZG9lc24ndCBoYXZlIHNlbGVjdGVkUGFnZSwgb25seSBpbml0aWFsaXplIGludmFsaWQgc3RhdGVcbiAgICAgICAgICAvLyBOZXZlciByZXNldCBhIHZhbGlkIHBhZ2UgbnVtYmVyLCBlc3BlY2lhbGx5IHVzZXItc2VsZWN0ZWQgb25lc1xuICAgICAgICAgIGlmICgoY29uZmlnU2VsZWN0ZWRQYWdlID09PSB1bmRlZmluZWQgfHwgY29uZmlnU2VsZWN0ZWRQYWdlID09PSBudWxsKSAmJiBcbiAgICAgICAgICAgICAgIWlzVXNlclNlbGVjdGVkUGFnZSAmJlxuICAgICAgICAgICAgICAoY3VycmVudFNlbGVjdGVkUGFnZSA9PT0gMCB8fCBjdXJyZW50U2VsZWN0ZWRQYWdlIDwgMSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQYWdlLnNldCgxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gQ2xlYXIgdXNlciBzZWxlY3Rpb24gdHJhY2tpbmcgd2hlbiBjb25maWcgbWF0Y2hlcyB1c2VyJ3Mgc2VsZWN0aW9uXG4gICAgICAgICAgLy8gVGhpcyBpbmRpY2F0ZXMgcGFyZW50IGhhcyB1cGRhdGVkIGNvbmZpZyBjb3JyZWN0bHlcbiAgICAgICAgICBpZiAoY29uZmlnU2VsZWN0ZWRQYWdlID09PSB0aGlzLnVzZXJTZWxlY3RlZFBhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMudXNlclNlbGVjdGVkUGFnZSA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBSZXNldCB0aGUgZmxhZyBhZnRlciBwcm9jZXNzaW5nXG4gICAgICAgIHRoaXMuaXNJbnRlcm5hbFBhZ2VVcGRhdGUgPSBmYWxzZTtcbiAgICAgICAgXG4gICAgICAgIC8vIE9ubHkgcnVuIGlmIHBhZ2luYXRpb24gaXMgY29uZmlndXJlZCBhbmQgcGFnZSBqdW1waW5nIGlzIGVuYWJsZWRcbiAgICAgICAgaWYgKGxlbiAmJiBsZW4gPiAwICYmICFkaXNhYmxlUGFnZUp1bXBpbmcpIHtcbiAgICAgICAgICAgIC8vIFJlYWQgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBzZWxlY3RlZCBwYWdlIGZvciBjYWxjdWxhdGluZyB0aGUgcGFnZXMgYXJyYXkuXG4gICAgICAgICAgICAvLyBTaW5jZSB0aGlzIHJ1bnMgb24gZXZlcnkgY29uZmlnIGNoYW5nZSwgd2UgcmVseSBvbiB0aGUgdmFsdWUgc2V0IFxuICAgICAgICAgICAgLy8gYnkgdXBkYXRlU2VsZWN0ZWRQYWdlKCkgb3Igc3luY2VkIGZyb20gY29uZmlnIGFib3ZlLlxuICAgICAgICAgICAgY29uc3QgcGFnZU51bWJlciA9IHRoaXMuc2VsZWN0ZWRQYWdlKCk7IFxuXG4gICAgICAgICAgICBpZiAobGVuIDw9IDcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdQYWdlcyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1BhZ2VzLnB1c2goaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucGFnZXMuc2V0KG5ld1BhZ2VzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhZ2VOdW1iZXIgLSAyIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlcy5zZXQoWzEsIDIsIDMsIDQsIDAsIGxlbl0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFnZU51bWJlciAtIDIgPiAxICYmIHBhZ2VOdW1iZXIgKyAyIDwgbGVuKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZXMuc2V0KFsxLCAwLCBwYWdlTnVtYmVyIC0gMSwgcGFnZU51bWJlciwgcGFnZU51bWJlciArIDEsIDAsIGxlbl0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFnZU51bWJlciArIDIgPj0gbGVuKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZXMuc2V0KFsxLCAwLCBsZW4gLSAzLCBsZW4gLSAyLCBsZW4gLSAxLCBsZW5dKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gLS0tIEVORCBQQUdJTkFUSU9OIFBBR0UgQVJSQVkgTE9HSUMgLS0tXG5cbiAgICAgICAgXG4gICAgICAgIGlmKGNvbmZpZz8ucGFnaW5hdGlvbkNvbmZpZz8uc2hvd1BhZ2VTaXplRHJvcGRvd24pIHtcbiAgICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5wYWdlU2l6ZU9wdGlvbnMoKTtcbiAgICAgICAgICBjb25zdCByb3dzUGVyUGFnZSA9IHRoaXMudGFibGVDb25maWcoKT8ucGFnaW5hdGlvbkNvbmZpZz8ucm93c1BlclBhZ2U7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9wdGlvbnMpIHx8ICFyb3dzUGVyUGFnZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFBhZ2VTaXplT3B0aW9uLnNldCh7IGxhYmVsOiBcIlwiLCB2YWx1ZTogXCJcIiB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBvcHRpb25zLmZpbmQob3B0ID0+IG9wdD8udmFsdWUgPT09IHJvd3NQZXJQYWdlLnRvU3RyaW5nKCkpO1xuICAgICAgICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFBhZ2VTaXplT3B0aW9uLnNldChzZWxlY3RlZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIElmIGNvbmZpZ3VyZWQgcm93c1BlclBhZ2UgaXMgbm90IGFtb25nIG9wdGlvbnMsIHBpY2sgdGhlIGZsb29yIHZhbHVlIGFuZCBub3RpZnkgcGFyZW50XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBOdW1iZXIocm93c1BlclBhZ2UpO1xuICAgICAgICAgICAgLy9Tb3J0IHRoZSBvcHRpb25zXG4gICAgICAgICAgICBjb25zdCBzb3J0ZWQgPSBvcHRpb25zXG4gICAgICAgICAgICAgIC5tYXAob3B0ID0+ICh7IG9wdCwgbnVtOiBOdW1iZXIob3B0Py52YWx1ZSkgfSkpXG4gICAgICAgICAgICAgIC5maWx0ZXIoKHsgbnVtIH0pID0+IE51bWJlci5pc0Zpbml0ZShudW0pKVxuICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5udW0gLSBiLm51bSk7XG5cbiAgICAgICAgICAgIGxldCBmbG9vck9wdGlvbiA9IHNvcnRlZFswXT8ub3B0O1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHNvcnRlZC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICBpZiAoc29ydGVkW2ldLm51bSA8PSB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICBmbG9vck9wdGlvbiA9IHNvcnRlZFtpXS5vcHQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJUaGUgY29uZmlndXJlZCByb3dzUGVyUGFnZSB3YXMgbm90IG1hdGNoZWQgdG8gYW55IG9mIHRoZSBwYWdlU2l6ZXMgc2VudCBpbiB0aGUgcGFnaW5hdGlvbkNvbmZpZy4gU2VsZWN0aW5nIHRoZSBuZWFyZXN0IGZsb29yIHZhbHVlIGFtb25nIHRoZSBhdmFpbGFibGUgcGFnZVNpemVzLlwiKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQYWdlU2l6ZU9wdGlvbi5zZXQoZmxvb3JPcHRpb24pO1xuICAgICAgICAgICAgdGhpcy5vblBhZ2VTaXplQ2hhbmdlKGZsb29yT3B0aW9uKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIk5vIHBhZ2Ugc2l6ZSBvcHRpb25zIGF2YWlsYWJsZS5cIilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0pO1xuXG4gICAgLy8gUmVhY3RpdmUgaGVpZ2h0IGNhbGN1bGF0aW9uOiBtYWludGFpbnMgZXhhY3Qgb2xkIGJlaGF2aW9yIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgLy8gT2xkIGNvZGU6IGhlaWdodCAtIDU2ICsgXCJweFwiIChmbGF3ZWQgZm9yIHBlcmNlbnRhZ2VzLCBidXQgd2UgbWFpbnRhaW4gaXQpXG4gICAgLy8gTm90ZTogRWZmZWN0IG11c3QgYmUgaW4gY29uc3RydWN0b3IsIG5vdCBsaWZlY3ljbGUgaG9va3MgKE5HMDIwMyBlcnJvciBvdGhlcndpc2UpXG4gICAgLy8gZWZmZWN0KCgpID0+IHtcbiAgICAvLyAgIGNvbnN0IGNvbmZpZyA9IHRoaXMudGFibGVDb25maWcoKTtcbiAgICAvLyAgIGlmICghY29uZmlnPy5wYWdpbmF0aW9uQ29uZmlnIHx8ICF0aGlzLnRhYmxlPy5uYXRpdmVFbGVtZW50KSByZXR1cm47XG4gICAgXG4gICAgLy8gICBjb25zdCBoZWlnaHQgPSBjb25maWcuaGVpZ2h0O1xuICAgIC8vICAgLy8gT2xkIGJlaGF2aW9yOiBoZWlnaHQgLSA1NiArIFwicHhcIiAobWFpbnRhaW5zIHRoZSBmbGF3IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KVxuICAgIC8vICAgY29uc3QgcmVzdWx0ID0gKGhlaWdodCBhcyBhbnkpIC0gNTY7XG4gICAgLy8gICBjb25zdCBmaW5hbEhlaWdodCA9IHJlc3VsdCArIFwicHhcIjtcbiAgICAvLyAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy50YWJsZS5uYXRpdmVFbGVtZW50LCBcImhlaWdodFwiLCBmaW5hbEhlaWdodCk7XG4gICAgLy8gfSk7XG4gIH1cblxuXG4gIC8vIEZ1bmN0aW9uIHRvIGhhbmRsZSByb3cgY2xpY2tcbiAgc2VsZWN0Um93KGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5oYXNDaGVja2JveEFjdGlvbnMoKSkgcmV0dXJuO1xuICAgIHRoaXMuYWN0aXZlUm93SW5kZXguc2V0KFtpbmRleF0pOyAvLyBTZXQgdGhlIHNlbGVjdGVkIGluZGV4IHRvIHRoZSBjbGlja2VkIHJvdydzIGluZGV4XG4gICAgISF0aGlzLnRhYmxlQ29uZmlnKCkucm93Q29uZmlnLmFjdGlvbiAmJiB0aGlzLnRhYmxlQ29uZmlnKCkucm93Q29uZmlnLmFjdGlvbihpbmRleCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmhhc0NoZWNrYm94QWN0aW9ucy5zZXQodGhpcy50YWJsZUNvbmZpZygpLmNvbENvbmZpZz8uc29tZShjb2wgPT4gY29sLnR5cGUgPT09IFwiYWN0aW9uc1wiICYmIGNvbC5hY3Rpb25UeXBlID09PSBcImNoZWNrYm94XCIpKTtcbiAgICB0aGlzLnRhYmxlTGVuZ3RoLnNldCghIXRoaXMudGFibGVEYXRhKCkgPyB0aGlzLnRhYmxlRGF0YSgpLmxlbmd0aCA6IDApO1xuICAgIHRoaXMuaW5pdGlhbGl6ZUZpbHRlcnMoKTtcbiAgICBpZiAodGhpcy50YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWcpIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVBhZ2luYXRpb24oKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGFibGVDb25maWcoKS5jYW5TY3JvbGxIb3Jpem9udGFsbHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gTm90ZTogV2UgY2FuJ3QgZGlyZWN0bHkgbW9kaWZ5IGlucHV0IHNpZ25hbHMsIHRoaXMgc2hvdWxkIGJlIGhhbmRsZWQgYnkgcGFyZW50IGNvbXBvbmVudFxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZXZlbnQgPT4ge1xuICAgICAgaWYgKHRoaXMuZmlsdGVyKSB7XG4gICAgICAgIGxldCBpc0NoZWNrQm94Q2xpY2tlZCA9IHRydWU7XG4gICAgICAgIGxldCB0YXJnZXRFbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxTcGFuRWxlbWVudDtcbiAgICAgICAgaWYgKHRhcmdldEVsZW1lbnQuY2xhc3NOYW1lID09PSBcImNoZWNrbWFya1wiKSB7XG4gICAgICAgICAgaXNDaGVja0JveENsaWNrZWQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuc2hvd0ZpbHRlci5zZXQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGlzQ2xpY2tJbnNpZGVFbGVtZW50ID0gdGhpcy5maWx0ZXIuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KTtcbiAgICAgICAgaWYgKCFpc0NsaWNrSW5zaWRlRWxlbWVudCAmJiAhaXNDaGVja0JveENsaWNrZWQpIHtcbiAgICAgICAgICB0aGlzLnRvZ2dsZUZpbHRlcih0aGlzLmZpbHRlck5hbWUoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIGZldGNoIGNvbGxhcHNlQ29sSW5kZXggYW5kIHByZXZpZXdMaW5lcyBpZiBwcmVzZW50XG4gICAgdGhpcy5yb3dDb2xsYXBzZUNvbmZpZ0luZGV4LnNldCh0aGlzLnRhYmxlQ29uZmlnKCk/LmNvbENvbmZpZz8uZmluZEluZGV4KFxuICAgICAgY29sID0+IGNvbC50eXBlID09PSAnYWN0aW9ucycgJiYgY29sLmFjdGlvblR5cGUgPT09ICdyb3ctY29sbGFwc2UnXG4gICAgKSk7XG4gICAgaWYgKHRoaXMucm93Q29sbGFwc2VDb25maWdJbmRleCgpICE9PSAtMSkge1xuICAgICAgdGhpcy5jb2xsYXBzZUNvbEluZGV4LnNldCh0aGlzLnRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW3RoaXMucm93Q29sbGFwc2VDb25maWdJbmRleCgpXS5jb2xsYXBzZUNvbHVtbkluZGV4ID8/IG51bGwpO1xuICAgICAgdGhpcy5wcmV2aWV3TGluZXMuc2V0KHRoaXMudGFibGVDb25maWcoKS5jb2xDb25maWdbdGhpcy5yb3dDb2xsYXBzZUNvbmZpZ0luZGV4KCldLnByZXZpZXdMaW5lcyA/PyBudWxsKTtcbiAgICAgIHRoaXMuYnVpbGRFeHBhbmRlZE1hcCgpO1xuICAgIH1cbiAgfVxuXG4gIGJ1aWxkRXhwYW5kZWRNYXAoKTogdm9pZHtcbiAgICBjb25zdCBuZXdFeHBhbmRlZE1hcDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcbiAgICBjb25zdCBjb2xsYXBzZUluZGV4ID0gdGhpcy5yb3dDb2xsYXBzZUNvbmZpZ0luZGV4KCk7XG4gICAgXG4gICAgdGhpcy50YWJsZURhdGEoKS5mb3JFYWNoKChyb3csIHJvd0luZGV4KSA9PiB7XG4gICAgICAgIG5ld0V4cGFuZGVkTWFwW2Ake3Jvd0luZGV4fWBdID0gcm93W2NvbGxhcHNlSW5kZXhdO1xuICAgIH0pO1xuICAgIHRoaXMuZXhwYW5kZWRNYXAuc2V0KG5ld0V4cGFuZGVkTWFwKTtcbn1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgLy8gVmlld0NoaWxkIGlzIG5vdyBhdmFpbGFibGUgLSBtYW51YWxseSB0cmlnZ2VyIGhlaWdodCBjYWxjdWxhdGlvbiBvbmNlXG4gICAgLy8gVGhlIGVmZmVjdCBpbiBjb25zdHJ1Y3RvciB3aWxsIGhhbmRsZSBzdWJzZXF1ZW50IGNvbmZpZyBjaGFuZ2VzXG4gICAgY29uc3QgY29uZmlnID0gdGhpcy50YWJsZUNvbmZpZygpO1xuICAgIGlmIChjb25maWc/LnBhZ2luYXRpb25Db25maWcgJiYgdGhpcy50YWJsZT8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgY29uc3QgaGVpZ2h0ID0gY29uZmlnLmhlaWdodDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IChoZWlnaHQgYXMgYW55KSAtIDU2O1xuICAgICAgY29uc3QgZmluYWxIZWlnaHQgPSByZXN1bHQgKyBcInB4XCI7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudGFibGUubmF0aXZlRWxlbWVudCwgXCJoZWlnaHRcIiwgZmluYWxIZWlnaHQpO1xuICAgIH1cbiAgfVxuICBcbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgdGhpcy50YWJsZUxlbmd0aC5zZXQodGhpcy50YWJsZURhdGEoKT8ubGVuZ3RoID8/IDApO1xuICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnKCkuYWN0aXZlUm93SW5kZXggIT09IG51bGwgJiYgdGhpcy50YWJsZUNvbmZpZygpLmFjdGl2ZVJvd0luZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGFjdGl2ZVJvd0luZGV4ID0gdGhpcy50YWJsZUNvbmZpZygpLmFjdGl2ZVJvd0luZGV4O1xuICAgICAgdGhpcy5hY3RpdmVSb3dJbmRleC5zZXQoQXJyYXkuaXNBcnJheShhY3RpdmVSb3dJbmRleCkgPyBhY3RpdmVSb3dJbmRleCA6IFthY3RpdmVSb3dJbmRleF0pXG4gICAgfVxuICB9XG5cbiAgLy8gRmlsdGVyIHJlbGF0ZWQgZnVuY3Rpb25zXG4gIGluaXRpYWxpemVGaWx0ZXJzKCkge1xuICAgIGNvbnN0IG5ld0FwcGxpZWRGaWx0ZXJzOiB7IFtrZXk6IHN0cmluZ106IEFycmF5PHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0+IH0gPSB7fTtcbiAgICBjb25zdCBhbGxGaWx0ZXJzOiBBcnJheTxGaWx0ZXI+ID0gW107XG4gICAgXG4gICAgZm9yIChsZXQgY29sSGVhZGVyIG9mIHRoaXMudGFibGVDb25maWcoKT8uY29sSGVhZGVyQ29uZmlnKSB7XG4gICAgICBpZiAoY29sSGVhZGVyLmZpbHRlcnMpIHtcbiAgICAgICAgbGV0IGZpbHRlcnMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgZmlsdGVyIG9mIGNvbEhlYWRlci5maWx0ZXJzKSB7XG4gICAgICAgICAgaWYgKGZpbHRlci5jaGVja2VkKSB7XG4gICAgICAgICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICBuYW1lOiBmaWx0ZXIubmFtZSxcbiAgICAgICAgICAgICAgdmFsdWU6IGZpbHRlci52YWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEFkZCBhbGwgZmlsdGVycyB0byB0aGUgZmlsdGVyRGF0YSBhcnJheVxuICAgICAgICAgIGFsbEZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWx0ZXJzLmxlbmd0aCA+IDApIG5ld0FwcGxpZWRGaWx0ZXJzW2NvbEhlYWRlci5kYXRhXSA9IGZpbHRlcnM7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuYXBwbGllZEZpbHRlcnMuc2V0KG5ld0FwcGxpZWRGaWx0ZXJzKTtcbiAgICB0aGlzLmZpbHRlckRhdGEuc2V0KGFsbEZpbHRlcnMpO1xuIH1cbiAgdG9nZ2xlRmlsdGVyKGZpbHRlck5hbWU6IHN0cmluZykge1xuICAgIGlmICghdGhpcy5zaG93RmlsdGVyKCkpIHtcbiAgICAgIHRoaXMuZmlsdGVyTmFtZS5zZXQoZmlsdGVyTmFtZSk7XG4gICAgICB0aGlzLnNob3dGaWx0ZXIuc2V0KHRydWUpO1xuXG4gICAgICBsZXQgb2ZmU2V0ID0gMDtcbiAgICAgIGxldCBjb2xIZWFkZXJzUmV2ZXJzZWQgPSB0aGlzLmNvbEhlYWRlcnMudG9BcnJheSgpLnJldmVyc2UoKTtcblxuICAgICAgZm9yIChsZXQgaGVhZGVyIG9mIGNvbEhlYWRlcnNSZXZlcnNlZCkge1xuICAgICAgICBpZiAoaGVhZGVyLm5hdGl2ZUVsZW1lbnQuaW5uZXJUZXh0ID09PSBmaWx0ZXJOYW1lKSBicmVhaztcbiAgICAgICAgb2ZmU2V0ICs9IGhlYWRlci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgfVxuICAgICAgdGhpcy5maWx0ZXJDb250YWluZXJTdHlsZXMuc2V0KHtcbiAgICAgICAgdG9wOiBcIjQ0cHhcIixcbiAgICAgICAgcmlnaHQ6IG9mZlNldCA+IDAgPyBvZmZTZXQgLSAxMTYgKyBcInB4XCIgOiBcIjEycHhcIlxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyTmFtZS5zZXQoXCJcIik7XG4gICAgICB0aGlzLmZpbHRlckRhdGEuc2V0KFtdKTtcbiAgICAgIHRoaXMuc2hvd0ZpbHRlci5zZXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuICB1cGRhdGVBcHBsaWVkRmlsdGVycyhhcHBsaWVkRmlsdGVyczogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfT4pIHtcbiAgICBjb25zdCBjdXJyZW50RmlsdGVycyA9IHRoaXMuYXBwbGllZEZpbHRlcnMoKTtcbiAgICBpZiAoYXBwbGllZEZpbHRlcnMubGVuZ3RoID09IDApIHtcbiAgICAgIGRlbGV0ZSBjdXJyZW50RmlsdGVyc1t0aGlzLmZpbHRlck5hbWUoKV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnRGaWx0ZXJzW3RoaXMuZmlsdGVyTmFtZSgpXSA9IGFwcGxpZWRGaWx0ZXJzO1xuICAgIH1cbiAgICB0aGlzLmFwcGxpZWRGaWx0ZXJzLnNldCh7IC4uLmN1cnJlbnRGaWx0ZXJzIH0pO1xuICAgIHRoaXMuZmlsdGVyc1VwZGF0ZWQuZW1pdCh7IC4uLnRoaXMuYXBwbGllZEZpbHRlcnMoKSB9KTtcbiAgICB0aGlzLnRvZ2dsZUZpbHRlcih0aGlzLmZpbHRlck5hbWUoKSk7XG4gIH1cblxuICAvLyBQYWdpbmF0aW9uIHJlbGF0ZWQgZnVuY3Rpb25zXG4gIGluaXRpYWxpemVQYWdpbmF0aW9uKCkge1xuICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnKCkucGFnaW5hdGlvbkNvbmZpZykge1xuICAgICAgLy8gSW5pdGlhbGl6ZSBzZWxlY3RlZFBhZ2UgZnJvbSBjb25maWcgaWYgcHJvdmlkZWQsIG90aGVyd2lzZSBkZWZhdWx0IHRvIDFcbiAgICAgIC8vIGNvbnN0IGNvbmZpZ1NlbGVjdGVkUGFnZSA9IHRoaXMudGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnLnNlbGVjdGVkUGFnZTtcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRQYWdlLnNldChjb25maWdTZWxlY3RlZFBhZ2UgPz8gMSk7XG4gICAgICBcbiAgICAgIGxldCBsZW4gPSB0aGlzLnRhYmxlQ29uZmlnKCkucGFnaW5hdGlvbkNvbmZpZy5ub09mUGFnZXM7XG4gICAgICBpZiAobGVuIDw9IDcpIHtcbiAgICAgICAgY29uc3QgbmV3UGFnZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbGVuOyBpKyspIHtcbiAgICAgICAgICBuZXdQYWdlcy5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGFnZXMuc2V0KG5ld1BhZ2VzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGFnZXMuc2V0KFsxLCAyLCAzLCA0LCAwLCBsZW5dKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgdXBkYXRlU2VsZWN0ZWRQYWdlKHBhZ2VOdW1iZXI6IG51bWJlcikge1xuICAgIC8vIEd1YXJkIGNsYXVzZSB0byBwcmV2ZW50IG91dC1vZi1yYW5nZSB1cGRhdGVzXG4gICAgaWYgKHBhZ2VOdW1iZXIgPCAxIHx8IHBhZ2VOdW1iZXIgPiB0aGlzLnRhYmxlQ29uZmlnKCkucGFnaW5hdGlvbkNvbmZpZy5ub09mUGFnZXMpIHJldHVybjtcblxuICAgIC8qKlxuICAgICAqIExFR0FDWSBDT0RFIFdPUktBUk9VTkQ6IFRyYWNrIHVzZXItaW5pdGlhdGVkIHBhZ2Ugc2VsZWN0aW9uLlxuICAgICAqIFxuICAgICAqIFdlIHRyYWNrIHRoaXMgdG8gcHJldmVudCB0aGUgZWZmZWN0IGZyb20gb3ZlcndyaXRpbmcgdXNlciBzZWxlY3Rpb25zIHdoZW5cbiAgICAgKiBsZWdhY3kgcGFyZW50IGNvbXBvbmVudHMgZG9uJ3QgdXBkYXRlIGNvbmZpZy5zZWxlY3RlZFBhZ2UuIFRoZSBlZmZlY3Qgd2lsbFxuICAgICAqIHNraXAgc3luY2luZyBmcm9tIGNvbmZpZyB3aGlsZSB0aGlzIHBhZ2UgaXMgbWFya2VkIGFzIHVzZXItc2VsZWN0ZWQuXG4gICAgICogXG4gICAgICogSURFQUw6IFBhcmVudCBzaG91bGQgdXBkYXRlIGNvbmZpZy5zZWxlY3RlZFBhZ2UgaW4gcGFnZVNlbGVjdGVkIGhhbmRsZXIuXG4gICAgICogT25jZSBhbGwgcGFyZW50cyBkbyB0aGlzLCB3ZSBjYW4gcmVtb3ZlIHVzZXJTZWxlY3RlZFBhZ2UgdHJhY2tpbmcuXG4gICAgICovXG4gICAgdGhpcy5pc0ludGVybmFsUGFnZVVwZGF0ZSA9IHRydWU7XG4gICAgdGhpcy51c2VyU2VsZWN0ZWRQYWdlID0gcGFnZU51bWJlcjtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBzdGF0ZSBpbW1lZGlhdGVseSAtIHRoaXMgaXMgdGhlIHNvdXJjZSBvZiB0cnV0aFxuICAgIHRoaXMuc2VsZWN0ZWRQYWdlLnNldChwYWdlTnVtYmVyKTtcblxuICAgIC8vIFJlc2V0IGhlYWRlciBjaGVja2JveCB3aGVuIG5hdmlnYXRpbmcgdG8gYSBkaWZmZXJlbnQgcGFnZVxuICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2tib3guc2V0KGZhbHNlKTtcbiAgICBcbiAgICAvLyBVcGRhdGUgcGFnZSBudW1iZXJzIGRpc3BsYXkgZm9yIHBhZ2luYXRpb24gd2l0aCBtYW55IHBhZ2VzXG4gICAgbGV0IGxlbiA9IHRoaXMudGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnLm5vT2ZQYWdlcztcbiAgICBpZiAobGVuID4gNykge1xuICAgICAgaWYgKHBhZ2VOdW1iZXIgLSAyIDw9IDEpIHtcbiAgICAgICAgdGhpcy5wYWdlcy5zZXQoWzEsIDIsIDMsIDQsIDAsIGxlbl0pO1xuICAgICAgfSBlbHNlIGlmIChwYWdlTnVtYmVyIC0gMiA+IDEgJiYgcGFnZU51bWJlciArIDIgPCBsZW4pIHtcbiAgICAgICAgdGhpcy5wYWdlcy5zZXQoWzEsIDAsIHBhZ2VOdW1iZXIgLSAxLCBwYWdlTnVtYmVyLCBwYWdlTnVtYmVyICsgMSwgMCwgbGVuXSk7XG4gICAgICB9IGVsc2UgaWYgKHBhZ2VOdW1iZXIgKyAyID49IGxlbikge1xuICAgICAgICB0aGlzLnBhZ2VzLnNldChbMSwgMCwgbGVuIC0gMywgbGVuIC0gMiwgbGVuIC0gMSwgbGVuXSk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIEVtaXQgdG8gcGFyZW50IC0gdGhleSBtYXkgb3IgbWF5IG5vdCB1cGRhdGUgY29uZmlnLCBidXQgd2UgcHJvdGVjdCBvdXIgc3RhdGVcbiAgICB0aGlzLnBhZ2VTZWxlY3RlZC5lbWl0KHBhZ2VOdW1iZXIpO1xuICB9XG5cbiAgLy8gTWFpbiBjb250YWluZXIgcmVsYXRlZCBmdW5jdGlvbnNcbiAgZ2V0Q29udGFpbmVySGVpZ2h0KCkge1xuICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnKCk/LmhlaWdodCkgcmV0dXJuIHRoaXMudGFibGVDb25maWcoKS5oZWlnaHQ7XG4gICAgZWxzZSByZXR1cm4gXCJcIjtcbiAgfVxuICBnZXRDb250YWluZXJXaWR0aCgpIHtcbiAgICBpZiAodGhpcy50YWJsZUNvbmZpZygpPy53aWR0aCkgcmV0dXJuIHRoaXMudGFibGVDb25maWcoKS53aWR0aDtcbiAgICBlbHNlIHJldHVybiBcIlwiO1xuICB9XG5cbiAgLy8gQ29sdW1uIEhlYWRlcnMgcmVsYXRlZCBmdW5jdGlvbnNcbiAgZ2V0Q29sSGVhZGVyc1Jvd1N0eWxlcygpIHtcbiAgICBjb25zdCB7IGNvbEhlYWRlcnNSb3dDb25maWcgfSA9IHRoaXMudGFibGVDb25maWcoKTtcbiAgICBjb25zdCBtaW5IZWlnaHQgPSBjb2xIZWFkZXJzUm93Q29uZmlnPy5oZWlnaHQgfHwgXCI0NHB4XCI7XG4gICAgY29uc3QgYm9yZGVyVG9wID0gKGNvbEhlYWRlcnNSb3dDb25maWc/LnN0eWxlIGFzIGFueSk/LmJvcmRlclRvcCB8fCBcIlwiO1xuICAgIGNvbnN0IGJvcmRlckJvdHRvbSA9IChjb2xIZWFkZXJzUm93Q29uZmlnPy5zdHlsZSBhcyBhbnkpPy5ib3JkZXJCb3R0b20gfHwgXCIxcHggc29saWQgI0UwRTBFMFwiO1xuICAgIGNvbnN0IGJhY2tncm91bmRDb2xvciA9IChjb2xIZWFkZXJzUm93Q29uZmlnPy5zdHlsZSBhcyBhbnkpPy5iYWNrZ3JvdW5kQ29sb3IgfHwgXCIjRkZGRkZGXCI7XG4gICAgY29uc3QgZm9udFNpemUgPSAoY29sSGVhZGVyc1Jvd0NvbmZpZz8uc3R5bGUgYXMgYW55KT8uZm9udFNpemUgfHwgXCIxNHB4XCI7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwibWluLWhlaWdodFwiOiBtaW5IZWlnaHQsXG4gICAgICBcImJvcmRlci10b3BcIjogYm9yZGVyVG9wLFxuICAgICAgXCJib3JkZXItYm90dG9tXCI6IGJvcmRlckJvdHRvbSxcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvclwiOiBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgICBcImZvbnQtc2l6ZVwiOiBmb250U2l6ZVxuICAgIH07XG4gIH1cblxuICBvblNvcnRDaGFuZ2Uoc29ydFN0YXRlOiBTb3J0U3RhdGUpIHtcbiAgICAvLyBFbWl0IHRoZSBzb3J0IGNoYW5nZSB0byB0aGUgcGFyZW50IGNvbXBvbmVudFxuICAgIHRoaXMuc29ydENoYW5nZS5lbWl0KHNvcnRTdGF0ZSk7XG4gICAgXG4gICAgLy8gSGFuZGxlIG11bHRpLWNvbHVtbiBzb3J0IGlmIGVuYWJsZWRcbiAgICBpZiAodGhpcy50YWJsZUNvbmZpZygpLm11bHRpQ29sdW1uU29ydCkge1xuICAgICAgY29uc3QgY3VycmVudE11bHRpU29ydCA9IHRoaXMubXVsdGlDb2x1bW5Tb3J0KCk7XG4gICAgICBjb25zdCBpbmRleCA9IGN1cnJlbnRNdWx0aVNvcnQuZmluZEluZGV4KHNvcnQgPT4gc29ydC5jb2x1bW4gPT09IHNvcnRTdGF0ZS5jb2x1bW4pO1xuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICBpZiAoc29ydFN0YXRlLmRpcmVjdGlvbiA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IG5ld011bHRpU29ydCA9IFsuLi5jdXJyZW50TXVsdGlTb3J0XTtcbiAgICAgICAgICBuZXdNdWx0aVNvcnQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICB0aGlzLm11bHRpQ29sdW1uU29ydC5zZXQobmV3TXVsdGlTb3J0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBuZXdNdWx0aVNvcnQgPSBbLi4uY3VycmVudE11bHRpU29ydF07XG4gICAgICAgICAgbmV3TXVsdGlTb3J0W2luZGV4XSA9IHNvcnRTdGF0ZTtcbiAgICAgICAgICB0aGlzLm11bHRpQ29sdW1uU29ydC5zZXQobmV3TXVsdGlTb3J0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzb3J0U3RhdGUuZGlyZWN0aW9uICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMubXVsdGlDb2x1bW5Tb3J0LnNldChbLi4uY3VycmVudE11bHRpU29ydCwgc29ydFN0YXRlXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0QWN0aW9uc0NlbGxTdHlsZShzdHlsZTogYW55KTogYW55IHtcbiAgICBpZiAoIXN0eWxlKSByZXR1cm4ge307XG4gICAgY29uc3QgeyB3aWR0aCwgLi4ucmVzdFN0eWxlIH0gPSBzdHlsZTtcbiAgICByZXR1cm4gcmVzdFN0eWxlO1xuICB9XG5cbiAgb25BY3Rpb25DbGljayhldmVudDogYW55LCByb3dJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmFjdGlvblR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgIGNvbnN0IGFjdGlvbkluZm8gPSB0aGlzLmZpbmRBY3Rpb25Db25maWcoJ2NoZWNrYm94Jyk7XG4gICAgICBpZiAoYWN0aW9uSW5mbyAmJiB0aGlzLnRhYmxlRGF0YSgpW3Jvd0luZGV4XSkge1xuICAgICAgICBjb25zdCB7IGluZGV4LCBjb25maWcgfSA9IGFjdGlvbkluZm87XG4gICAgICAgIGNvbnN0IGN1cnJlbnRBY3RpdmVSb3dzID0gdGhpcy5hY3RpdmVSb3dJbmRleCgpO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgY2hlY2tlZFJvd0luZGljZXMgPSBldmVudC52YWx1ZVxuICAgICAgICAgID8gWy4uLmN1cnJlbnRBY3RpdmVSb3dzLCByb3dJbmRleF1cbiAgICAgICAgICA6IGN1cnJlbnRBY3RpdmVSb3dzLmZpbHRlcihpID0+IGkgIT09IHJvd0luZGV4KTtcbiAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkVGFibGVEYXRhID0gdGhpcy51cGRhdGVDaGVja2JveFN0YXRlKGNoZWNrZWRSb3dJbmRpY2VzLCBpbmRleCk7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBjaGVja2VkSXRlbXMgPSB0aGlzLmJ1aWxkQ2hlY2tlZEl0ZW1zKGNoZWNrZWRSb3dJbmRpY2VzLCB1cGRhdGVkVGFibGVEYXRhKTtcbiAgICAgICAgY29uZmlnLmFjdGlvbj8uKGNoZWNrZWRJdGVtcywgcm93SW5kZXgpO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIGlmKGV2ZW50LmFjdGlvblR5cGUgPT09ICdyb3ctY29sbGFwc2UnKXtcbiAgICAgIGNvbnN0IHJvd0NvbGxhcHNlID0gdGhpcy5maW5kQWN0aW9uQ29uZmlnKCdyb3ctY29sbGFwc2UnKTtcbiAgICAgIGlmIChyb3dDb2xsYXBzZSAmJiB0aGlzLnRhYmxlRGF0YSgpW3Jvd0luZGV4XSkge1xuICAgICAgICAvLyBOb3RlOiBXZSBjYW4ndCBkaXJlY3RseSBtb2RpZnkgaW5wdXQgc2lnbmFscywgdGhpcyBzaG91bGQgYmUgaGFuZGxlZCBieSBwYXJlbnQgY29tcG9uZW50XG4gICAgICAgIHJvd0NvbGxhcHNlLmNvbmZpZy5hY3Rpb24/Lih0aGlzLnRhYmxlRGF0YSgpKTtcbiAgICAgICAgdGhpcy5idWlsZEV4cGFuZGVkTWFwKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZmluZEFjdGlvbkNvbmZpZyhhY3Rpb25UeXBlOiBzdHJpbmcpOiB7IGluZGV4OiBudW1iZXIsIGNvbmZpZzogQ29sQ29uZmlnIH0gfCBudWxsIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudGFibGVDb25maWcoKS5jb2xDb25maWcubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNvbCA9IHRoaXMudGFibGVDb25maWcoKS5jb2xDb25maWdbaV07XG4gICAgICBpZiAoY29sLnR5cGUgPT09ICdhY3Rpb25zJyAmJiBjb2wuYWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xuICAgICAgICByZXR1cm4geyBpbmRleDogaSwgY29uZmlnOiBjb2wgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgXG5cbiAgaXNSb3dEaXNhYmxlZChyb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy50YWJsZUNvbmZpZygpLnJvd0NvbmZpZy5kaXNhYmxlUm93ID09PSBcImZ1bmN0aW9uXCIgPyB0aGlzLnRhYmxlQ29uZmlnKCkucm93Q29uZmlnLmRpc2FibGVSb3cocm93KSA6IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDaGVja2JveFN0YXRlKGNoZWNrZWRSb3dJbmRpY2VzOiBudW1iZXJbXSwgY2hlY2tib3hDb2xJbmRleDogbnVtYmVyKTogYW55W11bXSB7XG4gICAgY29uc3QgY3VycmVudERhdGEgPSB0aGlzLnRhYmxlRGF0YSgpO1xuICAgIFxuICAgIHRoaXMuYWN0aXZlUm93SW5kZXguc2V0KGNoZWNrZWRSb3dJbmRpY2VzKTtcbiAgICBcbiAgICBjb25zdCB1cGRhdGVkVGFibGVEYXRhID0gY3VycmVudERhdGEubWFwKChyb3csIGkpID0+IHtcbiAgICAgIGNvbnN0IHJvd0NvcHkgPSBBcnJheS5mcm9tKHJvdyk7XG4gICAgICBjb25zdCBpc0Rpc2FibGVkID0gdGhpcy5pc1Jvd0Rpc2FibGVkKHJvdyk7XG4gICAgICBcbiAgICAgIGlmICghaXNEaXNhYmxlZCkge1xuICAgICAgICByb3dDb3B5W2NoZWNrYm94Q29sSW5kZXhdID0gY2hlY2tlZFJvd0luZGljZXMuaW5jbHVkZXMoaSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHJldHVybiByb3dDb3B5O1xuICAgIH0pO1xuICAgIFxuICAgIHRoaXMuaGVhZGVyQWN0aW9uPy5lbWl0KHtcbiAgICAgIHR5cGU6IFwiY2hlY2tib3hUb2dnbGVcIixcbiAgICAgIHBheWxvYWQ6IHVwZGF0ZWRUYWJsZURhdGFcbiAgICB9KTtcbiAgICBcbiAgICByZXR1cm4gdXBkYXRlZFRhYmxlRGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDaGVja2VkSXRlbXMoY2hlY2tlZFJvd0luZGljZXM6IG51bWJlcltdLCB1cGRhdGVkVGFibGVEYXRhOiBhbnlbXVtdKTogYW55W11bXSB7XG4gICAgcmV0dXJuIGNoZWNrZWRSb3dJbmRpY2VzXG4gICAgICAubWFwKGNoZWNrZWRJbmRleCA9PiB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHVwZGF0ZWRUYWJsZURhdGFbY2hlY2tlZEluZGV4XTtcbiAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgIHJldHVybiBbLi4ucm93XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKHJvdyA9PiByb3cgIT09IG51bGwpIGFzIGFueVtdW107XG4gIH1cblxuICB0b2dnbGVDaGVja2JveCgpIHtcbiAgICB0aGlzLnNlbGVjdEFsbENoZWNrYm94LnNldCghdGhpcy5zZWxlY3RBbGxDaGVja2JveCgpKTtcbiAgICBjb25zdCBjaGVja2JveENvbEluZGV4ID0gdGhpcy50YWJsZUNvbmZpZygpLmNvbENvbmZpZy5maW5kSW5kZXgoY29sID0+IGNvbC50eXBlID09PSAnYWN0aW9ucycgJiYgY29sLmFjdGlvblR5cGUgPT09ICdjaGVja2JveCcpO1xuICAgIGlmIChjaGVja2JveENvbEluZGV4ICE9PSAtMSkge1xuICAgICAgY29uc3QgaXNTZWxlY3RBbGwgPSB0aGlzLnNlbGVjdEFsbENoZWNrYm94KCk7XG4gICAgICBjb25zdCBjdXJyZW50RGF0YSA9IHRoaXMudGFibGVEYXRhKCk7XG4gICAgICBcbiAgICAgIGNvbnN0IGNoZWNrZWRSb3dJbmRpY2VzID0gaXNTZWxlY3RBbGxcbiAgICAgICAgPyBjdXJyZW50RGF0YVxuICAgICAgICAgICAgLm1hcCgocm93LCBpbmRleCkgPT4gdGhpcy5pc1Jvd0Rpc2FibGVkKHJvdykgPyAtMSA6IGluZGV4KVxuICAgICAgICAgICAgLmZpbHRlcihpbmRleCA9PiBpbmRleCAhPT0gLTEpXG4gICAgICAgIDogW107XG4gICAgICBcbiAgICAgIHRoaXMudXBkYXRlQ2hlY2tib3hTdGF0ZShjaGVja2VkUm93SW5kaWNlcywgY2hlY2tib3hDb2xJbmRleCk7XG4gICAgfVxuICB9XG5cblxuICBvblBhZ2VTaXplQ2hhbmdlKHNlbGVjdGVkT3B0aW9uOiBEcm9wZG93bkl0ZW0pIHtcbiAgICB0aGlzLnBhZ2VTaXplQ2hhbmdlZC5lbWl0KHBhcnNlSW50KHNlbGVjdGVkT3B0aW9uLnZhbHVlKSk7XG4gIH1cblxuICBzaG91bGRTaG93UGFnaW5hdGlvbigpOiBib29sZWFuIHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMudGFibGVDb25maWcoKT8ucGFnaW5hdGlvbkNvbmZpZztcbiAgICAgIGlmICghY29uZmlnKSByZXR1cm4gZmFsc2U7XG4gICAgICBjb25zdCBoYXNNdWx0aXBsZVBhZ2VzID0gY29uZmlnLm5vT2ZQYWdlcyA+IDE7XG4gICAgICBjb25zdCBoYXNFbm91Z2hEYXRhID0gdGhpcy50YWJsZUxlbmd0aCgpID4gY29uZmlnLnJvd3NQZXJQYWdlO1xuICAgICAgcmV0dXJuIHRoaXMuc2hvd1BhZ2VTaXplRHJvcGRvd24oKSB8fCBoYXNNdWx0aXBsZVBhZ2VzIHx8IGhhc0Vub3VnaERhdGE7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWJsZUNvbmZpZyB7XG4gIGhlaWdodDogc3RyaW5nIHwgXCIxMDAlXCI7XG4gIHdpZHRoOiBzdHJpbmcgfCBcIjEwMCVcIjtcbiAgcGFnaW5hdGlvbkNvbmZpZz86IFBhZ2luYXRpb25Db25maWcgfCB1bmRlZmluZWQgfCBudWxsO1xuICBjb2xIZWFkZXJzUm93Q29uZmlnOiBSb3dDb25maWcgfCB1bmRlZmluZWQgfCBudWxsO1xuICByb3dDb25maWc6IFJvd0NvbmZpZyB8IHVuZGVmaW5lZCB8IG51bGw7XG4gIGNvbEhlYWRlckNvbmZpZzogQXJyYXk8Q29sSGVhZGVyQ29uZmlnPjtcbiAgY29sQ29uZmlnOiBBcnJheTxDb2xDb25maWc+O1xuICBjYW5FeHBhbmQ/OiBib29sZWFuO1xuICBjYW5TY3JvbGxIb3Jpem9udGFsbHk/OiBib29sZWFuO1xuICBjZWxsSG92ZXI/OiBib29sZWFuO1xuICBhY3RpdmVSb3dJbmRleD86IG51bWJlciB8IG51bWJlcltdO1xuICBtdWx0aUNvbHVtblNvcnQ/OiBib29sZWFuO1xufVxuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0aW9uQ29uZmlnIHtcbiAgbm9PZlBhZ2VzOiBudW1iZXI7XG4gIHJvd3NQZXJQYWdlOiBudW1iZXI7XG4gIHRvdGFsTm9PZlJvd3M6IG51bWJlcjtcbiAgc2VsZWN0ZWRQYWdlPzogbnVtYmVyO1xuICBkaXNhYmxlUGFnZUp1bXBpbmc/OiBib29sZWFuO1xuICBzaG93UGFnZVNpemVEcm9wZG93bj86IGJvb2xlYW47IC8vIFdoZW4gdHJ1ZSwgcm93c1BlclBhZ2UgdmFsdWUgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHBhZ2VTaXplcyBhcnJheVxuICBwYWdlU2l6ZXM/OiBudW1iZXJbXTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUm93Q29uZmlnIHtcbiAgaGVpZ2h0Pzogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbDtcbiAgc3R5bGU/OiB7fTtcbiAgYWN0aW9uPzogYW55O1xuICBkaXNhYmxlUm93PzogKGRhdGE6IGFueSkgPT4gYm9vbGVhbjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ29sSGVhZGVyQ29uZmlnIHtcbiAgdHlwZTogXCJ0ZXh0XCIgfCBcIm51bWJlclwiIHwgXCJjdXN0b21cIiB8IFwiY2hlY2tib3hcIjtcbiAgZGF0YTogYW55O1xuICBjb21wb25lbnRSZWY/OiBhbnk7XG4gIGZpbHRlcnM/OiBBcnJheTxGaWx0ZXI+IHwgbnVsbDtcbiAgc3R5bGU/OiB7fTtcbiAgYWN0aW9uPzogYW55O1xuICBpc1NvcnRhYmxlPzogYm9vbGVhbjtcbiAgc29ydEFzY0ljb24/OiBzdHJpbmc7XG4gIHNvcnREZXNjSWNvbj86IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ29sQ29uZmlnIHtcbiAgdHlwZTogXCJ0ZXh0XCIgfCBcIm51bWJlclwiIHwgXCJjdXN0b21cIiB8IFwiYWN0aW9uc1wiIHwgXCJodG1sXCI7XG4gIGNvbXBvbmVudFJlZj86IGFueTtcbiAgc3R5bGU/OiB7fTtcbiAgYWN0aW9uPzogYW55O1xuICBhY3Rpb25JdGVtcz86IEFjdGlvbkl0ZW1bXTtcbiAgYWN0aW9uVHlwZT86IFwiaW5saW5lXCIgfCBcImRyb3Bkb3duXCIgfCBcImNoZWNrYm94XCIgfCBcInJvdy1jb2xsYXBzZVwiOyAvLyBpbmxpbmUgZm9yIGluZGl2aWR1YWwgaWNvbnMsIGRyb3Bkb3duIGZvciBtZW51XG4gIGRpc2FibGU/OiAocm93RGF0YTogYW55KSA9PiBib29sZWFuO1xuICBjb2xsYXBzZUNvbHVtbkluZGV4PzogbnVtYmVyO1xuICBwcmV2aWV3TGluZXM/OiBudW1iZXI7XG59XG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkl0ZW0ge1xuICBsYWJlbDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICBkaXNhYmxlPzogKGRhdGE6IGFueSkgPT4gYm9vbGVhbjtcbiAgYWN0aW9uPzogKGRhdGE6IGFueSkgPT4gdm9pZDtcbiAgY2hpbGRyZW4/OiBBY3Rpb25JdGVtW107XG59XG5leHBvcnQgaW50ZXJmYWNlIEludGVybmFsQWN0aW9uSXRlbSBleHRlbmRzIEFjdGlvbkl0ZW0ge1xuICBzaG93U3VibWVudT86IGJvb2xlYW47XG59XG4iLCI8ZGl2XG4gIFtuZ1N0eWxlXT1cIntcbiAgICBoZWlnaHQ6IGdldENvbnRhaW5lckhlaWdodCgpLFxuICAgIHdpZHRoOiBnZXRDb250YWluZXJXaWR0aCgpLFxuICAgICdvdmVyZmxvdy14JzogdGFibGVDb25maWcoKS5jYW5TY3JvbGxIb3Jpem9udGFsbHkgPyAnYXV0bycgOiAndW5zZXQnXG4gIH1cIlxuICBpZD1cIm1haW4tY29udGFpbmVyXCJcbj5cbiAgPG1pcy10YWJsZS1maWx0ZXJcbiAgICAjZmlsdGVyXG4gICAgKGZpbHRlcnNBcHBsaWVkKT1cInVwZGF0ZUFwcGxpZWRGaWx0ZXJzKCRldmVudClcIlxuICAgICpuZ0lmPVwic2hvd0ZpbHRlcigpXCJcbiAgICBbY29udGFpbmVyU3R5bGVzXT1cImZpbHRlckNvbnRhaW5lclN0eWxlcygpXCJcbiAgICBbZmlsdGVyc0RhdGFdPVwiZmlsdGVyRGF0YSgpXCJcbiAgPjwvbWlzLXRhYmxlLWZpbHRlcj5cbiAgPGRpdlxuICAgICN0YWJsZVxuICAgIGlkPVwidGFibGUtY29udGFpbmVyXCJcbiAgICBbbmdDbGFzc109XCJ7ICduby1zY3JvbGxiYXInOiBleHBhbmRlZEluZGV4KCkgPCAwLCBzY3JvbGxiYXI6ICEoZXhwYW5kZWRJbmRleCgpIDwgMCksICdzY3JvbGwtaG9yaXpvbnRhbGx5JzogdGFibGVDb25maWcoKS5jYW5TY3JvbGxIb3Jpem9udGFsbHkgfVwiXG4gID5cbiAgICA8ZGl2XG4gICAgW25nU3R5bGVdPVwiZ2V0Q29sSGVhZGVyc1Jvd1N0eWxlcygpXCJcbiAgICAgIGlkPVwiY29sLWhlYWRlcnMtY29udGFpbmVyXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgICNjb2xIZWFkZXJSZWZcbiAgICAgICAgKGNsaWNrKT1cImNvbEhlYWRlcj8uYWN0aW9uID8gY29sSGVhZGVyPy5hY3Rpb24oY29sSGVhZGVyKSA6IG51bGxcIlxuICAgICAgICAqbmdGb3I9XCJsZXQgY29sSGVhZGVyIG9mIHRhYmxlQ29uZmlnKCk/LmNvbEhlYWRlckNvbmZpZ1wiXG4gICAgICAgIGNsYXNzPVwiY29sLWhlYWRlclwiXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICB3aWR0aDogY29sSGVhZGVyPy5zdHlsZT8ud2lkdGggfHwgJycsXG4gICAgICAgICAgY3Vyc29yOiBjb2xIZWFkZXIuYWN0aW9uID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnLFxuICAgICAgICAgICdqdXN0aWZ5LWNvbnRlbnQnOiBjb2xIZWFkZXI/LnN0eWxlPy5qdXN0aWZ5Q29udGVudFxuICAgICAgICAgICAgPyBjb2xIZWFkZXI/LnN0eWxlPy5qdXN0aWZ5Q29udGVudFxuICAgICAgICAgICAgOiBjb2xIZWFkZXIudHlwZSA9PT0gJ251bWJlcidcbiAgICAgICAgICAgID8gJ2ZsZXgtZW5kJ1xuICAgICAgICAgICAgOiAnc3BhY2UtYmV0d2VlbidcbiAgICAgICAgfVwiXG4gICAgICA+XG4gICAgICAgIDxwICpuZ0lmPVwiY29sSGVhZGVyPy50eXBlICE9PSAnY3VzdG9tJyAmJiBjb2xIZWFkZXI/LnR5cGUgIT09ICdjaGVja2JveCdcIiBjbGFzcz1cImNvbC1oZWFkZXItdGV4dFwiPlxuICAgICAgICAgIHt7IGNvbEhlYWRlcj8uZGF0YSB8fCBcIiBcIiB9fVxuICAgICAgICA8L3A+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgKGNsaWNrKT1cImZpbHRlckRhdGEuc2V0KGNvbEhlYWRlci5maWx0ZXJzKTsgdG9nZ2xlRmlsdGVyKGNvbEhlYWRlci5kYXRhKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAqbmdJZj1cImNvbEhlYWRlcj8udHlwZSAhPT0gJ2N1c3RvbScgJiYgY29sSGVhZGVyPy5maWx0ZXJzICYmIGNvbEhlYWRlcj8uZmlsdGVycz8ubGVuZ3RoID4gMFwiXG4gICAgICAgICAgY2xhc3M9XCJmaWx0ZXItaWNvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImFwcGxpZWRGaWx0ZXJzKClbY29sSGVhZGVyLmRhdGFdPy5sZW5ndGggPiAwXCIgaWQ9XCJmaWx0ZXItYWN0aXZlXCI+PC9zcGFuPlxuICAgICAgICAgIDxzdmcgZmlsbD1cIm5vbmVcIiBoZWlnaHQ9XCIxMFwiIHZpZXdCb3g9XCIwIDAgMTMgMTBcIiB3aWR0aD1cIjEzXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgICAgIGQ9XCJNNC45NzU0NiAxMEg3LjY0MjEzVjhINC45NzU0NlYxMFpNMC4zMDg0NzIgMFYySDEyLjMwODVWMEgwLjMwODQ3MlpNMi4zMDg0NyA2SDEwLjMwODVWNEgyLjMwODQ3VjZaXCJcbiAgICAgICAgICAgICAgZmlsbD1cIiMxODFGMzNcIlxuICAgICAgICAgICAgICBmaWxsLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQ2hlY2tib3goKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAqbmdJZj1cImNvbEhlYWRlcj8udHlwZSA9PT0gJ2NoZWNrYm94J1wiXG4gICAgICAgICAgY2xhc3M9XCJjaGVja2JveC1pY29uXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxtaXMtY2hlY2tib3ggW2NoZWNrZWRdPVwic2VsZWN0QWxsQ2hlY2tib3goKVwiPjwvbWlzLWNoZWNrYm94PlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiY29sSGVhZGVyPy5pc1NvcnRhYmxlICYmICFjb2xIZWFkZXI/LmZpbHRlcnNcIiBhcHBTb3J0SWNvbnNcbiAgICAgICAgICBbY29sdW1uXT1cImNvbEhlYWRlclwiXG4gICAgICAgICAgW2FjdGl2ZVNvcnRdPVwiY3VycmVudFNvcnQoKVwiXG4gICAgICAgICAgW2FjdGl2ZVNvcnRzXT1cIm11bHRpQ29sdW1uU29ydCgpXCJcbiAgICAgICAgICBbbXVsdGlDb2x1bW5Tb3J0XT1cInRhYmxlQ29uZmlnKCkubXVsdGlDb2x1bW5Tb3J0XCJcbiAgICAgICAgICAoc29ydENoYW5nZSk9XCJvblNvcnRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgY2xhc3M9XCJzb3J0LWljb25cIj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiY29sSGVhZGVyPy50eXBlID09PSAnY3VzdG9tJ1wiIGN1c3RvbVRhYmxlQ2VsbCBbY3VzdG9tQ29tcG9uZW50XT1cImNvbEhlYWRlcj8uY29tcG9uZW50UmVmXCIgW2RhdGFdPVwiY29sSGVhZGVyLmRhdGFcIj48L25nLXRlbXBsYXRlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgXG4gICAgPGRpdiBpZD1cImRhdGEtY29udGFpbmVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93LXdyYXBwZXJcIiAqbmdGb3I9XCJsZXQgcm93IG9mIHRhYmxlRGF0YSgpOyBsZXQgaSA9IGluZGV4OyBsZXQgcm93SW5kZXggPSBpbmRleFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJ0LXJvd1wiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyAndC1yb3ctaG92ZXInOiB0YWJsZUNvbmZpZygpLmNlbGxIb3ZlciwgJ2FjdGl2ZS1yb3cnOiBhY3RpdmVSb3dJbmRleCgpLmluY2x1ZGVzKGkpIH1cIlxuICAgICAgICAgIFtuZ1N0eWxlXT1cInsgJ21pbi1oZWlnaHQnOiB0YWJsZUNvbmZpZygpPy5yb3dDb25maWc/LmhlaWdodCA/IHRhYmxlQ29uZmlnKCkucm93Q29uZmlnLmhlaWdodCA6ICc0NHB4JyB9XCJcbiAgICAgICAgICAoY2xpY2spPVwic2VsZWN0Um93KGkpXCJcbiAgICAgICAgICBbY2xhc3MuZGlzYWJsZWQtcm93XT1cImlzUm93RGlzYWJsZWQocm93KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIChjbGljayk9XCJ0YWJsZUNvbmZpZygpPy5jb2xDb25maWdbY29sSW5kZXhdPy5hY3Rpb24gJiYgdGFibGVDb25maWcoKT8uY29sQ29uZmlnW2NvbEluZGV4XT8uYWN0aW9uVHlwZSAhPT0gJ2NoZWNrYm94JyA/IHRhYmxlQ29uZmlnKCk/LmNvbENvbmZpZ1tjb2xJbmRleF0/LmFjdGlvbihjb2wpIDogbnVsbFwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIHJvdzsgbGV0IGNvbEluZGV4ID0gaW5kZXhcIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICB3aWR0aDogdGFibGVDb25maWcoKT8uY29sQ29uZmlnW2NvbEluZGV4XT8uc3R5bGU/LndpZHRoIHx8IHRhYmxlQ29uZmlnKCk/LmNvbEhlYWRlckNvbmZpZ1tjb2xJbmRleF0/LnN0eWxlPy53aWR0aCB8fCAnJ1xuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICBjbGFzcz1cInQtY29sLWNvbnRhaW5lclwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICd0LWNvbC1jb250YWluZXItaG92ZXInOiB0YWJsZUNvbmZpZygpLmNlbGxIb3ZlciB9XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwidC1jb2xcIlxuICAgICAgICAgICAgICBbc3R5bGVdPVwidGFibGVDb25maWcoKS5jb2xDb25maWdbY29sSW5kZXhdPy5zdHlsZVwiXG4gICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgIGN1cnNvcjogdGFibGVDb25maWcoKS5jb2xDb25maWdbY29sSW5kZXhdPy5hY3Rpb24gPyAncG9pbnRlcicgOiAnZGVmYXVsdCcsXG4gICAgICAgICAgICAgICAgJ2p1c3RpZnktY29udGVudCc6IHRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW2NvbEluZGV4XT8uc3R5bGU/Lmp1c3RpZnlDb250ZW50XG4gICAgICAgICAgICAgICAgICA/IHRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW2NvbEluZGV4XT8uc3R5bGU/Lmp1c3RpZnlDb250ZW50XG4gICAgICAgICAgICAgICAgICA6IHRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW2NvbEluZGV4XT8udHlwZSA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICAgID8gJ2ZsZXgtZW5kJ1xuICAgICAgICAgICAgICAgICAgOiAnc3BhY2UtYmV0d2VlbidcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cInRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW2NvbEluZGV4XT8udHlwZSAhPT0gJ2N1c3RvbScgJiYgdGFibGVDb25maWcoKS5jb2xDb25maWdbY29sSW5kZXhdPy50eXBlICE9PSAnYWN0aW9ucydcIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICBjb2xvcjogdGFibGVDb25maWcoKT8uY29sQ29uZmlnW2NvbEluZGV4XT8uc3R5bGU/LmNvbG9yIHx8ICcnLFxuICAgICAgICAgICAgICAnLS1jb2xsYXBzZWQtbGluZXMnOiBwcmV2aWV3TGluZXMoKSB8fCAzXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ2NvbGxhcHNlZC1jZWxsJzogY29sbGFwc2VDb2xJbmRleCgpID09IGNvbEluZGV4ICYmIGV4cGFuZGVkTWFwKClbcm93SW5kZXhdXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIGNsYXNzPVwidC1jb2wtdGV4dFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPCEtLSBSZW5kZXIgYXMgSFRNTCAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJsZUNvbmZpZygpLmNvbENvbmZpZ1tjb2xJbmRleF0/LnR5cGUgPT09ICdodG1sJzsgZWxzZSBwbGFpblRleHRcIj5cbiAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJjb2xcIj48L3NwYW4+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICBcbiAgICAgICAgICAgIDwhLS0gUmVuZGVyIGFzIHBsYWluIHRleHQgLS0+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3BsYWluVGV4dD5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgY29sIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICpuZ0lmPVwidGFibGVDb25maWcoKS5jb2xDb25maWdbY29sSW5kZXhdPy50eXBlID09PSAnY3VzdG9tJ1wiXG4gICAgICAgICAgICAgICAgW2N1c3RvbUNvbXBvbmVudF09XCJ0YWJsZUNvbmZpZygpLmNvbENvbmZpZ1tjb2xJbmRleF0uY29tcG9uZW50UmVmXCJcbiAgICAgICAgICAgICAgICBbZGF0YV09XCJjb2xcIlxuICAgICAgICAgICAgICAgIGN1c3RvbVRhYmxlQ2VsbFxuICAgICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bWlzLWFjdGlvbnMtY2VsbFxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ0YWJsZUNvbmZpZygpLmNvbENvbmZpZ1tjb2xJbmRleF0/LnR5cGUgPT09ICdhY3Rpb25zJ1wiXG4gICAgICAgICAgICAgICAgICBbY2VsbERhdGFdPVwiY29sXCJcbiAgICAgICAgICAgICAgICAgIFtjb25maWddPVwidGFibGVDb25maWcoKS5jb2xDb25maWdbY29sSW5kZXhdXCJcbiAgICAgICAgICAgICAgICAgIChhY3Rpb25DbGljayk9XCJvbkFjdGlvbkNsaWNrKCRldmVudCwgcm93SW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgJ2Rpc2FibGUtYWN0aW9ucyc6ICh0YWJsZUNvbmZpZygpLmNvbENvbmZpZ1tjb2xJbmRleF0/LmFjdGlvblR5cGUgPT09ICdjaGVja2JveCcgfHwgdGFibGVDb25maWcoKS5jb2xDb25maWdbY29sSW5kZXhdPy5hY3Rpb25UeXBlID09PSAncm93LWNvbGxhcHNlJykgJiYgaXNSb3dEaXNhYmxlZChyb3cpXG4gICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICA+PC9taXMtYWN0aW9ucy1jZWxsPlxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJ0YWJsZUNvbmZpZygpPy5jYW5FeHBhbmQgJiYgZXhwYW5kZWRJbmRleCgpID09PSBpXCIgY2xhc3M9XCJzdWItcm93XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN1YlRhYmxlRGF0YUxvYWRpbmcoKVwiPlxuICAgICAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgcGFkZGluZzogJzE2cHgnXG4gICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgIExvYWRpbmcuLi5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIFxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc3ViVGFibGVEYXRhTG9hZGluZygpICYmIHN1YlRhYmxlRGF0YSgpLmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgcGFkZGluZzogJzE2cHgnXG4gICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgIE5vIERhdGEgQXZhaWxhYmxlLi4uXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICBcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXN1YlRhYmxlRGF0YUxvYWRpbmcoKSAmJiBzdWJUYWJsZURhdGEoKS5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8c3ViLXRhYmxlIFtjb25maWddPVwic3ViVGFibGVjb25maWcoKVwiIFt0YWJsZURhdGFdPVwic3ViVGFibGVEYXRhKClcIj48L3N1Yi10YWJsZT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgaWQ9XCJwYWdpbmF0aW9uLWNvbnRlbnQtY29udGFpbmVyXCI+XG4gICAgQGlmKHNob3VsZFNob3dQYWdpbmF0aW9uKCkpe1xuICAgICAgPGRpdiBcbiAgICAgICAgaWQ9XCJwYWdpbmF0aW9uLWNvbnRhaW5lclwiXG4gICAgICA+XG4gICAgICAgIDxwIGlkPVwicGFnaW5hdGlvbi10ZXh0XCI+XG4gICAgICAgICAgU2hvd2luZ1xuICAgICAgICAgIHt7IChzZWxlY3RlZFBhZ2UoKSAtIDEpICogdGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnLnJvd3NQZXJQYWdlICsgMSB9fS17e1xuICAgICAgICAgICAgKHNlbGVjdGVkUGFnZSgpIC0gMSkgKiB0YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWcucm93c1BlclBhZ2UgKyB0YWJsZUxlbmd0aCgpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvZiB7eyB0YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWcudG90YWxOb09mUm93cyB9fSBpdGVtc1xuICAgICAgICA8L3A+XG4gICAgICAgIEBpZihzaG93UGFnZVNpemVEcm9wZG93bigpKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2Utc2l6ZS1zZWxlY3RvclwiPlxuICAgICAgICAgICAgPG1pcy1kcm9wZG93blxuICAgICAgICAgICAgICBbZGF0YV09XCJwYWdlU2l6ZU9wdGlvbnMoKVwiXG4gICAgICAgICAgICAgIFtzZWxlY3RlZEl0ZW1dPVwic2VsZWN0ZWRQYWdlU2l6ZU9wdGlvbigpXCJcbiAgICAgICAgICAgICAgW3dpZHRoXT1cIic5MHB4J1wiXG4gICAgICAgICAgICAgIFtoZWlnaHRdPVwiJzMycHgnXCJcbiAgICAgICAgICAgICAgW3NlYXJjaEVuYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbZHJvcGRvd25MaXN0SGVpZ2h0XT1cIicxMDBweCdcIlxuICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJwYWdlLXNpemUtZHJvcGRvd25cIlxuICAgICAgICAgICAgPjwvbWlzLWRyb3Bkb3duPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIDxkaXYgaWQ9XCJwYWdlcy1jb250YWluZXJcIj5cbiAgICAgICAgICA8c3BhbiAgIChjbGljayk9XCJzZWxlY3RlZFBhZ2UoKSA+IDEgJiYgdXBkYXRlU2VsZWN0ZWRQYWdlKHNlbGVjdGVkUGFnZSgpIC0gMSlcIiBjbGFzcz1cInBhZ2VcIiBbY2xhc3MucGFnZS1uYXYtaW5hY3RpdmVdPVwic2VsZWN0ZWRQYWdlKCkgPT09IDFcIj5cbiAgICAgICAgICAgIDxzdmcgZmlsbD1cIm5vbmVcIiBoZWlnaHQ9XCIxMFwiIHZpZXdCb3g9XCIwIDAgNyAxMFwiIHdpZHRoPVwiN1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICBjbGlwLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgICBkPVwiTTAuODU3NDA1IDUuNTYyOTVDMC44NTU3OTQgNS41NjEzOSAwLjg1NDE4OCA1LjU1OTgyIDAuODUyNTg4IDUuNTU4MjRDMC42OTU5NTUgNS40MDQwOCAwLjYxNzY0MSA1LjIwMjAzIDAuNjE3NjQ3IDQuOTk5OThDMC42MTc2NDEgNC43OTc5MyAwLjY5NTk1NSA0LjU5NTg4IDAuODUyNTg4IDQuNDQxNzJDMC44NTQxODggNC40NDAxNCAwLjg1NTc5NCA0LjQzODU4IDAuODU3NDA0IDQuNDM3MDJMNS4xMzA2NiAwLjIzMTIzMUM1LjQ0MzkyIC0wLjA3NzA3NzEgNS45NTE4IC0wLjA3NzA3NzEgNi4yNjUwNiAwLjIzMTIzMUM2LjU3ODMxIDAuNTM5NTQgNi41NzgzMSAxLjAzOTQxIDYuMjY1MDYgMS4zNDc3MkwyLjU1NDIgNC45OTk5OEw2LjI2NTA2IDguNjUyMjVDNi41NzgzMSA4Ljk2MDU1IDYuNTc4MzEgOS40NjA0MiA2LjI2NTA2IDkuNzY4NzNDNS45NTE4IDEwLjA3NyA1LjQ0MzkyIDEwLjA3NyA1LjEzMDY2IDkuNzY4NzNMMC44NTc0MDUgNS41NjI5NVpcIlxuICAgICAgICAgICAgICAgIGZpbGw9XCIjMTgxRjMzXCJcbiAgICAgICAgICAgICAgICBmaWxsLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwhLS0gUGFnZSBudW1iZXJzIChvbmx5IHNob3cgaWYgZGlzYWJsZVBhZ2VKdW1waW5nIGlzIGZhbHNlKSAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnPy5kaXNhYmxlUGFnZUp1bXBpbmdcIj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcGFnZU51bWJlciBvZiBwYWdlcygpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ1cGRhdGVTZWxlY3RlZFBhZ2UocGFnZU51bWJlcilcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwYWdlTnVtYmVyICE9IDBcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAncGFnZS1hY3RpdmUnOiBwYWdlTnVtYmVyID09PSBzZWxlY3RlZFBhZ2UoKSB9XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwicGFnZSBwYWdlLWp1bXBpbmctZW5hYmxlZFwiXG4gICAgICAgICAgICAgICAgPnt7IHBhZ2VOdW1iZXIgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJwYWdlTnVtYmVyID09IDBcIiBjbGFzcz1cInBhZ2Utc2VwZXJhdG9yXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IFtuZ1N0eWxlXT1cInsgZGlzcGxheTogJ2ZsZXgnIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkb3RcIiBbbmdTdHlsZV09XCJ7ICdtYXJnaW4tcmlnaHQnOiAnNHB4JyB9XCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRvdFwiIFtuZ1N0eWxlXT1cInsgJ21hcmdpbi1yaWdodCc6ICc0cHgnIH1cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZG90XCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgXG4gICAgICAgICAgPHNwYW4gW2NsYXNzLnBhZ2UtbmF2LWluYWN0aXZlXT1cInNlbGVjdGVkUGFnZSgpID09PSB0YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWc/Lm5vT2ZQYWdlc1wiXG4gICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGVkUGFnZSgpIDwgdGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnPy5ub09mUGFnZXMgJiYgdXBkYXRlU2VsZWN0ZWRQYWdlKHNlbGVjdGVkUGFnZSgpICsgMSlcIiBjbGFzcz1cInBhZ2VcIj5cbiAgICAgICAgICAgIDxzdmcgZmlsbD1cIm5vbmVcIiBoZWlnaHQ9XCIxMFwiIHZpZXdCb3g9XCIwIDAgNyAxMFwiIHdpZHRoPVwiN1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICBjbGlwLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgICBkPVwiTTYuMTQyNiA1LjU2Mjk1QzYuMTQ0MjEgNS41NjEzOSA2LjE0NTgxIDUuNTU5ODIgNi4xNDc0MSA1LjU1ODI0QzYuMzA0MDUgNS40MDQwOCA2LjM4MjM2IDUuMjAyMDMgNi4zODIzNiA0Ljk5OTk4QzYuMzgyMzYgNC43OTc5MyA2LjMwNDA1IDQuNTk1ODggNi4xNDc0MSA0LjQ0MTcyQzYuMTQ1ODEgNC40NDAxNCA2LjE0NDIxIDQuNDM4NTggNi4xNDI2IDQuNDM3MDJMMS44NjkzNCAwLjIzMTIzMUMxLjU1NjA4IC0wLjA3NzA3NzEgMS4wNDgyIC0wLjA3NzA3NzEgMC43MzQ5NDIgMC4yMzEyMzFDMC40MjE2ODggMC41Mzk1NCAwLjQyMTY4OCAxLjAzOTQxIDAuNzM0OTQyIDEuMzQ3NzJMNC40NDU4IDQuOTk5OThMMC43MzQ5NDEgOC42NTIyNUMwLjQyMTY4NiA4Ljk2MDU1IDAuNDIxNjg2IDkuNDYwNDIgMC43MzQ5NDEgOS43Njg3M0MxLjA0ODIgMTAuMDc3IDEuNTU2MDggMTAuMDc3IDEuODY5MzQgOS43Njg3M0w2LjE0MjYgNS41NjI5NVpcIlxuICAgICAgICAgICAgICAgIGZpbGw9XCIjMTgxRjMzXCJcbiAgICAgICAgICAgICAgICBmaWxsLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
917
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFNVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFFBQVEsRUFJVCxNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDWnJDLCtDQU1DO0lBSkMseU5BQWtCLG1DQUE0QixLQUFDO0lBSWhELGlCQUFtQjs7O0lBRGxCLEFBREEsZ0VBQTJDLG9DQUNmOzs7SUEwQnhCLDZCQUFrRztJQUNoRyxZQUNGO0lBQUEsaUJBQUk7OztJQURGLGNBQ0Y7SUFERSx5RkFDRjs7O0lBTUUsMkJBQXFGOzs7O0lBTHZGLGdDQUlDO0lBSEMsa05BQVMsMkNBQWlDLEVBQUUsc0NBQTRCLHdCQUFFLHdCQUF3QixLQUFDO0lBSW5HLCtFQUE4RTs7SUFDOUUsK0JBQStGO0lBQzdGLDJCQUtFO0lBRU4sQUFERSxpQkFBTSxFQUNEOzs7OztJQVRFLGNBQWtEO0lBQWxELG1IQUFrRDs7OztJQVUzRCxnQ0FJQztJQUhDLGdLQUFTLHVCQUFnQix3QkFBRSx3QkFBd0IsS0FBQztJQUlwRCxtQ0FBNkQ7SUFDL0QsaUJBQU87OztJQURTLGNBQStCO0lBQS9CLG9EQUErQjs7OztJQUUvQyxnQ0FNb0I7SUFEbEIsZ01BQWMsMkJBQW9CLEtBQUM7SUFFckMsaUJBQU87Ozs7SUFITCxBQURBLEFBREEsQUFEQSxxQ0FBb0Isb0NBQ1EseUNBQ0sseURBQ2dCOzs7O0lBSXJELHdGQUFz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SjtZQUdsSixlQUFvQztZQUFwQyxzREFBb0M7WUFNVixjQUFpQztZQUFqQyxnR0FBaUM7WUFrRGhCLGVBQWdCO1lBQWhCLHlDQUFnQjtZQXFHM0QsY0FzRUM7WUF0RUQscURBc0VDOzs7aUZENU5RLGNBQWM7Y0FMMUIsU0FBUzsyQkFDRSxXQUFXOzBDQXNCQSxNQUFNO2tCQUExQixTQUFTO21CQUFDLFFBQVE7WUFDVyxVQUFVO2tCQUF2QyxZQUFZO21CQUFDLGNBQWM7WUFpRFIsS0FBSztrQkFBeEIsU0FBUzttQkFBQyxPQUFPOztrRkFwRVAsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIFF1ZXJ5TGlzdCxcbiAgUmVuZGVyZXIyLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxuICBjb21wdXRlZCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICB1bnRyYWNrZWRcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEZpbHRlciwgVGFibGVGaWx0ZXJDb21wb25lbnQgfSBmcm9tIFwiLi9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgU29ydFN0YXRlIH0gZnJvbSBcIi4vc29ydC1pY29ucy5kaXJlY3RpdmVcIjtcbmltcG9ydCB7IGVmZmVjdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBEcm9wZG93bkl0ZW0gfSBmcm9tIFwibWlzLWNyeXN0YWwtZGVzaWduLXN5c3RlbS9kcm9wZG93blwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwibWlzLXRhYmxlXCIsXG4gIHRlbXBsYXRlVXJsOiBcInRhYmxlLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1widGFibGUuY29tcG9uZW50LmNzc1wiXVxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcbiAgLy8gSW5pdGlhbGl6ZSB3aXRoIC0xIHRvIGluZGljYXRlIG5vIHJvdyBpcyBjb2xvcmVkIGF0IHRoZSBiZWdpbm5pbmdcbiAgYWN0aXZlUm93SW5kZXggPSBzaWduYWw8bnVtYmVyW10+KFtdKTtcbiAgaGFzQ2hlY2tib3hBY3Rpb25zID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgc2VsZWN0QWxsQ2hlY2tib3ggPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8vIEZpbHRlciByZWxhdGVkIHZhcmlhYmxlc1xuICBzaG93RmlsdGVyID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgZmlsdGVyTmFtZSA9IHNpZ25hbDxzdHJpbmc+KFwiXCIpO1xuICBmaWx0ZXJEYXRhID0gc2lnbmFsPEFycmF5PEZpbHRlcj4+KFtdKTtcbiAgZmlsdGVyQ29udGFpbmVyU3R5bGVzID0gc2lnbmFsPGFueT4oe30pO1xuICBhcHBsaWVkRmlsdGVycyA9IHNpZ25hbDx7IFtrZXk6IHN0cmluZ106IEFycmF5PHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0+IH0+KHt9KTtcbiAgXG4gIC8vIENvbnZlcnQgb3V0cHV0cyB0byBzaWduYWwtYmFzZWQgb3V0cHV0c1xuICBmaWx0ZXJzVXBkYXRlZCA9IG91dHB1dDx7XG4gICAgW2tleTogc3RyaW5nXTogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfT47XG4gIH0+KCk7XG5cbiAgQFZpZXdDaGlsZChcImZpbHRlclwiKSBmaWx0ZXI6IFRhYmxlRmlsdGVyQ29tcG9uZW50IHwgYW55O1xuICBAVmlld0NoaWxkcmVuKFwiY29sSGVhZGVyUmVmXCIpIGNvbEhlYWRlcnM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPiB8IGFueTtcblxuICAvLyBQYWdpbmF0aW9uIHJlbGF0ZWQgdmFyaWFibGVzXG4gIHBhZ2VzID0gc2lnbmFsPEFycmF5PG51bWJlcj4+KFtdKTtcbiAgdGFibGVMZW5ndGggPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgc2VsZWN0ZWRQYWdlID0gc2lnbmFsPG51bWJlcj4oMSk7IC8vIEludGVybmFsIHN0YXRlIGZvciBzZWxlY3RlZCBwYWdlIC0gdGhpcyBpcyB0aGUgc291cmNlIG9mIHRydXRoXG4gIHByaXZhdGUgaXNJbnRlcm5hbFBhZ2VVcGRhdGUgPSBmYWxzZTsgLy8gRmxhZyB0byBwcmV2ZW50IGVmZmVjdCBmcm9tIG92ZXJ3cml0aW5nIGR1cmluZyB1c2VyLWluaXRpYXRlZCB1cGRhdGVzXG4gIFxuICAvKipcbiAgICogTEVHQUNZIENPREUgV09SS0FST1VORDogVHJhY2sgdXNlci1pbml0aWF0ZWQgcGFnZSBzZWxlY3Rpb25zIHRvIHByZXZlbnQgY29uZmlnIG92ZXJ3cml0ZXMuXG4gICAqIFxuICAgKiBTb21lIGxlZ2FjeSBwYXJlbnQgY29tcG9uZW50cyBkb24ndCB1cGRhdGUgdGFibGVDb25maWcucGFnaW5hdGlvbkNvbmZpZy5zZWxlY3RlZFBhZ2Ugd2hlblxuICAgKiB0aGUgcGFnZSBjaGFuZ2VzLiBUaGlzIGNhdXNlcyB0aGUgZWZmZWN0IHRvIG92ZXJ3cml0ZSB1c2VyIHNlbGVjdGlvbnMgd2l0aCBzdGFsZSBjb25maWcgdmFsdWVzLlxuICAgKiBcbiAgICogSURFQUwgU09MVVRJT046IFBhcmVudCBjb21wb25lbnRzIHNob3VsZCBhbHdheXMgdXBkYXRlIGNvbmZpZy5zZWxlY3RlZFBhZ2UgaW4gdGhlaXJcbiAgICogcGFnZVNlbGVjdGVkIGV2ZW50IGhhbmRsZXIuIFRoaXMgd29ya2Fyb3VuZCBwcm90ZWN0cyB1c2VyIGFjdGlvbnMgdW50aWwgbGVnYWN5IGNvZGVcbiAgICogY2FuIGJlIHVwZGF0ZWQuXG4gICAqIFxuICAgKiBUT0RPOiBSZW1vdmUgdGhpcyB3b3JrYXJvdW5kIG9uY2UgYWxsIHBhcmVudCBjb21wb25lbnRzIHByb3Blcmx5IHVwZGF0ZSBjb25maWcuc2VsZWN0ZWRQYWdlXG4gICAqL1xuICBwcml2YXRlIHVzZXJTZWxlY3RlZFBhZ2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBcbiAgcGFnZVNlbGVjdGVkID0gb3V0cHV0PG51bWJlcj4oKTtcbiAgcGFnZVNpemVDaGFuZ2VkID0gb3V0cHV0PG51bWJlcj4oKTtcbiAgcGFnZVNpemVPcHRpb25zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMudGFibGVDb25maWcoKT8ucGFnaW5hdGlvbkNvbmZpZztcbiAgICBpZiAoIWNvbmZpZz8ucGFnZVNpemVzIHx8ICFBcnJheS5pc0FycmF5KGNvbmZpZy5wYWdlU2l6ZXMpIHx8ICFjb25maWcucGFnZVNpemVzPy5sZW5ndGgpIHJldHVybiBbXTtcbiAgXG4gICAgcmV0dXJuIGNvbmZpZy5wYWdlU2l6ZXM/Lm1hcChvcHRpb24gPT4gKHtcbiAgICAgIGxhYmVsOiBvcHRpb24/LnRvU3RyaW5nKCkgfHwgJycsXG4gICAgICB2YWx1ZTogb3B0aW9uPy50b1N0cmluZygpIHx8ICcnLFxuICAgIH0pKSB8fCBbXTtcbiAgfSk7XG5cbiAgc2hvd1BhZ2VTaXplRHJvcGRvd24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuICEhdGhpcy50YWJsZUNvbmZpZygpPy5wYWdpbmF0aW9uQ29uZmlnPy5zaG93UGFnZVNpemVEcm9wZG93bjtcbiAgfSk7XG5cbiAgc2VsZWN0ZWRQYWdlU2l6ZU9wdGlvbiA9IHNpZ25hbDxEcm9wZG93bkl0ZW0+KHsgbGFiZWw6IFwiXCIsIHZhbHVlOiBcIlwiIH0pO1xuXG4gIC8vIENvbnZlcnQgaW5wdXRzIHRvIHNpZ25hbC1iYXNlZCBpbnB1dHNcbiAgdGFibGVDb25maWcgPSBpbnB1dDxUYWJsZUNvbmZpZz4oKTtcbiAgc3ViVGFibGVjb25maWcgPSBpbnB1dDxUYWJsZUNvbmZpZz4oKTtcbiAgdGFibGVEYXRhTG9hZGluZyA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIGV4cGFuZGVkSW5kZXggPSBpbnB1dDxudW1iZXI+KCk7XG4gIHRhYmxlRGF0YSA9IGlucHV0PEFycmF5PEFycmF5PGFueT4+PihbXSk7XG4gIHN1YlRhYmxlRGF0YSA9IGlucHV0PEFycmF5PEFycmF5PGFueT4+PihbXSk7XG4gIHN1YlRhYmxlRGF0YUxvYWRpbmcgPSBpbnB1dDxib29sZWFuPigpO1xuICBjdXJyZW50U29ydCA9IGlucHV0PHtjb2x1bW46IHN0cmluZywgZGlyZWN0aW9uOiAnQVNDJyB8ICdERVNDJyB8ICcnfSB8IG51bGw+KCk7XG4gIEBWaWV3Q2hpbGQoXCJ0YWJsZVwiKSB0YWJsZTogRWxlbWVudFJlZiB8IGFueTtcbiAgY29sbGFwc2VDb2xJbmRleCA9IHNpZ25hbDxudW1iZXI+KC0xKTtcbiAgcHJldmlld0xpbmVzID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHJvd0NvbGxhcHNlQ29uZmlnSW5kZXggPSBzaWduYWw8bnVtYmVyPigtMSk7XG4gIGV4cGFuZGVkTWFwID0gc2lnbmFsPFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+Pih7fSk7XG5cblxuICAvLyBTb3J0aW5nIHJlbGF0ZWQgcHJvcGVydGllc1xuICBtdWx0aUNvbHVtblNvcnQgPSBzaWduYWw8U29ydFN0YXRlW10+KFtdKTtcbiAgc29ydENoYW5nZSA9IG91dHB1dDxTb3J0U3RhdGU+KCk7XG4gIGhlYWRlckFjdGlvbiA9IG91dHB1dDx7IHR5cGU6IHN0cmluZzsgcGF5bG9hZD86IGFueSB9PigpO1xuXG4gIFxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICB0aGlzLnRhYmxlTGVuZ3RoLnNldCh0aGlzLnRhYmxlRGF0YSgpPy5sZW5ndGggPz8gMCk7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLnRhYmxlQ29uZmlnKCk7XG4gICAgICAgIFxuICAgICAgICBpZiAoY29uZmlnICYmIGNvbmZpZy5hY3RpdmVSb3dJbmRleCAhPT0gbnVsbCAmJiBjb25maWcuYWN0aXZlUm93SW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgYWN0aXZlUm93SW5kZXggPSBjb25maWcuYWN0aXZlUm93SW5kZXg7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVJvd0luZGV4LnNldChBcnJheS5pc0FycmF5KGFjdGl2ZVJvd0luZGV4KSA/IGFjdGl2ZVJvd0luZGV4IDogW2FjdGl2ZVJvd0luZGV4XSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5yb3dDb2xsYXBzZUNvbmZpZ0luZGV4KCkgIT09IC0xKSB7XG4gICAgICAgICAgICAgdGhpcy5idWlsZEV4cGFuZGVkTWFwKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAtLS0gUEFHSU5BVElPTiBQQUdFIEFSUkFZIExPR0lDIChNT1ZFRC9SRVBMQUNFRCBpbml0aWFsaXplUGFnaW5hdGlvbikgLS0tXG4gICAgICAgIGNvbnN0IGxlbiA9IGNvbmZpZz8ucGFnaW5hdGlvbkNvbmZpZz8ubm9PZlBhZ2VzO1xuICAgICAgICBjb25zdCBkaXNhYmxlUGFnZUp1bXBpbmcgPSBjb25maWc/LnBhZ2luYXRpb25Db25maWc/LmRpc2FibGVQYWdlSnVtcGluZztcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBMRUdBQ1kgQ09ERSBXT1JLQVJPVU5EOiBQcm90ZWN0IHVzZXItaW5pdGlhdGVkIHBhZ2Ugc2VsZWN0aW9ucyBmcm9tIGNvbmZpZyBvdmVyd3JpdGVzLlxuICAgICAgICAgKiBcbiAgICAgICAgICogV2hlbiB1c2VycyBjbGljayBwYWdpbmF0aW9uIGFycm93cywgd2UgdXBkYXRlIGludGVybmFsIHN0YXRlIGltbWVkaWF0ZWx5LiBIb3dldmVyLFxuICAgICAgICAgKiBzb21lIGxlZ2FjeSBwYXJlbnQgY29tcG9uZW50cyBkb24ndCB1cGRhdGUgY29uZmlnLnNlbGVjdGVkUGFnZSwgY2F1c2luZyB0aGUgZWZmZWN0XG4gICAgICAgICAqIHRvIHJ1biB3aXRoIHN0YWxlIGNvbmZpZyB2YWx1ZXMgdGhhdCB3b3VsZCBvdmVyd3JpdGUgdGhlIHVzZXIncyBzZWxlY3Rpb24uXG4gICAgICAgICAqIFxuICAgICAgICAgKiBTdHJhdGVneTogVHJlYXQgaW50ZXJuYWwgc3RhdGUgYXMgc291cmNlIG9mIHRydXRoIGZvciB1c2VyLWluaXRpYXRlZCBjaGFuZ2VzLlxuICAgICAgICAgKiBPbmx5IHN5bmMgZnJvbSBjb25maWcgd2hlbiBpdCdzIHNhZmUgKG5vdCBhIHVzZXItc2VsZWN0ZWQgcGFnZSkuXG4gICAgICAgICAqIFxuICAgICAgICAgKiBJREVBTDogUGFyZW50IHNob3VsZCBhbHdheXMgdXBkYXRlIGNvbmZpZy5zZWxlY3RlZFBhZ2UgaW4gcGFnZVNlbGVjdGVkIGhhbmRsZXIuXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdCBjdXJyZW50U2VsZWN0ZWRQYWdlID0gdGhpcy5zZWxlY3RlZFBhZ2UoKTtcbiAgICAgICAgY29uc3QgY29uZmlnU2VsZWN0ZWRQYWdlID0gY29uZmlnPy5wYWdpbmF0aW9uQ29uZmlnPy5zZWxlY3RlZFBhZ2U7XG4gICAgICAgIGNvbnN0IGlzVXNlclNlbGVjdGVkUGFnZSA9IHRoaXMudXNlclNlbGVjdGVkUGFnZSAhPT0gbnVsbCAmJiBjdXJyZW50U2VsZWN0ZWRQYWdlID09PSB0aGlzLnVzZXJTZWxlY3RlZFBhZ2U7XG4gICAgICAgIFxuICAgICAgICBpZiAoIXRoaXMuaXNJbnRlcm5hbFBhZ2VVcGRhdGUpIHtcbiAgICAgICAgICAvLyBPbmx5IHN5bmMgZnJvbSBjb25maWcgaWY6XG4gICAgICAgICAgLy8gMS4gQ29uZmlnIGhhcyBhIHNlbGVjdGVkUGFnZSB2YWx1ZVxuICAgICAgICAgIC8vIDIuIEN1cnJlbnQgcGFnZSBpcyBOT1QgYSB1c2VyLWluaXRpYXRlZCBzZWxlY3Rpb24gKHByb3RlY3QgdXNlciBhY3Rpb25zKVxuICAgICAgICAgIC8vIDMuIENvbmZpZyB2YWx1ZSBpcyB2YWxpZCBhbmQgZGlmZmVyZW50IGZyb20gY3VycmVudFxuICAgICAgICAgIGlmIChjb25maWdTZWxlY3RlZFBhZ2UgIT09IHVuZGVmaW5lZCAmJiBjb25maWdTZWxlY3RlZFBhZ2UgIT09IG51bGwgJiYgIWlzVXNlclNlbGVjdGVkUGFnZSkge1xuICAgICAgICAgICAgY29uc3QgbWF4UGFnZXMgPSBjb25maWc/LnBhZ2luYXRpb25Db25maWc/Lm5vT2ZQYWdlcyB8fCAxO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRTZWxlY3RlZFBhZ2UgIT09IGNvbmZpZ1NlbGVjdGVkUGFnZSAmJiBcbiAgICAgICAgICAgICAgICBjb25maWdTZWxlY3RlZFBhZ2UgPj0gMSAmJiBcbiAgICAgICAgICAgICAgICBjb25maWdTZWxlY3RlZFBhZ2UgPD0gbWF4UGFnZXMpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFBhZ2Uuc2V0KGNvbmZpZ1NlbGVjdGVkUGFnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIC8vIElmIGNvbmZpZyBkb2Vzbid0IGhhdmUgc2VsZWN0ZWRQYWdlLCBvbmx5IGluaXRpYWxpemUgaW52YWxpZCBzdGF0ZVxuICAgICAgICAgIC8vIE5ldmVyIHJlc2V0IGEgdmFsaWQgcGFnZSBudW1iZXIsIGVzcGVjaWFsbHkgdXNlci1zZWxlY3RlZCBvbmVzXG4gICAgICAgICAgaWYgKChjb25maWdTZWxlY3RlZFBhZ2UgPT09IHVuZGVmaW5lZCB8fCBjb25maWdTZWxlY3RlZFBhZ2UgPT09IG51bGwpICYmIFxuICAgICAgICAgICAgICAhaXNVc2VyU2VsZWN0ZWRQYWdlICYmXG4gICAgICAgICAgICAgIChjdXJyZW50U2VsZWN0ZWRQYWdlID09PSAwIHx8IGN1cnJlbnRTZWxlY3RlZFBhZ2UgPCAxKSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFBhZ2Uuc2V0KDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICAvLyBDbGVhciB1c2VyIHNlbGVjdGlvbiB0cmFja2luZyB3aGVuIGNvbmZpZyBtYXRjaGVzIHVzZXIncyBzZWxlY3Rpb25cbiAgICAgICAgICAvLyBUaGlzIGluZGljYXRlcyBwYXJlbnQgaGFzIHVwZGF0ZWQgY29uZmlnIGNvcnJlY3RseVxuICAgICAgICAgIGlmIChjb25maWdTZWxlY3RlZFBhZ2UgPT09IHRoaXMudXNlclNlbGVjdGVkUGFnZSkge1xuICAgICAgICAgICAgdGhpcy51c2VyU2VsZWN0ZWRQYWdlID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIFJlc2V0IHRoZSBmbGFnIGFmdGVyIHByb2Nlc3NpbmdcbiAgICAgICAgdGhpcy5pc0ludGVybmFsUGFnZVVwZGF0ZSA9IGZhbHNlO1xuICAgICAgICBcbiAgICAgICAgLy8gT25seSBydW4gaWYgcGFnaW5hdGlvbiBpcyBjb25maWd1cmVkIGFuZCBwYWdlIGp1bXBpbmcgaXMgZW5hYmxlZFxuICAgICAgICBpZiAobGVuICYmIGxlbiA+IDAgJiYgIWRpc2FibGVQYWdlSnVtcGluZykge1xuICAgICAgICAgICAgLy8gUmVhZCB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIHNlbGVjdGVkIHBhZ2UgZm9yIGNhbGN1bGF0aW5nIHRoZSBwYWdlcyBhcnJheS5cbiAgICAgICAgICAgIC8vIFNpbmNlIHRoaXMgcnVucyBvbiBldmVyeSBjb25maWcgY2hhbmdlLCB3ZSByZWx5IG9uIHRoZSB2YWx1ZSBzZXQgXG4gICAgICAgICAgICAvLyBieSB1cGRhdGVTZWxlY3RlZFBhZ2UoKSBvciBzeW5jZWQgZnJvbSBjb25maWcgYWJvdmUuXG4gICAgICAgICAgICBjb25zdCBwYWdlTnVtYmVyID0gdGhpcy5zZWxlY3RlZFBhZ2UoKTsgXG5cbiAgICAgICAgICAgIGlmIChsZW4gPD0gNykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1BhZ2VzID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3UGFnZXMucHVzaChpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlcy5zZXQobmV3UGFnZXMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAocGFnZU51bWJlciAtIDIgPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2VzLnNldChbMSwgMiwgMywgNCwgMCwgbGVuXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYWdlTnVtYmVyIC0gMiA+IDEgJiYgcGFnZU51bWJlciArIDIgPCBsZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlcy5zZXQoWzEsIDAsIHBhZ2VOdW1iZXIgLSAxLCBwYWdlTnVtYmVyLCBwYWdlTnVtYmVyICsgMSwgMCwgbGVuXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYWdlTnVtYmVyICsgMiA+PSBsZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlcy5zZXQoWzEsIDAsIGxlbiAtIDMsIGxlbiAtIDIsIGxlbiAtIDEsIGxlbl0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyAtLS0gRU5EIFBBR0lOQVRJT04gUEFHRSBBUlJBWSBMT0dJQyAtLS1cblxuICAgICAgICBcbiAgICAgICAgaWYoY29uZmlnPy5wYWdpbmF0aW9uQ29uZmlnPy5zaG93UGFnZVNpemVEcm9wZG93bikge1xuICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnBhZ2VTaXplT3B0aW9ucygpO1xuICAgICAgICAgIGNvbnN0IHJvd3NQZXJQYWdlID0gdGhpcy50YWJsZUNvbmZpZygpPy5wYWdpbmF0aW9uQ29uZmlnPy5yb3dzUGVyUGFnZTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob3B0aW9ucykgfHwgIXJvd3NQZXJQYWdlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUGFnZVNpemVPcHRpb24uc2V0KHsgbGFiZWw6IFwiXCIsIHZhbHVlOiBcIlwiIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IG9wdGlvbnMuZmluZChvcHQgPT4gb3B0Py52YWx1ZSA9PT0gcm93c1BlclBhZ2UudG9TdHJpbmcoKSk7XG4gICAgICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUGFnZVNpemVPcHRpb24uc2V0KHNlbGVjdGVkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gSWYgY29uZmlndXJlZCByb3dzUGVyUGFnZSBpcyBub3QgYW1vbmcgb3B0aW9ucywgcGljayB0aGUgZmxvb3IgdmFsdWUgYW5kIG5vdGlmeSBwYXJlbnRcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IE51bWJlcihyb3dzUGVyUGFnZSk7XG4gICAgICAgICAgICAvL1NvcnQgdGhlIG9wdGlvbnNcbiAgICAgICAgICAgIGNvbnN0IHNvcnRlZCA9IG9wdGlvbnNcbiAgICAgICAgICAgICAgLm1hcChvcHQgPT4gKHsgb3B0LCBudW06IE51bWJlcihvcHQ/LnZhbHVlKSB9KSlcbiAgICAgICAgICAgICAgLmZpbHRlcigoeyBudW0gfSkgPT4gTnVtYmVyLmlzRmluaXRlKG51bSkpXG4gICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLm51bSAtIGIubnVtKTtcblxuICAgICAgICAgICAgbGV0IGZsb29yT3B0aW9uID0gc29ydGVkWzBdPy5vcHQ7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gc29ydGVkLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgIGlmIChzb3J0ZWRbaV0ubnVtIDw9IHRhcmdldCkge1xuICAgICAgICAgICAgICAgIGZsb29yT3B0aW9uID0gc29ydGVkW2ldLm9wdDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlRoZSBjb25maWd1cmVkIHJvd3NQZXJQYWdlIHdhcyBub3QgbWF0Y2hlZCB0byBhbnkgb2YgdGhlIHBhZ2VTaXplcyBzZW50IGluIHRoZSBwYWdpbmF0aW9uQ29uZmlnLiBTZWxlY3RpbmcgdGhlIG5lYXJlc3QgZmxvb3IgdmFsdWUgYW1vbmcgdGhlIGF2YWlsYWJsZSBwYWdlU2l6ZXMuXCIpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFBhZ2VTaXplT3B0aW9uLnNldChmbG9vck9wdGlvbik7XG4gICAgICAgICAgICB0aGlzLm9uUGFnZVNpemVDaGFuZ2UoZmxvb3JPcHRpb24pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiTm8gcGFnZSBzaXplIG9wdGlvbnMgYXZhaWxhYmxlLlwiKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSk7XG5cbiAgICAvLyBSZWFjdGl2ZSBoZWlnaHQgY2FsY3VsYXRpb246IG1haW50YWlucyBleGFjdCBvbGQgYmVoYXZpb3IgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICAvLyBPbGQgY29kZTogaGVpZ2h0IC0gNTYgKyBcInB4XCIgKGZsYXdlZCBmb3IgcGVyY2VudGFnZXMsIGJ1dCB3ZSBtYWludGFpbiBpdClcbiAgICAvLyBOb3RlOiBFZmZlY3QgbXVzdCBiZSBpbiBjb25zdHJ1Y3Rvciwgbm90IGxpZmVjeWNsZSBob29rcyAoTkcwMjAzIGVycm9yIG90aGVyd2lzZSlcbiAgICAvLyBlZmZlY3QoKCkgPT4ge1xuICAgIC8vICAgY29uc3QgY29uZmlnID0gdGhpcy50YWJsZUNvbmZpZygpO1xuICAgIC8vICAgaWYgKCFjb25maWc/LnBhZ2luYXRpb25Db25maWcgfHwgIXRoaXMudGFibGU/Lm5hdGl2ZUVsZW1lbnQpIHJldHVybjtcbiAgICBcbiAgICAvLyAgIGNvbnN0IGhlaWdodCA9IGNvbmZpZy5oZWlnaHQ7XG4gICAgLy8gICAvLyBPbGQgYmVoYXZpb3I6IGhlaWdodCAtIDU2ICsgXCJweFwiIChtYWludGFpbnMgdGhlIGZsYXcgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpXG4gICAgLy8gICBjb25zdCByZXN1bHQgPSAoaGVpZ2h0IGFzIGFueSkgLSA1NjtcbiAgICAvLyAgIGNvbnN0IGZpbmFsSGVpZ2h0ID0gcmVzdWx0ICsgXCJweFwiO1xuICAgIC8vICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnRhYmxlLm5hdGl2ZUVsZW1lbnQsIFwiaGVpZ2h0XCIsIGZpbmFsSGVpZ2h0KTtcbiAgICAvLyB9KTtcbiAgfVxuXG5cbiAgLy8gRnVuY3Rpb24gdG8gaGFuZGxlIHJvdyBjbGlja1xuICBzZWxlY3RSb3coaW5kZXg6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmhhc0NoZWNrYm94QWN0aW9ucygpKSByZXR1cm47XG4gICAgdGhpcy5hY3RpdmVSb3dJbmRleC5zZXQoW2luZGV4XSk7IC8vIFNldCB0aGUgc2VsZWN0ZWQgaW5kZXggdG8gdGhlIGNsaWNrZWQgcm93J3MgaW5kZXhcbiAgICAhIXRoaXMudGFibGVDb25maWcoKS5yb3dDb25maWcuYWN0aW9uICYmIHRoaXMudGFibGVDb25maWcoKS5yb3dDb25maWcuYWN0aW9uKGluZGV4KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaGFzQ2hlY2tib3hBY3Rpb25zLnNldCh0aGlzLnRhYmxlQ29uZmlnKCkuY29sQ29uZmlnPy5zb21lKGNvbCA9PiBjb2wudHlwZSA9PT0gXCJhY3Rpb25zXCIgJiYgY29sLmFjdGlvblR5cGUgPT09IFwiY2hlY2tib3hcIikpO1xuICAgIHRoaXMudGFibGVMZW5ndGguc2V0KCEhdGhpcy50YWJsZURhdGEoKSA/IHRoaXMudGFibGVEYXRhKCkubGVuZ3RoIDogMCk7XG4gICAgdGhpcy5pbml0aWFsaXplRmlsdGVycygpO1xuICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnKCkucGFnaW5hdGlvbkNvbmZpZykge1xuICAgICAgdGhpcy5pbml0aWFsaXplUGFnaW5hdGlvbigpO1xuICAgIH1cbiAgICBpZiAodGhpcy50YWJsZUNvbmZpZygpLmNhblNjcm9sbEhvcml6b250YWxseSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBOb3RlOiBXZSBjYW4ndCBkaXJlY3RseSBtb2RpZnkgaW5wdXQgc2lnbmFscywgdGhpcyBzaG91bGQgYmUgaGFuZGxlZCBieSBwYXJlbnQgY29tcG9uZW50XG4gICAgfVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBldmVudCA9PiB7XG4gICAgICBpZiAodGhpcy5maWx0ZXIpIHtcbiAgICAgICAgbGV0IGlzQ2hlY2tCb3hDbGlja2VkID0gdHJ1ZTtcbiAgICAgICAgbGV0IHRhcmdldEVsZW1lbnQgPSBldmVudC50YXJnZXQgYXMgSFRNTFNwYW5FbGVtZW50O1xuICAgICAgICBpZiAodGFyZ2V0RWxlbWVudC5jbGFzc05hbWUgPT09IFwiY2hlY2ttYXJrXCIpIHtcbiAgICAgICAgICBpc0NoZWNrQm94Q2xpY2tlZCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5zaG93RmlsdGVyLnNldCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaXNDbGlja0luc2lkZUVsZW1lbnQgPSB0aGlzLmZpbHRlci5jb250YWluZXIubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpO1xuICAgICAgICBpZiAoIWlzQ2xpY2tJbnNpZGVFbGVtZW50ICYmICFpc0NoZWNrQm94Q2xpY2tlZCkge1xuICAgICAgICAgIHRoaXMudG9nZ2xlRmlsdGVyKHRoaXMuZmlsdGVyTmFtZSgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gZmV0Y2ggY29sbGFwc2VDb2xJbmRleCBhbmQgcHJldmlld0xpbmVzIGlmIHByZXNlbnRcbiAgICB0aGlzLnJvd0NvbGxhcHNlQ29uZmlnSW5kZXguc2V0KHRoaXMudGFibGVDb25maWcoKT8uY29sQ29uZmlnPy5maW5kSW5kZXgoXG4gICAgICBjb2wgPT4gY29sLnR5cGUgPT09ICdhY3Rpb25zJyAmJiBjb2wuYWN0aW9uVHlwZSA9PT0gJ3Jvdy1jb2xsYXBzZSdcbiAgICApKTtcbiAgICBpZiAodGhpcy5yb3dDb2xsYXBzZUNvbmZpZ0luZGV4KCkgIT09IC0xKSB7XG4gICAgICB0aGlzLmNvbGxhcHNlQ29sSW5kZXguc2V0KHRoaXMudGFibGVDb25maWcoKS5jb2xDb25maWdbdGhpcy5yb3dDb2xsYXBzZUNvbmZpZ0luZGV4KCldLmNvbGxhcHNlQ29sdW1uSW5kZXggPz8gbnVsbCk7XG4gICAgICB0aGlzLnByZXZpZXdMaW5lcy5zZXQodGhpcy50YWJsZUNvbmZpZygpLmNvbENvbmZpZ1t0aGlzLnJvd0NvbGxhcHNlQ29uZmlnSW5kZXgoKV0ucHJldmlld0xpbmVzID8/IG51bGwpO1xuICAgICAgdGhpcy5idWlsZEV4cGFuZGVkTWFwKCk7XG4gICAgfVxuICB9XG5cbiAgYnVpbGRFeHBhbmRlZE1hcCgpOiB2b2lke1xuICAgIGNvbnN0IG5ld0V4cGFuZGVkTWFwOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuICAgIGNvbnN0IGNvbGxhcHNlSW5kZXggPSB0aGlzLnJvd0NvbGxhcHNlQ29uZmlnSW5kZXgoKTtcbiAgICBcbiAgICB0aGlzLnRhYmxlRGF0YSgpLmZvckVhY2goKHJvdywgcm93SW5kZXgpID0+IHtcbiAgICAgICAgbmV3RXhwYW5kZWRNYXBbYCR7cm93SW5kZXh9YF0gPSByb3dbY29sbGFwc2VJbmRleF07XG4gICAgfSk7XG4gICAgdGhpcy5leHBhbmRlZE1hcC5zZXQobmV3RXhwYW5kZWRNYXApO1xufVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAvLyBWaWV3Q2hpbGQgaXMgbm93IGF2YWlsYWJsZSAtIG1hbnVhbGx5IHRyaWdnZXIgaGVpZ2h0IGNhbGN1bGF0aW9uIG9uY2VcbiAgICAvLyBUaGUgZWZmZWN0IGluIGNvbnN0cnVjdG9yIHdpbGwgaGFuZGxlIHN1YnNlcXVlbnQgY29uZmlnIGNoYW5nZXNcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLnRhYmxlQ29uZmlnKCk7XG4gICAgaWYgKGNvbmZpZz8ucGFnaW5hdGlvbkNvbmZpZyAmJiB0aGlzLnRhYmxlPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICBjb25zdCBoZWlnaHQgPSBjb25maWcuaGVpZ2h0O1xuICAgICAgY29uc3QgcmVzdWx0ID0gKGhlaWdodCBhcyBhbnkpIC0gNTY7XG4gICAgICBjb25zdCBmaW5hbEhlaWdodCA9IHJlc3VsdCArIFwicHhcIjtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy50YWJsZS5uYXRpdmVFbGVtZW50LCBcImhlaWdodFwiLCBmaW5hbEhlaWdodCk7XG4gICAgfVxuICB9XG4gIFxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICB0aGlzLnRhYmxlTGVuZ3RoLnNldCh0aGlzLnRhYmxlRGF0YSgpPy5sZW5ndGggPz8gMCk7XG4gICAgaWYgKHRoaXMudGFibGVDb25maWcoKS5hY3RpdmVSb3dJbmRleCAhPT0gbnVsbCAmJiB0aGlzLnRhYmxlQ29uZmlnKCkuYWN0aXZlUm93SW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgYWN0aXZlUm93SW5kZXggPSB0aGlzLnRhYmxlQ29uZmlnKCkuYWN0aXZlUm93SW5kZXg7XG4gICAgICB0aGlzLmFjdGl2ZVJvd0luZGV4LnNldChBcnJheS5pc0FycmF5KGFjdGl2ZVJvd0luZGV4KSA/IGFjdGl2ZVJvd0luZGV4IDogW2FjdGl2ZVJvd0luZGV4XSlcbiAgICB9XG4gIH1cblxuICAvLyBGaWx0ZXIgcmVsYXRlZCBmdW5jdGlvbnNcbiAgaW5pdGlhbGl6ZUZpbHRlcnMoKSB7XG4gICAgY29uc3QgbmV3QXBwbGllZEZpbHRlcnM6IHsgW2tleTogc3RyaW5nXTogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfT4gfSA9IHt9O1xuICAgIGNvbnN0IGFsbEZpbHRlcnM6IEFycmF5PEZpbHRlcj4gPSBbXTtcbiAgICBcbiAgICBmb3IgKGxldCBjb2xIZWFkZXIgb2YgdGhpcy50YWJsZUNvbmZpZygpPy5jb2xIZWFkZXJDb25maWcpIHtcbiAgICAgIGlmIChjb2xIZWFkZXIuZmlsdGVycykge1xuICAgICAgICBsZXQgZmlsdGVycyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBmaWx0ZXIgb2YgY29sSGVhZGVyLmZpbHRlcnMpIHtcbiAgICAgICAgICBpZiAoZmlsdGVyLmNoZWNrZWQpIHtcbiAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICAgIG5hbWU6IGZpbHRlci5uYW1lLFxuICAgICAgICAgICAgICB2YWx1ZTogZmlsdGVyLnZhbHVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gQWRkIGFsbCBmaWx0ZXJzIHRvIHRoZSBmaWx0ZXJEYXRhIGFycmF5XG4gICAgICAgICAgYWxsRmlsdGVycy5wdXNoKGZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcnMubGVuZ3RoID4gMCkgbmV3QXBwbGllZEZpbHRlcnNbY29sSGVhZGVyLmRhdGFdID0gZmlsdGVycztcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hcHBsaWVkRmlsdGVycy5zZXQobmV3QXBwbGllZEZpbHRlcnMpO1xuICAgIHRoaXMuZmlsdGVyRGF0YS5zZXQoYWxsRmlsdGVycyk7XG4gfVxuICB0b2dnbGVGaWx0ZXIoZmlsdGVyTmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLnNob3dGaWx0ZXIoKSkge1xuICAgICAgdGhpcy5maWx0ZXJOYW1lLnNldChmaWx0ZXJOYW1lKTtcbiAgICAgIHRoaXMuc2hvd0ZpbHRlci5zZXQodHJ1ZSk7XG5cbiAgICAgIGxldCBvZmZTZXQgPSAwO1xuICAgICAgbGV0IGNvbEhlYWRlcnNSZXZlcnNlZCA9IHRoaXMuY29sSGVhZGVycy50b0FycmF5KCkucmV2ZXJzZSgpO1xuXG4gICAgICBmb3IgKGxldCBoZWFkZXIgb2YgY29sSGVhZGVyc1JldmVyc2VkKSB7XG4gICAgICAgIGlmIChoZWFkZXIubmF0aXZlRWxlbWVudC5pbm5lclRleHQgPT09IGZpbHRlck5hbWUpIGJyZWFrO1xuICAgICAgICBvZmZTZXQgKz0gaGVhZGVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICB9XG4gICAgICB0aGlzLmZpbHRlckNvbnRhaW5lclN0eWxlcy5zZXQoe1xuICAgICAgICB0b3A6IFwiNDRweFwiLFxuICAgICAgICByaWdodDogb2ZmU2V0ID4gMCA/IG9mZlNldCAtIDExNiArIFwicHhcIiA6IFwiMTJweFwiXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWx0ZXJOYW1lLnNldChcIlwiKTtcbiAgICAgIHRoaXMuZmlsdGVyRGF0YS5zZXQoW10pO1xuICAgICAgdGhpcy5zaG93RmlsdGVyLnNldChmYWxzZSk7XG4gICAgfVxuICB9XG4gIHVwZGF0ZUFwcGxpZWRGaWx0ZXJzKGFwcGxpZWRGaWx0ZXJzOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9Pikge1xuICAgIGNvbnN0IGN1cnJlbnRGaWx0ZXJzID0gdGhpcy5hcHBsaWVkRmlsdGVycygpO1xuICAgIGlmIChhcHBsaWVkRmlsdGVycy5sZW5ndGggPT0gMCkge1xuICAgICAgZGVsZXRlIGN1cnJlbnRGaWx0ZXJzW3RoaXMuZmlsdGVyTmFtZSgpXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudEZpbHRlcnNbdGhpcy5maWx0ZXJOYW1lKCldID0gYXBwbGllZEZpbHRlcnM7XG4gICAgfVxuICAgIHRoaXMuYXBwbGllZEZpbHRlcnMuc2V0KHsgLi4uY3VycmVudEZpbHRlcnMgfSk7XG4gICAgdGhpcy5maWx0ZXJzVXBkYXRlZC5lbWl0KHsgLi4udGhpcy5hcHBsaWVkRmlsdGVycygpIH0pO1xuICAgIHRoaXMudG9nZ2xlRmlsdGVyKHRoaXMuZmlsdGVyTmFtZSgpKTtcbiAgfVxuXG4gIC8vIFBhZ2luYXRpb24gcmVsYXRlZCBmdW5jdGlvbnNcbiAgaW5pdGlhbGl6ZVBhZ2luYXRpb24oKSB7XG4gICAgaWYgKHRoaXMudGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnKSB7XG4gICAgICAvLyBJbml0aWFsaXplIHNlbGVjdGVkUGFnZSBmcm9tIGNvbmZpZyBpZiBwcm92aWRlZCwgb3RoZXJ3aXNlIGRlZmF1bHQgdG8gMVxuICAgICAgLy8gY29uc3QgY29uZmlnU2VsZWN0ZWRQYWdlID0gdGhpcy50YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWcuc2VsZWN0ZWRQYWdlO1xuICAgICAgLy8gdGhpcy5zZWxlY3RlZFBhZ2Uuc2V0KGNvbmZpZ1NlbGVjdGVkUGFnZSA/PyAxKTtcbiAgICAgIFxuICAgICAgbGV0IGxlbiA9IHRoaXMudGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnLm5vT2ZQYWdlcztcbiAgICAgIGlmIChsZW4gPD0gNykge1xuICAgICAgICBjb25zdCBuZXdQYWdlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBsZW47IGkrKykge1xuICAgICAgICAgIG5ld1BhZ2VzLnB1c2goaSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wYWdlcy5zZXQobmV3UGFnZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wYWdlcy5zZXQoWzEsIDIsIDMsIDQsIDAsIGxlbl0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICB1cGRhdGVTZWxlY3RlZFBhZ2UocGFnZU51bWJlcjogbnVtYmVyKSB7XG4gICAgLy8gR3VhcmQgY2xhdXNlIHRvIHByZXZlbnQgb3V0LW9mLXJhbmdlIHVwZGF0ZXNcbiAgICBpZiAocGFnZU51bWJlciA8IDEgfHwgcGFnZU51bWJlciA+IHRoaXMudGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnLm5vT2ZQYWdlcykgcmV0dXJuO1xuXG4gICAgLyoqXG4gICAgICogTEVHQUNZIENPREUgV09SS0FST1VORDogVHJhY2sgdXNlci1pbml0aWF0ZWQgcGFnZSBzZWxlY3Rpb24uXG4gICAgICogXG4gICAgICogV2UgdHJhY2sgdGhpcyB0byBwcmV2ZW50IHRoZSBlZmZlY3QgZnJvbSBvdmVyd3JpdGluZyB1c2VyIHNlbGVjdGlvbnMgd2hlblxuICAgICAqIGxlZ2FjeSBwYXJlbnQgY29tcG9uZW50cyBkb24ndCB1cGRhdGUgY29uZmlnLnNlbGVjdGVkUGFnZS4gVGhlIGVmZmVjdCB3aWxsXG4gICAgICogc2tpcCBzeW5jaW5nIGZyb20gY29uZmlnIHdoaWxlIHRoaXMgcGFnZSBpcyBtYXJrZWQgYXMgdXNlci1zZWxlY3RlZC5cbiAgICAgKiBcbiAgICAgKiBJREVBTDogUGFyZW50IHNob3VsZCB1cGRhdGUgY29uZmlnLnNlbGVjdGVkUGFnZSBpbiBwYWdlU2VsZWN0ZWQgaGFuZGxlci5cbiAgICAgKiBPbmNlIGFsbCBwYXJlbnRzIGRvIHRoaXMsIHdlIGNhbiByZW1vdmUgdXNlclNlbGVjdGVkUGFnZSB0cmFja2luZy5cbiAgICAgKi9cbiAgICB0aGlzLmlzSW50ZXJuYWxQYWdlVXBkYXRlID0gdHJ1ZTtcbiAgICB0aGlzLnVzZXJTZWxlY3RlZFBhZ2UgPSBwYWdlTnVtYmVyO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIHN0YXRlIGltbWVkaWF0ZWx5IC0gdGhpcyBpcyB0aGUgc291cmNlIG9mIHRydXRoXG4gICAgdGhpcy5zZWxlY3RlZFBhZ2Uuc2V0KHBhZ2VOdW1iZXIpO1xuXG4gICAgLy8gUmVzZXQgaGVhZGVyIGNoZWNrYm94IHdoZW4gbmF2aWdhdGluZyB0byBhIGRpZmZlcmVudCBwYWdlXG4gICAgdGhpcy5zZWxlY3RBbGxDaGVja2JveC5zZXQoZmFsc2UpO1xuICAgIFxuICAgIC8vIFVwZGF0ZSBwYWdlIG51bWJlcnMgZGlzcGxheSBmb3IgcGFnaW5hdGlvbiB3aXRoIG1hbnkgcGFnZXNcbiAgICBsZXQgbGVuID0gdGhpcy50YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWcubm9PZlBhZ2VzO1xuICAgIGlmIChsZW4gPiA3KSB7XG4gICAgICBpZiAocGFnZU51bWJlciAtIDIgPD0gMSkge1xuICAgICAgICB0aGlzLnBhZ2VzLnNldChbMSwgMiwgMywgNCwgMCwgbGVuXSk7XG4gICAgICB9IGVsc2UgaWYgKHBhZ2VOdW1iZXIgLSAyID4gMSAmJiBwYWdlTnVtYmVyICsgMiA8IGxlbikge1xuICAgICAgICB0aGlzLnBhZ2VzLnNldChbMSwgMCwgcGFnZU51bWJlciAtIDEsIHBhZ2VOdW1iZXIsIHBhZ2VOdW1iZXIgKyAxLCAwLCBsZW5dKTtcbiAgICAgIH0gZWxzZSBpZiAocGFnZU51bWJlciArIDIgPj0gbGVuKSB7XG4gICAgICAgIHRoaXMucGFnZXMuc2V0KFsxLCAwLCBsZW4gLSAzLCBsZW4gLSAyLCBsZW4gLSAxLCBsZW5dKTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gRW1pdCB0byBwYXJlbnQgLSB0aGV5IG1heSBvciBtYXkgbm90IHVwZGF0ZSBjb25maWcsIGJ1dCB3ZSBwcm90ZWN0IG91ciBzdGF0ZVxuICAgIHRoaXMucGFnZVNlbGVjdGVkLmVtaXQocGFnZU51bWJlcik7XG4gIH1cblxuICAvLyBNYWluIGNvbnRhaW5lciByZWxhdGVkIGZ1bmN0aW9uc1xuICBnZXRDb250YWluZXJIZWlnaHQoKSB7XG4gICAgaWYgKHRoaXMudGFibGVDb25maWcoKT8uaGVpZ2h0KSByZXR1cm4gdGhpcy50YWJsZUNvbmZpZygpLmhlaWdodDtcbiAgICBlbHNlIHJldHVybiBcIlwiO1xuICB9XG4gIGdldENvbnRhaW5lcldpZHRoKCkge1xuICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnKCk/LndpZHRoKSByZXR1cm4gdGhpcy50YWJsZUNvbmZpZygpLndpZHRoO1xuICAgIGVsc2UgcmV0dXJuIFwiXCI7XG4gIH1cblxuICAvLyBDb2x1bW4gSGVhZGVycyByZWxhdGVkIGZ1bmN0aW9uc1xuICBnZXRDb2xIZWFkZXJzUm93U3R5bGVzKCkge1xuICAgIGNvbnN0IHsgY29sSGVhZGVyc1Jvd0NvbmZpZyB9ID0gdGhpcy50YWJsZUNvbmZpZygpO1xuICAgIGNvbnN0IG1pbkhlaWdodCA9IGNvbEhlYWRlcnNSb3dDb25maWc/LmhlaWdodCB8fCBcIjQ0cHhcIjtcbiAgICBjb25zdCBib3JkZXJUb3AgPSAoY29sSGVhZGVyc1Jvd0NvbmZpZz8uc3R5bGUgYXMgYW55KT8uYm9yZGVyVG9wIHx8IFwiXCI7XG4gICAgY29uc3QgYm9yZGVyQm90dG9tID0gKGNvbEhlYWRlcnNSb3dDb25maWc/LnN0eWxlIGFzIGFueSk/LmJvcmRlckJvdHRvbSB8fCBcIjFweCBzb2xpZCAjRTBFMEUwXCI7XG4gICAgY29uc3QgYmFja2dyb3VuZENvbG9yID0gKGNvbEhlYWRlcnNSb3dDb25maWc/LnN0eWxlIGFzIGFueSk/LmJhY2tncm91bmRDb2xvciB8fCBcIiNGRkZGRkZcIjtcbiAgICBjb25zdCBmb250U2l6ZSA9IChjb2xIZWFkZXJzUm93Q29uZmlnPy5zdHlsZSBhcyBhbnkpPy5mb250U2l6ZSB8fCBcIjE0cHhcIjtcbiAgICByZXR1cm4ge1xuICAgICAgXCJtaW4taGVpZ2h0XCI6IG1pbkhlaWdodCxcbiAgICAgIFwiYm9yZGVyLXRvcFwiOiBib3JkZXJUb3AsXG4gICAgICBcImJvcmRlci1ib3R0b21cIjogYm9yZGVyQm90dG9tLFxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCI6IGJhY2tncm91bmRDb2xvcixcbiAgICAgIFwiZm9udC1zaXplXCI6IGZvbnRTaXplXG4gICAgfTtcbiAgfVxuXG4gIG9uU29ydENoYW5nZShzb3J0U3RhdGU6IFNvcnRTdGF0ZSkge1xuICAgIC8vIEVtaXQgdGhlIHNvcnQgY2hhbmdlIHRvIHRoZSBwYXJlbnQgY29tcG9uZW50XG4gICAgdGhpcy5zb3J0Q2hhbmdlLmVtaXQoc29ydFN0YXRlKTtcbiAgICBcbiAgICAvLyBIYW5kbGUgbXVsdGktY29sdW1uIHNvcnQgaWYgZW5hYmxlZFxuICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnKCkubXVsdGlDb2x1bW5Tb3J0KSB7XG4gICAgICBjb25zdCBjdXJyZW50TXVsdGlTb3J0ID0gdGhpcy5tdWx0aUNvbHVtblNvcnQoKTtcbiAgICAgIGNvbnN0IGluZGV4ID0gY3VycmVudE11bHRpU29ydC5maW5kSW5kZXgoc29ydCA9PiBzb3J0LmNvbHVtbiA9PT0gc29ydFN0YXRlLmNvbHVtbik7XG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIGlmIChzb3J0U3RhdGUuZGlyZWN0aW9uID09PSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgbmV3TXVsdGlTb3J0ID0gWy4uLmN1cnJlbnRNdWx0aVNvcnRdO1xuICAgICAgICAgIG5ld011bHRpU29ydC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgIHRoaXMubXVsdGlDb2x1bW5Tb3J0LnNldChuZXdNdWx0aVNvcnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IG5ld011bHRpU29ydCA9IFsuLi5jdXJyZW50TXVsdGlTb3J0XTtcbiAgICAgICAgICBuZXdNdWx0aVNvcnRbaW5kZXhdID0gc29ydFN0YXRlO1xuICAgICAgICAgIHRoaXMubXVsdGlDb2x1bW5Tb3J0LnNldChuZXdNdWx0aVNvcnQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNvcnRTdGF0ZS5kaXJlY3Rpb24gIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5tdWx0aUNvbHVtblNvcnQuc2V0KFsuLi5jdXJyZW50TXVsdGlTb3J0LCBzb3J0U3RhdGVdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRBY3Rpb25zQ2VsbFN0eWxlKHN0eWxlOiBhbnkpOiBhbnkge1xuICAgIGlmICghc3R5bGUpIHJldHVybiB7fTtcbiAgICBjb25zdCB7IHdpZHRoLCAuLi5yZXN0U3R5bGUgfSA9IHN0eWxlO1xuICAgIHJldHVybiByZXN0U3R5bGU7XG4gIH1cblxuICBvbkFjdGlvbkNsaWNrKGV2ZW50OiBhbnksIHJvd0luZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuYWN0aW9uVHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgY29uc3QgYWN0aW9uSW5mbyA9IHRoaXMuZmluZEFjdGlvbkNvbmZpZygnY2hlY2tib3gnKTtcbiAgICAgIGlmIChhY3Rpb25JbmZvICYmIHRoaXMudGFibGVEYXRhKClbcm93SW5kZXhdKSB7XG4gICAgICAgIGNvbnN0IHsgaW5kZXgsIGNvbmZpZyB9ID0gYWN0aW9uSW5mbztcbiAgICAgICAgY29uc3QgY3VycmVudEFjdGl2ZVJvd3MgPSB0aGlzLmFjdGl2ZVJvd0luZGV4KCk7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBjaGVja2VkUm93SW5kaWNlcyA9IGV2ZW50LnZhbHVlXG4gICAgICAgICAgPyBbLi4uY3VycmVudEFjdGl2ZVJvd3MsIHJvd0luZGV4XVxuICAgICAgICAgIDogY3VycmVudEFjdGl2ZVJvd3MuZmlsdGVyKGkgPT4gaSAhPT0gcm93SW5kZXgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRUYWJsZURhdGEgPSB0aGlzLnVwZGF0ZUNoZWNrYm94U3RhdGUoY2hlY2tlZFJvd0luZGljZXMsIGluZGV4KTtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IGNoZWNrZWRJdGVtcyA9IHRoaXMuYnVpbGRDaGVja2VkSXRlbXMoY2hlY2tlZFJvd0luZGljZXMsIHVwZGF0ZWRUYWJsZURhdGEpO1xuICAgICAgICBjb25maWcuYWN0aW9uPy4oY2hlY2tlZEl0ZW1zLCByb3dJbmRleCk7XG4gICAgICB9XG5cbiAgICB9IGVsc2UgaWYoZXZlbnQuYWN0aW9uVHlwZSA9PT0gJ3Jvdy1jb2xsYXBzZScpe1xuICAgICAgY29uc3Qgcm93Q29sbGFwc2UgPSB0aGlzLmZpbmRBY3Rpb25Db25maWcoJ3Jvdy1jb2xsYXBzZScpO1xuICAgICAgaWYgKHJvd0NvbGxhcHNlICYmIHRoaXMudGFibGVEYXRhKClbcm93SW5kZXhdKSB7XG4gICAgICAgIC8vIE5vdGU6IFdlIGNhbid0IGRpcmVjdGx5IG1vZGlmeSBpbnB1dCBzaWduYWxzLCB0aGlzIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHBhcmVudCBjb21wb25lbnRcbiAgICAgICAgcm93Q29sbGFwc2UuY29uZmlnLmFjdGlvbj8uKHRoaXMudGFibGVEYXRhKCkpO1xuICAgICAgICB0aGlzLmJ1aWxkRXhwYW5kZWRNYXAoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmaW5kQWN0aW9uQ29uZmlnKGFjdGlvblR5cGU6IHN0cmluZyk6IHsgaW5kZXg6IG51bWJlciwgY29uZmlnOiBDb2xDb25maWcgfSB8IG51bGwge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50YWJsZUNvbmZpZygpLmNvbENvbmZpZy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY29sID0gdGhpcy50YWJsZUNvbmZpZygpLmNvbENvbmZpZ1tpXTtcbiAgICAgIGlmIChjb2wudHlwZSA9PT0gJ2FjdGlvbnMnICYmIGNvbC5hY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XG4gICAgICAgIHJldHVybiB7IGluZGV4OiBpLCBjb25maWc6IGNvbCB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBcblxuICBpc1Jvd0Rpc2FibGVkKHJvdzogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLnRhYmxlQ29uZmlnKCkucm93Q29uZmlnLmRpc2FibGVSb3cgPT09IFwiZnVuY3Rpb25cIiA/IHRoaXMudGFibGVDb25maWcoKS5yb3dDb25maWcuZGlzYWJsZVJvdyhyb3cpIDogZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNoZWNrYm94U3RhdGUoY2hlY2tlZFJvd0luZGljZXM6IG51bWJlcltdLCBjaGVja2JveENvbEluZGV4OiBudW1iZXIpOiBhbnlbXVtdIHtcbiAgICBjb25zdCBjdXJyZW50RGF0YSA9IHRoaXMudGFibGVEYXRhKCk7XG4gICAgXG4gICAgdGhpcy5hY3RpdmVSb3dJbmRleC5zZXQoY2hlY2tlZFJvd0luZGljZXMpO1xuICAgIFxuICAgIGNvbnN0IHVwZGF0ZWRUYWJsZURhdGEgPSBjdXJyZW50RGF0YS5tYXAoKHJvdywgaSkgPT4ge1xuICAgICAgY29uc3Qgcm93Q29weSA9IEFycmF5LmZyb20ocm93KTtcbiAgICAgIGNvbnN0IGlzRGlzYWJsZWQgPSB0aGlzLmlzUm93RGlzYWJsZWQocm93KTtcbiAgICAgIFxuICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XG4gICAgICAgIHJvd0NvcHlbY2hlY2tib3hDb2xJbmRleF0gPSBjaGVja2VkUm93SW5kaWNlcy5pbmNsdWRlcyhpKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgcmV0dXJuIHJvd0NvcHk7XG4gICAgfSk7XG4gICAgXG4gICAgdGhpcy5oZWFkZXJBY3Rpb24/LmVtaXQoe1xuICAgICAgdHlwZTogXCJjaGVja2JveFRvZ2dsZVwiLFxuICAgICAgcGF5bG9hZDogdXBkYXRlZFRhYmxlRGF0YVxuICAgIH0pO1xuICAgIFxuICAgIHJldHVybiB1cGRhdGVkVGFibGVEYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENoZWNrZWRJdGVtcyhjaGVja2VkUm93SW5kaWNlczogbnVtYmVyW10sIHVwZGF0ZWRUYWJsZURhdGE6IGFueVtdW10pOiBhbnlbXVtdIHtcbiAgICByZXR1cm4gY2hlY2tlZFJvd0luZGljZXNcbiAgICAgIC5tYXAoY2hlY2tlZEluZGV4ID0+IHtcbiAgICAgICAgY29uc3Qgcm93ID0gdXBkYXRlZFRhYmxlRGF0YVtjaGVja2VkSW5kZXhdO1xuICAgICAgICBpZiAocm93KSB7XG4gICAgICAgICAgcmV0dXJuIFsuLi5yb3ddO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIocm93ID0+IHJvdyAhPT0gbnVsbCkgYXMgYW55W11bXTtcbiAgfVxuXG4gIHRvZ2dsZUNoZWNrYm94KCkge1xuICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2tib3guc2V0KCF0aGlzLnNlbGVjdEFsbENoZWNrYm94KCkpO1xuICAgIGNvbnN0IGNoZWNrYm94Q29sSW5kZXggPSB0aGlzLnRhYmxlQ29uZmlnKCkuY29sQ29uZmlnLmZpbmRJbmRleChjb2wgPT4gY29sLnR5cGUgPT09ICdhY3Rpb25zJyAmJiBjb2wuYWN0aW9uVHlwZSA9PT0gJ2NoZWNrYm94Jyk7XG4gICAgaWYgKGNoZWNrYm94Q29sSW5kZXggIT09IC0xKSB7XG4gICAgICBjb25zdCBpc1NlbGVjdEFsbCA9IHRoaXMuc2VsZWN0QWxsQ2hlY2tib3goKTtcbiAgICAgIGNvbnN0IGN1cnJlbnREYXRhID0gdGhpcy50YWJsZURhdGEoKTtcbiAgICAgIFxuICAgICAgY29uc3QgY2hlY2tlZFJvd0luZGljZXMgPSBpc1NlbGVjdEFsbFxuICAgICAgICA/IGN1cnJlbnREYXRhXG4gICAgICAgICAgICAubWFwKChyb3csIGluZGV4KSA9PiB0aGlzLmlzUm93RGlzYWJsZWQocm93KSA/IC0xIDogaW5kZXgpXG4gICAgICAgICAgICAuZmlsdGVyKGluZGV4ID0+IGluZGV4ICE9PSAtMSlcbiAgICAgICAgOiBbXTtcbiAgICAgIFxuICAgICAgdGhpcy51cGRhdGVDaGVja2JveFN0YXRlKGNoZWNrZWRSb3dJbmRpY2VzLCBjaGVja2JveENvbEluZGV4KTtcbiAgICB9XG4gIH1cblxuXG4gIG9uUGFnZVNpemVDaGFuZ2Uoc2VsZWN0ZWRPcHRpb246IERyb3Bkb3duSXRlbSkge1xuICAgIHRoaXMucGFnZVNpemVDaGFuZ2VkLmVtaXQocGFyc2VJbnQoc2VsZWN0ZWRPcHRpb24udmFsdWUpKTtcbiAgfVxuXG4gIHNob3VsZFNob3dQYWdpbmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgY29uc3QgY29uZmlnID0gdGhpcy50YWJsZUNvbmZpZygpPy5wYWdpbmF0aW9uQ29uZmlnO1xuICAgICAgaWYgKCFjb25maWcpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IGhhc011bHRpcGxlUGFnZXMgPSBjb25maWcubm9PZlBhZ2VzID4gMTtcbiAgICAgIGNvbnN0IGhhc0Vub3VnaERhdGEgPSB0aGlzLnRhYmxlTGVuZ3RoKCkgPiBjb25maWcucm93c1BlclBhZ2U7XG4gICAgICByZXR1cm4gdGhpcy5zaG93UGFnZVNpemVEcm9wZG93bigpIHx8IGhhc011bHRpcGxlUGFnZXMgfHwgaGFzRW5vdWdoRGF0YTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlQ29uZmlnIHtcbiAgaGVpZ2h0OiBzdHJpbmcgfCBcIjEwMCVcIjtcbiAgd2lkdGg6IHN0cmluZyB8IFwiMTAwJVwiO1xuICBwYWdpbmF0aW9uQ29uZmlnPzogUGFnaW5hdGlvbkNvbmZpZyB8IHVuZGVmaW5lZCB8IG51bGw7XG4gIGNvbEhlYWRlcnNSb3dDb25maWc6IFJvd0NvbmZpZyB8IHVuZGVmaW5lZCB8IG51bGw7XG4gIHJvd0NvbmZpZzogUm93Q29uZmlnIHwgdW5kZWZpbmVkIHwgbnVsbDtcbiAgY29sSGVhZGVyQ29uZmlnOiBBcnJheTxDb2xIZWFkZXJDb25maWc+O1xuICBjb2xDb25maWc6IEFycmF5PENvbENvbmZpZz47XG4gIGNhbkV4cGFuZD86IGJvb2xlYW47XG4gIGNhblNjcm9sbEhvcml6b250YWxseT86IGJvb2xlYW47XG4gIGNlbGxIb3Zlcj86IGJvb2xlYW47XG4gIGFjdGl2ZVJvd0luZGV4PzogbnVtYmVyIHwgbnVtYmVyW107XG4gIG11bHRpQ29sdW1uU29ydD86IGJvb2xlYW47XG59XG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb25Db25maWcge1xuICBub09mUGFnZXM6IG51bWJlcjtcbiAgcm93c1BlclBhZ2U6IG51bWJlcjtcbiAgdG90YWxOb09mUm93czogbnVtYmVyO1xuICBzZWxlY3RlZFBhZ2U/OiBudW1iZXI7XG4gIGRpc2FibGVQYWdlSnVtcGluZz86IGJvb2xlYW47XG4gIHNob3dQYWdlU2l6ZURyb3Bkb3duPzogYm9vbGVhbjsgLy8gV2hlbiB0cnVlLCByb3dzUGVyUGFnZSB2YWx1ZSBzaG91bGQgYmUgaW5jbHVkZWQgaW4gcGFnZVNpemVzIGFycmF5XG4gIHBhZ2VTaXplcz86IG51bWJlcltdO1xufVxuZXhwb3J0IGludGVyZmFjZSBSb3dDb25maWcge1xuICBoZWlnaHQ/OiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsO1xuICBzdHlsZT86IHt9O1xuICBhY3Rpb24/OiBhbnk7XG4gIGRpc2FibGVSb3c/OiAoZGF0YTogYW55KSA9PiBib29sZWFuO1xufVxuZXhwb3J0IGludGVyZmFjZSBDb2xIZWFkZXJDb25maWcge1xuICB0eXBlOiBcInRleHRcIiB8IFwibnVtYmVyXCIgfCBcImN1c3RvbVwiIHwgXCJjaGVja2JveFwiO1xuICBkYXRhOiBhbnk7XG4gIGNvbXBvbmVudFJlZj86IGFueTtcbiAgZmlsdGVycz86IEFycmF5PEZpbHRlcj4gfCBudWxsO1xuICBzdHlsZT86IHt9O1xuICBhY3Rpb24/OiBhbnk7XG4gIGlzU29ydGFibGU/OiBib29sZWFuO1xuICBzb3J0QXNjSWNvbj86IHN0cmluZztcbiAgc29ydERlc2NJY29uPzogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBDb2xDb25maWcge1xuICB0eXBlOiBcInRleHRcIiB8IFwibnVtYmVyXCIgfCBcImN1c3RvbVwiIHwgXCJhY3Rpb25zXCIgfCBcImh0bWxcIjtcbiAgY29tcG9uZW50UmVmPzogYW55O1xuICBzdHlsZT86IHt9O1xuICBhY3Rpb24/OiBhbnk7XG4gIGFjdGlvbkl0ZW1zPzogQWN0aW9uSXRlbVtdO1xuICBhY3Rpb25UeXBlPzogXCJpbmxpbmVcIiB8IFwiZHJvcGRvd25cIiB8IFwiY2hlY2tib3hcIiB8IFwicm93LWNvbGxhcHNlXCI7IC8vIGlubGluZSBmb3IgaW5kaXZpZHVhbCBpY29ucywgZHJvcGRvd24gZm9yIG1lbnVcbiAgZGlzYWJsZT86IChyb3dEYXRhOiBhbnkpID0+IGJvb2xlYW47XG4gIGNvbGxhcHNlQ29sdW1uSW5kZXg/OiBudW1iZXI7XG4gIHByZXZpZXdMaW5lcz86IG51bWJlcjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uSXRlbSB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIGljb24/OiBzdHJpbmc7XG4gIGRpc2FibGU/OiAoZGF0YTogYW55KSA9PiBib29sZWFuO1xuICBhY3Rpb24/OiAoZGF0YTogYW55KSA9PiB2b2lkO1xuICBjaGlsZHJlbj86IEFjdGlvbkl0ZW1bXTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJuYWxBY3Rpb25JdGVtIGV4dGVuZHMgQWN0aW9uSXRlbSB7XG4gIHNob3dTdWJtZW51PzogYm9vbGVhbjtcbn1cbiIsIjxkaXZcbiAgW25nU3R5bGVdPVwie1xuICAgIGhlaWdodDogZ2V0Q29udGFpbmVySGVpZ2h0KCksXG4gICAgd2lkdGg6IGdldENvbnRhaW5lcldpZHRoKCksXG4gICAgJ292ZXJmbG93LXgnOiB0YWJsZUNvbmZpZygpLmNhblNjcm9sbEhvcml6b250YWxseSA/ICdhdXRvJyA6ICd1bnNldCdcbiAgfVwiXG4gIGlkPVwibWFpbi1jb250YWluZXJcIlxuPlxuICA8bWlzLXRhYmxlLWZpbHRlclxuICAgICNmaWx0ZXJcbiAgICAoZmlsdGVyc0FwcGxpZWQpPVwidXBkYXRlQXBwbGllZEZpbHRlcnMoJGV2ZW50KVwiXG4gICAgKm5nSWY9XCJzaG93RmlsdGVyKClcIlxuICAgIFtjb250YWluZXJTdHlsZXNdPVwiZmlsdGVyQ29udGFpbmVyU3R5bGVzKClcIlxuICAgIFtmaWx0ZXJzRGF0YV09XCJmaWx0ZXJEYXRhKClcIlxuICA+PC9taXMtdGFibGUtZmlsdGVyPlxuICA8ZGl2XG4gICAgI3RhYmxlXG4gICAgaWQ9XCJ0YWJsZS1jb250YWluZXJcIlxuICAgIFtuZ0NsYXNzXT1cInsgJ25vLXNjcm9sbGJhcic6IGV4cGFuZGVkSW5kZXgoKSA8IDAsIHNjcm9sbGJhcjogIShleHBhbmRlZEluZGV4KCkgPCAwKSwgJ3Njcm9sbC1ob3Jpem9udGFsbHknOiB0YWJsZUNvbmZpZygpLmNhblNjcm9sbEhvcml6b250YWxseSB9XCJcbiAgPlxuICAgIDxkaXZcbiAgICBbbmdTdHlsZV09XCJnZXRDb2xIZWFkZXJzUm93U3R5bGVzKClcIlxuICAgICAgaWQ9XCJjb2wtaGVhZGVycy1jb250YWluZXJcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgI2NvbEhlYWRlclJlZlxuICAgICAgICAoY2xpY2spPVwiY29sSGVhZGVyPy5hY3Rpb24gPyBjb2xIZWFkZXI/LmFjdGlvbihjb2xIZWFkZXIpIDogbnVsbFwiXG4gICAgICAgICpuZ0Zvcj1cImxldCBjb2xIZWFkZXIgb2YgdGFibGVDb25maWcoKT8uY29sSGVhZGVyQ29uZmlnXCJcbiAgICAgICAgY2xhc3M9XCJjb2wtaGVhZGVyXCJcbiAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgIHdpZHRoOiBjb2xIZWFkZXI/LnN0eWxlPy53aWR0aCB8fCAnJyxcbiAgICAgICAgICBjdXJzb3I6IGNvbEhlYWRlci5hY3Rpb24gPyAncG9pbnRlcicgOiAnZGVmYXVsdCcsXG4gICAgICAgICAgJ2p1c3RpZnktY29udGVudCc6IGNvbEhlYWRlcj8uc3R5bGU/Lmp1c3RpZnlDb250ZW50XG4gICAgICAgICAgICA/IGNvbEhlYWRlcj8uc3R5bGU/Lmp1c3RpZnlDb250ZW50XG4gICAgICAgICAgICA6IGNvbEhlYWRlci50eXBlID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyAnZmxleC1lbmQnXG4gICAgICAgICAgICA6ICdzcGFjZS1iZXR3ZWVuJ1xuICAgICAgICB9XCJcbiAgICAgID5cbiAgICAgICAgPHAgKm5nSWY9XCJjb2xIZWFkZXI/LnR5cGUgIT09ICdjdXN0b20nICYmIGNvbEhlYWRlcj8udHlwZSAhPT0gJ2NoZWNrYm94J1wiIGNsYXNzPVwiY29sLWhlYWRlci10ZXh0XCI+XG4gICAgICAgICAge3sgY29sSGVhZGVyPy5kYXRhIHx8IFwiIFwiIH19XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAoY2xpY2spPVwiZmlsdGVyRGF0YS5zZXQoY29sSGVhZGVyLmZpbHRlcnMpOyB0b2dnbGVGaWx0ZXIoY29sSGVhZGVyLmRhdGEpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICpuZ0lmPVwiY29sSGVhZGVyPy50eXBlICE9PSAnY3VzdG9tJyAmJiBjb2xIZWFkZXI/LmZpbHRlcnMgJiYgY29sSGVhZGVyPy5maWx0ZXJzPy5sZW5ndGggPiAwXCJcbiAgICAgICAgICBjbGFzcz1cImZpbHRlci1pY29uXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiYXBwbGllZEZpbHRlcnMoKVtjb2xIZWFkZXIuZGF0YV0/Lmxlbmd0aCA+IDBcIiBpZD1cImZpbHRlci1hY3RpdmVcIj48L3NwYW4+XG4gICAgICAgICAgPHN2ZyBmaWxsPVwibm9uZVwiIGhlaWdodD1cIjEwXCIgdmlld0JveD1cIjAgMCAxMyAxMFwiIHdpZHRoPVwiMTNcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICBjbGlwLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgZD1cIk00Ljk3NTQ2IDEwSDcuNjQyMTNWOEg0Ljk3NTQ2VjEwWk0wLjMwODQ3MiAwVjJIMTIuMzA4NVYwSDAuMzA4NDcyWk0yLjMwODQ3IDZIMTAuMzA4NVY0SDIuMzA4NDdWNlpcIlxuICAgICAgICAgICAgICBmaWxsPVwiIzE4MUYzM1wiXG4gICAgICAgICAgICAgIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVDaGVja2JveCgpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICpuZ0lmPVwiY29sSGVhZGVyPy50eXBlID09PSAnY2hlY2tib3gnXCJcbiAgICAgICAgICBjbGFzcz1cImNoZWNrYm94LWljb25cIlxuICAgICAgICA+XG4gICAgICAgICAgPG1pcy1jaGVja2JveCBbY2hlY2tlZF09XCJzZWxlY3RBbGxDaGVja2JveCgpXCI+PC9taXMtY2hlY2tib3g+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2xIZWFkZXI/LmlzU29ydGFibGUgJiYgIWNvbEhlYWRlcj8uZmlsdGVyc1wiIGFwcFNvcnRJY29uc1xuICAgICAgICAgIFtjb2x1bW5dPVwiY29sSGVhZGVyXCJcbiAgICAgICAgICBbYWN0aXZlU29ydF09XCJjdXJyZW50U29ydCgpXCJcbiAgICAgICAgICBbYWN0aXZlU29ydHNdPVwibXVsdGlDb2x1bW5Tb3J0KClcIlxuICAgICAgICAgIFttdWx0aUNvbHVtblNvcnRdPVwidGFibGVDb25maWcoKS5tdWx0aUNvbHVtblNvcnRcIlxuICAgICAgICAgIChzb3J0Q2hhbmdlKT1cIm9uU29ydENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICBjbGFzcz1cInNvcnQtaWNvblwiPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJjb2xIZWFkZXI/LnR5cGUgPT09ICdjdXN0b20nXCIgY3VzdG9tVGFibGVDZWxsIFtjdXN0b21Db21wb25lbnRdPVwiY29sSGVhZGVyPy5jb21wb25lbnRSZWZcIiBbZGF0YV09XCJjb2xIZWFkZXIuZGF0YVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICBcbiAgICA8ZGl2IGlkPVwiZGF0YS1jb250YWluZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3ctd3JhcHBlclwiICpuZ0Zvcj1cImxldCByb3cgb2YgdGFibGVEYXRhKCk7IGxldCBpID0gaW5kZXg7IGxldCByb3dJbmRleCA9IGluZGV4XCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInQtcm93XCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICd0LXJvdy1ob3Zlcic6IHRhYmxlQ29uZmlnKCkuY2VsbEhvdmVyLCAnYWN0aXZlLXJvdyc6IGFjdGl2ZVJvd0luZGV4KCkuaW5jbHVkZXMoaSkgfVwiXG4gICAgICAgICAgW25nU3R5bGVdPVwieyAnbWluLWhlaWdodCc6IHRhYmxlQ29uZmlnKCk/LnJvd0NvbmZpZz8uaGVpZ2h0ID8gdGFibGVDb25maWcoKS5yb3dDb25maWcuaGVpZ2h0IDogJzQ0cHgnIH1cIlxuICAgICAgICAgIChjbGljayk9XCJzZWxlY3RSb3coaSlcIlxuICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZC1yb3ddPVwiaXNSb3dEaXNhYmxlZChyb3cpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKGNsaWNrKT1cInRhYmxlQ29uZmlnKCk/LmNvbENvbmZpZ1tjb2xJbmRleF0/LmFjdGlvbiAmJiB0YWJsZUNvbmZpZygpPy5jb2xDb25maWdbY29sSW5kZXhdPy5hY3Rpb25UeXBlICE9PSAnY2hlY2tib3gnID8gdGFibGVDb25maWcoKT8uY29sQ29uZmlnW2NvbEluZGV4XT8uYWN0aW9uKGNvbCkgOiBudWxsXCJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2wgb2Ygcm93OyBsZXQgY29sSW5kZXggPSBpbmRleFwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgIHdpZHRoOiB0YWJsZUNvbmZpZygpPy5jb2xDb25maWdbY29sSW5kZXhdPy5zdHlsZT8ud2lkdGggfHwgdGFibGVDb25maWcoKT8uY29sSGVhZGVyQ29uZmlnW2NvbEluZGV4XT8uc3R5bGU/LndpZHRoIHx8ICcnXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIGNsYXNzPVwidC1jb2wtY29udGFpbmVyXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3QtY29sLWNvbnRhaW5lci1ob3Zlcic6IHRhYmxlQ29uZmlnKCkuY2VsbEhvdmVyIH1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0LWNvbFwiXG4gICAgICAgICAgICAgIFtzdHlsZV09XCJ0YWJsZUNvbmZpZygpLmNvbENvbmZpZ1tjb2xJbmRleF0/LnN0eWxlXCJcbiAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgY3Vyc29yOiB0YWJsZUNvbmZpZygpLmNvbENvbmZpZ1tjb2xJbmRleF0/LmFjdGlvbiA/ICdwb2ludGVyJyA6ICdkZWZhdWx0JyxcbiAgICAgICAgICAgICAgICAnanVzdGlmeS1jb250ZW50JzogdGFibGVDb25maWcoKS5jb2xDb25maWdbY29sSW5kZXhdPy5zdHlsZT8uanVzdGlmeUNvbnRlbnRcbiAgICAgICAgICAgICAgICAgID8gdGFibGVDb25maWcoKS5jb2xDb25maWdbY29sSW5kZXhdPy5zdHlsZT8uanVzdGlmeUNvbnRlbnRcbiAgICAgICAgICAgICAgICAgIDogdGFibGVDb25maWcoKS5jb2xDb25maWdbY29sSW5kZXhdPy50eXBlID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgICAgICAgPyAnZmxleC1lbmQnXG4gICAgICAgICAgICAgICAgICA6ICdzcGFjZS1iZXR3ZWVuJ1xuICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwidGFibGVDb25maWcoKS5jb2xDb25maWdbY29sSW5kZXhdPy50eXBlICE9PSAnY3VzdG9tJyAmJiB0YWJsZUNvbmZpZygpLmNvbENvbmZpZ1tjb2xJbmRleF0/LnR5cGUgIT09ICdhY3Rpb25zJ1wiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgIGNvbG9yOiB0YWJsZUNvbmZpZygpPy5jb2xDb25maWdbY29sSW5kZXhdPy5zdHlsZT8uY29sb3IgfHwgJycsXG4gICAgICAgICAgICAgICctLWNvbGxhcHNlZC1saW5lcyc6IHByZXZpZXdMaW5lcygpIHx8IDNcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnY29sbGFwc2VkLWNlbGwnOiBjb2xsYXBzZUNvbEluZGV4KCkgPT0gY29sSW5kZXggJiYgZXhwYW5kZWRNYXAoKVtyb3dJbmRleF1cbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgY2xhc3M9XCJ0LWNvbC10ZXh0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8IS0tIFJlbmRlciBhcyBIVE1MIC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW2NvbEluZGV4XT8udHlwZSA9PT0gJ2h0bWwnOyBlbHNlIHBsYWluVGV4dFwiPlxuICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cImNvbFwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIFxuICAgICAgICAgICAgPCEtLSBSZW5kZXIgYXMgcGxhaW4gdGV4dCAtLT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcGxhaW5UZXh0PlxuICAgICAgICAgICAgICA8c3Bhbj57eyBjb2wgfX08L3NwYW4+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICBcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJ0YWJsZUNvbmZpZygpLmNvbENvbmZpZ1tjb2xJbmRleF0/LnR5cGUgPT09ICdjdXN0b20nXCJcbiAgICAgICAgICAgICAgICBbY3VzdG9tQ29tcG9uZW50XT1cInRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW2NvbEluZGV4XS5jb21wb25lbnRSZWZcIlxuICAgICAgICAgICAgICAgIFtkYXRhXT1cImNvbFwiXG4gICAgICAgICAgICAgICAgY3VzdG9tVGFibGVDZWxsXG4gICAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxtaXMtYWN0aW9ucy1jZWxsXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW2NvbEluZGV4XT8udHlwZSA9PT0gJ2FjdGlvbnMnXCJcbiAgICAgICAgICAgICAgICAgIFtjZWxsRGF0YV09XCJjb2xcIlxuICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJ0YWJsZUNvbmZpZygpLmNvbENvbmZpZ1tjb2xJbmRleF1cIlxuICAgICAgICAgICAgICAgICAgKGFjdGlvbkNsaWNrKT1cIm9uQWN0aW9uQ2xpY2soJGV2ZW50LCByb3dJbmRleClcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAnZGlzYWJsZS1hY3Rpb25zJzogKHRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW2NvbEluZGV4XT8uYWN0aW9uVHlwZSA9PT0gJ2NoZWNrYm94JyB8fCB0YWJsZUNvbmZpZygpLmNvbENvbmZpZ1tjb2xJbmRleF0/LmFjdGlvblR5cGUgPT09ICdyb3ctY29sbGFwc2UnKSAmJiBpc1Jvd0Rpc2FibGVkKHJvdylcbiAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgID48L21pcy1hY3Rpb25zLWNlbGw+XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cInRhYmxlQ29uZmlnKCk/LmNhbkV4cGFuZCAmJiBleHBhbmRlZEluZGV4KCkgPT09IGlcIiBjbGFzcz1cInN1Yi1yb3dcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3ViVGFibGVEYXRhTG9hZGluZygpXCI+XG4gICAgICAgICAgICA8ZGl2IFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBwYWRkaW5nOiAnMTZweCdcbiAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgTG9hZGluZy4uLlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzdWJUYWJsZURhdGFMb2FkaW5nKCkgJiYgc3ViVGFibGVEYXRhKCkubGVuZ3RoID09PSAwXCI+XG4gICAgICAgICAgICA8ZGl2IFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBwYWRkaW5nOiAnMTZweCdcbiAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgTm8gRGF0YSBBdmFpbGFibGUuLi5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIFxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc3ViVGFibGVEYXRhTG9hZGluZygpICYmIHN1YlRhYmxlRGF0YSgpLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgIDxzdWItdGFibGUgW2NvbmZpZ109XCJzdWJUYWJsZWNvbmZpZygpXCIgW3RhYmxlRGF0YV09XCJzdWJUYWJsZURhdGEoKVwiPjwvc3ViLXRhYmxlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgICBAaWYoc2hvdWxkU2hvd1BhZ2luYXRpb24oKSl7XG4gICAgICA8ZGl2IGlkPVwicGFnaW5hdGlvbi1jb250ZW50LWNvbnRhaW5lclwiPlxuICAgICAgICAgIDxkaXYgXG4gICAgICAgICAgICBpZD1cInBhZ2luYXRpb24tY29udGFpbmVyXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cCBpZD1cInBhZ2luYXRpb24tdGV4dFwiPlxuICAgICAgICAgICAgICBTaG93aW5nXG4gICAgICAgICAgICAgIHt7IChzZWxlY3RlZFBhZ2UoKSAtIDEpICogdGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnLnJvd3NQZXJQYWdlICsgMSB9fS17e1xuICAgICAgICAgICAgICAgIChzZWxlY3RlZFBhZ2UoKSAtIDEpICogdGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnLnJvd3NQZXJQYWdlICsgdGFibGVMZW5ndGgoKVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBvZiB7eyB0YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWcudG90YWxOb09mUm93cyB9fSBpdGVtc1xuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgQGlmKHNob3dQYWdlU2l6ZURyb3Bkb3duKCkpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2Utc2l6ZS1zZWxlY3RvclwiPlxuICAgICAgICAgICAgICAgIDxtaXMtZHJvcGRvd25cbiAgICAgICAgICAgICAgICAgIFtkYXRhXT1cInBhZ2VTaXplT3B0aW9ucygpXCJcbiAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZEl0ZW1dPVwic2VsZWN0ZWRQYWdlU2l6ZU9wdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgIFt3aWR0aF09XCInOTBweCdcIlxuICAgICAgICAgICAgICAgICAgW2hlaWdodF09XCInMzJweCdcIlxuICAgICAgICAgICAgICAgICAgW3NlYXJjaEVuYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgW2Ryb3Bkb3duTGlzdEhlaWdodF09XCInMTAwcHgnXCJcbiAgICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwYWdlLXNpemUtZHJvcGRvd25cIlxuICAgICAgICAgICAgICAgID48L21pcy1kcm9wZG93bj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8ZGl2IGlkPVwicGFnZXMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgIDxzcGFuICAgKGNsaWNrKT1cInNlbGVjdGVkUGFnZSgpID4gMSAmJiB1cGRhdGVTZWxlY3RlZFBhZ2Uoc2VsZWN0ZWRQYWdlKCkgLSAxKVwiIGNsYXNzPVwicGFnZVwiIFtjbGFzcy5wYWdlLW5hdi1pbmFjdGl2ZV09XCJzZWxlY3RlZFBhZ2UoKSA9PT0gMVwiPlxuICAgICAgICAgICAgICAgIDxzdmcgZmlsbD1cIm5vbmVcIiBoZWlnaHQ9XCIxMFwiIHZpZXdCb3g9XCIwIDAgNyAxMFwiIHdpZHRoPVwiN1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgICAgICAgICBkPVwiTTAuODU3NDA1IDUuNTYyOTVDMC44NTU3OTQgNS41NjEzOSAwLjg1NDE4OCA1LjU1OTgyIDAuODUyNTg4IDUuNTU4MjRDMC42OTU5NTUgNS40MDQwOCAwLjYxNzY0MSA1LjIwMjAzIDAuNjE3NjQ3IDQuOTk5OThDMC42MTc2NDEgNC43OTc5MyAwLjY5NTk1NSA0LjU5NTg4IDAuODUyNTg4IDQuNDQxNzJDMC44NTQxODggNC40NDAxNCAwLjg1NTc5NCA0LjQzODU4IDAuODU3NDA0IDQuNDM3MDJMNS4xMzA2NiAwLjIzMTIzMUM1LjQ0MzkyIC0wLjA3NzA3NzEgNS45NTE4IC0wLjA3NzA3NzEgNi4yNjUwNiAwLjIzMTIzMUM2LjU3ODMxIDAuNTM5NTQgNi41NzgzMSAxLjAzOTQxIDYuMjY1MDYgMS4zNDc3MkwyLjU1NDIgNC45OTk5OEw2LjI2NTA2IDguNjUyMjVDNi41NzgzMSA4Ljk2MDU1IDYuNTc4MzEgOS40NjA0MiA2LjI2NTA2IDkuNzY4NzNDNS45NTE4IDEwLjA3NyA1LjQ0MzkyIDEwLjA3NyA1LjEzMDY2IDkuNzY4NzNMMC44NTc0MDUgNS41NjI5NVpcIlxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzE4MUYzM1wiXG4gICAgICAgICAgICAgICAgICAgIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwhLS0gUGFnZSBudW1iZXJzIChvbmx5IHNob3cgaWYgZGlzYWJsZVBhZ2VKdW1waW5nIGlzIGZhbHNlKSAtLT5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXRhYmxlQ29uZmlnKCkucGFnaW5hdGlvbkNvbmZpZz8uZGlzYWJsZVBhZ2VKdW1waW5nXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBwYWdlTnVtYmVyIG9mIHBhZ2VzKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidXBkYXRlU2VsZWN0ZWRQYWdlKHBhZ2VOdW1iZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBhZ2VOdW1iZXIgIT0gMFwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAncGFnZS1hY3RpdmUnOiBwYWdlTnVtYmVyID09PSBzZWxlY3RlZFBhZ2UoKSB9XCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBhZ2UgcGFnZS1qdW1waW5nLWVuYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICA+e3sgcGFnZU51bWJlciB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJwYWdlTnVtYmVyID09IDBcIiBjbGFzcz1cInBhZ2Utc2VwZXJhdG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7IGRpc3BsYXk6ICdmbGV4JyB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRvdFwiIFtuZ1N0eWxlXT1cInsgJ21hcmdpbi1yaWdodCc6ICc0cHgnIH1cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRvdFwiIFtuZ1N0eWxlXT1cInsgJ21hcmdpbi1yaWdodCc6ICc0cHgnIH1cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRvdFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgXG4gICAgICAgICAgICAgIDxzcGFuIFtjbGFzcy5wYWdlLW5hdi1pbmFjdGl2ZV09XCJzZWxlY3RlZFBhZ2UoKSA9PT0gdGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnPy5ub09mUGFnZXNcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0ZWRQYWdlKCkgPCB0YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWc/Lm5vT2ZQYWdlcyAmJiB1cGRhdGVTZWxlY3RlZFBhZ2Uoc2VsZWN0ZWRQYWdlKCkgKyAxKVwiIGNsYXNzPVwicGFnZVwiPlxuICAgICAgICAgICAgICAgIDxzdmcgZmlsbD1cIm5vbmVcIiBoZWlnaHQ9XCIxMFwiIHZpZXdCb3g9XCIwIDAgNyAxMFwiIHdpZHRoPVwiN1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgICAgICAgICBkPVwiTTYuMTQyNiA1LjU2Mjk1QzYuMTQ0MjEgNS41NjEzOSA2LjE0NTgxIDUuNTU5ODIgNi4xNDc0MSA1LjU1ODI0QzYuMzA0MDUgNS40MDQwOCA2LjM4MjM2IDUuMjAyMDMgNi4zODIzNiA0Ljk5OTk4QzYuMzgyMzYgNC43OTc5MyA2LjMwNDA1IDQuNTk1ODggNi4xNDc0MSA0LjQ0MTcyQzYuMTQ1ODEgNC40NDAxNCA2LjE0NDIxIDQuNDM4NTggNi4xNDI2IDQuNDM3MDJMMS44NjkzNCAwLjIzMTIzMUMxLjU1NjA4IC0wLjA3NzA3NzEgMS4wNDgyIC0wLjA3NzA3NzEgMC43MzQ5NDIgMC4yMzEyMzFDMC40MjE2ODggMC41Mzk1NCAwLjQyMTY4OCAxLjAzOTQxIDAuNzM0OTQyIDEuMzQ3NzJMNC40NDU4IDQuOTk5OThMMC43MzQ5NDEgOC42NTIyNUMwLjQyMTY4NiA4Ljk2MDU1IDAuNDIxNjg2IDkuNDYwNDIgMC43MzQ5NDEgOS43Njg3M0MxLjA0ODIgMTAuMDc3IDEuNTU2MDggMTAuMDc3IDEuODY5MzQgOS43Njg3M0w2LjE0MjYgNS41NjI5NVpcIlxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzE4MUYzM1wiXG4gICAgICAgICAgICAgICAgICAgIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9XG48L2Rpdj5cbiJdfQ==