ets-fe-ng-sdk 17.0.127 → 17.0.129
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/assets/scss/styles.scss +14 -0
- package/esm2022/lib/Services/utility.service.mjs +2 -1
- package/esm2022/lib/Shared/components/export-table/export-table.component.mjs +2 -2
- package/esm2022/lib/Shared/components/fields-to-display/fields-to-display.component.mjs +7 -4
- package/esm2022/lib/Shared/components/table-https/table-https.component.mjs +3 -3
- package/esm2022/lib/Shared/components/text-case-2/text-case-2.component.mjs +9 -6
- package/esm2022/lib/Shared/components/text-case-2/text-case.service.mjs +17 -0
- package/esm2022/lib/Shared/models/index.model.mjs +1 -1
- package/fesm2022/ets-fe-ng-sdk.mjs +245 -228
- package/fesm2022/ets-fe-ng-sdk.mjs.map +1 -1
- package/lib/Services/utility.service.d.ts +1 -0
- package/lib/Shared/components/btn/btn.component.d.ts +1 -1
- package/lib/Shared/components/info-dialog/info-dialog.component.d.ts +1 -1
- package/lib/Shared/components/table-https/table-https.component.d.ts +1 -1
- package/lib/Shared/components/text-case-2/text-case-2.component.d.ts +3 -1
- package/lib/Shared/components/text-case-2/text-case.service.d.ts +11 -0
- package/lib/Shared/models/index.model.d.ts +1 -1
- package/package.json +1 -1
package/assets/scss/styles.scss
CHANGED
|
@@ -97,3 +97,17 @@
|
|
|
97
97
|
router-outlet + * {
|
|
98
98
|
height: 100%;
|
|
99
99
|
}
|
|
100
|
+
|
|
101
|
+
.btn-raised {
|
|
102
|
+
transition:
|
|
103
|
+
box-shadow 0.4s cubic-bezier(0.25, 0.8, 0.25, 1),
|
|
104
|
+
transform 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
|
|
105
|
+
box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.btn-raised:not([disabled]):active,
|
|
109
|
+
.btn-raised:not([disabled]):focus,
|
|
110
|
+
.btn-raised:not([disabled]):hover {
|
|
111
|
+
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.4);
|
|
112
|
+
transform: translate3d(0, -10px, 0);
|
|
113
|
+
}
|
|
@@ -427,6 +427,7 @@ export class UtilityService {
|
|
|
427
427
|
this.logForm = (form) => {
|
|
428
428
|
console.log('FORM', form, 'VALUES', form.value);
|
|
429
429
|
};
|
|
430
|
+
this.trim = (length = 15) => (text) => text && text.length > length ? text.slice(0, length) : text;
|
|
430
431
|
this.isDateValue = (v) => (v ? v[4] == '-' && v[7] == '-' : false);
|
|
431
432
|
this.isDatTimeValue = (v) => (v ? v.includes('T') && v[4] == '-' && v[7] == '-' : false);
|
|
432
433
|
this.yesNoCellFormatterColoured = (v) => `<span class='${v ? 'successCell' : 'inertCell'}'>${v ? 'Yes' : v == false ? 'No' : '-'}</span>`;
|
|
@@ -779,4 +780,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImpor
|
|
|
779
780
|
type: Injectable,
|
|
780
781
|
args: [{ providedIn: 'root' }]
|
|
781
782
|
}], ctorParameters: () => [] });
|
|
782
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0eS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXRzLWZlLW5nLXNkay9zcmMvbGliL1NlcnZpY2VzL3V0aWxpdHkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9GLE9BQU8sRUFBVSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsU0FBUyxJQUFJLFNBQVMsRUFBc0MsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RyxPQUFPLEVBQUUsV0FBVyxJQUFJLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFvQixjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsMkJBQTJCLElBQUksR0FBRyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckUsT0FBTyxHQUFHLE1BQU0sa0JBQWtCLENBQUM7QUFDbkMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLElBQUksTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbkUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFzQyxNQUFNLDhCQUE4QixDQUFDO0FBQ25HLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUE4QixXQUFXLEVBQUUsU0FBUyxFQUFvQixNQUFNLGdCQUFnQixDQUFDO0FBQ3RHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUNsRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ3ZILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdkQsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDOztBQUs3QixNQUFNLE9BQU8sY0FBYztJQW1DekI7UUFqQ0EsZUFBVSxHQUFHLEdBQUcsQ0FBQztRQUNqQixvQkFBZSxHQUFHLGVBQWUsQ0FBQztRQUNsQyxXQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ2hCLGdCQUFXLEdBQWlCLFdBQWtCLENBQUM7UUFDL0MsU0FBSSxHQUFHLGFBQWEsQ0FBQztRQUdyQixtQkFBYyxHQUFHLE1BQU0sQ0FBVSxTQUFTLENBQUMsQ0FBQztRQUM1QyxvQkFBZSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMzRCxpQkFBWSxHQUFHLGVBQWUsQ0FBQztRQUMvQixxQkFBZ0IsR0FBRyxjQUFjLENBQUM7UUFDbEMseUJBQW9CLEdBQUcsc0JBQXNCLENBQUM7UUFDckMsa0JBQWEsR0FBRyxNQUFNLENBQUM7UUFDdkIsY0FBUyxHQUFHLFVBQVUsQ0FBQztRQUNoQzs7V0FFRztRQUNILHVCQUFrQixHQUFHLElBQUksYUFBYSxFQUFXLENBQUM7UUFDM0MsV0FBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzQixhQUFRLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQy9CLFdBQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEIsV0FBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QixhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLGlCQUFZLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLE9BQUUsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMvQixpQkFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNwQyxrQkFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN0QyxrQkFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN0QyxVQUFLLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVCLGVBQVUsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN4QyxhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVDLGVBQVUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFrQnhDLFNBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBeUJsQyxTQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBSTlDOzs7Ozs7O1dBT0c7UUFDSCxtQkFBYyxHQUFHLENBQ2YsT0FBZSxFQUNmLE1BT0MsRUFDRCxFQUFFO1lBQ0YsT0FBTyxDQUFDLE9BQU87Z0JBQ2IsQ0FBQyxDQUFDLElBQUk7Z0JBQ04sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHO29CQUNsQixDQUFDLENBQUMsT0FBTztvQkFDVCxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxFQUFFLElBQUksSUFBSSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLEVBQUUsSUFBSSxJQUFJLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDM0csQ0FBQyxDQUFDO1FBMkJGOzs7Ozs7OztXQVFHO1FBQ0gsd0JBQW1CLEdBQUcsQ0FDcEIsS0FBYSxFQUNiLEVBQW9CLEVBQ3BCLGFBQTBELEVBQzFELFVBQTRCLEVBQzVCLFdBR0MsRUFDRCxFQUFFO1lBQ0YsT0FBTyxJQUFJLE9BQU8sQ0FBTSxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUNsQyxNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3BELFlBQVk7Z0JBQ1osSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFO29CQUNqQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO29CQUMvRCxVQUFVLEVBQUUsQ0FBQztpQkFDZDtxQkFBTSxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUM7b0JBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztxQkFDN0YsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDO29CQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBRXpELElBQUksRUFBRSxJQUFJLGFBQWEsRUFBRTtvQkFDdkIsTUFBTSxHQUFHLEdBQUcsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUM5QixJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRTt3QkFDcEIsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFzQixDQUFDLENBQUMsQ0FBQztxQkFDaEQ7eUJBQU07d0JBQ0wsT0FBTyxDQUFDLEdBQVUsQ0FBQyxDQUFDO3FCQUNyQjtpQkFDRjtxQkFBTTtvQkFDTCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ2Y7WUFDSCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDWixXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixPQUFPLENBQUMsQ0FBQztZQUNYLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBRUY7Ozs7Ozs7V0FPRztRQUNILG9CQUFlLEdBQUcsS0FBSyxFQUNyQixLQUFhLEVBQ2IsR0FBVSxFQUNWLGFBQXNELEVBQ3RELFVBQTRCLEVBQzVCLEVBQWlCLEVBQ2pCLEVBQUU7WUFDRixNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzFCLFlBQVk7WUFFWixJQUFJLEVBQUUsSUFBSSxhQUFhLEVBQUU7Z0JBQ3ZCLE1BQU0sR0FBRyxHQUFHLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDOUIsSUFBSSxPQUFPLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxVQUFVO29CQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7O29CQUM3RixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7YUFDaEM7WUFFRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO2dCQUNuQixHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDckIsVUFBVSxFQUFFLENBQUM7YUFDZDtpQkFBTSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQztnQkFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUM7UUFDRjs7Ozs7V0FLRztRQUNILHVCQUFrQixHQUFHLENBQUksR0FBUSxFQUFFLE9BQTJELEVBQUUsT0FBa0IsRUFBRSxFQUFFO1lBQ3BILFdBQVc7WUFDWCxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUU7Z0JBQ2YsSUFBSSxPQUFPLENBQUMsTUFBTTtvQkFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3BDLEtBQUssTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFO29CQUN0QixPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7aUJBQ3hDO2FBQ0Y7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNO29CQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQzthQUM3RDtRQUNILENBQUMsQ0FBQztRQUNNLGNBQVMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQzNCLE9BQU8sT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVLENBQUM7UUFDckUsQ0FBQyxDQUFDO1FBQ0YsWUFBTyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDakIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyxlQUFlLElBQUksQ0FBQyxPQUFPLElBQUksS0FBSyxVQUFVLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDN0csQ0FBQyxDQUFDO1FBRUYsaUJBQVksR0FBRyxDQUFJLElBQUksRUFBRSxFQUFFO1lBQ3pCLDJFQUEyRTtZQUMzRSxpRUFBaUU7WUFDakUsb0VBQW9FO1lBQ3BFLE9BQU8sT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0RCxPQUFPLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssVUFBVSxDQUFDO1FBQzFFLENBQUMsQ0FBQztRQUNGLGlCQUFZLEdBQUcsQ0FBSSxHQUFtQyxFQUFFLEVBQUU7WUFDeEQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNyQixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBaUIsQ0FBQyxDQUFDO2FBQzNDO2lCQUFNLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDakMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFvQixDQUFDLENBQUMsQ0FBQzthQUM3RDtpQkFBTTtnQkFDTCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBUSxDQUFDLENBQUM7YUFDbEM7UUFDSCxDQUFDLENBQUM7UUFFRjs7O1dBR0c7UUFDSCx3QkFBbUIsR0FBRyxDQUFJLEdBQWlDLEVBQUUsRUFBRTtZQUM3RCxPQUFPLElBQUksVUFBVSxDQUFNLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2pDLE1BQU0sR0FBRyxHQUFRLEVBQUUsQ0FBQztnQkFDcEIsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDO2dCQUN0QixLQUFLLENBQ0gsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUNSLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDSixDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FDWCxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQkFDZixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNqQixPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDaEIsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ1IsYUFBYSxFQUFFLENBQUM7Z0JBQ2xCLENBQUMsQ0FBQyxDQUNILENBQ0osQ0FDRixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUNoQixHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ2YsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDZCxJQUFJLGFBQWEsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFO3dCQUN0RCxXQUFXO3dCQUNYLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztxQkFDaEI7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztRQWdCRixpQkFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO1FBQ3pDLGVBQVUsR0FBRyxDQUFDLEdBQUcsRUFBRSxlQUEwQixFQUFFLEVBQUU7WUFDL0MsSUFBSSxDQUFDLEdBQUc7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDdEIsS0FBSyxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUU7Z0JBQ3JCLElBQUksZUFBZSxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUM7b0JBQUUsU0FBUztnQkFDN0MsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFO29CQUNsRCxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUM7d0JBQUUsT0FBTyxLQUFLLENBQUM7aUJBQzVCO2FBQ0Y7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQztRQUNGLFlBQU8sR0FBRyxDQUFVLElBQWMsRUFBRSxNQUFNLEdBQUcsRUFBRSxFQUFFLEVBQUU7WUFDakQsTUFBTSxHQUFHLEdBQVUsRUFBRSxDQUFDO1lBQ3RCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQy9CLElBQUksQ0FBQyxHQUFRLEVBQUUsQ0FBQztnQkFDaEIsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUU7b0JBQ3RCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7aUJBQ3pCO2dCQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDYjtZQUNELE9BQU8sR0FBVSxDQUFDO1FBQ3BCLENBQUMsQ0FBQztRQUNGLFlBQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFPNUQsaUJBQVksR0FBRyxDQUFDLElBQVMsRUFBRSxNQUF1QixFQUFFLE9BQW1CLEVBQUUsU0FBZSxFQUFFLEVBQUUsQ0FDMUYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDO2FBQy9CLFdBQVcsRUFBRTthQUNiLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2YsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxTQUFTLEVBQUU7Z0JBQy9CLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNaO2lCQUFNLElBQUksU0FBUyxFQUFFO2dCQUNwQixTQUFTLEVBQUUsQ0FBQzthQUNiO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDUCxvQkFBZSxHQUFHLENBQUMsSUFBUyxFQUFFLE1BQXVCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN6RixvQkFBZSxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQVUsRUFBRSxVQUFtQixFQUFFLFdBQW1CLE1BQU0sRUFBRSxFQUFFO1lBQ3JGLElBQUksQ0FBQyxJQUFJO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQ3ZCLE1BQU0sR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUMsR0FBRztnQkFBRSxPQUFPLElBQUksQ0FBQzs7Z0JBQ2pCLE9BQU8sR0FBRyxJQUFJLE1BQU0sR0FBRyxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsVUFBVSxJQUFJLGFBQWEsQ0FBQyxFQUFFLENBQUM7UUFDNUYsQ0FBQyxDQUFDO1FBRUYsc0JBQWlCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyx5QkFBeUIsQ0FBQztRQUNoRSxzQkFBaUIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDO1FBQ3hELDZCQUF3QixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsd0JBQXdCLENBQUM7UUFFdEUsNEJBQXVCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQztRQUVwRSxPQUFFLEdBQUcsQ0FBQyxLQUFhLEVBQUUsS0FBd0IsRUFBRSxFQUFFO1lBQy9DLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDO1FBQ0Y7Ozs7V0FJRztRQUNILFFBQUcsR0FBRyxDQUFDLEtBQWEsRUFBRSxLQUF3QixFQUFFLEVBQUU7WUFDaEQsSUFBSSxDQUFrQixJQUFJLENBQUMsV0FBWSxDQUFDLGNBQWM7Z0JBQUUsUUFBUSxDQUFDO1lBQ2pFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQzVCLFVBQVUsRUFBbUIsSUFBSSxDQUFDLFdBQVksQ0FBQyxjQUFjO2dCQUM3RCxHQUFHLEtBQUs7YUFDVCxDQUFDLENBQUM7WUFDSCxZQUFZO1FBQ2QsQ0FBQyxDQUFDO1FBY0YsZ0JBQVcsR0FBRyxDQUFDLE1BQXVCLEVBQUUsUUFBUSxHQUFHLEdBQUcsRUFBRSxFQUFFO1lBQ3hELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLFFBQVEsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUM5RCxDQUFDLENBQUM7UUFLRix3QkFBbUIsR0FBRyxDQUFDLE9BQWUsRUFBRSxFQUFFO1lBQ3hDLElBQUksQ0FBQyxPQUFPO2dCQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO1lBQzdELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFDM0MsY0FBYyxHQUFHLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxFQUNwQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUMzQyxJQUFJLEdBQUcsY0FBYyxHQUFHLEVBQUUsQ0FBQztZQUM3QixPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUMvQixDQUFDLENBQUM7UUFDRix3QkFBbUIsR0FBRyxDQUFDLE9BQWUsRUFBRSxFQUFFO1lBQ3hDLElBQUksQ0FBQyxPQUFPO2dCQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO1lBQzdELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFDMUMsY0FBYyxHQUFHLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxFQUNwQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUM1QyxJQUFJLEdBQUcsY0FBYyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbEMsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDL0IsQ0FBQyxDQUFDO1FBQ0YsMkJBQXNCLEdBQUcsQ0FBQyxPQUFlLEVBQUUsRUFBRTtZQUMzQyxJQUFJLENBQUMsT0FBTztnQkFBRSxPQUFPLElBQUksQ0FBQztZQUMxQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkQsQ0FBQyxDQUFDO1FBQ0YsNEJBQXVCLEdBQUcsQ0FBQyxPQUFlLEVBQUUsRUFBRTtZQUM1QyxJQUFJLENBQUMsT0FBTztnQkFBRSxPQUFPLElBQUksQ0FBQztZQUMxQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLFFBQVEsR0FBRyxDQUFDLEtBQUssT0FBTyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEUsQ0FBQyxDQUFDO1FBQ0YsNEJBQXVCLEdBQUcsQ0FBQyxHQUFXLEVBQUUsR0FBVyxFQUFFLElBQVksRUFBRSxFQUFFO1lBQ25FLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJO2dCQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ3JDLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNqQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7WUFDN0IsT0FBTyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDO1FBQ0YsMEJBQXFCLEdBQUcsQ0FBQyxRQUEyQixFQUFFLE9BQWdCLEVBQUUsRUFBRTtZQUN4RSxJQUFJLE9BQU87Z0JBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQzs7Z0JBQ3JDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDO1FBQ0Ysa0JBQWEsR0FBRyxDQUFDLFFBQTJCLEVBQUUsRUFBRTtZQUM5QyxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsRUFBRTtnQkFDOUIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2FBQ3hDO1FBQ0gsQ0FBQyxDQUFDO1FBQ0YsaUJBQVksR0FBRyxDQUFDLFFBQTJCLEVBQUUsRUFBRTtZQUM3QyxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsRUFBRTtnQkFDOUIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2FBQ3ZDO1FBQ0gsQ0FBQyxDQUFDO1FBQ0Ysd0JBQW1CLEdBQUcsQ0FBQyxHQUFXLEVBQUUsR0FBVyxFQUFFLElBQVksRUFBRSxFQUFFO1lBQy9ELElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJO2dCQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNqQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7WUFDN0IsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLENBQUMsQ0FBQztRQUNGLHFCQUFnQixHQUFHLENBQUMsR0FBVyxFQUFFLElBQVksRUFBRSxFQUFFO1lBQy9DLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQy9CLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztRQUNoQyxDQUFDLENBQUM7UUFDRixzQkFBaUIsR0FBRyxDQUFDLE9BQWUsRUFBRSxFQUFFO1lBQ3RDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsT0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNsRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQztRQWNGLGdCQUFXLEdBQUcsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFMUM7OztXQUdHO1FBQ0gsd0JBQW1CLEdBQUcsR0FBRyxFQUFFO1lBQ3pCLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDeEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hELE9BQU8sR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUNoRyxDQUFDLENBQUM7UUFDRiw2RUFBNkU7UUFDN0UsaUJBQVksR0FBRyxHQUFHLEVBQUU7WUFDbEIsT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUM7UUFDRixlQUFVLEdBQUcsQ0FBQyxJQUFTLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxJQUFJO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQ3ZCLE1BQU0sQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pCLElBQUksTUFBTSxJQUFJLENBQUMsRUFBRTtnQkFDZixPQUFPLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQzthQUN6QjtpQkFBTSxJQUFJLE1BQU0sSUFBSSxDQUFDLEVBQUU7Z0JBQ3RCLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2FBQ3hEO2lCQUFNLElBQUksTUFBTSxJQUFJLENBQUMsRUFBRTtnQkFDdEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsMkJBQTJCLENBQUMsQ0FBQzthQUNuRTtpQkFBTSxJQUFJLE1BQU0sSUFBSSxDQUFDLEVBQUU7Z0JBQ3RCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQ3hEO2lCQUFNO2dCQUNMLE9BQU8sRUFBRSxDQUFDO2FBQ1g7UUFDSCxDQUFDLENBQUM7UUFFRixxQkFBZ0IsR0FBRyxDQUFDLGdCQUF3QixJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUU7WUFDdEUsSUFBSSxDQUFDLGFBQWE7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDaEMsT0FBTyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDdkMsT0FBTyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDeEUsQ0FBQyxDQUFDO1FBRUYseUJBQW9CLEdBQUcsQ0FBQyxhQUFxQixFQUFFLEVBQUU7WUFDL0MsSUFBSSxDQUFDLGFBQWE7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDaEMsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqRyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUN0RCxDQUFDLENBQUM7UUFFRixlQUFVLEdBQUcsQ0FBQyxJQUFVLEVBQUUsRUFBRTtZQUMxQixNQUFNLE9BQU8sR0FBVSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFELE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQixDQUFDLENBQUM7UUFDRixpQkFBWSxHQUFHLENBQUMsU0FBMEIsRUFBRSxFQUFFO1lBQzVDLFdBQVc7WUFDWCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQztRQUNGLGtCQUFhLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRTtZQUMvQixJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNULE9BQU8sR0FBRyxDQUFDO2FBQ1o7WUFDRCxJQUFJLEVBQVUsRUFDWixFQUFVLEVBQ1YsRUFBVSxFQUNWLEdBQVcsRUFDWCxHQUFHLEdBQUcsR0FBRyxFQUNULEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDWCxJQUFJLElBQUksR0FBRyxHQUFHLEVBQUU7Z0JBQ2QsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO2FBQzdCO1lBQ0QsSUFBSSxJQUFJLEdBQUcsR0FBRyxFQUFFO2dCQUNkLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO2FBQ3JDO1lBQ0QsRUFBRSxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztZQUN4QixHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDcEgsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUM7UUFDRixvQkFBZSxHQUFHLENBQUMsTUFBYyxFQUFFLEVBQUU7WUFDbkMsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDWCxPQUFPLEdBQUcsQ0FBQzthQUNaO1lBQ0QsSUFBSSxFQUFVLEVBQ1osRUFBVSxFQUNWLEdBQVcsRUFDWCxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBQ1gsSUFBSSxNQUFNLEdBQUcsR0FBRyxFQUFFO2dCQUNoQixFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUM7YUFDL0I7WUFDRCxFQUFFLEdBQUcsTUFBTSxHQUFHLEdBQUcsQ0FBQztZQUNsQixHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDdkYsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUM7UUFDRixlQUFVLEdBQUcsQ0FBQyxHQUFXLEVBQUUsR0FBVyxFQUFFLE1BQWUsRUFBRSxFQUFFO1lBQ3pELE1BQU0sR0FBRyxNQUFNLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztZQUM3QixPQUFPLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDO1FBQ0Ysd0JBQW1CLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRTtZQUNwQyxPQUFPLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ3pCLENBQUMsQ0FBQztRQUNGLFlBQU8sR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ2pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQVksQ0FBQyxDQUFDO1FBQ3pELENBQUMsQ0FBQztRQW9JRixnQkFBVyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5RCxtQkFBYyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXBGLCtCQUEwQixHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFdBQVcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztRQUNySSx1QkFBa0IsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEQsd0JBQW1CLEdBQUcsQ0FBQyxNQUFjLEVBQUUsRUFBRSxDQUN2QyxnQkFBZ0IsTUFBTSxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFdBQVcsS0FBSyxNQUFNLElBQUksR0FBRyxTQUFTLENBQUM7UUFFdkksd0JBQW1CLEdBQ2pCLENBQVUsS0FBcUUsRUFBRSxFQUFFLENBQ25GLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDSixnQkFDRSxDQUFDLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxXQUN0SCxLQUFLLENBQUMsU0FBUyxDQUFDO1FBcUJwQixjQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQztRQUU1QyxvQkFBZSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUM7UUFFeEQsWUFBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDO1FBQzFCLFdBQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUV4Qiw4QkFBeUIsR0FBRyxDQUFDLEdBQUcsSUFBb0IsRUFBRSxFQUFFO1lBQ3RELElBQUksS0FBSyxHQUFtQixJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sS0FBSyxHQUFHLEdBQUcsRUFBRTtnQkFDakIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7Z0JBQ3RDLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDYixDQUFDLENBQUM7WUFDRixNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBb0IsRUFBRSxFQUFFO2dCQUN2QyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDdEIsQ0FBQyxDQUFDO1lBRUYsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUM7UUFFRix1QkFBa0IsR0FBRyxHQUFHLEVBQUU7WUFDeEIsSUFBSSxNQUFNLEdBQTJCLEVBQUUsQ0FBQztZQUN4QyxNQUFNLEtBQUssR0FBRyxHQUFHLEVBQUU7Z0JBQ2pCLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDZCxDQUFDLENBQUM7WUFDRixNQUFNLElBQUksR0FBRyxHQUFHLEVBQUU7Z0JBQ2hCLE1BQU0sR0FBRyxTQUFTLENBQUM7WUFDckIsQ0FBQyxDQUFDO1lBQ0YsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFXLEVBQUUsSUFBUyxFQUFFLEVBQUU7Z0JBQ3RDLElBQUksQ0FBQyxNQUFNO29CQUFFLE1BQU0sR0FBRyxFQUFFLENBQUM7Z0JBQ3pCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDckIsQ0FBQyxDQUFDO1lBQ0YsTUFBTSxHQUFHLEdBQUcsQ0FBSSxHQUFXLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBTSxDQUFDO1lBRW5ELE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNwQyxDQUFDLENBQUM7UUFFRixvQkFBZSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFO2dCQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDL0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQzthQUM5QjtZQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUM7UUFDRixvQkFBZSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQWUsRUFBRSxFQUFFO1lBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7Z0JBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbEgsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDakQsQ0FBQyxDQUFDO1FBQ0Ysc0JBQWlCLEdBQUcsQ0FBSSxJQUFPLEVBQUUsRUFBRTtZQUNqQyxNQUFNLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBc0IsRUFBUyxDQUFDLENBQUM7WUFDM0QsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJO2dCQUFFLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUM7b0JBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5SCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQztRQUVGLDBCQUFxQixHQUFHLENBQWlDLE1BQXFCLEVBQUUsSUFBUSxFQUFFLEVBQUU7WUFDMUYsTUFBTSxJQUFJLEdBQUcsSUFBSSxTQUFTLENBQXNCLEVBQVMsQ0FBQyxDQUFDO1lBQzNELEtBQUssTUFBTSxJQUFJLElBQUksTUFBTTtnQkFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEgsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUM7UUFFRixrQkFBYSxHQUFHLENBQUksS0FBYSxFQUFFLEVBQVcsRUFBRSxFQUFFO1lBQ2hELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUM3QixNQUFNLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUNqQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDM0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsR0FBRyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUM7WUFDN0UsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUM7UUFFRjs7OztXQUlHO1FBQ0gsZUFBVSxHQUFHLENBQUksR0FBTSxFQUFFLEVBQUU7WUFDekIsTUFBTSxHQUFHLEdBQU0sRUFBUyxDQUFDO1lBQ3pCLEtBQUssTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFO2dCQUNyQixJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRTtvQkFBRSxTQUFTOztvQkFDeEUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUMxQjtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDO1FBeHZCQSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQzFFLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUM7WUFFdkMsSUFBSSxXQUFXLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxFQUFFO2dCQUM1QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDckIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDcEM7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMvQixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3JDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxxQkFBcUI7SUFDdkIsQ0FBQztJQUlELFlBQVksQ0FBQyxNQUFxQjtRQUNoQyxNQUFNLE9BQU8sR0FBRyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM1RSxPQUFPLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDOUcsV0FBVztZQUNYLElBQUksQ0FBQyxDQUFDLEdBQUc7Z0JBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7O2dCQUM5RixPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM5RixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQU87UUFDdkIsSUFBSTtZQUNGLElBQXFCLElBQUksQ0FBQyxXQUFZLENBQUMsS0FBSyxFQUFFO2dCQUM1QyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNoRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3JDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2QsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDN0IsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDakM7U0FDRjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNsQjtJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsSUFBWTtRQUN0QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUEyQkQ7Ozs7OztPQU1HO0lBQ0gsY0FBYyxDQUFJLEdBQU0sRUFBRSxJQUFnQjtRQUN4QyxJQUFJLENBQUMsR0FBRztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3RCLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFO1lBQ3RCLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDdEI7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7O09BR0c7SUFDSCxtQkFBbUIsQ0FBSSxLQUFxQztRQUMxRCxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtZQUN4QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzFDO0lBQ0gsQ0FBQztJQW1KRCxlQUFlLENBQUksSUFBUyxFQUFFLFFBQVEsR0FBRyxNQUFNO1FBQzdDLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDdkIsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLE1BQU0sR0FBRyxHQUFRLEVBQUUsRUFDakIsWUFBWSxHQUF5QixFQUFFLENBQUM7UUFDMUMsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLEVBQUU7WUFDdkIsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUFFLFNBQVM7WUFDM0MsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNmLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDckM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFDRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLGdCQUFnQixDQUFDLENBQUM7SUFDdEQsQ0FBQztJQXdCRCxXQUFXLENBQUMsS0FBYSxFQUFFLElBQVM7UUFDbEMsT0FBTyxJQUFJLEVBQUUsSUFBSSxDQUFDO0lBQ3BCLENBQUM7SUFDRCxTQUFTLENBQUMsS0FBYSxFQUFFLElBQVM7UUFDaEMsT0FBTyxJQUFJLEVBQUUsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUEwQ0QsY0FBYztRQUNaLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFDM0IsS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNqQyxPQUFPO1lBQ0wsS0FBSztZQUNMLE1BQU07WUFDTixRQUFRLEVBQUUsQ0FBQyxJQUFZLEVBQUUsTUFBcUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDO1lBQzVILFdBQVcsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVc7WUFDdkMsVUFBVSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTTtTQUNsQyxDQUFDO0lBQ0osQ0FBQztJQUtELGFBQWEsQ0FBQyxLQUFVO1FBQ3RCLE9BQVEsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFnQixJQUFJLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBOERELE1BQU0sQ0FBQyxPQUFlLEVBQUUsTUFBcUIsQ0FBQyxFQUFFLFFBQVEsR0FBRyxJQUFJLEVBQUUsS0FBSyxHQUFHLE9BQU87UUFDOUUsSUFBSSxHQUFHLElBQUksQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDN0MsSUFBSSxPQUFPLE9BQU8sSUFBSSxRQUFRO1lBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2RCxPQUFPLEdBQUcsT0FBTyxPQUFPLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNwRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO1lBQzdDLFFBQVE7WUFDUixrQkFBa0IsRUFBRSxRQUFRO1lBQzVCLGdCQUFnQixFQUFFLFFBQVE7WUFDMUIsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFdBQVc7U0FDckcsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxjQUFjLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBb0dELEtBQUssQ0FBQyxJQUFXLEVBQUUsV0FBcUIsRUFBRSxRQUFnQjtRQUN4RCxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGtEQUFrRDtRQUVsSCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hILEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ25DLElBQUksUUFBUSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFaEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxlQUFlLENBQUMsUUFBZ0I7UUFDOUIsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUM1QixNQUFNLGVBQWUsR0FBRyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzFELE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFDRCxhQUFhLENBQUksR0FBUTtRQUN2QixNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDZixLQUFLLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRTtZQUNyQixJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUU7Z0JBQ2xELEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDcEI7U0FDRjtRQUNELE9BQU8sR0FBVSxDQUFDO0lBQ3BCLENBQUM7SUFDRCxXQUFXLENBQUMsS0FBYTtRQUN2QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUNEOzs7Ozs7T0FNRztJQUNILFlBQVksQ0FBVSxNQUFjLEVBQUUsU0FBYyxFQUFFLFVBQWdFO1FBQ3BILE9BQU8sSUFBSSxVQUFVLENBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUMvQixJQUFJO2dCQUNGLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxFQUFFO29CQUNqQyxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUM5QixNQUFNLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUU7d0JBQ3ZCLFdBQVc7d0JBQ1gsa0JBQWtCO3dCQUNsQixNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO3dCQUNwQixJQUFJLFVBQVUsRUFBRTs0QkFDZCxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0NBQzFCLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7Z0NBQ2hCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQ0FDZixNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7NkJBQ3BCO2lDQUFNLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtnQ0FDaEMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQ0FDZixHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7Z0NBQ2YsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDOzZCQUNwQjtpQ0FBTTtnQ0FDTCxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDOzZCQUNoQjt5QkFDRjs2QkFBTTs0QkFDTCxHQUFHLENBQUMsSUFBSSxDQUFDLElBQVcsQ0FBQyxDQUFDOzRCQUN0QixHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7NEJBQ2YsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO3lCQUNwQjtvQkFDSCxDQUFDLENBQUM7aUJBQ0g7cUJBQU07b0JBQ0wsTUFBTSxVQUFVLENBQUM7aUJBQ2xCO2FBQ0Y7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDVixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNmLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2IsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQ2hCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFXLEVBQUUsUUFBZ0IsRUFBRSxTQUFzQixFQUFFLFdBQXVEO1FBQzdILFlBQVk7UUFDWixJQUFJLEtBQVksQ0FBQztRQUNqQixNQUFNLHVCQUF1QixHQUFlLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLFNBQVMsQ0FBQztRQUNqSCxJQUFJLHVCQUF1QixFQUFFLE1BQU0sRUFBRTtZQUNuQyxLQUFLLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hCLEtBQUssTUFBTSxTQUFTLElBQUksdUJBQXVCLEVBQUU7Z0JBQy9DLEtBQUssTUFBTSxHQUFHLElBQUksS0FBSyxFQUFFO29CQUN2QixHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3BIO2FBQ0Y7U0FDRjthQUFNO1lBQ0wsS0FBSyxHQUFHLElBQUksQ0FBQztTQUNkO1FBQ0QsTUFBTSxVQUFVLEdBQUcsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDO1FBQzVDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO1lBQzVCLE1BQU0sRUFBRSxVQUFVLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTTtZQUN4QyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxJQUFJLFNBQVM7U0FDN0QsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FDYixDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdkQsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3ZGLEdBQUcsRUFDTCxRQUFRLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQzFELENBQUM7UUFFRixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQUcsSUFBYztRQUMzQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUNELEtBQUssQ0FBQyxnQkFBZ0IsQ0FBVSxJQUFTLEVBQUUsU0FBeUIsRUFBRSxXQUF1RDtRQUMzSCxZQUFZO1FBQ1osSUFBSSxLQUFZLENBQUM7UUFDakIsTUFBTSx1QkFBdUIsR0FBZSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxTQUFTLENBQUM7UUFDakgsSUFBSSx1QkFBdUIsRUFBRSxNQUFNLEVBQUU7WUFDbkMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QixLQUFLLE1BQU0sU0FBUyxJQUFJLHVCQUF1QixFQUFFO2dCQUMvQyxLQUFLLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBRTtvQkFDdkIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNwSDthQUNGO1NBQ0Y7YUFBTTtZQUNMLEtBQUssR0FBRyxJQUFJLENBQUM7U0FDZDtRQUNELE1BQU0sVUFBVSxHQUFHLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQztRQUM1QyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTtZQUM1QixNQUFNLEVBQUUsVUFBVSxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU07WUFDeEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsSUFBSSxTQUFTO1NBQzdELENBQUMsQ0FBQztRQUNILE9BQU8sQ0FDTCxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDekQsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3ZGLEdBQUcsQ0FDSixDQUFDO0lBQ0osQ0FBQztJQWlCRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM3QixJQUFJLEVBQUUsR0FBRyxDQUFDLE9BQU8sV0FBVyxLQUFLLFdBQVcsSUFBSSxXQUFXLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQywwREFBMEQ7UUFDN0osT0FBTyxzQ0FBc0MsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDbkUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLGdDQUFnQztZQUM1RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ1QsOEJBQThCO2dCQUM5QixDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDckIsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2FBQ3hCO2lCQUFNO2dCQUNMLCtDQUErQztnQkFDL0MsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3RCLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQzthQUMxQjtZQUNELE9BQU8sQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBenNCVSxjQUFjO2tIQUFkLGNBQWMsY0FERCxNQUFNOzsyRkFDbkIsY0FBYztrQkFEMUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdXJyZW5jeVBpcGUsIERhdGVQaXBlLCBEZWNpbWFsUGlwZSwgTG9jYXRpb24sIFRpdGxlQ2FzZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBpbmplY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIGFzIE1hdERpYWxvZywgTWF0RGlhbG9nQ29uZmlnIGFzIE1hdERpYWxvZ0NvbmZpZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRTbmFja0JhciBhcyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgUm91dGVyLCBOYXZpZ2F0aW9uRXh0cmFzLCBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBFVFNSZWFjdGl2ZUZvcm1JbnB1dFNlcnZpY2UgYXMgSVMxIH0gZnJvbSAnLi9pbnB1dC5zZXJ2aWNlJztcbmltcG9ydCBqZmQgZnJvbSAnanMtZmlsZS1kb3dubG9hZCc7XG5pbXBvcnQgeyBQYWdlTG9hZGVyU2VydmljZSB9IGZyb20gJy4vcGFnZS1sb2FkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBDb25maWcsIENvbmZpZyBhcyBjb25maWcgfSBmcm9tICcuLi9jb25maWdzL2luZGV4LmNvbmZpZyc7XG5pbXBvcnQgeyBBcHBSb3V0ZUJhc2UgfSBmcm9tICcuLi9TaGFyZWQvbW9kZWxzL1JvdXRlSXRlbS5jbGFzcyc7XG5pbXBvcnQgeyBzYXZlQXMgfSBmcm9tICdmaWxlLXNhdmVyJztcbmltcG9ydCB7IEVWYWxpZGF0aW9uVHlwZSwgSVN0cmljdEZvcm1Hcm91cCwgU3RhdHVzLCBUYWJsZUNvbCB9IGZyb20gJy4uL1NoYXJlZC9tb2RlbHMvaW5kZXgubW9kZWwnO1xuaW1wb3J0IHsgZW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgUGFnZVNlcnZpY2UgfSBmcm9tICcuL3BhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVW50eXBlZEZvcm1BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IExvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi9SZXVzYWJsZXMvcmV1c2FibGUtcGFnZXMvbG9nZ2VyL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgaXNPYnNlcnZhYmxlLCBsYXN0VmFsdWVGcm9tLCBtZXJnZSwgT2JzZXJ2YWJsZSwgb2YsIFJlcGxheVN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRUVUU1BhZ2VCdG5JRCB9IGZyb20gJy4uL1NoYXJlZC9tb2RlbHMvSU1lbnVJdGVtJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU0RLRW52aXJvbm1lbnQgfSBmcm9tICcuLi9TaGFyZWQvbW9kZWxzL2Vudmlyb25tZW50Lm1vZGVsJztcbmltcG9ydCB7IEJyZWFrcG9pbnRPYnNlcnZlciwgQnJlYWtwb2ludHMgfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcbmltcG9ydCB7IERlYm91bmNlclNlcnZpY2UgfSBmcm9tICcuL2RlYm91bmNlci5zZXJ2aWNlJztcbmltcG9ydCB7IElGb3JtU2NoZW1hIH0gZnJvbSAnLi4vU2hhcmVkL2NvbXBvbmVudHMvZm9ybS1nZW5lcmF0b3IvZm9ybS1nZW5lcmF0b3IuY29tcG9uZW50JztcbmltcG9ydCBQYXBhIGZyb20gJ3BhcGFwYXJzZSc7XG5pbXBvcnQgeyBJSW5mb0RpYWxvZ0J0biB9IGZyb20gJy4uL1NoYXJlZC9jb21wb25lbnRzL2luZm8tZGlhbG9nL2luZm8tZGlhbG9nLmNvbXBvbmVudCc7XG5kZWNsYXJlIGNvbnN0ICQ6IGFueTtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBVdGlsaXR5U2VydmljZTxURW52aXJvbm1lbnQgZXh0ZW5kcyBTREtFbnZpcm9ubWVudCA9IFNES0Vudmlyb25tZW50PiB7XG4gIHI6IEFwcFJvdXRlQmFzZTtcbiAgZG93bmxvYWRlciA9IGpmZDtcbiAgZVZhbGlkYXRpb25UeXBlID0gRVZhbGlkYXRpb25UeXBlO1xuICBjb25maWcgPSBDb25maWc7XG4gIGVudmlyb25tZW50OiBURW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudCBhcyBhbnk7XG4gIHBiaWQgPSBFRVRTUGFnZUJ0bklEO1xuICAkOiBhbnk7XG4gIGlzTW9iaWxlOiBib29sZWFuO1xuICBpc01vYmlsZVNpZ25hbCA9IHNpZ25hbDxib29sZWFuPih1bmRlZmluZWQpO1xuICBwYWdlU2l6ZU9wdGlvbnMgPSBbNSwgMTAsIDE1LCAyMCwgNTAsIDEwMCwgMjAwLCA1MDAsIDEwMDBdO1xuICBkYXRlUGlwZURhdGUgPSAnRUUsIE1NTU0gZCwgeSc7XG4gIGRhdGVQaXBlRGF0ZUxlYW4gPSAnRUUsIE1NTSBkLCB5JztcbiAgZGF0ZVBpcGVEYXRlVGltZUxlYW4gPSAnRUUsIE1NTSBkLCB5IGhoOm1tIGEnO1xuICByZWFkb25seSBjdXN0b21JREZpZWxkID0gJ19faWQnO1xuICByZWFkb25seSBkZWxpbWl0ZXIgPSBgfn5+Ly9+fn5gO1xuICAvKipcbiAgICogRW1pdHMgdHJ1ZSBpZiBtb2JpbGVcbiAgICovXG4gIG1vYmlsZVF1ZXJ5Q2hhbmdlZCA9IG5ldyBSZXBsYXlTdWJqZWN0PGJvb2xlYW4+KCk7XG4gIHB1YmxpYyBkaWFsb2cgPSBpbmplY3QoTWF0RGlhbG9nKTtcbiAgcHVibGljIHNuYWNrQmFyID0gaW5qZWN0KE1hdFNuYWNrQmFyKTtcbiAgcHVibGljIHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBwdWJsaWMgdGl0bGVTID0gaW5qZWN0KFRpdGxlKTtcbiAgcHVibGljIGxvY2F0aW9uID0gaW5qZWN0KExvY2F0aW9uKTtcbiAgcHVibGljIGlucHV0U2VydmljZSA9IGluamVjdChJUzEpO1xuICBwdWJsaWMgcFMgPSBpbmplY3QoUGFnZUxvYWRlclNlcnZpY2UpO1xuICBwdWJsaWMgY3VycmVuY3lQaXBlID0gaW5qZWN0KEN1cnJlbmN5UGlwZSk7XG4gIHB1YmxpYyB0aXRsZUNhc2VQaXBlID0gaW5qZWN0KFRpdGxlQ2FzZVBpcGUpO1xuICBwdWJsaWMgbG9nZ2VyU2VydmljZSA9IGluamVjdChMb2dnZXJTZXJ2aWNlKTtcbiAgcHVibGljIHBhZ2VTID0gaW5qZWN0KFBhZ2VTZXJ2aWNlKTtcbiAgcHVibGljIHJlc3BvbnNpdmUgPSBpbmplY3QoQnJlYWtwb2ludE9ic2VydmVyKTtcbiAgcHVibGljIGRhdGVQaXBlID0gaW5qZWN0KERhdGVQaXBlKTtcbiAgcHVibGljIGRlYm91bmNlclNlcnZpY2UgPSBpbmplY3QoRGVib3VuY2VyU2VydmljZSk7XG4gIHB1YmxpYyBudW1iZXJQaXBlID0gaW5qZWN0KERlY2ltYWxQaXBlKTtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5yZXNwb25zaXZlLm9ic2VydmUoW0JyZWFrcG9pbnRzLkhhbmRzZXRQb3J0cmFpdF0pLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBjb25zdCBicmVha3BvaW50cyA9IHJlc3VsdC5icmVha3BvaW50cztcblxuICAgICAgaWYgKGJyZWFrcG9pbnRzW0JyZWFrcG9pbnRzLkhhbmRzZXRQb3J0cmFpdF0pIHtcbiAgICAgICAgdGhpcy5pc01vYmlsZSA9IHRydWU7XG4gICAgICAgIHRoaXMuaXNNb2JpbGVTaWduYWwuc2V0KHRydWUpO1xuICAgICAgICB0aGlzLm1vYmlsZVF1ZXJ5Q2hhbmdlZC5uZXh0KHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pc01vYmlsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzTW9iaWxlU2lnbmFsLnNldChmYWxzZSk7XG4gICAgICAgIHRoaXMubW9iaWxlUXVlcnlDaGFuZ2VkLm5leHQoZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIGlmICgkKSB0aGlzLiQgPSAkO1xuICB9XG5cbiAgYmFjayA9ICgpID0+IHRoaXMubG9jYXRpb24uYmFjaygpO1xuXG4gIG9ubHlPbmVJbnB1dChpbnB1dHM6IEZvcm1Db250cm9sW10pIHtcbiAgICBjb25zdCBuSW5wdXRzID0gaW5wdXRzPy5tYXAoKGlucCkgPT4gKHsgaWQ6IHRoaXMuZ2VuUmFuZG9tSUQsIGlucCB9KSkgfHwgW107XG4gICAgcmV0dXJuIG1lcmdlKC4uLm5JbnB1dHMubWFwKChpKSA9PiBpLmlucC52YWx1ZUNoYW5nZXMucGlwZShtYXAoKHZhbCkgPT4gKHsgaWQ6IGkuaWQsIHZhbCB9KSkpKSkuc3Vic2NyaWJlKChyKSA9PiB7XG4gICAgICAvLyBkZWJ1Z2dlclxuICAgICAgaWYgKHIudmFsKSBuSW5wdXRzLmZpbHRlcigoeCkgPT4geC5pZCAhPSByLmlkKS5mb3JFYWNoKCh4KSA9PiB4LmlucC5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KSk7XG4gICAgICBlbHNlIG5JbnB1dHMuZmlsdGVyKCh4KSA9PiB4LmlkICE9IHIuaWQpLmZvckVhY2goKHgpID0+IHguaW5wLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSkpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgY29weVBheWxvYWQocGF5bG9hZCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoKDxTREtFbnZpcm9ubWVudD50aGlzLmVudmlyb25tZW50KS5kZWJ1Zykge1xuICAgICAgICBjb25zdCBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcbiAgICAgICAgZWxlbS52YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVsZW0pO1xuICAgICAgICBlbGVtLnNlbGVjdCgpO1xuICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGVsZW0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxuICB9XG4gIHhPclkgPSAoeCwgeSA9ICctJykgPT4gYCR7eCA9PSBudWxsID8geSA6IHh9YDtcbiAgdG9UaXRsZUNhc2UodGV4dDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMudGl0bGVDYXNlUGlwZS50cmFuc2Zvcm0odGV4dCk7XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnQgRGF0ZSBzdHJpbmcgdG8gRGF0ZSBUaW1lIHN0cmluZ1xuICAgKiBAcGFyYW0gZGF0ZVN0ciBEYXRlIHN0cmluZ1xuICAgKiBAZXhhbXBsZSAnMjAyMi0wMS0yNSdcbiAgICogQHBhcmFtIGNvbmZpZyBDb25maWd1cmF0aW9uIGZvciB0aGUgY29udmVyc2lvblxuICAgKiBAcmV0dXJucyBSZXR1cm5zIGEgRGF0ZSBUaW1lIHN0cmluZ1xuICAgKiBAZXhhbXBsZSAnMjAyMi0wMS0yNVQwMDowMDowMFonIG9yICcyMDIyLTAxLTI1IDAwOjAwOjAwJ1xuICAgKi9cbiAgZGF0ZVRvRGF0ZVRpbWUgPSAoXG4gICAgZGF0ZVN0cjogc3RyaW5nLFxuICAgIGNvbmZpZz86IHtcbiAgICAgIC8qKlxuICAgICAgICogVXNlIHRoZSB5eXl5LW1tLWRkIGhoOm1tOnNzIGZvcm1hdFxuICAgICAgICovXG4gICAgICBvbWl0VD86IGJvb2xlYW47XG4gICAgICAvKipUaW1lIHRvIGFwcGVuZCB0byBkYXRlLiBAZXhhbXBsZSBgMTI6MDA6MDBaYCAqL1xuICAgICAgdGltZT86IHN0cmluZztcbiAgICB9LFxuICApID0+IHtcbiAgICByZXR1cm4gIWRhdGVTdHJcbiAgICAgID8gbnVsbFxuICAgICAgOiBkYXRlU3RyWzEwXSA9PSAnVCdcbiAgICAgICAgPyBkYXRlU3RyXG4gICAgICAgIDogZGF0ZVN0ciArICghIWNvbmZpZz8ub21pdFQgPyBgICR7Y29uZmlnPy50aW1lIHx8ICcwMDowMDowMCd9YCA6IGBUJHtjb25maWc/LnRpbWUgfHwgJzAwOjAwOjAwWid9YCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFNldCBhbiBPYmplY3QncyBmaWVsZCBpZiB0aGUgb2JqZWN0IGV4aXN0cyBvciBkb24ndCBpZiB0aGUgb2JqZWN0IGRvZXNuJ3RcbiAgICogQHBhcmFtIG9iaiBPYmplY3QgaG9sZGluZyB0aGUgZmllbGRcbiAgICogQHBhcmFtIGZpZWxkTmFtZSBOYW1lIG9mIHRoZSBmaWVsZCB0byBzZXRcbiAgICogQHBhcmFtIHZhbCBWYWx1ZSB0byBzZXQgdGhlIGZpZWxkIHdpdGhcbiAgICogQHJldHVybnMgUmV0dXJucyB0aGUgb2JqZWN0IGhvbGRpbmcgdGhlIGRhdGFcbiAgICovXG4gIHNldHRlcldpdGhOdWxsPFQ+KG9iajogVCwga3ZwczogUGFydGlhbDxUPikge1xuICAgIGlmICghb2JqKSByZXR1cm4gbnVsbDtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBrdnBzKSB7XG4gICAgICBvYmpba2V5XSA9IGt2cHNba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIC8qKlxuICAgKiAoU2V0IGFuIE9iamVjdCdzIGZpZWxkIGlmIHRoZSBvYmplY3QgZXhpc3RzIG9yIGRvbid0IGlmIHRoZSBvYmplY3QgZG9lc24ndCkgZm9yIG11bHRpcGxlIGVudHJpZXNcbiAgICogQHBhcmFtIGl0ZW1zIEFycmF5IG9mIG9iamVjdHMgYW5kIHRoZWlyIG1vZGlmaWNhdGlvbnNcbiAgICovXG4gIHNldHRlcldpdGhOdWxsQXJyYXk8VD4oaXRlbXM6IHsgb2JqOiBUOyBrdnBzOiBQYXJ0aWFsPFQ+IH1bXSkge1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgdGhpcy5zZXR0ZXJXaXRoTnVsbChpdGVtLm9iaiwgaXRlbS5rdnBzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgZGVsZXRpb24gb2Ygcm93cyBmcm9tIGEgRm9ybUFycmF5XG4gICAqIEBwYXJhbSBpbmRleCBJbmRleCBvZiB0aGUgcm93IHRvIGRlbGV0ZVxuICAgKiBAcGFyYW0gZmEgVGhlIEZvcm1BcnJheSB0aGF0IGhvbGRzIHRoZSByb3dzXG4gICAqIEBwYXJhbSBkZWxldGVTZXJ2aWNlIFRoZSBkZWxldGlvbiBzZXJ2aWNlIHRvIGJlIGNhbGxlZCAoSXQgc2hvdWxkIGJlIGFuIGFub255bW91cyBmdW5jdGlvbilcbiAgICogQHBhcmFtIGFkZFJvd0Z1bmMgVGhlIGZ1bmN0aW9uIChhbm9ueW1vdXMpIHRoYXQgYWRkcyBhIG5ldyByb3cgdG8gdGhlIEZvcm1BcnJheVxuICAgKiBAcGFyYW0gZW1pdEV2ZW50IFNwZWNpZnkgd2hldGhlciB0byBlbWl0IGFuIGV2ZW50IHdoZW4gbWFuaXB1bGF0aW5nIHRoZSBGb3JtQXJyYXlcbiAgICogQHJldHVybnNcbiAgICovXG4gIGhhbmRsZUZvcm1Sb3dEZWxldGUgPSAoXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBmYTogVW50eXBlZEZvcm1BcnJheSxcbiAgICBkZWxldGVTZXJ2aWNlOiAoLi4uYXJncykgPT4gUHJvbWlzZTxhbnk+IHwgT2JzZXJ2YWJsZTxhbnk+LFxuICAgIGFkZFJvd0Z1bmM6ICguLi5hcmdzKSA9PiBhbnksXG4gICAgZXh0cmFDb25maWc/OiB7XG4gICAgICBkb250RW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgICAgIG9uRGVsZXRlPzogKHJlcykgPT4gYW55O1xuICAgIH0sXG4gICkgPT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCBpZCA9IGNsb25lRGVlcChmYS5jb250cm9sc1tpbmRleF0/LnZhbHVlPy5pZCk7XG4gICAgICAvLyBkZWJ1Z2dlcjtcbiAgICAgIGlmIChmYS5jb250cm9scy5sZW5ndGggPT0gMSAmJiBpZCkge1xuICAgICAgICBmYS5yZW1vdmVBdChpbmRleCwgeyBlbWl0RXZlbnQ6ICFleHRyYUNvbmZpZz8uZG9udEVtaXRFdmVudCB9KTtcbiAgICAgICAgYWRkUm93RnVuYygpO1xuICAgICAgfSBlbHNlIGlmIChmYS5jb250cm9scy5sZW5ndGggPiAxKSBmYS5yZW1vdmVBdChpbmRleCwgeyBlbWl0RXZlbnQ6ICFleHRyYUNvbmZpZz8uZG9udEVtaXRFdmVudCB9KTtcbiAgICAgIGVsc2UgaWYgKGZhLmNvbnRyb2xzLmxlbmd0aCA9PSAxKSBmYS5jb250cm9sc1swXS5yZXNldCgpO1xuXG4gICAgICBpZiAoaWQgJiYgZGVsZXRlU2VydmljZSkge1xuICAgICAgICBjb25zdCByZXEgPSBkZWxldGVTZXJ2aWNlKGlkKTtcbiAgICAgICAgaWYgKHJlcVsndG9Qcm9taXNlJ10pIHtcbiAgICAgICAgICByZXNvbHZlKGxhc3RWYWx1ZUZyb20ocmVxIGFzIE9ic2VydmFibGU8YW55PikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUocmVxIGFzIGFueSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICB9XG4gICAgfSkudGhlbigocikgPT4ge1xuICAgICAgZXh0cmFDb25maWc/Lm9uRGVsZXRlKHIpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIGRlbGV0aW9uIG9mIHJvd3MgZnJvbSBhbiBhcnJheVxuICAgKiBAcGFyYW0gaW5kZXggSW5kZXggb2YgdGhlIHJvdyB0byBkZWxldGVcbiAgICogQHBhcmFtIGFyciBUaGUgYXJyYXkgdGhhdCBob2xkcyB0aGUgcm93c1xuICAgKiBAcGFyYW0gZGVsZXRlU2VydmljZSBUaGUgZGVsZXRpb24gc2VydmljZSB0byBiZSBjYWxsZWQgKEl0IHNob3VsZCBiZSBhbiBhbm9ueW1vdXMgZnVuY3Rpb24pXG4gICAqIEBwYXJhbSBhZGRSb3dGdW5jIFRoZSBmdW5jdGlvbiAoYW5vbnltb3VzKSB0aGF0IGFkZHMgYSBuZXcgcm93IHRvIHRoZSBhcnJheVxuICAgKiBAcGFyYW0gY2IgVGhlIGZ1bmN0aW9uIHRvIGNhbGxiYWNrIHdpdGggdGhlIHJlc3BvbnNlIG9mIHRoZSBkZWxldGlvbiBzZXJ2aWNlIGFzIHRoZSBpbnB1dCBwYXJhbWV0ZXJcbiAgICovXG4gIGhhbmRsZVJvd0RlbGV0ZSA9IGFzeW5jIDxUPihcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGFycjogYW55W10sXG4gICAgZGVsZXRlU2VydmljZTogKC4uLmFyZ3MpID0+IFByb21pc2U8VD4gfCBPYnNlcnZhYmxlPFQ+LFxuICAgIGFkZFJvd0Z1bmM6ICguLi5hcmdzKSA9PiBhbnksXG4gICAgY2I/OiAoYW55KSA9PiBhbnksXG4gICkgPT4ge1xuICAgIGNvbnN0IGlkID0gYXJyW2luZGV4XT8uaWQ7XG4gICAgLy8gZGVidWdnZXI7XG5cbiAgICBpZiAoaWQgJiYgZGVsZXRlU2VydmljZSkge1xuICAgICAgY29uc3QgcmVxID0gZGVsZXRlU2VydmljZShpZCk7XG4gICAgICBpZiAodHlwZW9mIHJlcVsndG9Qcm9taXNlJ10gPT0gJ2Z1bmN0aW9uJykgY2IgPyBjYihhd2FpdCByZXFbJ3RvUHJvbWlzZSddKCkpIDogcmVxWyd0b1Byb21pc2UnXSgpO1xuICAgICAgZWxzZSBjYiA/IGNiKGF3YWl0IHJlcSkgOiBudWxsO1xuICAgIH1cblxuICAgIGlmIChhcnIubGVuZ3RoID09IDEpIHtcbiAgICAgIGFyci5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgYWRkUm93RnVuYygpO1xuICAgIH0gZWxzZSBpZiAoYXJyLmxlbmd0aCA+IDEpIGFyci5zcGxpY2UoaW5kZXgsIDEpO1xuICB9O1xuICAvKipcbiAgICogVG8gaGFuZGxlIHRoZSBwYXRjaGluZyBvZiBhIEZvcm1BcnJheVxuICAgKiBAcGFyYW0gYXJyIFRoZSBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSBkYXRhXG4gICAqIEBwYXJhbSBhZGRGdW5jIFRoZSBmdW5jdGlvbiB0aGF0IHBlcmZvcm1zIGFkZGl0aW9uIG9mIHNpbmdsZSBlbnRyaWVzXG4gICAqIEBwYXJhbSBmb3JtQXJyIFRoZSBGb3JtQXJyYXkgdGhhdCB3aWxsIGhvbGQgdGhlIGFycmF5J3MgZGF0YVxuICAgKi9cbiAgaW5pdFBhdGNoRm9ybUFycmF5ID0gPFQ+KGFycjogVFtdLCBhZGRGdW5jOiAoaTogbnVtYmVyLCBkYXRhPzogVCwgZm9ybUFycj86IEZvcm1BcnJheSkgPT4gdm9pZCwgZm9ybUFycjogRm9ybUFycmF5KSA9PiB7XG4gICAgLy8gZGVidWdnZXJcbiAgICBpZiAoYXJyPy5sZW5ndGgpIHtcbiAgICAgIGlmIChmb3JtQXJyLmxlbmd0aCkgZm9ybUFyci5jbGVhcigpO1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGFycikge1xuICAgICAgICBhZGRGdW5jKGZvcm1BcnIubGVuZ3RoLCBpdGVtLCBmb3JtQXJyKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFmb3JtQXJyLmxlbmd0aCkgYWRkRnVuYyhmb3JtQXJyLmxlbmd0aCwgbnVsbCwgZm9ybUFycik7XG4gICAgfVxuICB9O1xuICBwcml2YXRlIGlzUHJvbWlzZSA9IChmdW5jKSA9PiB7XG4gICAgcmV0dXJuIHR5cGVvZiBmdW5jID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZnVuYy50aGVuID09PSAnZnVuY3Rpb24nO1xuICB9O1xuICBpc0FzeW5jID0gKGZ1bmMpID0+IHtcbiAgICByZXR1cm4gZnVuYy5jb25zdHJ1Y3Rvci5uYW1lID09PSAnQXN5bmNGdW5jdGlvbicgfHwgKHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nICYmIHRoaXMuaXNQcm9taXNlKGZ1bmMoKSkpO1xuICB9O1xuXG4gIGlzT2JzZXJ2YWJsZSA9IDxUPihmdW5jKSA9PiB7XG4gICAgLy8gcmV0dXJuIHR5cGVvZiBmdW5jID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZnVuYy5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbic7XG4gICAgLy8gcmV0dXJuIHR5cGVvZiBmdW5jID09PSAnb2JqZWN0JyAmJiBmdW5jIGluc3RhbmNlb2YgT2JzZXJ2YWJsZTtcbiAgICAvLyByZXR1cm4gdHlwZW9mIGZ1bmMgPT09ICdvYmplY3QnICYmIGZ1bmMgaW5zdGFuY2VvZiBPYnNlcnZhYmxlPFQ+O1xuICAgIHJldHVybiB0eXBlb2YgZnVuYyA9PT0gJ29iamVjdCcgJiYgaXNPYnNlcnZhYmxlKGZ1bmMpO1xuICAgIHJldHVybiB0eXBlb2YgZnVuYyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGZ1bmMudG9Qcm9taXNlID09PSAnZnVuY3Rpb24nO1xuICB9O1xuICBwcm9taXNpZnlWYWwgPSA8VD4odmFsOiBUIHwgUHJvbWlzZTxUPiB8IE9ic2VydmFibGU8VD4pID0+IHtcbiAgICBpZiAodGhpcy5pc0FzeW5jKHZhbCkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsIGFzIFByb21pc2U8VD4pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc09ic2VydmFibGUodmFsKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShsYXN0VmFsdWVGcm9tKHZhbCBhcyBPYnNlcnZhYmxlPFQ+KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsIGFzIFQpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIGFyciBBcnJheSBvZiBvYnNlcnZhYmxlcyB0byBmZXRjaFxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiB0aGUgcmVzcG9uc2VzIG1lcmdlZCB0b2dldGhlci4gSXQgZW1pdHMgdGhlIG1lcmdlZCByZXNwb25zZXMgYXMgdGhleSBhcmUgZmV0Y2hlZCBhbmQgY2xvc2VzIG9uY2UgYWxsbCB0aGUgcmVzcG9uc2VzIGhhdmUgYmVlbiBmZXRjaGVkXG4gICAqL1xuICBtZXJnZUFyck9ic2VydmFibGVzID0gPFQ+KGFycjogeyAkZnVuYzogT2JzZXJ2YWJsZTxUW10+IH1bXSkgPT4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxUW10+KChzdWIpID0+IHtcbiAgICAgIGNvbnN0IHJldDogVFtdID0gW107XG4gICAgICBsZXQgcmVzcG9uc2VDb3VudCA9IDA7XG4gICAgICBtZXJnZShcbiAgICAgICAgLi4uYXJyLm1hcChcbiAgICAgICAgICAoeCkgPT5cbiAgICAgICAgICAgIHguJGZ1bmM/LnBpcGUoXG4gICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB0YXAoKHIpID0+IHtcbiAgICAgICAgICAgICAgICByZXNwb25zZUNvdW50Kys7XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgICkuc3Vic2NyaWJlKChyKSA9PiB7XG4gICAgICAgIHJldC5wdXNoKC4uLnIpO1xuICAgICAgICBzdWIubmV4dChyZXQpO1xuICAgICAgICBpZiAocmVzcG9uc2VDb3VudCA9PSBhcnIuZmlsdGVyKCh4KSA9PiB4LiRmdW5jKS5sZW5ndGgpIHtcbiAgICAgICAgICAvLyBkZWJ1Z2dlclxuICAgICAgICAgIHN1Yi5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbiAgcmVtb3ZlRHVwbGljYXRlPFQ+KGxpc3Q6IFRbXSwga2V5RmllbGQgPSAnY29kZScpIHtcbiAgICBpZiAoIWxpc3QpIHJldHVybiBudWxsO1xuICAgIGxpc3QgPSBsaXN0LmZpbHRlcigoeCkgPT4geCk7XG4gICAgY29uc3QgcmV0OiBUW10gPSBbXSxcbiAgICAgIGR1cGxpY2F0ZU1hcDogeyBbeDogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbGlzdCkge1xuICAgICAgaWYgKGR1cGxpY2F0ZU1hcFtpdGVtW2tleUZpZWxkXV0pIGNvbnRpbnVlO1xuICAgICAgcmV0LnB1c2goaXRlbSk7XG4gICAgICBkdXBsaWNhdGVNYXBbaXRlbVtrZXlGaWVsZF1dID0gaXRlbTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuICBnZXQgZ2VuUmFuZG9tSUQoKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDAwMDAwMDAwMDApO1xuICB9XG4gIHN0b3JlUGF5bG9hZCA9IHRoaXMubG9nZ2VyU2VydmljZS5hZGRMb2c7XG4gIG9iaklzRW1wdHkgPSAob2JqLCBleGNsdXNpb25GaWVsZHM/OiBzdHJpbmdbXSkgPT4ge1xuICAgIGlmICghb2JqKSByZXR1cm4gdHJ1ZTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChleGNsdXNpb25GaWVsZHM/LmluY2x1ZGVzKGtleSkpIGNvbnRpbnVlO1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgaWYgKG9ialtrZXldKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuICBkYXRhR2VuID0gPFQgPSBhbnk+KGtleXM6IHN0cmluZ1tdLCBsZW5ndGggPSAxMCkgPT4ge1xuICAgIGNvbnN0IHJldDogYW55W10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgdDogYW55ID0ge307XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgIHRba2V5XSA9IHRoaXMudGV4dEdlbigpO1xuICAgICAgfVxuICAgICAgcmV0LnB1c2godCk7XG4gICAgfVxuICAgIHJldHVybiByZXQgYXMgVFtdO1xuICB9O1xuICB0ZXh0R2VuID0gKCkgPT4gJ3JhbmRvbScgKyBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiAxMDAwKTtcbiAgdHJhY2tCeUNvZGUoaW5kZXg6IG51bWJlciwgaXRlbTogYW55KSB7XG4gICAgcmV0dXJuIGl0ZW0/LmNvZGU7XG4gIH1cbiAgdHJhY2tCeUlEKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkge1xuICAgIHJldHVybiBpdGVtPy5pZDtcbiAgfVxuICBkaWFsb2dPcGVuZXIgPSAoY29tcDogYW55LCBjb25maWc6IE1hdERpYWxvZ0NvbmZpZywgdmFsdWVDQjogKHIpID0+IGFueSwgbm9WYWx1ZUNCPzogYW55KSA9PlxuICAgIHRoaXMuZGlhbG9nT3BlbmVyUmVmKGNvbXAsIGNvbmZpZylcbiAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAuc3Vic2NyaWJlKChyKSA9PiB7XG4gICAgICAgIGlmIChyICE9IG51bGwgJiYgciAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YWx1ZUNCKHIpO1xuICAgICAgICB9IGVsc2UgaWYgKG5vVmFsdWVDQikge1xuICAgICAgICAgIG5vVmFsdWVDQigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgZGlhbG9nT3BlbmVyUmVmID0gKGNvbXA6IGFueSwgY29uZmlnOiBNYXREaWFsb2dDb25maWcpID0+IHRoaXMuZGlhbG9nLm9wZW4oY29tcCwgY29uZmlnKTtcbiAgZmluZExhYmVsQnlJdGVtID0gKGl0ZW0sIGFycjogYW55W10sIGxhYmVsRmllbGQ/OiBzdHJpbmcsIGtleUZpZWxkOiBzdHJpbmcgPSAnY29kZScpID0+IHtcbiAgICBpZiAoIWl0ZW0pIHJldHVybiBudWxsO1xuICAgIGNvbnN0IG9iaiA9IGFycj8uZmluZCgoeCkgPT4geFtrZXlGaWVsZF0gPT0gaXRlbSk7XG4gICAgaWYgKCFvYmopIHJldHVybiBpdGVtO1xuICAgIGVsc2UgcmV0dXJuIGAke2l0ZW19IC0gJHtvYmpbbGFiZWxGaWVsZCB8fCAndGl0bGUnXSB8fCBvYmpbbGFiZWxGaWVsZCB8fCAnZGVzY3JpcHRpb24nXX1gO1xuICB9O1xuXG4gIGZvcm1GaWVsZHNGcm9tQXJyID0gdGhpcy5pbnB1dFNlcnZpY2UuZm9ybUZpZWxkc0Zyb21GQ0lucHV0c0FycjtcbiAgb2JqVG9Gb3JtQ29udHJvbHMgPSB0aGlzLmlucHV0U2VydmljZS5mb3JtRmllbGRzRnJvbU9iajtcbiAgZm9ybVNjaGVtYVRvRm9ybUNvbnRyb2xzID0gdGhpcy5pbnB1dFNlcnZpY2UuZm9ybVNjaGVtYVRvRm9ybUNvbnRyb2xzO1xuXG4gIGJpbmRGb3JtQ29udHJvbFRvSW5wdXRzID0gdGhpcy5pbnB1dFNlcnZpY2UuYmluZEZvcm1Db250cm9sVG9JbnB1dHM7XG5cbiAgZ28gPSAodmFsdWU6IHN0cmluZywgZXh0cmE/OiBOYXZpZ2F0aW9uRXh0cmFzKSA9PiB7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3ZhbHVlXSwgZXh0cmEpO1xuICB9O1xuICAvKipcbiAgICogUm91dGUgdG8gY29tcG9uZW50XG4gICAqIEBwYXJhbSByb3V0ZSBSb3V0ZSBvZiBwYXRoIHRvIGNvbXBvbmVudFxuICAgKiBAcGFyYW0gZXh0cmFcbiAgICovXG4gIGdvUiA9IChyb3V0ZTogc3RyaW5nLCBleHRyYT86IE5hdmlnYXRpb25FeHRyYXMpID0+IHtcbiAgICBpZiAoISg8U0RLRW52aXJvbm1lbnQ+dGhpcy5lbnZpcm9ubWVudCkuYWN0aXZhdGVkUm91dGUpIGRlYnVnZ2VyO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtyb3V0ZV0sIHtcbiAgICAgIHJlbGF0aXZlVG86ICg8U0RLRW52aXJvbm1lbnQ+dGhpcy5lbnZpcm9ubWVudCkuYWN0aXZhdGVkUm91dGUsXG4gICAgICAuLi5leHRyYSxcbiAgICB9KTtcbiAgICAvLyBkZWJ1Z2dlcjtcbiAgfTtcblxuICByZWxhdGl2ZVJvdXRlcigpIHtcbiAgICBjb25zdCByb3V0ZXIgPSBpbmplY3QoUm91dGVyKSxcbiAgICAgIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgICByZXR1cm4ge1xuICAgICAgcm91dGUsXG4gICAgICByb3V0ZXIsXG4gICAgICBuYXZpZ2F0ZTogKGxpbms6IHN0cmluZywgY29uZmlnPzogTmF2aWdhdGlvbkV4dHJhcyB8IHVuZGVmaW5lZCkgPT4gcm91dGVyLm5hdmlnYXRlKFtsaW5rXSwgeyByZWxhdGl2ZVRvOiByb3V0ZSwgLi4uY29uZmlnIH0pLFxuICAgICAgcXVlcnlQYXJhbXM6IHJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLFxuICAgICAgcGF0aFBhcmFtczogcm91dGUuc25hcHNob3QucGFyYW1zLFxuICAgIH07XG4gIH1cblxuICBtb25leVBhcnNlciA9IChhbW91bnQ6IHN0cmluZyB8IG51bWJlciwgY3VycmVuY3kgPSAnICcpID0+IHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW5jeVBpcGUudHJhbnNmb3JtKGFtb3VudCwgY3VycmVuY3kgfHwgJyAnKTtcbiAgfTtcbiAgZXh0cmFjdFVwbG9hZChldmVudDogYW55KSB7XG4gICAgcmV0dXJuIChldmVudC50YXJnZXQuZmlsZXMgYXMgRmlsZVtdKSB8fCBbXTtcbiAgfVxuXG4gIHNlY29uZHNUb0hvdXJNaW5TZWMgPSAoc2Vjb25kczogbnVtYmVyKSA9PiB7XG4gICAgaWYgKCFzZWNvbmRzKSByZXR1cm4geyBzZWNzOiBudWxsLCBob3VyczogbnVsbCwgbWluczogbnVsbCB9O1xuICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gMzYwMCkgfHwgMCxcbiAgICAgIHNlY29uZHNFeEhvdXJzID0gc2Vjb25kcyAlIDM2MDAgfHwgMCxcbiAgICAgIG1pbnMgPSBNYXRoLmZsb29yKHNlY29uZHNFeEhvdXJzIC8gNjApIHx8IDAsXG4gICAgICBzZWNzID0gc2Vjb25kc0V4SG91cnMgJSA2MDtcbiAgICByZXR1cm4geyBob3VycywgbWlucywgc2VjcyB9O1xuICB9O1xuICBtaW51dGVzVG9EYXlIb3VyTWluID0gKG1pbnV0ZXM6IG51bWJlcikgPT4ge1xuICAgIGlmICghbWludXRlcykgcmV0dXJuIHsgZGF5czogbnVsbCwgaG91cnM6IG51bGwsIG1pbnM6IG51bGwgfTtcbiAgICBjb25zdCBkYXlzID0gTWF0aC5mbG9vcihtaW51dGVzIC8gMTQ0MCkgfHwgMCxcbiAgICAgIG1pbml1dGVzRXhEYXlzID0gbWludXRlcyAlIDE0NDAgfHwgMCxcbiAgICAgIGhvdXJzID0gTWF0aC5mbG9vcihtaW5pdXRlc0V4RGF5cyAvIDYwKSB8fCAwLFxuICAgICAgbWlucyA9IG1pbml1dGVzRXhEYXlzICUgNjAgfHwgMDtcbiAgICByZXR1cm4geyBkYXlzLCBob3VycywgbWlucyB9O1xuICB9O1xuICBtaW51dGVzVG9EYXlIb3VyTWluU3RyID0gKG1pbnV0ZXM6IG51bWJlcikgPT4ge1xuICAgIGlmICghbWludXRlcykgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgcmV0ID0gdGhpcy5taW51dGVzVG9EYXlIb3VyTWluKG1pbnV0ZXMpO1xuICAgIHJldHVybiBgJHtyZXQuZGF5c30gJHtyZXQuaG91cnN9OiR7cmV0Lm1pbnN9YC50cmltKCk7XG4gIH07XG4gIG1pbnV0ZXNUb0RheUhvdXJNaW5TdHIyID0gKG1pbnV0ZXM6IG51bWJlcikgPT4ge1xuICAgIGlmICghbWludXRlcykgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgcmV0ID0gdGhpcy5taW51dGVzVG9EYXlIb3VyTWluKG1pbnV0ZXMpO1xuICAgIHJldHVybiBgJHtyZXQuZGF5c31kYXlzICR7cmV0LmhvdXJzfWhycyAke3JldC5taW5zfW1pbnNgLnRyaW0oKTtcbiAgfTtcbiAgZGF5SG91ck1pblRvSG91ck1pbnV0ZXMgPSAoZHlzOiBudW1iZXIsIGhyczogbnVtYmVyLCBtaW5zOiBudW1iZXIpID0+IHtcbiAgICBpZiAoIWR5cyAmJiAhaHJzICYmICFtaW5zKSByZXR1cm4gJyc7XG4gICAgY29uc3QgZHlzVG9IcnMgPSAoZHlzIHx8IDApICogMjQ7XG4gICAgaHJzID0gKCtocnMgfHwgMCkgKyBkeXNUb0hycztcbiAgICByZXR1cm4gKGhycyB8fCAnMDAnKSArICc6JyArIChtaW5zIHx8ICcwMCcpO1xuICB9O1xuICBkaXNhYmxlT3JFbmFibGVJbnB1dHMgPSAoY29udHJvbHM6IEFic3RyYWN0Q29udHJvbFtdLCBkaXNhYmxlOiBib29sZWFuKSA9PiB7XG4gICAgaWYgKGRpc2FibGUpIHRoaXMuZGlzYWJsZUlucHV0cyhjb250cm9scyk7XG4gICAgZWxzZSB0aGlzLmVuYWJsZUlucHV0cyhjb250cm9scyk7XG4gIH07XG4gIGRpc2FibGVJbnB1dHMgPSAoY29udHJvbHM6IEFic3RyYWN0Q29udHJvbFtdKSA9PiB7XG4gICAgZm9yIChjb25zdCBjb250cm9sIG9mIGNvbnRyb2xzKSB7XG4gICAgICBjb250cm9sPy5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG4gIH07XG4gIGVuYWJsZUlucHV0cyA9IChjb250cm9sczogQWJzdHJhY3RDb250cm9sW10pID0+IHtcbiAgICBmb3IgKGNvbnN0IGNvbnRyb2wgb2YgY29udHJvbHMpIHtcbiAgICAgIGNvbnRyb2w/LmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuICB9O1xuICBkYXlIb3VyTWluVG9NaW51dGVzID0gKGR5czogbnVtYmVyLCBocnM6IG51bWJlciwgbWluczogbnVtYmVyKSA9PiB7XG4gICAgaWYgKCFkeXMgJiYgIWhycyAmJiAhbWlucykgcmV0dXJuIDA7XG4gICAgY29uc3QgZHlzVG9IcnMgPSAoZHlzIHx8IDApICogMjQ7XG4gICAgaHJzID0gKCtocnMgfHwgMCkgKyBkeXNUb0hycztcbiAgICByZXR1cm4gKGhycyB8fCAwKSAqIDYwICsgbWlucztcbiAgfTtcbiAgaG91ck1pblRvTWludXRlcyA9IChocnM6IG51bWJlciwgbWluczogbnVtYmVyKSA9PiB7XG4gICAgaWYgKCFocnMgJiYgIW1pbnMpIHJldHVybiBudWxsO1xuICAgIHJldHVybiAoaHJzIHx8IDApICogNjAgKyBtaW5zO1xuICB9O1xuICBob3VyTWluVG9NaW51dGVzMiA9IChocnNNaW5zOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBbaHJzLCBtaW5zXSA9IGhyc01pbnM/LnNwbGl0KCc6JykgfHwgWzAsIDBdO1xuICAgIHJldHVybiB0aGlzLmhvdXJNaW5Ub01pbnV0ZXMoK2hycywgK21pbnMpO1xuICB9O1xuICBub3RpZnkobWVzc2FnZTogc3RyaW5nLCBjbHM6IDAgfCAxIHwgMiB8IDMgPSAxLCBkdXJhdGlvbiA9IDUwMDAsIHRpdGxlID0gJ0Nsb3NlJykge1xuICAgIGlmIChjbHMgPT0gMCkgcmV0dXJuIHRoaXMuaW5mbyhtZXNzYWdlLCBjbHMpO1xuICAgIGlmICh0eXBlb2YgbWVzc2FnZSAhPSAnc3RyaW5nJykgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICBtZXNzYWdlID0gdHlwZW9mIG1lc3NhZ2UgPT0gJ3N0cmluZycgPyBtZXNzYWdlIDogJyc7XG4gICAgY29uc3QgcmVmID0gdGhpcy5zbmFja0Jhci5vcGVuKG1lc3NhZ2UsIHRpdGxlLCB7XG4gICAgICBkdXJhdGlvbixcbiAgICAgIGhvcml6b250YWxQb3NpdGlvbjogJ2NlbnRlcicsXG4gICAgICB2ZXJ0aWNhbFBvc2l0aW9uOiAnYm90dG9tJyxcbiAgICAgIHBhbmVsQ2xhc3M6IGNscyA9PSAxID8gJ2JnLXN1Y2Nlc3MnIDogY2xzID09IDIgPyAnYnRuLWluZm8nIDogY2xzID09IDMgPyAnYnRuLXdhcm5pbmcnIDogJ2JnLWRhbmdlcicsXG4gICAgfSk7XG4gICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKHJlZi5hZnRlckRpc21pc3NlZCgpLnBpcGUobWFwKChyKSA9PiByLmRpc21pc3NlZEJ5QWN0aW9uKSkpO1xuICB9XG5cbiAgc2Nyb2xsVG9Ub3AgPSAoKSA9PiB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG5cbiAgLyoqXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGRhdGUgdGltZSBsb2NhbCB0aGF0IGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgZGF0ZXRpbWUtbG9jYWwgaW5wdXRcbiAgICovXG4gIGdldExvY2FsRGF0ZVRpbWVOb3cgPSAoKSA9PiB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgZGF0ZUNodW5rcyA9IGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCkuc3BsaXQoJy8nKTtcbiAgICByZXR1cm4gYCR7ZGF0ZUNodW5rc1syXX0tJHtkYXRlQ2h1bmtzWzFdfS0ke2RhdGVDaHVua3NbMF19YCArICdUJyArIGRhdGUudG9Mb2NhbGVUaW1lU3RyaW5nKCk7XG4gIH07XG4gIC8qKiBAcmV0dXJucyBUaGUgY3VycmVudCBkYXRlIGxvY2FsIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBkYXRlIGlucHV0ICovXG4gIGxvY2FsRGF0ZU5vdyA9ICgpID0+IHtcbiAgICByZXR1cm4gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF07XG4gIH07XG4gIGRhdGVGb3JtYXQgPSAoZGF0ZTogYW55LCBmb3JtYXQgPSAxKSA9PiB7XG4gICAgaWYgKCFkYXRlKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBkID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgaWYgKGZvcm1hdCA9PSAxKSB7XG4gICAgICByZXR1cm4gZC50b0RhdGVTdHJpbmcoKTtcbiAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PSAyKSB7XG4gICAgICByZXR1cm4gZC5nZXREYXRlKCkgKyAnICcgKyBjb25maWcuTW9udGhzW2QuZ2V0TW9udGgoKV07XG4gICAgfSBlbHNlIGlmIChmb3JtYXQgPT0gMykge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGUsIGBFRUUgTU1NIGRkIFlZWVksIGhoOm1tIGFhYCk7XG4gICAgfSBlbHNlIGlmIChmb3JtYXQgPT0gNCkge1xuICAgICAgcmV0dXJuIGNvbmZpZy5Nb250aHNbZC5nZXRNb250aCgpXSArICcgJyArIGQuZ2V0RGF0ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9O1xuXG4gIHRvSmF2YURhdGVTdHJpbmcgPSAoaXNvRGF0ZVN0cmluZzogc3RyaW5nID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpKSA9PiB7XG4gICAgaWYgKCFpc29EYXRlU3RyaW5nKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gYCR7aXNvRGF0ZVN0cmluZy5zbGljZSgwLCAxOSl9YDtcbiAgICByZXR1cm4gYCR7aXNvRGF0ZVN0cmluZy5zbGljZSgwLCAxMCl9ICR7aXNvRGF0ZVN0cmluZy5zbGljZSgxMSwgMTkpfWA7XG4gIH07XG5cbiAgdG9KYXZhRGF0ZXRpbWVTdHJpbmcgPSAoaXNvRGF0ZVN0cmluZzogc3RyaW5nKSA9PiB7XG4gICAgaWYgKCFpc29EYXRlU3RyaW5nKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBkYXRlID0gaXNvRGF0ZVN0cmluZy5pbmNsdWRlcygnVCcpID8gaXNvRGF0ZVN0cmluZyA6IG5ldyBEYXRlKGlzb0RhdGVTdHJpbmcpLnRvSVNPU3RyaW5nKCk7XG4gICAgcmV0dXJuIGAke2RhdGUuc2xpY2UoMCwgMTApfSAke2RhdGUuc2xpY2UoMTEsIDE5KX1gO1xuICB9O1xuXG4gIHRpbWVGb3JtYXQgPSAodGltZT86IGFueSkgPT4ge1xuICAgIGNvbnN0IHRpbWVBcnI6IGFueVtdID0gdGltZS5zcGxpdCgnICcpO1xuICAgIHRpbWVBcnJbMF0gPSB0aW1lQXJyWzBdLnNwbGl0KCc6Jykuc3BsaWNlKDAsIDIpLmpvaW4oJzonKTtcbiAgICByZXR1cm4gdGltZUFyci5qb2luKCcgJyk7XG4gIH07XG4gIGZ1bGxEYXRlVGltZSA9ICh0aW1lc3RhbXA6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuICAgIC8vIGRlYnVnZ2VyXG4gICAgcmV0dXJuIHRoaXMuZGF0ZUZvcm1hdCh0aW1lc3RhbXAsIDMpO1xuICB9O1xuICBkYXlzRm9ybWF0dGVyID0gKGRheXM6IG51bWJlcikgPT4ge1xuICAgIGlmICghZGF5cykge1xuICAgICAgcmV0dXJuICctJztcbiAgICB9XG4gICAgbGV0IHlyOiBudW1iZXIsXG4gICAgICBtdDogbnVtYmVyLFxuICAgICAgZHk6IG51bWJlcixcbiAgICAgIHJldDogc3RyaW5nLFxuICAgICAgX3lyID0gMzY1LFxuICAgICAgX210ID0gMzA7XG4gICAgaWYgKGRheXMgPiBfeXIpIHtcbiAgICAgIHlyID0gTWF0aC5mbG9vcihkYXlzIC8gX3lyKTtcbiAgICB9XG4gICAgaWYgKGRheXMgPiBfbXQpIHtcbiAgICAgIG10ID0gTWF0aC5mbG9vcigoZGF5cyAlIF95cikgLyBfbXQpO1xuICAgIH1cbiAgICBkeSA9IChkYXlzICUgX3lyKSAlIF9tdDtcbiAgICByZXQgPSBgJHt5ciA/IHRoaXMucGx1YXJsaXplcih5ciwgJ3lyJykgOiAnJ30gJHttdCA/IHRoaXMucGx1YXJsaXplcihtdCwgJ210aCcpIDogJyd9ICR7dGhpcy5wbHVhcmxpemVyKGR5LCAnZHknKX1gO1xuICAgIHJldHVybiByZXQ7XG4gIH07XG4gIG1vbnRoc0Zvcm1hdHRlciA9IChtb250aHM6IG51bWJlcikgPT4ge1xuICAgIGlmICghbW9udGhzKSB7XG4gICAgICByZXR1cm4gJy0nO1xuICAgIH1cbiAgICBsZXQgeXI6IG51bWJlcixcbiAgICAgIG10OiBudW1iZXIsXG4gICAgICByZXQ6IHN0cmluZyxcbiAgICAgIF95ciA9IDEyO1xuICAgIGlmIChtb250aHMgPiBfeXIpIHtcbiAgICAgIHlyID0gTWF0aC5mbG9vcihtb250aHMgLyBfeXIpO1xuICAgIH1cbiAgICBtdCA9IG1vbnRocyAlIF95cjtcbiAgICByZXQgPSBgJHt5ciA/IHRoaXMucGx1YXJsaXplcih5ciwgJ3lyJykgOiAnJ30gJHttdCA/IHRoaXMucGx1YXJsaXplcihtdCwgJ210aCcpIDogJyd9YDtcbiAgICByZXR1cm4gcmV0O1xuICB9O1xuICBwbHVhcmxpemVyID0gKHZhbDogbnVtYmVyLCB0eHQ6IHN0cmluZywgcGx1cmFsPzogc3RyaW5nKSA9PiB7XG4gICAgcGx1cmFsID0gcGx1cmFsIHx8IHR4dCArICdzJztcbiAgICByZXR1cm4gdmFsICsgKHZhbCA9PSAxID8gdHh0IDogcGx1cmFsKTtcbiAgfTtcbiAgZGVjaW1hbFRvUGVyY2VudGFnZSA9IChkZWM6IG51bWJlcikgPT4ge1xuICAgIHJldHVybiBkZWMgKiAxMDAgKyAnJSc7XG4gIH07XG4gIGxvZ0Zvcm0gPSAoZm9ybSkgPT4ge1xuICAgIGNvbnNvbGUubG9nKCdGT1JNJywgZm9ybSwgJ1ZBTFVFUycsIGZvcm0udmFsdWUgYXMgYW55KTtcbiAgfTtcblxuICB0b0NTVihkYXRhOiBhbnlbXSwgaGVhZGVyTmFtZXM6IHN0cmluZ1tdLCBmaWxlbmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVwbGFjZXIgPSAoa2V5LCB2YWx1ZSkgPT4gKHZhbHVlID09PSBudWxsID8gJycgOiB2YWx1ZSk7IC8vIHNwZWNpZnkgaG93IHlvdSB3YW50IHRvIGhhbmRsZSBudWxsIHZhbHVlcyBoZXJlXG5cbiAgICBsZXQgY3N2ID0gZGF0YS5tYXAoKHJvdykgPT4gaGVhZGVyTmFtZXMubWFwKChmaWVsZE5hbWUpID0+IEpTT04uc3RyaW5naWZ5KHJvd1tmaWVsZE5hbWVdLCByZXBsYWNlcikpLmpvaW4oJywnKSk7XG4gICAgY3N2LnVuc2hpZnQoaGVhZGVyTmFtZXMuam9pbignLCcpKTtcbiAgICBsZXQgY3N2QXJyYXkgPSBjc3Yuam9pbignXFxyXFxuJyk7XG5cbiAgICB2YXIgYmxvYiA9IG5ldyBCbG9iKFtjc3ZBcnJheV0sIHsgdHlwZTogJ3RleHQvY3N2JyB9KTtcbiAgICBzYXZlQXMoYmxvYiwgZmlsZW5hbWUgKyAnLmNzdicpO1xuICB9XG5cbiAgaXNQaWN0dXJlRm9ybWF0KGZpbGVOYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIWZpbGVOYW1lKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgUElDVFVSRV9GT1JNQVRTID0gWycuanBnJywgJy5qcGVnJywgJy5wbmcnLCAnLmdpZiddO1xuICAgIHJldHVybiBQSUNUVVJFX0ZPUk1BVFMuc29tZSgoZm9ybWF0KSA9PiBmaWxlTmFtZS5lbmRzV2l0aChmb3JtYXQpKTtcbiAgfVxuICBvYmplY3RUb0FycmF5PFQ+KG9iajogYW55KSB7XG4gICAgY29uc3QgcmV0ID0gW107XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICByZXQucHVzaChvYmpba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQgYXMgVFtdO1xuICB9XG4gIGZvcm1hdEZpZWxkKGZpZWxkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRvVGl0bGVDYXNlKGZpZWxkPy50b1NlbnRlbmNlQ2FzZSgpKTtcbiAgfVxuICAvKipcbiAgICogVXNlcyBhIHdlYiB3b3JrZXIgdG8gcGVyZm9ybSBhIHRhc2tcbiAgICogQGV4YW1wbGUgbmV3IFdvcmtlcihuZXcgVVJMKCcuL3VwbG9hZC1jc3Yud29ya2VyJywgaW1wb3J0Lm1ldGEudXJsKSlcbiAgICogQHBhcmFtIHdvcmtlciBXZWIgd29ya2VyIG9iamVjdFxuICAgKiBAcGFyYW0gaW5wdXREYXRhIERhdGEgYmVpbmcgcGFzc2VkIGludG8gd2ViIHdvcmtlclxuICAgKiBAcmV0dXJucyBEYXRhIGdvdHRlbiBmcm9tIHdlYiB3b3JrZXJcbiAgICovXG4gIHVzZVdlYldvcmtlcjxUID0gYW55Pih3b3JrZXI6IFdvcmtlciwgaW5wdXREYXRhOiBhbnksIGNvbmRpdGlvbnM/OiB7IHN0b3A6IChyZXMpID0+IGJvb2xlYW47IGVycm9yOiAocmVzKSA9PiBib29sZWFuIH0pIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8VD4oKHN1YikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBXb3JrZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKGlucHV0RGF0YSk7XG4gICAgICAgICAgd29ya2VyLm9ubWVzc2FnZSA9IChyKSA9PiB7XG4gICAgICAgICAgICAvLyBkZWJ1Z2dlclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coZSk7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gci5kYXRhO1xuICAgICAgICAgICAgaWYgKGNvbmRpdGlvbnMpIHtcbiAgICAgICAgICAgICAgaWYgKGNvbmRpdGlvbnMuZXJyb3IoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBzdWIuZXJyb3IoZGF0YSk7XG4gICAgICAgICAgICAgICAgc3ViLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmRpdGlvbnMuc3RvcChkYXRhKSkge1xuICAgICAgICAgICAgICAgIHN1Yi5uZXh0KGRhdGEpO1xuICAgICAgICAgICAgICAgIHN1Yi5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdWIubmV4dChkYXRhKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3ViLm5leHQoZGF0YSBhcyBhbnkpO1xuICAgICAgICAgICAgICBzdWIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgJ25vV29ya2VyJztcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgc3ViLmVycm9yKGUpO1xuICAgICAgICBzdWIuY29tcGxldGUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBhc3luYyBhcnJheVRvQ1NWKGRhdGE6IGFueVtdLCBmaWxlbmFtZTogc3RyaW5nLCBoZWFkZXJNYXA/OiBUYWJsZUNvbFtdLCBleHRyYUNvbmZpZz86IHsgcHJlZml4Pzogc3RyaW5nOyBoaWRlSGVhZGVyPzogYm9vbGVhbiB9KSB7XG4gICAgLy8gZGVidWdnZXI7XG4gICAgbGV0IF9kYXRhOiBhbnlbXTtcbiAgICBjb25zdCBoZWFkZXJNYXBXaXRoRm9ybWF0dGVyczogVGFibGVDb2xbXSA9IGhlYWRlck1hcD8uZmlsdGVyKCh4KSA9PiB4LmZvcm1hdHRlciB8fCB4LmZvcm1hdHRlclJvdykgfHwgdW5kZWZpbmVkO1xuICAgIGlmIChoZWFkZXJNYXBXaXRoRm9ybWF0dGVycz8ubGVuZ3RoKSB7XG4gICAgICBfZGF0YSA9IGNsb25lRGVlcChkYXRhKTtcbiAgICAgIGZvciAoY29uc3QgZm9ybWF0dGVyIG9mIGhlYWRlck1hcFdpdGhGb3JtYXR0ZXJzKSB7XG4gICAgICAgIGZvciAoY29uc3Qgcm93IG9mIF9kYXRhKSB7XG4gICAgICAgICAgcm93W2Zvcm1hdHRlci5mXSA9IGZvcm1hdHRlci5mb3JtYXR0ZXIgPyBhd2FpdCBmb3JtYXR0ZXIuZm9ybWF0dGVyKHJvd1tmb3JtYXR0ZXIuZl0pIDogZm9ybWF0dGVyLmZvcm1hdHRlclJvdyhyb3cpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIF9kYXRhID0gZGF0YTtcbiAgICB9XG4gICAgY29uc3Qgc2hvd0hlYWRlciA9ICFleHRyYUNvbmZpZz8uaGlkZUhlYWRlcjtcbiAgICBsZXQgY3N2ID0gUGFwYS51bnBhcnNlKF9kYXRhLCB7XG4gICAgICBoZWFkZXI6IHNob3dIZWFkZXIgJiYgIWhlYWRlck1hcD8ubGVuZ3RoLFxuICAgICAgY29sdW1uczogaGVhZGVyTWFwPy5tYXAoKHgpID0+IHguZj8udG9TdHJpbmcoKSkgfHwgdW5kZWZpbmVkLFxuICAgIH0pO1xuICAgIHRoaXMuZG93bmxvYWRlcihcbiAgICAgIChleHRyYUNvbmZpZz8ucHJlZml4ID8gZXh0cmFDb25maWc/LnByZWZpeCArICdcXHJcXG4nIDogJycpICtcbiAgICAgICAgKGhlYWRlck1hcD8ubGVuZ3RoID8gaGVhZGVyTWFwLm1hcCgoZmllbGROYW1lKSA9PiBmaWVsZE5hbWUudCkuam9pbignLCcpICsgYFxcclxcbmAgOiAnJykgK1xuICAgICAgICBjc3YsXG4gICAgICBmaWxlbmFtZT8uZW5kc1dpdGgoJy5jc3YnKSA/IGZpbGVuYW1lIDogZmlsZW5hbWUgKyAnLmNzdicsXG4gICAgKTtcblxuICAgIHRoaXMuaW5mbyhgRG93bmxvYWRlZCAke2ZpbGVuYW1lfWApO1xuICB9XG5cbiAgam9pbkNTVlJvd3MoLi4uQ1NWczogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gQ1NWcy5qb2luKCdcXHJcXG4nKTtcbiAgfVxuICBhc3luYyBhcnJheVRvQ1NWU3RyaW5nPFQgPSBhbnk+KGRhdGE6IFRbXSwgaGVhZGVyTWFwPzogVGFibGVDb2w8VD5bXSwgZXh0cmFDb25maWc/OiB7IHByZWZpeD86IHN0cmluZzsgaGlkZUhlYWRlcj86IGJvb2xlYW4gfSkge1xuICAgIC8vIGRlYnVnZ2VyO1xuICAgIGxldCBfZGF0YTogYW55W107XG4gICAgY29uc3QgaGVhZGVyTWFwV2l0aEZvcm1hdHRlcnM6IFRhYmxlQ29sW10gPSBoZWFkZXJNYXA/LmZpbHRlcigoeCkgPT4geC5mb3JtYXR0ZXIgfHwgeC5mb3JtYXR0ZXJSb3cpIHx8IHVuZGVmaW5lZDtcbiAgICBpZiAoaGVhZGVyTWFwV2l0aEZvcm1hdHRlcnM/Lmxlbmd0aCkge1xuICAgICAgX2RhdGEgPSBjbG9uZURlZXAoZGF0YSk7XG4gICAgICBmb3IgKGNvbnN0IGZvcm1hdHRlciBvZiBoZWFkZXJNYXBXaXRoRm9ybWF0dGVycykge1xuICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiBfZGF0YSkge1xuICAgICAgICAgIHJvd1tmb3JtYXR0ZXIuZl0gPSBmb3JtYXR0ZXIuZm9ybWF0dGVyID8gYXdhaXQgZm9ybWF0dGVyLmZvcm1hdHRlcihyb3dbZm9ybWF0dGVyLmZdKSA6IGZvcm1hdHRlci5mb3JtYXR0ZXJSb3cocm93KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBfZGF0YSA9IGRhdGE7XG4gICAgfVxuICAgIGNvbnN0IHNob3dIZWFkZXIgPSAhZXh0cmFDb25maWc/LmhpZGVIZWFkZXI7XG4gICAgbGV0IGNzdiA9IFBhcGEudW5wYXJzZShfZGF0YSwge1xuICAgICAgaGVhZGVyOiBzaG93SGVhZGVyICYmICFoZWFkZXJNYXA/Lmxlbmd0aCxcbiAgICAgIGNvbHVtbnM6IGhlYWRlck1hcD8ubWFwKCh4KSA9PiB4LmY/LnRvU3RyaW5nKCkpIHx8IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgICByZXR1cm4gKFxuICAgICAgKGV4dHJhQ29uZmlnPy5wcmVmaXggPyBleHRyYUNvbmZpZz8ucHJlZml4ICsgJ1xcclxcbicgOiAnJykgK1xuICAgICAgKGhlYWRlck1hcD8ubGVuZ3RoID8gaGVhZGVyTWFwLm1hcCgoZmllbGROYW1lKSA9PiBmaWVsZE5hbWUudCkuam9pbignLCcpICsgYFxcclxcbmAgOiAnJykgK1xuICAgICAgY3N2XG4gICAgKTtcbiAgfVxuXG4gIGlzRGF0ZVZhbHVlID0gKHYpID0+ICh2ID8gdls0XSA9PSAnLScgJiYgdls3XSA9PSAnLScgOiBmYWxzZSk7XG4gIGlzRGF0VGltZVZhbHVlID0gKHYpID0+ICh2ID8gdi5pbmNsdWRlcygnVCcpICYmIHZbNF0gPT0gJy0nICYmIHZbN10gPT0gJy0nIDogZmFsc2UpO1xuXG4gIHllc05vQ2VsbEZvcm1hdHRlckNvbG91cmVkID0gKHYpID0+IGA8c3BhbiBjbGFzcz0nJHt2ID8gJ3N1Y2Nlc3NDZWxsJyA6ICdpbmVydENlbGwnfSc+JHt2ID8gJ1llcycgOiB2ID09IGZhbHNlID8gJ05vJyA6ICctJ308L3NwYW4+YDtcbiAgeWVzTm9DZWxsRm9ybWF0dGVyID0gKHYpID0+IGAke3YgPyAnWWVzJyA6ICdObyd9YDtcbiAgc3RhdHVzQ2VsbEZvcm1hdHRlciA9IChzdGF0dXM6IFN0YXR1cykgPT5cbiAgICBgPHNwYW4gY2xhc3M9JyR7c3RhdHVzID09ICdDT01QTEVURUQnID8gJ3N1Y2Nlc3NDZWxsJyA6IHN0YXR1cyA9PSAnUEVORElORycgPyAncGVuZGluZ0NlbGwnIDogJ2luZXJ0Q2VsbCd9Jz4ke3N0YXR1cyB8fCAnLSd9PC9zcGFuPmA7XG5cbiAgY2VsbFN0YXR1c0Zvcm1hdHRlciA9XG4gICAgPFQgPSBhbnk+KGd1aWRlOiB7IHN1Y2Nlc3NWYWw/OiBUOyBwZW5kaW5nVmFsPzogVDsgZXJyb3JWYWw/OiBUOyBpbmVydFZhbD86IFQgfSkgPT5cbiAgICAodikgPT5cbiAgICAgIGA8c3BhbiBjbGFzcz0nJHtcbiAgICAgICAgdiA9PSBndWlkZS5zdWNjZXNzVmFsID8gJ3N1Y2Nlc3NDZWxsJyA6IHYgPT0gZ3VpZGUucGVuZGluZ1ZhbCA/ICdwZW5kaW5nQ2VsbCcgOiB2ID09IGd1aWRlLmVycm9yVmFsID8gJ2Vycm9yQ2VsbCcgOiAnaW5lcnRDZWxsJ1xuICAgICAgfSc+JHt2fTwvc3Bhbj5gO1xuXG4gIGdlbmVyYXRlVVVJRCgpIHtcbiAgICBsZXQgZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIGxldCBkMiA9ICh0eXBlb2YgcGVyZm9ybWFuY2UgIT09ICd1bmRlZmluZWQnICYmIHBlcmZvcm1hbmNlLm5vdyAmJiBwZXJmb3JtYW5jZS5ub3coKSAqIDEwMDApIHx8IDA7IC8vVGltZSBpbiBtaWNyb3NlY29uZHMgc2luY2UgcGFnZS1sb2FkIG9yIDAgaWYgdW5zdXBwb3J0ZWRcbiAgICByZXR1cm4gJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCAoYykgPT4ge1xuICAgICAgbGV0IHIgPSBNYXRoLnJhbmRvbSgpICogMTY7IC8vcmFuZG9tIG51bWJlciBiZXR3ZWVuIDAgYW5kIDE2XG4gICAgICBpZiAoZCA+IDApIHtcbiAgICAgICAgLy9Vc2UgdGltZXN0YW1wIHVudGlsIGRlcGxldGVkXG4gICAgICAgIHIgPSAoZCArIHIpICUgMTYgfCAwO1xuICAgICAgICBkID0gTWF0aC5mbG9vcihkIC8gMTYpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy9Vc2UgbWljcm9zZWNvbmRzIHNpbmNlIHBhZ2UtbG9hZCBpZiBzdXBwb3J0ZWRcbiAgICAgICAgciA9IChkMiArIHIpICUgMTYgfCAwO1xuICAgICAgICBkMiA9IE1hdGguZmxvb3IoZDIgLyAxNik7XG4gICAgICB9XG4gICAgICByZXR1cm4gKGMgPT09ICd4JyA/IHIgOiAociAmIDB4MykgfCAweDgpLnRvU3RyaW5nKDE2KTtcbiAgICB9KTtcbiAgfVxuXG4gIGluZm86ICh0ZXh0OiBzdHJpbmcsIHN0YXR1cz86IDAgfCAyIHwgMSwgaGVhZGluZz86IHN0cmluZywgYnRucz86IElJbmZvRGlhbG9nQnRuW10sIGRpc2FibGVDbG9zZT86IGJvb2xlYW4pID0+IFByb21pc2U8Ym9vbGVhbj47XG4gIGRlYm91bmNlciA9IHRoaXMuZGVib3VuY2VyU2VydmljZS5kZWJvdW5jZXI7XG5cbiAgYXN5bmNWYWxpZGF0aW9uID0gdGhpcy5kZWJvdW5jZXJTZXJ2aWNlLmFzeW5jVmFsaWRhdGlvbjtcblxuICBzdGFydFBsID0gdGhpcy5wUy5zdGFydFBsO1xuICBzdG9wUGwgPSB0aGlzLnBTLnN0b3BQbDtcblxuICBjcmVhdGVTdWJzY3JpcHRpb25NYW5hZ2VyID0gKC4uLnN1YnM6IFN1YnNjcmlwdGlvbltdKSA9PiB7XG4gICAgbGV0IF9zdWJzOiBTdWJzY3JpcHRpb25bXSA9IHN1YnMgfHwgW107XG4gICAgY29uc3QgY2xlYXIgPSAoKSA9PiB7XG4gICAgICBfc3Vicy5mb3JFYWNoKCh4KSA9PiB4LnVuc3Vic2NyaWJlKCkpO1xuICAgICAgX3N1YnMgPSBbXTtcbiAgICB9O1xuICAgIGNvbnN0IHB1c2ggPSAoLi4uc3ViczogU3Vic2NyaXB0aW9uW10pID0+IHtcbiAgICAgIF9zdWJzLnB1c2goLi4uc3Vicyk7XG4gICAgfTtcblxuICAgIHJldHVybiB7IGNsZWFyLCBwdXNoIH07XG4gIH07XG5cbiAgY3JlYXRlQ2FjaGVNYW5hZ2VyID0gKCkgPT4ge1xuICAgIGxldCBfY2FjaGU6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBjb25zdCBjbGVhciA9ICgpID0+IHtcbiAgICAgIF9jYWNoZSA9IHt9O1xuICAgIH07XG4gICAgY29uc3QgZHJvcCA9ICgpID0+IHtcbiAgICAgIF9jYWNoZSA9IHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIGNvbnN0IHNhdmUgPSAoa2V5OiBzdHJpbmcsIGRhdGE6IGFueSkgPT4ge1xuICAgICAgaWYgKCFfY2FjaGUpIF9jYWNoZSA9IHt9O1xuICAgICAgX2NhY2hlW2tleV0gPSBkYXRhO1xuICAgIH07XG4gICAgY29uc3QgZ2V0ID0gPFQ+KGtleTogc3RyaW5nKSA9PiBfY2FjaGU/LltrZXldIGFzIFQ7XG5cbiAgICByZXR1cm4geyBjbGVhciwgZHJvcCwgZ2V0LCBzYXZlIH07XG4gIH07XG5cbiAgdHJhY2tCeUN1c3RvbUlEID0gKGluZGV4LCBpdGVtKSA9PiB7XG4gICAgaWYgKCFpdGVtW3RoaXMuY3VzdG9tSURGaWVsZF0pIHtcbiAgICAgIGl0ZW1bdGhpcy5jdXN0b21JREZpZWxkXSA9IHRoaXMuZ2VuZXJhdGVVVUlEKCk7XG4gICAgICBjb25zb2xlLmxvZygnc2V0IGN1c3RvbSBpZCcpO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbVt0aGlzLmN1c3RvbUlERmllbGRdO1xuICB9O1xuICB0cmFja0J5Rm9yRm9ybXMgPSAoaW5kZXgsIGl0ZW06IEZvcm1Hcm91cCkgPT4ge1xuICAgIGlmICghaXRlbS5jb250cm9sc1t0aGlzLmN1c3RvbUlERmllbGRdKSBpdGVtLmFkZENvbnRyb2wodGhpcy5jdXN0b21JREZpZWxkLCBuZXcgRm9ybUNvbnRyb2wodGhpcy5nZW5lcmF0ZVVVSUQoKSkpO1xuICAgIHJldHVybiBpdGVtLmNvbnRyb2xzW3RoaXMuY3VzdG9tSURGaWVsZF0udmFsdWU7XG4gIH07XG4gIG9iamVjdFRvRm9ybUdyb3VwID0gPFQ+KGRhdGE6IFQpID0+IHtcbiAgICBjb25zdCBmb3JtID0gbmV3IEZvcm1Hcm91cDxJU3RyaWN0Rm9ybUdyb3VwPFQ+Pih7fSBhcyBhbnkpO1xuICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSkgZm9ybS5hZGRDb250cm9sKGtleSwgbmV3IEZvcm1Db250cm9sKGRhdGFba2V5XSkpO1xuICAgIHJldHVybiBmb3JtO1xuICB9O1xuXG4gIGZvcm1TY2hlbWFUb0Zvcm1Hcm91cCA9IDxUIGV4dGVuZHMgeyBbeDogc3RyaW5nXTogYW55IH0+KHNjaGVtYTogSUZvcm1TY2hlbWFbXSwgZGF0YT86IFQpID0+IHtcbiAgICBjb25zdCBmb3JtID0gbmV3IEZvcm1Hcm91cDxJU3RyaWN0Rm9ybUdyb3VwPFQ+Pih7fSBhcyBhbnkpO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBzY2hlbWEpIGZvcm0uYWRkQ29udHJvbChpdGVtLmZpZWxkLnRvU3RyaW5nKCksIG5ldyBGb3JtQ29udHJvbChkYXRhW2l0ZW0uZmllbGQudG9TdHJpbmcoKV0pKTtcbiAgICByZXR1cm4gZm9ybTtcbiAgfTtcblxuICB0aW1lQ29kZUJsb2NrID0gPFQ+KGxhYmVsOiBzdHJpbmcsIGNiOiAoKSA9PiBUKSA9PiB7XG4gICAgY29uc3Qgc3RhcnRUSW1lID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCByZXMgPSBjYigpO1xuICAgIGNvbnN0IGVuZFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIGNvbnNvbGUubG9nKGxhYmVsLCBzdGFydFRJbWUsIGVuZFRpbWUsIChlbmRUaW1lIC0gc3RhcnRUSW1lKSAvIDEwMDAgKyAnc2VjJyk7XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICAvKipcbiAgICogRGVsZXRlIG51bGwgb3IgdW5kZWZpbmVkIGZpZWxkcyBmcm9tIGFuIG9iamVjdFxuICAgKiBAcGFyYW0gb2JqIE9iamVjdCB0byBkZWxldGUgZnJvbVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZGVsZXRlTnVsbCA9IDxUPihvYmo6IFQpID0+IHtcbiAgICBjb25zdCByZXQ6IFQgPSB7fSBhcyBhbnk7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAob2JqW2tleV0gPT09IG51bGwgfHwgb2JqW2tleV0gPT09IHVuZGVmaW5lZCB8fCBvYmpba2V5XSA9PT0gJycpIGNvbnRpbnVlO1xuICAgICAgZWxzZSByZXRba2V5XSA9IG9ialtrZXldO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9O1xufVxuIl19
|
|
783
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0eS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXRzLWZlLW5nLXNkay9zcmMvbGliL1NlcnZpY2VzL3V0aWxpdHkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9GLE9BQU8sRUFBVSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsU0FBUyxJQUFJLFNBQVMsRUFBc0MsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RyxPQUFPLEVBQUUsV0FBVyxJQUFJLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFvQixjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsMkJBQTJCLElBQUksR0FBRyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckUsT0FBTyxHQUFHLE1BQU0sa0JBQWtCLENBQUM7QUFDbkMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLElBQUksTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbkUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFzQyxNQUFNLDhCQUE4QixDQUFDO0FBQ25HLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUE4QixX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LENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDbkUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLGdDQUFnQztZQUM1RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ1QsOEJBQThCO2dCQUM5QixDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDckIsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2FBQ3hCO2lCQUFNO2dCQUNMLCtDQUErQztnQkFDL0MsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3RCLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQzthQUMxQjtZQUNELE9BQU8sQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBN3NCVSxjQUFjO2tIQUFkLGNBQWMsY0FERCxNQUFNOzsyRkFDbkIsY0FBYztrQkFEMUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdXJyZW5jeVBpcGUsIERhdGVQaXBlLCBEZWNpbWFsUGlwZSwgTG9jYXRpb24sIFRpdGxlQ2FzZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBpbmplY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIGFzIE1hdERpYWxvZywgTWF0RGlhbG9nQ29uZmlnIGFzIE1hdERpYWxvZ0NvbmZpZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRTbmFja0JhciBhcyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgUm91dGVyLCBOYXZpZ2F0aW9uRXh0cmFzLCBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBFVFNSZWFjdGl2ZUZvcm1JbnB1dFNlcnZpY2UgYXMgSVMxIH0gZnJvbSAnLi9pbnB1dC5zZXJ2aWNlJztcbmltcG9ydCBqZmQgZnJvbSAnanMtZmlsZS1kb3dubG9hZCc7XG5pbXBvcnQgeyBQYWdlTG9hZGVyU2VydmljZSB9IGZyb20gJy4vcGFnZS1sb2FkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBDb25maWcsIENvbmZpZyBhcyBjb25maWcgfSBmcm9tICcuLi9jb25maWdzL2luZGV4LmNvbmZpZyc7XG5pbXBvcnQgeyBBcHBSb3V0ZUJhc2UgfSBmcm9tICcuLi9TaGFyZWQvbW9kZWxzL1JvdXRlSXRlbS5jbGFzcyc7XG5pbXBvcnQgeyBzYXZlQXMgfSBmcm9tICdmaWxlLXNhdmVyJztcbmltcG9ydCB7IEVWYWxpZGF0aW9uVHlwZSwgSVN0cmljdEZvcm1Hcm91cCwgU3RhdHVzLCBUYWJsZUNvbCB9IGZyb20gJy4uL1NoYXJlZC9tb2RlbHMvaW5kZXgubW9kZWwnO1xuaW1wb3J0IHsgZW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgUGFnZVNlcnZpY2UgfSBmcm9tICcuL3BhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVW50eXBlZEZvcm1BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IExvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi9SZXVzYWJsZXMvcmV1c2FibGUtcGFnZXMvbG9nZ2VyL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgaXNPYnNlcnZhYmxlLCBsYXN0VmFsdWVGcm9tLCBtZXJnZSwgT2JzZXJ2YWJsZSwgb2YsIFJlcGxheVN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRUVUU1BhZ2VCdG5JRCB9IGZyb20gJy4uL1NoYXJlZC9tb2RlbHMvSU1lbnVJdGVtJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU0RLRW52aXJvbm1lbnQgfSBmcm9tICcuLi9TaGFyZWQvbW9kZWxzL2Vudmlyb25tZW50Lm1vZGVsJztcbmltcG9ydCB7IEJyZWFrcG9pbnRPYnNlcnZlciwgQnJlYWtwb2ludHMgfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcbmltcG9ydCB7IERlYm91bmNlclNlcnZpY2UgfSBmcm9tICcuL2RlYm91bmNlci5zZXJ2aWNlJztcbmltcG9ydCB7IElGb3JtU2NoZW1hIH0gZnJvbSAnLi4vU2hhcmVkL2NvbXBvbmVudHMvZm9ybS1nZW5lcmF0b3IvZm9ybS1nZW5lcmF0b3IuY29tcG9uZW50JztcbmltcG9ydCBQYXBhIGZyb20gJ3BhcGFwYXJzZSc7XG5pbXBvcnQgeyBJSW5mb0RpYWxvZ0J0biB9IGZyb20gJy4uL1NoYXJlZC9jb21wb25lbnRzL2luZm8tZGlhbG9nL2luZm8tZGlhbG9nLmNvbXBvbmVudCc7XG5kZWNsYXJlIGNvbnN0ICQ6IGFueTtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBVdGlsaXR5U2VydmljZTxURW52aXJvbm1lbnQgZXh0ZW5kcyBTREtFbnZpcm9ubWVudCA9IFNES0Vudmlyb25tZW50PiB7XG4gIHI6IEFwcFJvdXRlQmFzZTtcbiAgZG93bmxvYWRlciA9IGpmZDtcbiAgZVZhbGlkYXRpb25UeXBlID0gRVZhbGlkYXRpb25UeXBlO1xuICBjb25maWcgPSBDb25maWc7XG4gIGVudmlyb25tZW50OiBURW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudCBhcyBhbnk7XG4gIHBiaWQgPSBFRVRTUGFnZUJ0bklEO1xuICAkOiBhbnk7XG4gIGlzTW9iaWxlOiBib29sZWFuO1xuICBpc01vYmlsZVNpZ25hbCA9IHNpZ25hbDxib29sZWFuPih1bmRlZmluZWQpO1xuICBwYWdlU2l6ZU9wdGlvbnMgPSBbNSwgMTAsIDE1LCAyMCwgNTAsIDEwMCwgMjAwLCA1MDAsIDEwMDBdO1xuICBkYXRlUGlwZURhdGUgPSAnRUUsIE1NTU0gZCwgeSc7XG4gIGRhdGVQaXBlRGF0ZUxlYW4gPSAnRUUsIE1NTSBkLCB5JztcbiAgZGF0ZVBpcGVEYXRlVGltZUxlYW4gPSAnRUUsIE1NTSBkLCB5IGhoOm1tIGEnO1xuICByZWFkb25seSBjdXN0b21JREZpZWxkID0gJ19faWQnO1xuICByZWFkb25seSBkZWxpbWl0ZXIgPSBgfn5+Ly9+fn5gO1xuICAvKipcbiAgICogRW1pdHMgdHJ1ZSBpZiBtb2JpbGVcbiAgICovXG4gIG1vYmlsZVF1ZXJ5Q2hhbmdlZCA9IG5ldyBSZXBsYXlTdWJqZWN0PGJvb2xlYW4+KCk7XG4gIHB1YmxpYyBkaWFsb2cgPSBpbmplY3QoTWF0RGlhbG9nKTtcbiAgcHVibGljIHNuYWNrQmFyID0gaW5qZWN0KE1hdFNuYWNrQmFyKTtcbiAgcHVibGljIHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBwdWJsaWMgdGl0bGVTID0gaW5qZWN0KFRpdGxlKTtcbiAgcHVibGljIGxvY2F0aW9uID0gaW5qZWN0KExvY2F0aW9uKTtcbiAgcHVibGljIGlucHV0U2VydmljZSA9IGluamVjdChJUzEpO1xuICBwdWJsaWMgcFMgPSBpbmplY3QoUGFnZUxvYWRlclNlcnZpY2UpO1xuICBwdWJsaWMgY3VycmVuY3lQaXBlID0gaW5qZWN0KEN1cnJlbmN5UGlwZSk7XG4gIHB1YmxpYyB0aXRsZUNhc2VQaXBlID0gaW5qZWN0KFRpdGxlQ2FzZVBpcGUpO1xuICBwdWJsaWMgbG9nZ2VyU2VydmljZSA9IGluamVjdChMb2dnZXJTZXJ2aWNlKTtcbiAgcHVibGljIHBhZ2VTID0gaW5qZWN0KFBhZ2VTZXJ2aWNlKTtcbiAgcHVibGljIHJlc3BvbnNpdmUgPSBpbmplY3QoQnJlYWtwb2ludE9ic2VydmVyKTtcbiAgcHVibGljIGRhdGVQaXBlID0gaW5qZWN0KERhdGVQaXBlKTtcbiAgcHVibGljIGRlYm91bmNlclNlcnZpY2UgPSBpbmplY3QoRGVib3VuY2VyU2VydmljZSk7XG4gIHB1YmxpYyBudW1iZXJQaXBlID0gaW5qZWN0KERlY2ltYWxQaXBlKTtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5yZXNwb25zaXZlLm9ic2VydmUoW0JyZWFrcG9pbnRzLkhhbmRzZXRQb3J0cmFpdF0pLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBjb25zdCBicmVha3BvaW50cyA9IHJlc3VsdC5icmVha3BvaW50cztcblxuICAgICAgaWYgKGJyZWFrcG9pbnRzW0JyZWFrcG9pbnRzLkhhbmRzZXRQb3J0cmFpdF0pIHtcbiAgICAgICAgdGhpcy5pc01vYmlsZSA9IHRydWU7XG4gICAgICAgIHRoaXMuaXNNb2JpbGVTaWduYWwuc2V0KHRydWUpO1xuICAgICAgICB0aGlzLm1vYmlsZVF1ZXJ5Q2hhbmdlZC5uZXh0KHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pc01vYmlsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzTW9iaWxlU2lnbmFsLnNldChmYWxzZSk7XG4gICAgICAgIHRoaXMubW9iaWxlUXVlcnlDaGFuZ2VkLm5leHQoZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIGlmICgkKSB0aGlzLiQgPSAkO1xuICB9XG5cbiAgYmFjayA9ICgpID0+IHRoaXMubG9jYXRpb24uYmFjaygpO1xuXG4gIG9ubHlPbmVJbnB1dChpbnB1dHM6IEZvcm1Db250cm9sW10pIHtcbiAgICBjb25zdCBuSW5wdXRzID0gaW5wdXRzPy5tYXAoKGlucCkgPT4gKHsgaWQ6IHRoaXMuZ2VuUmFuZG9tSUQsIGlucCB9KSkgfHwgW107XG4gICAgcmV0dXJuIG1lcmdlKC4uLm5JbnB1dHMubWFwKChpKSA9PiBpLmlucC52YWx1ZUNoYW5nZXMucGlwZShtYXAoKHZhbCkgPT4gKHsgaWQ6IGkuaWQsIHZhbCB9KSkpKSkuc3Vic2NyaWJlKChyKSA9PiB7XG4gICAgICAvLyBkZWJ1Z2dlclxuICAgICAgaWYgKHIudmFsKSBuSW5wdXRzLmZpbHRlcigoeCkgPT4geC5pZCAhPSByLmlkKS5mb3JFYWNoKCh4KSA9PiB4LmlucC5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KSk7XG4gICAgICBlbHNlIG5JbnB1dHMuZmlsdGVyKCh4KSA9PiB4LmlkICE9IHIuaWQpLmZvckVhY2goKHgpID0+IHguaW5wLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSkpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgY29weVBheWxvYWQocGF5bG9hZCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoKDxTREtFbnZpcm9ubWVudD50aGlzLmVudmlyb25tZW50KS5kZWJ1Zykge1xuICAgICAgICBjb25zdCBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcbiAgICAgICAgZWxlbS52YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVsZW0pO1xuICAgICAgICBlbGVtLnNlbGVjdCgpO1xuICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGVsZW0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxuICB9XG4gIHhPclkgPSAoeCwgeSA9ICctJykgPT4gYCR7eCA9PSBudWxsID8geSA6IHh9YDtcbiAgdG9UaXRsZUNhc2UodGV4dDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMudGl0bGVDYXNlUGlwZS50cmFuc2Zvcm0odGV4dCk7XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnQgRGF0ZSBzdHJpbmcgdG8gRGF0ZSBUaW1lIHN0cmluZ1xuICAgKiBAcGFyYW0gZGF0ZVN0ciBEYXRlIHN0cmluZ1xuICAgKiBAZXhhbXBsZSAnMjAyMi0wMS0yNSdcbiAgICogQHBhcmFtIGNvbmZpZyBDb25maWd1cmF0aW9uIGZvciB0aGUgY29udmVyc2lvblxuICAgKiBAcmV0dXJucyBSZXR1cm5zIGEgRGF0ZSBUaW1lIHN0cmluZ1xuICAgKiBAZXhhbXBsZSAnMjAyMi0wMS0yNVQwMDowMDowMFonIG9yICcyMDIyLTAxLTI1IDAwOjAwOjAwJ1xuICAgKi9cbiAgZGF0ZVRvRGF0ZVRpbWUgPSAoXG4gICAgZGF0ZVN0cjogc3RyaW5nLFxuICAgIGNvbmZpZz86IHtcbiAgICAgIC8qKlxuICAgICAgICogVXNlIHRoZSB5eXl5LW1tLWRkIGhoOm1tOnNzIGZvcm1hdFxuICAgICAgICovXG4gICAgICBvbWl0VD86IGJvb2xlYW47XG4gICAgICAvKipUaW1lIHRvIGFwcGVuZCB0byBkYXRlLiBAZXhhbXBsZSBgMTI6MDA6MDBaYCAqL1xuICAgICAgdGltZT86IHN0cmluZztcbiAgICB9LFxuICApID0+IHtcbiAgICByZXR1cm4gIWRhdGVTdHJcbiAgICAgID8gbnVsbFxuICAgICAgOiBkYXRlU3RyWzEwXSA9PSAnVCdcbiAgICAgICAgPyBkYXRlU3RyXG4gICAgICAgIDogZGF0ZVN0ciArICghIWNvbmZpZz8ub21pdFQgPyBgICR7Y29uZmlnPy50aW1lIHx8ICcwMDowMDowMCd9YCA6IGBUJHtjb25maWc/LnRpbWUgfHwgJzAwOjAwOjAwWid9YCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFNldCBhbiBPYmplY3QncyBmaWVsZCBpZiB0aGUgb2JqZWN0IGV4aXN0cyBvciBkb24ndCBpZiB0aGUgb2JqZWN0IGRvZXNuJ3RcbiAgICogQHBhcmFtIG9iaiBPYmplY3QgaG9sZGluZyB0aGUgZmllbGRcbiAgICogQHBhcmFtIGZpZWxkTmFtZSBOYW1lIG9mIHRoZSBmaWVsZCB0byBzZXRcbiAgICogQHBhcmFtIHZhbCBWYWx1ZSB0byBzZXQgdGhlIGZpZWxkIHdpdGhcbiAgICogQHJldHVybnMgUmV0dXJucyB0aGUgb2JqZWN0IGhvbGRpbmcgdGhlIGRhdGFcbiAgICovXG4gIHNldHRlcldpdGhOdWxsPFQ+KG9iajogVCwga3ZwczogUGFydGlhbDxUPikge1xuICAgIGlmICghb2JqKSByZXR1cm4gbnVsbDtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBrdnBzKSB7XG4gICAgICBvYmpba2V5XSA9IGt2cHNba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIC8qKlxuICAgKiAoU2V0IGFuIE9iamVjdCdzIGZpZWxkIGlmIHRoZSBvYmplY3QgZXhpc3RzIG9yIGRvbid0IGlmIHRoZSBvYmplY3QgZG9lc24ndCkgZm9yIG11bHRpcGxlIGVudHJpZXNcbiAgICogQHBhcmFtIGl0ZW1zIEFycmF5IG9mIG9iamVjdHMgYW5kIHRoZWlyIG1vZGlmaWNhdGlvbnNcbiAgICovXG4gIHNldHRlcldpdGhOdWxsQXJyYXk8VD4oaXRlbXM6IHsgb2JqOiBUOyBrdnBzOiBQYXJ0aWFsPFQ+IH1bXSkge1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgdGhpcy5zZXR0ZXJXaXRoTnVsbChpdGVtLm9iaiwgaXRlbS5rdnBzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgZGVsZXRpb24gb2Ygcm93cyBmcm9tIGEgRm9ybUFycmF5XG4gICAqIEBwYXJhbSBpbmRleCBJbmRleCBvZiB0aGUgcm93IHRvIGRlbGV0ZVxuICAgKiBAcGFyYW0gZmEgVGhlIEZvcm1BcnJheSB0aGF0IGhvbGRzIHRoZSByb3dzXG4gICAqIEBwYXJhbSBkZWxldGVTZXJ2aWNlIFRoZSBkZWxldGlvbiBzZXJ2aWNlIHRvIGJlIGNhbGxlZCAoSXQgc2hvdWxkIGJlIGFuIGFub255bW91cyBmdW5jdGlvbilcbiAgICogQHBhcmFtIGFkZFJvd0Z1bmMgVGhlIGZ1bmN0aW9uIChhbm9ueW1vdXMpIHRoYXQgYWRkcyBhIG5ldyByb3cgdG8gdGhlIEZvcm1BcnJheVxuICAgKiBAcGFyYW0gZW1pdEV2ZW50IFNwZWNpZnkgd2hldGhlciB0byBlbWl0IGFuIGV2ZW50IHdoZW4gbWFuaXB1bGF0aW5nIHRoZSBGb3JtQXJyYXlcbiAgICogQHJldHVybnNcbiAgICovXG4gIGhhbmRsZUZvcm1Sb3dEZWxldGUgPSAoXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBmYTogVW50eXBlZEZvcm1BcnJheSxcbiAgICBkZWxldGVTZXJ2aWNlOiAoLi4uYXJncykgPT4gUHJvbWlzZTxhbnk+IHwgT2JzZXJ2YWJsZTxhbnk+LFxuICAgIGFkZFJvd0Z1bmM6ICguLi5hcmdzKSA9PiBhbnksXG4gICAgZXh0cmFDb25maWc/OiB7XG4gICAgICBkb250RW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgICAgIG9uRGVsZXRlPzogKHJlcykgPT4gYW55O1xuICAgIH0sXG4gICkgPT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCBpZCA9IGNsb25lRGVlcChmYS5jb250cm9sc1tpbmRleF0/LnZhbHVlPy5pZCk7XG4gICAgICAvLyBkZWJ1Z2dlcjtcbiAgICAgIGlmIChmYS5jb250cm9scy5sZW5ndGggPT0gMSAmJiBpZCkge1xuICAgICAgICBmYS5yZW1vdmVBdChpbmRleCwgeyBlbWl0RXZlbnQ6ICFleHRyYUNvbmZpZz8uZG9udEVtaXRFdmVudCB9KTtcbiAgICAgICAgYWRkUm93RnVuYygpO1xuICAgICAgfSBlbHNlIGlmIChmYS5jb250cm9scy5sZW5ndGggPiAxKSBmYS5yZW1vdmVBdChpbmRleCwgeyBlbWl0RXZlbnQ6ICFleHRyYUNvbmZpZz8uZG9udEVtaXRFdmVudCB9KTtcbiAgICAgIGVsc2UgaWYgKGZhLmNvbnRyb2xzLmxlbmd0aCA9PSAxKSBmYS5jb250cm9sc1swXS5yZXNldCgpO1xuXG4gICAgICBpZiAoaWQgJiYgZGVsZXRlU2VydmljZSkge1xuICAgICAgICBjb25zdCByZXEgPSBkZWxldGVTZXJ2aWNlKGlkKTtcbiAgICAgICAgaWYgKHJlcVsndG9Qcm9taXNlJ10pIHtcbiAgICAgICAgICByZXNvbHZlKGxhc3RWYWx1ZUZyb20ocmVxIGFzIE9ic2VydmFibGU8YW55PikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUocmVxIGFzIGFueSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICB9XG4gICAgfSkudGhlbigocikgPT4ge1xuICAgICAgZXh0cmFDb25maWc/Lm9uRGVsZXRlKHIpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIGRlbGV0aW9uIG9mIHJvd3MgZnJvbSBhbiBhcnJheVxuICAgKiBAcGFyYW0gaW5kZXggSW5kZXggb2YgdGhlIHJvdyB0byBkZWxldGVcbiAgICogQHBhcmFtIGFyciBUaGUgYXJyYXkgdGhhdCBob2xkcyB0aGUgcm93c1xuICAgKiBAcGFyYW0gZGVsZXRlU2VydmljZSBUaGUgZGVsZXRpb24gc2VydmljZSB0byBiZSBjYWxsZWQgKEl0IHNob3VsZCBiZSBhbiBhbm9ueW1vdXMgZnVuY3Rpb24pXG4gICAqIEBwYXJhbSBhZGRSb3dGdW5jIFRoZSBmdW5jdGlvbiAoYW5vbnltb3VzKSB0aGF0IGFkZHMgYSBuZXcgcm93IHRvIHRoZSBhcnJheVxuICAgKiBAcGFyYW0gY2IgVGhlIGZ1bmN0aW9uIHRvIGNhbGxiYWNrIHdpdGggdGhlIHJlc3BvbnNlIG9mIHRoZSBkZWxldGlvbiBzZXJ2aWNlIGFzIHRoZSBpbnB1dCBwYXJhbWV0ZXJcbiAgICovXG4gIGhhbmRsZVJvd0RlbGV0ZSA9IGFzeW5jIDxUPihcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGFycjogYW55W10sXG4gICAgZGVsZXRlU2VydmljZTogKC4uLmFyZ3MpID0+IFByb21pc2U8VD4gfCBPYnNlcnZhYmxlPFQ+LFxuICAgIGFkZFJvd0Z1bmM6ICguLi5hcmdzKSA9PiBhbnksXG4gICAgY2I/OiAoYW55KSA9PiBhbnksXG4gICkgPT4ge1xuICAgIGNvbnN0IGlkID0gYXJyW2luZGV4XT8uaWQ7XG4gICAgLy8gZGVidWdnZXI7XG5cbiAgICBpZiAoaWQgJiYgZGVsZXRlU2VydmljZSkge1xuICAgICAgY29uc3QgcmVxID0gZGVsZXRlU2VydmljZShpZCk7XG4gICAgICBpZiAodHlwZW9mIHJlcVsndG9Qcm9taXNlJ10gPT0gJ2Z1bmN0aW9uJykgY2IgPyBjYihhd2FpdCByZXFbJ3RvUHJvbWlzZSddKCkpIDogcmVxWyd0b1Byb21pc2UnXSgpO1xuICAgICAgZWxzZSBjYiA/IGNiKGF3YWl0IHJlcSkgOiBudWxsO1xuICAgIH1cblxuICAgIGlmIChhcnIubGVuZ3RoID09IDEpIHtcbiAgICAgIGFyci5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgYWRkUm93RnVuYygpO1xuICAgIH0gZWxzZSBpZiAoYXJyLmxlbmd0aCA+IDEpIGFyci5zcGxpY2UoaW5kZXgsIDEpO1xuICB9O1xuICAvKipcbiAgICogVG8gaGFuZGxlIHRoZSBwYXRjaGluZyBvZiBhIEZvcm1BcnJheVxuICAgKiBAcGFyYW0gYXJyIFRoZSBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSBkYXRhXG4gICAqIEBwYXJhbSBhZGRGdW5jIFRoZSBmdW5jdGlvbiB0aGF0IHBlcmZvcm1zIGFkZGl0aW9uIG9mIHNpbmdsZSBlbnRyaWVzXG4gICAqIEBwYXJhbSBmb3JtQXJyIFRoZSBGb3JtQXJyYXkgdGhhdCB3aWxsIGhvbGQgdGhlIGFycmF5J3MgZGF0YVxuICAgKi9cbiAgaW5pdFBhdGNoRm9ybUFycmF5ID0gPFQ+KGFycjogVFtdLCBhZGRGdW5jOiAoaTogbnVtYmVyLCBkYXRhPzogVCwgZm9ybUFycj86IEZvcm1BcnJheSkgPT4gdm9pZCwgZm9ybUFycjogRm9ybUFycmF5KSA9PiB7XG4gICAgLy8gZGVidWdnZXJcbiAgICBpZiAoYXJyPy5sZW5ndGgpIHtcbiAgICAgIGlmIChmb3JtQXJyLmxlbmd0aCkgZm9ybUFyci5jbGVhcigpO1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGFycikge1xuICAgICAgICBhZGRGdW5jKGZvcm1BcnIubGVuZ3RoLCBpdGVtLCBmb3JtQXJyKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFmb3JtQXJyLmxlbmd0aCkgYWRkRnVuYyhmb3JtQXJyLmxlbmd0aCwgbnVsbCwgZm9ybUFycik7XG4gICAgfVxuICB9O1xuICBwcml2YXRlIGlzUHJvbWlzZSA9IChmdW5jKSA9PiB7XG4gICAgcmV0dXJuIHR5cGVvZiBmdW5jID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZnVuYy50aGVuID09PSAnZnVuY3Rpb24nO1xuICB9O1xuICBpc0FzeW5jID0gKGZ1bmMpID0+IHtcbiAgICByZXR1cm4gZnVuYy5jb25zdHJ1Y3Rvci5uYW1lID09PSAnQXN5bmNGdW5jdGlvbicgfHwgKHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nICYmIHRoaXMuaXNQcm9taXNlKGZ1bmMoKSkpO1xuICB9O1xuXG4gIGlzT2JzZXJ2YWJsZSA9IDxUPihmdW5jKSA9PiB7XG4gICAgLy8gcmV0dXJuIHR5cGVvZiBmdW5jID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZnVuYy5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbic7XG4gICAgLy8gcmV0dXJuIHR5cGVvZiBmdW5jID09PSAnb2JqZWN0JyAmJiBmdW5jIGluc3RhbmNlb2YgT2JzZXJ2YWJsZTtcbiAgICAvLyByZXR1cm4gdHlwZW9mIGZ1bmMgPT09ICdvYmplY3QnICYmIGZ1bmMgaW5zdGFuY2VvZiBPYnNlcnZhYmxlPFQ+O1xuICAgIHJldHVybiB0eXBlb2YgZnVuYyA9PT0gJ29iamVjdCcgJiYgaXNPYnNlcnZhYmxlKGZ1bmMpO1xuICAgIHJldHVybiB0eXBlb2YgZnVuYyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGZ1bmMudG9Qcm9taXNlID09PSAnZnVuY3Rpb24nO1xuICB9O1xuICBwcm9taXNpZnlWYWwgPSA8VD4odmFsOiBUIHwgUHJvbWlzZTxUPiB8IE9ic2VydmFibGU8VD4pID0+IHtcbiAgICBpZiAodGhpcy5pc0FzeW5jKHZhbCkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsIGFzIFByb21pc2U8VD4pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc09ic2VydmFibGUodmFsKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShsYXN0VmFsdWVGcm9tKHZhbCBhcyBPYnNlcnZhYmxlPFQ+KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsIGFzIFQpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIGFyciBBcnJheSBvZiBvYnNlcnZhYmxlcyB0byBmZXRjaFxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiB0aGUgcmVzcG9uc2VzIG1lcmdlZCB0b2dldGhlci4gSXQgZW1pdHMgdGhlIG1lcmdlZCByZXNwb25zZXMgYXMgdGhleSBhcmUgZmV0Y2hlZCBhbmQgY2xvc2VzIG9uY2UgYWxsbCB0aGUgcmVzcG9uc2VzIGhhdmUgYmVlbiBmZXRjaGVkXG4gICAqL1xuICBtZXJnZUFyck9ic2VydmFibGVzID0gPFQ+KGFycjogeyAkZnVuYzogT2JzZXJ2YWJsZTxUW10+IH1bXSkgPT4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxUW10+KChzdWIpID0+IHtcbiAgICAgIGNvbnN0IHJldDogVFtdID0gW107XG4gICAgICBsZXQgcmVzcG9uc2VDb3VudCA9IDA7XG4gICAgICBtZXJnZShcbiAgICAgICAgLi4uYXJyLm1hcChcbiAgICAgICAgICAoeCkgPT5cbiAgICAgICAgICAgIHguJGZ1bmM/LnBpcGUoXG4gICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB0YXAoKHIpID0+IHtcbiAgICAgICAgICAgICAgICByZXNwb25zZUNvdW50Kys7XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgICkuc3Vic2NyaWJlKChyKSA9PiB7XG4gICAgICAgIHJldC5wdXNoKC4uLnIpO1xuICAgICAgICBzdWIubmV4dChyZXQpO1xuICAgICAgICBpZiAocmVzcG9uc2VDb3VudCA9PSBhcnIuZmlsdGVyKCh4KSA9PiB4LiRmdW5jKS5sZW5ndGgpIHtcbiAgICAgICAgICAvLyBkZWJ1Z2dlclxuICAgICAgICAgIHN1Yi5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbiAgcmVtb3ZlRHVwbGljYXRlPFQ+KGxpc3Q6IFRbXSwga2V5RmllbGQgPSAnY29kZScpIHtcbiAgICBpZiAoIWxpc3QpIHJldHVybiBudWxsO1xuICAgIGxpc3QgPSBsaXN0LmZpbHRlcigoeCkgPT4geCk7XG4gICAgY29uc3QgcmV0OiBUW10gPSBbXSxcbiAgICAgIGR1cGxpY2F0ZU1hcDogeyBbeDogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbGlzdCkge1xuICAgICAgaWYgKGR1cGxpY2F0ZU1hcFtpdGVtW2tleUZpZWxkXV0pIGNvbnRpbnVlO1xuICAgICAgcmV0LnB1c2goaXRlbSk7XG4gICAgICBkdXBsaWNhdGVNYXBbaXRlbVtrZXlGaWVsZF1dID0gaXRlbTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuICBnZXQgZ2VuUmFuZG9tSUQoKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDAwMDAwMDAwMDApO1xuICB9XG4gIHN0b3JlUGF5bG9hZCA9IHRoaXMubG9nZ2VyU2VydmljZS5hZGRMb2c7XG4gIG9iaklzRW1wdHkgPSAob2JqLCBleGNsdXNpb25GaWVsZHM/OiBzdHJpbmdbXSkgPT4ge1xuICAgIGlmICghb2JqKSByZXR1cm4gdHJ1ZTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChleGNsdXNpb25GaWVsZHM/LmluY2x1ZGVzKGtleSkpIGNvbnRpbnVlO1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgaWYgKG9ialtrZXldKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuICBkYXRhR2VuID0gPFQgPSBhbnk+KGtleXM6IHN0cmluZ1tdLCBsZW5ndGggPSAxMCkgPT4ge1xuICAgIGNvbnN0IHJldDogYW55W10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgdDogYW55ID0ge307XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgIHRba2V5XSA9IHRoaXMudGV4dEdlbigpO1xuICAgICAgfVxuICAgICAgcmV0LnB1c2godCk7XG4gICAgfVxuICAgIHJldHVybiByZXQgYXMgVFtdO1xuICB9O1xuICB0ZXh0R2VuID0gKCkgPT4gJ3JhbmRvbScgKyBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiAxMDAwKTtcbiAgdHJhY2tCeUNvZGUoaW5kZXg6IG51bWJlciwgaXRlbTogYW55KSB7XG4gICAgcmV0dXJuIGl0ZW0/LmNvZGU7XG4gIH1cbiAgdHJhY2tCeUlEKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkge1xuICAgIHJldHVybiBpdGVtPy5pZDtcbiAgfVxuICBkaWFsb2dPcGVuZXIgPSAoY29tcDogYW55LCBjb25maWc6IE1hdERpYWxvZ0NvbmZpZywgdmFsdWVDQjogKHIpID0+IGFueSwgbm9WYWx1ZUNCPzogYW55KSA9PlxuICAgIHRoaXMuZGlhbG9nT3BlbmVyUmVmKGNvbXAsIGNvbmZpZylcbiAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAuc3Vic2NyaWJlKChyKSA9PiB7XG4gICAgICAgIGlmIChyICE9IG51bGwgJiYgciAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YWx1ZUNCKHIpO1xuICAgICAgICB9IGVsc2UgaWYgKG5vVmFsdWVDQikge1xuICAgICAgICAgIG5vVmFsdWVDQigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgZGlhbG9nT3BlbmVyUmVmID0gKGNvbXA6IGFueSwgY29uZmlnOiBNYXREaWFsb2dDb25maWcpID0+IHRoaXMuZGlhbG9nLm9wZW4oY29tcCwgY29uZmlnKTtcbiAgZmluZExhYmVsQnlJdGVtID0gKGl0ZW0sIGFycjogYW55W10sIGxhYmVsRmllbGQ/OiBzdHJpbmcsIGtleUZpZWxkOiBzdHJpbmcgPSAnY29kZScpID0+IHtcbiAgICBpZiAoIWl0ZW0pIHJldHVybiBudWxsO1xuICAgIGNvbnN0IG9iaiA9IGFycj8uZmluZCgoeCkgPT4geFtrZXlGaWVsZF0gPT0gaXRlbSk7XG4gICAgaWYgKCFvYmopIHJldHVybiBpdGVtO1xuICAgIGVsc2UgcmV0dXJuIGAke2l0ZW19IC0gJHtvYmpbbGFiZWxGaWVsZCB8fCAndGl0bGUnXSB8fCBvYmpbbGFiZWxGaWVsZCB8fCAnZGVzY3JpcHRpb24nXX1gO1xuICB9O1xuXG4gIGZvcm1GaWVsZHNGcm9tQXJyID0gdGhpcy5pbnB1dFNlcnZpY2UuZm9ybUZpZWxkc0Zyb21GQ0lucHV0c0FycjtcbiAgb2JqVG9Gb3JtQ29udHJvbHMgPSB0aGlzLmlucHV0U2VydmljZS5mb3JtRmllbGRzRnJvbU9iajtcbiAgZm9ybVNjaGVtYVRvRm9ybUNvbnRyb2xzID0gdGhpcy5pbnB1dFNlcnZpY2UuZm9ybVNjaGVtYVRvRm9ybUNvbnRyb2xzO1xuXG4gIGJpbmRGb3JtQ29udHJvbFRvSW5wdXRzID0gdGhpcy5pbnB1dFNlcnZpY2UuYmluZEZvcm1Db250cm9sVG9JbnB1dHM7XG5cbiAgZ28gPSAodmFsdWU6IHN0cmluZywgZXh0cmE/OiBOYXZpZ2F0aW9uRXh0cmFzKSA9PiB7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3ZhbHVlXSwgZXh0cmEpO1xuICB9O1xuICAvKipcbiAgICogUm91dGUgdG8gY29tcG9uZW50XG4gICAqIEBwYXJhbSByb3V0ZSBSb3V0ZSBvZiBwYXRoIHRvIGNvbXBvbmVudFxuICAgKiBAcGFyYW0gZXh0cmFcbiAgICovXG4gIGdvUiA9IChyb3V0ZTogc3RyaW5nLCBleHRyYT86IE5hdmlnYXRpb25FeHRyYXMpID0+IHtcbiAgICBpZiAoISg8U0RLRW52aXJvbm1lbnQ+dGhpcy5lbnZpcm9ubWVudCkuYWN0aXZhdGVkUm91dGUpIGRlYnVnZ2VyO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtyb3V0ZV0sIHtcbiAgICAgIHJlbGF0aXZlVG86ICg8U0RLRW52aXJvbm1lbnQ+dGhpcy5lbnZpcm9ubWVudCkuYWN0aXZhdGVkUm91dGUsXG4gICAgICAuLi5leHRyYSxcbiAgICB9KTtcbiAgICAvLyBkZWJ1Z2dlcjtcbiAgfTtcblxuICByZWxhdGl2ZVJvdXRlcigpIHtcbiAgICBjb25zdCByb3V0ZXIgPSBpbmplY3QoUm91dGVyKSxcbiAgICAgIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgICByZXR1cm4ge1xuICAgICAgcm91dGUsXG4gICAgICByb3V0ZXIsXG4gICAgICBuYXZpZ2F0ZTogKGxpbms6IHN0cmluZywgY29uZmlnPzogTmF2aWdhdGlvbkV4dHJhcyB8IHVuZGVmaW5lZCkgPT4gcm91dGVyLm5hdmlnYXRlKFtsaW5rXSwgeyByZWxhdGl2ZVRvOiByb3V0ZSwgLi4uY29uZmlnIH0pLFxuICAgICAgcXVlcnlQYXJhbXM6IHJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLFxuICAgICAgcGF0aFBhcmFtczogcm91dGUuc25hcHNob3QucGFyYW1zLFxuICAgIH07XG4gIH1cblxuICBtb25leVBhcnNlciA9IChhbW91bnQ6IHN0cmluZyB8IG51bWJlciwgY3VycmVuY3kgPSAnICcpID0+IHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW5jeVBpcGUudHJhbnNmb3JtKGFtb3VudCwgY3VycmVuY3kgfHwgJyAnKTtcbiAgfTtcbiAgZXh0cmFjdFVwbG9hZChldmVudDogYW55KSB7XG4gICAgcmV0dXJuIChldmVudC50YXJnZXQuZmlsZXMgYXMgRmlsZVtdKSB8fCBbXTtcbiAgfVxuXG4gIHNlY29uZHNUb0hvdXJNaW5TZWMgPSAoc2Vjb25kczogbnVtYmVyKSA9PiB7XG4gICAgaWYgKCFzZWNvbmRzKSByZXR1cm4geyBzZWNzOiBudWxsLCBob3VyczogbnVsbCwgbWluczogbnVsbCB9O1xuICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gMzYwMCkgfHwgMCxcbiAgICAgIHNlY29uZHNFeEhvdXJzID0gc2Vjb25kcyAlIDM2MDAgfHwgMCxcbiAgICAgIG1pbnMgPSBNYXRoLmZsb29yKHNlY29uZHNFeEhvdXJzIC8gNjApIHx8IDAsXG4gICAgICBzZWNzID0gc2Vjb25kc0V4SG91cnMgJSA2MDtcbiAgICByZXR1cm4geyBob3VycywgbWlucywgc2VjcyB9O1xuICB9O1xuICBtaW51dGVzVG9EYXlIb3VyTWluID0gKG1pbnV0ZXM6IG51bWJlcikgPT4ge1xuICAgIGlmICghbWludXRlcykgcmV0dXJuIHsgZGF5czogbnVsbCwgaG91cnM6IG51bGwsIG1pbnM6IG51bGwgfTtcbiAgICBjb25zdCBkYXlzID0gTWF0aC5mbG9vcihtaW51dGVzIC8gMTQ0MCkgfHwgMCxcbiAgICAgIG1pbml1dGVzRXhEYXlzID0gbWludXRlcyAlIDE0NDAgfHwgMCxcbiAgICAgIGhvdXJzID0gTWF0aC5mbG9vcihtaW5pdXRlc0V4RGF5cyAvIDYwKSB8fCAwLFxuICAgICAgbWlucyA9IG1pbml1dGVzRXhEYXlzICUgNjAgfHwgMDtcbiAgICByZXR1cm4geyBkYXlzLCBob3VycywgbWlucyB9O1xuICB9O1xuICBtaW51dGVzVG9EYXlIb3VyTWluU3RyID0gKG1pbnV0ZXM6IG51bWJlcikgPT4ge1xuICAgIGlmICghbWludXRlcykgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgcmV0ID0gdGhpcy5taW51dGVzVG9EYXlIb3VyTWluKG1pbnV0ZXMpO1xuICAgIHJldHVybiBgJHtyZXQuZGF5c30gJHtyZXQuaG91cnN9OiR7cmV0Lm1pbnN9YC50cmltKCk7XG4gIH07XG4gIG1pbnV0ZXNUb0RheUhvdXJNaW5TdHIyID0gKG1pbnV0ZXM6IG51bWJlcikgPT4ge1xuICAgIGlmICghbWludXRlcykgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgcmV0ID0gdGhpcy5taW51dGVzVG9EYXlIb3VyTWluKG1pbnV0ZXMpO1xuICAgIHJldHVybiBgJHtyZXQuZGF5c31kYXlzICR7cmV0LmhvdXJzfWhycyAke3JldC5taW5zfW1pbnNgLnRyaW0oKTtcbiAgfTtcbiAgZGF5SG91ck1pblRvSG91ck1pbnV0ZXMgPSAoZHlzOiBudW1iZXIsIGhyczogbnVtYmVyLCBtaW5zOiBudW1iZXIpID0+IHtcbiAgICBpZiAoIWR5cyAmJiAhaHJzICYmICFtaW5zKSByZXR1cm4gJyc7XG4gICAgY29uc3QgZHlzVG9IcnMgPSAoZHlzIHx8IDApICogMjQ7XG4gICAgaHJzID0gKCtocnMgfHwgMCkgKyBkeXNUb0hycztcbiAgICByZXR1cm4gKGhycyB8fCAnMDAnKSArICc6JyArIChtaW5zIHx8ICcwMCcpO1xuICB9O1xuICBkaXNhYmxlT3JFbmFibGVJbnB1dHMgPSAoY29udHJvbHM6IEFic3RyYWN0Q29udHJvbFtdLCBkaXNhYmxlOiBib29sZWFuKSA9PiB7XG4gICAgaWYgKGRpc2FibGUpIHRoaXMuZGlzYWJsZUlucHV0cyhjb250cm9scyk7XG4gICAgZWxzZSB0aGlzLmVuYWJsZUlucHV0cyhjb250cm9scyk7XG4gIH07XG4gIGRpc2FibGVJbnB1dHMgPSAoY29udHJvbHM6IEFic3RyYWN0Q29udHJvbFtdKSA9PiB7XG4gICAgZm9yIChjb25zdCBjb250cm9sIG9mIGNvbnRyb2xzKSB7XG4gICAgICBjb250cm9sPy5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG4gIH07XG4gIGVuYWJsZUlucHV0cyA9IChjb250cm9sczogQWJzdHJhY3RDb250cm9sW10pID0+IHtcbiAgICBmb3IgKGNvbnN0IGNvbnRyb2wgb2YgY29udHJvbHMpIHtcbiAgICAgIGNvbnRyb2w/LmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuICB9O1xuICBkYXlIb3VyTWluVG9NaW51dGVzID0gKGR5czogbnVtYmVyLCBocnM6IG51bWJlciwgbWluczogbnVtYmVyKSA9PiB7XG4gICAgaWYgKCFkeXMgJiYgIWhycyAmJiAhbWlucykgcmV0dXJuIDA7XG4gICAgY29uc3QgZHlzVG9IcnMgPSAoZHlzIHx8IDApICogMjQ7XG4gICAgaHJzID0gKCtocnMgfHwgMCkgKyBkeXNUb0hycztcbiAgICByZXR1cm4gKGhycyB8fCAwKSAqIDYwICsgbWlucztcbiAgfTtcbiAgaG91ck1pblRvTWludXRlcyA9IChocnM6IG51bWJlciwgbWluczogbnVtYmVyKSA9PiB7XG4gICAgaWYgKCFocnMgJiYgIW1pbnMpIHJldHVybiBudWxsO1xuICAgIHJldHVybiAoaHJzIHx8IDApICogNjAgKyBtaW5zO1xuICB9O1xuICBob3VyTWluVG9NaW51dGVzMiA9IChocnNNaW5zOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBbaHJzLCBtaW5zXSA9IGhyc01pbnM/LnNwbGl0KCc6JykgfHwgWzAsIDBdO1xuICAgIHJldHVybiB0aGlzLmhvdXJNaW5Ub01pbnV0ZXMoK2hycywgK21pbnMpO1xuICB9O1xuICBub3RpZnkobWVzc2FnZTogc3RyaW5nLCBjbHM6IDAgfCAxIHwgMiB8IDMgPSAxLCBkdXJhdGlvbiA9IDUwMDAsIHRpdGxlID0gJ0Nsb3NlJykge1xuICAgIGlmIChjbHMgPT0gMCkgcmV0dXJuIHRoaXMuaW5mbyhtZXNzYWdlLCBjbHMpO1xuICAgIGlmICh0eXBlb2YgbWVzc2FnZSAhPSAnc3RyaW5nJykgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICBtZXNzYWdlID0gdHlwZW9mIG1lc3NhZ2UgPT0gJ3N0cmluZycgPyBtZXNzYWdlIDogJyc7XG4gICAgY29uc3QgcmVmID0gdGhpcy5zbmFja0Jhci5vcGVuKG1lc3NhZ2UsIHRpdGxlLCB7XG4gICAgICBkdXJhdGlvbixcbiAgICAgIGhvcml6b250YWxQb3NpdGlvbjogJ2NlbnRlcicsXG4gICAgICB2ZXJ0aWNhbFBvc2l0aW9uOiAnYm90dG9tJyxcbiAgICAgIHBhbmVsQ2xhc3M6IGNscyA9PSAxID8gJ2JnLXN1Y2Nlc3MnIDogY2xzID09IDIgPyAnYnRuLWluZm8nIDogY2xzID09IDMgPyAnYnRuLXdhcm5pbmcnIDogJ2JnLWRhbmdlcicsXG4gICAgfSk7XG4gICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKHJlZi5hZnRlckRpc21pc3NlZCgpLnBpcGUobWFwKChyKSA9PiByLmRpc21pc3NlZEJ5QWN0aW9uKSkpO1xuICB9XG5cbiAgc2Nyb2xsVG9Ub3AgPSAoKSA9PiB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG5cbiAgLyoqXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGRhdGUgdGltZSBsb2NhbCB0aGF0IGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgZGF0ZXRpbWUtbG9jYWwgaW5wdXRcbiAgICovXG4gIGdldExvY2FsRGF0ZVRpbWVOb3cgPSAoKSA9PiB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgZGF0ZUNodW5rcyA9IGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCkuc3BsaXQoJy8nKTtcbiAgICByZXR1cm4gYCR7ZGF0ZUNodW5rc1syXX0tJHtkYXRlQ2h1bmtzWzFdfS0ke2RhdGVDaHVua3NbMF19YCArICdUJyArIGRhdGUudG9Mb2NhbGVUaW1lU3RyaW5nKCk7XG4gIH07XG4gIC8qKiBAcmV0dXJucyBUaGUgY3VycmVudCBkYXRlIGxvY2FsIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBkYXRlIGlucHV0ICovXG4gIGxvY2FsRGF0ZU5vdyA9ICgpID0+IHtcbiAgICByZXR1cm4gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF07XG4gIH07XG4gIGRhdGVGb3JtYXQgPSAoZGF0ZTogYW55LCBmb3JtYXQgPSAxKSA9PiB7XG4gICAgaWYgKCFkYXRlKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBkID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgaWYgKGZvcm1hdCA9PSAxKSB7XG4gICAgICByZXR1cm4gZC50b0RhdGVTdHJpbmcoKTtcbiAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PSAyKSB7XG4gICAgICByZXR1cm4gZC5nZXREYXRlKCkgKyAnICcgKyBjb25maWcuTW9udGhzW2QuZ2V0TW9udGgoKV07XG4gICAgfSBlbHNlIGlmIChmb3JtYXQgPT0gMykge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGUsIGBFRUUgTU1NIGRkIFlZWVksIGhoOm1tIGFhYCk7XG4gICAgfSBlbHNlIGlmIChmb3JtYXQgPT0gNCkge1xuICAgICAgcmV0dXJuIGNvbmZpZy5Nb250aHNbZC5nZXRNb250aCgpXSArICcgJyArIGQuZ2V0RGF0ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9O1xuXG4gIHRvSmF2YURhdGVTdHJpbmcgPSAoaXNvRGF0ZVN0cmluZzogc3RyaW5nID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpKSA9PiB7XG4gICAgaWYgKCFpc29EYXRlU3RyaW5nKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gYCR7aXNvRGF0ZVN0cmluZy5zbGljZSgwLCAxOSl9YDtcbiAgICByZXR1cm4gYCR7aXNvRGF0ZVN0cmluZy5zbGljZSgwLCAxMCl9ICR7aXNvRGF0ZVN0cmluZy5zbGljZSgxMSwgMTkpfWA7XG4gIH07XG5cbiAgdG9KYXZhRGF0ZXRpbWVTdHJpbmcgPSAoaXNvRGF0ZVN0cmluZzogc3RyaW5nKSA9PiB7XG4gICAgaWYgKCFpc29EYXRlU3RyaW5nKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBkYXRlID0gaXNvRGF0ZVN0cmluZy5pbmNsdWRlcygnVCcpID8gaXNvRGF0ZVN0cmluZyA6IG5ldyBEYXRlKGlzb0RhdGVTdHJpbmcpLnRvSVNPU3RyaW5nKCk7XG4gICAgcmV0dXJuIGAke2RhdGUuc2xpY2UoMCwgMTApfSAke2RhdGUuc2xpY2UoMTEsIDE5KX1gO1xuICB9O1xuXG4gIHRpbWVGb3JtYXQgPSAodGltZT86IGFueSkgPT4ge1xuICAgIGNvbnN0IHRpbWVBcnI6IGFueVtdID0gdGltZS5zcGxpdCgnICcpO1xuICAgIHRpbWVBcnJbMF0gPSB0aW1lQXJyWzBdLnNwbGl0KCc6Jykuc3BsaWNlKDAsIDIpLmpvaW4oJzonKTtcbiAgICByZXR1cm4gdGltZUFyci5qb2luKCcgJyk7XG4gIH07XG4gIGZ1bGxEYXRlVGltZSA9ICh0aW1lc3RhbXA6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuICAgIC8vIGRlYnVnZ2VyXG4gICAgcmV0dXJuIHRoaXMuZGF0ZUZvcm1hdCh0aW1lc3RhbXAsIDMpO1xuICB9O1xuICBkYXlzRm9ybWF0dGVyID0gKGRheXM6IG51bWJlcikgPT4ge1xuICAgIGlmICghZGF5cykge1xuICAgICAgcmV0dXJuICctJztcbiAgICB9XG4gICAgbGV0IHlyOiBudW1iZXIsXG4gICAgICBtdDogbnVtYmVyLFxuICAgICAgZHk6IG51bWJlcixcbiAgICAgIHJldDogc3RyaW5nLFxuICAgICAgX3lyID0gMzY1LFxuICAgICAgX210ID0gMzA7XG4gICAgaWYgKGRheXMgPiBfeXIpIHtcbiAgICAgIHlyID0gTWF0aC5mbG9vcihkYXlzIC8gX3lyKTtcbiAgICB9XG4gICAgaWYgKGRheXMgPiBfbXQpIHtcbiAgICAgIG10ID0gTWF0aC5mbG9vcigoZGF5cyAlIF95cikgLyBfbXQpO1xuICAgIH1cbiAgICBkeSA9IChkYXlzICUgX3lyKSAlIF9tdDtcbiAgICByZXQgPSBgJHt5ciA/IHRoaXMucGx1YXJsaXplcih5ciwgJ3lyJykgOiAnJ30gJHttdCA/IHRoaXMucGx1YXJsaXplcihtdCwgJ210aCcpIDogJyd9ICR7dGhpcy5wbHVhcmxpemVyKGR5LCAnZHknKX1gO1xuICAgIHJldHVybiByZXQ7XG4gIH07XG4gIG1vbnRoc0Zvcm1hdHRlciA9IChtb250aHM6IG51bWJlcikgPT4ge1xuICAgIGlmICghbW9udGhzKSB7XG4gICAgICByZXR1cm4gJy0nO1xuICAgIH1cbiAgICBsZXQgeXI6IG51bWJlcixcbiAgICAgIG10OiBudW1iZXIsXG4gICAgICByZXQ6IHN0cmluZyxcbiAgICAgIF95ciA9IDEyO1xuICAgIGlmIChtb250aHMgPiBfeXIpIHtcbiAgICAgIHlyID0gTWF0aC5mbG9vcihtb250aHMgLyBfeXIpO1xuICAgIH1cbiAgICBtdCA9IG1vbnRocyAlIF95cjtcbiAgICByZXQgPSBgJHt5ciA/IHRoaXMucGx1YXJsaXplcih5ciwgJ3lyJykgOiAnJ30gJHttdCA/IHRoaXMucGx1YXJsaXplcihtdCwgJ210aCcpIDogJyd9YDtcbiAgICByZXR1cm4gcmV0O1xuICB9O1xuICBwbHVhcmxpemVyID0gKHZhbDogbnVtYmVyLCB0eHQ6IHN0cmluZywgcGx1cmFsPzogc3RyaW5nKSA9PiB7XG4gICAgcGx1cmFsID0gcGx1cmFsIHx8IHR4dCArICdzJztcbiAgICByZXR1cm4gdmFsICsgKHZhbCA9PSAxID8gdHh0IDogcGx1cmFsKTtcbiAgfTtcbiAgZGVjaW1hbFRvUGVyY2VudGFnZSA9IChkZWM6IG51bWJlcikgPT4ge1xuICAgIHJldHVybiBkZWMgKiAxMDAgKyAnJSc7XG4gIH07XG4gIGxvZ0Zvcm0gPSAoZm9ybSkgPT4ge1xuICAgIGNvbnNvbGUubG9nKCdGT1JNJywgZm9ybSwgJ1ZBTFVFUycsIGZvcm0udmFsdWUgYXMgYW55KTtcbiAgfTtcblxuICB0b0NTVihkYXRhOiBhbnlbXSwgaGVhZGVyTmFtZXM6IHN0cmluZ1tdLCBmaWxlbmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVwbGFjZXIgPSAoa2V5LCB2YWx1ZSkgPT4gKHZhbHVlID09PSBudWxsID8gJycgOiB2YWx1ZSk7IC8vIHNwZWNpZnkgaG93IHlvdSB3YW50IHRvIGhhbmRsZSBudWxsIHZhbHVlcyBoZXJlXG5cbiAgICBsZXQgY3N2ID0gZGF0YS5tYXAoKHJvdykgPT4gaGVhZGVyTmFtZXMubWFwKChmaWVsZE5hbWUpID0+IEpTT04uc3RyaW5naWZ5KHJvd1tmaWVsZE5hbWVdLCByZXBsYWNlcikpLmpvaW4oJywnKSk7XG4gICAgY3N2LnVuc2hpZnQoaGVhZGVyTmFtZXMuam9pbignLCcpKTtcbiAgICBsZXQgY3N2QXJyYXkgPSBjc3Yuam9pbignXFxyXFxuJyk7XG5cbiAgICB2YXIgYmxvYiA9IG5ldyBCbG9iKFtjc3ZBcnJheV0sIHsgdHlwZTogJ3RleHQvY3N2JyB9KTtcbiAgICBzYXZlQXMoYmxvYiwgZmlsZW5hbWUgKyAnLmNzdicpO1xuICB9XG5cbiAgaXNQaWN0dXJlRm9ybWF0KGZpbGVOYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIWZpbGVOYW1lKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgUElDVFVSRV9GT1JNQVRTID0gWycuanBnJywgJy5qcGVnJywgJy5wbmcnLCAnLmdpZiddO1xuICAgIHJldHVybiBQSUNUVVJFX0ZPUk1BVFMuc29tZSgoZm9ybWF0KSA9PiBmaWxlTmFtZS5lbmRzV2l0aChmb3JtYXQpKTtcbiAgfVxuICBvYmplY3RUb0FycmF5PFQ+KG9iajogYW55KSB7XG4gICAgY29uc3QgcmV0ID0gW107XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICByZXQucHVzaChvYmpba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQgYXMgVFtdO1xuICB9XG4gIGZvcm1hdEZpZWxkKGZpZWxkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRvVGl0bGVDYXNlKGZpZWxkPy50b1NlbnRlbmNlQ2FzZSgpKTtcbiAgfVxuICAvKipcbiAgICogVXNlcyBhIHdlYiB3b3JrZXIgdG8gcGVyZm9ybSBhIHRhc2tcbiAgICogQGV4YW1wbGUgbmV3IFdvcmtlcihuZXcgVVJMKCcuL3VwbG9hZC1jc3Yud29ya2VyJywgaW1wb3J0Lm1ldGEudXJsKSlcbiAgICogQHBhcmFtIHdvcmtlciBXZWIgd29ya2VyIG9iamVjdFxuICAgKiBAcGFyYW0gaW5wdXREYXRhIERhdGEgYmVpbmcgcGFzc2VkIGludG8gd2ViIHdvcmtlclxuICAgKiBAcmV0dXJucyBEYXRhIGdvdHRlbiBmcm9tIHdlYiB3b3JrZXJcbiAgICovXG4gIHVzZVdlYldvcmtlcjxUID0gYW55Pih3b3JrZXI6IFdvcmtlciwgaW5wdXREYXRhOiBhbnksIGNvbmRpdGlvbnM/OiB7IHN0b3A6IChyZXMpID0+IGJvb2xlYW47IGVycm9yOiAocmVzKSA9PiBib29sZWFuIH0pIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8VD4oKHN1YikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBXb3JrZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKGlucHV0RGF0YSk7XG4gICAgICAgICAgd29ya2VyLm9ubWVzc2FnZSA9IChyKSA9PiB7XG4gICAgICAgICAgICAvLyBkZWJ1Z2dlclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coZSk7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gci5kYXRhO1xuICAgICAgICAgICAgaWYgKGNvbmRpdGlvbnMpIHtcbiAgICAgICAgICAgICAgaWYgKGNvbmRpdGlvbnMuZXJyb3IoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBzdWIuZXJyb3IoZGF0YSk7XG4gICAgICAgICAgICAgICAgc3ViLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmRpdGlvbnMuc3RvcChkYXRhKSkge1xuICAgICAgICAgICAgICAgIHN1Yi5uZXh0KGRhdGEpO1xuICAgICAgICAgICAgICAgIHN1Yi5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdWIubmV4dChkYXRhKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3ViLm5leHQoZGF0YSBhcyBhbnkpO1xuICAgICAgICAgICAgICBzdWIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgJ25vV29ya2VyJztcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgc3ViLmVycm9yKGUpO1xuICAgICAgICBzdWIuY29tcGxldGUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICB0cmltID1cbiAgICAobGVuZ3RoID0gMTUpID0+XG4gICAgKHRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT5cbiAgICAgIHRleHQgJiYgdGV4dC5sZW5ndGggPiBsZW5ndGggPyB0ZXh0LnNsaWNlKDAsIGxlbmd0aCkgOiB0ZXh0ITtcbiAgYXN5bmMgYXJyYXlUb0NTVihkYXRhOiBhbnlbXSwgZmlsZW5hbWU6IHN0cmluZywgaGVhZGVyTWFwPzogVGFibGVDb2xbXSwgZXh0cmFDb25maWc/OiB7IHByZWZpeD86IHN0cmluZzsgaGlkZUhlYWRlcj86IGJvb2xlYW4gfSkge1xuICAgIC8vIGRlYnVnZ2VyO1xuICAgIGxldCBfZGF0YTogYW55W107XG4gICAgY29uc3QgaGVhZGVyTWFwV2l0aEZvcm1hdHRlcnM6IFRhYmxlQ29sW10gPSBoZWFkZXJNYXA/LmZpbHRlcigoeCkgPT4geC5mb3JtYXR0ZXIgfHwgeC5mb3JtYXR0ZXJSb3cpIHx8IHVuZGVmaW5lZDtcbiAgICBpZiAoaGVhZGVyTWFwV2l0aEZvcm1hdHRlcnM/Lmxlbmd0aCkge1xuICAgICAgX2RhdGEgPSBjbG9uZURlZXAoZGF0YSk7XG4gICAgICBmb3IgKGNvbnN0IGZvcm1hdHRlciBvZiBoZWFkZXJNYXBXaXRoRm9ybWF0dGVycykge1xuICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiBfZGF0YSkge1xuICAgICAgICAgIHJvd1tmb3JtYXR0ZXIuZl0gPSBmb3JtYXR0ZXIuZm9ybWF0dGVyID8gYXdhaXQgZm9ybWF0dGVyLmZvcm1hdHRlcihyb3dbZm9ybWF0dGVyLmZdKSA6IGZvcm1hdHRlci5mb3JtYXR0ZXJSb3cocm93KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBfZGF0YSA9IGRhdGE7XG4gICAgfVxuICAgIGNvbnN0IHNob3dIZWFkZXIgPSAhZXh0cmFDb25maWc/LmhpZGVIZWFkZXI7XG4gICAgbGV0IGNzdiA9IFBhcGEudW5wYXJzZShfZGF0YSwge1xuICAgICAgaGVhZGVyOiBzaG93SGVhZGVyICYmICFoZWFkZXJNYXA/Lmxlbmd0aCxcbiAgICAgIGNvbHVtbnM6IGhlYWRlck1hcD8ubWFwKCh4KSA9PiB4LmY/LnRvU3RyaW5nKCkpIHx8IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgICB0aGlzLmRvd25sb2FkZXIoXG4gICAgICAoZXh0cmFDb25maWc/LnByZWZpeCA/IGV4dHJhQ29uZmlnPy5wcmVmaXggKyAnXFxyXFxuJyA6ICcnKSArXG4gICAgICAgIChoZWFkZXJNYXA/Lmxlbmd0aCA/IGhlYWRlck1hcC5tYXAoKGZpZWxkTmFtZSkgPT4gZmllbGROYW1lLnQpLmpvaW4oJywnKSArIGBcXHJcXG5gIDogJycpICtcbiAgICAgICAgY3N2LFxuICAgICAgZmlsZW5hbWU/LmVuZHNXaXRoKCcuY3N2JykgPyBmaWxlbmFtZSA6IGZpbGVuYW1lICsgJy5jc3YnLFxuICAgICk7XG5cbiAgICB0aGlzLmluZm8oYERvd25sb2FkZWQgJHtmaWxlbmFtZX1gKTtcbiAgfVxuXG4gIGpvaW5DU1ZSb3dzKC4uLkNTVnM6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIENTVnMuam9pbignXFxyXFxuJyk7XG4gIH1cbiAgYXN5bmMgYXJyYXlUb0NTVlN0cmluZzxUID0gYW55PihkYXRhOiBUW10sIGhlYWRlck1hcD86IFRhYmxlQ29sPFQ+W10sIGV4dHJhQ29uZmlnPzogeyBwcmVmaXg/OiBzdHJpbmc7IGhpZGVIZWFkZXI/OiBib29sZWFuIH0pIHtcbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICBsZXQgX2RhdGE6IGFueVtdO1xuICAgIGNvbnN0IGhlYWRlck1hcFdpdGhGb3JtYXR0ZXJzOiBUYWJsZUNvbFtdID0gaGVhZGVyTWFwPy5maWx0ZXIoKHgpID0+IHguZm9ybWF0dGVyIHx8IHguZm9ybWF0dGVyUm93KSB8fCB1bmRlZmluZWQ7XG4gICAgaWYgKGhlYWRlck1hcFdpdGhGb3JtYXR0ZXJzPy5sZW5ndGgpIHtcbiAgICAgIF9kYXRhID0gY2xvbmVEZWVwKGRhdGEpO1xuICAgICAgZm9yIChjb25zdCBmb3JtYXR0ZXIgb2YgaGVhZGVyTWFwV2l0aEZvcm1hdHRlcnMpIHtcbiAgICAgICAgZm9yIChjb25zdCByb3cgb2YgX2RhdGEpIHtcbiAgICAgICAgICByb3dbZm9ybWF0dGVyLmZdID0gZm9ybWF0dGVyLmZvcm1hdHRlciA/IGF3YWl0IGZvcm1hdHRlci5mb3JtYXR0ZXIocm93W2Zvcm1hdHRlci5mXSkgOiBmb3JtYXR0ZXIuZm9ybWF0dGVyUm93KHJvdyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgX2RhdGEgPSBkYXRhO1xuICAgIH1cbiAgICBjb25zdCBzaG93SGVhZGVyID0gIWV4dHJhQ29uZmlnPy5oaWRlSGVhZGVyO1xuICAgIGxldCBjc3YgPSBQYXBhLnVucGFyc2UoX2RhdGEsIHtcbiAgICAgIGhlYWRlcjogc2hvd0hlYWRlciAmJiAhaGVhZGVyTWFwPy5sZW5ndGgsXG4gICAgICBjb2x1bW5zOiBoZWFkZXJNYXA/Lm1hcCgoeCkgPT4geC5mPy50b1N0cmluZygpKSB8fCB1bmRlZmluZWQsXG4gICAgfSk7XG4gICAgcmV0dXJuIChcbiAgICAgIChleHRyYUNvbmZpZz8ucHJlZml4ID8gZXh0cmFDb25maWc/LnByZWZpeCArICdcXHJcXG4nIDogJycpICtcbiAgICAgIChoZWFkZXJNYXA/Lmxlbmd0aCA/IGhlYWRlck1hcC5tYXAoKGZpZWxkTmFtZSkgPT4gZmllbGROYW1lLnQpLmpvaW4oJywnKSArIGBcXHJcXG5gIDogJycpICtcbiAgICAgIGNzdlxuICAgICk7XG4gIH1cblxuICBpc0RhdGVWYWx1ZSA9ICh2KSA9PiAodiA/IHZbNF0gPT0gJy0nICYmIHZbN10gPT0gJy0nIDogZmFsc2UpO1xuICBpc0RhdFRpbWVWYWx1ZSA9ICh2KSA9PiAodiA/IHYuaW5jbHVkZXMoJ1QnKSAmJiB2WzRdID09ICctJyAmJiB2WzddID09ICctJyA6IGZhbHNlKTtcblxuICB5ZXNOb0NlbGxGb3JtYXR0ZXJDb2xvdXJlZCA9ICh2KSA9PiBgPHNwYW4gY2xhc3M9JyR7diA/ICdzdWNjZXNzQ2VsbCcgOiAnaW5lcnRDZWxsJ30nPiR7diA/ICdZZXMnIDogdiA9PSBmYWxzZSA/ICdObycgOiAnLSd9PC9zcGFuPmA7XG4gIHllc05vQ2VsbEZvcm1hdHRlciA9ICh2KSA9PiBgJHt2ID8gJ1llcycgOiAnTm8nfWA7XG4gIHN0YXR1c0NlbGxGb3JtYXR0ZXIgPSAoc3RhdHVzOiBTdGF0dXMpID0+XG4gICAgYDxzcGFuIGNsYXNzPScke3N0YXR1cyA9PSAnQ09NUExFVEVEJyA/ICdzdWNjZXNzQ2VsbCcgOiBzdGF0dXMgPT0gJ1BFTkRJTkcnID8gJ3BlbmRpbmdDZWxsJyA6ICdpbmVydENlbGwnfSc+JHtzdGF0dXMgfHwgJy0nfTwvc3Bhbj5gO1xuXG4gIGNlbGxTdGF0dXNGb3JtYXR0ZXIgPVxuICAgIDxUID0gYW55PihndWlkZTogeyBzdWNjZXNzVmFsPzogVDsgcGVuZGluZ1ZhbD86IFQ7IGVycm9yVmFsPzogVDsgaW5lcnRWYWw/OiBUIH0pID0+XG4gICAgKHYpID0+XG4gICAgICBgPHNwYW4gY2xhc3M9JyR7XG4gICAgICAgIHYgPT0gZ3VpZGUuc3VjY2Vzc1ZhbCA/ICdzdWNjZXNzQ2VsbCcgOiB2ID09IGd1aWRlLnBlbmRpbmdWYWwgPyAncGVuZGluZ0NlbGwnIDogdiA9PSBndWlkZS5lcnJvclZhbCA/ICdlcnJvckNlbGwnIDogJ2luZXJ0Q2VsbCdcbiAgICAgIH0nPiR7dn08L3NwYW4+YDtcblxuICBnZW5lcmF0ZVVVSUQoKSB7XG4gICAgbGV0IGQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICBsZXQgZDIgPSAodHlwZW9mIHBlcmZvcm1hbmNlICE9PSAndW5kZWZpbmVkJyAmJiBwZXJmb3JtYW5jZS5ub3cgJiYgcGVyZm9ybWFuY2Uubm93KCkgKiAxMDAwKSB8fCAwOyAvL1RpbWUgaW4gbWljcm9zZWNvbmRzIHNpbmNlIHBhZ2UtbG9hZCBvciAwIGlmIHVuc3VwcG9ydGVkXG4gICAgcmV0dXJuICd4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgnLnJlcGxhY2UoL1t4eV0vZywgKGMpID0+IHtcbiAgICAgIGxldCByID0gTWF0aC5yYW5kb20oKSAqIDE2OyAvL3JhbmRvbSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxNlxuICAgICAgaWYgKGQgPiAwKSB7XG4gICAgICAgIC8vVXNlIHRpbWVzdGFtcCB1bnRpbCBkZXBsZXRlZFxuICAgICAgICByID0gKGQgKyByKSAlIDE2IHwgMDtcbiAgICAgICAgZCA9IE1hdGguZmxvb3IoZCAvIDE2KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vVXNlIG1pY3Jvc2Vjb25kcyBzaW5jZSBwYWdlLWxvYWQgaWYgc3VwcG9ydGVkXG4gICAgICAgIHIgPSAoZDIgKyByKSAlIDE2IHwgMDtcbiAgICAgICAgZDIgPSBNYXRoLmZsb29yKGQyIC8gMTYpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChjID09PSAneCcgPyByIDogKHIgJiAweDMpIHwgMHg4KS50b1N0cmluZygxNik7XG4gICAgfSk7XG4gIH1cblxuICBpbmZvOiAodGV4dDogc3RyaW5nLCBzdGF0dXM/OiAwIHwgMiB8IDEsIGhlYWRpbmc/OiBzdHJpbmcsIGJ0bnM/OiBJSW5mb0RpYWxvZ0J0bltdLCBkaXNhYmxlQ2xvc2U/OiBib29sZWFuKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICBkZWJvdW5jZXIgPSB0aGlzLmRlYm91bmNlclNlcnZpY2UuZGVib3VuY2VyO1xuXG4gIGFzeW5jVmFsaWRhdGlvbiA9IHRoaXMuZGVib3VuY2VyU2VydmljZS5hc3luY1ZhbGlkYXRpb247XG5cbiAgc3RhcnRQbCA9IHRoaXMucFMuc3RhcnRQbDtcbiAgc3RvcFBsID0gdGhpcy5wUy5zdG9wUGw7XG5cbiAgY3JlYXRlU3Vic2NyaXB0aW9uTWFuYWdlciA9ICguLi5zdWJzOiBTdWJzY3JpcHRpb25bXSkgPT4ge1xuICAgIGxldCBfc3ViczogU3Vic2NyaXB0aW9uW10gPSBzdWJzIHx8IFtdO1xuICAgIGNvbnN0IGNsZWFyID0gKCkgPT4ge1xuICAgICAgX3N1YnMuZm9yRWFjaCgoeCkgPT4geC51bnN1YnNjcmliZSgpKTtcbiAgICAgIF9zdWJzID0gW107XG4gICAgfTtcbiAgICBjb25zdCBwdXNoID0gKC4uLnN1YnM6IFN1YnNjcmlwdGlvbltdKSA9PiB7XG4gICAgICBfc3Vicy5wdXNoKC4uLnN1YnMpO1xuICAgIH07XG5cbiAgICByZXR1cm4geyBjbGVhciwgcHVzaCB9O1xuICB9O1xuXG4gIGNyZWF0ZUNhY2hlTWFuYWdlciA9ICgpID0+IHtcbiAgICBsZXQgX2NhY2hlOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgY29uc3QgY2xlYXIgPSAoKSA9PiB7XG4gICAgICBfY2FjaGUgPSB7fTtcbiAgICB9O1xuICAgIGNvbnN0IGRyb3AgPSAoKSA9PiB7XG4gICAgICBfY2FjaGUgPSB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBjb25zdCBzYXZlID0gKGtleTogc3RyaW5nLCBkYXRhOiBhbnkpID0+IHtcbiAgICAgIGlmICghX2NhY2hlKSBfY2FjaGUgPSB7fTtcbiAgICAgIF9jYWNoZVtrZXldID0gZGF0YTtcbiAgICB9O1xuICAgIGNvbnN0IGdldCA9IDxUPihrZXk6IHN0cmluZykgPT4gX2NhY2hlPy5ba2V5XSBhcyBUO1xuXG4gICAgcmV0dXJuIHsgY2xlYXIsIGRyb3AsIGdldCwgc2F2ZSB9O1xuICB9O1xuXG4gIHRyYWNrQnlDdXN0b21JRCA9IChpbmRleCwgaXRlbSkgPT4ge1xuICAgIGlmICghaXRlbVt0aGlzLmN1c3RvbUlERmllbGRdKSB7XG4gICAgICBpdGVtW3RoaXMuY3VzdG9tSURGaWVsZF0gPSB0aGlzLmdlbmVyYXRlVVVJRCgpO1xuICAgICAgY29uc29sZS5sb2coJ3NldCBjdXN0b20gaWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1bdGhpcy5jdXN0b21JREZpZWxkXTtcbiAgfTtcbiAgdHJhY2tCeUZvckZvcm1zID0gKGluZGV4LCBpdGVtOiBGb3JtR3JvdXApID0+IHtcbiAgICBpZiAoIWl0ZW0uY29udHJvbHNbdGhpcy5jdXN0b21JREZpZWxkXSkgaXRlbS5hZGRDb250cm9sKHRoaXMuY3VzdG9tSURGaWVsZCwgbmV3IEZvcm1Db250cm9sKHRoaXMuZ2VuZXJhdGVVVUlEKCkpKTtcbiAgICByZXR1cm4gaXRlbS5jb250cm9sc1t0aGlzLmN1c3RvbUlERmllbGRdLnZhbHVlO1xuICB9O1xuICBvYmplY3RUb0Zvcm1Hcm91cCA9IDxUPihkYXRhOiBUKSA9PiB7XG4gICAgY29uc3QgZm9ybSA9IG5ldyBGb3JtR3JvdXA8SVN0cmljdEZvcm1Hcm91cDxUPj4oe30gYXMgYW55KTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSkpIGZvcm0uYWRkQ29udHJvbChrZXksIG5ldyBGb3JtQ29udHJvbChkYXRhW2tleV0pKTtcbiAgICByZXR1cm4gZm9ybTtcbiAgfTtcblxuICBmb3JtU2NoZW1hVG9Gb3JtR3JvdXAgPSA8VCBleHRlbmRzIHsgW3g6IHN0cmluZ106IGFueSB9PihzY2hlbWE6IElGb3JtU2NoZW1hW10sIGRhdGE/OiBUKSA9PiB7XG4gICAgY29uc3QgZm9ybSA9IG5ldyBGb3JtR3JvdXA8SVN0cmljdEZvcm1Hcm91cDxUPj4oe30gYXMgYW55KTtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygc2NoZW1hKSBmb3JtLmFkZENvbnRyb2woaXRlbS5maWVsZC50b1N0cmluZygpLCBuZXcgRm9ybUNvbnRyb2woZGF0YVtpdGVtLmZpZWxkLnRvU3RyaW5nKCldKSk7XG4gICAgcmV0dXJuIGZvcm07XG4gIH07XG5cbiAgdGltZUNvZGVCbG9jayA9IDxUPihsYWJlbDogc3RyaW5nLCBjYjogKCkgPT4gVCkgPT4ge1xuICAgIGNvbnN0IHN0YXJ0VEltZSA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcmVzID0gY2IoKTtcbiAgICBjb25zdCBlbmRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBjb25zb2xlLmxvZyhsYWJlbCwgc3RhcnRUSW1lLCBlbmRUaW1lLCAoZW5kVGltZSAtIHN0YXJ0VEltZSkgLyAxMDAwICsgJ3NlYycpO1xuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBudWxsIG9yIHVuZGVmaW5lZCBmaWVsZHMgZnJvbSBhbiBvYmplY3RcbiAgICogQHBhcmFtIG9iaiBPYmplY3QgdG8gZGVsZXRlIGZyb21cbiAgICogQHJldHVybnNcbiAgICovXG4gIGRlbGV0ZU51bGwgPSA8VD4ob2JqOiBUKSA9PiB7XG4gICAgY29uc3QgcmV0OiBUID0ge30gYXMgYW55O1xuICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgICAgaWYgKG9ialtrZXldID09PSBudWxsIHx8IG9ialtrZXldID09PSB1bmRlZmluZWQgfHwgb2JqW2tleV0gPT09ICcnKSBjb250aW51ZTtcbiAgICAgIGVsc2UgcmV0W2tleV0gPSBvYmpba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -24,7 +24,7 @@ export class ExportTableComponent {
|
|
|
24
24
|
delete this.searchQuery.pageSize;
|
|
25
25
|
}
|
|
26
26
|
async downloadCSV(data = this.data(), label = this.label()) {
|
|
27
|
-
if (this.loading)
|
|
27
|
+
if (this.loading())
|
|
28
28
|
return;
|
|
29
29
|
this.loading.set(true);
|
|
30
30
|
const displayedColumns = this.displayedColumns();
|
|
@@ -74,4 +74,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImpor
|
|
|
74
74
|
type: Input,
|
|
75
75
|
args: ['searchQuery']
|
|
76
76
|
}] } });
|
|
77
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy9leHBvcnQtdGFibGUvZXhwb3J0LXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy9leHBvcnQtdGFibGUvZXhwb3J0LXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVwRCxPQUFPLEVBQWMsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUZBQWlGLENBQUM7QUFDdEgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSwrRUFBK0UsQ0FBQztBQUNwRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7O0FBVWxFLE1BQU0sT0FBTyxvQkFBb0I7SUFSakM7UUFTRSxTQUFJLEdBQUcsS0FBSyxFQUFTLENBQUM7UUFDdEIscUJBQWdCLEdBQUcsS0FBSyxFQUFjLENBQUM7UUFRdkMsVUFBSyxHQUFHLEtBQUssRUFBVSxDQUFDO1FBQ3hCLGFBQVEsR0FBRyxLQUFLLEVBQVcsQ0FBQztRQUM1QixZQUFPLEdBQUcsTUFBTSxDQUFVLEtBQUss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RSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7OEdBOURVLG9CQUFvQjtrR0FBcEIsb0JBQW9CLG8zQkNuQmpDLDRPQVFBLDBERFNZLFlBQVk7OzJGQUVYLG9CQUFvQjtrQkFSaEMsU0FBUzsrQkFDRSxrQkFBa0IsY0FHaEIsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDLENBQUMsWUFBWSxDQUFDOzhCQUtkLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRW9CLFlBQVk7c0JBQXJDLEtBQUs7dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIGluamVjdCwgaW5wdXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUdldFF1ZXJ5LCBUYWJsZUNvbCB9IGZyb20gJy4uLy4uL21vZGVscy9pbmRleC5tb2RlbCc7XG5pbXBvcnQgeyBCdG5Db21wb25lbnQgfSBmcm9tICcuLi9idG4vYnRuLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJVGFibGVTZWFyY2hSZXNwIH0gZnJvbSAnLi4vdGFibGUtaHR0cHMvdGFibGUtaHR0cHMuY29tcG9uZW50JztcbmltcG9ydCB7IE9ic2VydmFibGUsIGxhc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBVc2VyQWN0aXZpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vUmV1c2FibGVzL3JldXNhYmxlLXBhZ2VzL3VzZXItYWN0aXZpdHkvdWEtZXh0cmFzL3VzZXItYWN0aXZpdHkuc2VydmljZSc7XG5pbXBvcnQgeyBVdGlsaXR5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL1NlcnZpY2VzL3V0aWxpdHkuc2VydmljZSc7XG5pbXBvcnQgeyBFVUEgfSBmcm9tICcuLi8uLi8uLi9SZXVzYWJsZXMvcmV1c2FibGUtcGFnZXMvdXNlci1hY3Rpdml0eS91YS1leHRyYXMvdXNlci1hY3Rpdml0eS5tb2RlbCc7XG5pbXBvcnQgeyBUYWJsZVNlcnZpY2UgfSBmcm9tICcuLi90YWJsZS1wbGFpbi90YWJsZS1wbGFpbi5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWV4cG9ydC10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9leHBvcnQtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9leHBvcnQtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtCdG5Db21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBFeHBvcnRUYWJsZUNvbXBvbmVudCB7XG4gIGRhdGEgPSBpbnB1dDxhbnlbXT4oKTtcbiAgZGlzcGxheWVkQ29sdW1ucyA9IGlucHV0PFRhYmxlQ29sW10+KCk7XG4gIEBJbnB1dCgpIHNlYXJjaEZ1bmM6IChkYXRhOiBhbnkpID0+IE9ic2VydmFibGU8SVRhYmxlU2VhcmNoUmVzcDxhbnk+PjtcbiAgc2VhcmNoUXVlcnk6IElHZXRRdWVyeTtcbiAgQElucHV0KCdzZWFyY2hRdWVyeScpIHNldCBfc2VhcmNoUXVlcnkodjogeyBbeDogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB9KSB7XG4gICAgdGhpcy5zZWFyY2hRdWVyeSA9IGNsb25lRGVlcCh2IHx8IHt9KTtcbiAgICBkZWxldGUgdGhpcy5zZWFyY2hRdWVyeS5wYWdlTnVtYmVyO1xuICAgIGRlbGV0ZSB0aGlzLnNlYXJjaFF1ZXJ5LnBhZ2VTaXplO1xuICB9XG4gIGxhYmVsID0gaW5wdXQ8c3RyaW5nPigpO1xuICBkaXNhYmxlZCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIGxvYWRpbmcgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHB1YmxpYyB1YVMgPSBpbmplY3QoVXNlckFjdGl2aXR5U2VydmljZSk7XG4gIHB1YmxpYyB0YWJsZVMgPSBpbmplY3QoVGFibGVTZXJ2aWNlKTtcbiAgcHVibGljIHVTID0gaW5qZWN0KFV0aWxpdHlTZXJ2aWNlKTtcblxuICBhc3luYyBkb3dubG9hZENTVihkYXRhOiBhbnlbXSA9IHRoaXMuZGF0YSgpLCBsYWJlbDogc3RyaW5nID0gdGhpcy5sYWJlbCgpKSB7XG4gICAgaWYgKHRoaXMubG9hZGluZygpKSByZXR1cm47XG4gICAgdGhpcy5sb2FkaW5nLnNldCh0cnVlKTtcbiAgICBjb25zdCBkaXNwbGF5ZWRDb2x1bW5zID0gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zKCk7XG4gICAgaWYgKHRoaXMuc2VhcmNoRnVuYykge1xuICAgICAgY29uc3QgZmlyc3RSZXN1bHQgPSBhd2FpdCBsYXN0VmFsdWVGcm9tKHRoaXMuc2VhcmNoRnVuYyh7IC4uLnRoaXMuc2VhcmNoUXVlcnksIHBhZ2VTaXplOiAxIH0pKTtcbiAgICAgIC8vIGRlYnVnZ2VyO1xuICAgICAgY29uc3QgcmVzdWx0c0xlbmd0aCA9IGZpcnN0UmVzdWx0Py50b3RhbCB8fCBmaXJzdFJlc3VsdD8udG90YWxFbGVtZW50cztcbiAgICAgIGNvbnN0IGZ1bGxSZXN1bHQgPSBhd2FpdCBsYXN0VmFsdWVGcm9tKHRoaXMuc2VhcmNoRnVuYyh7IC4uLnRoaXMuc2VhcmNoUXVlcnksIHBhZ2VTaXplOiByZXN1bHRzTGVuZ3RoIH0pKTtcbiAgICAgIGRhdGEgPSBmdWxsUmVzdWx0LmNvbnRlbnQgfHwgZnVsbFJlc3VsdD8ucGFnZT8uY29udGVudDtcbiAgICB9XG4gICAgY29uc3QgZG9jVGl0bGUgPSBgJHtsYWJlbCB8fCAnVGFibGUnfSAke25ldyBEYXRlKCkudG9Mb2NhbGVTdHJpbmcoKS5yZXBsYWNlKCcsICcsICctJykucmVwbGFjZUFsbCgnOicsICctJyl9ICR7dGhpcy5kaXNwbGF5ZWRDb2x1bW5zXG4gICAgICA/Lmxlbmd0aH14JHtkYXRhPy5sZW5ndGh9LmNzdmA7XG5cbiAgICB0aGlzLnRhYmxlUy5hcnJheVRvQ1NWV29ya2VyXG4gICAgICA/IHRoaXMudGFibGVTLmFycmF5VG9DU1ZXb3JrZXIoXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBkb2NUaXRsZSxcbiAgICAgICAgICBkaXNwbGF5ZWRDb2x1bW5zLm1hcCgoeCkgPT4geC5mLnRvU3RyaW5nKCkpLFxuICAgICAgICApXG4gICAgICA6IHRoaXMudVMuYXJyYXlUb0NTVihkYXRhLCBkb2NUaXRsZSwgZGlzcGxheWVkQ29sdW1ucyk7XG4gICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgLy8gY29uc3QgY3N2QXJyYXkgPVxuICAgIC8vICAgYCR7dGhpcy5kaXNwbGF5ZWRDb2x1bW5zLm1hcCgoeCkgPT4gdXNlci1seC50KS5qb2luKCcsJyl9XFxyXFxuYCArXG4gICAgLy8gICBkYXRhXG4gICAgLy8gICAgIC5tYXAoKHgpID0+XG4gICAgLy8gICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zXG4gICAgLy8gICAgICAgICAubWFwKCh5KSA9PiB4W3kuZl0/LnRvU3RyaW5nKCk/LnJlcGxhY2UoLywvZywgJycpKVxuICAgIC8vICAgICAgICAgLmpvaW4oJywnKVxuICAgIC8vICAgICApXG4gICAgLy8gICAgIC5qb2luKCdcXHJcXG4nKTtcbiAgICAvLyAvLyBjb25zb2xlLmxvZyhjc3ZBcnJheSk7XG4gICAgLy8gLy8gZGVidWdnZXJcblxuICAgIC8vIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgLy8gY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtjc3ZBcnJheV0sIHsgdHlwZTogJ3RleHQvY3N2JyB9KTtcbiAgICAvLyBjb25zdCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblxuICAgIC8vIGEuaHJlZiA9IHVybDtcbiAgICAvLyBhLmRvd25sb2FkID0gZG9jVGl0bGU7XG4gICAgLy8gYS5jbGljaygpO1xuICAgIC8vIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG4gICAgLy8gYS5yZW1vdmUoKTtcbiAgICB0aGlzLnVhUy5hZGQoeyBjb2RlOiBFVUEuZG93bmxvYWRlZCwgYWN0aXZpdHlEZXNjcmlwdGlvbjogZG9jVGl0bGUgfSk7XG4gIH1cbn1cbiIsIjxhcHAtYnRuXG4gIGdyb3VwPVwiZG93bmxvYWRcIlxuICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQoKSB8fCAhZGlzcGxheWVkQ29sdW1ucygpPy5sZW5ndGhcIlxuICBbc2hvd0hlbHBJY29uXT1cImZhbHNlXCJcbiAgaGVscD1cIkV4cG9ydCBUYWJsZVwiXG4gIFtsb2FkaW5nXT1cImxvYWRpbmcoKVwiXG4gIFtleGNsdWRlTG9nZ2luZ109XCJ0cnVlXCJcbiAgKG1jbGljayk9XCJkb3dubG9hZENTVigpXCIgLz5cbiJdfQ==
|