@sumaris-net/ngx-components 18.22.9 → 18.22.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/doc/changelog.md +6 -0
- package/esm2022/src/app/core/table/async-table.class.mjs +14 -7
- package/esm2022/src/app/core/table/table.class.mjs +41 -20
- package/esm2022/src/app/shared/forms.mjs +9 -6
- package/fesm2022/sumaris-net.ngx-components.mjs +59 -29
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/src/app/core/table/async-table.class.d.ts +4 -2
- package/src/app/core/table/table.class.d.ts +3 -1
- package/src/app/shared/forms.d.ts +2 -1
- package/src/app/shared/inputs.d.ts +1 -1
- package/src/assets/manifest.json +1 -1
|
@@ -14,7 +14,7 @@ import { LocalSettingsService } from '../services/local-settings.service';
|
|
|
14
14
|
import { TranslateService } from '@ngx-translate/core';
|
|
15
15
|
import { MatAutocompleteConfigHolder, } from '../../shared/material/autocomplete/material.autocomplete.config';
|
|
16
16
|
import { createPromiseEventEmitter, emitPromiseEvent } from '../../shared/events';
|
|
17
|
-
import { changeCaseToUnderscore, getPropertyByPath, isEmptyArray, isNil, isNotEmptyArray, isNotNil, setPropertyByPath, toBoolean, } from '../../shared/functions';
|
|
17
|
+
import { changeCaseToUnderscore, getPropertyByPath, isEmptyArray, isNil, isNotEmptyArray, isNotNil, isNotNilOrBlank, setPropertyByPath, toBoolean, } from '../../shared/functions';
|
|
18
18
|
import { waitFor, waitForFalse, waitForTrue } from '../../shared/observables';
|
|
19
19
|
import { Toasts } from '../../shared/toast/toasts';
|
|
20
20
|
import { Alerts } from '../../shared/alerts';
|
|
@@ -23,6 +23,7 @@ import { DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_REQUIRED_COLUMNS,
|
|
|
23
23
|
import { AppTableUtils } from './table.utils';
|
|
24
24
|
import { MatPaginator } from '@angular/material/paginator';
|
|
25
25
|
import { MatTable } from '@angular/material/table';
|
|
26
|
+
import { getControlFromPath } from '../../shared/forms';
|
|
26
27
|
import * as i0 from "@angular/core";
|
|
27
28
|
import * as i1 from "./entities-table-datasource.class";
|
|
28
29
|
// @dynamic
|
|
@@ -547,62 +548,79 @@ export class AppTable {
|
|
|
547
548
|
this.applyFilter(filter, opts);
|
|
548
549
|
}
|
|
549
550
|
}
|
|
550
|
-
async confirmAndAdd(event, row) {
|
|
551
|
+
async confirmAndAdd(event, row, opts) {
|
|
551
552
|
if (!this.confirmEditCreate(event, row)) {
|
|
553
|
+
// If pending: Wait end of validation, then loop
|
|
554
|
+
if (row.validator?.pending) {
|
|
555
|
+
return (AppFormUtils.waitWhilePending(row.validator, { stop: this.destroySubject })
|
|
556
|
+
// Loop after validation completed
|
|
557
|
+
.then(() => this.confirmAndAdd(event, row, opts)));
|
|
558
|
+
}
|
|
559
|
+
// Go back to focusColumn
|
|
560
|
+
if (isNotNilOrBlank(opts?.focusColumn)) {
|
|
561
|
+
this.focusColumn = opts.focusColumn;
|
|
562
|
+
this.markForCheck();
|
|
563
|
+
}
|
|
552
564
|
return false;
|
|
553
565
|
}
|
|
554
566
|
// Add row
|
|
555
|
-
return this.addRow(event);
|
|
567
|
+
return this.addRow(event, undefined /* insertAt: use default */, opts);
|
|
556
568
|
}
|
|
557
569
|
confirmAndBackward(event, row, opts) {
|
|
558
570
|
if (!this.inlineEdition)
|
|
559
571
|
return false;
|
|
560
|
-
// Deleting edited row, if empty and not dirty
|
|
561
572
|
const previousRow = this.editedRow;
|
|
573
|
+
const focusColumn = opts?.focusColumn ?? this.lastUserColumn;
|
|
562
574
|
event?.stopPropagation();
|
|
575
|
+
// Deleting edited row, if empty and not dirty
|
|
563
576
|
if (previousRow) {
|
|
564
577
|
// Previous row was a nex row AND invalid: delete it
|
|
565
578
|
if (previousRow.id === -1 && previousRow.validator?.invalid && !previousRow.validator?.dirty) {
|
|
566
579
|
this.deleteNewRow(event, previousRow);
|
|
567
580
|
// Wait deletion is done, then edit previous row (by id, because of reloading)
|
|
568
|
-
this.waitIdle().then(() => this.editRowById(event, row.id, { focusColumn
|
|
581
|
+
this.waitIdle().then(() => this.editRowById(event, row.id, { focusColumn }));
|
|
569
582
|
return true;
|
|
570
583
|
}
|
|
571
584
|
// If cannot confirm previous row
|
|
572
585
|
else if (!this.confirmEditCreate(event, previousRow)) {
|
|
573
586
|
// If pending: Wait end of validation, then loop
|
|
574
587
|
if (previousRow.validator?.pending) {
|
|
575
|
-
return AppFormUtils.waitWhilePending(previousRow.validator, { stop: this.destroySubject })
|
|
588
|
+
return (AppFormUtils.waitWhilePending(previousRow.validator, { stop: this.destroySubject })
|
|
589
|
+
// Wait end of validation and loop
|
|
590
|
+
.then(() => this.confirmAndBackward(event, row, { focusColumn })));
|
|
576
591
|
}
|
|
577
592
|
// Go back to first column
|
|
578
|
-
this.focusColumn =
|
|
593
|
+
this.focusColumn = focusColumn;
|
|
579
594
|
this.markForCheck();
|
|
580
595
|
return false;
|
|
581
596
|
}
|
|
582
597
|
}
|
|
583
598
|
// Edit row, focusing at the end
|
|
584
|
-
this.editRow(event, row, { focusColumn
|
|
599
|
+
this.editRow(event, row, { focusColumn });
|
|
585
600
|
return true;
|
|
586
601
|
}
|
|
587
602
|
confirmAndForward(event, row, opts) {
|
|
588
603
|
if (!this.inlineEdition)
|
|
589
604
|
return false;
|
|
590
605
|
row = row || this.editedRow;
|
|
606
|
+
const focusColumn = opts?.focusColumn ?? this.firstUserColumn;
|
|
591
607
|
event?.stopPropagation();
|
|
592
608
|
// If not confirmed
|
|
593
609
|
if (!this.confirmEditCreate(event, row)) {
|
|
594
610
|
// If pending: Wait end of validation, then loop
|
|
595
611
|
if (row.validator?.pending) {
|
|
596
|
-
return AppFormUtils.waitWhilePending(row.validator, { stop: this.destroySubject })
|
|
612
|
+
return (AppFormUtils.waitWhilePending(row.validator, { stop: this.destroySubject })
|
|
613
|
+
// Wait end of validation and loop
|
|
614
|
+
.then(() => this.confirmAndForward(event, row, { focusColumn })));
|
|
597
615
|
}
|
|
598
616
|
// Go back to first column
|
|
599
|
-
this.focusColumn =
|
|
617
|
+
this.focusColumn = focusColumn;
|
|
600
618
|
this.markForCheck();
|
|
601
619
|
return false;
|
|
602
620
|
}
|
|
603
621
|
// Edit next row
|
|
604
622
|
const nextRowId = row.id + 1;
|
|
605
|
-
this.editRowById(event, nextRowId, { focusColumn
|
|
623
|
+
this.editRowById(event, nextRowId, { focusColumn });
|
|
606
624
|
return true;
|
|
607
625
|
}
|
|
608
626
|
/**
|
|
@@ -637,7 +655,9 @@ export class AppTable {
|
|
|
637
655
|
// If pending: Wait end of validation, then loop
|
|
638
656
|
// TODO: remove when using async isValid() function
|
|
639
657
|
if (row.validator.pending) {
|
|
640
|
-
AppFormUtils.waitWhilePending(row.validator)
|
|
658
|
+
AppFormUtils.waitWhilePending(row.validator)
|
|
659
|
+
// Wait end of validation and loop
|
|
660
|
+
.then(() => this.confirmEditCreate(event, row));
|
|
641
661
|
return false;
|
|
642
662
|
}
|
|
643
663
|
// NOT confirmed = row has error
|
|
@@ -1749,21 +1769,22 @@ export class AppTable {
|
|
|
1749
1769
|
if (this.debug)
|
|
1750
1770
|
console.debug(`[table] Start values changes on row path {${def.formPath}}`);
|
|
1751
1771
|
}
|
|
1752
|
-
|
|
1753
|
-
|
|
1772
|
+
const control = getControlFromPath(row.validator, def.formPath);
|
|
1773
|
+
// Emit the actual value
|
|
1774
|
+
if (def.emitInitialValue !== false) {
|
|
1775
|
+
def.subject.next(control?.value ?? null);
|
|
1776
|
+
}
|
|
1754
1777
|
if (!control) {
|
|
1755
|
-
|
|
1778
|
+
if (this.debug)
|
|
1779
|
+
console.warn(`[table] Could not listen cell changes: no validator or invalid form path {${def.formPath}}`);
|
|
1756
1780
|
}
|
|
1757
1781
|
else {
|
|
1782
|
+
// Listen value changes, and redirect to event emitter
|
|
1758
1783
|
def.subscription = control.valueChanges
|
|
1759
1784
|
.pipe(
|
|
1760
1785
|
// don't emit if control is disabled
|
|
1761
1786
|
filter(() => control.enabled))
|
|
1762
1787
|
.subscribe((value) => def.subject.next(value));
|
|
1763
|
-
// Emit the actual value
|
|
1764
|
-
if (def.emitInitialValue !== false) {
|
|
1765
|
-
def.subject.next(control.value);
|
|
1766
|
-
}
|
|
1767
1788
|
}
|
|
1768
1789
|
}
|
|
1769
1790
|
stopCellValueChanges(name, destroy) {
|
|
@@ -1878,4 +1899,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
1878
1899
|
type: ViewChild,
|
|
1879
1900
|
args: [MatSort, { static: false }]
|
|
1880
1901
|
}] } });
|
|
1881
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvdGFibGUvdGFibGUuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixpQkFBaUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFZLEtBQUssRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqSixPQUFPLEVBQUUsT0FBTyxFQUE4QixNQUFNLHdCQUF3QixDQUFDO0FBRTdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBaUIsTUFBTSxNQUFNLENBQUM7QUFDM0csT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHL0ksT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQVcsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEcsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQWMsMkJBQTJCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMzRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxZQUFZLEVBQThCLE1BQU0sb0JBQW9CLENBQUM7QUFDOUUs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SztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLO2dCQVVPLFVBQVU7c0JBQXRCLEtBQUs7Z0JBUU8sTUFBTTtzQkFBbEIsS0FBSztnQkFnQkksU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBMkNNLFFBQVE7c0JBQXBCLEtBQUs7Z0JBZ0xPLFNBQVM7c0JBQXJCLEtBQUs7Z0JBWWtDLEtBQUs7c0JBQTVDLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDTSxjQUFjO3NCQUF6RCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ0gsSUFBSTtzQkFBMUMsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBJbmplY3RvciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0U29ydCwgTWF0U29ydGFibGUsIFNvcnREaXJlY3Rpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBFTVBUWSwgbWVyZ2UsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgZmlyc3QsIG1lcmdlTWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUYWJsZUVsZW1lbnQgfSBmcm9tICdAZS1pcy9uZ3gtbWF0ZXJpYWwtdGFibGUnO1xuaW1wb3J0IHsgRW50aXRpZXNUYWJsZURhdGFTb3VyY2UgfSBmcm9tICcuL2VudGl0aWVzLXRhYmxlLWRhdGFzb3VyY2UuY2xhc3MnO1xuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgRW50aXR5VXRpbHMsIElFbnRpdHkgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgQWxlcnRDb250cm9sbGVyLCBNb2RhbENvbnRyb2xsZXIsIE5hdkNvbnRyb2xsZXIsIFRvYXN0Q29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQ29sdW1uSXRlbSwgVGFibGVTZWxlY3RDb2x1bW5zQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS1zZWxlY3QtY29sdW1ucy5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRXJyb3JDb2RlcyB9IGZyb20gJy4uL3NlcnZpY2VzL2Vycm9ycyc7XG5pbXBvcnQgeyBBcHBGb3JtVXRpbHMsIENhblNhdmUsIElBcHBGb3JtLCBPblJlYWR5IH0gZnJvbSAnLi4vZm9ybS9mb3JtLnV0aWxzJztcbmltcG9ydCB7IExvY2FsU2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbG9jYWwtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1xuICBNYXRBdXRvY29tcGxldGVDb25maWdIb2xkZXIsXG4gIE1hdEF1dG9jb21wbGV0ZUZpZWxkQWRkT3B0aW9ucyxcbiAgTWF0QXV0b2NvbXBsZXRlRmllbGRDb25maWcsXG59IGZyb20gJy4uLy4uL3NoYXJlZC9tYXRlcmlhbC9hdXRvY29tcGxldGUvbWF0ZXJpYWwuYXV0b2NvbXBsZXRlLmNvbmZpZyc7XG5pbXBvcnQgeyBDb21wbGV0YWJsZUV2ZW50LCBjcmVhdGVQcm9taXNlRXZlbnRFbWl0dGVyLCBlbWl0UHJvbWlzZUV2ZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2V2ZW50cyc7XG5pbXBvcnQge1xuICBjaGFuZ2VDYXNlVG9VbmRlcnNjb3JlLFxuICBnZXRQcm9wZXJ0eUJ5UGF0aCxcbiAgaXNFbXB0eUFycmF5LFxuICBpc05pbCxcbiAgaXNOb3RFbXB0eUFycmF5LFxuICBpc05vdE5pbCxcbiAgc2V0UHJvcGVydHlCeVBhdGgsXG4gIHRvQm9vbGVhbixcbn0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyB3YWl0Rm9yLCB3YWl0Rm9yRmFsc2UsIFdhaXRGb3JPcHRpb25zLCB3YWl0Rm9yVHJ1ZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9vYnNlcnZhYmxlcyc7XG5pbXBvcnQgeyBTaG93VG9hc3RPcHRpb25zLCBUb2FzdHMgfSBmcm9tICcuLi8uLi9zaGFyZWQvdG9hc3QvdG9hc3RzJztcbmltcG9ydCB7IEFsZXJ0cyB9IGZyb20gJy4uLy4uL3NoYXJlZC9hbGVydHMnO1xuaW1wb3J0IHsgQ2RrQ29sdW1uRGVmIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RhYmxlJztcbmltcG9ydCB7IExvYWRSZXN1bHQgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHsgRm9ybUVycm9yVHJhbnNsYXRlT3B0aW9ucywgRm9ybUVycm9yVHJhbnNsYXRvciwgSUZvcm1QYXRoVHJhbnNsYXRvciB9IGZyb20gJy4uLy4uL3NoYXJlZC92YWxpZGF0b3IvZm9ybS1lcnJvci1hZGFwdGVyLmNsYXNzJztcbmltcG9ydCB7XG4gIENlbGxWYWx1ZUNoYW5nZUxpc3RlbmVyLFxuICBERUZBVUxUX1BBR0VfU0laRSxcbiAgREVGQVVMVF9QQUdFX1NJWkVfT1BUSU9OUyxcbiAgREVGQVVMVF9SRVFVSVJFRF9DT0xVTU5TLFxuICBSRVNFUlZFRF9FTkRfQ09MVU1OUyxcbiAgUkVTRVJWRURfU1RBUlRfQ09MVU1OUyxcbiAgU2F2ZUFjdGlvblR5cGUsXG4gIFNFVFRJTkdTX0RJU1BMQVlfQ09MVU1OUyxcbiAgU0VUVElOR1NfUEFHRV9TSVpFLFxuICBTRVRUSU5HU19TT1JURURfQ09MVU1OLFxufSBmcm9tICcuL3RhYmxlLm1vZGVsJztcbmltcG9ydCB7IEFwcFRhYmxlVXRpbHMgfSBmcm9tICcuL3RhYmxlLnV0aWxzJztcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQgeyBNYXRUYWJsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcblxuLy8gQGR5bmFtaWNcbkBEaXJlY3RpdmUoKVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtY2xhc3Mtc3VmZml4XG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXBwVGFibGU8VCBleHRlbmRzIElFbnRpdHk8VCwgSUQ+LCBGID0gYW55LCBJRCA9IG51bWJlcj5cbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgSUFwcEZvcm0sIENhblNhdmUsIElGb3JtUGF0aFRyYW5zbGF0b3JcbntcbiAgcHJpdmF0ZSBfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfb3BlbmluZ1JvdyA9IGZhbHNlO1xuICBwcml2YXRlIF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgcHJpdmF0ZSBfY2VsbFZhbHVlQ2hhbmdlc0RlZnM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBDZWxsVmFsdWVDaGFuZ2VMaXN0ZW5lcjtcbiAgfSA9IHt9O1xuXG4gIHByb3RlY3RlZCBfZW5hYmxlZCA9IHRydWU7XG4gIHByb3RlY3RlZCBfYXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyOiBNYXRBdXRvY29tcGxldGVDb25maWdIb2xkZXI7XG4gIHByb3RlY3RlZCBhbGxvd1Jvd0RldGFpbCA9IHRydWU7XG4gIHByb3RlY3RlZCByZWFkb25seSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWY7XG4gIHByb3RlY3RlZCByb3V0ZTogQWN0aXZhdGVkUm91dGU7XG4gIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcjtcbiAgcHJvdGVjdGVkIG5hdkNvbnRyb2xsZXI6IE5hdkNvbnRyb2xsZXI7XG4gIHByb3RlY3RlZCBsb2NhdGlvbjogTG9jYXRpb247XG4gIHByb3RlY3RlZCBzZXR0aW5nczogTG9jYWxTZXR0aW5nc1NlcnZpY2U7XG4gIHByb3RlY3RlZCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2U7XG4gIHByb3RlY3RlZCBtb2RhbEN0cmw6IE1vZGFsQ29udHJvbGxlcjtcbiAgcHJvdGVjdGVkIGFsZXJ0Q3RybDogQWxlcnRDb250cm9sbGVyO1xuICBwcm90ZWN0ZWQgdG9hc3RDb250cm9sbGVyOiBUb2FzdENvbnRyb2xsZXI7XG4gIHByb3RlY3RlZCBwcmV2aW91c2x5RWRpdGVkUm93SWQ6IG51bWJlcjtcbiAgcHJvdGVjdGVkIGZvcm1FcnJvckFkYXB0ZXI6IEZvcm1FcnJvclRyYW5zbGF0b3I7XG4gIHByb3RlY3RlZCByZWFkb25seSBkZXN0cm95U3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgZXhjbHVkZXNDb2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xuICBkaXNwbGF5ZWRDb2x1bW5zOiBzdHJpbmdbXTtcbiAgdG90YWxSb3dDb3VudDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHZpc2libGVSb3dDb3VudDogbnVtYmVyO1xuICBlcnJvclRyYW5zbGF0ZU9wdGlvbnM6IEZvcm1FcnJvclRyYW5zbGF0ZU9wdGlvbnM7XG5cbiAgcmVhZG9ubHkgcmVhZHlTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGxvYWRpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcmVhZG9ubHkgc2F2aW5nU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSB0b3VjaGVkU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBkaXJ0eVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgZXJyb3JTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KHVuZGVmaW5lZCk7XG5cbiAgZ2V0IGVycm9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZXJyb3JTdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgc2V0IGVycm9yKGVycm9yOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldEVycm9yKGVycm9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgZ2V0IGVycm9yJCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmVycm9yU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxUYWJsZUVsZW1lbnQ8VD4+KHRydWUsIFtdKTtcbiAgcGVybWFuZW50U2VsZWN0aW9uOiBTZWxlY3Rpb25Nb2RlbDxUPiA9IG51bGw7XG4gIHBlcm1hbmVudFNlbGVjdGlvbkNoYW5nZWRQcmV2ZW50ZWQgPSBmYWxzZTtcbiAgZWRpdGVkUm93OiBUYWJsZUVsZW1lbnQ8VD4gPSB1bmRlZmluZWQ7XG4gIGF1dG9jb21wbGV0ZUZpZWxkczogeyBba2V5OiBzdHJpbmddOiBNYXRBdXRvY29tcGxldGVGaWVsZENvbmZpZyB9O1xuICByZWFkb25seSBtb2JpbGU6IGJvb2xlYW47XG5cbiAgLy8gVGFibGUgb3B0aW9uc1xuICBASW5wdXQoKSBzZXR0aW5nc0lkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGRlYnVnOiBib29sZWFuO1xuICBASW5wdXQoKSBpMThuQ29sdW1uUHJlZml4ID0gJ0NPTU1PTi4nO1xuICBASW5wdXQoKSBpMThuQ29sdW1uU3VmZml4OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGF1dG9Mb2FkID0gdHJ1ZTtcbiAgQElucHV0KCkgcmVhZE9ubHk6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlubGluZUVkaXRpb246IGJvb2xlYW47XG4gIEBJbnB1dCgpIGZvY3VzRmlyc3RDb2x1bW4gPSBmYWxzZTtcbiAgQElucHV0KCkgY29uZmlybUJlZm9yZURlbGV0ZSA9IGZhbHNlO1xuICBASW5wdXQoKSBjb25maXJtQmVmb3JlQ2FuY2VsID0gZmFsc2U7XG4gIEBJbnB1dCgpIHVuZG9hYmxlRGVsZXRpb24gPSBmYWxzZTtcbiAgQElucHV0KCkgc2F2ZUJlZm9yZURlbGV0ZTogYm9vbGVhbjtcbiAgQElucHV0KCkga2VlcEVkaXRlZFJvd09uU2F2ZTogYm9vbGVhbjtcbiAgQElucHV0KCkgc2F2ZUJlZm9yZVNvcnQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNhdmVCZWZvcmVGaWx0ZXI6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHByb3BhZ2F0ZVJvd0Vycm9yID0gZmFsc2U7XG4gIEBJbnB1dCgpIHBlcm1hbmVudFNlbGVjdGlvbkFsbG93ZWQgPSBmYWxzZTsgLy8gQWxsb3cga2VlcCBzZWxlY3RlZCByb3dzIG92ZXIgcGFnZSBjaGFuZ2Ugb3Igc29ydCBjaGFuZ2VcbiAgQElucHV0KCkgb3BlblJvd1Rocm90dGxlVGltZSA9IDgwMDsgLy8gUHJldmVudCBkb3VibGUgY2xpY2sgLSBzZWUgaXNzdWUgc3VtYXJpcy1hcHAjODY0XG5cbiAgQElucHV0KCkgZGVmYXVsdFNvcnRCeTogc3RyaW5nO1xuICBASW5wdXQoKSBkZWZhdWx0U29ydERpcmVjdGlvbjogU29ydERpcmVjdGlvbjtcbiAgQElucHV0KCkgZGVmYXVsdFBhZ2VTaXplID0gREVGQVVMVF9QQUdFX1NJWkU7XG4gIEBJbnB1dCgpIGRlZmF1bHRQYWdlU2l6ZU9wdGlvbnMgPSBERUZBVUxUX1BBR0VfU0laRV9PUFRJT05TO1xuXG4gIC8vIEZvY3VzIG1hbmFnZXJcbiAgQElucHV0KCkgZm9jdXNDb2x1bW46IHN0cmluZztcblxuICBnZXQgZmlyc3RVc2VyQ29sdW1uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheWVkQ29sdW1uc1tSRVNFUlZFRF9TVEFSVF9DT0xVTU5TLmxlbmd0aF07XG4gIH1cblxuICBnZXQgbGFzdFVzZXJDb2x1bW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zW3RoaXMuZGlzcGxheWVkQ29sdW1ucy5sZW5ndGggLSBSRVNFUlZFRF9FTkRfQ09MVU1OUy5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBkYXRhU291cmNlKHZhbHVlOiBFbnRpdGllc1RhYmxlRGF0YVNvdXJjZTxULCBGLCBJRD4pIHtcbiAgICB0aGlzLnNldERhdGFzb3VyY2UodmFsdWUpO1xuICB9XG5cbiAgZ2V0IGRhdGFTb3VyY2UoKTogRW50aXRpZXNUYWJsZURhdGFTb3VyY2U8VCwgRiwgSUQ+IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBmaWx0ZXIodmFsdWU6IEYpIHtcbiAgICB0aGlzLnNldEZpbHRlcih2YWx1ZSk7XG4gIH1cblxuICBnZXQgZmlsdGVyKCk6IEYge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXI7XG4gIH1cblxuICBnZXQgZW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubG9hZGluZyB8fCB0aGlzLnRvdGFsUm93Q291bnQgPT09IDA7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRFbnRpdGllcygpOiBUW10ge1xuICAgIHJldHVybiB0aGlzLnBlcm1hbmVudFNlbGVjdGlvbj8uc2VsZWN0ZWQgfHwgQXBwVGFibGVVdGlscy5nZXRFbnRpdGllcyh0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCk7XG4gIH1cblxuICBAT3V0cHV0KCkgb25SZWZyZXNoID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvbkNsaWNrUm93ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUVsZW1lbnQ8VD4+KCk7XG4gIEBPdXRwdXQoKSBvbk9wZW5Sb3cgPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlRWxlbWVudDxUPj4oKTtcbiAgQE91dHB1dCgpIG9uTmV3Um93ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvblN0YXJ0RWRpdGluZ1JvdyA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVFbGVtZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgb25Db25maXJtRWRpdENyZWF0ZVJvdyA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVFbGVtZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgb25DYW5jZWxPckRlbGV0ZVJvdyA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVFbGVtZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgb25CZWZvcmVEZWxldGVSb3dzID0gY3JlYXRlUHJvbWlzZUV2ZW50RW1pdHRlcjxib29sZWFuLCB7IHJvd3M6IFRhYmxlRWxlbWVudDxUPltdIH0+KCk7XG4gIEBPdXRwdXQoKSBvbkJlZm9yZUNhbmNlbFJvd3MgPSBjcmVhdGVQcm9taXNlRXZlbnRFbWl0dGVyPGJvb2xlYW4sIHsgcm93czogVGFibGVFbGVtZW50PFQ+W10gfT4oKTtcbiAgQE91dHB1dCgpIG9uQmVmb3JlU2F2ZSA9IGNyZWF0ZVByb21pc2VFdmVudEVtaXR0ZXI8eyBjb25maXJtZWQ6IGJvb2xlYW47IHNhdmU6IGJvb2xlYW4gfSwgeyBhY3Rpb246IFNhdmVBY3Rpb25UeXBlOyB2YWxpZDogYm9vbGVhbiB9PigpO1xuICBAT3V0cHV0KCkgb25BZnRlckRlbGV0ZWRSb3dzID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUVsZW1lbnQ8VD5bXT4oKTtcbiAgQE91dHB1dCgpIG9uU29ydCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb25EaXJ0eSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIG9uRXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBnZXQgZGlydHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGlydHlTdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgZ2V0IHZhbGlkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVkaXRlZFJvdyAmJiB0aGlzLmVkaXRlZFJvdy5lZGl0aW5nID8gdGhpcy5lZGl0ZWRSb3cudmFsaWRhdG9yPy52YWxpZCA6IHRydWU7XG4gIH1cblxuICBnZXQgaW52YWxpZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0ZWRSb3cgJiYgdGhpcy5lZGl0ZWRSb3cuZWRpdGluZyA/IHRoaXMuZWRpdGVkUm93LnZhbGlkYXRvcj8uaW52YWxpZCA6IGZhbHNlO1xuICB9XG5cbiAgZ2V0IHBlbmRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdGVkUm93ICYmIHRoaXMuZWRpdGVkUm93LmVkaXRpbmcgPyB0aGlzLmVkaXRlZFJvdy52YWxpZGF0b3I/LnBlbmRpbmcgOiBmYWxzZTtcbiAgfVxuXG4gIGdldCB0b3VjaGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRvdWNoZWRTdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgZ2V0IHVudG91Y2hlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMudG91Y2hlZFN1YmplY3QudmFsdWU7XG4gIH1cblxuICBkaXNhYmxlKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKHRoaXMuc29ydCkgdGhpcy5zb3J0LmRpc2FibGVkID0gdHJ1ZTtcbiAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGVuYWJsZShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICh0aGlzLnNvcnQpIHRoaXMuc29ydC5kaXNhYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMuX2VuYWJsZWQgPSB0cnVlO1xuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBnZXQgZW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZW5hYmxlZDtcbiAgfVxuXG4gIC8vIEZJWE1FOiBuZWVkIHRvIGhpZGRlbiBidXR0b25zIChpbiBIVE1MKSwgZXRjLiB3aGVuIGRpc2FibGVkXG4gIEBJbnB1dCgpIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSAhPT0gIXRoaXMuX2VuYWJsZWQpIHtcbiAgICAgIGlmICh2YWx1ZSkgdGhpcy5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIGVsc2UgdGhpcy5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuX2VuYWJsZWQ7XG4gIH1cblxuICBtYXJrQXNEaXJ0eShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5kaXJ0eVN1YmplY3QuY2xvc2VkICYmIHRoaXMuZGlydHlTdWJqZWN0LnZhbHVlICE9PSB0cnVlKSB7XG4gICAgICB0aGlzLmRpcnR5U3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1hcmtBc1ByaXN0aW5lKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKCF0aGlzLmRpcnR5U3ViamVjdC5jbG9zZWQgJiYgdGhpcy5kaXJ0eVN1YmplY3QudmFsdWUgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmRpcnR5U3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBtYXJrQXNVbnRvdWNoZWQob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBsZXQgbmVlZEVtaXRFdmVudCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnRvdWNoZWRTdWJqZWN0LnZhbHVlKSB7XG4gICAgICB0aGlzLnRvdWNoZWRTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgbmVlZEVtaXRFdmVudCA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLmRpcnR5IHx8ICh0aGlzLmVkaXRlZFJvdyAmJiB0aGlzLmVkaXRlZFJvdy5pZCAhPT0gdGhpcy5wcmV2aW91c2x5RWRpdGVkUm93SWQpKSB7XG4gICAgICAvLyBDYW5jZWwgdGhlIGN1cnJlbnQgZWRpdGluZyByb3cgb25seSBpZiBlZGl0aW5nIGFuZCBpZiBpdCB3YXMgbm90IHByZXZpb3VzbHkgc2F2ZWRcbiAgICAgIGlmICh0aGlzLmVkaXRlZFJvdz8uZWRpdGluZykge1xuICAgICAgICAvLyBDYW5jZWwgdGhlIGN1cnJlbnQgZWRpdGluZyByb3cgb25seSBpZiBlZGl0aW5nIGFuZCBpZiBpdCB3YXMgbm90IHByZXZpb3VzbHkgc2F2ZWRcbiAgICAgICAgaWYgKHRoaXMuZWRpdGVkUm93LmlkID09PSAtMSkge1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kZWxldGUoLTEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5jYW5jZWwodGhpcy5lZGl0ZWRSb3cpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTWFyayByb3cgYXMgcHJpc3RpbmVcbiAgICAgICAgdGhpcy5jaGVja0lmUm93UHJpc3RpbmUodGhpcy5lZGl0ZWRSb3csIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZWRpdGVkUm93ID0gbnVsbDtcbiAgICAgIG5lZWRFbWl0RXZlbnQgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLnByZXZpb3VzbHlFZGl0ZWRSb3dJZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAobmVlZEVtaXRFdmVudCAmJiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSkgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBwcmVmZXIgdG8gdXNlIG1hcmtBbGxBc1RvdWNoZWQoKVxuICAgKiBAcGFyYW0gb3B0c1xuICAgKi9cbiAgbWFya0FzVG91Y2hlZChvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGNvbnNvbGUud2FybignVE9ETzogUmVwbGFjZSB0aGlzIGNhbGwgYnkgbWFya0FsbEFzVG91Y2hlZCgpIC0gYmVjYXVzZSBvZiBjaGFuZ2VzIGluIG5neC1jb21wb25lbnRzID49IDAuMTYuMCcpO1xuICAgIGlmICh0aGlzLmVkaXRlZFJvdz8uZWRpdGluZykge1xuICAgICAgdGhpcy5lZGl0ZWRSb3cudmFsaWRhdG9yPy5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbWFya0FsbEFzVG91Y2hlZChvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMudG91Y2hlZFN1YmplY3QuY2xvc2VkICYmIHRoaXMudG91Y2hlZFN1YmplY3QudmFsdWUgIT09IHRydWUpIHtcbiAgICAgIHRoaXMudG91Y2hlZFN1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmVkaXRlZFJvdz8uZWRpdGluZykge1xuICAgICAgdGhpcy5lZGl0ZWRSb3cudmFsaWRhdG9yPy5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgfVxuICB9XG5cbiAgbWFya0FzU2F2aW5nKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5zYXZpbmdTdWJqZWN0LmNsb3NlZCAmJiB0aGlzLnNhdmluZ1N1YmplY3QudmFsdWUgIT09IHRydWUpIHtcbiAgICAgIHRoaXMuZm9jdXNDb2x1bW4gPSB1bmRlZmluZWQ7IC8vIHVuc2VsZWN0IGZvY3VzIGNvbHVtblxuICAgICAgdGhpcy5zYXZpbmdTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIG1hcmtBc1NhdmVkKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5zYXZpbmdTdWJqZWN0LmNsb3NlZCAmJiB0aGlzLnNhdmluZ1N1YmplY3QudmFsdWUgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLnNhdmluZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIG1hcmtBc0xvYWRpbmcob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgdGhpcy5zZXRMb2FkaW5nKHRydWUsIG9wdHMpO1xuICB9XG5cbiAgbWFya0FzTG9hZGVkKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSwgb3B0cyk7XG4gIH1cblxuICBtYXJrQXNSZWFkeShvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMucmVhZHlTdWJqZWN0LmNsb3NlZCAmJiB0aGlzLnJlYWR5U3ViamVjdC52YWx1ZSAhPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5yZWFkeVN1YmplY3QubmV4dCh0cnVlKTtcblxuICAgICAgLy8gSWYgc3ViY2xhc3NlcyBpbXBsZW1lbnRzIE9uUmVhZHlcbiAgICAgIGlmICh0eXBlb2YgdGhpc1snbmdPblJlYWR5J10gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgKHRoaXMgYXMgYW55IGFzIE9uUmVhZHkpLm5nT25SZWFkeSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1hcmtBc05vdFJlYWR5KG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5yZWFkeVN1YmplY3QuY2xvc2VkICYmIHRoaXMucmVhZHlTdWJqZWN0LnZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5yZWFkeVN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGxvYWRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubG9hZGluZ1N1YmplY3QudmFsdWU7XG4gIH1cblxuICBnZXQgbG9hZGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5sb2FkaW5nU3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIGVuYWJsZVNvcnQoKSB7XG4gICAgaWYgKHRoaXMuc29ydCkgdGhpcy5zb3J0LmRpc2FibGVkID0gZmFsc2U7XG4gIH1cblxuICBkaXNhYmxlU29ydCgpIHtcbiAgICBpZiAodGhpcy5zb3J0KSB0aGlzLnNvcnQuZGlzYWJsZWQgPSB0cnVlO1xuICB9XG5cbiAgc2V0IHBhZ2VTaXplKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLmRlZmF1bHRQYWdlU2l6ZSA9IHZhbHVlO1xuICAgIGlmICh0aGlzLnBhZ2luYXRvcikge1xuICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZVNpemUgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBnZXQgcGFnZVNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKHRoaXMucGFnaW5hdG9yICYmIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplKSB8fCB0aGlzLmRlZmF1bHRQYWdlU2l6ZSB8fCBERUZBVUxUX1BBR0VfU0laRTtcbiAgfVxuXG4gIGdldCBwYWdlT2Zmc2V0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuICh0aGlzLnBhZ2luYXRvciAmJiB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggKiB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSkgfHwgMDtcbiAgfVxuXG4gIGdldCBzb3J0QWN0aXZlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc29ydCAmJiB0aGlzLnNvcnQuYWN0aXZlO1xuICB9XG5cbiAgc2V0IHNvcnRBY3RpdmUoc29ydEJ5OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5zb3J0KSB7XG4gICAgICB0aGlzLnNvcnQuYWN0aXZlID0gc29ydEJ5O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlZmF1bHRTb3J0QnkgPSBzb3J0Qnk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNvcnREaXJlY3Rpb24oKTogU29ydERpcmVjdGlvbiB7XG4gICAgcmV0dXJuICh0aGlzLnNvcnQgJiYgdGhpcy5zb3J0LmRpcmVjdGlvbiAmJiAodGhpcy5zb3J0LmRpcmVjdGlvbiA9PT0gJ2Rlc2MnID8gJ2Rlc2MnIDogJ2FzYycpKSB8fCB1bmRlZmluZWQ7XG4gIH1cblxuICBzZXQgc29ydERpcmVjdGlvbih2YWx1ZTogU29ydERpcmVjdGlvbikge1xuICAgIGlmICh0aGlzLnNvcnQpIHtcbiAgICAgIHRoaXMuc29ydC5kaXJlY3Rpb24gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZWZhdWx0U29ydERpcmVjdGlvbiA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3BhZ2luYXRvcjogTWF0UGFnaW5hdG9yIHwgbnVsbCA9IG51bGw7XG5cbiAgQElucHV0KCkgc2V0IHBhZ2luYXRvcih2YWx1ZTogTWF0UGFnaW5hdG9yKSB7XG4gICAgdGhpcy5fcGFnaW5hdG9yID0gdmFsdWU7XG4gIH1cblxuICBnZXQgcGFnaW5hdG9yKCk6IE1hdFBhZ2luYXRvciB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2luYXRvciB8fCB0aGlzLmNoaWxkUGFnaW5hdG9yO1xuICB9XG5cbiAgZ2V0IGRlc3Ryb3llZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZXN0cm95U3ViamVjdD8uY2xvc2VkICE9PSBmYWxzZTtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoTWF0VGFibGUsIHsgc3RhdGljOiBmYWxzZSB9KSB0YWJsZTogTWF0VGFibGU8VD47XG4gIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yLCB7IHN0YXRpYzogZmFsc2UgfSkgY2hpbGRQYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcbiAgQFZpZXdDaGlsZChNYXRTb3J0LCB7IHN0YXRpYzogZmFsc2UgfSkgc29ydDogTWF0U29ydDtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByb3RlY3RlZCBjb2x1bW5zOiBzdHJpbmdbXSxcbiAgICBwcm90ZWN0ZWQgX2RhdGFTb3VyY2U/OiBFbnRpdGllc1RhYmxlRGF0YVNvdXJjZTxULCBGLCBJRD4sXG4gICAgcHJpdmF0ZSBfZmlsdGVyPzogRlxuICApIHtcbiAgICB0aGlzLmNkID0gaW5qZWN0b3IuZ2V0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgICB0aGlzLnJvdXRlID0gaW5qZWN0b3IuZ2V0KEFjdGl2YXRlZFJvdXRlKTtcbiAgICB0aGlzLnJvdXRlciA9IGluamVjdG9yLmdldChSb3V0ZXIpO1xuICAgIHRoaXMubmF2Q29udHJvbGxlciA9IGluamVjdG9yLmdldChOYXZDb250cm9sbGVyKTtcbiAgICB0aGlzLmxvY2F0aW9uID0gaW5qZWN0b3IuZ2V0KExvY2F0aW9uKTtcbiAgICB0aGlzLnNldHRpbmdzID0gaW5qZWN0b3IuZ2V0KExvY2FsU2V0dGluZ3NTZXJ2aWNlKTtcbiAgICB0aGlzLnRyYW5zbGF0ZSA9IGluamVjdG9yLmdldChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgICB0aGlzLm1vZGFsQ3RybCA9IGluamVjdG9yLmdldChNb2RhbENvbnRyb2xsZXIpO1xuICAgIHRoaXMuYWxlcnRDdHJsID0gaW5qZWN0b3IuZ2V0KEFsZXJ0Q29udHJvbGxlcik7XG4gICAgdGhpcy50b2FzdENvbnRyb2xsZXIgPSBpbmplY3Rvci5nZXQoVG9hc3RDb250cm9sbGVyKTtcbiAgICB0aGlzLmZvcm1FcnJvckFkYXB0ZXIgPSBpbmplY3Rvci5nZXQoRm9ybUVycm9yVHJhbnNsYXRvcik7XG4gICAgdGhpcy5tb2JpbGUgPSB0aGlzLnNldHRpbmdzLm1vYmlsZTtcblxuICAgIC8vIEF1dG9jb21wbGV0ZSBmaWVsZHNcbiAgICB0aGlzLl9hdXRvY29tcGxldGVDb25maWdIb2xkZXIgPSBuZXcgTWF0QXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyKHtcbiAgICAgIGdldFVzZXJBdHRyaWJ1dGVzOiAoYSwgYikgPT4gdGhpcy5zZXR0aW5ncy5nZXRGaWVsZERpc3BsYXlBdHRyaWJ1dGVzKGEsIGIpLFxuICAgIH0pO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlRmllbGRzID0gdGhpcy5fYXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyLmZpZWxkcztcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLl9pbml0aWFsaXplZCkgcmV0dXJuOyAvLyBJbml0IG9ubHkgb25jZVxuICAgIHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZTtcblxuICAgIC8vIFNldCBkZWZhdWx0c1xuICAgIHRoaXMucmVhZE9ubHkgPSB0b0Jvb2xlYW4odGhpcy5yZWFkT25seSwgdGhpcy5kYXRhU291cmNlPy5jb25maWcucmVhZE9ubHkgfHwgZmFsc2UpOyAvLyByZWFkL3dyaXRlIGJ5IGRlZmF1bHRcbiAgICB0aGlzLmlubGluZUVkaXRpb24gPSAhdGhpcy5yZWFkT25seSAmJiB0b0Jvb2xlYW4odGhpcy5pbmxpbmVFZGl0aW9uLCBmYWxzZSk7IC8vIGZvcmNlIHRvIGZhbHNlIHdoZW4gcmVhZG9ubHlcbiAgICB0aGlzLnNhdmVCZWZvcmVEZWxldGUgPSB0b0Jvb2xlYW4odGhpcy5zYXZlQmVmb3JlRGVsZXRlLCAhdGhpcy5yZWFkT25seSk7IC8vIGZvcmNlIHRvIGZhbHNlIHdoZW4gcmVhZG9ubHlcbiAgICB0aGlzLnNhdmVCZWZvcmVTb3J0ID0gdG9Cb29sZWFuKHRoaXMuc2F2ZUJlZm9yZVNvcnQsICF0aGlzLnJlYWRPbmx5KTsgLy8gZm9yY2UgdG8gZmFsc2Ugd2hlbiByZWFkb25seVxuICAgIHRoaXMuc2F2ZUJlZm9yZUZpbHRlciA9IHRvQm9vbGVhbih0aGlzLnNhdmVCZWZvcmVGaWx0ZXIsICF0aGlzLnJlYWRPbmx5KTsgLy8gZm9yY2UgdG8gZmFsc2Ugd2hlbiByZWFkb25seVxuICAgIHRoaXMua2VlcEVkaXRlZFJvd09uU2F2ZSA9IHRvQm9vbGVhbih0aGlzLmtlZXBFZGl0ZWRSb3dPblNhdmUsIHRoaXMuaW5saW5lRWRpdGlvbik7XG4gICAgdGhpcy5lcnJvclRyYW5zbGF0ZU9wdGlvbnMgPSB0aGlzLmVycm9yVHJhbnNsYXRlT3B0aW9ucyB8fCB7IHNlcGFyYXRvcjogJywgJywgcGF0aFRyYW5zbGF0b3I6IHRoaXMgfTsgLy8gQ2FuIGJlIG92ZXJyaWRlIGluIHN1YmNsYXNzZXMgY29uc3RydWN0b3JzXG5cbiAgICAvLyBDaGVjayBhc2sgdXNlciBjb25maXJtYXRpb24gaXMgcG9zc2libGVcbiAgICBpZiAodGhpcy5jb25maXJtQmVmb3JlRGVsZXRlICYmICF0aGlzLmFsZXJ0Q3RybCkgdGhyb3cgRXJyb3IoXCJNaXNzaW5nICdhbGVydEN0cmwnIG9yICdpbmplY3RvcicgaW4gY29tcG9uZW50J3MgY29uc3RydWN0b3IuXCIpO1xuXG4gICAgLy8gRGVmaW5lZCB1bmlxdWUgaWQgZm9yIHNldHRpbmdzIGZvciB0aGUgcGFnZVxuICAgIHRoaXMuc2V0dGluZ3NJZCA9IHRoaXMuc2V0dGluZ3NJZCB8fCB0aGlzLmdlbmVyYXRlVGFibGVJZCgpO1xuXG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID0gdGhpcy5nZXREaXNwbGF5Q29sdW1ucygpO1xuXG4gICAgLy8gTG9hZCB0aGUgc29ydGVkIGNvbHVtbnMsIGZyb20gc2V0dGluZ3NcbiAgICB7XG4gICAgICBjb25zdCBzb3J0ZWRDb2x1bW4gPSB0aGlzLmdldFNvcnRlZENvbHVtbigpO1xuICAgICAgdGhpcy5kZWZhdWx0U29ydEJ5ID0gc29ydGVkQ29sdW1uLmlkO1xuICAgICAgdGhpcy5kZWZhdWx0U29ydERpcmVjdGlvbiA9IHNvcnRlZENvbHVtbi5zdGFydDtcbiAgICB9XG5cbiAgICB0aGlzLmRlZmF1bHRQYWdlU2l6ZSA9IHRoaXMuZ2V0UGFnZVNpemUoKTtcblxuICAgIC8vIFByb3BhZ2F0ZSBlcnJvciB0byBldmVudCBlbWl0dGVyXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbih0aGlzLmVycm9yU3ViamVjdC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB0aGlzLm9uRXJyb3IuZW1pdCh2YWx1ZSkpKTtcblxuICAgIC8vIFByb3BhZ2F0ZSBkaXJ0eSB0byBldmVudCBlbWl0dGVyXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbih0aGlzLmRpcnR5U3ViamVjdC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB0aGlzLm9uRGlydHkuZW1pdCh2YWx1ZSkpKTtcblxuICAgIC8vIFByb3BhZ2F0ZSByb3cgZGlydHkgc3RhdGUgdG8gdGFibGVcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5vblN0YXJ0RWRpdGluZ1Jvd1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKHJvdykgPT4gcm93Py52YWxpZGF0b3IgJiYgdHJ1ZSksXG4gICAgICAgICAgbWVyZ2VNYXAoKHJvdykgPT5cbiAgICAgICAgICAgIHJvdy52YWxpZGF0b3IudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgIGZpbHRlcigoKSA9PiByb3cudmFsaWRhdG9yLmRpcnR5KSxcbiAgICAgICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICAgICAgLy90YXAoKCkgPT4gY29uc29sZS5kZWJ1ZyhcIlByb3BhZ2F0ZSByb3cncyBkaXJ0eSB0byB0YWJsZS4uLlwiKSlcblxuICAgICAgICAgICAgICAvLyBTdG9wIGlmIG5leHQgYW5vdGhlciByb3csIG9yIGRlc3Ryb3lpbmdcbiAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMub25TdGFydEVkaXRpbmdSb3cpLFxuICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95U3ViamVjdClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLm1hcmtBc0RpcnR5KCkpXG4gICAgKTtcblxuICAgIC8vIENhbGwgZGF0YXNvdXJjZSByZWZyZXNoLCBvbiBlYWNoIHJlZnJlc2ggZXZlbnRzXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMub25SZWZyZXNoXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHN0YXJ0V2l0aDxhbnk+KCh0aGlzLmF1dG9Mb2FkID8ge30gOiAnc2tpcCcpIGFzIGFueSksXG4gICAgICAgICAgc3dpdGNoTWFwKChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICAgICAgaWYgKGV2ZW50ID09PSAnc2tpcCcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2RhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gU2tpcHBpbmcgZGF0YSBsb2FkOiBubyBkYXRhU291cmNlIGRlZmluZWQnKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3RhYmxlXSBDYWxsaW5nIGRhdGFTb3VyY2Uud2F0Y2hBbGwoKS4uLicpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2VcbiAgICAgICAgICAgICAgLndhdGNoQWxsKHRoaXMucGFnZU9mZnNldCwgdGhpcy5wYWdlU2l6ZSwgdGhpcy5zb3J0QWN0aXZlLCB0aGlzLnNvcnREaXJlY3Rpb24sIHRoaXMuX2ZpbHRlcilcbiAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMub25SZWZyZXNoKSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgdGhpcy5zZXRFcnJvcigoZXJyICYmIGVyci5tZXNzYWdlKSB8fCBlcnIpO1xuICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7IC8vIENvbnRpbnVlXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHRoaXMudXBkYXRlVmlldyhyZXMgYXMgTG9hZFJlc3VsdDxUPiB8IHVuZGVmaW5lZCkpXG4gICAgKTtcblxuICAgIC8vIExpc3RlbiBkYXRhU291cmNlIGxvYWRpbmcgZXZlbnRzXG4gICAgaWYgKHRoaXMuX2RhdGFTb3VyY2UpIHRoaXMubGlzdGVuRGF0YVNvdXJjZUxvYWRpbmcodGhpcy5fZGF0YVNvdXJjZSk7XG5cbiAgICAvLyBQZXJtYW5lbnQgc2VsZWN0aW9uIGJlaGF2aW9yXG4gICAgaWYgKHRoaXMucGVybWFuZW50U2VsZWN0aW9uQWxsb3dlZCkgdGhpcy5pbml0UGVybWFuZW50U2VsZWN0aW9uKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgLy8gRGV0ZWN0IHdoZW4gcGFyZW50IG5nT25Jbml0KCkgbm90IGNhbGxcbiAgICBpZiAodGhpcy5kZWJ1ZyAmJiAhdGhpcy5kaXNwbGF5ZWRDb2x1bW5zKVxuICAgICAgY29uc29sZS53YXJuKGBbdGFibGVdIE1pc3NpbmcgJ2Rpc3BsYXllZENvbHVtbnMnLiBEaWQgeW91IGNhbGwgcGFyZW50IG5nT25Jbml0KCkgaW4gY29tcG9uZW50ICR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSA/YCk7XG5cbiAgICAvLyBTdGFydCBsaXN0ZW5pbmcgc29ydCBhbmQgcGFnaW5hdG9yIGV2ZW50c1xuICAgIC8vIG5vaW5zcGVjdGlvbiBKU0lnbm9yZWRQcm9taXNlRnJvbUNhbGxcbiAgICB0aGlzLmxpc3RlblNvcnRBbmRQYWdpbmF0aW9uRXZlbnRzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcblxuICAgIC8vIFVuc3Vic2NyaWJlIGNvbHVtbiB2YWx1ZSBjaGFuZ2VzXG4gICAgT2JqZWN0LmtleXModGhpcy5fY2VsbFZhbHVlQ2hhbmdlc0RlZnMpLmZvckVhY2goKGNvbCkgPT4gdGhpcy5zdG9wQ2VsbFZhbHVlQ2hhbmdlcyhjb2wsIHRydWUpKTtcbiAgICB0aGlzLl9jZWxsVmFsdWVDaGFuZ2VzRGVmcyA9IHt9O1xuXG4gICAgdGhpcy5yZWFkeVN1YmplY3QudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmxvYWRpbmdTdWJqZWN0LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zYXZpbmdTdWJqZWN0LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5lcnJvclN1YmplY3QudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmRpcnR5U3ViamVjdC51bnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5vblJlZnJlc2gudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uT3BlblJvdy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25OZXdSb3cudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uU3RhcnRFZGl0aW5nUm93LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkNvbmZpcm1FZGl0Q3JlYXRlUm93LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkNhbmNlbE9yRGVsZXRlUm93LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkJlZm9yZURlbGV0ZVJvd3MudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uQmVmb3JlQ2FuY2VsUm93cy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25CZWZvcmVTYXZlLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkFmdGVyRGVsZXRlZFJvd3MudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uU29ydC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25EaXJ0eS51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25FcnJvci51bnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5kZXN0cm95U3ViamVjdC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95U3ViamVjdC51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlVmlldyhcbiAgICByZXM6IExvYWRSZXN1bHQ8VD4gfCB1bmRlZmluZWQsXG4gICAgb3B0cz86IHtcbiAgICAgIGVtaXRFdmVudD86IGJvb2xlYW47XG4gICAgfVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXJlcykgcmV0dXJuOyAvLyBTa2lwIChlLmcgZXJyb3IpXG4gICAgaWYgKHJlcyAmJiByZXMuZGF0YSkge1xuICAgICAgdGhpcy52aXNpYmxlUm93Q291bnQgPSByZXMuZGF0YS5sZW5ndGg7XG4gICAgICB0aGlzLnRvdGFsUm93Q291bnQgPSBpc05vdE5pbChyZXMudG90YWwpXG4gICAgICAgID8gcmVzLnRvdGFsXG4gICAgICAgIDogKCh0aGlzLnBhZ2luYXRvciAmJiB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggKiAodGhpcy5wYWdpbmF0b3IucGFnZVNpemUgfHwgREVGQVVMVF9QQUdFX1NJWkUpKSB8fCAwKSArIHRoaXMudmlzaWJsZVJvd0NvdW50O1xuICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYFt0YWJsZV0gJHtyZXMuZGF0YS5sZW5ndGh9IHJvd3MgbG9hZGVkYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gTk8gcm93cyBsb2FkZWQnKTtcbiAgICAgIHRoaXMudG90YWxSb3dDb3VudCA9IDA7XG4gICAgICB0aGlzLnZpc2libGVSb3dDb3VudCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5tYXJrQXNVbnRvdWNoZWQoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgdGhpcy5tYXJrQXNQcmlzdGluZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB0aGlzLm1hcmtBc0xvYWRlZCh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHNldERhdGFzb3VyY2UoZGF0YXNvdXJjZTogRW50aXRpZXNUYWJsZURhdGFTb3VyY2U8VCwgRiwgSUQ+KSB7XG4gICAgaWYgKHRoaXMuX2RhdGFTb3VyY2UpIHRocm93IG5ldyBFcnJvcignW3RhYmxlXSBkYXRhU291cmNlIGFscmVhZHkgc2V0ICEnKTtcbiAgICBpZiAoZGF0YXNvdXJjZSAmJiB0aGlzLl9kYXRhU291cmNlICE9PSBkYXRhc291cmNlKSB7XG4gICAgICB0aGlzLl9kYXRhU291cmNlID0gZGF0YXNvdXJjZTtcbiAgICAgIGlmICh0aGlzLl9pbml0aWFsaXplZCkgdGhpcy5saXN0ZW5EYXRhU291cmNlTG9hZGluZyhkYXRhc291cmNlKTtcbiAgICB9XG4gIH1cblxuICByZXNldERhdGFTb3VyY2UoKSB7XG4gICAgaWYgKHRoaXMuX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl9kYXRhU291cmNlTG9hZGluZ1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy51bnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMuX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uKTtcbiAgICB9XG4gICAgdGhpcy5fZGF0YVNvdXJjZSA9IG51bGw7XG4gIH1cblxuICBhZGRDb2x1bW5EZWYoY29sdW1uOiBDZGtDb2x1bW5EZWYpIHtcbiAgICB0aGlzLnRhYmxlLmFkZENvbHVtbkRlZihjb2x1bW4pO1xuICB9XG5cbiAgcmVtb3ZlQ29sdW1uRGVmKGNvbHVtbjogQ2RrQ29sdW1uRGVmKSB7XG4gICAgdGhpcy50YWJsZS5yZW1vdmVDb2x1bW5EZWYoY29sdW1uKTtcbiAgfVxuXG4gIHNldEZpbHRlcihmaWx0ZXI6IEYsIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW47IHBlcm1hbmVudFNlbGVjdGlvbkNoYW5nZWRQcmV2ZW50ZWQ/OiBib29sZWFuIH0pIHtcbiAgICBvcHRzID0gb3B0cyB8fCB7IGVtaXRFdmVudDogdHJ1ZSB9O1xuXG4gICAgLy8gUHJldmVudCBwZXJtYW5lbnQgc2VsZWN0aW9uIGNoYW5nZSBldmVudHNcbiAgICB0aGlzLnBlcm1hbmVudFNlbGVjdGlvbkNoYW5nZWRQcmV2ZW50ZWQgPSB0b0Jvb2xlYW4ob3B0cy5wZXJtYW5lbnRTZWxlY3Rpb25DaGFuZ2VkUHJldmVudGVkLCB0aGlzLnBlcm1hbmVudFNlbGVjdGlvbkNoYW5nZWRQcmV2ZW50ZWQpO1xuXG4gICAgaWYgKHRoaXMuc2F2ZUJlZm9yZUZpbHRlcikge1xuICAgICAgLy8gaWYgYSBkaXJ0eSB0YWJsZSBpcyB0byBiZSBzYXZlZCBiZWZvcmUgZmlsdGVyXG4gICAgICBpZiAodGhpcy5kaXJ0eSkge1xuICAgICAgICAvLyBTYXZlXG4gICAgICAgIHRoaXMuc2F2ZUJlZm9yZUFjdGlvbignZmlsdGVyJykudGhlbigoc2F2ZWQpID0+IHtcbiAgICAgICAgICAvLyBBcHBseSBmaWx0ZXIgb25seSBpZiB1c2VyIGRpZG4ndCBjYW5jZWwgdGhlIHNhdmUgb3IgdGhlIHNhdmUgaXMgb2tcbiAgICAgICAgICBpZiAoc2F2ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoZmlsdGVyLCBvcHRzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYXBwbHkgZmlsdGVyIG9uIG5vbi1kaXJ0eSB0YWJsZVxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVyKGZpbHRlciwgb3B0cyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGFwcGx5IGZpbHRlciBkaXJlY3RseVxuICAgICAgdGhpcy5hcHBseUZpbHRlcihmaWx0ZXIsIG9wdHMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNvbmZpcm1BbmRBZGQoZXZlbnQ/OiBFdmVudCwgcm93PzogVGFibGVFbGVtZW50PFQ+KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLmNvbmZpcm1FZGl0Q3JlYXRlKGV2ZW50LCByb3cpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIEFkZCByb3dcbiAgICByZXR1cm4gdGhpcy5hZGRSb3coZXZlbnQpO1xuICB9XG5cbiAgY29uZmlybUFuZEJhY2t3YXJkKGV2ZW50OiBFdmVudCB8IHVuZGVmaW5lZCwgcm93PzogVGFibGVFbGVtZW50PFQ+LCBvcHRzPzogeyBmb2N1c0NvbHVtbj86IHN0cmluZyB9KTogYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghdGhpcy5pbmxpbmVFZGl0aW9uKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gRGVsZXRpbmcgZWRpdGVkIHJvdywgaWYgZW1wdHkgYW5kIG5vdCBkaXJ0eVxuICAgIGNvbnN0IHByZXZpb3VzUm93ID0gdGhpcy5lZGl0ZWRSb3c7XG5cbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpZiAocHJldmlvdXNSb3cpIHtcbiAgICAgIC8vIFByZXZpb3VzIHJvdyB3YXMgYSBuZXggcm93IEFORCBpbnZhbGlkOiBkZWxldGUgaXRcbiAgICAgIGlmIChwcmV2aW91c1Jvdy5pZCA9PT0gLTEgJiYgcHJldmlvdXNSb3cudmFsaWRhdG9yPy5pbnZhbGlkICYmICFwcmV2aW91c1Jvdy52YWxpZGF0b3I/LmRpcnR5KSB7XG4gICAgICAgIHRoaXMuZGVsZXRlTmV3Um93KGV2ZW50LCBwcmV2aW91c1Jvdyk7XG5cbiAgICAgICAgLy8gV2FpdCBkZWxldGlvbiBpcyBkb25lLCB0aGVuIGVkaXQgcHJldmlvdXMgcm93IChieSBpZCwgYmVjYXVzZSBvZiByZWxvYWRpbmcpXG4gICAgICAgIHRoaXMud2FpdElkbGUoKS50aGVuKCgpID0+IHRoaXMuZWRpdFJvd0J5SWQoZXZlbnQsIHJvdy5pZCwgeyBmb2N1c0NvbHVtbjogdGhpcy5sYXN0VXNlckNvbHVtbiB9KSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBjYW5ub3QgY29uZmlybSBwcmV2aW91cyByb3dcbiAgICAgIGVsc2UgaWYgKCF0aGlzLmNvbmZpcm1FZGl0Q3JlYXRlKGV2ZW50LCBwcmV2aW91c1JvdykpIHtcbiAgICAgICAgLy8gSWYgcGVuZGluZzogV2FpdCBlbmQgb2YgdmFsaWRhdGlvbiwgdGhlbiBsb29wXG4gICAgICAgIGlmIChwcmV2aW91c1Jvdy52YWxpZGF0b3I/LnBlbmRpbmcpIHtcbiAgICAgICAgICByZXR1cm4gQXBwRm9ybVV0aWxzLndhaXRXaGlsZVBlbmRpbmcocHJldmlvdXNSb3cudmFsaWRhdG9yLCB7IHN0b3A6IHRoaXMuZGVzdHJveVN1YmplY3QgfSkudGhlbigoKSA9PiB0aGlzLmNvbmZpcm1BbmRCYWNrd2FyZChldmVudCwgcm93KSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHbyBiYWNrIHRvIGZpcnN0IGNvbHVtblxuICAgICAgICB0aGlzLmZvY3VzQ29sdW1uID0gb3B0cz8uZm9jdXNDb2x1bW4gPz8gdGhpcy5sYXN0VXNlckNvbHVtbjtcbiAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRWRpdCByb3csIGZvY3VzaW5nIGF0IHRoZSBlbmRcbiAgICB0aGlzLmVkaXRSb3coZXZlbnQsIHJvdywgeyBmb2N1c0NvbHVtbjogb3B0cz8uZm9jdXNDb2x1bW4gPz8gdGhpcy5sYXN0VXNlckNvbHVtbiB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbmZpcm1BbmRGb3J3YXJkKGV2ZW50OiBFdmVudCB8IHVuZGVmaW5lZCwgcm93PzogVGFibGVFbGVtZW50PFQ+LCBvcHRzPzogeyBmb2N1c0NvbHVtbj86IHN0cmluZyB9KTogYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghdGhpcy5pbmxpbmVFZGl0aW9uKSByZXR1cm4gZmFsc2U7XG4gICAgcm93ID0gcm93IHx8IHRoaXMuZWRpdGVkUm93O1xuXG4gICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgLy8gSWYgbm90IGNvbmZpcm1lZFxuICAgIGlmICghdGhpcy5jb25maXJtRWRpdENyZWF0ZShldmVudCwgcm93KSkge1xuICAgICAgLy8gSWYgcGVuZGluZzogV2FpdCBlbmQgb2YgdmFsaWRhdGlvbiwgdGhlbiBsb29wXG4gICAgICBpZiAocm93LnZhbGlkYXRvcj8ucGVuZGluZykge1xuICAgICAgICByZXR1cm4gQXBwRm9ybVV0aWxzLndhaXRXaGlsZVBlbmRpbmcocm93LnZhbGlkYXRvciwgeyBzdG9wOiB0aGlzLmRlc3Ryb3lTdWJqZWN0IH0pLnRoZW4oKCkgPT4gdGhpcy5jb25maXJtQW5kRm9yd2FyZChldmVudCwgcm93KSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEdvIGJhY2sgdG8gZmlyc3QgY29sdW1uXG4gICAgICB0aGlzLmZvY3VzQ29sdW1uID0gb3B0cz8uZm9jdXNDb2x1bW4gPz8gdGhpcy5maXJzdFVzZXJDb2x1bW47XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gRWRpdCBuZXh0IHJvd1xuICAgIGNvbnN0IG5leHRSb3dJZCA9IHJvdy5pZCArIDE7XG4gICAgdGhpcy5lZGl0Um93QnlJZChldmVudCwgbmV4dFJvd0lkLCB7IGZvY3VzQ29sdW1uOiBvcHRzPy5mb2N1c0NvbHVtbiA/PyB0aGlzLmZpcnN0VXNlckNvbHVtbiB9KTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpcm0gdGhlIGNyZWF0aW9uIG9mIHRoZSBnaXZlbiByb3csIG9yIGlmIG5vdCBzcGVjaWZpZWQgdGhlIGN1cnJlbnRseSBlZGl0ZWQgcm93XG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBAcGFyYW0gcm93XG4gICAqL1xuICBjb25maXJtRWRpdENyZWF0ZShldmVudD86IEV2ZW50LCByb3c/OiBUYWJsZUVsZW1lbnQ8VD4pOiBib29sZWFuIHtcbiAgICByb3cgPSByb3cgfHwgdGhpcy5lZGl0ZWRSb3c7XG4gICAgaWYgKCFyb3cgfHwgIXJvdy5lZGl0aW5nKSByZXR1cm4gdHJ1ZTsgLy8gbm8gcm93IHRvIGNvbmZpcm1cblxuICAgIC8vIENvbmZpcm1hdGlvbiBlZGl0aW9uIG9yIGNyZWF0aW9uXG4gICAgLy8gVE9ETzogYWRkIGF3YWl0ID9cbiAgICBjb25zdCBjb25maXJtZWQgPSByb3cuY29uZmlybUVkaXRDcmVhdGUoKTtcblxuICAgIGlmIChjb25maXJtZWQpIHtcbiAgICAgIC8vIElmIGVkaXQgZmluaXNoZWQsIGZvcmdldCBlZGl0ZWQgcm93XG4gICAgICBpZiAocm93ID09PSB0aGlzLmVkaXRlZFJvdykge1xuICAgICAgICB0aGlzLmVkaXRlZFJvdyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgLy8gTWFyayB0YWJsZSBhcyBkaXJ0eSAoaWYgcm93IGlzIGRpcnR5KVxuICAgICAgaWYgKHJvdy5kaXJ0eSkge1xuICAgICAgICB0aGlzLm1hcmtBc0RpcnR5KHsgZW1pdEV2ZW50OiBmYWxzZSAvKiBiZWNhdXNlIG9mIHJlc2V0RXJyb3IoKSAqLyB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2xlYXIgZXJyb3JcbiAgICAgIHRoaXMucmVzZXRFcnJvcigpO1xuXG4gICAgICAvLyBFbWl0IHRoZSBjb25maXJtIGV2ZW50XG4gICAgICB0aGlzLm9uQ29uZmlybUVkaXRDcmVhdGVSb3cubmV4dChyb3cpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTsgLy8gQ29udGludWVcbiAgICB9XG5cbiAgICBpZiAocm93LnZhbGlkYXRvcikge1xuICAgICAgLy8gSWYgcGVuZGluZzogV2FpdCBlbmQgb2YgdmFsaWRhdGlvbiwgdGhlbiBsb29wXG4gICAgICAvLyBUT0RPOiByZW1vdmUgd2hlbiB1c2luZyBhc3luYyBpc1ZhbGlkKCkgZnVuY3Rpb25cbiAgICAgIGlmIChyb3cudmFsaWRhdG9yLnBlbmRpbmcpIHtcbiAgICAgICAgQXBwRm9ybVV0aWxzLndhaXRXaGlsZVBlbmRpbmcocm93LnZhbGlkYXRvcikudGhlbigoKSA9PiB0aGlzLmNvbmZpcm1FZGl0Q3JlYXRlKGV2ZW50LCByb3cpKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBOT1QgY29uZmlybWVkID0gcm93IGhhcyBlcnJvclxuICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbdGFibGVdIENhbm5vdCBjb25maXJtIHJvdywgYmVjYXVzZSBpbnZhbGlkJyk7XG4gICAgICAgIEFwcEZvcm1VdGlscy5sb2dGb3JtRXJyb3JzKHJvdy52YWxpZGF0b3IsICdbdGFibGVdICcpO1xuICAgICAgfVxuXG4gICAgICAvLyBmaXg6IG1hcmsgYWxsIGNvbnRyb2xzIGFzIHRvdWNoZWQgdG8gc2hvdyBlcnJvcnNcbiAgICAgIHJvdy52YWxpZGF0b3IubWFya0FsbEFzVG91Y2hlZCgpO1xuXG4gICAgICAvLyBDb21wdXRlIHJvdyBlcnJvciwgYW5kIHByb3BhZ2F0ZSB0byB0YWJsZSdzIGVycm9yXG4gICAgICBpZiAodGhpcy5wcm9wYWdhdGVSb3dFcnJvcikge1xuICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMuZ2V0Um93RXJyb3Iocm93KTtcbiAgICAgICAgdGhpcy5zZXRFcnJvcihlcnJvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTm90IGNvbmZpcm1lZFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNhbmNlbE9yRGVsZXRlKGV2ZW50OiBFdmVudCwgcm93OiBUYWJsZUVsZW1lbnQ8VD4sIG9wdHM/OiB7IGludGVyYWN0aXZlPzogYm9vbGVhbjsga2VlcEVkaXRpbmc/OiBib29sZWFuIH0pIHtcbiAgICAvLyBEZWxldGUgbmV3IHJvd1xuICAgIGlmIChyb3cuaWQgPT09IC0xKSB7XG4gICAgICB0aGlzLmRlbGV0ZU5ld1JvdyhldmVudCwgcm93KTtcbiAgICB9XG4gICAgLy8gRGVsZXRlIGV4aXN0aW5nIChidXQgbm90IGVkaXRpbmcpIHJvd1xuICAgIGVsc2UgaWYgKCFyb3cuZWRpdGluZykge1xuICAgICAgdGhpcy5kZWxldGVFeGlzdGluZ1JvdyhldmVudCwgcm93LCBvcHRzKTtcbiAgICB9XG4gICAgLy8gQ2FuY2VsIGV4aXN0aW5nIChhbmQgZWRpdGluZykgcm93XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmNhbmNlbEV4aXN0aW5nUm93KGV2ZW50LCByb3csIG9wdHMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGFkZFJvdyhldmVudD86IEV2ZW50LCBpbnNlcnRBdD86IG51bWJlciwgb3B0cz86IHsgZm9jdXNDb2x1bW4/OiBzdHJpbmc7IGVkaXRpbmc/OiBib29sZWFuIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3RhYmxlXSBBc2tpbmcgZm9yIG5ldyByb3cuLi4nKTtcbiAgICBpZiAoIXRoaXMuX2VuYWJsZWQpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIFVzZSBtb2RhbCBpZiBpbmxpbmUgZWRpdGlvbiBpcyBkaXNhYmxlZFxuICAgIGlmICghdGhpcy5pbmxpbmVFZGl0aW9uKSB7XG4gICAgICB0aGlzLm9wZW5OZXdSb3dEZXRhaWwoZXZlbnQpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRyeSB0byBmaW5pc2ggZWRpdGVkIHJvdyBmaXJzdFxuICAgIGlmICghdGhpcy5jb25maXJtRWRpdENyZWF0ZSgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQWRkIG5ldyByb3dcbiAgICBjb25zdCByb3cgPSBhd2FpdCB0aGlzLmFkZFJvd1RvVGFibGUoaW5zZXJ0QXQsIG9wdHMpO1xuICAgIHJldHVybiAhIXJvdztcbiAgfVxuXG4gIGFzeW5jIHNhdmUob3B0cz86IHsga2VlcEVkaXRpbmc/OiBib29sZWFuIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBvcHRzID0ge1xuICAgICAga2VlcEVkaXRpbmc6IHRoaXMua2VlcEVkaXRlZFJvd09uU2F2ZSxcbiAgICAgIC4uLm9wdHMsXG4gICAgfTtcbiAgICBpZiAodGhpcy5yZWFkT25seSkge1xuICAgICAgdGhyb3cgeyBjb2RlOiBFcnJvckNvZGVzLlRBQkxFX1JFQURfT05MWSwgbWVzc2FnZTogJ0VSUk9SLlRBQkxFX1JFQURfT05MWScgfTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcblxuICAgIC8vIEtlZXAgZWRpdGVkIHJvdyBpZCAoc2hvdWxkIGJlIGRvbmUgQkVGT1JFIGNvbmZpcm1FZGl0Q3JlYXRlKCkgKVxuICAgIHRoaXMucHJldmlvdXNseUVkaXRlZFJvd0lkID0gb3B0cy5rZWVwRWRpdGluZ1xuICAgICAgPyAodGhpcy5lZGl0ZWRSb3c/LmVkaXRpbmcgPyB0aGlzLmVkaXRlZFJvdy5pZCA6IHVuZGVmaW5lZCkgfHwgdGhpcy5zaW5nbGVTZWxlY3RlZFJvdz8uaWRcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHByZXZpb3VzbHlFZGl0ZWRSb3dJZCA9IHRoaXMucHJldmlvdXNseUVkaXRlZFJvd0lkO1xuICAgIGNvbnN0IHByZXZpb3VzbHlFZGl0ZWREYXRhID0gb3B0cy5rZWVwRWRpdGluZ1xuICAgICAgPyAoaXNOb3ROaWwocHJldmlvdXNseUVkaXRlZFJvd0lkKSAmJiB0aGlzLmVkaXRlZFJvdz8uY3VycmVudERhdGEpIHx8IHRoaXMuc2luZ2xlU2VsZWN0ZWRSb3c/LmN1cnJlbnREYXRhXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmICghdGhpcy5jb25maXJtRWRpdENyZWF0ZSgpKSB7XG4gICAgICB0aHJvdyB7IGNvZGU6IEVycm9yQ29kZXMuVEFCTEVfSU5WQUxJRF9ST1dfRVJST1IsIG1lc3NhZ2U6ICdFUlJPUi5UQUJMRV9JTlZBTElEX1JPV19FUlJPUicgfTtcbiAgICB9XG5cbiAgICAvLyBNYXJrIGFzIHNhdmluZ1xuICAgIHRoaXMubWFya0FzU2F2aW5nKCk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gQ2FsbGluZyBzZXJ2aWNlIHNhdmUoKVxuICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gQ2FsbGluZyBkYXRhU291cmNlLnNhdmUoKS4uLicpO1xuICAgICAgY29uc3QgaXNPSyA9IGF3YWl0IHRoaXMuX2RhdGFTb3VyY2Uuc2F2ZSgpO1xuXG4gICAgICBpZiAoaXNPSykgdGhpcy5tYXJrQXNQcmlzdGluZSgpO1xuXG4gICAgICByZXR1cm4gaXNPSztcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuc2V0RXJyb3IoKGVyciAmJiBlcnIubWVzc2FnZSkgfHwgZXJyKTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5tYXJrQXNTYXZlZCgpO1xuXG4gICAgICAvLyBSZXN0b3JlIHByZXZpb3VzIHJvd1xuICAgICAgaWYgKGlzTm90TmlsKHByZXZpb3VzbHlFZGl0ZWRSb3dJZCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zZWxlY3RSb3dCeUlkT3JEYXRhKHByZXZpb3VzbHlFZGl0ZWRSb3dJZCwgcHJldmlvdXNseUVkaXRlZERhdGEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNhbmNlbChldmVudD86IEV2ZW50LCBvcHRzPzogeyBpbnRlcmFjdGl2ZT86IGJvb2xlYW4gfSkge1xuICAgIC8vIENoZWNrIGNvbmZpcm1hdGlvblxuICAgIGlmICgoIW9wdHMgfHwgb3B0cy5pbnRlcmFjdGl2ZSAhPT0gZmFsc2UpICYmIHRoaXMuZGlydHkgJiYgKHRoaXMuY29uZmlybUJlZm9yZUNhbmNlbCB8fCB0aGlzLm9uQmVmb3JlQ2FuY2VsUm93cy5vYnNlcnZlZCkpIHtcbiAgICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMuY2FuQ2FuY2VsUm93cygpLnRoZW4oKGNvbmZpcm0pID0+IHtcbiAgICAgICAgLy8gSWYgY29uZmlybWVkLCBsb29wXG4gICAgICAgIGlmIChjb25maXJtKSB0aGlzLmNhbmNlbChudWxsLCB7IGludGVyYWN0aXZlOiBmYWxzZSB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZW1pdFJlZnJlc2goKTtcbiAgfVxuXG4gIGFzeW5jIGR1cGxpY2F0ZVJvdyhcbiAgICBldmVudD86IEV2ZW50LFxuICAgIHJvdz86IFRhYmxlRWxlbWVudDxUPixcbiAgICBvcHRzPzoge1xuICAgICAgaW5jbHVkZWRQcm9wZXJ0aWVzPzogc3RyaW5nW107XG4gICAgICBleGNsdWRlZFByb3BlcnRpZXM/OiBzdHJpbmdbXTtcbiAgICB9XG4gICkge1xuICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIHJvdyA9IHJvdyB8fCB0aGlzLnNpbmdsZVNlbGVjdGVkUm93O1xuICAgIGlmICghcm93IHx8ICF0aGlzLmNvbmZpcm1FZGl0Q3JlYXRlKGV2ZW50LCByb3cpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3Um93ID0gYXdhaXQgdGhpcy5hZGRSb3dUb1RhYmxlKHJvdy5pZCArIDEpO1xuICAgIGlmICghbmV3Um93KSB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhZGQgbmV3IHJvdyB0byB0YWJsZScpO1xuXG4gICAgY29uc3Qgc291cmNlID0gcm93LmNsb25lRGF0YSgpO1xuICAgIGxldCB0YXJnZXQ6IGFueTtcblxuICAgIC8vIENvcHkgaW5jbHVkZWQgcHJvcGVydGllcyBvbmx5XG4gICAgaWYgKGlzTm90RW1wdHlBcnJheShvcHRzPy5pbmNsdWRlZFByb3BlcnRpZXMpKSB7XG4gICAgICB0YXJnZXQgPSB7fTtcbiAgICAgIC8vIENsb25lIChkZWVwIGNvcHkpXG4gICAgICBvcHRzLmluY2x1ZGVkUHJvcGVydGllcy5mb3JFYWNoKChwYXRoKSA9PiB7XG4gICAgICAgIHNldFByb3BlcnR5QnlQYXRoKHRhcmdldCwgcGF0aCwgZ2V0UHJvcGVydHlCeVBhdGgoc291cmNlLCBwYXRoKSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBDb3B5IGFsbCBwcm9wZXJ0aWVzXG4gICAgZWxzZSB7XG4gICAgICB0YXJnZXQgPSBzb3VyY2U7XG5cbiAgICAgIC8vIENsZWFuIGlkIGFuZCB1cGRhdGVEYXRlXG4gICAgICBFbnRpdHlVdGlscy5jbGVhbklkQW5kVXBkYXRlRGF0ZSh0YXJnZXQsIHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgLy8gUmVzdG9yZSBleGNsdWRlZCBwcm9wZXJ0aWVzIChlLmcuIHJhbmtPcmRlciwgZXRjKVxuICAgIGlmIChpc05vdEVtcHR5QXJyYXkob3B0cz8uZXhjbHVkZWRQcm9wZXJ0aWVzKSkge1xuICAgICAgY29uc3QgbmV3RGF0YSA9IG5ld1Jvdy5jdXJyZW50RGF0YTtcbiAgICAgIG9wdHMuZXhjbHVkZWRQcm9wZXJ0aWVzLmZvckVhY2goKHBhdGgpID0+IHtcbiAgICAgICAgc2V0UHJvcGVydHlCeVBhdGgodGFyZ2V0LCBwYXRoLCBnZXRQcm9wZXJ0eUJ5UGF0aChuZXdEYXRhLCBwYXRoKSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAobmV3Um93LnZhbGlkYXRvcikge1xuICAgICAgbmV3Um93LnZhbGlkYXRvci5wYXRjaFZhbHVlKHRhcmdldCk7XG4gICAgICBuZXdSb3cudmFsaWRhdG9yLm1hcmtBc0RpcnR5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChuZXdSb3cuY3VycmVudERhdGE/LmZyb21PYmplY3QpIHtcbiAgICAgICAgbmV3Um93LmN1cnJlbnREYXRhLmZyb21PYmplY3QodGFyZ2V0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1Jvdy5jdXJyZW50RGF0YSA9IHRhcmdldDtcbiAgICAgIH1cbiAgICAgIHRoaXMubWFya0FzRGlydHkoKTtcbiAgICB9XG5cbiAgICAvLyBzZWxlY3RcbiAgICB0aGlzLmNsaWNrUm93KHVuZGVmaW5lZCwgbmV3Um93KTtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgZWxlbWVudHMgbWF0Y2hlcyB0aGUgdG90YWwgbnVtYmVyIG9mIHJvd3MuICovXG4gIGlzQWxsU2VsZWN0ZWQoKSB7XG4gICAgLy8gREVCVUdcbiAgICAvL2NvbnNvbGUuZGVidWcoJ2lzQWxsU2VsZWN0ZWQuIGxlbmd0aHMnLCB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGgsIHRoaXMudG90YWxSb3dDb3VudCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoID09PSB0aGlzLnRvdGFsUm93Q291bnQgfHwgdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoID09PSB0aGlzLnZpc2libGVSb3dDb3VudDtcbiAgfVxuXG4gIC8qKiBTZWxlY3RzIGFsbCByb3dzIGlmIHRoZXkgYXJlIG5vdCBhbGwgc2VsZWN0ZWQ7IG90aGVyd2lzZSBjbGVhciBzZWxlY3Rpb24uICovXG4gIGFzeW5jIG1hc3RlclRvZ2dsZSgpIHtcbiAgICBpZiAodGhpcy5sb2FkaW5nKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaXNBbGxTZWxlY3RlZCgpKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByb3dzID0gdGhpcy5fZGF0YVNvdXJjZS5nZXRSb3dzKCk7XG4gICAgICB0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oLi4ucm93cyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlU2VsZWN0aW9uKGV2ZW50OiBFdmVudCwgb3B0cz86IHsgaW50ZXJhY3RpdmU/OiBib29sZWFuIH0pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IGRlbGV0ZUNvdW50ID0gYXdhaXQgdGhpcy5kZWxldGVSb3dzKGV2ZW50LCB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCwgb3B0cyk7XG4gICAgaWYgKGRlbGV0ZUNvdW50ID4gMCkgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICByZXR1cm4gZGVsZXRlQ291bnQ7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIEBwYXJhbSByb3dcbiAgICogQHBhcmFtIG9wdHMgVXNlIGludGVyYWN0aXZlPWZhbHNlIHRvIGF2b2lkIHVzZXIgaW50ZXJhY3Rpb24gKGUuZy4gdXNlciBjb25maXJtYXRpb24pXG4gICAqICBBbmQgdG8gZm9yY2UgZGVsZXRpb24gZXZlbiBpZiB0YWJsZSBpcyBidXN5XG4gICAqL1xuICBhc3luYyBkZWxldGVSb3coZXZlbnQ6IEV2ZW50IHwgbnVsbCwgcm93OiBUYWJsZUVsZW1lbnQ8VD4sIG9wdHM/OiB7IGludGVyYWN0aXZlPzogYm9vbGVhbiB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgZGVsZXRlQ291bnQgPSBhd2FpdCB0aGlzLmRlbGV0ZVJvd3MoZXZlbnQsIFtyb3ddLCBvcHRzKTtcbiAgICByZXR1cm4gZGVsZXRlQ291bnQgPT09IDE7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIEBwYXJhbSByb3dzXG4gICAqIEBwYXJhbSBvcHRzIFVzZSBpbnRlcmFjdGl2ZT1mYWxzZSB0byBhdm9pZCB1c2VyIGludGVyYWN0aW9uIChlLmcuIHVzZXIgY29uZmlybWF0aW9uKVxuICAgKiAgICBBbmQgdG8gZm9yY2UgZGVsZXRpb24gZXZlbiBpZiB0YWJsZSBpcyBidXN5XG4gICAqL1xuICBhc3luYyBkZWxldGVSb3dzKGV2ZW50OiBFdmVudCB8IG51bGwsIHJvd3M6IFRhYmxlRWxlbWVudDxUPltdLCBvcHRzPzogeyBpbnRlcmFjdGl2ZT86IGJvb2xlYW4gfSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcbiAgICAgIHRocm93IHsgY29kZTogRXJyb3JDb2Rlcy5UQUJMRV9SRUFEX09OTFksIG1lc3NhZ2U6ICdFUlJPUi5UQUJMRV9SRUFEX09OTFknIH07XG4gICAgfVxuICAgIGlmIChldmVudD8uZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuIDA7IC8vIFNLaXBcbiAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcblxuICAgIGlmICghdGhpcy5fZW5hYmxlZCB8fCBpc0VtcHR5QXJyYXkocm93cykpIHJldHVybiAwOyAvLyBTa2lwIGlzIGRpc2FibGVkLCBvciBubyByb3dzIHRvIGRlbGV0ZVxuXG4gICAgaWYgKHRoaXMubG9hZGluZyAmJiAoIW9wdHMgfHwgb3B0cy5pbnRlcmFjdGl2ZSAhPT0gZmFsc2UpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1thcHAtdGFibGVdIFNraXAgZGVsZXRlUm93cygpIGJlY2F1c2UgdGFibGUgaXMgYnVzeSAobG9hZGluZykuIFVzZSBvcHRzLmludGVyYWN0aXZlID0gZmFsc2UgdG8gZm9yY2UgZGVsZXRpb24nKTtcbiAgICAgIHJldHVybiAwOyAvLyBTa2lwIGlmIGxvYWRpbmdcbiAgICB9XG5cbiAgICAvLyBNYWtlIHN1cmUgdG8ga2VlcCBuZXdseSBjcmVhdGVkIHJvd1xuICAgIGlmICh0aGlzLmVkaXRlZFJvdz8uaWQgPT09IC0xICYmIHRoaXMuZWRpdGVkUm93LmVkaXRpbmcgJiYgIXJvd3MuaW5jbHVkZXModGhpcy5lZGl0ZWRSb3cpKSB7XG4gICAgICBjb25zdCBjb25maXJtZWQgPSB0aGlzLmNvbmZpcm1FZGl0Q3JlYXRlKCk7XG4gICAgICBpZiAoIWNvbmZpcm1lZCkgcmV0dXJuIDA7IC8vIENhbm5vdCBkZWxldGUgKGUuZy4gZWRpdGVkIHJvdyBpcyBpbnZhbGlkKVxuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIGNhbiBkZWxldGVcbiAgICBjb25zdCBjYW5EZWxldGUgPSBhd2FpdCB0aGlzLmNhbkRlbGV0ZVJvd3Mocm93cywgb3B0cyk7XG4gICAgaWYgKCFjYW5EZWxldGUpIHJldHVybiAwOyAvLyBDYW5ub3QgZGVsZXRlXG5cbiAgICAvLyBSZXZlcnNlIHJvdyBvcmRlciAob24gYSBjb3B5KVxuICAgIC8vIFRoaXMgaXMgYSB3b3JrYXJvdW5kLCBuZWVkIGJlY2F1c2Ugcm93LmRlbGV0ZSgpIGhhcyBhc3luYyBleGVjdXRpb25cbiAgICAvLyBhbmQgaW5kZXggY2FjaGUgaXMgdXBkYXRlZCB3aXRoIGEgZGVsYXlcbiAgICBsZXQgdGVtcFJvd3MgPSByb3dzLnNsaWNlKCkuc29ydCgoYSwgYikgPT4gKGEuaWQgPiBiLmlkID8gLTEgOiAxKSk7XG5cbiAgICBjb25zdCBkZWxldGVkUm93czogVGFibGVFbGVtZW50PFQ+W10gPSBbXTtcblxuICAgIC8vIElmIGRhdGEgbmVlZCB0byBiZSBzYXZlZCBmaXJzdFxuICAgIGlmICh0aGlzLnNhdmVCZWZvcmVEZWxldGUpIHtcbiAgICAgIC8vIEV4Y2x1ZGUgaW52YWxpZCByb3dzIChiZWNhdXNlIG9mIHNhdmUoKSB3aWxsIGZhaWwsIHdoZW4gZXhpc3RzIHNvbWUgaW52YWxpZCByb3dzKVxuICAgICAgdGVtcFJvd3MgPSB0ZW1wUm93cy5maWx0ZXIoKHJvdykgPT4ge1xuICAgICAgICAvLyBEZWxldGUgdGhlIHJvdyA6XG4gICAgICAgIC8vIC0gaWYgbmV3bHkgY3JlYXRlZCByb3cgKGlkID0gLTEpLFxuICAgICAgICAvLyAtIG9yIGlmIGludmFsaWQgYW5kIG5vdCBlZGl0aW5nICg9IG5vdCBjYW5jZWxsYWJsZSlcbiAgICAgICAgaWYgKHJvdy5pZCA9PT0gLTEgfHwgKCFyb3cuZWRpdGluZyAmJiByb3cuaW52YWxpZCkgLypkbyBub3QgdXNlICF2YWxpZCBiZWNhdXNlIGlmIHJvdyBpcyBkaXNhYmxlZCwgaXQgd2lsbCBiZSBhbHdheXMgIXZhbGlkICovKSB7XG4gICAgICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYFt0YWJsZV0gRGVsZXRlIHJvdyAjJHtyb3cuaWR9YCk7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb24uZGVzZWxlY3Qocm93KTtcbiAgICAgICAgICByb3cuZGVsZXRlKCk7XG4gICAgICAgICAgdGhpcy52aXNpYmxlUm93Q291bnQtLTtcbiAgICAgICAgICB0aGlzLnRvdGFsUm93Q291bnQtLTtcbiAgICAgICAgICBkZWxldGVkUm93cy5wdXNoKHJvdyk7XG4gICAgICAgICAgaWYgKHRoaXMuZWRpdGVkUm93ID09PSByb3cpIHRoaXMuZWRpdGVkUm93ID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gRXhjbHVkZSBmcm9tIHRoZSBsaXN0IHRvIGRlbGV0ZSB1c2luZyB0aGUgc2VydmljZVxuICAgICAgICB9XG4gICAgICAgIC8vIENhbmNlbCB0aGUgcm93IChhbmQgbWFyayBhcyBwcmlzdGluZSksIHdoZW4gbm90IHZhbGlkIGJ1dCBpbiBlZGl0aW9uXG4gICAgICAgIGVsc2UgaWYgKHJvdy5lZGl0aW5nICYmICFyb3cudmFsaWQpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5kZXNlbGVjdChyb3cpO1xuICAgICAgICAgIHJvdy5jYW5jZWwoKTtcbiAgICAgICAgICAvLyBNYXJrIHJvdyBhcyBwcmlzdGluZSAoaWYgcG9zc2libGUpXG4gICAgICAgICAgdGhpcy5jaGVja0lmUm93UHJpc3RpbmUocm93LCB7IGVtaXRFdmVudDogZmFsc2UsIG9ubHlTZWxmOiB0cnVlIC8qYXZvaWQgcHJvcGFnYXRpb24gdG8gdGFibGUqLyB9KTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gS2VlcCB0aGUgcm93LiB0aGUgcm93IHdpbGwgYmUgZGVsZXRlZCBhZnRlciB0aGUgc2F2ZVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcblxuICAgICAgLy8gQXBwbHkgc2F2ZSwgb25seSBpZiB0aGVyZSBpcyBzdGlsbCBzb21lIHJvd3MgdG8gZGVsZXRlXG4gICAgICAvLyBXQVJOOiBJZiBubyBtb3JlIHJvd3MgKGUuZy4gYmVjYXVzZSBhbGwgaGFzIGJlZW4gY2FuY2VsbGVkKSB0aGVuIGNvbnRpbnVlIGFueXdheSB0byBjbGVhciBlZGl0ZWRSb3cgYW5kIHNlbGVjdGlvbiAoaXNzdWUgSU1BR0lORS02NjkpXG4gICAgICBpZiAoZGVsZXRlZFJvd3MubGVuZ3RoIHx8IHRlbXBSb3dzLmxlbmd0aCkge1xuICAgICAgICAvLyBTYXZlIGRhdGEgKGUuZy4gd2hlbiB1c2luZyBtZW1vcnkgc2VydmljZSlcbiAgICAgICAgY29uc3Qgc2F2ZWQgPSBhd2FpdCB0aGlzLnNhdmVCZWZvcmVBY3Rpb24oJ2RlbGV0ZScpO1xuICAgICAgICBpZiAoIXNhdmVkKSB7XG4gICAgICAgICAgLy8gU3RvcCBpZiBzYXZlIGNhbmNlbGxlZCBvciBzYXZlIGZhaWxlZFxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBBcHBseSBkZWxldGlvbiBvbiBkYXRhc291cmNlXG4gICAgICAvLyBJZiBubyBtb3JlIHJvd3MgdG8gZGVsZXRlLCBjb250aW51ZSBhbnl3YXkgdG8gY2xlYXIgZWRpdGVkUm93IGFuZCBzZWxlY3Rpb24gKGlzc3VlIElNQUdJTkUtNjY5KVxuICAgICAgaWYgKHRlbXBSb3dzLmxlbmd0aCkge1xuICAgICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW3RhYmxlXSBEZWxldGUgJHt0ZW1wUm93cy5sZW5ndGh9IHJvd3MuLi5gKTtcbiAgICAgICAgYXdhaXQgdGhpcy5fZGF0YVNvdXJjZS5kZWxldGVBbGwodGVtcFJvd3MpO1xuICAgICAgfVxuXG4gICAgICAvLyBETyBub3QgdXBkYXRlIG1hbnVhbGx5LCBiZWNhdXNlIHdhdGNoQUxsKCkuc3Vic2NyaWJlKCkgd2lsbCB1cGRhdGUgdGhpcyBjb3VudFxuICAgICAgLy90aGlzLnRvdGFsUm93Q291bnQgLT0gZGVsZXRlQ291bnQ7XG4gICAgICAvL3RoaXMudmlzaWJsZVJvd0NvdW50IC09IGRlbGV0ZUNvdW50O1xuXG4gICAgICAvLyBEZXNlbGVjdCBkZWxldGVkIHJvd3NcbiAgICAgIHRoaXMuc2VsZWN0aW9uLmRlc2VsZWN0KC4uLnJvd3MpO1xuXG4gICAgICB0aGlzLmVkaXRlZFJvdyA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMubWFya0FzRGlydHkoeyBlbWl0RXZlbnQ6IGZhbHNlIC8qbWFya0ZvckNoZWNrKCkgaXMgY2FsbGVkIGp1c3QgYWZ0ZXIqLyB9KTtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG5cbiAgICAgIHRoaXMub25BZnRlckRlbGV0ZWRSb3dzLm5leHQocm93cyk7XG5cbiAgICAgIHJldHVybiByb3dzLmxlbmd0aDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuc2V0RXJyb3IoKGVyciAmJiBlcnIubWVzc2FnZSkgfHwgZXJyKTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzZWxlY3RSb3dCeUlkKGlkOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoaWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlO1xuICAgIGF3YWl0IHRoaXMud2FpdElkbGUoKTtcbiAgICBjb25zdCByb3cgPSB0aGlzLmRhdGFTb3VyY2UuZ2V0Um93KGlkKTtcbiAgICBpZiAoIXJvdykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmNsaWNrUm93KG51bGwsIHJvdyk7XG4gIH1cblxuICAvKipcbiAgICogVHJ5IHRvIHNlbGVjdCByb3cgYnkgZGF0YS4gV2lsbCB1c2UgZXF1YWxzKCkgdG8gZmluZCBzYW1lIHJvdydzIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIGRhdGFcbiAgICovXG4gIGFzeW5jIHNlbGVjdFJvd0J5RGF0YShkYXRhOiBUKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKGRhdGEgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy53YWl0SWRsZSgpO1xuICAgIGNvbnN0IHJvdyA9IHRoaXMuZGF0YVNvdXJjZS5nZXRSb3dzKCkuZmluZCgocm93KSA9PiB0aGlzLmVxdWFscyhyb3cuY3VycmVudERhdGEsIGRhdGEpKTtcbiAgICBpZiAoIXJvdykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmNsaWNrUm93KG51bGwsIHJvdyk7XG4gIH1cblxuICB0b2dnbGVTZWxlY3RSb3coZXZlbnQ6IEV2ZW50IHwgdW5kZWZpbmVkLCByb3c6IFRhYmxlRWxlbWVudDxUPikge1xuICAgIC8vIC8hXFwgRE8gTk9UIHByZXZlbnQgZGVmYXVsdCwgb3RoZXJ3aXNlIHRoZSBjaGVja2JveCB3aWxsIG5vdCBiZSB1cGRhdGVkXG4gICAgLy9ldmVudD8ucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5zZWxlY3Rpb24udG9nZ2xlKHJvdyk7XG4gIH1cblxuICBjbGlja1JvdyhldmVudDogRXZlbnQgfCB1bmRlZmluZWQsIHJvdzogVGFibGVFbGVtZW50PFQ+KTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMubG9hZGluZykge1xuICAgICAgLy8gV2FpdCB3aGlsZSBsb2FkaW5nLCBhbmQgbG9vcFxuICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gV2FpdGluZyBiZWZvcmUgYXBwbHkgY2xpY2tSb3coKSAoZGF0YXNvdXJjZSBpcyBidXN5KS4uLicpO1xuICAgICAgdGhpcy53YWl0SWRsZSh7IHRpbWVvdXQ6IDIwMDAgfSkudGhlbigoKSA9PiB0aGlzLmNsaWNrUm93KGV2ZW50LCByb3cpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1ZygnW3RhYmxlXSBEZXRlY3QgY2xpY2sgb24gcm93Jyk7XG5cbiAgICAvLyBDYW5jZWxsZWQgYnkgZXZlbnRcbiAgICBpZiAoZXZlbnQ/LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbdGFibGVdIGNsaWNrUm93IGV2ZW50IGlzIGRlZmF1bHRQcmV2ZW50ZWQnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBDYWxsIG9uQ2xpY2tSb3cgaWYgb2JzZXJ2ZWRcbiAgICBpZiAodGhpcy5vbkNsaWNrUm93Lm9ic2VydmVkKSB7XG4gICAgICB0aGlzLm9uQ2xpY2tSb3cubmV4dChyb3cpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gT3BlbiB0aGUgZGV0YWlsIHBhZ2UgKGlmIG5vdCBpbmxpbmUgZWRpdGluZylcbiAgICBpZiAoIXRoaXMuaW5saW5lRWRpdGlvbikge1xuICAgICAgaWYgKHRoaXMuX29wZW5pbmdSb3cpIHJldHVybjsgLy8gUHJldmVudCBkb3VibGUgY2xpY2tcblxuICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9vcGVuaW5nUm93ID0gdHJ1ZTsgLy8gUHJldmVudCBkb3VibGUgY2xpY2tcbiAgICAgIHRoaXMubWFya0FzTG9hZGluZygpO1xuXG4gICAgICB0aGlzLm9wZW5Sb3cocm93LmN1cnJlbnREYXRhLmlkLCByb3cpXG4gICAgICAgIC5jYXRjaCgoZXJyKSA9PiBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gb3BlbiByb3cnLCBlcnIpKSAvLyBDb250aW51ZVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5tYXJrQXNMb2FkZWQoKTtcblxuICAgICAgICAgIC8vIFByZXZlbnQgZG91YmxlIGNsaWNrICh1c2UgYW4gb3BlbiB0aHJvdHRsZSB0aW1lKVxuICAgICAgICAgIGlmICh0aGlzLm9wZW5Sb3dUaHJvdHRsZVRpbWUgPiAwKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fb3BlbmluZ1JvdyA9IGZhbHNlO1xuICAgICAgICAgICAgfSwgdGhpcy5vcGVuUm93VGhyb3R0bGVUaW1lKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fb3BlbmluZ1JvdyA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIFN0YXJ0IGVkaXRpbmcgcm93XG4gICAgcmV0dXJuIHRoaXMuZWRpdFJvdyhldmVudCwgcm93LCB7IGZvY3VzQ29sdW1uOiB1bmRlZmluZWQgLypmb3JjZSB0byB1c2UgdGhlIGNsaWNrIHRhcmdldCovIH0pO1xuICB9XG5cbiAgbW92ZVJvdyhpZDogbnVtYmVyLCBkaXJlY3Rpb246IG51bWJlcikge1xuICAgIHRoaXMuZGF0YVNvdXJjZS5tb3ZlKGlkLCBkaXJlY3Rpb24pO1xuICB9XG5cbiAgcmVhZHkob3B0cz86IFdhaXRGb3JPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHdhaXRGb3JUcnVlKHRoaXMucmVhZHlTdWJqZWN0LCB7IHN0b3A6IHRoaXMuZGVzdHJveVN1YmplY3QsIC4uLm9wdHMgfSk7XG4gIH1cblxuICB3YWl0SWRsZShvcHRzPzogV2FpdEZvck9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMubG9hZGluZ1N1YmplY3QudmFsdWUpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICByZXR1cm4gd2FpdEZvckZhbHNlKHRoaXMubG9hZGluZ1N1YmplY3QsIHsgc3RvcDogdGhpcy5kZXN0cm95U3ViamVjdCwgLi4ub3B0cyB9KTtcbiAgfVxuXG4gIGFzeW5jIG9wZW5TZWxlY3RDb2x1bW5zTW9kYWwoZXZlbnQ/OiBFdmVudCk6IFByb21pc2U8YW55PiB7XG4gICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAvLyBDb3B5IGN1cnJlbnQgY29sdW1ucyAoZGVlcCBjb3B5KVxuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdldEN1cnJlbnRDb2x1bW5zKCk7XG5cbiAgICBjb25zdCBoYXNUb3BNb2RhbCA9ICEhKGF3YWl0IHRoaXMubW9kYWxDdHJsLmdldFRvcCgpKTtcbiAgICBjb25zdCBtb2RhbCA9IGF3YWl0IHRoaXMubW9kYWxDdHJsLmNyZWF0ZSh7XG4gICAgICBjb21wb25lbnQ6IFRhYmxlU2VsZWN0Q29sdW1uc0NvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiB7IGNvbHVtbnMgfSxcbiAgICAgIGNzc0NsYXNzOiBoYXNUb3BNb2RhbCAmJiAnc3RhY2stbW9kYWwnLFxuICAgIH0pO1xuXG4gICAgLy8gT3BlbiB0aGUgbW9kYWxcbiAgICBhd2FpdCBtb2RhbC5wcmVzZW50KCk7XG5cbiAgICAvLyBPbiBkaXNtaXNzXG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBtb2RhbC5vbkRpZERpc21pc3MoKTtcbiAgICBpZiAoIWRhdGEpIHJldHVybjsgLy8gQ0FOQ0VMTEVEXG5cbiAgICAvLyBBcHBseSBjb2x1bW5zXG4gICAgY29uc3QgdXNlckNvbHVtbnMgPSAoZGF0YSB8fCBbXSkuZmlsdGVyKChjKSA9PiBjLmNhbkhpZGUgPT09IGZhbHNlIHx8IGMudmlzaWJsZSkubWFwKChjKSA9PiBjLm5hbWUpIHx8IFtdO1xuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IFJFU0VSVkVEX1NUQVJUX0NPTFVNTlMuY29uY2F0KHVzZXJDb2x1bW5zKS5jb25jYXQoUkVTRVJWRURfRU5EX0NPTFVNTlMpO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG5cbiAgICAvLyBVcGRhdGUgdXNlciBzZXR0aW5nc1xuICAgIGF3YWl0IHRoaXMuc2F2ZVBhZ2VTZXR0aW5ncyh1c2VyQ29sdW1ucywgU0VUVElOR1NfRElTUExBWV9DT0xVTU5TKTtcbiAgfVxuXG4gIHRyYWNrQnlGbihpbmRleDogbnVtYmVyLCByb3c6IFRhYmxlRWxlbWVudDxUPik6IGFueSB7XG4gICAgcmV0dXJuIHJvdy5pZDtcbiAgfVxuXG4gIGRvUmVmcmVzaChldmVudD86IENvbXBsZXRhYmxlRXZlbnQpIHtcbiAgICB0aGlzLmVtaXRSZWZyZXNoKGV2ZW50KTtcblxuICAgIC8vIFdoZW4gdGFyZ2V0IHdhaXQgZm9yIGEgY29tcGxldGUgKGUuZy4gSW9uUmVmcmVzaGVyKVxuICAgIGlmIChldmVudD8udGFyZ2V0ICYmIGV2ZW50LnRhcmdldC5jb21wbGV0ZSkge1xuICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMud2FpdElkbGUoKTtcbiAgICAgICAgZXZlbnQudGFyZ2V0LmNvbXBsZXRlKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnZXRDdXJyZW50Q29sdW1ucygpOiBDb2x1bW5JdGVtW10ge1xuICAgIGNvbnN0IGhpZGRlbkNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuc2xpY2UoUkVTRVJWRURfU1RBUlRfQ09MVU1OUy5sZW5ndGgpLmZpbHRlcigobmFtZSkgPT4gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLmluZGV4T2YobmFtZSkgPT09IC0xKTtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zXG4gICAgICAuY29uY2F0KGhpZGRlbkNvbHVtbnMpXG4gICAgICAuZmlsdGVyKChuYW1lKSA9PiAhUkVTRVJWRURfU1RBUlRfQ09MVU1OUy5pbmNsdWRlcyhuYW1lKSAmJiAhUkVTRVJWRURfRU5EX0NPTFVNTlMuaW5jbHVkZXMobmFtZSkgJiYgIXRoaXMuZXhjbHVkZXNDb2x1bW5zLmluY2x1ZGVzKG5hbWUpKVxuICAgICAgLm1hcCgobmFtZSkgPT4gKHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgbGFiZWw6IHRoaXMuZ2V0STE4bkNvbHVtbk5hbWUobmFtZSksXG4gICAgICAgIHZpc2libGU6IHRoaXMuZGlzcGxheWVkQ29sdW1ucy5pbmRleE9mKG5hbWUpICE9PSAtMSxcbiAgICAgICAgY2FuSGlkZTogdGhpcy5nZXRSZXF1aXJlZENvbHVtbnMoKS5pbmRleE9mKG5hbWUpID09PSAtMSxcbiAgICAgIH0pKTtcbiAgfVxuXG4gIGVzY2FwZUVkaXRpbmdSb3coZXZlbnQ/OiBFdmVudCwgcm93PzogVGFibGVFbGVtZW50PFQ+KSB7XG4gICAgcm93ID0gcm93IHx8IHRoaXMuZWRpdGVkUm93O1xuICAgIGlmICghcm93IHx8ICFyb3cuZWRpdGluZykgcmV0dXJuO1xuXG4gICAgLy8gREVCVUdcbiAgICAvL2NvbnNvbGUuZGVidWcoJ1thcHAtdGFibGVdIENhbmNlbCB0aGUgcm93IChrZXlkb3duLmVzY2FwZSknKTtcblxuICAgIGlmIChldmVudCkge1xuICAgICAgLy8gQXZvaWQgdG8gY2FuY2VsIHRoZSBlZGl0b3JcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICAvLyBJZiBuZXcgcm93IChubyBpZClcbiAgICBpZiAocm93LmlkID09PSAtMSkge1xuICAgICAgaWYgKHJvdy52YWxpZGF0b3IpIHtcbiAgICAgICAgLy8gSWYgcGVuZGluZzogV2FpdCBlbmQgb2YgdmFsaWRhdGlvbiwgdGhlbiBsb29wXG4gICAgICAgIGlmIChyb3cucGVuZGluZykge1xuICAgICAgICAgIEFwcEZvcm1VdGlscy53YWl0V2hpbGVQZW5kaW5nKHJvdy52YWxpZGF0b3IpLnRoZW4oKCkgPT4gdGhpcy5lc2NhcGVFZGl0aW5nUm93KGV2ZW50LCByb3cpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSb3cgaXMgaW52YWxpZDogZGVsZXRlIHRoZSByb3dcbiAgICAgICAgaWYgKHJvdy5pbnZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5kZWxldGVOZXdSb3coZXZlbnQsIHJvdyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIElmIHRoZSByb3cgZXhpc3RzIChoYXMgYW4gaWQpXG4gICAgZWxzZSB7XG4gICAgICAvLyBDYWxsIGNhbmNlbCBmdW5jdGlvbiAsXG4gICAgICAvLyAtIGlmIGNvbmZpcm1hdGlvbiB3aWxsIGJlIGNhbGxlZCBiZWZvcmVcbiAgICAgIC8vIC0gb3IgaWYgcm93IGlzIHByaXN0aW5lIChub3QgZGlydHkpXG4gICAgICBpZiAodGhpcy5jb25maXJtQmVmb3JlQ2FuY2VsIHx8ICFyb3cuZGlydHkpIHtcbiAgICAgICAgdGhpcy5jYW5jZWxFeGlzdGluZ1JvdyhldmVudCwgcm93LCB7IGtlZXBFZGl0aW5nOiBmYWxzZSB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEJ5IGRlZmF1bHQsIHRyeSB0byBjb25maXJtIHRoZSByb3dcbiAgICB0aGlzLmNvbmZpcm1FZGl0Q3JlYXRlKGV2ZW50LCByb3cpO1xuICB9XG5cbiAgdHJhbnNsYXRlRm9ybVBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBDYW4gYmUgb3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzLCB0byByZXNvbHZlIGFsbCBmaWVsZCBuYW1lXG5cbiAgICAvLyBVc2UgY29sdW1ucyBrZXksIGhhcyBkZWZhdWx0IG5hbWVcbiAgICBjb25zdCBpMThuQ29sdW1uS2V5ID0gdGhpcy5nZXRJMThuQ29sdW1uTmFtZShwYXRoKTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGU/Lmluc3RhbnQoaTE4bkNvbHVtbktleSkgfHwgaTE4bkNvbHVtbktleTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2QgLS0gKi9cblxuICBwcm90ZWN0ZWQgZWRpdFJvdyhldmVudDogRXZlbnQgfCB1bmRlZmluZWQsIHJvdzogVGFibGVFbGVtZW50PFQ+LCBvcHRzPzogeyBmb2N1c0NvbHVtbj86IHN0cmluZyB9KTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLl9lbmFibGVkIHx8ICF0aGlzLmlubGluZUVkaXRpb24pIHJldHVybiBmYWxzZTtcbiAgICBpZiAodGhpcy5lZGl0ZWRSb3cgPT09IHJvdykgcmV0dXJuIHRydWU7IC8vIEFscmVhZHkgdGhlIGVkaXRlZCByb3dcbiAgICBpZiAoZXZlbnQ/LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IGNvbmZpcm1lZCA9IHRoaXMuY29uZmlybUVkaXRDcmVhdGUoKTtcbiAgICBpZiAoIWNvbmZpcm1lZCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKCFyb3cuZWRpdGluZyAmJiAhdGhpcy5sb2FkaW5nKSB7XG4gICAgICB0aGlzLmZvY3VzQ29sdW1uID0gb3B0cz8uZm9jdXNDb2x1bW4gPz8gdGhpcy5mb2N1c0NvbHVtbjtcbiAgICAgIHRoaXMuX2RhdGFTb3VyY2Uuc3RhcnRFZGl0KHJvdyk7XG4gICAgfVxuICAgIHRoaXMuZWRpdGVkUm93ID0gcm93O1xuICAgIHRoaXMub25TdGFydEVkaXRpbmdSb3cuZW1pdChyb3cpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyeSB0byBzZWxlY3Qgcm93LCBieSByb3cuaWQsIG9yIGJ5IGRhdGEuIFdJbGwgdXNlIEVudGl0eVV0aWxzLmVxdWFscygpXG4gICAqXG4gICAqIEBwYXJhbSBpZFxuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgc2VsZWN0Um93QnlJZE9yRGF0YShpZDogbnVtYmVyLCBkYXRhPzogVCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGxldCBkb25lID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFNlbGVjdCBieSByb3cgaWQgKGlmIE5PVCBhIG5ldyByb3cpXG4gICAgICBpZiAoaXNOb3ROaWwoaWQpIHx8IGlkICE9PSAtMSkge1xuICAgICAgICBkb25lID0gYXdhaXQgdGhpcy5zZWxlY3RSb3dCeUlkKGlkKTtcbiAgICAgICAgaWYgKGRvbmUpIHJldHVybiB0cnVlO1xuICAgICAgICBjb25zb2xlLndhcm4oJ1thcHAtdGFibGVdIFNhdmU6IENhbm5vdCByZXNlbGVjdCByb3cgYnkgcm93LmlkOiAnLCBpZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFRyeSBieSBkYXRhXG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBkb25lID0gYXdhaXQgdGhpcy5zZWxlY3RSb3dCeURhdGEoZGF0YSk7XG4gICAgICAgIGlmIChkb25lKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY29uc29sZS53YXJuKCdbYXBwLXRhYmxlXSBTYXZlOiBDYW5ub3QgcmVzZWxlY3Qgcm93IGJ5IGRhdGE6ICcsIGRhdGEpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBMb2csIGJ1dCBjb250aW51ZVxuICAgICAgY29uc29sZS5lcnJvcigoZXJyICYmIGVyci5tZXNzYWdlKSB8fCBlcnIpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm4gdGhlIHNlbGVjdGVkIHJvdyBpZiB1bmlxdWUgaW4gc2VsZWN0aW9uXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IHNpbmdsZVNlbGVjdGVkUm93KCk6IFRhYmxlRWxlbWVudDxUPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkPy5sZW5ndGggPT09IDEgPyB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZFswXSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjYW5EZWxldGVSb3dzKHJvd3M6IFRhYmxlRWxlbWVudDxUPltdLCBvcHRzPzogeyBpbnRlcmFjdGl2ZT86IGJvb2xlYW4gfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIENoZWNrIHVzaW5nIGVtaXR0ZXJcbiAgICBpZiAodGhpcy5vbkJlZm9yZURlbGV0ZVJvd3Mub2JzZXJ2ZWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNhbkRlbGV0ZSA9IGF3YWl0IGVtaXRQcm9taXNlRXZlbnQodGhpcy5vbkJlZm9yZURlbGV0ZVJvd3MsICdjYW5EZWxldGUnLCB7XG4gICAgICAgICAgZGV0YWlsOiB7IHJvd3MgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghY2FuRGVsZXRlKSByZXR1cm4gZmFsc2U7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciA9PT0gJ0NBTkNFTExFRCcpIHJldHVybiBmYWxzZTsgLy8gVXNlciBjYW5jZWxcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igd2hpbGUgY2hlY2tpbmcgaWYgY2FuIGRlbGV0ZSByb3dzJywgZXJyKTtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFzayB1c2VyIGNvbmZpcm1hdGlvblxuICAgIGlmICh0aGlzLmNvbmZpcm1CZWZvcmVEZWxldGUgJiYgKCFvcHRzIHx8IG9wdHMuaW50ZXJhY3RpdmUgIT09IGZhbHNlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuYXNrRGVsZXRlQ29uZmlybWF0aW9uKG51bGwsIHJvd3MpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjYW5DYW5jZWxSb3dzKHJvd3M/OiBUYWJsZUVsZW1lbnQ8VD5bXSwgb3B0cz86IHsgaW50ZXJhY3RpdmU/OiBib29sZWFuIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBHZXQgZGlydHkgcm93c1xuICAgIHJvd3MgPSByb3dzIHx8IHRoaXMuZGF0YVNvdXJjZS5nZXRSb3dzKCkuZmlsdGVyKChyb3cpID0+IHJvdy52YWxpZGF0b3I/LmRpcnR5KTtcblxuICAgIGlmIChpc0VtcHR5QXJyYXkocm93cykpIHJldHVybiB0cnVlOyAvLyBObyBkaXJ0eTogT0tcblxuICAgIC8vIENoZWNrIHVzaW5nIGVtaXR0ZXJcbiAgICBpZiAodGhpcy5vbkJlZm9yZUNhbmNlbFJvd3Mub2JzZXJ2ZWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGlzQ2FuY2VsID0gYXdhaXQgZW1pdFByb21pc2VFdmVudCh0aGlzLm9uQmVmb3JlQ2FuY2VsUm93cywgJ2NhbkNhbmNlbCcsIHtcbiAgICAgICAgICBkZXRhaWw6IHsgcm93cyB9LFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFpc0NhbmNlbCkgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgPT09ICdDQU5DRUxMRUQnKSByZXR1cm4gZmFsc2U7IC8vIFVzZXIgY2FuY2VsXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHdoaWxlIGNoZWNraW5nIGlmIGNhbiBjYW5jZWwgcm93cycsIGVycik7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBc2sgdXNlciBjb25maXJtYXRpb25cbiAgICBpZiAodGhpcy5jb25maXJtQmVmb3JlQ2FuY2VsICYmICghb3B0cyB8fCBvcHRzLmludGVyYWN0aXZlICE9PSBmYWxzZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmFza0NhbmNlbENvbmZpcm1hdGlvbihudWxsLCByb3dzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgc2F2ZUJlZm9yZUFjdGlvbihzYXZlQWN0aW9uOiBTYXZlQWN0aW9uVHlwZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghdGhpcy5kaXJ0eSkge1xuICAgICAgLy8gQ29udGludWUgd2l0aG91dCBzYXZlXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBsZXQgc2F2ZTogYm9vbGVhbjtcbiAgICBzd2l0Y2ggKHNhdmVBY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2RlbGV0ZSc6XG4gICAgICAgIHNhdmUgPSB0aGlzLnNhdmVCZWZvcmVEZWxldGU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZmlsdGVyJzpcbiAgICAgICAgc2F2ZSA9IHRoaXMuc2F2ZUJlZm9yZUZpbHRlcjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzb3J0JzpcbiAgICAgICAgc2F2ZSA9IHRoaXMuc2F2ZUJlZm9yZVNvcnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgc2F2ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCBiZWhhdmlvclxuICAgIGxldCBjb25maXJtZWQgPSB0cnVlO1xuXG4gICAgaWYgKHNhdmUpIHtcbiAgICAgIGlmICh0aGlzLm9uQmVmb3JlU2F2ZS5vYnNlcnZlZCkge1xuICAgICAgICAvLyBBc2sgY29uZmlybWF0aW9uXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZW1pdFByb21pc2VFdmVudCh0aGlzLm9uQmVmb3JlU2F2ZSwgJ2JlZm9yZVNhdmUnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHsgYWN0aW9uOiBzYXZlQWN0aW9uLCB2YWxpZDogdGhpcy52YWxpZCB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbmZpcm1lZCA9IHJlcy5jb25maXJtZWQ7XG4gICAgICAgICAgc2F2ZSA9IHJlcy5zYXZlO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBpZiAoZXJyID09PSAnQ0FOQ0VMTEVEJykgcmV0dXJuIGZhbHNlOyAvLyBVc2VyIGNhbmNlbFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHdoaWxlIGNoZWNraW5nIGlmIGNhbiBkZWxldGUgcm93cycsIGVycik7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpcm1lZCkge1xuICAgICAgaWYgKHNhdmUpIHtcbiAgICAgICAgLy8gVXNlciBjb25maXJtZWQgc2F2ZVxuICAgICAgICBjb25zdCBzYXZlZCA9IGF3YWl0IHRoaXMuc2F2ZSgpO1xuICAgICAgICB0aGlzLm1hcmtBc0RpcnR5KCk7IC8vIFJlc3RvcmUgZGlydHkgZmxhZ1xuICAgICAgICByZXR1cm4gc2F2ZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTsgLy8gTm8gc2F2ZSBidXQgY29udGludWUgYWN0aW9uXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlOyAvLyBVc2VyIGNhbmNlbCB0aGUgYWN0aW9uXG4gIH1cblxuICAvKipcbiAgICogT3BlbiBhIHJvdyBkZXRhaWwgdmlldy4gQnkgZGVmYXVsdCwgd2lsbCB0byBvcGVuIHJvdyBkZXRhaWwgcGFnZS5cbiAgICogQ2FuIGJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3NlcywgQlVUIHByZWZlciB0byBzdWJzY3JpYmUgb24gb25PcGVuUm93XG4gICAqXG4gICAqIEBwYXJhbSBpZFxuICAgKiBAcGFyYW0gcm93XG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBvcGVuUm93KGlkOiBJRCwgcm93OiBUYWJsZUVsZW1lbnQ8VD4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5hbGxvd1Jvd0RldGFpbCkge1xuICAgICAgaWYgKHRoaXMuZGVidWcgJiYgdGhpcy5kaXJ0eSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1t0YWJsZV0gT3BlbmluZyByb3cgZGV0YWlscywgYnV0IHRhYmxlIGhhcyB1bnNhdmVkIGNoYW5nZXMhJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9uT3BlblJvdy5vYnNlcnZlZCkge1xuICAgICAgICAvLyBDbGVhciBzZWxlY3Rpb24gKGJlY2F1c2UgbmV4dCByb3V0ZSBjYW4gY2hhbmdlIHRoZSBjdXJyZW50IHRhYmxlIGNvbnRlbnQpXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIHRoaXMub25PcGVuUm93LmVtaXQocm93KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIE5vIElEIGRlZmluZWQ6IHVuYWJsZSB0byBvcGVuIGRldGFpbHNcbiAgICAgIGlmIChpc05pbChpZCkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbdGFibGVdIE9wZW5pbmcgcm93IGRldGFpbHMsIGJ1dCBkYXRhIGhhcyBubyBpZCEnKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBDbGVhciBzZWxlY3Rpb24gKGJlY2F1c2UgbmV4dCByb3V0ZSBjYW4gY2hhbmdlIHRoZSBjdXJyZW50IHRhYmxlIGNvbnRlbnQpXG4gICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuXG4gICAgICByZXR1cm4gdGhpcy5uYXZDb250cm9sbGVyLm5hdmlnYXRlRm9yd2FyZChbJy4nLCBpZF0sIHtcbiAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcbiAgICAgICAgcXVlcnlQYXJhbXM6IHt9LFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBvcGVuTmV3Um93RGV0YWlsKGV2ZW50PzogYW55KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLmFsbG93Um93RGV0YWlsKSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5vbk5ld1Jvdy5vYnNlcnZlZCkge1xuICAgICAgdGhpcy5vbk5ld1Jvdy5lbWl0KGV2ZW50KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIENsZWFyIHNlbGVjdGlvbiAoYmVjYXVzZSBuZXh0IHJvdXRlIGNhbiBjaGFuZ2UgdGhlIGN1cnJlbnQgdGFibGUgY29udGVudClcbiAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuXG4gICAgcmV0dXJuIHRoaXMubmF2Q29udHJvbGxlci5uYXZpZ2F0ZUZvcndhcmQoWycuJywgJ25ldyddLCB7XG4gICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxuICAgICAgcXVlcnlQYXJhbXM6IHt9LFxuICAgIH0pO1xuICB9XG5cbiAgLy8gY2FuIGJlIG92ZXJyaWRkZW4gdG8gYWRkIG1vcmUgcmVxdWlyZWQgY29sdW1uc1xuICBwcm90ZWN0ZWQgZ2V0UmVxdWlyZWRDb2x1bW5zKCkge1xuICAgIHJldHVybiBERUZBVUxUX1JFUVVJUkVEX0NPTFVNTlM7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0VXNlckNvbHVtbnMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmdldFBhZ2VTZXR0aW5ncyhTRVRUSU5HU19ESVNQTEFZX0NPTFVNTlMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFNvcnRlZENvbHVtbigpOiBNYXRTb3J0YWJsZSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0UGFnZVNldHRpbmdzKFNFVFRJTkdTX1NPUlRFRF9DT0xVTU4pO1xuICAgIGNvbnN0IHBhcnRzID0gZGF0YSAmJiBkYXRhLnNwbGl0KCc6Jyk7XG4gICAgaWYgKHBhcnRzICYmIHBhcnRzLmxlbmd0aCA9PT0gMiAmJiB0aGlzLmNvbHVtbnMuaW5jbHVkZXMocGFydHNbMF0pKSB7XG4gICAgICByZXR1cm4geyBpZDogcGFydHNbMF0sIHN0YXJ0OiBwYXJ0c1sxXSA9PT0gJ2Rlc2MnID8gJ2Rlc2MnIDogJ2FzYycsIGRpc2FibGVDbGVhcjogZmFsc2UgfTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGVmYXVsdFNvcnRCeSkge1xuICAgICAgcmV0dXJuIHsgaWQ6IHRoaXMuZGVmYXVsdFNvcnRCeSwgc3RhcnQ6IHRoaXMuZGVmYXVsdFNvcnREaXJlY3Rpb24gfHwgJ2FzYycsIGRpc2FibGVDbGVhcjogZmFsc2UgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgaWQ6ICdpZCcsIHN0YXJ0OiAnYXNjJywgZGlzYWJsZUNsZWFyOiBmYWxzZSB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFBhZ2VTaXplKCk6IG51bWJlciB7XG4gICAgY29uc3QgcGFnZVNpemUgPSB0aGlzLmdldFBhZ2VTZXR0aW5nczxudW1iZXI+KFNFVFRJTkdTX1BBR0VfU0laRSk7XG4gICAgcmV0dXJuIHBhZ2VTaXplIHx8IHRoaXMuZGVmYXVsdFBhZ2VTaXplO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldERpc3BsYXlDb2x1bW5zKCk6IHN0cmluZ1tdIHtcbiAgICBsZXQgdXNlckNvbHVtbnMgPSB0aGlzLmdldFVzZXJDb2x1bW5zKCk7XG5cbiAgICAvLyBObyB1c2VyIG92ZXJyaWRlXG4gICAgaWYgKCF1c2VyQ29sdW1ucykge1xuICAgICAgLy8gUmV0dXJuIGRlZmF1bHQsIHdpdGhvdXQgY29sdW1ucyB0byBoaWRlXG4gICAgICByZXR1cm4gdGhpcy5jb2x1bW5zLmZpbHRlcigoY29sdW1uKSA9PiAhdGhpcy5leGNsdWRlc0NvbHVtbnMuaW5jbHVkZXMoY29sdW1uKSk7XG4gICAgfVxuXG4gICAgLy8gR2V0IGZpeGVkIHN0YXJ0IGNvbHVtbnNcbiAgICBjb25zdCBmaXhlZFN0YXJ0Q29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoKGMpID0+IFJFU0VSVkVEX1NUQVJUX0NPTFVNTlMuaW5jbHVkZXMoYykpO1xuXG4gICAgLy8gUmVtb3ZlIGVuZCBjb2x1bW5zXG4gICAgY29uc3QgZml4ZWRFbmRDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcigoYykgPT4gUkVTRVJWRURfRU5EX0NPTFVNTlMuaW5jbHVkZXMoYykpO1xuXG4gICAgLy8gUmVtb3ZlIGZpeGVkIGNvbHVtbnMgZnJvbSB1c2VyIGNvbHVtbnNcbiAgICB1c2VyQ29sdW1ucyA9IHVzZXJDb2x1bW5zLmZpbHRlcigoYykgPT4gIWZpeGVkU3RhcnRDb2x1bW5zLmluY2x1ZGVzKGMpICYmICFmaXhlZEVuZENvbHVtbnMuaW5jbHVkZXMoYykgJiYgdGhpcy5jb2x1bW5zLmluY2x1ZGVzKGMpKTtcblxuICAgIC8vIEFkZCByZXF1aXJlZCBjb2x1bW5zIGlmIG1pc3NpbmdcbiAgICB1c2VyQ29sdW1ucy5wdXNoKFxuICAgICAgLi4udGhpcy5nZXRSZXF1aXJlZENvbHVtbnMoKS5maWx0ZXIoKGMpID0+ICFmaXhlZFN0YXJ0Q29sdW1ucy5pbmNsdWRlcyhjKSAmJiAhZml4ZWRFbmRDb2x1bW5zLmluY2x1ZGVzKGMpICYmICF1c2VyQ29sdW1ucy5pbmNsdWRlcyhjKSlcbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIGZpeGVkU3RhcnRDb2x1bW5zXG4gICAgICAgIC5jb25jYXQodXNlckNvbHVtbnMpXG4gICAgICAgIC5jb25jYXQoZml4ZWRFbmRDb2x1bW5zKVxuICAgICAgICAvLyBSZW1vdmUgY29sdW1ucyB0byBoaWRlXG4gICAgICAgIC5maWx0ZXIoKGNvbHVtbikgPT4gIXRoaXMuZXhjbHVkZXNDb2x1bW5zLmluY2x1ZGVzKGNvbHVtbikpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvbXB1dGUgZGlzcGxheSBjb2x1bW5zXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCB1cGRhdGVDb2x1bW5zKCkge1xuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuZ2V0RGlzcGxheUNvbHVtbnMoKTtcbiAgICBpZiAoIXRoaXMubG9hZGluZykgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWdpc3RlclN1YnNjcmlwdGlvbihzdWI6IFN1YnNjcmlwdGlvbikge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoc3ViKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1bnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHN1YjogU3Vic2NyaXB0aW9uKSB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLnJlbW92ZShzdWIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlZ2lzdGVyQXV0b2NvbXBsZXRlRmllbGQ8RSA9IGFueSwgRUYgPSBhbnk+KFxuICAgIGZpZWxkTmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBNYXRBdXRvY29tcGxldGVGaWVsZEFkZE9wdGlvbnM8RSwgRUY+XG4gICk6IE1hdEF1dG9jb21wbGV0ZUZpZWxkQ29uZmlnPEUsIEVGPiB7XG4gICAgcmV0dXJuIHRoaXMuX2F1dG9jb21wbGV0ZUNvbmZpZ0hvbGRlci5hZGQoZmllbGROYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRJMThuQ29sdW1uTmFtZShjb2x1bW5OYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gKHRoaXMuaTE4bkNvbHVtblByZWZpeCB8fCAnJykgKyBjaGFuZ2VDYXNlVG9VbmRlcnNjb3JlKGNvbHVtbk5hbWUpLnRvVXBwZXJDYXNlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2VuZXJhdGVUYWJsZUlkKCkge1xuICAgIC8vIG5vaW5zcGVjdGlvbiBKU05vbkFTQ0lJTmFtZXNcbiAgICBjb25zdCBtZXRhID0gdGhpcy5jb25zdHJ1Y3RvclsnybVjbXAnXTtcbiAgICAvLyBHZXQgYSBjb21wb25lbnQgdW5pcXVlIG5hbWUgLSBTZWUgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNjAxMTQ2ODIvaG93LXRvLWFjY2Vzcy1jb21wb25lbnRzLXVuaXF1ZS1lbmNhcHN1bGF0aW9uLWlkLWluLWFuZ3VsYXItOVxuICAgIGNvbnN0IGNvbXBvbmVudElkID0gKG1ldGEgJiYgKG1ldGEuc2VsZWN0b3JzPy5bMF0gfHwgbWV0YS5pZCkpIHx8IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgICBjb25zdCBpZCA9XG4gICAgICB0aGlzLmxvY2F0aW9uXG4gICAgICAgIC5wYXRoKHRydWUpXG4gICAgICAgIC5yZXBsYWNlKC9bP10uKiQvZywgJycpXG4gICAgICAgIC5yZXBsYWNlKC9cXC9cXGQrL2csICdfaWQnKSArXG4gICAgICAnXycgK1xuICAgICAgY29tcG9uZW50SWQ7XG4gICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3RhYmxlXSBpZCA9ICcgKyBpZCk7XG4gICAgcmV0dXJuIGlkO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGFkZFJvd1RvVGFibGUoXG4gICAgaW5zZXJ0QXQ/OiBudW1iZXIsXG4gICAgb3B0cz86IHsgZm9jdXNDb2x1bW4/OiBzdHJpbmc7IGVkaXRpbmc/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH1cbiAgKTogUHJvbWlzZTxUYWJsZUVsZW1lbnQ8VD4gfCB1bmRlZmluZWQ+IHtcbiAgICAvLyBUcnkgdG8gZmluaXNoIGVkaXRlZCByb3cgZmlyc3RcbiAgICBpZiAoIXRoaXMuY29uZmlybUVkaXRDcmVhdGUoKSkge1xuICAgICAgY29uc29sZS53YXJuKCdbdGFibGVdIENhbm5vdCBhZGQgbmV3IHJvdywgYmVjYXVzZSB0aGUgcHJldmlvdXMgZWRpdGVkIHJvdyBjYW5ub3QgYmUgY29uZmlybWVkJyk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGVkaXRpbmcgPSB0aGlzLmlubGluZUVkaXRpb24gJiYgb3B0cz8uZWRpdGluZyAhPT0gZmFsc2U7IC8vIHRydWUgYnkgZGVmYXVsdCwgaWYgaW5saW5lRWRpdGlvblxuXG4gICAgY29uc3Qgcm93ID0gYXdhaXQgdGhpcy5fZGF0YVNvdXJjZS5jcmVhdGVOZXcoaW5zZXJ0QXQsIHsgZWRpdGluZyB9KTtcbiAgICBpZiAoIXJvdykgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIGlmIChyb3cuZWRpdGluZykge1xuICAgICAgLy8gVXBkYXRlIGZvY3VzZWQgY29sdW1uXG4gICAgICB0aGlzLmZvY3VzRmlyc3RDb2x1bW4gPSB0cnVlO1xuICAgICAgdGhpcy5mb2N1c0NvbHVtbiA9IG9wdHM/LmZvY3VzQ29sdW1uIHx8IHRoaXMuZmlyc3RVc2VyQ29sdW1uO1xuXG4gICAgICAvLyBFbWl0IHN0YXJ0IGVkaXRpbmcgZXZlbnRcbiAgICAgIHRoaXMuZWRpdGVkUm93ID0gcm93O1xuICAgICAgdGhpcy5vblN0YXJ0RWRpdGluZ1Jvdy5lbWl0KHJvdyk7XG4gICAgfVxuXG4gICAgdGhpcy50b3RhbFJvd0NvdW50Kys7XG4gICAgdGhpcy52aXNpYmxlUm93Q291bnQrKztcblxuICAgIHRoaXMubWFya0FzRGlydHkoeyBlbWl0RXZlbnQ6IGZhbHNlIC8qbWFya0ZvckNoZWNrKCkgaXMgY2FsbGVkIGp1c3QgYWZ0ZXIqLyB9KTtcblxuICAgIC8vIEVtaXQgZXZlbnRcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB0aGlzLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgcmV0dXJuIHJvdztcbiAgfVxuXG4gIHByb3RlY3RlZCByZWdpc3RlckNlbGxWYWx1ZUNoYW5nZXMobmFtZTogc3RyaW5nLCBmb3JtUGF0aD86IHN0cmluZywgZW1pdEluaXRpYWxWYWx1ZT86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGZvcm1QYXRoID0gZm9ybVBhdGggfHwgbmFtZTtcbiAgICBlbWl0SW5pdGlhbFZhbHVlID0gZW1pdEluaXRpYWxWYWx1ZSB8fCBmYWxzZTtcbiAgICBsZXQgZGVmID0gdGhpcy5fY2VsbFZhbHVlQ2hhbmdlc0RlZnNbbmFtZV07XG4gICAgaWYgKGRlZiAmJiAoZGVmLmZvcm1QYXRoICE9PSBmb3JtUGF0aCB8fCBkZWYuZW1pdEluaXRpYWxWYWx1ZSAhPT0gZW1pdEluaXRpYWxWYWx1ZSkpIHtcbiAgICAgIHRocm93IEVycm9yKFwiQWxyZWFkeSByZWdpc3RlciBhIGNlbGwgdmFsdWUgY2hhbmdlIGZvciB0aGlzIG5hbWUsIHdpdGggZGlmZmVyZW50ICdmb3JtUGF0aCcgb3IgJ2VtaXRJbml0aWFsVmFsdWUnLiBQbGVhc2UgdXNlIHNhbWUgYXJndW1lbnRzLlwiKTtcbiAgICB9XG5cbiAgICAvLyBOb3QgZXhpc3RzOiByZWdpc3RlciBuZXcgZGVmaW5pdGlvblxuICAgIGlmICghZGVmKSB7XG4gICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW3RhYmxlXSBOZXcgbGlzdGVuZXIgeyR7bmFtZX19IGZvciB2YWx1ZSBjaGFuZ2VzIG9uIHBhdGggJHtmb3JtUGF0aH1gKTtcbiAgICAgIGRlZiA9IHtcbiAgICAgICAgc3ViamVjdDogbmV3IFN1YmplY3Q8YW55PigpLFxuICAgICAgICBzdWJzY3JpcHRpb246IG51bGwsXG4gICAgICAgIGZvcm1QYXRoLFxuICAgICAgICBlbWl0SW5pdGlhbFZhbHVlLFxuICAgICAgfTtcbiAgICAgIHRoaXMuX2NlbGxWYWx1ZUNoYW5nZXNEZWZzW25hbWVdID0gZGVmO1xuXG4gICAgICAvLyBTdGFydCB0aGUgbGlzdGVuZXIsIHdoZW4gZWRpdGluZyBzdGFydHNcbiAgICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24odGhpcy5vblN0YXJ0RWRpdGluZ1Jvdy5zdWJzY3JpYmUoKHJvdykgPT4gdGhpcy5zdGFydENlbGxWYWx1ZUNoYW5nZXMobmFtZSwgcm93KSkpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWYuc3ViamVjdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRTaG93Q29sdW1uKGNvbHVtbk5hbWU6IHN0cmluZywgc2hvdzogYm9vbGVhbiwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKCF0aGlzLmV4Y2x1ZGVzQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW5OYW1lKSAhPT0gc2hvdykge1xuICAgICAgaWYgKCFzaG93KSB7XG4gICAgICAgIHRoaXMuZXhjbHVkZXNDb2x1bW5zLnB1c2goY29sdW1uTmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZXhjbHVkZXNDb2x1bW5zLmZpbmRJbmRleCgodmFsdWUpID0+IHZhbHVlID09PSBjb2x1bW5OYW1lKTtcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHRoaXMuZXhjbHVkZXNDb2x1bW5zLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlY29tcHV0ZSBkaXNwbGF5IGNvbHVtbnNcbiAgICAgIGlmICh0aGlzLmRpc3BsYXllZENvbHVtbnMgJiYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkpIHtcbiAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5zKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldFNob3dDb2x1bW4oY29sdW1uTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmV4Y2x1ZGVzQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW5OYW1lKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBkZXRlY3RDaGFuZ2VzKCkge1xuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGFza0RlbGV0ZUNvbmZpcm1hdGlvbihldmVudD86IEV2ZW50LCByb3dzPzogVGFibGVFbGVtZW50PFQ+W10pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy51bmRvYWJsZURlbGV0aW9uKSB7XG4gICAgICAvLyBTcGVjaWFsIG1lc3NhZ2UsIGZvciB1bmRvYWJsZSBkZWxldGlvblxuICAgICAgcmV0dXJuIEFsZXJ0cy5hc2tDb25maXJtYXRpb24ocm93cz8ubGVuZ3RoID09PSAxID8gJ0NPTkZJUk0uREVMRVRFX1JPVycgOiAnQ09ORklSTS5ERUxFVEVfUk9XUycsIHRoaXMuYWxlcnRDdHJsLCB0aGlzLnRyYW5zbGF0ZSwgZXZlbnQpO1xuICAgIH1cbiAgICAvLyBJbW1lZGlhdGUgZGVsZXRpb24gYWN0aW9uXG4gICAgcmV0dXJuIEFsZXJ0cy5hc2tBY3Rpb25Db25maXJtYXRpb24odGhpcy5hbGVydEN0cmwsIHRoaXMudHJhbnNsYXRlLCB0cnVlLCBldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgYXNrQ2FuY2VsQ29uZmlybWF0aW9uKGV2ZW50PzogRXZlbnQsIHJvd3M/OiBUYWJsZUVsZW1lbnQ8VD5bXSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBBbGVydHMuYXNrQ29uZmlybWF0aW9uKHJvd3M/Lmxlbmd0aCA9PT0gMSA/ICdDT05GSVJNLkNBTkNFTF9ST1cnIDogJ0NPTkZJUk0uQ0FOQ0VMX1JPV1MnLCB0aGlzLmFsZXJ0Q3RybCwgdGhpcy50cmFuc2xhdGUsIGV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBhc2tSZXN0b3JlQ29uZmlybWF0aW9uKGV2ZW50PzogRXZlbnQpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gQWxlcnRzLmFza0FjdGlvbkNvbmZpcm1hdGlvbih0aGlzLmFsZXJ0Q3RybCwgdGhpcy50cmFuc2xhdGUsIGZhbHNlLCBldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgc2hvd1RvYXN0KG9wdHM6IFNob3dUb2FzdE9wdGlvbnMpIHtcbiAgICBpZiAoIXRoaXMudG9hc3RDb250cm9sbGVyKSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIHRvYXN0Q29udHJvbGxlciBpbiBjb21wb25lbnQncyBjb25zdHJ1Y3RvclwiKTtcbiAgICByZXR1cm4gVG9hc3RzLnNob3codGhpcy50b2FzdENvbnRyb2xsZXIsIHRoaXMudHJhbnNsYXRlLCBvcHRzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNldEVycm9yKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHRoaXMuc2V0RXJyb3IodW5kZWZpbmVkLCBvcHRzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRSb3dFcnJvcihyb3c/OiBUYWJsZUVsZW1lbnQ8VD4sIG9wdHM/OiBGb3JtRXJyb3JUcmFuc2xhdGVPcHRpb25zKTogc3RyaW5nIHtcbiAgICByb3cgPSByb3cgfHwgdGhpcy5lZGl0ZWRSb3c7XG4gICAgaWYgKCFyb3cgfHwgIXRoaXMuZm9ybUVycm9yQWRhcHRlcikgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB0aGlzLmZvcm1FcnJvckFkYXB0ZXIudHJhbnNsYXRlRm9ybUVycm9ycyhyb3cudmFsaWRhdG9yLCB7XG4gICAgICAuLi50aGlzLmVycm9yVHJhbnNsYXRlT3B0aW9ucyxcbiAgICAgIC4uLm9wdHMsXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0RXJyb3IodmFsdWU6IHN0cmluZywgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKHRoaXMuZXJyb3JTdWJqZWN0LnZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5lcnJvclN1YmplY3QubmV4dCh2YWx1ZSk7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbXBhcmUgZGF0YSBlcXVhbGl0eSAoZGVmYXVsdCBieSBpZCwgdXNpbmcgRW50aXR5VXRpbHMuZXF1YWxzKCkpXG4gICAqIENhbiBiZSBvdmVycmlkZGVuIHRvIGFkZCBhZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gY29tcGFyZVxuICAgKlxuICAgKiBAcGFyYW0gZDFcbiAgICogQHBhcmFtIGQyXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBlcXVhbHMoZDE6IFQsIGQyOiBUKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEVudGl0eVV0aWxzLmVxdWFscyhkMSwgZDIsICdpZCcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG1hcmtSb3dBc0RpcnR5KHJvdz86IFRhYmxlRWxlbWVudDxUPiwgb3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RVZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICByb3cgPSByb3cgfHwgdGhpcy5lZGl0ZWRSb3c7XG4gICAgaWYgKHJvdykgcm93LnZhbGlkYXRvcj8ubWFya0FzRGlydHkob3B0cyk7XG4gICAgdGhpcy5tYXJrQXNEaXJ0eShvcHRzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRQYWdlU2V0dGluZ3M8VCA9IGFueT4ocHJvcGVydHlOYW1lPzogc3RyaW5nKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MuZ2V0UGFnZVNldHRpbmdzKHRoaXMuc2V0dGluZ3NJZCwgcHJvcGVydHlOYW1lKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBzYXZlUGFnZVNldHRpbmdzKHZhbHVlOiBhbnksIHByb3BlcnR5TmFtZT86IHN0cmluZywgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgYXdhaXQgdGhpcy5zZXR0aW5ncy5zYXZlUGFnZVNldHRpbmcodGhpcy5zZXR0aW5nc0lkLCB2YWx1ZSwgcHJvcGVydHlOYW1lLCBvcHRzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBlbWl0UmVmcmVzaCh2YWx1ZT86IGFueSkge1xuICAgIC8vIEVtaXQgb25SZWZyZXNoIGlmIG5vdCBjbG9zZWQgKGNhbiBoYXBwZW4gaWYgY29tcG9uZW50IGlzIGRlc3Ryb3llZCB0byBlYXJseSlcbiAgICBpZiAoISF0aGlzLm9uUmVmcmVzaCAmJiAhdGhpcy5vblJlZnJlc2guY2xvc2VkKSB7XG4gICAgICB0aGlzLm9uUmVmcmVzaC5lbWl0KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgcGVybWFuZW50IHNlbGVjdGlvbiBtb2RlbFxuICAgKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgaW5pdFBlcm1hbmVudFNlbGVjdGlvbigpIHtcbiAgICBpZiAodGhpcy5wZXJtYW5lbnRTZWxlY3Rpb24pIHRocm93IG5ldyBFcnJvcignaW5pdFBlcm1hbmVudFNlbGVjdGlvbigpIGFscmVhZHkgY2FsbGVkIScpO1xuXG4gICAgdGhpcy5wZXJtYW5lbnRTZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8VD4odHJ1ZSwgW10pO1xuXG4gICAgLy8gTGlzdGVuIHNvcnQgY2hhbmdlXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMub25Tb3J0LnN1YnNjcmliZSgoKSA9PiAodGhpcy5wZXJtYW5lbnRTZWxlY3Rpb25DaGFuZ2VkUHJldmVudGVkID0gdHJ1ZSkpIC8vIHByZXZlbnQgc2VsZWN0aW9uIGNoYW5nZSBvbiBzb3J0XG4gICAgKTtcblxuICAgIC8vIExpc3RlbiBkYXRhc291cmNlIHVwZGF0ZVxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICB0aGlzLmRhdGFTb3VyY2Uucm93c1N1YmplY3RcbiAgICAgICAgLy8gcmVzdG9yZSB0aGUgJ2FkZGluZycgc2VsZWN0aW9uIChmb3IgZXhhbXBsZSBhZnRlciBhIHBhZ2Ugb3Igc29ydCBjaGFuZ2UpXG4gICAgICAgIC5zdWJzY3JpYmUoKHJvd3MpID0+IHtcbiAgICAgICAgICB0aGlzLnBlcm1hbmVudFNlbGVjdGlvbkNoYW5nZWRQcmV2ZW50ZWQgPSB0cnVlO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwZXJtYW5lbnRTZWxlY3Rpb25JZHMgPSAodGhpcy5wZXJtYW5lbnRTZWxlY3Rpb24uc2VsZWN0ZWQgfHwgW10pLm1hcChFbnRpdHlVdGlscy5nZXRJZCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oLi4ucm93cy5maWx0ZXIoKHJvdykgPT4gcGVybWFuZW50U2VsZWN0aW9uSWRzLmluY2x1ZGVzKEFwcFRhYmxlVXRpbHMuZ2V0RW50aXR5SWQocm93KSkpKTtcbiAgICAgICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMucGVybWFuZW50U2VsZWN0aW9uQ2hhbmdlZFByZXZlbnRlZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gTGlzdGVuIHNlbGVjdGlvbiBjaGFuZ2VcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5zZWxlY3Rpb24uY2hhbmdlZC5waXBlKGZpbHRlcigoKSA9PiAhdGhpcy5wZXJtYW5lbnRTZWxlY3Rpb25DaGFuZ2VkUHJldmVudGVkKSkuc3Vic2NyaWJlKChzZWxlY3Rpb25DaGFuZ2UpID0+IHtcbiAgICAgICAgLy8gYWRkIHRvIHNlbGVjdGlvblxuICAgICAgICBpZiAoc2VsZWN0aW9uQ2hhbmdlLmFkZGVkLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMucGVybWFuZW50U2VsZWN0aW9uLnNldFNlbGVjdGlvbihcbiAgICAgICAgICAgIC4uLih0aGlzLnBlcm1hbmVudFNlbGVjdGlvbi5zZWxlY3RlZCB8fCBbXSlcbiAgICAgICAgICAgICAgLy8gQWRkIG5ldyBlbGVtZW50c1xuICAgICAgICAgICAgICAuY29uY2F0KC4uLkFwcFRhYmxlVXRpbHMuZ2V0RW50aXRpZXMoc2VsZWN0aW9uQ2hhbmdlLmFkZGVkKS5maWx0ZXIoRW50aXR5VXRpbHMuaGFzSWQpKVxuICAgICAgICAgICAgICAvLyBBdm9pZCBkdXBsaWNhdGVkIGVudGl0aWVzIChNYW50aXMgIzU1MzUxKVxuICAgICAgICAgICAgICAuZmlsdGVyKEVudGl0eVV0aWxzLmFycmF5RGlzdGluY3RGaWx0ZXJGbilcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlbW92ZSBmcm9tIHNlbGVjdGlvblxuICAgICAgICBpZiAoc2VsZWN0aW9uQ2hhbmdlLnJlbW92ZWQubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgcmVtb3ZlZElkcyA9IEFwcFRhYmxlVXRpbHMuZ2V0RW50aXR5SWRzKHNlbGVjdGlvbkNoYW5nZS5yZW1vdmVkKTtcbiAgICAgICAgICB0aGlzLnBlcm1hbmVudFNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oXG4gICAgICAgICAgICAuLi4odGhpcy5wZXJtYW5lbnRTZWxlY3Rpb24uc2VsZWN0ZWQgfHwgW10pLmZpbHRlcigoZW50aXR5KSA9PiBFbnRpdHlVdGlscy5oYXNJZChlbnRpdHkpICYmICFyZW1vdmVkSWRzLmluY2x1ZGVzKGVudGl0eS5pZCkpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyogLS0gcHJpdmF0ZSBtZXRob2QgLS0gKi9cblxuICBwcml2YXRlIGFzeW5jIGxpc3RlblNvcnRBbmRQYWdpbmF0aW9uRXZlbnRzKCkge1xuICAgIGlmICghdGhpcy50YWJsZSkge1xuICAgICAgLy8gREVCVUcgb25seSAtLSBhbGVydCB1c2VyIHRoYXQgdGFibGUgbm90IGZvdW5kIGluIHRlbXBsYXRlXG4gICAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICBzZXRUaW1lb3V0KFxuICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAhdGhpcy50YWJsZSAmJlxuICAgICAgICAgICAgY29uc29sZS53YXJuKGBbdGFibGVdIE1pc3NpbmcgPG1hdC10YWJsZT4gaW4gdGhlIEhUTUwgdGVtcGxhdGUgKGFmdGVyIHdhaXRpbmcgNTAwbXMpISBDb21wb25lbnQ6ICR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfWApLFxuICAgICAgICAgIDUwMFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBNYWtlIHN1cmUgdG8gd2FpdCB0aGUgdGFibGVcbiAgICAgIGF3YWl0IHdhaXRGb3IoKCkgPT4gISF0aGlzLnRhYmxlLCB7IHN0b3A6IHRoaXMuZGVzdHJveVN1YmplY3QsIHN0b3BFcnJvcjogZmFsc2UgLyphdm9pZCBlcnJvciB3aGVuIGRlc3RvcnlpbmcgdGhlIHRhYmxlKi8gfSk7XG4gICAgfVxuXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIG1lcmdlKFxuICAgICAgICAvLyBMaXN0ZW4gc29ydCBldmVudHNcbiAgICAgICAgKHRoaXMuc29ydCAmJlxuICAgICAgICAgIHRoaXMuc29ydC5zb3J0Q2hhbmdlLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMuc29ydC5kaXNhYmxlZCksXG4gICAgICAgICAgICBtZXJnZU1hcChhc3luYyAoKSA9PiB0aGlzLnNhdmVCZWZvcmVBY3Rpb24oJ3NvcnQnKSksXG4gICAgICAgICAgICBmaWx0ZXIoKHJlcykgPT4gcmVzID09PSB0cnVlKSxcbiAgICAgICAgICAgIC8vIFNhdmUgc29ydCBpbiBzZXR0aW5nc1xuICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBbdGhpcy5zb3J0LmFjdGl2ZSwgdGhpcy5zb3J0LmRpcmVjdGlvbiB8fCAnYXNjJ10uam9pbignOicpO1xuICAgICAgICAgICAgICB0aGlzLnNhdmVQYWdlU2V0dGluZ3ModmFsdWUsIFNFVFRJTkdTX1NPUlRFRF9DT0xVTU4pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApKSB8fFxuICAgICAgICAgIEVNUFRZLFxuXG4gICAgICAgIC8vIExpc3RlbiBwYWdpbmF0b3IgZXZlbnRzXG4gICAgICAgICh0aGlzLnBhZ2luYXRvciAmJlxuICAgICAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2UucGlwZShcbiAgICAgICAgICAgIG1lcmdlTWFwKChfKSA9PiB0aGlzLnNhdmVCZWZvcmVBY3Rpb24oJ3NvcnQnKSksXG4gICAgICAgICAgICBmaWx0ZXIoKHNhdmVkKSA9PiBzYXZlZCA9PT0gdHJ1ZSksXG4gICAgICAgICAgICAvLyBTYXZlIHBhZ2Ugc2l6ZSBpbiBzZXR0aW5nc1xuICAgICAgICAgICAgdGFwKCgpID0+IHRoaXMuc2F2ZVBhZ2VTZXR0aW5ncyh0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSwgU0VUVElOR1NfUEFHRV9TSVpFKSlcbiAgICAgICAgICApKSB8fFxuICAgICAgICAgIEVNUFRZXG4gICAgICApXG4gICAgICAgIC8vIFJlZnJlc2ggb24gYW55IHNvcnQgb3IgcGFnaW5hdG9yIGV2ZW50c1xuICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIHRoaXMub25Tb3J0LmVtaXQodmFsdWUpO1xuICAgICAgICAgIHRoaXMuZW1pdFJlZnJlc2godmFsdWUpO1xuICAgICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBJZiB0aGUgdXNlciBjaGFuZ2VzIHRoZSBzb3J0IG9yZGVyLCByZXNldCBiYWNrIHRvIHRoZSBmaXJzdCBwYWdlLlxuICAgIGlmICh0aGlzLnNvcnQgJiYgdGhpcy5wYWdpbmF0b3IpIHtcbiAgICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24odGhpcy5zb3J0LnNvcnRDaGFuZ2UucGlwZShmaWx0ZXIoKCkgPT4gIXRoaXMuc29ydC5kaXNhYmxlZCkpLnN1YnNjcmliZSgoKSA9PiAodGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gMCkpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVkaXRSb3dCeUlkKGV2ZW50OiBFdmVudCB8IHVuZGVmaW5lZCwgaWQ6IG51bWJlciwgb3B0cz86IHsgZm9jdXNDb2x1bW4/OiBzdHJpbmcgfSkge1xuICAgIGlmIChpZCA8IDApIHJldHVybjtcbiAgICBpZiAoaWQgPj0gdGhpcy52aXNpYmxlUm93Q291bnQpIHtcbiAgICAgIHRoaXMuYWRkUm93KGV2ZW50LCB1bmRlZmluZWQsIHsgLi4ub3B0cywgZWRpdGluZzogdHJ1ZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgcm93ID0gYXdhaXQgdGhpcy5kYXRhU291cmNlLmdldFJvdyhpZCk7XG4gICAgICB0aGlzLmVkaXRSb3coZXZlbnQsIHJvdywgb3B0cyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRMb2FkaW5nKHZhbHVlOiBib29sZWFuLCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMubG9hZGluZ1N1YmplY3QuY2xvc2VkICYmIHRoaXMubG9hZGluZ1N1YmplY3QudmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQodmFsdWUpO1xuXG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVOZXdSb3coZXZlbnQ6IEV2ZW50IHwgdW5kZWZpbmVkLCByb3c6IFRhYmxlRWxlbWVudDxUPikge1xuICAgIC8vIE1ha2Ugc3VyZSByb3cgd2lsbCBiZSBjYW5jZWxsZWQsIGFuZCBOT1QgZGVsZXRlZFxuICAgIGlmIChyb3cuaWQgIT09IC0xKSB0aHJvdyBuZXcgRXJyb3IoJ1JvdyBtdXN0IGhhdmUgaWQgPSAtMScpO1xuICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgdGhpcy5lZGl0ZWRSb3cgPSB1bmRlZmluZWQ7IC8vIHVuc2VsZWN0IHJvd1xuICAgIHRoaXMuX2RhdGFTb3VyY2UuY2FuY2VsT3JEZWxldGUocm93KTtcbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcblxuICAgIHRoaXMub25DYW5jZWxPckRlbGV0ZVJvdy5uZXh0KHJvdyk7XG4gICAgdGhpcy50b3RhbFJvd0NvdW50LS07XG4gICAgdGhpcy52aXNpYmxlUm93Q291bnQtLTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlRXhpc3RpbmdSb3coZXZlbnQ6IEV2ZW50IHwgbnVsbCwgcm93OiBUYWJsZUVsZW1lbnQ8VD4sIG9wdHM/OiB7IGludGVyYWN0aXZlPzogYm9vbGVhbiB9KSB7XG4gICAgLy8gTWFrZSBzdXJlIHJvdyB3aWxsIGJlIGNhbmNlbGxlZCwgYW5kIE5PVCBkZWxldGVkXG4gICAgaWYgKHJvdy5pZCA9PT0gLTEpIHRocm93IG5ldyBFcnJvcignUm93IG11c3QgaGF2ZSBhbiBpZCcpO1xuXG4gICAgaWYgKGV2ZW50Py5kZWZhdWx0UHJldmVudGVkKSByZXR1cm4gMDsgLy8gU0tpcFxuICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgdGhpcy5kZWxldGVSb3cobnVsbCwgcm93LCBvcHRzKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FuY2VsRXhpc3RpbmdSb3coZXZlbnQ6IEV2ZW50IHwgdW5kZWZpbmVkLCByb3c6IFRhYmxlRWxlbWVudDxUPiwgb3B0cz86IHsgaW50ZXJhY3RpdmU/OiBib29sZWFuOyBrZWVwRWRpdGluZz86IGJvb2xlYW4gfSkge1xuICAgIC8vIE1ha2Ugc3VyZSByb3cgd2lsbCBiZSBjYW5jZWxsZWQsIGFuZCBOT1QgZGVsZXRlZFxuICAgIGlmIChyb3cuaWQgPT09IC0xIHx8ICFyb3cuZWRpdGluZykgdGhyb3cgbmV3IEVycm9yKCdSb3cgY2Fubm90IGJlIGNhbmNlbGluZywgYnV0IG9ubHkgZGVsZXRpbmcnKTtcblxuICAgIGNvbnN0IGNvbmZpcm1lZCA9ICFvcHRzIHx8IG9wdHMuaW50ZXJhY3RpdmUgIT09IGZhbHNlO1xuXG4gICAgLy8gQXNrIHVzZXIgY29uZmlybWF0aW9uLCBpZiBjYW5jZWxcbiAgICBpZiAoIWNvbmZpcm1lZCAmJiByb3cuZGlydHkgJiYgKHRoaXMuY29uZmlybUJlZm9yZUNhbmNlbCB8fCB0aGlzLm9uQmVmb3JlQ2FuY2VsUm93cy5vYnNlcnZlZCkpIHtcbiAgICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMuY2FuQ2FuY2VsUm93cyhbcm93XSwgb3B0cykudGhlbigoY29uZmlybSkgPT4ge1xuICAgICAgICAvLyBJZiBjb25maXJtZWQsIGxvb3BcbiAgICAgICAgaWYgKGNvbmZpcm0pIHRoaXMuY2FuY2VsRXhpc3RpbmdSb3coZXZlbnQsIHJvdywgeyBpbnRlcmFjdGl2ZTogZmFsc2UgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBrZWVwRWRpdGluZyA9IHJvdy5lZGl0aW5nICYmICghb3B0cyB8fCBvcHRzLmtlZXBFZGl0aW5nICE9PSBmYWxzZSk7XG4gICAgdGhpcy5lZGl0ZWRSb3cgPSB1bmRlZmluZWQ7IC8vIHVuc2VsZWN0IHJvd1xuICAgIHRoaXMuX2RhdGFTb3VyY2UuY2FuY2VsT3JEZWxldGUocm93KTtcbiAgICB0aGlzLm9uQ2FuY2VsT3JEZWxldGVSb3cubmV4dChyb3cpO1xuXG4gICAgLy8gTWFyayByb3cgYXMgcHJpc3RpbmVcbiAgICB0aGlzLmNoZWNrSWZSb3dQcmlzdGluZShyb3cpO1xuXG4gICAgLy8gUmVzdG9yZSBlZGl0aW5nIHN0YXRlXG4gICAgaWYgKGtlZXBFZGl0aW5nKSB7XG4gICAgICB0aGlzLmVkaXRSb3codW5kZWZpbmVkLCByb3cpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tJZlJvd1ByaXN0aW5lKHJvdzogVGFibGVFbGVtZW50PFQ+LCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuOyBvbmx5U2VsZj86IGJvb2xlYW4gfSkge1xuICAgIC8vIE1hcmsgcm93IGFzIHByaXN0aW5lXG4gICAgY29uc3QgbWFya1Jvd0FzUHJpc3RpbmUgPSB0aGlzLmRhdGFTb3VyY2U/LmNvbmZpZy5yZXN0b3JlT3JpZ2luYWxEYXRhT25DYW5jZWwgPT09IHRydWU7XG4gICAgaWYgKG1hcmtSb3dBc1ByaXN0aW5lKSB7XG4gICAgICByb3cudmFsaWRhdG9yPy5tYXJrQXNQcmlzdGluZSgpO1xuXG4gICAgICAvLyBDaGVjayBpZiB0YWJsZSBpcyBub3cgcHJpc3RpbmVcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLm9ubHlTZWxmICE9PSB0cnVlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2hlY2tJZlByaXN0aW5lKG9wdHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tJZlByaXN0aW5lKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5kaXJ0eSkgcmV0dXJuOyAvLyBBbHJlYWR5IHByaXN0aW5lXG5cbiAgICBjb25zdCByb3dzID0gdGhpcy5fZGF0YVNvdXJjZS5nZXRSb3dzKCk7XG4gICAgY29uc3QgcHJpc3RpbmUgPSAocm93cyB8fCBbXSkuZmluZEluZGV4KChyb3cpID0+IHJvdy5kaXJ0eSkgPT09IC0xO1xuICAgIGlmIChwcmlzdGluZSkgdGhpcy5tYXJrQXNQcmlzdGluZShvcHRzKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlGaWx0ZXIoZmlsdGVyOiBGLCBvcHRzOiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbdGFibGVdIEFwcGx5aW5nIGZpbHRlcicsIGZpbHRlcik7XG4gICAgdGhpcy5fZmlsdGVyID0gZmlsdGVyO1xuICAgIGlmIChvcHRzICYmIG9wdHMuZW1pdEV2ZW50KSB7XG4gICAgICBpZiAodGhpcy5wYWdpbmF0b3IgJiYgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID4gMCkge1xuICAgICAgICB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPSAwO1xuICAgICAgfVxuICAgICAgdGhpcy5lbWl0UmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuRGF0YVNvdXJjZUxvYWRpbmcoZGF0YVNvdXJjZTogRW50aXRpZXNUYWJsZURhdGFTb3VyY2U8VCwgRiwgSUQ+KSB7XG4gICAgaWYgKCFkYXRhU291cmNlKSB0aHJvdyBuZXcgRXJyb3IoJ1t0YWJsZV0gZGF0YVNvdXJjZSBub3Qgc2V0ICEnKTtcblxuICAgIC8vIENsZWFuaW5nIHByZXZpb3VzIHN1YnNjcmlwdGlvbiBvbiBkYXRhc291cmNlXG4gICAgaWYgKGlzTm90TmlsKHRoaXMuX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uKSkge1xuICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gTWFueSBjYWxsIHRvIGxpc3RlbkRhdGFzb3VyY2UoKTogQ2xlYW5pbmcgcHJldmlvdXMgc3Vic2NyaXB0aW9ucy4uLicpO1xuICAgICAgdGhpcy5fZGF0YVNvdXJjZUxvYWRpbmdTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMudW5yZWdpc3RlclN1YnNjcmlwdGlvbih0aGlzLl9kYXRhU291cmNlTG9hZGluZ1N1YnNjcmlwdGlvbik7XG4gICAgfVxuXG4gICAgLy8gUHJvcGFnZSBsb2FkaW5nIHRvIHRhYmxlXG4gICAgdGhpcy5fZGF0YVNvdXJjZUxvYWRpbmdTdWJzY3JpcHRpb24gPSB0aGlzLl9kYXRhU291cmNlLmxvYWRpbmdTdWJqZWN0XG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKGlzTm90TmlsKSwgLy8gZmlsdGVyIG91dCAndW5kZWZpbmVkJ1xuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuXG4gICAgICAgIC8vIElmIGNoYW5nZWQgdG8gVHJ1ZTogcHJvcGFnYXRlIGFzIHNvb24gYXMgcG9zc2libGVcbiAgICAgICAgdGFwKChsb2FkaW5nKSA9PiBsb2FkaW5nICYmIHRoaXMuc2V0TG9hZGluZyh0cnVlKSksXG5cbiAgICAgICAgLy8gSWYgY2hhbmdlZCB0byBGYWxzZTogd2FpdCAyNTBtcyBiZWZvcmUgcHJvcGFnYXRlICh0byBtYWtlIHN1cmUgdGhlIHNwaW5uZXIgaGFzIGJlZW4gZGlzcGxheWVkKVxuICAgICAgICBkZWJvdW5jZVRpbWUoMjUwKSxcbiAgICAgICAgdGFwKChsb2FkaW5nKSA9PiAhbG9hZGluZyAmJiB0aGlzLnNldExvYWRpbmcoZmFsc2UpKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24odGhpcy5fZGF0YVNvdXJjZUxvYWRpbmdTdWJzY3JpcHRpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydENlbGxWYWx1ZUNoYW5nZXMobmFtZTogc3RyaW5nLCByb3c6IFRhYmxlRWxlbWVudDxUPikge1xuICAgIGNvbnN0IGRlZiA9IHRoaXMuX2NlbGxWYWx1ZUNoYW5nZXNEZWZzW25hbWVdO1xuICAgIGlmICghZGVmKSB7XG4gICAgICBjb25zb2xlLndhcm4oYFt0YWJsZV0gTGlzdGVuZXIgd2l0aCBuYW1lIHske25hbWV9IG5vdCByZWdpc3RlcmVkISBQbGVhc2UgY2FsbCByZWdpc3RlckNlbGxWYWx1ZUNoYW5nZXMoKSBiZWZvcmVgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gU3RvcCBwcmV2aW91cyBzdWJzY3JpcHRpb25cbiAgICBpZiAoZGVmLnN1YnNjcmlwdGlvbikge1xuICAgICAgZGVmLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgZGVmLnN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGBbdGFibGVdIFN0YXJ0IHZhbHVlcyBjaGFuZ2VzIG9uIHJvdyBwYXRoIHske2RlZi5mb3JtUGF0aH19YCk7XG4gICAgfVxuXG4gICAgLy8gTGlzdGVuIHZhbHVlIGNoYW5nZXMsIGFuZCByZWRpcmVjdCB0byBldmVudCBlbWl0dGVyXG4gICAgY29uc3QgY29udHJvbCA9IHJvdy52YWxpZGF0b3IgJiYgQXBwRm9ybVV0aWxzLmdldENvbnRyb2xGcm9tUGF0aChyb3cudmFsaWRhdG9yLCBkZWYuZm9ybVBhdGgpO1xuICAgIGlmICghY29udHJvbCkge1xuICAgICAgY29uc29sZS53YXJuKGBbdGFibGVdIENvdWxkIG5vdCBsaXN0ZW4gY2VsbCBjaGFuZ2VzOiBubyB2YWxpZGF0b3Igb3IgaW52YWxpZCBmb3JtIHBhdGggeyR7ZGVmLmZvcm1QYXRofX1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVmLnN1YnNjcmlwdGlvbiA9IGNvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIC8vIGRvbid0IGVtaXQgaWYgY29udHJvbCBpcyBkaXNhYmxlZFxuICAgICAgICAgIGZpbHRlcigoKSA9PiBjb250cm9sLmVuYWJsZWQpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IGRlZi5zdWJqZWN0Lm5leHQodmFsdWUpKTtcblxuICAgICAgLy8gRW1pdCB0aGUgYWN0dWFsIHZhbHVlXG4gICAgICBpZiAoZGVmLmVtaXRJbml0aWFsVmFsdWUgIT09IGZhbHNlKSB7XG4gICAgICAgIGRlZi5zdWJqZWN0Lm5leHQoY29udHJvbC52YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdG9wQ2VsbFZhbHVlQ2hhbmdlcyhuYW1lOiBzdHJpbmcsIGRlc3Ryb3k/OiBib29sZWFuKSB7XG4gICAgY29uc3QgZGVmID0gdGhpcy5fY2VsbFZhbHVlQ2hhbmdlc0RlZnNbbmFtZV07XG4gICAgaWYgKCFkZWYpIHJldHVybjtcbiAgICBpZiAoZGVmLnN1YnNjcmlwdGlvbikge1xuICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gU3RvcCB2YWx1ZSBjaGFuZ2VzIG9uIHJvdyBwYXRoIHsnICsgZGVmLmZvcm1QYXRoICsgJ30nKTtcbiAgICAgIGRlZi5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIGRlZi5zdWJzY3JpcHRpb24gPSBudWxsO1xuICAgIH1cbiAgICBpZiAoZGVzdHJveSAmJiBkZWYuc3ViamVjdCkge1xuICAgICAgZGVmLnN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgIGRlZi5zdWJqZWN0LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
1902
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvdGFibGUvdGFibGUuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixpQkFBaUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFZLEtBQUssRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqSixPQUFPLEVBQUUsT0FBTyxFQUE4QixNQUFNLHdCQUF3QixDQUFDO0FBRTdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBaUIsTUFBTSxNQUFNLENBQUM7QUFDM0csT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHL0ksT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQVcsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEcsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQWMsMkJBQTJCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMzRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxZQUFZLEVBQThCLE1BQU0sb0JBQW9CLENBQUM7QUFDOUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDMUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUNMLDJCQUEyQixHQUc1QixNQUFNLGlFQUFpRSxDQUFDO0FBQ3pFLE9BQU8sRUFBb0IseUJBQXlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRyxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGlCQUFpQixFQUNqQixZQUFZLEVBQ1osS0FBSyxFQUNMLGVBQWUsRUFDZixRQUFRLEVBQUUsZUFBZSxFQUN6QixpQkFBaUIsRUFDakIsU0FBUyxHQUNWLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQWtCLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlGLE9BQU8sRUFBb0IsTUFBTSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRzdDLE9BQU8sRUFBNkIsbUJBQW1CLEVBQXVCLE1BQU0saURBQWlELENBQUM7QUFDdEksT0FBTyxFQUVMLGlCQUFpQixFQUNqQix5QkFBeUIsRUFDekIsd0JBQXdCLEVBQ3hCLG9CQUFvQixFQUNwQixzQkFBc0IsRUFFdEIsd0JBQXdCLEVBQ3hCLGtCQUFrQixFQUNsQixzQkFBc0IsR0FDdkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7QUFFeEQsV0FBVztBQUVYLGtFQUFrRTtBQUNsRSxNQUFNLE9BQWdCLFFBQVE7SUFzWGhCO0lBQ0E7SUFDRjtJQXJYRixZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDcEIsYUFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDbkMsOEJBQThCLENBQWU7SUFFN0MscUJBQXFCLEdBRXpCLEVBQUUsQ0FBQztJQUVHLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDaEIseUJBQXlCLENBQThCO0lBQ3ZELGNBQWMsR0FBRyxJQUFJLENBQUM7SUFDYixFQUFFLENBQW9CO0lBQy9CLEtBQUssQ0FBaUI7SUFDdEIsTUFBTSxDQUFTO0lBQ2YsYUFBYSxDQUFnQjtJQUM3QixRQUFRLENBQVc7SUFDbkIsUUFBUSxDQUF1QjtJQUMvQixTQUFTLENBQW1CO0lBQzVCLFNBQVMsQ0FBa0I7SUFDM0IsU0FBUyxDQUFrQjtJQUMzQixlQUFlLENBQWtCO0lBQ2pDLHFCQUFxQixDQUFTO0lBQzlCLGdCQUFnQixDQUFzQjtJQUM3QixjQUFjLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUV4RCxlQUFlLEdBQWEsRUFBRSxDQUFDO0lBQy9CLGdCQUFnQixDQUFXO0lBQzNCLGFBQWEsR0FBa0IsSUFBSSxDQUFDO0lBQ3BDLGVBQWUsQ0FBUztJQUN4QixxQkFBcUIsQ0FBNEI7SUFFeEMsWUFBWSxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ25ELGNBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBVSxJQUFJLENBQUMsQ0FBQztJQUNwRCxhQUFhLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDcEQsY0FBYyxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ3JELFlBQVksR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUNuRCxZQUFZLEdBQUcsSUFBSSxlQUFlLENBQVMsU0FBUyxDQUFDLENBQUM7SUFFL0QsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsS0FBYTtRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRUQsU0FBUyxHQUFHLElBQUksY0FBYyxDQUFrQixJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDMUQsa0JBQWtCLEdBQXNCLElBQUksQ0FBQztJQUM3QyxrQ0FBa0MsR0FBRyxLQUFLLENBQUM7SUFDM0MsU0FBUyxHQUFvQixTQUFTLENBQUM7SUFDdkMsa0JBQWtCLENBQWdEO0lBQ3pELE1BQU0sQ0FBVTtJQUV6QixnQkFBZ0I7SUFDUCxVQUFVLENBQVM7SUFDbkIsS0FBSyxDQUFVO0lBQ2YsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO0lBQzdCLGdCQUFnQixDQUFTO0lBQ3pCLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDaEIsUUFBUSxDQUFVO0lBQ2xCLGFBQWEsQ0FBVTtJQUN2QixnQkFBZ0IsR0FBRyxLQUFLLENBQUM7SUFDekIsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0lBQzVCLG1CQUFtQixHQUFHLEtBQUssQ0FBQztJQUM1QixnQkFBZ0IsR0FBRyxLQUFLLENBQUM7SUFDekIsZ0JBQWdCLENBQVU7SUFDMUIsbUJBQW1CLENBQVU7SUFDN0IsY0FBYyxDQUFVO0lBQ3hCLGdCQUFnQixDQUFVO0lBQzFCLGlCQUFpQixHQUFHLEtBQUssQ0FBQztJQUMxQix5QkFBeUIsR0FBRyxLQUFLLENBQUMsQ0FBQywyREFBMkQ7SUFDOUYsbUJBQW1CLEdBQUcsR0FBRyxDQUFDLENBQUMsbURBQW1EO0lBRTlFLGFBQWEsQ0FBUztJQUN0QixvQkFBb0IsQ0FBZ0I7SUFDcEMsZUFBZSxHQUFHLGlCQUFpQixDQUFDO0lBQ3BDLHNCQUFzQixHQUFHLHlCQUF5QixDQUFDO0lBRTVELGdCQUFnQjtJQUNQLFdBQVcsQ0FBUztJQUU3QixJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMvRixDQUFDO0lBRUQsSUFBYSxVQUFVLENBQUMsS0FBd0M7UUFDOUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFhLE1BQU0sQ0FBQyxLQUFRO1FBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLElBQUksYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7SUFFUyxTQUFTLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUNwQyxVQUFVLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7SUFDakQsU0FBUyxHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO0lBQ2hELFFBQVEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ25DLGlCQUFpQixHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO0lBQ3hELHNCQUFzQixHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO0lBQzdELG1CQUFtQixHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO0lBQzFELGtCQUFrQixHQUFHLHlCQUF5QixFQUF3QyxDQUFDO0lBQ3ZGLGtCQUFrQixHQUFHLHlCQUF5QixFQUF3QyxDQUFDO0lBQ3ZGLFlBQVksR0FBRyx5QkFBeUIsRUFBcUYsQ0FBQztJQUM5SCxrQkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBcUIsQ0FBQztJQUMzRCxNQUFNLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUNqQyxPQUFPLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztJQUN0QyxPQUFPLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztJQUUvQyxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzNGLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzlGLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzlGLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDO0lBQ25DLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7SUFDcEMsQ0FBQztJQUVELE9BQU8sQ0FBQyxJQUFrRDtRQUN4RCxJQUFJLElBQUksQ0FBQyxJQUFJO1lBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLO1lBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzdELENBQUM7SUFFRCxNQUFNLENBQUMsSUFBa0Q7UUFDdkQsSUFBSSxJQUFJLENBQUMsSUFBSTtZQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUMxQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSztZQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM3RCxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCw4REFBOEQ7SUFDOUQsSUFBYSxRQUFRLENBQUMsS0FBYztRQUNsQyxJQUFJLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM3QixJQUFJLEtBQUs7Z0JBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDOztnQkFDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDeEIsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFrRDtRQUM1RCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDbEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssRUFBRSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQWtEO1FBQy9ELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUNuRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxFQUFFLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsSUFBa0Q7UUFDaEUsSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUM7WUFDdkYsb0ZBQW9GO1lBQ3BGLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQztnQkFDNUIsb0ZBQW9GO2dCQUNwRixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQzdCLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzdCLENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3pDLENBQUM7Z0JBRUQsdUJBQXVCO2dCQUN2QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLENBQUM7WUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUN0QixhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxJQUFJLENBQUMscUJBQXFCLEdBQUcsU0FBUyxDQUFDO1FBQ3ZDLElBQUksYUFBYSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUM7WUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDaEYsQ0FBQztJQUVEOzs7T0FHRztJQUNILGFBQWEsQ0FBQyxJQUFrRDtRQUM5RCxPQUFPLENBQUMsSUFBSSxDQUFDLGdHQUFnRyxDQUFDLENBQUM7UUFDL0csSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLGdCQUFnQixFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssRUFBRSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBOEI7UUFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3RFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLO2dCQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM3RCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLGdCQUFnQixFQUFFLENBQUM7UUFDL0MsQ0FBQztJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsSUFBOEI7UUFDekMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3BFLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLENBQUMsd0JBQXdCO1lBQ3RELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLO2dCQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM3RCxDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUE4QjtRQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDckUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUs7Z0JBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzdELENBQUM7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLElBQThCO1FBQzFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxZQUFZLENBQUMsSUFBOEI7UUFDekMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUE4QjtRQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDbEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFN0IsbUNBQW1DO1lBQ25DLElBQUksT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQzNDLElBQXVCLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdkMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQThCO1FBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUNuRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQztJQUNwQyxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksSUFBSSxDQUFDLElBQUk7WUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDNUMsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxJQUFJO1lBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQzNDLENBQUM7SUFFRCxJQUFJLFFBQVEsQ0FBQyxLQUFhO1FBQ3hCLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQzdCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUNsQyxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxpQkFBaUIsQ0FBQztJQUNsRyxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBSSxVQUFVLENBQUMsTUFBYztRQUMzQixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUM1QixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO1FBQzlCLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUM7SUFDOUcsQ0FBQztJQUVELElBQUksYUFBYSxDQUFDLEtBQW9CO1FBQ3BDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQzlCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQztRQUNwQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLFVBQVUsR0FBd0IsSUFBSSxDQUFDO0lBRS9DLElBQWEsU0FBUyxDQUFDLEtBQW1CO1FBQ3hDLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLE1BQU0sS0FBSyxLQUFLLENBQUM7SUFDL0MsQ0FBQztJQUV1QyxLQUFLLENBQWM7SUFDZixjQUFjLENBQWU7SUFDbEMsSUFBSSxDQUFVO0lBRXJELFlBQ0UsUUFBa0IsRUFDUixPQUFpQixFQUNqQixXQUErQyxFQUNqRCxPQUFXO1FBRlQsWUFBTyxHQUFQLE9BQU8sQ0FBVTtRQUNqQixnQkFBVyxHQUFYLFdBQVcsQ0FBb0M7UUFDakQsWUFBTyxHQUFQLE9BQU8sQ0FBSTtRQUVuQixJQUFJLENBQUMsRUFBRSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBRW5DLHNCQUFzQjtRQUN0QixJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSwyQkFBMkIsQ0FBQztZQUMvRCxpQkFBaUIsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMseUJBQXlCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUMzRSxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sQ0FBQztJQUNsRSxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLFlBQVk7WUFBRSxPQUFPLENBQUMsaUJBQWlCO1FBQ2hELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBRXpCLGVBQWU7UUFDZixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLHdCQUF3QjtRQUM3RyxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLCtCQUErQjtRQUM1RyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLCtCQUErQjtRQUN6RyxJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsK0JBQStCO1FBQ3JHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsK0JBQStCO1FBQ3pHLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNuRixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyw2Q0FBNkM7UUFFbkosMENBQTBDO1FBQzFDLElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFBRSxNQUFNLEtBQUssQ0FBQywrREFBK0QsQ0FBQyxDQUFDO1FBRTlILDhDQUE4QztRQUM5QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRTVELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUVqRCx5Q0FBeUM7UUFDekMsQ0FBQztZQUNDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUM7UUFDakQsQ0FBQztRQUVELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRTFDLG1DQUFtQztRQUNuQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU1RixtQ0FBbUM7UUFDbkMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFNUYscUNBQXFDO1FBQ3JDLElBQUksQ0FBQyxvQkFBb0IsQ0FDdkIsSUFBSSxDQUFDLGlCQUFpQjthQUNuQixJQUFJLENBQ0gsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxJQUFJLElBQUksQ0FBQyxFQUN2QyxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNmLEdBQUcsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDN0IsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQ2pDLEtBQUssRUFBRTtRQUNQLFFBQVE7UUFDUiwrREFBK0Q7UUFFL0QsMENBQTBDO1FBQzFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFDakMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FDL0IsQ0FDRixDQUNGO2FBQ0EsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUN2QyxDQUFDO1FBRUYsa0RBQWtEO1FBQ2xELElBQUksQ0FBQyxvQkFBb0IsQ0FDdkIsSUFBSSxDQUFDLFNBQVM7YUFDWCxJQUFJLENBQ0gsU0FBUyxDQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQVEsQ0FBQyxFQUNwRCxTQUFTLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUN2QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN2QixJQUFJLEtBQUssS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDckIsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdkIsQ0FBQztZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3RCLElBQUksSUFBSSxDQUFDLEtBQUs7b0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO2dCQUNuRixPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2QixDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsS0FBSztnQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7WUFDMUUsT0FBTyxJQUFJLENBQUMsV0FBVztpQkFDcEIsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQztpQkFDM0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNqQixJQUFJLElBQUksQ0FBQyxLQUFLO2dCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7WUFDM0MsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxXQUFXO1FBQ25DLENBQUMsQ0FBQyxDQUNIO2FBQ0EsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQWdDLENBQUMsQ0FBQyxDQUN6RSxDQUFDO1FBRUYsbUNBQW1DO1FBQ25DLElBQUksSUFBSSxDQUFDLFdBQVc7WUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXJFLCtCQUErQjtRQUMvQixJQUFJLElBQUksQ0FBQyx5QkFBeUI7WUFBRSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNwRSxDQUFDO0lBRUQsZUFBZTtRQUNiLHlDQUF5QztRQUN6QyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCO1lBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUZBQW1GLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUU3SCw0Q0FBNEM7UUFDNUMsd0NBQXdDO1FBQ3hDLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVqQyxtQ0FBbUM7UUFDbkMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMvRixJQUFJLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO1FBRWhDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVoQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRTNCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVUsQ0FDZCxHQUE4QixFQUM5QixJQUVDO1FBRUQsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPLENBQUMsbUJBQW1CO1FBQ3JDLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsZUFBZSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7Z0JBQ3RDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSztnQkFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsSUFBSSxpQkFBaUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztZQUNoSSxJQUFJLElBQUksQ0FBQyxLQUFLO2dCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sY0FBYyxDQUFDLENBQUM7UUFDMUUsQ0FBQzthQUFNLENBQUM7WUFDTiwwREFBMEQ7WUFDMUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7WUFDdkIsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUM7UUFDM0IsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDM0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUMxQyxDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxhQUFhLENBQUMsVUFBNkM7UUFDekQsSUFBSSxJQUFJLENBQUMsV0FBVztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQUMxRSxJQUFJLFVBQVUsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ2xELElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1lBQzlCLElBQUksSUFBSSxDQUFDLFlBQVk7Z0JBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2xELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDMUIsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFvQjtRQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsZUFBZSxDQUFDLE1BQW9CO1FBQ2xDLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxTQUFTLENBQUMsTUFBUyxFQUFFLElBQTRFO1FBQy9GLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFFbkMsNENBQTRDO1FBQzVDLElBQUksQ0FBQyxrQ0FBa0MsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxFQUFFLElBQUksQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBRXRJLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDMUIsZ0RBQWdEO1lBQ2hELElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNmLE9BQU87Z0JBQ1AsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUM3QyxxRUFBcUU7b0JBQ3JFLElBQUksS0FBSyxFQUFFLENBQUM7d0JBQ1YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ2pDLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sa0NBQWtDO2dCQUNsQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNqQyxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTix3QkFBd0I7WUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQWEsRUFBRSxHQUFxQixFQUFFLElBQStCO1FBQ3ZGLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEMsZ0RBQWdEO1lBQ2hELElBQUksR0FBRyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQztnQkFDM0IsT0FBTyxDQUNMLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDekUsa0NBQWtDO3FCQUNqQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQ3BELENBQUM7WUFDSixDQUFDO1lBRUQseUJBQXlCO1lBQ3pCLElBQUksZUFBZSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDO2dCQUN2QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixDQUFDO1lBRUQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLDJCQUEyQixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxLQUF3QixFQUFFLEdBQXFCLEVBQUUsSUFBK0I7UUFDakcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDdEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNuQyxNQUFNLFdBQVcsR0FBRyxJQUFJLEVBQUUsV0FBVyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUM7UUFFN0QsS0FBSyxFQUFFLGVBQWUsRUFBRSxDQUFDO1FBRXpCLDhDQUE4QztRQUM5QyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLG9EQUFvRDtZQUNwRCxJQUFJLFdBQVcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksV0FBVyxDQUFDLFNBQVMsRUFBRSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO2dCQUM3RixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFFdEMsOEVBQThFO2dCQUM5RSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzdFLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUVELGlDQUFpQztpQkFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQkFDckQsZ0RBQWdEO2dCQUNoRCxJQUFJLFdBQVcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUM7b0JBQ25DLE9BQU8sQ0FDTCxZQUFZLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7d0JBQ2pGLGtDQUFrQzt5QkFDakMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUNwRSxDQUFDO2dCQUNKLENBQUM7Z0JBRUQsMEJBQTBCO2dCQUMxQixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUVwQixPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDO1FBRUQsZ0NBQWdDO1FBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsS0FBd0IsRUFBRSxHQUFxQixFQUFFLElBQStCO1FBQ2hHLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3RDLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUM1QixNQUFNLFdBQVcsR0FBRyxJQUFJLEVBQUUsV0FBVyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUM7UUFFOUQsS0FBSyxFQUFFLGVBQWUsRUFBRSxDQUFDO1FBRXpCLG1CQUFtQjtRQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3hDLGdEQUFnRDtZQUNoRCxJQUFJLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUM7Z0JBQzNCLE9BQU8sQ0FDTCxZQUFZLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3pFLGtDQUFrQztxQkFDakMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUNuRSxDQUFDO1lBQ0osQ0FBQztZQUVELDBCQUEwQjtZQUMxQixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztZQUMvQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFcEIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsZ0JBQWdCO1FBQ2hCLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFFcEQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxpQkFBaUIsQ0FBQyxLQUFhLEVBQUUsR0FBcUI7UUFDcEQsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQzVCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTztZQUFFLE9BQU8sSUFBSSxDQUFDLENBQUMsb0JBQW9CO1FBRTNELG1DQUFtQztRQUNuQyxvQkFBb0I7UUFDcEIsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFMUMsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLHNDQUFzQztZQUN0QyxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1lBQzdCLENBQUM7WUFFRCx3Q0FBd0M7WUFDeEMsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsNkJBQTZCLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZFLENBQUM7WUFFRCxjQUFjO1lBQ2QsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBRWxCLHlCQUF5QjtZQUN6QixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRXRDLE9BQU8sSUFBSSxDQUFDLENBQUMsV0FBVztRQUMxQixDQUFDO1FBRUQsSUFBSSxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbEIsZ0RBQWdEO1lBQ2hELG1EQUFtRDtZQUNuRCxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQzFCLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDO29CQUMxQyxrQ0FBa0M7cUJBQ2pDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xELE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUVELGdDQUFnQztZQUNoQyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDZixPQUFPLENBQUMsSUFBSSxDQUFDLDZDQUE2QyxDQUFDLENBQUM7Z0JBQzVELFlBQVksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUN4RCxDQUFDO1lBRUQsbURBQW1EO1lBQ25ELEdBQUcsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUVqQyxvREFBb0Q7WUFDcEQsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDM0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2QixDQUFDO1FBQ0gsQ0FBQztRQUVELGdCQUFnQjtRQUNoQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBWSxFQUFFLEdBQW9CLEVBQUUsSUFBdUQ7UUFDeEcsaUJBQWlCO1FBQ2pCLElBQUksR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFDRCx3Q0FBd0M7YUFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBQ0Qsb0NBQW9DO2FBQy9CLENBQUM7WUFDSixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMzQyxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBYSxFQUFFLFFBQWlCLEVBQUUsSUFBa0Q7UUFDL0YsSUFBSSxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUVqQywwQ0FBMEM7UUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0IsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsaUNBQWlDO1FBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO1lBQzlCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELGNBQWM7UUFDZCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3JELE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSSxDQUFDLElBQWdDO1FBQ3pDLElBQUksR0FBRztZQUNMLFdBQVcsRUFBRSxJQUFJLENBQUMsbUJBQW1CO1lBQ3JDLEdBQUcsSUFBSTtTQUNSLENBQUM7UUFDRixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxlQUFlLEVBQUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLENBQUM7UUFDL0UsQ0FBQztRQUVELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVsQixrRUFBa0U7UUFDbEUsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxXQUFXO1lBQzNDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUU7WUFDekYsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNkLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1FBQ3pELE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFdBQVc7WUFDM0MsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsV0FBVztZQUN6RyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBRWQsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUM7WUFDOUIsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsdUJBQXVCLEVBQUUsT0FBTyxFQUFFLCtCQUErQixFQUFFLENBQUM7UUFDL0YsQ0FBQztRQUVELGlCQUFpQjtRQUNqQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFcEIsSUFBSSxDQUFDO1lBQ0gseUJBQXlCO1lBQ3pCLElBQUksSUFBSSxDQUFDLEtBQUs7Z0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1lBQ3RFLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUUzQyxJQUFJLElBQUk7Z0JBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBRWhDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUMzQyxNQUFNLEdBQUcsQ0FBQztRQUNaLENBQUM7Z0JBQVMsQ0FBQztZQUNULElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUVuQix1QkFBdUI7WUFDdkIsSUFBSSxRQUFRLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUFDO2dCQUNwQyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1lBQzlFLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFhLEVBQUUsSUFBZ0M7UUFDcEQscUJBQXFCO1FBQ3JCLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDMUgsS0FBSyxFQUFFLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDcEMscUJBQXFCO2dCQUNyQixJQUFJLE9BQU87b0JBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUN6RCxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUNoQixLQUFhLEVBQ2IsR0FBcUIsRUFDckIsSUFHQztRQUVELEtBQUssRUFBRSxlQUFlLEVBQUUsQ0FBQztRQUV6QixHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUNwQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxNQUFNO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBRTVELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMvQixJQUFJLE1BQVcsQ0FBQztRQUVoQixnQ0FBZ0M7UUFDaEMsSUFBSSxlQUFlLENBQUMsSUFBSSxFQUFFLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztZQUM5QyxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ1osb0JBQW9CO1lBQ3BCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDdkMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNuRSxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxzQkFBc0I7YUFDakIsQ0FBQztZQUNKLE1BQU0sR0FBRyxNQUFNLENBQUM7WUFFaEIsMEJBQTBCO1lBQzFCLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUVELG9EQUFvRDtRQUNwRCxJQUFJLGVBQWUsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxDQUFDO1lBQzlDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUM7WUFDbkMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUN2QyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLENBQUM7Z0JBQ25DLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3hDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztZQUM5QixDQUFDO1lBQ0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JCLENBQUM7UUFFRCxTQUFTO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELGdGQUFnRjtJQUNoRixhQUFhO1FBQ1gsUUFBUTtRQUNSLDhGQUE4RjtRQUU5RixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzFILENBQUM7SUFFRCxnRkFBZ0Y7SUFDaEYsS0FBSyxDQUFDLFlBQVk7UUFDaEIsSUFBSSxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU87UUFDekIsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3pCLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLGVBQWUsQ0FBQyxLQUFZLEVBQUUsSUFBZ0M7UUFDbEUsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoRixJQUFJLFdBQVcsR0FBRyxDQUFDO1lBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM1QyxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFtQixFQUFFLEdBQW9CLEVBQUUsSUFBZ0M7UUFDekYsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzlELE9BQU8sV0FBVyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFtQixFQUFFLElBQXVCLEVBQUUsSUFBZ0M7UUFDN0YsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsZUFBZSxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxDQUFDO1FBQy9FLENBQUM7UUFDRCxJQUFJLEtBQUssRUFBRSxnQkFBZ0I7WUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU87UUFDOUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVsQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyx5Q0FBeUM7UUFFN0YsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFELE9BQU8sQ0FBQyxJQUFJLENBQUMsK0dBQStHLENBQUMsQ0FBQztZQUM5SCxPQUFPLENBQUMsQ0FBQyxDQUFDLGtCQUFrQjtRQUM5QixDQUFDO1FBRUQsc0NBQXNDO1FBQ3RDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQzFGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzNDLElBQUksQ0FBQyxTQUFTO2dCQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsNkNBQTZDO1FBQ3pFLENBQUM7UUFFRCxzQkFBc0I7UUFDdEIsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsZ0JBQWdCO1FBRTFDLGdDQUFnQztRQUNoQyxzRUFBc0U7UUFDdEUsMENBQTBDO1FBQzFDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbkUsTUFBTSxXQUFXLEdBQXNCLEVBQUUsQ0FBQztRQUUxQyxpQ0FBaUM7UUFDakMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixvRkFBb0Y7WUFDcEYsUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDakMsbUJBQW1CO2dCQUNuQixvQ0FBb0M7Z0JBQ3BDLHNEQUFzRDtnQkFDdEQsSUFBSSxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQywyRUFBMkUsRUFBRSxDQUFDO29CQUMvSCxJQUFJLElBQUksQ0FBQyxLQUFLO3dCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUMvRCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDN0IsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNiLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUNyQixXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN0QixJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssR0FBRzt3QkFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztvQkFDdkQsT0FBTyxLQUFLLENBQUMsQ0FBQyxvREFBb0Q7Z0JBQ3BFLENBQUM7Z0JBQ0QsdUVBQXVFO3FCQUNsRSxJQUFJLEdBQUcsQ0FBQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ25DLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUM3QixHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ2IscUNBQXFDO29CQUNyQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUMsQ0FBQztvQkFDbEcsT0FBTyxJQUFJLENBQUMsQ0FBQyx1REFBdUQ7Z0JBQ3RFLENBQUM7Z0JBRUQsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDLENBQUMsQ0FBQztZQUVILHlEQUF5RDtZQUN6RCx3SUFBd0k7WUFDeEksSUFBSSxXQUFXLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDMUMsNkNBQTZDO2dCQUM3QyxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDcEQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNYLHdDQUF3QztvQkFDeEMsT0FBTztnQkFDVCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCwrQkFBK0I7WUFDL0Isa0dBQWtHO1lBQ2xHLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNwQixJQUFJLElBQUksQ0FBQyxLQUFLO29CQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLFFBQVEsQ0FBQyxNQUFNLFVBQVUsQ0FBQyxDQUFDO2dCQUMzRSxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzdDLENBQUM7WUFFRCxnRkFBZ0Y7WUFDaEYsb0NBQW9DO1lBQ3BDLHNDQUFzQztZQUV0Qyx3QkFBd0I7WUFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUVqQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztZQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyx1Q0FBdUMsRUFBRSxDQUFDLENBQUM7WUFDL0UsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBRXBCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFbkMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3JCLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7WUFDM0MsTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBVTtRQUM1QixJQUFJLEVBQUUsS0FBSyxTQUFTO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDbkMsTUFBTSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDdEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN2QixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFPO1FBQzNCLElBQUksSUFBSSxLQUFLLFNBQVM7WUFBRSxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEQsTUFBTSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDdEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3hGLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDdkIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQXdCLEVBQUUsR0FBb0I7UUFDNUQseUVBQXlFO1FBQ3pFLDBCQUEwQjtRQUMxQixLQUFLLEVBQUUsZUFBZSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUF3QixFQUFFLEdBQW9CO1FBQ3JELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLCtCQUErQjtZQUMvQixJQUFJLElBQUksQ0FBQyxLQUFLO2dCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUVBQWlFLENBQUMsQ0FBQztZQUNqRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdkUsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsUUFBUTtRQUNSLCtDQUErQztRQUUvQyxxQkFBcUI7UUFDckIsSUFBSSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztZQUM1QixJQUFJLElBQUksQ0FBQyxLQUFLO2dCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztZQUM1RSxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCw4QkFBOEI7UUFDOUIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELCtDQUErQztRQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3hCLElBQUksSUFBSSxDQUFDLFdBQVc7Z0JBQUUsT0FBTyxDQUFDLHVCQUF1QjtZQUVyRCxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDeEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3pCLENBQUM7WUFFRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLHVCQUF1QjtZQUNoRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFFckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUM7aUJBQ2xDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVc7aUJBQ3BFLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUVwQixtREFBbUQ7Z0JBQ25ELElBQUksSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsRUFBRSxDQUFDO29CQUNqQyxVQUFVLENBQUMsR0FBRyxFQUFFO3dCQUNkLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO29CQUMzQixDQUFDLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7Z0JBQy9CLENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztnQkFDM0IsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUwsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsb0JBQW9CO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDLENBQUM7SUFDaEcsQ0FBQztJQUVELE9BQU8sQ0FBQyxFQUFVLEVBQUUsU0FBaUI7UUFDbkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBcUI7UUFDekIsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRUQsUUFBUSxDQUFDLElBQXFCO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUs7WUFBRSxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN6RCxPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFFRCxLQUFLLENBQUMsc0JBQXNCLENBQUMsS0FBYTtRQUN4QyxLQUFLLEVBQUUsY0FBYyxFQUFFLENBQUM7UUFFeEIsbUNBQW1DO1FBQ25DLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRXpDLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7WUFDeEMsU0FBUyxFQUFFLDJCQUEyQjtZQUN0QyxjQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUU7WUFDM0IsUUFBUSxFQUFFLFdBQVcsSUFBSSxhQUFhO1NBQ3ZDLENBQUMsQ0FBQztRQUVILGlCQUFpQjtRQUNqQixNQUFNLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUV0QixhQUFhO1FBQ2IsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTyxDQUFDLFlBQVk7UUFFL0IsZ0JBQWdCO1FBQ2hCLE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxRyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ2hHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVwQix1QkFBdUI7UUFDdkIsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLHdCQUF3QixDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFhLEVBQUUsR0FBb0I7UUFDM0MsT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBd0I7UUFDaEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV4QixzREFBc0Q7UUFDdEQsSUFBSSxLQUFLLEVBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDM0MsVUFBVSxDQUFDLEtBQUssSUFBSSxFQUFFO2dCQUNwQixNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDdEIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckksT0FBTyxJQUFJLENBQUMsZ0JBQWdCO2FBQ3pCLE1BQU0sQ0FBQyxhQUFhLENBQUM7YUFDckIsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3hJLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNkLElBQUk7WUFDSixLQUFLLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQztZQUNuQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkQsT0FBTyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDeEQsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBYSxFQUFFLEdBQXFCO1FBQ25ELEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUM1QixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU87WUFBRSxPQUFPO1FBRWpDLFFBQVE7UUFDUiwrREFBK0Q7UUFFL0QsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLDZCQUE2QjtZQUM3QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzFCLENBQUM7UUFFRCxxQkFBcUI7UUFDckIsSUFBSSxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbEIsSUFBSSxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ2xCLGdEQUFnRDtnQkFDaEQsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ2hCLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDM0YsT0FBTztnQkFDVCxDQUFDO2dCQUVELGlDQUFpQztnQkFDakMsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ2hCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUM5QixPQUFPO2dCQUNULENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELGdDQUFnQzthQUMzQixDQUFDO1lBQ0oseUJBQXlCO1lBQ3pCLDBDQUEwQztZQUMxQyxzQ0FBc0M7WUFDdEMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBQzNELE9BQU87WUFDVCxDQUFDO1FBQ0gsQ0FBQztRQUVELHFDQUFxQztRQUNyQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxJQUFZO1FBQzVCLDZEQUE2RDtRQUU3RCxvQ0FBb0M7UUFDcEMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25ELE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksYUFBYSxDQUFDO0lBQ2pFLENBQUM7SUFFRCw0QkFBNEI7SUFFbEIsT0FBTyxDQUFDLEtBQXdCLEVBQUUsR0FBb0IsRUFBRSxJQUErQjtRQUMvRixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDeEQsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEdBQUc7WUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDLHlCQUF5QjtRQUNsRSxJQUFJLEtBQUssRUFBRSxnQkFBZ0I7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUUxQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRTdCLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxFQUFFLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQ3pELElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztRQUNyQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNPLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxFQUFVLEVBQUUsSUFBUTtRQUN0RCxJQUFJLElBQUksR0FBRyxLQUFLLENBQUM7UUFDakIsSUFBSSxDQUFDO1lBQ0gsc0NBQXNDO1lBQ3RDLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUM5QixJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNwQyxJQUFJLElBQUk7b0JBQUUsT0FBTyxJQUFJLENBQUM7Z0JBQ3RCLE9BQU8sQ0FBQyxJQUFJLENBQUMsbURBQW1ELEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDeEUsQ0FBQztZQUVELGNBQWM7WUFDZCxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNULElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3hDLElBQUksSUFBSTtvQkFBRSxPQUFPLElBQUksQ0FBQztnQkFDdEIsT0FBTyxDQUFDLElBQUksQ0FBQyxpREFBaUQsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN4RSxDQUFDO1lBRUQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLG9CQUFvQjtZQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUMzQyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFjLGlCQUFpQjtRQUM3QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDeEYsQ0FBQztJQUVTLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBdUIsRUFBRSxJQUFnQztRQUNyRixzQkFBc0I7UUFDdEIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDO2dCQUNILE1BQU0sU0FBUyxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLFdBQVcsRUFBRTtvQkFDN0UsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFO2lCQUNqQixDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLFNBQVM7b0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDL0IsQ0FBQztZQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxHQUFHLEtBQUssV0FBVztvQkFBRSxPQUFPLEtBQUssQ0FBQyxDQUFDLGNBQWM7Z0JBQ3JELE9BQU8sQ0FBQyxLQUFLLENBQUMseUNBQXlDLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzlELE1BQU0sR0FBRyxDQUFDO1lBQ1osQ0FBQztRQUNILENBQUM7UUFFRCx3QkFBd0I7UUFDeEIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdEUsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFUyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQXdCLEVBQUUsSUFBZ0M7UUFDdEYsaUJBQWlCO1FBQ2pCLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFL0UsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUMsQ0FBQyxlQUFlO1FBRXBELHNCQUFzQjtRQUN0QixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsV0FBVyxFQUFFO29CQUM1RSxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUU7aUJBQ2pCLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsUUFBUTtvQkFBRSxPQUFPLEtBQUssQ0FBQztZQUM5QixDQUFDO1lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDYixJQUFJLEdBQUcsS0FBSyxXQUFXO29CQUFFLE9BQU8sS0FBSyxDQUFDLENBQUMsY0FBYztnQkFDckQsT0FBTyxDQUFDLEtBQUssQ0FBQyx5Q0FBeUMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDOUQsTUFBTSxHQUFHLENBQUM7WUFDWixDQUFDO1FBQ0gsQ0FBQztRQUVELHdCQUF3QjtRQUN4QixJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN0RSxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVTLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxVQUEwQjtRQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2hCLHdCQUF3QjtZQUN4QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxJQUFJLElBQWEsQ0FBQztRQUNsQixRQUFRLFVBQVUsRUFBRSxDQUFDO1lBQ25CLEtBQUssUUFBUTtnQkFDWCxJQUFJLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO2dCQUM3QixNQUFNO1lBQ1IsS0FBSyxRQUFRO2dCQUNYLElBQUksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7Z0JBQzdCLE1BQU07WUFDUixLQUFLLE1BQU07Z0JBQ1QsSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7Z0JBQzNCLE1BQU07WUFDUjtnQkFDRSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxtQkFBbUI7UUFDbkIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBRXJCLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQy9CLG1CQUFtQjtnQkFDbkIsSUFBSSxDQUFDO29CQUNILE1BQU0sR0FBRyxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUU7d0JBQ2xFLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUU7cUJBQ2xELENBQUMsQ0FBQztvQkFDSCxTQUFTLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQztvQkFDMUIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQ2xCLENBQUM7Z0JBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztvQkFDYixJQUFJLEdBQUcsS0FBSyxXQUFXO3dCQUFFLE9BQU8sS0FBSyxDQUFDLENBQUMsY0FBYztvQkFDckQsT0FBTyxDQUFDLEtBQUssQ0FBQyx5Q0FBeUMsRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDOUQsTUFBTSxHQUFHLENBQUM7Z0JBQ1osQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ1Qsc0JBQXNCO2dCQUN0QixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMscUJBQXFCO2dCQUN6QyxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQyxDQUFDLDhCQUE4QjtRQUM3QyxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUMsQ0FBQyx5QkFBeUI7SUFDekMsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDTyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQU0sRUFBRSxHQUFvQjtRQUNsRCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN4QixJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM3QixPQUFPLENBQUMsSUFBSSxDQUFDLDZEQUE2RCxDQUFDLENBQUM7WUFDOUUsQ0FBQztZQUVELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDNUIsNEVBQTRFO2dCQUM1RSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDekIsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBRUQsd0NBQXdDO1lBQ3hDLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2QsT0FBTyxDQUFDLElBQUksQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO2dCQUNqRSxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFFRCw0RUFBNEU7WUFDNUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUV2QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFO2dCQUNuRCxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUs7Z0JBQ3RCLFdBQVcsRUFBRSxFQUFFO2FBQ2hCLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFUyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsS0FBVztRQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUV2QyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsNEVBQTRFO1FBQzVFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFdkIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRTtZQUN0RCxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDdEIsV0FBVyxFQUFFLEVBQUU7U0FDaEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGlEQUFpRDtJQUN2QyxrQkFBa0I7UUFDMUIsT0FBTyx3QkFBd0IsQ0FBQztJQUNsQyxDQUFDO0lBRVMsY0FBYztRQUN0QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRVMsZUFBZTtRQUN2QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDMUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEMsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNuRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQzVGLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxLQUFLLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ3BHLENBQUM7UUFDRCxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBRVMsV0FBVztRQUNuQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFTLGtCQUFrQixDQUFDLENBQUM7UUFDbEUsT0FBTyxRQUFRLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUMxQyxDQUFDO0lBRVMsaUJBQWlCO1FBQ3pCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV4QyxtQkFBbUI7UUFDbkIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLDBDQUEwQztZQUMxQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDakYsQ0FBQztRQUVELDBCQUEwQjtRQUMxQixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV6RixxQkFBcUI7UUFDckIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXJGLHlDQUF5QztRQUN6QyxXQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFcEksa0NBQWtDO1FBQ2xDLFdBQVcsQ0FBQyxJQUFJLENBQ2QsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDdkksQ0FBQztRQUVGLE9BQU8sQ0FDTCxpQkFBaUI7YUFDZCxNQUFNLENBQUMsV0FBVyxDQUFDO2FBQ25CLE1BQU0sQ0FBQyxlQUFlLENBQUM7WUFDeEIseUJBQXlCO2FBQ3hCLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUM5RCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDTyxhQUFhO1FBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUNqRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87WUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVTLG9CQUFvQixDQUFDLEdBQWlCO1FBQzlDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFUyxzQkFBc0IsQ0FBQyxHQUFpQjtRQUNoRCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRVMseUJBQXlCLENBQ2pDLFNBQWlCLEVBQ2pCLE9BQStDO1FBRS9DLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVTLGlCQUFpQixDQUFDLFVBQWtCO1FBQzVDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDLEdBQUcsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDMUYsQ0FBQztJQUVTLGVBQWU7UUFDdkIsK0JBQStCO1FBQy9CLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsK0lBQStJO1FBQy9JLE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1FBQ3hGLE1BQU0sRUFBRSxHQUNOLElBQUksQ0FBQyxRQUFRO2FBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQzthQUNWLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO2FBQ3RCLE9BQU8sQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDO1lBQzNCLEdBQUc7WUFDSCxXQUFXLENBQUM7UUFDZCxzREFBc0Q7UUFDdEQsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRVMsS0FBSyxDQUFDLGFBQWEsQ0FDM0IsUUFBaUIsRUFDakIsSUFBdUU7UUFFdkUsaUNBQWlDO1FBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO1lBQzlCLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUZBQWlGLENBQUMsQ0FBQztZQUNoRyxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLEVBQUUsT0FBTyxLQUFLLEtBQUssQ0FBQyxDQUFDLG9DQUFvQztRQUVuRyxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUUzQixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNoQix3QkFBd0I7WUFDeEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztZQUM3QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksRUFBRSxXQUFXLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQztZQUU3RCwyQkFBMkI7WUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7WUFDckIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBRUQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV2QixJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyx1Q0FBdUMsRUFBRSxDQUFDLENBQUM7UUFFL0UsYUFBYTtRQUNiLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLO1lBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRTNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVTLHdCQUF3QixDQUFDLElBQVksRUFBRSxRQUFpQixFQUFFLGdCQUEwQjtRQUM1RixRQUFRLEdBQUcsUUFBUSxJQUFJLElBQUksQ0FBQztRQUM1QixnQkFBZ0IsR0FBRyxnQkFBZ0IsSUFBSSxLQUFLLENBQUM7UUFDN0MsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxRQUFRLElBQUksR0FBRyxDQUFDLGdCQUFnQixLQUFLLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztZQUNwRixNQUFNLEtBQUssQ0FBQyxpSUFBaUksQ0FBQyxDQUFDO1FBQ2pKLENBQUM7UUFFRCxzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1QsSUFBSSxJQUFJLENBQUMsS0FBSztnQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLHlCQUF5QixJQUFJLCtCQUErQixRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3RHLEdBQUcsR0FBRztnQkFDSixPQUFPLEVBQUUsSUFBSSxPQUFPLEVBQU87Z0JBQzNCLFlBQVksRUFBRSxJQUFJO2dCQUNsQixRQUFRO2dCQUNSLGdCQUFnQjthQUNqQixDQUFDO1lBQ0YsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztZQUV2QywwQ0FBMEM7WUFDMUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlHLENBQUM7UUFFRCxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUM7SUFDckIsQ0FBQztJQUVTLGFBQWEsQ0FBQyxVQUFrQixFQUFFLElBQWEsRUFBRSxJQUE4QjtRQUN2RixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDeEQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNWLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3hDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLFVBQVUsQ0FBQyxDQUFDO2dCQUM5RSxJQUFJLEtBQUssSUFBSSxDQUFDO29CQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN4RCxDQUFDO1lBRUQsNEJBQTRCO1lBQzVCLElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNqRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRVMsYUFBYSxDQUFDLFVBQWtCO1FBQ3hDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRVMsWUFBWTtRQUNwQixJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFUyxhQUFhO1FBQ3JCLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVTLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxLQUFhLEVBQUUsSUFBd0I7UUFDM0UsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQix5Q0FBeUM7WUFDekMsT0FBTyxNQUFNLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzFJLENBQUM7UUFDRCw0QkFBNEI7UUFDNUIsT0FBTyxNQUFNLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRVMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLEtBQWEsRUFBRSxJQUF3QjtRQUMzRSxPQUFPLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUksQ0FBQztJQUVTLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxLQUFhO1FBQ2xELE9BQU8sTUFBTSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUVTLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBc0I7UUFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1FBQ2pHLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVTLFVBQVUsQ0FBQyxJQUE4QjtRQUNqRCxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRVMsV0FBVyxDQUFDLEdBQXFCLEVBQUUsSUFBZ0M7UUFDM0UsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQzVCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFFckQsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRTtZQUM5RCxHQUFHLElBQUksQ0FBQyxxQkFBcUI7WUFDN0IsR0FBRyxJQUFJO1NBQ1IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVTLFFBQVEsQ0FBQyxLQUFhLEVBQUUsSUFBOEI7UUFDOUQsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxFQUFFLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ08sTUFBTSxDQUFDLEVBQUssRUFBRSxFQUFLO1FBQzNCLE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFUyxjQUFjLENBQUMsR0FBcUIsRUFBRSxJQUFrRDtRQUNoRyxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDNUIsSUFBSSxHQUFHO1lBQUUsR0FBRyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRVMsZUFBZSxDQUFVLFlBQXFCO1FBQ3RELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRVMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEtBQVUsRUFBRSxZQUFxQixFQUFFLElBQThCO1FBQ2hHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFUyxXQUFXLENBQUMsS0FBVztRQUMvQiwrRUFBK0U7UUFDL0UsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDL0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ08sc0JBQXNCO1FBQzlCLElBQUksSUFBSSxDQUFDLGtCQUFrQjtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLENBQUMsQ0FBQztRQUV6RixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxjQUFjLENBQUksSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTFELHFCQUFxQjtRQUNyQixJQUFJLENBQUMsb0JBQW9CLENBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsbUNBQW1DO1NBQ2xILENBQUM7UUFFRiwyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLG9CQUFvQixDQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVc7WUFDekIsMkVBQTJFO2FBQzFFLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxrQ0FBa0MsR0FBRyxJQUFJLENBQUM7WUFDL0MsSUFBSSxDQUFDO2dCQUNILE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzlGLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JILElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixDQUFDO29CQUFTLENBQUM7Z0JBQ1QsSUFBSSxDQUFDLGtDQUFrQyxHQUFHLEtBQUssQ0FBQztZQUNsRCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQ0wsQ0FBQztRQUVGLDBCQUEwQjtRQUMxQixJQUFJLENBQUMsb0JBQW9CLENBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsa0NBQWtDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxFQUFFO1lBQ2hILG1CQUFtQjtZQUNuQixJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQ2xDLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztvQkFDekMsbUJBQW1CO3FCQUNsQixNQUFNLENBQUMsR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUN0Riw0Q0FBNEM7cUJBQzNDLE1BQU0sQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsQ0FDN0MsQ0FBQztZQUNKLENBQUM7WUFDRCx3QkFBd0I7WUFDeEIsSUFBSSxlQUFlLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNuQyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDdkUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FDbEMsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDN0gsQ0FBQztZQUNKLENBQUM7WUFDRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCwwQkFBMEI7SUFFbEIsS0FBSyxDQUFDLDZCQUE2QjtRQUN6QyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2hCLDREQUE0RDtZQUM1RCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDZixVQUFVLENBQ1IsR0FBRyxFQUFFLENBQ0gsQ0FBQyxJQUFJLENBQUMsS0FBSztvQkFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLHNGQUFzRixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQzdILEdBQUcsQ0FDSixDQUFDO1lBQ0osQ0FBQztZQUVELDhCQUE4QjtZQUM5QixNQUFNLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMseUNBQXlDLEVBQUUsQ0FBQyxDQUFDO1FBQy9ILENBQUM7UUFFRCxJQUFJLENBQUMsb0JBQW9CLENBQ3ZCLEtBQUs7UUFDSCxxQkFBcUI7UUFDckIsQ0FBQyxJQUFJLENBQUMsSUFBSTtZQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FDdkIsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFDakMsUUFBUSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQ25ELE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQztZQUM3Qix3QkFBd0I7WUFDeEIsR0FBRyxDQUFDLEdBQUcsRUFBRTtnQkFDUCxNQUFNLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDekUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1lBQ3ZELENBQUMsQ0FBQyxDQUNILENBQUM7WUFDRixLQUFLO1FBRVAsMEJBQTBCO1FBQzFCLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFDYixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ3RCLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQzlDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQztZQUNqQyw2QkFBNkI7WUFDN0IsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQzlFLENBQUM7WUFDRixLQUFLLENBQ1I7WUFDQywwQ0FBMEM7YUFDekMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FDTCxDQUFDO1FBRUYsb0VBQW9FO1FBQ3BFLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFJLENBQUM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUF3QixFQUFFLEVBQVUsRUFBRSxJQUErQjtRQUM3RixJQUFJLEVBQUUsR0FBRyxDQUFDO1lBQUUsT0FBTztRQUNuQixJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDNUQsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLFVBQVUsQ0FBQyxLQUFjLEVBQUUsSUFBOEI7UUFDL0QsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRWhDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLFlBQVksQ0FBQyxLQUF3QixFQUFFLEdBQW9CO1FBQ2pFLG1EQUFtRDtRQUNuRCxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQzVELEtBQUssRUFBRSxlQUFlLEVBQUUsQ0FBQztRQUV6QixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsZUFBZTtRQUMzQyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFbEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxLQUFtQixFQUFFLEdBQW9CLEVBQUUsSUFBZ0M7UUFDbkcsbURBQW1EO1FBQ25ELElBQUksR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFFMUQsSUFBSSxLQUFLLEVBQUUsZ0JBQWdCO1lBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPO1FBQzlDLEtBQUssRUFBRSxjQUFjLEVBQUUsQ0FBQztRQUV4QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVPLGlCQUFpQixDQUFDLEtBQXdCLEVBQUUsR0FBb0IsRUFBRSxJQUF1RDtRQUMvSCxtREFBbUQ7UUFDbkQsSUFBSSxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU87WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7UUFFakcsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxLQUFLLENBQUM7UUFFdEQsbUNBQW1DO1FBQ25DLElBQUksQ0FBQyxTQUFTLElBQUksR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUM5RixLQUFLLEVBQUUsZUFBZSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUMvQyxxQkFBcUI7Z0JBQ3JCLElBQUksT0FBTztvQkFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQzFFLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxLQUFLLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxDQUFDLGVBQWU7UUFDM0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVuQyx1QkFBdUI7UUFDdkIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTdCLHdCQUF3QjtRQUN4QixJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLGtCQUFrQixDQUFDLEdBQW9CLEVBQUUsSUFBa0Q7UUFDdkcsdUJBQXVCO1FBQ3ZCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsMkJBQTJCLEtBQUssSUFBSSxDQUFDO1FBQ3ZGLElBQUksaUJBQWlCLEVBQUUsQ0FBQztZQUN0QixHQUFHLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRSxDQUFDO1lBRWhDLGlDQUFpQztZQUNqQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsZUFBZSxDQUFDLElBQThCO1FBQzFELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sQ0FBQyxtQkFBbUI7UUFFNUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN4QyxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNuRSxJQUFJLFFBQVE7WUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFTyxXQUFXLENBQUMsTUFBUyxFQUFFLElBQTZCO1FBQzFELElBQUksSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLHlCQUF5QixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMzQixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUMvQixDQUFDO1lBQ0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JCLENBQUM7SUFDSCxDQUFDO0lBRU8sdUJBQXVCLENBQUMsVUFBNkM7UUFDM0UsSUFBSSxDQUFDLFVBQVU7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFFakUsK0NBQStDO1FBQy9DLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFLENBQUM7WUFDbEQsSUFBSSxJQUFJLENBQUMsS0FBSztnQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLDZFQUE2RSxDQUFDLENBQUM7WUFDN0csSUFBSSxDQUFDLDhCQUE4QixDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2xELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBRUQsMkJBQTJCO1FBQzNCLElBQUksQ0FBQyw4QkFBOEIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWM7YUFDbEUsSUFBSSxDQUNILE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSx5QkFBeUI7UUFDM0Msb0JBQW9CLEVBQUU7UUFFdEIsb0RBQW9EO1FBQ3BELEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFbEQsaUdBQWlHO1FBQ2pHLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFDakIsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQ3JEO2FBQ0EsU0FBUyxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVPLHFCQUFxQixDQUFDLElBQVksRUFBRSxHQUFvQjtRQUM5RCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1QsT0FBTyxDQUFDLElBQUksQ0FBQywrQkFBK0IsSUFBSSxnRUFBZ0UsQ0FBQyxDQUFDO1lBQ2xILE9BQU87UUFDVCxDQUFDO1FBQ0QsNkJBQTZCO1FBQzdCLElBQUksR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3JCLEdBQUcsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDL0IsR0FBRyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDMUIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLElBQUksQ0FBQyxLQUFLO2dCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsNkNBQTZDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQzlGLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVoRSx3QkFBd0I7UUFDeEIsSUFBSSxHQUFHLENBQUMsZ0JBQWdCLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDbkMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsSUFBSSxJQUFJLENBQUMsS0FBSztnQkFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLDZFQUE2RSxHQUFHLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztRQUM3SCxDQUFDO2FBQU0sQ0FBQztZQUNOLHNEQUFzRDtZQUN0RCxHQUFHLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZO2lCQUNwQyxJQUFJO1lBQ0gsb0NBQW9DO1lBQ3BDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQzlCO2lCQUNBLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNuRCxDQUFDO0lBQ0gsQ0FBQztJQUVPLG9CQUFvQixDQUFDLElBQVksRUFBRSxPQUFpQjtRQUMxRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPO1FBQ2pCLElBQUksR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3JCLElBQUksSUFBSSxDQUFDLEtBQUs7Z0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQywwQ0FBMEMsR0FBRyxHQUFHLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQy9GLEdBQUcsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDL0IsR0FBRyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDMUIsQ0FBQztRQUNELElBQUksT0FBTyxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMzQixHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3ZCLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7d0dBaGhFbUIsUUFBUTs0RkFBUixRQUFRLDQ3Q0FnWGpCLFFBQVEsaUZBQ1IsWUFBWSx1RUFDWixPQUFPOzs0RkFsWEUsUUFBUTtrQkFGN0IsU0FBUzs2SkFtRUMsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0cseUJBQXlCO3NCQUFqQyxLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLO2dCQVVPLFVBQVU7c0JBQXRCLEtBQUs7Z0JBUU8sTUFBTTtzQkFBbEIsS0FBSztnQkFnQkksU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBMkNNLFFBQVE7c0JBQXBCLEtBQUs7Z0JBZ0xPLFNBQVM7c0JBQXJCLEtBQUs7Z0JBWWtDLEtBQUs7c0JBQTVDLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDTSxjQUFjO3NCQUF6RCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ0gsSUFBSTtzQkFBMUMsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBJbmplY3RvciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0U29ydCwgTWF0U29ydGFibGUsIFNvcnREaXJlY3Rpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBFTVBUWSwgbWVyZ2UsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgZmlyc3QsIG1lcmdlTWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUYWJsZUVsZW1lbnQgfSBmcm9tICdAZS1pcy9uZ3gtbWF0ZXJpYWwtdGFibGUnO1xuaW1wb3J0IHsgRW50aXRpZXNUYWJsZURhdGFTb3VyY2UgfSBmcm9tICcuL2VudGl0aWVzLXRhYmxlLWRhdGFzb3VyY2UuY2xhc3MnO1xuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgRW50aXR5VXRpbHMsIElFbnRpdHkgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgQWxlcnRDb250cm9sbGVyLCBNb2RhbENvbnRyb2xsZXIsIE5hdkNvbnRyb2xsZXIsIFRvYXN0Q29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQ29sdW1uSXRlbSwgVGFibGVTZWxlY3RDb2x1bW5zQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS1zZWxlY3QtY29sdW1ucy5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRXJyb3JDb2RlcyB9IGZyb20gJy4uL3NlcnZpY2VzL2Vycm9ycyc7XG5pbXBvcnQgeyBBcHBGb3JtVXRpbHMsIENhblNhdmUsIElBcHBGb3JtLCBPblJlYWR5IH0gZnJvbSAnLi4vZm9ybS9mb3JtLnV0aWxzJztcbmltcG9ydCB7IExvY2FsU2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbG9jYWwtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1xuICBNYXRBdXRvY29tcGxldGVDb25maWdIb2xkZXIsXG4gIE1hdEF1dG9jb21wbGV0ZUZpZWxkQWRkT3B0aW9ucyxcbiAgTWF0QXV0b2NvbXBsZXRlRmllbGRDb25maWcsXG59IGZyb20gJy4uLy4uL3NoYXJlZC9tYXRlcmlhbC9hdXRvY29tcGxldGUvbWF0ZXJpYWwuYXV0b2NvbXBsZXRlLmNvbmZpZyc7XG5pbXBvcnQgeyBDb21wbGV0YWJsZUV2ZW50LCBjcmVhdGVQcm9taXNlRXZlbnRFbWl0dGVyLCBlbWl0UHJvbWlzZUV2ZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2V2ZW50cyc7XG5pbXBvcnQge1xuICBjaGFuZ2VDYXNlVG9VbmRlcnNjb3JlLFxuICBnZXRQcm9wZXJ0eUJ5UGF0aCxcbiAgaXNFbXB0eUFycmF5LFxuICBpc05pbCxcbiAgaXNOb3RFbXB0eUFycmF5LFxuICBpc05vdE5pbCwgaXNOb3ROaWxPckJsYW5rLFxuICBzZXRQcm9wZXJ0eUJ5UGF0aCxcbiAgdG9Cb29sZWFuLFxufSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7IHdhaXRGb3IsIHdhaXRGb3JGYWxzZSwgV2FpdEZvck9wdGlvbnMsIHdhaXRGb3JUcnVlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL29ic2VydmFibGVzJztcbmltcG9ydCB7IFNob3dUb2FzdE9wdGlvbnMsIFRvYXN0cyB9IGZyb20gJy4uLy4uL3NoYXJlZC90b2FzdC90b2FzdHMnO1xuaW1wb3J0IHsgQWxlcnRzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2FsZXJ0cyc7XG5pbXBvcnQgeyBDZGtDb2x1bW5EZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvdGFibGUnO1xuaW1wb3J0IHsgTG9hZFJlc3VsdCB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9lbnRpdHktc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBGb3JtRXJyb3JUcmFuc2xhdGVPcHRpb25zLCBGb3JtRXJyb3JUcmFuc2xhdG9yLCBJRm9ybVBhdGhUcmFuc2xhdG9yIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3ZhbGlkYXRvci9mb3JtLWVycm9yLWFkYXB0ZXIuY2xhc3MnO1xuaW1wb3J0IHtcbiAgQ2VsbFZhbHVlQ2hhbmdlTGlzdGVuZXIsXG4gIERFRkFVTFRfUEFHRV9TSVpFLFxuICBERUZBVUxUX1BBR0VfU0laRV9PUFRJT05TLFxuICBERUZBVUxUX1JFUVVJUkVEX0NPTFVNTlMsXG4gIFJFU0VSVkVEX0VORF9DT0xVTU5TLFxuICBSRVNFUlZFRF9TVEFSVF9DT0xVTU5TLFxuICBTYXZlQWN0aW9uVHlwZSxcbiAgU0VUVElOR1NfRElTUExBWV9DT0xVTU5TLFxuICBTRVRUSU5HU19QQUdFX1NJWkUsXG4gIFNFVFRJTkdTX1NPUlRFRF9DT0xVTU4sXG59IGZyb20gJy4vdGFibGUubW9kZWwnO1xuaW1wb3J0IHsgQXBwVGFibGVVdGlscyB9IGZyb20gJy4vdGFibGUudXRpbHMnO1xuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7IE1hdFRhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgZ2V0Q29udHJvbEZyb21QYXRoIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Zvcm1zJztcblxuLy8gQGR5bmFtaWNcbkBEaXJlY3RpdmUoKVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtY2xhc3Mtc3VmZml4XG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXBwVGFibGU8VCBleHRlbmRzIElFbnRpdHk8VCwgSUQ+LCBGID0gYW55LCBJRCA9IG51bWJlcj5cbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgSUFwcEZvcm0sIENhblNhdmUsIElGb3JtUGF0aFRyYW5zbGF0b3JcbntcbiAgcHJpdmF0ZSBfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfb3BlbmluZ1JvdyA9IGZhbHNlO1xuICBwcml2YXRlIF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgcHJpdmF0ZSBfY2VsbFZhbHVlQ2hhbmdlc0RlZnM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBDZWxsVmFsdWVDaGFuZ2VMaXN0ZW5lcjtcbiAgfSA9IHt9O1xuXG4gIHByb3RlY3RlZCBfZW5hYmxlZCA9IHRydWU7XG4gIHByb3RlY3RlZCBfYXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyOiBNYXRBdXRvY29tcGxldGVDb25maWdIb2xkZXI7XG4gIHByb3RlY3RlZCBhbGxvd1Jvd0RldGFpbCA9IHRydWU7XG4gIHByb3RlY3RlZCByZWFkb25seSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWY7XG4gIHByb3RlY3RlZCByb3V0ZTogQWN0aXZhdGVkUm91dGU7XG4gIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcjtcbiAgcHJvdGVjdGVkIG5hdkNvbnRyb2xsZXI6IE5hdkNvbnRyb2xsZXI7XG4gIHByb3RlY3RlZCBsb2NhdGlvbjogTG9jYXRpb247XG4gIHByb3RlY3RlZCBzZXR0aW5nczogTG9jYWxTZXR0aW5nc1NlcnZpY2U7XG4gIHByb3RlY3RlZCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2U7XG4gIHByb3RlY3RlZCBtb2RhbEN0cmw6IE1vZGFsQ29udHJvbGxlcjtcbiAgcHJvdGVjdGVkIGFsZXJ0Q3RybDogQWxlcnRDb250cm9sbGVyO1xuICBwcm90ZWN0ZWQgdG9hc3RDb250cm9sbGVyOiBUb2FzdENvbnRyb2xsZXI7XG4gIHByb3RlY3RlZCBwcmV2aW91c2x5RWRpdGVkUm93SWQ6IG51bWJlcjtcbiAgcHJvdGVjdGVkIGZvcm1FcnJvckFkYXB0ZXI6IEZvcm1FcnJvclRyYW5zbGF0b3I7XG4gIHByb3RlY3RlZCByZWFkb25seSBkZXN0cm95U3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgZXhjbHVkZXNDb2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xuICBkaXNwbGF5ZWRDb2x1bW5zOiBzdHJpbmdbXTtcbiAgdG90YWxSb3dDb3VudDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHZpc2libGVSb3dDb3VudDogbnVtYmVyO1xuICBlcnJvclRyYW5zbGF0ZU9wdGlvbnM6IEZvcm1FcnJvclRyYW5zbGF0ZU9wdGlvbnM7XG5cbiAgcmVhZG9ubHkgcmVhZHlTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGxvYWRpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcmVhZG9ubHkgc2F2aW5nU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSB0b3VjaGVkU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBkaXJ0eVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgZXJyb3JTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KHVuZGVmaW5lZCk7XG5cbiAgZ2V0IGVycm9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZXJyb3JTdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgc2V0IGVycm9yKGVycm9yOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldEVycm9yKGVycm9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgZ2V0IGVycm9yJCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmVycm9yU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxUYWJsZUVsZW1lbnQ8VD4+KHRydWUsIFtdKTtcbiAgcGVybWFuZW50U2VsZWN0aW9uOiBTZWxlY3Rpb25Nb2RlbDxUPiA9IG51bGw7XG4gIHBlcm1hbmVudFNlbGVjdGlvbkNoYW5nZWRQcmV2ZW50ZWQgPSBmYWxzZTtcbiAgZWRpdGVkUm93OiBUYWJsZUVsZW1lbnQ8VD4gPSB1bmRlZmluZWQ7XG4gIGF1dG9jb21wbGV0ZUZpZWxkczogeyBba2V5OiBzdHJpbmddOiBNYXRBdXRvY29tcGxldGVGaWVsZENvbmZpZyB9O1xuICByZWFkb25seSBtb2JpbGU6IGJvb2xlYW47XG5cbiAgLy8gVGFibGUgb3B0aW9uc1xuICBASW5wdXQoKSBzZXR0aW5nc0lkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGRlYnVnOiBib29sZWFuO1xuICBASW5wdXQoKSBpMThuQ29sdW1uUHJlZml4ID0gJ0NPTU1PTi4nO1xuICBASW5wdXQoKSBpMThuQ29sdW1uU3VmZml4OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGF1dG9Mb2FkID0gdHJ1ZTtcbiAgQElucHV0KCkgcmVhZE9ubHk6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlubGluZUVkaXRpb246IGJvb2xlYW47XG4gIEBJbnB1dCgpIGZvY3VzRmlyc3RDb2x1bW4gPSBmYWxzZTtcbiAgQElucHV0KCkgY29uZmlybUJlZm9yZURlbGV0ZSA9IGZhbHNlO1xuICBASW5wdXQoKSBjb25maXJtQmVmb3JlQ2FuY2VsID0gZmFsc2U7XG4gIEBJbnB1dCgpIHVuZG9hYmxlRGVsZXRpb24gPSBmYWxzZTtcbiAgQElucHV0KCkgc2F2ZUJlZm9yZURlbGV0ZTogYm9vbGVhbjtcbiAgQElucHV0KCkga2VlcEVkaXRlZFJvd09uU2F2ZTogYm9vbGVhbjtcbiAgQElucHV0KCkgc2F2ZUJlZm9yZVNvcnQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNhdmVCZWZvcmVGaWx0ZXI6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHByb3BhZ2F0ZVJvd0Vycm9yID0gZmFsc2U7XG4gIEBJbnB1dCgpIHBlcm1hbmVudFNlbGVjdGlvbkFsbG93ZWQgPSBmYWxzZTsgLy8gQWxsb3cga2VlcCBzZWxlY3RlZCByb3dzIG92ZXIgcGFnZSBjaGFuZ2Ugb3Igc29ydCBjaGFuZ2VcbiAgQElucHV0KCkgb3BlblJvd1Rocm90dGxlVGltZSA9IDgwMDsgLy8gUHJldmVudCBkb3VibGUgY2xpY2sgLSBzZWUgaXNzdWUgc3VtYXJpcy1hcHAjODY0XG5cbiAgQElucHV0KCkgZGVmYXVsdFNvcnRCeTogc3RyaW5nO1xuICBASW5wdXQoKSBkZWZhdWx0U29ydERpcmVjdGlvbjogU29ydERpcmVjdGlvbjtcbiAgQElucHV0KCkgZGVmYXVsdFBhZ2VTaXplID0gREVGQVVMVF9QQUdFX1NJWkU7XG4gIEBJbnB1dCgpIGRlZmF1bHRQYWdlU2l6ZU9wdGlvbnMgPSBERUZBVUxUX1BBR0VfU0laRV9PUFRJT05TO1xuXG4gIC8vIEZvY3VzIG1hbmFnZXJcbiAgQElucHV0KCkgZm9jdXNDb2x1bW46IHN0cmluZztcblxuICBnZXQgZmlyc3RVc2VyQ29sdW1uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheWVkQ29sdW1uc1tSRVNFUlZFRF9TVEFSVF9DT0xVTU5TLmxlbmd0aF07XG4gIH1cblxuICBnZXQgbGFzdFVzZXJDb2x1bW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zW3RoaXMuZGlzcGxheWVkQ29sdW1ucy5sZW5ndGggLSBSRVNFUlZFRF9FTkRfQ09MVU1OUy5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBkYXRhU291cmNlKHZhbHVlOiBFbnRpdGllc1RhYmxlRGF0YVNvdXJjZTxULCBGLCBJRD4pIHtcbiAgICB0aGlzLnNldERhdGFzb3VyY2UodmFsdWUpO1xuICB9XG5cbiAgZ2V0IGRhdGFTb3VyY2UoKTogRW50aXRpZXNUYWJsZURhdGFTb3VyY2U8VCwgRiwgSUQ+IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBmaWx0ZXIodmFsdWU6IEYpIHtcbiAgICB0aGlzLnNldEZpbHRlcih2YWx1ZSk7XG4gIH1cblxuICBnZXQgZmlsdGVyKCk6IEYge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXI7XG4gIH1cblxuICBnZXQgZW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubG9hZGluZyB8fCB0aGlzLnRvdGFsUm93Q291bnQgPT09IDA7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRFbnRpdGllcygpOiBUW10ge1xuICAgIHJldHVybiB0aGlzLnBlcm1hbmVudFNlbGVjdGlvbj8uc2VsZWN0ZWQgfHwgQXBwVGFibGVVdGlscy5nZXRFbnRpdGllcyh0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCk7XG4gIH1cblxuICBAT3V0cHV0KCkgb25SZWZyZXNoID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvbkNsaWNrUm93ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUVsZW1lbnQ8VD4+KCk7XG4gIEBPdXRwdXQoKSBvbk9wZW5Sb3cgPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlRWxlbWVudDxUPj4oKTtcbiAgQE91dHB1dCgpIG9uTmV3Um93ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvblN0YXJ0RWRpdGluZ1JvdyA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVFbGVtZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgb25Db25maXJtRWRpdENyZWF0ZVJvdyA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVFbGVtZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgb25DYW5jZWxPckRlbGV0ZVJvdyA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVFbGVtZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgb25CZWZvcmVEZWxldGVSb3dzID0gY3JlYXRlUHJvbWlzZUV2ZW50RW1pdHRlcjxib29sZWFuLCB7IHJvd3M6IFRhYmxlRWxlbWVudDxUPltdIH0+KCk7XG4gIEBPdXRwdXQoKSBvbkJlZm9yZUNhbmNlbFJvd3MgPSBjcmVhdGVQcm9taXNlRXZlbnRFbWl0dGVyPGJvb2xlYW4sIHsgcm93czogVGFibGVFbGVtZW50PFQ+W10gfT4oKTtcbiAgQE91dHB1dCgpIG9uQmVmb3JlU2F2ZSA9IGNyZWF0ZVByb21pc2VFdmVudEVtaXR0ZXI8eyBjb25maXJtZWQ6IGJvb2xlYW47IHNhdmU6IGJvb2xlYW4gfSwgeyBhY3Rpb246IFNhdmVBY3Rpb25UeXBlOyB2YWxpZDogYm9vbGVhbiB9PigpO1xuICBAT3V0cHV0KCkgb25BZnRlckRlbGV0ZWRSb3dzID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUVsZW1lbnQ8VD5bXT4oKTtcbiAgQE91dHB1dCgpIG9uU29ydCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb25EaXJ0eSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIG9uRXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBnZXQgZGlydHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGlydHlTdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgZ2V0IHZhbGlkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVkaXRlZFJvdyAmJiB0aGlzLmVkaXRlZFJvdy5lZGl0aW5nID8gdGhpcy5lZGl0ZWRSb3cudmFsaWRhdG9yPy52YWxpZCA6IHRydWU7XG4gIH1cblxuICBnZXQgaW52YWxpZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0ZWRSb3cgJiYgdGhpcy5lZGl0ZWRSb3cuZWRpdGluZyA/IHRoaXMuZWRpdGVkUm93LnZhbGlkYXRvcj8uaW52YWxpZCA6IGZhbHNlO1xuICB9XG5cbiAgZ2V0IHBlbmRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdGVkUm93ICYmIHRoaXMuZWRpdGVkUm93LmVkaXRpbmcgPyB0aGlzLmVkaXRlZFJvdy52YWxpZGF0b3I/LnBlbmRpbmcgOiBmYWxzZTtcbiAgfVxuXG4gIGdldCB0b3VjaGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRvdWNoZWRTdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgZ2V0IHVudG91Y2hlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMudG91Y2hlZFN1YmplY3QudmFsdWU7XG4gIH1cblxuICBkaXNhYmxlKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKHRoaXMuc29ydCkgdGhpcy5zb3J0LmRpc2FibGVkID0gdHJ1ZTtcbiAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGVuYWJsZShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICh0aGlzLnNvcnQpIHRoaXMuc29ydC5kaXNhYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMuX2VuYWJsZWQgPSB0cnVlO1xuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBnZXQgZW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZW5hYmxlZDtcbiAgfVxuXG4gIC8vIEZJWE1FOiBuZWVkIHRvIGhpZGRlbiBidXR0b25zIChpbiBIVE1MKSwgZXRjLiB3aGVuIGRpc2FibGVkXG4gIEBJbnB1dCgpIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSAhPT0gIXRoaXMuX2VuYWJsZWQpIHtcbiAgICAgIGlmICh2YWx1ZSkgdGhpcy5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIGVsc2UgdGhpcy5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuX2VuYWJsZWQ7XG4gIH1cblxuICBtYXJrQXNEaXJ0eShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5kaXJ0eVN1YmplY3QuY2xvc2VkICYmIHRoaXMuZGlydHlTdWJqZWN0LnZhbHVlICE9PSB0cnVlKSB7XG4gICAgICB0aGlzLmRpcnR5U3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1hcmtBc1ByaXN0aW5lKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKCF0aGlzLmRpcnR5U3ViamVjdC5jbG9zZWQgJiYgdGhpcy5kaXJ0eVN1YmplY3QudmFsdWUgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmRpcnR5U3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBtYXJrQXNVbnRvdWNoZWQob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBsZXQgbmVlZEVtaXRFdmVudCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnRvdWNoZWRTdWJqZWN0LnZhbHVlKSB7XG4gICAgICB0aGlzLnRvdWNoZWRTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgbmVlZEVtaXRFdmVudCA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLmRpcnR5IHx8ICh0aGlzLmVkaXRlZFJvdyAmJiB0aGlzLmVkaXRlZFJvdy5pZCAhPT0gdGhpcy5wcmV2aW91c2x5RWRpdGVkUm93SWQpKSB7XG4gICAgICAvLyBDYW5jZWwgdGhlIGN1cnJlbnQgZWRpdGluZyByb3cgb25seSBpZiBlZGl0aW5nIGFuZCBpZiBpdCB3YXMgbm90IHByZXZpb3VzbHkgc2F2ZWRcbiAgICAgIGlmICh0aGlzLmVkaXRlZFJvdz8uZWRpdGluZykge1xuICAgICAgICAvLyBDYW5jZWwgdGhlIGN1cnJlbnQgZWRpdGluZyByb3cgb25seSBpZiBlZGl0aW5nIGFuZCBpZiBpdCB3YXMgbm90IHByZXZpb3VzbHkgc2F2ZWRcbiAgICAgICAgaWYgKHRoaXMuZWRpdGVkUm93LmlkID09PSAtMSkge1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kZWxldGUoLTEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5jYW5jZWwodGhpcy5lZGl0ZWRSb3cpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTWFyayByb3cgYXMgcHJpc3RpbmVcbiAgICAgICAgdGhpcy5jaGVja0lmUm93UHJpc3RpbmUodGhpcy5lZGl0ZWRSb3csIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZWRpdGVkUm93ID0gbnVsbDtcbiAgICAgIG5lZWRFbWl0RXZlbnQgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLnByZXZpb3VzbHlFZGl0ZWRSb3dJZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAobmVlZEVtaXRFdmVudCAmJiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSkgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBwcmVmZXIgdG8gdXNlIG1hcmtBbGxBc1RvdWNoZWQoKVxuICAgKiBAcGFyYW0gb3B0c1xuICAgKi9cbiAgbWFya0FzVG91Y2hlZChvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGNvbnNvbGUud2FybignVE9ETzogUmVwbGFjZSB0aGlzIGNhbGwgYnkgbWFya0FsbEFzVG91Y2hlZCgpIC0gYmVjYXVzZSBvZiBjaGFuZ2VzIGluIG5neC1jb21wb25lbnRzID49IDAuMTYuMCcpO1xuICAgIGlmICh0aGlzLmVkaXRlZFJvdz8uZWRpdGluZykge1xuICAgICAgdGhpcy5lZGl0ZWRSb3cudmFsaWRhdG9yPy5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbWFya0FsbEFzVG91Y2hlZChvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMudG91Y2hlZFN1YmplY3QuY2xvc2VkICYmIHRoaXMudG91Y2hlZFN1YmplY3QudmFsdWUgIT09IHRydWUpIHtcbiAgICAgIHRoaXMudG91Y2hlZFN1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmVkaXRlZFJvdz8uZWRpdGluZykge1xuICAgICAgdGhpcy5lZGl0ZWRSb3cudmFsaWRhdG9yPy5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgfVxuICB9XG5cbiAgbWFya0FzU2F2aW5nKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5zYXZpbmdTdWJqZWN0LmNsb3NlZCAmJiB0aGlzLnNhdmluZ1N1YmplY3QudmFsdWUgIT09IHRydWUpIHtcbiAgICAgIHRoaXMuZm9jdXNDb2x1bW4gPSB1bmRlZmluZWQ7IC8vIHVuc2VsZWN0IGZvY3VzIGNvbHVtblxuICAgICAgdGhpcy5zYXZpbmdTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIG1hcmtBc1NhdmVkKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5zYXZpbmdTdWJqZWN0LmNsb3NlZCAmJiB0aGlzLnNhdmluZ1N1YmplY3QudmFsdWUgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLnNhdmluZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIG1hcmtBc0xvYWRpbmcob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgdGhpcy5zZXRMb2FkaW5nKHRydWUsIG9wdHMpO1xuICB9XG5cbiAgbWFya0FzTG9hZGVkKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSwgb3B0cyk7XG4gIH1cblxuICBtYXJrQXNSZWFkeShvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMucmVhZHlTdWJqZWN0LmNsb3NlZCAmJiB0aGlzLnJlYWR5U3ViamVjdC52YWx1ZSAhPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5yZWFkeVN1YmplY3QubmV4dCh0cnVlKTtcblxuICAgICAgLy8gSWYgc3ViY2xhc3NlcyBpbXBsZW1lbnRzIE9uUmVhZHlcbiAgICAgIGlmICh0eXBlb2YgdGhpc1snbmdPblJlYWR5J10gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgKHRoaXMgYXMgYW55IGFzIE9uUmVhZHkpLm5nT25SZWFkeSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1hcmtBc05vdFJlYWR5KG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5yZWFkeVN1YmplY3QuY2xvc2VkICYmIHRoaXMucmVhZHlTdWJqZWN0LnZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5yZWFkeVN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGxvYWRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubG9hZGluZ1N1YmplY3QudmFsdWU7XG4gIH1cblxuICBnZXQgbG9hZGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5sb2FkaW5nU3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIGVuYWJsZVNvcnQoKSB7XG4gICAgaWYgKHRoaXMuc29ydCkgdGhpcy5zb3J0LmRpc2FibGVkID0gZmFsc2U7XG4gIH1cblxuICBkaXNhYmxlU29ydCgpIHtcbiAgICBpZiAodGhpcy5zb3J0KSB0aGlzLnNvcnQuZGlzYWJsZWQgPSB0cnVlO1xuICB9XG5cbiAgc2V0IHBhZ2VTaXplKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLmRlZmF1bHRQYWdlU2l6ZSA9IHZhbHVlO1xuICAgIGlmICh0aGlzLnBhZ2luYXRvcikge1xuICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZVNpemUgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBnZXQgcGFnZVNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKHRoaXMucGFnaW5hdG9yICYmIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplKSB8fCB0aGlzLmRlZmF1bHRQYWdlU2l6ZSB8fCBERUZBVUxUX1BBR0VfU0laRTtcbiAgfVxuXG4gIGdldCBwYWdlT2Zmc2V0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuICh0aGlzLnBhZ2luYXRvciAmJiB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggKiB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSkgfHwgMDtcbiAgfVxuXG4gIGdldCBzb3J0QWN0aXZlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc29ydCAmJiB0aGlzLnNvcnQuYWN0aXZlO1xuICB9XG5cbiAgc2V0IHNvcnRBY3RpdmUoc29ydEJ5OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5zb3J0KSB7XG4gICAgICB0aGlzLnNvcnQuYWN0aXZlID0gc29ydEJ5O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlZmF1bHRTb3J0QnkgPSBzb3J0Qnk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNvcnREaXJlY3Rpb24oKTogU29ydERpcmVjdGlvbiB7XG4gICAgcmV0dXJuICh0aGlzLnNvcnQgJiYgdGhpcy5zb3J0LmRpcmVjdGlvbiAmJiAodGhpcy5zb3J0LmRpcmVjdGlvbiA9PT0gJ2Rlc2MnID8gJ2Rlc2MnIDogJ2FzYycpKSB8fCB1bmRlZmluZWQ7XG4gIH1cblxuICBzZXQgc29ydERpcmVjdGlvbih2YWx1ZTogU29ydERpcmVjdGlvbikge1xuICAgIGlmICh0aGlzLnNvcnQpIHtcbiAgICAgIHRoaXMuc29ydC5kaXJlY3Rpb24gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZWZhdWx0U29ydERpcmVjdGlvbiA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3BhZ2luYXRvcjogTWF0UGFnaW5hdG9yIHwgbnVsbCA9IG51bGw7XG5cbiAgQElucHV0KCkgc2V0IHBhZ2luYXRvcih2YWx1ZTogTWF0UGFnaW5hdG9yKSB7XG4gICAgdGhpcy5fcGFnaW5hdG9yID0gdmFsdWU7XG4gIH1cblxuICBnZXQgcGFnaW5hdG9yKCk6IE1hdFBhZ2luYXRvciB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2luYXRvciB8fCB0aGlzLmNoaWxkUGFnaW5hdG9yO1xuICB9XG5cbiAgZ2V0IGRlc3Ryb3llZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZXN0cm95U3ViamVjdD8uY2xvc2VkICE9PSBmYWxzZTtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoTWF0VGFibGUsIHsgc3RhdGljOiBmYWxzZSB9KSB0YWJsZTogTWF0VGFibGU8VD47XG4gIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yLCB7IHN0YXRpYzogZmFsc2UgfSkgY2hpbGRQYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcbiAgQFZpZXdDaGlsZChNYXRTb3J0LCB7IHN0YXRpYzogZmFsc2UgfSkgc29ydDogTWF0U29ydDtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByb3RlY3RlZCBjb2x1bW5zOiBzdHJpbmdbXSxcbiAgICBwcm90ZWN0ZWQgX2RhdGFTb3VyY2U/OiBFbnRpdGllc1RhYmxlRGF0YVNvdXJjZTxULCBGLCBJRD4sXG4gICAgcHJpdmF0ZSBfZmlsdGVyPzogRlxuICApIHtcbiAgICB0aGlzLmNkID0gaW5qZWN0b3IuZ2V0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgICB0aGlzLnJvdXRlID0gaW5qZWN0b3IuZ2V0KEFjdGl2YXRlZFJvdXRlKTtcbiAgICB0aGlzLnJvdXRlciA9IGluamVjdG9yLmdldChSb3V0ZXIpO1xuICAgIHRoaXMubmF2Q29udHJvbGxlciA9IGluamVjdG9yLmdldChOYXZDb250cm9sbGVyKTtcbiAgICB0aGlzLmxvY2F0aW9uID0gaW5qZWN0b3IuZ2V0KExvY2F0aW9uKTtcbiAgICB0aGlzLnNldHRpbmdzID0gaW5qZWN0b3IuZ2V0KExvY2FsU2V0dGluZ3NTZXJ2aWNlKTtcbiAgICB0aGlzLnRyYW5zbGF0ZSA9IGluamVjdG9yLmdldChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgICB0aGlzLm1vZGFsQ3RybCA9IGluamVjdG9yLmdldChNb2RhbENvbnRyb2xsZXIpO1xuICAgIHRoaXMuYWxlcnRDdHJsID0gaW5qZWN0b3IuZ2V0KEFsZXJ0Q29udHJvbGxlcik7XG4gICAgdGhpcy50b2FzdENvbnRyb2xsZXIgPSBpbmplY3Rvci5nZXQoVG9hc3RDb250cm9sbGVyKTtcbiAgICB0aGlzLmZvcm1FcnJvckFkYXB0ZXIgPSBpbmplY3Rvci5nZXQoRm9ybUVycm9yVHJhbnNsYXRvcik7XG4gICAgdGhpcy5tb2JpbGUgPSB0aGlzLnNldHRpbmdzLm1vYmlsZTtcblxuICAgIC8vIEF1dG9jb21wbGV0ZSBmaWVsZHNcbiAgICB0aGlzLl9hdXRvY29tcGxldGVDb25maWdIb2xkZXIgPSBuZXcgTWF0QXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyKHtcbiAgICAgIGdldFVzZXJBdHRyaWJ1dGVzOiAoYSwgYikgPT4gdGhpcy5zZXR0aW5ncy5nZXRGaWVsZERpc3BsYXlBdHRyaWJ1dGVzKGEsIGIpLFxuICAgIH0pO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlRmllbGRzID0gdGhpcy5fYXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyLmZpZWxkcztcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLl9pbml0aWFsaXplZCkgcmV0dXJuOyAvLyBJbml0IG9ubHkgb25jZVxuICAgIHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZTtcblxuICAgIC8vIFNldCBkZWZhdWx0c1xuICAgIHRoaXMucmVhZE9ubHkgPSB0b0Jvb2xlYW4odGhpcy5yZWFkT25seSwgdGhpcy5kYXRhU291cmNlPy5jb25maWcucmVhZE9ubHkgfHwgZmFsc2UpOyAvLyByZWFkL3dyaXRlIGJ5IGRlZmF1bHRcbiAgICB0aGlzLmlubGluZUVkaXRpb24gPSAhdGhpcy5yZWFkT25seSAmJiB0b0Jvb2xlYW4odGhpcy5pbmxpbmVFZGl0aW9uLCBmYWxzZSk7IC8vIGZvcmNlIHRvIGZhbHNlIHdoZW4gcmVhZG9ubHlcbiAgICB0aGlzLnNhdmVCZWZvcmVEZWxldGUgPSB0b0Jvb2xlYW4odGhpcy5zYXZlQmVmb3JlRGVsZXRlLCAhdGhpcy5yZWFkT25seSk7IC8vIGZvcmNlIHRvIGZhbHNlIHdoZW4gcmVhZG9ubHlcbiAgICB0aGlzLnNhdmVCZWZvcmVTb3J0ID0gdG9Cb29sZWFuKHRoaXMuc2F2ZUJlZm9yZVNvcnQsICF0aGlzLnJlYWRPbmx5KTsgLy8gZm9yY2UgdG8gZmFsc2Ugd2hlbiByZWFkb25seVxuICAgIHRoaXMuc2F2ZUJlZm9yZUZpbHRlciA9IHRvQm9vbGVhbih0aGlzLnNhdmVCZWZvcmVGaWx0ZXIsICF0aGlzLnJlYWRPbmx5KTsgLy8gZm9yY2UgdG8gZmFsc2Ugd2hlbiByZWFkb25seVxuICAgIHRoaXMua2VlcEVkaXRlZFJvd09uU2F2ZSA9IHRvQm9vbGVhbih0aGlzLmtlZXBFZGl0ZWRSb3dPblNhdmUsIHRoaXMuaW5saW5lRWRpdGlvbik7XG4gICAgdGhpcy5lcnJvclRyYW5zbGF0ZU9wdGlvbnMgPSB0aGlzLmVycm9yVHJhbnNsYXRlT3B0aW9ucyB8fCB7IHNlcGFyYXRvcjogJywgJywgcGF0aFRyYW5zbGF0b3I6IHRoaXMgfTsgLy8gQ2FuIGJlIG92ZXJyaWRlIGluIHN1YmNsYXNzZXMgY29uc3RydWN0b3JzXG5cbiAgICAvLyBDaGVjayBhc2sgdXNlciBjb25maXJtYXRpb24gaXMgcG9zc2libGVcbiAgICBpZiAodGhpcy5jb25maXJtQmVmb3JlRGVsZXRlICYmICF0aGlzLmFsZXJ0Q3RybCkgdGhyb3cgRXJyb3IoXCJNaXNzaW5nICdhbGVydEN0cmwnIG9yICdpbmplY3RvcicgaW4gY29tcG9uZW50J3MgY29uc3RydWN0b3IuXCIpO1xuXG4gICAgLy8gRGVmaW5lZCB1bmlxdWUgaWQgZm9yIHNldHRpbmdzIGZvciB0aGUgcGFnZVxuICAgIHRoaXMuc2V0dGluZ3NJZCA9IHRoaXMuc2V0dGluZ3NJZCB8fCB0aGlzLmdlbmVyYXRlVGFibGVJZCgpO1xuXG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID0gdGhpcy5nZXREaXNwbGF5Q29sdW1ucygpO1xuXG4gICAgLy8gTG9hZCB0aGUgc29ydGVkIGNvbHVtbnMsIGZyb20gc2V0dGluZ3NcbiAgICB7XG4gICAgICBjb25zdCBzb3J0ZWRDb2x1bW4gPSB0aGlzLmdldFNvcnRlZENvbHVtbigpO1xuICAgICAgdGhpcy5kZWZhdWx0U29ydEJ5ID0gc29ydGVkQ29sdW1uLmlkO1xuICAgICAgdGhpcy5kZWZhdWx0U29ydERpcmVjdGlvbiA9IHNvcnRlZENvbHVtbi5zdGFydDtcbiAgICB9XG5cbiAgICB0aGlzLmRlZmF1bHRQYWdlU2l6ZSA9IHRoaXMuZ2V0UGFnZVNpemUoKTtcblxuICAgIC8vIFByb3BhZ2F0ZSBlcnJvciB0byBldmVudCBlbWl0dGVyXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbih0aGlzLmVycm9yU3ViamVjdC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB0aGlzLm9uRXJyb3IuZW1pdCh2YWx1ZSkpKTtcblxuICAgIC8vIFByb3BhZ2F0ZSBkaXJ0eSB0byBldmVudCBlbWl0dGVyXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbih0aGlzLmRpcnR5U3ViamVjdC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB0aGlzLm9uRGlydHkuZW1pdCh2YWx1ZSkpKTtcblxuICAgIC8vIFByb3BhZ2F0ZSByb3cgZGlydHkgc3RhdGUgdG8gdGFibGVcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5vblN0YXJ0RWRpdGluZ1Jvd1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKHJvdykgPT4gcm93Py52YWxpZGF0b3IgJiYgdHJ1ZSksXG4gICAgICAgICAgbWVyZ2VNYXAoKHJvdykgPT5cbiAgICAgICAgICAgIHJvdy52YWxpZGF0b3IudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgIGZpbHRlcigoKSA9PiByb3cudmFsaWRhdG9yLmRpcnR5KSxcbiAgICAgICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICAgICAgLy90YXAoKCkgPT4gY29uc29sZS5kZWJ1ZyhcIlByb3BhZ2F0ZSByb3cncyBkaXJ0eSB0byB0YWJsZS4uLlwiKSlcblxuICAgICAgICAgICAgICAvLyBTdG9wIGlmIG5leHQgYW5vdGhlciByb3csIG9yIGRlc3Ryb3lpbmdcbiAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMub25TdGFydEVkaXRpbmdSb3cpLFxuICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95U3ViamVjdClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLm1hcmtBc0RpcnR5KCkpXG4gICAgKTtcblxuICAgIC8vIENhbGwgZGF0YXNvdXJjZSByZWZyZXNoLCBvbiBlYWNoIHJlZnJlc2ggZXZlbnRzXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMub25SZWZyZXNoXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHN0YXJ0V2l0aDxhbnk+KCh0aGlzLmF1dG9Mb2FkID8ge30gOiAnc2tpcCcpIGFzIGFueSksXG4gICAgICAgICAgc3dpdGNoTWFwKChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICAgICAgaWYgKGV2ZW50ID09PSAnc2tpcCcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2RhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gU2tpcHBpbmcgZGF0YSBsb2FkOiBubyBkYXRhU291cmNlIGRlZmluZWQnKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3RhYmxlXSBDYWxsaW5nIGRhdGFTb3VyY2Uud2F0Y2hBbGwoKS4uLicpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2VcbiAgICAgICAgICAgICAgLndhdGNoQWxsKHRoaXMucGFnZU9mZnNldCwgdGhpcy5wYWdlU2l6ZSwgdGhpcy5zb3J0QWN0aXZlLCB0aGlzLnNvcnREaXJlY3Rpb24sIHRoaXMuX2ZpbHRlcilcbiAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMub25SZWZyZXNoKSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgdGhpcy5zZXRFcnJvcigoZXJyICYmIGVyci5tZXNzYWdlKSB8fCBlcnIpO1xuICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7IC8vIENvbnRpbnVlXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHRoaXMudXBkYXRlVmlldyhyZXMgYXMgTG9hZFJlc3VsdDxUPiB8IHVuZGVmaW5lZCkpXG4gICAgKTtcblxuICAgIC8vIExpc3RlbiBkYXRhU291cmNlIGxvYWRpbmcgZXZlbnRzXG4gICAgaWYgKHRoaXMuX2RhdGFTb3VyY2UpIHRoaXMubGlzdGVuRGF0YVNvdXJjZUxvYWRpbmcodGhpcy5fZGF0YVNvdXJjZSk7XG5cbiAgICAvLyBQZXJtYW5lbnQgc2VsZWN0aW9uIGJlaGF2aW9yXG4gICAgaWYgKHRoaXMucGVybWFuZW50U2VsZWN0aW9uQWxsb3dlZCkgdGhpcy5pbml0UGVybWFuZW50U2VsZWN0aW9uKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgLy8gRGV0ZWN0IHdoZW4gcGFyZW50IG5nT25Jbml0KCkgbm90IGNhbGxcbiAgICBpZiAodGhpcy5kZWJ1ZyAmJiAhdGhpcy5kaXNwbGF5ZWRDb2x1bW5zKVxuICAgICAgY29uc29sZS53YXJuKGBbdGFibGVdIE1pc3NpbmcgJ2Rpc3BsYXllZENvbHVtbnMnLiBEaWQgeW91IGNhbGwgcGFyZW50IG5nT25Jbml0KCkgaW4gY29tcG9uZW50ICR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSA/YCk7XG5cbiAgICAvLyBTdGFydCBsaXN0ZW5pbmcgc29ydCBhbmQgcGFnaW5hdG9yIGV2ZW50c1xuICAgIC8vIG5vaW5zcGVjdGlvbiBKU0lnbm9yZWRQcm9taXNlRnJvbUNhbGxcbiAgICB0aGlzLmxpc3RlblNvcnRBbmRQYWdpbmF0aW9uRXZlbnRzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcblxuICAgIC8vIFVuc3Vic2NyaWJlIGNvbHVtbiB2YWx1ZSBjaGFuZ2VzXG4gICAgT2JqZWN0LmtleXModGhpcy5fY2VsbFZhbHVlQ2hhbmdlc0RlZnMpLmZvckVhY2goKGNvbCkgPT4gdGhpcy5zdG9wQ2VsbFZhbHVlQ2hhbmdlcyhjb2wsIHRydWUpKTtcbiAgICB0aGlzLl9jZWxsVmFsdWVDaGFuZ2VzRGVmcyA9IHt9O1xuXG4gICAgdGhpcy5yZWFkeVN1YmplY3QudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmxvYWRpbmdTdWJqZWN0LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zYXZpbmdTdWJqZWN0LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5lcnJvclN1YmplY3QudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmRpcnR5U3ViamVjdC51bnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5vblJlZnJlc2gudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uT3BlblJvdy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25OZXdSb3cudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uU3RhcnRFZGl0aW5nUm93LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkNvbmZpcm1FZGl0Q3JlYXRlUm93LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkNhbmNlbE9yRGVsZXRlUm93LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkJlZm9yZURlbGV0ZVJvd3MudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uQmVmb3JlQ2FuY2VsUm93cy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25CZWZvcmVTYXZlLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkFmdGVyRGVsZXRlZFJvd3MudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uU29ydC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25EaXJ0eS51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25FcnJvci51bnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5kZXN0cm95U3ViamVjdC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95U3ViamVjdC51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlVmlldyhcbiAgICByZXM6IExvYWRSZXN1bHQ8VD4gfCB1bmRlZmluZWQsXG4gICAgb3B0cz86IHtcbiAgICAgIGVtaXRFdmVudD86IGJvb2xlYW47XG4gICAgfVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXJlcykgcmV0dXJuOyAvLyBTa2lwIChlLmcgZXJyb3IpXG4gICAgaWYgKHJlcyAmJiByZXMuZGF0YSkge1xuICAgICAgdGhpcy52aXNpYmxlUm93Q291bnQgPSByZXMuZGF0YS5sZW5ndGg7XG4gICAgICB0aGlzLnRvdGFsUm93Q291bnQgPSBpc05vdE5pbChyZXMudG90YWwpXG4gICAgICAgID8gcmVzLnRvdGFsXG4gICAgICAgIDogKCh0aGlzLnBhZ2luYXRvciAmJiB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggKiAodGhpcy5wYWdpbmF0b3IucGFnZVNpemUgfHwgREVGQVVMVF9QQUdFX1NJWkUpKSB8fCAwKSArIHRoaXMudmlzaWJsZVJvd0NvdW50O1xuICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYFt0YWJsZV0gJHtyZXMuZGF0YS5sZW5ndGh9IHJvd3MgbG9hZGVkYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gTk8gcm93cyBsb2FkZWQnKTtcbiAgICAgIHRoaXMudG90YWxSb3dDb3VudCA9IDA7XG4gICAgICB0aGlzLnZpc2libGVSb3dDb3VudCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5tYXJrQXNVbnRvdWNoZWQoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgdGhpcy5tYXJrQXNQcmlzdGluZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB0aGlzLm1hcmtBc0xvYWRlZCh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHNldERhdGFzb3VyY2UoZGF0YXNvdXJjZTogRW50aXRpZXNUYWJsZURhdGFTb3VyY2U8VCwgRiwgSUQ+KSB7XG4gICAgaWYgKHRoaXMuX2RhdGFTb3VyY2UpIHRocm93IG5ldyBFcnJvcignW3RhYmxlXSBkYXRhU291cmNlIGFscmVhZHkgc2V0ICEnKTtcbiAgICBpZiAoZGF0YXNvdXJjZSAmJiB0aGlzLl9kYXRhU291cmNlICE9PSBkYXRhc291cmNlKSB7XG4gICAgICB0aGlzLl9kYXRhU291cmNlID0gZGF0YXNvdXJjZTtcbiAgICAgIGlmICh0aGlzLl9pbml0aWFsaXplZCkgdGhpcy5saXN0ZW5EYXRhU291cmNlTG9hZGluZyhkYXRhc291cmNlKTtcbiAgICB9XG4gIH1cblxuICByZXNldERhdGFTb3VyY2UoKSB7XG4gICAgaWYgKHRoaXMuX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl9kYXRhU291cmNlTG9hZGluZ1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy51bnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMuX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uKTtcbiAgICB9XG4gICAgdGhpcy5fZGF0YVNvdXJjZSA9IG51bGw7XG4gIH1cblxuICBhZGRDb2x1bW5EZWYoY29sdW1uOiBDZGtDb2x1bW5EZWYpIHtcbiAgICB0aGlzLnRhYmxlLmFkZENvbHVtbkRlZihjb2x1bW4pO1xuICB9XG5cbiAgcmVtb3ZlQ29sdW1uRGVmKGNvbHVtbjogQ2RrQ29sdW1uRGVmKSB7XG4gICAgdGhpcy50YWJsZS5yZW1vdmVDb2x1bW5EZWYoY29sdW1uKTtcbiAgfVxuXG4gIHNldEZpbHRlcihmaWx0ZXI6IEYsIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW47IHBlcm1hbmVudFNlbGVjdGlvbkNoYW5nZWRQcmV2ZW50ZWQ/OiBib29sZWFuIH0pIHtcbiAgICBvcHRzID0gb3B0cyB8fCB7IGVtaXRFdmVudDogdHJ1ZSB9O1xuXG4gICAgLy8gUHJldmVudCBwZXJtYW5lbnQgc2VsZWN0aW9uIGNoYW5nZSBldmVudHNcbiAgICB0aGlzLnBlcm1hbmVudFNlbGVjdGlvbkNoYW5nZWRQcmV2ZW50ZWQgPSB0b0Jvb2xlYW4ob3B0cy5wZXJtYW5lbnRTZWxlY3Rpb25DaGFuZ2VkUHJldmVudGVkLCB0aGlzLnBlcm1hbmVudFNlbGVjdGlvbkNoYW5nZWRQcmV2ZW50ZWQpO1xuXG4gICAgaWYgKHRoaXMuc2F2ZUJlZm9yZUZpbHRlcikge1xuICAgICAgLy8gaWYgYSBkaXJ0eSB0YWJsZSBpcyB0byBiZSBzYXZlZCBiZWZvcmUgZmlsdGVyXG4gICAgICBpZiAodGhpcy5kaXJ0eSkge1xuICAgICAgICAvLyBTYXZlXG4gICAgICAgIHRoaXMuc2F2ZUJlZm9yZUFjdGlvbignZmlsdGVyJykudGhlbigoc2F2ZWQpID0+IHtcbiAgICAgICAgICAvLyBBcHBseSBmaWx0ZXIgb25seSBpZiB1c2VyIGRpZG4ndCBjYW5jZWwgdGhlIHNhdmUgb3IgdGhlIHNhdmUgaXMgb2tcbiAgICAgICAgICBpZiAoc2F2ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoZmlsdGVyLCBvcHRzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYXBwbHkgZmlsdGVyIG9uIG5vbi1kaXJ0eSB0YWJsZVxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVyKGZpbHRlciwgb3B0cyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGFwcGx5IGZpbHRlciBkaXJlY3RseVxuICAgICAgdGhpcy5hcHBseUZpbHRlcihmaWx0ZXIsIG9wdHMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNvbmZpcm1BbmRBZGQoZXZlbnQ/OiBFdmVudCwgcm93PzogVGFibGVFbGVtZW50PFQ+LCBvcHRzPzogeyBmb2N1c0NvbHVtbj86IHN0cmluZyB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLmNvbmZpcm1FZGl0Q3JlYXRlKGV2ZW50LCByb3cpKSB7XG4gICAgICAvLyBJZiBwZW5kaW5nOiBXYWl0IGVuZCBvZiB2YWxpZGF0aW9uLCB0aGVuIGxvb3BcbiAgICAgIGlmIChyb3cudmFsaWRhdG9yPy5wZW5kaW5nKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgQXBwRm9ybVV0aWxzLndhaXRXaGlsZVBlbmRpbmcocm93LnZhbGlkYXRvciwgeyBzdG9wOiB0aGlzLmRlc3Ryb3lTdWJqZWN0IH0pXG4gICAgICAgICAgICAvLyBMb29wIGFmdGVyIHZhbGlkYXRpb24gY29tcGxldGVkXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLmNvbmZpcm1BbmRBZGQoZXZlbnQsIHJvdywgb3B0cykpXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIEdvIGJhY2sgdG8gZm9jdXNDb2x1bW5cbiAgICAgIGlmIChpc05vdE5pbE9yQmxhbmsob3B0cz8uZm9jdXNDb2x1bW4pKSB7XG4gICAgICAgIHRoaXMuZm9jdXNDb2x1bW4gPSBvcHRzLmZvY3VzQ29sdW1uO1xuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJvd1xuICAgIHJldHVybiB0aGlzLmFkZFJvdyhldmVudCwgdW5kZWZpbmVkIC8qIGluc2VydEF0OiB1c2UgZGVmYXVsdCAqLywgb3B0cyk7XG4gIH1cblxuICBjb25maXJtQW5kQmFja3dhcmQoZXZlbnQ6IEV2ZW50IHwgdW5kZWZpbmVkLCByb3c/OiBUYWJsZUVsZW1lbnQ8VD4sIG9wdHM/OiB7IGZvY3VzQ29sdW1uPzogc3RyaW5nIH0pOiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLmlubGluZUVkaXRpb24pIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBwcmV2aW91c1JvdyA9IHRoaXMuZWRpdGVkUm93O1xuICAgIGNvbnN0IGZvY3VzQ29sdW1uID0gb3B0cz8uZm9jdXNDb2x1bW4gPz8gdGhpcy5sYXN0VXNlckNvbHVtbjtcblxuICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIC8vIERlbGV0aW5nIGVkaXRlZCByb3csIGlmIGVtcHR5IGFuZCBub3QgZGlydHlcbiAgICBpZiAocHJldmlvdXNSb3cpIHtcbiAgICAgIC8vIFByZXZpb3VzIHJvdyB3YXMgYSBuZXggcm93IEFORCBpbnZhbGlkOiBkZWxldGUgaXRcbiAgICAgIGlmIChwcmV2aW91c1Jvdy5pZCA9PT0gLTEgJiYgcHJldmlvdXNSb3cudmFsaWRhdG9yPy5pbnZhbGlkICYmICFwcmV2aW91c1Jvdy52YWxpZGF0b3I/LmRpcnR5KSB7XG4gICAgICAgIHRoaXMuZGVsZXRlTmV3Um93KGV2ZW50LCBwcmV2aW91c1Jvdyk7XG5cbiAgICAgICAgLy8gV2FpdCBkZWxldGlvbiBpcyBkb25lLCB0aGVuIGVkaXQgcHJldmlvdXMgcm93IChieSBpZCwgYmVjYXVzZSBvZiByZWxvYWRpbmcpXG4gICAgICAgIHRoaXMud2FpdElkbGUoKS50aGVuKCgpID0+IHRoaXMuZWRpdFJvd0J5SWQoZXZlbnQsIHJvdy5pZCwgeyBmb2N1c0NvbHVtbiB9KSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBjYW5ub3QgY29uZmlybSBwcmV2aW91cyByb3dcbiAgICAgIGVsc2UgaWYgKCF0aGlzLmNvbmZpcm1FZGl0Q3JlYXRlKGV2ZW50LCBwcmV2aW91c1JvdykpIHtcbiAgICAgICAgLy8gSWYgcGVuZGluZzogV2FpdCBlbmQgb2YgdmFsaWRhdGlvbiwgdGhlbiBsb29wXG4gICAgICAgIGlmIChwcmV2aW91c1Jvdy52YWxpZGF0b3I/LnBlbmRpbmcpIHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgQXBwRm9ybVV0aWxzLndhaXRXaGlsZVBlbmRpbmcocHJldmlvdXNSb3cudmFsaWRhdG9yLCB7IHN0b3A6IHRoaXMuZGVzdHJveVN1YmplY3QgfSlcbiAgICAgICAgICAgICAgLy8gV2FpdCBlbmQgb2YgdmFsaWRhdGlvbiBhbmQgbG9vcFxuICAgICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLmNvbmZpcm1BbmRCYWNrd2FyZChldmVudCwgcm93LCB7IGZvY3VzQ29sdW1uIH0pKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHbyBiYWNrIHRvIGZpcnN0IGNvbHVtblxuICAgICAgICB0aGlzLmZvY3VzQ29sdW1uID0gZm9jdXNDb2x1bW47XG4gICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEVkaXQgcm93LCBmb2N1c2luZyBhdCB0aGUgZW5kXG4gICAgdGhpcy5lZGl0Um93KGV2ZW50LCByb3csIHsgZm9jdXNDb2x1bW4gfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25maXJtQW5kRm9yd2FyZChldmVudDogRXZlbnQgfCB1bmRlZmluZWQsIHJvdz86IFRhYmxlRWxlbWVudDxUPiwgb3B0cz86IHsgZm9jdXNDb2x1bW4/OiBzdHJpbmcgfSk6IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXRoaXMuaW5saW5lRWRpdGlvbikgcmV0dXJuIGZhbHNlO1xuICAgIHJvdyA9IHJvdyB8fCB0aGlzLmVkaXRlZFJvdztcbiAgICBjb25zdCBmb2N1c0NvbHVtbiA9IG9wdHM/LmZvY3VzQ29sdW1uID8/IHRoaXMuZmlyc3RVc2VyQ29sdW1uO1xuXG4gICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgLy8gSWYgbm90IGNvbmZpcm1lZFxuICAgIGlmICghdGhpcy5jb25maXJtRWRpdENyZWF0ZShldmVudCwgcm93KSkge1xuICAgICAgLy8gSWYgcGVuZGluZzogV2FpdCBlbmQgb2YgdmFsaWRhdGlvbiwgdGhlbiBsb29wXG4gICAgICBpZiAocm93LnZhbGlkYXRvcj8ucGVuZGluZykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIEFwcEZvcm1VdGlscy53YWl0V2hpbGVQZW5kaW5nKHJvdy52YWxpZGF0b3IsIHsgc3RvcDogdGhpcy5kZXN0cm95U3ViamVjdCB9KVxuICAgICAgICAgICAgLy8gV2FpdCBlbmQgb2YgdmFsaWRhdGlvbiBhbmQgbG9vcFxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5jb25maXJtQW5kRm9yd2FyZChldmVudCwgcm93LCB7IGZvY3VzQ29sdW1uIH0pKVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBHbyBiYWNrIHRvIGZpcnN0IGNvbHVtblxuICAgICAgdGhpcy5mb2N1c0NvbHVtbiA9IGZvY3VzQ29sdW1uO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEVkaXQgbmV4dCByb3dcbiAgICBjb25zdCBuZXh0Um93SWQgPSByb3cuaWQgKyAxO1xuICAgIHRoaXMuZWRpdFJvd0J5SWQoZXZlbnQsIG5leHRSb3dJZCwgeyBmb2N1c0NvbHVtbiB9KTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpcm0gdGhlIGNyZWF0aW9uIG9mIHRoZSBnaXZlbiByb3csIG9yIGlmIG5vdCBzcGVjaWZpZWQgdGhlIGN1cnJlbnRseSBlZGl0ZWQgcm93XG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBAcGFyYW0gcm93XG4gICAqL1xuICBjb25maXJtRWRpdENyZWF0ZShldmVudD86IEV2ZW50LCByb3c/OiBUYWJsZUVsZW1lbnQ8VD4pOiBib29sZWFuIHtcbiAgICByb3cgPSByb3cgfHwgdGhpcy5lZGl0ZWRSb3c7XG4gICAgaWYgKCFyb3cgfHwgIXJvdy5lZGl0aW5nKSByZXR1cm4gdHJ1ZTsgLy8gbm8gcm93IHRvIGNvbmZpcm1cblxuICAgIC8vIENvbmZpcm1hdGlvbiBlZGl0aW9uIG9yIGNyZWF0aW9uXG4gICAgLy8gVE9ETzogYWRkIGF3YWl0ID9cbiAgICBjb25zdCBjb25maXJtZWQgPSByb3cuY29uZmlybUVkaXRDcmVhdGUoKTtcblxuICAgIGlmIChjb25maXJtZWQpIHtcbiAgICAgIC8vIElmIGVkaXQgZmluaXNoZWQsIGZvcmdldCBlZGl0ZWQgcm93XG4gICAgICBpZiAocm93ID09PSB0aGlzLmVkaXRlZFJvdykge1xuICAgICAgICB0aGlzLmVkaXRlZFJvdyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgLy8gTWFyayB0YWJsZSBhcyBkaXJ0eSAoaWYgcm93IGlzIGRpcnR5KVxuICAgICAgaWYgKHJvdy5kaXJ0eSkge1xuICAgICAgICB0aGlzLm1hcmtBc0RpcnR5KHsgZW1pdEV2ZW50OiBmYWxzZSAvKiBiZWNhdXNlIG9mIHJlc2V0RXJyb3IoKSAqLyB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2xlYXIgZXJyb3JcbiAgICAgIHRoaXMucmVzZXRFcnJvcigpO1xuXG4gICAgICAvLyBFbWl0IHRoZSBjb25maXJtIGV2ZW50XG4gICAgICB0aGlzLm9uQ29uZmlybUVkaXRDcmVhdGVSb3cubmV4dChyb3cpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTsgLy8gQ29udGludWVcbiAgICB9XG5cbiAgICBpZiAocm93LnZhbGlkYXRvcikge1xuICAgICAgLy8gSWYgcGVuZGluZzogV2FpdCBlbmQgb2YgdmFsaWRhdGlvbiwgdGhlbiBsb29wXG4gICAgICAvLyBUT0RPOiByZW1vdmUgd2hlbiB1c2luZyBhc3luYyBpc1ZhbGlkKCkgZnVuY3Rpb25cbiAgICAgIGlmIChyb3cudmFsaWRhdG9yLnBlbmRpbmcpIHtcbiAgICAgICAgQXBwRm9ybVV0aWxzLndhaXRXaGlsZVBlbmRpbmcocm93LnZhbGlkYXRvcilcbiAgICAgICAgICAvLyBXYWl0IGVuZCBvZiB2YWxpZGF0aW9uIGFuZCBsb29wXG4gICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5jb25maXJtRWRpdENyZWF0ZShldmVudCwgcm93KSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gTk9UIGNvbmZpcm1lZCA9IHJvdyBoYXMgZXJyb3JcbiAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW3RhYmxlXSBDYW5ub3QgY29uZmlybSByb3csIGJlY2F1c2UgaW52YWxpZCcpO1xuICAgICAgICBBcHBGb3JtVXRpbHMubG9nRm9ybUVycm9ycyhyb3cudmFsaWRhdG9yLCAnW3RhYmxlXSAnKTtcbiAgICAgIH1cblxuICAgICAgLy8gZml4OiBtYXJrIGFsbCBjb250cm9scyBhcyB0b3VjaGVkIHRvIHNob3cgZXJyb3JzXG4gICAgICByb3cudmFsaWRhdG9yLm1hcmtBbGxBc1RvdWNoZWQoKTtcblxuICAgICAgLy8gQ29tcHV0ZSByb3cgZXJyb3IsIGFuZCBwcm9wYWdhdGUgdG8gdGFibGUncyBlcnJvclxuICAgICAgaWYgKHRoaXMucHJvcGFnYXRlUm93RXJyb3IpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLmdldFJvd0Vycm9yKHJvdyk7XG4gICAgICAgIHRoaXMuc2V0RXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE5vdCBjb25maXJtZWRcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjYW5jZWxPckRlbGV0ZShldmVudDogRXZlbnQsIHJvdzogVGFibGVFbGVtZW50PFQ+LCBvcHRzPzogeyBpbnRlcmFjdGl2ZT86IGJvb2xlYW47IGtlZXBFZGl0aW5nPzogYm9vbGVhbiB9KSB7XG4gICAgLy8gRGVsZXRlIG5ldyByb3dcbiAgICBpZiAocm93LmlkID09PSAtMSkge1xuICAgICAgdGhpcy5kZWxldGVOZXdSb3coZXZlbnQsIHJvdyk7XG4gICAgfVxuICAgIC8vIERlbGV0ZSBleGlzdGluZyAoYnV0IG5vdCBlZGl0aW5nKSByb3dcbiAgICBlbHNlIGlmICghcm93LmVkaXRpbmcpIHtcbiAgICAgIHRoaXMuZGVsZXRlRXhpc3RpbmdSb3coZXZlbnQsIHJvdywgb3B0cyk7XG4gICAgfVxuICAgIC8vIENhbmNlbCBleGlzdGluZyAoYW5kIGVkaXRpbmcpIHJvd1xuICAgIGVsc2Uge1xuICAgICAgdGhpcy5jYW5jZWxFeGlzdGluZ1JvdyhldmVudCwgcm93LCBvcHRzKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBhZGRSb3coZXZlbnQ/OiBFdmVudCwgaW5zZXJ0QXQ/OiBudW1iZXIsIG9wdHM/OiB7IGZvY3VzQ29sdW1uPzogc3RyaW5nOyBlZGl0aW5nPzogYm9vbGVhbiB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gQXNraW5nIGZvciBuZXcgcm93Li4uJyk7XG4gICAgaWYgKCF0aGlzLl9lbmFibGVkKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBVc2UgbW9kYWwgaWYgaW5saW5lIGVkaXRpb24gaXMgZGlzYWJsZWRcbiAgICBpZiAoIXRoaXMuaW5saW5lRWRpdGlvbikge1xuICAgICAgdGhpcy5vcGVuTmV3Um93RGV0YWlsKGV2ZW50KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUcnkgdG8gZmluaXNoIGVkaXRlZCByb3cgZmlyc3RcbiAgICBpZiAoIXRoaXMuY29uZmlybUVkaXRDcmVhdGUoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEFkZCBuZXcgcm93XG4gICAgY29uc3Qgcm93ID0gYXdhaXQgdGhpcy5hZGRSb3dUb1RhYmxlKGluc2VydEF0LCBvcHRzKTtcbiAgICByZXR1cm4gISFyb3c7XG4gIH1cblxuICBhc3luYyBzYXZlKG9wdHM/OiB7IGtlZXBFZGl0aW5nPzogYm9vbGVhbiB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgb3B0cyA9IHtcbiAgICAgIGtlZXBFZGl0aW5nOiB0aGlzLmtlZXBFZGl0ZWRSb3dPblNhdmUsXG4gICAgICAuLi5vcHRzLFxuICAgIH07XG4gICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcbiAgICAgIHRocm93IHsgY29kZTogRXJyb3JDb2Rlcy5UQUJMRV9SRUFEX09OTFksIG1lc3NhZ2U6ICdFUlJPUi5UQUJMRV9SRUFEX09OTFknIH07XG4gICAgfVxuXG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG5cbiAgICAvLyBLZWVwIGVkaXRlZCByb3cgaWQgKHNob3VsZCBiZSBkb25lIEJFRk9SRSBjb25maXJtRWRpdENyZWF0ZSgpIClcbiAgICB0aGlzLnByZXZpb3VzbHlFZGl0ZWRSb3dJZCA9IG9wdHMua2VlcEVkaXRpbmdcbiAgICAgID8gKHRoaXMuZWRpdGVkUm93Py5lZGl0aW5nID8gdGhpcy5lZGl0ZWRSb3cuaWQgOiB1bmRlZmluZWQpIHx8IHRoaXMuc2luZ2xlU2VsZWN0ZWRSb3c/LmlkXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwcmV2aW91c2x5RWRpdGVkUm93SWQgPSB0aGlzLnByZXZpb3VzbHlFZGl0ZWRSb3dJZDtcbiAgICBjb25zdCBwcmV2aW91c2x5RWRpdGVkRGF0YSA9IG9wdHMua2VlcEVkaXRpbmdcbiAgICAgID8gKGlzTm90TmlsKHByZXZpb3VzbHlFZGl0ZWRSb3dJZCkgJiYgdGhpcy5lZGl0ZWRSb3c/LmN1cnJlbnREYXRhKSB8fCB0aGlzLnNpbmdsZVNlbGVjdGVkUm93Py5jdXJyZW50RGF0YVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoIXRoaXMuY29uZmlybUVkaXRDcmVhdGUoKSkge1xuICAgICAgdGhyb3cgeyBjb2RlOiBFcnJvckNvZGVzLlRBQkxFX0lOVkFMSURfUk9XX0VSUk9SLCBtZXNzYWdlOiAnRVJST1IuVEFCTEVfSU5WQUxJRF9ST1dfRVJST1InIH07XG4gICAgfVxuXG4gICAgLy8gTWFyayBhcyBzYXZpbmdcbiAgICB0aGlzLm1hcmtBc1NhdmluZygpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIENhbGxpbmcgc2VydmljZSBzYXZlKClcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbdGFibGVdIENhbGxpbmcgZGF0YVNvdXJjZS5zYXZlKCkuLi4nKTtcbiAgICAgIGNvbnN0IGlzT0sgPSBhd2FpdCB0aGlzLl9kYXRhU291cmNlLnNhdmUoKTtcblxuICAgICAgaWYgKGlzT0spIHRoaXMubWFya0FzUHJpc3RpbmUoKTtcblxuICAgICAgcmV0dXJuIGlzT0s7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLnNldEVycm9yKChlcnIgJiYgZXJyLm1lc3NhZ2UpIHx8IGVycik7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubWFya0FzU2F2ZWQoKTtcblxuICAgICAgLy8gUmVzdG9yZSBwcmV2aW91cyByb3dcbiAgICAgIGlmIChpc05vdE5pbChwcmV2aW91c2x5RWRpdGVkUm93SWQpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc2VsZWN0Um93QnlJZE9yRGF0YShwcmV2aW91c2x5RWRpdGVkUm93SWQsIHByZXZpb3VzbHlFZGl0ZWREYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjYW5jZWwoZXZlbnQ/OiBFdmVudCwgb3B0cz86IHsgaW50ZXJhY3RpdmU/OiBib29sZWFuIH0pIHtcbiAgICAvLyBDaGVjayBjb25maXJtYXRpb25cbiAgICBpZiAoKCFvcHRzIHx8IG9wdHMuaW50ZXJhY3RpdmUgIT09IGZhbHNlKSAmJiB0aGlzLmRpcnR5ICYmICh0aGlzLmNvbmZpcm1CZWZvcmVDYW5jZWwgfHwgdGhpcy5vbkJlZm9yZUNhbmNlbFJvd3Mub2JzZXJ2ZWQpKSB7XG4gICAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLmNhbkNhbmNlbFJvd3MoKS50aGVuKChjb25maXJtKSA9PiB7XG4gICAgICAgIC8vIElmIGNvbmZpcm1lZCwgbG9vcFxuICAgICAgICBpZiAoY29uZmlybSkgdGhpcy5jYW5jZWwobnVsbCwgeyBpbnRlcmFjdGl2ZTogZmFsc2UgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmVtaXRSZWZyZXNoKCk7XG4gIH1cblxuICBhc3luYyBkdXBsaWNhdGVSb3coXG4gICAgZXZlbnQ/OiBFdmVudCxcbiAgICByb3c/OiBUYWJsZUVsZW1lbnQ8VD4sXG4gICAgb3B0cz86IHtcbiAgICAgIGluY2x1ZGVkUHJvcGVydGllcz86IHN0cmluZ1tdO1xuICAgICAgZXhjbHVkZWRQcm9wZXJ0aWVzPzogc3RyaW5nW107XG4gICAgfVxuICApIHtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICByb3cgPSByb3cgfHwgdGhpcy5zaW5nbGVTZWxlY3RlZFJvdztcbiAgICBpZiAoIXJvdyB8fCAhdGhpcy5jb25maXJtRWRpdENyZWF0ZShldmVudCwgcm93KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1JvdyA9IGF3YWl0IHRoaXMuYWRkUm93VG9UYWJsZShyb3cuaWQgKyAxKTtcbiAgICBpZiAoIW5ld1JvdykgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYWRkIG5ldyByb3cgdG8gdGFibGUnKTtcblxuICAgIGNvbnN0IHNvdXJjZSA9IHJvdy5jbG9uZURhdGEoKTtcbiAgICBsZXQgdGFyZ2V0OiBhbnk7XG5cbiAgICAvLyBDb3B5IGluY2x1ZGVkIHByb3BlcnRpZXMgb25seVxuICAgIGlmIChpc05vdEVtcHR5QXJyYXkob3B0cz8uaW5jbHVkZWRQcm9wZXJ0aWVzKSkge1xuICAgICAgdGFyZ2V0ID0ge307XG4gICAgICAvLyBDbG9uZSAoZGVlcCBjb3B5KVxuICAgICAgb3B0cy5pbmNsdWRlZFByb3BlcnRpZXMuZm9yRWFjaCgocGF0aCkgPT4ge1xuICAgICAgICBzZXRQcm9wZXJ0eUJ5UGF0aCh0YXJnZXQsIHBhdGgsIGdldFByb3BlcnR5QnlQYXRoKHNvdXJjZSwgcGF0aCkpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ29weSBhbGwgcHJvcGVydGllc1xuICAgIGVsc2Uge1xuICAgICAgdGFyZ2V0ID0gc291cmNlO1xuXG4gICAgICAvLyBDbGVhbiBpZCBhbmQgdXBkYXRlRGF0ZVxuICAgICAgRW50aXR5VXRpbHMuY2xlYW5JZEFuZFVwZGF0ZURhdGUodGFyZ2V0LCB1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIC8vIFJlc3RvcmUgZXhjbHVkZWQgcHJvcGVydGllcyAoZS5nLiByYW5rT3JkZXIsIGV0YylcbiAgICBpZiAoaXNOb3RFbXB0eUFycmF5KG9wdHM/LmV4Y2x1ZGVkUHJvcGVydGllcykpIHtcbiAgICAgIGNvbnN0IG5ld0RhdGEgPSBuZXdSb3cuY3VycmVudERhdGE7XG4gICAgICBvcHRzLmV4Y2x1ZGVkUHJvcGVydGllcy5mb3JFYWNoKChwYXRoKSA9PiB7XG4gICAgICAgIHNldFByb3BlcnR5QnlQYXRoKHRhcmdldCwgcGF0aCwgZ2V0UHJvcGVydHlCeVBhdGgobmV3RGF0YSwgcGF0aCkpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKG5ld1Jvdy52YWxpZGF0b3IpIHtcbiAgICAgIG5ld1Jvdy52YWxpZGF0b3IucGF0Y2hWYWx1ZSh0YXJnZXQpO1xuICAgICAgbmV3Um93LnZhbGlkYXRvci5tYXJrQXNEaXJ0eSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobmV3Um93LmN1cnJlbnREYXRhPy5mcm9tT2JqZWN0KSB7XG4gICAgICAgIG5ld1Jvdy5jdXJyZW50RGF0YS5mcm9tT2JqZWN0KHRhcmdldCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdSb3cuY3VycmVudERhdGEgPSB0YXJnZXQ7XG4gICAgICB9XG4gICAgICB0aGlzLm1hcmtBc0RpcnR5KCk7XG4gICAgfVxuXG4gICAgLy8gc2VsZWN0XG4gICAgdGhpcy5jbGlja1Jvdyh1bmRlZmluZWQsIG5ld1Jvdyk7XG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIGVsZW1lbnRzIG1hdGNoZXMgdGhlIHRvdGFsIG51bWJlciBvZiByb3dzLiAqL1xuICBpc0FsbFNlbGVjdGVkKCkge1xuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKCdpc0FsbFNlbGVjdGVkLiBsZW5ndGhzJywgdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoLCB0aGlzLnRvdGFsUm93Q291bnQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aCA9PT0gdGhpcy50b3RhbFJvd0NvdW50IHx8IHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aCA9PT0gdGhpcy52aXNpYmxlUm93Q291bnQ7XG4gIH1cblxuICAvKiogU2VsZWN0cyBhbGwgcm93cyBpZiB0aGV5IGFyZSBub3QgYWxsIHNlbGVjdGVkOyBvdGhlcndpc2UgY2xlYXIgc2VsZWN0aW9uLiAqL1xuICBhc3luYyBtYXN0ZXJUb2dnbGUoKSB7XG4gICAgaWYgKHRoaXMubG9hZGluZykgcmV0dXJuO1xuICAgIGlmICh0aGlzLmlzQWxsU2VsZWN0ZWQoKSkge1xuICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgcm93cyA9IHRoaXMuX2RhdGFTb3VyY2UuZ2V0Um93cygpO1xuICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uKC4uLnJvd3MpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVNlbGVjdGlvbihldmVudDogRXZlbnQsIG9wdHM/OiB7IGludGVyYWN0aXZlPzogYm9vbGVhbiB9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBkZWxldGVDb3VudCA9IGF3YWl0IHRoaXMuZGVsZXRlUm93cyhldmVudCwgdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQsIG9wdHMpO1xuICAgIGlmIChkZWxldGVDb3VudCA+IDApIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgcmV0dXJuIGRlbGV0ZUNvdW50O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBAcGFyYW0gcm93XG4gICAqIEBwYXJhbSBvcHRzIFVzZSBpbnRlcmFjdGl2ZT1mYWxzZSB0byBhdm9pZCB1c2VyIGludGVyYWN0aW9uIChlLmcuIHVzZXIgY29uZmlybWF0aW9uKVxuICAgKiAgQW5kIHRvIGZvcmNlIGRlbGV0aW9uIGV2ZW4gaWYgdGFibGUgaXMgYnVzeVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlUm93KGV2ZW50OiBFdmVudCB8IG51bGwsIHJvdzogVGFibGVFbGVtZW50PFQ+LCBvcHRzPzogeyBpbnRlcmFjdGl2ZT86IGJvb2xlYW4gfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGRlbGV0ZUNvdW50ID0gYXdhaXQgdGhpcy5kZWxldGVSb3dzKGV2ZW50LCBbcm93XSwgb3B0cyk7XG4gICAgcmV0dXJuIGRlbGV0ZUNvdW50ID09PSAxO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBAcGFyYW0gcm93c1xuICAgKiBAcGFyYW0gb3B0cyBVc2UgaW50ZXJhY3RpdmU9ZmFsc2UgdG8gYXZvaWQgdXNlciBpbnRlcmFjdGlvbiAoZS5nLiB1c2VyIGNvbmZpcm1hdGlvbilcbiAgICogICAgQW5kIHRvIGZvcmNlIGRlbGV0aW9uIGV2ZW4gaWYgdGFibGUgaXMgYnVzeVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlUm93cyhldmVudDogRXZlbnQgfCBudWxsLCByb3dzOiBUYWJsZUVsZW1lbnQ8VD5bXSwgb3B0cz86IHsgaW50ZXJhY3RpdmU/OiBib29sZWFuIH0pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICB0aHJvdyB7IGNvZGU6IEVycm9yQ29kZXMuVEFCTEVfUkVBRF9PTkxZLCBtZXNzYWdlOiAnRVJST1IuVEFCTEVfUkVBRF9PTkxZJyB9O1xuICAgIH1cbiAgICBpZiAoZXZlbnQ/LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybiAwOyAvLyBTS2lwXG4gICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG5cbiAgICBpZiAoIXRoaXMuX2VuYWJsZWQgfHwgaXNFbXB0eUFycmF5KHJvd3MpKSByZXR1cm4gMDsgLy8gU2tpcCBpcyBkaXNhYmxlZCwgb3Igbm8gcm93cyB0byBkZWxldGVcblxuICAgIGlmICh0aGlzLmxvYWRpbmcgJiYgKCFvcHRzIHx8IG9wdHMuaW50ZXJhY3RpdmUgIT09IGZhbHNlKSkge1xuICAgICAgY29uc29sZS53YXJuKCdbYXBwLXRhYmxlXSBTa2lwIGRlbGV0ZVJvd3MoKSBiZWNhdXNlIHRhYmxlIGlzIGJ1c3kgKGxvYWRpbmcpLiBVc2Ugb3B0cy5pbnRlcmFjdGl2ZSA9IGZhbHNlIHRvIGZvcmNlIGRlbGV0aW9uJyk7XG4gICAgICByZXR1cm4gMDsgLy8gU2tpcCBpZiBsb2FkaW5nXG4gICAgfVxuXG4gICAgLy8gTWFrZSBzdXJlIHRvIGtlZXAgbmV3bHkgY3JlYXRlZCByb3dcbiAgICBpZiAodGhpcy5lZGl0ZWRSb3c/LmlkID09PSAtMSAmJiB0aGlzLmVkaXRlZFJvdy5lZGl0aW5nICYmICFyb3dzLmluY2x1ZGVzKHRoaXMuZWRpdGVkUm93KSkge1xuICAgICAgY29uc3QgY29uZmlybWVkID0gdGhpcy5jb25maXJtRWRpdENyZWF0ZSgpO1xuICAgICAgaWYgKCFjb25maXJtZWQpIHJldHVybiAwOyAvLyBDYW5ub3QgZGVsZXRlIChlLmcuIGVkaXRlZCByb3cgaXMgaW52YWxpZClcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBjYW4gZGVsZXRlXG4gICAgY29uc3QgY2FuRGVsZXRlID0gYXdhaXQgdGhpcy5jYW5EZWxldGVSb3dzKHJvd3MsIG9wdHMpO1xuICAgIGlmICghY2FuRGVsZXRlKSByZXR1cm4gMDsgLy8gQ2Fubm90IGRlbGV0ZVxuXG4gICAgLy8gUmV2ZXJzZSByb3cgb3JkZXIgKG9uIGEgY29weSlcbiAgICAvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCwgbmVlZCBiZWNhdXNlIHJvdy5kZWxldGUoKSBoYXMgYXN5bmMgZXhlY3V0aW9uXG4gICAgLy8gYW5kIGluZGV4IGNhY2hlIGlzIHVwZGF0ZWQgd2l0aCBhIGRlbGF5XG4gICAgbGV0IHRlbXBSb3dzID0gcm93cy5zbGljZSgpLnNvcnQoKGEsIGIpID0+IChhLmlkID4gYi5pZCA/IC0xIDogMSkpO1xuXG4gICAgY29uc3QgZGVsZXRlZFJvd3M6IFRhYmxlRWxlbWVudDxUPltdID0gW107XG5cbiAgICAvLyBJZiBkYXRhIG5lZWQgdG8gYmUgc2F2ZWQgZmlyc3RcbiAgICBpZiAodGhpcy5zYXZlQmVmb3JlRGVsZXRlKSB7XG4gICAgICAvLyBFeGNsdWRlIGludmFsaWQgcm93cyAoYmVjYXVzZSBvZiBzYXZlKCkgd2lsbCBmYWlsLCB3aGVuIGV4aXN0cyBzb21lIGludmFsaWQgcm93cylcbiAgICAgIHRlbXBSb3dzID0gdGVtcFJvd3MuZmlsdGVyKChyb3cpID0+IHtcbiAgICAgICAgLy8gRGVsZXRlIHRoZSByb3cgOlxuICAgICAgICAvLyAtIGlmIG5ld2x5IGNyZWF0ZWQgcm93IChpZCA9IC0xKSxcbiAgICAgICAgLy8gLSBvciBpZiBpbnZhbGlkIGFuZCBub3QgZWRpdGluZyAoPSBub3QgY2FuY2VsbGFibGUpXG4gICAgICAgIGlmIChyb3cuaWQgPT09IC0xIHx8ICghcm93LmVkaXRpbmcgJiYgcm93LmludmFsaWQpIC8qZG8gbm90IHVzZSAhdmFsaWQgYmVjYXVzZSBpZiByb3cgaXMgZGlzYWJsZWQsIGl0IHdpbGwgYmUgYWx3YXlzICF2YWxpZCAqLykge1xuICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGBbdGFibGVdIERlbGV0ZSByb3cgIyR7cm93LmlkfWApO1xuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmRlc2VsZWN0KHJvdyk7XG4gICAgICAgICAgcm93LmRlbGV0ZSgpO1xuICAgICAgICAgIHRoaXMudmlzaWJsZVJvd0NvdW50LS07XG4gICAgICAgICAgdGhpcy50b3RhbFJvd0NvdW50LS07XG4gICAgICAgICAgZGVsZXRlZFJvd3MucHVzaChyb3cpO1xuICAgICAgICAgIGlmICh0aGlzLmVkaXRlZFJvdyA9PT0gcm93KSB0aGlzLmVkaXRlZFJvdyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIEV4Y2x1ZGUgZnJvbSB0aGUgbGlzdCB0byBkZWxldGUgdXNpbmcgdGhlIHNlcnZpY2VcbiAgICAgICAgfVxuICAgICAgICAvLyBDYW5jZWwgdGhlIHJvdyAoYW5kIG1hcmsgYXMgcHJpc3RpbmUpLCB3aGVuIG5vdCB2YWxpZCBidXQgaW4gZWRpdGlvblxuICAgICAgICBlbHNlIGlmIChyb3cuZWRpdGluZyAmJiAhcm93LnZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb24uZGVzZWxlY3Qocm93KTtcbiAgICAgICAgICByb3cuY2FuY2VsKCk7XG4gICAgICAgICAgLy8gTWFyayByb3cgYXMgcHJpc3RpbmUgKGlmIHBvc3NpYmxlKVxuICAgICAgICAgIHRoaXMuY2hlY2tJZlJvd1ByaXN0aW5lKHJvdywgeyBlbWl0RXZlbnQ6IGZhbHNlLCBvbmx5U2VsZjogdHJ1ZSAvKmF2b2lkIHByb3BhZ2F0aW9uIHRvIHRhYmxlKi8gfSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7IC8vIEtlZXAgdGhlIHJvdy4gdGhlIHJvdyB3aWxsIGJlIGRlbGV0ZWQgYWZ0ZXIgdGhlIHNhdmVcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIEFwcGx5IHNhdmUsIG9ubHkgaWYgdGhlcmUgaXMgc3RpbGwgc29tZSByb3dzIHRvIGRlbGV0ZVxuICAgICAgLy8gV0FSTjogSWYgbm8gbW9yZSByb3dzIChlLmcuIGJlY2F1c2UgYWxsIGhhcyBiZWVuIGNhbmNlbGxlZCkgdGhlbiBjb250aW51ZSBhbnl3YXkgdG8gY2xlYXIgZWRpdGVkUm93IGFuZCBzZWxlY3Rpb24gKGlzc3VlIElNQUdJTkUtNjY5KVxuICAgICAgaWYgKGRlbGV0ZWRSb3dzLmxlbmd0aCB8fCB0ZW1wUm93cy5sZW5ndGgpIHtcbiAgICAgICAgLy8gU2F2ZSBkYXRhIChlLmcuIHdoZW4gdXNpbmcgbWVtb3J5IHNlcnZpY2UpXG4gICAgICAgIGNvbnN0IHNhdmVkID0gYXdhaXQgdGhpcy5zYXZlQmVmb3JlQWN0aW9uKCdkZWxldGUnKTtcbiAgICAgICAgaWYgKCFzYXZlZCkge1xuICAgICAgICAgIC8vIFN0b3AgaWYgc2F2ZSBjYW5jZWxsZWQgb3Igc2F2ZSBmYWlsZWRcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gQXBwbHkgZGVsZXRpb24gb24gZGF0YXNvdXJjZVxuICAgICAgLy8gSWYgbm8gbW9yZSByb3dzIHRvIGRlbGV0ZSwgY29udGludWUgYW55d2F5IHRvIGNsZWFyIGVkaXRlZFJvdyBhbmQgc2VsZWN0aW9uIChpc3N1ZSBJTUFHSU5FLTY2OSlcbiAgICAgIGlmICh0ZW1wUm93cy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYFt0YWJsZV0gRGVsZXRlICR7dGVtcFJvd3MubGVuZ3RofSByb3dzLi4uYCk7XG4gICAgICAgIGF3YWl0IHRoaXMuX2RhdGFTb3VyY2UuZGVsZXRlQWxsKHRlbXBSb3dzKTtcbiAgICAgIH1cblxuICAgICAgLy8gRE8gbm90IHVwZGF0ZSBtYW51YWxseSwgYmVjYXVzZSB3YXRjaEFMbCgpLnN1YnNjcmliZSgpIHdpbGwgdXBkYXRlIHRoaXMgY291bnRcbiAgICAgIC8vdGhpcy50b3RhbFJvd0NvdW50IC09IGRlbGV0ZUNvdW50O1xuICAgICAgLy90aGlzLnZpc2libGVSb3dDb3VudCAtPSBkZWxldGVDb3VudDtcblxuICAgICAgLy8gRGVzZWxlY3QgZGVsZXRlZCByb3dzXG4gICAgICB0aGlzLnNlbGVjdGlvbi5kZXNlbGVjdCguLi5yb3dzKTtcblxuICAgICAgdGhpcy5lZGl0ZWRSb3cgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLm1hcmtBc0RpcnR5KHsgZW1pdEV2ZW50OiBmYWxzZSAvKm1hcmtGb3JDaGVjaygpIGlzIGNhbGxlZCBqdXN0IGFmdGVyKi8gfSk7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgICB0aGlzLm9uQWZ0ZXJEZWxldGVkUm93cy5uZXh0KHJvd3MpO1xuXG4gICAgICByZXR1cm4gcm93cy5sZW5ndGg7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLnNldEVycm9yKChlcnIgJiYgZXJyLm1lc3NhZ2UpIHx8IGVycik7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2VsZWN0Um93QnlJZChpZDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKGlkID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcbiAgICBhd2FpdCB0aGlzLndhaXRJZGxlKCk7XG4gICAgY29uc3Qgcm93ID0gdGhpcy5kYXRhU291cmNlLmdldFJvdyhpZCk7XG4gICAgaWYgKCFyb3cpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5jbGlja1JvdyhudWxsLCByb3cpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyeSB0byBzZWxlY3Qgcm93IGJ5IGRhdGEuIFdpbGwgdXNlIGVxdWFscygpIHRvIGZpbmQgc2FtZSByb3cncyBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqL1xuICBhc3luYyBzZWxlY3RSb3dCeURhdGEoZGF0YTogVCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmIChkYXRhID09PSB1bmRlZmluZWQpIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMud2FpdElkbGUoKTtcbiAgICBjb25zdCByb3cgPSB0aGlzLmRhdGFTb3VyY2UuZ2V0Um93cygpLmZpbmQoKHJvdykgPT4gdGhpcy5lcXVhbHMocm93LmN1cnJlbnREYXRhLCBkYXRhKSk7XG4gICAgaWYgKCFyb3cpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5jbGlja1JvdyhudWxsLCByb3cpO1xuICB9XG5cbiAgdG9nZ2xlU2VsZWN0Um93KGV2ZW50OiBFdmVudCB8IHVuZGVmaW5lZCwgcm93OiBUYWJsZUVsZW1lbnQ8VD4pIHtcbiAgICAvLyAvIVxcIERPIE5PVCBwcmV2ZW50IGRlZmF1bHQsIG90aGVyd2lzZSB0aGUgY2hlY2tib3ggd2lsbCBub3QgYmUgdXBkYXRlZFxuICAgIC8vZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuc2VsZWN0aW9uLnRvZ2dsZShyb3cpO1xuICB9XG5cbiAgY2xpY2tSb3coZXZlbnQ6IEV2ZW50IHwgdW5kZWZpbmVkLCByb3c6IFRhYmxlRWxlbWVudDxUPik6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcbiAgICAgIC8vIFdhaXQgd2hpbGUgbG9hZGluZywgYW5kIGxvb3BcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbdGFibGVdIFdhaXRpbmcgYmVmb3JlIGFwcGx5IGNsaWNrUm93KCkgKGRhdGFzb3VyY2UgaXMgYnVzeSkuLi4nKTtcbiAgICAgIHRoaXMud2FpdElkbGUoeyB0aW1lb3V0OiAyMDAwIH0pLnRoZW4oKCkgPT4gdGhpcy5jbGlja1JvdyhldmVudCwgcm93KSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gREVCVUdcbiAgICAvL2NvbnNvbGUuZGVidWcoJ1t0YWJsZV0gRGV0ZWN0IGNsaWNrIG9uIHJvdycpO1xuXG4gICAgLy8gQ2FuY2VsbGVkIGJ5IGV2ZW50XG4gICAgaWYgKGV2ZW50Py5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3RhYmxlXSBjbGlja1JvdyBldmVudCBpcyBkZWZhdWx0UHJldmVudGVkJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQ2FsbCBvbkNsaWNrUm93IGlmIG9ic2VydmVkXG4gICAgaWYgKHRoaXMub25DbGlja1Jvdy5vYnNlcnZlZCkge1xuICAgICAgdGhpcy5vbkNsaWNrUm93Lm5leHQocm93KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIE9wZW4gdGhlIGRldGFpbCBwYWdlIChpZiBub3QgaW5saW5lIGVkaXRpbmcpXG4gICAgaWYgKCF0aGlzLmlubGluZUVkaXRpb24pIHtcbiAgICAgIGlmICh0aGlzLl9vcGVuaW5nUm93KSByZXR1cm47IC8vIFByZXZlbnQgZG91YmxlIGNsaWNrXG5cbiAgICAgIGlmIChldmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fb3BlbmluZ1JvdyA9IHRydWU7IC8vIFByZXZlbnQgZG91YmxlIGNsaWNrXG4gICAgICB0aGlzLm1hcmtBc0xvYWRpbmcoKTtcblxuICAgICAgdGhpcy5vcGVuUm93KHJvdy5jdXJyZW50RGF0YS5pZCwgcm93KVxuICAgICAgICAuY2F0Y2goKGVycikgPT4gY29uc29sZS5lcnJvcignRmFpbGVkIHRvIG9wZW4gcm93JywgZXJyKSkgLy8gQ29udGludWVcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMubWFya0FzTG9hZGVkKCk7XG5cbiAgICAgICAgICAvLyBQcmV2ZW50IGRvdWJsZSBjbGljayAodXNlIGFuIG9wZW4gdGhyb3R0bGUgdGltZSlcbiAgICAgICAgICBpZiAodGhpcy5vcGVuUm93VGhyb3R0bGVUaW1lID4gMCkge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX29wZW5pbmdSb3cgPSBmYWxzZTtcbiAgICAgICAgICAgIH0sIHRoaXMub3BlblJvd1Rocm90dGxlVGltZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX29wZW5pbmdSb3cgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBTdGFydCBlZGl0aW5nIHJvd1xuICAgIHJldHVybiB0aGlzLmVkaXRSb3coZXZlbnQsIHJvdywgeyBmb2N1c0NvbHVtbjogdW5kZWZpbmVkIC8qZm9yY2UgdG8gdXNlIHRoZSBjbGljayB0YXJnZXQqLyB9KTtcbiAgfVxuXG4gIG1vdmVSb3coaWQ6IG51bWJlciwgZGlyZWN0aW9uOiBudW1iZXIpIHtcbiAgICB0aGlzLmRhdGFTb3VyY2UubW92ZShpZCwgZGlyZWN0aW9uKTtcbiAgfVxuXG4gIHJlYWR5KG9wdHM/OiBXYWl0Rm9yT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB3YWl0Rm9yVHJ1ZSh0aGlzLnJlYWR5U3ViamVjdCwgeyBzdG9wOiB0aGlzLmRlc3Ryb3lTdWJqZWN0LCAuLi5vcHRzIH0pO1xuICB9XG5cbiAgd2FpdElkbGUob3B0cz86IFdhaXRGb3JPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmxvYWRpbmdTdWJqZWN0LnZhbHVlKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgcmV0dXJuIHdhaXRGb3JGYWxzZSh0aGlzLmxvYWRpbmdTdWJqZWN0LCB7IHN0b3A6IHRoaXMuZGVzdHJveVN1YmplY3QsIC4uLm9wdHMgfSk7XG4gIH1cblxuICBhc3luYyBvcGVuU2VsZWN0Q29sdW1uc01vZGFsKGV2ZW50PzogRXZlbnQpOiBQcm9taXNlPGFueT4ge1xuICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgLy8gQ29weSBjdXJyZW50IGNvbHVtbnMgKGRlZXAgY29weSlcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRDdXJyZW50Q29sdW1ucygpO1xuXG4gICAgY29uc3QgaGFzVG9wTW9kYWwgPSAhIShhd2FpdCB0aGlzLm1vZGFsQ3RybC5nZXRUb3AoKSk7XG4gICAgY29uc3QgbW9kYWwgPSBhd2FpdCB0aGlzLm1vZGFsQ3RybC5jcmVhdGUoe1xuICAgICAgY29tcG9uZW50OiBUYWJsZVNlbGVjdENvbHVtbnNDb21wb25lbnQsXG4gICAgICBjb21wb25lbnRQcm9wczogeyBjb2x1bW5zIH0sXG4gICAgICBjc3NDbGFzczogaGFzVG9wTW9kYWwgJiYgJ3N0YWNrLW1vZGFsJyxcbiAgICB9KTtcblxuICAgIC8vIE9wZW4gdGhlIG1vZGFsXG4gICAgYXdhaXQgbW9kYWwucHJlc2VudCgpO1xuXG4gICAgLy8gT24gZGlzbWlzc1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgbW9kYWwub25EaWREaXNtaXNzKCk7XG4gICAgaWYgKCFkYXRhKSByZXR1cm47IC8vIENBTkNFTExFRFxuXG4gICAgLy8gQXBwbHkgY29sdW1uc1xuICAgIGNvbnN0IHVzZXJDb2x1bW5zID0gKGRhdGEgfHwgW10pLmZpbHRlcigoYykgPT4gYy5jYW5IaWRlID09PSBmYWxzZSB8fCBjLnZpc2libGUpLm1hcCgoYykgPT4gYy5uYW1lKSB8fCBbXTtcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSBSRVNFUlZFRF9TVEFSVF9DT0xVTU5TLmNvbmNhdCh1c2VyQ29sdW1ucykuY29uY2F0KFJFU0VSVkVEX0VORF9DT0xVTU5TKTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgLy8gVXBkYXRlIHVzZXIgc2V0dGluZ3NcbiAgICBhd2FpdCB0aGlzLnNhdmVQYWdlU2V0dGluZ3ModXNlckNvbHVtbnMsIFNFVFRJTkdTX0RJU1BMQVlfQ09MVU1OUyk7XG4gIH1cblxuICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgcm93OiBUYWJsZUVsZW1lbnQ8VD4pOiBhbnkge1xuICAgIHJldHVybiByb3cuaWQ7XG4gIH1cblxuICBkb1JlZnJlc2goZXZlbnQ/OiBDb21wbGV0YWJsZUV2ZW50KSB7XG4gICAgdGhpcy5lbWl0UmVmcmVzaChldmVudCk7XG5cbiAgICAvLyBXaGVuIHRhcmdldCB3YWl0IGZvciBhIGNvbXBsZXRlIChlLmcuIElvblJlZnJlc2hlcilcbiAgICBpZiAoZXZlbnQ/LnRhcmdldCAmJiBldmVudC50YXJnZXQuY29tcGxldGUpIHtcbiAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLndhaXRJZGxlKCk7XG4gICAgICAgIGV2ZW50LnRhcmdldC5jb21wbGV0ZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q3VycmVudENvbHVtbnMoKTogQ29sdW1uSXRlbVtdIHtcbiAgICBjb25zdCBoaWRkZW5Db2x1bW5zID0gdGhpcy5jb2x1bW5zLnNsaWNlKFJFU0VSVkVEX1NUQVJUX0NPTFVNTlMubGVuZ3RoKS5maWx0ZXIoKG5hbWUpID0+IHRoaXMuZGlzcGxheWVkQ29sdW1ucy5pbmRleE9mKG5hbWUpID09PSAtMSk7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheWVkQ29sdW1uc1xuICAgICAgLmNvbmNhdChoaWRkZW5Db2x1bW5zKVxuICAgICAgLmZpbHRlcigobmFtZSkgPT4gIVJFU0VSVkVEX1NUQVJUX0NPTFVNTlMuaW5jbHVkZXMobmFtZSkgJiYgIVJFU0VSVkVEX0VORF9DT0xVTU5TLmluY2x1ZGVzKG5hbWUpICYmICF0aGlzLmV4Y2x1ZGVzQ29sdW1ucy5pbmNsdWRlcyhuYW1lKSlcbiAgICAgIC5tYXAoKG5hbWUpID0+ICh7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIGxhYmVsOiB0aGlzLmdldEkxOG5Db2x1bW5OYW1lKG5hbWUpLFxuICAgICAgICB2aXNpYmxlOiB0aGlzLmRpc3BsYXllZENvbHVtbnMuaW5kZXhPZihuYW1lKSAhPT0gLTEsXG4gICAgICAgIGNhbkhpZGU6IHRoaXMuZ2V0UmVxdWlyZWRDb2x1bW5zKCkuaW5kZXhPZihuYW1lKSA9PT0gLTEsXG4gICAgICB9KSk7XG4gIH1cblxuICBlc2NhcGVFZGl0aW5nUm93KGV2ZW50PzogRXZlbnQsIHJvdz86IFRhYmxlRWxlbWVudDxUPikge1xuICAgIHJvdyA9IHJvdyB8fCB0aGlzLmVkaXRlZFJvdztcbiAgICBpZiAoIXJvdyB8fCAhcm93LmVkaXRpbmcpIHJldHVybjtcblxuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKCdbYXBwLXRhYmxlXSBDYW5jZWwgdGhlIHJvdyAoa2V5ZG93bi5lc2NhcGUpJyk7XG5cbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIC8vIEF2b2lkIHRvIGNhbmNlbCB0aGUgZWRpdG9yXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgLy8gSWYgbmV3IHJvdyAobm8gaWQpXG4gICAgaWYgKHJvdy5pZCA9PT0gLTEpIHtcbiAgICAgIGlmIChyb3cudmFsaWRhdG9yKSB7XG4gICAgICAgIC8vIElmIHBlbmRpbmc6IFdhaXQgZW5kIG9mIHZhbGlkYXRpb24sIHRoZW4gbG9vcFxuICAgICAgICBpZiAocm93LnBlbmRpbmcpIHtcbiAgICAgICAgICBBcHBGb3JtVXRpbHMud2FpdFdoaWxlUGVuZGluZyhyb3cudmFsaWRhdG9yKS50aGVuKCgpID0+IHRoaXMuZXNjYXBlRWRpdGluZ1JvdyhldmVudCwgcm93KSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUm93IGlzIGludmFsaWQ6IGRlbGV0ZSB0aGUgcm93XG4gICAgICAgIGlmIChyb3cuaW52YWxpZCkge1xuICAgICAgICAgIHRoaXMuZGVsZXRlTmV3Um93KGV2ZW50LCByb3cpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBJZiB0aGUgcm93IGV4aXN0cyAoaGFzIGFuIGlkKVxuICAgIGVsc2Uge1xuICAgICAgLy8gQ2FsbCBjYW5jZWwgZnVuY3Rpb24gLFxuICAgICAgLy8gLSBpZiBjb25maXJtYXRpb24gd2lsbCBiZSBjYWxsZWQgYmVmb3JlXG4gICAgICAvLyAtIG9yIGlmIHJvdyBpcyBwcmlzdGluZSAobm90IGRpcnR5KVxuICAgICAgaWYgKHRoaXMuY29uZmlybUJlZm9yZUNhbmNlbCB8fCAhcm93LmRpcnR5KSB7XG4gICAgICAgIHRoaXMuY2FuY2VsRXhpc3RpbmdSb3coZXZlbnQsIHJvdywgeyBrZWVwRWRpdGluZzogZmFsc2UgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBCeSBkZWZhdWx0LCB0cnkgdG8gY29uZmlybSB0aGUgcm93XG4gICAgdGhpcy5jb25maXJtRWRpdENyZWF0ZShldmVudCwgcm93KTtcbiAgfVxuXG4gIHRyYW5zbGF0ZUZvcm1QYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gQ2FuIGJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3NlcywgdG8gcmVzb2x2ZSBhbGwgZmllbGQgbmFtZVxuXG4gICAgLy8gVXNlIGNvbHVtbnMga2V5LCBoYXMgZGVmYXVsdCBuYW1lXG4gICAgY29uc3QgaTE4bkNvbHVtbktleSA9IHRoaXMuZ2V0STE4bkNvbHVtbk5hbWUocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlPy5pbnN0YW50KGkxOG5Db2x1bW5LZXkpIHx8IGkxOG5Db2x1bW5LZXk7XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kIC0tICovXG5cbiAgcHJvdGVjdGVkIGVkaXRSb3coZXZlbnQ6IEV2ZW50IHwgdW5kZWZpbmVkLCByb3c6IFRhYmxlRWxlbWVudDxUPiwgb3B0cz86IHsgZm9jdXNDb2x1bW4/OiBzdHJpbmcgfSk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5fZW5hYmxlZCB8fCAhdGhpcy5pbmxpbmVFZGl0aW9uKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRoaXMuZWRpdGVkUm93ID09PSByb3cpIHJldHVybiB0cnVlOyAvLyBBbHJlYWR5IHRoZSBlZGl0ZWQgcm93XG4gICAgaWYgKGV2ZW50Py5kZWZhdWx0UHJldmVudGVkKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBjb25maXJtZWQgPSB0aGlzLmNvbmZpcm1FZGl0Q3JlYXRlKCk7XG4gICAgaWYgKCFjb25maXJtZWQpIHJldHVybiBmYWxzZTtcblxuICAgIGlmICghcm93LmVkaXRpbmcgJiYgIXRoaXMubG9hZGluZykge1xuICAgICAgdGhpcy5mb2N1c0NvbHVtbiA9IG9wdHM/LmZvY3VzQ29sdW1uID8/IHRoaXMuZm9jdXNDb2x1bW47XG4gICAgICB0aGlzLl9kYXRhU291cmNlLnN0YXJ0RWRpdChyb3cpO1xuICAgIH1cbiAgICB0aGlzLmVkaXRlZFJvdyA9IHJvdztcbiAgICB0aGlzLm9uU3RhcnRFZGl0aW5nUm93LmVtaXQocm93KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcnkgdG8gc2VsZWN0IHJvdywgYnkgcm93LmlkLCBvciBieSBkYXRhLiBXSWxsIHVzZSBFbnRpdHlVdGlscy5lcXVhbHMoKVxuICAgKlxuICAgKiBAcGFyYW0gaWRcbiAgICogQHBhcmFtIGRhdGFcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIHNlbGVjdFJvd0J5SWRPckRhdGEoaWQ6IG51bWJlciwgZGF0YT86IFQpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBsZXQgZG9uZSA9IGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICAvLyBTZWxlY3QgYnkgcm93IGlkIChpZiBOT1QgYSBuZXcgcm93KVxuICAgICAgaWYgKGlzTm90TmlsKGlkKSB8fCBpZCAhPT0gLTEpIHtcbiAgICAgICAgZG9uZSA9IGF3YWl0IHRoaXMuc2VsZWN0Um93QnlJZChpZCk7XG4gICAgICAgIGlmIChkb25lKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY29uc29sZS53YXJuKCdbYXBwLXRhYmxlXSBTYXZlOiBDYW5ub3QgcmVzZWxlY3Qgcm93IGJ5IHJvdy5pZDogJywgaWQpO1xuICAgICAgfVxuXG4gICAgICAvLyBUcnkgYnkgZGF0YVxuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgZG9uZSA9IGF3YWl0IHRoaXMuc2VsZWN0Um93QnlEYXRhKGRhdGEpO1xuICAgICAgICBpZiAoZG9uZSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGNvbnNvbGUud2FybignW2FwcC10YWJsZV0gU2F2ZTogQ2Fubm90IHJlc2VsZWN0IHJvdyBieSBkYXRhOiAnLCBkYXRhKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gTG9nLCBidXQgY29udGludWVcbiAgICAgIGNvbnNvbGUuZXJyb3IoKGVyciAmJiBlcnIubWVzc2FnZSkgfHwgZXJyKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogcmV0dXJuIHRoZSBzZWxlY3RlZCByb3cgaWYgdW5pcXVlIGluIHNlbGVjdGlvblxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBzaW5nbGVTZWxlY3RlZFJvdygpOiBUYWJsZUVsZW1lbnQ8VD4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZD8ubGVuZ3RoID09PSAxID8gdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWRbMF0gOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgY2FuRGVsZXRlUm93cyhyb3dzOiBUYWJsZUVsZW1lbnQ8VD5bXSwgb3B0cz86IHsgaW50ZXJhY3RpdmU/OiBib29sZWFuIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBDaGVjayB1c2luZyBlbWl0dGVyXG4gICAgaWYgKHRoaXMub25CZWZvcmVEZWxldGVSb3dzLm9ic2VydmVkKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjYW5EZWxldGUgPSBhd2FpdCBlbWl0UHJvbWlzZUV2ZW50KHRoaXMub25CZWZvcmVEZWxldGVSb3dzLCAnY2FuRGVsZXRlJywge1xuICAgICAgICAgIGRldGFpbDogeyByb3dzIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWNhbkRlbGV0ZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgPT09ICdDQU5DRUxMRUQnKSByZXR1cm4gZmFsc2U7IC8vIFVzZXIgY2FuY2VsXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHdoaWxlIGNoZWNraW5nIGlmIGNhbiBkZWxldGUgcm93cycsIGVycik7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBc2sgdXNlciBjb25maXJtYXRpb25cbiAgICBpZiAodGhpcy5jb25maXJtQmVmb3JlRGVsZXRlICYmICghb3B0cyB8fCBvcHRzLmludGVyYWN0aXZlICE9PSBmYWxzZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmFza0RlbGV0ZUNvbmZpcm1hdGlvbihudWxsLCByb3dzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgY2FuQ2FuY2VsUm93cyhyb3dzPzogVGFibGVFbGVtZW50PFQ+W10sIG9wdHM/OiB7IGludGVyYWN0aXZlPzogYm9vbGVhbiB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgLy8gR2V0IGRpcnR5IHJvd3NcbiAgICByb3dzID0gcm93cyB8fCB0aGlzLmRhdGFTb3VyY2UuZ2V0Um93cygpLmZpbHRlcigocm93KSA9PiByb3cudmFsaWRhdG9yPy5kaXJ0eSk7XG5cbiAgICBpZiAoaXNFbXB0eUFycmF5KHJvd3MpKSByZXR1cm4gdHJ1ZTsgLy8gTm8gZGlydHk6IE9LXG5cbiAgICAvLyBDaGVjayB1c2luZyBlbWl0dGVyXG4gICAgaWYgKHRoaXMub25CZWZvcmVDYW5jZWxSb3dzLm9ic2VydmVkKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpc0NhbmNlbCA9IGF3YWl0IGVtaXRQcm9taXNlRXZlbnQodGhpcy5vbkJlZm9yZUNhbmNlbFJvd3MsICdjYW5DYW5jZWwnLCB7XG4gICAgICAgICAgZGV0YWlsOiB7IHJvd3MgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghaXNDYW5jZWwpIHJldHVybiBmYWxzZTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoZXJyID09PSAnQ0FOQ0VMTEVEJykgcmV0dXJuIGZhbHNlOyAvLyBVc2VyIGNhbmNlbFxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB3aGlsZSBjaGVja2luZyBpZiBjYW4gY2FuY2VsIHJvd3MnLCBlcnIpO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQXNrIHVzZXIgY29uZmlybWF0aW9uXG4gICAgaWYgKHRoaXMuY29uZmlybUJlZm9yZUNhbmNlbCAmJiAoIW9wdHMgfHwgb3B0cy5pbnRlcmFjdGl2ZSAhPT0gZmFsc2UpKSB7XG4gICAgICByZXR1cm4gdGhpcy5hc2tDYW5jZWxDb25maXJtYXRpb24obnVsbCwgcm93cyk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHNhdmVCZWZvcmVBY3Rpb24oc2F2ZUFjdGlvbjogU2F2ZUFjdGlvblR5cGUpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXRoaXMuZGlydHkpIHtcbiAgICAgIC8vIENvbnRpbnVlIHdpdGhvdXQgc2F2ZVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbGV0IHNhdmU6IGJvb2xlYW47XG4gICAgc3dpdGNoIChzYXZlQWN0aW9uKSB7XG4gICAgICBjYXNlICdkZWxldGUnOlxuICAgICAgICBzYXZlID0gdGhpcy5zYXZlQmVmb3JlRGVsZXRlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2ZpbHRlcic6XG4gICAgICAgIHNhdmUgPSB0aGlzLnNhdmVCZWZvcmVGaWx0ZXI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc29ydCc6XG4gICAgICAgIHNhdmUgPSB0aGlzLnNhdmVCZWZvcmVTb3J0O1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHNhdmUgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIERlZmF1bHQgYmVoYXZpb3JcbiAgICBsZXQgY29uZmlybWVkID0gdHJ1ZTtcblxuICAgIGlmIChzYXZlKSB7XG4gICAgICBpZiAodGhpcy5vbkJlZm9yZVNhdmUub2JzZXJ2ZWQpIHtcbiAgICAgICAgLy8gQXNrIGNvbmZpcm1hdGlvblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGVtaXRQcm9taXNlRXZlbnQodGhpcy5vbkJlZm9yZVNhdmUsICdiZWZvcmVTYXZlJywge1xuICAgICAgICAgICAgZGV0YWlsOiB7IGFjdGlvbjogc2F2ZUFjdGlvbiwgdmFsaWQ6IHRoaXMudmFsaWQgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25maXJtZWQgPSByZXMuY29uZmlybWVkO1xuICAgICAgICAgIHNhdmUgPSByZXMuc2F2ZTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgaWYgKGVyciA9PT0gJ0NBTkNFTExFRCcpIHJldHVybiBmYWxzZTsgLy8gVXNlciBjYW5jZWxcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB3aGlsZSBjaGVja2luZyBpZiBjYW4gZGVsZXRlIHJvd3MnLCBlcnIpO1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb25maXJtZWQpIHtcbiAgICAgIGlmIChzYXZlKSB7XG4gICAgICAgIC8vIFVzZXIgY29uZmlybWVkIHNhdmVcbiAgICAgICAgY29uc3Qgc2F2ZWQgPSBhd2FpdCB0aGlzLnNhdmUoKTtcbiAgICAgICAgdGhpcy5tYXJrQXNEaXJ0eSgpOyAvLyBSZXN0b3JlIGRpcnR5IGZsYWdcbiAgICAgICAgcmV0dXJuIHNhdmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7IC8vIE5vIHNhdmUgYnV0IGNvbnRpbnVlIGFjdGlvblxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTsgLy8gVXNlciBjYW5jZWwgdGhlIGFjdGlvblxuICB9XG5cbiAgLyoqXG4gICAqIE9wZW4gYSByb3cgZGV0YWlsIHZpZXcuIEJ5IGRlZmF1bHQsIHdpbGwgdG8gb3BlbiByb3cgZGV0YWlsIHBhZ2UuXG4gICAqIENhbiBiZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMsIEJVVCBwcmVmZXIgdG8gc3Vic2NyaWJlIG9uIG9uT3BlblJvd1xuICAgKlxuICAgKiBAcGFyYW0gaWRcbiAgICogQHBhcmFtIHJvd1xuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgb3BlblJvdyhpZDogSUQsIHJvdzogVGFibGVFbGVtZW50PFQ+KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMuYWxsb3dSb3dEZXRhaWwpIHtcbiAgICAgIGlmICh0aGlzLmRlYnVnICYmIHRoaXMuZGlydHkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbdGFibGVdIE9wZW5pbmcgcm93IGRldGFpbHMsIGJ1dCB0YWJsZSBoYXMgdW5zYXZlZCBjaGFuZ2VzIScpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vbk9wZW5Sb3cub2JzZXJ2ZWQpIHtcbiAgICAgICAgLy8gQ2xlYXIgc2VsZWN0aW9uIChiZWNhdXNlIG5leHQgcm91dGUgY2FuIGNoYW5nZSB0aGUgY3VycmVudCB0YWJsZSBjb250ZW50KVxuICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICB0aGlzLm9uT3BlblJvdy5lbWl0KHJvdyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBObyBJRCBkZWZpbmVkOiB1bmFibGUgdG8gb3BlbiBkZXRhaWxzXG4gICAgICBpZiAoaXNOaWwoaWQpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW3RhYmxlXSBPcGVuaW5nIHJvdyBkZXRhaWxzLCBidXQgZGF0YSBoYXMgbm8gaWQhJyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2xlYXIgc2VsZWN0aW9uIChiZWNhdXNlIG5leHQgcm91dGUgY2FuIGNoYW5nZSB0aGUgY3VycmVudCB0YWJsZSBjb250ZW50KVxuICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcblxuICAgICAgcmV0dXJuIHRoaXMubmF2Q29udHJvbGxlci5uYXZpZ2F0ZUZvcndhcmQoWycuJywgaWRdLCB7XG4gICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXG4gICAgICAgIHF1ZXJ5UGFyYW1zOiB7fSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgb3Blbk5ld1Jvd0RldGFpbChldmVudD86IGFueSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghdGhpcy5hbGxvd1Jvd0RldGFpbCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKHRoaXMub25OZXdSb3cub2JzZXJ2ZWQpIHtcbiAgICAgIHRoaXMub25OZXdSb3cuZW1pdChldmVudCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBDbGVhciBzZWxlY3Rpb24gKGJlY2F1c2UgbmV4dCByb3V0ZSBjYW4gY2hhbmdlIHRoZSBjdXJyZW50IHRhYmxlIGNvbnRlbnQpXG4gICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcblxuICAgIHJldHVybiB0aGlzLm5hdkNvbnRyb2xsZXIubmF2aWdhdGVGb3J3YXJkKFsnLicsICduZXcnXSwge1xuICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7fSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGNhbiBiZSBvdmVycmlkZGVuIHRvIGFkZCBtb3JlIHJlcXVpcmVkIGNvbHVtbnNcbiAgcHJvdGVjdGVkIGdldFJlcXVpcmVkQ29sdW1ucygpIHtcbiAgICByZXR1cm4gREVGQVVMVF9SRVFVSVJFRF9DT0xVTU5TO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFVzZXJDb2x1bW5zKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQYWdlU2V0dGluZ3MoU0VUVElOR1NfRElTUExBWV9DT0xVTU5TKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTb3J0ZWRDb2x1bW4oKTogTWF0U29ydGFibGUge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFBhZ2VTZXR0aW5ncyhTRVRUSU5HU19TT1JURURfQ09MVU1OKTtcbiAgICBjb25zdCBwYXJ0cyA9IGRhdGEgJiYgZGF0YS5zcGxpdCgnOicpO1xuICAgIGlmIChwYXJ0cyAmJiBwYXJ0cy5sZW5ndGggPT09IDIgJiYgdGhpcy5jb2x1bW5zLmluY2x1ZGVzKHBhcnRzWzBdKSkge1xuICAgICAgcmV0dXJuIHsgaWQ6IHBhcnRzWzBdLCBzdGFydDogcGFydHNbMV0gPT09ICdkZXNjJyA/ICdkZXNjJyA6ICdhc2MnLCBkaXNhYmxlQ2xlYXI6IGZhbHNlIH07XG4gICAgfVxuICAgIGlmICh0aGlzLmRlZmF1bHRTb3J0QnkpIHtcbiAgICAgIHJldHVybiB7IGlkOiB0aGlzLmRlZmF1bHRTb3J0QnksIHN0YXJ0OiB0aGlzLmRlZmF1bHRTb3J0RGlyZWN0aW9uIHx8ICdhc2MnLCBkaXNhYmxlQ2xlYXI6IGZhbHNlIH07XG4gICAgfVxuICAgIHJldHVybiB7IGlkOiAnaWQnLCBzdGFydDogJ2FzYycsIGRpc2FibGVDbGVhcjogZmFsc2UgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRQYWdlU2l6ZSgpOiBudW1iZXIge1xuICAgIGNvbnN0IHBhZ2VTaXplID0gdGhpcy5nZXRQYWdlU2V0dGluZ3M8bnVtYmVyPihTRVRUSU5HU19QQUdFX1NJWkUpO1xuICAgIHJldHVybiBwYWdlU2l6ZSB8fCB0aGlzLmRlZmF1bHRQYWdlU2l6ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXREaXNwbGF5Q29sdW1ucygpOiBzdHJpbmdbXSB7XG4gICAgbGV0IHVzZXJDb2x1bW5zID0gdGhpcy5nZXRVc2VyQ29sdW1ucygpO1xuXG4gICAgLy8gTm8gdXNlciBvdmVycmlkZVxuICAgIGlmICghdXNlckNvbHVtbnMpIHtcbiAgICAgIC8vIFJldHVybiBkZWZhdWx0LCB3aXRob3V0IGNvbHVtbnMgdG8gaGlkZVxuICAgICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maWx0ZXIoKGNvbHVtbikgPT4gIXRoaXMuZXhjbHVkZXNDb2x1bW5zLmluY2x1ZGVzKGNvbHVtbikpO1xuICAgIH1cblxuICAgIC8vIEdldCBmaXhlZCBzdGFydCBjb2x1bW5zXG4gICAgY29uc3QgZml4ZWRTdGFydENvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKChjKSA9PiBSRVNFUlZFRF9TVEFSVF9DT0xVTU5TLmluY2x1ZGVzKGMpKTtcblxuICAgIC8vIFJlbW92ZSBlbmQgY29sdW1uc1xuICAgIGNvbnN0IGZpeGVkRW5kQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoKGMpID0+IFJFU0VSVkVEX0VORF9DT0xVTU5TLmluY2x1ZGVzKGMpKTtcblxuICAgIC8vIFJlbW92ZSBmaXhlZCBjb2x1bW5zIGZyb20gdXNlciBjb2x1bW5zXG4gICAgdXNlckNvbHVtbnMgPSB1c2VyQ29sdW1ucy5maWx0ZXIoKGMpID0+ICFmaXhlZFN0YXJ0Q29sdW1ucy5pbmNsdWRlcyhjKSAmJiAhZml4ZWRFbmRDb2x1bW5zLmluY2x1ZGVzKGMpICYmIHRoaXMuY29sdW1ucy5pbmNsdWRlcyhjKSk7XG5cbiAgICAvLyBBZGQgcmVxdWlyZWQgY29sdW1ucyBpZiBtaXNzaW5nXG4gICAgdXNlckNvbHVtbnMucHVzaChcbiAgICAgIC4uLnRoaXMuZ2V0UmVxdWlyZWRDb2x1bW5zKCkuZmlsdGVyKChjKSA9PiAhZml4ZWRTdGFydENvbHVtbnMuaW5jbHVkZXMoYykgJiYgIWZpeGVkRW5kQ29sdW1ucy5pbmNsdWRlcyhjKSAmJiAhdXNlckNvbHVtbnMuaW5jbHVkZXMoYykpXG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICBmaXhlZFN0YXJ0Q29sdW1uc1xuICAgICAgICAuY29uY2F0KHVzZXJDb2x1bW5zKVxuICAgICAgICAuY29uY2F0KGZpeGVkRW5kQ29sdW1ucylcbiAgICAgICAgLy8gUmVtb3ZlIGNvbHVtbnMgdG8gaGlkZVxuICAgICAgICAuZmlsdGVyKChjb2x1bW4pID0+ICF0aGlzLmV4Y2x1ZGVzQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW4pKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVjb21wdXRlIGRpc3BsYXkgY29sdW1uc1xuICAgKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgdXBkYXRlQ29sdW1ucygpIHtcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSB0aGlzLmdldERpc3BsYXlDb2x1bW5zKCk7XG4gICAgaWYgKCF0aGlzLmxvYWRpbmcpIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVnaXN0ZXJTdWJzY3JpcHRpb24oc3ViOiBTdWJzY3JpcHRpb24pIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKHN1Yik7XG4gIH1cblxuICBwcm90ZWN0ZWQgdW5yZWdpc3RlclN1YnNjcmlwdGlvbihzdWI6IFN1YnNjcmlwdGlvbikge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5yZW1vdmUoc3ViKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWdpc3RlckF1dG9jb21wbGV0ZUZpZWxkPEUgPSBhbnksIEVGID0gYW55PihcbiAgICBmaWVsZE5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogTWF0QXV0b2NvbXBsZXRlRmllbGRBZGRPcHRpb25zPEUsIEVGPlxuICApOiBNYXRBdXRvY29tcGxldGVGaWVsZENvbmZpZzxFLCBFRj4ge1xuICAgIHJldHVybiB0aGlzLl9hdXRvY29tcGxldGVDb25maWdIb2xkZXIuYWRkKGZpZWxkTmFtZSwgb3B0aW9ucyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0STE4bkNvbHVtbk5hbWUoY29sdW1uTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuICh0aGlzLmkxOG5Db2x1bW5QcmVmaXggfHwgJycpICsgY2hhbmdlQ2FzZVRvVW5kZXJzY29yZShjb2x1bW5OYW1lKS50b1VwcGVyQ2FzZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdlbmVyYXRlVGFibGVJZCgpIHtcbiAgICAvLyBub2luc3BlY3Rpb24gSlNOb25BU0NJSU5hbWVzXG4gICAgY29uc3QgbWV0YSA9IHRoaXMuY29uc3RydWN0b3JbJ8m1Y21wJ107XG4gICAgLy8gR2V0IGEgY29tcG9uZW50IHVuaXF1ZSBuYW1lIC0gU2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzYwMTE0NjgyL2hvdy10by1hY2Nlc3MtY29tcG9uZW50cy11bmlxdWUtZW5jYXBzdWxhdGlvbi1pZC1pbi1hbmd1bGFyLTlcbiAgICBjb25zdCBjb21wb25lbnRJZCA9IChtZXRhICYmIChtZXRhLnNlbGVjdG9ycz8uWzBdIHx8IG1ldGEuaWQpKSB8fCB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgY29uc3QgaWQgPVxuICAgICAgdGhpcy5sb2NhdGlvblxuICAgICAgICAucGF0aCh0cnVlKVxuICAgICAgICAucmVwbGFjZSgvWz9dLiokL2csICcnKVxuICAgICAgICAucmVwbGFjZSgvXFwvXFxkKy9nLCAnX2lkJykgK1xuICAgICAgJ18nICtcbiAgICAgIGNvbXBvbmVudElkO1xuICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gaWQgPSAnICsgaWQpO1xuICAgIHJldHVybiBpZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBhZGRSb3dUb1RhYmxlKFxuICAgIGluc2VydEF0PzogbnVtYmVyLFxuICAgIG9wdHM/OiB7IGZvY3VzQ29sdW1uPzogc3RyaW5nOyBlZGl0aW5nPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9XG4gICk6IFByb21pc2U8VGFibGVFbGVtZW50PFQ+IHwgdW5kZWZpbmVkPiB7XG4gICAgLy8gVHJ5IHRvIGZpbmlzaCBlZGl0ZWQgcm93IGZpcnN0XG4gICAgaWYgKCF0aGlzLmNvbmZpcm1FZGl0Q3JlYXRlKCkpIHtcbiAgICAgIGNvbnNvbGUud2FybignW3RhYmxlXSBDYW5ub3QgYWRkIG5ldyByb3csIGJlY2F1c2UgdGhlIHByZXZpb3VzIGVkaXRlZCByb3cgY2Fubm90IGJlIGNvbmZpcm1lZCcpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBlZGl0aW5nID0gdGhpcy5pbmxpbmVFZGl0aW9uICYmIG9wdHM/LmVkaXRpbmcgIT09IGZhbHNlOyAvLyB0cnVlIGJ5IGRlZmF1bHQsIGlmIGlubGluZUVkaXRpb25cblxuICAgIGNvbnN0IHJvdyA9IGF3YWl0IHRoaXMuX2RhdGFTb3VyY2UuY3JlYXRlTmV3KGluc2VydEF0LCB7IGVkaXRpbmcgfSk7XG4gICAgaWYgKCFyb3cpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBpZiAocm93LmVkaXRpbmcpIHtcbiAgICAgIC8vIFVwZGF0ZSBmb2N1c2VkIGNvbHVtblxuICAgICAgdGhpcy5mb2N1c0ZpcnN0Q29sdW1uID0gdHJ1ZTtcbiAgICAgIHRoaXMuZm9jdXNDb2x1bW4gPSBvcHRzPy5mb2N1c0NvbHVtbiB8fCB0aGlzLmZpcnN0VXNlckNvbHVtbjtcblxuICAgICAgLy8gRW1pdCBzdGFydCBlZGl0aW5nIGV2ZW50XG4gICAgICB0aGlzLmVkaXRlZFJvdyA9IHJvdztcbiAgICAgIHRoaXMub25TdGFydEVkaXRpbmdSb3cuZW1pdChyb3cpO1xuICAgIH1cblxuICAgIHRoaXMudG90YWxSb3dDb3VudCsrO1xuICAgIHRoaXMudmlzaWJsZVJvd0NvdW50Kys7XG5cbiAgICB0aGlzLm1hcmtBc0RpcnR5KHsgZW1pdEV2ZW50OiBmYWxzZSAvKm1hcmtGb3JDaGVjaygpIGlzIGNhbGxlZCBqdXN0IGFmdGVyKi8gfSk7XG5cbiAgICAvLyBFbWl0IGV2ZW50XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkgdGhpcy5tYXJrRm9yQ2hlY2soKTtcblxuICAgIHJldHVybiByb3c7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVnaXN0ZXJDZWxsVmFsdWVDaGFuZ2VzKG5hbWU6IHN0cmluZywgZm9ybVBhdGg/OiBzdHJpbmcsIGVtaXRJbml0aWFsVmFsdWU/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBmb3JtUGF0aCA9IGZvcm1QYXRoIHx8IG5hbWU7XG4gICAgZW1pdEluaXRpYWxWYWx1ZSA9IGVtaXRJbml0aWFsVmFsdWUgfHwgZmFsc2U7XG4gICAgbGV0IGRlZiA9IHRoaXMuX2NlbGxWYWx1ZUNoYW5nZXNEZWZzW25hbWVdO1xuICAgIGlmIChkZWYgJiYgKGRlZi5mb3JtUGF0aCAhPT0gZm9ybVBhdGggfHwgZGVmLmVtaXRJbml0aWFsVmFsdWUgIT09IGVtaXRJbml0aWFsVmFsdWUpKSB7XG4gICAgICB0aHJvdyBFcnJvcihcIkFscmVhZHkgcmVnaXN0ZXIgYSBjZWxsIHZhbHVlIGNoYW5nZSBmb3IgdGhpcyBuYW1lLCB3aXRoIGRpZmZlcmVudCAnZm9ybVBhdGgnIG9yICdlbWl0SW5pdGlhbFZhbHVlJy4gUGxlYXNlIHVzZSBzYW1lIGFyZ3VtZW50cy5cIik7XG4gICAgfVxuXG4gICAgLy8gTm90IGV4aXN0czogcmVnaXN0ZXIgbmV3IGRlZmluaXRpb25cbiAgICBpZiAoIWRlZikge1xuICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYFt0YWJsZV0gTmV3IGxpc3RlbmVyIHske25hbWV9fSBmb3IgdmFsdWUgY2hhbmdlcyBvbiBwYXRoICR7Zm9ybVBhdGh9YCk7XG4gICAgICBkZWYgPSB7XG4gICAgICAgIHN1YmplY3Q6IG5ldyBTdWJqZWN0PGFueT4oKSxcbiAgICAgICAgc3Vic2NyaXB0aW9uOiBudWxsLFxuICAgICAgICBmb3JtUGF0aCxcbiAgICAgICAgZW1pdEluaXRpYWxWYWx1ZSxcbiAgICAgIH07XG4gICAgICB0aGlzLl9jZWxsVmFsdWVDaGFuZ2VzRGVmc1tuYW1lXSA9IGRlZjtcblxuICAgICAgLy8gU3RhcnQgdGhlIGxpc3RlbmVyLCB3aGVuIGVkaXRpbmcgc3RhcnRzXG4gICAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMub25TdGFydEVkaXRpbmdSb3cuc3Vic2NyaWJlKChyb3cpID0+IHRoaXMuc3RhcnRDZWxsVmFsdWVDaGFuZ2VzKG5hbWUsIHJvdykpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmLnN1YmplY3Q7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0U2hvd0NvbHVtbihjb2x1bW5OYW1lOiBzdHJpbmcsIHNob3c6IGJvb2xlYW4sIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5leGNsdWRlc0NvbHVtbnMuaW5jbHVkZXMoY29sdW1uTmFtZSkgIT09IHNob3cpIHtcbiAgICAgIGlmICghc2hvdykge1xuICAgICAgICB0aGlzLmV4Y2x1ZGVzQ29sdW1ucy5wdXNoKGNvbHVtbk5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmV4Y2x1ZGVzQ29sdW1ucy5maW5kSW5kZXgoKHZhbHVlKSA9PiB2YWx1ZSA9PT0gY29sdW1uTmFtZSk7XG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB0aGlzLmV4Y2x1ZGVzQ29sdW1ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuXG4gICAgICAvLyBSZWNvbXB1dGUgZGlzcGxheSBjb2x1bW5zXG4gICAgICBpZiAodGhpcy5kaXNwbGF5ZWRDb2x1bW5zICYmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQ29sdW1ucygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTaG93Q29sdW1uKGNvbHVtbk5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5leGNsdWRlc0NvbHVtbnMuaW5jbHVkZXMoY29sdW1uTmFtZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbWFya0ZvckNoZWNrKCkge1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZGV0ZWN0Q2hhbmdlcygpIHtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBhc2tEZWxldGVDb25maXJtYXRpb24oZXZlbnQ/OiBFdmVudCwgcm93cz86IFRhYmxlRWxlbWVudDxUPltdKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMudW5kb2FibGVEZWxldGlvbikge1xuICAgICAgLy8gU3BlY2lhbCBtZXNzYWdlLCBmb3IgdW5kb2FibGUgZGVsZXRpb25cbiAgICAgIHJldHVybiBBbGVydHMuYXNrQ29uZmlybWF0aW9uKHJvd3M/Lmxlbmd0aCA9PT0gMSA/ICdDT05GSVJNLkRFTEVURV9ST1cnIDogJ0NPTkZJUk0uREVMRVRFX1JPV1MnLCB0aGlzLmFsZXJ0Q3RybCwgdGhpcy50cmFuc2xhdGUsIGV2ZW50KTtcbiAgICB9XG4gICAgLy8gSW1tZWRpYXRlIGRlbGV0aW9uIGFjdGlvblxuICAgIHJldHVybiBBbGVydHMuYXNrQWN0aW9uQ29uZmlybWF0aW9uKHRoaXMuYWxlcnRDdHJsLCB0aGlzLnRyYW5zbGF0ZSwgdHJ1ZSwgZXZlbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGFza0NhbmNlbENvbmZpcm1hdGlvbihldmVudD86IEV2ZW50LCByb3dzPzogVGFibGVFbGVtZW50PFQ+W10pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gQWxlcnRzLmFza0NvbmZpcm1hdGlvbihyb3dzPy5sZW5ndGggPT09IDEgPyAnQ09ORklSTS5DQU5DRUxfUk9XJyA6ICdDT05GSVJNLkNBTkNFTF9ST1dTJywgdGhpcy5hbGVydEN0cmwsIHRoaXMudHJhbnNsYXRlLCBldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgYXNrUmVzdG9yZUNvbmZpcm1hdGlvbihldmVudD86IEV2ZW50KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIEFsZXJ0cy5hc2tBY3Rpb25Db25maXJtYXRpb24odGhpcy5hbGVydEN0cmwsIHRoaXMudHJhbnNsYXRlLCBmYWxzZSwgZXZlbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHNob3dUb2FzdChvcHRzOiBTaG93VG9hc3RPcHRpb25zKSB7XG4gICAgaWYgKCF0aGlzLnRvYXN0Q29udHJvbGxlcikgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyB0b2FzdENvbnRyb2xsZXIgaW4gY29tcG9uZW50J3MgY29uc3RydWN0b3JcIik7XG4gICAgcmV0dXJuIFRvYXN0cy5zaG93KHRoaXMudG9hc3RDb250cm9sbGVyLCB0aGlzLnRyYW5zbGF0ZSwgb3B0cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzZXRFcnJvcihvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICB0aGlzLnNldEVycm9yKHVuZGVmaW5lZCwgb3B0cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Um93RXJyb3Iocm93PzogVGFibGVFbGVtZW50PFQ+LCBvcHRzPzogRm9ybUVycm9yVHJhbnNsYXRlT3B0aW9ucyk6IHN0cmluZyB7XG4gICAgcm93ID0gcm93IHx8IHRoaXMuZWRpdGVkUm93O1xuICAgIGlmICghcm93IHx8ICF0aGlzLmZvcm1FcnJvckFkYXB0ZXIpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4gdGhpcy5mb3JtRXJyb3JBZGFwdGVyLnRyYW5zbGF0ZUZvcm1FcnJvcnMocm93LnZhbGlkYXRvciwge1xuICAgICAgLi4udGhpcy5lcnJvclRyYW5zbGF0ZU9wdGlvbnMsXG4gICAgICAuLi5vcHRzLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldEVycm9yKHZhbHVlOiBzdHJpbmcsIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICh0aGlzLmVycm9yU3ViamVjdC52YWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuZXJyb3JTdWJqZWN0Lm5leHQodmFsdWUpO1xuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wYXJlIGRhdGEgZXF1YWxpdHkgKGRlZmF1bHQgYnkgaWQsIHVzaW5nIEVudGl0eVV0aWxzLmVxdWFscygpKVxuICAgKiBDYW4gYmUgb3ZlcnJpZGRlbiB0byBhZGQgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGNvbXBhcmVcbiAgICpcbiAgICogQHBhcmFtIGQxXG4gICAqIEBwYXJhbSBkMlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgZXF1YWxzKGQxOiBULCBkMjogVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBFbnRpdHlVdGlscy5lcXVhbHMoZDEsIGQyLCAnaWQnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXJrUm93QXNEaXJ0eShyb3c/OiBUYWJsZUVsZW1lbnQ8VD4sIG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEVWZW50PzogYm9vbGVhbiB9KSB7XG4gICAgcm93ID0gcm93IHx8IHRoaXMuZWRpdGVkUm93O1xuICAgIGlmIChyb3cpIHJvdy52YWxpZGF0b3I/Lm1hcmtBc0RpcnR5KG9wdHMpO1xuICAgIHRoaXMubWFya0FzRGlydHkob3B0cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0UGFnZVNldHRpbmdzPFQgPSBhbnk+KHByb3BlcnR5TmFtZT86IHN0cmluZyk6IFQge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmdldFBhZ2VTZXR0aW5ncyh0aGlzLnNldHRpbmdzSWQsIHByb3BlcnR5TmFtZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgc2F2ZVBhZ2VTZXR0aW5ncyh2YWx1ZTogYW55LCBwcm9wZXJ0eU5hbWU/OiBzdHJpbmcsIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGF3YWl0IHRoaXMuc2V0dGluZ3Muc2F2ZVBhZ2VTZXR0aW5nKHRoaXMuc2V0dGluZ3NJZCwgdmFsdWUsIHByb3BlcnR5TmFtZSwgb3B0cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZW1pdFJlZnJlc2godmFsdWU/OiBhbnkpIHtcbiAgICAvLyBFbWl0IG9uUmVmcmVzaCBpZiBub3QgY2xvc2VkIChjYW4gaGFwcGVuIGlmIGNvbXBvbmVudCBpcyBkZXN0cm95ZWQgdG8gZWFybHkpXG4gICAgaWYgKCEhdGhpcy5vblJlZnJlc2ggJiYgIXRoaXMub25SZWZyZXNoLmNsb3NlZCkge1xuICAgICAgdGhpcy5vblJlZnJlc2guZW1pdCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIHBlcm1hbmVudCBzZWxlY3Rpb24gbW9kZWxcbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGluaXRQZXJtYW5lbnRTZWxlY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMucGVybWFuZW50U2VsZWN0aW9uKSB0aHJvdyBuZXcgRXJyb3IoJ2luaXRQZXJtYW5lbnRTZWxlY3Rpb24oKSBhbHJlYWR5IGNhbGxlZCEnKTtcblxuICAgIHRoaXMucGVybWFuZW50U2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPFQ+KHRydWUsIFtdKTtcblxuICAgIC8vIExpc3RlbiBzb3J0IGNoYW5nZVxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICB0aGlzLm9uU29ydC5zdWJzY3JpYmUoKCkgPT4gKHRoaXMucGVybWFuZW50U2VsZWN0aW9uQ2hhbmdlZFByZXZlbnRlZCA9IHRydWUpKSAvLyBwcmV2ZW50IHNlbGVjdGlvbiBjaGFuZ2Ugb24gc29ydFxuICAgICk7XG5cbiAgICAvLyBMaXN0ZW4gZGF0YXNvdXJjZSB1cGRhdGVcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5kYXRhU291cmNlLnJvd3NTdWJqZWN0XG4gICAgICAgIC8vIHJlc3RvcmUgdGhlICdhZGRpbmcnIHNlbGVjdGlvbiAoZm9yIGV4YW1wbGUgYWZ0ZXIgYSBwYWdlIG9yIHNvcnQgY2hhbmdlKVxuICAgICAgICAuc3Vic2NyaWJlKChyb3dzKSA9PiB7XG4gICAgICAgICAgdGhpcy5wZXJtYW5lbnRTZWxlY3Rpb25DaGFuZ2VkUHJldmVudGVkID0gdHJ1ZTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcGVybWFuZW50U2VsZWN0aW9uSWRzID0gKHRoaXMucGVybWFuZW50U2VsZWN0aW9uLnNlbGVjdGVkIHx8IFtdKS5tYXAoRW50aXR5VXRpbHMuZ2V0SWQpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uKC4uLnJvd3MuZmlsdGVyKChyb3cpID0+IHBlcm1hbmVudFNlbGVjdGlvbklkcy5pbmNsdWRlcyhBcHBUYWJsZVV0aWxzLmdldEVudGl0eUlkKHJvdykpKSk7XG4gICAgICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnBlcm1hbmVudFNlbGVjdGlvbkNoYW5nZWRQcmV2ZW50ZWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIExpc3RlbiBzZWxlY3Rpb24gY2hhbmdlXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMuc2VsZWN0aW9uLmNoYW5nZWQucGlwZShmaWx0ZXIoKCkgPT4gIXRoaXMucGVybWFuZW50U2VsZWN0aW9uQ2hhbmdlZFByZXZlbnRlZCkpLnN1YnNjcmliZSgoc2VsZWN0aW9uQ2hhbmdlKSA9PiB7XG4gICAgICAgIC8vIGFkZCB0byBzZWxlY3Rpb25cbiAgICAgICAgaWYgKHNlbGVjdGlvbkNoYW5nZS5hZGRlZC5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLnBlcm1hbmVudFNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oXG4gICAgICAgICAgICAuLi4odGhpcy5wZXJtYW5lbnRTZWxlY3Rpb24uc2VsZWN0ZWQgfHwgW10pXG4gICAgICAgICAgICAgIC8vIEFkZCBuZXcgZWxlbWVudHNcbiAgICAgICAgICAgICAgLmNvbmNhdCguLi5BcHBUYWJsZVV0aWxzLmdldEVudGl0aWVzKHNlbGVjdGlvbkNoYW5nZS5hZGRlZCkuZmlsdGVyKEVudGl0eVV0aWxzLmhhc0lkKSlcbiAgICAgICAgICAgICAgLy8gQXZvaWQgZHVwbGljYXRlZCBlbnRpdGllcyAoTWFudGlzICM1NTM1MSlcbiAgICAgICAgICAgICAgLmZpbHRlcihFbnRpdHlVdGlscy5hcnJheURpc3RpbmN0RmlsdGVyRm4pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyByZW1vdmUgZnJvbSBzZWxlY3Rpb25cbiAgICAgICAgaWYgKHNlbGVjdGlvbkNoYW5nZS5yZW1vdmVkLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IHJlbW92ZWRJZHMgPSBBcHBUYWJsZVV0aWxzLmdldEVudGl0eUlkcyhzZWxlY3Rpb25DaGFuZ2UucmVtb3ZlZCk7XG4gICAgICAgICAgdGhpcy5wZXJtYW5lbnRTZWxlY3Rpb24uc2V0U2VsZWN0aW9uKFxuICAgICAgICAgICAgLi4uKHRoaXMucGVybWFuZW50U2VsZWN0aW9uLnNlbGVjdGVkIHx8IFtdKS5maWx0ZXIoKGVudGl0eSkgPT4gRW50aXR5VXRpbHMuaGFzSWQoZW50aXR5KSAmJiAhcmVtb3ZlZElkcy5pbmNsdWRlcyhlbnRpdHkuaWQpKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qIC0tIHByaXZhdGUgbWV0aG9kIC0tICovXG5cbiAgcHJpdmF0ZSBhc3luYyBsaXN0ZW5Tb3J0QW5kUGFnaW5hdGlvbkV2ZW50cygpIHtcbiAgICBpZiAoIXRoaXMudGFibGUpIHtcbiAgICAgIC8vIERFQlVHIG9ubHkgLS0gYWxlcnQgdXNlciB0aGF0IHRhYmxlIG5vdCBmb3VuZCBpbiB0ZW1wbGF0ZVxuICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgc2V0VGltZW91dChcbiAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgIXRoaXMudGFibGUgJiZcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgW3RhYmxlXSBNaXNzaW5nIDxtYXQtdGFibGU+IGluIHRoZSBIVE1MIHRlbXBsYXRlIChhZnRlciB3YWl0aW5nIDUwMG1zKSEgQ29tcG9uZW50OiAke3RoaXMuY29uc3RydWN0b3IubmFtZX1gKSxcbiAgICAgICAgICA1MDBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gTWFrZSBzdXJlIHRvIHdhaXQgdGhlIHRhYmxlXG4gICAgICBhd2FpdCB3YWl0Rm9yKCgpID0+ICEhdGhpcy50YWJsZSwgeyBzdG9wOiB0aGlzLmRlc3Ryb3lTdWJqZWN0LCBzdG9wRXJyb3I6IGZhbHNlIC8qYXZvaWQgZXJyb3Igd2hlbiBkZXN0b3J5aW5nIHRoZSB0YWJsZSovIH0pO1xuICAgIH1cblxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICBtZXJnZShcbiAgICAgICAgLy8gTGlzdGVuIHNvcnQgZXZlbnRzXG4gICAgICAgICh0aGlzLnNvcnQgJiZcbiAgICAgICAgICB0aGlzLnNvcnQuc29ydENoYW5nZS5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKCgpID0+ICF0aGlzLnNvcnQuZGlzYWJsZWQpLFxuICAgICAgICAgICAgbWVyZ2VNYXAoYXN5bmMgKCkgPT4gdGhpcy5zYXZlQmVmb3JlQWN0aW9uKCdzb3J0JykpLFxuICAgICAgICAgICAgZmlsdGVyKChyZXMpID0+IHJlcyA9PT0gdHJ1ZSksXG4gICAgICAgICAgICAvLyBTYXZlIHNvcnQgaW4gc2V0dGluZ3NcbiAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gW3RoaXMuc29ydC5hY3RpdmUsIHRoaXMuc29ydC5kaXJlY3Rpb24gfHwgJ2FzYyddLmpvaW4oJzonKTtcbiAgICAgICAgICAgICAgdGhpcy5zYXZlUGFnZVNldHRpbmdzKHZhbHVlLCBTRVRUSU5HU19TT1JURURfQ09MVU1OKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKSkgfHxcbiAgICAgICAgICBFTVBUWSxcblxuICAgICAgICAvLyBMaXN0ZW4gcGFnaW5hdG9yIGV2ZW50c1xuICAgICAgICAodGhpcy5wYWdpbmF0b3IgJiZcbiAgICAgICAgICB0aGlzLnBhZ2luYXRvci5wYWdlLnBpcGUoXG4gICAgICAgICAgICBtZXJnZU1hcCgoXykgPT4gdGhpcy5zYXZlQmVmb3JlQWN0aW9uKCdzb3J0JykpLFxuICAgICAgICAgICAgZmlsdGVyKChzYXZlZCkgPT4gc2F2ZWQgPT09IHRydWUpLFxuICAgICAgICAgICAgLy8gU2F2ZSBwYWdlIHNpemUgaW4gc2V0dGluZ3NcbiAgICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLnNhdmVQYWdlU2V0dGluZ3ModGhpcy5wYWdpbmF0b3IucGFnZVNpemUsIFNFVFRJTkdTX1BBR0VfU0laRSkpXG4gICAgICAgICAgKSkgfHxcbiAgICAgICAgICBFTVBUWVxuICAgICAgKVxuICAgICAgICAvLyBSZWZyZXNoIG9uIGFueSBzb3J0IG9yIHBhZ2luYXRvciBldmVudHNcbiAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICB0aGlzLm9uU29ydC5lbWl0KHZhbHVlKTtcbiAgICAgICAgICB0aGlzLmVtaXRSZWZyZXNoKHZhbHVlKTtcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gSWYgdGhlIHVzZXIgY2hhbmdlcyB0aGUgc29ydCBvcmRlciwgcmVzZXQgYmFjayB0byB0aGUgZmlyc3QgcGFnZS5cbiAgICBpZiAodGhpcy5zb3J0ICYmIHRoaXMucGFnaW5hdG9yKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMuc29ydC5zb3J0Q2hhbmdlLnBpcGUoZmlsdGVyKCgpID0+ICF0aGlzLnNvcnQuZGlzYWJsZWQpKS5zdWJzY3JpYmUoKCkgPT4gKHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IDApKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBlZGl0Um93QnlJZChldmVudDogRXZlbnQgfCB1bmRlZmluZWQsIGlkOiBudW1iZXIsIG9wdHM/OiB7IGZvY3VzQ29sdW1uPzogc3RyaW5nIH0pIHtcbiAgICBpZiAoaWQgPCAwKSByZXR1cm47XG4gICAgaWYgKGlkID49IHRoaXMudmlzaWJsZVJvd0NvdW50KSB7XG4gICAgICB0aGlzLmFkZFJvdyhldmVudCwgdW5kZWZpbmVkLCB7IC4uLm9wdHMsIGVkaXRpbmc6IHRydWUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJvdyA9IGF3YWl0IHRoaXMuZGF0YVNvdXJjZS5nZXRSb3coaWQpO1xuICAgICAgdGhpcy5lZGl0Um93KGV2ZW50LCByb3csIG9wdHMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0TG9hZGluZyh2YWx1ZTogYm9vbGVhbiwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKCF0aGlzLmxvYWRpbmdTdWJqZWN0LmNsb3NlZCAmJiB0aGlzLmxvYWRpbmdTdWJqZWN0LnZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KHZhbHVlKTtcblxuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlTmV3Um93KGV2ZW50OiBFdmVudCB8IHVuZGVmaW5lZCwgcm93OiBUYWJsZUVsZW1lbnQ8VD4pIHtcbiAgICAvLyBNYWtlIHN1cmUgcm93IHdpbGwgYmUgY2FuY2VsbGVkLCBhbmQgTk9UIGRlbGV0ZWRcbiAgICBpZiAocm93LmlkICE9PSAtMSkgdGhyb3cgbmV3IEVycm9yKCdSb3cgbXVzdCBoYXZlIGlkID0gLTEnKTtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgIHRoaXMuZWRpdGVkUm93ID0gdW5kZWZpbmVkOyAvLyB1bnNlbGVjdCByb3dcbiAgICB0aGlzLl9kYXRhU291cmNlLmNhbmNlbE9yRGVsZXRlKHJvdyk7XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG5cbiAgICB0aGlzLm9uQ2FuY2VsT3JEZWxldGVSb3cubmV4dChyb3cpO1xuICAgIHRoaXMudG90YWxSb3dDb3VudC0tO1xuICAgIHRoaXMudmlzaWJsZVJvd0NvdW50LS07XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZUV4aXN0aW5nUm93KGV2ZW50OiBFdmVudCB8IG51bGwsIHJvdzogVGFibGVFbGVtZW50PFQ+LCBvcHRzPzogeyBpbnRlcmFjdGl2ZT86IGJvb2xlYW4gfSkge1xuICAgIC8vIE1ha2Ugc3VyZSByb3cgd2lsbCBiZSBjYW5jZWxsZWQsIGFuZCBOT1QgZGVsZXRlZFxuICAgIGlmIChyb3cuaWQgPT09IC0xKSB0aHJvdyBuZXcgRXJyb3IoJ1JvdyBtdXN0IGhhdmUgYW4gaWQnKTtcblxuICAgIGlmIChldmVudD8uZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuIDA7IC8vIFNLaXBcbiAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcblxuICAgIHRoaXMuZGVsZXRlUm93KG51bGwsIHJvdywgb3B0cyk7XG4gIH1cblxuICBwcml2YXRlIGNhbmNlbEV4aXN0aW5nUm93KGV2ZW50OiBFdmVudCB8IHVuZGVmaW5lZCwgcm93OiBUYWJsZUVsZW1lbnQ8VD4sIG9wdHM/OiB7IGludGVyYWN0aXZlPzogYm9vbGVhbjsga2VlcEVkaXRpbmc/OiBib29sZWFuIH0pIHtcbiAgICAvLyBNYWtlIHN1cmUgcm93IHdpbGwgYmUgY2FuY2VsbGVkLCBhbmQgTk9UIGRlbGV0ZWRcbiAgICBpZiAocm93LmlkID09PSAtMSB8fCAhcm93LmVkaXRpbmcpIHRocm93IG5ldyBFcnJvcignUm93IGNhbm5vdCBiZSBjYW5jZWxpbmcsIGJ1dCBvbmx5IGRlbGV0aW5nJyk7XG5cbiAgICBjb25zdCBjb25maXJtZWQgPSAhb3B0cyB8fCBvcHRzLmludGVyYWN0aXZlICE9PSBmYWxzZTtcblxuICAgIC8vIEFzayB1c2VyIGNvbmZpcm1hdGlvbiwgaWYgY2FuY2VsXG4gICAgaWYgKCFjb25maXJtZWQgJiYgcm93LmRpcnR5ICYmICh0aGlzLmNvbmZpcm1CZWZvcmVDYW5jZWwgfHwgdGhpcy5vbkJlZm9yZUNhbmNlbFJvd3Mub2JzZXJ2ZWQpKSB7XG4gICAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLmNhbkNhbmNlbFJvd3MoW3Jvd10sIG9wdHMpLnRoZW4oKGNvbmZpcm0pID0+IHtcbiAgICAgICAgLy8gSWYgY29uZmlybWVkLCBsb29wXG4gICAgICAgIGlmIChjb25maXJtKSB0aGlzLmNhbmNlbEV4aXN0aW5nUm93KGV2ZW50LCByb3csIHsgaW50ZXJhY3RpdmU6IGZhbHNlIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qga2VlcEVkaXRpbmcgPSByb3cuZWRpdGluZyAmJiAoIW9wdHMgfHwgb3B0cy5rZWVwRWRpdGluZyAhPT0gZmFsc2UpO1xuICAgIHRoaXMuZWRpdGVkUm93ID0gdW5kZWZpbmVkOyAvLyB1bnNlbGVjdCByb3dcbiAgICB0aGlzLl9kYXRhU291cmNlLmNhbmNlbE9yRGVsZXRlKHJvdyk7XG4gICAgdGhpcy5vbkNhbmNlbE9yRGVsZXRlUm93Lm5leHQocm93KTtcblxuICAgIC8vIE1hcmsgcm93IGFzIHByaXN0aW5lXG4gICAgdGhpcy5jaGVja0lmUm93UHJpc3RpbmUocm93KTtcblxuICAgIC8vIFJlc3RvcmUgZWRpdGluZyBzdGF0ZVxuICAgIGlmIChrZWVwRWRpdGluZykge1xuICAgICAgdGhpcy5lZGl0Um93KHVuZGVmaW5lZCwgcm93KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNoZWNrSWZSb3dQcmlzdGluZShyb3c6IFRhYmxlRWxlbWVudDxUPiwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbjsgb25seVNlbGY/OiBib29sZWFuIH0pIHtcbiAgICAvLyBNYXJrIHJvdyBhcyBwcmlzdGluZVxuICAgIGNvbnN0IG1hcmtSb3dBc1ByaXN0aW5lID0gdGhpcy5kYXRhU291cmNlPy5jb25maWcucmVzdG9yZU9yaWdpbmFsRGF0YU9uQ2FuY2VsID09PSB0cnVlO1xuICAgIGlmIChtYXJrUm93QXNQcmlzdGluZSkge1xuICAgICAgcm93LnZhbGlkYXRvcj8ubWFya0FzUHJpc3RpbmUoKTtcblxuICAgICAgLy8gQ2hlY2sgaWYgdGFibGUgaXMgbm93IHByaXN0aW5lXG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5vbmx5U2VsZiAhPT0gdHJ1ZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmNoZWNrSWZQcmlzdGluZShvcHRzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNoZWNrSWZQcmlzdGluZShvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMuZGlydHkpIHJldHVybjsgLy8gQWxyZWFkeSBwcmlzdGluZVxuXG4gICAgY29uc3Qgcm93cyA9IHRoaXMuX2RhdGFTb3VyY2UuZ2V0Um93cygpO1xuICAgIGNvbnN0IHByaXN0aW5lID0gKHJvd3MgfHwgW10pLmZpbmRJbmRleCgocm93KSA9PiByb3cuZGlydHkpID09PSAtMTtcbiAgICBpZiAocHJpc3RpbmUpIHRoaXMubWFya0FzUHJpc3RpbmUob3B0cyk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5RmlsdGVyKGZpbHRlcjogRiwgb3B0czogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3RhYmxlXSBBcHBseWluZyBmaWx0ZXInLCBmaWx0ZXIpO1xuICAgIHRoaXMuX2ZpbHRlciA9IGZpbHRlcjtcbiAgICBpZiAob3B0cyAmJiBvcHRzLmVtaXRFdmVudCkge1xuICAgICAgaWYgKHRoaXMucGFnaW5hdG9yICYmIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA+IDApIHtcbiAgICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gMDtcbiAgICAgIH1cbiAgICAgIHRoaXMuZW1pdFJlZnJlc2goKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkRhdGFTb3VyY2VMb2FkaW5nKGRhdGFTb3VyY2U6IEVudGl0aWVzVGFibGVEYXRhU291cmNlPFQsIEYsIElEPikge1xuICAgIGlmICghZGF0YVNvdXJjZSkgdGhyb3cgbmV3IEVycm9yKCdbdGFibGVdIGRhdGFTb3VyY2Ugbm90IHNldCAhJyk7XG5cbiAgICAvLyBDbGVhbmluZyBwcmV2aW91cyBzdWJzY3JpcHRpb24gb24gZGF0YXNvdXJjZVxuICAgIGlmIChpc05vdE5pbCh0aGlzLl9kYXRhU291cmNlTG9hZGluZ1N1YnNjcmlwdGlvbikpIHtcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbdGFibGVdIE1hbnkgY2FsbCB0byBsaXN0ZW5EYXRhc291cmNlKCk6IENsZWFuaW5nIHByZXZpb3VzIHN1YnNjcmlwdGlvbnMuLi4nKTtcbiAgICAgIHRoaXMuX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLnVucmVnaXN0ZXJTdWJzY3JpcHRpb24odGhpcy5fZGF0YVNvdXJjZUxvYWRpbmdTdWJzY3JpcHRpb24pO1xuICAgIH1cblxuICAgIC8vIFByb3BhZ2UgbG9hZGluZyB0byB0YWJsZVxuICAgIHRoaXMuX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uID0gdGhpcy5fZGF0YVNvdXJjZS5sb2FkaW5nU3ViamVjdFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcihpc05vdE5pbCksIC8vIGZpbHRlciBvdXQgJ3VuZGVmaW5lZCdcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcblxuICAgICAgICAvLyBJZiBjaGFuZ2VkIHRvIFRydWU6IHByb3BhZ2F0ZSBhcyBzb29uIGFzIHBvc3NpYmxlXG4gICAgICAgIHRhcCgobG9hZGluZykgPT4gbG9hZGluZyAmJiB0aGlzLnNldExvYWRpbmcodHJ1ZSkpLFxuXG4gICAgICAgIC8vIElmIGNoYW5nZWQgdG8gRmFsc2U6IHdhaXQgMjUwbXMgYmVmb3JlIHByb3BhZ2F0ZSAodG8gbWFrZSBzdXJlIHRoZSBzcGlubmVyIGhhcyBiZWVuIGRpc3BsYXllZClcbiAgICAgICAgZGVib3VuY2VUaW1lKDI1MCksXG4gICAgICAgIHRhcCgobG9hZGluZykgPT4gIWxvYWRpbmcgJiYgdGhpcy5zZXRMb2FkaW5nKGZhbHNlKSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMuX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRDZWxsVmFsdWVDaGFuZ2VzKG5hbWU6IHN0cmluZywgcm93OiBUYWJsZUVsZW1lbnQ8VD4pIHtcbiAgICBjb25zdCBkZWYgPSB0aGlzLl9jZWxsVmFsdWVDaGFuZ2VzRGVmc1tuYW1lXTtcbiAgICBpZiAoIWRlZikge1xuICAgICAgY29uc29sZS53YXJuKGBbdGFibGVdIExpc3RlbmVyIHdpdGggbmFtZSB7JHtuYW1lfSBub3QgcmVnaXN0ZXJlZCEgUGxlYXNlIGNhbGwgcmVnaXN0ZXJDZWxsVmFsdWVDaGFuZ2VzKCkgYmVmb3JlYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFN0b3AgcHJldmlvdXMgc3Vic2NyaXB0aW9uXG4gICAgaWYgKGRlZi5zdWJzY3JpcHRpb24pIHtcbiAgICAgIGRlZi5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIGRlZi5zdWJzY3JpcHRpb24gPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW3RhYmxlXSBTdGFydCB2YWx1ZXMgY2hhbmdlcyBvbiByb3cgcGF0aCB7JHtkZWYuZm9ybVBhdGh9fWApO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRyb2wgPSBnZXRDb250cm9sRnJvbVBhdGgocm93LnZhbGlkYXRvciwgZGVmLmZvcm1QYXRoKTtcblxuICAgIC8vIEVtaXQgdGhlIGFjdHVhbCB2YWx1ZVxuICAgIGlmIChkZWYuZW1pdEluaXRpYWxWYWx1ZSAhPT0gZmFsc2UpIHtcbiAgICAgIGRlZi5zdWJqZWN0Lm5leHQoY29udHJvbD8udmFsdWUgPz8gbnVsbCk7XG4gICAgfVxuXG4gICAgaWYgKCFjb250cm9sKSB7XG4gICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS53YXJuKGBbdGFibGVdIENvdWxkIG5vdCBsaXN0ZW4gY2VsbCBjaGFuZ2VzOiBubyB2YWxpZGF0b3Igb3IgaW52YWxpZCBmb3JtIHBhdGggeyR7ZGVmLmZvcm1QYXRofX1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTGlzdGVuIHZhbHVlIGNoYW5nZXMsIGFuZCByZWRpcmVjdCB0byBldmVudCBlbWl0dGVyXG4gICAgICBkZWYuc3Vic2NyaXB0aW9uID0gY29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgLy8gZG9uJ3QgZW1pdCBpZiBjb250cm9sIGlzIGRpc2FibGVkXG4gICAgICAgICAgZmlsdGVyKCgpID0+IGNvbnRyb2wuZW5hYmxlZClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gZGVmLnN1YmplY3QubmV4dCh2YWx1ZSkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RvcENlbGxWYWx1ZUNoYW5nZXMobmFtZTogc3RyaW5nLCBkZXN0cm95PzogYm9vbGVhbikge1xuICAgIGNvbnN0IGRlZiA9IHRoaXMuX2NlbGxWYWx1ZUNoYW5nZXNEZWZzW25hbWVdO1xuICAgIGlmICghZGVmKSByZXR1cm47XG4gICAgaWYgKGRlZi5zdWJzY3JpcHRpb24pIHtcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbdGFibGVdIFN0b3AgdmFsdWUgY2hhbmdlcyBvbiByb3cgcGF0aCB7JyArIGRlZi5mb3JtUGF0aCArICd9Jyk7XG4gICAgICBkZWYuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICBkZWYuc3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKGRlc3Ryb3kgJiYgZGVmLnN1YmplY3QpIHtcbiAgICAgIGRlZi5zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICBkZWYuc3ViamVjdC51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxufVxuIl19
|