@unnilouis.org/vs-chipdropdown 16.2.5 → 16.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -24
- package/esm2022/lib/vs-chipdd-cmp/vs-chipdd-cmp.component.mjs +162 -72
- package/esm2022/lib/vs-chipdropdown.component.mjs +9 -9
- package/esm2022/lib/vs-chipdropdown.service.mjs +1 -1
- package/esm2022/public-api.mjs +1 -1
- package/fesm2022/unnilouis.org-vs-chipdropdown.mjs +167 -78
- package/fesm2022/unnilouis.org-vs-chipdropdown.mjs.map +1 -1
- package/lib/vs-chipdd-cmp/vs-chipdd-cmp.component.d.ts +9 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
# VsChipdropdown
|
|
2
|
-
|
|
3
|
-
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 16.2.0.
|
|
4
|
-
|
|
5
|
-
## Code scaffolding
|
|
6
|
-
|
|
7
|
-
Run `ng generate component component-name --project vs-chipdropdown` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project vs-chipdropdown`.
|
|
8
|
-
> Note: Don't forget to add `--project vs-chipdropdown` or else it will be added to the default project in your `angular.json` file.
|
|
9
|
-
|
|
10
|
-
## Build
|
|
11
|
-
|
|
12
|
-
Run `ng build vs-chipdropdown` to build the project. The build artifacts will be stored in the `dist/` directory.
|
|
13
|
-
|
|
14
|
-
## Publishing
|
|
15
|
-
|
|
16
|
-
After building your library with `ng build vs-chipdropdown`, go to the dist folder `cd dist/vs-chipdropdown` and run `npm publish`.
|
|
17
|
-
|
|
18
|
-
## Running unit tests
|
|
19
|
-
|
|
20
|
-
Run `ng test vs-chipdropdown` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
21
|
-
|
|
22
|
-
## Further help
|
|
23
|
-
|
|
24
|
-
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
|
|
1
|
+
# VsChipdropdown
|
|
2
|
+
|
|
3
|
+
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 16.2.0.
|
|
4
|
+
|
|
5
|
+
## Code scaffolding
|
|
6
|
+
|
|
7
|
+
Run `ng generate component component-name --project vs-chipdropdown` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project vs-chipdropdown`.
|
|
8
|
+
> Note: Don't forget to add `--project vs-chipdropdown` or else it will be added to the default project in your `angular.json` file.
|
|
9
|
+
|
|
10
|
+
## Build
|
|
11
|
+
|
|
12
|
+
Run `ng build vs-chipdropdown` to build the project. The build artifacts will be stored in the `dist/` directory.
|
|
13
|
+
|
|
14
|
+
## Publishing
|
|
15
|
+
|
|
16
|
+
After building your library with `ng build vs-chipdropdown`, go to the dist folder `cd dist/vs-chipdropdown` and run `npm publish`.
|
|
17
|
+
|
|
18
|
+
## Running unit tests
|
|
19
|
+
|
|
20
|
+
Run `ng test vs-chipdropdown` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
21
|
+
|
|
22
|
+
## Further help
|
|
23
|
+
|
|
24
|
+
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
-
import { MatAutocompleteTrigger } from '@angular/material/autocomplete';
|
|
3
|
-
import { debounceTime, distinctUntilChanged, tap, switchMap, finalize, takeUntil, map, } from
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
|
|
2
|
+
import { MatAutocompleteTrigger, } from '@angular/material/autocomplete';
|
|
3
|
+
import { debounceTime, distinctUntilChanged, tap, switchMap, finalize, takeUntil, map, } from 'rxjs/operators';
|
|
4
4
|
import { fromEvent } from 'rxjs';
|
|
5
|
+
import { FormControl } from '@angular/forms';
|
|
5
6
|
import { COMMA, ENTER } from '@angular/cdk/keycodes';
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
7
8
|
import * as i1 from "../vs-chipdropdown.service";
|
|
@@ -26,11 +27,18 @@ export class VsChipddCmpComponent {
|
|
|
26
27
|
this.has_previous = false;
|
|
27
28
|
this.chipSelectedId = [];
|
|
28
29
|
this.chipSelectedObj = [];
|
|
30
|
+
this.Outputdata = [];
|
|
31
|
+
this.formkeyarr = [];
|
|
29
32
|
}
|
|
30
33
|
ngOnInit() {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
+
// if (this.formGroup) {
|
|
35
|
+
// this.DropdownForm = this.formGroup;
|
|
36
|
+
// } else {
|
|
37
|
+
// this.DropdownForm = this.fb.group({
|
|
38
|
+
// value: '',
|
|
39
|
+
// });
|
|
40
|
+
// }
|
|
41
|
+
// this.dupngonit();
|
|
34
42
|
// if (this.InputFields?.defaultvalue) {
|
|
35
43
|
// this.DropdownForm.get("value").patchValue(this.InputFields?.defaultvalue)
|
|
36
44
|
// this.chipSelectedObj = this.InputFields?.defaultvalue
|
|
@@ -53,25 +61,64 @@ export class VsChipddCmpComponent {
|
|
|
53
61
|
// this.getdropdown('')
|
|
54
62
|
// }
|
|
55
63
|
}
|
|
64
|
+
looop() {
|
|
65
|
+
for (let foundemp of this.chipSelectedObj) {
|
|
66
|
+
if (!(foundemp instanceof Number)) {
|
|
67
|
+
if (this.InputFields?.Outputkey) {
|
|
68
|
+
this.chipSelectedId.push(foundemp[this.InputFields?.Outputkey]);
|
|
69
|
+
}
|
|
70
|
+
if (this.InputFields?.formkey) {
|
|
71
|
+
this.formkeyarr.push(foundemp[this.InputFields?.formkey]);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
this.chipSelectedId.push(foundemp.id);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
56
79
|
dupngonit() {
|
|
57
|
-
this.
|
|
58
|
-
|
|
59
|
-
|
|
80
|
+
if (this.formGroup) {
|
|
81
|
+
this.DropdownForm = this.formGroup;
|
|
82
|
+
if (!this.DropdownForm.contains(this.InputFields?.formcontrolname)) {
|
|
83
|
+
this.DropdownForm.addControl(this.dynamciformcontrolparent(), new FormControl({ value: [], disabled: this.InputFields?.disabled }));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
this.DropdownForm = this.fb.group({
|
|
88
|
+
chipvalue: [],
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
console.log('this.DropdownForm', this.DropdownForm.value);
|
|
92
|
+
// this.chipSelectedObj =
|
|
93
|
+
// this.DropdownForm.get(this.dynamciformcontrolparent()).value &&
|
|
94
|
+
// this.DropdownForm.get(this.dynamciformcontrolparent()).value.length !== 0
|
|
95
|
+
// ? this.DropdownForm.get(this.dynamciformcontrolparent()).value
|
|
96
|
+
// : [];
|
|
97
|
+
// console.log('this.chipSelectedObj', this.chipSelectedObj);
|
|
60
98
|
if (this.InputFields?.defaultvalue) {
|
|
61
|
-
this.DropdownForm.get(
|
|
99
|
+
// this.DropdownForm.get(this.dynamciformcontrolparent()).patchValue(
|
|
100
|
+
// this.InputFields?.formkey
|
|
101
|
+
// ? this.InputFields?.defaultvalue[this.InputFields?.formkey]
|
|
102
|
+
// : this.InputFields?.defaultvalue
|
|
103
|
+
// );
|
|
104
|
+
// this.DropdownForm.get(this.dynamciformcontrolparent()).patchValue(this.InputFields?.defaultvalue);
|
|
62
105
|
this.chipSelectedObj = this.InputFields?.defaultvalue;
|
|
106
|
+
this.chipSelectedId = [];
|
|
107
|
+
this.formkeyarr = [];
|
|
63
108
|
if (this.chipSelectedObj.length > 0) {
|
|
64
|
-
|
|
65
|
-
if (this.InputFields?.Outputkey) {
|
|
66
|
-
this.chipSelectedId.push(foundemp[this.InputFields?.Outputkey]);
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
this.chipSelectedId.push(foundemp.id);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
109
|
+
this.looop();
|
|
72
110
|
this.selected();
|
|
73
111
|
}
|
|
74
112
|
}
|
|
113
|
+
if (this.DropdownForm.get(this.dynamciformcontrolparent()).value &&
|
|
114
|
+
this.DropdownForm.get(this.dynamciformcontrolparent()).value.length !== 0) {
|
|
115
|
+
this.chipSelectedObj = this.DropdownForm.get(this.dynamciformcontrolparent()).value;
|
|
116
|
+
console.log('test', this.chipSelectedObj = this.DropdownForm.get(this.dynamciformcontrolparent()).value);
|
|
117
|
+
this.chipSelectedId = [];
|
|
118
|
+
this.formkeyarr = [];
|
|
119
|
+
this.looop();
|
|
120
|
+
this.selected();
|
|
121
|
+
}
|
|
75
122
|
if (this.InputFields?.fronentdata) {
|
|
76
123
|
this.Dropdowndata = this.InputFields?.data;
|
|
77
124
|
}
|
|
@@ -81,16 +128,17 @@ export class VsChipddCmpComponent {
|
|
|
81
128
|
}
|
|
82
129
|
ngOnChanges(changes) {
|
|
83
130
|
if (changes.InputFields && changes.InputFields.currentValue) {
|
|
84
|
-
console.log(
|
|
131
|
+
console.log('Summary Log Changes');
|
|
85
132
|
this.currentpage = 1;
|
|
86
133
|
this.dupngonit();
|
|
87
134
|
}
|
|
88
135
|
if (changes.ResetForm && changes.ResetForm.currentValue) {
|
|
89
|
-
console.log(
|
|
90
|
-
this.DropdownForm.reset();
|
|
136
|
+
console.log('hitted');
|
|
137
|
+
// this.DropdownForm.reset();
|
|
91
138
|
this.currentpage = 1;
|
|
92
139
|
this.dupngonit();
|
|
93
140
|
this.chipSelectedId = [];
|
|
141
|
+
this.formkeyarr = [];
|
|
94
142
|
this.chipSelectedObj = [];
|
|
95
143
|
this.dataEvent.emit([]);
|
|
96
144
|
}
|
|
@@ -99,14 +147,14 @@ export class VsChipddCmpComponent {
|
|
|
99
147
|
// return key[clt];
|
|
100
148
|
// }
|
|
101
149
|
autocompleteAppScroll() {
|
|
102
|
-
if (!
|
|
150
|
+
if (!this.InputFields?.fronentdata) {
|
|
103
151
|
setTimeout(() => {
|
|
104
152
|
if (this.matAutocompleteApp &&
|
|
105
153
|
this.autocompleteTrigger &&
|
|
106
154
|
this.matAutocompleteApp.panel) {
|
|
107
155
|
fromEvent(this.matAutocompleteApp.panel.nativeElement, 'scroll')
|
|
108
|
-
.pipe(map(x => this.matAutocompleteApp.panel.nativeElement.scrollTop), takeUntil(this.autocompleteTrigger.panelClosingActions))
|
|
109
|
-
.subscribe(x => {
|
|
156
|
+
.pipe(map((x) => this.matAutocompleteApp.panel.nativeElement.scrollTop), takeUntil(this.autocompleteTrigger.panelClosingActions))
|
|
157
|
+
.subscribe((x) => {
|
|
110
158
|
const scrollTop = this.matAutocompleteApp.panel.nativeElement.scrollTop;
|
|
111
159
|
const scrollHeight = this.matAutocompleteApp.panel.nativeElement.scrollHeight;
|
|
112
160
|
const elementHeight = this.matAutocompleteApp.panel.nativeElement.clientHeight;
|
|
@@ -117,12 +165,13 @@ export class VsChipddCmpComponent {
|
|
|
117
165
|
let params = this.searchparams(value);
|
|
118
166
|
this.currentpage = this.currentpage + 1;
|
|
119
167
|
if (this.currentpage > 1) {
|
|
120
|
-
this.service
|
|
168
|
+
this.service
|
|
169
|
+
.GetApi(this.InputFields.url + '?page=' + this.currentpage, params)
|
|
121
170
|
.subscribe((results) => {
|
|
122
|
-
let datas = results[
|
|
123
|
-
let datapagination = results[
|
|
171
|
+
let datas = results['data'];
|
|
172
|
+
let datapagination = results['pagination'];
|
|
124
173
|
this.Dropdowndata = this.Dropdowndata.concat(datas);
|
|
125
|
-
console.log(
|
|
174
|
+
console.log('this.Dropdowndata', this.Dropdowndata);
|
|
126
175
|
if (this.Dropdowndata.length >= 0) {
|
|
127
176
|
this.has_next = datapagination.has_next;
|
|
128
177
|
this.has_previous = datapagination.has_previous;
|
|
@@ -138,30 +187,39 @@ export class VsChipddCmpComponent {
|
|
|
138
187
|
}
|
|
139
188
|
}
|
|
140
189
|
dropdownsearch() {
|
|
141
|
-
if (!
|
|
142
|
-
this.DropdownForm.get(
|
|
190
|
+
if (!this.InputFields?.fronentdata) {
|
|
191
|
+
this.DropdownForm.get('value')
|
|
192
|
+
.valueChanges.pipe(debounceTime(100), distinctUntilChanged(), tap(() => {
|
|
143
193
|
this.DrodownLoading = true;
|
|
144
|
-
console.log(
|
|
194
|
+
console.log('inside tap');
|
|
145
195
|
}), switchMap((value) => {
|
|
146
196
|
let params = this.searchparams(value);
|
|
147
197
|
this.currentpage = 1;
|
|
148
|
-
return this.service
|
|
198
|
+
return this.service
|
|
199
|
+
.GetApi(this.InputFields.url + '?page=' + this.currentpage, params)
|
|
200
|
+
.pipe(finalize(() => {
|
|
149
201
|
this.DrodownLoading = false;
|
|
150
202
|
}));
|
|
151
|
-
}))
|
|
152
|
-
|
|
203
|
+
}))
|
|
204
|
+
.subscribe((results) => {
|
|
205
|
+
let datas = results['data'];
|
|
153
206
|
this.Dropdowndata = datas;
|
|
154
207
|
});
|
|
155
208
|
}
|
|
156
209
|
}
|
|
157
210
|
getdropdown(value) {
|
|
211
|
+
this.currentpage = 1;
|
|
158
212
|
if (this.InputFields.url) {
|
|
159
213
|
let params = this.searchparams(value);
|
|
160
|
-
this.service
|
|
214
|
+
this.service
|
|
215
|
+
.GetApi(this.InputFields.url + '?page=' + this.currentpage, params)
|
|
161
216
|
.subscribe((results) => {
|
|
162
|
-
let datas = results[
|
|
163
|
-
let datapagination = results[
|
|
217
|
+
let datas = results['data'];
|
|
218
|
+
let datapagination = results['pagination'];
|
|
164
219
|
this.Dropdowndata = datas;
|
|
220
|
+
setTimeout(() => {
|
|
221
|
+
this.trigger.openPanel();
|
|
222
|
+
}, 0);
|
|
165
223
|
if (this.Dropdowndata.length >= 0) {
|
|
166
224
|
this.has_next = datapagination.has_next;
|
|
167
225
|
this.has_previous = datapagination.has_previous;
|
|
@@ -170,34 +228,49 @@ export class VsChipddCmpComponent {
|
|
|
170
228
|
});
|
|
171
229
|
}
|
|
172
230
|
}
|
|
231
|
+
dynamciformcontrolparent() {
|
|
232
|
+
return this.InputFields?.formcontrolname && this.formGroup
|
|
233
|
+
? this.InputFields?.formcontrolname
|
|
234
|
+
: 'chipvalue';
|
|
235
|
+
}
|
|
173
236
|
selected() {
|
|
174
|
-
|
|
175
|
-
if (this.InputFields?.
|
|
176
|
-
this.
|
|
177
|
-
if (this.InputFields?.formgroup && this.InputFields?.formcontrolname) {
|
|
178
|
-
this.InputFields?.formgroup
|
|
179
|
-
.get(this.InputFields?.formcontrolname)
|
|
180
|
-
.patchValue(this.chipSelectedObj);
|
|
181
|
-
}
|
|
237
|
+
this.Outputdata = this.chipSelectedObj;
|
|
238
|
+
if (this.InputFields?.Outputkey) {
|
|
239
|
+
this.Outputdata = this.chipSelectedId;
|
|
182
240
|
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
this.dataEvent.emit(this.chipSelectedId);
|
|
186
|
-
if (this.InputFields?.formgroup && this.InputFields?.formcontrolname) {
|
|
187
|
-
this.InputFields?.formgroup
|
|
188
|
-
.get(this.InputFields?.formcontrolname)
|
|
189
|
-
.patchValue(this.chipSelectedId);
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
else {
|
|
193
|
-
this.dataEvent.emit(this.chipSelectedObj);
|
|
194
|
-
if (this.InputFields?.formgroup && this.InputFields?.formcontrolname) {
|
|
195
|
-
this.InputFields?.formgroup
|
|
196
|
-
.get(this.InputFields?.formcontrolname)
|
|
197
|
-
.patchValue(this.chipSelectedObj);
|
|
198
|
-
}
|
|
199
|
-
}
|
|
241
|
+
if (this.formGroup && this.InputFields?.formcontrolname) {
|
|
242
|
+
this.DropdownForm.get(this.dynamciformcontrolparent()).patchValue(this.formkeyarr);
|
|
200
243
|
}
|
|
244
|
+
console.log(this.formkeyarr);
|
|
245
|
+
console.log('this.DropdownForm.get', this.DropdownForm.value);
|
|
246
|
+
this.dataEvent.emit(this.Outputdata);
|
|
247
|
+
// let data = this.DropdownForm.value.value
|
|
248
|
+
// if (this.InputFields?.wholedata) {
|
|
249
|
+
// this.dataEvent.emit(this.chipSelectedObj);
|
|
250
|
+
// if (this.InputFields?.formgroup && this.InputFields?.formcontrolname) {
|
|
251
|
+
// this.InputFields?.formgroup
|
|
252
|
+
// .get(this.InputFields?.formcontrolname)
|
|
253
|
+
// .patchValue(this.chipSelectedObj);
|
|
254
|
+
// }
|
|
255
|
+
// }
|
|
256
|
+
// else {
|
|
257
|
+
// if (this.InputFields?.Outputkey) {
|
|
258
|
+
// this.dataEvent.emit(this.chipSelectedId);
|
|
259
|
+
// if (this.InputFields?.formgroup && this.InputFields?.formcontrolname) {
|
|
260
|
+
// this.InputFields?.formgroup
|
|
261
|
+
// .get(this.InputFields?.formcontrolname)
|
|
262
|
+
// .patchValue(this.chipSelectedId);
|
|
263
|
+
// }
|
|
264
|
+
// }
|
|
265
|
+
// else {
|
|
266
|
+
// this.dataEvent.emit(this.chipSelectedObj);
|
|
267
|
+
// if (this.InputFields?.formgroup && this.InputFields?.formcontrolname) {
|
|
268
|
+
// this.InputFields?.formgroup
|
|
269
|
+
// .get(this.InputFields?.formcontrolname)
|
|
270
|
+
// .patchValue(this.chipSelectedObj);
|
|
271
|
+
// }
|
|
272
|
+
// }
|
|
273
|
+
// }
|
|
201
274
|
}
|
|
202
275
|
searchparams(value) {
|
|
203
276
|
let params = '';
|
|
@@ -205,7 +278,9 @@ export class VsChipddCmpComponent {
|
|
|
205
278
|
params = this.InputFields.params;
|
|
206
279
|
}
|
|
207
280
|
let inpValue = value;
|
|
208
|
-
inpValue
|
|
281
|
+
inpValue
|
|
282
|
+
? (params += '&' + this.InputFields.searchkey + '=' + inpValue)
|
|
283
|
+
: '';
|
|
209
284
|
return params;
|
|
210
285
|
}
|
|
211
286
|
removechip(obj) {
|
|
@@ -215,30 +290,37 @@ export class VsChipddCmpComponent {
|
|
|
215
290
|
console.log(this.chipSelectedObj);
|
|
216
291
|
this.chipSelectedId.splice(index, 1);
|
|
217
292
|
console.log(this.chipSelectedId);
|
|
293
|
+
this.formkeyarr.splice(index, 1);
|
|
294
|
+
console.log('this.formkeyarr', this.formkeyarr);
|
|
218
295
|
this.DropInput.nativeElement.value = '';
|
|
219
296
|
this.selected();
|
|
220
297
|
}
|
|
221
298
|
}
|
|
222
|
-
venSelected(
|
|
299
|
+
venSelected(data) {
|
|
223
300
|
this.DropInput.nativeElement.value = '';
|
|
224
|
-
console.log('event.option.value',
|
|
225
|
-
this.selectvenByName(
|
|
301
|
+
console.log('event.option.value', data);
|
|
302
|
+
this.selectvenByName(data[this.comparekey(data)]);
|
|
226
303
|
console.log('chipSelectedvenid', this.chipSelectedObj);
|
|
227
304
|
}
|
|
228
305
|
selectvenByName(ven) {
|
|
229
|
-
let foundemp1 = this.chipSelectedObj.filter(e => e[this.comparekey(e)] == ven);
|
|
306
|
+
let foundemp1 = this.chipSelectedObj.filter((e) => e[this.comparekey(e)] == ven);
|
|
230
307
|
if (foundemp1.length) {
|
|
231
308
|
return;
|
|
232
309
|
}
|
|
233
|
-
let foundemp = this.Dropdowndata.filter(e => e[this.comparekey(e)] == ven);
|
|
310
|
+
let foundemp = this.Dropdowndata.filter((e) => e[this.comparekey(e)] == ven);
|
|
234
311
|
if (foundemp.length) {
|
|
235
312
|
this.chipSelectedObj.push(foundemp[0]);
|
|
236
313
|
if (this.InputFields?.Outputkey) {
|
|
237
314
|
this.chipSelectedId.push(foundemp[0][this.InputFields?.Outputkey]);
|
|
238
315
|
}
|
|
316
|
+
if (this.InputFields?.formkey) {
|
|
317
|
+
this.formkeyarr.push(foundemp[0][this.InputFields?.formkey]);
|
|
318
|
+
}
|
|
239
319
|
else {
|
|
240
320
|
this.chipSelectedId.push(foundemp[0].id);
|
|
241
321
|
}
|
|
322
|
+
console.log('formkeyarr12', this.formkeyarr);
|
|
323
|
+
this.selected();
|
|
242
324
|
}
|
|
243
325
|
}
|
|
244
326
|
comparekey(e) {
|
|
@@ -247,7 +329,7 @@ export class VsChipddCmpComponent {
|
|
|
247
329
|
}
|
|
248
330
|
else {
|
|
249
331
|
if (e?.id) {
|
|
250
|
-
return
|
|
332
|
+
return 'id';
|
|
251
333
|
}
|
|
252
334
|
else {
|
|
253
335
|
return this.InputFields.displaykey;
|
|
@@ -255,17 +337,23 @@ export class VsChipddCmpComponent {
|
|
|
255
337
|
}
|
|
256
338
|
}
|
|
257
339
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: VsChipddCmpComponent, deps: [{ token: i1.VsChipdropdownService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
258
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: VsChipddCmpComponent, selector: "lib-vs-chipdd-cmp", inputs: { InputFields: "InputFields", ResetForm: "ResetForm", Backendapi: "Backendapi" }, outputs: { dataEvent: "dataEvent" }, viewQueries: [{ propertyName: "autocompleteTrigger", first: true, predicate: MatAutocompleteTrigger, descendants: true }, { propertyName: "matAutocompleteApp", first: true, predicate: ["scrolll"], descendants: true }, { propertyName: "DropInput", first: true, predicate: ["DropInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div
|
|
340
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: VsChipddCmpComponent, selector: "lib-vs-chipdd-cmp", inputs: { InputFields: "InputFields", ResetForm: "ResetForm", Backendapi: "Backendapi", formGroup: "formGroup" }, outputs: { dataEvent: "dataEvent" }, viewQueries: [{ propertyName: "trigger", first: true, predicate: ["autoCompleteInput"], descendants: true, read: MatAutocompleteTrigger }, { propertyName: "autocompleteTrigger", first: true, predicate: MatAutocompleteTrigger, descendants: true }, { propertyName: "matAutocompleteApp", first: true, predicate: ["scrolll"], descendants: true }, { propertyName: "DropInput", first: true, predicate: ["DropInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div>\r\n <form [formGroup]=\"DropdownForm\">\r\n <mat-form-field\r\n class=\"mat-chipScroll\"\r\n appearance=\"outline\"\r\n (click)=\"!this.InputFields?.fronentdata ? this.getdropdown('') : ''\"\r\n >\r\n <mat-label>{{ InputFields?.label | translate }}</mat-label>\r\n <mat-chip-grid multiple #chipListvendor class=\"chip-container\">\r\n <mat-chip-row\r\n *ngFor=\"let obj of chipSelectedObj\"\r\n [removable]=\"true\"\r\n (removed)=\"removechip(obj)\"\r\n class=\"mat-chipEx\"\r\n >\r\n {{ obj[InputFields?.displaykey] }}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip-row>\r\n <input\r\n #DropInput\r\n [matAutocomplete]=\"scrolll\"\r\n class=\"matformfieldinputstyle\"\r\n (keydown)=\"dropdownsearch()\"\r\n [matChipInputFor]=\"chipListvendor\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorsKeysCodes\"\r\n [matChipInputAddOnBlur]=\"true\"\r\n #autoCompleteInput=\"matAutocompleteTrigger\"\r\n [formControlName]=\"\r\n this.dynamciformcontrolparent()\r\n \"\r\n />\r\n </mat-chip-grid>\r\n <mat-autocomplete\r\n #scrolll=\"matAutocomplete\"\r\n (opened)=\"autocompleteAppScroll()\"\r\n >\r\n <ng-container>\r\n <mat-option\r\n *ngFor=\"let dropvalues of Dropdowndata\"\r\n [value]=\"\r\n this.InputFields?.formkey\r\n ? dropvalues[this.InputFields?.formkey]\r\n : dropvalues\r\n \"\r\n (onSelectionChange)=\"venSelected(dropvalues)\"\r\n >\r\n {{ dropvalues[InputFields?.displaykey] }}\r\n </mat-option>\r\n </ng-container>\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n </form>\r\n </div>\r\n <!-- (click)=\"selected()\"\r\n -->\r\n <!-- (optionSelected)=\"venSelected($event)\"\r\n -->\r\n ", styles: [".mat-chipScroll{width:420px!important}.mat-chipEx{text-align:left}.chip-container::-webkit-scrollbar{width:6px;height:6px}.chip-container::-webkit-scrollbar-track{background:transparent}.chip-container::-webkit-scrollbar-thumb{border-radius:20px;background:#c3c3c3}.chip-container::-webkit-scrollbar-thumb:hover{background:#a6a6a6}.mat-chipScroll .mat-chip-list-wrapper{height:80px;overflow-y:scroll}mat-form-field{width:250px;font-family:var(--base-font-family)}\n"], dependencies: [{ kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "component", type: i4.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i5.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i5.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i7.MatChipGrid, selector: "mat-chip-grid", inputs: ["tabIndex", "disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i7.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i7.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i7.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["color", "disabled", "disableRipple", "tabIndex", "editable"], outputs: ["edited"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }] }); }
|
|
259
341
|
}
|
|
260
342
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: VsChipddCmpComponent, decorators: [{
|
|
261
343
|
type: Component,
|
|
262
|
-
args: [{ selector: 'lib-vs-chipdd-cmp', template: "<div
|
|
344
|
+
args: [{ selector: 'lib-vs-chipdd-cmp', template: "<div>\r\n <form [formGroup]=\"DropdownForm\">\r\n <mat-form-field\r\n class=\"mat-chipScroll\"\r\n appearance=\"outline\"\r\n (click)=\"!this.InputFields?.fronentdata ? this.getdropdown('') : ''\"\r\n >\r\n <mat-label>{{ InputFields?.label | translate }}</mat-label>\r\n <mat-chip-grid multiple #chipListvendor class=\"chip-container\">\r\n <mat-chip-row\r\n *ngFor=\"let obj of chipSelectedObj\"\r\n [removable]=\"true\"\r\n (removed)=\"removechip(obj)\"\r\n class=\"mat-chipEx\"\r\n >\r\n {{ obj[InputFields?.displaykey] }}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip-row>\r\n <input\r\n #DropInput\r\n [matAutocomplete]=\"scrolll\"\r\n class=\"matformfieldinputstyle\"\r\n (keydown)=\"dropdownsearch()\"\r\n [matChipInputFor]=\"chipListvendor\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorsKeysCodes\"\r\n [matChipInputAddOnBlur]=\"true\"\r\n #autoCompleteInput=\"matAutocompleteTrigger\"\r\n [formControlName]=\"\r\n this.dynamciformcontrolparent()\r\n \"\r\n />\r\n </mat-chip-grid>\r\n <mat-autocomplete\r\n #scrolll=\"matAutocomplete\"\r\n (opened)=\"autocompleteAppScroll()\"\r\n >\r\n <ng-container>\r\n <mat-option\r\n *ngFor=\"let dropvalues of Dropdowndata\"\r\n [value]=\"\r\n this.InputFields?.formkey\r\n ? dropvalues[this.InputFields?.formkey]\r\n : dropvalues\r\n \"\r\n (onSelectionChange)=\"venSelected(dropvalues)\"\r\n >\r\n {{ dropvalues[InputFields?.displaykey] }}\r\n </mat-option>\r\n </ng-container>\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n </form>\r\n </div>\r\n <!-- (click)=\"selected()\"\r\n -->\r\n <!-- (optionSelected)=\"venSelected($event)\"\r\n -->\r\n ", styles: [".mat-chipScroll{width:420px!important}.mat-chipEx{text-align:left}.chip-container::-webkit-scrollbar{width:6px;height:6px}.chip-container::-webkit-scrollbar-track{background:transparent}.chip-container::-webkit-scrollbar-thumb{border-radius:20px;background:#c3c3c3}.chip-container::-webkit-scrollbar-thumb:hover{background:#a6a6a6}.mat-chipScroll .mat-chip-list-wrapper{height:80px;overflow-y:scroll}mat-form-field{width:250px;font-family:var(--base-font-family)}\n"] }]
|
|
263
345
|
}], ctorParameters: function () { return [{ type: i1.VsChipdropdownService }, { type: i2.FormBuilder }]; }, propDecorators: { InputFields: [{
|
|
264
346
|
type: Input
|
|
265
347
|
}], ResetForm: [{
|
|
266
348
|
type: Input
|
|
267
349
|
}], Backendapi: [{
|
|
268
350
|
type: Input
|
|
351
|
+
}], trigger: [{
|
|
352
|
+
type: ViewChild,
|
|
353
|
+
args: ['autoCompleteInput', {
|
|
354
|
+
static: false,
|
|
355
|
+
read: MatAutocompleteTrigger,
|
|
356
|
+
}]
|
|
269
357
|
}], autocompleteTrigger: [{
|
|
270
358
|
type: ViewChild,
|
|
271
359
|
args: [MatAutocompleteTrigger]
|
|
@@ -277,5 +365,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
277
365
|
}], DropInput: [{
|
|
278
366
|
type: ViewChild,
|
|
279
367
|
args: ['DropInput']
|
|
368
|
+
}], formGroup: [{
|
|
369
|
+
type: Input
|
|
280
370
|
}] } });
|
|
281
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnMtY2hpcGRkLWNtcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92cy1jaGlwZHJvcGRvd24vc3JjL2xpYi92cy1jaGlwZGQtY21wL3ZzLWNoaXBkZC1jbXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdnMtY2hpcGRyb3Bkb3duL3NyYy9saWIvdnMtY2hpcGRkLWNtcC92cy1jaGlwZGQtY21wLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQWlELHNCQUFzQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdkgsT0FBTyxFQUNMLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsR0FBRyxFQUVILFNBQVMsRUFDVCxRQUFRLEVBQ1IsU0FBUyxFQUNULEdBQUcsR0FDSixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBb0IsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR25ELE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7O0FBTXJELE1BQU0sT0FBTyxvQkFBb0I7SUFFL0IsWUFBb0IsT0FBOEIsRUFBVSxFQUFlO1FBQXZELFlBQU8sR0FBUCxPQUFPLENBQXVCO1FBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUdsRSxlQUFVLEdBQVksSUFBSSxDQUFBO1FBSXpCLGNBQVMsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUV4RCx3QkFBbUIsR0FBYSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4RCxhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLGdCQUFXLEdBQVcsQ0FBQyxDQUFDO1FBQ3hCLGlCQUFZ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RCxTQUFTO3VCQUFDLHNCQUFzQjtnQkFDWCxrQkFBa0I7c0JBQXZDLFNBQVM7dUJBQUMsU0FBUztnQkFDVixTQUFTO3NCQUFsQixNQUFNO2dCQUNpQixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQsIE1hdEF1dG9jb21wbGV0ZSwgTWF0QXV0b2NvbXBsZXRlVHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XHJcbmltcG9ydCB7XHJcbiAgZGVib3VuY2VUaW1lLFxyXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxyXG4gIHRhcCxcclxuICBmaWx0ZXIsXHJcbiAgc3dpdGNoTWFwLFxyXG4gIGZpbmFsaXplLFxyXG4gIHRha2VVbnRpbCxcclxuICBtYXAsXHJcbn0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7IGZyb20sIE9ic2VydmFibGUsIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBWc0NoaXBkcm9wZG93blNlcnZpY2UgfSBmcm9tICcuLi92cy1jaGlwZHJvcGRvd24uc2VydmljZSdcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENPTU1BLCBFTlRFUiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXZzLWNoaXBkZC1jbXAnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi92cy1jaGlwZGQtY21wLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi92cy1jaGlwZGQtY21wLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFZzQ2hpcGRkQ21wQ29tcG9uZW50IHtcclxuICBEcm9kb3duTG9hZGluZzogYm9vbGVhbjtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNlcnZpY2U6IFZzQ2hpcGRyb3Bkb3duU2VydmljZSwgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIpIHsgfVxyXG4gIEBJbnB1dCgpIElucHV0RmllbGRzOiBhbnlcclxuICBASW5wdXQoKSBSZXNldEZvcm06IGFueVxyXG4gIEBJbnB1dCgpIEJhY2tlbmRhcGk6IGJvb2xlYW4gPSB0cnVlXHJcblxyXG4gIEBWaWV3Q2hpbGQoTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcikgYXV0b2NvbXBsZXRlVHJpZ2dlcjogTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcjtcclxuICBAVmlld0NoaWxkKCdzY3JvbGxsJykgbWF0QXV0b2NvbXBsZXRlQXBwOiBNYXRBdXRvY29tcGxldGU7XHJcbiAgQE91dHB1dCgpIGRhdGFFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAVmlld0NoaWxkKCdEcm9wSW5wdXQnKSBEcm9wSW5wdXQ6IGFueTtcclxuICByZWFkb25seSBzZXBhcmF0b3JzS2V5c0NvZGVzOiBudW1iZXJbXSA9IFtFTlRFUiwgQ09NTUFdO1xyXG5cclxuICBoYXNfbmV4dDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGN1cnJlbnRwYWdlOiBudW1iZXIgPSAxO1xyXG4gIERyb3Bkb3duZGF0YTogYW55ID0gW107XHJcbiAgaGFzX3ByZXZpb3VzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgRHJvcGRvd25Gb3JtOiBGb3JtR3JvdXBcclxuICBjaGlwU2VsZWN0ZWRJZDogYW55ID0gW107XHJcbiAgY2hpcFNlbGVjdGVkT2JqOiBhbnkgPSBbXVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuRHJvcGRvd25Gb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIHZhbHVlOiAnJ1xyXG4gICAgfSlcclxuICAgIC8vIGlmICh0aGlzLklucHV0RmllbGRzPy5kZWZhdWx0dmFsdWUpIHtcclxuICAgIC8vICAgdGhpcy5Ecm9wZG93bkZvcm0uZ2V0KFwidmFsdWVcIikucGF0Y2hWYWx1ZSh0aGlzLklucHV0RmllbGRzPy5kZWZhdWx0dmFsdWUpXHJcbiAgICAvLyAgIHRoaXMuY2hpcFNlbGVjdGVkT2JqID0gdGhpcy5JbnB1dEZpZWxkcz8uZGVmYXVsdHZhbHVlXHJcbiAgICAvLyAgIGlmICh0aGlzLmNoaXBTZWxlY3RlZE9iai5sZW5ndGggPiAwKSB7XHJcbiAgICAvLyAgICAgZm9yIChsZXQgZm91bmRlbXAgb2YgdGhpcy5jaGlwU2VsZWN0ZWRPYmopIHtcclxuICAgIC8vICAgICAgIGlmICh0aGlzLklucHV0RmllbGRzPy5PdXRwdXRrZXkpIHtcclxuICAgIC8vICAgICAgICAgdGhpcy5jaGlwU2VsZWN0ZWRJZC5wdXNoKGZvdW5kZW1wW3RoaXMuSW5wdXRGaWVsZHM/Lk91dHB1dGtleV0pXHJcblxyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgICAgZWxzZSB7XHJcbiAgICAvLyAgICAgICAgIHRoaXMuY2hpcFNlbGVjdGVkSWQucHVzaChmb3VuZGVtcC5pZClcclxuXHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICAgIHRoaXMuc2VsZWN0ZWQoKVxyXG4gICAgLy8gICB9XHJcblxyXG5cclxuICAgIC8vIH1cclxuICAgIC8vIGlmICh0aGlzLklucHV0RmllbGRzPy5mcm9uZW50ZGF0YSkge1xyXG4gICAgLy8gICB0aGlzLkRyb3Bkb3duZGF0YSA9IHRoaXMuSW5wdXRGaWVsZHM/LmRhdGFcclxuXHJcbiAgICAvLyB9XHJcbiAgICAvLyBlbHNlIHtcclxuICAgIC8vICAgdGhpcy5nZXRkcm9wZG93bignJylcclxuICAgIC8vIH1cclxuICB9XHJcbiAgZHVwbmdvbml0KCl7XHJcbiAgICB0aGlzLkRyb3Bkb3duRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICB2YWx1ZTogJydcclxuICAgIH0pXHJcbiAgICBpZiAodGhpcy5JbnB1dEZpZWxkcz8uZGVmYXVsdHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuRHJvcGRvd25Gb3JtLmdldChcInZhbHVlXCIpLnBhdGNoVmFsdWUodGhpcy5JbnB1dEZpZWxkcz8uZGVmYXVsdHZhbHVlKVxyXG4gICAgICB0aGlzLmNoaXBTZWxlY3RlZE9iaiA9IHRoaXMuSW5wdXRGaWVsZHM/LmRlZmF1bHR2YWx1ZVxyXG4gICAgICBpZiAodGhpcy5jaGlwU2VsZWN0ZWRPYmoubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGZvciAobGV0IGZvdW5kZW1wIG9mIHRoaXMuY2hpcFNlbGVjdGVkT2JqKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5JbnB1dEZpZWxkcz8uT3V0cHV0a2V5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hpcFNlbGVjdGVkSWQucHVzaChmb3VuZGVtcFt0aGlzLklucHV0RmllbGRzPy5PdXRwdXRrZXldKVxyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNoaXBTZWxlY3RlZElkLnB1c2goZm91bmRlbXAuaWQpXHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlbGVjdGVkKClcclxuICAgICAgfVxyXG5cclxuXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5JbnB1dEZpZWxkcz8uZnJvbmVudGRhdGEpIHtcclxuICAgICAgdGhpcy5Ecm9wZG93bmRhdGEgPSB0aGlzLklucHV0RmllbGRzPy5kYXRhXHJcblxyXG4gICAgfVxyXG4gICAgLy8gZWxzZSB7XHJcbiAgICAvLyAgIHRoaXMuZ2V0ZHJvcGRvd24oJycpXHJcbiAgICAvLyB9XHJcbiAgfVxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzLklucHV0RmllbGRzICYmIGNoYW5nZXMuSW5wdXRGaWVsZHMuY3VycmVudFZhbHVlKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiU3VtbWFyeSBMb2cgQ2hhbmdlc1wiKVxyXG4gICAgICB0aGlzLmN1cnJlbnRwYWdlID0gMVxyXG4gICAgICB0aGlzLmR1cG5nb25pdCgpXHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlcy5SZXNldEZvcm0gJiYgY2hhbmdlcy5SZXNldEZvcm0uY3VycmVudFZhbHVlKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiaGl0dGVkXCIpXHJcbiAgICAgIHRoaXMuRHJvcGRvd25Gb3JtLnJlc2V0KClcclxuICAgICAgdGhpcy5jdXJyZW50cGFnZSA9IDFcclxuICAgICAgdGhpcy5kdXBuZ29uaXQoKVxyXG4gICAgICB0aGlzLmNoaXBTZWxlY3RlZElkID0gW107XHJcbiAgICAgIHRoaXMuY2hpcFNlbGVjdGVkT2JqID0gW11cclxuICAgICAgdGhpcy5kYXRhRXZlbnQuZW1pdChbXSk7XHJcblxyXG5cclxuICAgIH1cclxuICB9XHJcbiAgLy8gcHVibGljIGRpc3BsYXlkZXZlbG9wY2xpZW50KGNsdDogYW55LCBrZXk6IHN0cmluZykge1xyXG4gIC8vICAgcmV0dXJuIGtleVtjbHRdO1xyXG4gIC8vIH1cclxuICBhdXRvY29tcGxldGVBcHBTY3JvbGwoKSB7XHJcbiAgICBpZiAoISh0aGlzLklucHV0RmllbGRzPy5mcm9uZW50ZGF0YSkpIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5tYXRBdXRvY29tcGxldGVBcHAgJiZcclxuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlVHJpZ2dlciAmJlxyXG4gICAgICAgICAgdGhpcy5tYXRBdXRvY29tcGxldGVBcHAucGFuZWxcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGZyb21FdmVudCh0aGlzLm1hdEF1dG9jb21wbGV0ZUFwcC5wYW5lbC5uYXRpdmVFbGVtZW50LCAnc2Nyb2xsJylcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgbWFwKHggPT4gdGhpcy5tYXRBdXRvY29tcGxldGVBcHAucGFuZWwubmF0aXZlRWxlbWVudC5zY3JvbGxUb3ApLFxyXG4gICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmF1dG9jb21wbGV0ZVRyaWdnZXIucGFuZWxDbG9zaW5nQWN0aW9ucyBhcyBPYnNlcnZhYmxlPGFueT4pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSB0aGlzLm1hdEF1dG9jb21wbGV0ZUFwcC5wYW5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcDtcclxuICAgICAgICAgICAgICBjb25zdCBzY3JvbGxIZWlnaHQgPSB0aGlzLm1hdEF1dG9jb21wbGV0ZUFwcC5wYW5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodDtcclxuICAgICAgICAgICAgICBjb25zdCBlbGVtZW50SGVpZ2h0ID0gdGhpcy5tYXRBdXRvY29tcGxldGVBcHAucGFuZWwubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgY29uc3QgYXRCb3R0b20gPSBzY3JvbGxIZWlnaHQgLSAxIDw9IHNjcm9sbFRvcCArIGVsZW1lbnRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgaWYgKGF0Qm90dG9tKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNfbmV4dCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLkRyb3BJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgIGxldCBwYXJhbXMgPSB0aGlzLnNlYXJjaHBhcmFtcyh2YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50cGFnZSA9IHRoaXMuY3VycmVudHBhZ2UgKyAxXHJcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRwYWdlID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZS5HZXRBcGkodGhpcy5JbnB1dEZpZWxkcy51cmwgKyBcIj9wYWdlPVwiICsgdGhpcy5jdXJyZW50cGFnZSwgcGFyYW1zKVxyXG4gICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0czogYW55W10pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGFzID0gcmVzdWx0c1tcImRhdGFcIl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhcGFnaW5hdGlvbiA9IHJlc3VsdHNbXCJwYWdpbmF0aW9uXCJdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLkRyb3Bkb3duZGF0YSA9IHRoaXMuRHJvcGRvd25kYXRhLmNvbmNhdChkYXRhcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwidGhpcy5Ecm9wZG93bmRhdGFcIiwgdGhpcy5Ecm9wZG93bmRhdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLkRyb3Bkb3duZGF0YS5sZW5ndGggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzX25leHQgPSBkYXRhcGFnaW5hdGlvbi5oYXNfbmV4dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc19wcmV2aW91cyA9IGRhdGFwYWdpbmF0aW9uLmhhc19wcmV2aW91cztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRwYWdlID0gZGF0YXBhZ2luYXRpb24uaW5kZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICB9XHJcbiAgZHJvcGRvd25zZWFyY2goKSB7XHJcbiAgICBpZiAoISh0aGlzLklucHV0RmllbGRzPy5mcm9uZW50ZGF0YSkpIHtcclxuICAgICAgdGhpcy5Ecm9wZG93bkZvcm0uZ2V0KFwidmFsdWVcIikudmFsdWVDaGFuZ2VzLnBpcGUoXHJcbiAgICAgICAgZGVib3VuY2VUaW1lKDEwMCksXHJcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5Ecm9kb3duTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcImluc2lkZSB0YXBcIik7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgc3dpdGNoTWFwKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgbGV0IHBhcmFtcyA9IHRoaXMuc2VhcmNocGFyYW1zKHZhbHVlKTtcclxuICAgICAgICAgIHRoaXMuY3VycmVudHBhZ2UgPSAxXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlLkdldEFwaSh0aGlzLklucHV0RmllbGRzLnVybCArIFwiP3BhZ2U9XCIgKyB0aGlzLmN1cnJlbnRwYWdlLCBwYXJhbXMpLnBpcGUoXHJcbiAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLkRyb2Rvd25Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICkuc3Vic2NyaWJlKChyZXN1bHRzOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgIGxldCBkYXRhcyA9IHJlc3VsdHNbXCJkYXRhXCJdO1xyXG4gICAgICAgIHRoaXMuRHJvcGRvd25kYXRhID0gZGF0YXM7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICB9XHJcbiAgZ2V0ZHJvcGRvd24odmFsdWUpIHtcclxuICAgIGlmKHRoaXMuSW5wdXRGaWVsZHMudXJsKXtcclxuICAgICAgbGV0IHBhcmFtcyA9IHRoaXMuc2VhcmNocGFyYW1zKHZhbHVlKVxyXG4gICAgdGhpcy5zZXJ2aWNlLkdldEFwaSh0aGlzLklucHV0RmllbGRzLnVybCArIFwiP3BhZ2U9XCIgKyB0aGlzLmN1cnJlbnRwYWdlLCBwYXJhbXMpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdHM6IGFueVtdKSA9PiB7XHJcbiAgICAgICAgbGV0IGRhdGFzID0gcmVzdWx0c1tcImRhdGFcIl07XHJcbiAgICAgICAgbGV0IGRhdGFwYWdpbmF0aW9uID0gcmVzdWx0c1tcInBhZ2luYXRpb25cIl07XHJcbiAgICAgICAgdGhpcy5Ecm9wZG93bmRhdGEgPSBkYXRhc1xyXG4gICAgICAgIGlmICh0aGlzLkRyb3Bkb3duZGF0YS5sZW5ndGggPj0gMCkge1xyXG4gICAgICAgICAgdGhpcy5oYXNfbmV4dCA9IGRhdGFwYWdpbmF0aW9uLmhhc19uZXh0O1xyXG4gICAgICAgICAgdGhpcy5oYXNfcHJldmlvdXMgPSBkYXRhcGFnaW5hdGlvbi5oYXNfcHJldmlvdXM7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRwYWdlID0gZGF0YXBhZ2luYXRpb24uaW5kZXg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG5cclxuICAgIH1cclxuICAgIFxyXG4gIH1cclxuICBzZWxlY3RlZCgpIHtcclxuICAgIC8vIGxldCBkYXRhID0gdGhpcy5Ecm9wZG93bkZvcm0udmFsdWUudmFsdWVcclxuICAgIGlmICh0aGlzLklucHV0RmllbGRzPy53aG9sZWRhdGEpIHtcclxuICAgICAgdGhpcy5kYXRhRXZlbnQuZW1pdCh0aGlzLmNoaXBTZWxlY3RlZE9iaik7XHJcbiAgICAgIGlmICh0aGlzLklucHV0RmllbGRzPy5mb3JtZ3JvdXAgJiYgdGhpcy5JbnB1dEZpZWxkcz8uZm9ybWNvbnRyb2xuYW1lKSB7XHJcbiAgICAgICAgdGhpcy5JbnB1dEZpZWxkcz8uZm9ybWdyb3VwXHJcbiAgICAgICAgICAuZ2V0KHRoaXMuSW5wdXRGaWVsZHM/LmZvcm1jb250cm9sbmFtZSlcclxuICAgICAgICAgIC5wYXRjaFZhbHVlKHRoaXMuY2hpcFNlbGVjdGVkT2JqKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLklucHV0RmllbGRzPy5PdXRwdXRrZXkpIHtcclxuICAgICAgICB0aGlzLmRhdGFFdmVudC5lbWl0KHRoaXMuY2hpcFNlbGVjdGVkSWQpO1xyXG4gICAgICAgIGlmICh0aGlzLklucHV0RmllbGRzPy5mb3JtZ3JvdXAgJiYgdGhpcy5JbnB1dEZpZWxkcz8uZm9ybWNvbnRyb2xuYW1lKSB7XHJcbiAgICAgICAgICB0aGlzLklucHV0RmllbGRzPy5mb3JtZ3JvdXBcclxuICAgICAgICAgICAgLmdldCh0aGlzLklucHV0RmllbGRzPy5mb3JtY29udHJvbG5hbWUpXHJcbiAgICAgICAgICAgIC5wYXRjaFZhbHVlKHRoaXMuY2hpcFNlbGVjdGVkSWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmRhdGFFdmVudC5lbWl0KHRoaXMuY2hpcFNlbGVjdGVkT2JqKTtcclxuICAgICAgICBpZiAodGhpcy5JbnB1dEZpZWxkcz8uZm9ybWdyb3VwICYmIHRoaXMuSW5wdXRGaWVsZHM/LmZvcm1jb250cm9sbmFtZSkge1xyXG4gICAgICAgICAgdGhpcy5JbnB1dEZpZWxkcz8uZm9ybWdyb3VwXHJcbiAgICAgICAgICAgIC5nZXQodGhpcy5JbnB1dEZpZWxkcz8uZm9ybWNvbnRyb2xuYW1lKVxyXG4gICAgICAgICAgICAucGF0Y2hWYWx1ZSh0aGlzLmNoaXBTZWxlY3RlZE9iaik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICB9XHJcbiAgc2VhcmNocGFyYW1zKHZhbHVlKSB7XHJcbiAgICBsZXQgcGFyYW1zID0gJydcclxuICAgIGlmICh0aGlzLklucHV0RmllbGRzLnBhcmFtcykge1xyXG4gICAgICBwYXJhbXMgPSB0aGlzLklucHV0RmllbGRzLnBhcmFtc1xyXG4gICAgfVxyXG4gICAgbGV0IGlucFZhbHVlID0gdmFsdWVcclxuICAgIGlucFZhbHVlID8gcGFyYW1zICs9ICcmJyArIHRoaXMuSW5wdXRGaWVsZHMuc2VhcmNoa2V5ICsgJz0nICsgaW5wVmFsdWUgOiAnJ1xyXG4gICAgcmV0dXJuIHBhcmFtc1xyXG4gIH1cclxuICByZW1vdmVjaGlwKG9iaikge1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmNoaXBTZWxlY3RlZE9iai5pbmRleE9mKG9iaik7XHJcblxyXG4gICAgaWYgKGluZGV4ID49IDApIHtcclxuXHJcbiAgICAgIHRoaXMuY2hpcFNlbGVjdGVkT2JqLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuY2hpcFNlbGVjdGVkT2JqKTtcclxuICAgICAgdGhpcy5jaGlwU2VsZWN0ZWRJZC5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLmNoaXBTZWxlY3RlZElkKTtcclxuICAgICAgdGhpcy5Ecm9wSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkKClcclxuICAgIH1cclxuXHJcbiAgfVxyXG4gIHB1YmxpYyB2ZW5TZWxlY3RlZChldmVudDogTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5Ecm9wSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xyXG4gICAgY29uc29sZS5sb2coJ2V2ZW50Lm9wdGlvbi52YWx1ZScsIGV2ZW50Lm9wdGlvbi52YWx1ZSlcclxuICAgIHRoaXMuc2VsZWN0dmVuQnlOYW1lKGV2ZW50Lm9wdGlvbi52YWx1ZVt0aGlzLmNvbXBhcmVrZXkoZXZlbnQub3B0aW9uLnZhbHVlKV0pO1xyXG4gICAgY29uc29sZS5sb2coJ2NoaXBTZWxlY3RlZHZlbmlkJywgdGhpcy5jaGlwU2VsZWN0ZWRPYmopXHJcbiAgfVxyXG4gIHByaXZhdGUgc2VsZWN0dmVuQnlOYW1lKHZlbikge1xyXG4gICAgbGV0IGZvdW5kZW1wMSA9IHRoaXMuY2hpcFNlbGVjdGVkT2JqLmZpbHRlcihlID0+IGVbdGhpcy5jb21wYXJla2V5KGUpXSA9PSB2ZW4pO1xyXG4gICAgaWYgKGZvdW5kZW1wMS5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGZvdW5kZW1wID0gdGhpcy5Ecm9wZG93bmRhdGEuZmlsdGVyKGUgPT4gZVt0aGlzLmNvbXBhcmVrZXkoZSldID09IHZlbik7XHJcbiAgICBpZiAoZm91bmRlbXAubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuY2hpcFNlbGVjdGVkT2JqLnB1c2goZm91bmRlbXBbMF0pO1xyXG4gICAgICBpZiAodGhpcy5JbnB1dEZpZWxkcz8uT3V0cHV0a2V5KSB7XHJcbiAgICAgICAgdGhpcy5jaGlwU2VsZWN0ZWRJZC5wdXNoKGZvdW5kZW1wWzBdW3RoaXMuSW5wdXRGaWVsZHM/Lk91dHB1dGtleV0pXHJcblxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY2hpcFNlbGVjdGVkSWQucHVzaChmb3VuZGVtcFswXS5pZClcclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgY29tcGFyZWtleShlKSB7XHJcbiAgICBpZiAodGhpcy5JbnB1dEZpZWxkcz8uY29tcGFyZWtleSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5JbnB1dEZpZWxkcz8uY29tcGFyZWtleVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmIChlPy5pZCkge1xyXG4gICAgICAgIHJldHVybiBcImlkXCJcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5JbnB1dEZpZWxkcy5kaXNwbGF5a2V5XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn0iLCI8ZGl2IChjbGljayk9XCIhdGhpcy5JbnB1dEZpZWxkcz8uZnJvbmVudGRhdGEgPyB0aGlzLmdldGRyb3Bkb3duKCcnKTonJyBcIj5cclxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiRHJvcGRvd25Gb3JtXCI+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibWF0LWNoaXBTY3JvbGxcIlxyXG4gICAgICAgIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tJbnB1dEZpZWxkcz8ubGFiZWwgfCB0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LWNoaXAtZ3JpZCBtdWx0aXBsZSAjY2hpcExpc3R2ZW5kb3IgY2xhc3M9XCJjaGlwLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1jaGlwLXJvdyAqbmdGb3I9XCJsZXQgb2JqIG9mIGNoaXBTZWxlY3RlZE9ialwiIFtyZW1vdmFibGVdPVwidHJ1ZVwiIChyZW1vdmVkKT1cInJlbW92ZWNoaXAob2JqKVwiIGNsYXNzPVwibWF0LWNoaXBFeFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IG9ialtJbnB1dEZpZWxkcz8uZGlzcGxheWtleV0gfX1cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0Q2hpcFJlbW92ZT5jYW5jZWw8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcC1yb3c+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgI0Ryb3BJbnB1dCBbbWF0QXV0b2NvbXBsZXRlXT1cInNjcm9sbGxcIiBjbGFzcz1cIm1hdGZvcm1maWVsZGlucHV0c3R5bGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImRyb3Bkb3duc2VhcmNoKClcIiBbbWF0Q2hpcElucHV0Rm9yXT1cImNoaXBMaXN0dmVuZG9yXCIgW21hdENoaXBJbnB1dFNlcGFyYXRvcktleUNvZGVzXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0b3JzS2V5c0NvZGVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBbbWF0Q2hpcElucHV0QWRkT25CbHVyXT1cInRydWVcIiBmb3JtQ29udHJvbE5hbWU9XCJ2YWx1ZVwiIC8+XHJcbiAgICAgICAgICAgIDwvbWF0LWNoaXAtZ3JpZD5cclxuICAgICAgICAgICAgPG1hdC1hdXRvY29tcGxldGUgI3Njcm9sbGw9XCJtYXRBdXRvY29tcGxldGVcIiAob3B0aW9uU2VsZWN0ZWQpPVwidmVuU2VsZWN0ZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAob3BlbmVkKT1cImF1dG9jb21wbGV0ZUFwcFNjcm9sbCgpXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBkcm9wdmFsdWVzIG9mIERyb3Bkb3duZGF0YVwiIFt2YWx1ZV09XCJkcm9wdmFsdWVzXCIgKGNsaWNrKT1cInNlbGVjdGVkKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tkcm9wdmFsdWVzW0lucHV0RmllbGRzPy5kaXNwbGF5a2V5XX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9mb3JtPlxyXG48L2Rpdj5cclxuIl19
|
|
371
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnMtY2hpcGRkLWNtcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92cy1jaGlwZHJvcGRvd24vc3JjL2xpYi92cy1jaGlwZGQtY21wL3ZzLWNoaXBkZC1jbXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdnMtY2hpcGRyb3Bkb3duL3NyYy9saWIvdnMtY2hpcGRkLWNtcC92cy1jaGlwZGQtY21wLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFHTCxzQkFBc0IsR0FDdkIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQ0wsWUFBWSxFQUNaLG9CQUFvQixFQUNwQixHQUFHLEVBRUgsU0FBUyxFQUNULFFBQVEsRUFDUixTQUFTLEVBQ1QsR0FBRyxHQUNKLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFvQixTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbkQsT0FBTyxFQUFlLFdBQVcsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7O0FBTXJELE1BQU0sT0FBTyxvQkFBb0I7SUFFL0IsWUFDVSxPQUE4QixFQUM5QixFQUFlO1FBRGYsWUFBTyxHQUFQLE9BQU8sQ0FBdUI7UUFDOUIsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUloQixlQUFVLEdBQVksSUFBSSxDQUFDO1FBVzFCLGNBQVMsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUV4RCx3QkFBbUIsR0FBYSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4RCxhQUFRLEdBQVksS0FBSyxD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c0IsbUVBSW5CLHNCQUFzQiw4UENoRG5DLG9tRUF5REU7OzRGRHpCVyxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0UsbUJBQW1CO3NJQVVwQixXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFNTixPQUFPO3NCQUpOLFNBQVM7dUJBQUMsbUJBQW1CLEVBQUU7d0JBQzlCLE1BQU0sRUFBRSxLQUFLO3dCQUNiLElBQUksRUFBRSxzQkFBc0I7cUJBQzdCO2dCQUlELG1CQUFtQjtzQkFEbEIsU0FBUzt1QkFBQyxzQkFBc0I7Z0JBRVgsa0JBQWtCO3NCQUF2QyxTQUFTO3VCQUFDLFNBQVM7Z0JBQ1YsU0FBUztzQkFBbEIsTUFBTTtnQkFDaUIsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQVViLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQsXHJcbiAgTWF0QXV0b2NvbXBsZXRlLFxyXG4gIE1hdEF1dG9jb21wbGV0ZVRyaWdnZXIsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcclxuaW1wb3J0IHtcclxuICBkZWJvdW5jZVRpbWUsXHJcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXHJcbiAgdGFwLFxyXG4gIGZpbHRlcixcclxuICBzd2l0Y2hNYXAsXHJcbiAgZmluYWxpemUsXHJcbiAgdGFrZVVudGlsLFxyXG4gIG1hcCxcclxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IGZyb20sIE9ic2VydmFibGUsIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBWc0NoaXBkcm9wZG93blNlcnZpY2UgfSBmcm9tICcuLi92cy1jaGlwZHJvcGRvd24uc2VydmljZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDT01NQSwgRU5URVIgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi12cy1jaGlwZGQtY21wJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdnMtY2hpcGRkLWNtcC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdnMtY2hpcGRkLWNtcC5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVnNDaGlwZGRDbXBDb21wb25lbnQge1xyXG4gIERyb2Rvd25Mb2FkaW5nOiBib29sZWFuO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzZXJ2aWNlOiBWc0NoaXBkcm9wZG93blNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlclxyXG4gICkge31cclxuICBASW5wdXQoKSBJbnB1dEZpZWxkczogYW55O1xyXG4gIEBJbnB1dCgpIFJlc2V0Rm9ybTogYW55O1xyXG4gIEBJbnB1dCgpIEJhY2tlbmRhcGk6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBAVmlld0NoaWxkKCdhdXRvQ29tcGxldGVJbnB1dCcsIHtcclxuICAgIHN0YXRpYzogZmFsc2UsXHJcbiAgICByZWFkOiBNYXRBdXRvY29tcGxldGVUcmlnZ2VyLFxyXG4gIH0pXHJcbiAgdHJpZ2dlcjogTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcjtcclxuXHJcbiAgQFZpZXdDaGlsZChNYXRBdXRvY29tcGxldGVUcmlnZ2VyKVxyXG4gIGF1dG9jb21wbGV0ZVRyaWdnZXI6IE1hdEF1dG9jb21wbGV0ZVRyaWdnZXI7XHJcbiAgQFZpZXdDaGlsZCgnc2Nyb2xsbCcpIG1hdEF1dG9jb21wbGV0ZUFwcDogTWF0QXV0b2NvbXBsZXRlO1xyXG4gIEBPdXRwdXQoKSBkYXRhRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQFZpZXdDaGlsZCgnRHJvcElucHV0JykgRHJvcElucHV0OiBhbnk7XHJcbiAgcmVhZG9ubHkgc2VwYXJhdG9yc0tleXNDb2RlczogbnVtYmVyW10gPSBbRU5URVIsIENPTU1BXTtcclxuXHJcbiAgaGFzX25leHQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjdXJyZW50cGFnZTogbnVtYmVyID0gMTtcclxuICBEcm9wZG93bmRhdGE6IGFueSA9IFtdO1xyXG4gIGhhc19wcmV2aW91czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIERyb3Bkb3duRm9ybTogRm9ybUdyb3VwO1xyXG4gIGNoaXBTZWxlY3RlZElkOiBhbnkgPSBbXTtcclxuICBjaGlwU2VsZWN0ZWRPYmo6IGFueSA9IFtdO1xyXG4gIEBJbnB1dCgpIGZvcm1Hcm91cCE6IEZvcm1Hcm91cDtcclxuICBuZ09uSW5pdCgpIHtcclxuICAgIC8vIGlmICh0aGlzLmZvcm1Hcm91cCkge1xyXG4gICAgLy8gICB0aGlzLkRyb3Bkb3duRm9ybSA9IHRoaXMuZm9ybUdyb3VwO1xyXG4gICAgLy8gfSBlbHNlIHtcclxuICAgIC8vICAgdGhpcy5Ecm9wZG93bkZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgIC8vICAgICB2YWx1ZTogJycsXHJcbiAgICAvLyAgIH0pO1xyXG4gICAgLy8gfVxyXG4gICAgLy8gdGhpcy5kdXBuZ29uaXQoKTtcclxuXHJcbiAgICAvLyBpZiAodGhpcy5JbnB1dEZpZWxkcz8uZGVmYXVsdHZhbHVlKSB7XHJcbiAgICAvLyAgIHRoaXMuRHJvcGRvd25Gb3JtLmdldChcInZhbHVlXCIpLnBhdGNoVmFsdWUodGhpcy5JbnB1dEZpZWxkcz8uZGVmYXVsdHZhbHVlKVxyXG4gICAgLy8gICB0aGlzLmNoaXBTZWxlY3RlZE9iaiA9IHRoaXMuSW5wdXRGaWVsZHM/LmRlZmF1bHR2YWx1ZVxyXG4gICAgLy8gICBpZiAodGhpcy5jaGlwU2VsZWN0ZWRPYmoubGVuZ3RoID4gMCkge1xyXG4gICAgLy8gICAgIGZvciAobGV0IGZvdW5kZW1wIG9mIHRoaXMuY2hpcFNlbGVjdGVkT2JqKSB7XHJcbiAgICAvLyAgICAgICBpZiAodGhpcy5JbnB1dEZpZWxkcz8uT3V0cHV0a2V5KSB7XHJcbiAgICAvLyAgICAgICAgIHRoaXMuY2hpcFNlbGVjdGVkSWQucHVzaChmb3VuZGVtcFt0aGlzLklucHV0RmllbGRzPy5PdXRwdXRrZXldKVxyXG5cclxuICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICAgIGVsc2Uge1xyXG4gICAgLy8gICAgICAgICB0aGlzLmNoaXBTZWxlY3RlZElkLnB1c2goZm91bmRlbXAuaWQpXHJcblxyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICB0aGlzLnNlbGVjdGVkKClcclxuICAgIC8vICAgfVxyXG5cclxuICAgIC8vIH1cclxuICAgIC8vIGlmICh0aGlzLklucHV0RmllbGRzPy5mcm9uZW50ZGF0YSkge1xyXG4gICAgLy8gICB0aGlzLkRyb3Bkb3duZGF0YSA9IHRoaXMuSW5wdXRGaWVsZHM/LmRhdGFcclxuXHJcbiAgICAvLyB9XHJcbiAgICAvLyBlbHNlIHtcclxuICAgIC8vICAgdGhpcy5nZXRkcm9wZG93bignJylcclxuICAgIC8vIH1cclxuICB9XHJcbiAgbG9vb3AoKSB7XHJcbiAgICBmb3IgKGxldCBmb3VuZGVtcCBvZiB0aGlzLmNoaXBTZWxlY3RlZE9iaikge1xyXG4gICAgICBpZighKGZvdW5kZW1wIGluc3RhbmNlb2YgTnVtYmVyKSl7XHJcbiAgICAgICAgaWYgKHRoaXMuSW5wdXRGaWVsZHM/Lk91dHB1dGtleSkge1xyXG4gICAgICAgICAgdGhpcy5jaGlwU2VsZWN0ZWRJZC5wdXNoKGZvdW5kZW1wW3RoaXMuSW5wdXRGaWVsZHM/Lk91dHB1dGtleV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5JbnB1dEZpZWxkcz8uZm9ybWtleSkge1xyXG4gICAgICAgICAgdGhpcy5mb3Jta2V5YXJyLnB1c2goZm91bmRlbXBbdGhpcy5JbnB1dEZpZWxkcz8uZm9ybWtleV0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmNoaXBTZWxlY3RlZElkLnB1c2goZm91bmRlbXAuaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgXHJcbiAgfVxyXG4gIGR1cG5nb25pdCgpIHtcclxuICAgIGlmICh0aGlzLmZvcm1Hcm91cCkge1xyXG4gICAgICB0aGlzLkRyb3Bkb3duRm9ybSA9IHRoaXMuZm9ybUdyb3VwO1xyXG4gICAgICBpZiAoIXRoaXMuRHJvcGRvd25Gb3JtLmNvbnRhaW5zKHRoaXMuSW5wdXRGaWVsZHM/LmZvcm1jb250cm9sbmFtZSkpIHtcclxuICAgICAgICB0aGlzLkRyb3Bkb3duRm9ybS5hZGRDb250cm9sKFxyXG4gICAgICAgICAgdGhpcy5keW5hbWNpZm9ybWNvbnRyb2xwYXJlbnQoKSxcclxuICAgICAgICAgIG5ldyBGb3JtQ29udHJvbCh7IHZhbHVlOiBbXSwgZGlzYWJsZWQ6IHRoaXMuSW5wdXRGaWVsZHM/LmRpc2FibGVkIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5Ecm9wZG93bkZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgICBjaGlwdmFsdWU6IFtdLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKCd0aGlzLkRyb3Bkb3duRm9ybScsIHRoaXMuRHJvcGRvd25Gb3JtLnZhbHVlKTtcclxuICAgIC8vIHRoaXMuY2hpcFNlbGVjdGVkT2JqID1cclxuICAgIC8vICAgdGhpcy5Ecm9wZG93bkZvcm0uZ2V0KHRoaXMuZHluYW1jaWZvcm1jb250cm9scGFyZW50KCkpLnZhbHVlICYmXHJcbiAgICAvLyAgIHRoaXMuRHJvcGRvd25Gb3JtLmdldCh0aGlzLmR5bmFtY2lmb3JtY29udHJvbHBhcmVudCgpKS52YWx1ZS5sZW5ndGggIT09IDBcclxuICAgIC8vICAgICA/IHRoaXMuRHJvcGRvd25Gb3JtLmdldCh0aGlzLmR5bmFtY2lmb3JtY29udHJvbHBhcmVudCgpKS52YWx1ZVxyXG4gICAgLy8gICAgIDogW107XHJcbiAgICAvLyAgICAgY29uc29sZS5sb2coJ3RoaXMuY2hpcFNlbGVjdGVkT2JqJywgdGhpcy5jaGlwU2VsZWN0ZWRPYmopO1xyXG5cclxuICAgIGlmICh0aGlzLklucHV0RmllbGRzPy5kZWZhdWx0dmFsdWUpIHtcclxuICAgICAgLy8gdGhpcy5Ecm9wZG93bkZvcm0uZ2V0KHRoaXMuZHluYW1jaWZvcm1jb250cm9scGFyZW50KCkpLnBhdGNoVmFsdWUoXHJcbiAgICAgIC8vICAgdGhpcy5JbnB1dEZpZWxkcz8uZm9ybWtleVxyXG4gICAgICAvLyAgICAgPyB0aGlzLklucHV0RmllbGRzPy5kZWZhdWx0dmFsdWVbdGhpcy5JbnB1dEZpZWxkcz8uZm9ybWtleV1cclxuICAgICAgLy8gICAgIDogdGhpcy5JbnB1dEZpZWxkcz8uZGVmYXVsdHZhbHVlXHJcbiAgICAgIC8vICk7XHJcbiAgICAgIC8vIHRoaXMuRHJvcGRvd25Gb3JtLmdldCh0aGlzLmR5bmFtY2lmb3JtY29udHJvbHBhcmVudCgpKS5wYXRjaFZhbHVlKHRoaXMuSW5wdXRGaWVsZHM/LmRlZmF1bHR2YWx1ZSk7XHJcbiAgICAgIHRoaXMuY2hpcFNlbGVjdGVkT2JqID0gdGhpcy5JbnB1dEZpZWxkcz8uZGVmYXVsdHZhbHVlO1xyXG4gICAgICB0aGlzLmNoaXBTZWxlY3RlZElkID0gW107XHJcbiAgICAgIHRoaXMuZm9ybWtleWFyciA9IFtdO1xyXG4gICAgICBpZiAodGhpcy5jaGlwU2VsZWN0ZWRPYmoubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMubG9vb3AoKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuRHJvcGRvd25Gb3JtLmdldCh0aGlzLmR5bmFtY2lmb3JtY29udHJvbHBhcmVudCgpKS52YWx1ZSAmJlxyXG4gICAgICB0aGlzLkRyb3Bkb3duRm9ybS5nZXQodGhpcy5keW5hbWNpZm9ybWNvbnRyb2xwYXJlbnQoKSkudmFsdWUubGVuZ3RoICE9PSAwXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5jaGlwU2VsZWN0ZWRPYmogPSB0aGlzLkRyb3Bkb3duRm9ybS5nZXQoXHJcbiAgICAgICAgdGhpcy5keW5hbWNpZm9ybWNvbnRyb2xwYXJlbnQoKVxyXG4gICAgICApLnZhbHVlO1xyXG4gICAgICBjb25zb2xlLmxvZygndGVzdCcsdGhpcy5jaGlwU2VsZWN0ZWRPYmogPSB0aGlzLkRyb3Bkb3duRm9ybS5nZXQoXHJcbiAgICAgICAgdGhpcy5keW5hbWNpZm9ybWNvbnRyb2xwYXJlbnQoKVxyXG4gICAgICApLnZhbHVlKVxyXG4gICAgICB0aGlzLmNoaXBTZWxlY3RlZElkID0gW107XHJcbiAgICAgIHRoaXMuZm9ybWtleWFyciA9IFtdO1xyXG4gICAgICB0aGlzLmxvb29wKCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWQoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLklucHV0RmllbGRzPy5mcm9uZW50ZGF0YSkge1xyXG4gICAgICB0aGlzLkRyb3Bkb3duZGF0YSA9IHRoaXMuSW5wdXRGaWVsZHM/LmRhdGE7XHJcbiAgICB9XHJcbiAgICAvLyBlbHNlIHtcclxuICAgIC8vICAgdGhpcy5nZXRkcm9wZG93bignJylcclxuICAgIC8vIH1cclxuICB9XHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXMuSW5wdXRGaWVsZHMgJiYgY2hhbmdlcy5JbnB1dEZpZWxkcy5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgY29uc29sZS5sb2coJ1N1bW1hcnkgTG9nIENoYW5nZXMnKTtcclxuICAgICAgdGhpcy5jdXJyZW50cGFnZSA9IDE7XHJcbiAgICAgIHRoaXMuZHVwbmdvbml0KCk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlcy5SZXNldEZvcm0gJiYgY2hhbmdlcy5SZXNldEZvcm0uY3VycmVudFZhbHVlKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdoaXR0ZWQnKTtcclxuICAgICAgLy8gdGhpcy5Ecm9wZG93bkZvcm0ucmVzZXQoKTtcclxuICAgICAgdGhpcy5jdXJyZW50cGFnZSA9IDE7XHJcbiAgICAgIHRoaXMuZHVwbmdvbml0KCk7XHJcbiAgICAgIHRoaXMuY2hpcFNlbGVjdGVkSWQgPSBbXTtcclxuICAgICAgdGhpcy5mb3Jta2V5YXJyID0gW107XHJcbiAgICAgIHRoaXMuY2hpcFNlbGVjdGVkT2JqID0gW107XHJcbiAgICAgIHRoaXMuZGF0YUV2ZW50LmVtaXQoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyBwdWJsaWMgZGlzcGxheWRldmVsb3BjbGllbnQoY2x0OiBhbnksIGtleTogc3RyaW5nKSB7XHJcbiAgLy8gICByZXR1cm4ga2V5W2NsdF07XHJcbiAgLy8gfVxyXG4gIGF1dG9jb21wbGV0ZUFwcFNjcm9sbCgpIHtcclxuICAgIGlmICghdGhpcy5JbnB1dEZpZWxkcz8uZnJvbmVudGRhdGEpIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5tYXRBdXRvY29tcGxldGVBcHAgJiZcclxuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlVHJpZ2dlciAmJlxyXG4gICAgICAgICAgdGhpcy5tYXRBdXRvY29tcGxldGVBcHAucGFuZWxcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGZyb21FdmVudCh0aGlzLm1hdEF1dG9jb21wbGV0ZUFwcC5wYW5lbC5uYXRpdmVFbGVtZW50LCAnc2Nyb2xsJylcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgbWFwKCh4KSA9PiB0aGlzLm1hdEF1dG9jb21wbGV0ZUFwcC5wYW5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCksXHJcbiAgICAgICAgICAgICAgdGFrZVVudGlsKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVUcmlnZ2VyLnBhbmVsQ2xvc2luZ0FjdGlvbnMgYXMgT2JzZXJ2YWJsZTxhbnk+XHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBzY3JvbGxUb3AgPVxyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXRBdXRvY29tcGxldGVBcHAucGFuZWwubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A7XHJcbiAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsSGVpZ2h0ID1cclxuICAgICAgICAgICAgICAgIHRoaXMubWF0QXV0b2NvbXBsZXRlQXBwLnBhbmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0O1xyXG4gICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRIZWlnaHQgPVxyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXRBdXRvY29tcGxldGVBcHAucGFuZWwubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgY29uc3QgYXRCb3R0b20gPSBzY3JvbGxIZWlnaHQgLSAxIDw9IHNjcm9sbFRvcCArIGVsZW1lbnRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgaWYgKGF0Qm90dG9tKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNfbmV4dCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLkRyb3BJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICBsZXQgcGFyYW1zID0gdGhpcy5zZWFyY2hwYXJhbXModmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRwYWdlID0gdGhpcy5jdXJyZW50cGFnZSArIDE7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRwYWdlID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZVxyXG4gICAgICAgICAgICAgICAgICAgICAgLkdldEFwaShcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5JbnB1dEZpZWxkcy51cmwgKyAnP3BhZ2U9JyArIHRoaXMuY3VycmVudHBhZ2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1xyXG4gICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0czogYW55W10pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGFzID0gcmVzdWx0c1snZGF0YSddO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YXBhZ2luYXRpb24gPSByZXN1bHRzWydwYWdpbmF0aW9uJ107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuRHJvcGRvd25kYXRhID0gdGhpcy5Ecm9wZG93bmRhdGEuY29uY2F0KGRhdGFzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3RoaXMuRHJvcGRvd25kYXRhJywgdGhpcy5Ecm9wZG93bmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5Ecm9wZG93bmRhdGEubGVuZ3RoID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc19uZXh0ID0gZGF0YXBhZ2luYXRpb24uaGFzX25leHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNfcHJldmlvdXMgPSBkYXRhcGFnaW5hdGlvbi5oYXNfcHJldmlvdXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50cGFnZSA9IGRhdGFwYWdpbmF0aW9uLmluZGV4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgZHJvcGRvd25zZWFyY2goKSB7XHJcbiAgICBpZiAoIXRoaXMuSW5wdXRGaWVsZHM/LmZyb25lbnRkYXRhKSB7XHJcbiAgICAgIHRoaXMuRHJvcGRvd25Gb3JtLmdldCgndmFsdWUnKVxyXG4gICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgICAgIGRlYm91bmNlVGltZSgxMDApLFxyXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuRHJvZG93bkxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnaW5zaWRlIHRhcCcpO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBzd2l0Y2hNYXAoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBwYXJhbXMgPSB0aGlzLnNlYXJjaHBhcmFtcyh2YWx1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudHBhZ2UgPSAxO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlXHJcbiAgICAgICAgICAgICAgLkdldEFwaShcclxuICAgICAgICAgICAgICAgIHRoaXMuSW5wdXRGaWVsZHMudXJsICsgJz9wYWdlPScgKyB0aGlzLmN1cnJlbnRwYWdlLFxyXG4gICAgICAgICAgICAgICAgcGFyYW1zXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLkRyb2Rvd25Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHRzOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgICAgbGV0IGRhdGFzID0gcmVzdWx0c1snZGF0YSddO1xyXG4gICAgICAgICAgdGhpcy5Ecm9wZG93bmRhdGEgPSBkYXRhcztcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0ZHJvcGRvd24odmFsdWUpIHtcclxuICAgIHRoaXMuY3VycmVudHBhZ2UgPSAxO1xyXG4gICAgaWYgKHRoaXMuSW5wdXRGaWVsZHMudXJsKSB7XHJcbiAgICAgIGxldCBwYXJhbXMgPSB0aGlzLnNlYXJjaHBhcmFtcyh2YWx1ZSk7XHJcbiAgICAgIHRoaXMuc2VydmljZVxyXG4gICAgICAgIC5HZXRBcGkodGhpcy5JbnB1dEZpZWxkcy51cmwgKyAnP3BhZ2U9JyArIHRoaXMuY3VycmVudHBhZ2UsIHBhcmFtcylcclxuICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHRzOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgICAgbGV0IGRhdGFzID0gcmVzdWx0c1snZGF0YSddO1xyXG4gICAgICAgICAgbGV0IGRhdGFwYWdpbmF0aW9uID0gcmVzdWx0c1sncGFnaW5hdGlvbiddO1xyXG4gICAgICAgICAgdGhpcy5Ecm9wZG93bmRhdGEgPSBkYXRhcztcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIub3BlblBhbmVsKCk7XHJcbiAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgIGlmICh0aGlzLkRyb3Bkb3duZGF0YS5sZW5ndGggPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmhhc19uZXh0ID0gZGF0YXBhZ2luYXRpb24uaGFzX25leHQ7XHJcbiAgICAgICAgICAgIHRoaXMuaGFzX3ByZXZpb3VzID0gZGF0YXBhZ2luYXRpb24uaGFzX3ByZXZpb3VzO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRwYWdlID0gZGF0YXBhZ2luYXRpb24uaW5kZXg7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIE91dHB1dGRhdGE6IGFueSA9IFtdO1xyXG4gIGR5bmFtY2lmb3JtY29udHJvbHBhcmVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLklucHV0RmllbGRzPy5mb3JtY29udHJvbG5hbWUgJiYgdGhpcy5mb3JtR3JvdXBcclxuICAgICAgPyB0aGlzLklucHV0RmllbGRzPy5mb3JtY29udHJvbG5hbWVcclxuICAgICAgOiAnY2hpcHZhbHVlJztcclxuICB9XHJcbiAgc2VsZWN0ZWQoKSB7XHJcbiAgICB0aGlzLk91dHB1dGRhdGEgPSB0aGlzLmNoaXBTZWxlY3RlZE9iajtcclxuICAgIGlmICh0aGlzLklucHV0RmllbGRzPy5PdXRwdXRrZXkpIHtcclxuICAgICAgdGhpcy5PdXRwdXRkYXRhID0gdGhpcy5jaGlwU2VsZWN0ZWRJZDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmZvcm1Hcm91cCAmJiB0aGlzLklucHV0RmllbGRzPy5mb3JtY29udHJvbG5hbWUpIHtcclxuICAgICAgdGhpcy5Ecm9wZG93bkZvcm0uZ2V0KHRoaXMuZHluYW1jaWZvcm1jb250cm9scGFyZW50KCkpLnBhdGNoVmFsdWUoXHJcbiAgICAgICAgdGhpcy5mb3Jta2V5YXJyXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLmZvcm1rZXlhcnIpO1xyXG4gICAgY29uc29sZS5sb2coJ3RoaXMuRHJvcGRvd25Gb3JtLmdldCcsIHRoaXMuRHJvcGRvd25Gb3JtLnZhbHVlKTtcclxuICAgIHRoaXMuZGF0YUV2ZW50LmVtaXQodGhpcy5PdXRwdXRkYXRhKTtcclxuXHJcbiAgICAvLyBsZXQgZGF0YSA9IHRoaXMuRHJvcGRvd25Gb3JtLnZhbHVlLnZhbHVlXHJcbiAgICAvLyBpZiAodGhpcy5JbnB1dEZpZWxkcz8ud2hvbGVkYXRhKSB7XHJcbiAgICAvLyAgIHRoaXMuZGF0YUV2ZW50LmVtaXQodGhpcy5jaGlwU2VsZWN0ZWRPYmopO1xyXG4gICAgLy8gICBpZiAodGhpcy5JbnB1dEZpZWxkcz8uZm9ybWdyb3VwICYmIHRoaXMuSW5wdXRGaWVsZHM/LmZvcm1jb250cm9sbmFtZSkge1xyXG4gICAgLy8gICAgIHRoaXMuSW5wdXRGaWVsZHM/LmZvcm1ncm91cFxyXG4gICAgLy8gICAgICAgLmdldCh0aGlzLklucHV0RmllbGRzPy5mb3JtY29udHJvbG5hbWUpXHJcbiAgICAvLyAgICAgICAucGF0Y2hWYWx1ZSh0aGlzLmNoaXBTZWxlY3RlZE9iaik7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuICAgIC8vIGVsc2Uge1xyXG4gICAgLy8gICBpZiAodGhpcy5JbnB1dEZpZWxkcz8uT3V0cHV0a2V5KSB7XHJcbiAgICAvLyAgICAgdGhpcy5kYXRhRXZlbnQuZW1pdCh0aGlzLmNoaXBTZWxlY3RlZElkKTtcclxuICAgIC8vICAgICBpZiAodGhpcy5JbnB1dEZpZWxkcz8uZm9ybWdyb3VwICYmIHRoaXMuSW5wdXRGaWVsZHM/LmZvcm1jb250cm9sbmFtZSkge1xyXG4gICAgLy8gICAgICAgdGhpcy5JbnB1dEZpZWxkcz8uZm9ybWdyb3VwXHJcbiAgICAvLyAgICAgICAgIC5nZXQodGhpcy5JbnB1dEZpZWxkcz8uZm9ybWNvbnRyb2xuYW1lKVxyXG4gICAgLy8gICAgICAgICAucGF0Y2hWYWx1ZSh0aGlzLmNoaXBTZWxlY3RlZElkKTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH1cclxuICAgIC8vICAgZWxzZSB7XHJcbiAgICAvLyAgICAgdGhpcy5kYXRhRXZlbnQuZW1pdCh0aGlzLmNoaXBTZWxlY3RlZE9iaik7XHJcbiAgICAvLyAgICAgaWYgKHRoaXMuSW5wdXRGaWVsZHM/LmZvcm1ncm91cCAmJiB0aGlzLklucHV0RmllbGRzPy5mb3JtY29udHJvbG5hbWUpIHtcclxuICAgIC8vICAgICAgIHRoaXMuSW5wdXRGaWVsZHM/LmZvcm1ncm91cFxyXG4gICAgLy8gICAgICAgICAuZ2V0KHRoaXMuSW5wdXRGaWVsZHM/LmZvcm1jb250cm9sbmFtZSlcclxuICAgIC8vICAgICAgICAgLnBhdGNoVmFsdWUodGhpcy5jaGlwU2VsZWN0ZWRPYmopO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgfVxyXG5cclxuICAgIC8vIH1cclxuICB9XHJcbiAgc2VhcmNocGFyYW1zKHZhbHVlKSB7XHJcbiAgICBsZXQgcGFyYW1zID0gJyc7XHJcbiAgICBpZiAodGhpcy5JbnB1dEZpZWxkcy5wYXJhbXMpIHtcclxuICAgICAgcGFyYW1zID0gdGhpcy5JbnB1dEZpZWxkcy5wYXJhbXM7XHJcbiAgICB9XHJcbiAgICBsZXQgaW5wVmFsdWUgPSB2YWx1ZTtcclxuICAgIGlucFZhbHVlXHJcbiAgICAgID8gKHBhcmFtcyArPSAnJicgKyB0aGlzLklucHV0RmllbGRzLnNlYXJjaGtleSArICc9JyArIGlucFZhbHVlKVxyXG4gICAgICA6ICcnO1xyXG4gICAgcmV0dXJuIHBhcmFtcztcclxuICB9XHJcbiAgcmVtb3ZlY2hpcChvYmopIHtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jaGlwU2VsZWN0ZWRPYmouaW5kZXhPZihvYmopO1xyXG5cclxuICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgIHRoaXMuY2hpcFNlbGVjdGVkT2JqLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuY2hpcFNlbGVjdGVkT2JqKTtcclxuICAgICAgdGhpcy5jaGlwU2VsZWN0ZWRJZC5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLmNoaXBTZWxlY3RlZElkKTtcclxuICAgICAgdGhpcy5mb3Jta2V5YXJyLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKCd0aGlzLmZvcm1rZXlhcnInLCB0aGlzLmZvcm1rZXlhcnIpO1xyXG5cclxuICAgICAgdGhpcy5Ecm9wSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHB1YmxpYyB2ZW5TZWxlY3RlZChkYXRhKTogdm9pZCB7XHJcbiAgICB0aGlzLkRyb3BJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgICBjb25zb2xlLmxvZygnZXZlbnQub3B0aW9uLnZhbHVlJywgZGF0YSk7XHJcbiAgICB0aGlzLnNlbGVjdHZlbkJ5TmFtZShkYXRhW3RoaXMuY29tcGFyZWtleShkYXRhKV0pO1xyXG4gICAgY29uc29sZS5sb2coJ2NoaXBTZWxlY3RlZHZlbmlkJywgdGhpcy5jaGlwU2VsZWN0ZWRPYmopO1xyXG4gIH1cclxuICBmb3Jta2V5YXJyOiBhbnkgPSBbXTtcclxuICBwcml2YXRlIHNlbGVjdHZlbkJ5TmFtZSh2ZW4pIHtcclxuICAgIGxldCBmb3VuZGVtcDEgPSB0aGlzLmNoaXBTZWxlY3RlZE9iai5maWx0ZXIoXHJcbiAgICAgIChlKSA9PiBlW3RoaXMuY29tcGFyZWtleShlKV0gPT0gdmVuXHJcbiAgICApO1xyXG4gICAgaWYgKGZvdW5kZW1wMS5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGZvdW5kZW1wID0gdGhpcy5Ecm9wZG93bmRhdGEuZmlsdGVyKFxyXG4gICAgICAoZSkgPT4gZVt0aGlzLmNvbXBhcmVrZXkoZSldID09IHZlblxyXG4gICAgKTtcclxuICAgIGlmIChmb3VuZGVtcC5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5jaGlwU2VsZWN0ZWRPYmoucHVzaChmb3VuZGVtcFswXSk7XHJcbiAgICAgIGlmICh0aGlzLklucHV0RmllbGRzPy5PdXRwdXRrZXkpIHtcclxuICAgICAgICB0aGlzLmNoaXBTZWxlY3RlZElkLnB1c2goZm91bmRlbXBbMF1bdGhpcy5JbnB1dEZpZWxkcz8uT3V0cHV0a2V5XSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuSW5wdXRGaWVsZHM/LmZvcm1rZXkpIHtcclxuICAgICAgICB0aGlzLmZvcm1rZXlhcnIucHVzaChmb3VuZGVtcFswXVt0aGlzLklucHV0RmllbGRzPy5mb3Jta2V5XSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jaGlwU2VsZWN0ZWRJZC5wdXNoKGZvdW5kZW1wWzBdLmlkKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zb2xlLmxvZygnZm9ybWtleWFycjEyJywgdGhpcy5mb3Jta2V5YXJyKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBjb21wYXJla2V5KGUpIHtcclxuICAgIGlmICh0aGlzLklucHV0RmllbGRzPy5jb21wYXJla2V5KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLklucHV0RmllbGRzPy5jb21wYXJla2V5O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGU/LmlkKSB7XHJcbiAgICAgICAgcmV0dXJuICdpZCc7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuSW5wdXRGaWVsZHMuZGlzcGxheWtleTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2PlxyXG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJEcm9wZG93bkZvcm1cIj5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkXHJcbiAgICAgICAgY2xhc3M9XCJtYXQtY2hpcFNjcm9sbFwiXHJcbiAgICAgICAgYXBwZWFyYW5jZT1cIm91dGxpbmVcIlxyXG4gICAgICAgIChjbGljayk9XCIhdGhpcy5JbnB1dEZpZWxkcz8uZnJvbmVudGRhdGEgPyB0aGlzLmdldGRyb3Bkb3duKCcnKSA6ICcnXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+e3sgSW5wdXRGaWVsZHM/LmxhYmVsIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1jaGlwLWdyaWQgbXVsdGlwbGUgI2NoaXBMaXN0dmVuZG9yIGNsYXNzPVwiY2hpcC1jb250YWluZXJcIj5cclxuICAgICAgICAgIDxtYXQtY2hpcC1yb3dcclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9iaiBvZiBjaGlwU2VsZWN0ZWRPYmpcIlxyXG4gICAgICAgICAgICBbcmVtb3ZhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAocmVtb3ZlZCk9XCJyZW1vdmVjaGlwKG9iailcIlxyXG4gICAgICAgICAgICBjbGFzcz1cIm1hdC1jaGlwRXhcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7eyBvYmpbSW5wdXRGaWVsZHM/LmRpc3BsYXlrZXldIH19XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRDaGlwUmVtb3ZlPmNhbmNlbDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L21hdC1jaGlwLXJvdz5cclxuICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAjRHJvcElucHV0XHJcbiAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwic2Nyb2xsbFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwibWF0Zm9ybWZpZWxkaW5wdXRzdHlsZVwiXHJcbiAgICAgICAgICAgIChrZXlkb3duKT1cImRyb3Bkb3duc2VhcmNoKClcIlxyXG4gICAgICAgICAgICBbbWF0Q2hpcElucHV0Rm9yXT1cImNoaXBMaXN0dmVuZG9yXCJcclxuICAgICAgICAgICAgW21hdENoaXBJbnB1dFNlcGFyYXRvcktleUNvZGVzXT1cInNlcGFyYXRvcnNLZXlzQ29kZXNcIlxyXG4gICAgICAgICAgICBbbWF0Q2hpcElucHV0QWRkT25CbHVyXT1cInRydWVcIlxyXG4gICAgICAgICAgICAjYXV0b0NvbXBsZXRlSW5wdXQ9XCJtYXRBdXRvY29tcGxldGVUcmlnZ2VyXCJcclxuICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJcclxuICAgICAgICAgICAgICB0aGlzLmR5bmFtY2lmb3JtY29udHJvbHBhcmVudCgpXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvbWF0LWNoaXAtZ3JpZD5cclxuICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZVxyXG4gICAgICAgICAgI3Njcm9sbGw9XCJtYXRBdXRvY29tcGxldGVcIlxyXG4gICAgICAgICAgKG9wZW5lZCk9XCJhdXRvY29tcGxldGVBcHBTY3JvbGwoKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZHJvcHZhbHVlcyBvZiBEcm9wZG93bmRhdGFcIlxyXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJcclxuICAgICAgICAgICAgICAgIHRoaXMuSW5wdXRGaWVsZHM/LmZvcm1rZXlcclxuICAgICAgICAgICAgICAgICAgPyBkcm9wdmFsdWVzW3RoaXMuSW5wdXRGaWVsZHM/LmZvcm1rZXldXHJcbiAgICAgICAgICAgICAgICAgIDogZHJvcHZhbHVlc1xyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgKG9uU2VsZWN0aW9uQ2hhbmdlKT1cInZlblNlbGVjdGVkKGRyb3B2YWx1ZXMpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIHt7IGRyb3B2YWx1ZXNbSW5wdXRGaWVsZHM/LmRpc3BsYXlrZXldIH19XHJcbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZm9ybT5cclxuICA8L2Rpdj5cclxuICA8IS0tICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RlZCgpXCJcclxuICAgLS0+XHJcbiAgPCEtLSAgICAgICAgIChvcHRpb25TZWxlY3RlZCk9XCJ2ZW5TZWxlY3RlZCgkZXZlbnQpXCJcclxuICAgLS0+XHJcbiAgIl19
|