@sunbird-cb/cbp-ai 0.1.62 → 0.1.63

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.
@@ -49,12 +49,15 @@ export class AddDesignationComponent {
49
49
  this.scrollListenerAttached = false;
50
50
  this.masterData = {};
51
51
  this.searchDesignationLoadCount = 50;
52
+ this.matchedDesignationIds = [];
52
53
  this.masterData = {
53
54
  designationBackup: [],
54
55
  designationFiltered: [], // filtered search results
55
56
  };
56
57
  }
57
58
  ngOnInit() {
59
+ console.log('this.matched_role_mappings', this.data?.matched_role_mappings);
60
+ this.matchedDesignationIds = this.data?.matched_role_mappings?.map((item) => item?.igot_designation_id) || [];
58
61
  this.initializeForm();
59
62
  const searchControl = this.designationForm.get('searchDesignation');
60
63
  if (searchControl) {
@@ -100,6 +103,10 @@ export class AddDesignationComponent {
100
103
  uploadDoc: [null, []],
101
104
  searchDesignation: [''],
102
105
  });
106
+ this.designationForm.get('designation_name')?.valueChanges
107
+ .subscribe(() => {
108
+ this.checkCurrentDesignationPresent();
109
+ });
103
110
  }
104
111
  onFileChange(event) {
105
112
  const file = event.target.files[0];
@@ -267,7 +274,11 @@ export class AddDesignationComponent {
267
274
  .subscribe({
268
275
  next: (res) => {
269
276
  const content = _.get(res, 'result.result.data', []);
270
- const mapped = content.map((item) => ({
277
+ const matchedIds = new Set(this.matchedDesignationIds);
278
+ const mapped = content
279
+ .filter((item) => !matchedIds.has(item?.id))
280
+ .map((item) => ({
281
+ id: item?.id,
271
282
  name: item?.designation || '',
272
283
  status: item?.status || 'Active',
273
284
  }));
@@ -326,29 +337,20 @@ export class AddDesignationComponent {
326
337
  // FIX 2: Also inject selected items into designationBackup
327
338
  checkCurrentDesignationPresent() {
328
339
  const selectedDesignations = this.designationForm.get('designation_name')?.value || [];
329
- if (!selectedDesignations?.length)
340
+ if (!this.masterData?.designation) {
330
341
  return;
331
- selectedDesignations.forEach((selectedName) => {
332
- if (!selectedName?.trim())
333
- return;
334
- const entry = { name: selectedName, status: 'Active' };
335
- // ✅ Add to backup so it survives slice replacements on scroll
336
- const existsInBackup = this.masterData.designationBackup?.some((item) => item?.name?.toLowerCase() === selectedName.toLowerCase());
337
- if (!existsInBackup) {
338
- this.masterData.designationBackup = [
339
- entry,
340
- ...(this.masterData.designationBackup || [])
341
- ];
342
- }
343
- // Add to visible list too
344
- const existsInVisibleList = this.masterData.designation?.some((item) => item?.name?.toLowerCase() === selectedName.toLowerCase());
345
- if (!existsInVisibleList) {
346
- this.masterData.designation.unshift(entry);
347
- }
348
- });
349
- this.masterData.designation = _.uniqBy(this.masterData.designation, (item) => item?.name?.toLowerCase());
350
- // ✅ Dedupe backup too
351
- this.masterData.designationBackup = _.uniqBy(this.masterData.designationBackup, (item) => item?.name?.toLowerCase());
342
+ }
343
+ // Create selected entries
344
+ const selectedItems = selectedDesignations.map((name) => ({
345
+ name,
346
+ status: 'Active'
347
+ }));
348
+ // Remove selected items from current lists
349
+ const remainingVisible = (this.masterData.designation || []).filter((item) => !selectedDesignations.some(selected => selected.toLowerCase() === item?.name?.toLowerCase()));
350
+ const remainingBackup = (this.masterData.designationBackup || []).filter((item) => !selectedDesignations.some(selected => selected.toLowerCase() === item?.name?.toLowerCase()));
351
+ // Put selected items on top
352
+ this.masterData.designation = _.uniqBy([...selectedItems, ...remainingVisible], (item) => item?.name?.toLowerCase());
353
+ this.masterData.designationBackup = _.uniqBy([...selectedItems, ...remainingBackup], (item) => item?.name?.toLowerCase());
352
354
  }
353
355
  onDesignationDropdownClosed() {
354
356
  // Keep the designation value but clear the search input
@@ -497,4 +499,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
497
499
  type: ViewChild,
498
500
  args: ['designation', { read: ElementRef }]
499
501
  }] } });
500
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWRlc2lnbmF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi9jYnAtYWkvc3JjL2xpYi9jb21wb25lbnRzL2FkZC1kZXNpZ25hdGlvbi9hZGQtZGVzaWduYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvYWRkLWRlc2lnbmF0aW9uL2FkZC1kZXNpZ25hdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBQ3pFLE9BQU8sRUFBcUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BHLE9BQU8sRUFBcUMsVUFBVSxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDckcsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUE7QUFDM0IsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFPcEMsTUFBTSxPQUFPLHVCQUF1QjtJQTZCbEMsWUFBbUIsU0FBZ0QsRUFDakMsSUFBUyxFQUNqQyxFQUFlLEVBQ2YsS0FBd0IsRUFDeEIsYUFBNEIsRUFDNUIsUUFBcUI7UUFMWixjQUFTLEdBQVQsU0FBUyxDQUF1QztRQUNqQyxTQUFJLEdBQUosSUFBSSxDQUFLO1FBQ2pDLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUN4QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixhQUFRLEdBQVIsUUFBUSxDQUFhO1FBaEMvQixrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQUNuQixpQkFBWSxHQUFHO1lBQ2IsaUJBQWlCO1lBQ2pCLG9CQUFvQjtZQUNwQix5RUFBeUU7WUFDekUsMEJBQTBCO1lBQzFCLG1FQUFtRTtZQUNuRSxZQUFZO1NBQ2IsQ0FBQztRQUNGLGdCQUFXLEdBQWtCLElBQUksQ0FBQztRQUNsQyxpQkFBWSxHQUFnQixJQUFJLENBQUM7UUFFakMsWUFBTyxHQUFHLEtBQUssQ0FBQTtRQUVmLDRCQUF1QixHQUFHLEtBQUssQ0FBQTtRQUMvQiw4QkFBeUIsR0FBRyxLQUFLLENBQUM7UUFDbEMsc0JBQWlCLEdBQUcsQ0FBQyxDQUFBO1FBQ3JCLHlCQUFvQixHQUFHLENBQUMsQ0FBQTtRQUN4QixrQ0FBNkIsR0FBRyxDQUFDLENBQUE7UUFDakMsNkJBQXdCLEdBQUcsRUFBRSxDQUFBO1FBQzdCLGdDQUEyQixHQUFHLEVBQUUsQ0FBQTtRQUNoQyw2QkFBd0IsR0FBRyxLQUFLLENBQUE7UUFDaEMsMEJBQXFCLEdBQUcsRUFBRSxDQUFBO1FBQzFCLDhCQUF5QixHQUFHLEtBQUssQ0FBQTtRQUNqQywyQkFBc0IsR0FBRyxLQUFLLENBQUE7UUFDOUIsZUFBVSxHQUFRLEVBQUUsQ0FBQTtRQUNwQiwrQkFBMEIsR0FBRyxFQUFFLENBQUE7UUFRN0IsSUFBSSxDQUFDLFVBQVUsR0FBRztZQUNoQixpQkFBaUIsRUFBRSxFQUFFO1lBQ3JCLG1CQUFtQixFQUFFLEVBQUUsRUFBRSwwQkFBMEI7U0FDcEQsQ0FBQztJQUVKLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXZCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFFdkUsSUFBSSxhQUFhLEVBQUU7WUFDakIsYUFBYSxDQUFDLFlBQVk7aUJBQ3ZCLElBQUksQ0FDSCxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQ2pCLG9CQUFvQixFQUFFLENBQ3ZCO2lCQUNBLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUV0QixNQUFNLEdBQUcsR0FBRyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO2dCQUUxQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsR0FBRyxDQUFDO2dCQUVqQywwQkFBMEI7Z0JBQzFCLElBQUksQ0FBQywwQkFBMEIsR0FBRyxFQUFFLENBQUM7Z0JBRXJDLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRTtvQkFFZixJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO29CQUVwQyxrQkFBa0I7b0JBQ2xCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUU3QjtxQkFBTTtvQkFFTCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsS0FBSyxDQUFDO29CQUVyQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVc7d0JBQ3pCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQzdDLENBQUMsRUFDRCxJQUFJLENBQUMsMkJBQTJCLENBQ2pDLENBQUM7b0JBRUosSUFBSSxDQUFDLHdCQUF3Qjt3QkFDM0IsSUFBSSxDQUFDLDJCQUEyQixDQUFDO29CQUVuQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO29CQUUzQixJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztpQkFDdkM7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNOO1FBR0UsSUFDRCxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCO1lBQ2xDLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFDOUM7WUFDQSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztTQUMzQjtJQUVDLENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsSUFBSSxJQUFJLENBQUMseUJBQXlCLElBQUksSUFBSSxDQUFDLHlCQUF5QixFQUFFO1lBQ3BFLE9BQU07U0FDUDtRQUNELElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUE7UUFDckMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFBO0lBQ3ZCLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUNuQyxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQzNDLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ3RDLFNBQVMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7WUFDckIsaUJBQWlCLEVBQUUsQ0FBQyxFQUFFLENBQUM7U0FDeEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFVO1FBQ3JCLE1BQU0sSUFBSSxHQUFTLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXpDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxPQUFPO1NBQ1I7UUFFRCxxQkFBcUI7UUFDckIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2xELElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxRQUFRLEVBQUU7WUFDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxnQ0FBZ0MsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDO1lBQzFFLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3BFLE9BQU87U0FDUjtRQUVELHFCQUFxQjtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzFDLElBQUksQ0FBQyxXQUFXLEdBQUcsbURBQW1ELENBQUM7WUFDdkUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDckUsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxzQkFBc0IsRUFBRSxDQUFDO0lBQ2xFLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUN4QixDQUFDO0lBRUQsc0JBQXNCO0lBQ3RCLHdCQUF3QjtJQUN4QixxQ0FBcUM7SUFDckMsNEZBQTRGO0lBQzVGLG9GQUFvRjtJQUNwRiw2QkFBNkI7SUFDN0IsdURBQXVEO0lBQ3ZELE1BQU07SUFDTix1RUFBdUU7SUFDdkUsOERBQThEO0lBQzlELHFCQUFxQjtJQUNyQixpRkFBaUY7SUFDakYsZ0ZBQWdGO0lBQ2hGLDhCQUE4QjtJQUM5Qix1RUFBdUU7SUFDdkUsNkRBQTZEO0lBQzdELE1BQU07SUFDTixxSUFBcUk7SUFDckksNEVBQTRFO0lBQzVFLGtGQUFrRjtJQUNsRixNQUFNO0lBQ04sd0lBQXdJO0lBQ3hJLDRFQUE0RTtJQUM1RSxrRkFBa0Y7SUFDbEYsTUFBTTtJQUVOLDRCQUE0QjtJQUM1Qix1REFBdUQ7SUFDdkQsd0JBQXdCO0lBQ3hCLDZCQUE2QjtJQUM3QixvRUFBb0U7SUFDcEUsMEJBQTBCO0lBQzFCLDJDQUEyQztJQUMzQyxZQUFZO0lBQ1osc0NBQXNDO0lBQ3RDLFNBQVM7SUFDVCwwQkFBMEI7SUFDMUIsNkJBQTZCO0lBQzdCLGtGQUFrRjtJQUNsRiwwQkFBMEI7SUFDMUIseUNBQXlDO0lBQ3pDLFlBQVk7SUFDWiwyREFBMkQ7SUFDM0QsUUFBUTtJQUNSLE9BQU87SUFDUCxJQUFJO0lBSUosZUFBZTtRQUNiLE1BQU0sb0JBQW9CLEdBQWEsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1FBRWpHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsd0NBQXdDLEVBQUUsR0FBRyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDdEYsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFFcEIsTUFBTSxPQUFPLEdBQUc7WUFDZCxlQUFlLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFVBQVU7WUFDdkUsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLE9BQU87WUFDdEUsV0FBVyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFdBQVc7U0FDcEQsQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLEVBQUUsUUFBUSxFQUFFLFNBQVMsS0FBSyxPQUFPLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsZUFBZSxFQUFFO1lBQzdILE9BQU8sQ0FBQyxlQUFlLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUM7WUFDMUUsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDO1NBQ2pGO1FBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsRUFBRSxRQUFRLEVBQUUsU0FBUyxLQUFLLFVBQVUsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxlQUFlLEVBQUU7WUFDaEksT0FBTyxDQUFDLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQztZQUMxRSxPQUFPLENBQUMsaUJBQWlCLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUM7U0FDakY7UUFFRCxzREFBc0Q7UUFDdEQsTUFBTSxRQUFRLEdBQUcsb0JBQW9CLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFO1lBQzFELE1BQU0sR0FBRyxHQUFHO2dCQUNWLEdBQUcsT0FBTztnQkFDVixnQkFBZ0IsRUFBRSxlQUFlO2FBQ2xDLENBQUM7WUFFRixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FDaEQsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNqQixPQUFPLENBQUMsS0FBSyxDQUFDLDhCQUE4QixlQUFlLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDdEUsMkVBQTJFO2dCQUMzRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7WUFDM0QsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgscUNBQXFDO1FBQ3JDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDckMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFFckIsMkJBQTJCO1lBQzNCLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFakQsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDckIsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzlELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLCtCQUErQixXQUFXLEVBQUUsRUFBRSxHQUFHLEVBQUU7b0JBQ3BFLFFBQVEsRUFBRSxJQUFJO29CQUNkLFVBQVUsRUFBRSxDQUFDLGdCQUFnQixDQUFDO2lCQUMvQixDQUFDLENBQUM7YUFDSjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsRUFBRSxHQUFHLEVBQUU7b0JBQzdELFFBQVEsRUFBRSxJQUFJO29CQUNkLFVBQVUsRUFBRSxDQUFDLGtCQUFrQixDQUFDO2lCQUNqQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDL0I7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUN4QixDQUFDO0lBRUQsY0FBYyxDQUFDLFVBQW1CLEVBQUUsTUFBZTtRQUVqRCxpQ0FBaUM7UUFDakMsSUFBSSxDQUFDLFVBQVUsSUFBSSxVQUFVLEVBQUUsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUMzQyxPQUFPO1NBQ1I7UUFFRCxNQUFNLFNBQVMsR0FBRyxDQUFDLE9BQU8sTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQTtRQUNoRixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUE7UUFDL0MsTUFBTSxTQUFTLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNyRSxvRUFBb0U7UUFDcEUsSUFBSSxTQUFTLEtBQUssQ0FBQyxFQUFFO1lBQ25CLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxLQUFLLENBQUE7WUFDckMsUUFBUSxHQUFHLEVBQUUsQ0FBQTtTQUNkO1FBQ0QsTUFBTSxXQUFXLEdBQVE7WUFDdkIsaUJBQWlCLEVBQUU7Z0JBQ2pCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0QsZUFBZSxFQUFFLEVBQUU7WUFDbkIsVUFBVSxFQUFFLFNBQVM7WUFDckIsUUFBUSxFQUFFLFFBQVE7U0FDbkIsQ0FBQTtRQUNELElBQUksVUFBVSxFQUFFLE1BQU0sRUFBRTtZQUN0QixXQUFXLENBQUMsY0FBYyxDQUFDLEdBQUcsVUFBVSxDQUFBO1lBQ3hDLHdDQUF3QztZQUN4QyxXQUFXLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQTtZQUMxQix5Q0FBeUM7WUFDekMsV0FBVyxDQUFDLFFBQVEsR0FBRyxTQUFTLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQTtZQUMzRSw2Q0FBNkM7WUFDN0MsSUFBSSxDQUFDLHdCQUF3QixHQUFHLEtBQUssQ0FBQTtTQUN0QztRQUVELHlFQUF5RTtRQUN6RSxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFBO1FBRXJDLElBQUksQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDekUsSUFBSSxDQUFDLHlCQUF5QixHQUFHLEtBQUssQ0FBQTtZQUN0QyxJQUFJLENBQUMseUJBQXlCLEdBQUcsS0FBSyxDQUFBO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO2FBQ0EsU0FBUyxDQUFDO1lBQ1QsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBRXpCLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLG9CQUFvQixFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUVyRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUN6QyxJQUFJLEVBQUUsSUFBSSxFQUFFLFdBQVcsSUFBSSxFQUFFO29CQUM3QixNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sSUFBSSxRQUFRO2lCQUNqQyxDQUFDLENBQUMsQ0FBQztnQkFFSixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUNqQixHQUFHLEVBQ0gsMEJBQTBCLEVBQzFCLENBQUMsQ0FBQyxHQUFHLENBQ0gsR0FBRyxFQUNILCtCQUErQixFQUMvQixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSwwQkFBMEIsRUFBRSxDQUFDLENBQUMsQ0FDMUMsQ0FDRixDQUFDO2dCQUVGLElBQUksQ0FBQyw2QkFBNkIsR0FBRyxLQUFLLENBQUM7Z0JBRTNDLDRCQUE0QjtnQkFDNUIsY0FBYztnQkFDZCw0QkFBNEI7Z0JBRTVCLElBQUksVUFBVSxFQUFFLE1BQU0sRUFBRTtvQkFFdEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsR0FBRyxNQUFNLENBQUM7b0JBRTdDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVzt3QkFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQ3ZDLENBQUMsRUFDRCxJQUFJLENBQUMsMEJBQTBCLENBQ2hDLENBQUM7b0JBRUosSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7b0JBRXRDLE9BQU87aUJBQ1I7Z0JBRUQsNEJBQTRCO2dCQUM1QixjQUFjO2dCQUNkLDRCQUE0QjtnQkFFNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsSUFBSSxTQUFTLEtBQUssQ0FBQyxFQUFFO29CQUU1RCxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsTUFBTSxDQUFDO2lCQUUvQztxQkFBTTtvQkFFTCxNQUFNLFFBQVEsR0FDWixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBRTlELElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUM3QyxRQUFRLEVBQ1IsQ0FBQyxFQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FDNUMsQ0FBQztpQkFDSDtnQkFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVc7b0JBQ3pCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQzdDLENBQUMsRUFDRCxJQUFJLENBQUMsd0JBQXdCLENBQzlCLENBQUM7Z0JBRUosMEJBQTBCO2dCQUMxQixNQUFNLGtCQUFrQixHQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2dCQUUvQyxJQUFJLGtCQUFrQixFQUFFO29CQUV0QixNQUFNLGFBQWEsR0FDakIsa0JBQWtCLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztvQkFFakMsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FDdEMsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUNoQixJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FDcEMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEtBQUssS0FBSyxDQUNwQyxDQUNKLENBQUM7b0JBRUYsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLGFBQWEsQ0FBQyxNQUFNLEVBQUU7d0JBQy9DLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztxQkFDMUM7aUJBQ0Y7Z0JBRUQsZUFBZTtnQkFDZixJQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO29CQUNsQyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDO2lCQUN0QztnQkFFRCxJQUNFLElBQUksQ0FBQyw2QkFBNkI7b0JBQ2xDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU07d0JBQ25ELElBQUksQ0FBQyw2QkFBNkIsRUFDbEM7b0JBQ0EsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQztpQkFDdEM7Z0JBRUQsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7WUFDeEMsQ0FBQztZQUNPLEtBQUssRUFBRSxHQUFHLEVBQUU7Z0JBQ1YsdUVBQXVFO2dCQUN2RSxxQ0FBcUM7Z0JBQ3JDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUE7Z0JBQ3BDLHdGQUF3RjtZQUMxRixDQUFDO1NBQ0YsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUNELDJEQUEyRDtJQUM3RCw4QkFBOEI7UUFDNUIsTUFBTSxvQkFBb0IsR0FDeEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1FBRTVELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxNQUFNO1lBQUUsT0FBTztRQUUxQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFvQixFQUFFLEVBQUU7WUFDcEQsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUU7Z0JBQUUsT0FBTztZQUVsQyxNQUFNLEtBQUssR0FBRyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDO1lBRXZELDhEQUE4RDtZQUM5RCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FDNUQsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUN4RSxDQUFDO1lBQ0YsSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsR0FBRztvQkFDbEMsS0FBSztvQkFDTCxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUM7aUJBQzdDLENBQUM7YUFDSDtZQUVELDBCQUEwQjtZQUMxQixNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLElBQUksQ0FDM0QsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUN4RSxDQUFDO1lBQ0YsSUFBSSxDQUFDLG1CQUFtQixFQUFFO2dCQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDNUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQ3BDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUMzQixDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FDekMsQ0FBQztRQUVGLHNCQUFzQjtRQUN0QixJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQzFDLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQ2pDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUN6QyxDQUFDO0lBQ0osQ0FBQztJQUNDLDJCQUEyQjtRQUN6Qix3REFBd0Q7UUFDeEQsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBRSxDQUFDLEtBQUssQ0FBQTtRQUM5RSxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO2dCQUNqRCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQTthQUM1RDtZQUNELGdEQUFnRDtZQUNoRCxJQUFJLGtCQUFrQixFQUFFO2dCQUN0QixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7Z0JBQ3hFLElBQUksa0JBQWtCLEVBQUU7b0JBQ3RCLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO2lCQUNoRDthQUNGO1FBQ0gsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBQ1QsQ0FBQztJQUVELGdDQUFnQztJQUNoQywwQ0FBMEM7SUFDMUMscURBQXFEO0lBQ3JELCtDQUErQztJQUUvQyxxQ0FBcUM7SUFDckMsdUJBQXVCO0lBQ3ZCLDBDQUEwQztJQUMxQyw0Q0FBNEM7SUFDNUMsa0NBQWtDO0lBQ2xDLHdFQUF3RTtJQUN4RSxrSEFBa0g7SUFDbEgsMkNBQTJDO0lBQzNDLDRDQUE0QztJQUM1QyxNQUFNO0lBQ04sSUFBSTtJQUNMLG1CQUFtQixDQUFDLE1BQWU7UUFFbkMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNWLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxLQUFLLENBQUM7WUFDcEMsT0FBTztTQUNSO1FBRUQsSUFBSSxJQUFJLENBQUMsc0JBQXNCO1lBQUUsT0FBTztRQUN4QyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDO1FBQ25DLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxLQUFLLENBQUM7UUFFckMsaURBQWlEO1FBQ2pELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sRUFBRTtZQUM5QyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDO1lBQ2pFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7WUFDM0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDbkM7YUFBTTtZQUNMLGlEQUFpRDtZQUNqRCxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FDbkUsQ0FBQyxFQUFFLElBQUksQ0FBQyx3QkFBd0IsQ0FDakMsQ0FBQztZQUNGLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxDQUFDO1NBQ3ZDO1FBRUQscUJBQXFCO1FBQ3JCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFFZCxNQUFNLFdBQVcsR0FDZixRQUFRLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBcUIsQ0FBQztZQUU5RCxJQUFJLFdBQVcsRUFBRTtnQkFDZixXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDckI7UUFFSCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFUixnQkFBZ0I7UUFDaEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUVkLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQ2xDLGdDQUFnQyxDQUNYLENBQUM7WUFFeEIsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDVixPQUFPO2FBQ1I7WUFFRCxzQkFBc0I7WUFDdEIsS0FBSyxDQUFDLG1CQUFtQixDQUN2QixRQUFRLEVBQ1IsSUFBSSxDQUFDLHlCQUFnQyxDQUN0QyxDQUFDO1lBRUYsS0FBSyxDQUFDLGdCQUFnQixDQUNwQixRQUFRLEVBQ1IsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFDekMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQ2xCLENBQUM7UUFFSixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUMseUJBQXlCLENBQUMsS0FBVTtRQUVsQyxNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQUUsTUFBTSxDQUFDO1FBRTlCLE1BQU0sYUFBYSxHQUNqQixPQUFPLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxZQUFZO1lBQ3hDLE9BQU8sQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO1FBRTNCLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLHlCQUF5QixFQUFFO1lBQ3BELE9BQU87U0FDUjtRQUVELDRCQUE0QjtRQUM1QixjQUFjO1FBQ2QsNEJBQTRCO1FBQzVCLElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFO1lBRWhDLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUM7WUFFdEMsSUFBSSxDQUFDLDBCQUEwQixJQUFJLEVBQUUsQ0FBQztZQUV0QyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUVkLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVztvQkFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQ3ZDLENBQUMsRUFDRCxJQUFJLENBQUMsMEJBQTBCLENBQ2hDLENBQUM7Z0JBRUosSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7Z0JBRXRDLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxLQUFLLENBQUM7WUFFekMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBRVIsT0FBTztTQUNSO1FBRUQsNEJBQTRCO1FBQzVCLGNBQWM7UUFDZCw0QkFBNEI7UUFFNUIsbUJBQW1CO1FBQ25CLElBQ0UsSUFBSSxDQUFDLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNO1lBQzFDLElBQUksQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFDcEM7WUFFQSxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDO1lBRXRDLElBQUksQ0FBQyx3QkFBd0I7Z0JBQzNCLElBQUksQ0FBQywyQkFBMkIsQ0FBQztZQUVuQyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUVkLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVztvQkFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQ3JDLENBQUMsRUFDRCxJQUFJLENBQUMsd0JBQXdCLENBQzlCLENBQUM7Z0JBRUosSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7Z0JBRXRDLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxLQUFLLENBQUM7WUFFekMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBRVIsT0FBTztTQUNSO1FBRUQsb0JBQW9CO1FBQ3BCLE1BQU0sWUFBWSxHQUNoQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsaUJBQWlCLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDO1FBRXBELElBQ0UsQ0FBQyxJQUFJLENBQUMsd0JBQXdCO1lBQzlCLElBQUksQ0FBQyw2QkFBNkI7WUFDbEMsWUFBWSxHQUFHLElBQUksQ0FBQyw2QkFBNkIsRUFDakQ7WUFFQSxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDO1lBRXRDLElBQUksQ0FBQyxpQkFBaUI7Z0JBQ3BCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixJQUFJLENBQUMsQ0FBQztvQkFDN0IsSUFBSSxDQUFDLDJCQUEyQixDQUFDO1lBRW5DLElBQUksQ0FBQyx3QkFBd0I7Z0JBQzNCLElBQUksQ0FBQywyQkFBMkIsQ0FBQztZQUVuQyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztTQUN4RDtJQUNILENBQUM7SUFFRCxJQUFJLHdCQUF3QjtRQUMxQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFnQixDQUFDO0lBQ3RFLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxLQUFZO1FBQ2pDLElBQUksQ0FBQywwQkFBMEIsR0FBRyxFQUFFLENBQUM7UUFDckMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXhCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFM0MsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEtBQUssQ0FBQztRQUVyQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVc7WUFDekIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FDN0MsQ0FBQyxFQUNELElBQUksQ0FBQywyQkFBMkIsQ0FDakMsQ0FBQztRQUVKLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUM7UUFDakUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQztJQUM3QixDQUFDOytHQTVwQlUsdUJBQXVCLDhDQThCeEIsZUFBZTttR0E5QmQsdUJBQXVCLHFKQWVBLFVBQVUsNkJDNUI5QyxzdExBMkdNOzs0RkQ5Rk8sdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLHFCQUFxQjs7MEJBa0M1QixNQUFNOzJCQUFDLGVBQWU7NEpBZnVCLGNBQWM7c0JBQTdELFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEluamVjdCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIEZvcm1BcnJheSwgVmFsaWRhdG9ycywgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaW5hbGl6ZSwgc3RhcnRXaXRoIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgeyBmb3JrSm9pbiwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNoYXJlZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9tb2R1bGVzL3NoYXJlZC9zZXJ2aWNlcy9zaGFyZWQuc2VydmljZSc7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtYWRkLWRlc2lnbmF0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkZC1kZXNpZ25hdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FkZC1kZXNpZ25hdGlvbi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEFkZERlc2lnbmF0aW9uQ29tcG9uZW50IHtcbiAgZGVzaWduYXRpb25Gb3JtOiBGb3JtR3JvdXA7XG4gIG1heEZpbGVTaXplTUIgPSAyNTtcbiAgYWxsb3dlZFR5cGVzID0gW1xuICAgICdhcHBsaWNhdGlvbi9wZGYnLFxuICAgICdhcHBsaWNhdGlvbi9tc3dvcmQnLFxuICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCcsXG4gICAgJ2FwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCcsXG4gICAgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0JyxcbiAgICAndGV4dC9wbGFpbidcbiAgXTtcbiAgdXBsb2FkRXJyb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICB1cGxvYWRlZEZpbGU6IEZpbGUgfCBudWxsID0gbnVsbDtcbiAgY2JwUGxhbkZpbmFsT2JqOiBhbnlcbiAgbG9hZGluZyA9IGZhbHNlXG4gIEBWaWV3Q2hpbGQoJ2Rlc2lnbmF0aW9uJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGRlc2lnbmF0aW9uUmVmPzogRWxlbWVudFJlZlxuICBkZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IGZhbHNlXG4gIGlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSBmYWxzZTtcbiAgZGVzaWduYXRpb25PZmZzZXQgPSAwXG4gIG9kY3NEZXNpZ25hdGlvbkNvdW50ID0gMFxuICBkZWZhdWx0U2VhcmNoRGVzaWduYXRpb25Db3VudCA9IDBcbiAgZGVzaWduYXRpb25MaXN0TG9hZENvdW50ID0gNTBcbiAgZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50ID0gNTBcbiAgbm9Nb3JlTGVnYWN5RGVzaWduYXRpb25zID0gZmFsc2VcbiAgZGVzaWduYXRpb25TZWFyY2hUZXh0ID0gJydcbiAgZGVzaWduYXRpb25Jbml0SW5Qcm9ncmVzcyA9IGZhbHNlXG4gIHNjcm9sbExpc3RlbmVyQXR0YWNoZWQgPSBmYWxzZVxuICBtYXN0ZXJEYXRhOiBhbnkgPSB7fVxuICBzZWFyY2hEZXNpZ25hdGlvbkxvYWRDb3VudCA9IDUwXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxBZGREZXNpZ25hdGlvbkNvbXBvbmVudD4sXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnksXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBzaGFyZWRTZXJ2aWNlOiBTaGFyZWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyKSB7XG5cbiAgICB0aGlzLm1hc3RlckRhdGEgPSB7XG4gICAgICBkZXNpZ25hdGlvbkJhY2t1cDogW10sXG4gICAgICBkZXNpZ25hdGlvbkZpbHRlcmVkOiBbXSwgLy8gZmlsdGVyZWQgc2VhcmNoIHJlc3VsdHNcbiAgICB9O1xuXG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmluaXRpYWxpemVGb3JtKCk7XG5cbiAgIGNvbnN0IHNlYXJjaENvbnRyb2wgPSB0aGlzLmRlc2lnbmF0aW9uRm9ybS5nZXQoJ3NlYXJjaERlc2lnbmF0aW9uJyk7XG5cbmlmIChzZWFyY2hDb250cm9sKSB7XG4gIHNlYXJjaENvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgLnBpcGUoXG4gICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICApXG4gICAgLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcblxuICAgICAgY29uc3QgdHh0ID0gcmVzPy50b1N0cmluZygpPy50cmltKCkgPz8gJyc7XG5cbiAgICAgIHRoaXMuZGVzaWduYXRpb25TZWFyY2hUZXh0ID0gdHh0O1xuXG4gICAgICAvLyBSRVNFVCBTRUFSQ0ggUEFHSU5BVElPTlxuICAgICAgdGhpcy5zZWFyY2hEZXNpZ25hdGlvbkxvYWRDb3VudCA9IDUwO1xuXG4gICAgICBpZiAodHh0Py5sZW5ndGgpIHtcblxuICAgICAgICB0aGlzLmRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gdHJ1ZTtcblxuICAgICAgICAvLyBBUEkgU0VBUkNIIE9OTFlcbiAgICAgICAgdGhpcy5nZXREZXNpZ25hdGlvbih0eHQsIDApO1xuXG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIHRoaXMuZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPVxuICAgICAgICAgICh0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgfHwgW10pLnNsaWNlKFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50XG4gICAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudCA9XG4gICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnQ7XG5cbiAgICAgICAgdGhpcy5kZXNpZ25hdGlvbk9mZnNldCA9IDA7XG5cbiAgICAgICAgdGhpcy5jaGVja0N1cnJlbnREZXNpZ25hdGlvblByZXNlbnQoKTtcbiAgICAgIH1cbiAgICB9KTtcbn1cblxuXG4gICBpZiAoXG4gICF0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgfHxcbiAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwLmxlbmd0aCA9PT0gMFxuKSB7XG4gIHRoaXMuZ2V0RGVzaWduYXRpb25TYWZlKCk7XG59XG5cbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVzaWduYXRpb25TYWZlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRlc2lnbmF0aW9uSW5pdEluUHJvZ3Jlc3MgfHwgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5kZXNpZ25hdGlvbkluaXRJblByb2dyZXNzID0gdHJ1ZVxuICAgIHRoaXMuZ2V0RGVzaWduYXRpb24oKVxuICB9XG5cbiAgaW5pdGlhbGl6ZUZvcm0oKSB7XG4gICAgdGhpcy5kZXNpZ25hdGlvbkZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGRlc2lnbmF0aW9uX25hbWU6IFtbXSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICBpbnN0cnVjdGlvbjogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIHVwbG9hZERvYzogW251bGwsIFtdXSxcbiAgICAgIHNlYXJjaERlc2lnbmF0aW9uOiBbJyddLFxuICAgIH0pO1xuICB9XG5cbiAgb25GaWxlQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBmaWxlOiBGaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xuXG4gICAgaWYgKCFmaWxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgZmlsZSBzaXplXG4gICAgY29uc3QgbWF4Qnl0ZXMgPSB0aGlzLm1heEZpbGVTaXplTUIgKiAxMDI0ICogMTAyNDtcbiAgICBpZiAoZmlsZS5zaXplID4gbWF4Qnl0ZXMpIHtcbiAgICAgIHRoaXMudXBsb2FkRXJyb3IgPSBgRmlsZSBleGNlZWRzIG1heGltdW0gc2l6ZSBvZiAke3RoaXMubWF4RmlsZVNpemVNQn1NQmA7XG4gICAgICB0aGlzLmRlc2lnbmF0aW9uRm9ybS5nZXQoJ3VwbG9hZERvYycpPy5zZXRFcnJvcnMoeyBtYXhTaXplOiB0cnVlIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGZpbGUgdHlwZVxuICAgIGlmICghdGhpcy5hbGxvd2VkVHlwZXMuaW5jbHVkZXMoZmlsZS50eXBlKSkge1xuICAgICAgdGhpcy51cGxvYWRFcnJvciA9IGBJbnZhbGlkIGZpbGUgdHlwZS4gQWxsb3dlZDogUERGLCBXb3JkLCBFeGNlbCwgVFhUYDtcbiAgICAgIHRoaXMuZGVzaWduYXRpb25Gb3JtLmdldCgndXBsb2FkRG9jJyk/LnNldEVycm9ycyh7IGZpbGVUeXBlOiB0cnVlIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudXBsb2FkZWRGaWxlID0gZmlsZTtcbiAgICB0aGlzLnVwbG9hZEVycm9yID0gbnVsbDtcbiAgICB0aGlzLmRlc2lnbmF0aW9uRm9ybS5wYXRjaFZhbHVlKHsgdXBsb2FkRG9jOiBmaWxlIH0pO1xuICAgIHRoaXMuZGVzaWduYXRpb25Gb3JtLmdldCgndXBsb2FkRG9jJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfVxuXG4gIGNhbmNlbEZvcm0oKSB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKVxuICB9XG5cbiAgLy8gc2F2ZURlc2lnbmF0aW9uKCkge1xuICAvLyAgIHRoaXMubG9hZGluZyA9IHRydWVcbiAgLy8gICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAvLyAgIGZvcm1EYXRhLmFwcGVuZCgnZGVzaWduYXRpb25OYW1lJywgdGhpcy5kZXNpZ25hdGlvbkZvcm0uZ2V0KCdkZXNpZ25hdGlvbk5hbWUnKT8udmFsdWUpO1xuICAvLyAgIGZvcm1EYXRhLmFwcGVuZCgncm9sZURldGFpbHMnLCB0aGlzLmRlc2lnbmF0aW9uRm9ybS5nZXQoJ3JvbGVEZXRhaWxzJyk/LnZhbHVlKTtcbiAgLy8gICBpZiAodGhpcy51cGxvYWRlZEZpbGUpIHtcbiAgLy8gICAgIGZvcm1EYXRhLmFwcGVuZCgndXBsb2FkRG9jJywgdGhpcy51cGxvYWRlZEZpbGUpO1xuICAvLyAgIH1cbiAgLy8gICB0aGlzLmNicFBsYW5GaW5hbE9iaiA9IHRoaXMuc2hhcmVkU2VydmljZS5nZXRDQlBQbGFuTG9jYWxTdG9yYWdlKClcbiAgLy8gICBjb25zb2xlLmxvZygndGhpcy5kZXNpZ25hdGlvbkZvcm0nLCB0aGlzLmRlc2lnbmF0aW9uRm9ybSlcbiAgLy8gICBsZXQgcmVxOiBhbnkgPSB7XG4gIC8vICAgICBcInN0YXRlX2NlbnRlcl9pZFwiOiB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLm1pbmlzdHJ5LmlkZW50aWZpZXIsXG4gIC8vICAgICBcInN0YXRlX2NlbnRlcl9uYW1lXCI6IHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmoubWluaXN0cnkub3JnTmFtZSxcbiAgLy8gICAgIC8vIFwiZGVwYXJ0bWVudF9pZFwiOiBcIlwiLFxuICAvLyAgICAgXCJkZXNpZ25hdGlvbl9uYW1lXCI6IHRoaXMuZGVzaWduYXRpb25Gb3JtLnZhbHVlLmRlc2lnbmF0aW9uX25hbWUsXG4gIC8vICAgICBcImluc3RydWN0aW9uXCI6IHRoaXMuZGVzaWduYXRpb25Gb3JtLnZhbHVlLmluc3RydWN0aW9uLFxuICAvLyAgIH1cbiAgLy8gICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iaj8ubWluaXN0cnk/LnNiT3JnVHlwZSA9PT0gJ3N0YXRlJyAmJiB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRfbmFtZSkge1xuICAvLyAgICAgcmVxWydkZXBhcnRtZW50X2lkJ10gPSB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRzXG4gIC8vICAgICByZXFbJ2RlcGFydG1lbnRfbmFtZSddID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50X25hbWVcbiAgLy8gICB9XG4gIC8vICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmo/Lm1pbmlzdHJ5Py5zYk9yZ1R5cGUgPT09ICdtaW5pc3RyeScgJiYgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50X25hbWUpIHtcbiAgLy8gICAgIHJlcVsnZGVwYXJ0bWVudF9pZCddID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50c1xuICAvLyAgICAgcmVxWydkZXBhcnRtZW50X25hbWUnXSA9IHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmouZGVwYXJ0bWVudF9uYW1lXG4gIC8vICAgfVxuXG4gIC8vICAgY29uc29sZS5sb2coJ3JlcScsIHJlcSlcbiAgLy8gICB0aGlzLnNoYXJlZFNlcnZpY2UuYWRkRGVzaWduYXRpb24ocmVxKS5zdWJzY3JpYmUoe1xuICAvLyAgICAgbmV4dDogKF9yZXMpID0+IHtcbiAgLy8gICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgLy8gICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdEZXNpZ25hdGlvbiBBZGRlZCBTdWNjZXNzZnVsbHknLCAnWCcsIHtcbiAgLy8gICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgLy8gICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLXN1Y2Nlc3MnXVxuICAvLyAgICAgICB9KTtcbiAgLy8gICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoJ3NhdmVkJylcbiAgLy8gICAgIH0sXG4gIC8vICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gIC8vICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gIC8vICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignRmFpbGVkIHRvIGFkZCBkZXNpZ25hdGlvbi4gUGxlYXNlIHRyeSBhZ2Fpbi4nLCAnWCcsIHtcbiAgLy8gICAgICAgICBkdXJhdGlvbjogNTAwMCxcbiAgLy8gICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ11cbiAgLy8gICAgICAgfSk7XG4gIC8vICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGFkZGluZyBkZXNpZ25hdGlvbjonLCBlcnJvcik7XG4gIC8vICAgICB9XG4gIC8vICAgfSlcbiAgLy8gfVxuXG5cblxuICBzYXZlRGVzaWduYXRpb24oKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWREZXNpZ25hdGlvbnM6IHN0cmluZ1tdID0gdGhpcy5kZXNpZ25hdGlvbkZvcm0uZ2V0KCdkZXNpZ25hdGlvbl9uYW1lJyk/LnZhbHVlIHx8IFtdO1xuXG4gICAgaWYgKCFzZWxlY3RlZERlc2lnbmF0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbignUGxlYXNlIHNlbGVjdCBhdCBsZWFzdCBvbmUgZGVzaWduYXRpb24nLCAnWCcsIHsgZHVyYXRpb246IDMwMDAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcblxuICAgIGNvbnN0IGJhc2VPYmogPSB7XG4gICAgICBzdGF0ZV9jZW50ZXJfaWQ6IHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmoubWluaXN0cnkuaWRlbnRpZmllcixcbiAgICAgIHN0YXRlX2NlbnRlcl9uYW1lOiB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLm1pbmlzdHJ5Lm9yZ05hbWUsXG4gICAgICBpbnN0cnVjdGlvbjogdGhpcy5kZXNpZ25hdGlvbkZvcm0udmFsdWUuaW5zdHJ1Y3Rpb24sXG4gICAgfTtcblxuICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqPy5taW5pc3RyeT8uc2JPcmdUeXBlID09PSAnc3RhdGUnICYmIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmouZGVwYXJ0bWVudF9uYW1lKSB7XG4gICAgICBiYXNlT2JqWydkZXBhcnRtZW50X2lkJ10gPSB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRzO1xuICAgICAgYmFzZU9ialsnZGVwYXJ0bWVudF9uYW1lJ10gPSB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRfbmFtZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iaj8ubWluaXN0cnk/LnNiT3JnVHlwZSA9PT0gJ21pbmlzdHJ5JyAmJiB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRfbmFtZSkge1xuICAgICAgYmFzZU9ialsnZGVwYXJ0bWVudF9pZCddID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50cztcbiAgICAgIGJhc2VPYmpbJ2RlcGFydG1lbnRfbmFtZSddID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50X25hbWU7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGFuIGFycmF5IG9mIG9ic2VydmFibGVzLCBvbmUgcGVyIGRlc2lnbmF0aW9uXG4gICAgY29uc3QgYXBpQ2FsbHMgPSBzZWxlY3RlZERlc2lnbmF0aW9ucy5tYXAoZGVzaWduYXRpb25OYW1lID0+IHtcbiAgICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgICAgLi4uYmFzZU9iaixcbiAgICAgICAgZGVzaWduYXRpb25fbmFtZTogZGVzaWduYXRpb25OYW1lLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHRoaXMuc2hhcmVkU2VydmljZS5hZGREZXNpZ25hdGlvbihyZXEpLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBhZGQgZGVzaWduYXRpb246ICR7ZGVzaWduYXRpb25OYW1lfWAsIGVycm9yKTtcbiAgICAgICAgICAvLyBSZXR1cm4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGFuIGVycm9yIG9iamVjdCBidXQgZG9lcyBub3QgYnJlYWsgZm9ya0pvaW5cbiAgICAgICAgICByZXR1cm4gb2YoeyBlcnJvcjogdHJ1ZSwgZGVzaWduYXRpb246IGRlc2lnbmF0aW9uTmFtZSB9KTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAvLyBXYWl0IGZvciBhbGwgQVBJIGNhbGxzIHRvIGNvbXBsZXRlXG4gICAgZm9ya0pvaW4oYXBpQ2FsbHMpLnN1YnNjcmliZShyZXN1bHRzID0+IHtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAvLyBDaGVjayBpZiBhbnkgY2FsbCBmYWlsZWRcbiAgICAgIGNvbnN0IGZhaWxlZCA9IHJlc3VsdHMuZmlsdGVyKHJlcyA9PiByZXM/LmVycm9yKTtcblxuICAgICAgaWYgKGZhaWxlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGZhaWxlZE5hbWVzID0gZmFpbGVkLm1hcChmID0+IGYuZGVzaWduYXRpb24pLmpvaW4oJywgJyk7XG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihgRmFpbGVkIHRvIGFkZCBkZXNpZ25hdGlvbnM6ICR7ZmFpbGVkTmFtZXN9YCwgJ1gnLCB7XG4gICAgICAgICAgZHVyYXRpb246IDUwMDAsXG4gICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdBbGwgZGVzaWduYXRpb25zIGFkZGVkIHN1Y2Nlc3NmdWxseScsICdYJywge1xuICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItc3VjY2VzcyddXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgnc2F2ZWQnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNsb3NlRGlhbG9nKCkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKClcbiAgfVxuXG4gIGdldERlc2lnbmF0aW9uKHNlYXJjaFRleHQ/OiBzdHJpbmcsIG9mZnNldD86IG51bWJlcik6IHZvaWQge1xuXG4gICAgLy8gY2xlYXIgYW55IHByZXZpb3VzIGRlYnVnIGhvb2tzXG4gICAgaWYgKCFzZWFyY2hUZXh0IHx8IHNlYXJjaFRleHQ/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gbm9vcFxuICAgIH1cblxuICAgIGNvbnN0IHJlcU9mZnNldCA9ICh0eXBlb2Ygb2Zmc2V0ID09PSAnbnVtYmVyJykgPyBvZmZzZXQgOiB0aGlzLmRlc2lnbmF0aW9uT2Zmc2V0XG4gICAgbGV0IHJlcUxpbWl0ID0gdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnRcbiAgICBjb25zdCBwYWdlSW5kZXggPSByZXFMaW1pdCA+IDAgPyBNYXRoLmZsb29yKHJlcU9mZnNldCAvIHJlcUxpbWl0KSA6IDBcbiAgICAvLyBpZiB3ZSdyZSByZXF1ZXN0aW5nIGZyb20gZmlyc3QgcGFnZSwgY2xlYXIgdGhlIG5vLW1vcmUtZGF0YSBndWFyZFxuICAgIGlmIChwYWdlSW5kZXggPT09IDApIHtcbiAgICAgIHRoaXMubm9Nb3JlTGVnYWN5RGVzaWduYXRpb25zID0gZmFsc2VcbiAgICAgIHJlcUxpbWl0ID0gNTBcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdEJvZHk6IGFueSA9IHtcbiAgICAgIGZpbHRlckNyaXRlcmlhTWFwOiB7XG4gICAgICAgIHN0YXR1czogJ0FjdGl2ZSdcbiAgICAgIH0sXG4gICAgICByZXF1ZXN0ZWRGaWVsZHM6IFtdLFxuICAgICAgcGFnZU51bWJlcjogcGFnZUluZGV4LFxuICAgICAgcGFnZVNpemU6IHJlcUxpbWl0LFxuICAgIH1cbiAgICBpZiAoc2VhcmNoVGV4dD8ubGVuZ3RoKSB7XG4gICAgICByZXF1ZXN0Qm9keVsnc2VhcmNoU3RyaW5nJ10gPSBzZWFyY2hUZXh0XG4gICAgICAvLyB3aGVuIHNlYXJjaGluZywgc3RhcnQgZnJvbSBmaXJzdCBwYWdlXG4gICAgICByZXF1ZXN0Qm9keS5wYWdlTnVtYmVyID0gMFxuICAgICAgLy8gYWxsb3cgbGFyZ2VyIHBhZ2UgZm9yIHNlYXJjaCBpZiBuZWVkZWRcbiAgICAgIHJlcXVlc3RCb2R5LnBhZ2VTaXplID0gcGFnZUluZGV4ID09PSAwID8gNTAgOiB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudFxuICAgICAgLy8gcmVzZXQgZ3VhcmQgd2hlbiBwZXJmb3JtaW5nIGEgZnJlc2ggc2VhcmNoXG4gICAgICB0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IGZhbHNlXG4gICAgfVxuXG4gICAgLy8gaW5kaWNhdGUgbG9hZGluZyBzdGF0ZSBzbyBzY3JvbGwgaGFuZGxlcnMgZG9uJ3QgdHJpZ2dlciBwYXJhbGxlbCBjYWxsc1xuICAgIHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IHRydWVcblxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWFyY2hQdWJsaWNEZXNpZ25hdGlvbihyZXF1ZXN0Qm9keSkucGlwZShmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSBmYWxzZVxuICAgICAgdGhpcy5kZXNpZ25hdGlvbkluaXRJblByb2dyZXNzID0gZmFsc2VcbiAgICB9KSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcblxuICBjb25zdCBjb250ZW50ID0gXy5nZXQocmVzLCAncmVzdWx0LnJlc3VsdC5kYXRhJywgW10pO1xuXG4gIGNvbnN0IG1hcHBlZCA9IGNvbnRlbnQubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgbmFtZTogaXRlbT8uZGVzaWduYXRpb24gfHwgJycsXG4gICAgc3RhdHVzOiBpdGVtPy5zdGF0dXMgfHwgJ0FjdGl2ZScsXG4gIH0pKTtcblxuICBjb25zdCB0b3RhbCA9IF8uZ2V0KFxuICAgIHJlcyxcbiAgICAncmVzdWx0LnJlc3VsdC50b3RhbGNvdW50JyxcbiAgICBfLmdldChcbiAgICAgIHJlcyxcbiAgICAgICdyZXN1bHQucmVzdWx0LmRhdGEudG90YWxDb3VudCcsXG4gICAgICBfLmdldChyZXMsICdyZXN1bHQucmVzdWx0LnRvdGFsQ291bnQnLCAwKVxuICAgIClcbiAgKTtcblxuICB0aGlzLmRlZmF1bHRTZWFyY2hEZXNpZ25hdGlvbkNvdW50ID0gdG90YWw7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBTRUFSQ0ggTU9ERVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgaWYgKHNlYXJjaFRleHQ/Lmxlbmd0aCkge1xuXG4gICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uRmlsdGVyZWQgPSBtYXBwZWQ7XG5cbiAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPVxuICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uRmlsdGVyZWQuc2xpY2UoXG4gICAgICAgIDAsXG4gICAgICAgIHRoaXMuc2VhcmNoRGVzaWduYXRpb25Mb2FkQ291bnRcbiAgICAgICk7XG5cbiAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBOT1JNQUwgTU9ERVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgaWYgKCF0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10gfHwgcmVxT2Zmc2V0ID09PSAwKSB7XG5cbiAgICB0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10gPSBtYXBwZWQ7XG5cbiAgfSBlbHNlIHtcblxuICAgIGNvbnN0IGNvbWJpbmVkID1cbiAgICAgICh0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10gfHwgW10pLmNvbmNhdChtYXBwZWQpO1xuXG4gICAgdGhpcy5tYXN0ZXJEYXRhWydkZXNpZ25hdGlvbkJhY2t1cCddID0gXy51bmlxQnkoXG4gICAgICBjb21iaW5lZCxcbiAgICAgIChpdDogYW55KSA9PiAoaXQ/Lm5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKClcbiAgICApO1xuICB9XG5cbiAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uID1cbiAgICAodGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwIHx8IFtdKS5zbGljZShcbiAgICAgIDAsXG4gICAgICB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudFxuICAgICk7XG5cbiAgLy8gc2VsZWN0ZWQgdmFsdWUgcHJlc2VydmVcbiAgY29uc3QgZGVzaWduYXRpb25Db250cm9sID1cbiAgICB0aGlzLmRlc2lnbmF0aW9uRm9ybS5nZXQoJ2Rlc2lnbmF0aW9uX25hbWUnKTtcblxuICBpZiAoZGVzaWduYXRpb25Db250cm9sKSB7XG5cbiAgICBjb25zdCBjdXJyZW50VmFsdWVzID1cbiAgICAgIGRlc2lnbmF0aW9uQ29udHJvbC52YWx1ZSB8fCBbXTtcblxuICAgIGNvbnN0IHZhbGlkVmFsdWVzID0gY3VycmVudFZhbHVlcy5maWx0ZXIoXG4gICAgICAodmFsdWU6IHN0cmluZykgPT5cbiAgICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwLnNvbWUoXG4gICAgICAgICAgKGl0ZW06IGFueSkgPT4gaXRlbT8ubmFtZSA9PT0gdmFsdWVcbiAgICAgICAgKVxuICAgICk7XG5cbiAgICBpZiAodmFsaWRWYWx1ZXMubGVuZ3RoICE9PSBjdXJyZW50VmFsdWVzLmxlbmd0aCkge1xuICAgICAgZGVzaWduYXRpb25Db250cm9sLnNldFZhbHVlKHZhbGlkVmFsdWVzKTtcbiAgICB9XG4gIH1cblxuICAvLyBubyBtb3JlIGRhdGFcbiAgaWYgKCFtYXBwZWQgfHwgbWFwcGVkLmxlbmd0aCA9PT0gMCkge1xuICAgIHRoaXMubm9Nb3JlTGVnYWN5RGVzaWduYXRpb25zID0gdHJ1ZTtcbiAgfVxuXG4gIGlmIChcbiAgICB0aGlzLmRlZmF1bHRTZWFyY2hEZXNpZ25hdGlvbkNvdW50ICYmXG4gICAgKHRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb25CYWNrdXAnXSB8fCBbXSkubGVuZ3RoID49XG4gICAgdGhpcy5kZWZhdWx0U2VhcmNoRGVzaWduYXRpb25Db3VudFxuICApIHtcbiAgICB0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IHRydWU7XG4gIH1cblxuICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpO1xufSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAvLyBTdG9wIGZ1cnRoZXIgYXV0b21hdGljIGNhbGxzIG9uIHJlcGVhdGVkIGVycm9ycyB0byBhdm9pZCB0aWdodCBsb29wc1xuICAgICAgICAgIC8vIGxvYWRpbmcgZmxhZyBjbGVhcmVkIGluIGZpbmFsaXplKClcbiAgICAgICAgICB0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IHRydWVcbiAgICAgICAgICAvLyB0aGlzLm1hdFNuYWNrQmFyLm9wZW4oJ1VuYWJsZSB0byBmZXRjaCBkZXNpZ25hdGlvbiBkZXRhaWxzLCBwbGVhc2UgdHJ5IGFnYWluIGxhdGVyIScpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gIH1cbiAgLy8gRklYIDI6IEFsc28gaW5qZWN0IHNlbGVjdGVkIGl0ZW1zIGludG8gZGVzaWduYXRpb25CYWNrdXBcbmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpIHtcbiAgY29uc3Qgc2VsZWN0ZWREZXNpZ25hdGlvbnM6IHN0cmluZ1tdID1cbiAgICB0aGlzLmRlc2lnbmF0aW9uRm9ybS5nZXQoJ2Rlc2lnbmF0aW9uX25hbWUnKT8udmFsdWUgfHwgW107XG5cbiAgaWYgKCFzZWxlY3RlZERlc2lnbmF0aW9ucz8ubGVuZ3RoKSByZXR1cm47XG5cbiAgc2VsZWN0ZWREZXNpZ25hdGlvbnMuZm9yRWFjaCgoc2VsZWN0ZWROYW1lOiBzdHJpbmcpID0+IHtcbiAgICBpZiAoIXNlbGVjdGVkTmFtZT8udHJpbSgpKSByZXR1cm47XG5cbiAgICBjb25zdCBlbnRyeSA9IHsgbmFtZTogc2VsZWN0ZWROYW1lLCBzdGF0dXM6ICdBY3RpdmUnIH07XG5cbiAgICAvLyDinIUgQWRkIHRvIGJhY2t1cCBzbyBpdCBzdXJ2aXZlcyBzbGljZSByZXBsYWNlbWVudHMgb24gc2Nyb2xsXG4gICAgY29uc3QgZXhpc3RzSW5CYWNrdXAgPSB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXA/LnNvbWUoXG4gICAgICAoaXRlbTogYW55KSA9PiBpdGVtPy5uYW1lPy50b0xvd2VyQ2FzZSgpID09PSBzZWxlY3RlZE5hbWUudG9Mb3dlckNhc2UoKVxuICAgICk7XG4gICAgaWYgKCFleGlzdHNJbkJhY2t1cCkge1xuICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwID0gW1xuICAgICAgICBlbnRyeSxcbiAgICAgICAgLi4uKHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cCB8fCBbXSlcbiAgICAgIF07XG4gICAgfVxuXG4gICAgLy8gQWRkIHRvIHZpc2libGUgbGlzdCB0b29cbiAgICBjb25zdCBleGlzdHNJblZpc2libGVMaXN0ID0gdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uPy5zb21lKFxuICAgICAgKGl0ZW06IGFueSkgPT4gaXRlbT8ubmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gc2VsZWN0ZWROYW1lLnRvTG93ZXJDYXNlKClcbiAgICApO1xuICAgIGlmICghZXhpc3RzSW5WaXNpYmxlTGlzdCkge1xuICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uLnVuc2hpZnQoZW50cnkpO1xuICAgIH1cbiAgfSk7XG5cbiAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uID0gXy51bmlxQnkoXG4gICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uLFxuICAgIChpdGVtOiBhbnkpID0+IGl0ZW0/Lm5hbWU/LnRvTG93ZXJDYXNlKClcbiAgKTtcblxuICAvLyDinIUgRGVkdXBlIGJhY2t1cCB0b29cbiAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwID0gXy51bmlxQnkoXG4gICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwLFxuICAgIChpdGVtOiBhbnkpID0+IGl0ZW0/Lm5hbWU/LnRvTG93ZXJDYXNlKClcbiAgKTtcbn1cbiAgb25EZXNpZ25hdGlvbkRyb3Bkb3duQ2xvc2VkKCk6IHZvaWQge1xuICAgIC8vIEtlZXAgdGhlIGRlc2lnbmF0aW9uIHZhbHVlIGJ1dCBjbGVhciB0aGUgc2VhcmNoIGlucHV0XG4gICAgY29uc3QgY3VycmVudERlc2lnbmF0aW9uID0gdGhpcy5kZXNpZ25hdGlvbkZvcm0uZ2V0KCdkZXNpZ25hdGlvbl9uYW1lJykhLnZhbHVlXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5kZXNpZ25hdGlvbkZvcm0uZ2V0KCdzZWFyY2hEZXNpZ25hdGlvbicpKSB7XG4gICAgICAgIHRoaXMuZGVzaWduYXRpb25Gb3JtLmdldCgnc2VhcmNoRGVzaWduYXRpb24nKSEuc2V0VmFsdWUoJycpXG4gICAgICB9XG4gICAgICAvLyBFbnN1cmUgdGhlIGRlc2lnbmF0aW9uIHZhbHVlIHJlbWFpbnMgc2VsZWN0ZWRcbiAgICAgIGlmIChjdXJyZW50RGVzaWduYXRpb24pIHtcbiAgICAgICAgY29uc3QgZGVzaWduYXRpb25Db250cm9sID0gdGhpcy5kZXNpZ25hdGlvbkZvcm0uZ2V0KCdkZXNpZ25hdGlvbl9uYW1lJyk7XG4gICAgICAgIGlmIChkZXNpZ25hdGlvbkNvbnRyb2wpIHtcbiAgICAgICAgICBkZXNpZ25hdGlvbkNvbnRyb2wuc2V0VmFsdWUoY3VycmVudERlc2lnbmF0aW9uKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgMTAwKVxuICB9XG5cbiAgLy8gZGVzaWduYXRpb25TZWFyY2goZXZ0OiBhbnkpIHtcbiAgLy8gICBjb25zdCBzZWFyY2hUZXh0ID0gZXZ0Py50YXJnZXQ/LnZhbHVlXG4gIC8vICAgY29uc3QgdHh0ID0gKHNlYXJjaFRleHQgfHwgJycpLnRvU3RyaW5nKCkudHJpbSgpXG4gIC8vICAgaWYgKHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucykgcmV0dXJuXG5cbiAgLy8gICB0aGlzLmRlc2lnbmF0aW9uU2VhcmNoVGV4dCA9IHR4dFxuICAvLyAgIGlmICh0eHQ/Lmxlbmd0aCkge1xuICAvLyAgICAgdGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IHRydWVcbiAgLy8gICAgIHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IHRydWVcbiAgLy8gICAgIHRoaXMuZ2V0RGVzaWduYXRpb24odHh0LCAwKVxuICAvLyAgIH0gZWxzZSBpZiAodGhpcy5tYXN0ZXJEYXRhICYmIHRoaXMubWFzdGVyRGF0YT8uZGVzaWduYXRpb25CYWNrdXApIHtcbiAgLy8gICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbiA9IHRoaXMubWFzdGVyRGF0YT8uZGVzaWduYXRpb25CYWNrdXAuc2xpY2UoMCwgdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnQpXG4gIC8vICAgICB0aGlzLmRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gZmFsc2VcbiAgLy8gICAgIHRoaXMuY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KClcbiAgLy8gICB9XG4gIC8vIH1cbiBzZXR1cFNjcm9sbExpc3RlbmVyKG9wZW5lZDogYm9vbGVhbik6IHZvaWQge1xuXG4gaWYgKCFvcGVuZWQpIHtcbiAgICB0aGlzLnNjcm9sbExpc3RlbmVyQXR0YWNoZWQgPSBmYWxzZTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodGhpcy5zY3JvbGxMaXN0ZW5lckF0dGFjaGVkKSByZXR1cm47XG4gIHRoaXMuc2Nyb2xsTGlzdGVuZXJBdHRhY2hlZCA9IHRydWU7XG4gIHRoaXMuZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUgPSBmYWxzZTtcblxuICAvLyDinIUgT25seSByZXNldCBwYWdpbmF0aW9uIGlmIHdlIGhhdmUgbm8gZGF0YSB5ZXRcbiAgaWYgKCF0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXA/Lmxlbmd0aCkge1xuICAgIHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50ID0gdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnQ7XG4gICAgdGhpcy5kZXNpZ25hdGlvbk9mZnNldCA9IDA7XG4gICAgdGhpcy5nZXREZXNpZ25hdGlvbih1bmRlZmluZWQsIDApO1xuICB9IGVsc2Uge1xuICAgIC8vIOKchSBSZXN0b3JlIGZyb20gYmFja3VwIHdpdGhvdXQgcmVzZXR0aW5nIG9mZnNldFxuICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbiA9IHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cC5zbGljZShcbiAgICAgIDAsIHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50XG4gICAgKTtcbiAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpO1xuICB9XG5cbiAgLy8gZm9jdXMgc2VhcmNoIGlucHV0XG4gIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgY29uc3Qgc2VhcmNoSW5wdXQgPVxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnNlYXJjaC1pbnB1dCcpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG5cbiAgICBpZiAoc2VhcmNoSW5wdXQpIHtcbiAgICAgIHNlYXJjaElucHV0LmZvY3VzKCk7XG4gICAgfVxuXG4gIH0sIDIwMCk7XG5cbiAgLy8gYXR0YWNoIHNjcm9sbFxuICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgIGNvbnN0IHBhbmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICcubWF0LXNlbGVjdC1wYW5lbC5zZWFyY2gtcGFuZWwnXG4gICAgKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgICBpZiAoIXBhbmVsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUkVNT1ZFIE9MRCBMSVNURU5FUlxuICAgIHBhbmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgICAnc2Nyb2xsJyxcbiAgICAgIHRoaXMub25EZXNpZ25hdGlvblNlbGVjdFNjcm9sbCBhcyBhbnlcbiAgICApO1xuXG4gICAgcGFuZWwuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICdzY3JvbGwnLFxuICAgICAgdGhpcy5vbkRlc2lnbmF0aW9uU2VsZWN0U2Nyb2xsLmJpbmQodGhpcyksXG4gICAgICB7IHBhc3NpdmU6IHRydWUgfVxuICAgICk7XG5cbiAgfSwgMzAwKTtcbn1cblxuICBvbkRlc2lnbmF0aW9uU2VsZWN0U2Nyb2xsKGV2ZW50OiBhbnkpOiB2b2lkIHtcblxuICAgIGNvbnN0IGVsZW1lbnQgPSBldmVudD8udGFyZ2V0O1xuXG4gICAgY29uc3QgcmVhY2hlZEJvdHRvbSA9XG4gICAgICBlbGVtZW50LnNjcm9sbFRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0ID49XG4gICAgICBlbGVtZW50LnNjcm9sbEhlaWdodCAtIDU7XG5cbiAgICBpZiAoIXJlYWNoZWRCb3R0b20gfHwgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIFNFQVJDSCBNT0RFXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGlmICh0aGlzLmRlc2lnYW50aW9uRmlsdGVyRW5hYmxlKSB7XG5cbiAgICAgIHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IHRydWU7XG5cbiAgICAgIHRoaXMuc2VhcmNoRGVzaWduYXRpb25Mb2FkQ291bnQgKz0gNTA7XG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbiA9XG4gICAgICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uRmlsdGVyZWQuc2xpY2UoXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgdGhpcy5zZWFyY2hEZXNpZ25hdGlvbkxvYWRDb3VudFxuICAgICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5jaGVja0N1cnJlbnREZXNpZ25hdGlvblByZXNlbnQoKTtcblxuICAgICAgICB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSBmYWxzZTtcblxuICAgICAgfSwgMzAwKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBOT1JNQUwgTU9ERVxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAgIC8vIGxvY2FsIHBhZ2luYXRpb25cbiAgICBpZiAoXG4gICAgICB0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uQmFja3VwPy5sZW5ndGggPlxuICAgICAgdGhpcy5tYXN0ZXJEYXRhPy5kZXNpZ25hdGlvbj8ubGVuZ3RoXG4gICAgKSB7XG5cbiAgICAgIHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IHRydWU7XG5cbiAgICAgIHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50ICs9XG4gICAgICAgIHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50O1xuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPVxuICAgICAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cC5zbGljZShcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudFxuICAgICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5jaGVja0N1cnJlbnREZXNpZ25hdGlvblByZXNlbnQoKTtcblxuICAgICAgICB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSBmYWxzZTtcblxuICAgICAgfSwgMzAwKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHNlcnZlciBwYWdpbmF0aW9uXG4gICAgY29uc3QgbG9hZGVkTGVnYWN5ID1cbiAgICAgICh0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uQmFja3VwIHx8IFtdKS5sZW5ndGg7XG5cbiAgICBpZiAoXG4gICAgICAhdGhpcy5ub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgJiZcbiAgICAgIHRoaXMuZGVmYXVsdFNlYXJjaERlc2lnbmF0aW9uQ291bnQgJiZcbiAgICAgIGxvYWRlZExlZ2FjeSA8IHRoaXMuZGVmYXVsdFNlYXJjaERlc2lnbmF0aW9uQ291bnRcbiAgICApIHtcblxuICAgICAgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zID0gdHJ1ZTtcblxuICAgICAgdGhpcy5kZXNpZ25hdGlvbk9mZnNldCA9XG4gICAgICAgICh0aGlzLmRlc2lnbmF0aW9uT2Zmc2V0IHx8IDApICtcbiAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnQ7XG5cbiAgICAgIHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50ICs9XG4gICAgICAgIHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50O1xuXG4gICAgICB0aGlzLmdldERlc2lnbmF0aW9uKHVuZGVmaW5lZCwgdGhpcy5kZXNpZ25hdGlvbk9mZnNldCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNlYXJjaERlc2lnbmF0aW9uQ29udHJvbCgpOiBGb3JtQ29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuZGVzaWduYXRpb25Gb3JtLmdldCgnc2VhcmNoRGVzaWduYXRpb24nKSBhcyBGb3JtQ29udHJvbDtcbiAgfVxuXG4gIGNsZWFyRGVzaWduYXRpb25TZWFyY2goZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hEZXNpZ25hdGlvbkxvYWRDb3VudCA9IDUwO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgdGhpcy5zZWFyY2hEZXNpZ25hdGlvbkNvbnRyb2wuc2V0VmFsdWUoJycpO1xuXG4gICAgdGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uID1cbiAgICAgICh0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgfHwgW10pLnNsaWNlKFxuICAgICAgICAwLFxuICAgICAgICB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudFxuICAgICAgKTtcblxuICAgIHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50ID0gdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnQ7XG4gICAgdGhpcy5kZXNpZ25hdGlvbk9mZnNldCA9IDA7XG4gIH1cblxuXG59XG4iLCI8ZGl2IGNsYXNzPVwidmlldy1jYnAtcGxhblwiPlxuICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWhlYWRlclwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGluZ1wiPkFkZCBOZXcgRGVzaWduYXRpb248L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImNsb3NlRGlhbG9nKClcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWNvbnRhaW5lclwiIFtmb3JtR3JvdXBdPVwiZGVzaWduYXRpb25Gb3JtXCI+XG4gICAgICAgIDxtYXQtY2FyZCBjbGFzcz1cIm10LTFcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHA+RGVzaWduYXRpb24gTmFtZTwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXIgbXQtNFwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cImRlc2lnbmF0aW9uX25hbWVcIiBwbGFjZWhvbGRlcj1cIkVudGVyIERlc2lnbmF0aW9uXCIgW3ZhbHVlXT1cIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJvcmRlci1yYWRpdXM6IDI1cHg7IGJvcmRlcjogMXB4IHNvbGlkICNjY2M7IHBhZGRpbmc6IDhweCAxMnB4OyB3aWR0aDogMTAwJTtmb250LXNpemU6IDE0cHg7Zm9udC1mYW1pbHk6ICdMYXRvJztcIj4gLS0+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwibWFyZ2luLXRvcC1zIHctZnVsbCByZXF1aXJlZC1zZWxlY3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IG11bHRpcGxlICNwb3NpdGlvbiBmb3JtQ29udHJvbE5hbWU9XCJkZXNpZ25hdGlvbl9uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBkZXNpZ25hdGlvblwiIChjbG9zZWQpPVwib25EZXNpZ25hdGlvbkRyb3Bkb3duQ2xvc2VkKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M9XCJzZWFyY2gtcGFuZWxcIiAob3BlbmVkQ2hhbmdlKT1cInNldHVwU2Nyb2xsTGlzdGVuZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTdGlja3kgc2VhcmNoIGlucHV0IGNvbnRhaW5lciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RpY2t5LXNlYXJjaC1jb250YWluZXJcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtaW5wdXQtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJTZWFyY2ggZGVzaWduYXRpb25cIiBzdHlsZT1cIndpZHRoOjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlYXJjaERlc2lnbmF0aW9uXCIgY2xhc3M9XCJzZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIChrZXl1cCk9XCJkZXNpZ25hdGlvblNlYXJjaCgkZXZlbnQpXCIgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2VhcmNoRGVzaWduYXRpb25Db250cm9sPy52YWx1ZVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsZWFyLWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhckRlc2lnbmF0aW9uU2VhcmNoKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBPcHRpb25zIGxpc3QgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImRlc2lnbmF0aW9uPy5uYW1lXCIgKm5nRm9yPVwibGV0IGRlc2lnbmF0aW9uIG9mIG1hc3RlckRhdGE/LmRlc2lnbmF0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZGVzaWduYXRpb24/Lm5hbWV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIExvYWRpbmcgaW5kaWNhdG9yIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zXCIgY2xhc3M9XCJsb2FkaW5nLWluZGljYXRvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2FkIE1vcmUuLi5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE5vIHJlc3VsdHMgbWVzc2FnZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cIihtYXN0ZXJEYXRhPy5kZXNpZ25hdGlvbik/Lmxlbmd0aCA9PT0gMFwiIGRpc2FibGVkIGNsYXNzPVwibm8tZGF0YS1vcHRpb25cIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNpZ25hdGlvbiBOb3QgRm91bmQuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxtYXQtZXJyb3IgY2xhc3M9XCJ0ZXh0LXhzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRlc2lnbmF0aW9uRm9ybT8uZ2V0KCdkZXNpZ25hdGlvbl9uYW1lJyk/LnRvdWNoZWQgJiYgZGVzaWduYXRpb25Gb3JtPy5nZXQoJ2Rlc2lnbmF0aW9uX25hbWUnKT8uaW52YWxpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIGRlc2lnbmF0aW9uLlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+IC0tPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHA+Um9sZSAmIHJlc3BvbnNpYmlsaXRpZXMgL0FkZGl0aW9uYWwgZGV0YWlsczwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNCBhZGRpdGlvbmFsLWRldGFpbHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiY3VzdG9tLXRleHRhcmVhXCIgZm9ybUNvbnRyb2xOYW1lPVwiaW5zdHJ1Y3Rpb25cIiByb3dzPVwiNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkFkZCBJbnN0cnVjdGlvbnNcIiBbdmFsdWVdPVwiXCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwibXQtMiBzZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPlVwbG9hZCBEb2N1bWVudCAoUERGL1dvcmQvRXhjZWwvVFhUKTwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZS11cGxvYWQtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwidXBsb2FkRG9jXCIgY2xhc3M9XCJmaWxlLXVwbG9hZC1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWxlLXVwbG9hZC1pY29uXCI+8J+Tjjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IHVwbG9hZGVkRmlsZT8ubmFtZSB8fCAnQ2hvb3NlIGEgZmlsZSAoUERGLCBXb3JkLCBFeGNlbCwgVFhUKScgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiZmlsZS11cGxvYWQtaGludFwiPk1heCBmaWxlIHNpemU6IDI1TUI8L3NtYWxsPlxuXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cInVwbG9hZERvY1wiIHR5cGU9XCJmaWxlXCIgKGNoYW5nZSk9XCJvbkZpbGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhY2NlcHQ9XCIucGRmLC5kb2MsLmRvY3gsLnhscywueGxzeCwudHh0XCIgY2xhc3M9XCJmaWxlLXVwbG9hZC1pbnB1dFwiIC8+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInVwbG9hZEVycm9yXCIgY2xhc3M9XCJlcnJvclwiPnt7IHVwbG9hZEVycm9yIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgICAgPC9tYXQtY2FyZD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicG9wdXAtZm9vdGVyXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tYWN0aXZlXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiQ2FuY2VsXCIgKGNsaWNrKT1cImNhbmNlbEZvcm0oKVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGlucHV0IFtkaXNhYmxlZF09XCJkZXNpZ25hdGlvbkZvcm0/LmludmFsaWRcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImRlc2lnbmF0aW9uRm9ybT8uaW52YWxpZCA/ICdidG4tZGlzYWJsZSc6J2J0bi1hY3RpdmUnXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiR2VuZXJhdGUgQ0JQXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZURlc2lnbmF0aW9uKClcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cIm92ZXJsYXktbG9hZGVyXCIgKm5nSWY9XCJsb2FkaW5nXCI+XG4gICAgPG1hdC1zcGlubmVyIGRpYW1ldGVyPVwiNTBcIj48L21hdC1zcGlubmVyPlxuPC9kaXY+Il19
502
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWRlc2lnbmF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi9jYnAtYWkvc3JjL2xpYi9jb21wb25lbnRzL2FkZC1kZXNpZ25hdGlvbi9hZGQtZGVzaWduYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvYWRkLWRlc2lnbmF0aW9uL2FkZC1kZXNpZ25hdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBQ3pFLE9BQU8sRUFBcUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BHLE9BQU8sRUFBcUMsVUFBVSxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDckcsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUE7QUFDM0IsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFPcEMsTUFBTSxPQUFPLHVCQUF1QjtJQThCbEMsWUFBbUIsU0FBZ0QsRUFDakMsSUFBUyxFQUNqQyxFQUFlLEVBQ2YsS0FBd0IsRUFDeEIsYUFBNEIsRUFDNUIsUUFBcUI7UUFMWixjQUFTLEdBQVQsU0FBUyxDQUF1QztRQUNqQyxTQUFJLEdBQUosSUFBSSxDQUFLO1FBQ2pDLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUN4QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixhQUFRLEdBQVIsUUFBUSxDQUFhO1FBakMvQixrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQUNuQixpQkFBWSxHQUFHO1lBQ2IsaUJBQWlCO1lBQ2pCLG9CQUFvQjtZQUNwQix5RUFBeUU7WUFDekUsMEJBQTBCO1lBQzFCLG1FQUFtRTtZQUNuRSxZQUFZO1NBQ2IsQ0FBQztRQUNGLGdCQUFXLEdBQWtCLElBQUksQ0FBQztRQUNsQyxpQkFBWSxHQUFnQixJQUFJLENBQUM7UUFFakMsWUFBTyxHQUFHLEtBQUssQ0FBQTtRQUVmLDRCQUF1QixHQUFHLEtBQUssQ0FBQTtRQUMvQiw4QkFBeUIsR0FBRyxLQUFLLENBQUM7UUFDbEMsc0JBQWlCLEdBQUcsQ0FBQyxDQUFBO1FBQ3JCLHlCQUFvQixHQUFHLENBQUMsQ0FBQTtRQUN4QixrQ0FBNkIsR0FBRyxDQUFDLENBQUE7UUFDakMsNkJBQXdCLEdBQUcsRUFBRSxDQUFBO1FBQzdCLGdDQUEyQixHQUFHLEVBQUUsQ0FBQTtRQUNoQyw2QkFBd0IsR0FBRyxLQUFLLENBQUE7UUFDaEMsMEJBQXFCLEdBQUcsRUFBRSxDQUFBO1FBQzFCLDhCQUF5QixHQUFHLEtBQUssQ0FBQTtRQUNqQywyQkFBc0IsR0FBRyxLQUFLLENBQUE7UUFDOUIsZUFBVSxHQUFRLEVBQUUsQ0FBQTtRQUNwQiwrQkFBMEIsR0FBRyxFQUFFLENBQUE7UUFDL0IsMEJBQXFCLEdBQUcsRUFBRSxDQUFBO1FBUXhCLElBQUksQ0FBQyxVQUFVLEdBQUc7WUFDaEIsaUJBQWlCLEVBQUUsRUFBRTtZQUNyQixtQkFBbUIsRUFBRSxFQUFFLEVBQUUsMEJBQTBCO1NBQ3BELENBQUM7SUFFSixDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxDQUFBO1FBQzNFLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLHFCQUFxQixFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLG1CQUFtQixDQUFDLElBQUksRUFBRSxDQUFBO1FBQ2xILElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV2QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBRXZFLElBQUksYUFBYSxFQUFFO1lBQ2pCLGFBQWEsQ0FBQyxZQUFZO2lCQUN2QixJQUFJLENBQ0gsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUNqQixvQkFBb0IsRUFBRSxDQUN2QjtpQkFDQSxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFFdEIsTUFBTSxHQUFHLEdBQUcsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztnQkFFMUMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEdBQUcsQ0FBQztnQkFFakMsMEJBQTBCO2dCQUMxQixJQUFJLENBQUMsMEJBQTBCLEdBQUcsRUFBRSxDQUFDO2dCQUVyQyxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUU7b0JBRWYsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQztvQkFFcEMsa0JBQWtCO29CQUNsQixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFFN0I7cUJBQU07b0JBRUwsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEtBQUssQ0FBQztvQkFFckMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXO3dCQUN6QixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUM3QyxDQUFDLEVBQ0QsSUFBSSxDQUFDLDJCQUEyQixDQUNqQyxDQUFDO29CQUVKLElBQUksQ0FBQyx3QkFBd0I7d0JBQzNCLElBQUksQ0FBQywyQkFBMkIsQ0FBQztvQkFFbkMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQztvQkFFM0IsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7aUJBQ3ZDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUdFLElBQ0QsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQjtZQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQzlDO1lBQ0EsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7U0FDM0I7SUFFQyxDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLElBQUksSUFBSSxDQUFDLHlCQUF5QixJQUFJLElBQUksQ0FBQyx5QkFBeUIsRUFBRTtZQUNwRSxPQUFNO1NBQ1A7UUFDRCxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFBO1FBQ3JDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQTtJQUN2QixDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDbkMsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUMzQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUN0QyxTQUFTLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3JCLGlCQUFpQixFQUFFLENBQUMsRUFBRSxDQUFDO1NBQ3hCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsWUFBWTthQUMzRCxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQVU7UUFDckIsTUFBTSxJQUFJLEdBQVMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFekMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNULE9BQU87U0FDUjtRQUVELHFCQUFxQjtRQUNyQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7UUFDbEQsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsRUFBRTtZQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLGdDQUFnQyxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUM7WUFDMUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDcEUsT0FBTztTQUNSO1FBRUQscUJBQXFCO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDMUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxtREFBbUQsQ0FBQztZQUN2RSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNyRSxPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLHNCQUFzQixFQUFFLENBQUM7SUFDbEUsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFBO0lBQ3hCLENBQUM7SUFFRCxzQkFBc0I7SUFDdEIsd0JBQXdCO0lBQ3hCLHFDQUFxQztJQUNyQyw0RkFBNEY7SUFDNUYsb0ZBQW9GO0lBQ3BGLDZCQUE2QjtJQUM3Qix1REFBdUQ7SUFDdkQsTUFBTTtJQUNOLHVFQUF1RTtJQUN2RSw4REFBOEQ7SUFDOUQscUJBQXFCO0lBQ3JCLGlGQUFpRjtJQUNqRixnRkFBZ0Y7SUFDaEYsOEJBQThCO0lBQzlCLHVFQUF1RTtJQUN2RSw2REFBNkQ7SUFDN0QsTUFBTTtJQUNOLHFJQUFxSTtJQUNySSw0RUFBNEU7SUFDNUUsa0ZBQWtGO0lBQ2xGLE1BQU07SUFDTix3SUFBd0k7SUFDeEksNEVBQTRFO0lBQzVFLGtGQUFrRjtJQUNsRixNQUFNO0lBRU4sNEJBQTRCO0lBQzVCLHVEQUF1RDtJQUN2RCx3QkFBd0I7SUFDeEIsNkJBQTZCO0lBQzdCLG9FQUFvRTtJQUNwRSwwQkFBMEI7SUFDMUIsMkNBQTJDO0lBQzNDLFlBQVk7SUFDWixzQ0FBc0M7SUFDdEMsU0FBUztJQUNULDBCQUEwQjtJQUMxQiw2QkFBNkI7SUFDN0Isa0ZBQWtGO0lBQ2xGLDBCQUEwQjtJQUMxQix5Q0FBeUM7SUFDekMsWUFBWTtJQUNaLDJEQUEyRDtJQUMzRCxRQUFRO0lBQ1IsT0FBTztJQUNQLElBQUk7SUFJSixlQUFlO1FBQ2IsTUFBTSxvQkFBb0IsR0FBYSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7UUFFakcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRTtZQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyx3Q0FBd0MsRUFBRSxHQUFHLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN0RixPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUVwQixNQUFNLE9BQU8sR0FBRztZQUNkLGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsVUFBVTtZQUN2RSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsT0FBTztZQUN0RSxXQUFXLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsV0FBVztTQUNwRCxDQUFDO1FBRUYsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsRUFBRSxRQUFRLEVBQUUsU0FBUyxLQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxlQUFlLEVBQUU7WUFDN0gsT0FBTyxDQUFDLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQztZQUMxRSxPQUFPLENBQUMsaUJBQWlCLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUM7U0FDakY7UUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxFQUFFLFFBQVEsRUFBRSxTQUFTLEtBQUssVUFBVSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLGVBQWUsRUFBRTtZQUNoSSxPQUFPLENBQUMsZUFBZSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDO1lBQzFFLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQztTQUNqRjtRQUVELHNEQUFzRDtRQUN0RCxNQUFNLFFBQVEsR0FBRyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUU7WUFDMUQsTUFBTSxHQUFHLEdBQUc7Z0JBQ1YsR0FBRyxPQUFPO2dCQUNWLGdCQUFnQixFQUFFLGVBQWU7YUFDbEMsQ0FBQztZQUVGLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUNoRCxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ2pCLE9BQU8sQ0FBQyxLQUFLLENBQUMsOEJBQThCLGVBQWUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN0RSwyRUFBMkU7Z0JBQzNFLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztZQUMzRCxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxxQ0FBcUM7UUFDckMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNyQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUVyQiwyQkFBMkI7WUFDM0IsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUVqRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNyQixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDOUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsK0JBQStCLFdBQVcsRUFBRSxFQUFFLEdBQUcsRUFBRTtvQkFDcEUsUUFBUSxFQUFFLElBQUk7b0JBQ2QsVUFBVSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7aUJBQy9CLENBQUMsQ0FBQzthQUNKO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLHFDQUFxQyxFQUFFLEdBQUcsRUFBRTtvQkFDN0QsUUFBUSxFQUFFLElBQUk7b0JBQ2QsVUFBVSxFQUFFLENBQUMsa0JBQWtCLENBQUM7aUJBQ2pDLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUMvQjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFBO0lBQ3hCLENBQUM7SUFFRCxjQUFjLENBQUMsVUFBbUIsRUFBRSxNQUFlO1FBRWpELGlDQUFpQztRQUNqQyxJQUFJLENBQUMsVUFBVSxJQUFJLFVBQVUsRUFBRSxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzNDLE9BQU87U0FDUjtRQUVELE1BQU0sU0FBUyxHQUFHLENBQUMsT0FBTyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFBO1FBQ2hGLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQTtRQUMvQyxNQUFNLFNBQVMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3JFLG9FQUFvRTtRQUNwRSxJQUFJLFNBQVMsS0FBSyxDQUFDLEVBQUU7WUFDbkIsSUFBSSxDQUFDLHdCQUF3QixHQUFHLEtBQUssQ0FBQTtZQUNyQyxRQUFRLEdBQUcsRUFBRSxDQUFBO1NBQ2Q7UUFDRCxNQUFNLFdBQVcsR0FBUTtZQUN2QixpQkFBaUIsRUFBRTtnQkFDakIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRCxlQUFlLEVBQUUsRUFBRTtZQUNuQixVQUFVLEVBQUUsU0FBUztZQUNyQixRQUFRLEVBQUUsUUFBUTtTQUNuQixDQUFBO1FBQ0QsSUFBSSxVQUFVLEVBQUUsTUFBTSxFQUFFO1lBQ3RCLFdBQVcsQ0FBQyxjQUFjLENBQUMsR0FBRyxVQUFVLENBQUE7WUFDeEMsd0NBQXdDO1lBQ3hDLFdBQVcsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFBO1lBQzFCLHlDQUF5QztZQUN6QyxXQUFXLENBQUMsUUFBUSxHQUFHLFNBQVMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFBO1lBQzNFLDZDQUE2QztZQUM3QyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsS0FBSyxDQUFBO1NBQ3RDO1FBRUQseUVBQXlFO1FBQ3pFLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUE7UUFFckMsSUFBSSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUN6RSxJQUFJLENBQUMseUJBQXlCLEdBQUcsS0FBSyxDQUFBO1lBQ3RDLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxLQUFLLENBQUE7UUFDeEMsQ0FBQyxDQUFDLENBQUM7YUFDQSxTQUFTLENBQUM7WUFDVCxJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFFekIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsb0JBQW9CLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBRXJELE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2dCQUV2RCxNQUFNLE1BQU0sR0FBRyxPQUFPO3FCQUNyQixNQUFNLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7cUJBQ2hELEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDbkIsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFO29CQUNaLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxJQUFJLEVBQUU7b0JBQzdCLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxJQUFJLFFBQVE7aUJBQ2pDLENBQUMsQ0FBQyxDQUFDO2dCQUVKLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQ2pCLEdBQUcsRUFDSCwwQkFBMEIsRUFDMUIsQ0FBQyxDQUFDLEdBQUcsQ0FDSCxHQUFHLEVBQ0gsK0JBQStCLEVBQy9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLDBCQUEwQixFQUFFLENBQUMsQ0FBQyxDQUMxQyxDQUNGLENBQUM7Z0JBRUYsSUFBSSxDQUFDLDZCQUE2QixHQUFHLEtBQUssQ0FBQztnQkFFM0MsNEJBQTRCO2dCQUM1QixjQUFjO2dCQUNkLDRCQUE0QjtnQkFFNUIsSUFBSSxVQUFVLEVBQUUsTUFBTSxFQUFFO29CQUV0QixJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixHQUFHLE1BQU0sQ0FBQztvQkFFN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXO3dCQUN6QixJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FDdkMsQ0FBQyxFQUNELElBQUksQ0FBQywwQkFBMEIsQ0FDaEMsQ0FBQztvQkFFSixJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztvQkFFdEMsT0FBTztpQkFDUjtnQkFFRCw0QkFBNEI7Z0JBQzVCLGNBQWM7Z0JBQ2QsNEJBQTRCO2dCQUU1QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLFNBQVMsS0FBSyxDQUFDLEVBQUU7b0JBRTVELElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsR0FBRyxNQUFNLENBQUM7aUJBRS9DO3FCQUFNO29CQUVMLE1BQU0sUUFBUSxHQUNaLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFFOUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQzdDLFFBQVEsRUFDUixDQUFDLEVBQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUM1QyxDQUFDO2lCQUNIO2dCQUVELElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVztvQkFDekIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FDN0MsQ0FBQyxFQUNELElBQUksQ0FBQyx3QkFBd0IsQ0FDOUIsQ0FBQztnQkFFSiwwQkFBMEI7Z0JBQzFCLE1BQU0sa0JBQWtCLEdBQ3RCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7Z0JBRS9DLElBQUksa0JBQWtCLEVBQUU7b0JBRXRCLE1BQU0sYUFBYSxHQUNqQixrQkFBa0IsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO29CQUVqQyxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUN0QyxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQ2hCLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUNwQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksS0FBSyxLQUFLLENBQ3BDLENBQ0osQ0FBQztvQkFFRixJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssYUFBYSxDQUFDLE1BQU0sRUFBRTt3QkFDL0Msa0JBQWtCLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO3FCQUMxQztpQkFDRjtnQkFFRCxlQUFlO2dCQUNmLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7b0JBQ2xDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUM7aUJBQ3RDO2dCQUVELElBQ0UsSUFBSSxDQUFDLDZCQUE2QjtvQkFDbEMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTTt3QkFDbkQsSUFBSSxDQUFDLDZCQUE2QixFQUNsQztvQkFDQSxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDO2lCQUN0QztnQkFFRCxJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztZQUN4QyxDQUFDO1lBQ08sS0FBSyxFQUFFLEdBQUcsRUFBRTtnQkFDVix1RUFBdUU7Z0JBQ3ZFLHFDQUFxQztnQkFDckMsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQTtnQkFDcEMsd0ZBQXdGO1lBQzFGLENBQUM7U0FDRixDQUFDLENBQUE7SUFDTixDQUFDO0lBQ0QsMkRBQTJEO0lBQzdELDhCQUE4QjtRQUU1QixNQUFNLG9CQUFvQixHQUN4QixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7UUFFNUQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFO1lBQ2pDLE9BQU87U0FDUjtRQUVELDBCQUEwQjtRQUMxQixNQUFNLGFBQWEsR0FBRyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDaEUsSUFBSTtZQUNKLE1BQU0sRUFBRSxRQUFRO1NBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBRUosMkNBQTJDO1FBQzNDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQ2pFLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FDWixDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FDeEIsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FDakUsQ0FDSixDQUFDO1FBRUYsTUFBTSxlQUFlLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FDdEUsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUNaLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUN4QixRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxJQUFJLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUNqRSxDQUNKLENBQUM7UUFFRiw0QkFBNEI7UUFDNUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FDcEMsQ0FBQyxHQUFHLGFBQWEsRUFBRSxHQUFHLGdCQUFnQixDQUFDLEVBQ3ZDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUN6QyxDQUFDO1FBRUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUMxQyxDQUFDLEdBQUcsYUFBYSxFQUFFLEdBQUcsZUFBZSxDQUFDLEVBQ3RDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUN6QyxDQUFDO0lBQ0osQ0FBQztJQUNDLDJCQUEyQjtRQUN6Qix3REFBd0Q7UUFDeEQsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBRSxDQUFDLEtBQUssQ0FBQTtRQUM5RSxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO2dCQUNqRCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQTthQUM1RDtZQUNELGdEQUFnRDtZQUNoRCxJQUFJLGtCQUFrQixFQUFFO2dCQUN0QixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7Z0JBQ3hFLElBQUksa0JBQWtCLEVBQUU7b0JBQ3RCLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO2lCQUNoRDthQUNGO1FBQ0gsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBQ1QsQ0FBQztJQUVELGdDQUFnQztJQUNoQywwQ0FBMEM7SUFDMUMscURBQXFEO0lBQ3JELCtDQUErQztJQUUvQyxxQ0FBcUM7SUFDckMsdUJBQXVCO0lBQ3ZCLDBDQUEwQztJQUMxQyw0Q0FBNEM7SUFDNUMsa0NBQWtDO0lBQ2xDLHdFQUF3RTtJQUN4RSxrSEFBa0g7SUFDbEgsMkNBQTJDO0lBQzNDLDRDQUE0QztJQUM1QyxNQUFNO0lBQ04sSUFBSTtJQUNMLG1CQUFtQixDQUFDLE1BQWU7UUFFbkMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNWLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxLQUFLLENBQUM7WUFDcEMsT0FBTztTQUNSO1FBRUQsSUFBSSxJQUFJLENBQUMsc0JBQXNCO1lBQUUsT0FBTztRQUN4QyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDO1FBQ25DLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxLQUFLLENBQUM7UUFFckMsaURBQWlEO1FBQ2pELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sRUFBRTtZQUM5QyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDO1lBQ2pFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7WUFDM0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDbkM7YUFBTTtZQUNMLGlEQUFpRDtZQUNqRCxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FDbkUsQ0FBQyxFQUFFLElBQUksQ0FBQyx3QkFBd0IsQ0FDakMsQ0FBQztZQUNGLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxDQUFDO1NBQ3ZDO1FBRUQscUJBQXFCO1FBQ3JCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFFZCxNQUFNLFdBQVcsR0FDZixRQUFRLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBcUIsQ0FBQztZQUU5RCxJQUFJLFdBQVcsRUFBRTtnQkFDZixXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDckI7UUFFSCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFUixnQkFBZ0I7UUFDaEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUVkLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQ2xDLGdDQUFnQyxDQUNYLENBQUM7WUFFeEIsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDVixPQUFPO2FBQ1I7WUFFRCxzQkFBc0I7WUFDdEIsS0FBSyxDQUFDLG1CQUFtQixDQUN2QixRQUFRLEVBQ1IsSUFBSSxDQUFDLHlCQUFnQyxDQUN0QyxDQUFDO1lBRUYsS0FBSyxDQUFDLGdCQUFnQixDQUNwQixRQUFRLEVBQ1IsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFDekMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQ2xCLENBQUM7UUFFSixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUMseUJBQXlCLENBQUMsS0FBVTtRQUVsQyxNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQUUsTUFBTSxDQUFDO1FBRTlCLE1BQU0sYUFBYSxHQUNqQixPQUFPLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxZQUFZO1lBQ3hDLE9BQU8sQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO1FBRTNCLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLHlCQUF5QixFQUFFO1lBQ3BELE9BQU87U0FDUjtRQUVELDRCQUE0QjtRQUM1QixjQUFjO1FBQ2QsNEJBQTRCO1FBQzVCLElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFO1lBRWhDLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUM7WUFFdEMsSUFBSSxDQUFDLDBCQUEwQixJQUFJLEVBQUUsQ0FBQztZQUV0QyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUVkLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVztvQkFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQ3ZDLENBQUMsRUFDRCxJQUFJLENBQUMsMEJBQTBCLENBQ2hDLENBQUM7Z0JBRUosSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7Z0JBRXRDLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxLQUFLLENBQUM7WUFFekMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBRVIsT0FBTztTQUNSO1FBRUQsNEJBQTRCO1FBQzVCLGNBQWM7UUFDZCw0QkFBNEI7UUFFNUIsbUJBQW1CO1FBQ25CLElBQ0UsSUFBSSxDQUFDLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNO1lBQzFDLElBQUksQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFDcEM7WUFFQSxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDO1lBRXRDLElBQUksQ0FBQyx3QkFBd0I7Z0JBQzNCLElBQUksQ0FBQywyQkFBMkIsQ0FBQztZQUVuQyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUVkLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVztvQkFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQ3JDLENBQUMsRUFDRCxJQUFJLENBQUMsd0JBQXdCLENBQzlCLENBQUM7Z0JBRUosSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7Z0JBRXRDLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxLQUFLLENBQUM7WUFFekMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBRVIsT0FBTztTQUNSO1FBRUQsb0JBQW9CO1FBQ3BCLE1BQU0sWUFBWSxHQUNoQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsaUJBQWlCLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDO1FBRXBELElBQ0UsQ0FBQyxJQUFJLENBQUMsd0JBQXdCO1lBQzlCLElBQUksQ0FBQyw2QkFBNkI7WUFDbEMsWUFBWSxHQUFHLElBQUksQ0FBQyw2QkFBNkIsRUFDakQ7WUFFQSxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDO1lBRXRDLElBQUksQ0FBQyxpQkFBaUI7Z0JBQ3BCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixJQUFJLENBQUMsQ0FBQztvQkFDN0IsSUFBSSxDQUFDLDJCQUEyQixDQUFDO1lBRW5DLElBQUksQ0FBQyx3QkFBd0I7Z0JBQzNCLElBQUksQ0FBQywyQkFBMkIsQ0FBQztZQUVuQyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztTQUN4RDtJQUNILENBQUM7SUFFRCxJQUFJLHdCQUF3QjtRQUMxQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFnQixDQUFDO0lBQ3RFLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxLQUFZO1FBQ2pDLElBQUksQ0FBQywwQkFBMEIsR0FBRyxFQUFFLENBQUM7UUFDckMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXhCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFM0MsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEtBQUssQ0FBQztRQUVyQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVc7WUFDekIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FDN0MsQ0FBQyxFQUNELElBQUksQ0FBQywyQkFBMkIsQ0FDakMsQ0FBQztRQUVKLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUM7UUFDakUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQztJQUM3QixDQUFDOytHQXZxQlUsdUJBQXVCLDhDQStCeEIsZUFBZTttR0EvQmQsdUJBQXVCLHFKQWVBLFVBQVUsNkJDNUI5QyxzdExBMkdNOzs0RkQ5Rk8sdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLHFCQUFxQjs7MEJBbUM1QixNQUFNOzJCQUFDLGVBQWU7NEpBaEJ1QixjQUFjO3NCQUE3RCxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3QsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBGb3JtQXJyYXksIFZhbGlkYXRvcnMsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmluYWxpemUsIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJ1xuaW1wb3J0IHsgZm9ya0pvaW4sIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBTaGFyZWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbW9kdWxlcy9zaGFyZWQvc2VydmljZXMvc2hhcmVkLnNlcnZpY2UnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWFkZC1kZXNpZ25hdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9hZGQtZGVzaWduYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hZGQtZGVzaWduYXRpb24uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBBZGREZXNpZ25hdGlvbkNvbXBvbmVudCB7XG4gIGRlc2lnbmF0aW9uRm9ybTogRm9ybUdyb3VwO1xuICBtYXhGaWxlU2l6ZU1CID0gMjU7XG4gIGFsbG93ZWRUeXBlcyA9IFtcbiAgICAnYXBwbGljYXRpb24vcGRmJyxcbiAgICAnYXBwbGljYXRpb24vbXN3b3JkJyxcbiAgICAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnLFxuICAgICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwnLFxuICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCcsXG4gICAgJ3RleHQvcGxhaW4nXG4gIF07XG4gIHVwbG9hZEVycm9yOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgdXBsb2FkZWRGaWxlOiBGaWxlIHwgbnVsbCA9IG51bGw7XG4gIGNicFBsYW5GaW5hbE9iajogYW55XG4gIGxvYWRpbmcgPSBmYWxzZVxuICBAVmlld0NoaWxkKCdkZXNpZ25hdGlvbicsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBkZXNpZ25hdGlvblJlZj86IEVsZW1lbnRSZWZcbiAgZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUgPSBmYWxzZVxuICBpc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zID0gZmFsc2U7XG4gIGRlc2lnbmF0aW9uT2Zmc2V0ID0gMFxuICBvZGNzRGVzaWduYXRpb25Db3VudCA9IDBcbiAgZGVmYXVsdFNlYXJjaERlc2lnbmF0aW9uQ291bnQgPSAwXG4gIGRlc2lnbmF0aW9uTGlzdExvYWRDb3VudCA9IDUwXG4gIGRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudCA9IDUwXG4gIG5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IGZhbHNlXG4gIGRlc2lnbmF0aW9uU2VhcmNoVGV4dCA9ICcnXG4gIGRlc2lnbmF0aW9uSW5pdEluUHJvZ3Jlc3MgPSBmYWxzZVxuICBzY3JvbGxMaXN0ZW5lckF0dGFjaGVkID0gZmFsc2VcbiAgbWFzdGVyRGF0YTogYW55ID0ge31cbiAgc2VhcmNoRGVzaWduYXRpb25Mb2FkQ291bnQgPSA1MFxuICBtYXRjaGVkRGVzaWduYXRpb25JZHMgPSBbXVxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8QWRkRGVzaWduYXRpb25Db21wb25lbnQ+LFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogYW55LFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgc2hhcmVkU2VydmljZTogU2hhcmVkU2VydmljZSxcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0Jhcikge1xuXG4gICAgdGhpcy5tYXN0ZXJEYXRhID0ge1xuICAgICAgZGVzaWduYXRpb25CYWNrdXA6IFtdLFxuICAgICAgZGVzaWduYXRpb25GaWx0ZXJlZDogW10sIC8vIGZpbHRlcmVkIHNlYXJjaCByZXN1bHRzXG4gICAgfTtcblxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc29sZS5sb2coJ3RoaXMubWF0Y2hlZF9yb2xlX21hcHBpbmdzJywgdGhpcy5kYXRhPy5tYXRjaGVkX3JvbGVfbWFwcGluZ3MpXG4gICAgdGhpcy5tYXRjaGVkRGVzaWduYXRpb25JZHMgPSB0aGlzLmRhdGE/Lm1hdGNoZWRfcm9sZV9tYXBwaW5ncz8ubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0/Lmlnb3RfZGVzaWduYXRpb25faWQpIHx8IFtdXG4gICAgdGhpcy5pbml0aWFsaXplRm9ybSgpO1xuXG4gICBjb25zdCBzZWFyY2hDb250cm9sID0gdGhpcy5kZXNpZ25hdGlvbkZvcm0uZ2V0KCdzZWFyY2hEZXNpZ25hdGlvbicpO1xuXG5pZiAoc2VhcmNoQ29udHJvbCkge1xuICBzZWFyY2hDb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgIC5waXBlKFxuICAgICAgZGVib3VuY2VUaW1lKDMwMCksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgKVxuICAgIC5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG5cbiAgICAgIGNvbnN0IHR4dCA9IHJlcz8udG9TdHJpbmcoKT8udHJpbSgpID8/ICcnO1xuXG4gICAgICB0aGlzLmRlc2lnbmF0aW9uU2VhcmNoVGV4dCA9IHR4dDtcblxuICAgICAgLy8gUkVTRVQgU0VBUkNIIFBBR0lOQVRJT05cbiAgICAgIHRoaXMuc2VhcmNoRGVzaWduYXRpb25Mb2FkQ291bnQgPSA1MDtcblxuICAgICAgaWYgKHR4dD8ubGVuZ3RoKSB7XG5cbiAgICAgICAgdGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IHRydWU7XG5cbiAgICAgICAgLy8gQVBJIFNFQVJDSCBPTkxZXG4gICAgICAgIHRoaXMuZ2V0RGVzaWduYXRpb24odHh0LCAwKTtcblxuICAgICAgfSBlbHNlIHtcblxuICAgICAgICB0aGlzLmRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uID1cbiAgICAgICAgICAodGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwIHx8IFtdKS5zbGljZShcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudFxuICAgICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQgPVxuICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50O1xuXG4gICAgICAgIHRoaXMuZGVzaWduYXRpb25PZmZzZXQgPSAwO1xuXG4gICAgICAgIHRoaXMuY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KCk7XG4gICAgICB9XG4gICAgfSk7XG59XG5cblxuICAgaWYgKFxuICAhdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwIHx8XG4gIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cC5sZW5ndGggPT09IDBcbikge1xuICB0aGlzLmdldERlc2lnbmF0aW9uU2FmZSgpO1xufVxuXG4gIH1cblxuICBwcml2YXRlIGdldERlc2lnbmF0aW9uU2FmZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kZXNpZ25hdGlvbkluaXRJblByb2dyZXNzIHx8IHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuZGVzaWduYXRpb25Jbml0SW5Qcm9ncmVzcyA9IHRydWVcbiAgICB0aGlzLmdldERlc2lnbmF0aW9uKClcbiAgfVxuXG4gIGluaXRpYWxpemVGb3JtKCkge1xuICAgIHRoaXMuZGVzaWduYXRpb25Gb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBkZXNpZ25hdGlvbl9uYW1lOiBbW10sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgaW5zdHJ1Y3Rpb246IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICB1cGxvYWREb2M6IFtudWxsLCBbXV0sXG4gICAgICBzZWFyY2hEZXNpZ25hdGlvbjogWycnXSxcbiAgICB9KTtcbiAgICB0aGlzLmRlc2lnbmF0aW9uRm9ybS5nZXQoJ2Rlc2lnbmF0aW9uX25hbWUnKT8udmFsdWVDaGFuZ2VzXG4gIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgIHRoaXMuY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KCk7XG4gIH0pO1xuICB9XG5cbiAgb25GaWxlQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBmaWxlOiBGaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xuXG4gICAgaWYgKCFmaWxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgZmlsZSBzaXplXG4gICAgY29uc3QgbWF4Qnl0ZXMgPSB0aGlzLm1heEZpbGVTaXplTUIgKiAxMDI0ICogMTAyNDtcbiAgICBpZiAoZmlsZS5zaXplID4gbWF4Qnl0ZXMpIHtcbiAgICAgIHRoaXMudXBsb2FkRXJyb3IgPSBgRmlsZSBleGNlZWRzIG1heGltdW0gc2l6ZSBvZiAke3RoaXMubWF4RmlsZVNpemVNQn1NQmA7XG4gICAgICB0aGlzLmRlc2lnbmF0aW9uRm9ybS5nZXQoJ3VwbG9hZERvYycpPy5zZXRFcnJvcnMoeyBtYXhTaXplOiB0cnVlIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGZpbGUgdHlwZVxuICAgIGlmICghdGhpcy5hbGxvd2VkVHlwZXMuaW5jbHVkZXMoZmlsZS50eXBlKSkge1xuICAgICAgdGhpcy51cGxvYWRFcnJvciA9IGBJbnZhbGlkIGZpbGUgdHlwZS4gQWxsb3dlZDogUERGLCBXb3JkLCBFeGNlbCwgVFhUYDtcbiAgICAgIHRoaXMuZGVzaWduYXRpb25Gb3JtLmdldCgndXBsb2FkRG9jJyk/LnNldEVycm9ycyh7IGZpbGVUeXBlOiB0cnVlIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudXBsb2FkZWRGaWxlID0gZmlsZTtcbiAgICB0aGlzLnVwbG9hZEVycm9yID0gbnVsbDtcbiAgICB0aGlzLmRlc2lnbmF0aW9uRm9ybS5wYXRjaFZhbHVlKHsgdXBsb2FkRG9jOiBmaWxlIH0pO1xuICAgIHRoaXMuZGVzaWduYXRpb25Gb3JtLmdldCgndXBsb2FkRG9jJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfVxuXG4gIGNhbmNlbEZvcm0oKSB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKVxuICB9XG5cbiAgLy8gc2F2ZURlc2lnbmF0aW9uKCkge1xuICAvLyAgIHRoaXMubG9hZGluZyA9IHRydWVcbiAgLy8gICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAvLyAgIGZvcm1EYXRhLmFwcGVuZCgnZGVzaWduYXRpb25OYW1lJywgdGhpcy5kZXNpZ25hdGlvbkZvcm0uZ2V0KCdkZXNpZ25hdGlvbk5hbWUnKT8udmFsdWUpO1xuICAvLyAgIGZvcm1EYXRhLmFwcGVuZCgncm9sZURldGFpbHMnLCB0aGlzLmRlc2lnbmF0aW9uRm9ybS5nZXQoJ3JvbGVEZXRhaWxzJyk/LnZhbHVlKTtcbiAgLy8gICBpZiAodGhpcy51cGxvYWRlZEZpbGUpIHtcbiAgLy8gICAgIGZvcm1EYXRhLmFwcGVuZCgndXBsb2FkRG9jJywgdGhpcy51cGxvYWRlZEZpbGUpO1xuICAvLyAgIH1cbiAgLy8gICB0aGlzLmNicFBsYW5GaW5hbE9iaiA9IHRoaXMuc2hhcmVkU2VydmljZS5nZXRDQlBQbGFuTG9jYWxTdG9yYWdlKClcbiAgLy8gICBjb25zb2xlLmxvZygndGhpcy5kZXNpZ25hdGlvbkZvcm0nLCB0aGlzLmRlc2lnbmF0aW9uRm9ybSlcbiAgLy8gICBsZXQgcmVxOiBhbnkgPSB7XG4gIC8vICAgICBcInN0YXRlX2NlbnRlcl9pZFwiOiB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLm1pbmlzdHJ5LmlkZW50aWZpZXIsXG4gIC8vICAgICBcInN0YXRlX2NlbnRlcl9uYW1lXCI6IHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmoubWluaXN0cnkub3JnTmFtZSxcbiAgLy8gICAgIC8vIFwiZGVwYXJ0bWVudF9pZFwiOiBcIlwiLFxuICAvLyAgICAgXCJkZXNpZ25hdGlvbl9uYW1lXCI6IHRoaXMuZGVzaWduYXRpb25Gb3JtLnZhbHVlLmRlc2lnbmF0aW9uX25hbWUsXG4gIC8vICAgICBcImluc3RydWN0aW9uXCI6IHRoaXMuZGVzaWduYXRpb25Gb3JtLnZhbHVlLmluc3RydWN0aW9uLFxuICAvLyAgIH1cbiAgLy8gICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iaj8ubWluaXN0cnk/LnNiT3JnVHlwZSA9PT0gJ3N0YXRlJyAmJiB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRfbmFtZSkge1xuICAvLyAgICAgcmVxWydkZXBhcnRtZW50X2lkJ10gPSB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRzXG4gIC8vICAgICByZXFbJ2RlcGFydG1lbnRfbmFtZSddID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50X25hbWVcbiAgLy8gICB9XG4gIC8vICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmo/Lm1pbmlzdHJ5Py5zYk9yZ1R5cGUgPT09ICdtaW5pc3RyeScgJiYgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50X25hbWUpIHtcbiAgLy8gICAgIHJlcVsnZGVwYXJ0bWVudF9pZCddID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50c1xuICAvLyAgICAgcmVxWydkZXBhcnRtZW50X25hbWUnXSA9IHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmouZGVwYXJ0bWVudF9uYW1lXG4gIC8vICAgfVxuXG4gIC8vICAgY29uc29sZS5sb2coJ3JlcScsIHJlcSlcbiAgLy8gICB0aGlzLnNoYXJlZFNlcnZpY2UuYWRkRGVzaWduYXRpb24ocmVxKS5zdWJzY3JpYmUoe1xuICAvLyAgICAgbmV4dDogKF9yZXMpID0+IHtcbiAgLy8gICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgLy8gICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdEZXNpZ25hdGlvbiBBZGRlZCBTdWNjZXNzZnVsbHknLCAnWCcsIHtcbiAgLy8gICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgLy8gICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLXN1Y2Nlc3MnXVxuICAvLyAgICAgICB9KTtcbiAgLy8gICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoJ3NhdmVkJylcbiAgLy8gICAgIH0sXG4gIC8vICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gIC8vICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gIC8vICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignRmFpbGVkIHRvIGFkZCBkZXNpZ25hdGlvbi4gUGxlYXNlIHRyeSBhZ2Fpbi4nLCAnWCcsIHtcbiAgLy8gICAgICAgICBkdXJhdGlvbjogNTAwMCxcbiAgLy8gICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ11cbiAgLy8gICAgICAgfSk7XG4gIC8vICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGFkZGluZyBkZXNpZ25hdGlvbjonLCBlcnJvcik7XG4gIC8vICAgICB9XG4gIC8vICAgfSlcbiAgLy8gfVxuXG5cblxuICBzYXZlRGVzaWduYXRpb24oKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWREZXNpZ25hdGlvbnM6IHN0cmluZ1tdID0gdGhpcy5kZXNpZ25hdGlvbkZvcm0uZ2V0KCdkZXNpZ25hdGlvbl9uYW1lJyk/LnZhbHVlIHx8IFtdO1xuXG4gICAgaWYgKCFzZWxlY3RlZERlc2lnbmF0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbignUGxlYXNlIHNlbGVjdCBhdCBsZWFzdCBvbmUgZGVzaWduYXRpb24nLCAnWCcsIHsgZHVyYXRpb246IDMwMDAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcblxuICAgIGNvbnN0IGJhc2VPYmogPSB7XG4gICAgICBzdGF0ZV9jZW50ZXJfaWQ6IHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmoubWluaXN0cnkuaWRlbnRpZmllcixcbiAgICAgIHN0YXRlX2NlbnRlcl9uYW1lOiB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLm1pbmlzdHJ5Lm9yZ05hbWUsXG4gICAgICBpbnN0cnVjdGlvbjogdGhpcy5kZXNpZ25hdGlvbkZvcm0udmFsdWUuaW5zdHJ1Y3Rpb24sXG4gICAgfTtcblxuICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqPy5taW5pc3RyeT8uc2JPcmdUeXBlID09PSAnc3RhdGUnICYmIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmouZGVwYXJ0bWVudF9uYW1lKSB7XG4gICAgICBiYXNlT2JqWydkZXBhcnRtZW50X2lkJ10gPSB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRzO1xuICAgICAgYmFzZU9ialsnZGVwYXJ0bWVudF9uYW1lJ10gPSB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRfbmFtZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iaj8ubWluaXN0cnk/LnNiT3JnVHlwZSA9PT0gJ21pbmlzdHJ5JyAmJiB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRfbmFtZSkge1xuICAgICAgYmFzZU9ialsnZGVwYXJ0bWVudF9pZCddID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50cztcbiAgICAgIGJhc2VPYmpbJ2RlcGFydG1lbnRfbmFtZSddID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50X25hbWU7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGFuIGFycmF5IG9mIG9ic2VydmFibGVzLCBvbmUgcGVyIGRlc2lnbmF0aW9uXG4gICAgY29uc3QgYXBpQ2FsbHMgPSBzZWxlY3RlZERlc2lnbmF0aW9ucy5tYXAoZGVzaWduYXRpb25OYW1lID0+IHtcbiAgICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgICAgLi4uYmFzZU9iaixcbiAgICAgICAgZGVzaWduYXRpb25fbmFtZTogZGVzaWduYXRpb25OYW1lLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHRoaXMuc2hhcmVkU2VydmljZS5hZGREZXNpZ25hdGlvbihyZXEpLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBhZGQgZGVzaWduYXRpb246ICR7ZGVzaWduYXRpb25OYW1lfWAsIGVycm9yKTtcbiAgICAgICAgICAvLyBSZXR1cm4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGFuIGVycm9yIG9iamVjdCBidXQgZG9lcyBub3QgYnJlYWsgZm9ya0pvaW5cbiAgICAgICAgICByZXR1cm4gb2YoeyBlcnJvcjogdHJ1ZSwgZGVzaWduYXRpb246IGRlc2lnbmF0aW9uTmFtZSB9KTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAvLyBXYWl0IGZvciBhbGwgQVBJIGNhbGxzIHRvIGNvbXBsZXRlXG4gICAgZm9ya0pvaW4oYXBpQ2FsbHMpLnN1YnNjcmliZShyZXN1bHRzID0+IHtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAvLyBDaGVjayBpZiBhbnkgY2FsbCBmYWlsZWRcbiAgICAgIGNvbnN0IGZhaWxlZCA9IHJlc3VsdHMuZmlsdGVyKHJlcyA9PiByZXM/LmVycm9yKTtcblxuICAgICAgaWYgKGZhaWxlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGZhaWxlZE5hbWVzID0gZmFpbGVkLm1hcChmID0+IGYuZGVzaWduYXRpb24pLmpvaW4oJywgJyk7XG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihgRmFpbGVkIHRvIGFkZCBkZXNpZ25hdGlvbnM6ICR7ZmFpbGVkTmFtZXN9YCwgJ1gnLCB7XG4gICAgICAgICAgZHVyYXRpb246IDUwMDAsXG4gICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdBbGwgZGVzaWduYXRpb25zIGFkZGVkIHN1Y2Nlc3NmdWxseScsICdYJywge1xuICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItc3VjY2VzcyddXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgnc2F2ZWQnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNsb3NlRGlhbG9nKCkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKClcbiAgfVxuXG4gIGdldERlc2lnbmF0aW9uKHNlYXJjaFRleHQ/OiBzdHJpbmcsIG9mZnNldD86IG51bWJlcik6IHZvaWQge1xuXG4gICAgLy8gY2xlYXIgYW55IHByZXZpb3VzIGRlYnVnIGhvb2tzXG4gICAgaWYgKCFzZWFyY2hUZXh0IHx8IHNlYXJjaFRleHQ/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gbm9vcFxuICAgIH1cblxuICAgIGNvbnN0IHJlcU9mZnNldCA9ICh0eXBlb2Ygb2Zmc2V0ID09PSAnbnVtYmVyJykgPyBvZmZzZXQgOiB0aGlzLmRlc2lnbmF0aW9uT2Zmc2V0XG4gICAgbGV0IHJlcUxpbWl0ID0gdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnRcbiAgICBjb25zdCBwYWdlSW5kZXggPSByZXFMaW1pdCA+IDAgPyBNYXRoLmZsb29yKHJlcU9mZnNldCAvIHJlcUxpbWl0KSA6IDBcbiAgICAvLyBpZiB3ZSdyZSByZXF1ZXN0aW5nIGZyb20gZmlyc3QgcGFnZSwgY2xlYXIgdGhlIG5vLW1vcmUtZGF0YSBndWFyZFxuICAgIGlmIChwYWdlSW5kZXggPT09IDApIHtcbiAgICAgIHRoaXMubm9Nb3JlTGVnYWN5RGVzaWduYXRpb25zID0gZmFsc2VcbiAgICAgIHJlcUxpbWl0ID0gNTBcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdEJvZHk6IGFueSA9IHtcbiAgICAgIGZpbHRlckNyaXRlcmlhTWFwOiB7XG4gICAgICAgIHN0YXR1czogJ0FjdGl2ZSdcbiAgICAgIH0sXG4gICAgICByZXF1ZXN0ZWRGaWVsZHM6IFtdLFxuICAgICAgcGFnZU51bWJlcjogcGFnZUluZGV4LFxuICAgICAgcGFnZVNpemU6IHJlcUxpbWl0LFxuICAgIH1cbiAgICBpZiAoc2VhcmNoVGV4dD8ubGVuZ3RoKSB7XG4gICAgICByZXF1ZXN0Qm9keVsnc2VhcmNoU3RyaW5nJ10gPSBzZWFyY2hUZXh0XG4gICAgICAvLyB3aGVuIHNlYXJjaGluZywgc3RhcnQgZnJvbSBmaXJzdCBwYWdlXG4gICAgICByZXF1ZXN0Qm9keS5wYWdlTnVtYmVyID0gMFxuICAgICAgLy8gYWxsb3cgbGFyZ2VyIHBhZ2UgZm9yIHNlYXJjaCBpZiBuZWVkZWRcbiAgICAgIHJlcXVlc3RCb2R5LnBhZ2VTaXplID0gcGFnZUluZGV4ID09PSAwID8gNTAgOiB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudFxuICAgICAgLy8gcmVzZXQgZ3VhcmQgd2hlbiBwZXJmb3JtaW5nIGEgZnJlc2ggc2VhcmNoXG4gICAgICB0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IGZhbHNlXG4gICAgfVxuXG4gICAgLy8gaW5kaWNhdGUgbG9hZGluZyBzdGF0ZSBzbyBzY3JvbGwgaGFuZGxlcnMgZG9uJ3QgdHJpZ2dlciBwYXJhbGxlbCBjYWxsc1xuICAgIHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IHRydWVcblxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWFyY2hQdWJsaWNEZXNpZ25hdGlvbihyZXF1ZXN0Qm9keSkucGlwZShmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSBmYWxzZVxuICAgICAgdGhpcy5kZXNpZ25hdGlvbkluaXRJblByb2dyZXNzID0gZmFsc2VcbiAgICB9KSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcblxuICBjb25zdCBjb250ZW50ID0gXy5nZXQocmVzLCAncmVzdWx0LnJlc3VsdC5kYXRhJywgW10pO1xuXG4gIGNvbnN0IG1hdGNoZWRJZHMgPSBuZXcgU2V0KHRoaXMubWF0Y2hlZERlc2lnbmF0aW9uSWRzKTtcblxuICBjb25zdCBtYXBwZWQgPSBjb250ZW50XG4gIC5maWx0ZXIoKGl0ZW06IGFueSkgPT4gIW1hdGNoZWRJZHMuaGFzKGl0ZW0/LmlkKSlcbiAgLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgIGlkOiBpdGVtPy5pZCxcbiAgICBuYW1lOiBpdGVtPy5kZXNpZ25hdGlvbiB8fCAnJyxcbiAgICBzdGF0dXM6IGl0ZW0/LnN0YXR1cyB8fCAnQWN0aXZlJyxcbiAgfSkpO1xuXG4gIGNvbnN0IHRvdGFsID0gXy5nZXQoXG4gICAgcmVzLFxuICAgICdyZXN1bHQucmVzdWx0LnRvdGFsY291bnQnLFxuICAgIF8uZ2V0KFxuICAgICAgcmVzLFxuICAgICAgJ3Jlc3VsdC5yZXN1bHQuZGF0YS50b3RhbENvdW50JyxcbiAgICAgIF8uZ2V0KHJlcywgJ3Jlc3VsdC5yZXN1bHQudG90YWxDb3VudCcsIDApXG4gICAgKVxuICApO1xuXG4gIHRoaXMuZGVmYXVsdFNlYXJjaERlc2lnbmF0aW9uQ291bnQgPSB0b3RhbDtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFNFQVJDSCBNT0RFXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBpZiAoc2VhcmNoVGV4dD8ubGVuZ3RoKSB7XG5cbiAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25GaWx0ZXJlZCA9IG1hcHBlZDtcblxuICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbiA9XG4gICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25GaWx0ZXJlZC5zbGljZShcbiAgICAgICAgMCxcbiAgICAgICAgdGhpcy5zZWFyY2hEZXNpZ25hdGlvbkxvYWRDb3VudFxuICAgICAgKTtcblxuICAgIHRoaXMuY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KCk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIE5PUk1BTCBNT0RFXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBpZiAoIXRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb25CYWNrdXAnXSB8fCByZXFPZmZzZXQgPT09IDApIHtcblxuICAgIHRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb25CYWNrdXAnXSA9IG1hcHBlZDtcblxuICB9IGVsc2Uge1xuXG4gICAgY29uc3QgY29tYmluZWQgPVxuICAgICAgKHRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb25CYWNrdXAnXSB8fCBbXSkuY29uY2F0KG1hcHBlZCk7XG5cbiAgICB0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10gPSBfLnVuaXFCeShcbiAgICAgIGNvbWJpbmVkLFxuICAgICAgKGl0OiBhbnkpID0+IChpdD8ubmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKVxuICAgICk7XG4gIH1cblxuICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPVxuICAgICh0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgfHwgW10pLnNsaWNlKFxuICAgICAgMCxcbiAgICAgIHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50XG4gICAgKTtcblxuICAvLyBzZWxlY3RlZCB2YWx1ZSBwcmVzZXJ2ZVxuICBjb25zdCBkZXNpZ25hdGlvbkNvbnRyb2wgPVxuICAgIHRoaXMuZGVzaWduYXRpb25Gb3JtLmdldCgnZGVzaWduYXRpb25fbmFtZScpO1xuXG4gIGlmIChkZXNpZ25hdGlvbkNvbnRyb2wpIHtcblxuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZXMgPVxuICAgICAgZGVzaWduYXRpb25Db250cm9sLnZhbHVlIHx8IFtdO1xuXG4gICAgY29uc3QgdmFsaWRWYWx1ZXMgPSBjdXJyZW50VmFsdWVzLmZpbHRlcihcbiAgICAgICh2YWx1ZTogc3RyaW5nKSA9PlxuICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAuc29tZShcbiAgICAgICAgICAoaXRlbTogYW55KSA9PiBpdGVtPy5uYW1lID09PSB2YWx1ZVxuICAgICAgICApXG4gICAgKTtcblxuICAgIGlmICh2YWxpZFZhbHVlcy5sZW5ndGggIT09IGN1cnJlbnRWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICBkZXNpZ25hdGlvbkNvbnRyb2wuc2V0VmFsdWUodmFsaWRWYWx1ZXMpO1xuICAgIH1cbiAgfVxuXG4gIC8vIG5vIG1vcmUgZGF0YVxuICBpZiAoIW1hcHBlZCB8fCBtYXBwZWQubGVuZ3RoID09PSAwKSB7XG4gICAgdGhpcy5ub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgPSB0cnVlO1xuICB9XG5cbiAgaWYgKFxuICAgIHRoaXMuZGVmYXVsdFNlYXJjaERlc2lnbmF0aW9uQ291bnQgJiZcbiAgICAodGhpcy5tYXN0ZXJEYXRhWydkZXNpZ25hdGlvbkJhY2t1cCddIHx8IFtdKS5sZW5ndGggPj1cbiAgICB0aGlzLmRlZmF1bHRTZWFyY2hEZXNpZ25hdGlvbkNvdW50XG4gICkge1xuICAgIHRoaXMubm9Nb3JlTGVnYWN5RGVzaWduYXRpb25zID0gdHJ1ZTtcbiAgfVxuXG4gIHRoaXMuY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KCk7XG59LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIC8vIFN0b3AgZnVydGhlciBhdXRvbWF0aWMgY2FsbHMgb24gcmVwZWF0ZWQgZXJyb3JzIHRvIGF2b2lkIHRpZ2h0IGxvb3BzXG4gICAgICAgICAgLy8gbG9hZGluZyBmbGFnIGNsZWFyZWQgaW4gZmluYWxpemUoKVxuICAgICAgICAgIHRoaXMubm9Nb3JlTGVnYWN5RGVzaWduYXRpb25zID0gdHJ1ZVxuICAgICAgICAgIC8vIHRoaXMubWF0U25hY2tCYXIub3BlbignVW5hYmxlIHRvIGZldGNoIGRlc2lnbmF0aW9uIGRldGFpbHMsIHBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIhJylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgfVxuICAvLyBGSVggMjogQWxzbyBpbmplY3Qgc2VsZWN0ZWQgaXRlbXMgaW50byBkZXNpZ25hdGlvbkJhY2t1cFxuY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KCkge1xuXG4gIGNvbnN0IHNlbGVjdGVkRGVzaWduYXRpb25zOiBzdHJpbmdbXSA9XG4gICAgdGhpcy5kZXNpZ25hdGlvbkZvcm0uZ2V0KCdkZXNpZ25hdGlvbl9uYW1lJyk/LnZhbHVlIHx8IFtdO1xuXG4gIGlmICghdGhpcy5tYXN0ZXJEYXRhPy5kZXNpZ25hdGlvbikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIENyZWF0ZSBzZWxlY3RlZCBlbnRyaWVzXG4gIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSBzZWxlY3RlZERlc2lnbmF0aW9ucy5tYXAoKG5hbWU6IHN0cmluZykgPT4gKHtcbiAgICBuYW1lLFxuICAgIHN0YXR1czogJ0FjdGl2ZSdcbiAgfSkpO1xuXG4gIC8vIFJlbW92ZSBzZWxlY3RlZCBpdGVtcyBmcm9tIGN1cnJlbnQgbGlzdHNcbiAgY29uc3QgcmVtYWluaW5nVmlzaWJsZSA9ICh0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gfHwgW10pLmZpbHRlcihcbiAgICAoaXRlbTogYW55KSA9PlxuICAgICAgIXNlbGVjdGVkRGVzaWduYXRpb25zLnNvbWUoXG4gICAgICAgIHNlbGVjdGVkID0+IHNlbGVjdGVkLnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0/Lm5hbWU/LnRvTG93ZXJDYXNlKClcbiAgICAgIClcbiAgKTtcblxuICBjb25zdCByZW1haW5pbmdCYWNrdXAgPSAodGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwIHx8IFtdKS5maWx0ZXIoXG4gICAgKGl0ZW06IGFueSkgPT5cbiAgICAgICFzZWxlY3RlZERlc2lnbmF0aW9ucy5zb21lKFxuICAgICAgICBzZWxlY3RlZCA9PiBzZWxlY3RlZC50b0xvd2VyQ2FzZSgpID09PSBpdGVtPy5uYW1lPy50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICk7XG5cbiAgLy8gUHV0IHNlbGVjdGVkIGl0ZW1zIG9uIHRvcFxuICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPSBfLnVuaXFCeShcbiAgICBbLi4uc2VsZWN0ZWRJdGVtcywgLi4ucmVtYWluaW5nVmlzaWJsZV0sXG4gICAgKGl0ZW06IGFueSkgPT4gaXRlbT8ubmFtZT8udG9Mb3dlckNhc2UoKVxuICApO1xuXG4gIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cCA9IF8udW5pcUJ5KFxuICAgIFsuLi5zZWxlY3RlZEl0ZW1zLCAuLi5yZW1haW5pbmdCYWNrdXBdLFxuICAgIChpdGVtOiBhbnkpID0+IGl0ZW0/Lm5hbWU/LnRvTG93ZXJDYXNlKClcbiAgKTtcbn1cbiAgb25EZXNpZ25hdGlvbkRyb3Bkb3duQ2xvc2VkKCk6IHZvaWQge1xuICAgIC8vIEtlZXAgdGhlIGRlc2lnbmF0aW9uIHZhbHVlIGJ1dCBjbGVhciB0aGUgc2VhcmNoIGlucHV0XG4gICAgY29uc3QgY3VycmVudERlc2lnbmF0aW9uID0gdGhpcy5kZXNpZ25hdGlvbkZvcm0uZ2V0KCdkZXNpZ25hdGlvbl9uYW1lJykhLnZhbHVlXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5kZXNpZ25hdGlvbkZvcm0uZ2V0KCdzZWFyY2hEZXNpZ25hdGlvbicpKSB7XG4gICAgICAgIHRoaXMuZGVzaWduYXRpb25Gb3JtLmdldCgnc2VhcmNoRGVzaWduYXRpb24nKSEuc2V0VmFsdWUoJycpXG4gICAgICB9XG4gICAgICAvLyBFbnN1cmUgdGhlIGRlc2lnbmF0aW9uIHZhbHVlIHJlbWFpbnMgc2VsZWN0ZWRcbiAgICAgIGlmIChjdXJyZW50RGVzaWduYXRpb24pIHtcbiAgICAgICAgY29uc3QgZGVzaWduYXRpb25Db250cm9sID0gdGhpcy5kZXNpZ25hdGlvbkZvcm0uZ2V0KCdkZXNpZ25hdGlvbl9uYW1lJyk7XG4gICAgICAgIGlmIChkZXNpZ25hdGlvbkNvbnRyb2wpIHtcbiAgICAgICAgICBkZXNpZ25hdGlvbkNvbnRyb2wuc2V0VmFsdWUoY3VycmVudERlc2lnbmF0aW9uKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgMTAwKVxuICB9XG5cbiAgLy8gZGVzaWduYXRpb25TZWFyY2goZXZ0OiBhbnkpIHtcbiAgLy8gICBjb25zdCBzZWFyY2hUZXh0ID0gZXZ0Py50YXJnZXQ/LnZhbHVlXG4gIC8vICAgY29uc3QgdHh0ID0gKHNlYXJjaFRleHQgfHwgJycpLnRvU3RyaW5nKCkudHJpbSgpXG4gIC8vICAgaWYgKHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucykgcmV0dXJuXG5cbiAgLy8gICB0aGlzLmRlc2lnbmF0aW9uU2VhcmNoVGV4dCA9IHR4dFxuICAvLyAgIGlmICh0eHQ/Lmxlbmd0aCkge1xuICAvLyAgICAgdGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IHRydWVcbiAgLy8gICAgIHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IHRydWVcbiAgLy8gICAgIHRoaXMuZ2V0RGVzaWduYXRpb24odHh0LCAwKVxuICAvLyAgIH0gZWxzZSBpZiAodGhpcy5tYXN0ZXJEYXRhICYmIHRoaXMubWFzdGVyRGF0YT8uZGVzaWduYXRpb25CYWNrdXApIHtcbiAgLy8gICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbiA9IHRoaXMubWFzdGVyRGF0YT8uZGVzaWduYXRpb25CYWNrdXAuc2xpY2UoMCwgdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnQpXG4gIC8vICAgICB0aGlzLmRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gZmFsc2VcbiAgLy8gICAgIHRoaXMuY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KClcbiAgLy8gICB9XG4gIC8vIH1cbiBzZXR1cFNjcm9sbExpc3RlbmVyKG9wZW5lZDogYm9vbGVhbik6IHZvaWQge1xuXG4gaWYgKCFvcGVuZWQpIHtcbiAgICB0aGlzLnNjcm9sbExpc3RlbmVyQXR0YWNoZWQgPSBmYWxzZTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodGhpcy5zY3JvbGxMaXN0ZW5lckF0dGFjaGVkKSByZXR1cm47XG4gIHRoaXMuc2Nyb2xsTGlzdGVuZXJBdHRhY2hlZCA9IHRydWU7XG4gIHRoaXMuZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUgPSBmYWxzZTtcblxuICAvLyDinIUgT25seSByZXNldCBwYWdpbmF0aW9uIGlmIHdlIGhhdmUgbm8gZGF0YSB5ZXRcbiAgaWYgKCF0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXA/Lmxlbmd0aCkge1xuICAgIHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50ID0gdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnQ7XG4gICAgdGhpcy5kZXNpZ25hdGlvbk9mZnNldCA9IDA7XG4gICAgdGhpcy5nZXREZXNpZ25hdGlvbih1bmRlZmluZWQsIDApO1xuICB9IGVsc2Uge1xuICAgIC8vIOKchSBSZXN0b3JlIGZyb20gYmFja3VwIHdpdGhvdXQgcmVzZXR0aW5nIG9mZnNldFxuICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbiA9IHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cC5zbGljZShcbiAgICAgIDAsIHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50XG4gICAgKTtcbiAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpO1xuICB9XG5cbiAgLy8gZm9jdXMgc2VhcmNoIGlucHV0XG4gIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgY29uc3Qgc2VhcmNoSW5wdXQgPVxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnNlYXJjaC1pbnB1dCcpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG5cbiAgICBpZiAoc2VhcmNoSW5wdXQpIHtcbiAgICAgIHNlYXJjaElucHV0LmZvY3VzKCk7XG4gICAgfVxuXG4gIH0sIDIwMCk7XG5cbiAgLy8gYXR0YWNoIHNjcm9sbFxuICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgIGNvbnN0IHBhbmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICcubWF0LXNlbGVjdC1wYW5lbC5zZWFyY2gtcGFuZWwnXG4gICAgKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgICBpZiAoIXBhbmVsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUkVNT1ZFIE9MRCBMSVNURU5FUlxuICAgIHBhbmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgICAnc2Nyb2xsJyxcbiAgICAgIHRoaXMub25EZXNpZ25hdGlvblNlbGVjdFNjcm9sbCBhcyBhbnlcbiAgICApO1xuXG4gICAgcGFuZWwuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICdzY3JvbGwnLFxuICAgICAgdGhpcy5vbkRlc2lnbmF0aW9uU2VsZWN0U2Nyb2xsLmJpbmQodGhpcyksXG4gICAgICB7IHBhc3NpdmU6IHRydWUgfVxuICAgICk7XG5cbiAgfSwgMzAwKTtcbn1cblxuICBvbkRlc2lnbmF0aW9uU2VsZWN0U2Nyb2xsKGV2ZW50OiBhbnkpOiB2b2lkIHtcblxuICAgIGNvbnN0IGVsZW1lbnQgPSBldmVudD8udGFyZ2V0O1xuXG4gICAgY29uc3QgcmVhY2hlZEJvdHRvbSA9XG4gICAgICBlbGVtZW50LnNjcm9sbFRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0ID49XG4gICAgICBlbGVtZW50LnNjcm9sbEhlaWdodCAtIDU7XG5cbiAgICBpZiAoIXJlYWNoZWRCb3R0b20gfHwgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIFNFQVJDSCBNT0RFXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGlmICh0aGlzLmRlc2lnYW50aW9uRmlsdGVyRW5hYmxlKSB7XG5cbiAgICAgIHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IHRydWU7XG5cbiAgICAgIHRoaXMuc2VhcmNoRGVzaWduYXRpb25Mb2FkQ291bnQgKz0gNTA7XG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbiA9XG4gICAgICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uRmlsdGVyZWQuc2xpY2UoXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgdGhpcy5zZWFyY2hEZXNpZ25hdGlvbkxvYWRDb3VudFxuICAgICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5jaGVja0N1cnJlbnREZXNpZ25hdGlvblByZXNlbnQoKTtcblxuICAgICAgICB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSBmYWxzZTtcblxuICAgICAgfSwgMzAwKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBOT1JNQUwgTU9ERVxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAgIC8vIGxvY2FsIHBhZ2luYXRpb25cbiAgICBpZiAoXG4gICAgICB0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uQmFja3VwPy5sZW5ndGggPlxuICAgICAgdGhpcy5tYXN0ZXJEYXRhPy5kZXNpZ25hdGlvbj8ubGVuZ3RoXG4gICAgKSB7XG5cbiAgICAgIHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IHRydWU7XG5cbiAgICAgIHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50ICs9XG4gICAgICAgIHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50O1xuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPVxuICAgICAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cC5zbGljZShcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudFxuICAgICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5jaGVja0N1cnJlbnREZXNpZ25hdGlvblByZXNlbnQoKTtcblxuICAgICAgICB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSBmYWxzZTtcblxuICAgICAgfSwgMzAwKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHNlcnZlciBwYWdpbmF0aW9uXG4gICAgY29uc3QgbG9hZGVkTGVnYWN5ID1cbiAgICAgICh0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uQmFja3VwIHx8IFtdKS5sZW5ndGg7XG5cbiAgICBpZiAoXG4gICAgICAhdGhpcy5ub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgJiZcbiAgICAgIHRoaXMuZGVmYXVsdFNlYXJjaERlc2lnbmF0aW9uQ291bnQgJiZcbiAgICAgIGxvYWRlZExlZ2FjeSA8IHRoaXMuZGVmYXVsdFNlYXJjaERlc2lnbmF0aW9uQ291bnRcbiAgICApIHtcblxuICAgICAgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zID0gdHJ1ZTtcblxuICAgICAgdGhpcy5kZXNpZ25hdGlvbk9mZnNldCA9XG4gICAgICAgICh0aGlzLmRlc2lnbmF0aW9uT2Zmc2V0IHx8IDApICtcbiAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnQ7XG5cbiAgICAgIHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50ICs9XG4gICAgICAgIHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50O1xuXG4gICAgICB0aGlzLmdldERlc2lnbmF0aW9uKHVuZGVmaW5lZCwgdGhpcy5kZXNpZ25hdGlvbk9mZnNldCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNlYXJjaERlc2lnbmF0aW9uQ29udHJvbCgpOiBGb3JtQ29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuZGVzaWduYXRpb25Gb3JtLmdldCgnc2VhcmNoRGVzaWduYXRpb24nKSBhcyBGb3JtQ29udHJvbDtcbiAgfVxuXG4gIGNsZWFyRGVzaWduYXRpb25TZWFyY2goZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hEZXNpZ25hdGlvbkxvYWRDb3VudCA9IDUwO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgdGhpcy5zZWFyY2hEZXNpZ25hdGlvbkNvbnRyb2wuc2V0VmFsdWUoJycpO1xuXG4gICAgdGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uID1cbiAgICAgICh0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgfHwgW10pLnNsaWNlKFxuICAgICAgICAwLFxuICAgICAgICB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudFxuICAgICAgKTtcblxuICAgIHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50ID0gdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnQ7XG4gICAgdGhpcy5kZXNpZ25hdGlvbk9mZnNldCA9IDA7XG4gIH1cblxuXG59XG4iLCI8ZGl2IGNsYXNzPVwidmlldy1jYnAtcGxhblwiPlxuICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWhlYWRlclwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGluZ1wiPkFkZCBOZXcgRGVzaWduYXRpb248L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImNsb3NlRGlhbG9nKClcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWNvbnRhaW5lclwiIFtmb3JtR3JvdXBdPVwiZGVzaWduYXRpb25Gb3JtXCI+XG4gICAgICAgIDxtYXQtY2FyZCBjbGFzcz1cIm10LTFcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHA+RGVzaWduYXRpb24gTmFtZTwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXIgbXQtNFwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cImRlc2lnbmF0aW9uX25hbWVcIiBwbGFjZWhvbGRlcj1cIkVudGVyIERlc2lnbmF0aW9uXCIgW3ZhbHVlXT1cIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJvcmRlci1yYWRpdXM6IDI1cHg7IGJvcmRlcjogMXB4IHNvbGlkICNjY2M7IHBhZGRpbmc6IDhweCAxMnB4OyB3aWR0aDogMTAwJTtmb250LXNpemU6IDE0cHg7Zm9udC1mYW1pbHk6ICdMYXRvJztcIj4gLS0+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwibWFyZ2luLXRvcC1zIHctZnVsbCByZXF1aXJlZC1zZWxlY3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IG11bHRpcGxlICNwb3NpdGlvbiBmb3JtQ29udHJvbE5hbWU9XCJkZXNpZ25hdGlvbl9uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBkZXNpZ25hdGlvblwiIChjbG9zZWQpPVwib25EZXNpZ25hdGlvbkRyb3Bkb3duQ2xvc2VkKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M9XCJzZWFyY2gtcGFuZWxcIiAob3BlbmVkQ2hhbmdlKT1cInNldHVwU2Nyb2xsTGlzdGVuZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTdGlja3kgc2VhcmNoIGlucHV0IGNvbnRhaW5lciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RpY2t5LXNlYXJjaC1jb250YWluZXJcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtaW5wdXQtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJTZWFyY2ggZGVzaWduYXRpb25cIiBzdHlsZT1cIndpZHRoOjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlYXJjaERlc2lnbmF0aW9uXCIgY2xhc3M9XCJzZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIChrZXl1cCk9XCJkZXNpZ25hdGlvblNlYXJjaCgkZXZlbnQpXCIgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2VhcmNoRGVzaWduYXRpb25Db250cm9sPy52YWx1ZVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsZWFyLWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhckRlc2lnbmF0aW9uU2VhcmNoKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBPcHRpb25zIGxpc3QgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImRlc2lnbmF0aW9uPy5uYW1lXCIgKm5nRm9yPVwibGV0IGRlc2lnbmF0aW9uIG9mIG1hc3RlckRhdGE/LmRlc2lnbmF0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZGVzaWduYXRpb24/Lm5hbWV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIExvYWRpbmcgaW5kaWNhdG9yIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zXCIgY2xhc3M9XCJsb2FkaW5nLWluZGljYXRvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2FkIE1vcmUuLi5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE5vIHJlc3VsdHMgbWVzc2FnZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cIihtYXN0ZXJEYXRhPy5kZXNpZ25hdGlvbik/Lmxlbmd0aCA9PT0gMFwiIGRpc2FibGVkIGNsYXNzPVwibm8tZGF0YS1vcHRpb25cIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNpZ25hdGlvbiBOb3QgRm91bmQuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxtYXQtZXJyb3IgY2xhc3M9XCJ0ZXh0LXhzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRlc2lnbmF0aW9uRm9ybT8uZ2V0KCdkZXNpZ25hdGlvbl9uYW1lJyk/LnRvdWNoZWQgJiYgZGVzaWduYXRpb25Gb3JtPy5nZXQoJ2Rlc2lnbmF0aW9uX25hbWUnKT8uaW52YWxpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIGRlc2lnbmF0aW9uLlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+IC0tPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHA+Um9sZSAmIHJlc3BvbnNpYmlsaXRpZXMgL0FkZGl0aW9uYWwgZGV0YWlsczwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNCBhZGRpdGlvbmFsLWRldGFpbHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiY3VzdG9tLXRleHRhcmVhXCIgZm9ybUNvbnRyb2xOYW1lPVwiaW5zdHJ1Y3Rpb25cIiByb3dzPVwiNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkFkZCBJbnN0cnVjdGlvbnNcIiBbdmFsdWVdPVwiXCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwibXQtMiBzZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPlVwbG9hZCBEb2N1bWVudCAoUERGL1dvcmQvRXhjZWwvVFhUKTwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZS11cGxvYWQtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwidXBsb2FkRG9jXCIgY2xhc3M9XCJmaWxlLXVwbG9hZC1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWxlLXVwbG9hZC1pY29uXCI+8J+Tjjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IHVwbG9hZGVkRmlsZT8ubmFtZSB8fCAnQ2hvb3NlIGEgZmlsZSAoUERGLCBXb3JkLCBFeGNlbCwgVFhUKScgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiZmlsZS11cGxvYWQtaGludFwiPk1heCBmaWxlIHNpemU6IDI1TUI8L3NtYWxsPlxuXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cInVwbG9hZERvY1wiIHR5cGU9XCJmaWxlXCIgKGNoYW5nZSk9XCJvbkZpbGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhY2NlcHQ9XCIucGRmLC5kb2MsLmRvY3gsLnhscywueGxzeCwudHh0XCIgY2xhc3M9XCJmaWxlLXVwbG9hZC1pbnB1dFwiIC8+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInVwbG9hZEVycm9yXCIgY2xhc3M9XCJlcnJvclwiPnt7IHVwbG9hZEVycm9yIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgICAgPC9tYXQtY2FyZD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicG9wdXAtZm9vdGVyXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tYWN0aXZlXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiQ2FuY2VsXCIgKGNsaWNrKT1cImNhbmNlbEZvcm0oKVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGlucHV0IFtkaXNhYmxlZF09XCJkZXNpZ25hdGlvbkZvcm0/LmludmFsaWRcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImRlc2lnbmF0aW9uRm9ybT8uaW52YWxpZCA/ICdidG4tZGlzYWJsZSc6J2J0bi1hY3RpdmUnXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiR2VuZXJhdGUgQ0JQXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZURlc2lnbmF0aW9uKClcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cIm92ZXJsYXktbG9hZGVyXCIgKm5nSWY9XCJsb2FkaW5nXCI+XG4gICAgPG1hdC1zcGlubmVyIGRpYW1ldGVyPVwiNTBcIj48L21hdC1zcGlubmVyPlxuPC9kaXY+Il19
@@ -2,7 +2,7 @@ import { MAT_DIALOG_DATA } from '@angular/material/dialog';
2
2
  import { Component, ElementRef, Inject, ViewChild } from '@angular/core';
3
3
  import { Validators } from '@angular/forms';
4
4
  import { debounceTime, distinctUntilChanged, finalize, startWith } from 'rxjs/operators';
5
- import _ from 'lodash';
5
+ import * as _ from 'lodash';
6
6
  import * as i0 from "@angular/core";
7
7
  import * as i1 from "@angular/material/dialog";
8
8
  import * as i2 from "@angular/forms";
@@ -403,4 +403,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
403
403
  type: ViewChild,
404
404
  args: ['mdo', { read: ElementRef }]
405
405
  }] } });
406
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwcm92YWwtcmVxdWVzdC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi9jYnAtYWkvc3JjL2xpYi9jb21wb25lbnRzL2FwcHJvdmFsLXJlcXVlc3QtZm9ybS9hcHByb3ZhbC1yZXF1ZXN0LWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvYXBwcm92YWwtcmVxdWVzdC1mb3JtL2FwcHJvdmFsLXJlcXVlc3QtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBQ3pFLE9BQU8sRUFBcUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BHLE9BQU8sRUFBcUMsVUFBVSxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUYsT0FBTyxFQUFjLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckcsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFBOzs7Ozs7Ozs7Ozs7OztBQVN0QixNQUFNLE9BQU8sNEJBQTRCO0lBa0J2QyxZQUFtQixTQUFxRCxFQUN0QyxJQUFTLEVBQ2pDLEVBQWUsRUFDZixLQUF3QixFQUN4QixhQUE0QixFQUM1QixRQUFxQixFQUN4QixNQUFjO1FBTkYsY0FBUyxHQUFULFNBQVMsQ0FBNEM7UUFDdEMsU0FBSSxHQUFKLElBQUksQ0FBSztRQUNqQyxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUFDeEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsYUFBUSxHQUFSLFFBQVEs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QUMsQ0FBQSxDQUFDLGtFQUFrRTtxQkFDM0U7eUJBQU07d0JBQ0wscUVBQXFFO3dCQUNyRSxNQUFNLFlBQVksR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQTt3QkFDOUQsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMscUJBQXFCLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRTs0QkFDckcsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQTs0QkFDN0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFBOzRCQUNqRSx3REFBd0Q7NEJBQ3hELElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUE7NEJBQ2pELElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTt5QkFDdkM7cUJBQ0Y7aUJBQ0Y7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQWdCLENBQUM7SUFDbEUsQ0FBQzsrR0ExYVUsNEJBQTRCLDhDQW1CN0IsZUFBZTttR0FuQmQsNEJBQTRCLDJJQUliLFVBQVUsNkJDbEJ0Qyw2a05BNEhNOzs0RkQ5R08sNEJBQTRCO2tCQUx4QyxTQUFTOytCQUNFLDJCQUEyQjs7MEJBdUJsQyxNQUFNOzJCQUFDLGVBQWU7aUxBZmUsTUFBTTtzQkFBN0MsU0FBUzt1QkFBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgRm9ybUFycmF5LCBWYWxpZGF0b3JzLCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbmFsaXplLCBzdGFydFdpdGggfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgeyBmb3JrSm9pbiwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNoYXJlZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9tb2R1bGVzL3NoYXJlZC9zZXJ2aWNlcy9zaGFyZWQuc2VydmljZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWFwcHJvdmFsLXJlcXVlc3QtZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9hcHByb3ZhbC1yZXF1ZXN0LWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hcHByb3ZhbC1yZXF1ZXN0LWZvcm0uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBBcHByb3ZhbFJlcXVlc3RGb3JtQ29tcG9uZW50IHtcbiAgYXBwcm92YWxSZXF1ZXN0Rm9ybTogRm9ybUdyb3VwO1xuICBjYnBQbGFuRmluYWxPYmo6IGFueVxuICBsb2FkaW5nID0gZmFsc2VcbiAgQFZpZXdDaGlsZCgnbWRvJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIG1kb1JlZj86IEVsZW1lbnRSZWZcbiAgbWRvRmlsdGVyRW5hYmxlID0gZmFsc2VcbiAgaXNMb2FkaW5nTW9yZW1kb3MgPSBmYWxzZTtcbiAgbWRvT2Zmc2V0ID0gMFxuICBvZGNzbWRvQ291bnQgPSAwXG4gIGRlZmF1bHRTZWFyY2htZG9Db3VudCA9IDBcbiAgbWRvTGlzdExvYWRDb3VudCA9IDUwXG4gIG1kb0RlZmF1bHRMb2FkQ291bnQgPSA1MFxuICBub01vcmVMZWdhY3ltZG9zID0gZmFsc2VcbiAgbWRvU2VhcmNoVGV4dCA9ICcnXG4gIG1kb0luaXRJblByb2dyZXNzID0gZmFsc2VcbiAgc2Nyb2xsTGlzdGVuZXJBdHRhY2hlZCA9IGZhbHNlXG4gIG1hc3RlckRhdGE6IGFueSA9IHt9XG4gIHJvbGVfbWFwcGluZ19pZHMgPSBbXVxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8QXBwcm92YWxSZXF1ZXN0Rm9ybUNvbXBvbmVudD4sXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnksXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBzaGFyZWRTZXJ2aWNlOiBTaGFyZWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyLFxuICBwdWJsaWMgcm91dGVyOiBSb3V0ZXIpIHtcbiAgICAgIHRoaXMucm9sZV9tYXBwaW5nX2lkcyA9IGRhdGFcbiAgICB0aGlzLm1hc3RlckRhdGEgPSB7XG4gICAgICBtZG9CYWNrdXA6IFtdLFxuICAgICAgbWRvRmlsdGVyZWQ6IFtdLCAvLyBmaWx0ZXJlZCBzZWFyY2ggcmVzdWx0c1xuICAgIH07XG5cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm0oKTtcbiAgICBjb25zb2xlLmxvZygndGhpcy5yb2xlX21hcHBpbmdfaWRzLS0nLHRoaXMucm9sZV9tYXBwaW5nX2lkcylcblxuICAgIGNvbnN0IHNlYXJjaENvbnRyb2wgPSB0aGlzLmFwcHJvdmFsUmVxdWVzdEZvcm0uZ2V0KCdzZWFyY2htZG8nKTtcblxuICAgIGlmIChzZWFyY2hDb250cm9sKSB7XG4gICAgICBzZWFyY2hDb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoMTAwKSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgIHN0YXJ0V2l0aCgnJylcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgY29uc3QgdHh0ID0gcmVzPy50b1N0cmluZygpPy50cmltKCkgPz8gJyc7XG5cbiAgICAgICAgICBpZiAodHh0Py5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMubWRvRmlsdGVyRW5hYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMubWFzdGVyRGF0YS5tZG9GaWx0ZXJlZCA9XG4gICAgICAgICAgICAgIHRoaXMubWFzdGVyRGF0YS5tZG9CYWNrdXAuZmlsdGVyKChpdGVtOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgaXRlbS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModHh0LnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIHNob3cgaW5pdGlhbCBwYWdlIG9mIGZpbHRlcmVkIHJlc3VsdHNcbiAgICAgICAgICAgIHRoaXMubWFzdGVyRGF0YS5tZG8gPSB0aGlzLm1hc3RlckRhdGEubWRvRmlsdGVyZWQuc2xpY2UoMCwgdGhpcy5tZG9MaXN0TG9hZENvdW50KTtcblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1kb0ZpbHRlckVuYWJsZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyBzaG93IGZpcnN0IHBhZ2UgZnJvbSBiYWNrdXBcbiAgICAgICAgICAgIHRoaXMubWFzdGVyRGF0YS5tZG8gPSB0aGlzLm1hc3RlckRhdGEubWRvQmFja3VwLnNsaWNlKDAsIHRoaXMubWRvRGVmYXVsdExvYWRDb3VudCk7XG4gICAgICAgICAgICB0aGlzLm1kb0xpc3RMb2FkQ291bnQgPSB0aGlzLm1kb0RlZmF1bHRMb2FkQ291bnQ7XG4gICAgICAgICAgICB0aGlzLm1kb09mZnNldCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cblxuICAgIGNvbnNvbGUubG9nKHRoaXMubWFzdGVyRGF0YVsnbWRvQmFja3VwJ10pXG4gICAgaWYgKCF0aGlzLm1hc3RlckRhdGFbJ21kb0JhY2t1cCddLmxlbmd0aCkge1xuICAgICAgdGhpcy5nZXRtZG9TYWZlKClcbiAgICB9XG5cbiAgfVxuXG4gIHByaXZhdGUgZ2V0bWRvU2FmZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tZG9Jbml0SW5Qcm9ncmVzcyB8fCB0aGlzLmlzTG9hZGluZ01vcmVtZG9zKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5tZG9Jbml0SW5Qcm9ncmVzcyA9IHRydWVcbiAgICB0aGlzLmdldG1kbygpXG4gIH1cblxuICBpbml0aWFsaXplRm9ybSgpIHtcbiAgICB0aGlzLmFwcHJvdmFsUmVxdWVzdEZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIG1kb19uYW1lOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgcmVxdWVzdF9uYW1lOiBbJycsIFtcbiAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICBWYWxpZGF0b3JzLm1heExlbmd0aCgxMDApLFxuICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKC9eKD8hXFxzKiQpW0EtWmEtejAtOSBdKyQvKVxuICAgIF1dLFxuICAgICAgc2VhcmNobWRvOiBbJyddLFxuICAgIH0pO1xuICB9XG5cblxuXG4gIGNhbmNlbEZvcm0oKSB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKVxuICB9XG5cbiAgc2F2ZW1kbygpIHtcbiAgICBjb25zdCByZXF1ZXN0TmFtZSA9IHRoaXMuYXBwcm92YWxSZXF1ZXN0Rm9ybS52YWx1ZS5yZXF1ZXN0X25hbWU/LnRyaW0oKTtcblxuICAgIGlmICghcmVxdWVzdE5hbWUpIHtcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbignUmVxdWVzdCBuYW1lIGlzIHJlcXVpcmVkJywgJ1gnLCB7XG4gICAgICAgIGR1cmF0aW9uOiAzMDAwXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2VsZWN0ZWRtZG86IHN0cmluZyA9IHRoaXMuYXBwcm92YWxSZXF1ZXN0Rm9ybS5nZXQoJ21kb19uYW1lJyk/LnZhbHVlO1xuXG4gICAgaWYgKCFzZWxlY3RlZG1kbykge1xuICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdQbGVhc2Ugc2VsZWN0IGFuIG1kbyBsZWFkZXIvYWRtaW4nLCAnWCcsIHsgZHVyYXRpb246IDMwMDAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcblxuICAgIGNvbnN0IGJhc2VPYmogPSB7XG4gICAgICBzdGF0ZV9jZW50ZXJfaWQ6IHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmoubWluaXN0cnkuaWRlbnRpZmllcixcbiAgICAgIC8vIHN0YXRlX2NlbnRlcl9uYW1lOiB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLm1pbmlzdHJ5Lm9yZ05hbWUsXG4gICAgICByb2xlX21hcHBpbmdfaWRzOiB0aGlzLnJvbGVfbWFwcGluZ19pZHMubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0uaWQpLFxuICAgICAgcmVxdWVzdF9uYW1lOnJlcXVlc3ROYW1lLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iaj8ubWluaXN0cnk/LnNiT3JnVHlwZSA9PT0gJ3N0YXRlJyAmJiB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRfbmFtZSkge1xuICAgICAgYmFzZU9ialsnZGVwYXJ0bWVudF9pZCddID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50cztcbiAgICAgLy8gYmFzZU9ialsnZGVwYXJ0bWVudF9uYW1lJ10gPSB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRfbmFtZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iaj8ubWluaXN0cnk/LnNiT3JnVHlwZSA9PT0gJ21pbmlzdHJ5JyAmJiB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRfbmFtZSkge1xuICAgICAgYmFzZU9ialsnZGVwYXJ0bWVudF9pZCddID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50cztcbiAgICAgLy8gYmFzZU9ialsnZGVwYXJ0bWVudF9uYW1lJ10gPSB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRfbmFtZTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgYW4gYXJyYXkgb2Ygb2JzZXJ2YWJsZXMsIG9uZSBwZXIgbWRvXG4gICAgY29uc3QgcmVxID0ge1xuICAgICAgLi4uYmFzZU9iaixcbiAgICAgIG1kb19pZDogc2VsZWN0ZWRtZG9cbiAgICB9O1xuXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNhdmVBcHByb3ZhbFJlcXVlc3QocmVxKVxuICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4gdGhpcy5sb2FkaW5nID0gZmFsc2UpKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ1JlcXVlc3Qgc3VjY2Vzc2Z1bGx5IHN1Ym1pdHRlZCBmb3IgYXBwcm92YWwuJywgJ1gnLCB7XG4gICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItc3VjY2VzcyddXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoJ3NhdmVkJyk7XG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvYWkvYXBwcm92ZS1yZXF1ZXN0cyddKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdlcnJvcicsIGVycm9yKVxuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbigoZXJyb3I/LmVycm9yPy5kZXRhaWwgfHwgJ0ZhaWxlZCB0byBzZW5kIHJlcXVlc3QnKSwgJ1gnLCB7XG4gICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIGNsb3NlRGlhbG9nKCkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKClcbiAgfVxuXG4gIGdldG1kbyhzZWFyY2hUZXh0Pzogc3RyaW5nLCBvZmZzZXQ/OiBudW1iZXIpOiB2b2lkIHtcblxuICAgIC8vIGNsZWFyIGFueSBwcmV2aW91cyBkZWJ1ZyBob29rc1xuICAgIGlmICghc2VhcmNoVGV4dCB8fCBzZWFyY2hUZXh0Py5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIG5vb3BcbiAgICB9XG5cbiAgICBjb25zdCByZXFPZmZzZXQgPSAodHlwZW9mIG9mZnNldCA9PT0gJ251bWJlcicpID8gb2Zmc2V0IDogdGhpcy5tZG9PZmZzZXRcbiAgICBsZXQgcmVxTGltaXQgPSB0aGlzLm1kb0RlZmF1bHRMb2FkQ291bnRcbiAgICBjb25zdCBwYWdlSW5kZXggPSByZXFMaW1pdCA+IDAgPyBNYXRoLmZsb29yKHJlcU9mZnNldCAvIHJlcUxpbWl0KSA6IDBcbiAgICAvLyBpZiB3ZSdyZSByZXF1ZXN0aW5nIGZyb20gZmlyc3QgcGFnZSwgY2xlYXIgdGhlIG5vLW1vcmUtZGF0YSBndWFyZFxuICAgIGlmIChwYWdlSW5kZXggPT09IDApIHtcbiAgICAgIHRoaXMubm9Nb3JlTGVnYWN5bWRvcyA9IGZhbHNlXG4gICAgICByZXFMaW1pdCA9IDUwXG4gICAgfVxuICAgIC8vIGNvbnN0IHJlcXVlc3RCb2R5OiBhbnkgPSB7XG4gICAgLy8gICBmaWx0ZXJDcml0ZXJpYU1hcDoge1xuICAgIC8vICAgICBzdGF0dXM6ICdBY3RpdmUnXG4gICAgLy8gICB9LFxuICAgIC8vICAgcmVxdWVzdGVkRmllbGRzOiBbXSxcbiAgICAvLyAgIHBhZ2VOdW1iZXI6IHBhZ2VJbmRleCxcbiAgICAvLyAgIHBhZ2VTaXplOiByZXFMaW1pdCxcbiAgICAvLyB9XG5cbiAgICBjb25zdCByZXF1ZXN0Qm9keTogYW55ID0ge1xuICAgICAgXCJyZXF1ZXN0XCI6IHtcbiAgICAgICAgXCJmaWx0ZXJzXCI6IHtcbiAgICAgICAgICBcIm9yZ2FuaXNhdGlvbnMucm9sZXNcIjogW1xuICAgICAgICAgICAgXCJNRE9fTEVBREVSXCIsXG4gICAgICAgICAgICBcIk1ET19BRE1JTlwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcInJvb3RPcmdJZFwiOiB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRzID8gdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50cyA6IHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmoubWluaXN0cnkuaWRlbnRpZmllciBcbiAgICAgICAgfSxcbiAgICAgICAgXCJmaWVsZHNcIjogW1xuICAgICAgICAgIFwiZmlyc3ROYW1lXCIsXG4gICAgICAgICAgXCJsYXN0TmFtZVwiLFxuICAgICAgICAgIFwiaWRcIixcbiAgICAgICAgICBcInJvb3RPcmdJZFwiLFxuICAgICAgICAgIFwib3JnYW5pc2F0aW9uc1wiLFxuICAgICAgICAgIFwicm9sZXNcIlxuICAgICAgICBdLFxuICAgICAgICBwYWdlTnVtYmVyOiBwYWdlSW5kZXgsXG4gICAgICAgIHBhZ2VTaXplOiByZXFMaW1pdCxcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNlYXJjaFRleHQ/Lmxlbmd0aCkge1xuICAgICAgcmVxdWVzdEJvZHlbJ3JlcXVlc3QnXVtcInF1ZXJ5XCJdID0gc2VhcmNoVGV4dFxuICAgICAgLy8gd2hlbiBzZWFyY2hpbmcsIHN0YXJ0IGZyb20gZmlyc3QgcGFnZVxuICAgICAgcmVxdWVzdEJvZHkucGFnZU51bWJlciA9IDBcbiAgICAgIC8vIGFsbG93IGxhcmdlciBwYWdlIGZvciBzZWFyY2ggaWYgbmVlZGVkXG4gICAgICByZXF1ZXN0Qm9keS5wYWdlU2l6ZSA9IHBhZ2VJbmRleCA9PT0gMCA/IDUwIDogdGhpcy5tZG9MaXN0TG9hZENvdW50XG4gICAgICAvLyByZXNldCBndWFyZCB3aGVuIHBlcmZvcm1pbmcgYSBmcmVzaCBzZWFyY2hcbiAgICAgIHRoaXMubm9Nb3JlTGVnYWN5bWRvcyA9IGZhbHNlXG4gICAgfVxuXG4gICAgLy8gaW5kaWNhdGUgbG9hZGluZyBzdGF0ZSBzbyBzY3JvbGwgaGFuZGxlcnMgZG9uJ3QgdHJpZ2dlciBwYXJhbGxlbCBjYWxsc1xuICAgIHRoaXMuaXNMb2FkaW5nTW9yZW1kb3MgPSB0cnVlXG4gICAgY29uc29sZS5sb2coJ3JlcXVlc3RCb2R5JywgcmVxdWVzdEJvZHkpXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlYXJjaFB1YmxpY21kbyhyZXF1ZXN0Qm9keSkucGlwZShmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICB0aGlzLmlzTG9hZGluZ01vcmVtZG9zID0gZmFsc2VcbiAgICAgIHRoaXMubWRvSW5pdEluUHJvZ3Jlc3MgPSBmYWxzZVxuICAgIH0pKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBfLmdldChyZXMsICdhZG1pbnMnLCBbXSlcbiAgICAgICAgICBjb25zb2xlLmxvZygnY29udGVudC0tJywgY29udGVudClcbiAgICAgICAgICBjb25zdCBtYXBwZWQgPSBjb250ZW50Lm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgICAgICAgaWQ6IGl0ZW0/LmlkLFxuICAgICAgICAgICAgbmFtZTogYCR7aXRlbT8uZmlyc3RfbmFtZX0gJHtpdGVtPy5sYXN0X25hbWV9YCB8fCAnJyxcbiAgICAgICAgICAgIHN0YXR1czogaXRlbT8uc3RhdHVzIHx8ICdBY3RpdmUnLFxuICAgICAgICAgICAgcm9sZV90eXBlOiBpdGVtPy5yb2xlX3R5cGUsXG4gICAgICAgICAgICBkZXBhcnRtZW50X25hbWU6IGl0ZW0/LmRlcGFydG1lbnRfbmFtZVxuXG4gICAgICAgICAgfSkpXG5cbiAgICAgICAgICAvLyB0b3RhbCBjb3VudCBtYXkgYmUgcHJlc2VudCBpbiBkaWZmZXJlbnQga2V5cyBkZXBlbmRpbmcgb24gQVBJIHZlcnNpb24uXG4gICAgICAgICAgLy8gUHJlZmVyICdyZXN1bHQucmVzdWx0LnRvdGFsY291bnQnIChsZWdhY3kgbG93ZXItY2FzZSkgdGhlbiBkYXRhLnRvdGFsQ291bnQsIHRoZW4gdG90YWxDb3VudFxuICAgICAgICAgIGNvbnN0IHRvdGFsID0gXy5nZXQocmVzLCAnY291bnQnLCBfLmdldChyZXMsICdjb3VudCcsIF8uZ2V0KHJlcywgJ2NvdW50JywgMCkpKVxuICAgICAgICAgIHRoaXMuZGVmYXVsdFNlYXJjaG1kb0NvdW50ID0gdG90YWxcblxuICAgICAgICAgIC8vIElmIG9mZnNldCBpcyB6ZXJvIChmaXJzdCBwYWdlKSByZXBsYWNlIGJhY2t1cCwgb3RoZXJ3aXNlIGFwcGVuZCArIGRlZHVwZVxuICAgICAgICAgIGlmICghdGhpcy5tYXN0ZXJEYXRhWydtZG9CYWNrdXAnXSB8fCByZXFPZmZzZXQgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMubWFzdGVyRGF0YVsnbWRvQmFja3VwJ10gPSBtYXBwZWRcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY29tYmluZWQgPSAodGhpcy5tYXN0ZXJEYXRhWydtZG9CYWNrdXAnXSB8fCBbXSkuY29uY2F0KG1hcHBlZClcbiAgICAgICAgICAgIHRoaXMubWFzdGVyRGF0YVsnbWRvQmFja3VwJ10gPSBfLnVuaXFCeShjb21iaW5lZCwgKGl0OiBhbnkpID0+IChpdD8ubmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBJZiBzZXJ2ZXIgcmV0dXJuZWQgbm8gbmV3IGl0ZW1zLCBtYXJrIGFzIG5vLW1vcmUtZGF0YSB0byBzdG9wIGZ1cnRoZXIgc2Nyb2xsIHJlcXVlc3RzXG4gICAgICAgICAgaWYgKCFtYXBwZWQgfHwgbWFwcGVkPy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMubm9Nb3JlTGVnYWN5bWRvcyA9IHRydWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBJZiB3ZSd2ZSBsb2FkZWQgYXQgbGVhc3QgdGhlIHRvdGFsIGNvdW50LCBtYXJrIG5vLW1vcmUtZGF0YVxuICAgICAgICAgIGlmICh0aGlzLmRlZmF1bHRTZWFyY2htZG9Db3VudCAmJiAodGhpcy5tYXN0ZXJEYXRhWydtZG9CYWNrdXAnXSB8fCBbXSkubGVuZ3RoID49IHRoaXMuZGVmYXVsdFNlYXJjaG1kb0NvdW50KSB7XG4gICAgICAgICAgICB0aGlzLm5vTW9yZUxlZ2FjeW1kb3MgPSB0cnVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRW5zdXJlIHZpc2libGUgbGlzdCBtYXRjaGVzIHRoZSByZXF1ZXN0ZWQgZGlzcGxheSBjb3VudFxuICAgICAgICAgIHRoaXMubWFzdGVyRGF0YVsnbWRvJ10gPSAodGhpcy5tYXN0ZXJEYXRhWydtZG9CYWNrdXAnXSB8fCBbXSkuc2xpY2UoMCwgdGhpcy5tZG9MaXN0TG9hZENvdW50KVxuICAgICAgICAgIC8vIGxvYWRpbmcgZmxhZyBjbGVhcmVkIGluIGZpbmFsaXplKClcbiAgICAgICAgICB0aGlzLmNoZWNrQ3VycmVudG1kb1ByZXNlbnQoKVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIC8vIFN0b3AgZnVydGhlciBhdXRvbWF0aWMgY2FsbHMgb24gcmVwZWF0ZWQgZXJyb3JzIHRvIGF2b2lkIHRpZ2h0IGxvb3BzXG4gICAgICAgICAgLy8gbG9hZGluZyBmbGFnIGNsZWFyZWQgaW4gZmluYWxpemUoKVxuICAgICAgICAgIHRoaXMubm9Nb3JlTGVnYWN5bWRvcyA9IHRydWVcbiAgICAgICAgICAvLyB0aGlzLm1hdFNuYWNrQmFyLm9wZW4oJ1VuYWJsZSB0byBmZXRjaCBtZG8gZGV0YWlscywgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlciEnKVxuICAgICAgICB9XG4gICAgICB9KVxuICB9XG5jaGVja0N1cnJlbnRtZG9QcmVzZW50KCkge1xuICBjb25zdCBzZWxlY3RlZG1kbyA9IHRoaXMuYXBwcm92YWxSZXF1ZXN0Rm9ybS5nZXQoJ21kb19uYW1lJyk/LnZhbHVlO1xuXG4gIGlmICghc2VsZWN0ZWRtZG8gfHwgIXRoaXMubWFzdGVyRGF0YT8ubWRvKSByZXR1cm47XG5cbiAgY29uc3QgZXhpc3RzID0gdGhpcy5tYXN0ZXJEYXRhLm1kby5zb21lKFxuICAgIChpdGVtOiBhbnkpID0+IGl0ZW0/Lm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IHNlbGVjdGVkbWRvPy50b0xvd2VyQ2FzZSgpXG4gICk7XG5cbiAgaWYgKCFleGlzdHMpIHtcbiAgICBjb25zdCBuZXdtZG8gPSB7XG4gICAgICBuYW1lOiBzZWxlY3RlZG1kbyxcbiAgICAgIHN0YXR1czogJ0FjdGl2ZScsXG4gICAgICBpZDogJ2N1c3RvbS0nICsgRGF0ZS5ub3coKVxuICAgIH07XG5cbiAgICB0aGlzLm1hc3RlckRhdGEubWRvQmFja3VwID0gdGhpcy5tYXN0ZXJEYXRhLm1kb0JhY2t1cCB8fCBbXTtcbiAgICB0aGlzLm1hc3RlckRhdGEubWRvQmFja3VwLnVuc2hpZnQobmV3bWRvKTtcbiAgICB0aGlzLm1hc3RlckRhdGEubWRvLnVuc2hpZnQobmV3bWRvKTtcbiAgfVxufVxuICBvbm1kb0Ryb3Bkb3duQ2xvc2VkKCk6IHZvaWQge1xuICAgIC8vIEtlZXAgdGhlIG1kbyB2YWx1ZSBidXQgY2xlYXIgdGhlIHNlYXJjaCBpbnB1dFxuICAgIGNvbnN0IGN1cnJlbnRtZG8gPSB0aGlzLmFwcHJvdmFsUmVxdWVzdEZvcm0uZ2V0KCdtZG9fbmFtZScpIS52YWx1ZVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuYXBwcm92YWxSZXF1ZXN0Rm9ybS5nZXQoJ3NlYXJjaG1kbycpKSB7XG4gICAgICAgIHRoaXMuYXBwcm92YWxSZXF1ZXN0Rm9ybS5nZXQoJ3NlYXJjaG1kbycpIS5zZXRWYWx1ZSgnJylcbiAgICAgIH1cbiAgICAgIC8vIEVuc3VyZSB0aGUgbWRvIHZhbHVlIHJlbWFpbnMgc2VsZWN0ZWRcbiAgICAgIGlmIChjdXJyZW50bWRvKSB7XG4gICAgICAgIGNvbnN0IG1kb0NvbnRyb2wgPSB0aGlzLmFwcHJvdmFsUmVxdWVzdEZvcm0uZ2V0KCdtZG9fbmFtZScpO1xuICAgICAgICBpZiAobWRvQ29udHJvbCkge1xuICAgICAgICAgIG1kb0NvbnRyb2wuc2V0VmFsdWUoY3VycmVudG1kbylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIDEwMClcbiAgfVxuXG4gIG1kb1NlYXJjaChldnQ6IGFueSkge1xuICAgIGNvbnN0IHNlYXJjaFRleHQgPSBldnQ/LnRhcmdldD8udmFsdWVcbiAgICBjb25zdCB0eHQgPSAoc2VhcmNoVGV4dCB8fCAnJykudG9TdHJpbmcoKS50cmltKClcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdNb3JlbWRvcykgcmV0dXJuXG5cbiAgICB0aGlzLm1kb1NlYXJjaFRleHQgPSB0eHRcbiAgICBpZiAodHh0Py5sZW5ndGgpIHtcbiAgICAgIHRoaXMubWRvRmlsdGVyRW5hYmxlID0gdHJ1ZVxuICAgICAgdGhpcy5pc0xvYWRpbmdNb3JlbWRvcyA9IHRydWVcbiAgICAgIHRoaXMuZ2V0bWRvKHR4dCwgMClcbiAgICB9IGVsc2UgaWYgKHRoaXMubWFzdGVyRGF0YSAmJiB0aGlzLm1hc3RlckRhdGE/Lm1kb0JhY2t1cCkge1xuICAgICAgdGhpcy5tYXN0ZXJEYXRhLm1kbyA9IHRoaXMubWFzdGVyRGF0YT8ubWRvQmFja3VwLnNsaWNlKDAsIHRoaXMubWRvRGVmYXVsdExvYWRDb3VudClcbiAgICAgIHRoaXMubWRvRmlsdGVyRW5hYmxlID0gZmFsc2VcbiAgICAgIHRoaXMuY2hlY2tDdXJyZW50bWRvUHJlc2VudCgpXG4gICAgfVxuICB9XG4gIHNldHVwU2Nyb2xsTGlzdGVuZXIob3BlbmVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKG9wZW5lZCkge1xuICAgICAgaWYgKCF0aGlzLnNjcm9sbExpc3RlbmVyQXR0YWNoZWQpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxMaXN0ZW5lckF0dGFjaGVkID0gdHJ1ZVxuXG4gICAgICAgIHRoaXMubWRvRmlsdGVyRW5hYmxlID0gZmFsc2VcbiAgICAgICAgdGhpcy5tZG9MaXN0TG9hZENvdW50ID0gdGhpcy5tZG9EZWZhdWx0TG9hZENvdW50XG4gICAgICAgIHRoaXMubWRvT2Zmc2V0ID0gMFxuXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nTW9yZW1kb3MgPSB0cnVlXG4gICAgICAgIHRoaXMuZ2V0bWRvKHVuZGVmaW5lZCwgMClcblxuICAgICAgICAvLyBDbGVhciBzZWFyY2ggYm94IG9uY2VcbiAgICAgICAgaWYgKHRoaXMuYXBwcm92YWxSZXF1ZXN0Rm9ybS5nZXQoJ3NlYXJjaG1kbycpKSB7XG4gICAgICAgICAgdGhpcy5hcHByb3ZhbFJlcXVlc3RGb3JtLmdldCgnc2VhcmNobWRvJykhLnNldFZhbHVlKCcnKVxuICAgICAgICB9XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc2VhcmNoSW5wdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuc2VhcmNoLWlucHV0JykgYXMgSFRNTElucHV0RWxlbWVudFxuICAgICAgICAgIGlmIChzZWFyY2hJbnB1dCkge1xuICAgICAgICAgICAgc2VhcmNoSW5wdXQuZm9jdXMoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSwgMTAwKVxuXG4gICAgICAgIC8vIEF0dGFjaCBzY3JvbGwgbGlzdGVuZXIgc2FmZWx5XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhbmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1hdC1zZWxlY3QtcGFuZWwuc2VhcmNoLXBhbmVsJykgYXMgSFRNTEVsZW1lbnQgfCBudWxsXG4gICAgICAgICAgaWYgKHBhbmVsKSB7XG4gICAgICAgICAgICAvLyBhbGlnbiBwYW5lbCB3aWR0aCB0byB0cmlnZ2VyXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCB0cmlnZ2VyRWwgPSB0aGlzLm1kb1JlZiAmJiB0aGlzLm1kb1JlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50XG4gICAgICAgICAgICAgIGlmICh0cmlnZ2VyRWwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWN0ID0gdHJpZ2dlckVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICAgICAgICAgICAgLy8gc2V0IHdpZHRoIGFuZCBsZWZ0IHNvIHBhbmVsIGFsaWducyBleGFjdGx5IGJlbG93IHRoZSB0cmlnZ2VyXG4gICAgICAgICAgICAgICAgcGFuZWwuc3R5bGUud2lkdGggPSBgJHtNYXRoLnJvdW5kKHJlY3Qud2lkdGgpfXB4YFxuICAgICAgICAgICAgICAgIC8vIGxlYXZlIGxlZnQgdG8gb3ZlcmxheSBwb3NpdGlvbmluZyBidXQgbnVkZ2UgaWYgbmVjZXNzYXJ5XG4gICAgICAgICAgICAgICAgLy8gY29tcHV0ZSBsZWZ0IHJlbGF0aXZlIHRvIHZpZXdwb3J0IGFuZCBhcHBseSB0byBwYW5lbFxuICAgICAgICAgICAgICAgIGNvbnN0IG92ZXJsYXlMZWZ0ID0gcmVjdC5sZWZ0XG4gICAgICAgICAgICAgICAgcGFuZWwuc3R5bGUubGVmdCA9IGAke01hdGgucm91bmQob3ZlcmxheUxlZnQpfXB4YFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIC8vIGlnbm9yZSBET00gZXJyb3JzIGluIFNTUiBvciB1bmV4cGVjdGVkIGNhc2VzXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbEhhbmRsZXIgPSB0aGlzLm9ubWRvU2VsZWN0U2Nyb2xsLmJpbmQodGhpcylcbiAgICAgICAgICAgIHBhbmVsLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHNjcm9sbEhhbmRsZXIsIHsgcGFzc2l2ZTogdHJ1ZSB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSwgMTUwKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEcm9wZG93biBjbG9zZWQg4oCUIHJlc2V0IHNjcm9sbCBmbGFnIHNvIGl0IGNhbiByZWF0dGFjaCBuZXh0IHRpbWVcbiAgICAgIHRoaXMuc2Nyb2xsTGlzdGVuZXJBdHRhY2hlZCA9IGZhbHNlXG4gICAgfVxuICB9XG5cbiAgb25tZG9TZWxlY3RTY3JvbGwoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBldmVudD8udGFyZ2V0XG4gICAgaWYgKCF0aGlzLm1kb0ZpbHRlckVuYWJsZSkge1xuICAgICAgLy8gQ2hlY2sgaWYgdXNlciBoYXMgc2Nyb2xsZWQgdG8gdGhlIGJvdHRvbSAod2l0aCBhIHNtYWxsIHRocmVzaG9sZClcbiAgICAgIGlmIChlbGVtZW50LnNjcm9sbFRvcCArIGVsZW1lbnQ/LmNsaWVudEhlaWdodCA+PSBlbGVtZW50Py5zY3JvbGxIZWlnaHQgLSA1KSB7XG4gICAgICAgIC8vIE9ubHkgbG9hZCBtb3JlIGlmIG5vdCBhbHJlYWR5IGxvYWRpbmcgYW5kIGlmIHRoZXJlIGFyZSBwb3RlbnRpYWxseSBtb3JlIGl0ZW1zXG4gICAgICAgIGlmICghdGhpcy5pc0xvYWRpbmdNb3JlbWRvcykge1xuICAgICAgICAgIC8vIElmIG9yZyB1c2VzIElHT1QgbWRvIHRheG9ub215LCByZXF1ZXN0IG1vcmUgZnJvbSB0aGUgQVBJIGJ5IGluY3JlYXNpbmcgdGhlIGxpbWl0XG4gICAgICAgICAgaWYgKHRoaXMubWFzdGVyRGF0YT8ubWRvQmFja3VwPy5sZW5ndGggPiB0aGlzLm1hc3RlckRhdGE/Lm1kbz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBMb2NhbCBwYWdpbmF0aW9uOiBleHBhbmQgdGhlIHNsaWNlZCBsaXN0XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZ01vcmVtZG9zID0gdHJ1ZVxuICAgICAgICAgICAgdGhpcy5tZG9MaXN0TG9hZENvdW50ICs9IHRoaXMubWRvRGVmYXVsdExvYWRDb3VudFxuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBmaWx0ZXJlZCBsaXN0IHdpdGggbW9yZSBpdGVtc1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMubWFzdGVyRGF0YS5tZG8gPSB0aGlzLm1hc3RlckRhdGE/Lm1kb0JhY2t1cD8uc2xpY2UoMCwgdGhpcy5tZG9MaXN0TG9hZENvdW50KVxuICAgICAgICAgICAgICB0aGlzLmNoZWNrQ3VycmVudG1kb1ByZXNlbnQoKVxuICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZ01vcmVtZG9zID0gZmFsc2VcbiAgICAgICAgICAgIH0sIDUwMCkgLy8gU21hbGwgdGltZW91dCB0byBzaW11bGF0ZSBsb2FkaW5nIGFuZCBwcmV2ZW50IG11bHRpcGxlIHRyaWdnZXJzXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIExlZ2FjeSAoc2VydmVyKSBwYWdpbmF0aW9uOiByZXF1ZXN0IG5leHQgcGFnZSBpZiB0b3RhbCBub3QgcmVhY2hlZFxuICAgICAgICAgICAgY29uc3QgbG9hZGVkTGVnYWN5ID0gKHRoaXMubWFzdGVyRGF0YT8ubWRvQmFja3VwIHx8IFtdKS5sZW5ndGhcbiAgICAgICAgICAgIGlmICghdGhpcy5ub01vcmVMZWdhY3ltZG9zICYmIHRoaXMuZGVmYXVsdFNlYXJjaG1kb0NvdW50ICYmIGxvYWRlZExlZ2FjeSA8IHRoaXMuZGVmYXVsdFNlYXJjaG1kb0NvdW50KSB7XG4gICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nTW9yZW1kb3MgPSB0cnVlXG4gICAgICAgICAgICAgIHRoaXMubWRvT2Zmc2V0ID0gKHRoaXMubWRvT2Zmc2V0IHx8IDApICsgdGhpcy5tZG9EZWZhdWx0TG9hZENvdW50XG4gICAgICAgICAgICAgIC8vIGluY3JlYXNlIGRpc3BsYXkgY291bnQgdG8gaW5jbHVkZSBuZXdseSBmZXRjaGVkIGl0ZW1zXG4gICAgICAgICAgICAgIHRoaXMubWRvTGlzdExvYWRDb3VudCArPSB0aGlzLm1kb0RlZmF1bHRMb2FkQ291bnRcbiAgICAgICAgICAgICAgdGhpcy5nZXRtZG8odW5kZWZpbmVkLCB0aGlzLm1kb09mZnNldClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgc2VhcmNobWRvQ29udHJvbCgpOiBGb3JtQ29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuYXBwcm92YWxSZXF1ZXN0Rm9ybS5nZXQoJ3NlYXJjaG1kbycpIGFzIEZvcm1Db250cm9sO1xuICB9XG5cblxufVxuIiwiPGRpdiBjbGFzcz1cInZpZXctY2JwLXBsYW5cIj5cbiAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRpbmdcIj5TZW5kIEZvciBBcHByb3ZhbDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiY2xvc2VEaWFsb2coKVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tY29udGFpbmVyXCIgW2Zvcm1Hcm91cF09XCJhcHByb3ZhbFJlcXVlc3RGb3JtXCI+XG4gICAgICAgIDxtYXQtY2FyZCBjbGFzcz1cIm10LTFcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHA+UmVxdWVzdCBOYW1lIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNCBhZGRpdGlvbmFsLWRldGFpbHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwicmVxdWVzdF9uYW1lXCIgW3ZhbHVlXT1cIlwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgYSBuYW1lIGZvciB0aGlzIHJlcXVlc3QuLi5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMTAwXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJvcmRlci1yYWRpdXM6IDI1cHg7IGJvcmRlcjogMXB4IHNvbGlkICNjY2M7IHBhZGRpbmc6IDhweCAxMnB4OyB3aWR0aDoxMDAlO2ZvbnQtc2l6ZTogMTRweDtmb250LWZhbWlseTogJ0xhdG8nO1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHByb3ZhbFJlcXVlc3RGb3JtLmdldCgncmVxdWVzdF9uYW1lJyk/LnRvdWNoZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcHJvdmFsUmVxdWVzdEZvcm0uZ2V0KCdyZXF1ZXN0X25hbWUnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlcXVlc3QgbmFtZSBpcyByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cblxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwcm92YWxSZXF1ZXN0Rm9ybS5nZXQoJ3JlcXVlc3RfbmFtZScpPy50b3VjaGVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHByb3ZhbFJlcXVlc3RGb3JtLmdldCgncmVxdWVzdF9uYW1lJyk/Lmhhc0Vycm9yKCdwYXR0ZXJuJylcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIE9ubHkgbGV0dGVycywgbnVtYmVycywgc3BhY2VzIGFyZSBhbGxvd2VkXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiBzZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPlNlbGVjdCBNRE8gQWRtaW4vTGVhZGVyIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXIgbXQtNFwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cIm1kb19uYW1lXCIgcGxhY2Vob2xkZXI9XCJFbnRlciBtZG9cIiBbdmFsdWVdPVwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiYm9yZGVyLXJhZGl1czogMjVweDsgYm9yZGVyOiAxcHggc29saWQgI2NjYzsgcGFkZGluZzogOHB4IDEycHg7IHdpZHRoOiAxMDAlO2ZvbnQtc2l6ZTogMTRweDtmb250LWZhbWlseTogJ0xhdG8nO1wiPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJtYXJnaW4tdG9wLXMgdy1mdWxsIHJlcXVpcmVkLXNlbGVjdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgI3Bvc2l0aW9uIGZvcm1Db250cm9sTmFtZT1cIm1kb19uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBNRE8gQWRtaW4vTGVhZGVyXCIgKGNsb3NlZCk9XCJvbm1kb0Ryb3Bkb3duQ2xvc2VkKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M9XCJzZWFyY2gtcGFuZWxcIiAob3BlbmVkQ2hhbmdlKT1cInNldHVwU2Nyb2xsTGlzdGVuZXIoJGV2ZW50KVwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTdGlja3kgc2VhcmNoIGlucHV0IGNvbnRhaW5lciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RpY2t5LXNlYXJjaC1jb250YWluZXJcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtaW5wdXQtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJTZWFyY2ggbWRvIGFkbWluL2xlYWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VhcmNobWRvXCIgY2xhc3M9XCJzZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cIm1kb1NlYXJjaCgkZXZlbnQpXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2VhcmNobWRvQ29udHJvbD8udmFsdWVcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbGVhci1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWFyY2htZG9Db250cm9sLnNldFZhbHVlKCcnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKclSBDbGVhciBTZWFyY2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE9wdGlvbnMgbGlzdCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwibWRvPy5pZFwiICpuZ0Zvcj1cImxldCBtZG8gb2YgbWFzdGVyRGF0YT8ubWRvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bWRvPy5uYW1lfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBMb2FkaW5nIGluZGljYXRvciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNMb2FkaW5nTW9yZW1kb3NcIiBjbGFzcz1cImxvYWRpbmctaW5kaWNhdG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvYWQgTW9yZS4uLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTm8gcmVzdWx0cyBtZXNzYWdlIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwiKG1hc3RlckRhdGE/Lm1kbyApPy5sZW5ndGggPT09IDBcIiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBObyBtYXRjaGVzIGZvdW5kIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF0LWVycm9yIHR4dC1zaXplXCI+Tm8gTURPIEFkbWluL0xlYWRlciBtYXBwZWQuIFBsZWFzZSBjb250YWN0IHN5c3RlbSBhZG1pbmlzdHJhdG9yLjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1lcnJvciBjbGFzcz1cInRleHQteHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYXBwcm92YWxSZXF1ZXN0Rm9ybT8uZ2V0KCdtZG9fbmFtZScpPy50b3VjaGVkICYmIGFwcHJvdmFsUmVxdWVzdEZvcm0/LmdldCgnbWRvX25hbWUnKT8uaW52YWxpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIG1kby5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cIm10LTIgc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8cD5VcGxvYWQgRG9jdW1lbnQgKFBERi9Xb3JkL0V4Y2VsL1RYVCk8L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGUtdXBsb2FkLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInVwbG9hZERvY1wiIGNsYXNzPVwiZmlsZS11cGxvYWQtbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmlsZS11cGxvYWQtaWNvblwiPvCfk448L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyB1cGxvYWRlZEZpbGU/Lm5hbWUgfHwgJ0Nob29zZSBhIGZpbGUgKFBERiwgV29yZCwgRXhjZWwsIFRYVCknIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuXG4gICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImZpbGUtdXBsb2FkLWhpbnRcIj5NYXggZmlsZSBzaXplOiAyNU1CPC9zbWFsbD5cblxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJ1cGxvYWREb2NcIiB0eXBlPVwiZmlsZVwiIChjaGFuZ2UpPVwib25GaWxlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0PVwiLnBkZiwuZG9jLC5kb2N4LC54bHMsLnhsc3gsLnR4dFwiIGNsYXNzPVwiZmlsZS11cGxvYWQtaW5wdXRcIiAvPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ1cGxvYWRFcnJvclwiIGNsYXNzPVwiZXJyb3JcIj57eyB1cGxvYWRFcnJvciB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+IC0tPlxuXG4gICAgICAgIDwvbWF0LWNhcmQ+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInBvcHVwLWZvb3RlclwiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiYnRuLWFjdGl2ZVwiIHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIkNhbmNlbFwiIChjbGljayk9XCJjYW5jZWxGb3JtKClcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiYXBwcm92YWxSZXF1ZXN0Rm9ybT8uaW52YWxpZFwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiYXBwcm92YWxSZXF1ZXN0Rm9ybT8uaW52YWxpZCA/ICdidG4tZGlzYWJsZSc6J2J0bi1hY3RpdmUnXCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVtZG8oKVwiID48bWF0LWljb24+c2VuZDwvbWF0LWljb24+IFNlbmQgUmVxdWVzdDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cIm92ZXJsYXktbG9hZGVyXCIgKm5nSWY9XCJsb2FkaW5nXCI+XG4gICAgPG1hdC1zcGlubmVyIGRpYW1ldGVyPVwiNTBcIj48L21hdC1zcGlubmVyPlxuPC9kaXY+Il19
406
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwcm92YWwtcmVxdWVzdC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi9jYnAtYWkvc3JjL2xpYi9jb21wb25lbnRzL2FwcHJvdmFsLXJlcXVlc3QtZm9ybS9hcHByb3ZhbC1yZXF1ZXN0LWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvYXBwcm92YWwtcmVxdWVzdC1mb3JtL2FwcHJvdmFsLXJlcXVlc3QtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBQ3pFLE9BQU8sRUFBcUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BHLE9BQU8sRUFBcUMsVUFBVSxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUYsT0FBTyxFQUFjLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckcsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUE7Ozs7Ozs7Ozs7Ozs7O0FBUzNCLE1BQU0sT0FBTyw0QkFBNEI7SUFrQnZDLFlBQW1CLFNBQXFELEVBQ3RDLElBQVMsRUFDakMsRUFBZSxFQUNmLEtBQXdCLEVBQ3hCLGFBQTRCLEVBQzVCLFFBQXFCLEVBQ3hCLE1BQWM7UUFORixjQUFTLEdBQVQsU0FBUyxDQUE0QztRQUN0QyxTQUFJLEdBQUosSUFBSSxDQUFLO1FBQ2pDLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUN4QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixhQUFRLEdBQVIs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QUcsQ0FBQyxDQUFBLENBQUMsa0VBQWtFO3FCQUMzRTt5QkFBTTt3QkFDTCxxRUFBcUU7d0JBQ3JFLE1BQU0sWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFBO3dCQUM5RCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFOzRCQUNyRyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFBOzRCQUM3QixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUE7NEJBQ2pFLHdEQUF3RDs0QkFDeEQsSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQTs0QkFDakQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO3lCQUN2QztxQkFDRjtpQkFDRjthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBZ0IsQ0FBQztJQUNsRSxDQUFDOytHQTFhVSw0QkFBNEIsOENBbUI3QixlQUFlO21HQW5CZCw0QkFBNEIsMklBSWIsVUFBVSw2QkNsQnRDLDZrTkE0SE07OzRGRDlHTyw0QkFBNEI7a0JBTHhDLFNBQVM7K0JBQ0UsMkJBQTJCOzswQkF1QmxDLE1BQU07MkJBQUMsZUFBZTtpTEFmZSxNQUFNO3NCQUE3QyxTQUFTO3VCQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3QsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBGb3JtQXJyYXksIFZhbGlkYXRvcnMsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmluYWxpemUsIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJ1xuaW1wb3J0IHsgZm9ya0pvaW4sIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBTaGFyZWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbW9kdWxlcy9zaGFyZWQvc2VydmljZXMvc2hhcmVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1hcHByb3ZhbC1yZXF1ZXN0LWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vYXBwcm92YWwtcmVxdWVzdC1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXBwcm92YWwtcmVxdWVzdC1mb3JtLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQXBwcm92YWxSZXF1ZXN0Rm9ybUNvbXBvbmVudCB7XG4gIGFwcHJvdmFsUmVxdWVzdEZvcm06IEZvcm1Hcm91cDtcbiAgY2JwUGxhbkZpbmFsT2JqOiBhbnlcbiAgbG9hZGluZyA9IGZhbHNlXG4gIEBWaWV3Q2hpbGQoJ21kbycsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBtZG9SZWY/OiBFbGVtZW50UmVmXG4gIG1kb0ZpbHRlckVuYWJsZSA9IGZhbHNlXG4gIGlzTG9hZGluZ01vcmVtZG9zID0gZmFsc2U7XG4gIG1kb09mZnNldCA9IDBcbiAgb2Rjc21kb0NvdW50ID0gMFxuICBkZWZhdWx0U2VhcmNobWRvQ291bnQgPSAwXG4gIG1kb0xpc3RMb2FkQ291bnQgPSA1MFxuICBtZG9EZWZhdWx0TG9hZENvdW50ID0gNTBcbiAgbm9Nb3JlTGVnYWN5bWRvcyA9IGZhbHNlXG4gIG1kb1NlYXJjaFRleHQgPSAnJ1xuICBtZG9Jbml0SW5Qcm9ncmVzcyA9IGZhbHNlXG4gIHNjcm9sbExpc3RlbmVyQXR0YWNoZWQgPSBmYWxzZVxuICBtYXN0ZXJEYXRhOiBhbnkgPSB7fVxuICByb2xlX21hcHBpbmdfaWRzID0gW11cbiAgY29uc3RydWN0b3IocHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPEFwcHJvdmFsUmVxdWVzdEZvcm1Db21wb25lbnQ+LFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogYW55LFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgc2hhcmVkU2VydmljZTogU2hhcmVkU2VydmljZSxcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhcixcbiAgcHVibGljIHJvdXRlcjogUm91dGVyKSB7XG4gICAgICB0aGlzLnJvbGVfbWFwcGluZ19pZHMgPSBkYXRhXG4gICAgdGhpcy5tYXN0ZXJEYXRhID0ge1xuICAgICAgbWRvQmFja3VwOiBbXSxcbiAgICAgIG1kb0ZpbHRlcmVkOiBbXSwgLy8gZmlsdGVyZWQgc2VhcmNoIHJlc3VsdHNcbiAgICB9O1xuXG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmluaXRpYWxpemVGb3JtKCk7XG4gICAgY29uc29sZS5sb2coJ3RoaXMucm9sZV9tYXBwaW5nX2lkcy0tJyx0aGlzLnJvbGVfbWFwcGluZ19pZHMpXG5cbiAgICBjb25zdCBzZWFyY2hDb250cm9sID0gdGhpcy5hcHByb3ZhbFJlcXVlc3RGb3JtLmdldCgnc2VhcmNobWRvJyk7XG5cbiAgICBpZiAoc2VhcmNoQ29udHJvbCkge1xuICAgICAgc2VhcmNoQ29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDEwMCksXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgICBzdGFydFdpdGgoJycpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgIGNvbnN0IHR4dCA9IHJlcz8udG9TdHJpbmcoKT8udHJpbSgpID8/ICcnO1xuXG4gICAgICAgICAgaWYgKHR4dD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLm1kb0ZpbHRlckVuYWJsZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLm1hc3RlckRhdGEubWRvRmlsdGVyZWQgPVxuICAgICAgICAgICAgICB0aGlzLm1hc3RlckRhdGEubWRvQmFja3VwLmZpbHRlcigoaXRlbTogYW55KSA9PlxuICAgICAgICAgICAgICAgIGl0ZW0ubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHR4dC50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAvLyBzaG93IGluaXRpYWwgcGFnZSBvZiBmaWx0ZXJlZCByZXN1bHRzXG4gICAgICAgICAgICB0aGlzLm1hc3RlckRhdGEubWRvID0gdGhpcy5tYXN0ZXJEYXRhLm1kb0ZpbHRlcmVkLnNsaWNlKDAsIHRoaXMubWRvTGlzdExvYWRDb3VudCk7XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tZG9GaWx0ZXJFbmFibGUgPSBmYWxzZTtcblxuICAgICAgICAgICAgLy8gc2hvdyBmaXJzdCBwYWdlIGZyb20gYmFja3VwXG4gICAgICAgICAgICB0aGlzLm1hc3RlckRhdGEubWRvID0gdGhpcy5tYXN0ZXJEYXRhLm1kb0JhY2t1cC5zbGljZSgwLCB0aGlzLm1kb0RlZmF1bHRMb2FkQ291bnQpO1xuICAgICAgICAgICAgdGhpcy5tZG9MaXN0TG9hZENvdW50ID0gdGhpcy5tZG9EZWZhdWx0TG9hZENvdW50O1xuICAgICAgICAgICAgdGhpcy5tZG9PZmZzZXQgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG5cbiAgICBjb25zb2xlLmxvZyh0aGlzLm1hc3RlckRhdGFbJ21kb0JhY2t1cCddKVxuICAgIGlmICghdGhpcy5tYXN0ZXJEYXRhWydtZG9CYWNrdXAnXS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZ2V0bWRvU2FmZSgpXG4gICAgfVxuXG4gIH1cblxuICBwcml2YXRlIGdldG1kb1NhZmUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubWRvSW5pdEluUHJvZ3Jlc3MgfHwgdGhpcy5pc0xvYWRpbmdNb3JlbWRvcykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMubWRvSW5pdEluUHJvZ3Jlc3MgPSB0cnVlXG4gICAgdGhpcy5nZXRtZG8oKVxuICB9XG5cbiAgaW5pdGlhbGl6ZUZvcm0oKSB7XG4gICAgdGhpcy5hcHByb3ZhbFJlcXVlc3RGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBtZG9fbmFtZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIHJlcXVlc3RfbmFtZTogWycnLCBbXG4gICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMTAwKSxcbiAgICAgIFZhbGlkYXRvcnMucGF0dGVybigvXig/IVxccyokKVtBLVphLXowLTkgXSskLylcbiAgICBdXSxcbiAgICAgIHNlYXJjaG1kbzogWycnXSxcbiAgICB9KTtcbiAgfVxuXG5cblxuICBjYW5jZWxGb3JtKCkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKClcbiAgfVxuXG4gIHNhdmVtZG8oKSB7XG4gICAgY29uc3QgcmVxdWVzdE5hbWUgPSB0aGlzLmFwcHJvdmFsUmVxdWVzdEZvcm0udmFsdWUucmVxdWVzdF9uYW1lPy50cmltKCk7XG5cbiAgICBpZiAoIXJlcXVlc3ROYW1lKSB7XG4gICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ1JlcXVlc3QgbmFtZSBpcyByZXF1aXJlZCcsICdYJywge1xuICAgICAgICBkdXJhdGlvbjogMzAwMFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNlbGVjdGVkbWRvOiBzdHJpbmcgPSB0aGlzLmFwcHJvdmFsUmVxdWVzdEZvcm0uZ2V0KCdtZG9fbmFtZScpPy52YWx1ZTtcblxuICAgIGlmICghc2VsZWN0ZWRtZG8pIHtcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbignUGxlYXNlIHNlbGVjdCBhbiBtZG8gbGVhZGVyL2FkbWluJywgJ1gnLCB7IGR1cmF0aW9uOiAzMDAwIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgICBjb25zdCBiYXNlT2JqID0ge1xuICAgICAgc3RhdGVfY2VudGVyX2lkOiB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLm1pbmlzdHJ5LmlkZW50aWZpZXIsXG4gICAgICAvLyBzdGF0ZV9jZW50ZXJfbmFtZTogdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5taW5pc3RyeS5vcmdOYW1lLFxuICAgICAgcm9sZV9tYXBwaW5nX2lkczogdGhpcy5yb2xlX21hcHBpbmdfaWRzLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtLmlkKSxcbiAgICAgIHJlcXVlc3RfbmFtZTpyZXF1ZXN0TmFtZSxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmo/Lm1pbmlzdHJ5Py5zYk9yZ1R5cGUgPT09ICdzdGF0ZScgJiYgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50X25hbWUpIHtcbiAgICAgIGJhc2VPYmpbJ2RlcGFydG1lbnRfaWQnXSA9IHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmouZGVwYXJ0bWVudHM7XG4gICAgIC8vIGJhc2VPYmpbJ2RlcGFydG1lbnRfbmFtZSddID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50X25hbWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmo/Lm1pbmlzdHJ5Py5zYk9yZ1R5cGUgPT09ICdtaW5pc3RyeScgJiYgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50X25hbWUpIHtcbiAgICAgIGJhc2VPYmpbJ2RlcGFydG1lbnRfaWQnXSA9IHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmouZGVwYXJ0bWVudHM7XG4gICAgIC8vIGJhc2VPYmpbJ2RlcGFydG1lbnRfbmFtZSddID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50X25hbWU7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGFuIGFycmF5IG9mIG9ic2VydmFibGVzLCBvbmUgcGVyIG1kb1xuICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgIC4uLmJhc2VPYmosXG4gICAgICBtZG9faWQ6IHNlbGVjdGVkbWRvXG4gICAgfTtcblxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5zYXZlQXBwcm92YWxSZXF1ZXN0KHJlcSlcbiAgICAgIC5waXBlKGZpbmFsaXplKCgpID0+IHRoaXMubG9hZGluZyA9IGZhbHNlKSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdSZXF1ZXN0IHN1Y2Nlc3NmdWxseSBzdWJtaXR0ZWQgZm9yIGFwcHJvdmFsLicsICdYJywge1xuICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLXN1Y2Nlc3MnXVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCdzYXZlZCcpO1xuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2FpL2FwcHJvdmUtcmVxdWVzdHMnXSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnZXJyb3InLCBlcnJvcilcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oKGVycm9yPy5lcnJvcj8uZGV0YWlsIHx8ICdGYWlsZWQgdG8gc2VuZCByZXF1ZXN0JyksICdYJywge1xuICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ11cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBjbG9zZURpYWxvZygpIHtcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpXG4gIH1cblxuICBnZXRtZG8oc2VhcmNoVGV4dD86IHN0cmluZywgb2Zmc2V0PzogbnVtYmVyKTogdm9pZCB7XG5cbiAgICAvLyBjbGVhciBhbnkgcHJldmlvdXMgZGVidWcgaG9va3NcbiAgICBpZiAoIXNlYXJjaFRleHQgfHwgc2VhcmNoVGV4dD8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBub29wXG4gICAgfVxuXG4gICAgY29uc3QgcmVxT2Zmc2V0ID0gKHR5cGVvZiBvZmZzZXQgPT09ICdudW1iZXInKSA/IG9mZnNldCA6IHRoaXMubWRvT2Zmc2V0XG4gICAgbGV0IHJlcUxpbWl0ID0gdGhpcy5tZG9EZWZhdWx0TG9hZENvdW50XG4gICAgY29uc3QgcGFnZUluZGV4ID0gcmVxTGltaXQgPiAwID8gTWF0aC5mbG9vcihyZXFPZmZzZXQgLyByZXFMaW1pdCkgOiAwXG4gICAgLy8gaWYgd2UncmUgcmVxdWVzdGluZyBmcm9tIGZpcnN0IHBhZ2UsIGNsZWFyIHRoZSBuby1tb3JlLWRhdGEgZ3VhcmRcbiAgICBpZiAocGFnZUluZGV4ID09PSAwKSB7XG4gICAgICB0aGlzLm5vTW9yZUxlZ2FjeW1kb3MgPSBmYWxzZVxuICAgICAgcmVxTGltaXQgPSA1MFxuICAgIH1cbiAgICAvLyBjb25zdCByZXF1ZXN0Qm9keTogYW55ID0ge1xuICAgIC8vICAgZmlsdGVyQ3JpdGVyaWFNYXA6IHtcbiAgICAvLyAgICAgc3RhdHVzOiAnQWN0aXZlJ1xuICAgIC8vICAgfSxcbiAgICAvLyAgIHJlcXVlc3RlZEZpZWxkczogW10sXG4gICAgLy8gICBwYWdlTnVtYmVyOiBwYWdlSW5kZXgsXG4gICAgLy8gICBwYWdlU2l6ZTogcmVxTGltaXQsXG4gICAgLy8gfVxuXG4gICAgY29uc3QgcmVxdWVzdEJvZHk6IGFueSA9IHtcbiAgICAgIFwicmVxdWVzdFwiOiB7XG4gICAgICAgIFwiZmlsdGVyc1wiOiB7XG4gICAgICAgICAgXCJvcmdhbmlzYXRpb25zLnJvbGVzXCI6IFtcbiAgICAgICAgICAgIFwiTURPX0xFQURFUlwiLFxuICAgICAgICAgICAgXCJNRE9fQURNSU5cIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJyb290T3JnSWRcIjogdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50cyA/IHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmouZGVwYXJ0bWVudHMgOiB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLm1pbmlzdHJ5LmlkZW50aWZpZXIgXG4gICAgICAgIH0sXG4gICAgICAgIFwiZmllbGRzXCI6IFtcbiAgICAgICAgICBcImZpcnN0TmFtZVwiLFxuICAgICAgICAgIFwibGFzdE5hbWVcIixcbiAgICAgICAgICBcImlkXCIsXG4gICAgICAgICAgXCJyb290T3JnSWRcIixcbiAgICAgICAgICBcIm9yZ2FuaXNhdGlvbnNcIixcbiAgICAgICAgICBcInJvbGVzXCJcbiAgICAgICAgXSxcbiAgICAgICAgcGFnZU51bWJlcjogcGFnZUluZGV4LFxuICAgICAgICBwYWdlU2l6ZTogcmVxTGltaXQsXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzZWFyY2hUZXh0Py5sZW5ndGgpIHtcbiAgICAgIHJlcXVlc3RCb2R5WydyZXF1ZXN0J11bXCJxdWVyeVwiXSA9IHNlYXJjaFRleHRcbiAgICAgIC8vIHdoZW4gc2VhcmNoaW5nLCBzdGFydCBmcm9tIGZpcnN0IHBhZ2VcbiAgICAgIHJlcXVlc3RCb2R5LnBhZ2VOdW1iZXIgPSAwXG4gICAgICAvLyBhbGxvdyBsYXJnZXIgcGFnZSBmb3Igc2VhcmNoIGlmIG5lZWRlZFxuICAgICAgcmVxdWVzdEJvZHkucGFnZVNpemUgPSBwYWdlSW5kZXggPT09IDAgPyA1MCA6IHRoaXMubWRvTGlzdExvYWRDb3VudFxuICAgICAgLy8gcmVzZXQgZ3VhcmQgd2hlbiBwZXJmb3JtaW5nIGEgZnJlc2ggc2VhcmNoXG4gICAgICB0aGlzLm5vTW9yZUxlZ2FjeW1kb3MgPSBmYWxzZVxuICAgIH1cblxuICAgIC8vIGluZGljYXRlIGxvYWRpbmcgc3RhdGUgc28gc2Nyb2xsIGhhbmRsZXJzIGRvbid0IHRyaWdnZXIgcGFyYWxsZWwgY2FsbHNcbiAgICB0aGlzLmlzTG9hZGluZ01vcmVtZG9zID0gdHJ1ZVxuICAgIGNvbnNvbGUubG9nKCdyZXF1ZXN0Qm9keScsIHJlcXVlc3RCb2R5KVxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWFyY2hQdWJsaWNtZG8ocmVxdWVzdEJvZHkpLnBpcGUoZmluYWxpemUoKCkgPT4ge1xuICAgICAgdGhpcy5pc0xvYWRpbmdNb3JlbWRvcyA9IGZhbHNlXG4gICAgICB0aGlzLm1kb0luaXRJblByb2dyZXNzID0gZmFsc2VcbiAgICB9KSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gXy5nZXQocmVzLCAnYWRtaW5zJywgW10pXG4gICAgICAgICAgY29uc29sZS5sb2coJ2NvbnRlbnQtLScsIGNvbnRlbnQpXG4gICAgICAgICAgY29uc3QgbWFwcGVkID0gY29udGVudC5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgIGlkOiBpdGVtPy5pZCxcbiAgICAgICAgICAgIG5hbWU6IGAke2l0ZW0/LmZpcnN0X25hbWV9ICR7aXRlbT8ubGFzdF9uYW1lfWAgfHwgJycsXG4gICAgICAgICAgICBzdGF0dXM6IGl0ZW0/LnN0YXR1cyB8fCAnQWN0aXZlJyxcbiAgICAgICAgICAgIHJvbGVfdHlwZTogaXRlbT8ucm9sZV90eXBlLFxuICAgICAgICAgICAgZGVwYXJ0bWVudF9uYW1lOiBpdGVtPy5kZXBhcnRtZW50X25hbWVcblxuICAgICAgICAgIH0pKVxuXG4gICAgICAgICAgLy8gdG90YWwgY291bnQgbWF5IGJlIHByZXNlbnQgaW4gZGlmZmVyZW50IGtleXMgZGVwZW5kaW5nIG9uIEFQSSB2ZXJzaW9uLlxuICAgICAgICAgIC8vIFByZWZlciAncmVzdWx0LnJlc3VsdC50b3RhbGNvdW50JyAobGVnYWN5IGxvd2VyLWNhc2UpIHRoZW4gZGF0YS50b3RhbENvdW50LCB0aGVuIHRvdGFsQ291bnRcbiAgICAgICAgICBjb25zdCB0b3RhbCA9IF8uZ2V0KHJlcywgJ2NvdW50JywgXy5nZXQocmVzLCAnY291bnQnLCBfLmdldChyZXMsICdjb3VudCcsIDApKSlcbiAgICAgICAgICB0aGlzLmRlZmF1bHRTZWFyY2htZG9Db3VudCA9IHRvdGFsXG5cbiAgICAgICAgICAvLyBJZiBvZmZzZXQgaXMgemVybyAoZmlyc3QgcGFnZSkgcmVwbGFjZSBiYWNrdXAsIG90aGVyd2lzZSBhcHBlbmQgKyBkZWR1cGVcbiAgICAgICAgICBpZiAoIXRoaXMubWFzdGVyRGF0YVsnbWRvQmFja3VwJ10gfHwgcmVxT2Zmc2V0ID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLm1hc3RlckRhdGFbJ21kb0JhY2t1cCddID0gbWFwcGVkXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbWJpbmVkID0gKHRoaXMubWFzdGVyRGF0YVsnbWRvQmFja3VwJ10gfHwgW10pLmNvbmNhdChtYXBwZWQpXG4gICAgICAgICAgICB0aGlzLm1hc3RlckRhdGFbJ21kb0JhY2t1cCddID0gXy51bmlxQnkoY29tYmluZWQsIChpdDogYW55KSA9PiAoaXQ/Lm5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gSWYgc2VydmVyIHJldHVybmVkIG5vIG5ldyBpdGVtcywgbWFyayBhcyBuby1tb3JlLWRhdGEgdG8gc3RvcCBmdXJ0aGVyIHNjcm9sbCByZXF1ZXN0c1xuICAgICAgICAgIGlmICghbWFwcGVkIHx8IG1hcHBlZD8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLm5vTW9yZUxlZ2FjeW1kb3MgPSB0cnVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gSWYgd2UndmUgbG9hZGVkIGF0IGxlYXN0IHRoZSB0b3RhbCBjb3VudCwgbWFyayBuby1tb3JlLWRhdGFcbiAgICAgICAgICBpZiAodGhpcy5kZWZhdWx0U2VhcmNobWRvQ291bnQgJiYgKHRoaXMubWFzdGVyRGF0YVsnbWRvQmFja3VwJ10gfHwgW10pLmxlbmd0aCA+PSB0aGlzLmRlZmF1bHRTZWFyY2htZG9Db3VudCkge1xuICAgICAgICAgICAgdGhpcy5ub01vcmVMZWdhY3ltZG9zID0gdHJ1ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEVuc3VyZSB2aXNpYmxlIGxpc3QgbWF0Y2hlcyB0aGUgcmVxdWVzdGVkIGRpc3BsYXkgY291bnRcbiAgICAgICAgICB0aGlzLm1hc3RlckRhdGFbJ21kbyddID0gKHRoaXMubWFzdGVyRGF0YVsnbWRvQmFja3VwJ10gfHwgW10pLnNsaWNlKDAsIHRoaXMubWRvTGlzdExvYWRDb3VudClcbiAgICAgICAgICAvLyBsb2FkaW5nIGZsYWcgY2xlYXJlZCBpbiBmaW5hbGl6ZSgpXG4gICAgICAgICAgdGhpcy5jaGVja0N1cnJlbnRtZG9QcmVzZW50KClcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAvLyBTdG9wIGZ1cnRoZXIgYXV0b21hdGljIGNhbGxzIG9uIHJlcGVhdGVkIGVycm9ycyB0byBhdm9pZCB0aWdodCBsb29wc1xuICAgICAgICAgIC8vIGxvYWRpbmcgZmxhZyBjbGVhcmVkIGluIGZpbmFsaXplKClcbiAgICAgICAgICB0aGlzLm5vTW9yZUxlZ2FjeW1kb3MgPSB0cnVlXG4gICAgICAgICAgLy8gdGhpcy5tYXRTbmFja0Jhci5vcGVuKCdVbmFibGUgdG8gZmV0Y2ggbWRvIGRldGFpbHMsIHBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIhJylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgfVxuY2hlY2tDdXJyZW50bWRvUHJlc2VudCgpIHtcbiAgY29uc3Qgc2VsZWN0ZWRtZG8gPSB0aGlzLmFwcHJvdmFsUmVxdWVzdEZvcm0uZ2V0KCdtZG9fbmFtZScpPy52YWx1ZTtcblxuICBpZiAoIXNlbGVjdGVkbWRvIHx8ICF0aGlzLm1hc3RlckRhdGE/Lm1kbykgcmV0dXJuO1xuXG4gIGNvbnN0IGV4aXN0cyA9IHRoaXMubWFzdGVyRGF0YS5tZG8uc29tZShcbiAgICAoaXRlbTogYW55KSA9PiBpdGVtPy5uYW1lPy50b0xvd2VyQ2FzZSgpID09PSBzZWxlY3RlZG1kbz8udG9Mb3dlckNhc2UoKVxuICApO1xuXG4gIGlmICghZXhpc3RzKSB7XG4gICAgY29uc3QgbmV3bWRvID0ge1xuICAgICAgbmFtZTogc2VsZWN0ZWRtZG8sXG4gICAgICBzdGF0dXM6ICdBY3RpdmUnLFxuICAgICAgaWQ6ICdjdXN0b20tJyArIERhdGUubm93KClcbiAgICB9O1xuXG4gICAgdGhpcy5tYXN0ZXJEYXRhLm1kb0JhY2t1cCA9IHRoaXMubWFzdGVyRGF0YS5tZG9CYWNrdXAgfHwgW107XG4gICAgdGhpcy5tYXN0ZXJEYXRhLm1kb0JhY2t1cC51bnNoaWZ0KG5ld21kbyk7XG4gICAgdGhpcy5tYXN0ZXJEYXRhLm1kby51bnNoaWZ0KG5ld21kbyk7XG4gIH1cbn1cbiAgb25tZG9Ecm9wZG93bkNsb3NlZCgpOiB2b2lkIHtcbiAgICAvLyBLZWVwIHRoZSBtZG8gdmFsdWUgYnV0IGNsZWFyIHRoZSBzZWFyY2ggaW5wdXRcbiAgICBjb25zdCBjdXJyZW50bWRvID0gdGhpcy5hcHByb3ZhbFJlcXVlc3RGb3JtLmdldCgnbWRvX25hbWUnKSEudmFsdWVcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmFwcHJvdmFsUmVxdWVzdEZvcm0uZ2V0KCdzZWFyY2htZG8nKSkge1xuICAgICAgICB0aGlzLmFwcHJvdmFsUmVxdWVzdEZvcm0uZ2V0KCdzZWFyY2htZG8nKSEuc2V0VmFsdWUoJycpXG4gICAgICB9XG4gICAgICAvLyBFbnN1cmUgdGhlIG1kbyB2YWx1ZSByZW1haW5zIHNlbGVjdGVkXG4gICAgICBpZiAoY3VycmVudG1kbykge1xuICAgICAgICBjb25zdCBtZG9Db250cm9sID0gdGhpcy5hcHByb3ZhbFJlcXVlc3RGb3JtLmdldCgnbWRvX25hbWUnKTtcbiAgICAgICAgaWYgKG1kb0NvbnRyb2wpIHtcbiAgICAgICAgICBtZG9Db250cm9sLnNldFZhbHVlKGN1cnJlbnRtZG8pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCAxMDApXG4gIH1cblxuICBtZG9TZWFyY2goZXZ0OiBhbnkpIHtcbiAgICBjb25zdCBzZWFyY2hUZXh0ID0gZXZ0Py50YXJnZXQ/LnZhbHVlXG4gICAgY29uc3QgdHh0ID0gKHNlYXJjaFRleHQgfHwgJycpLnRvU3RyaW5nKCkudHJpbSgpXG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nTW9yZW1kb3MpIHJldHVyblxuXG4gICAgdGhpcy5tZG9TZWFyY2hUZXh0ID0gdHh0XG4gICAgaWYgKHR4dD8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLm1kb0ZpbHRlckVuYWJsZSA9IHRydWVcbiAgICAgIHRoaXMuaXNMb2FkaW5nTW9yZW1kb3MgPSB0cnVlXG4gICAgICB0aGlzLmdldG1kbyh0eHQsIDApXG4gICAgfSBlbHNlIGlmICh0aGlzLm1hc3RlckRhdGEgJiYgdGhpcy5tYXN0ZXJEYXRhPy5tZG9CYWNrdXApIHtcbiAgICAgIHRoaXMubWFzdGVyRGF0YS5tZG8gPSB0aGlzLm1hc3RlckRhdGE/Lm1kb0JhY2t1cC5zbGljZSgwLCB0aGlzLm1kb0RlZmF1bHRMb2FkQ291bnQpXG4gICAgICB0aGlzLm1kb0ZpbHRlckVuYWJsZSA9IGZhbHNlXG4gICAgICB0aGlzLmNoZWNrQ3VycmVudG1kb1ByZXNlbnQoKVxuICAgIH1cbiAgfVxuICBzZXR1cFNjcm9sbExpc3RlbmVyKG9wZW5lZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChvcGVuZWQpIHtcbiAgICAgIGlmICghdGhpcy5zY3JvbGxMaXN0ZW5lckF0dGFjaGVkKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsTGlzdGVuZXJBdHRhY2hlZCA9IHRydWVcblxuICAgICAgICB0aGlzLm1kb0ZpbHRlckVuYWJsZSA9IGZhbHNlXG4gICAgICAgIHRoaXMubWRvTGlzdExvYWRDb3VudCA9IHRoaXMubWRvRGVmYXVsdExvYWRDb3VudFxuICAgICAgICB0aGlzLm1kb09mZnNldCA9IDBcblxuICAgICAgICB0aGlzLmlzTG9hZGluZ01vcmVtZG9zID0gdHJ1ZVxuICAgICAgICB0aGlzLmdldG1kbyh1bmRlZmluZWQsIDApXG5cbiAgICAgICAgLy8gQ2xlYXIgc2VhcmNoIGJveCBvbmNlXG4gICAgICAgIGlmICh0aGlzLmFwcHJvdmFsUmVxdWVzdEZvcm0uZ2V0KCdzZWFyY2htZG8nKSkge1xuICAgICAgICAgIHRoaXMuYXBwcm92YWxSZXF1ZXN0Rm9ybS5nZXQoJ3NlYXJjaG1kbycpIS5zZXRWYWx1ZSgnJylcbiAgICAgICAgfVxuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNlYXJjaElucHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnNlYXJjaC1pbnB1dCcpIGFzIEhUTUxJbnB1dEVsZW1lbnRcbiAgICAgICAgICBpZiAoc2VhcmNoSW5wdXQpIHtcbiAgICAgICAgICAgIHNlYXJjaElucHV0LmZvY3VzKClcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDEwMClcblxuICAgICAgICAvLyBBdHRhY2ggc2Nyb2xsIGxpc3RlbmVyIHNhZmVseVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBwYW5lbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5tYXQtc2VsZWN0LXBhbmVsLnNlYXJjaC1wYW5lbCcpIGFzIEhUTUxFbGVtZW50IHwgbnVsbFxuICAgICAgICAgIGlmIChwYW5lbCkge1xuICAgICAgICAgICAgLy8gYWxpZ24gcGFuZWwgd2lkdGggdG8gdHJpZ2dlclxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgdHJpZ2dlckVsID0gdGhpcy5tZG9SZWYgJiYgdGhpcy5tZG9SZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudFxuICAgICAgICAgICAgICBpZiAodHJpZ2dlckVsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjdCA9IHRyaWdnZXJFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICAgICAgICAgIC8vIHNldCB3aWR0aCBhbmQgbGVmdCBzbyBwYW5lbCBhbGlnbnMgZXhhY3RseSBiZWxvdyB0aGUgdHJpZ2dlclxuICAgICAgICAgICAgICAgIHBhbmVsLnN0eWxlLndpZHRoID0gYCR7TWF0aC5yb3VuZChyZWN0LndpZHRoKX1weGBcbiAgICAgICAgICAgICAgICAvLyBsZWF2ZSBsZWZ0IHRvIG92ZXJsYXkgcG9zaXRpb25pbmcgYnV0IG51ZGdlIGlmIG5lY2Vzc2FyeVxuICAgICAgICAgICAgICAgIC8vIGNvbXB1dGUgbGVmdCByZWxhdGl2ZSB0byB2aWV3cG9ydCBhbmQgYXBwbHkgdG8gcGFuZWxcbiAgICAgICAgICAgICAgICBjb25zdCBvdmVybGF5TGVmdCA9IHJlY3QubGVmdFxuICAgICAgICAgICAgICAgIHBhbmVsLnN0eWxlLmxlZnQgPSBgJHtNYXRoLnJvdW5kKG92ZXJsYXlMZWZ0KX1weGBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAvLyBpZ25vcmUgRE9NIGVycm9ycyBpbiBTU1Igb3IgdW5leHBlY3RlZCBjYXNlc1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzY3JvbGxIYW5kbGVyID0gdGhpcy5vbm1kb1NlbGVjdFNjcm9sbC5iaW5kKHRoaXMpXG4gICAgICAgICAgICBwYW5lbC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBzY3JvbGxIYW5kbGVyLCB7IHBhc3NpdmU6IHRydWUgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDE1MClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRHJvcGRvd24gY2xvc2VkIOKAlCByZXNldCBzY3JvbGwgZmxhZyBzbyBpdCBjYW4gcmVhdHRhY2ggbmV4dCB0aW1lXG4gICAgICB0aGlzLnNjcm9sbExpc3RlbmVyQXR0YWNoZWQgPSBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIG9ubWRvU2VsZWN0U2Nyb2xsKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQ/LnRhcmdldFxuICAgIGlmICghdGhpcy5tZG9GaWx0ZXJFbmFibGUpIHtcbiAgICAgIC8vIENoZWNrIGlmIHVzZXIgaGFzIHNjcm9sbGVkIHRvIHRoZSBib3R0b20gKHdpdGggYSBzbWFsbCB0aHJlc2hvbGQpXG4gICAgICBpZiAoZWxlbWVudC5zY3JvbGxUb3AgKyBlbGVtZW50Py5jbGllbnRIZWlnaHQgPj0gZWxlbWVudD8uc2Nyb2xsSGVpZ2h0IC0gNSkge1xuICAgICAgICAvLyBPbmx5IGxvYWQgbW9yZSBpZiBub3QgYWxyZWFkeSBsb2FkaW5nIGFuZCBpZiB0aGVyZSBhcmUgcG90ZW50aWFsbHkgbW9yZSBpdGVtc1xuICAgICAgICBpZiAoIXRoaXMuaXNMb2FkaW5nTW9yZW1kb3MpIHtcbiAgICAgICAgICAvLyBJZiBvcmcgdXNlcyBJR09UIG1kbyB0YXhvbm9teSwgcmVxdWVzdCBtb3JlIGZyb20gdGhlIEFQSSBieSBpbmNyZWFzaW5nIHRoZSBsaW1pdFxuICAgICAgICAgIGlmICh0aGlzLm1hc3RlckRhdGE/Lm1kb0JhY2t1cD8ubGVuZ3RoID4gdGhpcy5tYXN0ZXJEYXRhPy5tZG8/Lmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gTG9jYWwgcGFnaW5hdGlvbjogZXhwYW5kIHRoZSBzbGljZWQgbGlzdFxuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmdNb3JlbWRvcyA9IHRydWVcbiAgICAgICAgICAgIHRoaXMubWRvTGlzdExvYWRDb3VudCArPSB0aGlzLm1kb0RlZmF1bHRMb2FkQ291bnRcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgZmlsdGVyZWQgbGlzdCB3aXRoIG1vcmUgaXRlbXNcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLm1hc3RlckRhdGEubWRvID0gdGhpcy5tYXN0ZXJEYXRhPy5tZG9CYWNrdXA/LnNsaWNlKDAsIHRoaXMubWRvTGlzdExvYWRDb3VudClcbiAgICAgICAgICAgICAgdGhpcy5jaGVja0N1cnJlbnRtZG9QcmVzZW50KClcbiAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmdNb3JlbWRvcyA9IGZhbHNlXG4gICAgICAgICAgICB9LCA1MDApIC8vIFNtYWxsIHRpbWVvdXQgdG8gc2ltdWxhdGUgbG9hZGluZyBhbmQgcHJldmVudCBtdWx0aXBsZSB0cmlnZ2Vyc1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBMZWdhY3kgKHNlcnZlcikgcGFnaW5hdGlvbjogcmVxdWVzdCBuZXh0IHBhZ2UgaWYgdG90YWwgbm90IHJlYWNoZWRcbiAgICAgICAgICAgIGNvbnN0IGxvYWRlZExlZ2FjeSA9ICh0aGlzLm1hc3RlckRhdGE/Lm1kb0JhY2t1cCB8fCBbXSkubGVuZ3RoXG4gICAgICAgICAgICBpZiAoIXRoaXMubm9Nb3JlTGVnYWN5bWRvcyAmJiB0aGlzLmRlZmF1bHRTZWFyY2htZG9Db3VudCAmJiBsb2FkZWRMZWdhY3kgPCB0aGlzLmRlZmF1bHRTZWFyY2htZG9Db3VudCkge1xuICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZ01vcmVtZG9zID0gdHJ1ZVxuICAgICAgICAgICAgICB0aGlzLm1kb09mZnNldCA9ICh0aGlzLm1kb09mZnNldCB8fCAwKSArIHRoaXMubWRvRGVmYXVsdExvYWRDb3VudFxuICAgICAgICAgICAgICAvLyBpbmNyZWFzZSBkaXNwbGF5IGNvdW50IHRvIGluY2x1ZGUgbmV3bHkgZmV0Y2hlZCBpdGVtc1xuICAgICAgICAgICAgICB0aGlzLm1kb0xpc3RMb2FkQ291bnQgKz0gdGhpcy5tZG9EZWZhdWx0TG9hZENvdW50XG4gICAgICAgICAgICAgIHRoaXMuZ2V0bWRvKHVuZGVmaW5lZCwgdGhpcy5tZG9PZmZzZXQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNlYXJjaG1kb0NvbnRyb2woKTogRm9ybUNvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLmFwcHJvdmFsUmVxdWVzdEZvcm0uZ2V0KCdzZWFyY2htZG8nKSBhcyBGb3JtQ29udHJvbDtcbiAgfVxuXG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJ2aWV3LWNicC1wbGFuXCI+XG4gICAgPGRpdiBjbGFzcz1cInBvcHVwLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtaGVhZGVyXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkaW5nXCI+U2VuZCBGb3IgQXBwcm92YWw8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImNsb3NlRGlhbG9nKClcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWNvbnRhaW5lclwiIFtmb3JtR3JvdXBdPVwiYXBwcm92YWxSZXF1ZXN0Rm9ybVwiPlxuICAgICAgICA8bWF0LWNhcmQgY2xhc3M9XCJtdC0xXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiBzZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPlJlcXVlc3QgTmFtZSA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTQgYWRkaXRpb25hbC1kZXRhaWxzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cInJlcXVlc3RfbmFtZVwiIFt2YWx1ZV09XCJcIiBwbGFjZWhvbGRlcj1cIkVudGVyIGEgbmFtZSBmb3IgdGhpcyByZXF1ZXN0Li4uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjEwMFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJib3JkZXItcmFkaXVzOiAyNXB4OyBib3JkZXI6IDFweCBzb2xpZCAjY2NjOyBwYWRkaW5nOiA4cHggMTJweDsgd2lkdGg6MTAwJTtmb250LXNpemU6IDE0cHg7Zm9udC1mYW1pbHk6ICdMYXRvJztcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwcm92YWxSZXF1ZXN0Rm9ybS5nZXQoJ3JlcXVlc3RfbmFtZScpPy50b3VjaGVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHByb3ZhbFJlcXVlc3RGb3JtLmdldCgncmVxdWVzdF9uYW1lJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICBSZXF1ZXN0IG5hbWUgaXMgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcHJvdmFsUmVxdWVzdEZvcm0uZ2V0KCdyZXF1ZXN0X25hbWUnKT8udG91Y2hlZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwcm92YWxSZXF1ZXN0Rm9ybS5nZXQoJ3JlcXVlc3RfbmFtZScpPy5oYXNFcnJvcigncGF0dGVybicpXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICBPbmx5IGxldHRlcnMsIG51bWJlcnMsIHNwYWNlcyBhcmUgYWxsb3dlZFxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8cD5TZWxlY3QgTURPIEFkbWluL0xlYWRlciA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyIG10LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8aW5wdXQgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJtZG9fbmFtZVwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgbWRvXCIgW3ZhbHVlXT1cIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJvcmRlci1yYWRpdXM6IDI1cHg7IGJvcmRlcjogMXB4IHNvbGlkICNjY2M7IHBhZGRpbmc6IDhweCAxMnB4OyB3aWR0aDogMTAwJTtmb250LXNpemU6IDE0cHg7Zm9udC1mYW1pbHk6ICdMYXRvJztcIj4gLS0+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwibWFyZ2luLXRvcC1zIHctZnVsbCByZXF1aXJlZC1zZWxlY3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICNwb3NpdGlvbiBmb3JtQ29udHJvbE5hbWU9XCJtZG9fbmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgTURPIEFkbWluL0xlYWRlclwiIChjbG9zZWQpPVwib25tZG9Ecm9wZG93bkNsb3NlZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5lbENsYXNzPVwic2VhcmNoLXBhbmVsXCIgKG9wZW5lZENoYW5nZSk9XCJzZXR1cFNjcm9sbExpc3RlbmVyKCRldmVudClcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU3RpY2t5IHNlYXJjaCBpbnB1dCBjb250YWluZXIgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0aWNreS1zZWFyY2gtY29udGFpbmVyXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWlucHV0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoIG1kbyBhZG1pbi9sZWFkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlYXJjaG1kb1wiIGNsYXNzPVwic2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cCk9XCJtZG9TZWFyY2goJGV2ZW50KVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNlYXJjaG1kb0NvbnRyb2w/LnZhbHVlXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2xlYXItYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VhcmNobWRvQ29udHJvbC5zZXRWYWx1ZSgnJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDinJUgQ2xlYXIgU2VhcmNoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBPcHRpb25zIGxpc3QgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIm1kbz8uaWRcIiAqbmdGb3I9XCJsZXQgbWRvIG9mIG1hc3RlckRhdGE/Lm1kb1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e21kbz8ubmFtZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTG9hZGluZyBpbmRpY2F0b3IgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzTG9hZGluZ01vcmVtZG9zXCIgY2xhc3M9XCJsb2FkaW5nLWluZGljYXRvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2FkIE1vcmUuLi5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE5vIHJlc3VsdHMgbWVzc2FnZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cIihtYXN0ZXJEYXRhPy5tZG8gKT8ubGVuZ3RoID09PSAwXCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTm8gbWF0Y2hlcyBmb3VuZCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1hdC1lcnJvciB0eHQtc2l6ZVwiPk5vIE1ETyBBZG1pbi9MZWFkZXIgbWFwcGVkLiBQbGVhc2UgY29udGFjdCBzeXN0ZW0gYWRtaW5pc3RyYXRvci48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxtYXQtZXJyb3IgY2xhc3M9XCJ0ZXh0LXhzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFwcHJvdmFsUmVxdWVzdEZvcm0/LmdldCgnbWRvX25hbWUnKT8udG91Y2hlZCAmJiBhcHByb3ZhbFJlcXVlc3RGb3JtPy5nZXQoJ21kb19uYW1lJyk/LmludmFsaWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBtZG8uXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj4gLS0+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgXG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJtdC0yIHNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHA+VXBsb2FkIERvY3VtZW50IChQREYvV29yZC9FeGNlbC9UWFQpPC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlLXVwbG9hZC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ1cGxvYWREb2NcIiBjbGFzcz1cImZpbGUtdXBsb2FkLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpbGUtdXBsb2FkLWljb25cIj7wn5OOPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgdXBsb2FkZWRGaWxlPy5uYW1lIHx8ICdDaG9vc2UgYSBmaWxlIChQREYsIFdvcmQsIEV4Y2VsLCBUWFQpJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cblxuICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJmaWxlLXVwbG9hZC1oaW50XCI+TWF4IGZpbGUgc2l6ZTogMjVNQjwvc21hbGw+XG5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwidXBsb2FkRG9jXCIgdHlwZT1cImZpbGVcIiAoY2hhbmdlKT1cIm9uRmlsZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdD1cIi5wZGYsLmRvYywuZG9jeCwueGxzLC54bHN4LC50eHRcIiBjbGFzcz1cImZpbGUtdXBsb2FkLWlucHV0XCIgLz5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidXBsb2FkRXJyb3JcIiBjbGFzcz1cImVycm9yXCI+e3sgdXBsb2FkRXJyb3IgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICA8L21hdC1jYXJkPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1mb290ZXJcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImJ0bi1hY3RpdmVcIiB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCJDYW5jZWxcIiAoY2xpY2spPVwiY2FuY2VsRm9ybSgpXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cImFwcHJvdmFsUmVxdWVzdEZvcm0/LmludmFsaWRcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImFwcHJvdmFsUmVxdWVzdEZvcm0/LmludmFsaWQgPyAnYnRuLWRpc2FibGUnOididG4tYWN0aXZlJ1wiIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzYXZlbWRvKClcIiA+PG1hdC1pY29uPnNlbmQ8L21hdC1pY29uPiBTZW5kIFJlcXVlc3Q8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJvdmVybGF5LWxvYWRlclwiICpuZ0lmPVwibG9hZGluZ1wiPlxuICAgIDxtYXQtc3Bpbm5lciBkaWFtZXRlcj1cIjUwXCI+PC9tYXQtc3Bpbm5lcj5cbjwvZGl2PiJdfQ==